diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/4/docu.png b/4/docu.png new file mode 100644 index 0000000000..f458149e3c Binary files /dev/null and b/4/docu.png differ diff --git a/4/图片.png b/4/图片.png new file mode 100644 index 0000000000..2e4d675f90 Binary files /dev/null and b/4/图片.png differ diff --git a/404.html b/404.html index fe2a0f448c..b1113f3c54 100644 --- a/404.html +++ b/404.html @@ -2,13 +2,57 @@ - -Page Not Found | My Site - - - + +Page Not Found | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/446.sw.js b/446.sw.js new file mode 100644 index 0000000000..f481f459ac --- /dev/null +++ b/446.sw.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[446],{446:(e,t,s)=>{s.r(t),s.d(t,{default:()=>o});s(511),s(510),s(569),s(815);s(295);var c=s(650);s(85),s(703);var a=s(18),n=s(451);s(389),s(445);const r={cacheWillUpdate:async({response:e})=>200===e.status||0===e.status?e:null};s(659);class u extends n._{constructor(e={}){super(e),this.plugins.some((e=>"cacheWillUpdate"in e))||this.plugins.unshift(r)}async _handle(e,t){const s=t.fetchAndCachePut(e).catch((()=>{}));t.waitUntil(s);let c,n=await t.cacheMatch(e);if(n)0;else{0;try{n=await s}catch(e){e instanceof Error&&(c=e)}}if(!n)throw new a.V("no-response",{url:e.url,error:c});return n}}s(540);function o(e){e.debug&&console.log("[Docusaurus-PWA][SW]: running swCustom code",e),(0,c.X)((e=>[/graph\.facebook\.com\/.*\/picture/,/netlify\.com\/img/,/avatars1\.githubusercontent/].some((t=>e.url.href.match(t)))),new u)}}}]); \ No newline at end of file diff --git a/__docusaurus/debug.html b/__docusaurus/debug.html new file mode 100644 index 0000000000..533ada8047 --- /dev/null +++ b/__docusaurus/debug.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Site config

{
title:"Docusaurus",
tagline:"Build optimized websites quickly, focus on your content",
organizationName:"facebook",
projectName:"docusaurus",
baseUrl:"/",
baseUrlIssueBanner:true,
url:"https://docusaurus.io",
trailingSlash:false,
stylesheets:[
{
href:"/katex/katex.min.css",
type:"text/css"
}
],
i18n:{
defaultLocale:"en",
locales:[],
path:"i18n",
localeConfigs:{
}
},
webpack:{
},
markdown:{
format:"detect",
mermaid:true,
mdx1Compat:{
comments:true,
admonitions:true,
headingIds:true
},
remarkRehypeOptions:{
footnoteLabel:"Footnotes"
}
},
onBrokenLinks:"throw",
onBrokenAnchors:"throw",
onBrokenMarkdownLinks:"warn",
favicon:"img/docusaurus.ico",
customFields:{
crashTest:false,
isDeployPreview:false,
description:"An optimized site generator in React. Docusaurus helps you to move fast and write content. Build documentation websites, blogs, marketing pages, and more."
},
staticDirectories:[
"static",
"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/_asset-tests",
"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/non-existent"
],
themes:[
"live-codeblock",
null
],
plugins:[],
presets:[
[
"classic",
{}
]
],
themeConfig:{
liveCodeBlock:{
playgroundPosition:"bottom"
},
docs:{
sidebar:{},
versionPersistence:"localStorage"
},
colorMode:{
defaultMode:"light",
disableSwitch:false,
respectPrefersColorScheme:true
},
announcementBar:{
id:"announcementBar-v3.2",
content:"🎉️ <b><a target="_blank" href="https://docusaurus.io/blog/releases/3.2">Docusaurus v3.2</a> is out!</b> 🥳️",
isCloseable:true
},
prism:{
additionalLanguages:[],
magicComments:[
{},
{}
],
theme:{},
darkTheme:{}
},
image:"img/docusaurus-social-card.jpg",
algolia:{
appId:"X1Z85QJPUV",
apiKey:"bf7211c161e8205da2f933a02534105a",
indexName:"docusaurus-2",
contextualSearch:true,
searchParameters:{},
searchPagePath:"search"
},
navbar:{
hideOnScroll:true,
title:"Docusaurus",
logo:{},
items:[]
},
footer:{
style:"dark",
links:[
{},
{},
{},
{}
],
logo:{},
copyright:"Copyright © 2024 Meta Platforms, Inc. Built with Docusaurus."
},
metadata:[
],
tableOfContents:{
minHeadingLevel:2,
maxHeadingLevel:3
},
mermaid:{
theme:{},
options:{}
}
},
onDuplicateRoutes:"warn",
scripts:[
],
headTags:[
],
clientModules:[
],
titleDelimiter:"|",
noIndex:false
}
+ + \ No newline at end of file diff --git a/__docusaurus/debug.html.html b/__docusaurus/debug.html.html new file mode 100644 index 0000000000..44d23d59f0 --- /dev/null +++ b/__docusaurus/debug.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/config.html b/__docusaurus/debug/config.html new file mode 100644 index 0000000000..4af8efb8c8 --- /dev/null +++ b/__docusaurus/debug/config.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Site config

{
title:"Docusaurus",
tagline:"Build optimized websites quickly, focus on your content",
organizationName:"facebook",
projectName:"docusaurus",
baseUrl:"/",
baseUrlIssueBanner:true,
url:"https://docusaurus.io",
trailingSlash:false,
stylesheets:[
{
href:"/katex/katex.min.css",
type:"text/css"
}
],
i18n:{
defaultLocale:"en",
locales:[],
path:"i18n",
localeConfigs:{
}
},
webpack:{
},
markdown:{
format:"detect",
mermaid:true,
mdx1Compat:{
comments:true,
admonitions:true,
headingIds:true
},
remarkRehypeOptions:{
footnoteLabel:"Footnotes"
}
},
onBrokenLinks:"throw",
onBrokenAnchors:"throw",
onBrokenMarkdownLinks:"warn",
favicon:"img/docusaurus.ico",
customFields:{
crashTest:false,
isDeployPreview:false,
description:"An optimized site generator in React. Docusaurus helps you to move fast and write content. Build documentation websites, blogs, marketing pages, and more."
},
staticDirectories:[
"static",
"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/_asset-tests",
"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/non-existent"
],
themes:[
"live-codeblock",
null
],
plugins:[],
presets:[
[
"classic",
{}
]
],
themeConfig:{
liveCodeBlock:{
playgroundPosition:"bottom"
},
docs:{
sidebar:{},
versionPersistence:"localStorage"
},
colorMode:{
defaultMode:"light",
disableSwitch:false,
respectPrefersColorScheme:true
},
announcementBar:{
id:"announcementBar-v3.2",
content:"🎉️ <b><a target="_blank" href="https://docusaurus.io/blog/releases/3.2">Docusaurus v3.2</a> is out!</b> 🥳️",
isCloseable:true
},
prism:{
additionalLanguages:[],
magicComments:[
{},
{}
],
theme:{},
darkTheme:{}
},
image:"img/docusaurus-social-card.jpg",
algolia:{
appId:"X1Z85QJPUV",
apiKey:"bf7211c161e8205da2f933a02534105a",
indexName:"docusaurus-2",
contextualSearch:true,
searchParameters:{},
searchPagePath:"search"
},
navbar:{
hideOnScroll:true,
title:"Docusaurus",
logo:{},
items:[]
},
footer:{
style:"dark",
links:[
{},
{},
{},
{}
],
logo:{},
copyright:"Copyright © 2024 Meta Platforms, Inc. Built with Docusaurus."
},
metadata:[
],
tableOfContents:{
minHeadingLevel:2,
maxHeadingLevel:3
},
mermaid:{
theme:{},
options:{}
}
},
onDuplicateRoutes:"warn",
scripts:[
],
headTags:[
],
clientModules:[
],
titleDelimiter:"|",
noIndex:false
}
+ + \ No newline at end of file diff --git a/__docusaurus/debug/config.html.html b/__docusaurus/debug/config.html.html new file mode 100644 index 0000000000..8f77c59a96 --- /dev/null +++ b/__docusaurus/debug/config.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/content.html b/__docusaurus/debug/content.html new file mode 100644 index 0000000000..e50c12ea3a --- /dev/null +++ b/__docusaurus/debug/content.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Plugin content

docusaurus-plugin-content-docs

default
{
loadedVersions:[
{}
]
}
community
{
loadedVersions:[
{}
]
}
docs-tests
{
loadedVersions:[
{}
]
}

docusaurus-plugin-content-blog

default
{
blogSidebarTitle:"All our posts",
blogPosts:[],
blogListPaginated:[],
blogTags:{
/blog/tags/release:{},
/blog/tags/maintenance:{},
/blog/tags/recap:{},
/blog/tags/search:{},
/blog/tags/beta:{},
/blog/tags/i-18-n:{},
/blog/tags/endi:{},
/blog/tags/tribute:{},
/blog/tags/birth:{},
/blog/tags/new:{},
/blog/tags/adoption:{},
/blog/tags/profilo:{},
/blog/tags/documentation:{},
/blog/tags/blog:{},
/blog/tags/docusaurus:{}
},
blogTagsListPath:"/blog/tags"
}
blog-tests
{
blogSidebarTitle:"Recent posts",
blogPosts:[],
blogListPaginated:[],
blogTags:{
/tests/blog/tags/paginated-tag:{},
/tests/blog/tags/blog:{},
/tests/blog/tags/visibility:{},
/tests/blog/tags/unlisted:{},
/tests/blog/tags/docusaurus:{},
/tests/blog/tags/long-long:{},
/tests/blog/tags/long-long-long:{},
/tests/blog/tags/long-long-long-long:{},
/tests/blog/tags/long:{},
/tests/blog/tags/long-long-long-long-long:{}
},
blogTagsListPath:"/tests/blog/tags"
}

docusaurus-plugin-content-pages

default
[]
pages-tests
[]

changelog-plugin

default
{
blogSidebarTitle:"Changelog",
blogPosts:[],
blogListPaginated:[],
blogTags:{
},
blogTagsListPath:"/changelog/tags"
}
+ + \ No newline at end of file diff --git a/__docusaurus/debug/content.html.html b/__docusaurus/debug/content.html.html new file mode 100644 index 0000000000..1f75afd6e5 --- /dev/null +++ b/__docusaurus/debug/content.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/globalData.html b/__docusaurus/debug/globalData.html new file mode 100644 index 0000000000..8154981081 --- /dev/null +++ b/__docusaurus/debug/globalData.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Global data

{
docusaurus-plugin-content-docs:{
default:{
path:"/docs",
versions:[
{}
],
breadcrumbs:true
},
community:{
path:"/community",
versions:[
{}
],
breadcrumbs:true
},
docs-tests:{
path:"/tests/docs",
versions:[
{}
],
breadcrumbs:true
}
},
docusaurus-plugin-google-gtag:{
default:{
trackingID:[
"G-E5CR2Q1NRE"
],
anonymizeIP:false,
id:"default"
}
}
}
+ + \ No newline at end of file diff --git a/__docusaurus/debug/globalData.html.html b/__docusaurus/debug/globalData.html.html new file mode 100644 index 0000000000..bbcbbb9e66 --- /dev/null +++ b/__docusaurus/debug/globalData.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/metadata.html b/__docusaurus/debug/metadata.html new file mode 100644 index 0000000000..180dfd4344 --- /dev/null +++ b/__docusaurus/debug/metadata.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Site Metadata

Docusaurus Version: 3.2.1
Site Version: 3.2.1

Plugins and themes

  • 3.2.1
    docusaurus-plugin-content-docs
    Type: package
  • 3.2.1
    docusaurus-plugin-content-blog
    Type: package
  • 3.2.1
    docusaurus-plugin-content-pages
    Type: package
  • 3.2.1
    docusaurus-plugin-debug
    Type: package
  • 3.2.1
    docusaurus-plugin-google-gtag
    Type: package
  • 3.2.1
    docusaurus-plugin-sitemap
    Type: package
  • 3.2.1
    docusaurus-theme-classic
    Type: package
  • 3.2.1
    docusaurus-theme-search-algolia
    Type: package
  • changelog-plugin
    Type: project
  • 3.2.1
    docusaurus-plugin-client-redirects
    Type: package
  • 3.2.1
    docusaurus-plugin-ideal-image
    Type: package
  • 3.2.1
    docusaurus-plugin-pwa
    Type: package
  • 3.2.1
    docusaurus-theme-mermaid
    Type: package
  • feature-requests-plugin
    Type: project
  • client-module-test-plugin
    Type: local
  • 3.2.1
    docusaurus-theme-live-codeblock
    Type: package
  • swizzle-theme-tests
    Type: local
+ + \ No newline at end of file diff --git a/__docusaurus/debug/metadata.html.html b/__docusaurus/debug/metadata.html.html new file mode 100644 index 0000000000..3ad8b689d0 --- /dev/null +++ b/__docusaurus/debug/metadata.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/registry.html b/__docusaurus/debug/registry.html new file mode 100644 index 0000000000..3fb0fbcd36 --- /dev/null +++ b/__docusaurus/debug/registry.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Registry

  • Aliased Path: @theme/DocItem
    Resolved Path: 93875
  • Aliased Path: @site/changelog/source/2.0.0-alpha.72.md?truncated=true
    Resolved Path: 21344
  • Aliased Path: @generated/docusaurus-plugin-content-docs/default/p/docs-category-getting-started-8c0.json
    Resolved Path: 98639
  • Aliased Path: @site/changelog/source/2.0.0-beta.5.md
    Resolved Path: 897
  • Aliased Path: @site/blog/2022/01-24-docusaurus-2021-recap/index.mdx?truncated=true
    Resolved Path: 78152
  • Aliased Path: @site/changelog/source/2.0.0-alpha.31.md?truncated=true
    Resolved Path: 7927
  • Aliased Path: @site/changelog/source/2.0.0-beta.13.md
    Resolved Path: 76393
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/__plugin.json
    Resolved Path: 28615
  • Aliased Path: @site/_dogfooding/_pages tests/layout-no-children.tsx
    Resolved Path: 79818
  • Aliased Path: @site/_dogfooding/_pages tests/error-boundary-tests.tsx
    Resolved Path: 9058
  • Aliased Path: @site/_dogfooding/_docs tests/folder with space/doc 1.mdx
    Resolved Path: 76657
  • Aliased Path: @site/_dogfooding/_pages tests/link-tests.tsx
    Resolved Path: 2086
  • Aliased Path: @theme/ChangelogPage
    Resolved Path: 6722
  • Aliased Path: @site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx
    Resolved Path: 51309
  • Aliased Path: @site/changelog/source/2.0.0-alpha.20.md
    Resolved Path: 21935
  • Aliased Path: @theme/BlogTagsListPage
    Resolved Path: 32843
  • Aliased Path: @site/blog/releases/3.1/index.mdx
    Resolved Path: 66819
  • Aliased Path: @site/changelog/source/2.0.0-alpha.29.md
    Resolved Path: 91072
  • Aliased Path: @site/docs/api/plugins/plugin-google-analytics.mdx
    Resolved Path: 63443
  • Aliased Path: @site/docs/api/themes/theme-configuration.mdx
    Resolved Path: 22091
  • Aliased Path: @site/_dogfooding/_pages tests/diagrams.mdx
    Resolved Path: 16697
  • Aliased Path: @site/blog/releases/3.2/index.mdx?truncated=true
    Resolved Path: 47835
  • Aliased Path: @site/docs/deployment.mdx
    Resolved Path: 25871
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-3-_.mdx
    Resolved Path: 9133
  • Aliased Path: @site/docs/api/misc/create-docusaurus.mdx
    Resolved Path: 24048
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-docusaurus-page-2-9d9.json
    Resolved Path: 70681
  • Aliased Path: @site/changelog/source/2.0.0-beta.19.md?truncated=true
    Resolved Path: 3381
  • Aliased Path: @site/changelog/source/2.0.0-beta.22.md
    Resolved Path: 88675
  • Aliased Path: @site/changelog/source/2.0.0-beta.17.md?truncated=true
    Resolved Path: 75736
  • Aliased Path: @site/blog/releases/2.2/index.mdx
    Resolved Path: 73660
  • Aliased Path: @site/changelog/source/2.0.0-alpha.54.md?truncated=true
    Resolved Path: 35134
  • Aliased Path: @site/changelog/source/3.2.1.md
    Resolved Path: 21887
  • Aliased Path: @site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx
    Resolved Path: 43316
  • Aliased Path: @theme/ChangelogList
    Resolved Path: 31426
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-code-blocks.mdx
    Resolved Path: 28363
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx?truncated=true
    Resolved Path: 39641
  • Aliased Path: @site/docs/api/plugins/plugin-content-docs.mdx
    Resolved Path: 37595
  • Aliased Path: @site/blog/releases/2.4/index.mdx
    Resolved Path: 38260
  • Aliased Path: @site/changelog/source/2.0.0-beta.20.md
    Resolved Path: 39224
  • Aliased Path: @site/blog/2022/09-01-docusaurus-2.1/index.mdx?truncated=true
    Resolved Path: 48653
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-docusaurus-f4f.json
    Resolved Path: 59872
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-_-5.mdx
    Resolved Path: 31014
  • Aliased Path: @site/docs/api/plugins/plugin-sitemap.mdx
    Resolved Path: 60405
  • Aliased Path: @site/blog/2022/09-01-docusaurus-2.1/index.mdx
    Resolved Path: 16506
  • Aliased Path: @site/changelog/source/2.2.0.md
    Resolved Path: 26542
  • Aliased Path: @site/changelog/source/2.0.0-beta.21.md
    Resolved Path: 66150
  • Aliased Path: @site/_dogfooding/_blog tests/2023-08-05.mdx
    Resolved Path: 38730
  • Aliased Path: @generated/docusaurus-plugin-debug/default/p/docusaurus-debug-content-4f8.json
    Resolved Path: 23888
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-long-long-long-long-long-9a2.json
    Resolved Path: 20232
  • Aliased Path: @site/docs/migration/v2/migration-automated.mdx
    Resolved Path: 91507
  • Aliased Path: @site/changelog/source/2.0.0-alpha.25.md
    Resolved Path: 93892
  • Aliased Path: @site/changelog/source/2.0.0-beta.12.md
    Resolved Path: 59009
  • Aliased Path: @site/blog/2018/09-11-Towards-Docusaurus-2.mdx?truncated=true
    Resolved Path: 86949
  • Aliased Path: @site/changelog/source/2.0.0-alpha.65.md?truncated=true
    Resolved Path: 86057
  • Aliased Path: @site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx
    Resolved Path: 72807
  • Aliased Path: @site/changelog/source/2.0.0-beta.1.md?truncated=true
    Resolved Path: 57715
  • Aliased Path: @site/_dogfooding/_blog tests/2023-07-19-b.mdx
    Resolved Path: 8192
  • Aliased Path: @theme/DocCategoryGeneratedIndexPage
    Resolved Path: 96477
  • Aliased Path: @site/changelog/source/2.0.0-beta.1.md
    Resolved Path: 38240
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx
    Resolved Path: 47706
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-toc.mdx
    Resolved Path: 47336
  • Aliased Path: @site/blog/releases/3.2/index.mdx
    Resolved Path: 69476
  • Aliased Path: @site/_dogfooding/_pages tests/tabs-tests.mdx
    Resolved Path: 53694
  • Aliased Path: @site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx
    Resolved Path: 83656
  • Aliased Path: @site/changelog/source/2.0.0-beta.5.md?truncated=true
    Resolved Path: 39045
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-recap-2ed.json
    Resolved Path: 55911
  • Aliased Path: @theme/SearchPage
    Resolved Path: 38548
  • Aliased Path: @site/changelog/source/2.0.0-beta.20.md?truncated=true
    Resolved Path: 30923
  • Aliased Path: @site/changelog/source/2.0.0-alpha.74.md?truncated=true
    Resolved Path: 54098
  • Aliased Path: @site/changelog/source/2.0.0-alpha.60.md?truncated=true
    Resolved Path: 47478
  • Aliased Path: @site/docs/search.mdx
    Resolved Path: 82720
  • Aliased Path: @site/changelog/source/2.0.0-alpha.57.md
    Resolved Path: 26778
  • Aliased Path: @site/src/pages/index.tsx
    Resolved Path: 45098
  • Aliased Path: @theme/MDXPage
    Resolved Path: 32266
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx
    Resolved Path: 8453
  • Aliased Path: @site/community/3-contributing.mdx
    Resolved Path: 45378
  • Aliased Path: @site/docs/api/plugins/plugin-content-blog.mdx
    Resolved Path: 86681
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-tabs.mdx
    Resolved Path: 74820
  • Aliased Path: @site/_dogfooding/_docs tests/doc-with-last-update.mdx
    Resolved Path: 19459
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx
    Resolved Path: 10921
  • Aliased Path: @site/docs/api/plugins/plugin-client-redirects.mdx
    Resolved Path: 2830
  • Aliased Path: @theme/DebugConfig
    Resolved Path: 56118
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-beta-2cd.json
    Resolved Path: 45160
  • Aliased Path: @site/blog/releases/2.4/index.mdx?truncated=true
    Resolved Path: 66778
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-page-4-30b.json
    Resolved Path: 30816
  • Aliased Path: @site/blog/2021/11-21-algolia-docsearch-migration/index.mdx?truncated=true
    Resolved Path: 3560
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-archive-80c.json
    Resolved Path: 5556
  • Aliased Path: @site/changelog/source/2.0.0-alpha.37.md
    Resolved Path: 89747
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-blog-476.json
    Resolved Path: 5001
  • Aliased Path: @site/changelog/source/2.0.0-beta.6.md
    Resolved Path: 88570
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-long-long-06d.json
    Resolved Path: 91801
  • Aliased Path: @site/docs/advanced/ssg.mdx
    Resolved Path: 30291
  • Aliased Path: @site/changelog/source/2.0.0-alpha.69.md?truncated=true
    Resolved Path: 78667
  • Aliased Path: @site/changelog/source/2.0.0-alpha.32.md?truncated=true
    Resolved Path: 50737
  • Aliased Path: @site/community/5-release-process.mdx
    Resolved Path: 9621
  • Aliased Path: @site/changelog/source/2.0.0-alpha.65.md
    Resolved Path: 70026
  • Aliased Path: @site/changelog/source/2.0.0-alpha.58.md
    Resolved Path: 29488
  • Aliased Path: @site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx
    Resolved Path: 3986
  • Aliased Path: @site/changelog/source/2.0.0-alpha.22.md?truncated=true
    Resolved Path: 44627
  • Aliased Path: @site/changelog/source/2.0.0-alpha.27.md
    Resolved Path: 35233
  • Aliased Path: @site/_dogfooding/_pages tests/markdown-tests-mdx.mdx
    Resolved Path: 60198
  • Aliased Path: @site/_dogfooding/_blog tests/2023-08-05.mdx?truncated=true
    Resolved Path: 39219
  • Aliased Path: @site/docs/guides/whats-next.mdx
    Resolved Path: 64787
  • Aliased Path: @site/changelog/source/2.0.0-alpha.39.md
    Resolved Path: 91624
  • Aliased Path: @site/changelog/source/2.0.0-beta.14.md
    Resolved Path: 60794
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-22-no-author.mdx?truncated=true
    Resolved Path: 27592
  • Aliased Path: @site/changelog/source/2.0.0-alpha.28.md
    Resolved Path: 16824
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-visibility-1bb.json
    Resolved Path: 70701
  • Aliased Path: @site/changelog/source/3.0.1.md
    Resolved Path: 36478
  • Aliased Path: @site/_dogfooding/_pages tests/analytics.tsx
    Resolved Path: 46986
  • Aliased Path: @site/docs/guides/docs/docs-create-doc.mdx
    Resolved Path: 95661
  • Aliased Path: @site/_dogfooding/_pages tests/seo.md
    Resolved Path: 69409
  • Aliased Path: @site/changelog/source/2.0.0-beta.16.md?truncated=true
    Resolved Path: 59529
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx
    Resolved Path: 39199
  • Aliased Path: @site/changelog/source/2.0.0-alpha.61.md
    Resolved Path: 49339
  • Aliased Path: @site/changelog/source/2.4.1.md
    Resolved Path: 46036
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx
    Resolved Path: 44028
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx
    Resolved Path: 35243
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-search-304.json
    Resolved Path: 29173
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-release-b5c.json
    Resolved Path: 96178
  • Aliased Path: @site/blog/releases/3.1/index.mdx?truncated=true
    Resolved Path: 1149
  • Aliased Path: @site/docs/api/misc/eslint-plugin/README.mdx
    Resolved Path: 38722
  • Aliased Path: @site/changelog/source/2.0.0-alpha.64.md?truncated=true
    Resolved Path: 36100
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-page-2-cc6.json
    Resolved Path: 20500
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx
    Resolved Path: 37788
  • Aliased Path: @site/changelog/source/2.0.0-beta.22.md?truncated=true
    Resolved Path: 82037
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-category-another-category-with-index-5e9.json
    Resolved Path: 30710
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/__plugin.json
    Resolved Path: 94468
  • Aliased Path: @site/docs/api/plugins/plugin-google-gtag.mdx
    Resolved Path: 59610
  • Aliased Path: @theme/DocTagsListPage
    Resolved Path: 28211
  • Aliased Path: @site/changelog/source/2.0.0-beta.4.md
    Resolved Path: 42618
  • Aliased Path: @site/changelog/source/2.0.0-beta.6.md?truncated=true
    Resolved Path: 12915
  • Aliased Path: @site/src/plugins/featureRequests/FeatureRequestsPage
    Resolved Path: 41505
  • Aliased Path: @site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx?truncated=true
    Resolved Path: 36071
  • Aliased Path: @site/_dogfooding/_pages tests/react-18/index.tsx
    Resolved Path: 95637
  • Aliased Path: @site/blog/releases/2.3/index.mdx
    Resolved Path: 32537
  • Aliased Path: @site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx
    Resolved Path: 28950
  • Aliased Path: @site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx
    Resolved Path: 57948
  • Aliased Path: @site/changelog/source/2.0.0-beta.14.md?truncated=true
    Resolved Path: 63685
  • Aliased Path: @site/_dogfooding/_pages tests/hydration-tests.tsx
    Resolved Path: 53745
  • Aliased Path: @site/changelog/source/2.0.0-alpha.56.md?truncated=true
    Resolved Path: 27185
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-c-cf7.json
    Resolved Path: 28376
  • Aliased Path: @site/changelog/source/2.0.1.md?truncated=true
    Resolved Path: 89560
  • Aliased Path: @site/changelog/source/2.0.0.md
    Resolved Path: 56959
  • Aliased Path: @site/docs/i18n/i18n-crowdin.mdx
    Resolved Path: 30855
  • Aliased Path: @site/_dogfooding/_docs tests/tests/ascii/folder/æøå.mdx
    Resolved Path: 12996
  • Aliased Path: @site/changelog/source/2.0.1.md
    Resolved Path: 6493
  • Aliased Path: @site/community/2-resources.mdx
    Resolved Path: 63761
  • Aliased Path: @site/_dogfooding/_pages tests/z-index-tests.tsx
    Resolved Path: 9384
  • Aliased Path: @site/docs/advanced/client.mdx
    Resolved Path: 1743
  • Aliased Path: @site/community/0-support.mdx
    Resolved Path: 26371
  • Aliased Path: @site/docs/browser-support.mdx
    Resolved Path: 92082
  • Aliased Path: @site/changelog/source/2.0.0-beta.3.md
    Resolved Path: 37888
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-26e.json
    Resolved Path: 13567
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-page-2-677.json
    Resolved Path: 97610
  • Aliased Path: @site/blog/2020/01-07-tribute-to-endi.mdx
    Resolved Path: 3838
  • Aliased Path: @generated/feature-requests-plugin/default/__plugin.json
    Resolved Path: 50735
  • Aliased Path: @site/changelog/source/2.0.0-alpha.62.md?truncated=true
    Resolved Path: 24093
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-037.json
    Resolved Path: 88871
  • Aliased Path: @site/changelog/source/2.0.0-alpha.23.md?truncated=true
    Resolved Path: 95382
  • Aliased Path: @site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx
    Resolved Path: 7801
  • Aliased Path: @site/blog/2022/01-24-docusaurus-2021-recap/index.mdx
    Resolved Path: 81833
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx
    Resolved Path: 73967
  • Aliased Path: @site/changelog/source/2.2.0.md?truncated=true
    Resolved Path: 94444
  • Aliased Path: @site/changelog/source/2.0.0-beta.2.md
    Resolved Path: 70813
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-tribute-4fa.json
    Resolved Path: 22611
  • Aliased Path: @site/docs/guides/docs/sidebar/autogenerated.mdx
    Resolved Path: 18615
  • Aliased Path: @site/changelog/source/2.0.0-alpha.30.md?truncated=true
    Resolved Path: 37777
  • Aliased Path: @site/changelog/source/2.0.0-alpha.70.md
    Resolved Path: 15231
  • Aliased Path: @generated/changelog-plugin/default/__plugin.json
    Resolved Path: 32907
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-adoption-bac.json
    Resolved Path: 42031
  • Aliased Path: @site/docs/api/misc/logger/logger.mdx
    Resolved Path: 41363
  • Aliased Path: @site/changelog/source/2.0.0-alpha.71.md
    Resolved Path: 27458
  • Aliased Path: @site/changelog/source/2.4.2.md?truncated=true
    Resolved Path: 58402
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-page-4-23e.json
    Resolved Path: 81033
  • Aliased Path: @site/changelog/source/2.0.0-alpha.57.md?truncated=true
    Resolved Path: 36092
  • Aliased Path: @site/changelog/source/2.0.0-beta.21.md?truncated=true
    Resolved Path: 10015
  • Aliased Path: @site/changelog/source/2.0.0-alpha.59.md
    Resolved Path: 61439
  • Aliased Path: @site/docs/api/plugins/plugin-ideal-image.mdx
    Resolved Path: 42528
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-assets.mdx
    Resolved Path: 14006
  • Aliased Path: @site/_dogfooding/_pages tests/unlisted.mdx
    Resolved Path: 55915
  • Aliased Path: @site/changelog/source/2.0.0-alpha.74.md
    Resolved Path: 83011
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx
    Resolved Path: 12399
  • Aliased Path: @site/community/1-team.mdx
    Resolved Path: 2011
  • Aliased Path: @site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx?truncated=true
    Resolved Path: 26298
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-page-5-b5a.json
    Resolved Path: 91606
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx?truncated=true
    Resolved Path: 9655
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-5-5.mdx
    Resolved Path: 1125
  • Aliased Path: @site/changelog/source/2.4.1.md?truncated=true
    Resolved Path: 78064
  • Aliased Path: @site/src/pages/examples/markdownPageExample.mdx
    Resolved Path: 23850
  • Aliased Path: @site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx
    Resolved Path: 71943
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx
    Resolved Path: 56368
  • Aliased Path: @generated/changelog-plugin/default/p/changelog-page-4-977.json
    Resolved Path: 98402
  • Aliased Path: @site/changelog/source/2.0.0-alpha.53.md
    Resolved Path: 95224
  • Aliased Path: @site/docs/api/plugins/plugin-debug.mdx
    Resolved Path: 81849
  • Aliased Path: @site/changelog/source/2.0.0-alpha.48.md?truncated=true
    Resolved Path: 96126
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-c06.json
    Resolved Path: 80899
  • Aliased Path: @site/blog/2017/12-14-introducing-docusaurus.mdx?truncated=true
    Resolved Path: 60932
  • Aliased Path: @site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx
    Resolved Path: 50233
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-endi-4b5.json
    Resolved Path: 53059
  • Aliased Path: @site/changelog/source/2.0.0-alpha.31.md
    Resolved Path: 71482
  • Aliased Path: @site/docs/api/plugin-methods/i18n-lifecycles.mdx
    Resolved Path: 6290
  • Aliased Path: @site/changelog/source/2.0.0-alpha.26.md?truncated=true
    Resolved Path: 21638
  • Aliased Path: @site/blog/releases/3.0/index.mdx
    Resolved Path: 92471
  • Aliased Path: @site/changelog/source/2.0.0-alpha.64.md
    Resolved Path: 40847
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-math-equations.mdx
    Resolved Path: 11415
  • Aliased Path: @site/changelog/source/2.0.0-alpha.20.md?truncated=true
    Resolved Path: 16124
  • Aliased Path: @site/_dogfooding/_docs tests/tests/toc-partials/index.mdx
    Resolved Path: 97689
  • Aliased Path: @site/changelog/source/2.0.0-alpha.63.md
    Resolved Path: 69986
  • Aliased Path: @site/blog/2020/01-07-tribute-to-endi.mdx?truncated=true
    Resolved Path: 21223
  • Aliased Path: @site/blog/2017/12-14-introducing-docusaurus.mdx
    Resolved Path: 56799
  • Aliased Path: @site/changelog/source/2.0.0.md?truncated=true
    Resolved Path: 86753
  • Aliased Path: @site/blog/2019/12-30-docusaurus-2019-recap.mdx?truncated=true
    Resolved Path: 14542
  • Aliased Path: @theme/DocsRoot
    Resolved Path: 54527
  • Aliased Path: @generated/docusaurus.config
    Resolved Path: 36809
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-long-ce7.json
    Resolved Path: 80553
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-page-3-837.json
    Resolved Path: 49735
  • Aliased Path: @site/changelog/source/2.3.1.md
    Resolved Path: 65714
  • Aliased Path: @site/blog/2021/03-09-releasing-docusaurus-i18n.mdx?truncated=true
    Resolved Path: 52322
  • Aliased Path: @site/community/4-canary.mdx
    Resolved Path: 75449
  • Aliased Path: @site/docs/styling-layout.mdx
    Resolved Path: 74277
  • Aliased Path: @site/changelog/source/2.0.0-alpha.75.md
    Resolved Path: 42794
  • Aliased Path: @site/changelog/source/2.3.0.md?truncated=true
    Resolved Path: 76435
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-react.mdx
    Resolved Path: 9817
  • Aliased Path: ~blog/blog-tests/blog-post-list-prop-blog-tests.json
    Resolved Path: 90224
  • Aliased Path: @site/changelog/source/2.0.0-alpha.66.md?truncated=true
    Resolved Path: 19581
  • Aliased Path: @site/changelog/source/2.0.0-beta.4.md?truncated=true
    Resolved Path: 15829
  • Aliased Path: @site/changelog/source/2.0.0-alpha.36.md
    Resolved Path: 70278
  • Aliased Path: @theme/DebugRegistry
    Resolved Path: 91850
  • Aliased Path: @site/changelog/source/2.0.0-alpha.35.md
    Resolved Path: 57409
  • Aliased Path: @site/_dogfooding/_docs tests/standalone.mdx
    Resolved Path: 13645
  • Aliased Path: @generated/changelog-plugin/default/p/changelog-page-5-a55.json
    Resolved Path: 65833
  • Aliased Path: @theme/BlogTagsPostsPage
    Resolved Path: 7935
  • Aliased Path: @site/changelog/source/2.4.3.md
    Resolved Path: 86160
  • Aliased Path: @site/changelog/source/2.0.0-alpha.27.md?truncated=true
    Resolved Path: 5590
  • Aliased Path: @theme/DebugSiteMetadata
    Resolved Path: 18989
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-4-5.mdx
    Resolved Path: 40198
  • Aliased Path: @site/changelog/source/2.0.0-alpha.66.md
    Resolved Path: 47677
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-2-2.mdx
    Resolved Path: 96645
  • Aliased Path: @site/changelog/source/2.0.0-beta.16.md
    Resolved Path: 55605
  • Aliased Path: @site/changelog/source/2.0.0-beta.0.md
    Resolved Path: 55769
  • Aliased Path: @site/docs/api/themes/theme-classic.mdx
    Resolved Path: 21827
  • Aliased Path: @site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx?truncated=true
    Resolved Path: 605
  • Aliased Path: @site/docs/migration/v2/migration-versioned-sites.mdx
    Resolved Path: 99866
  • Aliased Path: @site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx?truncated=true
    Resolved Path: 15691
  • Aliased Path: @site/docs/api/plugins/plugin-google-tag-manager.mdx
    Resolved Path: 19531
  • Aliased Path: @site/_dogfooding/_pages tests/head-metadata.mdx
    Resolved Path: 70573
  • Aliased Path: @site/_dogfooding/_docs tests/more-test.mdx
    Resolved Path: 8975
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-a-246.json
    Resolved Path: 35795
  • Aliased Path: @site/_dogfooding/_blog tests/2023-07-19-a.mdx
    Resolved Path: 73772
  • Aliased Path: @site/changelog/source/2.0.0-alpha.44.md?truncated=true
    Resolved Path: 18766
  • Aliased Path: @site/changelog/source/2.0.0-alpha.23.md
    Resolved Path: 79442
  • Aliased Path: @site/changelog/source/2.0.0-alpha.59.md?truncated=true
    Resolved Path: 48732
  • Aliased Path: @site/docs/guides/docs/sidebar/items.mdx
    Resolved Path: 70946
  • Aliased Path: @site/docs/playground.mdx
    Resolved Path: 10714
  • Aliased Path: @site/changelog/source/2.0.0-alpha.26.md
    Resolved Path: 41858
  • Aliased Path: @site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx?truncated=true
    Resolved Path: 13412
  • Aliased Path: @site/changelog/source/2.0.0-rc.1.md?truncated=true
    Resolved Path: 34895
  • Aliased Path: @site/changelog/source/2.0.0-alpha.54.md
    Resolved Path: 94188
  • Aliased Path: @site/changelog/source/3.2.1.md?truncated=true
    Resolved Path: 20294
  • Aliased Path: @site/changelog/source/2.0.0-alpha.72.md
    Resolved Path: 21678
  • Aliased Path: @generated/feature-requests-plugin/default/paths.json
    Resolved Path: 81836
  • Aliased Path: @site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx?truncated=true
    Resolved Path: 78444
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx
    Resolved Path: 77569
  • Aliased Path: @site/changelog/source/2.0.0-alpha.44.md
    Resolved Path: 49194
  • Aliased Path: @site/changelog/source/2.0.0-alpha.67.md?truncated=true
    Resolved Path: 63843
  • Aliased Path: @site/_dogfooding/_docs tests/beginner's guide.mdx
    Resolved Path: 43056
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-2-4.mdx
    Resolved Path: 98208
  • Aliased Path: @site/docs/guides/docs/docs-introduction.mdx
    Resolved Path: 39461
  • Aliased Path: @site/blog/releases/2.2/index.mdx?truncated=true
    Resolved Path: 38098
  • Aliased Path: @site/docs/api/plugin-methods/lifecycle-apis.mdx
    Resolved Path: 51144
  • Aliased Path: @site/changelog/source/3.0.1.md?truncated=true
    Resolved Path: 12164
  • Aliased Path: @site/changelog/source/2.0.0-alpha.19.md
    Resolved Path: 50888
  • Aliased Path: @site/docs/api/plugin-methods/static-methods.mdx
    Resolved Path: 52431
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-paginated-tag-page-3-a87.json
    Resolved Path: 66402
  • Aliased Path: @site/changelog/source/2.0.0-alpha.49.md?truncated=true
    Resolved Path: 5757
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-intro.mdx
    Resolved Path: 98583
  • Aliased Path: @generated/docusaurus-plugin-content-docs/default/p/docs-b5f.json
    Resolved Path: 90919
  • Aliased Path: @site/changelog/source/2.0.0-alpha.69.md
    Resolved Path: 90368
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-paginated-tag-488.json
    Resolved Path: 41005
  • Aliased Path: @site/blog/2019/12-30-docusaurus-2019-recap.mdx
    Resolved Path: 26468
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-blog-page-2-340.json
    Resolved Path: 27427
  • Aliased Path: @site/src/pages/showcase/index.tsx
    Resolved Path: 73881
  • Aliased Path: @site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx?truncated=true
    Resolved Path: 2616
  • Aliased Path: @site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx
    Resolved Path: 20269
  • Aliased Path: @site/changelog/source/2.0.0-alpha.36.md?truncated=true
    Resolved Path: 39139
  • Aliased Path: @site/_dogfooding/_pages tests/code-block-tests.mdx
    Resolved Path: 6208
  • Aliased Path: @site/changelog/source/2.0.0-alpha.38.md?truncated=true
    Resolved Path: 45530
  • Aliased Path: @site/changelog/source/2.0.0-alpha.60.md
    Resolved Path: 59846
  • Aliased Path: @site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx?truncated=true
    Resolved Path: 50520
  • Aliased Path: ~blog/default/blog-post-list-prop-default.json
    Resolved Path: 45641
  • Aliased Path: @site/docs/migration/v3.mdx
    Resolved Path: 97369
  • Aliased Path: @site/docs/guides/docs/docs-multi-instance.mdx
    Resolved Path: 92726
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx
    Resolved Path: 41192
  • Aliased Path: @site/changelog/source/2.0.0-alpha.43.md
    Resolved Path: 41060
  • Aliased Path: @generated/docusaurus-plugin-content-docs/community/p/community-742.json
    Resolved Path: 38743
  • Aliased Path: @site/changelog/source/2.4.0.md
    Resolved Path: 59536
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-page-6-cba.json
    Resolved Path: 55881
  • Aliased Path: @site/docs/api/themes/theme-live-codeblock.mdx
    Resolved Path: 10460
  • Aliased Path: @site/changelog/source/2.0.0-alpha.55.md?truncated=true
    Resolved Path: 1229
  • Aliased Path: @site/changelog/source/2.1.0.md?truncated=true
    Resolved Path: 33858
  • Aliased Path: @site/changelog/source/2.0.0-alpha.40.md?truncated=true
    Resolved Path: 31491
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx
    Resolved Path: 99977
  • Aliased Path: @site/changelog/source/V2 Changelog.md
    Resolved Path: 41130
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx
    Resolved Path: 74728
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-test-good.mdx
    Resolved Path: 38984
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-b-873.json
    Resolved Path: 78863
  • Aliased Path: @site/docs/docusaurus-core.mdx
    Resolved Path: 16319
  • Aliased Path: @site/changelog/source/2.0.0-alpha.61.md?truncated=true
    Resolved Path: 26727
  • Aliased Path: @site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx
    Resolved Path: 26201
  • Aliased Path: ~blog/blog-tests/blogMetadata-blog-tests.json
    Resolved Path: 31880
  • Aliased Path: @site/changelog/source/2.0.0-beta.10.md?truncated=true
    Resolved Path: 39683
  • Aliased Path: @site/changelog/source/2.0.0-beta.7.md
    Resolved Path: 24579
  • Aliased Path: @site/changelog/source/2.0.0-alpha.48.md
    Resolved Path: 31911
  • Aliased Path: @generated/changelog-plugin/default/p/changelog-page-2-90a.json
    Resolved Path: 31413
  • Aliased Path: @site/changelog/source/2.0.0-alpha.33.md?truncated=true
    Resolved Path: 10932
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-visibility-a5c.json
    Resolved Path: 98408
  • Aliased Path: @site/docs/i18n/i18n-introduction.mdx
    Resolved Path: 91098
  • Aliased Path: @site/changelog/source/2.0.0-beta.3.md?truncated=true
    Resolved Path: 9635
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-page-3-fd4.json
    Resolved Path: 26826
  • Aliased Path: @site/changelog/source/3.1.0.md
    Resolved Path: 27709
  • Aliased Path: @site/changelog/source/2.0.0-alpha.32.md
    Resolved Path: 70072
  • Aliased Path: @site/changelog/source/2.0.0-beta.11.md?truncated=true
    Resolved Path: 22847
  • Aliased Path: @site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx?truncated=true
    Resolved Path: 12686
  • Aliased Path: @site/_dogfooding/_docs tests/tests/admonitions.mdx
    Resolved Path: 64790
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-release-page-2-ceb.json
    Resolved Path: 21150
  • Aliased Path: @site/docs/migration/index.mdx
    Resolved Path: 31366
  • Aliased Path: @site/docs/api/themes/overview.mdx
    Resolved Path: 49064
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-836.json
    Resolved Path: 93625
  • Aliased Path: @site/changelog/source/2.0.0-alpha.49.md
    Resolved Path: 81762
  • Aliased Path: @site/changelog/source/2.0.0-alpha.33.md
    Resolved Path: 82778
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-listed-89a.json
    Resolved Path: 12171
  • Aliased Path: @site/docs/swizzling.mdx
    Resolved Path: 36460
  • Aliased Path: @theme/DebugRoutes
    Resolved Path: 75277
  • Aliased Path: @site/_dogfooding/_pages tests/crashTest.tsx
    Resolved Path: 73687
  • Aliased Path: @site/changelog/source/V2 Changelog.md?truncated=true
    Resolved Path: 43686
  • Aliased Path: ~blog/../changelog-plugin/default/blog-post-list-prop-changelog.json
    Resolved Path: 56923
  • Aliased Path: @site/changelog/source/2.0.0-alpha.24.md?truncated=true
    Resolved Path: 42607
  • Aliased Path: @site/blog/releases/3.0/index.mdx?truncated=true
    Resolved Path: 7393
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx?truncated=true
    Resolved Path: 72925
  • Aliased Path: @site/docs/introduction.mdx
    Resolved Path: 64784
  • Aliased Path: @site/_dogfooding/_pages tests/index.mdx
    Resolved Path: 31089
  • Aliased Path: @site/src/pages/examples/noIndex.mdx
    Resolved Path: 18330
  • Aliased Path: @site/changelog/source/2.0.0-alpha.62.md
    Resolved Path: 58867
  • Aliased Path: @site/changelog/source/2.4.2.md
    Resolved Path: 23193
  • Aliased Path: @site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx
    Resolved Path: 64779
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx?truncated=true
    Resolved Path: 17737
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-i-18-n-d57.json
    Resolved Path: 12494
  • Aliased Path: @site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx?truncated=true
    Resolved Path: 3232
  • Aliased Path: @site/changelog/source/2.0.0-alpha.63.md?truncated=true
    Resolved Path: 4309
  • Aliased Path: @site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx?truncated=true
    Resolved Path: 81510
  • Aliased Path: @generated/changelog-plugin/default/p/changelog-d19.json
    Resolved Path: 22435
  • Aliased Path: @site/changelog/source/2.0.0-alpha.22.md
    Resolved Path: 13704
  • Aliased Path: @site/docs/api/misc/eslint-plugin/no-untranslated-text.mdx
    Resolved Path: 74309
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-category-tests-e66.json
    Resolved Path: 11152
  • Aliased Path: @theme/BlogArchivePage
    Resolved Path: 45722
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-463.json
    Resolved Path: 47522
  • Aliased Path: @site/changelog/source/2.0.0-alpha.30.md
    Resolved Path: 92932
  • Aliased Path: @site/blog/2021/11-21-algolia-docsearch-migration/index.mdx
    Resolved Path: 67602
  • Aliased Path: @site/changelog/source/2.0.0-alpha.37.md?truncated=true
    Resolved Path: 62649
  • Aliased Path: @site/changelog/source/2.0.0-beta.2.md?truncated=true
    Resolved Path: 5121
  • Aliased Path: @site/docs/typescript-support.mdx
    Resolved Path: 96891
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-maintenance-416.json
    Resolved Path: 58454
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-index-doc/sample-doc.mdx
    Resolved Path: 49262
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-long-long-long-c12.json
    Resolved Path: 59256
  • Aliased Path: @site/_dogfooding/_blog tests/2023-07-19-b.mdx?truncated=true
    Resolved Path: 1645
  • Aliased Path: @site/docs/guides/docs/versioning.mdx
    Resolved Path: 10707
  • Aliased Path: @site/_dogfooding/_docs tests/doc-without-sidebar.mdx
    Resolved Path: 78598
  • Aliased Path: @site/changelog/source/2.0.0-alpha.53.md?truncated=true
    Resolved Path: 17744
  • Aliased Path: @site/changelog/source/2.0.0-beta.19.md
    Resolved Path: 81655
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-3-5.mdx
    Resolved Path: 18115
  • Aliased Path: @site/docs/using-plugins.mdx
    Resolved Path: 69790
  • Aliased Path: @site/docs/api/plugin-methods/extend-infrastructure.mdx
    Resolved Path: 4033
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-category-links-generated-index-slug-d5e.json
    Resolved Path: 32129
  • Aliased Path: @site/docs/migration/v2/migration-manual.mdx
    Resolved Path: 38476
  • Aliased Path: @site/changelog/source/2.4.0.md?truncated=true
    Resolved Path: 25707
  • Aliased Path: @site/docs/blog.mdx
    Resolved Path: 54945
  • Aliased Path: @site/_dogfooding/_blog tests/2023-07-19-a.mdx?truncated=true
    Resolved Path: 32640
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-documentation-944.json
    Resolved Path: 84567
  • Aliased Path: @site/blog/2018/09-11-Towards-Docusaurus-2.mdx
    Resolved Path: 30675
  • Aliased Path: @theme/BlogListPage
    Resolved Path: 83319
  • Aliased Path: @site/docs/api/themes/theme-mermaid.mdx
    Resolved Path: 31119
  • Aliased Path: @generated/docusaurus-plugin-content-pages/default/__plugin.json
    Resolved Path: 79365
  • Aliased Path: @site/changelog/source/2.0.0-beta.0.md?truncated=true
    Resolved Path: 65603
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-archive-538.json
    Resolved Path: 39292
  • Aliased Path: @theme/DocVersionRoot
    Resolved Path: 88337
  • Aliased Path: @site/changelog/source/2.0.0-alpha.21.md
    Resolved Path: 91351
  • Aliased Path: @theme/DocRoot
    Resolved Path: 76959
  • Aliased Path: @site/_dogfooding/_docs tests/folder with space/doc 2.mdx
    Resolved Path: 24422
  • Aliased Path: @site/changelog/source/2.0.0-alpha.55.md
    Resolved Path: 35019
  • Aliased Path: @generated/docusaurus-plugin-content-docs/default/__plugin.json
    Resolved Path: 41765
  • Aliased Path: ~blog/default/blogMetadata-default.json
    Resolved Path: 81838
  • Aliased Path: @site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx?truncated=true
    Resolved Path: 46352
  • Aliased Path: @site/changelog/source/2.0.0-alpha.71.md?truncated=true
    Resolved Path: 23732
  • Aliased Path: @site/changelog/source/2.0.0-rc.1.md
    Resolved Path: 43196
  • Aliased Path: @site/changelog/source/2.0.0-alpha.50.md
    Resolved Path: 72427
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/no-index-doc/index.mdx
    Resolved Path: 76749
  • Aliased Path: @site/changelog/source/2.0.0-beta.18.md
    Resolved Path: 65367
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-profilo-007.json
    Resolved Path: 14513
  • Aliased Path: @site/changelog/source/2.0.0-alpha.58.md?truncated=true
    Resolved Path: 40964
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx
    Resolved Path: 45929
  • Aliased Path: @site/blog/2021/03-09-releasing-docusaurus-i18n.mdx
    Resolved Path: 29963
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-unlisted-307.json
    Resolved Path: 10122
  • Aliased Path: @site/docs/i18n/i18n-git.mdx
    Resolved Path: 87182
  • Aliased Path: @site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx
    Resolved Path: 78207
  • Aliased Path: @generated/docusaurus-plugin-debug/default/__plugin.json
    Resolved Path: 97139
  • Aliased Path: @site/changelog/source/2.0.0-alpha.43.md?truncated=true
    Resolved Path: 604
  • Aliased Path: @site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx?truncated=true
    Resolved Path: 74106
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-links.mdx
    Resolved Path: 67188
  • Aliased Path: @site/_dogfooding/_docs tests/dummy.mdx
    Resolved Path: 29368
  • Aliased Path: @site/changelog/source/3.1.0.md?truncated=true
    Resolved Path: 61587
  • Aliased Path: @site/_dogfooding/_pages tests/page-toc-tests.mdx
    Resolved Path: 2641
  • Aliased Path: @site/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx?truncated=true
    Resolved Path: 44254
  • Aliased Path: @site/docs/cli.mdx
    Resolved Path: 35359
  • Aliased Path: @theme/DebugContent
    Resolved Path: 66074
  • Aliased Path: @site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx
    Resolved Path: 73169
  • Aliased Path: @site/changelog/source/2.0.0-beta.18.md?truncated=true
    Resolved Path: 55274
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.mdx
    Resolved Path: 12288
  • Aliased Path: @site/docs/api/docusaurus.config.js.mdx
    Resolved Path: 83588
  • Aliased Path: @site/changelog/source/2.0.0-beta.17.md
    Resolved Path: 71743
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/index.mdx
    Resolved Path: 41547
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-admonitions.mdx
    Resolved Path: 31478
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-test-bad.mdx
    Resolved Path: 7171
  • Aliased Path: @site/changelog/source/3.1.1.md?truncated=true
    Resolved Path: 17505
  • Aliased Path: @site/changelog/source/2.0.0-alpha.34.md?truncated=true
    Resolved Path: 82370
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-release-page-3-4c9.json
    Resolved Path: 59979
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-birth-1aa.json
    Resolved Path: 71168
  • Aliased Path: @site/docs/api/plugins/plugin-pwa.mdx
    Resolved Path: 55895
  • Aliased Path: @site/changelog/source/2.0.0-alpha.75.md?truncated=true
    Resolved Path: 78267
  • Aliased Path: @site/changelog/source/2.0.0-alpha.50.md?truncated=true
    Resolved Path: 65343
  • Aliased Path: @generated/docusaurus-theme-search-algolia/default/__plugin.json
    Resolved Path: 51324
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/__plugin.json
    Resolved Path: 59981
  • Aliased Path: @site/docs/api/plugins/plugin-vercel-analytics.mdx
    Resolved Path: 97584
  • Aliased Path: @site/blog/2021/01-19-docusaurus-2020-recap.mdx
    Resolved Path: 67386
  • Aliased Path: @site/docs/api/plugin-methods/README.mdx
    Resolved Path: 12922
  • Aliased Path: @site/changelog/source/2.0.0-alpha.67.md
    Resolved Path: 75709
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/regular-category/sample-doc.mdx
    Resolved Path: 82023
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted2.mdx
    Resolved Path: 17534
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-d08.json
    Resolved Path: 36924
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-diagrams.mdx
    Resolved Path: 73233
  • Aliased Path: @site/docs/i18n/i18n-tutorial.mdx
    Resolved Path: 89415
  • Aliased Path: @site/docs/static-assets.mdx
    Resolved Path: 77136
  • Aliased Path: @site/docs/advanced/routing.mdx
    Resolved Path: 24109
  • Aliased Path: @site/changelog/source/3.1.1.md
    Resolved Path: 64108
  • Aliased Path: @site/changelog/source/2.0.0-alpha.51.md?truncated=true
    Resolved Path: 25921
  • Aliased Path: @generated/docusaurus-plugin-content-pages/pages-tests/__plugin.json
    Resolved Path: 13950
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/no-index-doc/sample-doc.mdx
    Resolved Path: 45535
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/sample-doc.mdx
    Resolved Path: 85520
  • Aliased Path: @site/changelog/source/2.0.0-beta.10.md
    Resolved Path: 89673
  • Aliased Path: @site/docs/configuration.mdx
    Resolved Path: 66411
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-blog-821.json
    Resolved Path: 37117
  • Aliased Path: @theme/BlogPostPage
    Resolved Path: 28575
  • Aliased Path: @site/docs/api/plugins/plugin-content-pages.mdx
    Resolved Path: 6945
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-head-metadata.mdx
    Resolved Path: 56500
  • Aliased Path: @site/changelog/source/2.0.0-alpha.73.md?truncated=true
    Resolved Path: 53390
  • Aliased Path: @site/changelog/source/3.2.0.md?truncated=true
    Resolved Path: 4145
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/README.mdx
    Resolved Path: 64021
  • Aliased Path: @site/docs/migration/v2/migration-overview.mdx
    Resolved Path: 22858
  • Aliased Path: @site/changelog/source/2.0.0-alpha.68.md
    Resolved Path: 60179
  • Aliased Path: @site/changelog/source/2.0.0-alpha.24.md
    Resolved Path: 39883
  • Aliased Path: @site/docs/api/misc/eslint-plugin/no-html-links.mdx
    Resolved Path: 69546
  • Aliased Path: @site/docs/migration/v2/migration-translated-sites.mdx
    Resolved Path: 9701
  • Aliased Path: @site/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx
    Resolved Path: 23432
  • Aliased Path: @site/_dogfooding/_docs tests/doc-with-another-sidebar.mdx
    Resolved Path: 24221
  • Aliased Path: @site/changelog/source/2.3.0.md
    Resolved Path: 44331
  • Aliased Path: @site/_dogfooding/_blog tests/2021-08-22-no-author.mdx
    Resolved Path: 55472
  • Aliased Path: @site/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx
    Resolved Path: 20435
  • Aliased Path: @site/changelog/source/2.0.0-alpha.29.md?truncated=true
    Resolved Path: 68698
  • Aliased Path: @site/docs/advanced/index.mdx
    Resolved Path: 31565
  • Aliased Path: @site/changelog/source/2.0.0-beta.13.md?truncated=true
    Resolved Path: 67843
  • Aliased Path: @site/changelog/source/2.0.0-beta.11.md
    Resolved Path: 76563
  • Aliased Path: @site/blog/2021/01-19-docusaurus-2020-recap.mdx?truncated=true
    Resolved Path: 66914
  • Aliased Path: @site/changelog/source/2.0.0-alpha.38.md
    Resolved Path: 55639
  • Aliased Path: @site/changelog/source/2.0.0-alpha.41.md
    Resolved Path: 62682
  • Aliased Path: @site/docs/guides/docs/sidebar/multiple-sidebars.mdx
    Resolved Path: 82442
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-page-5-c6b.json
    Resolved Path: 84379
  • Aliased Path: @site/changelog/source/3.0.0.md
    Resolved Path: 85541
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-d-custom-permalink-7c5.json
    Resolved Path: 68645
  • Aliased Path: @site/changelog/source/2.0.0-beta.7.md?truncated=true
    Resolved Path: 20768
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/readme.mdx
    Resolved Path: 79503
  • Aliased Path: @site/changelog/source/2.0.0-alpha.19.md?truncated=true
    Resolved Path: 50013
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-2-5.mdx
    Resolved Path: 68858
  • Aliased Path: @site/_dogfooding/_docs tests/tests/custom-props/index.mdx
    Resolved Path: 57969
  • Aliased Path: @site/docs/api/plugins/overview.mdx
    Resolved Path: 84277
  • Aliased Path: @generated/changelog-plugin/default/p/changelog-page-3-c10.json
    Resolved Path: 62262
  • Aliased Path: @site/_dogfooding/_pages tests/markdown-tests-md.md
    Resolved Path: 98985
  • Aliased Path: @theme/DocTagDocListPage
    Resolved Path: 68641
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/sample-doc.mdx
    Resolved Path: 37485
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-some-tag-7ab.json
    Resolved Path: 92179
  • Aliased Path: @site/changelog/source/2.0.0-alpha.56.md
    Resolved Path: 28134
  • Aliased Path: @site/docs/api/themes/theme-search-algolia.mdx
    Resolved Path: 83624
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-307.json
    Resolved Path: 92873
  • Aliased Path: @site/_dogfooding/_pages tests/embeds.tsx
    Resolved Path: 12827
  • Aliased Path: @site/_dogfooding/_docs tests/tests/Case-Sentitive-Doc.mdx
    Resolved Path: 82134
  • Aliased Path: @generated/docusaurus-plugin-content-docs/community/__plugin.json
    Resolved Path: 19469
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-tags-e-39b.json
    Resolved Path: 11116
  • Aliased Path: @site/changelog/source/2.0.0-alpha.40.md
    Resolved Path: 95907
  • Aliased Path: @site/changelog/source/2.3.1.md?truncated=true
    Resolved Path: 4969
  • Aliased Path: @site/changelog/source/2.0.0-alpha.21.md?truncated=true
    Resolved Path: 81418
  • Aliased Path: @site/changelog/source/3.2.0.md
    Resolved Path: 44109
  • Aliased Path: @site/changelog/source/2.0.0-beta.8.md
    Resolved Path: 3327
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted1.mdx
    Resolved Path: 17770
  • Aliased Path: @site/changelog/source/2.0.0-alpha.25.md?truncated=true
    Resolved Path: 46898
  • Aliased Path: @site/docs/guides/creating-pages.mdx
    Resolved Path: 93226
  • Aliased Path: @site/docs/seo.mdx
    Resolved Path: 63150
  • Aliased Path: @site/docs/advanced/plugins.mdx
    Resolved Path: 8549
  • Aliased Path: @site/changelog/source/2.0.0-alpha.68.md?truncated=true
    Resolved Path: 11366
  • Aliased Path: @site/docs/guides/markdown-features/markdown-features-plugins.mdx
    Resolved Path: 51458
  • Aliased Path: @site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx
    Resolved Path: 43924
  • Aliased Path: @site/changelog/source/2.0.0-alpha.35.md?truncated=true
    Resolved Path: 14602
  • Aliased Path: @site/changelog/source/2.0.0-alpha.70.md?truncated=true
    Resolved Path: 75388
  • Aliased Path: ~blog/../changelog-plugin/default/blogMetadata-changelog.json
    Resolved Path: 13782
  • Aliased Path: @generated/docusaurus-plugin-content-docs/docs-tests/p/tests-docs-category-sidebar-item-description-tests-753.json
    Resolved Path: 32752
  • Aliased Path: @site/changelog/source/2.4.3.md?truncated=true
    Resolved Path: 90828
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-_-_.mdx
    Resolved Path: 55957
  • Aliased Path: @site/changelog/source/2.0.0-alpha.34.md
    Resolved Path: 18957
  • Aliased Path: @site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx
    Resolved Path: 21040
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-unlisted-c83.json
    Resolved Path: 30619
  • Aliased Path: @site/changelog/source/2.0.0-beta.12.md?truncated=true
    Resolved Path: 48865
  • Aliased Path: @site/changelog/source/2.0.0-beta.15.md?truncated=true
    Resolved Path: 463
  • Aliased Path: @site/changelog/source/2.0.0-beta.15.md
    Resolved Path: 30
  • Aliased Path: @site/changelog/source/2.0.0-alpha.41.md?truncated=true
    Resolved Path: 9961
  • Aliased Path: @site/changelog/source/2.0.0-alpha.51.md
    Resolved Path: 68347
  • Aliased Path: @theme/DebugGlobalData
    Resolved Path: 61179
  • Aliased Path: @site/src/pages/tests.mdx
    Resolved Path: 10349
  • Aliased Path: @site/blog/releases/2.3/index.mdx?truncated=true
    Resolved Path: 71507
  • Aliased Path: @site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx?truncated=true
    Resolved Path: 44604
  • Aliased Path: @site/docs/advanced/architecture.mdx
    Resolved Path: 55330
  • Aliased Path: @site/changelog/source/3.0.0.md?truncated=true
    Resolved Path: 48360
  • Aliased Path: @site/changelog/source/2.0.0-alpha.73.md
    Resolved Path: 58111
  • Aliased Path: @site/_dogfooding/_docs tests/tests/img-tests.mdx
    Resolved Path: 7474
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-paginated-tag-page-4-404.json
    Resolved Path: 52088
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-paginated-tag-page-2-ef6.json
    Resolved Path: 92118
  • Aliased Path: @site/changelog/source/2.0.0-beta.9.md
    Resolved Path: 90433
  • Aliased Path: @generated/docusaurus-plugin-content-docs/default/p/docs-category-guides-350.json
    Resolved Path: 89604
  • Aliased Path: @site/changelog/source/2.0.0-alpha.28.md?truncated=true
    Resolved Path: 77373
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.mdx
    Resolved Path: 21007
  • Aliased Path: @site/changelog/source/2.1.0.md
    Resolved Path: 98171
  • Aliased Path: @site/changelog/source/2.0.0-beta.8.md?truncated=true
    Resolved Path: 94514
  • Aliased Path: @site/docs/guides/docs/sidebar/index.mdx
    Resolved Path: 2230
  • Aliased Path: @generated/docusaurus-plugin-content-blog/blog-tests/p/tests-blog-tags-long-long-long-long-160.json
    Resolved Path: 99424
  • Aliased Path: @site/changelog/source/2.0.0-beta.9.md?truncated=true
    Resolved Path: 23086
  • Aliased Path: @generated/docusaurus-plugin-content-blog/default/p/blog-tags-docusaurus-0e0.json
    Resolved Path: 29333
  • Aliased Path: @site/_dogfooding/_docs tests/tests/custom-props/doc-with-custom-props.mdx
    Resolved Path: 35972
  • Aliased Path: @site/_dogfooding/_docs tests/index.mdx
    Resolved Path: 67918
  • Aliased Path: @site/_dogfooding/_docs tests/toc/toc-2-3.mdx
    Resolved Path: 1242
  • Aliased Path: @site/src/pages/versions.tsx
    Resolved Path: 60826
  • Aliased Path: @site/docs/installation.mdx
    Resolved Path: 70976
  • Aliased Path: @site/changelog/source/2.0.0-alpha.39.md?truncated=true
    Resolved Path: 10856
  • Aliased Path: @site/_dogfooding/_docs tests/tests/category-links/with-index-doc/index.mdx
    Resolved Path: 88804
  • Aliased Path: @site/_dogfooding/_docs tests/tests/ascii/æøå/index.mdx
    Resolved Path: 24816
  • Aliased Path: @site/_dogfooding/_docs tests/tests/visibility/index.mdx
    Resolved Path: 72511
+ + \ No newline at end of file diff --git a/__docusaurus/debug/registry.html.html b/__docusaurus/debug/registry.html.html new file mode 100644 index 0000000000..7dbc7d0356 --- /dev/null +++ b/__docusaurus/debug/registry.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/__docusaurus/debug/routes.html b/__docusaurus/debug/routes.html new file mode 100644 index 0000000000..37a5b837c3 --- /dev/null +++ b/__docusaurus/debug/routes.html @@ -0,0 +1,50 @@ + + + + + +Docusaurus debug panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Routes

  • /__docusaurus/debug
    Is exact: true
  • /__docusaurus/debug/config
    Is exact: true
  • /__docusaurus/debug/content
    Is exact: true
  • /__docusaurus/debug/globalData
    Is exact: true
  • /__docusaurus/debug/metadata
    Is exact: true
  • /__docusaurus/debug/registry
    Is exact: true
  • /__docusaurus/debug/routes
    Is exact: true
  • /blog
    Is exact: true
  • /blog/2017/12/14/introducing-docusaurus
    Is exact: true
  • /blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus
    Is exact: true
  • /blog/2018/09/11/Towards-Docusaurus-2
    Is exact: true
  • /blog/2018/12/14/Happy-First-Birthday-Slash
    Is exact: true
  • /blog/2019/12/30/docusaurus-2019-recap
    Is exact: true
  • /blog/2020/01/07/tribute-to-endi
    Is exact: true
  • /blog/2021/01/19/docusaurus-2020-recap
    Is exact: true
  • /blog/2021/03/09/releasing-docusaurus-i18n
    Is exact: true
  • /blog/2021/05/12/announcing-docusaurus-two-beta
    Is exact: true
  • /blog/2021/11/21/algolia-docsearch-migration
    Is exact: true
  • /blog/2022/01/24/docusaurus-2021-recap
    Is exact: true
  • /blog/2022/08/01/announcing-docusaurus-2.0
    Is exact: true
  • /blog/2022/09/01/docusaurus-2.1
    Is exact: true
  • /blog/archive
    Is exact: true
  • /blog/page/2
    Is exact: true
  • /blog/page/3
    Is exact: true
  • /blog/page/4
    Is exact: true
  • /blog/page/5
    Is exact: true
  • /blog/preparing-your-site-for-docusaurus-v3
    Is exact: true
  • /blog/releases/2.2
    Is exact: true
  • /blog/releases/2.3
    Is exact: true
  • /blog/releases/2.4
    Is exact: true
  • /blog/releases/3.0
    Is exact: true
  • /blog/releases/3.1
    Is exact: true
  • /blog/releases/3.2
    Is exact: true
  • /blog/tags
    Is exact: true
  • /blog/tags/adoption
    Is exact: true
  • /blog/tags/beta
    Is exact: true
  • /blog/tags/birth
    Is exact: true
  • /blog/tags/blog
    Is exact: true
  • /blog/tags/documentation
    Is exact: true
  • /blog/tags/docusaurus
    Is exact: true
  • /blog/tags/endi
    Is exact: true
  • /blog/tags/i-18-n
    Is exact: true
  • /blog/tags/maintenance
    Is exact: true
  • /blog/tags/new
    Is exact: true
  • /blog/tags/profilo
    Is exact: true
  • /blog/tags/recap
    Is exact: true
  • /blog/tags/release
    Is exact: true
  • /blog/tags/release/page/2
    Is exact: true
  • /blog/tags/release/page/3
    Is exact: true
  • /blog/tags/search
    Is exact: true
  • /blog/tags/tribute
    Is exact: true
  • /blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing
    Is exact: true
  • /changelog
    Is exact: true
  • /changelog/2.0.0
    Is exact: true
  • /changelog/2.0.0-alpha.19
    Is exact: true
  • /changelog/2.0.0-alpha.20
    Is exact: true
  • /changelog/2.0.0-alpha.21
    Is exact: true
  • /changelog/2.0.0-alpha.22
    Is exact: true
  • /changelog/2.0.0-alpha.23
    Is exact: true
  • /changelog/2.0.0-alpha.24
    Is exact: true
  • /changelog/2.0.0-alpha.25
    Is exact: true
  • /changelog/2.0.0-alpha.26
    Is exact: true
  • /changelog/2.0.0-alpha.27
    Is exact: true
  • /changelog/2.0.0-alpha.28
    Is exact: true
  • /changelog/2.0.0-alpha.29
    Is exact: true
  • /changelog/2.0.0-alpha.30
    Is exact: true
  • /changelog/2.0.0-alpha.31
    Is exact: true
  • /changelog/2.0.0-alpha.32
    Is exact: true
  • /changelog/2.0.0-alpha.33
    Is exact: true
  • /changelog/2.0.0-alpha.34
    Is exact: true
  • /changelog/2.0.0-alpha.35
    Is exact: true
  • /changelog/2.0.0-alpha.36
    Is exact: true
  • /changelog/2.0.0-alpha.37
    Is exact: true
  • /changelog/2.0.0-alpha.38
    Is exact: true
  • /changelog/2.0.0-alpha.39
    Is exact: true
  • /changelog/2.0.0-alpha.40
    Is exact: true
  • /changelog/2.0.0-alpha.41
    Is exact: true
  • /changelog/2.0.0-alpha.43
    Is exact: true
  • /changelog/2.0.0-alpha.44
    Is exact: true
  • /changelog/2.0.0-alpha.48
    Is exact: true
  • /changelog/2.0.0-alpha.49
    Is exact: true
  • /changelog/2.0.0-alpha.50
    Is exact: true
  • /changelog/2.0.0-alpha.51
    Is exact: true
  • /changelog/2.0.0-alpha.53
    Is exact: true
  • /changelog/2.0.0-alpha.54
    Is exact: true
  • /changelog/2.0.0-alpha.55
    Is exact: true
  • /changelog/2.0.0-alpha.56
    Is exact: true
  • /changelog/2.0.0-alpha.57
    Is exact: true
  • /changelog/2.0.0-alpha.58
    Is exact: true
  • /changelog/2.0.0-alpha.59
    Is exact: true
  • /changelog/2.0.0-alpha.60
    Is exact: true
  • /changelog/2.0.0-alpha.61
    Is exact: true
  • /changelog/2.0.0-alpha.62
    Is exact: true
  • /changelog/2.0.0-alpha.63
    Is exact: true
  • /changelog/2.0.0-alpha.64
    Is exact: true
  • /changelog/2.0.0-alpha.65
    Is exact: true
  • /changelog/2.0.0-alpha.66
    Is exact: true
  • /changelog/2.0.0-alpha.67
    Is exact: true
  • /changelog/2.0.0-alpha.68
    Is exact: true
  • /changelog/2.0.0-alpha.69
    Is exact: true
  • /changelog/2.0.0-alpha.70
    Is exact: true
  • /changelog/2.0.0-alpha.71
    Is exact: true
  • /changelog/2.0.0-alpha.72
    Is exact: true
  • /changelog/2.0.0-alpha.73
    Is exact: true
  • /changelog/2.0.0-alpha.74
    Is exact: true
  • /changelog/2.0.0-alpha.75
    Is exact: true
  • /changelog/2.0.0-beta.0
    Is exact: true
  • /changelog/2.0.0-beta.1
    Is exact: true
  • /changelog/2.0.0-beta.10
    Is exact: true
  • /changelog/2.0.0-beta.11
    Is exact: true
  • /changelog/2.0.0-beta.12
    Is exact: true
  • /changelog/2.0.0-beta.13
    Is exact: true
  • /changelog/2.0.0-beta.14
    Is exact: true
  • /changelog/2.0.0-beta.15
    Is exact: true
  • /changelog/2.0.0-beta.16
    Is exact: true
  • /changelog/2.0.0-beta.17
    Is exact: true
  • /changelog/2.0.0-beta.18
    Is exact: true
  • /changelog/2.0.0-beta.19
    Is exact: true
  • /changelog/2.0.0-beta.2
    Is exact: true
  • /changelog/2.0.0-beta.20
    Is exact: true
  • /changelog/2.0.0-beta.21
    Is exact: true
  • /changelog/2.0.0-beta.22
    Is exact: true
  • /changelog/2.0.0-beta.3
    Is exact: true
  • /changelog/2.0.0-beta.4
    Is exact: true
  • /changelog/2.0.0-beta.5
    Is exact: true
  • /changelog/2.0.0-beta.6
    Is exact: true
  • /changelog/2.0.0-beta.7
    Is exact: true
  • /changelog/2.0.0-beta.8
    Is exact: true
  • /changelog/2.0.0-beta.9
    Is exact: true
  • /changelog/2.0.0-rc.1
    Is exact: true
  • /changelog/2.0.1
    Is exact: true
  • /changelog/2.1.0
    Is exact: true
  • /changelog/2.2.0
    Is exact: true
  • /changelog/2.3.0
    Is exact: true
  • /changelog/2.3.1
    Is exact: true
  • /changelog/2.4.0
    Is exact: true
  • /changelog/2.4.1
    Is exact: true
  • /changelog/2.4.2
    Is exact: true
  • /changelog/2.4.3
    Is exact: true
  • /changelog/3.0.0
    Is exact: true
  • /changelog/3.0.1
    Is exact: true
  • /changelog/3.1.0
    Is exact: true
  • /changelog/3.1.1
    Is exact: true
  • /changelog/3.2.0
    Is exact: true
  • /changelog/3.2.1
    Is exact: true
  • /changelog/page/2
    Is exact: true
  • /changelog/page/3
    Is exact: true
  • /changelog/page/4
    Is exact: true
  • /changelog/page/5
    Is exact: true
  • /changelog/V2 Changelog
    Is exact: true
  • /examples/markdownPageExample
    Is exact: true
  • /examples/noIndex
    Is exact: true
  • /feature-requests
    Is exact: false
  • /search
    Is exact: true
  • /showcase
    Is exact: true
  • /tests
    Is exact: true
  • /tests/blog
    Is exact: true
  • /tests/blog/2020/08/03/demo/second-blog-intro
    Is exact: true
  • /tests/blog/2021/08/21/blog-post-toc-tests
    Is exact: true
  • /tests/blog/2021/08/22/no-author
    Is exact: true
  • /tests/blog/2021/08/23/multiple-authors
    Is exact: true
  • /tests/blog/2021/09/13/dup-title
    Is exact: true
  • /tests/blog/2021/10/07/blog-post-mdx-feed-tests
    Is exact: true
  • /tests/blog/2021/10/08/blog-post-mdx-require-feed-tests
    Is exact: true
  • /tests/blog/2021/11/13/dup-title
    Is exact: true
  • /tests/blog/2022/01/20/image-only-authors
    Is exact: true
  • /tests/blog/2022/01/21/dup-footnote
    Is exact: true
  • /tests/blog/2022/01/22/dup-footnote
    Is exact: true
  • /tests/blog/2022/04/20/dup-footnote
    Is exact: true
  • /tests/blog/2023/07/19/a
    Is exact: true
  • /tests/blog/2023/07/19/b
    Is exact: true
  • /tests/blog/2023/08/05
    Is exact: true
  • /tests/blog/archive
    Is exact: true
  • /tests/blog/page/2
    Is exact: true
  • /tests/blog/page/3
    Is exact: true
  • /tests/blog/page/4
    Is exact: true
  • /tests/blog/page/5
    Is exact: true
  • /tests/blog/page/6
    Is exact: true
  • /tests/blog/tags
    Is exact: true
  • /tests/blog/tags/blog
    Is exact: true
  • /tests/blog/tags/blog/page/2
    Is exact: true
  • /tests/blog/tags/docusaurus
    Is exact: true
  • /tests/blog/tags/docusaurus/page/2
    Is exact: true
  • /tests/blog/tags/long
    Is exact: true
  • /tests/blog/tags/long-long
    Is exact: true
  • /tests/blog/tags/long-long-long
    Is exact: true
  • /tests/blog/tags/long-long-long-long
    Is exact: true
  • /tests/blog/tags/long-long-long-long-long
    Is exact: true
  • /tests/blog/tags/paginated-tag
    Is exact: true
  • /tests/blog/tags/paginated-tag/page/2
    Is exact: true
  • /tests/blog/tags/paginated-tag/page/3
    Is exact: true
  • /tests/blog/tags/paginated-tag/page/4
    Is exact: true
  • /tests/blog/tags/unlisted
    Is exact: true
  • /tests/blog/tags/visibility
    Is exact: true
  • /tests/blog/unlisted-post
    Is exact: true
  • /tests/blog/x/y/z.html
    Is exact: true
  • /tests/pages
    Is exact: true
  • /tests/pages/analytics
    Is exact: true
  • /tests/pages/code-block-tests
    Is exact: true
  • /tests/pages/crashTest
    Is exact: true
  • /tests/pages/diagrams
    Is exact: true
  • /tests/pages/embeds
    Is exact: true
  • /tests/pages/error-boundary-tests
    Is exact: true
  • /tests/pages/head-metadata
    Is exact: true
  • /tests/pages/hydration-tests
    Is exact: true
  • /tests/pages/layout-no-children
    Is exact: true
  • /tests/pages/link-tests
    Is exact: true
  • /tests/pages/markdown-tests-md
    Is exact: true
  • /tests/pages/markdown-tests-mdx
    Is exact: true
  • /tests/pages/navbar-dropdown-tests
    Is exact: true
  • /tests/pages/page-toc-tests
    Is exact: true
  • /tests/pages/react-18
    Is exact: true
  • /tests/pages/seo
    Is exact: true
  • /tests/pages/tabs-tests
    Is exact: true
  • /tests/pages/unlisted
    Is exact: true
  • /tests/pages/z-index-tests
    Is exact: true
  • /versions
    Is exact: true
  • /community
    Is exact: false
    Child Routes:
    [
    {}
    ]
  • /tests/docs
    Is exact: false
    Child Routes:
    [
    {}
    ]
  • /docs
    Is exact: false
    Child Routes:
    [
    {}
    ]
  • /
    Is exact: true
  • *
    Is exact: false
+ + \ No newline at end of file diff --git a/__docusaurus/debug/routes.html.html b/__docusaurus/debug/routes.html.html new file mode 100644 index 0000000000..30c3babe46 --- /dev/null +++ b/__docusaurus/debug/routes.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/_headers b/_headers new file mode 100644 index 0000000000..59b3f98c31 --- /dev/null +++ b/_headers @@ -0,0 +1,28 @@ + +# /assets folder contain Webpack processed assets with a file hash +# They are safe for immutable caching, as filename change when content change + +/assets/* + Cache-Control: public + Cache-Control: max-age=365000000 + Cache-Control: immutable + +/fr/assets/* + Cache-Control: public + Cache-Control: max-age=365000000 + Cache-Control: immutable + +/pt-BR/assets/* + Cache-Control: public + Cache-Control: max-age=365000000 + Cache-Control: immutable + +/ko/assets/* + Cache-Control: public + Cache-Control: max-age=365000000 + Cache-Control: immutable + +/zh-CN/assets/* + Cache-Control: public + Cache-Control: max-age=365000000 + Cache-Control: immutable diff --git a/_redirects b/_redirects new file mode 100644 index 0000000000..c30d7176c2 --- /dev/null +++ b/_redirects @@ -0,0 +1,59 @@ +# Server redirects for Netlify + + +# Renamed doc routes +/docs/docusaurus.config.js /docs/api/docusaurus-config +/docs/next/docusaurus.config.js /docs/next/api/docusaurus-config +/docs/lifecycle-apis /docs/api/plugin-methods/ +/docs/next/lifecycle-apis /docs/next/api/plugin-methods/ +/docs/using-themes /docs/swizzling +/docs/next/using-themes /docs/next/swizzling +/docs/advanced/swizzling /docs/swizzling +/docs/next/advanced/swizzling /docs/next/swizzling +/docs/markdown-features/inline-toc /docs/markdown-features/toc +/docs/next/markdown-features/inline-toc /docs/next/markdown-features/toc +/docs/markdown-features/headings /docs/markdown-features/toc +/docs/next/markdown-features/headings /docs/next/markdown-features/toc + + +# v2.docusaurus.io domain redirect after we put v2 on docusaurus.io +https://v2.docusaurus.io/* https://docusaurus.io/:splat 301! + + +# Redirect older Docusaurus v1 links that do not exist anymore in v2 +https://docusaurus.io/docs/en/* https://v1.docusaurus.io/docs/en/:splat +https://docusaurus.io/docs/fr/* https://v1.docusaurus.io/docs/fr/:splat +https://docusaurus.io/docs/ko/* https://v1.docusaurus.io/docs/ko/:splat +https://docusaurus.io/docs/ro/* https://v1.docusaurus.io/docs/ro/:splat +https://docusaurus.io/docs/ru/* https://v1.docusaurus.io/docs/ru/:splat +https://docusaurus.io/docs/pt-br/* https://v1.docusaurus.io/docs/pt-br/:splat +https://docusaurus.io/docs/zh-cn/* https://v1.docusaurus.io/docs/zh-cn/:splat + + + +# Redirect Docusaurus v1 blog RSS feed +/blog/feed.xml /blog/rss.xml + + +# Feature requests redirects +/feedback/* /feature-requests/:splat 301! +/fr/feedback/* /fr/feature-requests/:splat 301! +/pt-BR/feedback/* /pt-BR/feature-requests/:splat 301! +/ko/feedback/* /ko/feature-requests/:splat 301! +/zh-CN/feedback/* /zh-CN/feature-requests/:splat 301! +/feature-requests/* /feature-requests 200 +/fr/feature-requests/* /fr/feature-requests 200 +/pt-BR/feature-requests/* /pt-BR/feature-requests 200 +/ko/feature-requests/* /ko/feature-requests 200 +/zh-CN/feature-requests/* /zh-CN/feature-requests 200 + + +# FALLBACK: PUT THIS LAST (rules above are more important) +# Redirect each country sub-path to appropriate localized 404 file +# Note: the 404 won't be served if the path match an existing static file +# Note: useless for /* => Netlify already serve /404.html +# See https://docs.netlify.com/routing/redirects/redirect-options/#custom-404-page-handling +/fr/* /fr/404 404 +/pt-BR/* /pt-BR/404 404 +/ko/* /ko/404 404 +/zh-CN/* /zh-CN/404 404 diff --git a/assets/css/styles.76313542.css b/assets/css/styles.76313542.css new file mode 100644 index 0000000000..71ddf77d27 --- /dev/null +++ b/assets/css/styles.76313542.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}[data-theme=dark] .DocSearch,[data-theme=light] .DocSearch{--docsearch-hit-color:var(--ifm-font-color-base);--docsearch-hit-active-color:var(--ifm-color-white)}.toggleButton_x9TT,html{-webkit-tap-highlight-color:transparent}.close,.version_gVgE{float:right}*,.DocSearch-Container,.DocSearch-Container *,.slide___3-Nqo{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_ZO3j article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_AQgk{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_zaS2,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_RUsj,.container_RUsj>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList_Qoir{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_FzoX,.alert__heading,.nullValueParaiso_Ey4X,.playgroundHeader_Tvsk,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover),.tweetMeta_fAxr strong{color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.hash-link,.svg_d33c{-webkit-user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_dS_J:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white);--ifm-footer-background-color:#2b3137}.changelogItemContainer_jeDt,.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_RhpI article>:first-child,.docItemContainer_RhpI header+*,.footer__item,.tweetQuote_h8Rz .avatar__subtitle{margin-top:0}.admonitionContent_Knsx>:last-child,.browserWindowBody_Idgs>:last-child,.cardContainer_Uewx :last-child,.collapsibleContent_EoA1 p:last-child,.details_Nokh>summary>p:last-child,.footer__items,.headingText_iR0x>h2,.tabItem_pnkT>:last-child{margin-bottom:0}.codeBlockStandalone_i_cY,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_UBNu{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_Nokh[data-collapsed=false].isBrowser_QrB5>summary:before,.details_Nokh[open]:not(.isBrowser_QrB5)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.indexCtasGitHubButtonWrapper_AOht,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_PjqA,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand,.popup_EH26 p{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_Qrfg:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_VrjY,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.header-github-link:before,.tabs__item{transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--site-color-feedback-background:#2a2929;--docusaurus-highlighted-code-line-bg:rgba(66,66,66,.35);--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--site-primary-hue-saturation:167 68%;--site-primary-hue-saturation-light:167 56%;--site-color-feedback-background:#f0f8ff;--docusaurus-highlighted-code-line-bg:rgba(0,0,0,.1);--ifm-breadcrumb-color-active:var(--ifm-color-primary-darker)!important;--ifm-menu-color-active:var(--ifm-color-primary-darker)!important;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base);--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.carousel_raHC,.siteSlide_AwQk,[data-rmiz]{position:relative}[data-rmiz-ghost]{pointer-events:none;position:absolute}[data-rmiz-btn-unzoom],[data-rmiz-btn-zoom]{-webkit-appearance:none;appearance:none;background-color:rgba(0,0,0,.7);border:none;border-radius:50%;box-shadow:0 0 1px hsla(0,0%,100%,.5);color:#fff;height:40px;margin:0;outline-offset:2px;padding:9px;touch-action:manipulation;width:40px}[data-rmiz-btn-zoom]:not(:focus):not(:active){clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;pointer-events:none;position:absolute;white-space:nowrap;width:1px}[data-rmiz-btn-zoom]{cursor:zoom-in;inset:10px 10px auto auto;position:absolute}[data-rmiz-btn-unzoom]{cursor:zoom-out;inset:20px 20px auto auto;position:absolute;z-index:1}[data-rmiz-content=found] [data-zoom],[data-rmiz-content=found] [role=img],[data-rmiz-content=found] img,[data-rmiz-content=found] svg{cursor:zoom-in}[data-rmiz-modal]::backdrop{display:none}[data-rmiz-modal][open]{background:0 0;border:0;height:100vh;height:100svh;margin:0;max-height:none;max-width:none;overflow:hidden;padding:0;position:fixed;width:100vw;width:100svw}[data-rmiz-modal-overlay]{inset:0;position:absolute;transition:background-color .3s}[data-rmiz-modal-overlay=hidden]{background-color:hsla(0,0%,100%,0)}[data-rmiz-modal-content]{height:100%;position:relative;width:100%}[data-rmiz-modal-img]{cursor:zoom-out;image-rendering:high-quality;position:absolute;transform-origin:top left;transition:transform .3s}[data-theme=light]{--ifm-color-primary:hsl(var(--site-primary-hue-saturation) 30%);--ifm-color-primary-dark:hsl(var(--site-primary-hue-saturation) 26%);--ifm-color-primary-darker:hsl(var(--site-primary-hue-saturation) 23%);--ifm-color-primary-darkest:hsl(var(--site-primary-hue-saturation) 17%);--ifm-color-primary-light:hsl(var(--site-primary-hue-saturation-light) 39%);--ifm-color-primary-lighter:hsl(var(--site-primary-hue-saturation-light) 47%);--ifm-color-primary-lightest:hsl(var(--site-primary-hue-saturation-light) 58%);--ifm-background-color:#fff}[data-theme=dark]{--ifm-color-primary:hsl(var(--site-primary-hue-saturation) 45%);--ifm-color-primary-dark:hsl(var(--site-primary-hue-saturation) 41%);--ifm-color-primary-darker:hsl(var(--site-primary-hue-saturation) 38%);--ifm-color-primary-darkest:hsl(var(--site-primary-hue-saturation) 32%);--ifm-color-primary-light:hsl(var(--site-primary-hue-saturation-light) 54%);--ifm-color-primary-lighter:hsl(var(--site-primary-hue-saturation-light) 62%);--ifm-color-primary-lightest:hsl(var(--site-primary-hue-saturation-light) 73%)}.header-github-link:before{background-color:var(--ifm-navbar-link-color);content:"";display:flex;height:24px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");width:24px}.header-github-link:hover:before{background-color:var(--ifm-navbar-link-hover-color)}.unique-tabs .tabs__item{line-height:16px;margin-right:8px}.unique-tabs .tabs__item--active{background-color:var(--ifm-tabs-color-active);border:0;border-radius:var(--ifm-global-radius);color:#fff}[data-theme=light] .themedDocusaurus [fill="#FFFF50"]{fill:#adff2f}[data-theme=dark] .themedDocusaurus [fill="#FFFF50"]{fill:#2e8b57}[data-theme=light] .DocSearch{--docsearch-muted-color:var(--ifm-color-emphasis-700);--docsearch-container-background:rgba(94,100,112,.7);--docsearch-modal-background:var(--ifm-color-secondary-lighter);--docsearch-searchbox-background:var(--ifm-color-secondary);--docsearch-searchbox-focus-background:var(--ifm-color-white);--docsearch-hit-background:var(--ifm-color-white);--docsearch-footer-background:var(--ifm-color-white)}[data-theme=dark] .DocSearch{--docsearch-text-color:var(--ifm-font-color-base);--docsearch-muted-color:var(--ifm-color-secondary-darkest);--docsearch-container-background:rgba(47,55,69,.7);--docsearch-modal-background:var(--ifm-background-color);--docsearch-searchbox-background:var(--ifm-background-color);--docsearch-searchbox-focus-background:var(--ifm-color-black);--docsearch-hit-background:var(--ifm-color-emphasis-100);--docsearch-footer-background:var(--ifm-background-surface-color);--docsearch-key-gradient:linear-gradient(-26.5deg,var(--ifm-color-emphasis-200) 0%,var(--ifm-color-emphasis-100) 100%)}div[class^=announcementBar_]{--site-announcement-bar-stripe-color1:#e8d7ff;--site-announcement-bar-stripe-color2:#ffe9d1;background:repeating-linear-gradient(35deg,var(--site-announcement-bar-stripe-color1),var(--site-announcement-bar-stripe-color1) 20px,var(--site-announcement-bar-stripe-color2) 10px,var(--site-announcement-bar-stripe-color2) 40px);font-size:20px;font-weight:700}.screen-reader-only{clip:rect(0 0 0 0);border:0;-webkit-clip-path:polygon(0 0,0 0,0 0);clip-path:polygon(0 0,0 0,0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}[data-theme=dark] img[src$="#gh-light-mode-only"],[data-theme=light] img[src$="#gh-dark-mode-only"],html[data-navbar=false] .navbar{display:none}.test-marker-site-custom-css-unique-rule{content:"site-custom-css-unique-rule"}.video-container{margin:0 auto;max-width:560px;overflow:hidden;position:relative;width:100%}.yt-lite>.lty-playbtn{border:0;cursor:pointer}.dropdown-separator{margin:.3rem 0}.dropdown-archived-versions{font-size:.875rem;padding:.2rem .5rem}.code-block-error-line{background-color:#ff000020;border-left:3px solid #ff000080;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}[data-rmiz-modal-overlay=visible]{background-color:hsla(0,0%,100%,.95)}[data-theme=dark] [data-rmiz-modal-overlay=visible]{background-color:rgba(0,0,0,.95)}html[data-red-border] div#__docusaurus{border:thick solid red}.red_FE5X,html.plugin-docs.plugin-id-docs-tests .red>a{color:red}html.plugin-docs.plugin-id-docs-tests .navbar{border-bottom:thin solid #0ff}html.plugin-blog.plugin-id-blog-tests .navbar{border-bottom:thin solid #0f0}html.plugin-pages.plugin-id-pages-tests .navbar{border-bottom:thin solid #ff0}#z-index-test{z-index:100}html:has(#navbar-dropdown-tests) .navbar__item.dropdown~a{display:none}.test-marker-site-client-module{content:"site-client-module"}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_S51O,.sidebarLogo_UK0N,.themedComponent_bJGS,[data-theme=dark] .lightToggleIcon_dnYY,[data-theme=light] .darkToggleIcon_OBbf,html[data-announcement-bar-initially-dismissed=true] .announcementBar_cTOO{display:none}.skipToContent_UHvc{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_UHvc:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_nmpN{line-height:0;padding:0}.content_ttnW{font-size:85%;padding:5px 0;text-align:center}.content_ttnW a{color:inherit;text-decoration:underline}.DocSearch-Container a,.navlink__gTJ:hover{text-decoration:none}.announcementBar_cTOO{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_Lqfg{flex:0 0 10px}.announcementBarClose_UFLi{align-self:stretch;flex:0 0 30px}.toggle_bT41{height:2rem;width:2rem}.toggleButton_x9TT{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_x9TT:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_Dj8q{cursor:not-allowed}.buttonBack___1mlaL,.buttonFirst___2rhFr,.buttonLast___2yuh0,.buttonNext___2mOCa,.buttonNext___3Lm3s,.dot___3c3SI,.dropdownNavbarItemMobile_A1en,.yt-lite{cursor:pointer}.darkNavbarColorModeToggle_JF8j:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_jnGk,[data-theme=light] .themedComponent--light_LEkC,html:not([data-theme]) .themedComponent--light_LEkC{display:initial}.iconExternalLink_Rdzz{margin-left:.3rem}.iconLanguage_tqOs{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_dDCC:not(:has(>*)){display:none}}.navbarHideable_uAgx{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_QgM6{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_rP1m{color:red;white-space:pre-wrap}.buttons_uHc7,.tagListItem_aQcS{white-space:nowrap}.errorBoundaryFallback_heah{color:red;padding:.55rem}.footerLogoLink_CiM_{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_CiM_:hover,.hash-link:focus,.hover___MYy31,.loading___1pvNI,.zoom___3kqYk,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_rB0w{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_SSbb{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);user-select:none}.hash-link:before{content:"#"}.mainWrapper_PEsc{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.test-marker-theme-layout_zWhB{content:"theme-layout"}.sidebar_P3nc{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_VrjY{font-size:var(--ifm-h3-font-size)}.container_x5Un,.sidebarItemList_OSkG{font-size:.9rem}.sidebarItem_WJ0y{margin-top:.7rem}.sidebarItemLink_Qrfg{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_nUeK{color:var(--ifm-color-primary)!important}.authorCol_bvyx,.authorCol_mDBc{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_L2DM,.imageOnlyAuthorRow_WiD6{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_oyze,.imageOnlyAuthorCol_uiac{margin-left:.3rem;margin-right:.3rem}.searchQueryInput_S_pS,.searchVersionInput_RZ74{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_S_pS:focus,.searchVersionInput_RZ74:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_S_pS::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_dGxU{font-size:.9rem;font-weight:700}.algoliaLogo_nq6Q{max-width:150px}.algoliaLogoPathFill_IWVH{fill:var(--ifm-font-color-base)}.searchResultItem_jZK3{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_Nbvf{font-weight:400;margin-bottom:0}.searchResultItemPath_wcJo{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_HbIg{font-style:italic;margin:.5rem 0 0}.loadingSpinner_Jw0H{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_rYmk{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.tweet_x2tn{font-size:15px}.tweetMeta_fAxr{color:var(--ifm-color-emphasis-700)}.section_rC2D{padding:40px 0}.imageOnlyAuthorCol_uiac [class^=image],.sectionAlt_XiGz,.toggleButton_WvRg{background-color:var(--ifm-color-emphasis-100)}.sectionInner_Y4r1{margin:0 auto}.featureImage_yA8i{margin:0 auto;max-height:128px;width:auto}.featureHeading_TLGJ{font-size:var(--ifm-h3-font-size);padding-top:1rem}.announcement_FsS0{font-size:24px;font-weight:700;margin:0 auto;padding:48px;text-align:center}.announcementDark_tzC4{--ifm-link-color:var(--ifm-color-primary);background-color:#20232a;color:#fff}.announcementInner_RsrQ{margin:0 auto;max-width:768px}.topBanner_JYZy{align-items:center;display:flex;flex-direction:column;font-size:20px;margin:0 auto;max-width:900px;padding:30px 20px;text-align:center}.topBannerTitle_nAZL{font-size:54px;font-weight:700;margin-bottom:.4rem}.topBannerTitleText_Ferb{-webkit-text-fill-color:transparent;background:linear-gradient(90deg,#833ab4,#fd1d1d 50%,#fcb045);-webkit-background-clip:text;background-clip:text}.topBannerTitleText_Ferb:hover{border-bottom:2px solid;border-color:#9800ff}html[data-theme=dark] .topBannerTitleText_Ferb{-webkit-text-fill-color:transparent;background:linear-gradient(90deg,#9800ff,#f62929 50%,#ffa908);-webkit-background-clip:text;background-clip:text}.topBannerDescription_fLgs{font-size:20px}.hero_syme{background-color:#2b3137;padding:48px}.heroInner_VWeJ{margin:0 auto;max-width:1100px;padding:0 20px}.heroProjectTagline_EkV5{color:#fff;font-size:60px;margin:0}.heroTitleTextHtml_zYwv b,.indexCtaTryNowButton_wlFR:hover,.wordWrapButtonEnabled_TBIH .wordWrapButtonIcon_MQXS{color:var(--ifm-color-primary)}@keyframes b{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.heroLogo_jM6J{animation-duration:2s;animation-name:b;float:right;height:auto;margin-top:20px;padding:0 20px 20px}.indexCtas_hUA_{--ifm-button-size-multiplier:1.6;align-items:center;display:flex;flex-wrap:wrap;margin-top:24px}.indexCtas_hUA_ a,.indexCtas_hUA_ a:hover{color:#000}.indexCtas_hUA_ a:last-of-type{margin:20px 36px}.indexCtasGitHubButton_sMIS,.verticalSlideTrayWrap___2nO7o,.verticalSliderTray___267D8{overflow:hidden}.tweetsSection_Fqsy>.col>*{margin-bottom:2rem}.test-marker-site-index-page_LJ7R{content:"site-index-page"}.yt-lite{background-color:#000;background-position:50%;background-size:cover;contain:content;display:block;position:relative}.yt-lite.lyt-activated:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==);background-position:top;background-repeat:repeat-x;content:"";display:block;height:60px;padding-bottom:50px;position:absolute;top:0;transition:.2s cubic-bezier(0,0,.2,1);width:100%}.yt-lite:after{content:"";display:block;padding-bottom:var(--aspect-ratio)}.slideInner___2mfX9,.yt-lite>iframe{height:100%;left:0;position:absolute;top:0;width:100%}.yt-lite>.lty-playbtn{background-color:#212121;border-radius:14%;height:46px;opacity:.8;transition:.2s cubic-bezier(0,0,.2,1);width:70px;z-index:1}.yt-lite:hover>.lty-playbtn{background-color:red;opacity:1}.yt-lite>.lty-playbtn:before{border-color:transparent transparent transparent #fff;border-style:solid;border-width:11px 0 11px 19px;content:""}.yt-lite>.lty-playbtn,.yt-lite>.lty-playbtn:before{left:50%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.yt-lite.lyt-activated{cursor:unset}.yt-lite.lyt-activated:before,.yt-lite.lyt-activated>.lty-playbtn{opacity:0;pointer-events:none}.container_tECh{background-color:#18191a;color:#fff;min-height:100vh;overflow-x:hidden;padding:80px 20px 20px}.container_tECh code{background-color:#444950;color:#fff}.nav_sWk6{align-items:center;background-color:#242526;display:flex;height:3.75rem;justify-content:space-evenly;position:fixed;width:100%;z-index:1}.navlink__gTJ{border-radius:4px;color:#fff;font-size:clamp(12px,4vw,16px);font-weight:500;padding:6px;text-align:center}.navlink__gTJ:hover{background-color:#292a2b}.active_Uuwz{background-color:#363739}.containerParaiso_TYa3{background-color:#292a2b;border-radius:4px;cursor:default;font-family:monospace;font-size:13px;margin-top:10px;padding:10px;position:relative}.basicElementParaiso_DqvR{border-left:1px solid #4f424c;color:#fff;padding:3px 5px 3px 20px}.labelParaiso_l3ql{color:#e7e9db;letter-spacing:.5px;margin-right:3px}.nullValueParaiso_Ey4X{background-color:#4f424c;border-radius:3px;color:#fec418;display:inline-block;font-size:11px;font-weight:700;padding:1px 2px}.collapseIconParaiso_MWEp,.expandIconParaiso_fAkX{font-size:22px;margin-right:3px;vertical-align:baseline;line-height:10px;display:inline-block}.undefinedValueParaiso__T3e{color:#8d8687}.stringValueParaiso_T6i7{color:#f99b15}.booleanValueParaiso__TSh{color:#815ba4}.numberValueParaiso_JGW0{color:#e96ba8}.otherValueParaiso_nnwW,.punctuationParaiso_knwc{color:#fff}.expandIconParaiso_fAkX{color:#815ba4}.collapseIconParaiso_MWEp:after{content:"\25BE"}.collapseIconParaiso_MWEp{color:#06b6ef}.expandIconParaiso_fAkX:after{content:"\25B8"}.collapseContentParaiso_KH36{color:#f99b15;cursor:pointer;font-size:18px;line-height:10px}.collapseContentParaiso_KH36:after{content:"..."}.main_LiBd{background:var(--site-color-feedback-background);border-radius:4px;min-height:500px;padding:var(--ifm-spacing-horizontal)}.listItem_Bobk,.listItem_lSSi,.listItem_zpSX{background-color:#242526;border-radius:4px;margin-bottom:20px;padding:10px}.sectionTitle_T1wU{margin-top:20px}.name_C0v7{color:#e06b6b;font-weight:800}.browserWindowMenuIcon_Vhuh,.searchBar_E3wW{margin-left:auto}.searchBar_E3wW input{border:1px solid gray;border-radius:15px;height:30px;padding:10px}.svg_d33c{fill:currentColor;color:#e9669e;display:inline-block;height:1em;user-select:none;width:1em}.small_xkoK{font-size:1rem}.medium_J4if{font-size:1.25rem}.large_G4cM{font-size:1.8rem}.showcaseCardImage_wjKy{border-bottom:2px solid var(--ifm-color-emphasis-200);height:150px;overflow:hidden}.showcaseCardHeader_H8b9{align-items:center;display:flex;margin-bottom:12px}.showcaseCardTitle_ZxTI{flex:1 1 auto;margin-bottom:0}.showcaseCardTitle_ZxTI a{background:linear-gradient(var(--ifm-color-primary),var(--ifm-color-primary)) 0 100%/0 1px no-repeat;text-decoration:none;transition:background-size .2s ease-out}.showcaseCardTitle_ZxTI a:not(:focus):hover{background-size:100% 1px}.showcaseCardHeader_H8b9,.showcaseCardTitle_ZxTI{margin-right:.25rem}.showcaseCardSrcBtn_F6t0{border:none;margin-left:6px;padding-left:12px;padding-right:12px}.showcaseCardSrcBtn_F6t0:focus-visible{background-color:var(--ifm-color-secondary-dark)}[data-theme=dark] .showcaseCardSrcBtn_F6t0{background-color:var(--ifm-color-emphasis-200)!important;color:inherit}[data-theme=dark] .showcaseCardSrcBtn_F6t0:hover{background-color:var(--ifm-color-emphasis-300)!important}.showcaseCardBody_bvOP{font-size:smaller;line-height:1.66}.cardFooter_Xq1d{display:flex;flex-wrap:wrap}.tag_jo6t{align-items:center;border:1px solid var(--ifm-color-secondary-darkest);border-radius:12px;cursor:default;display:inline-flex;font-size:.675rem;margin-bottom:6px!important;margin-right:6px}.headingButtons_DX79>*,.headingText_iR0x>span,.tag_jo6t .textLabel_lQex{margin-left:8px}.tag_jo6t .colorLabel_D_Fl{border-radius:50%;height:7px;margin-left:6px;margin-right:6px;width:7px}.cardList_kMxr{display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.showcaseFavorite_LFys{background-color:#f6fdfd;padding-bottom:2rem;padding-top:2rem}html[data-theme=dark] .showcaseFavorite_LFys{background-color:#232525}.DocSearch-Button-Container,.headingButtons_DX79,.headingFavorites_LTro{align-items:center;display:flex}.checkboxLabel_vxMa:hover{box-shadow:0 0 2px 1px var(--ifm-color-secondary-darkest);opacity:1}input[type=checkbox]+.checkboxLabel_vxMa{align-items:center;border:2px solid var(--ifm-color-secondary-darkest);border-radius:4px;cursor:pointer;display:flex;line-height:1.5;opacity:.85;padding:.275rem .8rem;transition:opacity .2s ease-out}input:focus-visible+.checkboxLabel_vxMa{outline:currentColor solid 2px}input:checked+.checkboxLabel_vxMa{background-color:rgba(148,225,208,.25);border:2px solid var(--ifm-color-primary-darkest);opacity:.9}input:checked+.checkboxLabel_vxMa:hover{box-shadow:0 0 2px 1px var(--ifm-color-primary-dark);opacity:.75}html[data-theme=dark] input:checked+.checkboxLabel_vxMa{background-color:rgba(148,225,208,.1)}.checkboxLabel_DiOL{--height:25px;--width:80px;--border:2px;border:var(--border) solid var(--ifm-color-primary-darkest);border-radius:var(--height);box-shadow:var(--ifm-global-shadow-md);cursor:pointer;display:flex;height:var(--height);justify-content:space-around;opacity:.75;position:relative;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default);width:var(--width)}.checkboxLabel_DiOL:hover{box-shadow:var(--ifm-global-shadow-md),0 0 2px 1px var(--ifm-color-primary-dark);opacity:1}.checkboxLabel_DiOL:after{background-color:var(--ifm-color-primary-darkest);border-radius:var(--height);content:"";height:100%;inset:0;position:absolute;transform:translateX(calc(var(--width)/ 2 - var(--border)));transition:transform var(--ifm-transition-fast) var(--ifm-transition-timing-default);width:calc(var(--width)/2)}input:focus-visible~.checkboxLabel_DiOL:after{outline:currentColor solid 2px}.checkboxLabel_DiOL>*{color:inherit;font-size:.8rem;transition:opacity .15s ease-in 50ms}input:checked~.checkboxLabel_DiOL:after{transform:translateX(calc(var(--border)*-1))}.headingRow_DGKw{align-items:center;display:flex;justify-content:space-between}.headingText_iR0x{align-items:baseline;display:flex}.tagList_Ku_M{align-items:center;display:flex;flex-wrap:wrap}.tagListItem_aQcS{font-size:.8rem;height:32px;margin-right:.5rem;margin-top:.5rem;-webkit-user-select:none;user-select:none}.tagListItem_aQcS:last-child{margin-right:0}.route_X3At{margin-bottom:10px}.routeName_j49z{color:#e06b6b}.backToTopButton_PuQw{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_PuQw:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_YSA3{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PUyN{display:none;margin:0}.docMainContainer_EfwR,.docRoot_kBZ6{display:flex;width:100%}.docsWrapper_lLmf{display:flex;flex:1 0 auto}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;border:0;cursor:pointer}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset,.buttonContainer_Gl4a .close{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards c;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon,.tocCollapsibleContent_FG8F a{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li,.buttonContainer_Gl4a{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}@keyframes c{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.popup_EH26{align-items:center;bottom:16px;display:flex;justify-content:space-between;position:fixed;right:16px;width:344px;z-index:999}.apiTable_e8hp,.colorTable_Js7s{font-size:small}.apiTable_e8hp tbody tr{transition:box-shadow .2s}.apiTable_e8hp tbody tr:focus,.apiTable_e8hp tbody tr:hover{box-shadow:0 0 7px 0 inset var(--ifm-color-warning);cursor:pointer;outline:0;transition:box-shadow .2s}.cardContainer_Uewx{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_Uewx:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_dwRT{font-size:1.2rem}.cardDescription_mCBT{font-size:.8rem}.browserWindow_my1Q{border:3px solid var(--ifm-color-emphasis-200);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.browserWindowHeader_jXSR{align-items:center;background:var(--ifm-color-emphasis-200);display:flex;padding:.5rem 1rem}.row_KZDM:after{clear:both;content:"";display:table}.right_oyze{align-self:center;width:10%}.browserWindowAddressBar_Pd8y{background-color:var(--ifm-background-color);border-radius:12.5px;color:var(--ifm-color-gray-800);flex:1 0;font:400 13px Arial,sans-serif;margin:0 1rem 0 .5rem;padding:5px 15px;-webkit-user-select:none;user-select:none}[data-theme=dark] .browserWindowAddressBar_Pd8y{color:var(--ifm-color-gray-300)}.dot_giz1{background-color:#bbb;border-radius:50%;display:inline-block;height:12px;margin-right:6px;margin-top:4px;width:12px}.bar_rrRL{background-color:#aaa;display:block;height:3px;margin:3px 0;width:17px}.browserWindowBody_Idgs{background-color:var(--ifm-background-color);border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;padding:1rem}.red_FE5X[aria-selected=true]{border-bottom-color:red}.orange_kp8w{color:orange}.orange_kp8w[aria-selected=true]{border-bottom-color:orange}.yellow_uGry{color:#ff0}.yellow_uGry[aria-selected=true]{border-bottom-color:#ff0}.image___xtQGH{display:block;height:100%;width:100%}.spinner___27VUp{animation-duration:1s;animation-iteration-count:infinite;animation-name:d;animation-timing-function:linear;border:4px solid #a9a9a9;border-radius:30px;border-top-color:#000;height:30px;left:calc(50% - 15px);position:absolute;top:calc(50% - 15px);width:30px}@keyframes d{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.container___2O72F{height:100%;overflow:hidden;position:relative;width:100%}.overlay___IV4qY{bottom:0;cursor:zoom-in;left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .3s,transform .3s}.imageLoadingSpinnerContainer___3UIPD,.masterSpinnerContainer___1Z6hB{background-color:#f4f4f4;bottom:0;left:0;position:absolute;right:0;top:0}.slide___3-Nqo{display:block;height:0;list-style-type:none;margin:0;position:relative}.slide___3-Nqo:focus{outline:0!important}.slideHorizontal___1NzNV,.verticalTray___12Key{float:left}[dir=rtl] .slideHorizontal___1NzNV{direction:rtl;transform:scaleX(-1)}.focusRing___1airF{bottom:5px;left:5px;outline:Highlight solid 5px;pointer-events:none;position:absolute;right:5px;top:5px}.horizontalSlider___281Ls,.verticalSlider___34ZFD{position:relative;overflow:hidden}.horizontalSlider___281Ls{touch-action:pan-y pinch-zoom}[dir=rtl] .horizontalSlider___281Ls{direction:ltr;transform:scaleX(-1)}.horizontalSliderTray___1L-0W{overflow:hidden;width:100%}.sliderTray___-vHFQ{display:block;list-style:none;margin:0;padding:0}.sliderAnimation___300FY{transition:transform .5s cubic-bezier(.645,.045,.355,1);will-change:transform}.navButton_qSul,.siteLink_IglZ{background-color:rgba(0,0,0,.3);position:absolute;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navButton_qSul{border:0;border-radius:50%;color:#fff;font-size:20px;height:40px;top:50%;transform:translateY(-50%);width:40px}.navButton_qSul:hover{background-color:rgba(0,0,0,.45)}.dotGroup_n_95{bottom:5px;display:flex;justify-content:center;pointer-events:none;position:absolute;width:100%}.dotGroup_n_95>.carousel__dot{background:rgba(0,0,0,.2);border:none;border-radius:50%;display:inline-block;height:1rem;margin:2px;pointer-events:auto;width:1rem}.dotGroup_n_95>.carousel__dot--selected{background:rgba(0,0,0,.45)}.siteLink_IglZ{--ifm-link-color:var(--ifm-color-gray-400);border-radius:6px;bottom:2px;font-size:16px;padding:0 12px;right:2px}.siteLink_IglZ:hover{--ifm-link-color:var(--ifm-color-gray-200);--ifm-link-hover-color:var(--ifm-color-gray-200);--ifm-link-hover-decoration:none;background-color:rgba(0,0,0,.45)}.wrappingBlock_S4U4{display:inline-block;padding:5px;vertical-align:top;width:50%}.wrappingBlock_S4U4 code[class^=codeBlockLines]{white-space:pre-wrap}.tableOfContentsInline_2sru ul{font-size:medium;list-style-type:disc;padding-top:0}.tocCollapsibleButton_IbtT{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_IbtT:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_Nor3:after,.tocCollapsibleExpanded_FzA_{transform:none}.tocCollapsible_BEWm{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.codeBlockContainer_jDV4,.playgroundContainer_6Ior{box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.tocCollapsibleContent_FG8F>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_FG8F ul li{margin:.4rem .8rem}.playgroundContainer_6Ior{border-radius:var(--ifm-global-radius);overflow:hidden}.playgroundHeader_Tvsk{background:var(--ifm-color-emphasis-200);color:var(--ifm-color-content);font-size:var(--ifm-code-font-size);font-weight:700;letter-spacing:.08rem;padding:.75rem}.playgroundHeader_Tvsk:first-of-type{background:var(--ifm-color-emphasis-600);color:var(--ifm-color-content-inverse)}.playgroundEditor_TySg{direction:ltr;font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace)!important}.playgroundPreview_mApW{background-color:var(--ifm-pre-background);padding:1rem}.buttonGroup_cUGO button,.codeBlockContainer_jDV4{background:var(--prism-background-color);color:var(--prism-color)}.codeBlockContainer_jDV4{border-radius:var(--ifm-code-border-radius)}.codeBlockContent_vx7S{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_bdru{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_Gebt{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_bdru+.codeBlockContent_vx7S .codeBlock_Gebt{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_FJaf{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_FU9Q{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup_cUGO{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_cUGO button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup_cUGO button:focus-visible,.buttonGroup_cUGO button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup_cUGO button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_qRmp{counter-increment:a;display:table-row}.codeLineNumber_dS_J{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_dS_J:before{content:counter(a);opacity:.4}.codeLineContent_XF5l{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_OkN_{opacity:1!important}.copyButtonIcons_OqsO{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_PgCn,.copyButtonSuccessIcon_bsQG{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_bsQG{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_OkN_ .copyButtonIcon_PgCn{opacity:0;transform:scale(.33)}.copyButtonCopied_OkN_ .copyButtonSuccessIcon_bsQG{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_Nd8t{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_Nd8t:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_TiLs{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_AQg7{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_AQg7:after,.tagWithCount_AQg7:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_AQg7:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_AQg7:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_AQg7 span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_SyQ5{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_MQXS{height:1.2rem;width:1.2rem}.details_Nokh{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_Nokh>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_Nokh>summary::-webkit-details-marker{display:none}.details_Nokh>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_EoA1{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_Cn_P{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.tags_rTaS,.tweetQuote_h8Rz p{display:inline}.tag_l5va{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_IMw_{margin-right:.3em;vertical-align:sub}.admonitionIcon_rXq6,.color_mVUL{display:inline-block;vertical-align:middle}.image_oRbT{height:100%;object-fit:cover;width:100%}.containsTaskList_k9gM{list-style:none}:not(.containsTaskList_k9gM>li)>.containsTaskList_k9gM{padding-left:0}.toggleButton_WvRg{border-radius:50%;height:var(--ifm-avatar-photo-size);margin-left:.3rem;margin-right:.3rem;width:var(--ifm-avatar-photo-size)}.toggleButtonIconExpanded_ERxv{transform:rotate(180deg)}.img_vXGZ{height:auto}.changelogItemTitleList_sueG{font-size:2rem}.admonition_o5H7{margin-bottom:1em}.admonitionHeading_FzoX{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_FzoX:not(:last-child){margin-bottom:.3rem}.admonitionHeading_FzoX code{text-transform:none}.admonitionIcon_rXq6{margin-right:.4em}.admonitionIcon_rXq6 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.color_mVUL{border-radius:.5rem;height:2rem;width:2rem}.input_HUC3{font-size:var(--ifm-font-size-base);padding:.5rem}.colorInput_C1YB,.input_HUC3{border-color:var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);border-style:solid;border-width:var(--ifm-global-border-width)}.colorInput_C1YB{height:2.25rem;position:relative;top:7px}.lastUpdated_OHCJ{font-size:smaller;font-style:italic;margin-top:.2rem}.tweetQuote_h8Rz{--ifm-link-color:var(--ifm-color-emphasis-900);--ifm-link-hover-color:var(--ifm-color-emphasis-900);margin:3rem 1rem;padding:0}.tweetQuote_h8Rz blockquote{border:none;font-size:1.2rem;font-weight:200;line-height:1.4;margin-bottom:.6rem;position:relative;text-align:center}.tweetQuote_h8Rz blockquote:after,.tweetQuote_h8Rz blockquote:before{color:#f1efe6;font-family:cursive;font-size:6rem;height:3rem;line-height:1;position:absolute;width:3rem}.tweetQuote_h8Rz blockquote:before{content:"“";left:-2.4rem;top:-1.1rem}.tweetQuote_h8Rz blockquote:after{bottom:-1.1rem;content:"”";right:-1.6rem}[data-theme=dark] .tweetQuote_h8Rz blockquote:after,[data-theme=dark] .tweetQuote_h8Rz blockquote:before{color:#3b3b3b}.tweetQuote_h8Rz .avatarImg_b51M{height:42px;width:42px}.tableOfContents_RLlU{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.rss_fOa_,.rss_fOa_:hover{color:#f26522}.twitter_LekN,.twitter_LekN:hover{color:#1da1f2}.breadcrumbHomeIcon_uaSn{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Wvrh{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_tRie{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.footerTip_UBUV{font-size:.8rem;margin-top:var(--ifm-paragraph-margin-bottom)}.mdxPageWrapper_bWhk{justify-content:center}@media screen and (min-width:800px){.nav_sWk6{align-items:center;background-color:#18191a;border-right:1px solid #606770;flex-direction:column;float:left;height:100vh;justify-content:flex-start;padding-top:20px;width:200px}.navlink__gTJ{margin-top:20px;text-align:left;width:80%}.container_tECh{float:right;padding-top:40px;width:calc(100% - 200px)}}@media (min-width:997px){.collapseSidebarButton_PUyN,.expandButton_ockD{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_UFLi,.announcementBarPlaceholder_Lqfg{flex-basis:50px}.navbarSearchContainer_dDCC{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.tweetsSection_Fqsy>.col>:last-child{margin-bottom:0}.collapseSidebarButton_PUyN{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_DI0B{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_H1n0,[dir=rtl] .collapseSidebarButtonIcon_DI0B{transform:rotate(0)}.collapseSidebarButton_PUyN:focus,.collapseSidebarButton_PUyN:hover,.expandButton_ockD:focus,.expandButton_ockD:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_t1vY{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_rWGR{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_rWGR{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_Pf08{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_vtcw{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_tZ9s{padding-top:0}.sidebarHidden_PrHU{opacity:0;visibility:hidden}.sidebarLogo_UK0N{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_UK0N img{height:2rem;margin-right:.5rem}.expandButton_ockD{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_H1n0{transform:rotate(180deg)}.docSidebarContainer_S51O{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_gbDM{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_K3q9{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_EfwR{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_r8nV{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_nA1F{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_OHCJ{text-align:right}.tocMobile_NSfz{display:none}.docItemCol_n6xZ,.generatedIndexPage_hs4p{max-width:75%!important}.list_ZO3j article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_UolE,.footer__link-separator,.navbar__item,.sidebar_P3nc,.tableOfContents_RLlU{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_dDCC{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.tweetsSection_Fqsy>.col:last-child>:last-child{margin-bottom:0}.docItemContainer_oucX{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_ourN,.searchResultsColumn_dGxU{max-width:60%!important}.searchLogoColumn_v5Xz,.searchVersionColumn_n2Lb{max-width:40%!important}.searchLogoColumn_v5Xz{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media only screen and (max-width:768px){.topBannerTitle_nAZL{font-size:40px}.topBannerDescription_fLgs{font-size:16px;white-space:normal}.hero_syme{padding-left:20px;padding-right:20px}.heroInner_VWeJ{padding:0}.heroProjectTagline_EkV5{font-size:36px;text-align:center}.heroLogo_jM6J{display:block;float:none;margin:0 auto}.indexCtas_hUA_{justify-content:center}.indexCtas_hUA_ a{margin:20px 36px}.indexCtasGitHubButton_sMIS{display:none}.siteLink_IglZ{font-size:12px;padding:0 8px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_UBNu{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_ourN{max-width:100%!important}.searchVersionColumn_n2Lb{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media screen and (max-width:500px){.popup_EH26{bottom:0;right:0;width:100%}}@media (-webkit-min-device-pixel-ratio:0){.focusRing___1airF{outline-color:-webkit-focus-ring-color;outline-style:auto}}@media (hover:hover){.backToTopButton_PuQw:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}[data-rmiz-modal-img],[data-rmiz-modal-overlay]{transition-duration:.01ms!important}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_cTOO,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_NSfz{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_FJaf{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.b2ebf54e.css b/assets/css/styles.b2ebf54e.css deleted file mode 100644 index b572b7e8ef..0000000000 --- a/assets/css/styles.b2ebf54e.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){display:none}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.buttons_AeoN,.features_t9lD{align-items:center;display:flex}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.features_t9lD{padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_AeoN{justify-content:center}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.mdxPageWrapper_j9I6{justify-content:center}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js b/assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js new file mode 100644 index 0000000000..fd076832c2 --- /dev/null +++ b/assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export default 1; diff --git a/assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json b/assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json new file mode 100644 index 0000000000..f2a886f39d --- /dev/null +++ b/assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json @@ -0,0 +1,3 @@ +{ + "hello": "world" +} diff --git a/assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx b/assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx new file mode 100644 index 0000000000..3c51aea4e7 Binary files /dev/null and b/assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx differ diff --git a/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf b/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf new file mode 100644 index 0000000000..188262276a Binary files /dev/null and b/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf differ diff --git a/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz b/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz new file mode 100644 index 0000000000..188262276a Binary files /dev/null and b/assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz differ diff --git a/assets/ideal-img/30-days-swa.74d6151.640.png b/assets/ideal-img/30-days-swa.74d6151.640.png new file mode 100644 index 0000000000..f3fdd6ec95 Binary files /dev/null and b/assets/ideal-img/30-days-swa.74d6151.640.png differ diff --git a/assets/ideal-img/404lab-wiki.91eec49.640.png b/assets/ideal-img/404lab-wiki.91eec49.640.png new file mode 100644 index 0000000000..9d8348d537 Binary files /dev/null and b/assets/ideal-img/404lab-wiki.91eec49.640.png differ diff --git a/assets/ideal-img/7wate-wiki.147bf12.640.png b/assets/ideal-img/7wate-wiki.147bf12.640.png new file mode 100644 index 0000000000..080f53714f Binary files /dev/null and b/assets/ideal-img/7wate-wiki.147bf12.640.png differ diff --git a/assets/ideal-img/CIPP.ec28ed3.640.png b/assets/ideal-img/CIPP.ec28ed3.640.png new file mode 100644 index 0000000000..5fd57780a7 Binary files /dev/null and b/assets/ideal-img/CIPP.ec28ed3.640.png differ diff --git a/assets/ideal-img/SeaORM.851248f.640.png b/assets/ideal-img/SeaORM.851248f.640.png new file mode 100644 index 0000000000..f3a8f38b44 Binary files /dev/null and b/assets/ideal-img/SeaORM.851248f.640.png differ diff --git a/assets/ideal-img/SeaQL-blog.8f81fe4.640.png b/assets/ideal-img/SeaQL-blog.8f81fe4.640.png new file mode 100644 index 0000000000..4b9e70f9bb Binary files /dev/null and b/assets/ideal-img/SeaQL-blog.8f81fe4.640.png differ diff --git a/assets/ideal-img/Seaography.20333af.640.png b/assets/ideal-img/Seaography.20333af.640.png new file mode 100644 index 0000000000..7e4be9fa39 Binary files /dev/null and b/assets/ideal-img/Seaography.20333af.640.png differ diff --git a/assets/ideal-img/Seaography.2b13efe.1030.png b/assets/ideal-img/Seaography.2b13efe.1030.png new file mode 100644 index 0000000000..0722acf21f Binary files /dev/null and b/assets/ideal-img/Seaography.2b13efe.1030.png differ diff --git a/assets/ideal-img/StarfishQL.352ce0a.640.png b/assets/ideal-img/StarfishQL.352ce0a.640.png new file mode 100644 index 0000000000..4a16912805 Binary files /dev/null and b/assets/ideal-img/StarfishQL.352ce0a.640.png differ diff --git a/assets/ideal-img/agilets.998d04b.640.png b/assets/ideal-img/agilets.998d04b.640.png new file mode 100644 index 0000000000..e98652e89f Binary files /dev/null and b/assets/ideal-img/agilets.998d04b.640.png differ diff --git a/assets/ideal-img/aide_jeune.08049be.640.png b/assets/ideal-img/aide_jeune.08049be.640.png new file mode 100644 index 0000000000..81c6fbfecf Binary files /dev/null and b/assets/ideal-img/aide_jeune.08049be.640.png differ diff --git a/assets/ideal-img/aispeaker.0538c7c.640.png b/assets/ideal-img/aispeaker.0538c7c.640.png new file mode 100644 index 0000000000..dbc127a519 Binary files /dev/null and b/assets/ideal-img/aispeaker.0538c7c.640.png differ diff --git a/assets/ideal-img/akara-blog.990b5c8.640.png b/assets/ideal-img/akara-blog.990b5c8.640.png new file mode 100644 index 0000000000..41b24116df Binary files /dev/null and b/assets/ideal-img/akara-blog.990b5c8.640.png differ diff --git a/assets/ideal-img/algolia.05175a2.640.png b/assets/ideal-img/algolia.05175a2.640.png new file mode 100644 index 0000000000..f5e1b3de0c Binary files /dev/null and b/assets/ideal-img/algolia.05175a2.640.png differ diff --git a/assets/ideal-img/apache-apisix.7582932.640.png b/assets/ideal-img/apache-apisix.7582932.640.png new file mode 100644 index 0000000000..54247212f1 Binary files /dev/null and b/assets/ideal-img/apache-apisix.7582932.640.png differ diff --git a/assets/ideal-img/apexfp.effe720.640.png b/assets/ideal-img/apexfp.effe720.640.png new file mode 100644 index 0000000000..97de54b73c Binary files /dev/null and b/assets/ideal-img/apexfp.effe720.640.png differ diff --git a/assets/ideal-img/astronomer.5bc3316.640.png b/assets/ideal-img/astronomer.5bc3316.640.png new file mode 100644 index 0000000000..dfda53646b Binary files /dev/null and b/assets/ideal-img/astronomer.5bc3316.640.png differ diff --git a/assets/ideal-img/attobot.ed5b5b2.640.png b/assets/ideal-img/attobot.ed5b5b2.640.png new file mode 100644 index 0000000000..de536eea99 Binary files /dev/null and b/assets/ideal-img/attobot.ed5b5b2.640.png differ diff --git a/assets/ideal-img/avana-wallet.a19cb66.640.png b/assets/ideal-img/avana-wallet.a19cb66.640.png new file mode 100644 index 0000000000..2bd6212cb9 Binary files /dev/null and b/assets/ideal-img/avana-wallet.a19cb66.640.png differ diff --git a/assets/ideal-img/aventus.9bbf725.640.png b/assets/ideal-img/aventus.9bbf725.640.png new file mode 100644 index 0000000000..42d069cf01 Binary files /dev/null and b/assets/ideal-img/aventus.9bbf725.640.png differ diff --git a/assets/ideal-img/awe-framework.bebaed4.640.png b/assets/ideal-img/awe-framework.bebaed4.640.png new file mode 100644 index 0000000000..8e3dc0074c Binary files /dev/null and b/assets/ideal-img/awe-framework.bebaed4.640.png differ diff --git a/assets/ideal-img/axioms.9cc2f96.640.png b/assets/ideal-img/axioms.9cc2f96.640.png new file mode 100644 index 0000000000..e4f938bb95 Binary files /dev/null and b/assets/ideal-img/axioms.9cc2f96.640.png differ diff --git a/assets/ideal-img/babel.d0da959.640.png b/assets/ideal-img/babel.d0da959.640.png new file mode 100644 index 0000000000..edce7c4dcd Binary files /dev/null and b/assets/ideal-img/babel.d0da959.640.png differ diff --git a/assets/ideal-img/babel.eb46763.1030.png b/assets/ideal-img/babel.eb46763.1030.png new file mode 100644 index 0000000000..9e1eecb798 Binary files /dev/null and b/assets/ideal-img/babel.eb46763.1030.png differ diff --git a/assets/ideal-img/bandwidth.a9a038a.640.png b/assets/ideal-img/bandwidth.a9a038a.640.png new file mode 100644 index 0000000000..be9928959e Binary files /dev/null and b/assets/ideal-img/bandwidth.a9a038a.640.png differ diff --git a/assets/ideal-img/benthos.1a77a28.640.png b/assets/ideal-img/benthos.1a77a28.640.png new file mode 100644 index 0000000000..86d9e2c257 Binary files /dev/null and b/assets/ideal-img/benthos.1a77a28.640.png differ diff --git a/assets/ideal-img/blinkshell.5e655e6.640.png b/assets/ideal-img/blinkshell.5e655e6.640.png new file mode 100644 index 0000000000..fbc623ba49 Binary files /dev/null and b/assets/ideal-img/blinkshell.5e655e6.640.png differ diff --git a/assets/ideal-img/blogasaurus.bf69b17.640.png b/assets/ideal-img/blogasaurus.bf69b17.640.png new file mode 100644 index 0000000000..22e0293197 Binary files /dev/null and b/assets/ideal-img/blogasaurus.bf69b17.640.png differ diff --git a/assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png b/assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png new file mode 100644 index 0000000000..7f335b773f Binary files /dev/null and b/assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png differ diff --git a/assets/ideal-img/botonic.f085f1c.640.png b/assets/ideal-img/botonic.f085f1c.640.png new file mode 100644 index 0000000000..84ee275ae4 Binary files /dev/null and b/assets/ideal-img/botonic.f085f1c.640.png differ diff --git a/assets/ideal-img/boxyhq.3cb689e.640.png b/assets/ideal-img/boxyhq.3cb689e.640.png new file mode 100644 index 0000000000..dbfe3929a9 Binary files /dev/null and b/assets/ideal-img/boxyhq.3cb689e.640.png differ diff --git a/assets/ideal-img/brainboard.77a456b.640.png b/assets/ideal-img/brainboard.77a456b.640.png new file mode 100644 index 0000000000..26339fa229 Binary files /dev/null and b/assets/ideal-img/brainboard.77a456b.640.png differ diff --git a/assets/ideal-img/bruce-wiki.46cdfb8.640.png b/assets/ideal-img/bruce-wiki.46cdfb8.640.png new file mode 100644 index 0000000000..e3c7b972bd Binary files /dev/null and b/assets/ideal-img/bruce-wiki.46cdfb8.640.png differ diff --git a/assets/ideal-img/build-tracker.228399d.640.png b/assets/ideal-img/build-tracker.228399d.640.png new file mode 100644 index 0000000000..944d3b8ef3 Binary files /dev/null and b/assets/ideal-img/build-tracker.228399d.640.png differ diff --git a/assets/ideal-img/chaos-mesh.7499da5.640.png b/assets/ideal-img/chaos-mesh.7499da5.640.png new file mode 100644 index 0000000000..c82a80bd10 Binary files /dev/null and b/assets/ideal-img/chaos-mesh.7499da5.640.png differ diff --git a/assets/ideal-img/charles-ancheta.e031e5e.640.png b/assets/ideal-img/charles-ancheta.e031e5e.640.png new file mode 100644 index 0000000000..ccf423eee6 Binary files /dev/null and b/assets/ideal-img/charles-ancheta.e031e5e.640.png differ diff --git a/assets/ideal-img/chatkitty.76eb8a9.640.png b/assets/ideal-img/chatkitty.76eb8a9.640.png new file mode 100644 index 0000000000..cdbbdd1b58 Binary files /dev/null and b/assets/ideal-img/chatkitty.76eb8a9.640.png differ diff --git a/assets/ideal-img/christopher-chedeau.a975949.200.jpg b/assets/ideal-img/christopher-chedeau.a975949.200.jpg new file mode 100644 index 0000000000..1ae4a22cb1 Binary files /dev/null and b/assets/ideal-img/christopher-chedeau.a975949.200.jpg differ diff --git a/assets/ideal-img/claritychallenge.2c7a880.640.png b/assets/ideal-img/claritychallenge.2c7a880.640.png new file mode 100644 index 0000000000..247ef5636f Binary files /dev/null and b/assets/ideal-img/claritychallenge.2c7a880.640.png differ diff --git a/assets/ideal-img/clutch.10095e3.640.png b/assets/ideal-img/clutch.10095e3.640.png new file mode 100644 index 0000000000..896dd2aea4 Binary files /dev/null and b/assets/ideal-img/clutch.10095e3.640.png differ diff --git a/assets/ideal-img/codesandbox.74163c2.1030.png b/assets/ideal-img/codesandbox.74163c2.1030.png new file mode 100644 index 0000000000..e87d84e671 Binary files /dev/null and b/assets/ideal-img/codesandbox.74163c2.1030.png differ diff --git a/assets/ideal-img/codesandbox.b8068ce.640.png b/assets/ideal-img/codesandbox.b8068ce.640.png new file mode 100644 index 0000000000..a195fa59e9 Binary files /dev/null and b/assets/ideal-img/codesandbox.b8068ce.640.png differ diff --git a/assets/ideal-img/codesweetly.60a18df.640.png b/assets/ideal-img/codesweetly.60a18df.640.png new file mode 100644 index 0000000000..ad7467b23d Binary files /dev/null and b/assets/ideal-img/codesweetly.60a18df.640.png differ diff --git a/assets/ideal-img/codeyourfuture.606a295.640.png b/assets/ideal-img/codeyourfuture.606a295.640.png new file mode 100644 index 0000000000..ddd19349e4 Binary files /dev/null and b/assets/ideal-img/codeyourfuture.606a295.640.png differ diff --git a/assets/ideal-img/comp-labs.822720f.640.png b/assets/ideal-img/comp-labs.822720f.640.png new file mode 100644 index 0000000000..9526a98882 Binary files /dev/null and b/assets/ideal-img/comp-labs.822720f.640.png differ diff --git a/assets/ideal-img/componentkit.9b54e22.640.png b/assets/ideal-img/componentkit.9b54e22.640.png new file mode 100644 index 0000000000..938542ae94 Binary files /dev/null and b/assets/ideal-img/componentkit.9b54e22.640.png differ diff --git a/assets/ideal-img/configcat.0680ead.640.png b/assets/ideal-img/configcat.0680ead.640.png new file mode 100644 index 0000000000..e6ad78a952 Binary files /dev/null and b/assets/ideal-img/configcat.0680ead.640.png differ diff --git a/assets/ideal-img/console-table.5471752.640.png b/assets/ideal-img/console-table.5471752.640.png new file mode 100644 index 0000000000..83e06b377f Binary files /dev/null and b/assets/ideal-img/console-table.5471752.640.png differ diff --git a/assets/ideal-img/countrystatecity.86819b3.640.png b/assets/ideal-img/countrystatecity.86819b3.640.png new file mode 100644 index 0000000000..91b2eb41ee Binary files /dev/null and b/assets/ideal-img/countrystatecity.86819b3.640.png differ diff --git a/assets/ideal-img/courier.129992f.1030.png b/assets/ideal-img/courier.129992f.1030.png new file mode 100644 index 0000000000..027e4add3a Binary files /dev/null and b/assets/ideal-img/courier.129992f.1030.png differ diff --git a/assets/ideal-img/courier.e09893c.640.png b/assets/ideal-img/courier.e09893c.640.png new file mode 100644 index 0000000000..a16cbb1566 Binary files /dev/null and b/assets/ideal-img/courier.e09893c.640.png differ diff --git a/assets/ideal-img/create-react-app.04f5848.640.png b/assets/ideal-img/create-react-app.04f5848.640.png new file mode 100644 index 0000000000..c16df7a136 Binary files /dev/null and b/assets/ideal-img/create-react-app.04f5848.640.png differ diff --git a/assets/ideal-img/cryptodevhub.473746b.640.png b/assets/ideal-img/cryptodevhub.473746b.640.png new file mode 100644 index 0000000000..f1d5fea3f9 Binary files /dev/null and b/assets/ideal-img/cryptodevhub.473746b.640.png differ diff --git a/assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png b/assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png new file mode 100644 index 0000000000..ca9ebff20f Binary files /dev/null and b/assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png differ diff --git a/assets/ideal-img/darklang.db998be.640.png b/assets/ideal-img/darklang.db998be.640.png new file mode 100644 index 0000000000..db46a07a26 Binary files /dev/null and b/assets/ideal-img/darklang.db998be.640.png differ diff --git a/assets/ideal-img/dart-code-metrics.acf78cc.640.png b/assets/ideal-img/dart-code-metrics.acf78cc.640.png new file mode 100644 index 0000000000..93880f22f8 Binary files /dev/null and b/assets/ideal-img/dart-code-metrics.acf78cc.640.png differ diff --git a/assets/ideal-img/datagit.4382cac.640.png b/assets/ideal-img/datagit.4382cac.640.png new file mode 100644 index 0000000000..ca690e8f58 Binary files /dev/null and b/assets/ideal-img/datagit.4382cac.640.png differ diff --git a/assets/ideal-img/datagit.52152e6.640.png b/assets/ideal-img/datagit.52152e6.640.png new file mode 100644 index 0000000000..ad981c00ed Binary files /dev/null and b/assets/ideal-img/datagit.52152e6.640.png differ diff --git a/assets/ideal-img/datagit.8ff0610.1030.png b/assets/ideal-img/datagit.8ff0610.1030.png new file mode 100644 index 0000000000..0e88ebb207 Binary files /dev/null and b/assets/ideal-img/datagit.8ff0610.1030.png differ diff --git a/assets/ideal-img/devspace.b33de3f.640.png b/assets/ideal-img/devspace.b33de3f.640.png new file mode 100644 index 0000000000..c4bfa2a640 Binary files /dev/null and b/assets/ideal-img/devspace.b33de3f.640.png differ diff --git a/assets/ideal-img/difranca-technotes.344b6c1.640.png b/assets/ideal-img/difranca-technotes.344b6c1.640.png new file mode 100644 index 0000000000..4a8fe64fb5 Binary files /dev/null and b/assets/ideal-img/difranca-technotes.344b6c1.640.png differ diff --git a/assets/ideal-img/digitalsupportservices.b7d40b3.640.png b/assets/ideal-img/digitalsupportservices.b7d40b3.640.png new file mode 100644 index 0000000000..08957cc091 Binary files /dev/null and b/assets/ideal-img/digitalsupportservices.b7d40b3.640.png differ diff --git a/assets/ideal-img/dimeschedulersdk.ea0d02a.640.png b/assets/ideal-img/dimeschedulersdk.ea0d02a.640.png new file mode 100644 index 0000000000..323e43225f Binary files /dev/null and b/assets/ideal-img/dimeschedulersdk.ea0d02a.640.png differ diff --git a/assets/ideal-img/discordresources.2b0a897.640.png b/assets/ideal-img/discordresources.2b0a897.640.png new file mode 100644 index 0000000000..25a3fc4171 Binary files /dev/null and b/assets/ideal-img/discordresources.2b0a897.640.png differ diff --git a/assets/ideal-img/divine-wsf.a2512d2.640.png b/assets/ideal-img/divine-wsf.a2512d2.640.png new file mode 100644 index 0000000000..721bb5ef46 Binary files /dev/null and b/assets/ideal-img/divine-wsf.a2512d2.640.png differ diff --git a/assets/ideal-img/djamaile.32177b7.640.png b/assets/ideal-img/djamaile.32177b7.640.png new file mode 100644 index 0000000000..97f2b5e42a Binary files /dev/null and b/assets/ideal-img/djamaile.32177b7.640.png differ diff --git a/assets/ideal-img/docs-butterfly.38310eb.640.png b/assets/ideal-img/docs-butterfly.38310eb.640.png new file mode 100644 index 0000000000..959e80d160 Binary files /dev/null and b/assets/ideal-img/docs-butterfly.38310eb.640.png differ diff --git a/assets/ideal-img/docs-taro-zone.2c1034b.640.png b/assets/ideal-img/docs-taro-zone.2c1034b.640.png new file mode 100644 index 0000000000..4b98d47c39 Binary files /dev/null and b/assets/ideal-img/docs-taro-zone.2c1034b.640.png differ diff --git a/assets/ideal-img/docusaurus.6c04a2e.1030.png b/assets/ideal-img/docusaurus.6c04a2e.1030.png new file mode 100644 index 0000000000..83a3b3ad33 Binary files /dev/null and b/assets/ideal-img/docusaurus.6c04a2e.1030.png differ diff --git a/assets/ideal-img/docusaurus.6fe439e.200.png b/assets/ideal-img/docusaurus.6fe439e.200.png new file mode 100644 index 0000000000..5c2c25d458 Binary files /dev/null and b/assets/ideal-img/docusaurus.6fe439e.200.png differ diff --git a/assets/ideal-img/docusaurus.74e09a0.640.png b/assets/ideal-img/docusaurus.74e09a0.640.png new file mode 100644 index 0000000000..3b68d9cd8d Binary files /dev/null and b/assets/ideal-img/docusaurus.74e09a0.640.png differ diff --git a/assets/ideal-img/draftjs.654d7be.640.png b/assets/ideal-img/draftjs.654d7be.640.png new file mode 100644 index 0000000000..adc825049e Binary files /dev/null and b/assets/ideal-img/draftjs.654d7be.640.png differ diff --git a/assets/ideal-img/drayman.d6b4620.640.png b/assets/ideal-img/drayman.d6b4620.640.png new file mode 100644 index 0000000000..01b601e80a Binary files /dev/null and b/assets/ideal-img/drayman.d6b4620.640.png differ diff --git a/assets/ideal-img/dyte.73c64e7.640.png b/assets/ideal-img/dyte.73c64e7.640.png new file mode 100644 index 0000000000..eff05a2ab2 Binary files /dev/null and b/assets/ideal-img/dyte.73c64e7.640.png differ diff --git a/assets/ideal-img/dyte.81c1b82.640.png b/assets/ideal-img/dyte.81c1b82.640.png new file mode 100644 index 0000000000..c56b866444 Binary files /dev/null and b/assets/ideal-img/dyte.81c1b82.640.png differ diff --git a/assets/ideal-img/dyte.fc5d80d.1030.png b/assets/ideal-img/dyte.fc5d80d.1030.png new file mode 100644 index 0000000000..7dcf367ec7 Binary files /dev/null and b/assets/ideal-img/dyte.fc5d80d.1030.png differ diff --git a/assets/ideal-img/easy-dates.f146f6f.640.png b/assets/ideal-img/easy-dates.f146f6f.640.png new file mode 100644 index 0000000000..84615f8553 Binary files /dev/null and b/assets/ideal-img/easy-dates.f146f6f.640.png differ diff --git a/assets/ideal-img/easyjwt.59f3f81.640.png b/assets/ideal-img/easyjwt.59f3f81.640.png new file mode 100644 index 0000000000..a198dea3fe Binary files /dev/null and b/assets/ideal-img/easyjwt.59f3f81.640.png differ diff --git a/assets/ideal-img/easypanel.b290e0d.640.png b/assets/ideal-img/easypanel.b290e0d.640.png new file mode 100644 index 0000000000..b4e39d2ef1 Binary files /dev/null and b/assets/ideal-img/easypanel.b290e0d.640.png differ diff --git a/assets/ideal-img/edulinks.db6aea1.640.png b/assets/ideal-img/edulinks.db6aea1.640.png new file mode 100644 index 0000000000..4ba35fe0a6 Binary files /dev/null and b/assets/ideal-img/edulinks.db6aea1.640.png differ diff --git a/assets/ideal-img/eightshift-docs.47e2289.640.png b/assets/ideal-img/eightshift-docs.47e2289.640.png new file mode 100644 index 0000000000..0a8e656347 Binary files /dev/null and b/assets/ideal-img/eightshift-docs.47e2289.640.png differ diff --git a/assets/ideal-img/enarx.4022acc.640.png b/assets/ideal-img/enarx.4022acc.640.png new file mode 100644 index 0000000000..84a078dfd9 Binary files /dev/null and b/assets/ideal-img/enarx.4022acc.640.png differ diff --git a/assets/ideal-img/eric.823d61a.640.png b/assets/ideal-img/eric.823d61a.640.png new file mode 100644 index 0000000000..f7b6baea5e Binary files /dev/null and b/assets/ideal-img/eric.823d61a.640.png differ diff --git a/assets/ideal-img/erxes.2c541e2.640.png b/assets/ideal-img/erxes.2c541e2.640.png new file mode 100644 index 0000000000..22cc058c0c Binary files /dev/null and b/assets/ideal-img/erxes.2c541e2.640.png differ diff --git a/assets/ideal-img/eta.bdd7514.640.png b/assets/ideal-img/eta.bdd7514.640.png new file mode 100644 index 0000000000..2e27760454 Binary files /dev/null and b/assets/ideal-img/eta.bdd7514.640.png differ diff --git a/assets/ideal-img/evantay.4c64461.640.png b/assets/ideal-img/evantay.4c64461.640.png new file mode 100644 index 0000000000..5fec778a3c Binary files /dev/null and b/assets/ideal-img/evantay.4c64461.640.png differ diff --git a/assets/ideal-img/evershop.1549b8c.640.png b/assets/ideal-img/evershop.1549b8c.640.png new file mode 100644 index 0000000000..7172fcf3be Binary files /dev/null and b/assets/ideal-img/evershop.1549b8c.640.png differ diff --git a/assets/ideal-img/fast.e23f1f6.640.png b/assets/ideal-img/fast.e23f1f6.640.png new file mode 100644 index 0000000000..b19216fbdb Binary files /dev/null and b/assets/ideal-img/fast.e23f1f6.640.png differ diff --git a/assets/ideal-img/fbt.0038828.640.png b/assets/ideal-img/fbt.0038828.640.png new file mode 100644 index 0000000000..47497def7e Binary files /dev/null and b/assets/ideal-img/fbt.0038828.640.png differ diff --git a/assets/ideal-img/figma.15dd2d7.640.png b/assets/ideal-img/figma.15dd2d7.640.png new file mode 100644 index 0000000000..47a2e25adb Binary files /dev/null and b/assets/ideal-img/figma.15dd2d7.640.png differ diff --git a/assets/ideal-img/figma.d0ffd9c.1030.png b/assets/ideal-img/figma.d0ffd9c.1030.png new file mode 100644 index 0000000000..628a660679 Binary files /dev/null and b/assets/ideal-img/figma.d0ffd9c.1030.png differ diff --git a/assets/ideal-img/files-gallery.660f153.640.png b/assets/ideal-img/files-gallery.660f153.640.png new file mode 100644 index 0000000000..73aee1111d Binary files /dev/null and b/assets/ideal-img/files-gallery.660f153.640.png differ diff --git a/assets/ideal-img/firecms.8f9e7bd.640.png b/assets/ideal-img/firecms.8f9e7bd.640.png new file mode 100644 index 0000000000..ea3665e163 Binary files /dev/null and b/assets/ideal-img/firecms.8f9e7bd.640.png differ diff --git a/assets/ideal-img/firelordjs.2fea679.640.png b/assets/ideal-img/firelordjs.2fea679.640.png new file mode 100644 index 0000000000..e3831fc3bb Binary files /dev/null and b/assets/ideal-img/firelordjs.2fea679.640.png differ diff --git a/assets/ideal-img/flagsmith.dc4da77.640.png b/assets/ideal-img/flagsmith.dc4da77.640.png new file mode 100644 index 0000000000..4cc75c0209 Binary files /dev/null and b/assets/ideal-img/flagsmith.dc4da77.640.png differ diff --git a/assets/ideal-img/flarum.f170a82.640.png b/assets/ideal-img/flarum.f170a82.640.png new file mode 100644 index 0000000000..9d9627ba0c Binary files /dev/null and b/assets/ideal-img/flarum.f170a82.640.png differ diff --git a/assets/ideal-img/flatifycss.0e31d6b.640.png b/assets/ideal-img/flatifycss.0e31d6b.640.png new file mode 100644 index 0000000000..885dc8520a Binary files /dev/null and b/assets/ideal-img/flatifycss.0e31d6b.640.png differ diff --git a/assets/ideal-img/flexit.3f9bb99.640.png b/assets/ideal-img/flexit.3f9bb99.640.png new file mode 100644 index 0000000000..5faf1b7b90 Binary files /dev/null and b/assets/ideal-img/flexit.3f9bb99.640.png differ diff --git a/assets/ideal-img/flipper.1c689c8.640.png b/assets/ideal-img/flipper.1c689c8.640.png new file mode 100644 index 0000000000..3bea2dcf2b Binary files /dev/null and b/assets/ideal-img/flipper.1c689c8.640.png differ diff --git a/assets/ideal-img/flux.3858b11.640.png b/assets/ideal-img/flux.3858b11.640.png new file mode 100644 index 0000000000..49befbc152 Binary files /dev/null and b/assets/ideal-img/flux.3858b11.640.png differ diff --git a/assets/ideal-img/foal.1cdd073.640.png b/assets/ideal-img/foal.1cdd073.640.png new file mode 100644 index 0000000000..99800710e1 Binary files /dev/null and b/assets/ideal-img/foal.1cdd073.640.png differ diff --git a/assets/ideal-img/formatjs.913a9c1.640.png b/assets/ideal-img/formatjs.913a9c1.640.png new file mode 100644 index 0000000000..7d12203e02 Binary files /dev/null and b/assets/ideal-img/formatjs.913a9c1.640.png differ diff --git a/assets/ideal-img/froggit.f573421.640.png b/assets/ideal-img/froggit.f573421.640.png new file mode 100644 index 0000000000..8ad3bad826 Binary files /dev/null and b/assets/ideal-img/froggit.f573421.640.png differ diff --git a/assets/ideal-img/fullstackchronicles.a6691ab.640.png b/assets/ideal-img/fullstackchronicles.a6691ab.640.png new file mode 100644 index 0000000000..8e726e2b70 Binary files /dev/null and b/assets/ideal-img/fullstackchronicles.a6691ab.640.png differ diff --git a/assets/ideal-img/geekyweb.fc837d8.640.png b/assets/ideal-img/geekyweb.fc837d8.640.png new file mode 100644 index 0000000000..bda646d614 Binary files /dev/null and b/assets/ideal-img/geekyweb.fc837d8.640.png differ diff --git a/assets/ideal-img/getorca.org-dark.401ed3e.640.png b/assets/ideal-img/getorca.org-dark.401ed3e.640.png new file mode 100644 index 0000000000..330a81c066 Binary files /dev/null and b/assets/ideal-img/getorca.org-dark.401ed3e.640.png differ diff --git a/assets/ideal-img/ghostly.707ead8.640.png b/assets/ideal-img/ghostly.707ead8.640.png new file mode 100644 index 0000000000..47f7e4f998 Binary files /dev/null and b/assets/ideal-img/ghostly.707ead8.640.png differ diff --git a/assets/ideal-img/gladys-assistant.4b7d76e.640.png b/assets/ideal-img/gladys-assistant.4b7d76e.640.png new file mode 100644 index 0000000000..d5ceb0dbfd Binary files /dev/null and b/assets/ideal-img/gladys-assistant.4b7d76e.640.png differ diff --git a/assets/ideal-img/gotenberg.81978c3.640.png b/assets/ideal-img/gotenberg.81978c3.640.png new file mode 100644 index 0000000000..036aa55a09 Binary files /dev/null and b/assets/ideal-img/gotenberg.81978c3.640.png differ diff --git a/assets/ideal-img/gtfs-to-html.e90b7b0.640.png b/assets/ideal-img/gtfs-to-html.e90b7b0.640.png new file mode 100644 index 0000000000..3edb7af2b8 Binary files /dev/null and b/assets/ideal-img/gtfs-to-html.e90b7b0.640.png differ diff --git a/assets/ideal-img/gulp.166db42.640.png b/assets/ideal-img/gulp.166db42.640.png new file mode 100644 index 0000000000..d81c0f18ee Binary files /dev/null and b/assets/ideal-img/gulp.166db42.640.png differ diff --git a/assets/ideal-img/gulp.6ea1e58.1030.png b/assets/ideal-img/gulp.6ea1e58.1030.png new file mode 100644 index 0000000000..10b7ec370a Binary files /dev/null and b/assets/ideal-img/gulp.6ea1e58.1030.png differ diff --git a/assets/ideal-img/gulp.d4c3fc5.640.png b/assets/ideal-img/gulp.d4c3fc5.640.png new file mode 100644 index 0000000000..cef94ac0aa Binary files /dev/null and b/assets/ideal-img/gulp.d4c3fc5.640.png differ diff --git a/assets/ideal-img/haochen.aadb05f.640.png b/assets/ideal-img/haochen.aadb05f.640.png new file mode 100644 index 0000000000..80427043b3 Binary files /dev/null and b/assets/ideal-img/haochen.aadb05f.640.png differ diff --git a/assets/ideal-img/hashnode.32e3d9c.640.png b/assets/ideal-img/hashnode.32e3d9c.640.png new file mode 100644 index 0000000000..71c07cdc65 Binary files /dev/null and b/assets/ideal-img/hashnode.32e3d9c.640.png differ diff --git a/assets/ideal-img/hasura.137e254.1030.png b/assets/ideal-img/hasura.137e254.1030.png new file mode 100644 index 0000000000..4f9136662d Binary files /dev/null and b/assets/ideal-img/hasura.137e254.1030.png differ diff --git a/assets/ideal-img/hasura.bc785e1.640.png b/assets/ideal-img/hasura.bc785e1.640.png new file mode 100644 index 0000000000..7920d6d27d Binary files /dev/null and b/assets/ideal-img/hasura.bc785e1.640.png differ diff --git a/assets/ideal-img/hasura.f2e12c4.640.png b/assets/ideal-img/hasura.f2e12c4.640.png new file mode 100644 index 0000000000..360e88e213 Binary files /dev/null and b/assets/ideal-img/hasura.f2e12c4.640.png differ diff --git a/assets/ideal-img/hcaptcha.d81b005.640.png b/assets/ideal-img/hcaptcha.d81b005.640.png new file mode 100644 index 0000000000..2da5e1cc3c Binary files /dev/null and b/assets/ideal-img/hcaptcha.d81b005.640.png differ diff --git a/assets/ideal-img/hector-ramos.957d17a.200.jpg b/assets/ideal-img/hector-ramos.957d17a.200.jpg new file mode 100644 index 0000000000..c2e3704683 Binary files /dev/null and b/assets/ideal-img/hector-ramos.957d17a.200.jpg differ diff --git a/assets/ideal-img/hermes.6ae4708.640.png b/assets/ideal-img/hermes.6ae4708.640.png new file mode 100644 index 0000000000..a444995f90 Binary files /dev/null and b/assets/ideal-img/hermes.6ae4708.640.png differ diff --git a/assets/ideal-img/home-assistant.49e0a60.640.png b/assets/ideal-img/home-assistant.49e0a60.640.png new file mode 100644 index 0000000000..72107efc5b Binary files /dev/null and b/assets/ideal-img/home-assistant.49e0a60.640.png differ diff --git a/assets/ideal-img/httpin.a8bdf87.640.png b/assets/ideal-img/httpin.a8bdf87.640.png new file mode 100644 index 0000000000..0041c444fb Binary files /dev/null and b/assets/ideal-img/httpin.a8bdf87.640.png differ diff --git a/assets/ideal-img/iammassoud.a25a8f3.640.png b/assets/ideal-img/iammassoud.a25a8f3.640.png new file mode 100644 index 0000000000..703fa03cd0 Binary files /dev/null and b/assets/ideal-img/iammassoud.a25a8f3.640.png differ diff --git a/assets/ideal-img/icodex.3a80b26.640.png b/assets/ideal-img/icodex.3a80b26.640.png new file mode 100644 index 0000000000..b288bff8c5 Binary files /dev/null and b/assets/ideal-img/icodex.3a80b26.640.png differ diff --git a/assets/ideal-img/idb.5dbdf9f.640.png b/assets/ideal-img/idb.5dbdf9f.640.png new file mode 100644 index 0000000000..6564108af3 Binary files /dev/null and b/assets/ideal-img/idb.5dbdf9f.640.png differ diff --git a/assets/ideal-img/indent.f5f3516.640.png b/assets/ideal-img/indent.f5f3516.640.png new file mode 100644 index 0000000000..3d4f9b752a Binary files /dev/null and b/assets/ideal-img/indent.f5f3516.640.png differ diff --git a/assets/ideal-img/intelagent.cf9c5e4.640.png b/assets/ideal-img/intelagent.cf9c5e4.640.png new file mode 100644 index 0000000000..a7dfe4eee8 Binary files /dev/null and b/assets/ideal-img/intelagent.cf9c5e4.640.png differ diff --git a/assets/ideal-img/ionic.3b8b190.640.png b/assets/ideal-img/ionic.3b8b190.640.png new file mode 100644 index 0000000000..701b1beaa6 Binary files /dev/null and b/assets/ideal-img/ionic.3b8b190.640.png differ diff --git a/assets/ideal-img/ionic.b257f51.1030.png b/assets/ideal-img/ionic.b257f51.1030.png new file mode 100644 index 0000000000..eae198069d Binary files /dev/null and b/assets/ideal-img/ionic.b257f51.1030.png differ diff --git a/assets/ideal-img/ionic.fa7100c.640.png b/assets/ideal-img/ionic.fa7100c.640.png new file mode 100644 index 0000000000..8040feee4a Binary files /dev/null and b/assets/ideal-img/ionic.fa7100c.640.png differ diff --git a/assets/ideal-img/iota-wiki.7df3488.640.png b/assets/ideal-img/iota-wiki.7df3488.640.png new file mode 100644 index 0000000000..e2b9310764 Binary files /dev/null and b/assets/ideal-img/iota-wiki.7df3488.640.png differ diff --git a/assets/ideal-img/iota.7ed609f.1030.png b/assets/ideal-img/iota.7ed609f.1030.png new file mode 100644 index 0000000000..1fcbfb0d74 Binary files /dev/null and b/assets/ideal-img/iota.7ed609f.1030.png differ diff --git a/assets/ideal-img/iota.925442f.640.png b/assets/ideal-img/iota.925442f.640.png new file mode 100644 index 0000000000..f8a7c6b562 Binary files /dev/null and b/assets/ideal-img/iota.925442f.640.png differ diff --git a/assets/ideal-img/jest.8037160.640.png b/assets/ideal-img/jest.8037160.640.png new file mode 100644 index 0000000000..33582735ff Binary files /dev/null and b/assets/ideal-img/jest.8037160.640.png differ diff --git a/assets/ideal-img/joelpo.88e8281.640.png b/assets/ideal-img/joelpo.88e8281.640.png new file mode 100644 index 0000000000..49770055cc Binary files /dev/null and b/assets/ideal-img/joelpo.88e8281.640.png differ diff --git a/assets/ideal-img/johnnyreilly.ecc5d44.640.png b/assets/ideal-img/johnnyreilly.ecc5d44.640.png new file mode 100644 index 0000000000..045c8c9953 Binary files /dev/null and b/assets/ideal-img/johnnyreilly.ecc5d44.640.png differ diff --git a/assets/ideal-img/juffalow.7c45de5.640.png b/assets/ideal-img/juffalow.7c45de5.640.png new file mode 100644 index 0000000000..7b8ccc6fb6 Binary files /dev/null and b/assets/ideal-img/juffalow.7c45de5.640.png differ diff --git a/assets/ideal-img/junjie.63b7a2f.640.png b/assets/ideal-img/junjie.63b7a2f.640.png new file mode 100644 index 0000000000..c9d6ee3dbd Binary files /dev/null and b/assets/ideal-img/junjie.63b7a2f.640.png differ diff --git a/assets/ideal-img/k3ai.a05af97.640.png b/assets/ideal-img/k3ai.a05af97.640.png new file mode 100644 index 0000000000..68c5364d95 Binary files /dev/null and b/assets/ideal-img/k3ai.a05af97.640.png differ diff --git a/assets/ideal-img/katex.681e845.640.png b/assets/ideal-img/katex.681e845.640.png new file mode 100644 index 0000000000..0b6b98a193 Binary files /dev/null and b/assets/ideal-img/katex.681e845.640.png differ diff --git a/assets/ideal-img/katex.68c9ce0.1030.png b/assets/ideal-img/katex.68c9ce0.1030.png new file mode 100644 index 0000000000..29c5337234 Binary files /dev/null and b/assets/ideal-img/katex.68c9ce0.1030.png differ diff --git a/assets/ideal-img/kaustubhk24.a89b443.640.png b/assets/ideal-img/kaustubhk24.a89b443.640.png new file mode 100644 index 0000000000..8bb9bdd50c Binary files /dev/null and b/assets/ideal-img/kaustubhk24.a89b443.640.png differ diff --git a/assets/ideal-img/khyron_realm.2659294.640.png b/assets/ideal-img/khyron_realm.2659294.640.png new file mode 100644 index 0000000000..6c41a265a1 Binary files /dev/null and b/assets/ideal-img/khyron_realm.2659294.640.png differ diff --git a/assets/ideal-img/kosko.4c715d5.640.png b/assets/ideal-img/kosko.4c715d5.640.png new file mode 100644 index 0000000000..444029e239 Binary files /dev/null and b/assets/ideal-img/kosko.4c715d5.640.png differ diff --git a/assets/ideal-img/kotest.bf00e76.640.png b/assets/ideal-img/kotest.bf00e76.640.png new file mode 100644 index 0000000000..50cb35c196 Binary files /dev/null and b/assets/ideal-img/kotest.bf00e76.640.png differ diff --git a/assets/ideal-img/kube-green.0076719.640.png b/assets/ideal-img/kube-green.0076719.640.png new file mode 100644 index 0000000000..2bcc22f84c Binary files /dev/null and b/assets/ideal-img/kube-green.0076719.640.png differ diff --git a/assets/ideal-img/kubevela.abc3ad9.640.png b/assets/ideal-img/kubevela.abc3ad9.640.png new file mode 100644 index 0000000000..2f90846612 Binary files /dev/null and b/assets/ideal-img/kubevela.abc3ad9.640.png differ diff --git a/assets/ideal-img/kuizuo.ee23145.640.png b/assets/ideal-img/kuizuo.ee23145.640.png new file mode 100644 index 0000000000..28402a9b5f Binary files /dev/null and b/assets/ideal-img/kuizuo.ee23145.640.png differ diff --git a/assets/ideal-img/kwatch.9e8062e.640.png b/assets/ideal-img/kwatch.9e8062e.640.png new file mode 100644 index 0000000000..464e2caedf Binary files /dev/null and b/assets/ideal-img/kwatch.9e8062e.640.png differ diff --git a/assets/ideal-img/labviewbook.402bfc2.640.png b/assets/ideal-img/labviewbook.402bfc2.640.png new file mode 100644 index 0000000000..470ff7e969 Binary files /dev/null and b/assets/ideal-img/labviewbook.402bfc2.640.png differ diff --git a/assets/ideal-img/lacework.c68d75b.640.png b/assets/ideal-img/lacework.c68d75b.640.png new file mode 100644 index 0000000000..6227bcaf8f Binary files /dev/null and b/assets/ideal-img/lacework.c68d75b.640.png differ diff --git a/assets/ideal-img/lacework.d175372.1030.png b/assets/ideal-img/lacework.d175372.1030.png new file mode 100644 index 0000000000..aff01ff250 Binary files /dev/null and b/assets/ideal-img/lacework.d175372.1030.png differ diff --git a/assets/ideal-img/leedom.20f512e.640.png b/assets/ideal-img/leedom.20f512e.640.png new file mode 100644 index 0000000000..5ab822d4bf Binary files /dev/null and b/assets/ideal-img/leedom.20f512e.640.png differ diff --git a/assets/ideal-img/leon.0ea5093.640.png b/assets/ideal-img/leon.0ea5093.640.png new file mode 100644 index 0000000000..ce813f90af Binary files /dev/null and b/assets/ideal-img/leon.0ea5093.640.png differ diff --git a/assets/ideal-img/lerna.55ca7ad.640.png b/assets/ideal-img/lerna.55ca7ad.640.png new file mode 100644 index 0000000000..5374c65e1b Binary files /dev/null and b/assets/ideal-img/lerna.55ca7ad.640.png differ diff --git a/assets/ideal-img/liqvid.b36c48c.640.png b/assets/ideal-img/liqvid.b36c48c.640.png new file mode 100644 index 0000000000..fe9b615077 Binary files /dev/null and b/assets/ideal-img/liqvid.b36c48c.640.png differ diff --git a/assets/ideal-img/livekit.d765dc5.640.png b/assets/ideal-img/livekit.d765dc5.640.png new file mode 100644 index 0000000000..e96c076679 Binary files /dev/null and b/assets/ideal-img/livekit.d765dc5.640.png differ diff --git a/assets/ideal-img/lux-algo.f6b681c.640.png b/assets/ideal-img/lux-algo.f6b681c.640.png new file mode 100644 index 0000000000..06a2c1f0e4 Binary files /dev/null and b/assets/ideal-img/lux-algo.f6b681c.640.png differ diff --git a/assets/ideal-img/mailgo.68c3215.640.png b/assets/ideal-img/mailgo.68c3215.640.png new file mode 100644 index 0000000000..83a6fa6606 Binary files /dev/null and b/assets/ideal-img/mailgo.68c3215.640.png differ diff --git a/assets/ideal-img/mapillaryjs.5ab6a6e.640.png b/assets/ideal-img/mapillaryjs.5ab6a6e.640.png new file mode 100644 index 0000000000..6615641eab Binary files /dev/null and b/assets/ideal-img/mapillaryjs.5ab6a6e.640.png differ diff --git a/assets/ideal-img/mediamachine.62dfa0e.640.png b/assets/ideal-img/mediamachine.62dfa0e.640.png new file mode 100644 index 0000000000..e73297c0d1 Binary files /dev/null and b/assets/ideal-img/mediamachine.62dfa0e.640.png differ diff --git a/assets/ideal-img/meli.305f7f3.640.png b/assets/ideal-img/meli.305f7f3.640.png new file mode 100644 index 0000000000..68ab338830 Binary files /dev/null and b/assets/ideal-img/meli.305f7f3.640.png differ diff --git a/assets/ideal-img/memgraph.41afca3.640.png b/assets/ideal-img/memgraph.41afca3.640.png new file mode 100644 index 0000000000..db01965735 Binary files /dev/null and b/assets/ideal-img/memgraph.41afca3.640.png differ diff --git a/assets/ideal-img/meoo.69f3a2d.640.png b/assets/ideal-img/meoo.69f3a2d.640.png new file mode 100644 index 0000000000..52ece185ec Binary files /dev/null and b/assets/ideal-img/meoo.69f3a2d.640.png differ diff --git a/assets/ideal-img/metalyoung.4712df7.640.png b/assets/ideal-img/metalyoung.4712df7.640.png new file mode 100644 index 0000000000..63ec2494a9 Binary files /dev/null and b/assets/ideal-img/metalyoung.4712df7.640.png differ diff --git a/assets/ideal-img/metro.b32a126.640.png b/assets/ideal-img/metro.b32a126.640.png new file mode 100644 index 0000000000..070260ed2e Binary files /dev/null and b/assets/ideal-img/metro.b32a126.640.png differ diff --git a/assets/ideal-img/mia-platform.e8bb2d0.640.png b/assets/ideal-img/mia-platform.e8bb2d0.640.png new file mode 100644 index 0000000000..76aa704cee Binary files /dev/null and b/assets/ideal-img/mia-platform.e8bb2d0.640.png differ diff --git a/assets/ideal-img/mikro-orm.d077b7d.640.png b/assets/ideal-img/mikro-orm.d077b7d.640.png new file mode 100644 index 0000000000..41a05f4a37 Binary files /dev/null and b/assets/ideal-img/mikro-orm.d077b7d.640.png differ diff --git a/assets/ideal-img/mintmetrics.3258d8a.640.png b/assets/ideal-img/mintmetrics.3258d8a.640.png new file mode 100644 index 0000000000..882c1742ad Binary files /dev/null and b/assets/ideal-img/mintmetrics.3258d8a.640.png differ diff --git a/assets/ideal-img/mixcore.45f9b80.640.png b/assets/ideal-img/mixcore.45f9b80.640.png new file mode 100644 index 0000000000..6575b529ec Binary files /dev/null and b/assets/ideal-img/mixcore.45f9b80.640.png differ diff --git a/assets/ideal-img/mojaglobal.df38ad6.640.png b/assets/ideal-img/mojaglobal.df38ad6.640.png new file mode 100644 index 0000000000..2227ca6611 Binary files /dev/null and b/assets/ideal-img/mojaglobal.df38ad6.640.png differ diff --git a/assets/ideal-img/molecule-home.76dd46a.640.png b/assets/ideal-img/molecule-home.76dd46a.640.png new file mode 100644 index 0000000000..5519c779b9 Binary files /dev/null and b/assets/ideal-img/molecule-home.76dd46a.640.png differ diff --git a/assets/ideal-img/motion-layout.94fe97e.640.png b/assets/ideal-img/motion-layout.94fe97e.640.png new file mode 100644 index 0000000000..6f15e94cbd Binary files /dev/null and b/assets/ideal-img/motion-layout.94fe97e.640.png differ diff --git a/assets/ideal-img/nanos-world.2f4a504.640.png b/assets/ideal-img/nanos-world.2f4a504.640.png new file mode 100644 index 0000000000..2e189c8142 Binary files /dev/null and b/assets/ideal-img/nanos-world.2f4a504.640.png differ diff --git a/assets/ideal-img/netbootxyz.92afdf4.640.png b/assets/ideal-img/netbootxyz.92afdf4.640.png new file mode 100644 index 0000000000..0f18a8eeb5 Binary files /dev/null and b/assets/ideal-img/netbootxyz.92afdf4.640.png differ diff --git a/assets/ideal-img/netdata.1813d37.640.png b/assets/ideal-img/netdata.1813d37.640.png new file mode 100644 index 0000000000..bc68d9cd6a Binary files /dev/null and b/assets/ideal-img/netdata.1813d37.640.png differ diff --git a/assets/ideal-img/neutronjs.6fa73e0.640.png b/assets/ideal-img/neutronjs.6fa73e0.640.png new file mode 100644 index 0000000000..d76b758221 Binary files /dev/null and b/assets/ideal-img/neutronjs.6fa73e0.640.png differ diff --git a/assets/ideal-img/nextauthjs.4bb10f2.640.png b/assets/ideal-img/nextauthjs.4bb10f2.640.png new file mode 100644 index 0000000000..8c088b26ad Binary files /dev/null and b/assets/ideal-img/nextauthjs.4bb10f2.640.png differ diff --git a/assets/ideal-img/nhost.78e048b.640.png b/assets/ideal-img/nhost.78e048b.640.png new file mode 100644 index 0000000000..5dbe89fb2f Binary files /dev/null and b/assets/ideal-img/nhost.78e048b.640.png differ diff --git a/assets/ideal-img/nocalhost.fb8f48f.640.png b/assets/ideal-img/nocalhost.fb8f48f.640.png new file mode 100644 index 0000000000..607274d3b5 Binary files /dev/null and b/assets/ideal-img/nocalhost.fb8f48f.640.png differ diff --git a/assets/ideal-img/node-serialport.8887301.640.png b/assets/ideal-img/node-serialport.8887301.640.png new file mode 100644 index 0000000000..85386db224 Binary files /dev/null and b/assets/ideal-img/node-serialport.8887301.640.png differ diff --git a/assets/ideal-img/nodify.3e4f251.640.png b/assets/ideal-img/nodify.3e4f251.640.png new file mode 100644 index 0000000000..4d6c0942ca Binary files /dev/null and b/assets/ideal-img/nodify.3e4f251.640.png differ diff --git a/assets/ideal-img/novu-docs.fff2573.640.png b/assets/ideal-img/novu-docs.fff2573.640.png new file mode 100644 index 0000000000..ac7d8dabbe Binary files /dev/null and b/assets/ideal-img/novu-docs.fff2573.640.png differ diff --git a/assets/ideal-img/orbitjs.4eb95c8.640.png b/assets/ideal-img/orbitjs.4eb95c8.640.png new file mode 100644 index 0000000000..82f5cac29a Binary files /dev/null and b/assets/ideal-img/orbitjs.4eb95c8.640.png differ diff --git a/assets/ideal-img/ory.10fbb60.640.png b/assets/ideal-img/ory.10fbb60.640.png new file mode 100644 index 0000000000..bd1081eb23 Binary files /dev/null and b/assets/ideal-img/ory.10fbb60.640.png differ diff --git a/assets/ideal-img/ossinsight.522e11d.640.png b/assets/ideal-img/ossinsight.522e11d.640.png new file mode 100644 index 0000000000..4d74761f81 Binary files /dev/null and b/assets/ideal-img/ossinsight.522e11d.640.png differ diff --git a/assets/ideal-img/outerbounds.1551bd2.640.png b/assets/ideal-img/outerbounds.1551bd2.640.png new file mode 100644 index 0000000000..6df0137e36 Binary files /dev/null and b/assets/ideal-img/outerbounds.1551bd2.640.png differ diff --git a/assets/ideal-img/outerbounds.54e33ed.640.png b/assets/ideal-img/outerbounds.54e33ed.640.png new file mode 100644 index 0000000000..ade206a250 Binary files /dev/null and b/assets/ideal-img/outerbounds.54e33ed.640.png differ diff --git a/assets/ideal-img/outerbounds.8f237b6.1030.png b/assets/ideal-img/outerbounds.8f237b6.1030.png new file mode 100644 index 0000000000..649118af7d Binary files /dev/null and b/assets/ideal-img/outerbounds.8f237b6.1030.png differ diff --git a/assets/ideal-img/oxidizer.4fecd68.640.png b/assets/ideal-img/oxidizer.4fecd68.640.png new file mode 100644 index 0000000000..641c7e0396 Binary files /dev/null and b/assets/ideal-img/oxidizer.4fecd68.640.png differ diff --git a/assets/ideal-img/patrikmasiar.ee91a0d.640.png b/assets/ideal-img/patrikmasiar.ee91a0d.640.png new file mode 100644 index 0000000000..64032c3946 Binary files /dev/null and b/assets/ideal-img/patrikmasiar.ee91a0d.640.png differ diff --git a/assets/ideal-img/paubox.282e9e9.640.png b/assets/ideal-img/paubox.282e9e9.640.png new file mode 100644 index 0000000000..a77c136b3c Binary files /dev/null and b/assets/ideal-img/paubox.282e9e9.640.png differ diff --git a/assets/ideal-img/pcapplusplus.208a267.640.png b/assets/ideal-img/pcapplusplus.208a267.640.png new file mode 100644 index 0000000000..5caf860f4e Binary files /dev/null and b/assets/ideal-img/pcapplusplus.208a267.640.png differ diff --git a/assets/ideal-img/pcc-archive.2cea823.640.png b/assets/ideal-img/pcc-archive.2cea823.640.png new file mode 100644 index 0000000000..ac2b5a6f23 Binary files /dev/null and b/assets/ideal-img/pcc-archive.2cea823.640.png differ diff --git a/assets/ideal-img/pdfme.d70a7e9.640.png b/assets/ideal-img/pdfme.d70a7e9.640.png new file mode 100644 index 0000000000..5a9c1fe177 Binary files /dev/null and b/assets/ideal-img/pdfme.d70a7e9.640.png differ diff --git a/assets/ideal-img/pearl-ui.96174ea.640.png b/assets/ideal-img/pearl-ui.96174ea.640.png new file mode 100644 index 0000000000..a7811cdcfc Binary files /dev/null and b/assets/ideal-img/pearl-ui.96174ea.640.png differ diff --git a/assets/ideal-img/peradaban.3b83703.640.png b/assets/ideal-img/peradaban.3b83703.640.png new file mode 100644 index 0000000000..dc95106bff Binary files /dev/null and b/assets/ideal-img/peradaban.3b83703.640.png differ diff --git a/assets/ideal-img/pglet.612c1bf.640.png b/assets/ideal-img/pglet.612c1bf.640.png new file mode 100644 index 0000000000..2137142586 Binary files /dev/null and b/assets/ideal-img/pglet.612c1bf.640.png differ diff --git a/assets/ideal-img/piano-analytics.0784ab4.640.png b/assets/ideal-img/piano-analytics.0784ab4.640.png new file mode 100644 index 0000000000..60322266b7 Binary files /dev/null and b/assets/ideal-img/piano-analytics.0784ab4.640.png differ diff --git a/assets/ideal-img/pincman.8c017c2.640.png b/assets/ideal-img/pincman.8c017c2.640.png new file mode 100644 index 0000000000..c3f3d46ea4 Binary files /dev/null and b/assets/ideal-img/pincman.8c017c2.640.png differ diff --git a/assets/ideal-img/pipeline-ui.7a88b68.640.png b/assets/ideal-img/pipeline-ui.7a88b68.640.png new file mode 100644 index 0000000000..b7b8997c78 Binary files /dev/null and b/assets/ideal-img/pipeline-ui.7a88b68.640.png differ diff --git a/assets/ideal-img/plausible.724e7d4.640.png b/assets/ideal-img/plausible.724e7d4.640.png new file mode 100644 index 0000000000..71b3a70a0a Binary files /dev/null and b/assets/ideal-img/plausible.724e7d4.640.png differ diff --git a/assets/ideal-img/pnpm.64ee19d.640.png b/assets/ideal-img/pnpm.64ee19d.640.png new file mode 100644 index 0000000000..abd5965898 Binary files /dev/null and b/assets/ideal-img/pnpm.64ee19d.640.png differ diff --git a/assets/ideal-img/postgres-ai.59ec13a.640.png b/assets/ideal-img/postgres-ai.59ec13a.640.png new file mode 100644 index 0000000000..da85e70546 Binary files /dev/null and b/assets/ideal-img/postgres-ai.59ec13a.640.png differ diff --git a/assets/ideal-img/power.db59063.640.png b/assets/ideal-img/power.db59063.640.png new file mode 100644 index 0000000000..e461dec978 Binary files /dev/null and b/assets/ideal-img/power.db59063.640.png differ diff --git a/assets/ideal-img/pptxgenjs.e543e51.640.png b/assets/ideal-img/pptxgenjs.e543e51.640.png new file mode 100644 index 0000000000..5a288c9eb3 Binary files /dev/null and b/assets/ideal-img/pptxgenjs.e543e51.640.png differ diff --git a/assets/ideal-img/prefs.dff583d.640.png b/assets/ideal-img/prefs.dff583d.640.png new file mode 100644 index 0000000000..aa4c3225bd Binary files /dev/null and b/assets/ideal-img/prefs.dff583d.640.png differ diff --git a/assets/ideal-img/prettier.56bd537.640.png b/assets/ideal-img/prettier.56bd537.640.png new file mode 100644 index 0000000000..06c90f548a Binary files /dev/null and b/assets/ideal-img/prettier.56bd537.640.png differ diff --git a/assets/ideal-img/prettier.c38f582.1030.png b/assets/ideal-img/prettier.c38f582.1030.png new file mode 100644 index 0000000000..6f5c87fec6 Binary files /dev/null and b/assets/ideal-img/prettier.c38f582.1030.png differ diff --git a/assets/ideal-img/prismatic.e7ba6ef.640.png b/assets/ideal-img/prismatic.e7ba6ef.640.png new file mode 100644 index 0000000000..681bf03964 Binary files /dev/null and b/assets/ideal-img/prismatic.e7ba6ef.640.png differ diff --git a/assets/ideal-img/profilo.37ac206.640.png b/assets/ideal-img/profilo.37ac206.640.png new file mode 100644 index 0000000000..0177d19cdb Binary files /dev/null and b/assets/ideal-img/profilo.37ac206.640.png differ diff --git a/assets/ideal-img/pyre.b772c23.640.png b/assets/ideal-img/pyre.b772c23.640.png new file mode 100644 index 0000000000..be4cd79e4a Binary files /dev/null and b/assets/ideal-img/pyre.b772c23.640.png differ diff --git a/assets/ideal-img/qa-board.be6f8ca.640.png b/assets/ideal-img/qa-board.be6f8ca.640.png new file mode 100644 index 0000000000..6023b2163d Binary files /dev/null and b/assets/ideal-img/qa-board.be6f8ca.640.png differ diff --git a/assets/ideal-img/quantcdn.2059ec3.640.png b/assets/ideal-img/quantcdn.2059ec3.640.png new file mode 100644 index 0000000000..108cb4d36c Binary files /dev/null and b/assets/ideal-img/quantcdn.2059ec3.640.png differ diff --git a/assets/ideal-img/quickwit.0d2bdce.640.png b/assets/ideal-img/quickwit.0d2bdce.640.png new file mode 100644 index 0000000000..65e70acacc Binary files /dev/null and b/assets/ideal-img/quickwit.0d2bdce.640.png differ diff --git a/assets/ideal-img/quickwit.6f2a5e9.640.png b/assets/ideal-img/quickwit.6f2a5e9.640.png new file mode 100644 index 0000000000..2bd5fa2da1 Binary files /dev/null and b/assets/ideal-img/quickwit.6f2a5e9.640.png differ diff --git a/assets/ideal-img/quickwit.9fe97e2.1030.png b/assets/ideal-img/quickwit.9fe97e2.1030.png new file mode 100644 index 0000000000..a96290c2f9 Binary files /dev/null and b/assets/ideal-img/quickwit.9fe97e2.1030.png differ diff --git a/assets/ideal-img/rainbond.dd2ee85.640.png b/assets/ideal-img/rainbond.dd2ee85.640.png new file mode 100644 index 0000000000..cd05585fc4 Binary files /dev/null and b/assets/ideal-img/rainbond.dd2ee85.640.png differ diff --git a/assets/ideal-img/raspisuite.234a2cd.640.png b/assets/ideal-img/raspisuite.234a2cd.640.png new file mode 100644 index 0000000000..c8744b8684 Binary files /dev/null and b/assets/ideal-img/raspisuite.234a2cd.640.png differ diff --git a/assets/ideal-img/react-chat-elements.2b491e1.640.png b/assets/ideal-img/react-chat-elements.2b491e1.640.png new file mode 100644 index 0000000000..00232af378 Binary files /dev/null and b/assets/ideal-img/react-chat-elements.2b491e1.640.png differ diff --git a/assets/ideal-img/react-complex-tree.d3b97fb.640.png b/assets/ideal-img/react-complex-tree.d3b97fb.640.png new file mode 100644 index 0000000000..b30673ec58 Binary files /dev/null and b/assets/ideal-img/react-complex-tree.d3b97fb.640.png differ diff --git a/assets/ideal-img/react-leaflet.60e6a52.640.png b/assets/ideal-img/react-leaflet.60e6a52.640.png new file mode 100644 index 0000000000..24a14506cf Binary files /dev/null and b/assets/ideal-img/react-leaflet.60e6a52.640.png differ diff --git a/assets/ideal-img/react-native-elements.2052eed.640.png b/assets/ideal-img/react-native-elements.2052eed.640.png new file mode 100644 index 0000000000..22788b5ad3 Binary files /dev/null and b/assets/ideal-img/react-native-elements.2052eed.640.png differ diff --git a/assets/ideal-img/react-native-ios-kit.6da9e1f.640.png b/assets/ideal-img/react-native-ios-kit.6da9e1f.640.png new file mode 100644 index 0000000000..6aa249bc4a Binary files /dev/null and b/assets/ideal-img/react-native-ios-kit.6da9e1f.640.png differ diff --git a/assets/ideal-img/react-native-reanimated.07e5d32.640.png b/assets/ideal-img/react-native-reanimated.07e5d32.640.png new file mode 100644 index 0000000000..5c1a8f132a Binary files /dev/null and b/assets/ideal-img/react-native-reanimated.07e5d32.640.png differ diff --git a/assets/ideal-img/react-native-testing-library.2ddc3d1.640.png b/assets/ideal-img/react-native-testing-library.2ddc3d1.640.png new file mode 100644 index 0000000000..e093ea5ddb Binary files /dev/null and b/assets/ideal-img/react-native-testing-library.2ddc3d1.640.png differ diff --git a/assets/ideal-img/react-native.07364de.1030.png b/assets/ideal-img/react-native.07364de.1030.png new file mode 100644 index 0000000000..928f72242f Binary files /dev/null and b/assets/ideal-img/react-native.07364de.1030.png differ diff --git a/assets/ideal-img/react-native.7fdb38b.1030.png b/assets/ideal-img/react-native.7fdb38b.1030.png new file mode 100644 index 0000000000..1fea09fb48 Binary files /dev/null and b/assets/ideal-img/react-native.7fdb38b.1030.png differ diff --git a/assets/ideal-img/react-native.a3415f1.640.png b/assets/ideal-img/react-native.a3415f1.640.png new file mode 100644 index 0000000000..e3e69ebc40 Binary files /dev/null and b/assets/ideal-img/react-native.a3415f1.640.png differ diff --git a/assets/ideal-img/react-native.efc41e0.640.png b/assets/ideal-img/react-native.efc41e0.640.png new file mode 100644 index 0000000000..27ac312add Binary files /dev/null and b/assets/ideal-img/react-native.efc41e0.640.png differ diff --git a/assets/ideal-img/react-navigation.0ff888d.640.png b/assets/ideal-img/react-navigation.0ff888d.640.png new file mode 100644 index 0000000000..5cb2684387 Binary files /dev/null and b/assets/ideal-img/react-navigation.0ff888d.640.png differ diff --git a/assets/ideal-img/react-navigation.934c9f1.640.png b/assets/ideal-img/react-navigation.934c9f1.640.png new file mode 100644 index 0000000000..812eac3fce Binary files /dev/null and b/assets/ideal-img/react-navigation.934c9f1.640.png differ diff --git a/assets/ideal-img/react-navigation.b259138.1030.png b/assets/ideal-img/react-navigation.b259138.1030.png new file mode 100644 index 0000000000..c52e63b4a7 Binary files /dev/null and b/assets/ideal-img/react-navigation.b259138.1030.png differ diff --git a/assets/ideal-img/react-redux.55a4b3b.640.png b/assets/ideal-img/react-redux.55a4b3b.640.png new file mode 100644 index 0000000000..370d3ff002 Binary files /dev/null and b/assets/ideal-img/react-redux.55a4b3b.640.png differ diff --git a/assets/ideal-img/reactive-button.1a55e61.640.png b/assets/ideal-img/reactive-button.1a55e61.640.png new file mode 100644 index 0000000000..16e67113c5 Binary files /dev/null and b/assets/ideal-img/reactive-button.1a55e61.640.png differ diff --git a/assets/ideal-img/reactnative-aria.94d39b6.640.png b/assets/ideal-img/reactnative-aria.94d39b6.640.png new file mode 100644 index 0000000000..b9a6d18fa4 Binary files /dev/null and b/assets/ideal-img/reactnative-aria.94d39b6.640.png differ diff --git a/assets/ideal-img/reactnative.859c331.640.png b/assets/ideal-img/reactnative.859c331.640.png new file mode 100644 index 0000000000..3e50389a1f Binary files /dev/null and b/assets/ideal-img/reactnative.859c331.640.png differ diff --git a/assets/ideal-img/reactnativeboilerplate.8037a07.640.png b/assets/ideal-img/reactnativeboilerplate.8037a07.640.png new file mode 100644 index 0000000000..47cf652862 Binary files /dev/null and b/assets/ideal-img/reactnativeboilerplate.8037a07.640.png differ diff --git a/assets/ideal-img/realtime-apps-workshop.9960bcd.640.png b/assets/ideal-img/realtime-apps-workshop.9960bcd.640.png new file mode 100644 index 0000000000..2946c37a41 Binary files /dev/null and b/assets/ideal-img/realtime-apps-workshop.9960bcd.640.png differ diff --git a/assets/ideal-img/red-gradient.a203860.640.png b/assets/ideal-img/red-gradient.a203860.640.png new file mode 100644 index 0000000000..5a1d07a557 Binary files /dev/null and b/assets/ideal-img/red-gradient.a203860.640.png differ diff --git a/assets/ideal-img/reddit-image-fetcher.c1477de.640.png b/assets/ideal-img/reddit-image-fetcher.c1477de.640.png new file mode 100644 index 0000000000..a5353078e4 Binary files /dev/null and b/assets/ideal-img/reddit-image-fetcher.c1477de.640.png differ diff --git a/assets/ideal-img/redis-developer.7d9b45f.640.png b/assets/ideal-img/redis-developer.7d9b45f.640.png new file mode 100644 index 0000000000..aacbe62993 Binary files /dev/null and b/assets/ideal-img/redis-developer.7d9b45f.640.png differ diff --git a/assets/ideal-img/redux-cool.36add2c.640.png b/assets/ideal-img/redux-cool.36add2c.640.png new file mode 100644 index 0000000000..f1d82e2b5d Binary files /dev/null and b/assets/ideal-img/redux-cool.36add2c.640.png differ diff --git a/assets/ideal-img/redux.b480f0d.640.png b/assets/ideal-img/redux.b480f0d.640.png new file mode 100644 index 0000000000..9f20ac27f4 Binary files /dev/null and b/assets/ideal-img/redux.b480f0d.640.png differ diff --git a/assets/ideal-img/refine.415ca23.640.png b/assets/ideal-img/refine.415ca23.640.png new file mode 100644 index 0000000000..ea5d5cb06c Binary files /dev/null and b/assets/ideal-img/refine.415ca23.640.png differ diff --git a/assets/ideal-img/registry.stackql.io.dbbc33c.640.png b/assets/ideal-img/registry.stackql.io.dbbc33c.640.png new file mode 100644 index 0000000000..798f0aea25 Binary files /dev/null and b/assets/ideal-img/registry.stackql.io.dbbc33c.640.png differ diff --git a/assets/ideal-img/relay.148d170.640.png b/assets/ideal-img/relay.148d170.640.png new file mode 100644 index 0000000000..f4edb80e95 Binary files /dev/null and b/assets/ideal-img/relay.148d170.640.png differ diff --git a/assets/ideal-img/rematch.9fb8382.640.png b/assets/ideal-img/rematch.9fb8382.640.png new file mode 100644 index 0000000000..90deecbd99 Binary files /dev/null and b/assets/ideal-img/rematch.9fb8382.640.png differ diff --git a/assets/ideal-img/remirror.9b7cd02.640.png b/assets/ideal-img/remirror.9b7cd02.640.png new file mode 100644 index 0000000000..c03589fd59 Binary files /dev/null and b/assets/ideal-img/remirror.9b7cd02.640.png differ diff --git a/assets/ideal-img/remotion.a09b3ae.640.png b/assets/ideal-img/remotion.a09b3ae.640.png new file mode 100644 index 0000000000..974280230d Binary files /dev/null and b/assets/ideal-img/remotion.a09b3ae.640.png differ diff --git a/assets/ideal-img/repeaterjs.e7e3584.640.png b/assets/ideal-img/repeaterjs.e7e3584.640.png new file mode 100644 index 0000000000..eee83b1bfa Binary files /dev/null and b/assets/ideal-img/repeaterjs.e7e3584.640.png differ diff --git a/assets/ideal-img/replicad.95a8a13.640.png b/assets/ideal-img/replicad.95a8a13.640.png new file mode 100644 index 0000000000..25ceddc432 Binary files /dev/null and b/assets/ideal-img/replicad.95a8a13.640.png differ diff --git a/assets/ideal-img/ricky-vetter.b237586.200.jpg b/assets/ideal-img/ricky-vetter.b237586.200.jpg new file mode 100644 index 0000000000..b5ebc2d0cd Binary files /dev/null and b/assets/ideal-img/ricky-vetter.b237586.200.jpg differ diff --git a/assets/ideal-img/rivalis.2ac0d8b.640.png b/assets/ideal-img/rivalis.2ac0d8b.640.png new file mode 100644 index 0000000000..4e99bdf000 Binary files /dev/null and b/assets/ideal-img/rivalis.2ac0d8b.640.png differ diff --git a/assets/ideal-img/rnrh.e8099b8.640.png b/assets/ideal-img/rnrh.e8099b8.640.png new file mode 100644 index 0000000000..ab496b9ea7 Binary files /dev/null and b/assets/ideal-img/rnrh.e8099b8.640.png differ diff --git a/assets/ideal-img/rooks.20f286b.640.png b/assets/ideal-img/rooks.20f286b.640.png new file mode 100644 index 0000000000..ce2f847c01 Binary files /dev/null and b/assets/ideal-img/rooks.20f286b.640.png differ diff --git a/assets/ideal-img/rsocket.a862456.640.png b/assets/ideal-img/rsocket.a862456.640.png new file mode 100644 index 0000000000..8e06d17b43 Binary files /dev/null and b/assets/ideal-img/rsocket.a862456.640.png differ diff --git a/assets/ideal-img/runiac.cc2c864.640.png b/assets/ideal-img/runiac.cc2c864.640.png new file mode 100644 index 0000000000..cc989d3ebc Binary files /dev/null and b/assets/ideal-img/runiac.cc2c864.640.png differ diff --git a/assets/ideal-img/runlet.24636e0.640.png b/assets/ideal-img/runlet.24636e0.640.png new file mode 100644 index 0000000000..cf8218802f Binary files /dev/null and b/assets/ideal-img/runlet.24636e0.640.png differ diff --git a/assets/ideal-img/sado0823.7516687.640.png b/assets/ideal-img/sado0823.7516687.640.png new file mode 100644 index 0000000000..94380953a0 Binary files /dev/null and b/assets/ideal-img/sado0823.7516687.640.png differ diff --git a/assets/ideal-img/saleor.ed9adee.640.png b/assets/ideal-img/saleor.ed9adee.640.png new file mode 100644 index 0000000000..82beda4746 Binary files /dev/null and b/assets/ideal-img/saleor.ed9adee.640.png differ diff --git a/assets/ideal-img/sap-cloud.2ba4181.640.png b/assets/ideal-img/sap-cloud.2ba4181.640.png new file mode 100644 index 0000000000..ff50513080 Binary files /dev/null and b/assets/ideal-img/sap-cloud.2ba4181.640.png differ diff --git a/assets/ideal-img/sap-cloud.87fd77f.1030.png b/assets/ideal-img/sap-cloud.87fd77f.1030.png new file mode 100644 index 0000000000..2a8137c007 Binary files /dev/null and b/assets/ideal-img/sap-cloud.87fd77f.1030.png differ diff --git a/assets/ideal-img/sapcloudsdk.7403f95.640.png b/assets/ideal-img/sapcloudsdk.7403f95.640.png new file mode 100644 index 0000000000..ea3e42cb3d Binary files /dev/null and b/assets/ideal-img/sapcloudsdk.7403f95.640.png differ diff --git a/assets/ideal-img/sapphire.768be39.640.png b/assets/ideal-img/sapphire.768be39.640.png new file mode 100644 index 0000000000..0bffefbb4d Binary files /dev/null and b/assets/ideal-img/sapphire.768be39.640.png differ diff --git a/assets/ideal-img/sass-fairy.b960939.640.png b/assets/ideal-img/sass-fairy.b960939.640.png new file mode 100644 index 0000000000..b518969c5b Binary files /dev/null and b/assets/ideal-img/sass-fairy.b960939.640.png differ diff --git a/assets/ideal-img/sciwp.f550323.640.png b/assets/ideal-img/sciwp.f550323.640.png new file mode 100644 index 0000000000..262c565392 Binary files /dev/null and b/assets/ideal-img/sciwp.f550323.640.png differ diff --git a/assets/ideal-img/sequence.cf3290e.640.png b/assets/ideal-img/sequence.cf3290e.640.png new file mode 100644 index 0000000000..8e482cd6a6 Binary files /dev/null and b/assets/ideal-img/sequence.cf3290e.640.png differ diff --git a/assets/ideal-img/seven-innovation-base.72367e7.640.png b/assets/ideal-img/seven-innovation-base.72367e7.640.png new file mode 100644 index 0000000000..771367e81f Binary files /dev/null and b/assets/ideal-img/seven-innovation-base.72367e7.640.png differ diff --git a/assets/ideal-img/shabados.347b602.640.png b/assets/ideal-img/shabados.347b602.640.png new file mode 100644 index 0000000000..d9fb9b7114 Binary files /dev/null and b/assets/ideal-img/shabados.347b602.640.png differ diff --git a/assets/ideal-img/shotstack.c48672a.640.png b/assets/ideal-img/shotstack.c48672a.640.png new file mode 100644 index 0000000000..6de08aeb95 Binary files /dev/null and b/assets/ideal-img/shotstack.c48672a.640.png differ diff --git a/assets/ideal-img/sicope-model.42f11e5.640.png b/assets/ideal-img/sicope-model.42f11e5.640.png new file mode 100644 index 0000000000..c2b6594827 Binary files /dev/null and b/assets/ideal-img/sicope-model.42f11e5.640.png differ diff --git a/assets/ideal-img/signoz.77c06e6.640.png b/assets/ideal-img/signoz.77c06e6.640.png new file mode 100644 index 0000000000..a226de198c Binary files /dev/null and b/assets/ideal-img/signoz.77c06e6.640.png differ diff --git a/assets/ideal-img/single-spa.ea2b890.640.png b/assets/ideal-img/single-spa.ea2b890.640.png new file mode 100644 index 0000000000..62ce56ae9e Binary files /dev/null and b/assets/ideal-img/single-spa.ea2b890.640.png differ diff --git a/assets/ideal-img/smart-docs.b0611eb.640.png b/assets/ideal-img/smart-docs.b0611eb.640.png new file mode 100644 index 0000000000..e9561c12d7 Binary files /dev/null and b/assets/ideal-img/smart-docs.b0611eb.640.png differ diff --git a/assets/ideal-img/smartcookieweb.4b9cef2.640.png b/assets/ideal-img/smartcookieweb.4b9cef2.640.png new file mode 100644 index 0000000000..ba57e4c548 Binary files /dev/null and b/assets/ideal-img/smartcookieweb.4b9cef2.640.png differ diff --git a/assets/ideal-img/smashgg.38d7ad2.640.png b/assets/ideal-img/smashgg.38d7ad2.640.png new file mode 100644 index 0000000000..0a4c164ca0 Binary files /dev/null and b/assets/ideal-img/smashgg.38d7ad2.640.png differ diff --git a/assets/ideal-img/snapchat.e815a99.640.png b/assets/ideal-img/snapchat.e815a99.640.png new file mode 100644 index 0000000000..49cdb27b0c Binary files /dev/null and b/assets/ideal-img/snapchat.e815a99.640.png differ diff --git a/assets/ideal-img/snapchat.ea1f1e4.1030.png b/assets/ideal-img/snapchat.ea1f1e4.1030.png new file mode 100644 index 0000000000..bfa2911cf8 Binary files /dev/null and b/assets/ideal-img/snapchat.ea1f1e4.1030.png differ diff --git a/assets/ideal-img/social-embed.068ed98.640.png b/assets/ideal-img/social-embed.068ed98.640.png new file mode 100644 index 0000000000..6f97f807a4 Binary files /dev/null and b/assets/ideal-img/social-embed.068ed98.640.png differ diff --git a/assets/ideal-img/sodaforsparc.dbfc167.640.png b/assets/ideal-img/sodaforsparc.dbfc167.640.png new file mode 100644 index 0000000000..74f9d0125b Binary files /dev/null and b/assets/ideal-img/sodaforsparc.dbfc167.640.png differ diff --git a/assets/ideal-img/solana.11c06b5.640.png b/assets/ideal-img/solana.11c06b5.640.png new file mode 100644 index 0000000000..8322020b9e Binary files /dev/null and b/assets/ideal-img/solana.11c06b5.640.png differ diff --git a/assets/ideal-img/solana.59b8299.1030.png b/assets/ideal-img/solana.59b8299.1030.png new file mode 100644 index 0000000000..43894b3694 Binary files /dev/null and b/assets/ideal-img/solana.59b8299.1030.png differ diff --git a/assets/ideal-img/someengineering.0d827a8.640.png b/assets/ideal-img/someengineering.0d827a8.640.png new file mode 100644 index 0000000000..ab2d63abbd Binary files /dev/null and b/assets/ideal-img/someengineering.0d827a8.640.png differ diff --git a/assets/ideal-img/spicetify.1a085f6.640.png b/assets/ideal-img/spicetify.1a085f6.640.png new file mode 100644 index 0000000000..8f9c224b4f Binary files /dev/null and b/assets/ideal-img/spicetify.1a085f6.640.png differ diff --git a/assets/ideal-img/spotifyapi-net.d6297d3.640.png b/assets/ideal-img/spotifyapi-net.d6297d3.640.png new file mode 100644 index 0000000000..a7ff15d03b Binary files /dev/null and b/assets/ideal-img/spotifyapi-net.d6297d3.640.png differ diff --git a/assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png b/assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png new file mode 100644 index 0000000000..4e62c67234 Binary files /dev/null and b/assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png differ diff --git a/assets/ideal-img/stackblitz.5098698.640.png b/assets/ideal-img/stackblitz.5098698.640.png new file mode 100644 index 0000000000..440aaf2eb0 Binary files /dev/null and b/assets/ideal-img/stackblitz.5098698.640.png differ diff --git a/assets/ideal-img/stackblitz.7e33583.1030.png b/assets/ideal-img/stackblitz.7e33583.1030.png new file mode 100644 index 0000000000..d34b3b899e Binary files /dev/null and b/assets/ideal-img/stackblitz.7e33583.1030.png differ diff --git a/assets/ideal-img/stackblitz.8e72b20.640.png b/assets/ideal-img/stackblitz.8e72b20.640.png new file mode 100644 index 0000000000..499acf0aa0 Binary files /dev/null and b/assets/ideal-img/stackblitz.8e72b20.640.png differ diff --git a/assets/ideal-img/stackblitz.b6d2350.1030.png b/assets/ideal-img/stackblitz.b6d2350.1030.png new file mode 100644 index 0000000000..71fee93481 Binary files /dev/null and b/assets/ideal-img/stackblitz.b6d2350.1030.png differ diff --git a/assets/ideal-img/stackql.c7f7614.640.png b/assets/ideal-img/stackql.c7f7614.640.png new file mode 100644 index 0000000000..094df6d2a0 Binary files /dev/null and b/assets/ideal-img/stackql.c7f7614.640.png differ diff --git a/assets/ideal-img/stryker-mutator.f44ee7a.640.png b/assets/ideal-img/stryker-mutator.f44ee7a.640.png new file mode 100644 index 0000000000..a6388ae9d7 Binary files /dev/null and b/assets/ideal-img/stryker-mutator.f44ee7a.640.png differ diff --git a/assets/ideal-img/stylable.a1dfdc7.640.png b/assets/ideal-img/stylable.a1dfdc7.640.png new file mode 100644 index 0000000000..6df8dbf88f Binary files /dev/null and b/assets/ideal-img/stylable.a1dfdc7.640.png differ diff --git a/assets/ideal-img/supabase.a1c0e2c.1030.png b/assets/ideal-img/supabase.a1c0e2c.1030.png new file mode 100644 index 0000000000..56a9f2de33 Binary files /dev/null and b/assets/ideal-img/supabase.a1c0e2c.1030.png differ diff --git a/assets/ideal-img/supabase.c682b42.640.png b/assets/ideal-img/supabase.c682b42.640.png new file mode 100644 index 0000000000..fb9b4e4e1d Binary files /dev/null and b/assets/ideal-img/supabase.c682b42.640.png differ diff --git a/assets/ideal-img/svix.55bb910.640.png b/assets/ideal-img/svix.55bb910.640.png new file mode 100644 index 0000000000..a2d0bf80a1 Binary files /dev/null and b/assets/ideal-img/svix.55bb910.640.png differ diff --git a/assets/ideal-img/sweetcode.ef07201.640.png b/assets/ideal-img/sweetcode.ef07201.640.png new file mode 100644 index 0000000000..78bd28c914 Binary files /dev/null and b/assets/ideal-img/sweetcode.ef07201.640.png differ diff --git a/assets/ideal-img/synergies.bd6e428.640.png b/assets/ideal-img/synergies.bd6e428.640.png new file mode 100644 index 0000000000..46432252f7 Binary files /dev/null and b/assets/ideal-img/synergies.bd6e428.640.png differ diff --git a/assets/ideal-img/t-regx.9843ba1.640.png b/assets/ideal-img/t-regx.9843ba1.640.png new file mode 100644 index 0000000000..6bb09be49c Binary files /dev/null and b/assets/ideal-img/t-regx.9843ba1.640.png differ diff --git a/assets/ideal-img/talentbrick.01fd671.640.png b/assets/ideal-img/talentbrick.01fd671.640.png new file mode 100644 index 0000000000..ba177307e1 Binary files /dev/null and b/assets/ideal-img/talentbrick.01fd671.640.png differ diff --git a/assets/ideal-img/tamalwebsite.26309ad.640.png b/assets/ideal-img/tamalwebsite.26309ad.640.png new file mode 100644 index 0000000000..4718e97a98 Binary files /dev/null and b/assets/ideal-img/tamalwebsite.26309ad.640.png differ diff --git a/assets/ideal-img/tasit.ca14517.640.png b/assets/ideal-img/tasit.ca14517.640.png new file mode 100644 index 0000000000..6872f42fb7 Binary files /dev/null and b/assets/ideal-img/tasit.ca14517.640.png differ diff --git a/assets/ideal-img/tauri.0e2fd42.1030.png b/assets/ideal-img/tauri.0e2fd42.1030.png new file mode 100644 index 0000000000..953c05f897 Binary files /dev/null and b/assets/ideal-img/tauri.0e2fd42.1030.png differ diff --git a/assets/ideal-img/tauri.b9dc5c1.640.png b/assets/ideal-img/tauri.b9dc5c1.640.png new file mode 100644 index 0000000000..b98c0c8f56 Binary files /dev/null and b/assets/ideal-img/tauri.b9dc5c1.640.png differ diff --git a/assets/ideal-img/tauri.d6c8d2d.640.png b/assets/ideal-img/tauri.d6c8d2d.640.png new file mode 100644 index 0000000000..dfd673ff59 Binary files /dev/null and b/assets/ideal-img/tauri.d6c8d2d.640.png differ diff --git a/assets/ideal-img/techharvesting.be1f17a.640.png b/assets/ideal-img/techharvesting.be1f17a.640.png new file mode 100644 index 0000000000..bde01e24fe Binary files /dev/null and b/assets/ideal-img/techharvesting.be1f17a.640.png differ diff --git a/assets/ideal-img/testing-library.f9bd592.640.png b/assets/ideal-img/testing-library.f9bd592.640.png new file mode 100644 index 0000000000..562fcbe58b Binary files /dev/null and b/assets/ideal-img/testing-library.f9bd592.640.png differ diff --git a/assets/ideal-img/the-diff.5192fcc.640.png b/assets/ideal-img/the-diff.5192fcc.640.png new file mode 100644 index 0000000000..17b7dca461 Binary files /dev/null and b/assets/ideal-img/the-diff.5192fcc.640.png differ diff --git a/assets/ideal-img/tidb-community-book.05a8b18.640.png b/assets/ideal-img/tidb-community-book.05a8b18.640.png new file mode 100644 index 0000000000..e66af3f935 Binary files /dev/null and b/assets/ideal-img/tidb-community-book.05a8b18.640.png differ diff --git a/assets/ideal-img/tinaeldevresse.3e1ad23.640.png b/assets/ideal-img/tinaeldevresse.3e1ad23.640.png new file mode 100644 index 0000000000..9abdea0cd0 Binary files /dev/null and b/assets/ideal-img/tinaeldevresse.3e1ad23.640.png differ diff --git a/assets/ideal-img/tooljet.5743407.640.png b/assets/ideal-img/tooljet.5743407.640.png new file mode 100644 index 0000000000..aeff9066a0 Binary files /dev/null and b/assets/ideal-img/tooljet.5743407.640.png differ diff --git a/assets/ideal-img/tremor.308b735.640.png b/assets/ideal-img/tremor.308b735.640.png new file mode 100644 index 0000000000..9277f687c5 Binary files /dev/null and b/assets/ideal-img/tremor.308b735.640.png differ diff --git a/assets/ideal-img/trpgengine.28a9eb2.640.png b/assets/ideal-img/trpgengine.28a9eb2.640.png new file mode 100644 index 0000000000..dee159ae67 Binary files /dev/null and b/assets/ideal-img/trpgengine.28a9eb2.640.png differ diff --git a/assets/ideal-img/tuist.c32cfcd.640.png b/assets/ideal-img/tuist.c32cfcd.640.png new file mode 100644 index 0000000000..0034e8d677 Binary files /dev/null and b/assets/ideal-img/tuist.c32cfcd.640.png differ diff --git a/assets/ideal-img/uniforms.4e46641.640.png b/assets/ideal-img/uniforms.4e46641.640.png new file mode 100644 index 0000000000..8a0eca07f2 Binary files /dev/null and b/assets/ideal-img/uniforms.4e46641.640.png differ diff --git a/assets/ideal-img/unleash.054b153.640.png b/assets/ideal-img/unleash.054b153.640.png new file mode 100644 index 0000000000..a5b2167229 Binary files /dev/null and b/assets/ideal-img/unleash.054b153.640.png differ diff --git a/assets/ideal-img/unmand.ee6e7d5.640.png b/assets/ideal-img/unmand.ee6e7d5.640.png new file mode 100644 index 0000000000..fca2ea494d Binary files /dev/null and b/assets/ideal-img/unmand.ee6e7d5.640.png differ diff --git a/assets/ideal-img/verdaccio.449a883.640.png b/assets/ideal-img/verdaccio.449a883.640.png new file mode 100644 index 0000000000..30403b97ca Binary files /dev/null and b/assets/ideal-img/verdaccio.449a883.640.png differ diff --git a/assets/ideal-img/verida-developers.4982a04.640.png b/assets/ideal-img/verida-developers.4982a04.640.png new file mode 100644 index 0000000000..2dea277bdf Binary files /dev/null and b/assets/ideal-img/verida-developers.4982a04.640.png differ diff --git a/assets/ideal-img/virtual-photography-kit.979093f.640.png b/assets/ideal-img/virtual-photography-kit.979093f.640.png new file mode 100644 index 0000000000..27e8a3ffba Binary files /dev/null and b/assets/ideal-img/virtual-photography-kit.979093f.640.png differ diff --git a/assets/ideal-img/vital.60553e6.640.png b/assets/ideal-img/vital.60553e6.640.png new file mode 100644 index 0000000000..164e750243 Binary files /dev/null and b/assets/ideal-img/vital.60553e6.640.png differ diff --git a/assets/ideal-img/vue-nodegui.43b0f4c.640.png b/assets/ideal-img/vue-nodegui.43b0f4c.640.png new file mode 100644 index 0000000000..f90b4815a1 Binary files /dev/null and b/assets/ideal-img/vue-nodegui.43b0f4c.640.png differ diff --git a/assets/ideal-img/warrant.f2f7a90.640.png b/assets/ideal-img/warrant.f2f7a90.640.png new file mode 100644 index 0000000000..b7f56e32f2 Binary files /dev/null and b/assets/ideal-img/warrant.f2f7a90.640.png differ diff --git a/assets/ideal-img/wasp.9ef300f.640.png b/assets/ideal-img/wasp.9ef300f.640.png new file mode 100644 index 0000000000..5209628bd3 Binary files /dev/null and b/assets/ideal-img/wasp.9ef300f.640.png differ diff --git a/assets/ideal-img/webdriverio.83ffcc6.640.png b/assets/ideal-img/webdriverio.83ffcc6.640.png new file mode 100644 index 0000000000..e25a798351 Binary files /dev/null and b/assets/ideal-img/webdriverio.83ffcc6.640.png differ diff --git a/assets/ideal-img/webiny.548a1e6.640.png b/assets/ideal-img/webiny.548a1e6.640.png new file mode 100644 index 0000000000..c832345d60 Binary files /dev/null and b/assets/ideal-img/webiny.548a1e6.640.png differ diff --git a/assets/ideal-img/whirlcodes.c9c1387.640.png b/assets/ideal-img/whirlcodes.c9c1387.640.png new file mode 100644 index 0000000000..9bfbb6d386 Binary files /dev/null and b/assets/ideal-img/whirlcodes.c9c1387.640.png differ diff --git a/assets/ideal-img/woodpecker.a024291.640.png b/assets/ideal-img/woodpecker.a024291.640.png new file mode 100644 index 0000000000..07b5bb95f8 Binary files /dev/null and b/assets/ideal-img/woodpecker.a024291.640.png differ diff --git a/assets/ideal-img/yeecord.5a675fb.640.png b/assets/ideal-img/yeecord.5a675fb.640.png new file mode 100644 index 0000000000..67fcf88324 Binary files /dev/null and b/assets/ideal-img/yeecord.5a675fb.640.png differ diff --git a/assets/ideal-img/zowe.39835e7.640.png b/assets/ideal-img/zowe.39835e7.640.png new file mode 100644 index 0000000000..a0921e5c7c Binary files /dev/null and b/assets/ideal-img/zowe.39835e7.640.png differ diff --git a/assets/ideal-img/zxuqian.c98aa2c.640.png b/assets/ideal-img/zxuqian.c98aa2c.640.png new file mode 100644 index 0000000000..0264d7c7bc Binary files /dev/null and b/assets/ideal-img/zxuqian.c98aa2c.640.png differ diff --git a/assets/images/30-days-swa-33190f7c1ad234fa30425afdb7a7cc18.png b/assets/images/30-days-swa-33190f7c1ad234fa30425afdb7a7cc18.png new file mode 100644 index 0000000000..06c294bce4 Binary files /dev/null and b/assets/images/30-days-swa-33190f7c1ad234fa30425afdb7a7cc18.png differ diff --git a/assets/images/404lab-wiki-882ad88bf32dcd4d8aff406aaf2fa287.png b/assets/images/404lab-wiki-882ad88bf32dcd4d8aff406aaf2fa287.png new file mode 100644 index 0000000000..64f0f2b3eb Binary files /dev/null and b/assets/images/404lab-wiki-882ad88bf32dcd4d8aff406aaf2fa287.png differ diff --git a/assets/images/7wate-wiki-29bdb6866e7a7c46bb87a2f182e032d6.png b/assets/images/7wate-wiki-29bdb6866e7a7c46bb87a2f182e032d6.png new file mode 100644 index 0000000000..8cc7071d6c Binary files /dev/null and b/assets/images/7wate-wiki-29bdb6866e7a7c46bb87a2f182e032d6.png differ diff --git a/assets/images/CIPP-7c0e7feda473936e1527217d9a5a24b1.png b/assets/images/CIPP-7c0e7feda473936e1527217d9a5a24b1.png new file mode 100644 index 0000000000..07d05141c5 Binary files /dev/null and b/assets/images/CIPP-7c0e7feda473936e1527217d9a5a24b1.png differ diff --git a/assets/images/SeaORM-3e87a0392ff6ae011abfcdfdbb913ba6.png b/assets/images/SeaORM-3e87a0392ff6ae011abfcdfdbb913ba6.png new file mode 100644 index 0000000000..4afe4e5bd2 Binary files /dev/null and b/assets/images/SeaORM-3e87a0392ff6ae011abfcdfdbb913ba6.png differ diff --git a/assets/images/SeaQL-blog-72fb6e4efdefff425536cce42830e881.png b/assets/images/SeaQL-blog-72fb6e4efdefff425536cce42830e881.png new file mode 100644 index 0000000000..5cc46ac3ab Binary files /dev/null and b/assets/images/SeaQL-blog-72fb6e4efdefff425536cce42830e881.png differ diff --git a/assets/images/Seaography-c06aeb6ba31d780a213d5ec31a9c4128.png b/assets/images/Seaography-c06aeb6ba31d780a213d5ec31a9c4128.png new file mode 100644 index 0000000000..ad3fbfc615 Binary files /dev/null and b/assets/images/Seaography-c06aeb6ba31d780a213d5ec31a9c4128.png differ diff --git a/assets/images/StarfishQL-06774f3479ba96b0f6fc8341214439d3.png b/assets/images/StarfishQL-06774f3479ba96b0f6fc8341214439d3.png new file mode 100644 index 0000000000..2afddb7d99 Binary files /dev/null and b/assets/images/StarfishQL-06774f3479ba96b0f6fc8341214439d3.png differ diff --git a/assets/images/agilets-b943996b17585de9fbcc724fdd280ed6.png b/assets/images/agilets-b943996b17585de9fbcc724fdd280ed6.png new file mode 100644 index 0000000000..7ddb07be02 Binary files /dev/null and b/assets/images/agilets-b943996b17585de9fbcc724fdd280ed6.png differ diff --git a/assets/images/aide_jeune-8698bde08c39c4b90644a2958b0da61b.png b/assets/images/aide_jeune-8698bde08c39c4b90644a2958b0da61b.png new file mode 100644 index 0000000000..59c85b2eaf Binary files /dev/null and b/assets/images/aide_jeune-8698bde08c39c4b90644a2958b0da61b.png differ diff --git a/assets/images/aispeaker-8b3d588a17938e200ed2eecfd6f2468f.png b/assets/images/aispeaker-8b3d588a17938e200ed2eecfd6f2468f.png new file mode 100644 index 0000000000..a7f89e1b43 Binary files /dev/null and b/assets/images/aispeaker-8b3d588a17938e200ed2eecfd6f2468f.png differ diff --git a/assets/images/akara-blog-69953dfbab78d0eed5126ba32daf9cbb.png b/assets/images/akara-blog-69953dfbab78d0eed5126ba32daf9cbb.png new file mode 100644 index 0000000000..0b5ad67d26 Binary files /dev/null and b/assets/images/akara-blog-69953dfbab78d0eed5126ba32daf9cbb.png differ diff --git a/assets/images/algolia-08ad93d9138dd941c51c22aebe687d8f.png b/assets/images/algolia-08ad93d9138dd941c51c22aebe687d8f.png new file mode 100644 index 0000000000..20265a9b09 Binary files /dev/null and b/assets/images/algolia-08ad93d9138dd941c51c22aebe687d8f.png differ diff --git a/assets/images/apache-apisix-b4e830ec3f185abc3a55f579bab5f9ca.png b/assets/images/apache-apisix-b4e830ec3f185abc3a55f579bab5f9ca.png new file mode 100644 index 0000000000..0be78033ba Binary files /dev/null and b/assets/images/apache-apisix-b4e830ec3f185abc3a55f579bab5f9ca.png differ diff --git a/assets/images/apexfp-6f1d7796a75be57e2d3cef7127e5c699.png b/assets/images/apexfp-6f1d7796a75be57e2d3cef7127e5c699.png new file mode 100644 index 0000000000..bbe6fbc707 Binary files /dev/null and b/assets/images/apexfp-6f1d7796a75be57e2d3cef7127e5c699.png differ diff --git a/assets/images/architecture-5b7220912f5cfdff40a7728233abb902.png b/assets/images/architecture-5b7220912f5cfdff40a7728233abb902.png new file mode 100644 index 0000000000..8896e75673 Binary files /dev/null and b/assets/images/architecture-5b7220912f5cfdff40a7728233abb902.png differ diff --git a/assets/images/argos-github-comment-8b62a1561b13881608d5c9f8a8f833a5.png b/assets/images/argos-github-comment-8b62a1561b13881608d5c9f8a8f833a5.png new file mode 100644 index 0000000000..1f1a0523b5 Binary files /dev/null and b/assets/images/argos-github-comment-8b62a1561b13881608d5c9f8a8f833a5.png differ diff --git a/assets/images/argos-github-status-05e8264c59fa4f8a21292f59665edf3d.png b/assets/images/argos-github-status-05e8264c59fa4f8a21292f59665edf3d.png new file mode 100644 index 0000000000..a9ea8225c1 Binary files /dev/null and b/assets/images/argos-github-status-05e8264c59fa4f8a21292f59665edf3d.png differ diff --git a/assets/images/argos-react-native-regression-216ace77baedfaf873a770112ec817ac.png b/assets/images/argos-react-native-regression-216ace77baedfaf873a770112ec817ac.png new file mode 100644 index 0000000000..3dd81704c9 Binary files /dev/null and b/assets/images/argos-react-native-regression-216ace77baedfaf873a770112ec817ac.png differ diff --git a/assets/images/astronomer-ec1d5eee119a7852320213802aaa70a4.png b/assets/images/astronomer-ec1d5eee119a7852320213802aaa70a4.png new file mode 100644 index 0000000000..1cff505bbb Binary files /dev/null and b/assets/images/astronomer-ec1d5eee119a7852320213802aaa70a4.png differ diff --git a/assets/images/attobot-c4492e9a122ce4f024e1a8e990215dd0.png b/assets/images/attobot-c4492e9a122ce4f024e1a8e990215dd0.png new file mode 100644 index 0000000000..46405e8627 Binary files /dev/null and b/assets/images/attobot-c4492e9a122ce4f024e1a8e990215dd0.png differ diff --git a/assets/images/avana-wallet-a8938a42193b774cb190191f1987d462.png b/assets/images/avana-wallet-a8938a42193b774cb190191f1987d462.png new file mode 100644 index 0000000000..e1437e4d3c Binary files /dev/null and b/assets/images/avana-wallet-a8938a42193b774cb190191f1987d462.png differ diff --git a/assets/images/awe-framework-54b97d5981ae2bea64df45945b6f0e11.png b/assets/images/awe-framework-54b97d5981ae2bea64df45945b6f0e11.png new file mode 100644 index 0000000000..b34fbd77d2 Binary files /dev/null and b/assets/images/awe-framework-54b97d5981ae2bea64df45945b6f0e11.png differ diff --git a/assets/images/axioms-e5d6ddfe4e7e37a9c21fd3dd48cd6e54.png b/assets/images/axioms-e5d6ddfe4e7e37a9c21fd3dd48cd6e54.png new file mode 100644 index 0000000000..731c74bbe7 Binary files /dev/null and b/assets/images/axioms-e5d6ddfe4e7e37a9c21fd3dd48cd6e54.png differ diff --git a/assets/images/babel-509aacfdc070e475b4f673083b2e6e74.png b/assets/images/babel-509aacfdc070e475b4f673083b2e6e74.png new file mode 100644 index 0000000000..d5ab96c86c Binary files /dev/null and b/assets/images/babel-509aacfdc070e475b4f673083b2e6e74.png differ diff --git a/assets/images/bandwidth-039d57f34a279b32748a2d994cfe8c12.png b/assets/images/bandwidth-039d57f34a279b32748a2d994cfe8c12.png new file mode 100644 index 0000000000..09a36f3ccf Binary files /dev/null and b/assets/images/bandwidth-039d57f34a279b32748a2d994cfe8c12.png differ diff --git a/assets/images/baseUrlIssueBanner-3292a9164bf77c06a723e8d3ddfe66c0.png b/assets/images/baseUrlIssueBanner-3292a9164bf77c06a723e8d3ddfe66c0.png new file mode 100644 index 0000000000..1a372e2144 Binary files /dev/null and b/assets/images/baseUrlIssueBanner-3292a9164bf77c06a723e8d3ddfe66c0.png differ diff --git a/assets/images/benthos-6183d73d5a4e1dadc3cd5e845996bb84.png b/assets/images/benthos-6183d73d5a4e1dadc3cd5e845996bb84.png new file mode 100644 index 0000000000..2e9e3249ea Binary files /dev/null and b/assets/images/benthos-6183d73d5a4e1dadc3cd5e845996bb84.png differ diff --git a/assets/images/blinkshell-8d6ed8c3cefa3957b268df156322673e.png b/assets/images/blinkshell-8d6ed8c3cefa3957b268df156322673e.png new file mode 100644 index 0000000000..e2bd8adec0 Binary files /dev/null and b/assets/images/blinkshell-8d6ed8c3cefa3957b268df156322673e.png differ diff --git a/assets/images/blogasaurus-a6ca1e228a12ae11d3cf2f2abb57d5c7.png b/assets/images/blogasaurus-a6ca1e228a12ae11d3cf2f2abb57d5c7.png new file mode 100644 index 0000000000..b08022f490 Binary files /dev/null and b/assets/images/blogasaurus-a6ca1e228a12ae11d3cf2f2abb57d5c7.png differ diff --git a/assets/images/blogmatheusbrunelli-461a018ed6a0076b7113a17d6d7a212d.png b/assets/images/blogmatheusbrunelli-461a018ed6a0076b7113a17d6d7a212d.png new file mode 100644 index 0000000000..66e932e165 Binary files /dev/null and b/assets/images/blogmatheusbrunelli-461a018ed6a0076b7113a17d6d7a212d.png differ diff --git a/assets/images/botonic-406a39eecb51d4cc44ffa3a74924d4b5.png b/assets/images/botonic-406a39eecb51d4cc44ffa3a74924d4b5.png new file mode 100644 index 0000000000..138e67acbd Binary files /dev/null and b/assets/images/botonic-406a39eecb51d4cc44ffa3a74924d4b5.png differ diff --git a/assets/images/boxyhq-50e9b89431c646ae0091e7d7f83bd650.png b/assets/images/boxyhq-50e9b89431c646ae0091e7d7f83bd650.png new file mode 100644 index 0000000000..b4cc500ff1 Binary files /dev/null and b/assets/images/boxyhq-50e9b89431c646ae0091e7d7f83bd650.png differ diff --git a/assets/images/brainboard-4959f0edd62f974fd0bce9d6f1cd4887.png b/assets/images/brainboard-4959f0edd62f974fd0bce9d6f1cd4887.png new file mode 100644 index 0000000000..8dabed5f8d Binary files /dev/null and b/assets/images/brainboard-4959f0edd62f974fd0bce9d6f1cd4887.png differ diff --git a/assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg b/assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg new file mode 100644 index 0000000000..c015a407a2 Binary files /dev/null and b/assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg differ diff --git a/assets/images/bruce-wiki-ceca161425a90f278383a0398427aff4.png b/assets/images/bruce-wiki-ceca161425a90f278383a0398427aff4.png new file mode 100644 index 0000000000..323c40780a Binary files /dev/null and b/assets/images/bruce-wiki-ceca161425a90f278383a0398427aff4.png differ diff --git a/assets/images/build-tracker-b2df263a3614bcac48f8eb31a9d8dba4.png b/assets/images/build-tracker-b2df263a3614bcac48f8eb31a9d8dba4.png new file mode 100644 index 0000000000..c2e970397d Binary files /dev/null and b/assets/images/build-tracker-b2df263a3614bcac48f8eb31a9d8dba4.png differ diff --git a/assets/images/chaos-mesh-5072bf5cf6237a68add5bfd951e2180b.png b/assets/images/chaos-mesh-5072bf5cf6237a68add5bfd951e2180b.png new file mode 100644 index 0000000000..de2213f9ff Binary files /dev/null and b/assets/images/chaos-mesh-5072bf5cf6237a68add5bfd951e2180b.png differ diff --git a/assets/images/charles-ancheta-a222b7858cdf7b245184d99817454cee.png b/assets/images/charles-ancheta-a222b7858cdf7b245184d99817454cee.png new file mode 100644 index 0000000000..9be464e35e Binary files /dev/null and b/assets/images/charles-ancheta-a222b7858cdf7b245184d99817454cee.png differ diff --git a/assets/images/chatkitty-f031f34db242a0cc1c7af7260e035d90.png b/assets/images/chatkitty-f031f34db242a0cc1c7af7260e035d90.png new file mode 100644 index 0000000000..07020c514b Binary files /dev/null and b/assets/images/chatkitty-f031f34db242a0cc1c7af7260e035d90.png differ diff --git a/assets/images/claritychallenge-108b7f845c124611acdb85af6ea4d35f.png b/assets/images/claritychallenge-108b7f845c124611acdb85af6ea4d35f.png new file mode 100644 index 0000000000..258e9e6bad Binary files /dev/null and b/assets/images/claritychallenge-108b7f845c124611acdb85af6ea4d35f.png differ diff --git a/assets/images/clutch-b055c6bffb878093fe446a1cdd461b84.png b/assets/images/clutch-b055c6bffb878093fe446a1cdd461b84.png new file mode 100644 index 0000000000..dd84085ca0 Binary files /dev/null and b/assets/images/clutch-b055c6bffb878093fe446a1cdd461b84.png differ diff --git a/assets/images/codesandbox-7cc31f5edeaa0f55d18baff8c264ab41.png b/assets/images/codesandbox-7cc31f5edeaa0f55d18baff8c264ab41.png new file mode 100644 index 0000000000..b4a2a1dcac Binary files /dev/null and b/assets/images/codesandbox-7cc31f5edeaa0f55d18baff8c264ab41.png differ diff --git a/assets/images/codesweetly-f9e825f4513c62f750a3e0550721f333.png b/assets/images/codesweetly-f9e825f4513c62f750a3e0550721f333.png new file mode 100644 index 0000000000..6d848fee6a Binary files /dev/null and b/assets/images/codesweetly-f9e825f4513c62f750a3e0550721f333.png differ diff --git a/assets/images/codeyourfuture-aae9ac03db1b2c7360877261762c5f86.png b/assets/images/codeyourfuture-aae9ac03db1b2c7360877261762c5f86.png new file mode 100644 index 0000000000..97df3790f9 Binary files /dev/null and b/assets/images/codeyourfuture-aae9ac03db1b2c7360877261762c5f86.png differ diff --git a/assets/images/comp-labs-f7b9c2e8eaf2c111b2013a47a7899241.png b/assets/images/comp-labs-f7b9c2e8eaf2c111b2013a47a7899241.png new file mode 100644 index 0000000000..1ff44abcb3 Binary files /dev/null and b/assets/images/comp-labs-f7b9c2e8eaf2c111b2013a47a7899241.png differ diff --git a/assets/images/componentkit-d3ef2d1fcafe86d7aa5c5a8a3a57752c.png b/assets/images/componentkit-d3ef2d1fcafe86d7aa5c5a8a3a57752c.png new file mode 100644 index 0000000000..2bb36ce94a Binary files /dev/null and b/assets/images/componentkit-d3ef2d1fcafe86d7aa5c5a8a3a57752c.png differ diff --git a/assets/images/configcat-2eff8eff12a99d8f3d1a0b30c2643628.png b/assets/images/configcat-2eff8eff12a99d8f3d1a0b30c2643628.png new file mode 100644 index 0000000000..4608dc9aad Binary files /dev/null and b/assets/images/configcat-2eff8eff12a99d8f3d1a0b30c2643628.png differ diff --git a/assets/images/console-table-7acef5eed9056bf9a0dbae7a57113d0f.png b/assets/images/console-table-7acef5eed9056bf9a0dbae7a57113d0f.png new file mode 100644 index 0000000000..8cbc8235e8 Binary files /dev/null and b/assets/images/console-table-7acef5eed9056bf9a0dbae7a57113d0f.png differ diff --git a/assets/images/countrystatecity-060c64c5a7e717d8f70ee4e07f22c7f7.png b/assets/images/countrystatecity-060c64c5a7e717d8f70ee4e07f22c7f7.png new file mode 100644 index 0000000000..0542714c03 Binary files /dev/null and b/assets/images/countrystatecity-060c64c5a7e717d8f70ee4e07f22c7f7.png differ diff --git a/assets/images/courier-11d42951bbaf823db5f0efd6bcbdc95f.png b/assets/images/courier-11d42951bbaf823db5f0efd6bcbdc95f.png new file mode 100644 index 0000000000..4d5aa7ab99 Binary files /dev/null and b/assets/images/courier-11d42951bbaf823db5f0efd6bcbdc95f.png differ diff --git a/assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png b/assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png new file mode 100644 index 0000000000..727cfb07b4 Binary files /dev/null and b/assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png differ diff --git a/assets/images/crawler-overview-6224cc4c7b20511010652f3f4ed5904e.png b/assets/images/crawler-overview-6224cc4c7b20511010652f3f4ed5904e.png new file mode 100644 index 0000000000..a4ed60dc26 Binary files /dev/null and b/assets/images/crawler-overview-6224cc4c7b20511010652f3f4ed5904e.png differ diff --git a/assets/images/create-react-app-9511de378d817b4e149bdaec2deb49ec.png b/assets/images/create-react-app-9511de378d817b4e149bdaec2deb49ec.png new file mode 100644 index 0000000000..2aaa4582e1 Binary files /dev/null and b/assets/images/create-react-app-9511de378d817b4e149bdaec2deb49ec.png differ diff --git a/assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png b/assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png new file mode 100644 index 0000000000..ca7f03acf7 Binary files /dev/null and b/assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png differ diff --git a/assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png b/assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png new file mode 100644 index 0000000000..9a4478d966 Binary files /dev/null and b/assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png differ diff --git a/assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png b/assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png new file mode 100644 index 0000000000..92dbe882f6 Binary files /dev/null and b/assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png differ diff --git a/assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png b/assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png new file mode 100644 index 0000000000..9bae3f735a Binary files /dev/null and b/assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png differ diff --git a/assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png b/assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png new file mode 100644 index 0000000000..a59573748d Binary files /dev/null and b/assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png differ diff --git a/assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png b/assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png new file mode 100644 index 0000000000..ba86adce43 Binary files /dev/null and b/assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png differ diff --git a/assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png b/assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png new file mode 100644 index 0000000000..72ccd15c9f Binary files /dev/null and b/assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png differ diff --git a/assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png b/assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png new file mode 100644 index 0000000000..a21be180a4 Binary files /dev/null and b/assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png differ diff --git a/assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png b/assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png new file mode 100644 index 0000000000..dfb8e43b92 Binary files /dev/null and b/assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png differ diff --git a/assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png b/assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png new file mode 100644 index 0000000000..e333dc87d9 Binary files /dev/null and b/assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png differ diff --git a/assets/images/cryptodevhub-5a1490f6e4067fd70fe7478b86b8b2ec.png b/assets/images/cryptodevhub-5a1490f6e4067fd70fe7478b86b8b2ec.png new file mode 100644 index 0000000000..f1892e915d Binary files /dev/null and b/assets/images/cryptodevhub-5a1490f6e4067fd70fe7478b86b8b2ec.png differ diff --git a/assets/images/daily-digest-covid-19-in-france-a3ddfc37b63650dcd98c72d6626d0025.png b/assets/images/daily-digest-covid-19-in-france-a3ddfc37b63650dcd98c72d6626d0025.png new file mode 100644 index 0000000000..4bd90728bf Binary files /dev/null and b/assets/images/daily-digest-covid-19-in-france-a3ddfc37b63650dcd98c72d6626d0025.png differ diff --git a/assets/images/darklang-9b5f899f4f2bd70349432d9d900e63de.png b/assets/images/darklang-9b5f899f4f2bd70349432d9d900e63de.png new file mode 100644 index 0000000000..e02d7e0706 Binary files /dev/null and b/assets/images/darklang-9b5f899f4f2bd70349432d9d900e63de.png differ diff --git a/assets/images/dart-code-metrics-2e48f03e468f117f107b13cf5c09c39d.png b/assets/images/dart-code-metrics-2e48f03e468f117f107b13cf5c09c39d.png new file mode 100644 index 0000000000..bae1593464 Binary files /dev/null and b/assets/images/dart-code-metrics-2e48f03e468f117f107b13cf5c09c39d.png differ diff --git a/assets/images/datagit-1c0f9003ec2b9b1e2dc214c572247f1a.png b/assets/images/datagit-1c0f9003ec2b9b1e2dc214c572247f1a.png new file mode 100644 index 0000000000..bd1f065f9d Binary files /dev/null and b/assets/images/datagit-1c0f9003ec2b9b1e2dc214c572247f1a.png differ diff --git a/assets/images/datagit-31574c085024a19c7c82e817d2338e45.png b/assets/images/datagit-31574c085024a19c7c82e817d2338e45.png new file mode 100644 index 0000000000..81689cc4df Binary files /dev/null and b/assets/images/datagit-31574c085024a19c7c82e817d2338e45.png differ diff --git a/assets/images/datagit-9cff7b631eaa43b00d9e1373359abfb1.png b/assets/images/datagit-9cff7b631eaa43b00d9e1373359abfb1.png new file mode 100644 index 0000000000..4a0ed09c6e Binary files /dev/null and b/assets/images/datagit-9cff7b631eaa43b00d9e1373359abfb1.png differ diff --git a/assets/images/datagit-rtl-screenshot-0def4b4e4d5f458ea864774e78b0bf8f.png b/assets/images/datagit-rtl-screenshot-0def4b4e4d5f458ea864774e78b0bf8f.png new file mode 100644 index 0000000000..fb7204f188 Binary files /dev/null and b/assets/images/datagit-rtl-screenshot-0def4b4e4d5f458ea864774e78b0bf8f.png differ diff --git a/assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png b/assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png new file mode 100644 index 0000000000..f387755210 Binary files /dev/null and b/assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png differ diff --git a/assets/images/devspace-c53ce0b4c55d98742b4352ff7730ee91.png b/assets/images/devspace-c53ce0b4c55d98742b4352ff7730ee91.png new file mode 100644 index 0000000000..b918361374 Binary files /dev/null and b/assets/images/devspace-c53ce0b4c55d98742b4352ff7730ee91.png differ diff --git a/assets/images/difranca-technotes-b2c0837057bbf1d10840f32ed2cc1f3f.png b/assets/images/difranca-technotes-b2c0837057bbf1d10840f32ed2cc1f3f.png new file mode 100644 index 0000000000..0e42fdfe4f Binary files /dev/null and b/assets/images/difranca-technotes-b2c0837057bbf1d10840f32ed2cc1f3f.png differ diff --git a/assets/images/digitalsupportservices-a2a7b7598235f325ded5e9f592268a87.png b/assets/images/digitalsupportservices-a2a7b7598235f325ded5e9f592268a87.png new file mode 100644 index 0000000000..1378475a9a Binary files /dev/null and b/assets/images/digitalsupportservices-a2a7b7598235f325ded5e9f592268a87.png differ diff --git a/assets/images/dimeschedulersdk-4d7d876c9f867c8f48f46c27075fbcbf.png b/assets/images/dimeschedulersdk-4d7d876c9f867c8f48f46c27075fbcbf.png new file mode 100644 index 0000000000..129ddda8c8 Binary files /dev/null and b/assets/images/dimeschedulersdk-4d7d876c9f867c8f48f46c27075fbcbf.png differ diff --git a/assets/images/discordresources-3f28f1f92275c7cf71be8756e7d50bf2.png b/assets/images/discordresources-3f28f1f92275c7cf71be8756e7d50bf2.png new file mode 100644 index 0000000000..238a2d8e1f Binary files /dev/null and b/assets/images/discordresources-3f28f1f92275c7cf71be8756e7d50bf2.png differ diff --git a/assets/images/divine-wsf-d54ba6918bdc391ef230a3de6c393bab.png b/assets/images/divine-wsf-d54ba6918bdc391ef230a3de6c393bab.png new file mode 100644 index 0000000000..a807ae6a53 Binary files /dev/null and b/assets/images/divine-wsf-d54ba6918bdc391ef230a3de6c393bab.png differ diff --git a/assets/images/djamaile-61447aa22e1ebbe55085c19b43d09665.png b/assets/images/djamaile-61447aa22e1ebbe55085c19b43d09665.png new file mode 100644 index 0000000000..ef2a05ec75 Binary files /dev/null and b/assets/images/djamaile-61447aa22e1ebbe55085c19b43d09665.png differ diff --git a/assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png b/assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png new file mode 100644 index 0000000000..f8ba6b4408 Binary files /dev/null and b/assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png differ diff --git a/assets/images/docs-butterfly-ebf1a855a514f691d988ab84de243efc.png b/assets/images/docs-butterfly-ebf1a855a514f691d988ab84de243efc.png new file mode 100644 index 0000000000..bc8102c492 Binary files /dev/null and b/assets/images/docs-butterfly-ebf1a855a514f691d988ab84de243efc.png differ diff --git a/assets/images/docs-taro-zone-7932bfb0f465e7dc81e398c95381b1d6.png b/assets/images/docs-taro-zone-7932bfb0f465e7dc81e398c95381b1d6.png new file mode 100644 index 0000000000..e7184279da Binary files /dev/null and b/assets/images/docs-taro-zone-7932bfb0f465e7dc81e398c95381b1d6.png differ diff --git a/assets/images/docsVersionDropdown-35e13cbe46c9923327f30a76a90bff3b.png b/assets/images/docsVersionDropdown-35e13cbe46c9923327f30a76a90bff3b.png deleted file mode 100644 index 97e4164618..0000000000 Binary files a/assets/images/docsVersionDropdown-35e13cbe46c9923327f30a76a90bff3b.png and /dev/null differ diff --git a/assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg b/assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg new file mode 100644 index 0000000000..e4a4906a88 Binary files /dev/null and b/assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg differ diff --git a/assets/images/docusaurus-1f34354c7579c3ba7e82539b2098257d.png b/assets/images/docusaurus-1f34354c7579c3ba7e82539b2098257d.png new file mode 100644 index 0000000000..7f2010bde0 Binary files /dev/null and b/assets/images/docusaurus-1f34354c7579c3ba7e82539b2098257d.png differ diff --git a/assets/images/docusaurus-argos-example-repo-screenshot-a56583e16aa02c7fa96c592f1339928f.png b/assets/images/docusaurus-argos-example-repo-screenshot-a56583e16aa02c7fa96c592f1339928f.png new file mode 100644 index 0000000000..47eb3d02eb Binary files /dev/null and b/assets/images/docusaurus-argos-example-repo-screenshot-a56583e16aa02c7fa96c592f1339928f.png differ diff --git a/assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png b/assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png new file mode 100644 index 0000000000..ebe95f5ec8 Binary files /dev/null and b/assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png differ diff --git a/assets/images/docusaurus-npm-trends-3c618d573fc9ca319e54667383ea1e01.png b/assets/images/docusaurus-npm-trends-3c618d573fc9ca319e54667383ea1e01.png new file mode 100644 index 0000000000..51457bc8a1 Binary files /dev/null and b/assets/images/docusaurus-npm-trends-3c618d573fc9ca319e54667383ea1e01.png differ diff --git a/assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg b/assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg new file mode 100644 index 0000000000..561a0d4bde --- /dev/null +++ b/assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg @@ -0,0 +1 @@ +Docusaurus makes 1 year!Happy Birthday Slash!From your friends atLearn more at docusaurus.io \ No newline at end of file diff --git a/assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg b/assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg new file mode 100644 index 0000000000..f7f324fe0b --- /dev/null +++ b/assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg b/assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg new file mode 100644 index 0000000000..f619db4a6c --- /dev/null +++ b/assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/draftjs-9e8a6d2255f98acfe176fda0849cf71e.png b/assets/images/draftjs-9e8a6d2255f98acfe176fda0849cf71e.png new file mode 100644 index 0000000000..1b4bd7aa77 Binary files /dev/null and b/assets/images/draftjs-9e8a6d2255f98acfe176fda0849cf71e.png differ diff --git a/assets/images/drayman-8db14fbb4d4e74e76bda56606fe3327b.png b/assets/images/drayman-8db14fbb4d4e74e76bda56606fe3327b.png new file mode 100644 index 0000000000..82af9d87ad Binary files /dev/null and b/assets/images/drayman-8db14fbb4d4e74e76bda56606fe3327b.png differ diff --git a/assets/images/dyte-d03fa5d0bbac1ac1f1e971313b990f81.png b/assets/images/dyte-d03fa5d0bbac1ac1f1e971313b990f81.png new file mode 100644 index 0000000000..8a385945d6 Binary files /dev/null and b/assets/images/dyte-d03fa5d0bbac1ac1f1e971313b990f81.png differ diff --git a/assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png b/assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png new file mode 100644 index 0000000000..e8cacb7065 Binary files /dev/null and b/assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png differ diff --git a/assets/images/dyte-f8d1e3817485787e9a26ec3c8c279126.png b/assets/images/dyte-f8d1e3817485787e9a26ec3c8c279126.png new file mode 100644 index 0000000000..ba4d3b09d7 Binary files /dev/null and b/assets/images/dyte-f8d1e3817485787e9a26ec3c8c279126.png differ diff --git a/assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png b/assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png new file mode 100644 index 0000000000..38f0a0fffb Binary files /dev/null and b/assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png differ diff --git a/assets/images/easy-dates-da2832c14e89d0618e305579c22b959f.png b/assets/images/easy-dates-da2832c14e89d0618e305579c22b959f.png new file mode 100644 index 0000000000..cd33387dc2 Binary files /dev/null and b/assets/images/easy-dates-da2832c14e89d0618e305579c22b959f.png differ diff --git a/assets/images/easyjwt-7dab7274e629af36e29f673560e08e51.png b/assets/images/easyjwt-7dab7274e629af36e29f673560e08e51.png new file mode 100644 index 0000000000..f7835ca72b Binary files /dev/null and b/assets/images/easyjwt-7dab7274e629af36e29f673560e08e51.png differ diff --git a/assets/images/easypanel-66b8119b4545a0c4dccc65c91d3f6849.png b/assets/images/easypanel-66b8119b4545a0c4dccc65c91d3f6849.png new file mode 100644 index 0000000000..400975b3d6 Binary files /dev/null and b/assets/images/easypanel-66b8119b4545a0c4dccc65c91d3f6849.png differ diff --git a/assets/images/editor-823e50dbed8e508bd5a69c708bab8928.png b/assets/images/editor-823e50dbed8e508bd5a69c708bab8928.png new file mode 100644 index 0000000000..90feb7abee Binary files /dev/null and b/assets/images/editor-823e50dbed8e508bd5a69c708bab8928.png differ diff --git a/assets/images/edulinks-4816141fda1f4b8bed05fa4b604c6f96.png b/assets/images/edulinks-4816141fda1f4b8bed05fa4b604c6f96.png new file mode 100644 index 0000000000..de1d9093c5 Binary files /dev/null and b/assets/images/edulinks-4816141fda1f4b8bed05fa4b604c6f96.png differ diff --git a/assets/images/eightshift-docs-548747ddde278e8a29e0fb4a87d520ee.png b/assets/images/eightshift-docs-548747ddde278e8a29e0fb4a87d520ee.png new file mode 100644 index 0000000000..7de00705b5 Binary files /dev/null and b/assets/images/eightshift-docs-548747ddde278e8a29e0fb4a87d520ee.png differ diff --git a/assets/images/enarx-ff6526c1bbc90dd3b3b2bc92abb36a56.png b/assets/images/enarx-ff6526c1bbc90dd3b3b2bc92abb36a56.png new file mode 100644 index 0000000000..cd339d4d9b Binary files /dev/null and b/assets/images/enarx-ff6526c1bbc90dd3b3b2bc92abb36a56.png differ diff --git a/assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg b/assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg new file mode 100644 index 0000000000..b31ee596ff Binary files /dev/null and b/assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg differ diff --git a/assets/images/eric-e42c295cc7b874502322f57298ad5d9e.png b/assets/images/eric-e42c295cc7b874502322f57298ad5d9e.png new file mode 100644 index 0000000000..ba5fd02b76 Binary files /dev/null and b/assets/images/eric-e42c295cc7b874502322f57298ad5d9e.png differ diff --git a/assets/images/erxes-7b6edc42beda5953b7552f61fa8bfa28.png b/assets/images/erxes-7b6edc42beda5953b7552f61fa8bfa28.png new file mode 100644 index 0000000000..144686f496 Binary files /dev/null and b/assets/images/erxes-7b6edc42beda5953b7552f61fa8bfa28.png differ diff --git a/assets/images/eta-beba707df244c24e3f238d29fc6dbc0c.png b/assets/images/eta-beba707df244c24e3f238d29fc6dbc0c.png new file mode 100644 index 0000000000..ccaefa897a Binary files /dev/null and b/assets/images/eta-beba707df244c24e3f238d29fc6dbc0c.png differ diff --git a/assets/images/evantay-967b4654e7d633c54ba25be6995a3b5a.png b/assets/images/evantay-967b4654e7d633c54ba25be6995a3b5a.png new file mode 100644 index 0000000000..7656d0dc35 Binary files /dev/null and b/assets/images/evantay-967b4654e7d633c54ba25be6995a3b5a.png differ diff --git a/assets/images/evershop-8979b0fe723ca184037ccf04ea6a4e5e.png b/assets/images/evershop-8979b0fe723ca184037ccf04ea6a4e5e.png new file mode 100644 index 0000000000..e132fbf7ae Binary files /dev/null and b/assets/images/evershop-8979b0fe723ca184037ccf04ea6a4e5e.png differ diff --git a/assets/images/fast-3625a8ab63a438fe333ac43a2fbf267c.png b/assets/images/fast-3625a8ab63a438fe333ac43a2fbf267c.png new file mode 100644 index 0000000000..c69425f766 Binary files /dev/null and b/assets/images/fast-3625a8ab63a438fe333ac43a2fbf267c.png differ diff --git a/assets/images/favorites-7220082695a33eba77188ba7223c165c.png b/assets/images/favorites-7220082695a33eba77188ba7223c165c.png new file mode 100644 index 0000000000..bc0bc60630 Binary files /dev/null and b/assets/images/favorites-7220082695a33eba77188ba7223c165c.png differ diff --git a/assets/images/fbt-23d3a0658ee4a07b4b3691ad07cbe9d8.png b/assets/images/fbt-23d3a0658ee4a07b4b3691ad07cbe9d8.png new file mode 100644 index 0000000000..91e18105bb Binary files /dev/null and b/assets/images/fbt-23d3a0658ee4a07b4b3691ad07cbe9d8.png differ diff --git a/assets/images/figma-8cf6076a3c5482b115f14805a1d8c977.png b/assets/images/figma-8cf6076a3c5482b115f14805a1d8c977.png new file mode 100644 index 0000000000..0b88b9f6a0 Binary files /dev/null and b/assets/images/figma-8cf6076a3c5482b115f14805a1d8c977.png differ diff --git a/assets/images/files-gallery-9010bf288799f09712411c875544f040.png b/assets/images/files-gallery-9010bf288799f09712411c875544f040.png new file mode 100644 index 0000000000..ad7d4dd158 Binary files /dev/null and b/assets/images/files-gallery-9010bf288799f09712411c875544f040.png differ diff --git a/assets/images/firecms-e5e06ac20d82e64357ea21e70d81a429.png b/assets/images/firecms-e5e06ac20d82e64357ea21e70d81a429.png new file mode 100644 index 0000000000..f4bf6b8164 Binary files /dev/null and b/assets/images/firecms-e5e06ac20d82e64357ea21e70d81a429.png differ diff --git a/assets/images/firelordjs-b8067ff7594d915dedcbdb35688bf828.png b/assets/images/firelordjs-b8067ff7594d915dedcbdb35688bf828.png new file mode 100644 index 0000000000..4824ddd1a1 Binary files /dev/null and b/assets/images/firelordjs-b8067ff7594d915dedcbdb35688bf828.png differ diff --git a/assets/images/flagsmith-a00ad356eee3eec8de1c554ce40b3c29.png b/assets/images/flagsmith-a00ad356eee3eec8de1c554ce40b3c29.png new file mode 100644 index 0000000000..a94592b042 Binary files /dev/null and b/assets/images/flagsmith-a00ad356eee3eec8de1c554ce40b3c29.png differ diff --git a/assets/images/flarum-e49af2f0db6f9f09d2cdffb0906b4d72.png b/assets/images/flarum-e49af2f0db6f9f09d2cdffb0906b4d72.png new file mode 100644 index 0000000000..65ffc338d3 Binary files /dev/null and b/assets/images/flarum-e49af2f0db6f9f09d2cdffb0906b4d72.png differ diff --git a/assets/images/flatifycss-5ceb8ade9fcc3ee7c0eb50757f19f0af.png b/assets/images/flatifycss-5ceb8ade9fcc3ee7c0eb50757f19f0af.png new file mode 100644 index 0000000000..a66d2c48ba Binary files /dev/null and b/assets/images/flatifycss-5ceb8ade9fcc3ee7c0eb50757f19f0af.png differ diff --git a/assets/images/flexit-d2e9d40f620bf5e3964a866e97195771.png b/assets/images/flexit-d2e9d40f620bf5e3964a866e97195771.png new file mode 100644 index 0000000000..4f6b1f2629 Binary files /dev/null and b/assets/images/flexit-d2e9d40f620bf5e3964a866e97195771.png differ diff --git a/assets/images/flipper-a94b8f31a1453c1b678b693eaf054304.png b/assets/images/flipper-a94b8f31a1453c1b678b693eaf054304.png new file mode 100644 index 0000000000..968a590367 Binary files /dev/null and b/assets/images/flipper-a94b8f31a1453c1b678b693eaf054304.png differ diff --git a/assets/images/flux-744d8458b0e39a9527fc795fc0f07515.png b/assets/images/flux-744d8458b0e39a9527fc795fc0f07515.png new file mode 100644 index 0000000000..d1105bc388 Binary files /dev/null and b/assets/images/flux-744d8458b0e39a9527fc795fc0f07515.png differ diff --git a/assets/images/foal-5d8b88ba45110336565e6b3f40beec25.png b/assets/images/foal-5d8b88ba45110336565e6b3f40beec25.png new file mode 100644 index 0000000000..362883cb83 Binary files /dev/null and b/assets/images/foal-5d8b88ba45110336565e6b3f40beec25.png differ diff --git a/assets/images/formatjs-f589f0b1fa5fddec117bcb52cbd80aed.png b/assets/images/formatjs-f589f0b1fa5fddec117bcb52cbd80aed.png new file mode 100644 index 0000000000..850bc4d415 Binary files /dev/null and b/assets/images/formatjs-f589f0b1fa5fddec117bcb52cbd80aed.png differ diff --git a/assets/images/froggit-e850adec4bcd46d5771e9894b189b0a8.png b/assets/images/froggit-e850adec4bcd46d5771e9894b189b0a8.png new file mode 100644 index 0000000000..c49f464635 Binary files /dev/null and b/assets/images/froggit-e850adec4bcd46d5771e9894b189b0a8.png differ diff --git a/assets/images/fullstackchronicles-e178c420cede1c9312a6d213cef43b92.png b/assets/images/fullstackchronicles-e178c420cede1c9312a6d213cef43b92.png new file mode 100644 index 0000000000..ceb830ff7e Binary files /dev/null and b/assets/images/fullstackchronicles-e178c420cede1c9312a6d213cef43b92.png differ diff --git a/assets/images/geekyweb-7fdcff51f644d364fa00d598aad94c51.png b/assets/images/geekyweb-7fdcff51f644d364fa00d598aad94c51.png new file mode 100644 index 0000000000..283bdf4a22 Binary files /dev/null and b/assets/images/geekyweb-7fdcff51f644d364fa00d598aad94c51.png differ diff --git a/assets/images/getorca.org-dark-5bc61d5b9f9ff89e7a9408d5efb8ceb7.png b/assets/images/getorca.org-dark-5bc61d5b9f9ff89e7a9408d5efb8ceb7.png new file mode 100644 index 0000000000..49ea9647bc Binary files /dev/null and b/assets/images/getorca.org-dark-5bc61d5b9f9ff89e7a9408d5efb8ceb7.png differ diff --git a/assets/images/ghostly-ffe6ec76a4189e682d81decb7627cdc1.png b/assets/images/ghostly-ffe6ec76a4189e682d81decb7627cdc1.png new file mode 100644 index 0000000000..74f4662dec Binary files /dev/null and b/assets/images/ghostly-ffe6ec76a4189e682d81decb7627cdc1.png differ diff --git a/assets/images/gladys-assistant-244b5293677e66e4c5de9c725640e4ea.png b/assets/images/gladys-assistant-244b5293677e66e4c5de9c725640e4ea.png new file mode 100644 index 0000000000..10a03faf2c Binary files /dev/null and b/assets/images/gladys-assistant-244b5293677e66e4c5de9c725640e4ea.png differ diff --git a/assets/images/gotenberg-6764f133f36603528dc73e1e47841d7a.png b/assets/images/gotenberg-6764f133f36603528dc73e1e47841d7a.png new file mode 100644 index 0000000000..1b8b9f3bff Binary files /dev/null and b/assets/images/gotenberg-6764f133f36603528dc73e1e47841d7a.png differ diff --git a/assets/images/gtfs-to-html-16d770dd8f73a30cfda7b127440f0023.png b/assets/images/gtfs-to-html-16d770dd8f73a30cfda7b127440f0023.png new file mode 100644 index 0000000000..7861a2da14 Binary files /dev/null and b/assets/images/gtfs-to-html-16d770dd8f73a30cfda7b127440f0023.png differ diff --git a/assets/images/gulp-0b294d1ba9747b6b03ac35f0b6c9e82e.png b/assets/images/gulp-0b294d1ba9747b6b03ac35f0b6c9e82e.png new file mode 100644 index 0000000000..5a98bf95ba Binary files /dev/null and b/assets/images/gulp-0b294d1ba9747b6b03ac35f0b6c9e82e.png differ diff --git a/assets/images/gulp-e5414077cf70a0d7dccf21b8ba99f930.png b/assets/images/gulp-e5414077cf70a0d7dccf21b8ba99f930.png new file mode 100644 index 0000000000..a6dbfd6fdc Binary files /dev/null and b/assets/images/gulp-e5414077cf70a0d7dccf21b8ba99f930.png differ diff --git a/assets/images/haochen-f1754b3004cb222f39cf74fa3838d2db.png b/assets/images/haochen-f1754b3004cb222f39cf74fa3838d2db.png new file mode 100644 index 0000000000..4042a6dc14 Binary files /dev/null and b/assets/images/haochen-f1754b3004cb222f39cf74fa3838d2db.png differ diff --git a/assets/images/hashnode-ad8d0f722129e8ccb118afb3273f129c.png b/assets/images/hashnode-ad8d0f722129e8ccb118afb3273f129c.png new file mode 100644 index 0000000000..64fe69f5e8 Binary files /dev/null and b/assets/images/hashnode-ad8d0f722129e8ccb118afb3273f129c.png differ diff --git a/assets/images/hasura-8db3b5011aa771598f1709cecff57d15.png b/assets/images/hasura-8db3b5011aa771598f1709cecff57d15.png new file mode 100644 index 0000000000..1e70106d42 Binary files /dev/null and b/assets/images/hasura-8db3b5011aa771598f1709cecff57d15.png differ diff --git a/assets/images/hasura-db25f3cf2fc7c618b39e78b8edfc24d8.png b/assets/images/hasura-db25f3cf2fc7c618b39e78b8edfc24d8.png new file mode 100644 index 0000000000..196e8d5cc2 Binary files /dev/null and b/assets/images/hasura-db25f3cf2fc7c618b39e78b8edfc24d8.png differ diff --git a/assets/images/hcaptcha-dbd3c526c80bc8518ee9f0eadac71355.png b/assets/images/hcaptcha-dbd3c526c80bc8518ee9f0eadac71355.png new file mode 100644 index 0000000000..1e702af6d3 Binary files /dev/null and b/assets/images/hcaptcha-dbd3c526c80bc8518ee9f0eadac71355.png differ diff --git a/assets/images/hector-ramos-df4b4600bf3a9c706bf91d5bfa9a4e9d.jpg b/assets/images/hector-ramos-df4b4600bf3a9c706bf91d5bfa9a4e9d.jpg new file mode 100644 index 0000000000..f60cd3f391 Binary files /dev/null and b/assets/images/hector-ramos-df4b4600bf3a9c706bf91d5bfa9a4e9d.jpg differ diff --git a/assets/images/hermes-f0fdbe93345e929e1c3f0ecee070bc03.png b/assets/images/hermes-f0fdbe93345e929e1c3f0ecee070bc03.png new file mode 100644 index 0000000000..0cf8e8104d Binary files /dev/null and b/assets/images/hermes-f0fdbe93345e929e1c3f0ecee070bc03.png differ diff --git a/assets/images/home-assistant-efeeea05a876b615f4e90185d3a4982c.png b/assets/images/home-assistant-efeeea05a876b615f4e90185d3a4982c.png new file mode 100644 index 0000000000..8fb5a4c152 Binary files /dev/null and b/assets/images/home-assistant-efeeea05a876b615f4e90185d3a4982c.png differ diff --git a/assets/images/httpin-5d90ac166b4df77b0330ca1a903d5802.png b/assets/images/httpin-5d90ac166b4df77b0330ca1a903d5802.png new file mode 100644 index 0000000000..97cc4c84e2 Binary files /dev/null and b/assets/images/httpin-5d90ac166b4df77b0330ca1a903d5802.png differ diff --git a/assets/images/iammassoud-4a7ec5ba9dc1051b798b44b82a64dd48.png b/assets/images/iammassoud-4a7ec5ba9dc1051b798b44b82a64dd48.png new file mode 100644 index 0000000000..e31b3126ed Binary files /dev/null and b/assets/images/iammassoud-4a7ec5ba9dc1051b798b44b82a64dd48.png differ diff --git a/assets/images/icodex-a20601149b0dfcc8bd5dfb8028971b87.png b/assets/images/icodex-a20601149b0dfcc8bd5dfb8028971b87.png new file mode 100644 index 0000000000..1e51f644df Binary files /dev/null and b/assets/images/icodex-a20601149b0dfcc8bd5dfb8028971b87.png differ diff --git a/assets/images/idb-cdb19c085d71bec2e6531d707fe580b5.png b/assets/images/idb-cdb19c085d71bec2e6531d707fe580b5.png new file mode 100644 index 0000000000..a782088b19 Binary files /dev/null and b/assets/images/idb-cdb19c085d71bec2e6531d707fe580b5.png differ diff --git a/assets/images/image_cropped-2744c01b1fc0b451dbdb65a1d568fbff.png b/assets/images/image_cropped-2744c01b1fc0b451dbdb65a1d568fbff.png new file mode 100644 index 0000000000..b1d0a9c947 Binary files /dev/null and b/assets/images/image_cropped-2744c01b1fc0b451dbdb65a1d568fbff.png differ diff --git a/assets/images/indent-a94ecee4c569fe38b80f8e3de28bf868.png b/assets/images/indent-a94ecee4c569fe38b80f8e3de28bf868.png new file mode 100644 index 0000000000..498a257a9b Binary files /dev/null and b/assets/images/indent-a94ecee4c569fe38b80f8e3de28bf868.png differ diff --git a/assets/images/index-analytics-f9c27da3900de6206e949736b1cd8101.png b/assets/images/index-analytics-f9c27da3900de6206e949736b1cd8101.png new file mode 100644 index 0000000000..63837e3bfe Binary files /dev/null and b/assets/images/index-analytics-f9c27da3900de6206e949736b1cd8101.png differ diff --git a/assets/images/index-overview-ca216346e6eee6881443644b6d7d8fe8.png b/assets/images/index-overview-ca216346e6eee6881443644b6d7d8fe8.png new file mode 100644 index 0000000000..cf7c151e05 Binary files /dev/null and b/assets/images/index-overview-ca216346e6eee6881443644b6d7d8fe8.png differ diff --git a/assets/images/intelagent-0ec267dfc4d2a943fe0079fbb913b049.png b/assets/images/intelagent-0ec267dfc4d2a943fe0079fbb913b049.png new file mode 100644 index 0000000000..7fd2d2785d Binary files /dev/null and b/assets/images/intelagent-0ec267dfc4d2a943fe0079fbb913b049.png differ diff --git a/assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png b/assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png new file mode 100644 index 0000000000..eab6e02f55 Binary files /dev/null and b/assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png differ diff --git a/assets/images/ionic-dc7a3bc3af18da3d488ac73e19586295.png b/assets/images/ionic-dc7a3bc3af18da3d488ac73e19586295.png new file mode 100644 index 0000000000..6f5209588c Binary files /dev/null and b/assets/images/ionic-dc7a3bc3af18da3d488ac73e19586295.png differ diff --git a/assets/images/ionic-ec7bc51600dcf36ba98f866b86408448.png b/assets/images/ionic-ec7bc51600dcf36ba98f866b86408448.png new file mode 100644 index 0000000000..946e0657ad Binary files /dev/null and b/assets/images/ionic-ec7bc51600dcf36ba98f866b86408448.png differ diff --git a/assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png b/assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png new file mode 100644 index 0000000000..b449ecfc9e Binary files /dev/null and b/assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png differ diff --git a/assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png b/assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png new file mode 100644 index 0000000000..2b0e66ff80 Binary files /dev/null and b/assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png differ diff --git a/assets/images/iota-e93cc26d8bf834f81e425ed2e6536a00.png b/assets/images/iota-e93cc26d8bf834f81e425ed2e6536a00.png new file mode 100644 index 0000000000..db52d1ec3f Binary files /dev/null and b/assets/images/iota-e93cc26d8bf834f81e425ed2e6536a00.png differ diff --git a/assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png b/assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png new file mode 100644 index 0000000000..ba96d018d4 Binary files /dev/null and b/assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png differ diff --git a/assets/images/iota-wiki-8d44ace54724e2e02c2c9388dca2cac9.png b/assets/images/iota-wiki-8d44ace54724e2e02c2c9388dca2cac9.png new file mode 100644 index 0000000000..8524acc59e Binary files /dev/null and b/assets/images/iota-wiki-8d44ace54724e2e02c2c9388dca2cac9.png differ diff --git a/assets/images/jest-59f159eb97ecd87655cf47ec5cc00d47.png b/assets/images/jest-59f159eb97ecd87655cf47ec5cc00d47.png new file mode 100644 index 0000000000..bcb903a7fb Binary files /dev/null and b/assets/images/jest-59f159eb97ecd87655cf47ec5cc00d47.png differ diff --git a/assets/images/jest-605c882a85ed412427cf1eda363186a0.png b/assets/images/jest-605c882a85ed412427cf1eda363186a0.png new file mode 100644 index 0000000000..e7542227d9 Binary files /dev/null and b/assets/images/jest-605c882a85ed412427cf1eda363186a0.png differ diff --git a/assets/images/jest-screenshot-fa8ba3dd1b0ebbf923ed56274f0e4f5e.png b/assets/images/jest-screenshot-fa8ba3dd1b0ebbf923ed56274f0e4f5e.png new file mode 100644 index 0000000000..bccdca273a Binary files /dev/null and b/assets/images/jest-screenshot-fa8ba3dd1b0ebbf923ed56274f0e4f5e.png differ diff --git a/assets/images/joelpo-93d70c6ca3f0d7d96340ae75262fc096.png b/assets/images/joelpo-93d70c6ca3f0d7d96340ae75262fc096.png new file mode 100644 index 0000000000..7c72080fd0 Binary files /dev/null and b/assets/images/joelpo-93d70c6ca3f0d7d96340ae75262fc096.png differ diff --git a/assets/images/johnnyreilly-0664c0055f08ba409bc719b000dfa915.png b/assets/images/johnnyreilly-0664c0055f08ba409bc719b000dfa915.png new file mode 100644 index 0000000000..8a7b164352 Binary files /dev/null and b/assets/images/johnnyreilly-0664c0055f08ba409bc719b000dfa915.png differ diff --git a/assets/images/juffalow-cad9113f0061e751aa02da8d9f24bac6.png b/assets/images/juffalow-cad9113f0061e751aa02da8d9f24bac6.png new file mode 100644 index 0000000000..a616edcc08 Binary files /dev/null and b/assets/images/juffalow-cad9113f0061e751aa02da8d9f24bac6.png differ diff --git a/assets/images/junjie-404e8e8d7a44d260776df8cecb3122d3.png b/assets/images/junjie-404e8e8d7a44d260776df8cecb3122d3.png new file mode 100644 index 0000000000..a4cd5abdfa Binary files /dev/null and b/assets/images/junjie-404e8e8d7a44d260776df8cecb3122d3.png differ diff --git a/assets/images/k3ai-5fcdd85b6c69625d8ea4e8a8c46adad3.png b/assets/images/k3ai-5fcdd85b6c69625d8ea4e8a8c46adad3.png new file mode 100644 index 0000000000..a1a997ffec Binary files /dev/null and b/assets/images/k3ai-5fcdd85b6c69625d8ea4e8a8c46adad3.png differ diff --git a/assets/images/katex-54f4eb61a62b5f7c6f38c229aa150a7e.png b/assets/images/katex-54f4eb61a62b5f7c6f38c229aa150a7e.png new file mode 100644 index 0000000000..4e5658d7c8 Binary files /dev/null and b/assets/images/katex-54f4eb61a62b5f7c6f38c229aa150a7e.png differ diff --git a/assets/images/kaustubhk24-fea60db164f855abcf7470e73799f009.png b/assets/images/kaustubhk24-fea60db164f855abcf7470e73799f009.png new file mode 100644 index 0000000000..070fc5d409 Binary files /dev/null and b/assets/images/kaustubhk24-fea60db164f855abcf7470e73799f009.png differ diff --git a/assets/images/khyron_realm-de7e73a3b857c989fa56b1b16aedb84a.png b/assets/images/khyron_realm-de7e73a3b857c989fa56b1b16aedb84a.png new file mode 100644 index 0000000000..110e8a77e7 Binary files /dev/null and b/assets/images/khyron_realm-de7e73a3b857c989fa56b1b16aedb84a.png differ diff --git a/assets/images/kosko-32cdde7ba1a4b0f10433fc3c0bc10516.png b/assets/images/kosko-32cdde7ba1a4b0f10433fc3c0bc10516.png new file mode 100644 index 0000000000..2196b54a3a Binary files /dev/null and b/assets/images/kosko-32cdde7ba1a4b0f10433fc3c0bc10516.png differ diff --git a/assets/images/kotest-bc9727b00448d60b277f7fa624b3e861.png b/assets/images/kotest-bc9727b00448d60b277f7fa624b3e861.png new file mode 100644 index 0000000000..2951caa20a Binary files /dev/null and b/assets/images/kotest-bc9727b00448d60b277f7fa624b3e861.png differ diff --git a/assets/images/kube-green-64534cc4c6e0e95ac80ad29bcc3f508a.png b/assets/images/kube-green-64534cc4c6e0e95ac80ad29bcc3f508a.png new file mode 100644 index 0000000000..e6d353cfbf Binary files /dev/null and b/assets/images/kube-green-64534cc4c6e0e95ac80ad29bcc3f508a.png differ diff --git a/assets/images/kubevela-c67ef3b5e22525cae9381371098c6de8.png b/assets/images/kubevela-c67ef3b5e22525cae9381371098c6de8.png new file mode 100644 index 0000000000..c88d362924 Binary files /dev/null and b/assets/images/kubevela-c67ef3b5e22525cae9381371098c6de8.png differ diff --git a/assets/images/kuizuo-d392df45978747b5421d32fcfae07f1e.png b/assets/images/kuizuo-d392df45978747b5421d32fcfae07f1e.png new file mode 100644 index 0000000000..bc37efdc13 Binary files /dev/null and b/assets/images/kuizuo-d392df45978747b5421d32fcfae07f1e.png differ diff --git a/assets/images/kwatch-cbaf4edefad9336c8cbf31fd98caffd3.png b/assets/images/kwatch-cbaf4edefad9336c8cbf31fd98caffd3.png new file mode 100644 index 0000000000..568683d276 Binary files /dev/null and b/assets/images/kwatch-cbaf4edefad9336c8cbf31fd98caffd3.png differ diff --git a/assets/images/labviewbook-ffa00735774d6d6f4645b60169c5f138.png b/assets/images/labviewbook-ffa00735774d6d6f4645b60169c5f138.png new file mode 100644 index 0000000000..6769a9eb57 Binary files /dev/null and b/assets/images/labviewbook-ffa00735774d6d6f4645b60169c5f138.png differ diff --git a/assets/images/lacework-672771c767674a3f3db7acd20145df36.png b/assets/images/lacework-672771c767674a3f3db7acd20145df36.png new file mode 100644 index 0000000000..1938bf606c Binary files /dev/null and b/assets/images/lacework-672771c767674a3f3db7acd20145df36.png differ diff --git a/assets/images/leedom-33513c46bedd2076e9be19b0f287928f.png b/assets/images/leedom-33513c46bedd2076e9be19b0f287928f.png new file mode 100644 index 0000000000..a443a57a52 Binary files /dev/null and b/assets/images/leedom-33513c46bedd2076e9be19b0f287928f.png differ diff --git a/assets/images/leon-b83894bcf1018b73c6e62610c522c9f8.png b/assets/images/leon-b83894bcf1018b73c6e62610c522c9f8.png new file mode 100644 index 0000000000..2bdd8b6ce7 Binary files /dev/null and b/assets/images/leon-b83894bcf1018b73c6e62610c522c9f8.png differ diff --git a/assets/images/lerna-5bc9bfd774d3e319635a279bf5b325c3.png b/assets/images/lerna-5bc9bfd774d3e319635a279bf5b325c3.png new file mode 100644 index 0000000000..263d66f043 Binary files /dev/null and b/assets/images/lerna-5bc9bfd774d3e319635a279bf5b325c3.png differ diff --git a/assets/images/liqvid-e32b9be036c56e76edc297a89a11c630.png b/assets/images/liqvid-e32b9be036c56e76edc297a89a11c630.png new file mode 100644 index 0000000000..54e37c13a3 Binary files /dev/null and b/assets/images/liqvid-e32b9be036c56e76edc297a89a11c630.png differ diff --git a/assets/images/livekit-215969ddf351bd1592cf47f6611a31ed.png b/assets/images/livekit-215969ddf351bd1592cf47f6611a31ed.png new file mode 100644 index 0000000000..cbbb49e1f4 Binary files /dev/null and b/assets/images/livekit-215969ddf351bd1592cf47f6611a31ed.png differ diff --git a/assets/images/local-image-05286ebd44ab198d038adbeee9544858.png b/assets/images/local-image-05286ebd44ab198d038adbeee9544858.png new file mode 100644 index 0000000000..0b1e98a2f0 Binary files /dev/null and b/assets/images/local-image-05286ebd44ab198d038adbeee9544858.png differ diff --git a/assets/images/localeDropdown-f0d995e751e7656a1b0dbbc1134e49c2.png b/assets/images/localeDropdown-f0d995e751e7656a1b0dbbc1134e49c2.png deleted file mode 100644 index e257edc1f9..0000000000 Binary files a/assets/images/localeDropdown-f0d995e751e7656a1b0dbbc1134e49c2.png and /dev/null differ diff --git a/assets/images/lux-algo-d89b9a684c5c034047c596b85f5131bd.png b/assets/images/lux-algo-d89b9a684c5c034047c596b85f5131bd.png new file mode 100644 index 0000000000..aac98d9241 Binary files /dev/null and b/assets/images/lux-algo-d89b9a684c5c034047c596b85f5131bd.png differ diff --git a/assets/images/mailgo-0d4b6aa86b0e0d555ef53804bd3c8fa5.png b/assets/images/mailgo-0d4b6aa86b0e0d555ef53804bd3c8fa5.png new file mode 100644 index 0000000000..f43069fef9 Binary files /dev/null and b/assets/images/mailgo-0d4b6aa86b0e0d555ef53804bd3c8fa5.png differ diff --git a/assets/images/mapillaryjs-3d63fbde322165042c24040240a8f296.png b/assets/images/mapillaryjs-3d63fbde322165042c24040240a8f296.png new file mode 100644 index 0000000000..e367eeea3f Binary files /dev/null and b/assets/images/mapillaryjs-3d63fbde322165042c24040240a8f296.png differ diff --git a/assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png b/assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png new file mode 100644 index 0000000000..327c791f78 Binary files /dev/null and b/assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png differ diff --git a/assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png b/assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png new file mode 100644 index 0000000000..f209996f6b Binary files /dev/null and b/assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png differ diff --git a/assets/images/mediamachine-d4328976c3b954f620a1c4c646348097.png b/assets/images/mediamachine-d4328976c3b954f620a1c4c646348097.png new file mode 100644 index 0000000000..00717f4153 Binary files /dev/null and b/assets/images/mediamachine-d4328976c3b954f620a1c4c646348097.png differ diff --git a/assets/images/meli-e3a3ea878c4690c02c4295d17650989f.png b/assets/images/meli-e3a3ea878c4690c02c4295d17650989f.png new file mode 100644 index 0000000000..53f085b0a8 Binary files /dev/null and b/assets/images/meli-e3a3ea878c4690c02c4295d17650989f.png differ diff --git a/assets/images/memgraph-17f35d73fce2405684a0472c3d673b8c.png b/assets/images/memgraph-17f35d73fce2405684a0472c3d673b8c.png new file mode 100644 index 0000000000..e9e5a08346 Binary files /dev/null and b/assets/images/memgraph-17f35d73fce2405684a0472c3d673b8c.png differ diff --git a/assets/images/meoo-17ae368cb5d228f710e7b90712b8ee1c.png b/assets/images/meoo-17ae368cb5d228f710e7b90712b8ee1c.png new file mode 100644 index 0000000000..5274319117 Binary files /dev/null and b/assets/images/meoo-17ae368cb5d228f710e7b90712b8ee1c.png differ diff --git a/assets/images/metalyoung-fa584ba7483e1f29df46b5586c533af3.png b/assets/images/metalyoung-fa584ba7483e1f29df46b5586c533af3.png new file mode 100644 index 0000000000..da8445857c Binary files /dev/null and b/assets/images/metalyoung-fa584ba7483e1f29df46b5586c533af3.png differ diff --git a/assets/images/metro-c54c07dbba72af28ee8812e952690bf6.png b/assets/images/metro-c54c07dbba72af28ee8812e952690bf6.png new file mode 100644 index 0000000000..76d996096d Binary files /dev/null and b/assets/images/metro-c54c07dbba72af28ee8812e952690bf6.png differ diff --git a/assets/images/mia-platform-d8ea57c0a8fce0f336c9a9a4aafbd4e5.png b/assets/images/mia-platform-d8ea57c0a8fce0f336c9a9a4aafbd4e5.png new file mode 100644 index 0000000000..3279f412e5 Binary files /dev/null and b/assets/images/mia-platform-d8ea57c0a8fce0f336c9a9a4aafbd4e5.png differ diff --git a/assets/images/mikro-orm-c53a351d3382bbd09e107f7d43e5d503.png b/assets/images/mikro-orm-c53a351d3382bbd09e107f7d43e5d503.png new file mode 100644 index 0000000000..8968ea968c Binary files /dev/null and b/assets/images/mikro-orm-c53a351d3382bbd09e107f7d43e5d503.png differ diff --git a/assets/images/mintmetrics-11234d7260758b0a34b41ca89f6daaaa.png b/assets/images/mintmetrics-11234d7260758b0a34b41ca89f6daaaa.png new file mode 100644 index 0000000000..33f7370806 Binary files /dev/null and b/assets/images/mintmetrics-11234d7260758b0a34b41ca89f6daaaa.png differ diff --git a/assets/images/mixcore-4b5f61859375be073e50f8b4d443668d.png b/assets/images/mixcore-4b5f61859375be073e50f8b4d443668d.png new file mode 100644 index 0000000000..f18eaa7981 Binary files /dev/null and b/assets/images/mixcore-4b5f61859375be073e50f8b4d443668d.png differ diff --git a/assets/images/mojaglobal-d4dffa5657f4e3a36d758b24cbc8715c.png b/assets/images/mojaglobal-d4dffa5657f4e3a36d758b24cbc8715c.png new file mode 100644 index 0000000000..724038c7d6 Binary files /dev/null and b/assets/images/mojaglobal-d4dffa5657f4e3a36d758b24cbc8715c.png differ diff --git a/assets/images/molecule-home-1a3ed72ca203cb5ce3252517ae391b83.png b/assets/images/molecule-home-1a3ed72ca203cb5ce3252517ae391b83.png new file mode 100644 index 0000000000..e5aaeaf4a2 Binary files /dev/null and b/assets/images/molecule-home-1a3ed72ca203cb5ce3252517ae391b83.png differ diff --git a/assets/images/motion-layout-f3dd8784cef14d1228ece27d48dbff93.png b/assets/images/motion-layout-f3dd8784cef14d1228ece27d48dbff93.png new file mode 100644 index 0000000000..fbcdbf626b Binary files /dev/null and b/assets/images/motion-layout-f3dd8784cef14d1228ece27d48dbff93.png differ diff --git a/assets/images/nanos-world-848ea262f7d1fd4647bdb5f56010f9e6.png b/assets/images/nanos-world-848ea262f7d1fd4647bdb5f56010f9e6.png new file mode 100644 index 0000000000..734b772813 Binary files /dev/null and b/assets/images/nanos-world-848ea262f7d1fd4647bdb5f56010f9e6.png differ diff --git a/assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg b/assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg new file mode 100644 index 0000000000..4ee8ebf195 Binary files /dev/null and b/assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg differ diff --git a/assets/images/netbootxyz-a64e25a02c1b461e2359d7eef5bbd62a.png b/assets/images/netbootxyz-a64e25a02c1b461e2359d7eef5bbd62a.png new file mode 100644 index 0000000000..01c93dc929 Binary files /dev/null and b/assets/images/netbootxyz-a64e25a02c1b461e2359d7eef5bbd62a.png differ diff --git a/assets/images/netdata-ff3806c4eb51d9fcd5b81a04cfb0874c.png b/assets/images/netdata-ff3806c4eb51d9fcd5b81a04cfb0874c.png new file mode 100644 index 0000000000..eafd12ccc2 Binary files /dev/null and b/assets/images/netdata-ff3806c4eb51d9fcd5b81a04cfb0874c.png differ diff --git a/assets/images/neutronjs-e30879629a5c6f006f95f83161a9c574.png b/assets/images/neutronjs-e30879629a5c6f006f95f83161a9c574.png new file mode 100644 index 0000000000..d9700947a3 Binary files /dev/null and b/assets/images/neutronjs-e30879629a5c6f006f95f83161a9c574.png differ diff --git a/assets/images/nextauthjs-9a91a904661eb9fb0ff9479eb0a50bdc.png b/assets/images/nextauthjs-9a91a904661eb9fb0ff9479eb0a50bdc.png new file mode 100644 index 0000000000..470fe3513d Binary files /dev/null and b/assets/images/nextauthjs-9a91a904661eb9fb0ff9479eb0a50bdc.png differ diff --git a/assets/images/nhost-18c116561bebd3b1c35d31f4e04f3819.png b/assets/images/nhost-18c116561bebd3b1c35d31f4e04f3819.png new file mode 100644 index 0000000000..243692c12d Binary files /dev/null and b/assets/images/nhost-18c116561bebd3b1c35d31f4e04f3819.png differ diff --git a/assets/images/nocalhost-f352700eb06b7cc087f54d6b18ec9bac.png b/assets/images/nocalhost-f352700eb06b7cc087f54d6b18ec9bac.png new file mode 100644 index 0000000000..2c254b3ad0 Binary files /dev/null and b/assets/images/nocalhost-f352700eb06b7cc087f54d6b18ec9bac.png differ diff --git a/assets/images/nodify-2d94c3d6844c5ffe3d7693740cc36476.png b/assets/images/nodify-2d94c3d6844c5ffe3d7693740cc36476.png new file mode 100644 index 0000000000..32f9a65ddf Binary files /dev/null and b/assets/images/nodify-2d94c3d6844c5ffe3d7693740cc36476.png differ diff --git a/assets/images/novu-docs-795709b516fe6fa1e7bf0d7fde9f4532.png b/assets/images/novu-docs-795709b516fe6fa1e7bf0d7fde9f4532.png new file mode 100644 index 0000000000..adefc41810 Binary files /dev/null and b/assets/images/novu-docs-795709b516fe6fa1e7bf0d7fde9f4532.png differ diff --git a/assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png b/assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png new file mode 100644 index 0000000000..1ab76046ff Binary files /dev/null and b/assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png differ diff --git a/assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png b/assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png new file mode 100644 index 0000000000..2b8589afc8 Binary files /dev/null and b/assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png differ diff --git a/assets/images/orbitjs-c4d020eabba799d2274914cafdd87911.png b/assets/images/orbitjs-c4d020eabba799d2274914cafdd87911.png new file mode 100644 index 0000000000..442c5cff26 Binary files /dev/null and b/assets/images/orbitjs-c4d020eabba799d2274914cafdd87911.png differ diff --git a/assets/images/ory-29e792b8488428b75de2a2bdeb5f5be1.png b/assets/images/ory-29e792b8488428b75de2a2bdeb5f5be1.png new file mode 100644 index 0000000000..c3264f8d64 Binary files /dev/null and b/assets/images/ory-29e792b8488428b75de2a2bdeb5f5be1.png differ diff --git a/assets/images/oss_logo-25c7e8934a28d0f23722c77adb6e7da4.png b/assets/images/oss_logo-25c7e8934a28d0f23722c77adb6e7da4.png new file mode 100644 index 0000000000..81923fc562 Binary files /dev/null and b/assets/images/oss_logo-25c7e8934a28d0f23722c77adb6e7da4.png differ diff --git a/assets/images/ossinsight-27fdf73f649e5c44d0d655f901ceb4b4.png b/assets/images/ossinsight-27fdf73f649e5c44d0d655f901ceb4b4.png new file mode 100644 index 0000000000..63880f1c3d Binary files /dev/null and b/assets/images/ossinsight-27fdf73f649e5c44d0d655f901ceb4b4.png differ diff --git a/assets/images/outerbounds-22c08633fc68440a98a7bdd743e3ac3c.png b/assets/images/outerbounds-22c08633fc68440a98a7bdd743e3ac3c.png new file mode 100644 index 0000000000..094f7e913a Binary files /dev/null and b/assets/images/outerbounds-22c08633fc68440a98a7bdd743e3ac3c.png differ diff --git a/assets/images/outerbounds-7646b147b11520f295267f3637fa7a3b.png b/assets/images/outerbounds-7646b147b11520f295267f3637fa7a3b.png new file mode 100644 index 0000000000..13ef038051 Binary files /dev/null and b/assets/images/outerbounds-7646b147b11520f295267f3637fa7a3b.png differ diff --git a/assets/images/oxidizer-132ca8df52c58ff8e53721925a1ac6e3.png b/assets/images/oxidizer-132ca8df52c58ff8e53721925a1ac6e3.png new file mode 100644 index 0000000000..6c1e0471a4 Binary files /dev/null and b/assets/images/oxidizer-132ca8df52c58ff8e53721925a1ac6e3.png differ diff --git a/assets/images/patrikmasiar-1465ad3dbccfbf049f39a00f1f8d7d35.png b/assets/images/patrikmasiar-1465ad3dbccfbf049f39a00f1f8d7d35.png new file mode 100644 index 0000000000..d17c1df89f Binary files /dev/null and b/assets/images/patrikmasiar-1465ad3dbccfbf049f39a00f1f8d7d35.png differ diff --git a/assets/images/paubox-13ff68aa3f19aa44fbbb9a9640ac87e0.png b/assets/images/paubox-13ff68aa3f19aa44fbbb9a9640ac87e0.png new file mode 100644 index 0000000000..2af9a13a19 Binary files /dev/null and b/assets/images/paubox-13ff68aa3f19aa44fbbb9a9640ac87e0.png differ diff --git a/assets/images/pcapplusplus-4304373194f8bf79cd755c01711de871.png b/assets/images/pcapplusplus-4304373194f8bf79cd755c01711de871.png new file mode 100644 index 0000000000..818020ecd5 Binary files /dev/null and b/assets/images/pcapplusplus-4304373194f8bf79cd755c01711de871.png differ diff --git a/assets/images/pcc-archive-eb6db480e8bd657778af020445d01fed.png b/assets/images/pcc-archive-eb6db480e8bd657778af020445d01fed.png new file mode 100644 index 0000000000..adb50feb73 Binary files /dev/null and b/assets/images/pcc-archive-eb6db480e8bd657778af020445d01fed.png differ diff --git a/assets/images/pdfme-b768a03502951ee8d36042854f9b1efa.png b/assets/images/pdfme-b768a03502951ee8d36042854f9b1efa.png new file mode 100644 index 0000000000..e273ad914d Binary files /dev/null and b/assets/images/pdfme-b768a03502951ee8d36042854f9b1efa.png differ diff --git a/assets/images/pearl-ui-b357477384f3a1bb5a5509d3af50cfb6.png b/assets/images/pearl-ui-b357477384f3a1bb5a5509d3af50cfb6.png new file mode 100644 index 0000000000..aa9a495fbf Binary files /dev/null and b/assets/images/pearl-ui-b357477384f3a1bb5a5509d3af50cfb6.png differ diff --git a/assets/images/peradaban-2dae938f435121541b5cfb33a0c4e624.png b/assets/images/peradaban-2dae938f435121541b5cfb33a0c4e624.png new file mode 100644 index 0000000000..1792fa251a Binary files /dev/null and b/assets/images/peradaban-2dae938f435121541b5cfb33a0c4e624.png differ diff --git a/assets/images/pglet-faf34af6fd6173177b681349c15c0f7e.png b/assets/images/pglet-faf34af6fd6173177b681349c15c0f7e.png new file mode 100644 index 0000000000..440dae8d28 Binary files /dev/null and b/assets/images/pglet-faf34af6fd6173177b681349c15c0f7e.png differ diff --git a/assets/images/piano-analytics-1763fe333bd7fa1b8aaf66d659f73324.png b/assets/images/piano-analytics-1763fe333bd7fa1b8aaf66d659f73324.png new file mode 100644 index 0000000000..ff4ca5619b Binary files /dev/null and b/assets/images/piano-analytics-1763fe333bd7fa1b8aaf66d659f73324.png differ diff --git a/assets/images/pincman-075d0636ebf1b3dcabe153ddd8209ebf.png b/assets/images/pincman-075d0636ebf1b3dcabe153ddd8209ebf.png new file mode 100644 index 0000000000..133b8ca91f Binary files /dev/null and b/assets/images/pincman-075d0636ebf1b3dcabe153ddd8209ebf.png differ diff --git a/assets/images/pipeline-ui-e6c44ee572c91bf248060f35452c1a6c.png b/assets/images/pipeline-ui-e6c44ee572c91bf248060f35452c1a6c.png new file mode 100644 index 0000000000..68c4401973 Binary files /dev/null and b/assets/images/pipeline-ui-e6c44ee572c91bf248060f35452c1a6c.png differ diff --git a/assets/images/plausible-bba4fd4f5446758c103bd53b19139fe2.png b/assets/images/plausible-bba4fd4f5446758c103bd53b19139fe2.png new file mode 100644 index 0000000000..02d2102049 Binary files /dev/null and b/assets/images/plausible-bba4fd4f5446758c103bd53b19139fe2.png differ diff --git a/assets/images/pnpm-40ef1fb54fa919b97edd86c9474c19cc.png b/assets/images/pnpm-40ef1fb54fa919b97edd86c9474c19cc.png new file mode 100644 index 0000000000..4d19caba5e Binary files /dev/null and b/assets/images/pnpm-40ef1fb54fa919b97edd86c9474c19cc.png differ diff --git a/assets/images/postgres-ai-62eeee5eb2a6f8e0b3bacab5697cff4c.png b/assets/images/postgres-ai-62eeee5eb2a6f8e0b3bacab5697cff4c.png new file mode 100644 index 0000000000..b782caab22 Binary files /dev/null and b/assets/images/postgres-ai-62eeee5eb2a6f8e0b3bacab5697cff4c.png differ diff --git a/assets/images/power-66b891fa6ae641b7a182e0ce78bad99f.png b/assets/images/power-66b891fa6ae641b7a182e0ce78bad99f.png new file mode 100644 index 0000000000..adc36c5872 Binary files /dev/null and b/assets/images/power-66b891fa6ae641b7a182e0ce78bad99f.png differ diff --git a/assets/images/pptxgenjs-32938b5f799229da13792a58c1aafb84.png b/assets/images/pptxgenjs-32938b5f799229da13792a58c1aafb84.png new file mode 100644 index 0000000000..af998d6abb Binary files /dev/null and b/assets/images/pptxgenjs-32938b5f799229da13792a58c1aafb84.png differ diff --git a/assets/images/prefs-21ae3094b7ad541f7109f2678709c84a.png b/assets/images/prefs-21ae3094b7ad541f7109f2678709c84a.png new file mode 100644 index 0000000000..e55db9818c Binary files /dev/null and b/assets/images/prefs-21ae3094b7ad541f7109f2678709c84a.png differ diff --git a/assets/images/prettier-46853da19cfeb69c196d6e62210c9fe8.png b/assets/images/prettier-46853da19cfeb69c196d6e62210c9fe8.png new file mode 100644 index 0000000000..2309f6cf1e Binary files /dev/null and b/assets/images/prettier-46853da19cfeb69c196d6e62210c9fe8.png differ diff --git a/assets/images/prismatic-4bb2fd11d79a4b950f451a3dffa408b2.png b/assets/images/prismatic-4bb2fd11d79a4b950f451a3dffa408b2.png new file mode 100644 index 0000000000..df575e675b Binary files /dev/null and b/assets/images/prismatic-4bb2fd11d79a4b950f451a3dffa408b2.png differ diff --git a/assets/images/profilo-a3b562b26730dd478d53a93d32be87f0.png b/assets/images/profilo-a3b562b26730dd478d53a93d32be87f0.png new file mode 100644 index 0000000000..6256ee1d00 Binary files /dev/null and b/assets/images/profilo-a3b562b26730dd478d53a93d32be87f0.png differ diff --git a/assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png b/assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png new file mode 100644 index 0000000000..73061e3a85 Binary files /dev/null and b/assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png differ diff --git a/assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png b/assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png new file mode 100644 index 0000000000..48c97edaf1 Binary files /dev/null and b/assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png differ diff --git a/assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png b/assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png new file mode 100644 index 0000000000..ed5273bfce Binary files /dev/null and b/assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png differ diff --git a/assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png b/assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png new file mode 100644 index 0000000000..3546300eba Binary files /dev/null and b/assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png differ diff --git a/assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png b/assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png new file mode 100644 index 0000000000..3411447e38 Binary files /dev/null and b/assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png differ diff --git a/assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png b/assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png new file mode 100644 index 0000000000..88e297e217 Binary files /dev/null and b/assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png differ diff --git a/assets/images/pwa_install-169e763a3e99bb01e41be11c1a4af51f.gif b/assets/images/pwa_install-169e763a3e99bb01e41be11c1a4af51f.gif new file mode 100644 index 0000000000..d44c6198fa Binary files /dev/null and b/assets/images/pwa_install-169e763a3e99bb01e41be11c1a4af51f.gif differ diff --git a/assets/images/pwa_reload-6af462b35d0ed752c44ad0899559bedf.gif b/assets/images/pwa_reload-6af462b35d0ed752c44ad0899559bedf.gif new file mode 100644 index 0000000000..683a9ca55a Binary files /dev/null and b/assets/images/pwa_reload-6af462b35d0ed752c44ad0899559bedf.gif differ diff --git a/assets/images/pyre-557a96574bd9b4fbc250fba9055abbf0.png b/assets/images/pyre-557a96574bd9b4fbc250fba9055abbf0.png new file mode 100644 index 0000000000..e120a27352 Binary files /dev/null and b/assets/images/pyre-557a96574bd9b4fbc250fba9055abbf0.png differ diff --git a/assets/images/qa-board-156dfd0f786318d503da4fe6e4efb6d3.png b/assets/images/qa-board-156dfd0f786318d503da4fe6e4efb6d3.png new file mode 100644 index 0000000000..3f9f09e682 Binary files /dev/null and b/assets/images/qa-board-156dfd0f786318d503da4fe6e4efb6d3.png differ diff --git a/assets/images/quantcdn-fa9214776ce3c75ac734ce92a1d7d261.png b/assets/images/quantcdn-fa9214776ce3c75ac734ce92a1d7d261.png new file mode 100644 index 0000000000..a8e104218d Binary files /dev/null and b/assets/images/quantcdn-fa9214776ce3c75ac734ce92a1d7d261.png differ diff --git a/assets/images/quickwit-2667dc4e9b7db24094069fc38a231a53.png b/assets/images/quickwit-2667dc4e9b7db24094069fc38a231a53.png new file mode 100644 index 0000000000..c2432affb7 Binary files /dev/null and b/assets/images/quickwit-2667dc4e9b7db24094069fc38a231a53.png differ diff --git a/assets/images/quickwit-39a0d73e3a8684da7c2ed546e587f919.png b/assets/images/quickwit-39a0d73e3a8684da7c2ed546e587f919.png new file mode 100644 index 0000000000..5f7bae001a Binary files /dev/null and b/assets/images/quickwit-39a0d73e3a8684da7c2ed546e587f919.png differ diff --git a/assets/images/rainbond-72969162e27c2f6e92c4cf3b61c229bb.png b/assets/images/rainbond-72969162e27c2f6e92c4cf3b61c229bb.png new file mode 100644 index 0000000000..8465fdf80d Binary files /dev/null and b/assets/images/rainbond-72969162e27c2f6e92c4cf3b61c229bb.png differ diff --git a/assets/images/raspisuite-df5b41d040c9b81367e5a674aef5e97b.png b/assets/images/raspisuite-df5b41d040c9b81367e5a674aef5e97b.png new file mode 100644 index 0000000000..3c9385403c Binary files /dev/null and b/assets/images/raspisuite-df5b41d040c9b81367e5a674aef5e97b.png differ diff --git a/assets/images/react-chat-elements-7df4a41317c9034210d9904daffec051.png b/assets/images/react-chat-elements-7df4a41317c9034210d9904daffec051.png new file mode 100644 index 0000000000..2affcd00f4 Binary files /dev/null and b/assets/images/react-chat-elements-7df4a41317c9034210d9904daffec051.png differ diff --git a/assets/images/react-complex-tree-647440410604aceff487f74319bb1ed5.png b/assets/images/react-complex-tree-647440410604aceff487f74319bb1ed5.png new file mode 100644 index 0000000000..7e5750cc57 Binary files /dev/null and b/assets/images/react-complex-tree-647440410604aceff487f74319bb1ed5.png differ diff --git a/assets/images/react-leaflet-d24b5e7ed7955e2e90c12b3c1c01f831.png b/assets/images/react-leaflet-d24b5e7ed7955e2e90c12b3c1c01f831.png new file mode 100644 index 0000000000..6ea39f2a2a Binary files /dev/null and b/assets/images/react-leaflet-d24b5e7ed7955e2e90c12b3c1c01f831.png differ diff --git a/assets/images/react-native-0ff608d6a6df9df802441209007884ef.png b/assets/images/react-native-0ff608d6a6df9df802441209007884ef.png new file mode 100644 index 0000000000..1743cc74fe Binary files /dev/null and b/assets/images/react-native-0ff608d6a6df9df802441209007884ef.png differ diff --git a/assets/images/react-native-8ad8e938da0b07450993aa99d2faab6a.png b/assets/images/react-native-8ad8e938da0b07450993aa99d2faab6a.png new file mode 100644 index 0000000000..d903f10234 Binary files /dev/null and b/assets/images/react-native-8ad8e938da0b07450993aa99d2faab6a.png differ diff --git a/assets/images/react-native-elements-7f03216e4f2b74940c255829df5b0cb5.png b/assets/images/react-native-elements-7f03216e4f2b74940c255829df5b0cb5.png new file mode 100644 index 0000000000..9f14bbb58b Binary files /dev/null and b/assets/images/react-native-elements-7f03216e4f2b74940c255829df5b0cb5.png differ diff --git a/assets/images/react-native-ios-kit-2de2abfaeb8e439755e88659262f676a.png b/assets/images/react-native-ios-kit-2de2abfaeb8e439755e88659262f676a.png new file mode 100644 index 0000000000..6c306ae206 Binary files /dev/null and b/assets/images/react-native-ios-kit-2de2abfaeb8e439755e88659262f676a.png differ diff --git a/assets/images/react-native-reanimated-7e6c907fb7849ce0b1cbe5088ec6e7da.png b/assets/images/react-native-reanimated-7e6c907fb7849ce0b1cbe5088ec6e7da.png new file mode 100644 index 0000000000..c090953f18 Binary files /dev/null and b/assets/images/react-native-reanimated-7e6c907fb7849ce0b1cbe5088ec6e7da.png differ diff --git a/assets/images/react-native-screenshot-d5ace12ce89fe59dc14ac25859685b01.png b/assets/images/react-native-screenshot-d5ace12ce89fe59dc14ac25859685b01.png new file mode 100644 index 0000000000..1932b8dd43 Binary files /dev/null and b/assets/images/react-native-screenshot-d5ace12ce89fe59dc14ac25859685b01.png differ diff --git a/assets/images/react-native-testing-library-41dfcfd2c123284cc58559da96568366.png b/assets/images/react-native-testing-library-41dfcfd2c123284cc58559da96568366.png new file mode 100644 index 0000000000..e069eea442 Binary files /dev/null and b/assets/images/react-native-testing-library-41dfcfd2c123284cc58559da96568366.png differ diff --git a/assets/images/react-navigation-d65fb79941df2ef11ff6e15e8a79a49c.png b/assets/images/react-navigation-d65fb79941df2ef11ff6e15e8a79a49c.png new file mode 100644 index 0000000000..217b1e2340 Binary files /dev/null and b/assets/images/react-navigation-d65fb79941df2ef11ff6e15e8a79a49c.png differ diff --git a/assets/images/react-navigation-dfac2d90822bad7e092f848322b50da6.png b/assets/images/react-navigation-dfac2d90822bad7e092f848322b50da6.png new file mode 100644 index 0000000000..1c6e3998e0 Binary files /dev/null and b/assets/images/react-navigation-dfac2d90822bad7e092f848322b50da6.png differ diff --git a/assets/images/react-redux-621afc1ae6fb98889ec3d2e5b1b30386.png b/assets/images/react-redux-621afc1ae6fb98889ec3d2e5b1b30386.png new file mode 100644 index 0000000000..661b1b45c0 Binary files /dev/null and b/assets/images/react-redux-621afc1ae6fb98889ec3d2e5b1b30386.png differ diff --git a/assets/images/reactnative-496b7bf0251a82f21adfa730dec8178d.png b/assets/images/reactnative-496b7bf0251a82f21adfa730dec8178d.png new file mode 100644 index 0000000000..e4ddcc0742 Binary files /dev/null and b/assets/images/reactnative-496b7bf0251a82f21adfa730dec8178d.png differ diff --git a/assets/images/reactnative-aria-c5ffe66ddb8b0b937fa5672b17258444.png b/assets/images/reactnative-aria-c5ffe66ddb8b0b937fa5672b17258444.png new file mode 100644 index 0000000000..954b94a342 Binary files /dev/null and b/assets/images/reactnative-aria-c5ffe66ddb8b0b937fa5672b17258444.png differ diff --git a/assets/images/reactnativeboilerplate-4f4bc9381d8bcf3fd21fab2c61033693.png b/assets/images/reactnativeboilerplate-4f4bc9381d8bcf3fd21fab2c61033693.png new file mode 100644 index 0000000000..ce93a1f61f Binary files /dev/null and b/assets/images/reactnativeboilerplate-4f4bc9381d8bcf3fd21fab2c61033693.png differ diff --git a/assets/images/realtime-apps-workshop-f2c599f726604e5a45ad5dad61a056b8.png b/assets/images/realtime-apps-workshop-f2c599f726604e5a45ad5dad61a056b8.png new file mode 100644 index 0000000000..4326dbe568 Binary files /dev/null and b/assets/images/realtime-apps-workshop-f2c599f726604e5a45ad5dad61a056b8.png differ diff --git a/assets/images/red-gradient-9c21cad5fb514874a59c4d9f321017e4.png b/assets/images/red-gradient-9c21cad5fb514874a59c4d9f321017e4.png new file mode 100644 index 0000000000..f9075e416b Binary files /dev/null and b/assets/images/red-gradient-9c21cad5fb514874a59c4d9f321017e4.png differ diff --git a/assets/images/reddit-image-fetcher-c3078aeaa8dc2606f25e23140d7853c4.png b/assets/images/reddit-image-fetcher-c3078aeaa8dc2606f25e23140d7853c4.png new file mode 100644 index 0000000000..01bd1e5b67 Binary files /dev/null and b/assets/images/reddit-image-fetcher-c3078aeaa8dc2606f25e23140d7853c4.png differ diff --git a/assets/images/redis-developer-13b1fadb54b0313a8451f4b5ea28ef17.png b/assets/images/redis-developer-13b1fadb54b0313a8451f4b5ea28ef17.png new file mode 100644 index 0000000000..ee87b0d6d1 Binary files /dev/null and b/assets/images/redis-developer-13b1fadb54b0313a8451f4b5ea28ef17.png differ diff --git a/assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png b/assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png new file mode 100644 index 0000000000..b74e35197b Binary files /dev/null and b/assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png differ diff --git a/assets/images/redux-cool-191fc671da752fe4d7732b4ee07cc26d.png b/assets/images/redux-cool-191fc671da752fe4d7732b4ee07cc26d.png new file mode 100644 index 0000000000..2f7f26aefb Binary files /dev/null and b/assets/images/redux-cool-191fc671da752fe4d7732b4ee07cc26d.png differ diff --git a/assets/images/redux-de07d44cea8a2046a5d4896e362cd122.png b/assets/images/redux-de07d44cea8a2046a5d4896e362cd122.png new file mode 100644 index 0000000000..c851a9f3d2 Binary files /dev/null and b/assets/images/redux-de07d44cea8a2046a5d4896e362cd122.png differ diff --git a/assets/images/redwood-c3155187911b62428e0cc1e8b662de76.png b/assets/images/redwood-c3155187911b62428e0cc1e8b662de76.png new file mode 100644 index 0000000000..a1a2a2a1fe Binary files /dev/null and b/assets/images/redwood-c3155187911b62428e0cc1e8b662de76.png differ diff --git a/assets/images/refine-3c43b51804bfa5fb95fffacf22ea032e.png b/assets/images/refine-3c43b51804bfa5fb95fffacf22ea032e.png new file mode 100644 index 0000000000..4ce53b5490 Binary files /dev/null and b/assets/images/refine-3c43b51804bfa5fb95fffacf22ea032e.png differ diff --git a/assets/images/registry.stackql.io-18521b3de70bccbf132c9e013acc147b.png b/assets/images/registry.stackql.io-18521b3de70bccbf132c9e013acc147b.png new file mode 100644 index 0000000000..793a94a741 Binary files /dev/null and b/assets/images/registry.stackql.io-18521b3de70bccbf132c9e013acc147b.png differ diff --git a/assets/images/relay-e78bfc34d66471737d24a2c07d2afc7c.png b/assets/images/relay-e78bfc34d66471737d24a2c07d2afc7c.png new file mode 100644 index 0000000000..aade055392 Binary files /dev/null and b/assets/images/relay-e78bfc34d66471737d24a2c07d2afc7c.png differ diff --git a/assets/images/rematch-54259ce6777659338d16e722e04bc833.png b/assets/images/rematch-54259ce6777659338d16e722e04bc833.png new file mode 100644 index 0000000000..0bcab9c03f Binary files /dev/null and b/assets/images/rematch-54259ce6777659338d16e722e04bc833.png differ diff --git a/assets/images/remirror-9738e84d977f986daccff3a332b03244.png b/assets/images/remirror-9738e84d977f986daccff3a332b03244.png new file mode 100644 index 0000000000..d9fda2dd9e Binary files /dev/null and b/assets/images/remirror-9738e84d977f986daccff3a332b03244.png differ diff --git a/assets/images/remotion-0918d7c0bcd84657c38e3569fc2ff4a7.png b/assets/images/remotion-0918d7c0bcd84657c38e3569fc2ff4a7.png new file mode 100644 index 0000000000..9785806bb0 Binary files /dev/null and b/assets/images/remotion-0918d7c0bcd84657c38e3569fc2ff4a7.png differ diff --git a/assets/images/repeaterjs-41892c33996d6ec919704baec6f61649.png b/assets/images/repeaterjs-41892c33996d6ec919704baec6f61649.png new file mode 100644 index 0000000000..6b27a7b81b Binary files /dev/null and b/assets/images/repeaterjs-41892c33996d6ec919704baec6f61649.png differ diff --git a/assets/images/replicad-23f2fcbfeab2b56235784f38c21f08bd.png b/assets/images/replicad-23f2fcbfeab2b56235784f38c21f08bd.png new file mode 100644 index 0000000000..4cfbd7e67e Binary files /dev/null and b/assets/images/replicad-23f2fcbfeab2b56235784f38c21f08bd.png differ diff --git a/assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png b/assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png new file mode 100644 index 0000000000..f7fe13660d Binary files /dev/null and b/assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png differ diff --git a/assets/images/rivalis-6e7ad63406563e1f4c34fb96a69f59c5.png b/assets/images/rivalis-6e7ad63406563e1f4c34fb96a69f59c5.png new file mode 100644 index 0000000000..f951cb558c Binary files /dev/null and b/assets/images/rivalis-6e7ad63406563e1f4c34fb96a69f59c5.png differ diff --git a/assets/images/rnrh-9c3d6208718ace8c44e0fc7f1d1bf62d.png b/assets/images/rnrh-9c3d6208718ace8c44e0fc7f1d1bf62d.png new file mode 100644 index 0000000000..1fd9891154 Binary files /dev/null and b/assets/images/rnrh-9c3d6208718ace8c44e0fc7f1d1bf62d.png differ diff --git a/assets/images/rooks-61341aa044b6c9deaac7b6655c58d1a0.png b/assets/images/rooks-61341aa044b6c9deaac7b6655c58d1a0.png new file mode 100644 index 0000000000..2bf13e42b6 Binary files /dev/null and b/assets/images/rooks-61341aa044b6c9deaac7b6655c58d1a0.png differ diff --git a/assets/images/rsocket-0f5d35731269c25f4e44e18c7bedeb9d.png b/assets/images/rsocket-0f5d35731269c25f4e44e18c7bedeb9d.png new file mode 100644 index 0000000000..5d4fc965af Binary files /dev/null and b/assets/images/rsocket-0f5d35731269c25f4e44e18c7bedeb9d.png differ diff --git a/assets/images/runiac-bf47ea65a9ea2ba58dfd5a99e6dd2eea.png b/assets/images/runiac-bf47ea65a9ea2ba58dfd5a99e6dd2eea.png new file mode 100644 index 0000000000..65e292920f Binary files /dev/null and b/assets/images/runiac-bf47ea65a9ea2ba58dfd5a99e6dd2eea.png differ diff --git a/assets/images/runlet-3496c72227777b92f951fec658d973ce.png b/assets/images/runlet-3496c72227777b92f951fec658d973ce.png new file mode 100644 index 0000000000..b5e18a71f4 Binary files /dev/null and b/assets/images/runlet-3496c72227777b92f951fec658d973ce.png differ diff --git a/assets/images/sado0823-0afdc16bb0cb84b06e118583f12608ff.png b/assets/images/sado0823-0afdc16bb0cb84b06e118583f12608ff.png new file mode 100644 index 0000000000..b4e62a2a22 Binary files /dev/null and b/assets/images/sado0823-0afdc16bb0cb84b06e118583f12608ff.png differ diff --git a/assets/images/saleor-b6fb358e4d4113c46c58cf537d392d0c.png b/assets/images/saleor-b6fb358e4d4113c46c58cf537d392d0c.png new file mode 100644 index 0000000000..982f9fe4f6 Binary files /dev/null and b/assets/images/saleor-b6fb358e4d4113c46c58cf537d392d0c.png differ diff --git a/assets/images/sap-cloud-aa7a46561ca47765dfeefbed7b5e8c4e.png b/assets/images/sap-cloud-aa7a46561ca47765dfeefbed7b5e8c4e.png new file mode 100644 index 0000000000..5160e4d022 Binary files /dev/null and b/assets/images/sap-cloud-aa7a46561ca47765dfeefbed7b5e8c4e.png differ diff --git a/assets/images/sapcloudsdk-e2712b3e22fb99796c966d43064f4a31.png b/assets/images/sapcloudsdk-e2712b3e22fb99796c966d43064f4a31.png new file mode 100644 index 0000000000..deffc7ad1b Binary files /dev/null and b/assets/images/sapcloudsdk-e2712b3e22fb99796c966d43064f4a31.png differ diff --git a/assets/images/sapphire-13f70835b2e57d3cec0b5742b123fc6a.png b/assets/images/sapphire-13f70835b2e57d3cec0b5742b123fc6a.png new file mode 100644 index 0000000000..5b1930d41e Binary files /dev/null and b/assets/images/sapphire-13f70835b2e57d3cec0b5742b123fc6a.png differ diff --git a/assets/images/sass-fairy-0ef83bdb7cd5fcd992272f4fa4eaab96.png b/assets/images/sass-fairy-0ef83bdb7cd5fcd992272f4fa4eaab96.png new file mode 100644 index 0000000000..22ada6eea8 Binary files /dev/null and b/assets/images/sass-fairy-0ef83bdb7cd5fcd992272f4fa4eaab96.png differ diff --git a/assets/images/sciwp-42b422510e1fcb176fd90b5ff6dce921.png b/assets/images/sciwp-42b422510e1fcb176fd90b5ff6dce921.png new file mode 100644 index 0000000000..78137b29b4 Binary files /dev/null and b/assets/images/sciwp-42b422510e1fcb176fd90b5ff6dce921.png differ diff --git a/assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png b/assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png new file mode 100644 index 0000000000..af6732db8a Binary files /dev/null and b/assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png differ diff --git a/assets/images/sequence-0f77ed55c6ff3789e71720e0f9021cef.png b/assets/images/sequence-0f77ed55c6ff3789e71720e0f9021cef.png new file mode 100644 index 0000000000..b676a2450e Binary files /dev/null and b/assets/images/sequence-0f77ed55c6ff3789e71720e0f9021cef.png differ diff --git a/assets/images/seven-innovation-base-9dcd026498d069c401ad1cd5782e65ad.png b/assets/images/seven-innovation-base-9dcd026498d069c401ad1cd5782e65ad.png new file mode 100644 index 0000000000..9e5b1120a2 Binary files /dev/null and b/assets/images/seven-innovation-base-9dcd026498d069c401ad1cd5782e65ad.png differ diff --git a/assets/images/shabados-b24bc164aec49d234240983a2677bcbd.png b/assets/images/shabados-b24bc164aec49d234240983a2677bcbd.png new file mode 100644 index 0000000000..27d4074ce0 Binary files /dev/null and b/assets/images/shabados-b24bc164aec49d234240983a2677bcbd.png differ diff --git a/assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png b/assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png new file mode 100644 index 0000000000..42f4c456c6 Binary files /dev/null and b/assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png differ diff --git a/assets/images/shotstack-ee6e9c8c3835e6a7258ce9bf286050fe.png b/assets/images/shotstack-ee6e9c8c3835e6a7258ce9bf286050fe.png new file mode 100644 index 0000000000..bfda4556a8 Binary files /dev/null and b/assets/images/shotstack-ee6e9c8c3835e6a7258ce9bf286050fe.png differ diff --git a/assets/images/sicope-model-35900076ed6255f96ff4ed39be632f87.png b/assets/images/sicope-model-35900076ed6255f96ff4ed39be632f87.png new file mode 100644 index 0000000000..affe3914d7 Binary files /dev/null and b/assets/images/sicope-model-35900076ed6255f96ff4ed39be632f87.png differ diff --git a/assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg b/assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg new file mode 100644 index 0000000000..444903b728 Binary files /dev/null and b/assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg differ diff --git a/assets/images/signoz-b448527937937512001622ad21217fa7.png b/assets/images/signoz-b448527937937512001622ad21217fa7.png new file mode 100644 index 0000000000..47970b9277 Binary files /dev/null and b/assets/images/signoz-b448527937937512001622ad21217fa7.png differ diff --git a/assets/images/single-spa-e274c21435f19c8949701726e48cce43.png b/assets/images/single-spa-e274c21435f19c8949701726e48cce43.png new file mode 100644 index 0000000000..19918c5721 Binary files /dev/null and b/assets/images/single-spa-e274c21435f19c8949701726e48cce43.png differ diff --git a/assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg b/assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg new file mode 100644 index 0000000000..bb1be35ef3 --- /dev/null +++ b/assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg b/assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg new file mode 100644 index 0000000000..b16fa190be Binary files /dev/null and b/assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg differ diff --git a/assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png b/assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png new file mode 100644 index 0000000000..783bb9ba60 Binary files /dev/null and b/assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png differ diff --git a/assets/images/slorber-ec4d8481627a744baf012e1c00f93e32.png b/assets/images/slorber-ec4d8481627a744baf012e1c00f93e32.png new file mode 100644 index 0000000000..a2959a335c Binary files /dev/null and b/assets/images/slorber-ec4d8481627a744baf012e1c00f93e32.png differ diff --git a/assets/images/smart-docs-91b0d0ab64803422bb0afc8ee67bc19a.png b/assets/images/smart-docs-91b0d0ab64803422bb0afc8ee67bc19a.png new file mode 100644 index 0000000000..a8672f0826 Binary files /dev/null and b/assets/images/smart-docs-91b0d0ab64803422bb0afc8ee67bc19a.png differ diff --git a/assets/images/smartcookieweb-22333d1f3972f2e52dc778981b4cb66a.png b/assets/images/smartcookieweb-22333d1f3972f2e52dc778981b4cb66a.png new file mode 100644 index 0000000000..b1c80e3c38 Binary files /dev/null and b/assets/images/smartcookieweb-22333d1f3972f2e52dc778981b4cb66a.png differ diff --git a/assets/images/smashgg-028ab1ea8e006054c550a852565f5045.png b/assets/images/smashgg-028ab1ea8e006054c550a852565f5045.png new file mode 100644 index 0000000000..9b34191146 Binary files /dev/null and b/assets/images/smashgg-028ab1ea8e006054c550a852565f5045.png differ diff --git a/assets/images/snapchat-1f1b7e180be3c3a597c755f80b26de44.png b/assets/images/snapchat-1f1b7e180be3c3a597c755f80b26de44.png new file mode 100644 index 0000000000..b928460575 Binary files /dev/null and b/assets/images/snapchat-1f1b7e180be3c3a597c755f80b26de44.png differ diff --git a/assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png b/assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png new file mode 100644 index 0000000000..11fc5d33ec Binary files /dev/null and b/assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png differ diff --git a/assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png b/assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png new file mode 100644 index 0000000000..2acffa6931 Binary files /dev/null and b/assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png differ diff --git a/assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png b/assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png new file mode 100644 index 0000000000..1f319accdc Binary files /dev/null and b/assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png differ diff --git a/assets/images/social-card-402517ac2205718a22585e627fe1351c.png b/assets/images/social-card-402517ac2205718a22585e627fe1351c.png new file mode 100644 index 0000000000..c10ee36663 Binary files /dev/null and b/assets/images/social-card-402517ac2205718a22585e627fe1351c.png differ diff --git a/assets/images/social-card-414bbe5147ecc177bbe8d858616709c5.png b/assets/images/social-card-414bbe5147ecc177bbe8d858616709c5.png new file mode 100644 index 0000000000..b9280b0866 Binary files /dev/null and b/assets/images/social-card-414bbe5147ecc177bbe8d858616709c5.png differ diff --git a/assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png b/assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png new file mode 100644 index 0000000000..88bfbed242 Binary files /dev/null and b/assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png differ diff --git a/assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png b/assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png new file mode 100644 index 0000000000..7294d62f68 Binary files /dev/null and b/assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png differ diff --git a/assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png b/assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png new file mode 100644 index 0000000000..d19772fe3c Binary files /dev/null and b/assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png differ diff --git a/assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png b/assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png new file mode 100644 index 0000000000..5d4d489716 Binary files /dev/null and b/assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png differ diff --git a/assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png b/assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png new file mode 100644 index 0000000000..f8ca79fb1b Binary files /dev/null and b/assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png differ diff --git a/assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png b/assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png new file mode 100644 index 0000000000..72b6c681f6 Binary files /dev/null and b/assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png differ diff --git a/assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png b/assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png new file mode 100644 index 0000000000..01b4239e79 Binary files /dev/null and b/assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png differ diff --git a/assets/images/social-embed-3fe56565340aa4f51cbff3e26b6a054e.png b/assets/images/social-embed-3fe56565340aa4f51cbff3e26b6a054e.png new file mode 100644 index 0000000000..2ba88adf85 Binary files /dev/null and b/assets/images/social-embed-3fe56565340aa4f51cbff3e26b6a054e.png differ diff --git a/assets/images/sodaforsparc-28010777385591077f37694ec7eeebb8.png b/assets/images/sodaforsparc-28010777385591077f37694ec7eeebb8.png new file mode 100644 index 0000000000..0a9d57cb54 Binary files /dev/null and b/assets/images/sodaforsparc-28010777385591077f37694ec7eeebb8.png differ diff --git a/assets/images/solana-9cd1c0b40cf349f85612e9d9d25d724b.png b/assets/images/solana-9cd1c0b40cf349f85612e9d9d25d724b.png new file mode 100644 index 0000000000..ecaa75e4cb Binary files /dev/null and b/assets/images/solana-9cd1c0b40cf349f85612e9d9d25d724b.png differ diff --git a/assets/images/someengineering-a56edbd4649fa1e855c2e8417f9b6dbe.png b/assets/images/someengineering-a56edbd4649fa1e855c2e8417f9b6dbe.png new file mode 100644 index 0000000000..90f96522b3 Binary files /dev/null and b/assets/images/someengineering-a56edbd4649fa1e855c2e8417f9b6dbe.png differ diff --git a/assets/images/spicetify-c2a1450fb9fa6a71ca6de3c097edda4d.png b/assets/images/spicetify-c2a1450fb9fa6a71ca6de3c097edda4d.png new file mode 100644 index 0000000000..521e376416 Binary files /dev/null and b/assets/images/spicetify-c2a1450fb9fa6a71ca6de3c097edda4d.png differ diff --git a/assets/images/spotifyapi-net-f425a4c62750b6bf09b03cf4b77e9d3d.png b/assets/images/spotifyapi-net-f425a4c62750b6bf09b03cf4b77e9d3d.png new file mode 100644 index 0000000000..ee87aa2a4c Binary files /dev/null and b/assets/images/spotifyapi-net-f425a4c62750b6bf09b03cf4b77e9d3d.png differ diff --git a/assets/images/sqlframes_docusaurus-e018ff7f1e38d38e84e79869db992344.png b/assets/images/sqlframes_docusaurus-e018ff7f1e38d38e84e79869db992344.png new file mode 100644 index 0000000000..9b296168d5 Binary files /dev/null and b/assets/images/sqlframes_docusaurus-e018ff7f1e38d38e84e79869db992344.png differ diff --git a/assets/images/stackblitz-9793041c6a300ef757b0656aadb9df67.png b/assets/images/stackblitz-9793041c6a300ef757b0656aadb9df67.png new file mode 100644 index 0000000000..34faed73de Binary files /dev/null and b/assets/images/stackblitz-9793041c6a300ef757b0656aadb9df67.png differ diff --git a/assets/images/stackblitz-b66b6f6647fa6f0af38e9923fb2eb422.png b/assets/images/stackblitz-b66b6f6647fa6f0af38e9923fb2eb422.png new file mode 100644 index 0000000000..8195f9d330 Binary files /dev/null and b/assets/images/stackblitz-b66b6f6647fa6f0af38e9923fb2eb422.png differ diff --git a/assets/images/stackql-013249abe4d6518fc01545c9be6419ed.png b/assets/images/stackql-013249abe4d6518fc01545c9be6419ed.png new file mode 100644 index 0000000000..e248b76339 Binary files /dev/null and b/assets/images/stackql-013249abe4d6518fc01545c9be6419ed.png differ diff --git a/assets/images/star-history-72ae014f60d05445753e9f690e41d347.png b/assets/images/star-history-72ae014f60d05445753e9f690e41d347.png new file mode 100644 index 0000000000..7eadba2754 Binary files /dev/null and b/assets/images/star-history-72ae014f60d05445753e9f690e41d347.png differ diff --git a/assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png b/assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png new file mode 100644 index 0000000000..17d5951fc1 Binary files /dev/null and b/assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png differ diff --git a/assets/images/stryker-mutator-148105c0a7f5487eaf3e22c332a2d24d.png b/assets/images/stryker-mutator-148105c0a7f5487eaf3e22c332a2d24d.png new file mode 100644 index 0000000000..38e38fb314 Binary files /dev/null and b/assets/images/stryker-mutator-148105c0a7f5487eaf3e22c332a2d24d.png differ diff --git a/assets/images/stylable-a0a7f786abbf6e114a91b0084c78733d.png b/assets/images/stylable-a0a7f786abbf6e114a91b0084c78733d.png new file mode 100644 index 0000000000..156c4fdca7 Binary files /dev/null and b/assets/images/stylable-a0a7f786abbf6e114a91b0084c78733d.png differ diff --git a/assets/images/supabase-8f064f9083725077882d3ce18d61d52c.png b/assets/images/supabase-8f064f9083725077882d3ce18d61d52c.png new file mode 100644 index 0000000000..bb81ccc01c Binary files /dev/null and b/assets/images/supabase-8f064f9083725077882d3ce18d61d52c.png differ diff --git a/assets/images/svix-934c92fe3bfce3acac594b1b58b5f6d0.png b/assets/images/svix-934c92fe3bfce3acac594b1b58b5f6d0.png new file mode 100644 index 0000000000..170c6f0e4f Binary files /dev/null and b/assets/images/svix-934c92fe3bfce3acac594b1b58b5f6d0.png differ diff --git a/assets/images/sweetcode-7abd771cee7847ea1f45a6cf47ded1fe.png b/assets/images/sweetcode-7abd771cee7847ea1f45a6cf47ded1fe.png new file mode 100644 index 0000000000..d5a8bd0e7d Binary files /dev/null and b/assets/images/sweetcode-7abd771cee7847ea1f45a6cf47ded1fe.png differ diff --git a/assets/images/synergies-62b15424f661b0e0649afb3c75092703.png b/assets/images/synergies-62b15424f661b0e0649afb3c75092703.png new file mode 100644 index 0000000000..ecf2cad351 Binary files /dev/null and b/assets/images/synergies-62b15424f661b0e0649afb3c75092703.png differ diff --git a/assets/images/t-regx-a6af9559664740533c8f807213095c14.png b/assets/images/t-regx-a6af9559664740533c8f807213095c14.png new file mode 100644 index 0000000000..61a5d2e846 Binary files /dev/null and b/assets/images/t-regx-a6af9559664740533c8f807213095c14.png differ diff --git a/assets/images/talentbrick-36480459fa84bc1d9401417b357ff2ec.png b/assets/images/talentbrick-36480459fa84bc1d9401417b357ff2ec.png new file mode 100644 index 0000000000..fd200e335a Binary files /dev/null and b/assets/images/talentbrick-36480459fa84bc1d9401417b357ff2ec.png differ diff --git a/assets/images/tamalwebsite-45a6f8c87f587141910d97f1598f3cbc.png b/assets/images/tamalwebsite-45a6f8c87f587141910d97f1598f3cbc.png new file mode 100644 index 0000000000..18370efaf2 Binary files /dev/null and b/assets/images/tamalwebsite-45a6f8c87f587141910d97f1598f3cbc.png differ diff --git a/assets/images/tasit-16443c368300a6ddc8bed7db558a90ad.png b/assets/images/tasit-16443c368300a6ddc8bed7db558a90ad.png new file mode 100644 index 0000000000..ce2311c010 Binary files /dev/null and b/assets/images/tasit-16443c368300a6ddc8bed7db558a90ad.png differ diff --git a/assets/images/tauri-10c3458b9d3fd5bf464d0f9cea0842bf.png b/assets/images/tauri-10c3458b9d3fd5bf464d0f9cea0842bf.png new file mode 100644 index 0000000000..5f18116b6d Binary files /dev/null and b/assets/images/tauri-10c3458b9d3fd5bf464d0f9cea0842bf.png differ diff --git a/assets/images/tauri-5132174b86954b9f0a73225ba01ee1df.png b/assets/images/tauri-5132174b86954b9f0a73225ba01ee1df.png new file mode 100644 index 0000000000..1bbaa32faa Binary files /dev/null and b/assets/images/tauri-5132174b86954b9f0a73225ba01ee1df.png differ diff --git a/assets/images/techharvesting-bd0feb0fb9bc76242c7d548b0c970fb8.png b/assets/images/techharvesting-bd0feb0fb9bc76242c7d548b0c970fb8.png new file mode 100644 index 0000000000..861e865e81 Binary files /dev/null and b/assets/images/techharvesting-bd0feb0fb9bc76242c7d548b0c970fb8.png differ diff --git a/assets/images/testing-library-404b89880d6af98a81ca2877f35a628d.png b/assets/images/testing-library-404b89880d6af98a81ca2877f35a628d.png new file mode 100644 index 0000000000..1b3f037154 Binary files /dev/null and b/assets/images/testing-library-404b89880d6af98a81ca2877f35a628d.png differ diff --git a/assets/images/the-diff-4ba6bfd274dccc6773fb4760069809c5.png b/assets/images/the-diff-4ba6bfd274dccc6773fb4760069809c5.png new file mode 100644 index 0000000000..9a98b15615 Binary files /dev/null and b/assets/images/the-diff-4ba6bfd274dccc6773fb4760069809c5.png differ diff --git a/assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png b/assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png new file mode 100644 index 0000000000..bcc169479a Binary files /dev/null and b/assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png differ diff --git a/assets/images/tidb-community-book-94db820c651d010ac92cb8850a3db0c4.png b/assets/images/tidb-community-book-94db820c651d010ac92cb8850a3db0c4.png new file mode 100644 index 0000000000..79e54d96d2 Binary files /dev/null and b/assets/images/tidb-community-book-94db820c651d010ac92cb8850a3db0c4.png differ diff --git a/assets/images/tinaeldevresse-3ff103efb34064554d15abc4480be1ed.png b/assets/images/tinaeldevresse-3ff103efb34064554d15abc4480be1ed.png new file mode 100644 index 0000000000..5c601c7477 Binary files /dev/null and b/assets/images/tinaeldevresse-3ff103efb34064554d15abc4480be1ed.png differ diff --git a/assets/images/tooljet-7dfcac00aa867e747272aa2a236e7c95.png b/assets/images/tooljet-7dfcac00aa867e747272aa2a236e7c95.png new file mode 100644 index 0000000000..fd3b7277c6 Binary files /dev/null and b/assets/images/tooljet-7dfcac00aa867e747272aa2a236e7c95.png differ diff --git a/assets/images/tremor-ed91b8cf126482731f01a12a474a96c4.png b/assets/images/tremor-ed91b8cf126482731f01a12a474a96c4.png new file mode 100644 index 0000000000..032168693b Binary files /dev/null and b/assets/images/tremor-ed91b8cf126482731f01a12a474a96c4.png differ diff --git a/assets/images/trend-2735e446f67fbcaa0811d103588e9b82.png b/assets/images/trend-2735e446f67fbcaa0811d103588e9b82.png new file mode 100644 index 0000000000..68d6531d7f Binary files /dev/null and b/assets/images/trend-2735e446f67fbcaa0811d103588e9b82.png differ diff --git a/assets/images/trpgengine-92b0322bd80d87fac3d9b51916cd4acb.png b/assets/images/trpgengine-92b0322bd80d87fac3d9b51916cd4acb.png new file mode 100644 index 0000000000..88bcac47ea Binary files /dev/null and b/assets/images/trpgengine-92b0322bd80d87fac3d9b51916cd4acb.png differ diff --git a/assets/images/tuist-ceb1341b8885fe6634cd5fb39aaf8a29.png b/assets/images/tuist-ceb1341b8885fe6634cd5fb39aaf8a29.png new file mode 100644 index 0000000000..b2b1f2ec56 Binary files /dev/null and b/assets/images/tuist-ceb1341b8885fe6634cd5fb39aaf8a29.png differ diff --git a/assets/images/uniforms-f411ddb301d0e53b8663421ee5bc6f0c.png b/assets/images/uniforms-f411ddb301d0e53b8663421ee5bc6f0c.png new file mode 100644 index 0000000000..a993ba9aa0 Binary files /dev/null and b/assets/images/uniforms-f411ddb301d0e53b8663421ee5bc6f0c.png differ diff --git a/assets/images/unleash-745ff545c0eb37ae7db8b0e23ef38e35.png b/assets/images/unleash-745ff545c0eb37ae7db8b0e23ef38e35.png new file mode 100644 index 0000000000..dbdf21c445 Binary files /dev/null and b/assets/images/unleash-745ff545c0eb37ae7db8b0e23ef38e35.png differ diff --git a/assets/images/unmand-70f3f61a911ce5f5f2b031095de23763.png b/assets/images/unmand-70f3f61a911ce5f5f2b031095de23763.png new file mode 100644 index 0000000000..216527c5a6 Binary files /dev/null and b/assets/images/unmand-70f3f61a911ce5f5f2b031095de23763.png differ diff --git a/assets/images/verdaccio-2d1fe5ff04df891b4859f750c4b414aa.png b/assets/images/verdaccio-2d1fe5ff04df891b4859f750c4b414aa.png new file mode 100644 index 0000000000..bc9bdfdf8e Binary files /dev/null and b/assets/images/verdaccio-2d1fe5ff04df891b4859f750c4b414aa.png differ diff --git a/assets/images/verida-developers-de3bcd387b596a788f91837ad6fb29ea.png b/assets/images/verida-developers-de3bcd387b596a788f91837ad6fb29ea.png new file mode 100644 index 0000000000..2c73ddf384 Binary files /dev/null and b/assets/images/verida-developers-de3bcd387b596a788f91837ad6fb29ea.png differ diff --git a/assets/images/virtual-photography-kit-1300776fd8ee190bc07ee1c375091d17.png b/assets/images/virtual-photography-kit-1300776fd8ee190bc07ee1c375091d17.png new file mode 100644 index 0000000000..85c908f940 Binary files /dev/null and b/assets/images/virtual-photography-kit-1300776fd8ee190bc07ee1c375091d17.png differ diff --git a/assets/images/vital-0673002c14e6811e4b34244afbb62198.png b/assets/images/vital-0673002c14e6811e4b34244afbb62198.png new file mode 100644 index 0000000000..1677a20dd5 Binary files /dev/null and b/assets/images/vital-0673002c14e6811e4b34244afbb62198.png differ diff --git a/assets/images/vue-nodegui-55334a3195ffe6875e53f48ccef37a43.png b/assets/images/vue-nodegui-55334a3195ffe6875e53f48ccef37a43.png new file mode 100644 index 0000000000..bd10c63fee Binary files /dev/null and b/assets/images/vue-nodegui-55334a3195ffe6875e53f48ccef37a43.png differ diff --git a/assets/images/warrant-3a9c703456eb126062cf73767ad1bc89.png b/assets/images/warrant-3a9c703456eb126062cf73767ad1bc89.png new file mode 100644 index 0000000000..dcee123538 Binary files /dev/null and b/assets/images/warrant-3a9c703456eb126062cf73767ad1bc89.png differ diff --git a/assets/images/wasp-3f2c633044555e7d4093a8c91fc3cba6.png b/assets/images/wasp-3f2c633044555e7d4093a8c91fc3cba6.png new file mode 100644 index 0000000000..aab9dac60b Binary files /dev/null and b/assets/images/wasp-3f2c633044555e7d4093a8c91fc3cba6.png differ diff --git a/assets/images/webdriverio-97a558409647cf182936d22a25d3c9ba.png b/assets/images/webdriverio-97a558409647cf182936d22a25d3c9ba.png new file mode 100644 index 0000000000..146c26621f Binary files /dev/null and b/assets/images/webdriverio-97a558409647cf182936d22a25d3c9ba.png differ diff --git a/assets/images/webiny-c35aae37a0b44959b343ee6907295c91.png b/assets/images/webiny-c35aae37a0b44959b343ee6907295c91.png new file mode 100644 index 0000000000..88d8e0d228 Binary files /dev/null and b/assets/images/webiny-c35aae37a0b44959b343ee6907295c91.png differ diff --git a/assets/images/whirlcodes-a8ef206eda50c3a3d1ed53f5be7706d6.png b/assets/images/whirlcodes-a8ef206eda50c3a3d1ed53f5be7706d6.png new file mode 100644 index 0000000000..07e657a02a Binary files /dev/null and b/assets/images/whirlcodes-a8ef206eda50c3a3d1ed53f5be7706d6.png differ diff --git a/assets/images/woodpecker-826cbf901906356f6c8d4ca956e79de7.png b/assets/images/woodpecker-826cbf901906356f6c8d4ca956e79de7.png new file mode 100644 index 0000000000..0e4871fce2 Binary files /dev/null and b/assets/images/woodpecker-826cbf901906356f6c8d4ca956e79de7.png differ diff --git a/assets/images/yeecord-422b5ca83d8da85688cc49e8d18dbcfe.png b/assets/images/yeecord-422b5ca83d8da85688cc49e8d18dbcfe.png new file mode 100644 index 0000000000..52553796b7 Binary files /dev/null and b/assets/images/yeecord-422b5ca83d8da85688cc49e8d18dbcfe.png differ diff --git a/assets/images/zowe-6280912723c23fae74c35bf25e057dfe.png b/assets/images/zowe-6280912723c23fae74c35bf25e057dfe.png new file mode 100644 index 0000000000..f659aa3edd Binary files /dev/null and b/assets/images/zowe-6280912723c23fae74c35bf25e057dfe.png differ diff --git a/assets/images/zxuqian-5775d0e563b7a80f3659a6f8ade564d2.png b/assets/images/zxuqian-5775d0e563b7a80f3659a6f8ade564d2.png new file mode 100644 index 0000000000..ed1b8a98b1 Binary files /dev/null and b/assets/images/zxuqian-5775d0e563b7a80f3659a6f8ade564d2.png differ diff --git a/assets/images/图片-c3c014b00b204c4fec2ad5e402e5521d.png b/assets/images/图片-c3c014b00b204c4fec2ad5e402e5521d.png new file mode 100644 index 0000000000..2e4d675f90 Binary files /dev/null and b/assets/images/图片-c3c014b00b204c4fec2ad5e402e5521d.png differ diff --git a/assets/js/010225af.a5389ff3.js b/assets/js/010225af.a5389ff3.js new file mode 100644 index 0000000000..a7198ba2d4 --- /dev/null +++ b/assets/js/010225af.a5389ff3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49678],{2086:(e,n,t)=>{t.r(n),t.d(n,{default:()=>c});var l=t(24246),r=t(27378),s=t(41428),i=t(88613);function c(){const e=(0,r.useRef)(null);return(0,l.jsx)(i.Z,{children:(0,l.jsxs)("main",{className:"container margin-vert--xl",children:[(0,l.jsx)(s.Z,{ref:e,to:"/",children:"A little link"}),(0,l.jsx)("button",{type:"button",onClick:()=>{e.current.style.backgroundColor="red"},children:"Change the link"})]})})}}}]); \ No newline at end of file diff --git a/assets/js/014bb441.59204837.js b/assets/js/014bb441.59204837.js new file mode 100644 index 0000000000..b31940287b --- /dev/null +++ b/assets/js/014bb441.59204837.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54734],{35434:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246);r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function i(e){return(0,n.jsx)("svg",c(function(e){for(var t=1;t{r.d(t,{Z:()=>le});var n=r(24246),o=r(27378);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function l(e){const{mdxAdmonitionTitle:t,rest:r}=function(e){const t=o.Children.toArray(e),r=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==r));return{mdxAdmonitionTitle:null==r?void 0:r.props.children,rest:c.length>0?(0,n.jsx)(n.Fragment,{children:c}):null}}(e.children);var l;const a=null!==(l=e.title)&&void 0!==l?l:t;return i(function(e){for(var t=1;t(0,n.jsx)(P,J({title:"secondary"},e)),important:e=>(0,n.jsx)(B,J({title:"important"},e)),success:e=>(0,n.jsx)(E,J({title:"success"},e)),caution:function(e){return(0,n.jsx)(y,G(function(e){for(var t=1;t{r.d(t,{Z:()=>P});var n=r(24246),o=r(27378),c=r(40624),i=r(88613),l=r(60029),a=r(41428),s=r(36712),u=r(3620),b=r(39779);function f(e){const{pathname:t}=(0,u.TH)();return(0,o.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,b.Mg)(e.permalink,t))}(e,t)))),[e,t])}const p={sidebar:"sidebar_P3nc",sidebarItemTitle:"sidebarItemTitle_VrjY",sidebarItemList:"sidebarItemList_OSkG",sidebarItem:"sidebarItem_WJ0y",sidebarItemLink:"sidebarItemLink_Qrfg",sidebarItemLinkActive:"sidebarItemLinkActive_nUeK"};function O({sidebar:e}){const t=f(e.items);return(0,n.jsx)("aside",{className:"col col--3",children:(0,n.jsxs)("nav",{className:(0,c.Z)(p.sidebar,"thin-scrollbar"),"aria-label":(0,s.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,n.jsx)("div",{className:(0,c.Z)(p.sidebarItemTitle,"margin-bottom--md"),children:e.title}),(0,n.jsx)("ul",{className:(0,c.Z)(p.sidebarItemList,"clean-list"),children:t.map((e=>(0,n.jsx)("li",{className:p.sidebarItem,children:(0,n.jsx)(a.Z,{isNavLink:!0,to:e.permalink,className:p.sidebarItemLink,activeClassName:p.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var y=r(35612);function d({sidebar:e}){const t=f(e.items);return(0,n.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,n.jsx)("li",{className:"menu__list-item",children:(0,n.jsx)(a.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,n.jsx)(y.Zo,{component:d,props:e})}function m({sidebar:e}){const t=(0,l.i)();return(null==e?void 0:e.items.length)?"mobile"===t?(0,n.jsx)(j,{sidebar:e}):(0,n.jsx)(O,{sidebar:e}):null}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P(e){const{sidebar:t,toc:r,children:o}=e,l=v(e,["sidebar","toc","children"]),a=t&&t.items.length>0;return(0,n.jsx)(i.Z,h(function(e){for(var t=1;t{r.d(t,{Z:()=>o});var n=r(24246);r(27378);function o({children:e,className:t}){return(0,n.jsx)("article",{className:t,children:e})}},53635:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(24246),o=(r(27378),r(40624)),c=r(86632),i=r(88305),l=r(23387);function a({children:e,className:t}){const{isBlogPostPage:r}=(0,i.C)();return(0,n.jsx)("div",{id:r?c.blogPostContainerID:void 0,className:(0,o.Z)("markdown",t),children:(0,n.jsx)(l.Z,{children:e})})}},71422:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(7812),l=r(88305),a=r(54461);const s={container:"container_x5Un"};function u({readingTime:e}){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>{const r=Math.ceil(t);return e(r,(0,c.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:r}))}}();return(0,n.jsx)(n.Fragment,{children:t(e)})}function b({date:e,formattedDate:t}){return(0,n.jsx)("time",{dateTime:e,children:t})}function f(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function p({className:e}){const{metadata:t}=(0,l.C)(),{date:r,readingTime:c}=t,i=(0,a.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,o.Z)(s.container,"margin-vert--md",e),children:[(0,n.jsx)(b,{date:r,formattedDate:(p=r,i.format(new Date(p)))}),void 0!==c&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(f,{}),(0,n.jsx)(u,{readingTime:c})]})]});var p}},35253:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(24246),o=(r(27378),r(40624)),c=r(41428),i=r(88305);const l={title:"title_UBNu"};function a({className:e}){const{metadata:t,isBlogPostPage:r}=(0,i.C)(),{permalink:a,title:s}=t,u=r?"h1":"h2";return(0,n.jsx)(u,{className:(0,o.Z)(l.title,e),children:r?s:(0,n.jsx)(c.Z,{to:a,children:s})})}},73707:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(44008)),c=r(88305);function i(){const{assets:e,metadata:t}=(0,c.C)(),{title:r,description:i,date:l,tags:a,authors:s,frontMatter:u}=t,{keywords:b}=u;var f;const p=null!==(f=e.image)&&void 0!==f?f:u.image;return(0,n.jsxs)(o.d,{title:r,description:i,keywords:b,image:p,children:[(0,n.jsx)("meta",{property:"og:type",content:"article"}),(0,n.jsx)("meta",{property:"article:published_time",content:l}),s.some((e=>e.url))&&(0,n.jsx)("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),a.length>0&&(0,n.jsx)("meta",{property:"article:tag",content:a.map((e=>e.label)).join(",")})]})}},5254:(e,t,r)=>{r.d(t,{Z:()=>v});var n=r(24246),o=r(27378),c=r(40624),i=r(80474),l=r(29088),a=r(14929);const s={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function O(e,t){return!!e&&(e===t||O(e.parentElement,t))}function y(e){var{summary:t,children:r}=e,y=f(e,["summary","children"]);(0,i.Z)().collectAnchor(y.id);const d=(0,l.Z)(),j=(0,o.useRef)(null),{collapsed:m,setCollapsed:g}=(0,a.u)({initialState:!y.open}),[h,v]=(0,o.useState)(y.open),P=o.isValidElement(t)?t:(0,n.jsx)("summary",{children:null!=t?t:"Details"});return(0,n.jsxs)("details",b(function(e){for(var t=1;t{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&O(t,j.current)&&(e.preventDefault(),m?(g(!1),v(!0)):g(!0))},children:[P,(0,n.jsx)(a.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{g(e),v(!e)},children:(0,n.jsx)("div",{className:s.collapsibleContent,children:r})})]}))}const d={details:"details_Cn_P"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(){return m=Object.assign||function(e){for(var t=1;t{r.d(t,{Z:()=>ne});var n=r(24246),o=r(27378),c=r(71670),i=r(97134),l=r(38112);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){return(0,n.jsx)("code",function(e){for(var t=1;t"string"==typeof e&&!e.includes("\n")))}(e)?(0,n.jsx)(s,b({},e)):(0,n.jsx)(l.Z,b({},e))}var p=r(41428);function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var y=r(5254);function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){const t=o.Children.toArray(e.children),r=t.find((e=>o.isValidElement(e)&&"summary"===e.type)),c=(0,n.jsx)(n.Fragment,{children:t.filter((e=>e!==r))});return(0,n.jsx)(y.Z,j(function(e){for(var t=1;tM(function(e){for(var t=1;t{(async function({id:e,text:t,config:r}){H.N.mermaidAPI.initialize(r);try{return await H.N.render(e,t)}catch(o){var n;throw null===(n=document.querySelector(`#d${e}`))||void 0===n||n.remove(),o}})({id:c,text:e,config:l}).then(n).catch((e=>{n((()=>{throw e}))}))}),[c,e,l]),r}const F={container:"container_RUsj"};function W(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function U(e){for(var t=1;t{var r;const n=t.current;null===(r=e.bindFunctions)||void 0===r||r.call(e,n)}),[e]),(0,n.jsx)("div",{ref:t,className:`${R} ${F.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function q({value:e}){const t=$({text:e});return null===t?null:(0,n.jsx)(V,{renderResult:t})}function G(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(e){for(var t=1;t(0,n.jsx)(v,Q({as:"h1"},e)),h2:e=>(0,n.jsx)(v,Q({as:"h2"},e)),h3:e=>(0,n.jsx)(v,Q({as:"h3"},e)),h4:e=>(0,n.jsx)(v,Q({as:"h4"},e)),h5:e=>(0,n.jsx)(v,Q({as:"h5"},e)),h6:e=>(0,n.jsx)(v,Q({as:"h6"},e)),admonition:Z.Z,mermaid:function(e){return(0,n.jsx)(_.Z,{fallback:e=>(0,n.jsx)(B.Ac,U({},e)),children:(0,n.jsx)(q,U({},e))})}};const J="tweetQuote_h8Rz",Y="avatarImg_b51M";function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee=(te=function(e){for(var t=1;t{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);function i(e){const{permalink:t,title:r,subLabel:i,isNext:l}=e;return(0,n.jsxs)(c.Z,{className:(0,o.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[i&&(0,n.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,n.jsx)("div",{className:"pagination-nav__label",children:r})]})}},78093:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(4646);const i={tableOfContents:"tableOfContents_RLlU",docItemContainer:"docItemContainer_oucX"};function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}const b="table-of-contents__link toc-highlight",f="table-of-contents__link--active";function p(e){var{className:t}=e,r=u(e,["className"]);return(0,n.jsx)("div",{className:(0,o.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,n.jsx)(c.Z,s(a({},r),{linkClassName:b,linkActiveClassName:f}))})}},4646:(e,t,r)=>{r.d(t,{Z:()=>v});var n=r(24246),o=r(27378),c=r(73919);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function u(e){const t=e.map((e=>a(l({},e),{parentIndex:-1,children:[]}))),r=Array(7).fill(-1);t.forEach(((e,t)=>{const n=r.slice(2,e.level);e.parentIndex=Math.max(...n),r[e.level]=t}));const n=[];return t.forEach((e=>{const{parentIndex:r}=e,o=s(e,["parentIndex"]);r>=0?t[r].children.push(o):n.push(o)})),n}function b({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return e.flatMap((e=>{const n=b({toc:e.children,minHeadingLevel:t,maxHeadingLevel:r});return function(e){return e.level>=t&&e.level<=r}(e)?[a(l({},e),{children:n})]:n}))}function f(e){const t=e.getBoundingClientRect();return t.top===t.bottom?f(e.parentNode):t}function p(e,{anchorTopOffset:t}){const r=e.find((e=>f(e).top>=t));if(r){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function y(e){const t=(0,o.useRef)(void 0),r=O();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:n,linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(n),l=function({minHeadingLevel:e,maxHeadingLevel:t}){const r=[];for(let n=e;n<=t;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:c,maxHeadingLevel:i}),a=p(l,{anchorTopOffset:r.current}),s=e.find((e=>a&&a.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,r){r?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===s)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,r])}var d=r(41428);function j({toc:e,className:t,linkClassName:r,isChild:o}){return e.length?(0,n.jsx)("ul",{className:o?void 0:t,children:e.map((e=>(0,n.jsxs)("li",{children:[(0,n.jsx)(d.Z,{to:`#${e.id}`,className:null!=r?r:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,n.jsx)(j,{isChild:!0,toc:e.children,className:t,linkClassName:r})]},e.id)))}):null}const m=o.memo(j);function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v(e){var{toc:t,className:r="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:a,maxHeadingLevel:s}=e,f=h(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const p=(0,c.L)(),O=null!=a?a:p.tableOfContents.minHeadingLevel,d=null!=s?s:p.tableOfContents.maxHeadingLevel,j=function({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return(0,o.useMemo)((()=>b({toc:u(e),minHeadingLevel:t,maxHeadingLevel:r})),[e,t,r])}({toc:t,minHeadingLevel:O,maxHeadingLevel:d});return y((0,o.useMemo)((()=>{if(i&&l)return{linkClassName:i,linkActiveClassName:l,minHeadingLevel:O,maxHeadingLevel:d}}),[i,l,O,d])),(0,n.jsx)(m,function(e){for(var t=1;t{r.d(t,{C:()=>a,n:()=>l});var n=r(24246),o=r(27378),c=r(51114);const i=o.createContext(null);function l({children:e,content:t,isBlogPostPage:r=!1}){const c=function({content:e,isBlogPostPage:t}){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,toc:e.toc,isBlogPostPage:t})),[e,t])}({content:t,isBlogPostPage:r});return(0,n.jsx)(i.Provider,{value:c,children:e})}function a(){const e=(0,o.useContext)(i);if(null===e)throw new c.i6("BlogPostProvider");return e}},54461:(e,t,r)=>{r.d(t,{P:()=>c});var n=r(4423);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e={}){const{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,function(e){for(var t=1;t{r.d(t,{c:()=>s});var n=r(27378),o=r(4423);const c=["zero","one","two","few","many","other"];function i(e){return c.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:i(["one","other"]),select:e=>1===e?"one":"other"};function a(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:i(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function s(){const e=a();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const o=r.select(t),c=r.pluralForms.indexOf(o);return n[Math.min(c,n.length-1)]}(r,t,e)}}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},57520:(e,t,r)=>{r.d(t,{Z:()=>N});var n=r(24246),o=r(27378),c=r(88305),i=r(35253),l=r(71422),a=r(40624),s=r(41428);const u={image:"image_oRbT"};function b({author:e,className:t}){const{name:r,url:o,imageURL:c}=e;return(0,n.jsx)("div",{className:(0,a.Z)("avatar margin-bottom--sm",t),children:c&&(0,n.jsx)(s.Z,{className:"avatar__photo-link avatar__photo",href:o,children:(0,n.jsx)("img",{className:u.image,src:c,alt:r,onError:e=>{e.currentTarget.src='data:image/svg+xml,'}})})})}function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function d(e){var{expanded:t}=e,r=y(e,["expanded"]);return t?(0,n.jsx)("svg",O(p({viewBox:"0 0 1024 1024",width:"20",height:"20",fill:"currentColor"},r),{children:(0,n.jsx)("path",{d:"M783.915092 1009.031953l-271.898251-277.615587-271.930737 277.550617a49.214558 49.214558 0 0 1-70.752018 0 51.780862 51.780862 0 0 1 0-72.246322l307.274261-313.706262a49.279528 49.279528 0 0 1 70.784503 0l307.33923 313.706262a51.975771 51.975771 0 0 1 0 72.311292 49.409467 49.409467 0 0 1-70.816988 0z m-307.306745-608.05155L169.269117 87.274141A51.975771 51.975771 0 0 1 169.269117 14.96285a49.409467 49.409467 0 0 1 70.816987 0l271.930737 277.615586L783.850122 14.96285a49.409467 49.409467 0 0 1 70.816988 0 51.975771 51.975771 0 0 1 0 72.311291l-307.33923 313.706262a49.376982 49.376982 0 0 1-70.719533 0z"})})):(0,n.jsx)("svg",O(p({viewBox:"0 0 1024 1024",width:"20",height:"20",fill:"currentColor"},r),{children:(0,n.jsx)("path",{d:"M476.612887 1009.12034L169.240699 695.380437a51.981345 51.981345 0 0 1 0-72.319045 49.382277 49.382277 0 0 1 70.824582 0l271.959897 277.645356 271.862433-277.645356a49.382277 49.382277 0 0 1 70.824582 0 51.981345 51.981345 0 0 1 0 72.319045l-307.307212 313.739903a49.447254 49.447254 0 0 1-70.792094 0z m307.274724-608.116755L511.99269 123.455693l-271.959897 277.645357a49.382277 49.382277 0 0 1-70.824582 0 51.981345 51.981345 0 0 1 0-72.319045L476.580399 15.042102a49.382277 49.382277 0 0 1 70.727117 0l307.372188 313.739903a51.981345 51.981345 0 0 1 0 72.319045 49.414766 49.414766 0 0 1-70.824582 0z"})}))}const j={authorCol:"authorCol_mDBc",imageOnlyAuthorRow:"imageOnlyAuthorRow_WiD6",imageOnlyAuthorCol:"imageOnlyAuthorCol_uiac",toggleButton:"toggleButton_WvRg",toggleButtonIconExpanded:"toggleButtonIconExpanded_ERxv"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t(0,n.jsx)("div",{className:j.imageOnlyAuthorCol,children:(0,n.jsx)(b,{author:h(g({},e),{imageURL:null!==(u=r.authorsImageUrls[t])&&void 0!==u?u:e.imageURL})})},t))),t.length>10&&(0,n.jsx)("button",{className:(0,a.Z)("clean-btn",j.toggleButton),type:"button",onClick:()=>l((e=>!e)),"aria-label":"expand",children:(0,n.jsx)(d,{expanded:i})})]})}const P={changelogItemTitleList:"changelogItemTitleList_sueG"};function w(){const{isBlogPostPage:e}=(0,c.C)();return(0,n.jsx)(i.Z,{className:e?void 0:P.changelogItemTitleList})}function x(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(w,{}),(0,n.jsx)(l.Z,{}),(0,n.jsx)(v,{})]})}var k=r(53543),S=r(53635);const D={changelogItemContainer:"changelogItemContainer_jeDt"};function N({children:e}){return(0,n.jsxs)(k.Z,{className:D.changelogItemContainer,children:[(0,n.jsx)(x,{}),(0,n.jsx)(S.Z,{children:e})]})}},98245:(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(41428),l=r(44008),a=r(89583),s=r(88305),u=r(73707),b=r(85799),f=r(57520),p=r(6649);function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e){for(var t=1;t0?(0,n.jsx)(m.Z,{toc:o,minHeadingLevel:u,maxHeadingLevel:p}):void 0,children:[(0,n.jsx)(g,{}),(0,n.jsx)(f.Z,{children:t}),(c||i)&&(0,n.jsx)(j,{nextItem:c,prevItem:i})]})}function v(e){const t=e.content;return(0,n.jsx)(s.n,{content:e.content,isBlogPostPage:!0,children:(0,n.jsxs)(l.FG,{className:(0,o.Z)(a.k.wrapper.blogPages,a.k.page.blogPostPage),children:[(0,n.jsx)(u.Z,{}),(0,n.jsx)(h,{sidebar:e.sidebar,children:(0,n.jsx)(t,{})})]})})}},38112:(e,t,r)=>{r.d(t,{Z:()=>Te});var n={};r.r(n),r.d(n,{ButtonExample:()=>_});var o=r(24246),c=r(27378),i=r(40624),l=r(29088),a=r(32711),s=r(36712),u=r(4423),b=r(94544),f=r(30691),p=r(78844),O=r(73919);function y(){const{prism:e}=(0,O.L)(),{colorMode:t}=(0,p.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var d=r(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function x(){return(0,o.jsx)(b.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.Z,{fallback:e=>(0,o.jsx)(f.Ac,g({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{children:(0,o.jsx)(s.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(x,{})})]})}function S(){const e=(0,l.Z)();return(0,o.jsx)(a.uz,{className:j.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{children:(0,o.jsx)(s.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function E(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,s=y();var b;const f=null!==(b=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==b&&b;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(a.nu,h(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:f,transformCode:null!=n?n:N,theme:s},c),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function L(e){for(var t=1;t[\"'])(?.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},U=(V=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){z(e,t,r[t])}))}return e}({},W),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(V,Object.getOwnPropertyDescriptors(q)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(q)).forEach((function(e){Object.defineProperty(V,e,Object.getOwnPropertyDescriptor(q,e))})),V);var V,q;const G=Object.keys(W);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=U[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&F.test(c)){const e=c.match(F).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),l=r.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),s=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),b=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<l.length;){const e=l[p].match(i);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));s[t]?a[s[t]].range+=`${p},`:u[t]?a[u[t]].start=p:b[t]&&(a[b[t]].range+=`${a[b[t]].start}-${p-1},`),l.splice(p,1)}r=l.join("\n");const f={};return Object.entries(a).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(T=f)[H=t])&&void 0!==r||(T[H]=[]),f[t].push(e)}))})),{lineClassNames:f,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(y());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Y(e,t,r[t])}))}return e}({},r),{style:n,className:(0,i.Z)(r.className,J.codeBlockContainer,A.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=r(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function se(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){se(e,t,r[t])}))}return e}function be(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function fe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=n({line:e,className:(0,i.Z)(t,r&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",be(ue({},l),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var pe=r(34370);function Oe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ye(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function de(e){return(0,o.jsx)("svg",ye(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Oe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){je(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const he={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),l=(0,c.useRef)(void 0),a=(0,c.useCallback)((()=>{(0,pe.Z)(e),n(!0),l.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,s.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,s.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,s.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,he.copyButton,r&&he.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:he.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(de,{className:he.copyButtonIcon}),(0,o.jsx)(ge,{className:he.copyButtonSuccessIcon})]})})}function Pe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function xe(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Pe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,s.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(xe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:r,title:n,showLineNumbers:l,language:a}){const{prism:{defaultLanguage:s,magicComments:u}}=(0,O.L)();var b;const f=function(e){return null==e?void 0:e.toLowerCase()}(null!==(b=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==b?b:s),p=y(),d=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),i=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return ie(o,l),(0,c.useEffect)((()=>{l()}),[e,l]),(0,c.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:i}}(),j=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match($))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:m,code:g}=X(e,{metastring:r,language:f,magicComments:u}),h=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,f&&!t.includes(`language-${f}`)&&`language-${f}`),children:[j&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:p,code:g,language:null!=f?f:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:d.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,h&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(fe,{line:e,getLineProps:n,getTokenProps:c,classNames:m[t],showLineNumbers:h},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(d.isEnabled||d.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>d.toggle(),isEnabled:d.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:g})]})]})]})}function Ne(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ze(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Le(e,t,r[t])}))}return e}const _e=(Be=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,l.Z)(),i=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof i?De:ne;return(0,o.jsx)(a,Ee(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ne(e,t,r[t])}))}return e}({},r),{children:i}),String(n))},function(e){return e.live?(0,o.jsx)(E,Ze({scope:I},e)):(0,o.jsx)(Be,Ze({},e))});var Be;function Ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Te(e){return(0,o.jsx)(_e,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ie(e,t,r[t])}))}return e}({},e))}}}]); \ No newline at end of file diff --git a/assets/js/016c1251.66e5f0ef.js b/assets/js/016c1251.66e5f0ef.js new file mode 100644 index 0000000000..fb91afc68f --- /dev/null +++ b/assets/js/016c1251.66e5f0ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99581],{51309:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>f});var n=o(24246),s=o(71670);const a={title:"First post with footnote to test posts with same footnote reference."},r=void 0,i={permalink:"/tests/blog/2022/04/20/dup-footnote",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx",source:"@site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx",title:"First post with footnote to test posts with same footnote reference.",description:"foo",date:"2022-04-20T00:00:00.000Z",tags:[],readingTime:1.8,hasTruncateMarker:!1,authors:[],frontMatter:{title:"First post with footnote to test posts with same footnote reference."},unlisted:!1,prevItem:{title:"A post with html slug",permalink:"/tests/blog/x/y/z.html"},nextItem:{title:"Second post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/22/dup-footnote"}},c={authorsImageUrls:[]},f=[];function l(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["foo",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-1-ba6e3a",id:"user-content-fnref-1-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),"\n",(0,n.jsxs)(t.p,{children:["bar",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-2-ba6e3a",id:"user-content-fnref-2-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})]}),"\n",(0,n.jsxs)(t.p,{children:["baz",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-3-ba6e3a",id:"user-content-fnref-3-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})]}),"\n","\n",(0,n.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,n.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{id:"user-content-fn-1-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["foo ",(0,n.jsx)(t.a,{href:"#user-content-fnref-1-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-2-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["bar ",(0,n.jsx)(t.a,{href:"#user-content-fnref-2-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-3-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["baz ",(0,n.jsx)(t.a,{href:"#user-content-fnref-3-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>r});var n=o(27378);const s={},a=n.createContext(s);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/017f8056.f677130c.js b/assets/js/017f8056.f677130c.js new file mode 100644 index 0000000000..d6a3956ad1 --- /dev/null +++ b/assets/js/017f8056.f677130c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98716],{21935:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>r});var o=t(24246),a=t(71670);const i={mdx:{format:"md"},date:"2019-07-14T19:00"},s="2.0.0-alpha.20",c={permalink:"/changelog/2.0.0-alpha.20",source:"@site/changelog/source/2.0.0-alpha.20.md",title:"2.0.0-alpha.20",description:"- Add copy codeblock button",date:"2019-07-14T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-14T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.21",permalink:"/changelog/2.0.0-alpha.21"},nextItem:{title:"2.0.0-alpha.19",permalink:"/changelog/2.0.0-alpha.19"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},r=[];function d(e){const n={code:"code",li:"li",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Add copy codeblock button"}),"\n",(0,o.jsx)(n.li,{children:"Add Google analytics and Google gtag plugins."}),"\n",(0,o.jsxs)(n.li,{children:["Move source components to ",(0,o.jsx)(n.code,{children:"/src"}),". Please create a ",(0,o.jsx)(n.code,{children:"website/src"})," directory and move your ",(0,o.jsx)(n.code,{children:"/pages"})," and ",(0,o.jsx)(n.code,{children:"/theme"})," code into it. This is to make it easier to integrate your website with external build/static analysis tooling (you can now just pass in ",(0,o.jsx)(n.code,{children:"src/**/*.js"})," as the path to process)."]}),"\n",(0,o.jsx)(n.li,{children:"Adde more documentation thanks to @wgao19."}),"\n",(0,o.jsx)(n.li,{children:"Deprecate the current docs plugin. The docs plugin as of 2.0.0-alpha.19 is heavily based on V1 specifications and we intend to create a better one that fixes some of the inconsistencies in V1. If you have swizzled any doc components, you will have to update their names. You are highly encourages to not swizzle the legacy doc components until we have completed the new docs plugin."}),"\n",(0,o.jsx)(n.li,{children:"Separate v2 init command to new package @docusaurus/init"}),"\n",(0,o.jsx)(n.li,{children:"Render 404.html page"}),"\n",(0,o.jsx)(n.li,{children:"Improve SEO"}),"\n",(0,o.jsx)(n.li,{children:"Clicking on the logo in the mobile sliding navigation will now bring you to the homepage."}),"\n",(0,o.jsxs)(n.li,{children:["Performance\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Disable webpack output pathinfo. Webpack has the ability to generate path info in the output bundle. However, this puts garbage collection pressure on projects that bundle thousands of modules. Not very useful for our case"}),"\n",(0,o.jsx)(n.li,{children:"Drop cache-loader in CI and test environment because it has an initial overhead. We always start from scratch in vm instance like CI so cache-loader is useless"}),"\n",(0,o.jsx)(n.li,{children:"Better splitchunks and babel default webpack config"}),"\n"]}),"\n"]}),"\n"]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var o=t(27378);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.d6e7fd87.js b/assets/js/01a85c17.d6e7fd87.js new file mode 100644 index 0000000000..26805f0e65 --- /dev/null +++ b/assets/js/01a85c17.d6e7fd87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64013],{85799:(e,t,r)=>{r.d(t,{Z:()=>x});var n=r(24246),s=r(27378),i=r(40624),a=r(88613),l=r(60029),c=r(41428),o=r(36712),u=r(3620),b=r(39779);function d(e){const{pathname:t}=(0,u.TH)();return(0,s.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,b.Mg)(e.permalink,t))}(e,t)))),[e,t])}const m={sidebar:"sidebar_P3nc",sidebarItemTitle:"sidebarItemTitle_VrjY",sidebarItemList:"sidebarItemList_OSkG",sidebarItem:"sidebarItem_WJ0y",sidebarItemLink:"sidebarItemLink_Qrfg",sidebarItemLinkActive:"sidebarItemLinkActive_nUeK"};function g({sidebar:e}){const t=d(e.items);return(0,n.jsx)("aside",{className:"col col--3",children:(0,n.jsxs)("nav",{className:(0,i.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,n.jsx)("div",{className:(0,i.Z)(m.sidebarItemTitle,"margin-bottom--md"),children:e.title}),(0,n.jsx)("ul",{className:(0,i.Z)(m.sidebarItemList,"clean-list"),children:t.map((e=>(0,n.jsx)("li",{className:m.sidebarItem,children:(0,n.jsx)(c.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=r(35612);function f({sidebar:e}){const t=d(e.items);return(0,n.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,n.jsx)("li",{className:"menu__list-item",children:(0,n.jsx)(c.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,n.jsx)(p.Zo,{component:f,props:e})}function h({sidebar:e}){const t=(0,l.i)();return(null==e?void 0:e.items.length)?"mobile"===t?(0,n.jsx)(j,{sidebar:e}):(0,n.jsx)(g,{sidebar:e}):null}function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function v(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function y(e,t){if(null==e)return{};var r,n,s=function(e,t){if(null==e)return{};var r,n,s={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(s[r]=e[r]);return s}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function x(e){const{sidebar:t,toc:r,children:s}=e,l=y(e,["sidebar","toc","children"]),c=t&&t.items.length>0;return(0,n.jsx)(a.Z,v(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}({},l),{children:(0,n.jsx)("div",{className:"container margin-vert--lg",children:(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(h,{sidebar:t}),(0,n.jsx)("main",{className:(0,i.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),children:s}),r&&(0,n.jsx)("div",{className:"col col--2",children:r})]})})}))}},32843:(e,t,r)=>{r.r(t),r.d(t,{default:()=>d});var n=r(24246),s=(r(27378),r(40624)),i=r(19816),a=r(44008),l=r(89583),c=r(85799),o=r(7711),u=r(10057),b=r(52615);function d({tags:e,sidebar:t}){const r=(0,i.M)();return(0,n.jsxs)(a.FG,{className:(0,s.Z)(l.k.wrapper.blogPages,l.k.page.blogTagsListPage),children:[(0,n.jsx)(a.d,{title:r}),(0,n.jsx)(u.Z,{tag:"blog_tags_list"}),(0,n.jsxs)(c.Z,{sidebar:t,children:[(0,n.jsx)(b.Z,{as:"h1",children:r}),(0,n.jsx)(o.Z,{tags:e})]})]})}},52977:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),s=(r(27378),r(40624)),i=r(41428);const a={tag:"tag_Nd8t",tagRegular:"tagRegular_TiLs",tagWithCount:"tagWithCount_AQg7"};function l({permalink:e,label:t,count:r}){return(0,n.jsxs)(i.Z,{href:e,className:(0,s.Z)(a.tag,r?a.tagWithCount:a.tagRegular),children:[t,r&&(0,n.jsx)("span",{children:r})]})}},7711:(e,t,r)=>{r.d(t,{Z:()=>b});var n=r(24246),s=(r(27378),r(19816)),i=r(52977),a=r(52615);const l={tag:"tag_SyQ5"};function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){c(e,t,r[t])}))}return e}function u({letterEntry:e}){return(0,n.jsxs)("article",{children:[(0,n.jsx)(a.Z,{as:"h2",id:e.letter,children:e.letter}),(0,n.jsx)("ul",{className:"padding--none",children:e.tags.map((e=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,o({},e))},e.permalink)))}),(0,n.jsx)("hr",{})]})}function b({tags:e}){const t=(0,s.P)(e);return(0,n.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,n.jsx)(u,{letterEntry:e},e.letter)))})}},19816:(e,t,r)=>{r.d(t,{M:()=>a,P:()=>l});var n,s,i=r(36712);const a=()=>(0,i.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function l(e){const t={};return Object.values(e).forEach((e=>{const r=function(e){return e[0].toUpperCase()}(e.label);var i;null!==(i=(n=t)[s=r])&&void 0!==i||(n[s]=[]),t[r].push(e)})),Object.entries(t).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>({letter:e,tags:t.sort(((e,t)=>e.label.localeCompare(t.label)))})))}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.d93a1eb3.js b/assets/js/01a85c17.d93a1eb3.js deleted file mode 100644 index 07b8b56b9b..0000000000 --- a/assets/js/01a85c17.d93a1eb3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[8209],{6535:(e,s,t)=>{t.d(s,{A:()=>v});var a=t(6540),i=t(4164),r=t(781),l=t(4581),n=t(8774),c=t(1312),o=t(6347),d=t(9169);function m(e){const{pathname:s}=(0,o.zy)();return(0,a.useMemo)((()=>e.filter((e=>function(e,s){return!(e.unlisted&&!(0,d.ys)(e.permalink,s))}(e,s)))),[e,s])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var b=t(4848);function g(e){let{sidebar:s}=e;const t=m(s.items);return(0,b.jsx)("aside",{className:"col col--3",children:(0,b.jsxs)("nav",{className:(0,i.A)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,b.jsx)("div",{className:(0,i.A)(u.sidebarItemTitle,"margin-bottom--md"),children:s.title}),(0,b.jsx)("ul",{className:(0,i.A)(u.sidebarItemList,"clean-list"),children:t.map((e=>(0,b.jsx)("li",{className:u.sidebarItem,children:(0,b.jsx)(n.A,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var h=t(5600);function j(e){let{sidebar:s}=e;const t=m(s.items);return(0,b.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,b.jsx)("li",{className:"menu__list-item",children:(0,b.jsx)(n.A,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function p(e){return(0,b.jsx)(h.GX,{component:j,props:e})}function x(e){let{sidebar:s}=e;const t=(0,l.l)();return s?.items.length?"mobile"===t?(0,b.jsx)(p,{sidebar:s}):(0,b.jsx)(g,{sidebar:s}):null}function v(e){const{sidebar:s,toc:t,children:a,...l}=e,n=s&&s.items.length>0;return(0,b.jsx)(r.A,{...l,children:(0,b.jsx)("div",{className:"container margin-vert--lg",children:(0,b.jsxs)("div",{className:"row",children:[(0,b.jsx)(x,{sidebar:s}),(0,b.jsx)("main",{className:(0,i.A)("col",{"col--7":n,"col--9 col--offset-1":!n}),children:a}),t&&(0,b.jsx)("div",{className:"col col--2",children:t})]})})})}},9158:(e,s,t)=>{t.r(s),t.d(s,{default:()=>j});t(6540);var a=t(4164),i=t(1312);const r=()=>(0,i.T)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var l=t(1213),n=t(7559),c=t(6535),o=t(6133),d=t(1107);const m={tag:"tag_Nnez"};var u=t(4848);function b(e){let{letterEntry:s}=e;return(0,u.jsxs)("article",{children:[(0,u.jsx)(d.A,{as:"h2",id:s.letter,children:s.letter}),(0,u.jsx)("ul",{className:"padding--none",children:s.tags.map((e=>(0,u.jsx)("li",{className:m.tag,children:(0,u.jsx)(o.A,{...e})},e.permalink)))}),(0,u.jsx)("hr",{})]})}function g(e){let{tags:s}=e;const t=function(e){const s={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);s[t]??=[],s[t].push(e)})),Object.entries(s).sort(((e,s)=>{let[t]=e,[a]=s;return t.localeCompare(a)})).map((e=>{let[s,t]=e;return{letter:s,tags:t.sort(((e,s)=>e.label.localeCompare(s.label)))}}))}(s);return(0,u.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,u.jsx)(b,{letterEntry:e},e.letter)))})}var h=t(1463);function j(e){let{tags:s,sidebar:t}=e;const i=r();return(0,u.jsxs)(l.e3,{className:(0,a.A)(n.G.wrapper.blogPages,n.G.page.blogTagsListPage),children:[(0,u.jsx)(l.be,{title:i}),(0,u.jsx)(h.A,{tag:"blog_tags_list"}),(0,u.jsxs)(c.A,{sidebar:t,children:[(0,u.jsx)(d.A,{as:"h1",children:i}),(0,u.jsx)(g,{tags:s})]})]})}},6133:(e,s,t)=>{t.d(s,{A:()=>n});t(6540);var a=t(4164),i=t(8774);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=t(4848);function n(e){let{permalink:s,label:t,count:n}=e;return(0,l.jsxs)(i.A,{href:s,className:(0,a.A)(r.tag,n?r.tagWithCount:r.tagRegular),children:[t,n&&(0,l.jsx)("span",{children:n})]})}}}]); \ No newline at end of file diff --git a/assets/js/028951d7.7a3aa692.js b/assets/js/028951d7.7a3aa692.js new file mode 100644 index 0000000000..1ff26a341a --- /dev/null +++ b/assets/js/028951d7.7a3aa692.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46255],{70539:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},13381:(e,r,n)=>{n.d(r,{Z:()=>o});var t=n(24246),s=(n(27378),n(6698));function o({url:e}){return(0,t.jsx)("div",{style:{padding:10},children:(0,t.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,t.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,n)=>{n.d(r,{Z:()=>d});var t=n(24246),s=(n(27378),n(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){a(e,r,n[r])}))}return e}function c(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function d({children:e,minHeight:r,url:n="http://localhost:3000",style:a,bodyStyle:d}){return(0,t.jsxs)("div",{className:o.browserWindow,style:c(i({},a),{minHeight:r}),children:[(0,t.jsxs)("div",{className:o.browserWindowHeader,children:[(0,t.jsxs)("div",{className:o.buttons,children:[(0,t.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(o.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:o.bar}),(0,t.jsx)("span",{className:o.bar}),(0,t.jsx)("span",{className:o.bar})]})})]}),(0,t.jsx)("div",{className:o.browserWindowBody,style:d,children:e})]})}},3818:(e,r,n)=>{n.d(r,{Z:()=>o});var t=n(24246),s=n(27378);function o({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:n}){const[o,a]=(0,s.useState)(!1);if(o)throw new Error(r,{cause:n?new Error(n):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},22497:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg"},21004:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},66819:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var t=n(24246),s=n(71670);n(6698),n(13381),n(3818);const o={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1704479518e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:n(70539).Z,authorsImageUrls:[void 0]},d=[{value:"Highlights",id:"highlights",level:2},{value:"Broken anchors checker",id:"broken-anchors-checker",level:3},{value:"<code>parseFrontMatter</code> hook",id:"parsefrontmatter-hook",level:3},{value:"Other changes",id:"other-changes",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.p,{children:["We are happy to announce ",(0,t.jsx)(r.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus blog post social card",src:n(21004).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,t.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(r.h3,{id:"broken-anchors-checker",children:"Broken anchors checker"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9528",children:"#9528"}),", we improved the built-in broken links checker to also detect broken anchors."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus blog post social card",src:n(22497).Z+"",width:"1920",height:"896"})}),"\n",(0,t.jsxs)(r.admonition,{title:"Make it fail fast",type:"tip",children:[(0,t.jsxs)(r.p,{children:["The new ",(0,t.jsx)(r.a,{href:"/docs/api/docusaurus-config#onBrokenAnchors",children:(0,t.jsx)(r.code,{children:"onBrokenAnchors"})})," option has value ",(0,t.jsx)(r.code,{children:"warn"})," by default, for retro-compatibility reasons."]}),(0,t.jsxs)(r.p,{children:["We recommend to turn it to ",(0,t.jsx)(r.code,{children:"throw"})," and fail your CI builds instead of deploying broken anchors to productions."]})]}),"\n",(0,t.jsxs)(r.admonition,{type:"note",children:[(0,t.jsxs)(r.p,{children:["For users and plugin authors implementing custom ",(0,t.jsx)(r.code,{children:"<Heading>"})," and ",(0,t.jsx)(r.code,{children:"<Link>"})," components, we provide a new ",(0,t.jsx)(r.a,{href:"/docs/docusaurus-core#useBrokenLinks",children:(0,t.jsx)(r.code,{children:"useBrokenLinks"})})," React hook API."]}),(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"Most Docusaurus users don't need to care about it"}),", built-in components (",(0,t.jsx)(r.code,{children:"docusaurus/Link"})," and ",(0,t.jsx)(r.code,{children:"@theme/Heading"}),") already use it internally."]})]}),"\n",(0,t.jsxs)(r.h3,{id:"parsefrontmatter-hook",children:[(0,t.jsx)(r.code,{children:"parseFrontMatter"})," hook"]}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9624",children:"#9624"}),", we added a new ",(0,t.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,t.jsx)(r.code,{children:"siteConfig.markdown.parseFrontMatter"})," function hook"]}),"."]}),"\n",(0,t.jsx)(r.p,{children:"This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,t.jsxs)(r.p,{children:["Read the ",(0,t.jsx)(r.a,{href:"/docs/markdown-features#front-matter",children:"front matter guide"})," and the ",(0,t.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:[(0,t.jsx)(r.code,{children:"parseFrontMatter"})," API ref"]})," for details."]}),"\n",(0,t.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9674",children:"#9674"}),": add ",(0,t.jsx)(r.code,{children:"siteConfig.markdown.remarkRehypeOptions"})," to pass options to ",(0,t.jsx)(r.code,{children:"remark-rehype"}),", letting you customize things such as MDX footnote label"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9671",children:"#9671"}),": add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9610",children:"#9610"}),": enable CLI port configuration via ",(0,t.jsx)(r.code,{children:"PORT"})," environment variable"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9477",children:"#9477"}),": complete Brazilian Portuguese (pt-BR) translations"]}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Check the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"/changelog/3.1.0",children:"3.1.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>a});var t=n(27378);const s={},o=t.createContext(s);function a(e){const r=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/02e1f9a9.adf45606.js b/assets/js/02e1f9a9.adf45606.js new file mode 100644 index 0000000000..ce3723fb40 --- /dev/null +++ b/assets/js/02e1f9a9.adf45606.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71091],{91072:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=t(24246),o=t(71670);const r={mdx:{format:"md"},date:"2019-10-21T20:00"},s="2.0.0-alpha.29",c={permalink:"/changelog/2.0.0-alpha.29",source:"@site/changelog/source/2.0.0-alpha.29.md",title:"2.0.0-alpha.29",description:"HOTFIX for 2.0.0-alpha.28.",date:"2019-10-21T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-21T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.30",permalink:"/changelog/2.0.0-alpha.30"},nextItem:{title:"2.0.0-alpha.28",permalink:"/changelog/2.0.0-alpha.28"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function p(e){const n={code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"HOTFIX for 2.0.0-alpha.28"}),"."]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Fix missing ",(0,a.jsx)(n.code,{children:"core-js"})," dependencies on ",(0,a.jsx)(n.code,{children:"@docusaurus/core"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Fix wrong ",(0,a.jsx)(n.code,{children:"@babel/env"})," preset configuration that causes build compilation error."]}),"\n",(0,a.jsx)(n.li,{children:"New UI for webpack compilation progress bar."}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var a=t(27378);const o={},r=a.createContext(o);function s(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/031793e1.aa67e2fe.js b/assets/js/031793e1.aa67e2fe.js deleted file mode 100644 index 330579aaee..0000000000 --- a/assets/js/031793e1.aa67e2fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[6334],{1794:s=>{s.exports=JSON.parse('{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/03a06760.b6e22677.js b/assets/js/03a06760.b6e22677.js new file mode 100644 index 0000000000..ac0380d881 --- /dev/null +++ b/assets/js/03a06760.b6e22677.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49406],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=g(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},e,t)),(0,r.jsx)(k,w({},e,t))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>L});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function g(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(p.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=g();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function L(e){return(0,o.jsx)("button",B(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){T(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),q=n.n($);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),W=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=(F=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},H),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(F,Object.getOwnPropertyDescriptors(G)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(G)).forEach((function(e){Object.defineProperty(F,e,Object.getOwnPropertyDescriptor(G,e))})),F);var F,G;const U=Object.keys(H);function J(e,t){const n=e.map((e=>{const{start:n,end:r}=z[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&W.test(c)){const e=c.match(W).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],t);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],t);case"html":return J(["js","jsBlock","html"],t);case"python":case"py":case"bash":return J(["bash"],t);case"markdown":case"md":return J(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return J(["tex"],t);case"lua":case"haskell":case"sql":return J(["lua"],t);case"wasm":return J(["wasm"],t);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],t);case"vbnet":return J(["vbnet","rem"],t);case"batch":return J(["rem"],t);case"basic":return J(["rem","f90"],t);case"fsharp":return J(["js","ml"],t);case"ocaml":case"sml":return J(["ml"],t);case"fortran":return J(["f90"],t);case"cobol":return J(["cobol"],t);default:return J(U,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const Le=(Te=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Be({scope:Z},e)):(0,o.jsx)(Te,Be({},e))});var Te;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Le,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},63443:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},u="\ud83d\udce6 plugin-google-analytics",d={id:"api/plugins/plugin-google-analytics",title:"\ud83d\udce6 plugin-google-analytics",description:"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.",source:"@site/docs/api/plugins/plugin-google-analytics.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,sidebarPosition:6,frontMatter:{sidebar_position:6,slug:"/api/plugins/@docusaurus/plugin-google-analytics"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"},next:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-plugin-google-analytics",children:"\ud83d\udce6 plugin-google-analytics"}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/analytics/devguides/collection/analyticsjs/",children:"Google Analytics"})," plugin. It is a JavaScript library for measuring how users interact with your website ",(0,r.jsx)(t.strong,{children:"in the production build"}),". If you are using Google Analytics 4 you might need to consider using ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"plugin-google-gtag"})," instead."]}),"\n",(0,r.jsxs)(t.admonition,{title:"Deprecated",type:"danger",children:[(0,r.jsxs)(t.p,{children:["This plugin is ",(0,r.jsx)(t.strong,{children:"deprecated"}),", and will become useless on July 1, 2023."]}),(0,r.jsxs)(t.p,{children:["Google is ",(0,r.jsx)(t.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"moving away from Universal Analytics"}),"."]}),(0,r.jsxs)(t.p,{children:["If you are still using this plugin with a ",(0,r.jsx)(t.code,{children:"UA-*"})," tracking id, you should create a Google Analytics 4 account as soon as possible, and use ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:(0,r.jsx)(t.code,{children:"@docusaurus/plugin-google-gtag"})})," instead of this plugin. More details ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"here"}),"."]})]}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-analytics\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-analytics\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your analytics service."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-analytics",presetOptionName:"googleAnalytics",code:"{\n trackingID: 'UA-141789564-1',\n anonymizeIP: true,\n}"})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/03f86864.2516ab6a.js b/assets/js/03f86864.2516ab6a.js new file mode 100644 index 0000000000..3797717b30 --- /dev/null +++ b/assets/js/03f86864.2516ab6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22054],{52605:(e,n,i)=>{i.d(n,{Z:()=>o});var d=i(24246),s=i(27378),t=i(80474),r=i(3620);const l={apiTable:"apiTable_e8hp"};function c({name:e,children:n},i){const l=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),c=e?`${e}-${l}`:l,h=`#${c}`,o=(0,r.k6)();return(0,t.Z)().collectAnchor(c),(0,d.jsx)("tr",{id:c,tabIndex:0,ref:o.location.hash===h?i:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||o.push(h)},onKeyDown:e=>{"Enter"===e.key&&o.push(h)},children:n.props.children})}const h=s.forwardRef(c);function o({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[i,t]=s.Children.toArray(e.props.children),r=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=r.current)||void 0===e||e.focus()}),[r]);const c=s.Children.map(t.props.children,(e=>(0,d.jsx)(h,{name:n,ref:r,children:e})));return(0,d.jsxs)("table",{className:l.apiTable,children:[i,(0,d.jsx)("tbody",{children:c})]})}},22091:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>x,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var d=i(24246),s=i(71670),t=i(52605);const r={sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},l="Theme configuration",c={id:"api/themes/theme-configuration",title:"Theme configuration",description:"This configuration applies to all main themes.",source:"@site/docs/api/themes/theme-configuration.mdx",sourceDirName:"api/themes",slug:"/api/themes/configuration",permalink:"/docs/api/themes/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_label:"Configuration",slug:"/api/themes/configuration",toc_max_heading_level:4},sidebar:"api",previous:{title:"Themes overview",permalink:"/docs/api/themes"},next:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"}},h={},o=[{value:"Common",id:"common",level:2},{value:"Color mode",id:"color-mode---dark-mode",level:3},{value:"Meta image",id:"meta-image",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Announcement bar",id:"announcement-bar",level:3},{value:"Navbar",id:"navbar",level:2},{value:"Navbar logo",id:"navbar-logo",level:3},{value:"Navbar items",id:"navbar-items",level:3},{value:"Navbar link",id:"navbar-link",level:4},{value:"Navbar dropdown",id:"navbar-dropdown",level:4},{value:"Navbar doc link",id:"navbar-doc-link",level:4},{value:"Navbar linked to a sidebar",id:"navbar-doc-sidebar",level:4},{value:"Navbar docs version dropdown",id:"navbar-docs-version-dropdown",level:4},{value:"Navbar docs version",id:"navbar-docs-version",level:4},{value:"Navbar locale dropdown",id:"navbar-locale-dropdown",level:4},{value:"Navbar search",id:"navbar-search",level:4},{value:"Navbar with custom HTML",id:"navbar-with-custom-html",level:4},{value:"Auto-hide sticky navbar",id:"auto-hide-sticky-navbar",level:3},{value:"Navbar style",id:"navbar-style",level:3},{value:"CodeBlock",id:"codeblock",level:2},{value:"Theme",id:"theme",level:3},{value:"Default language",id:"default-language",level:3},{value:"Footer",id:"footer-1",level:2},{value:"Footer Links",id:"footer-links",level:3},{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Hooks",id:"hooks",level:2},{value:"<code>useColorMode</code>",id:"use-color-mode",level:3},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.h1,{id:"theme-configuration",children:"Theme configuration"}),"\n","\n",(0,d.jsxs)(n.p,{children:["This configuration applies to all ",(0,d.jsx)(n.a,{href:"/docs/api/themes",children:"main themes"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"common",children:"Common"}),"\n",(0,d.jsx)(n.h3,{id:"color-mode---dark-mode",children:"Color mode"}),"\n",(0,d.jsx)(n.p,{children:"The classic theme provides by default light and dark mode support, with a navbar switch for the user."}),"\n",(0,d.jsxs)(n.p,{children:["It is possible to customize the color mode support within the ",(0,d.jsx)(n.code,{children:"colorMode"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultMode"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'light' | 'dark'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color mode when user first visits the site."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"disableSwitch"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Hides the switch in the navbar. Useful if you want to support a single color mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"respectPrefersColorScheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Whether to use the ",(0,d.jsx)(n.code,{children:"prefers-color-scheme"})," media-query, using user system preferences, instead of the hardcoded ",(0,d.jsx)(n.code,{children:"defaultMode"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n colorMode: {\n defaultMode: 'light',\n disableSwitch: false,\n respectPrefersColorScheme: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"warning",children:[(0,d.jsxs)(n.p,{children:["With ",(0,d.jsx)(n.code,{children:"respectPrefersColorScheme: true"}),", the ",(0,d.jsx)(n.code,{children:"defaultMode"})," is overridden by user system preferences."]}),(0,d.jsx)(n.p,{children:"If you only want to support one color mode, you likely want to ignore user system preferences."})]}),"\n",(0,d.jsx)(n.h3,{id:"meta-image",children:"Meta image"}),"\n",(0,d.jsxs)(n.p,{children:["You can configure a default image that will be used for your meta tag, in particular ",(0,d.jsx)(n.code,{children:"og:image"})," and ",(0,d.jsx)(n.code,{children:"twitter:image"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"image"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:'The meta image URL for the site. Relative to your site\'s "static" directory. Cannot be SVGs. Can be external URLs too.'})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n image: 'img/docusaurus.png',\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"metadata",children:"Metadata"}),"\n",(0,d.jsx)(n.p,{children:"You can configure additional HTML metadata (and override existing ones)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsx)(n.tbody,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"metadata"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Metadata[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsxs)(n.td,{children:["Any field will be directly passed to the ",(0,d.jsx)(n.code,{children:"<meta />"})," tag. Possible fields include ",(0,d.jsx)(n.code,{children:"id"}),", ",(0,d.jsx)(n.code,{children:"name"}),", ",(0,d.jsx)(n.code,{children:"property"}),", ",(0,d.jsx)(n.code,{children:"content"}),", ",(0,d.jsx)(n.code,{children:"itemprop"}),", etc."]})]})})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-next-line\n metadata: [{name: 'twitter:card', content: 'summary'}],\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"announcement-bar",children:"Announcement bar"}),"\n",(0,d.jsxs)(n.p,{children:["Sometimes you want to announce something in your website. Just for such a case, you can add an announcement bar. This is a non-fixed and optionally dismissible panel above the navbar. All configuration are in the ",(0,d.jsx)(n.code,{children:"announcementBar"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"announcement-bar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"id"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'announcement-bar'"})}),(0,d.jsx)(n.td,{children:"Any value that will identify this message."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"content"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"The text content of the announcement. HTML will be interpolated."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"backgroundColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#fff'"})}),(0,d.jsx)(n.td,{children:"Background color of the entire bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"textColor"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'#000'"})}),(0,d.jsx)(n.td,{children:"Announcement text color."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"isCloseable"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"true"})}),(0,d.jsx)(n.td,{children:"Whether this announcement can be dismissed with a '\xd7' button."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n announcementBar: {\n id: 'support_us',\n content:\n 'We are looking to revamp our docs, please fill <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"#\">this survey</a>',\n backgroundColor: '#fafbfc',\n textColor: '#091E42',\n isCloseable: false,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"navbar",children:"Navbar"}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-overview",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Title for the navbar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"See below"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Customization of the logo object."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"NavbarItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"A list of navbar items. See specification below."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"hideOnScroll"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Whether the navbar is hidden when the user scrolls down."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'primary' | 'dark'"})}),(0,d.jsx)(n.td,{children:"Same as theme"}),(0,d.jsx)(n.td,{children:"Sets the navbar style, ignoring the dark/light theme."})]})]})]})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-logo",children:"Navbar logo"}),"\n",(0,d.jsxs)(n.p,{children:["The logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL is set to base URL of your site by default. Although you can specify your own URL for the logo, if it is an external link, it will open in a new tab. In addition, you can override a value for the target attribute of logo link, it can come in handy if you are hosting docs website in a subdirectory of your main website, and in which case you probably do not need a link in the logo to the main website will open in a new tab."]}),"\n",(0,d.jsx)(n.p,{children:"To improve dark mode support, you can also set a different logo for this mode."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-logo",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"alt"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Alt tag for the logo image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"src"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"URL to the logo image. Base URL is appended by default."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"srcDark"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo.src"})}),(0,d.jsx)(n.td,{children:"An alternative image URL to use in dark mode."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"siteConfig.baseUrl"})}),(0,d.jsx)(n.td,{children:"Link to navigate to when the logo is clicked."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"width"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"width"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"height"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"string | number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Specifies the ",(0,d.jsx)(n.code,{children:"height"})," attribute."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"target"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:["Calculated based on ",(0,d.jsx)(n.code,{children:"href"})," (external links will open in a new tab, all others in the current one)."]}),(0,d.jsxs)(n.td,{children:["The ",(0,d.jsx)(n.code,{children:"target"})," attribute of the link; controls whether the link is opened in a new tab, the current one, or otherwise."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS class applied to the image."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"object"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"CSS inline style object. React/JSX flavor, using camelCase properties."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n title: 'Site Title',\n // highlight-start\n logo: {\n alt: 'Site Logo',\n src: 'img/logo.svg',\n srcDark: 'img/logo_dark.svg',\n href: 'https://docusaurus.io/',\n target: '_self',\n width: 32,\n height: 32,\n className: 'custom-navbar-logo-class',\n style: {border: 'solid red'},\n },\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-items",children:"Navbar items"}),"\n",(0,d.jsxs)(n.p,{children:["You can add items to the navbar via ",(0,d.jsx)(n.code,{children:"themeConfig.navbar.items"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-start\n items: [\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n {to: 'blog', label: 'Blog', position: 'left'},\n {\n type: 'docsVersionDropdown',\n position: 'right',\n },\n {\n type: 'localeDropdown',\n position: 'right',\n },\n {\n href: 'https://github.com/facebook/docusaurus',\n position: 'right',\n className: 'header-github-link',\n 'aria-label': 'GitHub repository',\n },\n ],\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["The items can have different behaviors based on the ",(0,d.jsx)(n.code,{children:"type"})," field. The sections below will introduce you to all the types of navbar items available."]}),"\n",(0,d.jsx)(n.h4,{id:"navbar-link",children:"Navbar link"}),"\n",(0,d.jsx)(n.p,{children:"By default, Navbar items are regular links (internal or external)."}),"\n",(0,d.jsxs)(n.p,{children:["React Router should automatically apply active link styling to links, but you can use ",(0,d.jsx)(n.code,{children:"activeBasePath"})," in edge cases. For cases in which a link should be active on several different paths (such as when you have multiple doc folders under the same sidebar), you can use ",(0,d.jsx)(n.code,{children:"activeBaseRegex"}),". ",(0,d.jsx)(n.code,{children:"activeBaseRegex"})," is a more flexible alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," and takes precedence over it -- Docusaurus parses it into a regular expression that is tested against the current URL."]}),"\n",(0,d.jsxs)(n.p,{children:["Outbound (external) links automatically get ",(0,d.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'})," attributes."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsxs)(n.td,{children:["Same as ",(0,d.jsx)(n.code,{children:"label"}),", but renders pure HTML instead of text content."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"prependBaseUrlToHref"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsxs)(n.td,{children:["Prepends the baseUrl to ",(0,d.jsx)(n.code,{children:"href"})," values."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBasePath"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsxs)(n.td,{children:[(0,d.jsx)(n.code,{children:"to"})," / ",(0,d.jsx)(n.code,{children:"href"})]}),(0,d.jsx)(n.td,{children:"To apply the active class styling on all routes starting with this path. This usually isn't necessary."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"activeBaseRegex"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Alternative to ",(0,d.jsx)(n.code,{children:"activeBasePath"})," if required."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class (for styling any item)."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsx)(n.p,{children:"In addition to the fields above, you can specify other arbitrary attributes that can be applied to a HTML link."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n to: 'docs/introduction',\n // Only one of \"to\" or \"href\" should be used\n // href: 'https://www.facebook.com',\n label: 'Introduction',\n // Only one of \"label\" or \"html\" should be used\n // html: '<b>Introduction</b>'\n position: 'left',\n activeBaseRegex: 'docs/(next|v8)',\n target: '_blank',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-dropdown",children:"Navbar dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["Navbar items of the type ",(0,d.jsx)(n.code,{children:"dropdown"})," has the additional ",(0,d.jsx)(n.code,{children:"items"})," field, an inner array of navbar items."]}),"\n",(0,d.jsxs)(n.p,{children:["Navbar dropdown items only accept the following ",(0,d.jsx)(n.strong,{children:'"link-like" item types'}),":"]}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-link",children:"Navbar link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-link",children:"Navbar doc link"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-docs-version",children:"Navbar docs version"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-doc-sidebar",children:"Navbar doc sidebar"})}),"\n",(0,d.jsx)(n.li,{children:(0,d.jsx)(n.a,{href:"#navbar-with-custom-html",children:"Navbar with custom HTML"})}),"\n"]}),"\n",(0,d.jsxs)(n.p,{children:["Note that the dropdown base item is a clickable link as well, so this item can receive any of the props of a ",(0,d.jsx)(n.a,{href:"#navbar-link",children:"plain navbar link"}),"."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'dropdown'"})}),(0,d.jsx)(n.td,{children:"Optional"}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The items to be contained in the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'dropdown',\n label: 'Community',\n position: 'left',\n items: [\n {\n label: 'Facebook',\n href: 'https://www.facebook.com',\n },\n {\n type: 'doc',\n label: 'Social',\n docId: 'social',\n },\n // ... more items\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-link",children:"Navbar doc link"}),"\n",(0,d.jsxs)(n.p,{children:["If you want to link to a specific doc, this special navbar item type will render the link to the doc of the provided ",(0,d.jsx)(n.code,{children:"docId"}),". It will get the class ",(0,d.jsx)(n.code,{children:"navbar__link--active"})," as long as you browse a doc of the same sidebar."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-link",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'doc'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the doc that this item links to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docId"})}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'doc',\n position: 'left',\n docId: 'introduction',\n label: 'Docs',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-doc-sidebar",children:"Navbar linked to a sidebar"}),"\n",(0,d.jsx)(n.p,{children:"You can link a navbar item to the first document link (which can be a doc link or a generated category index) of a given sidebar without having to hardcode a doc ID."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-doc-sidebar",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docSidebar'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this navbar item to a sidebar's first document."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"sidebarId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"The ID of the sidebar that this item is linked to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"First document link's sidebar label"}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the sidebar belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.admonition,{type:"tip",children:(0,d.jsx)(n.p,{children:"Use this navbar item type if your sidebar is updated often and the order is not stable."})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docSidebar',\n position: 'left',\n sidebarId: 'api',\n label: 'API',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n tutorial: [\n {\n type: 'autogenerated',\n dirName: 'guides',\n },\n ],\n api: [\n // highlight-next-line\n 'cli', // The navbar item will be linking to this doc\n 'docusaurus-core',\n {\n type: 'autogenerated',\n dirName: 'api',\n },\n ],\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version-dropdown",children:"Navbar docs version dropdown"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type that will render a dropdown with all your site's available versions."}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one version to another, while staying on the same doc (as long as the doc ID is constant across versions)."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersionDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a docs version dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownActiveClassDisabled"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"boolean"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"false"})}),(0,d.jsx)(n.td,{children:"Do not add the link active class when browsing docs."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersionDropdown',\n position: 'left',\n dropdownItemsAfter: [{to: '/versions', label: 'All versions'}],\n dropdownActiveClassDisabled: true,\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-docs-version",children:"Navbar docs version"}),"\n",(0,d.jsx)(n.p,{children:"If you use docs with versioning, this special navbar item type will link to the active/browsed version of your doc (depends on the current URL), and fallback to the latest version."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-docs-version",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'docsVersion'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a doc version link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version label."}),(0,d.jsx)(n.td,{children:"The name to be shown for this item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"The active/latest version."}),(0,d.jsx)(n.td,{children:"The internal link that this item points to."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"docsPluginId"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'default'"})}),(0,d.jsx)(n.td,{children:"The ID of the docs plugin that the doc versioning belongs to."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'docsVersion',\n position: 'left',\n to: '/path',\n label: 'label',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-locale-dropdown",children:"Navbar locale dropdown"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n feature"}),", this special navbar item type will render a dropdown with all your site's available locales."]}),"\n",(0,d.jsx)(n.p,{children:"The user will be able to switch from one locale to another, while staying on the same page."}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"navbar-locale-dropdown",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'localeDropdown'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a locale dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsBefore"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the beginning of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"dropdownItemsAfter"})}),(0,d.jsx)(n.td,{children:(0,d.jsxs)("code",{children:[(0,d.jsx)(n.a,{href:"#navbar-dropdown",children:"LinkLikeItem"}),"[]"]})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Add additional dropdown items at the end of the dropdown."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"queryString"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The query string to be appended to the URL."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'localeDropdown',\n position: 'left',\n dropdownItemsAfter: [\n {\n to: 'https://my-site.com/help-us-translate',\n label: 'Help us translate',\n },\n ],\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-search",children:"Navbar search"}),"\n",(0,d.jsxs)(n.p,{children:["If you use the ",(0,d.jsx)(n.a,{href:"/docs/search",children:"search"}),", the search bar will be the rightmost element in the navbar."]}),"\n",(0,d.jsx)(n.p,{children:"However, with this special navbar item type, you can change the default location."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-search",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'search'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a search bar."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:"/"}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'search',\n position: 'right',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h4,{id:"navbar-with-custom-html",children:"Navbar with custom HTML"}),"\n",(0,d.jsx)(n.p,{children:"You can also render your own HTML markup inside a navbar item using this navbar item type."}),"\n",(0,d.jsx)(t.Z,{name:"navbar-html",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"type"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'html'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Sets the type of this item to a HTML element."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"position"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'left' | 'right'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'left'"})}),(0,d.jsx)(n.td,{children:"The side of the navbar this item should appear on."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"className"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom CSS class for this navbar item."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"value"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"''"})}),(0,d.jsx)(n.td,{children:"Custom HTML to be rendered inside this navbar item."})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n // highlight-start\n {\n type: 'html',\n position: 'right',\n value: '<button>Give feedback</button>',\n },\n // highlight-end\n ],\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"auto-hide-sticky-navbar",children:"Auto-hide sticky navbar"}),"\n",(0,d.jsx)(n.p,{children:"You can enable this cool UI feature that automatically hides the navbar when a user starts scrolling down the page, and show it again when the user scrolls up."}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n hideOnScroll: true,\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"navbar-style",children:"Navbar style"}),"\n",(0,d.jsx)(n.p,{children:"You can set the static Navbar style without disabling the theme switching ability. The selected style will always apply no matter which theme user have selected."}),"\n",(0,d.jsxs)(n.p,{children:["Currently, there are two possible style options: ",(0,d.jsx)(n.code,{children:"dark"})," and ",(0,d.jsx)(n.code,{children:"primary"})," (based on the ",(0,d.jsx)(n.code,{children:"--ifm-color-primary"})," color). You can see the styles preview in the ",(0,d.jsx)(n.a,{href:"https://infima.dev/docs/components/navbar/",children:"Infima documentation"}),"."]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n // highlight-next-line\n style: 'primary',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"codeblock",children:"CodeBlock"}),"\n",(0,d.jsxs)(n.p,{children:["Docusaurus uses ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"})," to highlight code blocks. All configuration are in the ",(0,d.jsx)(n.code,{children:"prism"})," object."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"codeblock",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"theme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for light-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"darkTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"PrismTheme"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"palenight"})}),(0,d.jsx)(n.td,{children:"The Prism theme to use for dark-theme code blocks."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"defaultLanguage"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The default language to use for code blocks not declaring any explicit language."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"magicComments"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"MagicCommentConfig[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.em,{children:"see below"})}),(0,d.jsxs)(n.td,{children:["The list of ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"}),"."]})]})]})]})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-ts",children:"type MagicCommentConfig = {\n className: string;\n line?: string;\n block?: {start: string; end: string};\n};\n"})}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",children:"const defaultMagicComments = [\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n];\n"})}),"\n",(0,d.jsx)(n.h3,{id:"theme",children:"Theme"}),"\n",(0,d.jsxs)(n.p,{children:["By default, we use ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"})," as syntax highlighting theme. You can specify a custom theme from the ",(0,d.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/tree/master/packages/prism-react-renderer/src/themes",children:"list of available themes"}),". You may also use a different syntax highlighting theme when the site is in dark mode."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-start\n theme: prismThemes.github,\n darkTheme: prismThemes.dracula,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.admonition,{type:"note",children:(0,d.jsxs)(n.p,{children:["If you use the line highlighting Markdown syntax, you might need to specify a different highlight background color for the dark mode syntax highlighting theme. Refer to the ",(0,d.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#line-highlighting",children:"docs for guidance"}),"."]})}),"\n",(0,d.jsx)(n.h3,{id:"default-language",children:"Default language"}),"\n",(0,d.jsxs)(n.p,{children:["You can set a default language for code blocks if no language is added after the opening triple backticks (i.e. ```). Note that a valid ",(0,d.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"language name"})," must be passed."]}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n prism: {\n // highlight-next-line\n defaultLanguage: 'javascript',\n },\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"footer-1",children:"Footer"}),"\n",(0,d.jsxs)(n.p,{children:["You can add logo and a copyright to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer"}),". Logo can be placed in ",(0,d.jsx)(n.a,{href:"/docs/static-assets",children:"static folder"}),". Logo URL works in the same way of the navbar logo."]}),"\n",(0,d.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,d.jsx)(t.Z,{name:"footer",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"Logo"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Customization of the logo object. See ",(0,d.jsx)(n.a,{href:"#navbar-logo",children:"Navbar logo"})," for details."]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"copyright"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"The copyright message to be displayed at the bottom, also supports custom HTML."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"style"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"'dark' | 'light'"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"'light'"})}),(0,d.jsx)(n.td,{children:"The color theme of the footer component."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"links"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)("code",{children:"(Column | FooterLink)[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"The link groups to be present."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n footer: {\n logo: {\n alt: 'Meta Open Source Logo',\n src: 'img/meta_oss_logo.png',\n href: 'https://opensource.fb.com',\n width: 160,\n height: 51,\n },\n copyright: `Copyright \xa9 ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h3,{id:"footer-links",children:"Footer Links"}),"\n",(0,d.jsxs)(n.p,{children:["You can add links to the footer via ",(0,d.jsx)(n.code,{children:"themeConfig.footer.links"}),". There are two types of footer configurations: ",(0,d.jsx)(n.strong,{children:"multi-column footers"})," and ",(0,d.jsx)(n.strong,{children:"simple footers"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:["Multi-column footer links have a ",(0,d.jsx)(n.code,{children:"title"})," and a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s for each column."]}),"\n",(0,d.jsx)(t.Z,{name:"footer-links",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"title"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsx)(n.td,{children:"Label of the section of these links."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"items"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"FooterItem[]"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"[]"})}),(0,d.jsx)(n.td,{children:"Links in this section."})]})]})]})}),"\n",(0,d.jsxs)(n.p,{children:["Accepted fields of each ",(0,d.jsx)(n.code,{children:"FooterItem"}),":"]}),"\n",(0,d.jsx)(t.Z,{name:"footer-items",children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"label"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Text to be displayed for this link."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"to"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsx)(n.td,{children:"Client-side routing, used for navigating within the website. The baseUrl will be automatically prepended to this value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"href"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.strong,{children:"Required"})}),(0,d.jsxs)(n.td,{children:["A full-page navigation, used for navigating outside of the website. ",(0,d.jsxs)(n.strong,{children:["Only one of ",(0,d.jsx)(n.code,{children:"to"})," or ",(0,d.jsx)(n.code,{children:"href"})," should be used."]})]})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"html"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"string"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"undefined"})}),(0,d.jsxs)(n.td,{children:["Renders the HTML pass-through instead of a simple link. In case ",(0,d.jsx)(n.code,{children:"html"})," is used, no other options should be provided."]})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example multi-column configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n footer: {\n // highlight-start\n links: [\n {\n title: 'Docs',\n items: [\n {\n label: 'Style Guide',\n to: 'docs/',\n },\n {\n label: 'Second Doc',\n to: 'docs/doc2/',\n },\n ],\n },\n {\n title: 'Community',\n items: [\n {\n label: 'Stack Overflow',\n href: 'https://stackoverflow.com/questions/tagged/docusaurus',\n },\n {\n label: 'Discord',\n href: 'https://discordapp.com/invite/docusaurus',\n },\n {\n label: 'Twitter',\n href: 'https://twitter.com/docusaurus',\n },\n {\n html: `\n <a href=\"https://www.netlify.com\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Deploys by Netlify\">\n <img src=\"https://www.netlify.com/img/global/badges/netlify-color-accent.svg\" alt=\"Deploys by Netlify\" width=\"114\" height=\"51\" />\n </a>\n `,\n },\n ],\n },\n ],\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsxs)(n.p,{children:["A simple footer just has a list of ",(0,d.jsx)(n.code,{children:"FooterItem"}),"s displayed in a row."]}),"\n",(0,d.jsx)(n.p,{children:"Example simple configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:'export default {\n footer: {\n // highlight-start\n links: [\n {\n label: \'Stack Overflow\',\n href: \'https://stackoverflow.com/questions/tagged/docusaurus\',\n },\n {\n label: \'Discord\',\n href: \'https://discordapp.com/invite/docusaurus\',\n },\n {\n label: \'Twitter\',\n href: \'https://twitter.com/docusaurus\',\n },\n {\n html: `\n <a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">\n <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51" />\n </a>\n `,\n },\n ],\n // highlight-end\n },\n};\n'})}),"\n",(0,d.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,d.jsxs)(n.p,{children:["You can adjust the default table of contents via ",(0,d.jsx)(n.code,{children:"themeConfig.tableOfContents"}),"."]}),"\n",(0,d.jsx)(t.Z,{children:(0,d.jsxs)(n.table,{children:[(0,d.jsx)(n.thead,{children:(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.th,{children:"Name"}),(0,d.jsx)(n.th,{children:"Type"}),(0,d.jsx)(n.th,{children:"Default"}),(0,d.jsx)(n.th,{children:"Description"})]})}),(0,d.jsxs)(n.tbody,{children:[(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"minHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"2"})}),(0,d.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,d.jsxs)(n.tr,{children:[(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"maxHeadingLevel"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"number"})}),(0,d.jsx)(n.td,{children:(0,d.jsx)(n.code,{children:"3"})}),(0,d.jsx)(n.td,{children:"Max heading level displayed in the TOC. Should be an integer between 2 and 6."})]})]})]})}),"\n",(0,d.jsx)(n.p,{children:"Example configuration:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // highlight-start\n tableOfContents: {\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,d.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,d.jsx)(n.h3,{id:"use-color-mode",children:(0,d.jsx)(n.code,{children:"useColorMode"})}),"\n",(0,d.jsx)(n.p,{children:"A React hook to access the color context. This context contains functions for setting light and dark mode and exposes boolean variable, indicating which mode is currently in use."}),"\n",(0,d.jsx)(n.p,{children:"Usage example:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useColorMode} from '@docusaurus/theme-common';\n\nconst Example = () => {\n // highlight-next-line\n const {colorMode, setColorMode} = useColorMode();\n\n return <h1>Dark mode is now {colorMode === 'dark' ? 'on' : 'off'}</h1>;\n};\n"})}),"\n",(0,d.jsxs)(n.admonition,{type:"note",children:[(0,d.jsxs)(n.p,{children:["The component calling ",(0,d.jsx)(n.code,{children:"useColorMode"})," must be a child of the ",(0,d.jsx)(n.code,{children:"Layout"})," component."]}),(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-jsx",children:"function ExamplePage() {\n return (\n <Layout>\n <Example />\n </Layout>\n );\n}\n"})})]}),"\n",(0,d.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,d.jsxs)(n.p,{children:["Read the ",(0,d.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,d.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Base path"}),": ",(0,d.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-theme-[themeName]"})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Multi-instance path"}),": N/A"]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,d.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,d.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,d.jsxs)(n.li,{children:[(0,d.jsx)(n.strong,{children:"Markdown files"}),": N/A"]}),"\n"]}),"\n",(0,d.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-theme-classic\n\u2502\n\u2502 # translations for the theme\n\u251c\u2500\u2500 navbar.json\n\u2514\u2500\u2500 footer.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(a,{...e})}):a(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var d=i(27378);const s={},t=d.createContext(s);function r(e){const n=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/048b0d50.9f462b00.js b/assets/js/048b0d50.9f462b00.js new file mode 100644 index 0000000000..59d2f7aa23 --- /dev/null +++ b/assets/js/048b0d50.9f462b00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45173],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(24246),r=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>C});var a=t(24246),r=t(27378),i=t(40624),o=t(75527),s=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:a}})=>({value:e,label:n,attributes:t,default:a})))}(t);return function(e){const n=(0,u.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const t=(0,s.k6)(),a=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(a),o=(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){m(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[a,t]);return[i,o]}function v(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,i=g(e),[o,s]=(0,r.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const a=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[c,u]=b({queryString:t,groupId:a}),[m,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,a]=(0,d.Nk)(n);return[t,(0,r.useCallback)((e=>{n&&a.set(e)}),[n,a])]}({groupId:a}),p=(()=>{const e=null!=c?c:m;return f({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&s(p)}),[p]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),h(e)}),[u,h,i]),tabValues:i}}var x=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function k(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},a=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),a.forEach((function(n){k(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:r,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,a=l.indexOf(n),i=s[a].value;i!==t&&(c(n),r(i))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[a])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var a;n=null!==(a=l[t])&&void 0!==a?a:l[l.length-1];break}}null==n||n.focus()};return(0,a.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:r})=>(0,a.jsx)("li",w(j({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},r),{className:(0,i.Z)("tabs__item",y.tabItem,null==r?void 0:r.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function q({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,a.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=v(e);return(0,a.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,a.jsx)(O,j({},e,n)),(0,a.jsx)(q,j({},e,n))]})}function C(e){const n=(0,x.Z)();return(0,a.jsx)(D,w(j({},e),{children:p(e.children)}),String(n))}},16697:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=t(24246),r=t(71670),i=t(97555),o=t(61132);const s={},l="Diagram Examples",c={type:"mdx",permalink:"/tests/pages/diagrams",source:"@site/_dogfooding/_pages tests/diagrams.mdx",title:"Diagram Examples",description:"Invalid Diagrams",frontMatter:{},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694704987e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx",unlisted:!1},u={},d=[{value:"Invalid Diagrams",id:"invalid-diagrams",level:2},{value:"Invalid type",id:"invalid-type",level:3},{value:"Invalid content",id:"invalid-content",level:3},{value:"Sequence Diagram",id:"sequence-diagram",level:2},{value:"Sequence Diagram (forest theme directive)",id:"sequence-diagram-forest-theme-directive",level:2},{value:"Gantt Chart",id:"gantt-chart",level:2},{value:"Flow Chart",id:"flow-chart",level:2},{value:"With Markdown:",id:"with-markdown",level:3},{value:"Class Diagram",id:"class-diagram",level:2},{value:"State Diagram",id:"state-diagram",level:2},{value:"Entity Relationship Diagram",id:"entity-relationship-diagram",level:2},{value:"User Journey",id:"user-journey",level:2},{value:"Pie Chart",id:"pie-chart",level:2},{value:"Requirement Diagram",id:"requirement-diagram",level:2},{value:"Gitgraph (Git) Diagram",id:"gitgraph-git-diagram",level:2},{value:"Mermaid in tabs",id:"mermaid-in-tabs",level:2},{value:"Mindmap",id:"mindmap",level:2},{value:"Quadrant Chart",id:"quadrant-chart",level:2}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",mermaid:"mermaid",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"diagram-examples",children:"Diagram Examples"}),"\n",(0,a.jsx)(n.h2,{id:"invalid-diagrams",children:"Invalid Diagrams"}),"\n",(0,a.jsx)(n.p,{children:"Those errors should not crash the whole page"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-type",children:"Invalid type"}),"\n",(0,a.jsx)(n.mermaid,{value:"badType\n participant Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h3,{id:"invalid-content",children:"Invalid content"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n badInstruction Alice\n participant Bob"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram",children:"Sequence Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,a.jsx)(n.h2,{id:"sequence-diagram-forest-theme-directive",children:"Sequence Diagram (forest theme directive)"}),"\n",(0,a.jsx)(n.p,{children:"It is possible to override default config locally with Mermaid text directives such as:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:'%%{init: { "theme": "forest" } }%%\n'})}),"\n",(0,a.jsx)(n.mermaid,{value:'%%{init: { "theme": "forest" } }%%\n\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!'}),"\n",(0,a.jsx)(n.h2,{id:"gantt-chart",children:"Gantt Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"gantt\ndateFormat YYYY-MM-DD\ntitle Adding GANTT diagram to mermaid\nexcludes weekdays 2014-01-10\n\nsection A section\nCompleted task :done, des1, 2014-01-06,2014-01-08\nActive task :active, des2, 2014-01-09, 3d\nFuture task : des3, after des2, 5d\nFuture task2 : des4, after des3, 5d"}),"\n",(0,a.jsx)(n.h2,{id:"flow-chart",children:"Flow Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"flowchart TD\n A[Start] --\x3e B{Is it?}\n B --\x3e|Yes| C[OK]\n C --\x3e D[Rethink]\n D --\x3e B\n B ----\x3e|No| E[End]"}),"\n",(0,a.jsx)(n.h3,{id:"with-markdown",children:"With Markdown:"}),"\n",(0,a.jsx)(n.mermaid,{value:'flowchart LR\n markdown["`This **is** _Markdown_`"]\n newLines["`Line1\n Line 2\n Line 3`"]\n markdown --\x3e newLines'}),"\n",(0,a.jsx)(n.h2,{id:"class-diagram",children:"Class Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:" classDiagram\n Animal <|-- Duck\n Animal <|-- Fish\n Animal <|-- Zebra\n Animal : +int age\n Animal : +String gender\n Animal: +isMammal()\n Animal: +mate()\n class Duck{\n +String beakColor\n +swim()\n +quack()\n }\n class Fish{\n -int sizeInFeet\n -canEat()\n }\n class Zebra{\n +bool is_wild\n +run()\n }"}),"\n",(0,a.jsx)(n.h2,{id:"state-diagram",children:"State Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"stateDiagram-v2\n [*] --\x3e Active\n\n state Active {\n [*] --\x3e NumLockOff\n NumLockOff --\x3e NumLockOn : EvNumLockPressed\n NumLockOn --\x3e NumLockOff : EvNumLockPressed\n --\n [*] --\x3e CapsLockOff\n CapsLockOff --\x3e CapsLockOn : EvCapsLockPressed\n CapsLockOn --\x3e CapsLockOff : EvCapsLockPressed\n --\n [*] --\x3e ScrollLockOff\n ScrollLockOff --\x3e ScrollLockOn : EvScrollLockPressed\n ScrollLockOn --\x3e ScrollLockOff : EvScrollLockPressed\n }"}),"\n",(0,a.jsx)(n.h2,{id:"entity-relationship-diagram",children:"Entity Relationship Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"erDiagram\n CAR ||--o{ NAMED-DRIVER : allows\n CAR {\n string registrationNumber\n string make\n string model\n }\n PERSON ||--o{ NAMED-DRIVER : is\n PERSON {\n string firstName\n string lastName\n int age\n }"}),"\n",(0,a.jsx)(n.h2,{id:"user-journey",children:"User Journey"}),"\n",(0,a.jsx)(n.mermaid,{value:"journey\n title My working day\n section Go to work\n Make tea: 5: Me\n Go upstairs: 3: Me\n Do work: 1: Me, Cat\n section Go home\n Go downstairs: 5: Me\n Sit down: 5: Me"}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If there's too much space above it's due to a ",(0,a.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/issues/3501",children:"Mermaid bug"})]})}),"\n",(0,a.jsx)(n.h2,{id:"pie-chart",children:"Pie Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:'pie showData\n title Key elements in Product X\n "Calcium" : 42.96\n "Potassium" : 50.05\n "Magnesium" : 10.01\n "Iron" : 5'}),"\n",(0,a.jsx)(n.h2,{id:"requirement-diagram",children:"Requirement Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:' requirementDiagram\n\n requirement test_req {\n id: 1\n text: the test text.\n risk: high\n verifymethod: test\n }\n\n functionalRequirement test_req2 {\n id: 1.1\n text: the second test text.\n risk: low\n verifymethod: inspection\n }\n\n performanceRequirement test_req3 {\n id: 1.2\n text: the third test text.\n risk: medium\n verifymethod: demonstration\n }\n\n interfaceRequirement test_req4 {\n id: 1.2.1\n text: the fourth test text.\n risk: medium\n verifymethod: analysis\n }\n\n physicalRequirement test_req5 {\n id: 1.2.2\n text: the fifth test text.\n risk: medium\n verifymethod: analysis\n }\n\n designConstraint test_req6 {\n id: 1.2.3\n text: the sixth test text.\n risk: medium\n verifymethod: analysis\n }\n\n element test_entity {\n type: simulation\n }\n\n element test_entity2 {\n type: word doc\n docRef: reqs/test_entity\n }\n\n element test_entity3 {\n type: "test suite"\n docRef: github.com/all_the_tests\n }\n\n\n test_entity - satisfies -> test_req2\n test_req - traces -> test_req2\n test_req - contains -> test_req3\n test_req3 - contains -> test_req4\n test_req4 - derives -> test_req5\n test_req5 - refines -> test_req6\n test_entity3 - verifies -> test_req5\n test_req <- copies - test_entity2'}),"\n",(0,a.jsx)(n.h2,{id:"gitgraph-git-diagram",children:"Gitgraph (Git) Diagram"}),"\n",(0,a.jsx)(n.mermaid,{value:"%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%\n gitGraph\n commit\n branch hotfix\n checkout hotfix\n commit\n branch develop\n checkout develop\n commit id:\"ash\" tag:\"abc\"\n branch featureB\n checkout featureB\n commit type:HIGHLIGHT\n checkout main\n checkout hotfix\n commit type:NORMAL\n checkout develop\n commit type:REVERSE\n checkout featureB\n commit\n checkout main\n merge hotfix\n checkout featureB\n commit\n checkout develop\n branch featureA\n commit\n checkout develop\n merge hotfix\n checkout featureA\n commit\n checkout featureB\n commit\n checkout develop\n merge featureA\n branch release\n checkout release\n commit\n checkout main\n commit\n checkout release\n merge main\n checkout develop\n merge release"}),"\n",(0,a.jsx)(n.h2,{id:"mermaid-in-tabs",children:"Mermaid in tabs"}),"\n","\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsxs)(o.Z,{value:"tab-a",children:[(0,a.jsx)(n.p,{children:"The following mermaid diagram is shown:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n a ---\x3e c(10)\n b ---\x3e c(10)"})]}),(0,a.jsxs)(o.Z,{value:"tab-b",children:[(0,a.jsx)(n.p,{children:"This mermaid diagram is not displayed:"}),(0,a.jsx)(n.mermaid,{value:"graph LR\n d ---\x3e z(42)\n e ---\x3e z(42)"})]})]}),"\n",(0,a.jsx)(n.h2,{id:"mindmap",children:"Mindmap"}),"\n",(0,a.jsx)(n.mermaid,{value:"mindmap\n root((conda-forge))\n (Repos)\n (Package building)\n [*-feedstock]\n [staged-recipes]\n [cdt-builds]\n [msys2-recipes]\n (Maintenance)\n [admin-requests]\n [repodata-patches]\n (Configuration)\n [.github]\n [.cirun]\n [conda-forge-pinning]\n [conda-forge-ci-setup]\n [docker-images]\n [conda-smithy]\n (Automations)\n [admin-migrations]\n [artifact-validation]\n [regro/cf-scripts]\n [conda-forge-webservices]\n [regro/cf-graph-countyfair]\n [regro/libcfgraph + regro/libcflib]\n [feedstock-outputs]\n (Communications)\n [conda-forge.github.io]\n [blog]\n [status]\n [by-the-numbers]\n [conda-forge-status-monitor]\n [feedstocks]\n (Bots & apps)\n [conda-forge-admin]\n [conda-forge-bot]\n [conda-forge-coordinator]\n [conda-forge-daemon]\n [conda-forge-linter]\n [conda-forge-manager]\n [conda-forge-status]\n [regro-cf-autotick-bot]\n [conda-forge-curator]\n [conda-forge-webservices]\n (Delivery)\n [anaconda.org]\n [ghcr.io]\n [quay.io]\n (Installers)\n Miniforge\n Mambaforge\n (CI for builds)\n Azure Pipelines\n Travis CI\n cirun.io\n (Infra)\n Heroku\n Github Actions\n Circle CI"}),"\n",(0,a.jsx)(n.h2,{id:"quadrant-chart",children:"Quadrant Chart"}),"\n",(0,a.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>o});var a=t(27378);const r={},i=a.createContext(r);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/060daea9.e59b100e.js b/assets/js/060daea9.e59b100e.js new file mode 100644 index 0000000000..00b4cac8f0 --- /dev/null +++ b/assets/js/060daea9.e59b100e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52991],{75490:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},36345:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},47835:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1711731993e3,lastUpdatedBy:"S\xe9bastien Lorber",nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},c={image:t(75490).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(36345).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06c6ffc3.955066a7.js b/assets/js/06c6ffc3.955066a7.js new file mode 100644 index 0000000000..ee7b7e0ef0 --- /dev/null +++ b/assets/js/06c6ffc3.955066a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11007],{61132:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=(s(27378),s(40624));const o={tabItem:"tabItem_pnkT"};function r({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>N});var t=s(24246),i=s(27378),o=s(40624),r=s(75527),l=s(3620),a=s(44479),c=s(62821),d=s(52196),h=s(53589);function u(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function g(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function y(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function m({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,l.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,c._X)(t),r=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){u(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[o,r]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,o=y(e),[r,l]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o}))),[c,d]=j({queryString:s,groupId:t}),[u,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,h.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:u;return m({value:e,tabValues:o})?e:null})();(0,a.Z)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var f=s(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function v(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){w(e,n,s[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function S({className:e,block:n,selectedValue:s,selectValue:i,tabValues:l}){const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),o=l[t].value;o!==s&&(c(n),i(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=a.indexOf(e.currentTarget)+1;var s;n=null!==(s=a[t])&&void 0!==s?s:a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;var t;n=null!==(t=a[s])&&void 0!==t?t:a[a.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>a.push(e),onKeyDown:h,onClick:d},i),{className:(0,o.Z)("tabs__item",b.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function H(e){const n=x(e);return(0,t.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,t.jsx)(S,v({},e,n)),(0,t.jsx)(D,v({},e,n))]})}function N(e){const n=(0,f.Z)();return(0,t.jsx)(H,k(v({},e),{children:g(e.children)}),String(n))}},25871:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var t=s(24246),i=s(71670),o=s(97555),r=s(61132);const l={description:"Deploy your Docusaurus app for production on a range of static site hosting services."},a="Deployment",c={id:"deployment",title:"Deployment",description:"Deploy your Docusaurus app for production on a range of static site hosting services.",source:"@site/docs/deployment.mdx",sourceDirName:".",slug:"/deployment",permalink:"/docs/deployment",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx",tags:[],version:"current",lastUpdatedBy:"Can Eldem",lastUpdatedAt:1712310939e3,frontMatter:{description:"Deploy your Docusaurus app for production on a range of static site hosting services."},sidebar:"docs",previous:{title:"Using Plugins",permalink:"/docs/using-plugins"},next:{title:"i18n - Introduction",permalink:"/docs/i18n/introduction"}},d={},h=[{value:"Configuration",id:"configuration",level:2},{value:"Testing your Build Locally",id:"testing-build-locally",level:2},{value:"Trailing slash configuration",id:"trailing-slashes",level:2},{value:"Using environment variables",id:"using-environment-variables",level:2},{value:"Choosing a hosting provider",id:"choosing-a-hosting-provider",level:2},{value:"Self-Hosting",id:"self-hosting",level:2},{value:"Deploying to Netlify",id:"deploying-to-netlify",level:2},{value:"Deploying to Vercel",id:"deploying-to-vercel",level:2},{value:"Deploying to GitHub Pages",id:"deploying-to-github-pages",level:2},{value:"Overview",id:"github-pages-overview",level:3},{value:"<code>docusaurus.config.js</code> settings",id:"docusaurusconfigjs-settings",level:3},{value:"Environment settings",id:"environment-settings",level:3},{value:"Deploy",id:"deploy",level:3},{value:"Triggering deployment with GitHub Actions",id:"triggering-deployment-with-github-actions",level:3},{value:"Triggering deployment with Travis CI",id:"triggering-deployment-with-travis-ci",level:3},{value:"Triggering deployment with Buddy",id:"triggering-deployment-with-buddy",level:3},{value:"Using Azure Pipelines",id:"using-azure-pipelines",level:3},{value:"Using Drone",id:"using-drone",level:3},{value:"Deploying to Flightcontrol",id:"deploying-to-flightcontrol",level:2},{value:"Deploying to Koyeb",id:"deploying-to-koyeb",level:2},{value:"Deploying to Render",id:"deploying-to-render",level:2},{value:"Deploying to Qovery",id:"deploying-to-qovery",level:2},{value:"Deploying to Hostman",id:"deploying-to-hostman",level:2},{value:"Deploying to Surge",id:"deploying-to-surge",level:2},{value:"Using your domain",id:"using-your-domain",level:3},{value:"Setting up CNAME file",id:"setting-up-cname-file",level:3},{value:"Deploying to Stormkit",id:"deploying-to-stormkit",level:2},{value:"Deploying to QuantCDN",id:"deploying-to-quantcdn",level:2},{value:"Deploying to Layer0",id:"deploying-to-layer0",level:2},{value:"Deploying to Cloudflare Pages",id:"deploying-to-cloudflare-pages",level:2},{value:"Deploying to Azure Static Web Apps",id:"deploying-to-azure-static-web-apps",level:2},{value:"Deploying to Kinsta",id:"deploying-to-kinsta",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"deployment",children:"Deployment"}),"\n",(0,t.jsx)(n.p,{children:"To build the static files of your website for production, run:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Once it finishes, the static files will be generated within the ",(0,t.jsx)(n.code,{children:"build"})," directory."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The only responsibility of Docusaurus is to build your site and emit static files in ",(0,t.jsx)(n.code,{children:"build"}),"."]}),(0,t.jsx)(n.p,{children:"It is now up to you to choose how to host those static files."})]}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your site to static site hosting services such as ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"}),", ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"Render"}),", and ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"Surge"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"A Docusaurus site is statically rendered, and it can generally work without JavaScript!"}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["The following parameters are required in ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," to optimize routing and serve files from the correct location:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"url"})}),(0,t.jsxs)(n.td,{children:["URL for your site. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"url"})," is ",(0,t.jsx)(n.code,{children:"https://my-org.com/"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"baseUrl"})}),(0,t.jsxs)(n.td,{children:["Base URL for your project, with a trailing slash. For a site deployed at ",(0,t.jsx)(n.code,{children:"https://my-org.com/my-project/"}),", ",(0,t.jsx)(n.code,{children:"baseUrl"})," is ",(0,t.jsx)(n.code,{children:"/my-project/"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"testing-build-locally",children:"Testing your Build Locally"}),"\n",(0,t.jsxs)(n.p,{children:["It is important to test your build locally before deploying it for production. Docusaurus provides a ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})})," command for that:"]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["By default, this will load your site at ",(0,t.jsx)(n.a,{href:"http://localhost:3000/",children:(0,t.jsx)(n.code,{children:"http://localhost:3000/"})}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"trailing-slashes",children:"Trailing slash configuration"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus has a ",(0,t.jsxs)(n.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:[(0,t.jsx)(n.code,{children:"trailingSlash"})," config"]})," to allow customizing URLs/links and emitted filename patterns."]}),"\n",(0,t.jsxs)(n.p,{children:["The default value generally works fine. Unfortunately, each static hosting provider has a ",(0,t.jsx)(n.strong,{children:"different behavior"}),", and deploying the exact same site to various hosts can lead to distinct results. Depending on your host, it can be useful to change this config."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," to understand better the behavior of your host and configure ",(0,t.jsx)(n.code,{children:"trailingSlash"})," appropriately."]})}),"\n",(0,t.jsx)(n.h2,{id:"using-environment-variables",children:"Using environment variables"}),"\n",(0,t.jsxs)(n.p,{children:["Putting potentially sensitive information in the environment is common practice. However, in a typical Docusaurus website, the ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," file is the only interface to the Node.js environment (see ",(0,t.jsx)(n.a,{href:"/docs/advanced/architecture",children:"our architecture overview"}),"), while everything else (MDX pages, React components, etc.) are client side and do not have direct access to the ",(0,t.jsx)(n.code,{children:"process"})," global variable. In this case, you can consider using ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config#customFields",children:(0,t.jsx)(n.code,{children:"customFields"})})," to pass environment variables to the client side."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// If you are using dotenv (https://www.npmjs.com/package/dotenv)\nimport 'dotenv/config';\n\nexport default {\n title: '...',\n url: process.env.URL, // You can use environment variables to control site specifics as well\n // highlight-start\n customFields: {\n // Put your custom environment here\n teamEmail: process.env.EMAIL,\n },\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="home.jsx"',children:"import useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nexport default function Home() {\n const {\n siteConfig: {customFields},\n } = useDocusaurusContext();\n return <div>Contact us through {customFields.teamEmail}!</div>;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"choosing-a-hosting-provider",children:"Choosing a hosting provider"}),"\n",(0,t.jsx)(n.p,{children:"There are a few common hosting options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#self-hosting",children:"Self hosting"})," with an HTTP server like Apache2 or Nginx."]}),"\n",(0,t.jsxs)(n.li,{children:["Jamstack providers (e.g. ",(0,t.jsx)(n.a,{href:"#deploying-to-netlify",children:"Netlify"})," and ",(0,t.jsx)(n.a,{href:"#deploying-to-vercel",children:"Vercel"}),"). We will use them as references, but the same reasoning can apply to other providers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"GitHub Pages"})," (by definition, it is also Jamstack, but we compare it separately)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If you are unsure of which one to choose, ask the following questions:"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)(n.p,{children:"How many resources (money, person-hours, etc.) am I willing to invest in this?"})}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 Self-hosting requires experience in networking as well as Linux and web server administration. It's the most difficult option, and would require the most time to manage successfully. Expense-wise, cloud services are almost never free, and purchasing/deploying an onsite server can be even more costly."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Jamstack providers can help you set up a working website in almost no time and offer features like server-side redirects that are easily configurable. Many providers offer generous build-time quotas even for free plans that you would almost never exceed. However, free plans have limits, and you would need to pay once you hit those limits. Check the pricing page of your provider for details."}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udfe1 The GitHub Pages deployment workflow can be tedious to set up. (Evidence: see the length of ",(0,t.jsx)(n.a,{href:"#deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"!) However, this service (including build and deployment) is always free for public repositories, and we have detailed instructions to help you make it work."]}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"How much server-side customization do I need?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 With self-hosting, you have access to the entire server's configuration. You can configure the virtual host to serve different content based on the request URL, you can do complicated server-side redirects, you can implement authentication, and so on. If you need a lot of server-side features, self-host your website."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Jamstack usually offers some server-side configuration (e.g. URL formatting (trailing slashes), server-side redirects, etc.)."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udd34 GitHub Pages doesn't expose server-side configuration besides enforcing HTTPS and setting CNAME records."}),"\n"]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Do I need collaboration-friendly deployment workflows?"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 Self-hosted services can leverage continuous deployment functionality like Netlify, but more heavy-lifting is involved. Usually, you would designate a specific person to manage the deployment, and the workflow wouldn't be very git-based as opposed to the other two options."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe2 Netlify and Vercel have deploy previews for every pull request, which is useful for a team to review work before merging to production. You can also manage a team with different member access to the deployment."}),"\n",(0,t.jsx)(n.li,{children:"\ud83d\udfe1 GitHub Pages cannot do deploy previews in a non-convoluted way. One repo can only be associated with one site deployment. On the other hand, you can control who has write access to the site's deployment."}),"\n"]})]}),"\n",(0,t.jsx)(n.p,{children:"There isn't a silver bullet. You need to weigh your needs and resources before making a choice."}),"\n",(0,t.jsx)(n.h2,{id:"self-hosting",children:"Self-Hosting"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus can be self-hosted using ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-serve-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus serve"})}),". Change port using ",(0,t.jsx)(n.code,{children:"--port"})," and ",(0,t.jsx)(n.code,{children:"--host"})," to change host."]}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run serve -- --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn serve --build --port 80 --host 0.0.0.0\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run serve --build --port 80 --host 0.0.0.0\n"})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"It is not the best option, compared to a static hosting provider / CDN."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"In the following sections, we will introduce a few common hosting providers and how they should be configured to deploy Docusaurus sites most efficiently. Docusaurus is not affiliated with any of these services, and this information is provided for convenience only. Some of the write-ups are provided by third-parties, and recent API changes may not be reflected on our side. If you see outdated content, PRs are welcome."}),(0,t.jsx)(n.p,{children:"Because we can only provide this content on a best-effort basis only, we have stopped accepting PRs adding new hosting options. You can, however, publish your writeup on a separate site (e.g. your blog, or the provider's official website), and ask us to include a link to your writeup."})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-netlify",children:"Deploying to Netlify"}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus sites to ",(0,t.jsx)(n.a,{href:"https://www.netlify.com/",children:"Netlify"}),", first make sure the following options are properly configured:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-start\n url: 'https://docusaurus-2.netlify.app', // Url to your site with no trailing slash\n baseUrl: '/', // Base directory of your site relative to your repo\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then, ",(0,t.jsx)(n.a,{href:"https://app.netlify.com/start",children:"create your site with Netlify"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"While you set up the site, specify the build commands and directories as follows:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["build command: ",(0,t.jsx)(n.code,{children:"npm run build"})]}),"\n",(0,t.jsxs)(n.li,{children:["publish directory: ",(0,t.jsx)(n.code,{children:"build"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:'If you did not configure these build options, you may still go to "Site settings" -> "Build & deploy" after your site is created.'}),"\n",(0,t.jsxs)(n.p,{children:["Once properly configured with the above options, your site should deploy and automatically redeploy upon merging to your deploy branch, which defaults to ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Some Docusaurus sites put the ",(0,t.jsx)(n.code,{children:"docs"})," folder outside of ",(0,t.jsx)(n.code,{children:"website"})," (most likely former Docusaurus v1 sites):"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"repo # git root\n\u251c\u2500\u2500 docs # MD files\n\u2514\u2500\u2500 website # Docusaurus root\n"})}),(0,t.jsxs)(n.p,{children:["If you decide to use the ",(0,t.jsx)(n.code,{children:"website"})," folder as Netlify's base directory, Netlify will not trigger builds when you update the ",(0,t.jsx)(n.code,{children:"docs"})," folder, and you need to configure a ",(0,t.jsxs)(n.a,{href:"https://docs.netlify.com/configure-builds/common-configurations/ignore-builds/",children:["custom ",(0,t.jsx)(n.code,{children:"ignore"})," command"]}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-toml",metastring:'title="website/netlify.toml"',children:'[build]\n ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../docs/"\n'})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"By default, Netlify adds trailing slashes to Docusaurus URLs."}),(0,t.jsxs)(n.p,{children:["It is recommended to disable the Netlify setting ",(0,t.jsx)(n.code,{children:"Post Processing > Asset Optimization > Pretty Urls"})," to prevent lowercase URLs, unnecessary redirects, and 404 errors."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Be very careful"}),": the ",(0,t.jsx)(n.code,{children:"Disable asset optimization"})," global checkbox is broken and does not really disable the ",(0,t.jsx)(n.code,{children:"Pretty URLs"})," setting in practice. Please make sure to ",(0,t.jsx)(n.strong,{children:"uncheck it independently"}),"."]}),(0,t.jsxs)(n.p,{children:["If you want to keep the ",(0,t.jsx)(n.code,{children:"Pretty Urls"})," Netlify setting on, adjust the ",(0,t.jsx)(n.code,{children:"trailingSlash"})," Docusaurus config appropriately."]}),(0,t.jsxs)(n.p,{children:["Refer to ",(0,t.jsx)(n.a,{href:"https://github.com/slorber/trailing-slash-guide",children:"slorber/trailing-slash-guide"})," for more information."]})]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-vercel",children:"Deploying to Vercel"}),"\n",(0,t.jsxs)(n.p,{children:["Deploying your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"Vercel"})," will provide you with ",(0,t.jsx)(n.a,{href:"https://vercel.com/",children:"various benefits"})," in the areas of performance and ease of use."]}),"\n",(0,t.jsxs)(n.p,{children:["To deploy your Docusaurus project with a ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/concepts/git",children:"Vercel for Git Integration"}),", make sure it has been pushed to a Git repository."]}),"\n",(0,t.jsxs)(n.p,{children:["Import the project into Vercel using the ",(0,t.jsx)(n.a,{href:"https://vercel.com/import/git",children:"Import Flow"}),". During the import, you will find all relevant options preconfigured for you; however, you can choose to change any of these ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/build-step#build-&-development-settings",children:"options"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["After your project has been imported, all subsequent pushes to branches will generate ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#preview",children:"Preview Deployments"}),", and all changes made to the ",(0,t.jsx)(n.a,{href:"https://vercel.com/docs/git-integrations#production-branch",children:"Production Branch"}),' (usually "main" or "master") will result in a ',(0,t.jsx)(n.a,{href:"https://vercel.com/docs/platform/deployments#production",children:"Production Deployment"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-github-pages",children:"Deploying to GitHub Pages"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus provides an easy way to publish to ",(0,t.jsx)(n.a,{href:"https://pages.github.com/",children:"GitHub Pages"}),", which comes free with every GitHub repository."]}),"\n",(0,t.jsx)(n.h3,{id:"github-pages-overview",children:"Overview"}),"\n",(0,t.jsxs)(n.p,{children:["Usually, there are two repositories (at least two branches) involved in a publishing process: the branch containing the source files, and the branch containing the build output to be served with GitHub Pages. In the following tutorial, they will be referred to as ",(0,t.jsx)(n.strong,{children:'"source"'})," and ",(0,t.jsx)(n.strong,{children:'"deployment"'}),", respectively."]}),"\n",(0,t.jsxs)(n.p,{children:["Each GitHub repository is associated with a GitHub Pages service. If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-project"})," (where ",(0,t.jsx)(n.code,{children:"my-org"})," is the organization name or username), the deployed site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/my-project/"}),". If the deployment repository is called ",(0,t.jsx)(n.code,{children:"my-org/my-org.github.io"})," (the ",(0,t.jsx)(n.em,{children:"organization GitHub Pages repo"}),"), the site will appear at ",(0,t.jsx)(n.code,{children:"https://my-org.github.io/"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["In case you want to use your custom domain for GitHub Pages, create a ",(0,t.jsx)(n.code,{children:"CNAME"})," file in the ",(0,t.jsx)(n.code,{children:"static"})," directory. Anything within the ",(0,t.jsx)(n.code,{children:"static"})," directory will be copied to the root of the ",(0,t.jsx)(n.code,{children:"build"})," directory for deployment. When using a custom domain, you should be able to move back from ",(0,t.jsx)(n.code,{children:"baseUrl: '/projectName/'"})," to ",(0,t.jsx)(n.code,{children:"baseUrl: '/'"}),", and also set your ",(0,t.jsx)(n.code,{children:"url"})," to your custom domain."]}),(0,t.jsxs)(n.p,{children:["You may refer to GitHub Pages' documentation ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/articles/user-organization-and-project-pages",children:"User, Organization, and Project Pages"})," for more details."]})]}),"\n",(0,t.jsxs)(n.p,{children:["GitHub Pages picks up deploy-ready files (the output from ",(0,t.jsx)(n.code,{children:"docusaurus build"}),") from the default branch (",(0,t.jsx)(n.code,{children:"master"})," / ",(0,t.jsx)(n.code,{children:"main"}),", usually) or the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch, and either from the root or the ",(0,t.jsx)(n.code,{children:"/docs"})," folder. You can configure that through ",(0,t.jsx)(n.code,{children:"Settings > Pages"}),' in your repository. This branch will be called the "deployment branch".']}),"\n",(0,t.jsxs)(n.p,{children:["We provide a ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," command that helps you deploy your site from the source branch to the deployment branch in one command: clone, build, and commit."]}),"\n",(0,t.jsxs)(n.h3,{id:"docusaurusconfigjs-settings",children:[(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," settings"]}),"\n",(0,t.jsxs)(n.p,{children:["First, modify your ",(0,t.jsx)(n.code,{children:"docusaurus.config.js"})," and add the following params:"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"organizationName"})}),(0,t.jsx)(n.td,{children:"The GitHub user or organization that owns the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"projectName"})}),(0,t.jsx)(n.td,{children:"The name of the deployment repository."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"deploymentBranch"})}),(0,t.jsxs)(n.td,{children:["The name of the deployment branch. It defaults to ",(0,t.jsx)(n.code,{children:"'gh-pages'"})," for non-organization GitHub Pages repos (",(0,t.jsx)(n.code,{children:"projectName"})," not ending in ",(0,t.jsx)(n.code,{children:".github.io"}),"). Otherwise, it needs to be explicit as a config field or environment variable."]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["These fields also have their environment variable counterparts which have a higher priority: ",(0,t.jsx)(n.code,{children:"ORGANIZATION_NAME"}),", ",(0,t.jsx)(n.code,{children:"PROJECT_NAME"}),", and ",(0,t.jsx)(n.code,{children:"DEPLOYMENT_BRANCH"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["GitHub Pages adds a trailing slash to Docusaurus URLs by default. It is recommended to set a ",(0,t.jsx)(n.code,{children:"trailingSlash"})," config (",(0,t.jsx)(n.code,{children:"true"})," or ",(0,t.jsx)(n.code,{children:"false"}),", not ",(0,t.jsx)(n.code,{children:"undefined"}),")."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n url: 'https://endiliey.github.io', // Your website URL\n baseUrl: '/',\n // highlight-start\n projectName: 'endiliey.github.io',\n organizationName: 'endiliey',\n trailingSlash: false,\n // highlight-end\n // ...\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["By default, GitHub Pages runs published files through ",(0,t.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"}),". Since Jekyll will discard any files that begin with ",(0,t.jsx)(n.code,{children:"_"}),", it is recommended that you disable Jekyll by adding an empty file named ",(0,t.jsx)(n.code,{children:".nojekyll"})," file to your ",(0,t.jsx)(n.code,{children:"static"})," directory."]})}),"\n",(0,t.jsx)(n.h3,{id:"environment-settings",children:"Environment settings"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"USE_SSH"})}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"true"})," to use SSH instead of the default HTTPS for the connection to the GitHub repo. If the source repo URL is an SSH URL (e.g. ",(0,t.jsx)(n.code,{children:"git@github.com:facebook/docusaurus.git"}),"), ",(0,t.jsx)(n.code,{children:"USE_SSH"})," is inferred to be ",(0,t.jsx)(n.code,{children:"true"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER"})}),(0,t.jsxs)(n.td,{children:["The username for a GitHub account that ",(0,t.jsx)(n.strong,{children:"has push access to the deployment repo"}),". For your own repositories, this will usually be your GitHub username. Required if not using SSH, and ignored otherwise."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_PASS"})}),(0,t.jsxs)(n.td,{children:["Personal access token of the git user (specified by ",(0,t.jsx)(n.code,{children:"GIT_USER"}),"), to facilitate non-interactive deployment (e.g. continuous deployment)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CURRENT_BRANCH"})}),(0,t.jsxs)(n.td,{children:["The source branch. Usually, the branch will be ",(0,t.jsx)(n.code,{children:"main"})," or ",(0,t.jsx)(n.code,{children:"master"}),", but it could be any branch except for ",(0,t.jsx)(n.code,{children:"gh-pages"}),". If nothing is set for this variable, then the current branch from which ",(0,t.jsx)(n.code,{children:"docusaurus deploy"})," is invoked will be used."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_NAME"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.name"})," value to use when pushing to the deployment repo"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GIT_USER_EMAIL"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"git config user.email"})," value to use when pushing to the deployment repo"]})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"GitHub enterprise installations should work in the same manner as github.com; you only need to set the organization's GitHub Enterprise host as an environment variable:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_HOST"})}),(0,t.jsx)(n.td,{children:"The domain name of your GitHub enterprise site."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GITHUB_PORT"})}),(0,t.jsx)(n.td,{children:"The port of your GitHub enterprise site."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"deploy",children:"Deploy"}),"\n",(0,t.jsx)(n.p,{children:"Finally, to deploy your site to GitHub Pages, run:"}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsx)(r.Z,{value:"bash",label:"Bash",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"GIT_USER=<GITHUB_USERNAME> yarn deploy\n"})})}),(0,t.jsx)(r.Z,{value:"windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-batch",children:'cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n'})})}),(0,t.jsx)(r.Z,{value:"powershell",label:"PowerShell",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-powershell",children:"cmd /C 'set \"GIT_USER=<GITHUB_USERNAME>\" && yarn deploy'\n"})})})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Beginning in August 2021, GitHub requires every command-line sign-in to use the ",(0,t.jsx)(n.strong,{children:"personal access token"})," instead of the password. When GitHub prompts for your password, enter the PAT instead. See the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token",children:"GitHub documentation"})," for more information."]}),(0,t.jsxs)(n.p,{children:["Alternatively, you can use SSH (",(0,t.jsx)(n.code,{children:"USE_SSH=true"}),") to log in."]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-github-actions",children:"Triggering deployment with GitHub Actions"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions",children:"GitHub Actions"})," allow you to automate, customize, and execute your software development workflows right in your repository."]}),"\n",(0,t.jsxs)(n.p,{children:["The workflow examples below assume your website source resides in the ",(0,t.jsx)(n.code,{children:"main"})," branch of your repository (the ",(0,t.jsx)(n.em,{children:"source branch"})," is ",(0,t.jsx)(n.code,{children:"main"}),"), and your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is configured for ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow",children:"publishing with a custom GitHub Actions Workflow"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Our goal is that:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["When a new pull request is made to ",(0,t.jsx)(n.code,{children:"main"}),", there's an action that ensures the site builds successfully, without actually deploying. This job will be called ",(0,t.jsx)(n.code,{children:"test-deploy"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["When a pull request is merged to the ",(0,t.jsx)(n.code,{children:"main"})," branch or someone pushes to the ",(0,t.jsx)(n.code,{children:"main"})," branch directly, it will be built and deployed to GitHub Pages. This job will be called ",(0,t.jsx)(n.code,{children:"deploy"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Here are two approaches to deploying your docs with GitHub Actions. Based on the location of your deployment repository, choose the relevant tab below:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Source repo and deployment repo are the ",(0,t.jsx)(n.strong,{children:"same"})," repository."]}),"\n",(0,t.jsxs)(n.li,{children:["The deployment repo is a ",(0,t.jsx)(n.strong,{children:"remote"})," repository, different from the source. Instructions for this scenario assume ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",children:"publishing source"})," is the ",(0,t.jsx)(n.code,{children:"gh-pages"})," branch."]}),"\n"]}),"\n",(0,t.jsxs)(o.Z,{children:[(0,t.jsxs)(r.Z,{value:"same",label:"Same",children:[(0,t.jsxs)(n.p,{children:["While you can have both jobs defined in the same workflow file, the original ",(0,t.jsx)(n.code,{children:"deploy"})," workflow will always be listed as skipped in the PR check suite status, which is not indicative of the actual status and provides no value to the review process. We therefore propose to manage them as separate workflows instead."]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action files"}),(0,t.jsx)(n.p,{children:"Add these two workflow files:"}),(0,t.jsxs)(n.admonition,{title:"Tweak the parameters for your setup",type:"warning",children:[(0,t.jsxs)(n.p,{children:["These files assume you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]}),(0,t.jsxs)(n.p,{children:["If your Docusaurus project is not at the root of your repo, you may need to configure a ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-set-the-default-shell-and-working-directory",children:"default working directory"}),", and adjust the paths accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n push:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n build:\n name: Build Docusaurus\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Build website\n run: yarn build\n\n - name: Upload Build Artifact\n uses: actions/upload-pages-artifact@v3\n with:\n path: build\n\n deploy:\n name: Deploy to GitHub Pages\n needs: build\n\n # Grant GITHUB_TOKEN the permissions required to make a Pages deployment\n permissions:\n pages: write # to deploy to Pages\n id-token: write # to verify the deployment originates from an appropriate source\n\n # Deploy to the github-pages environment\n environment:\n name: github-pages\n url: ${{ steps.deployment.outputs.page_url }}\n\n runs-on: ubuntu-latest\n steps:\n - name: Deploy to GitHub Pages\n id: deployment\n uses: actions/deploy-pages@v4\n"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/test-deploy.yml"',children:"name: Test deployment\n\non:\n pull_request:\n branches:\n - main\n # Review gh actions docs if you want to further define triggers, paths, etc\n # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on\n\njobs:\n test-deploy:\n name: Test deployment\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n"})})]})]}),(0,t.jsxs)(r.Z,{value:"remote",label:"Remote",children:[(0,t.jsx)(n.p,{children:"A cross-repo publish is more difficult to set up because you need to push to another repo with permission checks. We will be using SSH to do the authentication."}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH key"}),". Since this SSH key will be used in CI, make sure to not enter any passphrase."]}),"\n",(0,t.jsxs)(n.li,{children:["By default, your public key should have been created in ",(0,t.jsx)(n.code,{children:"~/.ssh/id_rsa.pub"}),"; otherwise, use the name you've provided in the previous step to add your key to ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/",children:"GitHub deploy keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy the key to clipboard with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa.pub"})," and paste it as a ",(0,t.jsx)(n.a,{href:"https://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys",children:"deploy key"})," in the deployment repository. Copy the file content if the command line doesn't work for you. Check the box for ",(0,t.jsx)(n.code,{children:"Allow write access"})," before saving your deployment key."]}),"\n",(0,t.jsxs)(n.li,{children:["You'll need your private key as a ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets",children:"GitHub secret"})," to allow Docusaurus to run the deployment for you."]}),"\n",(0,t.jsxs)(n.li,{children:["Copy your private key with ",(0,t.jsx)(n.code,{children:"pbcopy < ~/.ssh/id_rsa"})," and paste a GitHub secret with the name ",(0,t.jsx)(n.code,{children:"GH_PAGES_DEPLOY"})," on your source repository. Copy the file content if the command line doesn't work for you. Save your secret."]}),"\n",(0,t.jsxs)(n.li,{children:["Create your ",(0,t.jsx)(n.a,{href:"https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#creating-a-workflow-file",children:"documentation workflow file"})," in ",(0,t.jsx)(n.code,{children:".github/workflows/"}),". In this example, it's ",(0,t.jsx)(n.code,{children:"deploy.yml"}),"."]}),"\n"]}),(0,t.jsx)(n.p,{children:"At this point, you should have:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"the source repo with the GitHub workflow set with the private SSH key as the GitHub Secret, and"}),"\n",(0,t.jsx)(n.li,{children:"your deployment repo set with the public SSH key in GitHub Deploy Keys."}),"\n"]}),(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"GitHub action file"}),(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Please make sure that you replace ",(0,t.jsx)(n.code,{children:"actions@github.com"})," with your GitHub email and ",(0,t.jsx)(n.code,{children:"gh-actions"})," with your name."]}),(0,t.jsxs)(n.p,{children:["This file assumes you are using Yarn. If you use npm, change ",(0,t.jsx)(n.code,{children:"cache: yarn"}),", ",(0,t.jsx)(n.code,{children:"yarn install --frozen-lockfile"}),", ",(0,t.jsx)(n.code,{children:"yarn build"})," to ",(0,t.jsx)(n.code,{children:"cache: npm"}),", ",(0,t.jsx)(n.code,{children:"npm ci"}),", ",(0,t.jsx)(n.code,{children:"npm run build"})," accordingly."]})]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".github/workflows/deploy.yml"',children:"name: Deploy to GitHub Pages\n\non:\n pull_request:\n branches: [main]\n push:\n branches: [main]\n\npermissions:\n contents: write\n\njobs:\n test-deploy:\n if: github.event_name != 'push'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - name: Install dependencies\n run: yarn install --frozen-lockfile\n - name: Test build website\n run: yarn build\n deploy:\n if: github.event_name != 'pull_request'\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: 18\n cache: yarn\n - uses: webfactory/ssh-agent@v0.5.0\n with:\n ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}\n - name: Deploy to GitHub Pages\n env:\n USE_SSH: true\n run: |\n git config --global user.email \"actions@github.com\"\n git config --global user.name \"gh-actions\"\n yarn install --frozen-lockfile\n yarn deploy\n"})})]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Site not deployed properly?"}),(0,t.jsx)(n.p,{children:"After pushing to main, if you don't see your site published at the desired location (for example, it says \"There isn't a GitHub Pages site here\", or it's showing your repo's README.md file), try the following:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Wait about three minutes and refresh. It may take a few minutes for GitHub pages to pick up the new files."}),"\n",(0,t.jsx)(n.li,{children:"Check your repo's landing page for a little green tick next to the last commit's title, indicating the CI has passed. If you see a cross, it means the build or deployment failed, and you should check the log for more debugging information."}),"\n",(0,t.jsxs)(n.li,{children:['Click on the tick and make sure you see a "Deploy to GitHub Pages" workflow. Names like "pages build and deployment / deploy" are GitHub\'s default workflows, indicating your custom deployment workflow failed to be triggered at all. Make sure the YAML files are placed under the ',(0,t.jsx)(n.code,{children:".github/workflows"}),' folder, and that the trigger condition is set correctly (e.g., if your default branch is "master" instead of "main", you need to change the ',(0,t.jsx)(n.code,{children:"on.push"})," property)."]}),"\n",(0,t.jsxs)(n.li,{children:['Under your repo\'s Settings > Pages, make sure the "Source" (which is the source for the ',(0,t.jsx)(n.em,{children:"deployment"}),' files, not "source" as in our terminology) is set to "gh-pages" + "/ (root)", since we are using ',(0,t.jsx)(n.code,{children:"gh-pages"})," as the deployment branch."]}),"\n"]}),(0,t.jsx)(n.p,{children:"If you are using a custom domain:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Verify that you have the correct DNS records set up if you're using a custom domain. See ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages",children:"GitHub pages documentation on configuring custom domains"}),". Also, please be aware that it may take up to 24 hours for DNS changes to propagate through the internet."]}),"\n"]})]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-travis-ci",children:"Triggering deployment with Travis CI"}),"\n",(0,t.jsxs)(n.p,{children:["Continuous integration (CI) services are typically used to perform routine tasks whenever new commits are checked in to source control. These tasks can be any combination of running unit tests and integration tests, automating builds, publishing packages to npm, and deploying changes to your website. All you need to do to automate the deployment of your website is to invoke the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script whenever your website is updated. The following section covers how to do just that using ",(0,t.jsx)(n.a,{href:"https://travis-ci.com/",children:"Travis CI"}),", a popular continuous integration service provider."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsxs)(n.li,{children:["Using your GitHub account, ",(0,t.jsx)(n.a,{href:"https://github.com/marketplace/travis-ci",children:"add the Travis CI app"})," to the repository you want to activate."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Travis CI dashboard. The URL looks like ",(0,t.jsx)(n.code,{children:"https://travis-ci.com/USERNAME/REPO"}),", and navigate to the ",(0,t.jsx)(n.code,{children:"More options > Setting > Environment Variables"})," section of your repository."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username)."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".travis.yml"})," on the root of your repository with the following:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".travis.yml"',children:'language: node_js\nnode_js:\n - 18\nbranches:\n only:\n - main\ncache:\n yarn: true\nscript:\n - git config --global user.name "${GH_NAME}"\n - git config --global user.email "${GH_EMAIL}"\n - echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n - yarn install\n - GIT_USER="${GH_NAME}" yarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Now, whenever a new commit lands in ",(0,t.jsx)(n.code,{children:"main"}),", Travis CI will run your suite of tests and if everything passes, your website will be deployed via the ",(0,t.jsx)(n.code,{children:"yarn deploy"})," script."]}),"\n",(0,t.jsx)(n.h3,{id:"triggering-deployment-with-buddy",children:"Triggering deployment with Buddy"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://buddy.works/",children:"Buddy"})," is an easy-to-use CI/CD tool that allows you to automate the deployment of your portal to different environments, including GitHub Pages."]}),"\n",(0,t.jsx)(n.p,{children:"Follow these steps to create a pipeline that automatically deploys a new version of your website whenever you push changes to the selected branch of your project:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"}),". When creating the token, grant it the ",(0,t.jsx)(n.code,{children:"repo"})," scope so that it has the permissions it needs."]}),"\n",(0,t.jsx)(n.li,{children:"Sign in to your Buddy account and create a new project."}),"\n",(0,t.jsx)(n.li,{children:"Choose GitHub as your git hosting provider and select the repository with the code of your website."}),"\n",(0,t.jsxs)(n.li,{children:["Using the left navigation panel, switch to the ",(0,t.jsx)(n.code,{children:"Pipelines"})," view."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new pipeline. Define its name, set the trigger mode to ",(0,t.jsx)(n.code,{children:"On push"}),", and select the branch that triggers the pipeline execution."]}),"\n",(0,t.jsxs)(n.li,{children:["Add a ",(0,t.jsx)(n.code,{children:"Node.js"})," action."]}),"\n",(0,t.jsx)(n.li,{children:"Add these commands in the action's terminal:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'GIT_USER=<GH_PERSONAL_ACCESS_TOKEN>\ngit config --global user.email "<YOUR_GH_EMAIL>"\ngit config --global user.name "<YOUR_GH_USERNAME>"\nyarn deploy\n'})}),"\n",(0,t.jsxs)(n.p,{children:["After creating this simple pipeline, each new commit pushed to the branch you selected deploys your website to GitHub Pages using ",(0,t.jsx)(n.code,{children:"yarn deploy"}),". Read ",(0,t.jsx)(n.a,{href:"https://buddy.works/guides/react-docusaurus",children:"this guide"})," to learn more about setting up a CI/CD pipeline for Docusaurus."]}),"\n",(0,t.jsx)(n.h3,{id:"using-azure-pipelines",children:"Using Azure Pipelines"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Sign Up at ",(0,t.jsx)(n.a,{href:"https://azure.microsoft.com/en-us/services/devops/pipelines/",children:"Azure Pipelines"})," if you haven't already."]}),"\n",(0,t.jsx)(n.li,{children:"Create an organization. Within the organization, create a project and connect your repository from GitHub."}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://github.com/settings/tokens",children:"https://github.com/settings/tokens"})," and generate a new ",(0,t.jsx)(n.a,{href:"https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/",children:"personal access token"})," with the ",(0,t.jsx)(n.code,{children:"repo"})," scope."]}),"\n",(0,t.jsxs)(n.li,{children:["In the project page (which looks like ",(0,t.jsx)(n.code,{children:"https://dev.azure.com/ORG_NAME/REPO_NAME/_build"}),"), create a new pipeline with the following text. Also, click on edit and add a new environment variable named ",(0,t.jsx)(n.code,{children:"GH_TOKEN"})," with your newly generated token as its value, then ",(0,t.jsx)(n.code,{children:"GH_EMAIL"})," (your email address) and ",(0,t.jsx)(n.code,{children:"GH_NAME"})," (your GitHub username). Make sure to mark them as secret. Alternatively, you can also add a file named ",(0,t.jsx)(n.code,{children:"azure-pipelines.yml"})," at your repository root."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title="azure-pipelines.yml"',children:'trigger:\n - main\n\npool:\n vmImage: ubuntu-latest\n\nsteps:\n - checkout: self\n persistCredentials: true\n\n - task: NodeTool@0\n inputs:\n versionSpec: \'18\'\n displayName: Install Node.js\n\n - script: |\n git config --global user.name "${GH_NAME}"\n git config --global user.email "${GH_EMAIL}"\n git checkout -b main\n echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc\n yarn install\n GIT_USER="${GH_NAME}" yarn deploy\n env:\n GH_NAME: $(GH_NAME)\n GH_EMAIL: $(GH_EMAIL)\n GH_TOKEN: $(GH_TOKEN)\n displayName: Install and build\n'})}),"\n",(0,t.jsx)(n.h3,{id:"using-drone",children:"Using Drone"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a new SSH key that will be the ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/developers/overview/managing-deploy-keys#deploy-keys",children:"deploy key"})," for your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Name your private and public keys to be specific and so that it does not overwrite your other ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",children:"SSH keys"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.code,{children:"https://github.com/USERNAME/REPO/settings/keys"})," and add a new deploy key by pasting in the public key you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Open your Drone.io dashboard and log in. The URL looks like ",(0,t.jsx)(n.code,{children:"https://cloud.drone.io/USERNAME/REPO"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on the repository, click on activate repository, and add a secret called ",(0,t.jsx)(n.code,{children:"git_deploy_private_key"})," with your private key value that you just generated."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.code,{children:".drone.yml"})," on the root of your repository with the below text."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yml",metastring:'title=".drone.yml"',children:'kind: pipeline\ntype: docker\ntrigger:\n event:\n - tag\n- name: Website\n image: node\n commands:\n - mkdir -p $HOME/.ssh\n - ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts\n - echo "$GITHUB_PRIVATE_KEY" > "$HOME/.ssh/id_rsa"\n - chmod 0600 $HOME/.ssh/id_rsa\n - cd website\n - yarn install\n - yarn deploy\n environment:\n USE_SSH: true\n GITHUB_PRIVATE_KEY:\n from_secret: git_deploy_private_key\n'})}),"\n",(0,t.jsx)(n.p,{children:"Now, whenever you push a new tag to GitHub, this trigger will start the drone CI job to publish your website."}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-flightcontrol",children:"Deploying to Flightcontrol"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/?ref=docusaurus",children:"Flightcontrol"})," is a service that automatically builds and deploys your web apps to AWS Fargate directly from your Git repository. It gives you full access to inspect and make infrastructure changes without the limitations of a traditional PaaS."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started by following ",(0,t.jsx)(n.a,{href:"https://www.flightcontrol.dev/docs/reference/examples/docusaurus/?ref=docusaurus",children:"Flightcontrol's step-by-step Docusaurus guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-koyeb",children:"Deploying to Koyeb"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.koyeb.com",children:"Koyeb"})," is a developer-friendly serverless platform to deploy apps globally. The platform lets you seamlessly run Docker containers, web apps, and APIs with git-based deployment, native autoscaling, a global edge network, and built-in service mesh and discovery. Check out the ",(0,t.jsx)(n.a,{href:"https://www.koyeb.com/tutorials/deploy-docusaurus-on-koyeb",children:"Koyeb's Docusaurus deployment guide"})," to get started."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-render",children:"Deploying to Render"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://render.com",children:"Render"})," offers ",(0,t.jsx)(n.a,{href:"https://render.com/docs/static-sites",children:"free static site hosting"})," with fully managed SSL, custom domains, a global CDN, and continuous auto-deploy from your Git repo. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-qovery",children:"Deploying to Qovery"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.qovery.com",children:"Qovery"})," is a fully-managed cloud platform that runs on your AWS, Digital Ocean, and Scaleway account where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a Qovery account. Visit the ",(0,t.jsx)(n.a,{href:"https://console.qovery.com",children:"Qovery dashboard"})," to create an account if you don't already have one."]}),"\n",(0,t.jsxs)(n.li,{children:["Create a project.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create project"})," and give a name to your project."]}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Next"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Create a new environment.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create environment"})," and give a name (e.g. staging, production)."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Add an application.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create an application"}),", give a name and select your GitHub or GitLab repository where your Docusaurus app is located."]}),"\n",(0,t.jsx)(n.li,{children:"Define the main branch name and the root application path."}),"\n",(0,t.jsxs)(n.li,{children:["Click on ",(0,t.jsx)(n.strong,{children:"Create"}),". After the application is created:"]}),"\n",(0,t.jsxs)(n.li,{children:["Navigate to your application ",(0,t.jsx)(n.strong,{children:"Settings"})]}),"\n",(0,t.jsxs)(n.li,{children:["Select ",(0,t.jsx)(n.strong,{children:"Port"})]}),"\n",(0,t.jsx)(n.li,{children:"Add port used by your Docusaurus application"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["All you have to do now is to navigate to your application and click on ",(0,t.jsx)(n.strong,{children:"Deploy"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:"https://hub.qovery.com/img/heroku/heroku-1.png",alt:"Deploy the app"})}),"\n",(0,t.jsxs)(n.p,{children:["That's it. Watch the status and wait till the app is deployed. To open the application in your browser, click on ",(0,t.jsx)(n.strong,{children:"Action"})," and ",(0,t.jsx)(n.strong,{children:"Open"})," in your application overview."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-hostman",children:"Deploying to Hostman"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://hostman.com/",children:"Hostman"})," allows you to host static websites for free. Hostman automates everything, you just need to connect your repository and follow these easy steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create a service."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To deploy a Docusaurus static website, click ",(0,t.jsx)(n.strong,{children:"Create"})," in the top-left corner of your ",(0,t.jsx)(n.a,{href:"https://dashboard.hostman.com/",children:"Dashboard"})," and choose ",(0,t.jsx)(n.strong,{children:"Front-end app or static website"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Select the project to deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you are logged in to Hostman with your GitHub, GitLab, or Bitbucket account, you will see the repository with your projects, including the private ones."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Choose the project you want to deploy. It must contain the directory with the project's files (e.g. ",(0,t.jsx)(n.code,{children:"website"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To access a different repository, click ",(0,t.jsx)(n.strong,{children:"Connect another repository"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you didn't use your Git account credentials to log in, you'll be able to access the necessary account now, and then select the project."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure the build settings."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Next, the ",(0,t.jsx)(n.strong,{children:"Website customization"})," window will appear. Choose the ",(0,t.jsx)(n.strong,{children:"Static website"})," option from the list of frameworks."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Directory with app"})," points at the directory that will contain the project's files after the build. If you selected the repository with the contents of the website (or ",(0,t.jsx)(n.code,{children:"my_website"}),") directory during Step 2, you can leave it empty."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The standard build command for Docusaurus is:"}),"\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["You can modify the build command if needed. You can enter multiple commands separated by ",(0,t.jsx)(n.code,{children:"&&"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Deploy."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Deploy"})," to start the build process."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Once it starts, you will enter the deployment log. If there are any issues with the code, you will get warning or error messages in the log specifying the cause of the problem. Usually, the log contains all the debugging data you'll need."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"When the deployment is complete, you will receive an email notification and also see a log entry. All done! Your project is up and ready."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-surge",children:"Deploying to Surge"}),"\n",(0,t.jsxs)(n.p,{children:["Surge is a ",(0,t.jsx)(n.a,{href:"https://surge.sh/help/getting-started-with-surge",children:"static web hosting platform"})," that you can use to deploy your Docusaurus project from the command line in seconds. Deploying your project to Surge is easy and free (including custom domains and SSL certs)."]}),"\n",(0,t.jsx)(n.p,{children:"Deploy your app in a matter of seconds using Surge with the following steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["First, install Surge using npm by running the following command:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install -g surge\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn global add surge\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add -g surge\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["To build the static files of your site for production in the root directory of your project, run:","\n",(0,t.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(r.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})})}),(0,t.jsx)(r.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn build\n"})})}),(0,t.jsx)(r.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run build\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Then, run this command inside the root directory of your project:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"First-time users of Surge would be prompted to create an account from the command line (which happens only once)."}),"\n",(0,t.jsxs)(n.p,{children:["Confirm that the site you want to publish is in the ",(0,t.jsx)(n.code,{children:"build"})," directory. A randomly generated subdomain ",(0,t.jsx)(n.code,{children:"*.surge.sh subdomain"})," is always given (which can be edited)."]}),"\n",(0,t.jsx)(n.h3,{id:"using-your-domain",children:"Using your domain"}),"\n",(0,t.jsx)(n.p,{children:"If you have a domain name you can deploy your site using the command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"surge build/ your-domain.com\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Your site is now deployed for free at ",(0,t.jsx)(n.code,{children:"subdomain.surge.sh"})," or ",(0,t.jsx)(n.code,{children:"your-domain.com"})," depending on the method you chose."]}),"\n",(0,t.jsx)(n.h3,{id:"setting-up-cname-file",children:"Setting up CNAME file"}),"\n",(0,t.jsx)(n.p,{children:"Store your domain in a CNAME file for future deployments with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"echo subdomain.surge.sh > CNAME\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy any other changes in the future with the command ",(0,t.jsx)(n.code,{children:"surge"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-stormkit",children:"Deploying to Stormkit"}),"\n",(0,t.jsxs)(n.p,{children:["You can deploy your Docusaurus project to ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io",children:"Stormkit"}),", a deployment platform for static websites, single-page applications (SPAs), and serverless functions. For detailed instructions, refer to this ",(0,t.jsx)(n.a,{href:"https://www.stormkit.io/blog/how-to-deploy-docusarous",children:"guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-quantcdn",children:"Deploying to QuantCDN"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Install ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/get-started",children:"Quant CLI"})]}),"\n",(0,t.jsxs)(n.li,{children:["Create a QuantCDN account by ",(0,t.jsx)(n.a,{href:"https://dashboard.quantcdn.io/register",children:"signing up"})]}),"\n",(0,t.jsxs)(n.li,{children:["Initialize your project with ",(0,t.jsx)(n.code,{children:"quant init"})," and fill in your credentials:","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant init\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Deploy your site.","\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"quant deploy\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"https://docs.quantcdn.io/docs/cli/continuous-integration",children:"docs"})," and ",(0,t.jsx)(n.a,{href:"https://www.quantcdn.io/blog",children:"blog"})," for more examples and use cases for deploying to QuantCDN."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-layer0",children:"Deploying to Layer0"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.layer0.co",children:"Layer0"})," is an all-in-one platform to develop, deploy, preview, experiment on, monitor, and run your headless frontend. It is focused on large, dynamic websites and best-in-class performance through EdgeJS (a JavaScript-based Content Delivery Network), predictive prefetching, and performance monitoring. Layer0 offers a free tier. Get started in just a few minutes by following ",(0,t.jsx)(n.a,{href:"https://docs.layer0.co/guides/docusaurus",children:"Layer0's guide to deploying Docusaurus"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-cloudflare-pages",children:"Deploying to Cloudflare Pages"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://pages.cloudflare.com/",children:"Cloudflare Pages"})," is a Jamstack platform for frontend developers to collaborate and deploy websites. Get started within a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/apidev234/deploying-docusaurus-to-cloudflare-pages-565g",children:"this article"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-azure-static-web-apps",children:"Deploying to Azure Static Web Apps"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/azure/static-web-apps/overview",children:"Azure Static Web Apps"})," is a service that automatically builds and deploys full-stack web apps to Azure directly from the code repository, simplifying the developer experience for CI/CD. Static Web Apps separates the web application's static assets from its dynamic (API) endpoints. Static assets are served from globally-distributed content servers, making it faster for clients to retrieve files using servers nearby. Dynamic APIs are scaled with serverless architectures using an event-driven functions-based approach that is more cost-effective and scales on demand. Get started in a few minutes by following ",(0,t.jsx)(n.a,{href:"https://dev.to/azure/11-share-content-with-docusaurus-azure-static-web-apps-30hc",children:"this step-by-step guide"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"deploying-to-kinsta",children:"Deploying to Kinsta"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://kinsta.com/static-site-hosting",children:"Kinsta Static Site Hosting"})," lets you deploy up to 100 static sites for free, custom domains with SSL, 100 GB monthly bandwidth, and 260+ Cloudflare CDN locations."]}),"\n",(0,t.jsxs)(n.p,{children:["Get started in just a few clicks by following our ",(0,t.jsx)(n.a,{href:"https://kinsta.com/docs/docusaurus-example/",children:"Docusaurus on Kinsta"})," article."]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>r});var t=s(27378);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/072728dc.d8faff6c.js b/assets/js/072728dc.d8faff6c.js new file mode 100644 index 0000000000..3deb836088 --- /dev/null +++ b/assets/js/072728dc.d8faff6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75809],{9133:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:3},l=void 0,d={id:"toc/toc-3-_",title:"toc-3-_",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx",sourceDirName:"toc",slug:"/toc/toc-3-_",permalink:"/tests/docs/toc/toc-3-_",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_min_heading_level:3},sidebar:"sidebar",previous:{title:"toc-3-5",permalink:"/tests/docs/toc/toc-3-5"},next:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07d8cde9.e6bb1f93.js b/assets/js/07d8cde9.e6bb1f93.js new file mode 100644 index 0000000000..490385f4e7 --- /dev/null +++ b/assets/js/07d8cde9.e6bb1f93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75791],{24048:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>l});var n=i(24246),t=i(71670);const c={sidebar_position:0,slug:"/api/misc/create-docusaurus"},a="\ud83d\udce6 create-docusaurus",o={id:"api/misc/create-docusaurus",title:"\ud83d\udce6 create-docusaurus",description:"A scaffolding utility to help you instantly set up a functional Docusaurus app.",source:"@site/docs/api/misc/create-docusaurus.mdx",sourceDirName:"api/misc",slug:"/api/misc/create-docusaurus",permalink:"/docs/api/misc/create-docusaurus",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,sidebarPosition:0,frontMatter:{sidebar_position:0,slug:"/api/misc/create-docusaurus"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-mermaid",permalink:"/docs/api/themes/@docusaurus/theme-mermaid"},next:{title:"\ud83d\udce6 eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin"}},r={},l=[{value:"Usage",id:"usage",level:2},{value:"Options",id:"options",level:2},{value:"<code>-t, --typescript</code>",id:"typescript",level:3},{value:"<code>-g, --git-strategy</code>",id:"git-strategy",level:3},{value:"<code>-p, --package-manager</code>",id:"package-manager",level:3},{value:"<code>-s, --skip-install</code>",id:"skip-install",level:3}];function d(e){const s={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"-create-docusaurus",children:"\ud83d\udce6 create-docusaurus"}),"\n",(0,n.jsx)(s.p,{children:"A scaffolding utility to help you instantly set up a functional Docusaurus app."}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npx create-docusaurus@latest [name] [template] [rootDir]\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"name"})," argument will be used as the site's path as well as the ",(0,n.jsx)(s.code,{children:"name"})," field in the created app's package.json. It can be an absolute path, or a path relative to ",(0,n.jsx)(s.code,{children:"rootDir"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"template"})," argument can be one of the following:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"classic"}),": Uses the classic template (recommended)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"facebook"}),": Uses the Facebook/Meta template, which contains some Meta-specific setup"]}),"\n",(0,n.jsxs)(s.li,{children:["A git repo URL (beginning with ",(0,n.jsx)(s.code,{children:"https://"})," or ",(0,n.jsx)(s.code,{children:"git@"}),"), which can be cloned to the destination"]}),"\n",(0,n.jsx)(s.li,{children:"A local file path relative to CWD, which contains the files to be copied to destination"}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"rootDir"})," will be used to resolve the absolute path to the site directory. The default is CWD."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"This command should be preferably used in an interactive shell so all features are available."})}),"\n",(0,n.jsx)(s.h2,{id:"options",children:"Options"}),"\n",(0,n.jsx)(s.h3,{id:"typescript",children:(0,n.jsx)(s.code,{children:"-t, --typescript"})}),"\n",(0,n.jsxs)(s.p,{children:["Used when the template argument is a recognized name. Currently, only ",(0,n.jsx)(s.code,{children:"classic"})," provides a TypeScript variant."]}),"\n",(0,n.jsx)(s.h3,{id:"git-strategy",children:(0,n.jsx)(s.code,{children:"-g, --git-strategy"})}),"\n",(0,n.jsx)(s.p,{children:"Used when the template argument is a git repo. It needs to be one of:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"deep"}),": preserves full git history"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"shallow"}),": clones with ",(0,n.jsx)(s.code,{children:"--depth=1"})]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"copy"}),": does a shallow clone, but does not create a git repo"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"custom"}),": enter your custom git clone command. We will prompt you for it. You can write something like ",(0,n.jsx)(s.code,{children:"git clone --depth 10"}),", and we will append the repository URL and destination directory."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"package-manager",children:(0,n.jsx)(s.code,{children:"-p, --package-manager"})}),"\n",(0,n.jsxs)(s.p,{children:["Value should be one of ",(0,n.jsx)(s.code,{children:"npm"}),", ",(0,n.jsx)(s.code,{children:"yarn"}),", ",(0,n.jsx)(s.code,{children:"pnpm"}),", or ",(0,n.jsx)(s.code,{children:"bun"}),". If it's not explicitly provided, Docusaurus will infer one based on:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The lockfile already present in the CWD (e.g. if you are setting up website in an existing project)"}),"\n",(0,n.jsxs)(s.li,{children:["The command used to invoke ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," (e.g. ",(0,n.jsx)(s.code,{children:"npm init"}),", ",(0,n.jsx)(s.code,{children:"npx"}),", ",(0,n.jsx)(s.code,{children:"yarn create"}),", ",(0,n.jsx)(s.code,{children:"bunx"}),", etc.)"]}),"\n",(0,n.jsx)(s.li,{children:"Interactive prompting, in case all heuristics are not present"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"skip-install",children:(0,n.jsx)(s.code,{children:"-s, --skip-install"})}),"\n",(0,n.jsxs)(s.p,{children:["If provided, Docusaurus will not automatically install dependencies after creating the app. The ",(0,n.jsx)(s.code,{children:"--package-manager"})," option is only useful when you are actually installing dependencies."]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>o,a:()=>a});var n=i(27378);const t={},c=n.createContext(t);function a(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07e02e06.36631e65.js b/assets/js/07e02e06.36631e65.js new file mode 100644 index 0000000000..384d271c13 --- /dev/null +++ b/assets/js/07e02e06.36631e65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99305],{70681:s=>{s.exports=JSON.parse('{"tag":{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus","allTagsPath":"/tests/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/docusaurus/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/docusaurus","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/08b2e33e.7d6ae115.js b/assets/js/08b2e33e.7d6ae115.js new file mode 100644 index 0000000000..9b2bd1330c --- /dev/null +++ b/assets/js/08b2e33e.7d6ae115.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20989],{3381:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>r,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>h,toc:()=>u});var i=t(24246),n=t(71670);const o={mdx:{format:"md"},date:"2022-05-04T20:00",authors:["aerovulpe","AkiraVoid","andrewnicols","AntonPalmqvist","ApsarasX","chelproc","chernodub","CuratorCat","cwen0","cxOrz","DanRoscigno","deiucanta","deployn","Dr-Electron","dr-ngubo","duanwilliam","elias-pap","imsingh","jeffreyaven","jodyheavener","JohnnyMcWeed","johnnyreilly","Josh-Cena","kaycebasques","kgolubic","layerzzzio","leedom92","LeviticusMB","lex111","lukasbach","mjau-mjau","mxhdx","nartc","naveensrinivasan","pcordon","phryneas","Pierre-Gilles","redhat123456","rev4324","sandypockets","shczhen","slorber","sulu5890","surendran82","svix-ken","sykp241095","zzzhangqi"]},s="2.0.0-beta.19",h={permalink:"/changelog/2.0.0-beta.19",source:"@site/changelog/source/2.0.0-beta.19.md",title:"2.0.0-beta.19",description:"New Feature",date:"2022-05-04T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Aaron Nwabuoku",alias:"aerovulpe",url:"https://github.com/aerovulpe",imageURL:"https://github.com/aerovulpe.png",key:"aerovulpe"},{name:"AkiraVoid",alias:"AkiraVoid",url:"https://github.com/AkiraVoid",imageURL:"https://github.com/AkiraVoid.png",key:"AkiraVoid"},{name:"Andrew Lyons",alias:"andrewnicols",url:"https://github.com/andrewnicols",imageURL:"https://github.com/andrewnicols.png",key:"andrewnicols"},{name:"apq",alias:"AntonPalmqvist",url:"https://github.com/AntonPalmqvist",imageURL:"https://github.com/AntonPalmqvist.png",key:"AntonPalmqvist"},{name:"ApsarasX",alias:"ApsarasX",url:"https://github.com/ApsarasX",imageURL:"https://github.com/ApsarasX.png",key:"ApsarasX"},{name:"chelproc",alias:"chelproc",url:"https://github.com/chelproc",imageURL:"https://github.com/chelproc.png",key:"chelproc"},{name:"Viktor Chernodub",alias:"chernodub",url:"https://github.com/chernodub",imageURL:"https://github.com/chernodub.png",key:"chernodub"},{name:"curatorcat.pcc.eth",alias:"CuratorCat",url:"https://github.com/CuratorCat",imageURL:"https://github.com/CuratorCat.png",key:"CuratorCat"},{name:"Cwen Yin",alias:"cwen0",url:"https://github.com/cwen0",imageURL:"https://github.com/cwen0.png",key:"cwen0"},{name:"Fusang\u2740",alias:"cxOrz",url:"https://github.com/cxOrz",imageURL:"https://github.com/cxOrz.png",key:"cxOrz"},{name:"Dan Roscigno",alias:"DanRoscigno",url:"https://github.com/DanRoscigno",imageURL:"https://github.com/DanRoscigno.png",key:"DanRoscigno"},{name:"Andrei Canta",alias:"deiucanta",url:"https://github.com/deiucanta",imageURL:"https://github.com/deiucanta.png",key:"deiucanta"},{name:"deployn",alias:"deployn",url:"https://github.com/deployn",imageURL:"https://github.com/deployn.png",key:"deployn"},{name:"Dr-Electron",alias:"Dr-Electron",url:"https://github.com/Dr-Electron",imageURL:"https://github.com/Dr-Electron.png",key:"Dr-Electron"},{name:"Chinazaekpere Ngubo",alias:"dr-ngubo",url:"https://github.com/dr-ngubo",imageURL:"https://github.com/dr-ngubo.png",key:"dr-ngubo"},{name:"duanwilliam",alias:"duanwilliam",url:"https://github.com/duanwilliam",imageURL:"https://github.com/duanwilliam.png",key:"duanwilliam"},{name:"Elias Papavasileiou",alias:"elias-pap",url:"https://github.com/elias-pap",imageURL:"https://github.com/elias-pap.png",key:"elias-pap"},{name:"Indermohan Singh",alias:"imsingh",url:"https://github.com/imsingh",imageURL:"https://github.com/imsingh.png",key:"imsingh"},{name:"Jeffrey Aven",alias:"jeffreyaven",url:"https://github.com/jeffreyaven",imageURL:"https://github.com/jeffreyaven.png",key:"jeffreyaven"},{name:"Jody Heavener",alias:"jodyheavener",url:"https://github.com/jodyheavener",imageURL:"https://github.com/jodyheavener.png",key:"jodyheavener"},{name:"JMW",alias:"JohnnyMcWeed",url:"https://github.com/JohnnyMcWeed",imageURL:"https://github.com/JohnnyMcWeed.png",key:"JohnnyMcWeed"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Kayce Basques",alias:"kaycebasques",url:"https://github.com/kaycebasques",imageURL:"https://github.com/kaycebasques.png",key:"kaycebasques"},{name:"kgolubic",alias:"kgolubic",url:"https://github.com/kgolubic",imageURL:"https://github.com/kgolubic.png",key:"kgolubic"},{name:"loic",alias:"layerzzzio",url:"https://github.com/layerzzzio",imageURL:"https://github.com/layerzzzio.png",key:"layerzzzio"},{name:"Leedom",alias:"leedom92",url:"https://github.com/leedom92",imageURL:"https://github.com/leedom92.png",key:"leedom92"},{name:"Martin Blom",alias:"LeviticusMB",url:"https://github.com/LeviticusMB",imageURL:"https://github.com/LeviticusMB.png",key:"LeviticusMB"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lukas Bach",alias:"lukasbach",url:"https://github.com/lukasbach",imageURL:"https://github.com/lukasbach.png",key:"lukasbach"},{name:"Karl Ward",alias:"mjau-mjau",url:"https://github.com/mjau-mjau",imageURL:"https://github.com/mjau-mjau.png",key:"mjau-mjau"},{name:"mehdim",alias:"mxhdx",url:"https://github.com/mxhdx",imageURL:"https://github.com/mxhdx.png",key:"mxhdx"},{name:"Chau Tran",alias:"nartc",url:"https://github.com/nartc",imageURL:"https://github.com/nartc.png",key:"nartc"},{name:"Naveen",alias:"naveensrinivasan",url:"https://github.com/naveensrinivasan",imageURL:"https://github.com/naveensrinivasan.png",key:"naveensrinivasan"},{name:"Pablo Cordon",alias:"pcordon",url:"https://github.com/pcordon",imageURL:"https://github.com/pcordon.png",key:"pcordon"},{name:"Lenz Weber-Tronic",alias:"phryneas",url:"https://github.com/phryneas",imageURL:"https://github.com/phryneas.png",key:"phryneas"},{name:"Pierre-Gilles Leymarie",alias:"Pierre-Gilles",url:"https://github.com/Pierre-Gilles",imageURL:"https://github.com/Pierre-Gilles.png",key:"Pierre-Gilles"},{name:"redhat123456",alias:"redhat123456",url:"https://github.com/redhat123456",imageURL:"https://github.com/redhat123456.png",key:"redhat123456"},{name:"rev",alias:"rev4324",url:"https://github.com/rev4324",imageURL:"https://github.com/rev4324.png",key:"rev4324"},{name:"Zac A",alias:"sandypockets",url:"https://github.com/sandypockets",imageURL:"https://github.com/sandypockets.png",key:"sandypockets"},{name:"czhen",alias:"shczhen",url:"https://github.com/shczhen",imageURL:"https://github.com/shczhen.png",key:"shczhen"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Evan",alias:"sulu5890",url:"https://github.com/sulu5890",imageURL:"https://github.com/sulu5890.png",key:"sulu5890"},{name:"surendran82",alias:"surendran82",url:"https://github.com/surendran82",imageURL:"https://github.com/surendran82.png",key:"surendran82"},{name:"svix-ken",alias:"svix-ken",url:"https://github.com/svix-ken",imageURL:"https://github.com/svix-ken.png",key:"svix-ken"},{name:"sykp241095",alias:"sykp241095",url:"https://github.com/sykp241095",imageURL:"https://github.com/sykp241095.png",key:"sykp241095"},{name:"Qi Zhang",alias:"zzzhangqi",url:"https://github.com/zzzhangqi",imageURL:"https://github.com/zzzhangqi.png",key:"zzzhangqi"}],frontMatter:{mdx:{format:"md"},date:"2022-05-04T20:00",authors:["aerovulpe","AkiraVoid","andrewnicols","AntonPalmqvist","ApsarasX","chelproc","chernodub","CuratorCat","cwen0","cxOrz","DanRoscigno","deiucanta","deployn","Dr-Electron","dr-ngubo","duanwilliam","elias-pap","imsingh","jeffreyaven","jodyheavener","JohnnyMcWeed","johnnyreilly","Josh-Cena","kaycebasques","kgolubic","layerzzzio","leedom92","LeviticusMB","lex111","lukasbach","mjau-mjau","mxhdx","nartc","naveensrinivasan","pcordon","phryneas","Pierre-Gilles","redhat123456","rev4324","sandypockets","shczhen","slorber","sulu5890","surendran82","svix-ken","sykp241095","zzzhangqi"]},unlisted:!1,prevItem:{title:"2.0.0-beta.20",permalink:"/changelog/2.0.0-beta.20"},nextItem:{title:"2.0.0-beta.18",permalink:"/changelog/2.0.0-beta.18"},listPageLink:"/changelog/page/2"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[];function m(e){return(0,i.jsx)(i.Fragment,{})}function l(e={}){const{wrapper:a}={...(0,n.a)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(m,{...e})}):m()}},71670:(e,a,t)=>{t.d(a,{Z:()=>h,a:()=>s});var i=t(27378);const n={},o=i.createContext(n);function s(e){const a=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function h(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),i.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/08eb0f2d.97c644b7.js b/assets/js/08eb0f2d.97c644b7.js new file mode 100644 index 0000000000..130005ea07 --- /dev/null +++ b/assets/js/08eb0f2d.97c644b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52453],{88675:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>t,toc:()=>o});var i=n(24246),h=n(71670);const c={mdx:{format:"md"},date:"2022-07-08T20:00",authors:["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},a="2.0.0-beta.22",t={permalink:"/changelog/2.0.0-beta.22",source:"@site/changelog/source/2.0.0-beta.22.md",title:"2.0.0-beta.22",description:"Breaking Change",date:"2022-07-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Fl\xe1vio Silva",alias:"201flaviosilva",url:"https://github.com/201flaviosilva",imageURL:"https://github.com/201flaviosilva.png",key:"201flaviosilva"},{name:"7Wate",alias:"7Wate",url:"https://github.com/7Wate",imageURL:"https://github.com/7Wate.png",key:"7Wate"},{name:"\u8d64\u57ce\u7ed3\u8863",alias:"AkagiYui",url:"https://github.com/AkagiYui",imageURL:"https://github.com/AkagiYui.png",key:"AkagiYui"},{name:"alewolf",alias:"alewolf",url:"https://github.com/alewolf",imageURL:"https://github.com/alewolf.png",key:"alewolf"},{name:"Alexander Nestorov",alias:"alexandernst",url:"https://github.com/alexandernst",imageURL:"https://github.com/alexandernst.png",key:"alexandernst"},{name:"Ahmed Altomy",alias:"Altomy",url:"https://github.com/Altomy",imageURL:"https://github.com/Altomy.png",key:"Altomy"},{name:"Sunghyun Cho",alias:"anaclumos",url:"https://github.com/anaclumos",imageURL:"https://github.com/anaclumos.png",key:"anaclumos"},{name:"Benjamin Cabanes",alias:"bcabanes",url:"https://github.com/bcabanes",imageURL:"https://github.com/bcabanes.png",key:"bcabanes"},{name:"Ben Myers",alias:"BenDMyers",url:"https://github.com/BenDMyers",imageURL:"https://github.com/BenDMyers.png",key:"BenDMyers"},{name:"Boulet",alias:"Boulet-",url:"https://github.com/Boulet-",imageURL:"https://github.com/Boulet-.png",key:"Boulet-"},{name:"Charles Ancheta",alias:"cbebe",url:"https://github.com/cbebe",imageURL:"https://github.com/cbebe.png",key:"cbebe"},{name:"Clemie McCartney",alias:"clemiee",url:"https://github.com/clemiee",imageURL:"https://github.com/clemiee.png",key:"clemiee"},{name:"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t",alias:"datlechin",url:"https://github.com/datlechin",imageURL:"https://github.com/datlechin.png",key:"datlechin"},{name:"Dharsan B",alias:"DharsanB",url:"https://github.com/DharsanB",imageURL:"https://github.com/DharsanB.png",key:"DharsanB"},{name:"dht",alias:"dht",url:"https://github.com/dht",imageURL:"https://github.com/dht.png",key:"dht"},{name:"Diego Fran\xe7a",alias:"difranca",url:"https://github.com/difranca",imageURL:"https://github.com/difranca.png",key:"difranca"},{name:"dpang314",alias:"dpang314",url:"https://github.com/dpang314",imageURL:"https://github.com/dpang314.png",key:"dpang314"},{name:"emattia",alias:"emattia",url:"https://github.com/emattia",imageURL:"https://github.com/emattia.png",key:"emattia"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"\u51f1\u6069 Kane",alias:"Gary50613",url:"https://github.com/Gary50613",imageURL:"https://github.com/Gary50613.png",key:"Gary50613"},{name:"Wes McNamee",alias:"ghostsquad",url:"https://github.com/ghostsquad",imageURL:"https://github.com/ghostsquad.png",key:"ghostsquad"},{name:"Hyunseung Lee",alias:"HyunseungLee-Travis",url:"https://github.com/HyunseungLee-Travis",imageURL:"https://github.com/HyunseungLee-Travis.png",key:"HyunseungLee-Travis"},{name:"DOLLE",alias:"JeremyDolle",url:"https://github.com/JeremyDolle",imageURL:"https://github.com/JeremyDolle.png",key:"JeremyDolle"},{name:"Johnie Hjelm",alias:"johnie",url:"https://github.com/johnie",imageURL:"https://github.com/johnie.png",key:"johnie"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"JP",alias:"jpdriver",url:"https://github.com/jpdriver",imageURL:"https://github.com/jpdriver.png",key:"jpdriver"},{name:"Joshua Schmitt",alias:"jqshuv",url:"https://github.com/jqshuv",imageURL:"https://github.com/jqshuv.png",key:"jqshuv"},{name:"K\xfcr\u015fat \u015eim\u015fek",alias:"kursatsmsek",url:"https://github.com/kursatsmsek",imageURL:"https://github.com/kursatsmsek.png",key:"kursatsmsek"},{name:"Lane Goolsby",alias:"lanegoolsby",url:"https://github.com/lanegoolsby",imageURL:"https://github.com/lanegoolsby.png",key:"lanegoolsby"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Matthias Koch",alias:"matkoch",url:"https://github.com/matkoch",imageURL:"https://github.com/matkoch.png",key:"matkoch"},{name:"\u674e\u5c0f\u96e8",alias:"metal-young",url:"https://github.com/metal-young",imageURL:"https://github.com/metal-young.png",key:"metal-young"},{name:"Tom Mrazauskas",alias:"mrazauskas",url:"https://github.com/mrazauskas",imageURL:"https://github.com/mrazauskas.png",key:"mrazauskas"},{name:"pincman",alias:"pincman",url:"https://github.com/pincman",imageURL:"https://github.com/pincman.png",key:"pincman"},{name:"Redcamel",alias:"redcamel",url:"https://github.com/redcamel",imageURL:"https://github.com/redcamel.png",key:"redcamel"},{name:"Rein van Haaren",alias:"reinvanhaaren",url:"https://github.com/reinvanhaaren",imageURL:"https://github.com/reinvanhaaren.png",key:"reinvanhaaren"},{name:"Rudra Sen",alias:"RudraSen2",url:"https://github.com/RudraSen2",imageURL:"https://github.com/RudraSen2.png",key:"RudraSen2"},{name:"sado",alias:"sado0823",url:"https://github.com/sado0823",imageURL:"https://github.com/sado0823.png",key:"sado0823"},{name:"Dzung Do",alias:"saosangmo",url:"https://github.com/saosangmo",imageURL:"https://github.com/saosangmo.png",key:"saosangmo"},{name:"Dima Grossman",alias:"scopsy",url:"https://github.com/scopsy",imageURL:"https://github.com/scopsy.png",key:"scopsy"},{name:"SheetJSDev",alias:"SheetJSDev",url:"https://github.com/SheetJSDev",imageURL:"https://github.com/SheetJSDev.png",key:"SheetJSDev"},{name:"Joe Harrison",alias:"sigwinch28",url:"https://github.com/sigwinch28",imageURL:"https://github.com/sigwinch28.png",key:"sigwinch28"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Huy Nguyen",alias:"Smilefounder",url:"https://github.com/Smilefounder",imageURL:"https://github.com/Smilefounder.png",key:"Smilefounder"},{name:"Steven Serrata",alias:"sserrata",url:"https://github.com/sserrata",imageURL:"https://github.com/sserrata.png",key:"sserrata"},{name:"Szil\xe1rd D\xf3r\xf3",alias:"szilarddoro",url:"https://github.com/szilarddoro",imageURL:"https://github.com/szilarddoro.png",key:"szilarddoro"},{name:"Le Thi Van",alias:"vannyle",url:"https://github.com/vannyle",imageURL:"https://github.com/vannyle.png",key:"vannyle"},{name:"Webber Takken",alias:"webbertakken",url:"https://github.com/webbertakken",imageURL:"https://github.com/webbertakken.png",key:"webbertakken"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Paul O\u2019Shannessy",alias:"zpao",url:"https://github.com/zpao",imageURL:"https://github.com/zpao.png",key:"zpao"}],frontMatter:{mdx:{format:"md"},date:"2022-07-08T20:00",authors:["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},unlisted:!1,prevItem:{title:"2.0.0-rc.1",permalink:"/changelog/2.0.0-rc.1"},nextItem:{title:"2.0.0-beta.21",permalink:"/changelog/2.0.0-beta.21"},listPageLink:"/changelog/"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83d\udd27 Maintenance",id:"wrench-maintenance",level:2},{value:"Committers: 51",id:"committers-51",level:2}];function l(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7740",children:"#7740"})," refactor(theme): nest theme icons under subfolder @theme/Icon/* (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7716",children:"#7716"})," refactor(theme): split BlogPostItem into smaller theme subcomponents (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7660",children:"#7660"})," refactor(theme-common): split package into public/internal API entrypoints (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7644",children:"#7644"})," refactor(docs,theme): split DocItem comp, useDoc hook (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7642",children:"#7642"}),' refactor: remove "error" reporting level, move reportMessage to logger (',(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7152",children:"#7152"})," refactor: handle all admonitions via JSX component (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7732",children:"#7732"})," feat(theme-translations): Dutch translation (",(0,i.jsx)(s.a,{href:"https://github.com/reinvanhaaren",children:"@reinvanhaaren"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7715",children:"#7715"})," feat(theme-translations): Swedish translation (",(0,i.jsx)(s.a,{href:"https://github.com/johnie",children:"@johnie"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7666",children:"#7666"})," feat(algolia-search): allow translating search modal (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7643",children:"#7643"})," feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7649",children:"#7649"})," feat(client-redirects): make plugin respect onDuplicateRoutes config (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7624",children:"#7624"})," feat: allow customizing localization path of each locale (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7581",children:"#7581"})," feat(core): allow opting out of HTML minification (",(0,i.jsx)(s.a,{href:"https://github.com/alexandernst",children:"@alexandernst"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7557",children:"#7557"})," feat: allow specifying custom target for FooterLogo (",(0,i.jsx)(s.a,{href:"https://github.com/vannyle",children:"@vannyle"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7556",children:"#7556"})," feat: add admonition type title translations (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7386",children:"#7386"})," feat(core): allow customizing the i18n directory path (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7514",children:"#7514"})," feat(live-codeblock): add support for noInline to interactive code blocks (",(0,i.jsx)(s.a,{href:"https://github.com/jpdriver",children:"@jpdriver"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7461",children:"#7461"})," feat(content-docs): last_update front matter (",(0,i.jsx)(s.a,{href:"https://github.com/dpang314",children:"@dpang314"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7727",children:"#7727"})," fix(theme): show blog post edit link even when no tag & not truncated (",(0,i.jsx)(s.a,{href:"https://github.com/anaclumos",children:"@anaclumos"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7659",children:"#7659"})," fix(theme-classic): expose empty string alt text in navbar logos (",(0,i.jsx)(s.a,{href:"https://github.com/BenDMyers",children:"@BenDMyers"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7595",children:"#7595"})," fix(content-pages): add article wrapper around MDXContent (",(0,i.jsx)(s.a,{href:"https://github.com/matkoch",children:"@matkoch"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7694",children:"#7694"})," fix(theme-translations): typo in vi locale (",(0,i.jsx)(s.a,{href:"https://github.com/saosangmo",children:"@saosangmo"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7638",children:"#7638"})," fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7634",children:"#7634"})," fix(content-docs): allow translating doc labels in sidebars.js (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7604",children:"#7604"})," fix(utils): allow any non-boundary characters in Markdown heading ID (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7593",children:"#7593"})," fix(cssnano-preset): disable z-index minification (",(0,i.jsx)(s.a,{href:"https://github.com/dpang314",children:"@dpang314"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7551",children:"#7551"})," fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7485",children:"#7485"})," fix(theme-classic): inconsistent code block wrapping (",(0,i.jsx)(s.a,{href:"https://github.com/dpang314",children:"@dpang314"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7521",children:"#7521"})," fix: make type-checking work in Yarn PnP (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7696",children:"#7696"})," fix(theme-translations): improve grammar of zh translation (",(0,i.jsx)(s.a,{href:"https://github.com/AkagiYui",children:"@AkagiYui"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7691",children:"#7691"})," chore(theme-translations): complete vi translations (",(0,i.jsx)(s.a,{href:"https://github.com/datlechin",children:"@datlechin"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7683",children:"#7683"})," chore(theme-translations): complete ar translations (",(0,i.jsx)(s.a,{href:"https://github.com/Altomy",children:"@Altomy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7633",children:"#7633"})," chore(theme-translations): complete ko translations (",(0,i.jsx)(s.a,{href:"https://github.com/HyunseungLee-Travis",children:"@HyunseungLee-Travis"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7702",children:"#7702"})," feat(deploy): copy local git config to tmp repo (",(0,i.jsx)(s.a,{href:"https://github.com/ghostsquad",children:"@ghostsquad"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7600",children:"#7600"})," fix: force refresh on chunk preload error (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7673",children:"#7673"}),' fix(content-docs): format last update date as "Jun 19, 2020" (',(0,i.jsx)(s.a,{href:"https://github.com/sigwinch28",children:"@sigwinch28"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7671",children:"#7671"})," refactor(theme-common): rename useDynamicCallback to useEvent (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7648",children:"#7648"})," fix(theme-common): make useShallowMemoObject key-order-insensitive (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7639",children:"#7639"})," chore(create): update the facebook template with current assets (",(0,i.jsx)(s.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7520",children:"#7520"})," feat: add engines field to templates' package.json (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7579",children:"#7579"})," refactor(pwa): simplify registerSW code, fix ESLint errors (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7545",children:"#7545"})," feat(analytics): allow query/hash changes to be sent to GA (",(0,i.jsx)(s.a,{href:"https://github.com/lanegoolsby",children:"@lanegoolsby"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7739",children:"#7739"})," docs: swizzle react-live with eject (",(0,i.jsx)(s.a,{href:"https://github.com/SheetJSDev",children:"@SheetJSDev"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7723",children:"#7723"})," docs: add GitHub pages deployment troubleshooting guide (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7705",children:"#7705"})," docs: mention MDXContent (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7675",children:"#7675"})," docs: add docusaurus-openapi-docs to resources (",(0,i.jsx)(s.a,{href:"https://github.com/sserrata",children:"@sserrata"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7677",children:"#7677"})," docs: add more info on github cross repo deployment (",(0,i.jsx)(s.a,{href:"https://github.com/bcabanes",children:"@bcabanes"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7563",children:"#7563"})," docs: add awesome-docusaurus resource (",(0,i.jsx)(s.a,{href:"https://github.com/webbertakken",children:"@webbertakken"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7665",children:"#7665"})," docs: add link from every category index page to the guide page (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7519",children:"#7519"})," docs: multiple documentation elaborations (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7518",children:"#7518"})," docs: remove useless front matter (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7512",children:"#7512"})," docs: update Kent C. Dodds Twitter avatar (",(0,i.jsx)(s.a,{href:"https://github.com/DharsanB",children:"@DharsanB"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7611",children:"#7611"})," docs: advise using Node 18 in deployment (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7582",children:"#7582"})," docs: make localhost links clickable (",(0,i.jsx)(s.a,{href:"https://github.com/dht",children:"@dht"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7607",children:"#7607"})," refactor(client-redirects): elaborate documentation, minor refactor (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"wrench-maintenance",children:"\ud83d\udd27 Maintenance"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7676",children:"#7676"})," refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7674",children:"#7674"})," chore: prevent importing theme components with relative paths (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7664",children:"#7664"})," chore: upgrade Infima to alpha.40 (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7663",children:"#7663"})," misc: share .vscode/extensions.json (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7583",children:"#7583"})," refactor(cli): make the CLI an even thinner wrapper around command functions (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7547",children:"#7547"})," chore: update static-site-generator-webpack-plugin (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"eslint-plugin"}),", ",(0,i.jsx)(s.code,{children:"lqip-loader"}),", ",(0,i.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7586",children:"#7586"})," chore: upgrade to TS 4.7, compile with NodeNext (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-51",children:"Committers: 51"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["7Wate (",(0,i.jsx)(s.a,{href:"https://github.com/7Wate",children:"@7Wate"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ahmed Altomy (",(0,i.jsx)(s.a,{href:"https://github.com/Altomy",children:"@Altomy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Alexander Nestorov (",(0,i.jsx)(s.a,{href:"https://github.com/alexandernst",children:"@alexandernst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ben Myers (",(0,i.jsx)(s.a,{href:"https://github.com/BenDMyers",children:"@BenDMyers"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Benjamin Cabanes (",(0,i.jsx)(s.a,{href:"https://github.com/bcabanes",children:"@bcabanes"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Boulet (",(0,i.jsx)(s.a,{href:"https://github.com/Boulet-",children:"@Boulet-"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Charles Ancheta (",(0,i.jsx)(s.a,{href:"https://github.com/cbebe",children:"@cbebe"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Clemie McCartney (",(0,i.jsx)(s.a,{href:"https://github.com/clemiee",children:"@clemiee"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["DOLLE (",(0,i.jsx)(s.a,{href:"https://github.com/JeremyDolle",children:"@JeremyDolle"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dharsan B (",(0,i.jsx)(s.a,{href:"https://github.com/DharsanB",children:"@DharsanB"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Diego Fran\xe7a (",(0,i.jsx)(s.a,{href:"https://github.com/difranca",children:"@difranca"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dima Grossman (",(0,i.jsx)(s.a,{href:"https://github.com/scopsy",children:"@scopsy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dzung Do (",(0,i.jsx)(s.a,{href:"https://github.com/saosangmo",children:"@saosangmo"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Fl\xe1vio Silva (",(0,i.jsx)(s.a,{href:"https://github.com/201flaviosilva",children:"@201flaviosilva"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Forresst (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Huy Nguyen (",(0,i.jsx)(s.a,{href:"https://github.com/Smilefounder",children:"@Smilefounder"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Hyunseung Lee (",(0,i.jsx)(s.a,{href:"https://github.com/HyunseungLee-Travis",children:"@HyunseungLee-Travis"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["JP (",(0,i.jsx)(s.a,{href:"https://github.com/jpdriver",children:"@jpdriver"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joe Harrison (",(0,i.jsx)(s.a,{href:"https://github.com/sigwinch28",children:"@sigwinch28"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["John Reilly (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Johnie Hjelm (",(0,i.jsx)(s.a,{href:"https://github.com/johnie",children:"@johnie"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Schmitt (",(0,i.jsx)(s.a,{href:"https://github.com/jqshuv",children:"@jqshuv"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["K\xfcr\u015fat \u015eim\u015fek (",(0,i.jsx)(s.a,{href:"https://github.com/kursatsmsek",children:"@kursatsmsek"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Lane Goolsby (",(0,i.jsx)(s.a,{href:"https://github.com/lanegoolsby",children:"@lanegoolsby"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Le Thi Van (",(0,i.jsx)(s.a,{href:"https://github.com/vannyle",children:"@vannyle"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Matthias Koch (",(0,i.jsx)(s.a,{href:"https://github.com/matkoch",children:"@matkoch"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ng\xf4 Qu\u1ed1c \u0110\u1ea1t (",(0,i.jsx)(s.a,{href:"https://github.com/datlechin",children:"@datlechin"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Paul O\u2019Shannessy (",(0,i.jsx)(s.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Redcamel (",(0,i.jsx)(s.a,{href:"https://github.com/redcamel",children:"@redcamel"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Rein van Haaren (",(0,i.jsx)(s.a,{href:"https://github.com/reinvanhaaren",children:"@reinvanhaaren"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Rudra Sen (",(0,i.jsx)(s.a,{href:"https://github.com/RudraSen2",children:"@RudraSen2"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Steven Serrata (",(0,i.jsx)(s.a,{href:"https://github.com/sserrata",children:"@sserrata"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sunghyun Cho (",(0,i.jsx)(s.a,{href:"https://github.com/anaclumos",children:"@anaclumos"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Szil\xe1rd D\xf3r\xf3 (",(0,i.jsx)(s.a,{href:"https://github.com/szilarddoro",children:"@szilarddoro"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tom Mrazauskas (",(0,i.jsx)(s.a,{href:"https://github.com/mrazauskas",children:"@mrazauskas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Webber Takken (",(0,i.jsx)(s.a,{href:"https://github.com/webbertakken",children:"@webbertakken"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Wes McNamee (",(0,i.jsx)(s.a,{href:"https://github.com/ghostsquad",children:"@ghostsquad"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Yangshun Tay (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/SheetJSDev",children:"@SheetJSDev"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/alewolf",children:"@alewolf"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/dpang314",children:"@dpang314"})}),"\n",(0,i.jsxs)(s.li,{children:["dht (",(0,i.jsx)(s.a,{href:"https://github.com/dht",children:"@dht"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["emattia (",(0,i.jsx)(s.a,{href:"https://github.com/emattia",children:"@emattia"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["pincman (",(0,i.jsx)(s.a,{href:"https://github.com/pincman",children:"@pincman"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["sado (",(0,i.jsx)(s.a,{href:"https://github.com/sado0823",children:"@sado0823"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["\u51f1\u6069 Kane (",(0,i.jsx)(s.a,{href:"https://github.com/Gary50613",children:"@Gary50613"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["\u674e\u5c0f\u96e8 (",(0,i.jsx)(s.a,{href:"https://github.com/metal-young",children:"@metal-young"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["\u8d64\u57ce\u7ed3\u8863 (",(0,i.jsx)(s.a,{href:"https://github.com/AkagiYui",children:"@AkagiYui"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,h.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>a});var i=n(27378);const h={},c=i.createContext(h);function a(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(h):e.components||h:a(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/090b93b4.a5c9059f.js b/assets/js/090b93b4.a5c9059f.js new file mode 100644 index 0000000000..af4d4e4061 --- /dev/null +++ b/assets/js/090b93b4.a5c9059f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98796],{75736:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>h,contentTitle:()=>o,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var n=a(24246),i=a(71670);const s={mdx:{format:"md"},date:"2022-03-03T20:00",authors:["anicholls","arifszn","dmitryvinn","dstotijn","Josh-Cena","PatelN123","slorber","vaibhavshn"]},o="2.0.0-beta.17",r={permalink:"/changelog/2.0.0-beta.17",source:"@site/changelog/source/2.0.0-beta.17.md",title:"2.0.0-beta.17",description:"New Feature",date:"2022-03-03T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Alex Nicholls",alias:"anicholls",url:"https://github.com/anicholls",imageURL:"https://github.com/anicholls.png",key:"anicholls"},{name:"Ariful Alam",alias:"arifszn",url:"https://github.com/arifszn",imageURL:"https://github.com/arifszn.png",key:"arifszn"},{name:"Dmitry Vinnik",alias:"dmitryvinn",url:"https://github.com/dmitryvinn",imageURL:"https://github.com/dmitryvinn.png",key:"dmitryvinn"},{name:"David Stotijn",alias:"dstotijn",url:"https://github.com/dstotijn",imageURL:"https://github.com/dstotijn.png",key:"dstotijn"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Nayan Patel",alias:"PatelN123",url:"https://github.com/PatelN123",imageURL:"https://github.com/PatelN123.png",key:"PatelN123"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Vaibhav Shinde",alias:"vaibhavshn",url:"https://github.com/vaibhavshn",imageURL:"https://github.com/vaibhavshn.png",key:"vaibhavshn"}],frontMatter:{mdx:{format:"md"},date:"2022-03-03T20:00",authors:["anicholls","arifszn","dmitryvinn","dstotijn","Josh-Cena","PatelN123","slorber","vaibhavshn"]},unlisted:!1,prevItem:{title:"2.0.0-beta.18",permalink:"/changelog/2.0.0-beta.18"},nextItem:{title:"2.0.0-beta.16",permalink:"/changelog/2.0.0-beta.16"},listPageLink:"/changelog/page/2"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function m(t){return(0,n.jsx)(n.Fragment,{})}function c(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(m,{...t})}):m()}},71670:(t,e,a)=>{a.d(e,{Z:()=>r,a:()=>o});var n=a(27378);const i={},s=n.createContext(i);function o(t){const e=n.useContext(s);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:o(t.components),n.createElement(s.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/0938a5e1.42c52b23.js b/assets/js/0938a5e1.42c52b23.js new file mode 100644 index 0000000000..3f813f2ab9 --- /dev/null +++ b/assets/js/0938a5e1.42c52b23.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8648],{40805:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},6698:(e,s,r)=>{r.d(s,{Z:()=>l});var n=r(24246),a=(r(27378),r(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function t(e,s,r){return s in e?Object.defineProperty(e,s,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[s]=r,e}function i(e){for(var s=1;s<arguments.length;s++){var r=null!=arguments[s]?arguments[s]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(s){t(e,s,r[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),r.push.apply(r,n)}return r}(Object(s)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))})),e}function l({children:e,minHeight:s,url:r="http://localhost:3000",style:t,bodyStyle:l}){return(0,n.jsxs)("div",{className:o.browserWindow,style:c(i({},t),{minHeight:s}),children:[(0,n.jsxs)("div",{className:o.browserWindowHeader,children:[(0,n.jsxs)("div",{className:o.buttons,children:[(0,n.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(o.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar})]})})]}),(0,n.jsx)("div",{className:o.browserWindowBody,style:l,children:e})]})}},65495:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},73660:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var n=r(24246),a=r(71670),o=r(6698);const t={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},i=void 0,c={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1682099337e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},l={image:r(40805).Z,authorsImageUrls:[void 0]},d=[{value:"Highlights",id:"highlights",level:2},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Config <code>headTags</code>",id:"config-headtags",level:3},{value:"Accessibility",id:"accessibility",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:r(65495).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7490",children:"#7490"}),", we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also ",(0,n.jsx)(s.a,{href:"https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/",children:"added support recently"}),". You can create Mermaid diagrams using Markdown code blocks:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",children:"```mermaid\nsequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!\n```\n"})}),"\n","\n",(0,n.jsx)(o.Z,{children:(0,n.jsx)(s.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"})}),"\n",(0,n.jsxs)(s.p,{children:["Make sure to check the ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/diagrams",children:"documentation"}),", and the ",(0,n.jsx)(s.a,{href:"/tests/pages/diagrams",children:"more advanced examples"})]}),"\n",(0,n.jsxs)(s.h3,{id:"config-headtags",children:["Config ",(0,n.jsx)(s.code,{children:"headTags"})]}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8151",children:"#8151"}),", we added the ability to apply arbitrary HTML ",(0,n.jsx)(s.code,{children:"<head>"})," tags to all pages of your site."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'icon',\n href: '/img/docusaurus.png',\n },\n },\n ],\n};\n"})}),"\n",(0,n.jsx)(s.h3,{id:"accessibility",children:"Accessibility"}),"\n",(0,n.jsx)(s.p,{children:"We did several accessibility improvements:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8207",children:"#8207"}),": improves keyboard navigation for mobile drawer hamburger button"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8161",children:"#8161"}),": improves keyboard navigation for tabs"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8204",children:"#8204"}),": makes the skip to content button support progressive enhancement"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8174",children:"#8174"}),": improves screen reader announcement when toggling between light/dark mode"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,n.jsx)(s.p,{children:"We made validation stricter and improved error messages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8234",children:"#8234"}),": in case of doc processing failure, prints the problematic markdown file path in the error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8192",children:"#8192"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8159",children:"#8159"}),": validates ",(0,n.jsx)(s.code,{children:"siteConfig.url"})," more strictly and with better error message"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8066",children:"#8066"}),": makes config ",(0,n.jsx)(s.code,{children:"url"})," and ",(0,n.jsx)(s.code,{children:"baseUrl"})," fail-safe and less sensitive to the presence or absence of a leading or trailing slash"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"translations",children:"Translations"}),"\n",(0,n.jsx)(s.p,{children:"We completed the default theme translation support for multiple languages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8105",children:"#8105"}),": completes Turkish translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddf7\ud83c\uddfa ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8253",children:"#8253"}),": completes Russian translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddeb\ud83c\uddf7 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8243",children:"#8243"}),": completes French translations"]}),"\n",(0,n.jsxs)(s.li,{children:["\ud83c\uddef\ud83c\uddf5 ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8075",children:"#8075"}),": completes Japanese translations"]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["Completing theme translations is an ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsx)(s.p,{children:"Other notable changes include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8210",children:"#8210"}),": the ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," CLI has a new ",(0,n.jsx)(s.code,{children:"--config"})," option"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8109",children:"#8109"}),": mobile navigation performance optimizations, prefetch resources earlier"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8059",children:"#8059"}),": versions/locales navbar dropdowns preserve hash and querystring on navigation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8227",children:"#8227"}),": the client redirect plugin preserves hash and querystring on redirect"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/2.2.0",children:"2.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>t});var n=r(27378);const a={},o=n.createContext(a);function t(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/096bfee4.9c3640ee.js b/assets/js/096bfee4.9c3640ee.js deleted file mode 100644 index 2f9d268570..0000000000 --- a/assets/js/096bfee4.9c3640ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[1398],{5305:s=>{s.exports=JSON.parse('{"permalink":"/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/09b59f10.b39a6c93.js b/assets/js/09b59f10.b39a6c93.js new file mode 100644 index 0000000000..1f14881327 --- /dev/null +++ b/assets/js/09b59f10.b39a6c93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16887],{35134:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var o=a(24246),n=a(71670);const s={mdx:{format:"md"},date:"2020-04-28T20:00",authors:["jsjoeio","lex111","SamChou19815"]},r="2.0.0-alpha.54",i={permalink:"/changelog/2.0.0-alpha.54",source:"@site/changelog/source/2.0.0-alpha.54.md",title:"2.0.0-alpha.54",description:"HOTFIX for 2.0.0-alpha.53.",date:"2020-04-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"JavaScript Joe",alias:"jsjoeio",url:"https://github.com/jsjoeio",imageURL:"https://github.com/jsjoeio.png",key:"jsjoeio"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"}],frontMatter:{mdx:{format:"md"},date:"2020-04-28T20:00",authors:["jsjoeio","lex111","SamChou19815"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.55",permalink:"/changelog/2.0.0-alpha.55"},nextItem:{title:"2.0.0-alpha.53",permalink:"/changelog/2.0.0-alpha.53"},listPageLink:"/changelog/page/4"},l={authorsImageUrls:[void 0,void 0,void 0]},u=[];function h(e){return(0,o.jsx)(o.Fragment,{})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h()}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>r});var o=a(27378);const n={},s=o.createContext(n);function r(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09de563b.add16e75.js b/assets/js/09de563b.add16e75.js new file mode 100644 index 0000000000..cb61284094 --- /dev/null +++ b/assets/js/09de563b.add16e75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66113],{21887:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var s=t(24246),o=t(71670);const r={mdx:{format:"md"},date:"2024-04-04T20:00",authors:["OzakIOne","slorber"]},i="3.2.1",c={permalink:"/changelog/3.2.1",source:"@site/changelog/source/3.2.1.md",title:"3.2.1",description:"Bug Fix",date:"2024-04-04T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"ozaki",alias:"OzakIOne",url:"https://github.com/OzakIOne",imageURL:"https://github.com/OzakIOne.png",key:"OzakIOne"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2024-04-04T20:00",authors:["OzakIOne","slorber"]},unlisted:!1,nextItem:{title:"3.2.0",permalink:"/changelog/3.2.0"},listPageLink:"/changelog/"},a={authorsImageUrls:[void 0,void 0]},l=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83e\udd16 Dependencies",id:"robot-dependencies",level:2},{value:"Committers: 2",id:"committers-2",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"docusaurus"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/10012",children:"#10012"})," fix(core): fix configurePostCss v3.2 regression (",(0,s.jsx)(n.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9980",children:"#9980"})," docs: remove old github action description (",(0,s.jsx)(n.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/10014",children:"#10014"})," docs(website): fix SEO docs headTags example (",(0,s.jsx)(n.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/10004",children:"#10004"})," docs(website): Announce v3.2 on website/homepage (",(0,s.jsx)(n.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"robot-dependencies",children:"\ud83e\udd16 Dependencies"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/10006",children:"#10006"})," chore(deps): bump actions/dependency-review-action from 4.2.4 to 4.2.5 (",(0,s.jsx)(n.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"committers-2",children:"Committers: 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["S\xe9bastien Lorber (",(0,s.jsx)(n.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["ozaki (",(0,s.jsx)(n.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>i});var s=t(27378);const o={},r=s.createContext(o);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09f49407.cacb86d2.js b/assets/js/09f49407.cacb86d2.js new file mode 100644 index 0000000000..63f507e605 --- /dev/null +++ b/assets/js/09f49407.cacb86d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85668],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const l={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(l.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>D});var n=r(24246),o=r(27378),l=r(40624),s=r(75527),a=r(3620),i=r(44479),u=r(62821),c=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function g(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function f(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function m({queryString:e=!1,groupId:t}){const r=(0,a.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),l=(0,u._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[l,s]}function v(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,l=f(e),[s,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[u,c]=m({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),g=(()=>{const e=null!=u?u:p;return h({value:e,tabValues:l})?e:null})();(0,i.Z)((()=>{g&&a(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);a(e),c(e),b(e)}),[c,b,l]),tabValues:l}}var y=r(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function O(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function k({className:e,block:t,selectedValue:r,selectValue:o,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.o5)(),c=e=>{const t=e.currentTarget,n=i.indexOf(t),l=a[n].value;l!==r&&(u(t),o(l))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",w(O({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:c},o),{className:(0,l.Z)("tabs__item",j.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=v(e);return(0,n.jsxs)("div",{className:(0,l.Z)("tabs-container",j.tabList),children:[(0,n.jsx)(k,O({},e,t)),(0,n.jsx)(P,O({},e,t))]})}function D(e){const t=(0,y.Z)();return(0,n.jsx)(S,w(O({},e),{children:g(e.children)}),String(t))}},43316:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>u,someExport:()=>d,toc:()=>p});var n=r(24246),o=r(71670),l=r(97555),s=r(61132);const a={title:"Blog post MDX Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],hide_reading_time:!0},i=void 0,u={permalink:"/tests/blog/2021/10/07/blog-post-mdx-feed-tests",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx",source:"@site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx",title:"Blog post MDX Feed tests",description:"Some MDX tests, mostly to test how the RSS feed render those",date:"2021-10-07T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"},{label:"blog",permalink:"/tests/blog/tags/blog"},{label:"docusaurus",permalink:"/tests/blog/tags/docusaurus"},{label:"long-long",permalink:"/tests/blog/tags/long-long"},{label:"long-long-long",permalink:"/tests/blog/tags/long-long-long"},{label:"long-long-long-long",permalink:"/tests/blog/tags/long-long-long-long"}],hasTruncateMarker:!0,authors:[{name:"Sebastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",twitter:"sebastienlorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Blog post MDX Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],hide_reading_time:!0},unlisted:!1,prevItem:{title:"Blog post MDX require Feed tests",permalink:"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"},nextItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/09/13/dup-title"}},c={authorsImageUrls:[void 0]},d=42,p=[{value:"Imports",id:"imports",level:2},{value:"Exports",id:"exports",level:2},{value:"Tabs test",id:"tabs-test",level:2}];function b(e){const t={code:"code",h2:"h2",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Some MDX tests, mostly to test how the RSS feed render those"}),"\n","\n",(0,n.jsx)(t.h2,{id:"imports",children:"Imports"}),"\n",(0,n.jsx)(t.p,{children:"Here are some imports:"}),"\n","\n",(0,n.jsx)(t.h2,{id:"exports",children:"Exports"}),"\n",(0,n.jsx)(t.p,{children:"Here are some exports:"}),"\n","\n",(0,n.jsx)(t.h2,{id:"tabs-test",children:"Tabs test"}),"\n",(0,n.jsx)(t.p,{children:"Here are some tabs:"}),"\n",(0,n.jsxs)(l.Z,{children:[(0,n.jsx)(s.Z,{value:"apple",label:"Apple",children:(0,n.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,n.jsx)(s.Z,{value:"orange",label:"Orange",children:(0,n.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})})]}),"\n",(0,n.jsxs)(t.p,{children:["Here are some tabs, inside ",(0,n.jsx)(t.code,{children:"mdx-code-block"}),":"]}),"\n",(0,n.jsxs)(l.Z,{children:[(0,n.jsx)(s.Z,{value:"apple",label:"Apple",children:(0,n.jsx)(t.p,{children:"This is an apple \ud83c\udf4e"})}),(0,n.jsx)(s.Z,{value:"orange",label:"Orange",children:(0,n.jsx)(t.p,{children:"This is an orange \ud83c\udf4a"})})]})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>a,a:()=>s});var n=r(27378);const o={},l=n.createContext(o);function s(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0a544fe9.ace0134d.js b/assets/js/0a544fe9.ace0134d.js new file mode 100644 index 0000000000..b2c889f3b7 --- /dev/null +++ b/assets/js/0a544fe9.ace0134d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76271],{35434:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246);r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function i(e){return(0,n.jsx)("svg",c(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,r)=>{r.d(t,{Z:()=>le});var n=r(24246),o=r(27378);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function l(e){const{mdxAdmonitionTitle:t,rest:r}=function(e){const t=o.Children.toArray(e),r=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==r));return{mdxAdmonitionTitle:null==r?void 0:r.props.children,rest:c.length>0?(0,n.jsx)(n.Fragment,{children:c}):null}}(e.children);var l;const s=null!==(l=e.title)&&void 0!==l?l:t;return i(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){c(e,t,r[t])}))}return e}({},e,s&&{title:s}),{children:r})}var s=r(40624),a=r(36712),u=r(89583);const b={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function f({type:e,className:t,children:r}){return(0,n.jsx)("div",{className:(0,s.Z)(u.k.common.admonition,u.k.common.admonitionType(e),b.admonition,t),children:r})}function p({icon:e,title:t}){return(0,n.jsxs)("div",{className:b.admonitionHeading,children:[(0,n.jsx)("span",{className:b.admonitionIcon,children:e}),t]})}function O({children:e}){return e?(0,n.jsx)("div",{className:b.admonitionContent,children:e}):null}function d(e){const{type:t,icon:r,title:o,children:c,className:i}=e;return(0,n.jsxs)(f,{type:t,className:i,children:[(0,n.jsx)(p,{title:o,icon:r}),(0,n.jsx)(O,{children:c})]})}function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){return(0,n.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const w={icon:(0,n.jsx)(m,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function P(e){return(0,n.jsx)(d,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},w,e),{className:(0,s.Z)("alert alert--secondary",e.className),children:e.children}))}function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function k(e){return(0,n.jsx)("svg",x(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function S(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const N={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function E(e){return(0,n.jsx)(d,D(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){S(e,t,r[t])}))}return e}({},N,e),{className:(0,s.Z)("alert alert--success",e.className),children:e.children}))}var Z=r(35434);function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const B={icon:(0,n.jsx)(Z.Z,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function L(e){return(0,n.jsx)(d,_(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}({},B,e),{className:(0,s.Z)("alert alert--info",e.className),children:e.children}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function A(e){return(0,n.jsx)("svg",I(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function M(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const U={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function F(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function H(e){return(0,n.jsx)("svg",F(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){z(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function $(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const V={icon:(0,n.jsx)(H,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const Q={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function X(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){X(e,t,r[t])}))}return e}const Y={note:P,tip:E,info:L,warning:function(e){return(0,n.jsx)(d,M(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({},U,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,n.jsx)(d,W(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){$(e,t,r[t])}))}return e}({},V,e),{className:(0,s.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,n.jsx)(P,J({title:"secondary"},e)),important:e=>(0,n.jsx)(L,J({title:"important"},e)),success:e=>(0,n.jsx)(E,J({title:"success"},e)),caution:function(e){return(0,n.jsx)(d,G(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},Q,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))}},ee=J({},Y,K);var te=r(52615);function re(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ne,oe;const ce=(ne=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){re(e,t,r[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,n.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,n.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,n.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(ne,Object.getOwnPropertyDescriptors(oe)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(oe)).forEach((function(e){Object.defineProperty(ne,e,Object.getOwnPropertyDescriptor(oe,e))})),ne);function ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function le(e){const t=l(e),r=(o=t.type,ce[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ce.info));var o;return(0,n.jsx)(r,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ie(e,t,r[t])}))}return e}({},t))}},85799:(e,t,r)=>{r.d(t,{Z:()=>P});var n=r(24246),o=r(27378),c=r(40624),i=r(88613),l=r(60029),s=r(41428),a=r(36712),u=r(3620),b=r(39779);function f(e){const{pathname:t}=(0,u.TH)();return(0,o.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,b.Mg)(e.permalink,t))}(e,t)))),[e,t])}const p={sidebar:"sidebar_P3nc",sidebarItemTitle:"sidebarItemTitle_VrjY",sidebarItemList:"sidebarItemList_OSkG",sidebarItem:"sidebarItem_WJ0y",sidebarItemLink:"sidebarItemLink_Qrfg",sidebarItemLinkActive:"sidebarItemLinkActive_nUeK"};function O({sidebar:e}){const t=f(e.items);return(0,n.jsx)("aside",{className:"col col--3",children:(0,n.jsxs)("nav",{className:(0,c.Z)(p.sidebar,"thin-scrollbar"),"aria-label":(0,a.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,n.jsx)("div",{className:(0,c.Z)(p.sidebarItemTitle,"margin-bottom--md"),children:e.title}),(0,n.jsx)("ul",{className:(0,c.Z)(p.sidebarItemList,"clean-list"),children:t.map((e=>(0,n.jsx)("li",{className:p.sidebarItem,children:(0,n.jsx)(s.Z,{isNavLink:!0,to:e.permalink,className:p.sidebarItemLink,activeClassName:p.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var d=r(35612);function y({sidebar:e}){const t=f(e.items);return(0,n.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,n.jsx)("li",{className:"menu__list-item",children:(0,n.jsx)(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,n.jsx)(d.Zo,{component:y,props:e})}function m({sidebar:e}){const t=(0,l.i)();return(null==e?void 0:e.items.length)?"mobile"===t?(0,n.jsx)(j,{sidebar:e}):(0,n.jsx)(O,{sidebar:e}):null}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function w(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P(e){const{sidebar:t,toc:r,children:o}=e,l=w(e,["sidebar","toc","children"]),s=t&&t.items.length>0;return(0,n.jsx)(i.Z,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},l),{children:(0,n.jsx)("div",{className:"container margin-vert--lg",children:(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(m,{sidebar:t}),(0,n.jsx)("main",{className:(0,c.Z)("col",{"col--7":s,"col--9 col--offset-1":!s}),children:o}),r&&(0,n.jsx)("div",{className:"col col--2",children:r})]})})}))}},41069:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(36712)),c=r(6649);function i(e){const{metadata:t}=e,{previousPage:r,nextPage:i}=t;return(0,n.jsxs)("nav",{className:"pagination-nav","aria-label":(0,o.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[r&&(0,n.jsx)(c.Z,{permalink:r,title:(0,n.jsx)(o.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),i&&(0,n.jsx)(c.Z,{permalink:i,title:(0,n.jsx)(o.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},53543:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(24246);r(27378);function o({children:e,className:t}){return(0,n.jsx)("article",{className:t,children:e})}},53635:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(86632),i=r(88305),l=r(23387);function s({children:e,className:t}){const{isBlogPostPage:r}=(0,i.C)();return(0,n.jsx)("div",{id:r?c.blogPostContainerID:void 0,className:(0,o.Z)("markdown",t),children:(0,n.jsx)(l.Z,{children:e})})}},71422:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(7812),l=r(88305),s=r(54461);const a={container:"container_x5Un"};function u({readingTime:e}){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>{const r=Math.ceil(t);return e(r,(0,c.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:r}))}}();return(0,n.jsx)(n.Fragment,{children:t(e)})}function b({date:e,formattedDate:t}){return(0,n.jsx)("time",{dateTime:e,children:t})}function f(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function p({className:e}){const{metadata:t}=(0,l.C)(),{date:r,readingTime:c}=t,i=(0,s.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,o.Z)(a.container,"margin-vert--md",e),children:[(0,n.jsx)(b,{date:r,formattedDate:(p=r,i.format(new Date(p)))}),void 0!==c&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(f,{}),(0,n.jsx)(u,{readingTime:c})]})]});var p}},35253:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(41428),i=r(88305);const l={title:"title_UBNu"};function s({className:e}){const{metadata:t,isBlogPostPage:r}=(0,i.C)(),{permalink:s,title:a}=t,u=r?"h1":"h2";return(0,n.jsx)(u,{className:(0,o.Z)(l.title,e),children:r?a:(0,n.jsx)(c.Z,{to:s,children:a})})}},38495:(e,t,r)=>{r.d(t,{Z:()=>Z});var n=r(24246),o=(r(27378),r(40624)),c=r(88305),i=r(53543),l=r(35253),s=r(71422),a=r(41428);function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){return e.href?(0,n.jsx)(a.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},e)):(0,n.jsx)(n.Fragment,{children:e.children})}function f({author:e,className:t}){const{name:r,title:c,url:i,imageURL:l,email:s}=e,a=i||s&&`mailto:${s}`||void 0;return(0,n.jsxs)("div",{className:(0,o.Z)("avatar margin-bottom--sm",t),children:[l&&(0,n.jsx)(b,{href:a,className:"avatar__photo-link",children:(0,n.jsx)("img",{className:"avatar__photo",src:l,alt:r})}),r&&(0,n.jsxs)("div",{className:"avatar__intro",children:[(0,n.jsx)("div",{className:"avatar__name",children:(0,n.jsx)(b,{href:a,children:(0,n.jsx)("span",{children:r})})}),c&&(0,n.jsx)("small",{className:"avatar__subtitle",children:c})]})]})}const p={authorCol:"authorCol_bvyx",imageOnlyAuthorRow:"imageOnlyAuthorRow_L2DM",imageOnlyAuthorCol:"imageOnlyAuthorCol_oyze"};function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function j({className:e}){const{metadata:{authors:t},assets:r}=(0,c.C)();if(0===t.length)return null;const i=t.every((({name:e})=>!e));var l;return(0,n.jsx)("div",{className:(0,o.Z)("margin-top--md margin-bottom--sm",i?p.imageOnlyAuthorRow:"row",e),children:t.map(((e,t)=>(0,n.jsx)("div",{className:(0,o.Z)(!i&&"col col--6",i?p.imageOnlyAuthorCol:p.authorCol),children:(0,n.jsx)(f,{author:y(d({},e),{imageURL:null!==(l=r.authorsImageUrls[t])&&void 0!==l?l:e.imageURL})})},t)))})}function m(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(l.Z,{}),(0,n.jsx)(s.Z,{}),(0,n.jsx)(j,{})]})}var g=r(53635),h=r(89583),w=r(71628),P=r(62804),v=r(36712);function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function D(){return(0,n.jsx)("b",{children:(0,n.jsx)(v.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function N(e){const{blogPostTitle:t}=e,r=S(e,["blogPostTitle"]);return(0,n.jsx)(a.Z,k(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({"aria-label":(0,v.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},r),{children:(0,n.jsx)(D,{})}))}function E(){const{metadata:e,isBlogPostPage:t}=(0,c.C)(),{tags:r,title:i,editUrl:l,hasTruncateMarker:s,lastUpdatedBy:a,lastUpdatedAt:u}=e,b=!t&&s,f=r.length>0;if(!(f||b||l))return null;if(t){const e=!!(l||u||a);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[f&&(0,n.jsx)("div",{className:(0,o.Z)("row","margin-top--sm",h.k.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(P.Z,{tags:r})})}),e&&(0,n.jsx)(w.Z,{className:(0,o.Z)("margin-top--sm",h.k.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:u,lastUpdatedBy:a})]})}return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[f&&(0,n.jsx)("div",{className:(0,o.Z)("col",{"col--9":b}),children:(0,n.jsx)(P.Z,{tags:r})}),b&&(0,n.jsx)("div",{className:(0,o.Z)("col text--right",{"col--3":f}),children:(0,n.jsx)(N,{blogPostTitle:i,to:e.permalink})})]})}function Z({children:e,className:t}){const r=function(){const{isBlogPostPage:e}=(0,c.C)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(i.Z,{className:(0,o.Z)(r,t),children:[(0,n.jsx)(m,{}),(0,n.jsx)(g.Z,{children:e}),(0,n.jsx)(E,{})]})}},17277:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(88305)),c=r(38495);function i({items:e,component:t=c.Z}){return(0,n.jsx)(n.Fragment,{children:e.map((({content:e})=>(0,n.jsx)(o.n,{content:e,children:(0,n.jsx)(t,{children:(0,n.jsx)(e,{})})},e.metadata.permalink)))})}},5254:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(24246),o=r(27378),c=r(40624),i=r(80474),l=r(29088),s=r(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function O(e,t){return!!e&&(e===t||O(e.parentElement,t))}function d(e){var{summary:t,children:r}=e,d=f(e,["summary","children"]);(0,i.Z)().collectAnchor(d.id);const y=(0,l.Z)(),j=(0,o.useRef)(null),{collapsed:m,setCollapsed:g}=(0,s.u)({initialState:!d.open}),[h,w]=(0,o.useState)(d.open),P=o.isValidElement(t)?t:(0,n.jsx)("summary",{children:null!=t?t:"Details"});return(0,n.jsxs)("details",b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},d),{ref:j,open:h,"data-collapsed":m,className:(0,c.Z)(a.details,y&&a.isBrowser,d.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&O(t,j.current)&&(e.preventDefault(),m?(g(!1),w(!0)):g(!0))},children:[P,(0,n.jsx)(s.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{g(e),w(!e)},children:(0,n.jsx)("div",{className:a.collapsibleContent,children:r})})]}))}const y={details:"details_Cn_P"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},m.apply(this,arguments)}function g(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const h="alert alert--info";function w(e){var t=m({},e);return(0,n.jsx)(d,g(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}({},t),{className:(0,c.Z)(h,y.details,t.className)}))}},71628:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(89583),l=r(41428);const s={iconEdit:"iconEdit_IMw_"};function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function b(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f(e){var{className:t}=e,r=b(e,["className"]);return(0,n.jsx)("svg",u(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(s.iconEdit,t),"aria-hidden":"true"},r),{children:(0,n.jsx)("g",{children:(0,n.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function p({editUrl:e}){return(0,n.jsxs)(l.Z,{to:e,className:i.k.common.editThisPage,children:[(0,n.jsx)(f,{}),(0,n.jsx)(c.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var O=r(54461);function d({lastUpdatedAt:e}){const t=new Date(e),r=(0,O.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,n.jsx)("b",{children:(0,n.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function y({lastUpdatedBy:e}){return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,n.jsx)("b",{children:e})},children:" by {user}"})}function j({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,n.jsxs)("span",{className:i.k.common.lastUpdated,children:[(0,n.jsx)(c.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,n.jsx)(d,{lastUpdatedAt:e}):"",byUser:t?(0,n.jsx)(y,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_OHCJ"};function g({className:e,editUrl:t,lastUpdatedAt:r,lastUpdatedBy:c}){return(0,n.jsxs)("div",{className:(0,o.Z)("row",e),children:[(0,n.jsx)("div",{className:"col",children:t&&(0,n.jsx)(p,{editUrl:t})}),(0,n.jsx)("div",{className:(0,o.Z)("col",m.lastUpdated),children:(r||c)&&(0,n.jsx)(j,{lastUpdatedAt:r,lastUpdatedBy:c})})]})}},23387:(e,t,r)=>{r.d(t,{Z:()=>ne});var n=r(24246),o=r(27378),c=r(71670),i=r(97134),l=r(38112);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){return(0,n.jsx)("code",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){s(e,t,r[t])}))}return e}({},e))}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}function f(e){return function(e){return void 0!==e.children&&o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,n.jsx)(a,b({},e)):(0,n.jsx)(l.Z,b({},e))}var p=r(41428);function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=r(5254);function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){const t=o.Children.toArray(e.children),r=t.find((e=>o.isValidElement(e)&&"summary"===e.type)),c=(0,n.jsx)(n.Fragment,{children:t.filter((e=>e!==r))});return(0,n.jsx)(d.Z,j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({},e),{summary:r,children:c}))}var g=r(52615);function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){return(0,n.jsx)(g.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){h(e,t,r[t])}))}return e}({},e))}var P=r(40624);const v={containsTaskList:"containsTaskList_k9gM"};function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e){if(void 0!==e)return(0,P.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&v.containsTaskList)}var D=r(80474);function N(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const E={img:"img_vXGZ"};function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}var _=r(77773),B=r(88941),L=r(30691),T=r(73919),I=r(78844),A=r(99854);function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function M(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const U="docusaurus-mermaid-container";function z(){const{colorMode:e}=(0,I.I)(),t=(0,T.L)().mermaid,r=t.theme[e],{options:n}=t;return(0,o.useMemo)((()=>M(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({startOnLoad:!1},n),{theme:r})),[r,n])}function F({text:e,config:t}){const[r,n]=(0,o.useState)(null),c=(0,o.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,i=z(),l=null!=t?t:i;return(0,o.useEffect)((()=>{(async function({id:e,text:t,config:r}){A.N.mermaidAPI.initialize(r);try{return await A.N.render(e,t)}catch(o){var n;throw null===(n=document.querySelector(`#d${e}`))||void 0===n||n.remove(),o}})({id:c,text:e,config:l}).then(n).catch((e=>{n((()=>{throw e}))}))}),[c,e,l]),r}const H={container:"container_RUsj"};function $(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){$(e,t,r[t])}))}return e}function V({renderResult:e}){const t=(0,o.useRef)(null);return(0,o.useEffect)((()=>{var r;const n=t.current;null===(r=e.bindFunctions)||void 0===r||r.call(e,n)}),[e]),(0,n.jsx)("div",{ref:t,className:`${U} ${H.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function q({value:e}){const t=F({text:e});return null===t?null:(0,n.jsx)(V,{renderResult:t})}function G(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){G(e,t,r[t])}))}return e}const X={Head:i.Z,details:m,Details:m,code:f,a:function(e){return(0,n.jsx)(p.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}({},e))},pre:function(e){return(0,n.jsx)(n.Fragment,{children:e.children})},ul:function(e){return(0,n.jsx)("ul",k(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({},e),{className:S(e.className)}))},li:function(e){return(0,D.Z)().collectAnchor(e.id),(0,n.jsx)("li",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){N(e,t,r[t])}))}return e}({},e))},img:function(e){return(0,n.jsx)("img",C(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}({decoding:"async",loading:"lazy"},e),{className:(t=e.className,(0,P.Z)(t,E.img))}));var t},h1:e=>(0,n.jsx)(w,Q({as:"h1"},e)),h2:e=>(0,n.jsx)(w,Q({as:"h2"},e)),h3:e=>(0,n.jsx)(w,Q({as:"h3"},e)),h4:e=>(0,n.jsx)(w,Q({as:"h4"},e)),h5:e=>(0,n.jsx)(w,Q({as:"h5"},e)),h6:e=>(0,n.jsx)(w,Q({as:"h6"},e)),admonition:_.Z,mermaid:function(e){return(0,n.jsx)(B.Z,{fallback:e=>(0,n.jsx)(L.Ac,W({},e)),children:(0,n.jsx)(q,W({},e))})}};const J="tweetQuote_h8Rz",Y="avatarImg_b51M";function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee=(te=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){K(e,t,r[t])}))}return e}({},X),re=null!=(re={Code:f,Highlight:function({children:e,color:t}){return(0,n.jsx)("span",{style:{backgroundColor:t,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},TweetQuote:function({url:e,handle:t,name:r,job:o,children:c}){const i=`https://unavatar.io/twitter/${t}`,l=`https://twitter.com/${t}`;return(0,n.jsxs)("figure",{className:J,children:[(0,n.jsx)("blockquote",{children:(0,n.jsx)(p.Z,{to:e,children:c})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(p.Z,{to:l,rel:"nofollow",children:(0,n.jsxs)("div",{className:"avatar",children:[(0,n.jsx)("img",{alt:r,className:(0,P.Z)("avatar__photo",Y),src:i}),(0,n.jsxs)("div",{className:(0,P.Z)("avatar__intro"),children:[(0,n.jsx)("strong",{className:"avatar__name",children:(0,n.jsx)("cite",{children:r})}),(0,n.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:o})]})]})})})]})}})?re:{},Object.getOwnPropertyDescriptors?Object.defineProperties(te,Object.getOwnPropertyDescriptors(re)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(re)).forEach((function(e){Object.defineProperty(te,e,Object.getOwnPropertyDescriptor(re,e))})),te);var te,re;function ne({children:e}){return(0,n.jsx)(c.Z,{components:ee,children:e})}},6649:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);function i(e){const{permalink:t,title:r,subLabel:i,isNext:l}=e;return(0,n.jsxs)(c.Z,{className:(0,o.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[i&&(0,n.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,n.jsx)("div",{className:"pagination-nav__label",children:r})]})}},52977:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);const i={tag:"tag_Nd8t",tagRegular:"tagRegular_TiLs",tagWithCount:"tagWithCount_AQg7"};function l({permalink:e,label:t,count:r}){return(0,n.jsxs)(c.Z,{href:e,className:(0,o.Z)(i.tag,r?i.tagWithCount:i.tagRegular),children:[t,r&&(0,n.jsx)("span",{children:r})]})}},62804:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(52977);const l={tags:"tags_rTaS",tag:"tag_l5va"};function s({tags:e}){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("b",{children:(0,n.jsx)(c.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,n.jsx)("ul",{className:(0,o.Z)(l.tags,"padding--none","margin-left--sm"),children:e.map((({label:e,permalink:t})=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,{label:e,permalink:t})},t)))})]})}},88305:(e,t,r)=>{r.d(t,{C:()=>s,n:()=>l});var n=r(24246),o=r(27378),c=r(51114);const i=o.createContext(null);function l({children:e,content:t,isBlogPostPage:r=!1}){const c=function({content:e,isBlogPostPage:t}){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,toc:e.toc,isBlogPostPage:t})),[e,t])}({content:t,isBlogPostPage:r});return(0,n.jsx)(i.Provider,{value:c,children:e})}function s(){const e=(0,o.useContext)(i);if(null===e)throw new c.i6("BlogPostProvider");return e}},54461:(e,t,r)=>{r.d(t,{P:()=>c});var n=r(4423);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e={}){const{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({calendar:r},e))}},7812:(e,t,r)=>{r.d(t,{c:()=>a});var n=r(27378),o=r(4423);const c=["zero","one","two","few","many","other"];function i(e){return c.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:i(["one","other"]),select:e=>1===e?"one":"other"};function s(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:i(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function a(){const e=s();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const o=r.select(t),c=r.pluralForms.indexOf(o);return n[Math.min(c,n.length-1)]}(r,t,e)}}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},57520:(e,t,r)=>{r.d(t,{Z:()=>N});var n=r(24246),o=r(27378),c=r(88305),i=r(35253),l=r(71422),s=r(40624),a=r(41428);const u={image:"image_oRbT"};function b({author:e,className:t}){const{name:r,url:o,imageURL:c}=e;return(0,n.jsx)("div",{className:(0,s.Z)("avatar margin-bottom--sm",t),children:c&&(0,n.jsx)(a.Z,{className:"avatar__photo-link avatar__photo",href:o,children:(0,n.jsx)("img",{className:u.image,src:c,alt:r,onError:e=>{e.currentTarget.src='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" fill="none" stroke="%2325c2a0" stroke-width="30" version="1.1"><circle cx="300" cy="230" r="115"/><path stroke-linecap="butt" d="M106.81863443903,481.4 a205,205 1 0,1 386.36273112194,0"/></svg>'}})})})}function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){f(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function d(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e){var{expanded:t}=e,r=d(e,["expanded"]);return t?(0,n.jsx)("svg",O(p({viewBox:"0 0 1024 1024",width:"20",height:"20",fill:"currentColor"},r),{children:(0,n.jsx)("path",{d:"M783.915092 1009.031953l-271.898251-277.615587-271.930737 277.550617a49.214558 49.214558 0 0 1-70.752018 0 51.780862 51.780862 0 0 1 0-72.246322l307.274261-313.706262a49.279528 49.279528 0 0 1 70.784503 0l307.33923 313.706262a51.975771 51.975771 0 0 1 0 72.311292 49.409467 49.409467 0 0 1-70.816988 0z m-307.306745-608.05155L169.269117 87.274141A51.975771 51.975771 0 0 1 169.269117 14.96285a49.409467 49.409467 0 0 1 70.816987 0l271.930737 277.615586L783.850122 14.96285a49.409467 49.409467 0 0 1 70.816988 0 51.975771 51.975771 0 0 1 0 72.311291l-307.33923 313.706262a49.376982 49.376982 0 0 1-70.719533 0z"})})):(0,n.jsx)("svg",O(p({viewBox:"0 0 1024 1024",width:"20",height:"20",fill:"currentColor"},r),{children:(0,n.jsx)("path",{d:"M476.612887 1009.12034L169.240699 695.380437a51.981345 51.981345 0 0 1 0-72.319045 49.382277 49.382277 0 0 1 70.824582 0l271.959897 277.645356 271.862433-277.645356a49.382277 49.382277 0 0 1 70.824582 0 51.981345 51.981345 0 0 1 0 72.319045l-307.307212 313.739903a49.447254 49.447254 0 0 1-70.792094 0z m307.274724-608.116755L511.99269 123.455693l-271.959897 277.645357a49.382277 49.382277 0 0 1-70.824582 0 51.981345 51.981345 0 0 1 0-72.319045L476.580399 15.042102a49.382277 49.382277 0 0 1 70.727117 0l307.372188 313.739903a51.981345 51.981345 0 0 1 0 72.319045 49.414766 49.414766 0 0 1-70.824582 0z"})}))}const j={authorCol:"authorCol_mDBc",imageOnlyAuthorRow:"imageOnlyAuthorRow_WiD6",imageOnlyAuthorCol:"imageOnlyAuthorCol_uiac",toggleButton:"toggleButton_WvRg",toggleButtonIconExpanded:"toggleButtonIconExpanded_ERxv"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){m(e,t,r[t])}))}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function w({className:e}){const{metadata:{authors:t},assets:r}=(0,c.C)(),[i,l]=(0,o.useState)(!1);if(0===t.length)return null;const a=t.slice(0,i?t.length:10);var u;return(0,n.jsxs)("div",{className:(0,s.Z)("margin-top--md margin-bottom--sm",j.imageOnlyAuthorRow,e),children:[a.map(((e,t)=>(0,n.jsx)("div",{className:j.imageOnlyAuthorCol,children:(0,n.jsx)(b,{author:h(g({},e),{imageURL:null!==(u=r.authorsImageUrls[t])&&void 0!==u?u:e.imageURL})})},t))),t.length>10&&(0,n.jsx)("button",{className:(0,s.Z)("clean-btn",j.toggleButton),type:"button",onClick:()=>l((e=>!e)),"aria-label":"expand",children:(0,n.jsx)(y,{expanded:i})})]})}const P={changelogItemTitleList:"changelogItemTitleList_sueG"};function v(){const{isBlogPostPage:e}=(0,c.C)();return(0,n.jsx)(i.Z,{className:e?void 0:P.changelogItemTitleList})}function x(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(v,{}),(0,n.jsx)(l.Z,{}),(0,n.jsx)(w,{})]})}var k=r(53543),S=r(53635);const D={changelogItemContainer:"changelogItemContainer_jeDt"};function N({children:e}){return(0,n.jsxs)(k.Z,{className:D.changelogItemContainer,children:[(0,n.jsx)(x,{}),(0,n.jsx)(S.Z,{children:e})]})}},99238:(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r(24246),o=(r(27378),r(40624)),c=r(44008),i=r(89583),l=r(85799),s=r(41069),a=r(17277),u=r(10057),b=r(57520),f=r(36712),p=r(41428),O=r(52615);const d={rss:"rss_fOa_",twitter:"twitter_LekN"};function y(){return(0,n.jsxs)(p.Z,{href:"https://twitter.com/docusaurus",className:d.twitter,children:[(0,n.jsx)("b",{children:"Twitter"}),(0,n.jsx)("svg",{style:{fill:"#1da1f2",position:"relative",left:4,top:1,marginRight:8},width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",children:(0,n.jsx)("path",{d:"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"})})]})}function j(){return(0,n.jsxs)(p.Z,{href:"pathname:///changelog/rss.xml",className:d.rss,children:[(0,n.jsx)("b",{children:(0,n.jsx)(f.Z,{id:"changelog.description.rssLink",children:"RSS feeds"})}),(0,n.jsx)("svg",{style:{fill:"#f26522",position:"relative",left:4,top:1,marginRight:8},xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M6.503 20.752c0 1.794-1.456 3.248-3.251 3.248-1.796 0-3.252-1.454-3.252-3.248 0-1.794 1.456-3.248 3.252-3.248 1.795.001 3.251 1.454 3.251 3.248zm-6.503-12.572v4.811c6.05.062 10.96 4.966 11.022 11.009h4.817c-.062-8.71-7.118-15.758-15.839-15.82zm0-3.368c10.58.046 19.152 8.594 19.183 19.188h4.817c-.03-13.231-10.755-23.954-24-24v4.812z"})})]})}function m({blogTitle:e}){return(0,n.jsxs)("header",{className:"margin-bottom--lg",children:[(0,n.jsx)(O.Z,{as:"h1",style:{fontSize:"3rem"},children:e}),(0,n.jsx)("p",{children:(0,n.jsx)(f.Z,{id:"changelog.description",values:{twitterLink:(0,n.jsx)(y,{}),rssLink:(0,n.jsx)(j,{})},children:"Subscribe through {rssLink} or follow us on {twitterLink} to stay up-to-date with new releases!"})})]})}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}function w(e){const{metadata:t}=e,{blogTitle:r,blogDescription:o}=t;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.d,{title:r,description:o}),(0,n.jsx)(u.Z,{tag:"blog_posts_list"})]})}function P(e){const{metadata:t,items:r,sidebar:o}=e,{blogTitle:c}=t;return(0,n.jsxs)(l.Z,{sidebar:o,children:[(0,n.jsx)(m,{blogTitle:c}),(0,n.jsx)(a.Z,{items:r,component:b.Z}),(0,n.jsx)(s.Z,{metadata:t})]})}function v(e){return(0,n.jsxs)(c.FG,{className:(0,o.Z)(i.k.wrapper.blogPages,i.k.page.blogListPage),children:[(0,n.jsx)(w,h({},e)),(0,n.jsx)(P,h({},e))]})}},38112:(e,t,r)=>{r.d(t,{Z:()=>Ie});var n={};r.r(n),r.d(n,{ButtonExample:()=>B});var o=r(24246),c=r(27378),i=r(40624),l=r(29088),s=r(32711),a=r(36712),u=r(4423),b=r(94544),f=r(30691),p=r(78844),O=r(73919);function d(){const{prism:e}=(0,O.L)(),{colorMode:t}=(0,p.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var y=r(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){m(e,t,r[t])}))}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function w(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function P({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function x(){return(0,o.jsx)(b.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(y.Z,{fallback:e=>(0,o.jsx)(f.Ac,g({},e)),children:(0,o.jsx)(s.i5,{})}),(0,o.jsx)(s.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(x,{})})]})}function S(){const e=(0,l.Z)();return(0,o.jsx)(s.uz,{className:j.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function E(e){var t,{children:r,transformCode:n}=e,c=w(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,a=d();var b;const f=null!==(b=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==b&&b;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(s.nu,h(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:f,transformCode:null!=n?n:N,theme:a},c),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(k,{})]})}))})}function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function B(e){return(0,o.jsx)("button",_(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const T=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){L(e,t,r[t])}))}return e}({React:c},c,n);var I,A,R=r(89583),M=r(6324),U=r.n(M);function z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const F=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),$={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(V=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){z(e,t,r[t])}))}return e}({},$),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(V,Object.getOwnPropertyDescriptors(q)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(q)).forEach((function(e){Object.defineProperty(V,e,Object.getOwnPropertyDescriptor(q,e))})),V);var V,q;const G=Object.keys($);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=U()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),l=r.split("\n"),s=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),b=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<l.length;){const e=l[p].match(i);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?s[a[t]].range+=`${p},`:u[t]?s[u[t]].start=p:b[t]&&(s[b[t]].range+=`${s[b[t]].start}-${p-1},`),l.splice(p,1)}r=l.join("\n");const f={};return Object.entries(s).forEach((([e,{range:t}])=>{U()(t).forEach((t=>{var r;null!==(r=(I=f)[A=t])&&void 0!==r||(I[A]=[]),f[t].push(e)}))})),{lineClassNames:f,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(d());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Y(e,t,r[t])}))}return e}({},r),{style:n,className:(0,i.Z)(r.className,J.codeBlockContainer,R.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=r(26101);const se={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function be(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function fe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=n({line:e,className:(0,i.Z)(t,r&&se.codeLine)}),s=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",be(ue({},l),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:se.codeLineNumber}),(0,o.jsx)("span",{className:se.codeLineContent,children:s})]}):s,(0,o.jsx)("br",{})]}))}var pe=r(34370);function Oe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ye(e){return(0,o.jsx)("svg",de(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Oe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){je(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const he={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function we({code:e,className:t}){const[r,n]=(0,c.useState)(!1),l=(0,c.useRef)(void 0),s=(0,c.useCallback)((()=>{(0,pe.Z)(e),n(!0),l.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,he.copyButton,r&&he.copyButtonCopied),onClick:s,children:(0,o.jsxs)("span",{className:he.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(ye,{className:he.copyButtonIcon}),(0,o.jsx)(ge,{className:he.copyButtonSuccessIcon})]})})}function Pe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ve(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function xe(e){return(0,o.jsx)("svg",ve(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Pe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(xe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:r,title:n,showLineNumbers:l,language:s}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,O.L)();var b;const f=function(e){return null==e?void 0:e.toLowerCase()}(null!==(b=null!=s?s:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==b?b:a),p=d(),y=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),i=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return ie(o,l),(0,c.useEffect)((()=>{l()}),[e,l]),(0,c.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:i}}(),j=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(F))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:m,code:g}=X(e,{metastring:r,language:f,magicComments:u}),h=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,f&&!t.includes(`language-${f}`)&&`language-${f}`),children:[j&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:p,code:g,language:null!=f?f:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,h&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(fe,{line:e,getLineProps:n,getTokenProps:c,classNames:m[t],showLineNumbers:h},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(y.isEnabled||y.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),(0,o.jsx)(we,{className:re.codeButton,code:g})]})]})]})}function Ne(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ze(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ce(e,t,r[t])}))}return e}const Be=(Le=function(e){var{children:t}=e,r=Ze(e,["children"]);const n=(0,l.Z)(),i=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),s="string"==typeof i?De:ne;return(0,o.jsx)(s,Ee(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ne(e,t,r[t])}))}return e}({},r),{children:i}),String(n))},function(e){return e.live?(0,o.jsx)(E,_e({scope:T},e)):(0,o.jsx)(Le,_e({},e))});var Le;function Te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Te(e,t,r[t])}))}return e}({},e))}}}]); \ No newline at end of file diff --git a/assets/js/0a818389.c72b4779.js b/assets/js/0a818389.c72b4779.js new file mode 100644 index 0000000000..8763f467fe --- /dev/null +++ b/assets/js/0a818389.c72b4779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23485],{61132:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),i=t(40624),s=t(75527),c=t(3620),l=t(44479),a=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,s]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=m(e),[s,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[a,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:h;return b({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,i]),tabValues:i}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),i=c[r].value;i!==t&&(a(n),o(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,i.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=f(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},e,n)),(0,r.jsx)(P,w({},e,n))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(N,O(w({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(29088));function i({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),o=(t(27378),t(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){s(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a({children:e,minHeight:n,url:t="http://localhost:3000",style:s,bodyStyle:a}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(c({},s),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(i.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:a,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>He});var r={};t.r(r),t.d(r,{ButtonExample:()=>E});var o=t(24246),i=t(27378),s=t(40624),c=t(29088),l=t(32711),a=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function m(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){f(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function N(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(N,{})]})}const C=e=>`${e};`;function D(e){var n,{children:t,transformCode:r}=e,i=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:c}}=s,a=m();var u;const h=null!==(u=null===(n=i.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:a},i),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function I(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function B(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){I(e,n,t[n])}))}return e}function T(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function E(e){return(0,o.jsx)("button",T(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const Z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:i},i,r);var H,M,_=t(89583),R=t(6324),W=t.n(R);function z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const A=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(Y=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){z(e,n,t[n])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Y,Object.getOwnPropertyDescriptors(U)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(U)).forEach((function(e){Object.defineProperty(Y,e,Object.getOwnPropertyDescriptor(U,e))})),Y);var Y,U;const $=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function X(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:i}=n;if(i&&V.test(i)){const e=i.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const s=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J($,n)}}(r,o),c=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(s);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),c.splice(p,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{W()(n).forEach((n=>{var t;null!==(t=(H=h)[M=n])&&void 0!==t||(H[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const G={codeBlockContainer:"codeBlockContainer_jDV4"};function Q(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(m());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Q(e,n,t[n])}))}return e}({},t),{style:r,className:(0,s.Z)(t.className,G.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,s.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,n){const[t,r]=(0,i.useState)(),o=(0,i.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{o()}),[o]),function(e,n,t=ie){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,i.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ae(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,s.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},i({token:e,key:n})),n)));return(0,o.jsxs)("span",ue(de({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,i.useState)(!1),c=(0,i.useRef)(void 0),l=(0,i.useCallback)((()=>{(0,pe.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ne({className:e,onClick:n,isEnabled:t}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,s.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:a),p=m(),b=function(){const[e,n]=(0,i.useState)(!1),[t,r]=(0,i.useState)(!1),o=(0,i.useRef)(null),s=(0,i.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return se(o,c),(0,i.useEffect)((()=>{c()}),[e,c]),(0,i.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:s}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(A))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:f,code:y}=X(e,{metastring:t,language:h,magicComments:d}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,s.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:i})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,s.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,s.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:i,classNames:f[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ne,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ve,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function De(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ie(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}const Ee=(Le=function(e){var{children:n}=e,t=Ie(e,["children"]);const r=(0,c.Z)(),s=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof s?Se:re;return(0,o.jsx)(l,De(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(D,Te({scope:Z},e)):(0,o.jsx)(Le,Te({},e))});var Le;function Ze(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function He(e){return(0,o.jsx)(Ee,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ze(e,n,t[n])}))}return e}({},e))}},28363:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),i=t(97555),s=t(61132),c=t(6698),l=t(38112);const a={id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},d="Code blocks",u={id:"guides/markdown-features/code-blocks",title:"Code blocks",description:"Handling code blocks in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/code-blocks",permalink:"/docs/markdown-features/code-blocks",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,frontMatter:{id:"code-blocks",description:"Handling code blocks in Docusaurus Markdown",slug:"/markdown-features/code-blocks"},sidebar:"docs",previous:{title:"Tabs",permalink:"/docs/markdown-features/tabs"},next:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"}},h={},p=[{value:"Code title",id:"code-title",level:2},{value:"Syntax highlighting",id:"syntax-highlighting",level:2},{value:"Theming",id:"theming",level:3},{value:"Supported Languages",id:"supported-languages",level:3},{value:"Line highlighting",id:"line-highlighting",level:2},{value:"Highlighting with comments",id:"highlighting-with-comments",level:3},{value:"Highlighting with metadata string",id:"highlighting-with-metadata-string",level:3},{value:"Custom magic comments",id:"custom-magic-comments",level:3},{value:"Line numbering",id:"line-numbering",level:2},{value:"Interactive code editor",id:"interactive-code-editor",level:2},{value:"Imports",id:"imports",level:3},{value:"Imperative Rendering (noInline)",id:"imperative-rendering-noinline",level:3},{value:"Using JSX markup in code blocks",id:"using-jsx-markup",level:2},{value:"Multi-language support code blocks",id:"multi-language-support-code-blocks",level:2},{value:"Docusaurus npm2yarn remark plugin",id:"npm2yarn-remark-plugin",level:3},{value:"Configuration",id:"npm2yarn-remark-plugin-configuration",level:4},{value:"Usage in JSX",id:"usage-in-jsx",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"code-blocks",children:"Code blocks"}),"\n","\n",(0,r.jsx)(n.p,{children:"Code blocks within documentation are super-powered \ud83d\udcaa."}),"\n",(0,r.jsx)(n.h2,{id:"code-title",children:"Code title"}),"\n",(0,r.jsxs)(n.p,{children:["You can add a title to the code block by adding a ",(0,r.jsx)(n.code,{children:"title"})," key after the language (leave a space between them)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'```jsx title="/src/components/HelloCodeTitle.js"\nfunction HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n```\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="/src/components/HelloCodeTitle.js"',children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"syntax-highlighting",children:"Syntax highlighting"}),"\n",(0,r.jsxs)(n.p,{children:["Code blocks are text blocks wrapped around by strings of 3 backticks. You may check out ",(0,r.jsx)(n.a,{href:"https://github.com/mdx-js/specification",children:"this reference"})," for the specifications of MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nconsole.log('Every repo must come with a mascot.');\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Use the matching language meta string for your code block, and Docusaurus will pick up syntax highlighting automatically, powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"Prism React Renderer"}),"."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"console.log('Every repo must come with a mascot.');\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"theming",children:"Theming"}),"\n",(0,r.jsxs)(n.p,{children:["By default, the Prism ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer#theming",children:"syntax highlighting theme"})," we use is ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/prism-react-renderer/src/themes/palenight.ts",children:"Palenight"}),". You can change this to another theme by passing ",(0,r.jsx)(n.code,{children:"theme"})," field in ",(0,r.jsx)(n.code,{children:"prism"})," as ",(0,r.jsx)(n.code,{children:"themeConfig"})," in your docusaurus.config.js."]}),"\n",(0,r.jsxs)(n.p,{children:["For example, if you prefer to use the ",(0,r.jsx)(n.code,{children:"dracula"})," highlighting theme:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import {themes as prismThemes} from 'prism-react-renderer';\n\nexport default {\n themeConfig: {\n prism: {\n // highlight-next-line\n theme: prismThemes.dracula,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Because a Prism theme is just a JS object, you can also write your own theme if you are not satisfied with the default. Docusaurus enhances the ",(0,r.jsx)(n.code,{children:"github"})," and ",(0,r.jsx)(n.code,{children:"vsDark"})," themes to provide richer highlight, and you can check our implementations for the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismLight.ts",children:"light"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/website/src/utils/prismDark.ts",children:"dark"})," code block themes."]}),"\n",(0,r.jsx)(n.h3,{id:"supported-languages",children:"Supported Languages"}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus comes with a subset of ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/master/packages/generate-prism-languages/index.ts#L9-L23",children:"commonly used languages"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Some popular languages like Java, C#, or PHP are not enabled by default."})}),"\n",(0,r.jsxs)(n.p,{children:["To add syntax highlighting for any of the other ",(0,r.jsx)(n.a,{href:"https://prismjs.com/#supported-languages",children:"Prism-supported languages"}),", define it in an array of additional languages."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Each additional language has to be a valid Prism component name. For example, Prism would map the ",(0,r.jsx)(n.em,{children:"language"})," ",(0,r.jsx)(n.code,{children:"cs"})," to ",(0,r.jsx)(n.code,{children:"csharp"}),", but only ",(0,r.jsx)(n.code,{children:"prism-csharp.js"})," exists as a ",(0,r.jsx)(n.em,{children:"component"}),", so you need to use ",(0,r.jsx)(n.code,{children:"additionalLanguages: ['csharp']"}),". You can look into ",(0,r.jsx)(n.code,{children:"node_modules/prismjs/components"})," to find all components (languages) available."]})}),"\n",(0,r.jsx)(n.p,{children:"For example, if you want to add highlighting for the PowerShell language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['powershell'],\n },\n // ...\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["After adding ",(0,r.jsx)(n.code,{children:"additionalLanguages"}),", restart Docusaurus."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to add highlighting for languages not yet supported by Prism, you can swizzle ",(0,r.jsx)(n.code,{children:"prism-include-languages"}),":"]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic prism-include-languages\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic prism-include-languages\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["It will produce ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," in your ",(0,r.jsx)(n.code,{children:"src/theme"})," folder. You can add highlighting support for custom languages by editing ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/prism-include-languages.js"',children:"const prismIncludeLanguages = (Prism) => {\n // ...\n\n additionalLanguages.forEach((lang) => {\n require(`prismjs/components/prism-${lang}`);\n });\n\n // highlight-next-line\n require('/path/to/your/prism-language-definition');\n\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["You can refer to ",(0,r.jsx)(n.a,{href:"https://github.com/PrismJS/prism/tree/master/components",children:"Prism's official language definitions"})," when you are writing your own language definitions."]}),"\n",(0,r.jsxs)(n.p,{children:["When adding a custom language definition, you do not need to add the language to the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," config array, since Docusaurus only looks up the ",(0,r.jsx)(n.code,{children:"additionalLanguages"})," strings in languages that Prism provides. Adding the language import in ",(0,r.jsx)(n.code,{children:"prism-include-languages.js"})," is sufficient."]}),"\n",(0,r.jsx)(n.h2,{id:"line-highlighting",children:"Line highlighting"}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-comments",children:"Highlighting with comments"}),"\n",(0,r.jsxs)(n.p,{children:["You can use comments with ",(0,r.jsx)(n.code,{children:"highlight-next-line"}),", ",(0,r.jsx)(n.code,{children:"highlight-start"}),", and ",(0,r.jsx)(n.code,{children:"highlight-end"})," to select which lines are highlighted."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```js\nfunction HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function HighlightSomeText(highlight) {\n if (highlight) {\n // highlight-next-line\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n}\n\nfunction HighlightMoreText(highlight) {\n // highlight-start\n if (highlight) {\n return 'This range is highlighted!';\n }\n // highlight-end\n\n return 'Nothing highlighted';\n}\n"})})}),"\n",(0,r.jsx)(n.p,{children:"Supported commenting syntax:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Style"}),(0,r.jsx)(n.th,{children:"Syntax"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"C-style"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/* ... */"})," and ",(0,r.jsx)(n.code,{children:"// ..."})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"JSX-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{/* ... */}"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Bash-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"# ..."})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"HTML-style"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"\x3c!-- ... --\x3e"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["We will do our best to infer which set of comment styles to use based on the language, and default to allowing ",(0,r.jsx)(n.em,{children:"all"})," comment styles. If there's a comment style that is not currently supported, we are open to adding them! Pull requests welcome. Note that different comment styles have no semantic difference, only their content does."]}),"\n",(0,r.jsxs)(n.p,{children:["You can set your own background color for highlighted code line in your ",(0,r.jsx)(n.code,{children:"src/css/custom.css"})," which will better fit to your selected syntax highlighting theme. The color given below works for the default highlighting theme (Palenight), so if you are using another theme, you will have to tweak the color accordingly."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);\n}\n\n/* If you have a different syntax highlighting theme for dark mode. */\n[data-theme='dark'] {\n /* Color which works with dark mode syntax highlighting theme */\n --docusaurus-highlighted-code-line-bg: rgb(100, 100, 100);\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you also need to style the highlighted code line in some other way, you can target on ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"})," CSS class."]}),"\n",(0,r.jsx)(n.h3,{id:"highlighting-with-metadata-string",children:"Highlighting with metadata string"}),"\n",(0,r.jsxs)(n.p,{children:["You can also specify highlighted line ranges within the language meta string (leave a space after the language). To highlight multiple lines, separate the line numbers by commas or use the range syntax to select a chunk of lines. This feature uses the ",(0,r.jsx)(n.code,{children:"parse-number-range"})," library and you can find ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/parse-numeric-range",children:"more syntax"})," on their project details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11}\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11}",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsxs)(n.admonition,{title:"prefer comments",type:"tip",children:[(0,r.jsx)(n.p,{children:"Prefer highlighting with comments where you can. By inlining highlight in the code, you don't have to manually count the lines if your code block becomes long. If you add/remove lines, you also don't have to offset your line ranges."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"- ```jsx {3}\n+ ```jsx {4}\n function HighlightSomeText(highlight) {\n if (highlight) {\n+ console.log('Highlighted text found');\n return 'This text is highlighted!';\n }\n\n return 'Nothing highlighted';\n }\n ```\n"})}),(0,r.jsx)(n.p,{children:"Below, we will introduce how the magic comment system can be extended to define custom directives and their functionalities. The magic comments would only be parsed if a highlight metastring is not present."})]}),"\n",(0,r.jsx)(n.h3,{id:"custom-magic-comments",children:"Custom magic comments"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"// highlight-next-line"})," and ",(0,r.jsx)(n.code,{children:"// highlight-start"}),' etc. are called "magic comments", because they will be parsed and removed, and their purposes are to add metadata to the next line, or the section that the pair of start- and end-comments enclose.']}),"\n",(0,r.jsxs)(n.p,{children:["You can declare custom magic comments through theme config. For example, you can register another magic comment that adds a ",(0,r.jsx)(n.code,{children:"code-block-error-line"})," class name:"]}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{value:"docusaurus.config.js",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"export default {\n themeConfig: {\n prism: {\n magicComments: [\n // Remember to extend the default highlight class name as well!\n {\n className: 'theme-code-block-highlighted-line',\n line: 'highlight-next-line',\n block: {start: 'highlight-start', end: 'highlight-end'},\n },\n // highlight-start\n {\n className: 'code-block-error-line',\n line: 'This will error',\n },\n // highlight-end\n ],\n },\n },\n};\n"})})}),(0,r.jsx)(s.Z,{value:"src/css/custom.css",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",children:".code-block-error-line {\n background-color: #ff000020;\n display: block;\n margin: 0 calc(-1 * var(--ifm-pre-padding));\n padding: 0 var(--ifm-pre-padding);\n border-left: 3px solid #ff000080;\n}\n"})})}),(0,r.jsx)(s.Z,{value:"myDoc.md",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"In JavaScript, trying to access properties on `null` will error.\n\n```js\nconst name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n```\n"})})})]}),"\n",(0,r.jsxs)(c.Z,{children:[(0,r.jsxs)(n.p,{children:["In JavaScript, trying to access properties on ",(0,r.jsx)(n.code,{children:"null"})," will error."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const name = null;\n// This will error\nconsole.log(name.toUpperCase());\n// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')\n"})})]}),"\n",(0,r.jsxs)(n.p,{children:["If you use number ranges in metastring (the ",(0,r.jsx)(n.code,{children:"{1,3-4}"})," syntax), Docusaurus will apply the ",(0,r.jsxs)(n.strong,{children:["first ",(0,r.jsx)(n.code,{children:"magicComments"})," entry"]}),"'s class name. This, by default, is ",(0,r.jsx)(n.code,{children:"theme-code-block-highlighted-line"}),", but if you change the ",(0,r.jsx)(n.code,{children:"magicComments"})," config and use a different entry as the first one, the meaning of the metastring range will change as well."]}),"\n",(0,r.jsxs)(n.p,{children:["You can disable the default line highlighting comments with ",(0,r.jsx)(n.code,{children:"magicComments: []"}),". If there's no magic comment config, but Docusaurus encounters a code block containing a metastring range, it will error because there will be no class name to apply\u2014the highlighting class name, after all, is just a magic comment entry."]}),"\n",(0,r.jsxs)(n.p,{children:["Every magic comment entry will contain three keys: ",(0,r.jsx)(n.code,{children:"className"})," (required), ",(0,r.jsx)(n.code,{children:"line"}),", which applies to the directly next line, or ",(0,r.jsx)(n.code,{children:"block"})," (containing ",(0,r.jsx)(n.code,{children:"start"})," and ",(0,r.jsx)(n.code,{children:"end"}),"), which applies to the entire block enclosed by the two comments."]}),"\n",(0,r.jsxs)(n.p,{children:["Using CSS to target the class can already do a lot, but you can unlock the full potential of this feature through ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"}),"."]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic CodeBlock/Line\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Line"})," component will receive the list of class names, based on which you can conditionally render different markup."]}),"\n",(0,r.jsx)(n.h2,{id:"line-numbering",children:"Line numbering"}),"\n",(0,r.jsxs)(n.p,{children:["You can enable line numbering for your code block by using ",(0,r.jsx)(n.code,{children:"showLineNumbers"})," key within the language meta string (don't forget to add space directly before the key)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx {1,4-6,11} showLineNumbers\nimport React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n```\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"{1,4-6,11} showLineNumbers",children:"import React from 'react';\n\nfunction MyComponent(props) {\n if (props.isBar) {\n return <div>Bar</div>;\n }\n\n return <div>Foo</div>;\n}\n\nexport default MyComponent;\n"})})}),"\n",(0,r.jsx)(n.h2,{id:"interactive-code-editor",children:"Interactive code editor"}),"\n",(0,r.jsxs)(n.p,{children:["(Powered by ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"React Live"}),")"]}),"\n",(0,r.jsxs)(n.p,{children:["You can create an interactive coding editor with the ",(0,r.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," plugin. First, add the plugin to your package."]}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["You will also need to add the plugin to your ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"{3}",children:"export default {\n // ...\n themes: ['@docusaurus/theme-live-codeblock'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To use the plugin, create a code block with ",(0,r.jsx)(n.code,{children:"live"})," attached to the language meta string."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live\nfunction Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n```\n"})}),"\n",(0,r.jsx)(n.p,{children:"The code block will be rendered as an interactive editor. Changes to the code will reflect on the result panel live."}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n const timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imports",children:"Imports"}),"\n",(0,r.jsx)(n.admonition,{title:"react-live and imports",type:"warning",children:(0,r.jsx)(n.p,{children:"It is not possible to import components directly from the react-live code editor, you have to define available imports upfront."})}),"\n",(0,r.jsx)(n.p,{children:"By default, all React imports are available. If you need more imports available, swizzle the react-live scope:"}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope -- --eject\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope --eject\n"})})})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/ReactLiveScope/index.js"',children:"import React from 'react';\n\n// highlight-start\nconst ButtonExample = (props) => (\n <button\n {...props}\n style={{\n backgroundColor: 'white',\n color: 'black',\n border: 'solid red',\n borderRadius: 20,\n padding: 10,\n cursor: 'pointer',\n ...props.style,\n }}\n />\n);\n// highlight-end\n\n// Add react-live imports you need here\nconst ReactLiveScope = {\n React,\n ...React,\n // highlight-next-line\n ButtonExample,\n};\n\nexport default ReactLiveScope;\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"ButtonExample"})," component is now available to use:"]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function MyPlayground(props) {\n return (\n <div>\n <ButtonExample onClick={() => alert('hey!')}>Click me</ButtonExample>\n </div>\n );\n}\n"})})}),"\n",(0,r.jsx)(n.h3,{id:"imperative-rendering-noinline",children:"Imperative Rendering (noInline)"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"noInline"})," option should be used to avoid errors when your code spans multiple components or variables."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```jsx live noInline\nconst project = 'Docusaurus';\n\nconst Greeting = () => <p>Hello {project}!</p>;\n\nrender(<Greeting />);\n```\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Unlike an ordinary interactive code block, when using ",(0,r.jsx)(n.code,{children:"noInline"})," React Live won't wrap your code in an inline function to render it."]}),"\n",(0,r.jsxs)(n.p,{children:["You will need to explicitly call ",(0,r.jsx)(n.code,{children:"render()"})," at the end of your code to display the output."]}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live noInline",live:!0,children:'const project = "Docusaurus";\n\nconst Greeting = () => (\n <p>Hello {project}!</p>\n);\n\nrender(\n <Greeting />\n);\n'})})}),"\n",(0,r.jsx)(n.h2,{id:"using-jsx-markup",children:"Using JSX markup in code blocks"}),"\n",(0,r.jsx)(n.p,{children:"Code block in Markdown always preserves its content as plain text, meaning you can't do something like:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:'type EditUrlFunction = (params: {\n // This doesn\'t turn into a link (for good reason!)\n version: <a href="/docs/versioning">Version</a>;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n'})}),"\n",(0,r.jsxs)(n.p,{children:["If you want to embed HTML markup such as anchor links or bold type, you can use the ",(0,r.jsx)(n.code,{children:"<pre>"})," tag, ",(0,r.jsx)(n.code,{children:"<code>"})," tag, or ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"<pre>\n <b>Input: </b>1 2 3 4{'\\n'}\n <b>Output: </b>\"366300745\"{'\\n'}\n</pre>\n"})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)("pre",{children:[(0,r.jsx)("b",{children:"Input: "}),"1 2 3 4\n",(0,r.jsx)("b",{children:"Output: "}),'"366300745"\n']})}),"\n",(0,r.jsx)(n.admonition,{title:"MDX is whitespace insensitive",type:"warning",children:(0,r.jsxs)(n.p,{children:["MDX is in line with JSX behavior: line break characters, even when inside ",(0,r.jsx)(n.code,{children:"<pre>"}),", are turned into spaces. You have to explicitly write the new line character for it to be printed out."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Syntax highlighting only works on plain strings. Docusaurus will not attempt to parse code block content containing JSX children."})}),"\n",(0,r.jsx)(n.h2,{id:"multi-language-support-code-blocks",children:"Multi-language support code blocks"}),"\n",(0,r.jsx)(n.p,{children:"With MDX, you can easily create interactive components within your documentation, for example, to display code in multiple programming languages and switch between them using a tabs component."}),"\n",(0,r.jsxs)(n.p,{children:["Instead of implementing a dedicated component for multi-language support code blocks, we've implemented a general-purpose ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,r.jsx)(n.code,{children:"<Tabs>"})})," component in the classic theme so that you can use it for other non-code scenarios as well."]}),"\n",(0,r.jsxs)(n.p,{children:["The following example is how you can have multi-language code tabs in your docs. Note that the empty lines above and below each language block are ",(0,r.jsx)(n.strong,{children:"intentional"}),". This is a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react#markdown-and-jsx-interoperability",children:"current limitation of MDX"}),": you have to leave empty lines around Markdown syntax for the MDX parser to know that it's Markdown syntax and not JSX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n<TabItem value="js" label="JavaScript">\n\n```js\nfunction helloWorld() {\n console.log(\'Hello, world!\');\n}\n```\n\n</TabItem>\n<TabItem value="py" label="Python">\n\n```py\ndef hello_world():\n print("Hello, world!")\n```\n\n</TabItem>\n<TabItem value="java" label="Java">\n\n```java\nclass HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n```\n\n</TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(n.p,{children:"And you will get the following:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{value:"js",label:"JavaScript",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function helloWorld() {\n console.log('Hello, world!');\n}\n"})})}),(0,r.jsx)(s.Z,{value:"py",label:"Python",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-py",children:'def hello_world():\n print("Hello, world!")\n'})})}),(0,r.jsx)(s.Z,{value:"java",label:"Java",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})})})]})}),"\n",(0,r.jsxs)(n.p,{children:["If you have multiple of these multi-language code tabs, and you want to sync the selection across the tab instances, refer to the ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs#syncing-tab-choices",children:"Syncing tab choices section"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"npm2yarn-remark-plugin",children:"Docusaurus npm2yarn remark plugin"}),"\n",(0,r.jsx)(n.p,{children:"Displaying CLI commands in both npm and Yarn is a very common need, for example:"}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/remark-plugin-npm2yarn\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/remark-plugin-npm2yarn\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus provides such a utility out of the box, freeing you from using the ",(0,r.jsx)(n.code,{children:"Tabs"})," component every time. To enable this feature, first install the ",(0,r.jsx)(n.code,{children:"@docusaurus/remark-plugin-npm2yarn"})," package as above, and then in ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),", for the plugins where you need this feature (doc, blog, pages, etc.), register it in the ",(0,r.jsx)(n.code,{children:"remarkPlugins"})," option. (See ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#ex-config",children:"Docs configuration"})," for more details on configuration format)"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n remarkPlugins: [\n [require('@docusaurus/remark-plugin-npm2yarn'), {sync: true}],\n ],\n // highlight-end\n },\n pages: {\n // highlight-next-line\n remarkPlugins: [require('@docusaurus/remark-plugin-npm2yarn')],\n },\n blog: {\n // highlight-start\n remarkPlugins: [\n [\n require('@docusaurus/remark-plugin-npm2yarn'),\n {converters: ['pnpm']},\n ],\n ],\n // highlight-end\n // ...\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And then use it by adding the ",(0,r.jsx)(n.code,{children:"npm2yarn"})," key to the code block:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"```bash npm2yarn\nnpm install @docusaurus/remark-plugin-npm2yarn\n```\n"})}),"\n",(0,r.jsx)(n.h4,{id:"npm2yarn-remark-plugin-configuration",children:"Configuration"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Option"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to sync the selected converter across all code blocks."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"converters"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"array"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"'yarn'"}),", ",(0,r.jsx)(n.code,{children:"'pnpm'"})]}),(0,r.jsx)(n.td,{children:"The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice."})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"usage-in-jsx",children:"Usage in JSX"}),"\n",(0,r.jsxs)(n.p,{children:["Outside of Markdown, you can use the ",(0,r.jsx)(n.code,{children:"@theme/CodeBlock"})," component to get the same output."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'import CodeBlock from \'@theme/CodeBlock\';\n\nexport default function MyReactPage() {\n return (\n <div>\n {/* highlight-start */}\n <CodeBlock\n language="jsx"\n title="/src/components/HelloCodeTitle.js"\n showLineNumbers>\n {`function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}`}\n </CodeBlock>\n {/* highlight-end */}\n </div>\n );\n}\n'})}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsx)(l.Z,{language:"jsx",title:"/src/components/HelloCodeTitle.js",showLineNumbers:!0,children:"function HelloCodeTitle(props) {\n return <h1>Hello, {props.name}</h1>;\n}"})}),"\n",(0,r.jsxs)(n.p,{children:["The props accepted are ",(0,r.jsx)(n.code,{children:"language"}),", ",(0,r.jsx)(n.code,{children:"title"})," and ",(0,r.jsx)(n.code,{children:"showLineNumbers"}),", in the same way as you write Markdown code blocks."]}),"\n",(0,r.jsxs)(n.p,{children:["Although discouraged, you can also pass in a ",(0,r.jsx)(n.code,{children:"metastring"})," prop like ",(0,r.jsx)(n.code,{children:"metastring='{1-2} title=\"/src/components/HelloCodeTitle.js\" showLineNumbers'"}),", which is how Markdown code blocks are handled under the hood. However, we recommend you ",(0,r.jsx)(n.a,{href:"#highlighting-with-comments",children:"use comments for highlighting lines"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["As ",(0,r.jsx)(n.a,{href:"#using-jsx-markup",children:"previously stated"}),", syntax highlighting is only applied when the children is a simple string."]})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/0af1b9a1.a5c2f22a.js b/assets/js/0af1b9a1.a5c2f22a.js new file mode 100644 index 0000000000..7b2f42ac6a --- /dev/null +++ b/assets/js/0af1b9a1.a5c2f22a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54223],{39641:(t,g,i)=>{i.r(g),i.d(g,{assets:()=>a,contentTitle:()=>e,default:()=>n,frontMatter:()=>o,metadata:()=>m,toc:()=>p});var h=i(24246),u=i(71670);const o={authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize"}],tags:["paginated-tag"]},e="Image-only authors",m={permalink:"/tests/blog/2022/01/20/image-only-authors",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx",source:"@site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx",title:"Image-only authors",description:"You can make a compact authors list without author names!",date:"2022-01-20T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:2,hasTruncateMarker:!1,authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice",imageURL:"https://github.com/deltice.png"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa",imageURL:"https://github.com/ericnakagawa.png"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos",imageURL:"https://github.com/hramos.png"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19",imageURL:"https://github.com/wgao19.png"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter",imageURL:"https://github.com/rickyvetter.png"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc",imageURL:"https://github.com/hong4rc.png"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize",imageURL:"https://github.com/italicize.png"}],frontMatter:{authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice",imageURL:"https://github.com/deltice.png"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa",imageURL:"https://github.com/ericnakagawa.png"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos",imageURL:"https://github.com/hramos.png"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19",imageURL:"https://github.com/wgao19.png"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter",imageURL:"https://github.com/rickyvetter.png"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc",imageURL:"https://github.com/hong4rc.png"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize",imageURL:"https://github.com/italicize.png"}],tags:["paginated-tag"]},unlisted:!1,prevItem:{title:"Third post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/21/dup-footnote"},nextItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/11/13/dup-title"}},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},p=[];function s(t){const g={p:"p",...(0,u.a)(),...t.components};return(0,h.jsx)(g.p,{children:"You can make a compact authors list without author names!"})}function n(t={}){const{wrapper:g}={...(0,u.a)(),...t.components};return g?(0,h.jsx)(g,{...t,children:(0,h.jsx)(s,{...t})}):s(t)}},71670:(t,g,i)=>{i.d(g,{Z:()=>m,a:()=>e});var h=i(27378);const u={},o=h.createContext(u);function e(t){const g=h.useContext(o);return h.useMemo((function(){return"function"==typeof t?t(g):{...g,...t}}),[g,t])}function m(t){let g;return g=t.disableParentContext?"function"==typeof t.components?t.components(u):t.components||u:e(t.components),h.createElement(o.Provider,{value:g},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b6cd89a.baa8fb50.js b/assets/js/0b6cd89a.baa8fb50.js new file mode 100644 index 0000000000..647c7ac6c6 --- /dev/null +++ b/assets/js/0b6cd89a.baa8fb50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39987],{61132:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),s=t(27378),i=t(40624),o=t(75527),c=t(3620),d=t(44479),l=t(62821),a=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function x(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,l._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,o]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=x(e),[o,c]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[l,a]=f({queryString:t,groupId:r}),[h,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:i})?e:null})();(0,d.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),a(e),j(e)}),[a,j,i]),tabValues:i}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:c}){const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),a=e=>{const n=e.currentTarget,r=d.indexOf(n),i=c[r].value;i!==t&&(l(n),s(i))},u=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=d.indexOf(e.currentTarget)+1;var t;n=null!==(t=d[r])&&void 0!==t?t:d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;var r;n=null!==(r=d[t])&&void 0!==r?r:d[d.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(O({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>d.push(e),onKeyDown:u,onClick:a},s),{className:(0,i.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=g(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,O({},e,n)),(0,r.jsx)(k,O({},e,n))]})}function S(e){const n=(0,m.Z)();return(0,r.jsx)(D,w(O({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(29088));function i({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),i=t(80474),o=t(3620);const c={apiTable:"apiTable_e8hp"};function d({name:e,children:n},t){const c=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),d=e?`${e}-${c}`:c,l=`#${d}`,a=(0,o.k6)();return(0,i.Z)().collectAnchor(d),(0,r.jsx)("tr",{id:d,tabIndex:0,ref:a.location.hash===l?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(l)},onKeyDown:e=>{"Enter"===e.key&&a.push(l)},children:n.props.children})}const l=s.forwardRef(d);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,i]=s.Children.toArray(e.props.children),o=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=o.current)||void 0===e||e.focus()}),[o]);const d=s.Children.map(i.props.children,(e=>(0,r.jsx)(l,{name:n,ref:o,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[t,(0,r.jsx)("tbody",{children:d})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),s=(t(27378),t(41428)),i=t(92053),o=t(36712),c=t(97555),d=t(61132),l=t(38112);const a=void 0;function u({code:e,pluginName:n,presetOptionName:t}){const u=(0,i.zu)(a).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(d.Z,{value:"preset",label:(0,o.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${u}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(o.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(d.Z,{value:"plugin",label:(0,o.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ue});var r={};t.r(r),t.d(r,{ButtonExample:()=>_});var s=t(24246),i=t(27378),o=t(40624),c=t(29088),d=t(32711),l=t(36712),a=t(4423),u=t(94544),h=t(30691),j=t(78844),p=t(73919);function x(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const f={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){g(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function v(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,o.Z)(f.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(u.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(b.Z,{fallback:e=>(0,s.jsx)(h.Ac,m({},e)),children:(0,s.jsx)(d.i5,{})}),(0,s.jsx)(d.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:f.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function D(){const e=(0,c.Z)();return(0,s.jsx)(d.uz,{className:f.playgroundEditor},String(e))}function S(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,i=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:o}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:c}}=o,l=x();var u;const h=null!==(u=null===(n=i.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,s.jsx)("div",{className:f.playgroundContainer,children:(0,s.jsx)(d.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:C,theme:l},i),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(S,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(S,{}),(0,s.jsx)(k,{})]})}))})}function E(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function I(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){E(e,n,t[n])}))}return e}function T(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function _(e){return(0,s.jsx)("button",T(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function B(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const L=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){B(e,n,t[n])}))}return e}({React:i},i,r);var U,V,R=t(89583),A=t(6324),M=t.n(A);function Z(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},G=(q=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Z(e,n,t[n])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(z)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(z)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(z,e))})),q);var q,z;const H=Object.keys(W);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=G[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function J(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:i}=n;if(i&&F.test(i)){const e=i.match(F).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const o=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(H,n)}}(r,s),c=t.split("\n"),d=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<c.length;){const e=c[j].match(o);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));l[n]?d[l[n]].range+=`${j},`:a[n]?d[a[n]].start=j:u[n]&&(d[u[n]].range+=`${d[u[n]].start}-${j-1},`),c.splice(j,1)}t=c.join("\n");const h={};return Object.entries(d).forEach((([e,{range:n}])=>{M()(n).forEach((n=>{var t;null!==(t=(U=h)[V=n])&&void 0!==t||(U[V]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(x());return(0,s.jsx)(n,Y(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,o.Z)(t.className,Q.codeBlockContainer,R.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,o.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function oe(e,n){const[t,r]=(0,i.useState)(),s=(0,i.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{s()}),[s]),function(e,n,t=ie){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,i.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const de={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){le(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,o.Z)(n,t&&de.codeLine)}),d=e.map(((e,n)=>(0,s.jsx)("span",ae({},i({token:e,key:n})),n)));return(0,s.jsxs)("span",ue(ae({},c),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:de.codeLineNumber}),(0,s.jsx)("span",{className:de.codeLineContent,children:d})]}):d,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function xe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,s.jsx)("svg",xe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function fe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){fe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[t,r]=(0,i.useState)(!1),c=(0,i.useRef)(void 0),d=(0,i.useCallback)((()=>{(0,je.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:d,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(be,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function Oe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Oe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,o.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:d}){const{prism:{defaultLanguage:l,magicComments:a}}=(0,p.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=d?d:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:l),j=x(),b=function(){const[e,n]=(0,i.useState)(!1),[t,r]=(0,i.useState)(!1),s=(0,i.useRef)(null),o=(0,i.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return oe(s,c),(0,i.useEffect)((()=>{c()}),[e,c]),(0,i.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:o}}(),f=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:g,code:m}=J(e,{metastring:t,language:h,magicComments:a}),y=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,o.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[f&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:f}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:j,code:m,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:i})=>(0,s.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,o.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,o.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:r,getTokenProps:i,classNames:g[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,s.jsx)(De,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,s.jsx)(ve,{className:te.codeButton,code:m})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}const _e=(Be=function(e){var{children:n}=e,t=Ee(e,["children"]);const r=(0,c.Z)(),o=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),d="string"==typeof o?Se:re;return(0,s.jsx)(d,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:o}),String(r))},function(e){return e.live?(0,s.jsx)(N,Te({scope:L},e)):(0,s.jsx)(Be,Te({},e))});var Be;function Le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ue(e){return(0,s.jsx)(_e,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Le(e,n,t[n])}))}return e}({},e))}},37595:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>x,frontMatter:()=>l,metadata:()=>u,toc:()=>j});var r=t(24246),s=t(71670),i=t(97555),o=t(61132),c=t(52605),d=t(82064);const l={sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},a="\ud83d\udce6 plugin-content-docs",u={id:"api/plugins/plugin-content-docs",title:"\ud83d\udce6 plugin-content-docs",description:"Provides the Docs functionality and is the default docs plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-docs.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx",tags:[],version:"current",lastUpdatedBy:"ozaki",lastUpdatedAt:1710503406e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/plugins/@docusaurus/plugin-content-docs"},sidebar:"api",previous:{title:"Plugins overview",permalink:"/docs/api/plugins"},next:{title:"\ud83d\udce6 plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog"}},h={},j=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFunction</code>",id:"EditUrlFunction",level:4},{value:"<code>PrefixParser</code>",id:"PrefixParser",level:4},{value:"<code>SidebarGenerator</code>",id:"SidebarGenerator",level:4},{value:"<code>VersionsConfig</code>",id:"VersionsConfig",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-plugin-content-docs",children:"\ud83d\udce6 plugin-content-docs"}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/docs-introduction",children:"Docs"})," functionality and is the default docs plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(i.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-docs\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-docs\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsx)(n.td,{children:"Path to the docs content directory on the file system, relative to site directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFunction",children:"EditUrlFunction"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativeDocPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will always target the current version doc instead of older versions. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'docs'"})}),(0,r.jsxs)(n.td,{children:["URL route for the docs section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," for shipping docs without base path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags list page of your site. It is prepended to the ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"false | string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Path to sidebar configuration. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable sidebars, or ",(0,r.jsx)(n.code,{children:"undefined"})," to create a fully autogenerated sidebar."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsible"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsible by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#collapsible-categories",children:"Collapsible categories"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarCollapsed"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsxs)(n.td,{children:["Whether sidebar categories are collapsed by default. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#expanded-categories-by-default",children:"Expanded categories by default"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#SidebarGenerator",children:"SidebarGenerator"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Function used to replace the sidebar items of type ",(0,r.jsx)(n.code,{children:"'autogenerated'"})," with real sidebar items (docs, categories, links...). See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"numberPrefixParser"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["boolean | ",(0,r.jsx)(n.a,{href:"#PrefixParser",children:"PrefixParser"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"Omitted"})}),(0,r.jsxs)(n.td,{children:["Custom parsing logic to extract number prefixes from file names. Use ",(0,r.jsx)(n.code,{children:"false"})," to disable this behavior and leave the docs untouched, and ",(0,r.jsx)(n.code,{children:"true"})," to use the default parser. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docsRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocsRoot'"})}),(0,r.jsx)(n.td,{children:"Parent component of all the docs plugin pages (including all versions). Stays mounted when navigation between docs pages and versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docVersionRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocVersionLayout'"})}),(0,r.jsx)(n.td,{children:"Parent component of all docs pages of an individual version (doc pages with sidebars, tags pages). Stays mounted when navigation between pages of that specific version."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docRootComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocPage'"})}),(0,r.jsx)(n.td,{children:"Parent component of all doc pages with sidebars (regular docs pages, category generated index pages). Stays mounted when navigation between such pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docItemComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocItem'"})}),(0,r.jsx)(n.td,{children:"Main doc container, with TOC, pagination, etc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docTagDocListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocTagDocListPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "docs containing tag X" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"docCategoryGeneratedIndexComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/DocCategoryGeneratedIndexPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the generated category index page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the doc."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the doc was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"breadcrumbs"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Enable or disable the breadcrumbs on doc pages."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"disableVersioning"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Explicitly disable versioning even when multiple versions exist. This will make the site only include the current version. Will error if ",(0,r.jsx)(n.code,{children:"includeCurrentVersion: false"})," and ",(0,r.jsx)(n.code,{children:"disableVersioning: true"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"includeCurrentVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Include the current version of your docs."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"lastVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["First version in ",(0,r.jsx)(n.code,{children:"versions.json"})]}),(0,r.jsx)(n.td,{children:"The version navigated to in priority and displayed by default for docs navbar items."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onlyIncludeVersions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:"All versions available"}),(0,r.jsx)(n.td,{children:"Only include a subset of all available versions."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"versions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#VersionsConfig",children:"VersionsConfig"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{}"})}),(0,r.jsx)(n.td,{children:"Independent customization of each version's properties."})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFunction",children:(0,r.jsx)(n.code,{children:"EditUrlFunction"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n version: string;\n versionDocsDirPath: string;\n docPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"PrefixParser",children:(0,r.jsx)(n.code,{children:"PrefixParser"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type PrefixParser = (filename: string) => {\n filename: string;\n numberPrefix?: number;\n};\n"})}),"\n",(0,r.jsx)(n.h4,{id:"SidebarGenerator",children:(0,r.jsx)(n.code,{children:"SidebarGenerator"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarGenerator = (generatorArgs: {\n /** The sidebar item with type \"autogenerated\" to be transformed. */\n item: {type: 'autogenerated'; dirName: string};\n /** Useful metadata for the version this sidebar belongs to. */\n version: {contentPath: string; versionName: string};\n /** All the docs of that version (unfiltered). */\n docs: {\n id: string;\n title: string;\n frontMatter: DocFrontMatter & Record<string, unknown>;\n source: string;\n sourceDirName: string;\n sidebarPosition?: number | undefined;\n }[];\n /** Number prefix parser configured for this plugin. */\n numberPrefixParser: PrefixParser;\n /** The default category index matcher which you can override. */\n isCategoryIndex: CategoryIndexMatcher;\n /**\n * key is the path relative to the doc content directory, value is the\n * category metadata file's content.\n */\n categoriesMetadata: {[filePath: string]: CategoryMetadata};\n /**\n * Useful to re-use/enhance the default sidebar generation logic from\n * Docusaurus.\n */\n defaultSidebarItemsGenerator: SidebarGenerator;\n // Returns an array of sidebar items \u2014 same as what you can declare in\n // sidebars.js, except for shorthands. See https://docusaurus.io/docs/sidebar/items\n}) => Promise<SidebarItem[]>;\n\ntype CategoryIndexMatcher = (param: {\n /** The file name, without extension */\n fileName: string;\n /**\n * The list of directories, from lowest level to highest.\n * If there's no dir name, directories is ['.']\n */\n directories: string[];\n /** The extension, with a leading dot */\n extension: string;\n}) => boolean;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"VersionsConfig",children:(0,r.jsx)(n.code,{children:"VersionsConfig"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type VersionConfig = {\n /**\n * The base path of the version, will be appended to `baseUrl` +\n * `routeBasePath`.\n */\n path?: string;\n /** The label of the version to be used in badges, dropdowns, etc. */\n label?: string;\n /** The banner to show at the top of a doc of that version. */\n banner?: 'none' | 'unreleased' | 'unmaintained';\n /** Show a badge with the version label at the top of each doc. */\n badge?: boolean;\n /** Prevents search engines from indexing this version */\n noIndex?: boolean;\n /** Add a custom class name to the <html> element of each doc */\n className?: string;\n};\n\ntype VersionsConfig = {[versionName: string]: VersionConfig};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(d.Z,{pluginName:"@docusaurus/plugin-content-docs",presetOptionName:"docs",code:"{\n path: 'docs',\n breadcrumbs: true,\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({versionDocsDirPath, docPath}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`,\n editLocalizedFiles: false,\n editCurrentVersion: false,\n routeBasePath: 'docs',\n include: ['**/*.md', '**/*.mdx'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n sidebarPath: 'sidebars.js',\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n isCategoryIndex,\n }) {\n // Use the provided data to generate a custom sidebar slice\n return [\n {type: 'doc', id: 'intro'},\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n {type: 'doc', id: 'tutorial1'},\n {type: 'doc', id: 'tutorial2'},\n ],\n },\n ];\n },\n numberPrefixParser(filename) {\n // Implement your own logic to extract a potential number prefix\n const numberPrefix = findNumberPrefix(filename);\n // Prefix found: return it with the cleaned filename\n if (numberPrefix) {\n return {\n numberPrefix,\n filename: filename.replace(prefix, ''),\n };\n }\n // No number prefix found\n return {numberPrefix: undefined, filename};\n },\n docsRootComponent: '@theme/DocsRoot',\n docVersionRootComponent: '@theme/DocVersionRoot',\n docRootComponent: '@theme/DocRoot',\n docItemComponent: '@theme/DocItem',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n showLastUpdateAuthor: false,\n showLastUpdateTime: false,\n disableVersioning: false,\n includeCurrentVersion: true,\n lastVersion: undefined,\n versions: {\n current: {\n label: 'Android SDK v2.0.0 (WIP)',\n path: 'android-2.0.0',\n banner: 'none',\n },\n '1.0.0': {\n label: 'Android SDK v1.0.0',\n path: 'android-1.0.0',\n banner: 'unmaintained',\n },\n },\n onlyIncludeVersions: ['current', '1.0.0', '2.0.0'],\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"id"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"file path (including folders, without the extension)"}),(0,r.jsx)(n.td,{children:"A unique document ID."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:["Markdown title or ",(0,r.jsx)(n.code,{children:"id"})]}),(0,r.jsx)(n.td,{children:"The text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"sidebar_label"})," or ",(0,r.jsx)(n.code,{children:"title"})]}),(0,r.jsx)(n.td,{children:"The text used in the document next/previous buttons for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_label"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:"The text shown in the document sidebar for this document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_position"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:"Default ordering"}),(0,r.jsxs)(n.td,{children:["Controls the position of a doc inside the generated sidebar slice when using ",(0,r.jsx)(n.code,{children:"autogenerated"})," sidebar items. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_class_name"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Gives the corresponding sidebar label a special class name when using autogenerated sidebars."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sidebar_custom_props"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Assign ",(0,r.jsx)(n.a,{href:"/docs/sidebar#passing-custom-props",children:"custom props"})," to the sidebar item referencing this doc"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"displayed_sidebar"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Force the display of a given sidebar when browsing the current document. Read the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars guide"})," for details."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the title at the top of the doc. It only hides a title declared through the front matter, and have no effect on a Markdown title at the top of your document."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_next"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Next doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Next" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Next" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pagination_prev"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:"Previous doc in the sidebar"}),(0,r.jsxs)(n.td,{children:['The ID of the documentation you want the "Previous" pagination to link to. Use ',(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Previous" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"parse_number_prefixes"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"numberPrefixParser"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["Whether number prefix parsing is disabled on this doc. See also ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#using-number-prefixes",children:"Using number prefixes"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"custom_edit_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsxs)(n.td,{children:["Computed using the ",(0,r.jsx)(n.code,{children:"editUrl"})," plugin option"]}),(0,r.jsxs)(n.td,{children:["The URL for editing this document. Use ",(0,r.jsx)(n.code,{children:"null"}),' to disable showing "Edit this page" for this page.']})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Keywords meta tag for the document page, for search engines."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the document URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-doc"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/myDoc"}),", ",(0,r.jsx)(n.code,{children:"slug: /"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your docs."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft documents will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted documents will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\nid: doc-markdown\ntitle: Docs Markdown Features\nhide_title: false\nhide_table_of_contents: false\nsidebar_label: Markdown\nsidebar_position: 3\npagination_label: Markdown features\ncustom_edit_url: https://github.com/facebook/docusaurus/edit/main/docs/api-doc-markdown.md\ndescription: How do I find you when I cannot solve this problem\nkeywords:\n - docs\n - docusaurus\nimage: https://i.imgur.com/mErPwqL.png\nslug: /myDoc\nlast_update:\n date: 1/1/2000\n author: custom author name\n---\n\n# Markdown Features\n\nMy Document Markdown content\n"})}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-docs\n\u2502\n\u2502 # translations for website/docs\n\u251c\u2500\u2500 current\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u251c\u2500\u2500 current.json\n\u2502\n\u2502 # translations for website/versioned_docs/version-1.0.0\n\u251c\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 api\n\u2502 \u2502 \u2514\u2500\u2500 config.md\n\u2502 \u2514\u2500\u2500 getting-started.md\n\u2514\u2500\u2500 version-1.0.0.json\n"})})]})}function x(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/0b7c2a4a.eef7ffe9.js b/assets/js/0b7c2a4a.eef7ffe9.js new file mode 100644 index 0000000000..b01fa03124 --- /dev/null +++ b/assets/js/0b7c2a4a.eef7ffe9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43769],{90632:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},61132:(e,r,n)=>{n.d(r,{Z:()=>i});var t=n(24246),s=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function i({children:e,hidden:r,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>P});var t=n(24246),s=n(27378),a=n(40624),i=n(75527),o=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:r,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:t}})=>({value:e,label:r,attributes:n,default:t})))}(n);return function(e){const r=(0,u.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function f({queryString:e=!1,groupId:r}){const n=(0,o.k6)(),t=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),a=(0,c._X)(t),i=(0,s.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(n.location.search);r.set(t,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){h(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[t,n]);return[a,i]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:t}=e,a=b(e),[i,o]=(0,s.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:a}))),[c,u]=f({queryString:n,groupId:t}),[h,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,d.Nk)(r);return[n,(0,s.useCallback)((e=>{r&&t.set(e)}),[r,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){w(e,r,n[r])}))}return e}function k(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function O({className:e,block:r,selectedValue:n,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const r=e.currentTarget,t=l.indexOf(r),a=o[t].value;a!==n&&(c(r),s(a))},d=e=>{let r=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;var n;r=null!==(n=l[t])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var t;r=null!==(t=l[n])&&void 0!==t?t:l[l.length-1];break}}null==r||r.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":r},e),children:o.map((({value:e,label:r,attributes:s})=>(0,t.jsx)("li",k(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function D({lazy:e,children:r,selectedValue:n}){const a=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:a.map(((e,r)=>(0,s.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function S(e){const r=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(O,v({},e,r)),(0,t.jsx)(D,v({},e,r))]})}function P(e){const r=(0,x.Z)();return(0,t.jsx)(S,k(v({},e),{children:g(e.children)}),String(r))}},13381:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=(n(27378),n(6698));function a({url:e}){return(0,t.jsx)("div",{style:{padding:10},children:(0,t.jsx)(s.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,t.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,r,n)=>{n.d(r,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(r){i(e,r,n[r])}))}return e}function l(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function c({children:e,minHeight:r,url:n="http://localhost:3000",style:i,bodyStyle:c}){return(0,t.jsxs)("div",{className:a.browserWindow,style:l(o({},i),{minHeight:r}),children:[(0,t.jsxs)("div",{className:a.browserWindowHeader,children:[(0,t.jsxs)("div",{className:a.buttons,children:[(0,t.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar}),(0,t.jsx)("span",{className:a.bar})]})})]}),(0,t.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},3818:(e,r,n)=>{n.d(r,{Z:()=>a});var t=n(24246),s=n(27378);function a({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:n}){const[a,i]=(0,s.useState)(!1);if(a)throw new Error(r,{cause:n?new Error(n):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>i(!0),children:e})}},41665:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg"},61578:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg"},86435:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},38260:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>u,metadata:()=>h,toc:()=>g});var t=n(24246),s=n(71670),a=n(97555),i=n(61132),o=n(6698),l=n(13381),c=n(3818);const u={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},d=void 0,h={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1694767701e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},p={image:n(90632).Z,authorsImageUrls:[void 0]},g=[{value:"Highlights",id:"highlights",level:2},{value:"Sidebar item description",id:"sidebar-item-description",level:3},{value:"Theme Query String",id:"theme-query-string",level:3},{value:"Remark plugin npm2yarn upgrade",id:"remark-plugin-npm2yarn-upgrade",level:3},{value:"gtag support for multiple tracking IDs",id:"gtag-support-for-multiple-tracking-ids",level:3},{value:"Developer Experience",id:"developer-experience",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function b(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.p,{children:["We are happy to announce ",(0,t.jsx)(r.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(r.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(r.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus blog post social card",src:n(86435).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,t.jsx)(r.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(r.h3,{id:"sidebar-item-description",children:"Sidebar item description"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8236",children:"#8236"}),", we made it possible to provide a new ",(0,t.jsx)(r.code,{children:"description"})," attribute for docs sidebar items of type ",(0,t.jsx)(r.code,{children:"link"})," and ",(0,t.jsx)(r.code,{children:"category"}),"."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-tsx",metastring:'title="sidebars.js"',children:"[\n {\n type: 'link',\n label: 'Link with description',\n href: 'https://docusaurus.io',\n // highlight-next-line\n description: 'Some link description',\n },\n {\n type: 'category',\n label: 'Category with description',\n // highlight-next-line\n description: 'Some category description',\n items: [],\n },\n];\n"})}),"\n",(0,t.jsx)(r.p,{children:"These descriptions will be used in category generated index pages."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Show sidebar category generated index with custom descriptions",src:n(61578).Z+"",width:"1400",height:"691"})}),"\n",(0,t.jsx)(r.h3,{id:"theme-query-string",children:"Theme Query String"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8708",children:"#8708"}),", we added the possibility to force Docusaurus to initialize itself in ",(0,t.jsx)(r.code,{children:"light"})," or ",(0,t.jsx)(r.code,{children:"dark"})," mode through a new ",(0,t.jsx)(r.code,{children:"docusaurus-theme"})," query-string parameter."]}),"\n",(0,t.jsx)(r.p,{children:"This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView."}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=light"}),"\n",(0,t.jsx)(l.Z,{url:"/docs/?docusaurus-theme=dark"}),"\n",(0,t.jsx)(r.h3,{id:"remark-plugin-npm2yarn-upgrade",children:"Remark plugin npm2yarn upgrade"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8690",children:"#8690"}),", we upgraded our Remark plugin ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn",children:"@docusaurus/remark-plugin-npm2yarn"})," with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-markdown",children:"Run these commands!\n\n```bash npm2yarn\nnpm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n```\n"})}),"\n",(0,t.jsx)(o.Z,{children:(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(i.Z,{value:"npm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"npm install\nnpm run build\nnpm run myCustomScript -- --some-arg\n"})})}),(0,t.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"yarn install\nyarn build\nyarn myCustomScript --some-arg\n"})})}),(0,t.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"pnpm install\npnpm run build\npnpm run myCustomScript --some-arg\n"})})})]})}),"\n",(0,t.jsx)(r.h3,{id:"gtag-support-for-multiple-tracking-ids",children:"gtag support for multiple tracking IDs"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8620",children:"#8620"})," we added support for the ",(0,t.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"@docusaurus/plugin-google-gtag"})," plugin to declare multiple tracking IDs."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n gtag: {\n trackingID: [\n // highlight-next-line\n 'G-<YOUR-NEW-GA4-ID>',\n // highlight-next-line\n 'UA-<YOUR-OLD-UA-ID>',\n ],\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(r.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})})," on ",(0,t.jsx)(r.strong,{children:"July 1, 2023"}),"."]}),(0,t.jsxs)(r.p,{children:["Docusaurus users should migrate to Google Analytics 4. Google ",(0,t.jsx)(r.strong,{children:"does not permit to migrate your existing Universal Analytics data"})," to your new Google Analytics 4 property."]}),(0,t.jsxs)(r.p,{children:["To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (",(0,t.jsx)(r.code,{children:"UA-*"}),") and new one (",(0,t.jsx)(r.code,{children:"G-*"}),"). Refer to the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated issue"})})," for details."]})]}),"\n",(0,t.jsx)(r.h3,{id:"developer-experience",children:"Developer Experience"}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8736",children:"#8736"}),", we improved how we render error messages and added initial support to render the full causal chain of an error (see ",(0,t.jsx)(r.a,{href:"https://h3manth.com/ES2022/#error-cause",children:"ES2022 Error Cause"}),")."]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["To see it in action, click here: ",(0,t.jsx)(c.Z,{cause:"Probably undefined is not a function \ud83d\ude04"})]})}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8735",children:"#8735"})," we also made navbar-related error messages clearer to help users understand what they did wrong."]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Docusaurus navbar error message screenshot",src:n(41665).Z+"",width:"1676",height:"1614"})}),"\n",(0,t.jsx)(r.h3,{id:"translations",children:"Translations"}),"\n",(0,t.jsx)(r.p,{children:"We made it possible to translate some new elements:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8677",children:"#8677"})," introduces a new ",(0,t.jsx)(r.code,{children:"process.env.DOCUSAURUS_CURRENT_LOCALE"})," (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl..."]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8616",children:"#8616"})," allows to translate the navbar and footer logo alt text"]}),"\n"]}),"\n",(0,t.jsx)(r.p,{children:"We added default theme translation support for multiple languages:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["\ud83c\udded\ud83c\uddfa ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8668",children:"#8668"}),": Hungarian"]}),"\n",(0,t.jsxs)(r.li,{children:["\ud83c\uddf3\ud83c\uddf4 ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8631",children:"#8631"}),": Norwegian (Bokm\xe5l)"]}),"\n"]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["Completing theme translations is an ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,t.jsx)(r.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsx)(r.p,{children:"Other notable changes include:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8674",children:"#8674"}),": respect ",(0,t.jsx)(r.code,{children:"prefers-reduced-motion: reduce"})," media query"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8712",children:"#8712"}),": use a navbar item of type ",(0,t.jsx)(r.code,{children:"docSidebar"})," in template"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8801",children:"#8801"}),": allow tabs children to be falsy"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8757",children:"#8757"}),": make search page react to external query-string changes"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8803",children:"#8803"}),": fix code block buttons position in RTL"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8615",children:"#8615"}),": fix color mode toggle when using dark navbar"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/8699",children:"#8699"}),": fix navbar dropdown tab focus bug"]}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Check the ",(0,t.jsx)(r.strong,{children:(0,t.jsx)(r.a,{href:"/changelog/2.4.0",children:"2.4.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function m(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(b,{...e})}):b(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>o,a:()=>i});var t=n(27378);const s={},a=t.createContext(s);function i(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b899567.e413dd2c.js b/assets/js/0b899567.e413dd2c.js new file mode 100644 index 0000000000..82472cc752 --- /dev/null +++ b/assets/js/0b899567.e413dd2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82413],{39224:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>h,toc:()=>l});var o=t(24246),i=t(71670);const n={mdx:{format:"md"},date:"2022-05-05T20:00",authors:["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},r="2.0.0-beta.20",h={permalink:"/changelog/2.0.0-beta.20",source:"@site/changelog/source/2.0.0-beta.20.md",title:"2.0.0-beta.20",description:"Bug Fix",date:"2022-05-05T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Steven Hicks",alias:"pepopowitz",url:"https://github.com/pepopowitz",imageURL:"https://github.com/pepopowitz.png",key:"pepopowitz"},{name:"Reece Dunham",alias:"RDIL",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png",key:"RDIL"},{name:"Sergey Gromkov",alias:"sgromkov",url:"https://github.com/sgromkov",imageURL:"https://github.com/sgromkov.png",key:"sgromkov"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-05-05T20:00",authors:["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-beta.21",permalink:"/changelog/2.0.0-beta.21"},nextItem:{title:"2.0.0-beta.19",permalink:"/changelog/2.0.0-beta.19"},listPageLink:"/changelog/"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"Committers: 6",id:"committers-6",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7342",children:"#7342"})," fix: avoid flash of page scrolling to top on refresh (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7329",children:"#7329"})," fix(core): inject docusaurus version into SSR as local (",(0,o.jsx)(s.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7341",children:"#7341"})," fix(theme-classic): properly highlight code block line numbers (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7334",children:"#7334"})," feat(website): make canary release page display actual canary version name (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7343",children:"#7343"})," docs: add page for create-docusaurus API documentation (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7340",children:"#7340"})," docs: add Yandex Metrika plugin to community plugins (",(0,o.jsx)(s.a,{href:"https://github.com/sgromkov",children:"@sgromkov"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7336",children:"#7336"})," fix(website): fix multiple accessibility issues around color contrast (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7327",children:"#7327"})," docs: add clarity to versioning behavior (",(0,o.jsx)(s.a,{href:"https://github.com/pepopowitz",children:"@pepopowitz"}),")"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"committers-6",children:"Committers: 6"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,o.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Joshua Chen (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Reece Dunham (",(0,o.jsx)(s.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Sergey Gromkov (",(0,o.jsx)(s.a,{href:"https://github.com/sgromkov",children:"@sgromkov"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Steven Hicks (",(0,o.jsx)(s.a,{href:"https://github.com/pepopowitz",children:"@pepopowitz"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>h,a:()=>r});var o=t(27378);const i={},n=o.createContext(i);function r(e){const s=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0bc851e0.4433ddd3.js b/assets/js/0bc851e0.4433ddd3.js new file mode 100644 index 0000000000..70e830bac7 --- /dev/null +++ b/assets/js/0bc851e0.4433ddd3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33009],{47817:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},28147:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},48653:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(24246),n=t(71670);const a={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},o=void 0,i={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:t(47817).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["We are happy to announce ",(0,r.jsx)(s.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,r.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Docusaurus 2.1 social card",src:t(28147).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(27378);const n={},a=r.createContext(n);function o(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0bdaac98.d6cfb712.js b/assets/js/0bdaac98.d6cfb712.js new file mode 100644 index 0000000000..9629f33537 --- /dev/null +++ b/assets/js/0bdaac98.d6cfb712.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[14265],{59872:s=>{s.exports=JSON.parse('{"tag":{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus","allTagsPath":"/tests/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/docusaurus","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/docusaurus/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/0c7845dd.10da5707.js b/assets/js/0c7845dd.10da5707.js new file mode 100644 index 0000000000..9c7c39c1e7 --- /dev/null +++ b/assets/js/0c7845dd.10da5707.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43473],{31014:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_max_heading_level:5},l=void 0,d={id:"toc/toc-_-5",title:"toc-_-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx",sourceDirName:"toc",slug:"/toc/toc-_-5",permalink:"/tests/docs/toc/toc-_-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"},next:{title:"toc-_-_",permalink:"/tests/docs/toc/toc-_-_"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.08498ba7.js b/assets/js/0e384e19.08498ba7.js deleted file mode 100644 index fb70492a37..0000000000 --- a/assets/js/0e384e19.08498ba7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[3976],{1512:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(4848),r=n(8453);const o={sidebar_position:1},i="Tutorial Intro",a={id:"intro",title:"Tutorial Intro",description:"Let's discover Docusaurus in less than 5 minutes.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Tutorial - Basics",permalink:"/docs/category/tutorial---basics"}},l={},d=[{value:"Getting Started",id:"getting-started",level:2},{value:"What you'll need",id:"what-youll-need",level:3},{value:"Generate a new site",id:"generate-a-new-site",level:2},{value:"Start your site",id:"start-your-site",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"tutorial-intro",children:"Tutorial Intro"}),"\n",(0,s.jsxs)(t.p,{children:["Let's discover ",(0,s.jsx)(t.strong,{children:"Docusaurus in less than 5 minutes"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsxs)(t.p,{children:["Get started by ",(0,s.jsx)(t.strong,{children:"creating a new site"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Or ",(0,s.jsx)(t.strong,{children:"try Docusaurus immediately"})," with ",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"what-youll-need",children:"What you'll need"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 18.0 or above:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"When installing Node.js, you are recommended to check all checkboxes related to dependencies."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"generate-a-new-site",children:"Generate a new site"}),"\n",(0,s.jsxs)(t.p,{children:["Generate a new Docusaurus site using the ",(0,s.jsx)(t.strong,{children:"classic template"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"The classic template will automatically be added to your project after you run the command:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"npm init docusaurus@latest my-website classic\n"})}),"\n",(0,s.jsx)(t.p,{children:"You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor."}),"\n",(0,s.jsx)(t.p,{children:"The command also installs all necessary dependencies you need to run Docusaurus."}),"\n",(0,s.jsx)(t.h2,{id:"start-your-site",children:"Start your site"}),"\n",(0,s.jsx)(t.p,{children:"Run the development server:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"cd my-website\nnpm run start\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"cd"})," command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there."]}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"npm run start"})," command builds your website locally and serves it through a development server, ready for you to view at ",(0,s.jsx)(t.a,{href:"http://localhost:3000/",children:"http://localhost:3000/"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Open ",(0,s.jsx)(t.code,{children:"docs/intro.md"})," (this page) and edit some lines: the site ",(0,s.jsx)(t.strong,{children:"reloads automatically"})," and displays your changes."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var s=n(6540);const r={},o=s.createContext(r);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0e4d8110.a815cf65.js b/assets/js/0e4d8110.a815cf65.js new file mode 100644 index 0000000000..3cf1cc460d --- /dev/null +++ b/assets/js/0e4d8110.a815cf65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84733],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function g({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=h(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=j({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=a?a:p;return g({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=m(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},e,t)),(0,r.jsx)(k,v({},e,t))]})}function E(e){const t=(0,y.Z)();return(0,r.jsx)(S,w(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>d});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:n}){const d=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var g=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(j.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(g.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=h();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){C(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),R=n.n($);function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(U=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},W),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(W);function G(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ge(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(ge,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=h(),g=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(q))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:m,code:y}=Q(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:y,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:c,classNames:m[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ce(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const Te=(Le=function(e){var{children:t}=e,n=Ce(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:Z},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},60405:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},u="\ud83d\udce6 plugin-sitemap",d={id:"api/plugins/plugin-sitemap",title:"\ud83d\udce6 plugin-sitemap",description:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.",source:"@site/docs/api/plugins/plugin-sitemap.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-sitemap",permalink:"/docs/api/plugins/@docusaurus/plugin-sitemap",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1710931664e3,sidebarPosition:10,frontMatter:{sidebar_position:10,slug:"/api/plugins/@docusaurus/plugin-sitemap"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"},next:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},p={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-plugin-sitemap",children:"\ud83d\udce6 plugin-sitemap"}),"\n","\n",(0,r.jsx)(t.p,{children:"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-sitemap\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-sitemap\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"lastmod"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'date' | 'datetime' | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"null"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"date"})," is YYYY-MM-DD. ",(0,r.jsx)(t.code,{children:"datetime"})," is a ISO 8601 datetime. ",(0,r.jsx)(t.code,{children:"null"})," is disabled. See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"changefreq"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"'weekly'"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"priority"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"number | null"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"0.5"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.a,{href:"https://www.sitemaps.org/protocol.html#xmlTagDefinitions",children:"sitemap docs"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"ignorePatterns"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"A list of glob patterns; matching route paths will be filtered from the sitemap. Note that you may need to include the base URL in here."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"filename"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"sitemap.xml"})}),(0,r.jsx)(t.td,{children:"The path to the created sitemap file, relative to the output directory. Useful if you have two plugin instances outputting two files."})]})]})]})}),"\n",(0,r.jsxs)(t.admonition,{type:"info",children:[(0,r.jsx)(t.p,{children:"This plugin also respects some site config:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#noIndex",children:(0,r.jsx)(t.code,{children:"noIndex"})}),": results in no sitemap generated"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#trailingSlash",children:(0,r.jsx)(t.code,{children:"trailingSlash"})}),": determines if the URLs in the sitemap have trailing slashes"]}),"\n"]})]}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.mdxAdmonitionTitle,{children:["About ",(0,r.jsx)(t.code,{children:"lastmod"})]}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.code,{children:"lastmod"})," option will only output a sitemap ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag if plugins provide ",(0,r.jsx)(t.a,{href:"/docs/api/plugin-methods/lifecycle-apis#addRoute",children:"route metadata"})," attributes ",(0,r.jsx)(t.code,{children:"sourceFilePath"})," and/or ",(0,r.jsx)(t.code,{children:"lastUpdatedAt"}),"."]}),(0,r.jsxs)(t.p,{children:["All the official content plugins provide the metadata for routes backed by a content file (Markdown, MDX or React page components), but it is possible third-party plugin authors do not provide this information, and the plugin will not be able to output a ",(0,r.jsx)(t.code,{children:"<lastmod>"})," tag for their routes."]})]}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-sitemap",presetOptionName:"sitemap",code:"{\n lastmod: 'date',\n changefreq: 'weekly',\n priority: 0.5,\n ignorePatterns: ['/tags/**'],\n filename: 'sitemap.xml',\n}"}),"\n",(0,r.jsxs)(t.p,{children:["You can find your sitemap at ",(0,r.jsx)(t.code,{children:"/sitemap.xml"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/0e9c6edc.49dd67eb.js b/assets/js/0e9c6edc.49dd67eb.js new file mode 100644 index 0000000000..e643b97869 --- /dev/null +++ b/assets/js/0e9c6edc.49dd67eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40639],{47817:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},82874:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png"},28147:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},16506:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670);const o={title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},r=void 0,a={permalink:"/blog/2022/09/01/docusaurus-2.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx",source:"@site/blog/2022/09-01-docusaurus-2.1/index.mdx",title:"Docusaurus 2.1",description:"We are happy to announce Docusaurus 2.1, our very first minor version release.",date:"2022-09-01T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:1.725,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"},nextItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"}},c={image:s(47817).Z,authorsImageUrls:[void 0]},d=[{value:"Highlights",id:"highlights",level:2},{value:"DocCardList improvements",id:"doccardlist-improvements",level:3},{value:"<code>noindex</code> improvements",id:"noindex-improvements",level:3},{value:"Overriding default meta tags",id:"overriding-default-meta-tags",level:3},{value:"Ukrainian translations",id:"ukrainian-translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function l(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["We are happy to announce ",(0,t.jsx)(n.strong,{children:"Docusaurus 2.1"}),", our very first minor version release."]}),"\n",(0,t.jsxs)(n.p,{children:["The upgrade should be easy: as explained in our ",(0,t.jsx)(n.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Docusaurus 2.1 social card",src:s(28147).Z+"",width:"1200",height:"600"})}),"\n",(0,t.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsx)(n.h3,{id:"doccardlist-improvements",children:"DocCardList improvements"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8008",children:"#8008"}),", we simplified the usage of the",(0,t.jsx)(n.code,{children:"<DocCardList>"})," component, that is notably used on sidebar category generated index pages."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"items"})," prop is now optional, and will be automatically inferred from the content of the parent sidebar category:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:"import DocCardList from '@theme/DocCardList';\n- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';\n\n- <DocCardList items={useCurrentSidebarCategory().items}/>\n+ <DocCardList/>\n"})}),"\n",(0,t.jsx)(n.p,{children:"Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"simplified DocCardList component",src:s(82874).Z+"",width:"1062",height:"489"})}),"\n",(0,t.jsxs)(n.h3,{id:"noindex-improvements",children:[(0,t.jsx)(n.code,{children:"noindex"})," improvements"]}),"\n",(0,t.jsxs)(n.p,{children:["We improved the support of the ",(0,t.jsxs)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/block-indexing",children:[(0,t.jsx)(n.code,{children:"noindex"})," meta ",(0,t.jsx)(n.code,{children:"robots"})," directive"]}),", a way to signal search engines you don't want a specific page to be indexed."]}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7963",children:"#7963"}),", we allow ",(0,t.jsx)(n.code,{children:"noindex"})," to be configured on a per-docs-version basis."]}),"\n",(0,t.jsxs)(n.p,{children:["Use the following plugin options to tell crawlers you don't want the ",(0,t.jsx)(n.code,{children:"1.0.0"})," version to be indexed:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"const options = {\n versions: {\n '1.0.0': {\n noIndex: true,\n },\n },\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"In practice, Docusaurus will add the following meta to each page of that version:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'<meta name="robots" content="noindex, nofollow" />\n'})}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7964",children:"#7964"}),", we also fixed a bug where the sitemap plugin would still contain pages that have a ",(0,t.jsx)(n.code,{children:"noindex"})," directive. Now the sitemap plugin will reliably filter out all the pages containing ",(0,t.jsx)(n.code,{children:"noindex"})," directives."]}),"\n",(0,t.jsx)(n.h3,{id:"overriding-default-meta-tags",children:"Overriding default meta tags"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7952",children:"#7952"}),", it becomes possible to override default html meta tags you couldn't before:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'<>\n {siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n</>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["It is now possible to use ",(0,t.jsx)(n.code,{children:"<Head>"})," or ",(0,t.jsx)(n.code,{children:"themeConfig.metadata"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"viewport"})," meta"]}),"\n",(0,t.jsxs)(n.li,{children:["to override the ",(0,t.jsx)(n.code,{children:"robots"})," meta: you could mark your site as ",(0,t.jsx)(n.code,{children:"noIndex"}),", but except for specific pages that should be indexed"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"ukrainian-translations",children:"Ukrainian translations"}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7953",children:"#7953"}),", we added default classic theme translations for the Ukrainian language."]}),"\n",(0,t.jsx)(n.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,t.jsxs)(n.p,{children:["Check the ",(0,t.jsx)(n.a,{href:"/changelog/2.1.0",children:"2.1.0 changelog entry"})," for an exhaustive list of changes."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(27378);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f148a51.a29e28ab.js b/assets/js/0f148a51.a29e28ab.js new file mode 100644 index 0000000000..e2eece1809 --- /dev/null +++ b/assets/js/0f148a51.a29e28ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72358],{26542:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>h,default:()=>u,frontMatter:()=>a,metadata:()=>t,toc:()=>l});var i=n(24246),r=n(71670);const a={mdx:{format:"md"},date:"2022-10-29T20:00",authors:["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},h="2.2.0",t={permalink:"/changelog/2.2.0",source:"@site/changelog/source/2.2.0.md",title:"2.2.0",description:"New Feature",date:"2022-10-29T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Adnan Hashmi",alias:"adnanhashmi09",url:"https://github.com/adnanhashmi09",imageURL:"https://github.com/adnanhashmi09.png",key:"adnanhashmi09"},{name:"Johan Fagerberg",alias:"birjj",url:"https://github.com/birjj",imageURL:"https://github.com/birjj.png",key:"birjj"},{name:"evan",alias:"e-im",url:"https://github.com/e-im",imageURL:"https://github.com/e-im.png",key:"e-im"},{name:"forgeRW",alias:"forgeRW",url:"https://github.com/forgeRW",imageURL:"https://github.com/forgeRW.png",key:"forgeRW"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Mikey O'Toole",alias:"homotechsual",url:"https://github.com/homotechsual",imageURL:"https://github.com/homotechsual.png",key:"homotechsual"},{name:"Jeferson S. Brito",alias:"jeferson-sb",url:"https://github.com/jeferson-sb",imageURL:"https://github.com/jeferson-sb.png",key:"jeferson-sb"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jan Peer St\xf6cklmair",alias:"JPeer264",url:"https://github.com/JPeer264",imageURL:"https://github.com/JPeer264.png",key:"JPeer264"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"LittleboyHarry",alias:"LittleboyHarry",url:"https://github.com/LittleboyHarry",imageURL:"https://github.com/LittleboyHarry.png",key:"LittleboyHarry"},{name:"mturoci",alias:"mturoci",url:"https://github.com/mturoci",imageURL:"https://github.com/mturoci.png",key:"mturoci"},{name:"Nguy\u1ec5n Th\xe0nh Nam",alias:"namnguyenthanhwork",url:"https://github.com/namnguyenthanhwork",imageURL:"https://github.com/namnguyenthanhwork.png",key:"namnguyenthanhwork"},{name:"Masahiko Hara",alias:"pasora",url:"https://github.com/pasora",imageURL:"https://github.com/pasora.png",key:"pasora"},{name:"Pranav Joglekar",alias:"Pranav2612000",url:"https://github.com/Pranav2612000",imageURL:"https://github.com/Pranav2612000.png",key:"Pranav2612000"},{name:"Ramazan SANCAR",alias:"ramazansancar",url:"https://github.com/ramazansancar",imageURL:"https://github.com/ramazansancar.png",key:"ramazansancar"},{name:"Sanjaiyan Parthipan",alias:"sanjaiyan-dev",url:"https://github.com/sanjaiyan-dev",imageURL:"https://github.com/sanjaiyan-dev.png",key:"sanjaiyan-dev"},{name:"Shanmughapriyan S",alias:"shanpriyan",url:"https://github.com/shanpriyan",imageURL:"https://github.com/shanpriyan.png",key:"shanpriyan"},{name:"Sam Wall",alias:"sjwall",url:"https://github.com/sjwall",imageURL:"https://github.com/sjwall.png",key:"sjwall"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Xabier Lahuerta Vazquez",alias:"Xabilahu",url:"https://github.com/Xabilahu",imageURL:"https://github.com/Xabilahu.png",key:"Xabilahu"}],frontMatter:{mdx:{format:"md"},date:"2022-10-29T20:00",authors:["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},unlisted:!1,prevItem:{title:"2.3.0",permalink:"/changelog/2.3.0"},nextItem:{title:"2.1.0",permalink:"/changelog/2.1.0"},listPageLink:"/changelog/"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"Committers: 22",id:"committers-22",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8227",children:"#8227"})," feat(plugin-client-redirects): keep the query string + hash (",(0,i.jsx)(s.a,{href:"https://github.com/Xabilahu",children:"@Xabilahu"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8210",children:"#8210"})," feat(core): add --config param to swizzle command (",(0,i.jsx)(s.a,{href:"https://github.com/e-im",children:"@e-im"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-mermaid"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7490",children:"#7490"})," feat: support mermaid code blocks in Markdown (",(0,i.jsx)(s.a,{href:"https://github.com/sjwall",children:"@sjwall"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8151",children:"#8151"})," feat(core): siteConfig.headTags API to render extra tags in document head (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8250",children:"#8250"})," fix(ideal-image): do not pass down ",(0,i.jsx)(s.code,{children:"img"})," prop (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8246",children:"#8246"})," fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8234",children:"#8234"})," fix(plugin-content-docs): fix error message context (error cause) when doc processing fails (",(0,i.jsx)(s.a,{href:"https://github.com/shanpriyan",children:"@shanpriyan"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8207",children:"#8207"})," fix(theme-classic): hamburger menu control navigation by keyboard (",(0,i.jsx)(s.a,{href:"https://github.com/jeferson-sb",children:"@jeferson-sb"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8204",children:"#8204"})," fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API (",(0,i.jsx)(s.a,{href:"https://github.com/mturoci",children:"@mturoci"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8059",children:"#8059"})," fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8192",children:"#8192"})," fix(core): throw error for invalid URL in config file (",(0,i.jsx)(s.a,{href:"https://github.com/forgeRW",children:"@forgeRW"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8174",children:"#8174"})," fix(theme): announce theme switches (",(0,i.jsx)(s.a,{href:"https://github.com/mturoci",children:"@mturoci"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8190",children:"#8190"})," fix(theme): add more tag names to inline code element set (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8163",children:"#8163"})," fix(theme): mobile navbar & skipToContent should cover announcementBar (",(0,i.jsx)(s.a,{href:"https://github.com/adnanhashmi09",children:"@adnanhashmi09"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8068",children:"#8068"})," fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox (",(0,i.jsx)(s.a,{href:"https://github.com/LittleboyHarry",children:"@LittleboyHarry"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8137",children:"#8137"})," fix(utils): remove non-ASCII limitation for path normalization (",(0,i.jsx)(s.a,{href:"https://github.com/birjj",children:"@birjj"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8158",children:"#8158"})," fix(content-blog): make RSS feed generation work with slugs with .html extension (",(0,i.jsx)(s.a,{href:"https://github.com/Pranav2612000",children:"@Pranav2612000"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8105",children:"#8105"})," fix(theme-translations): complete turkish theme default translations (",(0,i.jsx)(s.a,{href:"https://github.com/ramazansancar",children:"@ramazansancar"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8087",children:"#8087"})," fix(theme-translations): remove extra vi translations (",(0,i.jsx)(s.a,{href:"https://github.com/namnguyenthanhwork",children:"@namnguyenthanhwork"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8067",children:"#8067"})," fix(redirect): tolerate trailing slash difference if config is undefined (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8253",children:"#8253"})," chore(theme-translations): complete ru translations (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8243",children:"#8243"})," chore(theme-translations): complete French translations (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8075",children:"#8075"})," fix(theme-translation): complete Japanese theme default translation (",(0,i.jsx)(s.a,{href:"https://github.com/pasora",children:"@pasora"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8159",children:"#8159"})," fix(core): throw error for invalid URL in config file (",(0,i.jsx)(s.a,{href:"https://github.com/forgeRW",children:"@forgeRW"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8109",children:"#8109"})," feat(core): prefetch on mobile touchstart (",(0,i.jsx)(s.a,{href:"https://github.com/sanjaiyan-dev",children:"@sanjaiyan-dev"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8161",children:"#8161"})," fix(theme): do not show tab content when tabbing over it; show after selection only (",(0,i.jsx)(s.a,{href:"https://github.com/mturoci",children:"@mturoci"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8062",children:"#8062"})," refactor(theme): remove hard-coded tag border-radius (",(0,i.jsx)(s.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8066",children:"#8066"})," fix(core): normalize slashes for url/baseUrl instead of throwing (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-22",children:"Committers: 22"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Adnan Hashmi (",(0,i.jsx)(s.a,{href:"https://github.com/adnanhashmi09",children:"@adnanhashmi09"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Forresst (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jan Peer St\xf6cklmair (",(0,i.jsx)(s.a,{href:"https://github.com/JPeer264",children:"@JPeer264"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jeferson S. Brito (",(0,i.jsx)(s.a,{href:"https://github.com/jeferson-sb",children:"@jeferson-sb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Johan Fagerberg (",(0,i.jsx)(s.a,{href:"https://github.com/birjj",children:"@birjj"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["John Reilly (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["LittleboyHarry (",(0,i.jsx)(s.a,{href:"https://github.com/LittleboyHarry",children:"@LittleboyHarry"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Masahiko Hara (",(0,i.jsx)(s.a,{href:"https://github.com/pasora",children:"@pasora"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Mikey O'Toole (",(0,i.jsx)(s.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Nguy\u1ec5n Th\xe0nh Nam (",(0,i.jsx)(s.a,{href:"https://github.com/namnguyenthanhwork",children:"@namnguyenthanhwork"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Pranav Joglekar (",(0,i.jsx)(s.a,{href:"https://github.com/Pranav2612000",children:"@Pranav2612000"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ramazan SANCAR (",(0,i.jsx)(s.a,{href:"https://github.com/ramazansancar",children:"@ramazansancar"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sam Wall (",(0,i.jsx)(s.a,{href:"https://github.com/sjwall",children:"@sjwall"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sanjaiyan Parthipan (",(0,i.jsx)(s.a,{href:"https://github.com/sanjaiyan-dev",children:"@sanjaiyan-dev"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Shanmughapriyan S (",(0,i.jsx)(s.a,{href:"https://github.com/shanpriyan",children:"@shanpriyan"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Xabier Lahuerta Vazquez (",(0,i.jsx)(s.a,{href:"https://github.com/Xabilahu",children:"@Xabilahu"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/forgeRW",children:"@forgeRW"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/mturoci",children:"@mturoci"})}),"\n",(0,i.jsxs)(s.li,{children:["evan (",(0,i.jsx)(s.a,{href:"https://github.com/e-im",children:"@e-im"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>h});var i=n(27378);const r={},a=i.createContext(r);function h(e){const s=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:h(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fbf443b.55307403.js b/assets/js/0fbf443b.55307403.js new file mode 100644 index 0000000000..617c40bfa8 --- /dev/null +++ b/assets/js/0fbf443b.55307403.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11775],{66150:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>a,contentTitle:()=>h,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var c=i(24246),n=i(71670);const o={mdx:{format:"md"},date:"2022-05-27T20:00",authors:["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},h="2.0.0-beta.21",r={permalink:"/changelog/2.0.0-beta.21",source:"@site/changelog/source/2.0.0-beta.21.md",title:"2.0.0-beta.21",description:"Breaking Change",date:"2022-05-27T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Benjamin Diolez",alias:"BenDz",url:"https://github.com/BenDz",imageURL:"https://github.com/BenDz.png",key:"BenDz"},{name:"Charles Korn",alias:"charleskorn",url:"https://github.com/charleskorn",imageURL:"https://github.com/charleskorn.png",key:"charleskorn"},{name:"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t",alias:"datlechin",url:"https://github.com/datlechin",imageURL:"https://github.com/datlechin.png",key:"datlechin"},{name:"Designatory",alias:"Designatory",url:"https://github.com/Designatory",imageURL:"https://github.com/Designatory.png",key:"Designatory"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"\u51f1\u6069 Kane",alias:"Gary50613",url:"https://github.com/Gary50613",imageURL:"https://github.com/Gary50613.png",key:"Gary50613"},{name:"Ggicci",alias:"ggicci",url:"https://github.com/ggicci",imageURL:"https://github.com/ggicci.png",key:"ggicci"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jan Peer St\xf6cklmair",alias:"JPeer264",url:"https://github.com/JPeer264",imageURL:"https://github.com/JPeer264.png",key:"JPeer264"},{name:"Jeremy",alias:"jrmyw92",url:"https://github.com/jrmyw92",imageURL:"https://github.com/jrmyw92.png",key:"jrmyw92"},{name:"Junjie",alias:"junjieweb",url:"https://github.com/junjieweb",imageURL:"https://github.com/junjieweb.png",key:"junjieweb"},{name:"Lane Goolsby",alias:"lanegoolsby",url:"https://github.com/lanegoolsby",imageURL:"https://github.com/lanegoolsby.png",key:"lanegoolsby"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Matthias Koch",alias:"matkoch",url:"https://github.com/matkoch",imageURL:"https://github.com/matkoch.png",key:"matkoch"},{name:"Akara",alias:"Messiahhh",url:"https://github.com/Messiahhh",imageURL:"https://github.com/Messiahhh.png",key:"Messiahhh"},{name:"Michael Hughes",alias:"mhughes2k",url:"https://github.com/mhughes2k",imageURL:"https://github.com/mhughes2k.png",key:"mhughes2k"},{name:"Nitya Narasimhan",alias:"nitya",url:"https://github.com/nitya",imageURL:"https://github.com/nitya.png",key:"nitya"},{name:"Oluwatobi Sofela",alias:"oluwatobiss",url:"https://github.com/oluwatobiss",imageURL:"https://github.com/oluwatobiss.png",key:"oluwatobiss"},{name:"Ori Shalom",alias:"ori-shalom",url:"https://github.com/ori-shalom",imageURL:"https://github.com/ori-shalom.png",key:"ori-shalom"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Rui Peres",alias:"RuiAAPeres",url:"https://github.com/RuiAAPeres",imageURL:"https://github.com/RuiAAPeres.png",key:"RuiAAPeres"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"James",alias:"Zamiell",url:"https://github.com/Zamiell",imageURL:"https://github.com/Zamiell.png",key:"Zamiell"}],frontMatter:{mdx:{format:"md"},date:"2022-05-27T20:00",authors:["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},unlisted:!1,prevItem:{title:"2.0.0-beta.22",permalink:"/changelog/2.0.0-beta.22"},nextItem:{title:"2.0.0-beta.20",permalink:"/changelog/2.0.0-beta.20"},listPageLink:"/changelog/"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83d\udd27 Maintenance",id:"wrench-maintenance",level:2},{value:"Committers: 23",id:"committers-23",level:2}];function t(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,n.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7422",children:"#7422"})," refactor(pwa): remove reloadPopup option in favor of swizzling (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"eslint-plugin"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7501",children:"#7501"})," chore: require Node 16.14 (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7469",children:"#7469"})," feat(sitemap): allow customizing the output name (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7371",children:"#7371"})," feat(core): support docusaurus.config.cjs as default file name (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7500",children:"#7500"})," feat: make docusaurus serve automatically open in browser (",(0,c.jsx)(s.a,{href:"https://github.com/Zamiell",children:"@Zamiell"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7452",children:"#7452"})," feat: add --no-minify flag to docusaurus start (",(0,c.jsx)(s.a,{href:"https://github.com/lanegoolsby",children:"@lanegoolsby"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7357",children:"#7357"}),' feat(theme-classic): allow className as option for type: "search" (',(0,c.jsx)(s.a,{href:"https://github.com/JPeer264",children:"@JPeer264"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7362",children:"#7362"})," fix: always emit SEO title + og:title meta (",(0,c.jsx)(s.a,{href:"https://github.com/charleskorn",children:"@charleskorn"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7453",children:"#7453"})," fix(core): avoid using logger and fs.readJSON in SSR (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7369",children:"#7369"})," fix(cli): output correct path when swizzling bare-file component in subfolder (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7360",children:"#7360"})," fix(core): allow githubPort in config validation (",(0,c.jsx)(s.a,{href:"https://github.com/mhughes2k",children:"@mhughes2k"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7424",children:"#7424"})," fix(gtag): send the newly rendered page's title instead of the old one's (",(0,c.jsx)(s.a,{href:"https://github.com/ori-shalom",children:"@ori-shalom"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7507",children:"#7507"})," fix(create-docusaurus): potential security issue with command injection (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7492",children:"#7492"})," fix(core): always treat error boundary fallback as a callback (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7438",children:"#7438"})," fix(theme-classic): allow nested task lists to preserve the indent (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7430",children:"#7430"})," fix(theme-classic): consistently apply the right active class name for all navbar items (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7411",children:"#7411"})," fix(theme-classic): autocollapse sidebar categories when navigating with paginator (",(0,c.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7363",children:"#7363"})," fix(theme-classic): resolve customCss from site dir (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7464",children:"#7464"})," fix(utils): fix Markdown link replacement when link text is same as href (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7458",children:"#7458"})," fix(utils): avoid replacing Markdown links missing the directly next link (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7392",children:"#7392"})," fix(mdx-loader): use React.Fragment as fragment factory (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7385",children:"#7385"})," fix(content-docs): restore functionality when a category only has index page (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7493",children:"#7493"})," chore(theme-translations): complete French translations (",(0,c.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7474",children:"#7474"})," chore(theme-translations): complete zh translations (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7400",children:"#7400"})," chore(theme-translations): complete Farsi translations (",(0,c.jsx)(s.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7499",children:"#7499"})," fix: avoid printing period after localhost URL (",(0,c.jsx)(s.a,{href:"https://github.com/Zamiell",children:"@Zamiell"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7374",children:"#7374"})," refactor(create): clean up logic when prompting for unspecified arguments (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7503",children:"#7503"})," docs: document MDXComponents scope (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7497",children:"#7497"})," docs: link every reference of types in API table to the type definition (",(0,c.jsx)(s.a,{href:"https://github.com/Zamiell",children:"@Zamiell"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7407",children:"#7407"})," docs: add Azure SWA as deployment option (",(0,c.jsx)(s.a,{href:"https://github.com/nitya",children:"@nitya"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7390",children:"#7390"})," fix(website): use react-lite-youtube-embed for lazy YouTube video (",(0,c.jsx)(s.a,{href:"https://github.com/matkoch",children:"@matkoch"}),")"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"wrench-maintenance",children:"\ud83d\udd27 Maintenance"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),", ",(0,c.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7477",children:"#7477"})," refactor: fix a lot of errors in type-aware linting (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7447",children:"#7447"})," refactor(theme-classic): migrate to tsc for build (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7441",children:"#7441"})," refactor(stylelint-copyright): migrate to TS (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7440",children:"#7440"})," refactor(cssnano-preset): migrate to TS (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"eslint-plugin"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7437",children:"#7437"})," refactor: use TS project references instead of running tsc multiple times (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7421",children:"#7421"})," refactor(pwa): migrate client modules to TS (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7415",children:"#7415"})," refactor(theme-classic): always collocate stylesheets with components in one folder (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/7405",children:"#7405"})," refactor(core): properly code-split NotFound page (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"committers-23",children:"Committers: 23"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Akara (",(0,c.jsx)(s.a,{href:"https://github.com/Messiahhh",children:"@Messiahhh"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Benjamin Diolez (",(0,c.jsx)(s.a,{href:"https://github.com/BenDz",children:"@BenDz"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Charles Korn (",(0,c.jsx)(s.a,{href:"https://github.com/charleskorn",children:"@charleskorn"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Designatory (",(0,c.jsx)(s.a,{href:"https://github.com/Designatory",children:"@Designatory"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Forresst (",(0,c.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ggicci (",(0,c.jsx)(s.a,{href:"https://github.com/ggicci",children:"@ggicci"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["James (",(0,c.jsx)(s.a,{href:"https://github.com/Zamiell",children:"@Zamiell"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Jan Peer St\xf6cklmair (",(0,c.jsx)(s.a,{href:"https://github.com/JPeer264",children:"@JPeer264"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Jeremy (",(0,c.jsx)(s.a,{href:"https://github.com/jrmyw92",children:"@jrmyw92"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Joshua Chen (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Junjie (",(0,c.jsx)(s.a,{href:"https://github.com/junjieweb",children:"@junjieweb"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Lane Goolsby (",(0,c.jsx)(s.a,{href:"https://github.com/lanegoolsby",children:"@lanegoolsby"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Massoud Maboudi (",(0,c.jsx)(s.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Matthias Koch (",(0,c.jsx)(s.a,{href:"https://github.com/matkoch",children:"@matkoch"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Michael Hughes (",(0,c.jsx)(s.a,{href:"https://github.com/mhughes2k",children:"@mhughes2k"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ng\xf4 Qu\u1ed1c \u0110\u1ea1t (",(0,c.jsx)(s.a,{href:"https://github.com/datlechin",children:"@datlechin"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Nitya Narasimhan (",(0,c.jsx)(s.a,{href:"https://github.com/nitya",children:"@nitya"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Oluwatobi Sofela (",(0,c.jsx)(s.a,{href:"https://github.com/oluwatobiss",children:"@oluwatobiss"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ori Shalom (",(0,c.jsx)(s.a,{href:"https://github.com/ori-shalom",children:"@ori-shalom"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Pranab Das (",(0,c.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Rui Peres (",(0,c.jsx)(s.a,{href:"https://github.com/RuiAAPeres",children:"@RuiAAPeres"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["\u51f1\u6069 Kane (",(0,c.jsx)(s.a,{href:"https://github.com/Gary50613",children:"@Gary50613"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(t,{...e})}):t(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>r,a:()=>h});var c=i(27378);const n={},o=c.createContext(n);function h(e){const s=c.useContext(o);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:h(e.components),c.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10b42bfe.aeee5e7d.js b/assets/js/10b42bfe.aeee5e7d.js new file mode 100644 index 0000000000..8985c1c85d --- /dev/null +++ b/assets/js/10b42bfe.aeee5e7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11073],{38730:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(24246),n=s(71670);const r={title:"Ensure heading anchor slugs respect GitHub emoji behavior",date:new Date("2023-08-05T00:00:00.000Z")},a=void 0,o={permalink:"/tests/blog/2023/08/05/",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-08-05.mdx",source:"@site/_dogfooding/_blog tests/2023-08-05.mdx",title:"Ensure heading anchor slugs respect GitHub emoji behavior",description:"This is a friendly header",date:"2023-08-05T00:00:00.000Z",tags:[],readingTime:3.2,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Ensure heading anchor slugs respect GitHub emoji behavior",date:"2023-08-05T00:00:00.000Z"},unlisted:!1,nextItem:{title:"Test if href in feed resolved correctly",permalink:"/tests/blog/2023/07/19/a"}},l={authorsImageUrls:[]},d=[{value:"\ud83d\ude03 This is a friendly header",id:"smiley-this-is-a-friendly-header",level:2},{value:"\ud83d\ude03 This is a friendly header (real smiley)",id:"-this-is-a-friendly-header-real-smiley",level:2}];function h(e){const t={h2:"h2",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.h2,{id:"smiley-this-is-a-friendly-header",children:["\ud83d\ude03"," This is a friendly header"]}),"\n",(0,i.jsx)(t.h2,{id:"-this-is-a-friendly-header-real-smiley",children:"\ud83d\ude03 This is a friendly header (real smiley)"})]})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>a});var i=s(27378);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10f80ca5.ce9d7c1e.js b/assets/js/10f80ca5.ce9d7c1e.js new file mode 100644 index 0000000000..29a66c17f7 --- /dev/null +++ b/assets/js/10f80ca5.ce9d7c1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51672],{23888:e=>{e.exports=JSON.parse('{"allContent":{"docusaurus-plugin-content-docs":{"default":{"loadedVersions":[{"versionName":"current","label":"Canary \ud83d\udea7","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/docs","tagsPath":"/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/sidebars.ts","contentPath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/docs","contentPathLocalized":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/i18n/en/docusaurus-plugin-content-docs/current","docs":[{"id":"advanced/architecture","title":"Architecture","description":"How Docusaurus works to build your app","source":"@site/docs/advanced/architecture.mdx","sourceDirName":"advanced","slug":"/advanced/architecture","permalink":"/docs/advanced/architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/architecture.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"description":"How Docusaurus works to build your app"},"sidebar":"docs","previous":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"},"next":{"title":"Plugins","permalink":"/docs/advanced/plugins"}},{"id":"advanced/client","title":"Client architecture","description":"How the Docusaurus client is structured","source":"@site/docs/advanced/client.mdx","sourceDirName":"advanced","slug":"/advanced/client","permalink":"/docs/advanced/client","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"frontMatter":{"description":"How the Docusaurus client is structured"},"sidebar":"docs","previous":{"title":"Static site generation","permalink":"/docs/advanced/ssg"},"next":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"}},{"id":"advanced/index","title":"Advanced Tutorials","description":"This section is not going to be very structured, but we will cover the following topics:","source":"@site/docs/advanced/index.mdx","sourceDirName":"advanced","slug":"/advanced/","permalink":"/docs/advanced/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/index.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{},"sidebar":"docs","previous":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"},"next":{"title":"Architecture","permalink":"/docs/advanced/architecture"}},{"id":"advanced/plugins","title":"Plugins","description":"Plugins are the building blocks of features in a Docusaurus site. Each plugin handles its own individual feature. Plugins may work and be distributed as part of a bundle via presets.","source":"@site/docs/advanced/plugins.mdx","sourceDirName":"advanced","slug":"/advanced/plugins","permalink":"/docs/advanced/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Architecture","permalink":"/docs/advanced/architecture"},"next":{"title":"Routing","permalink":"/docs/advanced/routing"}},{"id":"advanced/routing","title":"Routing","description":"Docusaurus\' routing system follows single-page application conventions: one route, one component.","source":"@site/docs/advanced/routing.mdx","sourceDirName":"advanced","slug":"/advanced/routing","permalink":"/docs/advanced/routing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/routing.mdx","tags":[],"version":"current","lastUpdatedBy":"Tomy Hsieh","lastUpdatedAt":1712319752000,"frontMatter":{"description":"Docusaurus\' routing system follows single-page application conventions: one route, one component."},"sidebar":"docs","previous":{"title":"Plugins","permalink":"/docs/advanced/plugins"},"next":{"title":"Static site generation","permalink":"/docs/advanced/ssg"}},{"id":"advanced/ssg","title":"Static site generation (SSG)","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.","source":"@site/docs/advanced/ssg.mdx","sourceDirName":"advanced","slug":"/advanced/ssg","permalink":"/docs/advanced/ssg","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"frontMatter":{"sidebar_label":"Static site generation","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},"sidebar":"docs","previous":{"title":"Routing","permalink":"/docs/advanced/routing"},"next":{"title":"Client architecture","permalink":"/docs/advanced/client"}},{"id":"api/docusaurus.config.js","title":"docusaurus.config.js","description":"API reference for Docusaurus configuration file.","source":"@site/docs/api/docusaurus.config.js.mdx","sourceDirName":"api","slug":"/api/docusaurus-config","permalink":"/docs/api/docusaurus-config","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/docusaurus.config.js.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"description":"API reference for Docusaurus configuration file.","slug":"/api/docusaurus-config"},"sidebar":"api","previous":{"title":"Client API","permalink":"/docs/docusaurus-core"},"next":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"}},{"id":"api/misc/create-docusaurus","title":"\ud83d\udce6 create-docusaurus","description":"A scaffolding utility to help you instantly set up a functional Docusaurus app.","source":"@site/docs/api/misc/create-docusaurus.mdx","sourceDirName":"api/misc","slug":"/api/misc/create-docusaurus","permalink":"/docs/api/misc/create-docusaurus","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/create-docusaurus.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"slug":"/api/misc/create-docusaurus"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"},"next":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"}},{"id":"api/misc/eslint-plugin/no-html-links","title":"no-html-links","description":"Ensure that the Docusaurus ` component is used instead of ` tags.","source":"@site/docs/api/misc/eslint-plugin/no-html-links.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-html-links.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1678982558000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-html-links"},"sidebar":"api","previous":{"title":"\ud83d\udce6 eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin"},"next":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"}},{"id":"api/misc/eslint-plugin/no-untranslated-text","title":"no-untranslated-text","description":"Enforce text labels in JSX to be wrapped by translate calls.","source":"@site/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/no-untranslated-text.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"sidebar":"api","previous":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"},"next":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"}},{"id":"api/misc/eslint-plugin/prefer-docusaurus-heading","title":"prefer-docusaurus-heading","description":"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.","source":"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx","tags":[],"version":"current","lastUpdatedBy":"Devansu Yadav","lastUpdatedAt":1674144504000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"sidebar":"api","previous":{"title":"no-untranslated-text","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},"next":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/misc/eslint-plugin/README","title":"\ud83d\udce6 eslint-plugin","description":"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.","source":"@site/docs/api/misc/eslint-plugin/README.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin","permalink":"/docs/api/misc/@docusaurus/eslint-plugin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Devansu Yadav","lastUpdatedAt":1674144504000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/misc/@docusaurus/eslint-plugin"},"sidebar":"api","previous":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"},"next":{"title":"no-html-links","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},{"id":"api/misc/eslint-plugin/string-literal-i18n-messages","title":"string-literal-i18n-messages","description":"Enforce translate APIs to be called on plain text labels.","source":"@site/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","sourceDirName":"api/misc/eslint-plugin","slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/string-literal-i18n-messages.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{"slug":"/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"},"sidebar":"api","previous":{"title":"prefer-docusaurus-heading","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},"next":{"title":"\ud83d\udce6 logger","permalink":"/docs/api/misc/@docusaurus/logger"}},{"id":"api/misc/logger/logger","title":"\ud83d\udce6 logger","description":"An encapsulated logger for semantically formatting console messages.","source":"@site/docs/api/misc/logger/logger.mdx","sourceDirName":"api/misc/logger","slug":"/api/misc/@docusaurus/logger","permalink":"/docs/api/misc/@docusaurus/logger","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/misc/@docusaurus/logger"},"sidebar":"api","previous":{"title":"string-literal-i18n-messages","permalink":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},{"id":"api/plugin-methods/extend-infrastructure","title":"Extending infrastructure","description":"Docusaurus has some infrastructure like hot reloading, CLI, and swizzling, that can be extended by external plugins.","source":"@site/docs/api/plugin-methods/extend-infrastructure.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/extend-infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/extend-infrastructure.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"api","previous":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"},"next":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"}},{"id":"api/plugin-methods/i18n-lifecycles","title":"I18n lifecycles","description":"Plugins use these lifecycles to load i18n-related data.","source":"@site/docs/api/plugin-methods/i18n-lifecycles.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/i18n-lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"api","previous":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"},"next":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"}},{"id":"api/plugin-methods/lifecycle-apis","title":"Lifecycle APIs","description":"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.","source":"@site/docs/api/plugin-methods/lifecycle-apis.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/lifecycle-apis","permalink":"/docs/api/plugin-methods/lifecycle-apis","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1710931664000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Plugin Method References","permalink":"/docs/api/plugin-methods/"},"next":{"title":"Extending infrastructure","permalink":"/docs/api/plugin-methods/extend-infrastructure"}},{"id":"api/plugin-methods/README","title":"Plugin Method References","description":"This section is a work in progress. Anchor links or even URLs are not guaranteed to be stable.","source":"@site/docs/api/plugin-methods/README.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/","permalink":"/docs/api/plugin-methods/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/README.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{},"sidebar":"api","previous":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"},"next":{"title":"Lifecycle APIs","permalink":"/docs/api/plugin-methods/lifecycle-apis"}},{"id":"api/plugin-methods/static-methods","title":"Static methods","description":"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.","source":"@site/docs/api/plugin-methods/static-methods.mdx","sourceDirName":"api/plugin-methods","slug":"/api/plugin-methods/static-methods","permalink":"/docs/api/plugin-methods/static-methods","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4},"sidebar":"api","previous":{"title":"I18n lifecycles","permalink":"/docs/api/plugin-methods/i18n-lifecycles"},"next":{"title":"Plugins overview","permalink":"/docs/api/plugins"}},{"id":"api/plugins/plugin-client-redirects","title":"\ud83d\udce6 plugin-client-redirects","description":"Docusaurus Plugin to generate client-side redirects.","source":"@site/docs/api/plugins/plugin-client-redirects.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1709665452000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/plugins/@docusaurus/plugin-client-redirects"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"},"next":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"}},{"id":"api/plugins/plugin-content-blog","title":"\ud83d\udce6 plugin-content-blog","description":"Provides the Blog feature and is the default blog plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-blog.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1710503406000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/plugins/@docusaurus/plugin-content-blog"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"},"next":{"title":"\ud83d\udce6 plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages"}},{"id":"api/plugins/plugin-content-docs","title":"\ud83d\udce6 plugin-content-docs","description":"Provides the Docs functionality and is the default docs plugin for Docusaurus.","source":"@site/docs/api/plugins/plugin-content-docs.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-docs.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1710503406000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"slug":"/api/plugins/@docusaurus/plugin-content-docs"},"sidebar":"api","previous":{"title":"Plugins overview","permalink":"/docs/api/plugins"},"next":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"}},{"id":"api/plugins/plugin-content-pages","title":"\ud83d\udce6 plugin-content-pages","description":"The default pages plugin for Docusaurus. The classic template ships with this plugin with default configurations. This plugin provides creating pages functionality.","source":"@site/docs/api/plugins/plugin-content-pages.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-content-pages","permalink":"/docs/api/plugins/@docusaurus/plugin-content-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1713259380000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/plugins/@docusaurus/plugin-content-pages"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-content-blog","permalink":"/docs/api/plugins/@docusaurus/plugin-content-blog"},"next":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"}},{"id":"api/plugins/plugin-debug","title":"\ud83d\udce6 plugin-debug","description":"The debug plugin will display useful debug information at http3000/docusaurus/debug.","source":"@site/docs/api/plugins/plugin-debug.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/plugins/@docusaurus/plugin-debug"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-client-redirects","permalink":"/docs/api/plugins/@docusaurus/plugin-client-redirects"},"next":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},{"id":"api/plugins/plugin-google-analytics","title":"\ud83d\udce6 plugin-google-analytics","description":"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.","source":"@site/docs/api/plugins/plugin-google-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"sidebarPosition":6,"frontMatter":{"sidebar_position":6,"slug":"/api/plugins/@docusaurus/plugin-google-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-debug","permalink":"/docs/api/plugins/@docusaurus/plugin-debug"},"next":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"}},{"id":"api/plugins/plugin-google-gtag","title":"\ud83d\udce6 plugin-google-gtag","description":"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.","source":"@site/docs/api/plugins/plugin-google-gtag.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"sidebarPosition":7,"frontMatter":{"sidebar_position":7,"slug":"/api/plugins/@docusaurus/plugin-google-gtag"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-google-analytics"},"next":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},{"id":"api/plugins/plugin-google-tag-manager","title":"\ud83d\udce6 plugin-google-tag-manager","description":"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.","source":"@site/docs/api/plugins/plugin-google-tag-manager.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-google-tag-manager"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-gtag","permalink":"/docs/api/plugins/@docusaurus/plugin-google-gtag"},"next":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},{"id":"api/plugins/plugin-ideal-image","title":"\ud83d\udce6 plugin-ideal-image","description":"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).","source":"@site/docs/api/plugins/plugin-ideal-image.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8,"slug":"/api/plugins/@docusaurus/plugin-ideal-image"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-google-tag-manager","permalink":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},"next":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"}},{"id":"api/plugins/plugin-pwa","title":"\ud83d\udce6 plugin-pwa","description":"Docusaurus Plugin to add PWA support using Workbox. This plugin generates a Service Worker in production build only, and allows you to create fully PWA-compliant documentation site with offline and installation support.","source":"@site/docs/api/plugins/plugin-pwa.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-pwa.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":9,"frontMatter":{"sidebar_position":9,"slug":"/api/plugins/@docusaurus/plugin-pwa"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-ideal-image","permalink":"/docs/api/plugins/@docusaurus/plugin-ideal-image"},"next":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"}},{"id":"api/plugins/plugin-sitemap","title":"\ud83d\udce6 plugin-sitemap","description":"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.","source":"@site/docs/api/plugins/plugin-sitemap.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-sitemap.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1710931664000,"sidebarPosition":10,"frontMatter":{"sidebar_position":10,"slug":"/api/plugins/@docusaurus/plugin-sitemap"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-pwa","permalink":"/docs/api/plugins/@docusaurus/plugin-pwa"},"next":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"}},{"id":"api/plugins/plugin-vercel-analytics","title":"\ud83d\udce6 plugin-vercel-analytics","description":"Vercel Analytics provides comprehensive insights into your website\'s visitors, tracking top pages, referrers, and demographics like location, operating systems, and browser info.","source":"@site/docs/api/plugins/plugin-vercel-analytics.mdx","sourceDirName":"api/plugins","slug":"/api/plugins/@docusaurus/plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-vercel-analytics.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1707917943000,"sidebarPosition":11,"frontMatter":{"sidebar_position":11,"slug":"/api/plugins/@docusaurus/plugin-vercel-analytics"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-sitemap","permalink":"/docs/api/plugins/@docusaurus/plugin-sitemap"},"next":{"title":"Themes overview","permalink":"/docs/api/themes"}},{"id":"api/plugins/plugins-overview","title":"Docusaurus plugins","description":"We provide official Docusaurus plugins.","source":"@site/docs/api/plugins/overview.mdx","sourceDirName":"api/plugins","slug":"/api/plugins","permalink":"/docs/api/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"plugins-overview","sidebar_label":"Plugins overview","slug":"/api/plugins"},"sidebar":"api","previous":{"title":"Static methods","permalink":"/docs/api/plugin-methods/static-methods"},"next":{"title":"\ud83d\udce6 plugin-content-docs","permalink":"/docs/api/plugins/@docusaurus/plugin-content-docs"}},{"id":"api/themes/theme-classic","title":"\ud83d\udce6 theme-classic","description":"The classic theme for Docusaurus.","source":"@site/docs/api/themes/theme-classic.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"slug":"/api/themes/@docusaurus/theme-classic"},"sidebar":"api","previous":{"title":"Configuration","permalink":"/docs/api/themes/configuration"},"next":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"}},{"id":"api/themes/theme-configuration","title":"Theme configuration","description":"This configuration applies to all main themes.","source":"@site/docs/api/themes/theme-configuration.mdx","sourceDirName":"api/themes","slug":"/api/themes/configuration","permalink":"/docs/api/themes/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"sidebar_label":"Configuration","slug":"/api/themes/configuration","toc_max_heading_level":4},"sidebar":"api","previous":{"title":"Themes overview","permalink":"/docs/api/themes"},"next":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"}},{"id":"api/themes/theme-live-codeblock","title":"\ud83d\udce6 theme-live-codeblock","description":"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.","source":"@site/docs/api/themes/theme-live-codeblock.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3,"slug":"/api/themes/@docusaurus/theme-live-codeblock"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-classic","permalink":"/docs/api/themes/@docusaurus/theme-classic"},"next":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"}},{"id":"api/themes/theme-mermaid","title":"\ud83d\udce6 theme-mermaid","description":"This theme provides a @theme/Mermaid component that is powered by mermaid. You can read more on diagrams documentation.","source":"@site/docs/api/themes/theme-mermaid.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-mermaid.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5,"slug":"/api/themes/@docusaurus/theme-mermaid"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia"},"next":{"title":"\ud83d\udce6 create-docusaurus","permalink":"/docs/api/misc/create-docusaurus"}},{"id":"api/themes/theme-search-algolia","title":"\ud83d\udce6 theme-search-algolia","description":"This theme provides a @theme/SearchBar component that integrates with Algolia DocSearch easily. Combined with @docusaurus/theme-classic, it provides a very easy search integration. You can read more on search documentation.","source":"@site/docs/api/themes/theme-search-algolia.mdx","sourceDirName":"api/themes","slug":"/api/themes/@docusaurus/theme-search-algolia","permalink":"/docs/api/themes/@docusaurus/theme-search-algolia","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-search-algolia.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"slug":"/api/themes/@docusaurus/theme-search-algolia"},"sidebar":"api","previous":{"title":"\ud83d\udce6 theme-live-codeblock","permalink":"/docs/api/themes/@docusaurus/theme-live-codeblock"},"next":{"title":"\ud83d\udce6 theme-mermaid","permalink":"/docs/api/themes/@docusaurus/theme-mermaid"}},{"id":"api/themes/themes-overview","title":"Docusaurus themes","description":"We provide official Docusaurus themes.","source":"@site/docs/api/themes/overview.mdx","sourceDirName":"api/themes","slug":"/api/themes","permalink":"/docs/api/themes","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"sidebarPosition":0,"frontMatter":{"sidebar_position":0,"id":"themes-overview","sidebar_label":"Themes overview","slug":"/api/themes"},"sidebar":"api","previous":{"title":"\ud83d\udce6 plugin-vercel-analytics","permalink":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},"next":{"title":"Configuration","permalink":"/docs/api/themes/configuration"}},{"id":"blog","title":"Blog","description":"Deploy a full-featured blog in no time with Docusaurus.","source":"@site/docs/blog.mdx","sourceDirName":".","slug":"/blog","permalink":"/docs/blog","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/blog.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1707503672000,"frontMatter":{"description":"Deploy a full-featured blog in no time with Docusaurus."},"sidebar":"docs","previous":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"},"next":{"title":"Markdown Features","permalink":"/docs/markdown-features"}},{"id":"browser-support","title":"Browser support","description":"How to keep a reasonable bundle size while ensuring sufficient browser support.","source":"@site/docs/browser-support.mdx","sourceDirName":".","slug":"/browser-support","permalink":"/docs/browser-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"frontMatter":{"description":"How to keep a reasonable bundle size while ensuring sufficient browser support."},"sidebar":"docs","previous":{"title":"Search","permalink":"/docs/search"},"next":{"title":"SEO","permalink":"/docs/seo"}},{"id":"cli","title":"CLI","description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website.","source":"@site/docs/cli.mdx","sourceDirName":".","slug":"/cli","permalink":"/docs/cli","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/cli.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"frontMatter":{"description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website."},"sidebar":"api","next":{"title":"Client API","permalink":"/docs/docusaurus-core"}},{"id":"configuration","title":"Configuration","description":"Configuring your site\'s behavior through docusaurus.config.js and more.","source":"@site/docs/configuration.mdx","sourceDirName":".","slug":"/configuration","permalink":"/docs/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/configuration.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"description":"Configuring your site\'s behavior through docusaurus.config.js and more."},"sidebar":"docs","previous":{"title":"Installation","permalink":"/docs/installation"},"next":{"title":"Playground","permalink":"/docs/playground"}},{"id":"deployment","title":"Deployment","description":"Deploy your Docusaurus app for production on a range of static site hosting services.","source":"@site/docs/deployment.mdx","sourceDirName":".","slug":"/deployment","permalink":"/docs/deployment","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/deployment.mdx","tags":[],"version":"current","lastUpdatedBy":"Can Eldem","lastUpdatedAt":1712310939000,"frontMatter":{"description":"Deploy your Docusaurus app for production on a range of static site hosting services."},"sidebar":"docs","previous":{"title":"Using Plugins","permalink":"/docs/using-plugins"},"next":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"}},{"id":"docusaurus-core","title":"Docusaurus Client API","description":"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.","source":"@site/docs/docusaurus-core.mdx","sourceDirName":".","slug":"/docusaurus-core","permalink":"/docs/docusaurus-core","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"frontMatter":{"sidebar_label":"Client API"},"sidebar":"api","previous":{"title":"CLI","permalink":"/docs/cli"},"next":{"title":"docusaurus.config.js","permalink":"/docs/api/docusaurus-config"}},{"id":"guides/creating-pages","title":"Creating Pages","description":"In this section, we will learn about creating pages in Docusaurus.","source":"@site/docs/guides/creating-pages.mdx","sourceDirName":"guides","slug":"/creating-pages","permalink":"/docs/creating-pages","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/creating-pages.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1701443743000,"frontMatter":{"slug":"/creating-pages","sidebar_label":"Pages"},"sidebar":"docs","previous":{"title":"Guides","permalink":"/docs/category/guides"},"next":{"title":"Introduction","permalink":"/docs/docs-introduction"}},{"id":"guides/docs/create-doc","title":"Create a doc","description":"Create a Markdown Document","source":"@site/docs/guides/docs/docs-create-doc.mdx","sourceDirName":"guides/docs","slug":"/create-doc","permalink":"/docs/create-doc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx","tags":[],"version":"current","lastUpdatedBy":"Joshua Chen","lastUpdatedAt":1709551997000,"frontMatter":{"id":"create-doc","description":"Create a Markdown Document","slug":"/create-doc"},"sidebar":"docs","previous":{"title":"Introduction","permalink":"/docs/docs-introduction"},"next":{"title":"Sidebar","permalink":"/docs/sidebar"}},{"id":"guides/docs/introduction","title":"Docs Introduction","description":"The docs feature provides users with a way to organize Markdown files in a hierarchical format.","source":"@site/docs/guides/docs/docs-introduction.mdx","sourceDirName":"guides/docs","slug":"/docs-introduction","permalink":"/docs/docs-introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{"id":"introduction","sidebar_label":"Introduction","slug":"/docs-introduction"},"sidebar":"docs","previous":{"title":"Pages","permalink":"/docs/creating-pages"},"next":{"title":"Create a doc","permalink":"/docs/create-doc"}},{"id":"guides/docs/multi-instance","title":"Docs Multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","source":"@site/docs/guides/docs/docs-multi-instance.mdx","sourceDirName":"guides/docs","slug":"/docs-multi-instance","permalink":"/docs/docs-multi-instance","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"id":"multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","slug":"/docs-multi-instance"},"sidebar":"docs","previous":{"title":"Versioning","permalink":"/docs/versioning"},"next":{"title":"Blog","permalink":"/docs/blog"}},{"id":"guides/docs/sidebar/autogenerated","title":"Autogenerated","description":"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.","source":"@site/docs/guides/docs/sidebar/autogenerated.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/autogenerated","permalink":"/docs/sidebar/autogenerated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"frontMatter":{"slug":"/sidebar/autogenerated"},"sidebar":"docs","previous":{"title":"Sidebar items","permalink":"/docs/sidebar/items"},"next":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"}},{"id":"guides/docs/sidebar/index","title":"Sidebar","description":"Creating a sidebar is useful to:","source":"@site/docs/guides/docs/sidebar/index.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar","permalink":"/docs/sidebar","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"slug":"/sidebar"},"sidebar":"docs","previous":{"title":"Create a doc","permalink":"/docs/create-doc"},"next":{"title":"Sidebar items","permalink":"/docs/sidebar/items"}},{"id":"guides/docs/sidebar/items","title":"Sidebar items","description":"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.","source":"@site/docs/guides/docs/sidebar/items.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/items","permalink":"/docs/sidebar/items","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"frontMatter":{"toc_max_heading_level":4,"slug":"/sidebar/items"},"sidebar":"docs","previous":{"title":"Sidebar","permalink":"/docs/sidebar"},"next":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"}},{"id":"guides/docs/sidebar/multiple-sidebars","title":"Using multiple sidebars","description":"You can create a sidebar for each set of Markdown files that you want to group together.","source":"@site/docs/guides/docs/sidebar/multiple-sidebars.mdx","sourceDirName":"guides/docs/sidebar","slug":"/sidebar/multiple-sidebars","permalink":"/docs/sidebar/multiple-sidebars","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/multiple-sidebars.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"slug":"/sidebar/multiple-sidebars"},"sidebar":"docs","previous":{"title":"Autogenerated","permalink":"/docs/sidebar/autogenerated"},"next":{"title":"Versioning","permalink":"/docs/versioning"}},{"id":"guides/docs/versioning","title":"Versioning","description":"You can use the versioning CLI to create a new documentation version based on the latest content in the docs directory. That specific set of documentation will then be preserved and accessible even as the documentation in the docs directory continues to evolve.","source":"@site/docs/guides/docs/versioning.mdx","sourceDirName":"guides/docs","slug":"/versioning","permalink":"/docs/versioning","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/versioning.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"frontMatter":{"slug":"/versioning"},"sidebar":"docs","previous":{"title":"Using multiple sidebars","permalink":"/docs/sidebar/multiple-sidebars"},"next":{"title":"Docs Multi-instance","permalink":"/docs/docs-multi-instance"}},{"id":"guides/markdown-features/admonitions","title":"Admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-admonitions.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/admonitions","permalink":"/docs/markdown-features/admonitions","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-admonitions.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"id":"admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","slug":"/markdown-features/admonitions"},"sidebar":"docs","previous":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"},"next":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"}},{"id":"guides/markdown-features/assets","title":"Assets","description":"Handling assets in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-assets.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/assets","permalink":"/docs/markdown-features/assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1678982558000,"frontMatter":{"id":"assets","description":"Handling assets in Docusaurus Markdown","slug":"/markdown-features/assets"},"sidebar":"docs","previous":{"title":"Headings and Table of contents","permalink":"/docs/markdown-features/toc"},"next":{"title":"Markdown links","permalink":"/docs/markdown-features/links"}},{"id":"guides/markdown-features/code-blocks","title":"Code blocks","description":"Handling code blocks in Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-code-blocks.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/code-blocks","permalink":"/docs/markdown-features/code-blocks","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-code-blocks.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"id":"code-blocks","description":"Handling code blocks in Docusaurus Markdown","slug":"/markdown-features/code-blocks"},"sidebar":"docs","previous":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"},"next":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"}},{"id":"guides/markdown-features/diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","source":"@site/docs/guides/markdown-features/markdown-features-diagrams.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/diagrams","permalink":"/docs/markdown-features/diagrams","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-diagrams.mdx","tags":[],"version":"current","lastUpdatedBy":"n4n5","lastUpdatedAt":1706891167000,"frontMatter":{"id":"diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","slug":"/markdown-features/diagrams"},"sidebar":"docs","previous":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"},"next":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"}},{"id":"guides/markdown-features/head-metadata","title":"Head metadata","description":"Declaring page-specific head metadata through MDX","source":"@site/docs/guides/markdown-features/markdown-features-head-metadata.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/head-metadata","permalink":"/docs/markdown-features/head-metadata","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-head-metadata.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{"id":"head-metadata","description":"Declaring page-specific head metadata through MDX","slug":"/markdown-features/head-metadata"},"sidebar":"docs","previous":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"},"next":{"title":"Styling and Layout","permalink":"/docs/styling-layout"}},{"id":"guides/markdown-features/introduction","title":"Markdown Features","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","source":"@site/docs/guides/markdown-features/markdown-features-intro.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features","permalink":"/docs/markdown-features","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1702691426000,"frontMatter":{"id":"introduction","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","slug":"/markdown-features"},"sidebar":"docs","previous":{"title":"Blog","permalink":"/docs/blog"},"next":{"title":"MDX and React","permalink":"/docs/markdown-features/react"}},{"id":"guides/markdown-features/links","title":"Markdown links","description":"Links to other pages in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-links.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/links","permalink":"/docs/markdown-features/links","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-links.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{"id":"links","description":"Links to other pages in Markdown","slug":"/markdown-features/links"},"sidebar":"docs","previous":{"title":"Assets","permalink":"/docs/markdown-features/assets"},"next":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"}},{"id":"guides/markdown-features/math-equations","title":"Math Equations","description":"Writing LaTeX Math Equations","source":"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/math-equations","permalink":"/docs/markdown-features/math-equations","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx","tags":[],"version":"current","lastUpdatedBy":"Arthur","lastUpdatedAt":1703247325000,"frontMatter":{"id":"math-equations","description":"Writing LaTeX Math Equations","slug":"/markdown-features/math-equations"},"sidebar":"docs","previous":{"title":"MDX Plugins","permalink":"/docs/markdown-features/plugins"},"next":{"title":"Diagrams","permalink":"/docs/markdown-features/diagrams"}},{"id":"guides/markdown-features/plugins","title":"MDX Plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","source":"@site/docs/guides/markdown-features/markdown-features-plugins.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/plugins","permalink":"/docs/markdown-features/plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"Bairui Su","lastUpdatedAt":1712850054000,"frontMatter":{"id":"plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","slug":"/markdown-features/plugins"},"sidebar":"docs","previous":{"title":"Markdown links","permalink":"/docs/markdown-features/links"},"next":{"title":"Math Equations","permalink":"/docs/markdown-features/math-equations"}},{"id":"guides/markdown-features/react","title":"MDX and React","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","source":"@site/docs/guides/markdown-features/markdown-features-react.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/react","permalink":"/docs/markdown-features/react","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx","tags":[],"version":"current","lastUpdatedBy":"Tatsunori Uchino","lastUpdatedAt":1700764684000,"frontMatter":{"id":"react","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","slug":"/markdown-features/react"},"sidebar":"docs","previous":{"title":"Markdown Features","permalink":"/docs/markdown-features"},"next":{"title":"Tabs","permalink":"/docs/markdown-features/tabs"}},{"id":"guides/markdown-features/tabs","title":"Tabs","description":"Using tabs inside Docusaurus Markdown","source":"@site/docs/guides/markdown-features/markdown-features-tabs.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/tabs","permalink":"/docs/markdown-features/tabs","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1682099337000,"frontMatter":{"id":"tabs","description":"Using tabs inside Docusaurus Markdown","slug":"/markdown-features/tabs"},"sidebar":"docs","previous":{"title":"MDX and React","permalink":"/docs/markdown-features/react"},"next":{"title":"Code blocks","permalink":"/docs/markdown-features/code-blocks"}},{"id":"guides/markdown-features/toc","title":"Headings and Table of contents","description":"Customizing headings and table-of-contents in Markdown","source":"@site/docs/guides/markdown-features/markdown-features-toc.mdx","sourceDirName":"guides/markdown-features","slug":"/markdown-features/toc","permalink":"/docs/markdown-features/toc","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"id":"toc","description":"Customizing headings and table-of-contents in Markdown","slug":"/markdown-features/toc"},"sidebar":"docs","previous":{"title":"Admonitions","permalink":"/docs/markdown-features/admonitions"},"next":{"title":"Assets","permalink":"/docs/markdown-features/assets"}},{"id":"guides/whats-next","title":"What\'s next?","description":"Congratulations! You have understood most core features of Docusaurus now. You have:","source":"@site/docs/guides/whats-next.mdx","sourceDirName":"guides","slug":"/guides/whats-next","permalink":"/docs/guides/whats-next","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"},"next":{"title":"Advanced Tutorials","permalink":"/docs/advanced/"}},{"id":"i18n/crowdin","title":"i18n - Using Crowdin","description":"The i18n system of Docusaurus is decoupled from any translation software.","source":"@site/docs/i18n/i18n-crowdin.mdx","sourceDirName":"i18n","slug":"/i18n/crowdin","permalink":"/docs/i18n/crowdin","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx","tags":[],"version":"current","lastUpdatedBy":"domeav","lastUpdatedAt":1702076503000,"frontMatter":{"id":"crowdin","slug":"/i18n/crowdin","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Using Git","permalink":"/docs/i18n/git"},"next":{"title":"What\'s next?","permalink":"/docs/guides/whats-next"}},{"id":"i18n/git","title":"i18n - Using git","description":"A possible translation strategy is to version control the translation files with Git (or any other VCS).","source":"@site/docs/i18n/i18n-git.mdx","sourceDirName":"i18n","slug":"/i18n/git","permalink":"/docs/i18n/git","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-git.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"id":"git","slug":"/i18n/git"},"sidebar":"docs","previous":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"},"next":{"title":"Using Crowdin","permalink":"/docs/i18n/crowdin"}},{"id":"i18n/introduction","title":"i18n - Introduction","description":"It is easy to translate a Docusaurus website with its internationalization (i18n) support.","source":"@site/docs/i18n/i18n-introduction.mdx","sourceDirName":"i18n","slug":"/i18n/introduction","permalink":"/docs/i18n/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672409308000,"frontMatter":{"id":"introduction","slug":"/i18n/introduction"},"sidebar":"docs","previous":{"title":"Deployment","permalink":"/docs/deployment"},"next":{"title":"Tutorial","permalink":"/docs/i18n/tutorial"}},{"id":"i18n/tutorial","title":"i18n - Tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","source":"@site/docs/i18n/i18n-tutorial.mdx","sourceDirName":"i18n","slug":"/i18n/tutorial","permalink":"/docs/i18n/tutorial","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-tutorial.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"frontMatter":{"id":"tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","slug":"/i18n/tutorial"},"sidebar":"docs","previous":{"title":"i18n - Introduction","permalink":"/docs/i18n/introduction"},"next":{"title":"Using Git","permalink":"/docs/i18n/git"}},{"id":"installation","title":"Installation","description":"How to install Docusaurus locally, and start a Docusaurus site in no time.","source":"@site/docs/installation.mdx","sourceDirName":".","slug":"/installation","permalink":"/docs/installation","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/installation.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1695912325000,"frontMatter":{"description":"How to install Docusaurus locally, and start a Docusaurus site in no time."},"sidebar":"docs","previous":{"title":"Getting Started","permalink":"/docs/category/getting-started"},"next":{"title":"Configuration","permalink":"/docs/configuration"}},{"id":"introduction","title":"Introduction","description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","source":"@site/docs/introduction.mdx","sourceDirName":".","slug":"/","permalink":"/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"Fafowora Sunkanmi","lastUpdatedAt":1711022705000,"frontMatter":{"description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","slug":"/"},"sidebar":"docs","next":{"title":"Getting Started","permalink":"/docs/category/getting-started"}},{"id":"migration/index","title":"Upgrading Docusaurus","description":"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.","source":"@site/docs/migration/index.mdx","sourceDirName":"migration","slug":"/migration","permalink":"/docs/migration","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx","tags":[],"version":"current","lastUpdatedBy":"Mikey O\'Toole","lastUpdatedAt":1713452696000,"frontMatter":{"slug":"/migration"},"sidebar":"docs","previous":{"title":"Client architecture","permalink":"/docs/advanced/client"},"next":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"}},{"id":"migration/v2/migration-automated","title":"Automated migration","description":"The migration CLI automatically migrates your v1 website to a v2 website.","source":"@site/docs/migration/v2/migration-automated.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/automated","permalink":"/docs/migration/v2/automated","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"frontMatter":{"slug":"/migration/v2/automated"},"sidebar":"docs","previous":{"title":"Overview","permalink":"/docs/migration/v2"},"next":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"}},{"id":"migration/v2/migration-manual","title":"Manual migration","description":"This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.","source":"@site/docs/migration/v2/migration-manual.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/manual","permalink":"/docs/migration/v2/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-manual.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{"slug":"/migration/v2/manual","toc_max_heading_level":4},"sidebar":"docs","previous":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"},"next":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-overview","title":"Overview","description":"This doc guides you through migrating an existing Docusaurus 1 site to Docusaurus 2.","source":"@site/docs/migration/v2/migration-overview.mdx","sourceDirName":"migration/v2","slug":"/migration/v2","permalink":"/docs/migration/v2","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-overview.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{"slug":"/migration/v2"},"sidebar":"docs","previous":{"title":"To Docusaurus v3","permalink":"/docs/migration/v3"},"next":{"title":"Automated migration","permalink":"/docs/migration/v2/automated"}},{"id":"migration/v2/migration-translated-sites","title":"Translated sites","description":"This page explains how migrate a translated Docusaurus v1 site to Docusaurus v2.","source":"@site/docs/migration/v2/migration-translated-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/translated-sites","permalink":"/docs/migration/v2/translated-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-translated-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{"slug":"/migration/v2/translated-sites"},"sidebar":"docs","previous":{"title":"Versioned sites","permalink":"/docs/migration/v2/versioned-sites"}},{"id":"migration/v2/migration-versioned-sites","title":"Versioned sites","description":"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1\'s approach.","source":"@site/docs/migration/v2/migration-versioned-sites.mdx","sourceDirName":"migration/v2","slug":"/migration/v2/versioned-sites","permalink":"/docs/migration/v2/versioned-sites","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1697737112000,"frontMatter":{"slug":"/migration/v2/versioned-sites"},"sidebar":"docs","previous":{"title":"Manual migration","permalink":"/docs/migration/v2/manual"},"next":{"title":"Translated sites","permalink":"/docs/migration/v2/translated-sites"}},{"id":"migration/v3","title":"Upgrading to Docusaurus v3","description":"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.","source":"@site/docs/migration/v3.mdx","sourceDirName":"migration","slug":"/migration/v3","permalink":"/docs/migration/v3","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx","tags":[],"version":"current","lastUpdatedBy":"Zed Spencer-Milnes","lastUpdatedAt":1710954485000,"frontMatter":{"slug":"/migration/v3","sidebar_label":"To Docusaurus v3"},"sidebar":"docs","previous":{"title":"Upgrading Docusaurus","permalink":"/docs/migration"},"next":{"title":"Overview","permalink":"/docs/migration/v2"}},{"id":"playground","title":"Playground","description":"Playgrounds allow you to run Docusaurus in your browser, without installing anything!","source":"@site/docs/playground.mdx","sourceDirName":".","slug":"/playground","permalink":"/docs/playground","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1627493278000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/configuration"},"next":{"title":"TypeScript Support","permalink":"/docs/typescript-support"}},{"id":"search","title":"Search","description":"There are a few options you can use to add search to your website:","source":"@site/docs/search.mdx","sourceDirName":".","slug":"/search","permalink":"/docs/search","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx","tags":[],"version":"current","lastUpdatedBy":"Virgil993","lastUpdatedAt":1713448824000,"frontMatter":{"keywords":["algolia","search"]},"sidebar":"docs","previous":{"title":"Static Assets","permalink":"/docs/static-assets"},"next":{"title":"Browser support","permalink":"/docs/browser-support"}},{"id":"seo","title":"Search engine optimization (SEO)","description":"How to make your Docusaurus site maximally search-engine-friendly.","source":"@site/docs/seo.mdx","sourceDirName":".","slug":"/seo","permalink":"/docs/seo","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/seo.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1712242522000,"frontMatter":{"description":"How to make your Docusaurus site maximally search-engine-friendly.","sidebar_label":"SEO","keywords":["seo","positioning"]},"sidebar":"docs","previous":{"title":"Browser support","permalink":"/docs/browser-support"},"next":{"title":"Using Plugins","permalink":"/docs/using-plugins"}},{"id":"static-assets","title":"Static Assets","description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are.","source":"@site/docs/static-assets.mdx","sourceDirName":".","slug":"/static-assets","permalink":"/docs/static-assets","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/static-assets.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are."},"sidebar":"docs","previous":{"title":"Swizzling","permalink":"/docs/swizzling"},"next":{"title":"Search","permalink":"/docs/search"}},{"id":"styling-layout","title":"Styling and Layout","description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.","source":"@site/docs/styling-layout.mdx","sourceDirName":".","slug":"/styling-layout","permalink":"/docs/styling-layout","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx","tags":[],"version":"current","lastUpdatedBy":"Alberto Vilches","lastUpdatedAt":1706785433000,"frontMatter":{"description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},"sidebar":"docs","previous":{"title":"Head metadata","permalink":"/docs/markdown-features/head-metadata"},"next":{"title":"Swizzling","permalink":"/docs/swizzling"}},{"id":"swizzling","title":"Swizzling","description":"Customize your site\'s appearance through creating your own theme components","source":"@site/docs/swizzling.mdx","sourceDirName":".","slug":"/swizzling","permalink":"/docs/swizzling","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/swizzling.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"frontMatter":{"description":"Customize your site\'s appearance through creating your own theme components"},"sidebar":"docs","previous":{"title":"Styling and Layout","permalink":"/docs/styling-layout"},"next":{"title":"Static Assets","permalink":"/docs/static-assets"}},{"id":"typescript-support","title":"TypeScript Support","description":"Docusaurus is written in TypeScript and provides first-class TypeScript support.","source":"@site/docs/typescript-support.mdx","sourceDirName":".","slug":"/typescript-support","permalink":"/docs/typescript-support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/typescript-support.mdx","tags":[],"version":"current","lastUpdatedBy":"Chongyi Zheng","lastUpdatedAt":1697244363000,"frontMatter":{"description":"Docusaurus is written in TypeScript and provides first-class TypeScript support."},"sidebar":"docs","previous":{"title":"Playground","permalink":"/docs/playground"},"next":{"title":"Guides","permalink":"/docs/category/guides"}},{"id":"using-plugins","title":"Using Plugins","description":"The Docusaurus core doesn\'t provide any feature of its own. All features are delegated to individual plugins: the docs feature provided by the docs plugin; the blog feature provided by the blog plugin; or individual pages provided by the pages plugin. If there are no plugins installed, the site won\'t contain any routes.","source":"@site/docs/using-plugins.mdx","sourceDirName":".","slug":"/using-plugins","permalink":"/docs/using-plugins","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/docs/using-plugins.mdx","tags":[],"version":"current","lastUpdatedBy":"ozaki","lastUpdatedAt":1704369380000,"frontMatter":{},"sidebar":"docs","previous":{"title":"SEO","permalink":"/docs/seo"},"next":{"title":"Deployment","permalink":"/docs/deployment"}}],"drafts":[],"sidebars":{"docs":[{"type":"doc","id":"introduction"},{"type":"category","label":"Getting Started","link":{"type":"generated-index","slug":"/category/getting-started","permalink":"/docs/category/getting-started"},"collapsed":false,"items":[{"type":"doc","id":"installation"},{"type":"doc","id":"configuration"},{"type":"doc","id":"playground"},{"type":"doc","id":"typescript-support"}],"collapsible":true},{"type":"category","label":"Guides","link":{"type":"generated-index","title":"Docusaurus Guides","description":"Let\'s learn about the most important Docusaurus concepts!","keywords":["guides"],"image":"/img/docusaurus.png","slug":"/category/guides","permalink":"/docs/category/guides"},"items":[{"type":"doc","id":"guides/creating-pages"},{"type":"category","label":"Docs","link":{"type":"doc","id":"guides/docs/introduction"},"items":[{"type":"doc","id":"guides/docs/create-doc"},{"type":"category","label":"Sidebar","link":{"type":"doc","id":"guides/docs/sidebar/index"},"items":[{"type":"doc","id":"guides/docs/sidebar/items"},{"type":"doc","id":"guides/docs/sidebar/autogenerated"},{"type":"doc","id":"guides/docs/sidebar/multiple-sidebars"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/docs/versioning"},{"type":"doc","id":"guides/docs/multi-instance"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"blog"},{"type":"category","label":"Markdown Features","link":{"type":"doc","id":"guides/markdown-features/introduction"},"items":[{"type":"doc","id":"guides/markdown-features/react"},{"type":"doc","id":"guides/markdown-features/tabs"},{"type":"doc","id":"guides/markdown-features/code-blocks"},{"type":"doc","id":"guides/markdown-features/admonitions"},{"type":"doc","id":"guides/markdown-features/toc"},{"type":"doc","id":"guides/markdown-features/assets"},{"type":"doc","id":"guides/markdown-features/links"},{"type":"doc","id":"guides/markdown-features/plugins"},{"type":"doc","id":"guides/markdown-features/math-equations"},{"type":"doc","id":"guides/markdown-features/diagrams"},{"type":"doc","id":"guides/markdown-features/head-metadata"}],"collapsed":true,"collapsible":true},{"type":"doc","id":"styling-layout"},{"type":"doc","id":"swizzling"},{"type":"doc","id":"static-assets"},{"type":"doc","id":"search"},{"type":"doc","id":"browser-support"},{"type":"doc","id":"seo"},{"type":"doc","id":"using-plugins"},{"type":"doc","id":"deployment"},{"type":"category","label":"Internationalization","link":{"type":"doc","id":"i18n/introduction"},"items":[{"type":"doc","id":"i18n/tutorial","label":"Tutorial","translatable":true},{"type":"doc","id":"i18n/git","label":"Using Git","translatable":true},{"type":"doc","id":"i18n/crowdin","label":"Using Crowdin","translatable":true}],"collapsed":true,"collapsible":true},{"type":"doc","id":"guides/whats-next"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Advanced Guides","link":{"type":"doc","id":"advanced/index"},"items":[{"type":"doc","id":"advanced/architecture"},{"type":"doc","id":"advanced/plugins"},{"type":"doc","id":"advanced/routing"},{"type":"doc","id":"advanced/ssg"},{"type":"doc","id":"advanced/client"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Upgrading","link":{"type":"doc","id":"migration/index"},"items":[{"type":"doc","id":"migration/v3"},{"type":"category","label":"To Docusaurus v2","items":[{"type":"doc","id":"migration/v2/migration-overview"},{"type":"doc","id":"migration/v2/migration-automated"},{"type":"doc","id":"migration/v2/migration-manual"},{"type":"doc","id":"migration/v2/migration-versioned-sites"},{"type":"doc","id":"migration/v2/migration-translated-sites"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"api":[{"type":"doc","id":"cli"},{"type":"doc","id":"docusaurus-core"},{"type":"doc","id":"api/docusaurus.config.js"},{"type":"category","label":"Plugin method references","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugin-methods/lifecycle-apis"},{"type":"doc","id":"api/plugin-methods/extend-infrastructure"},{"type":"doc","id":"api/plugin-methods/i18n-lifecycles"},{"type":"doc","id":"api/plugin-methods/static-methods"}],"link":{"type":"doc","id":"api/plugin-methods/README"}},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/plugins/plugin-content-docs"},{"type":"doc","id":"api/plugins/plugin-content-blog"},{"type":"doc","id":"api/plugins/plugin-content-pages"},{"type":"doc","id":"api/plugins/plugin-client-redirects"},{"type":"doc","id":"api/plugins/plugin-debug"},{"type":"doc","id":"api/plugins/plugin-google-analytics"},{"type":"doc","id":"api/plugins/plugin-google-gtag"},{"type":"doc","id":"api/plugins/plugin-google-tag-manager"},{"type":"doc","id":"api/plugins/plugin-ideal-image"},{"type":"doc","id":"api/plugins/plugin-pwa"},{"type":"doc","id":"api/plugins/plugin-sitemap"},{"type":"doc","id":"api/plugins/plugin-vercel-analytics"}],"link":{"type":"doc","id":"api/plugins/plugins-overview"}},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/themes/theme-configuration","label":"Configuration"},{"type":"doc","id":"api/themes/theme-classic"},{"type":"doc","id":"api/themes/theme-live-codeblock"},{"type":"doc","id":"api/themes/theme-search-algolia"},{"type":"doc","id":"api/themes/theme-mermaid"}],"link":{"type":"doc","id":"api/themes/themes-overview"}},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/create-docusaurus"},{"type":"category","label":"\ud83d\udce6 eslint-plugin","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"api/misc/eslint-plugin/no-html-links"},{"type":"doc","id":"api/misc/eslint-plugin/no-untranslated-text"},{"type":"doc","id":"api/misc/eslint-plugin/prefer-docusaurus-heading"},{"type":"doc","id":"api/misc/eslint-plugin/string-literal-i18n-messages"}],"link":{"type":"doc","id":"api/misc/eslint-plugin/README"}},{"type":"doc","label":"\ud83d\udce6 logger","id":"api/misc/logger/logger"}]}]}}]},"community":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","path":"/community","tagsPath":"/community/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/sidebarsCommunity.js","contentPath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/community","contentPathLocalized":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-community/current","docs":[{"id":"canary","title":"Canary releases","description":"Docusaurus has a canary releases system.","source":"@site/community/4-canary.mdx","sourceDirName":".","slug":"/canary","permalink":"/community/canary","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"sidebarPosition":4,"frontMatter":{},"sidebar":"community","previous":{"title":"Contributing","permalink":"/community/contributing"},"next":{"title":"Release process","permalink":"/community/release-process"}},{"id":"contributing","title":"Contributing","description":"","source":"@site/community/3-contributing.mdx","sourceDirName":".","slug":"/contributing","permalink":"/community/contributing","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx","tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"sidebarPosition":3,"frontMatter":{"title":"Contributing","hide_title":true,"sidebar_label":"Contributing"},"sidebar":"community","previous":{"title":"Awesome Resources","permalink":"/community/resources"},"next":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"release-process","title":"Release process","description":"Let\'s see how Docusaurus handles versioning, releases and breaking changes.","source":"@site/community/5-release-process.mdx","sourceDirName":".","slug":"/release-process","permalink":"/community/release-process","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694767701000,"sidebarPosition":5,"frontMatter":{},"sidebar":"community","previous":{"title":"Canary releases","permalink":"/community/canary"}},{"id":"resources","title":"Awesome Resources","description":"A curated list of interesting Docusaurus community projects.","source":"@site/community/2-resources.mdx","sourceDirName":".","slug":"/resources","permalink":"/community/resources","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx","tags":[],"version":"current","lastUpdatedBy":"Daniel Li","lastUpdatedAt":1712835926000,"sidebarPosition":2,"frontMatter":{},"sidebar":"community","previous":{"title":"Team","permalink":"/community/team"},"next":{"title":"Contributing","permalink":"/community/contributing"}},{"id":"support","title":"Support","description":"Docusaurus has a community of thousands of developers.","source":"@site/community/0-support.mdx","sourceDirName":".","slug":"/support","permalink":"/community/support","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"sidebarPosition":0,"frontMatter":{},"sidebar":"community","next":{"title":"Team","permalink":"/community/team"}},{"id":"team","title":"Team","description":"Active Team","source":"@site/community/1-team.mdx","sourceDirName":".","slug":"/team","permalink":"/community/team","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx","tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1618496411000,"sidebarPosition":1,"frontMatter":{},"sidebar":"community","previous":{"title":"Support","permalink":"/community/support"},"next":{"title":"Awesome Resources","permalink":"/community/resources"}}],"drafts":[],"sidebars":{"community":[{"type":"doc","id":"support"},{"type":"doc","id":"team"},{"type":"doc","id":"resources"},{"type":"doc","id":"contributing","label":"Contributing"},{"type":"doc","id":"canary"},{"type":"doc","id":"release-process"},{"type":"link","href":"/changelog","label":"Changelog"},{"type":"link","href":"/showcase","label":"Showcase"},{"type":"link","href":"/feature-requests","label":"Feature Requests"},{"type":"link","label":"Chat with us on Discord","href":"https://discord.gg/docusaurus"}]}}]},"docs-tests":{"loadedVersions":[{"versionName":"current","label":"Next","banner":null,"badge":false,"noIndex":true,"className":"docs-version-current","path":"/tests/docs","tagsPath":"/tests/docs/tags","isLast":true,"routePriority":-1,"sidebarFilePath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/docs-tests-sidebars.js","contentPath":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/_dogfooding/_docs tests","contentPathLocalized":"/Users/sebastienlorber/Desktop/projects/docusaurus/website/i18n/en/docusaurus-plugin-content-docs-docs-tests/current","docs":[{"id":"beginner\'s guide","title":"Beginner\'s guide","description":"#9160","source":"@site/_dogfooding/_docs tests/beginner\'s guide.mdx","sourceDirName":".","slug":"/beginner\'s guide","permalink":"/tests/docs/beginner\'s guide","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Joshua Chen","lastUpdatedAt":1689945370000,"frontMatter":{}},{"id":"doc-with-another-sidebar","title":"Doc with another sidebar","description":"My link appears in a sidebar, but I want to display another sidebar...","source":"@site/_dogfooding/_docs tests/doc-with-another-sidebar.mdx","sourceDirName":".","slug":"/doc-with-another-sidebar","permalink":"/tests/docs/doc-with-another-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"displayed_sidebar":"anotherSidebar"},"sidebar":"anotherSidebar"},{"id":"doc-with-last-update","title":"Doc With Last Update Front Matter","description":"","source":"@site/_dogfooding/_docs tests/doc-with-last-update.mdx","sourceDirName":".","slug":"/doc-with-last-update","permalink":"/tests/docs/doc-with-last-update","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"custom author","lastUpdatedAt":946681200000,"frontMatter":{"last_update":{"author":"custom author","date":"1/1/2000"}},"sidebar":"sidebar","previous":{"title":"Doc with another sidebar","permalink":"/tests/docs/doc-with-another-sidebar"},"next":{"title":"Tests","permalink":"/tests/docs/category/tests"}},{"id":"doc-without-sidebar","title":"Doc without sidebar","description":"My link appears in a sidebar, but I don\'t want to display that...","source":"@site/_dogfooding/_docs tests/doc-without-sidebar.mdx","sourceDirName":".","slug":"/doc-without-sidebar","permalink":"/tests/docs/doc-without-sidebar","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"displayed_sidebar":null}},{"id":"dummy","title":"Just a dummy page","description":"","source":"@site/_dogfooding/_docs tests/dummy.mdx","sourceDirName":".","slug":"/dummy.html","permalink":"/tests/docs/dummy.html","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"slug":"dummy.html"},"sidebar":"anotherSidebar"},{"id":"folder with space/doc 1","title":"Doc 1","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 1.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 1","permalink":"/tests/docs/folder with space/doc 1","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{}},{"id":"folder with space/doc 2","title":"Doc 2","description":"Inside folder with space","source":"@site/_dogfooding/_docs tests/folder with space/doc 2.mdx","sourceDirName":"folder with space","slug":"/folder with space/doc 2","permalink":"/tests/docs/folder with space/doc 2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{}},{"id":"index","title":"Docs tests","description":"This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don\'t really cover.","source":"@site/_dogfooding/_docs tests/index.mdx","sourceDirName":".","slug":"/","permalink":"/tests/docs/","draft":false,"unlisted":true,"tags":[{"label":"a","permalink":"/tests/docs/tags/a"},{"label":"b","permalink":"/tests/docs/tags/b"},{"label":"c","permalink":"/tests/docs/tags/c"},{"label":"some tag","permalink":"/tests/docs/tags/some-tag"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"slug":"/","tags":["a","b","c","some tag"],"unlisted":true,"id":"index","sidebar_label":"Docs tests"},"sidebar":"sidebar"},{"id":"more-test","title":"Another test page","description":"Test link","source":"@site/_dogfooding/_docs tests/more-test.mdx","sourceDirName":".","slug":"/more-test","permalink":"/tests/docs/more-test","draft":false,"unlisted":false,"tags":[{"label":"a","permalink":"/tests/docs/tags/a"},{"label":"e","permalink":"/tests/docs/tags/e"},{"label":"some-tag","permalink":"/tests/docs/tags/some-tag"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"tags":["a","e","some-tag","some_tag"]},"sidebar":"sidebar","previous":{"title":"Another category with index","permalink":"/tests/docs/category/another-category-with-index"},"next":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"}},{"id":"standalone","title":"Standalone doc","description":"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar","source":"@site/_dogfooding/_docs tests/standalone.mdx","sourceDirName":".","slug":"/standalone","permalink":"/tests/docs/standalone","draft":false,"unlisted":false,"tags":[{"label":"b","permalink":"/tests/docs/tags/b"},{"label":"d","permalink":"/tests/docs/tags/d-custom-permalink"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"tags":["b",{"label":"d","permalink":"d-custom-permalink"}]}},{"id":"tests/admonitions","title":"Admonitions tests","description":"Empty content","source":"@site/_dogfooding/_docs tests/tests/admonitions.mdx","sourceDirName":"tests","slug":"/tests/admonitions","permalink":"/tests/docs/tests/admonitions","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1700596174000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Case-Sensitive doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc"},"next":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},{"id":"tests/ascii/\xe6\xf8\xe5/index","title":"index","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/\xe6\xf8\xe5/index.mdx","sourceDirName":"tests/ascii/\xe6\xf8\xe5","slug":"/tests/ascii/\xe6\xf8\xe5/","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"},"next":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"}},{"id":"tests/ascii/folder/\xe6\xf8\xe5","title":"\xe6\xf8\xe5","description":"Dogfood test for https://github.com/facebook/docusaurus/pull/8137","source":"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx","sourceDirName":"tests/ascii/folder","slug":"/tests/ascii/folder/\xe6\xf8\xe5","permalink":"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"},"next":{"title":"index","permalink":"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},{"id":"tests/Case-Sentitive-Doc","title":"Case-Sensitive doc","description":"This doc has uppercase and lowercase chars in its filename, and thus in its path / slug.","source":"@site/_dogfooding/_docs tests/tests/Case-Sentitive-Doc.mdx","sourceDirName":"tests","slug":"/tests/Case-Sentitive-Doc","permalink":"/tests/docs/tests/Case-Sentitive-Doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Tests","permalink":"/tests/docs/category/tests"},"next":{"title":"Admonitions tests","permalink":"/tests/docs/tests/admonitions"}},{"id":"tests/category-links/custom-index-convention/intro","title":"Introduction","description":"This file is called intro.md. Typically, it won\'t be selected by the convention; however, it is in this case, because we have used a custom one.","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/intro","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category Links","permalink":"/tests/docs/category-links-generated-index-slug"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},{"id":"tests/category-links/custom-index-convention/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/sample-doc.mdx","sourceDirName":"tests/category-links/custom-index-convention","slug":"/tests/category-links/custom-index-convention/sample-doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Introduction","permalink":"/tests/docs/tests/category-links/custom-index-convention/intro"},"next":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"}},{"id":"tests/category-links/no-index-doc/index","title":"Index","description":"This file (index.md) is supposed to be a category index, but it isn\'t because we have set link: null in the category.json.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/index.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/","permalink":"/tests/docs/tests/category-links/no-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/custom-index-convention/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"}},{"id":"tests/category-links/no-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/no-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/no-index-doc","slug":"/tests/category-links/no-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Index","permalink":"/tests/docs/tests/category-links/no-index-doc/"},"next":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"}},{"id":"tests/category-links/no-subdoc/index","title":"No sub-docs","description":"The only doc of this category is the index page. It should show up as a regular doc link.","source":"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx","sourceDirName":"tests/category-links/no-subdoc","slug":"/tests/category-links/no-subdoc/","permalink":"/tests/docs/tests/category-links/no-subdoc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/no-index-doc/sample-doc"},"next":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"}},{"id":"tests/category-links/readme","title":"Readme","description":"This readme.md should not be used as the category index due to the category.json link","source":"@site/_dogfooding/_docs tests/tests/category-links/readme.mdx","sourceDirName":"tests/category-links","slug":"/tests/category-links/","permalink":"/tests/docs/tests/category-links/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"No sub-docs","permalink":"/tests/docs/tests/category-links/no-subdoc/"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"}},{"id":"tests/category-links/regular-category/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/regular-category/sample-doc.mdx","sourceDirName":"tests/category-links/regular-category","slug":"/tests/category-links/regular-category/sample-doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Readme","permalink":"/tests/docs/tests/category-links/"},"next":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"}},{"id":"tests/category-links/with-category-name-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with a doc of category\'s name","permalink":"/tests/docs/tests/category-links/with-category-name-doc/"},"next":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"}},{"id":"tests/category-links/with-category-name-doc/with-category-name-doc","title":"Category with a doc of category\'s name","description":"You should be able to click on the category and browse this /.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx","sourceDirName":"tests/category-links/with-category-name-doc","slug":"/tests/category-links/with-category-name-doc/","permalink":"/tests/docs/tests/category-links/with-category-name-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/regular-category/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/index","title":"Category with index.md doc","description":"You should be able to click on the category and browse this index.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/index.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/","permalink":"/tests/docs/tests/category-links/with-index-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"}},{"id":"tests/category-links/with-index-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-index-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-index-doc","slug":"/tests/category-links/with-index-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with index.md doc","permalink":"/tests/docs/tests/category-links/with-index-doc/"},"next":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"}},{"id":"tests/category-links/with-readme-doc/README","title":"Category with readme.md doc","description":"You should be able to click on the category and browse this readme.md doc","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/README.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/","permalink":"/tests/docs/tests/category-links/with-readme-doc/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-index-doc/sample-doc"},"next":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"}},{"id":"tests/category-links/with-readme-doc/sample-doc","title":"Sample doc","description":"Lorem Ipsum","source":"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx","sourceDirName":"tests/category-links/with-readme-doc","slug":"/tests/category-links/with-readme-doc/sample-doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Category with readme.md doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/"},"next":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"}},{"id":"tests/custom-props/doc-with-custom-props","title":"Doc with Custom Props","description":"This doc has custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-with-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-with-custom-props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"sidebar_custom_props":{"prop":"custom","number":1,"boolean":true}},"sidebar":"sidebar","previous":{"title":"Custom Props","permalink":"/tests/docs/tests/custom-props/"},"next":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"}},{"id":"tests/custom-props/doc-without-custom-props","title":"Doc Without Custom Props","description":"This doc doesn\'t have custom props.","source":"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/doc-without-custom-props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"},"next":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"}},{"id":"tests/custom-props/index","title":"Custom Props","description":"","source":"@site/_dogfooding/_docs tests/tests/custom-props/index.mdx","sourceDirName":"tests/custom-props","slug":"/tests/custom-props/","permalink":"/tests/docs/tests/custom-props/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1686246015000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Sample doc","permalink":"/tests/docs/tests/category-links/with-readme-doc/sample-doc"},"next":{"title":"Doc with Custom Props","permalink":"/tests/docs/tests/custom-props/doc-with-custom-props"}},{"id":"tests/img-tests","title":"Image tests","description":"URL encoded image","source":"@site/_dogfooding/_docs tests/tests/img-tests.mdx","sourceDirName":"tests","slug":"/tests/img-tests","permalink":"/tests/docs/tests/img-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Joshua Chen","lastUpdatedAt":1646219693000,"frontMatter":{"image":"./img/oss_logo.png"},"sidebar":"sidebar","previous":{"title":"Doc Without Custom Props","permalink":"/tests/docs/tests/custom-props/doc-without-custom-props"},"next":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"}},{"id":"tests/links/broken-anchors-tests","title":"Broken Anchors tests","description":"Markdown link to above anchor","source":"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx","sourceDirName":"tests/links","slug":"/tests/links/broken-anchors-tests","permalink":"/tests/docs/tests/links/broken-anchors-tests","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1705072185000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Image tests","permalink":"/tests/docs/tests/img-tests"},"next":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"}},{"id":"tests/toc-partials/index","title":"TOC partial test","description":"This page tests that MDX-imported content appears correctly in the table-of-contents","source":"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx","sourceDirName":"tests/toc-partials","slug":"/tests/toc-partials/","permalink":"/tests/docs/tests/toc-partials/","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"Broken Anchors tests","permalink":"/tests/docs/tests/links/broken-anchors-tests"},"next":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"}},{"id":"tests/visibility/force-unlisted","title":"force_unlisted_parseFrontMatter_test","description":"This doc is hidden despite unlisted: false","source":"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/force-unlisted","permalink":"/tests/docs/tests/visibility/force-unlisted","draft":false,"unlisted":true,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1702691426000,"frontMatter":{"unlisted":true,"force_unlisted_parseFrontMatter_test":true},"sidebar":"sidebar"},{"id":"tests/visibility/index","title":"Visibility","description":"A category to play with draft/unlisted front matter.","source":"@site/_dogfooding/_docs tests/tests/visibility/index.mdx","sourceDirName":"tests/visibility","slug":"/tests/visibility/","permalink":"/tests/docs/tests/visibility/","draft":false,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1702691426000,"frontMatter":{"tags":["visibility"]},"sidebar":"sidebar","previous":{"title":"TOC partial test","permalink":"/tests/docs/tests/toc-partials/"},"next":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"}},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/index","title":"Only Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","title":"Only Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/only-unlisteds/unlisted-subcategory","slug":"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted1","title":"Only Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/only-unlisteds/unlisted2","title":"Only Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/only-unlisteds","slug":"/tests/visibility/only-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/only-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-drafts/draft-subcategory/listed1","title":"Some Drafts - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Visibility","permalink":"/tests/docs/tests/visibility/"},"next":{"title":"Some Unlisteds - Listed 1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/index","title":"Some Unlisteds - Subcategory index unlisted","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1","title":"Some Unlisteds - Listed 1","description":"Regular doc","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1","draft":false,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"listed","permalink":"/tests/docs/tags/listed"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"tags":["visibility","listed"]},"sidebar":"sidebar","previous":{"title":"Some Drafts - Listed 1","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"},"next":{"title":"Sidebar item description tests","permalink":"/tests/docs/category/sidebar-item-description-tests"}},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","title":"Some Unlisteds - Unlisted 3","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.mdx","sourceDirName":"tests/visibility/some-unlisteds/unlisted-subcategory","slug":"/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted1","title":"Some Unlisteds - Unlisted 1","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted1","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted1","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"tests/visibility/some-unlisteds/unlisted2","title":"Some Unlisteds - Unlisted 2","description":"Doc with unlisted front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted2.mdx","sourceDirName":"tests/visibility/some-unlisteds","slug":"/tests/visibility/some-unlisteds/unlisted2","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted2","draft":false,"unlisted":true,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"unlisted","permalink":"/tests/docs/tags/unlisted"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"unlisted":true,"tags":["visibility","unlisted"]},"sidebar":"sidebar"},{"id":"toc/toc-_-_","title":"toc-_-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-_.mdx","sourceDirName":"toc","slug":"/toc/toc-_-_","permalink":"/tests/docs/toc/toc-_-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{},"sidebar":"sidebar","previous":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"},"next":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}},{"id":"toc/toc-_-5","title":"toc-_-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-_-5.mdx","sourceDirName":"toc","slug":"/toc/toc-_-5","permalink":"/tests/docs/toc/toc-_-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"},"next":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"}},{"id":"toc/toc-2-2","title":"toc-2-2","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx","sourceDirName":"toc","slug":"/toc/toc-2-2","permalink":"/tests/docs/toc/toc-2-2","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":2},"sidebar":"sidebar","previous":{"title":"Another test page","permalink":"/tests/docs/more-test"},"next":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"}},{"id":"toc/toc-2-3","title":"toc-2-3","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-3.mdx","sourceDirName":"toc","slug":"/toc/toc-2-3","permalink":"/tests/docs/toc/toc-2-3","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-2-2","permalink":"/tests/docs/toc/toc-2-2"},"next":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"}},{"id":"toc/toc-2-4","title":"toc-2-4","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx","sourceDirName":"toc","slug":"/toc/toc-2-4","permalink":"/tests/docs/toc/toc-2-4","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"sidebar":"sidebar","previous":{"title":"toc-2-3","permalink":"/tests/docs/toc/toc-2-3"},"next":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"}},{"id":"toc/toc-2-5","title":"toc-2-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-2-5.mdx","sourceDirName":"toc","slug":"/toc/toc-2-5","permalink":"/tests/docs/toc/toc-2-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-4","permalink":"/tests/docs/toc/toc-2-4"},"next":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"}},{"id":"toc/toc-3-_","title":"toc-3-_","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-_.mdx","sourceDirName":"toc","slug":"/toc/toc-3-_","permalink":"/tests/docs/toc/toc-3-_","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":3},"sidebar":"sidebar","previous":{"title":"toc-3-5","permalink":"/tests/docs/toc/toc-3-5"},"next":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"}},{"id":"toc/toc-3-5","title":"toc-3-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-3-5.mdx","sourceDirName":"toc","slug":"/toc/toc-3-5","permalink":"/tests/docs/toc/toc-3-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":3,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-2-5","permalink":"/tests/docs/toc/toc-2-5"},"next":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"}},{"id":"toc/toc-4-5","title":"toc-4-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx","sourceDirName":"toc","slug":"/toc/toc-4-5","permalink":"/tests/docs/toc/toc-4-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":4,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-3-_","permalink":"/tests/docs/toc/toc-3-_"},"next":{"title":"toc-5-5","permalink":"/tests/docs/toc/toc-5-5"}},{"id":"toc/toc-5-5","title":"toc-5-5","description":"","source":"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx","sourceDirName":"toc","slug":"/toc/toc-5-5","permalink":"/tests/docs/toc/toc-5-5","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"frontMatter":{"toc_min_heading_level":5,"toc_max_heading_level":5},"sidebar":"sidebar","previous":{"title":"toc-4-5","permalink":"/tests/docs/toc/toc-4-5"},"next":{"title":"toc-_-5","permalink":"/tests/docs/toc/toc-_-5"}},{"id":"toc/toc-test-bad","title":"toc-test-bad","description":"Test the TOC behavior of a real-world MD doc with invalid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-bad.mdx","sourceDirName":"toc","slug":"/toc/toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Joshua Chen","lastUpdatedAt":1655269473000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-_-_","permalink":"/tests/docs/toc/toc-_-_"},"next":{"title":"toc-test-good","permalink":"/tests/docs/toc/toc-test-good"}},{"id":"toc/toc-test-good","title":"toc-test-good","description":"Test the TOC behavior of a real-world MD doc with valid headings","source":"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx","sourceDirName":"toc","slug":"/toc/toc-test-good","permalink":"/tests/docs/toc/toc-test-good","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"Joshua Chen","lastUpdatedAt":1655269473000,"frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":6},"sidebar":"sidebar","previous":{"title":"toc-test-bad","permalink":"/tests/docs/toc/toc-test-bad"}}],"drafts":[{"id":"tests/another-draft","title":"Another Draft","description":"This page should only be visible in local development","source":"@site/_dogfooding/_docs tests/tests/another-draft.mdx","sourceDirName":"tests","slug":"/tests/another-draft","permalink":"/tests/docs/tests/another-draft","draft":true,"unlisted":false,"tags":[],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true}},{"id":"tests/visibility/only-drafts/draft1","title":"Only Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft1.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft1","permalink":"/tests/docs/tests/visibility/only-drafts/draft1","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft2","title":"Only Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft2.mdx","sourceDirName":"tests/visibility/only-drafts","slug":"/tests/visibility/only-drafts/draft2","permalink":"/tests/docs/tests/visibility/only-drafts/draft2","draft":true,"unlisted":false,"tags":[{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["draft"]}},{"id":"tests/visibility/some-drafts/draft1","title":"Some Drafts - Draft 1","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft1.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft1","permalink":"/tests/docs/tests/visibility/some-drafts/draft1","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft2","title":"Some Drafts - Draft 2","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft2.mdx","sourceDirName":"tests/visibility/some-drafts","slug":"/tests/visibility/some-drafts/draft2","permalink":"/tests/docs/tests/visibility/some-drafts/draft2","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/draft3","title":"Only Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/only-drafts/draft-subcategory/index","title":"Only Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/only-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/only-drafts/draft-subcategory","slug":"/tests/visibility/only-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/only-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/draft3","title":"Some Drafts - Draft 3","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/draft3.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/draft3","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/draft3","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}},{"id":"tests/visibility/some-drafts/draft-subcategory/index","title":"Some Drafts - Subcategory index draft","description":"Doc with draft front matter","source":"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/index.mdx","sourceDirName":"tests/visibility/some-drafts/draft-subcategory","slug":"/tests/visibility/some-drafts/draft-subcategory/","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/","draft":true,"unlisted":false,"tags":[{"label":"visibility","permalink":"/tests/docs/tags/visibility"},{"label":"draft","permalink":"/tests/docs/tags/draft"}],"version":"current","lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"frontMatter":{"draft":true,"tags":["visibility","draft"]}}],"sidebars":{"sidebar":[{"type":"doc","id":"index","className":"red","label":"Index","translatable":true},{"type":"doc","id":"doc-without-sidebar"},{"type":"doc","id":"doc-with-another-sidebar"},{"type":"doc","id":"doc-with-last-update"},{"type":"category","label":"Tests","link":{"type":"generated-index","slug":"/category/tests","permalink":"/tests/docs/category/tests"},"items":[{"type":"doc","id":"tests/Case-Sentitive-Doc"},{"type":"doc","id":"tests/admonitions"},{"type":"category","label":"ascii","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"folder","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/ascii/folder/\xe6\xf8\xe5"}]},{"type":"doc","label":"index","id":"tests/ascii/\xe6\xf8\xe5/index"}]},{"type":"category","label":"Category Links","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Introduction","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/custom-index-convention/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/custom-index-convention/intro"}},{"type":"category","label":"no-index-doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/no-index-doc/index"},{"type":"doc","id":"tests/category-links/no-index-doc/sample-doc"}]},{"type":"doc","label":"No sub-docs","id":"tests/category-links/no-subdoc/index"},{"type":"doc","id":"tests/category-links/readme"},{"type":"category","label":"regular-category","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/regular-category/sample-doc"}]},{"type":"category","label":"Category with a doc of category\'s name","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-category-name-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-category-name-doc/with-category-name-doc"}},{"type":"category","label":"Category with index.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-index-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-index-doc/index"}},{"type":"category","label":"Category with readme.md doc","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/category-links/with-readme-doc/sample-doc"}],"link":{"type":"doc","id":"tests/category-links/with-readme-doc/README"}}],"link":{"type":"generated-index","slug":"/category-links-generated-index-slug","permalink":"/tests/docs/category-links-generated-index-slug"}},{"type":"category","label":"Custom Props","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/custom-props/doc-with-custom-props","customProps":{"prop":"custom","number":1,"boolean":true}},{"type":"doc","id":"tests/custom-props/doc-without-custom-props"}],"link":{"type":"doc","id":"tests/custom-props/index"}},{"type":"doc","id":"tests/img-tests"},{"type":"category","label":"links","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/links/broken-anchors-tests"}]},{"type":"doc","label":"TOC partial test","id":"tests/toc-partials/index"},{"type":"category","label":"Visibility","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/force-unlisted"},{"type":"category","label":"only-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Only Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/only-unlisteds/unlisted2"}]},{"type":"category","label":"some-drafts","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"draft-subcategory","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-drafts/draft-subcategory/listed1"}]}]},{"type":"category","label":"some-unlisteds","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Some Unlisteds - Subcategory index unlisted","collapsible":true,"collapsed":true,"items":[{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3"}],"link":{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted-subcategory/index"}},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted1"},{"type":"doc","id":"tests/visibility/some-unlisteds/unlisted2"}]}],"link":{"type":"doc","id":"tests/visibility/index"}},{"type":"link","label":"External Link test","href":"https://docusaurus.io"},{"type":"category","label":"Sidebar item description tests","link":{"type":"generated-index","slug":"/category/sidebar-item-description-tests","permalink":"/tests/docs/category/sidebar-item-description-tests"},"items":[{"type":"link","label":"Link without description","href":"https://docusaurus.io"},{"type":"link","label":"Link with description","href":"https://docusaurus.io","description":"Some link description"},{"type":"category","label":"Category without description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category with description","description":"Some category description","items":[{"type":"link","label":"Link ","href":"https://docusaurus.io"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Another category with index","collapsible":false,"link":{"type":"generated-index","slug":"/category/another-category-with-index","permalink":"/tests/docs/category/another-category-with-index"},"items":[{"type":"doc","id":"more-test"}],"collapsed":false},{"type":"category","label":"Huge sidebar category","items":[{"type":"link","href":"/","label":"Test Test test test test test test"},{"type":"link","href":"/","label":"Link 0 (level 1)"},{"type":"link","href":"/","label":"Link 1 (level 1)"},{"type":"link","href":"/","label":"Link 2 (level 1)"},{"type":"link","href":"/","label":"Link 3 (level 1)"},{"type":"link","href":"/","label":"Link 4 (level 1)"},{"type":"link","href":"/","label":"Link 5 (level 1)"},{"type":"link","href":"/","label":"Link 6 (level 1)"},{"type":"link","href":"/","label":"Link 7 (level 1)"},{"type":"category","label":"Category 0 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 1)","items":[{"type":"link","href":"/","label":"Link 0 (level 2)"},{"type":"link","href":"/","label":"Link 1 (level 2)"},{"type":"link","href":"/","label":"Link 2 (level 2)"},{"type":"link","href":"/","label":"Link 3 (level 2)"},{"type":"link","href":"/","label":"Link 4 (level 2)"},{"type":"link","href":"/","label":"Link 5 (level 2)"},{"type":"link","href":"/","label":"Link 6 (level 2)"},{"type":"link","href":"/","label":"Link 7 (level 2)"},{"type":"category","label":"Category 0 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 2)","items":[{"type":"link","href":"/","label":"Link 0 (level 3)"},{"type":"link","href":"/","label":"Link 1 (level 3)"},{"type":"link","href":"/","label":"Link 2 (level 3)"},{"type":"link","href":"/","label":"Link 3 (level 3)"},{"type":"link","href":"/","label":"Link 4 (level 3)"},{"type":"link","href":"/","label":"Link 5 (level 3)"},{"type":"link","href":"/","label":"Link 6 (level 3)"},{"type":"link","href":"/","label":"Link 7 (level 3)"},{"type":"category","label":"Category 0 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 1 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 2 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 3 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 4 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 5 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 6 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Category 7 (level 3)","items":[{"type":"link","href":"/","label":"Link (level 4)"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Link tests","className":"red","items":[{"type":"link","label":"External link absolute","href":"https://github.com/facebook/docusaurus"},{"type":"link","label":"pathname:/// link","href":"pathname:///some/local/path"},{"type":"link","label":"pathname:/// link (no baseUrl)","href":"pathname:///some/local/path","autoAddBaseUrl":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"TOC tests","className":"red","items":[{"type":"doc","id":"toc/toc-2-2"},{"type":"doc","id":"toc/toc-2-3"},{"type":"doc","id":"toc/toc-2-4"},{"type":"doc","id":"toc/toc-2-5"},{"type":"doc","id":"toc/toc-3-5"},{"type":"doc","id":"toc/toc-3-_"},{"type":"doc","id":"toc/toc-4-5"},{"type":"doc","id":"toc/toc-5-5"},{"type":"doc","id":"toc/toc-_-5"},{"type":"doc","id":"toc/toc-_-_"},{"type":"doc","id":"toc/toc-test-bad"},{"type":"doc","id":"toc/toc-test-good"}],"collapsed":true,"collapsible":true},{"type":"category","label":"HTML items tests","collapsed":false,"collapsible":false,"items":[{"type":"html","value":"Some Text","defaultStyle":true},{"type":"html","value":"<span style=\\"border-top: 1px solid var(--ifm-color-gray-500); display: block;margin: 0.5rem 0 0.25rem 1rem;\\" />"},{"type":"html","defaultStyle":true,"value":"\\n <span style=\\"font-size: 0.5rem; color: lightgrey;\\">Powered by</span>\\n <img style=\\"width: 100px; height: 100px; display: block;\\" src=\\"/img/docusaurus.png\\" alt=\\"Docusaurus Logo\\" />\\n "}]}],"anotherSidebar":[{"type":"doc","id":"dummy"}]}}]}},"docusaurus-plugin-content-blog":{"default":{"blogSidebarTitle":"All our posts","blogPosts":[{"id":"/releases/3.2","metadata":{"permalink":"/blog/releases/3.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx","source":"@site/blog/releases/3.2/index.mdx","title":"Docusaurus 3.2","description":"We are happy to announce Docusaurus 3.2.","date":"2024-03-29T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.475,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-03-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1711731993000,"lastUpdatedBy":"S\xe9bastien Lorber","nextItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"}},"content":"We are happy to announce **Docusaurus 3.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Faster builds\\n\\nWe worked hard to reduce the time it takes to build a Docusaurus site in production mode.\\n\\nBetween v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.\\n\\nLet\'s take an example. Our benchmark on the [React Native website upgrading to v3.2](https://github.com/facebook/react-native-website/pull/4072) reports the following results:\\n\\n- \ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)\\n- \ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)\\n\\nThe results will vary depending on your site\'s topology and the options you turned on, but we expect the largest sites will see the most significant improvements.\\n\\nNote that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our [performance issue](https://github.com/facebook/docusaurus/issues/4765) for upcoming improvements.\\n\\n<details>\\n <summary>What is the difference between a cold build and an incremental build?</summary>\\n\\nA cold build is when the Docusaurus caches are empty, generally after running `docusaurus clear`.\\n\\nAn incremental build happens when you run another time the `docusaurus build` command. Docusaurus automatically tries to \\"re-use\\" computations from former builds to make subsequent builds faster. In practice it\'s based on [Webpack persistent caching](https://webpack.js.org/guides/build-performance/#persistent-cache). To enable incremental builds on your CI server, you can persist the `node_modules/.cache` folder across builds.\\n\\n</details>\\n\\n### Faster Dev Server\\n\\nWe also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.\\n\\nThe way we initially implemented content reloading wasn\'t great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin\'s content, only that plugin will reload. It\'s hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25.\\n\\nWe plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don\'t run useless computations that would always keep giving the same result.\\n\\n### MDX partials table-of-contents\\n\\nWith [#9684](https://github.com/facebook/docusaurus/pull/9684), Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.\\n\\nDocusaurus and MDX allows you to [import one Markdown file into another](/docs/markdown-features/react#importing-markdown). We usually call the imported Markdown file a \\"partial\\", and use the `_` prefix so that this file does not lead to the creation of a new page.\\n\\n```md title=\\"myDoc.mdx\\"\\n# My Doc\\n\\n## Doc heading\\n\\nContent is imported from another MDX file:\\n\\nimport ImportedDoc from \'./\\\\_importedDoc.mdx\';\\n\\n<ImportedDoc />\\n```\\n\\n```md title=\\"_myPartial.mdx\\"\\n## Partial heading\\n\\nSome paragraph\\n```\\n\\nPreviously, the heading `Partial heading` did not appear in the table-of-contents, but now it will!\\n\\n### Blog improvements\\n\\nWe improved the blog plugin with several new options to make it even more powerful and flexible:\\n\\n- [#9912](https://github.com/facebook/docusaurus/pull/9912): you can now display the last update time and author of a blog post, a feature the docs plugin already had.\\n- [#9886](https://github.com/facebook/docusaurus/pull/9886): a new `processBlogPosts` option allow you to filter/transform/sort blog posts.\\n- [#9838](https://github.com/facebook/docusaurus/pull/9838): a new `pageBasePath` option allows you to customize the blog pagination URL segment (`/blog/page/2`)\\n\\n### Sitemap lastmod\\n\\nWith [#9954](https://github.com/facebook/docusaurus/pull/9954), the sitemap plugin has a new `lastmod` option that can now emit a `<lastmod>` tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog `last_update` front matter.\\n\\nWe also made it possible to opt-out of emitting `<priority>` and `<frequency>` tags, which are generally ignored by crawlers (notably [Google](https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping)).\\n\\nWe recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:\\n\\n```js\\n{\\n lastmod: \'date\',\\n priority: null,\\n changefreq: null,\\n}\\n```\\n\\n## Other changes\\n\\n- [#9687](https://github.com/facebook/docusaurus/pull/9687): new Vercel Analytics plugin\\n- [#9681](https://github.com/facebook/docusaurus/pull/9681) and [#9442](https://github.com/facebook/docusaurus/pull/9442): `docusaurus swizzle` and `create-docusaurus` CLIs now ask users if they prefer to use TypeScript\\n- [#9928](https://github.com/facebook/docusaurus/pull/9928): new Icelandic translation\\n- [#9928](https://github.com/facebook/docusaurus/pull/9931): new `allContentLoaded` plugin lifecycle (experimental)\\n\\nCheck the **[3.2.0 changelog entry](/changelog/3.2.0)** for an exhaustive list of changes."},{"id":"/releases/3.1","metadata":{"permalink":"/blog/releases/3.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx","source":"@site/blog/releases/3.1/index.mdx","title":"Docusaurus 3.1","description":"We are happy to announce Docusaurus 3.1.","date":"2024-01-05T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":1.665,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-01-05T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1704479518000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"},"nextItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"}},"content":"We are happy to announce **Docusaurus 3.1**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Broken anchors checker\\n\\nIn [#9528](https://github.com/facebook/docusaurus/pull/9528), we improved the built-in broken links checker to also detect broken anchors.\\n\\n![Docusaurus blog post social card](./img/broken-anchor.jpg)\\n\\n:::tip[Make it fail fast]\\n\\nThe new [`onBrokenAnchors`](/docs/api/docusaurus-config#onBrokenAnchors) option has value `warn` by default, for retro-compatibility reasons.\\n\\nWe recommend to turn it to `throw` and fail your CI builds instead of deploying broken anchors to productions.\\n\\n:::\\n\\n:::note\\n\\nFor users and plugin authors implementing custom `<Heading>` and `<Link>` components, we provide a new [`useBrokenLinks`](/docs/docusaurus-core#useBrokenLinks) React hook API.\\n\\n**Most Docusaurus users don\'t need to care about it**, built-in components (`docusaurus/Link` and `@theme/Heading`) already use it internally.\\n\\n:::\\n\\n### `parseFrontMatter` hook\\n\\nIn [#9624](https://github.com/facebook/docusaurus/pull/9624), we added a new [`siteConfig.markdown.parseFrontMatter` function hook](/docs/api/docusaurus-config#markdown).\\n\\nThis makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n // highlight-start\\n parseFrontMatter: async (params) => {\\n // Reuse the default parser\\n const result = await params.defaultParseFrontMatter(params);\\n\\n // Process front matter description placeholders\\n result.frontMatter.description =\\n result.frontMatter.description?.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n\\n // Create your own front matter shortcut\\n if (result.frontMatter.i_do_not_want_docs_pagination) {\\n result.frontMatter.pagination_prev = null;\\n result.frontMatter.pagination_next = null;\\n }\\n\\n // Rename an unsupported front matter coming from another system\\n if (result.frontMatter.cms_seo_summary) {\\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\\n delete result.frontMatter.cms_seo_summary;\\n }\\n\\n return result;\\n },\\n // highlight-end\\n },\\n};\\n```\\n\\nRead the [front matter guide](/docs/markdown-features#front-matter) and the [`parseFrontMatter` API ref](/docs/api/docusaurus-config#markdown) for details.\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#9674](https://github.com/facebook/docusaurus/pull/9674): add `siteConfig.markdown.remarkRehypeOptions` to pass options to `remark-rehype`, letting you customize things such as MDX footnote label\\n- [#9671](https://github.com/facebook/docusaurus/pull/9671): add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML\\n- [#9610](https://github.com/facebook/docusaurus/pull/9610): enable CLI port configuration via `PORT` environment variable\\n- [#9477](https://github.com/facebook/docusaurus/pull/9477): complete Brazilian Portuguese (pt-BR) translations\\n\\nCheck the **[3.1.0 changelog entry](/changelog/3.1.0)** for an exhaustive list of changes."},{"id":"/releases/3.0","metadata":{"permalink":"/blog/releases/3.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx","source":"@site/blog/releases/3.0/index.mdx","title":"Announcing Docusaurus 3.0","description":"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73","date":"2023-10-31T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":10.515,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Announcing Docusaurus 3.0","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-10-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1700717294000,"lastUpdatedBy":"ozaki","prevItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"},"nextItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"}},"content":"Today, we are happy to **announce Docusaurus 3.0**! \ud83e\udd73\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nThis is a new **major version** of Docusaurus, coming with **new exciting features** and upgraded dependencies.\\n\\nIn line with the [**Semantic Versioning**](https://semver.org/) principles, this release includes **breaking changes** we documented thoroughly in the [**v3 upgrade guide**](/docs/migration/v3/). Breaking changes can be bothersome, but they are necessary to set the ground for a **new wave of Docusaurus features** we plan to implement.\\n\\n![v3.0 social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\nWe initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, **upgrading to MDX v3** is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding [compatibility options for MDX v1](/docs/api/docusaurus-config#markdown).\\n\\nThe simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:\\n\\n- [Prepare your site](/blog/preparing-your-site-for-docusaurus-v3) ahead of time, incrementally, while staying on Docusaurus v2\\n- [Set up visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) to catch unexpected visual changes happening during the upgrade\\n\\n:::info About Docusaurus v2\\n\\nAccording to our [release process](/community/release-process#stable-version), Docusaurus v2 has now entered **maintenance mode**. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.\\n\\n:::\\n\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Breaking changes\\n\\nThis section only gives you a quick glance. All the breaking changes are thoroughly documented in the [**v3 upgrade guide**](/docs/migration/v3).\\n\\nDocusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:\\n\\n- Node.js v16 \u27a1\ufe0f v18\\n- React v17 \u27a1\ufe0f v18\\n- MDX v1 \u27a1\ufe0f v3\\n- TypeScript v4 \u27a1\ufe0f v5\\n- prism-react-renderer v1 \u27a1\ufe0f v2\\n- react-live v2 \u27a1\ufe0f v4\\n- Mermaid v9 \u27a1\ufe0f v10\\n- import-fresh v3 \u27a1\ufe0f jiti v1\\n- remark-emoji v2 \u27a1\ufe0f v4\\n\\nA typical `package.json` dependency upgrade looks like:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n // upgrade to Docusaurus v3\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0\\",\\n // upgrade to MDX v3\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n // upgrade to prism-react-renderer v2.0+\\n- \\"prism-react-renderer\\": \\"^1.3.5\\",\\n+ \\"prism-react-renderer\\": \\"^2.1.0\\",\\n // upgrade to React v18.0+\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n // upgrade Docusaurus dev dependencies to v3\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\",\\n- \\"@docusaurus/types\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0\\",\\n+ \\"@docusaurus/types\\": \\"3.0.0\\"\\n }\\n \\"engines\\": {\\n // require Node.js 18.0+\\n- \\"node\\": \\">=16.14\\"\\n+ \\"node\\": \\">=18.0\\"\\n }\\n }\\n```\\n\\nApart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn\'t have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new default blog RSS feed limit of 20 entries\\n- [#9308](https://github.com/facebook/docusaurus/pull/9308): fix and re-introduce the `:::warning` admonition, deprecate `:::caution`\\n- [#9310](https://github.com/facebook/docusaurus/pull/9310): remove the legacy versioned sidebar id prefix, used for sites versioned before `v2.0.0-beta.10` (December 2021)\\n- [#7966](https://github.com/facebook/docusaurus/pull/7966): refactor docs theme components, eventually requiring to you re-swizzle them\\n\\n## Highlights\\n\\nBelow is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0).\\n\\n### Markdown\\n\\nDocusaurus v3 upgraded from MDX v1 to MDX v3:\\n\\n- in [#8288](https://github.com/facebook/docusaurus/pull/8288), we upgraded to [**MDX v2**](https://mdxjs.com/blog/v2/) ([migration guide](https://mdxjs.com/migrating/v2/))\\n- in [#9451](https://github.com/facebook/docusaurus/pull/9451), we upgraded to [**MDX v3**](https://mdxjs.com/blog/v3/) ([migration guide](https://mdxjs.com/migrating/v3/))\\n\\nThis new MDX version is **much better for content writers and plugin authors**, and lays the ground for implementing new exciting Markdown features.\\n\\n:::warning MDX v3 - the main challenge\\n\\nThe transition from MDX v1 to MDX v3 is the **main challenge** to the adoption of Docusaurus v3.\\n\\nSome documents that compiled successfully under Docusaurus v2 might now **fail to compile** under Docusaurus v3, while others might **render differently**.\\n\\nMost breaking changes come from [MDX v2](https://mdxjs.com/blog/v2/), and [MDX v3](https://mdxjs.com/blog/v3/) is a relatively small release. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\n**Don\'t be intimidated**. Most problems are **easy to fix** and often related to `{` and `<` characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command [`npx docusaurus-mdx-checker`](https://github.com/slorber/docusaurus-mdx-checker) to help you get an estimate of the work to be done, and we recommend to [prepare your site in advance](/blog/preparing-your-site-for-docusaurus-v3).\\n\\nIf you created custom [MDX plugins](/docs/markdown-features/plugins) (Remark/Rehype), the AST is slightly different, and you might need to refactor them.\\n\\n:::\\n\\nThis notably enables us to add a [CommonMark mode](/docs/markdown-features#mdx-vs-commonmark) that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and **experimental** and limited ([some Docusaurus features will not work](https://github.com/facebook/docusaurus/issues/9092)). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret `.md` files as CommonMark in an upcoming major version, and recommend to use the `.mdx` extension for any file using JSX or ES modules.\\n\\nWe also introduced a new way to [configure Markdown globally for your site](/docs/api/docusaurus-config#markdown), and plan to add more flexible options later.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n format: \'mdx\',\\n mermaid: true,\\n preprocessor: ({filePath, fileContent}) => {\\n return fileContent.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n },\\n mdx1Compat: {\\n comments: true,\\n admonitions: true,\\n headingIds: true,\\n },\\n },\\n};\\n```\\n\\nDocusaurus now uses the [remark-directive](https://github.com/remarkjs/remark-directive) plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own [custom directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) such as `:textDirective`, `::leafDirective` or `:::containerDirective`.\\n\\n### ESM and TypeScript configs {#esm-ts-configs}\\n\\nIn [#9317](https://github.com/facebook/docusaurus/pull/9317), we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.\\n\\nHere are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type * as Preset from \'@docusaurus/preset-classic\';\\n\\nconst config: Config = {\\n title: \'My Site\',\\n favicon: \'img/favicon.ico\',\\n // your site config ...\\n presets: [\\n [\\n \'classic\',\\n {\\n // your preset config ...\\n } satisfies Preset.Options,\\n ],\\n ],\\n themeConfig: {\\n // your theme config ...\\n } satisfies Preset.ThemeConfig,\\n};\\n\\nexport default config;\\n```\\n\\n```ts title=\\"sidebars.ts\\"\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n\\nconst sidebars: SidebarsConfig = {\\n docs: [\'introduction\'],\\n};\\n\\nexport default sidebars;\\n```\\n\\n### Unlisted content\\n\\nDocusaurus already supported a `draft: true` front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.\\n\\nIn [#8004](https://github.com/facebook/docusaurus/pull/8004), we introduced a new `unlisted: true` front matter option, which will keep your pages available in production builds, while \\"hiding\\" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.\\n\\nUnlisted content will:\\n\\n- be excluded from `sitemap.xml`\\n- be excluded from SEO results thanks to `<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />`\\n- be excluded from blog RSS feeds\\n- be excluded from Algolia DocSearch results\\n- be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...\\n\\nUnlisted content will also display a banner so that you don\'t forget to turn it off once your content is ready for prime time. Here\'s an example of an [unlisted blog post](/tests/blog/unlisted-post):\\n\\n<IframeWindow url=\\"/tests/blog/unlisted-post\\" />\\n\\n### React 18\\n\\nIn [#8961](https://github.com/facebook/docusaurus/pull/8961), we upgraded to React 18. This is important, notably for the [gradual adoption of Concurrent React features](https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features), as well as upcoming exciting features such as [build-time React Server Components](https://github.com/facebook/docusaurus/issues/9089).\\n\\nThis new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), notably the new [automatic batching](https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching) behavior.\\n\\n:::danger Experimental support for React 18 features\\n\\nReact 18 comes with new features:\\n\\n- `<Suspense>`\\n- `React.lazy()`\\n- `startTransition()`\\n\\nTheir Docusaurus support is considered as **experimental**. We might have to adjust the integration in the future, leading to a different runtime behavior.\\n\\n:::\\n\\n### Automatic JSX runtime\\n\\nDocusaurus now uses the [\\"automatic\\" JSX runtime](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html).\\n\\nIt is not needed anymore to import React in JSX files that do not use any React API.\\n\\n```diff title=\\"src/components/MyComponent.js\\"\\n- import React from \'react\';\\n\\n export default function MyComponent() {\\n return <div>Hello</div>;\\n }\\n```\\n\\n### Debug builds\\n\\nIt is now possible to build your static site in dev mode.\\n\\n```bash\\ndocusaurus build --dev\\n```\\n\\n:::tip Debug React-related problems\\n\\nDocusaurus will log more errors to the console, notably React 18 hydration errors through the new [`onRecoverableError` callback](https://react.dev/reference/react-dom/client/hydrateRoot#parameters).\\n\\nThis new build mode is particularly helpful for **troubleshooting React problems**. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the [React Error Decoder page](https://reactjs.org/docs/error-decoder.html/).\\n\\n:::\\n\\n### TypeScript\\n\\nDocusaurus v3 now requires a minimum version of TypeScript 5.0.\\n\\nWe re-internalized the base recommended TypeScript config to a new official package:\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\nWe also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new [TypeScript config files](#esm-ts-configs):\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type {Options, ThemeConfig} from \'@docusaurus/preset-classic\';\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n```\\n\\n### Code blocks\\n\\nIn [#9316](https://github.com/facebook/docusaurus/pull/9316), we improved on syntax highlighting thanks to the [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) v2 upgrade. For example, a bash param `--save` is now colored:\\n\\n```bash\\nnpm install --save some-package\\n```\\n\\nThe [interactive code editor](/docs/markdown-features/code-blocks#interactive-code-editor) also upgrades to [react-live](https://github.com/FormidableLabs/react-live) v4, coming with a new [sucrase](https://github.com/alangpierce/sucrase) compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.\\n\\n```js live\\nfunction Hello() {\\n const name: string = \'World\';\\n return <div>Hello {name}</div>;\\n}\\n```\\n\\nIn [#8982](https://github.com/facebook/docusaurus/pull/8982) and [#8870](https://github.com/facebook/docusaurus/pull/8870), we also added [magic comments](/docs/markdown-features/code-blocks#custom-magic-comments) support for TeX-like, Haskell-like, and WebAssembly comment syntax.\\n\\n```haskell title=\\"haskell.hs\\"\\nstringLength :: String -> Int\\n-- highlight-next-line\\nstringLength [] = 0\\nstringLength (x:xs) = 1 + stringLength xs\\n```\\n\\n```matlab title=\\"matlab.m\\"\\n% highlight-start\\nfunction result = times2(n)\\n result = n * 2;\\nend\\n% highlight-end\\nx = 10;\\n% highlight-next-line\\ny = times2(x);\\n```\\n\\n### Mermaid diagrams\\n\\nIn [#9305](https://github.com/facebook/docusaurus/pull/9305), we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.\\n\\n<details>\\n <summary>Mindmap</summary>\\n\\n```mermaid\\nmindmap\\n root((mindmap))\\n Research\\n Creative techniques\\n Strategic planning\\n Argument mapping\\n Tools\\n Pen and paper\\n Mermaid\\n```\\n\\n</details>\\n\\n<details>\\n <summary>Quadrant chart</summary>\\n\\n```mermaid\\nquadrantChart\\n title Reach and engagement of campaigns\\n x-axis Low Reach --\x3e High Reach\\n y-axis Low Engagement --\x3e High Engagement\\n quadrant-1 We should expand\\n quadrant-2 Need to promote\\n quadrant-3 Re-evaluate\\n quadrant-4 May be improved\\n Campaign A: [0.3, 0.6]\\n Campaign B: [0.45, 0.23]\\n Campaign C: [0.57, 0.69]\\n Campaign D: [0.78, 0.34]\\n Campaign E: [0.40, 0.34]\\n Campaign F: [0.35, 0.78]\\n```\\n\\n</details>\\n\\n### Query-string data attributes\\n\\nIn [#9028](https://github.com/facebook/docusaurus/pull/9028), we made it possible to set custom HTML [data attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*) though `docusaurus-data-x` query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.\\n\\n```css title=\\"/src/css/custom.css\\"\\nhtml[data-navbar=\'false\'] .navbar {\\n display: none;\\n}\\n\\nhtml[data-red-border] div#__docusaurus {\\n border: red solid thick;\\n}\\n```\\n\\n<IframeWindow url=\\"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border\\" />\\n\\n### Other features\\n\\nOther new features worth mentioning:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new blog `feedOptions.limit` option\\n- [#9071](https://github.com/facebook/docusaurus/pull/9071): add normalized SEO front matter support for the pages plugin\\n- [#9171](https://github.com/facebook/docusaurus/pull/9028): the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url\\n- [#9171](https://github.com/facebook/docusaurus/pull/9171): new ESLint rule [`no-html-links`](/docs/api/misc/@docusaurus/eslint-plugin/no-html-links)\\n- [#8384](https://github.com/facebook/docusaurus/pull/8384): new ESLint rule [`prefer-docusaurus-heading`](/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading)\\n\\nRead [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0) for an exhaustive list of changes.\\n\\n## Conclusion\\n\\nThis release comes with a few features, but more importantly **upgrades many pieces of the Docusaurus infrastructure**.\\n\\nThe **MDX upgrade** consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.\\n\\nNow that we\'ve caught up with our infrastructure, we\'ll be back **delivering useful documentation features** very soon, in upcoming minor versions.\\n\\nWe would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a **competitive solution** that stands out for its great **flexibility**."},{"id":"/preparing-your-site-for-docusaurus-v3","metadata":{"permalink":"/blog/preparing-your-site-for-docusaurus-v3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","source":"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","title":"Preparing your site for Docusaurus v3","description":"Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.","date":"2023-09-29T00:00:00.000Z","tags":[{"label":"maintenance","permalink":"/blog/tags/maintenance"}],"readingTime":13.745,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Preparing your site for Docusaurus v3","authors":["slorber"],"tags":["maintenance"],"slug":"/preparing-your-site-for-docusaurus-v3","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"},"nextItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},"content":"**Docusaurus v3** is now [**in beta**](https://github.com/facebook/docusaurus/discussions/9312) and the official release is around the corner. This is the perfect time to start **preparing your site** for this new major version.\\n\\nDocusaurus v3 comes with a few **breaking changes**, many of which can be **handled today under Docusaurus v2**. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.\\n\\nThe main breaking change is the upgrade from MDX v1 to MDX v3. Read the [**MDX v2**](https://mdxjs.com/blog/v2/) and [**MDX v3**](https://mdxjs.com/blog/v3/) release notes for details. MDX will now compile your Markdown content **more strictly** and with **subtle differences**.\\n\\nThis article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.\\n\\n![Preparing your site for Docusaurus v3 - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n:::warning\\n\\nThis article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the [v3.0.0-beta.0 release notes](https://github.com/facebook/docusaurus/discussions/9312) for an exhaustive list.\\n\\n:::\\n\\n:::tip Don\'t be afraid\\n\\nThere\'s a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.\\n\\nIf your site is relatively small, with only a few customizations, you can probably [upgrade to Docusaurus v3](#try-docusaurus-v3-today) immediately.\\n\\n:::\\n\\n## Preparatory work\\n\\nBefore preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest [Docusaurus v2 version](/versions).\\n\\nDepending on the complexity of your site, it may be a good idea to adopt the [visual regression testing workflow](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.\\n\\nWe also recommend using the `.mdx` extension whenever you use JSX, `import`, or `export` (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, `.md` files will be parsed as standard [CommonMark](https://commonmark.org/), which does not support these features. In Docusaurus v3, `.md` files keep being compiled as MDX files, but it will be possible to [opt-in for CommonMark](https://github.com/facebook/docusaurus/issues/3018).\\n\\n## Preparing content for MDX v3\\n\\nMDX is a major dependency of Docusaurus responsible for compiling your `.md` and `.mdx` files to React components.\\n\\nMDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of `{` and `<` characters.\\n\\nUpgrading MDX comes with all the breaking changes documented on the [MDX v2](https://mdxjs.com/blog/v2/) and [MDX v3](https://mdxjs.com/blog/v3/) release blog posts. Most breaking changes come from MDX v2. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\nMake sure to also read our updated [**MDX and React**](/docs/markdown-features/react) documentation page.\\n\\n:::tip Ask for help\\n\\nWe have a dedicated [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053) discussion.\\n\\n:::\\n\\n### Using the MDX playground\\n\\nThe MDX playground is your new best friend. It permits to understand how your content is **compiled to React components**, and troubleshoot compilation or rendering issues in isolation.\\n\\nEach MDX version comes with its own playground:\\n\\n- [MDX playground - current version](https://mdxjs.com/playground/)\\n- [MDX playground - v1](https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/)\\n\\n<details>\\n <summary>Configuring the MDX playground options for Docusaurus</summary>\\n\\nTo obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the [MDX playground](https://mdxjs.com/playground/):\\n\\n- Use `MDX`\\n- Use `remark-gfm`\\n- Use `remark-directive`\\n\\n![Screenshot of the MDX playground\'s options panel, with only the \\"Use `MDX`\\", \\"Use `remark-gfm`\\", and \\"Use `remark-directive`\\" options checked](./img/mdx2-playground-options.png)\\n\\n</details>\\n\\nUsing the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.\\n\\n:::tip Making your content future-proof\\n\\nThe goal will be to refactor your problematic content so that it **works fine with both versions of MDX**. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.\\n\\n:::\\n\\n### Using the MDX checker CLI\\n\\nWe provide a [docusaurus-mdx-checker](https://github.com/slorber/docusaurus-mdx-checker) CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.\\n\\n```bash\\nnpx docusaurus-mdx-checker\\n```\\n\\nFor each compilation issue, the CLI will log the file path and a line number to look at.\\n\\n![Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages](./img/mdx-checker-output.png)\\n\\n:::tip\\n\\nUse this CLI to estimate of how much work will be required to make your content compatible with MDX v3.\\n\\n:::\\n\\n:::warning\\n\\nThis CLI is a best effort, and will only report compilation errors.\\n\\nIt will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using [visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing).\\n\\n:::\\n\\n### Common MDX problems\\n\\nWe upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:\\n\\n- [Docusaurus PR](https://github.com/facebook/docusaurus/pull/8288)\\n- [React-Native PR](https://github.com/facebook/react-native-website/pull/3780)\\n- [Jest PR](https://github.com/jestjs/jest/pull/14463)\\n\\nThese upgrades permitted us to aggregate the most common content problems, and document how to best handle them.\\n\\n#### Bad usage of `{`\\n\\nThe `{` character is used for opening [JavaScript expressions](https://mdxjs.com/docs/what-is-mdx/#expressions). MDX will now fail if what you put inside `{expression}` is not a valid expression.\\n\\n```md title=\\"example.md\\"\\nThe object shape looks like {username: string, age: number}\\n```\\n\\n:::danger Error message\\n\\n> Could not parse expression with acorn: Unexpected content after expression\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `{username: string, age: number}`\\n- Use the HTML code: `{`\\n- Escape it: `\\\\{`\\n\\n:::\\n\\n#### Bad usage of `<`\\n\\nThe `<` character is used for opening [JSX tags](https://mdxjs.com/docs/what-is-mdx/#jsx). MDX will now fail if it thinks your JSX is invalid.\\n\\n```md title=\\"example.md\\"\\nUse Android version <5\\n\\nYou can use a generic type like Array<T>\\n\\nFollow the template \\"Road to <YOUR_MINOR_VERSION>\\"\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `5` (U+0035) before name, expected a character that can start a name, such as a letter, `$`, or `_`\\n\\n> Expected a closing tag for `<T>` (1:6-1:9) before the end of `paragraph` end-tag-mismatch mdast-util-mdx-jsx\\n\\n> Expected a closing tag for `<YOUR_MINOR_VERSION>` (134:19-134:39) before the end of `paragraph`\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `Array<T>`\\n- Use the HTML code: `<` or `<`\\n- Escape it: `\\\\<` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Bad usage of GFM Autolink\\n\\nDocusaurus supports [GitHub Flavored Markdown (GFM)](https://github.github.com/gfm/), but [autolink](https://github.github.com/gfm/#autolinks) using the `<link>` syntax is not supported anymore by MDX.\\n\\n```md title=\\"example.md\\"\\n<sebastien@thisweekinreact.com>\\n\\n<http://localhost:3000>\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `@` (U+0040) in name, expected a name character such as letters, digits, `$`, or `_`; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use `[text](url)`)\\n\\n> Unexpected character `/` (U+002F) before local name, expected a character that can start a name, such as a letter, `$`, or `_` (note: to create a link in MDX, use `[text](url)`)\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse regular Markdown links, or remove the `<` and `>`. MDX and GFM are able to autolink literals already.\\n\\n{/* prettier-ignore */}\\n```md title=\\"example.md\\"\\nsebastien@thisweekinreact.com\\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\\n\\nhttp://localhost:3000\\n[http://localhost:3000](http://localhost:3000)\\n```\\n\\n:::\\n\\n#### Lower-case MDXComponent mapping\\n\\nFor users providing a [custom `MDXComponent`mapping](/docs/markdown-features/react#mdx-component-scope), components are now \\"sandboxed\\":\\n\\n- a `MDXComponent` mapping for `h1` only gets used for `# hi` but not for `<h1>hi</h1>`\\n- a **lower-cased** custom element name will not be substituted by its respective `MDXComponent` component anymore\\n\\n:::danger visual difference\\n\\nYour [`MDXComponent` component mapping](/docs/markdown-features/react#mdx-component-scope) might not be applied as before, and your custom components might no longer be used.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nFor native Markdown elements, you can keep using **lower-case**: `p`, `h1`, `img`, `a`...\\n\\nFor any other element, **use upper-case names**.\\n\\n```diff title=\\"src/theme/MDXComponents.js\\"\\n import MDXComponents from \'@theme-original/MDXComponents\';\\n\\n export default {\\n ...MDXComponents,\\n p: (props) => <p {...props} className=\\"my-paragraph\\"/>\\n- myElement: (props) => <div {...props} className=\\"my-class\\" />,\\n+ MyElement: (props) => <div {...props} className=\\"my-class\\" />,\\n };\\n```\\n\\n:::\\n\\n#### Unintended extra paragraphs\\n\\nIn MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected `<p>` tags.\\n\\n:::danger visual difference\\n\\nSee how this content is rendered differently by MDX v1 and v3.\\n\\n```md title=\\"example.md\\"\\n<div>Some **Markdown** content</div>\\n<div>\\n Some **Markdown** content\\n</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v1 output\\"\\n<div>Some **Markdown** content</div>\\n<div>Some **Markdown** content</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v3 output\\"\\n<div>Some <strong>Markdown</strong> content</div>\\n<div><p>Some <strong>Markdown</strong> content</p></div>\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you don\'t want an extra `<p>` tag, refactor content on a case by case basis to use a single-line JSX tag.\\n\\n```diff\\n <figure>\\n <img src=\\"/img/myImage.png\\" alt=\\"My alt\\" />\\n- <figcaption>\\n- My image caption\\n- </figcaption>\\n+ <figcaption>My image caption</figcaption>\\n </figure>\\n```\\n\\nIf your content contains \\"Markdown inlines\\" (`**`, `*`, `_`, `[link](/path)`), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.\\n\\n:::\\n\\n#### Unintended usage of directives\\n\\nDocusaurus v3 now uses [Markdown Directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) (implemented with [remark-directive](https://github.com/remarkjs/remark-directive)) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.\\n\\n```md title=\\"example.md\\"\\nThis is a :textDirective\\n\\n::leafDirective\\n\\n:::containerDirective\\n\\nContainer directive content\\n\\n:::\\n```\\n\\n:::danger Visual change\\n\\nDirectives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won\'t be rendered back in their original form.\\n\\n```md title=\\"example.md\\"\\nThe AWS re:Invent conf is great\\n```\\n\\nDue to `:Invent` being parsed as a text directive, this will now be rendered as:\\n\\n```\\nThe AWS re\\nconf is great\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\n- Use the HTML code: `:`\\n- Add a space after `:` (if it makes sense): `: text`\\n- Escape it: `\\\\:` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Unsupported indented code blocks\\n\\nMDX does not transform indented text as code blocks anymore.\\n\\n```md title=\\"example.md\\"\\n console.log(\\"hello\\");\\n```\\n\\n:::danger Visual change\\n\\nThe upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn\'t a code block anymore.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse the regular code block syntax instead of indentation:\\n\\n````md title=\\"example.md\\"\\n```js\\nconsole.log(\'hello\');\\n```\\n````\\n\\n:::\\n\\n### MDX plugins\\n\\nAll the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now [**ES Modules only**](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and do not support [CommonJS](https://nodejs.org/api/modules.html#modules-commonjs-modules) anymore.\\n\\nIn practice this means that you can\'t do `require(\\"remark-plugin\\")` anymore.\\n\\n:::tip How to prepare\\n\\nDocusaurus v3 now supports [**ES Modules**](https://flaviocopes.com/es-modules/) configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:\\n\\n```js title=\\"docusaurus.config.js\\"\\nimport remarkPlugin from \'remark-plugin\';\\n\\nexport default {\\n title: \'Docusaurus\',\\n /* site config using remark plugins here */\\n};\\n```\\n\\nIf you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the [Docusaurus config supports the usage of an async function](/docs/configuration#syntax-to-declare-docusaurus-config) to let you do so.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = async function () {\\n const myPlugin = (await import(\'remark-plugin\')).default;\\n return {\\n // site config...\\n };\\n};\\n```\\n\\n:::\\n\\n:::info For plugin authors\\n\\nIf you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a [dedicated support discussion](https://github.com/facebook/docusaurus/discussions/9337) to help plugin authors upgrade their code.\\n\\n:::\\n\\n## Other breaking changes\\n\\nApart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.\\n\\n### Node.js 18.0\\n\\nNode.js 16 [reached End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol), and Docusaurus v3 now requires **Node.js >= 18.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### React 18.0\\n\\nDocusaurus v3 now requires **React >= 18.0**.\\n\\nReact 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.\\n\\nSimple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.\\n\\n:::tip How to prepare\\n\\nRead the official [React v18.0](https://react.dev/blog/2022/03/29/react-v18) and [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), and look at your first-party React code to figure out which components might be affected this React 18 upgrade.\\n\\nWe recommend to particularly look for:\\n\\n- Automatic batching for stateful components\\n- New React hydration errors reported to the console\\n\\n:::\\n\\n### TypeScript 5.0\\n\\nDocusaurus v3 now requires **TypeScript >= 5.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### TypeScript base config\\n\\nThe official Docusaurus TypeScript config has been re-internalized from the external package [`@tsconfig/docusaurus`](https://www.npmjs.com/package/@tsconfig/docusaurus) to our new monorepo package [`@docusaurus/tsconfig`](https://www.npmjs.com/package/@docusaurus/tsconfig).\\n\\nThis new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.\\n\\n:::tip How to prepare\\n\\nThe new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"devDependencies\\": {\\n- \\"@tsconfig/docusaurus\\": \\"^1.0.7\\",\\n+ \\"@docusaurus/tsconfig\\": \\"^3.0.0-beta.0\\",\\n }\\n }\\n```\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\n:::\\n\\n### Admonition warning\\n\\nFor historical reasons, we support an undocumented admonition `:::warning` that renders with a red color.\\n\\n:::danger Warning\\n\\nThis is a Docusaurus v2 `:::warning` admonition.\\n\\n:::\\n\\nHowever, the color and icon is historically wrong. Docusaurus v3 re-introduces `:::warning` admonition officially, documents it, and fix the color and icon.\\n\\n:::warning\\n\\nThis is a Docusaurus v3 `:::warning` admonition.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you previously used the undocumented `:::warning` admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use `:::danger` instead.\\n\\nDocusaurus v3 also [deprecated the `:::caution`](https://github.com/facebook/docusaurus/pull/9308) admonition. Please refactor `:::caution` (yellow) to either `:::warning` (yellow) or `:::danger` (red).\\n\\n:::\\n\\n### Versioned sidebars\\n\\nThis breaking change will only affect **Docusaurus v2 early adopters** who versioned their docs before `v2.0.0-beta.10` (December 2021).\\n\\nWhen creating version `v1.0.0`, the sidebar file contained a prefix `version-v1.0.0/` that [Docusaurus v3 does not support anymore](https://github.com/facebook/docusaurus/pull/9310).\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"version-v1.0.0/docs\\": [\\n \\"version-v1.0.0/introduction\\",\\n \\"version-v1.0.0/prerequisites\\"\\n ]\\n}\\n```\\n\\n:::tip How to prepare\\n\\nYour Docusaurus v2 site is able to handle the 2 sidebar formats similarly.\\n\\nYou can remove the useless versioned prefix from your versioned sidebars.\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"docs\\": [\\"introduction\\", \\"prerequisites\\"]\\n}\\n```\\n\\n:::\\n\\n## Try Docusaurus v3 today {#try-docusaurus-v3-today}\\n\\nDocusaurus v3 is now [in beta](https://github.com/facebook/docusaurus/discussions/9312), and already used in production by [React-Native](https://reactnative.dev), [Jest](https://jestjs.io), and [our own website](https://docusaurus.io/).\\n\\nWe think this new Docusaurus version is **robust and ready to be deployed in production**. It should be released officially soon, after receiving a positive feedback from early adopters of our community.\\n\\nWe would really appreciate it if you try upgrading and report issues on the [3.0.0-beta.0 release discussion thread](https://github.com/facebook/docusaurus/discussions/9312).\\n\\nFor most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0-beta.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0-beta.0\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n \\"clsx\\": \\"^2.0.0\\",\\n \\"prism-react-renderer\\": \\"^1.3.5\\",\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0-beta.0\\"\\n }\\n }\\n```\\n\\n## Ask for help\\n\\nWe will be there to help you upgrade through the following support channels:\\n\\n- [Docusaurus v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9336)\\n- [Docusaurus v3 - Discord channel #migration-v2-to-v3](https://discord.com/channels/398180168688074762/1154771869094912090)\\n- [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053)\\n- [MDX v3 - Remark/Rehype Plugins Support](https://github.com/facebook/docusaurus/discussions/9337)\\n- [MDX v3 - Discord channel #migration-mdx-v3](https://discord.com/channels/398180168688074762/1116724556976111616)\\n\\nAlternatively, you can look for a paid [Docusaurus Service Provider](https://github.com/facebook/docusaurus/discussions/9281) to execute this upgrade for you. If your site is open source, you can also ask our community for [free, benevolent help](https://github.com/facebook/docusaurus/discussions/9283).\\n\\n## Conclusion\\n\\nDocusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.\\n\\nThe initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."},{"id":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","metadata":{"permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","source":"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","title":"Upgrading frontend dependencies with confidence","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","date":"2023-09-22T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":8.355,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"authors":["slorber"],"tags":["release"],"slug":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1698328031000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"},"nextItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"}},"content":"Frontend developers often need to **upgrade npm dependencies**, but those upgrades can feel scary and lead to **subtle UI side effects** not caught by your regular test suite.\\n\\nUpgrading Docusaurus is a good example: without reviewing all the pages one by one, it\'s hard to be sure there\'s no visual regression. **Docusaurus v3 is around the corner** (currently in [beta](https://github.com/facebook/docusaurus/discussions/9312)), and we would like to help you do this upgrade with confidence.\\n\\nThis article introduces a **visual regression testing** workflow based on [**GitHub Actions**](https://github.com/features/actions), [**Playwright**](https://playwright.dev/), and [**Argos**](https://argos-ci.com/). It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.\\n\\n![Upgrading frontend dependencies with confidence - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nThis workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as [React Native](https://reactnative.dev/), [Jest](https://jestjs.io/), and the [Docusaurus](https://docusaurus.io/) site itself.\\n\\nDocusaurus v3 comes with infrastructure changes and major dependency upgrades such as [MDX v3](https://mdxjs.com/blog/v3/) and [React 18](https://react.dev/blog/2022/03/29/react-v18), which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That\'s why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.\\n\\n## Workflow overview\\n\\nThe general idea is pretty simple:\\n\\n- Build your site in CI with [GitHub Actions](https://github.com/features/actions)\\n- Take screenshots of all `sitemap.xml` pages with [Playwright](https://playwright.dev/)\\n- Upload them to [Argos](https://argos-ci.com/)\\n- Do this for both Git branches `main` and `pr-branch`\\n- Compare the screenshots side-by-side in [Argos](https://argos-ci.com/)\\n\\nArgos will then **report visual differences** found between `main` and `pr-branch` as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.\\n\\n![Argos GitHub commit status](./img/argos-github-status.png)\\n\\n![Argos GitHub PR comment](./img/argos-github-comment.png)\\n\\nArgos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.\\n\\nCheck the [Docusaurus Argos page](https://app.argos-ci.com/meta-open-source/docusaurus) to explore our own website reports.\\n\\nHere is a more concrete example of Argos [reporting a visual regression](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838) found while upgrading the React-Native website:\\n\\n[![Argos GitHub PR comment](./img/argos-react-native-regression.png)](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838)\\n\\n## Workflow implementation\\n\\nThis section will describe the implementation details of each step of the workflow.\\n\\nYou will need to [sign up to Argos](https://app.argos-ci.com/signup) and [connect Argos to your GitHub repository](https://argos-ci.com/docs/github)\\n\\n### Dependencies\\n\\nThis workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:\\n\\n```bash\\nyarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio\\n```\\n\\n### GitHub Action\\n\\nThe GitHub action is responsible for executing the workflow for each Git branch.\\n\\nA minimal workflow could look like:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n\\njobs:\\n take-screenshots:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Check out repository code\\n uses: actions/checkout@v4\\n\\n - name: Use Node.js\\n uses: actions/setup-node@v3\\n with:\\n node-version: current\\n\\n - name: Install dependencies\\n run: yarn install --frozen-lockfile\\n\\n - name: Install Playwright browsers\\n run: yarn playwright install --with-deps chromium\\n\\n - name: Build the website\\n run: yarn docusaurus build\\n\\n - name: Take screenshots with Playwright\\n run: yarn playwright test\\n\\n - name: Upload screenshots to Argos\\n run: yarn argos upload ./screenshots\\n```\\n\\n### Playwright config\\n\\nPlaywright is responsible for taking screenshots of the website previously built locally by the GitHub action.\\n\\nA minimal [Playwright config](https://playwright.dev/docs/test-configuration) could look like:\\n\\n```ts title=\\"playwright.config.ts\\"\\nimport {devices} from \'@playwright/test\';\\nimport type {PlaywrightTestConfig} from \'@playwright/test\';\\n\\nconst config: PlaywrightTestConfig = {\\n webServer: {\\n port: 3000,\\n command: \'yarn docusaurus serve\',\\n },\\n projects: [\\n {\\n name: \'chromium\',\\n use: {\\n ...devices[\'Desktop Chrome\'],\\n },\\n },\\n ],\\n};\\n\\nexport default config;\\n```\\n\\n### Playwright test\\n\\nA Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.\\n\\n```ts title=\\"screenshot.spec.ts\\"\\nimport * as fs from \'fs\';\\nimport {test} from \'@playwright/test\';\\nimport {argosScreenshot} from \'@argos-ci/playwright\';\\nimport {extractSitemapPathnames, pathnameToArgosName} from \'./utils\';\\n\\n// Constants\\nconst siteUrl = \'http://localhost:3000\';\\nconst sitemapPath = \'./build/sitemap.xml\';\\nconst stylesheetPath = \'./screenshot.css\';\\nconst stylesheet = fs.readFileSync(stylesheetPath).toString();\\n\\n// Wait for hydration, requires Docusaurus v2.4.3+\\n// Docusaurus adds a <html data-has-hydrated=\\"true\\"> once hydrated\\n// See https://github.com/facebook/docusaurus/pull/9256\\nfunction waitForDocusaurusHydration() {\\n return document.documentElement.dataset.hasHydrated === \'true\';\\n}\\n\\nfunction screenshotPathname(pathname: string) {\\n test(`pathname ${pathname}`, async ({page}) => {\\n const url = siteUrl + pathname;\\n await page.goto(url);\\n await page.waitForFunction(waitForDocusaurusHydration);\\n await page.addStyleTag({content: stylesheet});\\n await argosScreenshot(page, pathnameToArgosName(pathname));\\n });\\n}\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath);\\n console.log(\'Pathnames to screenshot:\', pathnames);\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n<details>\\n <summary>Why do we take screenshots with Argos instead of Playwright?</summary>\\n\\nArgos has a [Playwright integration](https://argos-ci.com/docs/playwright) that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.\\n\\n</details>\\n\\n<details>\\n<summary>What\'s inside <code>utils.ts</code>?</summary>\\n\\nThis module contains implementation details that we choose to hide for clarity.\\n\\n```ts\\nimport * as cheerio from \'cheerio\';\\nimport * as fs from \'fs\';\\n\\n// Extract a list of pathnames, given a fs path to a sitemap.xml file\\n// Docusaurus generates a build/sitemap.xml file for you!\\nexport function extractSitemapPathnames(sitemapPath: string): string[] {\\n const sitemap = fs.readFileSync(sitemapPath).toString();\\n const $ = cheerio.load(sitemap, {xmlMode: true});\\n const urls: string[] = [];\\n $(\'loc\').each(function handleLoc() {\\n urls.push($(this).text());\\n });\\n return urls.map((url) => new URL(url).pathname);\\n}\\n\\n// Converts a pathname to a decent screenshot name\\nexport function pathnameToArgosName(pathname: string): string {\\n return pathname.replace(/^\\\\/|\\\\/$/g, \'\') || \'index\';\\n}\\n```\\n\\n</details>\\n\\n### Stylesheet\\n\\nScreenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as **false positive** visual regressions.\\n\\nFor this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read [Argos - About flaky tests docs](https://argos-ci.com/docs/about-flaky) for details.\\n\\n```css title=\\"screenshot.css\\"\\n/* Iframes can load lazily */\\niframe,\\n/* Avatars can be flaky due to using external sources: GitHub/Unavatar */\\n.avatar__photo,\\n/* Gifs load lazily and are animated */\\nimg[src$=\'.gif\'],\\n/* Algolia keyboard shortcuts appear with a little delay */\\n.DocSearch-Button-Keys > kbd,\\n/* The live playground preview can often display dates/counters */\\n[class*=\'playgroundPreview\'] {\\n visibility: hidden;\\n}\\n\\n/* Different docs last-update dates can alter layout */\\n.theme-last-updated,\\n/* Mermaid diagrams are rendered client-side and produce layout shifts */\\n.docusaurus-mermaid-container {\\n display: none;\\n}\\n```\\n\\n:::tip prevent layout shifts\\n\\nWe recommend hiding flaky UI elements affecting layout with `display: none;`.\\n\\nFor example, the docs \\"Last Updated on\\" might render on more than 1 line, eventually \\"pushing\\" the rest of your content further down, leading to Argos detecting many different pixels.\\n\\n:::\\n\\n## Example repository\\n\\nThe [slorber/docusaurus-argos-example](https://github.com/slorber/docusaurus-argos-example) repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.\\n\\n[![Docusaurus + Argos monorepo example screenshot](./img/docusaurus-argos-example-repo-screenshot.png)](https://github.com/slorber/docusaurus-argos-example)\\n\\nRelevant pull-requests:\\n\\n- [PR - Set up GitHub Action + Playwright + Argos](https://github.com/slorber/docusaurus-argos-example/pull/1): implements the minimal workflow described above\\n- [PR - Upgrading Docusaurus from v2 to v3](https://github.com/slorber/docusaurus-argos-example/pull/2): shows how Argos caught 3 visual regressions while upgrading\\n\\n:::tip More advanced example?\\n\\nBrowse the Docusaurus repository for a more advanced integration:\\n\\n- [GitHub Action](https://github.com/facebook/docusaurus/blob/main/.github/workflows/argos.yml)\\n- [Playwright + Argos tests](https://github.com/facebook/docusaurus/tree/main/argos)\\n\\n:::\\n\\n## Make it cheap\\n\\nThe tools we choose are implementation details of this visual regression testing workflow.\\n\\nFor Docusaurus, we choose [Argos](https://argos-ci.com/): it works well for us, and offers [free](https://argos-ci.com/pricing) and [open source](https://argos-ci.com/docs/open-source) plans. However, you are free to adopt alternative tools.\\n\\nIn case you don\'t mind storing large screenshots in Git, you can also try the free, self-hosted [Playwright Visual Comparisons](https://playwright.dev/docs/test-snapshots) and browse visual differences with `npx playwright show-report`. However, we found using a dedicated external tool is more convenient.\\n\\nExternal tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.\\n\\n### Limit the number of pathnames\\n\\nThe base setup involves taking a screenshot of every single pathname found in `sitemap.xml`. For large sites, that can lead to a lot of screenshots.\\n\\nYou can decide to filter the pathnames to only take screenshots of the most critical pages.\\n\\nFor the Docusaurus website, do not take screenshots for versioned docs pages:\\n\\n```ts title=\\"screenshot.spec.ts\\"\\n// highlight-start\\nfunction isVersionedDocsPathname(pathname: string): boolean {\\n return pathname.match(/^\\\\/docs\\\\/((\\\\d\\\\.\\\\d\\\\.\\\\d)|(next))\\\\//);\\n}\\n// highlight-end\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath)\\n // highlight-next-line\\n .filter(isVersionedDocsPathname);\\n\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n### Limit the workflow concurrency\\n\\nImplementing [GitHub Actions concurrency groups](https://docs.github.com/en/actions/using-jobs/using-concurrency) will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nconcurrency:\\n group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}\\n cancel-in-progress: true\\n```\\n\\n### Run your workflow conditionally\\n\\nIt\'s not worth running this workflow for every single commit and pull-request.\\n\\nFor example, if someone corrects a typo in your documentation, you probably don\'t want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that\'s a bit expected!\\n\\nFor the Docusaurus website, we only run the workflow for pull-request having the `Argos` label:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n # highlight-start\\n types:\\n - opened\\n - synchronize\\n - reopened\\n - labeled\\n # highlight-end\\n\\njobs:\\n take-screenshots:\\n # highlight-start\\n if: ${{ github.ref_name == \'main\' || (github.event_name == \'pull_request\' && contains(github.event.pull_request.labels.*.name, \'Argos\')) }}\\n # highlight-end\\n runs-on: ubuntu-latest\\n steps:\\n # Your job steps here ...\\n```\\n\\nThere are many options to explore, such as [triggering the workflow manually](https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow) or [only when files matching a specific pattern are modified](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#example-including-paths).\\n\\n## Conclusion\\n\\nI believe **visual regression testing is underused** in the frontend ecosystem.\\n\\nTaking full-page screenshots is a **low-hanging fruit** that is easy to set up and can help you **catch a new class of bugs** that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for **any kind of refactoring** that shouldn\'t change the user interface.\\n\\nSo why not give it a try?\\n\\nHappy hacking!\\n\\n## See also\\n\\nUseful documentation links:\\n\\n- [Playwright - Installation](https://playwright.dev/docs/intro)\\n- [Playwright - Test config guide](https://playwright.dev/docs/test-configuration)\\n- [Playwright - Test config API](https://playwright.dev/docs/api/class-testconfig)\\n- [Argos - Installation](https://argos-ci.com/docs/installation)\\n- [Argos - Use with GitHub Actions](https://argos-ci.com/docs/github-actions)\\n- [Argos - Use with Playwright](https://argos-ci.com/docs/playwright)\\n- [Argos - About flaky tests](https://argos-ci.com/docs/about-flaky)"},{"id":"/releases/2.4","metadata":{"permalink":"/blog/releases/2.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx","source":"@site/blog/releases/2.4/index.mdx","title":"Docusaurus 2.4","description":"We are happy to announce Docusaurus 2.4.","date":"2023-03-23T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.05,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-03-23T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1694767701000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},"nextItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"}},"content":"We are happy to announce **Docusaurus 2.4**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Sidebar item description\\n\\nIn [#8236](https://github.com/facebook/docusaurus/pull/8236), we made it possible to provide a new `description` attribute for docs sidebar items of type `link` and `category`.\\n\\n```tsx title=\\"sidebars.js\\"\\n[\\n {\\n type: \'link\',\\n label: \'Link with description\',\\n href: \'https://docusaurus.io\',\\n // highlight-next-line\\n description: \'Some link description\',\\n },\\n {\\n type: \'category\',\\n label: \'Category with description\',\\n // highlight-next-line\\n description: \'Some category description\',\\n items: [],\\n },\\n];\\n```\\n\\nThese descriptions will be used in category generated index pages.\\n\\n![Show sidebar category generated index with custom descriptions](./img/sidebar-item-description.jpg)\\n\\n### Theme Query String\\n\\nIn [#8708](https://github.com/facebook/docusaurus/pull/8708), we added the possibility to force Docusaurus to initialize itself in `light` or `dark` mode through a new `docusaurus-theme` query-string parameter.\\n\\nThis is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.\\n\\n<IframeWindow url=\\"/docs/?docusaurus-theme=light\\" />\\n<IframeWindow url=\\"/docs/?docusaurus-theme=dark\\" />\\n\\n### Remark plugin npm2yarn upgrade\\n\\nIn [#8690](https://github.com/facebook/docusaurus/pull/8690), we upgraded our Remark plugin [@docusaurus/remark-plugin-npm2yarn](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn) with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.\\n\\n````markdown\\nRun these commands!\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n````\\n\\n<BrowserWindow>\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n\\n</BrowserWindow>\\n\\n### gtag support for multiple tracking IDs\\n\\nIn [#8620](https://github.com/facebook/docusaurus/pull/8620) we added support for the [@docusaurus/plugin-google-gtag](/docs/api/plugins/@docusaurus/plugin-google-gtag) plugin to declare multiple tracking IDs.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n gtag: {\\n trackingID: [\\n // highlight-next-line\\n \'G-<YOUR-NEW-GA4-ID>\',\\n // highlight-next-line\\n \'UA-<YOUR-OLD-UA-ID>\',\\n ],\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n**[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/)** on **July 1, 2023**.\\n\\nDocusaurus users should migrate to Google Analytics 4. Google **does not permit to migrate your existing Universal Analytics data** to your new Google Analytics 4 property.\\n\\nTo preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (`UA-*`) and new one (`G-*`). Refer to the **[dedicated issue](https://github.com/facebook/docusaurus/issues/7221)** for details.\\n\\n:::\\n\\n### Developer Experience\\n\\nIn [#8736](https://github.com/facebook/docusaurus/pull/8736), we improved how we render error messages and added initial support to render the full causal chain of an error (see [ES2022 Error Cause](https://h3manth.com/ES2022/#error-cause)).\\n\\n:::tip\\n\\nTo see it in action, click here: <ErrorBoundaryTestButton cause=\\"Probably undefined is not a function \ud83d\ude04\\"/>\\n\\n:::\\n\\nIn [#8735](https://github.com/facebook/docusaurus/pull/8735) we also made navbar-related error messages clearer to help users understand what they did wrong.\\n\\n![Docusaurus navbar error message screenshot](./img/navbar-error.jpg)\\n\\n### Translations\\n\\nWe made it possible to translate some new elements:\\n\\n- [#8677](https://github.com/facebook/docusaurus/pull/8677) introduces a new `process.env.DOCUSAURUS_CURRENT_LOCALE` (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...\\n- [#8616](https://github.com/facebook/docusaurus/pull/8616) allows to translate the navbar and footer logo alt text\\n\\nWe added default theme translation support for multiple languages:\\n\\n- \ud83c\udded\ud83c\uddfa [#8668](https://github.com/facebook/docusaurus/pull/8668): Hungarian\\n- \ud83c\uddf3\ud83c\uddf4 [#8631](https://github.com/facebook/docusaurus/pull/8631): Norwegian (Bokm\xe5l)\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8674](https://github.com/facebook/docusaurus/pull/8674): respect `prefers-reduced-motion: reduce` media query\\n- [#8712](https://github.com/facebook/docusaurus/pull/8712): use a navbar item of type `docSidebar` in template\\n- [#8801](https://github.com/facebook/docusaurus/pull/8801): allow tabs children to be falsy\\n- [#8757](https://github.com/facebook/docusaurus/pull/8757): make search page react to external query-string changes\\n- [#8803](https://github.com/facebook/docusaurus/pull/8803): fix code block buttons position in RTL\\n- [#8615](https://github.com/facebook/docusaurus/pull/8615): fix color mode toggle when using dark navbar\\n- [#8699](https://github.com/facebook/docusaurus/pull/8699): fix navbar dropdown tab focus bug\\n\\nCheck the **[2.4.0 changelog entry](/changelog/2.4.0)** for an exhaustive list of changes."},{"id":"/releases/2.3","metadata":{"permalink":"/blog/releases/2.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx","source":"@site/blog/releases/2.3/index.mdx","title":"Docusaurus 2.3","description":"We are happy to announce Docusaurus 2.3.","date":"2023-01-27T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.89,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-01-27T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1694767701000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"},"nextItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"}},"content":"We are happy to announce **Docusaurus 2.3**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Google Tag Manager plugin\\n\\nGoogle Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.\\n\\nWe now have a [`@docusaurus/plugin-google-tag-manager`](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/) package that you can use alongside or as an alternative to the existing [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/) (refer to [this doc](https://support.google.com/tagmanager/answer/7582054) to understand when to use which solution).\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/) on **July 1, 2023**, and ask users to migrate to **Google Analytics 4**.\\n\\nTherefore, we are also **deprecating our existing [`@docusaurus/plugin-google-analytics`](/docs/api/plugins/@docusaurus/plugin-google-analytics)** package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/), or the [Google Tag Manager plugin](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/). Refer to the [dedicated Docusaurus issue](https://github.com/facebook/docusaurus/issues/7221) for details and questions.\\n\\n:::\\n\\n### Tabs Query String Support\\n\\nIt is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a `?qs-param=tab-value` search parameter.\\n\\nThis feature allows deep-linking to a specific documentation tab that will pre-selected on page load.\\n\\nWhen used alongside the `groupId` prop, the query string tab value takes precedence over the `localStorage` value.\\n\\nMake sure to check the [documentation](/docs/markdown-features/tabs#query-string) and the demo below to understand how it works:\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n```tsx\\n<Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n</Tabs>\\n```\\n\\n<BrowserWindow>\\n <Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n </Tabs>\\n</BrowserWindow>\\n\\n### Nested admonitions\\n\\nIt is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:\\n\\n```md\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n```\\n\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n\\n### Blog `createFeedItems`\\n\\nA new blog plugin option [`feedOptions.createFeedItems`](/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn) gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\n[\\n \'@docusaurus/preset-classic\',\\n {\\n blog: {\\n feedOptions: {\\n // highlight-start\\n createFeedItems: async (params) => {\\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\\n return defaultCreateFeedItems({\\n // keep only the 10 most recent blog posts in the feed\\n blogPosts: blogPosts.filter((item, index) => index < 10),\\n ...rest,\\n });\\n },\\n // highlight-end\\n },\\n },\\n },\\n];\\n```\\n\\n### Translations\\n\\nWe added or completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf8\ud83c\uddee [#8541](https://github.com/facebook/docusaurus/pull/8541) Slovenian\\n- \ud83c\uddf9\ud83c\uddf7 [#8289](https://github.com/facebook/docusaurus/pull/8289) Turkish\\n- \ud83c\uddee\ud83c\uddf7 [#8406](https://github.com/facebook/docusaurus/pull/8406) Farsi\\n- \ud83c\uddf5\ud83c\uddf1 [#8525](https://github.com/facebook/docusaurus/pull/8525) Polish\\n- \ud83c\udde8\ud83c\uddf3 [#8423](https://github.com/facebook/docusaurus/pull/8423) Chinese\\n- \ud83c\uddf8\ud83c\uddea [#8312](https://github.com/facebook/docusaurus/pull/8312) Swedish\\n- \ud83c\uddfb\ud83c\uddf3 [#8450](https://github.com/facebook/docusaurus/pull/8450) Vietnamese\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8463](https://github.com/facebook/docusaurus/pull/8463) and [#8328](https://github.com/facebook/docusaurus/pull/8328): fix some annoying Docusaurus layout issues\\n- [#8539](https://github.com/facebook/docusaurus/pull/8539): Algolia plugin `options.searchPagePath` should be correctly applied to search modal footer\\n- [#8462](https://github.com/facebook/docusaurus/pull/8462): Algolia plugin now makes it easier to transform displayed search results with custom logic\\n- [#8397](https://github.com/facebook/docusaurus/pull/8397): the `deploy` CLI now understands git url `insteadOf` config\\n\\nCheck the **[2.3.0 changelog entry](/changelog/2.3.0)** for an exhaustive list of changes."},{"id":"/releases/2.2","metadata":{"permalink":"/blog/releases/2.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx","source":"@site/blog/releases/2.2/index.mdx","title":"Docusaurus 2.2","description":"We are happy to announce Docusaurus 2.2.","date":"2022-10-29T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.2,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2022-10-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1682099337000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"},"nextItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"}},"content":"We are happy to announce **Docusaurus 2.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n## Highlights\\n\\n### Mermaid diagrams\\n\\nIn [#7490](https://github.com/facebook/docusaurus/pull/7490), we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also [added support recently](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/). You can create Mermaid diagrams using Markdown code blocks:\\n\\n````md\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n````\\n\\n````mdx-code-block\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\n\\n<BrowserWindow>\\n\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n\\n</BrowserWindow>\\n\\n````\\n\\nMake sure to check the [documentation](/docs/markdown-features/diagrams), and the [more advanced examples](/tests/pages/diagrams)\\n\\n### Config `headTags`\\n\\nIn [#8151](https://github.com/facebook/docusaurus/pull/8151), we added the ability to apply arbitrary HTML `<head>` tags to all pages of your site.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n headTags: [\\n {\\n tagName: \'link\',\\n attributes: {\\n rel: \'icon\',\\n href: \'/img/docusaurus.png\',\\n },\\n },\\n ],\\n};\\n```\\n\\n### Accessibility\\n\\nWe did several accessibility improvements:\\n\\n- [#8207](https://github.com/facebook/docusaurus/pull/8207): improves keyboard navigation for mobile drawer hamburger button\\n- [#8161](https://github.com/facebook/docusaurus/pull/8161): improves keyboard navigation for tabs\\n- [#8204](https://github.com/facebook/docusaurus/pull/8204): makes the skip to content button support progressive enhancement\\n- [#8174](https://github.com/facebook/docusaurus/pull/8174): improves screen reader announcement when toggling between light/dark mode\\n\\n### Developer Experience\\n\\nWe made validation stricter and improved error messages:\\n\\n- [#8234](https://github.com/facebook/docusaurus/pull/8234): in case of doc processing failure, prints the problematic markdown file path in the error message\\n- [#8192](https://github.com/facebook/docusaurus/pull/8192) and [#8159](https://github.com/facebook/docusaurus/pull/8159): validates `siteConfig.url` more strictly and with better error message\\n- [#8066](https://github.com/facebook/docusaurus/pull/8066): makes config `url` and `baseUrl` fail-safe and less sensitive to the presence or absence of a leading or trailing slash\\n\\n### Translations\\n\\nWe completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf9\ud83c\uddf7 [#8105](https://github.com/facebook/docusaurus/pull/8105): completes Turkish translations\\n- \ud83c\uddf7\ud83c\uddfa [#8253](https://github.com/facebook/docusaurus/pull/8253): completes Russian translations\\n- \ud83c\uddeb\ud83c\uddf7 [#8243](https://github.com/facebook/docusaurus/pull/8243): completes French translations\\n- \ud83c\uddef\ud83c\uddf5 [#8075](https://github.com/facebook/docusaurus/pull/8075): completes Japanese translations\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8210](https://github.com/facebook/docusaurus/pull/8210): the `docusaurus swizzle` CLI has a new `--config` option\\n- [#8109](https://github.com/facebook/docusaurus/pull/8109): mobile navigation performance optimizations, prefetch resources earlier\\n- [#8059](https://github.com/facebook/docusaurus/pull/8059): versions/locales navbar dropdowns preserve hash and querystring on navigation\\n- [#8227](https://github.com/facebook/docusaurus/pull/8227): the client redirect plugin preserves hash and querystring on redirect\\n\\nCheck the **[2.2.0 changelog entry](/changelog/2.2.0)** for an exhaustive list of changes."},{"id":"/2022/09/01/docusaurus-2.1","metadata":{"permalink":"/blog/2022/09/01/docusaurus-2.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx","source":"@site/blog/2022/09-01-docusaurus-2.1/index.mdx","title":"Docusaurus 2.1","description":"We are happy to announce Docusaurus 2.1, our very first minor version release.","date":"2022-09-01T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"},"nextItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"}},"content":"We are happy to announce **Docusaurus 2.1**, our very first minor version release.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.1 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### DocCardList improvements\\n\\nIn [#8008](https://github.com/facebook/docusaurus/pull/8008), we simplified the usage of the`<DocCardList>` component, that is notably used on sidebar category generated index pages.\\n\\nThe `items` prop is now optional, and will be automatically inferred from the content of the parent sidebar category:\\n\\n```diff\\nimport DocCardList from \'@theme/DocCardList\';\\n- import {useCurrentSidebarCategory} from \'@docusaurus/theme-common\';\\n\\n- <DocCardList items={useCurrentSidebarCategory().items}/>\\n+ <DocCardList/>\\n```\\n\\nAlso, we made it possible to use it on any document, including regular docs not linked to any sidebar category.\\n\\n![simplified DocCardList component](./img/doc-card-list.png)\\n\\n### `noindex` improvements\\n\\nWe improved the support of the [`noindex` meta `robots` directive](https://developers.google.com/search/docs/advanced/crawling/block-indexing), a way to signal search engines you don\'t want a specific page to be indexed.\\n\\nIn [#7963](https://github.com/facebook/docusaurus/pull/7963), we allow `noindex` to be configured on a per-docs-version basis.\\n\\nUse the following plugin options to tell crawlers you don\'t want the `1.0.0` version to be indexed:\\n\\n```jsx\\nconst options = {\\n versions: {\\n \'1.0.0\': {\\n noIndex: true,\\n },\\n },\\n};\\n```\\n\\nIn practice, Docusaurus will add the following meta to each page of that version:\\n\\n```html\\n<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />\\n```\\n\\nIn [#7964](https://github.com/facebook/docusaurus/pull/7964), we also fixed a bug where the sitemap plugin would still contain pages that have a `noindex` directive. Now the sitemap plugin will reliably filter out all the pages containing `noindex` directives.\\n\\n### Overriding default meta tags\\n\\nIn [#7952](https://github.com/facebook/docusaurus/pull/7952), it becomes possible to override default html meta tags you couldn\'t before:\\n\\n```jsx\\n<>\\n {siteConfig.noIndex && <meta name=\\"robots\\" content=\\"nofollow, noindex\\" />}\\n <meta name=\\"viewport\\" content=\\"width=device-width, initial-scale=1.0\\" />\\n</>\\n```\\n\\nIt is now possible to use `<Head>` or `themeConfig.metadata`:\\n\\n- to override the `viewport` meta\\n- to override the `robots` meta: you could mark your site as `noIndex`, but except for specific pages that should be indexed\\n\\n### Ukrainian translations\\n\\nIn [#7953](https://github.com/facebook/docusaurus/pull/7953), we added default classic theme translations for the Ukrainian language.\\n\\n## Other changes\\n\\nCheck the [2.1.0 changelog entry](/changelog/2.1.0) for an exhaustive list of changes."},{"id":"/2022/08/01/announcing-docusaurus-2.0","metadata":{"permalink":"/blog/2022/08/01/announcing-docusaurus-2.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","source":"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","title":"Announcing Docusaurus 2.0","description":"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f","date":"2022-08-01T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":12.075,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://twitter.com/zpao","email":"jimarcey@gmail.com","twitter":"zpao","imageURL":"https://github.com/zpao.png","key":"zpao"},{"name":"Joel Marcey","title":"Co-creator of Docusaurus 1","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Announcing Docusaurus 2.0","authors":["slorber","Josh-Cena","yangshun","lex111","zpao",{"key":"JMarcey","title":"Co-creator of Docusaurus 1"}],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"},"nextItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"}},"content":"```mdx-code-block\\nimport LiteYouTubeEmbed from \'react-lite-youtube-embed\';\\nimport \'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css\';\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport ProductHuntCard from \'@site/src/components/ProductHuntCard\';\\nimport HackerNewsIcon from \'@site/src/components/HackerNewsIcon\';\\nimport ColorModeToggle from \'@theme/Navbar/ColorModeToggle\';\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\nimport ThemedImage from \'@theme/ThemedImage\';\\nimport {ShowcaseCarouselV1, ShowcaseCarouselV2, ShowcaseCarouselV2Theming} from \'./ShowcaseCarousel\';\\n```\\n\\nToday we are extremely happy to finally **announce Docusaurus 2.0**! \ud83e\udd73\ufe0f\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nAfter **4 years of work, [75 alphas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75) and [22 betas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22)**, the next generation of Docusaurus is **ready for prime time**. From now on, we now plan to **respect [Semantic Versioning](https://semver.org/)** and will release **major versions more frequently**.\\n\\n![social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n**Now** is the best time to show your love for Docusaurus!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n:::tip\\n\\nIn a hurry? Check [what\'s new in Docusaurus 2.0](#whats-new-in-20)!\\n\\n:::\\n\\n## What is Docusaurus exactly?\\n\\nDocusaurus is a **static site generator** that helps you ship **beautiful documentation websites** in **no time**.\\n\\nFocus on your content: just write **Markdown files**. Docusaurus will generate an optimized **website** for you that\'s easy to **host anywhere**.\\n\\nDocusaurus is **full-featured** and very **flexible**: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to **adapt the UI to match your branding** so that it integrates nicely with your main website or documentation portal. Its usage of **React** enables a **modern client-side navigation**, and the ability to build an **interactive documentation**.\\n\\n![Introducing Slash](/img/slash-introducing.svg)\\n\\nThe Docusaurus philosophy is akin to the **Pareto principle**: you can get **80% of the results** for **20% of the effort**. This enables you to compete with top-notch documentation sites with **minimal effort**.\\n\\n<TweetQuote\\n url=\\"https://twitter.com/rachelnabors/status/1452697991039660038\\"\\n handle=\\"rachelnabors\\"\\n name=\\"Rachel Nabors\\"\\n job=\\"Former ReactJS & React-Native docs manager\\">\\n Unless you\'re spinning up a documentation team with engineering resources, you\\n probably want Docusaurus!\\n</TweetQuote>\\n\\nDocusaurus aims to be the **best documentation tool**, but you can use it for **other use-cases** as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!\\n\\n<TweetQuote\\n url=\\"https://twitter.com/johnny_reilly/status/1551861926334025728\\"\\n handle=\\"johnny_reilly\\"\\n name=\\"Johnny Reilly\\"\\n job=\\"Group Principal Engineer at Investec\\">\\n Using Docusaurus for my tech blog has been a fantastic choice. It looks\\n tremendous out-of-the-box and the awesome DX means I write way more\\n</TweetQuote>\\n\\n:::tip\\n\\nTry Docusaurus now with our [online playgrounds](/docs/playground) and [5 minutes tutorial](https://tutorial.docusaurus.io/) \u23f1\ufe0f\\n\\n:::\\n\\n## The story behind Docusaurus\\n\\nDocusaurus was created at **Facebook Open Source** in **2017** (now [Meta Open Source](https://opensource.fb.com/)). We had a lot of internal and open source projects to document. It\'s **complicated enough to write good documentation**, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to **focus on the content**, and **Markdown** is great for that.\\n\\nAt that time, our solution was to **copy/paste a Jekyll template** over and over again. This naturally became **hard to maintain**, so we created a tool to **solve our own pain** once for all.\\n\\n**[Docusaurus v1 was born](/blog/2017/12-14-introducing-docusaurus.mdx)!**\\n\\n![Birth of Slash](/img/slash-birth.png)\\n\\nIt quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as [Prettier](https://prettier.io/), [Babel](https://babeljs.io/), [React-Native](https://archive.reactnative.dev/), [KaTeX](https://katex.org/docs/), and of course [Docusaurus v1](http://v1.docusaurus.io/) itself.\\n\\n<ShowcaseCarouselV1 />\\n\\n<br />\\n\\n:::note\\n\\nNotice that the sample sites above use different colors, but still look quite the same.\\n\\n:::\\n\\n## Toward Docusaurus 2.0\\n\\n[**Docusaurus v1**](http://v1.docusaurus.io/) has been very successful, but we started to **question some architectural choices**:\\n\\n- React was only used as a **server-side templating language**, and not used on the client\\n- **Theming system was pretty limited**, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations\\n- The **docs versioning system was confusing**, since it was based on a diff algorithm\\n- The codebase was **monolithic**, neither well-tested nor easy to extend\\n\\n[**Docusaurus v2**](https://docusaurus.io/) was **rebuilt** from the ground up with a new **modular architecture**:\\n\\n- React is now also used on the client, enabling a **modern Single Page Application navigation**\\n- **Plugins** empower the community to contribute useful features as third-party packages\\n- **Theming** is more **flexible** than ever\\n- Docs versioning is now based on snapshot copies, much easier to understand\\n- We kept **everything good from v1**: docs, blog, pages, versioning, i18n...\\n- We implemented **several new features**\\n\\nMore details in the [Docusaurus 2 project announcement](/blog/2018/09-11-Towards-Docusaurus-2.mdx) and [v1 to v2 migration guide](https://docusaurus.io/docs/migration)\\n\\n## Who uses Docusaurus 2.0?\\n\\nDespite being in pre-release, it didn\'t take long for **Docusaurus v2 to outgrow Docusaurus v1** in terms of NPM downloads:\\n\\n[![NPM downloads: v2 outgrows v1](./img/npm-downloads.png)](https://npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nOur GitHub star trend is very positive, competing with major frameworks:\\n\\n[![GitHub stars: Docusaurus is well-positioned](./img/star-history.png)](https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline)\\n\\nToday, Docusaurus v2 has already been a great success even before its launch:\\n\\n- We received so many [lovely testimonials](https://twitter.com/sebastienlorber/timelines/1392048416872706049)\\n- Companies like [1Password](https://blog.1password.com/docusaurus-documentation-framework/) and [Courier](https://www.courier.com/blog/how-we-built-our-documentation/) are writing down their positive experience\\n- Our [site showcase](/showcase) references hundreds of sites, and this is only the tip of the iceberg.\\n\\n<ShowcaseCarouselV2 />\\n\\n<br />\\n\\n:::tip\\n\\nPlease add your site to our [site showcase](/showcase)! It only takes a few seconds: just [post a comment here](https://github.com/facebook/docusaurus/discussions/7826).\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/maxlynch/status/1549415692704825346\\"\\n handle=\\"maxlynch\\"\\n name=\\"Max Lynch\\"\\n job=\\"Ionic co-founder and CEO\\">\\n We use Docusaurus everywhere now and love it\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/supabase/status/1328960757149671425\\"\\n handle=\\"supabase\\"\\n name=\\"Supabase\\"\\n job=\\"Open Source Firebase alternative\\">\\n We\'ve been using V2 since January and it has been great\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/gabrielcsapo/status/1415061312917233665\\"\\n handle=\\"gabrielcsapo\\"\\n name=\\"Gabriel Csapo\\"\\n job=\\"Staff Software Engineer at LinkedIn\\">\\n Docusaurus is next level easy for literally everything you would need for\\n documentation in your project.\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/ItWasMattGregg/status/1526682295075102721\\"\\n handle=\\"ItWasMattGregg\\"\\n name=\\"Matt Gregg\\"\\n job=\\"Senior Front End Developer at Shopify\\">\\n Docusaurus is awesome. We use it\\n</TweetQuote>\\n\\n## What\'s New in 2.0?\\n\\nIt would be difficult to describe every single new feature coming with Docusaurus v2. Let\'s focus on the features we believe are the **most impactful**.\\n\\n### MDX\\n\\n[MDX](https://github.com/mdx-js/mdx) allows you to **interleave React components** in Markdown. This enables you to build top-notch **interactive documentation experiences** very easily.\\n\\nA demo is worth a thousand words:\\n\\n```md title=\\"docs/my-document.mdx\\"\\n### Give it a try: press that button!\\n\\nimport ColorModeToggle from \'@theme/ColorModeToggle\';\\n\\n<ColorModeToggle/>\\n```\\n\\n```mdx-code-block\\n<BrowserWindow>\\n\\n<h3>Give it a try: press that button!</h3>\\n\\n<ColorModeToggle/>\\n\\n</BrowserWindow>\\n```\\n\\n:::info\\n\\nMDX has its own [plugin system](https://mdxjs.com/docs/extending-mdx/). You to customize your Markdown authoring experience, and even create your own Markdown syntax.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/HamelHusain/status/1551962275250053123\\"\\n handle=\\"HamelHusain\\"\\n name=\\"Hamel Husain\\"\\n job=\\"Head Of Data Science at Outerbounds\\">\\n Docusaurus + MDX is great: we were able to implement a beautiful two-pane\\n layout and give the author fine-grained control on the placement of code and\\n corresponding prose.\\n</TweetQuote>\\n\\n### File system conventions\\n\\nOur goal is to make Docusaurus very **intuitive** to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.\\n\\n<LiteYouTubeEmbed\\n id=\\"T3S8GyFIXjo\\"\\n params=\\"autoplay=1&autohide=1&showinfo=0&rel=0\\"\\n title=\\"Explain Like I\'m 5: Docusaurus\\"\\n poster=\\"maxresdefault\\"\\n webp\\n/>\\n\\n<br />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/paularmstrong/status/1552005085168865281\\"\\n handle=\\"paularmstrong\\"\\n name=\\"Paul Armstrong\\"\\n job=\\"Principal Engineer at Microsoft\\">\\n Using the auto-generated sidebars makes it so simple to just create a page and\\n not worry about any other configuration.\\n</TweetQuote>\\n\\n### Plugins\\n\\nDocusaurus now has a **modular architecture** with a plugin system \u2014 our **core features** like docs, blog, pages, and search are all powered by individual plugins.\\n\\nMore importantly, it enables our community to **enhance Docusaurus** with additional features.\\n\\nLet\'s highlight some examples:\\n\\n- [redocusaurus](https://github.com/rohit-gohri/redocusaurus): seamless integration with [OpenAPI](https://www.openapis.org/) and [Redoc](https://github.com/Redocly/redoc)\\n\\n![redocusaurus plugin example](./img/plugins/redocusaurus.png)\\n\\n- [docusaurus-preset-shiki-twoslash](https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash): use [Shiki](https://github.com/shikijs/shiki) code block syntax highlighting with [TwoSlash](https://shikijs.github.io/twoslash/) TypeScript compiler hints\\n\\n![shiki-twoslash plugin example](./img/plugins/shiki-twoslash.png)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/orta\\"\\n handle=\\"orta\\"\\n name=\\"Orta Therox\\"\\n job=\\"Former TypeScript core team at Microsoft\\">\\n The plugin API was a breeze to use, and powerful enough that I could port the\\n code sample renderer from the TypeScript website site in a couple of hours.\\n</TweetQuote>\\n\\n- [docusaurus-search-local](https://github.com/easyops-cn/docusaurus-search-local): one of the various local search alternatives to the built-in Algolia plugin\\n\\n![local search plugin example](./img/plugins/search.png)\\n\\n:::tip\\n\\nWe have a curated list of outstanding plugins in our [community resources](/community/resources) page.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/jodyheavener/status/1551974535452311552\\"\\n handle=\\"jodyheavener\\"\\n name=\\"Jody Heavener\\"\\n job=\\"Senior Developer at 1Password\\">\\n The plugin system in Docusaurus v2 has made expanding 1Password\'s developer\\n portal so easy and fun. Super excited to show you what we\'ve got cooking up.\\n</TweetQuote>\\n\\n### Theming\\n\\nTheming is one of the most important features of Docusaurus: we believe a professional documentation site should **respect your company\'s branding** and create a consistent experience.\\n\\nDocusaurus theming gives a lot of **flexibility** on multiple levels:\\n\\n- Customize CSS variables to adjust colors, fonts, and more\\n- Provide your own CSS stylesheets\\n- Implement your own theme from scratch\\n- **Override any React component** provided by our default theme: we call this [swizzling](https://docusaurus.io/docs/swizzling)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/hung_dev/status/1546918275065741312\\"\\n handle=\\"hung_dev\\"\\n name=\\"\\nHung Viet Nguyen\\"\\n job=\\"Creator of JestPreview\\">\\n I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\\n time. This is super cool since a framework usually needs to sacrifice one for\\n the other.\\n</TweetQuote>\\n\\nThis enables users willing to invest a bit more time on **customizations** to build sites that **look different** from others.\\n\\n<ShowcaseCarouselV2Theming />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/dabit3/status/1382855449813389315\\"\\n handle=\\"dabit3\\"\\n name=\\"Nader Dabit\\"\\n job=\\"Web3 developer, Developer DAO founder\\">\\n So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\\n way that we wanted it to look. No blockers at all.\\n</TweetQuote>\\n\\n### Other features\\n\\nDocusaurus 2 comes with a very long list of useful features:\\n\\n- Theme: dark mode, better UI and UX, flexible `themeConfig` options...\\n- Docs versioning: flexible plugin options to adapt to your workflow\\n- Docs sidebar: collapsible category, category index pages...\\n- Blog: multiple authors, authors map, archive page...\\n- Markdown: tabs, math equations, live code blocks, linking, flexible front matter...\\n- Search: use the new Algolia DocSearch 3 experience\\n- Assets: make it easy to incorporate images and other kinds of files\\n- Internationalization: config options, default theme translations...\\n- Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...\\n- SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...\\n- PWA: add offline support to your site, and make it installable\\n- Fail-fast: strict config validation, detect broken links, and prevent bad production deployments\\n- TypeScript support for config files, plugins, custom pages and theme authors\\n- Playgrounds: assess Docusaurus easily from your browser with [docusaurus.new](https://docusaurus.new)\\n- Canary releases: use the @canary npm tag to use the upcoming release before anyone else\\n- Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working\\n\\n<TweetQuote\\n url=\\"https://twitter.com/alexbdebrie/status/1540010328335032320\\"\\n handle=\\"alexbdebrie\\"\\n name=\\"Alex DeBrie\\"\\n job=\\"AWS Data Hero, author of The DynamoDB Book\\">\\n Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\\n a good bit of configuration without being overwhelming, and the ability to\\n really customize the styling if you\'re braver than I am.\\n</TweetQuote>\\n\\n## Why 2.0 now?\\n\\nMany enthusiastic followers of ours have been curious **why it took us 4 years to release Docusaurus 2.0**, considering the beta is already successful and **widely used in production**.\\n\\nThe reason is that we aim to **respect [Semantic Versioning](https://semver.org/)**, which means we will be incrementing the major version number whenever we release a **breaking change**.\\n\\nIt is important for multiple reasons:\\n\\n- It **guarantees simple minor version upgrades**, as long as you only use the [public API](/community/release-process#public-api-surface)\\n- It follows front-end ecosystem conventions\\n- A new major version is an opportunity to thoroughly document breaking changes\\n- A new major/minor version is an opportunity to communicate new features through a blog post\\n\\nThe problem is that our flexible theming system inherently creates a very **implicit API surface** on which it is **hard to know what is a breaking change** in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our [public API](/community/release-process#public-api-surface), so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.\\n\\n:::info\\n\\nFrom now on, Docusaurus will **release new major versions more frequently**. In practice, you can expect a **new major version every 2 to 4 months**.\\n\\n[Major version numbers are not sacred](https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html), but we still group breaking changes together and avoid releasing major versions too often.\\n\\nCheck our [release process](/community/release-process) documentation for details.\\n\\n:::\\n\\n## What\'s Next?\\n\\n![Slash Up and Running](/img/slash-up-and-running.png)\\n\\nThe work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will **backport retro-compatible changes in Docusaurus 2.x** minor versions to make them available as soon as possible to the community on a stable channel.\\n\\nA sample of the features on our roadmap for the upcoming major versions of Docusaurus:\\n\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- [Improve Markdown infrastructure](https://github.com/facebook/docusaurus/issues/4625)\\n- [Improve theming and swizzle](https://github.com/facebook/docusaurus/issues/6114)\\n- [TailwindCSS theme](https://github.com/facebook/docusaurus/issues/2961)\\n- [Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer](https://github.com/facebook/docusaurus/issues/7227)\\n- [Dynamic navbar: navbar item activation strategies](https://github.com/facebook/docusaurus/issues/4389)\\n- [Custom Social Cards](https://github.com/facebook/docusaurus/issues/2968)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Use Node.js ES Modules](https://github.com/facebook/docusaurus/issues/6520)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n\\n## Thank You\\n\\nWe\'d like to express our gratitude to [all our contributors](https://github.com/facebook/docusaurus/graphs/contributors), including:\\n\\n- The Docusaurus core team: [Alexey Pyltsyn](https://github.com/lex111), [Joshua Chen](https://github.com/Josh-Cena), [S\xe9bastien Lorber](https://github.com/slorber), [Yangshun Tay](https://github.com/yangshun) and all our [former team members](https://docusaurus.io/community/team)\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source\\n- [Paul O\u2019Shannessy](https://github.com/zpao) for supporting the development of all the next versions of Docusaurus at Meta Open Source\\n- [Eric Nakagawa](https://github.com/ericnakagawa) for creating our cutest mascot Slash\\n- [Endilie Yacop Sucipto](https://github.com/endiliey) for his significant [initial work on Docusaurus v2](/blog/2020/01-07-tribute-to-endi.mdx)\\n- [Cl\xe9ment Vannicatte](https://github.com/shortcuts), [Kevin Granger](https://github.com/Shipow) and the whole Algolia team for their support\\n- All the community members for making valuable code contributions, improving our documentation, and answering questions on [Discord](https://discordapp.com/invite/docusaurus)\\n\\nWe\'d like to thank in particular all our **Docusaurus 2.0 early adopters** for assessing its alpha, beta and canary releases, providing a ton of **invaluable feedback**. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.\\n\\nAt [Meta Open Source](https://opensource.fb.com/), Docusaurus is one of our **most successful projects**. We can\'t wait to see all the outstanding documentation websites that you will create! Don\'t forget to **submit them to our [site showcase](/showcase)**!\\n\\n**Now, let your imagination run wild \ud83e\udd2a!**\\n\\n\u2014 Slash\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n\ud83d\ude4f Share your experience using Docusaurus with the community!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n![Slash plushies](./img/slash-plushies.jpg)"},{"id":"/2022/01/24/docusaurus-2021-recap","metadata":{"permalink":"/blog/2022/01/24/docusaurus-2021-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx","source":"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx","title":"Docusaurus 2021 Recap","description":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed 30k stars on GitHub!","date":"2022-01-24T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":6.01,"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"}],"frontMatter":{"title":"Docusaurus 2021 Recap","authors":["Josh-Cena"],"tags":["recap"],"image":"./img/thumbnail.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"},"nextItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"}},"content":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed **30k stars on GitHub**!\\n\\nWe\'ve **reached full feature parity** with v1 after [the release of internationalization](/blog/2021/03-09-releasing-docusaurus-i18n.mdx), [announced our **first beta**](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx), and welcomed **significantly more users** this year.\\n\\nThe **official v2 release** is just around the corner! Follow the [roadmap issue](https://github.com/facebook/docusaurus/issues/6113) for any latest news.\\n\\n![](./img/thumbnail.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\nLet\'s begin by going over a few highlights this year. Remember the [todo-list](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx#whats-next) from half a year ago? Time to take it out again and see how far we\'ve come!\\n\\n- **Internationalization**: officially released four months after its initial landing in late 2020. Seen great success in [many projects](/showcase?tags=i18n)\\n- **Autogenerated sidebars**: no need to maintain a big `sidebars.js` anymore\\n- **Webpack 5**: significantly improved build performance\\n- **Trailing slash config**: seamless integration with any content hosting provider\\n- **Redesigned mobile navigation**: mobile users now enjoy all navigation features as on desktop\\n- **UI improvements**: more accessible quotes, better admonitions, back-to-top button...\\n- **Blog multi-authors**: credit all the amazing contributors that collaborated on one blog post!\\n- **More blog features**: archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time\\n- **Asset collocation**: no need for a bloated static folder anymore: colocate your images with Markdown files\\n- **Sidebar category index pages**: category labels can now be associated with pages, enabling better doc organization\\n\\nOur codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!\\n\\n## Trends\\n\\n### npm\\n\\nDocusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.\\n\\n[![Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There\'s a sharp drop from 90000 to 40000 just before the Jan 2022 line.](./img/npm-trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\n(Ah, the classic Christmas dip...)\\n\\nWe released 18 versions, going from `2.0.0-alpha.71` to `2.0.0-beta.14`. That\'s one release every 20 days!\\n\\n### GitHub\\n\\n- **Stars**: 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!\\n- **Total contributors**: 512 \u2192 773 (+51.0% y/y)\\n- **Dependents**: 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1\\n- **Commits**: 1,187 commits in the past year, averaging 23 commits every week\\n- **Issues**: 619 issues opened, 505 of them eventually resolved\\n- A [**new core team member**](https://github.com/Josh-Cena) (yep, that\'s me \ud83d\ude1d)\\n\\nOur star trend is also very positive. Compared to similar projects, we are **growing at a faster rate**:\\n\\n![Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.](./img/star-history.png)\\n\\nWith an 8.4k increase in stars, we are ranked number 3 in this year\'s [JavaScript rising stars of static site generators](https://risingstars.js.org/2021/en#section-ssg), preceded only by Next.js and Astro.\\n\\n![Docusaurus placing 3rd in the \\"Static Sites\\" ranking list](./img/rising-stars.png)\\n\\n## Featured adoptions\\n\\nOur showcase has welcomed a few new [\\"favorite\\" sites](/showcase?tags=favorite) that showcase the true potential of Docusaurus 2\'s pluggable architecture.\\n\\n- [**IOTA-wiki**](https://wiki.iota.org/)\\n\\n![Iota wiki light mode](./img/iota-light.png#gh-light-mode-only)![Iota wiki dark mode](./img/iota-dark.png#gh-dark-mode-only)\\n\\n- [**Dyte**](https://docs.dyte.io/docs/home/introduction/)\\n\\n![Dyte light mode](./img/dyte-light.png#gh-light-mode-only)![Dyte dark mode](./img/dyte-dark.png#gh-dark-mode-only)\\n\\n- [**Ionic**](https://ionicframework.com/docs)\\n\\n![Ionic light mode](./img/ionic-light.png#gh-light-mode-only)![Ionic dark mode](./img/ionic-dark.png#gh-dark-mode-only)\\n\\n- [**Courier**](https://www.courier.com/docs/)\\n\\n![Courier](./img/courier.png)\\n\\nThe creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to [have it in our showcase](https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx).\\n\\n## Community\\n\\nAs an active moderator on [Discord](https://discord.gg/docusaurus), I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer.\\n\\nWe are constantly mentioned on Twitter with inspirational feedback:\\n\\n> **@docusaurus** is amazing! cant believe it\'s THAT simple to use.\\n\\n> No extra plugins, tooling or compilation steps. It just works out of the box.\\n\\n> I love **@docusaurus**. I couldn\'t have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.\\n\\nAnd we keep every one of them in [our little box](https://twitter.com/sebastienlorber/timelines/1392048416872706049) \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!\\n\\nAs we approach the official release, we are interested in knowing more about what people are doing out there: [plugin authors](https://github.com/facebook/docusaurus/discussions/4025), [creators of customized sites](https://github.com/facebook/docusaurus/discussions/5468), and [all new users](https://github.com/facebook/docusaurus/discussions/4610) \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs.\\n\\n## Going forward\\n\\nIn the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it\'s almost there. We have created a dedicated [milestone](https://github.com/facebook/docusaurus/milestone/15) to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a **more robust theming workflow**, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:\\n\\n- Guidelines on **component organization**. We want the theme components to have the right granularity so when you want to customize a part of your site, there\'s always a component doing just what you need.\\n- Improvements to the **swizzle CLI**. We want users to use it with delight and let it aid you through all possible swizzling scenarios.\\n- Refactoring our **theme APIs**. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.\\n- **Docs**. We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.\\n\\nRead more about plans for Docusaurus 2.0 in this [roadmap issue](https://github.com/facebook/docusaurus/issues/6113). 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!\\n\\nAs the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for [architectural changes in 3.0](https://github.com/facebook/docusaurus/milestone/16)!\\n\\nWith the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.\\n\\nWe\'d like to express our gratitude to [all the contributors in 2021](https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c), including:\\n\\n- The core team: [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://github.com/slorber), [Joshua Chen](https://github.com/Josh-Cena), and [Yangshun Tay](https://github.com/yangshun) for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting its development all along\\n- The Algolia team for helping Docusaurus users [migrate to the new DocSearch](/blog/2021/11-21-algolia-docsearch-migration/index.mdx) and answering search-related questions\\n- All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord\\n\\nSo long, 2021, and let\'s greet a great 2022!"},{"id":"/2021/11/21/algolia-docsearch-migration","metadata":{"permalink":"/blog/2021/11/21/algolia-docsearch-migration","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx","source":"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx","title":"DocSearch migration","description":"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.","date":"2021-11-21T00:00:00.000Z","tags":[{"label":"search","permalink":"/blog/tags/search"}],"readingTime":2.96,"hasTruncateMarker":true,"authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","image_url":"https://github.com/shortcuts.png","twitter":"sh0rtcts","imageURL":"https://github.com/shortcuts.png"},{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"DocSearch migration","authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","image_url":"https://github.com/shortcuts.png","twitter":"sh0rtcts","imageURL":"https://github.com/shortcuts.png"},{"key":"slorber"}],"tags":["search"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"},"nextItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"}},"content":"[DocSearch](https://docsearch.algolia.com/) is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.\\n\\nDocusaurus site owners should upgrade their configuration with their new credentials **by February 1, 2022**, existing search indexes will be frozen and become read-only after this date.\\n\\n\x3c!--truncate--\x3e\\n\\n## Upgrading your Docusaurus site\\n\\nIn the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.\\n\\nThis email will include a new `appId` and `apiKey` to use in your Docusaurus configuration.\\n\\nThe only things you have to do:\\n\\n- Join the Algolia application (eventually creating a new Algolia account)\\n- Update your site configuration.\\n\\n```js title=\\"docusaurus.config.js\\"\\nconst config = {\\n themeConfig: {\\n algolia: {\\n // highlight-start\\n appId: \'<NEW_APP_ID>\',\\n apiKey: \'<NEW_SEARCH_API_KEY>\',\\n // highlight-end\\n },\\n },\\n};\\n\\nmodule.exports = config;\\n```\\n\\n:::info\\n\\n`appId` is now **required**.\\n\\nThese keys are not secrets and can be added to your Git repository.\\n\\n:::\\n\\n## DocSearch has a new home!\\n\\n### What is DocSearch?\\n\\n[DocSearch](https://docsearch.algolia.com/) is a program created by [Algolia](http://algolia.com/), which offers search to technical documentation of Open Source projects and technical blogs **for free**.\\n\\nYou can [read more here](https://docsearch.algolia.com/docs/what-is-docsearch/), and [apply](https://docsearch.algolia.com/apply) if you\'d like to give it a try!\\n\\n## What is this migration about?\\n\\n### Motivation\\n\\nWith the upcoming stable release of [DocSearch UI](https://docsearch.algolia.com/docs/DocSearch-v3), we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.\\n\\n### What\'s new?\\n\\nDocSearch now leverages the [Algolia Crawler](https://www.algolia.com/products/search-and-discovery/crawler/), which includes a web interface that will allow you to:\\n\\n- Start, schedule and monitor your crawls\\n- Edit your config file from a live editor\\n- Test your results with DocSearch v3\\n\\n![The Algolia crawler front page showing the project\'s overview, such as last complete crawl and indices](./img/crawler-overview.png)\\n\\n![The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.](./img/editor.png)\\n\\nBut also, more Algolia features in **your own Algolia app**:\\n\\n- Team management\\n- Browse and see how your records are indexed in Algolia\\n- Try other Algolia features with free trials\\n\\n![The Algolia index overview page, showing various filters and the details of every single index](./img/index-overview.png)\\n\\n![The Algolia index analytics page, showing trends for total users, total searches, etc.](./img/index-analytics.png)\\n\\nAnd of course, **a lot more, for free**.\\n\\n## FAQ\\n\\n### I\'m using Docusaurus and DocSearch, can I migrate? {#im-using-docusaurus-and-docsearch-can-i-migrate}\\n\\nAt the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you\'ll be contacted as soon as your Algolia app is ready!\\n\\n### Where can I read more about this?\\n\\nWe wrote a small [migration guide](https://docsearch.algolia.com/docs/migrating-from-legacy) but you\'ll have more detailed information in the migration email.\\n\\n### I received the migration email but the invite expired\\n\\nPlease contact us via either [email](mailto:docsearch@algolia.com) or [DocSearch\'s Discord](https://discord.gg/bRTacwYrfX) or on [Docusaurus\'s Discord #algolia channel](https://discordapp.com/invite/docusaurus)\\n\\n### I have feedback!\\n\\nFor any feedback regarding our documentation or the DocSearch UI component, you can open an issue [on our GitHub repository](https://github.com/algolia/docsearch/issues), but also contact us via the methods above.\\n\\n### Can I still run my own DocSearch instance?\\n\\nIn favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved [DocSearch scraper](https://github.com/algolia/docsearch-scraper) and [DocSearch v2](https://github.com/algolia/docsearch/tree/master), but the repositories will still be available and open to pull requests.\\n\\nThe previous documentation (now called `legacy`) remains available as well as our [`run your own`](https://docsearch.algolia.com/docs/legacy/run-your-own) guide."},{"id":"/2021/05/12/announcing-docusaurus-two-beta","metadata":{"permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","source":"@site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","title":"Announcing Docusaurus 2 Beta","description":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.","date":"2021-05-12T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"},{"label":"beta","permalink":"/blog/tags/beta"}],"readingTime":3.52,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"./img/slorber.png","key":"slorber","image_url":"./img/slorber.png"},{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"title":"Announcing Docusaurus 2 Beta","authors":[{"key":"slorber","image_url":"./img/slorber.png","imageURL":"./img/slorber.png"},"JMarcey","yangshun","lex111"],"tags":["release","beta"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"},"nextItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"}},"content":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first **[Docusaurus 2 beta](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.0)**.\\n\\nWith the announcement of this beta, the team is even more confident that Docusaurus 2 is **ready for mainstream adoption**!\\n\\n![](./img/image_cropped.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus adoption\\n\\n**Don\'t fear the beta tag!**\\n\\nDocusaurus 2 is widely adopted and growing fast:\\n\\n[![Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.](./img/trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nTo get a fuller understanding of the quality of current Docusaurus 2 sites, our new [showcase](https://docusaurus.io/showcase) page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!\\n\\nDon\'t miss our [favorite](https://docusaurus.io/showcase?tags=favorite) sites; they all stand out with something unique:\\n\\n[![A screenshot of the showcase\'s favorites section, with 12 cards each displaying the information and preview of one site](./img/favorites.png)](https://docusaurus.io/showcase?tags=favorite)\\n\\n## Why was Docusaurus v2 in alpha for so long?\\n\\nIt\'s hard to believe that the first alpha release [v2.0.0-alpha.0](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.0) was 2 years ago \ud83d\ude33 , unusually long for a software alpha.\\n\\nAs this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached **feature parity** with Docusaurus 1 with **[i18n](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n)**, and it has been **successfully adopted** by many Docusaurus sites (see [i18n showcase](https://docusaurus.io/showcase?tags=i18n)).\\n\\nWe\'re now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.\\n\\n## What are the goals of the beta?\\n\\nNow that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.\\n\\nIn addition, we will use the beta phase to **improve our theming system**.\\n\\nWe want to make it:\\n\\n- **easier to implement a custom theme**, including for ourselves. We want to provide [multiple official themes](https://github.com/facebook/docusaurus/issues/3522) (including [Tailwind CSS](https://github.com/facebook/docusaurus/issues/2961)) for a long time.\\n\\n- **safer to extend an existing theme**: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.\\n\\nWe will build a better **theming infrastructure** and refactor the classic theme to use it.\\n\\nIf you customize your site, you may find these planned improvements quite valuable.\\n\\n## What\'s new?\\n\\nIn case you missed it, we recently shipped two major improvements:\\n\\n- [Auto-generated sidebars](https://docusaurus.io/docs/sidebar#sidebar-item-autogenerated): no need to maintain a `sidebars.js` file anymore!\\n- [Webpack 5 / PostCSS 8](https://github.com/facebook/docusaurus/issues/4027): persistent caching significantly speeds up **rebuild time**!\\n\\n## What\'s next?\\n\\nShipping the official 2.0 release!\\n\\nTo get there, we will continue to **fix bugs** and implement the **most wanted features**, including:\\n\\n- [Sidebar category index pages](https://github.com/facebook/docusaurus/issues/2643)\\n- [Better mobile navigation UX](https://github.com/facebook/docusaurus/issues/2220)\\n- [Better admonition design](https://github.com/facebookincubator/infima/issues/55)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n- [Fix trailing slashes and relative link issues](https://github.com/facebook/docusaurus/issues/3372)\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018)\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n\\n## Conclusion\\n\\nThis is an exciting time for Docusaurus.\\n\\nWe are inspired by the [positive feedback](https://twitter.com/sebastienlorber/timelines/1392048416872706049) about Docusaurus, and discover new sites online every single day.\\n\\nWe are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.\\n\\nThank you to everyone for reading and to the entire community who supports Docusaurus. \ud83e\udd17"},{"id":"/2021/03/09/releasing-docusaurus-i18n","metadata":{"permalink":"/blog/2021/03/09/releasing-docusaurus-i18n","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx","source":"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx","title":"Releasing Docusaurus i18n","description":"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.","date":"2021-03-09T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"},{"label":"i18n","permalink":"/blog/tags/i-18-n"}],"readingTime":3.445,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Releasing Docusaurus i18n","authors":["slorber"],"tags":["release","i18n"],"image":"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"},"nextItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"}},"content":"Today, we officially release **[Docusaurus 2 i18n](https://docusaurus.io/docs/i18n/introduction)** ([internationalization](https://en.wikipedia.org/wiki/Internationalization_and_localization)), as part of [2.0.0-alpha.71](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71).\\n\\nDocusaurus 2 has now reached **full feature parity with Docusaurus 1**. \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the **first Docusaurus 2 beta** will be released.\\n\\n**We went the extra mile**, and the new i18n support is **even better than in Docusaurus 1**.\\n\\nIn this post, we will present you the **translation workflow**, explain some **design decisions** and **showcase early adopter sites** that just went live: [Jest](https://jestjs.io/), [Redwood](https://learn.redwoodjs.com/), and [Datagit](https://datagit.ir/).\\n\\nWe also **dogfood** the i18n support on the **Docusaurus 2 site itself**, and this post is already available in [English](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n) and [French](https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n)!\\n\\n\x3c!--truncate--\x3e\\n\\n## Translate your site\\n\\nYou can translate a Docusaurus site in **3 simple steps**:\\n\\n1. **Configure**: declare the default locale and alternative locales in `docusaurus.config.js`\\n1. **Translate**: put the translation files at the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n1. **Deploy**: build and deploy your site using a single or multi-domain strategy\\n\\nThe i18n support is **very flexible** and based on the **filesystem**.\\n\\nThe **[i18n tutorial](https://docusaurus.io/docs/i18n/tutorial)** is the best way to get started, and we provide help to use **[Git](https://docusaurus.io/docs/i18n/git)** or **[Crowdin](https://docusaurus.io/docs/i18n/crowdin)**.\\n\\n## Design decisions\\n\\nThe goals of the Docusaurus i18n system are:\\n\\n- **Simple**: just put the translated files in the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n- **Flexible translation workflows**: use Git (monorepo, forks, or submodules), SaaS software, FTP\\n- **Flexible deployment options**: single, multiple domains, or hybrid\\n- **Modular**: allow plugin authors to provide i18n support\\n- **Low-overhead runtime**: documentation is mostly static and does not require a heavy JS library or polyfills\\n- **Scalable build-times**: allow building and deploying localized sites independently\\n- **Localize assets**: an image of your site might contain text that should be translated\\n- **No coupling**: not forced to use any SaaS, yet integrations are possible\\n- **Easy to use with [Crowdin](https://crowdin.com/)**: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2\\n- **Good SEO defaults**: we set useful SEO headers like [`hreflang`](https://developers.google.com/search/docs/advanced/crawling/localized-versions) for you\\n- **RTL support**: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement\\n- **Default translations**: classic theme labels are translated for you in [many languages](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales)\\n\\n## Showcase\\n\\nWe worked with a few volunteers to **dogfood the i18n support** before releasing it.\\n\\n### Jest: upgrading Docusaurus\\n\\nWe have made it possible to **upgrade** a **translated Docusaurus 1 site** to Docusaurus 2.\\n\\n**[Jest](https://jestjs.io)**, using Docusaurus 1 and Crowdin was one of those sites.\\n\\nThe Docusaurus 2 migration was successful and the new site is now deployed in production ([announcement post](https://jestjs.io/blog/2021/03/09/jest-website-upgrade)).\\n\\n[![Jest\'s website front page in Japanese](/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png)](https://jestjs.io)\\n\\n### Redwood: adopting Docusaurus\\n\\n[Redwood](https://redwoodjs.com/) is a React full-stack Jamstack framework.\\n\\nThey were looking for a solution to create an **internationalized learning platform**, and became early adopters of Docusaurus 2 i18n for [learn.redwoodjs.com](https://learn.redwoodjs.com/), using Crowdin to get it translated to French.\\n\\n[![Redwood\'s doc page in French](/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png)](https://learn.redwoodjs.com/)\\n\\n### Datagit: using LTR support\\n\\nThe i18n system should work with any language, including **Right-to-Left languages**.\\n\\n[Datagit.ir](https://datagit.ir/) is using Farsi, and a simple configuration option is able to **flip the Docusaurus theme** to add the required Right-to-Left support.\\n\\n[![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png)](https://datagit.ir/)\\n\\n## Conclusion\\n\\nWe sincerely hope you will adopt and like the new i18n support.\\n\\nThis feature has not been an easy one, and we would like to thank everyone that got involved in this journey:\\n\\n- [Alexey](https://github.com/lex111) for his help to make the i18n support exhaustive and even better than v1\\n- [Simen](https://github.com/SimenB) for volunteering and supporting the Jest migration\\n- [Claire](https://github.com/clairefro) for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks\\n- [Massoud](https://github.com/massoudmaboudi) for reviewing my work on LTR and adopting it on Datagit\\n- [Crowdin](https://crowdin.com/) for their support and willingness to improve their translation SaaS\\n- The Docusaurus community for their patience, and providing many useful feedbacks on GitHub\\n\\nThanks for reading.\\n\\n\ud83d\ude4f And please, add your brand new i18n sites to our [showcase page](https://docusaurus.io/showcase). We accept any all polished Docusaurus site here, and we are working on a [redesign](https://github.com/facebook/docusaurus/issues/4238) allowing you to filter sites by features."},{"id":"/2021/01/19/docusaurus-2020-recap","metadata":{"permalink":"/blog/2021/01/19/docusaurus-2020-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/01-19-docusaurus-2020-recap.mdx","source":"@site/blog/2021/01-19-docusaurus-2020-recap.mdx","title":"Docusaurus 2020 Recap","description":"2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.","date":"2021-01-19T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":5.04,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2020 Recap","authors":["slorber"],"tags":["recap"],"image":"/img/docusaurus-2020-recap.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"},"nextItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"}},"content":"**2020 was great for Docusaurus**, despite [a regrettable start](https://docusaurus.io/blog/2020/01/07/tribute-to-endi) and a tumultuous year for everyone.\\n\\nWe continued to invest in [Docusaurus 2](https://docusaurus.io/), and made it reach **full feature parity** with [Docusaurus 1](https://v1.docusaurus.io/).\\n\\nWe now **recommend Docusaurus 2** as the **default choice** to start a new Docusaurus project and encourage v1 users to [migrate to Docusaurus 2](https://docusaurus.io/docs/migration).\\n\\nWe are **still in alpha**, but expect **some good news very soon**!\\n\\n![Three Docusaurus plushies laid side-by-side on the table](/img/blog/2020-recap/docusaurus-plushie-banner.jpeg)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 highlights\\n\\nWe have worked on many features this year, and would like to highlight the most significant ones:\\n\\n- **i18n**: easily translate your Docusaurus site, released soon! ([preview](https://github.com/facebook/docusaurus/pull/3325), [doc](https://docusaurus.io/docs/next/i18n/introduction))\\n- **Version dropdown**: enable contextual version switch\\n- **Versioning options**: solving the most common pain-points users had with versioning\\n- **Contextual search**: search in the current version, use the brand-new DocSearch 3 experience\\n- **Markdown pages**: use Markdown instead of React components to create standalone pages\\n- **Better theme**: various UI, UX and accessibility improvements\\n- **PWA**: add offline support to your site, and make it installable\\n- **Fail-fast**: strict config validation, detect broken links, and prevent bad production deployments\\n- **Multi-instance**: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)\\n- **Migration CLI**: automate the upgrade from Docusaurus 1\\n- **CodeSandbox**: assess Docusaurus easily from your browser with [new.docusaurus.io](https://new.docusaurus.io/)\\n- **Canary releases**: use the `@canary` npm tag to use the upcoming release before anyone else\\n- **TypeScript**: progressive adoption for internal code, and improve usage for users\\n- **Publish Infima**: it is now [open-source](https://github.com/facebookincubator/infima)\\n\\n## Docusaurus 2 growth\\n\\nThe plan to [rebuild Docusaurus from scratch in 2019](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap) paid off: after a slow start, Docusaurus 2 has been widely adopted and has **already outgrown Docusaurus 1** usage.\\n\\n![Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.](/img/blog/2020-recap/docusaurus-npm-trends.png)\\n\\nNotable **projects, startups, large companies, and individuals** adopted Docusaurus 2 ([showcase](https://docusaurus.io/showcase)):\\n\\n- [Supabase](https://supabase.io)\\n- [React Navigation](https://reactnavigation.org)\\n- [React Redux](https://react-redux.js.org/)\\n- [Vector](https://vector.dev)\\n- [Algolia DocSearch](https://docsearch.algolia.com)\\n- [SAP Cloud SDK](https://sap.github.io/cloud-sdk)\\n- [Palo Alto Cortex XSOAR](https://xsoar.pan.dev)\\n- [Qudd\xfas George\'s website](https://portfoliosaurus.now.sh)\\n\\nWe helped **large scale Docusaurus 1 sites to upgrade**, ensuring a proper **migration path** and **feature parity**.\\n\\n[React Native](https://reactnative.dev/) was successfully upgraded to Docusaurus 2 ([archived v1 site](http://archive.reactnative.dev/)):\\n\\n![React Native\'s new website built with Docusaurus v2](/img/blog/2020-recap/react-native-screenshot.png)\\n\\nLocalized Docusaurus 1 sites (like **Jest**) will be able to upgrade too:\\n\\n![Jest\'s new website built with Docusaurus v2 in Japanese](/img/blog/2020-recap/jest-screenshot.png)\\n\\nWe also saw the **[first right-to-left](https://datagit.ir/)** Docusaurus 2 site published:\\n\\n![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2020-recap/datagit-rtl-screenshot.png)\\n\\n## GitHub Activity\\n\\n- **Stars**: 14632 \u2192 20946 (+43.2% y/y)\\n- **Total Contributors**: 303 \u2192 512 (+68.9% y/y). Most of which are non-Facebook contributors\\n- **Weekly npm Downloads**: 2356 \u2192 25592 (+986% y/y)\\n- **On GitHub**, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)\\n\\n## Collaboration with Major League Hacking\\n\\nWe have welcomed [Major League Hacking](https://mlh.io/) (MLH) fellows for 2 seasons already.\\n\\nWe are very thankful for the **various contributions** they made, such as:\\n\\n- Writing the foundations of the v1 to v2 migration CLI\\n- Help migrate the React Native website from v1 to v2\\n- Making the config validation more strict and exhaustive, returning helpful error messages\\n- Adding CodeSandbox support\\n- Improving the CI pipelines: build size and Lighthouse bots\\n\\nWe look forward to continuing this collaboration in 2021.\\n\\n## Media\\n\\nDmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in [60 seconds](https://www.youtube.com/watch?v=_An9EsKPhp0) or [15min](https://www.youtube.com/watch?v=Yhyx7otSksg) videos.\\n\\nRachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in [React Native Radio 178 (podcast)](https://reactnativeradio.com/episodes/178-documenting-react-native-with-rachel-nabors-gWxwySPl), and William Candillon the [React Native website migration (video)](https://www.youtube.com/watch?v=-zhjq2ECKq4).\\n\\nMany blog posts have been published:\\n\\n- [To the Makers of Docusaurus](https://portfoliosaurus.now.sh/blog/toTheMakers) by Quddus George\\n- [Richer API documentation with Redoc and Docusaurus](https://davidgoss.co/blog/api-documentation-redoc-docusaurus/) by David Goss\\n- [How to Build a Plugin for Docusaurus v2](https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/) by Adriaan Knapen\\n- [React Tracked Documentation Website with Docusaurus v2](https://blog.axlight.com/posts/react-tracked-documentation-website-with-docusaurus-v2/) by Daishi Kato\\n- [Easy documentation with Docusaurus](https://blog.logrocket.com/easy-documentation-with-docusaurus/) by Anshul Goyal (MLH fellow)\\n- [Build Beautiful Documentation Websites with Docusaurus](https://lo-victoria.com/build-beautiful-documentation-websites-with-docusaurus) by Victoria Lo\\n\\n## Community\\n\\nThe Docusaurus community continues to grow, the [Discord](https://discord.gg/docusaurus) server is quite active, and [Stack Overflow questions](https://stackoverflow.com/questions/tagged/docusaurus) keep being posted.\\n\\nThe **modular architecture** of Docusaurus 2 allowed the community to build and publish [third-party plugins](https://docusaurus.io/community/resources#community-plugins-). As we would like to federate better our community, if you are building a plugin, please [let us know](https://github.com/facebook/docusaurus/discussions/4025).\\n\\n## What\'s next?\\n\\nAs the **core features of Docusaurus 2** have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the **beta and release-candidate phase**.\\n\\nWith proper support for **i18n and versioning**, and **large scale migrations** such as **React Native** and **Jest**, we now have a clear migration path for all Docusaurus 1 sites.\\n\\nWe still have a few **major features** that we would like to work on:\\n\\n- [Create a theme gallery](https://github.com/facebook/docusaurus/issues/3522), make it easy to switch from one another, and include **first-class Tailwind support**\\n- [Upgrade to Webpack 5](https://github.com/facebook/docusaurus/issues/4027), improve performances and build times\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018), as MDX and makes it harder for CommonMark-based sites to adopt Docusaurus\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- Other tasks that we might discover during 2021\\n\\nHuge thanks to the community for [their contributions in 2020](https://github.com/facebook/docusaurus/graphs/contributors?from=2020-01-01&to=2021-01-01&type=c), especially:\\n\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting the project all this time\\n- the core team - [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://sebastienlorber.com), [Yangshun Tay](https://twitter.com/yangshunz)\\n- the Major League Hacking and Facebook interns for their significant impact\\n- the Algolia team for DocSearch 3 and their support\\n- [Bartosz Kaszubowski](https://github.com/Simek) for his investment in the React Native migration\\n- the whole community for their contributions, and providing support to each other\\n\\nCheers to a great 2021! \ud83c\udf89"},{"id":"/2020/01/07/tribute-to-endi","metadata":{"permalink":"/blog/2020/01/07/tribute-to-endi","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx","source":"@site/blog/2020/01-07-tribute-to-endi.mdx","title":"Tribute to Endi","description":"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.","date":"2020-01-07T00:00:00.000Z","tags":[{"label":"endi","permalink":"/blog/tags/endi"},{"label":"tribute","permalink":"/blog/tags/tribute"}],"readingTime":0.895,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Tribute to Endi","authors":"JMarcey","tags":["endi","tribute"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"},"nextItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"}},"content":"It is with great sadness to announce that our primary external Docusaurus contributor, [Endilie Yacop Sucipto](https://github.com/endiliey) (Endi to those who knew him), [passed away](https://give.asia/campaign/help_endi_beat_cancer#/updates) over the weekend after an illness associated with his bout with cancer.\\n\\n\x3c!--truncate--\x3e\\n\\nIt is impossible to overstate Endi\'s impact on this project:\\n\\n- Docusaurus\' top contributor, [by far](https://github.com/facebook/docusaurus/graphs/contributors).\\n- [Lead developer](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2) on the nearly complete [version 2 of Docusaurus](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap).\\n- Overall passionate advocate of the project on [Twitter](https://twitter.com/endiliey), [Discord](https://discord.gg/docusaurus) and other social media\\n\\nThinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.\\n\\nWe are working on ways to honor Endi\'s contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or [tweet](https://twitter.com/docusaurus) if you have a suggestion.\\n\\nThe Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14\\n\\n![A photo from behind Endi\'s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.](/img/endi.jpg)"},{"id":"/2019/12/30/docusaurus-2019-recap","metadata":{"permalink":"/blog/2019/12/30/docusaurus-2019-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx","source":"@site/blog/2019/12-30-docusaurus-2019-recap.mdx","title":"Docusaurus 2019 Recap","description":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)","date":"2019-12-30T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":2.72,"hasTruncateMarker":true,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"title":"Docusaurus 2019 Recap","authors":"yangshun","tags":["recap"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"},"nextItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"}},"content":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on [Docusaurus 2](https://docusaurus.io/). Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and [migrate](https://docusaurus.io/docs/migration) to it! Otherwise we will work with you to make that happen in 2020 :)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 (D2)\\n\\nIn 2018, we proposed to rebuild [Docusaurus from the ground up](https://github.com/facebook/docusaurus/issues/789). It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of [@endilie](https://github.com/endiliey), our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.\\n\\nD2\'s killer features are **Dark Mode** and its **superb performance**. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.\\n\\nLast but not least, we implemented a plugins architecture and turned the repo into a [Lerna monorepo](https://github.com/facebook/docusaurus/tree/main/packages). We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.\\n\\n## GitHub Activity\\n\\n- Stars: 10050 \u2192 14632 (+45.6% y/y)\\n- Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors\\n- Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November\\n- D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub\\n- We now have 4 active core contributors! (+100% y/y)\\n\\n## Notable Users\\n\\nA good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:\\n\\n- [Create React App](https://create-react-app.dev/)\\n- [Redux](https://redux.js.org/)\\n- [Draft.js](https://draftjs.org/)\\n- [Flux](http://facebook.github.io/flux/)\\n\\nAnd welcomed more projects to Docusaurus 1:\\n\\n- [Libra](https://developers.libra.org/)\\n- [MobX](https://mobx.js.org/)\\n- [Immer](https://immerjs.github.io/immer/)\\n- [Sorbet](https://sorbet.org/)\\n\\n## Media\\n\\nYangshun gave a classroom session during F8 about [Using Docusaurus to Create Open Source Websites](https://www.youtube.com/watch?v=QcGJsf6mgZE).\\n\\n## Community\\n\\nA few third-party hosting/development services also has first-class integration with a Docusaurus setup:\\n\\n- [Vercel deployment](https://github.com/vercel/vercel/tree/main/examples/docusaurus)\\n- [CodeSandbox](https://codesandbox.io/s/docusaurus-template-x3vg9)\\n- [Render](https://render.com/docs/deploy-docusaurus)\\n\\n## Looking Ahead\\n\\nD2 has gained some traction among the [developer community](https://docusaurus.io/showcase). In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!\\n\\nHuge thanks to the community for their contributions, especially the core team - [Endilie Yacop Sucipto](https://github.com/endiliey), [Alexey Pyltsyn](https://github.com/lex111), [Wei Gao](https://github.com/wgao19). Lastly, thank you [Joel Marcey](https://github.com/JoelMarcey) for starting Docusaurus and supporting the project all this time.\\n\\nCheers to a great 2020! \ud83c\udf89"},{"id":"/2018/12/14/Happy-First-Birthday-Slash","metadata":{"permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","source":"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","title":"Happy 1st Birthday Slash!","description":"Docusaurus makes 1 year! Happy Birthday Slash!","date":"2018-12-14T00:00:00.000Z","tags":[{"label":"birth","permalink":"/blog/tags/birth"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Co-creator of Docusaurus","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Happy 1st Birthday Slash!","authors":[{"key":"JMarcey","title":"Co-creator of Docusaurus"}],"tags":["birth"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"},"nextItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"}},"content":"![Docusaurus makes 1 year! Happy Birthday Slash!](/img/docusaurus-slash-first-birthday.svg)\\n\\nDocusaurus [went live](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) on December 14, 2017. At the time, we had [8 early adopters](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements).\\n\\n\x3c!--truncate--\x3e\\n\\nWe now have nearly [60 known users of Docusaurus](https://v1.docusaurus.io/en/users), and probably more that we don\'t know about. We have [9K GitHub stars](https://github.com/facebook/docusaurus) and an active community, particularly [Yangshun Tay](https://twitter.com/yangshunz) and [Endilie Yacop Sucipto](https://twitter.com/endiliey), both of whom are the lead maintainers helping keep this project [moving forward](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2).\\n\\nThank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.\\n\\n> Special thanks to [Eric Nakagawa](https://twitter.com/ericnakagawa), creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"},{"id":"/2018/09/11/Towards-Docusaurus-2","metadata":{"permalink":"/blog/2018/09/11/Towards-Docusaurus-2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx","source":"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx","title":"Towards Docusaurus 2","description":"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.","date":"2018-09-11T00:00:00.000Z","tags":[{"label":"new","permalink":"/blog/tags/new"},{"label":"adoption","permalink":"/blog/tags/adoption"}],"readingTime":9.25,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"}],"frontMatter":{"title":"Towards Docusaurus 2","author":"Endilie Yacop Sucipto","authorTitle":"Maintainer of Docusaurus","authorURL":"https://github.com/endiliey","authorImageURL":"https://github.com/endiliey.png","authorTwitter":"endiliey","tags":["new","adoption"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"},"nextItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"Docusaurus was [officially announced](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as [React Native](https://facebook.github.io/react-native/), [Babel](https://babeljs.io/), [Jest](https://jestjs.io/), [Reason](https://reasonml.github.io/) and [Prettier](https://prettier.io/).\\n\\nThere is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89.\\n\\n\x3c!--truncate--\x3e\\n\\n## Introduction\\n\\nIt all started with this [RFC issue](https://github.com/facebook/docusaurus/issues/789) opened by [Yangshun](https://github.com/yangshun) towards the end of June 2018.\\n\\n<blockquote>\\n <h4>\\n <a href=\\"https://github.com/facebook/docusaurus/issues/789\\">\\n {\'[RFC] Docusaurus v2 \xb7 Issue #789 \xb7 facebook/docusaurus\'}\\n </a>\\n </h4>\\n These are some of the problems I\'m seeing in Docusaurus now and also how we can\\n address them in v2. A number of the ideas here were inspired by VuePress and other\\n static site generators. In the current static site generators ecosystem, t...\\n</blockquote>\\n\\nMost of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.\\n\\n## Infrastructure\\n\\n### Content\\n\\nA Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and `dangerouslySetInnerHTML` \ud83d\ude31.\\n\\nIn addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.\\n\\nFor Docusaurus 2, we will be using [webpack](https://webpack.js.org/) as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, **during build time we will create a server-rendered version of the app** and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by [Gatsby](https://github.com/gatsbyjs/gatsby).\\n\\n### Versioning\\n\\nIf you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs **if and only if** the docs content are **different**.\\n\\nFor example, if we have `docs/hello.md`:\\n\\n```text\\n---\\nid: hello\\ntitle: hello\\n---\\nHello world !\\n```\\n\\nAnd **we cut version 1.0.0,** Docusaurus will create `versioned_docs/version-1.0.0/hello.md`:\\n\\n```text\\n---\\nid: version-1.0.0-hello\\ntitle: hello\\noriginal_id: hello\\n---\\nHello world !\\n```\\n\\nHowever, if there are no changes to `hello.md` when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, `versioned_docs/version-2.0.0/hello.md` will not exist.\\n\\nThis can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit `versioned_docs/version-1.0.0/hello.md` or manually add `versioned_docs/version-2.0.0/hello.md`. This could potentially lead to unwanted bugs. Here is a [real scenario in Jest](https://github.com/facebook/jest/pull/6758#issuecomment-408274413).\\n\\nIn addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where [renaming docs breaks links in old versions](https://github.com/facebook/docusaurus/issues/845).\\n\\nFor Docusaurus 2, **every time we cut a new version, we will instead take a snapshot of all the docs**. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.\\n\\n### Translation\\n\\nDocusaurus allows for easy translation functionality by using [Crowdin](https://crowdin.com/). Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that **English** is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.\\n\\nFor Docusaurus 2, **we will not assume English is the default language**. When a user enables internationalization, they have to set a default language in `siteConfig.js`. We will then assume that all the files in `docs` are written in that language.\\n\\nIn addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.\\n\\n## Customizability\\n\\n### Layout\\n\\nThe current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site\'s appearance to their wishes.\\n\\nFor Docusaurus 2, **layout and styling should be controlled by the user**. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by [create-react-app](https://github.com/facebook/create-react-app) and [VuePress](https://vuepress.vuejs.org/), Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using [React Helmet](https://github.com/nfl/react-helmet). Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.\\n\\n### Markdown\\n\\nOur Markdown parsing is currently powered by [Remarkable](https://github.com/jonschlinkert/remarkable). What if the user wants to use [Markdown-it](https://github.com/Markdown-it/Markdown-it) or even [MDX](https://github.com/mdx-js/mdx)? And then there is an issue of which syntax highlighter to use, (e.g: [Prism](https://prismjs.com/) vs [Highlight.js](https://highlightjs.org/)). We should leave these choices open to the user.\\n\\nFor Docusaurus 2, **users can eject and choose their own Markdown parser**. It does not matter if they want to use another Markdown parser such as [Remark](https://github.com/remarkjs/remark), or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the _RAW string of Markdown_. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we\'re still experimenting with different Markdown parsers.\\n\\n### Search\\n\\nOur core search functionality is based on [Algolia](https://www.algolia.com/). There are requests by users to be able to use different search offerings, such as `lunrjs` for offline search.\\n\\nI personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their `DocSearch` is open source. For example, I recently submitted [this PR that enables DocSearch to scrape alternate languages in sitemap](https://github.com/algolia/docsearch-scraper/pull/387).\\n\\nFor Docusaurus 2, **we will allow users to customize the search box**. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.\\n\\n## Stability\\n\\nSoftware is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.\\n\\nFor Docusaurus 2, **we are adding tests as we develop** since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.\\n\\n## Frequently Asked Questions\\n\\n### Will there be any breaking changes?\\n\\nIf you\'ve read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to **minimize the number of breaking changes** and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a **major rewrite and re-architecting** of the codebase.\\n\\nThe exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in `siteConfig.js` and we plan to keep it as lean as possible. For example, the `cleanUrl` siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the `.html` suffix.\\n\\nOur goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on [Discord](https://discord.gg/docusaurus) or [Twitter](https://twitter.com/docusaurus) for questions and help.\\n\\n### When is the release of Docusaurus 2?\\n\\nAs of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.\\n\\nOne thing that I would like to share is that while Docusaurus is part of [Facebook Open Source](https://opensource.fb.com/) and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at [NTU Singapore](https://twitter.com/NTUsg), so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, **we want to make it as awesome as possible**.\\n\\nFor now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the [public repository](https://github.com/facebook/docusaurus). When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned \ud83d\ude09!\\n\\n## Final Thoughts\\n\\nDocusaurus has had a large impact on the open source community as seen from the [many popular projects](https://v1.docusaurus.io/en/users) which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.\\n\\nDocusaurus\' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.\\n\\nWe also want to let people know that **due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.**\\n\\nIf you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we\'re doing, you can support [Docusaurus on Open Collective](https://opencollective.com/Docusaurus).\\n\\n> If you are sponsoring our work on [Open Collective](https://opencollective.com/Docusaurus), we\'ll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.\\n\\nLastly, if you haven\'t done so already, click the **star** and **watch** button on [GitHub](https://github.com/facebook/docusaurus), and follow us on [Twitter](https://twitter.com/docusaurus)."},{"id":"/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","metadata":{"permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","source":"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","title":"How I Converted Profilo to Docusaurus in Under 2 Hours","description":"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d","date":"2018-04-30T00:00:00.000Z","tags":[{"label":"profilo","permalink":"/blog/tags/profilo"},{"label":"adoption","permalink":"/blog/tags/adoption"}],"readingTime":5.95,"hasTruncateMarker":true,"authors":[{"name":"Christine Abernathy","url":"http://twitter.com/abernathyca","imageURL":"https://github.com/caabernathy.png"}],"frontMatter":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","author":"Christine Abernathy","authorURL":"http://twitter.com/abernathyca","authorImageURL":"https://github.com/caabernathy.png","authorTwitter":"abernathyca","tags":["profilo","adoption"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"},"nextItem":{"title":"Introducing Docusaurus","permalink":"/blog/2017/12/14/introducing-docusaurus"}},"content":"> _\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d_\\n>\\n> _\u2014 Note sent to the Profilo team_\\n\\nThis is the story of the rather short journey it took to create the [Profilo](https://facebookincubator.github.io/profilo/) website using Docusaurus.\\n\\nProfilo, an Android library for collecting performance traces from production, [was announced](https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/) earlier this year. The project was [published on GitHub](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8) with a less than [a handful or Markdown files](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs) to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.\\n\\n\x3c!--truncate--\x3e\\n\\nIn general, when creating a website with Docusaurus you do the following:\\n\\n1. Generate a template website using Docusaurus scripts.\\n1. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).\\n1. Create the website content:\\n 1. Add your docs and any supporting assets.\\n 1. Customize the default landing page provided by Docusaurus to suit your needs.\\n 1. Configure the default site navigation file.\\n1. Publish the website and set up how it will be published for future changes.\\n\\nGiven I had pre-existing Markdown files, I didn\'t have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.\\n\\n## Overview of Steps Taken\\n\\nHere\'s an overview of the steps taken to convert to a website. I\'ll discuss some of the design aspects in a later section.\\n\\n**Design and colors:**\\n\\n1. Got all the desired logo formats from designer. I had to create the _.favicon_ one.\\n1. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!\\n\\n**Initial website setup:**\\n\\n1. Forked the [Profilo project](https://github.com/facebookincubator/profilo/) on GitHub and created a local clone of the fork to set up the website.\\n1. Created the initial Docusaurus website using the [installation instructions](https://v1.docusaurus.io/docs/en/installation.html).\\n1. Deleted the `docs-examples-from-docusaurus` and `website/blog-examples-from-docusaurus` folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.\\n\\n**Content creation:**\\n\\n1. Added metadata to the existing Markdown files found in the `docs` folder, for example:\\n\\n ```md\\n ---\\n id: architecture\\n title: Architecture\\n sidebar_label: Architecture\\n ---\\n ```\\n\\n2. Added the logo assets to the `website/static/img` folder.\\n3. Modified `website/pages/en/index.js`, the landing page, to highlight Profilo features.\\n4. Modified `website/core/Footer.js`, the footer, to simplify it for Profilo.\\n5. Edited `website/siteConfig.js` (website configuration file) to specify the previously chosen primary and secondary colors.\\n6. Modified `website/sidebars.json` that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.\\n7. Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.\\n8. Tested the website locally throughout this phase. (I ran `yarn start` from the `website` folder to start the server.)\\n\\n**Feedback and review changes:**\\n\\n1. Sent a [pull request](https://github.com/facebookincubator/profilo/pull/6) to the project.\\n2. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).\\n3. Updated the colors and updated the PR.\\n4. The PR was then accepted and [merged](https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad). Yay!\\n\\n**Website publishing:**\\n\\n1. Pushed the first website version by running the Docusaurus publish script from the command line:\\n\\n ```bash\\n USE_SSH=true \\\\\\n GIT_USER=caabernathy \\\\\\n CURRENT_BRANCH=master \\\\\\n yarn run publish-gh-pages\\n ```\\n\\n2. Configured CircleCI using the [provided Docusaurus instructions](https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration). There were 2 PRs for this, [the first](https://github.com/facebookincubator/profilo/pull/8)for the initial config and [the second](https://github.com/facebookincubator/profilo/pull/12) to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).\\n\\nThe final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.\\n\\n## Design\\n\\nHere\'s what the initial website looked like when the first pull request was sent out:\\n\\n![The website\'s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar](/img/profilo_blog_post_website_initial.png)\\n\\nMost of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.\\n\\n![Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade](/img/profilo_blog_post_photoshop_color_picker.png)\\n\\nI then took the RGB representation of the color and set it as the baseline color on [Paletton](http://paletton.com/). The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.\\n\\n![Using Paletton to generate a full palette from the red shade selected. There\'s a color wheel showing all hues on the left, and a square showing various shades of red on the right.](/img/profilo_blog_post_palette_website_color_picker.png)\\n\\nThe selected primary and secondary colors were a good jumping off point for designer feedback.\\n\\nThere were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project\'s features.\\n\\nHere\'s what the final website looked like:\\n\\n![The website\'s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.](/img/profilo_blog_post_website_final.png)\\n\\nThis is an example page showing the core content, in this case the Getting Started page:\\n\\n![A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code](/img/profilo_blog_post_website_final_docs.png)\\n\\nThis also shows the sidebar structure that was set up through editing `website/sidebars.json`.\\n\\nLastly, I didn\'t have to worry about handling responsive design. You get this out of the box with Docusaurus!\\n\\n![Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.](/img/profilo_blog_post_android_ios.png)\\n\\n## Final Thoughts\\n\\nThe Profilo engineers were happy to see that they didn\'t have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.\\n\\nThe infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."},{"id":"/2017/12/14/introducing-docusaurus","metadata":{"permalink":"/blog/2017/12/14/introducing-docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx","source":"@site/blog/2017/12-14-introducing-docusaurus.mdx","title":"Introducing Docusaurus","description":"We are very happy to introduce Docusaurus to help you manage one or many open source websites.","date":"2017-12-14T00:00:00.000Z","tags":[{"label":"documentation","permalink":"/blog/tags/documentation"},{"label":"blog","permalink":"/blog/tags/blog"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":8.215,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Introducing Docusaurus","authors":"JMarcey","tags":["documentation","blog","docusaurus"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"![](/img/slash-introducing.svg)\\n\\nWe are very happy to introduce [Docusaurus](https://github.com/facebook/docusaurus) to help you manage one or many open source websites.\\n\\nWe created [Docusaurus](https://docusaurus.io) for the following reasons:\\n\\n1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.\\n1. To provide features that many of our open source websites need like blog support, search and versioning.\\n1. To make it easy to push updates, new features, and bug fixes to everyone all at once.\\n1. And, finally, to provide a consistent look and feel across all of our open source projects.\\n\\n\x3c!--truncate--\x3e\\n\\nDocusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can [install](https://v1.docusaurus.io/docs/en/installation.html) it using `npm` or `yarn` via a simple initialization script that [creates a working example website out of the box](https://v1.docusaurus.io/docs/en/site-preparation.html).\\n\\nDocusaurus also provides core website and documentation features out-of-the-box including [blog support](https://v1.docusaurus.io/docs/en/blog.html), [internationalization](https://v1.docusaurus.io/docs/en/translation.html), [search](https://v1.docusaurus.io/docs/en/search.html), and [versioning](https://v1.docusaurus.io/docs/en/versioning.html). While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added.\\n\\n## The Birth of docusaurus\\n\\n![](/img/slash-birth.png)\\n\\nWhen Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings.\\n\\nThe open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well.\\n\\nThe problem with the \\"copy the template to your repo\\" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to \\"copy\\" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.\\n\\nSo we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes.\\n\\nDocusaurus was born!\\n\\nAt Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don\'t have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation.\\n\\n## Getting Up and Running\\n\\n![](/img/slash-up-and-running.png)\\n\\nAt its core, we wanted sites running Docusaurus to be simple to use. With one [installation](https://v1.docusaurus.io/docs/en/installation.html) command and some simple [configuration](https://v1.docusaurus.io/docs/en/site-preparation.html), you can actually have a default running website.\\n\\nWhen you run `docusaurus-init`, you will see a structure similar to:\\n\\n```bash\\nroot-of-repo\\n\u251c\u2500\u2500 docs-examples-from-docusaurus\\n\u2502 \u251c\u2500\u2500 doc1.md\\n\u2502 \u251c\u2500\u2500 doc2.md\\n\u2502 \u251c\u2500\u2500 doc3.md\\n\u2502 \u251c\u2500\u2500 example-doc4.md\\n\u2502 \u2514\u2500\u2500 example-doc5.md\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\\n\u2502 \u251c\u2500\u2500 node_modules\\n\u2502 \u251c\u2500\u2500 package.json\\n\u2502 \u251c\u2500\u2500 pages\\n\u2502 \u251c\u2500\u2500 sidebars.json\\n\u2502 \u251c\u2500\u2500 siteConfig.js\\n\u2502 \u2514\u2500\u2500 static\\n```\\n\\nWith the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your [blog posts](https://v1.docusaurus.io/docs/en/blog.html); `siteConfig.js` is where you make most of the [customizations](https://v1.docusaurus.io/docs/en/site-config.html) for your site; `sidebars.json` is where you maintain the layout and content of the [sidebar](https://v1.docusaurus.io/docs/en/navigation.html) for your documentation; the `pages` folder is where you add [custom](https://v1.docusaurus.io/docs/en/custom-pages.html) pages for your site; the `static` folder is where all of your static assets go (e.g., CSS stylesheets and images); and the `core` folder is where you can customize core components of the site, in this case the footer.\\n\\n## How does Docusaurus work?\\n\\nDocusaurus is written primarily in JavaScript and [React](https://facebook.github.io/react), replacing Jekyll which we used in the old template. We use [Remarkable](https://github.com/jonschlinkert/remarkable) for our Markdown rendering and [highlight.js](https://highlightjs.org/) for our code block syntax highlighting. The core of Docusaurus\' functionality is in the [lib directory](https://github.com/facebookexperimental/Docusaurus/tree/master/lib) of the [Docusaurus repo](https://github.com/facebook/docusaurus/). The general structure looks like:\\n\\n```bash\\nroot-of-Docusaurus\\n\u251c\u2500\u2500 lib\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u251c\u2500\u2500 server\\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\\n\u2502 \u2502 \u251c\u2500\u2500 server.js\\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\\n\u2502 \u251c\u2500\u2500 static\\n\u2502 \u251c\u2500\u2500 build-files.js\\n\u2502 \u251c\u2500\u2500 copy-examples.js\\n\u2502 \u251c\u2500\u2500 generate-feed.js\\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\\n\u2502 \u251c\u2500\u2500 rename-version.js\\n\u2502 \u251c\u2500\u2500 start-server.js\\n\u2502 \u251c\u2500\u2500 versions.js\\n\u2502 \u2514\u2500\u2500 write-translations.js\\n```\\n\\nThe key files here are build-files.js and start-server.js. There are many similarities between these two files: `build-files.js` is used to build the physical artifacts for serving by an external web server. `start-server.js` is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:\\n\\n1. Process your website settings in `siteConfig.js`\\n1. Read the document metadata that exists in all the Markdown files in your docs directory.\\n1. Create a table of contents for your documents based upon the IDs extracted from the metadata.\\n1. Convert the Markdown to HTML, including doing link replacement.\\n1. These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder.\\n1. Repeat 1-3 for blog posts.\\n1. The blog file will go in a build/blog directory of the compiled site.\\n1. Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site.\\n1. Copy images into an build/img directory of the compiled site.\\n1. Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build.\\n1. Create CNAME and sitemap.xml files and add those to build.\\n\\nNote that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts.\\n\\nThe final structure of your compiled site will look similar to:\\n\\n```bash\\nbuild\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 CNAME\\n\u2502 \u251c\u2500\u2500 blog\\n\u2502 \u251c\u2500\u2500 css\\n\u2502 \u251c\u2500\u2500 docs\\n\u2502 \u251c\u2500\u2500 en\\n\u2502 \u251c\u2500\u2500 help.html # custom page\\n\u2502 \u251c\u2500\u2500 img\\n\u2502 \u251c\u2500\u2500 index.html # landing page\\n\u2502 \u251c\u2500\u2500 sitemap.xml\\n\u2502 \u2514\u2500\u2500 users.html # custom page\\n```\\n\\n## Community\\n\\n![](/img/docusaurus.svg)\\n\\nWe welcome your [contributions](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to Docusaurus, whether you want to use it for your own site, you want to [contribute](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to the Docusaurus core or just have questions. Follow us on [GitHub](https://github.com/facebook/docusaurus) and [Twitter](https://twitter.com/docusaurus).\\n\\n## Acknowledgements\\n\\nDocusaurus wouldn\'t exist without the work of the rest of the core Docusaurus team: [Eric Nakagawa](http://twitter.com/ericnakagawa), [Hector Ramos](https://twitter.com/hectorramos), [Eric Vicenti](https://twitter.com/EricVicenti) and [Frank Li](https://github.com/deltice) \u2014 a former intern at Facebook who implemented the core technology and features.\\n\\nSpecial thanks also goes out to our earliest [adopters](https://v1.docusaurus.io/en/users.html) of Docusaurus:\\n\\n- [BuckleScript](https://bucklescript.github.io/)\\n- [FastText](https://fasttext.cc)\\n- [Jest](https://jestjs.io)\\n- [Make It Open](http://makeitopen.com)\\n- [Prettier](https://prettier.io/)\\n- [Reason-react](https://reasonml.github.io/reason-react/)\\n- [React Native](https://facebook.github.io/react-native/)\\n- [Relay](https://facebook.github.io/relay/)\\n\\nWithout their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today.\\n\\n## Resources\\n\\n- [Read our documentation](https://v1.docusaurus.io)\\n- [Follow our Twitter feed](https://twitter.com/docusaurus)\\n- [Follow us on GitHub](https://github.com/facebook/docusaurus)\\n- [About Slash, the Docusaurus mascot](https://v1.docusaurus.io/about-slash.html)"}],"blogListPaginated":[{"items":["/releases/3.2","/releases/3.1","/releases/3.0","/preparing-your-site-for-docusaurus-v3","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"],"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":5,"totalCount":21,"nextPage":"/blog/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0"],"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2022/01/24/docusaurus-2021-recap","/2021/11/21/algolia-docsearch-migration","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n","/2021/01/19/docusaurus-2020-recap"],"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2020/01/07/tribute-to-endi","/2019/12/30/docusaurus-2019-recap","/2018/12/14/Happy-First-Birthday-Slash","/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/page/4","page":4,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/page/5","page":5,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"blogTags":{"/blog/tags/release":{"label":"release","items":["/releases/3.2","/releases/3.1","/releases/3.0","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4","/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta","/2021/03/09/releasing-docusaurus-i18n"],"permalink":"/blog/tags/release","pages":[{"items":["/releases/3.2","/releases/3.1","/releases/3.0","/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","/releases/2.4"],"metadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":5,"totalPages":3,"totalCount":11,"nextPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/releases/2.3","/releases/2.2","/2022/09/01/docusaurus-2.1","/2022/08/01/announcing-docusaurus-2.0","/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/tags/release/page/2","page":2,"postsPerPage":5,"totalPages":3,"totalCount":11,"previousPage":"/blog/tags/release","nextPage":"/blog/tags/release/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}},{"items":["/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/release/page/3","page":3,"postsPerPage":5,"totalPages":3,"totalCount":11,"previousPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/maintenance":{"label":"maintenance","items":["/preparing-your-site-for-docusaurus-v3"],"permalink":"/blog/tags/maintenance","pages":[{"items":["/preparing-your-site-for-docusaurus-v3"],"metadata":{"permalink":"/blog/tags/maintenance","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/recap":{"label":"recap","items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"permalink":"/blog/tags/recap","pages":[{"items":["/2022/01/24/docusaurus-2021-recap","/2021/01/19/docusaurus-2020-recap","/2019/12/30/docusaurus-2019-recap"],"metadata":{"permalink":"/blog/tags/recap","page":1,"postsPerPage":5,"totalPages":1,"totalCount":3,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/search":{"label":"search","items":["/2021/11/21/algolia-docsearch-migration"],"permalink":"/blog/tags/search","pages":[{"items":["/2021/11/21/algolia-docsearch-migration"],"metadata":{"permalink":"/blog/tags/search","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/beta":{"label":"beta","items":["/2021/05/12/announcing-docusaurus-two-beta"],"permalink":"/blog/tags/beta","pages":[{"items":["/2021/05/12/announcing-docusaurus-two-beta"],"metadata":{"permalink":"/blog/tags/beta","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/i-18-n":{"label":"i18n","items":["/2021/03/09/releasing-docusaurus-i18n"],"permalink":"/blog/tags/i-18-n","pages":[{"items":["/2021/03/09/releasing-docusaurus-i18n"],"metadata":{"permalink":"/blog/tags/i-18-n","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/endi":{"label":"endi","items":["/2020/01/07/tribute-to-endi"],"permalink":"/blog/tags/endi","pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/endi","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/tribute":{"label":"tribute","items":["/2020/01/07/tribute-to-endi"],"permalink":"/blog/tags/tribute","pages":[{"items":["/2020/01/07/tribute-to-endi"],"metadata":{"permalink":"/blog/tags/tribute","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/birth":{"label":"birth","items":["/2018/12/14/Happy-First-Birthday-Slash"],"permalink":"/blog/tags/birth","pages":[{"items":["/2018/12/14/Happy-First-Birthday-Slash"],"metadata":{"permalink":"/blog/tags/birth","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/new":{"label":"new","items":["/2018/09/11/Towards-Docusaurus-2"],"permalink":"/blog/tags/new","pages":[{"items":["/2018/09/11/Towards-Docusaurus-2"],"metadata":{"permalink":"/blog/tags/new","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/adoption":{"label":"adoption","items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"permalink":"/blog/tags/adoption","pages":[{"items":["/2018/09/11/Towards-Docusaurus-2","/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/adoption","page":1,"postsPerPage":5,"totalPages":1,"totalCount":2,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/profilo":{"label":"profilo","items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"permalink":"/blog/tags/profilo","pages":[{"items":["/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"],"metadata":{"permalink":"/blog/tags/profilo","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/documentation":{"label":"documentation","items":["/2017/12/14/introducing-docusaurus"],"permalink":"/blog/tags/documentation","pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/documentation","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/blog":{"label":"blog","items":["/2017/12/14/introducing-docusaurus"],"permalink":"/blog/tags/blog","pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false},"/blog/tags/docusaurus":{"label":"docusaurus","items":["/2017/12/14/introducing-docusaurus"],"permalink":"/blog/tags/docusaurus","pages":[{"items":["/2017/12/14/introducing-docusaurus"],"metadata":{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}],"unlisted":false}},"blogTagsListPath":"/blog/tags"},"blog-tests":{"blogSidebarTitle":"Recent posts","blogPosts":[{"id":"/2023/08/05/","metadata":{"permalink":"/tests/blog/2023/08/05/","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-08-05.mdx","source":"@site/_dogfooding/_blog tests/2023-08-05.mdx","title":"Ensure heading anchor slugs respect GitHub emoji behavior","description":"This is a friendly header","date":"2023-08-05T00:00:00.000Z","tags":[],"readingTime":3.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","date":"2023-08-05T00:00:00.000Z"},"unlisted":false,"nextItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"}},"content":"## :smiley: This is a friendly header\\n\\n## \ud83d\ude03 This is a friendly header (real smiley)"},{"id":"/2023/07/19/a","metadata":{"permalink":"/tests/blog/2023/07/19/a","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-a.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-a.mdx","title":"Test if href in feed resolved correctly","description":"absolute full url","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":2.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Test if href in feed resolved correctly"},"unlisted":false,"prevItem":{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/"},"nextItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"}},"content":"[absolute full url](https://github.com/facebook/docusaurus)\\n\\n[absolute url with implicit domain name](/tests/blog/2023/07/19/b)\\n\\n[relative url](2023-07-19-b.mdx)"},{"id":"/2023/07/19/b","metadata":{"permalink":"/tests/blog/2023/07/19/b","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-b.mdx","source":"@site/_dogfooding/_blog tests/2023-07-19-b.mdx","title":"Test Relative Path","description":"","date":"2023-07-19T00:00:00.000Z","tags":[],"readingTime":0,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"unlisted":false,"prevItem":{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a"},"nextItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"}},"content":""},{"id":"/x/y/z.html","metadata":{"permalink":"/tests/blog/x/y/z.html","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","source":"@site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx","title":"A post with html slug","description":"This is a blog post with an html slug!","date":"2022-10-02T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"A post with html slug","tags":["paginated-tag"],"slug":"/x/y/z.html"},"unlisted":false,"prevItem":{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b"},"nextItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"}},"content":"This is a blog post with an html slug!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/unlisted-post","metadata":{"permalink":"/tests/blog/unlisted-post","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","source":"@site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx","title":"Unlisted blog post","description":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.","date":"2022-08-24T00:00:00.000Z","tags":[{"label":"blog","permalink":"/tests/blog/tags/blog"},{"label":"visibility","permalink":"/tests/blog/tags/visibility"},{"label":"unlisted","permalink":"/tests/blog/tags/unlisted"}],"readingTime":4.2,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Unlisted blog post","unlisted":true,"tags":["blog","visibility","unlisted"],"slug":"/unlisted-post"},"unlisted":true},"content":"This unlisted blog post should be \\"hidden\\" in production, but remain accessible.\\n\\nIt is filtered from the sidebar, sitemap, SEO indexation..."},{"id":"/2022/04/20/dup-footnote","metadata":{"permalink":"/tests/blog/2022/04/20/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx","title":"First post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-04-20T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"First post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html"},"nextItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/22/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/22/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx","title":"Second post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-22T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Second post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"First post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/04/20/dup-footnote"},"nextItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/21/dup-footnote","metadata":{"permalink":"/tests/blog/2022/01/21/dup-footnote","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","source":"@site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx","title":"Third post with footnote to test posts with same footnote reference.","description":"foo","date":"2022-01-21T00:00:00.000Z","tags":[],"readingTime":1.8,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Third post with footnote to test posts with same footnote reference."},"unlisted":false,"prevItem":{"title":"Second post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/22/dup-footnote"},"nextItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"}},"content":"foo[^1]\\n\\nbar[^2]\\n\\nbaz[^3]\\n\\n[^1]: foo\\n[^2]: bar\\n[^3]: baz"},{"id":"/2022/01/20/image-only-authors","metadata":{"permalink":"/tests/blog/2022/01/20/image-only-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","source":"@site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx","title":"Image-only authors","description":"You can make a compact authors list without author names!","date":"2022-01-20T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png"},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png"},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png"},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png"},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png"},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png"},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png"},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png"},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png"},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png"},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png"},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png"},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png"},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png"},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png"},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png"},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png"},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png"},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png"}],"frontMatter":{"authors":[{"image_url":"https://github.com/endiliey.png","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"},{"image_url":"https://github.com/lex111.png","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png"},{"image_url":"https://github.com/slorber.png","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png"},{"image_url":"https://github.com/yangshun.png","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png"},{"image_url":"https://github.com/JoelMarcey.png","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png"},{"image_url":"https://github.com/Josh-Cena.png","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png"},{"image_url":"https://github.com/deltice.png","url":"https://github.com/deltice","imageURL":"https://github.com/deltice.png"},{"image_url":"https://github.com/SamChou19815.png","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png"},{"image_url":"https://github.com/ericnakagawa.png","url":"https://github.com/ericnakagawa","imageURL":"https://github.com/ericnakagawa.png"},{"image_url":"https://github.com/Simek.png","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png"},{"image_url":"https://github.com/hramos.png","url":"https://github.com/hramos","imageURL":"https://github.com/hramos.png"},{"image_url":"https://github.com/wgao19.png","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png"},{"image_url":"https://github.com/rickyvetter.png","url":"https://github.com/rickyvetter","imageURL":"https://github.com/rickyvetter.png"},{"image_url":"https://github.com/fanny.png","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png"},{"image_url":"https://github.com/armano2.png","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png"},{"image_url":"https://github.com/RDIL.png","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png"},{"image_url":"https://github.com/teikjun.png","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png"},{"image_url":"https://github.com/hong4rc.png","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png"},{"image_url":"https://github.com/anshulrgoyal.png","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png"},{"image_url":"https://github.com/italicize.png","url":"https://github.com/italicize","imageURL":"https://github.com/italicize.png"}],"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Third post with footnote to test posts with same footnote reference.","permalink":"/tests/blog/2022/01/21/dup-footnote"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"}},"content":"You can make a compact authors list without author names!"},{"id":"/2021/11/13/dup-title","metadata":{"permalink":"/tests/blog/2021/11/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx","title":"Post with duplicate title","description":"I hope I\'m still here","date":"2021-11-13T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Image-only authors","permalink":"/tests/blog/2022/01/20/image-only-authors"},"nextItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"}},"content":"I hope I\'m still here"},{"id":"/2021/10/08/blog-post-mdx-require-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx","title":"Blog post MDX require Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-08T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"label":"blog","permalink":"/tests/blog/tags/blog"},{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"label":"long-long","permalink":"/tests/blog/tags/long-long"},{"label":"long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"label":"long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"readingTime":6.6,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX require Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/11/13/dup-title"},"nextItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\nTest MDX with require calls\\n\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\n\\n<img src={useBaseUrl(\'/img/docusaurus.png\')} />\\n\\n<img src={require(\'../../static/img/docusaurus.png\').default} />\\n\\n<img src={require(\'@site/static/img/docusaurus.png\').default} />"},{"id":"/2021/10/07/blog-post-mdx-feed-tests","metadata":{"permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx","title":"Blog post MDX Feed tests","description":"Some MDX tests, mostly to test how the RSS feed render those","date":"2021-10-07T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"label":"blog","permalink":"/tests/blog/tags/blog"},{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"label":"long-long","permalink":"/tests/blog/tags/long-long"},{"label":"long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"label":"long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"}],"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog post MDX Feed tests","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],"hide_reading_time":true},"unlisted":false,"prevItem":{"title":"Blog post MDX require Feed tests","permalink":"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"},"nextItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"}},"content":"Some MDX tests, mostly to test how the RSS feed render those\\n\\n{/* truncate */}\\n\\n## Imports\\n\\nHere are some imports:\\n\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n## Exports\\n\\nHere are some exports:\\n\\nexport const someExport = 42;\\n\\n## Tabs test\\n\\nHere are some tabs:\\n\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n\\nHere are some tabs, inside `mdx-code-block`:\\n\\n```mdx-code-block\\n<Tabs>\\n <TabItem value=\\"apple\\" label=\\"Apple\\">\\n This is an apple \ud83c\udf4e\\n </TabItem>\\n <TabItem value=\\"orange\\" label=\\"Orange\\">\\n This is an orange \ud83c\udf4a\\n </TabItem>\\n</Tabs>\\n```"},{"id":"/2021/09/13/dup-title","metadata":{"permalink":"/tests/blog/2021/09/13/dup-title","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","source":"@site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx","title":"Post with duplicate title","description":"See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.","date":"2021-09-13T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":2,"hasTruncateMarker":false,"authors":[{"name":"Josh-Cena1"},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png"},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena"},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com"}],"frontMatter":{"tags":["paginated-tag"],"authors":[{"name":"Josh-Cena1"},{"name":"Josh-Cena2","image_url":"https://github.com/Josh-Cena.png","imageURL":"https://github.com/Josh-Cena.png"},{"name":"Josh-Cena3","url":"https://github.com/Josh-Cena"},{"name":"Josh-Cena4","email":"sidechen2003@gmail.com"}]},"unlisted":false,"prevItem":{"title":"Blog post MDX Feed tests","permalink":"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"},"nextItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"}},"content":"See https://github.com/facebook/docusaurus/issues/6059. This one and [2021-11-13-dup-title.md](./2021-11-13-dup-title.mdx) should both show up."},{"id":"/2021/08/23/multiple-authors","metadata":{"permalink":"/tests/blog/2021/08/23/multiple-authors","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","source":"@site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx","title":"Multiple authors","description":"You can have multiple authors for one blog post!","date":"2021-08-23T00:00:00.000Z","tags":[{"label":"blog","permalink":"/tests/blog/tags/blog"},{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus"},{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"label":"long","permalink":"/tests/blog/tags/long"},{"label":"long-long","permalink":"/tests/blog/tags/long-long"},{"label":"long-long-long","permalink":"/tests/blog/tags/long-long-long"},{"label":"long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long"},{"label":"long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long"}],"readingTime":1.8,"hasTruncateMarker":false,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4"}],"frontMatter":{"authors":["slorber",{"name":"Josh-Cena","image_url":"https://avatars.githubusercontent.com/u/55398995?v=4","url":"https://joshcena.com","imageURL":"https://avatars.githubusercontent.com/u/55398995?v=4"}],"tags":["blog","docusaurus","paginated-tag","long","long-long","long-long-long","long-long-long-long","long-long-long-long-long"]},"unlisted":false,"prevItem":{"title":"Post with duplicate title","permalink":"/tests/blog/2021/09/13/dup-title"},"nextItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"}},"content":"You can have multiple authors for one blog post!"},{"id":"/2021/08/22/no-author","metadata":{"permalink":"/tests/blog/2021/08/22/no-author","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-22-no-author.mdx","source":"@site/_dogfooding/_blog tests/2021-08-22-no-author.mdx","title":"Hmmm!","description":"This is a blog post from an anonymous author!","date":"2021-08-22T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":3.4,"hasTruncateMarker":false,"authors":[],"frontMatter":{"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Multiple authors","permalink":"/tests/blog/2021/08/23/multiple-authors"},"nextItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"This is a blog post from an anonymous author!\\n\\n```mdx-code-block\\nimport Partial from \\"./_partial.mdx\\"\\n\\n<Partial />\\n```"},{"id":"/2021/08/21/blog-post-toc-tests","metadata":{"permalink":"/tests/blog/2021/08/21/blog-post-toc-tests","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","source":"@site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx","title":"Blog TOC FrontMatter tests","description":"{/ truncate /}","date":"2021-08-21T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"}],"readingTime":1.8,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Blog TOC FrontMatter tests","authors":["slorber"],"toc_min_heading_level":2,"toc_max_heading_level":4,"tags":["paginated-tag"]},"unlisted":false,"prevItem":{"title":"Hmmm!","permalink":"/tests/blog/2021/08/22/no-author"},"nextItem":{"title":"Using twice the blog plugin","permalink":"/tests/blog/2020/08/03/demo/second-blog-intro"}},"content":"{/* truncate */}\\n\\nimport Content from \'@site/_dogfooding/_partials/toc-tests.mdx\';\\n\\n<Content />"},{"id":"/2020/08/03/demo/second-blog-intro","metadata":{"permalink":"/tests/blog/2020/08/03/demo/second-blog-intro","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","source":"@site/_dogfooding/_blog tests/demo/2020-08-03-second-blog-intro.mdx","title":"Using twice the blog plugin","description":"Did you know you can use multiple instances of the same plugin?","date":"2020-08-03T00:00:00.000Z","tags":[{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag"},{"label":"blog","permalink":"/tests/blog/tags/blog"},{"label":"docusaurus","permalink":"/tests/blog/tags/docusaurus"}],"readingTime":7,"hasTruncateMarker":true,"authors":[{"name":"Sebastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","twitter":"sebastienlorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Using twice the blog plugin","authors":["slorber"],"tags":["paginated-tag","blog","docusaurus"]},"unlisted":false,"prevItem":{"title":"Blog TOC FrontMatter tests","permalink":"/tests/blog/2021/08/21/blog-post-toc-tests"}},"content":"Did you know you can use multiple instances of the same plugin?\\n\\n{/* truncate */}\\n\\n:::tip\\n\\nUsing twice the blog plugin permits you to create more than one blog on the same Docusaurus website!\\n\\n:::"}],"blogListPaginated":[{"items":["/2023/08/05/","/2023/07/19/a","/2023/07/19/b"],"metadata":{"permalink":"/tests/blog","page":1,"postsPerPage":3,"totalPages":6,"totalCount":16,"nextPage":"/tests/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/x/y/z.html","/2022/04/20/dup-footnote","/2022/01/22/dup-footnote"],"metadata":{"permalink":"/tests/blog/page/2","page":2,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog","nextPage":"/tests/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2022/01/21/dup-footnote","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/3","page":3,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/2","nextPage":"/tests/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/page/4","page":4,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/3","nextPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/page/5","page":5,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/4","nextPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/page/6","page":6,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}}],"blogTags":{"/tests/blog/tags/paginated-tag":{"label":"paginated-tag","items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title","/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title","/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests","/2020/08/03/demo/second-blog-intro"],"permalink":"/tests/blog/tags/paginated-tag","pages":[{"items":["/x/y/z.html","/2022/01/20/image-only-authors","/2021/11/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag","page":1,"postsPerPage":3,"totalPages":4,"totalCount":10,"nextPage":"/tests/blog/tags/paginated-tag/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/09/13/dup-title"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/2","page":2,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag","nextPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2021/08/23/multiple-authors","/2021/08/22/no-author","/2021/08/21/blog-post-toc-tests"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/3","page":3,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/2","nextPage":"/tests/blog/tags/paginated-tag/page/4","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/paginated-tag/page/4","page":4,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/3","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/blog":{"label":"blog","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"permalink":"/tests/blog/tags/blog","pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/blog","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/blog/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/blog","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/visibility":{"label":"visibility","items":["/unlisted-post"],"permalink":"/tests/blog/tags/visibility","pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/visibility","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/unlisted":{"label":"unlisted","items":["/unlisted-post"],"permalink":"/tests/blog/tags/unlisted","pages":[{"items":["/unlisted-post"],"metadata":{"permalink":"/tests/blog/tags/unlisted","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":true},"/tests/blog/tags/docusaurus":{"label":"docusaurus","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors","/2020/08/03/demo/second-blog-intro"],"permalink":"/tests/blog/tags/docusaurus","pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/docusaurus","page":1,"postsPerPage":3,"totalPages":2,"totalCount":4,"nextPage":"/tests/blog/tags/docusaurus/page/2","blogDescription":"Blog","blogTitle":"Blog"}},{"items":["/2020/08/03/demo/second-blog-intro"],"metadata":{"permalink":"/tests/blog/tags/docusaurus/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/docusaurus","blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long":{"label":"long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"permalink":"/tests/blog/tags/long-long","pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long":{"label":"long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"permalink":"/tests/blog/tags/long-long-long","pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long":{"label":"long-long-long-long","items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"permalink":"/tests/blog/tags/long-long-long-long","pages":[{"items":["/2021/10/08/blog-post-mdx-require-feed-tests","/2021/10/07/blog-post-mdx-feed-tests","/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long":{"label":"long","items":["/2021/08/23/multiple-authors"],"permalink":"/tests/blog/tags/long","pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false},"/tests/blog/tags/long-long-long-long-long":{"label":"long-long-long-long-long","items":["/2021/08/23/multiple-authors"],"permalink":"/tests/blog/tags/long-long-long-long-long","pages":[{"items":["/2021/08/23/multiple-authors"],"metadata":{"permalink":"/tests/blog/tags/long-long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}],"unlisted":false}},"blogTagsListPath":"/tests/blog/tags"}},"docusaurus-plugin-content-pages":{"default":[{"type":"jsx","permalink":"/","source":"@site/src/pages/index.tsx"},{"type":"mdx","permalink":"/tests","source":"@site/src/pages/tests.mdx","title":"Tests","description":"Docusaurus use some extra plugin instances for testing / dogfooding purpose:","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/tests.mdx","unlisted":false},{"type":"jsx","permalink":"/versions","source":"@site/src/pages/versions.tsx"},{"type":"mdx","permalink":"/examples/markdownPageExample","source":"@site/src/pages/examples/markdownPageExample.mdx","title":"Markdown Page example","description":"Markdown Page example","frontMatter":{"title":"Markdown Page example","description":"Markdown Page example","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx","unlisted":false},{"type":"mdx","permalink":"/examples/noIndex","source":"@site/src/pages/examples/noIndex.mdx","title":"No Index Page example","description":"This page will not be indexed by search engines because it contains the page following page metadata markup:","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/noIndex.mdx","unlisted":false},{"type":"jsx","permalink":"/showcase/","source":"@site/src/pages/showcase/index.tsx"}],"pages-tests":[{"type":"jsx","permalink":"/tests/pages/analytics","source":"@site/_dogfooding/_pages tests/analytics.tsx"},{"type":"mdx","permalink":"/tests/pages/code-block-tests","source":"@site/_dogfooding/_pages tests/code-block-tests.mdx","title":"Code block tests","description":"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.","frontMatter":{},"lastUpdatedBy":"Tatsunori Uchino","lastUpdatedAt":1705090404000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/crashTest","source":"@site/_dogfooding/_pages tests/crashTest.tsx"},{"type":"mdx","permalink":"/tests/pages/diagrams","source":"@site/_dogfooding/_pages tests/diagrams.mdx","title":"Diagram Examples","description":"Invalid Diagrams","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1694704987000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/diagrams.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/embeds","source":"@site/_dogfooding/_pages tests/embeds.tsx"},{"type":"jsx","permalink":"/tests/pages/error-boundary-tests","source":"@site/_dogfooding/_pages tests/error-boundary-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/head-metadata","source":"@site/_dogfooding/_pages tests/head-metadata.mdx","description":"Head Metadata tests","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1672858796000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/hydration-tests","source":"@site/_dogfooding/_pages tests/hydration-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/","source":"@site/_dogfooding/_pages tests/index.mdx","description":"Page","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1686246015000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/index.mdx","unlisted":false},{"type":"jsx","permalink":"/tests/pages/layout-no-children","source":"@site/_dogfooding/_pages tests/layout-no-children.tsx"},{"type":"jsx","permalink":"/tests/pages/link-tests","source":"@site/_dogfooding/_pages tests/link-tests.tsx"},{"type":"mdx","permalink":"/tests/pages/markdown-tests-md","source":"@site/_dogfooding/_pages tests/markdown-tests-md.md","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1687536905000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-md.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/markdown-tests-mdx","source":"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx","title":"Markdown Page tests title","description":"Markdown Page tests description","frontMatter":{"title":"Markdown Page tests title","description":"Markdown Page tests description","wrapperClassName":"docusaurus-markdown-example"},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1706203091000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/navbar-dropdown-tests","source":"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","title":"navbar-dropdown-tests","description":"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.","frontMatter":{},"lastUpdatedBy":"Kagan","lastUpdatedAt":1677167766000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/page-toc-tests","source":"@site/_dogfooding/_pages tests/page-toc-tests.mdx","frontMatter":{"toc_min_heading_level":2,"toc_max_heading_level":4},"lastUpdatedBy":"Anatoly Kopyl","lastUpdatedAt":1705687091000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/page-toc-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/seo","source":"@site/_dogfooding/_pages tests/seo.md","title":"custom SEO title","description":"custom SEO description","frontMatter":{"title":"custom SEO title","description":"custom SEO description","keywords":["custom","keywords"],"image":"./local-image.png"},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1686838020000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md","unlisted":false},{"type":"mdx","permalink":"/tests/pages/tabs-tests","source":"@site/_dogfooding/_pages tests/tabs-tests.mdx","title":"Tabs tests","description":"Tabs with dynamic default value","frontMatter":{},"lastUpdatedBy":"S\xe9bastien Lorber","lastUpdatedAt":1675424938000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx","unlisted":false},{"type":"mdx","permalink":"/tests/pages/unlisted","source":"@site/_dogfooding/_pages tests/unlisted.mdx","title":"Unlisted page","description":"This unlisted page should always be directly accessible, but hidden from search engines","frontMatter":{"unlisted":true},"lastUpdatedBy":"Jody Heavener","lastUpdatedAt":1667482301000,"editUrl":"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx","unlisted":true},{"type":"jsx","permalink":"/tests/pages/z-index-tests","source":"@site/_dogfooding/_pages tests/z-index-tests.tsx"},{"type":"jsx","permalink":"/tests/pages/react-18/","source":"@site/_dogfooding/_pages tests/react-18/index.tsx"}]},"docusaurus-plugin-debug":{},"docusaurus-plugin-google-gtag":{},"docusaurus-plugin-sitemap":{},"docusaurus-theme-classic":{},"docusaurus-theme-search-algolia":{},"changelog-plugin":{"default":{"blogSidebarTitle":"Changelog","blogPosts":[{"id":"/3.2.1","metadata":{"permalink":"/changelog/3.2.1","source":"@site/changelog/source/3.2.1.md","title":"3.2.1","description":"Bug Fix","date":"2024-04-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-04-04T20:00","authors":["OzakIOne","slorber"]},"unlisted":false,"nextItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#10012](https://github.com/facebook/docusaurus/pull/10012) fix(core): fix configurePostCss v3.2 regression ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#9980](https://github.com/facebook/docusaurus/pull/9980) docs: remove old github action description ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10014](https://github.com/facebook/docusaurus/pull/10014) docs(website): fix SEO docs headTags example ([@OzakIOne](https://github.com/OzakIOne))\\n- [#10004](https://github.com/facebook/docusaurus/pull/10004) docs(website): Announce v3.2 on website/homepage ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- [#10006](https://github.com/facebook/docusaurus/pull/10006) chore(deps): bump actions/dependency-review-action from 4.2.4 to 4.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 2\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.2.0","metadata":{"permalink":"/changelog/3.2.0","source":"@site/changelog/source/3.2.0.md","title":"3.2.0","description":"New Feature","date":"2024-03-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Josue [4tro] A","alias":"4troDev","url":"https://github.com/4troDev","imageURL":"https://github.com/4troDev.png","key":"4troDev"},{"name":"Anatoly Kopyl","alias":"anatolykopyl","url":"https://github.com/anatolykopyl","imageURL":"https://github.com/anatolykopyl.png","key":"anatolykopyl"},{"name":"axel7083","alias":"axel7083","url":"https://github.com/axel7083","imageURL":"https://github.com/axel7083.png","key":"axel7083"},{"name":"\u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432","alias":"baradusov","url":"https://github.com/baradusov","imageURL":"https://github.com/baradusov.png","key":"baradusov"},{"name":"Chris Bateman","alias":"chris-bateman","url":"https://github.com/chris-bateman","imageURL":"https://github.com/chris-bateman.png","key":"chris-bateman"},{"name":"Zed Spencer-Milnes","alias":"GingerGeek","url":"https://github.com/GingerGeek","imageURL":"https://github.com/GingerGeek.png","key":"GingerGeek"},{"name":"Hallbj\xf6rn Magn\xfasson","alias":"Hallinn","url":"https://github.com/Hallinn","imageURL":"https://github.com/Hallinn.png","key":"Hallinn"},{"name":"Liviu Ionescu","alias":"ilg-ul","url":"https://github.com/ilg-ul","imageURL":"https://github.com/ilg-ul.png","key":"ilg-ul"},{"name":"n4n5","alias":"Its-Just-Nans","url":"https://github.com/Its-Just-Nans","imageURL":"https://github.com/Its-Just-Nans.png","key":"Its-Just-Nans"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"krinza.eth","alias":"kaymomin","url":"https://github.com/kaymomin","imageURL":"https://github.com/kaymomin.png","key":"kaymomin"},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt"},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt"},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne"},{"name":"Rafael Martins","alias":"Rafael-Martins","url":"https://github.com/Rafael-Martins","imageURL":"https://github.com/Rafael-Martins.png","key":"Rafael-Martins"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"suenryu","alias":"Suenaga-Ryuya","url":"https://github.com/Suenaga-Ryuya","imageURL":"https://github.com/Suenaga-Ryuya.png","key":"Suenaga-Ryuya"},{"name":"Fafowora Sunkanmi","alias":"sunkanmii","url":"https://github.com/sunkanmii","imageURL":"https://github.com/sunkanmii.png","key":"sunkanmii"},{"name":"Vahid Naderi","alias":"VahidNaderi","url":"https://github.com/VahidNaderi","imageURL":"https://github.com/VahidNaderi.png","key":"VahidNaderi"},{"name":"Vlad Nestorov","alias":"vlad-nestorov","url":"https://github.com/vlad-nestorov","imageURL":"https://github.com/vlad-nestorov.png","key":"vlad-nestorov"},{"name":"\u7fca\u5c0f\u4e45","alias":"yixiaojiu","url":"https://github.com/yixiaojiu","imageURL":"https://github.com/yixiaojiu.png","key":"yixiaojiu"}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-03-29T20:00","authors":["4troDev","anatolykopyl","axel7083","baradusov","chris-bateman","GingerGeek","Hallinn","ilg-ul","Its-Just-Nans","johnnyreilly","Josh-Cena","kaymomin","mxschmitt","Oreoxmt","OzakIOne","Rafael-Martins","slorber","Suenaga-Ryuya","sunkanmii","VahidNaderi","vlad-nestorov","yixiaojiu"]},"unlisted":false,"prevItem":{"title":"3.2.1","permalink":"/changelog/3.2.1"},"nextItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9954](https://github.com/facebook/docusaurus/pull/9954) feat(sitemap): add support for \\"lastmod\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#9912](https://github.com/facebook/docusaurus/pull/9912) feat(blog): add LastUpdateAuthor & LastUpdateTime ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#9931](https://github.com/facebook/docusaurus/pull/9931) feat(core): add new plugin allContentLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9928](https://github.com/facebook/docusaurus/pull/9928) feat(theme-translations) Icelandic (is) ([@Hallinn](https://github.com/Hallinn))\\n- `docusaurus-plugin-content-blog`\\n - [#9886](https://github.com/facebook/docusaurus/pull/9886) feat(blog): allow processing blog posts through a processBlogPosts function ([@OzakIOne](https://github.com/OzakIOne))\\n - [#9838](https://github.com/facebook/docusaurus/pull/9838) feat(blog): add blog pageBasePath plugin option ([@ilg-ul](https://github.com/ilg-ul))\\n- `docusaurus`\\n - [#9681](https://github.com/facebook/docusaurus/pull/9681) feat(swizzle): ask user preferred language if no language CLI option provided ([@yixiaojiu](https://github.com/yixiaojiu))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#9442](https://github.com/facebook/docusaurus/pull/9442) feat(create-docusaurus): ask user for preferred language when no language CLI option provided ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- `docusaurus-plugin-vercel-analytics`\\n - [#9687](https://github.com/facebook/docusaurus/pull/9687) feat(plugin-vercel-analytics): add new vercel analytics plugin ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`\\n - [#9684](https://github.com/facebook/docusaurus/pull/9684) feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials ([@anatolykopyl](https://github.com/anatolykopyl))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#9999](https://github.com/facebook/docusaurus/pull/9999) fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9945](https://github.com/facebook/docusaurus/pull/9945) fix(a11y): move focus algolia-search focus back to search input on Escape ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-plugin-content-blog`\\n - [#9920](https://github.com/facebook/docusaurus/pull/9920) fix(blog): apply trailing slash to blog feed ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`\\n - [#9944](https://github.com/facebook/docusaurus/pull/9944) fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button ([@mxschmitt](https://github.com/mxschmitt))\\n- `docusaurus-theme-translations`\\n - [#9915](https://github.com/facebook/docusaurus/pull/9915) fix(theme-translations): complete and modify Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9910](https://github.com/facebook/docusaurus/pull/9910) fix(theme-translations): add Japanese translations ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n - [#9872](https://github.com/facebook/docusaurus/pull/9872) fix(theme-translations): complete and improve Spanish theme translations ([@4troDev](https://github.com/4troDev))\\n - [#9812](https://github.com/facebook/docusaurus/pull/9812) fix(i18n): add missing theme translations for fa locale ([@VahidNaderi](https://github.com/VahidNaderi))\\n- `docusaurus-utils`\\n - [#9897](https://github.com/facebook/docusaurus/pull/9897) fix(mdx-loader): mdx-code-block should support CRLF ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9878](https://github.com/facebook/docusaurus/pull/9878) fix(core): fix default i18n calendar used, infer it from locale if possible ([@slorber](https://github.com/slorber))\\n - [#9852](https://github.com/facebook/docusaurus/pull/9852) fix(core): ensure core error boundary is able to render theme layout ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#9861](https://github.com/facebook/docusaurus/pull/9861) fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9851](https://github.com/facebook/docusaurus/pull/9851) fix(theme-classic): should use plurals for category items description ([@baradusov](https://github.com/baradusov))\\n\\n## :running: Performance\\n\\n- `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9975](https://github.com/facebook/docusaurus/pull/9975) refactor(core): improve dev perf, fine-grained site reloads - part 3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#9968](https://github.com/facebook/docusaurus/pull/9968) refactor(core): improve dev perf, fine-grained site reloads - part2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#9903](https://github.com/facebook/docusaurus/pull/9903) refactor(core): improve dev perf, fine-grained site reloads - part1 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#9890](https://github.com/facebook/docusaurus/pull/9890) perf: optimize getFileCommitDate, make it async ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9798](https://github.com/facebook/docusaurus/pull/9798) refactor(core): internalize, simplify and optimize the SSG logic ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9868](https://github.com/facebook/docusaurus/pull/9868) refactor(theme): dates should be formatted on the client-side instead of in nodejs code ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#9669](https://github.com/facebook/docusaurus/pull/9669) refactor(theme): use JSON-LD instead of microdata for blog structured data ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#9839](https://github.com/facebook/docusaurus/pull/9839) refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :memo: Documentation\\n\\n- [#9937](https://github.com/facebook/docusaurus/pull/9937) docs: use official GitHub Action to deploy to GitHub Pages ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- [#9971](https://github.com/facebook/docusaurus/pull/9971) docs: replace VuePress by VitePress on tool comparison section ([@sunkanmii](https://github.com/sunkanmii))\\n- [#9914](https://github.com/facebook/docusaurus/pull/9914) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9913](https://github.com/facebook/docusaurus/pull/9913) docs: update legacy MDX v1 links to markdown links ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9906](https://github.com/facebook/docusaurus/pull/9906) docs: emphasize \\"index slug\\" convention ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#9877](https://github.com/facebook/docusaurus/pull/9877) docs: fix typos in deployment.mdx ([@Oreoxmt](https://github.com/Oreoxmt))\\n- [#9845](https://github.com/facebook/docusaurus/pull/9845) docs: typo ([@OzakIOne](https://github.com/OzakIOne))\\n- [#9816](https://github.com/facebook/docusaurus/pull/9816) docs: Add docs for Mermaid Component ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n\\n## :robot: Dependencies\\n\\n- [#9981](https://github.com/facebook/docusaurus/pull/9981) chore(deps): bump actions/dependency-review-action from 4.1.3 to 4.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9982](https://github.com/facebook/docusaurus/pull/9982) chore(deps): bump katex from 0.16.8 to 0.16.10 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9983](https://github.com/facebook/docusaurus/pull/9983) chore(deps): bump express from 4.18.2 to 4.19.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9977](https://github.com/facebook/docusaurus/pull/9977) chore(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9958](https://github.com/facebook/docusaurus/pull/9958) chore(deps): bump follow-redirects from 1.15.4 to 1.15.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9892](https://github.com/facebook/docusaurus/pull/9892) chore(deps): bump actions/dependency-review-action from 4.1.2 to 4.1.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9869](https://github.com/facebook/docusaurus/pull/9869) chore(deps): bump actions/dependency-review-action from 4.0.0 to 4.1.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9874](https://github.com/facebook/docusaurus/pull/9874) chore(deps): bump ip from 2.0.0 to 2.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9843](https://github.com/facebook/docusaurus/pull/9843) chore(deps): bump actions/setup-node from 4.0.1 to 4.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9824](https://github.com/facebook/docusaurus/pull/9824) chore(deps): bump treosh/lighthouse-ci-action from 10.1.0 to 11.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- [#9823](https://github.com/facebook/docusaurus/pull/9823) chore(deps): bump marocchino/sticky-pull-request-comment from 2.8.0 to 2.9.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#9972](https://github.com/facebook/docusaurus/pull/9972) refactor(utils): remove duplicated function ([@OzakIOne](https://github.com/OzakIOne))\\n- Other\\n - [#9965](https://github.com/facebook/docusaurus/pull/9965) refactor(website): organise blog posts by year ([@GingerGeek](https://github.com/GingerGeek))\\n - [#9865](https://github.com/facebook/docusaurus/pull/9865) chore(website): update @crowdin/crowdin-api-client ([@chris-bateman](https://github.com/chris-bateman))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`\\n - [#9963](https://github.com/facebook/docusaurus/pull/9963) refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds ([@slorber](https://github.com/slorber))\\n\\n## Committers: 22\\n\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Anatoly Kopyl ([@anatolykopyl](https://github.com/anatolykopyl))\\n- Chris Bateman ([@chris-bateman](https://github.com/chris-bateman))\\n- Fafowora Sunkanmi ([@sunkanmii](https://github.com/sunkanmii))\\n- Hallbj\xf6rn Magn\xfasson ([@Hallinn](https://github.com/Hallinn))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Josue [4tro] A ([@4troDev](https://github.com/4troDev))\\n- Liviu Ionescu ([@ilg-ul](https://github.com/ilg-ul))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Rafael Martins ([@Rafael-Martins](https://github.com/Rafael-Martins))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vahid Naderi ([@VahidNaderi](https://github.com/VahidNaderi))\\n- Vlad Nestorov ([@vlad-nestorov](https://github.com/vlad-nestorov))\\n- Zed Spencer-Milnes ([@GingerGeek](https://github.com/GingerGeek))\\n- axel7083 ([@axel7083](https://github.com/axel7083))\\n- krinza.eth ([@kaymomin](https://github.com/kaymomin))\\n- n4n5 ([@Its-Just-Nans](https://github.com/Its-Just-Nans))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- suenryu ([@Suenaga-Ryuya](https://github.com/Suenaga-Ryuya))\\n- \u041d\u0443\u0440\u0438\u043b\u044c \u0411\u0430\u0440\u0430\u0434\u0443\u0441\u043e\u0432 ([@baradusov](https://github.com/baradusov))\\n- \u7fca\u5c0f\u4e45 ([@yixiaojiu](https://github.com/yixiaojiu))"},{"id":"/3.1.1","metadata":{"permalink":"/changelog/3.1.1","source":"@site/changelog/source/3.1.1.md","title":"3.1.1","description":"Bug Fix","date":"2024-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang"},{"name":"eitsupi","alias":"eitsupi","url":"https://github.com/eitsupi","imageURL":"https://github.com/eitsupi.png","key":"eitsupi"},{"name":"Jack Robson","alias":"jack-robson","url":"https://github.com/jack-robson","imageURL":"https://github.com/jack-robson.png","key":"jack-robson"},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u"}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-26T20:00","authors":["dawei-wang","eitsupi","jack-robson","sanjaiyan-dev","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.2.0","permalink":"/changelog/3.2.0"},"nextItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#9791](https://github.com/facebook/docusaurus/pull/9791) fix(core): broken links optimization behaves differently than non-optimized logic ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9788](https://github.com/facebook/docusaurus/pull/9788) fix(core): links with target \\"\\\\_blank\\" should no be checked by the broken link checker ([@slorber](https://github.com/slorber))\\n - [#9407](https://github.com/facebook/docusaurus/pull/9407) fix(core): conditionally include `hostname` parameter when using\u2026 ([@jack-robson](https://github.com/jack-robson))\\n- `docusaurus-utils`\\n - [#9776](https://github.com/facebook/docusaurus/pull/9776) fix(mdx-loader): allow spaces before `mdx-code-block` info string ([@eitsupi](https://github.com/eitsupi))\\n- `create-docusaurus`\\n - [#9783](https://github.com/facebook/docusaurus/pull/9783) fix(create-docusaurus): fix typo in init template sample docs ([@dawei-wang](https://github.com/dawei-wang))\\n- `docusaurus-theme-common`\\n - [#9727](https://github.com/facebook/docusaurus/pull/9727) fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-mermaid`\\n - [#9733](https://github.com/facebook/docusaurus/pull/9733) fix: remove old useless mdx typedefs ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#9732](https://github.com/facebook/docusaurus/pull/9732) fix(core): various broken anchor link fixes ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9778](https://github.com/facebook/docusaurus/pull/9778) perf(core): optimize broken links checker ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9470](https://github.com/facebook/docusaurus/pull/9470) polish(theme): MDX images should use async decoding ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n\\n## Committers: 6\\n\\n- Jack Robson ([@jack-robson](https://github.com/jack-robson))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@eitsupi](https://github.com/eitsupi)"},{"id":"/3.1.0","metadata":{"permalink":"/changelog/3.1.0","source":"@site/changelog/source/3.1.0.md","title":"3.1.0","description":"New Feature","date":"2024-01-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"axmmisaka","alias":"axmmisaka","url":"https://github.com/axmmisaka","imageURL":"https://github.com/axmmisaka.png","key":"axmmisaka"},{"name":"c0h1b4","alias":"c0h1b4","url":"https://github.com/c0h1b4","imageURL":"https://github.com/c0h1b4.png","key":"c0h1b4"},{"name":"Janessa Garrow","alias":"jgarrow","url":"https://github.com/jgarrow","imageURL":"https://github.com/jgarrow.png","key":"jgarrow"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne"},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u"}],"frontMatter":{"mdx":{"format":"md"},"date":"2024-01-05T20:00","authors":["axmmisaka","c0h1b4","jgarrow","Josh-Cena","OzakIOne","SimenB","slorber","tats-u"]},"unlisted":false,"prevItem":{"title":"3.1.1","permalink":"/changelog/3.1.1"},"nextItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9528](https://github.com/facebook/docusaurus/pull/9528) feat(core): make broken link checker detect broken anchors - add `onBrokenAnchors` config ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9674](https://github.com/facebook/docusaurus/pull/9674) feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9671](https://github.com/facebook/docusaurus/pull/9671) feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9624](https://github.com/facebook/docusaurus/pull/9624) feat: siteConfig.markdown.parseFrontMatter hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9610](https://github.com/facebook/docusaurus/pull/9610) feat(core): enable port configuration via environment variable ([@OzakIOne](https://github.com/OzakIOne))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#9704](https://github.com/facebook/docusaurus/pull/9704) fix(theme): allow empty code blocks and live playgrounds ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9696](https://github.com/facebook/docusaurus/pull/9696) fix(create-docusaurus): fix init template code blocks, and little improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#9668](https://github.com/facebook/docusaurus/pull/9668) fix(pwa-plugin): upgrade workbox ([@SimenB](https://github.com/SimenB))\\n- `docusaurus`\\n - [#9648](https://github.com/facebook/docusaurus/pull/9648) fix(cli): output help when no conventional config + no subcommand ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#9631](https://github.com/facebook/docusaurus/pull/9631) fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9617](https://github.com/facebook/docusaurus/pull/9617) fix(utils): Markdown link replacement with <> but no spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#9612](https://github.com/facebook/docusaurus/pull/9612) fix(type-aliases): add `title` prop for imported inline SVG React components ([@axmmisaka](https://github.com/axmmisaka))\\n- `docusaurus-plugin-content-blog`\\n - [#9581](https://github.com/facebook/docusaurus/pull/9581) fix(content-blog): add baseUrl for author.image_url ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-theme-translations`\\n - [#9477](https://github.com/facebook/docusaurus/pull/9477) fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) ([@c0h1b4](https://github.com/c0h1b4))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#9335](https://github.com/facebook/docusaurus/pull/9335) refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize ([@jgarrow](https://github.com/jgarrow))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-search-algolia`\\n - [#9604](https://github.com/facebook/docusaurus/pull/9604) chore: add lint autofix CI job ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Janessa Garrow ([@jgarrow](https://github.com/jgarrow))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- [@c0h1b4](https://github.com/c0h1b4)\\n- axmmisaka ([@axmmisaka](https://github.com/axmmisaka))\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))"},{"id":"/3.0.1","metadata":{"permalink":"/changelog/3.0.1","source":"@site/changelog/source/3.0.1.md","title":"3.0.1","description":"Bug Fix","date":"2023-11-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy"},{"name":"MCR Studio","alias":"mcrstudio","url":"https://github.com/mcrstudio","imageURL":"https://github.com/mcrstudio.png","key":"mcrstudio"},{"name":"Nick Gerleman","alias":"NickGerleman","url":"https://github.com/NickGerleman","imageURL":"https://github.com/NickGerleman.png","key":"NickGerleman"},{"name":"reece-white","alias":"reece-white","url":"https://github.com/reece-white","imageURL":"https://github.com/reece-white.png","key":"reece-white"},{"name":"Shreesh Nautiyal","alias":"Shreesh09","url":"https://github.com/Shreesh09","imageURL":"https://github.com/Shreesh09.png","key":"Shreesh09"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-11-30T20:00","authors":["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},"unlisted":false,"prevItem":{"title":"3.1.0","permalink":"/changelog/3.1.0"},"nextItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-utils`\\n - [#9570](https://github.com/facebook/docusaurus/pull/9570) fix: add v2 retrocompatible support for quoted admonitions ([@slorber](https://github.com/slorber))\\n - [#9535](https://github.com/facebook/docusaurus/pull/9535) fix: v3 admonitions should support v2 title syntax for nested admonitions ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#9531](https://github.com/facebook/docusaurus/pull/9531) fix(theme): docs html sidebar items should always be visible ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9530](https://github.com/facebook/docusaurus/pull/9530) fix(theme): fix firefox CSS :has() support bug ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9487](https://github.com/facebook/docusaurus/pull/9487) fix(create-docusaurus): fix readme docusaurus 2 ref ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-debug`\\n - [#9566](https://github.com/facebook/docusaurus/pull/9566) chore(debug-plugin): migrate to a new maintained JSON Viewer ([@mcrstudio](https://github.com/mcrstudio))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9572](https://github.com/facebook/docusaurus/pull/9572) chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx ([@harryzcy](https://github.com/harryzcy))\\n - [#9567](https://github.com/facebook/docusaurus/pull/9567) fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#9464](https://github.com/facebook/docusaurus/pull/9464) chore: Upgrade clsx to 2.0.0 ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus`\\n - [#9547](https://github.com/facebook/docusaurus/pull/9547) chore(core): replace `wait-on` dependency with custom lighter code ([@NickGerleman](https://github.com/NickGerleman))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#9529](https://github.com/facebook/docusaurus/pull/9529) chore: ugrade babel dependencies to v7.23.3 ([@reece-white](https://github.com/reece-white))\\n\\n## Committers: 6\\n\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- MCR Studio ([@mcrstudio](https://github.com/mcrstudio))\\n- Nick Gerleman ([@NickGerleman](https://github.com/NickGerleman))\\n- Shreesh Nautiyal ([@Shreesh09](https://github.com/Shreesh09))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@reece-white](https://github.com/reece-white)"},{"id":"/3.0.0","metadata":{"permalink":"/changelog/3.0.0","source":"@site/changelog/source/3.0.0.md","title":"3.0.0","description":"Breaking Change","date":"2023-10-31T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Wan Sim","alias":"0420syj","url":"https://github.com/0420syj","imageURL":"https://github.com/0420syj.png","key":"0420syj"},{"name":"Abhinandan Wadhwa","alias":"abhinandanwadwa","url":"https://github.com/abhinandanwadwa","imageURL":"https://github.com/abhinandanwadwa.png","key":"abhinandanwadwa"},{"name":"Abinash Satapathy","alias":"Abinashbunty","url":"https://github.com/Abinashbunty","imageURL":"https://github.com/Abinashbunty.png","key":"Abinashbunty"},{"name":"Adam Patterson","alias":"adampatterson","url":"https://github.com/adampatterson","imageURL":"https://github.com/adampatterson.png","key":"adampatterson"},{"name":"Adithya Krishna","alias":"adithyaakrishna","url":"https://github.com/adithyaakrishna","imageURL":"https://github.com/adithyaakrishna.png","key":"adithyaakrishna"},{"name":"Hayden Hong","alias":"AFRUITPIE","url":"https://github.com/AFRUITPIE","imageURL":"https://github.com/AFRUITPIE.png","key":"AFRUITPIE"},{"name":"Craigory Coppola","alias":"AgentEnder","url":"https://github.com/AgentEnder","imageURL":"https://github.com/AgentEnder.png","key":"AgentEnder"},{"name":"Akshay Bhalotia","alias":"akshaybhalotia","url":"https://github.com/akshaybhalotia","imageURL":"https://github.com/akshaybhalotia.png","key":"akshaybhalotia"},{"name":"allyw2002","alias":"allyw2002","url":"https://github.com/allyw2002","imageURL":"https://github.com/allyw2002.png","key":"allyw2002"},{"name":"Ahmad Shrif","alias":"amdshrif","url":"https://github.com/amdshrif","imageURL":"https://github.com/amdshrif.png","key":"amdshrif"},{"name":"Ahmed Mustafa Malik","alias":"amm98d","url":"https://github.com/amm98d","imageURL":"https://github.com/amm98d.png","key":"amm98d"},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos"},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols"},{"name":"Anton Kastritskii","alias":"antonk52","url":"https://github.com/antonk52","imageURL":"https://github.com/antonk52.png","key":"antonk52"},{"name":"Antony Onipko","alias":"antonyoni","url":"https://github.com/antonyoni","imageURL":"https://github.com/antonyoni.png","key":"antonyoni"},{"name":"Aqueeb","alias":"aqueeb","url":"https://github.com/aqueeb","imageURL":"https://github.com/aqueeb.png","key":"aqueeb"},{"name":"Martin Adamko","alias":"attitude","url":"https://github.com/attitude","imageURL":"https://github.com/attitude.png","key":"attitude"},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624"},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz"},{"name":"bitpredator","alias":"bitpredator","url":"https://github.com/bitpredator","imageURL":"https://github.com/bitpredator.png","key":"bitpredator"},{"name":"Joe Williams","alias":"BubbaJoe","url":"https://github.com/BubbaJoe","imageURL":"https://github.com/BubbaJoe.png","key":"BubbaJoe"},{"name":"Dinh Bao Dang","alias":"chillinPanda","url":"https://github.com/chillinPanda","imageURL":"https://github.com/chillinPanda.png","key":"chillinPanda"},{"name":"Bei Chu","alias":"chubei","url":"https://github.com/chubei","imageURL":"https://github.com/chubei.png","key":"chubei"},{"name":"\u521d\u51ac","alias":"chudongvip","url":"https://github.com/chudongvip","imageURL":"https://github.com/chudongvip.png","key":"chudongvip"},{"name":"Ryosuke Igarashi","alias":"cm-igarashi-ryosuke","url":"https://github.com/cm-igarashi-ryosuke","imageURL":"https://github.com/cm-igarashi-ryosuke.png","key":"cm-igarashi-ryosuke"},{"name":"Colin McDonnell","alias":"colinhacks","url":"https://github.com/colinhacks","imageURL":"https://github.com/colinhacks.png","key":"colinhacks"},{"name":"conlacda","alias":"conlacda","url":"https://github.com/conlacda","imageURL":"https://github.com/conlacda.png","key":"conlacda"},{"name":"Dan Dascalescu","alias":"dandv","url":"https://github.com/dandv","imageURL":"https://github.com/dandv.png","key":"dandv"},{"name":"Danilo Woznica","alias":"danilowoz","url":"https://github.com/danilowoz","imageURL":"https://github.com/danilowoz.png","key":"danilowoz"},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno"},{"name":"David J. Felix","alias":"DavidJFelix","url":"https://github.com/DavidJFelix","imageURL":"https://github.com/DavidJFelix.png","key":"DavidJFelix"},{"name":"dawei-wang","alias":"dawei-wang","url":"https://github.com/dawei-wang","imageURL":"https://github.com/dawei-wang.png","key":"dawei-wang"},{"name":"Debbie O\'Brien","alias":"debs-obrien","url":"https://github.com/debs-obrien","imageURL":"https://github.com/debs-obrien.png","key":"debs-obrien"},{"name":"Devansu Yadav","alias":"Devansu-Yadav","url":"https://github.com/Devansu-Yadav","imageURL":"https://github.com/Devansu-Yadav.png","key":"Devansu-Yadav"},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni"},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron"},{"name":"Eduardo M\xednguez","alias":"e-minguez","url":"https://github.com/e-minguez","imageURL":"https://github.com/e-minguez.png","key":"e-minguez"},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno"},{"name":"FlorinaPacurar","alias":"FlorinaPacurar","url":"https://github.com/FlorinaPacurar","imageURL":"https://github.com/FlorinaPacurar.png","key":"FlorinaPacurar"},{"name":"Charles Killer","alias":"Foosballfan","url":"https://github.com/Foosballfan","imageURL":"https://github.com/Foosballfan.png","key":"Foosballfan"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Francesco Ciulla","alias":"FrancescoXX","url":"https://github.com/FrancescoXX","imageURL":"https://github.com/FrancescoXX.png","key":"FrancescoXX"},{"name":"Fredrik Stave","alias":"fredrikstave","url":"https://github.com/fredrikstave","imageURL":"https://github.com/fredrikstave.png","key":"fredrikstave"},{"name":"Fxpby","alias":"fxpby","url":"https://github.com/fxpby","imageURL":"https://github.com/fxpby.png","key":"fxpby"},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo"},{"name":"Alexander Nguyen","alias":"GalexyN","url":"https://github.com/GalexyN","imageURL":"https://github.com/GalexyN.png","key":"GalexyN"},{"name":"Gustav Ton\xe9r","alias":"gazab","url":"https://github.com/gazab","imageURL":"https://github.com/gazab.png","key":"gazab"},{"name":"Eunkwang Shin","alias":"gracefullight","url":"https://github.com/gracefullight","imageURL":"https://github.com/gracefullight.png","key":"gracefullight"},{"name":"Greg Berg\xe9","alias":"gregberge","url":"https://github.com/gregberge","imageURL":"https://github.com/gregberge.png","key":"gregberge"},{"name":"Chongyi Zheng","alias":"harryzcy","url":"https://github.com/harryzcy","imageURL":"https://github.com/harryzcy.png","key":"harryzcy"},{"name":"Sujal Gupta","alias":"heysujal","url":"https://github.com/heysujal","imageURL":"https://github.com/heysujal.png","key":"heysujal"},{"name":"Hidde de Vries","alias":"hidde","url":"https://github.com/hidde","imageURL":"https://github.com/hidde.png","key":"hidde"},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual"},{"name":"Hyunseung","alias":"hslee2008","url":"https://github.com/hslee2008","imageURL":"https://github.com/hslee2008.png","key":"hslee2008"},{"name":"Anna","alias":"HumbleDeer","url":"https://github.com/HumbleDeer","imageURL":"https://github.com/HumbleDeer.png","key":"HumbleDeer"},{"name":"Coupy","alias":"HyeokjinKang","url":"https://github.com/HyeokjinKang","imageURL":"https://github.com/HyeokjinKang.png","key":"HyeokjinKang"},{"name":"Jean Humann","alias":"jean-humann","url":"https://github.com/jean-humann","imageURL":"https://github.com/jean-humann.png","key":"jean-humann"},{"name":"Jesper Engberg","alias":"jeengbe","url":"https://github.com/jeengbe","imageURL":"https://github.com/jeengbe.png","key":"jeengbe"},{"name":"John Cao","alias":"jhcao23","url":"https://github.com/jhcao23","imageURL":"https://github.com/jhcao23.png","key":"jhcao23"},{"name":"JJ Style","alias":"jj-style","url":"https://github.com/jj-style","imageURL":"https://github.com/jj-style.png","key":"jj-style"},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Viktor Malmedal","alias":"JohnVicke","url":"https://github.com/JohnVicke","imageURL":"https://github.com/JohnVicke.png","key":"JohnVicke"},{"name":"Jorens Merenjanu","alias":"JorensM","url":"https://github.com/JorensM","imageURL":"https://github.com/JorensM.png","key":"JorensM"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Juan Picado","alias":"juanpicado","url":"https://github.com/juanpicado","imageURL":"https://github.com/juanpicado.png","key":"juanpicado"},{"name":"0x24Karthick","alias":"KarthickSakthi","url":"https://github.com/KarthickSakthi","imageURL":"https://github.com/KarthickSakthi.png","key":"KarthickSakthi"},{"name":"Serenus","alias":"Kesyau","url":"https://github.com/Kesyau","imageURL":"https://github.com/Kesyau.png","key":"Kesyau"},{"name":"Naffy Dharni","alias":"knownasnaffy","url":"https://github.com/knownasnaffy","imageURL":"https://github.com/knownasnaffy.png","key":"knownasnaffy"},{"name":"la55u","alias":"la55u","url":"https://github.com/la55u","imageURL":"https://github.com/la55u.png","key":"la55u"},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby"},{"name":"Oleksandr Fediashov","alias":"layershifter","url":"https://github.com/layershifter","imageURL":"https://github.com/layershifter.png","key":"layershifter"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lorenzo Lewis","alias":"lorenzolewis","url":"https://github.com/lorenzolewis","imageURL":"https://github.com/lorenzolewis.png","key":"lorenzolewis"},{"name":"Silvestar Bistrovi\u0107","alias":"maliMirkec","url":"https://github.com/maliMirkec","imageURL":"https://github.com/maliMirkec.png","key":"maliMirkec"},{"name":"Manuel","alias":"manuel-rw","url":"https://github.com/manuel-rw","imageURL":"https://github.com/manuel-rw.png","key":"manuel-rw"},{"name":"Markshawn","alias":"MarkShawn2020","url":"https://github.com/MarkShawn2020","imageURL":"https://github.com/MarkShawn2020.png","key":"MarkShawn2020"},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto"},{"name":"Michael Remediakis","alias":"mickremedi","url":"https://github.com/mickremedi","imageURL":"https://github.com/mickremedi.png","key":"mickremedi"},{"name":"ModupeD","alias":"ModupeD","url":"https://github.com/ModupeD","imageURL":"https://github.com/ModupeD.png","key":"ModupeD"},{"name":"Mogyuchi","alias":"Mogyuchi","url":"https://github.com/Mogyuchi","imageURL":"https://github.com/Mogyuchi.png","key":"Mogyuchi"},{"name":"Mu-Jing-Tsai","alias":"moojing","url":"https://github.com/moojing","imageURL":"https://github.com/moojing.png","key":"moojing"},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas"},{"name":"Marco Stroppel","alias":"mstroppel","url":"https://github.com/mstroppel","imageURL":"https://github.com/mstroppel.png","key":"mstroppel"},{"name":"Max Schmitt","alias":"mxschmitt","url":"https://github.com/mxschmitt","imageURL":"https://github.com/mxschmitt.png","key":"mxschmitt"},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev"},{"name":"Naman Garg","alias":"NamanGarg2075","url":"https://github.com/NamanGarg2075","imageURL":"https://github.com/NamanGarg2075.png","key":"NamanGarg2075"},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker"},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss"},{"name":"Aolin","alias":"Oreoxmt","url":"https://github.com/Oreoxmt","imageURL":"https://github.com/Oreoxmt.png","key":"Oreoxmt"},{"name":"ozaki","alias":"OzakIOne","url":"https://github.com/OzakIOne","imageURL":"https://github.com/OzakIOne.png","key":"OzakIOne"},{"name":"Maciek Palmowski","alias":"palmiak","url":"https://github.com/palmiak","imageURL":"https://github.com/palmiak.png","key":"palmiak"},{"name":"Paul Razvan Berg","alias":"PaulRBerg","url":"https://github.com/PaulRBerg","imageURL":"https://github.com/PaulRBerg.png","key":"PaulRBerg"},{"name":"Pinaki Bhattacharjee","alias":"pinakipb2","url":"https://github.com/pinakipb2","imageURL":"https://github.com/pinakipb2.png","key":"pinakipb2"},{"name":"prateekbytes","alias":"prateekbytes","url":"https://github.com/prateekbytes","imageURL":"https://github.com/prateekbytes.png","key":"prateekbytes"},{"name":"qwerzl","alias":"qwerzl","url":"https://github.com/qwerzl","imageURL":"https://github.com/qwerzl.png","key":"qwerzl"},{"name":"Rashid","alias":"rashidmya","url":"https://github.com/rashidmya","imageURL":"https://github.com/rashidmya.png","key":"rashidmya"},{"name":"Kolja","alias":"razzeee","url":"https://github.com/razzeee","imageURL":"https://github.com/razzeee.png","key":"razzeee"},{"name":"Rapha\xebl Barbazza","alias":"rbarbazz","url":"https://github.com/rbarbazz","imageURL":"https://github.com/rbarbazz.png","key":"rbarbazz"},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei"},{"name":"Chua Chee How","alias":"rojakcoder","url":"https://github.com/rojakcoder","imageURL":"https://github.com/rojakcoder.png","key":"rojakcoder"},{"name":"rsteele6","alias":"rsteele6","url":"https://github.com/rsteele6","imageURL":"https://github.com/rsteele6.png","key":"rsteele6"},{"name":"SADIK KUZU","alias":"sadikkuzu","url":"https://github.com/sadikkuzu","imageURL":"https://github.com/sadikkuzu.png","key":"sadikkuzu"},{"name":"Sainan","alias":"Sainan","url":"https://github.com/Sainan","imageURL":"https://github.com/Sainan.png","key":"Sainan"},{"name":"samatt14","alias":"samatt14","url":"https://github.com/samatt14","imageURL":"https://github.com/samatt14.png","key":"samatt14"},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev"},{"name":"Alex","alias":"sashashura","url":"https://github.com/sashashura","imageURL":"https://github.com/sashashura.png","key":"sashashura"},{"name":"Marie","alias":"schneegansm","url":"https://github.com/schneegansm","imageURL":"https://github.com/schneegansm.png","key":"schneegansm"},{"name":"Marco Kuper","alias":"scubamaggo","url":"https://github.com/scubamaggo","imageURL":"https://github.com/scubamaggo.png","key":"scubamaggo"},{"name":"Shahriar","alias":"ShahriarKh","url":"https://github.com/ShahriarKh","imageURL":"https://github.com/ShahriarKh.png","key":"ShahriarKh"},{"name":"Shashank Kumar","alias":"shawshankkumar","url":"https://github.com/shawshankkumar","imageURL":"https://github.com/shawshankkumar.png","key":"shawshankkumar"},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts"},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka"},{"name":"Gareth Dwyer","alias":"sixhobbits","url":"https://github.com/sixhobbits","imageURL":"https://github.com/sixhobbits.png","key":"sixhobbits"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Surav Shrestha","alias":"suravshrestha","url":"https://github.com/suravshrestha","imageURL":"https://github.com/suravshrestha.png","key":"suravshrestha"},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095"},{"name":"Tamal Anwar Chowdhury","alias":"tamalchowdhury","url":"https://github.com/tamalchowdhury","imageURL":"https://github.com/tamalchowdhury.png","key":"tamalchowdhury"},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput"},{"name":"Tatsunori Uchino","alias":"tats-u","url":"https://github.com/tats-u","imageURL":"https://github.com/tats-u.png","key":"tats-u"},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry"},{"name":"James Kerrane","alias":"thatrobotdev","url":"https://github.com/thatrobotdev","imageURL":"https://github.com/thatrobotdev.png","key":"thatrobotdev"},{"name":"thedevwonder","alias":"thedevwonder","url":"https://github.com/thedevwonder","imageURL":"https://github.com/thedevwonder.png","key":"thedevwonder"},{"name":"Andr\xe9s Villanueva","alias":"Villanuevand","url":"https://github.com/Villanuevand","imageURL":"https://github.com/Villanuevand.png","key":"Villanuevand"},{"name":"VinceCYLiao","alias":"VinceCYLiao","url":"https://github.com/VinceCYLiao","imageURL":"https://github.com/VinceCYLiao.png","key":"VinceCYLiao"},{"name":"Waldir Pimenta","alias":"waldyrious","url":"https://github.com/waldyrious","imageURL":"https://github.com/waldyrious.png","key":"waldyrious"},{"name":"Will Ceolin","alias":"wceolin","url":"https://github.com/wceolin","imageURL":"https://github.com/wceolin.png","key":"wceolin"},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken"},{"name":"Jordan Manley","alias":"werner33","url":"https://github.com/werner33","imageURL":"https://github.com/werner33.png","key":"werner33"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"yosukekato165","alias":"yosukekato165","url":"https://github.com/yosukekato165","imageURL":"https://github.com/yosukekato165.png","key":"yosukekato165"},{"name":"Zwyx","alias":"Zwyx","url":"https://github.com/Zwyx","imageURL":"https://github.com/Zwyx.png","key":"Zwyx"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-10-31T20:00","authors":["0420syj","abhinandanwadwa","Abinashbunty","adampatterson","adithyaakrishna","AFRUITPIE","AgentEnder","akshaybhalotia","allyw2002","amdshrif","amm98d","anaclumos","andrewnicols","antonk52","antonyoni","aqueeb","attitude","billy1624","biplavmz","bitpredator","BubbaJoe","chillinPanda","chubei","chudongvip","cm-igarashi-ryosuke","colinhacks","conlacda","dandv","danilowoz","DanRoscigno","DavidJFelix","dawei-wang","debs-obrien","Devansu-Yadav","Djunnni","Dr-Electron","e-minguez","edno","FlorinaPacurar","Foosballfan","forresst","FrancescoXX","fredrikstave","fxpby","gabrielcsapo","GalexyN","gazab","gracefullight","gregberge","harryzcy","heysujal","hidde","homotechsual","hslee2008","HumbleDeer","HyeokjinKang","jean-humann","jeengbe","jhcao23","jj-style","jodyheavener","johnnyreilly","JohnVicke","JorensM","Josh-Cena","juanpicado","KarthickSakthi","Kesyau","knownasnaffy","la55u","lanegoolsby","layershifter","lex111","lorenzolewis","maliMirkec","manuel-rw","MarkShawn2020","mcallisto","mickremedi","ModupeD","Mogyuchi","moojing","mrazauskas","mstroppel","mxschmitt","Mysterious-Dev","NamanGarg2075","ntucker","oluwatobiss","Oreoxmt","OzakIOne","palmiak","PaulRBerg","pinakipb2","prateekbytes","qwerzl","rashidmya","razzeee","rbarbazz","recallwei","rojakcoder","rsteele6","sadikkuzu","Sainan","samatt14","sanjaiyan-dev","sashashura","schneegansm","scubamaggo","ShahriarKh","shawshankkumar","shortcuts","shwaka","sixhobbits","slorber","suravshrestha","sykp241095","tamalchowdhury","tarunrajput","tats-u","thadguidry","thatrobotdev","thedevwonder","Villanuevand","VinceCYLiao","waldyrious","wceolin","webbertakken","werner33","yangshun","yosukekato165","Zwyx"]},"unlisted":false,"prevItem":{"title":"3.0.1","permalink":"/changelog/3.0.1"},"nextItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#9316](https://github.com/facebook/docusaurus/pull/9316) chore: upgrade syntax highlighting dependencies, `prism-react-renderer` to v2, `react-live` to v4 ([@harryzcy](https://github.com/harryzcy))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#9348](https://github.com/facebook/docusaurus/pull/9348) chore: update node engine version 18 ([@OzakIOne](https://github.com/OzakIOne))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#9310](https://github.com/facebook/docusaurus/pull/9310) chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-tsconfig`, `docusaurus`\\n - [#9258](https://github.com/facebook/docusaurus/pull/9258) feat: Docusaurus v3 upgrades and require TypeScript 5 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9026](https://github.com/facebook/docusaurus/pull/9026) chore: remove facebook template ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`\\n - [#9451](https://github.com/facebook/docusaurus/pull/9451) feat(mdx-loader): upgrade to MDX v3 ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9394](https://github.com/facebook/docusaurus/pull/9394) feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives ([@OzakIOne](https://github.com/OzakIOne))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#9317](https://github.com/facebook/docusaurus/pull/9317) feat(core): support TypeScript + ESM configuration ([@harryzcy](https://github.com/harryzcy))\\n- `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`\\n - [#9305](https://github.com/facebook/docusaurus/pull/9305) feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9241](https://github.com/facebook/docusaurus/pull/9241) feat: support bun package manager in `create-docusaurus` ([@colinhacks](https://github.com/colinhacks))\\n- `docusaurus-plugin-content-blog`\\n - [#9189](https://github.com/facebook/docusaurus/pull/9189) feat(blog-plugin): limit option for blog feedOptions ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`\\n - [#9152](https://github.com/facebook/docusaurus/pull/9152) feat(theme): add support for meta og locale and alternates ([@FlorinaPacurar](https://github.com/FlorinaPacurar))\\n - [#9028](https://github.com/facebook/docusaurus/pull/9028) feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page ([@slorber](https://github.com/slorber))\\n - [#8915](https://github.com/facebook/docusaurus/pull/8915) feat(theme): add queryString option to localeDropdown ([@wceolin](https://github.com/wceolin))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-validation`\\n - [#9171](https://github.com/facebook/docusaurus/pull/9171) feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#9102](https://github.com/facebook/docusaurus/pull/9102) feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) ([@amdshrif](https://github.com/amdshrif))\\n- `docusaurus-mdx-loader`, `docusaurus-types`, `docusaurus`\\n - [#9097](https://github.com/facebook/docusaurus/pull/9097) feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#9071](https://github.com/facebook/docusaurus/pull/9071) feat(pages): add support for missing SEO front matter + improve SEO docs ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-tsconfig`\\n - [#9050](https://github.com/facebook/docusaurus/pull/9050) feat: create official TypeScript base config @docusaurus/tsconfig ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#8961](https://github.com/facebook/docusaurus/pull/8961) feat: React 18 + automatic JSX runtime + build --dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8982](https://github.com/facebook/docusaurus/pull/8982) feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab ([@jj-style](https://github.com/jj-style))\\n - [#8870](https://github.com/facebook/docusaurus/pull/8870) feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#8288](https://github.com/facebook/docusaurus/pull/8288) feat: upgrade to MDX v2 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8890](https://github.com/facebook/docusaurus/pull/8890) feat(theme): create more generic ThemedComponent util from ThemedImage ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `eslint-plugin`\\n - [#8384](https://github.com/facebook/docusaurus/pull/8384) feat(eslint-plugin): new prefer-docusaurus-heading rule ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`, `eslint-plugin`\\n - [#8156](https://github.com/facebook/docusaurus/pull/8156) feat: add eslint plugin no-html-links ([@JohnVicke](https://github.com/JohnVicke))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#8004](https://github.com/facebook/docusaurus/pull/8004) feat(docs,blog,pages): add support for \\"unlisted\\" front matter - hide md content in production ([@jodyheavener](https://github.com/jodyheavener))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#9446](https://github.com/facebook/docusaurus/pull/9446) fix(theme): fix useWindowSize React hydration issue ([@slorber](https://github.com/slorber))\\n - [#9276](https://github.com/facebook/docusaurus/pull/9276) fix(theme-common): remove useless useSyncExternalStore shim ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9437](https://github.com/facebook/docusaurus/pull/9437) fix(plugin-blog): blog archive should hide unlisted blog posts ([@slorber](https://github.com/slorber))\\n - [#9151](https://github.com/facebook/docusaurus/pull/9151) fix(content-blog): links in feed should be absolute ([@VinceCYLiao](https://github.com/VinceCYLiao))\\n- `docusaurus`\\n - [#9387](https://github.com/facebook/docusaurus/pull/9387) fix(core): log missing errorInfo in React 18 onRecoverableError callback ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#9309](https://github.com/facebook/docusaurus/pull/9309) fix(cli): disable vertical borders of the update notification ([@qwerzl](https://github.com/qwerzl))\\n - [#9112](https://github.com/facebook/docusaurus/pull/9112) fix(core): throw error if build folder already exists on initial clean ([@thedevwonder](https://github.com/thedevwonder))\\n - [#9006](https://github.com/facebook/docusaurus/pull/9006) fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades ([@0420syj](https://github.com/0420syj))\\n - [#7951](https://github.com/facebook/docusaurus/pull/7951) fix(core): make webpack HMR always listen to current location ([@jeengbe](https://github.com/jeengbe))\\n- `docusaurus-mdx-loader`\\n - [#9386](https://github.com/facebook/docusaurus/pull/9386) fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark ([@slorber](https://github.com/slorber))\\n - [#9262](https://github.com/facebook/docusaurus/pull/9262) fix(mdx-loader): improve mdxJsxTextElementToHtml ([@slorber](https://github.com/slorber))\\n - [#9202](https://github.com/facebook/docusaurus/pull/9202) fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior ([@yosukekato165](https://github.com/yosukekato165))\\n - [#9100](https://github.com/facebook/docusaurus/pull/9100) fix(mdx): fix for html multi-line comments ([@slorber](https://github.com/slorber))\\n - [#9091](https://github.com/facebook/docusaurus/pull/9091) fix(mdx-loader): loader error message should display stacktrace if no extra MDX details ([@slorber](https://github.com/slorber))\\n - [#8960](https://github.com/facebook/docusaurus/pull/8960) fix: allow html syntax in MDX v2 with format md ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#9385](https://github.com/facebook/docusaurus/pull/9385) fix(theme): avoid rendering empty search container if site has no search plugin ([@slorber](https://github.com/slorber))\\n - [#9183](https://github.com/facebook/docusaurus/pull/9183) fix(theme): make Prism code block language / additionalLanguages case insensitive ([@heysujal](https://github.com/heysujal))\\n - [#9216](https://github.com/facebook/docusaurus/pull/9216) fix(theme): fix typo in swizzle component config ([@sixhobbits](https://github.com/sixhobbits))\\n - [#9093](https://github.com/facebook/docusaurus/pull/9093) fix(theme): support details/summary in CommonMark + add md dogfood test cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#9369](https://github.com/facebook/docusaurus/pull/9369) fix(mdx-loader): prevent Open Graph images from being inserted as base64 ([@Zwyx](https://github.com/Zwyx))\\n- `docusaurus-theme-translations`\\n - [#9362](https://github.com/facebook/docusaurus/pull/9362) fix(theme-translations): add Japanese translation for \\"warning\\" ([@tats-u](https://github.com/tats-u))\\n - [#9321](https://github.com/facebook/docusaurus/pull/9321) fix(theme-translations): add missing zh-Hans messages ([@chudongvip](https://github.com/chudongvip))\\n - [#9338](https://github.com/facebook/docusaurus/pull/9338) fix(theme-translations): complete and fix hungarian translations ([@la55u](https://github.com/la55u))\\n - [#9292](https://github.com/facebook/docusaurus/pull/9292) fix(theme-translations): add missing Spanish theme translations ([@Villanuevand](https://github.com/Villanuevand))\\n - [#9021](https://github.com/facebook/docusaurus/pull/9021) fix(theme-transalations): fix Swedish translation of \\"last updated\\" ([@gazab](https://github.com/gazab))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#9308](https://github.com/facebook/docusaurus/pull/9308) fix(theme): make warning a first-class admonition, and deprecate caution admonition ([@slorber](https://github.com/slorber))\\n - [#9269](https://github.com/facebook/docusaurus/pull/9269) fix(theme): improve docs sidebar category caret aria-label accessibility ([@pinakipb2](https://github.com/pinakipb2))\\n- Other\\n - [#9260](https://github.com/facebook/docusaurus/pull/9260) fix(website): fix showcase search input ([@biplavmz](https://github.com/biplavmz))\\n - [#8193](https://github.com/facebook/docusaurus/pull/8193) fix(website): mobile scroll on homepage announcement ([@maliMirkec](https://github.com/maliMirkec))\\n - [#8042](https://github.com/facebook/docusaurus/pull/8042) fix(website): fix blog post social card ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`\\n - [#9217](https://github.com/facebook/docusaurus/pull/9217) fix(create-docusaurus): increase Browserslist support query in dev ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`, `docusaurus`\\n - [#9160](https://github.com/facebook/docusaurus/pull/9160) fix(core): handle single quotes inside file paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`\\n - [#9116](https://github.com/facebook/docusaurus/pull/9116) fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#9046](https://github.com/facebook/docusaurus/pull/9046) fix(utils): better handling of code blocks in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8927](https://github.com/facebook/docusaurus/pull/8927) fix(utils): make Markdown link replacement much more rigorous ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7864](https://github.com/facebook/docusaurus/pull/7864) fix(utils): always match exclusion root dirs as complete folder paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7801](https://github.com/facebook/docusaurus/pull/7801) fix(utils): recognize ~~~ as code fences in link replacement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#8872](https://github.com/facebook/docusaurus/pull/8872) fix(core): better error logging on SSR/dev failures + log stacktraces and error causes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#8258](https://github.com/facebook/docusaurus/pull/8258) fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as \\"/\\" ([@Djunnni](https://github.com/Djunnni))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8319](https://github.com/facebook/docusaurus/pull/8319) fix(docs,theme): auto-generated category index should not display unlisted content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#8015](https://github.com/facebook/docusaurus/pull/8015) fix(live-codeblock): add error boundary to live code preview ([@rashidmya](https://github.com/rashidmya))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#7966](https://github.com/facebook/docusaurus/pull/7966) fix(plugin-docs,theme): refactor docs plugin routes and component tree ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#9051](https://github.com/facebook/docusaurus/pull/9051) perf(core): use React 18 startTransition for hydration ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n - [#8081](https://github.com/facebook/docusaurus/pull/8081) perf(core): move scripts to document head + defer ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#8972](https://github.com/facebook/docusaurus/pull/8972) fix: remove useless js-loader in front of mdx-loader ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#9438](https://github.com/facebook/docusaurus/pull/9438) refactor(blog-plugin): blog archive reverse ordering of posts ([@slorber](https://github.com/slorber))\\n - [#9184](https://github.com/facebook/docusaurus/pull/9184) fix(theme): change schema.org itemType prop urls from http to https ([@thedevwonder](https://github.com/thedevwonder))\\n- `docusaurus`\\n - [#9381](https://github.com/facebook/docusaurus/pull/9381) feat(core): throw error when official docusaurus dependencies use different versions ([@JorensM](https://github.com/JorensM))\\n- `docusaurus-theme-translations`\\n - [#9302](https://github.com/facebook/docusaurus/pull/9302) chore(theme-translations): complete zh-Hant translations ([@qwerzl](https://github.com/qwerzl))\\n - [#9025](https://github.com/facebook/docusaurus/pull/9025) chore(theme-translations): complete it translations ([@bitpredator](https://github.com/bitpredator))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus`\\n - [#9133](https://github.com/facebook/docusaurus/pull/9133) fix(init): change initial site URL to one that is safe for the future ([@tats-u](https://github.com/tats-u))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8150](https://github.com/facebook/docusaurus/pull/8150) fix(theme-classic): polish admonition details, render title-only admonitions ([@attitude](https://github.com/attitude))\\n- `docusaurus-plugin-google-gtag`\\n - [#8143](https://github.com/facebook/docusaurus/pull/8143) refactor(plugin-gtag): update gtag plugin to modern SPA recommendations ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7945](https://github.com/facebook/docusaurus/pull/7945) refactor(theme): split admonitions, make swizzle easier, better retrocompatibility ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#9452](https://github.com/facebook/docusaurus/pull/9452) docs: v3 upgrade guide should mention MDX v1 compat options ([@slorber](https://github.com/slorber))\\n - [#9430](https://github.com/facebook/docusaurus/pull/9430) docs: update Kinsta deployment documentation ([@palmiak](https://github.com/palmiak))\\n - [#9417](https://github.com/facebook/docusaurus/pull/9417) docs: add Docusaurus v3.0 upgrade guide ([@slorber](https://github.com/slorber))\\n - [#9396](https://github.com/facebook/docusaurus/pull/9396) docs: fix typos in website/docs/i18n/i18n-git.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9397](https://github.com/facebook/docusaurus/pull/9397) docs: fix typos in website/docs/migration/migration-manual.mdx ([@suravshrestha](https://github.com/suravshrestha))\\n - [#9388](https://github.com/facebook/docusaurus/pull/9388) docs: fix algolia crowler config template link for v3 ([@slorber](https://github.com/slorber))\\n - [#9377](https://github.com/facebook/docusaurus/pull/9377) docs(deployment): add permissions config to github action file in v2.4.3 ([@chillinPanda](https://github.com/chillinPanda))\\n - [#9333](https://github.com/facebook/docusaurus/pull/9333) docs: \\"Preparing your site for Docusaurus v3\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9330](https://github.com/facebook/docusaurus/pull/9330) docs: \\"Upgrading frontend dependencies with confidence\\" blog post ([@slorber](https://github.com/slorber))\\n - [#9288](https://github.com/facebook/docusaurus/pull/9288) docs: fix bad link for create doc ([@forresst](https://github.com/forresst))\\n - [#9267](https://github.com/facebook/docusaurus/pull/9267) docs: fix typo in docs-introduction ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n - [#9247](https://github.com/facebook/docusaurus/pull/9247) docs: Reword comparison between React authoring and CSS authoring ([@hidde](https://github.com/hidde))\\n - [#9223](https://github.com/facebook/docusaurus/pull/9223) docs: fix grammatical error, rewrite sentence to make clearer ([@thatrobotdev](https://github.com/thatrobotdev))\\n - [#9233](https://github.com/facebook/docusaurus/pull/9233) docs(website): Add a \\"clearAll\\" Feature to site showcase ([@biplavmz](https://github.com/biplavmz))\\n - [#9180](https://github.com/facebook/docusaurus/pull/9180) docs: remove \'import type\' declaration in javascript snippet ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9177](https://github.com/facebook/docusaurus/pull/9177) docs: improve the opening sentence\'s clarity ([@oluwatobiss](https://github.com/oluwatobiss))\\n - [#9149](https://github.com/facebook/docusaurus/pull/9149) docs: improve yarn deps upgrade command ([@webbertakken](https://github.com/webbertakken))\\n - [#9139](https://github.com/facebook/docusaurus/pull/9139) docs: add Flightcontrol as a deployment option ([@ModupeD](https://github.com/ModupeD))\\n - [#9082](https://github.com/facebook/docusaurus/pull/9082) docs: fix themeConfig.prism.defaultLanguage table api ref docs ([@razzeee](https://github.com/razzeee))\\n - [#9074](https://github.com/facebook/docusaurus/pull/9074) docs: fix filenames in docs/swizzling.mdx ([@shwaka](https://github.com/shwaka))\\n - [#9065](https://github.com/facebook/docusaurus/pull/9065) docs: update link for commonly used languages ([@heysujal](https://github.com/heysujal))\\n - [#9055](https://github.com/facebook/docusaurus/pull/9055) docs: update outdated links in showcase ([@manuel-rw](https://github.com/manuel-rw))\\n - [#9063](https://github.com/facebook/docusaurus/pull/9063) docs: add @markprompt/docusaurus-theme-search ([@schneegansm](https://github.com/schneegansm))\\n - [#9033](https://github.com/facebook/docusaurus/pull/9033) docs: update info for community plugin docusaurus2-graphql-doc-generator ([@edno](https://github.com/edno))\\n - [#9044](https://github.com/facebook/docusaurus/pull/9044) docs: fix prism theme broken link in code blocks docs ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n - [#9043](https://github.com/facebook/docusaurus/pull/9043) docs: fix grammar typo in swizzling.mdx ([@adampatterson](https://github.com/adampatterson))\\n - [#9018](https://github.com/facebook/docusaurus/pull/9018) docs: fix link to rehype ([@Mogyuchi](https://github.com/Mogyuchi))\\n - [#8993](https://github.com/facebook/docusaurus/pull/8993) docs: fix broken link in code blocks docs ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n - [#8975](https://github.com/facebook/docusaurus/pull/8975) docs: update link in md code blocks section ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8976](https://github.com/facebook/docusaurus/pull/8976) docs: update broken links theme configuration page ([@rbarbazz](https://github.com/rbarbazz))\\n - [#8904](https://github.com/facebook/docusaurus/pull/8904) docs: fix broken link to Prism includeLangs.js default list of languages ([@conlacda](https://github.com/conlacda))\\n - [#8951](https://github.com/facebook/docusaurus/pull/8951) docs: mention equivalent config syntaxes ([@thadguidry](https://github.com/thadguidry))\\n - [#8950](https://github.com/facebook/docusaurus/pull/8950) docs: bidirectional link between api config and guide config ([@thadguidry](https://github.com/thadguidry))\\n - [#8953](https://github.com/facebook/docusaurus/pull/8953) docs: mention blog truncating marker edge case ([@allyw2002](https://github.com/allyw2002))\\n - [#8941](https://github.com/facebook/docusaurus/pull/8941) docs: rewrite some docs for mdx v2 ([@slorber](https://github.com/slorber))\\n - [#8943](https://github.com/facebook/docusaurus/pull/8943) docs: mention docusaurus.community site in resources ([@thadguidry](https://github.com/thadguidry))\\n - [#8920](https://github.com/facebook/docusaurus/pull/8920) docs: mdx-js is using v2 for next edition ([@jhcao23](https://github.com/jhcao23))\\n - [#8888](https://github.com/facebook/docusaurus/pull/8888) docs: improve sidebar items custom props docs ([@slorber](https://github.com/slorber))\\n - [#8877](https://github.com/facebook/docusaurus/pull/8877) docs: add \\"permissions.content: write\\" to GH workflow examples ([@e-minguez](https://github.com/e-minguez))\\n - [#8845](https://github.com/facebook/docusaurus/pull/8845) docs: add description on blog post file/folder naming conventions and date extraction patterns ([@rojakcoder](https://github.com/rojakcoder))\\n - [#8865](https://github.com/facebook/docusaurus/pull/8865) docs: correct small grammar error ([@werner33](https://github.com/werner33))\\n - [#8830](https://github.com/facebook/docusaurus/pull/8830) docs: link to mermaid config types ([@PaulRBerg](https://github.com/PaulRBerg))\\n - [#8804](https://github.com/facebook/docusaurus/pull/8804) docs: update suggestion for OSS meta projects ([@antonk52](https://github.com/antonk52))\\n - [#8788](https://github.com/facebook/docusaurus/pull/8788) docs: remove problematic mdx2 anchor id docs for MDX 2 migration ([@slorber](https://github.com/slorber))\\n - [#8780](https://github.com/facebook/docusaurus/pull/8780) docs: fix localhost url without link ([@slorber](https://github.com/slorber))\\n - [#8779](https://github.com/facebook/docusaurus/pull/8779) docs: v2 docs should discourage the usage of a lower-case MDX component (will not work in v3) ([@slorber](https://github.com/slorber))\\n - [#8761](https://github.com/facebook/docusaurus/pull/8761) docs: add mention that themeConfig.footer.copyright supports html strings ([@fxpby](https://github.com/fxpby))\\n - [#8723](https://github.com/facebook/docusaurus/pull/8723) docs: add TypeScript playgrounds to docusaurus.new + Playground page ([@slorber](https://github.com/slorber))\\n - [#8709](https://github.com/facebook/docusaurus/pull/8709) docs: add dark mode version of BrowserStack logo ([@fredrikstave](https://github.com/fredrikstave))\\n - [#8642](https://github.com/facebook/docusaurus/pull/8642) docs: clarify query string behavior ([@homotechsual](https://github.com/homotechsual))\\n - [#8576](https://github.com/facebook/docusaurus/pull/8576) docs(playground): use CodeSandbox cloud sandboxes ([@danilowoz](https://github.com/danilowoz))\\n - [#8543](https://github.com/facebook/docusaurus/pull/8543) docs: add link to pluralization docs ([@homotechsual](https://github.com/homotechsual))\\n - [#8556](https://github.com/facebook/docusaurus/pull/8556) docs: document plugin-content-pages wrapperClassName frontmatter. ([@homotechsual](https://github.com/homotechsual))\\n - [#8548](https://github.com/facebook/docusaurus/pull/8548) docs: fix typo \'validationOptions\' ([@gracefullight](https://github.com/gracefullight))\\n - [#8509](https://github.com/facebook/docusaurus/pull/8509) docs(website): fix broken external links wrongly modified to use the .mdx extension (ex: github README.mdx) ([@Kesyau](https://github.com/Kesyau))\\n - [#8507](https://github.com/facebook/docusaurus/pull/8507) docs: blog + community + dogfood docs should use .mdx extension ([@slorber](https://github.com/slorber))\\n - [#8490](https://github.com/facebook/docusaurus/pull/8490) docs(website): use .mdx extension for every docs ([@slorber](https://github.com/slorber))\\n - [#8484](https://github.com/facebook/docusaurus/pull/8484) docs: `plugin-content-sitemap` -> `plugin-sitemap` ([@chubei](https://github.com/chubei))\\n - [#8454](https://github.com/facebook/docusaurus/pull/8454) fix(docs): Update link for tooljet website(broken) ([@shawshankkumar](https://github.com/shawshankkumar))\\n - [#8443](https://github.com/facebook/docusaurus/pull/8443) docs: fix website home testimonials broken image URLs ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n - [#8438](https://github.com/facebook/docusaurus/pull/8438) docs: add hyperlink to swizzling in Search page ([@dandv](https://github.com/dandv))\\n - [#8431](https://github.com/facebook/docusaurus/pull/8431) docs: add diagrams page to 2.2.0 sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8307](https://github.com/facebook/docusaurus/pull/8307) docs: clarify additionalLanguages with custom language definitions. ([@homotechsual](https://github.com/homotechsual))\\n - [#8390](https://github.com/facebook/docusaurus/pull/8390) docs: changed actions/checkout version from 2 to 3 ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n - [#8262](https://github.com/facebook/docusaurus/pull/8262) docs: fix links to external plugin description ([@scubamaggo](https://github.com/scubamaggo))\\n - [#8375](https://github.com/facebook/docusaurus/pull/8375) docs: add Kinsta to deployment page ([@palmiak](https://github.com/palmiak))\\n - [#8417](https://github.com/facebook/docusaurus/pull/8417) docs: document theme-mermaid in API sidebar ([@homotechsual](https://github.com/homotechsual))\\n - [#8392](https://github.com/facebook/docusaurus/pull/8392) docs: add i18n guide doc should link to i18n core config doc ([@mcallisto](https://github.com/mcallisto))\\n - [#8388](https://github.com/facebook/docusaurus/pull/8388) docs: point to where commit types are listed ([@dandv](https://github.com/dandv))\\n - [#8352](https://github.com/facebook/docusaurus/pull/8352) docs: actually demo the zero-width space workaround in MDX ([@waldyrious](https://github.com/waldyrious))\\n - [#8363](https://github.com/facebook/docusaurus/pull/8363) docs: fix unclosed admonition code block ([@Zwyx](https://github.com/Zwyx))\\n - [#8364](https://github.com/facebook/docusaurus/pull/8364) docs: autogenerated page comment does not matching dirName in examples ([@HumbleDeer](https://github.com/HumbleDeer))\\n - [#8359](https://github.com/facebook/docusaurus/pull/8359) docs: fix anchor link `#customFields` ([@Zwyx](https://github.com/Zwyx))\\n - [#8320](https://github.com/facebook/docusaurus/pull/8320) docs: remove blog.johnnyreilly.com Google Analytics tag from docs part 2 ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8335](https://github.com/facebook/docusaurus/pull/8335) docs: use Mermaid diagram for routing page ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n - [#8313](https://github.com/facebook/docusaurus/pull/8313) docs: link to migration guide from Blogger to Docusaurus / remove blog.johnnyreilly.com Google Analytics tag from docs ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#8292](https://github.com/facebook/docusaurus/pull/8292) docs: document tag types for insertHtmlContent ([@homotechsual](https://github.com/homotechsual))\\n - [#8272](https://github.com/facebook/docusaurus/pull/8272) docs: fix mermaid theme options typo ([@ntucker](https://github.com/ntucker))\\n - [#8209](https://github.com/facebook/docusaurus/pull/8209) docs: removing community resource docusaurus-plugin-relative-paths ([@ShahriarKh](https://github.com/ShahriarKh))\\n - [#8146](https://github.com/facebook/docusaurus/pull/8146) docs(content-docs): add api doc for displayed_sidebar front matter ([@slorber](https://github.com/slorber))\\n - [#8115](https://github.com/facebook/docusaurus/pull/8115) docs: add caveat about using Translate in string contexts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8053](https://github.com/facebook/docusaurus/pull/8053) docs: document usage of docs `frontMatter.custom_edit_url: null` ([@homotechsual](https://github.com/homotechsual))\\n - [#8010](https://github.com/facebook/docusaurus/pull/8010) docs(showcase): add 74 new showcase sites ([@slorber](https://github.com/slorber))\\n - [#7955](https://github.com/facebook/docusaurus/pull/7955) docs: add docusaurus-post-generator to community resource list ([@moojing](https://github.com/moojing))\\n - [#7906](https://github.com/facebook/docusaurus/pull/7906) docs: add TOC heading level options to guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7884](https://github.com/facebook/docusaurus/pull/7884) docs: add baseUrl to example tsconfig ([@Foosballfan](https://github.com/Foosballfan))\\n - [#7835](https://github.com/facebook/docusaurus/pull/7835) docs: update workbox doc link ([@hslee2008](https://github.com/hslee2008))\\n - [#7799](https://github.com/facebook/docusaurus/pull/7799) docs: formally document how admonitions can be customized ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7796](https://github.com/facebook/docusaurus/pull/7796) docs: modify the description of deploying to Netlify ([@Oreoxmt](https://github.com/Oreoxmt))\\n- `docusaurus-logger`\\n - [#9210](https://github.com/facebook/docusaurus/pull/9210) docs: add the missing import logger statement ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8047](https://github.com/facebook/docusaurus/pull/8047) docs: improve alt messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8944](https://github.com/facebook/docusaurus/pull/8944) polish(create-docusaurus): add comment in config to mention different ways to declare config + doc link ([@thadguidry](https://github.com/thadguidry))\\n - [#8323](https://github.com/facebook/docusaurus/pull/8323) docs: fix typo \'internalization\' ([@dandv](https://github.com/dandv))\\n- `docusaurus-plugin-ideal-image`\\n - [#8630](https://github.com/facebook/docusaurus/pull/8630) docs: normalize README for ideal-image plugin ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-mdx-loader`\\n - [#8419](https://github.com/facebook/docusaurus/pull/8419) docs: document siteConfig.markdown + better mdx-loader retrocompat ([@slorber](https://github.com/slorber))\\n\\n## :robot: Dependencies\\n\\n- Other\\n - [#9440](https://github.com/facebook/docusaurus/pull/9440) chore(deps): bump actions/setup-node from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9441](https://github.com/facebook/docusaurus/pull/9441) chore(deps): bump actions/checkout from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9367](https://github.com/facebook/docusaurus/pull/9367) chore(deps): bump postcss from 8.4.26 to 8.4.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9344](https://github.com/facebook/docusaurus/pull/9344) chore(deps): bump actions/checkout from 4.0.0 to 4.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9298](https://github.com/facebook/docusaurus/pull/9298) chore(deps): bump actions/dependency-review-action from 3.0.8 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9277](https://github.com/facebook/docusaurus/pull/9277) chore(deps): bump actions/checkout from 3 to 4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9251](https://github.com/facebook/docusaurus/pull/9251) chore(deps): bump actions/dependency-review-action from 3.0.7 to 3.0.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9250](https://github.com/facebook/docusaurus/pull/9250) chore(deps): bump marocchino/sticky-pull-request-comment from 2.7.0 to 2.8.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9227](https://github.com/facebook/docusaurus/pull/9227) chore(deps): bump actions/dependency-review-action from 3.0.6 to 3.0.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9174](https://github.com/facebook/docusaurus/pull/9174) chore(deps): bump marocchino/sticky-pull-request-comment from 2.6.2 to 2.7.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9096](https://github.com/facebook/docusaurus/pull/9096) chore(deps): bump semver from 7.3.8 to 7.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9061](https://github.com/facebook/docusaurus/pull/9061) chore(deps): bump github/codeql-action from 2.3.6 to 2.13.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9038](https://github.com/facebook/docusaurus/pull/9038) chore(deps): bump github/codeql-action from 2.3.5 to 2.3.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9039](https://github.com/facebook/docusaurus/pull/9039) chore(deps): bump actions/dependency-review-action from 3.0.4 to 3.0.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#9019](https://github.com/facebook/docusaurus/pull/9019) chore(deps): bump github/codeql-action from 2.3.3 to 2.3.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8964](https://github.com/facebook/docusaurus/pull/8964) chore(deps): bump github/codeql-action from 2.3.2 to 2.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8955](https://github.com/facebook/docusaurus/pull/8955) chore(deps): bump github/codeql-action from 2.3.0 to 2.3.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8922](https://github.com/facebook/docusaurus/pull/8922) chore(deps): bump marocchino/sticky-pull-request-comment from 2.5.0 to 2.6.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8923](https://github.com/facebook/docusaurus/pull/8923) chore(deps): bump treosh/lighthouse-ci-action from 9.6.8 to 10.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8924](https://github.com/facebook/docusaurus/pull/8924) chore(deps): bump github/codeql-action from 2.2.12 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8899](https://github.com/facebook/docusaurus/pull/8899) chore(deps): bump github/codeql-action from 2.2.11 to 2.2.12 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8900](https://github.com/facebook/docusaurus/pull/8900) chore(deps): bump actions/checkout from 3.5.0 to 3.5.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8879](https://github.com/facebook/docusaurus/pull/8879) chore(deps): bump actions/github-script from 6.4.0 to 6.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8878](https://github.com/facebook/docusaurus/pull/8878) chore(deps): bump github/codeql-action from 2.2.9 to 2.2.11 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8836](https://github.com/facebook/docusaurus/pull/8836) chore(deps): bump github/codeql-action from 2.2.7 to 2.2.9 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8837](https://github.com/facebook/docusaurus/pull/8837) chore(deps): bump actions/checkout from 3.4.0 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8797](https://github.com/facebook/docusaurus/pull/8797) chore(deps): bump actions/checkout from 3.3.0 to 3.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8796](https://github.com/facebook/docusaurus/pull/8796) chore(deps): bump actions/dependency-review-action from 3.0.3 to 3.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8795](https://github.com/facebook/docusaurus/pull/8795) chore(deps): bump github/codeql-action from 2.2.6 to 2.2.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8766](https://github.com/facebook/docusaurus/pull/8766) chore(deps): bump treosh/lighthouse-ci-action from 9.3.1 to 9.6.8 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8767](https://github.com/facebook/docusaurus/pull/8767) chore(deps): bump github/codeql-action from 2.2.5 to 2.2.6 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8739](https://github.com/facebook/docusaurus/pull/8739) chore(deps): bump github/codeql-action from 2.2.4 to 2.2.5 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8663](https://github.com/facebook/docusaurus/pull/8663) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.1 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8662](https://github.com/facebook/docusaurus/pull/8662) chore(deps): bump github/codeql-action from 2.2.2 to 2.2.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8638](https://github.com/facebook/docusaurus/pull/8638) chore(deps): bump github/codeql-action from 2.2.1 to 2.2.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8624](https://github.com/facebook/docusaurus/pull/8624) chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8604](https://github.com/facebook/docusaurus/pull/8604) chore(deps): bump actions/github-script from 6.3.3 to 6.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8605](https://github.com/facebook/docusaurus/pull/8605) chore(deps): bump github/codeql-action from 2.1.39 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8572](https://github.com/facebook/docusaurus/pull/8572) chore(deps): bump github/codeql-action from 2.1.38 to 2.1.39 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8553](https://github.com/facebook/docusaurus/pull/8553) chore(deps): bump github/codeql-action from 2.1.37 to 2.1.38 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8531](https://github.com/facebook/docusaurus/pull/8531) chore(deps): bump actions/checkout from 3.2.0 to 3.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8532](https://github.com/facebook/docusaurus/pull/8532) chore(deps): bump actions/dependency-review-action from 3.0.2 to 3.0.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8533](https://github.com/facebook/docusaurus/pull/8533) chore(deps): bump actions/setup-node from 3.5.1 to 3.6.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8496](https://github.com/facebook/docusaurus/pull/8496) chore(deps): bump jakepartusch/wait-for-netlify-action from 1.3 to 1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8464](https://github.com/facebook/docusaurus/pull/8464) chore(deps): bump actions/dependency-review-action from 3.0.1 to 3.0.2 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8440](https://github.com/facebook/docusaurus/pull/8440) chore(deps): bump github/codeql-action from 2.1.36 to 2.1.37 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8435](https://github.com/facebook/docusaurus/pull/8435) chore(deps): bump github/codeql-action from 2.1.35 to 2.1.36 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8434](https://github.com/facebook/docusaurus/pull/8434) chore(deps): bump actions/checkout from 3.1.0 to 3.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8412](https://github.com/facebook/docusaurus/pull/8412) chore(deps): bump github/codeql-action from 2.1.32 to 2.1.35 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8385](https://github.com/facebook/docusaurus/pull/8385) chore(deps): bump marocchino/sticky-pull-request-comment from 2.3.0 to 2.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8360](https://github.com/facebook/docusaurus/pull/8360) chore(deps): bump actions/dependency-review-action from 3.0.0 to 3.0.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8341](https://github.com/facebook/docusaurus/pull/8341) chore(deps): bump github/codeql-action from 2.1.31 to 2.1.32 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8340](https://github.com/facebook/docusaurus/pull/8340) chore(deps): bump actions/dependency-review-action from 2.5.1 to 3.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8339](https://github.com/facebook/docusaurus/pull/8339) chore(deps): bump treosh/lighthouse-ci-action from 9.3.0 to 9.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8295](https://github.com/facebook/docusaurus/pull/8295) chore(deps): bump github/codeql-action from 2.1.29 to 2.1.31 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8271](https://github.com/facebook/docusaurus/pull/8271) chore(deps): bump github/codeql-action from 2.1.28 to 2.1.29 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8270](https://github.com/facebook/docusaurus/pull/8270) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.1 to 2.3.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8240](https://github.com/facebook/docusaurus/pull/8240) chore(deps): bump actions/dependency-review-action from 2.5.0 to 2.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8241](https://github.com/facebook/docusaurus/pull/8241) chore(deps): bump github/codeql-action from 2.1.27 to 2.1.28 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8221](https://github.com/facebook/docusaurus/pull/8221) chore(deps): bump marocchino/sticky-pull-request-comment from 2.2.0 to 2.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8220](https://github.com/facebook/docusaurus/pull/8220) chore(deps): bump actions/dependency-review-action from 2.4.0 to 2.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8219](https://github.com/facebook/docusaurus/pull/8219) chore(deps): bump actions/github-script from 6.3.1 to 6.3.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8222](https://github.com/facebook/docusaurus/pull/8222) chore(deps): bump actions/setup-node from 3.5.0 to 3.5.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8200](https://github.com/facebook/docusaurus/pull/8200) chore(deps): bump github/codeql-action from 2.1.26 to 2.1.27 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8199](https://github.com/facebook/docusaurus/pull/8199) chore(deps): bump actions/checkout from 3.0.2 to 3.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8169](https://github.com/facebook/docusaurus/pull/8169) chore(deps): bump github/codeql-action from 2.1.22 to 2.1.26 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8170](https://github.com/facebook/docusaurus/pull/8170) chore(deps): bump actions/setup-node from 3.4.1 to 3.5.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8167](https://github.com/facebook/docusaurus/pull/8167) chore(deps): bump actions/github-script from 6.2.0 to 6.3.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8168](https://github.com/facebook/docusaurus/pull/8168) chore(deps): bump actions/dependency-review-action from 2.1.0 to 2.4.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8064](https://github.com/facebook/docusaurus/pull/8064) chore: bump react-medium-image-zoom ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8051](https://github.com/facebook/docusaurus/pull/8051) chore(deps): bump github/codeql-action from 2.1.21 to 2.1.22 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8019](https://github.com/facebook/docusaurus/pull/8019) chore(deps): bump actions/github-script from 6.1.1 to 6.2.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#8020](https://github.com/facebook/docusaurus/pull/8020) chore(deps): bump github/codeql-action from 2.1.20 to 2.1.21 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7988](https://github.com/facebook/docusaurus/pull/7988) chore(deps): bump actions/dependency-review-action from 2.0.4 to 2.1.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7987](https://github.com/facebook/docusaurus/pull/7987) chore(deps): bump github/codeql-action from 2.1.18 to 2.1.20 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7957](https://github.com/facebook/docusaurus/pull/7957) chore(deps): bump actions/github-script from 6.1.0 to 6.1.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7925](https://github.com/facebook/docusaurus/pull/7925) chore(deps): bump github/codeql-action from 2.1.17 to 2.1.18 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7879](https://github.com/facebook/docusaurus/pull/7879) chore(deps): bump github/codeql-action from 2.1.16 to 2.1.17 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7804](https://github.com/facebook/docusaurus/pull/7804) chore(deps): bump github/codeql-action from 2.1.15 to 2.1.16 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7805](https://github.com/facebook/docusaurus/pull/7805) chore(deps): bump actions/dependency-review-action from 2.0.2 to 2.0.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#7806](https://github.com/facebook/docusaurus/pull/7806) chore(deps): bump actions/setup-node from 3.4.0 to 3.4.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-google-tag-manager`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-mermaid`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#9148](https://github.com/facebook/docusaurus/pull/9148) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8749](https://github.com/facebook/docusaurus/pull/8749) chore: upgrade dependencies (non-major) ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8534](https://github.com/facebook/docusaurus/pull/8534) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#8926](https://github.com/facebook/docusaurus/pull/8926) chore: upgrade TypeScript to v5.0 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#8537](https://github.com/facebook/docusaurus/pull/8537) chore: bump dependencies major versions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7993](https://github.com/facebook/docusaurus/pull/7993) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7883](https://github.com/facebook/docusaurus/pull/7883) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`\\n - [#7822](https://github.com/facebook/docusaurus/pull/7822) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-pwa`, `docusaurus`, `eslint-plugin`\\n - [#7794](https://github.com/facebook/docusaurus/pull/7794) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-migrate`\\n - [#9400](https://github.com/facebook/docusaurus/pull/9400) chore: remove docusaurus-migrate ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#9320](https://github.com/facebook/docusaurus/pull/9320) chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#9304](https://github.com/facebook/docusaurus/pull/9304) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n- Other\\n - [#9264](https://github.com/facebook/docusaurus/pull/9264) ci: only install Chromium for Playwright Argos tests ([@mxschmitt](https://github.com/mxschmitt))\\n - [#9245](https://github.com/facebook/docusaurus/pull/9245) chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n - [#8947](https://github.com/facebook/docusaurus/pull/8947) test: add visual regression tests with Argos CI ([@slorber](https://github.com/slorber))\\n - [#8911](https://github.com/facebook/docusaurus/pull/8911) chore: migrate website config to createConfigAsync ([@slorber](https://github.com/slorber))\\n - [#8578](https://github.com/facebook/docusaurus/pull/8578) docs: fix dead anchor for issue reporting guidelines in template ([@Sainan](https://github.com/Sainan))\\n - [#8447](https://github.com/facebook/docusaurus/pull/8447) chore: update lerna to v6.2.0 ([@AgentEnder](https://github.com/AgentEnder))\\n - [#7967](https://github.com/facebook/docusaurus/pull/7967) test: improve e2e verdaccio configuration ([@juanpicado](https://github.com/juanpicado))\\n - [#7863](https://github.com/facebook/docusaurus/pull/7863) docs: publish 2.0.0 release blog post + adapt website for the launch ([@slorber](https://github.com/slorber))\\n - [#7828](https://github.com/facebook/docusaurus/pull/7828) misc: change showcase submission process, use GitHub discussion ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#9195](https://github.com/facebook/docusaurus/pull/9195) test(blog-plugin): fix ability to generate proper blog website fixture build snapshot ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#9024](https://github.com/facebook/docusaurus/pull/9024) docs: remove Meta Data Policy footer link on website ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- `docusaurus`\\n - [#8660](https://github.com/facebook/docusaurus/pull/8660) chore: bump update-notifier ([@layershifter](https://github.com/layershifter))\\n\\n## Committers: 132\\n\\n- 0x24Karthick ([@KarthickSakthi](https://github.com/KarthickSakthi))\\n- Abhinandan Wadhwa ([@abhinandanwadwa](https://github.com/abhinandanwadwa))\\n- Abinash Satapathy ([@Abinashbunty](https://github.com/Abinashbunty))\\n- Adam Patterson ([@adampatterson](https://github.com/adampatterson))\\n- Adithya Krishna ([@adithyaakrishna](https://github.com/adithyaakrishna))\\n- Ahmad Shrif ([@amdshrif](https://github.com/amdshrif))\\n- Ahmed Mustafa Malik ([@amm98d](https://github.com/amm98d))\\n- Akshay Bhalotia ([@akshaybhalotia](https://github.com/akshaybhalotia))\\n- Alex ([@sashashura](https://github.com/sashashura))\\n- Alexander Nguyen ([@GalexyN](https://github.com/GalexyN))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Andr\xe9s Villanueva ([@Villanuevand](https://github.com/Villanuevand))\\n- Anna ([@HumbleDeer](https://github.com/HumbleDeer))\\n- Anton Kastritskii ([@antonk52](https://github.com/antonk52))\\n- Antony Onipko ([@antonyoni](https://github.com/antonyoni))\\n- Aolin ([@Oreoxmt](https://github.com/Oreoxmt))\\n- Aqueeb ([@aqueeb](https://github.com/aqueeb))\\n- Bei Chu ([@chubei](https://github.com/chubei))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Biplav Kumar Mazumdar ([@biplavmz](https://github.com/biplavmz))\\n- Bruce ([@recallwei](https://github.com/recallwei))\\n- Charles Killer ([@Foosballfan](https://github.com/Foosballfan))\\n- Chongyi Zheng ([@harryzcy](https://github.com/harryzcy))\\n- Chua Chee How ([@rojakcoder](https://github.com/rojakcoder))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Colin McDonnell ([@colinhacks](https://github.com/colinhacks))\\n- Coupy ([@HyeokjinKang](https://github.com/HyeokjinKang))\\n- Craigory Coppola ([@AgentEnder](https://github.com/AgentEnder))\\n- Dan Dascalescu ([@dandv](https://github.com/dandv))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Danilo Woznica ([@danilowoz](https://github.com/danilowoz))\\n- David J. Felix ([@DavidJFelix](https://github.com/DavidJFelix))\\n- Debbie O\'Brien ([@debs-obrien](https://github.com/debs-obrien))\\n- Devansu Yadav ([@Devansu-Yadav](https://github.com/Devansu-Yadav))\\n- Dinh Bao Dang ([@chillinPanda](https://github.com/chillinPanda))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Eduardo M\xednguez ([@e-minguez](https://github.com/e-minguez))\\n- Eunkwang Shin ([@gracefullight](https://github.com/gracefullight))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Francesco Ciulla ([@FrancescoXX](https://github.com/FrancescoXX))\\n- Fredrik Stave ([@fredrikstave](https://github.com/fredrikstave))\\n- Fxpby ([@fxpby](https://github.com/fxpby))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Gareth Dwyer ([@sixhobbits](https://github.com/sixhobbits))\\n- Greg Berg\xe9 ([@gregberge](https://github.com/gregberge))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Gustav Ton\xe9r ([@gazab](https://github.com/gazab))\\n- Hayden Hong ([@AFRUITPIE](https://github.com/AFRUITPIE))\\n- Hidde de Vries ([@hidde](https://github.com/hidde))\\n- Hyunseung ([@hslee2008](https://github.com/hslee2008))\\n- JJ Style ([@jj-style](https://github.com/jj-style))\\n- James Kerrane ([@thatrobotdev](https://github.com/thatrobotdev))\\n- Jean Humann ([@jean-humann](https://github.com/jean-humann))\\n- Jesper Engberg ([@jeengbe](https://github.com/jeengbe))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- Joe Williams ([@BubbaJoe](https://github.com/BubbaJoe))\\n- John Cao ([@jhcao23](https://github.com/jhcao23))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jordan Manley ([@werner33](https://github.com/werner33))\\n- Jorens Merenjanu ([@JorensM](https://github.com/JorensM))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Juan Picado ([@juanpicado](https://github.com/juanpicado))\\n- Kolja ([@razzeee](https://github.com/razzeee))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Lorenzo Lewis ([@lorenzolewis](https://github.com/lorenzolewis))\\n- Maciek Palmowski ([@palmiak](https://github.com/palmiak))\\n- Manuel ([@manuel-rw](https://github.com/manuel-rw))\\n- Marco Kuper ([@scubamaggo](https://github.com/scubamaggo))\\n- Marco Stroppel ([@mstroppel](https://github.com/mstroppel))\\n- Marie ([@schneegansm](https://github.com/schneegansm))\\n- Markshawn ([@MarkShawn2020](https://github.com/MarkShawn2020))\\n- Martin Adamko ([@attitude](https://github.com/attitude))\\n- Max Schmitt ([@mxschmitt](https://github.com/mxschmitt))\\n- Michael Remediakis ([@mickremedi](https://github.com/mickremedi))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- ModupeD ([@ModupeD](https://github.com/ModupeD))\\n- Mu-Jing-Tsai ([@moojing](https://github.com/moojing))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Naffy Dharni ([@knownasnaffy](https://github.com/knownasnaffy))\\n- Naman Garg ([@NamanGarg2075](https://github.com/NamanGarg2075))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Oleksandr Fediashov ([@layershifter](https://github.com/layershifter))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Paul Razvan Berg ([@PaulRBerg](https://github.com/PaulRBerg))\\n- Pinaki Bhattacharjee ([@pinakipb2](https://github.com/pinakipb2))\\n- Rapha\xebl Barbazza ([@rbarbazz](https://github.com/rbarbazz))\\n- Rashid ([@rashidmya](https://github.com/rashidmya))\\n- Ryosuke Igarashi ([@cm-igarashi-ryosuke](https://github.com/cm-igarashi-ryosuke))\\n- SADIK KUZU ([@sadikkuzu](https://github.com/sadikkuzu))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Serenus ([@Kesyau](https://github.com/Kesyau))\\n- Shahriar ([@ShahriarKh](https://github.com/ShahriarKh))\\n- Shashank Kumar ([@shawshankkumar](https://github.com/shawshankkumar))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- Silvestar Bistrovi\u0107 ([@maliMirkec](https://github.com/maliMirkec))\\n- Sujal Gupta ([@heysujal](https://github.com/heysujal))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Surav Shrestha ([@suravshrestha](https://github.com/suravshrestha))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Anwar Chowdhury ([@tamalchowdhury](https://github.com/tamalchowdhury))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))\\n- Tatsunori Uchino ([@tats-u](https://github.com/tats-u))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Viktor Malmedal ([@JohnVicke](https://github.com/JohnVicke))\\n- Waldir Pimenta ([@waldyrious](https://github.com/waldyrious))\\n- Wan Sim ([@0420syj](https://github.com/0420syj))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Will Ceolin ([@wceolin](https://github.com/wceolin))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zwyx ([@Zwyx](https://github.com/Zwyx))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@FlorinaPacurar](https://github.com/FlorinaPacurar)\\n- [@Mogyuchi](https://github.com/Mogyuchi)\\n- [@Sainan](https://github.com/Sainan)\\n- [@VinceCYLiao](https://github.com/VinceCYLiao)\\n- [@allyw2002](https://github.com/allyw2002)\\n- [@bitpredator](https://github.com/bitpredator)\\n- [@conlacda](https://github.com/conlacda)\\n- [@dawei-wang](https://github.com/dawei-wang)\\n- [@la55u](https://github.com/la55u)\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@prateekbytes](https://github.com/prateekbytes)\\n- [@qwerzl](https://github.com/qwerzl)\\n- [@rsteele6](https://github.com/rsteele6)\\n- [@samatt14](https://github.com/samatt14)\\n- [@thedevwonder](https://github.com/thedevwonder)\\n- [@yosukekato165](https://github.com/yosukekato165)\\n- ozaki ([@OzakIOne](https://github.com/OzakIOne))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))\\n- \u521d\u51ac ([@chudongvip](https://github.com/chudongvip))"},{"id":"/2.4.3","metadata":{"permalink":"/changelog/2.4.3","source":"@site/changelog/source/2.4.3.md","title":"2.4.3","description":"Bug Fix","date":"2023-09-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual"},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T20:00","authors":["homotechsual","ori-shalom","slorber","TheCatLady"]},"unlisted":false,"prevItem":{"title":"3.0.0","permalink":"/changelog/3.0.0"},"nextItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`\\n - [#9107](https://github.com/facebook/docusaurus/pull/9107) fix(content-docs): sidebar generator should return customProps for doc items ([@TheCatLady](https://github.com/TheCatLady))\\n- `docusaurus-theme-classic`\\n - [#9108](https://github.com/facebook/docusaurus/pull/9108) feat(theme-classic): add description & keywords microdata to blog posts ([@TheCatLady](https://github.com/TheCatLady))\\n - [#9099](https://github.com/facebook/docusaurus/pull/9099) fix(theme): only set classname on ul elements if they have an existing class ([@homotechsual](https://github.com/homotechsual))\\n - [#9243](https://github.com/facebook/docusaurus/pull/9243) fix(theme-common): ThemedComponent should display something when JS is disabled ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#9130](https://github.com/facebook/docusaurus/pull/9130) fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash ([@ori-shalom](https://github.com/ori-shalom))\\n\\n## Committers: 4\\n\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@TheCatLady](https://github.com/TheCatLady)"},{"id":"/2.4.2","metadata":{"permalink":"/changelog/2.4.2","source":"@site/changelog/source/2.4.2.md","title":"2.4.2","description":"Bad npm publish, please use 2.4.3","date":"2023-09-20T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2023-09-20T19:00"},"unlisted":false,"prevItem":{"title":"2.4.3","permalink":"/changelog/2.4.3"},"nextItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.4.3"},{"id":"/2.4.1","metadata":{"permalink":"/changelog/2.4.1","source":"@site/changelog/source/2.4.1.md","title":"2.4.1","description":"Bug Fix","date":"2023-05-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"MetuMortis","alias":"LiberaTeMetuMortis","url":"https://github.com/LiberaTeMetuMortis","imageURL":"https://github.com/LiberaTeMetuMortis.png","key":"LiberaTeMetuMortis"},{"name":"Aleksandr Vladykin","alias":"morsko1","url":"https://github.com/morsko1","imageURL":"https://github.com/morsko1.png","key":"morsko1"},{"name":"Sachin Nanayakkara","alias":"SACHINnANYAKKARA","url":"https://github.com/SACHINnANYAKKARA","imageURL":"https://github.com/SACHINnANYAKKARA.png","key":"SACHINnANYAKKARA"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tarun Chauhan","alias":"tarunrajput","url":"https://github.com/tarunrajput","imageURL":"https://github.com/tarunrajput.png","key":"tarunrajput"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-05-15T20:00","authors":["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},"unlisted":false,"prevItem":{"title":"2.4.2","permalink":"/changelog/2.4.2"},"nextItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8971](https://github.com/facebook/docusaurus/pull/8971) fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8933](https://github.com/facebook/docusaurus/pull/8933) fix(theme-translations): fix Turkish translation for aria label \\"Enter key\\" ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- `docusaurus`\\n - [#8908](https://github.com/facebook/docusaurus/pull/8908) fix(core): Correct yarn upgrade command for yarn 2.x ([@andrewnicols](https://github.com/andrewnicols))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8909](https://github.com/facebook/docusaurus/pull/8909) fix(theme): add \\\\_\\\\_ prefix to technical anchors, search crawlers (Algolia) should ignore them ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#8906](https://github.com/facebook/docusaurus/pull/8906) fix(theme-common): fix collapsible component with prefers-reduced-motion ([@slorber](https://github.com/slorber))\\n - [#8873](https://github.com/facebook/docusaurus/pull/8873) fix(theme-common): fix confusing theme error message: bad sidebar id suggestions ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#8874](https://github.com/facebook/docusaurus/pull/8874) fix(utils): handle Markdown links with spaces to route correctly ([@morsko1](https://github.com/morsko1))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8842](https://github.com/facebook/docusaurus/pull/8842) fix(theme-translations): remove redundant navigation text in aria label ([@tarunrajput](https://github.com/tarunrajput))\\n- `create-docusaurus`\\n - [#8831](https://github.com/facebook/docusaurus/pull/8831) fix(create): add missing await ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#8862](https://github.com/facebook/docusaurus/pull/8862) refactor(theme): expose copy, success and word-wrap icons as standalone components ([@armano2](https://github.com/armano2))\\n\\n## Committers: 7\\n\\n- Aleksandr Vladykin ([@morsko1](https://github.com/morsko1))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- Armano ([@armano2](https://github.com/armano2))\\n- MetuMortis ([@LiberaTeMetuMortis](https://github.com/LiberaTeMetuMortis))\\n- Sachin Nanayakkara ([@SACHINnANYAKKARA](https://github.com/SACHINnANYAKKARA))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tarun Chauhan ([@tarunrajput](https://github.com/tarunrajput))"},{"id":"/2.4.0","metadata":{"permalink":"/changelog/2.4.0","source":"@site/changelog/source/2.4.0.md","title":"2.4.0","description":"New Feature","date":"2023-03-23T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anas","alias":"Anasqx","url":"https://github.com/Anasqx","imageURL":"https://github.com/Anasqx.png","key":"Anasqx"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"biplavmz","alias":"biplavmz","url":"https://github.com/biplavmz","imageURL":"https://github.com/biplavmz.png","key":"biplavmz"},{"name":"Dewansh Thakur","alias":"dewanshDT","url":"https://github.com/dewanshDT","imageURL":"https://github.com/dewanshDT.png","key":"dewanshDT"},{"name":"Petter Dr\xf8nnen","alias":"dr0nn1","url":"https://github.com/dr0nn1","imageURL":"https://github.com/dr0nn1.png","key":"dr0nn1"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Kagan","alias":"kagankan","url":"https://github.com/kagankan","imageURL":"https://github.com/kagankan.png","key":"kagankan"},{"name":"Mysterious_Dev","alias":"Mysterious-Dev","url":"https://github.com/Mysterious-Dev","imageURL":"https://github.com/Mysterious-Dev.png","key":"Mysterious-Dev"},{"name":"Moritz St\xfcckler","alias":"pReya","url":"https://github.com/pReya","imageURL":"https://github.com/pReya.png","key":"pReya"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tanner Dolby","alias":"tannerdolby","url":"https://github.com/tannerdolby","imageURL":"https://github.com/tannerdolby.png","key":"tannerdolby"},{"name":"TrueQAP","alias":"trueqap","url":"https://github.com/trueqap","imageURL":"https://github.com/trueqap.png","key":"trueqap"},{"name":"Vishruta Patil","alias":"Vishruta-Patil","url":"https://github.com/Vishruta-Patil","imageURL":"https://github.com/Vishruta-Patil.png","key":"Vishruta-Patil"},{"name":"Davide Donadio","alias":"ZarakiKanzaki","url":"https://github.com/ZarakiKanzaki","imageURL":"https://github.com/ZarakiKanzaki.png","key":"ZarakiKanzaki"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-03-23T20:00","authors":["Anasqx","armano2","biplavmz","dewanshDT","dr0nn1","Josh-Cena","kagankan","Mysterious-Dev","pReya","slorber","tannerdolby","trueqap","Vishruta-Patil","ZarakiKanzaki"]},"unlisted":false,"prevItem":{"title":"2.4.1","permalink":"/changelog/2.4.1"},"nextItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#8236](https://github.com/facebook/docusaurus/pull/8236) feat(content-docs): add support for sidebar item category/link descriptions in generated index page ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- `docusaurus-theme-classic`\\n - [#8708](https://github.com/facebook/docusaurus/pull/8708) feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark ([@slorber](https://github.com/slorber))\\n - [#8616](https://github.com/facebook/docusaurus/pull/8616) feat(theme): add ability to translate navbar+footer logo alt text ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#8690](https://github.com/facebook/docusaurus/pull/8690) feat(npm-to-yarn): add support for PnPm and custom converters ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#8677](https://github.com/facebook/docusaurus/pull/8677) feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8674](https://github.com/facebook/docusaurus/pull/8674) feat(theme-classic): respect `prefers-reduced-motion: reduce` mediaquery, bump Infima to alpha.43 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8668](https://github.com/facebook/docusaurus/pull/8668) feat(theme-translations): add Hungarian theme translations ([@trueqap](https://github.com/trueqap))\\n - [#8631](https://github.com/facebook/docusaurus/pull/8631) feat(theme-translations): add Norwegian (Bokm\xe5l) theme translation ([@dr0nn1](https://github.com/dr0nn1))\\n- `docusaurus-theme-common`\\n - [#8656](https://github.com/facebook/docusaurus/pull/8656) feat(theme-common): allow passing a string for details summary ([@pReya](https://github.com/pReya))\\n- `docusaurus-plugin-google-gtag`\\n - [#8620](https://github.com/facebook/docusaurus/pull/8620) feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#8803](https://github.com/facebook/docusaurus/pull/8803) fix(theme): codeblock buttons should be kept on the right when using RTL locale ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n - [#8615](https://github.com/facebook/docusaurus/pull/8615) fix(theme): improve color toggle when using dark navbar ([@dewanshDT](https://github.com/dewanshDT))\\n - [#8699](https://github.com/facebook/docusaurus/pull/8699) fix(theme-classic): fix tab focus bug in dropdown (#8697) ([@kagankan](https://github.com/kagankan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8801](https://github.com/facebook/docusaurus/pull/8801) fix(theme): allow tabs children to be falsy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#8757](https://github.com/facebook/docusaurus/pull/8757) fix(search): search page should react to querystring changes + cleanup/refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8746](https://github.com/facebook/docusaurus/pull/8746) fix(core): baseUrl error banner link anchor case ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#8744](https://github.com/facebook/docusaurus/pull/8744) fix(theme-translations): fix wrong arabic words (tip/next) ([@Anasqx](https://github.com/Anasqx))\\n\\n## :nail_care: Polish\\n\\n- `create-docusaurus`\\n - [#8712](https://github.com/facebook/docusaurus/pull/8712) polish(create-docusaurus): the starter template should use a navbar item \\"docSidebar\\" instead of \\"doc\\" (less fragile on updates) ([@biplavmz](https://github.com/biplavmz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus`\\n - [#8735](https://github.com/facebook/docusaurus/pull/8735) polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API ([@tannerdolby](https://github.com/tannerdolby))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8736](https://github.com/facebook/docusaurus/pull/8736) polish(core): better styling for error screens ([@tannerdolby](https://github.com/tannerdolby))\\n\\n## Committers: 14\\n\\n- Anas ([@Anasqx](https://github.com/Anasqx))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Davide Donadio ([@ZarakiKanzaki](https://github.com/ZarakiKanzaki))\\n- Dewansh Thakur ([@dewanshDT](https://github.com/dewanshDT))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kagan ([@kagankan](https://github.com/kagankan))\\n- Moritz St\xfcckler ([@pReya](https://github.com/pReya))\\n- Mysterious_Dev ([@Mysterious-Dev](https://github.com/Mysterious-Dev))\\n- Petter Dr\xf8nnen ([@dr0nn1](https://github.com/dr0nn1))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tanner Dolby ([@tannerdolby](https://github.com/tannerdolby))\\n- TrueQAP ([@trueqap](https://github.com/trueqap))\\n- Vishruta Patil ([@Vishruta-Patil](https://github.com/Vishruta-Patil))\\n- [@biplavmz](https://github.com/biplavmz)"},{"id":"/2.3.1","metadata":{"permalink":"/changelog/2.3.1","source":"@site/changelog/source/2.3.1.md","title":"2.3.1","description":"Bug Fix","date":"2023-02-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"S\xe9bastien Castiel","alias":"scastiel","url":"https://github.com/scastiel","imageURL":"https://github.com/scastiel.png","key":"scastiel"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-02-03T20:00","authors":["Josh-Cena","scastiel","slorber"]},"unlisted":false,"prevItem":{"title":"2.4.0","permalink":"/changelog/2.4.0"},"nextItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#8628](https://github.com/facebook/docusaurus/pull/8628) fix(theme-common): fix issue in tab scroll position restoration on tab click ([@slorber](https://github.com/slorber))\\n - [#8619](https://github.com/facebook/docusaurus/pull/8619) fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop ([@slorber](https://github.com/slorber))\\n - [#8618](https://github.com/facebook/docusaurus/pull/8618) fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8593](https://github.com/facebook/docusaurus/pull/8593) fix(theme-classic): allow rendering single tab item ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#8606](https://github.com/facebook/docusaurus/pull/8606) fix(utils): handle CRLF when parsing MDX imports ([@scastiel](https://github.com/scastiel))\\n- `docusaurus-preset-classic`\\n - [#8597](https://github.com/facebook/docusaurus/pull/8597) fix(preset-classic): install the right plugin for googleTagManager ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8614](https://github.com/facebook/docusaurus/pull/8614) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :robot: Dependencies\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#8610](https://github.com/facebook/docusaurus/pull/8610) chore(deps): bump eta from 1.12.3 to 2.0.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 3\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Castiel ([@scastiel](https://github.com/scastiel))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.3.0","metadata":{"permalink":"/changelog/2.3.0","source":"@site/changelog/source/2.3.0.md","title":"2.3.0","description":"New Feature","date":"2023-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Danny Kim","alias":"0916dhkim","url":"https://github.com/0916dhkim","imageURL":"https://github.com/0916dhkim.png","key":"0916dhkim"},{"name":"Riccardo","alias":"3v0k4","url":"https://github.com/3v0k4","imageURL":"https://github.com/3v0k4.png","key":"3v0k4"},{"name":"Denis Al-Khelali","alias":"denis-alkhelali","url":"https://github.com/denis-alkhelali","imageURL":"https://github.com/denis-alkhelali.png","key":"denis-alkhelali"},{"name":"Dongjoon Lee","alias":"Djunnni","url":"https://github.com/Djunnni","imageURL":"https://github.com/Djunnni.png","key":"Djunnni"},{"name":"Frieder Bluemle","alias":"friederbluemle","url":"https://github.com/friederbluemle","imageURL":"https://github.com/friederbluemle.png","key":"friederbluemle"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg"},{"name":"Lachlan Heywood","alias":"lachieh","url":"https://github.com/lachieh","imageURL":"https://github.com/lachieh.png","key":"lachieh"},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby"},{"name":"Matija Sirk","alias":"MatijaSi","url":"https://github.com/MatijaSi","imageURL":"https://github.com/MatijaSi.png","key":"MatijaSi"},{"name":"Muhammad Hammad","alias":"mhnaeem","url":"https://github.com/mhnaeem","imageURL":"https://github.com/mhnaeem.png","key":"mhnaeem"},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci"},{"name":"\u5b8b\u9526\u4e30","alias":"SJFCS","url":"https://github.com/SJFCS","imageURL":"https://github.com/SJFCS.png","key":"SJFCS"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor"},{"name":"Thomas.CA","alias":"Thomascogez","url":"https://github.com/Thomascogez","imageURL":"https://github.com/Thomascogez.png","key":"Thomascogez"}],"frontMatter":{"mdx":{"format":"md"},"date":"2023-01-26T20:00","authors":["0916dhkim","3v0k4","denis-alkhelali","Djunnni","friederbluemle","johnnyreilly","Josh-Cena","JoshuaKGoldberg","lachieh","lanegoolsby","MatijaSi","mhnaeem","mturoci","SJFCS","slorber","stnor","Thomascogez"]},"unlisted":false,"prevItem":{"title":"2.3.1","permalink":"/changelog/2.3.1"},"nextItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#8541](https://github.com/facebook/docusaurus/pull/8541) feat(theme-translations): default translations for Slovenian (sl-SI) ([@MatijaSi](https://github.com/MatijaSi))\\n- `docusaurus-plugin-content-blog`\\n - [#8378](https://github.com/facebook/docusaurus/pull/8378) feat(blog): add options.createFeedItems to filter/limit/transform feed items ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#8225](https://github.com/facebook/docusaurus/pull/8225) feat(theme-classic): store selected tab in query string. ([@mturoci](https://github.com/mturoci))\\n- `docusaurus`\\n - [#8397](https://github.com/facebook/docusaurus/pull/8397) feat(core): deploy CLI - add support for git url \\"insteadOf\\": use \'remote get-url\' to determine source repo url ([@friederbluemle](https://github.com/friederbluemle))\\n- `docusaurus-theme-search-algolia`\\n - [#8428](https://github.com/facebook/docusaurus/pull/8428) feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls\\n- `docusaurus-plugin-google-tag-manager`\\n - [#8470](https://github.com/facebook/docusaurus/pull/8470) feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`\\n - [#8303](https://github.com/facebook/docusaurus/pull/8303) fix(mdx-loader): support nested admonitions\\n - [#8282](https://github.com/facebook/docusaurus/pull/8282) fix(mermaid): fix Mermaid integration for v9.2 release\\n- `docusaurus-theme-common`\\n - [#8539](https://github.com/facebook/docusaurus/pull/8539) fix(algolia): make search footer respect searchPagePath ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#8538](https://github.com/facebook/docusaurus/pull/8538) fix(core): avoid hash collision when generating chunk names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8481](https://github.com/facebook/docusaurus/pull/8481) fix(core): explicitly define CopyWebpackPlugin toType: \'dir\' ([@Thomascogez](https://github.com/Thomascogez))\\n - [#8342](https://github.com/facebook/docusaurus/pull/8342) fix(core): normalize input for poll option ([@mhnaeem](https://github.com/mhnaeem))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-search-algolia`\\n - [#8462](https://github.com/facebook/docusaurus/pull/8462) fix(search-algolia): pass custom transformItems function to SearchBar ([@mturoci](https://github.com/mturoci))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8486](https://github.com/facebook/docusaurus/pull/8486) fix(theme): refactor Tabs, make groupId + queryString work fine together ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#8463](https://github.com/facebook/docusaurus/pull/8463) fix(theme-classic): content container grow to take all the available space ([@Djunnni](https://github.com/Djunnni))\\n - [#8328](https://github.com/facebook/docusaurus/pull/8328) fix(theme): preserve sidebar height on collapse ([@0916dhkim](https://github.com/0916dhkim))\\n - [#8350](https://github.com/facebook/docusaurus/pull/8350) fix(theme): forward className prop in theme-classic\'s Heading ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `docusaurus-theme-translations`\\n - [#8424](https://github.com/facebook/docusaurus/pull/8424) fix(translations): typo in lastUpdatedAtBy Vietnamese translation ([@slorber](https://github.com/slorber))\\n - [#8289](https://github.com/facebook/docusaurus/pull/8289) fix(theme-translations): complete Turkish theme translations\\n - [#8406](https://github.com/facebook/docusaurus/pull/8406) fix(translations): complete farsi theme translations\\n - [#8450](https://github.com/facebook/docusaurus/pull/8450) fix(theme-translations): complete Vietnamese theme translations\\n - [#8525](https://github.com/facebook/docusaurus/pull/8525) chore(theme-translations): complete pl translations\\n- `docusaurus-plugin-content-blog`\\n - [#8381](https://github.com/facebook/docusaurus/pull/8381) fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-docs`\\n - [#8275](https://github.com/facebook/docusaurus/pull/8275) fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- `docusaurus-utils`\\n - [#8314](https://github.com/facebook/docusaurus/pull/8314) fix(utils): allow partially backticked markdown h1 contentTitles ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#8279](https://github.com/facebook/docusaurus/pull/8279) fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#8445](https://github.com/facebook/docusaurus/pull/8445) fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs ([@3v0k4](https://github.com/3v0k4))\\n- `docusaurus-theme-translations`\\n - [#8423](https://github.com/facebook/docusaurus/pull/8423) fix(translations): complete Chinese theme translations ([@SJFCS](https://github.com/SJFCS))\\n - [#8312](https://github.com/facebook/docusaurus/pull/8312) fix(theme-translations): complete Swedish theme translations ([@stnor](https://github.com/stnor))\\n- `eslint-plugin`\\n - [#8281](https://github.com/facebook/docusaurus/pull/8281) feat(eslint-plugin): add plugin to exported configs ([@lachieh](https://github.com/lachieh))\\n\\n## Committers: 16\\n\\n- Danny Kim ([@0916dhkim](https://github.com/0916dhkim))\\n- Denis Al-Khelali ([@denis-alkhelali](https://github.com/denis-alkhelali))\\n- Dongjoon Lee ([@Djunnni](https://github.com/Djunnni))\\n- Frieder Bluemle ([@friederbluemle](https://github.com/friederbluemle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lachlan Heywood ([@lachieh](https://github.com/lachieh))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Matija Sirk ([@MatijaSi](https://github.com/MatijaSi))\\n- Muhammad Hammad ([@mhnaeem](https://github.com/mhnaeem))\\n- Riccardo ([@3v0k4](https://github.com/3v0k4))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thomas.CA ([@Thomascogez](https://github.com/Thomascogez))\\n- [@mturoci](https://github.com/mturoci)\\n- \u5b8b\u9526\u4e30 ([@SJFCS](https://github.com/SJFCS))"},{"id":"/2.2.0","metadata":{"permalink":"/changelog/2.2.0","source":"@site/changelog/source/2.2.0.md","title":"2.2.0","description":"New Feature","date":"2022-10-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adnan Hashmi","alias":"adnanhashmi09","url":"https://github.com/adnanhashmi09","imageURL":"https://github.com/adnanhashmi09.png","key":"adnanhashmi09"},{"name":"Johan Fagerberg","alias":"birjj","url":"https://github.com/birjj","imageURL":"https://github.com/birjj.png","key":"birjj"},{"name":"evan","alias":"e-im","url":"https://github.com/e-im","imageURL":"https://github.com/e-im.png","key":"e-im"},{"name":"forgeRW","alias":"forgeRW","url":"https://github.com/forgeRW","imageURL":"https://github.com/forgeRW.png","key":"forgeRW"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual"},{"name":"Jeferson S. Brito","alias":"jeferson-sb","url":"https://github.com/jeferson-sb","imageURL":"https://github.com/jeferson-sb.png","key":"jeferson-sb"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry"},{"name":"mturoci","alias":"mturoci","url":"https://github.com/mturoci","imageURL":"https://github.com/mturoci.png","key":"mturoci"},{"name":"Nguy\u1ec5n Th\xe0nh Nam","alias":"namnguyenthanhwork","url":"https://github.com/namnguyenthanhwork","imageURL":"https://github.com/namnguyenthanhwork.png","key":"namnguyenthanhwork"},{"name":"Masahiko Hara","alias":"pasora","url":"https://github.com/pasora","imageURL":"https://github.com/pasora.png","key":"pasora"},{"name":"Pranav Joglekar","alias":"Pranav2612000","url":"https://github.com/Pranav2612000","imageURL":"https://github.com/Pranav2612000.png","key":"Pranav2612000"},{"name":"Ramazan SANCAR","alias":"ramazansancar","url":"https://github.com/ramazansancar","imageURL":"https://github.com/ramazansancar.png","key":"ramazansancar"},{"name":"Sanjaiyan Parthipan","alias":"sanjaiyan-dev","url":"https://github.com/sanjaiyan-dev","imageURL":"https://github.com/sanjaiyan-dev.png","key":"sanjaiyan-dev"},{"name":"Shanmughapriyan S","alias":"shanpriyan","url":"https://github.com/shanpriyan","imageURL":"https://github.com/shanpriyan.png","key":"shanpriyan"},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Xabier Lahuerta Vazquez","alias":"Xabilahu","url":"https://github.com/Xabilahu","imageURL":"https://github.com/Xabilahu.png","key":"Xabilahu"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-10-29T20:00","authors":["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},"unlisted":false,"prevItem":{"title":"2.3.0","permalink":"/changelog/2.3.0"},"nextItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-client-redirects`\\n - [#8227](https://github.com/facebook/docusaurus/pull/8227) feat(plugin-client-redirects): keep the query string + hash ([@Xabilahu](https://github.com/Xabilahu))\\n- `docusaurus`\\n - [#8210](https://github.com/facebook/docusaurus/pull/8210) feat(core): add --config param to swizzle command ([@e-im](https://github.com/e-im))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-mermaid`, `docusaurus-types`, `docusaurus`\\n - [#7490](https://github.com/facebook/docusaurus/pull/7490) feat: support mermaid code blocks in Markdown ([@sjwall](https://github.com/sjwall))\\n- `docusaurus-types`, `docusaurus`\\n - [#8151](https://github.com/facebook/docusaurus/pull/8151) feat(core): siteConfig.headTags API to render extra tags in document head ([@johnnyreilly](https://github.com/johnnyreilly))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#8250](https://github.com/facebook/docusaurus/pull/8250) fix(ideal-image): do not pass down `img` prop ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`\\n - [#8246](https://github.com/facebook/docusaurus/pull/8246) fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#8234](https://github.com/facebook/docusaurus/pull/8234) fix(plugin-content-docs): fix error message context (error cause) when doc processing fails ([@shanpriyan](https://github.com/shanpriyan))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#8207](https://github.com/facebook/docusaurus/pull/8207) fix(theme-classic): hamburger menu control navigation by keyboard ([@jeferson-sb](https://github.com/jeferson-sb))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8204](https://github.com/facebook/docusaurus/pull/8204) fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API ([@mturoci](https://github.com/mturoci))\\n - [#8059](https://github.com/facebook/docusaurus/pull/8059) fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#8192](https://github.com/facebook/docusaurus/pull/8192) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n- `docusaurus-theme-classic`\\n - [#8174](https://github.com/facebook/docusaurus/pull/8174) fix(theme): announce theme switches ([@mturoci](https://github.com/mturoci))\\n - [#8190](https://github.com/facebook/docusaurus/pull/8190) fix(theme): add more tag names to inline code element set ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#8163](https://github.com/facebook/docusaurus/pull/8163) fix(theme): mobile navbar & skipToContent should cover announcementBar ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n - [#8068](https://github.com/facebook/docusaurus/pull/8068) fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-utils`\\n - [#8137](https://github.com/facebook/docusaurus/pull/8137) fix(utils): remove non-ASCII limitation for path normalization ([@birjj](https://github.com/birjj))\\n - [#8158](https://github.com/facebook/docusaurus/pull/8158) fix(content-blog): make RSS feed generation work with slugs with .html extension ([@Pranav2612000](https://github.com/Pranav2612000))\\n- `docusaurus-theme-translations`\\n - [#8105](https://github.com/facebook/docusaurus/pull/8105) fix(theme-translations): complete turkish theme default translations ([@ramazansancar](https://github.com/ramazansancar))\\n - [#8087](https://github.com/facebook/docusaurus/pull/8087) fix(theme-translations): remove extra vi translations ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- `docusaurus-plugin-client-redirects`\\n - [#8067](https://github.com/facebook/docusaurus/pull/8067) fix(redirect): tolerate trailing slash difference if config is undefined ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#8253](https://github.com/facebook/docusaurus/pull/8253) chore(theme-translations): complete ru translations ([@lex111](https://github.com/lex111))\\n - [#8243](https://github.com/facebook/docusaurus/pull/8243) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#8075](https://github.com/facebook/docusaurus/pull/8075) fix(theme-translation): complete Japanese theme default translation ([@pasora](https://github.com/pasora))\\n- `docusaurus`\\n - [#8159](https://github.com/facebook/docusaurus/pull/8159) fix(core): throw error for invalid URL in config file ([@forgeRW](https://github.com/forgeRW))\\n - [#8109](https://github.com/facebook/docusaurus/pull/8109) feat(core): prefetch on mobile touchstart ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- `docusaurus-theme-classic`\\n - [#8161](https://github.com/facebook/docusaurus/pull/8161) fix(theme): do not show tab content when tabbing over it; show after selection only ([@mturoci](https://github.com/mturoci))\\n - [#8062](https://github.com/facebook/docusaurus/pull/8062) refactor(theme): remove hard-coded tag border-radius ([@homotechsual](https://github.com/homotechsual))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#8066](https://github.com/facebook/docusaurus/pull/8066) fix(core): normalize slashes for url/baseUrl instead of throwing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 22\\n\\n- Adnan Hashmi ([@adnanhashmi09](https://github.com/adnanhashmi09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeferson S. Brito ([@jeferson-sb](https://github.com/jeferson-sb))\\n- Johan Fagerberg ([@birjj](https://github.com/birjj))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Masahiko Hara ([@pasora](https://github.com/pasora))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Nguy\u1ec5n Th\xe0nh Nam ([@namnguyenthanhwork](https://github.com/namnguyenthanhwork))\\n- Pranav Joglekar ([@Pranav2612000](https://github.com/Pranav2612000))\\n- Ramazan SANCAR ([@ramazansancar](https://github.com/ramazansancar))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- Sanjaiyan Parthipan ([@sanjaiyan-dev](https://github.com/sanjaiyan-dev))\\n- Shanmughapriyan S ([@shanpriyan](https://github.com/shanpriyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Xabier Lahuerta Vazquez ([@Xabilahu](https://github.com/Xabilahu))\\n- [@forgeRW](https://github.com/forgeRW)\\n- [@mturoci](https://github.com/mturoci)\\n- evan ([@e-im](https://github.com/e-im))"},{"id":"/2.1.0","metadata":{"permalink":"/changelog/2.1.0","source":"@site/changelog/source/2.1.0.md","title":"2.1.0","description":"New Feature","date":"2022-09-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adventure-yunfei","alias":"adventure-yunfei","url":"https://github.com/adventure-yunfei","imageURL":"https://github.com/adventure-yunfei.png","key":"adventure-yunfei"},{"name":"Bagdasar Ovsepyan","alias":"b-ovsepian","url":"https://github.com/b-ovsepian","imageURL":"https://github.com/b-ovsepian.png","key":"b-ovsepian"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Kevin \xd8sterkilde","alias":"Kosai106","url":"https://github.com/Kosai106","imageURL":"https://github.com/Kosai106.png","key":"Kosai106"},{"name":"Morgane Dubus","alias":"mdubus","url":"https://github.com/mdubus","imageURL":"https://github.com/mdubus.png","key":"mdubus"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"whiteand","alias":"whiteand","url":"https://github.com/whiteand","imageURL":"https://github.com/whiteand.png","key":"whiteand"},{"name":"Yoni Chechik","alias":"YoniChechik","url":"https://github.com/YoniChechik","imageURL":"https://github.com/YoniChechik.png","key":"YoniChechik"},{"name":"yzhe819","alias":"yzhe819","url":"https://github.com/yzhe819","imageURL":"https://github.com/yzhe819.png","key":"yzhe819"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-09-01T20:00","authors":["adventure-yunfei","b-ovsepian","datlechin","Josh-Cena","Kosai106","mdubus","slorber","whiteand","YoniChechik","yzhe819"]},"unlisted":false,"prevItem":{"title":"2.2.0","permalink":"/changelog/2.2.0"},"nextItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#8008](https://github.com/facebook/docusaurus/pull/8008) feat(theme): ability to use `<DocCardList>` without items prop, on any doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7963](https://github.com/facebook/docusaurus/pull/7963) feat(docs): allow to configure noIndex per doc version ([@slorber](https://github.com/slorber))\\n - [#7949](https://github.com/facebook/docusaurus/pull/7949) feat(plugin-docs): docs sidebar item link: support \\"autoAddBaseUrl\\" attribute ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7953](https://github.com/facebook/docusaurus/pull/7953) feat(theme): adds Ukrainian default theme translations ([@b-ovsepian](https://github.com/b-ovsepian))\\n\\n## :bug: Bug Fix\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-classic`\\n - [#8029](https://github.com/facebook/docusaurus/pull/8029) fix(preset-classic): broken link in \\"unrecognized keys\\" error message ([@mdubus](https://github.com/mdubus))\\n- `docusaurus`\\n - [#7977](https://github.com/facebook/docusaurus/pull/7977) fix(core): preload should support encoded page links ([@adventure-yunfei](https://github.com/adventure-yunfei))\\n - [#7996](https://github.com/facebook/docusaurus/pull/7996) fix(core): CLI command write-translations should extract translations from @docu\u2026 ([@slorber](https://github.com/slorber))\\n - [#7952](https://github.com/facebook/docusaurus/pull/7952) fix(core): allow overriding ssr/dev template meta tags ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#7964](https://github.com/facebook/docusaurus/pull/7964) fix(sitemap): filter all routes with robots meta containing noindex ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7910](https://github.com/facebook/docusaurus/pull/7910) fix(theme-classic): code block line number display with line wrapping ([@yzhe819](https://github.com/yzhe819))\\n - [#7786](https://github.com/facebook/docusaurus/pull/7786) fix: collapse siblings when first category is selected ([@whiteand](https://github.com/whiteand))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#7982](https://github.com/facebook/docusaurus/pull/7982) fix(theme): add aria-label to skip to content link region ([@YoniChechik](https://github.com/YoniChechik))\\n - [#7940](https://github.com/facebook/docusaurus/pull/7940) refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow ([@slorber](https://github.com/slorber))\\n - [#7876](https://github.com/facebook/docusaurus/pull/7876) refactor(theme-classic): make tag text visually certered ([@Kosai106](https://github.com/Kosai106))\\n- `docusaurus-utils`\\n - [#7941](https://github.com/facebook/docusaurus/pull/7941) feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`\\n - [#7942](https://github.com/facebook/docusaurus/pull/7942) feat(theme-classic): use lang attribute in navbar locale dropdown items ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-translations`\\n - [#7928](https://github.com/facebook/docusaurus/pull/7928) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- `create-docusaurus`\\n - [#8032](https://github.com/facebook/docusaurus/pull/8032) fix(create-docusaurus): tutorial and init template improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`\\n - [#7905](https://github.com/facebook/docusaurus/pull/7905) docs: remove mention of beta ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 10\\n\\n- Bagdasar Ovsepyan ([@b-ovsepian](https://github.com/b-ovsepian))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kevin \xd8sterkilde ([@Kosai106](https://github.com/Kosai106))\\n- Morgane Dubus ([@mdubus](https://github.com/mdubus))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Yoni Chechik ([@YoniChechik](https://github.com/YoniChechik))\\n- [@whiteand](https://github.com/whiteand)\\n- [@yzhe819](https://github.com/yzhe819)\\n- adventure-yunfei ([@adventure-yunfei](https://github.com/adventure-yunfei))"},{"id":"/2.0.1","metadata":{"permalink":"/changelog/2.0.1","source":"@site/changelog/source/2.0.1.md","title":"2.0.1","description":"Fix bad npm publish of 2.0.0","date":"2022-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T20:00","authors":["slorber"]},"unlisted":false,"prevItem":{"title":"2.1.0","permalink":"/changelog/2.1.0"},"nextItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nFix bad npm publish of 2.0.0\\n\\n## Committers: 1\\n\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0","metadata":{"permalink":"/changelog/2.0.0","source":"@site/changelog/source/2.0.0.md","title":"2.0.0","description":"Bad npm publish, please use 2.0.1","date":"2022-08-01T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-08-01T19:00","authors":["Josh-Cena","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.1","permalink":"/changelog/2.0.1"},"nextItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, please use 2.0.1\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#7781](https://github.com/facebook/docusaurus/pull/7781) refactor(core): log Docusaurus & Node version before exiting ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 2\\n\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-rc.1","metadata":{"permalink":"/changelog/2.0.0-rc.1","source":"@site/changelog/source/2.0.0-rc.1.md","title":"2.0.0-rc.1","description":"Bug Fix","date":"2022-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos"},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie"},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613"},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad"},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"LichLord91","alias":"LichLord91","url":"https://github.com/LichLord91","imageURL":"https://github.com/LichLord91.png","key":"LichLord91"},{"name":"Bruce Song","alias":"recallwei","url":"https://github.com/recallwei","imageURL":"https://github.com/recallwei.png","key":"recallwei"},{"name":"Arthur Brugi\xe8re","alias":"RoiArthurB","url":"https://github.com/RoiArthurB","imageURL":"https://github.com/RoiArthurB.png","key":"RoiArthurB"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"The Nguyen","alias":"treoden","url":"https://github.com/treoden","imageURL":"https://github.com/treoden.png","key":"treoden"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-14T20:00","authors":["anaclumos","DigiPie","Gary50613","ghostsquad","jeffreyaven","Josh-Cena","LichLord91","recallwei","RoiArthurB","slorber","treoden"]},"unlisted":false,"prevItem":{"title":"2.0.0","permalink":"/changelog/2.0.0"},"nextItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7776](https://github.com/facebook/docusaurus/pull/7776) fix(core): swizzle --eject js should not copy theme .d.ts files ([@slorber](https://github.com/slorber))\\n - [#7750](https://github.com/facebook/docusaurus/pull/7750) fix(deploy): revert \\"feat(deploy): copy local git config to tmp repo (#7702)\\" ([@ghostsquad](https://github.com/ghostsquad))\\n- `docusaurus-plugin-sitemap`\\n - [#7774](https://github.com/facebook/docusaurus/pull/7774) fix(sitemap): complete gracefully when all pages have noIndex meta ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n - [#7755](https://github.com/facebook/docusaurus/pull/7755) fix(theme-classic): validate options properly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7752](https://github.com/facebook/docusaurus/pull/7752) fix(theme-classic): fix Layout theme height CSS ([@LichLord91](https://github.com/LichLord91))\\n- `docusaurus-migrate`\\n - [#7766](https://github.com/facebook/docusaurus/pull/7766) fix(migrate): import siteConfig with file extension ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#7761](https://github.com/facebook/docusaurus/pull/7761) fix(algolia-search): test for canUseIntersectionObserver ([@RoiArthurB](https://github.com/RoiArthurB))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7762](https://github.com/facebook/docusaurus/pull/7762) chore(theme-translations): complete ko translations ([@anaclumos](https://github.com/anaclumos))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-plugin-content-docs`\\n - [#7706](https://github.com/facebook/docusaurus/pull/7706) docs: release process, versioning, breaking changes, public API surface ([@slorber](https://github.com/slorber))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`\\n - [#7777](https://github.com/facebook/docusaurus/pull/7777) refactor(theme): fix duplicate page metadata usage ([@slorber](https://github.com/slorber))\\n - [#7771](https://github.com/facebook/docusaurus/pull/7771) chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Arthur Brugi\xe8re ([@RoiArthurB](https://github.com/RoiArthurB))\\n- Bruce Song ([@recallwei](https://github.com/recallwei))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- The Nguyen ([@treoden](https://github.com/treoden))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- [@LichLord91](https://github.com/LichLord91)\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.22","metadata":{"permalink":"/changelog/2.0.0-beta.22","source":"@site/changelog/source/2.0.0-beta.22.md","title":"2.0.0-beta.22","description":"Breaking Change","date":"2022-07-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Fl\xe1vio Silva","alias":"201flaviosilva","url":"https://github.com/201flaviosilva","imageURL":"https://github.com/201flaviosilva.png","key":"201flaviosilva"},{"name":"7Wate","alias":"7Wate","url":"https://github.com/7Wate","imageURL":"https://github.com/7Wate.png","key":"7Wate"},{"name":"\u8d64\u57ce\u7ed3\u8863","alias":"AkagiYui","url":"https://github.com/AkagiYui","imageURL":"https://github.com/AkagiYui.png","key":"AkagiYui"},{"name":"alewolf","alias":"alewolf","url":"https://github.com/alewolf","imageURL":"https://github.com/alewolf.png","key":"alewolf"},{"name":"Alexander Nestorov","alias":"alexandernst","url":"https://github.com/alexandernst","imageURL":"https://github.com/alexandernst.png","key":"alexandernst"},{"name":"Ahmed Altomy","alias":"Altomy","url":"https://github.com/Altomy","imageURL":"https://github.com/Altomy.png","key":"Altomy"},{"name":"Sunghyun Cho","alias":"anaclumos","url":"https://github.com/anaclumos","imageURL":"https://github.com/anaclumos.png","key":"anaclumos"},{"name":"Benjamin Cabanes","alias":"bcabanes","url":"https://github.com/bcabanes","imageURL":"https://github.com/bcabanes.png","key":"bcabanes"},{"name":"Ben Myers","alias":"BenDMyers","url":"https://github.com/BenDMyers","imageURL":"https://github.com/BenDMyers.png","key":"BenDMyers"},{"name":"Boulet","alias":"Boulet-","url":"https://github.com/Boulet-","imageURL":"https://github.com/Boulet-.png","key":"Boulet-"},{"name":"Charles Ancheta","alias":"cbebe","url":"https://github.com/cbebe","imageURL":"https://github.com/cbebe.png","key":"cbebe"},{"name":"Clemie McCartney","alias":"clemiee","url":"https://github.com/clemiee","imageURL":"https://github.com/clemiee.png","key":"clemiee"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Dharsan B","alias":"DharsanB","url":"https://github.com/DharsanB","imageURL":"https://github.com/DharsanB.png","key":"DharsanB"},{"name":"dht","alias":"dht","url":"https://github.com/dht","imageURL":"https://github.com/dht.png","key":"dht"},{"name":"Diego Fran\xe7a","alias":"difranca","url":"https://github.com/difranca","imageURL":"https://github.com/difranca.png","key":"difranca"},{"name":"dpang314","alias":"dpang314","url":"https://github.com/dpang314","imageURL":"https://github.com/dpang314.png","key":"dpang314"},{"name":"emattia","alias":"emattia","url":"https://github.com/emattia","imageURL":"https://github.com/emattia.png","key":"emattia"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613"},{"name":"Wes McNamee","alias":"ghostsquad","url":"https://github.com/ghostsquad","imageURL":"https://github.com/ghostsquad.png","key":"ghostsquad"},{"name":"Hyunseung Lee","alias":"HyunseungLee-Travis","url":"https://github.com/HyunseungLee-Travis","imageURL":"https://github.com/HyunseungLee-Travis.png","key":"HyunseungLee-Travis"},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle"},{"name":"Johnie Hjelm","alias":"johnie","url":"https://github.com/johnie","imageURL":"https://github.com/johnie.png","key":"johnie"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"JP","alias":"jpdriver","url":"https://github.com/jpdriver","imageURL":"https://github.com/jpdriver.png","key":"jpdriver"},{"name":"Joshua Schmitt","alias":"jqshuv","url":"https://github.com/jqshuv","imageURL":"https://github.com/jqshuv.png","key":"jqshuv"},{"name":"K\xfcr\u015fat \u015eim\u015fek","alias":"kursatsmsek","url":"https://github.com/kursatsmsek","imageURL":"https://github.com/kursatsmsek.png","key":"kursatsmsek"},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch"},{"name":"\u674e\u5c0f\u96e8","alias":"metal-young","url":"https://github.com/metal-young","imageURL":"https://github.com/metal-young.png","key":"metal-young"},{"name":"Tom Mrazauskas","alias":"mrazauskas","url":"https://github.com/mrazauskas","imageURL":"https://github.com/mrazauskas.png","key":"mrazauskas"},{"name":"pincman","alias":"pincman","url":"https://github.com/pincman","imageURL":"https://github.com/pincman.png","key":"pincman"},{"name":"Redcamel","alias":"redcamel","url":"https://github.com/redcamel","imageURL":"https://github.com/redcamel.png","key":"redcamel"},{"name":"Rein van Haaren","alias":"reinvanhaaren","url":"https://github.com/reinvanhaaren","imageURL":"https://github.com/reinvanhaaren.png","key":"reinvanhaaren"},{"name":"Rudra Sen","alias":"RudraSen2","url":"https://github.com/RudraSen2","imageURL":"https://github.com/RudraSen2.png","key":"RudraSen2"},{"name":"sado","alias":"sado0823","url":"https://github.com/sado0823","imageURL":"https://github.com/sado0823.png","key":"sado0823"},{"name":"Dzung Do","alias":"saosangmo","url":"https://github.com/saosangmo","imageURL":"https://github.com/saosangmo.png","key":"saosangmo"},{"name":"Dima Grossman","alias":"scopsy","url":"https://github.com/scopsy","imageURL":"https://github.com/scopsy.png","key":"scopsy"},{"name":"SheetJSDev","alias":"SheetJSDev","url":"https://github.com/SheetJSDev","imageURL":"https://github.com/SheetJSDev.png","key":"SheetJSDev"},{"name":"Joe Harrison","alias":"sigwinch28","url":"https://github.com/sigwinch28","imageURL":"https://github.com/sigwinch28.png","key":"sigwinch28"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Huy Nguyen","alias":"Smilefounder","url":"https://github.com/Smilefounder","imageURL":"https://github.com/Smilefounder.png","key":"Smilefounder"},{"name":"Steven Serrata","alias":"sserrata","url":"https://github.com/sserrata","imageURL":"https://github.com/sserrata.png","key":"sserrata"},{"name":"Szil\xe1rd D\xf3r\xf3","alias":"szilarddoro","url":"https://github.com/szilarddoro","imageURL":"https://github.com/szilarddoro.png","key":"szilarddoro"},{"name":"Le Thi Van","alias":"vannyle","url":"https://github.com/vannyle","imageURL":"https://github.com/vannyle.png","key":"vannyle"},{"name":"Webber Takken","alias":"webbertakken","url":"https://github.com/webbertakken","imageURL":"https://github.com/webbertakken.png","key":"webbertakken"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-07-08T20:00","authors":["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1"},"nextItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#7740](https://github.com/facebook/docusaurus/pull/7740) refactor(theme): nest theme icons under subfolder @theme/Icon/\\\\* ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7716](https://github.com/facebook/docusaurus/pull/7716) refactor(theme): split BlogPostItem into smaller theme subcomponents ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7660](https://github.com/facebook/docusaurus/pull/7660) refactor(theme-common): split package into public/internal API entrypoints ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7644](https://github.com/facebook/docusaurus/pull/7644) refactor(docs,theme): split DocItem comp, useDoc hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7642](https://github.com/facebook/docusaurus/pull/7642) refactor: remove \\"error\\" reporting level, move reportMessage to logger ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7152](https://github.com/facebook/docusaurus/pull/7152) refactor: handle all admonitions via JSX component ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-translations`\\n - [#7732](https://github.com/facebook/docusaurus/pull/7732) feat(theme-translations): Dutch translation ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n - [#7715](https://github.com/facebook/docusaurus/pull/7715) feat(theme-translations): Swedish translation ([@johnie](https://github.com/johnie))\\n- `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#7666](https://github.com/facebook/docusaurus/pull/7666) feat(algolia-search): allow translating search modal ([@forresst](https://github.com/forresst))\\n- `create-docusaurus`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7643](https://github.com/facebook/docusaurus/pull/7643) feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#7649](https://github.com/facebook/docusaurus/pull/7649) feat(client-redirects): make plugin respect onDuplicateRoutes config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7624](https://github.com/facebook/docusaurus/pull/7624) feat: allow customizing localization path of each locale ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7581](https://github.com/facebook/docusaurus/pull/7581) feat(core): allow opting out of HTML minification ([@alexandernst](https://github.com/alexandernst))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7557](https://github.com/facebook/docusaurus/pull/7557) feat: allow specifying custom target for FooterLogo ([@vannyle](https://github.com/vannyle))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7556](https://github.com/facebook/docusaurus/pull/7556) feat: add admonition type title translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7386](https://github.com/facebook/docusaurus/pull/7386) feat(core): allow customizing the i18n directory path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`\\n - [#7514](https://github.com/facebook/docusaurus/pull/7514) feat(live-codeblock): add support for noInline to interactive code blocks ([@jpdriver](https://github.com/jpdriver))\\n- `docusaurus-plugin-content-docs`\\n - [#7461](https://github.com/facebook/docusaurus/pull/7461) feat(content-docs): last_update front matter ([@dpang314](https://github.com/dpang314))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7727](https://github.com/facebook/docusaurus/pull/7727) fix(theme): show blog post edit link even when no tag & not truncated ([@anaclumos](https://github.com/anaclumos))\\n - [#7659](https://github.com/facebook/docusaurus/pull/7659) fix(theme-classic): expose empty string alt text in navbar logos ([@BenDMyers](https://github.com/BenDMyers))\\n - [#7595](https://github.com/facebook/docusaurus/pull/7595) fix(content-pages): add article wrapper around MDXContent ([@matkoch](https://github.com/matkoch))\\n- `docusaurus-theme-translations`\\n - [#7694](https://github.com/facebook/docusaurus/pull/7694) fix(theme-translations): typo in vi locale ([@saosangmo](https://github.com/saosangmo))\\n- `docusaurus-plugin-content-docs`\\n - [#7638](https://github.com/facebook/docusaurus/pull/7638) fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category ([@slorber](https://github.com/slorber))\\n - [#7634](https://github.com/facebook/docusaurus/pull/7634) fix(content-docs): allow translating doc labels in sidebars.js ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7604](https://github.com/facebook/docusaurus/pull/7604) fix(utils): allow any non-boundary characters in Markdown heading ID ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7593](https://github.com/facebook/docusaurus/pull/7593) fix(cssnano-preset): disable z-index minification ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-theme-common`\\n - [#7551](https://github.com/facebook/docusaurus/pull/7551) fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word ([@slorber](https://github.com/slorber))\\n - [#7485](https://github.com/facebook/docusaurus/pull/7485) fix(theme-classic): inconsistent code block wrapping ([@dpang314](https://github.com/dpang314))\\n- `docusaurus-mdx-loader`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`\\n - [#7521](https://github.com/facebook/docusaurus/pull/7521) fix: make type-checking work in Yarn PnP ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7696](https://github.com/facebook/docusaurus/pull/7696) fix(theme-translations): improve grammar of zh translation ([@AkagiYui](https://github.com/AkagiYui))\\n - [#7691](https://github.com/facebook/docusaurus/pull/7691) chore(theme-translations): complete vi translations ([@datlechin](https://github.com/datlechin))\\n - [#7683](https://github.com/facebook/docusaurus/pull/7683) chore(theme-translations): complete ar translations ([@Altomy](https://github.com/Altomy))\\n - [#7633](https://github.com/facebook/docusaurus/pull/7633) chore(theme-translations): complete ko translations ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- `docusaurus`\\n - [#7702](https://github.com/facebook/docusaurus/pull/7702) feat(deploy): copy local git config to tmp repo ([@ghostsquad](https://github.com/ghostsquad))\\n - [#7600](https://github.com/facebook/docusaurus/pull/7600) fix: force refresh on chunk preload error ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#7673](https://github.com/facebook/docusaurus/pull/7673) fix(content-docs): format last update date as \\"Jun 19, 2020\\" ([@sigwinch28](https://github.com/sigwinch28))\\n- `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#7671](https://github.com/facebook/docusaurus/pull/7671) refactor(theme-common): rename useDynamicCallback to useEvent ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#7648](https://github.com/facebook/docusaurus/pull/7648) fix(theme-common): make useShallowMemoObject key-order-insensitive ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#7639](https://github.com/facebook/docusaurus/pull/7639) chore(create): update the facebook template with current assets ([@zpao](https://github.com/zpao))\\n - [#7520](https://github.com/facebook/docusaurus/pull/7520) feat: add engines field to templates\' package.json ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7579](https://github.com/facebook/docusaurus/pull/7579) refactor(pwa): simplify registerSW code, fix ESLint errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#7545](https://github.com/facebook/docusaurus/pull/7545) feat(analytics): allow query/hash changes to be sent to GA ([@lanegoolsby](https://github.com/lanegoolsby))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#7739](https://github.com/facebook/docusaurus/pull/7739) docs: swizzle react-live with eject ([@SheetJSDev](https://github.com/SheetJSDev))\\n - [#7723](https://github.com/facebook/docusaurus/pull/7723) docs: add GitHub pages deployment troubleshooting guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7705](https://github.com/facebook/docusaurus/pull/7705) docs: mention MDXContent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7675](https://github.com/facebook/docusaurus/pull/7675) docs: add docusaurus-openapi-docs to resources ([@sserrata](https://github.com/sserrata))\\n - [#7677](https://github.com/facebook/docusaurus/pull/7677) docs: add more info on github cross repo deployment ([@bcabanes](https://github.com/bcabanes))\\n - [#7563](https://github.com/facebook/docusaurus/pull/7563) docs: add awesome-docusaurus resource ([@webbertakken](https://github.com/webbertakken))\\n - [#7665](https://github.com/facebook/docusaurus/pull/7665) docs: add link from every category index page to the guide page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7519](https://github.com/facebook/docusaurus/pull/7519) docs: multiple documentation elaborations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7518](https://github.com/facebook/docusaurus/pull/7518) docs: remove useless front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7512](https://github.com/facebook/docusaurus/pull/7512) docs: update Kent C. Dodds Twitter avatar ([@DharsanB](https://github.com/DharsanB))\\n- `create-docusaurus`\\n - [#7611](https://github.com/facebook/docusaurus/pull/7611) docs: advise using Node 18 in deployment ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7582](https://github.com/facebook/docusaurus/pull/7582) docs: make localhost links clickable ([@dht](https://github.com/dht))\\n- `docusaurus-plugin-client-redirects`\\n - [#7607](https://github.com/facebook/docusaurus/pull/7607) refactor(client-redirects): elaborate documentation, minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7676](https://github.com/facebook/docusaurus/pull/7676) refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#7674](https://github.com/facebook/docusaurus/pull/7674) chore: prevent importing theme components with relative paths ([@slorber](https://github.com/slorber))\\n - [#7664](https://github.com/facebook/docusaurus/pull/7664) chore: upgrade Infima to alpha.40 ([@slorber](https://github.com/slorber))\\n- Other\\n - [#7663](https://github.com/facebook/docusaurus/pull/7663) misc: share .vscode/extensions.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7583](https://github.com/facebook/docusaurus/pull/7583) refactor(cli): make the CLI an even thinner wrapper around command functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7547](https://github.com/facebook/docusaurus/pull/7547) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`, `stylelint-copyright`\\n - [#7586](https://github.com/facebook/docusaurus/pull/7586) chore: upgrade to TS 4.7, compile with NodeNext ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 51\\n\\n- 7Wate ([@7Wate](https://github.com/7Wate))\\n- Ahmed Altomy ([@Altomy](https://github.com/Altomy))\\n- Alexander Nestorov ([@alexandernst](https://github.com/alexandernst))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ben Myers ([@BenDMyers](https://github.com/BenDMyers))\\n- Benjamin Cabanes ([@bcabanes](https://github.com/bcabanes))\\n- Boulet ([@Boulet-](https://github.com/Boulet-))\\n- Charles Ancheta ([@cbebe](https://github.com/cbebe))\\n- Clemie McCartney ([@clemiee](https://github.com/clemiee))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- Dharsan B ([@DharsanB](https://github.com/DharsanB))\\n- Diego Fran\xe7a ([@difranca](https://github.com/difranca))\\n- Dima Grossman ([@scopsy](https://github.com/scopsy))\\n- Dzung Do ([@saosangmo](https://github.com/saosangmo))\\n- Fl\xe1vio Silva ([@201flaviosilva](https://github.com/201flaviosilva))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Huy Nguyen ([@Smilefounder](https://github.com/Smilefounder))\\n- Hyunseung Lee ([@HyunseungLee-Travis](https://github.com/HyunseungLee-Travis))\\n- JP ([@jpdriver](https://github.com/jpdriver))\\n- Joe Harrison ([@sigwinch28](https://github.com/sigwinch28))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Johnie Hjelm ([@johnie](https://github.com/johnie))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Joshua Schmitt ([@jqshuv](https://github.com/jqshuv))\\n- K\xfcr\u015fat \u015eim\u015fek ([@kursatsmsek](https://github.com/kursatsmsek))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Le Thi Van ([@vannyle](https://github.com/vannyle))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Redcamel ([@redcamel](https://github.com/redcamel))\\n- Rein van Haaren ([@reinvanhaaren](https://github.com/reinvanhaaren))\\n- Rudra Sen ([@RudraSen2](https://github.com/RudraSen2))\\n- Steven Serrata ([@sserrata](https://github.com/sserrata))\\n- Sunghyun Cho ([@anaclumos](https://github.com/anaclumos))\\n- Szil\xe1rd D\xf3r\xf3 ([@szilarddoro](https://github.com/szilarddoro))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Mrazauskas ([@mrazauskas](https://github.com/mrazauskas))\\n- Webber Takken ([@webbertakken](https://github.com/webbertakken))\\n- Wes McNamee ([@ghostsquad](https://github.com/ghostsquad))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@SheetJSDev](https://github.com/SheetJSDev)\\n- [@alewolf](https://github.com/alewolf)\\n- [@dpang314](https://github.com/dpang314)\\n- dht ([@dht](https://github.com/dht))\\n- emattia ([@emattia](https://github.com/emattia))\\n- pincman ([@pincman](https://github.com/pincman))\\n- sado ([@sado0823](https://github.com/sado0823))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))\\n- \u674e\u5c0f\u96e8 ([@metal-young](https://github.com/metal-young))\\n- \u8d64\u57ce\u7ed3\u8863 ([@AkagiYui](https://github.com/AkagiYui))"},{"id":"/2.0.0-beta.21","metadata":{"permalink":"/changelog/2.0.0-beta.21","source":"@site/changelog/source/2.0.0-beta.21.md","title":"2.0.0-beta.21","description":"Breaking Change","date":"2022-05-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Benjamin Diolez","alias":"BenDz","url":"https://github.com/BenDz","imageURL":"https://github.com/BenDz.png","key":"BenDz"},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Designatory","alias":"Designatory","url":"https://github.com/Designatory","imageURL":"https://github.com/Designatory.png","key":"Designatory"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"\u51f1\u6069 Kane","alias":"Gary50613","url":"https://github.com/Gary50613","imageURL":"https://github.com/Gary50613.png","key":"Gary50613"},{"name":"Ggicci","alias":"ggicci","url":"https://github.com/ggicci","imageURL":"https://github.com/ggicci.png","key":"ggicci"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Jan Peer St\xf6cklmair","alias":"JPeer264","url":"https://github.com/JPeer264","imageURL":"https://github.com/JPeer264.png","key":"JPeer264"},{"name":"Jeremy","alias":"jrmyw92","url":"https://github.com/jrmyw92","imageURL":"https://github.com/jrmyw92.png","key":"jrmyw92"},{"name":"Junjie","alias":"junjieweb","url":"https://github.com/junjieweb","imageURL":"https://github.com/junjieweb.png","key":"junjieweb"},{"name":"Lane Goolsby","alias":"lanegoolsby","url":"https://github.com/lanegoolsby","imageURL":"https://github.com/lanegoolsby.png","key":"lanegoolsby"},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi"},{"name":"Matthias Koch","alias":"matkoch","url":"https://github.com/matkoch","imageURL":"https://github.com/matkoch.png","key":"matkoch"},{"name":"Akara","alias":"Messiahhh","url":"https://github.com/Messiahhh","imageURL":"https://github.com/Messiahhh.png","key":"Messiahhh"},{"name":"Michael Hughes","alias":"mhughes2k","url":"https://github.com/mhughes2k","imageURL":"https://github.com/mhughes2k.png","key":"mhughes2k"},{"name":"Nitya Narasimhan","alias":"nitya","url":"https://github.com/nitya","imageURL":"https://github.com/nitya.png","key":"nitya"},{"name":"Oluwatobi Sofela","alias":"oluwatobiss","url":"https://github.com/oluwatobiss","imageURL":"https://github.com/oluwatobiss.png","key":"oluwatobiss"},{"name":"Ori Shalom","alias":"ori-shalom","url":"https://github.com/ori-shalom","imageURL":"https://github.com/ori-shalom.png","key":"ori-shalom"},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"Rui Peres","alias":"RuiAAPeres","url":"https://github.com/RuiAAPeres","imageURL":"https://github.com/RuiAAPeres.png","key":"RuiAAPeres"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"James","alias":"Zamiell","url":"https://github.com/Zamiell","imageURL":"https://github.com/Zamiell.png","key":"Zamiell"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-27T20:00","authors":["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22"},"nextItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-pwa`\\n - [#7422](https://github.com/facebook/docusaurus/pull/7422) refactor(pwa): remove reloadPopup option in favor of swizzling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7501](https://github.com/facebook/docusaurus/pull/7501) chore: require Node 16.14 ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-sitemap`\\n - [#7469](https://github.com/facebook/docusaurus/pull/7469) feat(sitemap): allow customizing the output name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7371](https://github.com/facebook/docusaurus/pull/7371) feat(core): support docusaurus.config.cjs as default file name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7500](https://github.com/facebook/docusaurus/pull/7500) feat: make docusaurus serve automatically open in browser ([@Zamiell](https://github.com/Zamiell))\\n - [#7452](https://github.com/facebook/docusaurus/pull/7452) feat: add --no-minify flag to docusaurus start ([@lanegoolsby](https://github.com/lanegoolsby))\\n- `docusaurus-theme-classic`\\n - [#7357](https://github.com/facebook/docusaurus/pull/7357) feat(theme-classic): allow className as option for type: \\"search\\" ([@JPeer264](https://github.com/JPeer264))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7362](https://github.com/facebook/docusaurus/pull/7362) fix: always emit SEO title + og:title meta ([@charleskorn](https://github.com/charleskorn))\\n - [#7453](https://github.com/facebook/docusaurus/pull/7453) fix(core): avoid using logger and fs.readJSON in SSR ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7369](https://github.com/facebook/docusaurus/pull/7369) fix(cli): output correct path when swizzling bare-file component in subfolder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7360](https://github.com/facebook/docusaurus/pull/7360) fix(core): allow githubPort in config validation ([@mhughes2k](https://github.com/mhughes2k))\\n- `docusaurus-plugin-google-gtag`\\n - [#7424](https://github.com/facebook/docusaurus/pull/7424) fix(gtag): send the newly rendered page\'s title instead of the old one\'s ([@ori-shalom](https://github.com/ori-shalom))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#7507](https://github.com/facebook/docusaurus/pull/7507) fix(create-docusaurus): potential security issue with command injection ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#7492](https://github.com/facebook/docusaurus/pull/7492) fix(core): always treat error boundary fallback as a callback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7438](https://github.com/facebook/docusaurus/pull/7438) fix(theme-classic): allow nested task lists to preserve the indent ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7430](https://github.com/facebook/docusaurus/pull/7430) fix(theme-classic): consistently apply the right active class name for all navbar items ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7411](https://github.com/facebook/docusaurus/pull/7411) fix(theme-classic): autocollapse sidebar categories when navigating with paginator ([@pranabdas](https://github.com/pranabdas))\\n - [#7363](https://github.com/facebook/docusaurus/pull/7363) fix(theme-classic): resolve customCss from site dir ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7464](https://github.com/facebook/docusaurus/pull/7464) fix(utils): fix Markdown link replacement when link text is same as href ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7458](https://github.com/facebook/docusaurus/pull/7458) fix(utils): avoid replacing Markdown links missing the directly next link ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#7392](https://github.com/facebook/docusaurus/pull/7392) fix(mdx-loader): use React.Fragment as fragment factory ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7385](https://github.com/facebook/docusaurus/pull/7385) fix(content-docs): restore functionality when a category only has index page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-translations`\\n - [#7493](https://github.com/facebook/docusaurus/pull/7493) chore(theme-translations): complete French translations ([@forresst](https://github.com/forresst))\\n - [#7474](https://github.com/facebook/docusaurus/pull/7474) chore(theme-translations): complete zh translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7400](https://github.com/facebook/docusaurus/pull/7400) chore(theme-translations): complete Farsi translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- `docusaurus`\\n - [#7499](https://github.com/facebook/docusaurus/pull/7499) fix: avoid printing period after localhost URL ([@Zamiell](https://github.com/Zamiell))\\n- `create-docusaurus`\\n - [#7374](https://github.com/facebook/docusaurus/pull/7374) refactor(create): clean up logic when prompting for unspecified arguments ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7503](https://github.com/facebook/docusaurus/pull/7503) docs: document MDXComponents scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7497](https://github.com/facebook/docusaurus/pull/7497) docs: link every reference of types in API table to the type definition ([@Zamiell](https://github.com/Zamiell))\\n- [#7407](https://github.com/facebook/docusaurus/pull/7407) docs: add Azure SWA as deployment option ([@nitya](https://github.com/nitya))\\n- [#7390](https://github.com/facebook/docusaurus/pull/7390) fix(website): use react-lite-youtube-embed for lazy YouTube video ([@matkoch](https://github.com/matkoch))\\n\\n## :wrench: Maintenance\\n\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#7477](https://github.com/facebook/docusaurus/pull/7477) refactor: fix a lot of errors in type-aware linting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7447](https://github.com/facebook/docusaurus/pull/7447) refactor(theme-classic): migrate to tsc for build ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `stylelint-copyright`\\n - [#7441](https://github.com/facebook/docusaurus/pull/7441) refactor(stylelint-copyright): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`\\n - [#7440](https://github.com/facebook/docusaurus/pull/7440) refactor(cssnano-preset): migrate to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `eslint-plugin`, `lqip-loader`\\n - [#7437](https://github.com/facebook/docusaurus/pull/7437) refactor: use TS project references instead of running tsc multiple times ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#7421](https://github.com/facebook/docusaurus/pull/7421) refactor(pwa): migrate client modules to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7415](https://github.com/facebook/docusaurus/pull/7415) refactor(theme-classic): always collocate stylesheets with components in one folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7405](https://github.com/facebook/docusaurus/pull/7405) refactor(core): properly code-split NotFound page ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 23\\n\\n- Akara ([@Messiahhh](https://github.com/Messiahhh))\\n- Benjamin Diolez ([@BenDz](https://github.com/BenDz))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- Designatory ([@Designatory](https://github.com/Designatory))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ggicci ([@ggicci](https://github.com/ggicci))\\n- James ([@Zamiell](https://github.com/Zamiell))\\n- Jan Peer St\xf6cklmair ([@JPeer264](https://github.com/JPeer264))\\n- Jeremy ([@jrmyw92](https://github.com/jrmyw92))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Junjie ([@junjieweb](https://github.com/junjieweb))\\n- Lane Goolsby ([@lanegoolsby](https://github.com/lanegoolsby))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matthias Koch ([@matkoch](https://github.com/matkoch))\\n- Michael Hughes ([@mhughes2k](https://github.com/mhughes2k))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Nitya Narasimhan ([@nitya](https://github.com/nitya))\\n- Oluwatobi Sofela ([@oluwatobiss](https://github.com/oluwatobiss))\\n- Ori Shalom ([@ori-shalom](https://github.com/ori-shalom))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Rui Peres ([@RuiAAPeres](https://github.com/RuiAAPeres))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u51f1\u6069 Kane ([@Gary50613](https://github.com/Gary50613))"},{"id":"/2.0.0-beta.20","metadata":{"permalink":"/changelog/2.0.0-beta.20","source":"@site/changelog/source/2.0.0-beta.20.md","title":"2.0.0-beta.20","description":"Bug Fix","date":"2022-05-05T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Steven Hicks","alias":"pepopowitz","url":"https://github.com/pepopowitz","imageURL":"https://github.com/pepopowitz.png","key":"pepopowitz"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"Sergey Gromkov","alias":"sgromkov","url":"https://github.com/sgromkov","imageURL":"https://github.com/sgromkov.png","key":"sgromkov"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-05T20:00","authors":["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21"},"nextItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"listPageLink":"/changelog/"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#7342](https://github.com/facebook/docusaurus/pull/7342) fix: avoid flash of page scrolling to top on refresh ([@slorber](https://github.com/slorber))\\n - [#7329](https://github.com/facebook/docusaurus/pull/7329) fix(core): inject docusaurus version into SSR as local ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`\\n - [#7341](https://github.com/facebook/docusaurus/pull/7341) fix(theme-classic): properly highlight code block line numbers ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#7334](https://github.com/facebook/docusaurus/pull/7334) feat(website): make canary release page display actual canary version name ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7343](https://github.com/facebook/docusaurus/pull/7343) docs: add page for create-docusaurus API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7340](https://github.com/facebook/docusaurus/pull/7340) docs: add Yandex Metrika plugin to community plugins ([@sgromkov](https://github.com/sgromkov))\\n- [#7336](https://github.com/facebook/docusaurus/pull/7336) fix(website): fix multiple accessibility issues around color contrast ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#7327](https://github.com/facebook/docusaurus/pull/7327) docs: add clarity to versioning behavior ([@pepopowitz](https://github.com/pepopowitz))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sergey Gromkov ([@sgromkov](https://github.com/sgromkov))\\n- Steven Hicks ([@pepopowitz](https://github.com/pepopowitz))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.19","metadata":{"permalink":"/changelog/2.0.0-beta.19","source":"@site/changelog/source/2.0.0-beta.19.md","title":"2.0.0-beta.19","description":"New Feature","date":"2022-05-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aaron Nwabuoku","alias":"aerovulpe","url":"https://github.com/aerovulpe","imageURL":"https://github.com/aerovulpe.png","key":"aerovulpe"},{"name":"AkiraVoid","alias":"AkiraVoid","url":"https://github.com/AkiraVoid","imageURL":"https://github.com/AkiraVoid.png","key":"AkiraVoid"},{"name":"Andrew Lyons","alias":"andrewnicols","url":"https://github.com/andrewnicols","imageURL":"https://github.com/andrewnicols.png","key":"andrewnicols"},{"name":"apq","alias":"AntonPalmqvist","url":"https://github.com/AntonPalmqvist","imageURL":"https://github.com/AntonPalmqvist.png","key":"AntonPalmqvist"},{"name":"ApsarasX","alias":"ApsarasX","url":"https://github.com/ApsarasX","imageURL":"https://github.com/ApsarasX.png","key":"ApsarasX"},{"name":"chelproc","alias":"chelproc","url":"https://github.com/chelproc","imageURL":"https://github.com/chelproc.png","key":"chelproc"},{"name":"Viktor Chernodub","alias":"chernodub","url":"https://github.com/chernodub","imageURL":"https://github.com/chernodub.png","key":"chernodub"},{"name":"curatorcat.pcc.eth","alias":"CuratorCat","url":"https://github.com/CuratorCat","imageURL":"https://github.com/CuratorCat.png","key":"CuratorCat"},{"name":"Cwen Yin","alias":"cwen0","url":"https://github.com/cwen0","imageURL":"https://github.com/cwen0.png","key":"cwen0"},{"name":"Fusang\u2740","alias":"cxOrz","url":"https://github.com/cxOrz","imageURL":"https://github.com/cxOrz.png","key":"cxOrz"},{"name":"Dan Roscigno","alias":"DanRoscigno","url":"https://github.com/DanRoscigno","imageURL":"https://github.com/DanRoscigno.png","key":"DanRoscigno"},{"name":"Andrei Canta","alias":"deiucanta","url":"https://github.com/deiucanta","imageURL":"https://github.com/deiucanta.png","key":"deiucanta"},{"name":"deployn","alias":"deployn","url":"https://github.com/deployn","imageURL":"https://github.com/deployn.png","key":"deployn"},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron"},{"name":"Chinazaekpere Ngubo","alias":"dr-ngubo","url":"https://github.com/dr-ngubo","imageURL":"https://github.com/dr-ngubo.png","key":"dr-ngubo"},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam"},{"name":"Elias Papavasileiou","alias":"elias-pap","url":"https://github.com/elias-pap","imageURL":"https://github.com/elias-pap.png","key":"elias-pap"},{"name":"Indermohan Singh","alias":"imsingh","url":"https://github.com/imsingh","imageURL":"https://github.com/imsingh.png","key":"imsingh"},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven"},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener"},{"name":"JMW","alias":"JohnnyMcWeed","url":"https://github.com/JohnnyMcWeed","imageURL":"https://github.com/JohnnyMcWeed.png","key":"JohnnyMcWeed"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques"},{"name":"kgolubic","alias":"kgolubic","url":"https://github.com/kgolubic","imageURL":"https://github.com/kgolubic.png","key":"kgolubic"},{"name":"loic","alias":"layerzzzio","url":"https://github.com/layerzzzio","imageURL":"https://github.com/layerzzzio.png","key":"layerzzzio"},{"name":"Leedom","alias":"leedom92","url":"https://github.com/leedom92","imageURL":"https://github.com/leedom92.png","key":"leedom92"},{"name":"Martin Blom","alias":"LeviticusMB","url":"https://github.com/LeviticusMB","imageURL":"https://github.com/LeviticusMB.png","key":"LeviticusMB"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach"},{"name":"Karl Ward","alias":"mjau-mjau","url":"https://github.com/mjau-mjau","imageURL":"https://github.com/mjau-mjau.png","key":"mjau-mjau"},{"name":"mehdim","alias":"mxhdx","url":"https://github.com/mxhdx","imageURL":"https://github.com/mxhdx.png","key":"mxhdx"},{"name":"Chau Tran","alias":"nartc","url":"https://github.com/nartc","imageURL":"https://github.com/nartc.png","key":"nartc"},{"name":"Naveen","alias":"naveensrinivasan","url":"https://github.com/naveensrinivasan","imageURL":"https://github.com/naveensrinivasan.png","key":"naveensrinivasan"},{"name":"Pablo Cordon","alias":"pcordon","url":"https://github.com/pcordon","imageURL":"https://github.com/pcordon.png","key":"pcordon"},{"name":"Lenz Weber-Tronic","alias":"phryneas","url":"https://github.com/phryneas","imageURL":"https://github.com/phryneas.png","key":"phryneas"},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles"},{"name":"redhat123456","alias":"redhat123456","url":"https://github.com/redhat123456","imageURL":"https://github.com/redhat123456.png","key":"redhat123456"},{"name":"rev","alias":"rev4324","url":"https://github.com/rev4324","imageURL":"https://github.com/rev4324.png","key":"rev4324"},{"name":"Zac A","alias":"sandypockets","url":"https://github.com/sandypockets","imageURL":"https://github.com/sandypockets.png","key":"sandypockets"},{"name":"czhen","alias":"shczhen","url":"https://github.com/shczhen","imageURL":"https://github.com/shczhen.png","key":"shczhen"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Evan","alias":"sulu5890","url":"https://github.com/sulu5890","imageURL":"https://github.com/sulu5890.png","key":"sulu5890"},{"name":"surendran82","alias":"surendran82","url":"https://github.com/surendran82","imageURL":"https://github.com/surendran82.png","key":"surendran82"},{"name":"svix-ken","alias":"svix-ken","url":"https://github.com/svix-ken","imageURL":"https://github.com/svix-ken.png","key":"svix-ken"},{"name":"sykp241095","alias":"sykp241095","url":"https://github.com/sykp241095","imageURL":"https://github.com/sykp241095.png","key":"sykp241095"},{"name":"Qi Zhang","alias":"zzzhangqi","url":"https://github.com/zzzhangqi","imageURL":"https://github.com/zzzhangqi.png","key":"zzzhangqi"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-05-04T20:00","authors":["aerovulpe","AkiraVoid","andrewnicols","AntonPalmqvist","ApsarasX","chelproc","chernodub","CuratorCat","cwen0","cxOrz","DanRoscigno","deiucanta","deployn","Dr-Electron","dr-ngubo","duanwilliam","elias-pap","imsingh","jeffreyaven","jodyheavener","JohnnyMcWeed","johnnyreilly","Josh-Cena","kaycebasques","kgolubic","layerzzzio","leedom92","LeviticusMB","lex111","lukasbach","mjau-mjau","mxhdx","nartc","naveensrinivasan","pcordon","phryneas","Pierre-Gilles","redhat123456","rev4324","sandypockets","shczhen","slorber","sulu5890","surendran82","svix-ken","sykp241095","zzzhangqi"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20"},"nextItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7178](https://github.com/facebook/docusaurus/pull/7178) feat(theme-classic): extensible code block magic comment system ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7007](https://github.com/facebook/docusaurus/pull/7007) feat(theme-classic): code block showLineNumbers ([@lex111](https://github.com/lex111))\\n - [#7012](https://github.com/facebook/docusaurus/pull/7012) feat(theme-classic): show blog sidebar on mobile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`, `eslint-plugin`\\n - [#7206](https://github.com/facebook/docusaurus/pull/7206) feat: Docusaurus ESLint plugin to enforce best Docusaurus practices ([@elias-pap](https://github.com/elias-pap))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7231](https://github.com/facebook/docusaurus/pull/7231) feat: allow custom navbarItem types to pass through validation ([@slorber](https://github.com/slorber))\\n - [#7058](https://github.com/facebook/docusaurus/pull/7058) feat(theme-classic): new \'html\' type navbar item ([@lex111](https://github.com/lex111))\\n - [#7079](https://github.com/facebook/docusaurus/pull/7079) feat: allow using pure HTML as label in navbar links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`\\n - [#7036](https://github.com/facebook/docusaurus/pull/7036) feat(theme-classic): toggle code wrap button ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6457](https://github.com/facebook/docusaurus/pull/6457) feat(content-docs): draft docs excluded from build & sidebars ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6430](https://github.com/facebook/docusaurus/pull/6430) feat: allow setting calendar for i18n date formatting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#7083](https://github.com/facebook/docusaurus/pull/7083) feat(core): fail-safe global data fetching ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7106](https://github.com/facebook/docusaurus/pull/7106) feat(content-docs): make docs:version command work on localized docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7082](https://github.com/facebook/docusaurus/pull/7082) feat(core): allow plugins to declare custom route context ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7124](https://github.com/facebook/docusaurus/pull/7124) feat(core): allow plugin/preset config to contain false/null ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils`\\n - [#6979](https://github.com/facebook/docusaurus/pull/6979) feat(sitemap): add ignorePatterns option ([@ApsarasX](https://github.com/ApsarasX))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#7257](https://github.com/facebook/docusaurus/pull/7257) refactor: remove long-deprecated routesLoaded lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7277](https://github.com/facebook/docusaurus/pull/7277) refactor(theme-classic): move all sidebar-related config under themeConfig.docs.sidebar ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6732](https://github.com/facebook/docusaurus/pull/6732) feat(core): rework client modules lifecycles, officially make API public ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#7117](https://github.com/facebook/docusaurus/pull/7117) refactor(content-{blog,docs}): unify handling of tags ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#7304](https://github.com/facebook/docusaurus/pull/7304) fix(theme-classic): remove breadcrumb items without href from microdata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7179](https://github.com/facebook/docusaurus/pull/7179) fix(theme-classic): do not add microdata item prop to trailing breadcrumb ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7173](https://github.com/facebook/docusaurus/pull/7173) fix(theme-classic): admonition title: disable text-transform on inline code blocks ([@chelproc](https://github.com/chelproc))\\n - [#7048](https://github.com/facebook/docusaurus/pull/7048) fix(theme-classic): add caret for dropdown on mobile ([@lex111](https://github.com/lex111))\\n - [#7025](https://github.com/facebook/docusaurus/pull/7025) fix: make docs page wrapper take full height ([@lex111](https://github.com/lex111))\\n - [#7013](https://github.com/facebook/docusaurus/pull/7013) fix(theme-classic): adjust shadow on code block ([@chernodub](https://github.com/chernodub))\\n - [#7015](https://github.com/facebook/docusaurus/pull/7015) fix(theme-classic): do not add caret for non-collapsible categories ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7294](https://github.com/facebook/docusaurus/pull/7294) fix(\\\\*): make TypeScript realize that each plugin package has a default export ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#7285](https://github.com/facebook/docusaurus/pull/7285) fix(core): allow empty static directories ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7180](https://github.com/facebook/docusaurus/pull/7180) fix: pass pollOptions to webpack ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n - [#7184](https://github.com/facebook/docusaurus/pull/7184) fix(core): prevent 404 when accessing /page.html ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7225](https://github.com/facebook/docusaurus/pull/7225) fix: allow swizzling a component\'s parent folder ([@slorber](https://github.com/slorber))\\n - [#7066](https://github.com/facebook/docusaurus/pull/7066) fix(core): all plugin lifecycles should receive translated content ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7233](https://github.com/facebook/docusaurus/pull/7233) fix(content-docs): make category index text translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#7200](https://github.com/facebook/docusaurus/pull/7200) fix(theme-common): do not persist color mode for OS-triggered changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7057](https://github.com/facebook/docusaurus/pull/7057) fix(theme-common): use native scrolling when smooth behavior set in CSS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7033](https://github.com/facebook/docusaurus/pull/7033) fix(theme): only parse HTML- and JSX-style comments in MD code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#7212](https://github.com/facebook/docusaurus/pull/7212) fix(content-blog): make footnote reference DOM ID unique on post listing page ([@AkiraVoid](https://github.com/AkiraVoid))\\n- `docusaurus-utils`, `docusaurus`\\n - [#7187](https://github.com/facebook/docusaurus/pull/7187) fix(core): handle case where package.json is not available at CWD ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#7222](https://github.com/facebook/docusaurus/pull/7222) fix(theme-translations): fix invalid pluralization in cs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7166](https://github.com/facebook/docusaurus/pull/7166) fix(theme-translations): always try all possible locale resolutions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#7164](https://github.com/facebook/docusaurus/pull/7164) fix: adjust spacing for custom search properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-types`, `docusaurus`\\n - [#7143](https://github.com/facebook/docusaurus/pull/7143) fix(sitemap): exclude pages with robots noindex from sitemap ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-types`\\n - [#7078](https://github.com/facebook/docusaurus/pull/7078) fix(create): install types for JS template as well ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#7043](https://github.com/facebook/docusaurus/pull/7043) fix(utils): parse Markdown headings with CRLF line break ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7023](https://github.com/facebook/docusaurus/pull/7023) refactor: fix a few places of path handling ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#7014](https://github.com/facebook/docusaurus/pull/7014) fix(types): declare history and react-loadable as dependencies ([@sulu5890](https://github.com/sulu5890))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#7299](https://github.com/facebook/docusaurus/pull/7299) refactor: minor improvements for breadcrumbs ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#7290](https://github.com/facebook/docusaurus/pull/7290) refactor(create): add i18n config in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7286](https://github.com/facebook/docusaurus/pull/7286) refactor(create): update screenshots in quick start tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7223](https://github.com/facebook/docusaurus/pull/7223) refactor: use generated-index in init templates ([@slorber](https://github.com/slorber))\\n - [#7118](https://github.com/facebook/docusaurus/pull/7118) refactor(create): mention that the edit links can be removed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#7306](https://github.com/facebook/docusaurus/pull/7306) chore: upgrade Infima to alpha.39 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#7291](https://github.com/facebook/docusaurus/pull/7291) feat(types): JSDoc for docusaurus config fields ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7267](https://github.com/facebook/docusaurus/pull/7267) fix(theme-common): allow details to not provide a summary ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7172](https://github.com/facebook/docusaurus/pull/7172) refactor: control base styling of code blocks via CSS vars ([@lex111](https://github.com/lex111))\\n - [#7129](https://github.com/facebook/docusaurus/pull/7129) refactor(theme-classic): fix a few margin inconsistencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7244](https://github.com/facebook/docusaurus/pull/7244) refactor: semantic markup improvement, fix validation warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7183](https://github.com/facebook/docusaurus/pull/7183) refactor: use SVG icon for home breadcrumb ([@Dr-Electron](https://github.com/Dr-Electron))\\n - [#7139](https://github.com/facebook/docusaurus/pull/7139) fix: proper spacing between generated card items on mobiles ([@lex111](https://github.com/lex111))\\n - [#7134](https://github.com/facebook/docusaurus/pull/7134) fix(theme-classic): fix docs sidebar layout shifts when expanding categories ([@slorber](https://github.com/slorber))\\n - [#7068](https://github.com/facebook/docusaurus/pull/7068) refactor(theme-classic): blog mobile secondary menu use consistent styles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7004](https://github.com/facebook/docusaurus/pull/7004) fix(theme-classic): shrink title size on mobile ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-translations`\\n - [#7214](https://github.com/facebook/docusaurus/pull/7214) chore(theme-translations): complete Polish translations ([@rev4324](https://github.com/rev4324))\\n - [#7031](https://github.com/facebook/docusaurus/pull/7031) chore(theme-translations): complete German translations ([@deployn](https://github.com/deployn))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#7176](https://github.com/facebook/docusaurus/pull/7176) refactor: customize code block line highlight color via CSS var ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#7218](https://github.com/facebook/docusaurus/pull/7218) fix(cli): always show error stack to unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7142](https://github.com/facebook/docusaurus/pull/7142) refactor(core): lower timeout before rendering progress bar to 200ms ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7103](https://github.com/facebook/docusaurus/pull/7103) fix(core): preserve Interpolate children semantics ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7029](https://github.com/facebook/docusaurus/pull/7029) refactor: console output improvements ([@lex111](https://github.com/lex111))\\n - [#7017](https://github.com/facebook/docusaurus/pull/7017) refactor: remove copyright comment from swizzled components ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#7148](https://github.com/facebook/docusaurus/pull/7148) feat(preset-classic, content-docs/client): JSDoc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#7122](https://github.com/facebook/docusaurus/pull/7122) feat(preset-classic): exclude debug plugin routes from sitemap ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#7113](https://github.com/facebook/docusaurus/pull/7113) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#7080](https://github.com/facebook/docusaurus/pull/7080) refactor: replace non-prop interface with type; allow plugin lifecycles to have sync type ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#7019](https://github.com/facebook/docusaurus/pull/7019) feat(logger): new \\"url\\" format, add double quotes around paths ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7006](https://github.com/facebook/docusaurus/pull/7006) refactor: split and cleanup theme/DocPage ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#7005](https://github.com/facebook/docusaurus/pull/7005) refactor: split DocSidebarItem by item type ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-logger`\\n - [#7305](https://github.com/facebook/docusaurus/pull/7305) docs: update docs for logger, add API docs to website ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#7284](https://github.com/facebook/docusaurus/pull/7284) docs: add a paragraph about SSR as an optimization technique ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7278](https://github.com/facebook/docusaurus/pull/7278) docs: enhance docs about Markdown TOC and metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7271](https://github.com/facebook/docusaurus/pull/7271) docs: specify Node version requirement to a minor ([@DanRoscigno](https://github.com/DanRoscigno))\\n - [#7252](https://github.com/facebook/docusaurus/pull/7252) docs: update gtag docs to reflect what a GA4 tag looks like ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#7240](https://github.com/facebook/docusaurus/pull/7240) docs: add PCC Archive site to showcase ([@CuratorCat](https://github.com/CuratorCat))\\n - [#7239](https://github.com/facebook/docusaurus/pull/7239) docs: add Chaos mesh site to showcase ([@cwen0](https://github.com/cwen0))\\n - [#7235](https://github.com/facebook/docusaurus/pull/7235) docs: add TiDB community books to showcase ([@shczhen](https://github.com/shczhen))\\n - [#7236](https://github.com/facebook/docusaurus/pull/7236) docs: add documentation about pluralization ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7230](https://github.com/facebook/docusaurus/pull/7230) docs: add OSS Insight to showcase ([@sykp241095](https://github.com/sykp241095))\\n - [#7208](https://github.com/facebook/docusaurus/pull/7208) docs: remove mention of \\"template\\" from README installation guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7159](https://github.com/facebook/docusaurus/pull/7159) docs: explain more clearly the purpose of a ref sidebar type ([@andrewnicols](https://github.com/andrewnicols))\\n - [#7126](https://github.com/facebook/docusaurus/pull/7126) docs: multiple documentation improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7123](https://github.com/facebook/docusaurus/pull/7123) refactor(showcase): enforce descriptions with maximum length of 120 characters ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7026](https://github.com/facebook/docusaurus/pull/7026) docs: correct plugin example filename ([@mxhdx](https://github.com/mxhdx))\\n - [#7110](https://github.com/facebook/docusaurus/pull/7110) docs: add a note about additional languages needing to be Prism component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6746](https://github.com/facebook/docusaurus/pull/6746) fix(website): lazy-load YT iframe ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7061](https://github.com/facebook/docusaurus/pull/7061) docs: add docusaurus-plugin-typedoc to resources ([@nartc](https://github.com/nartc))\\n - [#7059](https://github.com/facebook/docusaurus/pull/7059) docs: add firelordjs to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7050](https://github.com/facebook/docusaurus/pull/7050) docs: add import React statement in JSX file example ([@kaycebasques](https://github.com/kaycebasques))\\n - [#7022](https://github.com/facebook/docusaurus/pull/7022) docs: add Easypanel to showcase ([@deiucanta](https://github.com/deiucanta))\\n - [#7016](https://github.com/facebook/docusaurus/pull/7016) docs: consistently use sidebars.js filename ([@leedom92](https://github.com/leedom92))\\n - [#7020](https://github.com/facebook/docusaurus/pull/7020) docs: add Divine WSF and Ghostly to showcase ([@LeviticusMB](https://github.com/LeviticusMB))\\n - [#7000](https://github.com/facebook/docusaurus/pull/7000) docs: remove unnecessary semicolon ([@imsingh](https://github.com/imsingh))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#7248](https://github.com/facebook/docusaurus/pull/7248) refactor: normalize Markdown linkification behavior, elaborate in documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#7081](https://github.com/facebook/docusaurus/pull/7081) docs: fix some casing inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :wrench: Maintenance\\n\\n- Other\\n - [#7309](https://github.com/facebook/docusaurus/pull/7309) chore: use \\"Maintenance\\" instead of \\"Internal\\" in changelog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7300](https://github.com/facebook/docusaurus/pull/7300) misc: check doc page by Lighthouse CI ([@lex111](https://github.com/lex111))\\n - [#7266](https://github.com/facebook/docusaurus/pull/7266) misc: add links section to PR template ([@slorber](https://github.com/slorber))\\n - [#7224](https://github.com/facebook/docusaurus/pull/7224) chore: GitHub Actions cancel-in-progress ([@slorber](https://github.com/slorber))\\n - [#7216](https://github.com/facebook/docusaurus/pull/7216) chore: remove netlify-cli from devDependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7211](https://github.com/facebook/docusaurus/pull/7211) chore: replace node 17 with 18 in CI matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7168](https://github.com/facebook/docusaurus/pull/7168) misc: add CI actions/dependency-review-action for security ([@slorber](https://github.com/slorber))\\n - [#6984](https://github.com/facebook/docusaurus/pull/6984) misc: pin actions to a full-length commit SHA ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n - [#7002](https://github.com/facebook/docusaurus/pull/7002) chore: regen examples for 2.0 beta.18 ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-remark-plugin-npm2yarn`\\n - [#7295](https://github.com/facebook/docusaurus/pull/7295) refactor: use export = syntax for Node utility packages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7293](https://github.com/facebook/docusaurus/pull/7293) refactor(types): move non-core, non-public types out of the types package ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#7292](https://github.com/facebook/docusaurus/pull/7292) refactor(core): collocate CLI commands and their option types ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7084](https://github.com/facebook/docusaurus/pull/7084) refactor(core): code cleanup ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#7282](https://github.com/facebook/docusaurus/pull/7282) refactor(core): prefetch/preload refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#7273](https://github.com/facebook/docusaurus/pull/7273) refactor(theme-classic): multiple re-arrangements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7268](https://github.com/facebook/docusaurus/pull/7268) refactor(theme-classic): DocPage theme refactors polish ([@slorber](https://github.com/slorber))\\n - [#7269](https://github.com/facebook/docusaurus/pull/7269) refactor: extract useSkipToContent() ([@slorber](https://github.com/slorber))\\n - [#7175](https://github.com/facebook/docusaurus/pull/7175) refactor(theme-classic): split CodeBlock ([@slorber](https://github.com/slorber))\\n - [#7067](https://github.com/facebook/docusaurus/pull/7067) refactor(theme-classic): extract doc-related navbar items\' logic to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7021](https://github.com/facebook/docusaurus/pull/7021) refactor(theme): extract plumbing code of BTT button into theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#7270](https://github.com/facebook/docusaurus/pull/7270) refactor(theme-classic): refactor TOC-related theme components ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#7220](https://github.com/facebook/docusaurus/pull/7220) refactor(cli): normalize the application of default option values ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7141](https://github.com/facebook/docusaurus/pull/7141) refactor(core): minor PendingNavigation refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#7243](https://github.com/facebook/docusaurus/pull/7243) chore: upgrade Jest to 28; add GitHub-actions reporter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#7140](https://github.com/facebook/docusaurus/pull/7140) refactor(content-docs): split version handling into several files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#7194](https://github.com/facebook/docusaurus/pull/7194) fix: fix a few internal declaration semantic errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-theme-translations`, `docusaurus`\\n - [#7186](https://github.com/facebook/docusaurus/pull/7186) refactor: prefer fs.readJSON over readFile.then(JSON.parse) ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#7145](https://github.com/facebook/docusaurus/pull/7145) refactor: unify how MDX content types are represented ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#7138](https://github.com/facebook/docusaurus/pull/7138) chore: upgrade dependencies + upgrade React types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#7131](https://github.com/facebook/docusaurus/pull/7131) chore: disable string escaping in snapshots ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#7054](https://github.com/facebook/docusaurus/pull/7054) refactor(core): refactor routes generation logic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#7042](https://github.com/facebook/docusaurus/pull/7042) refactor(core): reorganize files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#7037](https://github.com/facebook/docusaurus/pull/7037) refactor(core): reorganize functions ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#7027](https://github.com/facebook/docusaurus/pull/7027) refactor(content-docs): deduplicate types, JSDoc for some APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`\\n - [#7085](https://github.com/facebook/docusaurus/pull/7085) refactor: mark a few client-side packages as side-effect-free ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#4997](https://github.com/facebook/docusaurus/pull/4997) perf(mdx-loader): cache mdx/remark compiler instances ([@phryneas](https://github.com/phryneas))\\n\\n## Committers: 47\\n\\n- Aaron Nwabuoku ([@aerovulpe](https://github.com/aerovulpe))\\n- AkiraVoid ([@AkiraVoid](https://github.com/AkiraVoid))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrei Canta ([@deiucanta](https://github.com/deiucanta))\\n- Andrew Lyons ([@andrewnicols](https://github.com/andrewnicols))\\n- ApsarasX ([@ApsarasX](https://github.com/ApsarasX))\\n- Chau Tran ([@nartc](https://github.com/nartc))\\n- Chinazaekpere Ngubo ([@dr-ngubo](https://github.com/dr-ngubo))\\n- Cwen Yin ([@cwen0](https://github.com/cwen0))\\n- Dan Roscigno ([@DanRoscigno](https://github.com/DanRoscigno))\\n- Elias Papavasileiou ([@elias-pap](https://github.com/elias-pap))\\n- Evan ([@sulu5890](https://github.com/sulu5890))\\n- Fusang\u2740 ([@cxOrz](https://github.com/cxOrz))\\n- Indermohan Singh ([@imsingh](https://github.com/imsingh))\\n- JMW ([@JohnnyMcWeed](https://github.com/JohnnyMcWeed))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Karl Ward ([@mjau-mjau](https://github.com/mjau-mjau))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Leedom ([@leedom92](https://github.com/leedom92))\\n- Lenz Weber-Tronic ([@phryneas](https://github.com/phryneas))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Martin Blom ([@LeviticusMB](https://github.com/LeviticusMB))\\n- Naveen ([@naveensrinivasan](https://github.com/naveensrinivasan))\\n- Pablo Cordon ([@pcordon](https://github.com/pcordon))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Qi Zhang ([@zzzhangqi](https://github.com/zzzhangqi))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Viktor Chernodub ([@chernodub](https://github.com/chernodub))\\n- Zac A ([@sandypockets](https://github.com/sandypockets))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@chelproc](https://github.com/chelproc)\\n- [@deployn](https://github.com/deployn)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@kgolubic](https://github.com/kgolubic)\\n- [@redhat123456](https://github.com/redhat123456)\\n- [@surendran82](https://github.com/surendran82)\\n- [@svix-ken](https://github.com/svix-ken)\\n- apq ([@AntonPalmqvist](https://github.com/AntonPalmqvist))\\n- curatorcat.pcc.eth ([@CuratorCat](https://github.com/CuratorCat))\\n- czhen ([@shczhen](https://github.com/shczhen))\\n- loic ([@layerzzzio](https://github.com/layerzzzio))\\n- mehdim ([@mxhdx](https://github.com/mxhdx))\\n- rev ([@rev4324](https://github.com/rev4324))\\n- sykp241095 ([@sykp241095](https://github.com/sykp241095))"},{"id":"/2.0.0-beta.18","metadata":{"permalink":"/changelog/2.0.0-beta.18","source":"@site/changelog/source/2.0.0-beta.18.md","title":"2.0.0-beta.18","description":"New Feature","date":"2022-03-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afonso Jorge Ramos","alias":"afonsojramos","url":"https://github.com/afonsojramos","imageURL":"https://github.com/afonsojramos.png","key":"afonsojramos"},{"name":"Alessandro Festa","alias":"alefesta","url":"https://github.com/alefesta","imageURL":"https://github.com/alefesta.png","key":"alefesta"},{"name":"Alois Klink","alias":"aloisklink","url":"https://github.com/aloisklink","imageURL":"https://github.com/aloisklink.png","key":"aloisklink"},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn"},{"name":"Billy Chan","alias":"billy1624","url":"https://github.com/billy1624","imageURL":"https://github.com/billy1624.png","key":"billy1624"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie"},{"name":"Bugo","alias":"dragomano","url":"https://github.com/dragomano","imageURL":"https://github.com/dragomano.png","key":"dragomano"},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs"},{"name":"Kyohei Fukuda","alias":"hand-dot","url":"https://github.com/hand-dot","imageURL":"https://github.com/hand-dot.png","key":"hand-dot"},{"name":"WonChul Heo","alias":"heowc","url":"https://github.com/heowc","imageURL":"https://github.com/heowc.png","key":"heowc"},{"name":"Jadon N","alias":"jadonn","url":"https://github.com/jadonn","imageURL":"https://github.com/jadonn.png","key":"jadonn"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Roberto Vidal","alias":"jrvidal","url":"https://github.com/jrvidal","imageURL":"https://github.com/jrvidal.png","key":"jrvidal"},{"name":"Kayce Basques","alias":"kaycebasques","url":"https://github.com/kaycebasques","imageURL":"https://github.com/kaycebasques.png","key":"kaycebasques"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun"},{"name":"nate contino","alias":"nathan-contino-mongo","url":"https://github.com/nathan-contino-mongo","imageURL":"https://github.com/nathan-contino-mongo.png","key":"nathan-contino-mongo"},{"name":"Odarpi","alias":"odarpi","url":"https://github.com/odarpi","imageURL":"https://github.com/odarpi.png","key":"odarpi"},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123"},{"name":"Pawel Kowaluk","alias":"pkowaluk","url":"https://github.com/pkowaluk","imageURL":"https://github.com/pkowaluk.png","key":"pkowaluk"},{"name":"Tsz W. TAM","alias":"rccttwd","url":"https://github.com/rccttwd","imageURL":"https://github.com/rccttwd.png","key":"rccttwd"},{"name":"Sam Gutentag","alias":"samgutentag","url":"https://github.com/samgutentag","imageURL":"https://github.com/samgutentag.png","key":"samgutentag"},{"name":"seladb","alias":"seladb","url":"https://github.com/seladb","imageURL":"https://github.com/seladb.png","key":"seladb"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"tae","alias":"taejs","url":"https://github.com/taejs","imageURL":"https://github.com/taejs.png","key":"taejs"},{"name":"Begula","alias":"vedantmgoyal2009","url":"https://github.com/vedantmgoyal2009","imageURL":"https://github.com/vedantmgoyal2009.png","key":"vedantmgoyal2009"},{"name":"Yorkie Liu","alias":"yorkie","url":"https://github.com/yorkie","imageURL":"https://github.com/yorkie.png","key":"yorkie"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-25T20:00","authors":["afonsojramos","alefesta","aloisklink","arifszn","billy1624","datlechin","DigiPie","dragomano","felipecrs","hand-dot","heowc","jadonn","Josh-Cena","jrvidal","kaycebasques","lex111","moonrailgun","nathan-contino-mongo","odarpi","PatelN123","pkowaluk","rccttwd","samgutentag","seladb","slorber","taejs","vedantmgoyal2009","yorkie"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19"},"nextItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6990](https://github.com/facebook/docusaurus/pull/6990) feat: lazy-load external images + ability to customize image display ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#6933](https://github.com/facebook/docusaurus/pull/6933) feat(core,theme): useRouteContext + HtmlClassNameProvider ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6921](https://github.com/facebook/docusaurus/pull/6921) feat(core): allow plugin lifecycles to return relative paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6697](https://github.com/facebook/docusaurus/pull/6697) feat: add SEO microdata for doc breadcrumbs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6842](https://github.com/facebook/docusaurus/pull/6842) feat(theme-classic): MDXContent wrapper component ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6780](https://github.com/facebook/docusaurus/pull/6780) feat(content-docs): allow custom props through _category_.json ([@taejs](https://github.com/taejs))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#6993](https://github.com/facebook/docusaurus/pull/6993) fix(core): prevent useBaseUrl returning /base/base when on /base ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6936](https://github.com/facebook/docusaurus/pull/6936) fix: remove semicolon from HTML output ([@lex111](https://github.com/lex111))\\n - [#6849](https://github.com/facebook/docusaurus/pull/6849) fix(cli): write-heading-id should not generate colliding slugs when not overwriting ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6983](https://github.com/facebook/docusaurus/pull/6983) fix(search): bump Infima, fix search issue due to broken CSS selector ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils-validation`\\n - [#6977](https://github.com/facebook/docusaurus/pull/6977) fix(validation): allow non-object params to remark/rehype plugins ([@aloisklink](https://github.com/aloisklink))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6973](https://github.com/facebook/docusaurus/pull/6973) fix(content-docs): suppress git error on multiple occurrences ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-blog`\\n - [#6947](https://github.com/facebook/docusaurus/pull/6947) fix(content-blog): only create archive route if there are blog posts ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6918](https://github.com/facebook/docusaurus/pull/6918) fix(content-blog): remove double leading slash in blog-only paginated view ([@heowc](https://github.com/heowc))\\n- `docusaurus-theme-search-algolia`\\n - [#6888](https://github.com/facebook/docusaurus/pull/6888) fix(theme-algolia): declare content-docs as dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6847](https://github.com/facebook/docusaurus/pull/6847) fix: minor Chinese translation fixes ([@rccttwd](https://github.com/rccttwd))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6859](https://github.com/facebook/docusaurus/pull/6859) feat(content-docs): autogenerate category with linked doc metadata as fallback ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6887](https://github.com/facebook/docusaurus/pull/6887) fix(content-docs): give context about sidebar loading failure ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6997](https://github.com/facebook/docusaurus/pull/6997) fix(validation): improve error messages for a few schemas ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6971](https://github.com/facebook/docusaurus/pull/6971) refactor: improve a11y of dropdown menu ([@lex111](https://github.com/lex111))\\n - [#6987](https://github.com/facebook/docusaurus/pull/6987) refactor(theme-classic): cleanup of code blocks ([@lex111](https://github.com/lex111))\\n - [#6950](https://github.com/facebook/docusaurus/pull/6950) refactor(theme-classic): clean up CSS of doc cards ([@lex111](https://github.com/lex111))\\n - [#6994](https://github.com/facebook/docusaurus/pull/6994) refactor: better external link icon positioning ([@lex111](https://github.com/lex111))\\n - [#6989](https://github.com/facebook/docusaurus/pull/6989) refactor: extract MDX components ([@slorber](https://github.com/slorber))\\n - [#6985](https://github.com/facebook/docusaurus/pull/6985) refactor(theme-classic): remove span wrappers from layout links ([@lex111](https://github.com/lex111))\\n - [#6986](https://github.com/facebook/docusaurus/pull/6986) fix(theme-classic): minor code copy button improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6964](https://github.com/facebook/docusaurus/pull/6964) refactor: replace text-based copy code button with icons ([@lex111](https://github.com/lex111))\\n - [#6932](https://github.com/facebook/docusaurus/pull/6932) refactor(theme-classic): little breadcrumbs improvements ([@lex111](https://github.com/lex111))\\n - [#6914](https://github.com/facebook/docusaurus/pull/6914) feat(theme-classic): set aria-expanded on expandable sidebar categories ([@pkowaluk](https://github.com/pkowaluk))\\n - [#6844](https://github.com/facebook/docusaurus/pull/6844) refactor(theme-classic): split sidebar into smaller parts ([@slorber](https://github.com/slorber))\\n - [#6846](https://github.com/facebook/docusaurus/pull/6846) refactor(theme-classic): consistently add span wrapper for layout links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6980](https://github.com/facebook/docusaurus/pull/6980) feat(utils): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6974](https://github.com/facebook/docusaurus/pull/6974) feat(theme-common): JSDoc for all APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6784](https://github.com/facebook/docusaurus/pull/6784) feat(core): allow configureWebpack to return undefined ([@yorkie](https://github.com/yorkie))\\n - [#6941](https://github.com/facebook/docusaurus/pull/6941) refactor(core): improve error message when a page has no default-export ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6878](https://github.com/facebook/docusaurus/pull/6878) fix(core): ensure stable webpack theme aliases sorting ([@jrvidal](https://github.com/jrvidal))\\n - [#6854](https://github.com/facebook/docusaurus/pull/6854) fix(core): fix swizzle legend typo ([@DigiPie](https://github.com/DigiPie))\\n - [#6850](https://github.com/facebook/docusaurus/pull/6850) fix(core): make plugin lifecycles consistently bound to the plugin instance ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6937](https://github.com/facebook/docusaurus/pull/6937) fix(content-docs): warn when files are not tracked ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6925](https://github.com/facebook/docusaurus/pull/6925) refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6895](https://github.com/facebook/docusaurus/pull/6895) refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config ([@slorber](https://github.com/slorber))\\n - [#6930](https://github.com/facebook/docusaurus/pull/6930) refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook ([@lex111](https://github.com/lex111))\\n - [#6894](https://github.com/facebook/docusaurus/pull/6894) refactor(theme-classic): split theme footer into smaller components + swizzle config ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#6929](https://github.com/facebook/docusaurus/pull/6929) refactor(core): minor routes type improvement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`\\n - [#6928](https://github.com/facebook/docusaurus/pull/6928) chore(pwa, sitemap, client-redirects, ideal-image): JSDoc for types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#6922](https://github.com/facebook/docusaurus/pull/6922) refactor(content-blog): clean up type definitions; in-code documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6781](https://github.com/facebook/docusaurus/pull/6781) feat(theme-translations): complete Russian translations ([@dragomano](https://github.com/dragomano))\\n - [#6877](https://github.com/facebook/docusaurus/pull/6877) chore(theme-translations): complete Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-plugin-content-blog`\\n - [#6909](https://github.com/facebook/docusaurus/pull/6909) refactor(content-blog): improve error message of authors map validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6860](https://github.com/facebook/docusaurus/pull/6860) fix(create): load entry file after node version checking ([@taejs](https://github.com/taejs))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6988](https://github.com/facebook/docusaurus/pull/6988) docs: fix example admonition syntax ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6978](https://github.com/facebook/docusaurus/pull/6978) docs: npm run tsc -> npx tsc ([@jadonn](https://github.com/jadonn))\\n - [#6952](https://github.com/facebook/docusaurus/pull/6952) docs: add K3ai to showcase ([@alefesta](https://github.com/alefesta))\\n - [#6948](https://github.com/facebook/docusaurus/pull/6948) docs: add pdfme docs to showcase ([@hand-dot](https://github.com/hand-dot))\\n - [#6943](https://github.com/facebook/docusaurus/pull/6943) docs: add SeaORM docs to showcase ([@billy1624](https://github.com/billy1624))\\n - [#6926](https://github.com/facebook/docusaurus/pull/6926) docs: clarify the usage of slug ([@kaycebasques](https://github.com/kaycebasques))\\n - [#6911](https://github.com/facebook/docusaurus/pull/6911) docs: add Reactive Button site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6904](https://github.com/facebook/docusaurus/pull/6904) docs: update image for digital support services ([@PatelN123](https://github.com/PatelN123))\\n - [#6892](https://github.com/facebook/docusaurus/pull/6892) docs: add EduLinks site to showcase ([@odarpi](https://github.com/odarpi))\\n - [#6889](https://github.com/facebook/docusaurus/pull/6889) docs: editorial fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6883](https://github.com/facebook/docusaurus/pull/6883) docs(cli): add info about development on github codespaces ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n - [#6856](https://github.com/facebook/docusaurus/pull/6856) docs: add Reddit Image Fetcher site to showcase ([@arifszn](https://github.com/arifszn))\\n - [#6875](https://github.com/facebook/docusaurus/pull/6875) docs: update TRPG Engine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#6871](https://github.com/facebook/docusaurus/pull/6871) docs: mark clutch and gulp as open-source ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6862](https://github.com/facebook/docusaurus/pull/6862) docs: update showcase data ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6837](https://github.com/facebook/docusaurus/pull/6837) docs: add PcapPlusPlus to showcase ([@seladb](https://github.com/seladb))\\n - [#6832](https://github.com/facebook/docusaurus/pull/6832) docs: add Spicetify site to showcase ([@afonsojramos](https://github.com/afonsojramos))\\n - [#6830](https://github.com/facebook/docusaurus/pull/6830) docs: simplify imported code blocks syntax ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- `docusaurus-types`\\n - [#6881](https://github.com/facebook/docusaurus/pull/6881) docs: mention configureWebpack devServer return value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6833](https://github.com/facebook/docusaurus/pull/6833) docs: make tutorial code block directly copyable ([@samgutentag](https://github.com/samgutentag))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6995](https://github.com/facebook/docusaurus/pull/6995) refactor: ensure all types are using index signature instead of Record ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-plugin-pwa`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6991](https://github.com/facebook/docusaurus/pull/6991) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `lqip-loader`\\n - [#6992](https://github.com/facebook/docusaurus/pull/6992) refactor(lqip-loader): remove unused palette option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6975](https://github.com/facebook/docusaurus/pull/6975) chore: update static-site-generator-webpack-plugin ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#6967](https://github.com/facebook/docusaurus/pull/6967) chore: publish stylelint-copyright again ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6961](https://github.com/facebook/docusaurus/pull/6961) refactor: unify how validateOptions is handled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`\\n - [#6957](https://github.com/facebook/docusaurus/pull/6957) chore(types): remove querystring from dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`, `docusaurus`\\n - [#6956](https://github.com/facebook/docusaurus/pull/6956) test: improve test coverage; reorder theme-common files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6955](https://github.com/facebook/docusaurus/pull/6955) refactor(core): move browserContext and docusaurusContext out of client exports ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6944](https://github.com/facebook/docusaurus/pull/6944) chore: migrate Jest and website to SWC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6951](https://github.com/facebook/docusaurus/pull/6951) test: fix Windows test for gitUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6931](https://github.com/facebook/docusaurus/pull/6931) chore: tighten ESLint config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`\\n - [#6924](https://github.com/facebook/docusaurus/pull/6924) refactor(client-redirects): migrate validation to validateOptions lifecycle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6916](https://github.com/facebook/docusaurus/pull/6916) chore: upgrade dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6912](https://github.com/facebook/docusaurus/pull/6912) test: improve test coverage; multiple internal refactors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6910](https://github.com/facebook/docusaurus/pull/6910) refactor: convert Jest infrastructure to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6838](https://github.com/facebook/docusaurus/pull/6838) fix(website): changelog plugin leads to CI bugs on release ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#6908](https://github.com/facebook/docusaurus/pull/6908) chore: do not print prototype in jest snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6906](https://github.com/facebook/docusaurus/pull/6906) refactor: install eslint-plugin-regexp ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#6905](https://github.com/facebook/docusaurus/pull/6905) test: improve test coverage; properly test core client APIs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6903](https://github.com/facebook/docusaurus/pull/6903) chore: spell-check test files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6902](https://github.com/facebook/docusaurus/pull/6902) test(theme-common): improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6900](https://github.com/facebook/docusaurus/pull/6900) test: enable a few jest eslint rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6898](https://github.com/facebook/docusaurus/pull/6898) refactor: import jest as global; unify import style of some modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6891](https://github.com/facebook/docusaurus/pull/6891) refactor(theme-classic): avoid using clsx class dict with CSS modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6880](https://github.com/facebook/docusaurus/pull/6880) refactor: prefer fs.outputFile to ensureDir + writeFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#6866](https://github.com/facebook/docusaurus/pull/6866) refactor: improve types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#6864](https://github.com/facebook/docusaurus/pull/6864) refactor: remove unnecessary default values normalized during validation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus`\\n - [#6861](https://github.com/facebook/docusaurus/pull/6861) refactor: make JS executables included in the tsconfig for editor hints ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#6857](https://github.com/facebook/docusaurus/pull/6857) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6852](https://github.com/facebook/docusaurus/pull/6852) refactor: enable a few TS flags ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 28\\n\\n- Afonso Jorge Ramos ([@afonsojramos](https://github.com/afonsojramos))\\n- Alessandro Festa ([@alefesta](https://github.com/alefesta))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Alois Klink ([@aloisklink](https://github.com/aloisklink))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- Begula ([@vedantmgoyal2009](https://github.com/vedantmgoyal2009))\\n- Billy Chan ([@billy1624](https://github.com/billy1624))\\n- Bugo ([@dragomano](https://github.com/dragomano))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Jadon N ([@jadonn](https://github.com/jadonn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kayce Basques ([@kaycebasques](https://github.com/kaycebasques))\\n- Kyohei Fukuda ([@hand-dot](https://github.com/hand-dot))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Odarpi ([@odarpi](https://github.com/odarpi))\\n- Pawel Kowaluk ([@pkowaluk](https://github.com/pkowaluk))\\n- Roberto Vidal ([@jrvidal](https://github.com/jrvidal))\\n- Sam Gutentag ([@samgutentag](https://github.com/samgutentag))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tsz W. TAM ([@rccttwd](https://github.com/rccttwd))\\n- WonChul Heo ([@heowc](https://github.com/heowc))\\n- Yorkie Liu ([@yorkie](https://github.com/yorkie))\\n- [@seladb](https://github.com/seladb)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- nate contino ([@nathan-contino-mongo](https://github.com/nathan-contino-mongo))\\n- tae ([@taejs](https://github.com/taejs))"},{"id":"/2.0.0-beta.17","metadata":{"permalink":"/changelog/2.0.0-beta.17","source":"@site/changelog/source/2.0.0-beta.17.md","title":"2.0.0-beta.17","description":"New Feature","date":"2022-03-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alex Nicholls","alias":"anicholls","url":"https://github.com/anicholls","imageURL":"https://github.com/anicholls.png","key":"anicholls"},{"name":"Ariful Alam","alias":"arifszn","url":"https://github.com/arifszn","imageURL":"https://github.com/arifszn.png","key":"arifszn"},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn"},{"name":"David Stotijn","alias":"dstotijn","url":"https://github.com/dstotijn","imageURL":"https://github.com/dstotijn.png","key":"dstotijn"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-03-03T20:00","authors":["anicholls","arifszn","dmitryvinn","dstotijn","Josh-Cena","PatelN123","slorber","vaibhavshn"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18"},"nextItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6783](https://github.com/facebook/docusaurus/pull/6783) feat: allow blog authors email ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#6827](https://github.com/facebook/docusaurus/pull/6827) fix(theme-classic): restore docusaurus search meta ([@slorber](https://github.com/slorber))\\n - [#6767](https://github.com/facebook/docusaurus/pull/6767) fix(theme-classic): allow code tags containing inline elements to stay inline ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6824](https://github.com/facebook/docusaurus/pull/6824) fix(theme-common): breadcrumbs home bug in docs-only ([@slorber](https://github.com/slorber))\\n - [#6816](https://github.com/facebook/docusaurus/pull/6816) fix(theme-common): docs breadcrumbs not working with baseUrl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6700](https://github.com/facebook/docusaurus/pull/6700) fix(content-docs): always sort autogenerated sidebar items by file/folder name by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6812](https://github.com/facebook/docusaurus/pull/6812) fix(core): remove hash/query when filtering existing files for broken link check ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6779](https://github.com/facebook/docusaurus/pull/6779) fix(mdx-loader): suppress image reading warning in Yarn PnP; log warning instead of error ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6762](https://github.com/facebook/docusaurus/pull/6762) fix(create): update broken SVG paths in templates ([@anicholls](https://github.com/anicholls))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#6826](https://github.com/facebook/docusaurus/pull/6826) refactor(theme-common): unify missing context errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6771](https://github.com/facebook/docusaurus/pull/6771) refactor(theme-classic): replace color mode toggle with button; remove switchConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6769](https://github.com/facebook/docusaurus/pull/6769) refactor(theme-classic): use Material icon for language dropdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6792](https://github.com/facebook/docusaurus/pull/6792) fix(mdx-loader): allow image paths to be URL encoded ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6825](https://github.com/facebook/docusaurus/pull/6825) docs: Adds Netlify one click deploy to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6818](https://github.com/facebook/docusaurus/pull/6818) docs: add deploy with vercel button to README ([@PatelN123](https://github.com/PatelN123))\\n - [#6817](https://github.com/facebook/docusaurus/pull/6817) docs: fix broken links ([@PatelN123](https://github.com/PatelN123))\\n - [#6811](https://github.com/facebook/docusaurus/pull/6811) docs: add homepage banner in support of Ukraine ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6813](https://github.com/facebook/docusaurus/pull/6813) docs: mark dyte as opensource in showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6776](https://github.com/facebook/docusaurus/pull/6776) docs: make GitHub actions explanation aligned with the code ([@arifszn](https://github.com/arifszn))\\n - [#6772](https://github.com/facebook/docusaurus/pull/6772) docs: add basic documentation about client modules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6815](https://github.com/facebook/docusaurus/pull/6815) fix: consistently use `max-width: 996px` in media queries ([@dstotijn](https://github.com/dstotijn))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6821](https://github.com/facebook/docusaurus/pull/6821) test(content-docs): refactor navigation test snapshot ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6768](https://github.com/facebook/docusaurus/pull/6768) test: add TypeScript template to E2E test matrix ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6773](https://github.com/facebook/docusaurus/pull/6773) refactor(utils): categorize functions into separate files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6761](https://github.com/facebook/docusaurus/pull/6761) chore: various internal fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 8\\n\\n- Alex Nicholls ([@anicholls](https://github.com/anicholls))\\n- Ariful Alam ([@arifszn](https://github.com/arifszn))\\n- David Stotijn ([@dstotijn](https://github.com/dstotijn))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))"},{"id":"/2.0.0-beta.16","metadata":{"permalink":"/changelog/2.0.0-beta.16","source":"@site/changelog/source/2.0.0-beta.16.md","title":"2.0.0-beta.16","description":"New Feature","date":"2022-02-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Gaurish","alias":"apidev234","url":"https://github.com/apidev234","imageURL":"https://github.com/apidev234.png","key":"apidev234"},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov"},{"name":"BigDataWriter","alias":"BigDataWriter","url":"https://github.com/BigDataWriter","imageURL":"https://github.com/BigDataWriter.png","key":"BigDataWriter"},{"name":"Clement Demonchy","alias":"cdemonchy-pro","url":"https://github.com/cdemonchy-pro","imageURL":"https://github.com/cdemonchy-pro.png","key":"cdemonchy-pro"},{"name":"CodeDoctor","alias":"CodeDoctorDE","url":"https://github.com/CodeDoctorDE","imageURL":"https://github.com/CodeDoctorDE.png","key":"CodeDoctorDE"},{"name":"CookieJarApps","alias":"CookieJarApps","url":"https://github.com/CookieJarApps","imageURL":"https://github.com/CookieJarApps.png","key":"CookieJarApps"},{"name":"Dmitry Vinnik","alias":"dmitryvinn","url":"https://github.com/dmitryvinn","imageURL":"https://github.com/dmitryvinn.png","key":"dmitryvinn"},{"name":"Dmitry Vinnik | Meta","alias":"dmitryvinn-fb","url":"https://github.com/dmitryvinn-fb","imageURL":"https://github.com/dmitryvinn-fb.png","key":"dmitryvinn-fb"},{"name":"Everardo J. Barojas M.","alias":"ebarojas","url":"https://github.com/ebarojas","imageURL":"https://github.com/ebarojas.png","key":"ebarojas"},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao"},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs"},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual"},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Daniel Kalevski","alias":"kalevski","url":"https://github.com/kalevski","imageURL":"https://github.com/kalevski.png","key":"kalevski"},{"name":"Kishan Gajera","alias":"kgajera","url":"https://github.com/kgajera","imageURL":"https://github.com/kgajera.png","key":"kgajera"},{"name":"Konstantin Tarkus","alias":"koistya","url":"https://github.com/koistya","imageURL":"https://github.com/koistya.png","key":"koistya"},{"name":"Balthasar Hofer","alias":"lebalz","url":"https://github.com/lebalz","imageURL":"https://github.com/lebalz.png","key":"lebalz"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Miles Johnson","alias":"milesj","url":"https://github.com/milesj","imageURL":"https://github.com/milesj.png","key":"milesj"},{"name":"Matheus Ricardo Brunelli","alias":"mrbrunelli","url":"https://github.com/mrbrunelli","imageURL":"https://github.com/mrbrunelli.png","key":"mrbrunelli"},{"name":"Naseel Niyas","alias":"NaseelNiyas","url":"https://github.com/NaseelNiyas","imageURL":"https://github.com/NaseelNiyas.png","key":"NaseelNiyas"},{"name":"nick-verida","alias":"nick-verida","url":"https://github.com/nick-verida","imageURL":"https://github.com/nick-verida.png","key":"nick-verida"},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni"},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"Muhammad Redho Ayassa","alias":"redhoyasa","url":"https://github.com/redhoyasa","imageURL":"https://github.com/redhoyasa.png","key":"redhoyasa"},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi"},{"name":"Ruben Arushanyan","alias":"Ruben-Arushanyan","url":"https://github.com/Ruben-Arushanyan","imageURL":"https://github.com/Ruben-Arushanyan.png","key":"Ruben-Arushanyan"},{"name":"seyoon20087","alias":"seyoon20087","url":"https://github.com/seyoon20087","imageURL":"https://github.com/seyoon20087.png","key":"seyoon20087"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tamal Web","alias":"tamalweb","url":"https://github.com/tamalweb","imageURL":"https://github.com/tamalweb.png","key":"tamalweb"},{"name":"TheCatLady","alias":"TheCatLady","url":"https://github.com/TheCatLady","imageURL":"https://github.com/TheCatLady.png","key":"TheCatLady"},{"name":"Daniel Hanke","alias":"thedanielhanke","url":"https://github.com/thedanielhanke","imageURL":"https://github.com/thedanielhanke.png","key":"thedanielhanke"},{"name":"toto6038","alias":"toto6038","url":"https://github.com/toto6038","imageURL":"https://github.com/toto6038.png","key":"toto6038"},{"name":"Matthew Ailes","alias":"vidarc","url":"https://github.com/vidarc","imageURL":"https://github.com/vidarc.png","key":"vidarc"},{"name":"\uc774\uc815\ud658","alias":"winterlood","url":"https://github.com/winterlood","imageURL":"https://github.com/winterlood.png","key":"winterlood"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-02-25T20:00","authors":["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17"},"nextItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-logger`, `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus`\\n - [#6243](https://github.com/facebook/docusaurus/pull/6243) feat(core): brand new swizzle CLI experience ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6750](https://github.com/facebook/docusaurus/pull/6750) feat(create): new --package-manager option; interactive package manager selection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6610](https://github.com/facebook/docusaurus/pull/6610) feat(create): allow specifying a git clone strategy ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6723](https://github.com/facebook/docusaurus/pull/6723) feat: sync color mode between browser tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#6692](https://github.com/facebook/docusaurus/pull/6692) feat(search-algolia): allow disabling search page and configuring path ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6517](https://github.com/facebook/docusaurus/pull/6517) feat(docs,theme-classic): docs breadcrumbs ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6519](https://github.com/facebook/docusaurus/pull/6519) feat(content-docs): sidebar item type \\"html\\" for rendering pure markup ([@jodyheavener](https://github.com/jodyheavener))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#6593](https://github.com/facebook/docusaurus/pull/6593) feat(content-blog): infer blog post date from git history ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-plugin-content-docs`\\n - [#6619](https://github.com/facebook/docusaurus/pull/6619) feat(content-docs): add custom props front matter ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6452](https://github.com/facebook/docusaurus/pull/6452) feat(content-docs): allow explicitly disabling index page for generated category ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6603](https://github.com/facebook/docusaurus/pull/6603) feat(content-blog): allow customizing blog archive component through option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6221](https://github.com/facebook/docusaurus/pull/6221) feat(content-blog): Allow pagination for BlogTagsPostsPage ([@redhoyasa](https://github.com/redhoyasa))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6752](https://github.com/facebook/docusaurus/pull/6752) chore: upgrade docsearch-react to v3 stable, bump dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#6729](https://github.com/facebook/docusaurus/pull/6729) refactor: make MDX export a flat TOC list instead of tree ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6740](https://github.com/facebook/docusaurus/pull/6740) refactor: remove deprecated Webpack utils & validation escape hatch ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6707](https://github.com/facebook/docusaurus/pull/6707) refactor(theme-classic): bias again search metadata toward Algolia DocSearch ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6758](https://github.com/facebook/docusaurus/pull/6758) fix(theme-common): isSamePath should be case-insensitive ([@slorber](https://github.com/slorber))\\n - [#6748](https://github.com/facebook/docusaurus/pull/6748) fix(theme-classic): temporarily disable toc heading autoscrolling ([@slorber](https://github.com/slorber))\\n - [#6696](https://github.com/facebook/docusaurus/pull/6696) fix(theme-common): do not run useLocationChange when hot reloading ([@lex111](https://github.com/lex111))\\n - [#6490](https://github.com/facebook/docusaurus/pull/6490) fix(theme-classic): do not switch color modes when printing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6749](https://github.com/facebook/docusaurus/pull/6749) fix(theme-classic): fix breadcrumb home link bug with new useHomePageRoute() hook ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#6720](https://github.com/facebook/docusaurus/pull/6720) fix(content-docs): create assets for frontmatter images ([@lebalz](https://github.com/lebalz))\\n - [#6592](https://github.com/facebook/docusaurus/pull/6592) fix(content-docs): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n - [#6477](https://github.com/facebook/docusaurus/pull/6477) fix(content-docs): export versioning utils ([@milesj](https://github.com/milesj))\\n- `docusaurus-mdx-loader`\\n - [#6712](https://github.com/facebook/docusaurus/pull/6712) fix(mdx-loader): make headings containing links properly formatted in ToC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6701](https://github.com/facebook/docusaurus/pull/6701) fix(cli): disable directory listing in serve ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6607](https://github.com/facebook/docusaurus/pull/6607) fix(cli): log error itself on unhandled rejection ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6500](https://github.com/facebook/docusaurus/pull/6500) fix(cli): allow passing a list of file names to write-heading-ids ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6496](https://github.com/facebook/docusaurus/pull/6496) fix(core): configValidation should allow inline theme functions ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6652](https://github.com/facebook/docusaurus/pull/6652) fix(theme-classic): minor BTT button fixes ([@lex111](https://github.com/lex111))\\n - [#6612](https://github.com/facebook/docusaurus/pull/6612) fix(theme-classic): make Prism additional languages properly server-side rendered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6599](https://github.com/facebook/docusaurus/pull/6599) fix(theme-classic): add docSidebar as allowed item in dropdown ([@homotechsual](https://github.com/homotechsual))\\n - [#6531](https://github.com/facebook/docusaurus/pull/6531) fix(theme-classic): highlight active collapsible doc category properly ([@lex111](https://github.com/lex111))\\n - [#6515](https://github.com/facebook/docusaurus/pull/6515) fix(theme-classic): add key prop for SimpleLinks map ([@kgajera](https://github.com/kgajera))\\n - [#6508](https://github.com/facebook/docusaurus/pull/6508) fix(theme-classic): apply width/height for footer logos without href ([@kgajera](https://github.com/kgajera))\\n- `docusaurus-utils`\\n - [#6617](https://github.com/facebook/docusaurus/pull/6617) fix(utils): convert Markdown links in reference-style links with multiple spaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6489](https://github.com/facebook/docusaurus/pull/6489) fix(utils): do not resolve Markdown paths with @site prefix ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6478](https://github.com/facebook/docusaurus/pull/6478) fix(utils): Markdown linkification match local paths beginning with http ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6495](https://github.com/facebook/docusaurus/pull/6495) fix(content-docs): render category with no subitems as a normal link ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6755](https://github.com/facebook/docusaurus/pull/6755) refactor: unify error handling behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6679](https://github.com/facebook/docusaurus/pull/6679) feat(create): better detection of package manager preference ([@lex111](https://github.com/lex111))\\n - [#6481](https://github.com/facebook/docusaurus/pull/6481) refactor(init): promote good practices; use site alias ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6745](https://github.com/facebook/docusaurus/pull/6745) fix(content-docs): improve sidebar shorthand normalization error message ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6602](https://github.com/facebook/docusaurus/pull/6602) feat(content-docs): allow omitting enclosing array consistently for category shorthand ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6596](https://github.com/facebook/docusaurus/pull/6596) refactor(content-docs): clean up sidebars logic; validate generator returns ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6586](https://github.com/facebook/docusaurus/pull/6586) refactor(content-docs): read category metadata files before autogenerating ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6730](https://github.com/facebook/docusaurus/pull/6730) refactor: declare all props as interfaces ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6711](https://github.com/facebook/docusaurus/pull/6711) chore(theme-translations): complete Korean translations ([@revi](https://github.com/revi))\\n - [#6686](https://github.com/facebook/docusaurus/pull/6686) fix(theme-translations): improve Korean translations ([@winterlood](https://github.com/winterlood))\\n - [#6635](https://github.com/facebook/docusaurus/pull/6635) refactor(theme-translation): improve Traditional Chinese translation quality ([@toto6038](https://github.com/toto6038))\\n- `docusaurus-theme-classic`, `docusaurus-theme-translations`\\n - [#6674](https://github.com/facebook/docusaurus/pull/6674) fix(theme-classic): improve aria label of color mode toggle ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6668](https://github.com/facebook/docusaurus/pull/6668) refactor: recommend using data-theme without html element selector ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6622](https://github.com/facebook/docusaurus/pull/6622) refactor(theme-classic): clean up CSS of doc sidebar item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#6644](https://github.com/facebook/docusaurus/pull/6644) fix(core): forward ref to Link\'s anchor element ([@koistya](https://github.com/koistya))\\n - [#6646](https://github.com/facebook/docusaurus/pull/6646) fix(cli): make docusaurus clear also remove .yarn/.cache folder ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6306](https://github.com/facebook/docusaurus/pull/6306) feat(core): use react-helmet-async ([@seyoon20087](https://github.com/seyoon20087))\\n- `docusaurus-utils-validation`\\n - [#6656](https://github.com/facebook/docusaurus/pull/6656) feat: allow numbers in plugin ID ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `lqip-loader`\\n - [#6650](https://github.com/facebook/docusaurus/pull/6650) refactor(utils): replace hash with contenthash for file loader ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6615](https://github.com/facebook/docusaurus/pull/6615) fix: remove more peer dependency warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`\\n - [#6598](https://github.com/facebook/docusaurus/pull/6598) feat: make Markdown images lazy loaded ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6505](https://github.com/facebook/docusaurus/pull/6505) fix(theme-classic): make focused link outlined with JS disabled ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#6507](https://github.com/facebook/docusaurus/pull/6507) refactor: improve internal typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#6498](https://github.com/facebook/docusaurus/pull/6498) fix: updating peerDependency fields for yarn berry ([@vidarc](https://github.com/vidarc))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`\\n - [#6482](https://github.com/facebook/docusaurus/pull/6482) feat: mark some text labels as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6727](https://github.com/facebook/docusaurus/pull/6727) docs: add Blog Matheus Brunelli site to showcase ([@mrbrunelli](https://github.com/mrbrunelli))\\n - [#6721](https://github.com/facebook/docusaurus/pull/6721) docs: add Butterfly Documentation to showcase ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n - [#6710](https://github.com/facebook/docusaurus/pull/6710) docs(website): Add techharvesting to showcase ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n - [#6708](https://github.com/facebook/docusaurus/pull/6708) docs: add doc for generated-index keyword/image metadata ([@slorber](https://github.com/slorber))\\n - [#6709](https://github.com/facebook/docusaurus/pull/6709) docs(website): fix video responsiveness ([@lex111](https://github.com/lex111))\\n - [#6687](https://github.com/facebook/docusaurus/pull/6687) docs: add deep dive video for Docusaurus ([@dmitryvinn](https://github.com/dmitryvinn))\\n - [#6704](https://github.com/facebook/docusaurus/pull/6704) docs(website): search doc typo searchParameters ([@slorber](https://github.com/slorber))\\n - [#6682](https://github.com/facebook/docusaurus/pull/6682) docs: add redux-cool site to showcase ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n - [#6677](https://github.com/facebook/docusaurus/pull/6677) docs: add Rivalis to showcase ([@kalevski](https://github.com/kalevski))\\n - [#6676](https://github.com/facebook/docusaurus/pull/6676) docs: add SmartCookieWeb site to showcase ([@CookieJarApps](https://github.com/CookieJarApps))\\n - [#6675](https://github.com/facebook/docusaurus/pull/6675) docs: mention that all official themes are TypeScript-covered ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6673](https://github.com/facebook/docusaurus/pull/6673) docs: mention about blog date in front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6672](https://github.com/facebook/docusaurus/pull/6672) refactor(website): extract homepage data from UI; feature text updates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6670](https://github.com/facebook/docusaurus/pull/6670) docs: add CyberDrain Improved Partner Portal (CIPP) to showcase ([@homotechsual](https://github.com/homotechsual))\\n - [#6667](https://github.com/facebook/docusaurus/pull/6667) fix(website): make YT iframe responsive ([@lex111](https://github.com/lex111))\\n - [#6659](https://github.com/facebook/docusaurus/pull/6659) docs: add eli5 video to home page ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n - [#6633](https://github.com/facebook/docusaurus/pull/6633) docs: improve wording of using Markdown file paths ([@BigDataWriter](https://github.com/BigDataWriter))\\n - [#6624](https://github.com/facebook/docusaurus/pull/6624) docs: add Resoto & Some Engineering Inc. to showcase ([@TheCatLady](https://github.com/TheCatLady))\\n - [#6611](https://github.com/facebook/docusaurus/pull/6611) docs: fix bad anchor link syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6591](https://github.com/facebook/docusaurus/pull/6591) docs: improve GitHub Actions example jobs ([@ebarojas](https://github.com/ebarojas))\\n - [#6426](https://github.com/facebook/docusaurus/pull/6426) feat(website): add Tweets section ([@yangshun](https://github.com/yangshun))\\n - [#6532](https://github.com/facebook/docusaurus/pull/6532) docs: add SAP Cloud SDK to showcase ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#6513](https://github.com/facebook/docusaurus/pull/6513) docs: clean up CONTRIBUTING ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6501](https://github.com/facebook/docusaurus/pull/6501) docs: add Cloudflare pages deployment guide ([@apidev234](https://github.com/apidev234))\\n - [#6499](https://github.com/facebook/docusaurus/pull/6499) docs: mention how env vars can be read ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6492](https://github.com/facebook/docusaurus/pull/6492) docs: mention where to find the sitemap ([@tamalweb](https://github.com/tamalweb))\\n - [#6491](https://github.com/facebook/docusaurus/pull/6491) docs: add developers.verida to showcase ([@nick-verida](https://github.com/nick-verida))\\n - [#6414](https://github.com/facebook/docusaurus/pull/6414) feat(website): new plugin to load CHANGELOG and render as blog ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6404](https://github.com/facebook/docusaurus/pull/6404) docs: elaborate on Markdown asset linking; document pathname:// protocol ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6484](https://github.com/facebook/docusaurus/pull/6484) docs: remove mention that CDN resources are cached cross-domain ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6429](https://github.com/facebook/docusaurus/pull/6429) refactor: self-host KaTeX assets ([@pranabdas](https://github.com/pranabdas))\\n - [#6483](https://github.com/facebook/docusaurus/pull/6483) docs: mark a lot of website texts as translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#6627](https://github.com/facebook/docusaurus/pull/6627) docs: fix presets documentation link ([@thedanielhanke](https://github.com/thedanielhanke))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6759](https://github.com/facebook/docusaurus/pull/6759) refactor(theme-classic): merge CSS files for Heading ([@slorber](https://github.com/slorber))\\n - [#6584](https://github.com/facebook/docusaurus/pull/6584) misc: enable jsx-key eslint rule ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6756](https://github.com/facebook/docusaurus/pull/6756) test: sort migration test FS mock calls ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6609](https://github.com/facebook/docusaurus/pull/6609) refactor(migrate): change internal methods\' parameter style ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6476](https://github.com/facebook/docusaurus/pull/6476) chore: fix Stylelint globs for editor support ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6744](https://github.com/facebook/docusaurus/pull/6744) fix(content-docs): properly display collocated social card image ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6742](https://github.com/facebook/docusaurus/pull/6742) refactor: improve client modules types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`\\n - [#6741](https://github.com/facebook/docusaurus/pull/6741) chore(module-type-aliases): add react as peer dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6658](https://github.com/facebook/docusaurus/pull/6658) refactor(module-aliases): remove react-helmet dependency ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6726](https://github.com/facebook/docusaurus/pull/6726) misc: improve bug report template ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6512](https://github.com/facebook/docusaurus/pull/6512) misc: configure linguist behavior to show better language stats ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6487](https://github.com/facebook/docusaurus/pull/6487) chore: fix codesandbox example link + mention npm publish recovery ([@slorber](https://github.com/slorber))\\n - [#6486](https://github.com/facebook/docusaurus/pull/6486) chore: update examples for beta.15 ([@slorber](https://github.com/slorber))\\n - [#6485](https://github.com/facebook/docusaurus/pull/6485) fix(website): bad translate tags without default translation ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6716](https://github.com/facebook/docusaurus/pull/6716) refactor: ensure lodash is default-imported ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-migrate`, `docusaurus`\\n - [#6661](https://github.com/facebook/docusaurus/pull/6661) refactor: convert CLI entry points to ESM; migrate create-docusaurus to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-common`, `docusaurus`\\n - [#6651](https://github.com/facebook/docusaurus/pull/6651) refactor: reduce exported members of docusaurus router ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6629](https://github.com/facebook/docusaurus/pull/6629) refactor: move module declarations for non-route components to theme-classic ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#6614](https://github.com/facebook/docusaurus/pull/6614) refactor: remove Babel plugins that are included in preset-env ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6605](https://github.com/facebook/docusaurus/pull/6605) chore: fix ESLint warnings, restrict export all syntax ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6583](https://github.com/facebook/docusaurus/pull/6583) refactor(live-codeblock): migrate theme to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6524](https://github.com/facebook/docusaurus/pull/6524) refactor: enforce named capture groups; clean up regexes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#6521](https://github.com/facebook/docusaurus/pull/6521) refactor: mark all functions that import external modules as async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6514](https://github.com/facebook/docusaurus/pull/6514) chore: clean up ESLint config, enable a few rules ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6511](https://github.com/facebook/docusaurus/pull/6511) refactor(core): convert theme-fallback to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-utils`\\n - [#6506](https://github.com/facebook/docusaurus/pull/6506) test: add test for readOutputHTMLFile ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-theme-common`\\n - [#6502](https://github.com/facebook/docusaurus/pull/6502) refactor: fix all eslint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus`\\n - [#6474](https://github.com/facebook/docusaurus/pull/6474) test: rename \'fixtures\' to \'**fixtures**\' ([@nschonni](https://github.com/nschonni))\\n\\n## :running: Performance\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6725](https://github.com/facebook/docusaurus/pull/6725) refactor: convert all fs methods to async ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 38\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Balthasar Hofer ([@lebalz](https://github.com/lebalz))\\n- Clement Demonchy ([@cdemonchy-pro](https://github.com/cdemonchy-pro))\\n- CodeDoctor ([@CodeDoctorDE](https://github.com/CodeDoctorDE))\\n- Daniel Hanke ([@thedanielhanke](https://github.com/thedanielhanke))\\n- Daniel Kalevski ([@kalevski](https://github.com/kalevski))\\n- Dmitry Vinnik ([@dmitryvinn](https://github.com/dmitryvinn))\\n- Dmitry Vinnik | Meta ([@dmitryvinn-fb](https://github.com/dmitryvinn-fb))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Everardo J. Barojas M. ([@ebarojas](https://github.com/ebarojas))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Gaurish ([@apidev234](https://github.com/apidev234))\\n- Hong Yongmin ([@revi](https://github.com/revi))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kishan Gajera ([@kgajera](https://github.com/kgajera))\\n- Konstantin Tarkus ([@koistya](https://github.com/koistya))\\n- Matheus Ricardo Brunelli ([@mrbrunelli](https://github.com/mrbrunelli))\\n- Matthew Ailes ([@vidarc](https://github.com/vidarc))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Miles Johnson ([@milesj](https://github.com/milesj))\\n- Muhammad Redho Ayassa ([@redhoyasa](https://github.com/redhoyasa))\\n- Naseel Niyas ([@NaseelNiyas](https://github.com/NaseelNiyas))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Ruben Arushanyan ([@Ruben-Arushanyan](https://github.com/Ruben-Arushanyan))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tamal Web ([@tamalweb](https://github.com/tamalweb))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@BigDataWriter](https://github.com/BigDataWriter)\\n- [@CookieJarApps](https://github.com/CookieJarApps)\\n- [@TheCatLady](https://github.com/TheCatLady)\\n- [@nick-verida](https://github.com/nick-verida)\\n- [@seyoon20087](https://github.com/seyoon20087)\\n- [@toto6038](https://github.com/toto6038)\\n- \uc774\uc815\ud658 ([@winterlood](https://github.com/winterlood))"},{"id":"/2.0.0-beta.15","metadata":{"permalink":"/changelog/2.0.0-beta.15","source":"@site/changelog/source/2.0.0-beta.15.md","title":"2.0.0-beta.15","description":"New Feature","date":"2022-01-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"\u4e45\u67d3 | JiuRan","alias":"1084350607","url":"https://github.com/1084350607","imageURL":"https://github.com/1084350607.png","key":"1084350607"},{"name":"Abdelrahman Ahmed","alias":"abahmed","url":"https://github.com/abahmed","imageURL":"https://github.com/abahmed.png","key":"abahmed"},{"name":"AJ Rice","alias":"ajrice6713","url":"https://github.com/ajrice6713","imageURL":"https://github.com/ajrice6713.png","key":"ajrice6713"},{"name":"Alexandru Grigoras","alias":"alexgrigoras","url":"https://github.com/alexgrigoras","imageURL":"https://github.com/alexgrigoras.png","key":"alexgrigoras"},{"name":"Filipe Guerra","alias":"alias-mac","url":"https://github.com/alias-mac","imageURL":"https://github.com/alias-mac.png","key":"alias-mac"},{"name":"Amir M. Mohamadi","alias":"amir2mi","url":"https://github.com/amir2mi","imageURL":"https://github.com/amir2mi.png","key":"amir2mi"},{"name":"Anthony McCaigue","alias":"antmcc49","url":"https://github.com/antmcc49","imageURL":"https://github.com/antmcc49.png","key":"antmcc49"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"Brendan Nee","alias":"brendannee","url":"https://github.com/brendannee","imageURL":"https://github.com/brendannee.png","key":"brendannee"},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny"},{"name":"Davide Bianchi","alias":"davidebianchi","url":"https://github.com/davidebianchi","imageURL":"https://github.com/davidebianchi.png","key":"davidebianchi"},{"name":"Edouard Bonlieu","alias":"edouardb","url":"https://github.com/edouardb","imageURL":"https://github.com/edouardb.png","key":"edouardb"},{"name":"Feodor Fitsner","alias":"FeodorFitsner","url":"https://github.com/FeodorFitsner","imageURL":"https://github.com/FeodorFitsner.png","key":"FeodorFitsner"},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo"},{"name":"Chen","alias":"HiChen404","url":"https://github.com/HiChen404","imageURL":"https://github.com/HiChen404.png","key":"HiChen404"},{"name":"Mikey O\'Toole","alias":"homotechsual","url":"https://github.com/homotechsual","imageURL":"https://github.com/homotechsual.png","key":"homotechsual"},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven"},{"name":"Jody Heavener","alias":"jodyheavener","url":"https://github.com/jodyheavener","imageURL":"https://github.com/jodyheavener.png","key":"jodyheavener"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joseph","alias":"josephriosIO","url":"https://github.com/josephriosIO","imageURL":"https://github.com/josephriosIO.png","key":"josephriosIO"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Josh Goldberg","alias":"JoshuaKGoldberg","url":"https://github.com/JoshuaKGoldberg","imageURL":"https://github.com/JoshuaKGoldberg.png","key":"JoshuaKGoldberg"},{"name":"Jake Witz","alias":"jwitz","url":"https://github.com/jwitz","imageURL":"https://github.com/jwitz.png","key":"jwitz"},{"name":"Kaustubh Kulkarni","alias":"kaustubhk24","url":"https://github.com/kaustubhk24","imageURL":"https://github.com/kaustubhk24.png","key":"kaustubhk24"},{"name":"kuizuo","alias":"kuizuo","url":"https://github.com/kuizuo","imageURL":"https://github.com/kuizuo.png","key":"kuizuo"},{"name":"Minh Pham","alias":"lmpham1","url":"https://github.com/lmpham1","imageURL":"https://github.com/lmpham1.png","key":"lmpham1"},{"name":"Lars Mikkelsen","alias":"ltm","url":"https://github.com/ltm","imageURL":"https://github.com/ltm.png","key":"ltm"},{"name":"mcallisto","alias":"mcallisto","url":"https://github.com/mcallisto","imageURL":"https://github.com/mcallisto.png","key":"mcallisto"},{"name":"Sanjay Soundarajan","alias":"megasanjay","url":"https://github.com/megasanjay","imageURL":"https://github.com/megasanjay.png","key":"megasanjay"},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro"},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph"},{"name":"Nick Schonning","alias":"nschonni","url":"https://github.com/nschonni","imageURL":"https://github.com/nschonni.png","key":"nschonni"},{"name":"\xd6mer Faruk APLAK","alias":"omeraplak","url":"https://github.com/omeraplak","imageURL":"https://github.com/omeraplak.png","key":"omeraplak"},{"name":"Nayan Patel","alias":"PatelN123","url":"https://github.com/PatelN123","imageURL":"https://github.com/PatelN123.png","key":"PatelN123"},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"Rishi Raj Jain","alias":"rishi-raj-jain","url":"https://github.com/rishi-raj-jain","imageURL":"https://github.com/rishi-raj-jain.png","key":"rishi-raj-jain"},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey"},{"name":"ruanqizhen","alias":"ruanqizhen","url":"https://github.com/ruanqizhen","imageURL":"https://github.com/ruanqizhen.png","key":"ruanqizhen"},{"name":"sgenoud","alias":"sgenoud","url":"https://github.com/sgenoud","imageURL":"https://github.com/sgenoud.png","key":"sgenoud"},{"name":"Shun Wakatsuki","alias":"shwaka","url":"https://github.com/shwaka","imageURL":"https://github.com/shwaka.png","key":"shwaka"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tapan Chudasama","alias":"tapanchudasama","url":"https://github.com/tapanchudasama","imageURL":"https://github.com/tapanchudasama.png","key":"tapanchudasama"},{"name":"Vaibhav Shinde","alias":"vaibhavshn","url":"https://github.com/vaibhavshn","imageURL":"https://github.com/vaibhavshn.png","key":"vaibhavshn"},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal"},{"name":"wood3n","alias":"wood3n","url":"https://github.com/wood3n","imageURL":"https://github.com/wood3n.png","key":"wood3n"}],"frontMatter":{"mdx":{"format":"md"},"date":"2022-01-26T20:00","authors":["1084350607","abahmed","ajrice6713","alexgrigoras","alias-mac","amir2mi","antmcc49","armano2","brendannee","cerkiewny","davidebianchi","edouardb","FeodorFitsner","gabrielcsapo","HiChen404","homotechsual","jeffreyaven","jodyheavener","johnnyreilly","josephriosIO","Josh-Cena","JoshuaKGoldberg","jwitz","kaustubhk24","kuizuo","lmpham1","ltm","mcallisto","megasanjay","MorookaKotaro","noomorph","nschonni","omeraplak","PatelN123","pranabdas","RDIL","rishi-raj-jain","roydukkey","ruanqizhen","sgenoud","shwaka","slorber","tapanchudasama","vaibhavshn","vandreleal","wood3n"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16"},"nextItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#6451](https://github.com/facebook/docusaurus/pull/6451) feat(content-docs): expose isCategoryIndex matcher to customize conventions ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5782](https://github.com/facebook/docusaurus/pull/5782) feat(content-docs): displayed_sidebar front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6466](https://github.com/facebook/docusaurus/pull/6466) feat(theme-classic): add stable class for DocSidebarContainer ([@homotechsual](https://github.com/homotechsual))\\n - [#3811](https://github.com/facebook/docusaurus/pull/3811) feat(theme-classic): auto-collapse sibling categories in doc sidebar ([@josephriosIO](https://github.com/josephriosIO))\\n - [#6216](https://github.com/facebook/docusaurus/pull/6216) feat(theme-classic): usable CodeBlock outside markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#6416](https://github.com/facebook/docusaurus/pull/6416) feat(content-blog): allow authors list to contain images only ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6415](https://github.com/facebook/docusaurus/pull/6415) feat(content-blog): allow disabling generating archive ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6245](https://github.com/facebook/docusaurus/pull/6245) feat(content-blog): parse date from middle of file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#6371](https://github.com/facebook/docusaurus/pull/6371) feat(core, theme-classic): allow overriding htmlLang ([@noomorph](https://github.com/noomorph))\\n- `docusaurus-mdx-loader`\\n - [#6323](https://github.com/facebook/docusaurus/pull/6323) feat(mdx-loader): preserve hash in image src; support GH themed images ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#6139](https://github.com/facebook/docusaurus/pull/6139) feat(theme-classic): new navbar item linking to a sidebar ([@lmpham1](https://github.com/lmpham1))\\n - [#6239](https://github.com/facebook/docusaurus/pull/6239) feat(content-docs): allow SEO metadata for category index pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-translations`\\n - [#6173](https://github.com/facebook/docusaurus/pull/6173) feat(ideal-image): allow translating status messages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#6155](https://github.com/facebook/docusaurus/pull/6155) feat(ideal-image): new option disableInDev ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6169](https://github.com/facebook/docusaurus/pull/6169) feat(theme-translations): add Italian translations ([@mcallisto](https://github.com/mcallisto))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-types`, `docusaurus`\\n - [#6166](https://github.com/facebook/docusaurus/pull/6166) feat: async plugin creator functions ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6165](https://github.com/facebook/docusaurus/pull/6165) feat(core): async docusaurus.config.js creator function ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#6248](https://github.com/facebook/docusaurus/pull/6248) feat(sitemap): remove trailingSlash option; respect noIndex config ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#6454](https://github.com/facebook/docusaurus/pull/6454) fix(content-blog): generate feed by reading build output ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6468](https://github.com/facebook/docusaurus/pull/6468) fix(init): cd to correct path when installing ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-mdx-loader`\\n - [#4827](https://github.com/facebook/docusaurus/pull/4827) fix: allow links to JSON in .md files to be transformed as asset links ([@antmcc49](https://github.com/antmcc49))\\n- `docusaurus-plugin-content-docs`\\n - [#6435](https://github.com/facebook/docusaurus/pull/6435) fix(content-docs): make getActivePlugin match plugin paths more exactly ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6310](https://github.com/facebook/docusaurus/pull/6310) fix: highlight appropriate navItem when browsing generated category index ([@tapanchudasama](https://github.com/tapanchudasama))\\n - [#6202](https://github.com/facebook/docusaurus/pull/6202) fix(content-docs): quotify path when retrieving git history ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6424](https://github.com/facebook/docusaurus/pull/6424) fix(core): fix css url(\\"image.png\\"), use css-loader v6 with esModules: false ([@slorber](https://github.com/slorber))\\n - [#6378](https://github.com/facebook/docusaurus/pull/6378) fix(core): do not coerce webpack warning to string ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6197](https://github.com/facebook/docusaurus/pull/6197) fix(cli): quotify temp path in deploy command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6168](https://github.com/facebook/docusaurus/pull/6168) fix(core): update webpack-dev-server + fix deprecation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-logger`, `docusaurus-utils`\\n - [#6384](https://github.com/facebook/docusaurus/pull/6384) fix(logger): properly stringify objects for logging ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6338](https://github.com/facebook/docusaurus/pull/6338) fix(core): error boundary should allow no children ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#6314](https://github.com/facebook/docusaurus/pull/6314) fix(theme-classic): fix mobile version dropdown label with only one version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6288](https://github.com/facebook/docusaurus/pull/6288) fix(theme-classic): add missing role=region to SkipToContent ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n - [#6213](https://github.com/facebook/docusaurus/pull/6213) refactor(theme-classic): extract common PaginatorNavLink component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6177](https://github.com/facebook/docusaurus/pull/6177) fix(theme-classic): make React elements in pre render correctly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#6300](https://github.com/facebook/docusaurus/pull/6300) refactor: move exported type definitions to declaration file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`\\n - [#6276](https://github.com/facebook/docusaurus/pull/6276) fix(migrate): migration CLI should correctly migrate gtag options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6244](https://github.com/facebook/docusaurus/pull/6244) fix(content-blog): always convert front matter date as UTC ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#6190](https://github.com/facebook/docusaurus/pull/6190) fix(utils): properly escape Windows paths ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`\\n - [#6469](https://github.com/facebook/docusaurus/pull/6469) fix(module-type-aliases): fix type def for translate params ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-search-algolia`\\n - [#6407](https://github.com/facebook/docusaurus/pull/6407) feat(search): enable contextual search by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#6443](https://github.com/facebook/docusaurus/pull/6443) refactor(mdx-loader): use vfile.path to access Markdown file path ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6427](https://github.com/facebook/docusaurus/pull/6427) feat(theme-classic): add aria-current to sidebar category link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6391](https://github.com/facebook/docusaurus/pull/6391) refactor(theme-classic): add comments to Prism setup; minor refactor ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6240](https://github.com/facebook/docusaurus/pull/6240) refactor(theme-classic): use front matter from metadata for BlogPostPage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#6419](https://github.com/facebook/docusaurus/pull/6419) feat(core): warn users about hand-modifying generated files ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6405](https://github.com/facebook/docusaurus/pull/6405) feat(core): check imported API name when extracting translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6291](https://github.com/facebook/docusaurus/pull/6291) feat(core): improve error message for BrowserOnly; better docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6368](https://github.com/facebook/docusaurus/pull/6368) fix(create-docusaurus): add useBaseUrl for image URLs ([@alias-mac](https://github.com/alias-mac))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#6400](https://github.com/facebook/docusaurus/pull/6400) feat(content-pages): front matter validation, include front matter in metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#6339](https://github.com/facebook/docusaurus/pull/6339) feat(mdx-loader): read image dimensions when processing Markdown ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6388](https://github.com/facebook/docusaurus/pull/6388) feat(content-blog): include tags in feed ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6189](https://github.com/facebook/docusaurus/pull/6189) feat(content-blog): include front matter in loaded content metadata ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#6317](https://github.com/facebook/docusaurus/pull/6317) feat(theme-classic): autoscroll TOC with active link ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6303](https://github.com/facebook/docusaurus/pull/6303) test(utils, mdx-loader, core): improve coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#6284](https://github.com/facebook/docusaurus/pull/6284) fix(preset-classic): throw if preset finds GA options in theme config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#6186](https://github.com/facebook/docusaurus/pull/6186) refactor: print trailing new line when outputting JSON ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6296](https://github.com/facebook/docusaurus/pull/6296) docs: add advanced guides ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6459](https://github.com/facebook/docusaurus/pull/6459) docs: add replicad to showcase ([@sgenoud](https://github.com/sgenoud))\\n - [#6334](https://github.com/facebook/docusaurus/pull/6334) docs: 2021 recap blog post ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6458](https://github.com/facebook/docusaurus/pull/6458) docs: add Kuizuo\'s Personal Website to showcase ([@kuizuo](https://github.com/kuizuo))\\n - [#6431](https://github.com/facebook/docusaurus/pull/6431) docs: add Koyeb as a deployment option ([@edouardb](https://github.com/edouardb))\\n - [#6455](https://github.com/facebook/docusaurus/pull/6455) docs: add Sass Fairy to showcase ([@roydukkey](https://github.com/roydukkey))\\n - [#6453](https://github.com/facebook/docusaurus/pull/6453) docs: document embedding generated index in doc page ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6450](https://github.com/facebook/docusaurus/pull/6450) docs: split sidebar documentation into sections ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6449](https://github.com/facebook/docusaurus/pull/6449) docs: multiple doc improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6448](https://github.com/facebook/docusaurus/pull/6448) fix(website): update colors correctly when palette is only customized in one color mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6385](https://github.com/facebook/docusaurus/pull/6385) chore: add height/width for front page images ([@nschonni](https://github.com/nschonni))\\n - [#6445](https://github.com/facebook/docusaurus/pull/6445) docs: update showcase data of InfraQL ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#6433](https://github.com/facebook/docusaurus/pull/6433) docs: add kube-green to showcase ([@davidebianchi](https://github.com/davidebianchi))\\n - [#6428](https://github.com/facebook/docusaurus/pull/6428) docs: elaborate on i18n tutorial ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6422](https://github.com/facebook/docusaurus/pull/6422) docs: add 404Lab wiki to showcase ([@HiChen404](https://github.com/HiChen404))\\n - [#6420](https://github.com/facebook/docusaurus/pull/6420) fix(website): restore some site CSS in light mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6410](https://github.com/facebook/docusaurus/pull/6410) docs: add SODA for SPARC to showcase ([@megasanjay](https://github.com/megasanjay))\\n - [#6417](https://github.com/facebook/docusaurus/pull/6417) docs: fix accessibility of search modal ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6406](https://github.com/facebook/docusaurus/pull/6406) docs(i18n): add docs for htmlLang config ([@noomorph](https://github.com/noomorph))\\n - [#6393](https://github.com/facebook/docusaurus/pull/6393) docs: update Algolia docs for new DocSearch infra ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6383](https://github.com/facebook/docusaurus/pull/6383) docs: elaborate on different CSS class names ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6348](https://github.com/facebook/docusaurus/pull/6348) docs: add KaustubhK24\'s site to showcase ([@kaustubhk24](https://github.com/kaustubhk24))\\n - [#6333](https://github.com/facebook/docusaurus/pull/6333) feat(website): search in showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6344](https://github.com/facebook/docusaurus/pull/6344) fix(website): make ColorGenerator functional ([@shwaka](https://github.com/shwaka))\\n - [#6340](https://github.com/facebook/docusaurus/pull/6340) docs: minor fix in the sample config for ESM ([@pranabdas](https://github.com/pranabdas))\\n - [#6336](https://github.com/facebook/docusaurus/pull/6336) docs: make upgrade guide always show the latest version ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6320](https://github.com/facebook/docusaurus/pull/6320) chore: upgrade rehype-katex with ESM support, update docs ([@pranabdas](https://github.com/pranabdas))\\n - [#6335](https://github.com/facebook/docusaurus/pull/6335) docs: add Pglet website to showcase ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n - [#6327](https://github.com/facebook/docusaurus/pull/6327) docs: remove typo bracket ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#6316](https://github.com/facebook/docusaurus/pull/6316) docs: add bandwidth.com to showcase ([@ajrice6713](https://github.com/ajrice6713))\\n - [#6313](https://github.com/facebook/docusaurus/pull/6313) docs: add Refine site to showcase ([@omeraplak](https://github.com/omeraplak))\\n - [#6318](https://github.com/facebook/docusaurus/pull/6318) fix(website): various anchor link fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6308](https://github.com/facebook/docusaurus/pull/6308) fix(website): wrap details in mdx-code-block ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6307](https://github.com/facebook/docusaurus/pull/6307) docs: document MD and JSX interoperability issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6299](https://github.com/facebook/docusaurus/pull/6299) docs: add icodex to showcase ([@wood3n](https://github.com/wood3n))\\n - [#6297](https://github.com/facebook/docusaurus/pull/6297) docs: mention setup in monorepo ([@PatelN123](https://github.com/PatelN123))\\n - [#6293](https://github.com/facebook/docusaurus/pull/6293) docs: remove GraphQL mesh from showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6231](https://github.com/facebook/docusaurus/pull/6231) docs: update showcase images; remove GraphQL Code Generator site ([@PatelN123](https://github.com/PatelN123))\\n - [#6285](https://github.com/facebook/docusaurus/pull/6285) refactor(website): further optimize showcase images ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6281](https://github.com/facebook/docusaurus/pull/6281) docs: Add kwatch to showcase ([@abahmed](https://github.com/abahmed))\\n - [#6280](https://github.com/facebook/docusaurus/pull/6280) docs: elaborate on doc versioning ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6043](https://github.com/facebook/docusaurus/pull/6043) fix(website): resize showcase images, tighten CI check ([@armano2](https://github.com/armano2))\\n - [#6274](https://github.com/facebook/docusaurus/pull/6274) docs: add dyte docs to showcase ([@vaibhavshn](https://github.com/vaibhavshn))\\n - [#6278](https://github.com/facebook/docusaurus/pull/6278) docs: add Khyron Realm to showcase ([@alexgrigoras](https://github.com/alexgrigoras))\\n - [#6271](https://github.com/facebook/docusaurus/pull/6271) docs: add FlatifyCSS to showcase ([@amir2mi](https://github.com/amir2mi))\\n - [#6275](https://github.com/facebook/docusaurus/pull/6275) fix(website): fix config-tabs breaking after translation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6269](https://github.com/facebook/docusaurus/pull/6269) docs: add Ionic to showcase ([@ltm](https://github.com/ltm))\\n - [#6272](https://github.com/facebook/docusaurus/pull/6272) docs: make tsconfig work OOTB in typescript guide ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6265](https://github.com/facebook/docusaurus/pull/6265) docs: add Eric JiuRan\'s blog to showcase ([@1084350607](https://github.com/1084350607))\\n - [#6242](https://github.com/facebook/docusaurus/pull/6242) docs(showcase): update oxidizer website url ([@vandreleal](https://github.com/vandreleal))\\n - [#6226](https://github.com/facebook/docusaurus/pull/6226) docs: update showcase data for digital support notes ([@PatelN123](https://github.com/PatelN123))\\n - [#6224](https://github.com/facebook/docusaurus/pull/6224) docs: add TalentBrick to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6223](https://github.com/facebook/docusaurus/pull/6223) docs: normalize CodeBlock highlighting ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6214](https://github.com/facebook/docusaurus/pull/6214) feat(website): improve prism themes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6215](https://github.com/facebook/docusaurus/pull/6215) docs: use BrowserWindow for Markdown demos ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6193](https://github.com/facebook/docusaurus/pull/6193) docs: normalize plugin API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6209](https://github.com/facebook/docusaurus/pull/6209) docs: elaborate on static asset resolution ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6207](https://github.com/facebook/docusaurus/pull/6207) docs: add default value for BrowserWindow URL field ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6206](https://github.com/facebook/docusaurus/pull/6206) docs: fix highlighting of YAML front matter ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6191](https://github.com/facebook/docusaurus/pull/6191) docs: fix react live scope button color in dark mode ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6188](https://github.com/facebook/docusaurus/pull/6188) docs: add Layer0 to deployment guide ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n - [#6184](https://github.com/facebook/docusaurus/pull/6184) docs: remove mention of \'UA-\' in gtag ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#6181](https://github.com/facebook/docusaurus/pull/6181) docs: add GTFS-to-HTML to showcase ([@brendannee](https://github.com/brendannee))\\n - [#6178](https://github.com/facebook/docusaurus/pull/6178) docs: add Digital Support Notes to showcase ([@PatelN123](https://github.com/PatelN123))\\n - [#6170](https://github.com/facebook/docusaurus/pull/6170) docs: add LabVIEW coding experience to showcase ([@ruanqizhen](https://github.com/ruanqizhen))\\n - [#6164](https://github.com/facebook/docusaurus/pull/6164) docs: fix import module name of theme/Admonition ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6158](https://github.com/facebook/docusaurus/pull/6158) docs: add Astronomer to showcase ([@jwitz](https://github.com/jwitz))\\n- `create-docusaurus`\\n - [#5822](https://github.com/facebook/docusaurus/pull/5822) feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6187](https://github.com/facebook/docusaurus/pull/6187) docs: make installation guide more beginner-friendly ([@PatelN123](https://github.com/PatelN123))\\n- `docusaurus-utils`\\n - [#6204](https://github.com/facebook/docusaurus/pull/6204) docs: recommend highlighting with comments than number range ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-theme-classic`\\n - [#6203](https://github.com/facebook/docusaurus/pull/6203) docs: audit grammar issues ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :house: Internal\\n\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6456](https://github.com/facebook/docusaurus/pull/6456) chore: add cSpell for spell checking ([@nschonni](https://github.com/nschonni))\\n- Other\\n - [#6444](https://github.com/facebook/docusaurus/pull/6444) misc: update nvmrc to 14.17.0 to meet dependency requirements ([@jodyheavener](https://github.com/jodyheavener))\\n - [#6441](https://github.com/facebook/docusaurus/pull/6441) misc: fix stylelint erroring when lint-staged passed ignored file ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6421](https://github.com/facebook/docusaurus/pull/6421) chore: fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6381](https://github.com/facebook/docusaurus/pull/6381) chore(website): set cache-control for static assets ([@nschonni](https://github.com/nschonni))\\n - [#6364](https://github.com/facebook/docusaurus/pull/6364) chore: remove Intl polyfills for Jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6325](https://github.com/facebook/docusaurus/pull/6325) chore: add Dependabot for dependency updates ([@nschonni](https://github.com/nschonni))\\n - [#6328](https://github.com/facebook/docusaurus/pull/6328) chore(ci): upgrade actions/github-script to v5 ([@nschonni](https://github.com/nschonni))\\n - [#6332](https://github.com/facebook/docusaurus/pull/6332) chore(deps): bump follow-redirects from 1.14.5 to 1.14.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#6326](https://github.com/facebook/docusaurus/pull/6326) misc(ci): remove redundant \\"CI: true\\" env ([@nschonni](https://github.com/nschonni))\\n - [#6304](https://github.com/facebook/docusaurus/pull/6304) chore: upgrade to Husky 7 ([@nschonni](https://github.com/nschonni))\\n - [#6222](https://github.com/facebook/docusaurus/pull/6222) test: ensure consistent CSS ordering ([@slorber](https://github.com/slorber))\\n - [#6159](https://github.com/facebook/docusaurus/pull/6159) docs: remove useless comment ([@slorber](https://github.com/slorber))\\n - [#6148](https://github.com/facebook/docusaurus/pull/6148) chore(examples): update examples to 2.0.0-beta.14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#6442](https://github.com/facebook/docusaurus/pull/6442) chore: enable stylelint standard config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#6440](https://github.com/facebook/docusaurus/pull/6440) chore: remove some unused dependencies from package.json ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6436](https://github.com/facebook/docusaurus/pull/6436) refactor(theme-classic): render BlogPostItem as one JSX element ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6283](https://github.com/facebook/docusaurus/pull/6283) refactor(theme-classic): apply import/no-named-export eslint rule ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#6413](https://github.com/facebook/docusaurus/pull/6413) fix(content-pages): declare hide_table_of_contents as boolean ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#6399](https://github.com/facebook/docusaurus/pull/6399) refactor: clean up TODO comments ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus`\\n - [#6387](https://github.com/facebook/docusaurus/pull/6387) test: improve test coverage ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#6380](https://github.com/facebook/docusaurus/pull/6380) chore: enable a few fixable ESLint rules ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#6377](https://github.com/facebook/docusaurus/pull/6377) refactor: use findAsyncSequential in a few places ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#6375](https://github.com/facebook/docusaurus/pull/6375) chore: enable eslint-plugin-jest ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6373](https://github.com/facebook/docusaurus/pull/6373) chore: enable react/jsx-closing-bracket-location ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-classic`, `stylelint-copyright`\\n - [#6374](https://github.com/facebook/docusaurus/pull/6374) feat(stylelint-copyright): autofix, stricter config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`\\n - [#6372](https://github.com/facebook/docusaurus/pull/6372) chore: add baseline stylelint rules ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#6369](https://github.com/facebook/docusaurus/pull/6369) chore: upgrade lint-staged and globs ([@nschonni](https://github.com/nschonni))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6341](https://github.com/facebook/docusaurus/pull/6341) chore: regenerate yarn.lock ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#6324](https://github.com/facebook/docusaurus/pull/6324) chore: minor typo cleanup ([@nschonni](https://github.com/nschonni))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#6286](https://github.com/facebook/docusaurus/pull/6286) misc: convert all internal scripts to ESM ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6289](https://github.com/facebook/docusaurus/pull/6289) refactor: move @theme/hooks to @docusaurus/theme-common ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#6287](https://github.com/facebook/docusaurus/pull/6287) refactor: new @docusaurus/plugin-content-docs/client interface ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#6279](https://github.com/facebook/docusaurus/pull/6279) refactor(core): use native types from webpack-dev-server ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-content-docs`\\n - [#6277](https://github.com/facebook/docusaurus/pull/6277) refactor(content-docs): make readVersionsMetadata async ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-types`, `docusaurus`\\n - [#6237](https://github.com/facebook/docusaurus/pull/6237) refactor(core): convert serverEntry.js to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6230](https://github.com/facebook/docusaurus/pull/6230) refactor: enforce type import specifiers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-content-blog`, `docusaurus-utils`, `docusaurus`\\n - [#6229](https://github.com/facebook/docusaurus/pull/6229) refactor(utils): reorganize functions; move authors file resolution to utils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6225](https://github.com/facebook/docusaurus/pull/6225) refactor(theme-translations): improve typing for update script ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6174](https://github.com/facebook/docusaurus/pull/6174) misc(theme-translations): multiple improvements to the update CLI ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 46\\n\\n- AJ Rice ([@ajrice6713](https://github.com/ajrice6713))\\n- Abdelrahman Ahmed ([@abahmed](https://github.com/abahmed))\\n- Alexandru Grigoras ([@alexgrigoras](https://github.com/alexgrigoras))\\n- Amir M. Mohamadi ([@amir2mi](https://github.com/amir2mi))\\n- Anthony McCaigue ([@antmcc49](https://github.com/antmcc49))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brendan Nee ([@brendannee](https://github.com/brendannee))\\n- Chen ([@HiChen404](https://github.com/HiChen404))\\n- Davide Bianchi ([@davidebianchi](https://github.com/davidebianchi))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Edouard Bonlieu ([@edouardb](https://github.com/edouardb))\\n- Feodor Fitsner ([@FeodorFitsner](https://github.com/FeodorFitsner))\\n- Filipe Guerra ([@alias-mac](https://github.com/alias-mac))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Jake Witz ([@jwitz](https://github.com/jwitz))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jody Heavener ([@jodyheavener](https://github.com/jodyheavener))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joseph ([@josephriosIO](https://github.com/josephriosIO))\\n- Josh Goldberg ([@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kaustubh Kulkarni ([@kaustubhk24](https://github.com/kaustubhk24))\\n- Lars Mikkelsen ([@ltm](https://github.com/ltm))\\n- Mikey O\'Toole ([@homotechsual](https://github.com/homotechsual))\\n- Minh Pham ([@lmpham1](https://github.com/lmpham1))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Nayan Patel ([@PatelN123](https://github.com/PatelN123))\\n- Nick Schonning ([@nschonni](https://github.com/nschonni))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Rishi Raj Jain ([@rishi-raj-jain](https://github.com/rishi-raj-jain))\\n- Sanjay Soundarajan ([@megasanjay](https://github.com/megasanjay))\\n- Shun Wakatsuki ([@shwaka](https://github.com/shwaka))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tapan Chudasama ([@tapanchudasama](https://github.com/tapanchudasama))\\n- Vaibhav Shinde ([@vaibhavshn](https://github.com/vaibhavshn))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- [@mcallisto](https://github.com/mcallisto)\\n- [@ruanqizhen](https://github.com/ruanqizhen)\\n- [@wood3n](https://github.com/wood3n)\\n- kuizuo ([@kuizuo](https://github.com/kuizuo))\\n- sgenoud ([@sgenoud](https://github.com/sgenoud))\\n- trent ([@roydukkey](https://github.com/roydukkey))\\n- \xd6mer Faruk APLAK ([@omeraplak](https://github.com/omeraplak))\\n- \u4e45\u67d3 | JiuRan ([@1084350607](https://github.com/1084350607))"},{"id":"/2.0.0-beta.14","metadata":{"permalink":"/changelog/2.0.0-beta.14","source":"@site/changelog/source/2.0.0-beta.14.md","title":"2.0.0-beta.14","description":"New Feature","date":"2021-12-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"6543","alias":"6543","url":"https://github.com/6543","imageURL":"https://github.com/6543.png","key":"6543"},{"name":"Christopher Klint","alias":"christopherklint97","url":"https://github.com/christopherklint97","imageURL":"https://github.com/christopherklint97.png","key":"christopherklint97"},{"name":"colton","alias":"cmpadden","url":"https://github.com/cmpadden","imageURL":"https://github.com/cmpadden.png","key":"cmpadden"},{"name":"Drylozu","alias":"Drylozu","url":"https://github.com/Drylozu","imageURL":"https://github.com/Drylozu.png","key":"Drylozu"},{"name":"Jeroen Claassens","alias":"favna","url":"https://github.com/favna","imageURL":"https://github.com/favna.png","key":"favna"},{"name":"Harsh Mishra","alias":"HarshCasper","url":"https://github.com/HarshCasper","imageURL":"https://github.com/HarshCasper.png","key":"HarshCasper"},{"name":"Himanshu","alias":"himanshu007-creator","url":"https://github.com/himanshu007-creator","imageURL":"https://github.com/himanshu007-creator.png","key":"himanshu007-creator"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Kristoffer K.","alias":"merceyz","url":"https://github.com/merceyz","imageURL":"https://github.com/merceyz.png","key":"merceyz"},{"name":"Yaroslav Serhieiev","alias":"noomorph","url":"https://github.com/noomorph","imageURL":"https://github.com/noomorph.png","key":"noomorph"},{"name":"\u4e0d\u90d1","alias":"notzheng","url":"https://github.com/notzheng","imageURL":"https://github.com/notzheng.png","key":"notzheng"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Ziv","alias":"wewoor","url":"https://github.com/wewoor","imageURL":"https://github.com/wewoor.png","key":"wewoor"},{"name":"Shubhendra Singh Chauhan","alias":"withshubh","url":"https://github.com/withshubh","imageURL":"https://github.com/withshubh.png","key":"withshubh"},{"name":"Wout Vandesompele","alias":"wowtvds","url":"https://github.com/wowtvds","imageURL":"https://github.com/wowtvds.png","key":"wowtvds"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-21T20:00","authors":["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15"},"nextItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6132](https://github.com/facebook/docusaurus/pull/6132) feat(theme-classic): new configuration syntax for a simple footer ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6125](https://github.com/facebook/docusaurus/pull/6125) feat(theme-common): stable classname for code blocks ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5848](https://github.com/facebook/docusaurus/pull/5848) feat(theme-classic): standalone Admonition component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6082](https://github.com/facebook/docusaurus/pull/6082) feat(theme-classic): allow passing additional attributes to tab headings ([@Drylozu](https://github.com/Drylozu))\\n- `docusaurus-plugin-content-blog`\\n - [#6126](https://github.com/facebook/docusaurus/pull/6126) feat(content-blog): support json feed ([@notzheng](https://github.com/notzheng))\\n- `docusaurus`\\n - [#6107](https://github.com/facebook/docusaurus/pull/6107) feat(core): allow plugins to customize/override Webpack devServer config ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#6146](https://github.com/facebook/docusaurus/pull/6146) fix(migrate): do not modify non-MD files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#6128](https://github.com/facebook/docusaurus/pull/6128) fix: do not use aria-hidden in heading anchor links ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6124](https://github.com/facebook/docusaurus/pull/6124) fix(content-docs): restore behavior when pagination front matter is null ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6085](https://github.com/facebook/docusaurus/pull/6085) fix(content-docs): getMainDocId should return doc with both versioned or unversioned id ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#6097](https://github.com/facebook/docusaurus/pull/6097) fix: declare missing dependencies ([@merceyz](https://github.com/merceyz))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `lqip-loader`\\n - [#6094](https://github.com/facebook/docusaurus/pull/6094) fix: add missing dependencies on tslib ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-translations`\\n - [#6088](https://github.com/facebook/docusaurus/pull/6088) fix(theme-translations): publish theme-translation lib, including typedef ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6053](https://github.com/facebook/docusaurus/pull/6053) feat(theme-classic): allow stylizing doc paginator arrows ([@noomorph](https://github.com/noomorph))\\n - [#6121](https://github.com/facebook/docusaurus/pull/6121) fix(theme-classic): add outline to focused code blocks ([@christopherklint97](https://github.com/christopherklint97))\\n - [#6118](https://github.com/facebook/docusaurus/pull/6118) refactor: remove some useless code ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`, `docusaurus-logger`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#5994](https://github.com/facebook/docusaurus/pull/5994) refactor: unify log format with new logger utility ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#6119](https://github.com/facebook/docusaurus/pull/6119) fix(create-docusaurus): make initial editUrl functional ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6095](https://github.com/facebook/docusaurus/pull/6095) fix(create-docusaurus): give a clearer message when installation failed ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#6142](https://github.com/facebook/docusaurus/pull/6142) docs: normalize usage of placeholders ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5918](https://github.com/facebook/docusaurus/pull/5918) docs: refactor & refine lifecycle API docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6138](https://github.com/facebook/docusaurus/pull/6138) docs: add Smart Docs to showcase ([@wowtvds](https://github.com/wowtvds))\\n- [#6137](https://github.com/facebook/docusaurus/pull/6137) docs: add ToolJet to showcase ([@withshubh](https://github.com/withshubh))\\n- [#6141](https://github.com/facebook/docusaurus/pull/6141) docs: add WoodpeckerCI to showcase ([@6543](https://github.com/6543))\\n- [#6135](https://github.com/facebook/docusaurus/pull/6135) docs: mention admonition quirks with Prettier ([@yangshun](https://github.com/yangshun))\\n- [#6131](https://github.com/facebook/docusaurus/pull/6131) docs: elaborate on \\"docs-only\\" and \\"blog-only\\" ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- [#6134](https://github.com/facebook/docusaurus/pull/6134) docs: update link to init template README.md ([@cmpadden](https://github.com/cmpadden))\\n- [#6130](https://github.com/facebook/docusaurus/pull/6130) docs: refactor docs sidebar doc ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6129](https://github.com/facebook/docusaurus/pull/6129) docs: refactor styling/theming docs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6112](https://github.com/facebook/docusaurus/pull/6112) docs: mention that SEO through front matter is better than head tag ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6120](https://github.com/facebook/docusaurus/pull/6120) refactor(website): make deploy preview open next version docs by default ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#6111](https://github.com/facebook/docusaurus/pull/6111) docs: add Molecule website to showcase ([@wewoor](https://github.com/wewoor))\\n- [#6089](https://github.com/facebook/docusaurus/pull/6089) docs: add Enarx website to showcase ([@HarshCasper](https://github.com/HarshCasper))\\n- [#6090](https://github.com/facebook/docusaurus/pull/6090) docs: add sapphire to showcase ([@favna](https://github.com/favna))\\n- [#6091](https://github.com/facebook/docusaurus/pull/6091) docs(showcase): \\"much more pages\\" => \\"many more pages\\" ([@favna](https://github.com/favna))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#6144](https://github.com/facebook/docusaurus/pull/6144) fix(theme-classic): fix translation when footer has no links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#6143](https://github.com/facebook/docusaurus/pull/6143) test: fix async tests resolved in random order ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6123](https://github.com/facebook/docusaurus/pull/6123) test: use snapshots for sidebar tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6122](https://github.com/facebook/docusaurus/pull/6122) fix(website): fix yarn build:website:fast ([@slorber](https://github.com/slorber))\\n - [#6080](https://github.com/facebook/docusaurus/pull/6080) chore: add npm and pnpm to E2E tests ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#6092](https://github.com/facebook/docusaurus/pull/6092) misc: ignore some files during npm publish ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 17\\n\\n- 6543 ([@6543](https://github.com/6543))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Christopher Klint ([@christopherklint97](https://github.com/christopherklint97))\\n- Harsh Mishra ([@HarshCasper](https://github.com/HarshCasper))\\n- Himanshu ([@himanshu007-creator](https://github.com/himanshu007-creator))\\n- Jeroen Claassens ([@favna](https://github.com/favna))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kristoffer K. ([@merceyz](https://github.com/merceyz))\\n- Shubhendra Singh Chauhan ([@withshubh](https://github.com/withshubh))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Wout Vandesompele ([@wowtvds](https://github.com/wowtvds))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yaroslav Serhieiev ([@noomorph](https://github.com/noomorph))\\n- Ziv ([@wewoor](https://github.com/wewoor))\\n- [@Drylozu](https://github.com/Drylozu)\\n- colton ([@cmpadden](https://github.com/cmpadden))\\n- \u4e0d\u90d1 ([@notzheng](https://github.com/notzheng))"},{"id":"/2.0.0-beta.13","metadata":{"permalink":"/changelog/2.0.0-beta.13","source":"@site/changelog/source/2.0.0-beta.13.md","title":"2.0.0-beta.13","description":"Good npm publish, same code as beta.11","date":"2021-12-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14"},"nextItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nGood npm publish, same code as beta.11"},{"id":"/2.0.0-beta.12","metadata":{"permalink":"/changelog/2.0.0-beta.12","source":"@site/changelog/source/2.0.0-beta.12.md","title":"2.0.0-beta.12","description":"Bad npm publish, use beta.13 instead","date":"2021-12-10T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13"},"nextItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nBad npm publish, use beta.13 instead"},{"id":"/2.0.0-beta.11","metadata":{"permalink":"/changelog/2.0.0-beta.11","source":"@site/changelog/source/2.0.0-beta.11.md","title":"2.0.0-beta.11","description":"Bug Fix","date":"2021-12-10T18:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-10T18:00","authors":["pranabdas","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12"},"nextItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`\\n - [#6078](https://github.com/facebook/docusaurus/pull/6078) fix: move docusaurus core back to hard dependencies ([@pranabdas](https://github.com/pranabdas))\\n\\n## Committers: 2\\n\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))"},{"id":"/2.0.0-beta.10","metadata":{"permalink":"/changelog/2.0.0-beta.10","source":"@site/changelog/source/2.0.0-beta.10.md","title":"2.0.0-beta.10","description":"New Feature","date":"2021-12-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Afshin Mehrabani","alias":"afshinm","url":"https://github.com/afshinm","imageURL":"https://github.com/afshinm.png","key":"afshinm"},{"name":"Rohit Agrawal","alias":"agrawal-rohit","url":"https://github.com/agrawal-rohit","imageURL":"https://github.com/agrawal-rohit.png","key":"agrawal-rohit"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"Christophe Chaudier","alias":"cchaudier","url":"https://github.com/cchaudier","imageURL":"https://github.com/cchaudier.png","key":"cchaudier"},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny"},{"name":"chima ilo","alias":"chimailo","url":"https://github.com/chimailo","imageURL":"https://github.com/chimailo.png","key":"chimailo"},{"name":"Shoaib Sajid","alias":"dexbiobot","url":"https://github.com/dexbiobot","imageURL":"https://github.com/dexbiobot.png","key":"dexbiobot"},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken"},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam"},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev"},{"name":"Fernando Maia","alias":"fsmaia","url":"https://github.com/fsmaia","imageURL":"https://github.com/fsmaia.png","key":"fsmaia"},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens"},{"name":"Hemant Sachdeva","alias":"HemantSachdeva","url":"https://github.com/HemantSachdeva","imageURL":"https://github.com/HemantSachdeva.png","key":"HemantSachdeva"},{"name":"Jarar","alias":"JararvisQ","url":"https://github.com/JararvisQ","imageURL":"https://github.com/JararvisQ.png","key":"JararvisQ"},{"name":"Jeff Shillitto","alias":"jeffski","url":"https://github.com/jeffski","imageURL":"https://github.com/jeffski.png","key":"jeffski"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Matej Jellus","alias":"juffalow","url":"https://github.com/juffalow","imageURL":"https://github.com/juffalow.png","key":"juffalow"},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan"},{"name":"Konstantin Popov","alias":"KonstHardy","url":"https://github.com/KonstHardy","imageURL":"https://github.com/KonstHardy.png","key":"KonstHardy"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Ludovico Fischer","alias":"ludofischer","url":"https://github.com/ludofischer","imageURL":"https://github.com/ludofischer.png","key":"ludofischer"},{"name":"Martin \u0160o\u0161i\u0107","alias":"Martinsos","url":"https://github.com/Martinsos","imageURL":"https://github.com/Martinsos.png","key":"Martinsos"},{"name":"Matthijs Groen","alias":"matthijsgroen","url":"https://github.com/matthijsgroen","imageURL":"https://github.com/matthijsgroen.png","key":"matthijsgroen"},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP"},{"name":"Molly White","alias":"molly","url":"https://github.com/molly","imageURL":"https://github.com/molly.png","key":"molly"},{"name":"Morooka Kotaro","alias":"MorookaKotaro","url":"https://github.com/MorookaKotaro","imageURL":"https://github.com/MorookaKotaro.png","key":"MorookaKotaro"},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus"},{"name":"pal-sig","alias":"pal-sig","url":"https://github.com/pal-sig","imageURL":"https://github.com/pal-sig.png","key":"pal-sig"},{"name":"Patitotective","alias":"Patitotective","url":"https://github.com/Patitotective","imageURL":"https://github.com/Patitotective.png","key":"Patitotective"},{"name":"Patrik M\xe4siar","alias":"patrikmasiar","url":"https://github.com/patrikmasiar","imageURL":"https://github.com/patrikmasiar.png","key":"patrikmasiar"},{"name":"Paul Biggar","alias":"pbiggar","url":"https://github.com/pbiggar","imageURL":"https://github.com/pbiggar.png","key":"pbiggar"},{"name":"Brennan Kinney","alias":"polarathene","url":"https://github.com/polarathene","imageURL":"https://github.com/polarathene.png","key":"polarathene"},{"name":"Yongmin Hong","alias":"revi","url":"https://github.com/revi","imageURL":"https://github.com/revi.png","key":"revi"},{"name":"Robin M\xe9tral","alias":"robinmetral","url":"https://github.com/robinmetral","imageURL":"https://github.com/robinmetral.png","key":"robinmetral"},{"name":"Ronny Roeller","alias":"ronnyroeller","url":"https://github.com/ronnyroeller","imageURL":"https://github.com/ronnyroeller.png","key":"ronnyroeller"},{"name":"Ivan Boothe","alias":"rootwork","url":"https://github.com/rootwork","imageURL":"https://github.com/rootwork.png","key":"rootwork"},{"name":"Rey","alias":"rsapkf","url":"https://github.com/rsapkf","imageURL":"https://github.com/rsapkf.png","key":"rsapkf"},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal"},{"name":"Can Olcer","alias":"shafy","url":"https://github.com/shafy","imageURL":"https://github.com/shafy.png","key":"shafy"},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan"},{"name":"Sharon Koech","alias":"skoech","url":"https://github.com/skoech","imageURL":"https://github.com/skoech.png","key":"skoech"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Soham Shah","alias":"sohamsshah","url":"https://github.com/sohamsshah","imageURL":"https://github.com/sohamsshah.png","key":"sohamsshah"},{"name":"Paden Clayton","alias":"spyke01","url":"https://github.com/spyke01","imageURL":"https://github.com/spyke01.png","key":"spyke01"},{"name":"Stan Kocken","alias":"StanKocken","url":"https://github.com/StanKocken","imageURL":"https://github.com/StanKocken.png","key":"StanKocken"},{"name":"Swalah Amani","alias":"swalahamani","url":"https://github.com/swalahamani","imageURL":"https://github.com/swalahamani.png","key":"swalahamani"},{"name":"Swapnil M Mane","alias":"swapnilmmane","url":"https://github.com/swapnilmmane","imageURL":"https://github.com/swapnilmmane.png","key":"swapnilmmane"},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-12-09T20:00","authors":["afshinm","agrawal-rohit","armano2","cchaudier","cerkiewny","chimailo","dexbiobot","dsmmcken","duanwilliam","fishmandev","fsmaia","hbulens","HemantSachdeva","JararvisQ","jeffski","Josh-Cena","juffalow","juzhiyuan","KonstHardy","lex111","ludofischer","Martinsos","matthijsgroen","MisterFISHUP","molly","MorookaKotaro","oriooctopus","pal-sig","Patitotective","patrikmasiar","pbiggar","polarathene","revi","robinmetral","ronnyroeller","rootwork","rsapkf","semoal","shafy","sivapalan","skoech","slorber","sohamsshah","spyke01","StanKocken","swalahamani","swapnilmmane","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11"},"nextItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `create-docusaurus`, `docusaurus-types`, `docusaurus`\\n - [#5930](https://github.com/facebook/docusaurus/pull/5930) feat: shorthands for themes/plugins/presets configuration ([@fsmaia](https://github.com/fsmaia))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-types`, `docusaurus`\\n - [#4095](https://github.com/facebook/docusaurus/pull/4095) feat(core): allow sourcing from multiple static directories ([@oriooctopus](https://github.com/oriooctopus))\\n- `create-docusaurus`\\n - [#3458](https://github.com/facebook/docusaurus/pull/3458) feat(create-docusaurus): allow using local folder as template ([@afshinm](https://github.com/afshinm))\\n- `docusaurus-plugin-content-blog`\\n - [#5787](https://github.com/facebook/docusaurus/pull/5787) feat(content-blog): allow sorting posts in ascending order ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3104](https://github.com/facebook/docusaurus/pull/3104) feat(core): Add React ErrorBoundary component + theme default boundaries ([@spyke01](https://github.com/spyke01))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#5830](https://github.com/facebook/docusaurus/pull/5830) feat(content-docs): sidebar category linking to document or auto-generated index page ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#6070](https://github.com/facebook/docusaurus/pull/6070) fix(theme-common): useLocationChange fire un-necessarily twice ([@slorber](https://github.com/slorber))\\n - [#6040](https://github.com/facebook/docusaurus/pull/6040) fix: browser storage (localStorage) is unreliable: api should fail-safe ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#6047](https://github.com/facebook/docusaurus/pull/6047) fix: make Docusaurus PnP strict mode compatible ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6052](https://github.com/facebook/docusaurus/pull/6052) fix(core): fix error boundary import disrupting CSS order ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#6061](https://github.com/facebook/docusaurus/pull/6061) fix(content-blog): make post ID unique ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5983](https://github.com/facebook/docusaurus/pull/5983) fix(core): do not apply theme-init alias to user component ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5798](https://github.com/facebook/docusaurus/pull/5798) fix(cli): update notifier should be shown if current is less than latest ([@semoal](https://github.com/semoal))\\n - [#5864](https://github.com/facebook/docusaurus/pull/5864) fix: respect base URL when serving content by webpack dev server ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#5945](https://github.com/facebook/docusaurus/pull/5945) fix(module-type-aliases): add svg declaration ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus-theme-classic`\\n - [#5873](https://github.com/facebook/docusaurus/pull/5873) fix(theme-classic): fix announcementBar css ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#6003](https://github.com/facebook/docusaurus/pull/6003) fix(theme-classic): make nav dropdowns focusable ([@robinmetral](https://github.com/robinmetral))\\n - [#6000](https://github.com/facebook/docusaurus/pull/6000) fix(theme-classic): make hash link in heading not selectable ([@JararvisQ](https://github.com/JararvisQ))\\n - [#5944](https://github.com/facebook/docusaurus/pull/5944) fix: translate all remaining english sentence in French ([@StanKocken](https://github.com/StanKocken))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#6048](https://github.com/facebook/docusaurus/pull/6048) refactor: capitalize locales when creating i18n config ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-translations`\\n - [#5976](https://github.com/facebook/docusaurus/pull/5976) feat(theme-translations): add extra Korean translation, fix typo ([@revi](https://github.com/revi))\\n - [#6060](https://github.com/facebook/docusaurus/pull/6060) chore(theme-translations): complete Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-plugin-content-docs`\\n - [#6065](https://github.com/facebook/docusaurus/pull/6065) refactor: remove deprecated docs homePageId option ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#6056](https://github.com/facebook/docusaurus/pull/6056) refactor: remove unused metadata field for homepage ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#6049](https://github.com/facebook/docusaurus/pull/6049) refactor: simplify Toggle component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-types`\\n - [#5981](https://github.com/facebook/docusaurus/pull/5981) refactor: minor ESLint improvements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`\\n - [#5995](https://github.com/facebook/docusaurus/pull/5995) chore(plugin-pwa): change core-js version in package.json to v3 ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-theme-translations`, `docusaurus-utils`\\n - [#5849](https://github.com/facebook/docusaurus/pull/5849) refactor: define own translations in other themes ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-types`\\n - [#5959](https://github.com/facebook/docusaurus/pull/5959) refactor(types): correct HtmlTags types ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#5829](https://github.com/facebook/docusaurus/pull/5829) refactor: optimize clone and checkout in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5899](https://github.com/facebook/docusaurus/pull/5899) feat(core): give more hints when plugins have duplicate IDs ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5832](https://github.com/facebook/docusaurus/pull/5832) refactor(ganalytics, gtag): move options out of themeConfig ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5840](https://github.com/facebook/docusaurus/pull/5840) feat: allow GIT_USER env var to be unset if SSH is used ([@wpyoga](https://github.com/wpyoga))\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#5871](https://github.com/facebook/docusaurus/pull/5871) misc: replace all \\"Metadatas\\" with \\"Metadata\\" ([@swalahamani](https://github.com/swalahamani))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#6063](https://github.com/facebook/docusaurus/pull/6063) docs: add moja global to showcase ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6069](https://github.com/facebook/docusaurus/pull/6069) docs: update CONTRIBUTING for website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6062](https://github.com/facebook/docusaurus/pull/6062) refactor(website): improve wording in comments of showcase data ([@sohamsshah](https://github.com/sohamsshah))\\n - [#6045](https://github.com/facebook/docusaurus/pull/6045) docs: add \\"discord resources\\" to showcase ([@dexbiobot](https://github.com/dexbiobot))\\n - [#6026](https://github.com/facebook/docusaurus/pull/6026) docs(deployment): add cost-benefit analysis with different options ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5955](https://github.com/facebook/docusaurus/pull/5955) docs: add Pearl UI website to showcase ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n - [#5989](https://github.com/facebook/docusaurus/pull/5989) misc: update CONTRIBUTING to reflect status quo ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5845](https://github.com/facebook/docusaurus/pull/5845) docs(admin): update repo testing instructions to reflect v2 ([@wpyoga](https://github.com/wpyoga))\\n - [#6019](https://github.com/facebook/docusaurus/pull/6019) docs: update Netlify url config option in deployment instructions ([@rsapkf](https://github.com/rsapkf))\\n - [#6015](https://github.com/facebook/docusaurus/pull/6015) docs: add Tremor website to showcase page ([@skoech](https://github.com/skoech))\\n - [#5997](https://github.com/facebook/docusaurus/pull/5997) refactor(website): various fixes and improvements on Showcase page ([@lex111](https://github.com/lex111))\\n - [#6008](https://github.com/facebook/docusaurus/pull/6008) docs: improve algolia integration instructions ([@shafy](https://github.com/shafy))\\n - [#6006](https://github.com/facebook/docusaurus/pull/6006) docs: improve explanation for url config in GH Pages ([@Martinsos](https://github.com/Martinsos))\\n - [#6001](https://github.com/facebook/docusaurus/pull/6001) docs: add Dime.Scheduler SDK to showcase ([@hbulens](https://github.com/hbulens))\\n - [#5984](https://github.com/facebook/docusaurus/pull/5984) docs: add PREFS website to showcase ([@Patitotective](https://github.com/Patitotective))\\n - [#5967](https://github.com/facebook/docusaurus/pull/5967) docs(website): Add docsearch migration blog post ([@slorber](https://github.com/slorber))\\n - [#5968](https://github.com/facebook/docusaurus/pull/5968) refactor(website): shadow on showcase toggle ([@dsmmcken](https://github.com/dsmmcken))\\n - [#5979](https://github.com/facebook/docusaurus/pull/5979) docs: update links to default translations dir ([@lex111](https://github.com/lex111))\\n - [#5969](https://github.com/facebook/docusaurus/pull/5969) refactor(website): polish on Showcase page ([@slorber](https://github.com/slorber))\\n - [#5966](https://github.com/facebook/docusaurus/pull/5966) docs: add Darklang to showcase ([@pbiggar](https://github.com/pbiggar))\\n - [#5970](https://github.com/facebook/docusaurus/pull/5970) docs: add Remirror to showcase ([@ronnyroeller](https://github.com/ronnyroeller))\\n - [#5971](https://github.com/facebook/docusaurus/pull/5971) docs: add Webiny docs to showcase page ([@swapnilmmane](https://github.com/swapnilmmane))\\n - [#5953](https://github.com/facebook/docusaurus/pull/5953) docs: fix BrowserOnly return statement ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n - [#5949](https://github.com/facebook/docusaurus/pull/5949) docs: update Signoz showcase details ([@pal-sig](https://github.com/pal-sig))\\n - [#5948](https://github.com/facebook/docusaurus/pull/5948) fix(website): fix APITable anchor ID having extra hash ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5947](https://github.com/facebook/docusaurus/pull/5947) fix(website): fix APITable anchor link ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5925](https://github.com/facebook/docusaurus/pull/5925) docs: add Froggit site to showcase page ([@cchaudier](https://github.com/cchaudier))\\n - [#5928](https://github.com/facebook/docusaurus/pull/5928) docs: Add Shotstack showcase user ([@jeffski](https://github.com/jeffski))\\n - [#5934](https://github.com/facebook/docusaurus/pull/5934) docs: fix a typo in CHANGELOG ([@KonstHardy](https://github.com/KonstHardy))\\n - [#5921](https://github.com/facebook/docusaurus/pull/5921) docs: add Signoz site to showcase site ([@pal-sig](https://github.com/pal-sig))\\n - [#5891](https://github.com/facebook/docusaurus/pull/5891) docs: new APITable comp to render large tables ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5917](https://github.com/facebook/docusaurus/pull/5917) docs: make API sidebar partially autogenerated ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5903](https://github.com/facebook/docusaurus/pull/5903) docs: refer to deployed branch as deployment rather than target ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5902](https://github.com/facebook/docusaurus/pull/5902) fix(website): fix i18n routes for Canny board ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5900](https://github.com/facebook/docusaurus/pull/5900) docs: document global variables in MDX scope ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4409](https://github.com/facebook/docusaurus/pull/4409) docs: add example for GitHub Pages deployment; rewrite deployment section ([@polarathene](https://github.com/polarathene))\\n - [#5888](https://github.com/facebook/docusaurus/pull/5888) docs: update GitHub deployment instructions ([@rootwork](https://github.com/rootwork))\\n - [#5895](https://github.com/facebook/docusaurus/pull/5895) docs: Add juffalow.com to Docusaurus showcase ([@juffalow](https://github.com/juffalow))\\n - [#5881](https://github.com/facebook/docusaurus/pull/5881) docs: fix wrong code sample in docusaurus-core ([@matthijsgroen](https://github.com/matthijsgroen))\\n - [#5875](https://github.com/facebook/docusaurus/pull/5875) docs: add patrikmasiar website showcase ([@patrikmasiar](https://github.com/patrikmasiar))\\n - [#5876](https://github.com/facebook/docusaurus/pull/5876) docs: \'5 minutes tutorial\' -> \'5-minute tutorial\' ([@molly](https://github.com/molly))\\n - [#5759](https://github.com/facebook/docusaurus/pull/5759) docs: create SEO documentation page ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5869](https://github.com/facebook/docusaurus/pull/5869) docs: remove duplicated appId property ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5868](https://github.com/facebook/docusaurus/pull/5868) docs: fix a typo in using-themes.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5862](https://github.com/facebook/docusaurus/pull/5862) misc: show only latest archive alpha/beta versions dropdown ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5742](https://github.com/facebook/docusaurus/pull/5742) feat(website): redesign of showcase page ([@chimailo](https://github.com/chimailo))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-common`, `docusaurus-theme-translations`, `docusaurus-utils-validation`, `docusaurus`\\n - [#6071](https://github.com/facebook/docusaurus/pull/6071) refactor: add blank lines below all copyright headers ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#6068](https://github.com/facebook/docusaurus/pull/6068) chore: add prefix to needs triage label; separate Windows test workflow ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6031](https://github.com/facebook/docusaurus/pull/6031) chore: upgrade netlify-cli ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6012](https://github.com/facebook/docusaurus/pull/6012) chore(website): enable strict compiler option ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#6002](https://github.com/facebook/docusaurus/pull/6002) chore(ci): add GitHub action for showcase testing ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5977](https://github.com/facebook/docusaurus/pull/5977) chore: generate dogfooding test for long pathname during CI ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5950](https://github.com/facebook/docusaurus/pull/5950) misc(codeowners): add @Josh-Cena to CODEOWNERS ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5919](https://github.com/facebook/docusaurus/pull/5919) misc(workflow): E2E tests should not be run with website changes ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5907](https://github.com/facebook/docusaurus/pull/5907) chore(workflow): merge jobs into one workflow & give each job a name ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5889](https://github.com/facebook/docusaurus/pull/5889) chore(website): enable eslint in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5870](https://github.com/facebook/docusaurus/pull/5870) chore(README): fix broken GitHub Actions Workflow Status icon ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- `docusaurus-module-type-aliases`, `docusaurus-types`, `docusaurus`\\n - [#6064](https://github.com/facebook/docusaurus/pull/6064) refactor(core): fix types for client code ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-translations`, `docusaurus-utils`, `docusaurus`\\n - [#6055](https://github.com/facebook/docusaurus/pull/6055) chore: clean up dev dependency declarations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`\\n - [#6010](https://github.com/facebook/docusaurus/pull/6010) chore: upgrade prettier; rename prettier scripts as format ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`, `docusaurus`\\n - [#5958](https://github.com/facebook/docusaurus/pull/5958) chore: update @svgr/webpack to version 6 ([@ludofischer](https://github.com/ludofischer))\\n- `docusaurus`\\n - [#5998](https://github.com/facebook/docusaurus/pull/5998) chore: upgrade webpack-dev-server to v4.5.0 ([@lex111](https://github.com/lex111))\\n - [#5965](https://github.com/facebook/docusaurus/pull/5965) fix(core): apply staticDirectories to base webpack config ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5985](https://github.com/facebook/docusaurus/pull/5985) chore: cleanup dependency declaration in package.json ([@armano2](https://github.com/armano2))\\n- `create-docusaurus`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#5963](https://github.com/facebook/docusaurus/pull/5963) chore: upgrade TypeScript & other ESLint related deps ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5962](https://github.com/facebook/docusaurus/pull/5962) refactor(content-docs): move isCategoriesShorthand to utils ([@armano2](https://github.com/armano2))\\n - [#5906](https://github.com/facebook/docusaurus/pull/5906) fix(content-docs): do not echo git history to console ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5905](https://github.com/facebook/docusaurus/pull/5905) misc(plugin-docs): fix Windows test snapshot for git history retrieval ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5904](https://github.com/facebook/docusaurus/pull/5904) refactor(content-docs): use shelljs instead of execa ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5940](https://github.com/facebook/docusaurus/pull/5940) refactor(plugin-ideal-image): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`\\n - [#5941](https://github.com/facebook/docusaurus/pull/5941) refactor(plugin-pwa): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5935](https://github.com/facebook/docusaurus/pull/5935) refactor(theme-search-algolia): migrate package to TS ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#5946](https://github.com/facebook/docusaurus/pull/5946) refactor: move deps declarations into src ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#5914](https://github.com/facebook/docusaurus/pull/5914) refactor: improve setup of type declaration files ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5922](https://github.com/facebook/docusaurus/pull/5922) refactor(theme-classic): move some logic of CodeBlock to theme-common ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#5931](https://github.com/facebook/docusaurus/pull/5931) refactor(remark-plugin-npm2yarn): migrate package to TS ([@duanwilliam](https://github.com/duanwilliam))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#5806](https://github.com/facebook/docusaurus/pull/5806) refactor: use js-yaml to parse both JSON and YAML ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 48\\n\\n- Afshin Mehrabani ([@afshinm](https://github.com/afshinm))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Brennan Kinney ([@polarathene](https://github.com/polarathene))\\n- Can Olcer ([@shafy](https://github.com/shafy))\\n- Christophe Chaudier ([@cchaudier](https://github.com/cchaudier))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- FISH UP ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- Fernando Maia ([@fsmaia](https://github.com/fsmaia))\\n- Hemant Sachdeva ([@HemantSachdeva](https://github.com/HemantSachdeva))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- Ivan Boothe ([@rootwork](https://github.com/rootwork))\\n- Jarar ([@JararvisQ](https://github.com/JararvisQ))\\n- Jeff Shillitto ([@jeffski](https://github.com/jeffski))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Konstantin Popov ([@KonstHardy](https://github.com/KonstHardy))\\n- Ludovico Fischer ([@ludofischer](https://github.com/ludofischer))\\n- Martin \u0160o\u0161i\u0107 ([@Martinsos](https://github.com/Martinsos))\\n- Matej Jellus ([@juffalow](https://github.com/juffalow))\\n- Matthijs Groen ([@matthijsgroen](https://github.com/matthijsgroen))\\n- Molly White ([@molly](https://github.com/molly))\\n- Morooka Kotaro ([@MorookaKotaro](https://github.com/MorookaKotaro))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Paden Clayton ([@spyke01](https://github.com/spyke01))\\n- Patitotective ([@Patitotective](https://github.com/Patitotective))\\n- Patrik M\xe4siar ([@patrikmasiar](https://github.com/patrikmasiar))\\n- Paul Biggar ([@pbiggar](https://github.com/pbiggar))\\n- Rey ([@rsapkf](https://github.com/rsapkf))\\n- Robin M\xe9tral ([@robinmetral](https://github.com/robinmetral))\\n- Rohit Agrawal ([@agrawal-rohit](https://github.com/agrawal-rohit))\\n- Ronny Roeller ([@ronnyroeller](https://github.com/ronnyroeller))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Sharon Koech ([@skoech](https://github.com/skoech))\\n- Shoaib Sajid ([@dexbiobot](https://github.com/dexbiobot))\\n- Soham Shah ([@sohamsshah](https://github.com/sohamsshah))\\n- Stan Kocken ([@StanKocken](https://github.com/StanKocken))\\n- Swalah Amani ([@swalahamani](https://github.com/swalahamani))\\n- Swapnil M Mane ([@swapnilmmane](https://github.com/swapnilmmane))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Yongmin Hong ([@revi](https://github.com/revi))\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@pal-sig](https://github.com/pal-sig)\\n- chima ilo ([@chimailo](https://github.com/chimailo))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.9","metadata":{"permalink":"/changelog/2.0.0-beta.9","source":"@site/changelog/source/2.0.0-beta.9.md","title":"2.0.0-beta.9","description":"New Feature","date":"2021-11-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Avi Vahl","alias":"AviVahl","url":"https://github.com/AviVahl","imageURL":"https://github.com/AviVahl.png","key":"AviVahl"},{"name":"Devtato","alias":"cerkiewny","url":"https://github.com/cerkiewny","imageURL":"https://github.com/cerkiewny.png","key":"cerkiewny"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Dominik Meyer","alias":"dominikmeyersap","url":"https://github.com/dominikmeyersap","imageURL":"https://github.com/dominikmeyersap.png","key":"dominikmeyersap"},{"name":"Dmitriy Fishman","alias":"fishmandev","url":"https://github.com/fishmandev","imageURL":"https://github.com/fishmandev.png","key":"fishmandev"},{"name":"Gabriel Falc\xe3o","alias":"gabrielfalcao","url":"https://github.com/gabrielfalcao","imageURL":"https://github.com/gabrielfalcao.png","key":"gabrielfalcao"},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Oscar Dominguez","alias":"oscard0m","url":"https://github.com/oscard0m","imageURL":"https://github.com/oscard0m.png","key":"oscard0m"},{"name":"Robbie Averill","alias":"robbieaverill","url":"https://github.com/robbieaverill","imageURL":"https://github.com/robbieaverill.png","key":"robbieaverill"},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal"},{"name":"Varun Sivapalan","alias":"sivapalan","url":"https://github.com/sivapalan","imageURL":"https://github.com/sivapalan.png","key":"sivapalan"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Vladimir Tasic","alias":"utajum","url":"https://github.com/utajum","imageURL":"https://github.com/utajum.png","key":"utajum"},{"name":"Ying Wang","alias":"wingclover","url":"https://github.com/wingclover","imageURL":"https://github.com/wingclover.png","key":"wingclover"},{"name":"William Poetra Yoga","alias":"wpyoga","url":"https://github.com/wpyoga","imageURL":"https://github.com/wpyoga.png","key":"wpyoga"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-11-02T20:00","authors":["AviVahl","cerkiewny","datlechin","dominikmeyersap","fishmandev","gabrielfalcao","jeffreyaven","Josh-Cena","juzhiyuan","lex111","oscard0m","robbieaverill","semoal","sivapalan","slorber","utajum","wingclover","wpyoga"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10"},"nextItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5770](https://github.com/facebook/docusaurus/pull/5770) feat(theme-classic): allow specifying width/height in logo ([@cerkiewny](https://github.com/cerkiewny))\\n- `docusaurus-types`, `docusaurus`\\n - [#5841](https://github.com/facebook/docusaurus/pull/5841) feat: allow user to specify deploymentBranch property in docusaurus.config.js ([@wpyoga](https://github.com/wpyoga))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#5795](https://github.com/facebook/docusaurus/pull/5795) feat(search-algolia): algolia externalUrl regex to navigate with window.href ([@semoal](https://github.com/semoal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus`\\n - [#5814](https://github.com/facebook/docusaurus/pull/5814) feat: Support Node 17 ([@slorber](https://github.com/slorber))\\n - [#5420](https://github.com/facebook/docusaurus/pull/5420) feat(core): upgrade to webpack-dev-server@4 ([@AviVahl](https://github.com/AviVahl))\\n- `docusaurus-theme-classic`\\n - [#5791](https://github.com/facebook/docusaurus/pull/5791) feat(theme-classic): add Serbian Cyrillic translation ([@utajum](https://github.com/utajum))\\n\\n## :boom: Breaking Change\\n\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5835](https://github.com/facebook/docusaurus/pull/5835) fix(content-blog): Fix blog feeds not generated ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5828](https://github.com/facebook/docusaurus/pull/5828) fix: include all branch tips for shallow clone in deploy command ([@sivapalan](https://github.com/sivapalan))\\n - [#5824](https://github.com/facebook/docusaurus/pull/5824) fix: baseUrl passed to sortConfig ([@semoal](https://github.com/semoal))\\n - [#5813](https://github.com/facebook/docusaurus/pull/5813) fix: handle SIGTERM in build command ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5819](https://github.com/facebook/docusaurus/pull/5819) fix: use @docusaurus/react-loadable as package alias + include types ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-preset-classic`\\n - [#5831](https://github.com/facebook/docusaurus/pull/5831) feat(preset-classic): guard against unknown keys in options ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5815](https://github.com/facebook/docusaurus/pull/5815) refactor: some improvements for webpack-dev-server ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5788](https://github.com/facebook/docusaurus/pull/5788) refactor: fix a few type inconsistencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5781](https://github.com/facebook/docusaurus/pull/5781) refactor: Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5853](https://github.com/facebook/docusaurus/pull/5853) docs: Fix a typo in CONTRIBUTING.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5852](https://github.com/facebook/docusaurus/pull/5852) docs: Fix a typo in versioning.md ([@fishmandev](https://github.com/fishmandev))\\n - [#5847](https://github.com/facebook/docusaurus/pull/5847) docs: add InfraQL product docs website to showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n - [#5843](https://github.com/facebook/docusaurus/pull/5843) docs: fix i18n routes to feature requests ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5766](https://github.com/facebook/docusaurus/pull/5766) docs: elaborate on the usage of MDX plugins ([@cerkiewny](https://github.com/cerkiewny))\\n - [#5826](https://github.com/facebook/docusaurus/pull/5826) docs: fix lint issue ([@slorber](https://github.com/slorber))\\n - [#5801](https://github.com/facebook/docusaurus/pull/5801) docs: Update Drone Deployment docs ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n - [#5821](https://github.com/facebook/docusaurus/pull/5821) docs: include navbar item type in the API table ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5820](https://github.com/facebook/docusaurus/pull/5820) docs: add @Josh-Cena to the team ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5818](https://github.com/facebook/docusaurus/pull/5818) doc: fix typo in \\"create a doc\\" ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n - [#5797](https://github.com/facebook/docusaurus/pull/5797) docs: use \\"npx create-docusaurus\\" for init ([@slorber](https://github.com/slorber))\\n - [#5771](https://github.com/facebook/docusaurus/pull/5771) docs: Minor update to grammar in plugins overview page ([@robbieaverill](https://github.com/robbieaverill))\\n - [#5774](https://github.com/facebook/docusaurus/pull/5774) docs: update ssrTemplate ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#5784](https://github.com/facebook/docusaurus/pull/5784) docs: fix link for apply to DocSearch program ([@lex111](https://github.com/lex111))\\n- `create-docusaurus`\\n - [#5792](https://github.com/facebook/docusaurus/pull/5792) docs: fix typo ([@wingclover](https://github.com/wingclover))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5842](https://github.com/facebook/docusaurus/pull/5842) misc: add \\"name\\" field for root package.json ([@wpyoga](https://github.com/wpyoga))\\n - [#5836](https://github.com/facebook/docusaurus/pull/5836) chore: switch to GitHub issue forms ([@lex111](https://github.com/lex111))\\n - [#5834](https://github.com/facebook/docusaurus/pull/5834) chore(issue templ): add \\"self service\\" section in templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5833](https://github.com/facebook/docusaurus/pull/5833) chore(workflow): remove v2 prefix from titles ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5697](https://github.com/facebook/docusaurus/pull/5697) chore(workflow): add cache to workflows using actions/setup-node ([@oscard0m](https://github.com/oscard0m))\\n - [#5825](https://github.com/facebook/docusaurus/pull/5825) chore: fix Crowdin again ([@slorber](https://github.com/slorber))\\n - [#5823](https://github.com/facebook/docusaurus/pull/5823) chore: replace doc sample .pdf file by .xlsx to solve Crowdin issue ([@slorber](https://github.com/slorber))\\n - [#5763](https://github.com/facebook/docusaurus/pull/5763) chore: update examples for beta.8 ([@slorber](https://github.com/slorber))\\n- `create-docusaurus`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5812](https://github.com/facebook/docusaurus/pull/5812) chore: require Node 14 ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5807](https://github.com/facebook/docusaurus/pull/5807) refactor: remove a few Lodash usages & ESLint enforcement ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#5808](https://github.com/facebook/docusaurus/pull/5808) refactor: clear a few ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `lqip-loader`\\n - [#5779](https://github.com/facebook/docusaurus/pull/5779) refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Avi Vahl ([@AviVahl](https://github.com/AviVahl))\\n- Devtato ([@cerkiewny](https://github.com/cerkiewny))\\n- Dmitriy Fishman ([@fishmandev](https://github.com/fishmandev))\\n- Dominik Meyer ([@dominikmeyersap](https://github.com/dominikmeyersap))\\n- Gabriel Falc\xe3o ([@gabrielfalcao](https://github.com/gabrielfalcao))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- Oscar Dominguez ([@oscard0m](https://github.com/oscard0m))\\n- Robbie Averill ([@robbieaverill](https://github.com/robbieaverill))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varun Sivapalan ([@sivapalan](https://github.com/sivapalan))\\n- Vladimir Tasic ([@utajum](https://github.com/utajum))\\n- William Poetra Yoga ([@wpyoga](https://github.com/wpyoga))\\n- Ying Wang ([@wingclover](https://github.com/wingclover))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-beta.8","metadata":{"permalink":"/changelog/2.0.0-beta.8","source":"@site/changelog/source/2.0.0-beta.8.md","title":"2.0.0-beta.8","description":"New Feature","date":"2021-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft"},{"name":"Caner Canbaz","alias":"canercanbaz","url":"https://github.com/canercanbaz","imageURL":"https://github.com/canercanbaz.png","key":"canercanbaz"},{"name":"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t","alias":"datlechin","url":"https://github.com/datlechin","imageURL":"https://github.com/datlechin.png","key":"datlechin"},{"name":"Dimi Mikadze","alias":"DimiMikadze","url":"https://github.com/DimiMikadze","imageURL":"https://github.com/DimiMikadze.png","key":"DimiMikadze"},{"name":"Ilija Pavlic","alias":"ipavlic","url":"https://github.com/ipavlic","imageURL":"https://github.com/ipavlic.png","key":"ipavlic"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Nathaniel Furniss","alias":"nlfurniss","url":"https://github.com/nlfurniss","imageURL":"https://github.com/nlfurniss.png","key":"nlfurniss"},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Thanasis Katsadas","alias":"thanasis00","url":"https://github.com/thanasis00","imageURL":"https://github.com/thanasis00.png","key":"thanasis00"},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-21T20:00","authors":["ataft","canercanbaz","datlechin","DimiMikadze","ipavlic","johnnyreilly","Josh-Cena","lex111","nlfurniss","philipp985","slorber","thanasis00","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9"},"nextItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5702](https://github.com/facebook/docusaurus/pull/5702) feat(content-blog): new readingTime plugin option ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5740](https://github.com/facebook/docusaurus/pull/5740) feat(core): write-heading-ids options maintainCasing, overwrite ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`\\n - [#5705](https://github.com/facebook/docusaurus/pull/5705) feat(content-docs): new front matter options to customize pagination ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-ideal-image`\\n - [#5760](https://github.com/facebook/docusaurus/pull/5760) fix(ideal-image): fix IdealImage in dev not handling ES import images properly ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5732](https://github.com/facebook/docusaurus/pull/5732) fix(theme-classic): allow tabs with number as value ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5721](https://github.com/facebook/docusaurus/pull/5721) fix: handle rubber band scrolling in hideable navbar ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#5751](https://github.com/facebook/docusaurus/pull/5751) fix: stable callbacks in useSearchQuery + refactor ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5717](https://github.com/facebook/docusaurus/pull/5717) refactor: Polish de translation ([@philipp985](https://github.com/philipp985))\\n - [#5725](https://github.com/facebook/docusaurus/pull/5725) refactor: add missing Turkish translations to theme-classic ([@canercanbaz](https://github.com/canercanbaz))\\n - [#5723](https://github.com/facebook/docusaurus/pull/5723) refactor(v2): update Vietnamese translations ([@datlechin](https://github.com/datlechin))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5726](https://github.com/facebook/docusaurus/pull/5726) refactor(module-type-aliases): remove fallback aliases ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5755](https://github.com/facebook/docusaurus/pull/5755) docs: rename docusaurus.config.js route + redirects cleanup ([@slorber](https://github.com/slorber))\\n - [#5750](https://github.com/facebook/docusaurus/pull/5750) docs(v2): Fix typo in using-plugins.md ([@thanasis00](https://github.com/thanasis00))\\n - [#5727](https://github.com/facebook/docusaurus/pull/5727) docs(v2): Add Fenghua Frontend Developer site to showcase page ([@zxuqian](https://github.com/zxuqian))\\n - [#5746](https://github.com/facebook/docusaurus/pull/5746) docs: Add plugin-image-zoom ([@ataft](https://github.com/ataft))\\n - [#5728](https://github.com/facebook/docusaurus/pull/5728) docs: add h4 into toc on certain pages ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5737](https://github.com/facebook/docusaurus/pull/5737) docs: Add Apex FP to showcase ([@ipavlic](https://github.com/ipavlic))\\n- `docusaurus-plugin-content-blog`\\n - [#5753](https://github.com/facebook/docusaurus/pull/5753) fix(content-blog): temporarily swallow feed mdxToHtml errors + feed refactor ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#5761](https://github.com/facebook/docusaurus/pull/5761) chore: upgrade html-webpack-plugin, remove terser 4 ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#5714](https://github.com/facebook/docusaurus/pull/5714) chore: Enable ESLint rules of hooks + fix new lint errors ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5722](https://github.com/facebook/docusaurus/pull/5722) chore: fix gen script to support TS template ([@lex111](https://github.com/lex111))\\n - [#5730](https://github.com/facebook/docusaurus/pull/5730) chore: fix typos / casing in issue template ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5720](https://github.com/facebook/docusaurus/pull/5720) chore: regenerate beta.7 examples ([@lex111](https://github.com/lex111))\\n - [#5719](https://github.com/facebook/docusaurus/pull/5719) chore: remove beta.5 docs ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#5748](https://github.com/facebook/docusaurus/pull/5748) refactor: perform shallow clone during deploy ([@nlfurniss](https://github.com/nlfurniss))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Caner Canbaz ([@canercanbaz](https://github.com/canercanbaz))\\n- Dimi Mikadze ([@DimiMikadze](https://github.com/DimiMikadze))\\n- Ilija Pavlic ([@ipavlic](https://github.com/ipavlic))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nathaniel Furniss ([@nlfurniss](https://github.com/nlfurniss))\\n- Ng\xf4 Qu\u1ed1c \u0110\u1ea1t ([@datlechin](https://github.com/datlechin))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thanasis Katsadas ([@thanasis00](https://github.com/thanasis00))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))\\n- [@philipp985](https://github.com/philipp985)"},{"id":"/2.0.0-beta.7","metadata":{"permalink":"/changelog/2.0.0-beta.7","source":"@site/changelog/source/2.0.0-beta.7.md","title":"2.0.0-beta.7","description":"New Feature","date":"2021-10-15T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aditya Kajla","alias":"akajla09","url":"https://github.com/akajla09","imageURL":"https://github.com/akajla09.png","key":"akajla09"},{"name":"Andrew Nguyen","alias":"Andrewnt219","url":"https://github.com/Andrewnt219","imageURL":"https://github.com/Andrewnt219.png","key":"Andrewnt219"},{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey"},{"name":"Bharat Middha","alias":"bmiddha","url":"https://github.com/bmiddha","imageURL":"https://github.com/bmiddha.png","key":"bmiddha"},{"name":"David Callizaya","alias":"caleeli","url":"https://github.com/caleeli","imageURL":"https://github.com/caleeli.png","key":"caleeli"},{"name":"Chris Chinchilla","alias":"ChrisChinchilla","url":"https://github.com/ChrisChinchilla","imageURL":"https://github.com/ChrisChinchilla.png","key":"ChrisChinchilla"},{"name":"djamaile","alias":"djamaile","url":"https://github.com/djamaile","imageURL":"https://github.com/djamaile.png","key":"djamaile"},{"name":"Dr-Electron","alias":"Dr-Electron","url":"https://github.com/Dr-Electron","imageURL":"https://github.com/Dr-Electron.png","key":"Dr-Electron"},{"name":"Darshan Gada","alias":"dr5hn","url":"https://github.com/dr5hn","imageURL":"https://github.com/dr5hn.png","key":"dr5hn"},{"name":"Don","alias":"dsmmcken","url":"https://github.com/dsmmcken","imageURL":"https://github.com/dsmmcken.png","key":"dsmmcken"},{"name":"Ekaterina Mozheiko","alias":"EkaterinaMozheiko","url":"https://github.com/EkaterinaMozheiko","imageURL":"https://github.com/EkaterinaMozheiko.png","key":"EkaterinaMozheiko"},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Gabriel T. Nardy","alias":"gtnardy","url":"https://github.com/gtnardy","imageURL":"https://github.com/gtnardy.png","key":"gtnardy"},{"name":"headline-design","alias":"headline-design","url":"https://github.com/headline-design","imageURL":"https://github.com/headline-design.png","key":"headline-design"},{"name":"Hugh Lilly","alias":"hughlilly","url":"https://github.com/hughlilly","imageURL":"https://github.com/hughlilly.png","key":"hughlilly"},{"name":"Ivar Conradi \xd8sthus","alias":"ivarconr","url":"https://github.com/ivarconr","imageURL":"https://github.com/ivarconr.png","key":"ivarconr"},{"name":"Jason Bosco","alias":"jasonbosco","url":"https://github.com/jasonbosco","imageURL":"https://github.com/jasonbosco.png","key":"jasonbosco"},{"name":"Jeffrey Aven","alias":"jeffreyaven","url":"https://github.com/jeffreyaven","imageURL":"https://github.com/jeffreyaven.png","key":"jeffreyaven"},{"name":"Jordan Lee","alias":"jkhaui","url":"https://github.com/jkhaui","imageURL":"https://github.com/jkhaui.png","key":"jkhaui"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Robert Kingston","alias":"kingo55","url":"https://github.com/kingo55","imageURL":"https://github.com/kingo55.png","key":"kingo55"},{"name":"Kyriet","alias":"KyrietS","url":"https://github.com/KyrietS","imageURL":"https://github.com/KyrietS.png","key":"KyrietS"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun"},{"name":"Mahdi Hamldar","alias":"MrTechHunter","url":"https://github.com/MrTechHunter","imageURL":"https://github.com/MrTechHunter.png","key":"MrTechHunter"},{"name":"Nathaniel Tucker","alias":"ntucker","url":"https://github.com/ntucker","imageURL":"https://github.com/ntucker.png","key":"ntucker"},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur"},{"name":"Ana Carolina","alias":"printf-ana","url":"https://github.com/printf-ana","imageURL":"https://github.com/printf-ana.png","key":"printf-ana"},{"name":"Shrugsy","alias":"Shrugsy","url":"https://github.com/Shrugsy","imageURL":"https://github.com/Shrugsy.png","key":"Shrugsy"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Stefan Norberg","alias":"stnor","url":"https://github.com/stnor","imageURL":"https://github.com/stnor.png","key":"stnor"},{"name":"swyx","alias":"sw-yx","url":"https://github.com/sw-yx","imageURL":"https://github.com/sw-yx.png","key":"sw-yx"},{"name":"Vincent","alias":"vinckr","url":"https://github.com/vinckr","imageURL":"https://github.com/vinckr.png","key":"vinckr"},{"name":"Whirl","alias":"Whirl21","url":"https://github.com/Whirl21","imageURL":"https://github.com/Whirl21.png","key":"Whirl21"},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-10-15T20:00","authors":["akajla09","Andrewnt219","BattleOfPlassey","bmiddha","caleeli","ChrisChinchilla","djamaile","Dr-Electron","dr5hn","dsmmcken","EkaterinaMozheiko","erickzhao","forresst","gtnardy","headline-design","hughlilly","ivarconr","jasonbosco","jeffreyaven","jkhaui","Josh-Cena","kingo55","KyrietS","lex111","moonrailgun","MrTechHunter","ntucker","ohkimur","printf-ana","Shrugsy","slorber","stnor","sw-yx","vinckr","Whirl21","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8"},"nextItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#5683](https://github.com/facebook/docusaurus/pull/5683) feat: make Translate children optional ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils`\\n - [#4330](https://github.com/facebook/docusaurus/pull/4330) feat(content-blog): add full blog post html into RSS/Atom feeds ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5642](https://github.com/facebook/docusaurus/pull/5642) feat(theme-classic, plugin-docs): sidebar item level-specific className + allow customization ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `create-docusaurus`\\n - [#5635](https://github.com/facebook/docusaurus/pull/5635) feat: npm init docusaurus, yarn create docusaurus ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`\\n - [#5589](https://github.com/facebook/docusaurus/pull/5589) feat: properly type-check the Docusaurus config of new sites ([@bmiddha](https://github.com/bmiddha))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus`\\n - [#5498](https://github.com/facebook/docusaurus/pull/5498) feat: make Webpack url-loader limit configurable (env variable) ([@stnor](https://github.com/stnor))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#5545](https://github.com/facebook/docusaurus/pull/5545) feat: make tags route path configurable ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5674](https://github.com/facebook/docusaurus/pull/5674) polish(theme-classic): guard against potential definition mistakes in Tabs ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5618](https://github.com/facebook/docusaurus/pull/5618) feat: maintain page position for clicked grouped tabs ([@Shrugsy](https://github.com/Shrugsy))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`\\n - [#5578](https://github.com/facebook/docusaurus/pull/5578) feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) ([@erickzhao](https://github.com/erickzhao))\\n- `docusaurus-theme-classic`\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-common`\\n - [#5694](https://github.com/facebook/docusaurus/pull/5694) fix: proper collapsing of long element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5684](https://github.com/facebook/docusaurus/pull/5684) fix: use realpath for site dir to resolve symlink ([@lex111](https://github.com/lex111))\\n - [#5645](https://github.com/facebook/docusaurus/pull/5645) fix: place root route at the end ([@lex111](https://github.com/lex111))\\n - [#5629](https://github.com/facebook/docusaurus/pull/5629) fix: text/link hydration bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5699](https://github.com/facebook/docusaurus/pull/5699) fix: apply announcement bar class if only needed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5667](https://github.com/facebook/docusaurus/pull/5667) fix: expand tag column on truncated post ([@lex111](https://github.com/lex111))\\n - [#5668](https://github.com/facebook/docusaurus/pull/5668) fix: preserve line breaks when copy code in Firefox ([@lex111](https://github.com/lex111))\\n - [#5647](https://github.com/facebook/docusaurus/pull/5647) feat(theme-classic): make first tab the default tab ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5652](https://github.com/facebook/docusaurus/pull/5652) fix: restore duplicate Tabs rendering to fix hydration issue ([@slorber](https://github.com/slorber))\\n - [#5643](https://github.com/facebook/docusaurus/pull/5643) fix(theme-classic): reset default style for task lists ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n - [#5571](https://github.com/facebook/docusaurus/pull/5571) fix: highlight active item in recent post list ([@lex111](https://github.com/lex111))\\n - [#5481](https://github.com/facebook/docusaurus/pull/5481) fix: use heading itself as anchor for better crawling ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#5677](https://github.com/facebook/docusaurus/pull/5677) fix: Don\'t ignore options.transforms for buble ([@ntucker](https://github.com/ntucker))\\n - [#5556](https://github.com/facebook/docusaurus/pull/5556) fix: pin react-live due to possible mismatch React ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#5690](https://github.com/facebook/docusaurus/pull/5690) fix: preserve hash in asset link ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#5540](https://github.com/facebook/docusaurus/pull/5540) fix: do not use ideal image plugin in dev env ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#5606](https://github.com/facebook/docusaurus/pull/5606) fix(docs): create tags route if only tags exists ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-types`\\n - [#5601](https://github.com/facebook/docusaurus/pull/5601) fix(module-type-aliases): move @type packages to dependencies ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-utils`\\n - [#5495](https://github.com/facebook/docusaurus/pull/5495) fix: ignore code block lines when creating excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5490](https://github.com/facebook/docusaurus/pull/5490) fix: install deps for new project via Yarn on Windows properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5479](https://github.com/facebook/docusaurus/pull/5479) fix: add docs tag validation to solve #5478 ([@sw-yx](https://github.com/sw-yx))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5709](https://github.com/facebook/docusaurus/pull/5709) refactor: cleanup scroll handlers ([@lex111](https://github.com/lex111))\\n - [#5627](https://github.com/facebook/docusaurus/pull/5627) refactor: various TOC improvements ([@lex111](https://github.com/lex111))\\n - [#5469](https://github.com/facebook/docusaurus/pull/5469) refactor: Adjust styling of back top top button ([@dsmmcken](https://github.com/dsmmcken))\\n- `docusaurus-theme-classic`\\n - [#5708](https://github.com/facebook/docusaurus/pull/5708) refactor: hide hash link from crawlers ([@lex111](https://github.com/lex111))\\n - [#5649](https://github.com/facebook/docusaurus/pull/5649) refactor: improve pt-BR translation for classic theme ([@printf-ana](https://github.com/printf-ana))\\n - [#5646](https://github.com/facebook/docusaurus/pull/5646) refactor: complete missing and fix ES translations ([@caleeli](https://github.com/caleeli))\\n - [#5640](https://github.com/facebook/docusaurus/pull/5640) style: update Persian language translations ([@MrTechHunter](https://github.com/MrTechHunter))\\n - [#5630](https://github.com/facebook/docusaurus/pull/5630) refactor: standardize using media queries ([@lex111](https://github.com/lex111))\\n - [#5487](https://github.com/facebook/docusaurus/pull/5487) refactor: use only one close SVG icon ([@lex111](https://github.com/lex111))\\n - [#5592](https://github.com/facebook/docusaurus/pull/5592) refactor: use CSS Modules for toggle styles ([@lex111](https://github.com/lex111))\\n - [#5485](https://github.com/facebook/docusaurus/pull/5485) polish: prevent pop navigation on back if navbar sidebar is open ([@slorber](https://github.com/slorber))\\n - [#5472](https://github.com/facebook/docusaurus/pull/5472) polish(theme-classic): add Chinese translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#5636](https://github.com/facebook/docusaurus/pull/5636) refactor: make all Props defined as interface + readonly ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus`\\n - [#5560](https://github.com/facebook/docusaurus/pull/5560) polish: remove unused eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5580](https://github.com/facebook/docusaurus/pull/5580) refactor(core): type improvements for `PendingNavigation` ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5496](https://github.com/facebook/docusaurus/pull/5496) refactor: remove deprecated createRequireFromPath ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#5681](https://github.com/facebook/docusaurus/pull/5681) docs(v2): Add CountryStateCityAPI site to showcase page ([@dr5hn](https://github.com/dr5hn))\\n- [#5661](https://github.com/facebook/docusaurus/pull/5661) docs: updated cloudywithachanceofbigdata.com blog showcase ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5658](https://github.com/facebook/docusaurus/pull/5658) docs: Algolia plugin must be enabled before crawling the site ([@slorber](https://github.com/slorber))\\n- [#5654](https://github.com/facebook/docusaurus/pull/5654) docs: Add Warrant Docs site to showcase page ([@akajla09](https://github.com/akajla09))\\n- [#5655](https://github.com/facebook/docusaurus/pull/5655) docs: Added cloudywithachanceofbigdata.com showcase blog ([@jeffreyaven](https://github.com/jeffreyaven))\\n- [#5648](https://github.com/facebook/docusaurus/pull/5648) docs: add ory documentation to showcase ([@vinckr](https://github.com/vinckr))\\n- [#5644](https://github.com/facebook/docusaurus/pull/5644) docs: add djamaile blog to site showcase ([@djamaile](https://github.com/djamaile))\\n- [#5641](https://github.com/facebook/docusaurus/pull/5641) docs: add Lux Algo to showcase ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5638](https://github.com/facebook/docusaurus/pull/5638) docs: add nanos world docs to showcase ([@gtnardy](https://github.com/gtnardy))\\n- [#5610](https://github.com/facebook/docusaurus/pull/5610) docs: Add IOTA wiki to showcase ([@Dr-Electron](https://github.com/Dr-Electron))\\n- [#5489](https://github.com/facebook/docusaurus/pull/5489) docs: add additional search options, typesense and local search ([@jasonbosco](https://github.com/jasonbosco))\\n- [#5590](https://github.com/facebook/docusaurus/pull/5590) docs(website): document npm2yarn plugin + use new Tabs API everywhere ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5591](https://github.com/facebook/docusaurus/pull/5591) docs: Add whirl.codes to showcase ([@Whirl21](https://github.com/Whirl21))\\n- [#5574](https://github.com/facebook/docusaurus/pull/5574) docs: add Pipeline UI to showcase ([@headline-design](https://github.com/headline-design))\\n- [#5585](https://github.com/facebook/docusaurus/pull/5585) docs: fix more references to Discord channels ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5572](https://github.com/facebook/docusaurus/pull/5572) docs: add Blogasaurus to showcase ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5575](https://github.com/facebook/docusaurus/pull/5575) docs: clarify MDX version used ([@lex111](https://github.com/lex111))\\n- [#5581](https://github.com/facebook/docusaurus/pull/5581) docs(website): update all Discord links ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5566](https://github.com/facebook/docusaurus/pull/5566) docs: fix code example ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- [#5559](https://github.com/facebook/docusaurus/pull/5559) docs: minor grammatical correction ([@jkhaui](https://github.com/jkhaui))\\n- [#5543](https://github.com/facebook/docusaurus/pull/5543) docs: add note about files being ignored when prefixed with an unders\u2026 ([@KyrietS](https://github.com/KyrietS))\\n- [#5549](https://github.com/facebook/docusaurus/pull/5549) docs: Add Mint Metrics site to the Showcase ([@kingo55](https://github.com/kingo55))\\n- [#5546](https://github.com/facebook/docusaurus/pull/5546) docs: add unleash to showcase ([@ivarconr](https://github.com/ivarconr))\\n- [#5539](https://github.com/facebook/docusaurus/pull/5539) docs: improve escape pipe in Markdown tables ([@forresst](https://github.com/forresst))\\n- [#5486](https://github.com/facebook/docusaurus/pull/5486) docs: mention Netlify ignore build setting ([@slorber](https://github.com/slorber))\\n- [#5482](https://github.com/facebook/docusaurus/pull/5482) docs: update docusaurus-plugin-relative-paths description ([@ohkimur](https://github.com/ohkimur))\\n\\n## :house: Internal\\n\\n- `create-docusaurus`, `docusaurus-plugin-content-docs`\\n - [#5678](https://github.com/facebook/docusaurus/pull/5678) refactor(content-docs): refactor sidebars, Joi validation, generator rework, expose config types ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5666](https://github.com/facebook/docusaurus/pull/5666) chore: upgrade Infima to alpha.34 ([@lex111](https://github.com/lex111))\\n - [#5639](https://github.com/facebook/docusaurus/pull/5639) misc: update base translation + remove extra char ([@lex111](https://github.com/lex111))\\n- Other\\n - [#5669](https://github.com/facebook/docusaurus/pull/5669) fix: allow ColorGenerator to parse colors with prefix `#` ([@Andrewnt219](https://github.com/Andrewnt219))\\n - [#5632](https://github.com/facebook/docusaurus/pull/5632) chore: prepare Algolia migration ([@slorber](https://github.com/slorber))\\n - [#5628](https://github.com/facebook/docusaurus/pull/5628) chore: fix warning after build ([@lex111](https://github.com/lex111))\\n - [#5573](https://github.com/facebook/docusaurus/pull/5573) misc: fix ungrammatical sentence about 5-min tutorial ([@hughlilly](https://github.com/hughlilly))\\n - [#5499](https://github.com/facebook/docusaurus/pull/5499) chore: set up CodeQL ([@zpao](https://github.com/zpao))\\n - [#5474](https://github.com/facebook/docusaurus/pull/5474) chore: remove beta.4 docs (already archived) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-preset-bootstrap`, `docusaurus-theme-bootstrap`\\n - [#5634](https://github.com/facebook/docusaurus/pull/5634) chore: remove unused Bootstrap theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5611](https://github.com/facebook/docusaurus/pull/5611) chore: upgrade Prettier + regenerate lock file ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#5609](https://github.com/facebook/docusaurus/pull/5609) chore: upgrade Terser-related dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#5608](https://github.com/facebook/docusaurus/pull/5608) chore: upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5605](https://github.com/facebook/docusaurus/pull/5605) refactor(core): enforce noImplicitAny ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-preset-classic`\\n - [#5603](https://github.com/facebook/docusaurus/pull/5603) fix(preset-classic): fix TS build issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-preset-classic`\\n - [#5561](https://github.com/facebook/docusaurus/pull/5561) refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`\\n - [#5579](https://github.com/facebook/docusaurus/pull/5579) refactor(preset-classic): migrate preset-classic to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-init`\\n - [#5484](https://github.com/facebook/docusaurus/pull/5484) chore: regenerate beta.6 examples + fix regen script ([@slorber](https://github.com/slorber))\\n\\n## Committers: 36\\n\\n- Aditya Kajla ([@akajla09](https://github.com/akajla09))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ana Carolina ([@printf-ana](https://github.com/printf-ana))\\n- Andrew Nguyen ([@Andrewnt219](https://github.com/Andrewnt219))\\n- Bharat Middha ([@bmiddha](https://github.com/bmiddha))\\n- Chris Chinchilla ([@ChrisChinchilla](https://github.com/ChrisChinchilla))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Darshan Gada ([@dr5hn](https://github.com/dr5hn))\\n- David Callizaya ([@caleeli](https://github.com/caleeli))\\n- Don ([@dsmmcken](https://github.com/dsmmcken))\\n- Ekaterina Mozheiko ([@EkaterinaMozheiko](https://github.com/EkaterinaMozheiko))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Gabriel T. Nardy ([@gtnardy](https://github.com/gtnardy))\\n- Hugh Lilly ([@hughlilly](https://github.com/hughlilly))\\n- Ivar Conradi \xd8sthus ([@ivarconr](https://github.com/ivarconr))\\n- Jason Bosco ([@jasonbosco](https://github.com/jasonbosco))\\n- Jeffrey Aven ([@jeffreyaven](https://github.com/jeffreyaven))\\n- Jordan Lee ([@jkhaui](https://github.com/jkhaui))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Kyriet ([@KyrietS](https://github.com/KyrietS))\\n- Mahdi Hamldar ([@MrTechHunter](https://github.com/MrTechHunter))\\n- Nathaniel Tucker ([@ntucker](https://github.com/ntucker))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Robert Kingston ([@kingo55](https://github.com/kingo55))\\n- Stefan Norberg ([@stnor](https://github.com/stnor))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Vincent ([@vinckr](https://github.com/vinckr))\\n- Whirl ([@Whirl21](https://github.com/Whirl21))\\n- [@Dr-Electron](https://github.com/Dr-Electron)\\n- [@Shrugsy](https://github.com/Shrugsy)\\n- [@djamaile](https://github.com/djamaile)\\n- [@headline-design](https://github.com/headline-design)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- swyx ([@sw-yx](https://github.com/sw-yx))"},{"id":"/2.0.0-beta.6","metadata":{"permalink":"/changelog/2.0.0-beta.6","source":"@site/changelog/source/2.0.0-beta.6.md","title":"2.0.0-beta.6","description":"New Feature","date":"2021-09-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki"},{"name":"Antony Messerli","alias":"antonym","url":"https://github.com/antonym","imageURL":"https://github.com/antonym.png","key":"antonym"},{"name":"farshid","alias":"farshidinanloo","url":"https://github.com/farshidinanloo","imageURL":"https://github.com/farshidinanloo.png","key":"farshidinanloo"},{"name":"Gabriel Csapo","alias":"gabrielcsapo","url":"https://github.com/gabrielcsapo","imageURL":"https://github.com/gabrielcsapo.png","key":"gabrielcsapo"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Daniel Costrasel","alias":"ohkimur","url":"https://github.com/ohkimur","imageURL":"https://github.com/ohkimur.png","key":"ohkimur"},{"name":"Oscar Lorentzon","alias":"oscarlorentzon","url":"https://github.com/oscarlorentzon","imageURL":"https://github.com/oscarlorentzon.png","key":"oscarlorentzon"},{"name":"Rohit Gohri","alias":"rohit-gohri","url":"https://github.com/rohit-gohri","imageURL":"https://github.com/rohit-gohri.png","key":"rohit-gohri"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-09-02T20:00","authors":["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7"},"nextItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5428](https://github.com/facebook/docusaurus/pull/5428) feat: adds blog archive route ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5462](https://github.com/facebook/docusaurus/pull/5462) feat: on back navigation, close mobile sidebar ([@slorber](https://github.com/slorber))\\n - [#5445](https://github.com/facebook/docusaurus/pull/5445) feat: Add docs-related stable classnames ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5460](https://github.com/facebook/docusaurus/pull/5460) feat: infima 33 + navbar-sidebar close button ([@slorber](https://github.com/slorber))\\n - [#5442](https://github.com/facebook/docusaurus/pull/5442) feat(theme-classic): allow passing tab label and default value through TabItem ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5454](https://github.com/facebook/docusaurus/pull/5454) feat: new docs options: versions.{badge,className} ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5444](https://github.com/facebook/docusaurus/pull/5444) fix: fix some theme UI issues (blockquotes, navbar-sidebar font) with Infima alpha.32 ([@slorber](https://github.com/slorber))\\n - [#5431](https://github.com/facebook/docusaurus/pull/5431) fix: some beta.5 bugfixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5437](https://github.com/facebook/docusaurus/pull/5437) fix: fix a few TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5459](https://github.com/facebook/docusaurus/pull/5459) refactor(theme-classic): completely migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5453](https://github.com/facebook/docusaurus/pull/5453) refactor: use SVG for closable button in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5430](https://github.com/facebook/docusaurus/pull/5430) refactor: switch to Flexbox in announcement bar ([@lex111](https://github.com/lex111))\\n - [#5434](https://github.com/facebook/docusaurus/pull/5434) refactor: update Arabic and Persian translations ([@3alisaki](https://github.com/3alisaki))\\n - [#5410](https://github.com/facebook/docusaurus/pull/5410) refactor: add missing translations in fa.json ([@farshidinanloo](https://github.com/farshidinanloo))\\n\\n## :memo: Documentation\\n\\n- [#5471](https://github.com/facebook/docusaurus/pull/5471) docs: Add docusaurus-plugin-relative-paths ([@ohkimur](https://github.com/ohkimur))\\n- [#5464](https://github.com/facebook/docusaurus/pull/5464) docs: add mapillary-js to showcase ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- [#5433](https://github.com/facebook/docusaurus/pull/5433) docs: document doc tags + refinements ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5435](https://github.com/facebook/docusaurus/pull/5435) docs: Add netboot.xyz to site showcase ([@antonym](https://github.com/antonym))\\n- [#5436](https://github.com/facebook/docusaurus/pull/5436) docs: add Redocusaurus in community plugin list ([@rohit-gohri](https://github.com/rohit-gohri))\\n\\n## :house: Internal\\n\\n- [#5455](https://github.com/facebook/docusaurus/pull/5455) fix: website bad version name in docusaurus.config.js ([@slorber](https://github.com/slorber))\\n\\n## Committers: 10\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Antony Messerli ([@antonym](https://github.com/antonym))\\n- Daniel Costrasel ([@ohkimur](https://github.com/ohkimur))\\n- Gabriel Csapo ([@gabrielcsapo](https://github.com/gabrielcsapo))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Oscar Lorentzon ([@oscarlorentzon](https://github.com/oscarlorentzon))\\n- Rohit Gohri ([@rohit-gohri](https://github.com/rohit-gohri))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- farshid ([@farshidinanloo](https://github.com/farshidinanloo))"},{"id":"/2.0.0-beta.5","metadata":{"permalink":"/changelog/2.0.0-beta.5","source":"@site/changelog/source/2.0.0-beta.5.md","title":"2.0.0-beta.5","description":"New Feature","date":"2021-08-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Palash Shrivastava","alias":"BattleOfPlassey","url":"https://github.com/BattleOfPlassey","imageURL":"https://github.com/BattleOfPlassey.png","key":"BattleOfPlassey"},{"name":"David Seal","alias":"dbseal","url":"https://github.com/dbseal","imageURL":"https://github.com/dbseal.png","key":"dbseal"},{"name":"Deepak Prabhakara","alias":"deepakprabhakara","url":"https://github.com/deepakprabhakara","imageURL":"https://github.com/deepakprabhakara.png","key":"deepakprabhakara"},{"name":"Erick Zhao","alias":"erickzhao","url":"https://github.com/erickzhao","imageURL":"https://github.com/erickzhao.png","key":"erickzhao"},{"name":"Federico Aloi","alias":"faloi","url":"https://github.com/faloi","imageURL":"https://github.com/faloi.png","key":"faloi"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Fouad Matin","alias":"fouad","url":"https://github.com/fouad","imageURL":"https://github.com/fouad.png","key":"fouad"},{"name":"Julien Neuhart","alias":"gulien","url":"https://github.com/gulien","imageURL":"https://github.com/gulien.png","key":"gulien"},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi"},{"name":"HaochenQ","alias":"HaochenQ","url":"https://github.com/HaochenQ","imageURL":"https://github.com/HaochenQ.png","key":"HaochenQ"},{"name":"Dmitry Zhifarsky","alias":"incendial","url":"https://github.com/incendial","imageURL":"https://github.com/incendial.png","key":"incendial"},{"name":"Isaac Philip","alias":"isaac-philip","url":"https://github.com/isaac-philip","imageURL":"https://github.com/isaac-philip.png","key":"isaac-philip"},{"name":"Yan Ivan Evdokimov","alias":"jansivans","url":"https://github.com/jansivans","imageURL":"https://github.com/jansivans.png","key":"jansivans"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Jonny Burger","alias":"JonnyBurger","url":"https://github.com/JonnyBurger","imageURL":"https://github.com/JonnyBurger.png","key":"JonnyBurger"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi"},{"name":"Marko Saric","alias":"metmarkosaric","url":"https://github.com/metmarkosaric","imageURL":"https://github.com/metmarkosaric.png","key":"metmarkosaric"},{"name":"Michal S\xe4nger","alias":"michalsanger","url":"https://github.com/michalsanger","imageURL":"https://github.com/michalsanger.png","key":"michalsanger"},{"name":"Garry","alias":"neaped","url":"https://github.com/neaped","imageURL":"https://github.com/neaped.png","key":"neaped"},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles"},{"name":"Sam Wall","alias":"sjwall","url":"https://github.com/sjwall","imageURL":"https://github.com/sjwall.png","key":"sjwall"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tunghsiao Liu","alias":"sparanoid","url":"https://github.com/sparanoid","imageURL":"https://github.com/sparanoid.png","key":"sparanoid"},{"name":"wan-nyan-wan","alias":"wan-nyan-wan","url":"https://github.com/wan-nyan-wan","imageURL":"https://github.com/wan-nyan-wan.png","key":"wan-nyan-wan"},{"name":"Paul O\u2019Shannessy","alias":"zpao","url":"https://github.com/zpao","imageURL":"https://github.com/zpao.png","key":"zpao"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-08-26T20:00","authors":["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6"},"nextItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-utils-validation`\\n - [#5396](https://github.com/facebook/docusaurus/pull/5396) feat(plugin-blog): multi-authors support + authors.yml global configuration ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5371](https://github.com/facebook/docusaurus/pull/5371) feat: make blog config options and navbar versions dropdown label translatable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5375](https://github.com/facebook/docusaurus/pull/5375) feat: add metatags support for seo / blogposts #5373 ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-plugin-content-blog`\\n - [#5354](https://github.com/facebook/docusaurus/pull/5354) feat(plugin-blog): allow `\'ALL\'` as `postsPerPage` option value ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5330](https://github.com/facebook/docusaurus/pull/5330) feat: Markdown page-specific head metadatas ([@slorber](https://github.com/slorber))\\n - [#5322](https://github.com/facebook/docusaurus/pull/5322) feat: structured data for blog posts ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#5314](https://github.com/facebook/docusaurus/pull/5314) feat(v2): add cs (Czech) translations for docusaurus-theme-classic ([@michalsanger](https://github.com/michalsanger))\\n- `docusaurus-init`\\n - [#5233](https://github.com/facebook/docusaurus/pull/5233) feat: new init template classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#5309](https://github.com/facebook/docusaurus/pull/5309) feat: blog posts support /YYYY/MM/DD/blog-post/index.md pattern + blog frontmatter can reference relative images ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#5299](https://github.com/facebook/docusaurus/pull/5299) feat: mdx loader fallback, allow importing mdx docs from anywhere ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3646](https://github.com/facebook/docusaurus/pull/3646) feat: doc tags (same as blog tags) ([@isaac-philip](https://github.com/isaac-philip))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5425](https://github.com/facebook/docusaurus/pull/5425) fix: toc does not highlight clicked anchor + use scroll-margin-top ([@slorber](https://github.com/slorber))\\n - [#5424](https://github.com/facebook/docusaurus/pull/5424) refactor: make dynamic authors layout via CSS only ([@lex111](https://github.com/lex111))\\n - [#5422](https://github.com/facebook/docusaurus/pull/5422) fix: make tags wrapping properly ([@lex111](https://github.com/lex111))\\n - [#5419](https://github.com/facebook/docusaurus/pull/5419) fix: various fixes back-to-top button ([@lex111](https://github.com/lex111))\\n - [#5361](https://github.com/facebook/docusaurus/pull/5361) fix: refactor TOC highlighting + handle edge cases ([@slorber](https://github.com/slorber))\\n - [#5357](https://github.com/facebook/docusaurus/pull/5357) fix: code blocks should scroll in RTL direction ([@slorber](https://github.com/slorber))\\n - [#5346](https://github.com/facebook/docusaurus/pull/5346) fix: author/image adjustments in BlogPosting schema ([@lex111](https://github.com/lex111))\\n - [#5240](https://github.com/facebook/docusaurus/pull/5240) fix: remove top margin only from directly first element ([@lex111](https://github.com/lex111))\\n - [#5317](https://github.com/facebook/docusaurus/pull/5317) fix: make proper highlighting doc link if no sidebar ([@hamzahamidi](https://github.com/hamzahamidi))\\n - [#5316](https://github.com/facebook/docusaurus/pull/5316) fix: avoid extra default active class on doc sidebar item ([@lex111](https://github.com/lex111))\\n - [#5319](https://github.com/facebook/docusaurus/pull/5319) fix: unbreak highlighting regular navbar links ([@lex111](https://github.com/lex111))\\n - [#5264](https://github.com/facebook/docusaurus/pull/5264) fix: apply proper class for active doc item on mobiles + avoid duplicated classes ([@lex111](https://github.com/lex111))\\n - [#5275](https://github.com/facebook/docusaurus/pull/5275) fix: improve spanish translation ([@faloi](https://github.com/faloi))\\n - [#5262](https://github.com/facebook/docusaurus/pull/5262) fix: show secondary menu if even there is no main one ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5426](https://github.com/facebook/docusaurus/pull/5426) fix: Make update-notifier fail-safe if no permission to read configStore ([@slorber](https://github.com/slorber))\\n - [#5398](https://github.com/facebook/docusaurus/pull/5398) fix: fix write-translations warning for theme-common translations ([@slorber](https://github.com/slorber))\\n - [#5381](https://github.com/facebook/docusaurus/pull/5381) fix: canary releases should ignore notifier updates ([@slorber](https://github.com/slorber))\\n - [#5339](https://github.com/facebook/docusaurus/pull/5339) fix: add admonitions support to mdx partials loaded through the fallback mdx loader ([@slorber](https://github.com/slorber))\\n - [#5311](https://github.com/facebook/docusaurus/pull/5311) fix: docusaurus serve logs wrong port if 3000 is taken ([@wan-nyan-wan](https://github.com/wan-nyan-wan))\\n - [#5308](https://github.com/facebook/docusaurus/pull/5308) fix: remove unexpected whitespaces in CSS bundle ([@lex111](https://github.com/lex111))\\n - [#5268](https://github.com/facebook/docusaurus/pull/5268) fix: fix wrong regex that removes extra letters from swizzled component names ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5399](https://github.com/facebook/docusaurus/pull/5399) fix: fix site unlocalized 404 pages + aggressive Netlify /assets caching ([@slorber](https://github.com/slorber))\\n - [#5249](https://github.com/facebook/docusaurus/pull/5249) fix: fix Crowdin mapping for pt-BR ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#5383](https://github.com/facebook/docusaurus/pull/5383) fix: fix Locale Dropdown RTL icon + Webpack aliases ordering ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#5370](https://github.com/facebook/docusaurus/pull/5370) fix(init): fix links to feature images in classic-typescript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-common`\\n - [#5364](https://github.com/facebook/docusaurus/pull/5364) fix: unbreak Details component ([@lex111](https://github.com/lex111))\\n - [#5297](https://github.com/facebook/docusaurus/pull/5297) fix: fix constant value import ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-ideal-image`\\n - [#5334](https://github.com/facebook/docusaurus/pull/5334) fix: plugin ideal-image should generate filename with a hash even in development ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- `docusaurus-theme-search-algolia`\\n - [#5290](https://github.com/facebook/docusaurus/pull/5290) fix: make successful build if missing favicon ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#5270](https://github.com/facebook/docusaurus/pull/5270) fix: ability to link md files with relative paths when paths contain space ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#5261](https://github.com/facebook/docusaurus/pull/5261) fix: fix various TS errors ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-common`\\n - [#5402](https://github.com/facebook/docusaurus/pull/5402) refactor: improve styles of Details component ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#5386](https://github.com/facebook/docusaurus/pull/5386) refactor: various tags improvements ([@lex111](https://github.com/lex111))\\n - [#5377](https://github.com/facebook/docusaurus/pull/5377) refactor: make main heading font size changeable via CSS var ([@lex111](https://github.com/lex111))\\n - [#5355](https://github.com/facebook/docusaurus/pull/5355) refactor: add blog microdata in markup instead of use JSON-LD ([@lex111](https://github.com/lex111))\\n - [#5365](https://github.com/facebook/docusaurus/pull/5365) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5280](https://github.com/facebook/docusaurus/pull/5280) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Other\\n - [#5389](https://github.com/facebook/docusaurus/pull/5389) refactor: clean Canny integration + rename \'Feedback\' to \'Feature Requests\' + improve TS doc page ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5242](https://github.com/facebook/docusaurus/pull/5242) refactor: reduce ESLint warnings / better typing ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :memo: Documentation\\n\\n- [#5423](https://github.com/facebook/docusaurus/pull/5423) docs: clarify using custom attributes for navbar link ([@lex111](https://github.com/lex111))\\n- [#5421](https://github.com/facebook/docusaurus/pull/5421) docs: add Indent to showcase ([@fouad](https://github.com/fouad))\\n- [#5405](https://github.com/facebook/docusaurus/pull/5405) docs: add Gotenberg to showcase ([@gulien](https://github.com/gulien))\\n- [#5406](https://github.com/facebook/docusaurus/pull/5406) docs: specify proper min Node.js version for Travis CI example ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- [#5390](https://github.com/facebook/docusaurus/pull/5390) docs(v2): showcase BoxyHQ ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- [#5376](https://github.com/facebook/docusaurus/pull/5376) docs(v2): Update Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- [#5372](https://github.com/facebook/docusaurus/pull/5372) docs: remove docusaurus-preset-name from preset doc ([@slorber](https://github.com/slorber))\\n- [#5366](https://github.com/facebook/docusaurus/pull/5366) docs: Add drayman to showcase ([@jansivans](https://github.com/jansivans))\\n- [#5369](https://github.com/facebook/docusaurus/pull/5369) docs(v2): Add Nocalhost website to showcase page ([@neaped](https://github.com/neaped))\\n- [#5351](https://github.com/facebook/docusaurus/pull/5351) docs(website): bump announcement bar + include Twitter link + refactor site colors ([@slorber](https://github.com/slorber))\\n- [#5352](https://github.com/facebook/docusaurus/pull/5352) docs: update `docusaurus-plugin-sass` instructions ([@erickzhao](https://github.com/erickzhao))\\n- [#5332](https://github.com/facebook/docusaurus/pull/5332) docs(v2): add mdx-mermaid to resources ([@sjwall](https://github.com/sjwall))\\n- [#5331](https://github.com/facebook/docusaurus/pull/5331) docs: Changelog page should display TOC with releases ([@slorber](https://github.com/slorber))\\n- [#5329](https://github.com/facebook/docusaurus/pull/5329) docs: add Haochen to showcase page ([@HaochenQ](https://github.com/HaochenQ))\\n- [#5313](https://github.com/facebook/docusaurus/pull/5313) docs: try to make plugin/preset config less confusing ([@slorber](https://github.com/slorber))\\n- [#5296](https://github.com/facebook/docusaurus/pull/5296) docs: update canary doc ([@slorber](https://github.com/slorber))\\n- [#5219](https://github.com/facebook/docusaurus/pull/5219) docs: refactor API documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5271](https://github.com/facebook/docusaurus/pull/5271) Add Plausible Analytics docs to showcase page ([@metmarkosaric](https://github.com/metmarkosaric))\\n- [#5283](https://github.com/facebook/docusaurus/pull/5283) docs: fix broken link to syncing tab choices section ([@lex111](https://github.com/lex111))\\n- [#5259](https://github.com/facebook/docusaurus/pull/5259) docs(v2): update Remotion website picture in showcase ([@JonnyBurger](https://github.com/JonnyBurger))\\n- [#5260](https://github.com/facebook/docusaurus/pull/5260) docs(v2): add Dart Code Metrics site to showcase page ([@incendial](https://github.com/incendial))\\n- [#5253](https://github.com/facebook/docusaurus/pull/5253) docs: Fix typo `2-resources.md` ([@forresst](https://github.com/forresst))\\n- [#5248](https://github.com/facebook/docusaurus/pull/5248) docs(v2): add docusaurus-prince-pdf to resources ([@sparanoid](https://github.com/sparanoid))\\n- [#5239](https://github.com/facebook/docusaurus/pull/5239) docs(v2): Add unmand site to showcase page ([@dbseal](https://github.com/dbseal))\\n\\n## :house: Internal\\n\\n- Other\\n - [#5397](https://github.com/facebook/docusaurus/pull/5397) chore: rename docusaurus-2-website package + refactor scripts ([@slorber](https://github.com/slorber))\\n - [#5342](https://github.com/facebook/docusaurus/pull/5342) chore: fix e2e yarn berry tests ([@slorber](https://github.com/slorber))\\n - [#5328](https://github.com/facebook/docusaurus/pull/5328) refactor(website): convert website to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5336](https://github.com/facebook/docusaurus/pull/5336) chore: bump url-parse from 1.5.1 to 1.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#5312](https://github.com/facebook/docusaurus/pull/5312) fix: fix changelog page mdx import for i18n ([@slorber](https://github.com/slorber))\\n - [#5295](https://github.com/facebook/docusaurus/pull/5295) fix: fix canary release versions ([@slorber](https://github.com/slorber))\\n - [#5285](https://github.com/facebook/docusaurus/pull/5285) fix: fix canary version names ([@slorber](https://github.com/slorber))\\n - [#5269](https://github.com/facebook/docusaurus/pull/5269) misc: enable pt-BR + archive older versions ([@slorber](https://github.com/slorber))\\n - [#5237](https://github.com/facebook/docusaurus/pull/5237) chore: enable pt-BR i18n locale on staging ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#5345](https://github.com/facebook/docusaurus/pull/5345) refactor: rename Git master branch to main ([@zpao](https://github.com/zpao))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5341](https://github.com/facebook/docusaurus/pull/5341) polish: bind key listener to light/dark toggle + a11y lint fixes ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus`\\n - [#5347](https://github.com/facebook/docusaurus/pull/5347) chore(mdx-loader): migrate package to TypeScript ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#5335](https://github.com/facebook/docusaurus/pull/5335) refactor: better typing + remove unnecessary eslint-disable ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-blog`\\n - [#5338](https://github.com/facebook/docusaurus/pull/5338) refactor(plugin-blog): style improvements in blogUtils ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`\\n - [#5256](https://github.com/facebook/docusaurus/pull/5256) chore: upgrade Infima to alpha.30 ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5315](https://github.com/facebook/docusaurus/pull/5315) refactor(init): share common files between templates ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5284](https://github.com/facebook/docusaurus/pull/5284) refactor: properly type docs version ([@Josh-Cena](https://github.com/Josh-Cena))\\n\\n## :running: Performance\\n\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#5349](https://github.com/facebook/docusaurus/pull/5349) refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() ([@slorber](https://github.com/slorber))\\n\\n## Committers: 27\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- David Seal ([@dbseal](https://github.com/dbseal))\\n- Deepak Prabhakara ([@deepakprabhakara](https://github.com/deepakprabhakara))\\n- Dmitry Zhifarsky ([@incendial](https://github.com/incendial))\\n- Erick Zhao ([@erickzhao](https://github.com/erickzhao))\\n- Federico Aloi ([@faloi](https://github.com/faloi))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fouad Matin ([@fouad](https://github.com/fouad))\\n- Garry ([@neaped](https://github.com/neaped))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- Isaac Philip ([@isaac-philip](https://github.com/isaac-philip))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Jonny Burger ([@JonnyBurger](https://github.com/JonnyBurger))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Julien Neuhart ([@gulien](https://github.com/gulien))\\n- Marko Saric ([@metmarkosaric](https://github.com/metmarkosaric))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michal S\xe4nger ([@michalsanger](https://github.com/michalsanger))\\n- Palash Shrivastava ([@BattleOfPlassey](https://github.com/BattleOfPlassey))\\n- Paul O\u2019Shannessy ([@zpao](https://github.com/zpao))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Sam Wall ([@sjwall](https://github.com/sjwall))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tunghsiao Liu ([@sparanoid](https://github.com/sparanoid))\\n- Yan Ivan Evdokimov ([@jansivans](https://github.com/jansivans))\\n- [@HaochenQ](https://github.com/HaochenQ)\\n- wan-nyan-wan ([@wan-nyan-wan](https://github.com/wan-nyan-wan))"},{"id":"/2.0.0-beta.4","metadata":{"permalink":"/changelog/2.0.0-beta.4","source":"@site/changelog/source/2.0.0-beta.4.md","title":"2.0.0-beta.4","description":"New Feature","date":"2021-07-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonvasilev52","alias":"antonvasilev52","url":"https://github.com/antonvasilev52","imageURL":"https://github.com/antonvasilev52.png","key":"antonvasilev52"},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn"},{"name":"Christian Flach","alias":"cmfcmf","url":"https://github.com/cmfcmf","imageURL":"https://github.com/cmfcmf.png","key":"cmfcmf"},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond"},{"name":"David Zhao","alias":"davidzhao","url":"https://github.com/davidzhao","imageURL":"https://github.com/davidzhao.png","key":"davidzhao"},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt"},{"name":"Dan Gebhardt","alias":"dgeb","url":"https://github.com/dgeb","imageURL":"https://github.com/dgeb.png","key":"dgeb"},{"name":"Fran\xe7ois Massot","alias":"fmassot","url":"https://github.com/fmassot","imageURL":"https://github.com/fmassot.png","key":"fmassot"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Lennart Koopmann","alias":"lennartkoopmann","url":"https://github.com/lennartkoopmann","imageURL":"https://github.com/lennartkoopmann.png","key":"lennartkoopmann"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lukas Bach","alias":"lukasbach","url":"https://github.com/lukasbach","imageURL":"https://github.com/lukasbach.png","key":"lukasbach"},{"name":"Mar\xe7al Junior","alias":"marssaljr","url":"https://github.com/marssaljr","imageURL":"https://github.com/marssaljr.png","key":"marssaljr"},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi"},{"name":"Michel Weststrate","alias":"mweststrate","url":"https://github.com/mweststrate","imageURL":"https://github.com/mweststrate.png","key":"mweststrate"},{"name":"Nazar","alias":"NazarStreletskyi","url":"https://github.com/NazarStreletskyi","imageURL":"https://github.com/NazarStreletskyi.png","key":"NazarStreletskyi"},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2"},{"name":"Przemys\u0142aw Chojecki","alias":"pcho","url":"https://github.com/pcho","imageURL":"https://github.com/pcho.png","key":"pcho"},{"name":"Philipp Muens","alias":"pmuens","url":"https://github.com/pmuens","imageURL":"https://github.com/pmuens.png","key":"pmuens"},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"Raz Luvaton","alias":"rluvaton","url":"https://github.com/rluvaton","imageURL":"https://github.com/rluvaton.png","key":"rluvaton"},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal"},{"name":"Cl\xe9ment Vannicatte","alias":"shortcuts","url":"https://github.com/shortcuts","imageURL":"https://github.com/shortcuts.png","key":"shortcuts"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece"},{"name":"tohid nateghi","alias":"tohidnateghi","url":"https://github.com/tohidnateghi","imageURL":"https://github.com/tohidnateghi.png","key":"tohidnateghi"},{"name":"\u9648\u6768\u6587","alias":"wenerme","url":"https://github.com/wenerme","imageURL":"https://github.com/wenerme.png","key":"wenerme"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-07-28T20:00","authors":["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5"},"nextItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4912](https://github.com/facebook/docusaurus/pull/4912) feat(v2): add back to top button ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#5235](https://github.com/facebook/docusaurus/pull/5235) feat: docusaurus.new + improve StackBlitz playground integration ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus`\\n - [#5207](https://github.com/facebook/docusaurus/pull/5207) feat: multiple playground choices ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5203](https://github.com/facebook/docusaurus/pull/5203) feat: docs plugin options sidebarCollapsible + sidebarCollapsed ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`\\n - [#4273](https://github.com/facebook/docusaurus/pull/4273) feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`\\n - [#5232](https://github.com/facebook/docusaurus/pull/5232) fix(v2): blog should parse frontMatter.date even when time is present ([@wenerme](https://github.com/wenerme))\\n- `docusaurus-theme-classic`\\n - [#5230](https://github.com/facebook/docusaurus/pull/5230) fix(v2): remove top margin from first element inside doc article ([@lex111](https://github.com/lex111))\\n - [#5229](https://github.com/facebook/docusaurus/pull/5229) fix(v2): keep mobile TOC after hydration ([@lex111](https://github.com/lex111))\\n - [#5179](https://github.com/facebook/docusaurus/pull/5179) fix(v2): wrap dropdown item to missing li element + remove extra attributes ([@lex111](https://github.com/lex111))\\n - [#5183](https://github.com/facebook/docusaurus/pull/5183) fix(v2): pass all props to CodeBlock component ([@lex111](https://github.com/lex111))\\n - [#5176](https://github.com/facebook/docusaurus/pull/5176) fix(v2): Fix type for navlink label ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5172](https://github.com/facebook/docusaurus/pull/5172) fix(v2): hide mobile collapsible doc toc if no headings ([@slorber](https://github.com/slorber))\\n - [#5161](https://github.com/facebook/docusaurus/pull/5161) fix(v2): disable default behavior when click on collapsible item ([@lex111](https://github.com/lex111))\\n - [#5151](https://github.com/facebook/docusaurus/pull/5151) fix(v2): add missing french translations for mobile ([@forresst](https://github.com/forresst))\\n - [#5104](https://github.com/facebook/docusaurus/pull/5104) fix(v2): fix SkipToContent programmatic focus when updating querystring ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#5214](https://github.com/facebook/docusaurus/pull/5214) fix: upgrade Docsearch to avoid layout shift ([@slorber](https://github.com/slorber))\\n - [#5135](https://github.com/facebook/docusaurus/pull/5135) chore(v2): update @docsearch/react ([@shortcuts](https://github.com/shortcuts))\\n- `docusaurus`\\n - [#5204](https://github.com/facebook/docusaurus/pull/5204) fix: cli upgrade helper fail when no `package.dependencies` ([@mweststrate](https://github.com/mweststrate))\\n - [#5164](https://github.com/facebook/docusaurus/pull/5164) fix(v2): revert webpack.resolve.symlinks = false ([@slorber](https://github.com/slorber))\\n - [#5126](https://github.com/facebook/docusaurus/pull/5126) fix(v2): remove webpackConfig.resolve.symlinks: true ([@slorber](https://github.com/slorber))\\n - [#5110](https://github.com/facebook/docusaurus/pull/5110) fix(v2): Fix update-notifier not run at first and not notifying consistently ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#5199](https://github.com/facebook/docusaurus/pull/5199) fix(v2): Fix MDX docs being considered as partials when siteDir match the \\\\_ prefix convention ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#5185](https://github.com/facebook/docusaurus/pull/5185) fix(v2): add base URL to content attribute of head tags PWA ([@lex111](https://github.com/lex111))\\n - [#5169](https://github.com/facebook/docusaurus/pull/5169) refactor(v2): automatically add base URL to PWA head tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#5173](https://github.com/facebook/docusaurus/pull/5173) feat(v2): generalize usage of \\\\_ prefix convention to exclude content files/folders ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-common`\\n - [#5159](https://github.com/facebook/docusaurus/pull/5159) fix(v2): Fix Collapsible hydration layout shift ([@slorber](https://github.com/slorber))\\n - [#5146](https://github.com/facebook/docusaurus/pull/5146) fix(v2): improve work of useCollapsible hook with multiple clicks ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`\\n - [#5129](https://github.com/facebook/docusaurus/pull/5129) fix(v2): fix d.ts lint error ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5116](https://github.com/facebook/docusaurus/pull/5116) fix(v2): introduce useCollapsible to fix collapsible animation perf issues ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`\\n - [#5102](https://github.com/facebook/docusaurus/pull/5102) fix(v2): fix redirect plugin when trailingSlash=false for .html extension ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#5228](https://github.com/facebook/docusaurus/pull/5228) refactor(v2): fix small typo in Russian translation ([@antonvasilev52](https://github.com/antonvasilev52))\\n - [#5222](https://github.com/facebook/docusaurus/pull/5222) chore(v2): update Infima to alpha 28 ([@lex111](https://github.com/lex111))\\n - [#5224](https://github.com/facebook/docusaurus/pull/5224) refactor(v2): update Russian translation ([@lex111](https://github.com/lex111))\\n - [#5217](https://github.com/facebook/docusaurus/pull/5217) refactor(v2): improved Farsi default translations ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#5171](https://github.com/facebook/docusaurus/pull/5171) refactor(v2): increase content area if blog sidebar is off ([@lex111](https://github.com/lex111))\\n - [#5154](https://github.com/facebook/docusaurus/pull/5154) refactor(v2): Hindi translation for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5145](https://github.com/facebook/docusaurus/pull/5145) refactor(v2): use Collapsible for mobile nav items ([@lex111](https://github.com/lex111))\\n - [#5138](https://github.com/facebook/docusaurus/pull/5138) refactor(v2): Update Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#5140](https://github.com/facebook/docusaurus/pull/5140) refactor(v2): bn translation improvements for semantic doc sidebar ([@pranabdas](https://github.com/pranabdas))\\n - [#5139](https://github.com/facebook/docusaurus/pull/5139) feat(v2): complete Chinese code translations ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5118](https://github.com/facebook/docusaurus/pull/5118) refactor(v2): pt-BR translations improve semantic doc sidebar and tags ([@marssaljr](https://github.com/marssaljr))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#5215](https://github.com/facebook/docusaurus/pull/5215) refactor: make code block shadows consistent with new admonitions ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#5193](https://github.com/facebook/docusaurus/pull/5193) refactor: redesign admonitions/callouts/quotes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5168](https://github.com/facebook/docusaurus/pull/5168) refactor(v2): mobile dropdown navbar: expand when subitem become active ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#5236](https://github.com/facebook/docusaurus/pull/5236) docs: add Verdaccio.org to showcase ([@semoal](https://github.com/semoal))\\n- [#5218](https://github.com/facebook/docusaurus/pull/5218) docs(v2): remove vector.dev from showcase ([@lex111](https://github.com/lex111))\\n- [#5212](https://github.com/facebook/docusaurus/pull/5212) docs: mention Link can be used for external links ([@slorber](https://github.com/slorber))\\n- [#5210](https://github.com/facebook/docusaurus/pull/5210) docs(v2): Elaboration of raw-loader in markdown react component ([@pranabdas](https://github.com/pranabdas))\\n- [#5191](https://github.com/facebook/docusaurus/pull/5191) docs: user should restart docusaurus after adding prism additionalLanguage ([@tohidnateghi](https://github.com/tohidnateghi))\\n- [#5175](https://github.com/facebook/docusaurus/pull/5175) docs: update API docs on navbar behavior ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#5189](https://github.com/facebook/docusaurus/pull/5189) docs(v2): Add orbitjs site to showcase page ([@dgeb](https://github.com/dgeb))\\n- [#5177](https://github.com/facebook/docusaurus/pull/5177) docs(v2): add easyjwt to users ([@dbrrt](https://github.com/dbrrt))\\n- [#5187](https://github.com/facebook/docusaurus/pull/5187) docs(v2): Add quickwit to user.js and png. ([@fmassot](https://github.com/fmassot))\\n- [#5184](https://github.com/facebook/docusaurus/pull/5184) docs(v2): Add react-complex-tree to users.js ([@lukasbach](https://github.com/lukasbach))\\n- [#5178](https://github.com/facebook/docusaurus/pull/5178) docs(v2): Update tutorial link ([@slorber](https://github.com/slorber))\\n- [#5158](https://github.com/facebook/docusaurus/pull/5158) docs(v2): Update deploy with Qovery docs for V2 ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#5152](https://github.com/facebook/docusaurus/pull/5152) docs(v2): Indent code example to improve readability ([@rluvaton](https://github.com/rluvaton))\\n- [#5133](https://github.com/facebook/docusaurus/pull/5133) docs(v2): GIF format is not suported ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- [#5117](https://github.com/facebook/docusaurus/pull/5117) docs(v2): Add Prismatic docs page to showcase. ([@taylorreece](https://github.com/taylorreece))\\n- [#5115](https://github.com/facebook/docusaurus/pull/5115) docs(v2): Add LiveKit to showcase ([@davidzhao](https://github.com/davidzhao))\\n- [#5114](https://github.com/facebook/docusaurus/pull/5114) docs(v2): add Blink Shell Documentation to Showcase ([@pcho](https://github.com/pcho))\\n- [#5112](https://github.com/facebook/docusaurus/pull/5112) docs(v2): clarify how to disable edit links entirely ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- [#5113](https://github.com/facebook/docusaurus/pull/5113) docs(v2): Add CryptoDevHub to Showcase ([@pmuens](https://github.com/pmuens))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#5234](https://github.com/facebook/docusaurus/pull/5234) chore: Upgrade infima 29 ([@slorber](https://github.com/slorber))\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5223](https://github.com/facebook/docusaurus/pull/5223) chore: fix iframe background color in dark mode ([@lex111](https://github.com/lex111))\\n - [#5206](https://github.com/facebook/docusaurus/pull/5206) misc: add script to keep starters branch/repos up-to-date ([@slorber](https://github.com/slorber))\\n - [#5167](https://github.com/facebook/docusaurus/pull/5167) fix(v2): fix website PWA icon hrefs ([@slorber](https://github.com/slorber))\\n - [#5166](https://github.com/facebook/docusaurus/pull/5166) fix(v2): fix yarn clear command ([@slorber](https://github.com/slorber))\\n - [#5137](https://github.com/facebook/docusaurus/pull/5137) chore: upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#5111](https://github.com/facebook/docusaurus/pull/5111) misc: monitor site global data with build size bot ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5136](https://github.com/facebook/docusaurus/pull/5136) perf(v2): lazy sidebar categories / collapsibles, reduce html output / build times ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#5130](https://github.com/facebook/docusaurus/pull/5130) test(v2): dogfooding: add huge sidebar for testing purposes ([@slorber](https://github.com/slorber))\\n\\n## Committers: 28\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- Christian Flach ([@cmfcmf](https://github.com/cmfcmf))\\n- Cl\xe9ment Vannicatte ([@shortcuts](https://github.com/shortcuts))\\n- Dan Gebhardt ([@dgeb](https://github.com/dgeb))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- David Zhao ([@davidzhao](https://github.com/davidzhao))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Fran\xe7ois Massot ([@fmassot](https://github.com/fmassot))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lennart Koopmann ([@lennartkoopmann](https://github.com/lennartkoopmann))\\n- Lukas Bach ([@lukasbach](https://github.com/lukasbach))\\n- Mar\xe7al Junior ([@marssaljr](https://github.com/marssaljr))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Michel Weststrate ([@mweststrate](https://github.com/mweststrate))\\n- Nazar ([@NazarStreletskyi](https://github.com/NazarStreletskyi))\\n- Philipp Muens ([@pmuens](https://github.com/pmuens))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Przemys\u0142aw Chojecki ([@pcho](https://github.com/pcho))\\n- Raz Luvaton ([@rluvaton](https://github.com/rluvaton))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@antonvasilev52](https://github.com/antonvasilev52)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- tohid nateghi ([@tohidnateghi](https://github.com/tohidnateghi))\\n- \u9648\u6768\u6587 ([@wenerme](https://github.com/wenerme))"},{"id":"/2.0.0-beta.3","metadata":{"permalink":"/changelog/2.0.0-beta.3","source":"@site/changelog/source/2.0.0-beta.3.md","title":"2.0.0-beta.3","description":"New Feature","date":"2021-06-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Adam Uhl\xed\u0159","alias":"AuHau","url":"https://github.com/AuHau","imageURL":"https://github.com/AuHau.png","key":"AuHau"},{"name":"bperlmutter","alias":"bperlmutter","url":"https://github.com/bperlmutter","imageURL":"https://github.com/bperlmutter.png","key":"bperlmutter"},{"name":"dirslashls","alias":"dirslashls","url":"https://github.com/dirslashls","imageURL":"https://github.com/dirslashls.png","key":"dirslashls"},{"name":"Ayush das","alias":"iamayushdas","url":"https://github.com/iamayushdas","imageURL":"https://github.com/iamayushdas.png","key":"iamayushdas"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr"},{"name":"Danny Lin","alias":"kdrag0n","url":"https://github.com/kdrag0n","imageURL":"https://github.com/kdrag0n.png","key":"kdrag0n"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-30T20:00","authors":["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4"},"nextItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#5092](https://github.com/facebook/docusaurus/pull/5092) feat(v2): add icon to external footer links ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5080](https://github.com/facebook/docusaurus/pull/5080) fix(v2): classic theme - semantic correct anchors links ([@AuHau](https://github.com/AuHau))\\n - [#5081](https://github.com/facebook/docusaurus/pull/5081) fix(v2): restore previous scroll position on back button click ([@lex111](https://github.com/lex111))\\n - [#5063](https://github.com/facebook/docusaurus/pull/5063) fix(v2): restore responsive menu ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#5094](https://github.com/facebook/docusaurus/pull/5094) fix(v2): fix typos in swizzle command ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#5095](https://github.com/facebook/docusaurus/pull/5095) fix(v2): fix swizzle readComponent ([@slorber](https://github.com/slorber))\\n - [#5059](https://github.com/facebook/docusaurus/pull/5059) fix(v2): fix webpack SSG plugin error thrown due to new URL() / \\\\_\\\\_filename ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5097](https://github.com/facebook/docusaurus/pull/5097) fix(v2): fix useEffect infinite loop in blogOnly mode ([@slorber](https://github.com/slorber))\\n - [#5074](https://github.com/facebook/docusaurus/pull/5074) fix(v2): allow negative sidebar positions ([@kdrag0n](https://github.com/kdrag0n))\\n- `docusaurus-plugin-client-redirects`\\n - [#5093](https://github.com/facebook/docusaurus/pull/5093) fix(v2): redirect from should work with trailingSlash: true ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#5085](https://github.com/facebook/docusaurus/pull/5085) fix(v2): redirect plugin should emit redirect files with lower precedence than redirect target ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-sitemap`, `docusaurus-types`, `docusaurus-utils-common`, `docusaurus`\\n - [#5082](https://github.com/facebook/docusaurus/pull/5082) fix(v2): never remove trailing slash from site root like \'/baseUrl/\' ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#5068](https://github.com/facebook/docusaurus/pull/5068) fix(v2): sitemap should respect the global trailingSlash config option. ([@taylorreece](https://github.com/taylorreece))\\n- `docusaurus-types`\\n - [#5058](https://github.com/facebook/docusaurus/pull/5058) fix(v2): fix bad @docusaurus/types Plugin type generics ([@jsamr](https://github.com/jsamr))\\n\\n## :memo: Documentation\\n\\n- [#5064](https://github.com/facebook/docusaurus/pull/5064) docs(v2): Rewrite markdown images section ([@ramiy](https://github.com/ramiy))\\n- [#5086](https://github.com/facebook/docusaurus/pull/5086) docs(v2): Add SQL Frames to the showcase ([@dirslashls](https://github.com/dirslashls))\\n- [#5073](https://github.com/facebook/docusaurus/pull/5073) docs(v2): update installation docs ([@iamayushdas](https://github.com/iamayushdas))\\n- [#5061](https://github.com/facebook/docusaurus/pull/5061) docs(v2:) Divide `markdown-features/code-blocks` to smaller sections ([@ramiy](https://github.com/ramiy))\\n- [#5066](https://github.com/facebook/docusaurus/pull/5066) docs(v2): correct typo ([@bperlmutter](https://github.com/bperlmutter))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`\\n - [#5067](https://github.com/facebook/docusaurus/pull/5067) chore: unstable yarn.lock ([@slorber](https://github.com/slorber))\\n- Other\\n - [#5057](https://github.com/facebook/docusaurus/pull/5057) chore(v2): upgrade examples to beta.2 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Adam Uhl\xed\u0159 ([@AuHau](https://github.com/AuHau))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ayush das ([@iamayushdas](https://github.com/iamayushdas))\\n- Danny Lin ([@kdrag0n](https://github.com/kdrag0n))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- [@bperlmutter](https://github.com/bperlmutter)\\n- [@dirslashls](https://github.com/dirslashls)"},{"id":"/2.0.0-beta.2","metadata":{"permalink":"/changelog/2.0.0-beta.2","source":"@site/changelog/source/2.0.0-beta.2.md","title":"2.0.0-beta.2","description":"New Feature","date":"2021-06-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Eshan Tripathi","alias":"eshantri","url":"https://github.com/eshantri","imageURL":"https://github.com/eshantri.png","key":"eshantri"},{"name":"Felipe Santos","alias":"felipecrs","url":"https://github.com/felipecrs","imageURL":"https://github.com/felipecrs.png","key":"felipecrs"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Jules Sam. Randolph","alias":"jsamr","url":"https://github.com/jsamr","imageURL":"https://github.com/jsamr.png","key":"jsamr"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan"},{"name":"Manuel Meurer","alias":"manuelmeurer","url":"https://github.com/manuelmeurer","imageURL":"https://github.com/manuelmeurer.png","key":"manuelmeurer"},{"name":"Rami Yushuvaev","alias":"ramiy","url":"https://github.com/ramiy","imageURL":"https://github.com/ramiy.png","key":"ramiy"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"},{"name":"Tomasz Papiernik","alias":"tomekpapiernik","url":"https://github.com/tomekpapiernik","imageURL":"https://github.com/tomekpapiernik.png","key":"tomekpapiernik"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-24T20:00","authors":["eshantri","felipecrs","Josh-Cena","jsamr","lex111","loozhengyuan","manuelmeurer","ramiy","slorber","teikjun","tomekpapiernik"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3"},"nextItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#5037](https://github.com/facebook/docusaurus/pull/5037) feat(v2): plugins injectHtmlTags + configureWebpack should receive content loaded ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#5052](https://github.com/facebook/docusaurus/pull/5052) feat(v2): docs version banner configuration option ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-types`, `docusaurus`\\n - [#5054](https://github.com/facebook/docusaurus/pull/5054) fix(v2): allow undefined favicon ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#5048](https://github.com/facebook/docusaurus/pull/5048) fix(v2): read last update from inner git repositories ([@felipecrs](https://github.com/felipecrs))\\n- `docusaurus-theme-classic`\\n - [#5050](https://github.com/facebook/docusaurus/pull/5050) fix(v2): add shadow to skip link on focus only ([@lex111](https://github.com/lex111))\\n - [#5035](https://github.com/facebook/docusaurus/pull/5035) fix(v2): fix some docs container/sidebar layout issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#5047](https://github.com/facebook/docusaurus/pull/5047) fix(v2): Fix Webpack persistent caching (evict on swizzle/alias/config change) ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5040](https://github.com/facebook/docusaurus/pull/5040) fix(v2): Fix announcementBar layout shifts ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5034](https://github.com/facebook/docusaurus/pull/5034) fix(v2): dev css modules classnames should include filename ([@slorber](https://github.com/slorber))\\n - [#5016](https://github.com/facebook/docusaurus/pull/5016) fix(v2): add missing quote in build command output ([@manuelmeurer](https://github.com/manuelmeurer))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#5023](https://github.com/facebook/docusaurus/pull/5023) fix(v2): ignore hash changes in useChangeRoute hook ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#5032](https://github.com/facebook/docusaurus/pull/5032) fix(v2): less strict blog/docs uri frontmatter validation ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`\\n - [#5053](https://github.com/facebook/docusaurus/pull/5053) refactor(v2): remove deprecated docs option excludeNextVersionDocs ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4993](https://github.com/facebook/docusaurus/pull/4993) style(v2): reduce number of ESLint warnings ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Other\\n - [#5017](https://github.com/facebook/docusaurus/pull/5017) chore(v2): remove badge for v1 tests ([@loozhengyuan](https://github.com/loozhengyuan))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#5049](https://github.com/facebook/docusaurus/pull/5049) docs(v2): Fix Gatsby theme name for docs site - Docz ([@ramiy](https://github.com/ramiy))\\n - [#5030](https://github.com/facebook/docusaurus/pull/5030) docs(v2): typo in deployment.mdx ([@eshantri](https://github.com/eshantri))\\n - [#5022](https://github.com/facebook/docusaurus/pull/5022) docs(v2): Add React Native Render HTML site to showcase page ([@jsamr](https://github.com/jsamr))\\n - [#5027](https://github.com/facebook/docusaurus/pull/5027) docs(v2): Add Buddy to deployment doc ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n - [#5021](https://github.com/facebook/docusaurus/pull/5021) docs(v2): fix incorrect anchor links in website ([@teikjun](https://github.com/teikjun))\\n - [#5007](https://github.com/facebook/docusaurus/pull/5007) docs(v2): wrap mdx usage in mdx-code-block ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#5033](https://github.com/facebook/docusaurus/pull/5033) docs(v2): GH pages: recommend using trailingSlash ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- [#5005](https://github.com/facebook/docusaurus/pull/5005) chore: add archived versions system + archive alpha.73-75 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Eshan Tripathi ([@eshantri](https://github.com/eshantri))\\n- Felipe Santos ([@felipecrs](https://github.com/felipecrs))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Jules Sam. Randolph ([@jsamr](https://github.com/jsamr))\\n- Manuel Meurer ([@manuelmeurer](https://github.com/manuelmeurer))\\n- Rami Yushuvaev ([@ramiy](https://github.com/ramiy))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tomasz Papiernik ([@tomekpapiernik](https://github.com/tomekpapiernik))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))"},{"id":"/2.0.0-beta.1","metadata":{"permalink":"/changelog/2.0.0-beta.1","source":"@site/changelog/source/2.0.0-beta.1.md","title":"2.0.0-beta.1","description":"New Feature","date":"2021-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"antonygibbs","alias":"antonygibbs","url":"https://github.com/antonygibbs","imageURL":"https://github.com/antonygibbs.png","key":"antonygibbs"},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag"},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna"},{"name":"Christopher Hsieh","alias":"Christopher-Hsieh","url":"https://github.com/Christopher-Hsieh","imageURL":"https://github.com/Christopher-Hsieh.png","key":"Christopher-Hsieh"},{"name":"Ben Rometsch","alias":"dabeeeenster","url":"https://github.com/dabeeeenster","imageURL":"https://github.com/dabeeeenster.png","key":"dabeeeenster"},{"name":"e271828-","alias":"e271828-","url":"https://github.com/e271828-","imageURL":"https://github.com/e271828-.png","key":"e271828-"},{"name":"fgatti675","alias":"fgatti675","url":"https://github.com/fgatti675","imageURL":"https://github.com/fgatti675.png","key":"fgatti675"},{"name":"Tina\xebl Devresse","alias":"HunteRoi","url":"https://github.com/HunteRoi","imageURL":"https://github.com/HunteRoi.png","key":"HunteRoi"},{"name":"Jonathan Mazin","alias":"jmazin","url":"https://github.com/jmazin","imageURL":"https://github.com/jmazin.png","key":"jmazin"},{"name":"Joel","alias":"Joelpo","url":"https://github.com/Joelpo","imageURL":"https://github.com/Joelpo.png","key":"Joelpo"},{"name":"Jon Barker","alias":"jonbarker68","url":"https://github.com/jonbarker68","imageURL":"https://github.com/jonbarker68.png","key":"jonbarker68"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"Louis Gallet","alias":"l0u1sg","url":"https://github.com/l0u1sg","imageURL":"https://github.com/l0u1sg.png","key":"l0u1sg"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero"},{"name":"Lior Heber","alias":"liorheber","url":"https://github.com/liorheber","imageURL":"https://github.com/liorheber.png","key":"liorheber"},{"name":"Louis Grenard","alias":"louistiti","url":"https://github.com/louistiti","imageURL":"https://github.com/louistiti.png","key":"louistiti"},{"name":"Massibian","alias":"Massibian","url":"https://github.com/Massibian","imageURL":"https://github.com/Massibian.png","key":"Massibian"},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle"},{"name":"Pratyay Banerjee","alias":"Neilblaze","url":"https://github.com/Neilblaze","imageURL":"https://github.com/Neilblaze.png","key":"Neilblaze"},{"name":"nirtamir2","alias":"nirtamir2","url":"https://github.com/nirtamir2","imageURL":"https://github.com/nirtamir2.png","key":"nirtamir2"},{"name":"phwt.smwt","alias":"phwt","url":"https://github.com/phwt","imageURL":"https://github.com/phwt.png","key":"phwt"},{"name":"Pedro Queiroz","alias":"pmqueiroz","url":"https://github.com/pmqueiroz","imageURL":"https://github.com/pmqueiroz.png","key":"pmqueiroz"},{"name":"Pranab Das","alias":"pranabdas","url":"https://github.com/pranabdas","imageURL":"https://github.com/pranabdas.png","key":"pranabdas"},{"name":"PsychTech","alias":"PsychTechApS","url":"https://github.com/PsychTechApS","imageURL":"https://github.com/PsychTechApS.png","key":"PsychTechApS"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"silva-nick","alias":"silva-nick","url":"https://github.com/silva-nick","imageURL":"https://github.com/silva-nick.png","key":"silva-nick"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"mg","alias":"tiny-dancer","url":"https://github.com/tiny-dancer","imageURL":"https://github.com/tiny-dancer.png","key":"tiny-dancer"},{"name":"Lucas Correia","alias":"tsirlucas","url":"https://github.com/tsirlucas","imageURL":"https://github.com/tsirlucas.png","key":"tsirlucas"},{"name":"Fardeen Panjwani","alias":"wise-introvert","url":"https://github.com/wise-introvert","imageURL":"https://github.com/wise-introvert.png","key":"wise-introvert"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-06-18T20:00","authors":["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2"},"nextItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`\\n - [#4982](https://github.com/facebook/docusaurus/pull/4982) feat(v2): add docs pagination_label frontmatter ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4949](https://github.com/facebook/docusaurus/pull/4949) feat(v2): add icon to external navbar links ([@lex111](https://github.com/lex111))\\n - [#4939](https://github.com/facebook/docusaurus/pull/4939) feat(v2): theme default translations Bengali ([@Neilblaze](https://github.com/Neilblaze))\\n - [#4811](https://github.com/facebook/docusaurus/pull/4811) feat(v2): Add hebrew translations ([@slorber](https://github.com/slorber))\\n - [#4798](https://github.com/facebook/docusaurus/pull/4798) feat(v2): add theme Danish translation ([@PsychTechApS](https://github.com/PsychTechApS))\\n- `docusaurus-init`\\n - [#4968](https://github.com/facebook/docusaurus/pull/4968) feat(v2): add code block theming in init template ([@Josh-Cena](https://github.com/Josh-Cena))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4908](https://github.com/facebook/docusaurus/pull/4908) feat(v2): add trailingSlash config option ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4796](https://github.com/facebook/docusaurus/pull/4796) feat(v2): exhaustive docs frontmatter schema ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-types`, `docusaurus`\\n - [#4618](https://github.com/facebook/docusaurus/pull/4618) feat(v2): allow config plugins as functions or [function,options] ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-plugin-content-blog`, `docusaurus-utils-validation`\\n - [#4759](https://github.com/facebook/docusaurus/pull/4759) feat(v2): exhaustive BlogPostFrontMatter schema validation ([@nam-hle](https://github.com/nam-hle))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#5001](https://github.com/facebook/docusaurus/pull/5001) chore(v2): update Infima to alpha 26 ([@lex111](https://github.com/lex111))\\n - [#4986](https://github.com/facebook/docusaurus/pull/4986) fix(v2): fix UX for docsVersionDropdown on mobile for single version ([@slorber](https://github.com/slorber))\\n - [#4980](https://github.com/facebook/docusaurus/pull/4980) fix(v2): make proper data type for prependBaseUrlToHref field ([@lex111](https://github.com/lex111))\\n - [#4943](https://github.com/facebook/docusaurus/pull/4943) fix(v2): improve accessibility of code blocks ([@lex111](https://github.com/lex111))\\n - [#4917](https://github.com/facebook/docusaurus/pull/4917) fix(v2): tidy up Markdown page layout ([@lex111](https://github.com/lex111))\\n - [#4906](https://github.com/facebook/docusaurus/pull/4906) fix(v2): fix minor a11y issues ([@lex111](https://github.com/lex111))\\n - [#4900](https://github.com/facebook/docusaurus/pull/4900) fix(v2): adjust margin after content title ([@lex111](https://github.com/lex111))\\n - [#4855](https://github.com/facebook/docusaurus/pull/4855) chore(v2): update infima to alpha 24 ([@lex111](https://github.com/lex111))\\n - [#4819](https://github.com/facebook/docusaurus/pull/4819) fix(v2): Amend Hebrew translations ([@liorheber](https://github.com/liorheber))\\n - [#4815](https://github.com/facebook/docusaurus/pull/4815) fix(v2): Fix Hebrew translations ([@nirtamir2](https://github.com/nirtamir2))\\n - [#4792](https://github.com/facebook/docusaurus/pull/4792) fix(v2): fix minor a11y issue with headings ([@lex111](https://github.com/lex111))\\n - [#4793](https://github.com/facebook/docusaurus/pull/4793) fix(v2): unbreak enhanced width of doc item wrapper ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-utils-common`\\n - [#5000](https://github.com/facebook/docusaurus/pull/5000) fix(v2): fix theme array deduplication bug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils-common`, `docusaurus-utils`, `docusaurus`\\n - [#4988](https://github.com/facebook/docusaurus/pull/4988) fix(v2): redirect plugin should use siteConfig.trailingSlash ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#4983](https://github.com/facebook/docusaurus/pull/4983) fix(v2): always use UTC when dealing with blog dates ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4962](https://github.com/facebook/docusaurus/pull/4962) fix(v2): respect base url in RSS feeds ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4985](https://github.com/facebook/docusaurus/pull/4985) fix(v2): navbar doc item fallback: search doc in lastVersion ([@slorber](https://github.com/slorber))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#4964](https://github.com/facebook/docusaurus/pull/4964) fix(v2): avoid duplicated imports in npm2yarn plugin ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#4970](https://github.com/facebook/docusaurus/pull/4970) fix(v2): sidebar_label should be used to compute next/previous button labels ([@slorber](https://github.com/slorber))\\n - [#4861](https://github.com/facebook/docusaurus/pull/4861) fix(v2): allow relative sidebar path resolution in docs:version command ([@lex111](https://github.com/lex111))\\n - [#4859](https://github.com/facebook/docusaurus/pull/4859) fix(v2): use frontmatter title at first for paginated links ([@lex111](https://github.com/lex111))\\n - [#4775](https://github.com/facebook/docusaurus/pull/4775) fix(v2): improve dx sidebar config, ability to have no sidebars file ([@nam-hle](https://github.com/nam-hle))\\n- `docusaurus-plugin-sitemap`, `docusaurus-utils-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4950](https://github.com/facebook/docusaurus/pull/4950) fix(v2): sitemap plugin should handle siteConfig.trailingSlash automatically ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4924](https://github.com/facebook/docusaurus/pull/4924) fix(v2): respect baseUrl in serving command ([@lex111](https://github.com/lex111))\\n - [#4935](https://github.com/facebook/docusaurus/pull/4935) fix(v2): render children in BrowserOnly after client is ready ([@lex111](https://github.com/lex111))\\n - [#4894](https://github.com/facebook/docusaurus/pull/4894) fix(v2): escape HTML entities in user tags attributes ([@lex111](https://github.com/lex111))\\n - [#4789](https://github.com/facebook/docusaurus/pull/4789) fix(v2): transpile libs with too recent syntax with babel ([@slorber](https://github.com/slorber))\\n - [#4784](https://github.com/facebook/docusaurus/pull/4784) fix(v2): update notifier should never suggest to downgrade ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4882](https://github.com/facebook/docusaurus/pull/4882) fix(v2): fix contentTitle issues when markdown h1 title contains code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4862](https://github.com/facebook/docusaurus/pull/4862) fix(v2): remove Markdown heading id from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4871](https://github.com/facebook/docusaurus/pull/4871) fix(v2): unbreak adding of custom HTML metadatas ([@lex111](https://github.com/lex111))\\n - [#4797](https://github.com/facebook/docusaurus/pull/4797) fix(v2): do not focus on skip link if page refreshed ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4856](https://github.com/facebook/docusaurus/pull/4856) fix(v2): adjust padding when custom search box location ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4830](https://github.com/facebook/docusaurus/pull/4830) fix(v2): pin prism-react-renderer version to 1.1.1 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#4806](https://github.com/facebook/docusaurus/pull/4806) chore(v2): update sharp to 0.28.2 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4995](https://github.com/facebook/docusaurus/pull/4995) refactor(v2): reduce top padding in doc content container ([@lex111](https://github.com/lex111))\\n - [#4918](https://github.com/facebook/docusaurus/pull/4918) refactor(v2): readjust footer of blog item ([@lex111](https://github.com/lex111))\\n - [#4959](https://github.com/facebook/docusaurus/pull/4959) refactor(v2): minor cleanups ([@lex111](https://github.com/lex111))\\n - [#4945](https://github.com/facebook/docusaurus/pull/4945) refactor(v2): remove extra padding from doc item container ([@lex111](https://github.com/lex111))\\n - [#4940](https://github.com/facebook/docusaurus/pull/4940) refactor(v2): improve semantic doc sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4961](https://github.com/facebook/docusaurus/pull/4961) refactor(v2): improve semantic blog sidebar markup ([@lex111](https://github.com/lex111))\\n - [#4903](https://github.com/facebook/docusaurus/pull/4903) refactor(v2): make doc item layout more semantic ([@lex111](https://github.com/lex111))\\n - [#4877](https://github.com/facebook/docusaurus/pull/4877) refactor(v2): reduce vertical space in doc content container ([@lex111](https://github.com/lex111))\\n - [#4914](https://github.com/facebook/docusaurus/pull/4914) refactor(v2): use SVG for external link icon ([@lex111](https://github.com/lex111))\\n - [#4916](https://github.com/facebook/docusaurus/pull/4916) refactor(v2): replace strong with b in UI components ([@lex111](https://github.com/lex111))\\n - [#4926](https://github.com/facebook/docusaurus/pull/4926) refactor(v2): hide decorative SVGs from screen readers ([@lex111](https://github.com/lex111))\\n - [#4865](https://github.com/facebook/docusaurus/pull/4865) refactor(v2): make little better doc update block UI ([@lex111](https://github.com/lex111))\\n - [#4795](https://github.com/facebook/docusaurus/pull/4795) refactor(v2): remove transition on body element ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4989](https://github.com/facebook/docusaurus/pull/4989) refactor(v2): blog/docs: add more context in error messages ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4979](https://github.com/facebook/docusaurus/pull/4979) refactor(v2): cleanup console output ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`, `docusaurus`\\n - [#4977](https://github.com/facebook/docusaurus/pull/4977) polish(v2): url-subpath config validation warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4969](https://github.com/facebook/docusaurus/pull/4969) refactor(v2): include path in error about non-existent ids ([@lex111](https://github.com/lex111))\\n - [#4863](https://github.com/facebook/docusaurus/pull/4863) refactor(v2): remove sidebar_label filed from doc metadata file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#4907](https://github.com/facebook/docusaurus/pull/4907) refactor(v2): remove type attribute from link and script tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#4919](https://github.com/facebook/docusaurus/pull/4919) refactor(v2): improve markup and styling on search page ([@lex111](https://github.com/lex111))\\n - [#4867](https://github.com/facebook/docusaurus/pull/4867) chore(v2): update @docsearch/react ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#4905](https://github.com/facebook/docusaurus/pull/4905) refactor(v2): do not generate RSS files for empty feed ([@lex111](https://github.com/lex111))\\n - [#4860](https://github.com/facebook/docusaurus/pull/4860) refactor(v2): use aliased path for blog list sidebar file ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4870](https://github.com/facebook/docusaurus/pull/4870) refactor(v2): add exception handling if external command is fails ([@lex111](https://github.com/lex111))\\n - [#4875](https://github.com/facebook/docusaurus/pull/4875) refactor(v2): make even better SSR error notify and add tip ([@lex111](https://github.com/lex111))\\n - [#4866](https://github.com/facebook/docusaurus/pull/4866) refactor(v2): output URL to console only if it has changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#4814](https://github.com/facebook/docusaurus/pull/4814) refactor(v2): purify normalizeUrl ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4987](https://github.com/facebook/docusaurus/pull/4987) docs(v2): document canary releases ([@slorber](https://github.com/slorber))\\n - [#4981](https://github.com/facebook/docusaurus/pull/4981) docs(v2): minor tweaks ([@lex111](https://github.com/lex111))\\n - [#4976](https://github.com/facebook/docusaurus/pull/4976) docs(v2): mention to install the algolia package in search doc ([@slorber](https://github.com/slorber))\\n - [#4953](https://github.com/facebook/docusaurus/pull/4953) docs(v2): add Flagsmith to showcase ([@dabeeeenster](https://github.com/dabeeeenster))\\n - [#4942](https://github.com/facebook/docusaurus/pull/4942) docs(v2): add info about `DefaultValue` prop in `Tabs` ([@ArtFlag](https://github.com/ArtFlag))\\n - [#4898](https://github.com/facebook/docusaurus/pull/4898) docs(v2): add ClarityChallenge to showcase ([@jonbarker68](https://github.com/jonbarker68))\\n - [#4896](https://github.com/facebook/docusaurus/pull/4896) docs(v2): fix incorrect link to plugin-ideal-image ([@phwt](https://github.com/phwt))\\n - [#4893](https://github.com/facebook/docusaurus/pull/4893) docs(v2): presets: fix typo in bootstrap preset ([@silva-nick](https://github.com/silva-nick))\\n - [#4887](https://github.com/facebook/docusaurus/pull/4887) docs(v2): Add Aide Jeune website to Docusaurus site showcase ([@l0u1sg](https://github.com/l0u1sg))\\n - [#4821](https://github.com/facebook/docusaurus/pull/4821) docs(v2): New doc page for math equations ([@pranabdas](https://github.com/pranabdas))\\n - [#4885](https://github.com/facebook/docusaurus/pull/4885) docs(v2): v2 migration guide: mention Algolia config update ([@slorber](https://github.com/slorber))\\n - [#4876](https://github.com/facebook/docusaurus/pull/4876) docs(v2): update steps in the github-actions section ([@wise-introvert](https://github.com/wise-introvert))\\n - [#4880](https://github.com/facebook/docusaurus/pull/4880) docs(v2): grammar typo in migration-overview.md ([@jmazin](https://github.com/jmazin))\\n - [#4879](https://github.com/facebook/docusaurus/pull/4879) docs(v2): Added FireCMS to the showcase ([@fgatti675](https://github.com/fgatti675))\\n - [#4849](https://github.com/facebook/docusaurus/pull/4849) docs(v2): fix Java syntax highlight in website ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4818](https://github.com/facebook/docusaurus/pull/4818) docs(v2): add mr-pdf to resources ([@antonygibbs](https://github.com/antonygibbs))\\n - [#4835](https://github.com/facebook/docusaurus/pull/4835) docs(v2): fix grammar typo on Creating pages ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n - [#4837](https://github.com/facebook/docusaurus/pull/4837) docs(v2): fix missing closing bracket ([@pmqueiroz](https://github.com/pmqueiroz))\\n - [#4820](https://github.com/facebook/docusaurus/pull/4820) docs(v2): Fix typo in doc: sidebar.md ([@pranabdas](https://github.com/pranabdas))\\n - [#4813](https://github.com/facebook/docusaurus/pull/4813) docs(v2): fix css snipped with missing color ([@slorber](https://github.com/slorber))\\n - [#4803](https://github.com/facebook/docusaurus/pull/4803) docs(v2): Add i18n tag and fix typo ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4786](https://github.com/facebook/docusaurus/pull/4786) docs(v2): Add tinaeldevresse.eu to Docusaurus\' gallery ([@HunteRoi](https://github.com/HunteRoi))\\n - [#4780](https://github.com/facebook/docusaurus/pull/4780) docs(v2): remove docs for alpha 71 + 72 ([@slorber](https://github.com/slorber))\\n - [#4779](https://github.com/facebook/docusaurus/pull/4779) docs(v2): beta blog post edits ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4973](https://github.com/facebook/docusaurus/pull/4973) docs(v2): replace `diff` codeblocks with line highlight ([@Josh-Cena](https://github.com/Josh-Cena))\\n - [#4756](https://github.com/facebook/docusaurus/pull/4756) docs(v2): Docusaurus 2 beta blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4994](https://github.com/facebook/docusaurus/pull/4994) misc: more issue template improvements ([@slorber](https://github.com/slorber))\\n - [#4951](https://github.com/facebook/docusaurus/pull/4951) misc: disable google-gtag plugin in Netlify deploys ([@lex111](https://github.com/lex111))\\n - [#4901](https://github.com/facebook/docusaurus/pull/4901) misc: optimize showcase images ([@lex111](https://github.com/lex111))\\n - [#4897](https://github.com/facebook/docusaurus/pull/4897) chore: fail CI if yarn.lock is modified on install ([@slorber](https://github.com/slorber))\\n - [#4858](https://github.com/facebook/docusaurus/pull/4858) chore(v2): add external link to community sidebar ([@lex111](https://github.com/lex111))\\n - [#4889](https://github.com/facebook/docusaurus/pull/4889) misc: issue template config typo ([@slorber](https://github.com/slorber))\\n - [#4886](https://github.com/facebook/docusaurus/pull/4886) misc: add github issue template config ([@slorber](https://github.com/slorber))\\n - [#4878](https://github.com/facebook/docusaurus/pull/4878) misc: improve bug report issue template ([@lex111](https://github.com/lex111))\\n - [#4791](https://github.com/facebook/docusaurus/pull/4791) chore: fix canary version name ([@slorber](https://github.com/slorber))\\n - [#4777](https://github.com/facebook/docusaurus/pull/4777) chore: regenerate examples on 2.0.0-beta.0 ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus`\\n - [#4944](https://github.com/facebook/docusaurus/pull/4944) chore: lockfile cleanup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`\\n - [#4902](https://github.com/facebook/docusaurus/pull/4902) chore: remove docusaurus v1 from master branch (moved to docusaurus-v1 branch) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-ideal-image`\\n - [#4915](https://github.com/facebook/docusaurus/pull/4915) chore(v2): bump react-waypoint from 9.0.2 to 10.1.0 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`\\n - [#4834](https://github.com/facebook/docusaurus/pull/4834) chore(v2): unlock prism-react-renderer version ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus`\\n - [#4833](https://github.com/facebook/docusaurus/pull/4833) chore(v2): bump cssnano packages ([@lex111](https://github.com/lex111))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4816](https://github.com/facebook/docusaurus/pull/4816) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4790](https://github.com/facebook/docusaurus/pull/4790) chore(v2): TypeScript, use isolatedModules ([@slorber](https://github.com/slorber))\\n\\n## Committers: 31\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Ben Rometsch ([@dabeeeenster](https://github.com/dabeeeenster))\\n- Christopher Hsieh ([@Christopher-Hsieh](https://github.com/Christopher-Hsieh))\\n- Fardeen Panjwani ([@wise-introvert](https://github.com/wise-introvert))\\n- Joel ([@Joelpo](https://github.com/Joelpo))\\n- Jon Barker ([@jonbarker68](https://github.com/jonbarker68))\\n- Jonathan Mazin ([@jmazin](https://github.com/jmazin))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Lior Heber ([@liorheber](https://github.com/liorheber))\\n- Louis Gallet ([@l0u1sg](https://github.com/l0u1sg))\\n- Louis Grenard ([@louistiti](https://github.com/louistiti))\\n- Lucas Correia ([@tsirlucas](https://github.com/tsirlucas))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Pedro Queiroz ([@pmqueiroz](https://github.com/pmqueiroz))\\n- Pranab Das ([@pranabdas](https://github.com/pranabdas))\\n- Pratyay Banerjee ([@Neilblaze](https://github.com/Neilblaze))\\n- PsychTech ([@PsychTechApS](https://github.com/PsychTechApS))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tina\xebl Devresse ([@HunteRoi](https://github.com/HunteRoi))\\n- [@Massibian](https://github.com/Massibian)\\n- [@antonygibbs](https://github.com/antonygibbs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@e271828-](https://github.com/e271828-)\\n- [@fgatti675](https://github.com/fgatti675)\\n- [@nirtamir2](https://github.com/nirtamir2)\\n- [@silva-nick](https://github.com/silva-nick)\\n- mg ([@tiny-dancer](https://github.com/tiny-dancer))\\n- phwt.smwt ([@phwt](https://github.com/phwt))"},{"id":"/2.0.0-beta.0","metadata":{"permalink":"/changelog/2.0.0-beta.0","source":"@site/changelog/source/2.0.0-beta.0.md","title":"2.0.0-beta.0","description":"Read the 2.0.0 beta blog post!","date":"2021-05-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Chris Owen","alias":"ChrisOwen101","url":"https://github.com/ChrisOwen101","imageURL":"https://github.com/ChrisOwen101.png","key":"ChrisOwen101"},{"name":"Evan","alias":"DigiPie","url":"https://github.com/DigiPie","imageURL":"https://github.com/DigiPie.png","key":"DigiPie"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Sergio Rafael Gianazza","alias":"gianu","url":"https://github.com/gianu","imageURL":"https://github.com/gianu.png","key":"gianu"},{"name":"Joel Hans","alias":"joelhans","url":"https://github.com/joelhans","imageURL":"https://github.com/joelhans.png","key":"joelhans"},{"name":"Joshua Chen","alias":"Josh-Cena","url":"https://github.com/Josh-Cena","imageURL":"https://github.com/Josh-Cena.png","key":"Josh-Cena"},{"name":"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a","alias":"KostyaTretyak","url":"https://github.com/KostyaTretyak","imageURL":"https://github.com/KostyaTretyak.png","key":"KostyaTretyak"},{"name":"Nam Hoang Le","alias":"nam-hle","url":"https://github.com/nam-hle","imageURL":"https://github.com/nam-hle.png","key":"nam-hle"},{"name":"Rodrigo Moreno","alias":"rodmoreno","url":"https://github.com/rodmoreno","imageURL":"https://github.com/rodmoreno.png","key":"rodmoreno"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Ian Hornik","alias":"yiliansource","url":"https://github.com/yiliansource","imageURL":"https://github.com/yiliansource.png","key":"yiliansource"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-05-12T20:00","authors":["ChrisOwen101","DigiPie","forresst","gianu","joelhans","Josh-Cena","KostyaTretyak","nam-hle","rodmoreno","slorber","yiliansource"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1"},"nextItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"listPageLink":"/changelog/page/2"},"content":"\x3c!-- truncate --\x3e\\n\\nRead the [2.0.0 beta blog post](https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta)!\\n\\n**Note**: this first beta release does not contain any new major feature. We are removing the alpha label, as we are confident Docusaurus 2 is stable enough.\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4762](https://github.com/facebook/docusaurus/pull/4762) feat(v2): add es translations for docusaurus-theme-classic ([@rodmoreno](https://github.com/rodmoreno))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4750](https://github.com/facebook/docusaurus/pull/4750) fix(v2): improve french translation for theme-classic ([@forresst](https://github.com/forresst))\\n- `docusaurus-mdx-loader`, `docusaurus-utils`\\n - [#4736](https://github.com/facebook/docusaurus/pull/4736) fix(v2): fix encoding of markdown image/file inline file-loaders ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4735](https://github.com/facebook/docusaurus/pull/4735) fix(v2): markdown title parser should ignore all forms of MDX import statements ([@nam-hle](https://github.com/nam-hle))\\n - [#4729](https://github.com/facebook/docusaurus/pull/4729) fix(v2): optimize markdown parser regex (Closes [#4726](https://github.com/facebook/docusaurus/issues/4726)) ([@nam-hle](https://github.com/nam-hle))\\n\\n## :memo: Documentation\\n\\n- [#4770](https://github.com/facebook/docusaurus/pull/4770) docs(v2): Improve intro doc ([@slorber](https://github.com/slorber))\\n- [#4773](https://github.com/facebook/docusaurus/pull/4773) docs(v2): fix i18n doc: bad i18n page plugin path in code sample ([@KostyaTretyak](https://github.com/KostyaTretyak))\\n- [#4758](https://github.com/facebook/docusaurus/pull/4758) docs(v2): add browsers support documentation ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4757](https://github.com/facebook/docusaurus/pull/4757) docs(v2): Add Netdata to showcase ([@joelhans](https://github.com/joelhans))\\n- [#4754](https://github.com/facebook/docusaurus/pull/4754) docs(v2): fix Jest showcase screenshot ([@slorber](https://github.com/slorber))\\n- [#4747](https://github.com/facebook/docusaurus/pull/4747) docs(v2): Update showcase page ([@slorber](https://github.com/slorber))\\n- [#4734](https://github.com/facebook/docusaurus/pull/4734) docs(v2): Added MediaMachine.io to showcase ([@gianu](https://github.com/gianu))\\n- [#4731](https://github.com/facebook/docusaurus/pull/4731) docs(v2): add CodeYourFuture to showcase ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- [#4703](https://github.com/facebook/docusaurus/pull/4703) docs(v2): specify google-analytics and gtag plugins ([@yiliansource](https://github.com/yiliansource))\\n- [#4727](https://github.com/facebook/docusaurus/pull/4727) docs(v2): fix doc lint ([@slorber](https://github.com/slorber))\\n- [#4725](https://github.com/facebook/docusaurus/pull/4725) docs(v2): emphasize subset of markdown supported languages ([@Josh-Cena](https://github.com/Josh-Cena))\\n- [#4711](https://github.com/facebook/docusaurus/pull/4711) docs(v2): showcase personal site evantay ([@DigiPie](https://github.com/DigiPie))\\n\\n## :house: Internal\\n\\n- [#4746](https://github.com/facebook/docusaurus/pull/4746) chore(v2): attempt to fix crowdin dl again ([@slorber](https://github.com/slorber))\\n- [#4743](https://github.com/facebook/docusaurus/pull/4743) chore(v2): fix prod deployment due to bad image path ([@slorber](https://github.com/slorber))\\n- [#4740](https://github.com/facebook/docusaurus/pull/4740) chore(v2): delay i18n-staging deployment to avoid Crowdin 409 errors ([@slorber](https://github.com/slorber))\\n- [#4739](https://github.com/facebook/docusaurus/pull/4739) chore(v2): Fix Crowdin 409 issues in CI ([@slorber](https://github.com/slorber))\\n\\n## Committers: 11\\n\\n- Chris Owen ([@ChrisOwen101](https://github.com/ChrisOwen101))\\n- Evan ([@DigiPie](https://github.com/DigiPie))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Ian Hornik ([@yiliansource](https://github.com/yiliansource))\\n- Joel Hans ([@joelhans](https://github.com/joelhans))\\n- Joshua Chen ([@Josh-Cena](https://github.com/Josh-Cena))\\n- Nam Hoang Le ([@nam-hle](https://github.com/nam-hle))\\n- Rodrigo Moreno ([@rodmoreno](https://github.com/rodmoreno))\\n- Sergio Rafael Gianazza ([@gianu](https://github.com/gianu))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- \u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a ([@KostyaTretyak](https://github.com/KostyaTretyak))"},{"id":"/2.0.0-alpha.75","metadata":{"permalink":"/changelog/2.0.0-alpha.75","source":"@site/changelog/source/2.0.0-alpha.75.md","title":"2.0.0-alpha.75","description":"Breaking Change","date":"2021-04-30T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Geoffroy Empain","alias":"gempain","url":"https://github.com/gempain","imageURL":"https://github.com/gempain.png","key":"gempain"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tommy Chen","alias":"tommy351","url":"https://github.com/tommy351","imageURL":"https://github.com/tommy351.png","key":"tommy351"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-30T20:00","authors":["gempain","RDIL","slorber","tommy351"]},"unlisted":false,"prevItem":{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0"},"nextItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus`, `lqip-loader`\\n - [#4089](https://github.com/facebook/docusaurus/pull/4089) feat(v2): Webpack 5, PostCSS 8 ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- [#4704](https://github.com/facebook/docusaurus/pull/4704) docs(v2): showcase meli ([@gempain](https://github.com/gempain))\\n- [#4699](https://github.com/facebook/docusaurus/pull/4699) docs(v2): Add Kosko to showcase ([@tommy351](https://github.com/tommy351))\\n\\n## Committers: 4\\n\\n- Geoffroy Empain ([@gempain](https://github.com/gempain))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy Chen ([@tommy351](https://github.com/tommy351))"},{"id":"/2.0.0-alpha.74","metadata":{"permalink":"/changelog/2.0.0-alpha.74","source":"@site/changelog/source/2.0.0-alpha.74.md","title":"2.0.0-alpha.74","description":"New Feature","date":"2021-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"alena-ko","alias":"alena-ko","url":"https://github.com/alena-ko","imageURL":"https://github.com/alena-ko.png","key":"alena-ko"},{"name":"Arnaud Jeannin","alias":"arnaudjnn","url":"https://github.com/arnaudjnn","imageURL":"https://github.com/arnaudjnn.png","key":"arnaudjnn"},{"name":"DOLLE","alias":"JeremyDolle","url":"https://github.com/JeremyDolle","imageURL":"https://github.com/JeremyDolle.png","key":"JeremyDolle"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"kazk","alias":"kazk","url":"https://github.com/kazk","imageURL":"https://github.com/kazk.png","key":"kazk"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761"},{"name":"Luis Medina Huerta","alias":"luism3861","url":"https://github.com/luism3861","imageURL":"https://github.com/luism3861.png","key":"luism3861"},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP"},{"name":"Tommy","alias":"react-learner","url":"https://github.com/react-learner","imageURL":"https://github.com/react-learner.png","key":"react-learner"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-27T20:00","authors":["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75"},"nextItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#4515](https://github.com/facebook/docusaurus/pull/4515) feat(v2): add tag filters to showcase page ([@lisa761](https://github.com/lisa761))\\n- `docusaurus-plugin-content-docs`\\n - [#4658](https://github.com/facebook/docusaurus/pull/4658) feat(v2): allow user to customize/enhance the default sidebar items generator ([@slorber](https://github.com/slorber))\\n - [#4655](https://github.com/facebook/docusaurus/pull/4655) feat(v2): docs, make numberPrefixParser configurable, better defaults, minor breaking-changes ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#4688](https://github.com/facebook/docusaurus/pull/4688) fix(v2): fix title logic (meta vs heading) + ignore fixed anchor id syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4689](https://github.com/facebook/docusaurus/pull/4689) chore(v2): update infima to alpha 23 ([@slorber](https://github.com/slorber))\\n - [#4667](https://github.com/facebook/docusaurus/pull/4667) fix(v2): Unbreak blog post title by handling title fallback in `LayoutHead` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#4687](https://github.com/facebook/docusaurus/pull/4687) fix(v2): accept empty/null custom_edit_url docs frontmatter for retrocompat ([@slorber](https://github.com/slorber))\\n - [#4651](https://github.com/facebook/docusaurus/pull/4651) fix(v2): sidebar autogen from subfolder should read category metadata correctly ([@slorber](https://github.com/slorber))\\n - [#4629](https://github.com/facebook/docusaurus/pull/4629) fix(v2): fix validation rejecting admonitions false ([@kazk](https://github.com/kazk))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`\\n - [#4654](https://github.com/facebook/docusaurus/pull/4654) fix(v2): fix too strict markdown frontmatter validation ([@johnnyreilly](https://github.com/johnnyreilly))\\n- `docusaurus-utils`\\n - [#4646](https://github.com/facebook/docusaurus/pull/4646) fix(v2): ignore imports when h1 heading parsing ([@lex111](https://github.com/lex111))\\n - [#4641](https://github.com/facebook/docusaurus/pull/4641) fix(v2): parse headings directly after h1 properly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4682](https://github.com/facebook/docusaurus/pull/4682) refactor(v2): align external icon on right ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#4496](https://github.com/facebook/docusaurus/pull/4496) docs(v2): Add Qovery to deployment doc ([@arnaudjnn](https://github.com/arnaudjnn))\\n- [#4680](https://github.com/facebook/docusaurus/pull/4680) docs(v2): Fix urls in deployment.md ([@luism3861](https://github.com/luism3861))\\n- [#4668](https://github.com/facebook/docusaurus/pull/4668) docs(v2): Add Hostman to deployment doc ([@alena-ko](https://github.com/alena-ko))\\n- [#4676](https://github.com/facebook/docusaurus/pull/4676) docs(v2): Add Daily Digest - COVID-19 IN FRANCE to showcase ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- [#4643](https://github.com/facebook/docusaurus/pull/4643) docs(v2): Fix typo in installation.md ([@react-learner](https://github.com/react-learner))\\n- [#4649](https://github.com/facebook/docusaurus/pull/4649) docs(v2): Add new showcase user ([@JeremyDolle](https://github.com/JeremyDolle))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4670](https://github.com/facebook/docusaurus/pull/4670) chore: add some redirects to v1.docusaurus.io ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4631](https://github.com/facebook/docusaurus/pull/4631) chore(v2): update examples to use alpha73 ([@slorber](https://github.com/slorber))\\n\\n## Committers: 12\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arnaud Jeannin ([@arnaudjnn](https://github.com/arnaudjnn))\\n- DOLLE ([@JeremyDolle](https://github.com/JeremyDolle))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Luis Medina Huerta ([@luism3861](https://github.com/luism3861))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tommy ([@react-learner](https://github.com/react-learner))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@alena-ko](https://github.com/alena-ko)\\n- kazk ([@kazk](https://github.com/kazk))"},{"id":"/2.0.0-alpha.73","metadata":{"permalink":"/changelog/2.0.0-alpha.73","source":"@site/changelog/source/2.0.0-alpha.73.md","title":"2.0.0-alpha.73","description":"New Feature","date":"2021-04-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aehrea","alias":"aehrea","url":"https://github.com/aehrea","imageURL":"https://github.com/aehrea.png","key":"aehrea"},{"name":"Ajeet Singh Raina, Docker Captain, RedisLabs","alias":"ajeetraina","url":"https://github.com/ajeetraina","imageURL":"https://github.com/ajeetraina.png","key":"ajeetraina"},{"name":"akepecs","alias":"akepecs","url":"https://github.com/akepecs","imageURL":"https://github.com/akepecs.png","key":"akepecs"},{"name":"Anthony Bobsin","alias":"AnthonyBobsin","url":"https://github.com/AnthonyBobsin","imageURL":"https://github.com/AnthonyBobsin.png","key":"AnthonyBobsin"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"Artur Carvalho","alias":"arturcarvalho","url":"https://github.com/arturcarvalho","imageURL":"https://github.com/arturcarvalho.png","key":"arturcarvalho"},{"name":"Dennis Thompson","alias":"atomicpages","url":"https://github.com/atomicpages","imageURL":"https://github.com/atomicpages.png","key":"atomicpages"},{"name":"besemuna","alias":"besemuna","url":"https://github.com/besemuna","imageURL":"https://github.com/besemuna.png","key":"besemuna"},{"name":"Guillaume Claret","alias":"clarus","url":"https://github.com/clarus","imageURL":"https://github.com/clarus.png","key":"clarus"},{"name":"Arijit Kundu","alias":"covalentbond","url":"https://github.com/covalentbond","imageURL":"https://github.com/covalentbond.png","key":"covalentbond"},{"name":"Dick Wyn Yong","alias":"dickwyn","url":"https://github.com/dickwyn","imageURL":"https://github.com/dickwyn.png","key":"dickwyn"},{"name":"duanwilliam","alias":"duanwilliam","url":"https://github.com/duanwilliam","imageURL":"https://github.com/duanwilliam.png","key":"duanwilliam"},{"name":"Forresst","alias":"forresst","url":"https://github.com/forresst","imageURL":"https://github.com/forresst.png","key":"forresst"},{"name":"Foxeye-Rinx","alias":"Foxeye-Rinx","url":"https://github.com/Foxeye-Rinx","imageURL":"https://github.com/Foxeye-Rinx.png","key":"Foxeye-Rinx"},{"name":"Brent Ely","alias":"gitbrent","url":"https://github.com/gitbrent","imageURL":"https://github.com/gitbrent.png","key":"gitbrent"},{"name":"Marco Enrico","alias":"gumacahin","url":"https://github.com/gumacahin","imageURL":"https://github.com/gumacahin.png","key":"gumacahin"},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville"},{"name":"John Reilly","alias":"johnnyreilly","url":"https://github.com/johnnyreilly","imageURL":"https://github.com/johnnyreilly.png","key":"johnnyreilly"},{"name":"Chris Kanich","alias":"kaytwo","url":"https://github.com/kaytwo","imageURL":"https://github.com/kaytwo.png","key":"kaytwo"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761"},{"name":"ZhengYuan Loo","alias":"loozhengyuan","url":"https://github.com/loozhengyuan","imageURL":"https://github.com/loozhengyuan.png","key":"loozhengyuan"},{"name":"Lucas Alves","alias":"lucalves","url":"https://github.com/lucalves","imageURL":"https://github.com/lucalves.png","key":"lucalves"},{"name":"miku86","alias":"miku86","url":"https://github.com/miku86","imageURL":"https://github.com/miku86.png","key":"miku86"},{"name":"Pedro Pi\xf1era Buend\xeda","alias":"pepibumur","url":"https://github.com/pepibumur","imageURL":"https://github.com/pepibumur.png","key":"pepibumur"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"serut","alias":"serut","url":"https://github.com/serut","imageURL":"https://github.com/serut.png","key":"serut"},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Steve","alias":"steveworley","url":"https://github.com/steveworley","imageURL":"https://github.com/steveworley.png","key":"steveworley"},{"name":"guoxudong","alias":"sunny0826","url":"https://github.com/sunny0826","imageURL":"https://github.com/sunny0826.png","key":"sunny0826"},{"name":"Tales Porto","alias":"talesporto","url":"https://github.com/talesporto","imageURL":"https://github.com/talesporto.png","key":"talesporto"},{"name":"Thiago Sciotta","alias":"thiagog3","url":"https://github.com/thiagog3","imageURL":"https://github.com/thiagog3.png","key":"thiagog3"},{"name":"Tiago Ribeiro","alias":"tiago-rr","url":"https://github.com/tiago-rr","imageURL":"https://github.com/tiago-rr.png","key":"tiago-rr"},{"name":"Tom Raviv","alias":"tomrav","url":"https://github.com/tomrav","imageURL":"https://github.com/tomrav.png","key":"tomrav"},{"name":"Tony Narlock","alias":"tony","url":"https://github.com/tony","imageURL":"https://github.com/tony.png","key":"tony"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-04-16T20:00","authors":["aehrea","ajeetraina","akepecs","AnthonyBobsin","armano2","arturcarvalho","atomicpages","besemuna","clarus","covalentbond","dickwyn","duanwilliam","forresst","Foxeye-Rinx","gitbrent","gumacahin","jknoxville","johnnyreilly","kaytwo","lex111","lisa761","loozhengyuan","lucalves","miku86","pepibumur","RDIL","SamChou19815","serut","ShinteiMai","slorber","steveworley","sunny0826","talesporto","thiagog3","tiago-rr","tomrav","tony"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74"},"nextItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#4624](https://github.com/facebook/docusaurus/pull/4624) feat(v2): Add Filipino default translations to theme ([@gumacahin](https://github.com/gumacahin))\\n - [#4596](https://github.com/facebook/docusaurus/pull/4596) feat(v2): theme default translations hindi ([@lisa761](https://github.com/lisa761))\\n - [#4536](https://github.com/facebook/docusaurus/pull/4536) feat(v2): add pt-PT translations for docusaurus-theme-classic ([@tiago-rr](https://github.com/tiago-rr))\\n - [#4525](https://github.com/facebook/docusaurus/pull/4525) feat(v2): add Brazilian Portuguese translation for docusaurus-theme-classic ([@thiagog3](https://github.com/thiagog3))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4511](https://github.com/facebook/docusaurus/pull/4511) feat(v2): add unique page/wrapper className to each theme pages ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4545](https://github.com/facebook/docusaurus/pull/4545) feat(v2): docusaurus deploy: ability to configure port in git url ([@talesporto](https://github.com/talesporto))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#4590](https://github.com/facebook/docusaurus/pull/4590) feat(v2): various markdown string parsing improvements/fixes ([@slorber](https://github.com/slorber))\\n - [#4485](https://github.com/facebook/docusaurus/pull/4485) feat(v2): frontmatter-less: read first heading as title and use it in front-matter ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils`\\n - [#4581](https://github.com/facebook/docusaurus/pull/4581) feat(v2): default theme translations: locale \\"pt\\" should load \\"pt-BR\\" translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#4495](https://github.com/facebook/docusaurus/pull/4495) feat(v2): include frontmatter in loadedContent doc metadatas ([@kaytwo](https://github.com/kaytwo))\\n - [#4500](https://github.com/facebook/docusaurus/pull/4500) feat(v2): provide doc sidebar_label through sidebars.js ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4449](https://github.com/facebook/docusaurus/pull/4449) feat(v2): infer default i18n locale config from locale code ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4582](https://github.com/facebook/docusaurus/pull/4582) feat(v2): auto-generated sidebars, frontmatter-less sites ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4621](https://github.com/facebook/docusaurus/pull/4621) fix(v2): center align content if no sidebar exists ([@lex111](https://github.com/lex111))\\n - [#4620](https://github.com/facebook/docusaurus/pull/4620) fix(v2): restore toggle responsive sidebar button ([@lex111](https://github.com/lex111))\\n - [#4598](https://github.com/facebook/docusaurus/pull/4598) fix(v2): render escaped HTML entities inside code properly ([@lex111](https://github.com/lex111))\\n - [#4554](https://github.com/facebook/docusaurus/pull/4554) fix: DocNavbarItem error message ([@serut](https://github.com/serut))\\n - [#4468](https://github.com/facebook/docusaurus/pull/4468) fix(v2): select correct tab when items are incorrectly ordered ([@armano2](https://github.com/armano2))\\n - [#4461](https://github.com/facebook/docusaurus/pull/4461) fix(v2): Fix i18n staging deployment due to json typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4541](https://github.com/facebook/docusaurus/pull/4541) fix(v2): fix code block title parsing, support multiple metastring attributes ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4600](https://github.com/facebook/docusaurus/pull/4600) fix(v2): use page title from config if not set ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4501](https://github.com/facebook/docusaurus/pull/4501) fix(v2): fail-safe usage of browser storage (localStorage/sessionStorage) when access is denied ([@jknoxville](https://github.com/jknoxville))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#4593](https://github.com/facebook/docusaurus/pull/4593) fix(v2): i18n perf issue: getTranslationFile() should not load content again ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4574](https://github.com/facebook/docusaurus/pull/4574) fix(v2): examples should use Node 14 by default on CodeSandbox + regen with alpha72 ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4547](https://github.com/facebook/docusaurus/pull/4547) feat(v2) : use symbols to denote swizzle safety ([@besemuna](https://github.com/besemuna))\\n - [#4575](https://github.com/facebook/docusaurus/pull/4575) fix(v2): fix i18n isLastLocale bug preventing docusaurus from building some locales ([@slorber](https://github.com/slorber))\\n - [#4506](https://github.com/facebook/docusaurus/pull/4506) fix(v2): remove no longer used postcss-present-env from dependencies ([@armano2](https://github.com/armano2))\\n - [#4444](https://github.com/facebook/docusaurus/pull/4444) fix(v2): Fix writeHeadingIds on Windows due to non-posix paths ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4507](https://github.com/facebook/docusaurus/pull/4507) fix(v2): do not warn about duplicated title for pages ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4466](https://github.com/facebook/docusaurus/pull/4466) fix(v2): i18n fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4459](https://github.com/facebook/docusaurus/pull/4459) fix(v2): Export Joi from validation-utils package ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4617](https://github.com/facebook/docusaurus/pull/4617) refactor(v2): simplify and optimize sidebar ([@slorber](https://github.com/slorber))\\n - [#4608](https://github.com/facebook/docusaurus/pull/4608) refactor(v2): replace react-toggle with own implementation ([@lex111](https://github.com/lex111))\\n - [#4601](https://github.com/facebook/docusaurus/pull/4601) refactor(v2): increase heading anchor offset ([@lex111](https://github.com/lex111))\\n - [#4467](https://github.com/facebook/docusaurus/pull/4467) refactor(v2): add missing types to theme-classic useTheme ([@armano2](https://github.com/armano2))\\n - [#4448](https://github.com/facebook/docusaurus/pull/4448) polish(v2): Add german translations ([@miku86](https://github.com/miku86))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4619](https://github.com/facebook/docusaurus/pull/4619) refactor(v2): rename class main-docs-wrapper to docs-wrapper ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4451](https://github.com/facebook/docusaurus/pull/4451) refactor(v2): correct client types and type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4450](https://github.com/facebook/docusaurus/pull/4450) chore(v2): Fix more linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4442](https://github.com/facebook/docusaurus/pull/4442) chore(v2): Fix linter warnings ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#4375](https://github.com/facebook/docusaurus/pull/4375) refactor(v2): TS config update: reduce the size of npm modules ([@RDIL](https://github.com/RDIL))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4616](https://github.com/facebook/docusaurus/pull/4616) docs(v2): add showcase: kubevela ([@sunny0826](https://github.com/sunny0826))\\n - [#4612](https://github.com/facebook/docusaurus/pull/4612) docs(v2): Added IntelAGENT website to showcase. ([@akepecs](https://github.com/akepecs))\\n - [#4609](https://github.com/facebook/docusaurus/pull/4609) docs(v2): add clarity to tip in versioned using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4606](https://github.com/facebook/docusaurus/pull/4606) docs(v2): heading typo ([@arturcarvalho](https://github.com/arturcarvalho))\\n - [#4604](https://github.com/facebook/docusaurus/pull/4604) docs(v2): add clarity to tip in using-themes page ([@dickwyn](https://github.com/dickwyn))\\n - [#4602](https://github.com/facebook/docusaurus/pull/4602) docs(v2): Add \\"PptxGenJS\\" to showcase ([@gitbrent](https://github.com/gitbrent))\\n - [#4599](https://github.com/facebook/docusaurus/pull/4599) docs(v2): i18n site: enable ko + zh-CN locales ([@slorber](https://github.com/slorber))\\n - [#4595](https://github.com/facebook/docusaurus/pull/4595) docs(v2): fix typo theme-configuration.md ([@forresst](https://github.com/forresst))\\n - [#4594](https://github.com/facebook/docusaurus/pull/4594) docs(v2): Include docusaurus-protobuffet to community plugins ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n - [#4558](https://github.com/facebook/docusaurus/pull/4558) docs(v2): fixed broken link in i18n-tutorial.md ([@covalentbond](https://github.com/covalentbond))\\n - [#4573](https://github.com/facebook/docusaurus/pull/4573) docs: update README badges ([@slorber](https://github.com/slorber))\\n - [#4559](https://github.com/facebook/docusaurus/pull/4559) docs(v2): fixed the directory of index.js ([@covalentbond](https://github.com/covalentbond))\\n - [#4568](https://github.com/facebook/docusaurus/pull/4568) docs(v2): add social-embed to showcase ([@tony](https://github.com/tony))\\n - [#4570](https://github.com/facebook/docusaurus/pull/4570) docs(v2): Add Redis Labs Developer Site to docusaurus showcase page ([@ajeetraina](https://github.com/ajeetraina))\\n - [#4543](https://github.com/facebook/docusaurus/pull/4543) docs(v2): fix run-on sentence ([@duanwilliam](https://github.com/duanwilliam))\\n - [#4539](https://github.com/facebook/docusaurus/pull/4539) docs(v2): fix typo deployment.mdx ([@forresst](https://github.com/forresst))\\n - [#4538](https://github.com/facebook/docusaurus/pull/4538) Add Tuist to the list of projects that use Docusaurus ([@pepibumur](https://github.com/pepibumur))\\n - [#4531](https://github.com/facebook/docusaurus/pull/4531) docs(v2): remove duplicate line on v1 docs ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4524](https://github.com/facebook/docusaurus/pull/4524) docs(v2): config for self-hosted docsearch crawler ([@loozhengyuan](https://github.com/loozhengyuan))\\n - [#4526](https://github.com/facebook/docusaurus/pull/4526) docs(v2): fix markdown headings level 4 ([@forresst](https://github.com/forresst))\\n - [#4505](https://github.com/facebook/docusaurus/pull/4505) docs(v2): add more links to v1: announcementBar, versionDropdown, homepage ([@slorber](https://github.com/slorber))\\n - [#4497](https://github.com/facebook/docusaurus/pull/4497) docs: fix link to issue template ([@forresst](https://github.com/forresst))\\n - [#4481](https://github.com/facebook/docusaurus/pull/4481) docs(v2): fix grammar and improve wording ([@aehrea](https://github.com/aehrea))\\n - [#4472](https://github.com/facebook/docusaurus/pull/4472) docs(v2): fixed broken link in sidebar documentation ([@covalentbond](https://github.com/covalentbond))\\n - [#4470](https://github.com/facebook/docusaurus/pull/4470) docs(v2): Add missing i18n docs: API lifecycles + Crowdin migration guide ([@slorber](https://github.com/slorber))\\n - [#4460](https://github.com/facebook/docusaurus/pull/4460) docs(v2): use explicit heading IDs ([@lex111](https://github.com/lex111))\\n - [#4446](https://github.com/facebook/docusaurus/pull/4446) docs(v2): Add blog.johnnyreilly.com to showcase ([@johnnyreilly](https://github.com/johnnyreilly))\\n - [#4430](https://github.com/facebook/docusaurus/pull/4430) docs(v2): add Deploy with QuandCDN ([@steveworley](https://github.com/steveworley))\\n - [#4441](https://github.com/facebook/docusaurus/pull/4441) docs(v2): add stylable site to users showcase list ([@tomrav](https://github.com/tomrav))\\n- `docusaurus-init`\\n - [#4561](https://github.com/facebook/docusaurus/pull/4561) docs(v2): add a missing slug from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4560](https://github.com/facebook/docusaurus/pull/4560) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n - [#4546](https://github.com/facebook/docusaurus/pull/4546) docs(v2): add a missing \\"export\\" from the initial template ([@Foxeye-Rinx](https://github.com/Foxeye-Rinx))\\n - [#4320](https://github.com/facebook/docusaurus/pull/4320) feat(v2): Improve the initial templates #4302 ([@besemuna](https://github.com/besemuna))\\n- `docusaurus-migrate`, `docusaurus`\\n - [#4479](https://github.com/facebook/docusaurus/pull/4479) docs(v2): fixed typos ([@covalentbond](https://github.com/covalentbond))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`\\n - [#4627](https://github.com/facebook/docusaurus/pull/4627) chore(v2): update Infima to alpha.22 ([@slorber](https://github.com/slorber))\\n - [#4463](https://github.com/facebook/docusaurus/pull/4463) chore: fb json header commit typo ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4613](https://github.com/facebook/docusaurus/pull/4613) chore(v2): fix yarn2 end2end test by using lerna publish --exact ([@slorber](https://github.com/slorber))\\n - [#4611](https://github.com/facebook/docusaurus/pull/4611) chore(v2): CI: do not build all locales when monitoring build time perf ([@slorber](https://github.com/slorber))\\n - [#4486](https://github.com/facebook/docusaurus/pull/4486) ci: enable yarn install cache ([@armano2](https://github.com/armano2))\\n - [#4508](https://github.com/facebook/docusaurus/pull/4508) ci: change default actions timeout from 6h to 30m ([@armano2](https://github.com/armano2))\\n - [#4488](https://github.com/facebook/docusaurus/pull/4488) chore(v2): fix typo in classic init template ([@clarus](https://github.com/clarus))\\n - [#4471](https://github.com/facebook/docusaurus/pull/4471) chore: fix GH actions lint problem matchers issue in PR ([@slorber](https://github.com/slorber))\\n - [#4458](https://github.com/facebook/docusaurus/pull/4458) chore(v2): enable staging locales: ko ja ([@slorber](https://github.com/slorber))\\n - [#4457](https://github.com/facebook/docusaurus/pull/4457) chore(v2): remove docs for alpha v70 ([@lex111](https://github.com/lex111))\\n - [#4452](https://github.com/facebook/docusaurus/pull/4452) chore(v2): update typescript-eslint to v4.18.0 ([@armano2](https://github.com/armano2))\\n- `docusaurus`\\n - [#4516](https://github.com/facebook/docusaurus/pull/4516) ci(v2): fail CI if build takes too much time ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4490](https://github.com/facebook/docusaurus/pull/4490) chore: rename v2.docusaurus.io urls after domain switch + redirect + cleanups ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#4475](https://github.com/facebook/docusaurus/pull/4475) chore: prepare v1-v2 domain switch ([@slorber](https://github.com/slorber))\\n - [#4447](https://github.com/facebook/docusaurus/pull/4447) chore: simplify CI setup ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`\\n - [#4453](https://github.com/facebook/docusaurus/pull/4453) chore(v2): migrate babel-eslint to @babel/eslint-parser ([@armano2](https://github.com/armano2))\\n- `docusaurus-utils-validation`\\n - [#4464](https://github.com/facebook/docusaurus/pull/4464) chore(v2): Joi cyclic dep warning ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4462](https://github.com/facebook/docusaurus/pull/4462) chore: json files should be linted ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-theme-classic`\\n - [#4626](https://github.com/facebook/docusaurus/pull/4626) refactor(v2): toggleResponsiveSidebar => more stable callback ([@slorber](https://github.com/slorber))\\n - [#4603](https://github.com/facebook/docusaurus/pull/4603) perf(v2): avoid rerender of sidebar items while scrolling ([@lex111](https://github.com/lex111))\\n - [#4473](https://github.com/facebook/docusaurus/pull/4473) perf(v2): reduce amount of component updates while scrolling ([@armano2](https://github.com/armano2))\\n\\n## Committers: 37\\n\\n- Ajeet Singh Raina, Docker Captain, RedisLabs ([@ajeetraina](https://github.com/ajeetraina))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anthony Bobsin ([@AnthonyBobsin](https://github.com/AnthonyBobsin))\\n- Arijit Kundu ([@covalentbond](https://github.com/covalentbond))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Artur Carvalho ([@arturcarvalho](https://github.com/arturcarvalho))\\n- Brent Ely ([@gitbrent](https://github.com/gitbrent))\\n- Chris Kanich ([@kaytwo](https://github.com/kaytwo))\\n- Dennis Thompson ([@atomicpages](https://github.com/atomicpages))\\n- Dick Wyn Yong ([@dickwyn](https://github.com/dickwyn))\\n- Forresst ([@forresst](https://github.com/forresst))\\n- Guillaume Claret ([@clarus](https://github.com/clarus))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- John Reilly ([@johnnyreilly](https://github.com/johnnyreilly))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- Lucas Alves ([@lucalves](https://github.com/lucalves))\\n- Marco Enrico ([@gumacahin](https://github.com/gumacahin))\\n- Pedro Pi\xf1era Buend\xeda ([@pepibumur](https://github.com/pepibumur))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Steve ([@steveworley](https://github.com/steveworley))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tales Porto ([@talesporto](https://github.com/talesporto))\\n- Thiago Sciotta ([@thiagog3](https://github.com/thiagog3))\\n- Tiago Ribeiro ([@tiago-rr](https://github.com/tiago-rr))\\n- Tom Raviv ([@tomrav](https://github.com/tomrav))\\n- Tony Narlock ([@tony](https://github.com/tony))\\n- ZhengYuan Loo ([@loozhengyuan](https://github.com/loozhengyuan))\\n- [@Foxeye-Rinx](https://github.com/Foxeye-Rinx)\\n- [@aehrea](https://github.com/aehrea)\\n- [@akepecs](https://github.com/akepecs)\\n- [@besemuna](https://github.com/besemuna)\\n- [@duanwilliam](https://github.com/duanwilliam)\\n- [@miku86](https://github.com/miku86)\\n- [@serut](https://github.com/serut)\\n- guoxudong ([@sunny0826](https://github.com/sunny0826))"},{"id":"/2.0.0-alpha.72","metadata":{"permalink":"/changelog/2.0.0-alpha.72","source":"@site/changelog/source/2.0.0-alpha.72.md","title":"2.0.0-alpha.72","description":"Breaking Change","date":"2021-03-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"Harvtronix","alias":"Harvtronix","url":"https://github.com/Harvtronix","imageURL":"https://github.com/Harvtronix.png","key":"Harvtronix"},{"name":"Joon-Ha Lee","alias":"koko8829","url":"https://github.com/koko8829","imageURL":"https://github.com/koko8829.png","key":"koko8829"},{"name":"Leandro Oriente","alias":"leandrooriente","url":"https://github.com/leandrooriente","imageURL":"https://github.com/leandrooriente.png","key":"leandrooriente"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho"},{"name":"Lowen","alias":"lowenhere","url":"https://github.com/lowenhere","imageURL":"https://github.com/lowenhere.png","key":"lowenhere"},{"name":"Pierre-Gilles Leymarie","alias":"Pierre-Gilles","url":"https://github.com/Pierre-Gilles","imageURL":"https://github.com/Pierre-Gilles.png","key":"Pierre-Gilles"},{"name":"Quan","alias":"quanengineering","url":"https://github.com/quanengineering","imageURL":"https://github.com/quanengineering.png","key":"quanengineering"},{"name":"Rhodanthe1116","alias":"Rhodanthe1116","url":"https://github.com/Rhodanthe1116","imageURL":"https://github.com/Rhodanthe1116.png","key":"Rhodanthe1116"},{"name":"Steven Hansel","alias":"ShinteiMai","url":"https://github.com/ShinteiMai","imageURL":"https://github.com/ShinteiMai.png","key":"ShinteiMai"},{"name":"Simen Bekkhus","alias":"SimenB","url":"https://github.com/SimenB","imageURL":"https://github.com/SimenB.png","key":"SimenB"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Zoltan Kochan","alias":"zkochan","url":"https://github.com/zkochan","imageURL":"https://github.com/zkochan.png","key":"zkochan"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-16T20:00","authors":["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73"},"nextItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\nStarting with this release for a proper work of i18n functionality, you need to either use Node v14+ or in case of using earlier version of Node.js install [`full-icu` package](https://www.npmjs.com/package/full-icu) and set `NODE_ICU_DATA` environment variable in your npm scripts, for example:\\n\\n```json\\n\\"scripts\\": {\\n \\"start\\": \\"cross-env NODE_ICU_DATA=node_modules/full-icu docusaurus start\\"\\n}\\n```\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`\\n - [#4302](https://github.com/facebook/docusaurus/pull/4302) feat(v2): Improve the initial templates ([@ShinteiMai](https://github.com/ShinteiMai))\\n- `docusaurus-theme-classic`\\n - [#4390](https://github.com/facebook/docusaurus/pull/4390) feat(v2): Add korean default translations ([@koko8829](https://github.com/koko8829))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#4429](https://github.com/facebook/docusaurus/pull/4429) chore(v2): upgrade Infima to v0.2.0-alpha.21 ([@lex111](https://github.com/lex111))\\n - [#4428](https://github.com/facebook/docusaurus/pull/4428) fix(v2): allow using pre tag in Markdown directly ([@lex111](https://github.com/lex111))\\n - [#4381](https://github.com/facebook/docusaurus/pull/4381) fix(v2): specify proper TS path in classic theme ([@lex111](https://github.com/lex111))\\n - [#4383](https://github.com/facebook/docusaurus/pull/4383) fix(v2): set theme color mode for SSR ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4424](https://github.com/facebook/docusaurus/pull/4424) fix(v2): add missing peer dep on @babel/core ([@SimenB](https://github.com/SimenB))\\n - [#4377](https://github.com/facebook/docusaurus/pull/4377) fix(v2): PWA issues + improve docs ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#4407](https://github.com/facebook/docusaurus/pull/4407) fix(v2): broken link checker should not report false positives when using encoded chars ([@Harvtronix](https://github.com/Harvtronix))\\n- Other\\n - [#4410](https://github.com/facebook/docusaurus/pull/4410) fix(v1): Fix v1 site deployment with Crowdin again... ([@slorber](https://github.com/slorber))\\n - [#4396](https://github.com/facebook/docusaurus/pull/4396) fix(v1): Temp fix v1 site deployment: fail-safe on Crowdin upload translations error ([@slorber](https://github.com/slorber))\\n - [#4395](https://github.com/facebook/docusaurus/pull/4395) fix(v1): fix v1 site deploy issues ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4418](https://github.com/facebook/docusaurus/pull/4418) refactor(v2): correct plugin types ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils`, `docusaurus`\\n - [#4405](https://github.com/facebook/docusaurus/pull/4405) refactor(v2): i18n cleanups / refactors ([@longlho](https://github.com/longlho))\\n- `docusaurus-module-type-aliases`\\n - [#4387](https://github.com/facebook/docusaurus/pull/4387) refactor(v2): add ExecutionEnvironment, BrowserOnly, isInternalUrl to type aliases ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#4402](https://github.com/facebook/docusaurus/pull/4402) refactor(v2): merge linkify function used in blog and docs and align properties ([@armano2](https://github.com/armano2))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-theme-common`, `docusaurus-utils-validation`, `docusaurus`\\n - [#4382](https://github.com/facebook/docusaurus/pull/4382) refactor(v2): correct some of type errors reported by eslint ([@armano2](https://github.com/armano2))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4385](https://github.com/facebook/docusaurus/pull/4385) refactor(v2): add missing theme-classic types ([@armano2](https://github.com/armano2))\\n\\n## :memo: Documentation\\n\\n- [#4416](https://github.com/facebook/docusaurus/pull/4416) docs(v2): add Realtime Web Applications Workshop to showcase ([@lowenhere](https://github.com/lowenhere))\\n- [#4408](https://github.com/facebook/docusaurus/pull/4408) docs(v2): add gladysassistant.com to showcase ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- [#4386](https://github.com/facebook/docusaurus/pull/4386) docs(v2): Showcase the pnpm docs ([@zkochan](https://github.com/zkochan))\\n- [#4367](https://github.com/facebook/docusaurus/pull/4367) docs(v2): releasing i18n blog post ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#4401](https://github.com/facebook/docusaurus/pull/4401) chore(v1): fix CircleCI v1 site deploy ([@slorber](https://github.com/slorber))\\n- Other\\n - [#4399](https://github.com/facebook/docusaurus/pull/4399) chore(v2): upgrade example projects ([@slorber](https://github.com/slorber))\\n - [#4398](https://github.com/facebook/docusaurus/pull/4398) chore(v1): trigger v1 site deploy through CI ([@slorber](https://github.com/slorber))\\n- `docusaurus-utils`\\n - [#4384](https://github.com/facebook/docusaurus/pull/4384) chore(v2): avoid bad publish of intl-locales-supported ([@lex111](https://github.com/lex111))\\n\\n## Committers: 14\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Harvtronix ([@Harvtronix](https://github.com/Harvtronix))\\n- Joon-Ha Lee ([@koko8829](https://github.com/koko8829))\\n- Leandro Oriente ([@leandrooriente](https://github.com/leandrooriente))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Lowen ([@lowenhere](https://github.com/lowenhere))\\n- Pierre-Gilles Leymarie ([@Pierre-Gilles](https://github.com/Pierre-Gilles))\\n- Quan ([@quanengineering](https://github.com/quanengineering))\\n- Simen Bekkhus ([@SimenB](https://github.com/SimenB))\\n- Steven Hansel ([@ShinteiMai](https://github.com/ShinteiMai))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Zoltan Kochan ([@zkochan](https://github.com/zkochan))\\n- [@Rhodanthe1116](https://github.com/Rhodanthe1116)"},{"id":"/2.0.0-alpha.71","metadata":{"permalink":"/changelog/2.0.0-alpha.71","source":"@site/changelog/source/2.0.0-alpha.71.md","title":"2.0.0-alpha.71","description":"New Feature","date":"2021-03-09T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ali Saki","alias":"3alisaki","url":"https://github.com/3alisaki","imageURL":"https://github.com/3alisaki.png","key":"3alisaki"},{"name":"Joel M","alias":"9oelM","url":"https://github.com/9oelM","imageURL":"https://github.com/9oelM.png","key":"9oelM"},{"name":"Apurva Ojas","alias":"apurvaojas","url":"https://github.com/apurvaojas","imageURL":"https://github.com/apurvaojas.png","key":"apurvaojas"},{"name":"Armano","alias":"armano2","url":"https://github.com/armano2","imageURL":"https://github.com/armano2.png","key":"armano2"},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag"},{"name":"Jola","alias":"asystentka-jolka","url":"https://github.com/asystentka-jolka","imageURL":"https://github.com/asystentka-jolka.png","key":"asystentka-jolka"},{"name":"Andrew Taft","alias":"ataft","url":"https://github.com/ataft","imageURL":"https://github.com/ataft.png","key":"ataft"},{"name":"aukokyong","alias":"aukokyong","url":"https://github.com/aukokyong","imageURL":"https://github.com/aukokyong.png","key":"aukokyong"},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious"},{"name":"Martin Ad\xe1mek","alias":"B4nan","url":"https://github.com/B4nan","imageURL":"https://github.com/B4nan.png","key":"B4nan"},{"name":"Ben","alias":"ben-qnimble","url":"https://github.com/ben-qnimble","imageURL":"https://github.com/ben-qnimble.png","key":"ben-qnimble"},{"name":"BennoDev","alias":"bennodev19","url":"https://github.com/bennodev19","imageURL":"https://github.com/bennodev19.png","key":"bennodev19"},{"name":"\xc7a\u011flar Tural\u0131","alias":"caglarturali","url":"https://github.com/caglarturali","imageURL":"https://github.com/caglarturali.png","key":"caglarturali"},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann"},{"name":"David Barrat","alias":"dbrrt","url":"https://github.com/dbrrt","imageURL":"https://github.com/dbrrt.png","key":"dbrrt"},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno"},{"name":"Eduardo L\xe1zaro","alias":"edulazaro","url":"https://github.com/edulazaro","imageURL":"https://github.com/edulazaro.png","key":"edulazaro"},{"name":"Eric Carboni","alias":"eric-hc","url":"https://github.com/eric-hc","imageURL":"https://github.com/eric-hc.png","key":"eric-hc"},{"name":"Mohd Shad Mirza","alias":"iamshadmirza","url":"https://github.com/iamshadmirza","imageURL":"https://github.com/iamshadmirza.png","key":"iamshadmirza"},{"name":"Bhargav Ponnapalli","alias":"imbhargav5","url":"https://github.com/imbhargav5","imageURL":"https://github.com/imbhargav5.png","key":"imbhargav5"},{"name":"Ivan Ru\u017eevi\u0107","alias":"iruzevic","url":"https://github.com/iruzevic","imageURL":"https://github.com/iruzevic.png","key":"iruzevic"},{"name":"Jessica Lin","alias":"jlin27","url":"https://github.com/jlin27","imageURL":"https://github.com/jlin27.png","key":"jlin27"},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey"},{"name":"Juan Carlos Blanco Delgado","alias":"juancarlosjr97","url":"https://github.com/juancarlosjr97","imageURL":"https://github.com/juancarlosjr97.png","key":"juancarlosjr97"},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan"},{"name":"Kumar Aditya","alias":"kumaraditya303","url":"https://github.com/kumaraditya303","imageURL":"https://github.com/kumaraditya303.png","key":"kumaraditya303"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Pablo Vidal","alias":"limkinZero","url":"https://github.com/limkinZero","imageURL":"https://github.com/limkinZero.png","key":"limkinZero"},{"name":"Power Lin","alias":"linyuxuanlin","url":"https://github.com/linyuxuanlin","imageURL":"https://github.com/linyuxuanlin.png","key":"linyuxuanlin"},{"name":"Lisa Chandra","alias":"lisa761","url":"https://github.com/lisa761","imageURL":"https://github.com/lisa761.png","key":"lisa761"},{"name":"LittleboyHarry","alias":"LittleboyHarry","url":"https://github.com/LittleboyHarry","imageURL":"https://github.com/LittleboyHarry.png","key":"LittleboyHarry"},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho"},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello"},{"name":"Massoud Maboudi","alias":"massoudmaboudi","url":"https://github.com/massoudmaboudi","imageURL":"https://github.com/massoudmaboudi.png","key":"massoudmaboudi"},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi"},{"name":"Miroiu Emanuel","alias":"miroiu","url":"https://github.com/miroiu","imageURL":"https://github.com/miroiu.png","key":"miroiu"},{"name":"MisterFISHUP","alias":"MisterFISHUP","url":"https://github.com/MisterFISHUP","imageURL":"https://github.com/MisterFISHUP.png","key":"MisterFISHUP"},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun"},{"name":"Sean Campbell","alias":"natac13","url":"https://github.com/natac13","imageURL":"https://github.com/natac13.png","key":"natac13"},{"name":"Nico Jansen","alias":"nicojs","url":"https://github.com/nicojs","imageURL":"https://github.com/nicojs.png","key":"nicojs"},{"name":"Nikolay Samokhvalov","alias":"NikolayS","url":"https://github.com/NikolayS","imageURL":"https://github.com/NikolayS.png","key":"NikolayS"},{"name":"Nathan Bosscher","alias":"ntbosscher","url":"https://github.com/ntbosscher","imageURL":"https://github.com/ntbosscher.png","key":"ntbosscher"},{"name":"Matt Oestreich","alias":"oze4","url":"https://github.com/oze4","imageURL":"https://github.com/oze4.png","key":"oze4"},{"name":"philipp985","alias":"philipp985","url":"https://github.com/philipp985","imageURL":"https://github.com/philipp985.png","key":"philipp985"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"roydukkey","alias":"roydukkey","url":"https://github.com/roydukkey","imageURL":"https://github.com/roydukkey.png","key":"roydukkey"},{"name":"Saihajpreet Singh","alias":"saihaj","url":"https://github.com/saihaj","imageURL":"https://github.com/saihaj.png","key":"saihaj"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"Sam Hrncir","alias":"samhrncir","url":"https://github.com/samhrncir","imageURL":"https://github.com/samhrncir.png","key":"samhrncir"},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky"},{"name":"saydo17","alias":"saydo17","url":"https://github.com/saydo17","imageURL":"https://github.com/saydo17.png","key":"saydo17"},{"name":"Sergio Moreno","alias":"semoal","url":"https://github.com/semoal","imageURL":"https://github.com/semoal.png","key":"semoal"},{"name":"Siemienik Pawel","alias":"Siemienik","url":"https://github.com/Siemienik","imageURL":"https://github.com/Siemienik.png","key":"Siemienik"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"Sam Sam","alias":"sksamuel","url":"https://github.com/sksamuel","imageURL":"https://github.com/sksamuel.png","key":"sksamuel"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Ankur Kedia","alias":"theankurkedia","url":"https://github.com/theankurkedia","imageURL":"https://github.com/theankurkedia.png","key":"theankurkedia"},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu"},{"name":"Tien Vo Xuan","alias":"tienvx","url":"https://github.com/tienvx","imageURL":"https://github.com/tienvx.png","key":"tienvx"},{"name":"tokarchyn","alias":"tokarchyn","url":"https://github.com/tokarchyn","imageURL":"https://github.com/tokarchyn.png","key":"tokarchyn"},{"name":"Tomas Fernandez","alias":"tomsfernandez","url":"https://github.com/tomsfernandez","imageURL":"https://github.com/tomsfernandez.png","key":"tomsfernandez"},{"name":"Vamsi Krishna Reddy Satti","alias":"vamsi3","url":"https://github.com/vamsi3","imageURL":"https://github.com/vamsi3.png","key":"vamsi3"},{"name":"Kevin Viglucci","alias":"viglucci","url":"https://github.com/viglucci","imageURL":"https://github.com/viglucci.png","key":"viglucci"},{"name":"Welly","alias":"wellyshen","url":"https://github.com/wellyshen","imageURL":"https://github.com/wellyshen.png","key":"wellyshen"},{"name":"wolf20482","alias":"wolf20482","url":"https://github.com/wolf20482","imageURL":"https://github.com/wolf20482.png","key":"wolf20482"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Yash Totale","alias":"YashTotale","url":"https://github.com/YashTotale","imageURL":"https://github.com/YashTotale.png","key":"YashTotale"},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts"},{"name":"Yuri Sulyma","alias":"ysulyma","url":"https://github.com/ysulyma","imageURL":"https://github.com/ysulyma.png","key":"ysulyma"},{"name":"Yuval Hazaz","alias":"yuval-hazaz","url":"https://github.com/yuval-hazaz","imageURL":"https://github.com/yuval-hazaz.png","key":"yuval-hazaz"}],"frontMatter":{"mdx":{"format":"md"},"date":"2021-03-09T20:00","authors":["3alisaki","9oelM","apurvaojas","armano2","ArtFlag","asystentka-jolka","ataft","aukokyong","ayonious","B4nan","ben-qnimble","bennodev19","caglarturali","christian-bromann","dbrrt","edno","edulazaro","eric-hc","iamshadmirza","imbhargav5","iruzevic","jlin27","JoelMarcey","juancarlosjr97","juzhiyuan","kumaraditya303","lex111","limkinZero","linyuxuanlin","lisa761","LittleboyHarry","longlho","manzinello","massoudmaboudi","MatanBobi","miroiu","MisterFISHUP","moonrailgun","natac13","nicojs","NikolayS","ntbosscher","oze4","philipp985","RDIL","roydukkey","saihaj","SamChou19815","samhrncir","sammychinedu2ky","saydo17","semoal","Siemienik","Simek","sksamuel","slorber","theankurkedia","TheodoreChu","tienvx","tokarchyn","tomsfernandez","vamsi3","viglucci","wellyshen","wolf20482","yangshun","YashTotale","ykzts","ysulyma","yuval-hazaz"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72"},"nextItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-utils`, `docusaurus`\\n - [#4222](https://github.com/facebook/docusaurus/pull/4222) feat(v2): add ability to set custom heading id ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#4328](https://github.com/facebook/docusaurus/pull/4328) feat(v2): Add playgroundPosition config for live codeblock ([@tokarchyn](https://github.com/tokarchyn))\\n- `docusaurus-theme-classic`\\n - [#4209](https://github.com/facebook/docusaurus/pull/4209) feat(v2): auto focus to tab if it is outside viewport ([@lex111](https://github.com/lex111))\\n - [#4329](https://github.com/facebook/docusaurus/pull/4329) feat(v2): add arabic translation ([@3alisaki](https://github.com/3alisaki))\\n - [#4325](https://github.com/facebook/docusaurus/pull/4325) feat(v2): [theme-classic] add Polish translation ([@Simek](https://github.com/Simek))\\n - [#4312](https://github.com/facebook/docusaurus/pull/4312) feat(v2): Add Turkish translations for theme labels ([@caglarturali](https://github.com/caglarturali))\\n - [#4271](https://github.com/facebook/docusaurus/pull/4271) feat(v2): add Farsi default translations ([@slorber](https://github.com/slorber))\\n - [#4261](https://github.com/facebook/docusaurus/pull/4261) feat(v2): add icon to generic sidebar link ([@lex111](https://github.com/lex111))\\n - [#4109](https://github.com/facebook/docusaurus/pull/4109) feat(v2): default canonical urls ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#4308](https://github.com/facebook/docusaurus/pull/4308) feat(v2): add --config option to CLI ([@longlho](https://github.com/longlho))\\n - [#4185](https://github.com/facebook/docusaurus/pull/4185) feat(v2): allow extend PostCSS config ([@lex111](https://github.com/lex111))\\n - [#4021](https://github.com/facebook/docusaurus/pull/4021) feat(v2): Allow plugins to consume webpack stats ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4303](https://github.com/facebook/docusaurus/pull/4303) feat(v2): add japanese translations ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4295](https://github.com/facebook/docusaurus/pull/4295) feat(v2): Add Interpolate / interpolate APIs + complete theme translations ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#4278](https://github.com/facebook/docusaurus/pull/4278) feat(v2): ability to \\"escape\\" JSX in MDX files as code blocks ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#4232](https://github.com/facebook/docusaurus/pull/4232) feat(v2): editUrl functions should receive md doc permalink ([@slorber](https://github.com/slorber))\\n - [#4121](https://github.com/facebook/docusaurus/pull/4121) feat(v2): editUrl function for advanced use-cases ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4218](https://github.com/facebook/docusaurus/pull/4218) feat(v2): support/use React v17 by default ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#4215](https://github.com/facebook/docusaurus/pull/4215) feat(v2): Add i18n default code translation bundles ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#4140](https://github.com/facebook/docusaurus/pull/4140) feat(v2): add support for RTL direction ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4199](https://github.com/facebook/docusaurus/pull/4199) feat(v2): allow to change location of search bar ([@lex111](https://github.com/lex111))\\n - [#3993](https://github.com/facebook/docusaurus/pull/3993) feat(v2): themed logo in footer ([@natac13](https://github.com/natac13))\\n- `docusaurus`\\n - [#4198](https://github.com/facebook/docusaurus/pull/4198) feat(v2): add fonts loaders + webpack resolve.roots ([@slorber](https://github.com/slorber))\\n - [#3998](https://github.com/facebook/docusaurus/pull/3998) feat(v2): Cache hashed assets to dedicated folders ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#3979](https://github.com/facebook/docusaurus/pull/3979) feat(v2): better error message for invalid plugin config ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#4168](https://github.com/facebook/docusaurus/pull/4168) feat(v2): Extract/translate hardcoded labels from classic theme ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#4098](https://github.com/facebook/docusaurus/pull/4098) feat(v2): improve templates, use JSDoc type annotation, improve `docusaurus.config.js` autocompletion ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- `docusaurus-init`, `docusaurus-migrate`\\n - [#3986](https://github.com/facebook/docusaurus/pull/3986) feat(v2): skip dependency install on docusaurus init ([@kumaraditya303](https://github.com/kumaraditya303))\\n- `docusaurus-plugin-content-docs`\\n - [#3949](https://github.com/facebook/docusaurus/pull/3949) feat(v2): new docs edit options: editCurrentVersion + editLocalizedDocs ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4223](https://github.com/facebook/docusaurus/pull/4223) chore(v2): upgrade dependencies + require Node 12 ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#4366](https://github.com/facebook/docusaurus/pull/4366) fix(v2): align installed core-js version with babel config ([@armano2](https://github.com/armano2))\\n - [#4345](https://github.com/facebook/docusaurus/pull/4345) fix(v2): always extract translations from site/src ([@slorber](https://github.com/slorber))\\n - [#4342](https://github.com/facebook/docusaurus/pull/4342) chore(v2): bump clean-css to 5.1.1 ([@lex111](https://github.com/lex111))\\n - [#4212](https://github.com/facebook/docusaurus/pull/4212) fix(v2): typo in resolve.roots ([@slorber](https://github.com/slorber))\\n - [#4155](https://github.com/facebook/docusaurus/pull/4155) fix(v2): BaseUrl issue banner insertion should be prevented if JS can load ([@slorber](https://github.com/slorber))\\n - [#4137](https://github.com/facebook/docusaurus/pull/4137) fix(v2): escape apostrophes in route paths ([@lex111](https://github.com/lex111))\\n - [#4136](https://github.com/facebook/docusaurus/pull/4136) fix(v2): fix navigation from homepage ([@lex111](https://github.com/lex111))\\n - [#4125](https://github.com/facebook/docusaurus/pull/4125) fix(v2): baseUrl help banner should not be indexed by Google / SEO ([@slorber](https://github.com/slorber))\\n - [#4080](https://github.com/facebook/docusaurus/pull/4080) fix(v2): chokidar reloading debounced ([@semoal](https://github.com/semoal))\\n - [#3965](https://github.com/facebook/docusaurus/pull/3965) fix(v2): fix svg loader for CSS files ([@apurvaojas](https://github.com/apurvaojas))\\n - [#3943](https://github.com/facebook/docusaurus/pull/3943) fix(v2): disables all inlining in CleanCSS ([@lex111](https://github.com/lex111))\\n - [#3941](https://github.com/facebook/docusaurus/pull/3941) fix(v2): fix i18n build logging. ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#4349](https://github.com/facebook/docusaurus/pull/4349) fix(v2): fix update code translations script + update some translations ([@slorber](https://github.com/slorber))\\n - [#4311](https://github.com/facebook/docusaurus/pull/4311) fix(v2): fit footer in viewport when content area is too small ([@lex111](https://github.com/lex111))\\n - [#4340](https://github.com/facebook/docusaurus/pull/4340) fix(v2): prevent useless blog pages to be in search results ([@slorber](https://github.com/slorber))\\n - [#4274](https://github.com/facebook/docusaurus/pull/4274) fix(v2): theme classic should have lib-next prettified ([@slorber](https://github.com/slorber))\\n - [#4267](https://github.com/facebook/docusaurus/pull/4267) fix(v2): Allow null as valid for title of item in footer links. ([@ben-qnimble](https://github.com/ben-qnimble))\\n - [#4254](https://github.com/facebook/docusaurus/pull/4254) fix(v2): fix LTR PostCSS bug on Netlify and monorepo symlinks ([@slorber](https://github.com/slorber))\\n - [#4247](https://github.com/facebook/docusaurus/pull/4247) fix(v2): make doc container full width when hidden sidebar ([@lex111](https://github.com/lex111))\\n - [#4241](https://github.com/facebook/docusaurus/pull/4241) fix(v2): avoid horizontal scrolling when long lines of code ([@lex111](https://github.com/lex111))\\n - [#4200](https://github.com/facebook/docusaurus/pull/4200) fix(v2): various minor bugs with location hash ([@lex111](https://github.com/lex111))\\n - [#4195](https://github.com/facebook/docusaurus/pull/4195) fix(v2): restore hamburger menu ([@lex111](https://github.com/lex111))\\n - [#4189](https://github.com/facebook/docusaurus/pull/4189) fix(v2): prevent click on item menu with children on mobiles ([@lex111](https://github.com/lex111))\\n - [#4176](https://github.com/facebook/docusaurus/pull/4176) fix(v2): make locale dropdown accessible from keyboard ([@lex111](https://github.com/lex111))\\n - [#4163](https://github.com/facebook/docusaurus/pull/4163) fix(v2): fix warning and improve styling inline TOC ([@lex111](https://github.com/lex111))\\n - [#4162](https://github.com/facebook/docusaurus/pull/4162) fix(v2): make more accessible skip link ([@lex111](https://github.com/lex111))\\n - [#4160](https://github.com/facebook/docusaurus/pull/4160) fix(v2): fix hreflang headers ([@slorber](https://github.com/slorber))\\n - [#4147](https://github.com/facebook/docusaurus/pull/4147) fix(v2): avoid misuse section tag in blog posts ([@lex111](https://github.com/lex111))\\n - [#4146](https://github.com/facebook/docusaurus/pull/4146) fix(v2): use current color for language icon ([@lex111](https://github.com/lex111))\\n - [#4118](https://github.com/facebook/docusaurus/pull/4118) fix(v2): navbar dropdown subitems should be translated properly ([@slorber](https://github.com/slorber))\\n - [#4011](https://github.com/facebook/docusaurus/pull/4011) fix(v2): fix accessibility issue with IconArrow ([@natac13](https://github.com/natac13))\\n - [#3968](https://github.com/facebook/docusaurus/pull/3968) fix(v2): fix blog only contextual search ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#4315](https://github.com/facebook/docusaurus/pull/4315) fix(v2): make code blocks more standalone ([@lex111](https://github.com/lex111))\\n - [#4277](https://github.com/facebook/docusaurus/pull/4277) fix(v2): Code blocks should be LTR by default ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#4318](https://github.com/facebook/docusaurus/pull/4318) fix(v2): evaluate code in live editor on client only ([@lex111](https://github.com/lex111))\\n - [#3954](https://github.com/facebook/docusaurus/pull/3954) fix(v2): allow async/await in live code editor ([@9oelM](https://github.com/9oelM))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4339](https://github.com/facebook/docusaurus/pull/4339) fix(v2): search page results localization ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#4304](https://github.com/facebook/docusaurus/pull/4304) fix(v2): fix bad theme pluralization rules for some labels ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`\\n - [#4240](https://github.com/facebook/docusaurus/pull/4240) fix(v2): remove PostCSS plugin for combine duplicated selectors ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4234](https://github.com/facebook/docusaurus/pull/4234) fix(v2): fix website versions page ([@slorber](https://github.com/slorber))\\n - [#4233](https://github.com/facebook/docusaurus/pull/4233) fix(v2): website editUrl should target upstream docs ([@slorber](https://github.com/slorber))\\n - [#4067](https://github.com/facebook/docusaurus/pull/4067) fix(v2): Fix blog post url/date ([@slorber](https://github.com/slorber))\\n - [#3952](https://github.com/facebook/docusaurus/pull/3952) docs(v2): Fix invalid json ([@oze4](https://github.com/oze4))\\n- `docusaurus-theme-search-algolia`\\n - [#4188](https://github.com/facebook/docusaurus/pull/4188) fix(v2): prepend docsearch modal to body element ([@lex111](https://github.com/lex111))\\n - [#4154](https://github.com/facebook/docusaurus/pull/4154) fix(v2): add base url to opensearch.xml ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-ideal-image`\\n - [#4166](https://github.com/facebook/docusaurus/pull/4166) fix(v2): ideal image assets should be served under ./assets ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-common`\\n - [#4092](https://github.com/facebook/docusaurus/pull/4092) fix(v2): fix/enhance minor i18n issues reported ([@slorber](https://github.com/slorber))\\n - [#3940](https://github.com/facebook/docusaurus/pull/3940) fix(v2): i18n should not crash theme without footer ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#4004](https://github.com/facebook/docusaurus/pull/4004) fix(v2): Fix double trailingSlash in sitemap.xml ([@ntbosscher](https://github.com/ntbosscher))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#3970](https://github.com/facebook/docusaurus/pull/3970) fix(v2): fix multi-instance mdx loaders not sandboxed correctly ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`\\n - [#3903](https://github.com/facebook/docusaurus/pull/3903) fix(v2): fix redirect toUrl (windows + trailing slash) ([@saydo17](https://github.com/saydo17))\\n- `docusaurus-utils`\\n - [#3944](https://github.com/facebook/docusaurus/pull/3944) fix(v2): ignore style imports in excerpt ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#4371](https://github.com/facebook/docusaurus/pull/4371) refactor(v2): update Russian translation in classic theme ([@lex111](https://github.com/lex111))\\n - [#4359](https://github.com/facebook/docusaurus/pull/4359) polish(v2): [theme-classic] slightly improve Japanese translation ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n - [#4350](https://github.com/facebook/docusaurus/pull/4350) polish(v2): Updated theme label translations for Turkish ([@caglarturali](https://github.com/caglarturali))\\n - [#4351](https://github.com/facebook/docusaurus/pull/4351) polish(v2): add japanese translation for #4304 ([@ykzts](https://github.com/ykzts))\\n - [#4309](https://github.com/facebook/docusaurus/pull/4309) polish(v2): improved Farsi translation ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4279](https://github.com/facebook/docusaurus/pull/4279) polish(v2): theme default translations for language de / german ([@philipp985](https://github.com/philipp985))\\n - [#4275](https://github.com/facebook/docusaurus/pull/4275) polish(v2): Add more tags translations ([@slorber](https://github.com/slorber))\\n - [#4246](https://github.com/facebook/docusaurus/pull/4246) refactor(v2): add Russian translation for classic theme ([@lex111](https://github.com/lex111))\\n - [#4242](https://github.com/facebook/docusaurus/pull/4242) refactor(v2): use Link component for external links ([@lex111](https://github.com/lex111))\\n - [#4244](https://github.com/facebook/docusaurus/pull/4244) refactor(v2): clean-ups and fixes ([@lex111](https://github.com/lex111))\\n - [#4193](https://github.com/facebook/docusaurus/pull/4193) refactor(v2): update tabs to follow WAI-ARIA spec ([@lex111](https://github.com/lex111))\\n - [#4194](https://github.com/facebook/docusaurus/pull/4194) refactor(v2): use transform instead of top position for hideable navbar ([@lex111](https://github.com/lex111))\\n - [#4167](https://github.com/facebook/docusaurus/pull/4167) refactor(v2): minor styling improvements ([@lex111](https://github.com/lex111))\\n - [#4169](https://github.com/facebook/docusaurus/pull/4169) refactor(v2): remove delay after skip link pressed ([@lex111](https://github.com/lex111))\\n - [#4086](https://github.com/facebook/docusaurus/pull/4086) style(v2): add className to tab container ([@ArtFlag](https://github.com/ArtFlag))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#4352](https://github.com/facebook/docusaurus/pull/4352) refactor(v2): format last updated date using Intl ([@lex111](https://github.com/lex111))\\n - [#4243](https://github.com/facebook/docusaurus/pull/4243) refactor(v2): introduce Seo component for internal using ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#4344](https://github.com/facebook/docusaurus/pull/4344) refactor(v2): format post date using Intl ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#4257](https://github.com/facebook/docusaurus/pull/4257) refactor(v2): improve notifier message ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#4219](https://github.com/facebook/docusaurus/pull/4219) refactor(v2): add more translatable strings ([@lex111](https://github.com/lex111))\\n- Other\\n - [#4074](https://github.com/facebook/docusaurus/pull/4074) polish(v2): improve codesandbox template package.json ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3953](https://github.com/facebook/docusaurus/pull/3953) refactor(v2): fix debug plugin name ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-debug`, `docusaurus-theme-classic`\\n - [#3946](https://github.com/facebook/docusaurus/pull/3946) refactor(v2): minor a11y tweaks ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#4369](https://github.com/facebook/docusaurus/pull/4369) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n - [#4362](https://github.com/facebook/docusaurus/pull/4362) docs(v2): Add stryker-mutator.io to showcase ([@nicojs](https://github.com/nicojs))\\n - [#4354](https://github.com/facebook/docusaurus/pull/4354) docs(v2): add trpgengine showcase ([@moonrailgun](https://github.com/moonrailgun))\\n - [#4346](https://github.com/facebook/docusaurus/pull/4346) docs(v1): update phrasing for website dir relative to docs dir ([@aukokyong](https://github.com/aukokyong))\\n - [#4338](https://github.com/facebook/docusaurus/pull/4338) docs(v2): update showcase instruction regarding tags + fix site tags ([@slorber](https://github.com/slorber))\\n - [#4331](https://github.com/facebook/docusaurus/pull/4331) docs(v2): add ocpeasy to users ([@dbrrt](https://github.com/dbrrt))\\n - [#4307](https://github.com/facebook/docusaurus/pull/4307) docs(v2): Add RactivePlayer to showcase ([@ysulyma](https://github.com/ysulyma))\\n - [#4297](https://github.com/facebook/docusaurus/pull/4297) docs(v2): Fix examples by importing React ([@roydukkey](https://github.com/roydukkey))\\n - [#4296](https://github.com/facebook/docusaurus/pull/4296) docs(v2): move migrated sites from v1 to v2 showcase ([@lisa761](https://github.com/lisa761))\\n - [#4293](https://github.com/facebook/docusaurus/pull/4293) docs(v2): Added React Native ARIA to showcase ([@theankurkedia](https://github.com/theankurkedia))\\n - [#4284](https://github.com/facebook/docusaurus/pull/4284) docs(v2): Add AttoBot website to showcase page ([@wolf20482](https://github.com/wolf20482))\\n - [#4285](https://github.com/facebook/docusaurus/pull/4285) docs(v2): escape more jsx in mdx files for Crowdin ([@slorber](https://github.com/slorber))\\n - [#4283](https://github.com/facebook/docusaurus/pull/4283) docs(v2): Add Postgres.ai to showcase ([@NikolayS](https://github.com/NikolayS))\\n - [#4282](https://github.com/facebook/docusaurus/pull/4282) docs: update Netlify deploy status badge ([@slorber](https://github.com/slorber))\\n - [#4259](https://github.com/facebook/docusaurus/pull/4259) docs(v2): improve cli docs ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#4266](https://github.com/facebook/docusaurus/pull/4266) docs(v2): update agilets banner ([@bennodev19](https://github.com/bennodev19))\\n - [#4263](https://github.com/facebook/docusaurus/pull/4263) docs(v2): remove npx and use github action to configure ssh key ([@MatanBobi](https://github.com/MatanBobi))\\n - [#4262](https://github.com/facebook/docusaurus/pull/4262) docs(v2): Added kotest to showcase ([@sksamuel](https://github.com/sksamuel))\\n - [#4256](https://github.com/facebook/docusaurus/pull/4256) docs(v2): Add docusaurus2-graphql-doc-generator to community resources ([@edno](https://github.com/edno))\\n - [#4252](https://github.com/facebook/docusaurus/pull/4252) docs(v2): Added mailgo to showcase ([@manzinello](https://github.com/manzinello))\\n - [#4251](https://github.com/facebook/docusaurus/pull/4251) docs(v2): Add Axioms to showcase ([@limkinZero](https://github.com/limkinZero))\\n - [#4237](https://github.com/facebook/docusaurus/pull/4237) docs(v2): Replace mbt-bundle by sicope-model ([@tienvx](https://github.com/tienvx))\\n - [#4236](https://github.com/facebook/docusaurus/pull/4236) docs(v2): v2 migration should mention RSS feed url change ([@slorber](https://github.com/slorber))\\n - [#4230](https://github.com/facebook/docusaurus/pull/4230) docs(v2): fix npm/yarn command example for swizzling TypeScript theme components ([@YashTotale](https://github.com/YashTotale))\\n - [#4229](https://github.com/facebook/docusaurus/pull/4229) docs(v2): Fix link to slash introduction svg ([@SamChou19815](https://github.com/SamChou19815))\\n - [#4226](https://github.com/facebook/docusaurus/pull/4226) docs(v2): Removing wrong parenthesis on image variable ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n - [#4225](https://github.com/facebook/docusaurus/pull/4225) docs(v2): added Apache APISIX ([@juzhiyuan](https://github.com/juzhiyuan))\\n - [#4224](https://github.com/facebook/docusaurus/pull/4224) docs(v2): Add MikroORM site to showcase page ([@B4nan](https://github.com/B4nan))\\n - [#4220](https://github.com/facebook/docusaurus/pull/4220) Add WebdriverIO docs page as showcase ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4210](https://github.com/facebook/docusaurus/pull/4210) misc: add requirements for sites being added to showcase ([@lex111](https://github.com/lex111))\\n - [#4207](https://github.com/facebook/docusaurus/pull/4207) docs(v2): Added Console Table Documentation Site to showcase ([@ayonious](https://github.com/ayonious))\\n - [#4204](https://github.com/facebook/docusaurus/pull/4204) docs(v1): fixing a broken link in blog posts ([@ayonious](https://github.com/ayonious))\\n - [#4178](https://github.com/facebook/docusaurus/pull/4178) docs(v2): localize 404 page with Netlify + docs ([@slorber](https://github.com/slorber))\\n - [#4177](https://github.com/facebook/docusaurus/pull/4177) docs(v2): Add docusaurus-plugin-remote-content to resources list ([@RDIL](https://github.com/RDIL))\\n - [#4172](https://github.com/facebook/docusaurus/pull/4172) docs(v2): Add react-hooks.org to showcase ([@imbhargav5](https://github.com/imbhargav5))\\n - [#4173](https://github.com/facebook/docusaurus/pull/4173) docs(v2): typo fixing double colon ([@ayonious](https://github.com/ayonious))\\n - [#4164](https://github.com/facebook/docusaurus/pull/4164) docs(v2): add a note for images not rendered on dev server ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n - [#4161](https://github.com/facebook/docusaurus/pull/4161) docs(v2): Add docusaurus-theme-github-codeblock ([@christian-bromann](https://github.com/christian-bromann))\\n - [#4158](https://github.com/facebook/docusaurus/pull/4158) docs(v2): improve bad static assets doc + remove some useless useBaseUrl usage ([@slorber](https://github.com/slorber))\\n - [#4144](https://github.com/facebook/docusaurus/pull/4144) docs(v2): community docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4143](https://github.com/facebook/docusaurus/pull/4143) docs(v2): guide docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4141](https://github.com/facebook/docusaurus/pull/4141) docs(v2): plugins docs typo fix ([@ayonious](https://github.com/ayonious))\\n - [#4139](https://github.com/facebook/docusaurus/pull/4139) docs(v2): Add Rematch site to showcase page ([@semoal](https://github.com/semoal))\\n - [#4128](https://github.com/facebook/docusaurus/pull/4128) docs(v2): remove duplicate link from docs about Docusaurus1 ([@ayonious](https://github.com/ayonious))\\n - [#4129](https://github.com/facebook/docusaurus/pull/4129) docs(v2): typo fix in Migration Docs ([@ayonious](https://github.com/ayonious))\\n - [#4127](https://github.com/facebook/docusaurus/pull/4127) docs(v2): remove unnecessary brace from installation doc ([@ayonious](https://github.com/ayonious))\\n - [#4130](https://github.com/facebook/docusaurus/pull/4130) docs(v2): typo in i18n docs ([@ayonious](https://github.com/ayonious))\\n - [#4112](https://github.com/facebook/docusaurus/pull/4112) docs(v2): Do not encourage using the permalink prop ([@slorber](https://github.com/slorber))\\n - [#4106](https://github.com/facebook/docusaurus/pull/4106) docs(v2): update broken link on resources page ([@eric-hc](https://github.com/eric-hc))\\n - [#4084](https://github.com/facebook/docusaurus/pull/4084) docs(v2): Use the TOCInline component in config doc ([@slorber](https://github.com/slorber))\\n - [#4020](https://github.com/facebook/docusaurus/pull/4020) docs(v2): 2020 recap blog post ([@slorber](https://github.com/slorber))\\n - [#4009](https://github.com/facebook/docusaurus/pull/4009) docs(v2): add hideableSidebar option to config demo ([@natac13](https://github.com/natac13))\\n - [#4062](https://github.com/facebook/docusaurus/pull/4062) docs(v2): Add codesandbox integration ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n - [#4058](https://github.com/facebook/docusaurus/pull/4058) docs(v2): Include new.docusaurus.io CodeSandbox in issue templates + README ([@slorber](https://github.com/slorber))\\n - [#4053](https://github.com/facebook/docusaurus/pull/4053) docs(v2): Add Eightshift Docs site to showcase page ([@iruzevic](https://github.com/iruzevic))\\n - [#4048](https://github.com/facebook/docusaurus/pull/4048) docs(v1): Docker: remind the user to use the --host flag ([@tomsfernandez](https://github.com/tomsfernandez))\\n - [#4047](https://github.com/facebook/docusaurus/pull/4047) docs(v1): version page should recommend v2 ([@slorber](https://github.com/slorber))\\n - [#4046](https://github.com/facebook/docusaurus/pull/4046) docs(v2): add sciwp to showcase ([@edulazaro](https://github.com/edulazaro))\\n - [#4036](https://github.com/facebook/docusaurus/pull/4036) docs(v2): Add Nodify to showcase ([@miroiu](https://github.com/miroiu))\\n - [#4038](https://github.com/facebook/docusaurus/pull/4038) docs(v1): suggest to use Docusaurus 2 even for non-FB websites ([@slorber](https://github.com/slorber))\\n - [#4026](https://github.com/facebook/docusaurus/pull/4026) docs(v2): Add FlexIt to showcase ([@ataft](https://github.com/ataft))\\n - [#4022](https://github.com/facebook/docusaurus/pull/4022) docs: fix typo from \'dissapear\' to \'disappear\' ([@vamsi3](https://github.com/vamsi3))\\n - [#4002](https://github.com/facebook/docusaurus/pull/4002) docs(v2): Add how to run your own DocSearch ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#3997](https://github.com/facebook/docusaurus/pull/3997) docs(v2): Add Datagit site to showcase page ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n - [#3990](https://github.com/facebook/docusaurus/pull/3990) docs(v2): Add wiki-powerto site showcase ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n - [#3991](https://github.com/facebook/docusaurus/pull/3991) docs(v2): add overwriting css variables for dark mode ([@natac13](https://github.com/natac13))\\n - [#3987](https://github.com/facebook/docusaurus/pull/3987) docs(v2): Add AgileTs site to showcase page ([@bennodev19](https://github.com/bennodev19))\\n - [#3978](https://github.com/facebook/docusaurus/pull/3978) docs(v2): Add documentation for docs multi-instance support ([@slorber](https://github.com/slorber))\\n - [#3977](https://github.com/facebook/docusaurus/pull/3977) docs(v2): nudge users to add site to showcase ([@slorber](https://github.com/slorber))\\n - [#3975](https://github.com/facebook/docusaurus/pull/3975) docs(v2): Reorganize/split the guides doc / markdown sections ([@slorber](https://github.com/slorber))\\n - [#3976](https://github.com/facebook/docusaurus/pull/3976) docs(v2): Add AI-Speaker site to showcase page ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n - [#3974](https://github.com/facebook/docusaurus/pull/3974) docs(v2): doc typo on sidebar admonition ([@slorber](https://github.com/slorber))\\n - [#3962](https://github.com/facebook/docusaurus/pull/3962) docs(v2): Add migration info doc regarding docs folder location ([@slorber](https://github.com/slorber))\\n - [#3950](https://github.com/facebook/docusaurus/pull/3950) docs(v2): update GitHub entreprise deployment doc ([@samhrncir](https://github.com/samhrncir))\\n - [#3945](https://github.com/facebook/docusaurus/pull/3945) docs(v2): Added information about setting `/` in routeBasePath ([@Siemienik](https://github.com/Siemienik))\\n- `docusaurus-theme-classic`\\n - [#4356](https://github.com/facebook/docusaurus/pull/4356) polish(v2): [theme-classic] add Chinese translations (zh-Hant & zh-Hans) ([@MisterFISHUP](https://github.com/MisterFISHUP))\\n- `docusaurus`\\n - [#4126](https://github.com/facebook/docusaurus/pull/4126) docs(v2): do not recommend using useBaseUrl() hook in most cases ([@slorber](https://github.com/slorber))\\n - [#4049](https://github.com/facebook/docusaurus/pull/4049) docs(v1): version page should recommend v2 (bis) ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus`\\n - [#4014](https://github.com/facebook/docusaurus/pull/4014) docs(v2): i18n doc + polish ([@slorber](https://github.com/slorber))\\n- `docusaurus-cssnano-preset`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-common`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#4034](https://github.com/facebook/docusaurus/pull/4034) docs(v2): Add READMEs to v2 packages ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`\\n - [#3881](https://github.com/facebook/docusaurus/pull/3881) docs(v2): update FB OSS logo ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- Other\\n - [#4372](https://github.com/facebook/docusaurus/pull/4372) chore(v1): release docusaurus v1.14.7 ([@slorber](https://github.com/slorber))\\n - [#4368](https://github.com/facebook/docusaurus/pull/4368) chore(deps): bump elliptic from 6.5.3 to 6.5.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#4365](https://github.com/facebook/docusaurus/pull/4365) chore: unstable yarnlock ([@slorber](https://github.com/slorber))\\n - [#4337](https://github.com/facebook/docusaurus/pull/4337) misc: restore build size bot ([@slorber](https://github.com/slorber))\\n - [#4289](https://github.com/facebook/docusaurus/pull/4289) chore(v2): remove docs for alpha v69 ([@lex111](https://github.com/lex111))\\n - [#4253](https://github.com/facebook/docusaurus/pull/4253) chore(v2): remove docs for alpha v68 ([@lex111](https://github.com/lex111))\\n - [#4248](https://github.com/facebook/docusaurus/pull/4248) chore(v2): Fix build size bot ([@slorber](https://github.com/slorber))\\n - [#4214](https://github.com/facebook/docusaurus/pull/4214) chore(v2): setup for i18n staging deployment ([@slorber](https://github.com/slorber))\\n - [#4159](https://github.com/facebook/docusaurus/pull/4159) chore(v2): fix build size bot again ([@slorber](https://github.com/slorber))\\n - [#4156](https://github.com/facebook/docusaurus/pull/4156) chore(v2): fix build size bot monitoring of js/css assets ([@slorber](https://github.com/slorber))\\n - [#4100](https://github.com/facebook/docusaurus/pull/4100) chore(v2): remove docs for alpha v66 ([@lex111](https://github.com/lex111))\\n - [#4077](https://github.com/facebook/docusaurus/pull/4077) chore(v2): fix unstable master yarn.lock ([@slorber](https://github.com/slorber))\\n - [#4063](https://github.com/facebook/docusaurus/pull/4063) chore(v2): Regen codesandbox templates + add template: \\"docusaurus\\" ([@slorber](https://github.com/slorber))\\n - [#4056](https://github.com/facebook/docusaurus/pull/4056) chore(v2): update codesandbox redirect ([@slorber](https://github.com/slorber))\\n - [#4041](https://github.com/facebook/docusaurus/pull/4041) chore(v1): revert v1 netlify.toml ([@slorber](https://github.com/slorber))\\n - [#4040](https://github.com/facebook/docusaurus/pull/4040) chore(v1): upgrade v1 Crowdin cli + CI config ([@slorber](https://github.com/slorber))\\n - [#4030](https://github.com/facebook/docusaurus/pull/4030) chore(v2): install Crowdin cli through npm package ([@slorber](https://github.com/slorber))\\n - [#4003](https://github.com/facebook/docusaurus/pull/4003) chore: add DevContainer config for GitHub codespaces ([@kumaraditya303](https://github.com/kumaraditya303))\\n - [#4001](https://github.com/facebook/docusaurus/pull/4001) chore(v2): Upgrade crowdin ([@slorber](https://github.com/slorber))\\n - [#3995](https://github.com/facebook/docusaurus/pull/3995) chore(v2): remove docs for alpha v65 ([@lex111](https://github.com/lex111))\\n - [#3960](https://github.com/facebook/docusaurus/pull/3960) fix(v2): remove duplicate section on Versions page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#4370](https://github.com/facebook/docusaurus/pull/4370) chore(v2): update infima ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4361](https://github.com/facebook/docusaurus/pull/4361) refactor(v2): remove duplicated lodash dependencies and import only what needed ([@armano2](https://github.com/armano2))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#4270](https://github.com/facebook/docusaurus/pull/4270) chore(v2): upgrade react-dev-utils ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#4264](https://github.com/facebook/docusaurus/pull/4264) chore(v2): bump/align deps in monorepo: commander, semver, fs-extra ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#4265](https://github.com/facebook/docusaurus/pull/4265) chore(v2): PostCSS peer dep fix ([@RDIL](https://github.com/RDIL))\\n - [#4091](https://github.com/facebook/docusaurus/pull/4091) refactor(v2): Switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n - [#4066](https://github.com/facebook/docusaurus/pull/4066) chore(v2): Update a few dependencies ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#4148](https://github.com/facebook/docusaurus/pull/4148) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-pwa`\\n - [#4120](https://github.com/facebook/docusaurus/pull/4120) chore(v2): Update workbox to v6 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-utils`, `docusaurus`\\n - [#4081](https://github.com/facebook/docusaurus/pull/4081) chore(v2): Update webpack-related dependencies, pre-work to migrate to Webpack 5 ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-init`, `docusaurus`\\n - [#4012](https://github.com/facebook/docusaurus/pull/4012) chore(v2): docusaurus-init: switch from inquirer to prompts ([@RDIL](https://github.com/RDIL))\\n- `docusaurus-plugin-sitemap`\\n - [#4005](https://github.com/facebook/docusaurus/pull/4005) chore(v2): prettier fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus-migrate`\\n - [#3988](https://github.com/facebook/docusaurus/pull/3988) chore(v2): fix date-sensitive test fixture ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#3959](https://github.com/facebook/docusaurus/pull/3959) chore(v2): fix windows Jest tests ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-cssnano-preset`, `docusaurus-plugin-content-blog`, `docusaurus`\\n - [#4355](https://github.com/facebook/docusaurus/pull/4355) perf(v2): improve blog mdx-loader and postcss loader ([@lex111](https://github.com/lex111))\\n\\n## Committers: 70\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ali Saki ([@3alisaki](https://github.com/3alisaki))\\n- Andrew Taft ([@ataft](https://github.com/ataft))\\n- Ankur Kedia ([@theankurkedia](https://github.com/theankurkedia))\\n- Apurva Ojas ([@apurvaojas](https://github.com/apurvaojas))\\n- Armano ([@armano2](https://github.com/armano2))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben ([@ben-qnimble](https://github.com/ben-qnimble))\\n- BennoDev ([@bennodev19](https://github.com/bennodev19))\\n- Bhargav Ponnapalli ([@imbhargav5](https://github.com/imbhargav5))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- David Barrat ([@dbrrt](https://github.com/dbrrt))\\n- Eduardo L\xe1zaro ([@edulazaro](https://github.com/edulazaro))\\n- Eric Carboni ([@eric-hc](https://github.com/eric-hc))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Ivan Ru\u017eevi\u0107 ([@iruzevic](https://github.com/iruzevic))\\n- Jessica Lin ([@jlin27](https://github.com/jlin27))\\n- Joel M ([@9oelM](https://github.com/9oelM))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jola ([@asystentka-jolka](https://github.com/asystentka-jolka))\\n- Juan Carlos Blanco Delgado ([@juancarlosjr97](https://github.com/juancarlosjr97))\\n- Kevin Viglucci ([@viglucci](https://github.com/viglucci))\\n- Kumar Aditya ([@kumaraditya303](https://github.com/kumaraditya303))\\n- Lisa Chandra ([@lisa761](https://github.com/lisa761))\\n- LittleboyHarry ([@LittleboyHarry](https://github.com/LittleboyHarry))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Martin Ad\xe1mek ([@B4nan](https://github.com/B4nan))\\n- Massoud Maboudi ([@massoudmaboudi](https://github.com/massoudmaboudi))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Matt Oestreich ([@oze4](https://github.com/oze4))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- Miroiu Emanuel ([@miroiu](https://github.com/miroiu))\\n- Mohd Shad Mirza ([@iamshadmirza](https://github.com/iamshadmirza))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- Nathan Bosscher ([@ntbosscher](https://github.com/ntbosscher))\\n- Nico Jansen ([@nicojs](https://github.com/nicojs))\\n- Nikolay Samokhvalov ([@NikolayS](https://github.com/NikolayS))\\n- Pablo Vidal ([@limkinZero](https://github.com/limkinZero))\\n- Power Lin ([@linyuxuanlin](https://github.com/linyuxuanlin))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Saihajpreet Singh ([@saihaj](https://github.com/saihaj))\\n- Sam Hrncir ([@samhrncir](https://github.com/samhrncir))\\n- Sam Sam ([@sksamuel](https://github.com/sksamuel))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sean Campbell ([@natac13](https://github.com/natac13))\\n- Sergio Moreno ([@semoal](https://github.com/semoal))\\n- Siemienik Pawel ([@Siemienik](https://github.com/Siemienik))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Tien Vo Xuan ([@tienvx](https://github.com/tienvx))\\n- Tomas Fernandez ([@tomsfernandez](https://github.com/tomsfernandez))\\n- Vamsi Krishna Reddy Satti ([@vamsi3](https://github.com/vamsi3))\\n- Welly ([@wellyshen](https://github.com/wellyshen))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Yash Totale ([@YashTotale](https://github.com/YashTotale))\\n- Yuri Sulyma ([@ysulyma](https://github.com/ysulyma))\\n- Yuval Hazaz ([@yuval-hazaz](https://github.com/yuval-hazaz))\\n- [@MisterFISHUP](https://github.com/MisterFISHUP)\\n- [@aukokyong](https://github.com/aukokyong)\\n- [@philipp985](https://github.com/philipp985)\\n- [@roydukkey](https://github.com/roydukkey)\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- [@saydo17](https://github.com/saydo17)\\n- [@tokarchyn](https://github.com/tokarchyn)\\n- [@wolf20482](https://github.com/wolf20482)\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- \xc7a\u011flar Tural\u0131 ([@caglarturali](https://github.com/caglarturali))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.70","metadata":{"permalink":"/changelog/2.0.0-alpha.70","source":"@site/changelog/source/2.0.0-alpha.70.md","title":"2.0.0-alpha.70","description":"New Feature","date":"2020-12-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Aar\xf3n Garc\xeda Herv\xe1s","alias":"aarongarciah","url":"https://github.com/aarongarciah","imageURL":"https://github.com/aarongarciah.png","key":"aarongarciah"},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr"},{"name":"Alex1304","alias":"Alex1304","url":"https://github.com/Alex1304","imageURL":"https://github.com/Alex1304.png","key":"Alex1304"},{"name":"Arthur","alias":"ArtFlag","url":"https://github.com/ArtFlag","imageURL":"https://github.com/ArtFlag.png","key":"ArtFlag"},{"name":"borool","alias":"borool","url":"https://github.com/borool","imageURL":"https://github.com/borool.png","key":"borool"},{"name":"Cindy Gu","alias":"cindygu4","url":"https://github.com/cindygu4","imageURL":"https://github.com/cindygu4.png","key":"cindygu4"},{"name":"davidmauskop","alias":"davidmauskop","url":"https://github.com/davidmauskop","imageURL":"https://github.com/davidmauskop.png","key":"davidmauskop"},{"name":"Derric Gilling","alias":"dgilling","url":"https://github.com/dgilling","imageURL":"https://github.com/dgilling.png","key":"dgilling"},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour"},{"name":"Hadrien Milano","alias":"hmil","url":"https://github.com/hmil","imageURL":"https://github.com/hmil.png","key":"hmil"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Lo\xefc Poullain","alias":"LoicPoullain","url":"https://github.com/LoicPoullain","imageURL":"https://github.com/LoicPoullain.png","key":"LoicPoullain"},{"name":"Matteo Manzinello","alias":"manzinello","url":"https://github.com/manzinello","imageURL":"https://github.com/manzinello.png","key":"manzinello"},{"name":"Matija Sosic","alias":"matijaSos","url":"https://github.com/matijaSos","imageURL":"https://github.com/matijaSos.png","key":"matijaSos"},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq"},{"name":"Oliver Ullman","alias":"oriooctopus","url":"https://github.com/oriooctopus","imageURL":"https://github.com/oriooctopus.png","key":"oriooctopus"},{"name":"Rami","alias":"Romstar","url":"https://github.com/Romstar","imageURL":"https://github.com/Romstar.png","key":"Romstar"},{"name":"Sarthak kundra","alias":"sarthakkundra","url":"https://github.com/sarthakkundra","imageURL":"https://github.com/sarthakkundra.png","key":"sarthakkundra"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"Kaartic Sivaraam","alias":"sivaraam","url":"https://github.com/sivaraam","imageURL":"https://github.com/sivaraam.png","key":"sivaraam"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Varshit Shah","alias":"Varshit07","url":"https://github.com/Varshit07","imageURL":"https://github.com/Varshit07.png","key":"Varshit07"},{"name":"Stephen Woodruff","alias":"woodrufs","url":"https://github.com/woodrufs","imageURL":"https://github.com/woodrufs.png","key":"woodrufs"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-12-17T20:00","authors":["aarongarciah","aeneasr","Alex1304","ArtFlag","borool","cindygu4","davidmauskop","dgilling","francoischalifour","hmil","lex111","LoicPoullain","manzinello","matijaSos","mpsq","oriooctopus","Romstar","sarthakkundra","Simek","sivaraam","slorber","Varshit07","woodrufs"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71"},"nextItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3932](https://github.com/facebook/docusaurus/pull/3932) feat(v2): Add Root theme element ([@slorber](https://github.com/slorber))\\n- `docusaurus-module-type-aliases`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3916](https://github.com/facebook/docusaurus/pull/3916) feat(v2): Add localeDropdown navbar item type + i18n localeConfigs field ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#3888](https://github.com/facebook/docusaurus/pull/3888) feat(v2): add custom props for consumption by swizzled sidebar ([@oriooctopus](https://github.com/oriooctopus))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n- Other\\n - [#3827](https://github.com/facebook/docusaurus/pull/3827) feat(v2): add automated canary releases ([@slorber](https://github.com/slorber))\\n - [#3761](https://github.com/facebook/docusaurus/pull/3761) feat(v2): Added Lighthouse CI to PR checks ([@sarthakkundra](https://github.com/sarthakkundra))\\n- `docusaurus-1.x`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3325](https://github.com/facebook/docusaurus/pull/3325) feat(v2): core v2 i18n support + Docusaurus site Crowdin integration ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3904](https://github.com/facebook/docusaurus/pull/3904) feat(v2): inline table-of-contents + refactor TOC ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3842](https://github.com/facebook/docusaurus/pull/3842) feat(v2): enable feeds by default in blog plugin ([@cindygu4](https://github.com/cindygu4))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3922](https://github.com/facebook/docusaurus/pull/3922) fix(v2): fix navbar items issue on Windows? ([@slorber](https://github.com/slorber))\\n - [#3920](https://github.com/facebook/docusaurus/pull/3920) fix(v2): i18n translation extractor should handle JSX formatting edge cases better ([@slorber](https://github.com/slorber))\\n - [#3896](https://github.com/facebook/docusaurus/pull/3896) fix(v2): do not treat at-rules during CSS minification ([@lex111](https://github.com/lex111))\\n - [#3869](https://github.com/facebook/docusaurus/pull/3869) fix(v2): load plugin commands async to fix broken plugin CLI commands `docs:version` ([@aeneasr](https://github.com/aeneasr))\\n- `docusaurus-theme-classic`\\n - [#3921](https://github.com/facebook/docusaurus/pull/3921) fix(v2): remove useless console log ([@slorber](https://github.com/slorber))\\n - [#3895](https://github.com/facebook/docusaurus/pull/3895) fix(v2): use proper element for pagination nav label ([@lex111](https://github.com/lex111))\\n - [#3882](https://github.com/facebook/docusaurus/pull/3882) fix(v2): improve Footer structure, add class names, use Infima transition ([@Simek](https://github.com/Simek))\\n - [#3877](https://github.com/facebook/docusaurus/pull/3877) fix(v2): dynamic dark mode detection without toggle widget ([@hmil](https://github.com/hmil))\\n - [#3854](https://github.com/facebook/docusaurus/pull/3854) fix(v2): refactor icons in theme-classic, fix swizzle issue ([@Simek](https://github.com/Simek))\\n - [#3823](https://github.com/facebook/docusaurus/pull/3823) fix(v2): support rendering of singular tabs ([@aeneasr](https://github.com/aeneasr))\\n - [#3817](https://github.com/facebook/docusaurus/pull/3817) fix(v2): Allow footer logo at attribute to be empty ([@aarongarciah](https://github.com/aarongarciah))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3900](https://github.com/facebook/docusaurus/pull/3900) fix(v2): correct typo in metas generated for Twitter cards ([@mpsq](https://github.com/mpsq))\\n- Other\\n - [#3872](https://github.com/facebook/docusaurus/pull/3872) chore: add missing v1 generated files to ignores ([@Simek](https://github.com/Simek))\\n - [#3833](https://github.com/facebook/docusaurus/pull/3833) fix(v2): temporary: disable crowdin until PR env variable permission fixed ([@slorber](https://github.com/slorber))\\n- `stylelint-copyright`\\n - [#3852](https://github.com/facebook/docusaurus/pull/3852) fix(v2): to fix the canary release GH workflow ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3853](https://github.com/facebook/docusaurus/pull/3853) fix(v2): fix DocSearch keyboard navigator ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3837](https://github.com/facebook/docusaurus/pull/3837) fix(v2): update SearchPage styling, fix appearance in dark mode ([@Simek](https://github.com/Simek))\\n - [#3828](https://github.com/facebook/docusaurus/pull/3828) fix(v2): restore Algolia search ([@lex111](https://github.com/lex111))\\n - [#3819](https://github.com/facebook/docusaurus/pull/3819) feat(search): update DocSearch to alpha.31 ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-docs`\\n - [#3839](https://github.com/facebook/docusaurus/pull/3839) fix(v2): remove unnecessary backtick in output ([@sivaraam](https://github.com/sivaraam))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3829](https://github.com/facebook/docusaurus/pull/3829) fix(v2): fix search ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3824](https://github.com/facebook/docusaurus/pull/3824) fix(v2): update notifier dist tag ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3880](https://github.com/facebook/docusaurus/pull/3880) polish(v2): improve docusaurus deploy logs ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3931](https://github.com/facebook/docusaurus/pull/3931) docs(v2): blog.md with docs: false, for blog-only mode ([@Romstar](https://github.com/Romstar))\\n- [#3924](https://github.com/facebook/docusaurus/pull/3924) docs(v2): Removed unnecessary closing parenthesis ([@Varshit07](https://github.com/Varshit07))\\n- [#3928](https://github.com/facebook/docusaurus/pull/3928) docs(v2): add FoalTS to showcase page ([@LoicPoullain](https://github.com/LoicPoullain))\\n- [#3899](https://github.com/facebook/docusaurus/pull/3899) docs(v2): Move sidebar content to its own page ([@ArtFlag](https://github.com/ArtFlag))\\n- [#3856](https://github.com/facebook/docusaurus/pull/3856) docs(v2): typo ([@borool](https://github.com/borool))\\n- [#3891](https://github.com/facebook/docusaurus/pull/3891) docs(v2): Wrap section about custom domains in :::info ([@Alex1304](https://github.com/Alex1304))\\n- [#3871](https://github.com/facebook/docusaurus/pull/3871) docs(v2): missing `<ColorGenerator/>` mdx import ([@slorber](https://github.com/slorber))\\n- [#3873](https://github.com/facebook/docusaurus/pull/3873) docs(v2): From docusaurus-migrate to @docusaurus/migrate ([@manzinello](https://github.com/manzinello))\\n- [#3867](https://github.com/facebook/docusaurus/pull/3867) docs(v2): Add docusaurus-plugin-moesif to community plugins ([@dgilling](https://github.com/dgilling))\\n- [#3851](https://github.com/facebook/docusaurus/pull/3851) docs(v2): Fixed Typo: Hided => Hidden ([@woodrufs](https://github.com/woodrufs))\\n- [#3832](https://github.com/facebook/docusaurus/pull/3832) docs(v2): Add wasp to showcase ([@matijaSos](https://github.com/matijaSos))\\n- [#3813](https://github.com/facebook/docusaurus/pull/3813) docs(v2): render deployment doc ([@davidmauskop](https://github.com/davidmauskop))\\n- [#3835](https://github.com/facebook/docusaurus/pull/3835) docs(v2): update Client API docs page ([@Simek](https://github.com/Simek))\\n- [#3831](https://github.com/facebook/docusaurus/pull/3831) docs(v2): Docs refactoring and reorganization ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3912](https://github.com/facebook/docusaurus/pull/3912) chore(v2): remove docs for alpha v64 ([@lex111](https://github.com/lex111))\\n - [#3907](https://github.com/facebook/docusaurus/pull/3907) chore(ci): fix canary release filtering ([@slorber](https://github.com/slorber))\\n - [#3902](https://github.com/facebook/docusaurus/pull/3902) chore(deps): bump ini from 1.3.5 to 1.3.7 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3884](https://github.com/facebook/docusaurus/pull/3884) chore(ci): increase Lighthouse CI max_timeout ([@Simek](https://github.com/Simek))\\n - [#3883](https://github.com/facebook/docusaurus/pull/3883) chore(v2): remove docs for alpha v62-63 ([@lex111](https://github.com/lex111))\\n - [#3863](https://github.com/facebook/docusaurus/pull/3863) chore(ci): run V1 Build and Migration CLI tests conditionally on CI ([@Simek](https://github.com/Simek))\\n - [#3861](https://github.com/facebook/docusaurus/pull/3861) chore(ci): reduce number of jobs, remove build from lighthouse pipeline ([@Simek](https://github.com/Simek))\\n - [#3860](https://github.com/facebook/docusaurus/pull/3860) chore: add Yarn v2 cache directory to ignores ([@Simek](https://github.com/Simek))\\n - [#3858](https://github.com/facebook/docusaurus/pull/3858) chore(v2): disable Crowdin for deploy previews ([@slorber](https://github.com/slorber))\\n - [#3857](https://github.com/facebook/docusaurus/pull/3857) fix(v2): fix Crowdin ci commands ([@slorber](https://github.com/slorber))\\n - [#3849](https://github.com/facebook/docusaurus/pull/3849) chore(ci): CI scripts cleanup, add Node 14 runs, bump checkout action ([@Simek](https://github.com/Simek))\\n - [#3850](https://github.com/facebook/docusaurus/pull/3850) chore(v2): i18n CI: add write-translations call ([@slorber](https://github.com/slorber))\\n - [#3848](https://github.com/facebook/docusaurus/pull/3848) chore(v2): fix CI typo ([@slorber](https://github.com/slorber))\\n - [#3847](https://github.com/facebook/docusaurus/pull/3847) chore(v2): wire production Crowdin project + setup ([@slorber](https://github.com/slorber))\\n - [#3846](https://github.com/facebook/docusaurus/pull/3846) chore(v2): fix PRs not able to add lighthouse/buildsize comment from works ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3865](https://github.com/facebook/docusaurus/pull/3865) chore(v2): fix ignore paths and Prettier commands in themes ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`\\n - [#3844](https://github.com/facebook/docusaurus/pull/3844) chore(v2): fix several lint warnings, add missing types, cleanup ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-common`, `docusaurus-theme-search-algolia`\\n - [#3838](https://github.com/facebook/docusaurus/pull/3838) refactor(v2): extract site title formatter to theme-common util ([@Simek](https://github.com/Simek))\\n\\n## Committers: 23\\n\\n- Aar\xf3n Garc\xeda Herv\xe1s ([@aarongarciah](https://github.com/aarongarciah))\\n- Alex1304 ([@Alex1304](https://github.com/Alex1304))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Arthur ([@ArtFlag](https://github.com/ArtFlag))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Cindy Gu ([@cindygu4](https://github.com/cindygu4))\\n- Derric Gilling ([@dgilling](https://github.com/dgilling))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Hadrien Milano ([@hmil](https://github.com/hmil))\\n- Kaartic Sivaraam ([@sivaraam](https://github.com/sivaraam))\\n- Lo\xefc Poullain ([@LoicPoullain](https://github.com/LoicPoullain))\\n- Matija Sosic ([@matijaSos](https://github.com/matijaSos))\\n- Matteo Manzinello ([@manzinello](https://github.com/manzinello))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Oliver Ullman ([@oriooctopus](https://github.com/oriooctopus))\\n- Rami ([@Romstar](https://github.com/Romstar))\\n- Sarthak kundra ([@sarthakkundra](https://github.com/sarthakkundra))\\n- Stephen Woodruff ([@woodrufs](https://github.com/woodrufs))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Varshit Shah ([@Varshit07](https://github.com/Varshit07))\\n- [@borool](https://github.com/borool)\\n- [@davidmauskop](https://github.com/davidmauskop)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))"},{"id":"/2.0.0-alpha.69","metadata":{"permalink":"/changelog/2.0.0-alpha.69","source":"@site/changelog/source/2.0.0-alpha.69.md","title":"2.0.0-alpha.69","description":"New Feature","date":"2020-11-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ma\xebl Nison","alias":"arcanis","url":"https://github.com/arcanis","imageURL":"https://github.com/arcanis.png","key":"arcanis"},{"name":"camiluc","alias":"camiluc","url":"https://github.com/camiluc","imageURL":"https://github.com/camiluc.png","key":"camiluc"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-24T20:00","authors":["arcanis","camiluc","lex111","Simek","slorber"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70"},"nextItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3802](https://github.com/facebook/docusaurus/pull/3802) feat(v2): add baseUrlIssueBanner configuration to disable banner ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3807](https://github.com/facebook/docusaurus/pull/3807) chore(v2): upgrade Infima to v0.2.0-alpha.18 ([@lex111](https://github.com/lex111))\\n - [#3806](https://github.com/facebook/docusaurus/pull/3806) fix(v2): remove aria-hidden attr from anchor link of heading ([@lex111](https://github.com/lex111))\\n - [#3784](https://github.com/facebook/docusaurus/pull/3784) fix(v2): fix missing logo in dark theme when darkSrc was not set ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3804](https://github.com/facebook/docusaurus/pull/3804) fix(v2): Algolia: allow contextualSearch + facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3796](https://github.com/facebook/docusaurus/pull/3796) Adds createRequire for preset resolution ([@arcanis](https://github.com/arcanis))\\n\\n## :memo: Documentation\\n\\n- [#3803](https://github.com/facebook/docusaurus/pull/3803) docs(v2): fix docusaurus init issue when not using @latest ([@slorber](https://github.com/slorber))\\n- [#3785](https://github.com/facebook/docusaurus/pull/3785) docs(v2): recommend Docusaurus 2 usage ([@slorber](https://github.com/slorber))\\n- [#3783](https://github.com/facebook/docusaurus/pull/3783) docs(v2): remove @next tags needed to install v2 packages ([@slorber](https://github.com/slorber))\\n- [#3781](https://github.com/facebook/docusaurus/pull/3781) docs(v2): rename zeit to vercel ([@camiluc](https://github.com/camiluc))\\n\\n## :house: Internal\\n\\n- [#3800](https://github.com/facebook/docusaurus/pull/3800) chore(v2): remove useless stylelint-copyright peerDependency ([@slorber](https://github.com/slorber))\\n- [#3786](https://github.com/facebook/docusaurus/pull/3786) chore(v2): ensure publishConfig.access presence with tests ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ma\xebl Nison ([@arcanis](https://github.com/arcanis))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- [@camiluc](https://github.com/camiluc)"},{"id":"/2.0.0-alpha.68","metadata":{"permalink":"/changelog/2.0.0-alpha.68","source":"@site/changelog/source/2.0.0-alpha.68.md","title":"2.0.0-alpha.68","description":"New Feature","date":"2020-11-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"iAmir","alias":"AmyrAhmady","url":"https://github.com/AmyrAhmady","imageURL":"https://github.com/AmyrAhmady.png","key":"AmyrAhmady"},{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov"},{"name":"Beno\xeet Lemaire","alias":"belemaire","url":"https://github.com/belemaire","imageURL":"https://github.com/belemaire.png","key":"belemaire"},{"name":"Charles Korn","alias":"charleskorn","url":"https://github.com/charleskorn","imageURL":"https://github.com/charleskorn.png","key":"charleskorn"},{"name":"David Goss","alias":"davidjgoss","url":"https://github.com/davidjgoss","imageURL":"https://github.com/davidjgoss.png","key":"davidjgoss"},{"name":"Bright Egbo","alias":"egbobright","url":"https://github.com/egbobright","imageURL":"https://github.com/egbobright.png","key":"egbobright"},{"name":"Hai","alias":"haivp3010","url":"https://github.com/haivp3010","imageURL":"https://github.com/haivp3010.png","key":"haivp3010"},{"name":"Anh Hong","alias":"hong4rc","url":"https://github.com/hong4rc","imageURL":"https://github.com/hong4rc.png","key":"hong4rc"},{"name":"Jainam Chirag Shah","alias":"jcs98","url":"https://github.com/jcs98","imageURL":"https://github.com/jcs98.png","key":"jcs98"},{"name":"\u741a\u81f4\u8fdc","alias":"juzhiyuan","url":"https://github.com/juzhiyuan","imageURL":"https://github.com/juzhiyuan.png","key":"juzhiyuan"},{"name":"Roman Bug","alias":"ka1bi4","url":"https://github.com/ka1bi4","imageURL":"https://github.com/ka1bi4.png","key":"ka1bi4"},{"name":"kenve","alias":"kenve","url":"https://github.com/kenve","imageURL":"https://github.com/kenve.png","key":"kenve"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Nate Giraudeau","alias":"nategiraudeau","url":"https://github.com/nategiraudeau","imageURL":"https://github.com/nategiraudeau.png","key":"nategiraudeau"},{"name":"Nico Domino","alias":"ndom91","url":"https://github.com/ndom91","imageURL":"https://github.com/ndom91.png","key":"ndom91"},{"name":"Rhys Arkins","alias":"rarkins","url":"https://github.com/rarkins","imageURL":"https://github.com/rarkins.png","key":"rarkins"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"sammychinedu2ky","alias":"sammychinedu2ky","url":"https://github.com/sammychinedu2ky","imageURL":"https://github.com/sammychinedu2ky.png","key":"sammychinedu2ky"},{"name":"Gergely Sinka","alias":"sigewuzhere","url":"https://github.com/sigewuzhere","imageURL":"https://github.com/sigewuzhere.png","key":"sigewuzhere"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Stephen McElhinney","alias":"smcelhinney","url":"https://github.com/smcelhinney","imageURL":"https://github.com/smcelhinney.png","key":"smcelhinney"},{"name":"Thakur Karthik","alias":"ThakurKarthik","url":"https://github.com/ThakurKarthik","imageURL":"https://github.com/ThakurKarthik.png","key":"ThakurKarthik"},{"name":"Marc Rabat Pla","alias":"vanbasten17","url":"https://github.com/vanbasten17","imageURL":"https://github.com/vanbasten17.png","key":"vanbasten17"},{"name":"Shenwei Wang","alias":"weareoutman","url":"https://github.com/weareoutman","imageURL":"https://github.com/weareoutman.png","key":"weareoutman"},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T20:00","authors":["AmyrAhmady","artemkovalyov","belemaire","charleskorn","davidjgoss","egbobright","haivp3010","hong4rc","jcs98","juzhiyuan","ka1bi4","kenve","lex111","nategiraudeau","ndom91","rarkins","SamChou19815","sammychinedu2ky","sigewuzhere","Simek","slorber","smcelhinney","ThakurKarthik","vanbasten17","weareoutman","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69"},"nextItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- Other\\n - [#3717](https://github.com/facebook/docusaurus/pull/3717) feat(v2): official CodeSandbox support ([@sammychinedu2ky](https://github.com/sammychinedu2ky))\\n- `docusaurus-init`\\n - [#3729](https://github.com/facebook/docusaurus/pull/3729) feat(v2): allow init project via npm ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3730](https://github.com/facebook/docusaurus/pull/3730) feat(v2): add ThemedImage component ([@Simek](https://github.com/Simek))\\n- `docusaurus-cssnano-preset`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3716](https://github.com/facebook/docusaurus/pull/3716) feat(v2): introduce new minification of CSS bundle ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3694](https://github.com/facebook/docusaurus/pull/3694) feat(v2): Added the ability to specify GIT_PASS in deploy command (for CI purposes) ([@smcelhinney](https://github.com/smcelhinney))\\n - [#3621](https://github.com/facebook/docusaurus/pull/3621) feat(v2): baseUrl config issues: show help message if css/js can\'t load ([@jcs98](https://github.com/jcs98))\\n - [#3594](https://github.com/facebook/docusaurus/pull/3594) feat(v2): add support for key,cert in https ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3705](https://github.com/facebook/docusaurus/pull/3705) feat(v2): add support for sync to npm2yarn tabs ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-migrate`, `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#3658](https://github.com/facebook/docusaurus/pull/3658) feat(v2): onBrokenMarkdownLinks config ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- `docusaurus-theme-classic`\\n - [#3640](https://github.com/facebook/docusaurus/pull/3640) feat(v2): add skip to content link ([@lex111](https://github.com/lex111))\\n - [#3615](https://github.com/facebook/docusaurus/pull/3615) feat(v2): add ability to hide doc sidebar ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#3749](https://github.com/facebook/docusaurus/pull/3749) fix(v2): add support for interleaving Markdown in code blocks ([@lex111](https://github.com/lex111))\\n - [#3739](https://github.com/facebook/docusaurus/pull/3739) fix(v2): add support for prefers-reduced-motion in hideable sidebar ([@lex111](https://github.com/lex111))\\n - [#3726](https://github.com/facebook/docusaurus/pull/3726) fix(v2): add thin scrollbar to proper element in TOC ([@lex111](https://github.com/lex111))\\n - [#3681](https://github.com/facebook/docusaurus/pull/3681) Revert \\"refactor(v2): improve regex matching code-block title\\" ([@lex111](https://github.com/lex111))\\n - [#3662](https://github.com/facebook/docusaurus/pull/3662) fix(v2): navbar dropdown crash when item.to is undefined ([@artemkovalyov](https://github.com/artemkovalyov))\\n - [#3669](https://github.com/facebook/docusaurus/pull/3669) fix(v2): make scrollbar styles consistent ([@nategiraudeau](https://github.com/nategiraudeau))\\n - [#3666](https://github.com/facebook/docusaurus/pull/3666) fix(v2): make optional title for footer links column ([@lex111](https://github.com/lex111))\\n - [#3647](https://github.com/facebook/docusaurus/pull/3647) fix(v2): do not set height for mobile dropdown during build ([@lex111](https://github.com/lex111))\\n - [#3650](https://github.com/facebook/docusaurus/pull/3650) fix(v2): add landmark for skip to content link ([@lex111](https://github.com/lex111))\\n - [#3627](https://github.com/facebook/docusaurus/pull/3627) fix(v2): disable tabbing on hidden doc sidebar ([@lex111](https://github.com/lex111))\\n - [#3637](https://github.com/facebook/docusaurus/pull/3637) fix(v2): wrap code blocks on print ([@haivp3010](https://github.com/haivp3010))\\n - [#3603](https://github.com/facebook/docusaurus/pull/3603) fix(v2): animate dropdown properly ([@lex111](https://github.com/lex111))\\n - [#3611](https://github.com/facebook/docusaurus/pull/3611) fix(v2): Added back support for optional logo field in theme-classic navbarConfig ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3763](https://github.com/facebook/docusaurus/pull/3763) refactor(v2): various markup improvements ([@lex111](https://github.com/lex111))\\n - [#3724](https://github.com/facebook/docusaurus/pull/3724) fix(v2): add support for non-ASCII chars in anchor link scroll ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3723](https://github.com/facebook/docusaurus/pull/3723) fix(v2): restore prefetch functionality ([@lex111](https://github.com/lex111))\\n- Other\\n - [#3760](https://github.com/facebook/docusaurus/pull/3760) fix(v2): codesandbox generated examples should use published init package ([@slorber](https://github.com/slorber))\\n - [#3701](https://github.com/facebook/docusaurus/pull/3701) fix(v2): limit images height on showcase page ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3757](https://github.com/facebook/docusaurus/pull/3757) fix(v2): escape alt text in img tag ([@lex111](https://github.com/lex111))\\n - [#3653](https://github.com/facebook/docusaurus/pull/3653) fix(v2): handle multiple asset links in one line properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`, `docusaurus-utils`\\n - [#3721](https://github.com/facebook/docusaurus/pull/3721) fix(v2): use swizzled SearchPage component if any ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3704](https://github.com/facebook/docusaurus/pull/3704) refactor(v2): allow adding plugins depending on condition ([@lex111](https://github.com/lex111))\\n - [#3691](https://github.com/facebook/docusaurus/pull/3691) fix(v2): use SVGO in webpack SVGR loader ([@charleskorn](https://github.com/charleskorn))\\n - [#3667](https://github.com/facebook/docusaurus/pull/3667) fix(v2): Fix typo in BaseUrlSuggestionWarning ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-utils`\\n - [#3703](https://github.com/facebook/docusaurus/pull/3703) fix(v2): ignore export declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#3639](https://github.com/facebook/docusaurus/pull/3639) fix(v2): restore infinite scroll pagination on search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3622](https://github.com/facebook/docusaurus/pull/3622) fix(v2): docusaurus start --poll 500 should work + better config load failure error ([@slorber](https://github.com/slorber))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus`\\n - [#3765](https://github.com/facebook/docusaurus/pull/3765) chore(v2): replace wait-file with wait-on to reduce npm warnings ([@lex111](https://github.com/lex111))\\n - [#3725](https://github.com/facebook/docusaurus/pull/3725) fix(v2): fix inconsistent error output in swizzle command ([@lex111](https://github.com/lex111))\\n - [#3609](https://github.com/facebook/docusaurus/pull/3609) refactor(v2): Improve SSR error message: log page path ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3764](https://github.com/facebook/docusaurus/pull/3764) refactor(v2): make accessible anchor links from keyboard ([@lex111](https://github.com/lex111))\\n - [#3745](https://github.com/facebook/docusaurus/pull/3745) refactor(v2): introduce Logo component, remove useLogo hook ([@Simek](https://github.com/Simek))\\n - [#3706](https://github.com/facebook/docusaurus/pull/3706) refactor(v2): render all tab panels at once ([@lex111](https://github.com/lex111))\\n - [#3712](https://github.com/facebook/docusaurus/pull/3712) chore(v2): upgrade Infima to v0.2.0-alpha.15 ([@lex111](https://github.com/lex111))\\n - [#3685](https://github.com/facebook/docusaurus/pull/3685) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3674](https://github.com/facebook/docusaurus/pull/3674) feat(v2): add additional wrapper class to blog pages ([@Simek](https://github.com/Simek))\\n - [#3671](https://github.com/facebook/docusaurus/pull/3671) refactor(v2): improve regex matching code-block title ([@hong4rc](https://github.com/hong4rc))\\n - [#3654](https://github.com/facebook/docusaurus/pull/3654) refactor(v2): clean up code blocks ([@lex111](https://github.com/lex111))\\n - [#3649](https://github.com/facebook/docusaurus/pull/3649) refactor(v2): make code blocks scrollable from keyboard ([@lex111](https://github.com/lex111))\\n - [#3626](https://github.com/facebook/docusaurus/pull/3626) refactor(v2): remove focus outline from mouse users ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#3709](https://github.com/facebook/docusaurus/pull/3709) chore(v2): adjust website npm package ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3707](https://github.com/facebook/docusaurus/pull/3707) chore(v2): upgrade Infima to v0.2.0-alpha.14 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3638](https://github.com/facebook/docusaurus/pull/3638) chore(v2): migrate hapi/joi to joi ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`\\n - [#3604](https://github.com/facebook/docusaurus/pull/3604) refactor(v2): use new way to get versions for search page ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3762](https://github.com/facebook/docusaurus/pull/3762) Adding ConfigCat to showcase ([@sigewuzhere](https://github.com/sigewuzhere))\\n - [#3750](https://github.com/facebook/docusaurus/pull/3750) docs(v2): add npm2yarn to typescript install command ([@davidjgoss](https://github.com/davidjgoss))\\n - [#3743](https://github.com/facebook/docusaurus/pull/3743) docs(v2): convert teams page to MDX ([@slorber](https://github.com/slorber))\\n - [#3737](https://github.com/facebook/docusaurus/pull/3737) docs(v2): add Inline SVG color override example ([@Simek](https://github.com/Simek))\\n - [#3718](https://github.com/facebook/docusaurus/pull/3718) docs(v2): showcase Botonic ([@vanbasten17](https://github.com/vanbasten17))\\n - [#3696](https://github.com/facebook/docusaurus/pull/3696) docs(v2): normalize showcase preview images height ([@Simek](https://github.com/Simek))\\n - [#3699](https://github.com/facebook/docusaurus/pull/3699) docs(v2): deployment should use mdx extension ([@slorber](https://github.com/slorber))\\n - [#3695](https://github.com/facebook/docusaurus/pull/3695) docs(v2): add React Native website to the showcase ([@Simek](https://github.com/Simek))\\n - [#3645](https://github.com/facebook/docusaurus/pull/3645) Update Docusaurus v2 Showcase ([@ndom91](https://github.com/ndom91))\\n - [#3644](https://github.com/facebook/docusaurus/pull/3644) docs(v2): update the link of joi ([@kenve](https://github.com/kenve))\\n - [#3636](https://github.com/facebook/docusaurus/pull/3636) docs(v2): fix some misspellings ([@ka1bi4](https://github.com/ka1bi4))\\n - [#3630](https://github.com/facebook/docusaurus/pull/3630) docs: remove runme ([@juzhiyuan](https://github.com/juzhiyuan))\\n- `docusaurus-remark-plugin-npm2yarn`\\n - [#3624](https://github.com/facebook/docusaurus/pull/3624) Fix typo in remark-plugin-npm2yarn documentation ([@belemaire](https://github.com/belemaire))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3769](https://github.com/facebook/docusaurus/pull/3769) docs(v2): fix statements background, update footer background ([@Simek](https://github.com/Simek))\\n - [#3744](https://github.com/facebook/docusaurus/pull/3744) chore(v2): add build size bot workflow GitHub CI workflow ([@jcs98](https://github.com/jcs98))\\n - [#3741](https://github.com/facebook/docusaurus/pull/3741) chore: update yarn lock again ([@slorber](https://github.com/slorber))\\n - [#3740](https://github.com/facebook/docusaurus/pull/3740) chore: update yarn lock ([@slorber](https://github.com/slorber))\\n - [#3738](https://github.com/facebook/docusaurus/pull/3738) chore(internal): add yarn deduplicate script, cleanup lock ([@Simek](https://github.com/Simek))\\n - [#3732](https://github.com/facebook/docusaurus/pull/3732) fix(internal): fix clear script from the main package.json ([@Simek](https://github.com/Simek))\\n - [#3708](https://github.com/facebook/docusaurus/pull/3708) chore(v2): remove docs for alpha v60-61 ([@lex111](https://github.com/lex111))\\n - [#3693](https://github.com/facebook/docusaurus/pull/3693) fix(v2): fix website scripts on Windows by using cross-env ([@Simek](https://github.com/Simek))\\n - [#3673](https://github.com/facebook/docusaurus/pull/3673) test(e2e): dogfood Yarn with enableGlobalCache ([@ylemkimon](https://github.com/ylemkimon))\\n - [#3641](https://github.com/facebook/docusaurus/pull/3641) misc: fix unbound env variable in test release script ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-migrate`, `lqip-loader`\\n - [#3766](https://github.com/facebook/docusaurus/pull/3766) chore(v2): fix several npm warnings ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#3753](https://github.com/facebook/docusaurus/pull/3753) chore(v2): fix mismatch peer dependency in MDX loader ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3742](https://github.com/facebook/docusaurus/pull/3742) chore(v2): pin version of babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3734](https://github.com/facebook/docusaurus/pull/3734) chore(v2): downgrade babel-plugin-dynamic-import-node to 2.3.0 ([@lex111](https://github.com/lex111))\\n - [#3714](https://github.com/facebook/docusaurus/pull/3714) chore(v2): fix prettier formatting ([@slorber](https://github.com/slorber))\\n - [#3619](https://github.com/facebook/docusaurus/pull/3619) refactor(v2): add better error message for yarn workspace/monorepo/terser issue ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-pwa`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3727](https://github.com/facebook/docusaurus/pull/3727) chore(v2): upgrade dependencies ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#3715](https://github.com/facebook/docusaurus/pull/3715) chore(v2): update Browserslist ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-sitemap`\\n - [#3675](https://github.com/facebook/docusaurus/pull/3675) fix(v2): add missing \'react\' and \'webpack\' peer dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-remark-plugin-npm2yarn`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3613](https://github.com/facebook/docusaurus/pull/3613) fix: add repository metadata to all packages ([@rarkins](https://github.com/rarkins))\\n\\n## Committers: 26\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anh Hong ([@hong4rc](https://github.com/hong4rc))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Beno\xeet Lemaire ([@belemaire](https://github.com/belemaire))\\n- Bright Egbo ([@egbobright](https://github.com/egbobright))\\n- Charles Korn ([@charleskorn](https://github.com/charleskorn))\\n- David Goss ([@davidjgoss](https://github.com/davidjgoss))\\n- Gergely Sinka ([@sigewuzhere](https://github.com/sigewuzhere))\\n- Hai ([@haivp3010](https://github.com/haivp3010))\\n- Jainam Chirag Shah ([@jcs98](https://github.com/jcs98))\\n- Marc Rabat Pla ([@vanbasten17](https://github.com/vanbasten17))\\n- Nate Giraudeau ([@nategiraudeau](https://github.com/nategiraudeau))\\n- Nico Domino ([@ndom91](https://github.com/ndom91))\\n- Rhys Arkins ([@rarkins](https://github.com/rarkins))\\n- Roman Bug ([@ka1bi4](https://github.com/ka1bi4))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shenwei Wang ([@weareoutman](https://github.com/weareoutman))\\n- Stephen McElhinney ([@smcelhinney](https://github.com/smcelhinney))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thakur Karthik ([@ThakurKarthik](https://github.com/ThakurKarthik))\\n- [@sammychinedu2ky](https://github.com/sammychinedu2ky)\\n- iAmir ([@AmyrAhmady](https://github.com/AmyrAhmady))\\n- kenve ([@kenve](https://github.com/kenve))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))\\n- \u741a\u81f4\u8fdc ([@juzhiyuan](https://github.com/juzhiyuan))"},{"id":"/2.0.0-alpha.67","metadata":{"permalink":"/changelog/2.0.0-alpha.67","source":"@site/changelog/source/2.0.0-alpha.67.md","title":"2.0.0-alpha.67","description":"Failed release","date":"2020-11-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-11-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68"},"nextItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nFailed release"},{"id":"/2.0.0-alpha.66","metadata":{"permalink":"/changelog/2.0.0-alpha.66","source":"@site/changelog/source/2.0.0-alpha.66.md","title":"2.0.0-alpha.66","description":"New Feature","date":"2020-10-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3"},{"name":"Abhishek Tiwari","alias":"abhishektiwari","url":"https://github.com/abhishektiwari","imageURL":"https://github.com/abhishektiwari.png","key":"abhishektiwari"},{"name":"Christian Bromann","alias":"christian-bromann","url":"https://github.com/christian-bromann","imageURL":"https://github.com/christian-bromann.png","key":"christian-bromann"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"Hamza Hamidi","alias":"hamzahamidi","url":"https://github.com/hamzahamidi","imageURL":"https://github.com/hamzahamidi.png","key":"hamzahamidi"},{"name":"honlyHuang","alias":"honlyHuang","url":"https://github.com/honlyHuang","imageURL":"https://github.com/honlyHuang.png","key":"honlyHuang"},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr"},{"name":"John Gracey","alias":"jagracey","url":"https://github.com/jagracey","imageURL":"https://github.com/jagracey.png","key":"jagracey"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Matan Borenkraout","alias":"MatanBobi","url":"https://github.com/MatanBobi","imageURL":"https://github.com/MatanBobi.png","key":"MatanBobi"},{"name":"Russ Taylor","alias":"russtaylor","url":"https://github.com/russtaylor","imageURL":"https://github.com/russtaylor.png","key":"russtaylor"},{"name":"SaintMalik","alias":"saintmalik","url":"https://github.com/saintmalik","imageURL":"https://github.com/saintmalik.png","key":"saintmalik"},{"name":"Shubham Zanwar","alias":"shubhamzanwar","url":"https://github.com/shubhamzanwar","imageURL":"https://github.com/shubhamzanwar.png","key":"shubhamzanwar"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Umair Kamran","alias":"UmairKamran","url":"https://github.com/UmairKamran","imageURL":"https://github.com/UmairKamran.png","key":"UmairKamran"},{"name":"Utkarsh Goel","alias":"utkarsh867","url":"https://github.com/utkarsh867","imageURL":"https://github.com/utkarsh867.png","key":"utkarsh867"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-19T20:00","authors":["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67"},"nextItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3593](https://github.com/facebook/docusaurus/pull/3593) feat(v2): blog sidebar ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-remark-plugin-npm2yarn`\\n - [#3469](https://github.com/facebook/docusaurus/pull/3469) feat(v2): Extract npm2yarn plugin ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3580](https://github.com/facebook/docusaurus/pull/3580) feat(v2): allow to define custom CSS class for Tabs component ([@Simek](https://github.com/Simek))\\n - [#3553](https://github.com/facebook/docusaurus/pull/3553) feat(v2): make dropdown menu collapsible on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-migrate`, `docusaurus-types`, `docusaurus`\\n - [#3573](https://github.com/facebook/docusaurus/pull/3573) feat(v2): Add themeConfig.noIndex option #3528 ([@hamzahamidi](https://github.com/hamzahamidi))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3543](https://github.com/facebook/docusaurus/pull/3543) feat(v2): persist docs preferred version ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3548](https://github.com/facebook/docusaurus/pull/3548) feat(v2): version dropdown before/after items + move site \\"All Versions\\" link ([@slorber](https://github.com/slorber))\\n- `docusaurus-types`, `docusaurus`\\n - [#3545](https://github.com/facebook/docusaurus/pull/3545) feat(v2): site client modules ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3539](https://github.com/facebook/docusaurus/pull/3539) feat(v2): doc navbar item type ([@slorber](https://github.com/slorber))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#3550](https://github.com/facebook/docusaurus/pull/3550) feat(v2): contextual search, dynamic Algolia facetFilters ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3607](https://github.com/facebook/docusaurus/pull/3607) fix(v2): fix error with required href attr of link in mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3602](https://github.com/facebook/docusaurus/pull/3602) fix(v2): make dropdown button clickable with mouse ([@lex111](https://github.com/lex111))\\n - [#3601](https://github.com/facebook/docusaurus/pull/3601) fix(v2): fix table-of-content scroll highlighting issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3599](https://github.com/facebook/docusaurus/pull/3599) fix(v2): remove event listeners on Tabs component unmount ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#3531](https://github.com/facebook/docusaurus/pull/3531) fix(v2): Fixes serve cli --port option ([@UmairKamran](https://github.com/UmairKamran))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3585](https://github.com/facebook/docusaurus/pull/3585) refactor(v2): various dropdown improvements ([@lex111](https://github.com/lex111))\\n - [#3588](https://github.com/facebook/docusaurus/pull/3588) refactor(v2): make accessible copy code button from keyboard ([@lex111](https://github.com/lex111))\\n - [#3578](https://github.com/facebook/docusaurus/pull/3578) refactor(v2): apply common behavior to dropdowns ([@lex111](https://github.com/lex111))\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3587](https://github.com/facebook/docusaurus/pull/3587) refactor(v2): various fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#3569](https://github.com/facebook/docusaurus/pull/3569) refactor(v2): improve broken links error message ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3576](https://github.com/facebook/docusaurus/pull/3576) docs(v2): removed obsolete \\"you\\" identifier ([@christian-bromann](https://github.com/christian-bromann))\\n - [#3589](https://github.com/facebook/docusaurus/pull/3589) docs(v2): add taro to users ([@honlyHuang](https://github.com/honlyHuang))\\n - [#3565](https://github.com/facebook/docusaurus/pull/3565) docs(v2): deployment, add required GitHub token scope infos ([@russtaylor](https://github.com/russtaylor))\\n - [#3574](https://github.com/facebook/docusaurus/pull/3574) docs(v2): adding vue-nodegui to users ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n - [#3556](https://github.com/facebook/docusaurus/pull/3556) Added Axioms to users ([@abhishektiwari](https://github.com/abhishektiwari))\\n - [#3558](https://github.com/facebook/docusaurus/pull/3558) docs(v2): embedding real source code in MDX as a code block ([@slorber](https://github.com/slorber))\\n - [#3555](https://github.com/facebook/docusaurus/pull/3555) docs(v2): add \\"Wisdom\\" dev docs website to showcase. ([@jagracey](https://github.com/jagracey))\\n - [#3532](https://github.com/facebook/docusaurus/pull/3532) docs(v2): change package name in example script ([@MatanBobi](https://github.com/MatanBobi))\\n - [#3538](https://github.com/facebook/docusaurus/pull/3538) docs(v1): added drone for 1.0 #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3533](https://github.com/facebook/docusaurus/pull/3533) docs(v1): Fix broken link in the documentation ([@saintmalik](https://github.com/saintmalik))\\n - [#3534](https://github.com/facebook/docusaurus/pull/3534) docs(v2): Fix url bugs in v2 docs ([@saintmalik](https://github.com/saintmalik))\\n- `docusaurus-theme-classic`\\n - [#3546](https://github.com/facebook/docusaurus/pull/3546) docs: various fixes and improvements ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-search-algolia`\\n - [#3591](https://github.com/facebook/docusaurus/pull/3591) chore(v2): enable new contextual search feature ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3586](https://github.com/facebook/docusaurus/pull/3586) chore(v2): fix/upgrade react types ([@slorber](https://github.com/slorber))\\n - [#3577](https://github.com/facebook/docusaurus/pull/3577) refactor(v2): clarify versions page ([@lex111](https://github.com/lex111))\\n - [#3560](https://github.com/facebook/docusaurus/pull/3560) feat(v2): prevent using remote image urls in showcase ([@slorber](https://github.com/slorber))\\n - [#3554](https://github.com/facebook/docusaurus/pull/3554) fix(v2): use absolute path to manifest file ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#3394](https://github.com/facebook/docusaurus/pull/3394) refactor(v2): add useThemeConfig hook + cleanup useless theme default values ([@imskr](https://github.com/imskr))\\n\\n## Committers: 17\\n\\n- Abhishek Tiwari ([@abhishektiwari](https://github.com/abhishektiwari))\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Christian Bromann ([@christian-bromann](https://github.com/christian-bromann))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Hamza Hamidi ([@hamzahamidi](https://github.com/hamzahamidi))\\n- John Gracey ([@jagracey](https://github.com/jagracey))\\n- Matan Borenkraout ([@MatanBobi](https://github.com/MatanBobi))\\n- Russ Taylor ([@russtaylor](https://github.com/russtaylor))\\n- SaintMalik ([@saintmalik](https://github.com/saintmalik))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Shubham Zanwar ([@shubhamzanwar](https://github.com/shubhamzanwar))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Umair Kamran ([@UmairKamran](https://github.com/UmairKamran))\\n- Utkarsh Goel ([@utkarsh867](https://github.com/utkarsh867))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- honlyHuang ([@honlyHuang](https://github.com/honlyHuang))"},{"id":"/2.0.0-alpha.65","metadata":{"permalink":"/changelog/2.0.0-alpha.65","source":"@site/changelog/source/2.0.0-alpha.65.md","title":"2.0.0-alpha.65","description":"New Feature","date":"2020-10-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"aakhtar3","alias":"aakhtar3","url":"https://github.com/aakhtar3","imageURL":"https://github.com/aakhtar3.png","key":"aakhtar3"},{"name":"Henry V\xe9lez","alias":"abadon7","url":"https://github.com/abadon7","imageURL":"https://github.com/abadon7.png","key":"abadon7"},{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr"},{"name":"Andrey Rublev","alias":"anru","url":"https://github.com/anru","imageURL":"https://github.com/anru.png","key":"anru"},{"name":"Nahiyan Kamal","alias":"ayonious","url":"https://github.com/ayonious","imageURL":"https://github.com/ayonious.png","key":"ayonious"},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff"},{"name":"Gr\xe9gory Heitz","alias":"edno","url":"https://github.com/edno","imageURL":"https://github.com/edno.png","key":"edno"},{"name":"Jeremy Hager","alias":"jeremyhager","url":"https://github.com/jeremyhager","imageURL":"https://github.com/jeremyhager.png","key":"jeremyhager"},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Long Ho","alias":"longlho","url":"https://github.com/longlho","imageURL":"https://github.com/longlho.png","key":"longlho"},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun"},{"name":"Muskan Kumar","alias":"muskanvk","url":"https://github.com/muskanvk","imageURL":"https://github.com/muskanvk.png","key":"muskanvk"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tim Gates","alias":"timgates42","url":"https://github.com/timgates42","imageURL":"https://github.com/timgates42.png","key":"timgates42"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-10-02T20:00","authors":["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66"},"nextItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3497](https://github.com/facebook/docusaurus/pull/3497) feat(v2): env variable TERSER_PARALLEL to customize TerserPlugin.parallel ([@aeneasr](https://github.com/aeneasr))\\n - [#3446](https://github.com/facebook/docusaurus/pull/3446) feat(v2): new docusaurus clear command ([@abadon7](https://github.com/abadon7))\\n - [#3485](https://github.com/facebook/docusaurus/pull/3485) feat(v2): Add @theme-init components to user theme ([@edno](https://github.com/edno))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`\\n - [#3467](https://github.com/facebook/docusaurus/pull/3467) feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#3496](https://github.com/facebook/docusaurus/pull/3496) feat(v2): migrate bootstrap components to ts ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3474](https://github.com/facebook/docusaurus/pull/3474) feat(v2): allow to use array of files in customCss field ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3457](https://github.com/facebook/docusaurus/pull/3457) feat(v2): add optional custom wrapper class name for pages based on theme classic Layout ([@Simek](https://github.com/Simek))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3517](https://github.com/facebook/docusaurus/pull/3517) fix(v1): v1 deploy preview should be available ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3498](https://github.com/facebook/docusaurus/pull/3498) fix(v2): fixed props being passed to @svgr/webpack loader ([@anru](https://github.com/anru))\\n- `docusaurus-theme-search-algolia`\\n - [#3456](https://github.com/facebook/docusaurus/pull/3456) fix(v2): use valid value for crossorigin attribute ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#3427](https://github.com/facebook/docusaurus/pull/3427) fix(v2): normalizeUrl edge cases ([@ayshiff](https://github.com/ayshiff))\\n- `docusaurus-theme-classic`\\n - [#3472](https://github.com/facebook/docusaurus/pull/3472) fix(v2): Show dropdown instead of a single button when there are two versions ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#3441](https://github.com/facebook/docusaurus/pull/3441) fix(v2): fixing typo in error message ([@ayonious](https://github.com/ayonious))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#3499](https://github.com/facebook/docusaurus/pull/3499) chore(v2): upgrade Infima to 0.2.0-alpha.13 ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus`\\n - [#3502](https://github.com/facebook/docusaurus/pull/3502) docs(v2): add doc for wrapping theme components with @theme-original and @theme-init ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3473](https://github.com/facebook/docusaurus/pull/3473) misc: add License to the documentation ([@muskanvk](https://github.com/muskanvk))\\n - [#3492](https://github.com/facebook/docusaurus/pull/3492) docs(v2): Added drone.io publish docs #3491 ([@aakhtar3](https://github.com/aakhtar3))\\n - [#3479](https://github.com/facebook/docusaurus/pull/3479) docs(v2): remove redundant new line in code block ([@lex111](https://github.com/lex111))\\n - [#3448](https://github.com/facebook/docusaurus/pull/3448) chore(v2): fix theme classic navbar style docs ([@Simek](https://github.com/Simek))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-migrate`\\n - [#3504](https://github.com/facebook/docusaurus/pull/3504) chore(v1): move v1 docs inside website-1.x ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3506](https://github.com/facebook/docusaurus/pull/3506) chore(v2): v2 website should make it easy to contribute to upstream docs ([@slorber](https://github.com/slorber))\\n - [#3511](https://github.com/facebook/docusaurus/pull/3511) misc: update CODEOWNERS ([@yangshun](https://github.com/yangshun))\\n - [#3477](https://github.com/facebook/docusaurus/pull/3477) chore(v2): remove alpha 58 doc ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils-validation`\\n - [#3453](https://github.com/facebook/docusaurus/pull/3453) test(v2): add protocol relative uri validation test ([@moonrailgun](https://github.com/moonrailgun))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Andrey Rublev ([@anru](https://github.com/anru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Gr\xe9gory Heitz ([@edno](https://github.com/edno))\\n- Henry V\xe9lez ([@abadon7](https://github.com/abadon7))\\n- Jeremy Hager ([@jeremyhager](https://github.com/jeremyhager))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Long Ho ([@longlho](https://github.com/longlho))\\n- Muskan Kumar ([@muskanvk](https://github.com/muskanvk))\\n- Nahiyan Kamal ([@ayonious](https://github.com/ayonious))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tim Gates ([@timgates42](https://github.com/timgates42))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@aakhtar3](https://github.com/aakhtar3)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))"},{"id":"/2.0.0-alpha.64","metadata":{"permalink":"/changelog/2.0.0-alpha.64","source":"@site/changelog/source/2.0.0-alpha.64.md","title":"2.0.0-alpha.64","description":"New Feature","date":"2020-09-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Ash","alias":"ashscodes","url":"https://github.com/ashscodes","imageURL":"https://github.com/ashscodes.png","key":"ashscodes"},{"name":"josephMG","alias":"josephMG","url":"https://github.com/josephMG","imageURL":"https://github.com/josephMG.png","key":"josephMG"},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq"},{"name":"Rutik Wankhade","alias":"rutikwankhade","url":"https://github.com/rutikwankhade","imageURL":"https://github.com/rutikwankhade.png","key":"rutikwankhade"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-11T20:00","authors":["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65"},"nextItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#3432](https://github.com/facebook/docusaurus/pull/3432) feat(v2): add style property to theme-classic navbar ([@Simek](https://github.com/Simek))\\n - [#3406](https://github.com/facebook/docusaurus/pull/3406) feat(v2): ability to add/override theme html metadatas ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-sitemap`\\n - [#3426](https://github.com/facebook/docusaurus/pull/3426) feat(v2): add option to add trailing slash to urls in sitemap ([@mpsq](https://github.com/mpsq))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3438](https://github.com/facebook/docusaurus/pull/3438) fix(v2): docusaurus 2 PWA should work under baseurl (deploy previews) ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3435](https://github.com/facebook/docusaurus/pull/3435) fix(v2): fix empty link error message ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`\\n - [#3436](https://github.com/facebook/docusaurus/pull/3436) fix(v2): Correctly resolve sw.js path on windows ([@ashscodes](https://github.com/ashscodes))\\n- `docusaurus-theme-classic`\\n - [#3433](https://github.com/facebook/docusaurus/pull/3433) fix(v2): fix theme-classic announcement bar closeable style ([@Simek](https://github.com/Simek))\\n- `docusaurus-1.x`\\n - [#3429](https://github.com/facebook/docusaurus/pull/3429) fix(v1): versioned_docs and skip-next-release relative path issue ([@josephMG](https://github.com/josephMG))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#3418](https://github.com/facebook/docusaurus/pull/3418) fix(v2): reset sidebar state on sidebar changes ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-debug`\\n - [#3405](https://github.com/facebook/docusaurus/pull/3405) fix(v2): fix debug plugin unscoped inline code global css ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3428](https://github.com/facebook/docusaurus/pull/3428) docs(v2): fix grammar ([@thadguidry](https://github.com/thadguidry))\\n- [#3425](https://github.com/facebook/docusaurus/pull/3425) docs(v2): mention Eta in ssrTemplate section ([@mpsq](https://github.com/mpsq))\\n- [#3423](https://github.com/facebook/docusaurus/pull/3423) docs(v2): minor typo fix ([@rutikwankhade](https://github.com/rutikwankhade))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3439](https://github.com/facebook/docusaurus/pull/3439) chore(v2): fix serialize-javascript security issue by upgrading webpack/workbox ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3401](https://github.com/facebook/docusaurus/pull/3401) chore(deps): bump decompress from 4.2.0 to 4.2.1 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n\\n## Committers: 7\\n\\n- Ash ([@ashscodes](https://github.com/ashscodes))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Rutik Wankhade ([@rutikwankhade](https://github.com/rutikwankhade))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))\\n- [@josephMG](https://github.com/josephMG)"},{"id":"/2.0.0-alpha.63","metadata":{"permalink":"/changelog/2.0.0-alpha.63","source":"@site/changelog/source/2.0.0-alpha.63.md","title":"2.0.0-alpha.63","description":"New Feature","date":"2020-09-03T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq"},{"name":"Sam Ko","alias":"samsisle","url":"https://github.com/samsisle","imageURL":"https://github.com/samsisle.png","key":"samsisle"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Thad Guidry","alias":"thadguidry","url":"https://github.com/thadguidry","imageURL":"https://github.com/thadguidry.png","key":"thadguidry"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-09-03T20:00","authors":["mpsq","samsisle","Simek","slorber","thadguidry"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64"},"nextItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3387](https://github.com/facebook/docusaurus/pull/3387) feat(v2): allow users to specify a custom ssr HTML template ([@mpsq](https://github.com/mpsq))\\n- `docusaurus-plugin-debug`\\n - [#3392](https://github.com/facebook/docusaurus/pull/3392) feat(v2): officially release @docusaurus/plugin-debug ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3388](https://github.com/facebook/docusaurus/pull/3388) feat(v2): add isCloseable property for theme-classic announcement bar ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3373](https://github.com/facebook/docusaurus/pull/3373) feat(v2): docs options.onlyIncludeVersions ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#3397](https://github.com/facebook/docusaurus/pull/3397) fix(v2): DocSearch should keep working after a new release (part 2/2) ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3393](https://github.com/facebook/docusaurus/pull/3393) fix(v2): DocSearch should keep working after a new release (part 1/2) ([@slorber](https://github.com/slorber))\\n - [#3381](https://github.com/facebook/docusaurus/pull/3381) fix(v2): alpha 62 doc fixes ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3385](https://github.com/facebook/docusaurus/pull/3385) fix(v2): scripts should allow unknown values ([@slorber](https://github.com/slorber))\\n- `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3382](https://github.com/facebook/docusaurus/pull/3382) fix(v2): allow using classic theme/preset without the docs plugin ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`\\n - [#3377](https://github.com/facebook/docusaurus/pull/3377) fix(v2): reject routeBasePath: \'\' ([@slorber](https://github.com/slorber))\\n\\n## :memo: Documentation\\n\\n- [#3390](https://github.com/facebook/docusaurus/pull/3390) docs(v1, v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n- [#3344](https://github.com/facebook/docusaurus/pull/3344) docs(v2): Update Deploy to Vercel guide ([@samsisle](https://github.com/samsisle))\\n\\n## :house: Internal\\n\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3386](https://github.com/facebook/docusaurus/pull/3386) chore(v2): pin exact dependency versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils-validation`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3359](https://github.com/facebook/docusaurus/pull/3359) chore(v2): prepare v2.0.0.alpha-62 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 5\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- Sam Ko ([@samsisle](https://github.com/samsisle))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Thad Guidry ([@thadguidry](https://github.com/thadguidry))"},{"id":"/2.0.0-alpha.62","metadata":{"permalink":"/changelog/2.0.0-alpha.62","source":"@site/changelog/source/2.0.0-alpha.62.md","title":"2.0.0-alpha.62","description":"New Feature","date":"2020-08-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"adinaja","alias":"adinaja","url":"https://github.com/adinaja","imageURL":"https://github.com/adinaja.png","key":"adinaja"},{"name":"Franklyn Chisom","alias":"ajifrank75","url":"https://github.com/ajifrank75","imageURL":"https://github.com/ajifrank75.png","key":"ajifrank75"},{"name":"Ali Hosseini","alias":"Ako92","url":"https://github.com/Ako92","imageURL":"https://github.com/Ako92.png","key":"Ako92"},{"name":"Amy Lei","alias":"amy-lei","url":"https://github.com/amy-lei","imageURL":"https://github.com/amy-lei.png","key":"amy-lei"},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal"},{"name":"Archit","alias":"arcvats","url":"https://github.com/arcvats","imageURL":"https://github.com/arcvats.png","key":"arcvats"},{"name":"Arthur Flam","alias":"arthur-flam","url":"https://github.com/arthur-flam","imageURL":"https://github.com/arthur-flam.png","key":"arthur-flam"},{"name":"Bogdan Doroschenko","alias":"BogdanDor","url":"https://github.com/BogdanDor","imageURL":"https://github.com/BogdanDor.png","key":"BogdanDor"},{"name":"alex busnelli","alias":"boosh511","url":"https://github.com/boosh511","imageURL":"https://github.com/boosh511.png","key":"boosh511"},{"name":"Daniel Wilkowski","alias":"Danon","url":"https://github.com/Danon","imageURL":"https://github.com/Danon.png","key":"Danon"},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi"},{"name":"Derek","alias":"dschaller","url":"https://github.com/dschaller","imageURL":"https://github.com/dschaller.png","key":"dschaller"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"Nisarag","alias":"FocalChord","url":"https://github.com/FocalChord","imageURL":"https://github.com/FocalChord.png","key":"FocalChord"},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour"},{"name":"Govardhan Srinivas","alias":"govardhan-srinivas","url":"https://github.com/govardhan-srinivas","imageURL":"https://github.com/govardhan-srinivas.png","key":"govardhan-srinivas"},{"name":"Yang Luo","alias":"hsluoyz","url":"https://github.com/hsluoyz","imageURL":"https://github.com/hsluoyz.png","key":"hsluoyz"},{"name":"Shubham Kumar","alias":"imskr","url":"https://github.com/imskr","imageURL":"https://github.com/imskr.png","key":"imskr"},{"name":"Jean-Marc Saad","alias":"JeanMarcSaad","url":"https://github.com/JeanMarcSaad","imageURL":"https://github.com/JeanMarcSaad.png","key":"JeanMarcSaad"},{"name":"Jonas Dellinger","alias":"JohnnyCrazy","url":"https://github.com/JohnnyCrazy","imageURL":"https://github.com/JohnnyCrazy.png","key":"JohnnyCrazy"},{"name":"Jonathan","alias":"Jonathannsegal","url":"https://github.com/Jonathannsegal","imageURL":"https://github.com/Jonathannsegal.png","key":"Jonathannsegal"},{"name":"lebogang Olifant","alias":"lebogangolifant","url":"https://github.com/lebogangolifant","imageURL":"https://github.com/lebogangolifant.png","key":"lebogangolifant"},{"name":"leoigel","alias":"leoigel","url":"https://github.com/leoigel","imageURL":"https://github.com/leoigel.png","key":"leoigel"},{"name":"Manuel Cepeda","alias":"mecm1993","url":"https://github.com/mecm1993","imageURL":"https://github.com/mecm1993.png","key":"mecm1993"},{"name":"Mirzayev Farid","alias":"MirzayevFarid","url":"https://github.com/MirzayevFarid","imageURL":"https://github.com/MirzayevFarid.png","key":"MirzayevFarid"},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug"},{"name":"Olawanle Joel","alias":"olawanlejoel","url":"https://github.com/olawanlejoel","imageURL":"https://github.com/olawanlejoel.png","key":"olawanlejoel"},{"name":"Orta Therox","alias":"orta","url":"https://github.com/orta","imageURL":"https://github.com/orta.png","key":"orta"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"shalinikumari50","alias":"shalinikumari50","url":"https://github.com/shalinikumari50","imageURL":"https://github.com/shalinikumari50.png","key":"shalinikumari50"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Sourav Dey","alias":"Souravdey777","url":"https://github.com/Souravdey777","imageURL":"https://github.com/Souravdey777.png","key":"Souravdey777"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"},{"name":"Hani Mohammed","alias":"thehanimo","url":"https://github.com/thehanimo","imageURL":"https://github.com/thehanimo.png","key":"thehanimo"},{"name":"Tolunay Akbulut","alias":"tolunayakbulut","url":"https://github.com/tolunayakbulut","imageURL":"https://github.com/tolunayakbulut.png","key":"tolunayakbulut"},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal"},{"name":"Vincent","alias":"Vinnl","url":"https://github.com/Vinnl","imageURL":"https://github.com/Vinnl.png","key":"Vinnl"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"ylemkimon","alias":"ylemkimon","url":"https://github.com/ylemkimon","imageURL":"https://github.com/ylemkimon.png","key":"ylemkimon"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-28T20:00","authors":["adinaja","ajifrank75","Ako92","amy-lei","anshulrgoyal","arcvats","arthur-flam","BogdanDor","boosh511","Danon","Drewbi","dschaller","fanny","FocalChord","francoischalifour","govardhan-srinivas","hsluoyz","imskr","JeanMarcSaad","JohnnyCrazy","Jonathannsegal","lebogangolifant","leoigel","mecm1993","MirzayevFarid","nebrelbug","olawanlejoel","orta","SamChou19815","shalinikumari50","slorber","Souravdey777","teikjun","thehanimo","tolunayakbulut","vandreleal","Vinnl","yangshun","ylemkimon"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63"},"nextItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3357](https://github.com/facebook/docusaurus/pull/3357) feat(v2): docs version configuration: lastVersion, version.{path,label} ([@slorber](https://github.com/slorber))\\n - [#3328](https://github.com/facebook/docusaurus/pull/3328) feat(v2): Provide docs plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3356](https://github.com/facebook/docusaurus/pull/3356) feat(v2): Provide type definitions for remaining theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#3274](https://github.com/facebook/docusaurus/pull/3274) feat(v2): add TOC to blog posts ([@amy-lei](https://github.com/amy-lei))\\n- `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`\\n - [#3354](https://github.com/facebook/docusaurus/pull/3354) feat(v2): Provide type definitions for MDXPage from page plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#3348](https://github.com/facebook/docusaurus/pull/3348) feat(v2): Provide typing to most of the theme-classic components ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`\\n - [#3284](https://github.com/facebook/docusaurus/pull/3284) feat(v2): blog slug frontmatter ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- `docusaurus-init`, `docusaurus-theme-bootstrap`\\n - [#2981](https://github.com/facebook/docusaurus/pull/2981) feat(v2): bootstrap theme, preset, template, CI previews ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#3267](https://github.com/facebook/docusaurus/pull/3267) feat(v2): Provide blog plugin theme typing ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-debug`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-types`, `docusaurus`\\n - [#3229](https://github.com/facebook/docusaurus/pull/3229) feat(v2): debug pages + debug layout + ability to debug content ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#3021](https://github.com/facebook/docusaurus/pull/3021) feat(v2): update swizzle command to suggest component/theme ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3196](https://github.com/facebook/docusaurus/pull/3196) feat(v2): add support to ignore files in pages plugin ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3204](https://github.com/facebook/docusaurus/pull/3204) feat(v2): blog + docs multi-instance plugins ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3096](https://github.com/facebook/docusaurus/pull/3096) feat(v2): add support to import assets using relative link in markdown syntax ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-migrate`\\n - [#3358](https://github.com/facebook/docusaurus/pull/3358) fix(v2): fix migrate cli paths (sidebars/customcss) ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3311](https://github.com/facebook/docusaurus/pull/3311) fix(v2): add https support in webpack devserver ([@arcvats](https://github.com/arcvats))\\n - [#3313](https://github.com/facebook/docusaurus/pull/3313) fix(v2): resolve webpack loaders from siteDir/node_modules ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3308](https://github.com/facebook/docusaurus/pull/3308) fix(v2): brokenLinks should not report links that belong to an existing folder if folder/index.html exists ([@slorber](https://github.com/slorber))\\n - [#3273](https://github.com/facebook/docusaurus/pull/3273) fix: logic error while deciding deploymentBranch ([@thehanimo](https://github.com/thehanimo))\\n - [#3281](https://github.com/facebook/docusaurus/pull/3281) fix(v2): allow swizzling of component even if case doesn\'t match ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#3222](https://github.com/facebook/docusaurus/pull/3222) fix(v2): update react-loadable-ssr-addon to solve yarn2 error ([@slorber](https://github.com/slorber))\\n - [#3191](https://github.com/facebook/docusaurus/pull/3191) fix(v2): add missing `lodash.flatmap` dependency ([@ylemkimon](https://github.com/ylemkimon))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-theme-bootstrap`, `docusaurus-theme-search-algolia`, `docusaurus-types`\\n - [#3355](https://github.com/facebook/docusaurus/pull/3355) fix(v2): Add missing dependencies to packages ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3352](https://github.com/facebook/docusaurus/pull/3352) fix(v2): Allow the alt for the logo to be empty ([@Vinnl](https://github.com/Vinnl))\\n - [#3240](https://github.com/facebook/docusaurus/pull/3240) fix(v2): navbar dropdown opened with tab, not closing on click outside ([@Ako92](https://github.com/Ako92))\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3347](https://github.com/facebook/docusaurus/pull/3347) fix(v2): linking to asset or external html page -> don\'t use history.push() ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3340](https://github.com/facebook/docusaurus/pull/3340) fix(v1): show images after one line code block ([@adinaja](https://github.com/adinaja))\\n- `docusaurus-1.x`, `docusaurus`\\n - [#3290](https://github.com/facebook/docusaurus/pull/3290) fix(v1,v2): Add initial-scale=1.0 to all meta viewport tags ([@nebrelbug](https://github.com/nebrelbug))\\n- `docusaurus-theme-search-algolia`\\n - [#3297](https://github.com/facebook/docusaurus/pull/3297) fix(v2): keep DocSearch state on remounts ([@francoischalifour](https://github.com/francoischalifour))\\n - [#3280](https://github.com/facebook/docusaurus/pull/3280) fix(v2): allow search page swizzle ([@Ako92](https://github.com/Ako92))\\n - [#3263](https://github.com/facebook/docusaurus/pull/3263) fix(v2): do not index search pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-pages`\\n - [#3283](https://github.com/facebook/docusaurus/pull/3283) fix(v2): pass images in static dir to webpack-loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Other\\n - [#3269](https://github.com/facebook/docusaurus/pull/3269) fix(v2): website feedback page hydration bug ([@mecm1993](https://github.com/mecm1993))\\n - [#3200](https://github.com/facebook/docusaurus/pull/3200) fix(v1): self-host user images ([@leoigel](https://github.com/leoigel))\\n- `docusaurus-plugin-google-gtag`\\n - [#3243](https://github.com/facebook/docusaurus/pull/3243) fix(v2): GTM, send page_view events on navigate ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3262](https://github.com/facebook/docusaurus/pull/3262) fix(v2): doc path special char (space or other) should lead to a valid slug ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3247](https://github.com/facebook/docusaurus/pull/3247) fix(v2): modify validation schema and tests for rehype/remark + remove duplicate dependency ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-init`\\n - [#3258](https://github.com/facebook/docusaurus/pull/3258) fix(v2): fix template alt image prop ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus`\\n - [#3227](https://github.com/facebook/docusaurus/pull/3227) fix(v2): relax URI validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-content-docs`\\n - [#3228](https://github.com/facebook/docusaurus/pull/3228) fix(v2): deprecate docs homePageId in favor of frontmatter \\"slug: /\\" ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3225](https://github.com/facebook/docusaurus/pull/3225) fix(v2): swizzle minor improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#3210](https://github.com/facebook/docusaurus/pull/3210) fix(v2): fix theme validation for prism field and add tests ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3192](https://github.com/facebook/docusaurus/pull/3192) fix(v2): add missing `chalk` and `lodash` dependencies ([@ylemkimon](https://github.com/ylemkimon))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3188](https://github.com/facebook/docusaurus/pull/3188) fix(v2): Add a missing whitespace before prompt to use `npm run serve` ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#3346](https://github.com/facebook/docusaurus/pull/3346) docs(v2): add draft doc ([@imskr](https://github.com/imskr))\\n - [#3336](https://github.com/facebook/docusaurus/pull/3336) docs(v2): add Nisarag to Fellows section ([@FocalChord](https://github.com/FocalChord))\\n - [#3335](https://github.com/facebook/docusaurus/pull/3335) docs(v2): update team profile ([@yangshun](https://github.com/yangshun))\\n - [#3334](https://github.com/facebook/docusaurus/pull/3334) docs(v2): add Drew to Fellows section ([@Drewbi](https://github.com/Drewbi))\\n - [#3333](https://github.com/facebook/docusaurus/pull/3333) docs(v2): add anshul and teikjun to fellows section of team page ([@teikjun](https://github.com/teikjun))\\n - [#3326](https://github.com/facebook/docusaurus/pull/3326) docs(v1): showcase user Casbin ([@hsluoyz](https://github.com/hsluoyz))\\n - [#3316](https://github.com/facebook/docusaurus/pull/3316) docs(v1): add Global CTO Forum to users ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n - [#3310](https://github.com/facebook/docusaurus/pull/3310) docs(v2): add \\"T-Regx\\" website to showcase ([@Danon](https://github.com/Danon))\\n - [#3307](https://github.com/facebook/docusaurus/pull/3307) docs(v2): showcase SpotifyAPI-NET ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n - [#3295](https://github.com/facebook/docusaurus/pull/3295) docs(v2): showcase Oxidizer ([@vandreleal](https://github.com/vandreleal))\\n - [#3287](https://github.com/facebook/docusaurus/pull/3287) docs: update README.md with some grammatical corrections ([@shalinikumari50](https://github.com/shalinikumari50))\\n - [#3271](https://github.com/facebook/docusaurus/pull/3271) docs(v2): fix typo ([@thehanimo](https://github.com/thehanimo))\\n - [#3277](https://github.com/facebook/docusaurus/pull/3277) docs(v1): Add Radity to users ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n - [#3276](https://github.com/facebook/docusaurus/pull/3276) docs: corrected some few typos in the docusaurus tech docs ([@ajifrank75](https://github.com/ajifrank75))\\n - [#3249](https://github.com/facebook/docusaurus/pull/3249) docs(v2): fix migration command ([@BogdanDor](https://github.com/BogdanDor))\\n - [#3248](https://github.com/facebook/docusaurus/pull/3248) Added twitter badge and modified discord Badges ([@Souravdey777](https://github.com/Souravdey777))\\n - [#3251](https://github.com/facebook/docusaurus/pull/3251) docs(v2): fix migration command for earlier versions ([@teikjun](https://github.com/teikjun))\\n - [#3252](https://github.com/facebook/docusaurus/pull/3252) docs(v2): docs typos ([@olawanlejoel](https://github.com/olawanlejoel))\\n - [#3111](https://github.com/facebook/docusaurus/pull/3111) docs(v2): clarify theme-original and theme-init ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n - [#3232](https://github.com/facebook/docusaurus/pull/3232) docs(v2): showcase user QA-Board ([@arthur-flam](https://github.com/arthur-flam))\\n - [#3205](https://github.com/facebook/docusaurus/pull/3205) docs: format reference links ([@lebogangolifant](https://github.com/lebogangolifant))\\n - [#3194](https://github.com/facebook/docusaurus/pull/3194) docs(v2): Added switch config docs to theme-classic API ([@Drewbi](https://github.com/Drewbi))\\n - [#3201](https://github.com/facebook/docusaurus/pull/3201) docs(v2): removed duplicate text under \\"Using React\\" section ([@boosh511](https://github.com/boosh511))\\n - [#3186](https://github.com/facebook/docusaurus/pull/3186) docs(v1): formatting changelog ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3202](https://github.com/facebook/docusaurus/pull/3202) fix(v2): fix svg loader ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3323](https://github.com/facebook/docusaurus/pull/3323) test(v2): Add unit test for migration of config file ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-theme-classic`\\n - [#3343](https://github.com/facebook/docusaurus/pull/3343) refactor(v2): announcement bar bad spelling + minor refactors ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-blog`\\n - [#3339](https://github.com/facebook/docusaurus/pull/3339) test(v2): make blog posts unit test ordering determinate ([@BogdanDor](https://github.com/BogdanDor))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`, `docusaurus-types`\\n - [#3306](https://github.com/facebook/docusaurus/pull/3306) chore(v2): Define type for markdown right table of contents ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-module-type-aliases`, `docusaurus`\\n - [#3244](https://github.com/facebook/docusaurus/pull/3244) chore(v2): tighten up the TypeScript onboarding ([@orta](https://github.com/orta))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#3245](https://github.com/facebook/docusaurus/pull/3245) refactor(v2): docs plugin refactor ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3282](https://github.com/facebook/docusaurus/pull/3282) chore(v2): fix javascript-serialize vulnerability ([@slorber](https://github.com/slorber))\\n - [#3265](https://github.com/facebook/docusaurus/pull/3265) chore(v2): upgrade terser-webpack-plugin ([@dschaller](https://github.com/dschaller))\\n- Other\\n - [#3241](https://github.com/facebook/docusaurus/pull/3241) chore(deps): bump prismjs from 1.20.0 to 1.21.0 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3259](https://github.com/facebook/docusaurus/pull/3259) chore(v2): fix slow commits due to lint-staged ([@slorber](https://github.com/slorber))\\n - [#3197](https://github.com/facebook/docusaurus/pull/3197) chore(v2): lockfile update ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3218](https://github.com/facebook/docusaurus/pull/3218) chore(v1): release 1.14.6 ([@slorber](https://github.com/slorber))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-client-redirects`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3238](https://github.com/facebook/docusaurus/pull/3238) refactor(v2): precompile ETA templates ([@slorber](https://github.com/slorber))\\n\\n## Committers: 39\\n\\n- Ali Hosseini ([@Ako92](https://github.com/Ako92))\\n- Amy Lei ([@amy-lei](https://github.com/amy-lei))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Archit ([@arcvats](https://github.com/arcvats))\\n- Arthur Flam ([@arthur-flam](https://github.com/arthur-flam))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Bogdan Doroschenko ([@BogdanDor](https://github.com/BogdanDor))\\n- Daniel Wilkowski ([@Danon](https://github.com/Danon))\\n- Derek ([@dschaller](https://github.com/dschaller))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Franklyn Chisom ([@ajifrank75](https://github.com/ajifrank75))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Govardhan Srinivas ([@govardhan-srinivas](https://github.com/govardhan-srinivas))\\n- Hani Mohammed ([@thehanimo](https://github.com/thehanimo))\\n- Jean-Marc Saad ([@JeanMarcSaad](https://github.com/JeanMarcSaad))\\n- Jonas Dellinger ([@JohnnyCrazy](https://github.com/JohnnyCrazy))\\n- Jonathan ([@Jonathannsegal](https://github.com/Jonathannsegal))\\n- Manuel Cepeda ([@mecm1993](https://github.com/mecm1993))\\n- Mirzayev Farid ([@MirzayevFarid](https://github.com/MirzayevFarid))\\n- Nisarag ([@FocalChord](https://github.com/FocalChord))\\n- Olawanle Joel ([@olawanlejoel](https://github.com/olawanlejoel))\\n- Orta Therox ([@orta](https://github.com/orta))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Shubham Kumar ([@imskr](https://github.com/imskr))\\n- Sourav Dey ([@Souravdey777](https://github.com/Souravdey777))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tolunay Akbulut ([@tolunayakbulut](https://github.com/tolunayakbulut))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Vincent ([@Vinnl](https://github.com/Vinnl))\\n- Yang Luo ([@hsluoyz](https://github.com/hsluoyz))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@adinaja](https://github.com/adinaja)\\n- [@leoigel](https://github.com/leoigel)\\n- [@shalinikumari50](https://github.com/shalinikumari50)\\n- alex busnelli ([@boosh511](https://github.com/boosh511))\\n- lebogang Olifant ([@lebogangolifant](https://github.com/lebogangolifant))\\n- ylemkimon ([@ylemkimon](https://github.com/ylemkimon))"},{"id":"/2.0.0-alpha.61","metadata":{"permalink":"/changelog/2.0.0-alpha.61","source":"@site/changelog/source/2.0.0-alpha.61.md","title":"2.0.0-alpha.61","description":"New Feature","date":"2020-08-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Bucky Maler","alias":"BuckyMaler","url":"https://github.com/BuckyMaler","imageURL":"https://github.com/BuckyMaler.png","key":"BuckyMaler"},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi"},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour"},{"name":"Faizan","alias":"mdfaizan7","url":"https://github.com/mdfaizan7","imageURL":"https://github.com/mdfaizan7.png","key":"mdfaizan7"},{"name":"M\xe9ril","alias":"mpsq","url":"https://github.com/mpsq","imageURL":"https://github.com/mpsq.png","key":"mpsq"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"},{"name":"Xuqian","alias":"zxuqian","url":"https://github.com/zxuqian","imageURL":"https://github.com/zxuqian.png","key":"zxuqian"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-08-01T20:00","authors":["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62"},"nextItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#3083](https://github.com/facebook/docusaurus/pull/3083) feat(v2): warn user when there are conflicting routes ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils-validation`, `docusaurus-utils`\\n - [#3158](https://github.com/facebook/docusaurus/pull/3158) feat(v2): markdown pages ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3127](https://github.com/facebook/docusaurus/pull/3127) feat(v2): dark mode toggle customization ([@Drewbi](https://github.com/Drewbi))\\n- `docusaurus-theme-search-algolia`\\n - [#3166](https://github.com/facebook/docusaurus/pull/3166) feat(v2): improve Algolia search accessibility ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2359](https://github.com/facebook/docusaurus/pull/2359) feat(v2): support custom description for blog-only mode ([@zxuqian](https://github.com/zxuqian))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus`\\n - [#3180](https://github.com/facebook/docusaurus/pull/3180) fix(v2): fix markdown images always using webpack url-loader ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3171](https://github.com/facebook/docusaurus/pull/3171) fix(v2): tab label showing outline & background when clicked ([@mdfaizan7](https://github.com/mdfaizan7))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#3168](https://github.com/facebook/docusaurus/pull/3168) fix(v2): fix link items refusing attributes like target, rel etc... ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#3162](https://github.com/facebook/docusaurus/pull/3162) fix(v2): inability for users to pin their docusaurus version ([@BuckyMaler](https://github.com/BuckyMaler))\\n\\n## :memo: Documentation\\n\\n- [#3163](https://github.com/facebook/docusaurus/pull/3163) docs(v2): showcase user questdb ([@mpsq](https://github.com/mpsq))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3164](https://github.com/facebook/docusaurus/pull/3164) chore(deps): bump elliptic from 6.5.2 to 6.5.3 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#3157](https://github.com/facebook/docusaurus/pull/3157) chore(v2): remove alpha 59 doc ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3154](https://github.com/facebook/docusaurus/pull/3154) chore(v2): prepare v2.0.0.alpha-60 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 8\\n\\n- Bucky Maler ([@BuckyMaler](https://github.com/BuckyMaler))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Faizan ([@mdfaizan7](https://github.com/mdfaizan7))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- M\xe9ril ([@mpsq](https://github.com/mpsq))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Xuqian ([@zxuqian](https://github.com/zxuqian))"},{"id":"/2.0.0-alpha.60","metadata":{"permalink":"/changelog/2.0.0-alpha.60","source":"@site/changelog/source/2.0.0-alpha.60.md","title":"2.0.0-alpha.60","description":"New Feature","date":"2020-07-29T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Hob Adams","alias":"hobadams","url":"https://github.com/hobadams","imageURL":"https://github.com/hobadams.png","key":"hobadams"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-29T20:00","authors":["hobadams","Simek","slorber","teikjun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61"},"nextItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#3134](https://github.com/facebook/docusaurus/pull/3134) feat(v2): add validation escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`\\n - [#3124](https://github.com/facebook/docusaurus/pull/3124) feat(v1): add \'slugPreprocessor\' config option to allow users customize the hash links ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-search-algolia`\\n - [#3133](https://github.com/facebook/docusaurus/pull/3133) feat(v2): add themeConfig validation to algolia theme ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#3142](https://github.com/facebook/docusaurus/pull/3142) fix(v2): config validation fixes + add tests for config validation ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#3149](https://github.com/facebook/docusaurus/pull/3149) fix(v2): BrowserOnly should not return undefined ([@slorber](https://github.com/slorber))\\n - [#3143](https://github.com/facebook/docusaurus/pull/3143) fix(v2): absolute Links should be automatically prefixed by baseurl ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#3141](https://github.com/facebook/docusaurus/pull/3141) fix(v2): remove buggy routesLoaded + deprecate routesLoaded lifecycle ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#3140](https://github.com/facebook/docusaurus/pull/3140) fix(v2): navbar item links should allow unknown attributes ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#3138](https://github.com/facebook/docusaurus/pull/3138) fix(v2): add accessible label for Algolia search button ([@hobadams](https://github.com/hobadams))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3120](https://github.com/facebook/docusaurus/pull/3120) fix(v2): make config validation less strict ([@teikjun](https://github.com/teikjun))\\n\\n## :memo: Documentation\\n\\n- [#3145](https://github.com/facebook/docusaurus/pull/3145) docs(v2): add myself to /team page + add TeamProfileCard component ([@slorber](https://github.com/slorber))\\n- [#3146](https://github.com/facebook/docusaurus/pull/3146) docs(v2): prettier docs ([@slorber](https://github.com/slorber))\\n- [#3116](https://github.com/facebook/docusaurus/pull/3116) chore(v2): docs updates after release ([@slorber](https://github.com/slorber))\\n\\n## :house: Internal\\n\\n- Other\\n - [#3130](https://github.com/facebook/docusaurus/pull/3130) chore(v2): remove old versions ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-migrate`, `docusaurus-module-type-aliases`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-pwa`, `docusaurus-plugin-sitemap`, `docusaurus-preset-bootstrap`, `docusaurus-preset-classic`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`, `stylelint-copyright`\\n - [#3114](https://github.com/facebook/docusaurus/pull/3114) chore(v2): prepare v2.0.0.alpha-59 release ([@slorber](https://github.com/slorber))\\n\\n## Committers: 4\\n\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Hob Adams ([@hobadams](https://github.com/hobadams))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))"},{"id":"/2.0.0-alpha.59","metadata":{"permalink":"/changelog/2.0.0-alpha.59","source":"@site/changelog/source/2.0.0-alpha.59.md","title":"2.0.0-alpha.59","description":"New Feature","date":"2020-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Mahfoudh Arous","alias":"aladin002dz","url":"https://github.com/aladin002dz","imageURL":"https://github.com/aladin002dz.png","key":"aladin002dz"},{"name":"Eric Dobbertin","alias":"aldeed","url":"https://github.com/aldeed","imageURL":"https://github.com/aldeed.png","key":"aldeed"},{"name":"Amirul Ahmad","alias":"amirulahmad","url":"https://github.com/amirulahmad","imageURL":"https://github.com/amirulahmad.png","key":"amirulahmad"},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal"},{"name":"Ayan Banerjee","alias":"ayan-b","url":"https://github.com/ayan-b","imageURL":"https://github.com/ayan-b.png","key":"ayan-b"},{"name":"Jeremy Asuncion","alias":"codemonkey800","url":"https://github.com/codemonkey800","imageURL":"https://github.com/codemonkey800.png","key":"codemonkey800"},{"name":"Daniel Hochman","alias":"danielhochman","url":"https://github.com/danielhochman","imageURL":"https://github.com/danielhochman.png","key":"danielhochman"},{"name":"Deepak Giri","alias":"dpkg","url":"https://github.com/dpkg","imageURL":"https://github.com/dpkg.png","key":"dpkg"},{"name":"ehsan jso","alias":"ehsanjso","url":"https://github.com/ehsanjso","imageURL":"https://github.com/ehsanjso.png","key":"ehsanjso"},{"name":"Arsalan Khattak","alias":"eKhattak","url":"https://github.com/eKhattak","imageURL":"https://github.com/eKhattak.png","key":"eKhattak"},{"name":"Fran\xe7ois Chalifour","alias":"francoischalifour","url":"https://github.com/francoischalifour","imageURL":"https://github.com/francoischalifour.png","key":"francoischalifour"},{"name":"matbub","alias":"hi-matbub","url":"https://github.com/hi-matbub","imageURL":"https://github.com/hi-matbub.png","key":"hi-matbub"},{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville"},{"name":"Jordan Liu","alias":"jordanliu","url":"https://github.com/jordanliu","imageURL":"https://github.com/jordanliu.png","key":"jordanliu"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug"},{"name":"Paul Cowgill","alias":"pcowgill","url":"https://github.com/pcowgill","imageURL":"https://github.com/pcowgill.png","key":"pcowgill"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Frida Hjelm","alias":"svtfrida","url":"https://github.com/svtfrida","imageURL":"https://github.com/svtfrida.png","key":"svtfrida"},{"name":"Taylor Allen","alias":"taylorallen0913","url":"https://github.com/taylorallen0913","imageURL":"https://github.com/taylorallen0913.png","key":"taylorallen0913"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"},{"name":"Vandr\xe9 Leal","alias":"vandreleal","url":"https://github.com/vandreleal","imageURL":"https://github.com/vandreleal.png","key":"vandreleal"},{"name":"Rian Finnegan","alias":"xtellurian","url":"https://github.com/xtellurian","imageURL":"https://github.com/xtellurian.png","key":"xtellurian"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-07-24T20:00","authors":["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60"},"nextItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-migrate`, `docusaurus-plugin-client-redirects`\\n - [#3015](https://github.com/facebook/docusaurus/pull/3015) feat: automate migration from v1 to v2 ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3105](https://github.com/facebook/docusaurus/pull/3105) feat(v2): add docusaurus script for npm users ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2815](https://github.com/facebook/docusaurus/pull/2815) feat(v2): introduce DocSearch v3 search ([@francoischalifour](https://github.com/francoischalifour))\\n- `docusaurus-init`, `docusaurus-types`, `docusaurus`\\n - [#3059](https://github.com/facebook/docusaurus/pull/3059) feat(v2): broken links detection ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#3084](https://github.com/facebook/docusaurus/pull/3084) feat(v2): absolute slugs and slug resolution system ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#3069](https://github.com/facebook/docusaurus/pull/3069) feat(v2): support for adding relative images and handling broken image links ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus`\\n - [#3080](https://github.com/facebook/docusaurus/pull/3080) feat(v2): add support for serve command ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus-types`, `docusaurus`\\n - [#3058](https://github.com/facebook/docusaurus/pull/3058) feat(v2): useDocusaurusContext().siteMetadata ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3032](https://github.com/facebook/docusaurus/pull/3032) feat(v2): notify users when docusaurus version is outdated ([@teikjun](https://github.com/teikjun))\\n - [#3033](https://github.com/facebook/docusaurus/pull/3033) feat(v2): add useBaseUrlUtils() hook ([@slorber](https://github.com/slorber))\\n - [#3006](https://github.com/facebook/docusaurus/pull/3006) feat(v2): prompt user when default port is in use ([@taylorallen0913](https://github.com/taylorallen0913))\\n- `docusaurus-module-type-aliases`, `docusaurus-plugin-debug`, `docusaurus`\\n - [#3050](https://github.com/facebook/docusaurus/pull/3050) feat(v2): Collect plugin versions to allow them to be inspected in debug plugin ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-theme-classic`\\n - [#3038](https://github.com/facebook/docusaurus/pull/3038) feat(v2): Support keywords meta in blog posts ([@dpkg](https://github.com/dpkg))\\n - [#2974](https://github.com/facebook/docusaurus/pull/2974) feat(v2): Error when hooks depends on context is used outside of Layout ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#2205](https://github.com/facebook/docusaurus/pull/2205) feat(v2): Plugin for Offline/PWA support ([@codemonkey800](https://github.com/codemonkey800))\\n- `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2994](https://github.com/facebook/docusaurus/pull/2994) feat(v2): configureWebpack merge strategy + use file-loader for common asset types ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`\\n - [#2989](https://github.com/facebook/docusaurus/pull/2989) feat(v2): add disableVersioning config to docs plugin ([@slorber](https://github.com/slorber))\\n - [#2877](https://github.com/facebook/docusaurus/pull/2877) feat(v2): allow skipping build docs for next version ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`\\n - [#2955](https://github.com/facebook/docusaurus/pull/2955) feat(v1): add deletedDocs config to fix unwanted versioning fallback ([@aldeed](https://github.com/aldeed))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-types`, `docusaurus`\\n - [#2943](https://github.com/facebook/docusaurus/pull/2943) feat(v2): option and config validation life cycle method for official plugins ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-module-type-aliases`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-debug`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2971](https://github.com/facebook/docusaurus/pull/2971) feat(v2): global data + useGlobalData + docs versions dropdown ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#3107](https://github.com/facebook/docusaurus/pull/3107) fix(v2): broken links detector: ignore existing folders ([@slorber](https://github.com/slorber))\\n - [#3112](https://github.com/facebook/docusaurus/pull/3112) fix(v2): baseUrl is wrongly appended to anchor links ([@slorber](https://github.com/slorber))\\n - [#3063](https://github.com/facebook/docusaurus/pull/3063) fix(v2): classify link hrefs with protocol identifier as internal ([@svtfrida](https://github.com/svtfrida))\\n- `docusaurus-theme-classic`\\n - [#3106](https://github.com/facebook/docusaurus/pull/3106) fix(v2): dropdown navbar item: validation too strict ([@slorber](https://github.com/slorber))\\n - [#3029](https://github.com/facebook/docusaurus/pull/3029) fix(v2): change description for blog post paginator ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-plugin-content-docs`\\n - [#3108](https://github.com/facebook/docusaurus/pull/3108) fix(v2): fix docs instance path typo ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-pages`\\n - [#3025](https://github.com/facebook/docusaurus/pull/3025) fix(v2):pass siteConfig as prop to pages ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#3017](https://github.com/facebook/docusaurus/pull/3017) fix(v2): fix broken links on versions page ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3012](https://github.com/facebook/docusaurus/pull/3012) fix(v2): refactor color mode system ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`, `docusaurus`\\n - [#3010](https://github.com/facebook/docusaurus/pull/3010) fix(v2): make client-redirect-plugin not baseUrl sensitive ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-1.x`\\n - [#2993](https://github.com/facebook/docusaurus/pull/2993) fix(relative path): last update date and by isn\u2019t generated if localh\u2026 ([@amirulahmad](https://github.com/amirulahmad))\\n- `docusaurus-plugin-client-redirects`\\n - [#2969](https://github.com/facebook/docusaurus/pull/2969) fix: fromExtensions and toExtensions translation when used with baseUrl ([@jknoxville](https://github.com/jknoxville))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#3088](https://github.com/facebook/docusaurus/pull/3088) improve navbar menu ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus`\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n\\n## :memo: Documentation\\n\\n- [#3026](https://github.com/facebook/docusaurus/pull/3026) docs(v2): add documentation for migration command ([@teikjun](https://github.com/teikjun))\\n- [#3094](https://github.com/facebook/docusaurus/pull/3094) docs(v2): showcase user Clutch ([@danielhochman](https://github.com/danielhochman))\\n- [#3101](https://github.com/facebook/docusaurus/pull/3101) docs(v2):Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3098](https://github.com/facebook/docusaurus/pull/3098) docs: Add azure-pipelines CI guide ([@ayan-b](https://github.com/ayan-b))\\n- [#3086](https://github.com/facebook/docusaurus/pull/3086) doc(v2): replace heading position ([@eKhattak](https://github.com/eKhattak))\\n- [#3082](https://github.com/facebook/docusaurus/pull/3082) fixing few typos and enhancing few sentences clarity ([@aladin002dz](https://github.com/aladin002dz))\\n- [#3078](https://github.com/facebook/docusaurus/pull/3078) Updated link for #docusaurus-2-dev discord ([@jordanliu](https://github.com/jordanliu))\\n- [#3076](https://github.com/facebook/docusaurus/pull/3076) docs(v2): showcase Runlet ([@vandreleal](https://github.com/vandreleal))\\n- [#3040](https://github.com/facebook/docusaurus/pull/3040) docs(v2): correct the documentation for docs-only mode ([@teikjun](https://github.com/teikjun))\\n- [#3034](https://github.com/facebook/docusaurus/pull/3034) docs(v2): showcase user Tasit ([@pcowgill](https://github.com/pcowgill))\\n- [#3022](https://github.com/facebook/docusaurus/pull/3022) docs(v2): showcase Eta ([@nebrelbug](https://github.com/nebrelbug))\\n- [#3011](https://github.com/facebook/docusaurus/pull/3011) docs(v1): external links ([@slorber](https://github.com/slorber))\\n- [#2997](https://github.com/facebook/docusaurus/pull/2997) docs(v2): Document TypeScript support ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2973](https://github.com/facebook/docusaurus/pull/2973) docs(v2): Fix typo in markdown-features ([@ehsanjso](https://github.com/ehsanjso))\\n- [#2991](https://github.com/facebook/docusaurus/pull/2991) Showcase Amphora Data ([@xtellurian](https://github.com/xtellurian))\\n- [#2983](https://github.com/facebook/docusaurus/pull/2983) docs(v2): add plugin redirects production build note ([@slorber](https://github.com/slorber))\\n- [#2967](https://github.com/facebook/docusaurus/pull/2967) docs(v2): fix typos in plugin-content examples ([@hi-matbub](https://github.com/hi-matbub))\\n- [#2960](https://github.com/facebook/docusaurus/pull/2960) doc(v2): publish doc update after alpha.58 release ([@slorber](https://github.com/slorber))\\n- [#2966](https://github.com/facebook/docusaurus/pull/2966) docs(v2): fix typo in plugin-content-pages example ([@hi-matbub](https://github.com/hi-matbub))\\n\\n## :house: Internal\\n\\n- `docusaurus-migrate`\\n - [#3113](https://github.com/facebook/docusaurus/pull/3113) chore(v2): ability to test the migration cli easily ([@slorber](https://github.com/slorber))\\n- Other\\n - [#3099](https://github.com/facebook/docusaurus/pull/3099) fix(v2): netlify.toml shouldn\'t affect v1 site deployment config ([@slorber](https://github.com/slorber))\\n - [#3068](https://github.com/facebook/docusaurus/pull/3068) chore(deps): bump lodash from 4.17.15 to 4.17.19 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2958](https://github.com/facebook/docusaurus/pull/2958) docs(v2): rename 2.0.0-alpha.57 to 2.0.0-alpha.58 ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus`\\n - [#3093](https://github.com/facebook/docusaurus/pull/3093) fix(v2): fix recent baseurl issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-mdx-loader`\\n - [#3087](https://github.com/facebook/docusaurus/pull/3087) refactor(v2): async md image transformer + pathname protocol as an escape hatch ([@slorber](https://github.com/slorber))\\n- `docusaurus-plugin-pwa`, `docusaurus`\\n - [#3055](https://github.com/facebook/docusaurus/pull/3055) chore(v2): Adopt corejs 3 and only import at entry point ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-debug`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2998](https://github.com/facebook/docusaurus/pull/2998) chore(v2): refactor yarn tsc to yarn build + add theme-classic watch mode ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`\\n - [#3008](https://github.com/facebook/docusaurus/pull/3008) chore(v2): Add E2E test for yarn v2 ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#3001](https://github.com/facebook/docusaurus/pull/3001) fix(v2): refactor routes.ts + add route hash for chunkNames key ([@slorber](https://github.com/slorber))\\n- `docusaurus`\\n - [#3007](https://github.com/facebook/docusaurus/pull/3007) fix(v2): Add two missing docusaurus core babel dependency ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2987](https://github.com/facebook/docusaurus/pull/2987) chore(v2): use joi for config validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n - [#2950](https://github.com/facebook/docusaurus/pull/2950) chore(v2): Implement a simple E2E testing mechanism for `docusausus start` ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-sitemap`, `docusaurus-theme-live-codeblock`, `docusaurus-types`\\n - [#2970](https://github.com/facebook/docusaurus/pull/2970) feat(v2): add option validation for remaining official plugins ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-classic`\\n - [#2996](https://github.com/facebook/docusaurus/pull/2996) chore(v2): Merge devDependencies in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2977](https://github.com/facebook/docusaurus/pull/2977) chore(v2): Remove extraneous package-lock.json ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`\\n - [#2962](https://github.com/facebook/docusaurus/pull/2962) Feat: replace yup with joi for cleaner validation ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2976](https://github.com/facebook/docusaurus/pull/2976) chore(v2): Fix more eslint errors ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`, `lqip-loader`\\n - [#2972](https://github.com/facebook/docusaurus/pull/2972) chore(v2): Fix a lot of eslint warnings ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## Committers: 25\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amirul Ahmad ([@amirulahmad](https://github.com/amirulahmad))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Arsalan Khattak ([@eKhattak](https://github.com/eKhattak))\\n- Ayan Banerjee ([@ayan-b](https://github.com/ayan-b))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Daniel Hochman ([@danielhochman](https://github.com/danielhochman))\\n- Deepak Giri ([@dpkg](https://github.com/dpkg))\\n- Eric Dobbertin ([@aldeed](https://github.com/aldeed))\\n- Fran\xe7ois Chalifour ([@francoischalifour](https://github.com/francoischalifour))\\n- Frida Hjelm ([@svtfrida](https://github.com/svtfrida))\\n- Jeremy Asuncion ([@codemonkey800](https://github.com/codemonkey800))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Jordan Liu ([@jordanliu](https://github.com/jordanliu))\\n- Mahfoudh Arous ([@aladin002dz](https://github.com/aladin002dz))\\n- Paul Cowgill ([@pcowgill](https://github.com/pcowgill))\\n- Rian Finnegan ([@xtellurian](https://github.com/xtellurian))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Allen ([@taylorallen0913](https://github.com/taylorallen0913))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Vandr\xe9 Leal ([@vandreleal](https://github.com/vandreleal))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- ehsan jso ([@ehsanjso](https://github.com/ehsanjso))\\n- matbub ([@hi-matbub](https://github.com/hi-matbub))"},{"id":"/2.0.0-alpha.58","metadata":{"permalink":"/changelog/2.0.0-alpha.58","source":"@site/changelog/source/2.0.0-alpha.58.md","title":"2.0.0-alpha.58","description":"New Feature","date":"2020-06-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"hackerman","alias":"aeneasr","url":"https://github.com/aeneasr","imageURL":"https://github.com/aeneasr.png","key":"aeneasr"},{"name":"Anshul Goyal","alias":"anshulrgoyal","url":"https://github.com/anshulrgoyal","imageURL":"https://github.com/anshulrgoyal.png","key":"anshulrgoyal"},{"name":"belokonm","alias":"belokonm","url":"https://github.com/belokonm","imageURL":"https://github.com/belokonm.png","key":"belokonm"},{"name":"Drew Alexander","alias":"Drewbi","url":"https://github.com/Drewbi","imageURL":"https://github.com/Drewbi.png","key":"Drewbi"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"Guillaume Jacquart","alias":"guillaumejacquart","url":"https://github.com/guillaumejacquart","imageURL":"https://github.com/guillaumejacquart.png","key":"guillaumejacquart"},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey"},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"moonrailgun","alias":"moonrailgun","url":"https://github.com/moonrailgun","imageURL":"https://github.com/moonrailgun.png","key":"moonrailgun"},{"name":"Koki Nishihara","alias":"Nishikoh","url":"https://github.com/Nishikoh","imageURL":"https://github.com/Nishikoh.png","key":"Nishikoh"},{"name":"Paul Glezen","alias":"pglezen","url":"https://github.com/pglezen","imageURL":"https://github.com/pglezen.png","key":"pglezen"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Teik Jun","alias":"teikjun","url":"https://github.com/teikjun","imageURL":"https://github.com/teikjun.png","key":"teikjun"},{"name":"tetunori","alias":"tetunori","url":"https://github.com/tetunori","imageURL":"https://github.com/tetunori.png","key":"tetunori"},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T20:00","authors":["aeneasr","anshulrgoyal","belokonm","Drewbi","fanny","guillaumejacquart","JoelMarcey","jsjoeio","lex111","moonrailgun","Nishikoh","pglezen","SamChou19815","slorber","teikjun","tetunori","TomBrien","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59"},"nextItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2916](https://github.com/facebook/docusaurus/pull/2916) feat(v2): add a banner that links to latest version of documentation ([@teikjun](https://github.com/teikjun))\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n- `docusaurus-plugin-debug`, `docusaurus-preset-classic`\\n - [#2928](https://github.com/facebook/docusaurus/pull/2928) feat(v2): Implement proof-of-concept Docusaurus Debug Dashboard ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`, `docusaurus`\\n - [#2903](https://github.com/facebook/docusaurus/pull/2903) feat(v2): Allow configuring babel via babel.config.js ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-client-redirects`, `docusaurus-utils`\\n - [#2793](https://github.com/facebook/docusaurus/pull/2793) feat(v2): docusaurus-plugin-client-redirects ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-live-codeblock`\\n - [#2826](https://github.com/facebook/docusaurus/pull/2826) feat(v2): allow adding components to react-live scope ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2856](https://github.com/facebook/docusaurus/pull/2856) feat(v2): allow specifying meta image for blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2841](https://github.com/facebook/docusaurus/pull/2841) feat(v2): Allow swizzling prism-include-languages in theme-classic ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2682](https://github.com/facebook/docusaurus/pull/2682) feat(v2): expanded sidebar categories by default ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2905](https://github.com/facebook/docusaurus/pull/2905) fix(v2): fix docs homepage permalink issues ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2932](https://github.com/facebook/docusaurus/pull/2932) fix(v2): Add hooks to detect window resize, toggle off sidebar and navbar in desktop ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n - [#2909](https://github.com/facebook/docusaurus/pull/2909) fix(v2): adjust anchor offset when routes switched ([@lex111](https://github.com/lex111))\\n - [#2896](https://github.com/facebook/docusaurus/pull/2896) fix(v2): set correct canonical url for docs home page ([@lex111](https://github.com/lex111))\\n - [#2893](https://github.com/facebook/docusaurus/pull/2893) fix(v2): Do not automatically change tab when a non-existing option is selected ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2888](https://github.com/facebook/docusaurus/pull/2888) fix(v2): restore styles for menu scrollbar ([@lex111](https://github.com/lex111))\\n - [#2857](https://github.com/facebook/docusaurus/pull/2857) fix(v2): treat inline code in raw HTML as native element ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2951](https://github.com/facebook/docusaurus/pull/2951) fix(v2): Add optional-chaining and nullish-coalescing babel plugin ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2921](https://github.com/facebook/docusaurus/pull/2921) fix(v2): upgrade react-loadable-ssr-addon ([@slorber](https://github.com/slorber))\\n - [#2854](https://github.com/facebook/docusaurus/pull/2854) fix(v2): fix broken build when swizzled NotFound component exist ([@lex111](https://github.com/lex111))\\n - [#2829](https://github.com/facebook/docusaurus/pull/2829) fix(v2): Fix plugin path resolution ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-preset-classic`\\n - [#2944](https://github.com/facebook/docusaurus/pull/2944) fix(v2): Declare @docusaurus-plugin-debug as dependency of preset classic ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-init`\\n - [#2902](https://github.com/facebook/docusaurus/pull/2902) feat(v2): add nojekyll file to static folder for all templates ([@teikjun](https://github.com/teikjun))\\n- `docusaurus-theme-bootstrap`\\n - [#2860](https://github.com/facebook/docusaurus/pull/2860) fix(v2): bootstrap doc sidebar ([@fanny](https://github.com/fanny))\\n- Other\\n - [#2874](https://github.com/facebook/docusaurus/pull/2874) fix(v2): Getting Started URL ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-docs`\\n - [#2861](https://github.com/facebook/docusaurus/pull/2861) fix(v2): do not create route for document that serve as docs home page ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2867](https://github.com/facebook/docusaurus/pull/2867) fix(v2): fix FOUC in doc sidebar and various improvements ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-search-algolia`\\n - [#2838](https://github.com/facebook/docusaurus/pull/2838) fix(v2): use base url to navigate to search page ([@tetunori](https://github.com/tetunori))\\n- `docusaurus-utils`\\n - [#2855](https://github.com/facebook/docusaurus/pull/2855) fix(v2): strip images and footnotes for excerpt correctly ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2835](https://github.com/facebook/docusaurus/pull/2835) fix(v2): set proper font for live editor ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`, `docusaurus`\\n - [#2884](https://github.com/facebook/docusaurus/pull/2884) polish(v2): improve Docusaurus 1 to 2 migration developer experience ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2870](https://github.com/facebook/docusaurus/pull/2870) refactor(v2): combine nested theme providers into one ([@lex111](https://github.com/lex111))\\n - [#2880](https://github.com/facebook/docusaurus/pull/2880) fix(v2): render as regular text uncollapsible categories ([@lex111](https://github.com/lex111))\\n - [#2864](https://github.com/facebook/docusaurus/pull/2864) refactor(v2): add aria role for doc sidebar ([@lex111](https://github.com/lex111))\\n - [#2859](https://github.com/facebook/docusaurus/pull/2859) refactor(v2): add aria label to paginators ([@lex111](https://github.com/lex111))\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2862](https://github.com/facebook/docusaurus/pull/2862) Updated banner in solidarity ([@JoelMarcey](https://github.com/JoelMarcey))\\n\\n## :memo: Documentation\\n\\n- [#2946](https://github.com/facebook/docusaurus/pull/2946) docs(v2): add require.resolve to plugin imports on remaining pages ([@teikjun](https://github.com/teikjun))\\n- [#2941](https://github.com/facebook/docusaurus/pull/2941) docs(v2): wrap all plugin imports in require.resolve() ([@TomBrien](https://github.com/TomBrien))\\n- [#2934](https://github.com/facebook/docusaurus/pull/2934) docs(v2): add useThemeContext note ([@Drewbi](https://github.com/Drewbi))\\n- [#2935](https://github.com/facebook/docusaurus/pull/2935) docs(v2): Add router implementation note ([@Drewbi](https://github.com/Drewbi))\\n- [#2933](https://github.com/facebook/docusaurus/pull/2933) docs(v2): add documentation for multiple blogs ([@teikjun](https://github.com/teikjun))\\n- [#2910](https://github.com/facebook/docusaurus/pull/2910) docs(v2): fix GitHub action workflow in docs ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- [#2886](https://github.com/facebook/docusaurus/pull/2886) docs(v2): fix typo in command on installation page ([@pglezen](https://github.com/pglezen))\\n- [#2887](https://github.com/facebook/docusaurus/pull/2887) docs(v2): make .nojekyll warning more obvious ([@yangshun](https://github.com/yangshun))\\n- [#2865](https://github.com/facebook/docusaurus/pull/2865) docs(v2): description field in frontmatter of blog post ([@lex111](https://github.com/lex111))\\n- [#2839](https://github.com/facebook/docusaurus/pull/2839) docs(v2): \\\\_index docs page does not show a sidebar ([@aeneasr](https://github.com/aeneasr))\\n- [#2852](https://github.com/facebook/docusaurus/pull/2852) misc: move runme demo in block quote about v2 ([@lex111](https://github.com/lex111))\\n- [#2842](https://github.com/facebook/docusaurus/pull/2842) docs(v2): Update ZEIT to Vercel ([@Nishikoh](https://github.com/Nishikoh))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2948](https://github.com/facebook/docusaurus/pull/2948) refactor(v2): legacy export = syntax ([@slorber](https://github.com/slorber))\\n- `docusaurus-init`, `docusaurus-plugin-client-redirects`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-utils`, `docusaurus`\\n - [#2922](https://github.com/facebook/docusaurus/pull/2922) misc(v2): better dx: yarn clear, yarn watch, yarn serve ([@slorber](https://github.com/slorber))\\n- Other\\n - [#2929](https://github.com/facebook/docusaurus/pull/2929) chore(v2): Run E2E tests in CI ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2899](https://github.com/facebook/docusaurus/pull/2899) chore(deps): bump websocket-extensions from 0.1.3 to 0.1.4 ([@dependabot[bot]](https://github.com/apps/dependabot))\\n - [#2897](https://github.com/facebook/docusaurus/pull/2897) refactor(v2): synchronize yarn/npm command on site ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`\\n - [#2931](https://github.com/facebook/docusaurus/pull/2931) chore(v2): remove unused hooks from bootstrap theme ([@fanny](https://github.com/fanny))\\n- `docusaurus-1.x`, `docusaurus-plugin-content-docs`\\n - [#2906](https://github.com/facebook/docusaurus/pull/2906) chore(v2): fix async tests ([@slorber](https://github.com/slorber))\\n- `docusaurus-theme-classic`\\n - [#2858](https://github.com/facebook/docusaurus/pull/2858) refactor(v2): add missing main landmark for needed pages ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-sitemap`\\n - [#2936](https://github.com/facebook/docusaurus/pull/2936) perf(v2): convert synchronous filewrite to asynchronous ([@moonrailgun](https://github.com/moonrailgun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2900](https://github.com/facebook/docusaurus/pull/2900) chore(v2): replace Clipboard with copy-text-to-clipboard ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2895](https://github.com/facebook/docusaurus/pull/2895) chore(v2): replace classnames with clsx ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anshul Goyal ([@anshulrgoyal](https://github.com/anshulrgoyal))\\n- Drew Alexander ([@Drewbi](https://github.com/Drewbi))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Guillaume Jacquart ([@guillaumejacquart](https://github.com/guillaumejacquart))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Koki Nishihara ([@Nishikoh](https://github.com/Nishikoh))\\n- Paul Glezen ([@pglezen](https://github.com/pglezen))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Teik Jun ([@teikjun](https://github.com/teikjun))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@belokonm](https://github.com/belokonm)\\n- hackerman ([@aeneasr](https://github.com/aeneasr))\\n- moonrailgun ([@moonrailgun](https://github.com/moonrailgun))\\n- tetunori ([@tetunori](https://github.com/tetunori))"},{"id":"/2.0.0-alpha.57","metadata":{"permalink":"/changelog/2.0.0-alpha.57","source":"@site/changelog/source/2.0.0-alpha.57.md","title":"2.0.0-alpha.57","description":"Bad release, check ## 2.0.0-alpha.58","date":"2020-06-18T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2020-06-18T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58"},"nextItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\nBad release, check ## 2.0.0-alpha.58"},{"id":"/2.0.0-alpha.56","metadata":{"permalink":"/changelog/2.0.0-alpha.56","source":"@site/changelog/source/2.0.0-alpha.56.md","title":"2.0.0-alpha.56","description":"Breaking Change","date":"2020-05-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"John Knox","alias":"jknoxville","url":"https://github.com/jknoxville","imageURL":"https://github.com/jknoxville.png","key":"jknoxville"},{"name":"James McShane","alias":"jmcshane","url":"https://github.com/jmcshane","imageURL":"https://github.com/jmcshane.png","key":"jmcshane"},{"name":"Kasper B\xf8gebjerg Pedersen","alias":"kasperp","url":"https://github.com/kasperp","imageURL":"https://github.com/kasperp.png","key":"kasperp"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Muhammad Ali","alias":"mrmuhammadali","url":"https://github.com/mrmuhammadali","imageURL":"https://github.com/mrmuhammadali.png","key":"mrmuhammadali"},{"name":"Piotr Baran","alias":"piotros","url":"https://github.com/piotros","imageURL":"https://github.com/piotros.png","key":"piotros"},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-28T20:00","authors":["jknoxville","jmcshane","kasperp","lex111","mrmuhammadali","piotros","s-pace","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57"},"nextItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"listPageLink":"/changelog/page/3"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- If you refer to modules (plugins) in your config file in a string form, you will need to replace them with `require.resolve` calls, for example:\\n\\n```diff\\n- plugins: [\'@docusaurus/plugin-google-analytics\']\\n+ plugins: [require.resolve(\'@docusaurus/plugin-google-analytics\')]\\n```\\n\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2780](https://github.com/facebook/docusaurus/pull/2780) feat(v2): open external links in new tab by default ([@jknoxville](https://github.com/jknoxville))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2770](https://github.com/facebook/docusaurus/pull/2770) feat(v2): allow deploy without building website ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2818](https://github.com/facebook/docusaurus/pull/2818) feat(v2): automatically add base url to logo link ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2645](https://github.com/facebook/docusaurus/pull/2645) fix(v2): enable scrolling for sidebar menu only ([@lex111](https://github.com/lex111))\\n - [#2800](https://github.com/facebook/docusaurus/pull/2800) fix(v2): make proper h1 font size on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2788](https://github.com/facebook/docusaurus/pull/2788) fix(v2): use `require.resolve` for all webpack presets and plugins ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus-plugin-content-docs`\\n - [#2785](https://github.com/facebook/docusaurus/pull/2785) fix(v2): do not show sidebar on reserved docs home page ([@lex111](https://github.com/lex111))\\n - [#2777](https://github.com/facebook/docusaurus/pull/2777) fix(v2): check for docs homepage correctly ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2820](https://github.com/facebook/docusaurus/pull/2820) chore(v2): upgrade Infima to 0.2.0-alpha.12 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2814](https://github.com/facebook/docusaurus/pull/2814) refactor(v2): align search icon to center on mobiles ([@lex111](https://github.com/lex111))\\n - [#2799](https://github.com/facebook/docusaurus/pull/2799) refactor(v2): increase search input on medium screens ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2802](https://github.com/facebook/docusaurus/pull/2802) misc: minor improvements for init templates ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2791](https://github.com/facebook/docusaurus/pull/2791) refactor(v2): show search icon only on mobiles ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2783](https://github.com/facebook/docusaurus/pull/2783) refactor(v2): make external links more secure ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2809](https://github.com/facebook/docusaurus/pull/2809) docs(v2): add mention on DocSearch when you run the crawler on your own ([@s-pace](https://github.com/s-pace))\\n\\n## :house: Internal\\n\\n- [#2778](https://github.com/facebook/docusaurus/pull/2778) fix(v2): do not highlight root docs path in navbar ([@lex111](https://github.com/lex111))\\n\\n## Committers: 8\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- James McShane ([@jmcshane](https://github.com/jmcshane))\\n- John Knox ([@jknoxville](https://github.com/jknoxville))\\n- Kasper B\xf8gebjerg Pedersen ([@kasperp](https://github.com/kasperp))\\n- Muhammad Ali ([@mrmuhammadali](https://github.com/mrmuhammadali))\\n- Piotr Baran ([@piotros](https://github.com/piotros))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))"},{"id":"/2.0.0-alpha.55","metadata":{"permalink":"/changelog/2.0.0-alpha.55","source":"@site/changelog/source/2.0.0-alpha.55.md","title":"2.0.0-alpha.55","description":"Breaking Change","date":"2020-05-19T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Artem Kovalov","alias":"artemkovalyov","url":"https://github.com/artemkovalyov","imageURL":"https://github.com/artemkovalyov.png","key":"artemkovalyov"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"Rajiv Singh","alias":"iamrajiv","url":"https://github.com/iamrajiv","imageURL":"https://github.com/iamrajiv.png","key":"iamrajiv"},{"name":"Jimmy","alias":"jcomack","url":"https://github.com/jcomack","imageURL":"https://github.com/jcomack.png","key":"jcomack"},{"name":"Julien Deniau","alias":"jdeniau","url":"https://github.com/jdeniau","imageURL":"https://github.com/jdeniau.png","key":"jdeniau"},{"name":"Jonny Nabors","alias":"jonnynabors","url":"https://github.com/jonnynabors","imageURL":"https://github.com/jonnynabors.png","key":"jonnynabors"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Marco Moretti","alias":"marcosvega91","url":"https://github.com/marcosvega91","imageURL":"https://github.com/marcosvega91.png","key":"marcosvega91"},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Taylor Reece","alias":"taylorreece","url":"https://github.com/taylorreece","imageURL":"https://github.com/taylorreece.png","key":"taylorreece"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Yamagishi Kazutoshi","alias":"ykzts","url":"https://github.com/ykzts","imageURL":"https://github.com/ykzts.png","key":"ykzts"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-05-19T20:00","authors":["artemkovalyov","fanny","iamrajiv","jcomack","jdeniau","jonnynabors","lex111","marcosvega91","nebrelbug","slorber","taylorreece","yangshun","ykzts"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56"},"nextItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n\\n - The following Infima classes have been renamed for consistency:\\n\\n - `page-item` \u2192 `pagination__item`\\n - `pagination-nav__link--label` \u2192 `pagination-nav__label`\\n - `pagination-nav__link--sublabel` \u2192 `pagination-nav__sublabel`\\n - `tab-item` \u2192 `tabs__item`\\n - `tab-item--active` \u2192 `tabs__item--active`\\n\\n If you have swizzled components, you need to replace these class names.\\n\\n- `docusaurus`\\n\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus`\\n - [#2764](https://github.com/facebook/docusaurus/pull/2764) feat(v2): allow import SVG images ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2690](https://github.com/facebook/docusaurus/pull/2690) feat(v2): allow activeBaseTest in NavLink ([@nebrelbug](https://github.com/nebrelbug))\\n - [#2694](https://github.com/facebook/docusaurus/pull/2694) feat(v2): add canonical URL to `<head>` ([@jcomack](https://github.com/jcomack))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#2652](https://github.com/facebook/docusaurus/pull/2652) feat(v2): allow home page for docs ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2756](https://github.com/facebook/docusaurus/pull/2756) feat(v2): add search page \ud83d\udd0e ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`\\n - [#2701](https://github.com/facebook/docusaurus/pull/2701) fix(v2): remove Markdown syntax from excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2765](https://github.com/facebook/docusaurus/pull/2765) fix(v2): remove invalid attr from mobile nav links ([@lex111](https://github.com/lex111))\\n - [#2760](https://github.com/facebook/docusaurus/pull/2760) fix(v2): move anchor link to right of heading ([@lex111](https://github.com/lex111))\\n - [#2758](https://github.com/facebook/docusaurus/pull/2758) fix(v2): remove extra top margin of tab item ([@lex111](https://github.com/lex111))\\n - [#2759](https://github.com/facebook/docusaurus/pull/2759) fix(v2): restore hiding of docs toc ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2762](https://github.com/facebook/docusaurus/pull/2762) fix(v2): avoid duplication search input in navbar ([@lex111](https://github.com/lex111))\\n- `lqip-loader`\\n - [#2693](https://github.com/facebook/docusaurus/pull/2693) fix(v2): add support ES Module to lqip-loader ([@ykzts](https://github.com/ykzts))\\n- `docusaurus-init`\\n - [#2751](https://github.com/facebook/docusaurus/pull/2751) fix(v2): fix index page features.length when 0 ([@jdeniau](https://github.com/jdeniau))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2773](https://github.com/facebook/docusaurus/pull/2773) chore(v2): upgrade Infima to 0.2.0-alpha.11 ([@lex111](https://github.com/lex111))\\n - [#2766](https://github.com/facebook/docusaurus/pull/2766) refactor(v2): remove extra active CSS class for menu item links ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2767](https://github.com/facebook/docusaurus/pull/2767) refactor(v2): add support for dark mode to live code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2761](https://github.com/facebook/docusaurus/pull/2761) refactor(v2): improve UX of search page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-bootstrap`, `docusaurus-theme-classic`\\n - [#2729](https://github.com/facebook/docusaurus/pull/2729) chore(v2): upgrade Infima to 0.2.0-alpha.10 ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2696](https://github.com/facebook/docusaurus/pull/2696) refactor(v2): make semicolon optional in imports for excerpt ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2768](https://github.com/facebook/docusaurus/pull/2768) docs(v2): various improvements ([@lex111](https://github.com/lex111))\\n- [#2670](https://github.com/facebook/docusaurus/pull/2670) docs(v2): add deployment workflow manual for GitHub Actions ([@artemkovalyov](https://github.com/artemkovalyov))\\n\\n## :house: Internal\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2464](https://github.com/facebook/docusaurus/pull/2464) refactor(v2): add @theme-init alias to give access to initial components ([@lex111](https://github.com/lex111))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2684](https://github.com/facebook/docusaurus/pull/2684) refactor(v2): replace EJS with Eta for SSR generation ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## Committers: 13\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Artem Kovalov ([@artemkovalyov](https://github.com/artemkovalyov))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jimmy ([@jcomack](https://github.com/jcomack))\\n- Jonny Nabors ([@jonnynabors](https://github.com/jonnynabors))\\n- Julien Deniau ([@jdeniau](https://github.com/jdeniau))\\n- Marco Moretti ([@marcosvega91](https://github.com/marcosvega91))\\n- Rajiv Singh ([@iamrajiv](https://github.com/iamrajiv))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Taylor Reece ([@taylorreece](https://github.com/taylorreece))\\n- Yamagishi Kazutoshi ([@ykzts](https://github.com/ykzts))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.54","metadata":{"permalink":"/changelog/2.0.0-alpha.54","source":"@site/changelog/source/2.0.0-alpha.54.md","title":"2.0.0-alpha.54","description":"HOTFIX for 2.0.0-alpha.53.","date":"2020-04-28T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-28T20:00","authors":["jsjoeio","lex111","SamChou19815"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55"},"nextItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.53**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2688](https://github.com/facebook/docusaurus/pull/2688) fix(v2): add default value for options in theme classic ([@lex111](https://github.com/lex111))\\n- `docusaurus-module-type-aliases`\\n - [#2687](https://github.com/facebook/docusaurus/pull/2687) fix(v2): Add all webpack module aliases to type declaration file ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :memo: Documentation\\n\\n- [#2680](https://github.com/facebook/docusaurus/pull/2680) docs(v2): add swizzle example ([@jsjoeio](https://github.com/jsjoeio))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))"},{"id":"/2.0.0-alpha.53","metadata":{"permalink":"/changelog/2.0.0-alpha.53","source":"@site/changelog/source/2.0.0-alpha.53.md","title":"2.0.0-alpha.53","description":"HOTFIX for 2.0.0-alpha.51.","date":"2020-04-27T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54"},"nextItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.51**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2676](https://github.com/facebook/docusaurus/pull/2676) fix(v2): allow build website without custom css ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.51","metadata":{"permalink":"/changelog/2.0.0-alpha.51","source":"@site/changelog/source/2.0.0-alpha.51.md","title":"2.0.0-alpha.51","description":"Breaking Change","date":"2020-04-27T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Anayo Oleru","alias":"AnayoOleru","url":"https://github.com/AnayoOleru","imageURL":"https://github.com/AnayoOleru.png","key":"AnayoOleru"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"Jay Lees","alias":"jaylees14","url":"https://github.com/jaylees14","imageURL":"https://github.com/jaylees14.png","key":"jaylees14"},{"name":"Jos\xe9 Renan","alias":"JoseRenan","url":"https://github.com/JoseRenan","imageURL":"https://github.com/JoseRenan.png","key":"JoseRenan"},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio"},{"name":"Kamil Kisiela","alias":"kamilkisiela","url":"https://github.com/kamilkisiela","imageURL":"https://github.com/kamilkisiela.png","key":"kamilkisiela"},{"name":"Krist\xf3f Poduszl\xf3","alias":"kripod","url":"https://github.com/kripod","imageURL":"https://github.com/kripod.png","key":"kripod"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera"},{"name":"Reece Dunham","alias":"RDIL","url":"https://github.com/RDIL","imageURL":"https://github.com/RDIL.png","key":"RDIL"},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Tom Brien","alias":"TomBrien","url":"https://github.com/TomBrien","imageURL":"https://github.com/TomBrien.png","key":"TomBrien"},{"name":"Chris Watson","alias":"watzon","url":"https://github.com/watzon","imageURL":"https://github.com/watzon.png","key":"watzon"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Mehmet Yatk\u0131","alias":"yatki","url":"https://github.com/yatki","imageURL":"https://github.com/yatki.png","key":"yatki"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-27T19:00","authors":["AnayoOleru","fanny","jaylees14","JoseRenan","jsjoeio","kamilkisiela","kripod","lex111","Noah-Silvera","RDIL","s-pace","SamChou19815","Simek","slorber","TomBrien","watzon","yangshun","yatki"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53"},"nextItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `infima`\\n - The following infima variables have been renamed for consistency:\\n - `--ifm-font-base-color` \u2192 `--ifm-font-color-base`\\n - `--ifm-font-base-color-inverse` \u2192 `--ifm-font-color-base-inverse`\\n - `--ifm-font-color-secondary` \u2192 `--ifm-font-color-secondary`\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2660](https://github.com/facebook/docusaurus/pull/2660) feat(v2): add ability to specify CSS class for navbar item ([@lex111](https://github.com/lex111))\\n - [#2597](https://github.com/facebook/docusaurus/pull/2597) feat(v2): add ability set dark mode by default ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2665](https://github.com/facebook/docusaurus/pull/2665) feat(v2): add fallback to BrowserOnly component ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2630](https://github.com/facebook/docusaurus/pull/2630) feat(v2): add CLI option for polling ([@TomBrien](https://github.com/TomBrien))\\n- `docusaurus-init`\\n - [#2541](https://github.com/facebook/docusaurus/pull/2541) feat(v2): add showReadingTime and editUrl to the templates ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2524](https://github.com/facebook/docusaurus/pull/2524) feat(v2): add edit url in post page ([@fanny](https://github.com/fanny))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2531](https://github.com/facebook/docusaurus/pull/2531) feat(v2): add blog post estimated reading time ([@JoseRenan](https://github.com/JoseRenan))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2672](https://github.com/facebook/docusaurus/pull/2672) fix(v2): add a11y support for dropdown ([@lex111](https://github.com/lex111))\\n - [#2649](https://github.com/facebook/docusaurus/pull/2649) fix(v2): hide sidebar after click on child item ([@lex111](https://github.com/lex111))\\n - [#2631](https://github.com/facebook/docusaurus/pull/2631) fix(v2): hide doc sidebar on mobiles ([@lex111](https://github.com/lex111))\\n - [#2626](https://github.com/facebook/docusaurus/pull/2626) fix(v2): make border right of doc sidebar equals doc page ([@lex111](https://github.com/lex111))\\n - [#2625](https://github.com/facebook/docusaurus/pull/2625) fix(v2): disable tab focus on collapsed doc sidebar items ([@lex111](https://github.com/lex111))\\n - [#2602](https://github.com/facebook/docusaurus/pull/2602) fix(v2): inherit color for announcement bar close icon ([@lex111](https://github.com/lex111))\\n - [#2582](https://github.com/facebook/docusaurus/pull/2582) fix(v2): remove horizontal scroll on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2666](https://github.com/facebook/docusaurus/pull/2666) chore(v2): upgrade prism-react-renderer to latest version ([@lex111](https://github.com/lex111))\\n - [#2533](https://github.com/facebook/docusaurus/pull/2533) fix(v2): add rounded corners in code blocks properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2661](https://github.com/facebook/docusaurus/pull/2661) chore: upgrade shelljs to 0.8.4 ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2642](https://github.com/facebook/docusaurus/pull/2642) fix(v2): use remark-admonitions separately in each plugin instead of in preset only ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2380](https://github.com/facebook/docusaurus/pull/2380) fix(v2): ignore import declarations in excerpt ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-sitemap`\\n - [#2616](https://github.com/facebook/docusaurus/pull/2616) fix(v2): don\'t include 404 page in sitemaps ([@RDIL](https://github.com/RDIL))\\n - [#2530](https://github.com/facebook/docusaurus/pull/2530) fix(v2): Use `writeFileSync` to write generated sitemap.xml to avoid early termination ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2558](https://github.com/facebook/docusaurus/pull/2558) fix(v2): properly link top-level github pages sites in deploy command ([@RDIL](https://github.com/RDIL))\\n - [#2580](https://github.com/facebook/docusaurus/pull/2580) fix(v2): do not process anchor links by router ([@lex111](https://github.com/lex111))\\n - [#2579](https://github.com/facebook/docusaurus/pull/2579) fix(v2): treat mailto and tel links properly ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2540](https://github.com/facebook/docusaurus/pull/2540) fix(v2): use synchronous write for generate blog feeds ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2656](https://github.com/facebook/docusaurus/pull/2656) refactor(v2): lose focus of active sidebar item after click on it ([@lex111](https://github.com/lex111))\\n - [#2627](https://github.com/facebook/docusaurus/pull/2627) refactor(v2): extract scroll position detection into separate hook ([@lex111](https://github.com/lex111))\\n - [#2595](https://github.com/facebook/docusaurus/pull/2595) refactor(v2): make margin top on blog pages as on other pages ([@lex111](https://github.com/lex111))\\n - [#2588](https://github.com/facebook/docusaurus/pull/2588) refactor(v2): remove redundant container on docs page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2585](https://github.com/facebook/docusaurus/pull/2585) refactor(v2): use nav link component only where needed ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2556](https://github.com/facebook/docusaurus/pull/2556) refactor(v2): enhance CLI experience ([@RDIL](https://github.com/RDIL))\\n - [#2529](https://github.com/facebook/docusaurus/pull/2529) refactor(v2): replace few Lodash methods with native counterparts ([@Simek](https://github.com/Simek))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2534](https://github.com/facebook/docusaurus/pull/2534) refactor(v2): make better code blocks ([@lex111](https://github.com/lex111))\\n - [#2526](https://github.com/facebook/docusaurus/pull/2526) fix(v2): make code block nicer again ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`\\n - [#2519](https://github.com/facebook/docusaurus/pull/2519) chore(v2): use single method Lodash packages in docs plugin ([@Simek](https://github.com/Simek))\\n\\n## :memo: Documentation\\n\\n- [#2659](https://github.com/facebook/docusaurus/pull/2659) fix(docs): mention that appID is optional ([@s-pace](https://github.com/s-pace))\\n- [#2596](https://github.com/facebook/docusaurus/pull/2596) docs(v2): remove duplicated package.json in installation directory structure ([@jaylees14](https://github.com/jaylees14))\\n- [#2572](https://github.com/facebook/docusaurus/pull/2572) docs(v2): mention that `plugin-ideal-image` only perform compression on a production build ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2570](https://github.com/facebook/docusaurus/pull/2570) docs(v2): fix syntax error for @docusaurus/plugin-ideal-image example ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2566](https://github.com/facebook/docusaurus/pull/2566) docs(v2): be more polite ([@lex111](https://github.com/lex111))\\n- [#2559](https://github.com/facebook/docusaurus/pull/2559) doc(v2): remove legacy blog metadata ([@RDIL](https://github.com/RDIL))\\n- [#2549](https://github.com/facebook/docusaurus/pull/2549) docs(v2): command for swizzling all components ([@fanny](https://github.com/fanny))\\n- [#2547](https://github.com/facebook/docusaurus/pull/2547) docs(v2): Fix typo in team page ([@SamChou19815](https://github.com/SamChou19815))\\n- [#2545](https://github.com/facebook/docusaurus/pull/2545) docs(v2): add community pages ([@yangshun](https://github.com/yangshun))\\n- [#2521](https://github.com/facebook/docusaurus/pull/2521) docs(v2): useThemeContext hook ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus-types`, `docusaurus`\\n - [#2578](https://github.com/facebook/docusaurus/pull/2578) refactor(v2): Convert docusaurus-core to TypeScript ([@SamChou19815](https://github.com/SamChou19815))\\n- Other\\n - [#2569](https://github.com/facebook/docusaurus/pull/2569) docs(v2): showcase user Tourmaline ([@watzon](https://github.com/watzon))\\n - [#2553](https://github.com/facebook/docusaurus/pull/2553) misc(v2): remove deprecated/useless lerna field ([@slorber](https://github.com/slorber))\\n- `docusaurus-1.x`, `lqip-loader`\\n - [#2563](https://github.com/facebook/docusaurus/pull/2563) chore(v2): fix lint, tweak lqip-loader utils comment ([@Simek](https://github.com/Simek))\\n- `lqip-loader`\\n - [#2561](https://github.com/facebook/docusaurus/pull/2561) chore(v2): add lqip-loader tests, clarify loader code, improve README ([@Simek](https://github.com/Simek))\\n- `docusaurus-plugin-ideal-image`, `lqip-loader`\\n - [#2544](https://github.com/facebook/docusaurus/pull/2544) refactor(v2): import lqip-loader to monorepo, fix build on Node 13, fix lint-staged ([@Simek](https://github.com/Simek))\\n- `docusaurus-init`\\n - [#2542](https://github.com/facebook/docusaurus/pull/2542) chore(v2): update Prettier config ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus-plugin-ideal-image`, `docusaurus-plugin-sitemap`, `docusaurus-preset-classic`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`, `stylelint-copyright`\\n - [#2538](https://github.com/facebook/docusaurus/pull/2538) chore(v2): upgrade devDependencies ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-utils`\\n - [#2536](https://github.com/facebook/docusaurus/pull/2536) refactor(v2): replace Lodash with single methods packages in utils ([@Simek](https://github.com/Simek))\\n- `docusaurus`\\n - [#2535](https://github.com/facebook/docusaurus/pull/2535) refactor(v2): replace Lodash with single methods packages in core ([@Simek](https://github.com/Simek))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Anayo Oleru ([@AnayoOleru](https://github.com/AnayoOleru))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Chris Watson ([@watzon](https://github.com/watzon))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Jay Lees ([@jaylees14](https://github.com/jaylees14))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Jos\xe9 Renan ([@JoseRenan](https://github.com/JoseRenan))\\n- Kamil Kisiela ([@kamilkisiela](https://github.com/kamilkisiela))\\n- Krist\xf3f Poduszl\xf3 ([@kripod](https://github.com/kripod))\\n- Mehmet Yatk\u0131 ([@yatki](https://github.com/yatki))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Reece Dunham ([@RDIL](https://github.com/RDIL))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Tom Brien ([@TomBrien](https://github.com/TomBrien))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.50","metadata":{"permalink":"/changelog/2.0.0-alpha.50","source":"@site/changelog/source/2.0.0-alpha.50.md","title":"2.0.0-alpha.50","description":"HOTFIX for 2.0.0-alpha.49.","date":"2020-04-02T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Can Gencer","alias":"cangencer","url":"https://github.com/cangencer","imageURL":"https://github.com/cangencer.png","key":"cangencer"},{"name":"Richard Chan","alias":"iWun","url":"https://github.com/iWun","imageURL":"https://github.com/iWun.png","key":"iWun"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-02T20:00","authors":["cangencer","iWun","lex111","SamChou19815","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51"},"nextItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.49**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2509](https://github.com/facebook/docusaurus/pull/2509) fix(v2): synchronize code block components changes ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2498](https://github.com/facebook/docusaurus/pull/2498) fix(v2): blog item styling ([@yangshun](https://github.com/yangshun))\\n - [#2489](https://github.com/facebook/docusaurus/pull/2489) fix(v2): fix HTML issues nav dropdown and highlight docs item ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2496](https://github.com/facebook/docusaurus/pull/2496) fix(v2): do not force terminate building when running deploy command ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2497](https://github.com/facebook/docusaurus/pull/2497) fix(v2): unbreak blog-only mode routing by deplicating starting forward slashes ([@SamChou19815](https://github.com/SamChou19815))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2505](https://github.com/facebook/docusaurus/pull/2505) fix(v2): tweak colors for announcement bar ([@yangshun](https://github.com/yangshun))\\n - [#2504](https://github.com/facebook/docusaurus/pull/2504) refactor(v2): improve announcement bar ([@lex111](https://github.com/lex111))\\n - [#2495](https://github.com/facebook/docusaurus/pull/2495) refactor(v2): update HTML markup of pagination for better a11y ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2502](https://github.com/facebook/docusaurus/pull/2502) fix(v2): make code block nicer ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2490](https://github.com/facebook/docusaurus/pull/2490) fix(v2): use lodash instead of array-map-polyfill ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- `docusaurus-theme-classic`\\n - [#2500](https://github.com/facebook/docusaurus/pull/2500) docs(v2): misc docs updates ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- [#2486](https://github.com/facebook/docusaurus/pull/2486) misc: add instructions about test release ([@lex111](https://github.com/lex111))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Can Gencer ([@cangencer](https://github.com/cangencer))\\n- Richard Chan ([@iWun](https://github.com/iWun))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.49","metadata":{"permalink":"/changelog/2.0.0-alpha.49","source":"@site/changelog/source/2.0.0-alpha.49.md","title":"2.0.0-alpha.49","description":"New Feature","date":"2020-04-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"38elements","alias":"38elements","url":"https://github.com/38elements","imageURL":"https://github.com/38elements.png","key":"38elements"},{"name":"R\xe9mi Doreau","alias":"ayshiff","url":"https://github.com/ayshiff","imageURL":"https://github.com/ayshiff.png","key":"ayshiff"},{"name":"bravo-kernel","alias":"bravo-kernel","url":"https://github.com/bravo-kernel","imageURL":"https://github.com/bravo-kernel.png","key":"bravo-kernel"},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott"},{"name":"Favour Kelvin","alias":"fakela","url":"https://github.com/fakela","imageURL":"https://github.com/fakela.png","key":"fakela"},{"name":"Fanny","alias":"fanny","url":"https://github.com/fanny","imageURL":"https://github.com/fanny.png","key":"fanny"},{"name":"GermaVinsmoke","alias":"GermaVinsmoke","url":"https://github.com/GermaVinsmoke","imageURL":"https://github.com/GermaVinsmoke.png","key":"GermaVinsmoke"},{"name":"iamkun","alias":"iamkun","url":"https://github.com/iamkun","imageURL":"https://github.com/iamkun.png","key":"iamkun"},{"name":"Jefferson Licet","alias":"jeffersonlicet","url":"https://github.com/jeffersonlicet","imageURL":"https://github.com/jeffersonlicet.png","key":"jeffersonlicet"},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Luke Collier","alias":"lukecollier","url":"https://github.com/lukecollier","imageURL":"https://github.com/lukecollier.png","key":"lukecollier"},{"name":"mohrash92","alias":"mohrash92","url":"https://github.com/mohrash92","imageURL":"https://github.com/mohrash92.png","key":"mohrash92"},{"name":"Ben Gubler","alias":"nebrelbug","url":"https://github.com/nebrelbug","imageURL":"https://github.com/nebrelbug.png","key":"nebrelbug"},{"name":"Nisar Hassan Naqvi","alias":"nisarhassan12","url":"https://github.com/nisarhassan12","imageURL":"https://github.com/nisarhassan12.png","key":"nisarhassan12"},{"name":"Paul Armstrong","alias":"paularmstrong","url":"https://github.com/paularmstrong","imageURL":"https://github.com/paularmstrong.png","key":"paularmstrong"},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe"},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana"},{"name":"Sam Zhou","alias":"SamChou19815","url":"https://github.com/SamChou19815","imageURL":"https://github.com/SamChou19815.png","key":"SamChou19815"},{"name":"Bartosz Kaszubowski","alias":"Simek","url":"https://github.com/Simek","imageURL":"https://github.com/Simek.png","key":"Simek"},{"name":"S\xe9bastien Lorber","alias":"slorber","url":"https://github.com/slorber","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"ZachJW34","alias":"ZachJW34","url":"https://github.com/ZachJW34","imageURL":"https://github.com/ZachJW34.png","key":"ZachJW34"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-04-01T20:00","authors":["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50"},"nextItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2487](https://github.com/facebook/docusaurus/pull/2487) feat(v2): nav dropdown ([@yangshun](https://github.com/yangshun))\\n - [#2456](https://github.com/facebook/docusaurus/pull/2456) feat(v2): support comments for code highlighting ([@elviswolcott](https://github.com/elviswolcott))\\n - [#2330](https://github.com/facebook/docusaurus/pull/2330) feat(v2): add announcement bar ([@lex111](https://github.com/lex111))\\n - [#2440](https://github.com/facebook/docusaurus/pull/2440) feat(v2): make clickable sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2366](https://github.com/facebook/docusaurus/pull/2366) feat(v2): support syncing tab choices ([@SamChou19815](https://github.com/SamChou19815))\\n- `docusaurus`\\n - [#2323](https://github.com/facebook/docusaurus/pull/2323) feat(v2): add a way to exclude components from build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2469](https://github.com/facebook/docusaurus/pull/2469) feat(v2): add TypeScript support for theme components ([@SamChou19815](https://github.com/SamChou19815))\\n - [#2455](https://github.com/facebook/docusaurus/pull/2455) feat(v2): add @theme-original alias to give access to pre-swizzled components ([@yangshun](https://github.com/yangshun))\\n - [#2438](https://github.com/facebook/docusaurus/pull/2438) feat(v2): add version to page\'s generated meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-types`, `docusaurus`\\n - [#2474](https://github.com/facebook/docusaurus/pull/2474) feat(v2): add ability to create unminimized bundles ([@lex111](https://github.com/lex111))\\n - [#2417](https://github.com/facebook/docusaurus/pull/2417) feat(v2): allow custom output directory for build ([@ZachJW34](https://github.com/ZachJW34))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2346](https://github.com/facebook/docusaurus/pull/2346) feat(v2): add filename in CodeBlock ([@KohheePeace](https://github.com/KohheePeace))\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2444](https://github.com/facebook/docusaurus/pull/2444) feat(v2): allow nested sidebar category shorthand syntax ([@slorber](https://github.com/slorber))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2483](https://github.com/facebook/docusaurus/pull/2483) fix(v2): do not render sidebar logo if used sticky navbar ([@lex111](https://github.com/lex111))\\n - [#2475](https://github.com/facebook/docusaurus/pull/2475) fix(v2): make correct Open Graph title for doc page ([@lex111](https://github.com/lex111))\\n - [#2436](https://github.com/facebook/docusaurus/pull/2436) fix(v2): update twitter:card to summary_large_image ([@lex111](https://github.com/lex111))\\n - [#2434](https://github.com/facebook/docusaurus/pull/2434) fix(v2): add support dark logo for sidebar logo ([@lex111](https://github.com/lex111))\\n - [#2420](https://github.com/facebook/docusaurus/pull/2420) fix(v2): fix external URL for og:image tag ([@38elements](https://github.com/38elements))\\n- `docusaurus-theme-live-codeblock`\\n - [#2480](https://github.com/facebook/docusaurus/pull/2480) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#2479](https://github.com/facebook/docusaurus/pull/2479) chore(v2): upgrade MDX to 1.5.8 ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2476](https://github.com/facebook/docusaurus/pull/2476) fix(v2): improve code block scroll accessibility ([@lex111](https://github.com/lex111))\\n - [#2442](https://github.com/facebook/docusaurus/pull/2442) fix(v2): various improvements for accessibility ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2477](https://github.com/facebook/docusaurus/pull/2477) chore(v2): upgrade remark-admonitions for a11y fixes ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2462](https://github.com/facebook/docusaurus/pull/2462) fix(v2): do not force terminate building when bundle analyzer is on ([@lex111](https://github.com/lex111))\\n - [#2393](https://github.com/facebook/docusaurus/pull/2393) fix(v2): normalize location for route matching ([@rlamana](https://github.com/rlamana))\\n - [#2443](https://github.com/facebook/docusaurus/pull/2443) fix(v2): always exit after successful build ([@mohrash92](https://github.com/mohrash92))\\n - [#2437](https://github.com/facebook/docusaurus/pull/2437) fix(v2): do not force terminate building if client bundle failed in development mode ([@lex111](https://github.com/lex111))\\n - [#2424](https://github.com/facebook/docusaurus/pull/2424) fix(v2): make correct internal link check ([@lex111](https://github.com/lex111))\\n- `docusaurus-preset-classic`\\n - [#2451](https://github.com/facebook/docusaurus/pull/2451) fix(v2): pass options to remark-admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-mdx-loader`\\n - [#2426](https://github.com/facebook/docusaurus/pull/2426) fix(v2): remove HTML from heading slug ([@lex111](https://github.com/lex111))\\n- `docusaurus-utils`\\n - [#2405](https://github.com/facebook/docusaurus/pull/2405) fix(v2): properly dedupe forward slashes in the entire URL path ([@rlamana](https://github.com/rlamana))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2485](https://github.com/facebook/docusaurus/pull/2485) refactor(v2): remove unnecessary X-UA-Compatible meta tag ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2460](https://github.com/facebook/docusaurus/pull/2460) refactor(v2): use single method package instead of whole Lodash package in blog plugin ([@Simek](https://github.com/Simek))\\n- Other\\n - [#2428](https://github.com/facebook/docusaurus/pull/2428) polish(v2): use npm-to-yarn for the npm2yarn remark plugin ([@nebrelbug](https://github.com/nebrelbug))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2478](https://github.com/facebook/docusaurus/pull/2478) docs(v2): mark that in dev server some features may not work ([@lex111](https://github.com/lex111))\\n - [#2472](https://github.com/facebook/docusaurus/pull/2472) docs(v2): fix typo in deployment docs ([@GermaVinsmoke](https://github.com/GermaVinsmoke))\\n - [#2423](https://github.com/facebook/docusaurus/pull/2423) docs(v2): add Sass/SCSS under the styling section ([@rlamana](https://github.com/rlamana))\\n - [#2446](https://github.com/facebook/docusaurus/pull/2446) docs(v2): add docusaurus-plugin-sass to community plugins ([@rlamana](https://github.com/rlamana))\\n - [#2408](https://github.com/facebook/docusaurus/pull/2408) docs(v2): suggest Surge for quick deployment ([@fakela](https://github.com/fakela))\\n - [#2401](https://github.com/facebook/docusaurus/pull/2401) docs(v2): add resources page ([@yangshun](https://github.com/yangshun))\\n - [#2413](https://github.com/facebook/docusaurus/pull/2413) docs(v2): include appId key for Algolia ([@TheodoreChu](https://github.com/TheodoreChu))\\n - [#2411](https://github.com/facebook/docusaurus/pull/2411) docs:(v2): add Netlify configuration warning ([@bravo-kernel](https://github.com/bravo-kernel))\\n - [#2397](https://github.com/facebook/docusaurus/pull/2397) docs(v2):update alpha version to current version ([@fakela](https://github.com/fakela))\\n - [#2395](https://github.com/facebook/docusaurus/pull/2395) docs(v2): clarify instructions on docs-only mode ([@phoqe](https://github.com/phoqe))\\n- `docusaurus-init`\\n - [#2458](https://github.com/facebook/docusaurus/pull/2458) fix(v2): expand broken admonitions ([@elviswolcott](https://github.com/elviswolcott))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2461](https://github.com/facebook/docusaurus/pull/2461) chore(v2): upgrade react-dev-utils ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2450](https://github.com/facebook/docusaurus/pull/2450) docs(v2): Adding Motion Layout to Docusaurus users ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n - [#2439](https://github.com/facebook/docusaurus/pull/2439) polish(v2): add logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2435](https://github.com/facebook/docusaurus/pull/2435) fix(v2): fix aspect ratio for Open Graph image ([@lex111](https://github.com/lex111))\\n - [#2433](https://github.com/facebook/docusaurus/pull/2433) chore(v2): ignore JetBrains editors .iml files ([@slorber](https://github.com/slorber))\\n - [#2416](https://github.com/facebook/docusaurus/pull/2416) docs(v2): Add Build Tracker to Showcase page ([@paularmstrong](https://github.com/paularmstrong))\\n - [#2388](https://github.com/facebook/docusaurus/pull/2388) docs(v1): showcase user Day.js ([@iamkun](https://github.com/iamkun))\\n- `stylelint-copyright`\\n - [#2415](https://github.com/facebook/docusaurus/pull/2415) misc: improve stylelint rule ([@ayshiff](https://github.com/ayshiff))\\n\\n## Committers: 24\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Bartosz Kaszubowski ([@Simek](https://github.com/Simek))\\n- Ben Gubler ([@nebrelbug](https://github.com/nebrelbug))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Fanny ([@fanny](https://github.com/fanny))\\n- Favour Kelvin ([@fakela](https://github.com/fakela))\\n- Jefferson Licet ([@jeffersonlicet](https://github.com/jeffersonlicet))\\n- Kohhee Peace ([@KohheePeace](https://github.com/KohheePeace))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Luke Collier ([@lukecollier](https://github.com/lukecollier))\\n- Nisar Hassan Naqvi ([@nisarhassan12](https://github.com/nisarhassan12))\\n- Paul Armstrong ([@paularmstrong](https://github.com/paularmstrong))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- R\xe9mi Doreau ([@ayshiff](https://github.com/ayshiff))\\n- Sam Zhou ([@SamChou19815](https://github.com/SamChou19815))\\n- S\xe9bastien Lorber ([@slorber](https://github.com/slorber))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- [@38elements](https://github.com/38elements)\\n- [@GermaVinsmoke](https://github.com/GermaVinsmoke)\\n- [@ZachJW34](https://github.com/ZachJW34)\\n- [@bravo-kernel](https://github.com/bravo-kernel)\\n- [@iamkun](https://github.com/iamkun)\\n- [@mohrash92](https://github.com/mohrash92)"},{"id":"/2.0.0-alpha.48","metadata":{"permalink":"/changelog/2.0.0-alpha.48","source":"@site/changelog/source/2.0.0-alpha.48.md","title":"2.0.0-alpha.48","description":"HOTFIX for 2.0.0-alpha.44.","date":"2020-03-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T20:00","authors":["lex111"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49"},"nextItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.44**.\\n\\n## :bug: Bug Fix\\n\\n- Other\\n - [#2383](https://github.com/facebook/docusaurus/pull/2383) fix(v2): specify proper version for stylelint-copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2382](https://github.com/facebook/docusaurus/pull/2382) fix(v2): add missing preset-typescript dependency ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2386](https://github.com/facebook/docusaurus/pull/2386) fix(v2): add missing prismjs dependency and Noop component ([@lex111](https://github.com/lex111))\\n\\n## Committers: 1\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))"},{"id":"/2.0.0-alpha.44","metadata":{"permalink":"/changelog/2.0.0-alpha.44","source":"@site/changelog/source/2.0.0-alpha.44.md","title":"2.0.0-alpha.44","description":"New Feature","date":"2020-03-08T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Amila Welihinda","alias":"amilajack","url":"https://github.com/amilajack","imageURL":"https://github.com/amilajack.png","key":"amilajack"},{"name":"Paulus Schoutsen","alias":"balloob","url":"https://github.com/balloob","imageURL":"https://github.com/balloob.png","key":"balloob"},{"name":"Robert","alias":"deniaz","url":"https://github.com/deniaz","imageURL":"https://github.com/deniaz.png","key":"deniaz"},{"name":"Hassan Farid","alias":"hassanfarid","url":"https://github.com/hassanfarid","imageURL":"https://github.com/hassanfarid.png","key":"hassanfarid"},{"name":"jartuso","alias":"jartuso","url":"https://github.com/jartuso","imageURL":"https://github.com/jartuso.png","key":"jartuso"},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Mohamed Abdel Nasser","alias":"mohamedsgap","url":"https://github.com/mohamedsgap","imageURL":"https://github.com/mohamedsgap.png","key":"mohamedsgap"},{"name":"Noah Silvera","alias":"Noah-Silvera","url":"https://github.com/Noah-Silvera","imageURL":"https://github.com/Noah-Silvera.png","key":"Noah-Silvera"},{"name":"Linus L\xe5ngberg","alias":"phoqe","url":"https://github.com/phoqe","imageURL":"https://github.com/phoqe.png","key":"phoqe"},{"name":"Ram\xf3n Lamana","alias":"rlamana","url":"https://github.com/rlamana","imageURL":"https://github.com/rlamana.png","key":"rlamana"},{"name":"Sylvain Pace","alias":"s-pace","url":"https://github.com/s-pace","imageURL":"https://github.com/s-pace.png","key":"s-pace"},{"name":"Scott Lee","alias":"scottilee","url":"https://github.com/scottilee","imageURL":"https://github.com/scottilee.png","key":"scottilee"},{"name":"Theodore Chu","alias":"TheodoreChu","url":"https://github.com/TheodoreChu","imageURL":"https://github.com/TheodoreChu.png","key":"TheodoreChu"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Zhenchao Cai","alias":"Zhencha0Cai","url":"https://github.com/Zhencha0Cai","imageURL":"https://github.com/Zhencha0Cai.png","key":"Zhencha0Cai"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-03-08T19:00","authors":["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48"},"nextItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2250](https://github.com/facebook/docusaurus/pull/2250) feat(v2): add support specify new languages for Prism ([@lex111](https://github.com/lex111))\\n - [#2344](https://github.com/facebook/docusaurus/pull/2344) feat(v2): allow specifying custom target for logo link ([@lex111](https://github.com/lex111))\\n - [#2327](https://github.com/facebook/docusaurus/pull/2327) feat(v2): add ability to use HTML in footer copyright ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2335](https://github.com/facebook/docusaurus/pull/2335) feat(v2): add draft feature to blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `docusaurus-theme-classic`\\n - [#2303](https://github.com/facebook/docusaurus/pull/2303) docs(v2): Nav links activeBasePath ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`, `docusaurus`\\n - [#2296](https://github.com/facebook/docusaurus/pull/2296) feat(v2): add ExecutionEnvironment API ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2345](https://github.com/facebook/docusaurus/pull/2345) fix(v2): force terminate building if client bundle failed ([@lex111](https://github.com/lex111))\\n - [#2310](https://github.com/facebook/docusaurus/pull/2310) fix(v2): add @babel/preset-typescript to babel-loader ([@deniaz](https://github.com/deniaz))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2371](https://github.com/facebook/docusaurus/pull/2371) fix(v2): remove line break from end of code blocks ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#2326](https://github.com/facebook/docusaurus/pull/2326) fix(v2): linkify blog posts ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2324](https://github.com/facebook/docusaurus/pull/2324) fix(v2): properly set dark mode logo on build-time prerendering ([@lex111](https://github.com/lex111))\\n - [#2325](https://github.com/facebook/docusaurus/pull/2325) fix(v2): switch a toggle when system theme changed ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`\\n - [#2334](https://github.com/facebook/docusaurus/pull/2334) fix(v2): make proper path to pages in TS ([@lex111](https://github.com/lex111))\\n- Other\\n - [#2316](https://github.com/facebook/docusaurus/pull/2316) fix(v2): properly scale logo on IE 11 ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2376](https://github.com/facebook/docusaurus/pull/2376) refactor(v2): clean up and improve Algolia styles ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`\\n - [#2372](https://github.com/facebook/docusaurus/pull/2372) chore(v2): upgrade Infima and remark-admonitions ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2367](https://github.com/facebook/docusaurus/pull/2367) refactor(v2): increase CSS specificity on application container ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`, `stylelint-copyright`\\n - [#2363](https://github.com/facebook/docusaurus/pull/2363) fix(v2): improve stylelint copyright header rule ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-types`, `docusaurus`\\n - [#2342](https://github.com/facebook/docusaurus/pull/2342) chore(v2): mark tagline field as optional ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2378](https://github.com/facebook/docusaurus/pull/2378) docs(v2): add section for docs-only mode ([@phoqe](https://github.com/phoqe))\\n- [#2357](https://github.com/facebook/docusaurus/pull/2357) docs(v2): fix getPathsToWatch() example syntax in lifecycle APIs ([@rlamana](https://github.com/rlamana))\\n- [#2351](https://github.com/facebook/docusaurus/pull/2351) docs(v2): add examples to plugin usage doc ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- [#2343](https://github.com/facebook/docusaurus/pull/2343) docs(v2): fix typo in remark-admonitions example ([@hassanfarid](https://github.com/hassanfarid))\\n- [#2340](https://github.com/facebook/docusaurus/pull/2340) docs(v2): mention about disabling Jekyll when using GitHub pages ([@amilajack](https://github.com/amilajack))\\n- [#2338](https://github.com/facebook/docusaurus/pull/2338) docs(v2): guide on upgrading Docusaurus within a project ([@TheodoreChu](https://github.com/TheodoreChu))\\n- [#2313](https://github.com/facebook/docusaurus/pull/2313) docs(v2): move the quotes to remark admonitions ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [#2307](https://github.com/facebook/docusaurus/pull/2307) docs(v1): fix Windows instructions for GitHub Pages publishing ([@jartuso](https://github.com/jartuso))\\n- [#2300](https://github.com/facebook/docusaurus/pull/2300) docs(v2): make blog plugin config example valid ([@balloob](https://github.com/balloob))\\n- [#2289](https://github.com/facebook/docusaurus/pull/2289) docs(v2): add instructions on Travis CI deployment ([@mohamedsgap](https://github.com/mohamedsgap))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2369](https://github.com/facebook/docusaurus/pull/2369) misc: mention about v2 in README file ([@lex111](https://github.com/lex111))\\n - [#2368](https://github.com/facebook/docusaurus/pull/2368) misc: add note about edits in versioned docs ([@lex111](https://github.com/lex111))\\n - [#2333](https://github.com/facebook/docusaurus/pull/2333) docs: update use of npm/yarn in contributing.md ([@jsjoeio](https://github.com/jsjoeio))\\n - [#2328](https://github.com/facebook/docusaurus/pull/2328) docs(v2): remove unwanted black line from DocSearch showcase image ([@s-pace](https://github.com/s-pace))\\n - [#2319](https://github.com/facebook/docusaurus/pull/2319) docs(v2): showcase user Algolia ([@scottilee](https://github.com/scottilee))\\n- `docusaurus-init`\\n - [#2322](https://github.com/facebook/docusaurus/pull/2322) docs(v2): fix misc styling ([@lex111](https://github.com/lex111))\\n\\n## Committers: 16\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Amila Welihinda ([@amilajack](https://github.com/amilajack))\\n- Hassan Farid ([@hassanfarid](https://github.com/hassanfarid))\\n- Joe Previte ([@jsjoeio](https://github.com/jsjoeio))\\n- Linus L\xe5ngberg ([@phoqe](https://github.com/phoqe))\\n- Mohamed Abdel Nasser ([@mohamedsgap](https://github.com/mohamedsgap))\\n- Noah Silvera ([@Noah-Silvera](https://github.com/Noah-Silvera))\\n- Paulus Schoutsen ([@balloob](https://github.com/balloob))\\n- Ram\xf3n Lamana ([@rlamana](https://github.com/rlamana))\\n- Robert ([@deniaz](https://github.com/deniaz))\\n- Scott Lee ([@scottilee](https://github.com/scottilee))\\n- Sylvain Pace ([@s-pace](https://github.com/s-pace))\\n- Theodore Chu ([@TheodoreChu](https://github.com/TheodoreChu))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- Zhenchao Cai ([@Zhencha0Cai](https://github.com/Zhencha0Cai))\\n- [@jartuso](https://github.com/jartuso)"},{"id":"/2.0.0-alpha.43","metadata":{"permalink":"/changelog/2.0.0-alpha.43","source":"@site/changelog/source/2.0.0-alpha.43.md","title":"2.0.0-alpha.43","description":"HOTFIX for 2.0.0-alpha.41.","date":"2020-02-18T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-18T20:00","authors":["lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44"},"nextItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.41**.\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#2292](https://github.com/facebook/docusaurus/pull/2292) chore(v2): update Infima to 0.2.0-alpha.4 ([@yangshun](https://github.com/yangshun))\\n - [#2291](https://github.com/facebook/docusaurus/pull/2291) fix(v2): fix build and deps install ([@lex111](https://github.com/lex111))\\n\\n## Committers: 2\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.41","metadata":{"permalink":"/changelog/2.0.0-alpha.41","source":"@site/changelog/source/2.0.0-alpha.41.md","title":"2.0.0-alpha.41","description":"New Feature","date":"2020-02-16T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"awalias","alias":"awalias","url":"https://github.com/awalias","imageURL":"https://github.com/awalias.png","key":"awalias"},{"name":"Elie Dutheil","alias":"edwandr","url":"https://github.com/edwandr","imageURL":"https://github.com/edwandr.png","key":"edwandr"},{"name":"Elvis Wolcott","alias":"elviswolcott","url":"https://github.com/elviswolcott","imageURL":"https://github.com/elviswolcott.png","key":"elviswolcott"},{"name":"Evan Rubinton","alias":"erubi","url":"https://github.com/erubi","imageURL":"https://github.com/erubi.png","key":"erubi"},{"name":"Gal Havivi","alias":"galhavivi","url":"https://github.com/galhavivi","imageURL":"https://github.com/galhavivi.png","key":"galhavivi"},{"name":"Hendrik Bulens","alias":"hbulens","url":"https://github.com/hbulens","imageURL":"https://github.com/hbulens.png","key":"hbulens"},{"name":"Ashley Jeffs","alias":"Jeffail","url":"https://github.com/Jeffail","imageURL":"https://github.com/Jeffail.png","key":"Jeffail"},{"name":"Joshua Williams","alias":"jjwill","url":"https://github.com/jjwill","imageURL":"https://github.com/jjwill.png","key":"jjwill"},{"name":"Joel Marcey","alias":"JoelMarcey","url":"https://github.com/JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JoelMarcey"},{"name":"Jonathan Delgado","alias":"jonathanrdelgado","url":"https://github.com/jonathanrdelgado","imageURL":"https://github.com/jonathanrdelgado.png","key":"jonathanrdelgado"},{"name":"JavaScript Joe","alias":"jsjoeio","url":"https://github.com/jsjoeio","imageURL":"https://github.com/jsjoeio.png","key":"jsjoeio"},{"name":"KohheePeace","alias":"KohheePeace","url":"https://github.com/KohheePeace","imageURL":"https://github.com/KohheePeace.png","key":"KohheePeace"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Mark Terrel","alias":"mterrel","url":"https://github.com/mterrel","imageURL":"https://github.com/mterrel.png","key":"mterrel"},{"name":"Ond\u0159ej Nepo\u017eitek","alias":"OndrejNepozitek","url":"https://github.com/OndrejNepozitek","imageURL":"https://github.com/OndrejNepozitek.png","key":"OndrejNepozitek"},{"name":"Scott Dowding","alias":"sdowding","url":"https://github.com/sdowding","imageURL":"https://github.com/sdowding.png","key":"sdowding"},{"name":"Hanseung Yoo","alias":"trustyoo86","url":"https://github.com/trustyoo86","imageURL":"https://github.com/trustyoo86.png","key":"trustyoo86"},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19"}],"frontMatter":{"mdx":{"format":"md"},"date":"2020-02-16T20:00","authors":["awalias","edwandr","elviswolcott","erubi","galhavivi","hbulens","Jeffail","jjwill","JoelMarcey","jonathanrdelgado","jsjoeio","KohheePeace","lex111","mterrel","OndrejNepozitek","sdowding","trustyoo86","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43"},"nextItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-init`, `docusaurus-preset-classic`, `docusaurus-theme-classic`\\n - [#2224](https://github.com/facebook/docusaurus/pull/2224) feat(v2): add remark-admonitions to @docusaurus/preset-classic ([@elviswolcott](https://github.com/elviswolcott))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2263](https://github.com/facebook/docusaurus/pull/2263) feat(v2): pluralize posts on tag\'s page ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2261](https://github.com/facebook/docusaurus/pull/2261) feat(v2): allow to specify different logo for dark mode ([@lex111](https://github.com/lex111))\\n - [#2253](https://github.com/facebook/docusaurus/pull/2253) feat(v2): allow specify custom link for logo ([@lex111](https://github.com/lex111))\\n - [#2255](https://github.com/facebook/docusaurus/pull/2255) feat(v2): add site title to meta title ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-pages`, `docusaurus-utils`, `docusaurus`\\n - [#2221](https://github.com/facebook/docusaurus/pull/2221) feat(v2): allow for TypeScript pages and components ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-theme-classic`\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2285](https://github.com/facebook/docusaurus/pull/2285) fix(v2): fix codeblock copy button not including blank lines ([@KohheePeace](https://github.com/KohheePeace))\\n - [#2241](https://github.com/facebook/docusaurus/pull/2241) fix(v2): make code blocks scrollable ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#2259](https://github.com/facebook/docusaurus/pull/2259) fix(v2): use site title if enabled blog-only mode ([@lex111](https://github.com/lex111))\\n - [#2248](https://github.com/facebook/docusaurus/pull/2248) fix(v2): adjust correct behavior of navbar when active anchor ([@lex111](https://github.com/lex111))\\n - [#2235](https://github.com/facebook/docusaurus/pull/2235) fix(v2): show doc sidebar on pages with case-sensitive paths ([@lex111](https://github.com/lex111))\\n - [#2162](https://github.com/facebook/docusaurus/pull/2162) fix(v2): unify anchor behavior ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-search-algolia`\\n - [#2262](https://github.com/facebook/docusaurus/pull/2262) fix(v2): remove focus on search input when hovering over it ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#2240](https://github.com/facebook/docusaurus/pull/2240) fix(v2): hide read more button on non-truncated posts ([@lex111](https://github.com/lex111))\\n- `docusaurus`\\n - [#2237](https://github.com/facebook/docusaurus/pull/2237) fix(v2): include base url in 404 route ([@lex111](https://github.com/lex111))\\n- `docusaurus-mdx-loader`\\n - [#2236](https://github.com/facebook/docusaurus/pull/2236) fix(v2): escape link text in TOC ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-live-codeblock`\\n - [#2227](https://github.com/facebook/docusaurus/pull/2227) fix(v2): render correct theme for live code blocks on SSR ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2254](https://github.com/facebook/docusaurus/pull/2254) refactor(v2): avoid to use raw theme values ([@lex111](https://github.com/lex111))\\n\\n## :memo: Documentation\\n\\n- [#2281](https://github.com/facebook/docusaurus/pull/2281) docs: update windows deploy command ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- [#2257](https://github.com/facebook/docusaurus/pull/2257) docs(v2): require using JSX flavored style objects in mdx ([@wgao19](https://github.com/wgao19))\\n- [#2251](https://github.com/facebook/docusaurus/pull/2251) docs(v2): collapsible categories in sidebar ([@lex111](https://github.com/lex111))\\n- [#2218](https://github.com/facebook/docusaurus/pull/2218) docs(v2): update link to available prism themes ([@jsjoeio](https://github.com/jsjoeio))\\n- [#2216](https://github.com/facebook/docusaurus/pull/2216) docs(v2): fix plugin-content-docs config comment typo ([@sdowding](https://github.com/sdowding))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2256](https://github.com/facebook/docusaurus/pull/2256) fix(v2): add title for Feedback page ([@lex111](https://github.com/lex111))\\n - [#2246](https://github.com/facebook/docusaurus/pull/2246) docs(v2): add Benthos to showcase ([@Jeffail](https://github.com/Jeffail))\\n - [#2242](https://github.com/facebook/docusaurus/pull/2242) docs(v1): showcase user Jafar ([@galhavivi](https://github.com/galhavivi))\\n - [#2238](https://github.com/facebook/docusaurus/pull/2238) docs(v1): showcase Dime ([@hbulens](https://github.com/hbulens))\\n - [#2233](https://github.com/facebook/docusaurus/pull/2233) docs(v2): showcase user supabase ([@awalias](https://github.com/awalias))\\n - [#2226](https://github.com/facebook/docusaurus/pull/2226) docs(v1): showcase user Adapt.js ([@mterrel](https://github.com/mterrel))\\n - [#2225](https://github.com/facebook/docusaurus/pull/2225) docs(v1): add The Diff Podcast to users ([@JoelMarcey](https://github.com/JoelMarcey))\\n - [#2219](https://github.com/facebook/docusaurus/pull/2219) chore(v1): Updated users list, removing sites not using docusaurus ([@jjwill](https://github.com/jjwill))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2239](https://github.com/facebook/docusaurus/pull/2239) chore(eslint): require curly brackets on all blocks ([@lex111](https://github.com/lex111))\\n\\n## Committers: 18\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Ashley Jeffs ([@Jeffail](https://github.com/Jeffail))\\n- Elie Dutheil ([@edwandr](https://github.com/edwandr))\\n- Elvis Wolcott ([@elviswolcott](https://github.com/elviswolcott))\\n- Evan Rubinton ([@erubi](https://github.com/erubi))\\n- Gal Havivi ([@galhavivi](https://github.com/galhavivi))\\n- Hanseung Yoo ([@trustyoo86](https://github.com/trustyoo86))\\n- Hendrik Bulens ([@hbulens](https://github.com/hbulens))\\n- JavaScript Joe ([@jsjoeio](https://github.com/jsjoeio))\\n- Joel Marcey ([@JoelMarcey](https://github.com/JoelMarcey))\\n- Jonathan Delgado ([@jonathanrdelgado](https://github.com/jonathanrdelgado))\\n- Joshua Williams ([@jjwill](https://github.com/jjwill))\\n- KohheePeace ([@KohheePeace](https://github.com/KohheePeace))\\n- Mark Terrel ([@mterrel](https://github.com/mterrel))\\n- Ond\u0159ej Nepo\u017eitek ([@OndrejNepozitek](https://github.com/OndrejNepozitek))\\n- Scott Dowding ([@sdowding](https://github.com/sdowding))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))\\n- [@awalias](https://github.com/awalias)"},{"id":"/2.0.0-alpha.40","metadata":{"permalink":"/changelog/2.0.0-alpha.40","source":"@site/changelog/source/2.0.0-alpha.40.md","title":"2.0.0-alpha.40","description":"New Feature","date":"2019-12-25T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"Janko Marohni\u0107","alias":"janko","url":"https://github.com/janko","imageURL":"https://github.com/janko.png","key":"janko"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Nick McCurdy","alias":"nickmccurdy","url":"https://github.com/nickmccurdy","imageURL":"https://github.com/nickmccurdy.png","key":"nickmccurdy"},{"name":"t11s","alias":"TransmissionsDev","url":"https://github.com/TransmissionsDev","imageURL":"https://github.com/TransmissionsDev.png","key":"TransmissionsDev"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-25T20:00","authors":["endiliey","janko","lex111","nickmccurdy","TransmissionsDev","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41"},"nextItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#2117](https://github.com/facebook/docusaurus/pull/2117) feat(v2): auto switch theme depending on the system theme ([@lex111](https://github.com/lex111))\\n - [#2055](https://github.com/facebook/docusaurus/pull/2055) feat(v2): hide navbar on scroll ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2145](https://github.com/facebook/docusaurus/pull/2145) fix(v2): remove style-loader, use minicssextract in both dev & prod ([@endiliey](https://github.com/endiliey))\\n - [#2122](https://github.com/facebook/docusaurus/pull/2122) fix(v2): dont collapse whitespace in minified html ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2105](https://github.com/facebook/docusaurus/pull/2105) fix(v2): move metadata export after compiling MDX to avoid weird MDX parsing error. ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2113](https://github.com/facebook/docusaurus/pull/2113) fix(v2): set stored theme only if it exists ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2129](https://github.com/facebook/docusaurus/pull/2129) fix(v2): disable scroll while mobile menu open ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2127](https://github.com/facebook/docusaurus/pull/2127) refactor(v2): toggle data-theme with vanilla js instead of react helmet ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`, `docusaurus`\\n - [#2125](https://github.com/facebook/docusaurus/pull/2125) feat(v2): lazy load algolia css so its not render blocking ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2135](https://github.com/facebook/docusaurus/pull/2135) docs(v1): add space between \\"out\\" and \\"Docusaurus\\" ([@TransmissionsDev](https://github.com/TransmissionsDev))\\n - [#2128](https://github.com/facebook/docusaurus/pull/2128) docs(v1): showcase user Shrine ([@janko](https://github.com/janko))\\n - [#2110](https://github.com/facebook/docusaurus/pull/2110) docs(v2): fix pages routing inaccurate info ([@endiliey](https://github.com/endiliey))\\n - [#2106](https://github.com/facebook/docusaurus/pull/2106) fix(v2): add missing hyphen in color generator ([@lex111](https://github.com/lex111))\\n - [#2104](https://github.com/facebook/docusaurus/pull/2104) feat(v2): add color generator for primary colors ([@yangshun](https://github.com/yangshun))\\n - [#2103](https://github.com/facebook/docusaurus/pull/2103) docs: mention about moving docs directory into website ([@yangshun](https://github.com/yangshun))\\n- `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`\\n - [#2114](https://github.com/facebook/docusaurus/pull/2114) fix(v2): add syntax highlight to generated colors ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2126](https://github.com/facebook/docusaurus/pull/2126) docs: promote Docusaurus 2 usage ([@yangshun](https://github.com/yangshun))\\n - [#2119](https://github.com/facebook/docusaurus/pull/2119) fix(v2): align GH button in vertical center ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#2124](https://github.com/facebook/docusaurus/pull/2124) feat(v2): add Facebook Docusaurus 2 template ([@yangshun](https://github.com/yangshun))\\n- `docusaurus`\\n - [#2111](https://github.com/facebook/docusaurus/pull/2111) feat(v2): explicit babel/runtime version ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-1.x`, `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-theme-live-codeblock`, `docusaurus`\\n - [#2102](https://github.com/facebook/docusaurus/pull/2102) misc: add command to run prettier on docs ([@yangshun](https://github.com/yangshun))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#2118](https://github.com/facebook/docusaurus/pull/2118) perf(v2): reduce HTML payload by eliminating chunk-map ([@endiliey](https://github.com/endiliey))\\n - [#2116](https://github.com/facebook/docusaurus/pull/2116) feat(v2): minify html ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Janko Marohni\u0107 ([@janko](https://github.com/janko))\\n- Nick McCurdy ([@nickmccurdy](https://github.com/nickmccurdy))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))\\n- t11s ([@TransmissionsDev](https://github.com/TransmissionsDev))"},{"id":"/2.0.0-alpha.39","metadata":{"permalink":"/changelog/2.0.0-alpha.39","source":"@site/changelog/source/2.0.0-alpha.39.md","title":"2.0.0-alpha.39","description":"Bug Fix","date":"2019-12-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-07T20:00","authors":["endiliey"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40"},"nextItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2099](https://github.com/facebook/docusaurus/pull/2099) fix(v2): escape import path on windows ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`\\n - [#2095](https://github.com/facebook/docusaurus/pull/2095) fix(v2): metadata error if markdown does not have ending line ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2100](https://github.com/facebook/docusaurus/pull/2100) chore(CI): docusaurus build on Windows with GitHub actions ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2096](https://github.com/facebook/docusaurus/pull/2096) feat(v2): better & nice looking error overlay ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 1\\n\\n- Endi ([@endiliey](https://github.com/endiliey))"},{"id":"/2.0.0-alpha.38","metadata":{"permalink":"/changelog/2.0.0-alpha.38","source":"@site/changelog/source/2.0.0-alpha.38.md","title":"2.0.0-alpha.38","description":"Breaking Change","date":"2019-12-06T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"KYY","alias":"FeynmanDNA","url":"https://github.com/FeynmanDNA","imageURL":"https://github.com/FeynmanDNA.png","key":"FeynmanDNA"},{"name":"kaichu","alias":"qshiwu","url":"https://github.com/qshiwu","imageURL":"https://github.com/qshiwu.png","key":"qshiwu"},{"name":"Shivangna Kaistha","alias":"shivangna","url":"https://github.com/shivangna","imageURL":"https://github.com/shivangna.png","key":"shivangna"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-06T20:00","authors":["endiliey","FeynmanDNA","qshiwu","shivangna"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39"},"nextItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-utils`\\n - [#2088](https://github.com/facebook/docusaurus/pull/2088) perf(v2): smaller bundlesize by embedding metadata to content ([@endiliey](https://github.com/endiliey))\\n\\nIf you have swizzled any Docs/Blog component that depends on metadata, you\'ll have to update. If you haven\'t, no action is needed.\\n\\nFor example, if you\'ve swizzled `@theme/DocItem`. You\'ll have to update\\n\\n```diff\\n- const {metadata, content: DocContent} = props;\\n+ const {content: DocContent} = props;\\n+ const {metadata} = DocContent;\\n```\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2086](https://github.com/facebook/docusaurus/pull/2086) fix(v2): windows compatibility regression ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-ideal-image`\\n - [#2074](https://github.com/facebook/docusaurus/pull/2074) fix(v2): fix plugin-ideal-image breaking website (exports not defined) ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-mdx-loader`\\n - [#2085](https://github.com/facebook/docusaurus/pull/2085) misc(v2): update mdx loader plugin README ([@shivangna](https://github.com/shivangna))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`\\n - [#2087](https://github.com/facebook/docusaurus/pull/2087) fix(v1): add key to versions.map in versions.js ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n - [#2083](https://github.com/facebook/docusaurus/pull/2083) refactor(v1): fix props for ProjectTitle ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- `docusaurus`\\n - [#2081](https://github.com/facebook/docusaurus/pull/2081) refactor(v2): move scripts/stylesheets injection to server side ([@endiliey](https://github.com/endiliey))\\n - [#2080](https://github.com/facebook/docusaurus/pull/2080) refactor(v2): minor code refactoring on component creator ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-utils`\\n - [#2089](https://github.com/facebook/docusaurus/pull/2089) perf(v2): improve dev build time by not overwriting file if possible ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-search-algolia`\\n - [#2079](https://github.com/facebook/docusaurus/pull/2079) perf(v2): algolia search result no longer cause full page refresh ([@endiliey](https://github.com/endiliey))\\n - [#2076](https://github.com/facebook/docusaurus/pull/2076) perf(v2): load algolia JS only when user interacts with search ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 4\\n\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- KYY ([@FeynmanDNA](https://github.com/FeynmanDNA))\\n- Shivangna Kaistha ([@shivangna](https://github.com/shivangna))\\n- kaichu ([@qshiwu](https://github.com/qshiwu))"},{"id":"/2.0.0-alpha.37","metadata":{"permalink":"/changelog/2.0.0-alpha.37","source":"@site/changelog/source/2.0.0-alpha.37.md","title":"2.0.0-alpha.37","description":"Breaking Change","date":"2019-12-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Binary Logic","alias":"binarylogic","url":"https://github.com/binarylogic","imageURL":"https://github.com/binarylogic.png","key":"binarylogic"},{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"Dongwoo Gim","alias":"gimdongwoo","url":"https://github.com/gimdongwoo","imageURL":"https://github.com/gimdongwoo.png","key":"gimdongwoo"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Wei Gao","alias":"wgao19","url":"https://github.com/wgao19","imageURL":"https://github.com/wgao19.png","key":"wgao19"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-12-01T20:00","authors":["binarylogic","endiliey","gimdongwoo","lex111","wgao19"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38"},"nextItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-content-pages`, `docusaurus-theme-classic`, `docusaurus-theme-live-codeblock`, `docusaurus-theme-search-algolia`, `docusaurus-utils`, `docusaurus`\\n - [#2045](https://github.com/facebook/docusaurus/pull/2045) breaking(v2): minimum required nodejs version 8.9-> 8.10 so we can use es2017 ([@endiliey](https://github.com/endiliey))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-blog`\\n - [#2000](https://github.com/facebook/docusaurus/pull/2000) feat(v2): add meta RSS/Atom feed links to head ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`, `docusaurus-types`, `docusaurus`\\n - [#2057](https://github.com/facebook/docusaurus/pull/2057) feat(v2): injectHtmlTags API to inject head and/or body html tags ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-sitemap`, `docusaurus-theme-classic`, `docusaurus`\\n - [#2032](https://github.com/facebook/docusaurus/pull/2032) feat(v2): allow non sidebar category to be first item of sidebar ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-types`, `docusaurus`\\n - [#1983](https://github.com/facebook/docusaurus/pull/1983) feat(v2): docs versioning \u2744\ufe0f\ud83d\udd25 ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`, `docusaurus`\\n - [#2069](https://github.com/facebook/docusaurus/pull/2069) feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`\\n - [#2067](https://github.com/facebook/docusaurus/pull/2067) fix(v2): toc should not be broken for heading with html inline code ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2064](https://github.com/facebook/docusaurus/pull/2064) fix(v2): markdown reference to file should not be page not found ([@endiliey](https://github.com/endiliey))\\n - [#2061](https://github.com/facebook/docusaurus/pull/2061) fix(v2): fix docs sidebar highlighting if link is partially matched ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2042](https://github.com/facebook/docusaurus/pull/2042) fix(v2): remove css order warning if css imports are not sorted ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2066](https://github.com/facebook/docusaurus/pull/2066) refactor(v2): add title attribute to anchor link ([@lex111](https://github.com/lex111))\\n - [#1990](https://github.com/facebook/docusaurus/pull/1990) refactor(v2): make better a11y for tabs ([@lex111](https://github.com/lex111))\\n - [#2034](https://github.com/facebook/docusaurus/pull/2034) feat(v2): style sidebar on overflow ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#2068](https://github.com/facebook/docusaurus/pull/2068) docs(v2): quick proofread docs ([@endiliey](https://github.com/endiliey))\\n - [#2047](https://github.com/facebook/docusaurus/pull/2047) docs(v2): add manual migration guide for versioning ([@endiliey](https://github.com/endiliey))\\n - [#2036](https://github.com/facebook/docusaurus/pull/2036) docs(v2): Reorganize migration guide ([@wgao19](https://github.com/wgao19))\\n - [#2052](https://github.com/facebook/docusaurus/pull/2052) fix(v2): make proper spelling of Yarn in tabs ([@lex111](https://github.com/lex111))\\n - [#2040](https://github.com/facebook/docusaurus/pull/2040) docs(v2): showcase user vector.dev :) ([@binarylogic](https://github.com/binarylogic))\\n - [#2038](https://github.com/facebook/docusaurus/pull/2038) docs(v2): add documentation on versioning ([@endiliey](https://github.com/endiliey))\\n - [#2037](https://github.com/facebook/docusaurus/pull/2037) docs(v2): display yarn and npm command on website ([@endiliey](https://github.com/endiliey))\\n - [#2051](https://github.com/facebook/docusaurus/pull/2051) docs(v2): more examples on lifecycle apis, cleanup ([@endiliey](https://github.com/endiliey))\\n\\n## :house: Internal\\n\\n- `docusaurus-plugin-content-blog`\\n - [#2072](https://github.com/facebook/docusaurus/pull/2072) refactor(v2): stronger typing for blog plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2060](https://github.com/facebook/docusaurus/pull/2060) fix(v2): clean generated manifest from previous build so we dont use the wrong one ([@endiliey](https://github.com/endiliey))\\n - [#2033](https://github.com/facebook/docusaurus/pull/2033) refactor(v2): move unused generated files out from build folder ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-types`, `docusaurus`\\n - [#2043](https://github.com/facebook/docusaurus/pull/2043) refactor(v2): stronger typing for route gen ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#2044](https://github.com/facebook/docusaurus/pull/2044) chore(v2): bump deps ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-init`, `docusaurus-mdx-loader`, `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#2029](https://github.com/facebook/docusaurus/pull/2029) chore(v2): bump deps and remove unused deps ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-google-analytics`, `docusaurus-plugin-google-gtag`\\n - [#2070](https://github.com/facebook/docusaurus/pull/2070) perf(v2): more performant gtag and analytics plugin ([@endiliey](https://github.com/endiliey))\\n- `docusaurus`\\n - [#2046](https://github.com/facebook/docusaurus/pull/2046) perf(v2): use webpack future version of asset emitting logic to free memory ([@endiliey](https://github.com/endiliey))\\n - [#2039](https://github.com/facebook/docusaurus/pull/2039) perf(v2): replace unnecessary json stringify(string) with inline string ([@endiliey](https://github.com/endiliey))\\n - [#2035](https://github.com/facebook/docusaurus/pull/2035) perf(v2): use @babel/runtime plugin to reduce codesize ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-plugin-content-docs`\\n - [#2054](https://github.com/facebook/docusaurus/pull/2054) perf(v2): unblock metadata processing when possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 5\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Binary Logic ([@binarylogic](https://github.com/binarylogic))\\n- Dongwoo Gim ([@gimdongwoo](https://github.com/gimdongwoo))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Wei Gao ([@wgao19](https://github.com/wgao19))"},{"id":"/2.0.0-alpha.36","metadata":{"permalink":"/changelog/2.0.0-alpha.36","source":"@site/changelog/source/2.0.0-alpha.36.md","title":"2.0.0-alpha.36","description":"Breaking Change","date":"2019-11-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-22T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37"},"nextItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-init`, `docusaurus-plugin-content-blog`, `docusaurus-theme-classic`\\n - [#1989](https://github.com/facebook/docusaurus/pull/1989) misc(v2): change blog front matter to snake_case ([@yangshun](https://github.com/yangshun))\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`\\n - [#2012](https://github.com/facebook/docusaurus/pull/2012) feat(v2): allow hiding docs table of contents ([@yangshun](https://github.com/yangshun))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus`\\n - [#2007](https://github.com/facebook/docusaurus/pull/2007) feat(v2): only create one css file to avoid code-split css loading problem ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#2005](https://github.com/facebook/docusaurus/pull/2005) fix(v2): adjust first-level heading offset ([@lex111](https://github.com/lex111))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-classic`\\n - [#2013](https://github.com/facebook/docusaurus/pull/2013) refactor(v2): split out dark mode toggle so it is easily swizzle-able ([@endiliey](https://github.com/endiliey))\\n - [#2017](https://github.com/facebook/docusaurus/pull/2017) feat(v2): style right sidebar scrollbar when overflow ([@endiliey](https://github.com/endiliey))\\n - [#2003](https://github.com/facebook/docusaurus/pull/2003) refactor(v2): improve semantic markup of blog ([@lex111](https://github.com/lex111))\\n\\n## :house: Internal\\n\\n- `docusaurus`\\n - [#2024](https://github.com/facebook/docusaurus/pull/2024) test(v2): babel exclude transpilation logic to prevent regression ([@endiliey](https://github.com/endiliey))\\n - [#2014](https://github.com/facebook/docusaurus/pull/2014) feat(v2): add meta generator docusaurus ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-mdx-loader`, `docusaurus-plugin-ideal-image`\\n - [#2015](https://github.com/facebook/docusaurus/pull/2015) chore(v2): bump & remove unused deps ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#2009](https://github.com/facebook/docusaurus/pull/2009) misc(v2): branding update ([@yangshun](https://github.com/yangshun))\\n\\n## :memo: Documentation\\n\\n- [#2010](https://github.com/facebook/docusaurus/pull/2010) docs(v2): misc updates ([@yangshun](https://github.com/yangshun))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.35","metadata":{"permalink":"/changelog/2.0.0-alpha.35","source":"@site/changelog/source/2.0.0-alpha.35.md","title":"2.0.0-alpha.35","description":"New Feature","date":"2019-11-17T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"Eric Carboni","alias":"ericcarboni","url":"https://github.com/ericcarboni","imageURL":"https://github.com/ericcarboni.png","key":"ericcarboni"},{"name":"Jamie Davenport","alias":"jamiedavenport","url":"https://github.com/jamiedavenport","imageURL":"https://github.com/jamiedavenport.png","key":"jamiedavenport"},{"name":"Nick McCormick","alias":"kenning","url":"https://github.com/kenning","imageURL":"https://github.com/kenning.png","key":"kenning"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Vincent van der Walt","alias":"vinnytheviking","url":"https://github.com/vinnytheviking","imageURL":"https://github.com/vinnytheviking.png","key":"vinnytheviking"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-17T20:00","authors":["endiliey","ericcarboni","jamiedavenport","kenning","lex111","vinnytheviking"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36"},"nextItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1965](https://github.com/facebook/docusaurus/pull/1965) feat(v2): add ability specify link in footer logo ([@lex111](https://github.com/lex111))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-mdx-loader`, `docusaurus-theme-classic`\\n - [#1992](https://github.com/facebook/docusaurus/pull/1992) fix(v2): static phrasing content should be rendered correctly in TOC ([@endiliey](https://github.com/endiliey))\\n- `docusaurus-theme-classic`\\n - [#1999](https://github.com/facebook/docusaurus/pull/1999) fix(v2): remove hashbang when click on category ([@lex111](https://github.com/lex111))\\n - [#1962](https://github.com/facebook/docusaurus/pull/1962) fix(v2): make not clickable post title on post item page ([@lex111](https://github.com/lex111))\\n - [#1980](https://github.com/facebook/docusaurus/pull/1980) fix(v2): remove invalid label attribute of footer links ([@lex111](https://github.com/lex111))\\n - [#1978](https://github.com/facebook/docusaurus/pull/1978) fix(v2): use regular div instead of main tag for wrapper layout page ([@lex111](https://github.com/lex111))\\n - [#1975](https://github.com/facebook/docusaurus/pull/1975) fix(v2): move header inside article tag in doc page ([@lex111](https://github.com/lex111))\\n - [#1974](https://github.com/facebook/docusaurus/pull/1974) fix(v2): remove invalid attributes of nav links ([@lex111](https://github.com/lex111))\\n - [#1963](https://github.com/facebook/docusaurus/pull/1963) fix(v2): remove empty containers when no data in blog pages ([@lex111](https://github.com/lex111))\\n - [#1966](https://github.com/facebook/docusaurus/pull/1966) fix(v2): remove duplicate meta tags ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-theme-search-algolia`\\n - [#2001](https://github.com/facebook/docusaurus/pull/2001) fix(v2): improve UI of search ([@lex111](https://github.com/lex111))\\n- `docusaurus-theme-classic`\\n - [#1991](https://github.com/facebook/docusaurus/pull/1991) fix(v2): remove accessible anchors via keyboard ([@lex111](https://github.com/lex111))\\n - [#1987](https://github.com/facebook/docusaurus/pull/1987) refactor(v2): replace h1 tag with h2 in blog list pages ([@lex111](https://github.com/lex111))\\n - [#1981](https://github.com/facebook/docusaurus/pull/1981) fix(v2): use tag time for showing last update of doc item ([@lex111](https://github.com/lex111))\\n - [#1977](https://github.com/facebook/docusaurus/pull/1977) feat(v2): add aria-label to read more links for a11y ([@lex111](https://github.com/lex111))\\n - [#1964](https://github.com/facebook/docusaurus/pull/1964) fix(v2): use tag time for showing post item date ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-docs`\\n - [#1994](https://github.com/facebook/docusaurus/pull/1994) fix(v2): throw error if first level item of a sidebar is not category ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-plugin-content-blog`\\n - [#1968](https://github.com/facebook/docusaurus/pull/1968) refactor(v2): simplify blog truncate function ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- Other\\n - [#1988](https://github.com/facebook/docusaurus/pull/1988) docs(v2): fix syntax highlighting for YML code blocks ([@lex111](https://github.com/lex111))\\n - [#1976](https://github.com/facebook/docusaurus/pull/1976) docs(v2): Add section to blog document about feed location ([@vinnytheviking](https://github.com/vinnytheviking))\\n - [#1970](https://github.com/facebook/docusaurus/pull/1970) docs(v2): update configureWebpack utility functions ([@jamiedavenport](https://github.com/jamiedavenport))\\n- `docusaurus-1.x`\\n - [#1961](https://github.com/facebook/docusaurus/pull/1961) docs(v1): remove exclusive language ([@ericcarboni](https://github.com/ericcarboni))\\n\\n## :house: Internal\\n\\n- Other\\n - [#2002](https://github.com/facebook/docusaurus/pull/2002) fix(v2): fix browser window menu icon on smaller screen ([@lex111](https://github.com/lex111))\\n - [#1986](https://github.com/facebook/docusaurus/pull/1986) fix(v2): remove obsolete iframe attributes ([@lex111](https://github.com/lex111))\\n- `docusaurus-init`\\n - [#1982](https://github.com/facebook/docusaurus/pull/1982) feat(v2): add FB link to footer ([@lex111](https://github.com/lex111))\\n- `docusaurus-1.x`, `docusaurus-init-1.x`, `docusaurus-init`, `docusaurus-plugin-content-docs`, `docusaurus-plugin-ideal-image`, `docusaurus-types`, `docusaurus`\\n - [#1985](https://github.com/facebook/docusaurus/pull/1985) chore(v2): update dependencies ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus`\\n - [#1979](https://github.com/facebook/docusaurus/pull/1979) perf(v2): reduce main bundle size by using es5 if possible ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 6\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Eric Carboni ([@ericcarboni](https://github.com/ericcarboni))\\n- Jamie Davenport ([@jamiedavenport](https://github.com/jamiedavenport))\\n- Nick McCormick ([@kenning](https://github.com/kenning))\\n- Vincent van der Walt ([@vinnytheviking](https://github.com/vinnytheviking))"},{"id":"/2.0.0-alpha.34","metadata":{"permalink":"/changelog/2.0.0-alpha.34","source":"@site/changelog/source/2.0.0-alpha.34.md","title":"2.0.0-alpha.34","description":"New Feature","date":"2019-11-11T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[{"name":"Endi","alias":"endiliey","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endiliey"},{"name":"Alexey Pyltsyn","alias":"lex111","url":"https://github.com/lex111","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Yangshun Tay","alias":"yangshun","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-11T20:00","authors":["endiliey","lex111","yangshun"]},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35"},"nextItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## :rocket: New Feature\\n\\n- `docusaurus-theme-classic`\\n - [#1956](https://github.com/facebook/docusaurus/pull/1956) feat(v2): add ability hide dark mode toggle ([@lex111](https://github.com/lex111))\\n\\n## :boom: Breaking Change\\n\\n- `docusaurus-plugin-content-docs`\\n - [#1958](https://github.com/facebook/docusaurus/pull/1958) breaking(v2): editUrl should point to website instead of docsDir ([@endiliey](https://github.com/endiliey))\\n\\n## :bug: Bug Fix\\n\\n- `docusaurus-theme-classic`\\n - [#1959](https://github.com/facebook/docusaurus/pull/1959) fix(v2): useTOC hooks should not be called in each nested children ([@endiliey](https://github.com/endiliey))\\n\\n## :nail_care: Polish\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus`\\n - [#1957](https://github.com/facebook/docusaurus/pull/1957) refactor(v2): avoid synchronous/ blocking operation when possible ([@endiliey](https://github.com/endiliey))\\n\\n## :memo: Documentation\\n\\n- [#1953](https://github.com/facebook/docusaurus/pull/1953) fix(v2): update Infima website URL ([@yangshun](https://github.com/yangshun))\\n\\n## :house: Internal\\n\\n- `docusaurus-1.x`, `docusaurus-plugin-content-blog`, `docusaurus-plugin-content-docs`, `docusaurus-theme-classic`, `docusaurus-theme-search-algolia`, `docusaurus-types`, `docusaurus-utils`, `docusaurus`\\n - [#1955](https://github.com/facebook/docusaurus/pull/1955) chore: bump dev dependencies ([@endiliey](https://github.com/endiliey))\\n- Other\\n - [#1952](https://github.com/facebook/docusaurus/pull/1952) chore(v2): add lerna-changelog ([@endiliey](https://github.com/endiliey))\\n\\n## :running: Performance\\n\\n- `docusaurus-plugin-content-docs`, `docusaurus-utils`, `docusaurus`\\n - [#1951](https://github.com/facebook/docusaurus/pull/1951) perf(v2): skip runtime fileHash cache in prod & get timestamp asynchronously ([@endiliey](https://github.com/endiliey))\\n - [#1950](https://github.com/facebook/docusaurus/pull/1950) perf(v2): more efficient hot reload & consistent filegen ([@endiliey](https://github.com/endiliey))\\n\\n## Committers: 3\\n\\n- Alexey Pyltsyn ([@lex111](https://github.com/lex111))\\n- Endi ([@endiliey](https://github.com/endiliey))\\n- Yangshun Tay ([@yangshun](https://github.com/yangshun))"},{"id":"/2.0.0-alpha.33","metadata":{"permalink":"/changelog/2.0.0-alpha.33","source":"@site/changelog/source/2.0.0-alpha.33.md","title":"2.0.0-alpha.33","description":"Features","date":"2019-11-08T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-08T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34"},"nextItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Table of contents is now highlighted depending on current active headings. (thanks to awesome @SantiagoGdaR) [#1896](https://github.com/facebook/docusaurus/pull/1896)\\n- Official blog plugin can now generate feed for blog posts. (thanks to awesome @moozzyk) [#1916](https://github.com/facebook/docusaurus/pull/1916)\\n- **BREAKING** `prismTheme` is renamed to `theme` as part new `prism` object in `themeConfig` field in your `docusaurus.config.js`. Eg:\\n ```diff\\n themeConfig: {\\n - prismTheme: require(\'prism-react-renderer/themes/dracula\'),\\n + prism: {\\n + theme: require(\'prism-react-renderer/themes/dracula\'),\\n + },\\n },\\n ```\\n- Added new `prism` option `defaultLanguage` that is used if the language is not specified in code blocks. [#1910](https://github.com/facebook/docusaurus/pull/1910)\\n\\n## Fixes\\n\\n- Fix babel/env not picking the correct browserslist configuration during development. When running `docusaurus start`, `process.env.NODE_ENV` is now consistently set to `development`.\\n- Ensure routes config generation to be more consistent in ordering. Nested routes should be placed last in routes.js. This will allow user to create `src/pages/docs.js` to create custom docs page for `/docs` or even `src/pages/docs/super.js` to create page for `/docs/super/`;\\n- Fix watcher does not trigger reload on windows.\\n- Fix build compilation error if exists only one code tab.\\n- Add minor padding to docs container so that hash-link won\'t be cut off.\\n\\n## Others\\n\\n- Misc dependency upgrades.\\n- Stability improvement (more tests) & refactoring on docs plugin to prevent regression."},{"id":"/2.0.0-alpha.32","metadata":{"permalink":"/changelog/2.0.0-alpha.32","source":"@site/changelog/source/2.0.0-alpha.32.md","title":"2.0.0-alpha.32","description":"Features","date":"2019-11-04T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-11-04T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33"},"nextItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n## Features\\n\\n- Add `<Redirect>` component for client side redirect. Example Usage:\\n\\n```js\\nimport React from \'react\';\\nimport {Redirect} from \'@docusaurus/router\';\\n\\nfunction Home() {\\n return <Redirect to=\\"/docs/test\\" />;\\n}\\n```\\n\\n- Allow user to add custom HTML to footer items. [#1905](https://github.com/facebook/docusaurus/pull/1905)\\n- Added code block line highlighting feature (thanks @lex111)! If you have previously swizzled the `CodeBlock` theme component, it is recommended to update your source code to have this feature. ([#1860](https://github.com/facebook/Docusaurus/issues/1860))\\n\\n## Bug Fixes\\n\\n- Fix `@theme/Tabs` component to be able to create tabs with only one item.\\n- Fix MDX `@theme/Heading` component. If there is no id, it should not create anchor link.\\n- Fixed a bug in which if `themeConfig.algolia` is not defined, the custom searchbar won\'t appear. If you\'ve swizzled Algolia `SearchBar` component before, please update your source code otherwise CSS might break. See [#1909](https://github.com/facebook/docusaurus/pull/1909/files) for reference.\\n\\n```js\\n- <Fragment>\\n+ <div className=\\"navbar__search\\" key=\\"search-box\\">\\n```\\n\\n- Slightly adjust search icon position to be more aligned on small width device. ([#1893](https://github.com/facebook/Docusaurus/issues/1893))\\n- Fix algolia styling bug, previously search suggestion result is sometimes hidden. ([#1915](https://github.com/facebook/Docusaurus/issues/1915))\\n- Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1.\\n- Fix accessing `docs/` or `/docs/xxxx` that does not match any existing doc page should return 404 (Not found) page, not blank page. ([#1903](https://github.com/facebook/Docusaurus/issues/1903))\\n- Prioritize `@docusaurus/core` dependencies/ node_modules over user\'s node_modules. This fix a bug whereby if user has core-js@3 on its own node_modules but docusaurus depends on core-js@2, we previously encounter `Module not found: core-js/modules/xxxx` (because core-js@3 doesn\'t have that).\\n- Fix a bug where docs plugin add `/docs` route even if docs folder is empty. We also improved docs plugin test coverage to 100% for stability before working on docs versioning. ([#1912](https://github.com/facebook/Docusaurus/issues/1912))\\n\\n## Performance Improvement\\n\\n- Reduce memory usage consumption. ([#1900](https://github.com/facebook/Docusaurus/issues/1900))\\n- Significantly reduce main bundle size and initial HTML payload on production build. Generated files from webpack is also shorter in name. ([#1898](https://github.com/facebook/Docusaurus/issues/1898))\\n- Simplify blog metadata. Previously, accessing `/blog/post-xxx` will request for next and prev blog post metadata too aside from target post metadata. We should only request target post metadata. ([#1908](https://github.com/facebook/Docusaurus/issues/1908))\\n\\n## Others\\n\\n- Convert sitemap plugin to TypeScript. ([#1894](https://github.com/facebook/Docusaurus/issues/1894))\\n- Refactor dark mode toggle into a hook. ([#1899](https://github.com/facebook/Docusaurus/issues/1899))"},{"id":"/2.0.0-alpha.31","metadata":{"permalink":"/changelog/2.0.0-alpha.31","source":"@site/changelog/source/2.0.0-alpha.31.md","title":"2.0.0-alpha.31","description":"- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.","date":"2019-10-26T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-26T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32"},"nextItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"listPageLink":"/changelog/page/4"},"content":"\x3c!-- truncate --\x3e\\n\\n- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.\\n- Footer is now also displayed in docs page for consistency.\\n- Remove empty doc sidebar container if sidebar for a particular doc page does not exist. Otherwise, it will cause an additional empty space.\\n- Default PostCSS loader now only polyfills stage 3+ features (previously it was stage 2) like Create React App. Stage 2 CSS is considered relatively unstable and subject to change while Stage 3 features will likely become a standard.\\n- Fix search bar focus bug. When you put the focus on search input, previously the focus will remain although we have clicked to other area outside of the search input.\\n- New themeConfig option `sidebarCollapsible`. It is on by default. If explicitly set to `false`, all doc items in sidebar is expanded. Otherwise, it will still be a collapsible sidebar.\\n- Disable adding hashes to the generated class names of CSS modules in dev mode. Generating unique identifiers takes some time, which can be saved since including paths to files in class names is enough to avoid collisions.\\n- Fix showing sidebar category with empty items.\\n- Update infima from 0.2.0-alpha.2 to 0.2.0-alpha.3\\n - Fix pagination nav and right sidebar color contrast ratio\\n - Fix sidebar arrow color in dark mode\\n - Fix footer mobile issue\\n - Increase sidebar width\\n - etc"},{"id":"/2.0.0-alpha.30","metadata":{"permalink":"/changelog/2.0.0-alpha.30","source":"@site/changelog/source/2.0.0-alpha.30.md","title":"2.0.0-alpha.30","description":"- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug TypeError: Cannot assign to read only property \'exports\' of object \'#\'.(#1868)","date":"2019-10-22T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-22T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31"},"nextItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug `TypeError: Cannot assign to read only property \'exports\' of object \'#<Object>\'`.([#1868](https://github.com/facebook/docusaurus/pull/1868))\\n\\nIf you are still encountering the error. Please check whether you use `module.exports` for your `.js` file instead of doing `export` (mixing CJS and ES). See https://github.com/webpack/webpack/issues/4039#issuecomment-477779322 and https://github.com/webpack/webpack/issues/4039#issuecomment-273804003 for more context."},{"id":"/2.0.0-alpha.29","metadata":{"permalink":"/changelog/2.0.0-alpha.29","source":"@site/changelog/source/2.0.0-alpha.29.md","title":"2.0.0-alpha.29","description":"HOTFIX for 2.0.0-alpha.28.","date":"2019-10-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30"},"nextItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n**HOTFIX for 2.0.0-alpha.28**.\\n\\n- Fix missing `core-js` dependencies on `@docusaurus/core`.\\n- Fix wrong `@babel/env` preset configuration that causes build compilation error.\\n- New UI for webpack compilation progress bar."},{"id":"/2.0.0-alpha.28","metadata":{"permalink":"/changelog/2.0.0-alpha.28","source":"@site/changelog/source/2.0.0-alpha.28.md","title":"2.0.0-alpha.28","description":"- Further reduce memory usage to avoid heap memory allocation failure.","date":"2019-10-21T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-21T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29"},"nextItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Further reduce memory usage to avoid heap memory allocation failure.\\n- Fix `keywords` frontmatter for SEO not working properly.\\n- Fix `swizzle` command not passing context properly to theme packages.\\n- Add `extendCli` api for plugins. This will allow plugin to further extend Docusaurus CLI.\\n- Fix `swizzle` command not being able to swizzle single js file.\\n- Fix logo URL in footer to be appended with baseUrl automatically.\\n- Add the option `--no-open` for `start` command.\\n- Set `@babel/env` useBuiltins to `usage`. This will automatically use browserlist and import polyfills required.\\n- Modified TerserWebpackPlugin `terserOptions` for better cross-browser compatibility.\\n- **BREAKING** `withBaseUrl` is renamed to `useBaseUrl` because its a React Hooks. Make sure you import/rename it correctly. Eg: `import useBaseUrl from \'@docusaurus/useBaseUrl`;\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine.\\n- Upgrade dependencies."},{"id":"/2.0.0-alpha.27","metadata":{"permalink":"/changelog/2.0.0-alpha.27","source":"@site/changelog/source/2.0.0-alpha.27.md","title":"2.0.0-alpha.27","description":"- Add @theme/Tabs which can be used to implement multi-language code tabs.","date":"2019-10-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28"},"nextItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add `@theme/Tabs` which can be used to implement multi-language code tabs.\\n- Implement `custom_edit_url` and `hide_title` markdown header for docusaurus v1 feature parity.\\n- Reduce memory usage and slightly faster production build.\\n- Misc dependency upgrades."},{"id":"/2.0.0-alpha.26","metadata":{"permalink":"/changelog/2.0.0-alpha.26","source":"@site/changelog/source/2.0.0-alpha.26.md","title":"2.0.0-alpha.26","description":"- Docs, pages plugin is rewritten in TypeScript","date":"2019-10-12T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-12T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27"},"nextItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Docs, pages plugin is rewritten in TypeScript\\n- Docs improvements and tweaks\\n - Improved metadata which results in smaller bundle size.\\n - Docs sidebar can now be more than one level deep, theoretically up to infinity\\n - Collapsible docs sidebar!\\n - Make doc page title larger\\n - Add `editUrl` option (URL for editing) to docs plugin. If this field is set, there will be an \\"Edit this page\\" link for each doc page. Example: \'https://github.com/facebook/docusaurus/edit/master/docs\'\\n - Add `showLastUpdateTime` and `showLastUpdateAuthor` options to docs plugin to further achieve v1 parity of showing last update data for a particular doc\\n- Slight tweaks to the Blog components - blog title is larger now\\n- Code Blocks\\n - Change default theme from Night Owl to Palenight\\n - Slight tweaks to playground/preview components\\n- Add `scripts` and `stylesheets` field to `docusaurus.config.js`\\n- More documentation..."},{"id":"/2.0.0-alpha.25","metadata":{"permalink":"/changelog/2.0.0-alpha.25","source":"@site/changelog/source/2.0.0-alpha.25.md","title":"2.0.0-alpha.25","description":"- Blog plugin is rewritten in TypeScript and can now support CJK","date":"2019-10-01T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-10-01T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26"},"nextItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Blog plugin is rewritten in TypeScript and can now support CJK\\n- Upgrade key direct dependencies such as webpack, mdx and babel to latest\\n- Do not escape html and body attributes\\n- For devices with very small viewport width, the searchbar is replaced with a search icon. On tap of the search icon the searchbar is expanded and the text beside the logo is hidden and remains hidden while the search bar is expanded.\\n- Add `date` frontMatter support for blog plugin\\n- Add `truncateMarker` option to blog plugin, support string or regex.\\n- Webpack `optimization.removeAvailableModules` is now disabled for performance gain. See https://github.com/webpack/webpack/releases/tag/v4.38.0 for more context."},{"id":"/2.0.0-alpha.24","metadata":{"permalink":"/changelog/2.0.0-alpha.24","source":"@site/changelog/source/2.0.0-alpha.24.md","title":"2.0.0-alpha.24","description":"- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.","date":"2019-07-24T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-24T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25"},"nextItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.\\n- Upgrade dependencies of css-loader from 2.x to 3.x. CSS modules localIdentName hash now only use the last 4 characters instead of 8.\\n- Fix broken markdown linking replacement for mdx files\\n- Fix potential security vulnerability because we\'re exposing the directory structure of the host machine. Instead of absolute path, we use relative path from site directory. Resulting in shorter webpack chunk naming and smaller bundle size.\\n- Use contenthash instead of chunkhash for better long term caching\\n- Allow user to customize generated heading from MDX. Swizzle `@theme/Heading`"},{"id":"/2.0.0-alpha.23","metadata":{"permalink":"/changelog/2.0.0-alpha.23","source":"@site/changelog/source/2.0.0-alpha.23.md","title":"2.0.0-alpha.23","description":"- Fix docusaurus route config generation for certain edge case","date":"2019-07-21T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-21T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24"},"nextItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix docusaurus route config generation for certain edge case"},{"id":"/2.0.0-alpha.22","metadata":{"permalink":"/changelog/2.0.0-alpha.22","source":"@site/changelog/source/2.0.0-alpha.22.md","title":"2.0.0-alpha.22","description":"- Add missing dependencies on @docusaurus/preset-classic","date":"2019-07-20T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-20T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23"},"nextItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add missing dependencies on `@docusaurus/preset-classic`\\n- New plugin `@docusaurus/plugin-ideal-image` to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)\\n- Better Twitter/discord image preview. Previously the size is too zoomed\\n- Allow prism syntax highlighting theme customization. Refer to https://docusaurus.io/docs/markdown-features#syntax-highlighting\\n- CSS is now autoprefixed using postcss\\n- Faster, lighter webpack bundle size\\n- `@docusaurus/theme-live-codeblock` is now much smaller in size and no longer only load on viewport\\n- Blog markdown files now support using the id field to specify the path"},{"id":"/2.0.0-alpha.21","metadata":{"permalink":"/changelog/2.0.0-alpha.21","source":"@site/changelog/source/2.0.0-alpha.21.md","title":"2.0.0-alpha.21","description":"- Fix babel-loader not transpiling docusaurus package","date":"2019-07-14T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22"},"nextItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Fix babel-loader not transpiling docusaurus package"},{"id":"/2.0.0-alpha.20","metadata":{"permalink":"/changelog/2.0.0-alpha.20","source":"@site/changelog/source/2.0.0-alpha.20.md","title":"2.0.0-alpha.20","description":"- Add copy codeblock button","date":"2019-07-14T19:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-07-14T19:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21"},"nextItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add copy codeblock button\\n- Add Google analytics and Google gtag plugins.\\n- Move source components to `/src`. Please create a `website/src` directory and move your `/pages` and `/theme` code into it. This is to make it easier to integrate your website with external build/static analysis tooling (you can now just pass in `src/**/*.js` as the path to process).\\n- Adde more documentation thanks to @wgao19.\\n- Deprecate the current docs plugin. The docs plugin as of 2.0.0-alpha.19 is heavily based on V1 specifications and we intend to create a better one that fixes some of the inconsistencies in V1. If you have swizzled any doc components, you will have to update their names. You are highly encourages to not swizzle the legacy doc components until we have completed the new docs plugin.\\n- Separate v2 init command to new package @docusaurus/init\\n- Render 404.html page\\n- Improve SEO\\n- Clicking on the logo in the mobile sliding navigation will now bring you to the homepage.\\n- Performance\\n - Disable webpack output pathinfo. Webpack has the ability to generate path info in the output bundle. However, this puts garbage collection pressure on projects that bundle thousands of modules. Not very useful for our case\\n - Drop cache-loader in CI and test environment because it has an initial overhead. We always start from scratch in vm instance like CI so cache-loader is useless\\n - Better splitchunks and babel default webpack config"},{"id":"/2.0.0-alpha.19","metadata":{"permalink":"/changelog/2.0.0-alpha.19","source":"@site/changelog/source/2.0.0-alpha.19.md","title":"2.0.0-alpha.19","description":"- Add a sensible default for browserslist config.","date":"2019-06-07T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-06-07T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20"},"nextItem":{"title":"V2 Changelog","permalink":"/changelog/V2 Changelog"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n- Add a sensible default for browserslist config.\\n- UI\\n - Add sun and moon emoji to the dark mode toggle.\\n - Mobile responsive menu.\\n - Right table of contents for docs is now sticky.\\n- Plugins\\n - Change plugin definitions from classes to functions. Refer to the new plugin docs.\\n - Implement Clients module API.\\n - Change format within `docusaurus.config.js` to be like presets.\\n- Deps\\n - Infima CSS is now locked down to specific versions and not relying upon the CDN which reads from trunk.\\n - Update dependencies to latest\\n- Customize/ Override infima CSS variables by passing options into the classic preset.\\n\\n```\\npresets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n theme: {\\n customCss: require.resolve(\'./css/custom.css\'),\\n },\\n ...\\n },\\n ],\\n],\\n```\\n\\n- Allow passing remark and rehype plugins to mdx-loader for docs and blog plugin\\n- Move themes component of docs and blog to be part of theme-classic\\n- Use composition style for prism syntax highlighting instead of doing it via rehype plugin\\n- Pass MDXProvider to docs and blog. To change the provided MDX components, run `docusaurus swizzle @docusaurus/theme-classic MDXComponents`\\n- Add @docusaurus/theme-livecodeblock plugin\\n- Better run-time code generation & webpack splitchunks optimization\\n- Minify css for production build\\n- Fix weird scrolling problem when navigating to a route with a `hash` location"},{"id":"/V2 Changelog","metadata":{"permalink":"/changelog/V2 Changelog","source":"@site/changelog/source/V2 Changelog.md","title":"V2 Changelog","description":"siteConfig.js changes","date":"2019-04-10T20:00:00.000Z","tags":[],"hasTruncateMarker":true,"authors":[],"frontMatter":{"mdx":{"format":"md"},"date":"2019-04-10T20:00"},"unlisted":false,"prevItem":{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19"},"listPageLink":"/changelog/page/5"},"content":"\x3c!-- truncate --\x3e\\n\\n### `siteConfig.js` changes\\n\\n- `siteConfig.js` renamed to `docusaurus.config.js`.\\n- Remove the following config options:\\n - `docsUrl`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `customDocsPath`. Use the plugin option on `docusaurus-plugin-content-docs` instead.\\n - `sidebars.json` now has to be explicitly loaded by users and passed into the plugin option on `docusaurus-plugin-content-docs`.\\n - `headerLinks` doc, page, blog is deprecated and has been to moved into `themeConfig` under the name `navbar`. The syntax is now:\\n\\n```js\\nthemeConfig: {\\n navbar: {\\n title: \'Docusaurus\',\\n logo: {\\n alt: \'Docusaurus Logo\',\\n src: \'img/docusaurus.svg\',\\n },\\n links: [\\n {to: \'docs/introduction\', label: \'Docs\', position: \'left\'},\\n {to: \'blog\', label: \'Blog\', position: \'left\'},\\n {to: \'feedback\', label: \'Feedback\', position: \'left\'},\\n {\\n href: \'https://github.com/facebook/docusaurus\',\\n label: \'GitHub\',\\n position: \'right\',\\n },\\n ],\\n },\\n}\\n```\\n\\n### Migration Guide\\n\\n_Work in Progress_\\n\\n### Presets\\n\\n- Add presets for plugins that follow the [Babel preset convention](https://babeljs.io/docs/en/presets)."}],"blogListPaginated":[{"items":["/3.2.1","/3.2.0","/3.1.1","/3.1.0","/3.0.1","/3.0.0","/2.4.3","/2.4.2","/2.4.1","/2.4.0","/2.3.1","/2.3.0","/2.2.0","/2.1.0","/2.0.1","/2.0.0","/2.0.0-rc.1","/2.0.0-beta.22","/2.0.0-beta.21","/2.0.0-beta.20"],"metadata":{"permalink":"/changelog","page":1,"postsPerPage":20,"totalPages":5,"totalCount":93,"nextPage":"/changelog/page/2","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-beta.19","/2.0.0-beta.18","/2.0.0-beta.17","/2.0.0-beta.16","/2.0.0-beta.15","/2.0.0-beta.14","/2.0.0-beta.13","/2.0.0-beta.12","/2.0.0-beta.11","/2.0.0-beta.10","/2.0.0-beta.9","/2.0.0-beta.8","/2.0.0-beta.7","/2.0.0-beta.6","/2.0.0-beta.5","/2.0.0-beta.4","/2.0.0-beta.3","/2.0.0-beta.2","/2.0.0-beta.1","/2.0.0-beta.0"],"metadata":{"permalink":"/changelog/page/2","page":2,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog","nextPage":"/changelog/page/3","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.75","/2.0.0-alpha.74","/2.0.0-alpha.73","/2.0.0-alpha.72","/2.0.0-alpha.71","/2.0.0-alpha.70","/2.0.0-alpha.69","/2.0.0-alpha.68","/2.0.0-alpha.67","/2.0.0-alpha.66","/2.0.0-alpha.65","/2.0.0-alpha.64","/2.0.0-alpha.63","/2.0.0-alpha.62","/2.0.0-alpha.61","/2.0.0-alpha.60","/2.0.0-alpha.59","/2.0.0-alpha.58","/2.0.0-alpha.57","/2.0.0-alpha.56"],"metadata":{"permalink":"/changelog/page/3","page":3,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog/page/2","nextPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.55","/2.0.0-alpha.54","/2.0.0-alpha.53","/2.0.0-alpha.51","/2.0.0-alpha.50","/2.0.0-alpha.49","/2.0.0-alpha.48","/2.0.0-alpha.44","/2.0.0-alpha.43","/2.0.0-alpha.41","/2.0.0-alpha.40","/2.0.0-alpha.39","/2.0.0-alpha.38","/2.0.0-alpha.37","/2.0.0-alpha.36","/2.0.0-alpha.35","/2.0.0-alpha.34","/2.0.0-alpha.33","/2.0.0-alpha.32","/2.0.0-alpha.31"],"metadata":{"permalink":"/changelog/page/4","page":4,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog/page/3","nextPage":"/changelog/page/5","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}},{"items":["/2.0.0-alpha.30","/2.0.0-alpha.29","/2.0.0-alpha.28","/2.0.0-alpha.27","/2.0.0-alpha.26","/2.0.0-alpha.25","/2.0.0-alpha.24","/2.0.0-alpha.23","/2.0.0-alpha.22","/2.0.0-alpha.21","/2.0.0-alpha.20","/2.0.0-alpha.19","/V2 Changelog"],"metadata":{"permalink":"/changelog/page/5","page":5,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}],"blogTags":{},"blogTagsListPath":"/changelog/tags"}},"docusaurus-plugin-client-redirects":{},"docusaurus-plugin-ideal-image":{},"docusaurus-plugin-pwa":{},"docusaurus-theme-mermaid":{},"feature-requests-plugin":{},"client-module-test-plugin":{},"docusaurus-theme-live-codeblock":{},"swizzle-theme-tests":{},"docusaurus-bootstrap-plugin":{},"docusaurus-mdx-fallback-plugin":{}}}')}}]); \ No newline at end of file diff --git a/assets/js/11671d7d.37fb9e54.js b/assets/js/11671d7d.37fb9e54.js new file mode 100644 index 0000000000..56bf4d12e0 --- /dev/null +++ b/assets/js/11671d7d.37fb9e54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65788],{20232:l=>{l.exports=JSON.parse('{"tag":{"label":"long-long-long-long-long","permalink":"/tests/blog/tags/long-long-long-long-long","allTagsPath":"/tests/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/long-long-long-long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/1267474e.835d63fd.js b/assets/js/1267474e.835d63fd.js new file mode 100644 index 0000000000..da11c59c0b --- /dev/null +++ b/assets/js/1267474e.835d63fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61221],{61132:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(24246),i=(n(27378),n(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>T});var r=n(24246),i=n(27378),a=n(40624),o=n(75527),s=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function m(e){var t,n;return null!==(n=null===(t=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function b(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=null!=t?t:function(e){return m(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function g({value:e,tabValues:t}){return t.some((t=>t.value===e))}function f({queryString:e=!1,groupId:t}){const n=(0,s.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,c._X)(r),o=(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[a,o]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,a=b(e),[o,s]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:a}))),[c,u]=f({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),m=(()=>{const e=null!=c?c:h;return g({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{m&&s(m)}),[m]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){y(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:i,tabValues:s}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),a=s[r].value;a!==n&&(c(t),i(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},i),{className:(0,a.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function I({lazy:e,children:t,selectedValue:n}){const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},e,t)),(0,r.jsx)(I,w({},e,t))]})}function T(e){const t=(0,x.Z)();return(0,r.jsx)(P,O(w({},e),{children:m(e.children)}),String(t))}},91507:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(24246),i=n(71670),a=n(97555),o=n(61132);const s={slug:"/migration/v2/automated"},l="Automated migration",c={id:"migration/v2/migration-automated",title:"Automated migration",description:"The migration CLI automatically migrates your v1 website to a v2 website.",source:"@site/docs/migration/v2/migration-automated.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/automated",permalink:"/docs/migration/v2/automated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-automated.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,frontMatter:{slug:"/migration/v2/automated"},sidebar:"docs",previous:{title:"Overview",permalink:"/docs/migration/v2"},next:{title:"Manual migration",permalink:"/docs/migration/v2/manual"}},u={},d=[{value:"Options",id:"options",level:4}];function h(e){const t={admonition:"admonition",code:"code",h1:"h1",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"automated-migration",children:"Automated migration"}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI automatically migrates your v1 website to a v2 website."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Manual work is still required after using the migration CLI, as we can't automate a full migration"})}),"\n",(0,r.jsx)(t.p,{children:"The migration CLI migrates:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Site configurations (from ",(0,r.jsx)(t.code,{children:"siteConfig.js"})," to ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"}),")"]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"package.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"sidebars.json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/docs"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/blog"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"/static"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"versioned_sidebar.json"})," and ",(0,r.jsx)(t.code,{children:"/versioned_docs"})," if your site uses versioning"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"To use the migration CLI, follow these steps:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Before using the migration CLI, ensure that ",(0,r.jsx)(t.code,{children:"/docs"}),", ",(0,r.jsx)(t.code,{children:"/blog"}),", ",(0,r.jsx)(t.code,{children:"/static"}),", ",(0,r.jsx)(t.code,{children:"sidebars.json"}),", ",(0,r.jsx)(t.code,{children:"siteConfig.js"}),", ",(0,r.jsx)(t.code,{children:"package.json"})," follow the expected structure."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"To migrate your v1 website, run the migration CLI with the appropriate filesystem paths:"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# migration command format\nnpx @docusaurus/migrate migrate <v1 website directory> <desired v2 website directory>\n\n# example\nnpx @docusaurus/migrate migrate ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"To view your new website locally, go into your v2 website's directory and start your development server."}),"\n"]}),"\n",(0,r.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(o.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nnpm install\nnpm start\n"})})}),(0,r.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\nyarn install\nyarn start\n"})})}),(0,r.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd ./v2-website\npnpm install\npnpm start\n"})})})]}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"The migration CLI updates existing files. Be sure to have committed them first!"})}),"\n",(0,r.jsx)(t.h4,{id:"options",children:"Options"}),"\n",(0,r.jsx)(t.p,{children:"You can add option flags to the migration CLI to automatically migrate Markdown content and pages to v2. It is likely that you will still need to make some manual changes to achieve your desired result."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--mdx"})}),(0,r.jsx)(t.td,{children:"Add this flag to convert Markdown to MDX automatically"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"--page"})}),(0,r.jsx)(t.td,{children:"Add this flag to migrate pages automatically"})]})]})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"# example using options\nnpx @docusaurus/migrate migrate --mdx --page ./v1-website ./v2-website\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"danger",children:[(0,r.jsx)(t.p,{children:"The migration of pages and MDX is still a work in progress."}),(0,r.jsxs)(t.p,{children:["We recommend you to try to run the pages without these options, commit, and then try to run the migration again with the ",(0,r.jsx)(t.code,{children:"--page"})," and ",(0,r.jsx)(t.code,{children:"--mdx"})," options."]}),(0,r.jsx)(t.p,{children:"This way, you'd be able to easily inspect and fix the diff."})]})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var r=n(27378);const i={},a=r.createContext(i);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/12769aa9.ee8c2797.js b/assets/js/12769aa9.ee8c2797.js new file mode 100644 index 0000000000..035a73764e --- /dev/null +++ b/assets/js/12769aa9.ee8c2797.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99876],{93892:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(24246),r=n(71670);const o={mdx:{format:"md"},date:"2019-10-01T20:00"},i="2.0.0-alpha.25",s={permalink:"/changelog/2.0.0-alpha.25",source:"@site/changelog/source/2.0.0-alpha.25.md",title:"2.0.0-alpha.25",description:"- Blog plugin is rewritten in TypeScript and can now support CJK",date:"2019-10-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-01T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.26",permalink:"/changelog/2.0.0-alpha.26"},nextItem:{title:"2.0.0-alpha.24",permalink:"/changelog/2.0.0-alpha.24"},listPageLink:"/changelog/page/5"},c={authorsImageUrls:[]},l=[];function d(e){const t={a:"a",code:"code",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Blog plugin is rewritten in TypeScript and can now support CJK"}),"\n",(0,a.jsx)(t.li,{children:"Upgrade key direct dependencies such as webpack, mdx and babel to latest"}),"\n",(0,a.jsx)(t.li,{children:"Do not escape html and body attributes"}),"\n",(0,a.jsx)(t.li,{children:"For devices with very small viewport width, the searchbar is replaced with a search icon. On tap of the search icon the searchbar is expanded and the text beside the logo is hidden and remains hidden while the search bar is expanded."}),"\n",(0,a.jsxs)(t.li,{children:["Add ",(0,a.jsx)(t.code,{children:"date"})," frontMatter support for blog plugin"]}),"\n",(0,a.jsxs)(t.li,{children:["Add ",(0,a.jsx)(t.code,{children:"truncateMarker"})," option to blog plugin, support string or regex."]}),"\n",(0,a.jsxs)(t.li,{children:["Webpack ",(0,a.jsx)(t.code,{children:"optimization.removeAvailableModules"})," is now disabled for performance gain. See ",(0,a.jsx)(t.a,{href:"https://github.com/webpack/webpack/releases/tag/v4.38.0",children:"https://github.com/webpack/webpack/releases/tag/v4.38.0"})," for more context."]}),"\n"]})}function p(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var a=n(27378);const r={},o=a.createContext(r);function i(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/12775.2377f6bf.js b/assets/js/12775.2377f6bf.js new file mode 100644 index 0000000000..362744dcba --- /dev/null +++ b/assets/js/12775.2377f6bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12775],{12775:(t,e,i)=>{i.d(e,{diagram:()=>et});var n=i(99854),a=i(63294),s=i(47435),r=i(7608),l=(i(27693),i(31699),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,6],i=[1,7],n=[1,8],a=[1,9],s=[1,16],r=[1,11],l=[1,12],o=[1,13],h=[1,14],d=[1,15],p=[1,27],u=[1,33],y=[1,34],f=[1,35],b=[1,36],g=[1,37],_=[1,72],x=[1,73],m=[1,74],E=[1,75],A=[1,76],S=[1,77],v=[1,78],C=[1,38],k=[1,39],O=[1,40],T=[1,41],w=[1,42],D=[1,43],R=[1,44],N=[1,45],P=[1,46],M=[1,47],j=[1,48],B=[1,49],Y=[1,50],L=[1,51],I=[1,52],U=[1,53],F=[1,54],X=[1,55],z=[1,56],Q=[1,57],W=[1,59],$=[1,60],q=[1,61],V=[1,62],G=[1,63],H=[1,64],K=[1,65],J=[1,66],Z=[1,67],tt=[1,68],et=[1,69],it=[24,52],nt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],st=[1,94],rt=[1,95],lt=[1,96],ot=[1,97],ct=[15,24,52],ht=[7,8,9,10,18,22,25,26,27,28],dt=[15,24,43,52],pt=[15,24,43,52,86,87,89,90],ut=[15,43],yt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],ft={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,i,n,a,s,r){var l=s.length-1;switch(a){case 4:n.setDirection("TB");break;case 5:n.setDirection("BT");break;case 6:n.setDirection("RL");break;case 7:n.setDirection("LR");break;case 11:n.parseDirective("%%{","open_directive");break;case 12:break;case 13:s[l]=s[l].trim().replace(/'/g,'"'),n.parseDirective(s[l],"arg_directive");break;case 14:n.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:n.setC4Type(s[l-3]);break;case 26:n.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 27:n.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 28:this.$=s[l].trim(),n.setTitle(this.$);break;case 29:case 30:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 35:case 36:s[l].splice(2,0,"ENTERPRISE"),n.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 37:n.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 38:s[l].splice(2,0,"CONTAINER"),n.addContainerBoundary(...s[l]),this.$=s[l];break;case 39:n.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 40:n.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 41:n.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 42:n.popBoundaryParseStack();break;case 46:n.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 47:n.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 48:n.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 49:n.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 50:n.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 51:n.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 52:n.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 53:n.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 54:n.addContainer("container",...s[l]),this.$=s[l];break;case 55:n.addContainer("container_db",...s[l]),this.$=s[l];break;case 56:n.addContainer("container_queue",...s[l]),this.$=s[l];break;case 57:n.addContainer("external_container",...s[l]),this.$=s[l];break;case 58:n.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 59:n.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 60:n.addComponent("component",...s[l]),this.$=s[l];break;case 61:n.addComponent("component_db",...s[l]),this.$=s[l];break;case 62:n.addComponent("component_queue",...s[l]),this.$=s[l];break;case 63:n.addComponent("external_component",...s[l]),this.$=s[l];break;case 64:n.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 65:n.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 67:n.addRel("rel",...s[l]),this.$=s[l];break;case 68:n.addRel("birel",...s[l]),this.$=s[l];break;case 69:n.addRel("rel_u",...s[l]),this.$=s[l];break;case 70:n.addRel("rel_d",...s[l]),this.$=s[l];break;case 71:n.addRel("rel_l",...s[l]),this.$=s[l];break;case 72:n.addRel("rel_r",...s[l]),this.$=s[l];break;case 73:n.addRel("rel_b",...s[l]),this.$=s[l];break;case 74:s[l].splice(0,1),n.addRel("rel",...s[l]),this.$=s[l];break;case 75:n.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 76:n.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 77:n.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 78:this.$=[s[l]];break;case 79:s[l].unshift(s[l-1]),this.$=s[l];break;case 80:case 82:this.$=s[l].trim();break;case 81:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:e,8:i,9:n,10:a,11:5,12:10,18:s,22:r,25:l,26:o,27:h,28:d},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:e,8:i,9:n,10:a,11:5,12:10,18:s,22:r,25:l,26:o,27:h,28:d},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:p},t([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:u,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:79,29:29,30:30,31:31,32:u,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:80,29:29,30:30,31:31,32:u,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:81,29:29,30:30,31:31,32:u,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{23:82,29:29,30:30,31:31,32:u,33:y,34:f,36:b,38:g,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},t(it,[2,20],{53:32,39:58,40:70,42:71,30:87,44:_,46:x,47:m,48:E,49:A,50:S,51:v,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et}),t(it,[2,21]),t(nt,[2,23],{15:[1,88]}),t(it,[2,43],{15:[1,89]}),t(at,[2,26]),t(at,[2,27]),{35:[1,90]},{37:[1,91]},t(at,[2,30]),{45:92,85:93,86:st,87:rt,89:lt,90:ot},{45:98,85:93,86:st,87:rt,89:lt,90:ot},{45:99,85:93,86:st,87:rt,89:lt,90:ot},{45:100,85:93,86:st,87:rt,89:lt,90:ot},{45:101,85:93,86:st,87:rt,89:lt,90:ot},{45:102,85:93,86:st,87:rt,89:lt,90:ot},{45:103,85:93,86:st,87:rt,89:lt,90:ot},{45:104,85:93,86:st,87:rt,89:lt,90:ot},{45:105,85:93,86:st,87:rt,89:lt,90:ot},{45:106,85:93,86:st,87:rt,89:lt,90:ot},{45:107,85:93,86:st,87:rt,89:lt,90:ot},{45:108,85:93,86:st,87:rt,89:lt,90:ot},{45:109,85:93,86:st,87:rt,89:lt,90:ot},{45:110,85:93,86:st,87:rt,89:lt,90:ot},{45:111,85:93,86:st,87:rt,89:lt,90:ot},{45:112,85:93,86:st,87:rt,89:lt,90:ot},{45:113,85:93,86:st,87:rt,89:lt,90:ot},{45:114,85:93,86:st,87:rt,89:lt,90:ot},{45:115,85:93,86:st,87:rt,89:lt,90:ot},{45:116,85:93,86:st,87:rt,89:lt,90:ot},t(ct,[2,66]),{45:117,85:93,86:st,87:rt,89:lt,90:ot},{45:118,85:93,86:st,87:rt,89:lt,90:ot},{45:119,85:93,86:st,87:rt,89:lt,90:ot},{45:120,85:93,86:st,87:rt,89:lt,90:ot},{45:121,85:93,86:st,87:rt,89:lt,90:ot},{45:122,85:93,86:st,87:rt,89:lt,90:ot},{45:123,85:93,86:st,87:rt,89:lt,90:ot},{45:124,85:93,86:st,87:rt,89:lt,90:ot},{45:125,85:93,86:st,87:rt,89:lt,90:ot},{45:126,85:93,86:st,87:rt,89:lt,90:ot},{45:127,85:93,86:st,87:rt,89:lt,90:ot},{30:128,39:58,40:70,42:71,44:_,46:x,47:m,48:E,49:A,50:S,51:v,53:32,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et},{15:[1,130],43:[1,129]},{45:131,85:93,86:st,87:rt,89:lt,90:ot},{45:132,85:93,86:st,87:rt,89:lt,90:ot},{45:133,85:93,86:st,87:rt,89:lt,90:ot},{45:134,85:93,86:st,87:rt,89:lt,90:ot},{45:135,85:93,86:st,87:rt,89:lt,90:ot},{45:136,85:93,86:st,87:rt,89:lt,90:ot},{45:137,85:93,86:st,87:rt,89:lt,90:ot},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},t(ht,[2,9]),{14:142,21:p},{21:[2,13]},{1:[2,15]},t(it,[2,22]),t(nt,[2,24],{31:31,29:143,32:u,33:y,34:f,36:b,38:g}),t(it,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:u,33:y,34:f,36:b,38:g,44:_,46:x,47:m,48:E,49:A,50:S,51:v,54:C,55:k,56:O,57:T,58:w,59:D,60:R,61:N,62:P,63:M,64:j,65:B,66:Y,67:L,68:I,69:U,70:F,71:X,72:z,73:Q,74:W,75:$,76:q,77:V,78:G,79:H,80:K,81:J,82:Z,83:tt,84:et}),t(at,[2,28]),t(at,[2,29]),t(ct,[2,46]),t(dt,[2,78],{85:93,45:145,86:st,87:rt,89:lt,90:ot}),t(pt,[2,80]),{88:[1,146]},t(pt,[2,82]),t(pt,[2,83]),t(ct,[2,47]),t(ct,[2,48]),t(ct,[2,49]),t(ct,[2,50]),t(ct,[2,51]),t(ct,[2,52]),t(ct,[2,53]),t(ct,[2,54]),t(ct,[2,55]),t(ct,[2,56]),t(ct,[2,57]),t(ct,[2,58]),t(ct,[2,59]),t(ct,[2,60]),t(ct,[2,61]),t(ct,[2,62]),t(ct,[2,63]),t(ct,[2,64]),t(ct,[2,65]),t(ct,[2,67]),t(ct,[2,68]),t(ct,[2,69]),t(ct,[2,70]),t(ct,[2,71]),t(ct,[2,72]),t(ct,[2,73]),t(ct,[2,74]),t(ct,[2,75]),t(ct,[2,76]),t(ct,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},t(ut,[2,35]),t(ut,[2,36]),t(ut,[2,37]),t(ut,[2,38]),t(ut,[2,39]),t(ut,[2,40]),t(ut,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},t(nt,[2,25]),t(it,[2,45]),t(dt,[2,79]),t(pt,[2,81]),t(ct,[2,31]),t(ct,[2,42]),t(yt,[2,32]),t(yt,[2,33],{15:[1,152]}),t(ht,[2,10]),t(yt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],a=[null],s=[],r=this.table,l="",o=0,c=0,h=s.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(p.yy[u]=this.yy[u]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;s.push(y);var f=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,g,_,x,m,E,A,S,v,C={};;){if(g=i[i.length-1],this.defaultActions[g]?_=this.defaultActions[g]:(null==b&&(v=void 0,"number"!=typeof(v=n.pop()||d.lex()||1)&&(v instanceof Array&&(v=(n=v).pop()),v=e.symbols_[v]||v),b=v),_=r[g]&&r[g][b]),void 0===_||!_.length||!_[0]){var k="";for(m in S=[],r[g])this.terminals_[m]&&m>2&&S.push("'"+this.terminals_[m]+"'");k=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(k,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:y,expected:S})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+b);switch(_[0]){case 1:i.push(b),a.push(d.yytext),s.push(d.yylloc),i.push(_[1]),b=null,c=d.yyleng,l=d.yytext,o=d.yylineno,y=d.yylloc;break;case 2:if(E=this.productions_[_[1]][1],C.$=a[a.length-E],C._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},f&&(C._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(x=this.performAction.apply(C,[l,c,o,p.yy,_[1],a,s].concat(h))))return x;E&&(i=i.slice(0,-1*E*2),a=a.slice(0,-1*E),s=s.slice(0,-1*E)),i.push(this.productions_[_[1]][0]),a.push(C.$),s.push(C._$),A=r[i[i.length-2]][i[i.length-1]],i.push(A);break;case 3:return!0}}return!0}},bt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in a)this[s]=a[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),s=0;s<a.length;s++)if((i=this._input.match(this.rules[a[s]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,a[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,i,n){switch(i){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 78:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:case 75:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:case 58:return this.begin("rel_u"),76;case 59:case 60:return this.begin("rel_d"),77;case 61:case 62:return this.begin("rel_l"),78;case 63:case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:case 84:this.popState(),this.popState();break;case 74:case 76:return 90;case 77:this.begin("string");break;case 79:case 85:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[70,71,72,73],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}};function gt(){this.yy={}}return ft.lexer=bt,gt.prototype=ft,ft.Parser=gt,new gt}());l.parser=l;const o=l;let h=[],d=[""],p="global",u="",y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],f=[],b="",g=!1,_=4,x=2;var m;const E=function(t){return null==t?h:h.filter((e=>e.parentBoundary===t))},A=function(){return g},S={addPersonOrSystem:function(t,e,i,n,a,s,r){if(null===e||null===i)return;let l={};const o=h.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,h.push(l)),l.label=null==i?{text:""}:{text:i},null==n)l.descr={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]={text:e}}else l.descr={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.link=r;l.typeC4Shape={text:t},l.parentBoundary=p,l.wrap=A()},addPersonOrSystemBoundary:function(t,e,i,n,a){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==i)s.type={text:"system"};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]={text:e}}else s.type={text:i};if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]=e}else s.tags=n;if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.link=a;s.parentBoundary=p,s.wrap=A(),u=p,p=t,d.push(u)},addContainer:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=A(),o.typeC4Shape={text:t},o.parentBoundary=p},addContainerBoundary:function(t,e,i,n,a){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==i)s.type={text:"container"};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]={text:e}}else s.type={text:i};if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]=e}else s.tags=n;if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.link=a;s.parentBoundary=p,s.wrap=A(),u=p,p=t,d.push(u)},addComponent:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=A(),o.typeC4Shape={text:t},o.parentBoundary=p},addDeploymentNode:function(t,e,i,n,a,s,r,l){if(null===e||null===i)return;let o={};const c=y.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,y.push(o)),o.label=null==i?{text:""}:{text:i},null==n)o.type={text:"node"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.type={text:n};if(null==a)o.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.descr={text:a};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=p,o.wrap=A(),u=p,p=e,d.push(u)},popBoundaryParseStack:function(){p=u,d.pop(),u=d.pop(),d.push(u)},addRel:function(t,e,i,n,a,s,r,l,o){if(null==t||null==e||null==i||null==n)return;let c={};const h=f.find((t=>t.from===e&&t.to===i));if(h?c=h:f.push(c),c.type=t,c.from=e,c.to=i,c.label={text:n},null==a)c.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]={text:e}}else c.techn={text:a};if(null==s)c.descr={text:""};else if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]={text:e}}else c.descr={text:s};if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]=e}else c.sprite=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=A()},updateElStyle:function(t,e,i,n,a,s,r,l,o,c,d){let p=h.find((t=>t.alias===e));if(void 0!==p||(p=y.find((t=>t.alias===e)),void 0!==p)){if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];p[t]=e}else p.bgColor=i;if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];p[t]=e}else p.fontColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];p[t]=e}else p.borderColor=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];p[t]=e}else p.shadowing=s;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];p[t]=e}else p.shape=r;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];p[t]=e}else p.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];p[t]=e}else p.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];p[t]=e}else p.legendText=c;if(null!=d)if("object"==typeof d){let[t,e]=Object.entries(d)[0];p[t]=e}else p.legendSprite=d}},updateRelStyle:function(t,e,i,n,a,s,r){const l=f.find((t=>t.from===e&&t.to===i));if(void 0!==l){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]=e}else l.textColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.lineColor=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(s);if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(r)}},updateLayoutConfig:function(t,e,i){let n=_,a=x;if("object"==typeof e){const t=Object.values(e)[0];n=parseInt(t)}else n=parseInt(e);if("object"==typeof i){const t=Object.values(i)[0];a=parseInt(t)}else a=parseInt(i);n>=1&&(_=n),a>=1&&(x=a)},autoWrap:A,setWrap:function(t){g=t},getC4ShapeArray:E,getC4Shape:function(t){return h.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(E(t))},getBoundarys:function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return p},getParentBoundaryParse:function(){return u},getRels:function(){return f},getTitle:function(){return b},getC4Type:function(){return m},getC4ShapeInRow:function(){return _},getC4BoundaryInRow:function(){return x},setAccTitle:n.s,getAccTitle:n.g,getAccDescription:n.a,setAccDescription:n.b,parseDirective:function(t,e,i){n.m.parseDirective(this,t,e,i)},getConfig:()=>(0,n.c)().c4,clear:function(){h=[],y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],u="",p="global",d=[""],f=[],d=[""],b="",g=!1,_=4,x=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=(0,n.d)(t,(0,n.c)());b=e},setC4Type:function(t){let e=(0,n.d)(t,(0,n.c)());m=e}},v=function(t,e){return(0,s.d)(t,e)},C=function(t,e,i,n,a,s){const l=t.append("image");l.attr("width",e),l.attr("height",i),l.attr("x",n),l.attr("y",a);let o=s.startsWith("data:image/png;base64")?s:(0,r.Nm)(s);l.attr("xlink:href",o)},k=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),O=function(){function t(t,e,i,n,s,r,l){a(e.append("text").attr("x",i+s/2).attr("y",n+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,i,s,r,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:p}=c,u=t.split(n.e.lineBreakRegex);for(let n=0;n<u.length;n++){const t=n*h-h*(u.length-1)/2,l=e.append("text").attr("x",i+r/2).attr("y",s).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",h).style("font-weight",p).style("font-family",d);l.append("tspan").attr("dy",t).text(u[n]).attr("alignment-baseline","mathematical"),a(l,o)}}function i(t,i,n,s,r,l,o,c){const h=i.append("switch"),d=h.append("foreignObject").attr("x",n).attr("y",s).attr("width",r).attr("height",l).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,n,s,r,0,o,c),a(d,o)}function a(t,e){for(const i in e)e.hasOwnProperty(i)&&t.attr(i,e[i])}return function(n){return"fo"===n.textPlacement?i:"old"===n.textPlacement?t:e}}(),T=function(t,e,i){const n=t.append("g");let a=e.bgColor?e.bgColor:"none",s=e.borderColor?e.borderColor:"#444444",r=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let o={x:e.x,y:e.y,fill:a,stroke:s,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};v(n,o);let c=i.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=r,O(i)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=i.boundaryFont(),c.fontColor=r,O(i)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=i.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=r,O(i)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},w=function(t,e,i){var n;let a=e.bgColor?e.bgColor:i[e.typeC4Shape.text+"_bg_color"],r=e.borderColor?e.borderColor:i[e.typeC4Shape.text+"_border_color"],l=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const h=(0,s.g)();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":h.x=e.x,h.y=e.y,h.fill=a,h.width=e.width,h.height=e.height,h.stroke=r,h.rx=2.5,h.ry=2.5,h.attrs={"stroke-width":.5},v(c,h);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",a).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":c.append("path").attr("fill",a).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let d=k(i,e.typeC4Shape.text);switch(c.append("text").attr("fill",l).attr("font-family",d.fontFamily).attr("font-size",d.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":C(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let p=i[e.typeC4Shape.text+"Font"]();return p.fontWeight="bold",p.fontSize=p.fontSize+2,p.fontColor=l,O(i)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:l},p),p=i[e.typeC4Shape.text+"Font"](),p.fontColor=l,e.techn&&""!==(null==(n=e.techn)?void 0:n.text)?O(i)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:l,"font-style":"italic"},p):e.type&&""!==e.type.text&&O(i)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:l,"font-style":"italic"},p),e.descr&&""!==e.descr.text&&(p=i.personFont(),p.fontColor=l,O(i)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},p)),e.height},D=(t,e,i)=>{const n=t.append("g");let a=0;for(let s of e){let t=s.textColor?s.textColor:"#444444",e=s.lineColor?s.lineColor:"#444444",r=s.offsetX?parseInt(s.offsetX):0,l=s.offsetY?parseInt(s.offsetY):0,o="";if(0===a){let t=n.append("line");t.attr("x1",s.startPoint.x),t.attr("y1",s.startPoint.y),t.attr("x2",s.endPoint.x),t.attr("y2",s.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)"),a=-1}else{let t=n.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=i.messageFont();O(i)(s.label.text,n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+l,s.label.width,s.label.height,{fill:t},c),s.techn&&""!==s.techn.text&&(c=i.messageFont(),O(i)("["+s.techn.text+"]",n,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+i.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},R=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},N=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},P=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},M=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},j=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},B=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},Y=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};let L=0,I=0,U=4,F=2;l.yy=S;let X={};class z{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,Q(t.db.getConfig())}setData(t,e,i,n){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=i,this.nextData.stopy=this.data.stopy=n}updateVal(t,e,i,n){void 0===t[e]?t[e]=i:t[e]=n(i,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,i=e+t.width,n=this.nextData.starty+2*t.margin,a=n+t.height;(e>=this.data.widthLimit||i>=this.data.widthLimit||this.nextData.cnt>U)&&(e=this.nextData.startx+t.margin+X.nextLinePaddingX,n=this.nextData.stopy+2*t.margin,this.nextData.stopx=i=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=n+t.height,this.nextData.cnt=1),t.x=e,t.y=n,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",i,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",i,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Q(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const Q=function(t){(0,n.f)(X,t),t.fontFamily&&(X.personFontFamily=X.systemFontFamily=X.messageFontFamily=t.fontFamily),t.fontSize&&(X.personFontSize=X.systemFontSize=X.messageFontSize=t.fontSize),t.fontWeight&&(X.personFontWeight=X.systemFontWeight=X.messageFontWeight=t.fontWeight)},W=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),$=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function q(t,e,i,a,s){if(!e[t].width)if(i)e[t].text=(0,n.w)(e[t].text,s,a),e[t].textLines=e[t].text.split(n.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,n.j)(e[t].text,a);else{let i=e[t].text.split(n.e.lineBreakRegex);e[t].textLines=i.length;let s=0;e[t].height=0,e[t].width=0;for(const r of i)e[t].width=Math.max((0,n.h)(r,a),e[t].width),s=(0,n.j)(r,a),e[t].height=e[t].height+s}}const V=function(t,e,i){e.x=i.data.startx,e.y=i.data.starty,e.width=i.data.stopx-i.data.startx,e.height=i.data.stopy-i.data.starty,e.label.y=X.c4ShapeMargin-35;let a=e.wrap&&X.wrap,s=$(X);s.fontSize=s.fontSize+2,s.fontWeight="bold",q("label",e,a,s,(0,n.h)(e.label.text,s)),T(t,e,X)},G=function(t,e,i,a){let s=0;for(const r of a){s=0;const a=i[r];let l=W(X,a.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,a.typeC4Shape.width=(0,n.h)("\xab"+a.typeC4Shape.text+"\xbb",l),a.typeC4Shape.height=l.fontSize+2,a.typeC4Shape.Y=X.c4ShapePadding,s=a.typeC4Shape.Y+a.typeC4Shape.height-4,a.image={width:0,height:0,Y:0},a.typeC4Shape.text){case"person":case"external_person":a.image.width=48,a.image.height=48,a.image.Y=s,s=a.image.Y+a.image.height}a.sprite&&(a.image.width=48,a.image.height=48,a.image.Y=s,s=a.image.Y+a.image.height);let o=a.wrap&&X.wrap,c=X.width-2*X.c4ShapePadding,h=W(X,a.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",q("label",a,o,h,c),a.label.Y=s+8,s=a.label.Y+a.label.height,a.type&&""!==a.type.text){a.type.text="["+a.type.text+"]",q("type",a,o,W(X,a.typeC4Shape.text),c),a.type.Y=s+5,s=a.type.Y+a.type.height}else if(a.techn&&""!==a.techn.text){a.techn.text="["+a.techn.text+"]",q("techn",a,o,W(X,a.techn.text),c),a.techn.Y=s+5,s=a.techn.Y+a.techn.height}let d=s,p=a.label.width;if(a.descr&&""!==a.descr.text){q("descr",a,o,W(X,a.typeC4Shape.text),c),a.descr.Y=s+20,s=a.descr.Y+a.descr.height,p=Math.max(a.label.width,a.descr.width),d=s-5*a.descr.textLines}p+=X.c4ShapePadding,a.width=Math.max(a.width||X.width,p,X.width),a.height=Math.max(a.height||X.height,d,X.height),a.margin=a.margin||X.c4ShapeMargin,t.insert(a),w(e,a,X)}t.bumpLastMargin(X.c4ShapeMargin)};class H{constructor(t,e){this.x=t,this.y=e}}let K=function(t,e){let i=t.x,n=t.y,a=e.x,s=e.y,r=i+t.width/2,l=n+t.height/2,o=Math.abs(i-a),c=Math.abs(n-s),h=c/o,d=t.height/t.width,p=null;return n==s&&i<a?p=new H(i+t.width,l):n==s&&i>a?p=new H(i,l):i==a&&n<s?p=new H(r,n+t.height):i==a&&n>s&&(p=new H(r,n)),i>a&&n<s?p=d>=h?new H(i,l+h*t.width/2):new H(r-o/c*t.height/2,n+t.height):i<a&&n<s?p=d>=h?new H(i+t.width,l+h*t.width/2):new H(r+o/c*t.height/2,n+t.height):i<a&&n>s?p=d>=h?new H(i+t.width,l-h*t.width/2):new H(r+t.height/2*o/c,n):i>a&&n>s&&(p=d>=h?new H(i,l-t.width/2*h):new H(r-t.height/2*o/c,n)),p},J=function(t,e){let i={x:0,y:0};i.x=e.x+e.width/2,i.y=e.y+e.height/2;let n=K(t,i);return i.x=t.x+t.width/2,i.y=t.y+t.height/2,{startPoint:n,endPoint:K(e,i)}};function Z(t,e,i,n,a){let s=new z(a);s.data.widthLimit=i.data.widthLimit/Math.min(F,n.length);for(let[r,l]of n.entries()){let n=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=n,n=l.image.Y+l.image.height);let o=l.wrap&&X.wrap,c=$(X);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",q("label",l,o,c,s.data.widthLimit),l.label.Y=n+8,n=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",q("type",l,o,$(X),s.data.widthLimit),l.type.Y=n+5,n=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=$(X);t.fontSize=t.fontSize-2,q("descr",l,o,t,s.data.widthLimit),l.descr.Y=n+20,n=l.descr.Y+l.descr.height}if(0==r||r%F==0){let t=i.data.startx+X.diagramMarginX,e=i.data.stopy+X.diagramMarginY+n;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+X.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=a.db.getC4ShapeArray(l.alias),d=a.db.getC4ShapeKeys(l.alias);d.length>0&&G(s,t,h,d),e=l.alias;let p=a.db.getBoundarys(e);p.length>0&&Z(t,e,s,p,a),"global"!==l.alias&&V(t,l,s),i.data.stopy=Math.max(s.data.stopy+X.c4ShapeMargin,i.data.stopy),i.data.stopx=Math.max(s.data.stopx+X.c4ShapeMargin,i.data.stopx),L=Math.max(L,i.data.stopx),I=Math.max(I,i.data.stopy)}}const tt={drawPersonOrSystemArray:G,drawBoundary:V,setConf:Q,draw:function(t,e,i,s){X=(0,n.c)().c4;const r=(0,n.c)().securityLevel;let l;"sandbox"===r&&(l=(0,a.Ys)("#i"+e));const o="sandbox"===r?(0,a.Ys)(l.nodes()[0].contentDocument.body):(0,a.Ys)("body");let c=s.db;s.db.setWrap(X.wrap),U=c.getC4ShapeInRow(),F=c.getC4BoundaryInRow(),n.l.debug(`C:${JSON.stringify(X,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,a.Ys)(`[id="${e}"]`);B(h),j(h),Y(h);let d=new z(s);d.setData(X.diagramMarginX,X.diagramMarginX,X.diagramMarginY,X.diagramMarginY),d.data.widthLimit=screen.availWidth,L=X.diagramMarginX,I=X.diagramMarginY;const p=s.db.getTitle();Z(h,"",d,s.db.getBoundarys(""),s),R(h),N(h),M(h),P(h),function(t,e,i,a){let s=0;for(let l of e){s+=1;let t=l.wrap&&X.wrap,e={fontFamily:(r=X).messageFontFamily,fontSize:r.messageFontSize,fontWeight:r.messageFontWeight};"C4Dynamic"===a.db.getC4Type()&&(l.label.text=s+": "+l.label.text);let o=(0,n.h)(l.label.text,e);q("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,n.h)(l.techn.text,e),q("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,n.h)(l.descr.text,e),q("descr",l,t,e,o));let c=i(l.from),h=i(l.to),d=J(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;D(t,e,X)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=L,d.data.stopy=I;const u=d.data;let y=u.stopy-u.starty+2*X.diagramMarginY;const f=u.stopx-u.startx+2*X.diagramMarginX;p&&h.append("text").text(p).attr("x",(u.stopx-u.startx)/2-4*X.diagramMarginX).attr("y",u.starty+X.diagramMarginY),(0,n.i)(h,y,f,X.useMaxWidth);const b=p?60:0;h.attr("viewBox",u.startx-X.diagramMarginX+" -"+(X.diagramMarginY+b)+" "+f+" "+(y+b)),n.l.debug("models:",u)}},et={parser:o,db:S,renderer:tt,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:t=>{tt.setConf(t.c4)}}},47435:(t,e,i)=>{i.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var n=i(7608),a=i(99854);const s=(t,e)=>{const i=t.append("rect");if(i.attr("x",e.x),i.attr("y",e.y),i.attr("fill",e.fill),i.attr("stroke",e.stroke),i.attr("width",e.width),i.attr("height",e.height),void 0!==e.rx&&i.attr("rx",e.rx),void 0!==e.ry&&i.attr("ry",e.ry),void 0!==e.attrs)for(const n in e.attrs)i.attr(n,e.attrs[n]);return void 0!==e.class&&i.attr("class",e.class),i},r=(t,e)=>{const i={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,i).lower()},l=(t,e)=>{const i=e.text.replace(a.J," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),void 0!==e.class&&n.attr("class",e.class);const s=n.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(i),n},o=(t,e,i,a)=>{const s=t.append("image");s.attr("x",e),s.attr("y",i);const r=(0,n.Nm)(a);s.attr("xlink:href",r)},c=(t,e,i,a)=>{const s=t.append("use");s.attr("x",e),s.attr("y",i);const r=(0,n.Nm)(a);s.attr("xlink:href",`#${r}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/134f983b.38476e54.js b/assets/js/134f983b.38476e54.js new file mode 100644 index 0000000000..bf7f0d4cef --- /dev/null +++ b/assets/js/134f983b.38476e54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93918],{59009:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var a=n(24246),o=n(71670);const s={mdx:{format:"md"},date:"2021-12-10T19:00"},r="2.0.0-beta.12",c={permalink:"/changelog/2.0.0-beta.12",source:"@site/changelog/source/2.0.0-beta.12.md",title:"2.0.0-beta.12",description:"Bad npm publish, use beta.13 instead",date:"2021-12-10T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2021-12-10T19:00"},unlisted:!1,prevItem:{title:"2.0.0-beta.13",permalink:"/changelog/2.0.0-beta.13"},nextItem:{title:"2.0.0-beta.11",permalink:"/changelog/2.0.0-beta.11"},listPageLink:"/changelog/page/2"},i={authorsImageUrls:[]},u=[];function l(e){const t={p:"p",...(0,o.a)(),...e.components};return(0,a.jsx)(t.p,{children:"Bad npm publish, use beta.13 instead"})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var a=n(27378);const o={},s=a.createContext(o);function r(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/138ea42e.f59a3057.js b/assets/js/138ea42e.f59a3057.js new file mode 100644 index 0000000000..c111e41172 --- /dev/null +++ b/assets/js/138ea42e.f59a3057.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29987],{86949:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>r,toc:()=>c});var o=a(24246),s=a(71670);const n={title:"Towards Docusaurus 2",author:"Endilie Yacop Sucipto",authorTitle:"Maintainer of Docusaurus",authorURL:"https://github.com/endiliey",authorImageURL:"https://github.com/endiliey.png",authorTwitter:"endiliey",tags:["new","adoption"]},i=void 0,r={permalink:"/blog/2018/09/11/Towards-Docusaurus-2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx",source:"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx",title:"Towards Docusaurus 2",description:"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.",date:"2018-09-11T00:00:00.000Z",tags:[{label:"new",permalink:"/blog/tags/new"},{label:"adoption",permalink:"/blog/tags/adoption"}],readingTime:9.25,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png"}],frontMatter:{title:"Towards Docusaurus 2",author:"Endilie Yacop Sucipto",authorTitle:"Maintainer of Docusaurus",authorURL:"https://github.com/endiliey",authorImageURL:"https://github.com/endiliey.png",authorTwitter:"endiliey",tags:["new","adoption"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"},nextItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},u={authorsImageUrls:[void 0]},c=[];function l(e){const t={a:"a",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:["Docusaurus was ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"officially announced"})," over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as ",(0,o.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"}),", ",(0,o.jsx)(t.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,o.jsx)(t.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,o.jsx)(t.a,{href:"https://reasonml.github.io/",children:"Reason"})," and ",(0,o.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"}),"."]}),"\n",(0,o.jsx)(t.p,{children:"There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89."})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>i});var o=a(27378);const s={},n=o.createContext(s);function i(e){const t=o.useContext(n);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/13942.74779332.js b/assets/js/13942.74779332.js new file mode 100644 index 0000000000..72e71449d8 --- /dev/null +++ b/assets/js/13942.74779332.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13942],{13942:(e,t,i)=>{i.d(t,{diagram:()=>T});var r=i(99854),n=i(63294),s=i(9500),a=i(88472),c=(i(27693),i(7608),i(31699),function(){var e=function(e,t,i,r){for(i=i||{},r=e.length;r--;i[e[r]]=t);return i},t=[1,3],i=[1,5],r=[1,6],n=[1,7],s=[1,8],a=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],c=[1,22],l=[2,13],o=[1,26],h=[1,27],u=[1,28],d=[1,29],y=[1,30],p=[1,31],_=[1,24],g=[1,32],E=[1,33],R=[1,36],m=[71,72],f=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],I=[1,56],b=[1,57],k=[1,58],S=[1,59],T=[1,60],N=[1,61],v=[1,62],x=[62,63],A=[1,74],q=[1,70],w=[1,71],$=[1,72],O=[1,73],C=[1,75],D=[1,79],L=[1,80],F=[1,77],M=[1,78],P=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],V={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(e,t,i,r,n,s,a){var c=s.length-1;switch(n){case 6:this.$=s[c].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=s[c].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(s[c],"type_directive");break;case 11:s[c]=s[c].trim().replace(/'/g,'"'),r.parseDirective(s[c],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(s[c-3],s[c-4]);break;case 20:r.setNewReqId(s[c-2]);break;case 21:r.setNewReqText(s[c-2]);break;case 22:r.setNewReqRisk(s[c-2]);break;case 23:r.setNewReqVerifyMethod(s[c-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(s[c-3]);break;case 40:r.setNewElementType(s[c-2]);break;case 41:r.setNewElementDocRef(s[c-2]);break;case 44:r.addRelationship(s[c-2],s[c],s[c-4]);break;case 45:r.addRelationship(s[c-2],s[c-4],s[c]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:t,9:4,14:i,16:r,18:n,19:s},{1:[3]},{3:10,4:2,5:[1,9],6:t,9:4,14:i,16:r,18:n,19:s},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},e(a,[2,8]),{20:[2,9]},{3:16,4:2,6:t,9:4,14:i,16:r,18:n,19:s},{1:[2,2]},{4:21,5:c,7:17,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{11:34,12:[1,35],22:R},e([12,22],[2,10]),e(a,[2,6]),e(a,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:c,7:38,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:39,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:40,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:41,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{4:21,5:c,7:42,8:l,9:4,14:i,16:r,18:n,19:s,23:18,24:19,25:20,26:23,32:25,40:o,41:h,42:u,43:d,44:y,45:p,53:_,71:g,72:E},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},e(m,[2,26]),e(m,[2,27]),e(m,[2,28]),e(m,[2,29]),e(m,[2,30]),e(m,[2,31]),e(f,[2,55]),e(f,[2,56]),e(a,[2,4]),{13:51,21:[1,52]},e(a,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:I,65:b,66:k,67:S,68:T,69:N,70:v},{61:63,64:I,65:b,66:k,67:S,68:T,69:N,70:v},{11:64,22:R},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},e(x,[2,46]),e(x,[2,47]),e(x,[2,48]),e(x,[2,49]),e(x,[2,50]),e(x,[2,51]),e(x,[2,52]),{63:[1,68]},e(a,[2,5]),{5:A,29:69,30:q,33:w,35:$,37:O,39:C},{5:D,39:L,55:76,56:F,58:M},{32:81,71:g,72:E},{32:82,71:g,72:E},e(P,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:A,29:87,30:q,33:w,35:$,37:O,39:C},e(P,[2,25]),e(P,[2,39]),{31:[1,88]},{31:[1,89]},{5:D,39:L,55:90,56:F,58:M},e(P,[2,43]),e(P,[2,44]),e(P,[2,45]),{32:91,71:g,72:E},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},e(P,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},e(P,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:A,29:116,30:q,33:w,35:$,37:O,39:C},{5:A,29:117,30:q,33:w,35:$,37:O,39:C},{5:A,29:118,30:q,33:w,35:$,37:O,39:C},{5:A,29:119,30:q,33:w,35:$,37:O,39:C},{5:D,39:L,55:120,56:F,58:M},{5:D,39:L,55:121,56:F,58:M},e(P,[2,20]),e(P,[2,21]),e(P,[2,22]),e(P,[2,23]),e(P,[2,40]),e(P,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(e,t){if(!t.recoverable){var i=new Error(e);throw i.hash=t,i}this.trace(e)},parse:function(e){var t=this,i=[0],r=[],n=[null],s=[],a=this.table,c="",l=0,o=0,h=s.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(d.yy[y]=this.yy[y]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var p=u.yylloc;s.push(p);var _=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,E,R,m,f,I,b,k,S,T={};;){if(E=i[i.length-1],this.defaultActions[E]?R=this.defaultActions[E]:(null==g&&(S=void 0,"number"!=typeof(S=r.pop()||u.lex()||1)&&(S instanceof Array&&(S=(r=S).pop()),S=t.symbols_[S]||S),g=S),R=a[E]&&a[E][g]),void 0===R||!R.length||!R[0]){var N="";for(f in k=[],a[E])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");N=u.showPosition?"Parse error on line "+(l+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(N,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:p,expected:k})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+g);switch(R[0]){case 1:i.push(g),n.push(u.yytext),s.push(u.yylloc),i.push(R[1]),g=null,o=u.yyleng,c=u.yytext,l=u.yylineno,p=u.yylloc;break;case 2:if(I=this.productions_[R[1]][1],T.$=n[n.length-I],T._$={first_line:s[s.length-(I||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(I||1)].first_column,last_column:s[s.length-1].last_column},_&&(T._$.range=[s[s.length-(I||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(T,[c,o,l,d.yy,R[1],n,s].concat(h))))return m;I&&(i=i.slice(0,-1*I*2),n=n.slice(0,-1*I),s=s.slice(0,-1*I)),i.push(this.productions_[R[1]][0]),n.push(T.$),s.push(T._$),b=a[i[i.length-2]][i[i.length-1]],i.push(b);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,i=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===r.length?this.yylloc.first_column:0)+r[r.length-i.length].length-i[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var i,r,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],i=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in n)this[s]=n[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),s=0;s<n.length;s++)if((i=this._input.match(this.rules[n[s]]))&&(!t||i[0].length>t[0].length)){if(t=i,r=s,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[s])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,i,r){switch(i){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return t.yytext=t.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}};function U(){this.yy={}}return V.lexer=Y,U.prototype=V,V.Parser=U,new U}());c.parser=c;const l=c;let o=[],h={},u={},d={},y={};const p={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(e,t,i){r.m.parseDirective(this,e,t,i)},getConfig:()=>(0,r.c)().req,addRequirement:(e,t)=>(void 0===u[e]&&(u[e]={name:e,type:t,id:h.id,text:h.text,risk:h.risk,verifyMethod:h.verifyMethod}),h={},u[e]),getRequirements:()=>u,setNewReqId:e=>{void 0!==h&&(h.id=e)},setNewReqText:e=>{void 0!==h&&(h.text=e)},setNewReqRisk:e=>{void 0!==h&&(h.risk=e)},setNewReqVerifyMethod:e=>{void 0!==h&&(h.verifyMethod=e)},setAccTitle:r.s,getAccTitle:r.g,setAccDescription:r.b,getAccDescription:r.a,addElement:e=>(void 0===y[e]&&(y[e]={name:e,type:d.type,docRef:d.docRef},r.l.info("Added new requirement: ",e)),d={},y[e]),getElements:()=>y,setNewElementType:e=>{void 0!==d&&(d.type=e)},setNewElementDocRef:e=>{void 0!==d&&(d.docRef=e)},addRelationship:(e,t,i)=>{o.push({type:e,src:t,dst:i})},getRelationships:()=>o,clear:()=>{o=[],h={},u={},d={},y={},(0,r.v)()}},_={CONTAINS:"contains",ARROW:"arrow"},g=_,E=(e,t)=>{let i=e.append("defs").append("marker").attr("id",_.CONTAINS+"_line_ending").attr("refX",0).attr("refY",t.line_height/2).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",t.line_height/2).attr("cy",t.line_height/2).attr("r",t.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",t.line_height).attr("y1",t.line_height/2).attr("y2",t.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",t.line_height).attr("x1",t.line_height/2).attr("x2",t.line_height/2).attr("stroke-width",1),e.append("defs").append("marker").attr("id",_.ARROW+"_line_ending").attr("refX",t.line_height).attr("refY",.5*t.line_height).attr("markerWidth",t.line_height).attr("markerHeight",t.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${t.line_height},${t.line_height/2}\n M${t.line_height},${t.line_height/2}\n L0,${t.line_height}`).attr("stroke-width",1)};let R={},m=0;const f=(e,t)=>e.insert("rect","#"+t).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",R.rect_min_width+"px").attr("height",R.rect_min_height+"px"),I=(e,t,i)=>{let r=R.rect_min_width/2,n=e.append("text").attr("class","req reqLabel reqTitle").attr("id",t).attr("x",r).attr("y",R.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((e=>{0==s?n.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",0).text(e):n.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",.75*R.line_height).text(e),s++}));let a=1.5*R.rect_padding+s*R.line_height*.75;return e.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",R.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:n,y:a}},b=(e,t,i,r)=>{let n=e.append("text").attr("class","req reqLabel").attr("id",t).attr("x",R.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((e=>{let t=e.length;for(;t>30&&s<3;){let i=e.substring(0,30);t=(e=e.substring(30,e.length)).length,a[a.length]=i,s++}if(3==s){let e=a[a.length-1];a[a.length-1]=e.substring(0,e.length-4)+"..."}else a[a.length]=e;s=0})),a.forEach((e=>{n.append("tspan").attr("x",R.rect_padding).attr("dy",R.line_height).text(e)})),n},k=function(e,t,i,s,a){const c=i.edge(S(t.src),S(t.dst)),l=(0,n.jvg)().x((function(e){return e.x})).y((function(e){return e.y})),o=e.insert("path","#"+s).attr("class","er relationshipLine").attr("d",l(c.points)).attr("fill","none");t.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+r.e.getUrl(R.arrowMarkerAbsolute)+"#"+t.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+r.e.getUrl(R.arrowMarkerAbsolute)+"#"+g.ARROW+"_line_ending)")),((e,t,i,r)=>{const n=t.node().getTotalLength(),s=t.node().getPointAtLength(.5*n),a="rel"+m;m++;const c=e.append("text").attr("class","req relationshipLabel").attr("id",a).attr("x",s.x).attr("y",s.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();e.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-c.width/2).attr("y",s.y-c.height/2).attr("width",c.width).attr("height",c.height).attr("fill","white").attr("fill-opacity","85%")})(e,o,0,`<<${t.type}>>`)},S=e=>e.replace(/\s/g,"").replace(/\./g,"_"),T={parser:l,db:p,renderer:{draw:(e,t,i,c)=>{R=(0,r.c)().requirement;const l=R.securityLevel;let o;"sandbox"===l&&(o=(0,n.Ys)("#i"+t));const h=("sandbox"===l?(0,n.Ys)(o.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id='${t}']`);E(h,R);const u=new a.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let d=c.db.getRequirements(),y=c.db.getElements(),p=c.db.getRelationships();var _,g,m;_=d,g=u,m=h,Object.keys(_).forEach((e=>{let t=_[e];e=S(e),r.l.info("Added new requirement: ",e);const i=m.append("g").attr("id",e),n=f(i,"req-"+e);let s=I(i,e+"_title",[`<<${t.type}>>`,`${t.name}`]);b(i,e+"_body",[`Id: ${t.id}`,`Text: ${t.text}`,`Risk: ${t.risk}`,`Verification: ${t.verifyMethod}`],s.y);const a=n.node().getBBox();g.setNode(e,{width:a.width,height:a.height,shape:"rect",id:e})})),((e,t,i)=>{Object.keys(e).forEach((r=>{let n=e[r];const s=S(r),a=i.append("g").attr("id",s),c="element-"+s,l=f(a,c);let o=I(a,c+"_title",["<<Element>>",`${r}`]);b(a,c+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],o.y);const h=l.node().getBBox();t.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(y,u,h),((e,t)=>{e.forEach((function(e){let i=S(e.src),r=S(e.dst);t.setEdge(i,r,{relationship:e})}))})(p,u),(0,s.bK)(u),function(e,t){t.nodes().forEach((function(i){void 0!==i&&void 0!==t.node(i)&&(e.select("#"+i),e.select("#"+i).attr("transform","translate("+(t.node(i).x-t.node(i).width/2)+","+(t.node(i).y-t.node(i).height/2)+" )"))}))}(h,u),p.forEach((function(e){k(h,e,u,t,c)}));const T=R.rect_padding,N=h.node().getBBox(),v=N.width+2*T,x=N.height+2*T;(0,r.i)(h,x,v,R.useMaxWidth),h.attr("viewBox",`${N.x-T} ${N.y-T} ${v} ${x}`)}},styles:e=>`\n\n marker {\n fill: ${e.relationColor};\n stroke: ${e.relationColor};\n }\n\n marker.cross {\n stroke: ${e.lineColor};\n }\n\n svg {\n font-family: ${e.fontFamily};\n font-size: ${e.fontSize};\n }\n\n .reqBox {\n fill: ${e.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${e.requirementBorderColor};\n stroke-width: ${e.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${e.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${e.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${e.requirementBorderColor};\n stroke-width: ${e.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${e.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${e.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/assets/js/13f3ee7a.bd0a3018.js b/assets/js/13f3ee7a.bd0a3018.js new file mode 100644 index 0000000000..61041246f0 --- /dev/null +++ b/assets/js/13f3ee7a.bd0a3018.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34221],{86057:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>h,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>m,toc:()=>r});var o=t(24246),n=t(71670);const i={mdx:{format:"md"},date:"2020-10-02T20:00",authors:["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},s="2.0.0-alpha.65",m={permalink:"/changelog/2.0.0-alpha.65",source:"@site/changelog/source/2.0.0-alpha.65.md",title:"2.0.0-alpha.65",description:"New Feature",date:"2020-10-02T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"aakhtar3",alias:"aakhtar3",url:"https://github.com/aakhtar3",imageURL:"https://github.com/aakhtar3.png",key:"aakhtar3"},{name:"Henry V\xe9lez",alias:"abadon7",url:"https://github.com/abadon7",imageURL:"https://github.com/abadon7.png",key:"abadon7"},{name:"hackerman",alias:"aeneasr",url:"https://github.com/aeneasr",imageURL:"https://github.com/aeneasr.png",key:"aeneasr"},{name:"Andrey Rublev",alias:"anru",url:"https://github.com/anru",imageURL:"https://github.com/anru.png",key:"anru"},{name:"Nahiyan Kamal",alias:"ayonious",url:"https://github.com/ayonious",imageURL:"https://github.com/ayonious.png",key:"ayonious"},{name:"R\xe9mi Doreau",alias:"ayshiff",url:"https://github.com/ayshiff",imageURL:"https://github.com/ayshiff.png",key:"ayshiff"},{name:"Gr\xe9gory Heitz",alias:"edno",url:"https://github.com/edno",imageURL:"https://github.com/edno.png",key:"edno"},{name:"Jeremy Hager",alias:"jeremyhager",url:"https://github.com/jeremyhager",imageURL:"https://github.com/jeremyhager.png",key:"jeremyhager"},{name:"Joel Marcey",alias:"JoelMarcey",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JoelMarcey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Long Ho",alias:"longlho",url:"https://github.com/longlho",imageURL:"https://github.com/longlho.png",key:"longlho"},{name:"moonrailgun",alias:"moonrailgun",url:"https://github.com/moonrailgun",imageURL:"https://github.com/moonrailgun.png",key:"moonrailgun"},{name:"Muskan Kumar",alias:"muskanvk",url:"https://github.com/muskanvk",imageURL:"https://github.com/muskanvk.png",key:"muskanvk"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tim Gates",alias:"timgates42",url:"https://github.com/timgates42",imageURL:"https://github.com/timgates42.png",key:"timgates42"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-10-02T20:00",authors:["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.66",permalink:"/changelog/2.0.0-alpha.66"},nextItem:{title:"2.0.0-alpha.64",permalink:"/changelog/2.0.0-alpha.64"},listPageLink:"/changelog/page/3"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},r=[];function u(a){return(0,o.jsx)(o.Fragment,{})}function g(a={}){const{wrapper:e}={...(0,n.a)(),...a.components};return e?(0,o.jsx)(e,{...a,children:(0,o.jsx)(u,{...a})}):u()}},71670:(a,e,t)=>{t.d(e,{Z:()=>m,a:()=>s});var o=t(27378);const n={},i=o.createContext(n);function s(a){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function m(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(n):a.components||n:s(a.components),o.createElement(i.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/14065.4e5dce9e.js b/assets/js/14065.4e5dce9e.js new file mode 100644 index 0000000000..b615aa0505 --- /dev/null +++ b/assets/js/14065.4e5dce9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[14065],{14065:(e,n,t)=>{t.r(n),t.d(n,{renderReloadPopup:()=>a});var r=t(24246),o=(t(27378),t(31542));function c(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const u="pwa-popup-container",i=()=>document.getElementById(u),l=()=>{const e=document.createElement("div");return e.id=u,document.body.appendChild(e),e};function a(e){var n;const u=null!==(n=i())&&void 0!==n?n:l();return Promise.all([t.e(40532),t.e(82005)]).then(t.bind(t,82005)).then((({default:n})=>{o.render((0,r.jsx)(n,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){c(e,n,t[n])}))}return e}({},e)),u)}))}}}]); \ No newline at end of file diff --git a/assets/js/141512d1.b6821d9a.js b/assets/js/141512d1.b6821d9a.js new file mode 100644 index 0000000000..867fd87523 --- /dev/null +++ b/assets/js/141512d1.b6821d9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44788],{36367:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},4923:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},1099:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},37358:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},72807:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=s(24246),o=s(71670);const i={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},t=void 0,a={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.",date:"2023-09-29T00:00:00.000Z",tags:[{label:"maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.745,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:s(36367).Z,authorsImageUrls:[void 0]},d=[{value:"Preparatory work",id:"preparatory-work",level:2},{value:"Preparing content for MDX v3",id:"preparing-content-for-mdx-v3",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Other breaking changes",id:"other-breaking-changes",level:2},{value:"Node.js 18.0",id:"nodejs-180",level:3},{value:"React 18.0",id:"react-180",level:3},{value:"TypeScript 5.0",id:"typescript-50",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"Admonition warning",id:"admonition-warning",level:3},{value:"Versioned sidebars",id:"versioned-sidebars",level:3},{value:"Try Docusaurus v3 today",id:"try-docusaurus-v3-today",level:2},{value:"Ask for help",id:"ask-for-help",level:2},{value:"Conclusion",id:"conclusion",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Docusaurus v3"})," is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,r.jsx)(n.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,r.jsx)(n.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 comes with a few ",(0,r.jsx)(n.strong,{children:"breaking changes"}),", many of which can be ",(0,r.jsx)(n.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,r.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,r.jsx)(n.strong,{children:"more strictly"})," and with ",(0,r.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:s(37358).Z+"",width:"1040",height:"546"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"v3.0.0-beta.0 release notes"})," for an exhaustive list."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"Don't be afraid",type:"tip",children:[(0,r.jsx)(n.p,{children:"There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes."}),(0,r.jsxs)(n.p,{children:["If your site is relatively small, with only a few customizations, you can probably ",(0,r.jsx)(n.a,{href:"#try-docusaurus-v3-today",children:"upgrade to Docusaurus v3"})," immediately."]})]}),"\n",(0,r.jsx)(n.h2,{id:"preparatory-work",children:"Preparatory work"}),"\n",(0,r.jsxs)(n.p,{children:["Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest ",(0,r.jsx)(n.a,{href:"/versions",children:"Docusaurus v2 version"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Depending on the complexity of your site, it may be a good idea to adopt the ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression testing workflow"})," that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade."]}),"\n",(0,r.jsxs)(n.p,{children:["We also recommend using the ",(0,r.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,r.jsx)(n.code,{children:"import"}),", or ",(0,r.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, ",(0,r.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,r.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"preparing-content-for-mdx-v3",children:"Preparing content for MDX v3"}),"\n",(0,r.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,r.jsx)(n.code,{children:".md"})," and ",(0,r.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,r.jsxs)(n.p,{children:["MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters."]}),"\n",(0,r.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,r.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,r.jsx)(n.admonition,{title:"Ask for help",type:"tip",children:(0,r.jsxs)(n.p,{children:["We have a dedicated ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})," discussion."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,r.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,r.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,r.jsx)(n.p,{children:"Each MDX version comes with its own playground:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,r.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"MDX"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use ",(0,r.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(1099).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,r.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3."}),"\n",(0,r.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,r.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,r.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,r.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,r.jsxs)(n.p,{children:["We provide a ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,r.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(4923).Z+"",width:"1161",height:"417"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"This CLI is a best effort, and will only report compilation errors."}),(0,r.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"Docusaurus PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/react-native-website/pull/3780",children:"React-Native PR"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jestjs/jest/pull/14463",children:"Jest PR"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"These upgrades permitted us to aggregate the most common content problems, and document how to best handle them."}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"{"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,r.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"{"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"<"})," character is used for opening ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Expected a closing tag for ",(0,r.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,r.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Available options to fix this error:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use inline code: ",(0,r.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:"<"})," or ",(0,r.jsx)(n.code,{children:"<"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\<"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus supports ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,r.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,r.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Unexpected character ",(0,r.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,r.jsx)(n.code,{children:"$"}),", or ",(0,r.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,r.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,r.jsx)(n.code,{children:"<"})," and ",(0,r.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,r.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,r.jsxs)(n.p,{children:["For users providing a ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,r.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,r.jsx)(n.code,{children:"h1"})," only gets used for ",(0,r.jsx)(n.code,{children:"# hi"})," but not for ",(0,r.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,r.jsxs)(n.li,{children:["a ",(0,r.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,r.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,r.jsxs)(n.p,{children:["Your ",(0,r.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,r.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,r.jsx)(n.strong,{children:"lower-case"}),": ",(0,r.jsx)(n.code,{children:"p"}),", ",(0,r.jsx)(n.code,{children:"h1"}),", ",(0,r.jsx)(n.code,{children:"img"}),", ",(0,r.jsx)(n.code,{children:"a"}),"..."]}),(0,r.jsxs)(n.p,{children:["For any other element, ",(0,r.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,r.jsxs)(n.p,{children:["In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,r.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,r.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,r.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you don't want an extra ",(0,r.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})}),(0,r.jsxs)(n.p,{children:['If your content contains "Markdown inlines" (',(0,r.jsx)(n.code,{children:"**"}),", ",(0,r.jsx)(n.code,{children:"*"}),", ",(0,r.jsx)(n.code,{children:"_"}),", ",(0,r.jsx)(n.code,{children:"[link](/path)"}),"), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade."]})]}),"\n",(0,r.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,r.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,r.jsxs)(n.p,{children:["Due to ",(0,r.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use the HTML code: ",(0,r.jsx)(n.code,{children:":"})]}),"\n",(0,r.jsxs)(n.li,{children:["Add a space after ",(0,r.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,r.jsx)(n.code,{children:": text"})]}),"\n",(0,r.jsxs)(n.li,{children:["Escape it: ",(0,r.jsx)(n.code,{children:"\\:"})," (unfortunately the ",(0,r.jsx)(n.code,{children:"\\"})," will be displayed under MDX v1)"]}),"\n"]})}),"\n",(0,r.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,r.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,r.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,r.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,r.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,r.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,r.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,r.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,r.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,r.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,r.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,r.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,r.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,r.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,r.jsx)(n.h2,{id:"other-breaking-changes",children:"Other breaking changes"}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"nodejs-180",children:"Node.js 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Node.js 16 ",(0,r.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"react-180",children:"React 18.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site."}),"\n",(0,r.jsx)(n.p,{children:"Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Read the official ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your first-party React code to figure out which components might be affected this React 18 upgrade."]}),(0,r.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,r.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript-50",children:"TypeScript 5.0"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,r.jsx)(n.strong,{children:"TypeScript >= 5.0"}),"."]}),"\n",(0,r.jsx)(n.admonition,{title:"How to prepare",type:"tip",children:(0,r.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3."})}),"\n",(0,r.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,r.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,r.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,r.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "^3.0.0-beta.0",\n }\n }\n'})}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,r.jsx)(n.h3,{id:"admonition-warning",children:"Admonition warning"}),"\n",(0,r.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,r.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,r.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.p,{children:["However, the color and icon is historically wrong. Docusaurus v3 re-introduces ",(0,r.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,r.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,r.jsx)(n.code,{children:":::danger"})," instead."]}),(0,r.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,r.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,r.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,r.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,r.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,r.jsx)(n.code,{children:":::danger"})," (red)."]})]}),"\n",(0,r.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned sidebars"}),"\n",(0,r.jsxs)(n.p,{children:["This breaking change will only affect ",(0,r.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating version ",(0,r.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,r.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,r.jsxs)(n.admonition,{title:"How to prepare",type:"tip",children:[(0,r.jsx)(n.p,{children:"Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly."}),(0,r.jsx)(n.p,{children:"You can remove the useless versioned prefix from your versioned sidebars."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,r.jsx)(n.h2,{id:"try-docusaurus-v3-today",children:"Try Docusaurus v3 today"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is now ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"in beta"}),", and already used in production by ",(0,r.jsx)(n.a,{href:"https://reactnative.dev",children:"React-Native"}),", ",(0,r.jsx)(n.a,{href:"https://jestjs.io",children:"Jest"}),", and ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"our own website"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We think this new Docusaurus version is ",(0,r.jsx)(n.strong,{children:"robust and ready to be deployed in production"}),". It should be released officially soon, after receiving a positive feedback from early adopters of our community."]}),"\n",(0,r.jsxs)(n.p,{children:["We would really appreciate it if you try upgrading and report issues on the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"3.0.0-beta.0 release discussion thread"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n- "@mdx-js/react": "^1.6.22",\n+ "@docusaurus/core": "3.0.0-beta.0",\n+ "@docusaurus/preset-classic": "3.0.0-beta.0",\n+ "@mdx-js/react": "^3.0.0",\n "clsx": "^2.0.0",\n "prism-react-renderer": "^1.3.5",\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n- "@docusaurus/module-type-aliases": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.h2,{id:"ask-for-help",children:"Ask for help"}),"\n",(0,r.jsx)(n.p,{children:"We will be there to help you upgrade through the following support channels:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade."}),"\n",(0,r.jsx)(n.p,{children:"The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var r=s(27378);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/143e0c63.4d8f0861.js b/assets/js/143e0c63.4d8f0861.js new file mode 100644 index 0000000000..575f15ce90 --- /dev/null +++ b/assets/js/143e0c63.4d8f0861.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70973],{57715:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>h,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>r,toc:()=>m});var a=i(24246),s=i(71670);const n={mdx:{format:"md"},date:"2021-06-18T20:00",authors:["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},o="2.0.0-beta.1",r={permalink:"/changelog/2.0.0-beta.1",source:"@site/changelog/source/2.0.0-beta.1.md",title:"2.0.0-beta.1",description:"New Feature",date:"2021-06-18T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"antonygibbs",alias:"antonygibbs",url:"https://github.com/antonygibbs",imageURL:"https://github.com/antonygibbs.png",key:"antonygibbs"},{name:"Arthur",alias:"ArtFlag",url:"https://github.com/ArtFlag",imageURL:"https://github.com/ArtFlag.png",key:"ArtFlag"},{name:"besemuna",alias:"besemuna",url:"https://github.com/besemuna",imageURL:"https://github.com/besemuna.png",key:"besemuna"},{name:"Christopher Hsieh",alias:"Christopher-Hsieh",url:"https://github.com/Christopher-Hsieh",imageURL:"https://github.com/Christopher-Hsieh.png",key:"Christopher-Hsieh"},{name:"Ben Rometsch",alias:"dabeeeenster",url:"https://github.com/dabeeeenster",imageURL:"https://github.com/dabeeeenster.png",key:"dabeeeenster"},{name:"e271828-",alias:"e271828-",url:"https://github.com/e271828-",imageURL:"https://github.com/e271828-.png",key:"e271828-"},{name:"fgatti675",alias:"fgatti675",url:"https://github.com/fgatti675",imageURL:"https://github.com/fgatti675.png",key:"fgatti675"},{name:"Tina\xebl Devresse",alias:"HunteRoi",url:"https://github.com/HunteRoi",imageURL:"https://github.com/HunteRoi.png",key:"HunteRoi"},{name:"Jonathan Mazin",alias:"jmazin",url:"https://github.com/jmazin",imageURL:"https://github.com/jmazin.png",key:"jmazin"},{name:"Joel",alias:"Joelpo",url:"https://github.com/Joelpo",imageURL:"https://github.com/Joelpo.png",key:"Joelpo"},{name:"Jon Barker",alias:"jonbarker68",url:"https://github.com/jonbarker68",imageURL:"https://github.com/jonbarker68.png",key:"jonbarker68"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Louis Gallet",alias:"l0u1sg",url:"https://github.com/l0u1sg",imageURL:"https://github.com/l0u1sg.png",key:"l0u1sg"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Pablo Vidal",alias:"limkinZero",url:"https://github.com/limkinZero",imageURL:"https://github.com/limkinZero.png",key:"limkinZero"},{name:"Lior Heber",alias:"liorheber",url:"https://github.com/liorheber",imageURL:"https://github.com/liorheber.png",key:"liorheber"},{name:"Louis Grenard",alias:"louistiti",url:"https://github.com/louistiti",imageURL:"https://github.com/louistiti.png",key:"louistiti"},{name:"Massibian",alias:"Massibian",url:"https://github.com/Massibian",imageURL:"https://github.com/Massibian.png",key:"Massibian"},{name:"Nam Hoang Le",alias:"nam-hle",url:"https://github.com/nam-hle",imageURL:"https://github.com/nam-hle.png",key:"nam-hle"},{name:"Pratyay Banerjee",alias:"Neilblaze",url:"https://github.com/Neilblaze",imageURL:"https://github.com/Neilblaze.png",key:"Neilblaze"},{name:"nirtamir2",alias:"nirtamir2",url:"https://github.com/nirtamir2",imageURL:"https://github.com/nirtamir2.png",key:"nirtamir2"},{name:"phwt.smwt",alias:"phwt",url:"https://github.com/phwt",imageURL:"https://github.com/phwt.png",key:"phwt"},{name:"Pedro Queiroz",alias:"pmqueiroz",url:"https://github.com/pmqueiroz",imageURL:"https://github.com/pmqueiroz.png",key:"pmqueiroz"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"PsychTech",alias:"PsychTechApS",url:"https://github.com/PsychTechApS",imageURL:"https://github.com/PsychTechApS.png",key:"PsychTechApS"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"silva-nick",alias:"silva-nick",url:"https://github.com/silva-nick",imageURL:"https://github.com/silva-nick.png",key:"silva-nick"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"mg",alias:"tiny-dancer",url:"https://github.com/tiny-dancer",imageURL:"https://github.com/tiny-dancer.png",key:"tiny-dancer"},{name:"Lucas Correia",alias:"tsirlucas",url:"https://github.com/tsirlucas",imageURL:"https://github.com/tsirlucas.png",key:"tsirlucas"},{name:"Fardeen Panjwani",alias:"wise-introvert",url:"https://github.com/wise-introvert",imageURL:"https://github.com/wise-introvert.png",key:"wise-introvert"}],frontMatter:{mdx:{format:"md"},date:"2021-06-18T20:00",authors:["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},unlisted:!1,prevItem:{title:"2.0.0-beta.2",permalink:"/changelog/2.0.0-beta.2"},nextItem:{title:"2.0.0-beta.0",permalink:"/changelog/2.0.0-beta.0"},listPageLink:"/changelog/page/2"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function l(t){return(0,a.jsx)(a.Fragment,{})}function u(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,a.jsx)(e,{...t,children:(0,a.jsx)(l,{...t})}):l()}},71670:(t,e,i)=>{i.d(e,{Z:()=>r,a:()=>o});var a=i(27378);const s={},n=a.createContext(s);function o(t){const e=a.useContext(n);return a.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:o(t.components),a.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/14869.5b496144.js b/assets/js/14869.5b496144.js new file mode 100644 index 0000000000..2c3c627156 --- /dev/null +++ b/assets/js/14869.5b496144.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[14869],{14869:(t,e,a)=>{a.d(e,{diagram:()=>nt});var r=a(99854),i=a(63294),s=a(47435),n=a(7608),o=(a(27693),a(31699),function(){var t=function(t,e,a,r){for(a=a||{},r=t.length;r--;a[t[r]]=e);return a},e=[1,2],a=[1,3],r=[1,5],i=[1,7],s=[2,5],n=[1,15],o=[1,17],c=[1,19],l=[1,20],h=[1,22],d=[1,23],p=[1,24],g=[1,30],u=[1,31],x=[1,32],y=[1,33],m=[1,34],b=[1,35],f=[1,36],T=[1,37],E=[1,38],w=[1,39],_=[1,40],v=[1,41],P=[1,42],k=[1,44],L=[1,45],I=[1,46],M=[1,48],N=[1,49],A=[1,50],S=[1,51],O=[1,52],D=[1,53],R=[1,56],C=[1,4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,54,55,56,58,59,60,65,66,67,68,76,86],Y=[4,5,22,56,58,59],$=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,56,58,59,60,65,66,67,68,76,86],B=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,55,56,58,59,60,65,66,67,68,76,86],V=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,54,56,58,59,60,65,66,67,68,76,86],F=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,56,58,59,60,65,66,67,68,76,86],q=[74,75,76],W=[1,133],z=[1,4,5,7,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,54,55,56,58,59,60,65,66,67,68,76,86],H={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,create:19,box:20,restOfLine:21,end:22,signal:23,autonumber:24,NUM:25,off:26,activate:27,actor:28,deactivate:29,note_statement:30,links_statement:31,link_statement:32,properties_statement:33,details_statement:34,title:35,legacy_title:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,loop:42,rect:43,opt:44,alt:45,else_sections:46,par:47,par_sections:48,par_over:49,critical:50,option_sections:51,break:52,option:53,and:54,else:55,participant:56,AS:57,participant_actor:58,destroy:59,note:60,placement:61,text2:62,over:63,actor_pair:64,links:65,link:66,properties:67,details:68,spaceList:69,",":70,left_of:71,right_of:72,signaltype:73,"+":74,"-":75,ACTOR:76,SOLID_OPEN_ARROW:77,DOTTED_OPEN_ARROW:78,SOLID_ARROW:79,DOTTED_ARROW:80,SOLID_CROSS:81,DOTTED_CROSS:82,SOLID_POINT:83,DOTTED_POINT:84,TXT:85,open_directive:86,type_directive:87,arg_directive:88,close_directive:89,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"create",20:"box",21:"restOfLine",22:"end",24:"autonumber",25:"NUM",26:"off",27:"activate",29:"deactivate",35:"title",36:"legacy_title",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"loop",43:"rect",44:"opt",45:"alt",47:"par",49:"par_over",50:"critical",52:"break",53:"option",54:"and",55:"else",56:"participant",57:"AS",58:"participant_actor",59:"destroy",60:"note",63:"over",65:"links",66:"link",67:"properties",68:"details",70:",",71:"left_of",72:"right_of",74:"+",75:"-",76:"ACTOR",77:"SOLID_OPEN_ARROW",78:"DOTTED_OPEN_ARROW",79:"SOLID_ARROW",80:"DOTTED_ARROW",81:"SOLID_CROSS",82:"DOTTED_CROSS",83:"SOLID_POINT",84:"DOTTED_POINT",85:"TXT",86:"open_directive",87:"type_directive",88:"arg_directive",89:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,2],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[51,1],[51,4],[48,1],[48,4],[46,1],[46,4],[13,5],[13,3],[13,5],[13,3],[13,3],[30,4],[30,4],[31,3],[32,3],[33,3],[34,3],[69,2],[69,1],[64,3],[64,1],[61,1],[61,1],[23,5],[23,5],[23,4],[28,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[62,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,a,r,i,s,n){var o=s.length-1;switch(i){case 4:return r.apply(s[o]),s[o];case 5:case 10:case 9:case 14:this.$=[];break;case 6:case 11:s[o-1].push(s[o]),this.$=s[o-1];break;case 7:case 8:case 12:case 13:case 66:this.$=s[o];break;case 18:s[o].type="createParticipant",this.$=s[o];break;case 19:s[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(s[o-2])}),s[o-1].push({type:"boxEnd",boxText:s[o-2]}),this.$=s[o-1];break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(s[o-2]),sequenceIndexStep:Number(s[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceIndex:Number(s[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 25:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:s[o-1]};break;case 26:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:s[o-1]};break;case 32:r.setDiagramTitle(s[o].substring(6)),this.$=s[o].substring(6);break;case 33:r.setDiagramTitle(s[o].substring(7)),this.$=s[o].substring(7);break;case 34:this.$=s[o].trim(),r.setAccTitle(this.$);break;case 35:case 36:this.$=s[o].trim(),r.setAccDescription(this.$);break;case 37:s[o-1].unshift({type:"loopStart",loopText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.LOOP_START}),s[o-1].push({type:"loopEnd",loopText:s[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=s[o-1];break;case 38:s[o-1].unshift({type:"rectStart",color:r.parseMessage(s[o-2]),signalType:r.LINETYPE.RECT_START}),s[o-1].push({type:"rectEnd",color:r.parseMessage(s[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=s[o-1];break;case 39:s[o-1].unshift({type:"optStart",optText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.OPT_START}),s[o-1].push({type:"optEnd",optText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=s[o-1];break;case 40:s[o-1].unshift({type:"altStart",altText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.ALT_START}),s[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=s[o-1];break;case 41:s[o-1].unshift({type:"parStart",parText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.PAR_START}),s[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=s[o-1];break;case 42:s[o-1].unshift({type:"parStart",parText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.PAR_OVER_START}),s[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=s[o-1];break;case 43:s[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.CRITICAL_START}),s[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=s[o-1];break;case 44:s[o-1].unshift({type:"breakStart",breakText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.BREAK_START}),s[o-1].push({type:"breakEnd",optText:r.parseMessage(s[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=s[o-1];break;case 47:this.$=s[o-3].concat([{type:"option",optionText:r.parseMessage(s[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},s[o]]);break;case 49:this.$=s[o-3].concat([{type:"and",parText:r.parseMessage(s[o-1]),signalType:r.LINETYPE.PAR_AND},s[o]]);break;case 51:this.$=s[o-3].concat([{type:"else",altText:r.parseMessage(s[o-1]),signalType:r.LINETYPE.ALT_ELSE},s[o]]);break;case 52:s[o-3].draw="participant",s[o-3].type="addParticipant",s[o-3].description=r.parseMessage(s[o-1]),this.$=s[o-3];break;case 53:s[o-1].draw="participant",s[o-1].type="addParticipant",this.$=s[o-1];break;case 54:s[o-3].draw="actor",s[o-3].type="addParticipant",s[o-3].description=r.parseMessage(s[o-1]),this.$=s[o-3];break;case 55:s[o-1].draw="actor",s[o-1].type="addParticipant",this.$=s[o-1];break;case 56:s[o-1].type="destroyParticipant",this.$=s[o-1];break;case 57:this.$=[s[o-1],{type:"addNote",placement:s[o-2],actor:s[o-1].actor,text:s[o]}];break;case 58:s[o-2]=[].concat(s[o-1],s[o-1]).slice(0,2),s[o-2][0]=s[o-2][0].actor,s[o-2][1]=s[o-2][1].actor,this.$=[s[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:s[o-2].slice(0,2),text:s[o]}];break;case 59:this.$=[s[o-1],{type:"addLinks",actor:s[o-1].actor,text:s[o]}];break;case 60:this.$=[s[o-1],{type:"addALink",actor:s[o-1].actor,text:s[o]}];break;case 61:this.$=[s[o-1],{type:"addProperties",actor:s[o-1].actor,text:s[o]}];break;case 62:this.$=[s[o-1],{type:"addDetails",actor:s[o-1].actor,text:s[o]}];break;case 65:this.$=[s[o-2],s[o]];break;case 67:this.$=r.PLACEMENT.LEFTOF;break;case 68:this.$=r.PLACEMENT.RIGHTOF;break;case 69:this.$=[s[o-4],s[o-1],{type:"addMessage",from:s[o-4].actor,to:s[o-1].actor,signalType:s[o-3],msg:s[o]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:s[o-1]}];break;case 70:this.$=[s[o-4],s[o-1],{type:"addMessage",from:s[o-4].actor,to:s[o-1].actor,signalType:s[o-3],msg:s[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:s[o-4]}];break;case 71:this.$=[s[o-3],s[o-1],{type:"addMessage",from:s[o-3].actor,to:s[o-1].actor,signalType:s[o-2],msg:s[o]}];break;case 72:this.$={type:"addParticipant",actor:s[o]};break;case 73:this.$=r.LINETYPE.SOLID_OPEN;break;case 74:this.$=r.LINETYPE.DOTTED_OPEN;break;case 75:this.$=r.LINETYPE.SOLID;break;case 76:this.$=r.LINETYPE.DOTTED;break;case 77:this.$=r.LINETYPE.SOLID_CROSS;break;case 78:this.$=r.LINETYPE.DOTTED_CROSS;break;case 79:this.$=r.LINETYPE.SOLID_POINT;break;case 80:this.$=r.LINETYPE.DOTTED_POINT;break;case 81:this.$=r.parseMessage(s[o].trim().substring(1));break;case 82:r.parseDirective("%%{","open_directive");break;case 83:r.parseDirective(s[o],"type_directive");break;case 84:s[o]=s[o].trim().replace(/'/g,'"'),r.parseDirective(s[o],"arg_directive");break;case 85:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:a,6:4,7:r,14:6,86:i},{1:[3]},{3:8,4:e,5:a,6:4,7:r,14:6,86:i},{3:9,4:e,5:a,6:4,7:r,14:6,86:i},{3:10,4:e,5:a,6:4,7:r,14:6,86:i},t([1,4,5,19,20,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,56,58,59,60,65,66,67,68,76,86],s,{8:11}),{15:12,87:[1,13]},{87:[2,82]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{16:54,17:[1,55],89:R},t([17,89],[2,83]),t(C,[2,6]),{6:43,10:57,13:18,14:6,19:c,20:l,23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},t(C,[2,8]),t(C,[2,9]),t(C,[2,17]),{13:58,56:k,58:L,59:I},{21:[1,59]},{5:[1,60]},{5:[1,63],25:[1,61],26:[1,62]},{28:64,76:D},{28:65,76:D},{5:[1,66]},{5:[1,67]},{5:[1,68]},{5:[1,69]},{5:[1,70]},t(C,[2,32]),t(C,[2,33]),{38:[1,71]},{40:[1,72]},t(C,[2,36]),{21:[1,73]},{21:[1,74]},{21:[1,75]},{21:[1,76]},{21:[1,77]},{21:[1,78]},{21:[1,79]},{21:[1,80]},t(C,[2,45]),{28:81,76:D},{28:82,76:D},{28:83,76:D},{73:84,77:[1,85],78:[1,86],79:[1,87],80:[1,88],81:[1,89],82:[1,90],83:[1,91],84:[1,92]},{61:93,63:[1,94],71:[1,95],72:[1,96]},{28:97,76:D},{28:98,76:D},{28:99,76:D},{28:100,76:D},t([5,57,70,77,78,79,80,81,82,83,84,85],[2,72]),{5:[1,101]},{18:102,88:[1,103]},{5:[2,85]},t(C,[2,7]),t(C,[2,18]),t(Y,[2,10],{11:104}),t(C,[2,20]),{5:[1,106],25:[1,105]},{5:[1,107]},t(C,[2,24]),{5:[1,108]},{5:[1,109]},t(C,[2,27]),t(C,[2,28]),t(C,[2,29]),t(C,[2,30]),t(C,[2,31]),t(C,[2,34]),t(C,[2,35]),t($,s,{8:110}),t($,s,{8:111}),t($,s,{8:112}),t(B,s,{46:113,8:114}),t(V,s,{48:115,8:116}),t(V,s,{8:116,48:117}),t(F,s,{51:118,8:119}),t($,s,{8:120}),{5:[1,122],57:[1,121]},{5:[1,124],57:[1,123]},{5:[1,125]},{28:128,74:[1,126],75:[1,127],76:D},t(q,[2,73]),t(q,[2,74]),t(q,[2,75]),t(q,[2,76]),t(q,[2,77]),t(q,[2,78]),t(q,[2,79]),t(q,[2,80]),{28:129,76:D},{28:131,64:130,76:D},{76:[2,67]},{76:[2,68]},{62:132,85:W},{62:134,85:W},{62:135,85:W},{62:136,85:W},t(z,[2,15]),{16:137,89:R},{89:[2,84]},{4:[1,140],5:[1,142],12:139,13:141,22:[1,138],56:k,58:L,59:I},{5:[1,143]},t(C,[2,22]),t(C,[2,23]),t(C,[2,25]),t(C,[2,26]),{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[1,144],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[1,145],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[1,146],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{22:[1,147]},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[2,50],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,55:[1,148],56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{22:[1,149]},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[2,48],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,54:[1,150],56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{22:[1,151]},{22:[1,152]},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[2,46],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,53:[1,153],56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{4:n,5:o,6:43,9:14,10:16,13:18,14:6,19:c,20:l,22:[1,154],23:21,24:h,27:d,28:47,29:p,30:25,31:26,32:27,33:28,34:29,35:g,36:u,37:x,39:y,41:m,42:b,43:f,44:T,45:E,47:w,49:_,50:v,52:P,56:k,58:L,59:I,60:M,65:N,66:A,67:S,68:O,76:D,86:i},{21:[1,155]},t(C,[2,53]),{21:[1,156]},t(C,[2,55]),t(C,[2,56]),{28:157,76:D},{28:158,76:D},{62:159,85:W},{62:160,85:W},{62:161,85:W},{70:[1,162],85:[2,66]},{5:[2,59]},{5:[2,81]},{5:[2,60]},{5:[2,61]},{5:[2,62]},{5:[1,163]},t(C,[2,19]),t(Y,[2,11]),{13:164,56:k,58:L,59:I},t(Y,[2,13]),t(Y,[2,14]),t(C,[2,21]),t(C,[2,37]),t(C,[2,38]),t(C,[2,39]),t(C,[2,40]),{21:[1,165]},t(C,[2,41]),{21:[1,166]},t(C,[2,42]),t(C,[2,43]),{21:[1,167]},t(C,[2,44]),{5:[1,168]},{5:[1,169]},{62:170,85:W},{62:171,85:W},{5:[2,71]},{5:[2,57]},{5:[2,58]},{28:172,76:D},t(z,[2,16]),t(Y,[2,12]),t(B,s,{8:114,46:173}),t(V,s,{8:116,48:174}),t(F,s,{8:119,51:175}),t(C,[2,52]),t(C,[2,54]),{5:[2,69]},{5:[2,70]},{85:[2,65]},{22:[2,51]},{22:[2,49]},{22:[2,47]}],defaultActions:{7:[2,82],8:[2,1],9:[2,2],10:[2,3],56:[2,85],95:[2,67],96:[2,68],103:[2,84],132:[2,59],133:[2,81],134:[2,60],135:[2,61],136:[2,62],159:[2,71],160:[2,57],161:[2,58],170:[2,69],171:[2,70],172:[2,65],173:[2,51],174:[2,49],175:[2,47]},parseError:function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},parse:function(t){var e=this,a=[0],r=[],i=[null],s=[],n=this.table,o="",c=0,l=0,h=s.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var u=d.yylloc;s.push(u);var x=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,f,T,E,w,_,v,P={};;){if(m=a[a.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(v=void 0,"number"!=typeof(v=r.pop()||d.lex()||1)&&(v instanceof Array&&(v=(r=v).pop()),v=e.symbols_[v]||v),y=v),b=n[m]&&n[m][y]),void 0===b||!b.length||!b[0]){var k="";for(T in _=[],n[m])this.terminals_[T]&&T>2&&_.push("'"+this.terminals_[T]+"'");k=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(k,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:u,expected:_})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+y);switch(b[0]){case 1:a.push(y),i.push(d.yytext),s.push(d.yylloc),a.push(b[1]),y=null,l=d.yyleng,o=d.yytext,c=d.yylineno,u=d.yylloc;break;case 2:if(E=this.productions_[b[1]][1],P.$=i[i.length-E],P._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},x&&(P._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(f=this.performAction.apply(P,[o,l,c,p.yy,b[1],i,s].concat(h))))return f;E&&(a=a.slice(0,-1*E*2),i=i.slice(0,-1*E),s=s.slice(0,-1*E)),a.push(this.productions_[b[1]][0]),i.push(P.$),s.push(P._$),w=n[a[a.length-2]][a[a.length-1]],a.push(w);break;case 3:return!0}}return!0}},U={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,a=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var a,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((a=this._input.match(this.rules[i[s]]))&&(!e||a[0].length>e[0].length)){if(e=a,r=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,a,r){switch(a){case 0:return this.begin("open_directive"),86;case 1:return this.begin("type_directive"),87;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),89;case 4:return 88;case 5:case 56:case 69:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 25;case 12:return this.begin("LINE"),20;case 13:return this.begin("ID"),56;case 14:return this.begin("ID"),58;case 15:return 19;case 16:return this.begin("ID"),59;case 17:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),76;case 18:return this.popState(),this.popState(),this.begin("LINE"),57;case 19:return this.popState(),this.popState(),5;case 20:return this.begin("LINE"),42;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),44;case 23:return this.begin("LINE"),45;case 24:return this.begin("LINE"),55;case 25:return this.begin("LINE"),47;case 26:return this.begin("LINE"),49;case 27:return this.begin("LINE"),54;case 28:return this.begin("LINE"),50;case 29:return this.begin("LINE"),53;case 30:return this.begin("LINE"),52;case 31:return this.popState(),21;case 32:return 22;case 33:return 71;case 34:return 72;case 35:return 65;case 36:return 66;case 37:return 67;case 38:return 68;case 39:return 63;case 40:return 60;case 41:return this.begin("ID"),27;case 42:return this.begin("ID"),29;case 43:return 35;case 44:return 36;case 45:return this.begin("acc_title"),37;case 46:return this.popState(),"acc_title_value";case 47:return this.begin("acc_descr"),39;case 48:return this.popState(),"acc_descr_value";case 49:this.begin("acc_descr_multiline");break;case 50:this.popState();break;case 51:return"acc_descr_multiline_value";case 52:return 7;case 53:return 24;case 54:return 26;case 55:return 70;case 57:return e.yytext=e.yytext.trim(),76;case 58:return 79;case 59:return 80;case 60:return 77;case 61:return 78;case 62:return 81;case 63:return 82;case 64:return 83;case 65:return 84;case 66:return 85;case 67:return 74;case 68:return 75;case 70:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[50,51],inclusive:!1},acc_descr:{rules:[48],inclusive:!1},acc_title:{rules:[46],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,17],inclusive:!1},ALIAS:{rules:[7,8,18,19],inclusive:!1},LINE:{rules:[7,8,31],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,47,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],inclusive:!0}}};function j(){this.yy={}}return H.lexer=U,j.prototype=H,H.Parser=j,new j}());o.parser=o;const c=o;let l,h,d,p,g,u={},x={},y={},m=[],b=[],f=!1;const T=function(t,e,a,r){let i=d;const s=u[t];if(s){if(d&&s.box&&d!==s.box)throw new Error("A same participant should only be defined in one Box: "+s.name+" can't be in '"+s.box.name+"' and in '"+d.name+"' at the same time.");if(i=s.box?s.box:d,s.box=i,s&&e===s.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:r}),null!=r&&null!=a.text||(a={text:e,wrap:null,type:r}),u[t]={box:i,name:e,description:a.text,wrap:void 0===a.wrap&&_()||!!a.wrap,prevActor:l,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},l&&u[l]&&(u[l].nextActor=t),d&&d.actorKeys.push(t),l=t},E=function(t,e,a={text:void 0,wrap:void 0},r){if(r===v.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<b.length;e++)b[e].type===v.ACTIVE_START&&b[e].from.actor===t&&a++,b[e].type===v.ACTIVE_END&&b[e].from.actor===t&&a--;return a})(t.actor)<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return b.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&_()||!!a.wrap,type:r}),!0},w=function(t){return u[t]},_=()=>void 0!==h?h:(0,r.c)().sequence.wrap,v={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},P=function(t,e,a){a.text,void 0===a.wrap&&_()||a.wrap;const r=[].concat(t,t);b.push({from:r[0],to:r[1],message:a.text,wrap:void 0===a.wrap&&_()||!!a.wrap,type:v.NOTE,placement:e})},k=function(t,e){const a=w(t);try{let t=(0,r.d)(e.text,(0,r.c)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");L(a,JSON.parse(t))}catch(i){r.l.error("error while parsing actor link text",i)}};function L(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const I=function(t,e){const a=w(t);try{let t=(0,r.d)(e.text,(0,r.c)());M(a,JSON.parse(t))}catch(i){r.l.error("error while parsing actor properties text",i)}};function M(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const N=function(t,e){const a=w(t),i=document.getElementById(e.text);try{const t=i.innerHTML,e=JSON.parse(t);e.properties&&M(a,e.properties),e.links&&L(a,e.links)}catch(s){r.l.error("error while parsing actor details text",s)}},A=function(t){if(Array.isArray(t))t.forEach((function(t){A(t)}));else switch(t.type){case"sequenceIndex":b.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":T(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(u[t.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");p=t.actor,T(t.actor,t.actor,t.description,t.draw),x[t.actor]=b.length;break;case"destroyParticipant":g=t.actor,y[t.actor]=b.length;break;case"activeStart":case"activeEnd":E(t.actor,void 0,void 0,t.signalType);break;case"addNote":P(t.actor,t.placement,t.text);break;case"addLinks":k(t.actor,t.text);break;case"addALink":!function(t,e){const a=w(t);try{const t={};let o=(0,r.d)(e.text,(0,r.c)());var i=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var s=o.slice(0,i-1).trim(),n=o.slice(i+1).trim();t[s]=n,L(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":I(t.actor,t.text);break;case"addDetails":N(t.actor,t.text);break;case"addMessage":if(p){if(t.to!==p)throw new Error("The created participant "+p+" does not have an associated creating message after its declaration. Please check the sequence diagram.");p=void 0}else if(g){if(t.to!==g&&t.from!==g)throw new Error("The destroyed participant "+g+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");g=void 0}E(t.from,t.to,t.msg,t.signalType);break;case"boxStart":e=t.boxData,m.push({name:e.text,wrap:void 0===e.wrap&&_()||!!e.wrap,fill:e.color,actorKeys:[]}),d=m.slice(-1)[0];break;case"boxEnd":d=void 0;break;case"loopStart":E(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":E(void 0,void 0,void 0,t.signalType);break;case"rectStart":E(void 0,void 0,t.color,t.signalType);break;case"optStart":E(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":E(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.s)(t.text);break;case"parStart":case"and":E(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":E(void 0,void 0,t.criticalText,t.signalType);break;case"option":E(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":E(void 0,void 0,t.breakText,t.signalType)}var e},S={addActor:T,addMessage:function(t,e,a,r){b.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&_()||!!a.wrap,answer:r})},addSignal:E,addLinks:k,addDetails:N,addProperties:I,autoWrap:_,setWrap:function(t){h=t},enableSequenceNumbers:function(){f=!0},disableSequenceNumbers:function(){f=!1},showSequenceNumbers:()=>f,getMessages:function(){return b},getActors:function(){return u},getCreatedActors:function(){return x},getDestroyedActors:function(){return y},getActor:w,getActorKeys:function(){return Object.keys(u)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.g,getBoxes:function(){return m},getDiagramTitle:r.t,setDiagramTitle:r.r,parseDirective:function(t,e,a){r.m.parseDirective(this,t,e,a)},getConfig:()=>(0,r.c)().sequence,clear:function(){u={},x={},y={},m=[],b=[],f=!1,(0,r.v)()},parseMessage:function(t){const e=t.trim(),a={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return r.l.debug("parseMessage:",a),a},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let a=null!=e&&e[1]?e[1].trim():"transparent",i=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",i=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",i=t.trim())}return{color:a,text:void 0!==i?(0,r.d)(i.replace(/^:?(?:no)?wrap:/,""),(0,r.c)()):void 0,wrap:void 0!==i?null!==i.match(/^:?wrap:/)||null===i.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:v,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:P,setAccTitle:r.s,apply:A,setAccDescription:r.b,getAccDescription:r.a,hasAtLeastOneBox:function(){return m.length>0},hasAtLeastOneBoxWithTitle:function(){return m.some((t=>t.name))}},O=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,D=function(t,e){return(0,s.d)(t,e)},R=(t,e)=>{(0,r.H)((()=>{const a=document.querySelectorAll(t);0!==a.length&&(a[0].addEventListener("mouseover",(function(){C("actor"+e+"_popup")})),a[0].addEventListener("mouseout",(function(){Y("actor"+e+"_popup")})))}))},C=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},Y=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},$=function(t,e){let a=0,i=0;const s=e.text.split(r.e.lineBreakRegex),[n,o]=(0,r.F)(e.fontSize);let c=[],l=0,h=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":h=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":h=()=>Math.round(e.y+(a+i+e.textMargin)/2);break;case"bottom":case"end":h=()=>Math.round(e.y+(a+i+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[d,p]of s.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==n&&(l=d*n);const s=t.append("text");s.attr("x",e.x),s.attr("y",h()),void 0!==e.anchor&&s.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&s.style("font-family",e.fontFamily),void 0!==o&&s.style("font-size",o),void 0!==e.fontWeight&&s.style("font-weight",e.fontWeight),void 0!==e.fill&&s.attr("fill",e.fill),void 0!==e.class&&s.attr("class",e.class),void 0!==e.dy?s.attr("dy",e.dy):0!==l&&s.attr("dy",l);const g=p||r.Z;if(e.tspan){const t=s.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(g)}else s.text(g);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(i+=(s._groups||s)[0][0].getBBox().height,a=i),c.push(s)}return c},B=function(t,e){const a=t.append("polygon");var r,i,s,n,o;return a.attr("points",(r=e.x,i=e.y,s=e.width,n=e.height,r+","+i+" "+(r+s)+","+i+" "+(r+s)+","+(i+n-(o=7))+" "+(r+s-1.2*o)+","+(i+n)+" "+r+","+(i+n))),a.attr("class","labelBox"),e.y=e.y+e.height/2,$(t,e),a};let V=-1;const F=(t,e,a,r)=>{t.select&&a.forEach((a=>{const i=e[a],s=t.select("#actor"+i.actorCnt);!r.mirrorActors&&i.stopy?s.attr("y2",i.stopy+i.height/2):r.mirrorActors&&s.attr("y2",i.stopy)}))},q=function(t,e){(0,s.a)(t,e)},W=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},z=function(){function t(t,e,a,r,s,n,o){i(e.append("text").attr("x",a+s/2).attr("y",r+n/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,s,n,o,c,l){const{actorFontSize:h,actorFontFamily:d,actorFontWeight:p}=l,[g,u]=(0,r.F)(h),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,l=e.append("text").attr("x",a+n/2).attr("y",s).style("text-anchor","middle").style("font-size",u).style("font-weight",p).style("font-family",d);l.append("tspan").attr("x",a+n/2).attr("dy",t).text(x[r]),l.attr("y",s+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,c)}}function a(t,a,r,s,n,o,c,l){const h=a.append("switch"),d=h.append("foreignObject").attr("x",r).attr("y",s).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,s,n,o,c,l),i(d,c)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),H=function(){function t(t,e,a,r,s,n,o){i(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,s,n,o,c,l){const{actorFontSize:h,actorFontFamily:d,actorFontWeight:p}=l,g=t.split(r.e.lineBreakRegex);for(let r=0;r<g.length;r++){const t=r*h-h*(g.length-1)/2,n=e.append("text").attr("x",a).attr("y",s).style("text-anchor","start").style("font-size",h).style("font-weight",p).style("font-family",d);n.append("tspan").attr("x",a).attr("dy",t).text(g[r]),n.attr("y",s+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(n,c)}}function a(t,a,r,s,n,o,c,l){const h=a.append("switch"),d=h.append("foreignObject").attr("x",r).attr("y",s).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,r,s,0,o,c,l),i(d,c)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),U={drawRect:D,drawText:$,drawLabel:B,drawActor:function(t,e,a,r){switch(e.type){case"actor":return function(t,e,a,r){const i=r?e.stopy:e.starty,n=e.x+e.width/2,o=i+80;t.lower(),r||(V++,t.append("line").attr("id","actor"+V).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),e.actorCnt=V);const c=t.append("g");c.attr("class","actor-man");const l=(0,s.g)();l.x=e.x,l.y=i,l.fill="#eaeaea",l.width=e.width,l.height=e.height,l.class="actor",l.rx=3,l.ry=3,c.append("line").attr("id","actor-man-torso"+V).attr("x1",n).attr("y1",i+25).attr("x2",n).attr("y2",i+45),c.append("line").attr("id","actor-man-arms"+V).attr("x1",n-18).attr("y1",i+33).attr("x2",n+18).attr("y2",i+33),c.append("line").attr("x1",n-18).attr("y1",i+60).attr("x2",n).attr("y2",i+45),c.append("line").attr("x1",n).attr("y1",i+45).attr("x2",n+18-2).attr("y2",i+60);const h=c.append("circle");h.attr("cx",e.x+e.width/2),h.attr("cy",i+10),h.attr("r",15),h.attr("width",e.width),h.attr("height",e.height);const d=c.node().getBBox();return e.height=d.height,z(a)(e.description,c,l.x,l.y+35,l.width,l.height,{class:"actor"},a),e.height}(t,e,a,r);case"participant":return function(t,e,a,r){const i=r?e.stopy:e.starty,n=e.x+e.width/2,o=i+5,c=t.append("g").lower();var l=c;r||(V++,l.append("line").attr("id","actor"+V).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),l=c.append("g"),e.actorCnt=V,null!=e.links&&(l.attr("id","root-"+V),R("#root-"+V,V)));const h=(0,s.g)();var d="actor";null!=e.properties&&e.properties.class?d=e.properties.class:h.fill="#eaeaea",h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=d,h.rx=3,h.ry=3;const p=D(l,h);if(e.rectData=h,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?(0,s.b)(l,h.x+h.width-20,h.y+10,t.substr(1)):(0,s.c)(l,h.x+h.width-20,h.y+10,t)}z(a)(e.description,l,h.x,h.y,h.width,h.height,{class:"actor"},a);let g=e.height;if(p.node){const t=p.node().getBBox();e.height=t.height,g=t.height}return g}(t,e,a,r)}},drawBox:function(t,e,a){const r=t.append("g");q(r,e),e.name&&z(a)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),r.lower()},drawPopup:function(t,e,a,r,i){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const s=e.links,o=e.actorCnt,c=e.rectData;var l="none";i&&(l="block !important");const h=t.append("g");h.attr("id","actor"+o+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",l),R("#actor"+o+"_popup",o);var d="";void 0!==c.class&&(d=" "+c.class);let p=c.width>a?c.width:a;const g=h.append("rect");if(g.attr("class","actorPopupMenuPanel"+d),g.attr("x",c.x),g.attr("y",c.height),g.attr("fill",c.fill),g.attr("stroke",c.stroke),g.attr("width",p),g.attr("height",c.height),g.attr("rx",c.rx),g.attr("ry",c.ry),null!=s){var u=20;for(let t in s){var x=h.append("a"),y=(0,n.Nm)(s[t]);x.attr("xlink:href",y),x.attr("target","_blank"),H(r)(t,x,c.x+10,c.height+u,p,20,{class:"actor"},r),u+=30}}return g.attr("height",u),{height:c.height+u,width:p}},anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,r,i){const n=(0,s.g)(),o=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+i%3,n.width=e.stopx-e.startx,n.height=a-e.starty,D(o,n)},drawLoop:function(t,e,a,r){const{boxMargin:i,boxTextMargin:n,labelBoxHeight:o,labelBoxWidth:c,messageFontFamily:l,messageFontSize:h,messageFontWeight:d}=r,p=t.append("g"),g=function(t,e,a,r){return p.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r).attr("class","loopLine")};g(e.startx,e.starty,e.stopx,e.starty),g(e.stopx,e.starty,e.stopx,e.stopy),g(e.startx,e.stopy,e.stopx,e.stopy),g(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){g(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let u=(0,s.e)();u.text=a,u.x=e.startx,u.y=e.starty,u.fontFamily=l,u.fontSize=h,u.fontWeight=d,u.anchor="middle",u.valign="middle",u.tspan=!1,u.width=c||50,u.height=o||20,u.textMargin=n,u.class="labelText",B(p,u),u=W(),u.text=e.title,u.x=e.startx+c/2+(e.stopx-e.startx)/2,u.y=e.starty+i+n,u.anchor="middle",u.valign="middle",u.textMargin=n,u.class="loopText",u.fontFamily=l,u.fontSize=h,u.fontWeight=d,u.wrap=!0;let x=$(p,u);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,a){if(t.message){u.text=t.message,u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.sections[a].y+i+n,u.class="loopText",u.anchor="middle",u.valign="middle",u.tspan=!1,u.fontFamily=l,u.fontSize=h,u.fontWeight=d,u.wrap=e.wrap,x=$(p,u);let r=Math.round(x.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[a].height+=r-(i+n)}})),e.height=Math.round(e.stopy-e.starty),p},drawBackgroundRect:q,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:W,getNoteRect:function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:F,sanitizeUrl:n.Nm};let j={};const K={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,tt((0,r.c)())},updateVal:function(t,e,a,r){void 0===t[e]?t[e]=a:t[e]=r(a,t[e])},updateBounds:function(t,e,a,r){const i=this;let s=0;function n(n){return function(o){s++;const c=i.sequenceItems.length-s+1;i.updateVal(o,"starty",e-c*j.boxMargin,Math.min),i.updateVal(o,"stopy",r+c*j.boxMargin,Math.max),i.updateVal(K.data,"startx",t-c*j.boxMargin,Math.min),i.updateVal(K.data,"stopx",a+c*j.boxMargin,Math.max),"activation"!==n&&(i.updateVal(o,"startx",t-c*j.boxMargin,Math.min),i.updateVal(o,"stopx",a+c*j.boxMargin,Math.max),i.updateVal(K.data,"starty",e-c*j.boxMargin,Math.min),i.updateVal(K.data,"stopy",r+c*j.boxMargin,Math.max))}}this.sequenceItems.forEach(n()),this.activations.forEach(n("activation"))},insert:function(t,e,a,i){const s=r.e.getMin(t,a),n=r.e.getMax(t,a),o=r.e.getMin(e,i),c=r.e.getMax(e,i);this.updateVal(K.data,"startx",s,Math.min),this.updateVal(K.data,"starty",o,Math.min),this.updateVal(K.data,"stopx",n,Math.max),this.updateVal(K.data,"stopy",c,Math.max),this.updateBounds(s,o,n,c)},newActivation:function(t,e,a){const r=a[t.from.actor],i=et(t.from.actor).length||0,s=r.x+r.width/2+(i-1)*j.activationWidth/2;this.activations.push({startx:s,starty:this.verticalPos+2,stopx:s+j.activationWidth,stopy:void 0,actor:t.from.actor,anchored:U.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return!!this.sequenceItems.length&&this.sequenceItems[this.sequenceItems.length-1].overlap},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:K.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=r.e.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},X=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),G=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),J=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const Z=function(t,e,a,i){if(i){let i=0;K.bumpVerticalPos(2*j.boxMargin);for(const s of a){const a=e[s];a.stopy||(a.stopy=K.getVerticalPos());const n=U.drawActor(t,a,j,!0);i=r.e.getMax(i,n)}K.bumpVerticalPos(i+j.boxMargin)}else for(const r of a){const a=e[r];U.drawActor(t,a,j,!1)}},Q=function(t,e,a,r){let i=0,s=0;for(const n of a){const a=e[n],o=it(a),c=U.drawPopup(t,a,o,j,j.forceMenus,r);c.height>i&&(i=c.height),c.width+a.x>s&&(s=c.width+a.x)}return{maxHeight:i,maxWidth:s}},tt=function(t){(0,r.f)(j,t),t.fontFamily&&(j.actorFontFamily=j.noteFontFamily=j.messageFontFamily=t.fontFamily),t.fontSize&&(j.actorFontSize=j.noteFontSize=j.messageFontSize=t.fontSize),t.fontWeight&&(j.actorFontWeight=j.noteFontWeight=j.messageFontWeight=t.fontWeight)},et=function(t){return K.activations.filter((function(e){return e.actor===t}))},at=function(t,e){const a=e[t],i=et(t);return[i.reduce((function(t,e){return r.e.getMin(t,e.startx)}),a.x+a.width/2),i.reduce((function(t,e){return r.e.getMax(t,e.stopx)}),a.x+a.width/2)]};function rt(t,e,a,i,s){K.bumpVerticalPos(a);let n=i;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,s=X(j);e.message=r.u.wrapLabel(`[${e.message}]`,a-2*j.wrapPadding,s),e.width=a,e.wrap=!0;const o=r.u.calculateTextDimensions(e.message,s),c=r.e.getMax(o.height,j.labelBoxHeight);n=i+c,r.l.debug(`${c} - ${e.message}`)}s(e),K.bumpVerticalPos(n)}const it=function(t){let e=0;const a=J(j);for(const i in t.links){const t=r.u.calculateTextDimensions(i,a).width+2*j.wrapPadding+2*j.boxMargin;e<t&&(e=t)}return e};const st=function(t,e,a,i){const s={},n=[];let o,c,l;return t.forEach((function(t){switch(t.id=r.u.random({length:10}),t.type){case i.db.LINETYPE.LOOP_START:case i.db.LINETYPE.ALT_START:case i.db.LINETYPE.OPT_START:case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:case i.db.LINETYPE.CRITICAL_START:case i.db.LINETYPE.BREAK_START:n.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case i.db.LINETYPE.ALT_ELSE:case i.db.LINETYPE.PAR_AND:case i.db.LINETYPE.CRITICAL_OPTION:t.message&&(o=n.pop(),s[o.id]=o,s[t.id]=o,n.push(o));break;case i.db.LINETYPE.LOOP_END:case i.db.LINETYPE.ALT_END:case i.db.LINETYPE.OPT_END:case i.db.LINETYPE.PAR_END:case i.db.LINETYPE.CRITICAL_END:case i.db.LINETYPE.BREAK_END:o=n.pop(),s[o.id]=o;break;case i.db.LINETYPE.ACTIVE_START:{const a=e[t.from?t.from.actor:t.to.actor],r=et(t.from?t.from.actor:t.to.actor).length,i=a.x+a.width/2+(r-1)*j.activationWidth/2,s={startx:i,stopx:i+j.activationWidth,actor:t.from.actor,enabled:!0};K.activations.push(s)}break;case i.db.LINETYPE.ACTIVE_END:{const e=K.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete K.activations.splice(e,1)[0]}}void 0!==t.placement?(c=function(t,e,a){const i=e[t.from].x,s=e[t.to].x,n=t.wrap&&t.message;let o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,j.width,G(j)):t.message,G(j));const c={width:n?j.width:r.e.getMax(j.width,o.width+2*j.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(c.width=n?r.e.getMax(j.width,o.width):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*j.noteMargin),c.startx=i+(e[t.from].width+j.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(c.width=n?r.e.getMax(j.width,o.width+2*j.noteMargin):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*j.noteMargin),c.startx=i-c.width+(e[t.from].width-j.actorMargin)/2):t.to===t.from?(o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,r.e.getMax(j.width,e[t.from].width),G(j)):t.message,G(j)),c.width=n?r.e.getMax(j.width,e[t.from].width):r.e.getMax(e[t.from].width,j.width,o.width+2*j.noteMargin),c.startx=i+(e[t.from].width-c.width)/2):(c.width=Math.abs(i+e[t.from].width/2-(s+e[t.to].width/2))+j.actorMargin,c.startx=i<s?i+e[t.from].width/2-j.actorMargin/2:s+e[t.to].width/2-j.actorMargin/2),n&&(c.message=r.u.wrapLabel(t.message,c.width-2*j.wrapPadding,G(j))),r.l.debug(`NM:[${c.startx},${c.stopx},${c.starty},${c.stopy}:${c.width},${c.height}=${t.message}]`),c}(t,e,i),t.noteModel=c,n.forEach((t=>{o=t,o.from=r.e.getMin(o.from,c.startx),o.to=r.e.getMax(o.to,c.startx+c.width),o.width=r.e.getMax(o.width,Math.abs(o.from-o.to))-j.labelBoxWidth}))):(l=function(t,e,a){let i=!1;if([a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN,a.db.LINETYPE.SOLID,a.db.LINETYPE.DOTTED,a.db.LINETYPE.SOLID_CROSS,a.db.LINETYPE.DOTTED_CROSS,a.db.LINETYPE.SOLID_POINT,a.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(i=!0),!i)return{};const s=at(t.from,e),n=at(t.to,e),o=s[0]<=n[0]?1:0,c=s[0]<n[0]?0:1,l=[...s,...n],h=Math.abs(n[c]-s[o]);t.wrap&&t.message&&(t.message=r.u.wrapLabel(t.message,r.e.getMax(h+2*j.wrapPadding,j.width),X(j)));const d=r.u.calculateTextDimensions(t.message,X(j));return{width:r.e.getMax(t.wrap?0:d.width+2*j.wrapPadding,h+2*j.wrapPadding,j.width),height:0,startx:s[o],stopx:n[c],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,l),toBounds:Math.max.apply(null,l)}}(t,e,i),t.msgModel=l,l.startx&&l.stopx&&n.length>0&&n.forEach((a=>{if(o=a,l.startx===l.stopx){const a=e[t.from],i=e[t.to];o.from=r.e.getMin(a.x-l.width/2,a.x-a.width/2,o.from),o.to=r.e.getMax(i.x+l.width/2,i.x+a.width/2,o.to),o.width=r.e.getMax(o.width,Math.abs(o.to-o.from))-j.labelBoxWidth}else o.from=r.e.getMin(l.startx,o.from),o.to=r.e.getMax(l.stopx,o.to),o.width=r.e.getMax(o.width,l.width)-j.labelBoxWidth})))})),K.activations=[],r.l.debug("Loop type widths:",s),s},nt={parser:c,db:S,renderer:{bounds:K,drawActors:Z,drawActorsPopup:Q,setConf:tt,draw:function(t,e,a,n){const{securityLevel:o,sequence:c}=(0,r.c)();let l;j=c,"sandbox"===o&&(l=(0,i.Ys)("#i"+e));const h="sandbox"===o?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body"),d="sandbox"===o?l.nodes()[0].contentDocument:document;K.init(),r.l.debug(n.db);const p="sandbox"===o?h.select(`[id="${e}"]`):(0,i.Ys)(`[id="${e}"]`),g=n.db.getActors(),u=n.db.getCreatedActors(),x=n.db.getDestroyedActors(),y=n.db.getBoxes();let m=n.db.getActorKeys();const b=n.db.getMessages(),f=n.db.getDiagramTitle(),T=n.db.hasAtLeastOneBox(),E=n.db.hasAtLeastOneBoxWithTitle(),w=function(t,e,a){const i={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const s=t[e.to];if(e.placement===a.db.PLACEMENT.LEFTOF&&!s.prevActor)return;if(e.placement===a.db.PLACEMENT.RIGHTOF&&!s.nextActor)return;const n=void 0!==e.placement,o=!n,c=n?G(j):X(j),l=e.wrap?r.u.wrapLabel(e.message,j.width-2*j.wrapPadding,c):e.message,h=r.u.calculateTextDimensions(l,c).width+2*j.wrapPadding;o&&e.from===s.nextActor?i[e.to]=r.e.getMax(i[e.to]||0,h):o&&e.from===s.prevActor?i[e.from]=r.e.getMax(i[e.from]||0,h):o&&e.from===e.to?(i[e.from]=r.e.getMax(i[e.from]||0,h/2),i[e.to]=r.e.getMax(i[e.to]||0,h/2)):e.placement===a.db.PLACEMENT.RIGHTOF?i[e.from]=r.e.getMax(i[e.from]||0,h):e.placement===a.db.PLACEMENT.LEFTOF?i[s.prevActor]=r.e.getMax(i[s.prevActor]||0,h):e.placement===a.db.PLACEMENT.OVER&&(s.prevActor&&(i[s.prevActor]=r.e.getMax(i[s.prevActor]||0,h/2)),s.nextActor&&(i[e.from]=r.e.getMax(i[e.from]||0,h/2)))}})),r.l.debug("maxMessageWidthPerActor:",i),i}(g,b,n);if(j.height=function(t,e,a){let i=0;Object.keys(t).forEach((e=>{const a=t[e];a.wrap&&(a.description=r.u.wrapLabel(a.description,j.width-2*j.wrapPadding,J(j)));const s=r.u.calculateTextDimensions(a.description,J(j));a.width=a.wrap?j.width:r.e.getMax(j.width,s.width+2*j.wrapPadding),a.height=a.wrap?r.e.getMax(s.height,j.height):j.height,i=r.e.getMax(i,a.height)}));for(const n in e){const a=t[n];if(!a)continue;const i=t[a.nextActor];if(!i){const t=e[n]+j.actorMargin-a.width/2;a.margin=r.e.getMax(t,j.actorMargin);continue}const s=e[n]+j.actorMargin-a.width/2-i.width/2;a.margin=r.e.getMax(s,j.actorMargin)}let s=0;return a.forEach((e=>{const a=X(j);let i=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);i-=2*j.boxTextMargin,e.wrap&&(e.name=r.u.wrapLabel(e.name,i-2*j.wrapPadding,a));const n=r.u.calculateTextDimensions(e.name,a);s=r.e.getMax(n.height,s);const o=r.e.getMax(i,n.width+2*j.wrapPadding);if(e.margin=j.boxTextMargin,i<o){const t=(o-i)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=s)),r.e.getMax(i,j.height)}(g,w,y),U.insertComputerIcon(p),U.insertDatabaseIcon(p),U.insertClockIcon(p),T&&(K.bumpVerticalPos(j.boxMargin),E&&K.bumpVerticalPos(y[0].textMaxHeight)),!0===j.hideUnusedParticipants){const t=new Set;b.forEach((e=>{t.add(e.from),t.add(e.to)})),m=m.filter((e=>t.has(e)))}!function(t,e,a,i,s,n,o){let c,l=0,h=0,d=0;for(const p of i){const t=e[p],i=t.box;c&&c!=i&&(o||K.models.addBox(c),h+=j.boxMargin+c.margin),i&&i!=c&&(o||(i.x=l+h,i.y=s),h+=i.margin),t.width=t.width||j.width,t.height=r.e.getMax(t.height||j.height,j.height),t.margin=t.margin||j.actorMargin,d=r.e.getMax(d,t.height),a[t.name]&&(h+=t.width/2),t.x=l+h,t.starty=K.getVerticalPos(),K.insert(t.x,s,t.x+t.width,t.height),l+=t.width+h,t.box&&(t.box.width=l+i.margin-t.box.x),h=t.margin,c=t.box,K.models.addActor(t)}c&&!o&&K.models.addBox(c),K.bumpVerticalPos(d)}(0,g,u,m,0,0,!1);const _=st(b,g,w,n);U.insertArrowHead(p),U.insertArrowCrossHead(p),U.insertArrowFilledHead(p),U.insertSequenceNumber(p);let v=1,P=1;const k=[],L=[];b.forEach((function(t,e){let a,i,o;switch(t.type){case n.db.LINETYPE.NOTE:K.resetVerticalPos(),i=t.noteModel,function(t,e){K.bumpVerticalPos(j.boxMargin),e.height=j.boxMargin,e.starty=K.getVerticalPos();const a=(0,s.g)();a.x=e.startx,a.y=e.starty,a.width=e.width||j.width,a.class="note";const r=t.append("g"),i=U.drawRect(r,a),n=(0,s.e)();n.x=e.startx,n.y=e.starty,n.width=a.width,n.dy="1em",n.text=e.message,n.class="noteText",n.fontFamily=j.noteFontFamily,n.fontSize=j.noteFontSize,n.fontWeight=j.noteFontWeight,n.anchor=j.noteAlign,n.textMargin=j.noteMargin,n.valign="center";const o=$(r,n),c=Math.round(o.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));i.attr("height",c+2*j.noteMargin),e.height+=c+2*j.noteMargin,K.bumpVerticalPos(c+2*j.noteMargin),e.stopy=e.starty+c+2*j.noteMargin,e.stopx=e.startx+a.width,K.insert(e.startx,e.starty,e.stopx,e.stopy),K.models.addNote(e)}(p,i);break;case n.db.LINETYPE.ACTIVE_START:K.newActivation(t,p,g);break;case n.db.LINETYPE.ACTIVE_END:!function(t,e){const a=K.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),U.drawActivation(p,a,e,j,et(t.from.actor).length),K.insert(a.startx,e-10,a.stopx,e)}(t,K.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case n.db.LINETYPE.LOOP_END:a=K.endLoop(),U.drawLoop(p,a,"loop",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;case n.db.LINETYPE.RECT_START:rt(_,t,j.boxMargin,j.boxMargin,(t=>K.newLoop(void 0,t.message)));break;case n.db.LINETYPE.RECT_END:a=K.endLoop(),L.push(a),K.models.addLoop(a),K.bumpVerticalPos(a.stopy-K.getVerticalPos());break;case n.db.LINETYPE.OPT_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case n.db.LINETYPE.OPT_END:a=K.endLoop(),U.drawLoop(p,a,"opt",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;case n.db.LINETYPE.ALT_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case n.db.LINETYPE.ALT_ELSE:rt(_,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case n.db.LINETYPE.ALT_END:a=K.endLoop(),U.drawLoop(p,a,"alt",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t))),K.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:rt(_,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case n.db.LINETYPE.PAR_END:a=K.endLoop(),U.drawLoop(p,a,"par",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;case n.db.LINETYPE.AUTONUMBER:v=t.message.start||v,P=t.message.step||P,t.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case n.db.LINETYPE.CRITICAL_OPTION:rt(_,t,j.boxMargin+j.boxTextMargin,j.boxMargin,(t=>K.addSectionToLoop(t)));break;case n.db.LINETYPE.CRITICAL_END:a=K.endLoop(),U.drawLoop(p,a,"critical",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;case n.db.LINETYPE.BREAK_START:rt(_,t,j.boxMargin,j.boxMargin+j.boxTextMargin,(t=>K.newLoop(t)));break;case n.db.LINETYPE.BREAK_END:a=K.endLoop(),U.drawLoop(p,a,"break",j),K.bumpVerticalPos(a.stopy-K.getVerticalPos()),K.models.addLoop(a);break;default:try{o=t.msgModel,o.starty=K.getVerticalPos(),o.sequenceIndex=v,o.sequenceVisible=n.db.showSequenceNumbers();const a=function(t,e){K.bumpVerticalPos(10);const{startx:a,stopx:i,message:s}=e,n=r.e.splitBreaks(s).length,o=r.u.calculateTextDimensions(s,X(j)),c=o.height/n;let l;e.height+=c,K.bumpVerticalPos(c);let h=o.height-10;const d=o.width;if(a===i){l=K.getVerticalPos()+h,j.rightAngles||(h+=j.boxMargin,l=K.getVerticalPos()+h),h+=30;const t=r.e.getMax(d/2,j.width/2);K.insert(a-t,K.getVerticalPos()-10+h,i+t,K.getVerticalPos()+30+h)}else h+=j.boxMargin,l=K.getVerticalPos()+h,K.insert(a,l-10,i,l);return K.bumpVerticalPos(h),e.height+=h,e.stopy=e.starty+e.height,K.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}(0,o);!function(t,e,a,r,i,s,n){function o(a,r){a.x<i[t.from].x?(K.insert(e.stopx-r,e.starty,e.startx,e.stopy+a.height/2+j.noteMargin),e.stopx=e.stopx+r):(K.insert(e.startx,e.starty,e.stopx+r,e.stopy+a.height/2+j.noteMargin),e.stopx=e.stopx-r)}if(s[t.to]==r){const e=i[t.to];o(e,"actor"==e.type?21:e.width/2+3),e.starty=a-e.height/2,K.bumpVerticalPos(e.height/2)}else if(n[t.from]==r){const r=i[t.from];j.mirrorActors&&function(a,r){a.x<i[t.to].x?(K.insert(e.startx-r,e.starty,e.stopx,e.stopy+a.height/2+j.noteMargin),e.startx=e.startx+r):(K.insert(e.stopx,e.starty,e.startx+r,e.stopy+a.height/2+j.noteMargin),e.startx=e.startx-r)}(r,"actor"==r.type?18:r.width/2),r.stopy=a-r.height/2,K.bumpVerticalPos(r.height/2)}else if(n[t.to]==r){const e=i[t.to];j.mirrorActors&&o(e,"actor"==e.type?21:e.width/2+3),e.stopy=a-e.height/2,K.bumpVerticalPos(e.height/2)}}(t,o,a,e,g,u,x),k.push({messageModel:o,lineStartY:a}),K.models.addMessage(o)}catch(c){r.l.error("error while drawing message",c)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(v+=P)})),r.l.debug("createdActors",u),r.l.debug("destroyedActors",x),Z(p,g,m,!1),k.forEach((t=>function(t,e,a,i){const{startx:n,stopx:o,starty:c,message:l,type:h,sequenceIndex:d,sequenceVisible:p}=e,g=r.u.calculateTextDimensions(l,X(j)),u=(0,s.e)();u.x=n,u.y=c+10,u.width=o-n,u.class="messageText",u.dy="1em",u.text=l,u.fontFamily=j.messageFontFamily,u.fontSize=j.messageFontSize,u.fontWeight=j.messageFontWeight,u.anchor=j.messageAlign,u.valign="center",u.textMargin=j.wrapPadding,u.tspan=!1,$(t,u);const x=g.width;let y;n===o?y=j.rightAngles?t.append("path").attr("d",`M ${n},${a} H ${n+r.e.getMax(j.width/2,x/2)} V ${a+25} H ${n}`):t.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)):(y=t.append("line"),y.attr("x1",n),y.attr("y1",a),y.attr("x2",o),y.attr("y2",a)),h===i.db.LINETYPE.DOTTED||h===i.db.LINETYPE.DOTTED_CROSS||h===i.db.LINETYPE.DOTTED_POINT||h===i.db.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");let m="";j.arrowMarkerAbsolute&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","none"),y.style("fill","none"),h!==i.db.LINETYPE.SOLID&&h!==i.db.LINETYPE.DOTTED||y.attr("marker-end","url("+m+"#arrowhead)"),h!==i.db.LINETYPE.SOLID_POINT&&h!==i.db.LINETYPE.DOTTED_POINT||y.attr("marker-end","url("+m+"#filled-head)"),h!==i.db.LINETYPE.SOLID_CROSS&&h!==i.db.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+m+"#crosshead)"),(p||j.showSequenceNumbers)&&(y.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(d))}(p,t.messageModel,t.lineStartY,n))),j.mirrorActors&&Z(p,g,m,!0),L.forEach((t=>U.drawBackgroundRect(p,t))),F(p,g,m,j),K.models.boxes.forEach((function(t){t.height=K.getVerticalPos()-t.y,K.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",U.drawBox(p,t,j)})),T&&K.bumpVerticalPos(j.boxMargin);const I=Q(p,g,m,d),{bounds:M}=K.getBounds();let N=M.stopy-M.starty;N<I.maxHeight&&(N=I.maxHeight);let A=N+2*j.diagramMarginY;j.mirrorActors&&(A=A-j.boxMargin+j.bottomMarginAdj);let S=M.stopx-M.startx;S<I.maxWidth&&(S=I.maxWidth);const O=S+2*j.diagramMarginX;f&&p.append("text").text(f).attr("x",(M.stopx-M.startx)/2-2*j.diagramMarginX).attr("y",-25),(0,r.i)(p,A,O,j.useMaxWidth);const D=f?40:0;p.attr("viewBox",M.startx-j.diagramMarginX+" -"+(j.diagramMarginY+D)+" "+O+" "+(A+D)),r.l.debug("models:",K.models)}},styles:O}},47435:(t,e,a)=>{a.d(e,{a:()=>n,b:()=>l,c:()=>c,d:()=>s,e:()=>d,f:()=>o,g:()=>h});var r=a(7608),i=a(99854);const s=(t,e)=>{const a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),void 0!==e.rx&&a.attr("rx",e.rx),void 0!==e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const r in e.attrs)a.attr(r,e.attrs[r]);return void 0!==e.class&&a.attr("class",e.class),a},n=(t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,a).lower()},o=(t,e)=>{const a=e.text.replace(i.J," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const s=r.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(a),r},c=(t,e,a,i)=>{const s=t.append("image");s.attr("x",e),s.attr("y",a);const n=(0,r.Nm)(i);s.attr("xlink:href",n)},l=(t,e,a,i)=>{const s=t.append("use");s.attr("x",e),s.attr("y",a);const n=(0,r.Nm)(i);s.attr("xlink:href",`#${n}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/14e6fd9e.dea27f49.js b/assets/js/14e6fd9e.dea27f49.js new file mode 100644 index 0000000000..84ef347bd9 --- /dev/null +++ b/assets/js/14e6fd9e.dea27f49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[10858],{8192:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var o=n(24246),s=n(71670);const r={},a="Test Relative Path",i={permalink:"/tests/blog/2023/07/19/b",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-b.mdx",source:"@site/_dogfooding/_blog tests/2023-07-19-b.mdx",title:"Test Relative Path",description:"",date:"2023-07-19T00:00:00.000Z",tags:[],readingTime:0,hasTruncateMarker:!1,authors:[],frontMatter:{},unlisted:!1,prevItem:{title:"Test if href in feed resolved correctly",permalink:"/tests/blog/2023/07/19/a"},nextItem:{title:"A post with html slug",permalink:"/tests/blog/x/y/z.html"}},c={authorsImageUrls:[]},l=[];function u(t){return(0,o.jsx)(o.Fragment,{})}function d(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u()}},71670:(t,e,n)=>{n.d(e,{Z:()=>i,a:()=>a});var o=n(27378);const s={},r=o.createContext(s);function a(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:a(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.3c5d7a43.js b/assets/js/14eb3368.3c5d7a43.js new file mode 100644 index 0000000000..bd908674c4 --- /dev/null +++ b/assets/js/14eb3368.3c5d7a43.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9817],{54120:(e,t,n)=>{n.d(t,{Z:()=>O});var r=n(24246),i=(n(27378),n(40624)),o=n(89583),s=n(41876),c=n(39779),a=n(41428),l=n(36712),u=n(66448);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function m(e){return(0,r.jsx)("svg",b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,r.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const p={breadcrumbHomeIcon:"breadcrumbHomeIcon_uaSn"};function f(){const e=(0,u.Z)("/");return(0,r.jsx)("li",{className:"breadcrumbs__item",children:(0,r.jsx)(a.Z,{"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,r.jsx)(m,{className:p.breadcrumbHomeIcon})})})}const h={breadcrumbsContainer:"breadcrumbsContainer_Wvrh"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v({children:e,href:t,isLast:n}){const i="breadcrumbs__link";return n?(0,r.jsx)("span",{className:i,itemProp:"name",children:e}):t?(0,r.jsx)(a.Z,{className:i,href:t,itemProp:"item",children:(0,r.jsx)("span",{itemProp:"name",children:e})}):(0,r.jsx)("span",{className:i,children:e})}function y({children:e,active:t,index:n,addMicrodata:o}){return(0,r.jsxs)("li",j(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"}),{className:(0,i.Z)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[e,(0,r.jsx)("meta",{itemProp:"position",content:String(n+1)})]}))}function O(){const e=(0,s.s1)(),t=(0,c.Ns)();return e?(0,r.jsx)("nav",{className:(0,i.Z)(o.k.docs.docBreadcrumbs,h.breadcrumbsContainer),"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,r.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,r.jsx)(f,{}),e.map(((t,n)=>{const i=n===e.length-1,o="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,r.jsx)(y,{active:i,index:n,addMicrodata:!!o,children:(0,r.jsx)(v,{href:o,isLast:i,children:t.label})},n)}))]})}):null}},24239:(e,t,n)=>{n.d(t,{Z:()=>v});var r=n(24246),i=(n(27378),n(40624)),o=n(41876),s=n(41428),c=n(7812),a=n(64149),l=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function b({href:e,children:t}){return(0,r.jsx)(s.Z,{href:e,className:(0,i.Z)("card padding--lg",d.cardContainer),children:t})}function m({href:e,icon:t,title:n,description:o}){return(0,r.jsxs)(b,{href:e,children:[(0,r.jsxs)(u.Z,{as:"h2",className:(0,i.Z)("text--truncate",d.cardTitle),title:n,children:[t," ",n]}),o&&(0,r.jsx)("p",{className:(0,i.Z)("text--truncate",d.cardDescription),title:o,children:o})]})}function p({item:e}){const t=(0,o.LM)(e),n=function(){const{selectMessage:e}=(0,c.c)();return t=>e(t,(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,r.jsx)(m,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(i=e.description)&&void 0!==i?i:n(e.items.length)}):null;var i}function f({item:e}){const t=(0,a.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const i=(0,o.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,r.jsx)(m,{href:e.href,icon:t,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==i?void 0:i.description})}function h({item:e}){switch(e.type){case"link":return(0,r.jsx)(f,{item:e});case"category":return(0,r.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j({className:e}){const t=(0,o.jA)();return(0,r.jsx)(v,{items:t.items,className:e})}function v(e){const{items:t,className:n}=e;if(!t)return(0,r.jsx)(j,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}({},e));const s=(0,o.MN)(t);return(0,r.jsx)("section",{className:(0,i.Z)("row",n),children:s.map(((e,t)=>(0,r.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,r.jsx)(h,{item:e})},t)))})}},76068:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(24246),i=(n(27378),n(36712)),o=n(6649);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){s(e,t,n[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l(e){const{previous:t,next:n}=e;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,r.jsx)(o.Z,a(c({},t),{subLabel:(0,r.jsx)(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),n&&(0,r.jsx)(o.Z,a(c({},n),{subLabel:(0,r.jsx)(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},14848:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),i=(n(27378),n(40624)),o=n(36712),s=n(89583),c=n(66265);function a({className:e}){const t=(0,c.E)();return t.badge?(0,r.jsx)("span",{className:(0,i.Z)(e,s.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,r.jsx)(o.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},55765:(e,t,n)=>{n.d(t,{Z:()=>g});var r=n(24246),i=(n(27378),n(40624)),o=n(4423),s=n(41428),c=n(36712),a=n(92053),l=n(89583),u=n(32054),d=n(66265);function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const m={unreleased:function({siteTitle:e,versionMetadata:t}){return(0,r.jsx)(c.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,r.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:t}){return(0,r.jsx)(c.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,r.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function p(e){const t=m[e.versionMetadata.banner];return(0,r.jsx)(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){b(e,t,n[t])}))}return e}({},e))}function f({versionLabel:e,to:t,onClick:n}){return(0,r.jsx)(c.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,r.jsx)("b",{children:(0,r.jsx)(s.Z,{to:t,onClick:n,children:(0,r.jsx)(c.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function h({className:e,versionMetadata:t}){const{siteConfig:{title:n}}=(0,o.Z)(),{pluginId:s}=(0,a.gA)({failfast:!0}),{savePreferredVersionName:c}=(0,u.J)(s),{latestDocSuggestion:d,latestVersionSuggestion:b}=(0,a.Jo)(s),m=null!=d?d:(h=b).docs.find((e=>e.id===h.mainDocId));var h;return(0,r.jsxs)("div",{className:(0,i.Z)(e,l.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,r.jsx)("div",{children:(0,r.jsx)(p,{siteTitle:n,versionMetadata:t})}),(0,r.jsx)("div",{className:"margin-top--md",children:(0,r.jsx)(f,{versionLabel:b.label,to:m.path,onClick:()=>c(b.name)})})]})}function g({className:e}){const t=(0,d.E)();return t.banner?(0,r.jsx)(h,{className:e,versionMetadata:t}):null}},6649:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),i=(n(27378),n(40624)),o=n(41428);function s(e){const{permalink:t,title:n,subLabel:s,isNext:c}=e;return(0,r.jsxs)(o.Z,{className:(0,i.Z)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,r.jsx)("div",{className:"pagination-nav__label",children:n})]})}},7812:(e,t,n)=>{n.d(t,{c:()=>l});var r=n(27378),i=n(4423);const o=["zero","one","two","few","many","other"];function s(e){return o.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function a(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function l(){const e=a();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const i=n.select(t),o=n.pluralForms.indexOf(i);return r[Math.min(o,r.length-1)]}(n,t,e)}}},88173:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Z});var r=n(24246),i=(n(27378),n(41876)),o=n(41428),s=n(36712),c=n(44008),a=n(66448),l=n(24239),u=n(76068),d=n(55765),b=n(14848),m=n(54120),p=n(52615);const f={generatedIndexPage:"generatedIndexPage_hs4p",list:"list_ZO3j",title:"title_tRie"};function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}function j({categoryGeneratedIndex:e}){return(0,r.jsx)(c.d,{title:e.title,description:e.description,keywords:e.keywords,image:(0,a.Z)(e.image)})}function v({categoryGeneratedIndex:e}){const t=(0,i.jA)();return(0,r.jsxs)("div",{className:f.generatedIndexPage,children:[(0,r.jsx)(d.Z,{}),(0,r.jsx)(m.Z,{}),(0,r.jsx)(b.Z,{}),(0,r.jsxs)("header",{children:[(0,r.jsx)(p.Z,{as:"h1",className:f.title,children:e.title}),e.description&&(0,r.jsx)("p",{children:e.description})]}),(0,r.jsx)("article",{className:"margin-top--lg",children:(0,r.jsx)(l.Z,{items:t.items,className:f.list})}),(0,r.jsx)("footer",{className:"margin-top--lg",children:(0,r.jsx)(u.Z,{previous:e.navigation.previous,next:e.navigation.next})})]})}function y(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(j,g({},e)),(0,r.jsx)(v,g({},e))]})}const O={footerTip:"footerTip_UBUV"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function P(){var e;const t=null===(e=(0,i.vY)("guides/docs/sidebar/items",void 0))||void 0===e?void 0:e.path;return(0,r.jsx)("p",{className:O.footerTip,children:(0,r.jsx)(s.Z,{values:{guideLink:(0,r.jsx)(o.Z,{to:`${t}#category-link`,children:(0,r.jsx)(s.Z,{children:"the generated index page guide"})})},children:"Want to implement the same page? Read {guideLink} to find out!"})})}function Z(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(y,w({},e)),(0,r.jsx)(P,{})]})}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.4f3a7238.js b/assets/js/14eb3368.4f3a7238.js deleted file mode 100644 index 999d7d37f3..0000000000 --- a/assets/js/14eb3368.4f3a7238.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[6969],{1243:(e,t,n)=>{n.d(t,{A:()=>g});n(6540);var s=n(4164),r=n(7559),i=n(1754),a=n(9169),l=n(8774),o=n(1312),c=n(6025),d=n(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.A)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.A,{"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:n,isLast:s}=e;const r="breadcrumbs__link";return s?(0,d.jsx)("span",{className:r,itemProp:"name",children:t}):n?(0,d.jsx)(l.A,{className:r,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:r,children:t})}function p(e){let{children:t,active:n,index:r,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}function g(){const e=(0,i.OF)(),t=(0,a.Dt)();return e?(0,d.jsx)("nav",{className:(0,s.A)(r.G.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,r="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(p,{active:s,index:n,addMicrodata:!!r,children:(0,d.jsx)(x,{href:r,isLast:s,children:t.label})},n)}))]})}):null}},4136:(e,t,n)=>{n.r(t),n.d(t,{default:()=>w});n(6540);var s=n(1213),r=n(1754),i=n(6025),a=n(4164),l=n(8774),o=n(5846),c=n(6654),d=n(1312),u=n(1107);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=n(4848);function b(e){let{href:t,children:n}=e;return(0,h.jsx)(l.A,{href:t,className:(0,a.A)("card padding--lg",m.cardContainer),children:n})}function x(e){let{href:t,icon:n,title:s,description:r}=e;return(0,h.jsxs)(b,{href:t,children:[(0,h.jsxs)(u.A,{as:"h2",className:(0,a.A)("text--truncate",m.cardTitle),title:s,children:[n," ",s]}),r&&(0,h.jsx)("p",{className:(0,a.A)("text--truncate",m.cardDescription),title:r,children:r})]})}function p(e){let{item:t}=e;const n=(0,r.Nr)(t),s=function(){const{selectMessage:e}=(0,o.W)();return t=>e(t,(0,d.T)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,h.jsx)(x,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??s(t.items.length)}):null}function g(e){let{item:t}=e;const n=(0,c.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,r.cC)(t.docId??void 0);return(0,h.jsx)(x,{href:t.href,icon:n,title:t.label,description:t.description??s?.description})}function v(e){let{item:t}=e;switch(t.type){case"link":return(0,h.jsx)(g,{item:t});case"category":return(0,h.jsx)(p,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,r.$S)();return(0,h.jsx)(j,{items:n.items,className:t})}function j(e){const{items:t,className:n}=e;if(!t)return(0,h.jsx)(f,{...e});const s=(0,r.d1)(t);return(0,h.jsx)("section",{className:(0,a.A)("row",n),children:s.map(((e,t)=>(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(v,{item:e})},t)))})}var A=n(7719),N=n(1878),T=n(4267),L=n(1243);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,h.jsx)(s.be,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.A)(t.image)})}function y(e){let{categoryGeneratedIndex:t}=e;const n=(0,r.$S)();return(0,h.jsxs)("div",{className:_.generatedIndexPage,children:[(0,h.jsx)(N.A,{}),(0,h.jsx)(L.A,{}),(0,h.jsx)(T.A,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.A,{as:"h1",className:_.title,children:t.title}),t.description&&(0,h.jsx)("p",{children:t.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:n.items,className:_.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(A.A,{previous:t.navigation.previous,next:t.navigation.next})})]})}function w(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(k,{...e}),(0,h.jsx)(y,{...e})]})}},7719:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var s=n(1312),r=n(9022),i=n(4848);function a(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(r.A,{...t,subLabel:(0,i.jsx)(s.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(r.A,{...n,subLabel:(0,i.jsx)(s.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4267:(e,t,n)=>{n.d(t,{A:()=>o});n(6540);var s=n(4164),r=n(1312),i=n(7559),a=n(2252),l=n(4848);function o(e){let{className:t}=e;const n=(0,a.r)();return n.badge?(0,l.jsx)("span",{className:(0,s.A)(t,i.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(r.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},1878:(e,t,n)=>{n.d(t,{A:()=>p});n(6540);var s=n(4164),r=n(4586),i=n(8774),a=n(1312),l=n(4070),o=n(7559),c=n(5597),d=n(2252),u=n(4848);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.A,{to:n,onClick:s,children:(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,r.A)(),{pluginId:a}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:d}=(0,c.g1)(a),{latestDocSuggestion:m,latestVersionSuggestion:x}=(0,l.HW)(a),p=m??(g=x).docs.find((e=>e.id===g.mainDocId));var g;return(0,u.jsxs)("div",{className:(0,s.A)(t,o.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(b,{versionLabel:x.label,to:p.path,onClick:()=>d(x.name)})})]})}function p(e){let{className:t}=e;const n=(0,d.r)();return n.banner?(0,u.jsx)(x,{className:t,versionMetadata:n}):null}},9022:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var s=n(4164),r=n(8774),i=n(4848);function a(e){const{permalink:t,title:n,subLabel:a,isNext:l}=e;return(0,i.jsxs)(r.A,{className:(0,s.A)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[a&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}},5846:(e,t,n)=>{n.d(t,{W:()=>c});var s=n(6540),r=n(4586);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function c(){const e=o();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const r=n.select(t),i=n.pluralForms.indexOf(r);return s[Math.min(i,s.length-1)]}(n,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/15fed87b.134823e5.js b/assets/js/15fed87b.134823e5.js new file mode 100644 index 0000000000..12826b27a4 --- /dev/null +++ b/assets/js/15fed87b.134823e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76551],{38240:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>n,contentTitle:()=>c,default:()=>a,frontMatter:()=>l,metadata:()=>t,toc:()=>o});var r=i(24246),h=i(71670);const l={mdx:{format:"md"},date:"2021-06-18T20:00",authors:["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},c="2.0.0-beta.1",t={permalink:"/changelog/2.0.0-beta.1",source:"@site/changelog/source/2.0.0-beta.1.md",title:"2.0.0-beta.1",description:"New Feature",date:"2021-06-18T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"antonygibbs",alias:"antonygibbs",url:"https://github.com/antonygibbs",imageURL:"https://github.com/antonygibbs.png",key:"antonygibbs"},{name:"Arthur",alias:"ArtFlag",url:"https://github.com/ArtFlag",imageURL:"https://github.com/ArtFlag.png",key:"ArtFlag"},{name:"besemuna",alias:"besemuna",url:"https://github.com/besemuna",imageURL:"https://github.com/besemuna.png",key:"besemuna"},{name:"Christopher Hsieh",alias:"Christopher-Hsieh",url:"https://github.com/Christopher-Hsieh",imageURL:"https://github.com/Christopher-Hsieh.png",key:"Christopher-Hsieh"},{name:"Ben Rometsch",alias:"dabeeeenster",url:"https://github.com/dabeeeenster",imageURL:"https://github.com/dabeeeenster.png",key:"dabeeeenster"},{name:"e271828-",alias:"e271828-",url:"https://github.com/e271828-",imageURL:"https://github.com/e271828-.png",key:"e271828-"},{name:"fgatti675",alias:"fgatti675",url:"https://github.com/fgatti675",imageURL:"https://github.com/fgatti675.png",key:"fgatti675"},{name:"Tina\xebl Devresse",alias:"HunteRoi",url:"https://github.com/HunteRoi",imageURL:"https://github.com/HunteRoi.png",key:"HunteRoi"},{name:"Jonathan Mazin",alias:"jmazin",url:"https://github.com/jmazin",imageURL:"https://github.com/jmazin.png",key:"jmazin"},{name:"Joel",alias:"Joelpo",url:"https://github.com/Joelpo",imageURL:"https://github.com/Joelpo.png",key:"Joelpo"},{name:"Jon Barker",alias:"jonbarker68",url:"https://github.com/jonbarker68",imageURL:"https://github.com/jonbarker68.png",key:"jonbarker68"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Louis Gallet",alias:"l0u1sg",url:"https://github.com/l0u1sg",imageURL:"https://github.com/l0u1sg.png",key:"l0u1sg"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Pablo Vidal",alias:"limkinZero",url:"https://github.com/limkinZero",imageURL:"https://github.com/limkinZero.png",key:"limkinZero"},{name:"Lior Heber",alias:"liorheber",url:"https://github.com/liorheber",imageURL:"https://github.com/liorheber.png",key:"liorheber"},{name:"Louis Grenard",alias:"louistiti",url:"https://github.com/louistiti",imageURL:"https://github.com/louistiti.png",key:"louistiti"},{name:"Massibian",alias:"Massibian",url:"https://github.com/Massibian",imageURL:"https://github.com/Massibian.png",key:"Massibian"},{name:"Nam Hoang Le",alias:"nam-hle",url:"https://github.com/nam-hle",imageURL:"https://github.com/nam-hle.png",key:"nam-hle"},{name:"Pratyay Banerjee",alias:"Neilblaze",url:"https://github.com/Neilblaze",imageURL:"https://github.com/Neilblaze.png",key:"Neilblaze"},{name:"nirtamir2",alias:"nirtamir2",url:"https://github.com/nirtamir2",imageURL:"https://github.com/nirtamir2.png",key:"nirtamir2"},{name:"phwt.smwt",alias:"phwt",url:"https://github.com/phwt",imageURL:"https://github.com/phwt.png",key:"phwt"},{name:"Pedro Queiroz",alias:"pmqueiroz",url:"https://github.com/pmqueiroz",imageURL:"https://github.com/pmqueiroz.png",key:"pmqueiroz"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"PsychTech",alias:"PsychTechApS",url:"https://github.com/PsychTechApS",imageURL:"https://github.com/PsychTechApS.png",key:"PsychTechApS"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"silva-nick",alias:"silva-nick",url:"https://github.com/silva-nick",imageURL:"https://github.com/silva-nick.png",key:"silva-nick"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"mg",alias:"tiny-dancer",url:"https://github.com/tiny-dancer",imageURL:"https://github.com/tiny-dancer.png",key:"tiny-dancer"},{name:"Lucas Correia",alias:"tsirlucas",url:"https://github.com/tsirlucas",imageURL:"https://github.com/tsirlucas.png",key:"tsirlucas"},{name:"Fardeen Panjwani",alias:"wise-introvert",url:"https://github.com/wise-introvert",imageURL:"https://github.com/wise-introvert.png",key:"wise-introvert"}],frontMatter:{mdx:{format:"md"},date:"2021-06-18T20:00",authors:["antonygibbs","ArtFlag","besemuna","Christopher-Hsieh","dabeeeenster","e271828-","fgatti675","HunteRoi","jmazin","Joelpo","jonbarker68","Josh-Cena","l0u1sg","lex111","limkinZero","liorheber","louistiti","Massibian","nam-hle","Neilblaze","nirtamir2","phwt","pmqueiroz","pranabdas","PsychTechApS","SamChou19815","silva-nick","slorber","tiny-dancer","tsirlucas","wise-introvert"]},unlisted:!1,prevItem:{title:"2.0.0-beta.2",permalink:"/changelog/2.0.0-beta.2"},nextItem:{title:"2.0.0-beta.0",permalink:"/changelog/2.0.0-beta.0"},listPageLink:"/changelog/page/2"},n={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 31",id:"committers-31",level:2}];function u(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4982",children:"#4982"})," feat(v2): add docs pagination_label frontmatter (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4949",children:"#4949"})," feat(v2): add icon to external navbar links (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4939",children:"#4939"})," feat(v2): theme default translations Bengali (",(0,r.jsx)(s.a,{href:"https://github.com/Neilblaze",children:"@Neilblaze"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4811",children:"#4811"})," feat(v2): Add hebrew translations (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4798",children:"#4798"})," feat(v2): add theme Danish translation (",(0,r.jsx)(s.a,{href:"https://github.com/PsychTechApS",children:"@PsychTechApS"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4968",children:"#4968"})," feat(v2): add code block theming in init template (",(0,r.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4908",children:"#4908"})," feat(v2): add trailingSlash config option (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4796",children:"#4796"})," feat(v2): exhaustive docs frontmatter schema (",(0,r.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4618",children:"#4618"})," feat(v2): allow config plugins as functions or [function,options] (",(0,r.jsx)(s.a,{href:"https://github.com/besemuna",children:"@besemuna"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4759",children:"#4759"})," feat(v2): exhaustive BlogPostFrontMatter schema validation (",(0,r.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5001",children:"#5001"})," chore(v2): update Infima to alpha 26 (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4986",children:"#4986"})," fix(v2): fix UX for docsVersionDropdown on mobile for single version (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4980",children:"#4980"})," fix(v2): make proper data type for prependBaseUrlToHref field (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4943",children:"#4943"})," fix(v2): improve accessibility of code blocks (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4917",children:"#4917"})," fix(v2): tidy up Markdown page layout (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4906",children:"#4906"})," fix(v2): fix minor a11y issues (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4900",children:"#4900"})," fix(v2): adjust margin after content title (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4855",children:"#4855"})," chore(v2): update infima to alpha 24 (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4819",children:"#4819"})," fix(v2): Amend Hebrew translations (",(0,r.jsx)(s.a,{href:"https://github.com/liorheber",children:"@liorheber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4815",children:"#4815"})," fix(v2): Fix Hebrew translations (",(0,r.jsx)(s.a,{href:"https://github.com/nirtamir2",children:"@nirtamir2"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4792",children:"#4792"})," fix(v2): fix minor a11y issue with headings (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4793",children:"#4793"})," fix(v2): unbreak enhanced width of doc item wrapper (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-common"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5000",children:"#5000"})," fix(v2): fix theme array deduplication bug (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4988",children:"#4988"})," fix(v2): redirect plugin should use siteConfig.trailingSlash (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4983",children:"#4983"})," fix(v2): always use UTC when dealing with blog dates (",(0,r.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4962",children:"#4962"})," fix(v2): respect base url in RSS feeds (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4985",children:"#4985"})," fix(v2): navbar doc item fallback: search doc in lastVersion (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4964",children:"#4964"})," fix(v2): avoid duplicated imports in npm2yarn plugin (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4970",children:"#4970"})," fix(v2): sidebar_label should be used to compute next/previous button labels (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4861",children:"#4861"})," fix(v2): allow relative sidebar path resolution in docs:version command (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4859",children:"#4859"})," fix(v2): use frontmatter title at first for paginated links (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4775",children:"#4775"})," fix(v2): improve dx sidebar config, ability to have no sidebars file (",(0,r.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4950",children:"#4950"})," fix(v2): sitemap plugin should handle siteConfig.trailingSlash automatically (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4924",children:"#4924"})," fix(v2): respect baseUrl in serving command (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4935",children:"#4935"})," fix(v2): render children in BrowserOnly after client is ready (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4894",children:"#4894"})," fix(v2): escape HTML entities in user tags attributes (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4789",children:"#4789"})," fix(v2): transpile libs with too recent syntax with babel (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4784",children:"#4784"})," fix(v2): update notifier should never suggest to downgrade (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4882",children:"#4882"})," fix(v2): fix contentTitle issues when markdown h1 title contains code blocks (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4862",children:"#4862"})," fix(v2): remove Markdown heading id from excerpt (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4871",children:"#4871"})," fix(v2): unbreak adding of custom HTML metadatas (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4797",children:"#4797"})," fix(v2): do not focus on skip link if page refreshed (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4856",children:"#4856"})," fix(v2): adjust padding when custom search box location (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4830",children:"#4830"})," fix(v2): pin prism-react-renderer version to 1.1.1 (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,r.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4806",children:"#4806"})," chore(v2): update sharp to 0.28.2 (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4995",children:"#4995"})," refactor(v2): reduce top padding in doc content container (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4918",children:"#4918"})," refactor(v2): readjust footer of blog item (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4959",children:"#4959"})," refactor(v2): minor cleanups (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4945",children:"#4945"})," refactor(v2): remove extra padding from doc item container (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4940",children:"#4940"})," refactor(v2): improve semantic doc sidebar markup (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4961",children:"#4961"})," refactor(v2): improve semantic blog sidebar markup (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4903",children:"#4903"})," refactor(v2): make doc item layout more semantic (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4877",children:"#4877"})," refactor(v2): reduce vertical space in doc content container (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4914",children:"#4914"})," refactor(v2): use SVG for external link icon (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4916",children:"#4916"})," refactor(v2): replace strong with b in UI components (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4926",children:"#4926"})," refactor(v2): hide decorative SVGs from screen readers (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4865",children:"#4865"})," refactor(v2): make little better doc update block UI (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4795",children:"#4795"})," refactor(v2): remove transition on body element (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4989",children:"#4989"})," refactor(v2): blog/docs: add more context in error messages (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4979",children:"#4979"})," refactor(v2): cleanup console output (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4977",children:"#4977"})," polish(v2): url-subpath config validation warning (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4969",children:"#4969"})," refactor(v2): include path in error about non-existent ids (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4863",children:"#4863"})," refactor(v2): remove sidebar_label filed from doc metadata file (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4907",children:"#4907"})," refactor(v2): remove type attribute from link and script tags (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4919",children:"#4919"})," refactor(v2): improve markup and styling on search page (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4867",children:"#4867"})," chore(v2): update @docsearch/react (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4905",children:"#4905"})," refactor(v2): do not generate RSS files for empty feed (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4860",children:"#4860"})," refactor(v2): use aliased path for blog list sidebar file (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4870",children:"#4870"})," refactor(v2): add exception handling if external command is fails (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4875",children:"#4875"})," refactor(v2): make even better SSR error notify and add tip (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4866",children:"#4866"})," refactor(v2): output URL to console only if it has changed (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4814",children:"#4814"})," refactor(v2): purify normalizeUrl (",(0,r.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Other\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4987",children:"#4987"})," docs(v2): document canary releases (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4981",children:"#4981"})," docs(v2): minor tweaks (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4976",children:"#4976"})," docs(v2): mention to install the algolia package in search doc (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4953",children:"#4953"})," docs(v2): add Flagsmith to showcase (",(0,r.jsx)(s.a,{href:"https://github.com/dabeeeenster",children:"@dabeeeenster"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4942",children:"#4942"})," docs(v2): add info about ",(0,r.jsx)(s.code,{children:"DefaultValue"})," prop in ",(0,r.jsx)(s.code,{children:"Tabs"})," (",(0,r.jsx)(s.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4898",children:"#4898"})," docs(v2): add ClarityChallenge to showcase (",(0,r.jsx)(s.a,{href:"https://github.com/jonbarker68",children:"@jonbarker68"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4896",children:"#4896"})," docs(v2): fix incorrect link to plugin-ideal-image (",(0,r.jsx)(s.a,{href:"https://github.com/phwt",children:"@phwt"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4893",children:"#4893"})," docs(v2): presets: fix typo in bootstrap preset (",(0,r.jsx)(s.a,{href:"https://github.com/silva-nick",children:"@silva-nick"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4887",children:"#4887"})," docs(v2): Add Aide Jeune website to Docusaurus site showcase (",(0,r.jsx)(s.a,{href:"https://github.com/l0u1sg",children:"@l0u1sg"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4821",children:"#4821"})," docs(v2): New doc page for math equations (",(0,r.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4885",children:"#4885"})," docs(v2): v2 migration guide: mention Algolia config update (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4876",children:"#4876"})," docs(v2): update steps in the github-actions section (",(0,r.jsx)(s.a,{href:"https://github.com/wise-introvert",children:"@wise-introvert"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4880",children:"#4880"})," docs(v2): grammar typo in migration-overview.md (",(0,r.jsx)(s.a,{href:"https://github.com/jmazin",children:"@jmazin"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4879",children:"#4879"})," docs(v2): Added FireCMS to the showcase (",(0,r.jsx)(s.a,{href:"https://github.com/fgatti675",children:"@fgatti675"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4849",children:"#4849"})," docs(v2): fix Java syntax highlight in website (",(0,r.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4818",children:"#4818"})," docs(v2): add mr-pdf to resources (",(0,r.jsx)(s.a,{href:"https://github.com/antonygibbs",children:"@antonygibbs"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4835",children:"#4835"})," docs(v2): fix grammar typo on Creating pages (",(0,r.jsx)(s.a,{href:"https://github.com/Christopher-Hsieh",children:"@Christopher-Hsieh"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4837",children:"#4837"})," docs(v2): fix missing closing bracket (",(0,r.jsx)(s.a,{href:"https://github.com/pmqueiroz",children:"@pmqueiroz"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4820",children:"#4820"})," docs(v2): Fix typo in doc: sidebar.md (",(0,r.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4813",children:"#4813"})," docs(v2): fix css snipped with missing color (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4803",children:"#4803"})," docs(v2): Add i18n tag and fix typo (",(0,r.jsx)(s.a,{href:"https://github.com/HunteRoi",children:"@HunteRoi"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4786",children:"#4786"})," docs(v2): Add tinaeldevresse.eu to Docusaurus' gallery (",(0,r.jsx)(s.a,{href:"https://github.com/HunteRoi",children:"@HunteRoi"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4780",children:"#4780"})," docs(v2): remove docs for alpha 71 + 72 (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4779",children:"#4779"})," docs(v2): beta blog post edits (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4973",children:"#4973"})," docs(v2): replace ",(0,r.jsx)(s.code,{children:"diff"})," codeblocks with line highlight (",(0,r.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4756",children:"#4756"})," docs(v2): Docusaurus 2 beta blog post (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Other\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4994",children:"#4994"})," misc: more issue template improvements (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4951",children:"#4951"})," misc: disable google-gtag plugin in Netlify deploys (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4901",children:"#4901"})," misc: optimize showcase images (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4897",children:"#4897"})," chore: fail CI if yarn.lock is modified on install (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4858",children:"#4858"})," chore(v2): add external link to community sidebar (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4889",children:"#4889"})," misc: issue template config typo (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4886",children:"#4886"})," misc: add github issue template config (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4878",children:"#4878"})," misc: improve bug report issue template (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4791",children:"#4791"})," chore: fix canary version name (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4777",children:"#4777"})," chore: regenerate examples on 2.0.0-beta.0 (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4944",children:"#4944"})," chore: lockfile cleanup (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-1.x"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-init-1.x"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4902",children:"#4902"})," chore: remove docusaurus v1 from master branch (moved to docusaurus-v1 branch) (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4915",children:"#4915"})," chore(v2): bump react-waypoint from 9.0.2 to 10.1.0 (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4834",children:"#4834"})," chore(v2): unlock prism-react-renderer version (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4833",children:"#4833"})," chore(v2): bump cssnano packages (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4816",children:"#4816"})," chore(v2): upgrade dependencies (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4790",children:"#4790"})," chore(v2): TypeScript, use isolatedModules (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"committers-31",children:"Committers: 31"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,r.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Arthur (",(0,r.jsx)(s.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Ben Rometsch (",(0,r.jsx)(s.a,{href:"https://github.com/dabeeeenster",children:"@dabeeeenster"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Christopher Hsieh (",(0,r.jsx)(s.a,{href:"https://github.com/Christopher-Hsieh",children:"@Christopher-Hsieh"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Fardeen Panjwani (",(0,r.jsx)(s.a,{href:"https://github.com/wise-introvert",children:"@wise-introvert"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Joel (",(0,r.jsx)(s.a,{href:"https://github.com/Joelpo",children:"@Joelpo"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Jon Barker (",(0,r.jsx)(s.a,{href:"https://github.com/jonbarker68",children:"@jonbarker68"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Jonathan Mazin (",(0,r.jsx)(s.a,{href:"https://github.com/jmazin",children:"@jmazin"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Joshua Chen (",(0,r.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Lior Heber (",(0,r.jsx)(s.a,{href:"https://github.com/liorheber",children:"@liorheber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Louis Gallet (",(0,r.jsx)(s.a,{href:"https://github.com/l0u1sg",children:"@l0u1sg"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Louis Grenard (",(0,r.jsx)(s.a,{href:"https://github.com/louistiti",children:"@louistiti"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Lucas Correia (",(0,r.jsx)(s.a,{href:"https://github.com/tsirlucas",children:"@tsirlucas"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Nam Hoang Le (",(0,r.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Pablo Vidal (",(0,r.jsx)(s.a,{href:"https://github.com/limkinZero",children:"@limkinZero"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Pedro Queiroz (",(0,r.jsx)(s.a,{href:"https://github.com/pmqueiroz",children:"@pmqueiroz"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Pranab Das (",(0,r.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Pratyay Banerjee (",(0,r.jsx)(s.a,{href:"https://github.com/Neilblaze",children:"@Neilblaze"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["PsychTech (",(0,r.jsx)(s.a,{href:"https://github.com/PsychTechApS",children:"@PsychTechApS"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Sam Zhou (",(0,r.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Tina\xebl Devresse (",(0,r.jsx)(s.a,{href:"https://github.com/HunteRoi",children:"@HunteRoi"}),")"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/Massibian",children:"@Massibian"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/antonygibbs",children:"@antonygibbs"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/besemuna",children:"@besemuna"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/e271828-",children:"@e271828-"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/fgatti675",children:"@fgatti675"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/nirtamir2",children:"@nirtamir2"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/silva-nick",children:"@silva-nick"})}),"\n",(0,r.jsxs)(s.li,{children:["mg (",(0,r.jsx)(s.a,{href:"https://github.com/tiny-dancer",children:"@tiny-dancer"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["phwt.smwt (",(0,r.jsx)(s.a,{href:"https://github.com/phwt",children:"@phwt"}),")"]}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,h.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>t,a:()=>c});var r=i(27378);const h={},l=r.createContext(h);function c(e){const s=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(h):e.components||h:c(e.components),r.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16525.e7611f44.js b/assets/js/16525.e7611f44.js new file mode 100644 index 0000000000..6a0fbe4b45 --- /dev/null +++ b/assets/js/16525.e7611f44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16525],{16525:(e,t,n)=>{n.d(t,{d:()=>D,p:()=>r,s:()=>_});var s=n(63294),i=n(99854),u=function(){var e=function(e,t,n,s){for(n=n||{},s=e.length;s--;n[e[s]]=t);return n},t=[1,34],n=[1,35],s=[1,36],i=[1,37],u=[1,9],r=[1,8],a=[1,19],c=[1,20],o=[1,21],l=[1,40],h=[1,41],A=[1,27],p=[1,25],d=[1,26],y=[1,32],E=[1,33],C=[1,28],m=[1,29],k=[1,30],g=[1,31],F=[1,45],b=[1,42],f=[1,43],D=[1,44],_=[1,46],B=[1,24],T=[1,16,24],S=[1,60],v=[1,61],N=[1,62],L=[1,63],$=[1,64],I=[1,65],O=[1,66],x=[1,16,24,52],R=[1,77],w=[1,16,24,27,28,36,50,52,55,68,69,70,71,72,73,74,79,81],P=[1,16,24,27,28,34,36,50,52,55,59,68,69,70,71,72,73,74,79,81,94,96,97,98,99],G=[1,86],M=[28,94,96,97,98,99],U=[28,73,74,94,96,97,98,99],Y=[28,68,69,70,71,72,94,96,97,98,99],K=[1,99],z=[1,16,24,50,52,55],Q=[1,16,24,36],j=[8,9,10,11,19,23,44,46,48,53,57,58,60,61,63,65,75,76,78,82,94,96,97,98,99],X={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,statements:6,direction:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,EOF:24,statement:25,classLabel:26,SQS:27,STR:28,SQE:29,namespaceName:30,alphaNumToken:31,className:32,classLiteralName:33,GENERICTYPE:34,relationStatement:35,LABEL:36,namespaceStatement:37,classStatement:38,methodStatement:39,annotationStatement:40,clickStatement:41,cssClassStatement:42,noteStatement:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,namespaceIdentifier:49,STRUCT_START:50,classStatements:51,STRUCT_STOP:52,NAMESPACE:53,classIdentifier:54,STYLE_SEPARATOR:55,members:56,CLASS:57,ANNOTATION_START:58,ANNOTATION_END:59,MEMBER:60,SEPARATOR:61,relation:62,NOTE_FOR:63,noteText:64,NOTE:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,CSSCLASS:82,commentToken:83,textToken:84,graphCodeTokens:85,textNoTagsToken:86,TAGSTART:87,TAGEND:88,"==":89,"--":90,PCT:91,DEFAULT:92,SPACE:93,MINUS:94,keywords:95,UNICODE_TEXT:96,NUM:97,ALPHA:98,BQUOTE_STR:99,$accept:0,$end:1},terminals_:{2:"error",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",24:"EOF",27:"SQS",28:"STR",29:"SQE",34:"GENERICTYPE",36:"LABEL",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",50:"STRUCT_START",52:"STRUCT_STOP",53:"NAMESPACE",55:"STYLE_SEPARATOR",57:"CLASS",58:"ANNOTATION_START",59:"ANNOTATION_END",60:"MEMBER",61:"SEPARATOR",63:"NOTE_FOR",65:"NOTE",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"CSSCLASS",85:"graphCodeTokens",87:"TAGSTART",88:"TAGEND",89:"==",90:"--",91:"PCT",92:"DEFAULT",93:"SPACE",94:"MINUS",95:"keywords",96:"UNICODE_TEXT",97:"NUM",98:"ALPHA",99:"BQUOTE_STR"},productions_:[0,[3,1],[3,2],[3,1],[7,1],[7,1],[7,1],[7,1],[4,1],[5,4],[5,6],[13,1],[14,1],[18,1],[15,1],[12,4],[6,1],[6,2],[6,3],[26,3],[30,1],[30,2],[32,1],[32,1],[32,2],[32,2],[32,2],[25,1],[25,2],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,2],[25,2],[25,1],[37,4],[37,5],[49,2],[51,1],[51,2],[51,3],[38,1],[38,3],[38,4],[38,6],[54,2],[54,3],[40,4],[56,1],[56,2],[39,1],[39,2],[39,1],[39,1],[35,3],[35,4],[35,4],[35,5],[43,3],[43,2],[62,3],[62,2],[62,2],[62,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[41,3],[41,4],[41,3],[41,4],[41,4],[41,5],[41,3],[41,4],[41,4],[41,5],[41,4],[41,5],[41,5],[41,6],[42,3],[83,1],[83,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[86,1],[86,1],[86,1],[86,1],[31,1],[31,1],[31,1],[31,1],[33,1],[64,1]],performAction:function(e,t,n,s,i,u,r){var a=u.length-1;switch(i){case 4:s.setDirection("TB");break;case 5:s.setDirection("BT");break;case 6:s.setDirection("RL");break;case 7:s.setDirection("LR");break;case 11:s.parseDirective("%%{","open_directive");break;case 12:s.parseDirective(u[a],"type_directive");break;case 13:u[a]=u[a].trim().replace(/'/g,'"'),s.parseDirective(u[a],"arg_directive");break;case 14:s.parseDirective("}%%","close_directive","class");break;case 19:this.$=u[a-1];break;case 20:case 22:case 23:this.$=u[a];break;case 21:case 24:this.$=u[a-1]+u[a];break;case 25:case 26:this.$=u[a-1]+"~"+u[a]+"~";break;case 27:s.addRelation(u[a]);break;case 28:u[a-1].title=s.cleanupLabel(u[a]),s.addRelation(u[a-1]);break;case 37:this.$=u[a].trim(),s.setAccTitle(this.$);break;case 38:case 39:this.$=u[a].trim(),s.setAccDescription(this.$);break;case 40:s.addClassesToNamespace(u[a-3],u[a-1]);break;case 41:s.addClassesToNamespace(u[a-4],u[a-1]);break;case 42:this.$=u[a],s.addNamespace(u[a]);break;case 43:case 53:this.$=[u[a]];break;case 44:this.$=[u[a-1]];break;case 45:u[a].unshift(u[a-2]),this.$=u[a];break;case 47:s.setCssClass(u[a-2],u[a]);break;case 48:s.addMembers(u[a-3],u[a-1]);break;case 49:s.setCssClass(u[a-5],u[a-3]),s.addMembers(u[a-5],u[a-1]);break;case 50:this.$=u[a],s.addClass(u[a]);break;case 51:this.$=u[a-1],s.addClass(u[a-1]),s.setClassLabel(u[a-1],u[a]);break;case 52:s.addAnnotation(u[a],u[a-2]);break;case 54:u[a].push(u[a-1]),this.$=u[a];break;case 55:case 57:case 58:break;case 56:s.addMember(u[a-1],s.cleanupLabel(u[a]));break;case 59:this.$={id1:u[a-2],id2:u[a],relation:u[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 60:this.$={id1:u[a-3],id2:u[a],relation:u[a-1],relationTitle1:u[a-2],relationTitle2:"none"};break;case 61:this.$={id1:u[a-3],id2:u[a],relation:u[a-2],relationTitle1:"none",relationTitle2:u[a-1]};break;case 62:this.$={id1:u[a-4],id2:u[a],relation:u[a-2],relationTitle1:u[a-3],relationTitle2:u[a-1]};break;case 63:s.addNote(u[a],u[a-1]);break;case 64:s.addNote(u[a]);break;case 65:this.$={type1:u[a-2],type2:u[a],lineType:u[a-1]};break;case 66:this.$={type1:"none",type2:u[a],lineType:u[a-1]};break;case 67:this.$={type1:u[a-1],type2:"none",lineType:u[a]};break;case 68:this.$={type1:"none",type2:"none",lineType:u[a]};break;case 69:this.$=s.relationType.AGGREGATION;break;case 70:this.$=s.relationType.EXTENSION;break;case 71:this.$=s.relationType.COMPOSITION;break;case 72:this.$=s.relationType.DEPENDENCY;break;case 73:this.$=s.relationType.LOLLIPOP;break;case 74:this.$=s.lineType.LINE;break;case 75:this.$=s.lineType.DOTTED_LINE;break;case 76:case 82:this.$=u[a-2],s.setClickEvent(u[a-1],u[a]);break;case 77:case 83:this.$=u[a-3],s.setClickEvent(u[a-2],u[a-1]),s.setTooltip(u[a-2],u[a]);break;case 78:this.$=u[a-2],s.setLink(u[a-1],u[a]);break;case 79:this.$=u[a-3],s.setLink(u[a-2],u[a-1],u[a]);break;case 80:this.$=u[a-3],s.setLink(u[a-2],u[a-1]),s.setTooltip(u[a-2],u[a]);break;case 81:this.$=u[a-4],s.setLink(u[a-3],u[a-2],u[a]),s.setTooltip(u[a-3],u[a-1]);break;case 84:this.$=u[a-3],s.setClickEvent(u[a-2],u[a-1],u[a]);break;case 85:this.$=u[a-4],s.setClickEvent(u[a-3],u[a-2],u[a-1]),s.setTooltip(u[a-3],u[a]);break;case 86:this.$=u[a-3],s.setLink(u[a-2],u[a]);break;case 87:this.$=u[a-4],s.setLink(u[a-3],u[a-1],u[a]);break;case 88:this.$=u[a-4],s.setLink(u[a-3],u[a-1]),s.setTooltip(u[a-3],u[a]);break;case 89:this.$=u[a-5],s.setLink(u[a-4],u[a-2],u[a]),s.setTooltip(u[a-4],u[a-1]);break;case 90:s.setCssClass(u[a-1],u[a])}},table:[{3:1,4:2,5:3,6:4,7:18,8:t,9:n,10:s,11:i,12:5,13:6,19:u,23:r,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:a,46:c,48:o,49:23,53:l,54:24,57:h,58:A,60:p,61:d,63:y,65:E,75:C,76:m,78:k,82:g,94:F,96:b,97:f,98:D,99:_},{1:[3]},{1:[2,1]},{3:47,4:2,5:3,6:4,7:18,8:t,9:n,10:s,11:i,12:5,13:6,19:u,23:r,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:a,46:c,48:o,49:23,53:l,54:24,57:h,58:A,60:p,61:d,63:y,65:E,75:C,76:m,78:k,82:g,94:F,96:b,97:f,98:D,99:_},{1:[2,3]},{1:[2,8]},{14:48,20:[1,49]},e(B,[2,16],{16:[1,50]}),{16:[1,51]},{20:[2,11]},e(T,[2,27],{36:[1,52]}),e(T,[2,29]),e(T,[2,30]),e(T,[2,31]),e(T,[2,32]),e(T,[2,33]),e(T,[2,34]),e(T,[2,35]),e(T,[2,36]),{45:[1,53]},{47:[1,54]},e(T,[2,39]),e(T,[2,55],{62:55,66:58,67:59,28:[1,56],36:[1,57],68:S,69:v,70:N,71:L,72:$,73:I,74:O}),{50:[1,67]},e(x,[2,46],{50:[1,69],55:[1,68]}),e(T,[2,57]),e(T,[2,58]),{31:70,94:F,96:b,97:f,98:D},{31:38,32:71,33:39,94:F,96:b,97:f,98:D,99:_},{31:38,32:72,33:39,94:F,96:b,97:f,98:D,99:_},{31:38,32:73,33:39,94:F,96:b,97:f,98:D,99:_},{28:[1,74]},{31:38,32:75,33:39,94:F,96:b,97:f,98:D,99:_},{28:R,64:76},e(T,[2,4]),e(T,[2,5]),e(T,[2,6]),e(T,[2,7]),e(w,[2,22],{31:38,33:39,32:78,34:[1,79],94:F,96:b,97:f,98:D,99:_}),e(w,[2,23],{34:[1,80]}),{30:81,31:82,94:F,96:b,97:f,98:D},{31:38,32:83,33:39,94:F,96:b,97:f,98:D,99:_},e(P,[2,104]),e(P,[2,105]),e(P,[2,106]),e(P,[2,107]),e([1,16,24,27,28,34,36,50,52,55,68,69,70,71,72,73,74,79,81],[2,108]),{1:[2,2]},{15:84,17:[1,85],22:G},e([17,22],[2,12]),e(B,[2,17],{25:7,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,7:18,32:22,49:23,54:24,31:38,33:39,6:87,8:t,9:n,10:s,11:i,44:a,46:c,48:o,53:l,57:h,58:A,60:p,61:d,63:y,65:E,75:C,76:m,78:k,82:g,94:F,96:b,97:f,98:D,99:_}),{6:88,7:18,8:t,9:n,10:s,11:i,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:a,46:c,48:o,49:23,53:l,54:24,57:h,58:A,60:p,61:d,63:y,65:E,75:C,76:m,78:k,82:g,94:F,96:b,97:f,98:D,99:_},e(T,[2,28]),e(T,[2,37]),e(T,[2,38]),{28:[1,90],31:38,32:89,33:39,94:F,96:b,97:f,98:D,99:_},{62:91,66:58,67:59,68:S,69:v,70:N,71:L,72:$,73:I,74:O},e(T,[2,56]),{67:92,73:I,74:O},e(M,[2,68],{66:93,68:S,69:v,70:N,71:L,72:$}),e(U,[2,69]),e(U,[2,70]),e(U,[2,71]),e(U,[2,72]),e(U,[2,73]),e(Y,[2,74]),e(Y,[2,75]),{16:[1,95],38:96,51:94,54:24,57:h},{31:97,94:F,96:b,97:f,98:D},{56:98,60:K},{59:[1,100]},{28:[1,101]},{28:[1,102]},{79:[1,103],81:[1,104]},{31:105,94:F,96:b,97:f,98:D},{28:R,64:106},e(T,[2,64]),e(T,[2,109]),e(w,[2,24]),e(w,[2,25]),e(w,[2,26]),{50:[2,42]},{30:107,31:82,50:[2,20],94:F,96:b,97:f,98:D},e(z,[2,50],{26:108,27:[1,109]}),{16:[1,110]},{18:111,21:[1,112]},{16:[2,14]},e(B,[2,18]),{24:[1,113]},e(Q,[2,59]),{31:38,32:114,33:39,94:F,96:b,97:f,98:D,99:_},{28:[1,116],31:38,32:115,33:39,94:F,96:b,97:f,98:D,99:_},e(M,[2,67],{66:117,68:S,69:v,70:N,71:L,72:$}),e(M,[2,66]),{52:[1,118]},{38:96,51:119,54:24,57:h},{16:[1,120],52:[2,43]},e(x,[2,47],{50:[1,121]}),{52:[1,122]},{52:[2,53],56:123,60:K},{31:38,32:124,33:39,94:F,96:b,97:f,98:D,99:_},e(T,[2,76],{28:[1,125]}),e(T,[2,78],{28:[1,127],77:[1,126]}),e(T,[2,82],{28:[1,128],80:[1,129]}),{28:[1,130]},e(T,[2,90]),e(T,[2,63]),{50:[2,21]},e(z,[2,51]),{28:[1,131]},e(j,[2,9]),{15:132,22:G},{22:[2,13]},{1:[2,15]},e(Q,[2,61]),e(Q,[2,60]),{31:38,32:133,33:39,94:F,96:b,97:f,98:D,99:_},e(M,[2,65]),e(T,[2,40]),{52:[1,134]},{38:96,51:135,52:[2,44],54:24,57:h},{56:136,60:K},e(x,[2,48]),{52:[2,54]},e(T,[2,52]),e(T,[2,77]),e(T,[2,79]),e(T,[2,80],{77:[1,137]}),e(T,[2,83]),e(T,[2,84],{28:[1,138]}),e(T,[2,86],{28:[1,140],77:[1,139]}),{29:[1,141]},{16:[1,142]},e(Q,[2,62]),e(T,[2,41]),{52:[2,45]},{52:[1,143]},e(T,[2,81]),e(T,[2,85]),e(T,[2,87]),e(T,[2,88],{77:[1,144]}),e(z,[2,19]),e(j,[2,10]),e(x,[2,49]),e(T,[2,89])],defaultActions:{2:[2,1],4:[2,3],5:[2,8],9:[2,11],47:[2,2],81:[2,42],86:[2,14],107:[2,21],112:[2,13],113:[2,15],123:[2,54],135:[2,45]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],s=[],i=[null],u=[],r=this.table,a="",c=0,o=0,l=u.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(e,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;u.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,C,m,k,g,F,b,f,D,_={};;){if(C=n[n.length-1],this.defaultActions[C]?m=this.defaultActions[C]:(null==E&&(D=void 0,"number"!=typeof(D=s.pop()||h.lex()||1)&&(D instanceof Array&&(D=(s=D).pop()),D=t.symbols_[D]||D),E=D),m=r[C]&&r[C][E]),void 0===m||!m.length||!m[0]){var B="";for(g in f=[],r[C])this.terminals_[g]&&g>2&&f.push("'"+this.terminals_[g]+"'");B=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+f.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(B,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:f})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+E);switch(m[0]){case 1:n.push(E),i.push(h.yytext),u.push(h.yylloc),n.push(m[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(F=this.productions_[m[1]][1],_.$=i[i.length-F],_._$={first_line:u[u.length-(F||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(F||1)].first_column,last_column:u[u.length-1].last_column},y&&(_._$.range=[u[u.length-(F||1)].range[0],u[u.length-1].range[1]]),void 0!==(k=this.performAction.apply(_,[a,o,c,A.yy,m[1],i,u].concat(l))))return k;F&&(n=n.slice(0,-1*F*2),i=i.slice(0,-1*F),u=u.slice(0,-1*F)),n.push(this.productions_[m[1]][0]),i.push(_.$),u.push(_._$),b=r[n[n.length-2]][n[n.length-1]],n.push(b);break;case 3:return!0}}return!0}},W={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,s,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(s=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var u in i)this[u]=i[u];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),u=0;u<i.length;u++)if((n=this._input.match(this.rules[i[u]]))&&(!t||n[0].length>t[0].length)){if(t=n,s=u,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[u])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[s]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,s){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 34:case 39:case 43:case 50:break;case 11:return this.begin("acc_title"),44;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),46;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 24:case 27:case 29:case 61:case 64:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 38:return 16;case 20:case 21:return 23;case 22:case 40:case 48:return"EDGE_STATE";case 23:this.begin("callback_name");break;case 25:this.popState(),this.begin("callback_args");break;case 26:return 79;case 28:return 80;case 30:return"STR";case 31:this.begin("string");break;case 32:return this.begin("namespace"),53;case 33:case 42:return this.popState(),16;case 35:return this.begin("namespace-body"),50;case 36:case 46:return this.popState(),52;case 37:case 47:return"EOF_IN_STRUCT";case 41:return this.begin("class"),57;case 44:return this.popState(),this.popState(),52;case 45:return this.begin("class-body"),50;case 49:return"OPEN_IN_STRUCT";case 51:return"MEMBER";case 52:return 82;case 53:return 75;case 54:return 76;case 55:return 78;case 56:return 63;case 57:return 65;case 58:return 58;case 59:return 59;case 60:return 81;case 62:return"GENERICTYPE";case 63:this.begin("generic");break;case 65:return"BQUOTE_STR";case 66:this.begin("bqstring");break;case 67:case 68:case 69:case 70:return 77;case 71:case 72:return 69;case 73:case 74:return 71;case 75:return 70;case 76:return 68;case 77:return 72;case 78:return 73;case 79:return 74;case 80:return 36;case 81:return 55;case 82:return 94;case 83:return"DOT";case 84:return"PLUS";case 85:return 91;case 86:case 87:return"EQUALS";case 88:return 98;case 89:return 27;case 90:return 29;case 91:return"PUNCTUATION";case 92:return 97;case 93:return 96;case 94:return 93;case 95:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[31,36,37,38,39,40,41,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},namespace:{rules:[31,32,33,34,35,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},"class-body":{rules:[31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},class:{rules:[31,42,43,44,45,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_descr_multiline:{rules:[16,17,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_descr:{rules:[14,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_title:{rules:[12,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},arg_directive:{rules:[7,8,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},type_directive:{rules:[6,7,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},open_directive:{rules:[5,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},callback_args:{rules:[27,28,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},callback_name:{rules:[24,25,26,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},href:{rules:[31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},struct:{rules:[31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},generic:{rules:[31,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},bqstring:{rules:[31,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},string:{rules:[29,30,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,31,32,41,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!0}}};function H(){this.yy={}}return X.lexer=W,H.prototype=X,X.Parser=H,new H}();u.parser=u;const r=u,a="classId-";let c=[],o={},l=[],h=0,A={},p=0,d=[];const y=e=>i.e.sanitizeText(e,(0,i.c)()),E=function(e){let t="",n=e;if(e.indexOf("~")>0){const s=e.split("~");n=y(s[0]),t=y(s[1])}return{className:n,type:t}},C=function(e){const t=E(e);void 0===o[t.className]&&(o[t.className]={id:t.className,type:t.type,label:t.className,cssClasses:[],methods:[],members:[],annotations:[],domId:a+t.className+"-"+h},h++)},m=function(e){if(e in o)return o[e].domId;throw new Error("Class not found: "+e)},k=function(e,t){const n=E(e).className,s=o[n];if("string"==typeof t){const e=t.trim();e.startsWith("<<")&&e.endsWith(">>")?s.annotations.push(y(e.substring(2,e.length-2))):e.indexOf(")")>0?s.methods.push(y(e)):e&&s.members.push(y(e))}},g=function(e,t){e.split(",").forEach((function(e){let n=e;e[0].match(/\d/)&&(n=a+n),void 0!==o[n]&&o[n].cssClasses.push(t)}))},F=function(e,t,n){if("loose"!==(0,i.c)().securityLevel)return;if(void 0===t)return;const s=e;if(void 0!==o[s]){const e=m(s);let u=[];if("string"==typeof n){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let e=0;e<u.length;e++){let t=u[e].trim();'"'===t.charAt(0)&&'"'===t.charAt(t.length-1)&&(t=t.substr(1,t.length-2)),u[e]=t}}0===u.length&&u.push(e),d.push((function(){const n=document.querySelector(`[id="${e}"]`);null!==n&&n.addEventListener("click",(function(){i.u.runFunc(t,...u)}),!1)}))}},b=function(e){let t=(0,s.Ys)(".mermaidTooltip");null===(t._groups||t)[0][0]&&(t=(0,s.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,s.Ys)(e).select("svg").selectAll("g.node").on("mouseover",(function(){const e=(0,s.Ys)(this);if(null===e.attr("title"))return;const n=this.getBoundingClientRect();t.transition().duration(200).style("opacity",".9"),t.text(e.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),t.html(t.html().replace(/<br\/>/g,"<br/>")),e.classed("hover",!0)})).on("mouseout",(function(){t.transition().duration(500).style("opacity",0);(0,s.Ys)(this).classed("hover",!1)}))};d.push(b);let f="TB";const D={parseDirective:function(e,t,n){i.m.parseDirective(this,e,t,n)},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,getConfig:()=>(0,i.c)().class,addClass:C,bindFunctions:function(e){d.forEach((function(t){t(e)}))},clear:function(){c=[],o={},l=[],d=[],d.push(b),A={},p=0,(0,i.v)()},getClass:function(e){return o[e]},getClasses:function(){return o},getNotes:function(){return l},addAnnotation:function(e,t){const n=E(e).className;o[n].annotations.push(t)},addNote:function(e,t){const n={id:`note${l.length}`,class:t,text:e};l.push(n)},getRelations:function(){return c},addRelation:function(e){i.l.debug("Adding relation: "+JSON.stringify(e)),C(e.id1),C(e.id2),e.id1=E(e.id1).className,e.id2=E(e.id2).className,e.relationTitle1=i.e.sanitizeText(e.relationTitle1.trim(),(0,i.c)()),e.relationTitle2=i.e.sanitizeText(e.relationTitle2.trim(),(0,i.c)()),c.push(e)},getDirection:()=>f,setDirection:e=>{f=e},addMember:k,addMembers:function(e,t){Array.isArray(t)&&(t.reverse(),t.forEach((t=>k(e,t))))},cleanupLabel:function(e){return e.startsWith(":")&&(e=e.substring(1)),y(e.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(e,t,n){e.split(",").forEach((function(e){F(e,t,n),o[e].haveCallback=!0})),g(e,"clickable")},setCssClass:g,setLink:function(e,t,n){const s=(0,i.c)();e.split(",").forEach((function(e){let u=e;e[0].match(/\d/)&&(u=a+u),void 0!==o[u]&&(o[u].link=i.u.formatUrl(t,s),"sandbox"===s.securityLevel?o[u].linkTarget="_top":o[u].linkTarget="string"==typeof n?y(n):"_blank")})),g(e,"clickable")},getTooltip:function(e,t){return t?A[t].classes[e].tooltip:o[e].tooltip},setTooltip:function(e,t){e.split(",").forEach((function(e){void 0!==t&&(o[e].tooltip=y(t))}))},lookUpDomId:m,setDiagramTitle:i.r,getDiagramTitle:i.t,setClassLabel:function(e,t){t&&(t=y(t));const{className:n}=E(e);o[n].label=t},addNamespace:function(e){void 0===A[e]&&(A[e]={id:e,classes:{},children:{},domId:a+e+"-"+p},p++)},addClassesToNamespace:function(e,t){void 0!==A[e]&&t.map((t=>{o[t].parent=e,A[e].classes[t]=o[t]}))},getNamespace:function(e){return A[e]},getNamespaces:function(){return A}},_=e=>`g.classGroup text {\n fill: ${e.nodeBorder};\n fill: ${e.classText};\n stroke: none;\n font-family: ${e.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${e.classText};\n}\n.edgeLabel .label rect {\n fill: ${e.mainBkg};\n}\n.label text {\n fill: ${e.classText};\n}\n.edgeLabel .label span {\n background: ${e.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${e.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${e.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${e.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${e.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${e.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${e.lineColor} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${e.lineColor} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${e.lineColor} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${e.lineColor} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${e.mainBkg} !important;\n stroke: ${e.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/16618.d79c5adb.js b/assets/js/16618.d79c5adb.js new file mode 100644 index 0000000000..5ef3de0071 --- /dev/null +++ b/assets/js/16618.d79c5adb.js @@ -0,0 +1,2 @@ +/*! For license information please see 16618.d79c5adb.js.LICENSE.txt */ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16618],{14088:(e,t,n)=>{n.d(t,{I5:()=>Ne,Mi:()=>Ke,P1:()=>be,iR:()=>nt,jp:()=>oe,sj:()=>te});var i=n(27378);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function o(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(){return(u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function p(e,t){return(p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function m(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},s=Object.keys(e);for(i=0;i<s.length;i++)n=s[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function b(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function S(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,i=h(e);if(t){var r=h(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return b(e)}(this,n)}}function f(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function g(e,t){return e(t={exports:{}},t.exports),t.exports}function y(){}function k(){}function O(e){return e.map((function(e){return!1===e?null:e})).join(" ").replace(/\s+/g," ").trim()}function w(e,t){return 100/e*t/t}function T(e,t){return 100*e/t}function C(e){return"".concat(e,"%")}function E(e,t,n){if(e===t)return!0;var i=U[B(e)],r=U[B(t)];return!(!i||i!==r)&&i(e,t,n)}function M(e){return function(t,n,i){if(!i)return e(t,n,[]);for(var r,s=i.length;r=i[--s];)if(r[0]===t&&r[1]===n)return!0;return e(t,n,i)}}function _(e){var t=[];for(var n in e)"constructor"!==n&&t.push(n);return t}function P(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===V}(e)}function N(e,t){return!1!==t.clone&&t.isMergeableObject(e)?x(function(e){return Array.isArray(e)?[]:{}}(e),e,t):e}function D(e,t,n){return e.concat(t).map((function(e){return N(e,n)}))}function x(e,t,n){(n=n||{}).arrayMerge=n.arrayMerge||D,n.isMergeableObject=n.isMergeableObject||Z;var i=Array.isArray(t);return i===Array.isArray(e)?i?n.arrayMerge(e,t,n):function(e,t,n){var i={};return n.isMergeableObject(e)&&Object.keys(e).forEach((function(t){i[t]=N(e[t],n)})),Object.keys(t).forEach((function(r){n.isMergeableObject(t[r])&&e[r]?i[r]=x(e[r],t[r],n):i[r]=N(t[r],n)})),i}(e,t,n):N(t,n)}function j(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return{}},n=function(n){function r(e,n){var i;return a(this,r),(i=l.call(this,e,n)).state=t(s({},n.state)),i.updateStateProps=i.updateStateProps.bind(b(i)),i}d(r,n);var l=S(r);return o(r,[{key:"componentDidMount",value:function(){this.context.subscribe(this.updateStateProps)}},{key:"shouldComponentUpdate",value:function(e,t){return!Y(t,this.state)||!Y(e,this.props)}},{key:"componentWillUnmount",value:function(){this.context.unsubscribe(this.updateStateProps)}},{key:"updateStateProps",value:function(){this.setState(t(s({},this.context.state)))}},{key:"render",value:function(){var t=this,n=K(this.state,this.props);return i.createElement(e,u({ref:function(e){t.instance=e}},n,{carouselStore:{getStoreState:this.context.getStoreState,masterSpinnerError:this.context.masterSpinnerError,masterSpinnerSuccess:this.context.masterSpinnerSuccess,setStoreState:this.context.setStoreState,subscribeMasterSpinner:this.context.subscribeMasterSpinner,unsubscribeAllMasterSpinner:this.context.unsubscribeAllMasterSpinner,unsubscribeMasterSpinner:this.context.unsubscribeMasterSpinner}}),this.props.children)}}]),r}(i.Component);return c(n,"contextType",G),c(n,"propTypes",{children:q.children}),c(n,"defaultProps",{children:null}),n}k.resetWarningCache=y;var R=g((function(e){e.exports=function(){function e(e,t,n,i,r,s){if("SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"!==s){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:k,resetWarningCache:y};return n.PropTypes=n,n}()})),A="loading",I="success",L="error",q={children:R.oneOfType([R.arrayOf(R.node),R.node]),direction:R.oneOf(["forward","backward"]),height:function(e,t){var n=e[t];return"vertical"!==e.orientation||null!==n&&"number"==typeof n?null:new Error("Missing required property '".concat(t,"' when orientation is vertical. You must supply a number representing the height in pixels"))},orientation:R.oneOf(["horizontal","vertical"]),isBgImage:function(e,t){return!0===e[t]&&"img"===e.tag?new Error("HTML img elements should not have a backgroundImage. Please use ".concat(t," for other block-level HTML tags, like div, a, section, etc...")):null}},z=function(e){var t=e.min,n=e.max,i=e.x;return Math.min(n,Math.max(t,i))},F="buttonBack___1mlaL",H=["carouselStore","className","currentSlide","disabled","onClick","step","totalSlides","visibleSlides","infinite"],W=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).handleOnClick=i.handleOnClick.bind(b(i)),i}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props,n=t.carouselStore,i=t.currentSlide,r=t.onClick,s=t.step,a=t.infinite,l=t.visibleSlides,o=t.totalSlides-l,c=Math.max(i-s,0);a&&(c=0===i?o:c),n.setStoreState({currentSlide:c,isPlaying:!1},null!==r&&r.call(this,e))}},{key:"render",value:function(){var e=this.props,n=(e.carouselStore,e.className),r=(e.currentSlide,e.disabled,e.onClick,e.step,e.totalSlides,e.visibleSlides,e.infinite),s=m(e,H),a=O([F,"carousel__back-button",n]),l=t.setDisabled(this.props.disabled,this.props.currentSlide,r);return i.createElement("button",u({type:"button","aria-label":"previous",className:a,onClick:this.handleOnClick,disabled:l},s),this.props.children)}}],[{key:"setDisabled",value:function(e,t,n){return null!==e?e:0===t&&!n}}]),t}(i.Component);c(W,"propTypes",{carouselStore:R.object.isRequired,children:q.children.isRequired,className:R.string,currentSlide:R.number.isRequired,disabled:R.bool,onClick:R.func,step:R.number.isRequired,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired,infinite:R.bool}),c(W,"defaultProps",{className:null,disabled:null,onClick:null,infinite:!1});var B=g((function(e,t){var n={}.toString,i="undefined"!=typeof window?window.Node:Function;e.exports=t=function(e){var t=typeof e;if("object"!=t)return t;if("object"==(t=r[n.call(e)]))return e instanceof Map?"map":e instanceof Set?"set":"object";if(t)return t;if(e instanceof i)switch(e.nodeType){case 1:return"element";case 3:return"text-node";case 9:return"document";case 11:return"document-fragment";default:return"dom-node"}};var r=t.types={"[object Function]":"function","[object Date]":"date","[object RegExp]":"regexp","[object Arguments]":"arguments","[object Array]":"array","[object Set]":"set","[object String]":"string","[object Null]":"null","[object Undefined]":"undefined","[object Number]":"number","[object Boolean]":"boolean","[object Object]":"object","[object Map]":"map","[object Text]":"text-node","[object Uint8Array]":"bit-array","[object Uint16Array]":"bit-array","[object Uint32Array]":"bit-array","[object Uint8ClampedArray]":"bit-array","[object Error]":"error","[object FormData]":"form-data","[object File]":"file","[object Blob]":"blob"}})),U=(B.types,{number:function(e,t){return e!=e&&t!=t},function:function(e,t,n){return e.toString()===t.toString()&&U.object(e,t,n)&&E(e.prototype,t.prototype)},date:function(e,t){return+e==+t},regexp:function(e,t){return e.toString()===t.toString()},element:function(e,t){return e.outerHTML===t.outerHTML},textnode:function(e,t){return e.textContent===t.textContent}});U.arguments=U["bit-array"]=U.array=M((function(e,t,n){var i=e.length;if(i!==t.length)return!1;for(n.push([e,t]);i--;)if(!E(e[i],t[i],n))return!1;return!0})),U.object=M((function(e,t,n){if("function"==typeof e.equal)return n.push([e,t]),e.equal(t,n);var i=_(e),r=_(t),s=i.length;if(s!==r.length)return!1;for(i.sort(),r.sort();s--;)if(i[s]!==r[s])return!1;for(n.push([e,t]),s=i.length;s--;){var a=i[s];if(!E(e[a],t[a],n))return!1}return!0}));var Y=E,Z=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!P(e)},V="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;x.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return x(e,n,t)}),{})};var X,K=x,G=i.createContext(),Q=function e(t){return Object.freeze(t),Object.getOwnPropertyNames(t).forEach((function(n){!t.hasOwnProperty(n)||null===t[n]||"object"!=typeof t[n]&&"function"!=typeof t[n]||Object.isFrozen(t[n])||e(t[n])})),t},$={masterSpinnerFinished:!1},J=function(){function e(t){a(this,e),this.state=Q(K($,t)),this.subscriptions=[],this.masterSpinnerSubscriptions={},this.setStoreState=this.setStoreState.bind(this),this.getStoreState=this.getStoreState.bind(this),this.subscribe=this.subscribe.bind(this),this.unsubscribe=this.unsubscribe.bind(this),this.updateSubscribers=this.updateSubscribers.bind(this),this.subscribeMasterSpinner=this.subscribeMasterSpinner.bind(this),this.unsubscribeMasterSpinner=this.unsubscribeMasterSpinner.bind(this),this.unsubscribeAllMasterSpinner=this.unsubscribeAllMasterSpinner.bind(this),this.masterSpinnerSuccess=this.masterSpinnerSuccess.bind(this),this.masterSpinnerError=this.masterSpinnerError.bind(this)}return o(e,[{key:"setStoreState",value:function(e,t){this.state=Q(K(this.state,e)),this.updateSubscribers(t)}},{key:"getStoreState",value:function(){return K({},this.state)}},{key:"subscribe",value:function(e){this.subscriptions.push(e)}},{key:"unsubscribe",value:function(e){var t=this.subscriptions.indexOf(e);-1!==t&&this.subscriptions.splice(t,1)}},{key:"updateSubscribers",value:function(e){this.subscriptions.forEach((function(e){return e()})),"function"==typeof e&&e(this.getStoreState())}},{key:"subscribeMasterSpinner",value:function(e){-1===Object.keys(this.masterSpinnerSubscriptions).indexOf(e)&&(this.masterSpinnerSubscriptions[e]={success:!1,error:!1,complete:!1})}},{key:"unsubscribeMasterSpinner",value:function(e){return-1!==Object.keys(this.masterSpinnerSubscriptions).indexOf(e)&&(this.setMasterSpinnerFinished(),delete this.masterSpinnerSubscriptions[e])}},{key:"unsubscribeAllMasterSpinner",value:function(){this.masterSpinnerSubscriptions={},this.setMasterSpinnerFinished()}},{key:"masterSpinnerSuccess",value:function(e){this.masterSpinnerSubscriptions[e].success=!0,this.masterSpinnerSubscriptions[e].complete=!0,this.setMasterSpinnerFinished()}},{key:"masterSpinnerError",value:function(e){this.masterSpinnerSubscriptions[e].error=!0,this.masterSpinnerSubscriptions[e].complete=!0,this.setMasterSpinnerFinished()}},{key:"setMasterSpinnerFinished",value:function(){this.setStoreState({masterSpinnerFinished:this.isMasterSpinnerFinished()})}},{key:"isMasterSpinnerFinished",value:function(){var e=this;return 0===Object.keys(this.masterSpinnerSubscriptions).filter((function(t){return!0!==e.masterSpinnerSubscriptions[t].complete})).length}}]),e}(),ee=["children","className","currentSlide","disableAnimation","disableKeyboard","hasMasterSpinner","interval","isPageScrollLocked","isPlaying","lockOnWindowScroll","naturalSlideHeight","naturalSlideWidth","orientation","playDirection","step","dragStep","tag","totalSlides","touchEnabled","dragEnabled","visibleSlides","infinite","isIntrinsicHeight"],te=(c(X=function(e){function t(e){var i;if(a(this,t),i=n.call(this,e),e.isIntrinsicHeight&&"horizontal"!==e.orientation)throw Error('isIntrinsicHeight can only be used in "horizontal" orientation. See Readme for more information.');var r={currentSlide:e.currentSlide,disableAnimation:e.disableAnimation,disableKeyboard:e.disableKeyboard,hasMasterSpinner:e.hasMasterSpinner,imageErrorCount:0,imageSuccessCount:0,interval:e.interval,isPageScrollLocked:e.isPageScrollLocked,isPlaying:e.isPlaying,lockOnWindowScroll:e.lockOnWindowScroll,masterSpinnerThreshold:0,naturalSlideHeight:e.naturalSlideHeight,naturalSlideWidth:e.naturalSlideWidth,orientation:e.orientation,playDirection:e.playDirection,privateUnDisableAnimation:!1,slideSize:w(e.totalSlides,e.visibleSlides),slideTraySize:T(e.totalSlides,e.visibleSlides),step:e.step,dragStep:e.dragStep,totalSlides:e.totalSlides,touchEnabled:e.touchEnabled,dragEnabled:e.dragEnabled,visibleSlides:e.visibleSlides,infinite:e.infinite,isIntrinsicHeight:e.isIntrinsicHeight};return i.carouselStore=new J(r),i}d(t,e);var n=S(t);return o(t,[{key:"componentDidUpdate",value:function(e){var t=this,n={};["currentSlide","disableAnimation","disableKeyboard","hasMasterSpinner","interval","isPlaying","naturalSlideHeight","naturalSlideWidth","lockOnWindowScroll","orientation","playDirection","step","dragStep","totalSlides","touchEnabled","dragEnabled","visibleSlides"].forEach((function(i){e[i]!==t.props[i]&&(n[i]=t.props[i])})),this.props.currentSlide!==e.currentSlide&&!this.props.disableAnimation&&(n.disableAnimation=!0,n.privateUnDisableAnimation=!0),this.props.totalSlides===e.totalSlides&&this.props.visibleSlides===e.visibleSlides||(n.slideSize=w(this.props.totalSlides,this.props.visibleSlides),n.slideTraySize=T(this.props.totalSlides,this.props.visibleSlides)),this.carouselStore.state.currentSlide>=this.props.totalSlides&&(n.currentSlide=Math.max(this.props.totalSlides-1,0)),Object.keys(n).length>0&&this.carouselStore.setStoreState(n)}},{key:"componentWillUnmount",value:function(){this.carouselStore.unsubscribeAllMasterSpinner()}},{key:"getStore",value:function(){return this.carouselStore}},{key:"render",value:function(){var e=this.props,t=(e.children,e.className,e.currentSlide,e.disableAnimation,e.disableKeyboard,e.hasMasterSpinner,e.interval,e.isPageScrollLocked,e.isPlaying,e.lockOnWindowScroll,e.naturalSlideHeight,e.naturalSlideWidth,e.orientation,e.playDirection,e.step,e.dragStep,e.tag),n=(e.totalSlides,e.touchEnabled,e.dragEnabled,e.visibleSlides,e.infinite,e.isIntrinsicHeight,m(e,ee)),r=O(["carousel",this.props.className]);return i.createElement(t,u({className:r},n),i.createElement(G.Provider,{value:this.carouselStore},this.props.children))}}]),t}(i.Component),"propTypes",{children:q.children.isRequired,className:R.string,currentSlide:R.number,disableAnimation:R.bool,disableKeyboard:R.bool,hasMasterSpinner:R.bool,interval:R.number,isPageScrollLocked:R.bool,isPlaying:R.bool,lockOnWindowScroll:R.bool,naturalSlideHeight:R.number.isRequired,naturalSlideWidth:R.number.isRequired,orientation:q.orientation,playDirection:q.direction,step:R.number,dragStep:R.number,tag:R.string,totalSlides:R.number.isRequired,touchEnabled:R.bool,dragEnabled:R.bool,visibleSlides:R.number,infinite:R.bool,isIntrinsicHeight:R.bool}),c(X,"defaultProps",{className:null,currentSlide:0,disableAnimation:!1,disableKeyboard:!1,hasMasterSpinner:!1,interval:5e3,isPageScrollLocked:!1,isPlaying:!1,lockOnWindowScroll:!1,orientation:"horizontal",playDirection:"forward",step:1,dragStep:1,tag:"div",touchEnabled:!0,dragEnabled:!0,visibleSlides:1,infinite:!1,isIntrinsicHeight:!1}),X);G.Consumer;var ne,ie,re,se,ae,le,oe=j(W,(function(e){return{currentSlide:e.currentSlide,step:e.step,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides,infinite:e.infinite}})),ce="buttonFirst___2rhFr",ue=["carouselStore","className","currentSlide","disabled","onClick","totalSlides"],de=(ne=function(e){function t(){var e;return a(this,t),(e=n.call(this)).handleOnClick=e.handleOnClick.bind(b(e)),e}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props,n=t.carouselStore,i=t.onClick;n.setStoreState({currentSlide:0,isPlaying:!1},null!==i&&i.call(this,e))}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.className),n=e.currentSlide,r=e.disabled,s=(e.onClick,e.totalSlides,m(e,ue)),a=O([ce,"carousel__first-button",t]),l=null!==r?r:0===n;return i.createElement("button",u({type:"button","aria-label":"first",className:a,onClick:this.handleOnClick,disabled:l},s),this.props.children)}}]),t}(i.Component),c(ne,"propTypes",{carouselStore:R.object.isRequired,children:q.children.isRequired,className:R.string,currentSlide:R.number.isRequired,disabled:R.bool,onClick:R.func,totalSlides:R.number.isRequired}),c(ne,"defaultProps",{className:null,disabled:null,onClick:null}),ne),he=(j(de,(function(e){return{currentSlide:e.currentSlide,totalSlides:e.totalSlides}})),"buttonNext___2mOCa"),pe=["carouselStore","className","currentSlide","disabled","onClick","step","totalSlides","visibleSlides","infinite"],me=(ie=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).handleOnClick=i.handleOnClick.bind(b(i)),i}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props,n=t.currentSlide,i=t.onClick,r=t.step,s=t.carouselStore,a=t.infinite,l=t.totalSlides-t.visibleSlides,o=r+n,c=Math.min(o,l);a&&(c=l===n?0:c),s.setStoreState({currentSlide:c,isPlaying:!1},null!==i&&i.call(this,e))}},{key:"render",value:function(){var e=this.props,n=(e.carouselStore,e.className),r=e.currentSlide,s=e.disabled,a=(e.onClick,e.step,e.totalSlides),l=e.visibleSlides,o=e.infinite,c=m(e,pe),d=O([he,"carousel__next-button",n]),h=t.setDisabled(s,r,l,a,o);return i.createElement("button",u({type:"button","aria-label":"next",className:d,onClick:this.handleOnClick,disabled:h},c),this.props.children)}}],[{key:"setDisabled",value:function(e,t,n,i,r){return null!==e?e:t>=i-n&&!r}}]),t}(i.PureComponent),c(ie,"propTypes",{carouselStore:R.object.isRequired,children:q.children.isRequired,className:R.string,currentSlide:R.number.isRequired,disabled:R.bool,onClick:R.func,step:R.number.isRequired,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired,infinite:R.bool}),c(ie,"defaultProps",{className:null,disabled:null,onClick:null,infinite:!1}),ie),be=j(me,(function(e){return{currentSlide:e.currentSlide,step:e.step,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides,infinite:e.infinite}})),Se="buttonLast___2yuh0",fe=["carouselStore","className","currentSlide","disabled","onClick","totalSlides","visibleSlides"],ve=(re=function(e){function t(){var e;return a(this,t),(e=n.call(this)).handleOnClick=e.handleOnClick.bind(b(e)),e}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props,n=t.carouselStore,i=t.onClick,r=t.totalSlides,s=t.visibleSlides;n.setStoreState({currentSlide:r-s,isPlaying:!1},null!==i&&i.call(this,e))}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.className),n=e.currentSlide,r=e.disabled,s=(e.onClick,e.totalSlides),a=e.visibleSlides,l=m(e,fe),o=O([Se,"carousel__last-button",t]),c=null!==r?r:n>=s-a;return i.createElement("button",u({type:"button","aria-label":"last",className:o,onClick:this.handleOnClick,disabled:c},l),this.props.children)}}]),t}(i.Component),c(re,"propTypes",{carouselStore:R.object.isRequired,children:q.children.isRequired,className:R.string,currentSlide:R.number.isRequired,disabled:R.bool,onClick:R.func,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired}),c(re,"defaultProps",{className:null,disabled:null,onClick:null}),re),ge=(j(ve,(function(e){return{currentSlide:e.currentSlide,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides}})),"buttonNext___3Lm3s"),ye=["carouselStore","children","childrenPaused","childrenPlaying","className","isPlaying","onClick"],ke=(se=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).handleOnClick=i.handleOnClick.bind(b(i)),i}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props.onClick;this.props.carouselStore.setStoreState({isPlaying:!this.props.isPlaying},null!==t&&t.call(this,e))}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.children,e.childrenPaused),n=e.childrenPlaying,r=e.className,s=e.isPlaying,a=(e.onClick,m(e,ye)),l=O([ge,"carousel__play-button",r]);return i.createElement("button",u({type:"button","aria-label":"play",className:l,onClick:this.handleOnClick},a),s&&n,!s&&t,this.props.children)}}]),t}(i.PureComponent),c(se,"propTypes",{carouselStore:R.object.isRequired,children:R.node,childrenPaused:R.node,childrenPlaying:R.node,className:R.string,isPlaying:R.bool.isRequired,onClick:R.func}),c(se,"defaultProps",{children:null,childrenPaused:null,childrenPlaying:null,className:null,onClick:null}),se),Oe=(j(ke,(function(e){return{isPlaying:e.isPlaying}})),{dot:"dot___3c3SI"}),we=["carouselStore","children","className","currentSlide","disabled","onClick","selected","slide","totalSlides","visibleSlides"],Te=(ae=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).handleOnClick=i.handleOnClick.bind(b(i)),i}d(t,e);var n=S(t);return o(t,[{key:"handleOnClick",value:function(e){var t=this.props,n=t.carouselStore,i=t.onClick,r=t.slide,s=t.totalSlides,a=t.visibleSlides,l=r>=s-a?s-a:r;n.setStoreState({currentSlide:l,isPlaying:!1},null!==i&&i.call(this,e))}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.children,e.className),n=e.currentSlide,r=e.disabled,s=(e.onClick,e.selected),a=e.slide,l=(e.totalSlides,e.visibleSlides),o=m(e,we),c=a>=n&&a<n+l,d="boolean"==typeof s?s:c,h="boolean"==typeof r?r:!0===c,p=O([Oe.dot,d&&Oe.dotSelected,"carousel__dot","carousel__dot--".concat(a),d&&"carousel__dot--selected",t]);return i.createElement("button",u({"aria-label":"slide dot",type:"button",onClick:this.handleOnClick,className:p,disabled:h},o),this.props.children)}}]),t}(i.Component),c(ae,"propTypes",{carouselStore:R.object.isRequired,children:q.children,className:R.string,currentSlide:R.number.isRequired,disabled:R.bool,onClick:R.func,selected:R.bool,slide:R.number.isRequired,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired}),c(ae,"defaultProps",{children:null,className:null,disabled:null,onClick:null,selected:null}),ae),Ce=j(Te,(function(e){return{currentSlide:e.currentSlide,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides}})),Ee={},Me=["renderDots"],_e=["carouselStore","children","className","currentSlide","dotNumbers","totalSlides","visibleSlides","disableActiveDots","showAsSelectedForCurrentSlideOnly","renderDots"],Pe=(le=function(e){function t(){return a(this,t),n.apply(this,arguments)}d(t,e);var n=S(t);return o(t,[{key:"renderDots",value:function(){var e=this.props,t=e.currentSlide,n=e.totalSlides,r=e.visibleSlides,s=e.disableActiveDots,a=e.showAsSelectedForCurrentSlideOnly,l=e.renderDots;if(l){var o=this.props;return o.renderDots,l(m(o,Me))}for(var c=[],u=0;u<n;u+=1){var d=a?u===t:u>=t&&u<t+r,h=u>=n-r?n-r:u;c.push(i.createElement(Ce,{key:u,slide:h,selected:d,disabled:!!s&&d},i.createElement("span",{className:O["carousel__dot-group-dot"]},this.props.dotNumbers&&u+1)))}return c}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.children),n=e.className,r=(e.currentSlide,e.dotNumbers,e.totalSlides,e.visibleSlides,e.disableActiveDots,e.showAsSelectedForCurrentSlideOnly,e.renderDots,m(e,_e)),s=O([Ee.DotGroup,"carousel__dot-group",n]);return i.createElement("div",u({className:s},r),this.renderDots(),t)}}]),t}(i.Component),c(le,"propTypes",{children:q.children,className:R.string,currentSlide:R.number.isRequired,carouselStore:R.object.isRequired,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired,dotNumbers:R.bool,disableActiveDots:R.bool,showAsSelectedForCurrentSlideOnly:R.bool,renderDots:R.func}),c(le,"defaultProps",{children:null,className:null,dotNumbers:!1,disableActiveDots:!0,showAsSelectedForCurrentSlideOnly:!1,renderDots:null}),le),Ne=j(Pe,(function(e){return{currentSlide:e.currentSlide,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides}})),De={image:"image___xtQGH"},xe=["src","alt"],je=["carouselStore","children","className","hasMasterSpinner","isBgImage","onError","onLoad","renderError","renderLoading","style","tag"],Re=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).state={imageStatus:A},i.handleImageLoad=i.handleImageLoad.bind(b(i)),i.handleImageError=i.handleImageError.bind(b(i)),i.image=null,i}d(t,e);var n=S(t);return o(t,[{key:"componentDidMount",value:function(){t.subscribeMasterSpinner(this.props),this.initImage()}},{key:"componentDidUpdate",value:function(e){e.src!==this.props.src&&(t.unsubscribeMasterSpinner(e),t.subscribeMasterSpinner(this.props),this.initImage())}},{key:"componentWillUnmount",value:function(){t.unsubscribeMasterSpinner(this.props),this.image.removeEventListener("load",this.handleImageLoad),this.image.removeEventListener("error",this.handleImageError),this.image=null}},{key:"initImage",value:function(){if(this.setState({imageStatus:A}),this.image=document.createElement("img"),this.image.addEventListener("load",this.handleImageLoad,!1),this.image.addEventListener("error",this.handleImageError,!1),this.image.src=this.props.src,this.image.readyState||this.image.complete){var e=this.image.src;this.image.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",this.image.src=e}}},{key:"handleImageLoad",value:function(e){this.setState({imageStatus:I}),this.props.hasMasterSpinner&&this.props.carouselStore.masterSpinnerSuccess(this.props.src),this.props.onLoad&&this.props.onLoad(e)}},{key:"handleImageError",value:function(e){this.setState({imageStatus:L}),this.props.hasMasterSpinner&&this.props.carouselStore.masterSpinnerError(this.props.src),this.props.onError&&this.props.onError(e)}},{key:"tempTag",value:function(){return"img"===this.props.tag?"div":this.props.tag}},{key:"customRender",value:function(e){return"function"==typeof this.props[e]?this.props[e]():this.props.children}},{key:"renderLoading",value:function(e){var t=this.tempTag(),n=O([De.image,De.imageLoading,"carousel__image",this.props.isBgImage&&"carousel__image--with-background","carousel__image--loading",this.props.className]);return i.createElement(t,u({className:n},e),this.customRender("renderLoading"))}},{key:"renderError",value:function(e){var t=this.tempTag(),n=O([De.image,De.imageError,"carousel__image",this.props.isBgImage&&"carousel__image--with-background","carousel__image--error",this.props.className]);return i.createElement(t,u({className:n},e),this.customRender("renderError"))}},{key:"renderSuccess",value:function(e){var t=this.props,n=t.style,r=t.tag,s=O([De.image,"carousel__image",this.props.isBgImage&&"carousel__image--with-background","carousel__image--success",this.props.className]),a=u({},n),l=e;if("img"!==r){var o=e.src;e.alt,l=m(e,xe),a=u({},n,{backgroundImage:'url("'.concat(o,'")'),backgroundSize:"cover"})}return i.createElement(r,u({className:s,style:a},l),this.props.children)}},{key:"render",value:function(){var e=this.props,t=(e.carouselStore,e.children,e.className,e.hasMasterSpinner,e.isBgImage,e.onError,e.onLoad,e.renderError,e.renderLoading,e.style,e.tag,m(e,je));switch(this.state.imageStatus){case A:return this.renderLoading(t);case I:return this.renderSuccess(t);case L:return this.renderError(t);default:throw new Error("unknown value for this.state.imageStatus")}}}],[{key:"subscribeMasterSpinner",value:function(e){e.hasMasterSpinner&&e.carouselStore.subscribeMasterSpinner(e.src)}},{key:"unsubscribeMasterSpinner",value:function(e){e.hasMasterSpinner&&e.carouselStore.unsubscribeMasterSpinner(e.src)}}]),t}(i.Component);c(Re,"propTypes",{alt:R.string,carouselStore:R.object.isRequired,children:q.children,className:R.string,hasMasterSpinner:R.bool.isRequired,isBgImage:q.isBgImage,onError:R.func,onLoad:R.func,renderError:R.func,renderLoading:R.func,src:R.string.isRequired,style:R.object,tag:R.string}),c(Re,"defaultProps",{alt:"",children:null,className:null,isBgImage:!1,onError:null,onLoad:null,renderError:null,renderLoading:null,style:null,tag:"img"});var Ae,Ie,Le,qe,ze=j(Re,(function(e){return{hasMasterSpinner:e.hasMasterSpinner,orientation:e.orientation}})),Fe="spinner___27VUp",He=["className"],We=(c(Ae=function(e){function t(){return a(this,t),n.apply(this,arguments)}d(t,e);var n=S(t);return o(t,[{key:"render",value:function(){var e=this.props,t=e.className,n=m(e,He),r=O([Fe,"carousel__spinner",t]);return i.createElement("div",u({className:r},n))}}]),t}(i.PureComponent),"propTypes",{className:R.string}),c(Ae,"defaultProps",{className:null}),Ae),Be={container:"container___2O72F",overlay:"overlay___IV4qY",hover:"hover___MYy31",zoom:"zoom___3kqYk",loading:"loading___1pvNI",imageLoadingSpinnerContainer:"imageLoadingSpinnerContainer___3UIPD"},Ue=["alt","bgImageProps","bgImageTag","carouselStore","className","imageClassName","overlayClassName","isPinchZoomEnabled","spinner","src","srcZoomed","tag"],Ye=(Ie=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).state={isImageLoading:!0,isHovering:!1,isZooming:!1,x:null,y:null,scale:1},i.tpCache={},i.handleImageComplete=i.handleImageComplete.bind(b(i)),i.handleOnMouseMove=i.handleOnMouseMove.bind(b(i)),i.handleOnMouseOut=i.handleOnMouseOut.bind(b(i)),i.handleOnMouseOver=i.handleOnMouseOver.bind(b(i)),i.handleOnTouchEnd=i.handleOnTouchEnd.bind(b(i)),i.handleOnTouchMove=i.handleOnTouchMove.bind(b(i)),i.handleOnTouchStart=i.handleOnTouchStart.bind(b(i)),i}d(t,e);var n=S(t);return o(t,[{key:"componentDidUpdate",value:function(e,t){!1===t.isZooming&&!0===this.state.isZooming&&this.props.carouselStore.setStoreState({isPageScrollLocked:!0}),!0===t.isZooming&&!1===this.state.isZooming&&this.props.carouselStore.setStoreState({isPageScrollLocked:!1})}},{key:"handleImageComplete",value:function(){this.setState({isImageLoading:!1})}},{key:"handleOnMouseOver",value:function(){this.state.isZooming||this.setState({isHovering:!0,scale:2})}},{key:"handleOnMouseOut",value:function(){this.state.isZooming||this.setState({isHovering:!1,scale:1})}},{key:"handleOnMouseMove",value:function(e){if(!this.state.isZooming){var t=C(e.nativeEvent.offsetX/e.target.offsetWidth*100),n=C(e.nativeEvent.offsetY/e.target.offsetHeight*100);this.setState({x:t,y:n})}}},{key:"handleOnTouchStart",value:function(e){var t=this;this.props.isPinchZoomEnabled&&(f(e.targetTouches).forEach((function(e){t.tpCache[e.identifier]={clientX:e.clientX,clientY:e.clientY}})),this.setState((function(e){return{isZooming:e.isZooming||Object.keys(t.tpCache).length>1}})))}},{key:"handleOnTouchMove",value:function(e){var n=this;if(this.state.isZooming){e.persist();var i=f(e.targetTouches).filter((function(e){return n.tpCache[e.identifier]})).slice(0,2);if(2===i.length){e.stopPropagation();var r=e.target.getBoundingClientRect(),a=i[0].identifier,l=i[1].identifier,o={x1:this.tpCache[a].clientX,y1:this.tpCache[a].clientY,x2:this.tpCache[l].clientX,y2:this.tpCache[l].clientY};o.distance=t.distanceBetweenTwoTouches(s({},o));var c=t.midpointBetweenTwoTouches(s({},o));o.cx=c.x,o.cy=c.y;var u={x1:i[0].clientX,y1:i[0].clientY,x2:i[1].clientX,y2:i[1].clientY};u.distance=t.distanceBetweenTwoTouches(s({},u));var d=t.midpointBetweenTwoTouches(s({},u));u.cx=d.x,u.cy=d.y;var h=C(z({min:0,max:100,x:(u.cx-r.left)/r.width*100})),p=C(z({min:0,max:100,x:(u.cy-r.top)/r.height*100})),m=function(e){return z({min:1,max:3,x:e.scale+(u.distance-o.distance)/100})};this.setState((function(e){return{isZooming:1!==m(e),scale:m(e),x:h,y:p}}))}}}},{key:"handleOnTouchEnd",value:function(e){var t=this;this.props.isPinchZoomEnabled&&(f(e.changedTouches).forEach((function(e){delete t.tpCache[e.identifier]})),0===Object.keys(this.tpCache).length&&this.setState({isZooming:!1}))}},{key:"renderLoading",value:function(){if(this.state.isImageLoading){var e=this.props.spinner;return i.createElement("div",{className:O([Be.imageLoadingSpinnerContainer,"carousel__image-loading-spinner-container"])},e&&e(),!e&&i.createElement(We,null))}return null}},{key:"render",value:function(){var e=this.props,t=e.alt,n=e.bgImageProps,r=e.bgImageTag,s=(e.carouselStore,e.className),a=e.imageClassName,l=e.overlayClassName,o=(e.isPinchZoomEnabled,e.spinner,e.src),c=e.srcZoomed,d=e.tag,h=m(e,Ue),p=O([Be.container,s]),b=O([Be.image,"carousel__zoom-image",a]),S=O([Be.overlay,"carousel__zoom-image-overlay",this.state.isHovering&&Be.hover,this.state.isZooming&&Be.zoom,this.state.isHovering&&"carousel__zoom-image-overlay--hovering",this.state.isZooming&&"carousel__zoom-image-overlay--zooming",l]),f={};return(this.state.isHovering||this.state.isZooming)&&(f.transformOrigin="".concat(this.state.x," ").concat(this.state.y),f.transform="scale(".concat(this.state.scale,")")),i.createElement(d,u({className:p},h),i.createElement(ze,u({alt:t,className:b,tag:r,src:o,onLoad:this.handleImageComplete,onError:this.handleImageComplete},n)),i.createElement(ze,{className:S,tag:"div",src:c||o,style:f,isBgImage:!0,onFocus:this.handleOnMouseOver,onMouseOver:this.handleOnMouseOver,onBlur:this.handleOnMouseOut,onMouseOut:this.handleOnMouseOut,onMouseMove:this.handleOnMouseMove,onTouchStart:this.handleOnTouchStart,onTouchEnd:this.handleOnTouchEnd,onTouchMove:this.handleOnTouchMove}),this.renderLoading())}}],[{key:"midpointBetweenTwoTouches",value:function(e){var t=e.x1,n=e.y1;return{x:(t+e.x2)/2,y:(n+e.y2)/2}}},{key:"distanceBetweenTwoTouches",value:function(e){var t=e.x1,n=e.y1,i=e.x2,r=e.y2;return Math.sqrt(Math.pow(i-t,2)+Math.pow(r-n,2))}}]),t}(i.Component),c(Ie,"propTypes",{alt:R.string,bgImageProps:R.object,bgImageTag:R.string,carouselStore:R.object.isRequired,className:R.string,imageClassName:R.string,overlayClassName:R.string,spinner:R.func,src:R.string.isRequired,srcZoomed:R.string,tag:R.string,isPinchZoomEnabled:R.bool}),c(Ie,"defaultProps",{alt:void 0,bgImageProps:{},bgImageTag:"div",className:null,imageClassName:null,overlayClassName:null,isPinchZoomEnabled:!0,spinner:null,srcZoomed:null,tag:"div"}),Ie),Ze=(j(Ye,(function(){return{}})),{slide:"slide___3-Nqo",slideHorizontal:"slideHorizontal___1NzNV",slideInner:"slideInner___2mfX9",focusRing:"focusRing___1airF"}),Ve=["ariaLabel","carouselStore","children","className","classNameHidden","classNameVisible","currentSlide","index","innerClassName","innerTag","naturalSlideHeight","naturalSlideWidth","onBlur","onFocus","orientation","slideSize","style","tabIndex","tag","totalSlides","visibleSlides","isIntrinsicHeight"],Xe=(Le=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).handleOnFocus=i.handleOnFocus.bind(b(i)),i.handleOnBlur=i.handleOnBlur.bind(b(i)),i.state={focused:!1},i}d(t,e);var n=S(t);return o(t,[{key:"isVisible",value:function(){var e=this.props,t=e.currentSlide,n=e.index,i=e.visibleSlides;return n>=t&&n<t+i}},{key:"handleOnFocus",value:function(e){var t=this,n=this.props.onFocus;this.setState({focused:!0},(function(){null!==n&&n.call(t,e)}))}},{key:"handleOnBlur",value:function(e){var t=this,n=this.props.onBlur;this.setState({focused:!1},(function(){null!==n&&n.call(t,e)}))}},{key:"renderFocusRing",value:function(){return this.state.focused?i.createElement("div",{className:[Ze.focusRing,"carousel__slide-focus-ring"].join(" ")}):null}},{key:"render",value:function(){var e=this,t=this.props,n=t.ariaLabel,r=(t.carouselStore,t.children,t.className),s=t.classNameHidden,a=t.classNameVisible,l=(t.currentSlide,t.index,t.innerClassName),o=t.innerTag,c=t.naturalSlideHeight,d=t.naturalSlideWidth,h=(t.onBlur,t.onFocus,t.orientation),p=t.slideSize,b=t.style,S=t.tabIndex,f=t.tag,v=t.totalSlides,g=(t.visibleSlides,t.isIntrinsicHeight),y=m(t,Ve),k={};"horizontal"===h?(k.width=C(p),k.paddingBottom=C(100*c/(d*v))):(k.width=C(100),k.paddingBottom=C(100*c/d));var w={};g&&("horizontal"===h?k.height="unset":k.width="unset",k.paddingBottom="unset",w.position="unset");var T=u({},k,b),E=this.isVisible(),M=O([Ze.slide,"horizontal"===h&&Ze.slideHorizontal,"carousel__slide",this.state.focused&&"carousel__slide--focused",E&&a,E&&"carousel__slide--visible",!E&&s,!E&&"carousel__slide--hidden",r]),_=O([Ze.slideInner,"carousel__inner-slide",l]),P=this.isVisible()?0:-1,N="number"==typeof S?S:P;return i.createElement(f,u({ref:function(t){e.tagRef=t},tabIndex:N,"aria-selected":this.isVisible(),"aria-label":n,role:"option",onFocus:this.handleOnFocus,onBlur:this.handleOnBlur,className:M,style:T},y),i.createElement(o,{ref:function(t){e.innerTagRef=t},className:_,style:w},this.props.children,this.renderFocusRing()))}}]),t}(i.PureComponent),c(Le,"propTypes",{ariaLabel:R.string,carouselStore:R.object,children:q.children,className:R.string,classNameHidden:R.string,classNameVisible:R.string,currentSlide:R.number.isRequired,index:R.number.isRequired,innerClassName:R.string,innerTag:R.string,naturalSlideHeight:R.number.isRequired,naturalSlideWidth:R.number.isRequired,onBlur:R.func,onFocus:R.func,orientation:q.orientation.isRequired,slideSize:R.number.isRequired,style:R.object,tabIndex:R.number,tag:R.string,totalSlides:R.number.isRequired,visibleSlides:R.number.isRequired,isIntrinsicHeight:R.bool}),c(Le,"defaultProps",{ariaLabel:"slide",carouselStore:null,children:null,className:null,classNameHidden:null,classNameVisible:null,innerClassName:null,innerTag:"div",onBlur:null,onFocus:null,style:{},tabIndex:null,tag:"div",isIntrinsicHeight:!1}),Le),Ke=j(Xe,(function(e){return{currentSlide:e.currentSlide,naturalSlideHeight:e.naturalSlideHeight,naturalSlideWidth:e.naturalSlideWidth,orientation:e.orientation,slideSize:e.slideSize,totalSlides:e.totalSlides,visibleSlides:e.visibleSlides,isIntrinsicHeight:e.isIntrinsicHeight}})),Ge=function(){function e(){a(this,e)}return o(e,[{key:"parents",value:function(e,t){return null===e.parentNode?t:this.parents(e.parentNode,t.concat([e]))}},{key:"scrollParent",value:function(t){for(var n=this.parents(t.parentNode,[]),i=0;i<n.length;i+=1)if(e.scroll(n[i]))return n[i];return document.scrollingElement||document.documentElement}},{key:"getScrollParent",value:function(t){return e.isNodeValid(t)?this.scrollParent(t):null}}],[{key:"style",value:function(e,t){return getComputedStyle(e,null).getPropertyValue(t)}},{key:"overflow",value:function(t){return e.style(t,"overflow")+e.style(t,"overflow-y")+e.style(t,"overflow-x")}},{key:"scroll",value:function(t){return/(auto|scroll)/.test(e.overflow(t))}},{key:"isNodeValid",value:function(e){return e instanceof HTMLElement||e instanceof SVGElement}}]),e}(),Qe={horizontalSlider:"horizontalSlider___281Ls",horizontalSliderTray:"horizontalSliderTray___1L-0W",verticalSlider:"verticalSlider___34ZFD",verticalSliderTray:"verticalSliderTray___267D8",verticalTray:"verticalTray___12Key",verticalSlideTrayWrap:"verticalSlideTrayWrap___2nO7o",sliderTray:"sliderTray___-vHFQ",sliderAnimation:"sliderAnimation___300FY",masterSpinnerContainer:"masterSpinnerContainer___1Z6hB"},$e=["ariaLabel","carouselStore","children","className","classNameAnimation","classNameTray","classNameTrayWrap","currentSlide","disableAnimation","disableKeyboard","dragEnabled","hasMasterSpinner","interval","isPageScrollLocked","isPlaying","lockOnWindowScroll","masterSpinnerFinished","moveThreshold","naturalSlideHeight","naturalSlideWidth","onMasterSpinner","orientation","playDirection","privateUnDisableAnimation","slideSize","slideTraySize","spinner","style","tabIndex","totalSlides","touchEnabled","trayProps","trayTag","visibleSlides","isIntrinsicHeight"],Je=["dragStep","step","infinite","preventVerticalScrollOnTouch","preventingVerticalScroll","horizontalPixelThreshold","verticalPixelThreshold"],et=["className","onClickCapture","onMouseDown","onTouchCancel","onTouchEnd","onTouchMove","onTouchStart","ref","style"],tt=(qe=function(e){function t(e){var i;return a(this,t),(i=n.call(this,e)).getSliderRef=i.getSliderRef.bind(b(i)),i.handleDocumentScroll=i.handleDocumentScroll.bind(b(i)),i.handleOnClickCapture=i.handleOnClickCapture.bind(b(i)),i.handleOnKeyDown=i.handleOnKeyDown.bind(b(i)),i.handleOnMouseDown=i.handleOnMouseDown.bind(b(i)),i.handleOnMouseMove=i.handleOnMouseMove.bind(b(i)),i.handleOnMouseUp=i.handleOnMouseUp.bind(b(i)),i.handleOnTouchCancel=i.handleOnTouchCancel.bind(b(i)),i.handleOnTouchEnd=i.handleOnTouchEnd.bind(b(i)),i.handleOnTouchMove=i.handleOnTouchMove.bind(b(i)),i.handleOnTouchStart=i.handleOnTouchStart.bind(b(i)),i.playBackward=i.playBackward.bind(b(i)),i.playForward=i.playForward.bind(b(i)),i.callCallback=i.callCallback.bind(b(i)),i.blockWindowScroll=i.blockWindowScroll.bind(b(i)),i.state={cancelNextClick:!1,deltaX:0,deltaY:0,isBeingMouseDragged:!1,isBeingTouchDragged:!1,preventingVerticalScroll:!1,startX:0,startY:0},i.interval=null,i.isDocumentScrolling=null,i.moveTimer=null,i.originalOverflow=null,i.scrollParent=null,i.scrollStopTimer=null,i}d(t,e);var n=S(t);return o(t,[{key:"componentDidMount",value:function(){this.props.lockOnWindowScroll&&window.addEventListener("scroll",this.handleDocumentScroll,!1),(this.props.touchEnabled||this.props.preventVerticalScrollOnTouch)&&window.addEventListener("touchmove",this.blockWindowScroll,!1),document.documentElement.addEventListener("mouseleave",this.handleOnMouseUp,!1),document.documentElement.addEventListener("mousemove",this.handleOnMouseMove,!1),document.documentElement.addEventListener("mouseup",this.handleOnMouseUp,!1),this.props.isPlaying&&this.play()}},{key:"componentDidUpdate",value:function(e){!e.isPlaying&&this.props.isPlaying&&this.play(),e.isPlaying&&!this.props.isPlaying&&this.stop(),!e.isPageScrollLocked&&this.props.isPageScrollLocked&&this.lockScroll(),e.isPageScrollLocked&&!this.props.isPageScrollLocked&&this.unlockScroll(),!1===e.privateUnDisableAnimation&&!0===this.props.privateUnDisableAnimation&&this.props.carouselStore.setStoreState({privateUnDisableAnimation:!1,disableAnimation:!1})}},{key:"componentWillUnmount",value:function(){document.documentElement.removeEventListener("mouseleave",this.handleOnMouseUp,!1),document.documentElement.removeEventListener("mousemove",this.handleOnMouseMove,!1),document.documentElement.removeEventListener("mouseup",this.handleOnMouseUp,!1),window.removeEventListener("scroll",this.handleDocumentScroll,!1),window.removeEventListener("touchmove",this.blockWindowScroll,!1),this.stop(),window.cancelAnimationFrame.call(window,this.moveTimer),window.clearTimeout(this.scrollStopTimer),this.isDocumentScrolling=null,this.moveTimer=null,this.scrollStopTimer=null}},{key:"getSliderRef",value:function(e){this.sliderTrayElement=e}},{key:"fakeOnDragStart",value:function(e){var t=e.screenX,n=e.screenY,i=e.touchDrag,r=void 0!==i&&i,s=e.mouseDrag,a=void 0!==s&&s;this.props.carouselStore.setStoreState({isPlaying:!1}),window.cancelAnimationFrame.call(window,this.moveTimer),"vertical"===this.props.orientation&&this.props.carouselStore.setStoreState({isPageScrollLocked:!0}),this.setState({isBeingTouchDragged:r,isBeingMouseDragged:a,startX:t,startY:n})}},{key:"fakeOnDragMove",value:function(e,t){var n=this;this.moveTimer=window.requestAnimationFrame.call(window,(function(){n.setState((function(i){return{deltaX:e-i.startX,deltaY:t-i.startY,preventingVerticalScroll:Math.abs(t-i.startY)<=n.props.verticalPixelThreshold&&Math.abs(e-i.startX)>=n.props.horizontalPixelThreshold}}))}))}},{key:"fakeOnDragEnd",value:function(){window.cancelAnimationFrame.call(window,this.moveTimer),this.computeCurrentSlide(),"vertical"===this.props.orientation&&this.props.carouselStore.setStoreState({isPageScrollLocked:!1}),this.setState({deltaX:0,deltaY:0,isBeingTouchDragged:!1,isBeingMouseDragged:!1}),this.isDocumentScrolling=!this.props.lockOnWindowScroll&&null}},{key:"callCallback",value:function(e,t){var n=this.props.trayProps;n&&"function"==typeof n[e]&&(t.persist(),n[e](t))}},{key:"handleOnMouseDown",value:function(e){this.props.dragEnabled?(e.preventDefault(),this.fakeOnDragStart({screenX:e.screenX,screenY:e.screenY,mouseDrag:!0}),this.callCallback("onMouseDown",e)):this.callCallback("onMouseDown",e)}},{key:"handleOnMouseMove",value:function(e){this.state.isBeingMouseDragged&&(this.setState({cancelNextClick:!0}),e.preventDefault(),this.fakeOnDragMove(e.screenX,e.screenY))}},{key:"handleOnMouseUp",value:function(e){this.state.isBeingMouseDragged&&(e.preventDefault(),this.fakeOnDragEnd())}},{key:"handleOnClickCapture",value:function(e){this.state.cancelNextClick?(e.preventDefault(),this.setState({cancelNextClick:!1}),this.callCallback("onClickCapture",e)):this.callCallback("onClickCapture",e)}},{key:"handleOnTouchStart",value:function(e){if(this.props.touchEnabled){"vertical"===this.props.orientation&&e.preventDefault();var t=e.targetTouches[0];this.fakeOnDragStart({screenX:t.screenX,screenY:t.screenY,touchDrag:!0}),this.callCallback("onTouchStart",e)}else this.callCallback("onTouchStart",e)}},{key:"handleDocumentScroll",value:function(){var e=this;this.props.touchEnabled&&(this.isDocumentScrolling=!0,window.clearTimeout(this.scrollStopTimer),this.scrollStopTimer=window.setTimeout((function(){e.isDocumentScrolling=!1}),66))}},{key:"handleOnTouchMove",value:function(e){if(!this.props.touchEnabled||this.props.lockOnWindowScroll&&this.isDocumentScrolling)this.callCallback("onTouchMove",e);else{window.cancelAnimationFrame.call(window,this.moveTimer);var t=e.targetTouches[0];t&&(this.fakeOnDragMove(t.screenX,t.screenY),this.callCallback("onTouchMove",e))}}},{key:"forward",value:function(){var e=this.props,t=e.currentSlide,n=e.step,i=e.totalSlides,r=e.visibleSlides;return Math.min(t+n,i-r)}},{key:"backward",value:function(){var e=this.props,t=e.currentSlide,n=e.step;return Math.max(t-n,0)}},{key:"handleOnKeyDown",value:function(e){var t=e.keyCode,n=this.props,i=n.carouselStore,r=n.currentSlide,s=n.disableKeyboard,a=n.totalSlides,l=n.visibleSlides,o={};!0===s||a<=l||(37===t&&(e.preventDefault(),this.focus(),o.currentSlide=Math.max(0,r-1),o.isPlaying=!1),39===t&&(e.preventDefault(),this.focus(),o.currentSlide=Math.min(a-l,r+1),o.isPlaying=!1),i.setStoreState(o))}},{key:"playForward",value:function(){var e=this.props,t=e.carouselStore,n=e.currentSlide;t.setStoreState({currentSlide:this.forward()===n?0:this.forward()})}},{key:"playBackward",value:function(){var e=this.props,t=e.carouselStore,n=e.currentSlide,i=e.totalSlides,r=e.visibleSlides;t.setStoreState({currentSlide:this.backward()===n?i-r:this.backward()})}},{key:"play",value:function(){var e=this.props.playDirection;this.interval=setInterval("forward"===e?this.playForward:this.playBackward,this.props.interval)}},{key:"stop",value:function(){window.clearInterval(this.interval),this.interval=null}},{key:"lockScroll",value:function(){var e=new Ge;this.scrollParent=e.getScrollParent(this.sliderTrayElement),this.scrollParent&&(this.originalOverflow=this.originalOverflow||this.scrollParent.style.overflow,this.scrollParent.style.overflow="hidden")}},{key:"unlockScroll",value:function(){this.scrollParent&&(this.scrollParent.style.overflow=this.originalOverflow,this.originalOverflow=null,this.scrollParent=null)}},{key:"blockWindowScroll",value:function(e){this.state.preventingVerticalScroll&&(e.preventDefault(),e.stopImmediatePropagation())}},{key:"computeCurrentSlide",value:function(){var e=t.slideSizeInPx(this.props.orientation,this.sliderTrayElement.clientWidth,this.sliderTrayElement.clientHeight,this.props.totalSlides),n=t.slidesMoved(this.props.moveThreshold,this.props.orientation,this.state.deltaX,this.state.deltaY,e,this.props.dragStep),i=this.props.totalSlides-Math.min(this.props.totalSlides,this.props.visibleSlides),r=z({min:0,max:i,x:this.props.currentSlide+n});this.props.infinite&&(this.props.currentSlide>=i&&n>0&&(r=0),0===this.props.currentSlide&&n<0&&(r=i)),this.props.carouselStore.setStoreState({currentSlide:r})}},{key:"focus",value:function(){this.sliderElement.focus()}},{key:"handleOnTouchEnd",value:function(e){this.endTouchMove(),this.callCallback("onTouchEnd",e)}},{key:"handleOnTouchCancel",value:function(e){this.endTouchMove(),this.callCallback("onTouchCancel",e)}},{key:"endTouchMove",value:function(){this.props.touchEnabled&&this.fakeOnDragEnd()}},{key:"renderMasterSpinner",value:function(){var e=this.props,t=e.hasMasterSpinner,n=e.masterSpinnerFinished,r=e.spinner;return t&&!n?("function"==typeof this.props.onMasterSpinner&&this.props.onMasterSpinner(),i.createElement("div",{className:O([Qe.masterSpinnerContainer,"carousel__master-spinner-container"])},r&&r(),!r&&i.createElement(We,null))):null}},{key:"render",value:function(){var e=this,t=this.props,n=t.ariaLabel,r=(t.carouselStore,t.children),s=t.className,a=t.classNameAnimation,l=t.classNameTray,o=t.classNameTrayWrap,c=t.currentSlide,d=t.disableAnimation,h=(t.disableKeyboard,t.dragEnabled,t.hasMasterSpinner,t.interval,t.isPageScrollLocked,t.isPlaying,t.lockOnWindowScroll,t.masterSpinnerFinished,t.moveThreshold,t.naturalSlideHeight),p=t.naturalSlideWidth,b=(t.onMasterSpinner,t.orientation),S=(t.playDirection,t.privateUnDisableAnimation,t.slideSize),f=t.slideTraySize,v=(t.spinner,t.style),g=t.tabIndex,y=(t.totalSlides,t.touchEnabled,t.trayProps),k=t.trayTag,w=t.visibleSlides,T=t.isIntrinsicHeight,E=m(t,$e),M=u({},v),_={};"vertical"===b&&(_.height=0,_.paddingBottom=C(100*h*w/p),_.width=C(100));var P={},N=C(S*c*-1);(this.state.isBeingTouchDragged||this.state.isBeingMouseDragged||d)&&(P.transition="none"),T&&(P.display="flex",P.alignItems="stretch"),"vertical"===b?(P.transform="translateY(".concat(N,") translateY(").concat(this.state.deltaY,"px)"),P.width=C(100),P.flexDirection="column"):(P.width=C(f),P.transform="translateX(".concat(N,") translateX(").concat(this.state.deltaX,"px)"),P.flexDirection="row");var D=O(["vertical"===b?Qe.verticalSlider:Qe.horizontalSlider,"carousel__slider","vertical"===b?"carousel__slider--vertical":"carousel__slider--horizontal",s]),x=O([Qe.sliderTrayWrap,"carousel__slider-tray-wrapper","vertical"===b?Qe.verticalSlideTrayWrap:Qe.horizontalTrayWrap,"vertical"===b?"carousel__slider-tray-wrap--vertical":"carousel__slider-tray-wrap--horizontal",o]),j=O([Qe.sliderTray,a||Qe.sliderAnimation,"carousel__slider-tray","vertical"===b?Qe.verticalTray:Qe.horizontalTray,"vertical"===b?"carousel__slider-tray--vertical":"carousel__slider-tray--horizontal",l]),R=null!==g?g:0,A=(E.dragStep,E.step,E.infinite,E.preventVerticalScrollOnTouch,E.preventingVerticalScroll,E.horizontalPixelThreshold,E.verticalPixelThreshold,m(E,Je)),I=(y.className,y.onClickCapture,y.onMouseDown,y.onTouchCancel,y.onTouchEnd,y.onTouchMove,y.onTouchStart,y.ref,y.style,m(y,et));return i.createElement("div",u({ref:function(t){e.sliderElement=t},className:D,"aria-live":"polite","aria-label":n,style:M,tabIndex:R,onKeyDown:this.handleOnKeyDown,role:"listbox"},A),i.createElement("div",{className:x,style:_},i.createElement(k,u({ref:this.getSliderRef,className:j,style:P,onTouchStart:this.handleOnTouchStart,onTouchMove:this.handleOnTouchMove,onTouchEnd:this.handleOnTouchEnd,onTouchCancel:this.handleOnTouchCancel,onMouseDown:this.handleOnMouseDown,onClickCapture:this.handleOnClickCapture},I),r),this.renderMasterSpinner()))}}],[{key:"slideSizeInPx",value:function(e,t,n,i){return("horizontal"===e?t:n)/i}},{key:"slidesMoved",value:function(e,t,n,i,r,s){var a="horizontal"===t?n:i,l=Math.abs(Math.round(a/r)),o=Math.abs(a)>=r*e?s:0,c=Math.max(o,l);if(a<0)return c;var u=-c;return 0===u?0:u}}]),t}(i.Component),c(qe,"propTypes",{ariaLabel:R.string,carouselStore:R.object.isRequired,children:R.node.isRequired,className:R.string,classNameAnimation:R.string,classNameTray:R.string,classNameTrayWrap:R.string,currentSlide:R.number.isRequired,disableAnimation:R.bool,disableKeyboard:R.bool,dragEnabled:R.bool.isRequired,dragStep:R.number,hasMasterSpinner:R.bool.isRequired,infinite:R.bool,interval:R.number.isRequired,isPageScrollLocked:R.bool.isRequired,isPlaying:R.bool.isRequired,lockOnWindowScroll:R.bool.isRequired,preventVerticalScrollOnTouch:R.bool,horizontalPixelThreshold:R.number,verticalPixelThreshold:R.number,masterSpinnerFinished:R.bool.isRequired,moveThreshold:R.number,naturalSlideHeight:R.number.isRequired,naturalSlideWidth:R.number.isRequired,onMasterSpinner:R.func,orientation:q.orientation.isRequired,playDirection:q.direction.isRequired,privateUnDisableAnimation:R.bool,slideSize:R.number.isRequired,slideTraySize:R.number.isRequired,spinner:R.func,step:R.number.isRequired,style:R.object,tabIndex:R.number,totalSlides:R.number.isRequired,touchEnabled:R.bool.isRequired,trayProps:R.shape({className:R.string,onClickCapture:R.func,onMouseDown:R.func,onTouchCancel:R.func,onTouchEnd:R.func,onTouchMove:R.func,onTouchStart:R.func,ref:R.shape({}),style:R.string}),trayTag:R.string,visibleSlides:R.number,isIntrinsicHeight:R.bool}),c(qe,"defaultProps",{ariaLabel:"slider",className:null,classNameAnimation:null,classNameTray:null,classNameTrayWrap:null,disableAnimation:!1,disableKeyboard:!1,dragStep:1,infinite:!1,preventVerticalScrollOnTouch:!0,horizontalPixelThreshold:15,verticalPixelThreshold:10,moveThreshold:.1,onMasterSpinner:null,privateUnDisableAnimation:!1,spinner:null,style:{},tabIndex:null,trayProps:{},trayTag:"div",visibleSlides:1,isIntrinsicHeight:!1}),qe),nt=j(tt,(function(e){return{currentSlide:e.currentSlide,disableAnimation:e.disableAnimation,privateUnDisableAnimation:e.privateUnDisableAnimation,disableKeyboard:e.disableKeyboard,dragEnabled:e.dragEnabled,hasMasterSpinner:e.hasMasterSpinner,infinite:e.infinite,interval:e.interval,isPageScrollLocked:e.isPageScrollLocked,isPlaying:e.isPlaying,lockOnWindowScroll:e.lockOnWindowScroll,preventingVerticalScroll:e.preventingVerticalScroll,masterSpinnerFinished:e.masterSpinnerFinished,naturalSlideHeight:e.naturalSlideHeight,naturalSlideWidth:e.naturalSlideWidth,orientation:e.orientation,playDirection:e.playDirection,slideSize:e.slideSize,slideTraySize:e.slideTraySize,step:e.step,dragStep:e.dragStep,totalSlides:e.totalSlides,touchEnabled:e.touchEnabled,visibleSlides:e.visibleSlides,isIntrinsicHeight:e.isIntrinsicHeight}}))},28475:(e,t,n)=>{n.d(t,{Z:()=>s});var i=n(27378),r=function(){return r=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},r.apply(this,arguments)};function s(e){var t=i.useState(!1),n=t[0],s=t[1],a=i.useState(!1),l=a[0],o=a[1],c=encodeURIComponent(e.id),u="string"==typeof e.playlistCoverId?encodeURIComponent(e.playlistCoverId):null,d=e.title,h=e.poster||"hqdefault",p="&"+e.params||0,m=e.muted?"&mute=1":"",b=e.announce||"Watch",S=e.webp?"webp":"jpg",f=e.webp?"vi_webp":"vi",v=e.thumbnail||(e.playlist?"https://i.ytimg.com/"+f+"/"+u+"/"+h+"."+S:"https://i.ytimg.com/"+f+"/"+c+"/"+h+"."+S),g=e.noCookie;g=e.cookie?"https://www.youtube.com":"https://www.youtube-nocookie.com";var y=e.playlist?g+"/embed/videoseries?autoplay=1"+m+"&list="+c+p:g+"/embed/"+c+"?autoplay=1&state=1"+m+p,k=e.activatedClass||"lyt-activated",O=e.adNetwork||!1,w=e.aspectHeight||9,T=e.aspectWidth||16,C=e.iframeClass||"",E=e.playerClass||"lty-playbtn",M=e.wrapperClass||"yt-lite",_=e.onIframeAdded||function(){},P=e.rel?"prefetch":"preload";return i.useEffect((function(){l&&_()}),[l]),i.createElement(i.Fragment,null,i.createElement("link",{rel:P,href:v,as:"image"}),i.createElement(i.Fragment,null,n&&i.createElement(i.Fragment,null,i.createElement("link",{rel:"preconnect",href:g}),i.createElement("link",{rel:"preconnect",href:"https://www.google.com"}),O&&i.createElement(i.Fragment,null,i.createElement("link",{rel:"preconnect",href:"https://static.doubleclick.net"}),i.createElement("link",{rel:"preconnect",href:"https://googleads.g.doubleclick.net"})))),i.createElement("article",{onPointerOver:function(){n||s(!0)},onClick:function(){l||o(!0)},className:M+" "+(l?k:""),"data-title":d,style:r({backgroundImage:"url("+v+")"},{"--aspect-ratio":w/T*100+"%"})},i.createElement("button",{type:"button",className:E,"aria-label":b+" "+d}),l&&i.createElement("iframe",{className:C,title:d,width:"560",height:"315",frameBorder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,src:y})))}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>a});var i=n(27378);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16618.d79c5adb.js.LICENSE.txt b/assets/js/16618.d79c5adb.js.LICENSE.txt new file mode 100644 index 0000000000..c18ab1d93b --- /dev/null +++ b/assets/js/16618.d79c5adb.js.LICENSE.txt @@ -0,0 +1,14 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ diff --git a/assets/js/1663798c.ecfc1347.js b/assets/js/1663798c.ecfc1347.js new file mode 100644 index 0000000000..2406c85c2a --- /dev/null +++ b/assets/js/1663798c.ecfc1347.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66274],{47706:(t,g,i)=>{i.r(g),i.d(g,{assets:()=>a,contentTitle:()=>e,default:()=>n,frontMatter:()=>o,metadata:()=>m,toc:()=>p});var h=i(24246),u=i(71670);const o={authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize"}],tags:["paginated-tag"]},e="Image-only authors",m={permalink:"/tests/blog/2022/01/20/image-only-authors",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx",source:"@site/_dogfooding/_blog tests/2022-01-20-image-only-authors.mdx",title:"Image-only authors",description:"You can make a compact authors list without author names!",date:"2022-01-20T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:2,hasTruncateMarker:!1,authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice",imageURL:"https://github.com/deltice.png"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa",imageURL:"https://github.com/ericnakagawa.png"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos",imageURL:"https://github.com/hramos.png"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19",imageURL:"https://github.com/wgao19.png"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter",imageURL:"https://github.com/rickyvetter.png"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc",imageURL:"https://github.com/hong4rc.png"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize",imageURL:"https://github.com/italicize.png"}],frontMatter:{authors:[{image_url:"https://github.com/endiliey.png",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png"},{image_url:"https://github.com/lex111.png",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png"},{image_url:"https://github.com/slorber.png",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png"},{image_url:"https://github.com/yangshun.png",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png"},{image_url:"https://github.com/JoelMarcey.png",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png"},{image_url:"https://github.com/Josh-Cena.png",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png"},{image_url:"https://github.com/deltice.png",url:"https://github.com/deltice",imageURL:"https://github.com/deltice.png"},{image_url:"https://github.com/SamChou19815.png",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png"},{image_url:"https://github.com/ericnakagawa.png",url:"https://github.com/ericnakagawa",imageURL:"https://github.com/ericnakagawa.png"},{image_url:"https://github.com/Simek.png",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png"},{image_url:"https://github.com/hramos.png",url:"https://github.com/hramos",imageURL:"https://github.com/hramos.png"},{image_url:"https://github.com/wgao19.png",url:"https://github.com/wgao19",imageURL:"https://github.com/wgao19.png"},{image_url:"https://github.com/rickyvetter.png",url:"https://github.com/rickyvetter",imageURL:"https://github.com/rickyvetter.png"},{image_url:"https://github.com/fanny.png",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png"},{image_url:"https://github.com/armano2.png",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png"},{image_url:"https://github.com/RDIL.png",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png"},{image_url:"https://github.com/teikjun.png",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png"},{image_url:"https://github.com/hong4rc.png",url:"https://github.com/hong4rc",imageURL:"https://github.com/hong4rc.png"},{image_url:"https://github.com/anshulrgoyal.png",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png"},{image_url:"https://github.com/italicize.png",url:"https://github.com/italicize",imageURL:"https://github.com/italicize.png"}],tags:["paginated-tag"]},unlisted:!1,prevItem:{title:"Third post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/21/dup-footnote"},nextItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/11/13/dup-title"}},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},p=[];function s(t){const g={p:"p",...(0,u.a)(),...t.components};return(0,h.jsx)(g.p,{children:"You can make a compact authors list without author names!"})}function n(t={}){const{wrapper:g}={...(0,u.a)(),...t.components};return g?(0,h.jsx)(g,{...t,children:(0,h.jsx)(s,{...t})}):s(t)}},71670:(t,g,i)=>{i.d(g,{Z:()=>m,a:()=>e});var h=i(27378);const u={},o=h.createContext(u);function e(t){const g=h.useContext(o);return h.useMemo((function(){return"function"==typeof t?t(g):{...g,...t}}),[g,t])}function m(t){let g;return g=t.disableParentContext?"function"==typeof t.components?t.components(u):t.components||u:e(t.components),h.createElement(o.Provider,{value:g},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f6cad8.547f1d9f.js b/assets/js/16f6cad8.547f1d9f.js new file mode 100644 index 0000000000..667bd280b5 --- /dev/null +++ b/assets/js/16f6cad8.547f1d9f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84694],{41124:(e,n,i)=>{i.d(n,{Z:()=>a});var s=i(24246),t=(i(27378),i(4646));const l={tableOfContentsInline:"tableOfContentsInline_2sru"};function a({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,s.jsx)("div",{className:l.tableOfContentsInline,children:(0,s.jsx)(t.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:i,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,i)=>{i.d(n,{Z:()=>I});var s=i(24246),t=i(27378),l=i(73919);function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function d(e){const n=e.map((e=>c(o({},e),{parentIndex:-1,children:[]}))),i=Array(7).fill(-1);n.forEach(((e,n)=>{const s=i.slice(2,e.level);e.parentIndex=Math.max(...s),i[e.level]=n}));const s=[];return n.forEach((e=>{const{parentIndex:i}=e,t=r(e,["parentIndex"]);i>=0?n[i].children.push(t):s.push(t)})),s}function u({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return e.flatMap((e=>{const s=u({toc:e.children,minHeadingLevel:n,maxHeadingLevel:i});return function(e){return e.level>=n&&e.level<=i}(e)?[c(o({},e),{children:s})]:s}))}function b(e){const n=e.getBoundingClientRect();return n.top===n.bottom?b(e.parentNode):n}function m(e,{anchorTopOffset:n}){const i=e.find((e=>b(e).top>=n));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(i))?i:null!==(s=e[e.indexOf(i)-1])&&void 0!==s?s:null;var s}var t;return null!==(t=e[e.length-1])&&void 0!==t?t:null}function h(){const e=(0,t.useRef)(0),{navbar:{hideOnScroll:n}}=(0,l.L)();return(0,t.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function p(e){const n=(0,t.useRef)(void 0),i=h();(0,t.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:t,minHeadingLevel:l,maxHeadingLevel:a}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function({minHeadingLevel:e,maxHeadingLevel:n}){const i=[];for(let s=e;s<=n;s+=1)i.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:l,maxHeadingLevel:a}),c=m(o,{anchorTopOffset:i.current}),r=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,i){i?(n.current&&n.current!==e&&n.current.classList.remove(t),e.classList.add(t),n.current=e):e.classList.remove(t)}(e,e===r)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,i])}var x=i(41428);function g({toc:e,className:n,linkClassName:i,isChild:t}){return e.length?(0,s.jsx)("ul",{className:t?void 0:n,children:e.map((e=>(0,s.jsxs)("li",{children:[(0,s.jsx)(x.Z,{to:`#${e.id}`,className:null!=i?i:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,s.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:i})]},e.id)))}):null}const f=t.memo(g);function v(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function j(e,n){if(null==e)return{};var i,s,t=function(e,n){if(null==e)return{};var i,s,t={},l=Object.keys(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||(t[i]=e[i]);return t}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(s=0;s<l.length;s++)i=l[s],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(t[i]=e[i])}return t}function I(e){var{toc:n,className:i="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:r}=e,b=j(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const m=(0,l.L)(),h=null!=c?c:m.tableOfContents.minHeadingLevel,x=null!=r?r:m.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:i}){return(0,t.useMemo)((()=>u({toc:d(e),minHeadingLevel:n,maxHeadingLevel:i})),[e,n,i])}({toc:n,minHeadingLevel:h,maxHeadingLevel:x});return p((0,t.useMemo)((()=>{if(a&&o)return{linkClassName:a,linkActiveClassName:o,minHeadingLevel:h,maxHeadingLevel:x}}),[a,o,h,x])),(0,s.jsx)(f,function(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){v(e,n,i[n])}))}return e}({toc:g,className:i,linkClassName:a},b))}},6698:(e,n,i)=>{i.d(n,{Z:()=>r});var s=i(24246),t=(i(27378),i(40624));const l={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{},s=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),s.forEach((function(n){a(e,n,i[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,s)}return i}(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})),e}function r({children:e,minHeight:n,url:i="http://localhost:3000",style:a,bodyStyle:r}){return(0,s.jsxs)("div",{className:l.browserWindow,style:c(o({},a),{minHeight:n}),children:[(0,s.jsxs)("div",{className:l.browserWindowHeader,children:[(0,s.jsxs)("div",{className:l.buttons,children:[(0,s.jsx)("span",{className:l.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:l.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(l.browserWindowAddressBar,"text--truncate"),children:i}),(0,s.jsx)("div",{className:l.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar}),(0,s.jsx)("span",{className:l.bar})]})})]}),(0,s.jsx)("div",{className:l.browserWindowBody,style:r,children:e})]})}},47336:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(24246),t=i(71670),l=i(6698),a=i(41124);const o={id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},c="Headings and Table of contents",r={id:"guides/markdown-features/toc",title:"Headings and Table of contents",description:"Customizing headings and table-of-contents in Markdown",source:"@site/docs/guides/markdown-features/markdown-features-toc.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/toc",permalink:"/docs/markdown-features/toc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-toc.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,frontMatter:{id:"toc",description:"Customizing headings and table-of-contents in Markdown",slug:"/markdown-features/toc"},sidebar:"docs",previous:{title:"Admonitions",permalink:"/docs/markdown-features/admonitions"},next:{title:"Assets",permalink:"/docs/markdown-features/assets"}},d={},u=[{value:"Markdown headings",id:"markdown-headings",level:2},{value:"Heading IDs",id:"heading-ids",level:3},{value:"Table of contents heading level",id:"table-of-contents-heading-level",level:2},{value:"Inline table of contents",id:"inline-table-of-contents",level:2},{value:"Customizing table of contents generation",id:"customizing-table-of-contents-generation",level:2},{value:"Example Section 1",id:"example-section-1",level:2},{value:"Example Subsection 1 a",id:"example-subsection-1-a",level:3},{value:"Example subsubsection 1 a I",id:"example-subsubsection-1-a-i",level:4},{value:"Example subsubsection 1 a II",id:"example-subsubsection-1-a-ii",level:4},{value:"Example subsubsection 1 a III",id:"example-subsubsection-1-a-iii",level:4},{value:"Example Subsection 1 b",id:"example-subsection-1-b",level:3},{value:"Example subsubsection 1 b I",id:"example-subsubsection-1-b-i",level:4},{value:"Example subsubsection 1 b II",id:"example-subsubsection-1-b-ii",level:4},{value:"Example subsubsection 1 b III",id:"example-subsubsection-1-b-iii",level:4},{value:"Example Subsection 1 c",id:"example-subsection-1-c",level:3},{value:"Example subsubsection 1 c I",id:"example-subsubsection-1-c-i",level:4},{value:"Example subsubsection 1 c II",id:"example-subsubsection-1-c-ii",level:4},{value:"Example subsubsection 1 c III",id:"example-subsubsection-1-c-iii",level:4},{value:"Example Section 2",id:"example-section-2",level:2},{value:"Example Subsection 2 a",id:"example-subsection-2-a",level:3},{value:"Example subsubsection 2 a I",id:"example-subsubsection-2-a-i",level:4},{value:"Example subsubsection 2 a II",id:"example-subsubsection-2-a-ii",level:4},{value:"Example subsubsection 2 a III",id:"example-subsubsection-2-a-iii",level:4},{value:"Example Subsection 2 b",id:"example-subsection-2-b",level:3},{value:"Example subsubsection 2 b I",id:"example-subsubsection-2-b-i",level:4},{value:"Example subsubsection 2 b II",id:"example-subsubsection-2-b-ii",level:4},{value:"Example subsubsection 2 b III",id:"example-subsubsection-2-b-iii",level:4},{value:"Example Subsection 2 c",id:"example-subsection-2-c",level:3},{value:"Example subsubsection 2 c I",id:"example-subsubsection-2-c-i",level:4},{value:"Example subsubsection 2 c II",id:"example-subsubsection-2-c-ii",level:4},{value:"Example subsubsection 2 c III",id:"example-subsubsection-2-c-iii",level:4},{value:"Example Section 3",id:"example-section-3",level:2},{value:"Example Subsection 3 a",id:"example-subsection-3-a",level:3},{value:"Example subsubsection 3 a I",id:"example-subsubsection-3-a-i",level:4},{value:"Example subsubsection 3 a II",id:"example-subsubsection-3-a-ii",level:4},{value:"Example subsubsection 3 a III",id:"example-subsubsection-3-a-iii",level:4},{value:"Example Subsection 3 b",id:"example-subsection-3-b",level:3},{value:"Example subsubsection 3 b I",id:"example-subsubsection-3-b-i",level:4},{value:"Example subsubsection 3 b II",id:"example-subsubsection-3-b-ii",level:4},{value:"Example subsubsection 3 b III",id:"example-subsubsection-3-b-iii",level:4},{value:"Example Subsection 3 c",id:"example-subsection-3-c",level:3},{value:"Example subsubsection 3 c I",id:"example-subsubsection-3-c-i",level:4},{value:"Example subsubsection 3 c II",id:"example-subsubsection-3-c-ii",level:4},{value:"Example subsubsection 3 c III",id:"example-subsubsection-3-c-iii",level:4}];function b(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Code:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Code",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"headings-and-table-of-contents",children:"Headings and Table of contents"}),"\n",(0,s.jsx)(n.h2,{id:"markdown-headings",children:"Markdown headings"}),"\n",(0,s.jsx)(n.p,{children:"You can use regular Markdown headings."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"## Level 2 title\n\n### Level 3 title\n\n#### Level 4 title\n"})}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown heading will appear as a table of contents entry."}),"\n",(0,s.jsx)(n.h3,{id:"heading-ids",children:"Heading IDs"}),"\n",(0,s.jsx)(n.p,{children:"Each heading has an ID that can be automatically generated or explicitly specified. Heading IDs allow you to link to a specific document heading in Markdown or JSX:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"[link](#heading-id)\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:'<Link to="#heading-id">link</Link>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["By default, Docusaurus will generate heading IDs for you, based on the heading text. For example, ",(0,s.jsx)(n.code,{children:"### Hello World"})," will have ID ",(0,s.jsx)(n.code,{children:"hello-world"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Generated IDs have ",(0,s.jsx)(n.strong,{children:"some limitations"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The ID might not look good"}),"\n",(0,s.jsxs)(n.li,{children:["You might want to ",(0,s.jsx)(n.strong,{children:"change or translate"})," the text without updating the existing ID"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["A special Markdown syntax lets you set an ",(0,s.jsx)(n.strong,{children:"explicit heading id"}),":"]}),"\n",(0,s.jsx)(i,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"/docs/cli#docusaurus-write-heading-ids-sitedir",children:(0,s.jsx)(n.code,{children:"write-heading-ids"})})})," CLI command to add explicit IDs to all your Markdown documents."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Avoid colliding IDs",type:"warning",children:(0,s.jsx)(n.p,{children:"Generated heading IDs will be guaranteed to be unique on each page, but if you use custom IDs, make sure each one appears exactly once on each page, or there will be two DOM elements with the same ID, which is invalid HTML semantics, and will lead to one heading being unlinkable."})}),"\n",(0,s.jsx)(n.h2,{id:"table-of-contents-heading-level",children:"Table of contents heading level"}),"\n",(0,s.jsx)(n.p,{children:"Each Markdown document displays a table of contents on the top-right corner. By default, this table only shows h2 and h3 headings, which should be sufficient for an overview of the page structure. In case you need to change the range of headings displayed, you can customize the minimum and maximum heading level \u2014 either per page or globally."}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for a particular page, use the ",(0,s.jsx)(n.code,{children:"toc_min_heading_level"})," and ",(0,s.jsx)(n.code,{children:"toc_max_heading_level"})," front matter."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",metastring:'title="myDoc.md"',children:"---\n# Display h2 to h5 headings\ntoc_min_heading_level: 2\ntoc_max_heading_level: 5\n---\n"})}),"\n",(0,s.jsxs)(n.p,{children:["To set the heading level for ",(0,s.jsx)(n.em,{children:"all"})," pages, use the ",(0,s.jsx)(n.a,{href:"/docs/api/themes/configuration#table-of-contents",children:(0,s.jsx)(n.code,{children:"themeConfig.tableOfContents"})})," option."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n tableOfContents: {\n // highlight-start\n minHeadingLevel: 2,\n maxHeadingLevel: 5,\n // highlight-end\n },\n },\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you've set the options globally, you can still override them locally via front matter."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"themeConfig"})," option would apply to all TOC on the site, including ",(0,s.jsx)(n.a,{href:"#inline-table-of-contents",children:"inline TOC"}),", but front matter options only affect the top-right TOC. You need to use the ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," and ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," props to customize each ",(0,s.jsx)(n.code,{children:"<TOCInline />"})," component."]})}),"\n",(0,s.jsx)(n.h2,{id:"inline-table-of-contents",children:"Inline table of contents"}),"\n",(0,s.jsx)(n.p,{children:"It is also possible to display an inline table of contents directly inside a Markdown document, thanks to MDX."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," variable is available in any MDX document and contains all the headings of an MDX document. By default, only ",(0,s.jsx)(n.code,{children:"h2"})," and ",(0,s.jsx)(n.code,{children:"h3"})," headings are displayed in the TOC. You can change which heading levels are visible by setting ",(0,s.jsx)(n.code,{children:"minHeadingLevel"})," or ",(0,s.jsx)(n.code,{children:"maxHeadingLevel"})," for individual ",(0,s.jsx)(n.code,{children:"TOCInline"})," components."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline toc={toc} />\n"})}),"\n","\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"toc"})," global is just a list of heading items:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"declare const toc: {\n value: string;\n id: string;\n level: number;\n}[];\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that the ",(0,s.jsx)(n.code,{children:"toc"})," global is a flat array, so you can easily cut out unwanted nodes or insert extra nodes, and create a new TOC tree."]}),"\n","\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\n\n<TOCInline\n // Only show h2 and h4 headings\n toc={toc.filter((node) => node.level === 2 || node.level === 4)}\n minHeadingLevel={2}\n // Show h4 headings in addition to the default h2 and h3 headings\n maxHeadingLevel={4}\n/>\n"})}),"\n",(0,s.jsx)(l.Z,{children:(0,s.jsx)(a.Z,{toc:u.filter((e=>2===e.level||4===e.level)),minHeadingLevel:2,maxHeadingLevel:4})}),"\n",(0,s.jsx)(n.h2,{id:"customizing-table-of-contents-generation",children:"Customizing table of contents generation"}),"\n",(0,s.jsxs)(n.p,{children:["The table-of-contents is generated by parsing the Markdown source with a ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"Remark plugin"}),". There are known edge-cases where it generates false-positives and false-negatives."]}),"\n",(0,s.jsxs)(n.p,{children:["Markdown headings within hideable areas will still show up in the TOC. For example, headings within ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/tabs",children:(0,s.jsx)(n.code,{children:"Tabs"})})," and ",(0,s.jsx)(n.a,{href:"/docs/markdown-features#details",children:(0,s.jsx)(n.code,{children:"details"})})," will not be excluded."]}),"\n",(0,s.jsx)(n.p,{children:"Non-Markdown headings will not show up in the TOC. This can be used to your advantage to tackle the aforementioned issue."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'<details>\n<summary>Some details containing headings</summary>\n<h2 id="#heading-id">I\'m a heading that will not show up in the TOC</h2>\n\nSome content...\n\n</details>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ability to ergonomically insert extra headings or ignore certain headings is a work-in-progress. If this feature is important to you, please report your use-case in ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/6201",children:"this issue"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Below is just some dummy content to have more table of contents items available on the current page."})}),"\n",(0,s.jsx)(n.h2,{id:"example-section-1",children:"Example Section 1"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-a",children:"Example Subsection 1 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-i",children:"Example subsubsection 1 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-ii",children:"Example subsubsection 1 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-a-iii",children:"Example subsubsection 1 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-b",children:"Example Subsection 1 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-i",children:"Example subsubsection 1 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-ii",children:"Example subsubsection 1 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-b-iii",children:"Example subsubsection 1 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-1-c",children:"Example Subsection 1 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-i",children:"Example subsubsection 1 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-ii",children:"Example subsubsection 1 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-1-c-iii",children:"Example subsubsection 1 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-2",children:"Example Section 2"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-a",children:"Example Subsection 2 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-i",children:"Example subsubsection 2 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-ii",children:"Example subsubsection 2 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-a-iii",children:"Example subsubsection 2 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-b",children:"Example Subsection 2 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-i",children:"Example subsubsection 2 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-ii",children:"Example subsubsection 2 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-b-iii",children:"Example subsubsection 2 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-2-c",children:"Example Subsection 2 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-i",children:"Example subsubsection 2 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-ii",children:"Example subsubsection 2 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-2-c-iii",children:"Example subsubsection 2 c III"}),"\n",(0,s.jsx)(n.h2,{id:"example-section-3",children:"Example Section 3"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-a",children:"Example Subsection 3 a"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-i",children:"Example subsubsection 3 a I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-ii",children:"Example subsubsection 3 a II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-a-iii",children:"Example subsubsection 3 a III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-b",children:"Example Subsection 3 b"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-i",children:"Example subsubsection 3 b I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-ii",children:"Example subsubsection 3 b II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-b-iii",children:"Example subsubsection 3 b III"}),"\n",(0,s.jsx)(n.h3,{id:"example-subsection-3-c",children:"Example Subsection 3 c"}),"\n",(0,s.jsx)(n.p,{children:"Lorem ipsum"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-i",children:"Example subsubsection 3 c I"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-ii",children:"Example subsubsection 3 c II"}),"\n",(0,s.jsx)(n.h4,{id:"example-subsubsection-3-c-iii",children:"Example subsubsection 3 c III"})]})}function m(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(b,{...e})}):b(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>o,a:()=>a});var s=i(27378);const t={},l=s.createContext(t);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/16f8f4fb.1bd564f8.js b/assets/js/16f8f4fb.1bd564f8.js new file mode 100644 index 0000000000..bb247f4045 --- /dev/null +++ b/assets/js/16f8f4fb.1bd564f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46481],{75490:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},13381:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=(t(27378),t(6698));function o({url:e}){return(0,n.jsx)("div",{style:{padding:10},children:(0,n.jsx)(r.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,n.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),r=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function i(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){a(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,n.jsxs)("div",{className:o.browserWindow,style:l(i({},a),{minHeight:s}),children:[(0,n.jsxs)("div",{className:o.browserWindowHeader,children:[(0,n.jsxs)("div",{className:o.buttons,children:[(0,n.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,r.Z)(o.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar}),(0,n.jsx)("span",{className:o.bar})]})})]}),(0,n.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},3818:(e,s,t)=>{t.d(s,{Z:()=>o});var n=t(24246),r=t(27378);function o({children:e="Boom!",message:s="Boom!\nSomething bad happened, but you can try again!",cause:t}){const[o,a]=(0,r.useState)(!1);if(o)throw new Error(s,{cause:t?new Error(t):void 0});return(0,n.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>a(!0),children:e})}},36345:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},69476:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=t(24246),r=t(71670);t(6698),t(13381),t(3818);const o={title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-03-29T00:00:00.000Z")},a=void 0,i={permalink:"/blog/releases/3.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx",source:"@site/blog/releases/3.2/index.mdx",title:"Docusaurus 3.2",description:"We are happy to announce Docusaurus 3.2.",date:"2024-03-29T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:3.475,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-03-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1711731993e3,lastUpdatedBy:"S\xe9bastien Lorber",nextItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"}},l={image:t(75490).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Faster builds",id:"faster-builds",level:3},{value:"Faster Dev Server",id:"faster-dev-server",level:3},{value:"MDX partials table-of-contents",id:"mdx-partials-table-of-contents",level:3},{value:"Blog improvements",id:"blog-improvements",level:3},{value:"Sitemap lastmod",id:"sitemap-lastmod",level:3},{value:"Other changes",id:"other-changes",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Details:o}=s;return o||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 3.2"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(36345).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,n.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,n.jsx)(s.h3,{id:"faster-builds",children:"Faster builds"}),"\n",(0,n.jsx)(s.p,{children:"We worked hard to reduce the time it takes to build a Docusaurus site in production mode."}),"\n",(0,n.jsx)(s.p,{children:"Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites."}),"\n",(0,n.jsxs)(s.p,{children:["Let's take an example. Our benchmark on the ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/react-native-website/pull/4072",children:"React Native website upgrading to v3.2"})," reports the following results:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)"}),"\n",(0,n.jsx)(s.li,{children:"\ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements."}),"\n",(0,n.jsxs)(s.p,{children:["Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"performance issue"})," for upcoming improvements."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"What is the difference between a cold build and an incremental build?"}),(0,n.jsxs)(s.p,{children:["A cold build is when the Docusaurus caches are empty, generally after running ",(0,n.jsx)(s.code,{children:"docusaurus clear"}),"."]}),(0,n.jsxs)(s.p,{children:["An incremental build happens when you run another time the ",(0,n.jsx)(s.code,{children:"docusaurus build"}),' command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it\'s based on ',(0,n.jsx)(s.a,{href:"https://webpack.js.org/guides/build-performance/#persistent-cache",children:"Webpack persistent caching"}),". To enable incremental builds on your CI server, you can persist the ",(0,n.jsx)(s.code,{children:"node_modules/.cache"})," folder across builds."]})]}),"\n",(0,n.jsx)(s.h3,{id:"faster-dev-server",children:"Faster Dev Server"}),"\n",(0,n.jsx)(s.p,{children:"We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files."}),"\n",(0,n.jsx)(s.p,{children:"The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25."}),"\n",(0,n.jsx)(s.p,{children:"We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result."}),"\n",(0,n.jsx)(s.h3,{id:"mdx-partials-table-of-contents",children:"MDX partials table-of-contents"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"#9684"}),", Docusaurus is now able to render headings coming from an imported partial into the table-of-contents."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus and MDX allows you to ",(0,n.jsx)(s.a,{href:"/docs/markdown-features/react#importing-markdown",children:"import one Markdown file into another"}),'. We usually call the imported Markdown file a "partial", and use the ',(0,n.jsx)(s.code,{children:"_"})," prefix so that this file does not lead to the creation of a new page."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="myDoc.mdx"',children:"# My Doc\n\n## Doc heading\n\nContent is imported from another MDX file:\n\nimport ImportedDoc from './\\_importedDoc.mdx';\n\n<ImportedDoc />\n"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-md",metastring:'title="_myPartial.mdx"',children:"## Partial heading\n\nSome paragraph\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Previously, the heading ",(0,n.jsx)(s.code,{children:"Partial heading"})," did not appear in the table-of-contents, but now it will!"]}),"\n",(0,n.jsx)(s.h3,{id:"blog-improvements",children:"Blog improvements"}),"\n",(0,n.jsx)(s.p,{children:"We improved the blog plugin with several new options to make it even more powerful and flexible:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9912",children:"#9912"}),": you can now display the last update time and author of a blog post, a feature the docs plugin already had."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9886",children:"#9886"}),": a new ",(0,n.jsx)(s.code,{children:"processBlogPosts"})," option allow you to filter/transform/sort blog posts."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9838",children:"#9838"}),": a new ",(0,n.jsx)(s.code,{children:"pageBasePath"})," option allows you to customize the blog pagination URL segment (",(0,n.jsx)(s.code,{children:"/blog/page/2"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"sitemap-lastmod",children:"Sitemap lastmod"}),"\n",(0,n.jsxs)(s.p,{children:["With ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9954",children:"#9954"}),", the sitemap plugin has a new ",(0,n.jsx)(s.code,{children:"lastmod"})," option that can now emit a ",(0,n.jsx)(s.code,{children:"<lastmod>"})," tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog ",(0,n.jsx)(s.code,{children:"last_update"})," front matter."]}),"\n",(0,n.jsxs)(s.p,{children:["We also made it possible to opt-out of emitting ",(0,n.jsx)(s.code,{children:"<priority>"})," and ",(0,n.jsx)(s.code,{children:"<frequency>"})," tags, which are generally ignored by crawlers (notably ",(0,n.jsx)(s.a,{href:"https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping",children:"Google"}),")."]}),"\n",(0,n.jsx)(s.p,{children:"We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"{\n lastmod: 'date',\n priority: null,\n changefreq: null,\n}\n"})}),"\n",(0,n.jsx)(s.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9687",children:"#9687"}),": new Vercel Analytics plugin"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9681",children:"#9681"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9442",children:"#9442"}),": ",(0,n.jsx)(s.code,{children:"docusaurus swizzle"})," and ",(0,n.jsx)(s.code,{children:"create-docusaurus"})," CLIs now ask users if they prefer to use TypeScript"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9928",children:"#9928"}),": new Icelandic translation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9931",children:"#9928"}),": new ",(0,n.jsx)(s.code,{children:"allContentLoaded"})," plugin lifecycle (experimental)"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Check the ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"/changelog/3.2.0",children:"3.2.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>a});var n=t(27378);const r={},o=n.createContext(r);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/170.3c1621b4.js b/assets/js/170.3c1621b4.js new file mode 100644 index 0000000000..77a6464adc --- /dev/null +++ b/assets/js/170.3c1621b4.js @@ -0,0 +1,26140 @@ +"use strict"; +exports.id = 170; +exports.ids = [170]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 76576: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 56170: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(16525); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88472); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(99854); +/* harmony import */ var _index_f58d48f9_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(30198); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42605); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76576); + + + + + + + + + + + + + + + + + + + + +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.e.sanitizeText(txt, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)()); +let conf = { + dividerMargin: 10, + padding: 5, + textHeight: 10, + curve: void 0 +}; +const addNamespaces = function(namespaces, g, _id, diagObj) { + const keys = Object.keys(namespaces); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info(namespaces); + keys.forEach(function(id) { + var _a, _b; + const vertex = namespaces[id]; + const shape = "rect"; + const node = { + shape, + id: vertex.id, + domId: vertex.domId, + labelText: sanitizeText(vertex.id), + labelStyle: "", + style: "fill: none; stroke: black", + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + addClasses(vertex.classes, g, _id, diagObj, vertex.id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + }); +}; +const addClasses = function(classes, g, _id, diagObj, parent) { + const keys = Object.keys(classes); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info(classes); + keys.filter((id) => classes[id].parent == parent).forEach(function(id) { + var _a, _b; + const vertex = classes[id]; + const cssClassStr = vertex.cssClasses.join(" "); + const styles2 = { labelStyle: "", style: "" }; + const vertexText = vertex.label ?? vertex.id; + const radius = 0; + const shape = "class_box"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + classData: vertex, + rx: radius, + ry: radius, + class: cssClassStr, + style: styles2.style, + id: vertex.id, + domId: vertex.domId, + tooltip: diagObj.db.getTooltip(vertex.id, parent) || "", + haveCallback: vertex.haveCallback, + link: vertex.link, + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + if (parent) { + g.setParent(vertex.id, parent); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + }); +}; +const addNotes = function(notes, g, startEdgeId, classes) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info(notes); + notes.forEach(function(note, i) { + var _a, _b; + const vertex = note; + const cssNoteStr = ""; + const styles2 = { labelStyle: "", style: "" }; + const vertexText = vertex.text; + const radius = 0; + const shape = "note"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + noteData: vertex, + rx: radius, + ry: radius, + class: cssNoteStr, + style: styles2.style, + id: vertex.id, + domId: vertex.id, + tooltip: "", + type: "note", + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + if (!vertex.class || !(vertex.class in classes)) { + return; + } + const edgeId = startEdgeId + i; + const edgeData = { + id: `edgeNote${edgeId}`, + //Set relationship style and line type + classes: "relation", + pattern: "dotted", + // Set link type for rendering + arrowhead: "none", + //Set edge extra labels + startLabelRight: "", + endLabelLeft: "", + //Set relation arrow types + arrowTypeStart: "none", + arrowTypeEnd: "none", + style: "fill:none", + labelStyle: "", + curve: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + g.setEdge(vertex.id, vertex.class, edgeData, edgeId); + }); +}; +const addRelations = function(relations, g) { + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart; + let cnt = 0; + relations.forEach(function(edge) { + var _a; + cnt++; + const edgeData = { + //Set relationship style and line type + classes: "relation", + pattern: edge.relation.lineType == 1 ? "dashed" : "solid", + id: "id" + cnt, + // Set link type for rendering + arrowhead: edge.type === "arrow_open" ? "none" : "normal", + //Set edge extra labels + startLabelRight: edge.relationTitle1 === "none" ? "" : edge.relationTitle1, + endLabelLeft: edge.relationTitle2 === "none" ? "" : edge.relationTitle2, + //Set relation arrow types + arrowTypeStart: getArrowMarker(edge.relation.type1), + arrowTypeEnd: getArrowMarker(edge.relation.type2), + style: "fill:none", + labelStyle: "", + curve: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.o)(conf2 == null ? void 0 : conf2.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info(edgeData, edge); + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.k)(edge.style); + edgeData.style = styles2.style; + edgeData.labelStyle = styles2.labelStyle; + } + edge.text = edge.title; + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if (((_a = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.htmlLabels) ?? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().htmlLabels) { + edgeData.labelType = "html"; + edgeData.label = '<span class="edgeLabel">' + edge.text + "</span>"; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + g.setEdge(edge.id1, edge.id2, edgeData, cnt); + }); +}; +const setConf = function(cnf) { + conf = { + ...conf, + ...cnf + }; +}; +const draw = async function(text, id, _version, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Drawing class - ", id); + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart ?? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().class; + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info("config:", conf2); + const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50; + const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: diagObj.db.getDirection(), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const namespaces = diagObj.db.getNamespaces(); + const classes = diagObj.db.getClasses(); + const relations = diagObj.db.getRelations(); + const notes = diagObj.db.getNotes(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.info(relations); + addNamespaces(namespaces, g, id, diagObj); + addClasses(classes, g, id, diagObj); + addRelations(relations, g); + addNotes(notes, g, relations.length + 1, classes); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_f58d48f9_js__WEBPACK_IMPORTED_MODULE_8__.r)( + element, + g, + ["aggregation", "extension", "composition", "dependency", "lollipop"], + "classDiagram", + id + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.u.insertTitle(svg, "classTitleText", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle()); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.p)(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth); + if (!(conf2 == null ? void 0 : conf2.htmlLabels)) { + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } +}; +function getArrowMarker(type) { + let marker; + switch (type) { + case 0: + marker = "aggregation"; + break; + case 1: + marker = "extension"; + break; + case 2: + marker = "composition"; + break; + case 3: + marker = "dependency"; + break; + case 4: + marker = "lollipop"; + break; + default: + marker = "none"; + } + return marker; +} +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_9__.p, + db: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_9__.d, + renderer, + styles: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_9__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_9__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 40577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51568); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(97312); + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 30198: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76576); +/* harmony import */ var _edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40577); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51568); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63294); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, parentCluster) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + await recursiveRender(elem, graph, diagramtype); +}; + + + +/***/ }), + +/***/ 16525: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 34], $V1 = [1, 35], $V2 = [1, 36], $V3 = [1, 37], $V4 = [1, 9], $V5 = [1, 8], $V6 = [1, 19], $V7 = [1, 20], $V8 = [1, 21], $V9 = [1, 40], $Va = [1, 41], $Vb = [1, 27], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 30], $Vj = [1, 31], $Vk = [1, 45], $Vl = [1, 42], $Vm = [1, 43], $Vn = [1, 44], $Vo = [1, 46], $Vp = [1, 24], $Vq = [1, 16, 24], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 64], $Vw = [1, 65], $Vx = [1, 66], $Vy = [1, 16, 24, 52], $Vz = [1, 77], $VA = [1, 16, 24, 27, 28, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 59, 68, 69, 70, 71, 72, 73, 74, 79, 81, 94, 96, 97, 98, 99], $VC = [1, 86], $VD = [28, 94, 96, 97, 98, 99], $VE = [28, 73, 74, 94, 96, 97, 98, 99], $VF = [28, 68, 69, 70, 71, 72, 94, 96, 97, 98, 99], $VG = [1, 99], $VH = [1, 16, 24, 50, 52, 55], $VI = [1, 16, 24, 36], $VJ = [8, 9, 10, 11, 19, 23, 44, 46, 48, 53, 57, 58, 60, 61, 63, 65, 75, 76, 78, 82, 94, 96, 97, 98, 99]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "statements": 6, "direction": 7, "direction_tb": 8, "direction_bt": 9, "direction_rl": 10, "direction_lr": 11, "graphConfig": 12, "openDirective": 13, "typeDirective": 14, "closeDirective": 15, "NEWLINE": 16, ":": 17, "argDirective": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "CLASS_DIAGRAM": 23, "EOF": 24, "statement": 25, "classLabel": 26, "SQS": 27, "STR": 28, "SQE": 29, "namespaceName": 30, "alphaNumToken": 31, "className": 32, "classLiteralName": 33, "GENERICTYPE": 34, "relationStatement": 35, "LABEL": 36, "namespaceStatement": 37, "classStatement": 38, "methodStatement": 39, "annotationStatement": 40, "clickStatement": 41, "cssClassStatement": 42, "noteStatement": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "namespaceIdentifier": 49, "STRUCT_START": 50, "classStatements": 51, "STRUCT_STOP": 52, "NAMESPACE": 53, "classIdentifier": 54, "STYLE_SEPARATOR": 55, "members": 56, "CLASS": 57, "ANNOTATION_START": 58, "ANNOTATION_END": 59, "MEMBER": 60, "SEPARATOR": 61, "relation": 62, "NOTE_FOR": 63, "noteText": 64, "NOTE": 65, "relationType": 66, "lineType": 67, "AGGREGATION": 68, "EXTENSION": 69, "COMPOSITION": 70, "DEPENDENCY": 71, "LOLLIPOP": 72, "LINE": 73, "DOTTED_LINE": 74, "CALLBACK": 75, "LINK": 76, "LINK_TARGET": 77, "CLICK": 78, "CALLBACK_NAME": 79, "CALLBACK_ARGS": 80, "HREF": 81, "CSSCLASS": 82, "commentToken": 83, "textToken": 84, "graphCodeTokens": 85, "textNoTagsToken": 86, "TAGSTART": 87, "TAGEND": 88, "==": 89, "--": 90, "PCT": 91, "DEFAULT": 92, "SPACE": 93, "MINUS": 94, "keywords": 95, "UNICODE_TEXT": 96, "NUM": 97, "ALPHA": 98, "BQUOTE_STR": 99, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "direction_tb", 9: "direction_bt", 10: "direction_rl", 11: "direction_lr", 16: "NEWLINE", 17: ":", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 23: "CLASS_DIAGRAM", 24: "EOF", 27: "SQS", 28: "STR", 29: "SQE", 34: "GENERICTYPE", 36: "LABEL", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 50: "STRUCT_START", 52: "STRUCT_STOP", 53: "NAMESPACE", 55: "STYLE_SEPARATOR", 57: "CLASS", 58: "ANNOTATION_START", 59: "ANNOTATION_END", 60: "MEMBER", 61: "SEPARATOR", 63: "NOTE_FOR", 65: "NOTE", 68: "AGGREGATION", 69: "EXTENSION", 70: "COMPOSITION", 71: "DEPENDENCY", 72: "LOLLIPOP", 73: "LINE", 74: "DOTTED_LINE", 75: "CALLBACK", 76: "LINK", 77: "LINK_TARGET", 78: "CLICK", 79: "CALLBACK_NAME", 80: "CALLBACK_ARGS", 81: "HREF", 82: "CSSCLASS", 85: "graphCodeTokens", 87: "TAGSTART", 88: "TAGEND", 89: "==", 90: "--", 91: "PCT", 92: "DEFAULT", 93: "SPACE", 94: "MINUS", 95: "keywords", 96: "UNICODE_TEXT", 97: "NUM", 98: "ALPHA", 99: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 2], [3, 1], [7, 1], [7, 1], [7, 1], [7, 1], [4, 1], [5, 4], [5, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [6, 1], [6, 2], [6, 3], [26, 3], [30, 1], [30, 2], [32, 1], [32, 1], [32, 2], [32, 2], [32, 2], [25, 1], [25, 2], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 2], [25, 2], [25, 1], [37, 4], [37, 5], [49, 2], [51, 1], [51, 2], [51, 3], [38, 1], [38, 3], [38, 4], [38, 6], [54, 2], [54, 3], [40, 4], [56, 1], [56, 2], [39, 1], [39, 2], [39, 1], [39, 1], [35, 3], [35, 4], [35, 4], [35, 5], [43, 3], [43, 2], [62, 3], [62, 2], [62, 2], [62, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [41, 3], [41, 4], [41, 3], [41, 4], [41, 4], [41, 5], [41, 3], [41, 4], [41, 4], [41, 5], [41, 4], [41, 5], [41, 5], [41, 6], [42, 3], [83, 1], [83, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [86, 1], [86, 1], [86, 1], [86, 1], [31, 1], [31, 1], [31, 1], [31, 1], [33, 1], [64, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setDirection("TB"); + break; + case 5: + yy.setDirection("BT"); + break; + case 6: + yy.setDirection("RL"); + break; + case 7: + yy.setDirection("LR"); + break; + case 11: + yy.parseDirective("%%{", "open_directive"); + break; + case 12: + yy.parseDirective($$[$0], "type_directive"); + break; + case 13: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 14: + yy.parseDirective("}%%", "close_directive", "class"); + break; + case 19: + this.$ = $$[$0 - 1]; + break; + case 20: + case 22: + case 23: + this.$ = $$[$0]; + break; + case 21: + case 24: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 25: + case 26: + this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; + break; + case 27: + yy.addRelation($$[$0]); + break; + case 28: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 40: + yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); + break; + case 41: + yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); + break; + case 42: + this.$ = $$[$0]; + yy.addNamespace($$[$0]); + break; + case 43: + this.$ = [$$[$0]]; + break; + case 44: + this.$ = [$$[$0 - 1]]; + break; + case 45: + $$[$0].unshift($$[$0 - 2]); + this.$ = $$[$0]; + break; + case 47: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 48: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 49: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 50: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 51: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 52: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 53: + this.$ = [$$[$0]]; + break; + case 54: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 55: + break; + case 56: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 57: + break; + case 58: + break; + case 59: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 60: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 61: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 62: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 63: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 64: + yy.addNote($$[$0]); + break; + case 65: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 66: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 67: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 68: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 69: + this.$ = yy.relationType.AGGREGATION; + break; + case 70: + this.$ = yy.relationType.EXTENSION; + break; + case 71: + this.$ = yy.relationType.COMPOSITION; + break; + case 72: + this.$ = yy.relationType.DEPENDENCY; + break; + case 73: + this.$ = yy.relationType.LOLLIPOP; + break; + case 74: + this.$ = yy.lineType.LINE; + break; + case 75: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 76: + case 82: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 77: + case 83: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 78: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 79: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 81: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 84: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 85: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 86: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 87: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 88: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 89: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 4], $$[$0 - 1]); + break; + case 90: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 3: 47, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [2, 3] }, { 1: [2, 8] }, { 14: 48, 20: [1, 49] }, o($Vp, [2, 16], { 16: [1, 50] }), { 16: [1, 51] }, { 20: [2, 11] }, o($Vq, [2, 27], { 36: [1, 52] }), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), { 45: [1, 53] }, { 47: [1, 54] }, o($Vq, [2, 39]), o($Vq, [2, 55], { 62: 55, 66: 58, 67: 59, 28: [1, 56], 36: [1, 57], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 50: [1, 67] }, o($Vy, [2, 46], { 50: [1, 69], 55: [1, 68] }), o($Vq, [2, 57]), o($Vq, [2, 58]), { 31: 70, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 71, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 72, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 73, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 74] }, { 31: 38, 32: 75, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: $Vz, 64: 76 }, o($Vq, [2, 4]), o($Vq, [2, 5]), o($Vq, [2, 6]), o($Vq, [2, 7]), o($VA, [2, 22], { 31: 38, 33: 39, 32: 78, 34: [1, 79], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), o($VA, [2, 23], { 34: [1, 80] }), { 30: 81, 31: 82, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 83, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VB, [2, 104]), o($VB, [2, 105]), o($VB, [2, 106]), o($VB, [2, 107]), o([1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 108]), { 1: [2, 2] }, { 15: 84, 17: [1, 85], 22: $VC }, o([17, 22], [2, 12]), o($Vp, [2, 17], { 25: 7, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 7: 18, 32: 22, 49: 23, 54: 24, 31: 38, 33: 39, 6: 87, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 44: $V6, 46: $V7, 48: $V8, 53: $V9, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), { 6: 88, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 28]), o($Vq, [2, 37]), o($Vq, [2, 38]), { 28: [1, 90], 31: 38, 32: 89, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 62: 91, 66: 58, 67: 59, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o($Vq, [2, 56]), { 67: 92, 73: $Vw, 74: $Vx }, o($VD, [2, 68], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VE, [2, 69]), o($VE, [2, 70]), o($VE, [2, 71]), o($VE, [2, 72]), o($VE, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), { 16: [1, 95], 38: 96, 51: 94, 54: 24, 57: $Va }, { 31: 97, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 56: 98, 60: $VG }, { 59: [1, 100] }, { 28: [1, 101] }, { 28: [1, 102] }, { 79: [1, 103], 81: [1, 104] }, { 31: 105, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 28: $Vz, 64: 106 }, o($Vq, [2, 64]), o($Vq, [2, 109]), o($VA, [2, 24]), o($VA, [2, 25]), o($VA, [2, 26]), { 50: [2, 42] }, { 30: 107, 31: 82, 50: [2, 20], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, o($VH, [2, 50], { 26: 108, 27: [1, 109] }), { 16: [1, 110] }, { 18: 111, 21: [1, 112] }, { 16: [2, 14] }, o($Vp, [2, 18]), { 24: [1, 113] }, o($VI, [2, 59]), { 31: 38, 32: 114, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 116], 31: 38, 32: 115, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 67], { 66: 117, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VD, [2, 66]), { 52: [1, 118] }, { 38: 96, 51: 119, 54: 24, 57: $Va }, { 16: [1, 120], 52: [2, 43] }, o($Vy, [2, 47], { 50: [1, 121] }), { 52: [1, 122] }, { 52: [2, 53], 56: 123, 60: $VG }, { 31: 38, 32: 124, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 76], { 28: [1, 125] }), o($Vq, [2, 78], { 28: [1, 127], 77: [1, 126] }), o($Vq, [2, 82], { 28: [1, 128], 80: [1, 129] }), { 28: [1, 130] }, o($Vq, [2, 90]), o($Vq, [2, 63]), { 50: [2, 21] }, o($VH, [2, 51]), { 28: [1, 131] }, o($VJ, [2, 9]), { 15: 132, 22: $VC }, { 22: [2, 13] }, { 1: [2, 15] }, o($VI, [2, 61]), o($VI, [2, 60]), { 31: 38, 32: 133, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 65]), o($Vq, [2, 40]), { 52: [1, 134] }, { 38: 96, 51: 135, 52: [2, 44], 54: 24, 57: $Va }, { 56: 136, 60: $VG }, o($Vy, [2, 48]), { 52: [2, 54] }, o($Vq, [2, 52]), o($Vq, [2, 77]), o($Vq, [2, 79]), o($Vq, [2, 80], { 77: [1, 137] }), o($Vq, [2, 83]), o($Vq, [2, 84], { 28: [1, 138] }), o($Vq, [2, 86], { 28: [1, 140], 77: [1, 139] }), { 29: [1, 141] }, { 16: [1, 142] }, o($VI, [2, 62]), o($Vq, [2, 41]), { 52: [2, 45] }, { 52: [1, 143] }, o($Vq, [2, 81]), o($Vq, [2, 85]), o($Vq, [2, 87]), o($Vq, [2, 88], { 77: [1, 144] }), o($VH, [2, 19]), o($VJ, [2, 10]), o($Vy, [2, 49]), o($Vq, [2, 89])], + defaultActions: { 2: [2, 1], 4: [2, 3], 5: [2, 8], 9: [2, 11], 47: [2, 2], 81: [2, 42], 86: [2, 14], 107: [2, 21], 112: [2, 13], 113: [2, 15], 123: [2, 54], 135: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + return 8; + case 2: + return 9; + case 3: + return 10; + case 4: + return 11; + case 5: + this.begin("type_directive"); + return 20; + case 6: + this.popState(); + this.begin("arg_directive"); + return 17; + case 7: + this.popState(); + this.popState(); + return 22; + case 8: + return 21; + case 9: + break; + case 10: + break; + case 11: + this.begin("acc_title"); + return 44; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 46; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + return 16; + case 19: + break; + case 20: + return 23; + case 21: + return 23; + case 22: + return "EDGE_STATE"; + case 23: + this.begin("callback_name"); + break; + case 24: + this.popState(); + break; + case 25: + this.popState(); + this.begin("callback_args"); + break; + case 26: + return 79; + case 27: + this.popState(); + break; + case 28: + return 80; + case 29: + this.popState(); + break; + case 30: + return "STR"; + case 31: + this.begin("string"); + break; + case 32: + this.begin("namespace"); + return 53; + case 33: + this.popState(); + return 16; + case 34: + break; + case 35: + this.begin("namespace-body"); + return 50; + case 36: + this.popState(); + return 52; + case 37: + return "EOF_IN_STRUCT"; + case 38: + return 16; + case 39: + break; + case 40: + return "EDGE_STATE"; + case 41: + this.begin("class"); + return 57; + case 42: + this.popState(); + return 16; + case 43: + break; + case 44: + this.popState(); + this.popState(); + return 52; + case 45: + this.begin("class-body"); + return 50; + case 46: + this.popState(); + return 52; + case 47: + return "EOF_IN_STRUCT"; + case 48: + return "EDGE_STATE"; + case 49: + return "OPEN_IN_STRUCT"; + case 50: + break; + case 51: + return "MEMBER"; + case 52: + return 82; + case 53: + return 75; + case 54: + return 76; + case 55: + return 78; + case 56: + return 63; + case 57: + return 65; + case 58: + return 58; + case 59: + return 59; + case 60: + return 81; + case 61: + this.popState(); + break; + case 62: + return "GENERICTYPE"; + case 63: + this.begin("generic"); + break; + case 64: + this.popState(); + break; + case 65: + return "BQUOTE_STR"; + case 66: + this.begin("bqstring"); + break; + case 67: + return 77; + case 68: + return 77; + case 69: + return 77; + case 70: + return 77; + case 71: + return 69; + case 72: + return 69; + case 73: + return 71; + case 74: + return 71; + case 75: + return 70; + case 76: + return 68; + case 77: + return 72; + case 78: + return 73; + case 79: + return 74; + case 80: + return 36; + case 81: + return 55; + case 82: + return 94; + case 83: + return "DOT"; + case 84: + return "PLUS"; + case 85: + return 91; + case 86: + return "EQUALS"; + case 87: + return "EQUALS"; + case 88: + return 98; + case 89: + return 27; + case 90: + return 29; + case 91: + return "PUNCTUATION"; + case 92: + return 97; + case 93: + return 96; + case 94: + return 93; + case 95: + return 24; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/], + conditions: { "namespace-body": { "rules": [31, 36, 37, 38, 39, 40, 41, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "namespace": { "rules": [31, 32, 33, 34, 35, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "class-body": { "rules": [31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "class": { "rules": [31, 42, 43, 44, 45, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_descr_multiline": { "rules": [16, 17, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_descr": { "rules": [14, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_title": { "rules": [12, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "arg_directive": { "rules": [7, 8, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "type_directive": { "rules": [6, 7, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "open_directive": { "rules": [5, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "callback_args": { "rules": [27, 28, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "callback_name": { "rules": [24, 25, 26, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "href": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "struct": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "generic": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "bqstring": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "string": { "rules": [29, 30, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 31, 32, 41, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let namespaces = {}; +let namespaceCounter = 0; +let functions = []; +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type); +}; +const splitClassNameAndType = function(id) { + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(id, label) { + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(id) { + const classId = splitClassNameAndType(id); + if (classes[classId.className] !== void 0) { + return; + } + classes[classId.className] = { + id: classId.className, + type: classId.type, + label: classId.className, + cssClasses: [], + methods: [], + members: [], + annotations: [], + domId: MERMAID_DOM_ID_PREFIX + classId.className + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(id) { + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + namespaces = {}; + namespaceCounter = 0; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle1.trim(), + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)() + ); + relation.relationTitle2 = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle2.trim(), + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)() + ); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(sanitizeText(memberString)); + } else if (memberString) { + theClass.members.push(sanitizeText(memberString)); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id, namespace) { + if (namespace) { + return namespaces[namespace].classes[id].tooltip; + } + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(domId, functionName, functionArgs) { + const config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const addNamespace = function(id) { + if (namespaces[id] !== void 0) { + return; + } + namespaces[id] = { + id, + classes: {}, + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter + }; + namespaceCounter++; +}; +const getNamespace = function(name) { + return namespaces[name]; +}; +const getNamespaces = function() { + return namespaces; +}; +const addClassesToNamespace = function(id, classNames) { + if (namespaces[id] !== void 0) { + classNames.map((className) => { + classes[className].parent = id; + namespaces[id].classes[className] = classes[className]; + }); + } +}; +const db = { + parseDirective, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.t, + setClassLabel, + addNamespace, + addClassesToNamespace, + getNamespace, + getNamespaces +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder}; + fill: ${options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/17896441.47b2ad02.js b/assets/js/17896441.47b2ad02.js new file mode 100644 index 0000000000..4f7d108437 --- /dev/null +++ b/assets/js/17896441.47b2ad02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27918],{35434:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246);r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function i(e){return(0,n.jsx)("svg",c(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,r)=>{r.d(t,{Z:()=>le});var n=r(24246),o=r(27378);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function l(e){const{mdxAdmonitionTitle:t,rest:r}=function(e){const t=o.Children.toArray(e),r=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==r));return{mdxAdmonitionTitle:null==r?void 0:r.props.children,rest:c.length>0?(0,n.jsx)(n.Fragment,{children:c}):null}}(e.children);var l;const s=null!==(l=e.title)&&void 0!==l?l:t;return i(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){c(e,t,r[t])}))}return e}({},e,s&&{title:s}),{children:r})}var s=r(40624),a=r(36712),u=r(89583);const b={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function f({type:e,className:t,children:r}){return(0,n.jsx)("div",{className:(0,s.Z)(u.k.common.admonition,u.k.common.admonitionType(e),b.admonition,t),children:r})}function p({icon:e,title:t}){return(0,n.jsxs)("div",{className:b.admonitionHeading,children:[(0,n.jsx)("span",{className:b.admonitionIcon,children:e}),t]})}function d({children:e}){return e?(0,n.jsx)("div",{className:b.admonitionContent,children:e}):null}function O(e){const{type:t,icon:r,title:o,children:c,className:i}=e;return(0,n.jsxs)(f,{type:t,className:i,children:[(0,n.jsx)(p,{title:o,icon:r}),(0,n.jsx)(d,{children:c})]})}function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){return(0,n.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const v={icon:(0,n.jsx)(m,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function w(e){return(0,n.jsx)(O,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},v,e),{className:(0,s.Z)("alert alert--secondary",e.className),children:e.children}))}function P(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function k(e){return(0,n.jsx)("svg",x(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){P(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function S(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const N={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function E(e){return(0,n.jsx)(O,D(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){S(e,t,r[t])}))}return e}({},N,e),{className:(0,s.Z)("alert alert--success",e.className),children:e.children}))}var C=r(35434);function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const _={icon:(0,n.jsx)(C.Z,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function B(e){return(0,n.jsx)(O,L(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}({},_,e),{className:(0,s.Z)("alert alert--info",e.className),children:e.children}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function H(e){return(0,n.jsx)("svg",I(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const R={icon:(0,n.jsx)(H,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function U(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function F(e){return(0,n.jsx)("svg",z(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){U(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function V(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function $(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const W={icon:(0,n.jsx)(F,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const Q={icon:(0,n.jsx)(H,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function X(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){X(e,t,r[t])}))}return e}const Y={note:w,tip:E,info:B,warning:function(e){return(0,n.jsx)(O,A(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){M(e,t,r[t])}))}return e}({},R,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,n.jsx)(O,$(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){V(e,t,r[t])}))}return e}({},W,e),{className:(0,s.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,n.jsx)(w,J({title:"secondary"},e)),important:e=>(0,n.jsx)(B,J({title:"important"},e)),success:e=>(0,n.jsx)(E,J({title:"success"},e)),caution:function(e){return(0,n.jsx)(O,G(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},Q,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))}},ee=J({},Y,K);var te=r(52615);function re(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ne,oe;const ce=(ne=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){re(e,t,r[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,n.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,n.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,n.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(ne,Object.getOwnPropertyDescriptors(oe)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(oe)).forEach((function(e){Object.defineProperty(ne,e,Object.getOwnPropertyDescriptor(oe,e))})),ne);function ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function le(e){const t=l(e),r=(o=t.type,ce[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ce.info));var o;return(0,n.jsx)(r,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ie(e,t,r[t])}))}return e}({},t))}},5254:(e,t,r)=>{r.d(t,{Z:()=>v});var n=r(24246),o=r(27378),c=r(40624),i=r(80474),l=r(29088),s=r(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function d(e,t){return!!e&&(e===t||d(e.parentElement,t))}function O(e){var{summary:t,children:r}=e,O=f(e,["summary","children"]);(0,i.Z)().collectAnchor(O.id);const y=(0,l.Z)(),j=(0,o.useRef)(null),{collapsed:m,setCollapsed:g}=(0,s.u)({initialState:!O.open}),[h,v]=(0,o.useState)(O.open),w=o.isValidElement(t)?t:(0,n.jsx)("summary",{children:null!=t?t:"Details"});return(0,n.jsxs)("details",b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},O),{ref:j,open:h,"data-collapsed":m,className:(0,c.Z)(a.details,y&&a.isBrowser,O.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&d(t,j.current)&&(e.preventDefault(),m?(g(!1),v(!0)):g(!0))},children:[w,(0,n.jsx)(s.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{g(e),v(!e)},children:(0,n.jsx)("div",{className:a.collapsibleContent,children:r})})]}))}const y={details:"details_Cn_P"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},m.apply(this,arguments)}function g(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const h="alert alert--info";function v(e){var t=m({},e);return(0,n.jsx)(O,g(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}({},t),{className:(0,c.Z)(h,y.details,t.className)}))}},54120:(e,t,r)=>{r.d(t,{Z:()=>v});var n=r(24246),o=(r(27378),r(40624)),c=r(89583),i=r(41876),l=r(39779),s=r(41428),a=r(36712),u=r(66448);function b(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function p(e){return(0,n.jsx)("svg",f(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){b(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,n.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const d={breadcrumbHomeIcon:"breadcrumbHomeIcon_uaSn"};function O(){const e=(0,u.Z)("/");return(0,n.jsx)("li",{className:"breadcrumbs__item",children:(0,n.jsx)(s.Z,{"aria-label":(0,a.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,n.jsx)(p,{className:d.breadcrumbHomeIcon})})})}const y={breadcrumbsContainer:"breadcrumbsContainer_Wvrh"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function g({children:e,href:t,isLast:r}){const o="breadcrumbs__link";return r?(0,n.jsx)("span",{className:o,itemProp:"name",children:e}):t?(0,n.jsx)(s.Z,{className:o,href:t,itemProp:"item",children:(0,n.jsx)("span",{itemProp:"name",children:e})}):(0,n.jsx)("span",{className:o,children:e})}function h({children:e,active:t,index:r,addMicrodata:c}){return(0,n.jsxs)("li",m(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}({},c&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"}),{className:(0,o.Z)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[e,(0,n.jsx)("meta",{itemProp:"position",content:String(r+1)})]}))}function v(){const e=(0,i.s1)(),t=(0,l.Ns)();return e?(0,n.jsx)("nav",{className:(0,o.Z)(c.k.docs.docBreadcrumbs,y.breadcrumbsContainer),"aria-label":(0,a.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,n.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,n.jsx)(O,{}),e.map(((t,r)=>{const o=r===e.length-1,c="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,n.jsx)(h,{active:o,index:r,addMicrodata:!!c,children:(0,n.jsx)(g,{href:c,isLast:o,children:t.label})},r)}))]})}):null}},64516:(e,t,r)=>{r.r(t),r.d(t,{default:()=>_});var n=r(24246),o=r(27378),c=r(44008),i=r(51114);const l=o.createContext(null);function s({children:e,content:t}){const r=function(e){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(t);return(0,n.jsx)(l.Provider,{value:r,children:e})}function a(){const e=(0,o.useContext)(l);if(null===e)throw new i.i6("DocProvider");return e}function u(){const{metadata:e,frontMatter:t,assets:r}=a();var o;return(0,n.jsx)(c.d,{title:e.title,description:e.description,keywords:t.keywords,image:null!==(o=r.image)&&void 0!==o?o:t.image})}var b=r(40624),f=r(60029),p=r(76068);function d(){const{metadata:e}=a();return(0,n.jsx)(p.Z,{previous:e.previous,next:e.next})}var O=r(55765),y=r(14848),j=r(89583),m=r(62804),g=r(71628);function h(){const{metadata:e}=a(),{editUrl:t,lastUpdatedAt:r,lastUpdatedBy:o,tags:c}=e,i=c.length>0,l=!!(t||r||o);return i||l?(0,n.jsxs)("footer",{className:(0,b.Z)(j.k.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,n.jsx)("div",{className:(0,b.Z)("row margin-top--sm",j.k.docs.docFooterTagsRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(m.Z,{tags:c})})}),l&&(0,n.jsx)(g.Z,{className:(0,b.Z)("margin-top--sm",j.k.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:r,lastUpdatedBy:o})]}):null}var v=r(16652);const w={tocMobile:"tocMobile_NSfz"};function P(){const{toc:e,frontMatter:t}=a();return(0,n.jsx)(v.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,b.Z)(j.k.docs.docTocMobile,w.tocMobile)})}var x=r(78093);function k(){const{toc:e,frontMatter:t}=a();return(0,n.jsx)(x.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:j.k.docs.docTocDesktop})}var S=r(52615),D=r(23387);function N({children:e}){const t=function(){const{metadata:e,frontMatter:t,contentTitle:r}=a();return t.hide_title||void 0!==r?null:e.title}();return(0,n.jsxs)("div",{className:(0,b.Z)(j.k.docs.docMarkdown,"markdown"),children:[t&&(0,n.jsx)("header",{children:(0,n.jsx)(S.Z,{as:"h1",children:t})}),(0,n.jsx)(D.Z,{children:e})]})}var E=r(54120),C=r(99272);const Z={docItemContainer:"docItemContainer_RhpI",docItemCol:"docItemCol_n6xZ"};function L({children:e}){const t=function(){const{frontMatter:e,toc:t}=a(),r=(0,f.i)(),o=e.hide_table_of_contents,c=!o&&t.length>0;return{hidden:o,mobile:c?(0,n.jsx)(P,{}):void 0,desktop:!c||"desktop"!==r&&"ssr"!==r?void 0:(0,n.jsx)(k,{})}}(),{metadata:{unlisted:r}}=a();return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsxs)("div",{className:(0,b.Z)("col",!t.hidden&&Z.docItemCol),children:[r&&(0,n.jsx)(C.Z,{}),(0,n.jsx)(O.Z,{}),(0,n.jsxs)("div",{className:Z.docItemContainer,children:[(0,n.jsxs)("article",{children:[(0,n.jsx)(E.Z,{}),(0,n.jsx)(y.Z,{}),t.mobile,(0,n.jsx)(N,{children:e}),(0,n.jsx)(h,{})]}),(0,n.jsx)(d,{})]})]}),t.desktop&&(0,n.jsx)("div",{className:"col col--3",children:t.desktop})]})}function _(e){const t=`docs-doc-id-${e.content.metadata.id}`,r=e.content;return(0,n.jsx)(s,{content:e.content,children:(0,n.jsxs)(c.FG,{className:t,children:[(0,n.jsx)(u,{}),(0,n.jsx)(L,{children:(0,n.jsx)(r,{})})]})})}},76068:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(24246),o=(r(27378),r(36712)),c=r(6649);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){i(e,t,r[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function a(e){const{previous:t,next:r}=e;return(0,n.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,o.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,n.jsx)(c.Z,s(l({},t),{subLabel:(0,n.jsx)(o.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),r&&(0,n.jsx)(c.Z,s(l({},r),{subLabel:(0,n.jsx)(o.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},14848:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(89583),l=r(66265);function s({className:e}){const t=(0,l.E)();return t.badge?(0,n.jsx)("span",{className:(0,o.Z)(e,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,n.jsx)(c.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},55765:(e,t,r)=>{r.d(t,{Z:()=>j});var n=r(24246),o=(r(27378),r(40624)),c=r(4423),i=r(41428),l=r(36712),s=r(92053),a=r(89583),u=r(32054),b=r(66265);function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const p={unreleased:function({siteTitle:e,versionMetadata:t}){return(0,n.jsx)(l.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,n.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:t}){return(0,n.jsx)(l.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,n.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function d(e){const t=p[e.versionMetadata.banner];return(0,n.jsx)(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){f(e,t,r[t])}))}return e}({},e))}function O({versionLabel:e,to:t,onClick:r}){return(0,n.jsx)(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,n.jsx)("b",{children:(0,n.jsx)(i.Z,{to:t,onClick:r,children:(0,n.jsx)(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function y({className:e,versionMetadata:t}){const{siteConfig:{title:r}}=(0,c.Z)(),{pluginId:i}=(0,s.gA)({failfast:!0}),{savePreferredVersionName:l}=(0,u.J)(i),{latestDocSuggestion:b,latestVersionSuggestion:f}=(0,s.Jo)(i),p=null!=b?b:(y=f).docs.find((e=>e.id===y.mainDocId));var y;return(0,n.jsxs)("div",{className:(0,o.Z)(e,a.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,n.jsx)("div",{children:(0,n.jsx)(d,{siteTitle:r,versionMetadata:t})}),(0,n.jsx)("div",{className:"margin-top--md",children:(0,n.jsx)(O,{versionLabel:f.label,to:p.path,onClick:()=>l(f.name)})})]})}function j({className:e}){const t=(0,b.E)();return t.banner?(0,n.jsx)(y,{className:e,versionMetadata:t}):null}},71628:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(89583),l=r(41428);const s={iconEdit:"iconEdit_IMw_"};function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function b(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f(e){var{className:t}=e,r=b(e,["className"]);return(0,n.jsx)("svg",u(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(s.iconEdit,t),"aria-hidden":"true"},r),{children:(0,n.jsx)("g",{children:(0,n.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function p({editUrl:e}){return(0,n.jsxs)(l.Z,{to:e,className:i.k.common.editThisPage,children:[(0,n.jsx)(f,{}),(0,n.jsx)(c.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var d=r(54461);function O({lastUpdatedAt:e}){const t=new Date(e),r=(0,d.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,n.jsx)("b",{children:(0,n.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function y({lastUpdatedBy:e}){return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,n.jsx)("b",{children:e})},children:" by {user}"})}function j({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,n.jsxs)("span",{className:i.k.common.lastUpdated,children:[(0,n.jsx)(c.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,n.jsx)(O,{lastUpdatedAt:e}):"",byUser:t?(0,n.jsx)(y,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_OHCJ"};function g({className:e,editUrl:t,lastUpdatedAt:r,lastUpdatedBy:c}){return(0,n.jsxs)("div",{className:(0,o.Z)("row",e),children:[(0,n.jsx)("div",{className:"col",children:t&&(0,n.jsx)(p,{editUrl:t})}),(0,n.jsx)("div",{className:(0,o.Z)("col",m.lastUpdated),children:(r||c)&&(0,n.jsx)(j,{lastUpdatedAt:r,lastUpdatedBy:c})})]})}},23387:(e,t,r)=>{r.d(t,{Z:()=>ne});var n=r(24246),o=r(27378),c=r(71670),i=r(97134),l=r(38112);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){return(0,n.jsx)("code",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){s(e,t,r[t])}))}return e}({},e))}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}function f(e){return function(e){return void 0!==e.children&&o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,n.jsx)(a,b({},e)):(0,n.jsx)(l.Z,b({},e))}var p=r(41428);function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var O=r(5254);function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){const t=o.Children.toArray(e.children),r=t.find((e=>o.isValidElement(e)&&"summary"===e.type)),c=(0,n.jsx)(n.Fragment,{children:t.filter((e=>e!==r))});return(0,n.jsx)(O.Z,j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({},e),{summary:r,children:c}))}var g=r(52615);function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function v(e){return(0,n.jsx)(g.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){h(e,t,r[t])}))}return e}({},e))}var w=r(40624);const P={containsTaskList:"containsTaskList_k9gM"};function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e){if(void 0!==e)return(0,w.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&P.containsTaskList)}var D=r(80474);function N(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const E={img:"img_vXGZ"};function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}var L=r(77773),_=r(88941),B=r(30691),T=r(73919),I=r(78844),H=r(99854);function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const R="docusaurus-mermaid-container";function U(){const{colorMode:e}=(0,I.I)(),t=(0,T.L)().mermaid,r=t.theme[e],{options:n}=t;return(0,o.useMemo)((()=>A(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){M(e,t,r[t])}))}return e}({startOnLoad:!1},n),{theme:r})),[r,n])}function z({text:e,config:t}){const[r,n]=(0,o.useState)(null),c=(0,o.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,i=U(),l=null!=t?t:i;return(0,o.useEffect)((()=>{(async function({id:e,text:t,config:r}){H.N.mermaidAPI.initialize(r);try{return await H.N.render(e,t)}catch(o){var n;throw null===(n=document.querySelector(`#d${e}`))||void 0===n||n.remove(),o}})({id:c,text:e,config:l}).then(n).catch((e=>{n((()=>{throw e}))}))}),[c,e,l]),r}const F={container:"container_RUsj"};function V(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function $(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){V(e,t,r[t])}))}return e}function W({renderResult:e}){const t=(0,o.useRef)(null);return(0,o.useEffect)((()=>{var r;const n=t.current;null===(r=e.bindFunctions)||void 0===r||r.call(e,n)}),[e]),(0,n.jsx)("div",{ref:t,className:`${R} ${F.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function q({value:e}){const t=z({text:e});return null===t?null:(0,n.jsx)(W,{renderResult:t})}function G(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){G(e,t,r[t])}))}return e}const X={Head:i.Z,details:m,Details:m,code:f,a:function(e){return(0,n.jsx)(p.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){d(e,t,r[t])}))}return e}({},e))},pre:function(e){return(0,n.jsx)(n.Fragment,{children:e.children})},ul:function(e){return(0,n.jsx)("ul",k(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({},e),{className:S(e.className)}))},li:function(e){return(0,D.Z)().collectAnchor(e.id),(0,n.jsx)("li",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){N(e,t,r[t])}))}return e}({},e))},img:function(e){return(0,n.jsx)("img",Z(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}({decoding:"async",loading:"lazy"},e),{className:(t=e.className,(0,w.Z)(t,E.img))}));var t},h1:e=>(0,n.jsx)(v,Q({as:"h1"},e)),h2:e=>(0,n.jsx)(v,Q({as:"h2"},e)),h3:e=>(0,n.jsx)(v,Q({as:"h3"},e)),h4:e=>(0,n.jsx)(v,Q({as:"h4"},e)),h5:e=>(0,n.jsx)(v,Q({as:"h5"},e)),h6:e=>(0,n.jsx)(v,Q({as:"h6"},e)),admonition:L.Z,mermaid:function(e){return(0,n.jsx)(_.Z,{fallback:e=>(0,n.jsx)(B.Ac,$({},e)),children:(0,n.jsx)(q,$({},e))})}};const J="tweetQuote_h8Rz",Y="avatarImg_b51M";function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee=(te=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){K(e,t,r[t])}))}return e}({},X),re=null!=(re={Code:f,Highlight:function({children:e,color:t}){return(0,n.jsx)("span",{style:{backgroundColor:t,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},TweetQuote:function({url:e,handle:t,name:r,job:o,children:c}){const i=`https://unavatar.io/twitter/${t}`,l=`https://twitter.com/${t}`;return(0,n.jsxs)("figure",{className:J,children:[(0,n.jsx)("blockquote",{children:(0,n.jsx)(p.Z,{to:e,children:c})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(p.Z,{to:l,rel:"nofollow",children:(0,n.jsxs)("div",{className:"avatar",children:[(0,n.jsx)("img",{alt:r,className:(0,w.Z)("avatar__photo",Y),src:i}),(0,n.jsxs)("div",{className:(0,w.Z)("avatar__intro"),children:[(0,n.jsx)("strong",{className:"avatar__name",children:(0,n.jsx)("cite",{children:r})}),(0,n.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:o})]})]})})})]})}})?re:{},Object.getOwnPropertyDescriptors?Object.defineProperties(te,Object.getOwnPropertyDescriptors(re)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(re)).forEach((function(e){Object.defineProperty(te,e,Object.getOwnPropertyDescriptor(re,e))})),te);var te,re;function ne({children:e}){return(0,n.jsx)(c.Z,{components:ee,children:e})}},6649:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);function i(e){const{permalink:t,title:r,subLabel:i,isNext:l}=e;return(0,n.jsxs)(c.Z,{className:(0,o.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[i&&(0,n.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,n.jsx)("div",{className:"pagination-nav__label",children:r})]})}},78093:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(4646);const i={tableOfContents:"tableOfContents_RLlU",docItemContainer:"docItemContainer_oucX"};function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){l(e,t,r[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}const b="table-of-contents__link toc-highlight",f="table-of-contents__link--active";function p(e){var{className:t}=e,r=u(e,["className"]);return(0,n.jsx)("div",{className:(0,o.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,n.jsx)(c.Z,a(s({},r),{linkClassName:b,linkActiveClassName:f}))})}},16652:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(24246),o=(r(27378),r(40624)),c=r(14929),i=r(4646),l=r(36712);const s={tocCollapsibleButton:"tocCollapsibleButton_IbtT",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_Nor3"};function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function b(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f(e){var{collapsed:t}=e,r=b(e,["collapsed"]);return(0,n.jsx)("button",u(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}({type:"button"},r),{className:(0,o.Z)("clean-btn",s.tocCollapsibleButton,!t&&s.tocCollapsibleButtonExpanded,r.className),children:(0,n.jsx)(l.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}))}const p={tocCollapsible:"tocCollapsible_BEWm",tocCollapsibleContent:"tocCollapsibleContent_FG8F",tocCollapsibleExpanded:"tocCollapsibleExpanded_FzA_"};function d({toc:e,className:t,minHeadingLevel:r,maxHeadingLevel:l}){const{collapsed:s,toggleCollapsed:a}=(0,c.u)({initialState:!0});return(0,n.jsxs)("div",{className:(0,o.Z)(p.tocCollapsible,!s&&p.tocCollapsibleExpanded,t),children:[(0,n.jsx)(f,{collapsed:s,onClick:a}),(0,n.jsx)(c.z,{lazy:!0,className:p.tocCollapsibleContent,collapsed:s,children:(0,n.jsx)(i.Z,{toc:e,minHeadingLevel:r,maxHeadingLevel:l})})]})}},4646:(e,t,r)=>{r.d(t,{Z:()=>v});var n=r(24246),o=r(27378),c=r(73919);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){i(e,t,r[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function a(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function u(e){const t=e.map((e=>s(l({},e),{parentIndex:-1,children:[]}))),r=Array(7).fill(-1);t.forEach(((e,t)=>{const n=r.slice(2,e.level);e.parentIndex=Math.max(...n),r[e.level]=t}));const n=[];return t.forEach((e=>{const{parentIndex:r}=e,o=a(e,["parentIndex"]);r>=0?t[r].children.push(o):n.push(o)})),n}function b({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return e.flatMap((e=>{const n=b({toc:e.children,minHeadingLevel:t,maxHeadingLevel:r});return function(e){return e.level>=t&&e.level<=r}(e)?[s(l({},e),{children:n})]:n}))}function f(e){const t=e.getBoundingClientRect();return t.top===t.bottom?f(e.parentNode):t}function p(e,{anchorTopOffset:t}){const r=e.find((e=>f(e).top>=t));if(r){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(f(r))?r:null!==(n=e[e.indexOf(r)-1])&&void 0!==n?n:null;var n}var o;return null!==(o=e[e.length-1])&&void 0!==o?o:null}function d(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:t}}=(0,c.L)();return(0,o.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function O(e){const t=(0,o.useRef)(void 0),r=d();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:n,linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(n),l=function({minHeadingLevel:e,maxHeadingLevel:t}){const r=[];for(let n=e;n<=t;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:c,maxHeadingLevel:i}),s=p(l,{anchorTopOffset:r.current}),a=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,r){r?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===a)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,r])}var y=r(41428);function j({toc:e,className:t,linkClassName:r,isChild:o}){return e.length?(0,n.jsx)("ul",{className:o?void 0:t,children:e.map((e=>(0,n.jsxs)("li",{children:[(0,n.jsx)(y.Z,{to:`#${e.id}`,className:null!=r?r:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,n.jsx)(j,{isChild:!0,toc:e.children,className:t,linkClassName:r})]},e.id)))}):null}const m=o.memo(j);function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v(e){var{toc:t,className:r="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:s,maxHeadingLevel:a}=e,f=h(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const p=(0,c.L)(),d=null!=s?s:p.tableOfContents.minHeadingLevel,y=null!=a?a:p.tableOfContents.maxHeadingLevel,j=function({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return(0,o.useMemo)((()=>b({toc:u(e),minHeadingLevel:t,maxHeadingLevel:r})),[e,t,r])}({toc:t,minHeadingLevel:d,maxHeadingLevel:y});return O((0,o.useMemo)((()=>{if(i&&l)return{linkClassName:i,linkActiveClassName:l,minHeadingLevel:d,maxHeadingLevel:y}}),[i,l,d,y])),(0,n.jsx)(m,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({toc:j,className:r,linkClassName:i},f))}},52977:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);const i={tag:"tag_Nd8t",tagRegular:"tagRegular_TiLs",tagWithCount:"tagWithCount_AQg7"};function l({permalink:e,label:t,count:r}){return(0,n.jsxs)(c.Z,{href:e,className:(0,o.Z)(i.tag,r?i.tagWithCount:i.tagRegular),children:[t,r&&(0,n.jsx)("span",{children:r})]})}},62804:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(52977);const l={tags:"tags_rTaS",tag:"tag_l5va"};function s({tags:e}){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("b",{children:(0,n.jsx)(c.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,n.jsx)("ul",{className:(0,o.Z)(l.tags,"padding--none","margin-left--sm"),children:e.map((({label:e,permalink:t})=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,{label:e,permalink:t})},t)))})]})}},99272:(e,t,r)=>{r.d(t,{Z:()=>O});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(97134);function l(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function s(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function a(){return(0,n.jsx)(i.Z,{children:(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var u=r(89583),b=r(77773);function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){f(e,t,r[t])}))}return e}function d({className:e}){return(0,n.jsx)(b.Z,{type:"caution",title:(0,n.jsx)(l,{}),className:(0,o.Z)(e,u.k.common.unlistedBanner),children:(0,n.jsx)(s,{})})}function O(e){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a,{}),(0,n.jsx)(d,p({},e))]})}},54461:(e,t,r)=>{r.d(t,{P:()=>c});var n=r(4423);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e={}){const{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({calendar:r},e))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},38112:(e,t,r)=>{r.d(t,{Z:()=>Ie});var n={};r.r(n),r.d(n,{ButtonExample:()=>_});var o=r(24246),c=r(27378),i=r(40624),l=r(29088),s=r(32711),a=r(36712),u=r(4423),b=r(94544),f=r(30691),p=r(78844),d=r(73919);function O(){const{prism:e}=(0,d.L)(),{colorMode:t}=(0,p.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var y=r(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){m(e,t,r[t])}))}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function P(){return(0,o.jsx)("div",{children:"Loading..."})}function x(){return(0,o.jsx)(b.Z,{fallback:(0,o.jsx)(P,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(y.Z,{fallback:e=>(0,o.jsx)(f.Ac,g({},e)),children:(0,o.jsx)(s.i5,{})}),(0,o.jsx)(s.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(x,{})})]})}function S(){const e=(0,l.Z)();return(0,o.jsx)(s.uz,{className:j.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function E(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,a=O();var b;const f=null!==(b=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==b&&b;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(s.nu,h(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:f,transformCode:null!=n?n:N,theme:a},c),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Z(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function _(e){return(0,o.jsx)("button",L(Z({type:"button"},e),{style:Z({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function B(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const T=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){B(e,t,r[t])}))}return e}({React:c},c,n);var I,H,M=r(89583),A=r(6324),R=r.n(A);function U(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const z=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),V={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},$=(W=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){U(e,t,r[t])}))}return e}({},V),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(W,Object.getOwnPropertyDescriptors(q)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(q)).forEach((function(e){Object.defineProperty(W,e,Object.getOwnPropertyDescriptor(q,e))})),W);var W,q;const G=Object.keys(V);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=$[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&F.test(c)){const e=c.match(F).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),l=r.split("\n"),s=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),b=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<l.length;){const e=l[p].match(i);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?s[a[t]].range+=`${p},`:u[t]?s[u[t]].start=p:b[t]&&(s[b[t]].range+=`${s[b[t]].start}-${p-1},`),l.splice(p,1)}r=l.join("\n");const f={};return Object.entries(s).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(I=f)[H=t])&&void 0!==r||(I[H]=[]),f[t].push(e)}))})),{lineClassNames:f,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(O());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Y(e,t,r[t])}))}return e}({},r),{style:n,className:(0,i.Z)(r.className,J.codeBlockContainer,M.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=r(26101);const se={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function be(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function fe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=n({line:e,className:(0,i.Z)(t,r&&se.codeLine)}),s=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",be(ue({},l),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:se.codeLineNumber}),(0,o.jsx)("span",{className:se.codeLineContent,children:s})]}):s,(0,o.jsx)("br",{})]}))}var pe=r(34370);function de(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Oe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ye(e){return(0,o.jsx)("svg",Oe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){de(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){je(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const he={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),l=(0,c.useRef)(void 0),s=(0,c.useCallback)((()=>{(0,pe.Z)(e),n(!0),l.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,he.copyButton,r&&he.copyButtonCopied),onClick:s,children:(0,o.jsxs)("span",{className:he.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(ye,{className:he.copyButtonIcon}),(0,o.jsx)(ge,{className:he.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function xe(e){return(0,o.jsx)("svg",Pe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(xe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:r,title:n,showLineNumbers:l,language:s}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,d.L)();var b;const f=function(e){return null==e?void 0:e.toLowerCase()}(null!==(b=null!=s?s:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==b?b:a),p=O(),y=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),i=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return ie(o,l),(0,c.useEffect)((()=>{l()}),[e,l]),(0,c.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:i}}(),j=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(z))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:m,code:g}=X(e,{metastring:r,language:f,magicComments:u}),h=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,f&&!t.includes(`language-${f}`)&&`language-${f}`),children:[j&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:p,code:g,language:null!=f?f:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,h&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(fe,{line:e,getLineProps:n,getTokenProps:c,classNames:m[t],showLineNumbers:h},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(y.isEnabled||y.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:g})]})]})]})}function Ne(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Le(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ze(e,t,r[t])}))}return e}const _e=(Be=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,l.Z)(),i=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),s="string"==typeof i?De:ne;return(0,o.jsx)(s,Ee(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ne(e,t,r[t])}))}return e}({},r),{children:i}),String(n))},function(e){return e.live?(0,o.jsx)(E,Le({scope:T},e)):(0,o.jsx)(Be,Le({},e))});var Be;function Te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){return(0,o.jsx)(_e,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Te(e,t,r[t])}))}return e}({},e))}}}]); \ No newline at end of file diff --git a/assets/js/17896441.8eacbe5a.js b/assets/js/17896441.8eacbe5a.js deleted file mode 100644 index 544cce3bd5..0000000000 --- a/assets/js/17896441.8eacbe5a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[8401],{1243:(e,t,n)=>{n.d(t,{A:()=>p});n(6540);var s=n(4164),a=n(7559),i=n(1754),l=n(9169),o=n(8774),r=n(1312),c=n(6025),d=n(4848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.A)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(o.A,{"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,d.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,d.jsx)(o.A,{className:a,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:a,children:t})}function b(e){let{children:t,active:n,index:a,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(a+1)})]})}function p(){const e=(0,i.OF)(),t=(0,l.Dt)();return e?(0,d.jsx)("nav",{className:(0,s.A)(a.G.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,r.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(b,{active:s,index:n,addMicrodata:!!a,children:(0,d.jsx)(x,{href:a,isLast:s,children:t.label})},n)}))]})}):null}},6011:(e,t,n)=>{n.r(t),n.d(t,{default:()=>G});var s=n(6540),a=n(1213),i=n(9532),l=n(4848);const o=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(o.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(o);if(null===e)throw new i.dV("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,l.jsx)(a.be,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(4164),m=n(4581),h=n(7719);function v(){const{metadata:e}=c();return(0,l.jsx)(h.A,{previous:e.previous,next:e.next})}var x=n(1878),b=n(4267),p=n(7559),g=n(2053),f=n(4336);function j(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:a}=e,i=a.length>0,o=!!(t||n||s);return i||o?(0,l.jsxs)("footer",{className:(0,u.A)(p.G.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,l.jsx)("div",{className:(0,u.A)("row margin-top--sm",p.G.docs.docFooterTagsRow),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(g.A,{tags:a})})}),o&&(0,l.jsx)(f.A,{className:(0,u.A)("margin-top--sm",p.G.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var A=n(1422),N=n(5195),C=n(1312);const L={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function _(e){let{collapsed:t,...n}=e;return(0,l.jsx)("button",{type:"button",...n,className:(0,u.A)("clean-btn",L.tocCollapsibleButton,!t&&L.tocCollapsibleButtonExpanded,n.className),children:(0,l.jsx)(C.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const T={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function k(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:o}=(0,A.u)({initialState:!0});return(0,l.jsxs)("div",{className:(0,u.A)(T.tocCollapsible,!i&&T.tocCollapsibleExpanded,n),children:[(0,l.jsx)(_,{collapsed:i,onClick:o}),(0,l.jsx)(A.N,{lazy:!0,className:T.tocCollapsibleContent,collapsed:i,children:(0,l.jsx)(N.A,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const H={tocMobile:"tocMobile_ITEo"};function y(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(k,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.A)(p.G.docs.docTocMobile,H.tocMobile)})}var w=n(7763);function U(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(w.A,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:p.G.docs.docTocDesktop})}var M=n(1107),B=n(5533);function E(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,l.jsxs)("div",{className:(0,u.A)(p.G.docs.docMarkdown,"markdown"),children:[n&&(0,l.jsx)("header",{children:(0,l.jsx)(M.A,{as:"h1",children:n})}),(0,l.jsx)(B.A,{children:t})]})}var I=n(1243),O=n(996);const V={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function S(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.l)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,l.jsx)(y,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,l.jsx)(U,{})}}(),{metadata:{unlisted:s}}=c();return(0,l.jsxs)("div",{className:"row",children:[(0,l.jsxs)("div",{className:(0,u.A)("col",!n.hidden&&V.docItemCol),children:[s&&(0,l.jsx)(O.A,{}),(0,l.jsx)(x.A,{}),(0,l.jsxs)("div",{className:V.docItemContainer,children:[(0,l.jsxs)("article",{children:[(0,l.jsx)(I.A,{}),(0,l.jsx)(b.A,{}),n.mobile,(0,l.jsx)(E,{children:t}),(0,l.jsx)(j,{})]}),(0,l.jsx)(v,{})]})]}),n.desktop&&(0,l.jsx)("div",{className:"col col--3",children:n.desktop})]})}function G(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,l.jsx)(r,{content:e.content,children:(0,l.jsxs)(a.e3,{className:t,children:[(0,l.jsx)(d,{}),(0,l.jsx)(S,{children:(0,l.jsx)(n,{})})]})})}},7719:(e,t,n)=>{n.d(t,{A:()=>l});n(6540);var s=n(1312),a=n(9022),i=n(4848);function l(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(a.A,{...t,subLabel:(0,i.jsx)(s.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(a.A,{...n,subLabel:(0,i.jsx)(s.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4267:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var s=n(4164),a=n(1312),i=n(7559),l=n(2252),o=n(4848);function r(e){let{className:t}=e;const n=(0,l.r)();return n.badge?(0,o.jsx)("span",{className:(0,s.A)(t,i.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(a.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},1878:(e,t,n)=>{n.d(t,{A:()=>b});n(6540);var s=n(4164),a=n(4586),i=n(8774),l=n(1312),o=n(4070),r=n(7559),c=n(5597),d=n(2252),u=n(4848);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function v(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(l.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.A,{to:n,onClick:s,children:(0,u.jsx)(l.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,a.A)(),{pluginId:l}=(0,o.vT)({failfast:!0}),{savePreferredVersionName:d}=(0,c.g1)(l),{latestDocSuggestion:m,latestVersionSuggestion:x}=(0,o.HW)(l),b=m??(p=x).docs.find((e=>e.id===p.mainDocId));var p;return(0,u.jsxs)("div",{className:(0,s.A)(t,r.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:x.label,to:b.path,onClick:()=>d(x.name)})})]})}function b(e){let{className:t}=e;const n=(0,d.r)();return n.banner?(0,u.jsx)(x,{className:t,versionMetadata:n}):null}},4336:(e,t,n)=>{n.d(t,{A:()=>b});n(6540);var s=n(4164),a=n(1312),i=n(7559),l=n(8774);const o={iconEdit:"iconEdit_Z9Sw"};var r=n(4848);function c(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(o.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(l.A,{to:t,className:i.G.common.editThisPage,children:[(0,r.jsx)(c,{}),(0,r.jsx)(a.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(6266);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.i)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(a.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(a.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function v(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:i.G.common.lastUpdated,children:[(0,r.jsx)(a.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const x={lastUpdated:"lastUpdated_JAkA"};function b(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:i}=e;return(0,r.jsxs)("div",{className:(0,s.A)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(d,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.A)("col",x.lastUpdated),children:(a||i)&&(0,r.jsx)(v,{lastUpdatedAt:a,lastUpdatedBy:i})})]})}},9022:(e,t,n)=>{n.d(t,{A:()=>l});n(6540);var s=n(4164),a=n(8774),i=n(4848);function l(e){const{permalink:t,title:n,subLabel:l,isNext:o}=e;return(0,i.jsxs)(a.A,{className:(0,s.A)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[l&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:l}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}},7763:(e,t,n)=>{n.d(t,{A:()=>c});n(6540);var s=n(4164),a=n(5195);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=n(4848);const o="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,l.jsx)("div",{className:(0,s.A)(i.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(a.A,{...n,linkClassName:o,linkActiveClassName:r})})}},5195:(e,t,n)=>{n.d(t,{A:()=>x});var s=n(6540),a=n(6342);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=l({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function o(e){const t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>o(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(s))?s:e[e.indexOf(s)-1]??null}return e[e.length-1]??null}function c(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.p)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:l}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:l}),c=r(o,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}var u=n(8774),m=n(4848);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function x(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const x=(0,a.p)(),b=c??x.tableOfContents.minHeadingLevel,p=u??x.tableOfContents.maxHeadingLevel,g=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>l({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:b,maxHeadingLevel:p});return d((0,s.useMemo)((()=>{if(o&&r)return{linkClassName:o,linkActiveClassName:r,minHeadingLevel:b,maxHeadingLevel:p}}),[o,r,b,p])),(0,m.jsx)(v,{toc:g,className:n,linkClassName:o,...h})}},6133:(e,t,n)=>{n.d(t,{A:()=>o});n(6540);var s=n(4164),a=n(8774);const i={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=n(4848);function o(e){let{permalink:t,label:n,count:o}=e;return(0,l.jsxs)(a.A,{href:t,className:(0,s.A)(i.tag,o?i.tagWithCount:i.tagRegular),children:[n,o&&(0,l.jsx)("span",{children:o})]})}},2053:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var s=n(4164),a=n(1312),i=n(6133);const l={tags:"tags_jXut",tag:"tag_QGVx"};var o=n(4848);function r(e){let{tags:t}=e;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("b",{children:(0,o.jsx)(a.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,o.jsx)("ul",{className:(0,s.A)(l.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,o.jsx)("li",{className:l.tag,children:(0,o.jsx)(i.A,{label:t,permalink:n})},n)}))})]})}},996:(e,t,n)=>{n.d(t,{A:()=>h});n(6540);var s=n(4164),a=n(1312),i=n(5260),l=n(4848);function o(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.A,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(7559),u=n(7293);function m(e){let{className:t}=e;return(0,l.jsx)(u.A,{type:"caution",title:(0,l.jsx)(o,{}),className:(0,s.A)(t,d.G.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(m,{...e})]})}},6266:(e,t,n)=>{n.d(t,{i:()=>a});var s=n(4586);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}}}]); \ No newline at end of file diff --git a/assets/js/17e8a747.04614055.js b/assets/js/17e8a747.04614055.js new file mode 100644 index 0000000000..f710ab3279 --- /dev/null +++ b/assets/js/17e8a747.04614055.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53704],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const l={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(l.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>I});var n=r(24246),o=r(27378),l=r(40624),s=r(75527),a=r(3620),i=r(44479),c=r(62821),u=r(52196),d=r(53589);function b(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function g(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return v(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function f({value:e,tabValues:t}){return t.some((t=>t.value===e))}function p({queryString:e=!1,groupId:t}){const r=(0,a.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),l=(0,c._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(y(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){b(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[l,s]}function h(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,l=g(e),[s,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l}))),[c,u]=p({queryString:r,groupId:n}),[b,y]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),v=(()=>{const e=null!=c?c:b;return f({value:e,tabValues:l})?e:null})();(0,i.Z)((()=>{v&&a(v)}),[v]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),y(e)}),[u,y,l]),tabValues:l}}var x=r(29088);const m={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){w(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),l=a[n].value;l!==r&&(c(t),o(l))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",O(j({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,l.Z)("tabs__item",m.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function S({lazy:e,children:t,selectedValue:r}){const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function k(e){const t=h(e);return(0,n.jsxs)("div",{className:(0,l.Z)("tabs-container",m.tabList),children:[(0,n.jsx)(P,j({},e,t)),(0,n.jsx)(S,j({},e,t))]})}function I(e){const t=(0,x.Z)();return(0,n.jsx)(k,O(j({},e),{children:v(e.children)}),String(t))}},6698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(40624));const l={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){s(e,t,r[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function c({children:e,minHeight:t,url:r="http://localhost:3000",style:s,bodyStyle:c}){return(0,n.jsxs)("div",{className:l.browserWindow,style:i(a({},s),{minHeight:t}),children:[(0,n.jsxs)("div",{className:l.browserWindowHeader,children:[(0,n.jsxs)("div",{className:l.buttons,children:[(0,n.jsx)("span",{className:l.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:l.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:l.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,o.Z)(l.browserWindowAddressBar,"text--truncate"),children:r}),(0,n.jsx)("div",{className:l.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:l.bar}),(0,n.jsx)("span",{className:l.bar}),(0,n.jsx)("span",{className:l.bar})]})})]}),(0,n.jsx)("div",{className:l.browserWindowBody,style:c,children:e})]})}},53694:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>i,isMacOS:()=>b,metadata:()=>u,toc:()=>y});var n=r(24246),o=r(71670),l=r(6698),s=r(97555),a=r(61132);const i={},c="Tabs tests",u={type:"mdx",permalink:"/tests/pages/tabs-tests",source:"@site/_dogfooding/_pages tests/tabs-tests.mdx",title:"Tabs tests",description:"Tabs with dynamic default value",frontMatter:{},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1675424938e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/tabs-tests.mdx",unlisted:!1},d={},b="undefined"!=typeof window&&navigator.platform.startsWith("Mac"),y=[{value:"Tabs with dynamic default value",id:"tabs-with-dynamic-default-value",level:2},{value:"Tabs sync with different heights",id:"tabs-sync-with-different-heights",level:2}];function v(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"tabs-tests",children:"Tabs tests"}),"\n","\n",(0,n.jsx)(t.h2,{id:"tabs-with-dynamic-default-value",children:"Tabs with dynamic default value"}),"\n",(0,n.jsxs)(t.p,{children:["This can cause ",(0,n.jsx)(t.a,{href:"https://github.com/facebook/react-native-website/issues/2771",children:"bugs"})," when default value is different between SSR and client:"]}),"\n","\n",(0,n.jsx)(l.Z,{children:(0,n.jsxs)(s.Z,{defaultValue:b?"ios":"android",children:[(0,n.jsx)(a.Z,{value:"android",label:"Android",children:"Android content"}),(0,n.jsx)(a.Z,{value:"ios",label:"iOS",children:"iOS content"})]})}),"\n",(0,n.jsx)(t.h2,{id:"tabs-sync-with-different-heights",children:"Tabs sync with different heights"}),"\n",(0,n.jsxs)(s.Z,{groupId:"operating-systems",children:[(0,n.jsx)(a.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + C to copy."})}),(0,n.jsx)(a.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text very long text"})})]}),"\n",(0,n.jsxs)(s.Z,{groupId:"operating-systems",children:[(0,n.jsx)(a.Z,{value:"win",label:"Windows",children:(0,n.jsx)(t.p,{children:"Use Ctrl + V to paste."})}),(0,n.jsx)(a.Z,{value:"mac",label:"macOS",children:(0,n.jsx)(t.p,{children:"Use Command + V to paste."})})]}),"\n",(0,n.jsx)(t.p,{children:"When clicking tabs above, they should stay under cursor and we should adjust the scroll position."})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(v,{...e})}):v(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>a,a:()=>s});var n=r(27378);const o={},l=n.createContext(o);function s(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1864f992.5cf0a7b4.js b/assets/js/1864f992.5cf0a7b4.js new file mode 100644 index 0000000000..16f31f0acf --- /dev/null +++ b/assets/js/1864f992.5cf0a7b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83918],{83656:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>r,default:()=>l,frontMatter:()=>t,metadata:()=>d,toc:()=>c});var i=n(24246),a=n(71670);const t={slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},r="prefer-docusaurus-heading",d={id:"api/misc/eslint-plugin/prefer-docusaurus-heading",title:"prefer-docusaurus-heading",description:"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.",source:"@site/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/prefer-docusaurus-heading.mdx",tags:[],version:"current",lastUpdatedBy:"Devansu Yadav",lastUpdatedAt:1674144504e3,frontMatter:{slug:"/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading"},sidebar:"api",previous:{title:"no-untranslated-text",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text"},next:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},u={},c=[{value:"Rule Details",id:"details",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"prefer-docusaurus-heading",children:"prefer-docusaurus-heading"}),"\n",(0,i.jsxs)(s.p,{children:["Ensures that the ",(0,i.jsx)(s.code,{children:"@theme/Heading"})," theme component provided by Docusaurus ",(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:(0,i.jsx)(s.code,{children:"theme-classic"})})," is used instead of ",(0,i.jsx)(s.code,{children:"<hn>"})," tags for headings."]}),"\n",(0,i.jsx)(s.h2,{id:"details",children:"Rule Details"}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"incorrect"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-html",children:"<h1>This is heading 1</h1>\n\n<h2>This is heading 2</h2>\n\n<h3>This is heading 3</h3>\n"})}),"\n",(0,i.jsxs)(s.p,{children:["Examples of ",(0,i.jsx)(s.strong,{children:"correct"})," code for this rule:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-javascript",children:"import Heading from '@theme/Heading'\n\n<Heading as='h1'>This is heading 1</Heading>\n\n<Heading as='h2'>This is heading 2</Heading>\n\n<Heading as='h3'>This is heading 3</Heading>\n"})})]})}function l(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>d,a:()=>r});var i=n(27378);const a={},t=i.createContext(a);function r(e){const s=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/18c41134.220c40a3.js b/assets/js/18c41134.220c40a3.js deleted file mode 100644 index b01b047dc7..0000000000 --- a/assets/js/18c41134.220c40a3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[9262],{9740:(e,n,s)=>{s.r(n),s.d(n,{Highlight:()=>l,assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var r=s(4848),t=s(8453);const a={sidebar_position:4},o="Markdown Features",i={id:"tutorial-basics/markdown-features",title:"Markdown Features",description:"Docusaurus supports Markdown and a few additional features.",source:"@site/docs/tutorial-basics/markdown-features.mdx",sourceDirName:"tutorial-basics",slug:"/tutorial-basics/markdown-features",permalink:"/docs/tutorial-basics/markdown-features",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/tutorial-basics/markdown-features.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Create a Blog Post",permalink:"/docs/tutorial-basics/create-a-blog-post"},next:{title:"Deploy your site",permalink:"/docs/tutorial-basics/deploy-your-site"}},c={},l=({children:e,color:n})=>{const s={span:"span",...(0,t.R)()};return(0,r.jsx)(s.span,{style:{backgroundColor:n,borderRadius:"20px",color:"#fff",padding:"10px",cursor:"pointer"},onClick:()=>{alert(`You clicked the color ${n} with label ${e}`)},children:e})},d=[{value:"Front Matter",id:"front-matter",level:2},{value:"Links",id:"links",level:2},{value:"Images",id:"images",level:2},{value:"Code Blocks",id:"code-blocks",level:2},{value:"Admonitions",id:"admonitions",level:2},{value:"MDX and React Components",id:"mdx-and-react-components",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"markdown-features",children:"Markdown Features"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus supports ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://daringfireball.net/projects/markdown/syntax",children:"Markdown"})})," and a few ",(0,r.jsx)(n.strong,{children:"additional features"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"front-matter",children:"Front Matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents have metadata at the top called ",(0,r.jsx)(n.a,{href:"https://jekyllrb.com/docs/front-matter/",children:"Front Matter"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="my-doc.md"',children:"// highlight-start\n---\nid: my-doc-id\ntitle: My document title\ndescription: My document description\nslug: /my-custom-url\n---\n// highlight-end\n\n## Markdown heading\n\nMarkdown text with [links](./hello.md)\n"})}),"\n",(0,r.jsx)(n.h2,{id:"links",children:"Links"}),"\n",(0,r.jsx)(n.p,{children:"Regular Markdown links are supported, using url paths or relative file paths."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"Let's see how to [Create a page](/create-a-page).\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"Let's see how to [Create a page](./create-a-page.md).\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Result:"})," Let's see how to ",(0,r.jsx)(n.a,{href:"/docs/tutorial-basics/create-a-page",children:"Create a page"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"images",children:"Images"}),"\n",(0,r.jsx)(n.p,{children:"Regular Markdown images are supported."}),"\n",(0,r.jsxs)(n.p,{children:["You can use absolute paths to reference images in the static directory (",(0,r.jsx)(n.code,{children:"static/img/docusaurus.png"}),"):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"![Docusaurus logo](/img/docusaurus.png)\n"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Docusaurus logo",src:s(6141).A+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(n.p,{children:"You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"![Docusaurus logo](./img/docusaurus.png)\n"})}),"\n",(0,r.jsx)(n.h2,{id:"code-blocks",children:"Code Blocks"}),"\n",(0,r.jsx)(n.p,{children:"Markdown code blocks are supported with Syntax highlighting."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'```jsx title="src/components/HelloDocusaurus.js"\nfunction HelloDocusaurus() {\n return <h1>Hello, Docusaurus!</h1>;\n}\n```\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/components/HelloDocusaurus.js"',children:"function HelloDocusaurus() {\n return <h1>Hello, Docusaurus!</h1>;\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"admonitions",children:"Admonitions"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus has a special syntax to create admonitions and callouts:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:":::tip[My tip]\n\nUse this awesome feature option\n\n:::\n\n:::danger[Take care]\n\nThis action is dangerous\n\n:::\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"My tip",type:"tip",children:(0,r.jsx)(n.p,{children:"Use this awesome feature option"})}),"\n",(0,r.jsx)(n.admonition,{title:"Take care",type:"danger",children:(0,r.jsx)(n.p,{children:"This action is dangerous"})}),"\n",(0,r.jsx)(n.h2,{id:"mdx-and-react-components",children:"MDX and React Components"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"})," can make your documentation more ",(0,r.jsx)(n.strong,{children:"interactive"})," and allows using any ",(0,r.jsx)(n.strong,{children:"React components inside Markdown"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const Highlight = ({children, color}) => (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '20px',\n color: '#fff',\n padding: '10px',\n cursor: 'pointer',\n }}\n onClick={() => {\n alert(`You clicked the color ${color} with label ${children}`)\n }}>\n {children}\n </span>\n);\n\nThis is <Highlight color=\"#25c2a0\">Docusaurus green</Highlight> !\n\nThis is <Highlight color=\"#1877F2\">Facebook blue</Highlight> !\n"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["This is ",(0,r.jsx)(l,{color:"#25c2a0",children:"Docusaurus green"})," !"]}),"\n",(0,r.jsxs)(n.p,{children:["This is ",(0,r.jsx)(l,{color:"#1877F2",children:"Facebook blue"})," !"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},6141:(e,n,s)=>{s.d(n,{A:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>i});var r=s(6540);const t={},a=r.createContext(t);function o(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/19751689.bc6d5f52.js b/assets/js/19751689.bc6d5f52.js new file mode 100644 index 0000000000..530df9363e --- /dev/null +++ b/assets/js/19751689.bc6d5f52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2005],{21344:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>g,frontMatter:()=>i,metadata:()=>h,toc:()=>s});var a=n(24246),o=n(71670);const i={mdx:{format:"md"},date:"2021-03-16T20:00",authors:["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},r="2.0.0-alpha.72",h={permalink:"/changelog/2.0.0-alpha.72",source:"@site/changelog/source/2.0.0-alpha.72.md",title:"2.0.0-alpha.72",description:"Breaking Change",date:"2021-03-16T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"Harvtronix",alias:"Harvtronix",url:"https://github.com/Harvtronix",imageURL:"https://github.com/Harvtronix.png",key:"Harvtronix"},{name:"Joon-Ha Lee",alias:"koko8829",url:"https://github.com/koko8829",imageURL:"https://github.com/koko8829.png",key:"koko8829"},{name:"Leandro Oriente",alias:"leandrooriente",url:"https://github.com/leandrooriente",imageURL:"https://github.com/leandrooriente.png",key:"leandrooriente"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Long Ho",alias:"longlho",url:"https://github.com/longlho",imageURL:"https://github.com/longlho.png",key:"longlho"},{name:"Lowen",alias:"lowenhere",url:"https://github.com/lowenhere",imageURL:"https://github.com/lowenhere.png",key:"lowenhere"},{name:"Pierre-Gilles Leymarie",alias:"Pierre-Gilles",url:"https://github.com/Pierre-Gilles",imageURL:"https://github.com/Pierre-Gilles.png",key:"Pierre-Gilles"},{name:"Quan",alias:"quanengineering",url:"https://github.com/quanengineering",imageURL:"https://github.com/quanengineering.png",key:"quanengineering"},{name:"Rhodanthe1116",alias:"Rhodanthe1116",url:"https://github.com/Rhodanthe1116",imageURL:"https://github.com/Rhodanthe1116.png",key:"Rhodanthe1116"},{name:"Steven Hansel",alias:"ShinteiMai",url:"https://github.com/ShinteiMai",imageURL:"https://github.com/ShinteiMai.png",key:"ShinteiMai"},{name:"Simen Bekkhus",alias:"SimenB",url:"https://github.com/SimenB",imageURL:"https://github.com/SimenB.png",key:"SimenB"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Zoltan Kochan",alias:"zkochan",url:"https://github.com/zkochan",imageURL:"https://github.com/zkochan.png",key:"zkochan"}],frontMatter:{mdx:{format:"md"},date:"2021-03-16T20:00",authors:["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.73",permalink:"/changelog/2.0.0-alpha.73"},nextItem:{title:"2.0.0-alpha.71",permalink:"/changelog/2.0.0-alpha.71"},listPageLink:"/changelog/page/3"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},s=[];function m(e){return(0,a.jsx)(a.Fragment,{})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(m,{...e})}):m()}},71670:(e,t,n)=>{n.d(t,{Z:()=>h,a:()=>r});var a=n(27378);const o={},i=a.createContext(o);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function h(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/198b37c5.7039c639.js b/assets/js/198b37c5.7039c639.js new file mode 100644 index 0000000000..0e5e3378c9 --- /dev/null +++ b/assets/js/198b37c5.7039c639.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97960],{39045:(a,e,i)=>{i.r(e),i.d(e,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>h,toc:()=>l});var t=i(24246),n=i(71670);const s={mdx:{format:"md"},date:"2021-08-26T20:00",authors:["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},o="2.0.0-beta.5",h={permalink:"/changelog/2.0.0-beta.5",source:"@site/changelog/source/2.0.0-beta.5.md",title:"2.0.0-beta.5",description:"New Feature",date:"2021-08-26T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Palash Shrivastava",alias:"BattleOfPlassey",url:"https://github.com/BattleOfPlassey",imageURL:"https://github.com/BattleOfPlassey.png",key:"BattleOfPlassey"},{name:"David Seal",alias:"dbseal",url:"https://github.com/dbseal",imageURL:"https://github.com/dbseal.png",key:"dbseal"},{name:"Deepak Prabhakara",alias:"deepakprabhakara",url:"https://github.com/deepakprabhakara",imageURL:"https://github.com/deepakprabhakara.png",key:"deepakprabhakara"},{name:"Erick Zhao",alias:"erickzhao",url:"https://github.com/erickzhao",imageURL:"https://github.com/erickzhao.png",key:"erickzhao"},{name:"Federico Aloi",alias:"faloi",url:"https://github.com/faloi",imageURL:"https://github.com/faloi.png",key:"faloi"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Fouad Matin",alias:"fouad",url:"https://github.com/fouad",imageURL:"https://github.com/fouad.png",key:"fouad"},{name:"Julien Neuhart",alias:"gulien",url:"https://github.com/gulien",imageURL:"https://github.com/gulien.png",key:"gulien"},{name:"Hamza Hamidi",alias:"hamzahamidi",url:"https://github.com/hamzahamidi",imageURL:"https://github.com/hamzahamidi.png",key:"hamzahamidi"},{name:"HaochenQ",alias:"HaochenQ",url:"https://github.com/HaochenQ",imageURL:"https://github.com/HaochenQ.png",key:"HaochenQ"},{name:"Dmitry Zhifarsky",alias:"incendial",url:"https://github.com/incendial",imageURL:"https://github.com/incendial.png",key:"incendial"},{name:"Isaac Philip",alias:"isaac-philip",url:"https://github.com/isaac-philip",imageURL:"https://github.com/isaac-philip.png",key:"isaac-philip"},{name:"Yan Ivan Evdokimov",alias:"jansivans",url:"https://github.com/jansivans",imageURL:"https://github.com/jansivans.png",key:"jansivans"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Jonny Burger",alias:"JonnyBurger",url:"https://github.com/JonnyBurger",imageURL:"https://github.com/JonnyBurger.png",key:"JonnyBurger"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Marko Saric",alias:"metmarkosaric",url:"https://github.com/metmarkosaric",imageURL:"https://github.com/metmarkosaric.png",key:"metmarkosaric"},{name:"Michal S\xe4nger",alias:"michalsanger",url:"https://github.com/michalsanger",imageURL:"https://github.com/michalsanger.png",key:"michalsanger"},{name:"Garry",alias:"neaped",url:"https://github.com/neaped",imageURL:"https://github.com/neaped.png",key:"neaped"},{name:"Pierre-Gilles Leymarie",alias:"Pierre-Gilles",url:"https://github.com/Pierre-Gilles",imageURL:"https://github.com/Pierre-Gilles.png",key:"Pierre-Gilles"},{name:"Sam Wall",alias:"sjwall",url:"https://github.com/sjwall",imageURL:"https://github.com/sjwall.png",key:"sjwall"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tunghsiao Liu",alias:"sparanoid",url:"https://github.com/sparanoid",imageURL:"https://github.com/sparanoid.png",key:"sparanoid"},{name:"wan-nyan-wan",alias:"wan-nyan-wan",url:"https://github.com/wan-nyan-wan",imageURL:"https://github.com/wan-nyan-wan.png",key:"wan-nyan-wan"},{name:"Paul O\u2019Shannessy",alias:"zpao",url:"https://github.com/zpao",imageURL:"https://github.com/zpao.png",key:"zpao"}],frontMatter:{mdx:{format:"md"},date:"2021-08-26T20:00",authors:["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},unlisted:!1,prevItem:{title:"2.0.0-beta.6",permalink:"/changelog/2.0.0-beta.6"},nextItem:{title:"2.0.0-beta.4",permalink:"/changelog/2.0.0-beta.4"},listPageLink:"/changelog/page/2"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function m(a){return(0,t.jsx)(t.Fragment,{})}function u(a={}){const{wrapper:e}={...(0,n.a)(),...a.components};return e?(0,t.jsx)(e,{...a,children:(0,t.jsx)(m,{...a})}):m()}},71670:(a,e,i)=>{i.d(e,{Z:()=>h,a:()=>o});var t=i(27378);const n={},s=t.createContext(n);function o(a){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function h(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(n):a.components||n:o(a.components),t.createElement(s.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/19e1b6a6.5e25d7fb.js b/assets/js/19e1b6a6.5e25d7fb.js new file mode 100644 index 0000000000..86e9c81e63 --- /dev/null +++ b/assets/js/19e1b6a6.5e25d7fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48478],{55911:a=>{a.exports=JSON.parse('{"tag":{"label":"recap","permalink":"/blog/tags/recap","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/recap","page":1,"postsPerPage":5,"totalPages":1,"totalCount":3,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.2a36be36.js b/assets/js/1a4e3797.2a36be36.js new file mode 100644 index 0000000000..a4ce3622dc --- /dev/null +++ b/assets/js/1a4e3797.2a36be36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97920],{7812:(e,a,s)=>{s.d(a,{c:()=>u});var t=s(27378),r=s(4423);const l=["zero","one","two","few","many","other"];function n(e){return l.filter((a=>e.includes(a)))}const c={locale:"en",pluralForms:n(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,t.useMemo)((()=>{try{return function(e){const a=new Intl.PluralRules(e);return{locale:e,pluralForms:n(a.resolvedOptions().pluralCategories),select:e=>a.select(e)}}(e)}catch(a){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${a.message}\n`),c}}),[e])}function u(){const e=o();return{selectMessage:(a,s)=>function(e,a,s){const t=e.split("|");if(1===t.length)return t[0];t.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const r=s.select(a),l=s.pluralForms.indexOf(r);return t[Math.min(l,t.length-1)]}(s,a,e)}}},37644:(e,a,s)=>{s.r(a),s.d(a,{default:()=>N});var t=s(24246),r=s(27378),l=s(40624),n=s(24501),c=s.n(n),o=s(80934),u=s.n(o),i=s(98428),h=s(97134),m=s(41428),d=s(92053),g=s(7812),p=s(22780),f=s(51114),v=s(44008),b=s(97710),y=s(36712),j=s(4423),x=s(5573),P=s(93281),w=s(88613),I=s(52615);const R={searchQueryInput:"searchQueryInput_S_pS",searchVersionInput:"searchVersionInput_RZ74",searchResultsColumn:"searchResultsColumn_dGxU",algoliaLogo:"algoliaLogo_nq6Q",algoliaLogoPathFill:"algoliaLogoPathFill_IWVH",searchResultItem:"searchResultItem_jZK3",searchResultItemHeading:"searchResultItemHeading_Nbvf",searchResultItemPath:"searchResultItemPath_wcJo",searchResultItemSummary:"searchResultItemSummary_HbIg",searchQueryColumn:"searchQueryColumn_ourN",searchVersionColumn:"searchVersionColumn_n2Lb",searchLogoColumn:"searchLogoColumn_v5Xz",loadingSpinner:"loadingSpinner_Jw0H","loading-spin":"loading-spin_vmq3",loader:"loader_rYmk"};function S(e,a,s){return a in e?Object.defineProperty(e,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[a]=s,e}function O(e){for(var a=1;a<arguments.length;a++){var s=null!=arguments[a]?arguments[a]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(a){S(e,a,s[a])}))}return e}function V(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),s.push.apply(s,t)}return s}(Object(a)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(a,s))})),e}function _({docsSearchVersionsHelpers:e}){const a=Object.entries(e.allDocsData).filter((([,e])=>e.versions.length>1));return(0,t.jsx)("div",{className:(0,l.Z)("col","col--3","padding-left--none",R.searchVersionColumn),children:a.map((([s,r])=>{const l=a.length>1?`${s}: `:"";return(0,t.jsx)("select",{onChange:a=>e.setSearchVersion(s,a.target.value),defaultValue:e.searchVersions[s],className:R.searchVersionInput,children:r.versions.map(((e,a)=>(0,t.jsx)("option",{label:`${l}${e.label}`,value:e.name},a)))},s)}))})}function z(){const{i18n:{currentLocale:e}}=(0,j.Z)(),{algolia:{appId:a,apiKey:s,indexName:n}}=(0,x.L)(),o=(0,P.l)(),v=function(){const{selectMessage:e}=(0,g.c)();return a=>e(a,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:a}))}(),S=function(){const e=(0,d._r)(),[a,s]=(0,r.useState)((()=>Object.entries(e).reduce(((e,[a,s])=>V(O({},e),{[a]:s.versions[0].name})),{}))),t=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:t,searchVersions:a,setSearchVersion:(e,a)=>s((s=>V(O({},s),{[e]:a})))}}(),[z,N]=(0,p.K)(),F={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[C,L]=(0,r.useReducer)(((e,a)=>{switch(a.type){case"reset":return F;case"loading":return V(O({},e),{loading:!0});case"update":return z!==a.value.query?e:V(O({},a.value),{items:0===a.value.lastPage?a.value.items:e.items.concat(a.value.items)});case"advance":{const a=e.totalPages>e.lastPage+1;return V(O({},e),{lastPage:a?e.lastPage+1:e.lastPage,hasMore:a})}default:return e}}),F),Z=u()(a,s),M=c()(Z,n,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});M.on("result",(({results:{query:e,hits:a,page:s,nbHits:t,nbPages:r}})=>{if(""===e||!Array.isArray(a))return void L({type:"reset"});const l=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),n=a.map((({url:e,_highlightResult:{hierarchy:a},_snippetResult:s={}})=>{const t=Object.keys(a).map((e=>l(a[e].value)));return{title:t.pop(),url:o(e),summary:s.content?`${l(s.content.value)}...`:"",breadcrumbs:t}}));L({type:"update",value:{items:n,query:e,totalResults:t,totalPages:r,lastPage:s,hasMore:r>s+1,loading:!1}})}));const[T,D]=(0,r.useState)(null),H=(0,r.useRef)(0),$=(0,r.useRef)(i.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:a,boundingClientRect:{y:s}}=e[0];a&&H.current>s&&L({type:"advance"}),H.current=s}),{threshold:1})),E=()=>z?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:z}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),q=(0,f.zX)(((a=0)=>{M.addDisjunctiveFacetRefinement("docusaurus_tag","default"),M.addDisjunctiveFacetRefinement("language",e),Object.entries(S.searchVersions).forEach((([e,a])=>{M.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${e}-${a}`)})),M.setQuery(z).setPage(a).search()}));return(0,r.useEffect)((()=>{if(!T)return;const e=$.current;return e?(e.observe(T),()=>e.unobserve(T)):()=>!0}),[T]),(0,r.useEffect)((()=>{L({type:"reset"}),z&&(L({type:"loading"}),setTimeout((()=>{q()}),300))}),[z,S.searchVersions,q]),(0,r.useEffect)((()=>{C.lastPage&&0!==C.lastPage&&q(C.lastPage)}),[q,C.lastPage]),(0,t.jsxs)(w.Z,{children:[(0,t.jsxs)(h.Z,{children:[(0,t.jsx)("title",{children:(0,b.p)(E())}),(0,t.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,t.jsxs)("div",{className:"container margin-vert--lg",children:[(0,t.jsx)(I.Z,{as:"h1",children:E()}),(0,t.jsxs)("form",{className:"row",onSubmit:e=>e.preventDefault(),children:[(0,t.jsx)("div",{className:(0,l.Z)("col",R.searchQueryColumn,{"col--9":S.versioningEnabled,"col--12":!S.versioningEnabled}),children:(0,t.jsx)("input",{type:"search",name:"q",className:R.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>N(e.target.value),value:z,autoComplete:"off",autoFocus:!0})}),S.versioningEnabled&&(0,t.jsx)(_,{docsSearchVersionsHelpers:S})]}),(0,t.jsxs)("div",{className:"row",children:[(0,t.jsx)("div",{className:(0,l.Z)("col","col--8",R.searchResultsColumn),children:!!C.totalResults&&v(C.totalResults)}),(0,t.jsx)("div",{className:(0,l.Z)("col","col--4","text--right",R.searchLogoColumn),children:(0,t.jsx)(m.Z,{to:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,t.jsx)("svg",{viewBox:"0 0 168 24",className:R.algoliaLogo,children:(0,t.jsxs)("g",{fill:"none",children:[(0,t.jsx)("path",{className:R.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,t.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,t.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),C.items.length>0?(0,t.jsx)("main",{children:C.items.map((({title:e,url:a,summary:s,breadcrumbs:r},n)=>(0,t.jsxs)("article",{className:R.searchResultItem,children:[(0,t.jsx)(I.Z,{as:"h2",className:R.searchResultItemHeading,children:(0,t.jsx)(m.Z,{to:a,dangerouslySetInnerHTML:{__html:e}})}),r.length>0&&(0,t.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,t.jsx)("ul",{className:(0,l.Z)("breadcrumbs",R.searchResultItemPath),children:r.map(((e,a)=>(0,t.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},a)))})}),s&&(0,t.jsx)("p",{className:R.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}})]},n)))}):[z&&!C.loading&&(0,t.jsx)("p",{children:(0,t.jsx)(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!C.loading&&(0,t.jsx)("div",{className:R.loadingSpinner},"spinner")],C.hasMore&&(0,t.jsx)("div",{className:R.loader,ref:D,children:(0,t.jsx)(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function N(){return(0,t.jsx)(v.FG,{className:"search-page-wrapper",children:(0,t.jsx)(z,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a839d3d.b6d3920f.js b/assets/js/1a839d3d.b6d3920f.js new file mode 100644 index 0000000000..1457e862f9 --- /dev/null +++ b/assets/js/1a839d3d.b6d3920f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95726],{30923:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>m,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var a=o(24246),n=o(71670);const s={mdx:{format:"md"},date:"2022-05-05T20:00",authors:["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},r="2.0.0-beta.20",i={permalink:"/changelog/2.0.0-beta.20",source:"@site/changelog/source/2.0.0-beta.20.md",title:"2.0.0-beta.20",description:"Bug Fix",date:"2022-05-05T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Steven Hicks",alias:"pepopowitz",url:"https://github.com/pepopowitz",imageURL:"https://github.com/pepopowitz.png",key:"pepopowitz"},{name:"Reece Dunham",alias:"RDIL",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png",key:"RDIL"},{name:"Sergey Gromkov",alias:"sgromkov",url:"https://github.com/sgromkov",imageURL:"https://github.com/sgromkov.png",key:"sgromkov"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-05-05T20:00",authors:["Josh-Cena","lex111","pepopowitz","RDIL","sgromkov","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-beta.21",permalink:"/changelog/2.0.0-beta.21"},nextItem:{title:"2.0.0-beta.19",permalink:"/changelog/2.0.0-beta.19"},listPageLink:"/changelog/"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},p=[];function l(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l()}},71670:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>r});var a=o(27378);const n={},s=a.createContext(n);function r(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b641e9e.3dc48ae2.js b/assets/js/1b641e9e.3dc48ae2.js new file mode 100644 index 0000000000..bfbb4311a2 --- /dev/null +++ b/assets/js/1b641e9e.3dc48ae2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98456],{54098:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>m});var n=t(24246),l=t(71670);const i={mdx:{format:"md"},date:"2021-04-27T20:00",authors:["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},r="2.0.0-alpha.74",o={permalink:"/changelog/2.0.0-alpha.74",source:"@site/changelog/source/2.0.0-alpha.74.md",title:"2.0.0-alpha.74",description:"New Feature",date:"2021-04-27T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"alena-ko",alias:"alena-ko",url:"https://github.com/alena-ko",imageURL:"https://github.com/alena-ko.png",key:"alena-ko"},{name:"Arnaud Jeannin",alias:"arnaudjnn",url:"https://github.com/arnaudjnn",imageURL:"https://github.com/arnaudjnn.png",key:"arnaudjnn"},{name:"DOLLE",alias:"JeremyDolle",url:"https://github.com/JeremyDolle",imageURL:"https://github.com/JeremyDolle.png",key:"JeremyDolle"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"kazk",alias:"kazk",url:"https://github.com/kazk",imageURL:"https://github.com/kazk.png",key:"kazk"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lisa Chandra",alias:"lisa761",url:"https://github.com/lisa761",imageURL:"https://github.com/lisa761.png",key:"lisa761"},{name:"Luis Medina Huerta",alias:"luism3861",url:"https://github.com/luism3861",imageURL:"https://github.com/luism3861.png",key:"luism3861"},{name:"MisterFISHUP",alias:"MisterFISHUP",url:"https://github.com/MisterFISHUP",imageURL:"https://github.com/MisterFISHUP.png",key:"MisterFISHUP"},{name:"Tommy",alias:"react-learner",url:"https://github.com/react-learner",imageURL:"https://github.com/react-learner.png",key:"react-learner"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2021-04-27T20:00",authors:["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.75",permalink:"/changelog/2.0.0-alpha.75"},nextItem:{title:"2.0.0-alpha.73",permalink:"/changelog/2.0.0-alpha.73"},listPageLink:"/changelog/page/3"},s={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function h(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u()}},71670:(e,a,t)=>{t.d(a,{Z:()=>o,a:()=>r});var n=t(27378);const l={},i=n.createContext(l);function r(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d1d5c80.368d4c1e.js b/assets/js/1d1d5c80.368d4c1e.js new file mode 100644 index 0000000000..15c3993493 --- /dev/null +++ b/assets/js/1d1d5c80.368d4c1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96666],{47478:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(24246),o=a(71670);const s={mdx:{format:"md"},date:"2020-07-29T20:00",authors:["hobadams","Simek","slorber","teikjun"]},r="2.0.0-alpha.60",i={permalink:"/changelog/2.0.0-alpha.60",source:"@site/changelog/source/2.0.0-alpha.60.md",title:"2.0.0-alpha.60",description:"New Feature",date:"2020-07-29T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Hob Adams",alias:"hobadams",url:"https://github.com/hobadams",imageURL:"https://github.com/hobadams.png",key:"hobadams"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"}],frontMatter:{mdx:{format:"md"},date:"2020-07-29T20:00",authors:["hobadams","Simek","slorber","teikjun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.61",permalink:"/changelog/2.0.0-alpha.61"},nextItem:{title:"2.0.0-alpha.59",permalink:"/changelog/2.0.0-alpha.59"},listPageLink:"/changelog/page/3"},m={authorsImageUrls:[void 0,void 0,void 0,void 0]},u=[];function l(e){return(0,n.jsx)(n.Fragment,{})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l()}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>r});var n=a(27378);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1d8d7b8d.8a880efb.js b/assets/js/1d8d7b8d.8a880efb.js new file mode 100644 index 0000000000..08b96a1eba --- /dev/null +++ b/assets/js/1d8d7b8d.8a880efb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[67800],{61132:(e,r,n)=>{n.d(r,{Z:()=>t});var s=n(24246),a=(n(27378),n(40624));const o={tabItem:"tabItem_pnkT"};function t({children:e,hidden:r,className:n}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,n),hidden:r,children:e})}},97555:(e,r,n)=>{n.d(r,{Z:()=>A});var s=n(24246),a=n(27378),o=n(40624),t=n(75527),c=n(3620),i=n(44479),l=n(62821),h=n(52196),d=n(53589);function u(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function p(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function g(e){var r,n;return null!==(n=null===(r=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===r?void 0:r.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:r,children:n}=e;return(0,a.useMemo)((()=>{const e=null!=r?r:function(e){return g(e).map((({props:{value:e,label:r,attributes:n,default:s}})=>({value:e,label:r,attributes:n,default:s})))}(n);return function(e){const r=(0,h.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m({value:e,tabValues:r}){return r.some((r=>r.value===e))}function x({queryString:e=!1,groupId:r}){const n=(0,c.k6)(),s=function({queryString:e=!1,groupId:r}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=r?r:null}({queryString:e,groupId:r}),o=(0,l._X)(s),t=(0,a.useCallback)((e=>{if(!s)return;const r=new URLSearchParams(n.location.search);r.set(s,e),n.replace(p(function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){u(e,r,n[r])}))}return e}({},n.location),{search:r.toString()}))}),[s,n]);return[o,t]}function j(e){const{defaultValue:r,queryString:n=!1,groupId:s}=e,o=f(e),[t,c]=(0,a.useState)((()=>function({defaultValue:e,tabValues:r}){if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const s=null!==(n=r.find((e=>e.default)))&&void 0!==n?n:r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:r,tabValues:o}))),[l,h]=x({queryString:n,groupId:s}),[u,p]=function({groupId:e}){const r=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,d.Nk)(r);return[n,(0,a.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:s}),g=(()=>{const e=null!=l?l:u;return m({value:e,tabValues:o})?e:null})();(0,i.Z)((()=>{g&&c(g)}),[g]);return{selectedValue:t,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),p(e)}),[h,p,o]),tabValues:o}}var y=n(29088);const b={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function v(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){w(e,r,n[r])}))}return e}function S(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function D({className:e,block:r,selectedValue:n,selectValue:a,tabValues:c}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,t.o5)(),h=e=>{const r=e.currentTarget,s=i.indexOf(r),o=c[s].value;o!==n&&(l(r),a(o))},d=e=>{let r=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const s=i.indexOf(e.currentTarget)+1;var n;r=null!==(n=i[s])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var s;r=null!==(s=i[n])&&void 0!==s?s:i[i.length-1];break}}null==r||r.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":r},e),children:c.map((({value:e,label:r,attributes:a})=>(0,s.jsx)("li",S(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:h},a),{className:(0,o.Z)("tabs__item",b.tabItem,null==a?void 0:a.className,{"tabs__item--active":n===e}),children:null!=r?r:e}),e)))})}function k({lazy:e,children:r,selectedValue:n}){const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===n));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:o.map(((e,r)=>(0,a.cloneElement)(e,{key:r,hidden:e.props.value!==n})))})}function O(e){const r=j(e);return(0,s.jsxs)("div",{className:(0,o.Z)("tabs-container",b.tabList),children:[(0,s.jsx)(D,v({},e,r)),(0,s.jsx)(k,v({},e,r))]})}function A(e){const r=(0,y.Z)();return(0,s.jsx)(O,S(v({},e),{children:g(e.children)}),String(r))}},61350:(e,r,n)=>{n.d(r,{Z:()=>s});const s=n.p+"assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg"},82720:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>h,contentTitle:()=>i,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var s=n(24246),a=n(71670),o=n(97555),t=n(61132);const c={keywords:["algolia","search"]},i="Search",l={id:"search",title:"Search",description:"There are a few options you can use to add search to your website:",source:"@site/docs/search.mdx",sourceDirName:".",slug:"/search",permalink:"/docs/search",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/search.mdx",tags:[],version:"current",lastUpdatedBy:"Virgil993",lastUpdatedAt:1713448824e3,frontMatter:{keywords:["algolia","search"]},sidebar:"docs",previous:{title:"Static Assets",permalink:"/docs/static-assets"},next:{title:"Browser support",permalink:"/docs/browser-support"}},h={},d=[{value:"\ud83e\udd47 Using Algolia DocSearch",id:"using-algolia-docsearch",level:2},{value:"Index Configuration",id:"algolia-index-configuration",level:3},{value:"Connecting Algolia",id:"connecting-algolia",level:3},{value:"Contextual search",id:"contextual-search",level:3},{value:"Styling your Algolia search",id:"styling-your-algolia-search",level:3},{value:"Customizing the Algolia search behavior",id:"customizing-the-algolia-search-behavior",level:3},{value:"Editing the Algolia search component",id:"editing-the-algolia-search-component",level:3},{value:"Troubleshooting",id:"algolia-troubleshooting",level:3},{value:"No Search Results",id:"algolia-no-search-results",level:4},{value:"Support",id:"algolia-support",level:3},{value:"\ud83d\udc65 Using Typesense DocSearch",id:"using-typesense-docsearch",level:2},{value:"\ud83d\udc65 Using Local Search",id:"using-local-search",level:2},{value:"\ud83d\udc65 Using your own search",id:"using-your-own-search",level:2}];function u(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components},{Details:c}=r;return c||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"search",children:"Search"}),"\n",(0,s.jsx)(r.p,{children:"There are a few options you can use to add search to your website:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["\ud83e\udd47 ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"})," (",(0,s.jsx)(r.strong,{children:"official"}),")"]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-typesense-docsearch",children:"Typesense DocSearch"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsx)(r.a,{href:"#using-local-search",children:"Local Search"})]}),"\n",(0,s.jsxs)(r.li,{children:["\ud83d\udc65 ",(0,s.jsxs)(r.a,{href:"#using-your-own-search",children:["Your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component"]})]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["\ud83e\udd47 Docusaurus provides ",(0,s.jsx)(r.strong,{children:"first-class support"})," for ",(0,s.jsx)(r.a,{href:"#using-algolia-docsearch",children:"Algolia DocSearch"}),"."]}),(0,s.jsxs)(r.p,{children:["\ud83d\udc65 Other options are ",(0,s.jsx)(r.strong,{children:"maintained by the community"}),": please report bugs to their respective repositories."]})]}),"\n",(0,s.jsx)(r.h2,{id:"using-algolia-docsearch",children:"\ud83e\udd47 Using Algolia DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus has ",(0,s.jsx)(r.strong,{children:"official support"})," for ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com",children:"Algolia DocSearch"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["The service is ",(0,s.jsx)(r.strong,{children:"free"})," for any developer documentation or technical blog: just make sure to read the ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply/",children:"checklist"})," and ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply",children:"apply to the DocSearch program"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"DocSearch crawls your website once a week (the schedule is configurable from the web interface) and aggregates all the content in an Algolia index. This content is then queried directly from your front-end using the Algolia API."}),"\n",(0,s.jsxs)(r.p,{children:["If your website is ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/who-can-apply",children:"not eligible"})," for the free, hosted version of DocSearch, or if your website sits behind a firewall and is not public, then you can ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/run-your-own/",children:"run your own"})," DocSearch crawler."]}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsxs)(r.p,{children:["By default, the Docusaurus preset generates a ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/sitemap.xml",children:"sitemap.xml"})," that the Algolia crawler can use."]})}),"\n",(0,s.jsx)(r.admonition,{title:"From the old docsearch?",type:"info",children:(0,s.jsxs)(r.p,{children:["You can read more about migration from the legacy DocSearch infra in ",(0,s.jsx)(r.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"our blog post"})," or ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/migrating-from-legacy",children:"the DocSearch migration docs"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"algolia-index-configuration",children:"Index Configuration"}),"\n",(0,s.jsxs)(r.p,{children:["After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via ",(0,s.jsx)(r.a,{href:"https://crawler.algolia.com/",children:"the web interface"}),". Indices are readily available after deployment, so manual configuration usually isn't necessary."]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended crawler config",type:"danger",children:(0,s.jsxs)(r.p,{children:["It is highly recommended to use our official ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/templates/#docusaurus-v3-template",children:(0,s.jsx)(r.strong,{children:"Docusaurus v3 crawler configuration"})}),". We cannot support you if you choose a different crawler configuration."]})}),"\n",(0,s.jsxs)(r.admonition,{title:"When updating your crawler config",type:"warning",children:[(0,s.jsxs)(r.p,{children:["The crawler configuration contains a ",(0,s.jsx)(r.code,{children:"initialIndexSettings"}),", which will only be used to initialize your Algolia index if it does not exist yet."]}),(0,s.jsxs)(r.p,{children:["If you update your ",(0,s.jsx)(r.code,{children:"initialIndexSettings"})," crawler setting, it is possible to update the index manually through the interface, but ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/9200#issuecomment-1667338492",children:"the Algolia team recommends to delete your index and then restart a crawl"})," to fully reinitialize it with the new settings."]})]}),"\n",(0,s.jsx)(r.h3,{id:"connecting-algolia",children:"Connecting Algolia"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus' own ",(0,s.jsx)(r.code,{children:"@docusaurus/preset-classic"})," supports Algolia DocSearch integration. If you use the classic preset, no additional installation is needed."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsxs)("summary",{children:["Installation steps when not using ",(0,s.jsx)("code",{children:"@docusaurus/preset-classic"})]}),(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsx)(r.li,{children:"Install the package:"}),"\n"]}),(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn add @docusaurus/theme-search-algolia\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-search-algolia\n"})})})]}),(0,s.jsxs)(r.ol,{start:"2",children:["\n",(0,s.jsxs)(r.li,{children:["Register the theme in ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"}),":"]}),"\n"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'My site',\n // ...\n themes: ['@docusaurus/theme-search-algolia'],\n themeConfig: {\n // ...\n },\n};\n"})})]}),"\n",(0,s.jsxs)(r.p,{children:["Then, add an ",(0,s.jsx)(r.code,{children:"algolia"})," field in your ",(0,s.jsx)(r.code,{children:"themeConfig"}),". ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/apply/",children:"Apply for DocSearch"})})," to get your Algolia index and API key."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n // The application ID provided by Algolia\n appId: 'YOUR_APP_ID',\n\n // Public API key: it is safe to commit it\n apiKey: 'YOUR_SEARCH_API_KEY',\n\n indexName: 'YOUR_INDEX_NAME',\n\n // Optional: see doc section below\n contextualSearch: true,\n\n // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.\n externalUrlRegex: 'external\\\\.com|domain\\\\.com',\n\n // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs\n replaceSearchResultPathname: {\n from: '/docs/', // or as RegExp: /\\/docs\\//\n to: '/',\n },\n\n // Optional: Algolia search parameters\n searchParameters: {},\n\n // Optional: path for search page that enabled by default (`false` to disable it)\n searchPagePath: 'search',\n\n // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default)\n insights: false,\n\n //... other Algolia params\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"searchParameters"})," option used to be named ",(0,s.jsx)(r.code,{children:"algoliaOptions"})," in Docusaurus v1."]}),(0,s.jsxs)(r.p,{children:["Refer to its ",(0,s.jsx)(r.a,{href:"https://docsearch.algolia.com/docs/api#searchparameters",children:"official DocSearch documentation"})," for possible values."]})]}),"\n",(0,s.jsxs)(r.admonition,{type:"warning",children:[(0,s.jsx)(r.p,{children:"The search feature will not work reliably until Algolia crawls your site."}),(0,s.jsxs)(r.p,{children:["If search doesn't work after any significant change, please use the Algolia dashboard to ",(0,s.jsx)(r.strong,{children:"trigger a new crawl"}),"."]})]}),"\n",(0,s.jsx)(r.h3,{id:"contextual-search",children:"Contextual search"}),"\n",(0,s.jsxs)(r.p,{children:["Contextual search is ",(0,s.jsx)(r.strong,{children:"enabled by default"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["It ensures that search results are ",(0,s.jsx)(r.strong,{children:"relevant to the current language and version"}),"."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: true,\n },\n // highlight-end\n },\n};\n"})}),"\n",(0,s.jsxs)(r.p,{children:["Let's consider you have 2 docs versions (",(0,s.jsx)(r.strong,{children:"v1"})," and ",(0,s.jsx)(r.strong,{children:"v2"}),") and 2 languages (",(0,s.jsx)(r.code,{children:"en"})," and ",(0,s.jsx)(r.code,{children:"fr"}),")."]}),"\n",(0,s.jsx)(r.p,{children:"When browsing v2 docs, it would be odd to return search results for the v1 documentation. Sometimes v1 and v2 docs are quite similar, and you would end up with duplicate search results for the same query (one result per version)."}),"\n",(0,s.jsx)(r.p,{children:"Similarly, when browsing the French site, it would be odd to return search results for the English docs."}),"\n",(0,s.jsx)(r.p,{children:"To solve this problem, the contextual search feature understands that you are browsing a specific docs version and language, and will create the search query filters dynamically."}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/en/docs/v1/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"English"})," results for the ",(0,s.jsx)(r.strong,{children:"v1"})," docs (+ other unversioned pages)"]}),"\n",(0,s.jsxs)(r.li,{children:["on ",(0,s.jsx)(r.code,{children:"/fr/docs/v2/myDoc"}),", search results will only include ",(0,s.jsx)(r.strong,{children:"French"})," results for the ",(0,s.jsx)(r.strong,{children:"v2"})," docs (+ other unversioned pages)"]}),"\n"]}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:["When using ",(0,s.jsx)(r.code,{children:"contextualSearch: true"})," (default), the contextual facet filters will be merged with the ones provided with ",(0,s.jsx)(r.code,{children:"algolia.searchParameters.facetFilters"})," ."]}),(0,s.jsxs)(r.p,{children:["For specific needs, you can disable ",(0,s.jsx)(r.code,{children:"contextualSearch"})," and define your own ",(0,s.jsx)(r.code,{children:"facetFilters"}),":"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n themeConfig: {\n // ...\n // highlight-start\n algolia: {\n contextualSearch: false,\n searchParameters: {\n facetFilters: ['language:en', ['filter1', 'filter2'], 'filter3'],\n },\n },\n // highlight-end\n },\n};\n"})}),(0,s.jsxs)(r.p,{children:["Refer to the relevant ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting documentation"}),"."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Contextual search doesn't work?",type:"warning",children:(0,s.jsxs)(r.p,{children:["If you only get search results when Contextual Search is disabled, this is very likely because of an ",(0,s.jsx)(r.a,{href:"#algolia-no-search-results",children:"index configuration issue"}),"."]})}),"\n",(0,s.jsx)(r.h3,{id:"styling-your-algolia-search",children:"Styling your Algolia search"}),"\n",(0,s.jsx)(r.p,{children:"By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards."}),"\n",(0,s.jsxs)(r.p,{children:["Still, you can reuse the ",(0,s.jsx)(r.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima CSS variables"})," from Docusaurus to style DocSearch by editing the ",(0,s.jsx)(r.code,{children:"/src/css/custom.css"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"[data-theme='light'] .DocSearch {\n /* --docsearch-primary-color: var(--ifm-color-primary); */\n /* --docsearch-text-color: var(--ifm-font-color-base); */\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(94, 100, 112, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-color-secondary-lighter);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-color-secondary);\n --docsearch-searchbox-focus-background: var(--ifm-color-white);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-white);\n /* Footer */\n --docsearch-footer-background: var(--ifm-color-white);\n}\n\n[data-theme='dark'] .DocSearch {\n --docsearch-text-color: var(--ifm-font-color-base);\n --docsearch-muted-color: var(--ifm-color-secondary-darkest);\n --docsearch-container-background: rgba(47, 55, 69, 0.7);\n /* Modal */\n --docsearch-modal-background: var(--ifm-background-color);\n /* Search box */\n --docsearch-searchbox-background: var(--ifm-background-color);\n --docsearch-searchbox-focus-background: var(--ifm-color-black);\n /* Hit */\n --docsearch-hit-color: var(--ifm-font-color-base);\n --docsearch-hit-active-color: var(--ifm-color-white);\n --docsearch-hit-background: var(--ifm-color-emphasis-100);\n /* Footer */\n --docsearch-footer-background: var(--ifm-background-surface-color);\n --docsearch-key-gradient: linear-gradient(\n -26.5deg,\n var(--ifm-color-emphasis-200) 0%,\n var(--ifm-color-emphasis-100) 100%\n );\n}\n"})}),"\n",(0,s.jsx)(r.h3,{id:"customizing-the-algolia-search-behavior",children:"Customizing the Algolia search behavior"}),"\n","\n",(0,s.jsxs)(r.p,{children:["Algolia DocSearch supports a ",(0,s.jsx)(r.a,{href:"https://autocomplete-experimental.netlify.app/docs/DocSearchModal#reference",children:"list of options"})," that you can pass to the ",(0,s.jsx)(r.code,{children:"algolia"})," field in the ",(0,s.jsx)(r.code,{children:"docusaurus.config.js"})," file."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n // ...\n algolia: {\n apiKey: 'YOUR_API_KEY',\n indexName: 'YOUR_INDEX_NAME',\n // Options...\n },\n },\n};\n"})}),"\n",(0,s.jsx)(r.h3,{id:"editing-the-algolia-search-component",children:"Editing the Algolia search component"}),"\n",(0,s.jsxs)(r.p,{children:["If you prefer to edit the Algolia search React component, ",(0,s.jsx)(r.a,{href:"/docs/swizzling",children:"swizzle"})," the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-search-algolia"}),":"]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-search-algolia SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-search-algolia SearchBar\n"})})})]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(r.p,{children:"Here are the most common issues Docusaurus users face when using Algolia DocSearch."}),"\n",(0,s.jsx)(r.h4,{id:"algolia-no-search-results",children:"No Search Results"}),"\n",(0,s.jsxs)(r.p,{children:["Seeing no search results is usually related to an ",(0,s.jsx)(r.strong,{children:"index configuration problem"}),"."]}),"\n",(0,s.jsxs)(c,{children:[(0,s.jsx)("summary",{children:"How to check if I have an config problem?"}),(0,s.jsxs)(r.p,{children:["Docusaurus uses ",(0,s.jsx)(r.a,{href:"https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/",children:"Algolia faceting"})," for its ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," feature, to create dynamic queries such as:"]}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-json",children:'[\n "language:en",\n [\n "docusaurus_tag:default",\n "docusaurus_tag:docs-default-3.2.1",\n "docusaurus_tag:docs-community-current",\n "docusaurus_tag:docs-docs-tests-current"\n ]\n]\n'})}),(0,s.jsxs)(r.p,{children:["On the Algolia UI, your index should allow to create facet queries on fields ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"}),", as shown in the screenshot below:"]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"Algolia index showing appropriate faceting fields",src:n(61350).Z+"",width:"1072",height:"1761"})}),(0,s.jsxs)(r.p,{children:["Alternatively, if you disable ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," with ",(0,s.jsx)(r.code,{children:"{contextualSearch: false}"})," (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results."]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Use the recommended configuration",type:"danger",children:(0,s.jsxs)(r.p,{children:["We ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend a specific crawler configuration"})," for a good reason. We cannot support you if you choose to use a different configuration."]})}),"\n",(0,s.jsx)(r.p,{children:"You can fix index configuration problems by following those steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["Use the ",(0,s.jsx)(r.a,{href:"#algolia-index-configuration",children:"recommend crawler configuration"})]}),"\n",(0,s.jsx)(r.li,{children:"Delete your index through the UI"}),"\n",(0,s.jsx)(r.li,{children:"Trigger a new crawl through the UI"}),"\n",(0,s.jsxs)(r.li,{children:["Check your index is recreated with the appropriate faceting fields: ",(0,s.jsx)(r.code,{children:"docusaurus_tag"}),", ",(0,s.jsx)(r.code,{children:"language"}),", ",(0,s.jsx)(r.code,{children:"lang"}),", ",(0,s.jsx)(r.code,{children:"version"}),", ",(0,s.jsx)(r.code,{children:"type"})]}),"\n",(0,s.jsxs)(r.li,{children:["See that you now get search results, even with ",(0,s.jsx)(r.a,{href:"#contextual-search",children:"Contextual Search"})," enabled"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"algolia-support",children:"Support"}),"\n",(0,s.jsx)(r.p,{children:"The Algolia DocSearch team can help you figure out search problems on your site."}),"\n",(0,s.jsxs)(r.p,{children:["You can reach out to Algolia via ",(0,s.jsx)(r.a,{href:"https://algolia.com/support",children:"their support page"})," or on ",(0,s.jsx)(r.a,{href:"https://discord.gg/wr2m5j948P",children:"Discord"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus also has an ",(0,s.jsx)(r.code,{children:"#algolia"})," channel on ",(0,s.jsx)(r.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-typesense-docsearch",children:"\ud83d\udc65 Using Typesense DocSearch"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org",children:"Typesense"})," DocSearch works similar to Algolia DocSearch, except that your website is indexed into a Typesense search cluster."]}),"\n",(0,s.jsxs)(r.p,{children:["Typesense is an ",(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense",children:"open source"})," instant-search engine that you can either:"]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://typesense.org/docs/latest/guide/install-typesense.html#option-2-local-machine-self-hosting",children:"Self-Host"})," on your own servers or"]}),"\n",(0,s.jsxs)(r.li,{children:["Use the Managed ",(0,s.jsx)(r.a,{href:"https://cloud.typesense.org",children:"Typesense Cloud"})," service."]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Similar to Algolia DocSearch, there are two components:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/typesense-docsearch-scraper",children:"typesense-docsearch-scraper"})," - which scrapes your website and indexes the data in your Typesense cluster."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - a search bar UI component to add to your website."]}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["Read a step-by-step walk-through of how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/latest/guide/docsearch.html#step-1-set-up-docsearch-scraper",children:"run typesense-docsearch-scraper here"})," and how to ",(0,s.jsx)(r.a,{href:"https://typesense.org/docs/latest/guide/docsearch.html#option-a-docusaurus-powered-sites",children:"install the Search Bar in your Docusaurus Site here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-local-search",children:"\ud83d\udc65 Using Local Search"}),"\n",(0,s.jsx)(r.p,{children:"You can use a local search plugin for websites where the search index is small and can be downloaded to your users' browsers when they visit your website."}),"\n",(0,s.jsxs)(r.p,{children:["You'll find a list of community-supported ",(0,s.jsx)(r.a,{href:"https://docusaurus.io/community/resources#search",children:"local search plugins listed here"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"using-your-own-search",children:"\ud83d\udc65 Using your own search"}),"\n",(0,s.jsxs)(r.p,{children:["To use your own search, swizzle the ",(0,s.jsx)(r.code,{children:"SearchBar"})," component in ",(0,s.jsx)(r.code,{children:"@docusaurus/theme-classic"})]}),"\n",(0,s.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(t.Z,{value:"npm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic SearchBar\n"})})}),(0,s.jsx)(t.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic SearchBar\n"})})})]}),"\n",(0,s.jsxs)(r.p,{children:["This will create an ",(0,s.jsx)(r.code,{children:"src/theme/SearchBar"})," file in your project folder. Restart your dev server and edit the component, you will see that Docusaurus uses your own ",(0,s.jsx)(r.code,{children:"SearchBar"})," component now."]}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Notes"}),": You can alternatively ",(0,s.jsx)(r.a,{href:"#editing-the-algolia-search-component",children:"swizzle from Algolia SearchBar"})," and create your own search component from there."]})]})}function p(e={}){const{wrapper:r}={...(0,a.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>c,a:()=>t});var s=n(27378);const a={},o=s.createContext(a);function t(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1dd15aef.b35f7508.js b/assets/js/1dd15aef.b35f7508.js new file mode 100644 index 0000000000..eafc51f591 --- /dev/null +++ b/assets/js/1dd15aef.b35f7508.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42114],{26778:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=a(24246),o=a(71670);const r={mdx:{format:"md"},date:"2020-06-18T19:00"},c="2.0.0-alpha.57",s={permalink:"/changelog/2.0.0-alpha.57",source:"@site/changelog/source/2.0.0-alpha.57.md",title:"2.0.0-alpha.57",description:"Bad release, check ## 2.0.0-alpha.58",date:"2020-06-18T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2020-06-18T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.58",permalink:"/changelog/2.0.0-alpha.58"},nextItem:{title:"2.0.0-alpha.56",permalink:"/changelog/2.0.0-alpha.56"},listPageLink:"/changelog/page/3"},l={authorsImageUrls:[]},p=[];function i(e){const t={p:"p",...(0,o.a)(),...e.components};return(0,n.jsx)(t.p,{children:"Bad release, check ## 2.0.0-alpha.58"})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>c});var n=a(27378);const o={},r=n.createContext(o);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.839c1f75.js b/assets/js/1df93b7f.839c1f75.js new file mode 100644 index 0000000000..b1dad8fb9b --- /dev/null +++ b/assets/js/1df93b7f.839c1f75.js @@ -0,0 +1,2 @@ +/*! For license information please see 1df93b7f.839c1f75.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53237],{28475:(e,t,a)=>{"use strict";a.d(t,{Z:()=>n});var s=a(27378),r=function(){return r=Object.assign||function(e){for(var t,a=1,s=arguments.length;a<s;a++)for(var r in t=arguments[a])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},r.apply(this,arguments)};function n(e){var t=s.useState(!1),a=t[0],n=t[1],o=s.useState(!1),i=o[0],c=o[1],l=encodeURIComponent(e.id),h="string"==typeof e.playlistCoverId?encodeURIComponent(e.playlistCoverId):null,d=e.title,u=e.poster||"hqdefault",m="&"+e.params||0,g=e.muted?"&mute=1":"",p=e.announce||"Watch",A=e.webp?"webp":"jpg",b=e.webp?"vi_webp":"vi",w=e.thumbnail||(e.playlist?"https://i.ytimg.com/"+b+"/"+h+"/"+u+"."+A:"https://i.ytimg.com/"+b+"/"+l+"/"+u+"."+A),j=e.noCookie;j=e.cookie?"https://www.youtube.com":"https://www.youtube-nocookie.com";var x=e.playlist?j+"/embed/videoseries?autoplay=1"+g+"&list="+l+m:j+"/embed/"+l+"?autoplay=1&state=1"+g+m,f=e.activatedClass||"lyt-activated",y=e.adNetwork||!1,v=e.aspectHeight||9,C=e.aspectWidth||16,k=e.iframeClass||"",I=e.playerClass||"lty-playbtn",O=e.wrapperClass||"yt-lite",B=e.onIframeAdded||function(){},N=e.rel?"prefetch":"preload";return s.useEffect((function(){i&&B()}),[i]),s.createElement(s.Fragment,null,s.createElement("link",{rel:N,href:w,as:"image"}),s.createElement(s.Fragment,null,a&&s.createElement(s.Fragment,null,s.createElement("link",{rel:"preconnect",href:j}),s.createElement("link",{rel:"preconnect",href:"https://www.google.com"}),y&&s.createElement(s.Fragment,null,s.createElement("link",{rel:"preconnect",href:"https://static.doubleclick.net"}),s.createElement("link",{rel:"preconnect",href:"https://googleads.g.doubleclick.net"})))),s.createElement("article",{onPointerOver:function(){a||n(!0)},onClick:function(){i||c(!0)},className:O+" "+(i?f:""),"data-title":d,style:r({backgroundImage:"url("+w+")"},{"--aspect-ratio":v/C*100+"%"})},s.createElement("button",{type:"button",className:I,"aria-label":p+" "+d}),i&&s.createElement("iframe",{className:k,title:d,width:"560",height:"315",frameBorder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,src:x})))}},46768:(e,t,a)=>{"use strict";a.d(t,{Z:()=>d});var s=a(24246),r=(a(27378),a(66222)),n=a(36712);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{},s=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),s.forEach((function(t){o(e,t,a[t])}))}return e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))})),e}function l(e,t){if(null==e)return{};var a,s,r=function(e,t){if(null==e)return{};var a,s,r={},n=Object.keys(e);for(s=0;s<n.length;s++)a=n[s],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s<n.length;s++)a=n[s],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function h(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,n.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:a}=e,s=a?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const a=Math.floor(Math.log(e)/Math.log(1024));return 0===a?`${e} ${t[a]}`:`${(e/1024**a).toFixed(1)} ${t[a]}`}(a)})`:"";return(0,n.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:s})}case"offline":return(0,n.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,n.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,n.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function d(e){const{img:t}=e,a=l(e,["img"]);return"string"==typeof t||"default"in t?(0,s.jsx)("img",i({src:"string"==typeof t?t:t.default},a)):(0,s.jsx)(r.Z,c(i({},a),{height:null!==(n=t.src.height)&&void 0!==n?n:100,width:null!==(o=t.src.width)&&void 0!==o?o:100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>c(i({},e),{src:e.path}))),getMessage:h}));var n,o}},57774:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>N});var s=a(24246),r=a(27378),n=a(40624),o=a(28475),i=a(41428),c=a(36712),l=a(4423),h=a(66448),d=a(46768),u=a(88613);const m={tweet:"tweet_x2tn",tweetMeta:"tweetMeta_fAxr"};function g({url:e,handle:t,name:a,content:r,date:o,githubUsername:c}){return(0,s.jsxs)("div",{className:(0,n.Z)("card",m.tweet),children:[(0,s.jsx)("div",{className:"card__header",children:(0,s.jsxs)("div",{className:"avatar",children:[(0,s.jsx)("img",{alt:a,className:"avatar__photo",src:`https://unavatar.io/twitter/${t}?fallback=https://github.com/${c}.png`,width:"48",height:"48",loading:"lazy"}),(0,s.jsxs)("div",{className:(0,n.Z)("avatar__intro",m.tweetMeta),children:[(0,s.jsx)("strong",{className:"avatar__name",children:a}),(0,s.jsxs)("span",{children:["@",t]})]})]})}),(0,s.jsx)("div",{className:(0,n.Z)("card__body",m.tweet),children:r}),(0,s.jsx)("div",{className:"card__footer",children:(0,s.jsx)(i.Z,{className:(0,n.Z)(m.tweetMeta,m.tweetDate),to:e,children:o})})]})}const p=[{url:"https://twitter.com/acemarke/status/1452725153998245891",handle:"acemarke",name:"Mark Erikson",date:"Oct 26, 2021",content:(0,s.jsx)(s.Fragment,{children:"We've been using Docusaurus for all the Redux org docs sites for the last couple years, and it's great! We've been able to focus on content, customize some presentation and features, and It Just Works."}),showOnHomepage:!0,githubUsername:"markerikson"},{url:"https://twitter.com/arcanis/status/1351620354561732608",handle:"arcanis",name:"Ma\xebl",date:"Jan 20, 2021",content:(0,s.jsx)(s.Fragment,{children:"I've used Docusaurus for two websites this year, and I've been very happy about the v2. Looks good, and simple to setup."}),showOnHomepage:!0,githubUsername:"arcanis"},{url:"https://twitter.com/maxlynch/status/1375113166007455748",handle:"maxlynch",name:"Max Lynch",date:"Mar 25, 2021",content:(0,s.jsx)(s.Fragment,{children:"Docusaurus v2 doubles as a really nice little static site generator tool for content-focused sites, love it \ud83d\udc4f"}),showOnHomepage:!0,githubUsername:"mlynch"},{url:"https://twitter.com/supabase/status/1328960757149671425",handle:"supabase",name:"Supabase",date:"Nov 18, 2020",content:(0,s.jsxs)(s.Fragment,{children:["We've been using V2 since January and it has been great - we spend less time building documentation and more time building \ud83d\udef3",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Thanks ",(0,s.jsx)("b",{children:"@docusaurus"})," team \ud83e\udd96"]}),showOnHomepage:!0,githubUsername:"supabase"},{url:"https://twitter.com/paularmstrong/status/1387059593373700100",handle:"paularmstrong",name:"Paul Armstrong",date:"Apr 27, 2021",content:(0,s.jsx)(s.Fragment,{children:"Continue to be impressed and excited about Docusaurus v2 alpha releases. Already using the sidebar items generator to help monorepo workspace devs create their own doc pages without any configuration needed."}),showOnHomepage:!0,githubUsername:"paularmstrong"},{url:"https://twitter.com/sanketsahu/status/1328677366642528257",handle:"sanketsahu",name:"Sanket Sahu",date:"Nov 17, 2020",content:(0,s.jsxs)(s.Fragment,{children:[".",(0,s.jsx)("b",{children:"@docusaurus"})," \u2764\ufe0f"]}),showOnHomepage:!1,githubUsername:"sanketsahu"},{url:"https://twitter.com/debs_obrien/status/1374615572298801155",handle:"debs_obrien",name:"Debbie O'Brien",date:"Mar 24, 2021",content:(0,s.jsxs)(s.Fragment,{children:["Been doing a lot of work with ",(0,s.jsx)("b",{children:"@docusaurus"})," lately and I have to say it is really fun to work with. A lot of really cool features. I love that you can easily reuse content by creating a markdown file and importing it as a component. \ud83d\udd25"]}),showOnHomepage:!0,githubUsername:"debs-obrien"},{url:"https://twitter.com/Dr_Electron/status/1443635328376508433",handle:"Dr_Electron",name:"Dr.Electron",date:"Oct 11, 2021",content:(0,s.jsxs)(s.Fragment,{children:["The #IOTA wiki is now part of the ",(0,s.jsx)("b",{children:"@docusaurus"})," showcase. We even have the honor of being a favorite. We are really happy that we found this project. It helped us a lot to improve the documentation. And we still have a lot of plans with things like tutorials, versioning and i8n."]}),showOnHomepage:!0,githubUsername:"Dr-Electron"},{url:"https://twitter.com/kentcdodds/status/1323806816019468288",handle:"kentcdodds",name:"Kent C. Dodds",date:"Nov 4, 2020",content:(0,s.jsxs)(s.Fragment,{children:["http://testing-library.com just got a nice update! We're now on the latest version of ",(0,s.jsx)("b",{children:"@docusaurus"})," thanks to @matanbobi, @TensorNo, and @nickemccurdy \ud83d\udc99",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"My favorite new feature: dark mode!! \ud83c\udf11/\u2600\ufe0f"]}),showOnHomepage:!0,githubUsername:"kentcdodds"},{url:"https://twitter.com/bantg/status/1463608561368457225",handle:"bantg",name:"banteg",date:"Nov 25, 2021",content:(0,s.jsx)(s.Fragment,{children:"I like docusaurus much more, it's so snappy."}),showOnHomepage:!1,githubUsername:"banteg"},{url:"https://twitter.com/swyx/status/1418405515684581378",handle:"swyx",name:"swyx",date:"Jul 23, 2021",content:(0,s.jsxs)(s.Fragment,{children:["Happy to share Temporal's first open source sponsorship \u2014 of"," ",(0,s.jsx)("b",{children:"@docusaurus"}),"!",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"@temporalio uses it for http://docs.temporal.io, and it has been a huge boon to our docs team. @sebastienlorber is an incredible steward of the project, support it if you can!"]}),showOnHomepage:!0,githubUsername:"sw-yx"},{url:"https://twitter.com/rachelnabors/status/1478490902037467137",handle:"rachelnabors",name:"R 'Nearest' Nabors \ud83d\udc99",date:"Jan 5, 2022",content:(0,s.jsxs)(s.Fragment,{children:["I hear ",(0,s.jsx)("b",{children:"@docusaurus"})," is a good tool for that!"]}),showOnHomepage:!1,githubUsername:"rachelnabors"},{url:"https://twitter.com/dabit3/status/1394685348375052295",handle:"dabit3",name:"Nader Dabit",date:"May 19, 2021",content:(0,s.jsx)(s.Fragment,{children:"I did try Docusaurus, and I really liked it! Still investigating various options but it's probably at the top of my list for sure"}),showOnHomepage:!1,githubUsername:"dabit3"},{url:"https://twitter.com/johnny_reilly/status/1469238609266028545",handle:"johnny_reilly",name:"John Reilly",date:"Dec 10, 2021",content:(0,s.jsxs)(s.Fragment,{children:["I \u2764\ufe0f ",(0,s.jsx)("b",{children:"@docusaurus"})," - it makes it so easy to spin up docs, blogs and simple websites. I've used it to:",(0,s.jsx)("br",{}),(0,s.jsx)("br",{})," \u2705 Replatform my blog with GitHub pages ",(0,s.jsx)("br",{}),"\u2705 Build a website for a local business ",(0,s.jsx)("br",{}),"\u2705 Build internal facing blog/docs sites with @AzureStaticApps"]}),showOnHomepage:!1,githubUsername:"johnnyreilly"},{url:"https://twitter.com/tinkertim/status/1423358665726304260",handle:"tinkertim",name:"Tim Post \ud83d\udc89\ud83d\udc89\ud83d\udc89",date:"Aug 6, 2021",content:(0,s.jsxs)(s.Fragment,{children:["Docusaurus is mind-bendingly flexible. ",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),'"Wait! We need to have two products documented on the same site and both need to be translated into multiple languages!"',(0,s.jsx)("br",{}),(0,s.jsx)("br",{})," ... and that's actually easy. Loving it!"]}),showOnHomepage:!1,githubUsername:"tinkertim"},{url:"https://twitter.com/sebastienlorber/status/1321784071815680000",handle:"sebastienlorber",name:"Sebastien Lorber",date:"Oct 29, 2020",content:(0,s.jsxs)(s.Fragment,{children:["\ud83e\udd73\ud83c\udf8a\ud83e\udd73\ud83c\udf8a\ud83e\udd73\ud83c\udf8a\ud83e\udd73\ud83c\udf8a The @reactnative website just migrated to"," ",(0,s.jsx)("b",{children:"@docusaurus"}),"v2",(0,s.jsx)("br",{}),"Some obvious changes: ",(0,s.jsx)("br",{}),"\ud83c\udf14 Dark mode ",(0,s.jsx)("br",{}),"\u26a1\ufe0f SPA navigation / prefetching ",(0,s.jsx)("br",{}),"\ud83e\uddd0 @algolia DocSearch v3 ",(0,s.jsx)("br",{}),"\ud83d\udca5 @mdx_js enable many new possibilities ",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Check it out: http://reactnative.dev"]}),showOnHomepage:!1,githubUsername:"slorber"},{url:"https://twitter.com/iansu/status/1184149586048245760",handle:"iansu",name:"Ian Sutherland",date:"Oct 16, 2019",content:(0,s.jsxs)(s.Fragment,{children:["We just updated the Create React App docs to Docusaurus v2. Now with dark mode! \ud83d\ude0e",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Thanks to the ",(0,s.jsx)("b",{children:"@docusaurus"})," team for their help! \u2764\ufe0f",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"https://create-react-app.dev"]}),showOnHomepage:!1,githubUsername:"iansu"},{url:"https://twitter.com/mweststrate/status/1181276252293853186",handle:"mweststrate",name:"Michel Weststrate",date:"Oct 8, 2019",content:(0,s.jsxs)(s.Fragment,{children:["New #mobx docs are online! More modern, fixing many UI issues.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"\ud83d\udc4f @cloverich did the awesome job of migrating from ancient gitbook -> ",(0,s.jsx)("b",{children:"@docusaurus"}),"! \ud83d\udc4f ",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"No real content updates yet, but contributing and publishing has become way easier"]}),showOnHomepage:!1,githubUsername:"mweststrate"},{url:"https://twitter.com/verdaccio_npm/status/1420187249145118722",handle:"verdaccio_npm",name:"verdaccio",date:"Jul 28, 2021",content:(0,s.jsxs)(s.Fragment,{children:["The new website has landed \ud83d\ude80 powered by ",(0,s.jsx)("b",{children:"@docusaurus"})," v2 and made by @_semoal kudos to him \ud83d\udc4f #verdaccio #nodejs awesome contribution \u2764\ufe0f\u200d\ud83d\udd25 (video made with react remotion @JNYBGR ) all Open Source and hosted on @Netlify https://verdaccio.org"]}),showOnHomepage:!1,githubUsername:"verdaccio"},{url:"https://twitter.com/yangshunz/status/1284536949718478848",handle:"yangshunz",name:"Yangshun Tay",date:"Jul 19, 2020",content:(0,s.jsxs)(s.Fragment,{children:["I made a ",(0,s.jsx)("b",{children:"@docusaurus"})," website for answers to the H5BP Front End Interview Questions! Hopefully it makes the browsing experience easier - https://frontendinterviewhandbook.com"]}),showOnHomepage:!1,githubUsername:"yangshun"},{url:"https://twitter.com/pierregillesl/status/1372839188698001408",handle:"pierregillesl",name:"Pierre-Gilles Leymarie",date:"Mar 19, 2021",content:(0,s.jsxs)(s.Fragment,{children:["Just upgraded our website to ",(0,s.jsx)("b",{children:"@docusaurus"})," latest with internationalization support \ud83e\udd73",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Before that, we had to build 2 separate versions of the website to get it in English + French.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Now, it's working out of the box, with proper meta tags for SEO \ud83d\udc4c"]}),showOnHomepage:!1,githubUsername:"Pierre-Gilles"},{url:"https://twitter.com/biantris_/status/1480259279487741953",handle:"biantris_",name:"biazita",date:"Jan 10, 2022",content:(0,s.jsxs)(s.Fragment,{children:["Today I tried ",(0,s.jsx)("b",{children:"@docusaurus"})," in a project, I really like the ease and speed of developing with it \\o/"]}),showOnHomepage:!1,githubUsername:"biantris"}],A=[{thumbnail:a(74833),name:'Christopher "vjeux" Chedeau',title:(0,c.I)({id:"homepage.quotes.christopher-chedeau.title",message:"Lead Prettier Developer",description:"Title of quote of Christopher Chedeau on the home page"}),text:(0,s.jsx)(c.Z,{id:"homepage.quotes.christopher-chedeau",description:"Quote of Christopher Chedeau on the home page",children:"I've helped open source many projects at Facebook and every one needed a website. They all had very similar constraints: the documentation should be written in markdown and be deployed via GitHub pages. I\u2019m so glad that Docusaurus now exists so that I don\u2019t have to spend a week each time spinning up a new one."})},{thumbnail:a(77478),name:"Hector Ramos",title:(0,c.I)({id:"homepage.quotes.hector-ramos.title",message:"Lead React Native Advocate",description:"Title of quote of Hector Ramos on the home page"}),text:(0,s.jsx)(c.Z,{id:"homepage.quotes.hector-ramos",description:"Quote of Hector Ramos on the home page",children:"Open source contributions to the React Native docs have skyrocketed after our move to Docusaurus. The docs are now hosted on a small repo in plain markdown, with none of the clutter that a typical static site generator would require. Thanks Slash!"})},{thumbnail:a(90103),name:"Ricky Vetter",title:(0,c.I)({id:"homepage.quotes.risky-vetter.title",message:"ReasonReact Developer",description:"Title of quote of Ricky Vetter on the home page"}),text:(0,s.jsx)(c.Z,{id:"homepage.quotes.risky-vetter",description:"Quote of Ricky Vetter on the home page",children:"Docusaurus has been a great choice for the ReasonML family of projects. It makes our documentation consistent, i18n-friendly, easy to maintain, and friendly for new contributors."})}],b=[{title:(0,c.I)({message:"Powered by MDX",id:"homepage.features.powered-by-mdx.title"}),image:{src:"/img/undraw_typewriter.svg",width:1009.54,height:717.96},text:(0,s.jsx)(c.Z,{id:"homepage.features.powered-by-mdx.text",children:"Save time and focus on text documents. Simply write docs and blog posts with MDX, and Docusaurus builds them into static HTML files ready to be served. You can even embed React components in your Markdown thanks to MDX."})},{title:(0,c.I)({message:"Built Using React",id:"homepage.features.built-using-react.title"}),image:{src:"/img/undraw_react.svg",width:1108,height:731.18},text:(0,s.jsx)(c.Z,{id:"homepage.features.built-using-react.text",children:"Extend and customize your project's layout by writing React components. Leverage the pluggable architecture, and design your own site while reusing the same data created by Docusaurus plugins."})},{title:(0,c.I)({message:"Ready for Translations",id:"homepage.features.ready-for-translations.title"}),image:{src:"/img/undraw_around_the_world.svg",width:1137,height:776.59},text:(0,s.jsx)(c.Z,{id:"homepage.features.ready-for-translations.text",children:"Localization comes out-of-the-box. Use git, Crowdin, or any other translation manager to translate your docs and deploy them individually."})},{title:(0,c.I)({message:"Document Versioning",id:"homepage.features.document-versioning.title"}),image:{src:"/img/undraw_version_control.svg",width:1038.23,height:693.31},text:(0,s.jsx)(c.Z,{id:"homepage.features.document-versioning.text",children:"Support users on all versions of your project. Document versioning helps you keep documentation in sync with project releases."})},{title:(0,c.I)({message:"Content Search",id:"homepage.features.content-search.title"}),image:{src:"/img/undraw_algolia.svg",width:1137.97,height:736.21},text:(0,s.jsx)(c.Z,{id:"homepage.features.content-search.text",children:"Make it easy for your community to find what they need in your documentation. We proudly support Algolia documentation search."})}];var w=a(52615);const j={section:"section_rC2D",sectionAlt:"sectionAlt_XiGz",sectionInner:"sectionInner_Y4r1",featureImage:"featureImage_yA8i",featureHeading:"featureHeading_TLGJ",announcement:"announcement_FsS0",announcementDark:"announcementDark_tzC4",announcementInner:"announcementInner_RsrQ",topBanner:"topBanner_JYZy",topBannerTitle:"topBannerTitle_nAZL",topBannerTitleText:"topBannerTitleText_Ferb",topBannerDescription:"topBannerDescription_fLgs",hero:"hero_syme",heroInner:"heroInner_VWeJ",heroProjectTagline:"heroProjectTagline_EkV5",heroTitleTextHtml:"heroTitleTextHtml_zYwv",heroLogo:"heroLogo_jM6J","jack-in-the-box":"jack-in-the-box_cF72",indexCtas:"indexCtas_hUA_",indexCtasGitHubButtonWrapper:"indexCtasGitHubButtonWrapper_AOht",indexCtasGitHubButton:"indexCtasGitHubButton_sMIS",indexCtaTryNowButton:"indexCtaTryNowButton_wlFR",tweetsSection:"tweetsSection_Fqsy","test-marker-site-index-page":"test-marker-site-index-page_LJ7R"};function x(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))})),e}function y(){return(0,s.jsx)("div",{className:j.hero,"data-theme":"dark",children:(0,s.jsxs)("div",{className:j.heroInner,children:[(0,s.jsxs)(w.Z,{as:"h1",className:j.heroProjectTagline,children:[(0,s.jsx)("img",{alt:(0,c.I)({message:"Docusaurus with Keytar"}),className:j.heroLogo,src:(0,h.Z)("/img/docusaurus_keytar.svg"),width:"200",height:"200"}),(0,s.jsx)("span",{className:j.heroTitleTextHtml,dangerouslySetInnerHTML:{__html:(0,c.I)({id:"homepage.hero.title",message:"Build <b>optimized</b> websites <b>quickly</b>, focus on your <b>content</b>",description:"Home page hero title, can contain simple html tags"})}})]}),(0,s.jsxs)("div",{className:j.indexCtas,children:[(0,s.jsx)(i.Z,{className:"button button--primary",to:"/docs",children:(0,s.jsx)(c.Z,{children:"Get Started"})}),(0,s.jsx)(i.Z,{className:"button button--info",to:"https://docusaurus.new",children:(0,s.jsx)(c.Z,{children:"Try a Demo"})}),(0,s.jsx)("span",{className:j.indexCtasGitHubButtonWrapper,children:(0,s.jsx)("iframe",{className:j.indexCtasGitHubButton,src:"https://ghbtns.com/github-btn.html?user=facebook&repo=docusaurus&type=star&count=true&size=large",width:160,height:30,title:"GitHub Stars"})})]})]})})}function v(){const e=[[],[],[]];return p.filter((e=>e.showOnHomepage)).forEach(((t,a)=>e[a%3].push(t))),(0,s.jsx)("div",{className:(0,n.Z)(j.section,j.sectionAlt),children:(0,s.jsxs)("div",{className:"container",children:[(0,s.jsx)(w.Z,{as:"h2",className:(0,n.Z)("margin-bottom--lg","text--center"),children:(0,s.jsx)(c.Z,{children:"Loved by many engineers"})}),(0,s.jsx)("div",{className:(0,n.Z)("row",j.tweetsSection),children:e.map(((e,t)=>(0,s.jsx)("div",{className:"col col--4",children:e.map((e=>(0,r.createElement)(g,f(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{},s=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),s.forEach((function(t){x(e,t,a[t])}))}return e}({},e),{key:e.url}))))},t)))})]})})}function C(){return(0,s.jsx)("div",{className:(0,n.Z)(j.section),children:(0,s.jsx)("div",{className:"container",children:(0,s.jsx)("div",{className:"row",children:A.map((e=>(0,s.jsxs)("div",{className:"col",children:[(0,s.jsxs)("div",{className:"avatar avatar--vertical margin-bottom--sm",children:[(0,s.jsx)(d.Z,{alt:e.name,className:"avatar__photo avatar__photo--xl",img:e.thumbnail,style:{overflow:"hidden"}}),(0,s.jsxs)("div",{className:"avatar__intro padding-top--sm",children:[(0,s.jsx)("div",{className:"avatar__name",children:e.name}),(0,s.jsx)("small",{className:"avatar__subtitle",children:e.title})]})]}),(0,s.jsx)("p",{className:"text--center text--italic padding-horiz--md",children:e.text})]},e.name)))})})})}function k(){return(0,s.jsx)("div",{className:"container text--center margin-top--xl",children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col",children:[(0,s.jsx)(w.Z,{as:"h2",children:(0,s.jsx)(c.Z,{children:"Check it out in the intro video"})}),(0,s.jsx)("div",{className:"video-container",children:(0,s.jsx)(o.Z,{id:"_An9EsKPhp0",params:"autoplay=1&autohide=1&showinfo=0&rel=0",title:"Explain Like I'm 5: Docusaurus",poster:"maxresdefault",webp:!0})})]})})})}function I({feature:e,className:t}){const{withBaseUrl:a}=(0,h.C)();return(0,s.jsxs)("div",{className:(0,n.Z)("col",t),children:[(0,s.jsx)("img",{className:j.featureImage,alt:e.title,width:Math.floor(e.image.width),height:Math.floor(e.image.height),src:a(e.image.src),loading:"lazy"}),(0,s.jsx)(w.Z,{as:"h3",className:(0,n.Z)(j.featureHeading),children:e.title}),(0,s.jsx)("p",{className:"padding-horiz--md",children:e.text})]})}function O(){const e=b.slice(0,3),t=b.slice(3);return(0,s.jsxs)("div",{className:"container text--center",children:[(0,s.jsx)("div",{className:"row margin-top--lg margin-bottom--lg",children:e.map(((e,t)=>(0,s.jsx)(I,{feature:e},t)))}),(0,s.jsx)("div",{className:"row",children:t.map(((e,t)=>(0,s.jsx)(I,{feature:e,className:(0,n.Z)("col--4",0===t&&"col--offset-2")},t)))})]})}function B(){return(0,s.jsx)("div",{className:j.topBanner,children:(0,s.jsxs)("div",{className:j.topBannerTitle,children:["\ud83c\udf89\xa0",(0,s.jsx)(i.Z,{to:"/blog/releases/3.2",className:j.topBannerTitleText,children:(0,s.jsx)(c.Z,{id:"homepage.banner.launch.newVersion",values:{newVersion:"3.2"},children:"Docusaurus\xa0{newVersion} is\xa0out!\ufe0f"})}),"\xa0\ud83e\udd73"]})})}function N(){const{siteConfig:{customFields:e,tagline:t}}=(0,l.Z)(),{description:a}=e;return(0,s.jsx)(u.Z,{title:t,description:a,children:(0,s.jsxs)("main",{children:[(0,s.jsx)(B,{}),(0,s.jsx)(y,{}),(0,s.jsxs)("div",{className:j.section,children:[(0,s.jsx)(O,{}),(0,s.jsx)(k,{})]}),(0,s.jsx)(v,{}),(0,s.jsx)(C,{})]})})}},74833:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/christopher-chedeau.a975949.200.jpg 200w",images:[{path:a.p+"assets/ideal-img/christopher-chedeau.a975949.200.jpg",width:200,height:200}],src:a.p+"assets/ideal-img/christopher-chedeau.a975949.200.jpg",toString:function(){return a.p+"assets/ideal-img/christopher-chedeau.a975949.200.jpg"},placeholder:void 0,width:200,height:200},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQIE/8QAIBAAAgEEAgMBAAAAAAAAAAAAAQMCBBESIQAFBhMicf/EABQBAQAAAAAAAAAAAAAAAAAAAAT/xAAZEQACAwEAAAAAAAAAAAAAAAAAAgERIRL/2gAMAwEAAhEDEQA/ANPm3kc6ViKKjU9tV9PLSWLIEBiAIxuCJM+r/o4enzboSlZqOuh7jEZ5WBytu4trfAHNYO6hITkJenG4O7XOuRNSzIkwgSTskcfOaGVFrk//2Q=="}},77478:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/hector-ramos.957d17a.200.jpg 200w",images:[{path:a.p+"assets/ideal-img/hector-ramos.957d17a.200.jpg",width:200,height:200}],src:a.p+"assets/ideal-img/hector-ramos.957d17a.200.jpg",toString:function(){return a.p+"assets/ideal-img/hector-ramos.957d17a.200.jpg"},placeholder:void 0,width:200,height:200},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQGB//EACUQAQABAwIEBwAAAAAAAAAAAAECAwQRAAUGEhNxByE3QUJRof/EABUBAQEAAAAAAAAAAAAAAAAAAAQF/8QAHBEAAQMFAAAAAAAAAAAAAAAAAQATIQIDIjFB/9oADAMBAAIRAxEAPwCSs+Jtvs9urWtKNvWmiRqtHCTyOYqcwDE/dBuN83Hr1OfaqzLmcvRPNz20z4keo11H4t7SknsrCCvdV1rEqcGSsIrn61NFtrKg7SCHIPIX/9k="}},90103:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/ricky-vetter.b237586.200.jpg 200w",images:[{path:a.p+"assets/ideal-img/ricky-vetter.b237586.200.jpg",width:200,height:200}],src:a.p+"assets/ideal-img/ricky-vetter.b237586.200.jpg",toString:function(){return a.p+"assets/ideal-img/ricky-vetter.b237586.200.jpg"},placeholder:void 0,width:200,height:200},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABQQG/8QAIBAAAQQBBQEBAAAAAAAAAAAAAQIDBBEFABITITEiYf/EABQBAQAAAAAAAAAAAAAAAAAAAAP/xAAYEQADAQEAAAAAAAAAAAAAAAAAAQIRIv/aAAwDAQACEQMRAD8A3OYycxMkSGp77XHXG2l0JZANVyp2km1WPR+aQVn07j9kd+ahzsZgzcESy0SCgg7B1ahehpzaEzZAShIAcUAAPO9C4xjVXKP/2Q=="}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.839c1f75.js.LICENSE.txt b/assets/js/1df93b7f.839c1f75.js.LICENSE.txt new file mode 100644 index 0000000000..c18ab1d93b --- /dev/null +++ b/assets/js/1df93b7f.839c1f75.js.LICENSE.txt @@ -0,0 +1,14 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ diff --git a/assets/js/1e4232ab.b101339c.js b/assets/js/1e4232ab.b101339c.js deleted file mode 100644 index 9fd83d79eb..0000000000 --- a/assets/js/1e4232ab.b101339c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[1953],{23:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=s(4848),r=s(8453);const o={sidebar_position:2},a="Create a Document",i={id:"tutorial-basics/create-a-document",title:"Create a Document",description:"Documents are groups of pages connected through:",source:"@site/docs/tutorial-basics/create-a-document.md",sourceDirName:"tutorial-basics",slug:"/tutorial-basics/create-a-document",permalink:"/docs/tutorial-basics/create-a-document",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/tutorial-basics/create-a-document.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Create a Page",permalink:"/docs/tutorial-basics/create-a-page"},next:{title:"Create a Blog Post",permalink:"/docs/tutorial-basics/create-a-blog-post"}},c={},l=[{value:"Create your first Doc",id:"create-your-first-doc",level:2},{value:"Configure the Sidebar",id:"configure-the-sidebar",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"create-a-document",children:"Create a Document"}),"\n",(0,n.jsxs)(t.p,{children:["Documents are ",(0,n.jsx)(t.strong,{children:"groups of pages"})," connected through:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["a ",(0,n.jsx)(t.strong,{children:"sidebar"})]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.strong,{children:"previous/next navigation"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.strong,{children:"versioning"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"create-your-first-doc",children:"Create your first Doc"}),"\n",(0,n.jsxs)(t.p,{children:["Create a Markdown file at ",(0,n.jsx)(t.code,{children:"docs/hello.md"}),":"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-md",metastring:'title="docs/hello.md"',children:"# Hello\n\nThis is my **first Docusaurus document**!\n"})}),"\n",(0,n.jsxs)(t.p,{children:["A new document is now available at ",(0,n.jsx)(t.a,{href:"http://localhost:3000/docs/hello",children:"http://localhost:3000/docs/hello"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"configure-the-sidebar",children:"Configure the Sidebar"}),"\n",(0,n.jsxs)(t.p,{children:["Docusaurus automatically ",(0,n.jsx)(t.strong,{children:"creates a sidebar"})," from the ",(0,n.jsx)(t.code,{children:"docs"})," folder."]}),"\n",(0,n.jsx)(t.p,{children:"Add metadata to customize the sidebar label and position:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-md",metastring:'title="docs/hello.md" {1-4}',children:"---\nsidebar_label: 'Hi!'\nsidebar_position: 3\n---\n\n# Hello\n\nThis is my **first Docusaurus document**!\n"})}),"\n",(0,n.jsxs)(t.p,{children:["It is also possible to create your sidebar explicitly in ",(0,n.jsx)(t.code,{children:"sidebars.js"}),":"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n tutorialSidebar: [\n 'intro',\n // highlight-next-line\n 'hello',\n {\n type: 'category',\n label: 'Tutorial',\n items: ['tutorial-basics/create-a-document'],\n },\n ],\n};\n"})})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var n=s(6540);const r={},o=n.createContext(r);function a(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f391b9e.08199a11.js b/assets/js/1f391b9e.08199a11.js new file mode 100644 index 0000000000..746c4072ab --- /dev/null +++ b/assets/js/1f391b9e.08199a11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13085],{35434:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246);r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function i(e){return(0,n.jsx)("svg",c(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,r)=>{r.d(t,{Z:()=>le});var n=r(24246),o=r(27378);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function l(e){const{mdxAdmonitionTitle:t,rest:r}=function(e){const t=o.Children.toArray(e),r=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==r));return{mdxAdmonitionTitle:null==r?void 0:r.props.children,rest:c.length>0?(0,n.jsx)(n.Fragment,{children:c}):null}}(e.children);var l;const s=null!==(l=e.title)&&void 0!==l?l:t;return i(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){c(e,t,r[t])}))}return e}({},e,s&&{title:s}),{children:r})}var s=r(40624),a=r(36712),u=r(89583);const b={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function f({type:e,className:t,children:r}){return(0,n.jsx)("div",{className:(0,s.Z)(u.k.common.admonition,u.k.common.admonitionType(e),b.admonition,t),children:r})}function p({icon:e,title:t}){return(0,n.jsxs)("div",{className:b.admonitionHeading,children:[(0,n.jsx)("span",{className:b.admonitionIcon,children:e}),t]})}function O({children:e}){return e?(0,n.jsx)("div",{className:b.admonitionContent,children:e}):null}function y(e){const{type:t,icon:r,title:o,children:c,className:i}=e;return(0,n.jsxs)(f,{type:t,className:i,children:[(0,n.jsx)(p,{title:o,icon:r}),(0,n.jsx)(O,{children:c})]})}function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){return(0,n.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){d(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const w={icon:(0,n.jsx)(m,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,n.jsx)(y,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},w,e),{className:(0,s.Z)("alert alert--secondary",e.className),children:e.children}))}function P(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e){return(0,n.jsx)("svg",x(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){P(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function k(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const E={icon:(0,n.jsx)(S,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function N(e){return(0,n.jsx)(y,D(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){k(e,t,r[t])}))}return e}({},E,e),{className:(0,s.Z)("alert alert--success",e.className),children:e.children}))}var C=r(35434);function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const B={icon:(0,n.jsx)(C.Z,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function _(e){return(0,n.jsx)(y,L(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}({},B,e),{className:(0,s.Z)("alert alert--info",e.className),children:e.children}))}function H(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function T(e){return(0,n.jsx)("svg",I(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){H(e,t,r[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function A(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function M(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const U={icon:(0,n.jsx)(T,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function $(e){return(0,n.jsx)("svg",z(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const V={icon:(0,n.jsx)($,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const Q={icon:(0,n.jsx)(T,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function X(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){X(e,t,r[t])}))}return e}const Y={note:v,tip:N,info:_,warning:function(e){return(0,n.jsx)(y,M(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){A(e,t,r[t])}))}return e}({},U,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,n.jsx)(y,W(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){F(e,t,r[t])}))}return e}({},V,e),{className:(0,s.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,n.jsx)(v,J({title:"secondary"},e)),important:e=>(0,n.jsx)(_,J({title:"important"},e)),success:e=>(0,n.jsx)(N,J({title:"success"},e)),caution:function(e){return(0,n.jsx)(y,G(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},Q,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))}},ee=J({},Y,K);var te=r(52615);function re(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ne,oe;const ce=(ne=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){re(e,t,r[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,n.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,n.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,n.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(ne,Object.getOwnPropertyDescriptors(oe)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(oe)).forEach((function(e){Object.defineProperty(ne,e,Object.getOwnPropertyDescriptor(oe,e))})),ne);function ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function le(e){const t=l(e),r=(o=t.type,ce[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ce.info));var o;return(0,n.jsx)(r,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ie(e,t,r[t])}))}return e}({},t))}},5254:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(24246),o=r(27378),c=r(40624),i=r(80474),l=r(29088),s=r(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function O(e,t){return!!e&&(e===t||O(e.parentElement,t))}function y(e){var{summary:t,children:r}=e,y=f(e,["summary","children"]);(0,i.Z)().collectAnchor(y.id);const d=(0,l.Z)(),j=(0,o.useRef)(null),{collapsed:m,setCollapsed:g}=(0,s.u)({initialState:!y.open}),[h,w]=(0,o.useState)(y.open),v=o.isValidElement(t)?t:(0,n.jsx)("summary",{children:null!=t?t:"Details"});return(0,n.jsxs)("details",b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},y),{ref:j,open:h,"data-collapsed":m,className:(0,c.Z)(a.details,d&&a.isBrowser,y.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&O(t,j.current)&&(e.preventDefault(),m?(g(!1),w(!0)):g(!0))},children:[v,(0,n.jsx)(s.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{g(e),w(!e)},children:(0,n.jsx)("div",{className:a.collapsibleContent,children:r})})]}))}const d={details:"details_Cn_P"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},m.apply(this,arguments)}function g(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const h="alert alert--info";function w(e){var t=m({},e);return(0,n.jsx)(y,g(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}({},t),{className:(0,c.Z)(h,d.details,t.className)}))}},71628:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(89583),l=r(41428);const s={iconEdit:"iconEdit_IMw_"};function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function b(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f(e){var{className:t}=e,r=b(e,["className"]);return(0,n.jsx)("svg",u(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(s.iconEdit,t),"aria-hidden":"true"},r),{children:(0,n.jsx)("g",{children:(0,n.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function p({editUrl:e}){return(0,n.jsxs)(l.Z,{to:e,className:i.k.common.editThisPage,children:[(0,n.jsx)(f,{}),(0,n.jsx)(c.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var O=r(54461);function y({lastUpdatedAt:e}){const t=new Date(e),r=(0,O.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,n.jsx)("b",{children:(0,n.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function d({lastUpdatedBy:e}){return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,n.jsx)("b",{children:e})},children:" by {user}"})}function j({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,n.jsxs)("span",{className:i.k.common.lastUpdated,children:[(0,n.jsx)(c.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,n.jsx)(y,{lastUpdatedAt:e}):"",byUser:t?(0,n.jsx)(d,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_OHCJ"};function g({className:e,editUrl:t,lastUpdatedAt:r,lastUpdatedBy:c}){return(0,n.jsxs)("div",{className:(0,o.Z)("row",e),children:[(0,n.jsx)("div",{className:"col",children:t&&(0,n.jsx)(p,{editUrl:t})}),(0,n.jsx)("div",{className:(0,o.Z)("col",m.lastUpdated),children:(r||c)&&(0,n.jsx)(j,{lastUpdatedAt:r,lastUpdatedBy:c})})]})}},23387:(e,t,r)=>{r.d(t,{Z:()=>ne});var n=r(24246),o=r(27378),c=r(71670),i=r(97134),l=r(38112);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){return(0,n.jsx)("code",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){s(e,t,r[t])}))}return e}({},e))}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}function f(e){return function(e){return void 0!==e.children&&o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,n.jsx)(a,b({},e)):(0,n.jsx)(l.Z,b({},e))}var p=r(41428);function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var y=r(5254);function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){const t=o.Children.toArray(e.children),r=t.find((e=>o.isValidElement(e)&&"summary"===e.type)),c=(0,n.jsx)(n.Fragment,{children:t.filter((e=>e!==r))});return(0,n.jsx)(y.Z,j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){d(e,t,r[t])}))}return e}({},e),{summary:r,children:c}))}var g=r(52615);function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){return(0,n.jsx)(g.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){h(e,t,r[t])}))}return e}({},e))}var v=r(40624);const P={containsTaskList:"containsTaskList_k9gM"};function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function k(e){if(void 0!==e)return(0,v.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&P.containsTaskList)}var D=r(80474);function E(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const N={img:"img_vXGZ"};function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}var L=r(77773),B=r(88941),_=r(30691),H=r(73919),I=r(78844),T=r(99854);function A(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function M(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const U="docusaurus-mermaid-container";function R(){const{colorMode:e}=(0,I.I)(),t=(0,H.L)().mermaid,r=t.theme[e],{options:n}=t;return(0,o.useMemo)((()=>M(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){A(e,t,r[t])}))}return e}({startOnLoad:!1},n),{theme:r})),[r,n])}function z({text:e,config:t}){const[r,n]=(0,o.useState)(null),c=(0,o.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,i=R(),l=null!=t?t:i;return(0,o.useEffect)((()=>{(async function({id:e,text:t,config:r}){T.N.mermaidAPI.initialize(r);try{return await T.N.render(e,t)}catch(o){var n;throw null===(n=document.querySelector(`#d${e}`))||void 0===n||n.remove(),o}})({id:c,text:e,config:l}).then(n).catch((e=>{n((()=>{throw e}))}))}),[c,e,l]),r}const $={container:"container_RUsj"};function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){F(e,t,r[t])}))}return e}function V({renderResult:e}){const t=(0,o.useRef)(null);return(0,o.useEffect)((()=>{var r;const n=t.current;null===(r=e.bindFunctions)||void 0===r||r.call(e,n)}),[e]),(0,n.jsx)("div",{ref:t,className:`${U} ${$.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function q({value:e}){const t=z({text:e});return null===t?null:(0,n.jsx)(V,{renderResult:t})}function G(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){G(e,t,r[t])}))}return e}const X={Head:i.Z,details:m,Details:m,code:f,a:function(e){return(0,n.jsx)(p.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}({},e))},pre:function(e){return(0,n.jsx)(n.Fragment,{children:e.children})},ul:function(e){return(0,n.jsx)("ul",S(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({},e),{className:k(e.className)}))},li:function(e){return(0,D.Z)().collectAnchor(e.id),(0,n.jsx)("li",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){E(e,t,r[t])}))}return e}({},e))},img:function(e){return(0,n.jsx)("img",Z(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}({decoding:"async",loading:"lazy"},e),{className:(t=e.className,(0,v.Z)(t,N.img))}));var t},h1:e=>(0,n.jsx)(w,Q({as:"h1"},e)),h2:e=>(0,n.jsx)(w,Q({as:"h2"},e)),h3:e=>(0,n.jsx)(w,Q({as:"h3"},e)),h4:e=>(0,n.jsx)(w,Q({as:"h4"},e)),h5:e=>(0,n.jsx)(w,Q({as:"h5"},e)),h6:e=>(0,n.jsx)(w,Q({as:"h6"},e)),admonition:L.Z,mermaid:function(e){return(0,n.jsx)(B.Z,{fallback:e=>(0,n.jsx)(_.Ac,W({},e)),children:(0,n.jsx)(q,W({},e))})}};const J="tweetQuote_h8Rz",Y="avatarImg_b51M";function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee=(te=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){K(e,t,r[t])}))}return e}({},X),re=null!=(re={Code:f,Highlight:function({children:e,color:t}){return(0,n.jsx)("span",{style:{backgroundColor:t,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},TweetQuote:function({url:e,handle:t,name:r,job:o,children:c}){const i=`https://unavatar.io/twitter/${t}`,l=`https://twitter.com/${t}`;return(0,n.jsxs)("figure",{className:J,children:[(0,n.jsx)("blockquote",{children:(0,n.jsx)(p.Z,{to:e,children:c})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(p.Z,{to:l,rel:"nofollow",children:(0,n.jsxs)("div",{className:"avatar",children:[(0,n.jsx)("img",{alt:r,className:(0,v.Z)("avatar__photo",Y),src:i}),(0,n.jsxs)("div",{className:(0,v.Z)("avatar__intro"),children:[(0,n.jsx)("strong",{className:"avatar__name",children:(0,n.jsx)("cite",{children:r})}),(0,n.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:o})]})]})})})]})}})?re:{},Object.getOwnPropertyDescriptors?Object.defineProperties(te,Object.getOwnPropertyDescriptors(re)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(re)).forEach((function(e){Object.defineProperty(te,e,Object.getOwnPropertyDescriptor(re,e))})),te);var te,re;function ne({children:e}){return(0,n.jsx)(c.Z,{components:ee,children:e})}},41530:(e,t,r)=>{r.r(t),r.d(t,{default:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(44008),i=r(89583),l=r(88613),s=r(23387),a=r(78093),u=r(99272),b=r(71628);const f={mdxPageWrapper:"mdxPageWrapper_bWhk"};function p(e){const{content:t}=e,{metadata:{title:r,editUrl:p,description:O,frontMatter:y,unlisted:d,lastUpdatedBy:j,lastUpdatedAt:m},assets:g}=t,{keywords:h,wrapperClassName:w,hide_table_of_contents:v}=y;var P;const x=null!==(P=g.image)&&void 0!==P?P:y.image,S=!!(p||m||j);return(0,n.jsx)(c.FG,{className:(0,o.Z)(null!=w?w:i.k.wrapper.mdxPages,i.k.page.mdxPage),children:(0,n.jsxs)(l.Z,{children:[(0,n.jsx)(c.d,{title:r,description:O,keywords:h,image:x}),(0,n.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,n.jsxs)("div",{className:(0,o.Z)("row",f.mdxPageWrapper),children:[(0,n.jsxs)("div",{className:(0,o.Z)("col",!v&&"col--8"),children:[d&&(0,n.jsx)(u.Z,{}),(0,n.jsx)("article",{children:(0,n.jsx)(s.Z,{children:(0,n.jsx)(t,{})})}),S&&(0,n.jsx)(b.Z,{className:(0,o.Z)("margin-top--sm",i.k.pages.pageFooterEditMetaRow),editUrl:p,lastUpdatedAt:m,lastUpdatedBy:j})]}),!v&&t.toc.length>0&&(0,n.jsx)("div",{className:"col col--2",children:(0,n.jsx)(a.Z,{toc:t.toc,minHeadingLevel:y.toc_min_heading_level,maxHeadingLevel:y.toc_max_heading_level})})]})})]})})}},78093:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(4646);const i={tableOfContents:"tableOfContents_RLlU",docItemContainer:"docItemContainer_oucX"};function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){l(e,t,r[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}const b="table-of-contents__link toc-highlight",f="table-of-contents__link--active";function p(e){var{className:t}=e,r=u(e,["className"]);return(0,n.jsx)("div",{className:(0,o.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,n.jsx)(c.Z,a(s({},r),{linkClassName:b,linkActiveClassName:f}))})}},4646:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(24246),o=r(27378),c=r(73919);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){i(e,t,r[t])}))}return e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function a(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function u(e){const t=e.map((e=>s(l({},e),{parentIndex:-1,children:[]}))),r=Array(7).fill(-1);t.forEach(((e,t)=>{const n=r.slice(2,e.level);e.parentIndex=Math.max(...n),r[e.level]=t}));const n=[];return t.forEach((e=>{const{parentIndex:r}=e,o=a(e,["parentIndex"]);r>=0?t[r].children.push(o):n.push(o)})),n}function b({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return e.flatMap((e=>{const n=b({toc:e.children,minHeadingLevel:t,maxHeadingLevel:r});return function(e){return e.level>=t&&e.level<=r}(e)?[s(l({},e),{children:n})]:n}))}function f(e){const t=e.getBoundingClientRect();return t.top===t.bottom?f(e.parentNode):t}function p(e,{anchorTopOffset:t}){const r=e.find((e=>f(e).top>=t));if(r){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(f(r))?r:null!==(n=e[e.indexOf(r)-1])&&void 0!==n?n:null;var n}var o;return null!==(o=e[e.length-1])&&void 0!==o?o:null}function O(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:t}}=(0,c.L)();return(0,o.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function y(e){const t=(0,o.useRef)(void 0),r=O();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:n,linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(n),l=function({minHeadingLevel:e,maxHeadingLevel:t}){const r=[];for(let n=e;n<=t;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:c,maxHeadingLevel:i}),s=p(l,{anchorTopOffset:r.current}),a=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,r){r?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===a)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,r])}var d=r(41428);function j({toc:e,className:t,linkClassName:r,isChild:o}){return e.length?(0,n.jsx)("ul",{className:o?void 0:t,children:e.map((e=>(0,n.jsxs)("li",{children:[(0,n.jsx)(d.Z,{to:`#${e.id}`,className:null!=r?r:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,n.jsx)(j,{isChild:!0,toc:e.children,className:t,linkClassName:r})]},e.id)))}):null}const m=o.memo(j);function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w(e){var{toc:t,className:r="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:s,maxHeadingLevel:a}=e,f=h(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const p=(0,c.L)(),O=null!=s?s:p.tableOfContents.minHeadingLevel,d=null!=a?a:p.tableOfContents.maxHeadingLevel,j=function({toc:e,minHeadingLevel:t,maxHeadingLevel:r}){return(0,o.useMemo)((()=>b({toc:u(e),minHeadingLevel:t,maxHeadingLevel:r})),[e,t,r])}({toc:t,minHeadingLevel:O,maxHeadingLevel:d});return y((0,o.useMemo)((()=>{if(i&&l)return{linkClassName:i,linkActiveClassName:l,minHeadingLevel:O,maxHeadingLevel:d}}),[i,l,O,d])),(0,n.jsx)(m,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({toc:j,className:r,linkClassName:i},f))}},99272:(e,t,r)=>{r.d(t,{Z:()=>y});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(97134);function l(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function s(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function a(){return(0,n.jsx)(i.Z,{children:(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var u=r(89583),b=r(77773);function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){f(e,t,r[t])}))}return e}function O({className:e}){return(0,n.jsx)(b.Z,{type:"caution",title:(0,n.jsx)(l,{}),className:(0,o.Z)(e,u.k.common.unlistedBanner),children:(0,n.jsx)(s,{})})}function y(e){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a,{}),(0,n.jsx)(O,p({},e))]})}},54461:(e,t,r)=>{r.d(t,{P:()=>c});var n=r(4423);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e={}){const{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({calendar:r},e))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},38112:(e,t,r)=>{r.d(t,{Z:()=>Ie});var n={};r.r(n),r.d(n,{ButtonExample:()=>B});var o=r(24246),c=r(27378),i=r(40624),l=r(29088),s=r(32711),a=r(36712),u=r(4423),b=r(94544),f=r(30691),p=r(78844),O=r(73919);function y(){const{prism:e}=(0,O.L)(),{colorMode:t}=(0,p.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var d=r(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){m(e,t,r[t])}))}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function w(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function P(){return(0,o.jsx)("div",{children:"Loading..."})}function x(){return(0,o.jsx)(b.Z,{fallback:(0,o.jsx)(P,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.Z,{fallback:e=>(0,o.jsx)(f.Ac,g({},e)),children:(0,o.jsx)(s.i5,{})}),(0,o.jsx)(s.IF,{})]})})}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(x,{})})]})}function k(){const e=(0,l.Z)();return(0,o.jsx)(s.uz,{className:j.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(k,{})]})}const E=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=w(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,a=y();var b;const f=null!==(b=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==b&&b;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(s.nu,h(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:f,transformCode:null!=n?n:E,theme:a},c),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(S,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Z(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}function L(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function B(e){return(0,o.jsx)("button",L(Z({type:"button"},e),{style:Z({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function _(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const H=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){_(e,t,r[t])}))}return e}({React:c},c,n);var I,T,A=r(89583),M=r(6324),U=r.n(M);function R(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const z=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),$=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(V=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){R(e,t,r[t])}))}return e}({},F),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(V,Object.getOwnPropertyDescriptors(q)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(q)).forEach((function(e){Object.defineProperty(V,e,Object.getOwnPropertyDescriptor(q,e))})),V);var V,q;const G=Object.keys(F);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&$.test(c)){const e=c.match($).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=U()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),l=r.split("\n"),s=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),b=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<l.length;){const e=l[p].match(i);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?s[a[t]].range+=`${p},`:u[t]?s[u[t]].start=p:b[t]&&(s[b[t]].range+=`${s[b[t]].start}-${p-1},`),l.splice(p,1)}r=l.join("\n");const f={};return Object.entries(s).forEach((([e,{range:t}])=>{U()(t).forEach((t=>{var r;null!==(r=(I=f)[T=t])&&void 0!==r||(I[T]=[]),f[t].push(e)}))})),{lineClassNames:f,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(y());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Y(e,t,r[t])}))}return e}({},r),{style:n,className:(0,i.Z)(r.className,J.codeBlockContainer,A.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=r(26101);const se={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function be(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function fe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=n({line:e,className:(0,i.Z)(t,r&&se.codeLine)}),s=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",be(ue({},l),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:se.codeLineNumber}),(0,o.jsx)("span",{className:se.codeLineContent,children:s})]}):s,(0,o.jsx)("br",{})]}))}var pe=r(34370);function Oe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ye(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function de(e){return(0,o.jsx)("svg",ye(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Oe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){je(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const he={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function we({code:e,className:t}){const[r,n]=(0,c.useState)(!1),l=(0,c.useRef)(void 0),s=(0,c.useCallback)((()=>{(0,pe.Z)(e),n(!0),l.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,he.copyButton,r&&he.copyButtonCopied),onClick:s,children:(0,o.jsxs)("span",{className:he.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(de,{className:he.copyButtonIcon}),(0,o.jsx)(ge,{className:he.copyButtonSuccessIcon})]})})}function ve(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function xe(e){return(0,o.jsx)("svg",Pe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ve(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Se={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function ke({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,r&&Se.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(xe,{className:Se.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:r,title:n,showLineNumbers:l,language:s}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,O.L)();var b;const f=function(e){return null==e?void 0:e.toLowerCase()}(null!==(b=null!=s?s:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==b?b:a),p=y(),d=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),i=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return ie(o,l),(0,c.useEffect)((()=>{l()}),[e,l]),(0,c.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:i}}(),j=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(z))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:m,code:g}=X(e,{metastring:r,language:f,magicComments:u}),h=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,f&&!t.includes(`language-${f}`)&&`language-${f}`),children:[j&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:p,code:g,language:null!=f?f:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:d.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,h&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(fe,{line:e,getLineProps:n,getTokenProps:c,classNames:m[t],showLineNumbers:h},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(d.isEnabled||d.isCodeScrollable)&&(0,o.jsx)(ke,{className:re.codeButton,onClick:()=>d.toggle(),isEnabled:d.isEnabled}),(0,o.jsx)(we,{className:re.codeButton,code:g})]})]})]})}function Ee(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Le(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ze(e,t,r[t])}))}return e}const Be=(_e=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,l.Z)(),i=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),s="string"==typeof i?De:ne;return(0,o.jsx)(s,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ee(e,t,r[t])}))}return e}({},r),{children:i}),String(n))},function(e){return e.live?(0,o.jsx)(N,Le({scope:H},e)):(0,o.jsx)(_e,Le({},e))});var _e;function He(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){He(e,t,r[t])}))}return e}({},e))}}}]); \ No newline at end of file diff --git a/assets/js/1f391b9e.2bce2e11.js b/assets/js/1f391b9e.2bce2e11.js deleted file mode 100644 index 9c916d2ce5..0000000000 --- a/assets/js/1f391b9e.2bce2e11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[6061],{7973:(e,n,t)=>{t.r(n),t.d(n,{default:()=>u});t(6540);var i=t(4164),a=t(1213),s=t(7559),l=t(781),r=t(5533),c=t(7763),o=t(996);const d={mdxPageWrapper:"mdxPageWrapper_j9I6"};var m=t(4848);function u(e){const{content:n}=e,{metadata:{title:t,description:u,frontMatter:f,unlisted:v},assets:h}=n,{keywords:g,wrapperClassName:x,hide_table_of_contents:p}=f,L=h.image??f.image;return(0,m.jsx)(a.e3,{className:(0,i.A)(x??s.G.wrapper.mdxPages,s.G.page.mdxPage),children:(0,m.jsxs)(l.A,{children:[(0,m.jsx)(a.be,{title:t,description:u,keywords:g,image:L}),(0,m.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,m.jsxs)("div",{className:(0,i.A)("row",d.mdxPageWrapper),children:[(0,m.jsxs)("div",{className:(0,i.A)("col",!p&&"col--8"),children:[v&&(0,m.jsx)(o.A,{}),(0,m.jsx)("article",{children:(0,m.jsx)(r.A,{children:(0,m.jsx)(n,{})})})]}),!p&&n.toc.length>0&&(0,m.jsx)("div",{className:"col col--2",children:(0,m.jsx)(c.A,{toc:n.toc,minHeadingLevel:f.toc_min_heading_level,maxHeadingLevel:f.toc_max_heading_level})})]})})]})})}},7763:(e,n,t)=>{t.d(n,{A:()=>o});t(6540);var i=t(4164),a=t(5195);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=t(4848);const r="table-of-contents__link toc-highlight",c="table-of-contents__link--active";function o(e){let{className:n,...t}=e;return(0,l.jsx)("div",{className:(0,i.A)(s.tableOfContents,"thin-scrollbar",n),children:(0,l.jsx)(a.A,{...t,linkClassName:r,linkActiveClassName:c})})}},5195:(e,n,t)=>{t.d(n,{A:()=>h});var i=t(6540),a=t(6342);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function l(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=l({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function r(e){const n=e.getBoundingClientRect();return n.top===n.bottom?r(e.parentNode):n}function c(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>r(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(r(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function o(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:n}}=(0,a.p)();return(0,i.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=o();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:l}=e;function r(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),r=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:l}),o=c(r,{anchorTopOffset:t.current}),d=e.find((e=>o&&o.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",r),document.addEventListener("resize",r),r(),()=>{document.removeEventListener("scroll",r),document.removeEventListener("resize",r)}}),[e,t])}var m=t(8774),u=t(4848);function f(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,u.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,u.jsxs)("li",{children:[(0,u.jsx)(m.A,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,u.jsx)(f,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const v=i.memo(f);function h(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:r="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:o,maxHeadingLevel:m,...f}=e;const h=(0,a.p)(),g=o??h.tableOfContents.minHeadingLevel,x=m??h.tableOfContents.maxHeadingLevel,p=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>l({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:g,maxHeadingLevel:x});return d((0,i.useMemo)((()=>{if(r&&c)return{linkClassName:r,linkActiveClassName:c,minHeadingLevel:g,maxHeadingLevel:x}}),[r,c,g,x])),(0,u.jsx)(v,{toc:p,className:t,linkClassName:r,...f})}},996:(e,n,t)=>{t.d(n,{A:()=>f});t(6540);var i=t(4164),a=t(1312),s=t(5260),l=t(4848);function r(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,l.jsx)(s.A,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(7559),m=t(7293);function u(e){let{className:n}=e;return(0,l.jsx)(m.A,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,i.A)(n,d.G.common.unlistedBanner),children:(0,l.jsx)(c,{})})}function f(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(o,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/1f5cf72d.b7ea4a37.js b/assets/js/1f5cf72d.b7ea4a37.js new file mode 100644 index 0000000000..6f14bebf12 --- /dev/null +++ b/assets/js/1f5cf72d.b7ea4a37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87974],{8453:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>f});var n=o(24246),s=o(71670);const r={title:"Second post with footnote to test posts with same footnote reference."},a=void 0,c={permalink:"/tests/blog/2022/01/22/dup-footnote",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx",source:"@site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx",title:"Second post with footnote to test posts with same footnote reference.",description:"foo",date:"2022-01-22T00:00:00.000Z",tags:[],readingTime:1.8,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Second post with footnote to test posts with same footnote reference."},unlisted:!1,prevItem:{title:"First post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/04/20/dup-footnote"},nextItem:{title:"Third post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/21/dup-footnote"}},i={authorsImageUrls:[]},f=[];function d(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["foo",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-1-db139e",id:"user-content-fnref-1-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),"\n",(0,n.jsxs)(t.p,{children:["bar",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-2-db139e",id:"user-content-fnref-2-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})]}),"\n",(0,n.jsxs)(t.p,{children:["baz",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-3-db139e",id:"user-content-fnref-3-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})]}),"\n","\n",(0,n.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,n.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{id:"user-content-fn-1-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["foo ",(0,n.jsx)(t.a,{href:"#user-content-fnref-1-db139e","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-2-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["bar ",(0,n.jsx)(t.a,{href:"#user-content-fnref-2-db139e","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-3-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["baz ",(0,n.jsx)(t.a,{href:"#user-content-fnref-3-db139e","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>c,a:()=>a});var n=o(27378);const s={},r=n.createContext(s);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20139c40.415c275d.js b/assets/js/20139c40.415c275d.js new file mode 100644 index 0000000000..5e144f8762 --- /dev/null +++ b/assets/js/20139c40.415c275d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36928],{45378:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var t=n(24246),o=n(71670);function i(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"contributing-to-docusaurus",children:"Contributing to Docusaurus"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.a,{href:"https://docusaurus.io",children:"Docusaurus"})," is our way to hopefully help make open source documentation easier. We currently have ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/showcase",children:"multiple open source projects using it"}),", with many more planned. If you're interested in contributing to Docusaurus, hopefully, this document makes the process for contributing clear."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.a,{href:"https://opensource.guide/",children:"Open Source Guides"})," website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/how-to-contribute/",children:"How to Contribute to Open Source"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://opensource.guide/building-community/",children:"Building Welcoming Communities"})}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"code-of-conduct",children:"Code of Conduct"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read ",(0,t.jsx)(s.a,{href:"https://code.fb.com/codeofconduct",children:"the full text"})," so that you can understand what actions will and will not be tolerated."]}),"\n",(0,t.jsx)(s.h2,{id:"get-involved",children:"Get Involved"}),"\n",(0,t.jsx)(s.p,{children:"There are many ways to contribute to Docusaurus, and many of them do not involve writing any code. Here's a few ideas to get started:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Simply start using Docusaurus. Go through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Getting Started"})," guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by ",(0,t.jsx)(s.a,{href:"#issues",children:"opening an issue"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["Look through the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"open issues"}),". Provide workarounds, ask for clarification, or suggest labels. Help ",(0,t.jsx)(s.a,{href:"#triaging-issues-and-pull-requests",children:"triage issues"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["If you find an issue you would like to fix, ",(0,t.jsx)(s.a,{href:"#pull-requests",children:"open a pull request"}),". Issues tagged as ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/Good%20first%20issue",children:(0,t.jsx)(s.em,{children:"Good first issue"})})," are a good place to get started."]}),"\n",(0,t.jsxs)(s.li,{children:["Read through the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/installation",children:"Docusaurus docs"}),'. If you find anything that is confusing or can be improved, you can click "Edit this page" at the bottom of most docs, which takes you to the GitHub interface to make and propose changes.']}),"\n",(0,t.jsxs)(s.li,{children:["Take a look at the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/feature",children:"features requested"})," by others in the community and consider opening a pull request if you see something you want to work on."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Contributions are very welcome. If you think you need help planning your contribution, please ping us on Twitter at ",(0,t.jsx)(s.a,{href:"https://twitter.com/docusaurus",children:"@docusaurus"})," and let us know you are looking for a bit of help."]}),"\n",(0,t.jsx)(s.h3,{id:"join-our-discord-channel",children:"Join our Discord Channel"}),"\n",(0,t.jsxs)(s.p,{children:["We have the ",(0,t.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:(0,t.jsx)(s.code,{children:"#contributors"})})," channel on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," to discuss all things about Docusaurus development. You can also be of great help by helping other users in the ",(0,t.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:(0,t.jsx)(s.code,{children:"#help-and-questions"})})," channel."]}),"\n",(0,t.jsx)(s.h3,{id:"triaging-issues-and-pull-requests",children:"Triaging Issues and Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"One great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Ask for more information if you believe the issue does not provide all the details required to solve it."}),"\n",(0,t.jsxs)(s.li,{children:["Suggest ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels",children:"labels"})," that can help categorize issues."]}),"\n",(0,t.jsx)(s.li,{children:"Flag issues that are stale or that should be closed."}),"\n",(0,t.jsx)(s.li,{children:"Ask for test plans and review code."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"our-development-process",children:"Our Development Process"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus uses ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," as its source of truth. The core team will be working directly there. All changes will be public from the beginning."]}),"\n",(0,t.jsx)(s.p,{children:"All pull requests will be checked by the continuous integration system, GitHub actions. There are unit tests, end-to-end tests, performance tests, style tests, and much more."}),"\n",(0,t.jsx)(s.h3,{id:"branch-organization",children:"Branch Organization"}),"\n",(0,t.jsxs)(s.p,{children:["Docusaurus has one primary branch ",(0,t.jsx)(s.code,{children:"main"})," and we use feature branches with deploy previews to deliver new features with pull requests."]}),"\n",(0,t.jsx)(s.h2,{id:"issues",children:"Issues"}),"\n",(0,t.jsxs)(s.p,{children:["When ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new/choose",children:"opening a new issue"}),", always make sure to fill out the issue template. ",(0,t.jsx)(s.strong,{children:"This step is very important!"})," Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template."]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Please don't use the GitHub issue tracker for questions."})," If you have questions about using Docusaurus, use any of our ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/community/support",children:"support channels"}),", and we will do our best to answer your questions."]}),"\n",(0,t.jsx)(s.h3,{id:"bugs",children:"Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["We use ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues",children:"GitHub Issues"})," for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new, unreported bug, you can submit a ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=bug%2Cstatus%3A+needs+triage&template=bug.yml",children:"bug report"}),"."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"One issue, one bug:"})," Please report a single bug per issue."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Provide reproduction steps:"})," List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend filing an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue."}),"\n",(0,t.jsx)(s.h3,{id:"security-bugs",children:"Security Bugs"}),"\n",(0,t.jsxs)(s.p,{children:["Facebook has a ",(0,t.jsx)(s.a,{href:"https://www.facebook.com/whitehat/",children:"bounty program"})," for the safe disclosure of security bugs. With that in mind, please do not file public issues; go through the process outlined on that page."]}),"\n",(0,t.jsx)(s.h3,{id:"feature-requests",children:"Feature requests"}),"\n",(0,t.jsxs)(s.p,{children:["If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can file an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=feature%2Cstatus%3A+needs+triage&template=feature.yml",children:"feature template"})," in the form of an ",(0,t.jsx)(s.strong,{children:"elaborated RFC"}),". Alternatively, you can use the ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/feature-requests",children:"Canny board"})," for more casual feature requests and gain enough traction before proposing an RFC."]}),"\n",(0,t.jsx)(s.h3,{id:"proposals",children:"Proposals"}),"\n",(0,t.jsxs)(s.p,{children:["If you intend to make any non-trivial changes to existing implementations, we recommend filing an issue with the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/new?assignees=&labels=proposal%2Cstatus%3A+needs+triage&template=proposal.yml",children:"proposal template"}),". This lets us reach an agreement on your proposal before you put significant effort into it. These types of issues should be rare."]}),"\n",(0,t.jsx)(s.h3,{id:"claiming-issues",children:"Claiming issues"}),"\n",(0,t.jsxs)(s.p,{children:["We have a list of ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/good%20first%20issue",children:"beginner-friendly issues"})," to help you get your feet wet in the Docusaurus codebase and familiar with our contribution process. This is a great place to get started."]}),"\n",(0,t.jsxs)(s.p,{children:["Apart from the ",(0,t.jsx)(s.code,{children:"good first issue"}),", the following labels are also worth looking at:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/help%20wanted",children:(0,t.jsx)(s.code,{children:"help wanted"})}),": if you have specific knowledge in one domain, working on these issues can make your expertise shine."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/labels/status%3A%20accepting%20pr",children:(0,t.jsx)(s.code,{children:"status: accepting pr"})}),": community contributors can feel free to claim any of these."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:['If you want to work on any of these issues, just drop a message saying "I\'d like to work on this", and we will assign the issue to you and update the issue\'s status as "claimed". ',(0,t.jsx)(s.strong,{children:"You are expected to send a pull request within seven days"})," after that, so we can still delegate the issue to someone else if you are unavailable."]}),"\n",(0,t.jsx)(s.p,{children:'Alternatively, when opening an issue, you can also click the "self service" checkbox to indicate that you\'d like to work on the issue yourself, which will also make us see the issue as "claimed".'}),"\n",(0,t.jsx)(s.h2,{id:"development",children:"Development"}),"\n",(0,t.jsx)(s.h3,{id:"online-one-click-setup-for-contributing",children:"Online one-click setup for contributing"}),"\n",(0,t.jsx)(s.p,{children:"You can use Gitpod (a free, online, VS Code-like IDE) for contributing. With a single click, it will launch a workspace (for Docusaurus 2) and automatically:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"clone the docusaurus repo."}),"\n",(0,t.jsx)(s.li,{children:"install the dependencies."}),"\n",(0,t.jsxs)(s.li,{children:["run ",(0,t.jsx)(s.code,{children:"yarn start"})]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So that you can start contributing straight away."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://gitpod.io/#https://github.com/facebook/docusaurus",children:(0,t.jsx)(s.img,{src:"https://gitpod.io/button/open-in-gitpod.svg",alt:"Open in Gitpod"})})}),"\n",(0,t.jsxs)(s.p,{children:["You can also try using the new ",(0,t.jsx)(s.a,{href:"https://github.dev/facebook/docusaurus",children:"github.dev"})," feature. While you are browsing any file, changing the domain name from ",(0,t.jsx)(s.code,{children:"github.com"})," to ",(0,t.jsx)(s.code,{children:"github.dev"})," will turn your browser into an online editor. You can start making changes and send pull requests right away."]}),"\n",(0,t.jsx)(s.h3,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["Ensure you have ",(0,t.jsx)(s.a,{href:"https://yarnpkg.com/",children:"Yarn"})," installed."]}),"\n",(0,t.jsxs)(s.li,{children:["After cloning the repository, run ",(0,t.jsx)(s.code,{children:"yarn install"})," in the root of the repository. This will install all dependencies as well as build all local packages."]}),"\n",(0,t.jsxs)(s.li,{children:["To start a development server, run ",(0,t.jsx)(s.code,{children:"yarn workspace website start"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"code-conventions",children:"Code Conventions"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Most important: Look around."})," Match the style you see used in the rest of the project. This includes formatting, naming files, naming things in code, naming things in documentation, etc."]}),"\n",(0,t.jsx)(s.li,{children:'"Attractive"'}),"\n",(0,t.jsx)(s.li,{children:"We do have Prettier (a formatter) and ESLint (a syntax linter) to catch most stylistic problems. If you are working locally, they should automatically fix some issues during every git commit."}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"For documentation"}),": Do not wrap lines at 80 characters - configure your editor to soft-wrap when editing documentation."]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Don't worry too much about styles in general\u2014the maintainers will help you fix them as they review your code."}),"\n",(0,t.jsx)(s.h2,{id:"pull-requests",children:"Pull Requests"}),"\n",(0,t.jsx)(s.p,{children:"So you have decided to contribute code back to upstream by opening a pull request. You've invested a good chunk of time, and we appreciate it. We will do our best to work with you and get the PR looked at."}),"\n",(0,t.jsx)(s.p,{children:"Working on your first Pull Request? You can learn how from this free video series:"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github",children:(0,t.jsx)(s.strong,{children:"How to Contribute to an Open Source Project on GitHub"})})}),"\n",(0,t.jsx)(s.p,{children:"Please make sure the following is done when submitting a pull request:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Keep your PR small."})," Small pull requests (~300 lines of diff) are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Use descriptive titles."})," It is recommended to follow this ",(0,t.jsx)(s.a,{href:"#semantic-commit-messages",children:"commit message style"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Test your changes."})," Describe your ",(0,t.jsx)(s.a,{href:"#test-plan",children:(0,t.jsx)(s.strong,{children:"test plan"})})," in your pull request description."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"CLA."})," If you haven't already, ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"sign the CLA"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["All pull requests should be opened against the ",(0,t.jsx)(s.code,{children:"main"})," branch."]}),"\n",(0,t.jsx)(s.p,{children:"We have a lot of integration systems that run automated tests to guard against mistakes. The maintainers will also review your code and fix obvious issues for you. These systems' duty is to make you worry as little about the chores as possible. Your code contributions are more important than sticking to any procedures, although completing the checklist will surely save everyone's time."}),"\n",(0,t.jsx)(s.h3,{id:"semantic-commit-messages",children:"Semantic Commit Messages"}),"\n",(0,t.jsx)(s.p,{children:"See how a minor change to your commit message style can make you a better programmer."}),"\n",(0,t.jsxs)(s.p,{children:["Format: ",(0,t.jsx)(s.code,{children:"<type>(<scope>): <subject>"})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"<scope>"})," is optional. If your change is specific to one/two packages, consider adding the scope. Scopes should be brief but recognizable, e.g. ",(0,t.jsx)(s.code,{children:"content-docs"}),", ",(0,t.jsx)(s.code,{children:"theme-classic"}),", ",(0,t.jsx)(s.code,{children:"core"})]}),"\n",(0,t.jsx)(s.p,{children:"The various types of commits:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"feat"}),": a new API or behavior ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"fix"}),": a bug fix ",(0,t.jsx)(s.strong,{children:"for the end user"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docs"}),": a change to the website or other Markdown documents in our repo."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"refactor"}),": a change to production code that leads to no behavior difference, e.g. splitting files, renaming internal variables, improving code style..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"test"}),": adding missing tests, refactoring tests; no production code change."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"chore"}),": upgrading dependencies, releasing new versions... Chores that are ",(0,t.jsx)(s.strong,{children:"regularly done"})," for maintenance purposes."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"misc"}),": anything else that doesn't change production code, yet is not ",(0,t.jsx)(s.code,{children:"test"})," or ",(0,t.jsx)(s.code,{children:"chore"}),". e.g. updating GitHub actions workflow."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not get too stressed about PR titles, however. Your PR will be squash-merged and your commit to the ",(0,t.jsx)(s.code,{children:"main"})," branch will get the title of your PR, so commits within a branch don't need to be semantically named. The maintainers will help you get the PR title right, and we also have a PR label system that doesn't equate with the commit message types. Your code is more important than conventions!"]}),"\n",(0,t.jsx)(s.p,{children:"Example:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"feat(core): allow overriding of webpack config\n^--^^----^ ^------------^\n| | |\n| | +-> Summary in present tense. Use lower case not title case!\n| |\n| +-> The package(s) that this change affected.\n|\n+-------\x3e Type: see above for the list we use.\n"})}),"\n",(0,t.jsx)(s.h3,{id:"versioned-docs",children:"Versioned Docs"}),"\n",(0,t.jsx)(s.p,{children:"If you only want to make doc changes, you just need to be aware of versioned docs."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/docs"}),' - The files here are responsible for the "next" version at ',(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/next/installation",children:"https://docusaurus.io/docs/next/installation"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"website/versioned_docs/version-X.Y.Z"})," - These are the docs for the X.Y.Z version at ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/docs/X.Y.Z/installation",children:"https://docusaurus.io/docs/X.Y.Z/installation"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Do not edit the auto-generated files within ",(0,t.jsx)(s.code,{children:"versioned_docs/"})," or ",(0,t.jsx)(s.code,{children:"versioned_sidebars/"})," unless you are sure it is necessary. For example, information about new features should not be documented in versioned docs. Edits made to older versions will not be propagated to newer versions of the docs."]}),"\n",(0,t.jsx)(s.h3,{id:"test-plan",children:"Test Plan"}),"\n",(0,t.jsx)(s.p,{children:"A good test plan has the exact commands you ran and their output and provides screenshots or videos if the pull request changes UI. If you've changed APIs, update the documentation."}),"\n",(0,t.jsx)(s.p,{children:"Tests are integrated into our continuous integration system, so you don't always need to run local tests. However, for significant code changes, it saves both your and the maintainers' time if you can do exhaustive tests locally first to make sure your PR is in good shape. There are many types of tests:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Build and typecheck."})," We use TypeScript in our codebase, which can make sure your code is consistent and catches some obvious mistakes early."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Unit tests."})," We use ",(0,t.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"})," for unit tests of API endpoints' behavior. You can run ",(0,t.jsx)(s.code,{children:"yarn test"})," in the root directory to run all tests, or ",(0,t.jsx)(s.code,{children:"yarn test path/to/your/file.test.ts"})," to run a specific test."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dogfooding."})," Our website itself covers all kinds of potential configuration cases and we even have a dedicated ",(0,t.jsx)(s.a,{href:"https://docusaurus.io/tests",children:"tests area"}),". Don't be afraid to update our website's configuration in your PR\u2014it can help the maintainers preview the effects. We can decide if the website change should be kept when merging and deploying for production."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"E2E tests."})," You can simulate the distribution and installation of the code with your fresh changes. If you need help testing your changes locally, you can check out the doc on doing ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/blob/main/admin/local-third-party-project-testing.md",children:"local third-party testing"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"licensing",children:"Licensing"}),"\n",(0,t.jsx)(s.p,{children:"By contributing to Docusaurus, you agree that your contributions will be licensed under its MIT license. Copy and paste this to the top of your new file(s):"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-js",children:"/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n"})}),"\n",(0,t.jsxs)(s.p,{children:["This is also auto-fixable with the ",(0,t.jsx)(s.code,{children:"header/header"})," ESLint rule."]}),"\n",(0,t.jsx)(s.h3,{id:"contributor-license-agreement-cla",children:"Contributor License Agreement (CLA)"}),"\n",(0,t.jsxs)(s.p,{children:["In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another Facebook open source project, you're good to go. If you are submitting a pull request for the first time, the Facebook GitHub Bot will reply with a link to the CLA form. You may also ",(0,t.jsx)(s.a,{href:"https://code.facebook.com/cla",children:"complete your CLA here"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"After you have signed the CLA, the CLA bot would automatically update the PR status. There's no need to open a new PR."}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"CLAs are required for us to merge your pull request."})," While we value your effort and are willing to wait for you to come back and address the reviews in case you are unavailable after sending the pull request, pull requests that are ready to merge but have CLA missing and no response from the author ",(0,t.jsx)(s.strong,{children:"will be closed within two weeks of opening"}),". If you have further questions about the CLA, please stay in touch with us."]}),"\n",(0,t.jsx)(s.p,{children:"If it happens that you were unavailable and your PR gets closed, feel free to reopen once it's ready! We are still happy to review it, help you complete it, and eventually merge it."}),"\n",(0,t.jsx)(s.h3,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,t.jsx)(s.p,{children:"When adding a new breaking change, follow this template in your pull request:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-md",children:"### New breaking change here\n\n- **Who does this affect**:\n- **How to migrate**:\n- **Why make this breaking change**:\n- **Severity (number of people affected x effort)**:\n"})}),"\n",(0,t.jsx)(s.h3,{id:"what-happens-next",children:"What Happens Next?"}),"\n",(0,t.jsx)(s.p,{children:"The core Docusaurus team will be monitoring pull requests. Do help us by keeping pull requests consistent by following the guidelines above."})]})}function r(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}const a={title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},l=void 0,c={id:"contributing",title:"Contributing",description:"",source:"@site/community/3-contributing.mdx",sourceDirName:".",slug:"/contributing",permalink:"/community/contributing",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/3-contributing.mdx",tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,sidebarPosition:3,frontMatter:{title:"Contributing",hide_title:!0,sidebar_label:"Contributing"},sidebar:"community",previous:{title:"Awesome Resources",permalink:"/community/resources"},next:{title:"Canary releases",permalink:"/community/canary"}},u={},d=[{value:"Code of Conduct",id:"code-of-conduct",level:2},{value:"Get Involved",id:"get-involved",level:2},{value:"Join our Discord Channel",id:"join-our-discord-channel",level:3},{value:"Triaging Issues and Pull Requests",id:"triaging-issues-and-pull-requests",level:3},{value:"Our Development Process",id:"our-development-process",level:2},{value:"Branch Organization",id:"branch-organization",level:3},{value:"Issues",id:"issues",level:2},{value:"Bugs",id:"bugs",level:3},{value:"Security Bugs",id:"security-bugs",level:3},{value:"Feature requests",id:"feature-requests",level:3},{value:"Proposals",id:"proposals",level:3},{value:"Claiming issues",id:"claiming-issues",level:3},{value:"Development",id:"development",level:2},{value:"Online one-click setup for contributing",id:"online-one-click-setup-for-contributing",level:3},{value:"Installation",id:"installation",level:3},{value:"Code Conventions",id:"code-conventions",level:3},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Semantic Commit Messages",id:"semantic-commit-messages",level:3},{value:"Versioned Docs",id:"versioned-docs",level:3},{value:"Test Plan",id:"test-plan",level:3},{value:"Licensing",id:"licensing",level:3},{value:"Contributor License Agreement (CLA)",id:"contributor-license-agreement-cla",level:3},{value:"Breaking Changes",id:"breaking-changes",level:3},{value:"What Happens Next?",id:"what-happens-next",level:3}];function h(e){return(0,t.jsx)(r,{})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h()}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const o={},i=t.createContext(o);function r(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/201d0633.31186301.js b/assets/js/201d0633.31186301.js new file mode 100644 index 0000000000..7fab51466a --- /dev/null +++ b/assets/js/201d0633.31186301.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91510],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),c=t(3620),l=t(44479),d=t(62821),a=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function g(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,a.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function x({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,d._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(j(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=g(e),[i,c]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[d,a]=b({queryString:t,groupId:r}),[h,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=d?d:h;return x({value:e,tabValues:o})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),a(e),j(e)}),[a,j,o]),tabValues:o}}var m=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function w(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function P({className:e,block:n,selectedValue:t,selectValue:s,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),a=e=>{const n=e.currentTarget,r=l.indexOf(n),o=c[r].value;o!==t&&(d(n),s(o))},u=e=>{let n=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:a},s),{className:(0,o.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function B(e){const n=f(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(P,v({},e,n)),(0,r.jsx)(k,v({},e,n))]})}function T(e){const n=(0,m.Z)();return(0,r.jsx)(B,w(v({},e),{children:p(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},52605:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=t(27378),o=t(80474),i=t(3620);const c={apiTable:"apiTable_e8hp"};function l({name:e,children:n},t){const c=function(e){let n=e;for(;(0,s.isValidElement)(n);)[n]=s.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),l=e?`${e}-${c}`:c,d=`#${l}`,a=(0,i.k6)();return(0,o.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:a.location.hash===d?t:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||a.push(d)},onKeyDown:e=>{"Enter"===e.key&&a.push(d)},children:n.props.children})}const d=s.forwardRef(l);function a({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[t,o]=s.Children.toArray(e.props.children),i=(0,s.useRef)(null);(0,s.useEffect)((()=>{var e;null===(e=i.current)||void 0===e||e.focus()}),[i]);const l=s.Children.map(o.props.children,(e=>(0,r.jsx)(d,{name:n,ref:i,children:e})));return(0,r.jsxs)("table",{className:c.apiTable,children:[t,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),s=(t(27378),t(41428)),o=t(92053),i=t(36712),c=t(97555),l=t(61132),d=t(38112);const a=void 0;function u({code:e,pluginName:n,presetOptionName:t}){const u=(0,o.zu)(a).path;return(0,r.jsxs)(c.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,i.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(s.Z,{to:`${u}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(i.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${t}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,i.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(d.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${n}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Re});var r={};t.r(r),t.d(r,{ButtonExample:()=>L});var s=t(24246),o=t(27378),i=t(40624),c=t(29088),l=t(32711),d=t(36712),a=t(4423),u=t(94544),h=t(30691),j=t(78844),p=t(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:n}=(0,j.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var x=t(88941);const b={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){f(e,n,t[n])}))}return e}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function v({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(b.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(u.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(x.Z,{fallback:e=>(0,s.jsx)(h.Ac,m({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:b.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function B(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:b.playgroundEditor},String(e))}function T(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(v,{children:(0,s.jsx)(d.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(B,{})]})}const S=e=>`${e};`;function D(e){var n,{children:t,transformCode:r}=e,o=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,a.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,d=g();var u;const h=null!==(u=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,s.jsx)("div",{className:b.playgroundContainer,children:(0,s.jsx)(l.nu,y(m({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:S,theme:d},o),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(T,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(T,{}),(0,s.jsx)(k,{})]})}))})}function C(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){C(e,n,t[n])}))}return e}function N(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function L(e){return(0,s.jsx)("button",N(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function I(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const F=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){I(e,n,t[n])}))}return e}({React:o},o,r);var R,_,A=t(89583),Z=t(6324),M=t.n(Z);function U(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){U(e,n,t[n])}))}return e}({},W),H=null!=(H={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?H:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(H)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(H)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(H,e))})),z);var z,H;const G=Object.keys(W);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=q[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function X(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:s,metastring:o}=n;if(o&&V.test(o)){const e=o.match(V).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(G,n)}}(r,s),c=t.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),d=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),a=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let j=0;j<c.length;){const e=c[j].match(i);if(!e){j+=1;continue}const n=e.slice(1).find((e=>void 0!==e));d[n]?l[d[n]].range+=`${j},`:a[n]?l[a[n]].start=j:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${j-1},`),c.splice(j,1)}t=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{M()(n).forEach((n=>{var t;null!==(t=(R=h)[_=n])&&void 0!==t||(R[_]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const K={codeBlockContainer:"codeBlockContainer_jDV4"};function Q(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const s=n[e];s&&"string"==typeof r&&(t[s]=r)})),t}(g());return(0,s.jsx)(n,Y(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Q(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,K.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:te.codeBlockLines,children:e})})}var se=t(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,t=oe){const r=(0,se.zX)(n),s=(0,se.Ql)(t);(0,o.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,s),()=>n.disconnect()}),[e,r,s])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function de(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){de(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ae({},o({token:e,key:n})),n)));return(0,s.jsxs)("span",ue(ae({},c),{children:[t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var je=t(34370);function pe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function xe(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){pe(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function me(e){return(0,s.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){be(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const ye={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{(0,je.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":t?(0,d.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,d.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,d.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,ye.copyButton,t&&ye.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:ye.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(xe,{className:ye.copyButtonIcon}),(0,s.jsx)(me,{className:ye.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Be({className:e,onClick:n,isEnabled:t}){const r=(0,d.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Te({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:d,magicComments:a}}=(0,p.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:d),j=g(),x=function(){const[e,n]=(0,o.useState)(!1),[t,r]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const t=s.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,t=e>n||s.current.querySelector("code").hasAttribute("style");r(t)}),[s]);return ie(s,c),(0,o.useEffect)((()=>{c()}),[e,c]),(0,o.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:t,toggle:i}}(),b=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:f,code:m}=X(e,{metastring:t,language:h,magicComments:a}),y=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[b&&(0,s.jsx)("div",{className:te.codeBlockTitle,children:b}),(0,s.jsxs)("div",{className:te.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:j,code:m,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:x.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,y&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:r,getTokenProps:o,classNames:f[n],showLineNumbers:y},n)))})})}),(0,s.jsxs)("div",{className:te.buttonGroup,children:[(x.isEnabled||x.isCodeScrollable)&&(0,s.jsx)(Be,{className:te.codeButton,onClick:()=>x.toggle(),isEnabled:x.isEnabled}),(0,s.jsx)(Oe,{className:te.codeButton,code:m})]})]})]})}function Se(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function De(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ce(e,n){if(null==e)return{};var t,r,s=function(e,n){if(null==e)return{};var t,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Le=(Ie=function(e){var{children:n}=e,t=Ce(e,["children"]);const r=(0,c.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?Te:re;return(0,s.jsx)(l,De(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Se(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,s.jsx)(D,Ne({scope:F},e)):(0,s.jsx)(Ie,Ne({},e))});var Ie;function Fe(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(e){return(0,s.jsx)(Le,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Fe(e,n,t[n])}))}return e}({},e))}},86681:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>j});var r=t(24246),s=t(71670),o=t(97555),i=t(61132),c=t(52605),l=t(82064);const d={sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},a="\ud83d\udce6 plugin-content-blog",u={id:"api/plugins/plugin-content-blog",title:"\ud83d\udce6 plugin-content-blog",description:"Provides the Blog feature and is the default blog plugin for Docusaurus.",source:"@site/docs/api/plugins/plugin-content-blog.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-content-blog",permalink:"/docs/api/plugins/@docusaurus/plugin-content-blog",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-content-blog.mdx",tags:[],version:"current",lastUpdatedBy:"ozaki",lastUpdatedAt:1710503406e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/plugins/@docusaurus/plugin-content-blog"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-docs",permalink:"/docs/api/plugins/@docusaurus/plugin-content-docs"},next:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"}},h={},j=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>EditUrlFn</code>",id:"EditUrlFn",level:4},{value:"<code>ReadingTimeFn</code>",id:"ReadingTimeFn",level:4},{value:"<code>FeedType</code>",id:"FeedType",level:4},{value:"<code>CreateFeedItemsFn</code>",id:"CreateFeedItemsFn",level:4},{value:"<code>ProcessBlogPostsFn</code>",id:"ProcessBlogPostsFn",level:4},{value:"Example configuration",id:"ex-config",level:3},{value:"Markdown front matter",id:"markdown-front-matter",level:2},{value:"i18n",id:"i18n",level:2},{value:"Translation files location",id:"translation-files-location",level:3},{value:"Example file-system structure",id:"example-file-system-structure",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-plugin-content-blog",children:"\ud83d\udce6 plugin-content-blog"}),"\n","\n",(0,r.jsxs)(n.p,{children:["Provides the ",(0,r.jsx)(n.a,{href:"/docs/blog",children:"Blog"})," feature and is the default blog plugin for Docusaurus."]}),"\n",(0,r.jsx)(n.admonition,{title:"some features production only",type:"warning",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/blog#feed",children:"feed feature"})," works by extracting the build output, and is ",(0,r.jsx)(n.strong,{children:"only active in production"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(o.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-content-blog\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-content-blog\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsx)(n.td,{children:"Path to the blog content directory on the file system, relative to site dir."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editUrl"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:["string | ",(0,r.jsx)(n.a,{href:"#EditUrlFn",children:"EditUrlFn"})]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Base URL to edit your site. The final URL is computed by ",(0,r.jsx)(n.code,{children:"editUrl + relativePostPath"}),". Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"editLocalizedFiles"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["The edit URL will target the localized file, instead of the original unlocalized file. Ignored when ",(0,r.jsx)(n.code,{children:"editUrl"})," is a function."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page title for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogDescription"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Blog'"})}),(0,r.jsx)(n.td,{children:"Blog page meta description for better SEO."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarCount"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"5"})}),(0,r.jsxs)(n.td,{children:["Number of blog post elements to show in the blog sidebar. ",(0,r.jsx)(n.code,{children:"'ALL'"})," to show all blog posts; ",(0,r.jsx)(n.code,{children:"0"})," to disable."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogSidebarTitle"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'Recent posts'"})}),(0,r.jsx)(n.td,{children:"Title of the blog sidebar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"routeBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'blog'"})}),(0,r.jsxs)(n.td,{children:["URL route for the blog section of your site. ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"/"})," to put the blog at root path."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tagsBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'tags'"})}),(0,r.jsxs)(n.td,{children:["URL route for the tags section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pageBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'page'"})}),(0,r.jsxs)(n.td,{children:["URL route for the pages section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"archiveBasePath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"string | null"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'archive'"})}),(0,r.jsxs)(n.td,{children:["URL route for the archive section of your blog. Will be appended to ",(0,r.jsx)(n.code,{children:"routeBasePath"}),". ",(0,r.jsx)(n.strong,{children:"DO NOT"})," include a trailing slash. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation of archive."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"include"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"['**/*.{md,mdx}']"})}),(0,r.jsx)(n.td,{children:"Array of glob patterns matching Markdown files to be built, relative to the content path."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"exclude"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See example configuration"})}),(0,r.jsxs)(n.td,{children:["Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the ",(0,r.jsx)(n.code,{children:"include"})," option."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"postsPerPage"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"number | 'ALL'"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"10"})}),(0,r.jsxs)(n.td,{children:["Number of posts to show per page in the listing page. Use ",(0,r.jsx)(n.code,{children:"'ALL'"})," to display all posts on one listing page."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog listing page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogPostComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogPostPage'"})}),(0,r.jsx)(n.td,{children:"Root component of each blog post page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsListComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsListPage'"})}),(0,r.jsx)(n.td,{children:"Root component of the tags list page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogTagsPostsComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogTagsPostsPage'"})}),(0,r.jsx)(n.td,{children:'Root component of the "posts containing tag" page.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"blogArchiveComponent"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'@theme/BlogArchivePage'"})}),(0,r.jsx)(n.td,{children:"Root component of the blog archive page."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"remarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Remark plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"rehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Rehype plugins passed to MDX."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRemarkPlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"beforeDefaultRehypePlugins"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"any[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:"Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"truncateMarker"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"RegExp"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"/\x3c!--\\s*truncate\\s*--\x3e/"})," | ",(0,r.jsx)(n.code,{children:"\\{\\/\\*\\s*truncate\\s*\\*\\/\\}/"})]}),(0,r.jsx)(n.td,{children:"Truncate marker marking where the summary ends."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showReadingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"true"})}),(0,r.jsx)(n.td,{children:"Show estimated reading time for the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"readingTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),(0,r.jsx)(n.td,{children:"The default reading time"}),(0,r.jsx)(n.td,{children:"A callback to customize the reading time number displayed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authorsMapPath"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'authors.yml'"})}),(0,r.jsx)(n.td,{children:"Path to the authors map file, relative to the blog content directory."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.em,{children:"See below"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"{type: ['rss', 'atom']}"})}),(0,r.jsx)(n.td,{children:"Blog feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.type"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"})," | ",(0,r.jsx)(n.a,{href:"#FeedType",children:"FeedType"}),"[] | 'all' | null"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsxs)(n.td,{children:["Type of feed to be generated. Use ",(0,r.jsx)(n.code,{children:"null"})," to disable generation."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.createFeedItems"})}),(0,r.jsx)(n.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(n.a,{href:"#CreateFeedItemsFn",children:"CreateFeedItemsFn"})," | undefined"]})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform and / or filter the items in the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.limit"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number | null | false"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"20"})}),(0,r.jsxs)(n.td,{children:["Limits the feed to the specified number of posts, ",(0,r.jsx)(n.code,{children:"false"})," or ",(0,r.jsx)(n.code,{children:"null"})," for all entries. Defaults to ",(0,r.jsx)(n.code,{children:"20"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"siteConfig.title"})}),(0,r.jsx)(n.td,{children:"Title of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"`${siteConfig.title} Blog`"})}),(0,r.jsx)(n.td,{children:"Description of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.copyright"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Copyright message."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"feedOptions.language"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"string"})," (See ",(0,r.jsx)(n.a,{href:"http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes",children:"documentation"})," for possible values)"]}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"Language metadata of the feed."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sortPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:"'descending' | 'ascending' "})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"'descending'"})}),(0,r.jsx)(n.td,{children:"Governs the direction of blog post sorting."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"processBlogPosts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(n.a,{href:"#ProcessBlogPostsFn",children:"ProcessBlogPostsFn"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsx)(n.td,{children:"An optional function which can be used to transform blog posts (filter, modify, delete, etc...)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateAuthor"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to display the author who last updated the blog post."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"showLastUpdateTime"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsxs)(n.td,{children:["Whether to display the last date the blog post was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub ",(0,r.jsx)(n.code,{children:"actions/checkout"}),", use",(0,r.jsx)(n.code,{children:"fetch-depth: 0"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(n.h4,{id:"EditUrlFn",children:(0,r.jsx)(n.code,{children:"EditUrlFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type EditUrlFunction = (params: {\n blogDirPath: string;\n blogPath: string;\n permalink: string;\n locale: string;\n}) => string | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ReadingTimeFn",children:(0,r.jsx)(n.code,{children:"ReadingTimeFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ReadingTimeOptions = {\n wordsPerMinute: number;\n wordBound: (char: string) => boolean;\n};\n\ntype ReadingTimeCalculator = (params: {\n content: string;\n frontMatter?: BlogPostFrontMatter & Record<string, unknown>;\n options?: ReadingTimeOptions;\n}) => number;\n\ntype ReadingTimeFn = (params: {\n content: string;\n frontMatter: BlogPostFrontMatter & Record<string, unknown>;\n defaultReadingTime: ReadingTimeCalculator;\n}) => number | undefined;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"FeedType",children:(0,r.jsx)(n.code,{children:"FeedType"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FeedType = 'rss' | 'atom' | 'json';\n"})}),"\n",(0,r.jsx)(n.h4,{id:"CreateFeedItemsFn",children:(0,r.jsx)(n.code,{children:"CreateFeedItemsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type CreateFeedItemsFn = (params: {\n blogPosts: BlogPost[];\n siteConfig: DocusaurusConfig;\n outDir: string;\n defaultCreateFeedItemsFn: CreateFeedItemsFn;\n}) => Promise<BlogFeedItem[]>;\n"})}),"\n",(0,r.jsx)(n.h4,{id:"ProcessBlogPostsFn",children:(0,r.jsx)(n.code,{children:"ProcessBlogPostsFn"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type ProcessBlogPostsFn = (params: {\n blogPosts: BlogPost[];\n}) => Promise<void | BlogPost[]>;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-content-blog",presetOptionName:"blog",code:"{\n path: 'blog',\n // Simple use-case: string editUrl\n // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',\n // Advanced use-case: functional editUrl\n editUrl: ({locale, blogDirPath, blogPath, permalink}) =>\n `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`,\n editLocalizedFiles: false,\n blogTitle: 'Blog title',\n blogDescription: 'Blog',\n blogSidebarCount: 5,\n blogSidebarTitle: 'All our posts',\n routeBasePath: 'blog',\n include: ['**/*.{md,mdx}'],\n exclude: [\n '**/_*.{js,jsx,ts,tsx,md,mdx}',\n '**/_*/**',\n '**/*.test.{js,jsx,ts,tsx}',\n '**/__tests__/**',\n ],\n postsPerPage: 10,\n blogListComponent: '@theme/BlogListPage',\n blogPostComponent: '@theme/BlogPostPage',\n blogTagsListComponent: '@theme/BlogTagsListPage',\n blogTagsPostsComponent: '@theme/BlogTagsPostsPage',\n remarkPlugins: [require('./my-remark-plugin')],\n rehypePlugins: [],\n beforeDefaultRemarkPlugins: [],\n beforeDefaultRehypePlugins: [],\n truncateMarker: /\x3c!--\\s*(truncate)\\s*--\x3e/,\n showReadingTime: true,\n feedOptions: {\n type: '',\n title: '',\n description: '',\n copyright: '',\n language: undefined,\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n },\n}"}),"\n",(0,r.jsx)(n.h2,{id:"markdown-front-matter",children:"Markdown front matter"}),"\n",(0,r.jsxs)(n.p,{children:["Markdown documents can use the following Markdown ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," metadata fields, enclosed by a line ",(0,r.jsx)(n.code,{children:"---"})," on either side."]}),"\n",(0,r.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(c.Z,{children:(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Default"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Authors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["List of blog post authors (or unique author). Read the ",(0,r.jsxs)(n.a,{href:"/docs/blog#blog-post-authors",children:[(0,r.jsx)(n.code,{children:"authors"})," guide"]})," for more explanations. Prefer ",(0,r.jsx)(n.code,{children:"authors"})," over the ",(0,r.jsx)(n.code,{children:"author_*"})," front matter fields, even for single author blog posts."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The blog post author's name."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL that the author's name will be linked to. This could be a GitHub, Twitter, Facebook profile URL, etc."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_image_url"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". The URL to the author's thumbnail image."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"author_title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["\u26a0\ufe0f Prefer using ",(0,r.jsx)(n.code,{children:"authors"}),". A description of the author."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Markdown title"}),(0,r.jsx)(n.td,{children:"The blog post title."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"date"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File name or file creation time"}),(0,r.jsxs)(n.td,{children:["The blog post creation date. If not specified, this can be extracted from the file or folder name, e.g, ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021-04-15-blog-post/index.mdx"}),", ",(0,r.jsx)(n.code,{children:"2021/04/15/blog-post.mdx"}),". Otherwise, it is the Markdown file creation time."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"tags"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Tag[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["A list of strings or objects of two string fields ",(0,r.jsx)(n.code,{children:"label"})," and ",(0,r.jsx)(n.code,{children:"permalink"})," to tag to your post."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"draft"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Draft blog posts will only be available during development."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"unlisted"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:'Unlisted blog posts will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"hide_table_of_contents"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"boolean"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})}),(0,r.jsx)(n.td,{children:"Whether to hide the table of contents to the right."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_min_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"2"})}),(0,r.jsx)(n.td,{children:"The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"toc_max_heading_level"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"number"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"3"})}),(0,r.jsx)(n.td,{children:"The max heading level shown in the table of contents. Must be between 2 and 6."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Keywords meta tag, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="keywords" content="keyword1,keyword2,..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"The first line of Markdown content"}),(0,r.jsxs)(n.td,{children:["The description of your document, which will become the ",(0,r.jsx)(n.code,{children:'<meta name="description" content="..."/>'})," and ",(0,r.jsx)(n.code,{children:'<meta property="og:description" content="..."/>'})," in ",(0,r.jsx)(n.code,{children:"<head>"}),", used by search engines."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"image"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Cover or thumbnail image that will be used as the ",(0,r.jsx)(n.code,{children:'<meta property="og:image" content="..."/>'})," in the ",(0,r.jsx)(n.code,{children:"<head>"}),", enhancing link previews on social media and messaging platforms."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"slug"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"File path"}),(0,r.jsxs)(n.td,{children:["Allows to customize the blog post URL (",(0,r.jsx)(n.code,{children:"/<routeBasePath>/<slug>"}),"). Support multiple patterns: ",(0,r.jsx)(n.code,{children:"slug: my-blog-post"}),", ",(0,r.jsx)(n.code,{children:"slug: /my/path/to/blog/post"}),", slug: ",(0,r.jsx)(n.code,{children:"/"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"last_update"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"FrontMatterLastUpdate"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"undefined"})}),(0,r.jsxs)(n.td,{children:["Allows overriding the last update author/date. Date can be any ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse",children:"parsable date string"}),"."]})]})]})]})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type FrontMatterLastUpdate = {date?: string; author?: string};\n\ntype Tag = string | {label: string; permalink: string};\n\n// An author key references an author from the global plugin authors.yml file\ntype AuthorKey = string;\n\ntype Author = {\n key?: AuthorKey;\n name: string;\n title?: string;\n url?: string;\n image_url?: string;\n};\n\n// The front matter authors field allows various possible shapes\ntype Authors = AuthorKey | Author | (AuthorKey | Author)[];\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"---\ntitle: Welcome Docusaurus\nauthors:\n - slorber\n - yangshun\n - name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\ntags: [hello, docusaurus-v2]\ndescription: This is my first post on Docusaurus.\nimage: https://i.imgur.com/mErPwqL.png\nhide_table_of_contents: false\n---\n\nA Markdown blog post\n"})}),"\n",(0,r.jsx)(n.h2,{id:"i18n",children:"i18n"}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction"})," first."]}),"\n",(0,r.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Base path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Multi-instance path"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog-[pluginId]"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"JSON files"}),": extracted with ",(0,r.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,r.jsx)(n.code,{children:"docusaurus write-translations"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Markdown files"}),": ",(0,r.jsx)(n.code,{children:"website/i18n/[locale]/docusaurus-plugin-content-blog"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"example-file-system-structure",children:"Example file-system structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"website/i18n/[locale]/docusaurus-plugin-content-blog\n\u2502\n\u2502 # translations for website/blog\n\u251c\u2500\u2500 authors.yml\n\u251c\u2500\u2500 first-blog-post.md\n\u251c\u2500\u2500 second-blog-post.md\n\u2502\n\u2502 # translations for the plugin options that will be rendered\n\u2514\u2500\u2500 options.json\n"})})]})}function g(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/209ff87f.5c98e53d.js b/assets/js/209ff87f.5c98e53d.js new file mode 100644 index 0000000000..0f7913da9e --- /dev/null +++ b/assets/js/209ff87f.5c98e53d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[94152],{61132:(e,a,n)=>{n.d(a,{Z:()=>l});var t=n(24246),s=(n(27378),n(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:a,className:n}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.Z)(r.tabItem,n),hidden:a,children:e})}},97555:(e,a,n)=>{n.d(a,{Z:()=>Z});var t=n(24246),s=n(27378),r=n(40624),l=n(75527),i=n(3620),o=n(44479),c=n(62821),d=n(52196),u=n(53589);function b(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function h(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function p(e){var a,n;return null!==(n=null===(a=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:a}=e;return!!a&&"object"==typeof a&&"value"in a}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===a?void 0:a.filter(Boolean))&&void 0!==n?n:[]}function m(e){const{values:a,children:n}=e;return(0,s.useMemo)((()=>{const e=null!=a?a:function(e){return p(e).map((({props:{value:e,label:a,attributes:n,default:t}})=>({value:e,label:a,attributes:n,default:t})))}(n);return function(e){const a=(0,d.l)(e,((e,a)=>e.value===a.value));if(a.length>0)throw new Error(`Docusaurus error: Duplicate values "${a.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[a,n])}function g({value:e,tabValues:a}){return a.some((a=>a.value===e))}function j({queryString:e=!1,groupId:a}){const n=(0,i.k6)(),t=function({queryString:e=!1,groupId:a}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:e,groupId:a}),r=(0,c._X)(t),l=(0,s.useCallback)((e=>{if(!t)return;const a=new URLSearchParams(n.location.search);a.set(t,e),n.replace(h(function(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){b(e,a,n[a])}))}return e}({},n.location),{search:a.toString()}))}),[t,n]);return[r,l]}function x(e){const{defaultValue:a,queryString:n=!1,groupId:t}=e,r=m(e),[l,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:a}){if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const t=null!==(n=a.find((e=>e.default)))&&void 0!==n?n:a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:a,tabValues:r}))),[c,d]=j({queryString:n,groupId:t}),[b,h]=function({groupId:e}){const a=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,t]=(0,u.Nk)(a);return[n,(0,s.useCallback)((e=>{a&&t.set(e)}),[a,t])]}({groupId:t}),p=(()=>{const e=null!=c?c:b;return g({value:e,tabValues:r})?e:null})();(0,o.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),h(e)}),[d,h,r]),tabValues:r}}var f=n(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function y(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){w(e,a,n[a])}))}return e}function T(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function I({className:e,block:a,selectedValue:n,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const a=e.currentTarget,t=o.indexOf(a),r=i[t].value;r!==n&&(c(a),s(r))},u=e=>{let a=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var n;a=null!==(n=o[t])&&void 0!==n?n:o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;var t;a=null!==(t=o[n])&&void 0!==t?t:o[o.length-1];break}}null==a||a.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},e),children:i.map((({value:e,label:a,attributes:s})=>(0,t.jsx)("li",T(y({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},s),{className:(0,r.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":n===e}),children:null!=a?a:e}),e)))})}function O({lazy:e,children:a,selectedValue:n}){const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===n));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:r.map(((e,a)=>(0,s.cloneElement)(e,{key:a,hidden:e.props.value!==n})))})}function S(e){const a=x(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",v.tabList),children:[(0,t.jsx)(I,y({},e,a)),(0,t.jsx)(O,y({},e,a))]})}function Z(e){const a=(0,f.Z)();return(0,t.jsx)(S,T(y({},e),{children:p(e.children)}),String(a))}},6698:(e,a,n)=>{n.d(a,{Z:()=>c});var t=n(24246),s=(n(27378),n(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),t.forEach((function(a){l(e,a,n[a])}))}return e}function o(e,a){return a=null!=a?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):function(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))})),e}function c({children:e,minHeight:a,url:n="http://localhost:3000",style:l,bodyStyle:c}){return(0,t.jsxs)("div",{className:r.browserWindow,style:o(i({},l),{minHeight:a}),children:[(0,t.jsxs)("div",{className:r.browserWindowHeader,children:[(0,t.jsxs)("div",{className:r.buttons,children:[(0,t.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,t.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,t.jsx)("div",{className:(0,s.Z)(r.browserWindowAddressBar,"text--truncate"),children:n}),(0,t.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar}),(0,t.jsx)("span",{className:r.bar})]})})]}),(0,t.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},46831:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>b,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var t=n(24246),s=n(71670),r=n(6698),l=n(97555),i=n(61132);const o={red:"red_FE5X",orange:"orange_kp8w",yellow:"yellow_uGry"},c={id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},d="Tabs",u={id:"guides/markdown-features/tabs",title:"Tabs",description:"Using tabs inside Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-tabs.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/tabs",permalink:"/docs/markdown-features/tabs",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-tabs.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1682099337e3,frontMatter:{id:"tabs",description:"Using tabs inside Docusaurus Markdown",slug:"/markdown-features/tabs"},sidebar:"docs",previous:{title:"MDX and React",permalink:"/docs/markdown-features/react"},next:{title:"Code blocks",permalink:"/docs/markdown-features/code-blocks"}},b={},h=[{value:"Displaying a default tab",id:"displaying-a-default-tab",level:2},{value:"Syncing tab choices",id:"syncing-tab-choices",level:2},{value:"Customizing tabs",id:"customizing-tabs",level:2},{value:"Customizing tab headings",id:"customizing-tab-headings",level:3},{value:"Query string",id:"query-string",level:2}];function p(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",...(0,s.a)(),...e.components},{Details:n}=a;return n||function(e,a){throw new Error("Expected "+(a?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h1,{id:"tabs",children:"Tabs"}),"\n","\n",(0,t.jsxs)(a.p,{children:["Docusaurus provides the ",(0,t.jsx)(a.code,{children:"<Tabs>"})," component that you can use in Markdown thanks to ",(0,t.jsx)(a.a,{href:"/docs/markdown-features/react",children:"MDX"}),":"]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'import Tabs from \'@theme/Tabs\';\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" default>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana">\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsxs)(a.p,{children:["It is also possible to provide ",(0,t.jsx)(a.code,{children:"values"})," and ",(0,t.jsx)(a.code,{children:"defaultValue"})," props to ",(0,t.jsx)(a.code,{children:"Tabs"}),":"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:"<Tabs\n defaultValue=\"apple\"\n values={[\n {label: 'Apple', value: 'apple'},\n {label: 'Orange', value: 'orange'},\n {label: 'Banana', value: 'banana'},\n ]}>\n <TabItem value=\"apple\">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value=\"orange\">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value=\"banana\">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple",value:"apple"},{label:"Orange",value:"orange"},{label:"Banana",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsxs)("summary",{children:[(0,t.jsx)("code",{children:"Tabs"})," props take precedence over the ",(0,t.jsx)("code",{children:"TabItem"})," props:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs\n defaultValue="apple"\n values={[\n {label: \'Apple 1\', value: \'apple\'},\n {label: \'Orange 1\', value: \'orange\'},\n {label: \'Banana 1\', value: \'banana\'},\n ]}>\n <TabItem value="apple" label="Apple 2">\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange 2">\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana 2" default>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{defaultValue:"apple",values:[{label:"Apple 1",value:"apple"},{label:"Orange 1",value:"orange"},{label:"Banana 1",value:"banana"}],children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple 2",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange 2",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana 2",default:!0,children:"This is a banana \ud83c\udf4c"})]})})]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsx)(a.p,{children:"By default, all tabs are rendered eagerly during the build process, and search engines can index hidden tabs."}),(0,t.jsxs)(a.p,{children:["It is possible to only render the default tab with ",(0,t.jsx)(a.code,{children:"<Tabs lazy />"}),"."]})]}),"\n",(0,t.jsx)(a.h2,{id:"displaying-a-default-tab",children:"Displaying a default tab"}),"\n",(0,t.jsxs)(a.p,{children:["The first tab is displayed by default, and to override this behavior, you can specify a default tab by adding ",(0,t.jsx)(a.code,{children:"default"})," to one of the tab items. You can also set the ",(0,t.jsx)(a.code,{children:"defaultValue"})," prop of the ",(0,t.jsx)(a.code,{children:"Tabs"})," component to the label value of your choice. For example, in the example above, either setting ",(0,t.jsx)(a.code,{children:"default"})," for the ",(0,t.jsx)(a.code,{children:'value="apple"'})," tab or setting ",(0,t.jsx)(a.code,{children:'defaultValue="apple"'}),' for the tabs forces the "Apple" tab to be open by default.']}),"\n",(0,t.jsxs)(a.p,{children:["Docusaurus will throw an error if a ",(0,t.jsx)(a.code,{children:"defaultValue"})," is provided for the ",(0,t.jsx)(a.code,{children:"Tabs"})," but it refers to a non-existing value. If you want none of the tabs to be shown by default, use ",(0,t.jsx)(a.code,{children:"defaultValue={null}"}),"."]}),"\n",(0,t.jsx)(a.h2,{id:"syncing-tab-choices",children:"Syncing tab choices"}),"\n",(0,t.jsxs)(a.p,{children:["You may want choices of the same kind of tabs to sync with each other. For example, you might want to provide different instructions for users on Windows vs users on macOS, and you want to change all OS-specific instructions tabs in one click. To achieve that, you can give all related tabs the same ",(0,t.jsx)(a.code,{children:"groupId"})," prop. Note that doing this will persist the choice in ",(0,t.jsx)(a.code,{children:"localStorage"})," and all ",(0,t.jsx)(a.code,{children:"<Tab>"})," instances with the same ",(0,t.jsx)(a.code,{children:"groupId"})," will update automatically when the value of one of them is changed. Note that group IDs are globally namespaced."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>\n <TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + C to copy."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + C to copy."})]}),(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Use Ctrl + V to paste."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"Use Command + V to paste."})]})]}),"\n",(0,t.jsxs)(a.p,{children:["For all tab groups that have the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the possible values do not need to be the same. If one tab group is chosen a value that does not exist in another tab group with the same ",(0,t.jsx)(a.code,{children:"groupId"}),", the tab group with the missing value won't change its tab. You can see that from the following example. Try to select Linux, and the above tab groups don't change."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">\n I am Windows.\n </TabItem>\n <TabItem value="mac" label="macOS">\n I am macOS.\n </TabItem>\n <TabItem value="linux" label="Linux">\n I am Linux.\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"I am Windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"I am macOS."}),(0,t.jsx)(i.Z,{value:"linux",label:"Linux",children:"I am Linux."})]})}),"\n",(0,t.jsx)(a.hr,{}),"\n",(0,t.jsx)(a.p,{children:"Tab choices with different group IDs will not interfere with each other:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs groupId="operating-systems">\n <TabItem value="win" label="Windows">Windows in windows.</TabItem>\n <TabItem value="mac" label="macOS">macOS is macOS.</TabItem>\n</Tabs>\n\n// highlight-next-line\n<Tabs groupId="non-mac-operating-systems">\n <TabItem value="win" label="Windows">Windows is windows.</TabItem>\n <TabItem value="unix" label="Unix">Unix is unix.</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsxs)(r.Z,{children:[(0,t.jsxs)(l.Z,{groupId:"operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows in windows."}),(0,t.jsx)(i.Z,{value:"mac",label:"macOS",children:"macOS is macOS."})]}),(0,t.jsxs)(l.Z,{groupId:"non-mac-operating-systems",children:[(0,t.jsx)(i.Z,{value:"win",label:"Windows",children:"Windows is windows."}),(0,t.jsx)(i.Z,{value:"unix",label:"Unix",children:"Unix is unix."})]})]}),"\n",(0,t.jsx)(a.h2,{id:"customizing-tabs",children:"Customizing tabs"}),"\n",(0,t.jsxs)(a.p,{children:["You might want to customize the appearance of a certain set of tabs. You can pass the string in ",(0,t.jsx)(a.code,{children:"className"})," prop, and the specified CSS class will be added to the ",(0,t.jsx)(a.code,{children:"Tabs"})," component:"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",children:'// highlight-next-line\n<Tabs className="unique-tabs">\n <TabItem value="Apple">This is an apple \ud83c\udf4e</TabItem>\n <TabItem value="Orange">This is an orange \ud83c\udf4a</TabItem>\n <TabItem value="Banana">This is a banana \ud83c\udf4c</TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{className:"unique-tabs",children:[(0,t.jsx)(i.Z,{value:"Apple",children:"This is an apple \ud83c\udf4e"}),(0,t.jsx)(i.Z,{value:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,t.jsx)(i.Z,{value:"Banana",children:"This is a banana \ud83c\udf4c"})]})}),"\n",(0,t.jsx)(a.h3,{id:"customizing-tab-headings",children:"Customizing tab headings"}),"\n",(0,t.jsxs)(a.p,{children:["You can also customize each tab heading independently by using the ",(0,t.jsx)(a.code,{children:"attributes"})," field. The extra props can be passed to the headings either through the ",(0,t.jsx)(a.code,{children:"values"})," prop in ",(0,t.jsx)(a.code,{children:"Tabs"}),", or props of each ",(0,t.jsx)(a.code,{children:"TabItem"}),"\u2014in the same way as you declare ",(0,t.jsx)(a.code,{children:"label"}),"."]}),"\n","\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-jsx",metastring:'title="some-doc.mdx"',children:'import styles from \'./styles.module.css\';\n\n<Tabs>\n <TabItem value="apple" label="Apple" attributes={{className: styles.red}}>\n This is an apple \ud83c\udf4e\n </TabItem>\n <TabItem value="orange" label="Orange" attributes={{className: styles.orange}}>\n This is an orange \ud83c\udf4a\n </TabItem>\n <TabItem value="banana" label="Banana" attributes={{className: styles.yellow}}>\n This is a banana \ud83c\udf4c\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:".red {\n color: red;\n}\n.red[aria-selected='true'] {\n border-bottom-color: red;\n}\n\n.orange {\n color: orange;\n}\n.orange[aria-selected='true'] {\n border-bottom-color: orange;\n}\n\n.yellow {\n color: yellow;\n}\n.yellow[aria-selected='true'] {\n border-bottom-color: yellow;\n}\n"})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{children:[(0,t.jsx)(i.Z,{value:"apple",label:"Apple",attributes:{className:o.red},children:(0,t.jsx)(a.p,{children:"This is an apple \ud83c\udf4e"})}),(0,t.jsx)(i.Z,{value:"orange",label:"Orange",attributes:{className:o.orange},children:(0,t.jsx)(a.p,{children:"This is an orange \ud83c\udf4a"})}),(0,t.jsx)(i.Z,{value:"banana",label:"Banana",attributes:{className:o.yellow},children:(0,t.jsx)(a.p,{children:"This is a banana \ud83c\udf4c"})})]})}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"className"})," would be merged with other default class names. You may also use a custom ",(0,t.jsx)(a.code,{children:"data-value"})," field (",(0,t.jsx)(a.code,{children:"{'data-value': 'apple'}"}),") paired with CSS attribute selectors:"]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-css",metastring:'title="styles.module.css"',children:"li[role='tab'][data-value='apple'] {\n color: red;\n}\n"})})]}),"\n",(0,t.jsx)(a.h2,{id:"query-string",children:"Query string"}),"\n",(0,t.jsx)(a.p,{children:"It is possible to persist the selected tab into the url search parameters. This enables you to share a link to a page which pre-selects the tab - linking from your Android app to documentation with the Android tabs pre-selected. This feature does not provide an anchor link - the browser will not scroll to the tab."}),"\n",(0,t.jsxs)(a.p,{children:["Use the ",(0,t.jsx)(a.code,{children:"queryString"})," prop to enable this feature and define the search param name to use."]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs queryString="current-os">\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),"\n",(0,t.jsxs)(a.p,{children:["As soon as a tab is clicked, a search parameter is added at the end of the url: ",(0,t.jsx)(a.code,{children:"?current-os=android"})," or ",(0,t.jsx)(a.code,{children:"?current-os=ios"}),"."]}),"\n",(0,t.jsxs)(a.admonition,{type:"tip",children:[(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.code,{children:"queryString"})," can be used together with ",(0,t.jsx)(a.code,{children:"groupId"}),"."]}),(0,t.jsxs)(a.p,{children:["For convenience, when the ",(0,t.jsx)(a.code,{children:"queryString"})," prop is ",(0,t.jsx)(a.code,{children:"true"}),", the ",(0,t.jsx)(a.code,{children:"groupId"})," value will be used as a fallback."]}),(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-tsx",children:'// highlight-next-line\n<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),(0,t.jsx)(r.Z,{children:(0,t.jsxs)(l.Z,{queryString:!0,groupId:"current-os",children:[(0,t.jsx)(i.Z,{value:"android",label:"Android",children:"Android"}),(0,t.jsx)(i.Z,{value:"ios",label:"iOS",children:"iOS"})]})}),(0,t.jsxs)(a.p,{children:["When the page loads, the tab query string choice will be restored in priority over the ",(0,t.jsx)(a.code,{children:"groupId"})," choice (using ",(0,t.jsx)(a.code,{children:"localStorage"}),")."]})]})]})}function m(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,a,n)=>{n.d(a,{Z:()=>i,a:()=>l});var t=n(27378);const s={},r=t.createContext(s);function l(e){const a=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/218a9086.e9baa100.js b/assets/js/218a9086.e9baa100.js new file mode 100644 index 0000000000..9fa9918e63 --- /dev/null +++ b/assets/js/218a9086.e9baa100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9708],{19459:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>c,toc:()=>i});var s=o(24246),a=o(71670);const n={last_update:{author:"custom author",date:"1/1/2000"}},r="Doc With Last Update Front Matter",c={id:"doc-with-last-update",title:"Doc With Last Update Front Matter",description:"",source:"@site/_dogfooding/_docs tests/doc-with-last-update.mdx",sourceDirName:".",slug:"/doc-with-last-update",permalink:"/tests/docs/doc-with-last-update",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"custom author",lastUpdatedAt:9466812e5,frontMatter:{last_update:{author:"custom author",date:"1/1/2000"}},sidebar:"sidebar",previous:{title:"Doc with another sidebar",permalink:"/tests/docs/doc-with-another-sidebar"},next:{title:"Tests",permalink:"/tests/docs/category/tests"}},d={},i=[];function u(t){const e={h1:"h1",...(0,a.a)(),...t.components};return(0,s.jsx)(e.h1,{id:"doc-with-last-update-front-matter",children:"Doc With Last Update Front Matter"})}function p(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(u,{...t})}):u(t)}},71670:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>r});var s=o(27378);const a={},n=s.createContext(a);function r(t){const e=s.useContext(n);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:r(t.components),s.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/21955.787e6c5c.js b/assets/js/21955.787e6c5c.js new file mode 100644 index 0000000000..18084c0d37 --- /dev/null +++ b/assets/js/21955.787e6c5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21955],{21955:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(99854),s=i(63294),r=(i(27693),i(7608),i(31699),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,4],i=[1,5],n=[1,6],s=[1,7],r=[1,9],c=[1,11,13,15,17,19,20,26,27,28,29],a=[2,5],l=[1,6,11,13,15,17,19,20,26,27,28,29],o=[26,27,28],h=[2,8],u=[1,18],y=[1,19],p=[1,20],d=[1,21],g=[1,22],_=[1,23],f=[1,28],m=[6,26,27,28,29],v={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,i,n,s,r,c){var a=r.length-1;switch(s){case 4:n.setShowData(!0);break;case 7:this.$=r[a-1];break;case 9:n.addSection(r[a-1],n.cleanupValue(r[a]));break;case 10:this.$=r[a].trim(),n.setDiagramTitle(this.$);break;case 11:this.$=r[a].trim(),n.setAccTitle(this.$);break;case 12:case 13:this.$=r[a].trim(),n.setAccDescription(this.$);break;case 14:n.addSection(r[a].substr(8)),this.$=r[a].substr(8);break;case 21:n.parseDirective("%%{","open_directive");break;case 22:n.parseDirective(r[a],"type_directive");break;case 23:r[a]=r[a].trim().replace(/'/g,'"'),n.parseDirective(r[a],"arg_directive");break;case 24:n.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},{1:[3]},{3:10,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},{3:11,4:2,5:3,6:e,21:8,26:i,27:n,28:s,29:r},t(c,a,{7:12,8:[1,13]}),t(l,[2,18]),t(l,[2,19]),t(l,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},t(o,h,{21:8,9:16,10:17,5:24,1:[2,3],11:u,13:y,15:p,17:d,19:g,20:_,29:r}),t(c,a,{7:25}),{23:26,24:[1,27],32:f},t([24,32],[2,22]),t(c,[2,6]),{4:29,26:i,27:n,28:s},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},t(o,[2,13]),t(o,[2,14]),t(o,[2,15]),t(o,h,{21:8,9:16,10:17,5:24,1:[2,4],11:u,13:y,15:p,17:d,19:g,20:_,29:r}),t(m,[2,16]),{25:34,31:[1,35]},t(m,[2,24]),t(c,[2,7]),t(o,[2,9]),t(o,[2,10]),t(o,[2,11]),t(o,[2,12]),{23:36,32:f},{32:[2,23]},t(m,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],s=[null],r=[],c=this.table,a="",l=0,o=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var g=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,f,m,v,b,k,x,S,w,$={};;){if(f=i[i.length-1],this.defaultActions[f]?m=this.defaultActions[f]:(null==_&&(w=void 0,"number"!=typeof(w=n.pop()||u.lex()||1)&&(w instanceof Array&&(w=(n=w).pop()),w=e.symbols_[w]||w),_=w),m=c[f]&&c[f][_]),void 0===m||!m.length||!m[0]){var E="";for(b in S=[],c[f])this.terminals_[b]&&b>2&&S.push("'"+this.terminals_[b]+"'");E=u.showPosition?"Parse error on line "+(l+1)+":\n"+u.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[_]||_,line:u.yylineno,loc:d,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+_);switch(m[0]){case 1:i.push(_),s.push(u.yytext),r.push(u.yylloc),i.push(m[1]),_=null,o=u.yyleng,a=u.yytext,l=u.yylineno,d=u.yylloc;break;case 2:if(k=this.productions_[m[1]][1],$.$=s[s.length-k],$._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply($,[a,o,l,y.yy,m[1],s,r].concat(h))))return v;k&&(i=i.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),i.push(this.productions_[m[1]][0]),s.push($.$),r.push($._$),x=c[i[i.length-2]][i[i.length-1]],i.push(x);break;case 3:return!0}}return!0}},b={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((i=this._input.match(this.rules[s[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};function k(){this.yy={}}return v.lexer=b,k.prototype=v,v.Parser=k,new k}());r.parser=r;const c=r,a=n.C.pie,l={},o=!1;let h=l,u=o;const y=structuredClone(a),p={getConfig:()=>structuredClone(y),parseDirective:(t,e,i)=>{(0,n.D)(void 0,t,e,i)},clear:()=>{h=structuredClone(l),u=o,(0,n.v)()},setDiagramTitle:n.r,getDiagramTitle:n.t,setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addSection:(t,e)=>{t=(0,n.d)(t,(0,n.c)()),void 0===h[t]&&(h[t]=e,n.l.debug(`added new section: ${t}, with value: ${e}`))},getSections:()=>h,cleanupValue:t=>(":"===t.substring(0,1)&&(t=t.substring(1).trim()),Number(t.trim())),setShowData:t=>{u=t},getShowData:()=>u},d={parser:c,db:p,renderer:{draw:(t,e,i,r)=>{var c,a;n.l.debug("rendering pie chart\n"+t);const l=r.db,o=(0,n.c)(),h=(0,n.E)(l.getConfig(),o.pie),u=450,y=(null==(a=null==(c=document.getElementById(e))?void 0:c.parentElement)?void 0:a.offsetWidth)??h.useWidth,p=(0,n.B)(e);p.attr("viewBox",`0 0 ${y} 450`),(0,n.i)(p,u,y,h.useMaxWidth);const d=18,g=p.append("g");g.attr("transform","translate("+y/2+",225)");const{themeVariables:_}=o;let[f]=(0,n.F)(_.pieOuterStrokeWidth);f??(f=2);const m=h.textPosition,v=Math.min(y,u)/2-40,b=(0,s.Nb1)().innerRadius(0).outerRadius(v),k=(0,s.Nb1)().innerRadius(v*m).outerRadius(v*m);g.append("circle").attr("cx",0).attr("cy",0).attr("r",v+f/2).attr("class","pieOuterCircle");const x=l.getSections(),S=(t=>{const e=Object.entries(t).map((t=>({label:t[0],value:t[1]})));return(0,s.ve8)().value((t=>t.value))(e)})(x),w=[_.pie1,_.pie2,_.pie3,_.pie4,_.pie5,_.pie6,_.pie7,_.pie8,_.pie9,_.pie10,_.pie11,_.pie12],$=(0,s.PKp)(w);g.selectAll("mySlices").data(S).enter().append("path").attr("d",b).attr("fill",(t=>$(t.data.label))).attr("class","pieCircle");let E=0;Object.keys(x).forEach((t=>{E+=x[t]})),g.selectAll("mySlices").data(S).enter().append("text").text((t=>(t.data.value/E*100).toFixed(0)+"%")).attr("transform",(t=>"translate("+k.centroid(t)+")")).style("text-anchor","middle").attr("class","slice"),g.append("text").text(l.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const D=g.selectAll(".legend").data($.domain()).enter().append("g").attr("class","legend").attr("transform",((t,e)=>"translate(216,"+(22*e-22*$.domain().length/2)+")"));D.append("rect").attr("width",d).attr("height",d).style("fill",$).style("stroke",$),D.data(S).append("text").attr("x",22).attr("y",14).text((t=>{const{label:e,value:i}=t.data;return l.getShowData()?`${e} [${i}]`:e}))}},styles:t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${t.pieOuterStrokeColor};\n stroke-width: ${t.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/2237.e730c617.js b/assets/js/2237.e730c617.js deleted file mode 100644 index f502100257..0000000000 --- a/assets/js/2237.e730c617.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[2237],{3363:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var s=n(4164),i=n(1312),o=n(1107),r=n(4848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,s.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(i.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(6540);var s=n(1312),i=n(1213),o=n(781),r=n(3363),a=n(4848);function d(){const e=(0,s.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.be,{title:e}),(0,a.jsx)(o.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/2283e669.01148708.js b/assets/js/2283e669.01148708.js new file mode 100644 index 0000000000..fc77e4fea7 --- /dev/null +++ b/assets/js/2283e669.01148708.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33703],{10921:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>r,toc:()=>d});var n=s(24246),i=s(71670),o=s(58464);const c={title:"Blog TOC FrontMatter tests",authors:["slorber"],toc_min_heading_level:2,toc_max_heading_level:4,tags:["paginated-tag"]},l=void 0,r={permalink:"/tests/blog/2021/08/21/blog-post-toc-tests",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx",source:"@site/_dogfooding/_blog tests/2021-08-21-blog-post-toc-tests.mdx",title:"Blog TOC FrontMatter tests",description:"{/ truncate /}",date:"2021-08-21T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:1.8,hasTruncateMarker:!0,authors:[{name:"Sebastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",twitter:"sebastienlorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Blog TOC FrontMatter tests",authors:["slorber"],toc_min_heading_level:2,toc_max_heading_level:4,tags:["paginated-tag"]},unlisted:!1,prevItem:{title:"Hmmm!",permalink:"/tests/blog/2021/08/22/no-author"},nextItem:{title:"Using twice the blog plugin",permalink:"/tests/blog/2020/08/03/demo/second-blog-intro"}},u={authorsImageUrls:[void 0]},d=[...o.d$];function a(e){return(0,n.jsxs)(n.Fragment,{children:["\n","\n",(0,n.jsx)(o.ZP,{})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a()}},58464:(e,t,s)=>{s.d(t,{ZP:()=>l,d$:()=>o});var n=s(24246),i=s(71670);const o=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function c(e){const t={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(t.p,{children:"some text"}),"\n",(0,n.jsx)(t.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(t.p,{children:"some text"})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>c});var n=s(27378);const i={},o=n.createContext(i);function c(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/228a014d.60f80638.js b/assets/js/228a014d.60f80638.js new file mode 100644 index 0000000000..6aa5e0d8ec --- /dev/null +++ b/assets/js/228a014d.60f80638.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48375],{61132:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),i=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function a({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),i=n(27378),s=n(40624),a=n(75527),o=n(3620),l=n(44479),c=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function b({queryString:e=!1,groupId:t}){const n=(0,o.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,c._X)(r),a=(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(p(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,a]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[a,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,u]=b({queryString:n,groupId:r}),[h,p]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,i.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=c?c:h;return m({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{f&&o(f)}),[f]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),p(e)}),[u,p,s]),tabValues:s}}var x=n(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:i,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),s=o[r].value;s!==n&&(c(t),i(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:o.map((({value:e,label:t,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},i),{className:(0,s.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function T(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,w({},e,t)),(0,r.jsx)(P,w({},e,t))]})}function D(e){const t=(0,x.Z)();return(0,r.jsx)(T,O(w({},e),{children:f(e.children)}),String(t))}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),i=n(27378),s=n(80474),a=n(3620);const o={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const o=function(e){let t=e;for(;(0,i.isValidElement)(t);)[t]=i.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${o}`:o,c=`#${l}`,u=(0,a.k6)();return(0,s.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===c?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(c)},onKeyDown:e=>{"Enter"===e.key&&u.push(c)},children:t.props.children})}const c=i.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,s]=i.Children.toArray(e.props.children),a=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=a.current)||void 0===e||e.focus()}),[a]);const l=i.Children.map(s.props.children,(e=>(0,r.jsx)(c,{name:t,ref:a,children:e})));return(0,r.jsxs)("table",{className:o.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},2830:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=n(24246),i=n(71670),s=n(97555),a=n(61132),o=n(52605);const l={sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},c="\ud83d\udce6 plugin-client-redirects",u={id:"api/plugins/plugin-client-redirects",title:"\ud83d\udce6 plugin-client-redirects",description:"Docusaurus Plugin to generate client-side redirects.",source:"@site/docs/api/plugins/plugin-client-redirects.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-client-redirects.mdx",tags:[],version:"current",lastUpdatedBy:"ozaki",lastUpdatedAt:1709665452e3,sidebarPosition:4,frontMatter:{sidebar_position:4,slug:"/api/plugins/@docusaurus/plugin-client-redirects"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-content-pages",permalink:"/docs/api/plugins/@docusaurus/plugin-content-pages"},next:{title:"\ud83d\udce6 plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug"}},d={},h=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Types",id:"types",level:3},{value:"<code>RedirectRule</code>",id:"RedirectRule",level:4},{value:"<code>CreateRedirectsFn</code>",id:"CreateRedirectsFn",level:4},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-plugin-client-redirects",children:"\ud83d\udce6 plugin-client-redirects"}),"\n","\n",(0,r.jsxs)(t.p,{children:["Docusaurus Plugin to generate ",(0,r.jsx)(t.strong,{children:"client-side redirects"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"This plugin will write additional HTML pages to your static site that redirect the user to your existing Docusaurus pages with JavaScript."}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," because it works on the build output."]})}),"\n",(0,r.jsxs)(t.admonition,{type:"warning",children:[(0,r.jsx)(t.p,{children:"It is better to use server-side redirects whenever possible."}),(0,r.jsx)(t.p,{children:"Before using this plugin, you should look if your hosting provider doesn't offer this feature."})]}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(a.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-client-redirects\n"})})}),(0,r.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-client-redirects\n"})})})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Option"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"fromExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be removed from the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"toExtensions"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The extensions to be appended to the route after redirecting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"redirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsxs)("code",{children:[(0,r.jsx)(t.a,{href:"#RedirectRule",children:"RedirectRule"}),"[]"]})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"[]"})}),(0,r.jsx)(t.td,{children:"The list of redirect rules."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"createRedirects"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:(0,r.jsx)(t.a,{href:"#CreateRedirectsFn",children:"CreateRedirectsFn"})})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"undefined"})}),(0,r.jsx)(t.td,{children:"A callback to create a redirect rule. Docusaurus query this callback against every path it has created, and use its return value to output more paths."})]})]})]})}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["This plugin will also read the ",(0,r.jsx)(t.a,{href:"/docs/api/docusaurus-config#onDuplicateRoutes",children:(0,r.jsx)(t.code,{children:"siteConfig.onDuplicateRoutes"})})," config to adjust its logging level when multiple files will be emitted to the same location."]})}),"\n",(0,r.jsx)(t.h3,{id:"types",children:"Types"}),"\n",(0,r.jsx)(t.h4,{id:"RedirectRule",children:(0,r.jsx)(t.code,{children:"RedirectRule"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"type RedirectRule = {\n to: string;\n from: string | string[];\n};\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.p,{children:['The idea of "from" and "to" is central in this plugin. "From" means a path that you want to ',(0,r.jsx)(t.em,{children:"create"}),', i.e. an extra HTML file that will be written; "to" means a path to want to redirect ',(0,r.jsx)(t.em,{children:"to"}),", usually a route that Docusaurus already knows about."]}),(0,r.jsx)(t.p,{children:'This is why you can have multiple "from" for the same "to": we will create multiple HTML files that all redirect to the same destination. On the other hand, one "from" can never have more than one "to": the written HTML file needs to have a determinate destination.'})]}),"\n",(0,r.jsx)(t.h4,{id:"CreateRedirectsFn",children:(0,r.jsx)(t.code,{children:"CreateRedirectsFn"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:'// The parameter `path` is a route that Docusaurus has already created. It can\n// be seen as the "to", and your return value is the "from". Returning a falsy\n// value will not create any redirect pages for this particular path.\ntype CreateRedirectsFn = (path: string) => string[] | string | null | undefined;\n'})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"Here's an example configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-client-redirects',\n // highlight-start\n {\n fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage\n toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip (if latter exists)\n redirects: [\n // /docs/oldDoc -> /docs/newDoc\n {\n to: '/docs/newDoc',\n from: '/docs/oldDoc',\n },\n // Redirect from multiple old paths to the new path\n {\n to: '/docs/newDoc2',\n from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],\n },\n ],\n createRedirects(existingPath) {\n if (existingPath.includes('/community')) {\n // Redirect from /docs/team/X to /community/X and /docs/support/X to /community/X\n return [\n existingPath.replace('/community', '/docs/team'),\n existingPath.replace('/community', '/docs/support'),\n ];\n }\n return undefined; // Return a falsy value: no redirect created\n },\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function f(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var r=n(27378);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/23abe487.170c4599.js b/assets/js/23abe487.170c4599.js new file mode 100644 index 0000000000..fc6b5f9ba2 --- /dev/null +++ b/assets/js/23abe487.170c4599.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19627],{56118:(e,a,n)=>{n.r(a),n.d(a,{default:()=>c});var l=n(24246),t=(n(27378),n(4423)),s=n(93127),o=n(22488);function c(){const{siteConfig:e}=(0,t.Z)();return(0,l.jsxs)(s.Z,{children:[(0,l.jsx)("h2",{children:"Site config"}),(0,l.jsx)(o.Z,{src:e,collapseDepth:3})]})}},22488:(e,a,n)=>{n.d(a,{Z:()=>y});var l=n(24246),t=n(27378);const s=e=>"boolean"==typeof e||e instanceof Boolean,o=e=>"number"==typeof e||e instanceof Number,c=e=>"bigint"==typeof e||e instanceof BigInt,r=e=>!!e&&e instanceof Date,u=e=>"string"==typeof e||e instanceof String,i=e=>Array.isArray(e),d=e=>e instanceof Object&&null!==e;function m(e){let{field:a,value:n,data:l,lastElement:s,openBracket:o,closeBracket:c,level:r,style:u,shouldExpandNode:i}=e;const d=(0,t.useRef)(!1),[m,p,_]=function(e){const[a,n]=(0,t.useState)(e());return[a,()=>n((e=>!e)),n]}((()=>i(r,n,a)));(0,t.useEffect)((()=>{d.current?_(i(r,n,a)):d.current=!0}),[i]);const b=m?u.collapseIcon:u.expandIcon,f=m?"collapse JSON":"expand JSON",v=(0,t.useId)(),x=r+1,E=l.length-1,g=e=>{" "===e.key&&p()};return(0,t.createElement)("div",{className:u.basicChildStyle,role:"list"},(0,t.createElement)("span",{className:b,onClick:p,onKeyDown:g,role:"button",tabIndex:0,"aria-label":f,"aria-expanded":m,"aria-controls":m?v:void 0}),a&&(0,t.createElement)("span",{className:u.label},a,":"),(0,t.createElement)("span",{className:u.punctuation},o),m?(0,t.createElement)("div",{id:v},l.map(((e,a)=>(0,t.createElement)(h,{key:e[0]||a,field:e[0],value:e[1],style:u,lastElement:a===E,level:x,shouldExpandNode:i})))):(0,t.createElement)("span",{className:u.collapsedContent,onClick:p,onKeyDown:g,role:"button",tabIndex:-1,"aria-hidden":!0,"aria-label":f,"aria-expanded":m}),(0,t.createElement)("span",{className:u.punctuation},c),!s&&(0,t.createElement)("span",{className:u.punctuation},","))}function p(e){let{field:a,value:n,style:l,lastElement:t,shouldExpandNode:s,level:o}=e;return m({field:a,value:n,lastElement:t||!1,level:o,openBracket:"{",closeBracket:"}",style:l,shouldExpandNode:s,data:Object.keys(n).map((e=>[e,n[e]]))})}function _(e){let{field:a,value:n,style:l,lastElement:t,level:s,shouldExpandNode:o}=e;return m({field:a,value:n,lastElement:t||!1,level:s,openBracket:"[",closeBracket:"]",style:l,shouldExpandNode:o,data:n.map((e=>[void 0,e]))})}function b(e){let{field:a,value:n,style:l,lastElement:i}=e,d=n,m=l.otherValue;return null===n?(d="null",m=l.nullValue):void 0===n?(d="undefined",m=l.undefinedValue):u(n)?(d=`"${n}"`,m=l.stringValue):s(n)?(d=n?"true":"false",m=l.booleanValue):o(n)?(d=n.toString(),m=l.numberValue):c(n)?(d=`${n.toString()}n`,m=l.numberValue):d=r(n)?n.toISOString():n.toString(),""===a&&(a='""'),(0,t.createElement)("div",{className:l.basicChildStyle,role:"listitem"},a&&(0,t.createElement)("span",{className:l.label},a,":"),(0,t.createElement)("span",{className:m},d),!i&&(0,t.createElement)("span",{className:l.punctuation},","))}function h(e){const a=e.value;return i(a)?(0,t.createElement)(_,Object.assign({},e)):d(a)&&!r(a)?(0,t.createElement)(p,Object.assign({},e)):(0,t.createElement)(b,Object.assign({},e))}var f="_2bkNM";const v={container:"_2IvMF _GzYRV",basicChildStyle:f,label:"_1MGIk",nullValue:"_2T6PJ",undefinedValue:"_1Gho6",stringValue:"_vGjyY",booleanValue:"_3zQKs",numberValue:"_1bQdo",otherValue:"_1xvuR",punctuation:"_3uHL6 _3eOF8",collapseIcon:"_oLqym _f10Tu _1MFti _1LId0",expandIcon:"_2AXVT _f10Tu _1MFti _1UmXx",collapsedContent:"_2KJWg _1pNG9 _1MFti"},x=()=>!0,E=e=>{let{data:a,style:n=v,shouldExpandNode:l=x}=e;return(0,t.createElement)("div",{className:n.container},(0,t.createElement)(h,{value:a,style:n,lastElement:!0,level:0,shouldExpandNode:l}))},g={container:"containerParaiso_TYa3",basicChildStyle:"basicElementParaiso_DqvR",label:"labelParaiso_l3ql",nullValue:"nullValueParaiso_Ey4X",undefinedValue:"undefinedValueParaiso__T3e",stringValue:"stringValueParaiso_T6i7",booleanValue:"booleanValueParaiso__TSh",numberValue:"numberValueParaiso_JGW0",otherValue:"otherValueParaiso_nnwW",punctuation:"punctuationParaiso_knwc",collapseIcon:"collapseIconParaiso_MWEp",expandIcon:"expandIconParaiso_fAkX",collapsedContent:"collapseContentParaiso_KH36"};function y({src:e,collapseDepth:a}){return(0,l.jsx)(E,{data:e,shouldExpandNode:(e,n)=>Array.isArray(n)?n.length<5:void 0!==a&&e<a,style:g})}},93127:(e,a,n)=>{n.d(a,{Z:()=>r});var l=n(24246),t=(n(27378),n(97134)),s=n(41428);const o={container:"container_tECh",nav:"nav_sWk6",navlink:"navlink__gTJ",active:"active_Uuwz"};function c({to:e,children:a}){return(0,l.jsx)(s.Z,{className:o.navlink,isNavLink:!0,to:e,exact:!0,activeStyle:{backgroundColor:"#363739"},children:a})}function r({children:e}){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(t.Z,{children:[(0,l.jsx)("html",{lang:"en"}),(0,l.jsx)("title",{children:"Docusaurus debug panel"}),(0,l.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("nav",{className:o.nav,children:[(0,l.jsx)(c,{to:"/__docusaurus/debug",children:"Config"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/metadata",children:"Metadata"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/registry",children:"Registry"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/routes",children:"Routes"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/content",children:"Content"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/globalData",children:"Global data"})]}),(0,l.jsx)("main",{className:o.container,children:e})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/23e303e7.4b5a9ad4.js b/assets/js/23e303e7.4b5a9ad4.js new file mode 100644 index 0000000000..0e4a7e5e08 --- /dev/null +++ b/assets/js/23e303e7.4b5a9ad4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11181],{45160:a=>{a.exports=JSON.parse('{"tag":{"label":"beta","permalink":"/blog/tags/beta","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/beta","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2451b334.7f0570e7.js b/assets/js/2451b334.7f0570e7.js new file mode 100644 index 0000000000..89cfb74a08 --- /dev/null +++ b/assets/js/2451b334.7f0570e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60162],{90632:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},86435:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},66778:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=t(24246),r=t(71670);const a={title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-03-23T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.4",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx",source:"@site/blog/releases/2.4/index.mdx",title:"Docusaurus 2.4",description:"We are happy to announce Docusaurus 2.4.",date:"2023-03-23T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:3.05,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.4",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-03-23T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1694767701e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},nextItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"}},c={image:t(90632).Z,authorsImageUrls:[void 0]},l=[];function u(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["We are happy to announce ",(0,n.jsx)(s.strong,{children:"Docusaurus 2.4"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,n.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,n.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(86435).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var n=t(27378);const r={},a=n.createContext(r);function o(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24ceab3e.94325444.js b/assets/js/24ceab3e.94325444.js new file mode 100644 index 0000000000..8e65871516 --- /dev/null +++ b/assets/js/24ceab3e.94325444.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93441],{30816:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/4","page":4,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog/page/3","nextPage":"/blog/page/5","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/24dd9243.67583c25.js b/assets/js/24dd9243.67583c25.js new file mode 100644 index 0000000000..a81e907583 --- /dev/null +++ b/assets/js/24dd9243.67583c25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88786],{61802:(t,e,a)=>{a.d(e,{Z:()=>r});const r=a.p+"assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png"},3560:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>n,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var r=a(24246),s=a(71670);const i={title:"DocSearch migration",authors:[{name:"Cl\xe9ment Vannicatte",title:"Software Engineer @ Algolia",url:"https://github.com/shortcuts",image_url:"https://github.com/shortcuts.png",twitter:"sh0rtcts"},{key:"slorber"}],tags:["search"],image:"./img/social-card.png"},n=void 0,o={permalink:"/blog/2021/11/21/algolia-docsearch-migration",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx",source:"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx",title:"DocSearch migration",description:"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.",date:"2021-11-21T00:00:00.000Z",tags:[{label:"search",permalink:"/blog/tags/search"}],readingTime:2.96,hasTruncateMarker:!0,authors:[{name:"Cl\xe9ment Vannicatte",title:"Software Engineer @ Algolia",url:"https://github.com/shortcuts",image_url:"https://github.com/shortcuts.png",twitter:"sh0rtcts",imageURL:"https://github.com/shortcuts.png"},{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"DocSearch migration",authors:[{name:"Cl\xe9ment Vannicatte",title:"Software Engineer @ Algolia",url:"https://github.com/shortcuts",image_url:"https://github.com/shortcuts.png",twitter:"sh0rtcts",imageURL:"https://github.com/shortcuts.png"},{key:"slorber"}],tags:["search"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"},nextItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"}},c={image:a(61802).Z,authorsImageUrls:[void 0,void 0]},l=[];function u(t){const e={a:"a",p:"p",strong:"strong",...(0,s.a)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.a,{href:"https://docsearch.algolia.com/",children:"DocSearch"})," is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials."]}),"\n",(0,r.jsxs)(e.p,{children:["Docusaurus site owners should upgrade their configuration with their new credentials ",(0,r.jsx)(e.strong,{children:"by February 1, 2022"}),", existing search indexes will be frozen and become read-only after this date."]})]})}function h(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(u,{...t})}):u(t)}},71670:(t,e,a)=>{a.d(e,{Z:()=>o,a:()=>n});var r=a(27378);const s={},i=r.createContext(s);function n(t){const e=r.useContext(i);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function o(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:n(t.components),r.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/25003e4f.048ed570.js b/assets/js/25003e4f.048ed570.js new file mode 100644 index 0000000000..87819cac4b --- /dev/null +++ b/assets/js/25003e4f.048ed570.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33113],{5556:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/releases/3.2","metadata":{"permalink":"/blog/releases/3.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.2/index.mdx","source":"@site/blog/releases/3.2/index.mdx","title":"Docusaurus 3.2","description":"We are happy to announce Docusaurus 3.2.","date":"2024-03-29T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.475,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-03-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1711731993000,"lastUpdatedBy":"S\xe9bastien Lorber","nextItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"}},"content":"We are happy to announce **Docusaurus 3.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Faster builds\\n\\nWe worked hard to reduce the time it takes to build a Docusaurus site in production mode.\\n\\nBetween v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.\\n\\nLet\'s take an example. Our benchmark on the [React Native website upgrading to v3.2](https://github.com/facebook/react-native-website/pull/4072) reports the following results:\\n\\n- \ud83d\udd25 Cold builds: 95s \u27a1\ufe0f 66s (~30% faster)\\n- \ud83d\udd25 Incremental builds: 55s \u27a1\ufe0f 22s (~60% faster)\\n\\nThe results will vary depending on your site\'s topology and the options you turned on, but we expect the largest sites will see the most significant improvements.\\n\\nNote that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our [performance issue](https://github.com/facebook/docusaurus/issues/4765) for upcoming improvements.\\n\\n<details>\\n <summary>What is the difference between a cold build and an incremental build?</summary>\\n\\nA cold build is when the Docusaurus caches are empty, generally after running `docusaurus clear`.\\n\\nAn incremental build happens when you run another time the `docusaurus build` command. Docusaurus automatically tries to \\"re-use\\" computations from former builds to make subsequent builds faster. In practice it\'s based on [Webpack persistent caching](https://webpack.js.org/guides/build-performance/#persistent-cache). To enable incremental builds on your CI server, you can persist the `node_modules/.cache` folder across builds.\\n\\n</details>\\n\\n### Faster Dev Server\\n\\nWe also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.\\n\\nThe way we initially implemented content reloading wasn\'t great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin\'s content, only that plugin will reload. It\'s hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster \ud83d\udd25.\\n\\nWe plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don\'t run useless computations that would always keep giving the same result.\\n\\n### MDX partials table-of-contents\\n\\nWith [#9684](https://github.com/facebook/docusaurus/pull/9684), Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.\\n\\nDocusaurus and MDX allows you to [import one Markdown file into another](/docs/markdown-features/react#importing-markdown). We usually call the imported Markdown file a \\"partial\\", and use the `_` prefix so that this file does not lead to the creation of a new page.\\n\\n```md title=\\"myDoc.mdx\\"\\n# My Doc\\n\\n## Doc heading\\n\\nContent is imported from another MDX file:\\n\\nimport ImportedDoc from \'./\\\\_importedDoc.mdx\';\\n\\n<ImportedDoc />\\n```\\n\\n```md title=\\"_myPartial.mdx\\"\\n## Partial heading\\n\\nSome paragraph\\n```\\n\\nPreviously, the heading `Partial heading` did not appear in the table-of-contents, but now it will!\\n\\n### Blog improvements\\n\\nWe improved the blog plugin with several new options to make it even more powerful and flexible:\\n\\n- [#9912](https://github.com/facebook/docusaurus/pull/9912): you can now display the last update time and author of a blog post, a feature the docs plugin already had.\\n- [#9886](https://github.com/facebook/docusaurus/pull/9886): a new `processBlogPosts` option allow you to filter/transform/sort blog posts.\\n- [#9838](https://github.com/facebook/docusaurus/pull/9838): a new `pageBasePath` option allows you to customize the blog pagination URL segment (`/blog/page/2`)\\n\\n### Sitemap lastmod\\n\\nWith [#9954](https://github.com/facebook/docusaurus/pull/9954), the sitemap plugin has a new `lastmod` option that can now emit a `<lastmod>` tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog `last_update` front matter.\\n\\nWe also made it possible to opt-out of emitting `<priority>` and `<frequency>` tags, which are generally ignored by crawlers (notably [Google](https://developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping)).\\n\\nWe recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:\\n\\n```js\\n{\\n lastmod: \'date\',\\n priority: null,\\n changefreq: null,\\n}\\n```\\n\\n## Other changes\\n\\n- [#9687](https://github.com/facebook/docusaurus/pull/9687): new Vercel Analytics plugin\\n- [#9681](https://github.com/facebook/docusaurus/pull/9681) and [#9442](https://github.com/facebook/docusaurus/pull/9442): `docusaurus swizzle` and `create-docusaurus` CLIs now ask users if they prefer to use TypeScript\\n- [#9928](https://github.com/facebook/docusaurus/pull/9928): new Icelandic translation\\n- [#9928](https://github.com/facebook/docusaurus/pull/9931): new `allContentLoaded` plugin lifecycle (experimental)\\n\\nCheck the **[3.2.0 changelog entry](/changelog/3.2.0)** for an exhaustive list of changes."},{"id":"/releases/3.1","metadata":{"permalink":"/blog/releases/3.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx","source":"@site/blog/releases/3.1/index.mdx","title":"Docusaurus 3.1","description":"We are happy to announce Docusaurus 3.1.","date":"2024-01-05T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":1.665,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 3.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2024-01-05T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1704479518000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2"},"nextItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"}},"content":"We are happy to announce **Docusaurus 3.1**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Broken anchors checker\\n\\nIn [#9528](https://github.com/facebook/docusaurus/pull/9528), we improved the built-in broken links checker to also detect broken anchors.\\n\\n![Docusaurus blog post social card](./img/broken-anchor.jpg)\\n\\n:::tip[Make it fail fast]\\n\\nThe new [`onBrokenAnchors`](/docs/api/docusaurus-config#onBrokenAnchors) option has value `warn` by default, for retro-compatibility reasons.\\n\\nWe recommend to turn it to `throw` and fail your CI builds instead of deploying broken anchors to productions.\\n\\n:::\\n\\n:::note\\n\\nFor users and plugin authors implementing custom `<Heading>` and `<Link>` components, we provide a new [`useBrokenLinks`](/docs/docusaurus-core#useBrokenLinks) React hook API.\\n\\n**Most Docusaurus users don\'t need to care about it**, built-in components (`docusaurus/Link` and `@theme/Heading`) already use it internally.\\n\\n:::\\n\\n### `parseFrontMatter` hook\\n\\nIn [#9624](https://github.com/facebook/docusaurus/pull/9624), we added a new [`siteConfig.markdown.parseFrontMatter` function hook](/docs/api/docusaurus-config#markdown).\\n\\nThis makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n // highlight-start\\n parseFrontMatter: async (params) => {\\n // Reuse the default parser\\n const result = await params.defaultParseFrontMatter(params);\\n\\n // Process front matter description placeholders\\n result.frontMatter.description =\\n result.frontMatter.description?.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n\\n // Create your own front matter shortcut\\n if (result.frontMatter.i_do_not_want_docs_pagination) {\\n result.frontMatter.pagination_prev = null;\\n result.frontMatter.pagination_next = null;\\n }\\n\\n // Rename an unsupported front matter coming from another system\\n if (result.frontMatter.cms_seo_summary) {\\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\\n delete result.frontMatter.cms_seo_summary;\\n }\\n\\n return result;\\n },\\n // highlight-end\\n },\\n};\\n```\\n\\nRead the [front matter guide](/docs/markdown-features#front-matter) and the [`parseFrontMatter` API ref](/docs/api/docusaurus-config#markdown) for details.\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#9674](https://github.com/facebook/docusaurus/pull/9674): add `siteConfig.markdown.remarkRehypeOptions` to pass options to `remark-rehype`, letting you customize things such as MDX footnote label\\n- [#9671](https://github.com/facebook/docusaurus/pull/9671): add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML\\n- [#9610](https://github.com/facebook/docusaurus/pull/9610): enable CLI port configuration via `PORT` environment variable\\n- [#9477](https://github.com/facebook/docusaurus/pull/9477): complete Brazilian Portuguese (pt-BR) translations\\n\\nCheck the **[3.1.0 changelog entry](/changelog/3.1.0)** for an exhaustive list of changes."},{"id":"/releases/3.0","metadata":{"permalink":"/blog/releases/3.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx","source":"@site/blog/releases/3.0/index.mdx","title":"Announcing Docusaurus 3.0","description":"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73","date":"2023-10-31T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":10.515,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Announcing Docusaurus 3.0","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-10-31T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1700717294000,"lastUpdatedBy":"ozaki","prevItem":{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1"},"nextItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"}},"content":"Today, we are happy to **announce Docusaurus 3.0**! \ud83e\udd73\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nThis is a new **major version** of Docusaurus, coming with **new exciting features** and upgraded dependencies.\\n\\nIn line with the [**Semantic Versioning**](https://semver.org/) principles, this release includes **breaking changes** we documented thoroughly in the [**v3 upgrade guide**](/docs/migration/v3/). Breaking changes can be bothersome, but they are necessary to set the ground for a **new wave of Docusaurus features** we plan to implement.\\n\\n![v3.0 social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\nWe initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, **upgrading to MDX v3** is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding [compatibility options for MDX v1](/docs/api/docusaurus-config#markdown).\\n\\nThe simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:\\n\\n- [Prepare your site](/blog/preparing-your-site-for-docusaurus-v3) ahead of time, incrementally, while staying on Docusaurus v2\\n- [Set up visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) to catch unexpected visual changes happening during the upgrade\\n\\n:::info About Docusaurus v2\\n\\nAccording to our [release process](/community/release-process#stable-version), Docusaurus v2 has now entered **maintenance mode**. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.\\n\\n:::\\n\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\n\\n## Breaking changes\\n\\nThis section only gives you a quick glance. All the breaking changes are thoroughly documented in the [**v3 upgrade guide**](/docs/migration/v3).\\n\\nDocusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:\\n\\n- Node.js v16 \u27a1\ufe0f v18\\n- React v17 \u27a1\ufe0f v18\\n- MDX v1 \u27a1\ufe0f v3\\n- TypeScript v4 \u27a1\ufe0f v5\\n- prism-react-renderer v1 \u27a1\ufe0f v2\\n- react-live v2 \u27a1\ufe0f v4\\n- Mermaid v9 \u27a1\ufe0f v10\\n- import-fresh v3 \u27a1\ufe0f jiti v1\\n- remark-emoji v2 \u27a1\ufe0f v4\\n\\nA typical `package.json` dependency upgrade looks like:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n // upgrade to Docusaurus v3\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0\\",\\n // upgrade to MDX v3\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n // upgrade to prism-react-renderer v2.0+\\n- \\"prism-react-renderer\\": \\"^1.3.5\\",\\n+ \\"prism-react-renderer\\": \\"^2.1.0\\",\\n // upgrade to React v18.0+\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n // upgrade Docusaurus dev dependencies to v3\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\",\\n- \\"@docusaurus/types\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0\\",\\n+ \\"@docusaurus/types\\": \\"3.0.0\\"\\n }\\n \\"engines\\": {\\n // require Node.js 18.0+\\n- \\"node\\": \\">=16.14\\"\\n+ \\"node\\": \\">=18.0\\"\\n }\\n }\\n```\\n\\nApart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn\'t have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new default blog RSS feed limit of 20 entries\\n- [#9308](https://github.com/facebook/docusaurus/pull/9308): fix and re-introduce the `:::warning` admonition, deprecate `:::caution`\\n- [#9310](https://github.com/facebook/docusaurus/pull/9310): remove the legacy versioned sidebar id prefix, used for sites versioned before `v2.0.0-beta.10` (December 2021)\\n- [#7966](https://github.com/facebook/docusaurus/pull/7966): refactor docs theme components, eventually requiring to you re-swizzle them\\n\\n## Highlights\\n\\nBelow is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0).\\n\\n### Markdown\\n\\nDocusaurus v3 upgraded from MDX v1 to MDX v3:\\n\\n- in [#8288](https://github.com/facebook/docusaurus/pull/8288), we upgraded to [**MDX v2**](https://mdxjs.com/blog/v2/) ([migration guide](https://mdxjs.com/migrating/v2/))\\n- in [#9451](https://github.com/facebook/docusaurus/pull/9451), we upgraded to [**MDX v3**](https://mdxjs.com/blog/v3/) ([migration guide](https://mdxjs.com/migrating/v3/))\\n\\nThis new MDX version is **much better for content writers and plugin authors**, and lays the ground for implementing new exciting Markdown features.\\n\\n:::warning MDX v3 - the main challenge\\n\\nThe transition from MDX v1 to MDX v3 is the **main challenge** to the adoption of Docusaurus v3.\\n\\nSome documents that compiled successfully under Docusaurus v2 might now **fail to compile** under Docusaurus v3, while others might **render differently**.\\n\\nMost breaking changes come from [MDX v2](https://mdxjs.com/blog/v2/), and [MDX v3](https://mdxjs.com/blog/v3/) is a relatively small release. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\n**Don\'t be intimidated**. Most problems are **easy to fix** and often related to `{` and `<` characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command [`npx docusaurus-mdx-checker`](https://github.com/slorber/docusaurus-mdx-checker) to help you get an estimate of the work to be done, and we recommend to [prepare your site in advance](/blog/preparing-your-site-for-docusaurus-v3).\\n\\nIf you created custom [MDX plugins](/docs/markdown-features/plugins) (Remark/Rehype), the AST is slightly different, and you might need to refactor them.\\n\\n:::\\n\\nThis notably enables us to add a [CommonMark mode](/docs/markdown-features#mdx-vs-commonmark) that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and **experimental** and limited ([some Docusaurus features will not work](https://github.com/facebook/docusaurus/issues/9092)). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret `.md` files as CommonMark in an upcoming major version, and recommend to use the `.mdx` extension for any file using JSX or ES modules.\\n\\nWe also introduced a new way to [configure Markdown globally for your site](/docs/api/docusaurus-config#markdown), and plan to add more flexible options later.\\n\\n```js title=\\"docusaurus.config.js\\"\\nexport default {\\n markdown: {\\n format: \'mdx\',\\n mermaid: true,\\n preprocessor: ({filePath, fileContent}) => {\\n return fileContent.replaceAll(\'{{MY_VAR}}\', \'MY_VALUE\');\\n },\\n mdx1Compat: {\\n comments: true,\\n admonitions: true,\\n headingIds: true,\\n },\\n },\\n};\\n```\\n\\nDocusaurus now uses the [remark-directive](https://github.com/remarkjs/remark-directive) plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own [custom directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) such as `:textDirective`, `::leafDirective` or `:::containerDirective`.\\n\\n### ESM and TypeScript configs {#esm-ts-configs}\\n\\nIn [#9317](https://github.com/facebook/docusaurus/pull/9317), we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.\\n\\nHere are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type * as Preset from \'@docusaurus/preset-classic\';\\n\\nconst config: Config = {\\n title: \'My Site\',\\n favicon: \'img/favicon.ico\',\\n // your site config ...\\n presets: [\\n [\\n \'classic\',\\n {\\n // your preset config ...\\n } satisfies Preset.Options,\\n ],\\n ],\\n themeConfig: {\\n // your theme config ...\\n } satisfies Preset.ThemeConfig,\\n};\\n\\nexport default config;\\n```\\n\\n```ts title=\\"sidebars.ts\\"\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n\\nconst sidebars: SidebarsConfig = {\\n docs: [\'introduction\'],\\n};\\n\\nexport default sidebars;\\n```\\n\\n### Unlisted content\\n\\nDocusaurus already supported a `draft: true` front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.\\n\\nIn [#8004](https://github.com/facebook/docusaurus/pull/8004), we introduced a new `unlisted: true` front matter option, which will keep your pages available in production builds, while \\"hiding\\" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.\\n\\nUnlisted content will:\\n\\n- be excluded from `sitemap.xml`\\n- be excluded from SEO results thanks to `<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />`\\n- be excluded from blog RSS feeds\\n- be excluded from Algolia DocSearch results\\n- be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...\\n\\nUnlisted content will also display a banner so that you don\'t forget to turn it off once your content is ready for prime time. Here\'s an example of an [unlisted blog post](/tests/blog/unlisted-post):\\n\\n<IframeWindow url=\\"/tests/blog/unlisted-post\\" />\\n\\n### React 18\\n\\nIn [#8961](https://github.com/facebook/docusaurus/pull/8961), we upgraded to React 18. This is important, notably for the [gradual adoption of Concurrent React features](https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features), as well as upcoming exciting features such as [build-time React Server Components](https://github.com/facebook/docusaurus/issues/9089).\\n\\nThis new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), notably the new [automatic batching](https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching) behavior.\\n\\n:::danger Experimental support for React 18 features\\n\\nReact 18 comes with new features:\\n\\n- `<Suspense>`\\n- `React.lazy()`\\n- `startTransition()`\\n\\nTheir Docusaurus support is considered as **experimental**. We might have to adjust the integration in the future, leading to a different runtime behavior.\\n\\n:::\\n\\n### Automatic JSX runtime\\n\\nDocusaurus now uses the [\\"automatic\\" JSX runtime](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html).\\n\\nIt is not needed anymore to import React in JSX files that do not use any React API.\\n\\n```diff title=\\"src/components/MyComponent.js\\"\\n- import React from \'react\';\\n\\n export default function MyComponent() {\\n return <div>Hello</div>;\\n }\\n```\\n\\n### Debug builds\\n\\nIt is now possible to build your static site in dev mode.\\n\\n```bash\\ndocusaurus build --dev\\n```\\n\\n:::tip Debug React-related problems\\n\\nDocusaurus will log more errors to the console, notably React 18 hydration errors through the new [`onRecoverableError` callback](https://react.dev/reference/react-dom/client/hydrateRoot#parameters).\\n\\nThis new build mode is particularly helpful for **troubleshooting React problems**. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the [React Error Decoder page](https://reactjs.org/docs/error-decoder.html/).\\n\\n:::\\n\\n### TypeScript\\n\\nDocusaurus v3 now requires a minimum version of TypeScript 5.0.\\n\\nWe re-internalized the base recommended TypeScript config to a new official package:\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\nWe also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new [TypeScript config files](#esm-ts-configs):\\n\\n```ts title=\\"docusaurus.config.ts\\"\\nimport type {Config} from \'@docusaurus/types\';\\nimport type {Options, ThemeConfig} from \'@docusaurus/preset-classic\';\\nimport type {SidebarsConfig} from \'@docusaurus/plugin-content-docs\';\\n```\\n\\n### Code blocks\\n\\nIn [#9316](https://github.com/facebook/docusaurus/pull/9316), we improved on syntax highlighting thanks to the [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer) v2 upgrade. For example, a bash param `--save` is now colored:\\n\\n```bash\\nnpm install --save some-package\\n```\\n\\nThe [interactive code editor](/docs/markdown-features/code-blocks#interactive-code-editor) also upgrades to [react-live](https://github.com/FormidableLabs/react-live) v4, coming with a new [sucrase](https://github.com/alangpierce/sucrase) compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.\\n\\n```js live\\nfunction Hello() {\\n const name: string = \'World\';\\n return <div>Hello {name}</div>;\\n}\\n```\\n\\nIn [#8982](https://github.com/facebook/docusaurus/pull/8982) and [#8870](https://github.com/facebook/docusaurus/pull/8870), we also added [magic comments](/docs/markdown-features/code-blocks#custom-magic-comments) support for TeX-like, Haskell-like, and WebAssembly comment syntax.\\n\\n```haskell title=\\"haskell.hs\\"\\nstringLength :: String -> Int\\n-- highlight-next-line\\nstringLength [] = 0\\nstringLength (x:xs) = 1 + stringLength xs\\n```\\n\\n```matlab title=\\"matlab.m\\"\\n% highlight-start\\nfunction result = times2(n)\\n result = n * 2;\\nend\\n% highlight-end\\nx = 10;\\n% highlight-next-line\\ny = times2(x);\\n```\\n\\n### Mermaid diagrams\\n\\nIn [#9305](https://github.com/facebook/docusaurus/pull/9305), we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.\\n\\n<details>\\n <summary>Mindmap</summary>\\n\\n```mermaid\\nmindmap\\n root((mindmap))\\n Research\\n Creative techniques\\n Strategic planning\\n Argument mapping\\n Tools\\n Pen and paper\\n Mermaid\\n```\\n\\n</details>\\n\\n<details>\\n <summary>Quadrant chart</summary>\\n\\n```mermaid\\nquadrantChart\\n title Reach and engagement of campaigns\\n x-axis Low Reach --\x3e High Reach\\n y-axis Low Engagement --\x3e High Engagement\\n quadrant-1 We should expand\\n quadrant-2 Need to promote\\n quadrant-3 Re-evaluate\\n quadrant-4 May be improved\\n Campaign A: [0.3, 0.6]\\n Campaign B: [0.45, 0.23]\\n Campaign C: [0.57, 0.69]\\n Campaign D: [0.78, 0.34]\\n Campaign E: [0.40, 0.34]\\n Campaign F: [0.35, 0.78]\\n```\\n\\n</details>\\n\\n### Query-string data attributes\\n\\nIn [#9028](https://github.com/facebook/docusaurus/pull/9028), we made it possible to set custom HTML [data attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*) though `docusaurus-data-x` query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.\\n\\n```css title=\\"/src/css/custom.css\\"\\nhtml[data-navbar=\'false\'] .navbar {\\n display: none;\\n}\\n\\nhtml[data-red-border] div#__docusaurus {\\n border: red solid thick;\\n}\\n```\\n\\n<IframeWindow url=\\"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border\\" />\\n\\n### Other features\\n\\nOther new features worth mentioning:\\n\\n- [#9189](https://github.com/facebook/docusaurus/pull/9189): new blog `feedOptions.limit` option\\n- [#9071](https://github.com/facebook/docusaurus/pull/9071): add normalized SEO front matter support for the pages plugin\\n- [#9171](https://github.com/facebook/docusaurus/pull/9028): the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url\\n- [#9171](https://github.com/facebook/docusaurus/pull/9171): new ESLint rule [`no-html-links`](/docs/api/misc/@docusaurus/eslint-plugin/no-html-links)\\n- [#8384](https://github.com/facebook/docusaurus/pull/8384): new ESLint rule [`prefer-docusaurus-heading`](/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading)\\n\\nRead [**Docusaurus v3.0.0 release notes**](https://github.com/facebook/docusaurus/releases/tag/v3.0.0) for an exhaustive list of changes.\\n\\n## Conclusion\\n\\nThis release comes with a few features, but more importantly **upgrades many pieces of the Docusaurus infrastructure**.\\n\\nThe **MDX upgrade** consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.\\n\\nNow that we\'ve caught up with our infrastructure, we\'ll be back **delivering useful documentation features** very soon, in upcoming minor versions.\\n\\nWe would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a **competitive solution** that stands out for its great **flexibility**."},{"id":"/preparing-your-site-for-docusaurus-v3","metadata":{"permalink":"/blog/preparing-your-site-for-docusaurus-v3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","source":"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx","title":"Preparing your site for Docusaurus v3","description":"Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.","date":"2023-09-29T00:00:00.000Z","tags":[{"label":"maintenance","permalink":"/blog/tags/maintenance"}],"readingTime":13.745,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Preparing your site for Docusaurus v3","authors":["slorber"],"tags":["maintenance"],"slug":"/preparing-your-site-for-docusaurus-v3","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0"},"nextItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},"content":"**Docusaurus v3** is now [**in beta**](https://github.com/facebook/docusaurus/discussions/9312) and the official release is around the corner. This is the perfect time to start **preparing your site** for this new major version.\\n\\nDocusaurus v3 comes with a few **breaking changes**, many of which can be **handled today under Docusaurus v2**. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.\\n\\nThe main breaking change is the upgrade from MDX v1 to MDX v3. Read the [**MDX v2**](https://mdxjs.com/blog/v2/) and [**MDX v3**](https://mdxjs.com/blog/v3/) release notes for details. MDX will now compile your Markdown content **more strictly** and with **subtle differences**.\\n\\nThis article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.\\n\\n![Preparing your site for Docusaurus v3 - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n:::warning\\n\\nThis article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the [v3.0.0-beta.0 release notes](https://github.com/facebook/docusaurus/discussions/9312) for an exhaustive list.\\n\\n:::\\n\\n:::tip Don\'t be afraid\\n\\nThere\'s a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.\\n\\nIf your site is relatively small, with only a few customizations, you can probably [upgrade to Docusaurus v3](#try-docusaurus-v3-today) immediately.\\n\\n:::\\n\\n## Preparatory work\\n\\nBefore preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest [Docusaurus v2 version](/versions).\\n\\nDepending on the complexity of your site, it may be a good idea to adopt the [visual regression testing workflow](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing) that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.\\n\\nWe also recommend using the `.mdx` extension whenever you use JSX, `import`, or `export` (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, `.md` files will be parsed as standard [CommonMark](https://commonmark.org/), which does not support these features. In Docusaurus v3, `.md` files keep being compiled as MDX files, but it will be possible to [opt-in for CommonMark](https://github.com/facebook/docusaurus/issues/3018).\\n\\n## Preparing content for MDX v3\\n\\nMDX is a major dependency of Docusaurus responsible for compiling your `.md` and `.mdx` files to React components.\\n\\nMDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of `{` and `<` characters.\\n\\nUpgrading MDX comes with all the breaking changes documented on the [MDX v2](https://mdxjs.com/blog/v2/) and [MDX v3](https://mdxjs.com/blog/v3/) release blog posts. Most breaking changes come from MDX v2. The [MDX v2 migration guide](https://mdxjs.com/migrating/v2/) has a section on how to [update MDX files](https://mdxjs.com/migrating/v2/#update-mdx-files) that will be particularly relevant to us. Also make sure to read the [Troubleshooting MDX](https://mdxjs.com/docs/troubleshooting-mdx/) page that can help you interpret common MDX error messages.\\n\\nMake sure to also read our updated [**MDX and React**](/docs/markdown-features/react) documentation page.\\n\\n:::tip Ask for help\\n\\nWe have a dedicated [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053) discussion.\\n\\n:::\\n\\n### Using the MDX playground\\n\\nThe MDX playground is your new best friend. It permits to understand how your content is **compiled to React components**, and troubleshoot compilation or rendering issues in isolation.\\n\\nEach MDX version comes with its own playground:\\n\\n- [MDX playground - current version](https://mdxjs.com/playground/)\\n- [MDX playground - v1](https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/)\\n\\n<details>\\n <summary>Configuring the MDX playground options for Docusaurus</summary>\\n\\nTo obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the [MDX playground](https://mdxjs.com/playground/):\\n\\n- Use `MDX`\\n- Use `remark-gfm`\\n- Use `remark-directive`\\n\\n![Screenshot of the MDX playground\'s options panel, with only the \\"Use `MDX`\\", \\"Use `remark-gfm`\\", and \\"Use `remark-directive`\\" options checked](./img/mdx2-playground-options.png)\\n\\n</details>\\n\\nUsing the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.\\n\\n:::tip Making your content future-proof\\n\\nThe goal will be to refactor your problematic content so that it **works fine with both versions of MDX**. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.\\n\\n:::\\n\\n### Using the MDX checker CLI\\n\\nWe provide a [docusaurus-mdx-checker](https://github.com/slorber/docusaurus-mdx-checker) CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.\\n\\n```bash\\nnpx docusaurus-mdx-checker\\n```\\n\\nFor each compilation issue, the CLI will log the file path and a line number to look at.\\n\\n![Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages](./img/mdx-checker-output.png)\\n\\n:::tip\\n\\nUse this CLI to estimate of how much work will be required to make your content compatible with MDX v3.\\n\\n:::\\n\\n:::warning\\n\\nThis CLI is a best effort, and will only report compilation errors.\\n\\nIt will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using [visual regression tests](/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing).\\n\\n:::\\n\\n### Common MDX problems\\n\\nWe upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:\\n\\n- [Docusaurus PR](https://github.com/facebook/docusaurus/pull/8288)\\n- [React-Native PR](https://github.com/facebook/react-native-website/pull/3780)\\n- [Jest PR](https://github.com/jestjs/jest/pull/14463)\\n\\nThese upgrades permitted us to aggregate the most common content problems, and document how to best handle them.\\n\\n#### Bad usage of `{`\\n\\nThe `{` character is used for opening [JavaScript expressions](https://mdxjs.com/docs/what-is-mdx/#expressions). MDX will now fail if what you put inside `{expression}` is not a valid expression.\\n\\n```md title=\\"example.md\\"\\nThe object shape looks like {username: string, age: number}\\n```\\n\\n:::danger Error message\\n\\n> Could not parse expression with acorn: Unexpected content after expression\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `{username: string, age: number}`\\n- Use the HTML code: `{`\\n- Escape it: `\\\\{`\\n\\n:::\\n\\n#### Bad usage of `<`\\n\\nThe `<` character is used for opening [JSX tags](https://mdxjs.com/docs/what-is-mdx/#jsx). MDX will now fail if it thinks your JSX is invalid.\\n\\n```md title=\\"example.md\\"\\nUse Android version <5\\n\\nYou can use a generic type like Array<T>\\n\\nFollow the template \\"Road to <YOUR_MINOR_VERSION>\\"\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `5` (U+0035) before name, expected a character that can start a name, such as a letter, `$`, or `_`\\n\\n> Expected a closing tag for `<T>` (1:6-1:9) before the end of `paragraph` end-tag-mismatch mdast-util-mdx-jsx\\n\\n> Expected a closing tag for `<YOUR_MINOR_VERSION>` (134:19-134:39) before the end of `paragraph`\\n\\n:::\\n\\n:::tip How to prepare\\n\\nAvailable options to fix this error:\\n\\n- Use inline code: `Array<T>`\\n- Use the HTML code: `<` or `<`\\n- Escape it: `\\\\<` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Bad usage of GFM Autolink\\n\\nDocusaurus supports [GitHub Flavored Markdown (GFM)](https://github.github.com/gfm/), but [autolink](https://github.github.com/gfm/#autolinks) using the `<link>` syntax is not supported anymore by MDX.\\n\\n```md title=\\"example.md\\"\\n<sebastien@thisweekinreact.com>\\n\\n<http://localhost:3000>\\n```\\n\\n:::danger Error messages\\n\\n> Unexpected character `@` (U+0040) in name, expected a name character such as letters, digits, `$`, or `_`; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use `[text](url)`)\\n\\n> Unexpected character `/` (U+002F) before local name, expected a character that can start a name, such as a letter, `$`, or `_` (note: to create a link in MDX, use `[text](url)`)\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse regular Markdown links, or remove the `<` and `>`. MDX and GFM are able to autolink literals already.\\n\\n{/* prettier-ignore */}\\n```md title=\\"example.md\\"\\nsebastien@thisweekinreact.com\\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\\n\\nhttp://localhost:3000\\n[http://localhost:3000](http://localhost:3000)\\n```\\n\\n:::\\n\\n#### Lower-case MDXComponent mapping\\n\\nFor users providing a [custom `MDXComponent`mapping](/docs/markdown-features/react#mdx-component-scope), components are now \\"sandboxed\\":\\n\\n- a `MDXComponent` mapping for `h1` only gets used for `# hi` but not for `<h1>hi</h1>`\\n- a **lower-cased** custom element name will not be substituted by its respective `MDXComponent` component anymore\\n\\n:::danger visual difference\\n\\nYour [`MDXComponent` component mapping](/docs/markdown-features/react#mdx-component-scope) might not be applied as before, and your custom components might no longer be used.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nFor native Markdown elements, you can keep using **lower-case**: `p`, `h1`, `img`, `a`...\\n\\nFor any other element, **use upper-case names**.\\n\\n```diff title=\\"src/theme/MDXComponents.js\\"\\n import MDXComponents from \'@theme-original/MDXComponents\';\\n\\n export default {\\n ...MDXComponents,\\n p: (props) => <p {...props} className=\\"my-paragraph\\"/>\\n- myElement: (props) => <div {...props} className=\\"my-class\\" />,\\n+ MyElement: (props) => <div {...props} className=\\"my-class\\" />,\\n };\\n```\\n\\n:::\\n\\n#### Unintended extra paragraphs\\n\\nIn MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected `<p>` tags.\\n\\n:::danger visual difference\\n\\nSee how this content is rendered differently by MDX v1 and v3.\\n\\n```md title=\\"example.md\\"\\n<div>Some **Markdown** content</div>\\n<div>\\n Some **Markdown** content\\n</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v1 output\\"\\n<div>Some **Markdown** content</div>\\n<div>Some **Markdown** content</div>\\n```\\n\\n{/* prettier-ignore */}\\n```html title=\\"MDX v3 output\\"\\n<div>Some <strong>Markdown</strong> content</div>\\n<div><p>Some <strong>Markdown</strong> content</p></div>\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you don\'t want an extra `<p>` tag, refactor content on a case by case basis to use a single-line JSX tag.\\n\\n```diff\\n <figure>\\n <img src=\\"/img/myImage.png\\" alt=\\"My alt\\" />\\n- <figcaption>\\n- My image caption\\n- </figcaption>\\n+ <figcaption>My image caption</figcaption>\\n </figure>\\n```\\n\\nIf your content contains \\"Markdown inlines\\" (`**`, `*`, `_`, `[link](/path)`), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.\\n\\n:::\\n\\n#### Unintended usage of directives\\n\\nDocusaurus v3 now uses [Markdown Directives](https://talk.commonmark.org/t/generic-directives-plugins-syntax/444) (implemented with [remark-directive](https://github.com/remarkjs/remark-directive)) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.\\n\\n```md title=\\"example.md\\"\\nThis is a :textDirective\\n\\n::leafDirective\\n\\n:::containerDirective\\n\\nContainer directive content\\n\\n:::\\n```\\n\\n:::danger Visual change\\n\\nDirectives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won\'t be rendered back in their original form.\\n\\n```md title=\\"example.md\\"\\nThe AWS re:Invent conf is great\\n```\\n\\nDue to `:Invent` being parsed as a text directive, this will now be rendered as:\\n\\n```\\nThe AWS re\\nconf is great\\n```\\n\\n:::\\n\\n:::tip How to prepare\\n\\n- Use the HTML code: `:`\\n- Add a space after `:` (if it makes sense): `: text`\\n- Escape it: `\\\\:` (unfortunately the `\\\\` will be displayed under MDX v1)\\n\\n:::\\n\\n#### Unsupported indented code blocks\\n\\nMDX does not transform indented text as code blocks anymore.\\n\\n```md title=\\"example.md\\"\\n console.log(\\"hello\\");\\n```\\n\\n:::danger Visual change\\n\\nThe upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn\'t a code block anymore.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nUse the regular code block syntax instead of indentation:\\n\\n````md title=\\"example.md\\"\\n```js\\nconsole.log(\'hello\');\\n```\\n````\\n\\n:::\\n\\n### MDX plugins\\n\\nAll the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now [**ES Modules only**](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) and do not support [CommonJS](https://nodejs.org/api/modules.html#modules-commonjs-modules) anymore.\\n\\nIn practice this means that you can\'t do `require(\\"remark-plugin\\")` anymore.\\n\\n:::tip How to prepare\\n\\nDocusaurus v3 now supports [**ES Modules**](https://flaviocopes.com/es-modules/) configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:\\n\\n```js title=\\"docusaurus.config.js\\"\\nimport remarkPlugin from \'remark-plugin\';\\n\\nexport default {\\n title: \'Docusaurus\',\\n /* site config using remark plugins here */\\n};\\n```\\n\\nIf you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the [Docusaurus config supports the usage of an async function](/docs/configuration#syntax-to-declare-docusaurus-config) to let you do so.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = async function () {\\n const myPlugin = (await import(\'remark-plugin\')).default;\\n return {\\n // site config...\\n };\\n};\\n```\\n\\n:::\\n\\n:::info For plugin authors\\n\\nIf you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a [dedicated support discussion](https://github.com/facebook/docusaurus/discussions/9337) to help plugin authors upgrade their code.\\n\\n:::\\n\\n## Other breaking changes\\n\\nApart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.\\n\\n### Node.js 18.0\\n\\nNode.js 16 [reached End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol), and Docusaurus v3 now requires **Node.js >= 18.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### React 18.0\\n\\nDocusaurus v3 now requires **React >= 18.0**.\\n\\nReact 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.\\n\\nSimple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.\\n\\n:::tip How to prepare\\n\\nRead the official [React v18.0](https://react.dev/blog/2022/03/29/react-v18) and [How to Upgrade to React 18](https://react.dev/blog/2022/03/08/react-18-upgrade-guide), and look at your first-party React code to figure out which components might be affected this React 18 upgrade.\\n\\nWe recommend to particularly look for:\\n\\n- Automatic batching for stateful components\\n- New React hydration errors reported to the console\\n\\n:::\\n\\n### TypeScript 5.0\\n\\nDocusaurus v3 now requires **TypeScript >= 5.0**.\\n\\n:::tip How to prepare\\n\\nUpgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.\\n\\n:::\\n\\n### TypeScript base config\\n\\nThe official Docusaurus TypeScript config has been re-internalized from the external package [`@tsconfig/docusaurus`](https://www.npmjs.com/package/@tsconfig/docusaurus) to our new monorepo package [`@docusaurus/tsconfig`](https://www.npmjs.com/package/@docusaurus/tsconfig).\\n\\nThis new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.\\n\\n:::tip How to prepare\\n\\nThe new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"devDependencies\\": {\\n- \\"@tsconfig/docusaurus\\": \\"^1.0.7\\",\\n+ \\"@docusaurus/tsconfig\\": \\"^3.0.0-beta.0\\",\\n }\\n }\\n```\\n\\n```diff title=\\"tsconfig.json\\"\\n {\\n- \\"extends\\": \\"@tsconfig/docusaurus/tsconfig.json\\",\\n+ \\"extends\\": \\"@docusaurus/tsconfig\\",\\n \\"compilerOptions\\": {\\n \\"baseUrl\\": \\".\\"\\n }\\n }\\n```\\n\\n:::\\n\\n### Admonition warning\\n\\nFor historical reasons, we support an undocumented admonition `:::warning` that renders with a red color.\\n\\n:::danger Warning\\n\\nThis is a Docusaurus v2 `:::warning` admonition.\\n\\n:::\\n\\nHowever, the color and icon is historically wrong. Docusaurus v3 re-introduces `:::warning` admonition officially, documents it, and fix the color and icon.\\n\\n:::warning\\n\\nThis is a Docusaurus v3 `:::warning` admonition.\\n\\n:::\\n\\n:::tip How to prepare\\n\\nIf you previously used the undocumented `:::warning` admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use `:::danger` instead.\\n\\nDocusaurus v3 also [deprecated the `:::caution`](https://github.com/facebook/docusaurus/pull/9308) admonition. Please refactor `:::caution` (yellow) to either `:::warning` (yellow) or `:::danger` (red).\\n\\n:::\\n\\n### Versioned sidebars\\n\\nThis breaking change will only affect **Docusaurus v2 early adopters** who versioned their docs before `v2.0.0-beta.10` (December 2021).\\n\\nWhen creating version `v1.0.0`, the sidebar file contained a prefix `version-v1.0.0/` that [Docusaurus v3 does not support anymore](https://github.com/facebook/docusaurus/pull/9310).\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"version-v1.0.0/docs\\": [\\n \\"version-v1.0.0/introduction\\",\\n \\"version-v1.0.0/prerequisites\\"\\n ]\\n}\\n```\\n\\n:::tip How to prepare\\n\\nYour Docusaurus v2 site is able to handle the 2 sidebar formats similarly.\\n\\nYou can remove the useless versioned prefix from your versioned sidebars.\\n\\n```json title=\\"versioned_sidebars/version-v1.0.0-sidebars.json\\"\\n{\\n \\"docs\\": [\\"introduction\\", \\"prerequisites\\"]\\n}\\n```\\n\\n:::\\n\\n## Try Docusaurus v3 today {#try-docusaurus-v3-today}\\n\\nDocusaurus v3 is now [in beta](https://github.com/facebook/docusaurus/discussions/9312), and already used in production by [React-Native](https://reactnative.dev), [Jest](https://jestjs.io), and [our own website](https://docusaurus.io/).\\n\\nWe think this new Docusaurus version is **robust and ready to be deployed in production**. It should be released officially soon, after receiving a positive feedback from early adopters of our community.\\n\\nWe would really appreciate it if you try upgrading and report issues on the [3.0.0-beta.0 release discussion thread](https://github.com/facebook/docusaurus/discussions/9312).\\n\\nFor most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:\\n\\n```diff title=\\"package.json\\"\\n {\\n \\"dependencies\\": {\\n- \\"@docusaurus/core\\": \\"2.4.3\\",\\n- \\"@docusaurus/preset-classic\\": \\"2.4.3\\",\\n- \\"@mdx-js/react\\": \\"^1.6.22\\",\\n+ \\"@docusaurus/core\\": \\"3.0.0-beta.0\\",\\n+ \\"@docusaurus/preset-classic\\": \\"3.0.0-beta.0\\",\\n+ \\"@mdx-js/react\\": \\"^3.0.0\\",\\n \\"clsx\\": \\"^2.0.0\\",\\n \\"prism-react-renderer\\": \\"^1.3.5\\",\\n- \\"react\\": \\"^17.0.2\\",\\n- \\"react-dom\\": \\"^17.0.2\\"\\n+ \\"react\\": \\"^18.2.0\\",\\n+ \\"react-dom\\": \\"^18.2.0\\"\\n },\\n \\"devDependencies\\": {\\n- \\"@docusaurus/module-type-aliases\\": \\"2.4.3\\"\\n+ \\"@docusaurus/module-type-aliases\\": \\"3.0.0-beta.0\\"\\n }\\n }\\n```\\n\\n## Ask for help\\n\\nWe will be there to help you upgrade through the following support channels:\\n\\n- [Docusaurus v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9336)\\n- [Docusaurus v3 - Discord channel #migration-v2-to-v3](https://discord.com/channels/398180168688074762/1154771869094912090)\\n- [MDX v3 - Upgrade Support](https://github.com/facebook/docusaurus/discussions/9053)\\n- [MDX v3 - Remark/Rehype Plugins Support](https://github.com/facebook/docusaurus/discussions/9337)\\n- [MDX v3 - Discord channel #migration-mdx-v3](https://discord.com/channels/398180168688074762/1116724556976111616)\\n\\nAlternatively, you can look for a paid [Docusaurus Service Provider](https://github.com/facebook/docusaurus/discussions/9281) to execute this upgrade for you. If your site is open source, you can also ask our community for [free, benevolent help](https://github.com/facebook/docusaurus/discussions/9283).\\n\\n## Conclusion\\n\\nDocusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.\\n\\nThe initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes."},{"id":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","metadata":{"permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","source":"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx","title":"Upgrading frontend dependencies with confidence","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","date":"2023-09-22T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":8.355,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"authors":["slorber"],"tags":["release"],"slug":"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","description":"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.","image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1698328031000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3"},"nextItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"}},"content":"Frontend developers often need to **upgrade npm dependencies**, but those upgrades can feel scary and lead to **subtle UI side effects** not caught by your regular test suite.\\n\\nUpgrading Docusaurus is a good example: without reviewing all the pages one by one, it\'s hard to be sure there\'s no visual regression. **Docusaurus v3 is around the corner** (currently in [beta](https://github.com/facebook/docusaurus/discussions/9312)), and we would like to help you do this upgrade with confidence.\\n\\nThis article introduces a **visual regression testing** workflow based on [**GitHub Actions**](https://github.com/features/actions), [**Playwright**](https://playwright.dev/), and [**Argos**](https://argos-ci.com/). It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.\\n\\n![Upgrading frontend dependencies with confidence - social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nThis workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as [React Native](https://reactnative.dev/), [Jest](https://jestjs.io/), and the [Docusaurus](https://docusaurus.io/) site itself.\\n\\nDocusaurus v3 comes with infrastructure changes and major dependency upgrades such as [MDX v3](https://mdxjs.com/blog/v3/) and [React 18](https://react.dev/blog/2022/03/29/react-v18), which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That\'s why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.\\n\\n## Workflow overview\\n\\nThe general idea is pretty simple:\\n\\n- Build your site in CI with [GitHub Actions](https://github.com/features/actions)\\n- Take screenshots of all `sitemap.xml` pages with [Playwright](https://playwright.dev/)\\n- Upload them to [Argos](https://argos-ci.com/)\\n- Do this for both Git branches `main` and `pr-branch`\\n- Compare the screenshots side-by-side in [Argos](https://argos-ci.com/)\\n\\nArgos will then **report visual differences** found between `main` and `pr-branch` as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.\\n\\n![Argos GitHub commit status](./img/argos-github-status.png)\\n\\n![Argos GitHub PR comment](./img/argos-github-comment.png)\\n\\nArgos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.\\n\\nCheck the [Docusaurus Argos page](https://app.argos-ci.com/meta-open-source/docusaurus) to explore our own website reports.\\n\\nHere is a more concrete example of Argos [reporting a visual regression](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838) found while upgrading the React-Native website:\\n\\n[![Argos GitHub PR comment](./img/argos-react-native-regression.png)](https://app.argos-ci.com/slorber/rnw-visual-tests/builds/32/56012838)\\n\\n## Workflow implementation\\n\\nThis section will describe the implementation details of each step of the workflow.\\n\\nYou will need to [sign up to Argos](https://app.argos-ci.com/signup) and [connect Argos to your GitHub repository](https://argos-ci.com/docs/github)\\n\\n### Dependencies\\n\\nThis workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:\\n\\n```bash\\nyarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio\\n```\\n\\n### GitHub Action\\n\\nThe GitHub action is responsible for executing the workflow for each Git branch.\\n\\nA minimal workflow could look like:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n\\njobs:\\n take-screenshots:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Check out repository code\\n uses: actions/checkout@v4\\n\\n - name: Use Node.js\\n uses: actions/setup-node@v3\\n with:\\n node-version: current\\n\\n - name: Install dependencies\\n run: yarn install --frozen-lockfile\\n\\n - name: Install Playwright browsers\\n run: yarn playwright install --with-deps chromium\\n\\n - name: Build the website\\n run: yarn docusaurus build\\n\\n - name: Take screenshots with Playwright\\n run: yarn playwright test\\n\\n - name: Upload screenshots to Argos\\n run: yarn argos upload ./screenshots\\n```\\n\\n### Playwright config\\n\\nPlaywright is responsible for taking screenshots of the website previously built locally by the GitHub action.\\n\\nA minimal [Playwright config](https://playwright.dev/docs/test-configuration) could look like:\\n\\n```ts title=\\"playwright.config.ts\\"\\nimport {devices} from \'@playwright/test\';\\nimport type {PlaywrightTestConfig} from \'@playwright/test\';\\n\\nconst config: PlaywrightTestConfig = {\\n webServer: {\\n port: 3000,\\n command: \'yarn docusaurus serve\',\\n },\\n projects: [\\n {\\n name: \'chromium\',\\n use: {\\n ...devices[\'Desktop Chrome\'],\\n },\\n },\\n ],\\n};\\n\\nexport default config;\\n```\\n\\n### Playwright test\\n\\nA Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.\\n\\n```ts title=\\"screenshot.spec.ts\\"\\nimport * as fs from \'fs\';\\nimport {test} from \'@playwright/test\';\\nimport {argosScreenshot} from \'@argos-ci/playwright\';\\nimport {extractSitemapPathnames, pathnameToArgosName} from \'./utils\';\\n\\n// Constants\\nconst siteUrl = \'http://localhost:3000\';\\nconst sitemapPath = \'./build/sitemap.xml\';\\nconst stylesheetPath = \'./screenshot.css\';\\nconst stylesheet = fs.readFileSync(stylesheetPath).toString();\\n\\n// Wait for hydration, requires Docusaurus v2.4.3+\\n// Docusaurus adds a <html data-has-hydrated=\\"true\\"> once hydrated\\n// See https://github.com/facebook/docusaurus/pull/9256\\nfunction waitForDocusaurusHydration() {\\n return document.documentElement.dataset.hasHydrated === \'true\';\\n}\\n\\nfunction screenshotPathname(pathname: string) {\\n test(`pathname ${pathname}`, async ({page}) => {\\n const url = siteUrl + pathname;\\n await page.goto(url);\\n await page.waitForFunction(waitForDocusaurusHydration);\\n await page.addStyleTag({content: stylesheet});\\n await argosScreenshot(page, pathnameToArgosName(pathname));\\n });\\n}\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath);\\n console.log(\'Pathnames to screenshot:\', pathnames);\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n<details>\\n <summary>Why do we take screenshots with Argos instead of Playwright?</summary>\\n\\nArgos has a [Playwright integration](https://argos-ci.com/docs/playwright) that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.\\n\\n</details>\\n\\n<details>\\n<summary>What\'s inside <code>utils.ts</code>?</summary>\\n\\nThis module contains implementation details that we choose to hide for clarity.\\n\\n```ts\\nimport * as cheerio from \'cheerio\';\\nimport * as fs from \'fs\';\\n\\n// Extract a list of pathnames, given a fs path to a sitemap.xml file\\n// Docusaurus generates a build/sitemap.xml file for you!\\nexport function extractSitemapPathnames(sitemapPath: string): string[] {\\n const sitemap = fs.readFileSync(sitemapPath).toString();\\n const $ = cheerio.load(sitemap, {xmlMode: true});\\n const urls: string[] = [];\\n $(\'loc\').each(function handleLoc() {\\n urls.push($(this).text());\\n });\\n return urls.map((url) => new URL(url).pathname);\\n}\\n\\n// Converts a pathname to a decent screenshot name\\nexport function pathnameToArgosName(pathname: string): string {\\n return pathname.replace(/^\\\\/|\\\\/$/g, \'\') || \'index\';\\n}\\n```\\n\\n</details>\\n\\n### Stylesheet\\n\\nScreenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as **false positive** visual regressions.\\n\\nFor this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read [Argos - About flaky tests docs](https://argos-ci.com/docs/about-flaky) for details.\\n\\n```css title=\\"screenshot.css\\"\\n/* Iframes can load lazily */\\niframe,\\n/* Avatars can be flaky due to using external sources: GitHub/Unavatar */\\n.avatar__photo,\\n/* Gifs load lazily and are animated */\\nimg[src$=\'.gif\'],\\n/* Algolia keyboard shortcuts appear with a little delay */\\n.DocSearch-Button-Keys > kbd,\\n/* The live playground preview can often display dates/counters */\\n[class*=\'playgroundPreview\'] {\\n visibility: hidden;\\n}\\n\\n/* Different docs last-update dates can alter layout */\\n.theme-last-updated,\\n/* Mermaid diagrams are rendered client-side and produce layout shifts */\\n.docusaurus-mermaid-container {\\n display: none;\\n}\\n```\\n\\n:::tip prevent layout shifts\\n\\nWe recommend hiding flaky UI elements affecting layout with `display: none;`.\\n\\nFor example, the docs \\"Last Updated on\\" might render on more than 1 line, eventually \\"pushing\\" the rest of your content further down, leading to Argos detecting many different pixels.\\n\\n:::\\n\\n## Example repository\\n\\nThe [slorber/docusaurus-argos-example](https://github.com/slorber/docusaurus-argos-example) repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.\\n\\n[![Docusaurus + Argos monorepo example screenshot](./img/docusaurus-argos-example-repo-screenshot.png)](https://github.com/slorber/docusaurus-argos-example)\\n\\nRelevant pull-requests:\\n\\n- [PR - Set up GitHub Action + Playwright + Argos](https://github.com/slorber/docusaurus-argos-example/pull/1): implements the minimal workflow described above\\n- [PR - Upgrading Docusaurus from v2 to v3](https://github.com/slorber/docusaurus-argos-example/pull/2): shows how Argos caught 3 visual regressions while upgrading\\n\\n:::tip More advanced example?\\n\\nBrowse the Docusaurus repository for a more advanced integration:\\n\\n- [GitHub Action](https://github.com/facebook/docusaurus/blob/main/.github/workflows/argos.yml)\\n- [Playwright + Argos tests](https://github.com/facebook/docusaurus/tree/main/argos)\\n\\n:::\\n\\n## Make it cheap\\n\\nThe tools we choose are implementation details of this visual regression testing workflow.\\n\\nFor Docusaurus, we choose [Argos](https://argos-ci.com/): it works well for us, and offers [free](https://argos-ci.com/pricing) and [open source](https://argos-ci.com/docs/open-source) plans. However, you are free to adopt alternative tools.\\n\\nIn case you don\'t mind storing large screenshots in Git, you can also try the free, self-hosted [Playwright Visual Comparisons](https://playwright.dev/docs/test-snapshots) and browse visual differences with `npx playwright show-report`. However, we found using a dedicated external tool is more convenient.\\n\\nExternal tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.\\n\\n### Limit the number of pathnames\\n\\nThe base setup involves taking a screenshot of every single pathname found in `sitemap.xml`. For large sites, that can lead to a lot of screenshots.\\n\\nYou can decide to filter the pathnames to only take screenshots of the most critical pages.\\n\\nFor the Docusaurus website, do not take screenshots for versioned docs pages:\\n\\n```ts title=\\"screenshot.spec.ts\\"\\n// highlight-start\\nfunction isVersionedDocsPathname(pathname: string): boolean {\\n return pathname.match(/^\\\\/docs\\\\/((\\\\d\\\\.\\\\d\\\\.\\\\d)|(next))\\\\//);\\n}\\n// highlight-end\\n\\ntest.describe(\'Docusaurus site screenshots\', () => {\\n const pathnames = extractSitemapPathnames(sitemapPath)\\n // highlight-next-line\\n .filter(isVersionedDocsPathname);\\n\\n pathnames.forEach(screenshotPathname);\\n});\\n```\\n\\n### Limit the workflow concurrency\\n\\nImplementing [GitHub Actions concurrency groups](https://docs.github.com/en/actions/using-jobs/using-concurrency) will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nconcurrency:\\n group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}\\n cancel-in-progress: true\\n```\\n\\n### Run your workflow conditionally\\n\\nIt\'s not worth running this workflow for every single commit and pull-request.\\n\\nFor example, if someone corrects a typo in your documentation, you probably don\'t want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that\'s a bit expected!\\n\\nFor the Docusaurus website, we only run the workflow for pull-request having the `Argos` label:\\n\\n```yaml title=\\".github/workflows/argos.yml\\"\\nname: Argos CI Screenshots\\n\\non:\\n push:\\n branches: [main]\\n pull_request:\\n branches: [main]\\n # highlight-start\\n types:\\n - opened\\n - synchronize\\n - reopened\\n - labeled\\n # highlight-end\\n\\njobs:\\n take-screenshots:\\n # highlight-start\\n if: ${{ github.ref_name == \'main\' || (github.event_name == \'pull_request\' && contains(github.event.pull_request.labels.*.name, \'Argos\')) }}\\n # highlight-end\\n runs-on: ubuntu-latest\\n steps:\\n # Your job steps here ...\\n```\\n\\nThere are many options to explore, such as [triggering the workflow manually](https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow) or [only when files matching a specific pattern are modified](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#example-including-paths).\\n\\n## Conclusion\\n\\nI believe **visual regression testing is underused** in the frontend ecosystem.\\n\\nTaking full-page screenshots is a **low-hanging fruit** that is easy to set up and can help you **catch a new class of bugs** that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for **any kind of refactoring** that shouldn\'t change the user interface.\\n\\nSo why not give it a try?\\n\\nHappy hacking!\\n\\n## See also\\n\\nUseful documentation links:\\n\\n- [Playwright - Installation](https://playwright.dev/docs/intro)\\n- [Playwright - Test config guide](https://playwright.dev/docs/test-configuration)\\n- [Playwright - Test config API](https://playwright.dev/docs/api/class-testconfig)\\n- [Argos - Installation](https://argos-ci.com/docs/installation)\\n- [Argos - Use with GitHub Actions](https://argos-ci.com/docs/github-actions)\\n- [Argos - Use with Playwright](https://argos-ci.com/docs/playwright)\\n- [Argos - About flaky tests](https://argos-ci.com/docs/about-flaky)"},{"id":"/releases/2.4","metadata":{"permalink":"/blog/releases/2.4","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.4/index.mdx","source":"@site/blog/releases/2.4/index.mdx","title":"Docusaurus 2.4","description":"We are happy to announce Docusaurus 2.4.","date":"2023-03-23T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.05,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.4","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-03-23T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1694767701000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"},"nextItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"}},"content":"We are happy to announce **Docusaurus 2.4**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus blog post social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport IframeWindow from \'@site/src/components/BrowserWindow/IframeWindow\';\\nimport ErrorBoundaryTestButton from \'@site/src/components/ErrorBoundaryTestButton\';\\n\\n## Highlights\\n\\n### Sidebar item description\\n\\nIn [#8236](https://github.com/facebook/docusaurus/pull/8236), we made it possible to provide a new `description` attribute for docs sidebar items of type `link` and `category`.\\n\\n```tsx title=\\"sidebars.js\\"\\n[\\n {\\n type: \'link\',\\n label: \'Link with description\',\\n href: \'https://docusaurus.io\',\\n // highlight-next-line\\n description: \'Some link description\',\\n },\\n {\\n type: \'category\',\\n label: \'Category with description\',\\n // highlight-next-line\\n description: \'Some category description\',\\n items: [],\\n },\\n];\\n```\\n\\nThese descriptions will be used in category generated index pages.\\n\\n![Show sidebar category generated index with custom descriptions](./img/sidebar-item-description.jpg)\\n\\n### Theme Query String\\n\\nIn [#8708](https://github.com/facebook/docusaurus/pull/8708), we added the possibility to force Docusaurus to initialize itself in `light` or `dark` mode through a new `docusaurus-theme` query-string parameter.\\n\\nThis is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.\\n\\n<IframeWindow url=\\"/docs/?docusaurus-theme=light\\" />\\n<IframeWindow url=\\"/docs/?docusaurus-theme=dark\\" />\\n\\n### Remark plugin npm2yarn upgrade\\n\\nIn [#8690](https://github.com/facebook/docusaurus/pull/8690), we upgraded our Remark plugin [@docusaurus/remark-plugin-npm2yarn](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-remark-plugin-npm2yarn) with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.\\n\\n````markdown\\nRun these commands!\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n````\\n\\n<BrowserWindow>\\n\\n```bash npm2yarn\\nnpm install\\nnpm run build\\nnpm run myCustomScript -- --some-arg\\n```\\n\\n</BrowserWindow>\\n\\n### gtag support for multiple tracking IDs\\n\\nIn [#8620](https://github.com/facebook/docusaurus/pull/8620) we added support for the [@docusaurus/plugin-google-gtag](/docs/api/plugins/@docusaurus/plugin-google-gtag) plugin to declare multiple tracking IDs.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n presets: [\\n [\\n \'@docusaurus/preset-classic\',\\n {\\n gtag: {\\n trackingID: [\\n // highlight-next-line\\n \'G-<YOUR-NEW-GA4-ID>\',\\n // highlight-next-line\\n \'UA-<YOUR-OLD-UA-ID>\',\\n ],\\n },\\n },\\n ],\\n ],\\n};\\n```\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n**[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/)** on **July 1, 2023**.\\n\\nDocusaurus users should migrate to Google Analytics 4. Google **does not permit to migrate your existing Universal Analytics data** to your new Google Analytics 4 property.\\n\\nTo preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (`UA-*`) and new one (`G-*`). Refer to the **[dedicated issue](https://github.com/facebook/docusaurus/issues/7221)** for details.\\n\\n:::\\n\\n### Developer Experience\\n\\nIn [#8736](https://github.com/facebook/docusaurus/pull/8736), we improved how we render error messages and added initial support to render the full causal chain of an error (see [ES2022 Error Cause](https://h3manth.com/ES2022/#error-cause)).\\n\\n:::tip\\n\\nTo see it in action, click here: <ErrorBoundaryTestButton cause=\\"Probably undefined is not a function \ud83d\ude04\\"/>\\n\\n:::\\n\\nIn [#8735](https://github.com/facebook/docusaurus/pull/8735) we also made navbar-related error messages clearer to help users understand what they did wrong.\\n\\n![Docusaurus navbar error message screenshot](./img/navbar-error.jpg)\\n\\n### Translations\\n\\nWe made it possible to translate some new elements:\\n\\n- [#8677](https://github.com/facebook/docusaurus/pull/8677) introduces a new `process.env.DOCUSAURUS_CURRENT_LOCALE` (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...\\n- [#8616](https://github.com/facebook/docusaurus/pull/8616) allows to translate the navbar and footer logo alt text\\n\\nWe added default theme translation support for multiple languages:\\n\\n- \ud83c\udded\ud83c\uddfa [#8668](https://github.com/facebook/docusaurus/pull/8668): Hungarian\\n- \ud83c\uddf3\ud83c\uddf4 [#8631](https://github.com/facebook/docusaurus/pull/8631): Norwegian (Bokm\xe5l)\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8674](https://github.com/facebook/docusaurus/pull/8674): respect `prefers-reduced-motion: reduce` media query\\n- [#8712](https://github.com/facebook/docusaurus/pull/8712): use a navbar item of type `docSidebar` in template\\n- [#8801](https://github.com/facebook/docusaurus/pull/8801): allow tabs children to be falsy\\n- [#8757](https://github.com/facebook/docusaurus/pull/8757): make search page react to external query-string changes\\n- [#8803](https://github.com/facebook/docusaurus/pull/8803): fix code block buttons position in RTL\\n- [#8615](https://github.com/facebook/docusaurus/pull/8615): fix color mode toggle when using dark navbar\\n- [#8699](https://github.com/facebook/docusaurus/pull/8699): fix navbar dropdown tab focus bug\\n\\nCheck the **[2.4.0 changelog entry](/changelog/2.4.0)** for an exhaustive list of changes."},{"id":"/releases/2.3","metadata":{"permalink":"/blog/releases/2.3","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx","source":"@site/blog/releases/2.3/index.mdx","title":"Docusaurus 2.3","description":"We are happy to announce Docusaurus 2.3.","date":"2023-01-27T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.89,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.3","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2023-01-27T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1694767701000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4"},"nextItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"}},"content":"We are happy to announce **Docusaurus 2.3**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### Google Tag Manager plugin\\n\\nGoogle Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.\\n\\nWe now have a [`@docusaurus/plugin-google-tag-manager`](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/) package that you can use alongside or as an alternative to the existing [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/) (refer to [this doc](https://support.google.com/tagmanager/answer/7582054) to understand when to use which solution).\\n\\n:::warning Google is sunsetting Universal Analytics\\n\\n[Google will sunset its Universal Analytics](https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/) on **July 1, 2023**, and ask users to migrate to **Google Analytics 4**.\\n\\nTherefore, we are also **deprecating our existing [`@docusaurus/plugin-google-analytics`](/docs/api/plugins/@docusaurus/plugin-google-analytics)** package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the [gtag.js plugin](/docs/api/plugins/@docusaurus/plugin-google-gtag/), or the [Google Tag Manager plugin](/docs/api/plugins/@docusaurus/plugin-google-tag-manager/). Refer to the [dedicated Docusaurus issue](https://github.com/facebook/docusaurus/issues/7221) for details and questions.\\n\\n:::\\n\\n### Tabs Query String Support\\n\\nIt is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a `?qs-param=tab-value` search parameter.\\n\\nThis feature allows deep-linking to a specific documentation tab that will pre-selected on page load.\\n\\nWhen used alongside the `groupId` prop, the query string tab value takes precedence over the `localStorage` value.\\n\\nMake sure to check the [documentation](/docs/markdown-features/tabs#query-string) and the demo below to understand how it works:\\n\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport Tabs from \'@theme/Tabs\';\\nimport TabItem from \'@theme/TabItem\';\\n\\n```tsx\\n<Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n</Tabs>\\n```\\n\\n<BrowserWindow>\\n <Tabs groupId=\\"current-os\\" queryString>\\n <TabItem value=\\"android\\" label=\\"Android\\">\\n Android\\n </TabItem>\\n <TabItem value=\\"ios\\" label=\\"iOS\\">\\n iOS\\n </TabItem>\\n </Tabs>\\n</BrowserWindow>\\n\\n### Nested admonitions\\n\\nIt is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:\\n\\n```md\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n```\\n\\n::::tip nested admonitions\\n\\nYou can now nest one admonition within another!\\n\\n:::danger\\n\\nUse this sparingly when it makes sense.\\n\\n:::\\n\\n::::\\n\\n### Blog `createFeedItems`\\n\\nA new blog plugin option [`feedOptions.createFeedItems`](/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn) gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.\\n\\n```tsx title=\\"docusaurus.config.js\\"\\n[\\n \'@docusaurus/preset-classic\',\\n {\\n blog: {\\n feedOptions: {\\n // highlight-start\\n createFeedItems: async (params) => {\\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\\n return defaultCreateFeedItems({\\n // keep only the 10 most recent blog posts in the feed\\n blogPosts: blogPosts.filter((item, index) => index < 10),\\n ...rest,\\n });\\n },\\n // highlight-end\\n },\\n },\\n },\\n];\\n```\\n\\n### Translations\\n\\nWe added or completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf8\ud83c\uddee [#8541](https://github.com/facebook/docusaurus/pull/8541) Slovenian\\n- \ud83c\uddf9\ud83c\uddf7 [#8289](https://github.com/facebook/docusaurus/pull/8289) Turkish\\n- \ud83c\uddee\ud83c\uddf7 [#8406](https://github.com/facebook/docusaurus/pull/8406) Farsi\\n- \ud83c\uddf5\ud83c\uddf1 [#8525](https://github.com/facebook/docusaurus/pull/8525) Polish\\n- \ud83c\udde8\ud83c\uddf3 [#8423](https://github.com/facebook/docusaurus/pull/8423) Chinese\\n- \ud83c\uddf8\ud83c\uddea [#8312](https://github.com/facebook/docusaurus/pull/8312) Swedish\\n- \ud83c\uddfb\ud83c\uddf3 [#8450](https://github.com/facebook/docusaurus/pull/8450) Vietnamese\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8463](https://github.com/facebook/docusaurus/pull/8463) and [#8328](https://github.com/facebook/docusaurus/pull/8328): fix some annoying Docusaurus layout issues\\n- [#8539](https://github.com/facebook/docusaurus/pull/8539): Algolia plugin `options.searchPagePath` should be correctly applied to search modal footer\\n- [#8462](https://github.com/facebook/docusaurus/pull/8462): Algolia plugin now makes it easier to transform displayed search results with custom logic\\n- [#8397](https://github.com/facebook/docusaurus/pull/8397): the `deploy` CLI now understands git url `insteadOf` config\\n\\nCheck the **[2.3.0 changelog entry](/changelog/2.3.0)** for an exhaustive list of changes."},{"id":"/releases/2.2","metadata":{"permalink":"/blog/releases/2.2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx","source":"@site/blog/releases/2.2/index.mdx","title":"Docusaurus 2.2","description":"We are happy to announce Docusaurus 2.2.","date":"2022-10-29T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.2,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.2","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png","date":"2022-10-29T00:00:00.000Z"},"unlisted":false,"lastUpdatedAt":1682099337000,"lastUpdatedBy":"S\xe9bastien Lorber","prevItem":{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3"},"nextItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"}},"content":"We are happy to announce **Docusaurus 2.2**.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.2 social card](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n## Highlights\\n\\n### Mermaid diagrams\\n\\nIn [#7490](https://github.com/facebook/docusaurus/pull/7490), we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also [added support recently](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/). You can create Mermaid diagrams using Markdown code blocks:\\n\\n````md\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n````\\n\\n````mdx-code-block\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\n\\n<BrowserWindow>\\n\\n```mermaid\\nsequenceDiagram\\n participant Alice\\n participant Bob\\n Alice->>John: Hello John, how are you?\\n loop Health check\\n John->>John: Fight against hypochondria\\n end\\n Note right of John: Rational thoughts <br/>prevail!\\n John--\x3e>Alice: Great!\\n John->>Bob: How about you?\\n Bob--\x3e>John: Jolly good!\\n```\\n\\n</BrowserWindow>\\n\\n````\\n\\nMake sure to check the [documentation](/docs/markdown-features/diagrams), and the [more advanced examples](/tests/pages/diagrams)\\n\\n### Config `headTags`\\n\\nIn [#8151](https://github.com/facebook/docusaurus/pull/8151), we added the ability to apply arbitrary HTML `<head>` tags to all pages of your site.\\n\\n```js title=\\"docusaurus.config.js\\"\\nmodule.exports = {\\n headTags: [\\n {\\n tagName: \'link\',\\n attributes: {\\n rel: \'icon\',\\n href: \'/img/docusaurus.png\',\\n },\\n },\\n ],\\n};\\n```\\n\\n### Accessibility\\n\\nWe did several accessibility improvements:\\n\\n- [#8207](https://github.com/facebook/docusaurus/pull/8207): improves keyboard navigation for mobile drawer hamburger button\\n- [#8161](https://github.com/facebook/docusaurus/pull/8161): improves keyboard navigation for tabs\\n- [#8204](https://github.com/facebook/docusaurus/pull/8204): makes the skip to content button support progressive enhancement\\n- [#8174](https://github.com/facebook/docusaurus/pull/8174): improves screen reader announcement when toggling between light/dark mode\\n\\n### Developer Experience\\n\\nWe made validation stricter and improved error messages:\\n\\n- [#8234](https://github.com/facebook/docusaurus/pull/8234): in case of doc processing failure, prints the problematic markdown file path in the error message\\n- [#8192](https://github.com/facebook/docusaurus/pull/8192) and [#8159](https://github.com/facebook/docusaurus/pull/8159): validates `siteConfig.url` more strictly and with better error message\\n- [#8066](https://github.com/facebook/docusaurus/pull/8066): makes config `url` and `baseUrl` fail-safe and less sensitive to the presence or absence of a leading or trailing slash\\n\\n### Translations\\n\\nWe completed the default theme translation support for multiple languages:\\n\\n- \ud83c\uddf9\ud83c\uddf7 [#8105](https://github.com/facebook/docusaurus/pull/8105): completes Turkish translations\\n- \ud83c\uddf7\ud83c\uddfa [#8253](https://github.com/facebook/docusaurus/pull/8253): completes Russian translations\\n- \ud83c\uddeb\ud83c\uddf7 [#8243](https://github.com/facebook/docusaurus/pull/8243): completes French translations\\n- \ud83c\uddef\ud83c\uddf5 [#8075](https://github.com/facebook/docusaurus/pull/8075): completes Japanese translations\\n\\n:::tip\\n\\nCompleting theme translations is an [ongoing effort](https://github.com/facebook/docusaurus/issues/3526) and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often [need new translations](https://github.com/facebook/docusaurus/issues/3526).\\n\\n:::\\n\\n## Other changes\\n\\nOther notable changes include:\\n\\n- [#8210](https://github.com/facebook/docusaurus/pull/8210): the `docusaurus swizzle` CLI has a new `--config` option\\n- [#8109](https://github.com/facebook/docusaurus/pull/8109): mobile navigation performance optimizations, prefetch resources earlier\\n- [#8059](https://github.com/facebook/docusaurus/pull/8059): versions/locales navbar dropdowns preserve hash and querystring on navigation\\n- [#8227](https://github.com/facebook/docusaurus/pull/8227): the client redirect plugin preserves hash and querystring on redirect\\n\\nCheck the **[2.2.0 changelog entry](/changelog/2.2.0)** for an exhaustive list of changes."},{"id":"/2022/09/01/docusaurus-2.1","metadata":{"permalink":"/blog/2022/09/01/docusaurus-2.1","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/09-01-docusaurus-2.1/index.mdx","source":"@site/blog/2022/09-01-docusaurus-2.1/index.mdx","title":"Docusaurus 2.1","description":"We are happy to announce Docusaurus 2.1, our very first minor version release.","date":"2022-09-01T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":1.725,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2.1","authors":["slorber"],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2"},"nextItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"}},"content":"We are happy to announce **Docusaurus 2.1**, our very first minor version release.\\n\\nThe upgrade should be easy: as explained in our [release process documentation](/community/release-process), minor versions respect [Semantic Versioning](https://semver.org/).\\n\\n![Docusaurus 2.1 social card](./img/social-card.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\n### DocCardList improvements\\n\\nIn [#8008](https://github.com/facebook/docusaurus/pull/8008), we simplified the usage of the`<DocCardList>` component, that is notably used on sidebar category generated index pages.\\n\\nThe `items` prop is now optional, and will be automatically inferred from the content of the parent sidebar category:\\n\\n```diff\\nimport DocCardList from \'@theme/DocCardList\';\\n- import {useCurrentSidebarCategory} from \'@docusaurus/theme-common\';\\n\\n- <DocCardList items={useCurrentSidebarCategory().items}/>\\n+ <DocCardList/>\\n```\\n\\nAlso, we made it possible to use it on any document, including regular docs not linked to any sidebar category.\\n\\n![simplified DocCardList component](./img/doc-card-list.png)\\n\\n### `noindex` improvements\\n\\nWe improved the support of the [`noindex` meta `robots` directive](https://developers.google.com/search/docs/advanced/crawling/block-indexing), a way to signal search engines you don\'t want a specific page to be indexed.\\n\\nIn [#7963](https://github.com/facebook/docusaurus/pull/7963), we allow `noindex` to be configured on a per-docs-version basis.\\n\\nUse the following plugin options to tell crawlers you don\'t want the `1.0.0` version to be indexed:\\n\\n```jsx\\nconst options = {\\n versions: {\\n \'1.0.0\': {\\n noIndex: true,\\n },\\n },\\n};\\n```\\n\\nIn practice, Docusaurus will add the following meta to each page of that version:\\n\\n```html\\n<meta name=\\"robots\\" content=\\"noindex, nofollow\\" />\\n```\\n\\nIn [#7964](https://github.com/facebook/docusaurus/pull/7964), we also fixed a bug where the sitemap plugin would still contain pages that have a `noindex` directive. Now the sitemap plugin will reliably filter out all the pages containing `noindex` directives.\\n\\n### Overriding default meta tags\\n\\nIn [#7952](https://github.com/facebook/docusaurus/pull/7952), it becomes possible to override default html meta tags you couldn\'t before:\\n\\n```jsx\\n<>\\n {siteConfig.noIndex && <meta name=\\"robots\\" content=\\"nofollow, noindex\\" />}\\n <meta name=\\"viewport\\" content=\\"width=device-width, initial-scale=1.0\\" />\\n</>\\n```\\n\\nIt is now possible to use `<Head>` or `themeConfig.metadata`:\\n\\n- to override the `viewport` meta\\n- to override the `robots` meta: you could mark your site as `noIndex`, but except for specific pages that should be indexed\\n\\n### Ukrainian translations\\n\\nIn [#7953](https://github.com/facebook/docusaurus/pull/7953), we added default classic theme translations for the Ukrainian language.\\n\\n## Other changes\\n\\nCheck the [2.1.0 changelog entry](/changelog/2.1.0) for an exhaustive list of changes."},{"id":"/2022/08/01/announcing-docusaurus-2.0","metadata":{"permalink":"/blog/2022/08/01/announcing-docusaurus-2.0","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","source":"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx","title":"Announcing Docusaurus 2.0","description":"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f","date":"2022-08-01T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"}],"readingTime":12.075,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","imageURL":"https://github.com/lex111.png","key":"lex111"},{"name":"Paul O\u2019Shannessy","title":"Engineering Manager at Meta","url":"https://twitter.com/zpao","email":"jimarcey@gmail.com","twitter":"zpao","imageURL":"https://github.com/zpao.png","key":"zpao"},{"name":"Joel Marcey","title":"Co-creator of Docusaurus 1","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Announcing Docusaurus 2.0","authors":["slorber","Josh-Cena","yangshun","lex111","zpao",{"key":"JMarcey","title":"Co-creator of Docusaurus 1"}],"tags":["release"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1"},"nextItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"}},"content":"```mdx-code-block\\nimport LiteYouTubeEmbed from \'react-lite-youtube-embed\';\\nimport \'react-lite-youtube-embed/dist/LiteYouTubeEmbed.css\';\\nimport BrowserWindow from \'@site/src/components/BrowserWindow\';\\nimport ProductHuntCard from \'@site/src/components/ProductHuntCard\';\\nimport HackerNewsIcon from \'@site/src/components/HackerNewsIcon\';\\nimport ColorModeToggle from \'@theme/Navbar/ColorModeToggle\';\\nimport useBaseUrl from \'@docusaurus/useBaseUrl\';\\nimport ThemedImage from \'@theme/ThemedImage\';\\nimport {ShowcaseCarouselV1, ShowcaseCarouselV2, ShowcaseCarouselV2Theming} from \'./ShowcaseCarousel\';\\n```\\n\\nToday we are extremely happy to finally **announce Docusaurus 2.0**! \ud83e\udd73\ufe0f\\n\\nAt [**Meta Open Source**](https://opensource.fb.com/), we believe Docusaurus will help you build the **best documentation websites** with **minimal effort**, letting you **focus on what really matters**: writing the content.\\n\\nAfter **4 years of work, [75 alphas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75) and [22 betas](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22)**, the next generation of Docusaurus is **ready for prime time**. From now on, we now plan to **respect [Semantic Versioning](https://semver.org/)** and will release **major versions more frequently**.\\n\\n![social-card image](./img/social-card.png)\\n\\n{/* truncate */}\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n**Now** is the best time to show your love for Docusaurus!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n:::tip\\n\\nIn a hurry? Check [what\'s new in Docusaurus 2.0](#whats-new-in-20)!\\n\\n:::\\n\\n## What is Docusaurus exactly?\\n\\nDocusaurus is a **static site generator** that helps you ship **beautiful documentation websites** in **no time**.\\n\\nFocus on your content: just write **Markdown files**. Docusaurus will generate an optimized **website** for you that\'s easy to **host anywhere**.\\n\\nDocusaurus is **full-featured** and very **flexible**: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to **adapt the UI to match your branding** so that it integrates nicely with your main website or documentation portal. Its usage of **React** enables a **modern client-side navigation**, and the ability to build an **interactive documentation**.\\n\\n![Introducing Slash](/img/slash-introducing.svg)\\n\\nThe Docusaurus philosophy is akin to the **Pareto principle**: you can get **80% of the results** for **20% of the effort**. This enables you to compete with top-notch documentation sites with **minimal effort**.\\n\\n<TweetQuote\\n url=\\"https://twitter.com/rachelnabors/status/1452697991039660038\\"\\n handle=\\"rachelnabors\\"\\n name=\\"Rachel Nabors\\"\\n job=\\"Former ReactJS & React-Native docs manager\\">\\n Unless you\'re spinning up a documentation team with engineering resources, you\\n probably want Docusaurus!\\n</TweetQuote>\\n\\nDocusaurus aims to be the **best documentation tool**, but you can use it for **other use-cases** as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!\\n\\n<TweetQuote\\n url=\\"https://twitter.com/johnny_reilly/status/1551861926334025728\\"\\n handle=\\"johnny_reilly\\"\\n name=\\"Johnny Reilly\\"\\n job=\\"Group Principal Engineer at Investec\\">\\n Using Docusaurus for my tech blog has been a fantastic choice. It looks\\n tremendous out-of-the-box and the awesome DX means I write way more\\n</TweetQuote>\\n\\n:::tip\\n\\nTry Docusaurus now with our [online playgrounds](/docs/playground) and [5 minutes tutorial](https://tutorial.docusaurus.io/) \u23f1\ufe0f\\n\\n:::\\n\\n## The story behind Docusaurus\\n\\nDocusaurus was created at **Facebook Open Source** in **2017** (now [Meta Open Source](https://opensource.fb.com/)). We had a lot of internal and open source projects to document. It\'s **complicated enough to write good documentation**, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to **focus on the content**, and **Markdown** is great for that.\\n\\nAt that time, our solution was to **copy/paste a Jekyll template** over and over again. This naturally became **hard to maintain**, so we created a tool to **solve our own pain** once for all.\\n\\n**[Docusaurus v1 was born](/blog/2017/12-14-introducing-docusaurus.mdx)!**\\n\\n![Birth of Slash](/img/slash-birth.png)\\n\\nIt quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as [Prettier](https://prettier.io/), [Babel](https://babeljs.io/), [React-Native](https://archive.reactnative.dev/), [KaTeX](https://katex.org/docs/), and of course [Docusaurus v1](http://v1.docusaurus.io/) itself.\\n\\n<ShowcaseCarouselV1 />\\n\\n<br />\\n\\n:::note\\n\\nNotice that the sample sites above use different colors, but still look quite the same.\\n\\n:::\\n\\n## Toward Docusaurus 2.0\\n\\n[**Docusaurus v1**](http://v1.docusaurus.io/) has been very successful, but we started to **question some architectural choices**:\\n\\n- React was only used as a **server-side templating language**, and not used on the client\\n- **Theming system was pretty limited**, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations\\n- The **docs versioning system was confusing**, since it was based on a diff algorithm\\n- The codebase was **monolithic**, neither well-tested nor easy to extend\\n\\n[**Docusaurus v2**](https://docusaurus.io/) was **rebuilt** from the ground up with a new **modular architecture**:\\n\\n- React is now also used on the client, enabling a **modern Single Page Application navigation**\\n- **Plugins** empower the community to contribute useful features as third-party packages\\n- **Theming** is more **flexible** than ever\\n- Docs versioning is now based on snapshot copies, much easier to understand\\n- We kept **everything good from v1**: docs, blog, pages, versioning, i18n...\\n- We implemented **several new features**\\n\\nMore details in the [Docusaurus 2 project announcement](/blog/2018/09-11-Towards-Docusaurus-2.mdx) and [v1 to v2 migration guide](https://docusaurus.io/docs/migration)\\n\\n## Who uses Docusaurus 2.0?\\n\\nDespite being in pre-release, it didn\'t take long for **Docusaurus v2 to outgrow Docusaurus v1** in terms of NPM downloads:\\n\\n[![NPM downloads: v2 outgrows v1](./img/npm-downloads.png)](https://npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nOur GitHub star trend is very positive, competing with major frameworks:\\n\\n[![GitHub stars: Docusaurus is well-positioned](./img/star-history.png)](https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline)\\n\\nToday, Docusaurus v2 has already been a great success even before its launch:\\n\\n- We received so many [lovely testimonials](https://twitter.com/sebastienlorber/timelines/1392048416872706049)\\n- Companies like [1Password](https://blog.1password.com/docusaurus-documentation-framework/) and [Courier](https://www.courier.com/blog/how-we-built-our-documentation/) are writing down their positive experience\\n- Our [site showcase](/showcase) references hundreds of sites, and this is only the tip of the iceberg.\\n\\n<ShowcaseCarouselV2 />\\n\\n<br />\\n\\n:::tip\\n\\nPlease add your site to our [site showcase](/showcase)! It only takes a few seconds: just [post a comment here](https://github.com/facebook/docusaurus/discussions/7826).\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/maxlynch/status/1549415692704825346\\"\\n handle=\\"maxlynch\\"\\n name=\\"Max Lynch\\"\\n job=\\"Ionic co-founder and CEO\\">\\n We use Docusaurus everywhere now and love it\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/supabase/status/1328960757149671425\\"\\n handle=\\"supabase\\"\\n name=\\"Supabase\\"\\n job=\\"Open Source Firebase alternative\\">\\n We\'ve been using V2 since January and it has been great\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/gabrielcsapo/status/1415061312917233665\\"\\n handle=\\"gabrielcsapo\\"\\n name=\\"Gabriel Csapo\\"\\n job=\\"Staff Software Engineer at LinkedIn\\">\\n Docusaurus is next level easy for literally everything you would need for\\n documentation in your project.\\n</TweetQuote>\\n\\n<TweetQuote\\n url=\\"https://twitter.com/ItWasMattGregg/status/1526682295075102721\\"\\n handle=\\"ItWasMattGregg\\"\\n name=\\"Matt Gregg\\"\\n job=\\"Senior Front End Developer at Shopify\\">\\n Docusaurus is awesome. We use it\\n</TweetQuote>\\n\\n## What\'s New in 2.0?\\n\\nIt would be difficult to describe every single new feature coming with Docusaurus v2. Let\'s focus on the features we believe are the **most impactful**.\\n\\n### MDX\\n\\n[MDX](https://github.com/mdx-js/mdx) allows you to **interleave React components** in Markdown. This enables you to build top-notch **interactive documentation experiences** very easily.\\n\\nA demo is worth a thousand words:\\n\\n```md title=\\"docs/my-document.mdx\\"\\n### Give it a try: press that button!\\n\\nimport ColorModeToggle from \'@theme/ColorModeToggle\';\\n\\n<ColorModeToggle/>\\n```\\n\\n```mdx-code-block\\n<BrowserWindow>\\n\\n<h3>Give it a try: press that button!</h3>\\n\\n<ColorModeToggle/>\\n\\n</BrowserWindow>\\n```\\n\\n:::info\\n\\nMDX has its own [plugin system](https://mdxjs.com/docs/extending-mdx/). You to customize your Markdown authoring experience, and even create your own Markdown syntax.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/HamelHusain/status/1551962275250053123\\"\\n handle=\\"HamelHusain\\"\\n name=\\"Hamel Husain\\"\\n job=\\"Head Of Data Science at Outerbounds\\">\\n Docusaurus + MDX is great: we were able to implement a beautiful two-pane\\n layout and give the author fine-grained control on the placement of code and\\n corresponding prose.\\n</TweetQuote>\\n\\n### File system conventions\\n\\nOur goal is to make Docusaurus very **intuitive** to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.\\n\\n<LiteYouTubeEmbed\\n id=\\"T3S8GyFIXjo\\"\\n params=\\"autoplay=1&autohide=1&showinfo=0&rel=0\\"\\n title=\\"Explain Like I\'m 5: Docusaurus\\"\\n poster=\\"maxresdefault\\"\\n webp\\n/>\\n\\n<br />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/paularmstrong/status/1552005085168865281\\"\\n handle=\\"paularmstrong\\"\\n name=\\"Paul Armstrong\\"\\n job=\\"Principal Engineer at Microsoft\\">\\n Using the auto-generated sidebars makes it so simple to just create a page and\\n not worry about any other configuration.\\n</TweetQuote>\\n\\n### Plugins\\n\\nDocusaurus now has a **modular architecture** with a plugin system \u2014 our **core features** like docs, blog, pages, and search are all powered by individual plugins.\\n\\nMore importantly, it enables our community to **enhance Docusaurus** with additional features.\\n\\nLet\'s highlight some examples:\\n\\n- [redocusaurus](https://github.com/rohit-gohri/redocusaurus): seamless integration with [OpenAPI](https://www.openapis.org/) and [Redoc](https://github.com/Redocly/redoc)\\n\\n![redocusaurus plugin example](./img/plugins/redocusaurus.png)\\n\\n- [docusaurus-preset-shiki-twoslash](https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash): use [Shiki](https://github.com/shikijs/shiki) code block syntax highlighting with [TwoSlash](https://shikijs.github.io/twoslash/) TypeScript compiler hints\\n\\n![shiki-twoslash plugin example](./img/plugins/shiki-twoslash.png)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/orta\\"\\n handle=\\"orta\\"\\n name=\\"Orta Therox\\"\\n job=\\"Former TypeScript core team at Microsoft\\">\\n The plugin API was a breeze to use, and powerful enough that I could port the\\n code sample renderer from the TypeScript website site in a couple of hours.\\n</TweetQuote>\\n\\n- [docusaurus-search-local](https://github.com/easyops-cn/docusaurus-search-local): one of the various local search alternatives to the built-in Algolia plugin\\n\\n![local search plugin example](./img/plugins/search.png)\\n\\n:::tip\\n\\nWe have a curated list of outstanding plugins in our [community resources](/community/resources) page.\\n\\n:::\\n\\n<TweetQuote\\n url=\\"https://twitter.com/jodyheavener/status/1551974535452311552\\"\\n handle=\\"jodyheavener\\"\\n name=\\"Jody Heavener\\"\\n job=\\"Senior Developer at 1Password\\">\\n The plugin system in Docusaurus v2 has made expanding 1Password\'s developer\\n portal so easy and fun. Super excited to show you what we\'ve got cooking up.\\n</TweetQuote>\\n\\n### Theming\\n\\nTheming is one of the most important features of Docusaurus: we believe a professional documentation site should **respect your company\'s branding** and create a consistent experience.\\n\\nDocusaurus theming gives a lot of **flexibility** on multiple levels:\\n\\n- Customize CSS variables to adjust colors, fonts, and more\\n- Provide your own CSS stylesheets\\n- Implement your own theme from scratch\\n- **Override any React component** provided by our default theme: we call this [swizzling](https://docusaurus.io/docs/swizzling)\\n\\n<TweetQuote\\n url=\\"https://twitter.com/hung_dev/status/1546918275065741312\\"\\n handle=\\"hung_dev\\"\\n name=\\"\\nHung Viet Nguyen\\"\\n job=\\"Creator of JestPreview\\">\\n I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\\n time. This is super cool since a framework usually needs to sacrifice one for\\n the other.\\n</TweetQuote>\\n\\nThis enables users willing to invest a bit more time on **customizations** to build sites that **look different** from others.\\n\\n<ShowcaseCarouselV2Theming />\\n\\n<TweetQuote\\n url=\\"https://twitter.com/dabit3/status/1382855449813389315\\"\\n handle=\\"dabit3\\"\\n name=\\"Nader Dabit\\"\\n job=\\"Web3 developer, Developer DAO founder\\">\\n So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\\n way that we wanted it to look. No blockers at all.\\n</TweetQuote>\\n\\n### Other features\\n\\nDocusaurus 2 comes with a very long list of useful features:\\n\\n- Theme: dark mode, better UI and UX, flexible `themeConfig` options...\\n- Docs versioning: flexible plugin options to adapt to your workflow\\n- Docs sidebar: collapsible category, category index pages...\\n- Blog: multiple authors, authors map, archive page...\\n- Markdown: tabs, math equations, live code blocks, linking, flexible front matter...\\n- Search: use the new Algolia DocSearch 3 experience\\n- Assets: make it easy to incorporate images and other kinds of files\\n- Internationalization: config options, default theme translations...\\n- Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...\\n- SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...\\n- PWA: add offline support to your site, and make it installable\\n- Fail-fast: strict config validation, detect broken links, and prevent bad production deployments\\n- TypeScript support for config files, plugins, custom pages and theme authors\\n- Playgrounds: assess Docusaurus easily from your browser with [docusaurus.new](https://docusaurus.new)\\n- Canary releases: use the @canary npm tag to use the upcoming release before anyone else\\n- Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working\\n\\n<TweetQuote\\n url=\\"https://twitter.com/alexbdebrie/status/1540010328335032320\\"\\n handle=\\"alexbdebrie\\"\\n name=\\"Alex DeBrie\\"\\n job=\\"AWS Data Hero, author of The DynamoDB Book\\">\\n Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\\n a good bit of configuration without being overwhelming, and the ability to\\n really customize the styling if you\'re braver than I am.\\n</TweetQuote>\\n\\n## Why 2.0 now?\\n\\nMany enthusiastic followers of ours have been curious **why it took us 4 years to release Docusaurus 2.0**, considering the beta is already successful and **widely used in production**.\\n\\nThe reason is that we aim to **respect [Semantic Versioning](https://semver.org/)**, which means we will be incrementing the major version number whenever we release a **breaking change**.\\n\\nIt is important for multiple reasons:\\n\\n- It **guarantees simple minor version upgrades**, as long as you only use the [public API](/community/release-process#public-api-surface)\\n- It follows front-end ecosystem conventions\\n- A new major version is an opportunity to thoroughly document breaking changes\\n- A new major/minor version is an opportunity to communicate new features through a blog post\\n\\nThe problem is that our flexible theming system inherently creates a very **implicit API surface** on which it is **hard to know what is a breaking change** in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our [public API](/community/release-process#public-api-surface), so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.\\n\\n:::info\\n\\nFrom now on, Docusaurus will **release new major versions more frequently**. In practice, you can expect a **new major version every 2 to 4 months**.\\n\\n[Major version numbers are not sacred](https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html), but we still group breaking changes together and avoid releasing major versions too often.\\n\\nCheck our [release process](/community/release-process) documentation for details.\\n\\n:::\\n\\n## What\'s Next?\\n\\n![Slash Up and Running](/img/slash-up-and-running.png)\\n\\nThe work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will **backport retro-compatible changes in Docusaurus 2.x** minor versions to make them available as soon as possible to the community on a stable channel.\\n\\nA sample of the features on our roadmap for the upcoming major versions of Docusaurus:\\n\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- [Improve Markdown infrastructure](https://github.com/facebook/docusaurus/issues/4625)\\n- [Improve theming and swizzle](https://github.com/facebook/docusaurus/issues/6114)\\n- [TailwindCSS theme](https://github.com/facebook/docusaurus/issues/2961)\\n- [Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer](https://github.com/facebook/docusaurus/issues/7227)\\n- [Dynamic navbar: navbar item activation strategies](https://github.com/facebook/docusaurus/issues/4389)\\n- [Custom Social Cards](https://github.com/facebook/docusaurus/issues/2968)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Use Node.js ES Modules](https://github.com/facebook/docusaurus/issues/6520)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n\\n## Thank You\\n\\nWe\'d like to express our gratitude to [all our contributors](https://github.com/facebook/docusaurus/graphs/contributors), including:\\n\\n- The Docusaurus core team: [Alexey Pyltsyn](https://github.com/lex111), [Joshua Chen](https://github.com/Josh-Cena), [S\xe9bastien Lorber](https://github.com/slorber), [Yangshun Tay](https://github.com/yangshun) and all our [former team members](https://docusaurus.io/community/team)\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source\\n- [Paul O\u2019Shannessy](https://github.com/zpao) for supporting the development of all the next versions of Docusaurus at Meta Open Source\\n- [Eric Nakagawa](https://github.com/ericnakagawa) for creating our cutest mascot Slash\\n- [Endilie Yacop Sucipto](https://github.com/endiliey) for his significant [initial work on Docusaurus v2](/blog/2020/01-07-tribute-to-endi.mdx)\\n- [Cl\xe9ment Vannicatte](https://github.com/shortcuts), [Kevin Granger](https://github.com/Shipow) and the whole Algolia team for their support\\n- All the community members for making valuable code contributions, improving our documentation, and answering questions on [Discord](https://discordapp.com/invite/docusaurus)\\n\\nWe\'d like to thank in particular all our **Docusaurus 2.0 early adopters** for assessing its alpha, beta and canary releases, providing a ton of **invaluable feedback**. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.\\n\\nAt [Meta Open Source](https://opensource.fb.com/), Docusaurus is one of our **most successful projects**. We can\'t wait to see all the outstanding documentation websites that you will create! Don\'t forget to **submit them to our [site showcase](/showcase)**!\\n\\n**Now, let your imagination run wild \ud83e\udd2a!**\\n\\n\u2014 Slash\\n\\n:::info We are on [ProductHunt](https://www.producthunt.com/posts/docusaurus-2-0) and [Hacker News](https://news.ycombinator.com/item?id=32303052)!\\n\\n\ud83d\ude4f Share your experience using Docusaurus with the community!\\n\\n<div style={{display: \'flex\'}}>\\n <ProductHuntCard />\\n <HackerNewsIcon />\\n</div>\\n\\n:::\\n\\n![Slash plushies](./img/slash-plushies.jpg)"},{"id":"/2022/01/24/docusaurus-2021-recap","metadata":{"permalink":"/blog/2022/01/24/docusaurus-2021-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx","source":"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx","title":"Docusaurus 2021 Recap","description":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed 30k stars on GitHub!","date":"2022-01-24T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":6.01,"hasTruncateMarker":true,"authors":[{"name":"Joshua Chen","title":"Working hard on Docusaurus","url":"https://joshcena.com/","email":"sidachen2003@gmail.com","imageURL":"https://github.com/josh-cena.png","key":"Josh-Cena"}],"frontMatter":{"title":"Docusaurus 2021 Recap","authors":["Josh-Cena"],"tags":["recap"],"image":"./img/thumbnail.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0"},"nextItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"}},"content":"Docusaurus has made great progress in 2021! We\'ve seen a lot of traction and just crossed **30k stars on GitHub**!\\n\\nWe\'ve **reached full feature parity** with v1 after [the release of internationalization](/blog/2021/03-09-releasing-docusaurus-i18n.mdx), [announced our **first beta**](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx), and welcomed **significantly more users** this year.\\n\\nThe **official v2 release** is just around the corner! Follow the [roadmap issue](https://github.com/facebook/docusaurus/issues/6113) for any latest news.\\n\\n![](./img/thumbnail.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Highlights\\n\\nLet\'s begin by going over a few highlights this year. Remember the [todo-list](/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx#whats-next) from half a year ago? Time to take it out again and see how far we\'ve come!\\n\\n- **Internationalization**: officially released four months after its initial landing in late 2020. Seen great success in [many projects](/showcase?tags=i18n)\\n- **Autogenerated sidebars**: no need to maintain a big `sidebars.js` anymore\\n- **Webpack 5**: significantly improved build performance\\n- **Trailing slash config**: seamless integration with any content hosting provider\\n- **Redesigned mobile navigation**: mobile users now enjoy all navigation features as on desktop\\n- **UI improvements**: more accessible quotes, better admonitions, back-to-top button...\\n- **Blog multi-authors**: credit all the amazing contributors that collaborated on one blog post!\\n- **More blog features**: archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time\\n- **Asset collocation**: no need for a bloated static folder anymore: colocate your images with Markdown files\\n- **Sidebar category index pages**: category labels can now be associated with pages, enabling better doc organization\\n\\nOur codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!\\n\\n## Trends\\n\\n### npm\\n\\nDocusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.\\n\\n[![Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There\'s a sharp drop from 90000 to 40000 just before the Jan 2022 line.](./img/npm-trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\n(Ah, the classic Christmas dip...)\\n\\nWe released 18 versions, going from `2.0.0-alpha.71` to `2.0.0-beta.14`. That\'s one release every 20 days!\\n\\n### GitHub\\n\\n- **Stars**: 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!\\n- **Total contributors**: 512 \u2192 773 (+51.0% y/y)\\n- **Dependents**: 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1\\n- **Commits**: 1,187 commits in the past year, averaging 23 commits every week\\n- **Issues**: 619 issues opened, 505 of them eventually resolved\\n- A [**new core team member**](https://github.com/Josh-Cena) (yep, that\'s me \ud83d\ude1d)\\n\\nOur star trend is also very positive. Compared to similar projects, we are **growing at a faster rate**:\\n\\n![Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.](./img/star-history.png)\\n\\nWith an 8.4k increase in stars, we are ranked number 3 in this year\'s [JavaScript rising stars of static site generators](https://risingstars.js.org/2021/en#section-ssg), preceded only by Next.js and Astro.\\n\\n![Docusaurus placing 3rd in the \\"Static Sites\\" ranking list](./img/rising-stars.png)\\n\\n## Featured adoptions\\n\\nOur showcase has welcomed a few new [\\"favorite\\" sites](/showcase?tags=favorite) that showcase the true potential of Docusaurus 2\'s pluggable architecture.\\n\\n- [**IOTA-wiki**](https://wiki.iota.org/)\\n\\n![Iota wiki light mode](./img/iota-light.png#gh-light-mode-only)![Iota wiki dark mode](./img/iota-dark.png#gh-dark-mode-only)\\n\\n- [**Dyte**](https://docs.dyte.io/docs/home/introduction/)\\n\\n![Dyte light mode](./img/dyte-light.png#gh-light-mode-only)![Dyte dark mode](./img/dyte-dark.png#gh-dark-mode-only)\\n\\n- [**Ionic**](https://ionicframework.com/docs)\\n\\n![Ionic light mode](./img/ionic-light.png#gh-light-mode-only)![Ionic dark mode](./img/ionic-dark.png#gh-dark-mode-only)\\n\\n- [**Courier**](https://www.courier.com/docs/)\\n\\n![Courier](./img/courier.png)\\n\\nThe creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to [have it in our showcase](https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx).\\n\\n## Community\\n\\nAs an active moderator on [Discord](https://discord.gg/docusaurus), I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer.\\n\\nWe are constantly mentioned on Twitter with inspirational feedback:\\n\\n> **@docusaurus** is amazing! cant believe it\'s THAT simple to use.\\n\\n> No extra plugins, tooling or compilation steps. It just works out of the box.\\n\\n> I love **@docusaurus**. I couldn\'t have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.\\n\\nAnd we keep every one of them in [our little box](https://twitter.com/sebastienlorber/timelines/1392048416872706049) \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!\\n\\nAs we approach the official release, we are interested in knowing more about what people are doing out there: [plugin authors](https://github.com/facebook/docusaurus/discussions/4025), [creators of customized sites](https://github.com/facebook/docusaurus/discussions/5468), and [all new users](https://github.com/facebook/docusaurus/discussions/4610) \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs.\\n\\n## Going forward\\n\\nIn the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it\'s almost there. We have created a dedicated [milestone](https://github.com/facebook/docusaurus/milestone/15) to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a **more robust theming workflow**, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:\\n\\n- Guidelines on **component organization**. We want the theme components to have the right granularity so when you want to customize a part of your site, there\'s always a component doing just what you need.\\n- Improvements to the **swizzle CLI**. We want users to use it with delight and let it aid you through all possible swizzling scenarios.\\n- Refactoring our **theme APIs**. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.\\n- **Docs**. We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.\\n\\nRead more about plans for Docusaurus 2.0 in this [roadmap issue](https://github.com/facebook/docusaurus/issues/6113). 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!\\n\\nAs the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for [architectural changes in 3.0](https://github.com/facebook/docusaurus/milestone/16)!\\n\\nWith the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.\\n\\nWe\'d like to express our gratitude to [all the contributors in 2021](https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c), including:\\n\\n- The core team: [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://github.com/slorber), [Joshua Chen](https://github.com/Josh-Cena), and [Yangshun Tay](https://github.com/yangshun) for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting its development all along\\n- The Algolia team for helping Docusaurus users [migrate to the new DocSearch](/blog/2021/11-21-algolia-docsearch-migration/index.mdx) and answering search-related questions\\n- All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord\\n\\nSo long, 2021, and let\'s greet a great 2022!"},{"id":"/2021/11/21/algolia-docsearch-migration","metadata":{"permalink":"/blog/2021/11/21/algolia-docsearch-migration","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/11-21-algolia-docsearch-migration/index.mdx","source":"@site/blog/2021/11-21-algolia-docsearch-migration/index.mdx","title":"DocSearch migration","description":"DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.","date":"2021-11-21T00:00:00.000Z","tags":[{"label":"search","permalink":"/blog/tags/search"}],"readingTime":2.96,"hasTruncateMarker":true,"authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","image_url":"https://github.com/shortcuts.png","twitter":"sh0rtcts","imageURL":"https://github.com/shortcuts.png"},{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"DocSearch migration","authors":[{"name":"Cl\xe9ment Vannicatte","title":"Software Engineer @ Algolia","url":"https://github.com/shortcuts","image_url":"https://github.com/shortcuts.png","twitter":"sh0rtcts","imageURL":"https://github.com/shortcuts.png"},{"key":"slorber"}],"tags":["search"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap"},"nextItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"}},"content":"[DocSearch](https://docsearch.algolia.com/) is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.\\n\\nDocusaurus site owners should upgrade their configuration with their new credentials **by February 1, 2022**, existing search indexes will be frozen and become read-only after this date.\\n\\n\x3c!--truncate--\x3e\\n\\n## Upgrading your Docusaurus site\\n\\nIn the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.\\n\\nThis email will include a new `appId` and `apiKey` to use in your Docusaurus configuration.\\n\\nThe only things you have to do:\\n\\n- Join the Algolia application (eventually creating a new Algolia account)\\n- Update your site configuration.\\n\\n```js title=\\"docusaurus.config.js\\"\\nconst config = {\\n themeConfig: {\\n algolia: {\\n // highlight-start\\n appId: \'<NEW_APP_ID>\',\\n apiKey: \'<NEW_SEARCH_API_KEY>\',\\n // highlight-end\\n },\\n },\\n};\\n\\nmodule.exports = config;\\n```\\n\\n:::info\\n\\n`appId` is now **required**.\\n\\nThese keys are not secrets and can be added to your Git repository.\\n\\n:::\\n\\n## DocSearch has a new home!\\n\\n### What is DocSearch?\\n\\n[DocSearch](https://docsearch.algolia.com/) is a program created by [Algolia](http://algolia.com/), which offers search to technical documentation of Open Source projects and technical blogs **for free**.\\n\\nYou can [read more here](https://docsearch.algolia.com/docs/what-is-docsearch/), and [apply](https://docsearch.algolia.com/apply) if you\'d like to give it a try!\\n\\n## What is this migration about?\\n\\n### Motivation\\n\\nWith the upcoming stable release of [DocSearch UI](https://docsearch.algolia.com/docs/DocSearch-v3), we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.\\n\\n### What\'s new?\\n\\nDocSearch now leverages the [Algolia Crawler](https://www.algolia.com/products/search-and-discovery/crawler/), which includes a web interface that will allow you to:\\n\\n- Start, schedule and monitor your crawls\\n- Edit your config file from a live editor\\n- Test your results with DocSearch v3\\n\\n![The Algolia crawler front page showing the project\'s overview, such as last complete crawl and indices](./img/crawler-overview.png)\\n\\n![The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.](./img/editor.png)\\n\\nBut also, more Algolia features in **your own Algolia app**:\\n\\n- Team management\\n- Browse and see how your records are indexed in Algolia\\n- Try other Algolia features with free trials\\n\\n![The Algolia index overview page, showing various filters and the details of every single index](./img/index-overview.png)\\n\\n![The Algolia index analytics page, showing trends for total users, total searches, etc.](./img/index-analytics.png)\\n\\nAnd of course, **a lot more, for free**.\\n\\n## FAQ\\n\\n### I\'m using Docusaurus and DocSearch, can I migrate? {#im-using-docusaurus-and-docsearch-can-i-migrate}\\n\\nAt the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you\'ll be contacted as soon as your Algolia app is ready!\\n\\n### Where can I read more about this?\\n\\nWe wrote a small [migration guide](https://docsearch.algolia.com/docs/migrating-from-legacy) but you\'ll have more detailed information in the migration email.\\n\\n### I received the migration email but the invite expired\\n\\nPlease contact us via either [email](mailto:docsearch@algolia.com) or [DocSearch\'s Discord](https://discord.gg/bRTacwYrfX) or on [Docusaurus\'s Discord #algolia channel](https://discordapp.com/invite/docusaurus)\\n\\n### I have feedback!\\n\\nFor any feedback regarding our documentation or the DocSearch UI component, you can open an issue [on our GitHub repository](https://github.com/algolia/docsearch/issues), but also contact us via the methods above.\\n\\n### Can I still run my own DocSearch instance?\\n\\nIn favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved [DocSearch scraper](https://github.com/algolia/docsearch-scraper) and [DocSearch v2](https://github.com/algolia/docsearch/tree/master), but the repositories will still be available and open to pull requests.\\n\\nThe previous documentation (now called `legacy`) remains available as well as our [`run your own`](https://docsearch.algolia.com/docs/legacy/run-your-own) guide."},{"id":"/2021/05/12/announcing-docusaurus-two-beta","metadata":{"permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","source":"@site/blog/2021/05-12-announcing-docusaurus-two-beta/index.mdx","title":"Announcing Docusaurus 2 Beta","description":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.","date":"2021-05-12T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"},{"label":"beta","permalink":"/blog/tags/beta"}],"readingTime":3.52,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"./img/slorber.png","key":"slorber","image_url":"./img/slorber.png"},{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"},{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"},{"name":"Alexey Pyltsyn","title":"Open-source enthusiast","url":"https://github.com/lex111","email":"lex@php.net","imageURL":"https://github.com/lex111.png","key":"lex111"}],"frontMatter":{"title":"Announcing Docusaurus 2 Beta","authors":[{"key":"slorber","image_url":"./img/slorber.png","imageURL":"./img/slorber.png"},"JMarcey","yangshun","lex111"],"tags":["release","beta"],"image":"./img/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration"},"nextItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"}},"content":"After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first **[Docusaurus 2 beta](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.0)**.\\n\\nWith the announcement of this beta, the team is even more confident that Docusaurus 2 is **ready for mainstream adoption**!\\n\\n![](./img/image_cropped.png)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus adoption\\n\\n**Don\'t fear the beta tag!**\\n\\nDocusaurus 2 is widely adopted and growing fast:\\n\\n[![Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.](./img/trend.png)](https://www.npmtrends.com/docusaurus-vs-@docusaurus/core)\\n\\nTo get a fuller understanding of the quality of current Docusaurus 2 sites, our new [showcase](https://docusaurus.io/showcase) page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!\\n\\nDon\'t miss our [favorite](https://docusaurus.io/showcase?tags=favorite) sites; they all stand out with something unique:\\n\\n[![A screenshot of the showcase\'s favorites section, with 12 cards each displaying the information and preview of one site](./img/favorites.png)](https://docusaurus.io/showcase?tags=favorite)\\n\\n## Why was Docusaurus v2 in alpha for so long?\\n\\nIt\'s hard to believe that the first alpha release [v2.0.0-alpha.0](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.0) was 2 years ago \ud83d\ude33 , unusually long for a software alpha.\\n\\nAs this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached **feature parity** with Docusaurus 1 with **[i18n](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n)**, and it has been **successfully adopted** by many Docusaurus sites (see [i18n showcase](https://docusaurus.io/showcase?tags=i18n)).\\n\\nWe\'re now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.\\n\\n## What are the goals of the beta?\\n\\nNow that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.\\n\\nIn addition, we will use the beta phase to **improve our theming system**.\\n\\nWe want to make it:\\n\\n- **easier to implement a custom theme**, including for ourselves. We want to provide [multiple official themes](https://github.com/facebook/docusaurus/issues/3522) (including [Tailwind CSS](https://github.com/facebook/docusaurus/issues/2961)) for a long time.\\n\\n- **safer to extend an existing theme**: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.\\n\\nWe will build a better **theming infrastructure** and refactor the classic theme to use it.\\n\\nIf you customize your site, you may find these planned improvements quite valuable.\\n\\n## What\'s new?\\n\\nIn case you missed it, we recently shipped two major improvements:\\n\\n- [Auto-generated sidebars](https://docusaurus.io/docs/sidebar#sidebar-item-autogenerated): no need to maintain a `sidebars.js` file anymore!\\n- [Webpack 5 / PostCSS 8](https://github.com/facebook/docusaurus/issues/4027): persistent caching significantly speeds up **rebuild time**!\\n\\n## What\'s next?\\n\\nShipping the official 2.0 release!\\n\\nTo get there, we will continue to **fix bugs** and implement the **most wanted features**, including:\\n\\n- [Sidebar category index pages](https://github.com/facebook/docusaurus/issues/2643)\\n- [Better mobile navigation UX](https://github.com/facebook/docusaurus/issues/2220)\\n- [Better admonition design](https://github.com/facebookincubator/infima/issues/55)\\n- [CSS-in-JS support](https://github.com/facebook/docusaurus/issues/3236)\\n- [Improve build time performance](https://github.com/facebook/docusaurus/issues/4765)\\n- [Extend Docusaurus plugins, CMS integration](https://github.com/facebook/docusaurus/issues/4138)\\n- [Fix trailing slashes and relative link issues](https://github.com/facebook/docusaurus/issues/3372)\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018)\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n\\n## Conclusion\\n\\nThis is an exciting time for Docusaurus.\\n\\nWe are inspired by the [positive feedback](https://twitter.com/sebastienlorber/timelines/1392048416872706049) about Docusaurus, and discover new sites online every single day.\\n\\nWe are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.\\n\\nThank you to everyone for reading and to the entire community who supports Docusaurus. \ud83e\udd17"},{"id":"/2021/03/09/releasing-docusaurus-i18n","metadata":{"permalink":"/blog/2021/03/09/releasing-docusaurus-i18n","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx","source":"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx","title":"Releasing Docusaurus i18n","description":"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.","date":"2021-03-09T00:00:00.000Z","tags":[{"label":"release","permalink":"/blog/tags/release"},{"label":"i18n","permalink":"/blog/tags/i-18-n"}],"readingTime":3.445,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Releasing Docusaurus i18n","authors":["slorber"],"tags":["release","i18n"],"image":"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta"},"nextItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"}},"content":"Today, we officially release **[Docusaurus 2 i18n](https://docusaurus.io/docs/i18n/introduction)** ([internationalization](https://en.wikipedia.org/wiki/Internationalization_and_localization)), as part of [2.0.0-alpha.71](https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71).\\n\\nDocusaurus 2 has now reached **full feature parity with Docusaurus 1**. \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the **first Docusaurus 2 beta** will be released.\\n\\n**We went the extra mile**, and the new i18n support is **even better than in Docusaurus 1**.\\n\\nIn this post, we will present you the **translation workflow**, explain some **design decisions** and **showcase early adopter sites** that just went live: [Jest](https://jestjs.io/), [Redwood](https://learn.redwoodjs.com/), and [Datagit](https://datagit.ir/).\\n\\nWe also **dogfood** the i18n support on the **Docusaurus 2 site itself**, and this post is already available in [English](https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n) and [French](https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n)!\\n\\n\x3c!--truncate--\x3e\\n\\n## Translate your site\\n\\nYou can translate a Docusaurus site in **3 simple steps**:\\n\\n1. **Configure**: declare the default locale and alternative locales in `docusaurus.config.js`\\n1. **Translate**: put the translation files at the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n1. **Deploy**: build and deploy your site using a single or multi-domain strategy\\n\\nThe i18n support is **very flexible** and based on the **filesystem**.\\n\\nThe **[i18n tutorial](https://docusaurus.io/docs/i18n/tutorial)** is the best way to get started, and we provide help to use **[Git](https://docusaurus.io/docs/i18n/git)** or **[Crowdin](https://docusaurus.io/docs/i18n/crowdin)**.\\n\\n## Design decisions\\n\\nThe goals of the Docusaurus i18n system are:\\n\\n- **Simple**: just put the translated files in the [correct filesystem location](https://docusaurus.io/docs/next/i18n/introduction#translation-files-location)\\n- **Flexible translation workflows**: use Git (monorepo, forks, or submodules), SaaS software, FTP\\n- **Flexible deployment options**: single, multiple domains, or hybrid\\n- **Modular**: allow plugin authors to provide i18n support\\n- **Low-overhead runtime**: documentation is mostly static and does not require a heavy JS library or polyfills\\n- **Scalable build-times**: allow building and deploying localized sites independently\\n- **Localize assets**: an image of your site might contain text that should be translated\\n- **No coupling**: not forced to use any SaaS, yet integrations are possible\\n- **Easy to use with [Crowdin](https://crowdin.com/)**: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2\\n- **Good SEO defaults**: we set useful SEO headers like [`hreflang`](https://developers.google.com/search/docs/advanced/crawling/localized-versions) for you\\n- **RTL support**: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement\\n- **Default translations**: classic theme labels are translated for you in [many languages](https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales)\\n\\n## Showcase\\n\\nWe worked with a few volunteers to **dogfood the i18n support** before releasing it.\\n\\n### Jest: upgrading Docusaurus\\n\\nWe have made it possible to **upgrade** a **translated Docusaurus 1 site** to Docusaurus 2.\\n\\n**[Jest](https://jestjs.io)**, using Docusaurus 1 and Crowdin was one of those sites.\\n\\nThe Docusaurus 2 migration was successful and the new site is now deployed in production ([announcement post](https://jestjs.io/blog/2021/03/09/jest-website-upgrade)).\\n\\n[![Jest\'s website front page in Japanese](/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png)](https://jestjs.io)\\n\\n### Redwood: adopting Docusaurus\\n\\n[Redwood](https://redwoodjs.com/) is a React full-stack Jamstack framework.\\n\\nThey were looking for a solution to create an **internationalized learning platform**, and became early adopters of Docusaurus 2 i18n for [learn.redwoodjs.com](https://learn.redwoodjs.com/), using Crowdin to get it translated to French.\\n\\n[![Redwood\'s doc page in French](/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png)](https://learn.redwoodjs.com/)\\n\\n### Datagit: using LTR support\\n\\nThe i18n system should work with any language, including **Right-to-Left languages**.\\n\\n[Datagit.ir](https://datagit.ir/) is using Farsi, and a simple configuration option is able to **flip the Docusaurus theme** to add the required Right-to-Left support.\\n\\n[![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png)](https://datagit.ir/)\\n\\n## Conclusion\\n\\nWe sincerely hope you will adopt and like the new i18n support.\\n\\nThis feature has not been an easy one, and we would like to thank everyone that got involved in this journey:\\n\\n- [Alexey](https://github.com/lex111) for his help to make the i18n support exhaustive and even better than v1\\n- [Simen](https://github.com/SimenB) for volunteering and supporting the Jest migration\\n- [Claire](https://github.com/clairefro) for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks\\n- [Massoud](https://github.com/massoudmaboudi) for reviewing my work on LTR and adopting it on Datagit\\n- [Crowdin](https://crowdin.com/) for their support and willingness to improve their translation SaaS\\n- The Docusaurus community for their patience, and providing many useful feedbacks on GitHub\\n\\nThanks for reading.\\n\\n\ud83d\ude4f And please, add your brand new i18n sites to our [showcase page](https://docusaurus.io/showcase). We accept any all polished Docusaurus site here, and we are working on a [redesign](https://github.com/facebook/docusaurus/issues/4238) allowing you to filter sites by features."},{"id":"/2021/01/19/docusaurus-2020-recap","metadata":{"permalink":"/blog/2021/01/19/docusaurus-2020-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/01-19-docusaurus-2020-recap.mdx","source":"@site/blog/2021/01-19-docusaurus-2020-recap.mdx","title":"Docusaurus 2020 Recap","description":"2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.","date":"2021-01-19T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":5.04,"hasTruncateMarker":true,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer, This Week In React editor","url":"https://thisweekinreact.com","twitter":"sebastienlorber","email":"sebastien@thisweekinreact.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"title":"Docusaurus 2020 Recap","authors":["slorber"],"tags":["recap"],"image":"/img/docusaurus-2020-recap.png"},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n"},"nextItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"}},"content":"**2020 was great for Docusaurus**, despite [a regrettable start](https://docusaurus.io/blog/2020/01/07/tribute-to-endi) and a tumultuous year for everyone.\\n\\nWe continued to invest in [Docusaurus 2](https://docusaurus.io/), and made it reach **full feature parity** with [Docusaurus 1](https://v1.docusaurus.io/).\\n\\nWe now **recommend Docusaurus 2** as the **default choice** to start a new Docusaurus project and encourage v1 users to [migrate to Docusaurus 2](https://docusaurus.io/docs/migration).\\n\\nWe are **still in alpha**, but expect **some good news very soon**!\\n\\n![Three Docusaurus plushies laid side-by-side on the table](/img/blog/2020-recap/docusaurus-plushie-banner.jpeg)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 highlights\\n\\nWe have worked on many features this year, and would like to highlight the most significant ones:\\n\\n- **i18n**: easily translate your Docusaurus site, released soon! ([preview](https://github.com/facebook/docusaurus/pull/3325), [doc](https://docusaurus.io/docs/next/i18n/introduction))\\n- **Version dropdown**: enable contextual version switch\\n- **Versioning options**: solving the most common pain-points users had with versioning\\n- **Contextual search**: search in the current version, use the brand-new DocSearch 3 experience\\n- **Markdown pages**: use Markdown instead of React components to create standalone pages\\n- **Better theme**: various UI, UX and accessibility improvements\\n- **PWA**: add offline support to your site, and make it installable\\n- **Fail-fast**: strict config validation, detect broken links, and prevent bad production deployments\\n- **Multi-instance**: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)\\n- **Migration CLI**: automate the upgrade from Docusaurus 1\\n- **CodeSandbox**: assess Docusaurus easily from your browser with [new.docusaurus.io](https://new.docusaurus.io/)\\n- **Canary releases**: use the `@canary` npm tag to use the upcoming release before anyone else\\n- **TypeScript**: progressive adoption for internal code, and improve usage for users\\n- **Publish Infima**: it is now [open-source](https://github.com/facebookincubator/infima)\\n\\n## Docusaurus 2 growth\\n\\nThe plan to [rebuild Docusaurus from scratch in 2019](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap) paid off: after a slow start, Docusaurus 2 has been widely adopted and has **already outgrown Docusaurus 1** usage.\\n\\n![Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.](/img/blog/2020-recap/docusaurus-npm-trends.png)\\n\\nNotable **projects, startups, large companies, and individuals** adopted Docusaurus 2 ([showcase](https://docusaurus.io/showcase)):\\n\\n- [Supabase](https://supabase.io)\\n- [React Navigation](https://reactnavigation.org)\\n- [React Redux](https://react-redux.js.org/)\\n- [Vector](https://vector.dev)\\n- [Algolia DocSearch](https://docsearch.algolia.com)\\n- [SAP Cloud SDK](https://sap.github.io/cloud-sdk)\\n- [Palo Alto Cortex XSOAR](https://xsoar.pan.dev)\\n- [Qudd\xfas George\'s website](https://portfoliosaurus.now.sh)\\n\\nWe helped **large scale Docusaurus 1 sites to upgrade**, ensuring a proper **migration path** and **feature parity**.\\n\\n[React Native](https://reactnative.dev/) was successfully upgraded to Docusaurus 2 ([archived v1 site](http://archive.reactnative.dev/)):\\n\\n![React Native\'s new website built with Docusaurus v2](/img/blog/2020-recap/react-native-screenshot.png)\\n\\nLocalized Docusaurus 1 sites (like **Jest**) will be able to upgrade too:\\n\\n![Jest\'s new website built with Docusaurus v2 in Japanese](/img/blog/2020-recap/jest-screenshot.png)\\n\\nWe also saw the **[first right-to-left](https://datagit.ir/)** Docusaurus 2 site published:\\n\\n![Datagit\'s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.](/img/blog/2020-recap/datagit-rtl-screenshot.png)\\n\\n## GitHub Activity\\n\\n- **Stars**: 14632 \u2192 20946 (+43.2% y/y)\\n- **Total Contributors**: 303 \u2192 512 (+68.9% y/y). Most of which are non-Facebook contributors\\n- **Weekly npm Downloads**: 2356 \u2192 25592 (+986% y/y)\\n- **On GitHub**, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)\\n\\n## Collaboration with Major League Hacking\\n\\nWe have welcomed [Major League Hacking](https://mlh.io/) (MLH) fellows for 2 seasons already.\\n\\nWe are very thankful for the **various contributions** they made, such as:\\n\\n- Writing the foundations of the v1 to v2 migration CLI\\n- Help migrate the React Native website from v1 to v2\\n- Making the config validation more strict and exhaustive, returning helpful error messages\\n- Adding CodeSandbox support\\n- Improving the CI pipelines: build size and Lighthouse bots\\n\\nWe look forward to continuing this collaboration in 2021.\\n\\n## Media\\n\\nDmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in [60 seconds](https://www.youtube.com/watch?v=_An9EsKPhp0) or [15min](https://www.youtube.com/watch?v=Yhyx7otSksg) videos.\\n\\nRachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in [React Native Radio 178 (podcast)](https://reactnativeradio.com/episodes/178-documenting-react-native-with-rachel-nabors-gWxwySPl), and William Candillon the [React Native website migration (video)](https://www.youtube.com/watch?v=-zhjq2ECKq4).\\n\\nMany blog posts have been published:\\n\\n- [To the Makers of Docusaurus](https://portfoliosaurus.now.sh/blog/toTheMakers) by Quddus George\\n- [Richer API documentation with Redoc and Docusaurus](https://davidgoss.co/blog/api-documentation-redoc-docusaurus/) by David Goss\\n- [How to Build a Plugin for Docusaurus v2](https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/) by Adriaan Knapen\\n- [React Tracked Documentation Website with Docusaurus v2](https://blog.axlight.com/posts/react-tracked-documentation-website-with-docusaurus-v2/) by Daishi Kato\\n- [Easy documentation with Docusaurus](https://blog.logrocket.com/easy-documentation-with-docusaurus/) by Anshul Goyal (MLH fellow)\\n- [Build Beautiful Documentation Websites with Docusaurus](https://lo-victoria.com/build-beautiful-documentation-websites-with-docusaurus) by Victoria Lo\\n\\n## Community\\n\\nThe Docusaurus community continues to grow, the [Discord](https://discord.gg/docusaurus) server is quite active, and [Stack Overflow questions](https://stackoverflow.com/questions/tagged/docusaurus) keep being posted.\\n\\nThe **modular architecture** of Docusaurus 2 allowed the community to build and publish [third-party plugins](https://docusaurus.io/community/resources#community-plugins-). As we would like to federate better our community, if you are building a plugin, please [let us know](https://github.com/facebook/docusaurus/discussions/4025).\\n\\n## What\'s next?\\n\\nAs the **core features of Docusaurus 2** have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the **beta and release-candidate phase**.\\n\\nWith proper support for **i18n and versioning**, and **large scale migrations** such as **React Native** and **Jest**, we now have a clear migration path for all Docusaurus 1 sites.\\n\\nWe still have a few **major features** that we would like to work on:\\n\\n- [Create a theme gallery](https://github.com/facebook/docusaurus/issues/3522), make it easy to switch from one another, and include **first-class Tailwind support**\\n- [Upgrade to Webpack 5](https://github.com/facebook/docusaurus/issues/4027), improve performances and build times\\n- [Better compatibility with CommonMark](https://github.com/facebook/docusaurus/issues/3018), as MDX and makes it harder for CommonMark-based sites to adopt Docusaurus\\n- [Upgrade to MDX 2.0](https://github.com/facebook/docusaurus/issues/4029)\\n- Other tasks that we might discover during 2021\\n\\nHuge thanks to the community for [their contributions in 2020](https://github.com/facebook/docusaurus/graphs/contributors?from=2020-01-01&to=2021-01-01&type=c), especially:\\n\\n- [Joel Marcey](https://github.com/JoelMarcey) for creating Docusaurus and supporting the project all this time\\n- the core team - [Alexey Pyltsyn](https://github.com/lex111), [S\xe9bastien Lorber](https://sebastienlorber.com), [Yangshun Tay](https://twitter.com/yangshunz)\\n- the Major League Hacking and Facebook interns for their significant impact\\n- the Algolia team for DocSearch 3 and their support\\n- [Bartosz Kaszubowski](https://github.com/Simek) for his investment in the React Native migration\\n- the whole community for their contributions, and providing support to each other\\n\\nCheers to a great 2021! \ud83c\udf89"},{"id":"/2020/01/07/tribute-to-endi","metadata":{"permalink":"/blog/2020/01/07/tribute-to-endi","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx","source":"@site/blog/2020/01-07-tribute-to-endi.mdx","title":"Tribute to Endi","description":"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.","date":"2020-01-07T00:00:00.000Z","tags":[{"label":"endi","permalink":"/blog/tags/endi"},{"label":"tribute","permalink":"/blog/tags/tribute"}],"readingTime":0.895,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Tribute to Endi","authors":"JMarcey","tags":["endi","tribute"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap"},"nextItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"}},"content":"It is with great sadness to announce that our primary external Docusaurus contributor, [Endilie Yacop Sucipto](https://github.com/endiliey) (Endi to those who knew him), [passed away](https://give.asia/campaign/help_endi_beat_cancer#/updates) over the weekend after an illness associated with his bout with cancer.\\n\\n\x3c!--truncate--\x3e\\n\\nIt is impossible to overstate Endi\'s impact on this project:\\n\\n- Docusaurus\' top contributor, [by far](https://github.com/facebook/docusaurus/graphs/contributors).\\n- [Lead developer](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2) on the nearly complete [version 2 of Docusaurus](https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap).\\n- Overall passionate advocate of the project on [Twitter](https://twitter.com/endiliey), [Discord](https://discord.gg/docusaurus) and other social media\\n\\nThinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.\\n\\nWe are working on ways to honor Endi\'s contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or [tweet](https://twitter.com/docusaurus) if you have a suggestion.\\n\\nThe Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14\\n\\n![A photo from behind Endi\'s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.](/img/endi.jpg)"},{"id":"/2019/12/30/docusaurus-2019-recap","metadata":{"permalink":"/blog/2019/12/30/docusaurus-2019-recap","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx","source":"@site/blog/2019/12-30-docusaurus-2019-recap.mdx","title":"Docusaurus 2019 Recap","description":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)","date":"2019-12-30T00:00:00.000Z","tags":[{"label":"recap","permalink":"/blog/tags/recap"}],"readingTime":2.72,"hasTruncateMarker":true,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer at Meta","url":"https://github.com/yangshun","twitter":"yangshunz","email":"tay.yang.shun@gmail.com","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"title":"Docusaurus 2019 Recap","authors":"yangshun","tags":["recap"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi"},"nextItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"}},"content":"2019 was a great year for Docusaurus - we\'ve made tremendous progress on [Docusaurus 2](https://docusaurus.io/). Current Docusaurus 1 users who aren\'t using the translations feature can feel free to check it out and [migrate](https://docusaurus.io/docs/migration) to it! Otherwise we will work with you to make that happen in 2020 :)\\n\\n\x3c!--truncate--\x3e\\n\\n## Docusaurus 2 (D2)\\n\\nIn 2018, we proposed to rebuild [Docusaurus from the ground up](https://github.com/facebook/docusaurus/issues/789). It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of [@endilie](https://github.com/endiliey), our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.\\n\\nD2\'s killer features are **Dark Mode** and its **superb performance**. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.\\n\\nLast but not least, we implemented a plugins architecture and turned the repo into a [Lerna monorepo](https://github.com/facebook/docusaurus/tree/main/packages). We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.\\n\\n## GitHub Activity\\n\\n- Stars: 10050 \u2192 14632 (+45.6% y/y)\\n- Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors\\n- Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November\\n- D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub\\n- We now have 4 active core contributors! (+100% y/y)\\n\\n## Notable Users\\n\\nA good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:\\n\\n- [Create React App](https://create-react-app.dev/)\\n- [Redux](https://redux.js.org/)\\n- [Draft.js](https://draftjs.org/)\\n- [Flux](http://facebook.github.io/flux/)\\n\\nAnd welcomed more projects to Docusaurus 1:\\n\\n- [Libra](https://developers.libra.org/)\\n- [MobX](https://mobx.js.org/)\\n- [Immer](https://immerjs.github.io/immer/)\\n- [Sorbet](https://sorbet.org/)\\n\\n## Media\\n\\nYangshun gave a classroom session during F8 about [Using Docusaurus to Create Open Source Websites](https://www.youtube.com/watch?v=QcGJsf6mgZE).\\n\\n## Community\\n\\nA few third-party hosting/development services also has first-class integration with a Docusaurus setup:\\n\\n- [Vercel deployment](https://github.com/vercel/vercel/tree/main/examples/docusaurus)\\n- [CodeSandbox](https://codesandbox.io/s/docusaurus-template-x3vg9)\\n- [Render](https://render.com/docs/deploy-docusaurus)\\n\\n## Looking Ahead\\n\\nD2 has gained some traction among the [developer community](https://docusaurus.io/showcase). In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!\\n\\nHuge thanks to the community for their contributions, especially the core team - [Endilie Yacop Sucipto](https://github.com/endiliey), [Alexey Pyltsyn](https://github.com/lex111), [Wei Gao](https://github.com/wgao19). Lastly, thank you [Joel Marcey](https://github.com/JoelMarcey) for starting Docusaurus and supporting the project all this time.\\n\\nCheers to a great 2020! \ud83c\udf89"},{"id":"/2018/12/14/Happy-First-Birthday-Slash","metadata":{"permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","source":"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx","title":"Happy 1st Birthday Slash!","description":"Docusaurus makes 1 year! Happy Birthday Slash!","date":"2018-12-14T00:00:00.000Z","tags":[{"label":"birth","permalink":"/blog/tags/birth"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Co-creator of Docusaurus","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Happy 1st Birthday Slash!","authors":[{"key":"JMarcey","title":"Co-creator of Docusaurus"}],"tags":["birth"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap"},"nextItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"}},"content":"![Docusaurus makes 1 year! Happy Birthday Slash!](/img/docusaurus-slash-first-birthday.svg)\\n\\nDocusaurus [went live](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) on December 14, 2017. At the time, we had [8 early adopters](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements).\\n\\n\x3c!--truncate--\x3e\\n\\nWe now have nearly [60 known users of Docusaurus](https://v1.docusaurus.io/en/users), and probably more that we don\'t know about. We have [9K GitHub stars](https://github.com/facebook/docusaurus) and an active community, particularly [Yangshun Tay](https://twitter.com/yangshunz) and [Endilie Yacop Sucipto](https://twitter.com/endiliey), both of whom are the lead maintainers helping keep this project [moving forward](https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2).\\n\\nThank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.\\n\\n> Special thanks to [Eric Nakagawa](https://twitter.com/ericnakagawa), creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"},{"id":"/2018/09/11/Towards-Docusaurus-2","metadata":{"permalink":"/blog/2018/09/11/Towards-Docusaurus-2","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/09-11-Towards-Docusaurus-2.mdx","source":"@site/blog/2018/09-11-Towards-Docusaurus-2.mdx","title":"Towards Docusaurus 2","description":"Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.","date":"2018-09-11T00:00:00.000Z","tags":[{"label":"new","permalink":"/blog/tags/new"},{"label":"adoption","permalink":"/blog/tags/adoption"}],"readingTime":9.25,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png"}],"frontMatter":{"title":"Towards Docusaurus 2","author":"Endilie Yacop Sucipto","authorTitle":"Maintainer of Docusaurus","authorURL":"https://github.com/endiliey","authorImageURL":"https://github.com/endiliey.png","authorTwitter":"endiliey","tags":["new","adoption"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash"},"nextItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"Docusaurus was [officially announced](https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus) over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as [React Native](https://facebook.github.io/react-native/), [Babel](https://babeljs.io/), [Jest](https://jestjs.io/), [Reason](https://reasonml.github.io/) and [Prettier](https://prettier.io/).\\n\\nThere is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus \ud83c\udf89.\\n\\n\x3c!--truncate--\x3e\\n\\n## Introduction\\n\\nIt all started with this [RFC issue](https://github.com/facebook/docusaurus/issues/789) opened by [Yangshun](https://github.com/yangshun) towards the end of June 2018.\\n\\n<blockquote>\\n <h4>\\n <a href=\\"https://github.com/facebook/docusaurus/issues/789\\">\\n {\'[RFC] Docusaurus v2 \xb7 Issue #789 \xb7 facebook/docusaurus\'}\\n </a>\\n </h4>\\n These are some of the problems I\'m seeing in Docusaurus now and also how we can\\n address them in v2. A number of the ideas here were inspired by VuePress and other\\n static site generators. In the current static site generators ecosystem, t...\\n</blockquote>\\n\\nMost of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.\\n\\n## Infrastructure\\n\\n### Content\\n\\nA Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and `dangerouslySetInnerHTML` \ud83d\ude31.\\n\\nIn addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.\\n\\nFor Docusaurus 2, we will be using [webpack](https://webpack.js.org/) as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, **during build time we will create a server-rendered version of the app** and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by [Gatsby](https://github.com/gatsbyjs/gatsby).\\n\\n### Versioning\\n\\nIf you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs **if and only if** the docs content are **different**.\\n\\nFor example, if we have `docs/hello.md`:\\n\\n```text\\n---\\nid: hello\\ntitle: hello\\n---\\nHello world !\\n```\\n\\nAnd **we cut version 1.0.0,** Docusaurus will create `versioned_docs/version-1.0.0/hello.md`:\\n\\n```text\\n---\\nid: version-1.0.0-hello\\ntitle: hello\\noriginal_id: hello\\n---\\nHello world !\\n```\\n\\nHowever, if there are no changes to `hello.md` when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, `versioned_docs/version-2.0.0/hello.md` will not exist.\\n\\nThis can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit `versioned_docs/version-1.0.0/hello.md` or manually add `versioned_docs/version-2.0.0/hello.md`. This could potentially lead to unwanted bugs. Here is a [real scenario in Jest](https://github.com/facebook/jest/pull/6758#issuecomment-408274413).\\n\\nIn addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where [renaming docs breaks links in old versions](https://github.com/facebook/docusaurus/issues/845).\\n\\nFor Docusaurus 2, **every time we cut a new version, we will instead take a snapshot of all the docs**. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.\\n\\n### Translation\\n\\nDocusaurus allows for easy translation functionality by using [Crowdin](https://crowdin.com/). Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that **English** is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.\\n\\nFor Docusaurus 2, **we will not assume English is the default language**. When a user enables internationalization, they have to set a default language in `siteConfig.js`. We will then assume that all the files in `docs` are written in that language.\\n\\nIn addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.\\n\\n## Customizability\\n\\n### Layout\\n\\nThe current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site\'s appearance to their wishes.\\n\\nFor Docusaurus 2, **layout and styling should be controlled by the user**. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by [create-react-app](https://github.com/facebook/create-react-app) and [VuePress](https://vuepress.vuejs.org/), Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using [React Helmet](https://github.com/nfl/react-helmet). Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.\\n\\n### Markdown\\n\\nOur Markdown parsing is currently powered by [Remarkable](https://github.com/jonschlinkert/remarkable). What if the user wants to use [Markdown-it](https://github.com/Markdown-it/Markdown-it) or even [MDX](https://github.com/mdx-js/mdx)? And then there is an issue of which syntax highlighter to use, (e.g: [Prism](https://prismjs.com/) vs [Highlight.js](https://highlightjs.org/)). We should leave these choices open to the user.\\n\\nFor Docusaurus 2, **users can eject and choose their own Markdown parser**. It does not matter if they want to use another Markdown parser such as [Remark](https://github.com/remarkjs/remark), or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the _RAW string of Markdown_. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we\'re still experimenting with different Markdown parsers.\\n\\n### Search\\n\\nOur core search functionality is based on [Algolia](https://www.algolia.com/). There are requests by users to be able to use different search offerings, such as `lunrjs` for offline search.\\n\\nI personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their `DocSearch` is open source. For example, I recently submitted [this PR that enables DocSearch to scrape alternate languages in sitemap](https://github.com/algolia/docsearch-scraper/pull/387).\\n\\nFor Docusaurus 2, **we will allow users to customize the search box**. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.\\n\\n## Stability\\n\\nSoftware is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.\\n\\nFor Docusaurus 2, **we are adding tests as we develop** since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.\\n\\n## Frequently Asked Questions\\n\\n### Will there be any breaking changes?\\n\\nIf you\'ve read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to **minimize the number of breaking changes** and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a **major rewrite and re-architecting** of the codebase.\\n\\nThe exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in `siteConfig.js` and we plan to keep it as lean as possible. For example, the `cleanUrl` siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the `.html` suffix.\\n\\nOur goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on [Discord](https://discord.gg/docusaurus) or [Twitter](https://twitter.com/docusaurus) for questions and help.\\n\\n### When is the release of Docusaurus 2?\\n\\nAs of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.\\n\\nOne thing that I would like to share is that while Docusaurus is part of [Facebook Open Source](https://opensource.fb.com/) and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at [NTU Singapore](https://twitter.com/NTUsg), so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, **we want to make it as awesome as possible**.\\n\\nFor now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the [public repository](https://github.com/facebook/docusaurus). When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned \ud83d\ude09!\\n\\n## Final Thoughts\\n\\nDocusaurus has had a large impact on the open source community as seen from the [many popular projects](https://v1.docusaurus.io/en/users) which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.\\n\\nDocusaurus\' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.\\n\\nWe also want to let people know that **due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.**\\n\\nIf you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we\'re doing, you can support [Docusaurus on Open Collective](https://opencollective.com/Docusaurus).\\n\\n> If you are sponsoring our work on [Open Collective](https://opencollective.com/Docusaurus), we\'ll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.\\n\\nLastly, if you haven\'t done so already, click the **star** and **watch** button on [GitHub](https://github.com/facebook/docusaurus), and follow us on [Twitter](https://twitter.com/docusaurus)."},{"id":"/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","metadata":{"permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","source":"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx","title":"How I Converted Profilo to Docusaurus in Under 2 Hours","description":"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d","date":"2018-04-30T00:00:00.000Z","tags":[{"label":"profilo","permalink":"/blog/tags/profilo"},{"label":"adoption","permalink":"/blog/tags/adoption"}],"readingTime":5.95,"hasTruncateMarker":true,"authors":[{"name":"Christine Abernathy","url":"http://twitter.com/abernathyca","imageURL":"https://github.com/caabernathy.png"}],"frontMatter":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","author":"Christine Abernathy","authorURL":"http://twitter.com/abernathyca","authorImageURL":"https://github.com/caabernathy.png","authorTwitter":"abernathyca","tags":["profilo","adoption"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2"},"nextItem":{"title":"Introducing Docusaurus","permalink":"/blog/2017/12/14/introducing-docusaurus"}},"content":"> _\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I\'m going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn\'t be much different from editing those Markdown files.\u201d_\\n>\\n> _\u2014 Note sent to the Profilo team_\\n\\nThis is the story of the rather short journey it took to create the [Profilo](https://facebookincubator.github.io/profilo/) website using Docusaurus.\\n\\nProfilo, an Android library for collecting performance traces from production, [was announced](https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/) earlier this year. The project was [published on GitHub](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8) with a less than [a handful or Markdown files](https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs) to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.\\n\\n\x3c!--truncate--\x3e\\n\\nIn general, when creating a website with Docusaurus you do the following:\\n\\n1. Generate a template website using Docusaurus scripts.\\n1. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).\\n1. Create the website content:\\n 1. Add your docs and any supporting assets.\\n 1. Customize the default landing page provided by Docusaurus to suit your needs.\\n 1. Configure the default site navigation file.\\n1. Publish the website and set up how it will be published for future changes.\\n\\nGiven I had pre-existing Markdown files, I didn\'t have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.\\n\\n## Overview of Steps Taken\\n\\nHere\'s an overview of the steps taken to convert to a website. I\'ll discuss some of the design aspects in a later section.\\n\\n**Design and colors:**\\n\\n1. Got all the desired logo formats from designer. I had to create the _.favicon_ one.\\n1. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!\\n\\n**Initial website setup:**\\n\\n1. Forked the [Profilo project](https://github.com/facebookincubator/profilo/) on GitHub and created a local clone of the fork to set up the website.\\n1. Created the initial Docusaurus website using the [installation instructions](https://v1.docusaurus.io/docs/en/installation.html).\\n1. Deleted the `docs-examples-from-docusaurus` and `website/blog-examples-from-docusaurus` folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.\\n\\n**Content creation:**\\n\\n1. Added metadata to the existing Markdown files found in the `docs` folder, for example:\\n\\n ```md\\n ---\\n id: architecture\\n title: Architecture\\n sidebar_label: Architecture\\n ---\\n ```\\n\\n2. Added the logo assets to the `website/static/img` folder.\\n3. Modified `website/pages/en/index.js`, the landing page, to highlight Profilo features.\\n4. Modified `website/core/Footer.js`, the footer, to simplify it for Profilo.\\n5. Edited `website/siteConfig.js` (website configuration file) to specify the previously chosen primary and secondary colors.\\n6. Modified `website/sidebars.json` that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.\\n7. Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.\\n8. Tested the website locally throughout this phase. (I ran `yarn start` from the `website` folder to start the server.)\\n\\n**Feedback and review changes:**\\n\\n1. Sent a [pull request](https://github.com/facebookincubator/profilo/pull/6) to the project.\\n2. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).\\n3. Updated the colors and updated the PR.\\n4. The PR was then accepted and [merged](https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad). Yay!\\n\\n**Website publishing:**\\n\\n1. Pushed the first website version by running the Docusaurus publish script from the command line:\\n\\n ```bash\\n USE_SSH=true \\\\\\n GIT_USER=caabernathy \\\\\\n CURRENT_BRANCH=master \\\\\\n yarn run publish-gh-pages\\n ```\\n\\n2. Configured CircleCI using the [provided Docusaurus instructions](https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration). There were 2 PRs for this, [the first](https://github.com/facebookincubator/profilo/pull/8)for the initial config and [the second](https://github.com/facebookincubator/profilo/pull/12) to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).\\n\\nThe final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.\\n\\n## Design\\n\\nHere\'s what the initial website looked like when the first pull request was sent out:\\n\\n![The website\'s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar](/img/profilo_blog_post_website_initial.png)\\n\\nMost of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.\\n\\n![Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade](/img/profilo_blog_post_photoshop_color_picker.png)\\n\\nI then took the RGB representation of the color and set it as the baseline color on [Paletton](http://paletton.com/). The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.\\n\\n![Using Paletton to generate a full palette from the red shade selected. There\'s a color wheel showing all hues on the left, and a square showing various shades of red on the right.](/img/profilo_blog_post_palette_website_color_picker.png)\\n\\nThe selected primary and secondary colors were a good jumping off point for designer feedback.\\n\\nThere were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project\'s features.\\n\\nHere\'s what the final website looked like:\\n\\n![The website\'s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.](/img/profilo_blog_post_website_final.png)\\n\\nThis is an example page showing the core content, in this case the Getting Started page:\\n\\n![A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code](/img/profilo_blog_post_website_final_docs.png)\\n\\nThis also shows the sidebar structure that was set up through editing `website/sidebars.json`.\\n\\nLastly, I didn\'t have to worry about handling responsive design. You get this out of the box with Docusaurus!\\n\\n![Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.](/img/profilo_blog_post_android_ios.png)\\n\\n## Final Thoughts\\n\\nThe Profilo engineers were happy to see that they didn\'t have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.\\n\\nThe infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."},{"id":"/2017/12/14/introducing-docusaurus","metadata":{"permalink":"/blog/2017/12/14/introducing-docusaurus","editUrl":"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx","source":"@site/blog/2017/12-14-introducing-docusaurus.mdx","title":"Introducing Docusaurus","description":"We are very happy to introduce Docusaurus to help you manage one or many open source websites.","date":"2017-12-14T00:00:00.000Z","tags":[{"label":"documentation","permalink":"/blog/tags/documentation"},{"label":"blog","permalink":"/blog/tags/blog"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":8.215,"hasTruncateMarker":true,"authors":[{"name":"Joel Marcey","title":"Developer Advocate at Meta","url":"https://twitter.com/JoelMarcey","email":"jimarcey@gmail.com","twitter":"JoelMarcey","imageURL":"https://github.com/JoelMarcey.png","key":"JMarcey"}],"frontMatter":{"title":"Introducing Docusaurus","authors":"JMarcey","tags":["documentation","blog","docusaurus"]},"unlisted":false,"lastUpdatedAt":1710954485000,"lastUpdatedBy":"Zed Spencer-Milnes","prevItem":{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},"content":"![](/img/slash-introducing.svg)\\n\\nWe are very happy to introduce [Docusaurus](https://github.com/facebook/docusaurus) to help you manage one or many open source websites.\\n\\nWe created [Docusaurus](https://docusaurus.io) for the following reasons:\\n\\n1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.\\n1. To provide features that many of our open source websites need like blog support, search and versioning.\\n1. To make it easy to push updates, new features, and bug fixes to everyone all at once.\\n1. And, finally, to provide a consistent look and feel across all of our open source projects.\\n\\n\x3c!--truncate--\x3e\\n\\nDocusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can [install](https://v1.docusaurus.io/docs/en/installation.html) it using `npm` or `yarn` via a simple initialization script that [creates a working example website out of the box](https://v1.docusaurus.io/docs/en/site-preparation.html).\\n\\nDocusaurus also provides core website and documentation features out-of-the-box including [blog support](https://v1.docusaurus.io/docs/en/blog.html), [internationalization](https://v1.docusaurus.io/docs/en/translation.html), [search](https://v1.docusaurus.io/docs/en/search.html), and [versioning](https://v1.docusaurus.io/docs/en/versioning.html). While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added.\\n\\n## The Birth of docusaurus\\n\\n![](/img/slash-birth.png)\\n\\nWhen Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings.\\n\\nThe open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well.\\n\\nThe problem with the \\"copy the template to your repo\\" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to \\"copy\\" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.\\n\\nSo we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes.\\n\\nDocusaurus was born!\\n\\nAt Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don\'t have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation.\\n\\n## Getting Up and Running\\n\\n![](/img/slash-up-and-running.png)\\n\\nAt its core, we wanted sites running Docusaurus to be simple to use. With one [installation](https://v1.docusaurus.io/docs/en/installation.html) command and some simple [configuration](https://v1.docusaurus.io/docs/en/site-preparation.html), you can actually have a default running website.\\n\\nWhen you run `docusaurus-init`, you will see a structure similar to:\\n\\n```bash\\nroot-of-repo\\n\u251c\u2500\u2500 docs-examples-from-docusaurus\\n\u2502 \u251c\u2500\u2500 doc1.md\\n\u2502 \u251c\u2500\u2500 doc2.md\\n\u2502 \u251c\u2500\u2500 doc3.md\\n\u2502 \u251c\u2500\u2500 example-doc4.md\\n\u2502 \u2514\u2500\u2500 example-doc5.md\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\\n\u2502 \u251c\u2500\u2500 node_modules\\n\u2502 \u251c\u2500\u2500 package.json\\n\u2502 \u251c\u2500\u2500 pages\\n\u2502 \u251c\u2500\u2500 sidebars.json\\n\u2502 \u251c\u2500\u2500 siteConfig.js\\n\u2502 \u2514\u2500\u2500 static\\n```\\n\\nWith the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your [blog posts](https://v1.docusaurus.io/docs/en/blog.html); `siteConfig.js` is where you make most of the [customizations](https://v1.docusaurus.io/docs/en/site-config.html) for your site; `sidebars.json` is where you maintain the layout and content of the [sidebar](https://v1.docusaurus.io/docs/en/navigation.html) for your documentation; the `pages` folder is where you add [custom](https://v1.docusaurus.io/docs/en/custom-pages.html) pages for your site; the `static` folder is where all of your static assets go (e.g., CSS stylesheets and images); and the `core` folder is where you can customize core components of the site, in this case the footer.\\n\\n## How does Docusaurus work?\\n\\nDocusaurus is written primarily in JavaScript and [React](https://facebook.github.io/react), replacing Jekyll which we used in the old template. We use [Remarkable](https://github.com/jonschlinkert/remarkable) for our Markdown rendering and [highlight.js](https://highlightjs.org/) for our code block syntax highlighting. The core of Docusaurus\' functionality is in the [lib directory](https://github.com/facebookexperimental/Docusaurus/tree/master/lib) of the [Docusaurus repo](https://github.com/facebook/docusaurus/). The general structure looks like:\\n\\n```bash\\nroot-of-Docusaurus\\n\u251c\u2500\u2500 lib\\n\u2502 \u251c\u2500\u2500 core\\n\u2502 \u251c\u2500\u2500 server\\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\\n\u2502 \u2502 \u251c\u2500\u2500 server.js\\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\\n\u2502 \u251c\u2500\u2500 static\\n\u2502 \u251c\u2500\u2500 build-files.js\\n\u2502 \u251c\u2500\u2500 copy-examples.js\\n\u2502 \u251c\u2500\u2500 generate-feed.js\\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\\n\u2502 \u251c\u2500\u2500 rename-version.js\\n\u2502 \u251c\u2500\u2500 start-server.js\\n\u2502 \u251c\u2500\u2500 versions.js\\n\u2502 \u2514\u2500\u2500 write-translations.js\\n```\\n\\nThe key files here are build-files.js and start-server.js. There are many similarities between these two files: `build-files.js` is used to build the physical artifacts for serving by an external web server. `start-server.js` is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:\\n\\n1. Process your website settings in `siteConfig.js`\\n1. Read the document metadata that exists in all the Markdown files in your docs directory.\\n1. Create a table of contents for your documents based upon the IDs extracted from the metadata.\\n1. Convert the Markdown to HTML, including doing link replacement.\\n1. These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder.\\n1. Repeat 1-3 for blog posts.\\n1. The blog file will go in a build/blog directory of the compiled site.\\n1. Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site.\\n1. Copy images into an build/img directory of the compiled site.\\n1. Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build.\\n1. Create CNAME and sitemap.xml files and add those to build.\\n\\nNote that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts.\\n\\nThe final structure of your compiled site will look similar to:\\n\\n```bash\\nbuild\\n\u251c\u2500\u2500 website\\n\u2502 \u251c\u2500\u2500 CNAME\\n\u2502 \u251c\u2500\u2500 blog\\n\u2502 \u251c\u2500\u2500 css\\n\u2502 \u251c\u2500\u2500 docs\\n\u2502 \u251c\u2500\u2500 en\\n\u2502 \u251c\u2500\u2500 help.html # custom page\\n\u2502 \u251c\u2500\u2500 img\\n\u2502 \u251c\u2500\u2500 index.html # landing page\\n\u2502 \u251c\u2500\u2500 sitemap.xml\\n\u2502 \u2514\u2500\u2500 users.html # custom page\\n```\\n\\n## Community\\n\\n![](/img/docusaurus.svg)\\n\\nWe welcome your [contributions](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to Docusaurus, whether you want to use it for your own site, you want to [contribute](https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md) to the Docusaurus core or just have questions. Follow us on [GitHub](https://github.com/facebook/docusaurus) and [Twitter](https://twitter.com/docusaurus).\\n\\n## Acknowledgements\\n\\nDocusaurus wouldn\'t exist without the work of the rest of the core Docusaurus team: [Eric Nakagawa](http://twitter.com/ericnakagawa), [Hector Ramos](https://twitter.com/hectorramos), [Eric Vicenti](https://twitter.com/EricVicenti) and [Frank Li](https://github.com/deltice) \u2014 a former intern at Facebook who implemented the core technology and features.\\n\\nSpecial thanks also goes out to our earliest [adopters](https://v1.docusaurus.io/en/users.html) of Docusaurus:\\n\\n- [BuckleScript](https://bucklescript.github.io/)\\n- [FastText](https://fasttext.cc)\\n- [Jest](https://jestjs.io)\\n- [Make It Open](http://makeitopen.com)\\n- [Prettier](https://prettier.io/)\\n- [Reason-react](https://reasonml.github.io/reason-react/)\\n- [React Native](https://facebook.github.io/react-native/)\\n- [Relay](https://facebook.github.io/relay/)\\n\\nWithout their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today.\\n\\n## Resources\\n\\n- [Read our documentation](https://v1.docusaurus.io)\\n- [Follow our Twitter feed](https://twitter.com/docusaurus)\\n- [Follow us on GitHub](https://github.com/facebook/docusaurus)\\n- [About Slash, the Docusaurus mascot](https://v1.docusaurus.io/about-slash.html)"}]}}')}}]); \ No newline at end of file diff --git a/assets/js/2577bdb7.c6a0885f.js b/assets/js/2577bdb7.c6a0885f.js new file mode 100644 index 0000000000..a5e9392b3b --- /dev/null +++ b/assets/js/2577bdb7.c6a0885f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71191],{89747:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>t,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var n=s(24246),l=s(71670);const c={mdx:{format:"md"},date:"2019-12-01T20:00",authors:["binarylogic","endiliey","gimdongwoo","lex111","wgao19"]},r="2.0.0-alpha.37",o={permalink:"/changelog/2.0.0-alpha.37",source:"@site/changelog/source/2.0.0-alpha.37.md",title:"2.0.0-alpha.37",description:"Breaking Change",date:"2019-12-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Binary Logic",alias:"binarylogic",url:"https://github.com/binarylogic",imageURL:"https://github.com/binarylogic.png",key:"binarylogic"},{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"Dongwoo Gim",alias:"gimdongwoo",url:"https://github.com/gimdongwoo",imageURL:"https://github.com/gimdongwoo.png",key:"gimdongwoo"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Wei Gao",alias:"wgao19",url:"https://github.com/wgao19",imageURL:"https://github.com/wgao19.png",key:"wgao19"}],frontMatter:{mdx:{format:"md"},date:"2019-12-01T20:00",authors:["binarylogic","endiliey","gimdongwoo","lex111","wgao19"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.38",permalink:"/changelog/2.0.0-alpha.38"},nextItem:{title:"2.0.0-alpha.36",permalink:"/changelog/2.0.0-alpha.36"},listPageLink:"/changelog/page/4"},d={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0]},h=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 5",id:"committers-5",level:2}];function u(e){const i={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-init"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-utils"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2045",children:"#2045"})," breaking(v2): minimum required nodejs version 8.9-> 8.10 so we can use es2017 (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2069",children:"#2069"})," feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2000",children:"#2000"})," feat(v2): add meta RSS/Atom feed links to head (",(0,n.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-types"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2057",children:"#2057"})," feat(v2): injectHtmlTags API to inject head and/or body html tags (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-mdx-loader"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2032",children:"#2032"})," feat(v2): allow non sidebar category to be first item of sidebar (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-types"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1983",children:"#1983"})," feat(v2): docs versioning \u2744\ufe0f\ud83d\udd25 (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2069",children:"#2069"})," feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-mdx-loader"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2067",children:"#2067"})," fix(v2): toc should not be broken for heading with html inline code (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2064",children:"#2064"})," fix(v2): markdown reference to file should not be page not found (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2061",children:"#2061"})," fix(v2): fix docs sidebar highlighting if link is partially matched (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2042",children:"#2042"})," fix(v2): remove css order warning if css imports are not sorted (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2066",children:"#2066"})," refactor(v2): add title attribute to anchor link (",(0,n.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1990",children:"#1990"})," refactor(v2): make better a11y for tabs (",(0,n.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2034",children:"#2034"})," feat(v2): style sidebar on overflow (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Other\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2068",children:"#2068"})," docs(v2): quick proofread docs (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2047",children:"#2047"})," docs(v2): add manual migration guide for versioning (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2036",children:"#2036"})," docs(v2): Reorganize migration guide (",(0,n.jsx)(i.a,{href:"https://github.com/wgao19",children:"@wgao19"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2052",children:"#2052"})," fix(v2): make proper spelling of Yarn in tabs (",(0,n.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2040",children:"#2040"})," docs(v2): showcase user vector.dev :) (",(0,n.jsx)(i.a,{href:"https://github.com/binarylogic",children:"@binarylogic"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2038",children:"#2038"})," docs(v2): add documentation on versioning (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2037",children:"#2037"})," docs(v2): display yarn and npm command on website (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2051",children:"#2051"})," docs(v2): more examples on lifecycle apis, cleanup (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2072",children:"#2072"})," refactor(v2): stronger typing for blog plugin (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2060",children:"#2060"})," fix(v2): clean generated manifest from previous build so we dont use the wrong one (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2033",children:"#2033"})," refactor(v2): move unused generated files out from build folder (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-types"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2043",children:"#2043"})," refactor(v2): stronger typing for route gen (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-mdx-loader"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-types"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2044",children:"#2044"})," chore(v2): bump deps (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-init"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-mdx-loader"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2029",children:"#2029"})," chore(v2): bump deps and remove unused deps (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,n.jsx)(i.code,{children:"docusaurus-plugin-google-gtag"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2070",children:"#2070"})," perf(v2): more performant gtag and analytics plugin (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2046",children:"#2046"})," perf(v2): use webpack future version of asset emitting logic to free memory (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2039",children:"#2039"})," perf(v2): replace unnecessary json stringify(string) with inline string (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2035",children:"#2035"})," perf(v2): use @babel/runtime plugin to reduce codesize (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2054",children:"#2054"})," perf(v2): unblock metadata processing when possible (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"committers-5",children:"Committers: 5"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Alexey Pyltsyn (",(0,n.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:["Binary Logic (",(0,n.jsx)(i.a,{href:"https://github.com/binarylogic",children:"@binarylogic"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:["Dongwoo Gim (",(0,n.jsx)(i.a,{href:"https://github.com/gimdongwoo",children:"@gimdongwoo"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:["Endi (",(0,n.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,n.jsxs)(i.li,{children:["Wei Gao (",(0,n.jsx)(i.a,{href:"https://github.com/wgao19",children:"@wgao19"}),")"]}),"\n"]})]})}function t(e={}){const{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},71670:(e,i,s)=>{s.d(i,{Z:()=>o,a:()=>r});var n=s(27378);const l={},c=n.createContext(l);function r(e){const i=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(c.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/25d53288.b584fba6.js b/assets/js/25d53288.b584fba6.js new file mode 100644 index 0000000000..14f46dface --- /dev/null +++ b/assets/js/25d53288.b584fba6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61361],{5001:a=>{a.exports=JSON.parse('{"tag":{"label":"blog","permalink":"/blog/tags/blog","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/blog","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/25dbbc3e.7e06eb61.js b/assets/js/25dbbc3e.7e06eb61.js new file mode 100644 index 0000000000..eee6254222 --- /dev/null +++ b/assets/js/25dbbc3e.7e06eb61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92901],{88570:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>h,toc:()=>a});var o=i(24246),n=i(71670);const r={mdx:{format:"md"},date:"2021-09-02T20:00",authors:["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},t="2.0.0-beta.6",h={permalink:"/changelog/2.0.0-beta.6",source:"@site/changelog/source/2.0.0-beta.6.md",title:"2.0.0-beta.6",description:"New Feature",date:"2021-09-02T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ali Saki",alias:"3alisaki",url:"https://github.com/3alisaki",imageURL:"https://github.com/3alisaki.png",key:"3alisaki"},{name:"Antony Messerli",alias:"antonym",url:"https://github.com/antonym",imageURL:"https://github.com/antonym.png",key:"antonym"},{name:"farshid",alias:"farshidinanloo",url:"https://github.com/farshidinanloo",imageURL:"https://github.com/farshidinanloo.png",key:"farshidinanloo"},{name:"Gabriel Csapo",alias:"gabrielcsapo",url:"https://github.com/gabrielcsapo",imageURL:"https://github.com/gabrielcsapo.png",key:"gabrielcsapo"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Daniel Costrasel",alias:"ohkimur",url:"https://github.com/ohkimur",imageURL:"https://github.com/ohkimur.png",key:"ohkimur"},{name:"Oscar Lorentzon",alias:"oscarlorentzon",url:"https://github.com/oscarlorentzon",imageURL:"https://github.com/oscarlorentzon.png",key:"oscarlorentzon"},{name:"Rohit Gohri",alias:"rohit-gohri",url:"https://github.com/rohit-gohri",imageURL:"https://github.com/rohit-gohri.png",key:"rohit-gohri"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2021-09-02T20:00",authors:["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-beta.7",permalink:"/changelog/2.0.0-beta.7"},nextItem:{title:"2.0.0-beta.5",permalink:"/changelog/2.0.0-beta.5"},listPageLink:"/changelog/page/2"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 10",id:"committers-10",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5428",children:"#5428"})," feat: adds blog archive route (",(0,o.jsx)(s.a,{href:"https://github.com/gabrielcsapo",children:"@gabrielcsapo"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5462",children:"#5462"})," feat: on back navigation, close mobile sidebar (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5445",children:"#5445"})," feat: Add docs-related stable classnames (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5460",children:"#5460"})," feat: infima 33 + navbar-sidebar close button (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5442",children:"#5442"})," feat(theme-classic): allow passing tab label and default value through TabItem (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5454",children:"#5454"})," feat: new docs options: versions.{badge,className} (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5444",children:"#5444"})," fix: fix some theme UI issues (blockquotes, navbar-sidebar font) with Infima alpha.32 (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5431",children:"#5431"})," fix: some beta.5 bugfixes (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5437",children:"#5437"})," fix: fix a few TS errors (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5459",children:"#5459"})," refactor(theme-classic): completely migrate package to TypeScript (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5453",children:"#5453"})," refactor: use SVG for closable button in announcement bar (",(0,o.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5430",children:"#5430"})," refactor: switch to Flexbox in announcement bar (",(0,o.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5434",children:"#5434"})," refactor: update Arabic and Persian translations (",(0,o.jsx)(s.a,{href:"https://github.com/3alisaki",children:"@3alisaki"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5410",children:"#5410"})," refactor: add missing translations in fa.json (",(0,o.jsx)(s.a,{href:"https://github.com/farshidinanloo",children:"@farshidinanloo"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5471",children:"#5471"})," docs: Add docusaurus-plugin-relative-paths (",(0,o.jsx)(s.a,{href:"https://github.com/ohkimur",children:"@ohkimur"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5464",children:"#5464"})," docs: add mapillary-js to showcase (",(0,o.jsx)(s.a,{href:"https://github.com/oscarlorentzon",children:"@oscarlorentzon"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5433",children:"#5433"})," docs: document doc tags + refinements (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5435",children:"#5435"})," docs: Add netboot.xyz to site showcase (",(0,o.jsx)(s.a,{href:"https://github.com/antonym",children:"@antonym"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5436",children:"#5436"})," docs: add Redocusaurus in community plugin list (",(0,o.jsx)(s.a,{href:"https://github.com/rohit-gohri",children:"@rohit-gohri"}),")"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5455",children:"#5455"})," fix: website bad version name in docusaurus.config.js (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"committers-10",children:"Committers: 10"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,o.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Ali Saki (",(0,o.jsx)(s.a,{href:"https://github.com/3alisaki",children:"@3alisaki"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Antony Messerli (",(0,o.jsx)(s.a,{href:"https://github.com/antonym",children:"@antonym"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Daniel Costrasel (",(0,o.jsx)(s.a,{href:"https://github.com/ohkimur",children:"@ohkimur"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Gabriel Csapo (",(0,o.jsx)(s.a,{href:"https://github.com/gabrielcsapo",children:"@gabrielcsapo"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Joshua Chen (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Oscar Lorentzon (",(0,o.jsx)(s.a,{href:"https://github.com/oscarlorentzon",children:"@oscarlorentzon"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Rohit Gohri (",(0,o.jsx)(s.a,{href:"https://github.com/rohit-gohri",children:"@rohit-gohri"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["farshid (",(0,o.jsx)(s.a,{href:"https://github.com/farshidinanloo",children:"@farshidinanloo"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>h,a:()=>t});var o=i(27378);const n={},r=o.createContext(n);function t(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/260ff252.bcc1053f.js b/assets/js/260ff252.bcc1053f.js new file mode 100644 index 0000000000..3f5ab77c40 --- /dev/null +++ b/assets/js/260ff252.bcc1053f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86874],{91801:t=>{t.exports=JSON.parse('{"tag":{"label":"long-long","permalink":"/tests/blog/tags/long-long","allTagsPath":"/tests/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/long-long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/26af6b06.6906267d.js b/assets/js/26af6b06.6906267d.js new file mode 100644 index 0000000000..23b94d48d7 --- /dev/null +++ b/assets/js/26af6b06.6906267d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63545],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),s=(t(27378),t(40624));const o={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(o.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),s=t(27378),o=t(40624),i=t(75527),a=t(3620),c=t(44479),l=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function f(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return f(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),o=(0,l._X)(r),i=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[o,i]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=m(e),[i,a]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[l,d]=g({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:o})?e:null})();(0,c.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,o]),tabValues:o}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function S({className:e,block:n,selectedValue:t,selectValue:s,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=c.indexOf(n),o=a[r].value;o!==t&&(l(n),s(o))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[c.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>c.push(e),onKeyDown:u,onClick:d},s),{className:(0,o.Z)("tabs__item",x.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function k({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function T(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,o.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(S,v({},e,n)),(0,r.jsx)(k,v({},e,n))]})}function E(e){const n=(0,w.Z)();return(0,r.jsx)(T,O(v({},e),{children:f(e.children)}),String(n))}},30291:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=t(24246),s=t(71670),o=t(97555),i=t(61132);const a={sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},c="Static site generation (SSG)",l={id:"advanced/ssg",title:"Static site generation (SSG)",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.",source:"@site/docs/advanced/ssg.mdx",sourceDirName:"advanced",slug:"/advanced/ssg",permalink:"/docs/advanced/ssg",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/ssg.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,frontMatter:{sidebar_label:"Static site generation",description:"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO."},sidebar:"docs",previous:{title:"Routing",permalink:"/docs/advanced/routing"},next:{title:"Client architecture",permalink:"/docs/advanced/client"}},d={},u=[{value:"Understanding SSR",id:"understanding-ssr",level:2},{value:"Escape hatches",id:"escape-hatches",level:2},{value:"<code><BrowserOnly></code>",id:"browseronly",level:3},{value:"<code>useIsBrowser</code>",id:"useisbrowser",level:3},{value:"<code>useEffect</code>",id:"useeffect",level:3},{value:"<code>ExecutionEnvironment</code>",id:"executionenvironment",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"static-site-generation-ssg",children:"Static site generation (SSG)"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"/docs/advanced/architecture",children:"architecture"}),", we mentioned that the theme is run in Webpack. But beware: that doesn't mean it always has access to browser globals! The theme is built twice:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"server-side rendering"}),", the theme is compiled in a sandbox called ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/react-dom-server.html",children:"React DOM Server"}),'. You can see this as a "headless browser", where there is no ',(0,r.jsx)(n.code,{children:"window"})," or ",(0,r.jsx)(n.code,{children:"document"}),", only React. SSR produces static HTML pages."]}),"\n",(0,r.jsxs)(n.li,{children:["During ",(0,r.jsx)(n.strong,{children:"client-side rendering"}),", the theme is compiled to JavaScript that gets eventually executed in the browser, so it has access to browser variables."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"SSR or SSG?",type:"info",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Server-side rendering"})," and ",(0,r.jsx)(n.em,{children:"static site generation"})," can be different concepts, but we use them interchangeably."]}),(0,r.jsxs)(n.p,{children:["Strictly speaking, Docusaurus is a static site generator, because there's no server-side runtime\u2014we statically render to HTML files that are deployed on a CDN, instead of dynamically pre-rendering on each request. This differs from the working model of ",(0,r.jsx)(n.a,{href:"https://nextjs.org/",children:"Next.js"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["Therefore, while you probably know not to access Node globals like ",(0,r.jsx)(n.code,{children:"process"})," (",(0,r.jsx)(n.a,{href:"#node-env",children:"or can we?"}),") or the ",(0,r.jsx)(n.code,{children:"'fs'"})," module, you can't freely access browser globals either."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function WhereAmI() {\n return <span>{window.location.href}</span>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This looks like idiomatic React, but if you run ",(0,r.jsx)(n.code,{children:"docusaurus build"}),", you will get an error:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"ReferenceError: window is not defined\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This is because during server-side rendering, the Docusaurus app isn't actually run in browser, and it doesn't know what ",(0,r.jsx)(n.code,{children:"window"})," is."]}),"\n",(0,r.jsxs)(t,{id:"node-env",children:[(0,r.jsxs)("summary",{children:["What about ",(0,r.jsx)("code",{children:"process.env.NODE_ENV"}),"?"]}),(0,r.jsxs)(n.p,{children:['One exception to the "no Node globals" rule is ',(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"}),". In fact, you can use it in React, because Webpack injects this variable as a global:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n\nexport default function expensiveComp() {\n if (process.env.NODE_ENV === 'development') {\n return <>This component is not shown in development</>;\n }\n const res = someExpensiveOperationThatLastsALongTime();\n return <>{res}</>;\n}\n"})}),(0,r.jsxs)(n.p,{children:["During Webpack build, the ",(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"})," will be replaced with the value, either ",(0,r.jsx)(n.code,{children:"'development'"})," or ",(0,r.jsx)(n.code,{children:"'production'"}),". You will then get different build results after dead code elimination:"]}),(0,r.jsxs)(o.Z,{children:[(0,r.jsx)(i.Z,{value:"Development",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n if ('development' === 'development') {\n+ return <>This component is not shown in development</>;\n }\n- const res = someExpensiveOperationThatLastsALongTime();\n- return <>{res}</>;\n}\n"})})}),(0,r.jsx)(i.Z,{value:"Production",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:"import React from 'react';\n\nexport default function expensiveComp() {\n // highlight-next-line\n- if ('production' === 'development') {\n- return <>This component is not shown in development</>;\n- }\n+ const res = someExpensiveOperationThatLastsALongTime();\n+ return <>{res}</>;\n}\n"})})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"understanding-ssr",children:"Understanding SSR"}),"\n",(0,r.jsx)(n.p,{children:"React is not just a dynamic UI runtime\u2014it's also a templating engine. Because Docusaurus sites mostly contain static contents, it should be able to work without any JavaScript (which React runs in), but only plain HTML/CSS. And that's what server-side rendering offers: statically rendering your React code into HTML, without any dynamic content. An HTML file has no concept of client state (it's purely markup), hence it shouldn't rely on browser APIs."}),"\n",(0,r.jsxs)(n.p,{children:["These HTML files are the first to arrive at the user's browser screen when a URL is visited (see ",(0,r.jsx)(n.a,{href:"/docs/advanced/routing",children:"routing"}),'). Afterwards, the browser fetches and runs other JS code to provide the "dynamic" parts of your site\u2014anything implemented with JavaScript. However, before that, the main content of your page is already visible, allowing faster loading.']}),"\n",(0,r.jsx)(n.p,{children:'In CSR-only apps, all DOM elements are generated on client side with React, and the HTML file only ever contains one root element for React to mount DOM to; in SSR, React is already facing a fully built HTML page, and it only needs to correlate the DOM elements with the virtual DOM in its model. This step is called "hydration". After React has hydrated the static markup, the app starts to work as any normal React app.'}),"\n",(0,r.jsxs)(n.p,{children:["Note that Docusaurus is ultimately a single-page application, so static site generation is only an optimization (",(0,r.jsx)(n.em,{children:"progressive enhancement"}),", as it's called), but our functionality does not fully depend on those HTML files. This is contrary to site generators like ",(0,r.jsx)(n.a,{href:"https://jekyllrb.com/",children:"Jekyll"})," and ",(0,r.jsx)(n.a,{href:"https://v1.docusaurus.io/",children:"Docusaurus v1"}),", where all files are statically transformed to markup, and interactiveness is added through external JavaScript linked with ",(0,r.jsx)(n.code,{children:"<script>"})," tags. If you inspect the build output, you will still see JS assets under ",(0,r.jsx)(n.code,{children:"build/assets/js"}),", which are, really, the core of Docusaurus."]}),"\n",(0,r.jsx)(n.h2,{id:"escape-hatches",children:"Escape hatches"}),"\n",(0,r.jsx)(n.p,{children:"If you want to render any dynamic content on your screen that relies on the browser API to be functional at all, for example:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"live codeblock"}),", which runs in the browser's JS runtime"]}),"\n",(0,r.jsxs)(n.li,{children:["Our ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/assets#themed-images",children:"themed image"})," that detects the user's color scheme to display different images"]}),"\n",(0,r.jsxs)(n.li,{children:["The JSON viewer of our debug panel which uses the ",(0,r.jsx)(n.code,{children:"window"})," global for styling"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You may need to escape from SSR since static HTML can't display anything useful without knowing the client state."}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"It is important for the first client-side render to produce the exact same DOM structure as server-side rendering, otherwise, React will correlate virtual DOM with the wrong DOM elements."}),(0,r.jsxs)(n.p,{children:["Therefore, the na\xefve attempt of ",(0,r.jsx)(n.code,{children:"if (typeof window !== 'undefined) {/* render something */}"})," won't work appropriately as a browser vs. server detection, because the first client render would instantly render different markup from the server-generated one."]}),(0,r.jsxs)(n.p,{children:["You can read more about this pitfall in ",(0,r.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,r.jsx)(n.p,{children:"We provide several more reliable ways to escape SSR."}),"\n",(0,r.jsx)(n.h3,{id:"browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})}),"\n",(0,r.jsxs)(n.p,{children:["If you need to render some component in browser only (for example, because the component relies on browser specifics to be functional at all), one common approach is to wrap your component with ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#browseronly",children:(0,r.jsx)(n.code,{children:"<BrowserOnly>"})})," to make sure it's invisible during SSR and only rendered in CSR."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent(props) {\n return (\n // highlight-start\n <BrowserOnly fallback={<div>Loading...</div>}>\n {() => {\n const LibComponent =\n require('some-lib-that-accesses-window').LibComponent;\n return <LibComponent {...props} />;\n }}\n </BrowserOnly>\n // highlight-end\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It's important to realize that the children of ",(0,r.jsx)(n.code,{children:"<BrowserOnly>"})," is not a JSX element, but a function that ",(0,r.jsx)(n.em,{children:"returns"})," an element. This is a design decision. Consider this code:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import BrowserOnly from '@docusaurus/BrowserOnly';\n\nfunction MyComponent() {\n return (\n <BrowserOnly>\n {/* highlight-start */}\n {/* DON'T DO THIS - doesn't actually work */}\n <span>page url = {window.location.href}</span>\n {/* highlight-end */}\n </BrowserOnly>\n );\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["While you may expect that ",(0,r.jsx)(n.code,{children:"BrowserOnly"})," hides away the children during server-side rendering, it actually can't. When the React renderer tries to render this JSX tree, it does see the ",(0,r.jsx)(n.code,{children:"{window.location.href}"})," variable as a node of this tree and tries to render it, although it's actually not used! Using a function ensures that we only let the renderer see the browser-only component when it's needed."]}),"\n",(0,r.jsx)(n.h3,{id:"useisbrowser",children:(0,r.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,r.jsxs)(n.p,{children:["You can also use the ",(0,r.jsx)(n.code,{children:"useIsBrowser()"})," hook to test if the component is currently in a browser environment. It returns ",(0,r.jsx)(n.code,{children:"false"})," in SSR and ",(0,r.jsx)(n.code,{children:"true"})," is CSR, after first client render. Use this hook if you only need to perform certain conditional operations on client-side, but not render an entirely different UI."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import useIsBrowser from '@docusaurus/useIsBrowser';\n\nfunction MyComponent() {\n const isBrowser = useIsBrowser();\n const location = isBrowser ? window.location.href : 'fetching location...';\n return <span>{location}</span>;\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"useeffect",children:(0,r.jsx)(n.code,{children:"useEffect"})}),"\n",(0,r.jsxs)(n.p,{children:["Lastly, you can put your logic in ",(0,r.jsx)(n.code,{children:"useEffect()"})," to delay its execution until after first CSR. This is most appropriate if you are only performing side-effects but don't ",(0,r.jsx)(n.em,{children:"get"})," data from the client state."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:'function MyComponent() {\n useEffect(() => {\n // Only logged in the browser console; nothing is logged during server-side rendering\n console.log("I\'m now in the browser");\n }, []);\n return <span>Some content...</span>;\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/docusaurus-core#executionenvironment",children:(0,r.jsx)(n.code,{children:"ExecutionEnvironment"})})," namespace contains several values, and ",(0,r.jsx)(n.code,{children:"canUseDOM"})," is an effective way to detect browser environment."]}),"\n",(0,r.jsxs)(n.p,{children:["Beware that it essentially checked ",(0,r.jsx)(n.code,{children:"typeof window !== 'undefined'"})," under the hood, so you should not use it for rendering-related logic, but only imperative code, like reacting to user input by sending web requests, or dynamically importing libraries, where DOM isn't updated at all."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="a-client-module.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n document.title = \"I'm loaded!\";\n}\n"})})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(27378);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/27291a50.6b31fbf3.js b/assets/js/27291a50.6b31fbf3.js new file mode 100644 index 0000000000..f92b8cc32b --- /dev/null +++ b/assets/js/27291a50.6b31fbf3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6018],{78667:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=a(24246),i=a(71670);const r={mdx:{format:"md"},date:"2020-11-24T20:00",authors:["arcanis","camiluc","lex111","Simek","slorber"]},o="2.0.0-alpha.69",s={permalink:"/changelog/2.0.0-alpha.69",source:"@site/changelog/source/2.0.0-alpha.69.md",title:"2.0.0-alpha.69",description:"New Feature",date:"2020-11-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ma\xebl Nison",alias:"arcanis",url:"https://github.com/arcanis",imageURL:"https://github.com/arcanis.png",key:"arcanis"},{name:"camiluc",alias:"camiluc",url:"https://github.com/camiluc",imageURL:"https://github.com/camiluc.png",key:"camiluc"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2020-11-24T20:00",authors:["arcanis","camiluc","lex111","Simek","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.70",permalink:"/changelog/2.0.0-alpha.70"},nextItem:{title:"2.0.0-alpha.68",permalink:"/changelog/2.0.0-alpha.68"},listPageLink:"/changelog/page/3"},c={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0]},l=[];function m(e){return(0,n.jsx)(n.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m()}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(27378);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2757f4f5.76d9b283.js b/assets/js/2757f4f5.76d9b283.js new file mode 100644 index 0000000000..9e1e57654a --- /dev/null +++ b/assets/js/2757f4f5.76d9b283.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93199],{50737:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-11-04T20:00"},s="2.0.0-alpha.32",c={permalink:"/changelog/2.0.0-alpha.32",source:"@site/changelog/source/2.0.0-alpha.32.md",title:"2.0.0-alpha.32",description:"Features",date:"2019-11-04T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-11-04T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.33",permalink:"/changelog/2.0.0-alpha.33"},nextItem:{title:"2.0.0-alpha.31",permalink:"/changelog/2.0.0-alpha.31"},listPageLink:"/changelog/page/4"},l={authorsImageUrls:[]},i=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/276a1994.b7ae8d00.js b/assets/js/276a1994.b7ae8d00.js new file mode 100644 index 0000000000..bc34ff1e05 --- /dev/null +++ b/assets/js/276a1994.b7ae8d00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42931],{94544:(e,n,r)=>{r.d(n,{Z:()=>o});var t=r(24246),s=(r(27378),r(29088));function o({children:e,fallback:n}){return(0,s.Z)()?(0,t.jsx)(t.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},87048:(e,n,r)=>{r.d(n,{CW:()=>f,FS:()=>v,Fr:()=>j,Hc:()=>O,I1:()=>p,SR:()=>b,UM:()=>x,Zl:()=>g,mC:()=>d,mq:()=>y,rv:()=>w});var t=r(24246),s=r(27378),o=r(32054),i=r(92053),c=r(36712),l=r(41428),a=r(38112);const u=s.createContext(null);function d({children:e}){const[n,r]=(0,s.useState)(null),o=(0,s.useRef)(!0);return(0,s.useEffect)((()=>(o.current=!0,()=>{o.current=!1})),[]),(0,s.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!o.current)return;const n=Object.keys(e.versions).at(-1),t=e.time[n];r({name:n,time:t})}))}),[]),(0,t.jsx)(u.Provider,{value:n,children:e})}function h(){var e;const n=null===(e=(0,o.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,i.gB)("default");var t;const s=(null!==(t=r.find((e=>"current"!==e.name)))&&void 0!==t?t:r[0]).name;return n&&"current"!==n?n:s}function p(){const e=(0,s.useContext)(u);return e?(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,t.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,t.jsx)("span",{children:(0,t.jsx)(c.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function b(){const e=h();return(0,t.jsx)("span",{children:e})}function f(){return(0,t.jsx)("span",{children:3})}function j(){return(0,t.jsx)("span",{children:2})}function m({branch:e}){return(0,t.jsx)(l.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,t.jsx)("code",{children:e})})}function g(){return(0,t.jsx)(m,{branch:"docusaurus-v2"})}function y(){return(0,t.jsx)(m,{branch:"main"})}function x({children:e}){return(0,s.useContext)(u)?null:e}function v({children:e}){return(0,s.useContext)(u)?e:null}function O(){var e,n;const r=null!==(n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==n?n:"0.0.0-4922",o=h();return(0,t.jsx)(a.Z,{language:"diff",children:`- "@docusaurus/core": "^${o}",\n- "@docusaurus/preset-classic": "^${o}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function w(){var e;const n=null===(e=(0,s.useContext)(u))||void 0===e?void 0:e.time;return n?(0,t.jsx)(c.Z,{values:{time:(0,t.jsx)("b",{children:new Date(n).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,n,r)=>{r.d(n,{Z:()=>Ze});var t={};r.r(t),r.d(t,{ButtonExample:()=>A});var s=r(24246),o=r(27378),i=r(40624),c=r(29088),l=r(32711),a=r(36712),u=r(4423),d=r(94544),h=r(30691),p=r(78844),b=r(73919);function f(){const{prism:e}=(0,b.L)(),{colorMode:n}=(0,p.I)(),r=e.theme,t=e.darkTheme||r;return"dark"===n?t:r}var j=r(88941);const m={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function y(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){g(e,n,r[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function v(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function O({children:e}){return(0,s.jsx)("div",{className:(0,i.Z)(m.playgroundHeader),children:e})}function w(){return(0,s.jsx)("div",{children:"Loading..."})}function P(){return(0,s.jsx)(d.Z,{fallback:(0,s.jsx)(w,{}),children:()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(j.Z,{fallback:e=>(0,s.jsx)(h.Ac,y({},e)),children:(0,s.jsx)(l.i5,{})}),(0,s.jsx)(l.IF,{})]})})}function k(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,s.jsx)("div",{className:m.playgroundPreview,children:(0,s.jsx)(P,{})})]})}function S(){const e=(0,c.Z)();return(0,s.jsx)(l.uz,{className:m.playgroundEditor},String(e))}function D(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O,{children:(0,s.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,s.jsx)(S,{})]})}const C=e=>`${e};`;function B(e){var n,{children:r,transformCode:t}=e,o=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=f();var d;const h=null!==(d=null===(n=o.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,s.jsx)("div",{className:m.playgroundContainer,children:(0,s.jsx)(l.nu,x(y({code:null==r?void 0:r.replace(/\n$/,""),noInline:h,transformCode:null!=t?t:C,theme:a},o),{children:"top"===c?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(k,{}),(0,s.jsx)(D,{})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(D,{}),(0,s.jsx)(k,{})]})}))})}function I(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function E(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){I(e,n,r[n])}))}return e}function N(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function A(e){return(0,s.jsx)("button",N(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const L=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){T(e,n,r[n])}))}return e}({React:o},o,t);var Z,z,W=r(89583),R=r(6324),_=r.n(R);function M(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}const $=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),V={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(q=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){M(e,n,r[n])}))}return e}({},V),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(q,Object.getOwnPropertyDescriptors(U)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(U)).forEach((function(e){Object.defineProperty(q,e,Object.getOwnPropertyDescriptor(U,e))})),q);var q,U;const G=Object.keys(V);function Q(e,n){const r=e.map((e=>{const{start:r,end:t}=H[e];return`(?:${r}\\s*(${n.flatMap((e=>{var n,r;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${t})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Y(e,n){let r=e.replace(/\n$/,"");const{language:t,magicComments:s,metastring:o}=n;if(o&&F.test(o)){const e=o.match(F).groups.range;if(0===s.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=s[0].className,t=_()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(t),code:r}}if(void 0===t)return{lineClassNames:{},code:r};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],n);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],n);case"html":return Q(["js","jsBlock","html"],n);case"python":case"py":case"bash":return Q(["bash"],n);case"markdown":case"md":return Q(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return Q(["tex"],n);case"lua":case"haskell":case"sql":return Q(["lua"],n);case"wasm":return Q(["wasm"],n);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],n);case"vbnet":return Q(["vbnet","rem"],n);case"batch":return Q(["rem"],n);case"basic":return Q(["rem","f90"],n);case"fsharp":return Q(["js","ml"],n);case"ocaml":case"sml":return Q(["ml"],n);case"fortran":return Q(["f90"],n);case"cobol":return Q(["cobol"],n);default:return Q(G,n)}}(t,s),c=r.split("\n"),l=Object.fromEntries(s.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(s.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(s.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:u[n]?l[u[n]].start=p:d[n]&&(l[d[n]].range+=`${l[d[n]].start}-${p-1},`),c.splice(p,1)}r=c.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{_()(n).forEach((n=>{var r;null!==(r=(Z=h)[z=n])&&void 0!==r||(Z[z]=[]),h[n].push(e)}))})),{lineClassNames:h,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ee(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function ne(e){var{as:n}=e,r=ee(e,["as"]);const t=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,t])=>{const s=n[e];s&&"string"==typeof t&&(r[s]=t)})),r}(f());return(0,s.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){X(e,n,r[n])}))}return e}({},r),{style:t,className:(0,i.Z)(r.className,J.codeBlockContainer,W.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function te({children:e,className:n}){return(0,s.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",n),children:(0,s.jsx)("code",{className:re.codeBlockLines,children:e})})}var se=r(51114);const oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[r,t]=(0,o.useState)(),s=(0,o.useCallback)((()=>{var n;t(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,t]);(0,o.useEffect)((()=>{s()}),[s]),function(e,n,r=oe){const t=(0,se.zX)(n),s=(0,se.Ql)(r);(0,o.useEffect)((()=>{const n=new MutationObserver(t);return e&&n.observe(e,s),()=>n.disconnect()}),[e,t,s])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=r(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ue(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){ae(e,n,r[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function he({line:e,classNames:n,showLineNumbers:r,getLineProps:t,getTokenProps:o}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=t({line:e,className:(0,i.Z)(n,r&&le.codeLine)}),l=e.map(((e,n)=>(0,s.jsx)("span",ue({},o({token:e,key:n})),n)));return(0,s.jsxs)("span",de(ue({},c),{children:[r?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:le.codeLineNumber}),(0,s.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]}))}var pe=r(34370);function be(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function je(e){return(0,s.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){be(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function me(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function ge(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function ye(e){return(0,s.jsx)("svg",ge(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){me(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:n}){const[r,t]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{(0,pe.Z)(e),t(!0),c.current=window.setTimeout((()=>{t(!1)}),1e3)}),[e]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,r&&xe.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(je,{className:xe.copyButtonIcon}),(0,s.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function Oe(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function we(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Pe(e){return(0,s.jsx)("svg",we(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Oe(e,n,r[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:n,isEnabled:r}){const t=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":t,title:t,children:(0,s.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:n="",metastring:r,title:t,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,b.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:a),p=f(),j=function(){const[e,n]=(0,o.useState)(!1),[r,t]=(0,o.useState)(!1),s=(0,o.useRef)(null),i=(0,o.useCallback)((()=>{const r=s.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),n((e=>!e))}),[s,e]),c=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=s.current,r=e>n||s.current.querySelector("code").hasAttribute("style");t(r)}),[s]);return ie(s,c),(0,o.useEffect)((()=>{c()}),[e,c]),(0,o.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:s,isEnabled:e,isCodeScrollable:r,toggle:i}}(),m=function(e){var n,r;return null!==(r=null===(n=null==e?void 0:e.match($))||void 0===n?void 0:n.groups.title)&&void 0!==r?r:""}(r)||t,{lineClassNames:g,code:y}=Y(e,{metastring:r,language:h,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,s.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[m&&(0,s.jsx)("div",{className:re.codeBlockTitle,children:m}),(0,s.jsxs)("div",{className:re.codeBlockContent,children:[(0,s.jsx)(ce.y$,{theme:p,code:y,language:null!=h?h:"text",children:({className:e,style:n,tokens:r,getLineProps:t,getTokenProps:o})=>(0,s.jsx)("pre",{tabIndex:0,ref:j.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:n,children:(0,s.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,x&&re.codeBlockLinesWithNumbering),children:r.map(((e,n)=>(0,s.jsx)(he,{line:e,getLineProps:t,getTokenProps:o,classNames:g[n],showLineNumbers:x},n)))})})}),(0,s.jsxs)("div",{className:re.buttonGroup,children:[(j.isEnabled||j.isCodeScrollable)&&(0,s.jsx)(Se,{className:re.codeButton,onClick:()=>j.toggle(),isEnabled:j.isEnabled}),(0,s.jsx)(ve,{className:re.codeButton,code:y})]})]})]})}function Ce(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Be(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function Ie(e,n){if(null==e)return{};var r,t,s=function(e,n){if(null==e)return{};var r,t,s={},o=Object.keys(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||(s[r]=e[r]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t<o.length;t++)r=o[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}function Ee(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Ne(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ee(e,n,r[n])}))}return e}const Ae=(Te=function(e){var{children:n}=e,r=Ie(e,["children"]);const t=(0,c.Z)(),i=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?De:te;return(0,s.jsx)(l,Be(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Ce(e,n,r[n])}))}return e}({},r),{children:i}),String(t))},function(e){return e.live?(0,s.jsx)(B,Ne({scope:L},e)):(0,s.jsx)(Te,Ne({},e))});var Te;function Le(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function Ze(e){return(0,s.jsx)(Ae,function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){Le(e,n,r[n])}))}return e}({},e))}},9621:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var t=r(24246),s=r(71670),o=r(87048);const i={},c="Release process",l={id:"release-process",title:"Release process",description:"Let's see how Docusaurus handles versioning, releases and breaking changes.",source:"@site/community/5-release-process.mdx",sourceDirName:".",slug:"/release-process",permalink:"/community/release-process",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/5-release-process.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,sidebarPosition:5,frontMatter:{},sidebar:"community",previous:{title:"Canary releases",permalink:"/community/canary"}},a={},u=[{value:"Semantic versioning",id:"semantic-versioning",level:2},{value:"Major versions",id:"major-versions",level:3},{value:"Minor versions",id:"minor-versions",level:3},{value:"Patch versions",id:"patch-versions",level:3},{value:"Versions",id:"versions",level:2},{value:"Stable version",id:"stable-version",level:3},{value:"Next version",id:"next-version",level:3},{value:"Public API surface",id:"public-api-surface",level:2},{value:"Core public API",id:"core-public-api",level:3},{value:"Theming public API",id:"theming-public-api",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"release-process",children:"Release process"}),"\n",(0,t.jsxs)(n.p,{children:["Let's see how Docusaurus handles ",(0,t.jsx)(n.strong,{children:"versioning, releases and breaking changes"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"This topic is particularly important for highly customized sites that may have difficulties to upgrade."})}),"\n",(0,t.jsx)(n.h2,{id:"semantic-versioning",children:"Semantic versioning"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(n.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Respecting Semantic Versioning is important for multiple reasons:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It ",(0,t.jsx)(n.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,t.jsx)(n.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,t.jsx)(n.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,t.jsx)(n.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,t.jsx)(n.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["Releasing Docusaurus 2.0 took a very long time. From now on, Docusaurus will ",(0,t.jsx)(n.strong,{children:"release new major versions more regularly"}),". In practice, you can expect a new major version every 2\u20134 months."]}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]})]}),"\n",(0,t.jsx)(n.h3,{id:"major-versions",children:"Major versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"major"})," version number is incremented on ",(0,t.jsx)(n.strong,{children:"every breaking change"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new major version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["a blog post with feature highlights, major bug fixes, ",(0,t.jsx)(n.strong,{children:"breaking changes, and upgrade instructions"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Read our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"})," section to clearly understand what we consider as a breaking change."]})}),"\n",(0,t.jsx)(n.h3,{id:"minor-versions",children:"Minor versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"minor"})," version number is incremented on every significant retro-compatible change."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new minor version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"a blog post with a list of feature highlights and major bug fixes"}),"\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If you only use our ",(0,t.jsx)(n.a,{href:"#public-api-surface",children:"public API surface"}),", you should be able to upgrade in no time!"]})}),"\n",(0,t.jsx)(n.h3,{id:"patch-versions",children:"Patch versions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"patch"})," version number is incremented on bugfixes releases."]}),"\n",(0,t.jsx)(n.p,{children:"Whenever a new patch version is released, we publish:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"an exhaustive changelog entry"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"versions",children:"Versions"}),"\n","\n",(0,t.jsx)(n.p,{children:"The Docusaurus team is usually working on 2 major versions at the same time:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.Fr,{})]}),": the ",(0,t.jsx)(n.strong,{children:"stable"})," version, on the ",(0,t.jsx)(o.Zl,{})," branch"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:["Docusaurus ",(0,t.jsx)(o.CW,{})]}),": the ",(0,t.jsx)(n.strong,{children:"next"})," version, on the ",(0,t.jsx)(o.mq,{})," branch"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.Zl,{})," branch is created just before releasing the first v",(0,t.jsx)(o.Fr,{})," release candidate."]})}),"\n",(0,t.jsx)(n.h3,{id:"stable-version",children:"Stable version"}),"\n",(0,t.jsxs)(n.p,{children:["The stable version (v",(0,t.jsx)(o.Fr,{}),", on ",(0,t.jsx)(o.Zl,{}),") is recommended for most Docusaurus users."]}),"\n",(0,t.jsxs)(n.p,{children:["We regularly backport retro-compatible features, bug and security fixes from ",(0,t.jsx)(o.mq,{})," to ",(0,t.jsx)(o.Zl,{})," with ",(0,t.jsx)(n.code,{children:"git cherry-pick"})," to make them available to those not ready for the next version."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["After a new stable version has been released, the former stable version will continue to receive support only for ",(0,t.jsx)(n.strong,{children:"major security issues"})," for ",(0,t.jsx)(n.strong,{children:"3 months"}),". Otherwise, all features will be frozen and non-critical bugs will not be fixed."]}),(0,t.jsx)(n.p,{children:"It is recommended to upgrade within that time frame to the new stable version."})]}),"\n",(0,t.jsx)(n.h3,{id:"next-version",children:"Next version"}),"\n",(0,t.jsxs)(n.p,{children:["The next version (v",(0,t.jsx)(o.CW,{}),", on ",(0,t.jsx)(o.mq,{}),") is the version the Docusaurus team is currently working on."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(o.mq,{})," branch is the ",(0,t.jsx)(n.strong,{children:"default target branch"})," for all pull requests, including core team and external contributions."]}),"\n",(0,t.jsxs)(n.p,{children:["This version is recommended for ",(0,t.jsx)(n.strong,{children:"early adopters"})," that want to use the latest Docusaurus features as soon as possible. It is also a good way to help us by reporting bugs and giving some feedback."]}),"\n",(0,t.jsx)(n.p,{children:"There are 3 ways to use the next version:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["with an ",(0,t.jsx)(n.code,{children:"alpha"}),", ",(0,t.jsx)(n.code,{children:"beta"})," or ",(0,t.jsx)(n.code,{children:"rc"})," pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with the ",(0,t.jsx)(n.code,{children:"@next"})," npm dist tag for the latest pre-release"]}),"\n",(0,t.jsxs)(n.li,{children:["with a ",(0,t.jsx)(n.a,{href:"/community/canary",children:"canary release"})," for the very latest features"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"The next version passes all our automated tests and is used by the Docusaurus site itself. It is relatively safe: don't be afraid to give it a try."})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"Breaking changes can happen on the next version: detailed upgrade instructions are available in the changelog and pull requests."}),(0,t.jsxs)(n.p,{children:["At the ",(0,t.jsx)(n.code,{children:"beta"})," and ",(0,t.jsx)(n.code,{children:"rc"})," (release candidate) phases, we avoid introducing major breaking changes."]})]}),"\n",(0,t.jsx)(n.h2,{id:"public-api-surface",children:"Public API surface"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus commits to respecting Semantic Versioning. This means that whenever changes occur in Docusaurus public APIs and break backward compatibility, we will increment the ",(0,t.jsx)(n.code,{children:"major"})," version number."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Docusaurus guarantees public API retro-compatibility across ",(0,t.jsx)(n.code,{children:"minor"})," versions. Unless you use internal APIs, ",(0,t.jsx)(n.code,{children:"minor"})," version upgrades should be easy."]})}),"\n",(0,t.jsx)(n.p,{children:"We will outline what accounts as the public API surface."}),"\n",(0,t.jsx)(n.h3,{id:"core-public-api",children:"Core public API"}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Docusaurus config"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus client APIs"}),"\n",(0,t.jsx)(n.li,{children:"Docusaurus CLI"}),"\n",(0,t.jsx)(n.li,{children:"Preset options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin options"}),"\n",(0,t.jsx)(n.li,{children:"Plugin lifecycle APIs"}),"\n",(0,t.jsx)(n.li,{children:"Theme config"}),"\n",(0,t.jsx)(n.li,{children:"Core plugins route component props"}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/types"})," TypeScript types","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"We still retain the freedom to make types stricter (which may break type-checking)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"For non-theme APIs, any documented API is considered public (and will be stable); any undocumented API is considered internal."})}),"\n",(0,t.jsxs)(n.p,{children:['An API being "stable" means if you increment the patch or minor version of your Docusaurus installation without any other change, running ',(0,t.jsx)(n.code,{children:"docusaurus start"})," or ",(0,t.jsx)(n.code,{children:"docusaurus build"})," should not throw an error."]}),"\n",(0,t.jsx)(n.h3,{id:"theming-public-api",children:"Theming public API"}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus has a very flexible theming system:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"You can use custom CSS"}),"\n",(0,t.jsxs)(n.li,{children:["You can ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," any React theme component"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This system also implicitly creates a very large API surface. To be able to move fast and improve Docusaurus, we can't guarantee retro-compatibility."}),"\n",(0,t.jsx)(n.p,{children:"\u2705 Our public theming API includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/styling-layout#theme-class-names",children:"Theme class names"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/styling-layout#styling-your-site-with-infima",children:"Infima"})," class names and CSS variables"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"safe to swizzle"})]}),"\n",(0,t.jsx)(n.li,{children:"The theme user experience"}),"\n",(0,t.jsx)(n.li,{children:"Browser support"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"You may not be able to achieve your site customization through this public API."}),(0,t.jsxs)(n.p,{children:["In this case, please ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use case"})," and we will figure out how to expand our public API."]})]}),"\n",(0,t.jsxs)(n.p,{children:["\u274c Our public theming API ",(0,t.jsx)(n.strong,{children:"excludes"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The DOM structure"}),"\n",(0,t.jsxs)(n.li,{children:["CSS module class names with a hash suffix (usually targeted with ",(0,t.jsx)(n.code,{children:"[class*='myClassName']"})," selectors)"]}),"\n",(0,t.jsxs)(n.li,{children:["React components that are ",(0,t.jsx)(n.a,{href:"/docs/swizzling#what-is-safe-to-swizzle",children:"unsafe or forbidden to swizzle"})]}),"\n",(0,t.jsxs)(n.li,{children:["React components that import from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common/internal"})]}),"\n",(0,t.jsx)(n.li,{children:"The exact visual appearance of the theme"}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling"})," safe components, you might encounter components that import undocumented APIs from ",(0,t.jsx)(n.code,{children:"@docusaurus/theme-common"})," (without the ",(0,t.jsx)(n.code,{children:"/internal"})," subpath)."]}),(0,t.jsx)(n.p,{children:'We still maintain retro-compatibility on those APIs (hence they are marked as "safe"), but we don\'t encourage a direct usage.'})]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file diff --git a/assets/js/27e2fb4b.63c609cf.js b/assets/js/27e2fb4b.63c609cf.js new file mode 100644 index 0000000000..a3798f7c1c --- /dev/null +++ b/assets/js/27e2fb4b.63c609cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92575],{70026:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>h,metadata:()=>t,toc:()=>o});var i=n(24246),a=n(71670);const h={mdx:{format:"md"},date:"2020-10-02T20:00",authors:["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},r="2.0.0-alpha.65",t={permalink:"/changelog/2.0.0-alpha.65",source:"@site/changelog/source/2.0.0-alpha.65.md",title:"2.0.0-alpha.65",description:"New Feature",date:"2020-10-02T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"aakhtar3",alias:"aakhtar3",url:"https://github.com/aakhtar3",imageURL:"https://github.com/aakhtar3.png",key:"aakhtar3"},{name:"Henry V\xe9lez",alias:"abadon7",url:"https://github.com/abadon7",imageURL:"https://github.com/abadon7.png",key:"abadon7"},{name:"hackerman",alias:"aeneasr",url:"https://github.com/aeneasr",imageURL:"https://github.com/aeneasr.png",key:"aeneasr"},{name:"Andrey Rublev",alias:"anru",url:"https://github.com/anru",imageURL:"https://github.com/anru.png",key:"anru"},{name:"Nahiyan Kamal",alias:"ayonious",url:"https://github.com/ayonious",imageURL:"https://github.com/ayonious.png",key:"ayonious"},{name:"R\xe9mi Doreau",alias:"ayshiff",url:"https://github.com/ayshiff",imageURL:"https://github.com/ayshiff.png",key:"ayshiff"},{name:"Gr\xe9gory Heitz",alias:"edno",url:"https://github.com/edno",imageURL:"https://github.com/edno.png",key:"edno"},{name:"Jeremy Hager",alias:"jeremyhager",url:"https://github.com/jeremyhager",imageURL:"https://github.com/jeremyhager.png",key:"jeremyhager"},{name:"Joel Marcey",alias:"JoelMarcey",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JoelMarcey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Long Ho",alias:"longlho",url:"https://github.com/longlho",imageURL:"https://github.com/longlho.png",key:"longlho"},{name:"moonrailgun",alias:"moonrailgun",url:"https://github.com/moonrailgun",imageURL:"https://github.com/moonrailgun.png",key:"moonrailgun"},{name:"Muskan Kumar",alias:"muskanvk",url:"https://github.com/muskanvk",imageURL:"https://github.com/muskanvk.png",key:"muskanvk"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tim Gates",alias:"timgates42",url:"https://github.com/timgates42",imageURL:"https://github.com/timgates42.png",key:"timgates42"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-10-02T20:00",authors:["aakhtar3","abadon7","aeneasr","anru","ayonious","ayshiff","edno","jeremyhager","JoelMarcey","lex111","longlho","moonrailgun","muskanvk","SamChou19815","Simek","slorber","timgates42","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.66",permalink:"/changelog/2.0.0-alpha.66"},nextItem:{title:"2.0.0-alpha.64",permalink:"/changelog/2.0.0-alpha.64"},listPageLink:"/changelog/page/3"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 18",id:"committers-18",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3497",children:"#3497"})," feat(v2): env variable TERSER_PARALLEL to customize TerserPlugin.parallel (",(0,i.jsx)(s.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3446",children:"#3446"})," feat(v2): new docusaurus clear command (",(0,i.jsx)(s.a,{href:"https://github.com/abadon7",children:"@abadon7"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3485",children:"#3485"})," feat(v2): Add @theme-init components to user theme (",(0,i.jsx)(s.a,{href:"https://github.com/edno",children:"@edno"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3467",children:"#3467"})," feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins (",(0,i.jsx)(s.a,{href:"https://github.com/ayshiff",children:"@ayshiff"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3496",children:"#3496"})," feat(v2): migrate bootstrap components to ts (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3474",children:"#3474"})," feat(v2): allow to use array of files in customCss field (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3457",children:"#3457"})," feat(v2): add optional custom wrapper class name for pages based on theme classic Layout (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3517",children:"#3517"})," fix(v1): v1 deploy preview should be available (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3498",children:"#3498"})," fix(v2): fixed props being passed to @svgr/webpack loader (",(0,i.jsx)(s.a,{href:"https://github.com/anru",children:"@anru"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3456",children:"#3456"})," fix(v2): use valid value for crossorigin attribute (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3427",children:"#3427"})," fix(v2): normalizeUrl edge cases (",(0,i.jsx)(s.a,{href:"https://github.com/ayshiff",children:"@ayshiff"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3472",children:"#3472"})," fix(v2): Show dropdown instead of a single button when there are two versions (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3441",children:"#3441"})," fix(v2): fixing typo in error message (",(0,i.jsx)(s.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3499",children:"#3499"})," chore(v2): upgrade Infima to 0.2.0-alpha.13 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3502",children:"#3502"})," docs(v2): add doc for wrapping theme components with @theme-original and @theme-init (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3473",children:"#3473"})," misc: add License to the documentation (",(0,i.jsx)(s.a,{href:"https://github.com/muskanvk",children:"@muskanvk"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3492",children:"#3492"})," docs(v2): Added drone.io publish docs #3491 (",(0,i.jsx)(s.a,{href:"https://github.com/aakhtar3",children:"@aakhtar3"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3479",children:"#3479"})," docs(v2): remove redundant new line in code block (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3448",children:"#3448"})," chore(v2): fix theme classic navbar style docs (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-1.x"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3504",children:"#3504"})," chore(v1): move v1 docs inside website-1.x (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3506",children:"#3506"})," chore(v2): v2 website should make it easy to contribute to upstream docs (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3511",children:"#3511"})," misc: update CODEOWNERS (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3477",children:"#3477"})," chore(v2): remove alpha 58 doc (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3453",children:"#3453"})," test(v2): add protocol relative uri validation test (",(0,i.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-18",children:"Committers: 18"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Andrey Rublev (",(0,i.jsx)(s.a,{href:"https://github.com/anru",children:"@anru"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Bartosz Kaszubowski (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Gr\xe9gory Heitz (",(0,i.jsx)(s.a,{href:"https://github.com/edno",children:"@edno"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Henry V\xe9lez (",(0,i.jsx)(s.a,{href:"https://github.com/abadon7",children:"@abadon7"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jeremy Hager (",(0,i.jsx)(s.a,{href:"https://github.com/jeremyhager",children:"@jeremyhager"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joel Marcey (",(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"@JoelMarcey"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Long Ho (",(0,i.jsx)(s.a,{href:"https://github.com/longlho",children:"@longlho"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Muskan Kumar (",(0,i.jsx)(s.a,{href:"https://github.com/muskanvk",children:"@muskanvk"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Nahiyan Kamal (",(0,i.jsx)(s.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["R\xe9mi Doreau (",(0,i.jsx)(s.a,{href:"https://github.com/ayshiff",children:"@ayshiff"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sam Zhou (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tim Gates (",(0,i.jsx)(s.a,{href:"https://github.com/timgates42",children:"@timgates42"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Yangshun Tay (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/aakhtar3",children:"@aakhtar3"})}),"\n",(0,i.jsxs)(s.li,{children:["hackerman (",(0,i.jsx)(s.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["moonrailgun (",(0,i.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>r});var i=n(27378);const a={},h=i.createContext(a);function r(e){const s=i.useContext(h);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(h.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29291bc0.cac136f3.js b/assets/js/29291bc0.cac136f3.js new file mode 100644 index 0000000000..3c64b926fd --- /dev/null +++ b/assets/js/29291bc0.cac136f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7275],{29488:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>r,default:()=>a,frontMatter:()=>c,metadata:()=>h,toc:()=>u});var i=n(24246),l=n(71670);const c={mdx:{format:"md"},date:"2020-06-18T20:00",authors:["aeneasr","anshulrgoyal","belokonm","Drewbi","fanny","guillaumejacquart","JoelMarcey","jsjoeio","lex111","moonrailgun","Nishikoh","pglezen","SamChou19815","slorber","teikjun","tetunori","TomBrien","yangshun"]},r="2.0.0-alpha.58",h={permalink:"/changelog/2.0.0-alpha.58",source:"@site/changelog/source/2.0.0-alpha.58.md",title:"2.0.0-alpha.58",description:"New Feature",date:"2020-06-18T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"hackerman",alias:"aeneasr",url:"https://github.com/aeneasr",imageURL:"https://github.com/aeneasr.png",key:"aeneasr"},{name:"Anshul Goyal",alias:"anshulrgoyal",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png",key:"anshulrgoyal"},{name:"belokonm",alias:"belokonm",url:"https://github.com/belokonm",imageURL:"https://github.com/belokonm.png",key:"belokonm"},{name:"Drew Alexander",alias:"Drewbi",url:"https://github.com/Drewbi",imageURL:"https://github.com/Drewbi.png",key:"Drewbi"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"Guillaume Jacquart",alias:"guillaumejacquart",url:"https://github.com/guillaumejacquart",imageURL:"https://github.com/guillaumejacquart.png",key:"guillaumejacquart"},{name:"Joel Marcey",alias:"JoelMarcey",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JoelMarcey"},{name:"JavaScript Joe",alias:"jsjoeio",url:"https://github.com/jsjoeio",imageURL:"https://github.com/jsjoeio.png",key:"jsjoeio"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"moonrailgun",alias:"moonrailgun",url:"https://github.com/moonrailgun",imageURL:"https://github.com/moonrailgun.png",key:"moonrailgun"},{name:"Koki Nishihara",alias:"Nishikoh",url:"https://github.com/Nishikoh",imageURL:"https://github.com/Nishikoh.png",key:"Nishikoh"},{name:"Paul Glezen",alias:"pglezen",url:"https://github.com/pglezen",imageURL:"https://github.com/pglezen.png",key:"pglezen"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"tetunori",alias:"tetunori",url:"https://github.com/tetunori",imageURL:"https://github.com/tetunori.png",key:"tetunori"},{name:"Tom Brien",alias:"TomBrien",url:"https://github.com/TomBrien",imageURL:"https://github.com/TomBrien.png",key:"TomBrien"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-06-18T20:00",authors:["aeneasr","anshulrgoyal","belokonm","Drewbi","fanny","guillaumejacquart","JoelMarcey","jsjoeio","lex111","moonrailgun","Nishikoh","pglezen","SamChou19815","slorber","teikjun","tetunori","TomBrien","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.59",permalink:"/changelog/2.0.0-alpha.59"},nextItem:{title:"2.0.0-alpha.57",permalink:"/changelog/2.0.0-alpha.57"},listPageLink:"/changelog/page/3"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 18",id:"committers-18",level:2}];function t(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2916",children:"#2916"})," feat(v2): add a banner that links to latest version of documentation (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2682",children:"#2682"})," feat(v2): expanded sidebar categories by default (",(0,i.jsx)(s.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2928",children:"#2928"})," feat(v2): Implement proof-of-concept Docusaurus Debug Dashboard (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2903",children:"#2903"})," feat(v2): Allow configuring babel via babel.config.js (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2793",children:"#2793"})," feat(v2): docusaurus-plugin-client-redirects (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2826",children:"#2826"})," feat(v2): allow adding components to react-live scope (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2856",children:"#2856"})," feat(v2): allow specifying meta image for blog posts (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2841",children:"#2841"})," feat(v2): Allow swizzling prism-include-languages in theme-classic (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2895",children:"#2895"})," chore(v2): replace classnames with clsx (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2861",children:"#2861"})," fix(v2): do not create route for document that serve as docs home page (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2682",children:"#2682"})," feat(v2): expanded sidebar categories by default (",(0,i.jsx)(s.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2905",children:"#2905"})," fix(v2): fix docs homepage permalink issues (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2932",children:"#2932"})," fix(v2): Add hooks to detect window resize, toggle off sidebar and navbar in desktop (",(0,i.jsx)(s.a,{href:"https://github.com/guillaumejacquart",children:"@guillaumejacquart"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2909",children:"#2909"})," fix(v2): adjust anchor offset when routes switched (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2896",children:"#2896"})," fix(v2): set correct canonical url for docs home page (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2893",children:"#2893"})," fix(v2): Do not automatically change tab when a non-existing option is selected (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2888",children:"#2888"})," fix(v2): restore styles for menu scrollbar (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2857",children:"#2857"})," fix(v2): treat inline code in raw HTML as native element (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2951",children:"#2951"})," fix(v2): Add optional-chaining and nullish-coalescing babel plugin (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2921",children:"#2921"})," fix(v2): upgrade react-loadable-ssr-addon (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2854",children:"#2854"})," fix(v2): fix broken build when swizzled NotFound component exist (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2829",children:"#2829"})," fix(v2): Fix plugin path resolution (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2944",children:"#2944"})," fix(v2): Declare @docusaurus-plugin-debug as dependency of preset classic (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2902",children:"#2902"})," feat(v2): add nojekyll file to static folder for all templates (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2860",children:"#2860"})," fix(v2): bootstrap doc sidebar (",(0,i.jsx)(s.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2874",children:"#2874"})," fix(v2): Getting Started URL (",(0,i.jsx)(s.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2861",children:"#2861"})," fix(v2): do not create route for document that serve as docs home page (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2867",children:"#2867"})," fix(v2): fix FOUC in doc sidebar and various improvements (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2838",children:"#2838"})," fix(v2): use base url to navigate to search page (",(0,i.jsx)(s.a,{href:"https://github.com/tetunori",children:"@tetunori"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2855",children:"#2855"})," fix(v2): strip images and footnotes for excerpt correctly (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2835",children:"#2835"})," fix(v2): set proper font for live editor (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2884",children:"#2884"})," polish(v2): improve Docusaurus 1 to 2 migration developer experience (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2870",children:"#2870"})," refactor(v2): combine nested theme providers into one (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2880",children:"#2880"})," fix(v2): render as regular text uncollapsible categories (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2864",children:"#2864"})," refactor(v2): add aria role for doc sidebar (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2859",children:"#2859"})," refactor(v2): add aria label to paginators (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2858",children:"#2858"})," refactor(v2): add missing main landmark for needed pages (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2862",children:"#2862"})," Updated banner in solidarity (",(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"@JoelMarcey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2946",children:"#2946"})," docs(v2): add require.resolve to plugin imports on remaining pages (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2941",children:"#2941"})," docs(v2): wrap all plugin imports in require.resolve() (",(0,i.jsx)(s.a,{href:"https://github.com/TomBrien",children:"@TomBrien"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2934",children:"#2934"})," docs(v2): add useThemeContext note (",(0,i.jsx)(s.a,{href:"https://github.com/Drewbi",children:"@Drewbi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2935",children:"#2935"})," docs(v2): Add router implementation note (",(0,i.jsx)(s.a,{href:"https://github.com/Drewbi",children:"@Drewbi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2933",children:"#2933"})," docs(v2): add documentation for multiple blogs (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2910",children:"#2910"})," docs(v2): fix GitHub action workflow in docs (",(0,i.jsx)(s.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2886",children:"#2886"})," docs(v2): fix typo in command on installation page (",(0,i.jsx)(s.a,{href:"https://github.com/pglezen",children:"@pglezen"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2887",children:"#2887"})," docs(v2): make .nojekyll warning more obvious (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2865",children:"#2865"})," docs(v2): description field in frontmatter of blog post (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2839",children:"#2839"})," docs(v2): _index docs page does not show a sidebar (",(0,i.jsx)(s.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2852",children:"#2852"})," misc: move runme demo in block quote about v2 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2842",children:"#2842"})," docs(v2): Update ZEIT to Vercel (",(0,i.jsx)(s.a,{href:"https://github.com/Nishikoh",children:"@Nishikoh"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2948",children:"#2948"})," refactor(v2): legacy export = syntax (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2922",children:"#2922"})," misc(v2): better dx: yarn clear, yarn watch, yarn serve (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2929",children:"#2929"})," chore(v2): Run E2E tests in CI (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2899",children:"#2899"})," chore(deps): bump websocket-extensions from 0.1.3 to 0.1.4 (",(0,i.jsx)(s.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2897",children:"#2897"})," refactor(v2): synchronize yarn/npm command on site (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2931",children:"#2931"})," chore(v2): remove unused hooks from bootstrap theme (",(0,i.jsx)(s.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-1.x"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2906",children:"#2906"})," chore(v2): fix async tests (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2858",children:"#2858"})," refactor(v2): add missing main landmark for needed pages (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2936",children:"#2936"})," perf(v2): convert synchronous filewrite to asynchronous (",(0,i.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2900",children:"#2900"})," chore(v2): replace Clipboard with copy-text-to-clipboard (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2895",children:"#2895"})," chore(v2): replace classnames with clsx (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-18",children:"Committers: 18"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Anshul Goyal (",(0,i.jsx)(s.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Drew Alexander (",(0,i.jsx)(s.a,{href:"https://github.com/Drewbi",children:"@Drewbi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Fanny (",(0,i.jsx)(s.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Guillaume Jacquart (",(0,i.jsx)(s.a,{href:"https://github.com/guillaumejacquart",children:"@guillaumejacquart"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joe Previte (",(0,i.jsx)(s.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joel Marcey (",(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"@JoelMarcey"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Koki Nishihara (",(0,i.jsx)(s.a,{href:"https://github.com/Nishikoh",children:"@Nishikoh"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Paul Glezen (",(0,i.jsx)(s.a,{href:"https://github.com/pglezen",children:"@pglezen"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sam Zhou (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Teik Jun (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tom Brien (",(0,i.jsx)(s.a,{href:"https://github.com/TomBrien",children:"@TomBrien"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Yangshun Tay (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/belokonm",children:"@belokonm"})}),"\n",(0,i.jsxs)(s.li,{children:["hackerman (",(0,i.jsx)(s.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["moonrailgun (",(0,i.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["tetunori (",(0,i.jsx)(s.a,{href:"https://github.com/tetunori",children:"@tetunori"}),")"]}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(t,{...e})}):t(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>h,a:()=>r});var i=n(27378);const l={},c=i.createContext(l);function r(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2ac81c1b.ccd4e0d2.js b/assets/js/2ac81c1b.ccd4e0d2.js new file mode 100644 index 0000000000..1e1d1e6eb6 --- /dev/null +++ b/assets/js/2ac81c1b.ccd4e0d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93254],{3986:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>h,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>u,toc:()=>l});var o=s(24246),a=s(71670);const n={tags:["paginated-tag"],authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}]},i="Post with duplicate title",u={permalink:"/tests/blog/2021/09/13/dup-title",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-09-13-dup-title.mdx",source:"@site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx",title:"Post with duplicate title",description:"See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.",date:"2021-09-13T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:2,hasTruncateMarker:!1,authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png",imageURL:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}],frontMatter:{tags:["paginated-tag"],authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png",imageURL:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}]},unlisted:!1,prevItem:{title:"Blog post MDX Feed tests",permalink:"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"},nextItem:{title:"Multiple authors",permalink:"/tests/blog/2021/08/23/multiple-authors"}},h={authorsImageUrls:[void 0,void 0,void 0,void 0]},l=[];function m(t){const e={a:"a",p:"p",...(0,a.a)(),...t.components};return(0,o.jsxs)(e.p,{children:["See ",(0,o.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/issues/6059",children:"https://github.com/facebook/docusaurus/issues/6059"}),". This one and ",(0,o.jsx)(e.a,{href:"/tests/blog/2021/11/13/dup-title",children:"2021-11-13-dup-title.md"})," should both show up."]})}function c(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(m,{...t})}):m(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>u,a:()=>i});var o=s(27378);const a={},n=o.createContext(a);function i(t){const e=o.useContext(n);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:i(t.components),o.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b8147f4.e3b90fc6.js b/assets/js/2b8147f4.e3b90fc6.js new file mode 100644 index 0000000000..58fb593318 --- /dev/null +++ b/assets/js/2b8147f4.e3b90fc6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65392],{44627:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-07-20T20:00"},s="2.0.0-alpha.22",c={permalink:"/changelog/2.0.0-alpha.22",source:"@site/changelog/source/2.0.0-alpha.22.md",title:"2.0.0-alpha.22",description:"- Add missing dependencies on @docusaurus/preset-classic",date:"2019-07-20T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-20T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.23",permalink:"/changelog/2.0.0-alpha.23"},nextItem:{title:"2.0.0-alpha.21",permalink:"/changelog/2.0.0-alpha.21"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2bbd92ba.591e29f6.js b/assets/js/2bbd92ba.591e29f6.js new file mode 100644 index 0000000000..35339a6656 --- /dev/null +++ b/assets/js/2bbd92ba.591e29f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44525],{35233:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=n(24246),o=n(71670);const s={mdx:{format:"md"},date:"2019-10-14T20:00"},c="2.0.0-alpha.27",l={permalink:"/changelog/2.0.0-alpha.27",source:"@site/changelog/source/2.0.0-alpha.27.md",title:"2.0.0-alpha.27",description:"- Add @theme/Tabs which can be used to implement multi-language code tabs.",date:"2019-10-14T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-14T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.28",permalink:"/changelog/2.0.0-alpha.28"},nextItem:{title:"2.0.0-alpha.26",permalink:"/changelog/2.0.0-alpha.26"},listPageLink:"/changelog/page/5"},r={authorsImageUrls:[]},i=[];function d(e){const t={code:"code",li:"li",ul:"ul",...(0,o.a)(),...e.components};return(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["Add ",(0,a.jsx)(t.code,{children:"@theme/Tabs"})," which can be used to implement multi-language code tabs."]}),"\n",(0,a.jsxs)(t.li,{children:["Implement ",(0,a.jsx)(t.code,{children:"custom_edit_url"})," and ",(0,a.jsx)(t.code,{children:"hide_title"})," markdown header for docusaurus v1 feature parity."]}),"\n",(0,a.jsx)(t.li,{children:"Reduce memory usage and slightly faster production build."}),"\n",(0,a.jsx)(t.li,{children:"Misc dependency upgrades."}),"\n"]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>c});var a=n(27378);const o={},s=a.createContext(o);function c(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c6d53a8.e7b550f2.js b/assets/js/2c6d53a8.e7b550f2.js new file mode 100644 index 0000000000..0191a8c421 --- /dev/null +++ b/assets/js/2c6d53a8.e7b550f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[49409],{9947:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.pdf"},4090:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/files/someFile-aef54daa5b1fe3359942dac7ade1daae.xyz"},36261:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js"},76804:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json"},97408:(e,n,t)=>{t.d(n,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},5254:(e,n,t)=>{t.d(n,{Z:()=>x});var r=t(24246),o=t(27378),s=t(40624),i=t(80474),c=t(29088),l=t(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function d(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function u(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function b(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function h(e,n){return!!e&&(e===n||h(e.parentElement,n))}function m(e){var{summary:n,children:t}=e,m=b(e,["summary","children"]);(0,i.Z)().collectAnchor(m.id);const f=(0,c.Z)(),g=(0,o.useRef)(null),{collapsed:j,setCollapsed:y}=(0,l.u)({initialState:!m.open}),[O,x]=(0,o.useState)(m.open),A=o.isValidElement(n)?n:(0,r.jsx)("summary",{children:null!=n?n:"Details"});return(0,r.jsxs)("details",u(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){d(e,n,t[n])}))}return e}({},m),{ref:g,open:O,"data-collapsed":j,className:(0,s.Z)(a.details,f&&a.isBrowser,m.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const n=e.target;p(n)&&h(n,g.current)&&(e.preventDefault(),j?(y(!1),x(!0)):y(!0))},children:[A,(0,r.jsx)(l.z,{lazy:!1,collapsed:j,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{y(e),x(!e)},children:(0,r.jsx)("div",{className:a.collapsibleContent,children:t})})]}))}const f={details:"details_Cn_P"};function g(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(){return j=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},j.apply(this,arguments)}function y(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}const O="alert alert--info";function x(e){var n=j({},e);return(0,r.jsx)(m,y(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){g(e,n,t[n])}))}return e}({},n),{className:(0,s.Z)(O,f.details,n.className)}))}},61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>N});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),c=t(3620),l=t(44479),a=t(62821),d=t(52196),u=t(53589);function b(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function h(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return h(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,a._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){b(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=m(e),[i,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[a,d]=g({queryString:t,groupId:r}),[b,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),h=(()=>{const e=null!=a?a:b;return f({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{h&&c(h)}),[h]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var y=t(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function A(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){x(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function w({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=c[r].value;s!==t&&(a(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",k(A({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function v({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function P(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(w,A({},e,n)),(0,r.jsx)(v,A({},e,n))]})}function N(e){const n=(0,y.Z)();return(0,r.jsx)(P,k(A({},e),{children:h(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),o=(t(27378),t(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:l(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ie});var r={};t.r(r),t.d(r,{ButtonExample:()=>E});var o=t(24246),s=t(27378),i=t(40624),c=t(29088),l=t(32711),a=t(36712),d=t(4423),u=t(94544),b=t(30691),p=t(78844),h=t(73919);function m(){const{prism:e}=(0,h.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var f=t(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function x(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function A({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(g.playgroundHeader),children:e})}function k(){return(0,o.jsx)("div",{children:"Loading..."})}function w(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(k,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(f.Z,{fallback:e=>(0,o.jsx)(b.Ac,y({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function v(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(A,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(w,{})})]})}function P(){const e=(0,c.Z)();return(0,o.jsx)(l.uz,{className:g.playgroundEditor},String(e))}function N(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(A,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const C=e=>`${e};`;function S(e){var n,{children:t,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:c}}=i,a=m();var u;const b=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(l.nu,O(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:b,transformCode:null!=r?r:C,theme:a},s),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{}),(0,o.jsx)(N,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(N,{}),(0,o.jsx)(v,{})]})}))})}function B(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function T(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){B(e,n,t[n])}))}return e}function R(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function E(e){return(0,o.jsx)("button",R(T({type:"button"},e),{style:T({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const M=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var I,Z,D=t(89583),J=t(6324),G=t.n(J);function V(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const W=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),q={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=(H=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){V(e,n,t[n])}))}return e}({},q),Q=null!=(Q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?Q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(H,Object.getOwnPropertyDescriptors(Q)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(Q)).forEach((function(e){Object.defineProperty(H,e,Object.getOwnPropertyDescriptor(Q,e))})),H);var H,Q;const X=Object.keys(q);function K(e,n){const t=e.map((e=>{const{start:t,end:r}=z[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function U(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&F.test(s)){const e=s.match(F).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=G()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return K(["js","jsBlock"],n);case"jsx":case"tsx":return K(["js","jsBlock","jsx"],n);case"html":return K(["js","jsBlock","html"],n);case"python":case"py":case"bash":return K(["bash"],n);case"markdown":case"md":return K(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return K(["tex"],n);case"lua":case"haskell":case"sql":return K(["lua"],n);case"wasm":return K(["wasm"],n);case"vb":case"vba":case"visual-basic":return K(["vb","rem"],n);case"vbnet":return K(["vbnet","rem"],n);case"batch":return K(["rem"],n);case"basic":return K(["rem","f90"],n);case"fsharp":return K(["js","ml"],n);case"ocaml":case"sml":return K(["ml"],n);case"fortran":return K(["f90"],n);case"cobol":return K(["cobol"],n);default:return K(X,n)}}(r,o),c=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<c.length;){const e=c[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));a[n]?l[a[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),c.splice(p,1)}t=c.join("\n");const b={};return Object.entries(l).forEach((([e,{range:n}])=>{G()(n).forEach((n=>{var t;null!==(t=(I=b)[Z=n])&&void 0!==t||(I[Z]=[]),b[n].push(e)}))})),{lineClassNames:b,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function _(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function $(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(m());return(0,o.jsx)(n,$(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){_(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,D.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ae(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e,key:n})),n)));return(0,o.jsxs)("span",ue(de({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function he(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function fe(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){he(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:n}){const[t,r]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,Oe.copyButton,t&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(fe,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function Ae(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ke(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function we(e){return(0,o.jsx)("svg",ke(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ae(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ve={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:n,isEnabled:t}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&ve.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(we,{className:ve.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ne({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:l}){const{prism:{defaultLanguage:a,magicComments:d}}=(0,h.L)();var u;const b=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:a),p=m(),f=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,c),(0,s.useEffect)((()=>{c()}),[e,c]),(0,s.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),g=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(W))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:j,code:y}=U(e,{metastring:t,language:b,magicComments:d}),O=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,b&&!n.includes(`language-${b}`)&&`language-${b}`),children:[g&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:p,code:y,language:null!=b?b:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,O&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(be,{line:e,getLineProps:r,getTokenProps:s,classNames:j[n],showLineNumbers:O},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,o.jsx)(Pe,{className:te.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,o.jsx)(xe,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Se(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Be(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Te(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Te(e,n,t[n])}))}return e}const Ee=(Le=function(e){var{children:n}=e,t=Be(e,["children"]);const r=(0,c.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?Ne:re;return(0,o.jsx)(l,Se(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(S,Re({scope:M},e)):(0,o.jsx)(Le,Re({},e))});var Le;function Me(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){return(0,o.jsx)(Ee,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Me(e,n,t[n])}))}return e}({},e))}},72143:(e,n,t)=>{t.d(n,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},70182:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/\u56fe\u7247-c3c014b00b204c4fec2ad5e402e5521d.png"},73038:(e,n,t)=>{t.d(n,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},79649:(e,n,t)=>{t.d(n,{Z:()=>r});const r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},37898:(e,n,t)=>{t.r(n),t.d(n,{TestLink:()=>j,assets:()=>g,contentTitle:()=>m,default:()=>x,frontMatter:()=>h,metadata:()=>f,toc:()=>y});var r=t(24246),o=t(71670),s=t(97555),i=t(61132),c=t(27378);function l(){const[e,n]=(0,c.useState)(!1);return(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"MyComponent rendered !"}),(0,r.jsxs)("p",{children:["bool=",e?"true":"false"]}),(0,r.jsx)("p",{children:(0,r.jsx)("button",{onClick:()=>n((e=>!e)),children:"toggle bool"})})]})}var a=t(6698),d=t(38112),u=t(97408),b=t(5254),p=t(41428);const h={title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},m="Markdown .mdx tests",f={type:"mdx",permalink:"/tests/pages/markdown-tests-mdx",source:"@site/_dogfooding/_pages tests/markdown-tests-mdx.mdx",title:"Markdown Page tests title",description:"Markdown Page tests description",frontMatter:{title:"Markdown Page tests title",description:"Markdown Page tests description",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1706203091e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/markdown-tests-mdx.mdx",unlisted:!1},g={};function j({noCheck:e,...n}){return(0,r.jsx)(p.Z,{...n,"data-noBrokenLinkCheck":e,children:(e?"\u274c":"\u2705")+" "+(n.to??n.href)+(n.target?` (target=${n.target})`:"")})}const y=[{value:"Using absolute path",id:"using-absolute-path",level:3},{value:"Tab",id:"tab",level:3},{value:"Comments",id:"comments",level:2},{value:"Import code block from source code file",id:"import-code-block-from-source-code-file",level:2},{value:"Test",id:"test",level:2},{value:"Code block test",id:"code-block-test",level:2},{value:"Mermaid",id:"mermaid",level:2},{value:"Custom heading ID",id:"custom",level:2},{value:"Weird heading",id:"\u4f60\u597d",level:3},{value:"Weird heading",id:"2022.1.1",level:3},{value:"Weird heading",id:"a#b",level:3},{value:"Weird heading",id:"a b",level:3},{value:"Weird heading",id:"a{b",level:3},{value:"Pipe",id:"pipe",level:2},{value:"Images edge cases",id:"images-edge-cases",level:2},{value:"Details",id:"details",level:2},{value:"Task list",id:"task-list",level:2},{value:"Emojis",id:"emojis",level:2},{value:"Admonitions",id:"admonitions",level:2},{value:"Linking",id:"linking",level:2},{value:"Linking to assets",id:"linking-to-assets",level:3},{value:"Linking to non-SPA page hosted within website",id:"linking-to-non-spa-page-hosted-within-website",level:3},{value:"Linking to non-SPA page with Link component",id:"linking-to-non-spa-page-with-link-component",level:3},{value:"Linking to JSON",id:"linking-to-json",level:3}];function O(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",input:"input",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:()=>alert("unsafe :s"),children:"Should not alert"}),"\n",(0,r.jsx)(n.h1,{id:"markdown-mdx-tests",children:"Markdown .mdx tests"}),"\n",(0,r.jsx)(n.p,{children:"This is a page generated from Markdown to illustrate the Markdown page feature and test some edge cases."}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Useful information."})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Button() {\n return (\n <button type=\"button\" onClick={() => alert('hey')}>\n Click me!\n </button>\n );\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"using-absolute-path",children:"Using absolute path"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{src:t(79649).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(n.h3,{id:"tab",children:"Tab"}),"\n","\n","\n",(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"apple",label:"Apple",default:!0,children:(0,r.jsx)(n.p,{children:"This is an apple \ud83c\udf4e"})}),(0,r.jsx)(i.Z,{value:"orange",label:"Orange",children:(0,r.jsx)(n.p,{children:"This is an orange \ud83c\udf4a"})}),(0,r.jsx)(i.Z,{value:"banana",label:"Banana",children:(0,r.jsx)(n.p,{children:"This is a banana \ud83c\udf4c"})})]}),"\n",(0,r.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,r.jsx)(n.p,{children:"Html comment: "}),"\n",(0,r.jsx)(n.p,{children:"Html comment multi-line:"}),"\n",(0,r.jsx)(n.p,{children:"MDX comment: "}),"\n",(0,r.jsx)(n.p,{children:"MDX comment multi-line:"}),"\n","\n",(0,r.jsx)(n.h2,{id:"import-code-block-from-source-code-file",children:"Import code block from source code file"}),"\n","\n","\n",(0,r.jsx)(n.p,{children:"Let's say you have a React component."}),"\n",(0,r.jsx)(n.p,{children:"You can import and use it in MDX:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import MyComponent from './myComponent';\n\n<MyComponent />;\n"})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(l,{})}),"\n",(0,r.jsxs)(n.p,{children:["But you can also display its source code directly in MDX, thanks to ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\n\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock className=\"language-jsx\">{MyComponentSource}</CodeBlock>;\n"})}),"\n","\n","\n",(0,r.jsx)(a.Z,{children:(0,r.jsx)(d.Z,{className:"language-jsx",children:u.Z})}),"\n",(0,r.jsx)(n.h2,{id:"test",children:"Test"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Demo() {\n useEffect(() => console.log('mount'), []);\n return null;\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"code-block-test",children:"Code block test"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Title"',children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n // highlight-start\n {/* prettier-ignore */}\n long long long long long long long long long long long long line\n {/* prettier-ignore */}\n // highlight-end\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:"live",live:!0,children:"function Clock(props) {\n const [date, setDate] = useState(new Date());\n useEffect(() => {\n var timerID = setInterval(() => tick(), 1000);\n\n return function cleanup() {\n clearInterval(timerID);\n };\n });\n\n function tick() {\n setDate(new Date());\n }\n\n return (\n <div>\n <h2>It is {date.toLocaleTimeString()}.</h2>\n </div>\n );\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"mermaid",children:"Mermaid"}),"\n",(0,r.jsx)(n.mermaid,{value:"sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Health check\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John--\x3e>Alice: Great!\n John->>Bob: How about you?\n Bob--\x3e>John: Jolly good!"}),"\n",(0,r.jsx)(n.h2,{id:"custom",children:"Custom heading ID"}),"\n",(0,r.jsx)(n.h3,{id:"\u4f60\u597d",children:"Weird heading"}),"\n",(0,r.jsx)(n.h3,{id:"2022.1.1",children:"Weird heading"}),"\n",(0,r.jsx)(n.h3,{id:"a#b",children:"Weird heading"}),"\n",(0,r.jsx)(n.h3,{id:"a b",children:"Weird heading"}),"\n",(0,r.jsx)(n.h3,{id:"a{b",children:"Weird heading"}),"\n",(0,r.jsx)(n.h2,{id:"pipe",children:"Pipe"}),"\n",(0,r.jsxs)(n.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsxs)(n.p,{children:["Code tag + double pipe: ",(0,r.jsx)("code",{children:"||"})]}),"\n",(0,r.jsx)(n.h2,{id:"images-edge-cases",children:"Images edge cases"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{src:t(73038).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{src:t(70182).Z+"",width:"2282",height:"1066"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{src:t(72143).Z+"",width:"200",height:"200"})}),"\n",(0,r.jsx)(n.h2,{id:"details",children:"Details"}),"\n",(0,r.jsx)(b.Z,{children:(0,r.jsx)(n.p,{children:"Details without a summary"})}),"\n","\n",(0,r.jsx)(b.Z,{summary:"My Headline",children:"Some Text"}),"\n",(0,r.jsx)(b.Z,{children:"Some Text"}),"\n",(0,r.jsx)(n.p,{children:"This is a fragment:"}),"\n",(0,r.jsx)(r.Fragment,{children:"Hello"}),"\n",(0,r.jsx)(n.p,{children:"It should work :)"}),"\n",(0,r.jsx)(n.h2,{id:"task-list",children:"Task list"}),"\n",(0,r.jsx)(n.p,{children:"A list:"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Simple"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Has simple"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Styles"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Another list:"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{children:["Nested","\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Tasks"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Should be well-formatted"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","No matter"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","How weird"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Can be arbitrarily nested:"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{children:["Level","\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{children:["Another level","\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{children:["Deeper","\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Task"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"emojis",children:"Emojis"}),"\n",(0,r.jsxs)(n.p,{children:["Emojis in this text will be replaced with ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/remark-emoji",children:"remark-emoji"}),": ","\ud83d\udc36"," ","\ud83d\udc4d"]}),"\n",(0,r.jsx)(n.h2,{id:"admonitions",children:"Admonitions"}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(n.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (old syntax)"]}),(0,r.jsx)(n.p,{children:"Admonition body"})]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.mdxAdmonitionTitle,{children:["Interpolated ",(0,r.jsx)(n.code,{children:"title"})," with a ",(0,r.jsx)("button",{style:{color:"red"},onClick:()=>alert("it works"),children:"button"})," (directive label syntax)"]}),(0,r.jsx)(n.p,{children:"Admonition body"})]}),"\n",(0,r.jsx)(n.admonition,{type:"important",children:(0,r.jsxs)(n.p,{children:["Admonition alias ",(0,r.jsx)(n.code,{children:":::important"})," should have Important title"]})}),"\n",(0,r.jsxs)(n.admonition,{title:"title",type:"note",children:[(0,r.jsxs)(n.p,{children:["Some ",(0,r.jsx)(n.strong,{children:"content"})," with ",(0,r.jsx)(n.em,{children:"Markdown"})," ",(0,r.jsx)(n.code,{children:"syntax"}),"."]}),(0,r.jsxs)(n.admonition,{title:"nested Title",type:"note",children:[(0,r.jsx)(n.admonition,{title:"very nested Title",type:"tip",children:(0,r.jsxs)(n.p,{children:["Some ",(0,r.jsx)(n.strong,{children:"content"})," with ",(0,r.jsx)(n.em,{children:"Markdown"})," ",(0,r.jsx)(n.code,{children:"syntax"}),"."]})}),(0,r.jsxs)(n.p,{children:["Some ",(0,r.jsx)(n.strong,{children:"content"})," with ",(0,r.jsx)(n.em,{children:"Markdown"})," ",(0,r.jsx)(n.code,{children:"syntax"}),"."]})]}),(0,r.jsx)(n.p,{children:"hey"})]}),"\n",(0,r.jsxs)(n.admonition,{title:"Use tabs in admonitions",type:"tip",children:[(0,r.jsx)(n.admonition,{title:"Admonition nested",type:"info",children:(0,r.jsx)(n.p,{children:"test"})}),(0,r.jsxs)(s.Z,{children:[(0,r.jsx)(i.Z,{value:"apple",label:"Apple",children:(0,r.jsx)(n.admonition,{title:"Admonition in tab",type:"note",children:(0,r.jsx)(n.p,{children:"test"})})}),(0,r.jsx)(i.Z,{value:"orange",label:"Orange",children:"This is an orange \ud83c\udf4a"}),(0,r.jsx)(i.Z,{value:"banana",label:"Banana",children:"This is a banana \ud83c\udf4c"})]})]}),"\n",(0,r.jsx)(n.h2,{id:"linking",children:"Linking"}),"\n",(0,r.jsx)(n.p,{children:"This is a test page to see if Docusaurus Markdown features are working properly"}),"\n",(0,r.jsx)(n.h3,{id:"linking-to-assets",children:"Linking to assets"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3337",children:"#3337"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(9947).Z+"",children:"/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(4090).Z+"",children:"/someFile.xyz"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(9947).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.pdf"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(4090).Z+"",children:"@site/_dogfooding/_asset-tests/someFile.xyz"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"linking-to-non-spa-page-hosted-within-website",children:"Linking to non-SPA page hosted within website"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3309",children:"#3309"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"pathname:///dogfooding/javadoc",children:"pathname:///dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"pathname:///dogfooding/javadoc/index.html",children:"pathname:///dogfooding/javadoc/index.html"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"pathname://../dogfooding/javadoc",children:"pathname://../dogfooding/javadoc"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"pathname://../dogfooding/javadoc/index.html",children:"pathname://../dogfooding/javadoc/index.html"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"linking-to-non-spa-page-with-link-component",children:"Linking to non-SPA page with Link component"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9758",children:"#9758"}),", these external urls should not be reported by the broken links checker:"]}),"\n","\n","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{to:"pathname:///dogfooding/javadoc#goodlink1"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{href:"pathname:///dogfooding/javadoc#goodlink2"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{to:"/dogfooding/javadoc#goodlink3",target:"_blank"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{href:"/dogfooding/javadoc#goodlink4",target:"_blank"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"These links are broken (try to single click on them) and should be reported. We need to explicitly disable the broken link checker for them:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{to:"/dogfooding/javadoc#badlink1",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{href:"/dogfooding/javadoc#badlink2",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{to:"/dogfooding/javadoc#badlink3",target:"_self",noCheck:!0}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(j,{href:"/dogfooding/javadoc#badlink4",target:"_self",noCheck:!0}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"linking-to-json",children:"Linking to JSON"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(36261).Z+"",children:"./script.js"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(76804).Z+"",children:"./data.json"})}),"\n"]}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(O,{...e})}):O(e)}}}]); \ No newline at end of file diff --git a/assets/js/2c7bf9eb.b8355793.js b/assets/js/2c7bf9eb.b8355793.js new file mode 100644 index 0000000000..91e85f496b --- /dev/null +++ b/assets/js/2c7bf9eb.b8355793.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99371],{39219:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(24246),n=s(71670);const r={title:"Ensure heading anchor slugs respect GitHub emoji behavior",date:new Date("2023-08-05T00:00:00.000Z")},a=void 0,o={permalink:"/tests/blog/2023/08/05/",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-08-05.mdx",source:"@site/_dogfooding/_blog tests/2023-08-05.mdx",title:"Ensure heading anchor slugs respect GitHub emoji behavior",description:"This is a friendly header",date:"2023-08-05T00:00:00.000Z",tags:[],readingTime:3.2,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Ensure heading anchor slugs respect GitHub emoji behavior",date:"2023-08-05T00:00:00.000Z"},unlisted:!1,nextItem:{title:"Test if href in feed resolved correctly",permalink:"/tests/blog/2023/07/19/a"}},l={authorsImageUrls:[]},d=[{value:"\ud83d\ude03 This is a friendly header",id:"smiley-this-is-a-friendly-header",level:2},{value:"\ud83d\ude03 This is a friendly header (real smiley)",id:"-this-is-a-friendly-header-real-smiley",level:2}];function h(e){const t={h2:"h2",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.h2,{id:"smiley-this-is-a-friendly-header",children:["\ud83d\ude03"," This is a friendly header"]}),"\n",(0,i.jsx)(t.h2,{id:"-this-is-a-friendly-header-real-smiley",children:"\ud83d\ude03 This is a friendly header (real smiley)"})]})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>a});var i=s(27378);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d0d74c6.9a643df5.js b/assets/js/2d0d74c6.9a643df5.js new file mode 100644 index 0000000000..97cdff7dde --- /dev/null +++ b/assets/js/2d0d74c6.9a643df5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96318],{64787:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var t=n(24246),o=n(71670);const r={},i="What's next?",a={id:"guides/whats-next",title:"What's next?",description:"Congratulations! You have understood most core features of Docusaurus now. You have:",source:"@site/docs/guides/whats-next.mdx",sourceDirName:"guides",slug:"/guides/whats-next",permalink:"/docs/guides/whats-next",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/whats-next.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672409308e3,frontMatter:{},sidebar:"docs",previous:{title:"Using Crowdin",permalink:"/docs/i18n/crowdin"},next:{title:"Advanced Tutorials",permalink:"/docs/advanced/"}},d={},c=[];function l(e){const s={a:"a",code:"code",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"whats-next",children:"What's next?"}),"\n",(0,t.jsx)(s.p,{children:"Congratulations! You have understood most core features of Docusaurus now. You have:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/creating-pages",children:"Used the pages plugin"})," to create a standalone React / Markdown page"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/docs-introduction",children:"Used the docs plugin"})," to create documentation pages. This includes ",(0,t.jsx)(s.a,{href:"/docs/sidebar",children:"configuring the sidebar"}),", and even ",(0,t.jsx)(s.a,{href:"/docs/versioning",children:"versioning"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/blog",children:"Used the blog plugin"})," to create a fully featured blog"]}),"\n",(0,t.jsxs)(s.li,{children:["Tried your hands on ",(0,t.jsx)(s.a,{href:"/docs/markdown-features",children:"a range of Markdown features"}),", which are useful for all content plugins"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/styling-layout",children:"Used stylesheets"})," or ",(0,t.jsx)(s.a,{href:"/docs/swizzling",children:"swizzling"})," to customize your site's appearance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/static-assets",children:"Included images and other assets"})," in your pages"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/search",children:"Added search"})," to your site"]}),"\n",(0,t.jsxs)(s.li,{children:["Understood how ",(0,t.jsx)(s.a,{href:"/docs/browser-support",children:"browser support"})," and ",(0,t.jsx)(s.a,{href:"/docs/seo",children:"SEO"})," are done through standard Docusaurus APIs"]}),"\n",(0,t.jsxs)(s.li,{children:["Learned about how ",(0,t.jsx)(s.a,{href:"/docs/using-plugins",children:"individual plugins"})," are installed and configured"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/deployment",children:"Deployed"})," your site to a content host"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/docs/i18n/tutorial",children:"Internationalized"})," your site to include multiple languages"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["At this point, you probably have a big ",(0,t.jsx)(s.code,{children:"docusaurus.config.js"})," already\ud83d\ude04 However, you haven't written much code yet! Most of the features are implemented through calling encapsulated Docusaurus APIs. As you continue your journey, you can take three paths:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Learn more advanced Docusaurus concepts. This will help you gain a deeper understand of what the APIs do."}),"\n",(0,t.jsxs)(s.li,{children:["Read about ",(0,t.jsx)(s.a,{href:"/docs/docusaurus-core",children:"all existing APIs"}),". Many of them have not been covered in the Guides!"]}),"\n",(0,t.jsxs)(s.li,{children:["Learn to ",(0,t.jsx)(s.a,{href:"/docs/api/plugin-methods/",children:"develop a plugin"})," to extend the functionality of your site."]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var t=n(27378);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d0df73d.20e7e487.js b/assets/js/2d0df73d.20e7e487.js new file mode 100644 index 0000000000..67624ecea9 --- /dev/null +++ b/assets/js/2d0df73d.20e7e487.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33528],{91624:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>a});var t=i(24246),l=i(71670);const s={mdx:{format:"md"},date:"2019-12-07T20:00",authors:["endiliey"]},r="2.0.0-alpha.39",o={permalink:"/changelog/2.0.0-alpha.39",source:"@site/changelog/source/2.0.0-alpha.39.md",title:"2.0.0-alpha.39",description:"Bug Fix",date:"2019-12-07T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"}],frontMatter:{mdx:{format:"md"},date:"2019-12-07T20:00",authors:["endiliey"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.40",permalink:"/changelog/2.0.0-alpha.40"},nextItem:{title:"2.0.0-alpha.38",permalink:"/changelog/2.0.0-alpha.38"},listPageLink:"/changelog/page/4"},c={authorsImageUrls:[void 0]},a=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 1",id:"committers-1",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"docusaurus"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2099",children:"#2099"})," fix(v2): escape import path on windows (",(0,t.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,t.jsx)(n.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2095",children:"#2095"})," fix(v2): metadata error if markdown does not have ending line (",(0,t.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Other\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2100",children:"#2100"})," chore(CI): docusaurus build on Windows with GitHub actions (",(0,t.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"docusaurus"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2096",children:"#2096"})," feat(v2): better & nice looking error overlay (",(0,t.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"committers-1",children:"Committers: 1"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Endi (",(0,t.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,n,i)=>{i.d(n,{Z:()=>o,a:()=>r});var t=i(27378);const l={},s=t.createContext(l);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2dda743d.f6b31b4a.js b/assets/js/2dda743d.f6b31b4a.js new file mode 100644 index 0000000000..efd57e4902 --- /dev/null +++ b/assets/js/2dda743d.f6b31b4a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89950],{60794:(e,s,h)=>{h.r(s),h.d(s,{assets:()=>t,contentTitle:()=>i,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>l});var n=h(24246),o=h(71670);const c={mdx:{format:"md"},date:"2021-12-21T20:00",authors:["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},i="2.0.0-beta.14",r={permalink:"/changelog/2.0.0-beta.14",source:"@site/changelog/source/2.0.0-beta.14.md",title:"2.0.0-beta.14",description:"New Feature",date:"2021-12-21T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"6543",alias:"6543",url:"https://github.com/6543",imageURL:"https://github.com/6543.png",key:"6543"},{name:"Christopher Klint",alias:"christopherklint97",url:"https://github.com/christopherklint97",imageURL:"https://github.com/christopherklint97.png",key:"christopherklint97"},{name:"colton",alias:"cmpadden",url:"https://github.com/cmpadden",imageURL:"https://github.com/cmpadden.png",key:"cmpadden"},{name:"Drylozu",alias:"Drylozu",url:"https://github.com/Drylozu",imageURL:"https://github.com/Drylozu.png",key:"Drylozu"},{name:"Jeroen Claassens",alias:"favna",url:"https://github.com/favna",imageURL:"https://github.com/favna.png",key:"favna"},{name:"Harsh Mishra",alias:"HarshCasper",url:"https://github.com/HarshCasper",imageURL:"https://github.com/HarshCasper.png",key:"HarshCasper"},{name:"Himanshu",alias:"himanshu007-creator",url:"https://github.com/himanshu007-creator",imageURL:"https://github.com/himanshu007-creator.png",key:"himanshu007-creator"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Kristoffer K.",alias:"merceyz",url:"https://github.com/merceyz",imageURL:"https://github.com/merceyz.png",key:"merceyz"},{name:"Yaroslav Serhieiev",alias:"noomorph",url:"https://github.com/noomorph",imageURL:"https://github.com/noomorph.png",key:"noomorph"},{name:"\u4e0d\u90d1",alias:"notzheng",url:"https://github.com/notzheng",imageURL:"https://github.com/notzheng.png",key:"notzheng"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Ziv",alias:"wewoor",url:"https://github.com/wewoor",imageURL:"https://github.com/wewoor.png",key:"wewoor"},{name:"Shubhendra Singh Chauhan",alias:"withshubh",url:"https://github.com/withshubh",imageURL:"https://github.com/withshubh.png",key:"withshubh"},{name:"Wout Vandesompele",alias:"wowtvds",url:"https://github.com/wowtvds",imageURL:"https://github.com/wowtvds.png",key:"wowtvds"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2021-12-21T20:00",authors:["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-beta.15",permalink:"/changelog/2.0.0-beta.15"},nextItem:{title:"2.0.0-beta.13",permalink:"/changelog/2.0.0-beta.13"},listPageLink:"/changelog/page/2"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 17",id:"committers-17",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6132",children:"#6132"})," feat(theme-classic): new configuration syntax for a simple footer (",(0,n.jsx)(s.a,{href:"https://github.com/christopherklint97",children:"@christopherklint97"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6125",children:"#6125"})," feat(theme-common): stable classname for code blocks (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5848",children:"#5848"})," feat(theme-classic): standalone Admonition component (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6082",children:"#6082"})," feat(theme-classic): allow passing additional attributes to tab headings (",(0,n.jsx)(s.a,{href:"https://github.com/Drylozu",children:"@Drylozu"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6126",children:"#6126"})," feat(content-blog): support json feed (",(0,n.jsx)(s.a,{href:"https://github.com/notzheng",children:"@notzheng"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6107",children:"#6107"})," feat(core): allow plugins to customize/override Webpack devServer config (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-migrate"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6146",children:"#6146"})," fix(migrate): do not modify non-MD files (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6128",children:"#6128"})," fix: do not use aria-hidden in heading anchor links (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6124",children:"#6124"})," fix(content-docs): restore behavior when pagination front matter is null (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6085",children:"#6085"})," fix(content-docs): getMainDocId should return doc with both versioned or unversioned id (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6097",children:"#6097"})," fix: declare missing dependencies (",(0,n.jsx)(s.a,{href:"https://github.com/merceyz",children:"@merceyz"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,n.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6094",children:"#6094"})," fix: add missing dependencies on tslib (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6088",children:"#6088"})," fix(theme-translations): publish theme-translation lib, including typedef (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6053",children:"#6053"})," feat(theme-classic): allow stylizing doc paginator arrows (",(0,n.jsx)(s.a,{href:"https://github.com/noomorph",children:"@noomorph"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6121",children:"#6121"})," fix(theme-classic): add outline to focused code blocks (",(0,n.jsx)(s.a,{href:"https://github.com/christopherklint97",children:"@christopherklint97"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6118",children:"#6118"})," refactor: remove some useless code (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,n.jsx)(s.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5994",children:"#5994"})," refactor: unify log format with new logger utility (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6119",children:"#6119"})," fix(create-docusaurus): make initial editUrl functional (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6095",children:"#6095"})," fix(create-docusaurus): give a clearer message when installation failed (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6142",children:"#6142"})," docs: normalize usage of placeholders (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5918",children:"#5918"})," docs: refactor & refine lifecycle API docs (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6138",children:"#6138"})," docs: add Smart Docs to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/wowtvds",children:"@wowtvds"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6137",children:"#6137"})," docs: add ToolJet to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/withshubh",children:"@withshubh"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6141",children:"#6141"})," docs: add WoodpeckerCI to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/6543",children:"@6543"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6135",children:"#6135"})," docs: mention admonition quirks with Prettier (",(0,n.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6131",children:"#6131"}),' docs: elaborate on "docs-only" and "blog-only" (',(0,n.jsx)(s.a,{href:"https://github.com/himanshu007-creator",children:"@himanshu007-creator"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6134",children:"#6134"})," docs: update link to init template README.md (",(0,n.jsx)(s.a,{href:"https://github.com/cmpadden",children:"@cmpadden"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6130",children:"#6130"})," docs: refactor docs sidebar doc (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6129",children:"#6129"})," docs: refactor styling/theming docs (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6112",children:"#6112"})," docs: mention that SEO through front matter is better than head tag (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6120",children:"#6120"})," refactor(website): make deploy preview open next version docs by default (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6111",children:"#6111"})," docs: add Molecule website to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/wewoor",children:"@wewoor"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6089",children:"#6089"})," docs: add Enarx website to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/HarshCasper",children:"@HarshCasper"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6090",children:"#6090"})," docs: add sapphire to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/favna",children:"@favna"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6091",children:"#6091"}),' docs(showcase): "much more pages" => "many more pages" (',(0,n.jsx)(s.a,{href:"https://github.com/favna",children:"@favna"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6144",children:"#6144"})," fix(theme-classic): fix translation when footer has no links (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6143",children:"#6143"})," test: fix async tests resolved in random order (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6123",children:"#6123"})," test: use snapshots for sidebar tests (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["Other\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6122",children:"#6122"})," fix(website): fix yarn build:website:fast (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6080",children:"#6080"})," chore: add npm and pnpm to E2E tests (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,n.jsx)(s.code,{children:"docusaurus"}),", ",(0,n.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6092",children:"#6092"})," misc: ignore some files during npm publish (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"committers-17",children:"Committers: 17"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["6543 (",(0,n.jsx)(s.a,{href:"https://github.com/6543",children:"@6543"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Christopher Klint (",(0,n.jsx)(s.a,{href:"https://github.com/christopherklint97",children:"@christopherklint97"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Harsh Mishra (",(0,n.jsx)(s.a,{href:"https://github.com/HarshCasper",children:"@HarshCasper"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Himanshu (",(0,n.jsx)(s.a,{href:"https://github.com/himanshu007-creator",children:"@himanshu007-creator"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Jeroen Claassens (",(0,n.jsx)(s.a,{href:"https://github.com/favna",children:"@favna"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Joshua Chen (",(0,n.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Kristoffer K. (",(0,n.jsx)(s.a,{href:"https://github.com/merceyz",children:"@merceyz"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Shubhendra Singh Chauhan (",(0,n.jsx)(s.a,{href:"https://github.com/withshubh",children:"@withshubh"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Wout Vandesompele (",(0,n.jsx)(s.a,{href:"https://github.com/wowtvds",children:"@wowtvds"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Yangshun Tay (",(0,n.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Yaroslav Serhieiev (",(0,n.jsx)(s.a,{href:"https://github.com/noomorph",children:"@noomorph"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Ziv (",(0,n.jsx)(s.a,{href:"https://github.com/wewoor",children:"@wewoor"}),")"]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/Drylozu",children:"@Drylozu"})}),"\n",(0,n.jsxs)(s.li,{children:["colton (",(0,n.jsx)(s.a,{href:"https://github.com/cmpadden",children:"@cmpadden"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["\u4e0d\u90d1 (",(0,n.jsx)(s.a,{href:"https://github.com/notzheng",children:"@notzheng"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},71670:(e,s,h)=>{h.d(s,{Z:()=>r,a:()=>i});var n=h(27378);const o={},c=n.createContext(o);function i(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e17f346.e53057c7.js b/assets/js/2e17f346.e53057c7.js new file mode 100644 index 0000000000..1f49e2422b --- /dev/null +++ b/assets/js/2e17f346.e53057c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39086],{27592:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=n(24246),s=n(71670),a=n(88405);const r={tags:["paginated-tag"]},i="Hmmm!",c={permalink:"/tests/blog/2021/08/22/no-author",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-22-no-author.mdx",source:"@site/_dogfooding/_blog tests/2021-08-22-no-author.mdx",title:"Hmmm!",description:"This is a blog post from an anonymous author!",date:"2021-08-22T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:3.4,hasTruncateMarker:!1,authors:[],frontMatter:{tags:["paginated-tag"]},unlisted:!1,prevItem:{title:"Multiple authors",permalink:"/tests/blog/2021/08/23/multiple-authors"},nextItem:{title:"Blog TOC FrontMatter tests",permalink:"/tests/blog/2021/08/21/blog-post-toc-tests"}},u={authorsImageUrls:[]},l=[...a.d$];function p(t){const e={p:"p",...(0,s.a)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.p,{children:"This is a blog post from an anonymous author!"}),"\n","\n",(0,o.jsx)(a.ZP,{})]})}function m(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(p,{...t})}):p(t)}},88405:(t,e,n)=>{n.d(e,{ZP:()=>i,d$:()=>a});var o=n(24246),s=n(71670);const a=[];function r(t){const e={p:"p",...(0,s.a)(),...t.components};return(0,o.jsx)(e.p,{children:"This is a blog partial"})}function i(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(r,{...t})}):r(t)}},71670:(t,e,n)=>{n.d(e,{Z:()=>i,a:()=>r});var o=n(27378);const s={},a=o.createContext(s);function r(t){const e=o.useContext(a);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:r(t.components),o.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/2e30738d.11307684.js b/assets/js/2e30738d.11307684.js new file mode 100644 index 0000000000..aaa52ddacc --- /dev/null +++ b/assets/js/2e30738d.11307684.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46760],{16824:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=t(24246),o=t(71670);const i={mdx:{format:"md"},date:"2019-10-21T19:00"},s="2.0.0-alpha.28",l={permalink:"/changelog/2.0.0-alpha.28",source:"@site/changelog/source/2.0.0-alpha.28.md",title:"2.0.0-alpha.28",description:"- Further reduce memory usage to avoid heap memory allocation failure.",date:"2019-10-21T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-21T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.29",permalink:"/changelog/2.0.0-alpha.29"},nextItem:{title:"2.0.0-alpha.27",permalink:"/changelog/2.0.0-alpha.27"},listPageLink:"/changelog/page/5"},a={authorsImageUrls:[]},c=[];function d(e){const n={code:"code",li:"li",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Further reduce memory usage to avoid heap memory allocation failure."}),"\n",(0,r.jsxs)(n.li,{children:["Fix ",(0,r.jsx)(n.code,{children:"keywords"})," frontmatter for SEO not working properly."]}),"\n",(0,r.jsxs)(n.li,{children:["Fix ",(0,r.jsx)(n.code,{children:"swizzle"})," command not passing context properly to theme packages."]}),"\n",(0,r.jsxs)(n.li,{children:["Add ",(0,r.jsx)(n.code,{children:"extendCli"})," api for plugins. This will allow plugin to further extend Docusaurus CLI."]}),"\n",(0,r.jsxs)(n.li,{children:["Fix ",(0,r.jsx)(n.code,{children:"swizzle"})," command not being able to swizzle single js file."]}),"\n",(0,r.jsx)(n.li,{children:"Fix logo URL in footer to be appended with baseUrl automatically."}),"\n",(0,r.jsxs)(n.li,{children:["Add the option ",(0,r.jsx)(n.code,{children:"--no-open"})," for ",(0,r.jsx)(n.code,{children:"start"})," command."]}),"\n",(0,r.jsxs)(n.li,{children:["Set ",(0,r.jsx)(n.code,{children:"@babel/env"})," useBuiltins to ",(0,r.jsx)(n.code,{children:"usage"}),". This will automatically use browserlist and import polyfills required."]}),"\n",(0,r.jsxs)(n.li,{children:["Modified TerserWebpackPlugin ",(0,r.jsx)(n.code,{children:"terserOptions"})," for better cross-browser compatibility."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"BREAKING"})," ",(0,r.jsx)(n.code,{children:"withBaseUrl"})," is renamed to ",(0,r.jsx)(n.code,{children:"useBaseUrl"})," because its a React Hooks. Make sure you import/rename it correctly. Eg: ",(0,r.jsx)(n.code,{children:"import useBaseUrl from '@docusaurus/useBaseUrl"}),";"]}),"\n",(0,r.jsx)(n.li,{children:"Fix potential security vulnerability because we're exposing the directory structure of the host machine."}),"\n",(0,r.jsx)(n.li,{children:"Upgrade dependencies."}),"\n"]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>s});var r=t(27378);const o={},i=r.createContext(o);function s(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2ede31a0.4afa4921.js b/assets/js/2ede31a0.4afa4921.js new file mode 100644 index 0000000000..7684463985 --- /dev/null +++ b/assets/js/2ede31a0.4afa4921.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76938],{70701:t=>{t.exports=JSON.parse('{"tag":{"label":"visibility","permalink":"/tests/blog/tags/visibility","allTagsPath":"/tests/blog/tags","count":1,"unlisted":true},"listMetadata":{"permalink":"/tests/blog/tags/visibility","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/2f06f2d2.ff225ebf.js b/assets/js/2f06f2d2.ff225ebf.js new file mode 100644 index 0000000000..544d2b4fa0 --- /dev/null +++ b/assets/js/2f06f2d2.ff225ebf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46890],{36478:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>l,contentTitle:()=>t,default:()=>d,frontMatter:()=>h,metadata:()=>n,toc:()=>o});var c=s(24246),i=s(71670);const h={mdx:{format:"md"},date:"2023-11-30T20:00",authors:["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},t="3.0.1",n={permalink:"/changelog/3.0.1",source:"@site/changelog/source/3.0.1.md",title:"3.0.1",description:"Bug Fix",date:"2023-11-30T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Chongyi Zheng",alias:"harryzcy",url:"https://github.com/harryzcy",imageURL:"https://github.com/harryzcy.png",key:"harryzcy"},{name:"MCR Studio",alias:"mcrstudio",url:"https://github.com/mcrstudio",imageURL:"https://github.com/mcrstudio.png",key:"mcrstudio"},{name:"Nick Gerleman",alias:"NickGerleman",url:"https://github.com/NickGerleman",imageURL:"https://github.com/NickGerleman.png",key:"NickGerleman"},{name:"reece-white",alias:"reece-white",url:"https://github.com/reece-white",imageURL:"https://github.com/reece-white.png",key:"reece-white"},{name:"Shreesh Nautiyal",alias:"Shreesh09",url:"https://github.com/Shreesh09",imageURL:"https://github.com/Shreesh09.png",key:"Shreesh09"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2023-11-30T20:00",authors:["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},unlisted:!1,prevItem:{title:"3.1.0",permalink:"/changelog/3.1.0"},nextItem:{title:"3.0.0",permalink:"/changelog/3.0.0"},listPageLink:"/changelog/"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83e\udd16 Dependencies",id:"robot-dependencies",level:2},{value:"Committers: 6",id:"committers-6",level:2}];function u(e){const r={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,i.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(r.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9570",children:"#9570"})," fix: add v2 retrocompatible support for quoted admonitions (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9535",children:"#9535"})," fix: v3 admonitions should support v2 title syntax for nested admonitions (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9567",children:"#9567"})," fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9531",children:"#9531"})," fix(theme): docs html sidebar items should always be visible (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9530",children:"#9530"})," fix(theme): fix firefox CSS :has() support bug (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"create-docusaurus"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9487",children:"#9487"})," fix(create-docusaurus): fix readme docusaurus 2 ref (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(r.h2,{id:"robot-dependencies",children:"\ud83e\udd16 Dependencies"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus-plugin-debug"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9566",children:"#9566"})," chore(debug-plugin): migrate to a new maintained JSON Viewer (",(0,c.jsx)(r.a,{href:"https://github.com/mcrstudio",children:"@mcrstudio"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9572",children:"#9572"})," chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx (",(0,c.jsx)(r.a,{href:"https://github.com/harryzcy",children:"@harryzcy"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9567",children:"#9567"})," fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(r.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9464",children:"#9464"})," chore: Upgrade clsx to 2.0.0 (",(0,c.jsx)(r.a,{href:"https://github.com/harryzcy",children:"@harryzcy"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9547",children:"#9547"})," chore(core): replace ",(0,c.jsx)(r.code,{children:"wait-on"})," dependency with custom lighter code (",(0,c.jsx)(r.a,{href:"https://github.com/NickGerleman",children:"@NickGerleman"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(r.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:[(0,c.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/pull/9529",children:"#9529"})," chore: ugrade babel dependencies to v7.23.3 (",(0,c.jsx)(r.a,{href:"https://github.com/reece-white",children:"@reece-white"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(r.h2,{id:"committers-6",children:"Committers: 6"}),"\n",(0,c.jsxs)(r.ul,{children:["\n",(0,c.jsxs)(r.li,{children:["Chongyi Zheng (",(0,c.jsx)(r.a,{href:"https://github.com/harryzcy",children:"@harryzcy"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:["MCR Studio (",(0,c.jsx)(r.a,{href:"https://github.com/mcrstudio",children:"@mcrstudio"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:["Nick Gerleman (",(0,c.jsx)(r.a,{href:"https://github.com/NickGerleman",children:"@NickGerleman"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:["Shreesh Nautiyal (",(0,c.jsx)(r.a,{href:"https://github.com/Shreesh09",children:"@Shreesh09"}),")"]}),"\n",(0,c.jsxs)(r.li,{children:["S\xe9bastien Lorber (",(0,c.jsx)(r.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsx)(r.li,{children:(0,c.jsx)(r.a,{href:"https://github.com/reece-white",children:"@reece-white"})}),"\n"]})]})}function d(e={}){const{wrapper:r}={...(0,i.a)(),...e.components};return r?(0,c.jsx)(r,{...e,children:(0,c.jsx)(u,{...e})}):u(e)}},71670:(e,r,s)=>{s.d(r,{Z:()=>n,a:()=>t});var c=s(27378);const i={},h=c.createContext(i);function t(e){const r=c.useContext(h);return c.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function n(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),c.createElement(h.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f097a0c.b61bacdd.js b/assets/js/2f097a0c.b61bacdd.js new file mode 100644 index 0000000000..2987cac723 --- /dev/null +++ b/assets/js/2f097a0c.b61bacdd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39225],{46986:(e,t,s)=>{s.r(t),s.d(t,{default:()=>a});var n=s(24246),u=(s(27378),s(88613)),c=s(52615);function a(){return(0,n.jsxs)(u.Z,{children:[(0,n.jsx)(c.Z,{as:"h1",children:"Test Analytics"}),(0,n.jsx)("div",{children:(0,n.jsx)("button",{type:"button",onClick:()=>{window.gtag("event","docusaurus-test-event",{event_category:'docusaurus-test-event-category"',event_label:"docusaurus-test-event-label"})},children:"Submit custom gtag event!"})})]})}}}]); \ No newline at end of file diff --git a/assets/js/2f283cc0.81fc78ca.js b/assets/js/2f283cc0.81fc78ca.js new file mode 100644 index 0000000000..8dcd5b8c6f --- /dev/null +++ b/assets/js/2f283cc0.81fc78ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27762],{95661:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>i,toc:()=>a});var s=o(24246),t=o(71670);const d={id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},r="Create a doc",i={id:"guides/docs/create-doc",title:"Create a doc",description:"Create a Markdown Document",source:"@site/docs/guides/docs/docs-create-doc.mdx",sourceDirName:"guides/docs",slug:"/create-doc",permalink:"/docs/create-doc",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-create-doc.mdx",tags:[],version:"current",lastUpdatedBy:"Joshua Chen",lastUpdatedAt:1709551997e3,frontMatter:{id:"create-doc",description:"Create a Markdown Document",slug:"/create-doc"},sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/docs-introduction"},next:{title:"Sidebar",permalink:"/docs/sidebar"}},c={},a=[{value:"Doc front matter",id:"doc-front-matter",level:2},{value:"Doc tags",id:"doc-tags",level:2},{value:"Organizing folder structure",id:"organizing-folder-structure",level:2},{value:"Document ID",id:"document-id",level:3},{value:"Doc URLs",id:"doc-urls",level:3},{value:"Sidebars",id:"sidebars",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"create-a-doc",children:"Create a doc"}),"\n",(0,s.jsxs)(n.p,{children:["Create a Markdown file, ",(0,s.jsx)(n.code,{children:"greeting.md"}),", and place it under the ",(0,s.jsx)(n.code,{children:"docs"})," directory."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"website # root directory of your site\n\u251c\u2500\u2500 docs\n\u2502 \u2514\u2500\u2500 greeting.md\n\u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 pages\n\u251c\u2500\u2500 docusaurus.config.js\n\u251c\u2500\u2500 ...\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\ndescription: Create a doc page with rich content.\n---\n\n# Hello from Docusaurus\n\nAre you ready to create the documentation site for your open source project?\n\n## Headers\n\nwill show up on the table of contents on the upper right\n\nSo that your users will know what this page is all about without scrolling down or even without reading too much.\n\n## Only h2 and h3 will be in the TOC by default.\n\nYou can configure the TOC heading levels either per-document or in the theme configuration.\n\nThe headers are well-spaced so that the hierarchy is clear.\n\n- lists will help you\n- present the key points\n- that you want your users to remember\n - and you may nest them\n - multiple times\n"})}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:["All files prefixed with an underscore (",(0,s.jsx)(n.code,{children:"_"}),") under the ",(0,s.jsx)(n.code,{children:"docs"}),' directory are treated as "partial" pages and will be ignored by default.']}),(0,s.jsxs)(n.p,{children:["Read more about ",(0,s.jsx)(n.a,{href:"/docs/markdown-features/react#importing-markdown",children:"importing partial pages"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"doc-front-matter",children:"Doc front matter"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/docs/markdown-features#front-matter",children:"front matter"})," is used to provide additional metadata for your doc page. Front matter is optional\u2014Docusaurus will be able to infer all necessary metadata without the front matter. For example, the ",(0,s.jsx)(n.a,{href:"#doc-tags",children:"doc tags"})," feature introduced below requires using front matter. For all possible fields, see ",(0,s.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"the API documentation"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"doc-tags",children:"Doc tags"}),"\n",(0,s.jsxs)(n.p,{children:["Optionally, you can add tags to your doc pages, which introduces another dimension of categorization in addition to the ",(0,s.jsx)(n.a,{href:"/docs/sidebar",children:"docs sidebar"}),". Tags are passed in the front matter as a list of labels:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",metastring:'"your-doc-page.md"',children:"---\nid: doc-with-tags\ntitle: A doc with tags\ntags:\n - Demo\n - Getting started\n---\n"})}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["Tags can also be declared with ",(0,s.jsx)(n.code,{children:"tags: [Demo, Getting started]"}),"."]}),(0,s.jsxs)(n.p,{children:["Read more about all the possible ",(0,s.jsx)(n.a,{href:"https://www.w3schools.io/file/yaml-arrays/",children:"Yaml array syntaxes"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"organizing-folder-structure",children:"Organizing folder structure"}),"\n",(0,s.jsxs)(n.p,{children:["How the Markdown files are arranged under the ",(0,s.jsx)(n.code,{children:"docs"})," folder can have multiple impacts on Docusaurus content generation. However, most of them can be decoupled from the file structure."]}),"\n",(0,s.jsx)(n.h3,{id:"document-id",children:"Document ID"}),"\n",(0,s.jsxs)(n.p,{children:["Every document has a unique ",(0,s.jsx)(n.code,{children:"id"}),". By default, a document ",(0,s.jsx)(n.code,{children:"id"})," is the name of the document (without the extension) relative to the root docs directory."]}),"\n",(0,s.jsxs)(n.p,{children:["For example, the ID of ",(0,s.jsx)(n.code,{children:"greeting.md"})," is ",(0,s.jsx)(n.code,{children:"greeting"}),", and the ID of ",(0,s.jsx)(n.code,{children:"guide/hello.md"})," is ",(0,s.jsx)(n.code,{children:"guide/hello"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u251c\u2500\u2500 greeting.md\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,s.jsxs)(n.p,{children:["However, the ",(0,s.jsx)(n.strong,{children:"last part"})," of the ",(0,s.jsx)(n.code,{children:"id"})," can be defined by the user in the front matter. For example, if ",(0,s.jsx)(n.code,{children:"guide/hello.md"}),"'s content is defined as below, its final ",(0,s.jsx)(n.code,{children:"id"})," is ",(0,s.jsx)(n.code,{children:"guide/part1"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\nid: part1\n---\n\nLorem ipsum\n"})}),"\n",(0,s.jsx)(n.p,{children:"The ID is used to refer to a document when hand-writing sidebars, or when using docs-related layout components or hooks."}),"\n",(0,s.jsx)(n.h3,{id:"doc-urls",children:"Doc URLs"}),"\n",(0,s.jsxs)(n.p,{children:["By default, a document's URL location is its file path relative to the ",(0,s.jsx)(n.code,{children:"docs"})," folder, with a few exceptions. Namely, if a file is named one the following, the file name won't be included in the URL:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Named as ",(0,s.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,s.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,s.jsxs)(n.li,{children:["Named as ",(0,s.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,s.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,s.jsxs)(n.li,{children:["Same name as parent folder: ",(0,s.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["In all cases, the default slug would only be ",(0,s.jsx)(n.code,{children:"/Guides"}),", without the ",(0,s.jsx)(n.code,{children:"/index"}),", ",(0,s.jsx)(n.code,{children:"/README"}),", or duplicate ",(0,s.jsx)(n.code,{children:"/Guides"})," segment."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["This convention is exactly the same as ",(0,s.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-index-convention",children:"the category index convention"}),". However, the ",(0,s.jsx)(n.code,{children:"isCategoryIndex"})," configuration does ",(0,s.jsx)(n.em,{children:"not"})," affect the document URL."]})}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"slug"})," front matter to change a document's URL."]}),"\n",(0,s.jsx)(n.p,{children:"For example, suppose your site structure looks like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"website # Root directory of your site\n\u2514\u2500\u2500 docs\n \u2514\u2500\u2500 guide\n \u2514\u2500\u2500 hello.md\n"})}),"\n",(0,s.jsxs)(n.p,{children:["By default ",(0,s.jsx)(n.code,{children:"hello.md"})," will be available at ",(0,s.jsx)(n.code,{children:"/docs/guide/hello"}),". You can change its URL location to ",(0,s.jsx)(n.code,{children:"/docs/bonjour"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\nslug: /bonjour\n---\n\nLorem ipsum\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"slug"})," will be appended to the doc plugin's ",(0,s.jsx)(n.code,{children:"routeBasePath"}),", which is ",(0,s.jsx)(n.code,{children:"/docs"})," by default. See ",(0,s.jsx)(n.a,{href:"/docs/docs-introduction#docs-only-mode",children:"Docs-only mode"})," for how to remove the ",(0,s.jsx)(n.code,{children:"/docs"})," part from the URL."]}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsx)(n.p,{children:"It is possible to use:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["absolute slugs: ",(0,s.jsx)(n.code,{children:"slug: /mySlug"}),", ",(0,s.jsx)(n.code,{children:"slug: /"}),"..."]}),"\n",(0,s.jsxs)(n.li,{children:["relative slugs: ",(0,s.jsx)(n.code,{children:"slug: mySlug"}),", ",(0,s.jsx)(n.code,{children:"slug: ./../mySlug"}),"..."]}),"\n"]})]}),"\n",(0,s.jsxs)(n.p,{children:["If you want a document to be available at the root, and have a path like ",(0,s.jsx)(n.code,{children:"https://docusaurus.io/docs/"}),", you can use the slug front matter:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"---\nid: my-home-doc\nslug: /\n---\n\nLorem ipsum\n"})}),"\n",(0,s.jsx)(n.h3,{id:"sidebars",children:"Sidebars"}),"\n",(0,s.jsxs)(n.p,{children:["When using ",(0,s.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),", the file structure will determine the sidebar structure."]}),"\n",(0,s.jsxs)(n.p,{children:["Our recommendation for file system organization is: make your file system mirror the sidebar structure (so you don't need to handwrite your ",(0,s.jsx)(n.code,{children:"sidebars.js"})," file), and use the ",(0,s.jsx)(n.code,{children:"slug"})," front matter to customize URLs of each document."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,n,o)=>{o.d(n,{Z:()=>i,a:()=>r});var s=o(27378);const t={},d=s.createContext(t);function r(e){const n=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/30198.aa31d39c.js b/assets/js/30198.aa31d39c.js new file mode 100644 index 0000000000..c8fa1b86ab --- /dev/null +++ b/assets/js/30198.aa31d39c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30198],{76576:(e,t,n)=>{n.d(t,{c:()=>l});var r=n(6524),i=n(31066);const a=function(e){return(0,i.Z)(e,4)};var d=n(27206);n(96635);function l(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:s(e)};return r.Z(e.graph())||(t.value=a(e.graph())),t}function o(e){return d.Z(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.Z(n)||(a.value=n),r.Z(i)||(a.parent=i),a}))}function s(e){return d.Z(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.Z(t.name)||(i.name=t.name),r.Z(n)||(i.value=n),i}))}},30198:(e,t,n)=>{n.d(t,{r:()=>X});var r=n(9500),i=n(76576),a=n(40577),d=n(99854),l=n(88472),o=n(76742),s=n(63294);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDecendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{d.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),d.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const a=t.node(i);d.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,a),r!==t.parent(i)&&(d.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(d.l.debug("Setting parent",i,e),n.setParent(i,e)):(d.l.info("In copy ",e,"root",r,"data",t.node(e),r),d.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const l=t.edges(i);d.l.debug("Copying Edges",l),l.forEach((i=>{d.l.info("Edge",i);const a=t.edge(i.v,i.w,i.name);d.l.info("Edge data",a,r);try{((e,t)=>(d.l.info("Decendants of ",t," is ",h[t]),d.l.info("Edge is ",e),e.v!==t&&e.w!==t&&(h[t]?h[t].includes(e.v)||f(e.v,t)||f(e.w,t)||h[t].includes(e.w):(d.l.debug("Tilt, ",t,",not in decendants"),!1))))(i,r)?(d.l.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),d.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):d.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(l){d.l.error(l)}}))}d.l.debug("Removing node",i),t.removeNode(i)}))},w=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)g[i]=e,r=[...r,...w(i,t)];return r},p=(e,t)=>{d.l.trace("Searching",e);const n=t.children(e);if(d.l.trace("Searching children of id ",e,n),n.length<1)return d.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return d.l.trace("Found replacement for",e," => ",n),n}},v=e=>c[e]&&c[e].externalConnections&&c[e]?c[e].id:e,y=(e,t)=>{if(d.l.warn("extractor - ",t,i.c(e),e.children("D")),t>10)return void d.l.error("Bailing out");let n=e.nodes(),r=!1;for(const i of n){const t=e.children(i);r=r||t.length>0}if(r){d.l.debug("Nodes = ",n,t);for(const r of n)if(d.l.debug("Extracting node",r,c,c[r]&&!c[r].externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),c[r])if(!c[r].externalConnections&&e.children(r)&&e.children(r).length>0){d.l.warn("Cluster without external connections, without a parent and with children",r,t);let n="TB"===e.graph().rankdir?"LR":"TB";c[r]&&c[r].clusterData&&c[r].clusterData.dir&&(n=c[r].clusterData.dir,d.l.warn("Fixing dir",c[r].clusterData.dir,n));const a=new l.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));d.l.warn("Old graph before copy",i.c(e)),u(r,e,a,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:a}),d.l.warn("New graph after copy node: (",r,")",i.c(a)),d.l.debug("Old graph after copy",i.c(e))}else d.l.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!c[r].externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),d.l.debug(c);else d.l.debug("Not a cluster",r,t);n=e.nodes(),d.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);d.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else d.l.debug("Done, no node has children",e.nodes())},x=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=x(e,r);n=[...n,...i]})),n},b={rect:(e,t)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),r=n.insert("rect",":first-child"),i=(0,d.n)((0,d.c)().flowchart.htmlLabels),l=n.insert("g").attr("class","cluster-label"),c="markdown"===t.labelType?(0,o.c)(l,t.labelText,{style:t.labelStyle,useHtmlLabels:i}):l.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.n)((0,d.c)().flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ys)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}const g=0*t.padding,f=g/2,u=t.width<=h.width+g?h.width+g:t.width;t.width<=h.width+g?t.diff=(h.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-u/2).attr("y",t.y-t.height/2-f).attr("width",u).attr("height",t.height+g),i?l.attr("transform","translate("+(t.x-h.width/2)+", "+(t.y-t.height/2)+")"):l.attr("transform","translate("+t.x+", "+(t.y-t.height/2)+")");const w=r.node().getBBox();return t.width=w.width,t.height=w.height,t.intersect=function(e){return(0,a.i)(t,e)},n},roundedWithTitle:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),l=n.append("rect"),o=i.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let c=o.getBBox();if((0,d.n)((0,d.c)().flowchart.htmlLabels)){const e=o.children[0],t=(0,s.Ys)(o);c=e.getBoundingClientRect(),t.attr("width",c.width),t.attr("height",c.height)}c=o.getBBox();const h=0*t.padding,g=h/2,f=t.width<=c.width+t.padding?c.width+t.padding:t.width;t.width<=c.width+t.padding?t.diff=(c.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,r.attr("class","outer").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g).attr("width",f+h).attr("height",t.height+h),l.attr("class","inner").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g+c.height-1).attr("width",f+h).attr("height",t.height+h-c.height-3),i.attr("transform","translate("+(t.x-c.width/2)+", "+(t.y-t.height/2-t.padding/3+((0,d.n)((0,d.c)().flowchart.htmlLabels)?5:3))+")");const u=r.node().getBBox();return t.height=u.height,t.intersect=function(e){return(0,a.i)(t,e)},n},noteGroup:(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2-d).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const l=r.node().getBBox();return t.width=l.width,t.height=l.height,t.intersect=function(e){return(0,a.i)(t,e)},n},divider:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const l=r.node().getBBox();return t.width=l.width,t.height=l.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,a.i)(t,e)},n}};let m={};const N=async(e,t,n,l)=>{d.l.info("Graph in recursive render: XXX",i.c(t),l);const o=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",o);const s=e.insert("g").attr("class","root");t.nodes()?d.l.info("Recursive render XXX",t.nodes()):d.l.info("No nodes found for",t),t.edges().length>0&&d.l.trace("Recursive edges",t.edge(t.edges()[0]));const h=s.insert("g").attr("class","clusters"),g=s.insert("g").attr("class","edgePaths"),f=s.insert("g").attr("class","edgeLabels"),u=s.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==l){const n=JSON.parse(JSON.stringify(l.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,l),t.setNode(l.id,n),t.parent(e)||(d.l.trace("Setting parent",e,l.id),t.setParent(e,l.id,n))}if(d.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){d.l.info("Cluster identified",e,r.width,t.node(e));const i=await N(u,r.graph,n,t.node(e)),l=i.elem;(0,a.u)(r,l),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(l,r),d.l.warn("Recursive render complete ",l,r)}else t.children(e).length>0?(d.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),d.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(d.l.info("Node - the non recursive path",e,r.id,r),await(0,a.e)(u,t.node(e),o))}))),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),d.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),d.l.info("Fix",c,"ids:",e.v,e.w,"Translateing: ",c[e.v],c[e.w]),(0,a.f)(f,n)})),t.edges().forEach((function(e){d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),d.l.info("#############################################"),d.l.info("### Layout ###"),d.l.info("#############################################"),d.l.info(t),(0,r.bK)(t),d.l.info("Graph after layout:",i.c(t));let w=0;return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);d.l.info("Position "+e+": "+JSON.stringify(t.node(e))),d.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(0,a.p)(n):t.children(e).length>0?(((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";m[t.id]=b[n](e,t)})(h,n),c[n.id].node=n):(0,a.p)(n)})),t.edges().forEach((function(e){const r=t.edge(e);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r);const i=(0,a.g)(g,e,r,c,n,t);(0,a.h)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(w=n.diff)})),{elem:s,diff:w}},X=async(e,t,n,r,l)=>{(0,a.a)(e,n,r,l),(0,a.b)(),(0,a.d)(),m={},h={},g={},c={},d.l.warn("Graph at first:",i.c(t)),((e,t)=>{!e||t>10?d.l.debug("Opting out, no graph "):(d.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(d.l.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),h[t]=w(t,e),c[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){const n=e.children(t),r=e.edges();n.length>0?(d.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(d.l.warn("Edge: ",e," leaves cluster ",t),d.l.warn("Decendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)})),e.edges().forEach((function(t){const n=e.edge(t);d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(d.l.warn("Fix XXX",c,"ids:",t.v,t.w,"Translating: ",c[t.v]," --- ",c[t.w]),c[t.v]&&c[t.w]&&c[t.v]===c[t.w]){d.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name);const a=t.w+"---"+t.v;e.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const l=JSON.parse(JSON.stringify(n)),o=JSON.parse(JSON.stringify(n));l.label="",l.arrowTypeEnd="none",o.label="",l.fromCluster=t.v,o.toCluster=t.v,e.setEdge(r,a,l,t.name+"-cyclic-special"),e.setEdge(a,i,o,t.name+"-cyclic-special")}else(c[t.v]||c[t.w])&&(d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v&&(n.fromCluster=t.v),i!==t.w&&(n.toCluster=t.w),d.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name))})),d.l.warn("Adjusted Graph",i.c(e)),y(e,0),d.l.trace(c))})(t),d.l.warn("Graph after:",i.c(t)),await N(e,t,r)}}}]); \ No newline at end of file diff --git a/assets/js/30507.2f9666a9.js b/assets/js/30507.2f9666a9.js new file mode 100644 index 0000000000..63dc638a74 --- /dev/null +++ b/assets/js/30507.2f9666a9.js @@ -0,0 +1,2 @@ +/*! For license information please see 30507.2f9666a9.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30507],{43203:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var T=(n+p*x)%360,_=(T+x)%360;m.branchRadialLayout(E,e,T,_,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]<n&&r>0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(54899))},35302:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(43203))},14413:function(e,t,n){e.exports=function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){return s(e)||l(e,t)||u(e,t)||h()}function s(e){if(Array.isArray(e))return e}function l(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d="undefined"==typeof window?null:window,p=d?d.navigator:null;d&&d.document;var g=e(""),f=e({}),v=e((function(){})),y="undefined"==typeof HTMLElement?"undefined":e(HTMLElement),m=function(e){return e&&e.instanceString&&x(e.instanceString)?e.instanceString():null},b=function(t){return null!=t&&e(t)==g},x=function(t){return null!=t&&e(t)===v},w=function(e){return!N(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},E=function(t){return null!=t&&e(t)===f&&!w(t)&&t.constructor===Object},T=function(t){return null!=t&&e(t)===f},_=function(t){return null!=t&&e(t)===e(1)&&!isNaN(t)},D=function(e){return _(e)&&Math.floor(e)===e},C=function(e){return"undefined"===y?void 0:null!=e&&e instanceof HTMLElement},N=function(e){return A(e)||L(e)},A=function(e){return"collection"===m(e)&&e._private.single},L=function(e){return"collection"===m(e)&&!e._private.single},S=function(e){return"core"===m(e)},O=function(e){return"stylesheet"===m(e)},I=function(e){return"event"===m(e)},k=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},M=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement},P=function(e){return E(e)&&_(e.x1)&&_(e.x2)&&_(e.y1)&&_(e.y2)},R=function(e){return T(e)&&x(e.then)},B=function(){return p&&p.userAgent.match(/msie|trident|edge/i)},F=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},z=F((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),G=F((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),Y=F((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),X=function(e){return k(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},V="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",U="rgb[a]?\\(("+V+"[%]?)\\s*,\\s*("+V+"[%]?)\\s*,\\s*("+V+"[%]?)(?:\\s*,\\s*("+V+"))?\\)",j="rgb[a]?\\((?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)(?:\\s*,\\s*(?:"+V+"))?\\)",H="hsl[a]?\\(("+V+")\\s*,\\s*("+V+"[%])\\s*,\\s*("+V+"[%])(?:\\s*,\\s*("+V+"))?\\)",q="hsl[a]?\\((?:"+V+")\\s*,\\s*(?:"+V+"[%])\\s*,\\s*(?:"+V+"[%])(?:\\s*,\\s*(?:"+V+"))?\\)",W="\\#[0-9a-fA-F]{3}",$="\\#[0-9a-fA-F]{6}",K=function(e,t){return e<t?-1:e>t?1:0},Z=function(e,t){return-1*K(e,t)},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}},ee=function(e){var t,n,r,i,a,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+H+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t},te=function(e){var t,n=new RegExp("^"+U+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t},ne=function(e){return ie[e.toLowerCase()]},re=function(e){return(w(e)?e:null)||ne(e)||J(e)||te(e)||ee(e)},ie={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ae=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},oe=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t};function se(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var le=se,ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function ce(e,t){return e(t={exports:{}},t.exports),t.exports}var he="object"==typeof ue&&ue&&ue.Object===Object&&ue,de="object"==typeof self&&self&&self.Object===Object&&self,pe=he||de||Function("return this")(),ge=function(){return pe.Date.now()},fe=/\s/;function ve(e){for(var t=e.length;t--&&fe.test(e.charAt(t)););return t}var ye=ve,me=/^\s+/;function be(e){return e?e.slice(0,ye(e)+1).replace(me,""):e}var xe=be,we=pe.Symbol,Ee=Object.prototype,Te=Ee.hasOwnProperty,_e=Ee.toString,De=we?we.toStringTag:void 0;function Ce(e){var t=Te.call(e,De),n=e[De];try{e[De]=void 0;var r=!0}catch(a){}var i=_e.call(e);return r&&(t?e[De]=n:delete e[De]),i}var Ne=Ce,Ae=Object.prototype.toString;function Le(e){return Ae.call(e)}var Se=Le,Oe="[object Null]",Ie="[object Undefined]",ke=we?we.toStringTag:void 0;function Me(e){return null==e?void 0===e?Ie:Oe:ke&&ke in Object(e)?Ne(e):Se(e)}var Pe=Me;function Re(e){return null!=e&&"object"==typeof e}var Be=Re,Fe="[object Symbol]";function ze(e){return"symbol"==typeof e||Be(e)&&Pe(e)==Fe}var Ge=ze,Ye=NaN,Xe=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Ue=/^0o[0-7]+$/i,je=parseInt;function He(e){if("number"==typeof e)return e;if(Ge(e))return Ye;if(le(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=le(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=xe(e);var n=Ve.test(e);return n||Ue.test(e)?je(e.slice(2),n?2:8):Xe.test(e)?Ye:+e}var qe=He,We="Expected a function",$e=Math.max,Ke=Math.min;function Ze(e,t,n){var r,i,a,o,s,l,u=0,c=!1,h=!1,d=!0;if("function"!=typeof e)throw new TypeError(We);function p(t){var n=r,a=i;return r=i=void 0,u=t,o=e.apply(a,n)}function g(e){return u=e,s=setTimeout(y,t),c?p(e):o}function f(e){var n=t-(e-l);return h?Ke(n,a-(e-u)):n}function v(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=a}function y(){var e=ge();if(v(e))return m(e);s=setTimeout(y,f(e))}function m(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function b(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0}function x(){return void 0===s?o:m(ge())}function w(){var e=ge(),n=v(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return g(l);if(h)return clearTimeout(s),s=setTimeout(y,t),p(l)}return void 0===s&&(s=setTimeout(y,t)),o}return t=qe(t)||0,le(n)&&(c=!!n.leading,a=(h="maxWait"in n)?$e(qe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),w.cancel=b,w.flush=x,w}var Qe=Ze,Je=d?d.performance:null,et=Je&&Je.now?function(){return Je.now()}:function(){return Date.now()},tt=function(){if(d){if(d.requestAnimationFrame)return function(e){d.requestAnimationFrame(e)};if(d.mozRequestAnimationFrame)return function(e){d.mozRequestAnimationFrame(e)};if(d.webkitRequestAnimationFrame)return function(e){d.webkitRequestAnimationFrame(e)};if(d.msRequestAnimationFrame)return function(e){d.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(et())}),1e3/60)}}(),nt=function(e){return tt(e)},rt=et,it=9261,at=65599,ot=5381,st=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:it;!(t=e.next()).done;)n=n*at+t.value|0;return n},lt=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:it)*at+e|0},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ot;return(t<<5)+t+e|0},ct=function(e,t){return 2097152*e+t},ht=function(e){return 2097152*e[0]+e[1]},dt=function(e,t){return[lt(e[0],t[0]),ut(e[1],t[1])]},pt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)},gt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ft=function(){return vt(arguments)},vt=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?gt(r):gt(r,t)}return t},yt=!0,mt=null!=console.warn,bt=null!=console.trace,xt=Number.MAX_SAFE_INTEGER||9007199254740991,wt=function(){return!0},Et=function(){return!1},Tt=function(){return 0},_t=function(){},Dt=function(e){throw new Error(e)},Ct=function(e){if(void 0===e)return yt;yt=!!e},Nt=function(e){Ct()&&(mt?console.warn(e):(console.log(e),bt&&console.trace()))},At=function(e){return Q({},e)},Lt=function(e){return null==e?e:w(e)?e.slice():E(e)?At(e):e},St=function(e){return e.slice()},Ot=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},It={},kt=function(){return It},Mt=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Pt=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Rt=function(e){e.splice(0,e.length)},Bt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}},Ft=function(e,t,n){return n&&(t=Y(n,t)),e[t]},zt=function(e,t,n,r){n&&(t=Y(n,t)),e[t]=r},Gt=function(){function e(){t(this,e),this._obj={}}return i(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),Yt="undefined"!=typeof Map?Map:Gt,Xt="undefined",Vt=function(){function e(n){if(t(this,e),this._obj=Object.create(null),this.size=0,null!=n){var r;r=null!=n.instanceString&&n.instanceString()===this.instanceString()?n.toArray():n;for(var i=0;i<r.length;i++)this.add(r[i])}}return i(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ut=("undefined"==typeof Set?"undefined":e(Set))!==Xt?Set:Vt,jt=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&S(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ut,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];w(t.classes)?l=t.classes:b(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Nt("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Dt("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Dt("An element must have a core reference and parameters set")},Ht=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;E(t)&&!N(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||x(n)?r:n,n=x(n)?n:function(){};for(var a,o=this._private.cy,s=t=b(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],w=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[w]=!0,u.push(m)),h[w]=0)}for(var T=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o=h[i],s=c[i],g=null!=s?s.source():null,y=null!=s?s.target():null,m=null==s?void 0:t.same(g)?y[0]:g[0],b=void 0;if(!0===(b=n(t,s,m,p++,o)))return a=t,"break";if(!1===b)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],T=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),_=T.id();0===T.length||d[_]||(T=T[0],l.push(T),e.bfs&&(d[_]=!0,u.push(T)),c[_]=E,h[_]=h[i]+1)}};0!==l.length;){var _=T();if("continue"!==_&&"break"===_)break}for(var D=o.collection(),C=0;C<u.length;C++){var A=u[C],L=c[A.id()];null!=L&&D.push(L),D.push(A)}return{path:o.collection(D),found:o.collection(a)}}},qt={breadthFirstSearch:Ht({bfs:!0}),depthFirstSearch:Ht({dfs:!0})};qt.bfs=qt.breadthFirstSearch,qt.dfs=qt.depthFirstSearch;var Wt=ce((function(e,t){(function(){var t,n,r,i,a,o,s,l,u,c,h,d,p,g,f;r=Math.floor,c=Math.min,n=function(e,t){return e<t?-1:e>t?1:0},u=function(e,t,i,a,o){var s;if(null==i&&(i=0),null==o&&(o=n),i<0)throw new Error("lo must be non-negative");for(null==a&&(a=e.length);i<a;)o(t,e[s=r((i+a)/2)])<0?a=s:i=s+1;return[].splice.apply(e,[i,i-i].concat(t)),t},o=function(e,t,r){return null==r&&(r=n),e.push(t),g(e,0,e.length-1,r)},a=function(e,t){var r,i;return null==t&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,f(e,0,t)):i=r,i},l=function(e,t,r){var i;return null==r&&(r=n),i=e[0],e[0]=t,f(e,0,r),i},s=function(e,t,r){var i;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(t=(i=[e[0],t])[0],e[0]=i[1],f(e,0,r)),t},i=function(e,t){var i,a,o,s,l,u;for(null==t&&(t=n),l=[],a=0,o=(s=function(){u=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;a<o;a++)i=s[a],l.push(f(e,i,t));return l},p=function(e,t,r){var i;if(null==r&&(r=n),-1!==(i=e.indexOf(t)))return g(e,0,i,r),f(e,i,r)},h=function(e,t,r){var a,o,l,u,c;if(null==r&&(r=n),!(o=e.slice(0,t)).length)return o;for(i(o,r),l=0,u=(c=e.slice(t)).length;l<u;l++)a=c[l],s(o,a,r);return o.sort(r).reverse()},d=function(e,t,r){var o,s,l,h,d,p,g,f,v;if(null==r&&(r=n),10*t<=e.length){if(!(l=e.slice(0,t).sort(r)).length)return l;for(s=l[l.length-1],h=0,p=(g=e.slice(t)).length;h<p;h++)r(o=g[h],s)<0&&(u(l,o,0,null,r),l.pop(),s=l[l.length-1]);return l}for(i(e,r),v=[],d=0,f=c(t,e.length);0<=f?d<f:d>f;0<=f?++d:--d)v.push(a(e,r));return v},g=function(e,t,r,i){var a,o,s;for(null==i&&(i=n),a=e[r];r>t&&i(a,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=a},f=function(e,t,r){var i,a,o,s,l;for(null==r&&(r=n),a=e.length,l=t,o=e[t],i=2*t+1;i<a;)(s=i+1)<a&&!(r(e[i],e[s])<0)&&(i=s),e[t]=e[i],i=2*(t=i)+1;return e[t]=o,g(e,l,t,r)},t=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=o,e.pop=a,e.replace=l,e.pushpop=s,e.heapify=i,e.updateItem=p,e.nlargest=h,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return a(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return l(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(t,n){e.exports=n()}(0,(function(){return t}))}).call(ue)})),$t=Wt,Kt=Mt({root:null,weight:function(e){return 1},directed:!1}),Zt={dijkstra:function(e){if(!E(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Kt(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=b(r)?this.filter(r)[0]:r[0],u={},c={},h={},d=this.byGroup(),p=d.nodes,g=d.edges;g.unmergeBy((function(e){return e.isLoop()}));for(var f=function(e){return u[e.id()]},v=function(e,t){u[e.id()]=t,y.updateItem(e)},y=new $t((function(e,t){return f(e)-f(t)})),m=0;m<p.length;m++){var x=p[m];u[x.id()]=x.same(l)?0:1/0,y.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(g),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};y.size()>0;){var T=y.pop(),_=f(T),D=T.id();if(h[D]=_,_!==1/0)for(var C=T.neighborhood().intersect(p),N=0;N<C.length;N++){var A=C[N],L=A.id(),S=w(T,A),O=_+S.dist;O<f(A)&&(v(A,O),c[L]={node:T,edge:S.edge})}}return{distanceTo:function(e){var t=b(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=b(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);c[i];){var a=c[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},Qt={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++)if(a[t].has(e))return t},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},Jt=Mt({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),en={aStar:function(e){var t=this.cy(),n=Jt(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,c=r.id(),h=i.id(),d={},p={},g={},f=new $t((function(e,t){return p[e.id()]-p[t.id()]})),v=new Ut,y={},m={},b=function(e,t){f.push(e),v.add(t)},x=function(){l=f.pop(),u=l.id(),v.delete(u)},w=function(e){return v.has(e)};b(r,c),d[c]=0,p[c]=a(r);for(var E=0;f.size()>0;){if(x(),E++,u===h){for(var T=[],_=i,D=h,C=m[D];T.unshift(_),null!=C&&T.unshift(C),null!=(_=y[D]);)C=m[D=_.id()];return{found:!0,distance:d[u],path:this.spawn(T),steps:E}}g[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var S=L.source(),O=L.target(),I=S.id()!==u?S:O,k=I.id();if(this.hasElementWithId(k)&&!g[k]){var M=d[u]+s(L);w(k)?M<d[k]&&(d[k]=M,p[k]=M+a(I),y[k]=l,m[k]=L):(d[k]=M,p[k]=M+a(I),b(I,k),y[k]=l,m[k]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},tn=Mt({weight:function(e){return 1},directed:!1}),nn={floydWarshall:function(e){for(var t=this.cy(),n=tn(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),x=0;x<l.length;x++){var w=l[x],E=w.source()[0],T=w.target()[0];if(E!==T){var _=h(E),D=h(T),C=_*u+D,N=a(w);if(p[C]>N&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+_;!i&&p[A]>N&&(p[A]=N,y[A]=_,m[A]=w)}}}for(var L=0;L<u;L++)for(var S=0;S<u;S++)for(var O=S*u+L,I=0;I<u;I++){var k=S*u+I,M=L*u+I;p[O]+p[M]<p[k]&&(p[k]=p[O]+p[M],y[k]=y[O])}var P=function(e){return(b(e)?t.filter(e):e)[0]},R=function(e){return h(P(e))},B={distance:function(e,t){var n=R(e),r=R(t);return p[n*u+r]},path:function(e,n){var r=R(e),i=R(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return B}},rn=Mt({weight:function(e){return 1},directed:!1,root:null}),an={bellmanFord:function(e){var t=this,n=rn(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Yt,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(b(e)?l.$(e):e)[0]},x=function(e){return y(m(e)).dist},w=function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},E=0;E<d;E++){var T=h[E],_=y(T);T.same(a)?_.dist=0:_.dist=1/0,_.pred=null,_.edge=null}for(var D=!1,C=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,D=!0)},N=1;N<d;N++){D=!1;for(var A=0;A<v;A++){var L=c[A],S=L.source(),O=L.target(),I=o(L),k=y(S),M=y(O);C(S,O,L,k,M,I),i||C(O,S,L,M,k,I)}if(!D)break}if(D)for(var P=[],R=0;R<v;R++){var B=c[R],F=B.source(),z=B.target(),G=o(B),Y=y(F).dist,X=y(z).dist;if(Y+G<X||!i&&X+G<Y){if(g||(Nt("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var V=[];Y+G<X&&V.push(F),!i&&X+G<Y&&V.push(z);for(var U=V.length,j=0;j<U;j++){var H=V[j],q=[H];q.push(y(H).edge);for(var W=y(H).pred;-1===q.indexOf(W);)q.push(W),q.push(y(W).edge),W=y(W).pred;for(var $=(q=q.slice(q.indexOf(W)))[0].id(),K=0,Z=2;Z<q.length;Z+=2)q[Z].id()<$&&($=q[Z].id(),K=Z);(q=q.slice(K).concat(q.slice(0,K))).push(q[0]);var Q=q.map((function(e){return e.id()})).join(",");-1===P.indexOf(Q)&&(f.push(s.spawn(q)),P.push(Q))}}}return{distanceTo:x,pathTo:w,hasNegativeWeightCycle:g,negativeWeightCycles:f}}},on=Math.sqrt(2),sn=function(e,t,n){0===n.length&&Dt("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,u=l.length-1;u>=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},ln=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=sn(i,e,t),n--}return t},un={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/on);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=ln(g,l.slice(),i,s),x=b.slice();v(g,f);var w=ln(g,b,s,2),E=ln(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var T=this.spawn(d.map((function(e){return r[e[0]]}))),_=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?_.merge(L):D.merge(L)}var S=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!T.contains(t)&&n.merge(t)}))})),n},O=[S(_),S(D)];return{cut:T,components:O,partition1:_,partition2:D}}Dt("At least 2 nodes are required for Karger-Stein algorithm")}},cn=function(e){return{x:e.x,y:e.y}},hn=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},dn=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},pn=function(e){return{x:e[0],y:e[1]}},gn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r},fn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r},vn=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i},yn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2},mn=function(e){return Math.PI*e/180},bn=function(e,t){return Math.atan2(t,e)-Math.PI/2},xn=Math.log2||function(e){return Math.log(e)/Math.log(2)},wn=function(e){return e>0?1:e<0?-1:0},En=function(e,t){return Math.sqrt(Tn(e,t))},Tn=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},_n=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},Dn=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},Cn=function(e,t,n,r){return{x:Dn(e.x,t.x,n.x,r),y:Dn(e.y,t.y,n.y,r)}},Nn=function(e,t,n,r){var i={x:t.x-e.x,y:t.y-e.y},a=En(e,t),o={x:i.x/a,y:i.y/a};return n=null==n?0:n,r=null!=r?r:n*a,{x:e.x+o.x*r,y:e.y+o.y*r}},An=function(e,t,n){return Math.max(e,Math.min(n,t))},Ln=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},Sn=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},On=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},In=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},kn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},Mn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Pn=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var s=o(a,4);t=s[0],n=s[1],r=s[2],i=s[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Rn=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},Bn=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2<t.x1||t.x2<e.x1||e.y2<t.y1||t.y2<e.y1||e.y1>t.y2||t.y1>e.y2)},Fn=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},zn=function(e,t){return Fn(e,t.x,t.y)},Gn=function(e,t){return Fn(e,t.x1,t.y1)&&Fn(e,t.x2,t.y2)},Yn=function(e,t,n,r,i,a,o){var s,l=cr(i,a),u=i/2,c=a/2,h=r-c-o;if((s=rr(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=rr(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=rr(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=rr(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=tr(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=tr(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=tr(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,T=r+c-l;return(g=tr(e,t,n,r,E,T,l+o)).length>0&&g[0]<=E&&g[1]>=T?[g[0],g[1]]:[]},Xn=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},Vn=function(e,t,n,r,i,a,o,s,l){var u={x1:Math.min(n,o,i)-l,x2:Math.max(n,o,i)+l,y1:Math.min(r,s,a)-l,y2:Math.max(r,s,a)+l};return!(e<u.x1||e>u.x2||t<u.y1||t>u.y2)},Un=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]},jn=function(e,t,n,r,i){var a,o,s,l,u,c,h,d;return 0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,void(i[5]=-h)):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,void(i[4]=i[2]=-(d+h))):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),void(i[4]=-h+d*Math.cos((l+4*Math.PI)/3))))},Hn=function(e,t,n,r,i,a,o,s){var l=[];jn(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=1e-7,c=[],h=0;h<6;h+=2)Math.abs(l[h+1])<u&&l[h]>=0&&l[h]<=1&&c.push(l[h]);c.push(1),c.push(0);for(var d,p,g,f=-1,v=0;v<c.length;v++)d=Math.pow(1-c[v],2)*n+2*(1-c[v])*c[v]*i+c[v]*c[v]*o,p=Math.pow(1-c[v],2)*r+2*(1-c[v])*c[v]*a+c[v]*c[v]*s,g=Math.pow(d-e,2)+Math.pow(p-t,2),f>=0?g<f&&(f=g):f=g;return f},qn=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},Wn=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},$n=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=Qn(c,-l);h=Zn(f)}else h=c;return Wn(e,t,h)},Kn=function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=hr(a,o),h=c*c,d=0;d<n.length/4;d++){var p=void 0,g=void 0;p=0===d?n.length-2:4*d-2,g=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[p]*n[g]-n[p+1]*n[g+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[p],x=v-m*n[p+1],w=f+m*n[g],E=v+m*n[g+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var T=n[p+1],_=-n[p];T*n[g]+_*n[g+1]<0&&(T*=-1,_*=-1);var D=b+T*c,C=x+_*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return Wn(e,t,s)},Zn=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=rr(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},Qn=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},Jn=function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]},er=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},tr=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},nr=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},rr=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=.001,w=0-x,E=1+x;return w<=m&&m<=E&&w<=b&&b<=E||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?nr(e,n,o)===o?[o,s]:nr(e,n,i)===i?[i,a]:nr(i,o,n)===n?[n,r]:[]:[]},ir=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Qn(f,-s);u=Zn(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=rr(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},ar=function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=hr(a,o),g=0;g<n.length/4;g++){var f=void 0,v=void 0;f=0===g?n.length-2:4*g-2,v=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[f]*n[v]-n[f+1]*n[v+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[f],E=m-x*n[f+1],T=y+x*n[v],_=m+x*n[v+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=T,c[4*g+1]=_;var D=n[f+1],C=-n[f];D*n[v]+C*n[v+1]<0&&(D*=-1,C*=-1),0!==(l=tr(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=rr(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),S=1;S<u.length/2;S++){var O=Math.pow(u[2*S]-e,2)+Math.pow(u[2*S+1]-t,2);O<=L&&(A[0]=u[2*S],A[1]=u[2*S+1],L=O)}return A}return u},or=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},sr=function(e,t){var n=ur(e,t);return n=lr(n)},lr=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},ur=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},cr=function(e,t){return Math.min(e/4,t/4,8)},hr=function(e,t){return Math.min(e/10,t/10,8)},dr=function(){return 8},pr=function(e,t,n){return[e-2*t+n,2*(t-e),e]},gr=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},fr=Mt({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),vr={pageRank:function(e){for(var t=fr(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++)p[v*c+y]=0;g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),T=l.indexOfId(w),_=a(b);p[T*c+E]+=_,g[E]+=_}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++)p[N*c+C]=D;else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var S,O=new Array(c),I=new Array(c),k=0;k<c;k++)O[k]=1;for(var M=0;M<i;M++){for(var P=0;P<c;P++)I[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;I[R]+=p[F]*O[B]}_n(I),S=O,O=I,I=S;for(var z=0,G=0;G<c;G++){var Y=S[G]-O[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],O[l.indexOf(e)]}}}},yr=Mt({root:null,weight:function(e){return 1},directed:!1,alpha:0}),mr={degreeCentralityNormalized:function(e){e=yr(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(b(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(b(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(b(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=yr(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};mr.dc=mr.degreeCentrality,mr.dcn=mr.degreeCentralityNormalised=mr.degreeCentralityNormalized;var br=Mt({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),xr={closenessCentralityNormalized:function(e){for(var t=br(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=b(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=br(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};xr.cc=xr.closenessCentrality,xr.ccn=xr.closenessCentralityNormalised=xr.closenessCentralityNormalized;var wr=Mt({weight:null,directed:!1}),Er={betweennessCentrality:function(e){for(var t=wr(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,c={set:function(e,t){l[e]=t,t>u&&(u=t)},get:function(e){return l[e]}},h=0;h<o.length;h++){var d=o[h],p=d.id();s[p]=n?d.outgoers().nodes():d.openNeighborhood().nodes(),c.set(p,0)}for(var g=function(e){for(var t=o[e].id(),n=[],l={},u={},h={},d=new $t((function(e,t){return h[e]-h[t]})),p=0;p<o.length;p++){var g=o[p].id();l[g]=[],u[g]=0,h[g]=1/0}for(u[t]=1,h[t]=0,d.push(t);!d.empty();){var f=d.pop();if(n.push(f),i)for(var v=0;v<s[f].length;v++){var y=s[f][v],m=a.getElementById(f),b=void 0;b=m.edgesTo(y).length>0?m.edgesTo(y)[0]:y.edgesTo(m)[0];var x=r(b);y=y.id(),h[y]>h[f]+x&&(h[y]=h[f]+x,d.nodes.indexOf(y)<0?d.push(y):d.updateItem(y),u[y]=0,l[y]=[]),h[y]==h[f]+x&&(u[y]=u[y]+u[f],l[y].push(f))}else for(var w=0;w<s[f].length;w++){var E=s[f][w].id();h[E]==1/0&&(d.push(E),h[E]=h[f]+1),h[E]==h[f]+1&&(u[E]=u[E]+u[f],l[E].push(f))}}for(var T={},_=0;_<o.length;_++)T[o[_].id()]=0;for(;n.length>0;){for(var D=n.pop(),C=0;C<l[D].length;C++){var N=l[D][C];T[N]=T[N]+u[N]/u[D]*(1+T[D])}D!=o[e].id()&&c.set(D,c.get(D)+T[D])}},f=0;f<o.length;f++)g(f);var v={betweenness:function(e){var t=a.collection(e).id();return c.get(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return c.get(t)/u}};return v.betweennessNormalised=v.betweennessNormalized,v}};Er.bc=Er.betweennessCentrality;var Tr=Mt({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),_r=function(e){return Tr(e)},Dr=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},Cr=function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n},Nr=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Ar=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Lr=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Ar(e,r,t);return e},Sr=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return Nr(r,t),r},Or=function(e,t,n,r){for(var i=0;i<n;i++)if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!=Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1;return!0},Ir=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i},kr=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},Mr=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&kr(e[t],e[n])&&e.splice(n,1);return e},Pr=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=_r(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=Dr(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}Cr(c,l,i.multFactor),Nr(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Lr(c,l,i.expandFactor),c=Sr(s,l,i.inflateFactor),Or(c,s,u,4)||(y=!0),m++;var b=Ir(c,l,t,r);return b=Mr(b)},Rr={markovClustering:Pr,mcl:Pr},Br=function(e){return e},Fr=function(e,t){return Math.abs(t-e)},zr=function(e,t,n){return e+Fr(t,n)},Gr=function(e,t,n){return e+Math.pow(n-t,2)},Yr=function(e){return Math.sqrt(e)},Xr=function(e,t,n){return Math.max(e,Fr(t,n))},Vr=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Br,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},Ur={euclidean:function(e,t,n){return e>=2?Vr(e,t,n,0,Gr,Yr):Vr(e,t,n,0,zr)},squaredEuclidean:function(e,t,n){return Vr(e,t,n,0,Gr)},manhattan:function(e,t,n){return Vr(e,t,n,0,zr)},max:function(e,t,n){return Vr(e,t,n,-1/0,Xr)}};function jr(e,t,n,r,i,a){var o;return o=x(e)?e:Ur[e]||Ur.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}Ur["squared-euclidean"]=Ur.squaredEuclidean,Ur.squaredeuclidean=Ur.squaredEuclidean;var Hr=Mt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),qr=function(e){return Hr(e)},Wr=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=function(e){return r[e](t)},s=n,l=t;return jr(e,r.length,a,o,s,l)},$r=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},Kr=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=Wr(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Zr=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Qr=function(e,t,n){return Math.abs(t-e)<=n},Jr=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)if(Math.abs(e[r][i]-t[r][i])>n)return!1;return!0},ei=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},ti=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];ei(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},ni=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=Wr("manhattan",t[i],e,n,"kMedoids");return r},ri=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},ii=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=Wr(i.distance,r[h],n[c],i.attributes,"cmeans"),l=Wr(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},ai=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o},oi=function(e){var t,n,r,i,a=this.cy(),o=this.nodes(),s=qr(e);r=new Array(o.length);for(var l=0;l<o.length;l++)r[l]=new Array(s.k);n=new Array(o.length);for(var u=0;u<o.length;u++)n[u]=new Array(s.k);for(var c=0;c<o.length;c++){for(var h=0,d=0;d<s.k;d++)n[c][d]=Math.random(),h+=n[c][d];for(var p=0;p<s.k;p++)n[c][p]=n[c][p]/h}t=new Array(s.k);for(var g=0;g<s.k;g++)t[g]=new Array(s.attributes.length);i=new Array(o.length);for(var f=0;f<o.length;f++)i[f]=new Array(s.k);for(var v=!0,y=0;v&&y<s.maxIterations;)v=!1,ri(t,o,n,i,s),ii(n,r,t,o,s),Jr(n,r,s.sensitivityThreshold)||(v=!0),y++;return{clusters:ai(o,n,s,a),degreeOfMembership:n}},si={kMeans:function(t){var n,r=this.cy(),i=this.nodes(),a=null,o=qr(t),s=new Array(o.k),l={};o.testMode?"number"==typeof o.testCentroids?(o.testCentroids,n=$r(i,o.k,o.attributes)):n="object"===e(o.testCentroids)?o.testCentroids:$r(i,o.k,o.attributes):n=$r(i,o.k,o.attributes);for(var u=!0,c=0;u&&c<o.maxIterations;){for(var h=0;h<i.length;h++)l[(a=i[h]).id()]=Kr(a,n,o.distance,o.attributes,"kMeans");u=!1;for(var d=0;d<o.k;d++){var p=Zr(d,i,l);if(0!==p.length){for(var g=o.attributes.length,f=n[d],v=new Array(g),y=new Array(g),m=0;m<g;m++){y[m]=0;for(var b=0;b<p.length;b++)a=p[b],y[m]+=o.attributes[m](a);v[m]=y[m]/p.length,Qr(v[m],f[m],o.sensitivityThreshold)||(u=!0)}n[d]=v,s[d]=r.collection(p)}}c++}return s},kMedoids:function(t){var n,r,i=this.cy(),a=this.nodes(),o=null,s=qr(t),l=new Array(s.k),u={},c=new Array(s.k);s.testMode?"number"==typeof s.testCentroids||(n="object"===e(s.testCentroids)?s.testCentroids:ti(a,s.k)):n=ti(a,s.k);for(var h=!0,d=0;h&&d<s.maxIterations;){for(var p=0;p<a.length;p++)u[(o=a[p]).id()]=Kr(o,n,s.distance,s.attributes,"kMedoids");h=!1;for(var g=0;g<n.length;g++){var f=Zr(g,a,u);if(0!==f.length){c[g]=ni(n[g],f,s.attributes);for(var v=0;v<f.length;v++)(r=ni(f[v],f,s.attributes))<c[g]&&(c[g]=r,n[g]=f[v],h=!0);l[g]=i.collection(f)}}d++}return l},fuzzyCMeans:oi,fcm:oi},li=Mt({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),ui={single:"min",complete:"max"},ci=function(e){var t=li(e),n=ui[t.linkage];return null!=n&&(t.linkage=n),t},hi=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return jr(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},di=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},pi=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},gi=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&di(t.left,i),t.right&&di(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&di(t.left,i),t.right&&di(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},fi=function(e){for(var t=this.cy(),n=this.nodes(),r=ci(e),i=r.attributes,a=function(e,t){return jr(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=hi(o,u,s,l,r);v;)v=hi(o,u,s,l,r);return"dendrogram"===r.mode?(f=gi(o[0],r.dendrogramDepth,t),r.addDendrogram&&pi(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},vi={hierarchicalClustering:fi,hca:fi},yi=Mt({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),mi=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Dt("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||_(n)||Dt("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),yi(e)},bi=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-jr(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},xi=function(e,t){return"median"===t?yn(e):"mean"===t?vn(e):"min"===t?gn(e):"max"===t?fn(e):t},wi=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r},Ei=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},Ti=function(e,t,n){for(var r=Ei(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return r=Ei(e,t,n)},_i=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=mi(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=bi(u.distance,l[p],l[g],u.attributes));i=xi(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,T=new Array(t*u.minIterations),_=0;_<T.length;_++)T[_]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,S=0;S<t;S++)m[S]=a[D*t+S],(L=o[D*t+S]+r[D*t+S])>=C?(N=C,C=L,A=S):L>N&&(N=L);for(var O=0;O<t;O++)a[D*t+O]=(1-u.damping)*(r[D*t+O]-C)+u.damping*m[O];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var I=0;I<t;I++){for(var k=0,M=0;M<t;M++)m[M]=o[M*t+I],b[M]=Math.max(0,a[M*t+I]),k+=b[M];k-=b[I],b[I]=a[I*t+I],k+=b[I];for(var P=0;P<t;P++)o[P*t+I]=(1-u.damping)*Math.min(0,k-b[P])+u.damping*m[P];o[I*t+I]=(1-u.damping)*(k-b[I])+u.damping*m[I]}for(var R=0,B=0;B<t;B++){var F=o[B*t+B]+a[B*t+B]>0?1:0;T[E%u.minIterations*t+B]=F,R+=F}if(R>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var z=0,G=0;G<t;G++){x[G]=0;for(var Y=0;Y<u.minIterations;Y++)x[G]+=T[Y*t+G];0!==x[G]&&x[G]!==u.minIterations||z++}if(z===t)break}}for(var X=wi(t,a,o),V=Ti(t,r,X),U={},j=0;j<X.length;j++)U[X[j]]=[];for(var H=0;H<l.length;H++){var q=V[c[l[H].id()]];null!=q&&U[q].push(l[H])}for(var W=new Array(X.length),$=0;$<X.length;$++)W[$]=s.collection(U[X[$]]);return W},Di={affinityPropagation:_i,ap:_i},Ci=Mt({root:void 0,directed:!1}),Ni={hierholzer:function(e){if(!E(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Ci(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},Ai=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)},l=function l(u,c,h){u===h&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,g,f,v=e.getElementById(c).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(c))):v.forEach((function(e){d=e.source().id(),p=e.target().id(),(g=d===c?p:d)!==h&&(f=e.id(),o[f]||(o[f]=!0,a.push({x:c,y:g,edge:e})),g in t?t[c].low=Math.min(t[c].low,t[g].id):(l(u,g,c),t[c].low=Math.min(t[c].low,t[g].low),t[c].id<=t[g].low&&(t[c].cutVertex=!0,s(c,g))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,l(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Li=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Si={};[qt,Zt,Qt,en,nn,an,un,vr,mr,xr,Er,Rr,si,vi,Di,Ni,{hopcroftTarjanBiconnected:Ai,htbc:Ai,htb:Ai,hopcroftTarjanBiconnectedComponents:Ai},{tarjanStronglyConnected:Li,tsc:Li,tscc:Li,tarjanStronglyConnectedComponents:Li}].forEach((function(e){Q(Si,e)}));var Oi=0,Ii=1,ki=2,Mi=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=Oi,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Mi.prototype={fulfill:function(e){return Pi(this,Ii,"fulfillValue",e)},reject:function(e){return Pi(this,ki,"rejectReason",e)},then:function(e,t){var n=this,r=new Mi;return n.onFulfilled.push(Fi(e,r,"fulfill")),n.onRejected.push(Fi(t,r,"reject")),Ri(n),r.proxy}};var Pi=function(e,t,n,r){return e.state===Oi&&(e.state=t,e[n]=r,Ri(e)),e},Ri=function(e){e.state===Ii?Bi(e,"onFulfilled",e.fulfillValue):e.state===ki&&Bi(e,"onRejected",e.rejectReason)},Bi=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},Fi=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}zi(t,i)}}},zi=function t(n,r){if(n!==r&&n.proxy!==r){var i;if("object"===e(r)&&null!==r||"function"==typeof r)try{i=r.then}catch(o){return void n.reject(o)}if("function"!=typeof i)n.fulfill(r);else{var a=!1;try{i.call(r,(function(e){a||(a=!0,e===r?n.reject(new TypeError("circular thenable chain")):t(n,e))}),(function(e){a||(a=!0,n.reject(e))}))}catch(o){a||n.reject(o)}}}else n.reject(new TypeError("cannot resolve promise with itself"))};Mi.all=function(e){return new Mi((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Mi.resolve=function(e){return new Mi((function(t,n){t(e)}))},Mi.reject=function(e){return new Mi((function(t,n){n(e)}))};var Gi="undefined"!=typeof Promise?Promise:Mi,Yi=function(e,t,n){var r=S(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&x(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},Xi=Yi.prototype;Q(Xi,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),N(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;return t="frame"===e?n.frames:n.completes,new Gi((function(e,n){t.push((function(){e()}))}))}}),Xi.complete=Xi.completed,Xi.run=Xi.play,Xi.running=Xi.playing;var Vi={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++)t[n]._private.animation.queue=[];return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new Yi(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=dn(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&E(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new Yi(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},Ui=Array.isArray,ji=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hi=/^\w*$/;function qi(e,t){if(Ui(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ge(e))||Hi.test(e)||!ji.test(e)||null!=t&&e in Object(t)}var Wi=qi,$i="[object AsyncFunction]",Ki="[object Function]",Zi="[object GeneratorFunction]",Qi="[object Proxy]";function Ji(e){if(!le(e))return!1;var t=Pe(e);return t==Ki||t==Zi||t==$i||t==Qi}var ea,ta=Ji,na=pe["__core-js_shared__"],ra=(ea=/[^.]+$/.exec(na&&na.keys&&na.keys.IE_PROTO||""))?"Symbol(src)_1."+ea:"";function ia(e){return!!ra&&ra in e}var aa=ia,oa=Function.prototype.toString;function sa(e){if(null!=e){try{return oa.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var la=sa,ua=/[\\^$.*+?()[\]{}|]/g,ca=/^\[object .+?Constructor\]$/,ha=Function.prototype,da=Object.prototype,pa=ha.toString,ga=da.hasOwnProperty,fa=RegExp("^"+pa.call(ga).replace(ua,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function va(e){return!(!le(e)||aa(e))&&(ta(e)?fa:ca).test(la(e))}var ya=va;function ma(e,t){return null==e?void 0:e[t]}var ba=ma;function xa(e,t){var n=ba(e,t);return ya(n)?n:void 0}var wa=xa,Ea=wa(Object,"create");function Ta(){this.__data__=Ea?Ea(null):{},this.size=0}var _a=Ta;function Da(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Ca=Da,Na="__lodash_hash_undefined__",Aa=Object.prototype.hasOwnProperty;function La(e){var t=this.__data__;if(Ea){var n=t[e];return n===Na?void 0:n}return Aa.call(t,e)?t[e]:void 0}var Sa=La,Oa=Object.prototype.hasOwnProperty;function Ia(e){var t=this.__data__;return Ea?void 0!==t[e]:Oa.call(t,e)}var ka=Ia,Ma="__lodash_hash_undefined__";function Pa(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Ea&&void 0===t?Ma:t,this}var Ra=Pa;function Ba(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Ba.prototype.clear=_a,Ba.prototype.delete=Ca,Ba.prototype.get=Sa,Ba.prototype.has=ka,Ba.prototype.set=Ra;var Fa=Ba;function za(){this.__data__=[],this.size=0}var Ga=za;function Ya(e,t){return e===t||e!=e&&t!=t}var Xa=Ya;function Va(e,t){for(var n=e.length;n--;)if(Xa(e[n][0],t))return n;return-1}var Ua=Va,ja=Array.prototype.splice;function Ha(e){var t=this.__data__,n=Ua(t,e);return!(n<0||(n==t.length-1?t.pop():ja.call(t,n,1),--this.size,0))}var qa=Ha;function Wa(e){var t=this.__data__,n=Ua(t,e);return n<0?void 0:t[n][1]}var $a=Wa;function Ka(e){return Ua(this.__data__,e)>-1}var Za=Ka;function Qa(e,t){var n=this.__data__,r=Ua(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Ja=Qa;function eo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}eo.prototype.clear=Ga,eo.prototype.delete=qa,eo.prototype.get=$a,eo.prototype.has=Za,eo.prototype.set=Ja;var to=eo,no=wa(pe,"Map");function ro(){this.size=0,this.__data__={hash:new Fa,map:new(no||to),string:new Fa}}var io=ro;function ao(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}var oo=ao;function so(e,t){var n=e.__data__;return oo(t)?n["string"==typeof t?"string":"hash"]:n.map}var lo=so;function uo(e){var t=lo(this,e).delete(e);return this.size-=t?1:0,t}var co=uo;function ho(e){return lo(this,e).get(e)}var po=ho;function go(e){return lo(this,e).has(e)}var fo=go;function vo(e,t){var n=lo(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var yo=vo;function mo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}mo.prototype.clear=io,mo.prototype.delete=co,mo.prototype.get=po,mo.prototype.has=fo,mo.prototype.set=yo;var bo=mo,xo="Expected a function";function wo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(xo);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(wo.Cache||bo),n}wo.Cache=bo;var Eo=wo,To=500;function _o(e){var t=Eo(e,(function(e){return n.size===To&&n.clear(),e})),n=t.cache;return t}var Do=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Co=/\\(\\)?/g,No=_o((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Do,(function(e,n,r,i){t.push(r?i.replace(Co,"$1"):n||e)})),t}));function Ao(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var Lo=Ao,So=1/0,Oo=we?we.prototype:void 0,Io=Oo?Oo.toString:void 0;function ko(e){if("string"==typeof e)return e;if(Ui(e))return Lo(e,ko)+"";if(Ge(e))return Io?Io.call(e):"";var t=e+"";return"0"==t&&1/e==-So?"-0":t}var Mo=ko;function Po(e){return null==e?"":Mo(e)}var Ro=Po;function Bo(e,t){return Ui(e)?e:Wi(e,t)?[e]:No(Ro(e))}var Fo=Bo,zo=1/0;function Go(e){if("string"==typeof e||Ge(e))return e;var t=e+"";return"0"==t&&1/e==-zo?"-0":t}var Yo=Go;function Xo(e,t){for(var n=0,r=(t=Fo(t,e)).length;null!=e&&n<r;)e=e[Yo(t[n++])];return n&&n==r?e:void 0}var Vo=Xo;function Uo(e,t,n){var r=null==e?void 0:Vo(e,t);return void 0===r?n:r}var jo=Uo,Ho=function(){try{var e=wa(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();function qo(e,t,n){"__proto__"==t&&Ho?Ho(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Wo=qo,$o=Object.prototype.hasOwnProperty;function Ko(e,t,n){var r=e[t];$o.call(e,t)&&Xa(r,n)&&(void 0!==n||t in e)||Wo(e,t,n)}var Zo=Ko,Qo=9007199254740991,Jo=/^(?:0|[1-9]\d*)$/;function es(e,t){var n=typeof e;return!!(t=null==t?Qo:t)&&("number"==n||"symbol"!=n&&Jo.test(e))&&e>-1&&e%1==0&&e<t}var ts=es;function ns(e,t,n,r){if(!le(e))return e;for(var i=-1,a=(t=Fo(t,e)).length,o=a-1,s=e;null!=s&&++i<a;){var l=Yo(t[i]),u=n;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(i!=o){var c=s[l];void 0===(u=r?r(c,l,s):void 0)&&(u=le(c)?c:ts(t[i+1])?[]:{})}Zo(s,l,u),s=s[l]}return e}var rs=ns;function is(e,t,n){return null==e?e:rs(e,t,n)}var as=is;function os(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}var ss=os;function ls(e){return Ui(e)?Lo(e,Yo):Ge(e)?[e]:ss(No(Ro(e)))}var us=ls,cs={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Gi((function(e,t){var i=function(t){n.off.apply(n,o),e(t)},a=r.concat([i]),o=a.concat([]);n.on.apply(n,a)}))}}},hs={};[Vi,{data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,o=void 0!==i.length,s=o?i:[i],l=o?i[0]:i;if(b(t)){var u,c=-1!==t.indexOf(".")&&us(t);if(r.allowGetting&&void 0===n)return l&&(r.beforeGet(l),u=c&&void 0===l._private[r.field][t]?jo(l._private[r.field],c):l._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var h=a({},t,n);r.beforeSet(i,h);for(var d=0,p=s.length;d<p;d++){var g=s[d];r.canSet(g)&&(c&&void 0===l._private[r.field][t]?as(g._private[r.field],c,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&E(t)){var f,v,y=t,m=Object.keys(y);r.beforeSet(i,y);for(var w=0;w<m.length;w++)if(v=y[f=m[w]],!r.immutableKeys[f])for(var T=0;T<s.length;T++){var _=s[T];r.canSet(_)&&(_._private[r.field][f]=v)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&x(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return l&&(r.beforeGet(l),C=l._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(b(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!k(l)&&!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},cs].forEach((function(e){Q(hs,e)}));var ds={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop()},ps={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}w(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ut(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){w(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};ps.className=ps.classNames=ps.classes;var gs={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:V,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};gs.variable="(?:[\\w-.]|(?:\\\\"+gs.metaChar+"))+",gs.className="(?:[\\w-]|(?:\\\\"+gs.metaChar+"))+",gs.value=gs.string+"|"+gs.number,gs.id=gs.variable,function(){var e,t,n;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],gs.comparatorOp+="|@"+t;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(gs.comparatorOp+="|\\!"+t)}();var fs=function(){return{checks:[]}},vs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ys=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return Z(e.selector,t.selector)})),ms=function(){for(var e,t={},n=0;n<ys.length;n++)t[(e=ys[n]).selector]=e.matches;return t}(),bs=function(e,t){return ms[e](t)},xs="("+ys.map((function(e){return e.selector})).join("|")+")",ws=function(e){return e.replace(new RegExp("\\\\("+gs.metaChar+")","g"),(function(e,t){return t}))},Es=function(e,t,n){e[e.length-1]=n},Ts=[{name:"group",query:!0,regex:"("+gs.group+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.GROUP,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:xs,populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.STATE,value:r})}},{name:"id",query:!0,regex:"\\#("+gs.id+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.ID,value:ws(r)})}},{name:"className",query:!0,regex:"\\.("+gs.className+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.CLASS,value:ws(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.DATA_EXIST,field:ws(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*("+gs.comparatorOp+")\\s*("+gs.value+")\\s*\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];s=null!=new RegExp("^"+gs.string+"$").exec(s)?s.substring(1,s.length-1):parseFloat(s),t.checks.push({type:vs.DATA_COMPARE,field:ws(i),operator:a,value:s})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+gs.boolOp+")\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,2),i=r[0],a=r[1];t.checks.push({type:vs.DATA_BOOL,field:ws(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+gs.meta+")\\s*("+gs.comparatorOp+")\\s*("+gs.number+")\\s*\\]\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];t.checks.push({type:vs.META_COMPARE,field:ws(i),operator:a,value:parseFloat(s)})}},{name:"nextQuery",separator:!0,regex:gs.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]=fs()}},{name:"directedEdge",separator:!0,regex:gs.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.DIRECTED_EDGE,source:r,target:i}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_SOURCE,source:o,target:s}),Es(e,t,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:gs.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.UNDIRECTED_EDGE,nodes:[r,i]}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_NEIGHBOR,node:o,neighbor:s}),Es(e,t,a),s}},{name:"child",separator:!0,regex:gs.child,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.CHILD,parent:i,child:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.PARENT,parent:c,child:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.PARENT,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:gs.descendant,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.DESCENDANT,ancestor:i,descendant:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.ANCESTOR,ancestor:c,descendant:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.ANCESTOR,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:gs.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Nt("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===vs.DIRECTED_EDGE?n.type=vs.NODE_TARGET:r===vs.UNDIRECTED_EDGE&&(n.type=vs.NODE_NEIGHBOR,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];Ts.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var _s=function(e){for(var t,n,r,i=0;i<Ts.length;i++){var a=Ts[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Ds=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e},Cs={parse:function(e){var t=this,n=t.inputText=e,r=t[0]=fs();for(t.length=1,n=Ds(n);;){var i=_s(n);if(null==i.expr)return Nt("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Nt("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Nt("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Nt("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return b(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case vs.GROUP:var l=e(s);return l.substring(0,l.length-1);case vs.DATA_COMPARE:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case vs.DATA_BOOL:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case vs.DATA_EXIST:return"["+r.field+"]";case vs.META_COMPARE:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case vs.STATE:return s;case vs.ID:return"#"+s;case vs.CLASS:return"."+s;case vs.PARENT:case vs.CHILD:return i(r.parent,a)+n(">")+i(r.child,a);case vs.ANCESTOR:case vs.DESCENDANT:return i(r.ancestor,a)+" "+i(r.descendant,a);case vs.COMPOUND_SPLIT:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case vs.TRUE:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},Ns=function(e,t,n){var r,i,a,o=b(e),s=_(e),l=b(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},As=function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}},Ls=function(e){return void 0!==e},Ss=function(e,t){return e.data(t)},Os=function(e,t){return e[t]()},Is=[],ks=function(e,t){return e.checks.every((function(e){return Is[e.type](e,t)}))};Is[vs.GROUP]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Is[vs.STATE]=function(e,t){var n=e.value;return bs(n,t)},Is[vs.ID]=function(e,t){var n=e.value;return t.id()===n},Is[vs.CLASS]=function(e,t){var n=e.value;return t.hasClass(n)},Is[vs.META_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Os(t,n),r,i)},Is[vs.DATA_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Ss(t,n),r,i)},Is[vs.DATA_BOOL]=function(e,t){var n=e.field,r=e.operator;return As(Ss(t,n),r)},Is[vs.DATA_EXIST]=function(e,t){var n=e.field;return e.operator,Ls(Ss(t,n))},Is[vs.UNDIRECTED_EDGE]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return ks(n,i)&&ks(r,a)||ks(r,i)&&ks(n,a)},Is[vs.NODE_NEIGHBOR]=function(e,t){return ks(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&ks(e.neighbor,t)}))},Is[vs.DIRECTED_EDGE]=function(e,t){return ks(e.source,t.source())&&ks(e.target,t.target())},Is[vs.NODE_SOURCE]=function(e,t){return ks(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&ks(e.target,t)}))},Is[vs.NODE_TARGET]=function(e,t){return ks(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&ks(e.source,t)}))},Is[vs.CHILD]=function(e,t){return ks(e.child,t)&&ks(e.parent,t.parent())},Is[vs.PARENT]=function(e,t){return ks(e.parent,t)&&t.children().some((function(t){return ks(e.child,t)}))},Is[vs.DESCENDANT]=function(e,t){return ks(e.descendant,t)&&t.ancestors().some((function(t){return ks(e.ancestor,t)}))},Is[vs.ANCESTOR]=function(e,t){return ks(e.ancestor,t)&&t.descendants().some((function(t){return ks(e.descendant,t)}))},Is[vs.COMPOUND_SPLIT]=function(e,t){return ks(e.subject,t)&&ks(e.left,t)&&ks(e.right,t)},Is[vs.TRUE]=function(){return!0},Is[vs.COLLECTION]=function(e,t){return e.value.has(t)},Is[vs.FILTER]=function(e,t){return(0,e.value)(t)};var Ms={matches:function(e){for(var t=this,n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===vs.ID)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Ps=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||b(e)&&e.match(/^\s*$/)||(N(e)?this.addQuery({checks:[{type:vs.COLLECTION,value:e.collection()}]}):x(e)?this.addQuery({checks:[{type:vs.FILTER,value:e}]}):b(e)?this.parse(e)||(this.invalid=!0):Dt("A selector must be created from a string; found "))},Rs=Ps.prototype;[Cs,Ms].forEach((function(e){return Q(Rs,e)})),Rs.text=function(){return this.inputText},Rs.size=function(){return this.length},Rs.eq=function(e){return this[e]},Rs.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Rs.addQuery=function(e){this[this.length++]=e},Rs.selector=Rs.toString;var Bs={allAre:function(e){var t=new Ps(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Ps(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++)if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0;return!1},every:function(e,t){for(var n=0;n<this.length;n++)if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1;return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Bs.allAreNeighbours=Bs.allAreNeighbors,Bs.has=Bs.contains,Bs.equal=Bs.equals=Bs.same;var Fs,zs,Gs=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":N(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=gt(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Ys={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Gs((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];function n(e){for(var r=0;r<e.length;r++){var i=e[r];t.push(i),i.children().nonempty()&&n(i.children())}}return n(this.children()),this.spawn(t,!0).filter(e)}};function Xs(e,t,n,r){for(var i=[],a=new Ut,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Vs(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function Us(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function js(e,t,n){Us(e,t,n),Vs(e,t,n)}Ys.forEachDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Vs)},Ys.forEachUp=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Us)},Ys.forEachUpAndDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],js)},Ys.ancestors=Ys.parents,(Fs=zs={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:hs.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:hs.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Fs.data,Fs.removeAttr=Fs.removeData;var Hs,qs,Ws=zs,$s={};function Ks(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function Zs(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q($s,{degree:Ks((function(e,t){return t.source().same(t.target())?2:1})),indegree:Ks((function(e,t){return t.target().same(e)?1:0})),outdegree:Ks((function(e,t){return t.source().same(e)?1:0}))}),Q($s,{minDegree:Zs("degree",(function(e,t){return e<t})),maxDegree:Zs("degree",(function(e,t){return e>t})),minIndegree:Zs("indegree",(function(e,t){return e<t})),maxIndegree:Zs("indegree",(function(e,t){return e>t})),minOutdegree:Zs("outdegree",(function(e,t){return e<t})),maxOutdegree:Zs("outdegree",(function(e,t){return e>t}))}),Q($s,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var Qs=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},Js={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){Qs(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};(Hs=qs={position:hs.data(Js),silentPosition:hs.data(Q({},Js,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){Qs(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(E(e))t?this.silentPosition(e):this.position(e);else if(x(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a=this[i],o=void 0;(o=n(a,i))&&(t?a.silentPosition(o):a.position(o))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(E(e)?(r={x:_(e.x)?e.x:0,y:_(e.y)?e.y:0},n=t):b(e)&&_(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return E(e)?this.shift(e,!0):b(e)&&_(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=E(e)?e:void 0,s=void 0!==o||void 0!==t&&b(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=hn(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(dn(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=E(e)?e:void 0,a=void 0!==i||void 0!==t&&b(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}}).modelPosition=Hs.point=Hs.position,Hs.modelPositions=Hs.points=Hs.positions,Hs.renderedPoint=Hs.renderedPosition,Hs.relativePoint=Hs.relativePosition;var el,tl,nl=qs;el=tl={},tl.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},tl.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},tl.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=m(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}function m(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var rl=function(e){return e===1/0||e===-1/0?0:e},il=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},al=function(e,t){return null==t?e:il(e,t.x1,t.y1,t.x2,t.y2)},ol=function(e,t,n){return Ft(e,t,n)},sl=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,Mn(u,1),il(e,u.x1,u.y1,u.x2,u.y2)}}},ll=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=ol(a,"labelWidth",n),p=ol(a,"labelHeight",n),g=ol(a,"labelX",n),f=ol(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,T=2,_=p,D=d,C=D/2,N=_/2;if(m)o=g-C,s=g+C,l=f-N,u=f+N;else{switch(c.value){case"left":o=g-D,s=g;break;case"center":o=g-C,s=g+C;break;case"right":o=g,s=g+D}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-N,u=f+N;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-T,s+=v+Math.max(x,w)+E+T,l+=y-Math.max(x,w)-E-T,u+=y+Math.max(x,w)+E+T;var A=n||"main",L=i.labelBounds,S=L[A]=L[A]||{};S.x1=o,S.y1=l,S.x2=s,S.y2=u,S.w=s-o,S.h=u-l;var O=m&&"autorotate"===b.strValue,I=null!=b.pfValue&&0!==b.pfValue;if(O||I){var k=O?ol(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(k),P=Math.sin(k),R=(o+s)/2,B=(l+u)/2;if(!m){switch(c.value){case"left":R=s;break;case"right":R=o}switch(h.value){case"top":B=u;break;case"bottom":B=l}}var F=function(e,t){return{x:(e-=R)*M-(t-=B)*P+R,y:e*P+t*M+B}},z=F(o,l),G=F(o,u),Y=F(s,l),X=F(s,u);o=Math.min(z.x,G.x,Y.x,X.x),s=Math.max(z.x,G.x,Y.x,X.x),l=Math.min(z.y,G.y,Y.y,X.y),u=Math.max(z.y,G.y,Y.y,X.y)}var V=A+"Rot",U=L[V]=L[V]||{};U.x1=o,U.y1=l,U.x2=s,U.y2=u,U.w=s-o,U.h=u-l,il(e,o,l,s,u),il(i.labelBounds.all,o,l,s,u)}return e}},ul=function(e,t){var n,r,i,a,o,s,l=e._private.cy,u=l.styleEnabled(),c=l.headless(),h=Ln(),d=e._private,p=e.isNode(),g=e.isEdge(),f=d.rstyle,v=p&&u?e.pstyle("bounds-expansion").pfValue:[0],y=function(e){return"none"!==e.pstyle("display").value},m=!u||y(e)&&(!g||y(e.source())&&y(e.target()));if(m){var b=0;u&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(b=e.pstyle("overlay-padding").value);var x=0;u&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(x=e.pstyle("underlay-padding").value);var w=Math.max(b,x),E=0;if(u&&(E=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var _=e.outerWidth()/2,D=e.outerHeight()/2;il(h,n=o-_,i=s-D,r=o+_,a=s+D)}else if(g&&t.includeEdges)if(u&&!c){var C=e.pstyle("curve-style").strValue;if(n=Math.min(f.srcX,f.midX,f.tgtX),r=Math.max(f.srcX,f.midX,f.tgtX),i=Math.min(f.srcY,f.midY,f.tgtY),a=Math.max(f.srcY,f.midY,f.tgtY),il(h,n-=E,i-=E,r+=E,a+=E),"haystack"===C){var N=f.haystackPts;if(N&&2===N.length){if(n=N[0].x,i=N[0].y,n>(r=N[1].x)){var A=n;n=r,r=A}if(i>(a=N[1].y)){var L=i;i=a,a=L}il(h,n-E,i-E,r+E,a+E)}}else if("bezier"===C||"unbundled-bezier"===C||"segments"===C||"taxi"===C){var S;switch(C){case"bezier":case"unbundled-bezier":S=f.bezierPts;break;case"segments":case"taxi":S=f.linePts}if(null!=S)for(var O=0;O<S.length;O++){var I=S[O];n=I.x-E,r=I.x+E,i=I.y-E,a=I.y+E,il(h,n,i,r,a)}}}else{var k=e.source().position(),M=e.target().position();if((n=k.x)>(r=M.x)){var P=n;n=r,r=P}if((i=k.y)>(a=M.y)){var R=i;i=a,a=R}il(h,n-=E,i-=E,r+=E,a+=E)}if(u&&t.includeEdges&&g&&(sl(h,e,"mid-source"),sl(h,e,"mid-target"),sl(h,e,"source"),sl(h,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,F=e.pstyle("ghost-offset-y").pfValue;il(h,h.x1+B,h.y1+F,h.x2+B,h.y2+F)}var z=d.bodyBounds=d.bodyBounds||{};Rn(z,h),Pn(z,v),Mn(z,1),u&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,il(h,n-w,i-w,r+w,a+w));var G=d.overlayBounds=d.overlayBounds||{};Rn(G,h),Pn(G,v),Mn(G,1);var Y=d.labelBounds=d.labelBounds||{};null!=Y.all?On(Y.all):Y.all=Ln(),u&&t.includeLabels&&(t.includeMainLabels&&ll(h,e,null),g&&(t.includeSourceLabels&&ll(h,e,"source"),t.includeTargetLabels&&ll(h,e,"target")))}return h.x1=rl(h.x1),h.y1=rl(h.y1),h.x2=rl(h.x2),h.y2=rl(h.y2),h.w=rl(h.x2-h.x1),h.h=rl(h.y2-h.y1),h.w>0&&h.h>0&&m&&(Pn(h,v),Mn(h,1)),h},cl=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays)},hl=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return pt([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},dl=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?gl:cl(t))===gl,o=hl(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=ul(e,pl),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=Ln(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?al(n,r.overlayBounds):al(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?al(n,r.labelBounds.all):(t.includeMainLabels&&al(n,r.labelBounds.mainRot),t.includeSourceLabels&&al(n,r.labelBounds.sourceRot),t.includeTargetLabels&&al(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},pl={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},gl=cl(pl),fl=Mt(pl);tl.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=Ln();var n=fl(e=e||pl),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=hl(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];al(t,dl(h,n))}}else e=void 0===e?pl:fl(e),t=dl(this[0],e);return t.x1=rl(t.x1),t.y1=rl(t.y1),t.x2=rl(t.x2),t.y2=rl(t.y2),t.w=rl(t.x2-t.x1),t.h=rl(t.y2-t.y1),t},tl.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},tl.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),E(e)){var a=e;e=function(){return a}}var o=function(t,n){return t._private.bbAtOldPos=e(t,n)},s=function(e){return e._private.bbAtOldPos};n.startBatch(),t.forEach(o).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var l=Sn(this.boundingBox({useCache:!1}));return t.silentPositions(s),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),l},el.boundingbox=el.bb=el.boundingBox,el.renderedBoundingbox=el.renderedBoundingBox;var vl,yl,ml=tl;vl=yl={};var bl=function(e){e.uppercaseName=X(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=X(e.outerName),vl[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},vl["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},vl["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},vl["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};bl({name:"width"}),bl({name:"height"}),yl.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},yl.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},yl.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var xl=yl,wl=function(e,t){if(e.isEdge())return t(e)},El=function(e,t){if(e.isEdge()){var n=e.cy();return hn(t(e),n.zoom(),n.pan())}},Tl=function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return hn(e,i,r)}))}},_l={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Dl=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},Cl=Object.keys(_l).reduce((function(e,t){var n=_l[t],r=Dl(t);return e[t]=function(){return wl(this,n.get)},n.mult?e[r]=function(){return Tl(this,n.get)}:e[r]=function(){return El(this,n.get)},e}),{}),Nl=Q({},nl,ml,xl,Cl),Al=function(e,t){this.recycle(e,t)};function Ll(){return!1}function Sl(){return!0}Al.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ll,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Sl:Ll):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Sl;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Sl;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Sl,this.stopPropagation()},isDefaultPrevented:Ll,isPropagationStopped:Ll,isImmediatePropagationStopped:Ll};var Ol=/^([^.]+)(\.(?:[^.]+))?$/,Il=".*",kl={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Ml=Object.keys(kl),Pl={};function Rl(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pl,t=arguments.length>1?arguments[1]:void 0,n=0;n<Ml.length;n++){var r=Ml[n];this[r]=e[r]||kl[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Bl=Rl.prototype,Fl=function(e,t,n,r,i,a,o){x(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=w(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!k(u)){var c=u.match(Ol);if(c&&!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},zl=function(e,t){return e.addEventFields(e.context,t),new Al(t.type,t)},Gl=function(e,t,n){if(I(n))t(e,n);else if(E(n))t(e,zl(e,n));else for(var r=w(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!k(a)){var o=a.match(Ol);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,zl(e,{type:s,namespace:l,target:e.context}))}}}};Bl.on=Bl.addListener=function(e,t,n,r,i){return Fl(this,(function(e,t,n,r,i,a,o){x(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Bl.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Bl.removeListener=Bl.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=St(this.listeners));for(var a=this.listeners,o=function(o){var s=a[o];Fl(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Bl.removeAllListeners=function(){return this.removeListener("*")},Bl.emit=Bl.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Gl(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||i.namespace===Il)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&Bt(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Yl={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Xl=function(e){return b(e)?new Ps(e):e},Vl={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Rl(Yl,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n);return this},removeListener:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().removeListener(e,r,n);return this},removeAllListeners:function(){for(var e=0;e<this.length;e++)this[e].emitter().removeAllListeners();return this},one:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().one(e,r,n);return this},once:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})},emit:function(e,t){for(var n=0;n<this.length;n++)this[n].emitter().emit(e,t);return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};hs.eventAliasesOn(Vl);var Ul={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(b(e)||N(e))return new Ps(e).filter(this);if(x(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){b(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(b(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=this,i=e,a=this.length<e.length,o=a?r:i,s=a?i:r,l=0;l<o.length;l++){var u=o[l];s.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this,i=e,a=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return a(r,i),a(i,r),n},diff:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=this,o=e,s=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return s(a,o,n),s(o,a,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&b(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--)e(this[t])&&this.unmergeAt(t);return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},jl=Ul;jl.u=jl["|"]=jl["+"]=jl.union=jl.or=jl.add,jl["\\"]=jl["!"]=jl["-"]=jl.difference=jl.relativeComplement=jl.subtract=jl.not,jl.n=jl["&"]=jl["."]=jl.and=jl.intersection=jl.intersect,jl["^"]=jl["(+)"]=jl["(-)"]=jl.symmetricDifference=jl.symdiff=jl.xor,jl.fnFilter=jl.filterFn=jl.stdFilter=jl.filter,jl.complement=jl.abscomp=jl.absoluteComplement;var Hl,ql={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Wl=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?xt:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},$l={forEach:function(e,t){if(x(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!x(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Wl)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:xt-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};$l.each=$l.forEach,Hl="undefined",("undefined"==typeof Symbol?"undefined":e(Symbol))!=Hl&&e(Symbol.iterator)!=Hl&&($l[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return a({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var Kl=Mt({nodeDimensionsIncludeLabels:!1}),Zl={layoutDimensions:function(e){var t;if(e=Kl(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=F(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=function(e,t,n){var r={x:t.x1+t.w/2,y:t.y1+t.h/2},i={x:(n.x-r.x)*e,y:(n.y-r.y)*e};return{x:r.x+i.x,y:r.y+i.y}},u=t.spacingFactor&&1!==t.spacingFactor,c=function(){if(!u)return null;for(var e=Ln(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);kn(e,i.x,i.y)}return e},h=c(),d=F((function(e,n){var r=s(e,n);if(u){var i=Math.abs(t.spacingFactor);r=l(i,h,r)}return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var p=0;p<r.length;p++){var g=r[p],f=d(g,p);if(null==t.animateFilter||t.animateFilter(g,p)){var v=g.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else g.position(f)}if(t.fit){var y=i.animation({fit:{boundingBox:a.boundingBoxAt(d),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(y)}else if(void 0!==t.zoom&&void 0!==t.pan){var m=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(m)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Gi.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(d),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function Ql(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function Jl(e,t){return e=gt(e),function(n){return Ql(e,t,n)}}function eu(e,t){e=gt(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return Ql(e,n,t)}}Zl.createLayout=Zl.makeLayout=Zl.layout;var tu={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};return t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)})),this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,i=n.style();if(E(e)){var a=e;i.applyBypass(this,a,r),this.emitAndNotify("style")}else if(b(e)){if(void 0===t){var o=this[0];return o?i.getStylePropertyValue(o,e):void 0}i.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?i.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),i=this;if(void 0===e)for(var a=0;a<i.length;a++){var o=i[a];r.removeAllBypasses(o,n)}else{e=e.split(/\s+/);for(var s=0;s<i.length;s++){var l=i[s];r.removeBypasses(l,e,n)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++)i*=a[o].pstyle("opacity").value;return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function nu(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++)if(!t(n[r]))return!1;return!0}function ru(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||nu(i,r);var s=o.source,l=o.target;return n(s)&&(!a||nu(s,n))&&(s===l||n(l)&&(!a||nu(l,n)))}}}var iu=Jl("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));tu.takesUpSpace=eu("takesUpSpace",ru({ok:iu}));var au=Jl("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&iu(e)})),ou=Jl("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&iu(e)}));tu.interactive=eu("interactive",ru({ok:au,parentOk:ou,edgeOkViaNode:iu})),tu.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var su=Jl("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&iu(e)})),lu=iu;tu.visible=eu("visible",ru({ok:su,edgeOkViaNode:lu})),tu.hidden=function(){var e=this[0];if(e)return!e.visible()},tu.isBundledBezier=eu("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace()})),tu.bypass=tu.css=tu.style,tu.renderedCss=tu.renderedStyle,tu.removeBypass=tu.removeCss=tu.removeStyle,tu.pstyle=tu.parsedStyle;var uu={};function cu(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&x(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&w(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function hu(e){uu[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},uu[e.on]=cu({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),uu[e.off]=cu({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}hu({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),hu({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),hu({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),hu({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),uu.deselect=uu.unselect,uu.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},hu({field:"active",on:"activate",off:"unactivate"}),hu({field:"pannable",on:"panify",off:"unpanify"}),uu.inactive=function(){var e=this[0];if(e)return!e._private.active};var du={},pu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode()){for(var o=!1,s=a.connectedEdges(),l=0;l<s.length;l++){var u=s[l],c=u.source(),h=u.target();if(e.noIncomingEdges&&h===a&&c!==a||e.noOutgoingEdges&&c===a&&h!==a){o=!0;break}}o||r.push(a)}}return this.spawn(r,!0).filter(t)}},gu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode())for(var o=a.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();e.outgoing&&u===a?(r.push(l),r.push(c)):e.incoming&&c===a&&(r.push(l),r.push(u))}}return this.spawn(r,!0).filter(t)}},fu=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function vu(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function yu(e){return function(t){var n=[],r=this._private.cy,i=e||{};b(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function mu(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}du.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(du,{roots:pu({noIncomingEdges:!0}),leaves:pu({noOutgoingEdges:!0}),outgoers:Gs(gu({outgoing:!0}),"outgoers"),successors:fu({outgoing:!0}),incomers:Gs(gu({incoming:!0}),"incomers"),predecessors:fu({incoming:!0})}),Q(du,{neighborhood:Gs((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),du.neighbourhood=du.neighborhood,du.closedNeighbourhood=du.closedNeighborhood,du.openNeighbourhood=du.openNeighborhood,Q(du,{source:Gs((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Gs((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:vu({attr:"source"}),targets:vu({attr:"target"})}),Q(du,{edgesWith:Gs(yu(),"edgesWith"),edgesTo:Gs(yu({thisIsSrc:!0}),"edgesTo")}),Q(du,{connectedEdges:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];if(i.isNode())for(var a=i._private.edges,o=0;o<a.length;o++){var s=a[o];t.push(s)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];i.isEdge()&&(t.push(i.source()[0]),t.push(i.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Gs(mu(),"parallelEdges"),codirectedEdges:Gs(mu({codirected:!0}),"codirectedEdges")}),Q(du,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),du.componentsOf=du.components;var bu=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Yt,a=!1;if(t){if(t.length>0&&E(t[0])&&!A(t[0])){a=!0;for(var o=[],s=new Ut,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=Ot();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new jt(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Yt,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Dt("A collection must have a reference to the core")},xu=jt.prototype=bu.prototype=Object.create(Array.prototype);xu.instanceString=function(){return"collection"},xu.spawn=function(e,t){return new bu(this.cy(),e,t)},xu.spawnSelf=function(){return this.spawn(this)},xu.cy=function(){return this._private.cy},xu.renderer=function(){return this._private.cy.renderer()},xu.element=function(){return this[0]},xu.collection=function(){return L(this)?this:new bu(this._private.cy,[this])},xu.unique=function(){return new bu(this._private.cy,this,!0)},xu.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},xu.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new bu(t)},xu.$id=xu.getElementById,xu.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},xu.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},xu.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},xu.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(E(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Lt(r.data),position:Lt(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},xu.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},xu.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new jt(e,r,!1);t.push(i)}return new bu(e,t)},xu.copy=xu.clone,xu.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=Ot();else if(_(f.id))f.id=""+f.id;else{if(k(f.id)||!b(f.id)){Dt("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Dt("Can not create second element with ID `"+f.id+"`"),d();continue}}var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,x=["source","target"],w=x.length,E=!1,T=0;T<w;T++){var D=x[T],C=f[D];_(C)&&(C=f[D]=""+f[D]),null==C||""===C?(Dt("Can not create edge `"+v+"` with unspecified "+D),E=!0):a.hasElementWithId(C)||(Dt("Can not create edge `"+v+"` with nonexistant "+D+" `"+C+"`"),E=!0)}if(E){d();continue}var N=a.getElementById(f.source),A=a.getElementById(f.target);N.same(A)?N._private.edges.push(m):(N._private.edges.push(m),A._private.edges.push(m)),m._private.source=N,m._private.target=A}g.map=new Yt,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var L=0;L<s.length;L++){var S=s[L],O=S._private.data;_(O.parent)&&(O.parent=""+O.parent);var I=O.parent;if(null!=I||S._private.parent){var M=S._private.parent?a.collection().merge(S._private.parent):a.getElementById(I);if(M.empty())O.parent=void 0;else if(M[0].removed())Nt("Node added with missing parent, reference to parent removed"),O.parent=void 0,S._private.parent=null;else{for(var P=!1,R=M;!R.empty();){if(S.same(R)){P=!0,O.parent=void 0;break}R=R.parent()}P||(M[0]._private.children.push(S),S._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var B=e.length===i.length?i:new bu(a,e),F=0;F<B.length;F++){var z=B[F];z.isNode()||(z.parallelEdges().clearTraversalCache(),z.source().clearTraversalCache(),z.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(B).merge(B.connectedNodes()).merge(B.parent()):B).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?B.emitAndNotify("add"):r&&B.emit("add")}return i},xu.removed=function(){var e=this[0];return e&&e._private.removed},xu.inside=function(){var e=this[0];return e&&!e._private.removed},xu.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n<t.length;n++)l(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)l(t[n])}function l(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var u=0,c=n.length;u<c;u++)l(n[u]);function h(e,t){var n=e._private.edges;Pt(n,t),e.clearTraversalCache()}function d(e){e.clearTraversalCache()}var p=[];function g(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Pt(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var f=0;f<r.length;f++){var v=r[f];if(v.isEdge()){var y=v.source()[0],m=v.target()[0];h(y,v),h(m,v);for(var b=v.parallelEdges(),x=0;x<b.length;x++){var w=b[x];d(w),w.isBundledBezier()&&w.dirtyBoundingBoxCache()}}else{var E=v.parent();0!==E.length&&g(E,v)}t&&(v._private.removed=!0)}var T=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<T.length;_++)if(T[_].isParent()){a._private.hasCompoundNodes=!0;break}var D=new bu(this.cy(),r);D.size()>0&&(e?D.emitAndNotify("remove"):t&&D.emit("remove"));for(var C=0;C<p.length;C++){var N=p[C];t&&N.removed()||N.updateStyle()}return D},xu.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Si,ds,ps,Bs,Ys,Ws,$s,Nl,Vl,Ul,ql,$l,Zl,tu,uu,du].forEach((function(e){Q(xu,e)}));var wu={add:function(e){var t,n=this;if(N(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new bu(n,i)}}else if(w(e))t=new bu(n,e);else if(E(e)&&(w(e.nodes)||w(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(w(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new bu(n,l)}else t=new jt(n,e).collection();return t},remove:function(e){if(N(e));else if(b(e)){var t=e;e=this.$(t)}return e.remove()}};function Eu(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,u=1/(l-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var h=0;h<4;++h)if("number"!=typeof arguments[h]||isNaN(arguments[h])||!isFinite(arguments[h]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var d=c?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function g(e,t){return 3*t-6*e}function f(e){return 3*e}function v(e,t,n){return((p(t,n)*e+g(t,n))*e+f(t))*e}function y(e,t,n){return 3*p(t,n)*e*e+2*g(t,n)*e+f(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(v(r,e,n)-t)/o}return r}function b(){for(var t=0;t<l;++t)d[t]=v(t*u,e,n)}function x(t,r,i){var a,l,u=0;do{(a=v(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(a)>o&&++u<s);return l}function w(t){for(var r=0,i=1,o=l-1;i!==o&&d[i]<=t;++i)r+=u;--i;var s=r+(t-d[i])/(d[i+1]-d[i])*u,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function T(){E=!0,e===t&&n===r||b()}var _=function(i){return E||T(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return D},_}var Tu=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4,d=.016;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*d:d;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),_u=function(e,t,n,r){var i=Eu(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Du={linear:function(e,t,n){return e+(t-e)*n},ease:_u(.25,.1,.25,1),"ease-in":_u(.42,0,1,1),"ease-out":_u(0,0,.58,1),"ease-in-out":_u(.42,0,.58,1),"ease-in-sine":_u(.47,0,.745,.715),"ease-out-sine":_u(.39,.575,.565,1),"ease-in-out-sine":_u(.445,.05,.55,.95),"ease-in-quad":_u(.55,.085,.68,.53),"ease-out-quad":_u(.25,.46,.45,.94),"ease-in-out-quad":_u(.455,.03,.515,.955),"ease-in-cubic":_u(.55,.055,.675,.19),"ease-out-cubic":_u(.215,.61,.355,1),"ease-in-out-cubic":_u(.645,.045,.355,1),"ease-in-quart":_u(.895,.03,.685,.22),"ease-out-quart":_u(.165,.84,.44,1),"ease-in-out-quart":_u(.77,0,.175,1),"ease-in-quint":_u(.755,.05,.855,.06),"ease-out-quint":_u(.23,1,.32,1),"ease-in-out-quint":_u(.86,0,.07,1),"ease-in-expo":_u(.95,.05,.795,.035),"ease-out-expo":_u(.19,1,.22,1),"ease-in-out-expo":_u(1,0,0,1),"ease-in-circ":_u(.6,.04,.98,.335),"ease-out-circ":_u(.075,.82,.165,1),"ease-in-out-circ":_u(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Du.linear;var r=Tu(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_u};function Cu(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Nu(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Au(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Nu(e,i),s=Nu(t,i);if(_(o)&&_(s))return Cu(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Cu(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Lu(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Du.linear;else{var c,h,d;c=b(s)?u.parse("transition-timing-function",s).value:s,b(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Du[h].apply(null,d)):o.easingImpl=Du[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};Su(f.x,v.x)&&(y.x=Au(f.x,v.x,p,g)),Su(f.y,v.y)&&(y.y=Au(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(Su(m.x,x.x)&&(w.x=Au(m.x,x.x,p,g)),Su(m.y,x.y)&&(w.y=Au(m.y,x.y,p,g)),e.emit("pan"));var T=o.startZoom,_=o.zoom,D=null!=_&&r;D&&(Su(T,_)&&(a.zoom=An(a.minZoom,Au(T,_,p,g),a.maxZoom)),e.emit("zoom")),(E||D)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&i){for(var N=0;N<C.length;N++){var A=C[N],L=A.name,S=A,O=o.startStyle[L],I=Au(O,S,p,g,u.properties[O.name]);u.overrideBypass(e,L,I)}e.emit("style")}}return o.progress=p,p}function Su(e,t){return!!(null!=e&&null!=t&&(_(e)&&_(t)||e&&t))}function Ou(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Iu(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=0;t--)(0,e[t])();e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ou(t,h,e),Lu(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var ku={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Iu(n,e)}),t.beforeRenderPriorities.animations):n()}function n(){e._private.animationsRunning&&nt((function(t){Iu(t,e),n()}))}}},Mu={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Pu=function(e){return b(e)?new Ps(e):e},Ru={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Rl(Mu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Pu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Pu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},once:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};hs.eventAliasesOn(Ru);var Bu={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Bu.jpeg=Bu.jpg;var Fu={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=b(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(Q({},e,{cy:t,eles:i}));return a}Dt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Dt("A `name` must be specified to make a layout");else Dt("Layout options must be specified to make a layout")}};Fu.createLayout=Fu.makeLayout=Fu.layout;var zu={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Gu=Mt({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Yu={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Nt("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=Gu(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Dt("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Yu.invalidateDimensions=Yu.resize;var Xu={collection:function(e,t){return b(e)?this.$(e):N(e)?e.collection():w(e)?(t||(t={}),new bu(this,e,t.unique,t.removed)):new bu(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Xu.elements=Xu.filter=Xu.$;var Vu={},Uu="t",ju="f";Vu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},Vu.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Uu,h=t[l]===Uu,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Uu&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},Vu.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Uu:ju}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},Vu.getContextStyle=function(e){var t=e.key,n=this,r=this._private.contextStyles=this._private.contextStyles||{};if(r[t])return r[t];for(var i={_private:{key:t}},a=0;a<n.length;a++){var o=n[a];if(t[a]===Uu)for(var s=0;s<o.properties.length;s++){var l=o.properties[s];i[l.name]=l}}return r[t]=i,i},Vu.applyContextStyle=function(e,t,n){for(var r=this,i=e.diffPropNames,a={},o=r.types,s=0;s<i.length;s++){var l=i[s],u=t[l],c=n.pstyle(l);if(!u){if(!c)continue;u=c.bypass?{name:l,deleteBypassed:!0}:{name:l,delete:!0}}if(c!==u){if(u.mapped===o.fn&&null!=c&&null!=c.mapping&&c.mapping.value===u.value){var h=c.mapping;if((h.fnValue=u.value(n))===h.prevFnValue)continue}var d=a[l]={prev:c};r.applyParsedProperty(n,u),d.next=n.pstyle(l),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:a}},Vu.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[it,ot]}for(var h=function(e,n){return t.styleKeys[n][0]=lt(e,t.styleKeys[n][0])},d=function(e,n){return t.styleKeys[n][1]=ut(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),d(e,t)},g=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),d(r,t)}},f=2e9,v=function(e){return-128<e&&e<128&&Math.floor(e)!==e?f-(1024*e|0):e},y=0;y<r.length;y++){var m=r[y],b=l[m];if(null!=b){var x=this.properties[m],w=x.type,E=x.groupKey,T=void 0;null!=x.hashOverride?T=x.hashOverride(e,b):null!=b.pfValue&&(T=b.pfValue);var _=null==x.enums?b.value:null,D=null!=T,C=D||null!=_,N=b.units;w.number&&C&&!w.multiple?(p(v(D?T:_),E),D||null==N||g(N,E)):g(b.strValue,E)}}for(var A=[it,ot],L=0;L<i.length;L++){var S=i[L],O=t.styleKeys[S];A[0]=lt(O[0],A[0]),A[1]=ut(O[1],A[1])}t.styleKey=ct(A[0],A[1]);var I=t.styleKeys;t.labelDimsKey=ht(I.labelDimensions);var k=a(e,["label"],I.labelDimensions);if(t.labelKey=ht(k),t.labelStyleKey=ht(dt(I.commonLabel,k)),!s){var M=a(e,["source-label"],I.labelDimensions);t.sourceLabelKey=ht(M),t.sourceLabelStyleKey=ht(dt(I.commonLabel,M));var P=a(e,["target-label"],I.labelDimensions);t.targetLabelKey=ht(P),t.targetLabelStyleKey=ht(dt(I.commonLabel,P))}if(s){var R=t.styleKeys,B=R.nodeBody,F=R.nodeBorder,z=R.backgroundImage,G=R.compound,Y=R.pie,X=[B,F,z,G,Y].filter((function(e){return null!=e})).reduce(dt,[it,ot]);t.nodeKey=ht(X),t.hasPie=null!=Y&&Y[0]!==it&&Y[1]!==ot}return o!==t.styleKey},Vu.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},Vu.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if(i&&"pie"===i.name.substr(0,3)&&Nt("The pie style properties are deprecated. Create charts using background images instead."),"curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Nt("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++)m=m[y[b]];if(null==m)return f(),!1;if(!_(m))return Nt("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],T=i.valueMin[1],D=i.valueMax[1],C=i.valueMin[2],N=i.valueMax[2],A=null==i.valueMin[3]?1:i.valueMin[3],L=null==i.valueMax[3]?1:i.valueMax[3],S=[Math.round(w+(E-w)*v),Math.round(T+(D-T)*v),Math.round(C+(N-C)*v),Math.round(A+(L-A)*v)];n={bypass:i.bypass,name:i.name,value:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,O,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var I=i.field.split("."),k=h.data,M=0;M<I.length&&k;M++)k=k[I[M]];if(null!=k&&(n=this.parse(i.name,k,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Nt("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Nt("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Lt(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},Vu.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},Vu.update=function(){this._private.cy.mutableElements().updateStyle()},Vu.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(_(p.pfValue)&&_(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):_(p.value)&&_(g.value)?(f=g.value-p.value,v=p.value+y*f):w(p.value)&&w(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new Gi((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Vu.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Vu.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Vu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Vu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Hu={applyBypass:function(e,t,n,r){var i=this,a=[],o=!0;if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<i.properties.length;s++){var l=i.properties[s].name,u=this.parse(l,n,!0);u&&a.push(u)}}else if(b(t)){var c=this.parse(t,n,!0);c&&a.push(c)}else{if(!E(t))return!1;var h=t;r=n;for(var d=Object.keys(h),p=0;p<d.length;p++){var g=d[p],f=h[g];if(void 0===f&&(f=h[G(g)]),void 0!==f){var v=this.parse(g,f,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var y=!1,m=0;m<e.length;m++){for(var x=e[m],w={},T=void 0,_=0;_<a.length;_++){var D=a[_];if(r){var C=x.pstyle(D.name);T=w[D.name]={prev:C}}y=this.applyParsedProperty(x,Lt(D))||y,r&&(T.next=x.pstyle(D.name))}y&&this.updateStyleHints(x),r&&this.updateTransitions(x,w,o)}return y},overrideBypass:function(e,t,n){t=z(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=!0,i=0;i<e.length;i++){for(var a=e[i],o={},s=0;s<t.length;s++){var l=t[s],u=this.properties[l],c=a.pstyle(u.name);if(c&&c.bypass){var h="",d=this.parse(l,h,!0),p=o[u.name]={prev:c};this.applyParsedProperty(a,d),p.next=a.pstyle(u.name)}}this.updateStyleHints(a),n&&this.updateTransitions(a,o,r)}}},qu={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy.container();if(d&&t&&d.getComputedStyle)return d.getComputedStyle(t).getPropertyValue(e)}},Wu={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[G(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){var r=this;if(e=e[0]){var i=r.properties[t];i.alias&&(i=i.pointsTo);var a=i.type,o=e.pstyle(i.name);if(o){var s=o.value,l=o.units,u=o.strValue;if(n&&a.number&&null!=s&&_(s)){var c=e.cy().zoom(),h=function(e){return e*c},d=function(e,t){return h(e)+t},p=w(s);return(p?l.every((function(e){return null!=e})):null!=l)?p?s.map((function(e,t){return d(e,l[t])})).join(" "):d(s,l):p?s.map((function(e){return b(e)?e:""+h(e)})).join(" "):""+h(s)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=E(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[z(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);return u}};Wu.getPropertiesHash=Wu.getNonDefaultPropertiesHash;var $u={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Ku={appendFromString:function(e){var t,n,r,i=this,a=this,o=""+e;function s(){o=o.length>t.length?o.substr(t.length):""}function l(){n=n.length>r.length?n.substr(r.length):""}for(o=o.replace(/[/][*](\s|.)+?[*][/]/g,"");!o.match(/^\s*$/);){var u=o.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Nt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+o);break}t=u[0];var c=u[1];if("core"!==c&&new Ps(c).invalid)Nt("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),s();else{var h=u[2],d=!1;n=h;for(var p=[];!n.match(/^\s*$/);){var g=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Nt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}r=g[0];var f=g[1],v=g[2];i.properties[f]?a.parse(f,v)?(p.push({name:f,val:v}),l()):(Nt("Skipping property: Invalid property definition in: "+r),l()):(Nt("Skipping property: Invalid property name in: "+r),l())}if(d){s();break}a.selector(c);for(var y=0;y<p.length;y++){var m=p[y];a.css(m.name,m.val)}s()}}return a},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Zu={};(function(){var e=V,t=j,n=q,r=W,i=$,a=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},o=function(a){var o=e+"|\\w+|"+t+"|"+n+"|"+r+"|"+i;return"^"+a+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+o+")\\s*\\,\\s*("+o+")\\)$"},s=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Zu.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:o("mapData")},mapLayoutData:{mapping:!0,regex:o("mapLayoutData")},mapScratch:{mapping:!0,regex:o("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:s,singleRegexMatchValue:!0},urls:{regexes:s,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return b(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var l={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||0==e&&0!=t||0!=e&&0==t},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=k(e),r=k(t);return n&&!r||!n&&r}},u=Zu.types,c=[{name:"label",type:u.text,triggersBounds:l.any,triggersZOrder:l.emptyNonEmpty},{name:"text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any}],h=[{name:"source-label",type:u.text,triggersBounds:l.any},{name:"source-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"source-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-offset",type:u.size,triggersBounds:l.any}],d=[{name:"target-label",type:u.text,triggersBounds:l.any},{name:"target-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"target-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-offset",type:u.size,triggersBounds:l.any}],p=[{name:"font-family",type:u.fontFamily,triggersBounds:l.any},{name:"font-style",type:u.fontStyle,triggersBounds:l.any},{name:"font-weight",type:u.fontWeight,triggersBounds:l.any},{name:"font-size",type:u.size,triggersBounds:l.any},{name:"text-transform",type:u.textTransform,triggersBounds:l.any},{name:"text-wrap",type:u.textWrap,triggersBounds:l.any},{name:"text-overflow-wrap",type:u.textOverflowWrap,triggersBounds:l.any},{name:"text-max-width",type:u.size,triggersBounds:l.any},{name:"text-outline-width",type:u.size,triggersBounds:l.any},{name:"line-height",type:u.positiveNumber,triggersBounds:l.any}],g=[{name:"text-valign",type:u.valign,triggersBounds:l.any},{name:"text-halign",type:u.halign,triggersBounds:l.any},{name:"color",type:u.color},{name:"text-outline-color",type:u.color},{name:"text-outline-opacity",type:u.zeroOneNumber},{name:"text-background-color",type:u.color},{name:"text-background-opacity",type:u.zeroOneNumber},{name:"text-background-padding",type:u.size,triggersBounds:l.any},{name:"text-border-opacity",type:u.zeroOneNumber},{name:"text-border-color",type:u.color},{name:"text-border-width",type:u.size,triggersBounds:l.any},{name:"text-border-style",type:u.borderStyle,triggersBounds:l.any},{name:"text-background-shape",type:u.textBackgroundShape,triggersBounds:l.any},{name:"text-justification",type:u.justification}],f=[{name:"events",type:u.bool},{name:"text-events",type:u.bool}],v=[{name:"display",type:u.display,triggersZOrder:l.any,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:u.visibility,triggersZOrder:l.any},{name:"opacity",type:u.zeroOneNumber,triggersZOrder:l.zeroNonZero},{name:"text-opacity",type:u.zeroOneNumber},{name:"min-zoomed-font-size",type:u.size},{name:"z-compound-depth",type:u.zCompoundDepth,triggersZOrder:l.any},{name:"z-index-compare",type:u.zIndexCompare,triggersZOrder:l.any},{name:"z-index",type:u.nonNegativeInt,triggersZOrder:l.any}],y=[{name:"overlay-padding",type:u.size,triggersBounds:l.any},{name:"overlay-color",type:u.color},{name:"overlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"overlay-shape",type:u.overlayShape,triggersBounds:l.any}],m=[{name:"underlay-padding",type:u.size,triggersBounds:l.any},{name:"underlay-color",type:u.color},{name:"underlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"underlay-shape",type:u.overlayShape,triggersBounds:l.any}],x=[{name:"transition-property",type:u.propList},{name:"transition-duration",type:u.time},{name:"transition-delay",type:u.time},{name:"transition-timing-function",type:u.easing}],w=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},E=[{name:"height",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"width",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"shape",type:u.nodeShape,triggersBounds:l.any},{name:"shape-polygon-points",type:u.polygonPointList,triggersBounds:l.any},{name:"background-color",type:u.color},{name:"background-fill",type:u.fill},{name:"background-opacity",type:u.zeroOneNumber},{name:"background-blacken",type:u.nOneOneNumber},{name:"background-gradient-stop-colors",type:u.colors},{name:"background-gradient-stop-positions",type:u.percentages},{name:"background-gradient-direction",type:u.gradientDirection},{name:"padding",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"padding-relative-to",type:u.paddingRelativeTo,triggersBounds:l.any},{name:"bounds-expansion",type:u.boundsExpansion,triggersBounds:l.any}],T=[{name:"border-color",type:u.color},{name:"border-opacity",type:u.zeroOneNumber},{name:"border-width",type:u.size,triggersBounds:l.any},{name:"border-style",type:u.borderStyle}],_=[{name:"background-image",type:u.urls},{name:"background-image-crossorigin",type:u.bgCrossOrigin},{name:"background-image-opacity",type:u.zeroOneNumbers},{name:"background-image-containment",type:u.bgContainment},{name:"background-image-smoothing",type:u.bools},{name:"background-position-x",type:u.bgPos},{name:"background-position-y",type:u.bgPos},{name:"background-width-relative-to",type:u.bgRelativeTo},{name:"background-height-relative-to",type:u.bgRelativeTo},{name:"background-repeat",type:u.bgRepeat},{name:"background-fit",type:u.bgFit},{name:"background-clip",type:u.bgClip},{name:"background-width",type:u.bgWH},{name:"background-height",type:u.bgWH},{name:"background-offset-x",type:u.bgPos},{name:"background-offset-y",type:u.bgPos}],D=[{name:"position",type:u.position,triggersBounds:l.any},{name:"compound-sizing-wrt-labels",type:u.compoundIncludeLabels,triggersBounds:l.any},{name:"min-width",type:u.size,triggersBounds:l.any},{name:"min-width-bias-left",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-width-bias-right",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height",type:u.size,triggersBounds:l.any},{name:"min-height-bias-top",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height-bias-bottom",type:u.sizeMaybePercent,triggersBounds:l.any}],C=[{name:"line-style",type:u.lineStyle},{name:"line-color",type:u.color},{name:"line-fill",type:u.fill},{name:"line-cap",type:u.lineCap},{name:"line-opacity",type:u.zeroOneNumber},{name:"line-dash-pattern",type:u.numbers},{name:"line-dash-offset",type:u.number},{name:"line-gradient-stop-colors",type:u.colors},{name:"line-gradient-stop-positions",type:u.percentages},{name:"curve-style",type:u.curveStyle,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:u.zeroOneNumber,triggersBounds:l.any},{name:"source-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"target-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"control-point-step-size",type:u.size,triggersBounds:l.any},{name:"control-point-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"control-point-weights",type:u.numbers,triggersBounds:l.any},{name:"segment-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"segment-weights",type:u.numbers,triggersBounds:l.any},{name:"taxi-turn",type:u.bidirectionalSizeMaybePercent,triggersBounds:l.any},{name:"taxi-turn-min-distance",type:u.size,triggersBounds:l.any},{name:"taxi-direction",type:u.axisDirection,triggersBounds:l.any},{name:"edge-distances",type:u.edgeDistances,triggersBounds:l.any},{name:"arrow-scale",type:u.positiveNumber,triggersBounds:l.any},{name:"loop-direction",type:u.angle,triggersBounds:l.any},{name:"loop-sweep",type:u.angle,triggersBounds:l.any},{name:"source-distance-from-node",type:u.size,triggersBounds:l.any},{name:"target-distance-from-node",type:u.size,triggersBounds:l.any}],N=[{name:"ghost",type:u.bool,triggersBounds:l.any},{name:"ghost-offset-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-offset-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-opacity",type:u.zeroOneNumber}],A=[{name:"selection-box-color",type:u.color},{name:"selection-box-opacity",type:u.zeroOneNumber},{name:"selection-box-border-color",type:u.color},{name:"selection-box-border-width",type:u.size},{name:"active-bg-color",type:u.color},{name:"active-bg-opacity",type:u.zeroOneNumber},{name:"active-bg-size",type:u.size},{name:"outside-texture-bg-color",type:u.color},{name:"outside-texture-bg-opacity",type:u.zeroOneNumber}],L=[];Zu.pieBackgroundN=16,L.push({name:"pie-size",type:u.sizeMaybePercent});for(var S=1;S<=Zu.pieBackgroundN;S++)L.push({name:"pie-"+S+"-background-color",type:u.color}),L.push({name:"pie-"+S+"-background-size",type:u.percent}),L.push({name:"pie-"+S+"-background-opacity",type:u.zeroOneNumber});var O=[],I=Zu.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:u.arrowShape,triggersBounds:l.any},{name:"arrow-color",type:u.color},{name:"arrow-fill",type:u.arrowFill}].forEach((function(e){I.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;O.push({name:n,type:r,triggersBounds:i})}))}),{});var M=Zu.properties=[].concat(f,x,v,y,m,N,g,p,c,h,d,E,T,_,L,D,C,O,A),P=Zu.propertyGroups={behavior:f,transition:x,visibility:v,overlay:y,underlay:m,ghost:N,commonLabel:g,labelDimensions:p,mainLabel:c,sourceLabel:h,targetLabel:d,nodeBody:E,nodeBorder:T,backgroundImage:_,pie:L,compound:D,edgeLine:C,edgeArrow:O,core:A},R=Zu.propertyGroupNames={};(Zu.propertyGroupKeys=Object.keys(P)).forEach((function(e){R[e]=P[e].map((function(e){return e.name})),P[e].forEach((function(t){return t.groupKey=e}))}));var B=Zu.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];Zu.propertyNames=M.map((function(e){return e.name}));for(var F=0;F<M.length;F++){var z=M[F];M[z.name]=z}for(var G=0;G<B.length;G++){var Y=B[G],X=M[Y.pointsTo],U={name:Y.name,alias:!0,pointsTo:X};M.push(U),M[Y.name]=U}})(),Zu.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Zu.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=Zu.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce((function(e,t){return Zu.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Zu.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var Qu={parse:function(e,t,n,r){var i=this;if(x(t))return i.parseImplWarn(e,t,n,r);var a,o=ft(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Lt(a))&&(a.value=Lt(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Nt("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Nt("The style value of `label` is deprecated for `"+i.name+"`"),i},parseImpl:function(e,t,n,r){var i=this;e=z(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=b(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(x(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return Nt("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):w(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var E=[],T=[],_=[],C="",N=!1,A=0;A<m.length;A++){var L=i.parse(e,m[A],n,"multiple");N=N||b(L.value),E.push(L.value),_.push(null!=L.pfValue?L.pfValue:L.value),T.push(L.units),C+=(A>0?" ":"")+L.strValue}return h.validate&&!h.validate(E,T)?null:h.singleEnum&&N?1===E.length&&b(E[0])?{name:e,value:E[0],strValue:E[0],bypass:n}:null:{name:e,value:E,pfValue:_,strValue:C,bypass:n,units:T}}var S=function(){for(var r=0;r<h.enums.length;r++)if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(h.number){var O,I="px";if(h.units&&(O=h.units),h.implicitUnits&&(I=h.implicitUnits),!h.unitless)if(l){var k="px|em"+(h.allowPercent?"|\\%":"");O&&(k=O);var M=t.match("^("+V+")("+k+")?$");M&&(t=M[1],O=M[2]||I)}else O&&!h.implicitUnits||(O=I);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&!D(t))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:mn(t)),"%"===O&&(P.pfValue=t/100),P}if(h.propList){var R=[],B=""+t;if("none"===B);else{for(var F=B.split(/\s*,\s*|\s+/),G=0;G<F.length;G++){var Y=F[G].trim();i.properties[Y]?R.push(Y):Nt("`"+Y+"` is not a valid property name")}if(0===R.length)return null}return{name:e,value:R,strValue:0===R.length?"none":R.join(" "),bypass:n}}if(h.color){var X=re(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var U=S();if(U)return U}for(var j=h.regexes?h.regexes:[h.regex],H=0;H<j.length;H++){var q=new RegExp(j[H]).exec(t);if(q)return{name:e,value:h.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null}},Ju=function e(t){if(!(this instanceof e))return new e(t);S(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Dt("A style must have a core reference")},ec=Ju.prototype;ec.instanceString=function(){return"style"},ec.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},ec.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},ec.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},ec.selector=function(e){var t="core"===e?null:new Ps(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},ec.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[G(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},ec.style=ec.css,ec.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},ec.append=function(e){return O(e)?e.appendToStyle(this):w(e)?this.appendFromJson(e):b(e)&&this.appendFromString(e),this},Ju.fromJson=function(e,t){var n=new Ju(e);return n.fromJson(t),n},Ju.fromString=function(e,t){return new Ju(e).fromString(t)},[Vu,Hu,qu,Wu,$u,Ku,Zu,Qu].forEach((function(e){Q(ec,e)})),Ju.types=ec.types,Ju.properties=ec.properties,Ju.propertyGroups=ec.propertyGroups,Ju.propertyGroupNames=ec.propertyGroupNames,Ju.propertyGroupKeys=ec.propertyGroupKeys;var tc={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return O(e)?t.style=e.generateStyle(this):w(e)?t.style=Ju.fromJson(this,e):b(e)?t.style=Ju.fromString(this,e):t.style=Ju(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},nc="single",rc={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType=nc),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(b(a[0]))return o[e=a[0]];if(E(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,_(r)&&(o.x=r),_(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!_(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:E(e)&&(a=(i=s[0]).x,o=i.y,_(a)&&(l.x+=a),_(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!_(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(_(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n;if(b(e)){var r=e;e=this.$(r)}else if(P(e)){var i=e;(n={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else N(e)||(e=this.mutableElements());if(!N(e)||!e.empty()){n=n||e.boundingBox();var a,o=this.width(),s=this.height();if(t=_(t)?t:0,!isNaN(o)&&!isNaN(s)&&o>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((o-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:a)<this._private.minZoom?this._private.minZoom:a,pan:{x:(o-a*(n.x1+n.x2))/2,y:(s-a*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return _(e)&&_(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):_(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:_(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),_(e)?n=e:E(e)&&(n=e.level,null!=e.position?t=hn(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!_(n)||n===a||null!=t&&(!_(t.x)||!_(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(_(e.zoom)||(n=!1),E(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;_(l.x)&&(t.pan.x=l.x,o=!1),_(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(b(e)){var n=e;e=this.mutableElements().filter(n)}else N(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container;return n.sizeCache=n.sizeCache||(r?(e=d.getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};rc.centre=rc.center,rc.autolockNodes=rc.autolock,rc.autoungrabifyNodes=rc.autoungrabify;var ic={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ic.attr=ic.data,ic.removeAttr=ic.removeData;var ac=function(e){var t=this,n=(e=Q({},e)).container;n&&!C(n)&&C(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==d&&void 0!==n&&!e.headless,o=e;o.layout=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new bu(this),listeners:[],aniEles:new bu(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:_(o.zoom)?o.zoom:1,pan:{x:E(o.pan)&&_(o.pan.x)?o.pan.x:0,y:E(o.pan)&&_(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});var u=function(e,t){if(e.some(R))return Gi.all(e).then(t);t(e)};l.styleEnabled&&t.setStyle([]);var c=Q({},o,o.renderer);t.initRenderer(c);var h=function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(E(e)||w(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()};u([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),h(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},oc=ac.prototype;Q(oc,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!C(e)&&C(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Lt(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements(),i=function(e){return t.getElementById(e.id())};if(E(e)){if(t.startBatch(),e.elements){var a={},o=function(e,n){for(var r=[],i=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);a[l]=!0,0!==u.length?i.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Nt("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<i.length;c++){var h=i[c],d=h.ele,p=h.json;d.json(p)}};if(w(e.elements))o(e.elements);else for(var s=["nodes","edges"],l=0;l<s.length;l++){var u=s[l],c=e.elements[u];w(c)&&o(c,u)}var h=t.collection();r.filter((function(e){return!a[e.id()]})).forEach((function(e){e.isParent()?h.merge(e):e.remove()})),h.forEach((function(e){return e.children().move({parent:null})})),h.forEach((function(e){return i(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],p=0;p<d.length;p++){var g=d[p];null!=e[g]&&t[g](e[g])}return t.endBatch(),this}var f={};e?f.elements=this.elements().map((function(e){return e.json()})):(f.elements={},r.forEach((function(e){var t=e.group();f.elements[t]||(f.elements[t]=[]),f.elements[t].push(e.json())}))),this._private.styleEnabled&&(f.style=t.style().json()),f.data=Lt(t.data());var v=n.options;return f.zoomingEnabled=n.zoomingEnabled,f.userZoomingEnabled=n.userZoomingEnabled,f.zoom=n.zoom,f.minZoom=n.minZoom,f.maxZoom=n.maxZoom,f.panningEnabled=n.panningEnabled,f.userPanningEnabled=n.userPanningEnabled,f.pan=Lt(n.pan),f.boxSelectionEnabled=n.boxSelectionEnabled,f.renderer=Lt(v.renderer),f.hideEdgesOnViewport=v.hideEdgesOnViewport,f.textureOnViewport=v.textureOnViewport,f.wheelSensitivity=v.wheelSensitivity,f.motionBlur=v.motionBlur,f.multiClickDebounceTime=v.multiClickDebounceTime,f}}),oc.$id=oc.getElementById,[wu,ku,Ru,Bu,Fu,zu,Yu,Xu,tc,rc,ic].forEach((function(e){Q(oc,e)}));var sc={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},lc={maximal:!1,acyclic:!1},uc=function(e){return e.scratch("breadthfirst")},cc=function(e,t){return e.scratch("breadthfirst",t)};function hc(e){this.options=Q({},sc,lc,e)}hc.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(N(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(b(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},x=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),cc(e,{index:n,depth:t})},E=function(e,t){var n=uc(e),r=n.depth,i=n.index;y[r][i]=null,x(e,t)};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();x(a,i),m[o]=!0}});for(var T=[],_=0;_<a.length;_++){var D=a[_];m[D.id()]||T.push(D)}var C=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?cc(r,{depth:e,index:n}):(t.splice(n,1),n--)}},A=function(){for(var e=0;e<y.length;e++)C(e)},L=function(e,t){for(var r=uc(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=uc(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return E(e,h),t[s]=h,!0}return!1};if(s&&l){var S=[],O={},I=function(e){return S.push(e)},k=function(){return S.shift()};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var M=k(),P=L(M,O);if(P)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(I);else if(null===P){Nt("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var R=0;if(n.avoidOverlap)for(var B=0;B<a.length;B++){var F=a[B].layoutDimensions(n),z=F.w,G=F.h;R=Math.max(R,z,G)}var Y={},X=function(e){if(Y[e.id()])return Y[e.id()];for(var t=uc(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=uc(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),Y[e.id()]=r,r},V=function(e,t){var n=X(e)-X(t);return 0===n?K(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var U=0;U<y.length;U++)y[U].sort(V),C(U);for(var j=[],H=0;H<T.length;H++)j.push(T[H]);y.unshift(j),A();for(var q=0,W=0;W<y.length;W++)q=Math.max(y[W].length,q);var $={x:u.x1+u.w/2,y:u.x1+u.h/2},Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0),Q=function(e){var t=uc(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?Z:a)+1),R),s=Math.max(u.h/(y.length+1),R),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,R),n.circle){var c=l*r+l-(y.length>0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:$.x+c*Math.cos(h),y:$.y+c*Math.sin(h)}}return{x:$.x+(i+1-(a+1)/2)*o,y:(r+1)*s}};return i.nodes().layoutPositions(this,n,Q),this};var dc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function pc(e){this.options=Q({},dc,e)}pc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),c=0,h=0;h<a.length;h++){var d=a[h].layoutDimensions(t),p=d.w,g=d.h;c=Math.max(c,p,g)}if(o=_(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-c,a.length>1&&t.avoidOverlap){c*=1.75;var f=Math.cos(u)-Math.cos(0),v=Math.sin(u)-Math.sin(0),y=Math.sqrt(c*c/(f*f+v*v));o=Math.max(y,o)}var m=function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l.x+a,y:l.y+s}};return r.nodes().layoutPositions(this,t,m),this};var gc,fc={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function vc(e){this.options=Q({},fc,e)}vc.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s={x:o.x1+o.w/2,y:o.y1+o.h/2},l=[],u=0,c=0;c<a.length;c++){var h=a[c],d=void 0;d=t.concentric(h),l.push({value:d,node:h}),h._private.scratch.concentric=d}a.updateStyle();for(var p=0;p<a.length;p++){var g=a[p].layoutDimensions(t);u=Math.max(u,g.w,g.h)}l.sort((function(e,t){return t.value-e.value}));for(var f=t.levelWidth(a),v=[[]],y=v[0],m=0;m<l.length;m++){var b=l[m];y.length>0&&Math.abs(y[0].value-b.value)>=f&&(y=[],v.push(y)),y.push(b)}var x=u+t.minNodeSpacing;if(!t.avoidOverlap){var w=v.length>0&&v[0].length>1,E=(Math.min(o.w,o.h)/2-x)/(v.length+w?1:0);x=Math.min(x,E)}for(var T=0,_=0;_<v.length;_++){var D=v[_],C=void 0===t.sweep?2*Math.PI-2*Math.PI/D.length:t.sweep,N=D.dTheta=C/Math.max(1,D.length-1);if(D.length>1&&t.avoidOverlap){var A=Math.cos(N)-Math.cos(0),L=Math.sin(N)-Math.sin(0),S=Math.sqrt(x*x/(A*A+L*L));T=Math.max(S,T)}D.r=T,T+=x}if(t.equidistant){for(var O=0,I=0,k=0;k<v.length;k++){var M=v[k].r-I;O=Math.max(O,M)}I=0;for(var P=0;P<v.length;P++){var R=v[P];0===P&&(I=R.r),R.r=I,I+=O}}for(var B={},F=0;F<v.length;F++)for(var z=v[F],G=z.dTheta,Y=z.r,X=0;X<z.length;X++){var V=z[X],U=t.startAngle+(n?1:-1)*G*X,j={x:s.x+Y*Math.cos(U),y:s.y+Y*Math.sin(U)};B[V.node.id()]=j}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return B[t]})),this};var yc={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function mc(e){this.options=Q({},yc,e),this.options.layout=this}mc.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),gc=!0===e.debug;var r=xc(t,n,e);gc&&bc(r),e.randomize&&Tc(r);var i=rt(),a=function(){Dc(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter||(Cc(r,e),r.temperature=r.temperature*e.coolingFactor,r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=_c(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate)!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(rt()-i>=e.animationThreshold&&a(),nt(t)):(Fc(r,e),s())}();else{for(;u;)u=o(l),l++;Fc(r,e),s()}return this},mc.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},mc.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var bc,xc=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u<s.length;u++)for(var c=s[u],h=0;h<c.length;h++)l[c[h].id()]=u;for(u=0;u<o.nodeSize;u++){var d=(y=i[u]).layoutDimensions(n);(M={}).isLocked=y.locked(),M.id=y.data("id"),M.parentId=y.data("parent"),M.cmptId=l[y.id()],M.children=[],M.positionX=y.position("x"),M.positionY=y.position("y"),M.offsetX=0,M.offsetY=0,M.height=d.w,M.width=d.h,M.maxX=M.positionX+M.width/2,M.minX=M.positionX-M.width/2,M.maxY=M.positionY+M.height/2,M.minY=M.positionY-M.height/2,M.padLeft=parseFloat(y.style("padding")),M.padRight=parseFloat(y.style("padding")),M.padTop=parseFloat(y.style("padding")),M.padBottom=parseFloat(y.style("padding")),M.nodeRepulsion=x(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(M),o.idToIndex[M.id]=u}var p=[],g=0,f=-1,v=[];for(u=0;u<o.nodeSize;u++){var y,m=(y=o.layoutNodes[u]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(p[++f]=y.id,v.push(y.id))}for(o.graphSet.push(v);g<=f;){var b=p[g++],w=o.idToIndex[b],E=o.layoutNodes[w].children;if(E.length>0)for(o.graphSet.push(E),u=0;u<E.length;u++)p[++f]=E[u]}for(u=0;u<o.graphSet.length;u++){var T=o.graphSet[u];for(h=0;h<T.length;h++){var _=o.idToIndex[T[h]];o.indexToGraph[_]=u}}for(u=0;u<o.edgeSize;u++){var D=r[u],C={};C.id=D.data("id"),C.sourceId=D.data("source"),C.targetId=D.data("target");var N=x(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,A=x(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,L=o.idToIndex[C.sourceId],S=o.idToIndex[C.targetId];if(o.indexToGraph[L]!=o.indexToGraph[S]){for(var O=wc(C.sourceId,C.targetId,o),I=o.graphSet[O],k=0,M=o.layoutNodes[L];-1===I.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],k++;for(M=o.layoutNodes[S];-1===I.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],k++;N*=k*n.nestingFactor}C.idealLength=N,C.elasticity=A,o.layoutEdges.push(C)}return o},wc=function(e,t,n){var r=Ec(e,t,0,n);return 2>r.count?0:r.graph},Ec=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2==++o)break}}}return{count:o,graph:r}},Tc=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},_c=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Dc=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=_c(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},Cc=function(e,t,n){Nc(e,t),Ic(e),kc(e,t),Mc(e),Pc(e)},Nc=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Lc(o,l,e,t)}},Ac=function(e){return-e+2*e*Math.random()},Lc=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY,o=1;0===i&&0===a&&(i=Ac(o),a=Ac(o));var s=Sc(e,t,i,a);if(s>0)var l=(c=r.nodeOverlap*s)*i/(v=Math.sqrt(i*i+a*a)),u=c*a/v;else{var c,h=Oc(e,i,a),d=Oc(t,-1*i,-1*a),p=d.x-h.x,g=d.y-h.y,f=p*p+g*g,v=Math.sqrt(f);l=(c=(e.nodeRepulsion+t.nodeRepulsion)/f)*p/v,u=c*g/v}e.isLocked||(e.offsetX-=l,e.offsetY-=u),t.isLocked||(t.offsetX+=l,t.offsetY+=u)}},Sc=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Oc=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ic=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Oc(a,l,u),h=Oc(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},kc=function(e,t){if(0!==t.gravity)for(var n=1,r=0;r<e.graphSet.length;r++){var i=e.graphSet[r],a=i.length;if(0===r)var o=e.clientHeight/2,s=e.clientWidth/2;else{var l=e.layoutNodes[e.idToIndex[i[0]]],u=e.layoutNodes[e.idToIndex[l.parentId]];o=u.positionX,s=u.positionY}for(var c=0;c<a;c++){var h=e.layoutNodes[e.idToIndex[i[c]]];if(!h.isLocked){var d=o-h.positionX,p=s-h.positionY,g=Math.sqrt(d*d+p*p);if(g>n){var f=t.gravity*d/g,v=t.gravity*p/g;h.offsetX+=f,h.offsetY+=v}}}}},Mc=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},Pc=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Rc(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,Bc(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Rc=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Bc=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Fc=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++)if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++)(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1);c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},zc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Gc(e){this.options=Q({},zc,e)}Gc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l<o;){var v=c(),y=h();(y+1)*v>=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var T=w.layoutDimensions(t),_=t.avoidOverlapPadding,D=T.w+_,C=T.h+_;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},S=0,O=0,I=function(){++O>=u&&(O=0,S++)},k={},M=0;M<i.length;M++){var P=i[M],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;k[P.id()]=B,L(B.row,B.col)}}var F=function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=k[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(S,O);)I();n=O*m+m/2+a.x1,r=S*b+b/2+a.y1,L(S,O),I()}return{x:n,y:r}};i.layoutPositions(this,t,F)}return this};var Yc={ready:function(){},stop:function(){}};function Xc(e){this.options=Q({},Yc,e)}Xc.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Xc.prototype.stop=function(){return this};var Vc={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Uc(e){this.options=Q({},Vc,e)}Uc.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=x(e.positions);function r(t){if(null==e.positions)return cn(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}return t.layoutPositions(this,e,(function(e,t){var n=r(e);return!e.locked()&&null!=n&&n})),this};var jc={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Hc(e){this.options=Q({},jc,e)}Hc.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=Ln(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),i=function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}};return n.nodes().layoutPositions(this,e,i),this};var qc=[{name:"breadthfirst",impl:hc},{name:"circle",impl:pc},{name:"concentric",impl:vc},{name:"cose",impl:mc},{name:"grid",impl:Gc},{name:"null",impl:Xc},{name:"preset",impl:Uc},{name:"random",impl:Hc}];function Wc(e){this.options=e,this.notifications=0}var $c=function(){},Kc=function(){throw new Error("A headless instance can not render images")};Wc.prototype={recalculateRenderedStyle:$c,notify:function(){this.notifications++},init:$c,isHeadless:function(){return!0},png:Kc,jpg:Kc};var Zc={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){b(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return Wn(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:Et,roughCollide:Et,draw:_t,spacing:Tt,gap:Tt}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return Wn(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e,i=3,a=5;return n[i]=n[i]-r,n[a]=n[a]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},Qc={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=d.getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i={left:r("padding-left"),right:r("padding-right"),top:r("padding-top"),bottom:r("padding-bottom")},a={left:r("border-left-width"),right:r("border-right-width"),top:r("border-top-width"),bottom:r("border-bottom-width")},o=e.clientWidth,s=e.clientHeight,l=i.left+i.right,u=i.top+i.bottom,c=a.left+a.right,h=t.width/(o+c),p=o-l,g=s-u,f=t.left+i.left+a.left,v=t.top+i.top+a.top;return this.containerBB=[f,v,p,g,h]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Xn(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=qn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Vn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=Hn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),T=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<T.length;w++){var _=T[w],D=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},C,d)&&D.collide(e,t,E,_.angle,{x:_.x,y:_.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Ft(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),T=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},_=T(f,m),D=T(f,x),C=T(y,m),N=T(y,x),A=[_.x+d,_.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Wn(e,t,A))return v(n),!0}else if(Fn(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i=this.getCachedZSortedEles().interactive,a=[],o=Math.min(e,n),s=Math.max(e,n),l=Math.min(t,r),u=Math.max(t,r),c=Ln({x1:e=o,y1:t=l,x2:n=s,y2:r=u}),h=0;h<i.length;h++){var d=i[h];if(d.isNode()){var p=d,g=p.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});Bn(c,g)&&!Gn(g,c)&&a.push(p)}else{var f=d,v=f._private,y=v.rscratch;if(null!=y.startX&&null!=y.startY&&!Fn(c,y.startX,y.startY))continue;if(null!=y.endX&&null!=y.endY&&!Fn(c,y.endX,y.endY))continue;if("bezier"===y.edgeType||"multibezier"===y.edgeType||"self"===y.edgeType||"compound"===y.edgeType||"segments"===y.edgeType||"haystack"===y.edgeType){for(var m=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,b=!0,x=0;x<m.length;x++)if(!zn(c,m[x])){b=!1;break}b&&a.push(f)}else"haystack"!==y.edgeType&&"straight"!==y.edgeType||a.push(f)}}return a}},Jc={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-Dn(g[0],g[2],g[4],.1),n=i-Dn(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=bn(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,T,g=s.allpts;if(s.ctrlpts.length/2%2==0){var _=2+(D=2+(C=g.length/2-1));x=Dn(g[C],g[D],g[_],0),w=Dn(g[C+1],g[D+1],g[_+1],0),E=Dn(g[C],g[D],g[_],1e-4),T=Dn(g[C+1],g[D+1],g[_+1],1e-4)}else{var D,C;_=2+(D=g.length/2-1),x=Dn(g[C=D-2],g[D],g[_],.4999),w=Dn(g[C+1],g[D+1],g[_+1],.4999),E=Dn(g[C],g[D],g[_],.5),T=Dn(g[C+1],g[D+1],g[_+1],.5)}t=E-x,n=T-w}if(s.midtgtArrowAngle=bn(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h&&((g=s.allpts).length/2%2==0||(t=-(g[b=2+(m=g.length/2-1)]-g[m]),n=-(g[b+1]-g[m+1]))),s.midsrcArrowAngle=bn(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-Dn(g[N-6],g[N-4],g[N-2],.9),n=o-Dn(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=bn(t,n)}};Jc.getArrowWidth=Jc.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var eh={};function th(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}eh.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},eh.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("edge-distances").value,s=e.pstyle("segment-weights"),l=e.pstyle("segment-distances"),u=Math.min(s.pfValue.length,l.pfValue.length);n.edgeType="segments",n.segpts=[];for(var c=0;c<u;c++){var h=s.pfValue[c],d=l.pfValue[c],p=1-h,g=h,f="node-position"===o?r:i,v={x:f.x1*p+f.x2*g,y:f.y1*p+f.y2*g};n.segpts.push(v.x+a.x*d,v.y+a.y*d)}},eh.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},eh.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v=50,y={x:a.x-s/2,y:a.y-l/2},m={x:o.x-u/2,y:o.y-c/2},b={x:Math.min(y.x,m.x),y:Math.min(y.y,m.y)},x=.5,w=Math.max(x,Math.log(.01*s)),E=Math.max(x,Math.log(.01*u));i.ctrlpts=[b.x,b.y-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*w,b.x-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*E,b.y]},eh.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},eh.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=t.vectorNormInverse,s=t.posPts,l=t.intersectionPts,u=e.pstyle("edge-distances").value,c=e.pstyle("control-point-step-size").pfValue,h=e.pstyle("control-point-distances"),d=e.pstyle("control-point-weights"),p=h&&d?Math.min(h.value.length,d.value.length):1,g=h?h.pfValue[0]:void 0,f=d.value[0],v=r;a.edgeType=v?"multibezier":"bezier",a.ctrlpts=[];for(var y=0;y<p;y++){var m=(.5-t.eles.length/2+n)*c*(i?-1:1),b=void 0,x=wn(m);v&&(g=h?h.pfValue[y]:c,f=d.value[y]);var w=void 0!==(b=r?g:void 0!==g?x*g:void 0)?b:m,E=1-f,T=f,_="node-position"===u?s:l,D={x:_.x1*E+_.x2*T,y:_.y1*E+_.y2*T};a.ctrlpts.push(D.x+o.x*w,D.y+o.y*w)}},eh.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u="auto",c=t.posPts,h=t.srcW,d=t.srcH,p=t.tgtW,g=t.tgtH,f="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,y=v,m=e.pstyle("taxi-turn"),b="%"===m.units,x=m.pfValue,w=x<0,E=e.pstyle("taxi-turn-min-distance").pfValue,T=f?(h+p)/2:0,_=f?(d+g)/2:0,D=c.x2-c.x1,C=c.y2-c.y1,N=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},A=N(D,T),L=N(C,_),S=!1;y===u?v=Math.abs(A)>Math.abs(L)?i:r:y===l||y===s?(v=r,S=!0):y!==a&&y!==o||(v=i,S=!0);var O,I=v===r,k=I?L:A,M=I?C:D,P=wn(M),R=!1;S&&(b||w)||!(y===s&&M<0||y===l&&M>0||y===a&&M>0||y===o&&M<0)||(k=(P*=-1)*Math.abs(k),R=!0);var B=function(e){return Math.abs(e)<E||Math.abs(e)>=Math.abs(k)},F=B(O=b?(x<0?1+x:x)*k:(x<0?k:0)+x*P),z=B(Math.abs(k)-Math.abs(O));if(!F&&!z||R)if(I){var G=c.y1+O+(f?d/2*P:0),Y=c.x1,X=c.x2;n.segpts=[Y,G,X,G]}else{var V=c.x1+O+(f?h/2*P:0),U=c.y1,j=c.y2;n.segpts=[V,U,V,j]}else if(I){var H=Math.abs(M)<=d/2,q=Math.abs(D)<=p/2;if(H){var W=(c.x1+c.x2)/2,$=c.y1,K=c.y2;n.segpts=[W,$,W,K]}else if(q){var Z=(c.y1+c.y2)/2,Q=c.x1,J=c.x2;n.segpts=[Q,Z,J,Z]}else n.segpts=[c.x1,c.y2]}else{var ee=Math.abs(M)<=h/2,te=Math.abs(C)<=g/2;if(ee){var ne=(c.y1+c.y2)/2,re=c.x1,ie=c.x2;n.segpts=[re,ne,ie,ne]}else if(te){var ae=(c.x1+c.x2)/2,oe=c.y1,se=c.y2;n.segpts=[ae,oe,ae,se]}else n.segpts=[c.x2,c.y1]}},eh.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=!_(n.startX)||!_(n.startY),d=!_(n.arrowStartX)||!_(n.arrowStartY),p=!_(n.endX)||!_(n.endY),g=!_(n.arrowEndX)||!_(n.arrowEndY),f=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth*3,v=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),T={x:w.x/E,y:w.y/E},D=Math.max(a,o),C={x:n.ctrlpts[0]+2*T.x*D,y:n.ctrlpts[1]+2*T.y*D},N=u.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(f-v)):(n.ctrlpts[0]=N[0]+T.x*f,n.ctrlpts[1]=N[1]+T.y*f)}if(p||g||b){x=!0;var A={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},L=Math.sqrt(A.x*A.x+A.y*A.y),S={x:A.x/L,y:A.y/L},O=Math.max(a,o),I={x:n.ctrlpts[0]+2*S.x*O,y:n.ctrlpts[1]+2*S.y*O},k=c.intersectLine(i.x,i.y,s,l,I.x,I.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+S.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+S.y*(f-m)):(n.ctrlpts[0]=k[0]+S.x*f,n.ctrlpts[1]=k[1]+S.y*f)}x&&this.findEndpoints(e)}},eh.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r,i;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,i=.5,t.midX=Dn(t.allpts[r],t.allpts[r+2],t.allpts[r+4],i),t.midY=Dn(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],i))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var a=t.segpts.length/2,o=a-2;t.midX=(t.segpts[o]+t.segpts[a])/2,t.midY=(t.segpts[o+1]+t.segpts[a+1])/2}else{var s=t.segpts.length/2-1;t.midX=t.segpts[s],t.midY=t.segpts[s+1]}},eh.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||_(t.startX)&&_(t.startY)&&_(t.endX)&&_(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Nt("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},eh.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Yt,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Yt,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Rt(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var T=s.eles[E],D=T[0]._private.rscratch,C=T.pstyle("curve-style").value,N="unbundled-bezier"===C||"segments"===C||"taxi"===C,A=!h.same(T.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var L=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),S=s.srcIntn=L,O=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),I=s.tgtIntn=O,k=s.intersectionPts={x1:L[0],x2:O[0],y1:L[1],y2:O[1]},M=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=O[1]-L[1],R=O[0]-L[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!_(B)||w.checkPoint(L[0],L[1],0,m,b,f.x,f.y)||x.checkPoint(O[0],O[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:I,tgtIntn:S,srcShape:w,tgtShape:x,posPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},intersectionPts:{x1:k.x2,y1:k.y2,x2:k.x1,y2:k.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=A?l:s;D.nodesOverlap=Y.nodesOverlap,D.srcIntn=Y.srcIntn,D.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(T,Y,E,N):h===d?t.findLoopPoints(T,Y,E,N):"segments"===C?t.findSegmentsPoints(T,Y):"taxi"===C?t.findTaxiPoints(T,Y):"straight"===C||!N&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(T):t.findBezierPoints(T,Y,E,N,A),t.findEndpoints(T),t.tryToCorrectInvalidPoints(T,Y),t.checkForInvalidEdgeWarning(T),t.storeAllpts(T),t.storeEdgeProjections(T),t.calculateArrowAngles(T),t.recalculateEdgeLabelProjections(T),t.calculateLabelAngles(T)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},eh.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),th(t.segpts)},eh.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),th(t.ctrlpts)},eh.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var nh={manualEndptToPx:function(e,t){var n=this,r=e.position(),i=e.outerWidth(),a=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*i),"%"===t.units[1]&&(o[1]=o[1]*a),o[0]+=r.x,o[1]+=r.y,o}var s=t.pfValue[0];s=-Math.PI/2+s;var l=2*Math.max(i,a),u=[r.x+Math.cos(s)*l,r.y+Math.sin(s)*l];return n.nodeShapes[this.getNodeShape(e)].intersectLine(r.x,r.y,i,a,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,T=b||x||w,D=m||"taxi"===f,C=e.pstyle("source-endpoint"),N=D?"outside-to-node":C.value,A=e.pstyle("target-endpoint"),L=D?"outside-to-node":A.value;if(v.srcManEndpt=C,v.tgtManEndpt=A,b){var S=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:S,r=S}else if(w){var O=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=O}if("inside-to-node"===L)t=[c.x,c.y];else if(A.units)t=this.manualEndptToPx(l,A);else if("outside-to-line"===L)t=v.tgtIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?i=n:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var I=l._private.rscratch,k=I.labelWidth,M=I.labelHeight,P=I.labelX,R=I.labelY,B=k/2,F=M/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=ir(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=Tn(X,pn(t)),U=Tn(X,pn(Y)),j=V;U<V&&(t=Y,j=U),Y.length>2&&Tn(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var H=or(t,n,o.arrowShapes[h].spacing(e)+p),q=or(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=q[0],v.endY=q[1],v.arrowEndX=H[0],v.arrowEndY=H[1],"inside-to-node"===N)t=[u.x,u.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===N)t=v.srcIntn;else if("outside-to-node"===N||"outside-to-node-or-label"===N?a=r:"outside-to-line"!==N&&"outside-to-line-or-label"!==N||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(u.x,u.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===N||"outside-to-line-or-label"===N){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=ir(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=Tn(ie,pn(t)),oe=Tn(ie,pn(re)),se=ae;oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2&&Tn(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=or(t,r,o.arrowShapes[d].spacing(e)+g),ue=or(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],T&&(_(v.startX)&&_(v.startY)&&_(v.endX)&&_(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},rh={};function ih(e,t,n){for(var r=function(e,t,n,r){return Dn(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}rh.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ih(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},rh.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var ah={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!k(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},oh=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},sh=function(e,t){var n=t.x-e.x,r=t.y-e.y;return oh(n,r)},lh=function(e,t,n,r){var i=An(0,r-.001,1),a=An(0,r+.001,1),o=Cn(e,t,n,i),s=Cn(e,t,n,a);return sh(o,s)};ah.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){zt(n.rscratch,e,t,r),zt(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=oh(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=En(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,T=s?x.t0+E*w:x.t1-E*w;T=An(0,T,1),t=Cn(b.p0,b.p1,b.p2,T),i=lh(b.p0,b.p1,b.p2,T);break;case"straight":case"segments":case"haystack":for(var _,D,C,N,A=0,L=r.allpts.length,S=0;S+3<L&&(s?(C={x:r.allpts[S],y:r.allpts[S+1]},N={x:r.allpts[S+2],y:r.allpts[S+3]}):(C={x:r.allpts[L-2-S],y:r.allpts[L-1-S]},N={x:r.allpts[L-4-S],y:r.allpts[L-3-S]}),D=A,!((A+=_=En(C,N))>=u));S+=2);var O=(u-D)/_;O=An(0,O,1),t=Nn(C,N,O),i=sh(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},ah.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ah.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Ft(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;zt(n.rstyle,"labelWidth",t,h),zt(n.rscratch,"labelWidth",t,h),zt(n.rstyle,"labelHeight",t,d),zt(n.rscratch,"labelHeight",t,d),zt(n.rscratch,"labelLineHeight",t,c)},ah.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(zt(n.rscratch,e,t,r),r):Ft(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u="\u200b",c=i.split("\n"),h=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+/,f=d?"":" ",v=0;v<c.length;v++){var y=c[v],m=this.calculateLabelDimensions(e,y).width;if(d){var b=y.split("").join(u);y=b}if(m>h){for(var x=y.split(g),w="",E=0;E<x.length;E++){var T=x[E],_=0===w.length?T:w+f+T;this.calculateLabelDimensions(e,_).width<=h?w+=T+f:(w&&p.push(w),w=T+f)}w.match(/^[\s\u200b]+$/)||p.push(w)}else p.push(y)}o("labelWrapCachedLines",p),i=o("labelWrapCachedText",p.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var D=e.pstyle("text-max-width").pfValue,C="",N="\u2026",A=!1;if(this.calculateLabelDimensions(e,i).width<D)return i;for(var L=0;L<i.length&&!(this.calculateLabelDimensions(e,C+i[L]+N).width>D);L++)C+=i[L],L===i.length-1&&(A=!0);return A||(C+=N),C}return i},ah.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},ah.calculateLabelDimensions=function(e,t){var n=this,r=gt(t,e._private.labelDimsKey),i=n.labelDimCache||(n.labelDimCache=[]),a=i[r];if(null!=a)return a;var o=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=document.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var p=h.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(c," ").concat(l,"px ").concat(u);for(var g=0,f=0,v=t.split("\n"),y=0;y<v.length;y++){var m=v[y],b=d.measureText(m),x=Math.ceil(b.width),w=l;g=Math.max(x,g),f+=w}return g+=o,f+=o,i[r]={width:g,height:f}},ah.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},ah.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var uh={},ch=28,hh=!1;uh.getNodeShape=function(e){var t=this,n=e.pstyle("shape").value;if("cutrectangle"===n&&(e.width()<ch||e.height()<ch))return hh||(Nt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),hh=!0),"rectangle";if(e.isParent())return"rectangle"===n||"roundrectangle"===n||"round-rectangle"===n||"cutrectangle"===n||"cut-rectangle"===n||"barrel"===n?n:"rectangle";if("polygon"===n){var r=e.pstyle("shape-polygon-points").value;return t.nodeShapes.makePolygon(r).name}return n};var dh={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++)(0,a[u])(i,t);n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},ph={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Wl),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},gh={};[Qc,Jc,eh,nh,rh,ah,uh,dh,ph].forEach((function(e){Q(gh,e)}));var fh={getCachedImage:function(e,t,n){var r=this,i=r.imageCache=r.imageCache||{},a=i[e];if(a)return a.image.complete||a.image.addEventListener("load",n),a.image;var o=(a=i[e]=i[e]||{}).image=new Image;o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0}));var s="data:";return e.substring(0,s.length).toLowerCase()===s||(t="null"===t?null:t,o.crossOrigin=t),o.src=e,o}},vh={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)},binder:function(e){var t=this,n=e===window||e===document||e===document.body||M(e);if(null==t.supportsPassiveEvents){var r=!1;try{var i=Object.defineProperty({},"passive",{get:function(){return r=!0,!0}});window.addEventListener("test",null,i)}catch(o){}t.supportsPassiveEvents=r}var a=function(r,i,a){var o=Array.prototype.slice.call(arguments);return n&&t.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),t.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:a,addEventListener:a,addListener:a,bind:a}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()},load:function(){var e=this,t=function(e){return e.selected()},n=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},r=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},i=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},a=function(e){e[0]._private.grabbed=!0},o=function(e){e[0]._private.grabbed=!1},s=function(e){e[0]._private.rscratch.inDragLayer=!0},l=function(e){e[0]._private.rscratch.inDragLayer=!1},u=function(e){e[0]._private.rscratch.isGrabTarget=!0},c=function(e){e[0]._private.rscratch.isGrabTarget=!1},h=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),a(e))},d=function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(s),n.connectedEdges().forEach(s)),t.addToList&&h(n,t)}},p=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(s),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(s)),n.addToList&&t.forEach((function(e){h(e,n)})),d(t,n),v(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},g=p,f=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){o(e),l(e),c(e)})),e.updateCachedGrabbedEles())},v=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(s),r.forEach(s)),t.addToList&&r.forEach((function(e){h(e,t)}))}}},y=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},m="undefined"!=typeof MutationObserver,b="undefined"!=typeof ResizeObserver;m?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var x=Qe((function(){e.cy.resize()}),100);m&&(e.styleObserver=new MutationObserver(x),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(window,"resize",x),b&&(e.resizeObserver=new ResizeObserver(x),e.resizeObserver.observe(e.container));var w=function(e,t){for(;null!=e;)t(e),e=e.parentNode},E=function(){e.invalidateContainerClientCoordsCache()};w(e.container,(function(t){e.registerBinding(t,"transitionend",E),e.registerBinding(t,"animationend",E),e.registerBinding(t,"scroll",E)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var T,D,C,N=function(){return 0!==e.selection[4]},A=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(A(t)){t.preventDefault(),y(),e.hoverData.capture=!0,e.hoverData.which=t.which;var r=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,s=e.findNearestElements(a[0],a[1],!0,!1),l=s[0],c=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;var h=function(){e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var n=e.hoverData.down;n?n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)};if(3==t.which){e.hoverData.cxtStarted=!0;var d={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(d),e.hoverData.down=l):r.emit(d),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var f=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}},v=function(e){e.emit(f("grab"))};if(u(l),l.selected()){c=e.dragData.possibleDragElements=r.collection();var m=r.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));p(m,{addToList:c}),l.emit(f("grabon")),m.forEach(v)}else c=e.dragData.possibleDragElements=r.collection(),g(l,{addToList:c}),l.emit(f("grabon")).emit(f("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),n(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),h()}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(window,"mousemove",(function(t){if(e.hoverData.capture||A(t)){var a=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),c=e.hoverData.mdownPos,h=e.hoverData.mdownGPos,d=e.selection,g=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(g=e.findNearestElement(u[0],u[1],!0,!1));var v,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-d[2],u[1]-d[3]],x=e.dragData.possibleDragElements;if(h){var w=l[0]-h[0],E=w*w,T=l[1]-h[1],D=E+T*T;e.hoverData.isOverThresholdDrag=v=D>=e.desktopTapThreshold2}var C=r(t);v&&(e.hoverData.tapholdCancelled=!0);var N=function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])};a=!0,n(g,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var L=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),d[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var S={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(S):o.emit(S),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&g===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=g,g&&g.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(a=!0,o.panningEnabled()&&o.userPanningEnabled()){var O;if(e.hoverData.justStartedPan){var I=e.hoverData.mdownPos;O={x:(u[0]-I[0])*s,y:(u[1]-I[1])*s},e.hoverData.justStartedPan=!1}else O={x:b[0]*s,y:b[1]*s};o.panBy(O),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=d[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||g==y||(y&&n(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),g&&n(g,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=g),m)if(v){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(f(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),L();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var k=!e.dragData.didDrag;k&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||p(x,{inDragLayer:!0});var M={x:0,y:0};if(_(b[0])&&_(b[1])&&(M.x+=b[0],M.y+=b[1],k)){var P=e.hoverData.dragDelta;P&&_(P[0])&&_(P[1])&&(M.x+=P[0],M.y+=P[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else N();a=!0}else v&&(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()?!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()&&i(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,d[4]=0,e.data.bgActivePosistion=pn(c),e.redrawHint("select",!0),e.redraw()):L(),m&&m.pannable()&&m.active()&&m.unactivate());return d[2]=u[0],d[3]=u[1],a?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(i){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(i.clientX,i.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=r(i);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var d={originalEvent:i,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):a.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:i,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(n(l,["mouseup","tapend","vmouseup"],i,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(n(c,["click","tap","vclick"],i,{x:o[0],y:o[1]}),D=!1,i.timeStamp-C<=a.multiClickDebounceTime()?(T&&clearTimeout(T),D=!0,C=null,n(c,["dblclick","dbltap","vdblclick"],i,{x:o[0],y:o[1]})):(T=setTimeout((function(){D||n(c,["oneclick","onetap","voneclick"],i,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),C=i.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||r(i)||(a.$(t).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(t).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:i,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(t).unmerge(g).unselect(),g.emit("box").stdFilter(v).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();f(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var L,S,O,I,k,M,P,R,B,F,z,G,Y,X=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||N())t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",X,!0),e.registerBinding(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||X(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var V,U,j,H,q,W,$,K=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Z=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",V=function(t){if(e.hasTouchStarted=!0,A(t)){y(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var r=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]&&(o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),i[2]=o[0],i[3]=o[1]),t.touches[2]&&(o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),i[4]=o[0],i[5]=o[1]),t.touches[1]){e.touchData.singleTouchMoved=!0,f(e.dragData.touchDragEles);var s=e.findContainerClientCoords();B=s[0],F=s[1],z=s[2],G=s[3],L=t.touches[0].clientX-B,S=t.touches[0].clientY-F,O=t.touches[1].clientX-B,I=t.touches[1].clientY-F,Y=0<=L&&L<=z&&0<=O&&O<=z&&0<=S&&S<=G&&0<=I&&I<=G;var l=r.pan(),c=r.zoom();k=K(L,S,O,I),M=Z(L,S,O,I),R=[((P=[(L+O)/2,(S+I)/2])[0]-l.x)/c,(P[1]-l.y)/c];var h=200;if(M<h*h&&!t.touches[2]){var d=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return d&&d.isNode()?(d.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=d):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):r.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])r.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var m=e.findNearestElements(i[0],i[1],!0,!0),b=m[0];if(null!=b&&(b.activate(),e.touchData.start=b,e.touchData.starts=m,e.nodeIsGrabbable(b))){var x=e.dragData.touchDragEles=r.collection(),w=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),b.selected()?(w=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),p(w,{addToList:x})):g(b,{addToList:x}),u(b);var E=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};b.emit(E("grabon")),w?w.forEach((function(e){e.emit(E("grab"))})):b.emit(E("grab"))}n(b,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==b&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||n(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var T=e.touchData.startPosition=[],_=0;_<i.length;_++)T[_]=a[_]=i[_];var D=t.touches[0];e.touchData.startGPosition=[D.clientX,D.clientY]}}},!1),e.registerBinding(window,"touchmove",U=function(t){var r=e.touchData.capture;if(r||A(t)){var a=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=c[0],s[1]=c[1]}t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1]);var h,d=e.touchData.startGPosition;if(r&&t.touches[0]&&d){for(var g=[],v=0;v<s.length;v++)g[v]=s[v]-l[v];var y=t.touches[0].clientX-d[0],m=y*y,b=t.touches[0].clientY-d[1];h=m+b*b>=e.touchTapThreshold2}if(r&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-B,w=t.touches[0].clientY-F,E=t.touches[1].clientX-B,T=t.touches[1].clientY-F,D=Z(x,w,E,T),C=150,N=1.5;if(D/M>=N*N||D>=C*C){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var P={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(P),e.touchData.start=null):o.emit(P)}}if(r&&e.touchData.cxt){P={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}},e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(P):o.emit(P),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var z=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&z===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=z,z&&z.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(r&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(r&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ne=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var G=0;G<ne.length;G++){var X=ne[G]._private;X.grabbed=!1,X.rscratch.inDragLayer=!1}}var V=e.touchData.start,U=(x=t.touches[0].clientX-B,w=t.touches[0].clientY-F,E=t.touches[1].clientX-B,T=t.touches[1].clientY-F,K(x,w,E,T)),j=U/k;if(Y){var H=(x-L+(E-O))/2,q=(w-S+(T-I))/2,W=o.zoom(),$=W*j,Q=o.pan(),J=R[0]*W+Q.x,ee=R[1]*W+Q.y,te={x:-$/W*(J-Q.x-H)+J,y:-$/W*(ee-Q.y-q)+ee};if(V&&V.active()){var ne=e.dragData.touchDragEles;f(ne),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ne.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ne.emit("dragfree"))}o.viewport({zoom:$,pan:te,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),k=U,L=x,S=w,O=E,I=T,e.pinching=!0}t.touches[0]&&(c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1]),t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1])}else if(t.touches[0]&&!e.touchData.didSelect){var re=e.touchData.start,ie=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(z=e.findNearestElement(s[0],s[1],!0,!0)),r&&null!=re&&t.preventDefault(),r&&null!=re&&e.nodeIsDraggable(re))if(h){ne=e.dragData.touchDragEles;var ae=!e.dragData.didDrag;ae&&p(ne,{inDragLayer:!0}),e.dragData.didDrag=!0;var oe={x:0,y:0};_(g[0])&&_(g[1])&&(oe.x+=g[0],oe.y+=g[1],ae&&(e.redrawHint("eles",!0),(se=e.touchData.dragDelta)&&_(se[0])&&_(se[1])&&(oe.x+=se[0],oe.y+=se[1]))),e.hoverData.draggingEles=!0,ne.silentShift(oe).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var se;0===(se=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(se.push(g[0]),se.push(g[1])):(se[0]+=g[0],se[1]+=g[1])}if(n(re||z,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),re&&re.grabbed()||z==ie||(ie&&ie.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),z&&z.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=z,r)for(G=0;G<s.length;G++)s[G]&&e.touchData.startPosition[G]&&h&&(e.touchData.singleTouchMoved=!0);r&&(null==re||re.pannable())&&o.panningEnabled()&&o.userPanningEnabled()&&(i(re,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=pn(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:g[0]*u,y:g[1]*u}),o.emit("dragpan")):h&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),re&&(re.unactivate(),e.redrawHint("select",!0),e.touchData.start=null))),c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1])}for(v=0;v<s.length;v++)l[v]=s[v];r&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(window,"touchcancel",j=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",H=function(r){var i=e.touchData.start;if(e.touchData.capture){0===r.touches.length&&(e.touchData.capture=!1),r.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(r.touches[0]){var h=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(r.touches[1]&&(h=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY),u[2]=h[0],u[3]=h[1]),r.touches[2]&&(h=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY),u[4]=h[0],u[5]=h[1]),i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:r,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var d={originalEvent:r,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(d):s.emit(d)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var p=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:r,position:{x:u[0],y:u[1]}});var g=function(e){return e.selectable()&&!e.selected()};p.emit("box").stdFilter(g).select().emit("boxselect"),p.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),r.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var v=e.dragData.touchDragEles;if(null!=i){var y=i._private.grabbed;f(v),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(i.emit("freeon"),v.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),v.emit("dragfree"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(u[0],u[1],!0,!0);n(m,["touchend","tapend","vmouseup","tapdragout"],r,{x:u[0],y:u[1]})}var b=e.touchData.startPosition[0]-u[0],x=b*b,w=e.touchData.startPosition[1]-u[1],E=(x+w*w)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),n(i,["tap","vclick"],r,{x:u[0],y:u[1]}),q=!1,r.timeStamp-$<=s.multiClickDebounceTime()?(W&&clearTimeout(W),q=!0,$=null,n(i,["dbltap","vdblclick"],r,{x:u[0],y:u[1]})):(W=setTimeout((function(){q||n(i,["onetap","voneclick"],r,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),$=r.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(t).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var T=0;T<u.length;T++)c[T]=u[T];e.dragData.didDrag=!1,0===r.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=null,e.touchData.startGPosition=null,e.touchData.didSelect=!1),r.touches.length<2&&(1===r.touches.length&&(e.touchData.startGPosition=[r.touches[0].clientX,r.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var Q=[],J=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},ee=function(e){return{event:e,touch:J(e)}},te=function(e){Q.push(ee(e))},ne=function(e){for(var t=0;t<Q.length;t++)if(Q[t].event.pointerId===e.pointerId)return void Q.splice(t,1)},re=function(e){var t=Q.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=J(e)},ie=function(e){e.touches=Q.map((function(e){return e.touch}))},ae=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){ae(e)||(e.preventDefault(),te(e),ie(e),V(e))})),e.registerBinding(e.container,"pointerup",(function(e){ae(e)||(ne(e),ie(e),H(e))})),e.registerBinding(e.container,"pointercancel",(function(e){ae(e)||(ne(e),ie(e),j(e))})),e.registerBinding(e.container,"pointermove",(function(e){ae(e)||(e.preventDefault(),re(e),ie(e),U(e))}))}}},yh={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ir(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return $n(e,t,this.points,a,o,r,i,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Jn(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return er(e,t,r,i,a,o,n)}}},generateRoundPolygon:function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ar(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return Kn(e,t,this.points,a,o,r,i)}}},generateRoundRectangle:function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;return!!($n(e,t,this.points,a,o,r,i-l,[0,-1],n)||$n(e,t,this.points,a,o,r-l,i,[0,-1],n)||er(e,t,l,l,a-r/2+s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o+i/2-s,n)||er(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},generateCutRectangle:function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:dr(),points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return ir(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if($n(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Wn(e,t,s.topLeft)||Wn(e,t,s.topRight)||Wn(e,t,s.bottomRight)||Wn(e,t,s.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=.15,l=.5,u=.85,c=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),h=function(e){var t=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},s),n=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},l),r=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},u);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},d=[].concat(h(c.topLeft),h(c.topRight),h(c.bottomRight),h(c.bottomLeft));return ir(i,a,d,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=gr(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=gr(r,i),l=s.heightOffset,u=s.widthOffset;if($n(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r=n[4],i=n[2],a=n[0],o=n[5],s=n[1],l=Math.min(r,a),u=Math.max(r,a),c=Math.min(o,s),h=Math.max(o,s);if(l<=e&&e<=u&&c<=t&&t<=h){var d=pr(r,i,a),p=Un(d[0],d[1],d[2],e).filter((function(e){return 0<=e&&e<=1}));if(p.length>0)return p[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=Dn(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=rr(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;if($n(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Wn(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||!!er(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!er(e,t,l,l,a-r/2+s,o+i/2-s,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",sr(3,0)),this.generateRoundPolygon("round-triangle",sr(3,0)),this.generatePolygon("rectangle",sr(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",sr(5,0)),this.generateRoundPolygon("round-pentagon",sr(5,0)),this.generatePolygon("hexagon",sr(6,0)),this.generateRoundPolygon("round-hexagon",sr(6,0)),this.generatePolygon("heptagon",sr(7,0)),this.generateRoundPolygon("round-heptagon",sr(7,0)),this.generatePolygon("octagon",sr(8,0)),this.generateRoundPolygon("round-octagon",sr(8,0));var r=new Array(20),i=ur(5,0),a=ur(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=lr(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}},mh={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||kt();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Dt("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},bh=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};mh.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;var n=function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){bh(e,!0,r);var i=rt();e.render(e.renderOptions);var a=e.lastDrawTime=rt();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else bh(e,!1,r);e.skipFrame=!1,nt(n)}};nt(n)}};var xh=function(e){this.init(e)},wh=xh.prototype;wh.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],wh.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container();if(d){var r=d.document,i=r.head,a="__________cytoscape_stylesheet",o="__________cytoscape_container",s=null!=r.getElementById(a);if(n.className.indexOf(o)<0&&(n.className=(n.className||"")+" "+o),!s){var l=r.createElement("style");l.id=a,l.textContent="."+o+" { position: relative; }",i.insertBefore(l,i.children[0])}"static"===d.getComputedStyle(n).getPropertyValue("position")&&Nt("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=_(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},wh.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},wh.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},wh.isHeadless=function(){return!1},[Zc,gh,fh,vh,yh,mh].forEach((function(e){Q(wh,e)}));var Eh=1e3/60,Th={setupDequeueing:function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=Qe((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=function(i,a){var o=rt(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=rt(),p=d-o,g=d-a;if(l<Eh){var f=Eh-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Eh)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())},a=e.priority||_t;n.beforeRender(i,a(t))}}}},_h=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Et;t(this,e),this.idsByKey=new Yt,this.keyForId=new Yt,this.cachesByLvl=new Yt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}return i(e,[{key:"getIdsFor",value:function(e){null==e&&Dt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ut,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Yt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Dh=25,Ch=50,Nh=-4,Ah=3,Lh=7.99,Sh=8,Oh=1024,Ih=1024,kh=1024,Mh=.2,Ph=.8,Rh=10,Bh=.15,Fh=.1,zh=.9,Gh=.9,Yh=100,Xh=1,Vh={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Uh=Mt({getKey:null,doesEleInvalidateKey:Et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:wt,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jh=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Uh(t);Q(n,r),n.lookup=new _h(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Hh=jh.prototype;Hh.reasons=Vh,Hh.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Hh.getRetiredTextureQueue=function(e){var t=this,n=t.eleImgCaches.retired=t.eleImgCaches.retired||{};return n[e]=n[e]||[]},Hh.getElementQueue=function(){var e=this;return e.eleCacheQueue=e.eleCacheQueue||new $t((function(e,t){return t.reqs-e.reqs}))},Hh.getElementKeyToQueue=function(){var e=this;return e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{}},Hh.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(xn(s*n))),r<Nh)r=Nh;else if(s>=Lh||r>Ah)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=Dh?Dh:c<=Ch?Ch:Math.ceil(c/Ch)*Ch,c>kh||h>Ih)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===Vh.dequeue,w=i&&i===Vh.highQuality,E=i&&i===Vh.downscale,T=r+1;T<=Ah;T++){var _=l.get(e,T);if(_){m=_;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,Vh.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=Nh;L--){var S=l.get(e,L);if(S){A=S;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+Sh),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Hh.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},Hh.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=Nh;i<=Ah;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},Hh.checkTextureUtility=function(e){e.invalidatedWidth>=Mh*e.width&&this.retireTexture(e)},Hh.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>Ph&&e.fullnessChecks>=Rh?Pt(t,e):e.fullnessChecks++},Hh.retireTexture=function(e){var t=this,n=e.height,r=t.getTextureQueue(n),i=this.lookup;Pt(r,e),e.retired=!0;for(var a=e.eleCaches,o=0;o<a.length;o++){var s=a[o];i.deleteCache(s.key,s.level)}Rt(a),t.getRetiredTextureQueue(n).push(e)},Hh.addTexture=function(e,t){var n=this,r={};return n.getTextureQueue(e).push(r),r.eleCaches=[],r.height=e,r.width=Math.max(Oh,t),r.usedWidth=0,r.invalidatedWidth=0,r.fullnessChecks=0,r.canvas=n.renderer.makeOffscreenCanvas(r.width,r.height),r.context=r.canvas.getContext("2d"),r},Hh.recycleTexture=function(e,t){for(var n=this,r=n.getTextureQueue(e),i=n.getRetiredTextureQueue(e),a=0;a<i.length;a++){var o=i[a];if(o.width>=t)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,Rt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),Pt(i,o),r.push(o),o}},Hh.queueElement=function(e,t){var n=this,r=n.getElementQueue(),i=n.getElementKeyToQueue(),a=this.getKey(e),o=i[a];if(o)o.level=Math.max(o.level,t),o.eles.merge(e),o.reqs++,r.updateItem(o);else{var s={eles:e.spawn().merge(e),level:t,reqs:1,key:a};r.push(s),i[a]=s}},Hh.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<Xh&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Vh.dequeue)}}return i},Hh.removeFromQueue=function(e){var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=this.getKey(e),a=r[i];null!=a&&(1===a.eles.length?(a.reqs=xt,n.updateItem(a),n.pop(),r[i]=null):a.eles.unmerge(e))},Hh.onDequeue=function(e){this.onDequeues.push(e)},Hh.offDequeue=function(e){Pt(this.onDequeues,e)},Hh.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Yh,deqCost:Bh,deqAvgCost:Fh,deqNoDrawCost:zh,deqFastCost:Gh,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(Bn(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var qh=1,Wh=-4,$h=2,Kh=3.99,Zh=50,Qh=50,Jh=.15,ed=.1,td=.9,nd=.9,rd=1,id=250,ad=16e6,od=!0,sd=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=rt()-2*id,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=Qe((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),Qh),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=id?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);var i=function(e,t){return t.reqs-e.reqs};t.layersQueue=new $t(i),t.setupDequeueing()},ld=sd.prototype,ud=0,cd=Math.pow(2,53)-1;ld.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:ud=++ud%cd,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},ld.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(xn(i*t)))<Wh)n=Wh;else if(i>=Kh||n>$h)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[],h=function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;Wh<=r&&r<=$h&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Pt(c,o)}};if(r.levelIsComplete(n,e))return c;h();var d=function(){if(!o){o=Ln();for(var t=0;t<e.length;t++)In(o,e[t].boundingBox())}return o},p=function(e){var t=(e=e||{}).after;if(d(),o.w*u*(o.h*u)>ad)return null;var i=r.makeLayer(o,n);if(null!=t){var a=c.indexOf(t)+1;c.splice(a,0,i)}else(void 0===e.insert||e.insert)&&c.unshift(i);return i};if(r.skipping&&!a)return null;for(var g=null,f=e.length/qh,v=!a,y=0;y<e.length;y++){var m=e[y],b=m._private.rscratch,x=b.imgLayerCaches=b.imgLayerCaches||{},w=x[n];if(w)g=w;else{if((!g||g.eles.length>=f||!Gn(g.bb,m.boundingBox()))&&!(g=p({insert:!0,after:g})))return null;s||v?r.queueLayer(g,m):r.drawEleInLayer(g,m,n,t),g.eles.push(m),x[n]=g}}return s||(v?null:c)},ld.getEleLevelForLayerLevel=function(e,t){return e},ld.drawEleInLayer=function(e,t,n,r){var i=this,a=this.renderer,o=e.context,s=t.boundingBox();0!==s.w&&0!==s.h&&t.visible()&&(n=i.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(o,!1),a.drawCachedElement(o,t,null,null,n,od),a.setImgSmoothing(o,!0))},ld.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},ld.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},ld.updateElementsInLayers=function(e,t){for(var n=this,r=A(e[0]),i=0;i<e.length;i++)for(var a=r?null:e[i],o=r?e[i]:e[i].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},u=Wh;u<=$h;u++){var c=l[u];c&&(a&&n.getEleLevelForLayerLevel(c.level)!==a.level||t(c,o,a))}},ld.haveLayers=function(){for(var e=this,t=!1,n=Wh;n<=$h;n++){var r=e.layersByLevel[n];if(r&&r.length>0){t=!0;break}}return t},ld.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=rt(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},ld.invalidateLayer=function(e){if(this.lastInvalidationTime=rt(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Pt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},ld.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},ld.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},ld.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},ld.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<rd&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},ld.applyLayerReplacement=function(e){var t=this,n=t.layersByLevel[e.level],r=e.replaces,i=n.indexOf(r);if(!(i<0||r.invalid)){n[i]=e;for(var a=0;a<e.eles.length;a++){var o=e.eles[a]._private,s=o.imgLayerCaches=o.imgLayerCaches||{};s&&(s[e.level]=e)}t.requestRedraw()}},ld.requestRedraw=Qe((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),ld.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Zh,deqCost:Jh,deqAvgCost:ed,deqNoDrawCost:td,deqFastCost:nd,deq:function(e,t){return e.dequeue(t)},onDeqd:_t,shouldRedraw:wt,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var hd,dd={};function pd(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function gd(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function fd(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];for(e.moveTo(s.x,s.y),i=1;i<o.length;i++)a=o[i],e.lineTo(a.x,a.y);e.closePath&&e.closePath()}function vd(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function yd(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}dd.arrowShapeImpl=function(e){return(hd||(hd={polygon:pd,"triangle-backcurve":gd,"triangle-tee":fd,"circle-triangle":vd,"triangle-cross":fd,circle:yd}))[e]};var md={drawElement:function(e,t,n,r,i,a){var o=this;t.isNode()?o.drawNode(e,t,n,r,i,a):o.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){var n=this;t.isNode()?n.drawNodeOverlay(e,t):n.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){var n=this;t.isNode()?n.drawNodeUnderlay(e,t):n.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var T=n.getRotationPoint(t);g=T.x,f=T.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);d=_.x,p=_.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},bd=function(){return 0},xd=function(e,t){return e.getTextAngle(t,null)},wd=function(e,t){return e.getTextAngle(t,"source")},Ed=function(e,t){return e.getTextAngle(t,"target")},Td=function(e,t){return t.effectiveOpacity()},_d=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};md.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||Bn(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,bd,Td),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,xd,_d),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,wd,_d),o.drawCachedElementPortion(e,t,h,n,i,p,Ed,_d)),o.drawElementOverlay(e,t)}},md.drawElements=function(e,t){for(var n=this,r=0;r<t.length;r++){var i=t[r];n.drawElement(e,i)}},md.drawCachedElements=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];i.drawCachedElement(e,o,n,r)}},md.drawCachedNodes=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];o.isNode()&&i.drawCachedElement(e,o,n,r)}},md.drawLayeredElements=function(e,t,n,r){var i=this,a=i.data.lyrTxrCache.getLayers(t,n);if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.bb;0!==l.w&&0!==l.h&&e.drawImage(s.canvas,l.x1,l.y1,l.w,l.h)}else i.drawCachedElements(e,t,n,r)};var Dd={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var E=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,D=f*_;e.translate(E,T),y(D),x(D),e.translate(-E,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Cd=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};Dd.drawEdgeOverlay=Cd("overlay"),Dd.drawEdgeUnderlay=Cd("underlay"),Dd.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Dd.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Dd.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Dd.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle("opacity").value;void 0===o&&(o=d);var p=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,r,i,a),e.globalCompositeOperation=p);var g=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,g[0],g[1],g[2],o),s.colorStrokeStyle(e,g[0],g[1],g[2],o),s.drawArrowShape(t,e,c,h,l,r,i,a)}}},Dd.drawArrowShape=function(e,t,n,r,i,a,o,s){var l,u=this,c=this.usePaths()&&"triangle-cross"!==i,h=!1,d=t,p={x:a,y:o},g=e.pstyle("arrow-scale").value,f=this.getArrowWidth(r,g),v=u.arrowShapes[i];if(c){var y=u.arrowPathCache=u.arrowPathCache||[],m=gt(i),b=y[m];null!=b?(l=t=b,h=!0):(l=t=new Path2D,y[m]=l)}h||(t.beginPath&&t.beginPath(),c?v.draw(t,1,0,{x:0,y:0},1):v.draw(t,f,s,p,r),t.closePath&&t.closePath()),t=d,c&&(t.translate(a,o),t.rotate(s),t.scale(f,f)),"filled"!==n&&"both"!==n||(c?t.fill(l):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=(v.matchEdgeWidth?r:1)/(c?f:1),t.lineJoin="miter",c?t.stroke(l):t.stroke()),c&&(t.scale(1/f,1/f),t.rotate(-s),t.translate(-a,-o))};var Nd={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Nt(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,T=t.height||t.cachedH;null!=E&&null!=T||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,T=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,D=T;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==D){if("contain"===h)_*=C=Math.min(v/_,y/D),D*=C;else if("cover"===h){var C;_*=C=Math.max(v/_,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-_)*L:L;var S=c(n,"background-offset-x","units",r),O=c(n,"background-offset-x","pfValue",r);N+="%"===S?(v-_)*O:O;var I=l-y/2,k=c(n,"background-position-y","units",r),M=c(n,"background-position-y","pfValue",r);I+="%"===k?(y-D)*M:M;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);I+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,I-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,T,N,I,_,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,I),e.fill(),e.translate(-N,-I)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Ad={};function Ld(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Ad.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(xn(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Ad.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},Ad.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Ad.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Ad.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ft(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Ad.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=Ft(a,"labelX",n),c=Ft(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=Ft(a,"labelWidth",n),f=Ft(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,T=t.pstyle("text-border-width").pfValue,_=t.pstyle("text-background-padding").pfValue;if(w>0||T>0&&E>0){var D=u-_;switch(b){case"left":D-=g;break;case"center":D-=g/2}var C=c-f-_,N=g+2*_,A=f+2*_;if(w>0){var L=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",0===t.pstyle("text-background-shape").strValue.indexOf("round")?Ld(e,D,C,N,A,2):e.fillRect(D,C,N,A),e.fillStyle=L}if(T>0&&E>0){var O=e.strokeStyle,I=e.lineWidth,k=t.pstyle("text-border-color").value,M=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+k[0]+","+k[1]+","+k[2]+","+E*o+")",e.lineWidth=T,e.setLineDash)switch(M){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(D,C,N,A),"double"===M){var P=T/2;e.strokeRect(D+P,C+P,N-2*P,A-2*P)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=O}}var R=2*t.pstyle("text-outline-width").pfValue;if(R>0&&(e.lineWidth=R),"wrap"===t.pstyle("text-wrap").value){var B=Ft(a,"labelWrapCachedLines",n),F=Ft(a,"labelLineHeight",n),z=g/2,G=this.getLabelJustification(t);switch("auto"===G||("left"===b?"left"===G?u+=-g:"center"===G&&(u+=-z):"center"===b?"left"===G?u+=-z:"right"===G&&(u+=z):"right"===b&&("center"===G?u+=z:"right"===G&&(u+=g))),x){case"top":case"center":case"bottom":c-=(B.length-1)*F}for(var Y=0;Y<B.length;Y++)R>0&&e.strokeText(B[Y],u,c),e.fillText(B[Y],u,c),c+=F}else R>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var Sd={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(_(h.x)&&_(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E<m.length;E++){var T=m[E];if(b[E]=null!=T&&"none"!==T){var D=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(T,D,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var C=t.pstyle("background-blacken").value,N=t.pstyle("border-width").pfValue,A=t.pstyle("background-opacity").value*g,L=t.pstyle("border-color").value,S=t.pstyle("border-style").value,O=t.pstyle("border-opacity").value*g;e.lineJoin="miter";var I=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},k=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},M=t.pstyle("shape").strValue,P=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var R=l.nodePathCache=l.nodePathCache||[],B=ft("polygon"===M?M+","+P.join(","):M,""+i,""+r),F=R[B];null!=F?(d=F,v=!0,c.pathCache=d):(d=new Path2D,R[B]=c.pathCache=d)}var z=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},G=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},Y=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i)))},X=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},V=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},U=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},j=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},H=function(){l.drawElementText(e,t,null,a)};if("yes"===t.pstyle("ghost").value){var q=t.pstyle("ghost-offset-x").pfValue,W=t.pstyle("ghost-offset-y").pfValue,$=t.pstyle("ghost-opacity").value,K=$*g;e.translate(q,W),I($*A),z(),G(K,!0),k($*O),V(),Y(0!==C||0!==N),G(K,!1),X(K),e.translate(-q,-W)}f&&e.translate(-h.x,-h.y),j(),f&&e.translate(h.x,h.y),I(),z(),G(g,!0),k(),V(),Y(0!==C||0!==N),G(g,!1),X(),f&&e.translate(-h.x,-h.y),H(),U(),n&&e.translate(p.x1,p.y1)}}},Od=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){var o=this;if(n.visible()){var s=n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(l>0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}o.colorFillStyle(t,u[0],u[1],u[2],l),o.nodeShapes[c].draw(t,r.x,r.y,i+2*s,a+2*s),t.fill()}}}};Sd.drawNodeOverlay=Od("overlay"),Sd.drawNodeUnderlay=Od("underlay"),Sd.hasPie=function(e){return(e=e[0])._private.hasPie},Sd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var Id={},kd=100;Id.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},Id.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Id.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=En(u,h),p=En(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,T=s.length,_=0;_<T;_++)a.addColorStop(E?l[_]:_/(T-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Id.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Id.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Id.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Id.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Id.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},Id.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Id.render=function(e){var t=(e=e||kt()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},T={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||T.zoom!==_.zoom||T.pan.x!==_.pan.x||T.pan.y!==_.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],S=o.textureCache.texture;T=o.textureCache.viewport,L.setTransform(1,0,0,1,0,0),d?C(L,0,0,T.width,T.height):L.clearRect(0,0,T.width,T.height);var O=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,O[0],O[1],O[2],I),L.fillRect(0,0,T.width,T.height),b=l.zoom(),N(L,!1),L.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),L.drawImage(S,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var k=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,k):o.drawLayeredElements(L,D.nondrag,s,k),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])&&(B=d&&!R[o.DRAG]&&1!==p,N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,k):o.drawCachedElements(L,D.drag,s,k),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)),o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);var X=60;L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/X,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],U=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],j=u.contexts[o.DRAG],H=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(V,U,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(j,H,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=T,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),kd)),t||l.emit("render")};for(var Md={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=hr(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c=void 0,h=void 0;c=0===u?a.length-2:4*u-2,h=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[c]*a[h]-a[c+1]*a[h+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[c],y=p-f*a[c+1],m=d+f*a[h],b=p+f*a[h+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=dr();e.beginPath&&e.beginPath(),e.moveTo(t-a+s,n-o),e.lineTo(t+a-s,n-o),e.lineTo(t+a,n-o+s),e.lineTo(t+a,n+o-s),e.lineTo(t+a-s,n+o),e.lineTo(t-a+s,n+o),e.lineTo(t-a,n+o-s),e.lineTo(t-a,n-o+s),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=gr(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},Pd=Math.sin(0),Rd=Math.cos(0),Bd={},Fd={},zd=Math.PI/40,Gd=0*Math.PI;Gd<2*Math.PI;Gd+=zd)Bd[Gd]=Math.sin(Gd),Fd[Gd]=Math.cos(Gd);Md.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=zd)a=t-s*Bd[u]*Pd+s*Fd[u]*Rd,o=n+l*Fd[u]*Pd+l*Bd[u]*Rd,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var Yd={};function Xd(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}function Vd(e){var t=e.indexOf(",");return e.substr(t+1)}function Ud(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Gi((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return Xd(Vd(r()),n);case"base64":return Vd(r());default:return r()}}Yd.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},Yd.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=_(e.maxWidth)||_(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;_(e.maxWidth)&&(u=l*e.maxWidth/i),_(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},Yd.png=function(e){return Ud(e,this.bufferCanvasImage(e),"image/png")},Yd.jpg=function(e){return Ud(e,this.bufferCanvasImage(e),"image/jpeg")};var jd={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Hd=Wd,qd=Wd.prototype;function Wd(e){var t=this;t.data={canvases:new Array(qd.CANVAS_LAYERS),contexts:new Array(qd.CANVAS_LAYERS),canvasNeedsRedraw:new Array(qd.CANVAS_LAYERS),bufferCanvases:new Array(qd.BUFFER_COUNT),bufferContexts:new Array(qd.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};B()&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<qd.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String(qd.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[qd.NODE].setAttribute("data-id","layer"+qd.NODE+"-node"),t.data.canvases[qd.SELECT_BOX].setAttribute("data-id","layer"+qd.SELECT_BOX+"-selectbox"),t.data.canvases[qd.DRAG].setAttribute("data-id","layer"+qd.DRAG+"-drag"),s=0;s<qd.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=Ln(),c=function(e){return{x:(e.x1+e.x2)/2,y:(e.y1+e.y2)/2}},h=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},p=function(e){return e[0]._private.nodeKey},g=function(e){return e[0]._private.labelStyleKey},f=function(e){return e[0]._private.sourceLabelStyleKey},v=function(e){return e[0]._private.targetLabelStyleKey},y=function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},m=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},b=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},x=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},w=function(e){return e.boundingBox(),e[0]._private.bodyBounds},E=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},T=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},_=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},D=function(e,t){return t},C=function(e){return c(w(e))},N=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},A=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},L=function(e){return N("",A(e,"labelX","labelY"),e)},S=function(e){return N("source",A(e,"sourceLabelX","sourceLabelY"),e)},O=function(e){return N("target",A(e,"targetLabelX","targetLabelY"),e)},I=function(e){return h(w(e))},k=function(e){return h(T(e))},M=function(e){return h(_(e))},P=function(e){var t=E(e),n=h(E(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},R=t.data.eleTxrCache=new jh(t,{getKey:p,doesEleInvalidateKey:d,drawElement:y,getBoundingBox:w,getRotationPoint:C,getRotationOffset:I,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),F=t.data.lblTxrCache=new jh(t,{getKey:g,drawElement:m,getBoundingBox:E,getRotationPoint:L,getRotationOffset:P,isVisible:D}),z=t.data.slbTxrCache=new jh(t,{getKey:f,drawElement:b,getBoundingBox:T,getRotationPoint:S,getRotationOffset:k,isVisible:D}),G=t.data.tlbTxrCache=new jh(t,{getKey:v,drawElement:x,getBoundingBox:_,getRotationPoint:O,getRotationOffset:M,isVisible:D}),Y=t.data.lyrTxrCache=new sd(t);t.onUpdateEleCalcs((function(e,t){R.invalidateElements(t),F.invalidateElements(t),z.invalidateElements(t),G.invalidateElements(t),Y.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var X=function(e){for(var t=0;t<e.length;t++)Y.enqueueElementRefinement(e[t].ele)};R.onDequeue(X),F.onDequeue(X),z.onDequeue(X),G.onDequeue(X)}qd.CANVAS_LAYERS=3,qd.SELECT_BOX=0,qd.DRAG=1,qd.NODE=2,qd.BUFFER_COUNT=3,qd.TEXTURE_BUFFER=0,qd.MOTIONBLUR_BUFFER_NODE=1,qd.MOTIONBLUR_BUFFER_DRAG=2,qd.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[qd.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[qd.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[qd.SELECT_BOX]=t}};var $d="undefined"!=typeof Path2D;qd.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},qd.usePaths=function(){return $d&&this.pathsEnabled},qd.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},qd.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},qd.makeOffscreenCanvas=function(t,n){var r;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":e(OffscreenCanvas))?r=new OffscreenCanvas(t,n):((r=document.createElement("canvas")).width=t,r.height=n),r},[dd,md,Dd,Nd,Ad,Sd,Id,Md,Yd,jd].forEach((function(e){Q(qd,e)}));var Kd=[{type:"layout",extensions:qc},{type:"renderer",extensions:[{name:"null",impl:Wc},{name:"base",impl:xh},{name:"canvas",impl:Hd}]}],Zd={},Qd={};function Jd(e,t,n){var r=n,i=function(n){Nt("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(ac.prototype[t])return i(t);ac.prototype[t]=n}else if("collection"===e){if(bu.prototype[t])return i(t);bu.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),E(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Rl(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),hs.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=ep("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Dt("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Dt(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return ae({map:Zd,keys:[e,t],value:r})}function ep(e,t){return oe({map:Zd,keys:[e,t]})}function tp(e,t,n,r,i){return ae({map:Qd,keys:[e,t,n,r],value:i})}function np(e,t,n,r){return oe({map:Qd,keys:[e,t,n,r]})}var rp=function(){return 2===arguments.length?ep.apply(null,arguments):3===arguments.length?Jd.apply(null,arguments):4===arguments.length?np.apply(null,arguments):5===arguments.length?tp.apply(null,arguments):void Dt("Invalid extension access syntax")};ac.prototype.extension=rp,Kd.forEach((function(e){e.extensions.forEach((function(t){Jd(e.type,t.name,t.impl)}))}));var ip=function e(){if(!(this instanceof e))return new e;this.length=0},ap=ip.prototype;ap.instanceString=function(){return"stylesheet"},ap.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},ap.css=function(e,t){var n=this.length-1;if(b(e))this[n].properties.push({name:e,value:t});else if(E(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=Ju.properties[o]||Ju.properties[G(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},ap.style=ap.css,ap.generateStyle=function(e){var t=new Ju(e);return this.appendToStyle(t)},ap.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var op="3.25.0",sp=function(e){return void 0===e&&(e={}),E(e)?new ac(e):b(e)?rp.apply(rp,arguments):void 0};return sp.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(sp),e.apply(null,t),this},sp.warnings=function(e){return Ct(e)},sp.version=op,sp.stylesheet=sp.Stylesheet=ip,sp}()},54899:function(e){var t;t=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}([function(e,t,n){"use strict";function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(9);function o(e,t,n){r.call(this,n),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=n,this.bendpoints=[],this.source=e,this.target=t}for(var s in o.prototype=Object.create(r.prototype),r)o[s]=r[s];o.prototype.getSource=function(){return this.source},o.prototype.getTarget=function(){return this.target},o.prototype.isInterGraph=function(){return this.isInterGraph},o.prototype.getLength=function(){return this.length},o.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},o.prototype.getBendpoints=function(){return this.bendpoints},o.prototype.getLca=function(){return this.lca},o.prototype.getSourceInLca=function(){return this.sourceInLca},o.prototype.getTargetInLca=function(){return this.targetInLca},o.prototype.getOtherEnd=function(e){if(this.source===e)return this.target;if(this.target===e)return this.source;throw"Node is not incident with this edge"},o.prototype.getOtherEndInGraph=function(e,t){for(var n=this.getOtherEnd(e),r=t.getGraphManager().getRoot();;){if(n.getOwner()==t)return n;if(n.getOwner()==r)break;n=n.getOwner().getParent()}return null},o.prototype.updateLength=function(){var e=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),e),this.isOverlapingSourceAndTarget||(this.lengthX=e[0]-e[2],this.lengthY=e[1]-e[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},o.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){this.vGraphObject=e}},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(13),o=n(0),s=n(16),l=n(4);function u(e,t,n,o){null==n&&null==o&&(o=t),r.call(this,o),null!=e.graphManager&&(e=e.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=o,this.edges=[],this.graphManager=e,this.rect=null!=n&&null!=t?new a(t.x,t.y,n.width,n.height):new a}for(var c in u.prototype=Object.create(r.prototype),r)u[c]=r[c];u.prototype.getEdges=function(){return this.edges},u.prototype.getChild=function(){return this.child},u.prototype.getOwner=function(){return this.owner},u.prototype.getWidth=function(){return this.rect.width},u.prototype.setWidth=function(e){this.rect.width=e},u.prototype.getHeight=function(){return this.rect.height},u.prototype.setHeight=function(e){this.rect.height=e},u.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},u.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},u.prototype.getCenter=function(){return new l(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},u.prototype.getLocation=function(){return new l(this.rect.x,this.rect.y)},u.prototype.getRect=function(){return this.rect},u.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},u.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},u.prototype.setRect=function(e,t){this.rect.x=e.x,this.rect.y=e.y,this.rect.width=t.width,this.rect.height=t.height},u.prototype.setCenter=function(e,t){this.rect.x=e-this.rect.width/2,this.rect.y=t-this.rect.height/2},u.prototype.setLocation=function(e,t){this.rect.x=e,this.rect.y=t},u.prototype.moveBy=function(e,t){this.rect.x+=e,this.rect.y+=t},u.prototype.getEdgeListToNode=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.target==e){if(r.source!=n)throw"Incorrect edge source!";t.push(r)}})),t},u.prototype.getEdgesBetween=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.source!=n&&r.target!=n)throw"Incorrect edge source and/or target";r.target!=e&&r.source!=e||t.push(r)})),t},u.prototype.getNeighborsList=function(){var e=new Set,t=this;return t.edges.forEach((function(n){if(n.source==t)e.add(n.target);else{if(n.target!=t)throw"Incorrect incidency!";e.add(n.source)}})),e},u.prototype.withChildren=function(){var e=new Set;if(e.add(this),null!=this.child)for(var t=this.child.getNodes(),n=0;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l<s;l++){var u=o[l];r>(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d<h;d++){var p=e[d];o>(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),T=!1,_=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,S=void 0,O=void 0,I=void 0,k=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,T=!0):(n[0]=u,n[1]=l,T=!0):D===N&&(r>a?(n[0]=s,n[1]=l,T=!0):(n[0]=d,n[1]=h,T=!0)),-C===N?a>r?(n[2]=m,n[3]=b,_=!0):(n[2]=y,n[3]=v,_=!0):C===N&&(a>r?(n[2]=f,n[3]=v,_=!0):(n[2]=x,n[3]=b,_=!0)),T&&_)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!T)switch(A){case 1:O=l,S=r+-g/N,n[0]=S,n[1]=O;break;case 2:S=d,O=i+p*N,n[0]=S,n[1]=O;break;case 3:O=h,S=r+g/N,n[0]=S,n[1]=O;break;case 4:S=c,O=i+-p*N,n[0]=S,n[1]=O}if(!_)switch(L){case 1:k=v,I=a+-E/N,n[2]=I,n[3]=k;break;case 2:I=x,k=o+w*N,n[2]=I,n[3]=k;break;case 3:k=b,I=a+E/N,n[2]=I,n[3]=k;break;case 4:I=m,k=o+-w*N,n[2]=I,n[3]=k}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e<l.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},30507:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>A});var r=n(99854),i=n(63294),a=n(76742),o=n(14413),s=n(35302),l=n(75627),u=n(36304),c=n(54628),h=(n(27693),n(7608),n(31699),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,T,_,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=t.symbols_[_]||_),v=_),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in T=[],o[y])this.terminals_[x]&&x>2&&T.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:T})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return e.getLogger().trace("Found comment",t.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:case 26:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 24:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 27:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 30:case 33:case 34:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 31:case 32:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 35:case 36:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());h.parser=h;const d=h,p=e=>(0,r.d)(e,(0,r.c)());let g=[],f=0,v={};const y={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},m=(e,t)=>{v[e]=t},b=e=>{switch(e){case y.DEFAULT:return"no-border";case y.RECT:return"rect";case y.ROUNDED_RECT:return"rounded-rect";case y.CIRCLE:return"circle";case y.CLOUD:return"cloud";case y.BANG:return"bang";case y.HEXAGON:return"hexgon";default:return"no-border"}};let x;const w=e=>v[e],E=Object.freeze(Object.defineProperty({__proto__:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.c)(),o={id:f++,nodeId:p(t),level:e,descr:p(n),type:i,children:[],width:(0,r.c)().mindmap.maxNodeWidth};switch(o.type){case y.ROUNDED_RECT:case y.RECT:case y.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=g.length-1;t>=0;t--)if(g[t].level<e)return g[t];return null}(e);if(s)s.children.push(o),g.push(o);else{if(0!==g.length){let e=new Error('There can be only one root. No parent could be found for ("'+o.descr+'")');throw e.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},e}g.push(o)}},clear:()=>{g=[],f=0,v={}},decorateNode:e=>{const t=g[g.length-1];e&&e.icon&&(t.icon=p(e.icon)),e&&e.class&&(t.class=p(e.class))},getElementById:w,getLogger:()=>r.l,getMindmap:()=>g.length>0?g[0]:null,getNodeById:e=>g[e],getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return y.RECT;case"(":return")"===t?y.ROUNDED_RECT:y.CLOUD;case"((":return y.CIRCLE;case")":return y.CLOUD;case"))":return y.BANG;case"{{":return y.HEXAGON;default:return y.DEFAULT}},nodeType:y,get parseError(){return x},sanitizeText:p,setElementForId:m,setErrorHandler:e=>{x=e},type2Str:b},Symbol.toStringTag,{value:"Module"}));const T=function(e,t,n,r){const i=r.htmlLabels,o=n%11,s=e.append("g");t.section=o;let l="section-"+o;o<0&&(l+=" section-root"),s.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+l);const u=s.append("g"),c=s.append("g"),h=t.descr.replace(/(<br\/*>)/g,"\n");(0,a.c)(c,h,{useHtmlLabels:i,width:t.width,classes:"mindmap-node-label"}),i||c.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const d=c.node().getBBox(),p=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=d.height+1.1*p*.5+t.padding,t.width=d.width+2*t.padding,t.icon)if(t.type===y.CIRCLE){t.height+=50,t.width+=50;s.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+o+" "+t.icon),c.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);s.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+o+" "+t.icon),c.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else if(i){const e=(t.width-d.width)/2,n=(t.height-d.height)/2;c.attr("transform","translate("+e+", "+n+")")}else{const e=t.width/2,n=t.padding/2;c.attr("transform","translate("+e+", "+n+")")}switch(t.type){case y.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(u,t,o);break;case y.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(u,t);break;case y.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("height",t.height).attr("width",t.width)}(u,t);break;case y.CIRCLE:u.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("r",t.width/2)}(u,t);break;case y.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(u,t);break;case y.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(u,t);break;case y.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(u,t)}return m(t.id,s),t.height},_=function(e){const t=w(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function D(e,t,n,r){T(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{D(e,t,n<0?i:n,r)}))}function C(e,t,n,r){t.add({group:"nodes",data:{id:e.id,labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{C(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function N(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=o({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),C(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}o.use(s);const A={db:E,renderer:{draw:async(e,t,n,a)=>{const o=(0,r.c)();o.htmlLabels=!1,r.l.debug("Rendering mindmap diagram\n"+e,a.parser);const s=(0,r.c)().securityLevel;let l;"sandbox"===s&&(l=(0,i.Ys)("#i"+t));const u=("sandbox"===s?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);u.append("g");const c=a.db.getMindmap(),h=u.append("g");h.attr("class","mindmap-edges");const d=u.append("g");d.attr("class","mindmap-nodes"),D(d,c,-1,o);const p=await N(c,o);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(h,p),function(e){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,_(n);const i=w(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(p),(0,r.p)(void 0,u,o.mindmap.padding,o.mindmap.useMaxWidth)}},parser:d,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,l.Z)(e["lineColor"+n])?e["lineColor"+n]=(0,u.Z)(e["lineColor"+n],20):e["lineColor"+n]=(0,c.Z)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/30507.2f9666a9.js.LICENSE.txt b/assets/js/30507.2f9666a9.js.LICENSE.txt new file mode 100644 index 0000000000..a58daed496 --- /dev/null +++ b/assets/js/30507.2f9666a9.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/assets/js/305daa1e.ce74814a.js b/assets/js/305daa1e.ce74814a.js new file mode 100644 index 0000000000..d77da5fb98 --- /dev/null +++ b/assets/js/305daa1e.ce74814a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43144],{25943:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/local-image-05286ebd44ab198d038adbeee9544858.png"},69409:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var o=s(24246),n=s(71670);const i={title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},c="SEO tests",r={type:"mdx",permalink:"/tests/pages/seo",source:"@site/_dogfooding/_pages tests/seo.md",title:"custom SEO title",description:"custom SEO description",frontMatter:{title:"custom SEO title",description:"custom SEO description",keywords:["custom","keywords"],image:"./local-image.png"},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:168683802e4,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/seo.md",unlisted:!1},a={image:s(25943).Z},d=[];function p(e){const t={code:"code",h1:"h1",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"seo-tests",children:"SEO tests"}),"\n",(0,o.jsx)(t.p,{children:"Using page SEO front matter:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-yaml",children:"title: custom SEO title\ndescription: custom SEO description\nkeywords: [custom, keywords]\nimage: ./local-image.png\n"})})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>c});var o=s(27378);const n={},i=o.createContext(n);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3089c7fb.4d7ffa54.js b/assets/js/3089c7fb.4d7ffa54.js new file mode 100644 index 0000000000..2f246d7f0a --- /dev/null +++ b/assets/js/3089c7fb.4d7ffa54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78491],{59529:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>r,contentTitle:()=>s,default:()=>g,frontMatter:()=>n,metadata:()=>h,toc:()=>m});var i=t(24246),o=t(71670);const n={mdx:{format:"md"},date:"2022-02-25T20:00",authors:["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},s="2.0.0-beta.16",h={permalink:"/changelog/2.0.0-beta.16",source:"@site/changelog/source/2.0.0-beta.16.md",title:"2.0.0-beta.16",description:"New Feature",date:"2022-02-25T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Gaurish",alias:"apidev234",url:"https://github.com/apidev234",imageURL:"https://github.com/apidev234.png",key:"apidev234"},{name:"Artem Kovalov",alias:"artemkovalyov",url:"https://github.com/artemkovalyov",imageURL:"https://github.com/artemkovalyov.png",key:"artemkovalyov"},{name:"BigDataWriter",alias:"BigDataWriter",url:"https://github.com/BigDataWriter",imageURL:"https://github.com/BigDataWriter.png",key:"BigDataWriter"},{name:"Clement Demonchy",alias:"cdemonchy-pro",url:"https://github.com/cdemonchy-pro",imageURL:"https://github.com/cdemonchy-pro.png",key:"cdemonchy-pro"},{name:"CodeDoctor",alias:"CodeDoctorDE",url:"https://github.com/CodeDoctorDE",imageURL:"https://github.com/CodeDoctorDE.png",key:"CodeDoctorDE"},{name:"CookieJarApps",alias:"CookieJarApps",url:"https://github.com/CookieJarApps",imageURL:"https://github.com/CookieJarApps.png",key:"CookieJarApps"},{name:"Dmitry Vinnik",alias:"dmitryvinn",url:"https://github.com/dmitryvinn",imageURL:"https://github.com/dmitryvinn.png",key:"dmitryvinn"},{name:"Dmitry Vinnik | Meta",alias:"dmitryvinn-fb",url:"https://github.com/dmitryvinn-fb",imageURL:"https://github.com/dmitryvinn-fb.png",key:"dmitryvinn-fb"},{name:"Everardo J. Barojas M.",alias:"ebarojas",url:"https://github.com/ebarojas",imageURL:"https://github.com/ebarojas.png",key:"ebarojas"},{name:"Erick Zhao",alias:"erickzhao",url:"https://github.com/erickzhao",imageURL:"https://github.com/erickzhao.png",key:"erickzhao"},{name:"Felipe Santos",alias:"felipecrs",url:"https://github.com/felipecrs",imageURL:"https://github.com/felipecrs.png",key:"felipecrs"},{name:"Mikey O'Toole",alias:"homotechsual",url:"https://github.com/homotechsual",imageURL:"https://github.com/homotechsual.png",key:"homotechsual"},{name:"Jody Heavener",alias:"jodyheavener",url:"https://github.com/jodyheavener",imageURL:"https://github.com/jodyheavener.png",key:"jodyheavener"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Daniel Kalevski",alias:"kalevski",url:"https://github.com/kalevski",imageURL:"https://github.com/kalevski.png",key:"kalevski"},{name:"Kishan Gajera",alias:"kgajera",url:"https://github.com/kgajera",imageURL:"https://github.com/kgajera.png",key:"kgajera"},{name:"Konstantin Tarkus",alias:"koistya",url:"https://github.com/koistya",imageURL:"https://github.com/koistya.png",key:"koistya"},{name:"Balthasar Hofer",alias:"lebalz",url:"https://github.com/lebalz",imageURL:"https://github.com/lebalz.png",key:"lebalz"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Miles Johnson",alias:"milesj",url:"https://github.com/milesj",imageURL:"https://github.com/milesj.png",key:"milesj"},{name:"Matheus Ricardo Brunelli",alias:"mrbrunelli",url:"https://github.com/mrbrunelli",imageURL:"https://github.com/mrbrunelli.png",key:"mrbrunelli"},{name:"Naseel Niyas",alias:"NaseelNiyas",url:"https://github.com/NaseelNiyas",imageURL:"https://github.com/NaseelNiyas.png",key:"NaseelNiyas"},{name:"nick-verida",alias:"nick-verida",url:"https://github.com/nick-verida",imageURL:"https://github.com/nick-verida.png",key:"nick-verida"},{name:"Nick Schonning",alias:"nschonni",url:"https://github.com/nschonni",imageURL:"https://github.com/nschonni.png",key:"nschonni"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Muhammad Redho Ayassa",alias:"redhoyasa",url:"https://github.com/redhoyasa",imageURL:"https://github.com/redhoyasa.png",key:"redhoyasa"},{name:"Yongmin Hong",alias:"revi",url:"https://github.com/revi",imageURL:"https://github.com/revi.png",key:"revi"},{name:"Ruben Arushanyan",alias:"Ruben-Arushanyan",url:"https://github.com/Ruben-Arushanyan",imageURL:"https://github.com/Ruben-Arushanyan.png",key:"Ruben-Arushanyan"},{name:"seyoon20087",alias:"seyoon20087",url:"https://github.com/seyoon20087",imageURL:"https://github.com/seyoon20087.png",key:"seyoon20087"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tamal Web",alias:"tamalweb",url:"https://github.com/tamalweb",imageURL:"https://github.com/tamalweb.png",key:"tamalweb"},{name:"TheCatLady",alias:"TheCatLady",url:"https://github.com/TheCatLady",imageURL:"https://github.com/TheCatLady.png",key:"TheCatLady"},{name:"Daniel Hanke",alias:"thedanielhanke",url:"https://github.com/thedanielhanke",imageURL:"https://github.com/thedanielhanke.png",key:"thedanielhanke"},{name:"toto6038",alias:"toto6038",url:"https://github.com/toto6038",imageURL:"https://github.com/toto6038.png",key:"toto6038"},{name:"Matthew Ailes",alias:"vidarc",url:"https://github.com/vidarc",imageURL:"https://github.com/vidarc.png",key:"vidarc"},{name:"\uc774\uc815\ud658",alias:"winterlood",url:"https://github.com/winterlood",imageURL:"https://github.com/winterlood.png",key:"winterlood"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2022-02-25T20:00",authors:["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-beta.17",permalink:"/changelog/2.0.0-beta.17"},nextItem:{title:"2.0.0-beta.15",permalink:"/changelog/2.0.0-beta.15"},listPageLink:"/changelog/page/2"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function l(a){return(0,i.jsx)(i.Fragment,{})}function g(a={}){const{wrapper:e}={...(0,o.a)(),...a.components};return e?(0,i.jsx)(e,{...a,children:(0,i.jsx)(l,{...a})}):l()}},71670:(a,e,t)=>{t.d(e,{Z:()=>h,a:()=>s});var i=t(27378);const o={},n=i.createContext(o);function s(a){const e=i.useContext(n);return i.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function h(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(o):a.components||o:s(a.components),i.createElement(n.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/30a24c52.d3d6fa0a.js b/assets/js/30a24c52.d3d6fa0a.js deleted file mode 100644 index efd7a6ffb6..0000000000 --- a/assets/js/30a24c52.d3d6fa0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[3669],{6833:s=>{s.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/3103a69b.787049f3.js b/assets/js/3103a69b.787049f3.js new file mode 100644 index 0000000000..0e1abe19ef --- /dev/null +++ b/assets/js/3103a69b.787049f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38012],{39199:(t,s,e)=>{e.r(s),e.d(s,{assets:()=>r,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var n=e(24246),i=e(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},o="Only Unlisteds - Unlisted 2",d={id:"tests/visibility/only-unlisteds/unlisted2",title:"Only Unlisteds - Unlisted 2",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted2.mdx",sourceDirName:"tests/visibility/only-unlisteds",slug:"/tests/visibility/only-unlisteds/unlisted2",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted2",draft:!1,unlisted:!0,tags:[{label:"visibility",permalink:"/tests/docs/tags/visibility"},{label:"unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},u=[];function a(t){const s={h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"only-unlisteds---unlisted-2",children:"Only Unlisteds - Unlisted 2"}),"\n",(0,n.jsx)(s.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:s}={...(0,i.a)(),...t.components};return s?(0,n.jsx)(s,{...t,children:(0,n.jsx)(a,{...t})}):a(t)}},71670:(t,s,e)=>{e.d(s,{Z:()=>d,a:()=>o});var n=e(27378);const i={},l=n.createContext(i);function o(t){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function d(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:o(t.components),n.createElement(l.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3200d13e.ff5e8355.js b/assets/js/3200d13e.ff5e8355.js new file mode 100644 index 0000000000..a58a6a8c25 --- /dev/null +++ b/assets/js/3200d13e.ff5e8355.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15605],{49339:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>o,contentTitle:()=>u,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>a});var c=i(24246),r=i(71670);const n={mdx:{format:"md"},date:"2020-08-01T20:00",authors:["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},u="2.0.0-alpha.61",l={permalink:"/changelog/2.0.0-alpha.61",source:"@site/changelog/source/2.0.0-alpha.61.md",title:"2.0.0-alpha.61",description:"New Feature",date:"2020-08-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Bucky Maler",alias:"BuckyMaler",url:"https://github.com/BuckyMaler",imageURL:"https://github.com/BuckyMaler.png",key:"BuckyMaler"},{name:"Drew Alexander",alias:"Drewbi",url:"https://github.com/Drewbi",imageURL:"https://github.com/Drewbi.png",key:"Drewbi"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"Faizan",alias:"mdfaizan7",url:"https://github.com/mdfaizan7",imageURL:"https://github.com/mdfaizan7.png",key:"mdfaizan7"},{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Xuqian",alias:"zxuqian",url:"https://github.com/zxuqian",imageURL:"https://github.com/zxuqian.png",key:"zxuqian"}],frontMatter:{mdx:{format:"md"},date:"2020-08-01T20:00",authors:["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.62",permalink:"/changelog/2.0.0-alpha.62"},nextItem:{title:"2.0.0-alpha.60",permalink:"/changelog/2.0.0-alpha.60"},listPageLink:"/changelog/page/3"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 8",id:"committers-8",level:2}];function t(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3083",children:"#3083"})," feat(v2): warn user when there are conflicting routes (",(0,c.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3158",children:"#3158"})," feat(v2): markdown pages (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3127",children:"#3127"})," feat(v2): dark mode toggle customization (",(0,c.jsx)(s.a,{href:"https://github.com/Drewbi",children:"@Drewbi"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3166",children:"#3166"})," feat(v2): improve Algolia search accessibility (",(0,c.jsx)(s.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2359",children:"#2359"})," feat(v2): support custom description for blog-only mode (",(0,c.jsx)(s.a,{href:"https://github.com/zxuqian",children:"@zxuqian"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3180",children:"#3180"})," fix(v2): fix markdown images always using webpack url-loader (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3171",children:"#3171"})," fix(v2): tab label showing outline & background when clicked (",(0,c.jsx)(s.a,{href:"https://github.com/mdfaizan7",children:"@mdfaizan7"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3168",children:"#3168"})," fix(v2): fix link items refusing attributes like target, rel etc... (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3162",children:"#3162"})," fix(v2): inability for users to pin their docusaurus version (",(0,c.jsx)(s.a,{href:"https://github.com/BuckyMaler",children:"@BuckyMaler"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3163",children:"#3163"})," docs(v2): showcase user questdb (",(0,c.jsx)(s.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Other\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3164",children:"#3164"})," chore(deps): bump elliptic from 6.5.2 to 6.5.3 (",(0,c.jsx)(s.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3157",children:"#3157"})," chore(v2): remove alpha 59 doc (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-1.x"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-init-1.x"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),", ",(0,c.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3154",children:"#3154"})," chore(v2): prepare v2.0.0.alpha-60 release (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"committers-8",children:"Committers: 8"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Bucky Maler (",(0,c.jsx)(s.a,{href:"https://github.com/BuckyMaler",children:"@BuckyMaler"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Drew Alexander (",(0,c.jsx)(s.a,{href:"https://github.com/Drewbi",children:"@Drewbi"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Faizan (",(0,c.jsx)(s.a,{href:"https://github.com/mdfaizan7",children:"@mdfaizan7"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Fran\xe7ois Chalifour (",(0,c.jsx)(s.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["M\xe9ril (",(0,c.jsx)(s.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Teik Jun (",(0,c.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Xuqian (",(0,c.jsx)(s.a,{href:"https://github.com/zxuqian",children:"@zxuqian"}),")"]}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(t,{...e})}):t(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>l,a:()=>u});var c=i(27378);const r={},n=c.createContext(r);function u(e){const s=c.useContext(n);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:u(e.components),c.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3242.4dff560c.js b/assets/js/3242.4dff560c.js deleted file mode 100644 index 51a531d744..0000000000 --- a/assets/js/3242.4dff560c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[3242],{6535:(e,t,a)=>{a.d(t,{A:()=>f});var s=a(6540),n=a(4164),l=a(781),r=a(4581),i=a(8774),o=a(1312),c=a(6347),d=a(9169);function m(e){const{pathname:t}=(0,c.zy)();return(0,s.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,d.ys)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=a(4848);function g(e){let{sidebar:t}=e;const a=m(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,n.A)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,n.A)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,n.A)(u.sidebarItemList,"clean-list"),children:a.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.A,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=a(5600);function x(e){let{sidebar:t}=e;const a=m(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:a.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.A,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(p.GX,{component:x,props:e})}function b(e){let{sidebar:t}=e;const a=(0,r.l)();return t?.items.length?"mobile"===a?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function f(e){const{sidebar:t,toc:a,children:s,...r}=e,i=t&&t.items.length>0;return(0,h.jsx)(l.A,{...r,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(b,{sidebar:t}),(0,h.jsx)("main",{className:(0,n.A)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:s}),a&&(0,h.jsx)("div",{className:"col col--2",children:a})]})})})}},4651:(e,t,a)=>{a.d(t,{A:()=>C});a(6540);var s=a(4164),n=a(7131),l=a(4848);function r(e){let{children:t,className:a}=e;return(0,l.jsx)("article",{className:a,children:t})}var i=a(8774);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:r}=(0,n.e)(),{permalink:c,title:d}=a,m=r?"h1":"h2";return(0,l.jsx)(m,{className:(0,s.A)(o.title,t),children:r?d:(0,l.jsx)(i.A,{to:c,children:d})})}var d=a(1312),m=a(5846),u=a(6266);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,m.W)();return t=>{const a=Math.ceil(t);return e(a,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return(0,l.jsx)(l.Fragment,{children:a(t)})}function p(e){let{date:t,formattedDate:a}=e;return(0,l.jsx)("time",{dateTime:t,children:a})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:a}=(0,n.e)(),{date:r,readingTime:i}=a,o=(0,u.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,l.jsxs)("div",{className:(0,s.A)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==i&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:i})]})]});var c}function b(e){return e.href?(0,l.jsx)(i.A,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function f(e){let{author:t,className:a}=e;const{name:n,title:r,url:i,imageURL:o,email:c}=t,d=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,s.A)("avatar margin-bottom--sm",a),children:[o&&(0,l.jsx)(b,{href:d,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:n})}),n&&(0,l.jsxs)("div",{className:"avatar__intro",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(b,{href:d,children:(0,l.jsx)("span",{children:n})})}),r&&(0,l.jsx)("small",{className:"avatar__subtitle",children:r})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function A(e){let{className:t}=e;const{metadata:{authors:a},assets:r}=(0,n.e)();if(0===a.length)return null;const i=a.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,s.A)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:a.map(((e,t)=>(0,l.jsx)("div",{className:(0,s.A)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(f,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(c,{}),(0,l.jsx)(j,{}),(0,l.jsx)(A,{})]})}var _=a(440),k=a(5533);function U(e){let{children:t,className:a}=e;const{isBlogPostPage:r}=(0,n.e)();return(0,l.jsx)("div",{id:r?_.blogPostContainerID:void 0,className:(0,s.A)("markdown",a),children:(0,l.jsx)(k.A,{children:t})})}var w=a(7559),y=a(4336),T=a(2053);function P(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function I(e){const{blogPostTitle:t,...a}=e;return(0,l.jsx)(i.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...a,children:(0,l.jsx)(P,{})})}function L(){const{metadata:e,isBlogPostPage:t}=(0,n.e)(),{tags:a,title:r,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,u=a.length>0;if(!(u||m||i))return null;if(t){const e=!!(i||d||c);return(0,l.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,l.jsx)("div",{className:(0,s.A)("row","margin-top--sm",w.G.blog.blogFooterEditMetaRow),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(T.A,{tags:a})})}),e&&(0,l.jsx)(y.A,{className:(0,s.A)("margin-top--sm",w.G.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,l.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,l.jsx)("div",{className:(0,s.A)("col",{"col--9":m}),children:(0,l.jsx)(T.A,{tags:a})}),m&&(0,l.jsx)("div",{className:(0,s.A)("col text--right",{"col--3":u}),children:(0,l.jsx)(I,{blogPostTitle:r,to:e.permalink})})]})}function C(e){let{children:t,className:a}=e;const i=function(){const{isBlogPostPage:e}=(0,n.e)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(r,{className:(0,s.A)(i,a),children:[(0,l.jsx)(N,{}),(0,l.jsx)(U,{children:t}),(0,l.jsx)(L,{})]})}},4336:(e,t,a)=>{a.d(t,{A:()=>x});a(6540);var s=a(4164),n=a(1312),l=a(7559),r=a(8774);const i={iconEdit:"iconEdit_Z9Sw"};var o=a(4848);function c(e){let{className:t,...a}=e;return(0,o.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(i.iconEdit,t),"aria-hidden":"true",...a,children:(0,o.jsx)("g",{children:(0,o.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,o.jsxs)(r.A,{to:t,className:l.G.common.editThisPage,children:[(0,o.jsx)(c,{}),(0,o.jsx)(n.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var m=a(6266);function u(e){let{lastUpdatedAt:t}=e;const a=new Date(t),s=(0,m.i)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(a);return(0,o.jsx)(n.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,o.jsx)("b",{children:(0,o.jsx)("time",{dateTime:a.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,o.jsx)(n.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,o.jsx)("b",{children:t})},children:" by {user}"})}function g(e){let{lastUpdatedAt:t,lastUpdatedBy:a}=e;return(0,o.jsxs)("span",{className:l.G.common.lastUpdated,children:[(0,o.jsx)(n.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,o.jsx)(u,{lastUpdatedAt:t}):"",byUser:a?(0,o.jsx)(h,{lastUpdatedBy:a}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const p={lastUpdated:"lastUpdated_JAkA"};function x(e){let{className:t,editUrl:a,lastUpdatedAt:n,lastUpdatedBy:l}=e;return(0,o.jsxs)("div",{className:(0,s.A)("row",t),children:[(0,o.jsx)("div",{className:"col",children:a&&(0,o.jsx)(d,{editUrl:a})}),(0,o.jsx)("div",{className:(0,s.A)("col",p.lastUpdated),children:(n||l)&&(0,o.jsx)(g,{lastUpdatedAt:n,lastUpdatedBy:l})})]})}},9022:(e,t,a)=>{a.d(t,{A:()=>r});a(6540);var s=a(4164),n=a(8774),l=a(4848);function r(e){const{permalink:t,title:a,subLabel:r,isNext:i}=e;return(0,l.jsxs)(n.A,{className:(0,s.A)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[r&&(0,l.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,l.jsx)("div",{className:"pagination-nav__label",children:a})]})}},6133:(e,t,a)=>{a.d(t,{A:()=>i});a(6540);var s=a(4164),n=a(8774);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var r=a(4848);function i(e){let{permalink:t,label:a,count:i}=e;return(0,r.jsxs)(n.A,{href:t,className:(0,s.A)(l.tag,i?l.tagWithCount:l.tagRegular),children:[a,i&&(0,r.jsx)("span",{children:i})]})}},2053:(e,t,a)=>{a.d(t,{A:()=>o});a(6540);var s=a(4164),n=a(1312),l=a(6133);const r={tags:"tags_jXut",tag:"tag_QGVx"};var i=a(4848);function o(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(n.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.A)(r.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:a}=e;return(0,i.jsx)("li",{className:r.tag,children:(0,i.jsx)(l.A,{label:t,permalink:a})},a)}))})]})}},7131:(e,t,a)=>{a.d(t,{e:()=>o,i:()=>i});var s=a(6540),n=a(9532),l=a(4848);const r=s.createContext(null);function i(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const i=function(e){let{content:t,isBlogPostPage:a}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return(0,l.jsx)(r.Provider,{value:i,children:t})}function o(){const e=(0,s.useContext)(r);if(null===e)throw new n.dV("BlogPostProvider");return e}},6266:(e,t,a)=>{a.d(t,{i:()=>n});var s=a(4586);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.A)(),a=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:a,...e})}},5846:(e,t,a)=>{a.d(t,{W:()=>c});var s=a(6540),n=a(4586);const l=["zero","one","two","few","many","other"];function r(e){return l.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:r(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:r(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,a)=>function(e,t,a){const s=e.split("|");if(1===s.length)return s[0];s.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const n=a.select(t),l=a.pluralForms.indexOf(n);return s[Math.min(l,s.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/3291828e.7a1ba793.js b/assets/js/3291828e.7a1ba793.js new file mode 100644 index 0000000000..6eab760971 --- /dev/null +++ b/assets/js/3291828e.7a1ba793.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72170],{46036:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var n=r(24246),i=r(71670);const t={mdx:{format:"md"},date:"2023-05-15T20:00",authors:["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},o="2.4.1",a={permalink:"/changelog/2.4.1",source:"@site/changelog/source/2.4.1.md",title:"2.4.1",description:"Bug Fix",date:"2023-05-15T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Andrew Lyons",alias:"andrewnicols",url:"https://github.com/andrewnicols",imageURL:"https://github.com/andrewnicols.png",key:"andrewnicols"},{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"MetuMortis",alias:"LiberaTeMetuMortis",url:"https://github.com/LiberaTeMetuMortis",imageURL:"https://github.com/LiberaTeMetuMortis.png",key:"LiberaTeMetuMortis"},{name:"Aleksandr Vladykin",alias:"morsko1",url:"https://github.com/morsko1",imageURL:"https://github.com/morsko1.png",key:"morsko1"},{name:"Sachin Nanayakkara",alias:"SACHINnANYAKKARA",url:"https://github.com/SACHINnANYAKKARA",imageURL:"https://github.com/SACHINnANYAKKARA.png",key:"SACHINnANYAKKARA"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tarun Chauhan",alias:"tarunrajput",url:"https://github.com/tarunrajput",imageURL:"https://github.com/tarunrajput.png",key:"tarunrajput"}],frontMatter:{mdx:{format:"md"},date:"2023-05-15T20:00",authors:["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},unlisted:!1,prevItem:{title:"2.4.2",permalink:"/changelog/2.4.2"},nextItem:{title:"2.4.0",permalink:"/changelog/2.4.0"},listPageLink:"/changelog/"},c={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"Committers: 7",id:"committers-7",level:2}];function h(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8971",children:"#8971"})," fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8933",children:"#8933"}),' fix(theme-translations): fix Turkish translation for aria label "Enter key" (',(0,n.jsx)(s.a,{href:"https://github.com/LiberaTeMetuMortis",children:"@LiberaTeMetuMortis"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8908",children:"#8908"})," fix(core): Correct yarn upgrade command for yarn 2.x (",(0,n.jsx)(s.a,{href:"https://github.com/andrewnicols",children:"@andrewnicols"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,n.jsx)(s.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8909",children:"#8909"})," fix(theme): add __ prefix to technical anchors, search crawlers (Algolia) should ignore them (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8906",children:"#8906"})," fix(theme-common): fix collapsible component with prefers-reduced-motion (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8873",children:"#8873"})," fix(theme-common): fix confusing theme error message: bad sidebar id suggestions (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8874",children:"#8874"})," fix(utils): handle Markdown links with spaces to route correctly (",(0,n.jsx)(s.a,{href:"https://github.com/morsko1",children:"@morsko1"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8842",children:"#8842"})," fix(theme-translations): remove redundant navigation text in aria label (",(0,n.jsx)(s.a,{href:"https://github.com/tarunrajput",children:"@tarunrajput"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8831",children:"#8831"})," fix(create): add missing await (",(0,n.jsx)(s.a,{href:"https://github.com/SACHINnANYAKKARA",children:"@SACHINnANYAKKARA"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8862",children:"#8862"})," refactor(theme): expose copy, success and word-wrap icons as standalone components (",(0,n.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"committers-7",children:"Committers: 7"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Aleksandr Vladykin (",(0,n.jsx)(s.a,{href:"https://github.com/morsko1",children:"@morsko1"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Andrew Lyons (",(0,n.jsx)(s.a,{href:"https://github.com/andrewnicols",children:"@andrewnicols"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Armano (",(0,n.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["MetuMortis (",(0,n.jsx)(s.a,{href:"https://github.com/LiberaTeMetuMortis",children:"@LiberaTeMetuMortis"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Sachin Nanayakkara (",(0,n.jsx)(s.a,{href:"https://github.com/SACHINnANYAKKARA",children:"@SACHINnANYAKKARA"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Tarun Chauhan (",(0,n.jsx)(s.a,{href:"https://github.com/tarunrajput",children:"@tarunrajput"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>o});var n=r(27378);const i={},t=n.createContext(i);function o(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32a09314.f59ca1b7.js b/assets/js/32a09314.f59ca1b7.js new file mode 100644 index 0000000000..0b18640596 --- /dev/null +++ b/assets/js/32a09314.f59ca1b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15958],{44028:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var i=s(24246),n=s(71670);const o={unlisted:!0,tags:["visibility","unlisted"]},l="Some Unlisteds - Unlisted 1",d={id:"tests/visibility/some-unlisteds/unlisted1",title:"Some Unlisteds - Unlisted 1",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted1.mdx",sourceDirName:"tests/visibility/some-unlisteds",slug:"/tests/visibility/some-unlisteds/unlisted1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted1",draft:!1,unlisted:!0,tags:[{label:"visibility",permalink:"/tests/docs/tags/visibility"},{label:"unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},u=[];function a(t){const e={h1:"h1",p:"p",...(0,n.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h1,{id:"some-unlisteds---unlisted-1",children:"Some Unlisteds - Unlisted 1"}),"\n",(0,i.jsx)(e.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(a,{...t})}):a(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>d,a:()=>l});var i=s(27378);const n={},o=i.createContext(n);function l(t){const e=i.useContext(o);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function d(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:l(t.components),i.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/32bd6f31.4840a0c9.js b/assets/js/32bd6f31.4840a0c9.js new file mode 100644 index 0000000000..81acab95de --- /dev/null +++ b/assets/js/32bd6f31.4840a0c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15250],{35243:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>f});var n=o(24246),s=o(71670);const r={title:"Third post with footnote to test posts with same footnote reference."},a=void 0,i={permalink:"/tests/blog/2022/01/21/dup-footnote",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx",source:"@site/_dogfooding/_blog tests/2022-01-21-dup-footnote.mdx",title:"Third post with footnote to test posts with same footnote reference.",description:"foo",date:"2022-01-21T00:00:00.000Z",tags:[],readingTime:1.8,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Third post with footnote to test posts with same footnote reference."},unlisted:!1,prevItem:{title:"Second post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/22/dup-footnote"},nextItem:{title:"Image-only authors",permalink:"/tests/blog/2022/01/20/image-only-authors"}},c={authorsImageUrls:[]},f=[];function l(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["foo",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-1-953011",id:"user-content-fnref-1-953011","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),"\n",(0,n.jsxs)(t.p,{children:["bar",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-2-953011",id:"user-content-fnref-2-953011","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})]}),"\n",(0,n.jsxs)(t.p,{children:["baz",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-3-953011",id:"user-content-fnref-3-953011","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})]}),"\n","\n",(0,n.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,n.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{id:"user-content-fn-1-953011",children:["\n",(0,n.jsxs)(t.p,{children:["foo ",(0,n.jsx)(t.a,{href:"#user-content-fnref-1-953011","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-2-953011",children:["\n",(0,n.jsxs)(t.p,{children:["bar ",(0,n.jsx)(t.a,{href:"#user-content-fnref-2-953011","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-3-953011",children:["\n",(0,n.jsxs)(t.p,{children:["baz ",(0,n.jsx)(t.a,{href:"#user-content-fnref-3-953011","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>a});var n=o(27378);const s={},r=n.createContext(s);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32d17417.e14eaa8d.js b/assets/js/32d17417.e14eaa8d.js new file mode 100644 index 0000000000..e69d403deb --- /dev/null +++ b/assets/js/32d17417.e14eaa8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38339],{29173:a=>{a.exports=JSON.parse('{"tag":{"label":"search","permalink":"/blog/tags/search","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/search","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/32eeb95a.f03ce5f2.js b/assets/js/32eeb95a.f03ce5f2.js new file mode 100644 index 0000000000..6527bdc171 --- /dev/null +++ b/assets/js/32eeb95a.f03ce5f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[14158],{96178:e=>{e.exports=JSON.parse('{"tag":{"label":"release","permalink":"/blog/tags/release","allTagsPath":"/blog/tags","count":11,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":5,"totalPages":3,"totalCount":11,"nextPage":"/blog/tags/release/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/33426.cf4f35ce.js b/assets/js/33426.cf4f35ce.js new file mode 100644 index 0000000000..1c1ba6e2f6 --- /dev/null +++ b/assets/js/33426.cf4f35ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33426],{33426:(t,e,i)=>{i.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>P});var s=i(99854),n=function(){var t=function(t,e,i,s){for(i=i||{},s=t.length;s--;i[t[s]]=e);return i},e=[1,2],i=[1,3],s=[1,5],n=[1,7],r=[2,5],o=[1,15],a=[1,17],c=[1,21],l=[1,22],h=[1,23],u=[1,24],d=[1,37],p=[1,25],y=[1,26],f=[1,27],g=[1,28],m=[1,29],_=[1,32],S=[1,33],k=[1,34],T=[1,35],b=[1,36],E=[1,39],v=[1,40],x=[1,41],D=[1,42],C=[1,38],$=[1,45],A=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],I=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],N={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"--\x3e":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,class:42,CLASSENTITY_IDS:43,STYLECLASS:44,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(t,e,i,s,n,r,o){var a=r.length-1;switch(n){case 4:return s.setRootDoc(r[a]),r[a];case 5:this.$=[];break;case 6:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 7:case 8:case 12:this.$=r[a];break;case 9:this.$="nl";break;case 13:const t=r[a-1];t.description=s.trimColon(r[a]),this.$=t;break;case 14:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 15:const e=s.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 19:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 20:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 21:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 22:this.$={stmt:"state",id:r[a],type:"fork"};break;case 23:this.$={stmt:"state",id:r[a],type:"join"};break;case 24:this.$={stmt:"state",id:r[a],type:"choice"};break;case 25:this.$={stmt:"state",id:s.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 30:this.$=r[a].trim(),s.setAccTitle(this.$);break;case 31:case 32:this.$=r[a].trim(),s.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 35:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 38:s.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:s.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:s.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:s.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""};break;case 50:s.parseDirective("%%{","open_directive");break;case 51:s.parseDirective(r[a],"type_directive");break;case 52:r[a]=r[a].trim().replace(/'/g,'"'),s.parseDirective(r[a],"arg_directive");break;case 53:s.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:i,6:4,7:s,45:6,60:n},{1:[3]},{3:8,4:e,5:i,6:4,7:s,45:6,60:n},{3:9,4:e,5:i,6:4,7:s,45:6,60:n},{3:10,4:e,5:i,6:4,7:s,45:6,60:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],r,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},{47:43,48:[1,44],63:$},t([48,63],[2,51]),t(A,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:c,17:l,19:h,22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,8]),t(A,[2,9]),t(A,[2,10]),t(A,[2,11]),t(A,[2,12],{14:[1,47],15:[1,48]}),t(A,[2,16]),{18:[1,49]},t(A,[2,18],{20:[1,50]}),{23:[1,51]},t(A,[2,22]),t(A,[2,23]),t(A,[2,24]),t(A,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},t(A,[2,28]),t(A,[2,29]),{34:[1,56]},{36:[1,57]},t(A,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},t(L,[2,44],{57:[1,61]}),t(L,[2,45],{57:[1,62]}),t(A,[2,38]),t(A,[2,39]),t(A,[2,40]),t(A,[2,41]),t(I,[2,36]),{49:63,62:[1,64]},t(I,[2,53]),t(A,[2,7]),t(A,[2,13]),{13:65,24:d,56:C},t(A,[2,17]),t(O,r,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},t(A,[2,30]),t(A,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:$},{63:[2,52]},t(A,[2,14],{14:[1,76]}),{4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,21:[1,77],22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},t(A,[2,33]),t(A,[2,34]),t(A,[2,35]),t(L,[2,46]),t(L,[2,47]),t(I,[2,37]),t(A,[2,15]),t(A,[2,19]),t(O,r,{8:81}),t(A,[2,26]),t(A,[2,27]),{4:o,5:a,6:30,9:14,10:16,11:18,12:19,13:20,16:c,17:l,19:h,21:[1,82],22:u,24:d,25:p,26:y,27:f,28:g,29:m,32:31,33:_,35:S,37:k,38:T,42:b,45:6,50:E,51:v,52:x,53:D,56:C,60:n},t(A,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],s=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var f=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,m,_,S,k,T,b,E,v,x={};;){if(m=i[i.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==g&&(v=void 0,"number"!=typeof(v=s.pop()||u.lex()||1)&&(v instanceof Array&&(v=(s=v).pop()),v=e.symbols_[v]||v),g=v),_=o[m]&&o[m][g]),void 0===_||!_.length||!_[0]){var D="";for(k in E=[],o[m])this.terminals_[k]&&k>2&&E.push("'"+this.terminals_[k]+"'");D=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(D,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:y,expected:E})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+g);switch(_[0]){case 1:i.push(g),n.push(u.yytext),r.push(u.yylloc),i.push(_[1]),g=null,l=u.yyleng,a=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[_[1]][1],x.$=n[n.length-T],x._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},f&&(x._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(S=this.performAction.apply(x,[a,l,c,d.yy,_[1],n,r].concat(h))))return S;T&&(i=i.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),i.push(this.productions_[_[1]][0]),n.push(x.$),r.push(x._$),b=o[i[i.length-2]][i[i.length-1]],i.push(b);break;case 3:return!0}}return!0}},R={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((i=this._input.match(this.rules[n[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,s){switch(i){case 0:return 41;case 1:case 44:return 50;case 2:case 45:return 51;case 3:case 46:return 52;case 4:case 47:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:case 11:case 13:case 14:case 15:case 16:case 56:case 58:case 64:break;case 12:case 79:return 5;case 17:case 34:return this.pushState("SCALE"),17;case 18:case 35:return 18;case 19:case 25:case 36:case 51:case 54:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 37:this.pushState("STATE");break;case 38:case 41:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:case 66:return this.popState(),"ID";case 52:return"STATE_DESCR";case 53:return 19;case 55:return this.popState(),this.pushState("struct"),20;case 57:return this.popState(),21;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 65:return"NOTE_TEXT";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 69:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 70:case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return e.yytext=e.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 80:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}};function w(){this.yy={}}return N.lexer=R,w.prototype=N,N.Parser=w,new w}();n.parser=n;const r=n,o="TB",a="state",c="relation",l="default",h="divider",u="[*]",d="start",p=u,y="color",f="fill";let g="LR",m=[],_={};let S={root:{relations:[],states:{},documents:{}}},k=S.root,T=0,b=0;const E=t=>JSON.parse(JSON.stringify(t)),v=(t,e,i)=>{if(e.stmt===c)v(t,e.state1,!0),v(t,e.state2,!1);else if(e.stmt===a&&("[*]"===e.id?(e.id=i?t.id+"_start":t.id+"_end",e.start=i):e.id=e.id.trim()),e.doc){const t=[];let i,n=[];for(i=0;i<e.doc.length;i++)if(e.doc[i].type===h){const s=E(e.doc[i]);s.doc=E(n),t.push(s),n=[]}else n.push(e.doc[i]);if(t.length>0&&n.length>0){const i={stmt:a,id:(0,s.I)(),type:"divider",doc:E(n)};t.push(E(i)),e.doc=t}e.doc.forEach((t=>v(e,t,!0)))}},x=function(t,e=l,i=null,n=null,r=null,o=null,a=null,c=null){const h=null==t?void 0:t.trim();if(void 0===k.states[h]?(s.l.info("Adding state ",h,n),k.states[h]={id:h,descriptions:[],type:e,doc:i,note:r,classes:[],styles:[],textStyles:[]}):(k.states[h].doc||(k.states[h].doc=i),k.states[h].type||(k.states[h].type=e)),n&&(s.l.info("Setting state description",h,n),"string"==typeof n&&I(h,n.trim()),"object"==typeof n&&n.forEach((t=>I(h,t.trim())))),r&&(k.states[h].note=r,k.states[h].note.text=s.e.sanitizeText(k.states[h].note.text,(0,s.c)())),o){s.l.info("Setting state classes",h,o);("string"==typeof o?[o]:o).forEach((t=>N(h,t.trim())))}if(a){s.l.info("Setting state styles",h,a);("string"==typeof a?[a]:a).forEach((t=>R(h,t.trim())))}if(c){s.l.info("Setting state styles",h,a);("string"==typeof c?[c]:c).forEach((t=>w(h,t.trim())))}},D=function(t){S={root:{relations:[],states:{},documents:{}}},k=S.root,T=0,_={},t||(0,s.v)()},C=function(t){return k.states[t]};function $(t=""){let e=t;return t===u&&(T++,e=`${d}${T}`),e}function A(t="",e=l){return t===u?d:e}const L=function(t,e,i){if("object"==typeof t)!function(t,e,i){let n=$(t.id.trim()),r=A(t.id.trim(),t.type),o=$(e.id.trim()),a=A(e.id.trim(),e.type);x(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),x(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:n,id2:o,relationTitle:s.e.sanitizeText(i,(0,s.c)())})}(t,e,i);else{const n=$(t.trim()),r=A(t),o=function(t=""){let e=t;return t===p&&(T++,e=`end${T}`),e}(e.trim()),a=function(t="",e=l){return t===p?"end":e}(e);x(n,r),x(o,a),k.relations.push({id1:n,id2:o,title:s.e.sanitizeText(i,(0,s.c)())})}},I=function(t,e){const i=k.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;i.descriptions.push(s.e.sanitizeText(n,(0,s.c)()))},O=function(t,e=""){void 0===_[t]&&(_[t]={id:t,styles:[],textStyles:[]});const i=_[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(y)){const t=e.replace(f,"bgFill").replace(y,f);i.textStyles.push(t)}i.styles.push(e)}))},N=function(t,e){t.split(",").forEach((function(t){let i=C(t);if(void 0===i){const e=t.trim();x(e),i=C(e)}i.classes.push(e)}))},R=function(t,e){const i=C(t);void 0!==i&&i.textStyles.push(e)},w=function(t,e){const i=C(t);void 0!==i&&i.textStyles.push(e)},B={parseDirective:function(t,e,i){s.m.parseDirective(this,t,e,i)},getConfig:()=>(0,s.c)().state,addState:x,clear:D,getState:C,getStates:function(){return k.states},getRelations:function(){return k.relations},getClasses:function(){return _},getDirection:()=>g,addRelation:L,getDividerId:()=>(b++,"divider-id-"+b),setDirection:t=>{g=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){s.l.info("Documents = ",S)},getRootDoc:()=>m,setRootDoc:t=>{s.l.info("Setting root doc",t),m=t},getRootDocV2:()=>(v({id:"root"},{id:"root",doc:m},!0),{id:"root",doc:m}),extract:t=>{let e;e=t.doc?t.doc:t,s.l.info(e),D(!0),s.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case a:x(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case c:L(t.state1,t.state2,t.description);break;case"classDef":O(t.id.trim(),t.classes);break;case"applyClass":N(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:s.g,setAccTitle:s.s,getAccDescription:s.a,setAccDescription:s.b,addStyleClass:O,setCssClass:N,addDescription:I,setDiagramTitle:s.r,getDiagramTitle:s.t},P=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/33a17176.c7a7e41e.js b/assets/js/33a17176.c7a7e41e.js new file mode 100644 index 0000000000..88de339809 --- /dev/null +++ b/assets/js/33a17176.c7a7e41e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66058],{70539:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},21004:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},1149:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var a=t(24246),r=t(71670);const n={title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2024-01-05T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.1",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.1/index.mdx",source:"@site/blog/releases/3.1/index.mdx",title:"Docusaurus 3.1",description:"We are happy to announce Docusaurus 3.1.",date:"2024-01-05T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:1.665,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 3.1",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2024-01-05T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1704479518e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Docusaurus 3.2",permalink:"/blog/releases/3.2"},nextItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"}},c={image:t(70539).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 3.1"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus blog post social card",src:t(21004).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33bfb584.cca8f57a.js b/assets/js/33bfb584.cca8f57a.js new file mode 100644 index 0000000000..8839c74a74 --- /dev/null +++ b/assets/js/33bfb584.cca8f57a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20393],{61132:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=(t(27378),t(40624));const l={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(l.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>P});var r=t(24246),s=t(27378),l=t(40624),a=t(75527),i=t(3620),o=t(44479),u=t(62821),c=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const t=(0,i.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),l=(0,u._X)(r),a=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[l,a]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,l=f(e),[a,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:l}))),[u,c]=b({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),m=(()=>{const e=null!=u?u:p;return g({value:e,tabValues:l})?e:null})();(0,o.Z)((()=>{m&&i(m)}),[m]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!g({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);i(e),c(e),h(e)}),[c,h,l]),tabValues:l}}var x=t(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:s,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:u}=(0,a.o5)(),c=e=>{const n=e.currentTarget,r=o.indexOf(n),l=i[r].value;l!==t&&(u(n),s(l))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[o.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>o.push(e),onKeyDown:d,onClick:c},s),{className:(0,l.Z)("tabs__item",v.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function E({lazy:e,children:n,selectedValue:t}){const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=l.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function S(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,l.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},e,n)),(0,r.jsx)(E,w({},e,n))]})}function P(e){const n=(0,x.Z)();return(0,r.jsx)(S,O(w({},e),{children:m(e.children)}),String(n))}},38722:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>d});var r=t(24246),s=t(71670),l=t(97555),a=t(61132);const i={sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},o="\ud83d\udce6 eslint-plugin",u={id:"api/misc/eslint-plugin/README",title:"\ud83d\udce6 eslint-plugin",description:"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.",source:"@site/docs/api/misc/eslint-plugin/README.mdx",sourceDirName:"api/misc/eslint-plugin",slug:"/api/misc/@docusaurus/eslint-plugin",permalink:"/docs/api/misc/@docusaurus/eslint-plugin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/eslint-plugin/README.mdx",tags:[],version:"current",lastUpdatedBy:"Devansu Yadav",lastUpdatedAt:1674144504e3,sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/api/misc/@docusaurus/eslint-plugin"},sidebar:"api",previous:{title:"\ud83d\udce6 create-docusaurus",permalink:"/docs/api/misc/create-docusaurus"},next:{title:"no-html-links",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Recommended config",id:"recommended-config",level:3},{value:"Manual config",id:"manual-config",level:3},{value:"Supported configs",id:"supported-configs",level:2},{value:"Supported rules",id:"supported-rules",level:2},{value:"Example configuration",id:"example-configuration",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-eslint-plugin",children:"\ud83d\udce6 eslint-plugin"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://eslint.org/",children:"ESLint"})," is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices."]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(l.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(a.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save-dev @docusaurus/eslint-plugin\n"})})}),(0,r.jsx)(a.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add --dev @docusaurus/eslint-plugin\n"})})}),(0,r.jsx)(a.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add --save-dev @docusaurus/eslint-plugin\n"})})})]}),"\n",(0,r.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsx)(n.h3,{id:"recommended-config",children:"Recommended config"}),"\n",(0,r.jsxs)(n.p,{children:["Add ",(0,r.jsx)(n.code,{children:"plugin:@docusaurus/recommended"})," to the ",(0,r.jsx)(n.code,{children:"extends"})," section of your ",(0,r.jsx)(n.code,{children:".eslintrc"})," configuration file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "extends": ["plugin:@docusaurus/recommended"]\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["This will enable the ",(0,r.jsx)(n.code,{children:"@docusaurus"})," eslint plugin and use the ",(0,r.jsx)(n.code,{children:"recommended"})," config. See ",(0,r.jsx)(n.a,{href:"#supported-rules",children:"Supported rules"})," below for a list of rules that this will enable."]}),"\n",(0,r.jsx)(n.h3,{id:"manual-config",children:"Manual config"}),"\n",(0,r.jsx)(n.p,{children:"For more fine-grained control, you can also enable the plugin manually and configure the rules you want to use directly:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title=".eslintrc"',children:'{\n "plugins": ["@docusaurus"],\n "rules": {\n "@docusaurus/string-literal-i18n-messages": "error",\n "@docusaurus/no-untranslated-text": "warn"\n }\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"supported-configs",children:"Supported configs"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Recommended: recommended rule set for most Docusaurus sites that should be extended from."}),"\n",(0,r.jsxs)(n.li,{children:["All: ",(0,r.jsx)(n.strong,{children:"all"})," rules enabled. This will change between minor versions, so you should not use this if you want to avoid unexpected breaking changes."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"supported-rules",children:"Supported rules"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"}),(0,r.jsx)(n.th,{})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text",children:(0,r.jsx)(n.code,{children:"@docusaurus/no-untranslated-text"})})}),(0,r.jsx)(n.td,{children:"Enforce text labels in JSX to be wrapped by translate calls"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages",children:(0,r.jsx)(n.code,{children:"@docusaurus/string-literal-i18n-messages"})})}),(0,r.jsx)(n.td,{children:"Enforce translate APIs to be called on plain text labels"}),(0,r.jsx)(n.td,{children:"\u2705"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,r.jsx)(n.code,{children:"@docusaurus/no-html-links"})})}),(0,r.jsxs)(n.td,{children:["Ensures @docusaurus/Link is used instead of ",(0,r.jsx)(n.code,{children:"<a>"})," tags"]}),(0,r.jsx)(n.td,{children:"\u2705"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,r.jsx)(n.code,{children:"@docusaurus/prefer-docusaurus-heading"})})}),(0,r.jsxs)(n.td,{children:["Ensures @theme/Heading is used instead of ",(0,r.jsx)(n.code,{children:"<hn>"})," tags for headings"]}),(0,r.jsx)(n.td,{children:"\u2705"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"\u2705 = recommended"}),"\n",(0,r.jsx)(n.h2,{id:"example-configuration",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title=".eslintrc.js"',children:"module.exports = {\n extends: ['plugin:@docusaurus/recommended'],\n rules: {\n '@docusaurus/no-untranslated-text': [\n 'warn',\n {ignoredStrings: ['\xb7', '\u2014', '\xd7']},\n ],\n },\n};\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>a});var r=t(27378);const s={},l=r.createContext(s);function a(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/340ead00.dcee3ead.js b/assets/js/340ead00.dcee3ead.js new file mode 100644 index 0000000000..a74f4b262d --- /dev/null +++ b/assets/js/340ead00.dcee3ead.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27643],{36100:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>n,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var s=a(24246),o=a(71670);const i={mdx:{format:"md"},date:"2020-09-11T20:00",authors:["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},n="2.0.0-alpha.64",r={permalink:"/changelog/2.0.0-alpha.64",source:"@site/changelog/source/2.0.0-alpha.64.md",title:"2.0.0-alpha.64",description:"New Feature",date:"2020-09-11T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ash",alias:"ashscodes",url:"https://github.com/ashscodes",imageURL:"https://github.com/ashscodes.png",key:"ashscodes"},{name:"josephMG",alias:"josephMG",url:"https://github.com/josephMG",imageURL:"https://github.com/josephMG.png",key:"josephMG"},{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"Rutik Wankhade",alias:"rutikwankhade",url:"https://github.com/rutikwankhade",imageURL:"https://github.com/rutikwankhade.png",key:"rutikwankhade"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Thad Guidry",alias:"thadguidry",url:"https://github.com/thadguidry",imageURL:"https://github.com/thadguidry.png",key:"thadguidry"}],frontMatter:{mdx:{format:"md"},date:"2020-09-11T20:00",authors:["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.65",permalink:"/changelog/2.0.0-alpha.65"},nextItem:{title:"2.0.0-alpha.63",permalink:"/changelog/2.0.0-alpha.63"},listPageLink:"/changelog/page/3"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[];function m(e){return(0,s.jsx)(s.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m()}},71670:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>n});var s=a(27378);const o={},i=s.createContext(o);function n(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:n(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/349.fe8d7bf6.js b/assets/js/349.fe8d7bf6.js new file mode 100644 index 0000000000..d8742b2df7 --- /dev/null +++ b/assets/js/349.fe8d7bf6.js @@ -0,0 +1,26863 @@ +"use strict"; +exports.id = 349; +exports.ids = [349]; +exports.modules = { + +/***/ 96157: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(36715); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 36715: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22701); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78246); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 76576: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 40577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51568); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(97312); + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 64627: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 56], $Vf = [1, 55], $Vg = [1, 36], $Vh = [1, 37], $Vi = [1, 38], $Vj = [1, 39], $Vk = [1, 40], $Vl = [1, 51], $Vm = [1, 53], $Vn = [1, 49], $Vo = [1, 54], $Vp = [1, 50], $Vq = [1, 57], $Vr = [1, 52], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 41], $Vv = [1, 42], $Vw = [1, 43], $Vx = [1, 44], $Vy = [1, 62], $Vz = [1, 67], $VA = [1, 20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VB = [1, 71], $VC = [1, 70], $VD = [1, 72], $VE = [20, 21, 23, 84, 86], $VF = [1, 98], $VG = [1, 103], $VH = [1, 102], $VI = [1, 99], $VJ = [1, 95], $VK = [1, 101], $VL = [1, 97], $VM = [1, 104], $VN = [1, 100], $VO = [1, 105], $VP = [1, 96], $VQ = [20, 21, 22, 23, 84, 86], $VR = [20, 21, 22, 23, 55, 84, 86], $VS = [20, 21, 22, 23, 40, 53, 55, 57, 59, 61, 63, 65, 67, 69, 72, 74, 76, 77, 79, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VT = [20, 21, 23], $VU = [20, 21, 23, 53, 69, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VV = [1, 12, 20, 21, 22, 23, 24, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VW = [53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VX = [1, 134], $VY = [1, 133], $VZ = [1, 141], $V_ = [1, 155], $V$ = [1, 156], $V01 = [1, 157], $V11 = [1, 158], $V21 = [1, 143], $V31 = [1, 145], $V41 = [1, 149], $V51 = [1, 150], $V61 = [1, 151], $V71 = [1, 152], $V81 = [1, 153], $V91 = [1, 154], $Va1 = [1, 159], $Vb1 = [1, 160], $Vc1 = [1, 139], $Vd1 = [1, 140], $Ve1 = [1, 147], $Vf1 = [1, 142], $Vg1 = [1, 146], $Vh1 = [1, 144], $Vi1 = [20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $Vj1 = [1, 162], $Vk1 = [20, 21, 22, 23, 26, 53, 69, 97, 113, 114, 117, 119, 122, 123, 124], $Vl1 = [1, 182], $Vm1 = [1, 178], $Vn1 = [1, 179], $Vo1 = [1, 183], $Vp1 = [1, 180], $Vq1 = [1, 181], $Vr1 = [12, 21, 22, 24], $Vs1 = [86, 124, 127], $Vt1 = [20, 21, 22, 23, 24, 26, 38, 40, 43, 53, 69, 84, 92, 93, 94, 95, 96, 97, 98, 113, 117, 119, 122, 123, 124], $Vu1 = [22, 114], $Vv1 = [42, 58, 60, 62, 64, 66, 71, 73, 75, 76, 78, 80, 124, 125, 126], $Vw1 = [1, 250], $Vx1 = [1, 248], $Vy1 = [1, 252], $Vz1 = [1, 246], $VA1 = [1, 247], $VB1 = [1, 249], $VC1 = [1, 251], $VD1 = [1, 253], $VE1 = [1, 270], $VF1 = [20, 21, 23, 114], $VG1 = [20, 21, 22, 23, 69, 92, 113, 114, 117, 118, 119, 120]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "textNoTags": 39, "SQS": 40, "text": 41, "SQE": 42, "end": 43, "direction": 44, "acc_title": 45, "acc_title_value": 46, "acc_descr": 47, "acc_descr_value": 48, "acc_descr_multiline_value": 49, "link": 50, "node": 51, "styledVertex": 52, "AMP": 53, "vertex": 54, "STYLE_SEPARATOR": 55, "idString": 56, "DOUBLECIRCLESTART": 57, "DOUBLECIRCLEEND": 58, "PS": 59, "PE": 60, "(-": 61, "-)": 62, "STADIUMSTART": 63, "STADIUMEND": 64, "SUBROUTINESTART": 65, "SUBROUTINEEND": 66, "VERTEX_WITH_PROPS_START": 67, "NODE_STRING[field]": 68, "COLON": 69, "NODE_STRING[value]": 70, "PIPE": 71, "CYLINDERSTART": 72, "CYLINDEREND": 73, "DIAMOND_START": 74, "DIAMOND_STOP": 75, "TAGEND": 76, "TRAPSTART": 77, "TRAPEND": 78, "INVTRAPSTART": 79, "INVTRAPEND": 80, "linkStatement": 81, "arrowText": 82, "TESTSTR": 83, "START_LINK": 84, "edgeText": 85, "LINK": 86, "edgeTextToken": 87, "STR": 88, "MD_STR": 89, "textToken": 90, "keywords": 91, "STYLE": 92, "LINKSTYLE": 93, "CLASSDEF": 94, "CLASS": 95, "CLICK": 96, "DOWN": 97, "UP": 98, "textNoTagsToken": 99, "stylesOpt": 100, "idString[vertex]": 101, "idString[class]": 102, "CALLBACKNAME": 103, "CALLBACKARGS": 104, "HREF": 105, "LINK_TARGET": 106, "STR[link]": 107, "STR[tooltip]": 108, "alphaNum": 109, "DEFAULT": 110, "numList": 111, "INTERPOLATE": 112, "NUM": 113, "COMMA": 114, "style": 115, "styleComponent": 116, "NODE_STRING": 117, "UNIT": 118, "BRKT": 119, "PCT": 120, "idStringToken": 121, "MINUS": 122, "MULT": 123, "UNICODE_TEXT": 124, "TEXT": 125, "TAGSTART": 126, "EDGE_TEXT": 127, "alphaNumToken": 128, "direction_tb": 129, "direction_bt": 130, "direction_rl": 131, "direction_lr": 132, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 42: "SQE", 43: "end", 45: "acc_title", 46: "acc_title_value", 47: "acc_descr", 48: "acc_descr_value", 49: "acc_descr_multiline_value", 53: "AMP", 55: "STYLE_SEPARATOR", 57: "DOUBLECIRCLESTART", 58: "DOUBLECIRCLEEND", 59: "PS", 60: "PE", 61: "(-", 62: "-)", 63: "STADIUMSTART", 64: "STADIUMEND", 65: "SUBROUTINESTART", 66: "SUBROUTINEEND", 67: "VERTEX_WITH_PROPS_START", 68: "NODE_STRING[field]", 69: "COLON", 70: "NODE_STRING[value]", 71: "PIPE", 72: "CYLINDERSTART", 73: "CYLINDEREND", 74: "DIAMOND_START", 75: "DIAMOND_STOP", 76: "TAGEND", 77: "TRAPSTART", 78: "TRAPEND", 79: "INVTRAPSTART", 80: "INVTRAPEND", 83: "TESTSTR", 84: "START_LINK", 86: "LINK", 88: "STR", 89: "MD_STR", 92: "STYLE", 93: "LINKSTYLE", 94: "CLASSDEF", 95: "CLASS", 96: "CLICK", 97: "DOWN", 98: "UP", 101: "idString[vertex]", 102: "idString[class]", 103: "CALLBACKNAME", 104: "CALLBACKARGS", 105: "HREF", 106: "LINK_TARGET", 107: "STR[link]", 108: "STR[tooltip]", 110: "DEFAULT", 112: "INTERPOLATE", 113: "NUM", 114: "COMMA", 117: "NODE_STRING", 118: "UNIT", 119: "BRKT", 120: "PCT", 122: "MINUS", 123: "MULT", 124: "UNICODE_TEXT", 125: "TEXT", 126: "TAGSTART", 127: "EDGE_TEXT", 129: "direction_tb", 130: "direction_bt", 131: "direction_rl", 132: "direction_lr" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [51, 1], [51, 5], [52, 1], [52, 3], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 8], [54, 4], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 4], [54, 4], [54, 1], [50, 2], [50, 3], [50, 3], [50, 1], [50, 3], [85, 1], [85, 2], [85, 1], [85, 1], [81, 1], [82, 3], [41, 1], [41, 2], [41, 1], [41, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [39, 1], [39, 2], [39, 1], [39, 1], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 3], [37, 5], [37, 5], [37, 7], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [111, 1], [111, 3], [100, 1], [100, 3], [115, 1], [115, 2], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [90, 1], [90, 1], [90, 1], [90, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [87, 1], [87, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [56, 1], [56, 2], [109, 1], [109, 2], [44, 1], [44, 1], [44, 1], [44, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 184: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = $$[$0]; + break; + case 58: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 65: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 68: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 69: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 75: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 76: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 77: + case 78: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 79: + this.$ = $$[$0]; + break; + case 80: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 81: + this.$ = { text: $$[$0], type: "text" }; + break; + case 82: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 83: + this.$ = { text: $$[$0], type: "string" }; + break; + case 84: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 85: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 86: + this.$ = $$[$0 - 1]; + break; + case 87: + this.$ = { text: $$[$0], type: "text" }; + break; + case 88: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 89: + this.$ = { text: $$[$0], type: "string" }; + break; + case 90: + case 105: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 102: + this.$ = { text: $$[$0], type: "text" }; + break; + case 103: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 104: + this.$ = { text: $$[$0], type: "text" }; + break; + case 106: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 108: + case 116: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 109: + case 117: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 110: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 115: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 118: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 122: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 123: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 124: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 125: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 126: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 127: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 128: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 129: + case 131: + this.$ = [$$[$0]]; + break; + case 130: + case 132: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 134: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 182: + this.$ = $$[$0]; + break; + case 183: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 185: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 186: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 187: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 188: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 189: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 8: 60, 10: [1, 61], 15: $Vy }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 64], 21: [1, 65], 22: $Vz, 27: 63, 30: 66 }, o($VA, [2, 11]), o($VA, [2, 12]), o($VA, [2, 13]), o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), { 9: 68, 20: $VB, 21: $VC, 23: $VD, 50: 69, 81: 73, 84: [1, 74], 86: [1, 75] }, { 9: 76, 20: $VB, 21: $VC, 23: $VD }, { 9: 77, 20: $VB, 21: $VC, 23: $VD }, { 9: 78, 20: $VB, 21: $VC, 23: $VD }, { 9: 79, 20: $VB, 21: $VC, 23: $VD }, { 9: 80, 20: $VB, 21: $VC, 23: $VD }, { 9: 82, 20: $VB, 21: $VC, 22: [1, 81], 23: $VD }, o($VA, [2, 44]), { 46: [1, 83] }, { 48: [1, 84] }, o($VA, [2, 47]), o($VE, [2, 54], { 30: 85, 22: $Vz }), { 22: [1, 86] }, { 22: [1, 87] }, { 22: [1, 88] }, { 22: [1, 89] }, { 26: $VF, 53: $VG, 69: $VH, 88: [1, 93], 97: $VI, 103: [1, 90], 105: [1, 91], 109: 92, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, o($VA, [2, 186]), o($VA, [2, 187]), o($VA, [2, 188]), o($VA, [2, 189]), o($VQ, [2, 55]), o($VQ, [2, 57], { 55: [1, 106] }), o($VR, [2, 75], { 121: 119, 40: [1, 107], 53: $Ve, 57: [1, 108], 59: [1, 109], 61: [1, 110], 63: [1, 111], 65: [1, 112], 67: [1, 113], 69: $Vf, 72: [1, 114], 74: [1, 115], 76: [1, 116], 77: [1, 117], 79: [1, 118], 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VS, [2, 182]), o($VS, [2, 143]), o($VS, [2, 144]), o($VS, [2, 145]), o($VS, [2, 146]), o($VS, [2, 147]), o($VS, [2, 148]), o($VS, [2, 149]), o($VS, [2, 150]), o($VS, [2, 151]), o($VS, [2, 152]), o($VS, [2, 153]), { 9: 120, 20: $VB, 21: $VC, 23: $VD }, { 11: 121, 14: [1, 122] }, o($VT, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 123] }, o($VU, [2, 34], { 30: 124, 22: $Vz }), o($VA, [2, 35]), { 51: 125, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VV, [2, 48]), o($VV, [2, 49]), o($VV, [2, 50]), o($VW, [2, 79], { 82: 126, 71: [1, 128], 83: [1, 127] }), { 85: 129, 87: 130, 88: [1, 131], 89: [1, 132], 124: $VX, 127: $VY }, o([53, 69, 71, 83, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 85]), o($VA, [2, 36]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), { 22: $VZ, 24: $V_, 26: $V$, 38: $V01, 39: 135, 43: $V11, 53: $V21, 69: $V31, 84: $V41, 88: [1, 137], 89: [1, 138], 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 136, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vi1, $V5, { 17: 161 }), o($VA, [2, 45]), o($VA, [2, 46]), o($VE, [2, 53], { 53: $Vj1 }), { 53: $Ve, 56: 163, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 110: [1, 164], 111: 165, 113: [1, 166] }, { 53: $Ve, 56: 167, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 53: $Ve, 56: 168, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 108], { 22: [1, 169], 104: [1, 170] }), { 88: [1, 171] }, o($VT, [2, 116], { 128: 173, 22: [1, 172], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 118], { 22: [1, 174] }), o($Vk1, [2, 184]), o($Vk1, [2, 171]), o($Vk1, [2, 172]), o($Vk1, [2, 173]), o($Vk1, [2, 174]), o($Vk1, [2, 175]), o($Vk1, [2, 176]), o($Vk1, [2, 177]), o($Vk1, [2, 178]), o($Vk1, [2, 179]), o($Vk1, [2, 180]), o($Vk1, [2, 181]), { 53: $Ve, 56: 175, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 41: 176, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 184, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 186, 59: [1, 185], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 187, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 188, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 189, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 117: [1, 190] }, { 41: 191, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 192, 74: [1, 193], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 194, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 195, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 196, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VS, [2, 183]), o($Vr1, [2, 3]), { 8: 197, 15: $Vy }, { 15: [2, 7] }, o($V4, [2, 28]), o($VU, [2, 33]), o($VE, [2, 51], { 30: 198, 22: $Vz }), o($VW, [2, 76], { 22: [1, 199] }), { 22: [1, 200] }, { 41: 201, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 86: [1, 202], 87: 203, 124: $VX, 127: $VY }, o($Vs1, [2, 81]), o($Vs1, [2, 83]), o($Vs1, [2, 84]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), { 9: 205, 20: $VB, 21: $VC, 22: $VZ, 23: $VD, 24: $V_, 26: $V$, 38: $V01, 40: [1, 204], 43: $V11, 53: $V21, 69: $V31, 84: $V41, 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 206, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vt1, [2, 102]), o($Vt1, [2, 104]), o($Vt1, [2, 105]), o($Vt1, [2, 158]), o($Vt1, [2, 159]), o($Vt1, [2, 160]), o($Vt1, [2, 161]), o($Vt1, [2, 162]), o($Vt1, [2, 163]), o($Vt1, [2, 164]), o($Vt1, [2, 165]), o($Vt1, [2, 166]), o($Vt1, [2, 167]), o($Vt1, [2, 168]), o($Vt1, [2, 91]), o($Vt1, [2, 92]), o($Vt1, [2, 93]), o($Vt1, [2, 94]), o($Vt1, [2, 95]), o($Vt1, [2, 96]), o($Vt1, [2, 97]), o($Vt1, [2, 98]), o($Vt1, [2, 99]), o($Vt1, [2, 100]), o($Vt1, [2, 101]), { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 207], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vz, 30: 208 }, { 22: [1, 209], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 210] }, { 22: [1, 211], 114: [1, 212] }, o($Vu1, [2, 129]), { 22: [1, 213], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 214], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 88: [1, 215] }, o($VT, [2, 110], { 22: [1, 216] }), o($VT, [2, 112], { 22: [1, 217] }), { 88: [1, 218] }, o($Vk1, [2, 185]), { 88: [1, 219], 106: [1, 220] }, o($VQ, [2, 58], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), { 42: [1, 221], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vv1, [2, 87]), o($Vv1, [2, 89]), o($Vv1, [2, 90]), o($Vv1, [2, 154]), o($Vv1, [2, 155]), o($Vv1, [2, 156]), o($Vv1, [2, 157]), { 58: [1, 223], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 224, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 60: [1, 225], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 62: [1, 226], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 64: [1, 227], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 66: [1, 228], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 69: [1, 229] }, { 73: [1, 230], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 75: [1, 231], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 232, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 42: [1, 233], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 234], 80: [1, 235], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 237], 80: [1, 236], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 9: 238, 20: $VB, 21: $VC, 23: $VD }, o($VE, [2, 52], { 53: $Vj1 }), o($VW, [2, 78]), o($VW, [2, 77]), { 71: [1, 239], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VW, [2, 80]), o($Vs1, [2, 82]), { 41: 240, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vi1, $V5, { 17: 241 }), o($Vt1, [2, 103]), o($VA, [2, 43]), { 52: 242, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 243, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 254, 112: [1, 255], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 256, 112: [1, 257], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 113: [1, 258] }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 259, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 53: $Ve, 56: 260, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 109]), { 88: [1, 261] }, { 88: [1, 262], 106: [1, 263] }, o($VT, [2, 117]), o($VT, [2, 119], { 22: [1, 264] }), o($VT, [2, 120]), o($VR, [2, 59]), o($Vv1, [2, 88]), o($VR, [2, 60]), { 60: [1, 265], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 67]), o($VR, [2, 62]), o($VR, [2, 63]), o($VR, [2, 64]), { 117: [1, 266] }, o($VR, [2, 66]), o($VR, [2, 68]), { 75: [1, 267], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 70]), o($VR, [2, 71]), o($VR, [2, 73]), o($VR, [2, 72]), o($VR, [2, 74]), o($Vr1, [2, 4]), o([22, 53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 86]), { 42: [1, 268], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 269], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, o($VQ, [2, 56]), o($VT, [2, 122], { 114: $VE1 }), o($VF1, [2, 131], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VG1, [2, 133]), o($VG1, [2, 135]), o($VG1, [2, 136]), o($VG1, [2, 137]), o($VG1, [2, 138]), o($VG1, [2, 139]), o($VG1, [2, 140]), o($VG1, [2, 141]), o($VG1, [2, 142]), o($VT, [2, 123], { 114: $VE1 }), { 22: [1, 272] }, o($VT, [2, 124], { 114: $VE1 }), { 22: [1, 273] }, o($Vu1, [2, 130]), o($VT, [2, 106], { 114: $VE1 }), o($VT, [2, 107], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VT, [2, 111]), o($VT, [2, 113], { 22: [1, 274] }), o($VT, [2, 114]), { 106: [1, 275] }, { 60: [1, 276] }, { 71: [1, 277] }, { 75: [1, 278] }, { 9: 279, 20: $VB, 21: $VC, 23: $VD }, o($VA, [2, 42]), { 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 115: 280, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VG1, [2, 134]), { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 281, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 282, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 106: [1, 283] }, o($VT, [2, 121]), o($VR, [2, 61]), { 41: 284, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 69]), o($Vi1, $V5, { 17: 285 }), o($VF1, [2, 132], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VT, [2, 127], { 128: 173, 22: [1, 286], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 128], { 128: 173, 22: [1, 287], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 115]), { 42: [1, 288], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 289], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 290, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 291, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VR, [2, 65]), o($VA, [2, 41]), o($VT, [2, 125], { 114: $VE1 }), o($VT, [2, 126], { 114: $VE1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 122: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 45; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 47; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("callbackname"); + break; + case 13: + this.popState(); + break; + case 14: + this.popState(); + this.begin("callbackargs"); + break; + case 15: + return 103; + case 16: + this.popState(); + break; + case 17: + return 104; + case 18: + return "MD_STR"; + case 19: + this.popState(); + break; + case 20: + this.begin("md_string"); + break; + case 21: + return "STR"; + case 22: + this.popState(); + break; + case 23: + this.pushState("string"); + break; + case 24: + return 92; + case 25: + return 110; + case 26: + return 93; + case 27: + return 112; + case 28: + return 94; + case 29: + return 95; + case 30: + return 105; + case 31: + this.begin("click"); + break; + case 32: + this.popState(); + break; + case 33: + return 96; + case 34: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 35: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + return 38; + case 38: + return 43; + case 39: + return 106; + case 40: + return 106; + case 41: + return 106; + case 42: + return 106; + case 43: + this.popState(); + return 25; + case 44: + this.popState(); + return 26; + case 45: + this.popState(); + return 26; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + return 129; + case 55: + return 130; + case 56: + return 131; + case 57: + return 132; + case 58: + return 113; + case 59: + return 119; + case 60: + return 55; + case 61: + return 69; + case 62: + return 53; + case 63: + return 20; + case 64: + return 114; + case 65: + return 123; + case 66: + this.popState(); + return 86; + case 67: + this.pushState("edgeText"); + return 84; + case 68: + return 127; + case 69: + this.popState(); + return 86; + case 70: + this.pushState("thickEdgeText"); + return 84; + case 71: + return 127; + case 72: + this.popState(); + return 86; + case 73: + this.pushState("dottedEdgeText"); + return 84; + case 74: + return 127; + case 75: + return 86; + case 76: + this.popState(); + return 62; + case 77: + return "TEXT"; + case 78: + this.pushState("ellipseText"); + return 61; + case 79: + this.popState(); + return 64; + case 80: + this.pushState("text"); + return 63; + case 81: + this.popState(); + return 66; + case 82: + this.pushState("text"); + return 65; + case 83: + return 67; + case 84: + this.pushState("text"); + return 76; + case 85: + this.popState(); + return 73; + case 86: + this.pushState("text"); + return 72; + case 87: + this.popState(); + return 58; + case 88: + this.pushState("text"); + return 57; + case 89: + this.popState(); + return 78; + case 90: + this.popState(); + return 80; + case 91: + return 125; + case 92: + this.pushState("trapText"); + return 77; + case 93: + this.pushState("trapText"); + return 79; + case 94: + return 126; + case 95: + return 76; + case 96: + return 98; + case 97: + return "SEP"; + case 98: + return 97; + case 99: + return 123; + case 100: + return 119; + case 101: + return 53; + case 102: + return 117; + case 103: + return 122; + case 104: + return 124; + case 105: + this.popState(); + return 71; + case 106: + this.pushState("text"); + return 71; + case 107: + this.popState(); + return 60; + case 108: + this.pushState("text"); + return 59; + case 109: + this.popState(); + return 42; + case 110: + this.pushState("text"); + return 40; + case 111: + this.popState(); + return 75; + case 112: + this.pushState("text"); + return 74; + case 113: + return "TEXT"; + case 114: + return "QUOTE"; + case 115: + return 21; + case 116: + return 22; + case 117: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|(?!\)+))/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "arg_directive": { "rules": [3, 4, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "type_directive": { "rules": [2, 3, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "open_directive": { "rules": [1, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackargs": { "rules": [16, 17, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackname": { "rules": [13, 14, 15, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "href": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "click": { "rules": [20, 23, 32, 33, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dottedEdgeText": { "rules": [20, 23, 72, 74, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "thickEdgeText": { "rules": [20, 23, 69, 71, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "edgeText": { "rules": [20, 23, 66, 68, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "trapText": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 89, 90, 91, 92, 93, 106, 108, 110, 112], "inclusive": false }, "ellipseText": { "rules": [20, 23, 75, 76, 77, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "text": { "rules": [20, 23, 75, 78, 79, 80, 81, 82, 85, 86, 87, 88, 92, 93, 105, 106, 107, 108, 109, 110, 111, 112, 113], "inclusive": false }, "vertex": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dir": { "rules": [20, 23, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr": { "rules": [8, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_title": { "rules": [6, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "md_string": { "rules": [18, 19, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "string": { "rules": [20, 21, 22, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40, 41, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 78, 80, 82, 83, 84, 86, 88, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, 110, 112, 114, 115, 116, 117], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.t +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 35349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(64627); +/* harmony import */ var _styles_1b0c237a_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(29119); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88472); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(76576); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(42605); + + + + + + + + + + + + + + + + + + + + + + +const diagram = { + parser: _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.f, + renderer: _styles_1b0c237a_js__WEBPACK_IMPORTED_MODULE_8__.f, + styles: _styles_1b0c237a_js__WEBPACK_IMPORTED_MODULE_8__.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_9__.q)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); + _styles_1b0c237a_js__WEBPACK_IMPORTED_MODULE_8__.f.setConf(cnf.flowchart); + _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.f.clear(); + _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.f.setGen("gen-2"); + } +}; + + + +/***/ }), + +/***/ 30198: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76576); +/* harmony import */ var _edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40577); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51568); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63294); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, parentCluster) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + await recursiveRender(elem, graph, diagramtype); +}; + + + +/***/ }), + +/***/ 29119: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ flowStyles), + f: () => (/* binding */ flowRendererV2) +}); + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +// EXTERNAL MODULE: ../node_modules/d3/src/index.js + 195 modules +var src = __webpack_require__(63294); +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +// EXTERNAL MODULE: ../node_modules/mermaid/dist/index-f58d48f9.js +var index_f58d48f9 = __webpack_require__(30198); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(96157); +// EXTERNAL MODULE: ../node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(83445); +// EXTERNAL MODULE: ../node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(31739); +;// CONCATENATED MODULE: ../node_modules/khroma/dist/methods/channel.js +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return utils/* default */.Z.lang.round(dist_color/* default */.Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const methods_channel = (channel); + +// EXTERNAL MODULE: ../node_modules/khroma/dist/methods/rgba.js +var rgba = __webpack_require__(46442); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/styles-1b0c237a.js + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,mermaid_768dc893.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + mermaid_768dc893.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + mermaid_768dc893.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,mermaid_768dc893.n)((0,mermaid_768dc893.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(mermaid_768dc893.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,mermaid_768dc893.c)().flowchart.padding + }); + mermaid_768dc893.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,mermaid_768dc893.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + mermaid_768dc893.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_768dc893.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + mermaid_768dc893.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + mermaid_768dc893.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + mermaid_768dc893.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,mermaid_768dc893.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_768dc893.o)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(mermaid_768dc893.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + mermaid_768dc893.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,mermaid_768dc893.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + mermaid_768dc893.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + mermaid_768dc893.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + mermaid_768dc893.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_768dc893.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,index_f58d48f9.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + mermaid_768dc893.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,mermaid_768dc893.p)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,src/* select */.Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const fade = (color, opacity) => { + const channel = methods_channel; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return rgba/* default */.Z(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/34b0e7eb.9c8d33e1.js b/assets/js/34b0e7eb.9c8d33e1.js new file mode 100644 index 0000000000..38b38a7114 --- /dev/null +++ b/assets/js/34b0e7eb.9c8d33e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50267],{20500:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog/page/2","page":2,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog","nextPage":"/tests/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/35123c02.3bf9c7c0.js b/assets/js/35123c02.3bf9c7c0.js new file mode 100644 index 0000000000..e0a1e50b09 --- /dev/null +++ b/assets/js/35123c02.3bf9c7c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2148],{37788:(t,s,e)=>{e.r(s),e.d(s,{assets:()=>r,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var n=e(24246),i=e(71670);const l={unlisted:!0,tags:["visibility","unlisted"]},o="Only Unlisteds - Unlisted 3",d={id:"tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",title:"Only Unlisteds - Unlisted 3",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.mdx",sourceDirName:"tests/visibility/only-unlisteds/unlisted-subcategory",slug:"/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",permalink:"/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3",draft:!1,unlisted:!0,tags:[{label:"visibility",permalink:"/tests/docs/tags/visibility"},{label:"unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},r={},u=[];function a(t){const s={h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"only-unlisteds---unlisted-3",children:"Only Unlisteds - Unlisted 3"}),"\n",(0,n.jsx)(s.p,{children:"Doc with unlisted front matter"})]})}function c(t={}){const{wrapper:s}={...(0,i.a)(),...t.components};return s?(0,n.jsx)(s,{...t,children:(0,n.jsx)(a,{...t})}):a(t)}},71670:(t,s,e)=>{e.d(s,{Z:()=>d,a:()=>o});var n=e(27378);const i={},l=n.createContext(i);function o(t){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function d(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:o(t.components),n.createElement(l.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/35349.745ff2e5.js b/assets/js/35349.745ff2e5.js new file mode 100644 index 0000000000..5fd35a80f1 --- /dev/null +++ b/assets/js/35349.745ff2e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35349],{96157:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(36715);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},36715:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(22701),l=n(78246);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},35349:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(64627),l=n(29119),o=n(99854);n(63294),n(88472),n(9500),n(76576),n(27693),n(7608),n(31699);const a={parser:r.p,db:r.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.q)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),r.f.clear(),r.f.setGen("gen-2")}}},29119:(e,t,n)=>{n.d(t,{a:()=>h,f:()=>u});var r=n(88472),l=n(63294),o=n(99854),a=n(30198),s=n(96157),i=n(83445),c=n(31739);const d=(e,t)=>i.Z.lang.round(c.Z.parse(e)[t]);var p=n(46442);const b={},w=function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let c="default";r.classes.length>0&&(c=r.classes.join(" ")),c+=" flowchart-label";const d=(0,o.k)(r.styles);let p,b=void 0!==r.text?r.text:r.id;if(o.l.info("vertex",r,r.labelType),"markdown"===r.labelType)o.l.info("vertex",r,r.labelType);else if((0,o.n)((0,o.c)().flowchart.htmlLabels)){const e={label:b.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};p=(0,s.a)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",d.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(r.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}t.setNode(r.id,{labelStyle:d.labelStyle,shape:f,labelText:b,labelType:r.labelType,rx:w,ry:w,class:c,style:d.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:d.labelStyle,labelType:r.labelType,shape:f,labelText:b,rx:w,ry:w,class:c,style:d.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,o.c)().flowchart.padding})}))},f=function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}e.forEach((function(n){s++;const c="L-"+n.start+"-"+n.end;void 0===i[c]?(i[c]=0,o.l.info("abc78 new entry",c,i[c])):(i[c]++,o.l.info("abc78 new entry",c,i[c]));let d=c+"-"+i[c];o.l.info("abc78 new link id to be used is",c,d,i[c]);const p="LS-"+n.start,w="LE-"+n.end,f={style:"",labelStyle:""};switch(f.minlen=n.length||1,"arrow_open"===n.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(n.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==n.style){const e=(0,o.k)(n.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==n.interpolate?f.curve=(0,o.o)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?f.curve=(0,o.o)(e.defaultInterpolate,l.c_6):f.curve=(0,o.o)(b.curve,l.c_6),void 0===n.text?void 0!==n.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=n.labelType,f.label=n.text.replace(o.e.lineBreakRegex,"\n"),void 0===n.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=d,f.classes="flowchart-link "+p+" "+w,t.setEdge(n.start,n.end,f,s)}))},u={setConf:function(e){const t=Object.keys(e);for(const n of t)b[n]=e[n]},addVertices:w,addEdges:f,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),p=d.nodeSpacing||50,b=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ys)("#i"+t));const h="sandbox"===c?(0,l.Ys)(u.nodes()[0].contentDocument.body):(0,l.Ys)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:p,ranksep:b,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.td_)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}w(v,y,t,h,g,s),f(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.p)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},h=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=d,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return p.Z(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/35453.d909f352.js b/assets/js/35453.d909f352.js new file mode 100644 index 0000000000..6ea65229a3 --- /dev/null +++ b/assets/js/35453.d909f352.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35453],{26746:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,u){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var o=new Error("Cannot find module '"+a+"'");throw o.code="MODULE_NOT_FOUND",o}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,u=e.algorithms,o=void 0===u?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:u,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:o}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,u=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:u}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function u(){}function o(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function v(){}function m(){}function y(){}function k(){}function j(){}function E(){}function T(){}function M(){}function S(){}function P(){}function I(){}function C(){}function O(){}function A(){}function $(){}function L(){}function N(){}function x(){}function D(){}function R(){}function K(){}function _(){}function F(){}function B(){}function H(){}function q(){}function G(){}function z(){}function U(){}function X(){}function W(){}function V(){}function Q(){}function Y(){}function J(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function un(){}function on(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function vn(){}function mn(){}function yn(){}function kn(){}function jn(){}function En(){}function Tn(){}function Mn(){}function Sn(){}function Pn(){}function In(){}function Cn(){}function On(){}function An(){}function $n(){}function Ln(){}function Nn(){}function xn(){}function Dn(){}function Rn(){}function Kn(){}function _n(){}function Fn(){}function Bn(){}function Hn(){}function qn(){}function Gn(){}function zn(){}function Un(){}function Xn(){}function Wn(){}function Vn(){}function Qn(){}function Yn(){}function Jn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ut(){}function ot(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function vt(){}function mt(){}function yt(){}function kt(){}function jt(){}function Et(){}function Tt(){}function Mt(){}function St(){}function Pt(){}function It(){}function Ct(){}function Ot(){}function At(){}function $t(){}function Lt(){}function Nt(){}function xt(){}function Dt(){}function Rt(){}function Kt(){}function _t(){}function Ft(){}function Bt(){}function Ht(){}function qt(){}function Gt(){}function zt(){}function Ut(){}function Xt(){}function Wt(){}function Vt(){}function Qt(){}function Yt(){}function Jt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function ue(){}function oe(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function ve(){}function me(){}function ye(){}function ke(){}function je(){}function Ee(){}function Te(){}function Me(){}function Se(){}function Pe(){}function Ie(){}function Ce(){}function Oe(){}function Ae(){}function $e(){}function Le(){}function Ne(){}function xe(){}function De(){}function Re(){}function Ke(){}function _e(){}function Fe(){}function Be(){}function He(){}function qe(){}function Ge(){}function ze(){}function Ue(){}function Xe(){}function We(){}function Ve(){}function Qe(){}function Ye(){}function Je(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function ui(){}function oi(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function vi(){}function mi(){}function yi(){}function ki(){}function ji(){}function Ei(){}function Ti(){}function Mi(){}function Si(){}function Pi(){}function Ii(){}function Ci(){}function Oi(){}function Ai(){}function $i(){}function Li(){}function Ni(){}function xi(){}function Di(){}function Ri(){}function Ki(){}function _i(){}function Fi(){}function Bi(){}function Hi(){}function qi(){}function Gi(){}function zi(){}function Ui(){}function Xi(){}function Wi(){}function Vi(){}function Qi(){}function Yi(){}function Ji(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function ur(){}function or(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function vr(){}function mr(){}function yr(){}function kr(){}function jr(){}function Er(){}function Tr(){}function Mr(){}function Sr(){}function Pr(){}function Ir(){}function Cr(){}function Or(){}function Ar(){}function $r(){}function Lr(){}function Nr(){}function xr(){}function Dr(){}function Rr(){}function Kr(){}function _r(){}function Fr(){}function Br(){}function Hr(){}function qr(){}function Gr(){}function zr(){}function Ur(){}function Xr(){}function Wr(){}function Vr(){}function Qr(){}function Yr(){}function Jr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function uc(){}function oc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function vc(){}function mc(){}function yc(){}function kc(){}function jc(){}function Ec(){}function Tc(){}function Mc(){}function Sc(){}function Pc(){}function Ic(){}function Cc(){}function Oc(){}function Ac(){}function $c(){}function Lc(){}function Nc(){}function xc(){}function Dc(){}function Rc(){}function Kc(){}function _c(){}function Fc(){}function Bc(){}function Hc(){}function qc(){}function Gc(){}function zc(){}function Uc(){}function Xc(){}function Wc(){}function Vc(){}function Qc(){}function Yc(){}function Jc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function ua(){}function oa(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function va(){}function ma(){}function ya(){}function ka(){}function ja(){}function Ea(){}function Ta(){}function Ma(){}function Sa(){}function Pa(){}function Ia(){}function Ca(){}function Oa(){}function Aa(){}function $a(){}function La(){}function Na(){}function xa(){}function Da(){}function Ra(){}function Ka(){}function _a(){}function Fa(){}function Ba(){}function Ha(){}function qa(){}function Ga(){}function za(){}function Ua(){}function Xa(){}function Wa(){}function Va(){}function Qa(){}function Ya(){}function Ja(){}function Za(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function uu(){}function ou(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function vu(){}function mu(){}function yu(){}function ku(){}function ju(){}function Eu(){}function Tu(){}function Mu(){}function Su(){}function Pu(){}function Iu(){}function Cu(){}function Ou(){}function Au(){}function $u(){}function Lu(){}function Nu(){}function xu(){}function Du(){}function Ru(){}function Ku(){}function _u(){}function Fu(){}function Bu(){}function Hu(){}function qu(){}function Gu(){}function zu(){}function Uu(){}function Xu(){}function Wu(){}function Vu(){}function Qu(){}function Yu(){}function Ju(){}function Zu(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function uo(){}function oo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function vo(){}function mo(){}function yo(){}function ko(){}function jo(){}function Eo(){}function To(){}function Mo(){}function So(){}function Po(){}function Io(){}function Co(){}function Oo(){}function Ao(){}function $o(){}function Lo(){}function No(){}function xo(){}function Do(){}function Ro(){}function Ko(){}function _o(){}function Fo(){}function Bo(){}function Ho(){}function qo(){}function Go(){}function zo(){}function Uo(){}function Xo(){}function Wo(){}function Vo(){}function Qo(){}function Yo(){}function Jo(){}function Zo(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function us(){}function os(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function vs(){}function ms(){}function ys(){}function ks(){}function js(){}function Es(){}function Ts(){}function Ms(){}function Ss(){}function Ps(){}function Is(){}function Cs(){}function Os(){}function As(){}function $s(){}function Ls(){}function Ns(){}function xs(){}function Ds(){}function Rs(){}function Ks(){}function _s(){}function Fs(){}function Bs(){}function Hs(){}function qs(){}function Gs(){}function zs(){}function Us(){}function Xs(){}function Ws(){}function Vs(){}function Qs(){}function Ys(){}function Js(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function uh(){}function oh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function vh(){}function mh(){}function yh(){}function kh(){}function jh(){}function Eh(){}function Th(){}function Mh(){}function Sh(){}function Ph(){}function Ih(){}function Ch(){}function Oh(){}function Ah(){}function $h(){}function Lh(){}function Nh(){}function xh(){}function Dh(){}function Rh(){}function Kh(){}function _h(n){}function Fh(n){}function Bh(){iy()}function Hh(){Gsn()}function qh(){Epn()}function Gh(){_kn()}function zh(){jSn()}function Uh(){fRn()}function Xh(){Kyn()}function Wh(){rkn()}function Vh(){EM()}function Qh(){mM()}function Yh(){q_()}function Jh(){TM()}function Zh(){Crn()}function nf(){SM()}function tf(){C6()}function ef(){Pin()}function rf(){Q8()}function cf(){_Z()}function af(){zsn()}function uf(){_Mn()}function of(){Iin()}function sf(){U2()}function hf(){fWn()}function ff(){Gyn()}function lf(){FZ()}function bf(){HXn()}function wf(){RZ()}function df(){Cin()}function gf(){Yun()}function pf(){GZ()}function vf(){I9()}function mf(){PM()}function yf(){KAn()}function kf(){Uyn()}function jf(){Fcn()}function Ef(){MMn()}function Tf(){bRn()}function Mf(){Bvn()}function Sf(){IAn()}function Pf(){Ran()}function If(){HZ()}function Cf(){s_n()}function Of(){$An()}function Af(){W$n()}function $f(){x9()}function Lf(){SMn()}function Nf(){sWn()}function xf(){Xsn()}function Df(){vdn()}function Rf(){qBn()}function Kf(){u_()}function _f(){wcn()}function Ff(){fFn()}function Bf(n){kW(n)}function Hf(n){this.a=n}function qf(n){this.a=n}function Gf(n){this.a=n}function zf(n){this.a=n}function Uf(n){this.a=n}function Xf(n){this.a=n}function Wf(n){this.a=n}function Vf(n){this.a=n}function Qf(n){this.a=n}function Yf(n){this.a=n}function Jf(n){this.a=n}function Zf(n){this.a=n}function nl(n){this.a=n}function tl(n){this.a=n}function el(n){this.a=n}function il(n){this.a=n}function rl(n){this.a=n}function cl(n){this.a=n}function al(n){this.a=n}function ul(n){this.a=n}function ol(n){this.a=n}function sl(n){this.b=n}function hl(n){this.c=n}function fl(n){this.a=n}function ll(n){this.a=n}function bl(n){this.a=n}function wl(n){this.a=n}function dl(n){this.a=n}function gl(n){this.a=n}function pl(n){this.a=n}function vl(n){this.a=n}function ml(n){this.a=n}function yl(n){this.a=n}function kl(n){this.a=n}function jl(n){this.a=n}function El(n){this.a=n}function Tl(n){this.a=n}function Ml(n){this.a=n}function Sl(n){this.a=n}function Pl(n){this.a=n}function Il(){this.a=[]}function Cl(n,t){n.a=t}function Ol(n,t){n.a=t}function Al(n,t){n.b=t}function $l(n,t){n.b=t}function Ll(n,t){n.b=t}function Nl(n,t){n.j=t}function xl(n,t){n.g=t}function Dl(n,t){n.i=t}function Rl(n,t){n.c=t}function Kl(n,t){n.d=t}function _l(n,t){n.d=t}function Fl(n,t){n.c=t}function Bl(n,t){n.k=t}function Hl(n,t){n.c=t}function ql(n,t){n.c=t}function Gl(n,t){n.a=t}function zl(n,t){n.a=t}function Ul(n,t){n.f=t}function Xl(n,t){n.a=t}function Wl(n,t){n.b=t}function Vl(n,t){n.d=t}function Ql(n,t){n.i=t}function Yl(n,t){n.o=t}function Jl(n,t){n.r=t}function Zl(n,t){n.a=t}function nb(n,t){n.b=t}function tb(n,t){n.e=t}function eb(n,t){n.f=t}function ib(n,t){n.g=t}function rb(n,t){n.e=t}function cb(n,t){n.f=t}function ab(n,t){n.f=t}function ub(n,t){n.n=t}function ob(n,t){n.a=t}function sb(n,t){n.a=t}function hb(n,t){n.c=t}function fb(n,t){n.c=t}function lb(n,t){n.d=t}function bb(n,t){n.e=t}function wb(n,t){n.g=t}function db(n,t){n.a=t}function gb(n,t){n.c=t}function pb(n,t){n.d=t}function vb(n,t){n.e=t}function mb(n,t){n.f=t}function yb(n,t){n.j=t}function kb(n,t){n.a=t}function jb(n,t){n.b=t}function Eb(n,t){n.a=t}function Tb(n){n.b=n.a}function Mb(n){n.c=n.d.d}function Sb(n){this.d=n}function Pb(n){this.a=n}function Ib(n){this.a=n}function Cb(n){this.a=n}function Ob(n){this.a=n}function Ab(n){this.a=n}function $b(n){this.a=n}function Lb(n){this.a=n}function Nb(n){this.a=n}function xb(n){this.a=n}function Db(n){this.a=n}function Rb(n){this.a=n}function Kb(n){this.a=n}function _b(n){this.a=n}function Fb(n){this.a=n}function Bb(n){this.b=n}function Hb(n){this.b=n}function qb(n){this.b=n}function Gb(n){this.a=n}function zb(n){this.a=n}function Ub(n){this.a=n}function Xb(n){this.c=n}function Wb(n){this.c=n}function Vb(n){this.c=n}function Qb(n){this.a=n}function Yb(n){this.a=n}function Jb(n){this.a=n}function Zb(n){this.a=n}function nw(n){this.a=n}function tw(n){this.a=n}function ew(n){this.a=n}function iw(n){this.a=n}function rw(n){this.a=n}function cw(n){this.a=n}function aw(n){this.a=n}function uw(n){this.a=n}function ow(n){this.a=n}function sw(n){this.a=n}function hw(n){this.a=n}function fw(n){this.a=n}function lw(n){this.a=n}function bw(n){this.a=n}function ww(n){this.a=n}function dw(n){this.a=n}function gw(n){this.a=n}function pw(n){this.a=n}function vw(n){this.a=n}function mw(n){this.a=n}function yw(n){this.a=n}function kw(n){this.a=n}function jw(n){this.a=n}function Ew(n){this.a=n}function Tw(n){this.a=n}function Mw(n){this.a=n}function Sw(n){this.a=n}function Pw(n){this.a=n}function Iw(n){this.a=n}function Cw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function $w(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function xw(n){this.a=n}function Dw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function _w(n){this.a=n}function Fw(n){this.a=n}function Bw(n){this.e=n}function Hw(n){this.a=n}function qw(n){this.a=n}function Gw(n){this.a=n}function zw(n){this.a=n}function Uw(n){this.a=n}function Xw(n){this.a=n}function Ww(n){this.a=n}function Vw(n){this.a=n}function Qw(n){this.a=n}function Yw(n){this.a=n}function Jw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function ud(n){this.a=n}function od(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function vd(n){this.a=n}function md(n){this.a=n}function yd(n){this.a=n}function kd(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Td(n){this.a=n}function Md(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Id(n){this.a=n}function Cd(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function $d(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function xd(n){this.a=n}function Dd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function _d(n){this.a=n}function Fd(n){this.a=n}function Bd(n){this.c=n}function Hd(n){this.b=n}function qd(n){this.a=n}function Gd(n){this.a=n}function zd(n){this.a=n}function Ud(n){this.a=n}function Xd(n){this.a=n}function Wd(n){this.a=n}function Vd(n){this.a=n}function Qd(n){this.a=n}function Yd(n){this.a=n}function Jd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function ug(n){this.a=n}function og(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function vg(n){this.a=n}function mg(n){this.a=n}function yg(n){this.a=n}function kg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Tg(n){this.a=n}function Mg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Ig(n){this.a=n}function Cg(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function $g(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function xg(n){this.a=n}function Dg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function _g(n){this.a=n}function Fg(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function qg(n){this.a=n}function Gg(n){this.a=n}function zg(n){this.a=n}function Ug(n){this.a=n}function Xg(n){this.a=n}function Wg(n){this.a=n}function Vg(n){this.a=n}function Qg(n){this.a=n}function Yg(n){this.a=n}function Jg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function up(n){this.b=n}function op(n){this.f=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function vp(n){this.a=n}function mp(n){this.a=n}function yp(n){this.b=n}function kp(n){this.c=n}function jp(n){this.e=n}function Ep(n){this.a=n}function Tp(n){this.a=n}function Mp(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Ip(n){this.d=n}function Cp(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.e=n}function $p(){this.a=0}function Lp(){DA(this)}function Np(){xA(this)}function xp(){$U(this)}function Dp(){wV(this)}function Rp(){_h(this)}function Kp(){this.c=L$t}function _p(n,t){t.Wb(n)}function Fp(n,t){n.b+=t}function Bp(n){n.b=new ok}function Hp(n){return n.e}function qp(n){return n.a}function Gp(n){return n.a}function zp(n){return n.a}function Up(n){return n.a}function Xp(n){return n.a}function Wp(){return null}function Vp(){return null}function Qp(){aE(),dXn()}function Yp(n){n.b.tf(n.e)}function Jp(n,t){n.b=t-n.b}function Zp(n,t){n.a=t-n.a}function nv(n,t){t.ad(n.a)}function tv(n,t){qIn(t,n)}function ev(n,t,e){n.Od(e,t)}function iv(n,t){n.e=t,t.b=n}function rv(n){s_(),this.a=n}function cv(n){s_(),this.a=n}function av(n){s_(),this.a=n}function uv(n){WX(),this.a=n}function ov(n){PY(),ett.be(n)}function sv(){gN.call(this)}function hv(){gN.call(this)}function fv(){sv.call(this)}function lv(){sv.call(this)}function bv(){sv.call(this)}function wv(){sv.call(this)}function dv(){sv.call(this)}function gv(){sv.call(this)}function pv(){sv.call(this)}function vv(){sv.call(this)}function mv(){sv.call(this)}function yv(){sv.call(this)}function kv(){sv.call(this)}function jv(){this.a=this}function Ev(){this.Bb|=256}function Tv(){this.b=new PO}function Mv(){Mv=O,new xp}function Sv(){fv.call(this)}function Pv(n,t){n.length=t}function Iv(n,t){WB(n.a,t)}function Cv(n,t){USn(n.c,t)}function Ov(n,t){TU(n.b,t)}function Av(n,t){Cvn(n.a,t)}function $v(n,t){Oln(n.a,t)}function Lv(n,t){ban(n.e,t)}function Nv(n){AOn(n.c,n.b)}function xv(n,t){n.kc().Nb(t)}function Dv(n){this.a=gbn(n)}function Rv(){this.a=new xp}function Kv(){this.a=new xp}function _v(){this.a=new Np}function Fv(){this.a=new Np}function Bv(){this.a=new Np}function Hv(){this.a=new kn}function qv(){this.a=new k6}function Gv(){this.a=new bt}function zv(){this.a=new WT}function Uv(){this.a=new D0}function Xv(){this.a=new cZ}function Wv(){this.a=new AR}function Vv(){this.a=new Np}function Qv(){this.a=new Np}function Yv(){this.a=new Np}function Jv(){this.a=new Np}function Zv(){this.d=new Np}function nm(){this.a=new Rv}function tm(){this.a=new xp}function em(){this.b=new xp}function im(){this.b=new Np}function rm(){this.e=new Np}function cm(){this.d=new Np}function am(){this.a=new uf}function um(){Np.call(this)}function om(){_v.call(this)}function sm(){NR.call(this)}function hm(){Qv.call(this)}function fm(){lm.call(this)}function lm(){Rp.call(this)}function bm(){Rp.call(this)}function wm(){bm.call(this)}function dm(){dY.call(this)}function gm(){dY.call(this)}function pm(){Wm.call(this)}function vm(){Wm.call(this)}function mm(){Wm.call(this)}function ym(){Vm.call(this)}function km(){YT.call(this)}function jm(){eo.call(this)}function Em(){eo.call(this)}function Tm(){ny.call(this)}function Mm(){ny.call(this)}function Sm(){xp.call(this)}function Pm(){xp.call(this)}function Im(){xp.call(this)}function Cm(){Rv.call(this)}function Om(){jin.call(this)}function Am(){Ev.call(this)}function $m(){OL.call(this)}function Lm(){OL.call(this)}function Nm(){xp.call(this)}function xm(){xp.call(this)}function Dm(){xp.call(this)}function Rm(){yo.call(this)}function Km(){yo.call(this)}function _m(){Rm.call(this)}function Fm(){Dh.call(this)}function Bm(n){dtn.call(this,n)}function Hm(n){dtn.call(this,n)}function qm(n){Qf.call(this,n)}function Gm(n){MT.call(this,n)}function zm(n){Gm.call(this,n)}function Um(n){MT.call(this,n)}function Xm(){this.a=new YT}function Wm(){this.a=new Rv}function Vm(){this.a=new xp}function Qm(){this.a=new Np}function Ym(){this.j=new Np}function Jm(){this.a=new Xa}function Zm(){this.a=new LE}function ny(){this.a=new mo}function ty(){ty=O,_nt=new xk}function ey(){ey=O,Knt=new Nk}function iy(){iy=O,Ont=new c}function ry(){ry=O,znt=new cN}function cy(n){Gm.call(this,n)}function ay(n){Gm.call(this,n)}function uy(n){d4.call(this,n)}function oy(n){d4.call(this,n)}function sy(n){VK.call(this,n)}function hy(n){ySn.call(this,n)}function fy(n){IT.call(this,n)}function ly(n){OT.call(this,n)}function by(n){OT.call(this,n)}function wy(n){OT.call(this,n)}function dy(n){fz.call(this,n)}function gy(n){dy.call(this,n)}function py(){Pl.call(this,{})}function vy(n){IL(),this.a=n}function my(n){n.b=null,n.c=0}function yy(n,t){n.e=t,Ixn(n,t)}function ky(n,t){n.a=t,aIn(n)}function jy(n,t,e){n.a[t.g]=e}function Ey(n,t,e){wjn(e,n,t)}function Ty(n,t){ZR(t.i,n.n)}function My(n,t){ssn(n).td(t)}function Sy(n,t){return n*n/t}function Py(n,t){return n.g-t.g}function Iy(n){return new Sl(n)}function Cy(n){return new GX(n)}function Oy(n){dy.call(this,n)}function Ay(n){dy.call(this,n)}function $y(n){dy.call(this,n)}function Ly(n){fz.call(this,n)}function Ny(n){_cn(),this.a=n}function xy(n){a_(),this.a=n}function Dy(n){FG(),this.f=n}function Ry(n){FG(),this.f=n}function Ky(n){dy.call(this,n)}function _y(n){dy.call(this,n)}function Fy(n){dy.call(this,n)}function By(n){dy.call(this,n)}function Hy(n){dy.call(this,n)}function qy(n){return kW(n),n}function Gy(n){return kW(n),n}function zy(n){return kW(n),n}function Uy(n){return kW(n),n}function Xy(n){return kW(n),n}function Wy(n){return n.b==n.c}function Vy(n){return!!n&&n.b}function Qy(n){return!!n&&n.k}function Yy(n){return!!n&&n.j}function Jy(n){kW(n),this.a=n}function Zy(n){return Zon(n),n}function nk(n){vU(n,n.length)}function tk(n){dy.call(this,n)}function ek(n){dy.call(this,n)}function ik(n){dy.call(this,n)}function rk(n){dy.call(this,n)}function ck(n){dy.call(this,n)}function ak(n){dy.call(this,n)}function uk(n){ZN.call(this,n,0)}function ok(){o1.call(this,12,3)}function sk(){sk=O,ttt=new j}function hk(){hk=O,Ynt=new r}function fk(){fk=O,rtt=new g}function lk(){lk=O,htt=new v}function bk(){throw Hp(new pv)}function wk(){throw Hp(new pv)}function dk(){throw Hp(new pv)}function gk(){throw Hp(new pv)}function pk(){throw Hp(new pv)}function vk(){throw Hp(new pv)}function mk(){this.a=SD(yX(FWn))}function yk(n){s_(),this.a=yX(n)}function kk(n,t){n.Td(t),t.Sd(n)}function jk(n,t){n.a.ec().Mc(t)}function Ek(n,t,e){n.c.lf(t,e)}function Tk(n){Ay.call(this,n)}function Mk(n){_y.call(this,n)}function Sk(){Ab.call(this,"")}function Pk(){Ab.call(this,"")}function Ik(){Ab.call(this,"")}function Ck(){Ab.call(this,"")}function Ok(n){Ay.call(this,n)}function Ak(n){Hb.call(this,n)}function $k(n){bN.call(this,n)}function Lk(n){Ak.call(this,n)}function Nk(){tl.call(this,null)}function xk(){tl.call(this,null)}function Dk(){Dk=O,PY()}function Rk(){Rk=O,ket=mEn()}function Kk(n){return n.a?n.b:0}function _k(n){return n.a?n.b:0}function Fk(n,t){return n.a-t.a}function Bk(n,t){return n.a-t.a}function Hk(n,t){return n.a-t.a}function qk(n,t){return m7(n,t)}function Gk(n,t){return gZ(n,t)}function zk(n,t){return t in n.a}function Uk(n,t){return n.f=t,n}function Xk(n,t){return n.b=t,n}function Wk(n,t){return n.c=t,n}function Vk(n,t){return n.g=t,n}function Qk(n,t){return n.a=t,n}function Yk(n,t){return n.f=t,n}function Jk(n,t){return n.k=t,n}function Zk(n,t){return n.a=t,n}function nj(n,t){return n.e=t,n}function tj(n,t){return n.e=t,n}function ej(n,t){return n.f=t,n}function ij(n,t){n.b=!0,n.d=t}function rj(n,t){n.b=new wA(t)}function cj(n,t,e){t.td(n.a[e])}function aj(n,t,e){t.we(n.a[e])}function uj(n,t){return n.b-t.b}function oj(n,t){return n.g-t.g}function sj(n,t){return n.s-t.s}function hj(n,t){return n?0:t-1}function fj(n,t){return n?0:t-1}function lj(n,t){return n?t-1:0}function bj(n,t){return t.Yf(n)}function wj(n,t){return n.b=t,n}function dj(n,t){return n.a=t,n}function gj(n,t){return n.c=t,n}function pj(n,t){return n.d=t,n}function vj(n,t){return n.e=t,n}function mj(n,t){return n.f=t,n}function yj(n,t){return n.a=t,n}function kj(n,t){return n.b=t,n}function jj(n,t){return n.c=t,n}function Ej(n,t){return n.c=t,n}function Tj(n,t){return n.b=t,n}function Mj(n,t){return n.d=t,n}function Sj(n,t){return n.e=t,n}function Pj(n,t){return n.f=t,n}function Ij(n,t){return n.g=t,n}function Cj(n,t){return n.a=t,n}function Oj(n,t){return n.i=t,n}function Aj(n,t){return n.j=t,n}function $j(n,t){return n.k=t,n}function Lj(n,t){return n.j=t,n}function Nj(n,t){_Mn(),IZ(t,n)}function xj(n,t,e){GG(n.a,t,e)}function Dj(n){BV.call(this,n)}function Rj(n){BV.call(this,n)}function Kj(n){n_.call(this,n)}function _j(n){qbn.call(this,n)}function Fj(n){gtn.call(this,n)}function Bj(n){pQ.call(this,n)}function Hj(n){pQ.call(this,n)}function qj(){O$.call(this,"")}function Gj(){this.a=0,this.b=0}function zj(){this.b=0,this.a=0}function Uj(n,t){n.b=0,Nen(n,t)}function Xj(n,t){n.c=t,n.b=!0}function Wj(n,t){return n.c._b(t)}function Vj(n){return n.e&&n.e()}function Qj(n){return n?n.d:null}function Yj(n,t){return gfn(n.b,t)}function Jj(n){return n?n.g:null}function Zj(n){return n?n.i:null}function nE(n){return ED(n),n.o}function tE(){tE=O,dOt=Xkn()}function eE(){eE=O,gOt=oTn()}function iE(){iE=O,n$t=Vkn()}function rE(){rE=O,dLt=Wkn()}function cE(){cE=O,gLt=iIn()}function aE(){aE=O,lAt=cin()}function uE(){throw Hp(new pv)}function oE(){throw Hp(new pv)}function sE(){throw Hp(new pv)}function hE(){throw Hp(new pv)}function fE(){throw Hp(new pv)}function lE(){throw Hp(new pv)}function bE(n){this.a=new XT(n)}function wE(n){lUn(),DXn(this,n)}function dE(n){this.a=new Wz(n)}function gE(n,t){for(;n.ye(t););}function pE(n,t){for(;n.sd(t););}function vE(n,t){return n.a+=t,n}function mE(n,t){return n.a+=t,n}function yE(n,t){return n.a+=t,n}function kE(n,t){return n.a+=t,n}function jE(n){return EW(n),n.a}function EE(n){return n.b!=n.d.c}function TE(n){return n.l|n.m<<22}function ME(n,t){return n.d[t.p]}function SE(n,t){return Sxn(n,t)}function PE(n,t,e){n.splice(t,e)}function IE(n){n.c?NDn(n):xDn(n)}function CE(n){this.a=0,this.b=n}function OE(){this.a=new INn(ijt)}function AE(){this.b=new INn(qyt)}function $E(){this.b=new INn(WEt)}function LE(){this.b=new INn(WEt)}function NE(){throw Hp(new pv)}function xE(){throw Hp(new pv)}function DE(){throw Hp(new pv)}function RE(){throw Hp(new pv)}function KE(){throw Hp(new pv)}function _E(){throw Hp(new pv)}function FE(){throw Hp(new pv)}function BE(){throw Hp(new pv)}function HE(){throw Hp(new pv)}function qE(){throw Hp(new pv)}function GE(){throw Hp(new yv)}function zE(){throw Hp(new yv)}function UE(n){this.a=new XE(n)}function XE(n){Gin(this,n,OEn())}function WE(n){return!n||pW(n)}function VE(n){return-1!=WLt[n]}function QE(){0!=ctt&&(ctt=0),utt=-1}function YE(){null==PWn&&(PWn=[])}function JE(n,t){tAn(QQ(n.a),t)}function ZE(n,t){tAn(QQ(n.a),t)}function nT(n,t){HL.call(this,n,t)}function tT(n,t){nT.call(this,n,t)}function eT(n,t){this.b=n,this.c=t}function iT(n,t){this.b=n,this.a=t}function rT(n,t){this.a=n,this.b=t}function cT(n,t){this.a=n,this.b=t}function aT(n,t){this.a=n,this.b=t}function uT(n,t){this.a=n,this.b=t}function oT(n,t){this.a=n,this.b=t}function sT(n,t){this.a=n,this.b=t}function hT(n,t){this.a=n,this.b=t}function fT(n,t){this.a=n,this.b=t}function lT(n,t){this.b=n,this.a=t}function bT(n,t){this.b=n,this.a=t}function wT(n,t){this.b=n,this.a=t}function dT(n,t){this.b=n,this.a=t}function gT(n,t){this.f=n,this.g=t}function pT(n,t){this.e=n,this.d=t}function vT(n,t){this.g=n,this.i=t}function mT(n,t){this.a=n,this.b=t}function yT(n,t){this.a=n,this.f=t}function kT(n,t){this.b=n,this.c=t}function jT(n,t){this.a=n,this.b=t}function ET(n,t){this.a=n,this.b=t}function TT(n,t){this.a=n,this.b=t}function MT(n){aN(n.dc()),this.c=n}function ST(n){this.b=BB(yX(n),83)}function PT(n){this.a=BB(yX(n),83)}function IT(n){this.a=BB(yX(n),15)}function CT(n){this.a=BB(yX(n),15)}function OT(n){this.b=BB(yX(n),47)}function AT(){this.q=new e.Date}function $T(){$T=O,Btt=new A}function LT(){LT=O,bet=new P}function NT(n){return n.f.c+n.g.c}function xT(n,t){return n.b.Hc(t)}function DT(n,t){return n.b.Ic(t)}function RT(n,t){return n.b.Qc(t)}function KT(n,t){return n.b.Hc(t)}function _T(n,t){return n.c.uc(t)}function FT(n,t){return n.a._b(t)}function BT(n,t){return Nfn(n.c,t)}function HT(n,t){return hU(n.b,t)}function qT(n,t){return n>t&&t<OVn}function GT(n,t){return n.Gc(t),n}function zT(n,t){return Frn(n,t),n}function UT(n){return XX(),n?stt:ott}function XT(n){non.call(this,n,0)}function WT(){Wz.call(this,null)}function VT(){B8.call(this,null)}function QT(n){this.c=n,Ann(this)}function YT(){P$(this),yQ(this)}function JT(n,t){EW(n),n.a.Nb(t)}function ZT(n,t){return n.Gc(t),n}function nM(n,t){return n.a.f=t,n}function tM(n,t){return n.a.d=t,n}function eM(n,t){return n.a.g=t,n}function iM(n,t){return n.a.j=t,n}function rM(n,t){return n.a.a=t,n}function cM(n,t){return n.a.d=t,n}function aM(n,t){return n.a.e=t,n}function uM(n,t){return n.a.g=t,n}function oM(n,t){return n.a.f=t,n}function sM(n){return n.b=!1,n}function hM(){hM=O,Pet=new IO}function fM(){fM=O,Iet=new CO}function lM(){lM=O,Het=new U}function bM(){bM=O,vut=new Kt}function wM(){wM=O,rct=new Cx}function dM(){dM=O,tit=new hn}function gM(){gM=O,kut=new _t}function pM(){pM=O,sit=new dn}function vM(){vM=O,Gat=new yt}function mM(){mM=O,Fut=new Gj}function yM(){yM=O,zat=new Pt}function kM(){kM=O,Vat=new DG}function jM(){jM=O,hut=new Mt}function EM(){EM=O,But=new be}function TM(){TM=O,nst=new Ye}function MM(){MM=O,wst=new Lr}function SM(){SM=O,Qst=new rc}function PM(){PM=O,Wkt=new B2}function IM(){IM=O,XEt=new LM}function CM(){CM=O,QEt=new vD}function OM(){OM=O,GTt=new XW}function AM(){AM=O,Wpt=new Wu}function $M(){Sin(),this.c=new ok}function LM(){gT.call(this,H1n,0)}function NM(n,t){Jgn(n.c.b,t.c,t)}function xM(n,t){Jgn(n.c.c,t.b,t)}function DM(n,t,e){mZ(n.d,t.f,e)}function RM(n,t,e,i){Jpn(n,i,t,e)}function KM(n,t,e,i){uNn(i,n,t,e)}function _M(n,t,e,i){oUn(i,n,t,e)}function FM(n,t){return n.a=t.g,n}function BM(n,t){return ekn(n.a,t)}function HM(n){return n.b?n.b:n.a}function qM(n){return(n.c+n.a)/2}function GM(){GM=O,lOt=new to}function zM(){zM=O,IOt=new ho}function UM(){UM=O,RAt=new Pm}function XM(){XM=O,UAt=new Im}function WM(){WM=O,zAt=new Nm}function VM(){VM=O,ZAt=new Dm}function QM(){QM=O,N$t=new z$}function YM(){YM=O,x$t=new U$}function JM(){JM=O,rLt=new Ns}function ZM(){ZM=O,aLt=new xs}function nS(){nS=O,mAt=new xp}function tS(){tS=O,V$t=new Np}function eS(){eS=O,MNt=new Kh}function iS(n){e.clearTimeout(n)}function rS(n){this.a=BB(yX(n),224)}function cS(n){return BB(n,42).cd()}function aS(n){return n.b<n.d.gc()}function uS(n,t){return IG(n.a,t)}function oS(n,t){return Vhn(n,t)>0}function sS(n,t){return Vhn(n,t)<0}function hS(n,t){return n.a.get(t)}function fS(n,t){return t.split(n)}function lS(n,t){return hU(n.e,t)}function bS(n){return kW(n),!1}function wS(n){w1.call(this,n,21)}function dS(n,t){_J.call(this,n,t)}function gS(n,t){gT.call(this,n,t)}function pS(n,t){gT.call(this,n,t)}function vS(n){VX(),VK.call(this,n)}function mS(n,t){jG(n,n.length,t)}function yS(n,t){QU(n,n.length,t)}function kS(n,t,e){t.ud(n.a.Ge(e))}function jS(n,t,e){t.we(n.a.Fe(e))}function ES(n,t,e){t.td(n.a.Kb(e))}function TS(n,t,e){n.Mb(e)&&t.td(e)}function MS(n,t,e){n.splice(t,0,e)}function SS(n,t){return SN(n.e,t)}function PS(n,t){this.d=n,this.e=t}function IS(n,t){this.b=n,this.a=t}function CS(n,t){this.b=n,this.a=t}function OS(n,t){this.b=n,this.a=t}function AS(n,t){this.a=n,this.b=t}function $S(n,t){this.a=n,this.b=t}function LS(n,t){this.a=n,this.b=t}function NS(n,t){this.a=n,this.b=t}function xS(n,t){this.a=n,this.b=t}function DS(n,t){this.b=n,this.a=t}function RS(n,t){this.b=n,this.a=t}function KS(n,t){gT.call(this,n,t)}function _S(n,t){gT.call(this,n,t)}function FS(n,t){gT.call(this,n,t)}function BS(n,t){gT.call(this,n,t)}function HS(n,t){gT.call(this,n,t)}function qS(n,t){gT.call(this,n,t)}function GS(n,t){gT.call(this,n,t)}function zS(n,t){gT.call(this,n,t)}function US(n,t){gT.call(this,n,t)}function XS(n,t){gT.call(this,n,t)}function WS(n,t){gT.call(this,n,t)}function VS(n,t){gT.call(this,n,t)}function QS(n,t){gT.call(this,n,t)}function YS(n,t){gT.call(this,n,t)}function JS(n,t){gT.call(this,n,t)}function ZS(n,t){gT.call(this,n,t)}function nP(n,t){gT.call(this,n,t)}function tP(n,t){gT.call(this,n,t)}function eP(n,t){this.a=n,this.b=t}function iP(n,t){this.a=n,this.b=t}function rP(n,t){this.a=n,this.b=t}function cP(n,t){this.a=n,this.b=t}function aP(n,t){this.a=n,this.b=t}function uP(n,t){this.a=n,this.b=t}function oP(n,t){this.a=n,this.b=t}function sP(n,t){this.a=n,this.b=t}function hP(n,t){this.a=n,this.b=t}function fP(n,t){this.b=n,this.a=t}function lP(n,t){this.b=n,this.a=t}function bP(n,t){this.b=n,this.a=t}function wP(n,t){this.b=n,this.a=t}function dP(n,t){this.c=n,this.d=t}function gP(n,t){this.e=n,this.d=t}function pP(n,t){this.a=n,this.b=t}function vP(n,t){this.b=t,this.c=n}function mP(n,t){gT.call(this,n,t)}function yP(n,t){gT.call(this,n,t)}function kP(n,t){gT.call(this,n,t)}function jP(n,t){gT.call(this,n,t)}function EP(n,t){gT.call(this,n,t)}function TP(n,t){gT.call(this,n,t)}function MP(n,t){gT.call(this,n,t)}function SP(n,t){gT.call(this,n,t)}function PP(n,t){gT.call(this,n,t)}function IP(n,t){gT.call(this,n,t)}function CP(n,t){gT.call(this,n,t)}function OP(n,t){gT.call(this,n,t)}function AP(n,t){gT.call(this,n,t)}function $P(n,t){gT.call(this,n,t)}function LP(n,t){gT.call(this,n,t)}function NP(n,t){gT.call(this,n,t)}function xP(n,t){gT.call(this,n,t)}function DP(n,t){gT.call(this,n,t)}function RP(n,t){gT.call(this,n,t)}function KP(n,t){gT.call(this,n,t)}function _P(n,t){gT.call(this,n,t)}function FP(n,t){gT.call(this,n,t)}function BP(n,t){gT.call(this,n,t)}function HP(n,t){gT.call(this,n,t)}function qP(n,t){gT.call(this,n,t)}function GP(n,t){gT.call(this,n,t)}function zP(n,t){gT.call(this,n,t)}function UP(n,t){gT.call(this,n,t)}function XP(n,t){gT.call(this,n,t)}function WP(n,t){gT.call(this,n,t)}function VP(n,t){gT.call(this,n,t)}function QP(n,t){gT.call(this,n,t)}function YP(n,t){gT.call(this,n,t)}function JP(n,t){gT.call(this,n,t)}function ZP(n,t){this.b=n,this.a=t}function nI(n,t){this.a=n,this.b=t}function tI(n,t){this.a=n,this.b=t}function eI(n,t){this.a=n,this.b=t}function iI(n,t){this.a=n,this.b=t}function rI(n,t){gT.call(this,n,t)}function cI(n,t){gT.call(this,n,t)}function aI(n,t){this.b=n,this.d=t}function uI(n,t){gT.call(this,n,t)}function oI(n,t){gT.call(this,n,t)}function sI(n,t){this.a=n,this.b=t}function hI(n,t){this.a=n,this.b=t}function fI(n,t){gT.call(this,n,t)}function lI(n,t){gT.call(this,n,t)}function bI(n,t){gT.call(this,n,t)}function wI(n,t){gT.call(this,n,t)}function dI(n,t){gT.call(this,n,t)}function gI(n,t){gT.call(this,n,t)}function pI(n,t){gT.call(this,n,t)}function vI(n,t){gT.call(this,n,t)}function mI(n,t){gT.call(this,n,t)}function yI(n,t){gT.call(this,n,t)}function kI(n,t){gT.call(this,n,t)}function jI(n,t){gT.call(this,n,t)}function EI(n,t){gT.call(this,n,t)}function TI(n,t){gT.call(this,n,t)}function MI(n,t){gT.call(this,n,t)}function SI(n,t){gT.call(this,n,t)}function PI(n,t){return SN(n.c,t)}function II(n,t){return SN(t.b,n)}function CI(n,t){return-n.b.Je(t)}function OI(n,t){return SN(n.g,t)}function AI(n,t){gT.call(this,n,t)}function $I(n,t){gT.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){this.a=n,this.b=t}function xI(n,t){this.a=n,this.b=t}function DI(n,t){gT.call(this,n,t)}function RI(n,t){gT.call(this,n,t)}function KI(n,t){gT.call(this,n,t)}function _I(n,t){gT.call(this,n,t)}function FI(n,t){gT.call(this,n,t)}function BI(n,t){gT.call(this,n,t)}function HI(n,t){gT.call(this,n,t)}function qI(n,t){gT.call(this,n,t)}function GI(n,t){gT.call(this,n,t)}function zI(n,t){gT.call(this,n,t)}function UI(n,t){gT.call(this,n,t)}function XI(n,t){gT.call(this,n,t)}function WI(n,t){gT.call(this,n,t)}function VI(n,t){gT.call(this,n,t)}function QI(n,t){gT.call(this,n,t)}function YI(n,t){gT.call(this,n,t)}function JI(n,t){this.a=n,this.b=t}function ZI(n,t){this.a=n,this.b=t}function nC(n,t){this.a=n,this.b=t}function tC(n,t){this.a=n,this.b=t}function eC(n,t){this.a=n,this.b=t}function iC(n,t){this.a=n,this.b=t}function rC(n,t){this.a=n,this.b=t}function cC(n,t){gT.call(this,n,t)}function aC(n,t){this.a=n,this.b=t}function uC(n,t){this.a=n,this.b=t}function oC(n,t){this.a=n,this.b=t}function sC(n,t){this.a=n,this.b=t}function hC(n,t){this.a=n,this.b=t}function fC(n,t){this.a=n,this.b=t}function lC(n,t){this.b=n,this.a=t}function bC(n,t){this.b=n,this.a=t}function wC(n,t){this.b=n,this.a=t}function dC(n,t){this.b=n,this.a=t}function gC(n,t){this.a=n,this.b=t}function pC(n,t){this.a=n,this.b=t}function vC(n,t){JLn(n.a,BB(t,56))}function mC(n,t){v7(n.a,BB(t,11))}function yC(n,t){return hH(),t!=n}function kC(){return Rk(),new ket}function jC(){qZ(),this.b=new Rv}function EC(){dxn(),this.a=new Rv}function TC(){KZ(),KG.call(this)}function MC(n,t){gT.call(this,n,t)}function SC(n,t){this.a=n,this.b=t}function PC(n,t){this.a=n,this.b=t}function IC(n,t){this.a=n,this.b=t}function CC(n,t){this.a=n,this.b=t}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function $C(n,t){this.d=n,this.b=t}function LC(n,t){this.d=n,this.e=t}function NC(n,t){this.f=n,this.c=t}function xC(n,t){this.b=n,this.c=t}function DC(n,t){this.i=n,this.g=t}function RC(n,t){this.e=n,this.a=t}function KC(n,t){this.a=n,this.b=t}function _C(n,t){n.i=null,arn(n,t)}function FC(n,t){n&&VW(hAt,n,t)}function BC(n,t){return rdn(n.a,t)}function HC(n){return adn(n.c,n.b)}function qC(n){return n?n.dd():null}function GC(n){return null==n?null:n}function zC(n){return typeof n===$Wn}function UC(n){return typeof n===LWn}function XC(n){return typeof n===NWn}function WC(n,t){return n.Hd().Xb(t)}function VC(n,t){return Qcn(n.Kc(),t)}function QC(n,t){return 0==Vhn(n,t)}function YC(n,t){return Vhn(n,t)>=0}function JC(n,t){return 0!=Vhn(n,t)}function ZC(n){return""+(kW(n),n)}function nO(n,t){return n.substr(t)}function tO(n){return zbn(n),n.d.gc()}function eO(n){return zOn(n,n.c),n}function iO(n){return JH(null==n),n}function rO(n,t){return n.a+=""+t,n}function cO(n,t){return n.a+=""+t,n}function aO(n,t){return n.a+=""+t,n}function uO(n,t){return n.a+=""+t,n}function oO(n,t){return n.a+=""+t,n}function sO(n,t){return n.a+=""+t,n}function hO(n,t){r5(n,t,n.a,n.a.a)}function fO(n,t){r5(n,t,n.c.b,n.c)}function lO(n,t,e){Kjn(t,RPn(n,e))}function bO(n,t,e){Kjn(t,RPn(n,e))}function wO(n,t){Tnn(new AL(n),t)}function dO(n,t){n.q.setTime(j2(t))}function gO(n,t){zz.call(this,n,t)}function pO(n,t){zz.call(this,n,t)}function vO(n,t){zz.call(this,n,t)}function mO(n){$U(this),Tcn(this,n)}function yO(n){return l1(n,0),null}function kO(n){return n.a=0,n.b=0,n}function jO(n,t){return n.a=t.g+1,n}function EO(n,t){return 2==n.j[t.p]}function TO(n){return sX(BB(n,79))}function MO(){MO=O,Art=lhn(tpn())}function SO(){SO=O,Zot=lhn(ENn())}function PO(){this.b=new XT(etn(12))}function IO(){this.b=0,this.a=!1}function CO(){this.b=0,this.a=!1}function OO(n){this.a=n,Bh.call(this)}function AO(n){this.a=n,Bh.call(this)}function $O(n,t){iR.call(this,n,t)}function LO(n,t){tK.call(this,n,t)}function NO(n,t){DC.call(this,n,t)}function xO(n,t){Aan.call(this,n,t)}function DO(n,t){QN.call(this,n,t)}function RO(n,t){nS(),VW(mAt,n,t)}function KO(n,t){return fx(n.a,0,t)}function _O(n,t){return n.a.a.a.cc(t)}function FO(n,t){return GC(n)===GC(t)}function BO(n,t){return Pln(n.a,t.a)}function HO(n,t){return E$(n.a,t.a)}function qO(n,t){return FU(n.a,t.a)}function GO(n,t){return n.indexOf(t)}function zO(n,t){return n==t?0:n?1:-1}function UO(n){return n<10?"0"+n:""+n}function XO(n){return yX(n),new OO(n)}function WO(n){return M$(n.l,n.m,n.h)}function VO(n){return IJ((kW(n),n))}function QO(n){return IJ((kW(n),n))}function YO(n,t){return E$(n.g,t.g)}function JO(n){return typeof n===LWn}function ZO(n){return n==Zat||n==eut}function nA(n){return n==Zat||n==nut}function tA(n){return E7(n.b.b,n,0)}function eA(n){this.a=kC(),this.b=n}function iA(n){this.a=kC(),this.b=n}function rA(n,t){return WB(n.a,t),t}function cA(n,t){return WB(n.c,t),n}function aA(n,t){return Jcn(n.a,t),n}function uA(n,t){return G_(),t.a+=n}function oA(n,t){return G_(),t.a+=n}function sA(n,t){return G_(),t.c+=n}function hA(n,t){z9(n,0,n.length,t)}function fA(){ew.call(this,new v4)}function lA(){uG.call(this,0,0,0,0)}function bA(){UV.call(this,0,0,0,0)}function wA(n){this.a=n.a,this.b=n.b}function dA(n){return n==_Pt||n==FPt}function gA(n){return n==HPt||n==KPt}function pA(n){return n==fvt||n==hvt}function vA(n){return n!=QIt&&n!=YIt}function mA(n){return n.Lg()&&n.Mg()}function yA(n){return mV(BB(n,118))}function kA(n){return Jcn(new B2,n)}function jA(n,t){return new Aan(t,n)}function EA(n,t){return new Aan(t,n)}function TA(n,t,e){jen(n,t),Een(n,e)}function MA(n,t,e){Sen(n,t),Men(n,e)}function SA(n,t,e){Pen(n,t),Ien(n,e)}function PA(n,t,e){Ten(n,t),Oen(n,e)}function IA(n,t,e){Cen(n,t),Aen(n,e)}function CA(n,t){Dsn(n,t),xen(n,n.D)}function OA(n){NC.call(this,n,!0)}function AA(n,t,e){ND.call(this,n,t,e)}function $A(n){ODn(),san.call(this,n)}function LA(){gS.call(this,"Head",1)}function NA(){gS.call(this,"Tail",3)}function xA(n){n.c=x8(Ant,HWn,1,0,5,1)}function DA(n){n.a=x8(Ant,HWn,1,8,5,1)}function RA(n){Otn(n.xf(),new Sw(n))}function KA(n){return null!=n?nsn(n):0}function _A(n,t){return Itn(t,WJ(n))}function FA(n,t){return Itn(t,WJ(n))}function BA(n,t){return n[n.length]=t}function HA(n,t){return n[n.length]=t}function qA(n){return FB(n.b.Kc(),n.a)}function GA(n,t){return Uin(PX(n.d),t)}function zA(n,t){return Uin(PX(n.g),t)}function UA(n,t){return Uin(PX(n.j),t)}function XA(n,t){iR.call(this,n.b,t)}function WA(n){uG.call(this,n,n,n,n)}function VA(n){return n.b&&VBn(n),n.a}function QA(n){return n.b&&VBn(n),n.c}function YA(n,t){Qet||(n.b=t)}function JA(n,t,e){return $X(n,t,e),e}function ZA(n,t,e){$X(n.c[t.g],t.g,e)}function n$(n,t,e){BB(n.c,69).Xh(t,e)}function t$(n,t,e){SA(e,e.i+n,e.j+t)}function e$(n,t){f9(a4(n.a),e1(t))}function i$(n,t){f9(H7(n.a),i1(t))}function r$(n){wWn(),Ap.call(this,n)}function c$(n){return null==n?0:nsn(n)}function a$(){a$=O,syt=new Hbn(oIt)}function u$(){u$=O,new o$,new Np}function o$(){new xp,new xp,new xp}function s$(){s$=O,Mv(),itt=new xp}function h$(){h$=O,e.Math.log(2)}function f$(){f$=O,zM(),R$t=IOt}function l$(){throw Hp(new tk(Tnt))}function b$(){throw Hp(new tk(Tnt))}function w$(){throw Hp(new tk(Mnt))}function d$(){throw Hp(new tk(Mnt))}function g$(n){this.a=n,QB.call(this,n)}function p$(n){this.a=n,ST.call(this,n)}function v$(n){this.a=n,ST.call(this,n)}function m$(n,t){yG(n.c,n.c.length,t)}function y$(n){return n.a<n.c.c.length}function k$(n){return n.a<n.c.a.length}function j$(n,t){return n.a?n.b:t.De()}function E$(n,t){return n<t?-1:n>t?1:0}function T$(n,t){return Vhn(n,t)>0?n:t}function M$(n,t,e){return{l:n,m:t,h:e}}function S$(n,t){null!=n.a&&mC(t,n.a)}function P$(n){n.a=new $,n.c=new $}function I$(n){this.b=n,this.a=new Np}function C$(n){this.b=new et,this.a=n}function O$(n){LR.call(this),this.a=n}function A$(){gS.call(this,"Range",2)}function $$(){tjn(),this.a=new INn(Uat)}function L$(n,t){yX(t),EV(n).Jc(new b)}function N$(n,t){return BZ(),t.n.b+=n}function x$(n,t,e){return VW(n.g,e,t)}function D$(n,t,e){return VW(n.k,e,t)}function R$(n,t){return VW(n.a,t.a,t)}function K$(n,t,e){return Cdn(t,e,n.c)}function _$(n){return new xI(n.c,n.d)}function F$(n){return new xI(n.c,n.d)}function B$(n){return new xI(n.a,n.b)}function H$(n,t){return tzn(n.a,t,null)}function q$(n){SZ(n,null),MZ(n,null)}function G$(n){WZ(n,null),VZ(n,null)}function z$(){QN.call(this,null,null)}function U$(){YN.call(this,null,null)}function X$(n){this.a=n,xp.call(this)}function W$(n){this.b=(SQ(),new Xb(n))}function V$(n){n.j=x8(Ftt,sVn,310,0,0,1)}function Q$(n,t,e){n.c.Vc(t,BB(e,133))}function Y$(n,t,e){n.c.ji(t,BB(e,133))}function J$(n,t){sqn(n),n.Gc(BB(t,15))}function Z$(n,t){return Bqn(n.c,n.b,t)}function nL(n,t){return new pN(n.Kc(),t)}function tL(n,t){return-1!=Fun(n.Kc(),t)}function eL(n,t){return null!=n.a.Bc(t)}function iL(n){return n.Ob()?n.Pb():null}function rL(n){return Bdn(n,0,n.length)}function cL(n,t){return null!=n&&Qpn(n,t)}function aL(n,t){n.q.setHours(t),lBn(n,t)}function uL(n,t){n.c&&(RH(t),kJ(t))}function oL(n,t,e){BB(n.Kb(e),164).Nb(t)}function sL(n,t,e){return HGn(n,t,e),e}function hL(n,t,e){n.a=1502^t,n.b=e^aYn}function fL(n,t,e){return n.a[t.g][e.g]}function lL(n,t){return n.a[t.c.p][t.p]}function bL(n,t){return n.e[t.c.p][t.p]}function wL(n,t){return n.c[t.c.p][t.p]}function dL(n,t){return n.j[t.p]=pLn(t)}function gL(n,t){return f6(n.f,t.tg())}function pL(n,t){return f6(n.b,t.tg())}function vL(n,t){return n.a<XK(t)?-1:1}function mL(n,t,e){return e?0!=t:t!=n-1}function yL(n,t,e){return n.a=t,n.b=e,n}function kL(n,t){return n.a*=t,n.b*=t,n}function jL(n,t,e){return $X(n.g,t,e),e}function EL(n,t,e,i){$X(n.a[t.g],e.g,i)}function TL(n,t){_x(t,n.a.a.a,n.a.a.b)}function ML(n){n.a=BB(yan(n.b.a,4),126)}function SL(n){n.a=BB(yan(n.b.a,4),126)}function PL(n){OY(n,i8n),HLn(n,CUn(n))}function IL(){IL=O,Set=new vy(null)}function CL(){(CL=O)(),$et=new z}function OL(){this.Bb|=256,this.Bb|=512}function AL(n){this.i=n,this.f=this.i.j}function $L(n,t,e){yH.call(this,n,t,e)}function LL(n,t,e){$L.call(this,n,t,e)}function NL(n,t,e){$L.call(this,n,t,e)}function xL(n,t,e){LL.call(this,n,t,e)}function DL(n,t,e){yH.call(this,n,t,e)}function RL(n,t,e){yH.call(this,n,t,e)}function KL(n,t,e){MH.call(this,n,t,e)}function _L(n,t,e){MH.call(this,n,t,e)}function FL(n,t,e){KL.call(this,n,t,e)}function BL(n,t,e){DL.call(this,n,t,e)}function HL(n,t){this.a=n,ST.call(this,t)}function qL(n,t){this.a=n,uk.call(this,t)}function GL(n,t){this.a=n,uk.call(this,t)}function zL(n,t){this.a=n,uk.call(this,t)}function UL(n){this.a=n,hl.call(this,n.d)}function XL(n){this.c=n,this.a=this.c.a}function WL(n,t){this.a=t,uk.call(this,n)}function VL(n,t){this.a=t,d4.call(this,n)}function QL(n,t){this.a=n,d4.call(this,t)}function YL(n,t){return wz(bz(n.c)).Xb(t)}function JL(n,t){return ebn(n,new Ik,t).a}function ZL(n,t){return yX(t),new nN(n,t)}function nN(n,t){this.a=t,OT.call(this,n)}function tN(n){this.b=n,this.a=this.b.a.e}function eN(n){n.b.Qb(),--n.d.f.d,$G(n.d)}function iN(n){tl.call(this,BB(yX(n),35))}function rN(n){tl.call(this,BB(yX(n),35))}function cN(){gT.call(this,"INSTANCE",0)}function aN(n){if(!n)throw Hp(new wv)}function uN(n){if(!n)throw Hp(new dv)}function oN(n){if(!n)throw Hp(new yv)}function sN(){sN=O,JM(),cLt=new Ff}function hN(){hN=O,ptt=!1,vtt=!0}function fN(n){Ab.call(this,(kW(n),n))}function lN(n){Ab.call(this,(kW(n),n))}function bN(n){Hb.call(this,n),this.a=n}function wN(n){qb.call(this,n),this.a=n}function dN(n){Ak.call(this,n),this.a=n}function gN(){V$(this),jQ(this),this._d()}function pN(n,t){this.a=t,OT.call(this,n)}function vN(n,t){return new KPn(n.a,n.b,t)}function mN(n,t){return n.lastIndexOf(t)}function yN(n,t,e){return n.indexOf(t,e)}function kN(n){return null==n?zWn:Bbn(n)}function jN(n){return null==n?null:n.name}function EN(n){return null!=n.a?n.a:null}function TN(n){return EE(n.a)?u1(n):null}function MN(n,t){return null!=$J(n.a,t)}function SN(n,t){return!!t&&n.b[t.g]==t}function PN(n){return n.$H||(n.$H=++cit)}function IN(n){return n.l+n.m*CQn+n.h*OQn}function CN(n,t){return WB(t.a,n.a),n.a}function ON(n,t){return WB(t.b,n.a),n.a}function AN(n,t){return WB(t.a,n.a),n.a}function $N(n){return Px(null!=n.a),n.a}function LN(n){ew.call(this,new q8(n))}function NN(n,t){Sgn.call(this,n,t,null)}function xN(n){this.a=n,Bb.call(this,n)}function DN(){DN=O,Lrt=new iR(dJn,0)}function RN(n,t){return++n.b,WB(n.a,t)}function KN(n,t){return++n.b,y7(n.a,t)}function _N(n,t){return Pln(n.n.a,t.n.a)}function FN(n,t){return Pln(n.c.d,t.c.d)}function BN(n,t){return Pln(n.c.c,t.c.c)}function HN(n,t){return BB(h6(n.b,t),15)}function qN(n,t){return n.n.b=(kW(t),t)}function GN(n,t){return n.n.b=(kW(t),t)}function zN(n){return y$(n.a)||y$(n.b)}function UN(n,t,e){return p3(n,t,e,n.b)}function XN(n,t,e){return p3(n,t,e,n.c)}function WN(n,t,e){BB(D7(n,t),21).Fc(e)}function VN(n,t,e){Oln(n.a,e),Cvn(n.a,t)}function QN(n,t){QM(),this.a=n,this.b=t}function YN(n,t){YM(),this.b=n,this.c=t}function JN(n,t){FG(),this.f=t,this.d=n}function ZN(n,t){w6(t,n),this.d=n,this.c=t}function nx(n){var t;t=n.a,n.a=n.b,n.b=t}function tx(n){return G_(),!!n&&!n.dc()}function ex(n){return new h4(3,n)}function ix(n,t){return new bK(n,n.gc(),t)}function rx(n){return ry(),Inn((DZ(),Xnt),n)}function cx(n){this.d=n,AL.call(this,n)}function ax(n){this.c=n,AL.call(this,n)}function ux(n){this.c=n,cx.call(this,n)}function ox(){MM(),this.b=new yd(this)}function sx(n){return lin(n,AVn),new J6(n)}function hx(n){return PY(),parseInt(n)||-1}function fx(n,t,e){return n.substr(t,e-t)}function lx(n,t,e){return yN(n,YTn(t),e)}function bx(n){return VU(n.c,n.c.length)}function wx(n){return null!=n.f?n.f:""+n.g}function dx(n){return null!=n.f?n.f:""+n.g}function gx(n){return Px(0!=n.b),n.a.a.c}function px(n){return Px(0!=n.b),n.c.b.c}function vx(n){cL(n,150)&&BB(n,150).Gh()}function mx(n){return n.b=BB(mQ(n.a),42)}function yx(n){hM(),this.b=n,this.a=!0}function kx(n){fM(),this.b=n,this.a=!0}function jx(n){n.d=new Ix(n),n.e=new xp}function Ex(n){if(!n)throw Hp(new vv)}function Tx(n){if(!n)throw Hp(new wv)}function Mx(n){if(!n)throw Hp(new dv)}function Sx(n){if(!n)throw Hp(new lv)}function Px(n){if(!n)throw Hp(new yv)}function Ix(n){nH.call(this,n,null,null)}function Cx(){gT.call(this,"POLYOMINO",0)}function Ox(n,t,e,i){sz.call(this,n,t,e,i)}function Ax(n,t){return _Mn(),JCn(n,t.e,t)}function $x(n,t,e){return AM(),e.qg(n,t)}function Lx(n,t){return!!n.q&&hU(n.q,t)}function Nx(n,t){return n>0?t*t/n:t*t*100}function xx(n,t){return n>0?t/(n*n):100*t}function Dx(n,t,e){return WB(t,own(n,e))}function Rx(n,t,e){x9(),n.Xe(t)&&e.td(n)}function Kx(n,t,e){n.Zc(t).Rb(e)}function _x(n,t,e){return n.a+=t,n.b+=e,n}function Fx(n,t,e){return n.a*=t,n.b*=e,n}function Bx(n,t,e){return n.a-=t,n.b-=e,n}function Hx(n,t){return n.a=t.a,n.b=t.b,n}function qx(n){return n.a=-n.a,n.b=-n.b,n}function Gx(n){this.c=n,this.a=1,this.b=1}function zx(n){this.c=n,Pen(n,0),Ien(n,0)}function Ux(n){YT.call(this),nin(this,n)}function Xx(n){RXn(),Bp(this),this.mf(n)}function Wx(n,t){QM(),QN.call(this,n,t)}function Vx(n,t){YM(),YN.call(this,n,t)}function Qx(n,t){YM(),YN.call(this,n,t)}function Yx(n,t){YM(),Vx.call(this,n,t)}function Jx(n,t,e){y9.call(this,n,t,e,2)}function Zx(n,t){f$(),cG.call(this,n,t)}function nD(n,t){f$(),Zx.call(this,n,t)}function tD(n,t){f$(),Zx.call(this,n,t)}function eD(n,t){f$(),tD.call(this,n,t)}function iD(n,t){f$(),cG.call(this,n,t)}function rD(n,t){f$(),iD.call(this,n,t)}function cD(n,t){f$(),cG.call(this,n,t)}function aD(n,t){return n.c.Fc(BB(t,133))}function uD(n,t,e){return NHn(F7(n,t),e)}function oD(n,t,e){return t.Qk(n.e,n.c,e)}function sD(n,t,e){return t.Rk(n.e,n.c,e)}function hD(n,t){return tfn(n.e,BB(t,49))}function fD(n,t,e){sln(H7(n.a),t,i1(e))}function lD(n,t,e){sln(a4(n.a),t,e1(e))}function bD(n,t){t.$modCount=n.$modCount}function wD(){wD=O,Vkt=new up("root")}function dD(){dD=O,pAt=new Tm,new Mm}function gD(){this.a=new pJ,this.b=new pJ}function pD(){jin.call(this),this.Bb|=BQn}function vD(){gT.call(this,"GROW_TREE",0)}function mD(n){return null==n?null:wUn(n)}function yD(n){return null==n?null:LSn(n)}function kD(n){return null==n?null:Bbn(n)}function jD(n){return null==n?null:Bbn(n)}function ED(n){null==n.o&&g$n(n)}function TD(n){return JH(null==n||zC(n)),n}function MD(n){return JH(null==n||UC(n)),n}function SD(n){return JH(null==n||XC(n)),n}function PD(n){this.q=new e.Date(j2(n))}function ID(n,t){this.c=n,pT.call(this,n,t)}function CD(n,t){this.a=n,ID.call(this,n,t)}function OD(n,t){this.d=n,Mb(this),this.b=t}function AD(n,t){B8.call(this,n),this.a=t}function $D(n,t){B8.call(this,n),this.a=t}function LD(n){qwn.call(this,0,0),this.f=n}function ND(n,t,e){W6.call(this,n,t,e,null)}function xD(n,t,e){W6.call(this,n,t,e,null)}function DD(n,t,e){return n.ue(t,e)<=0?e:t}function RD(n,t,e){return n.ue(t,e)<=0?t:e}function KD(n,t){return BB(lnn(n.b,t),149)}function _D(n,t){return BB(lnn(n.c,t),229)}function FD(n){return BB(xq(n.a,n.b),287)}function BD(n){return new xI(n.c,n.d+n.a)}function HD(n){return BZ(),pA(BB(n,197))}function qD(){qD=O,$rt=nbn((mdn(),_Ct))}function GD(n,t){t.a?Fxn(n,t):MN(n.a,t.b)}function zD(n,t){Qet||WB(n.a,t)}function UD(n,t){return mM(),wan(t.d.i,n)}function XD(n,t){return Crn(),new cKn(t,n)}function WD(n,t){return OY(t,uJn),n.f=t,n}function VD(n,t,e){return e=T_n(n,t,3,e)}function QD(n,t,e){return e=T_n(n,t,6,e)}function YD(n,t,e){return e=T_n(n,t,9,e)}function JD(n,t,e){++n.j,n.Ki(),L8(n,t,e)}function ZD(n,t,e){++n.j,n.Hi(t,n.oi(t,e))}function nR(n,t,e){n.Zc(t).Rb(e)}function tR(n,t,e){return ZBn(n.c,n.b,t,e)}function eR(n,t){return(t&DWn)%n.d.length}function iR(n,t){up.call(this,n),this.a=t}function rR(n,t){kp.call(this,n),this.a=t}function cR(n,t){kp.call(this,n),this.a=t}function aR(n,t){this.c=n,gtn.call(this,t)}function uR(n,t){this.a=n,yp.call(this,t)}function oR(n,t){this.a=n,yp.call(this,t)}function sR(n){this.a=(lin(n,AVn),new J6(n))}function hR(n){this.a=(lin(n,AVn),new J6(n))}function fR(n){return!n.a&&(n.a=new w),n.a}function lR(n){return n>8?0:n+1}function bR(n,t){return hN(),n==t?0:n?1:-1}function wR(n,t,e){return mG(n,BB(t,22),e)}function dR(n,t,e){return n.apply(t,e)}function gR(n,t,e){return n.a+=Bdn(t,0,e),n}function pR(n,t){var e;return e=n.e,n.e=t,e}function vR(n,t){n[iYn].call(n,t)}function mR(n,t){n[iYn].call(n,t)}function yR(n,t){n.a.Vc(n.b,t),++n.b,n.c=-1}function kR(n){$U(n.e),n.d.b=n.d,n.d.a=n.d}function jR(n){n.b?jR(n.b):n.f.c.zc(n.e,n.d)}function ER(n,t,e){dM(),Cl(n,t.Ce(n.a,e))}function TR(n,t){return Qj(Mdn(n.a,t,!0))}function MR(n,t){return Qj(Sdn(n.a,t,!0))}function SR(n,t){return qk(new Array(t),n)}function PR(n){return String.fromCharCode(n)}function IR(n){return null==n?null:n.message}function CR(){this.a=new Np,this.b=new Np}function OR(){this.a=new bt,this.b=new Tv}function AR(){this.b=new Gj,this.c=new Np}function $R(){this.d=new Gj,this.e=new Gj}function LR(){this.n=new Gj,this.o=new Gj}function NR(){this.n=new bm,this.i=new bA}function xR(){this.a=new nf,this.b=new uc}function DR(){this.a=new Np,this.d=new Np}function RR(){this.b=new Rv,this.a=new Rv}function KR(){this.b=new xp,this.a=new xp}function _R(){this.b=new AE,this.a=new da}function FR(){NR.call(this),this.a=new Gj}function BR(n){Oan.call(this,n,(Z9(),Net))}function HR(n,t,e,i){uG.call(this,n,t,e,i)}function qR(n,t,e){null!=e&&Lin(t,Amn(n,e))}function GR(n,t,e){null!=e&&Nin(t,Amn(n,e))}function zR(n,t,e){return e=T_n(n,t,11,e)}function UR(n,t){return n.a+=t.a,n.b+=t.b,n}function XR(n,t){return n.a-=t.a,n.b-=t.b,n}function WR(n,t){return n.n.a=(kW(t),t+10)}function VR(n,t){return n.n.a=(kW(t),t+10)}function QR(n,t){return t==n||Sjn(ILn(t),n)}function YR(n,t){return null==VW(n.a,t,"")}function JR(n,t){return mM(),!wan(t.d.i,n)}function ZR(n,t){dA(n.f)?c$n(n,t):CTn(n,t)}function nK(n,t){return t.Hh(n.a)}function tK(n,t){Ay.call(this,e9n+n+o8n+t)}function eK(n,t,e,i){eU.call(this,n,t,e,i)}function iK(n,t,e,i){eU.call(this,n,t,e,i)}function rK(n,t,e,i){iK.call(this,n,t,e,i)}function cK(n,t,e,i){iU.call(this,n,t,e,i)}function aK(n,t,e,i){iU.call(this,n,t,e,i)}function uK(n,t,e,i){iU.call(this,n,t,e,i)}function oK(n,t,e,i){aK.call(this,n,t,e,i)}function sK(n,t,e,i){aK.call(this,n,t,e,i)}function hK(n,t,e,i){uK.call(this,n,t,e,i)}function fK(n,t,e,i){sK.call(this,n,t,e,i)}function lK(n,t,e,i){Zz.call(this,n,t,e,i)}function bK(n,t,e){this.a=n,ZN.call(this,t,e)}function wK(n,t,e){this.c=t,this.b=e,this.a=n}function dK(n,t,e){return n.d=BB(t.Kb(e),164)}function gK(n,t){return n.Aj().Nh().Kh(n,t)}function pK(n,t){return n.Aj().Nh().Ih(n,t)}function vK(n,t){return kW(n),GC(n)===GC(t)}function mK(n,t){return kW(n),GC(n)===GC(t)}function yK(n,t){return Qj(Mdn(n.a,t,!1))}function kK(n,t){return Qj(Sdn(n.a,t,!1))}function jK(n,t){return n.b.sd(new $S(n,t))}function EK(n,t){return n.b.sd(new LS(n,t))}function TK(n,t){return n.b.sd(new NS(n,t))}function MK(n,t,e){return n.lastIndexOf(t,e)}function SK(n,t,e){return Pln(n[t.b],n[e.b])}function PK(n,t){return hon(t,(HXn(),Rdt),n)}function IK(n,t){return E$(t.a.d.p,n.a.d.p)}function CK(n,t){return E$(n.a.d.p,t.a.d.p)}function OK(n,t){return Pln(n.c-n.s,t.c-t.s)}function AK(n){return n.c?E7(n.c.a,n,0):-1}function $K(n){return n<100?null:new Fj(n)}function LK(n){return n==UIt||n==WIt||n==XIt}function NK(n,t){return cL(t,15)&&QDn(n.c,t)}function xK(n,t){Qet||t&&(n.d=t)}function DK(n,t){return!!lsn(n,t)}function RK(n,t){this.c=n,GU.call(this,n,t)}function KK(n){this.c=n,vO.call(this,bVn,0)}function _K(n,t){JB.call(this,n,n.length,t)}function FK(n,t,e){return BB(n.c,69).lk(t,e)}function BK(n,t,e){return BB(n.c,69).mk(t,e)}function HK(n,t,e){return oD(n,BB(t,332),e)}function qK(n,t,e){return sD(n,BB(t,332),e)}function GK(n,t,e){return CEn(n,BB(t,332),e)}function zK(n,t,e){return QTn(n,BB(t,332),e)}function UK(n,t){return null==t?null:lfn(n.b,t)}function XK(n){return UC(n)?(kW(n),n):n.ke()}function WK(n){return!isNaN(n)&&!isFinite(n)}function VK(n){s_(),this.a=(SQ(),new Ak(n))}function QK(n){hH(),this.d=n,this.a=new Lp}function YK(n,t,e){this.a=n,this.b=t,this.c=e}function JK(n,t,e){this.a=n,this.b=t,this.c=e}function ZK(n,t,e){this.d=n,this.b=e,this.a=t}function n_(n){P$(this),yQ(this),Frn(this,n)}function t_(n){xA(this),tH(this.c,0,n.Pc())}function e_(n){fW(n.a),z8(n.c,n.b),n.b=null}function i_(n){this.a=n,$T(),fan(Date.now())}function r_(){r_=O,iit=new r,rit=new r}function c_(){c_=O,Tet=new L,Met=new N}function a_(){a_=O,wAt=x8(Ant,HWn,1,0,5,1)}function u_(){u_=O,M$t=x8(Ant,HWn,1,0,5,1)}function o_(){o_=O,S$t=x8(Ant,HWn,1,0,5,1)}function s_(){s_=O,new rv((SQ(),SQ(),set))}function h_(n){return Z9(),Inn((n7(),_et),n)}function f_(n){return qsn(),Inn((e8(),Zet),n)}function l_(n){return hpn(),Inn((C4(),pit),n)}function b_(n){return Rnn(),Inn((O4(),kit),n)}function w_(n){return tRn(),Inn((xan(),Fit),n)}function d_(n){return Dtn(),Inn((Z6(),Wit),n)}function g_(n){return J9(),Inn((n8(),trt),n)}function p_(n){return G7(),Inn((t8(),urt),n)}function v_(n){return dWn(),Inn((MO(),Art),n)}function m_(n){return Dan(),Inn((e7(),_rt),n)}function y_(n){return Hpn(),Inn((i7(),zrt),n)}function k_(n){return qpn(),Inn((r7(),ict),n)}function j_(n){return wM(),Inn((Q2(),act),n)}function E_(n){return Knn(),Inn((A4(),_ct),n)}function T_(n){return q7(),Inn((i8(),Lat),n)}function M_(n){return yMn(),Inn((Xnn(),qat),n)}function S_(n){return Aun(),Inn((t7(),rut),n)}function P_(n){return Bfn(),Inn((r8(),gut),n)}function I_(n,t){if(!n)throw Hp(new _y(t))}function C_(n){return uSn(),Inn((hen(),Aut),n)}function O_(n){uG.call(this,n.d,n.c,n.a,n.b)}function A_(n){uG.call(this,n.d,n.c,n.a,n.b)}function $_(n,t,e){this.b=n,this.c=t,this.a=e}function L_(n,t,e){this.b=n,this.a=t,this.c=e}function N_(n,t,e){this.a=n,this.b=t,this.c=e}function x_(n,t,e){this.a=n,this.b=t,this.c=e}function D_(n,t,e){this.a=n,this.b=t,this.c=e}function R_(n,t,e){this.a=n,this.b=t,this.c=e}function K_(n,t,e){this.b=n,this.a=t,this.c=e}function __(n,t,e){this.e=t,this.b=n,this.d=e}function F_(n,t,e){return dM(),n.a.Od(t,e),t}function B_(n){var t;return(t=new jn).e=n,t}function H_(n){var t;return(t=new Zv).b=n,t}function q_(){q_=O,Uut=new Ne,Xut=new xe}function G_(){G_=O,dst=new vr,gst=new mr}function z_(n){return Cun(),Inn((a7(),ost),n)}function U_(n){return Oun(),Inn((o7(),Est),n)}function X_(n){return kDn(),Inn((Gcn(),Vst),n)}function W_(n){return $Pn(),Inn((ben(),rht),n)}function V_(n){return V8(),Inn((R4(),oht),n)}function Q_(n){return Oin(),Inn((c8(),bht),n)}function Y_(n){return LEn(),Inn((Hnn(),Ost),n)}function J_(n){return Irn(),Inn((o8(),_st),n)}function Z_(n){return uin(),Inn((a8(),vht),n)}function nF(n){return Vvn(),Inn((Fnn(),Mht),n)}function tF(n){return _nn(),Inn((L4(),Cht),n)}function eF(n){return Jun(),Inn((u8(),Nht),n)}function iF(n){return gSn(),Inn((pen(),Hht),n)}function rF(n){return g7(),Inn((N4(),Uht),n)}function cF(n){return Bjn(),Inn((den(),nft),n)}function aF(n){return JMn(),Inn((wen(),oft),n)}function uF(n){return bDn(),Inn((Vun(),yft),n)}function oF(n){return Kan(),Inn((h8(),Mft),n)}function sF(n){return z7(),Inn((s8(),Oft),n)}function hF(n){return z2(),Inn((K4(),Nft),n)}function fF(n){return Tbn(),Inn((qnn(),zlt),n)}function lF(n){return TTn(),Inn((gen(),rvt),n)}function bF(n){return Mhn(),Inn((f8(),svt),n)}function wF(n){return bvn(),Inn((s7(),dvt),n)}function dF(n){return ain(),Inn((w8(),Uvt),n)}function gF(n){return sNn(),Inn((qcn(),$vt),n)}function pF(n){return mon(),Inn((b8(),Rvt),n)}function vF(n){return U7(),Inn((D4(),Bvt),n)}function mF(n){return Hcn(),Inn((l8(),Yvt),n)}function yF(n){return Nvn(),Inn((Bnn(),jvt),n)}function kF(n){return A6(),Inn((x4(),tmt),n)}function jF(n){return Usn(),Inn((g8(),amt),n)}function EF(n){return dcn(),Inn((p8(),fmt),n)}function TF(n){return $un(),Inn((d8(),gmt),n)}function MF(n){return oin(),Inn((v8(),Nmt),n)}function SF(n){return Q4(),Inn((F4(),Gmt),n)}function PF(n){return gJ(),Inn((B4(),iyt),n)}function IF(n){return oZ(),Inn((H4(),uyt),n)}function CF(n){return O6(),Inn((_4(),Pyt),n)}function OF(n){return dJ(),Inn((q4(),Dyt),n)}function AF(n){return zyn(),Inn((c7(),Hyt),n)}function $F(n){return DPn(),Inn((ven(),Jyt),n)}function LF(n){return sZ(),Inn((U4(),Fkt),n)}function NF(n){return Prn(),Inn((z4(),Zkt),n)}function xF(n){return B0(),Inn((G4(),Gkt),n)}function DF(n){return Ibn(),Inn((m8(),rjt),n)}function RF(n){return D9(),Inn((X4(),ojt),n)}function KF(n){return Hsn(),Inn((y8(),bjt),n)}function _F(n){return Omn(),Inn((u7(),zjt),n)}function FF(n){return Bcn(),Inn((j8(),Qjt),n)}function BF(n){return Sbn(),Inn((k8(),eEt),n)}function HF(n){return YLn(),Inn((Unn(),BEt),n)}function qF(n){return Pbn(),Inn((E8(),UEt),n)}function GF(n){return IM(),Inn((W2(),VEt),n)}function zF(n){return CM(),Inn((X2(),JEt),n)}function UF(n){return $6(),Inn((V4(),eTt),n)}function XF(n){return $Sn(),Inn((Gnn(),sTt),n)}function WF(n){return OM(),Inn((V2(),UTt),n)}function VF(n){return Lun(),Inn((W4(),QTt),n)}function QF(n){return rpn(),Inn((znn(),bMt),n)}function YF(n){return PPn(),Inn((zcn(),EMt),n)}function JF(n){return wvn(),Inn((len(),xMt),n)}function ZF(n){return wEn(),Inn((fen(),tSt),n)}function nB(n){return lWn(),Inn((SO(),Zot),n)}function tB(n){return Srn(),Inn(($4(),zut),n)}function eB(n){return Ffn(),Inn((Wnn(),GPt),n)}function iB(n){return Rtn(),Inn((M8(),VPt),n)}function rB(n){return Mbn(),Inn((l7(),tIt),n)}function cB(n){return nMn(),Inn((yen(),sIt),n)}function aB(n){return ufn(),Inn((T8(),kIt),n)}function uB(n){return Xyn(),Inn((f7(),PIt),n)}function oB(n){return n$n(),Inn((Nan(),KIt),n)}function sB(n){return cpn(),Inn((Vnn(),zIt),n)}function hB(n){return QEn(),Inn((Htn(),ZIt),n)}function fB(n){return lCn(),Inn((men(),uCt),n)}function lB(n){return mdn(),Inn((w7(),BCt),n)}function bB(n){return n_n(),Inn((Qun(),JCt),n)}function wB(n){return kUn(),Inn((Qnn(),OCt),n)}function dB(n){return Fwn(),Inn((b7(),rOt),n)}function gB(n){return Bsn(),Inn((h7(),fOt),n)}function pB(n){return hAn(),Inn((Ucn(),cAt),n)}function vB(n,t){return kW(n),n+(kW(t),t)}function mB(n,t){return $T(),f9(QQ(n.a),t)}function yB(n,t){return $T(),f9(QQ(n.a),t)}function kB(n,t){this.c=n,this.a=t,this.b=t-n}function jB(n,t,e){this.a=n,this.b=t,this.c=e}function EB(n,t,e){this.a=n,this.b=t,this.c=e}function TB(n,t,e){this.a=n,this.b=t,this.c=e}function MB(n,t,e){this.a=n,this.b=t,this.c=e}function SB(n,t,e){this.a=n,this.b=t,this.c=e}function PB(n,t,e){this.e=n,this.a=t,this.c=e}function IB(n,t,e){f$(),mJ.call(this,n,t,e)}function CB(n,t,e){f$(),rW.call(this,n,t,e)}function OB(n,t,e){f$(),rW.call(this,n,t,e)}function AB(n,t,e){f$(),rW.call(this,n,t,e)}function $B(n,t,e){f$(),CB.call(this,n,t,e)}function LB(n,t,e){f$(),CB.call(this,n,t,e)}function NB(n,t,e){f$(),LB.call(this,n,t,e)}function xB(n,t,e){f$(),OB.call(this,n,t,e)}function DB(n,t,e){f$(),AB.call(this,n,t,e)}function RB(n,t){return yX(n),yX(t),new hT(n,t)}function KB(n,t){return yX(n),yX(t),new _H(n,t)}function _B(n,t){return yX(n),yX(t),new FH(n,t)}function FB(n,t){return yX(n),yX(t),new lT(n,t)}function BB(n,t){return JH(null==n||Qpn(n,t)),n}function HB(n){var t;return fnn(t=new Np,n),t}function qB(n){var t;return fnn(t=new Rv,n),t}function GB(n){var t;return qrn(t=new zv,n),t}function zB(n){var t;return qrn(t=new YT,n),t}function UB(n){return!n.e&&(n.e=new Np),n.e}function XB(n){return!n.c&&(n.c=new Bo),n.c}function WB(n,t){return n.c[n.c.length]=t,!0}function VB(n,t){this.c=n,this.b=t,this.a=!1}function QB(n){this.d=n,Mb(this),this.b=rz(n.d)}function YB(){this.a=";,;",this.b="",this.c=""}function JB(n,t,e){Uz.call(this,t,e),this.a=n}function ZB(n,t,e){this.b=n,gO.call(this,t,e)}function nH(n,t,e){this.c=n,PS.call(this,t,e)}function tH(n,t,e){_In(e,0,n,t,e.length,!1)}function eH(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function iH(n,t){t&&(n.b=t,n.a=(EW(t),t.a))}function rH(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function cH(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function aH(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function uH(n){return uan(xU(JO(n)?Pan(n):n))}function oH(n,t){return E$(oq(n.d),oq(t.d))}function sH(n,t){return t==(kUn(),ICt)?n.c:n.d}function hH(){hH=O,kUn(),Rmt=ICt,Kmt=oCt}function fH(){this.b=Gy(MD(mpn((fRn(),aat))))}function lH(n){return dM(),x8(Ant,HWn,1,n,5,1)}function bH(n){return new xI(n.c+n.b,n.d+n.a)}function wH(n,t){return SM(),E$(n.d.p,t.d.p)}function dH(n){return Px(0!=n.b),Atn(n,n.a.a)}function gH(n){return Px(0!=n.b),Atn(n,n.c.b)}function pH(n,t){if(!n)throw Hp(new $y(t))}function vH(n,t){if(!n)throw Hp(new _y(t))}function mH(n,t,e){dP.call(this,n,t),this.b=e}function yH(n,t,e){LC.call(this,n,t),this.c=e}function kH(n,t,e){btn.call(this,t,e),this.d=n}function jH(n){o_(),yo.call(this),this.th(n)}function EH(n,t,e){this.a=n,NO.call(this,t,e)}function TH(n,t,e){this.a=n,NO.call(this,t,e)}function MH(n,t,e){LC.call(this,n,t),this.c=e}function SH(){R5(),oW.call(this,(WM(),zAt))}function PH(n){return null!=n&&!Xbn(n,LAt,NAt)}function IH(n,t){return(Wfn(n)<<4|Wfn(t))&QVn}function CH(n,t){return nV(),zvn(n,t),new GW(n,t)}function OH(n,t){var e;n.n&&(e=t,WB(n.f,e))}function AH(n,t,e){rtn(n,t,new GX(e))}function $H(n,t){var e;return e=n.c,Kin(n,t),e}function LH(n,t){return n.g=t<0?-1:t,n}function NH(n,t){return ztn(n),n.a*=t,n.b*=t,n}function xH(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function DH(n,t){return r5(n,t,n.c.b,n.c),!0}function RH(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function KH(n){this.b=n,this.a=lz(this.b.a).Ed()}function _H(n,t){this.b=n,this.a=t,Bh.call(this)}function FH(n,t){this.a=n,this.b=t,Bh.call(this)}function BH(n,t){Uz.call(this,t,1040),this.a=n}function HH(n){return 0==n||isNaN(n)?n:n<0?-1:1}function qH(n){return MQ(),PMn(n)==JJ(OMn(n))}function GH(n){return MQ(),OMn(n)==JJ(PMn(n))}function zH(n,t){return Yjn(n,new dP(t.a,t.b))}function UH(n){return!b5(n)&&n.c.i.c==n.d.i.c}function XH(n){var t;return t=n.n,n.a.b+t.d+t.a}function WH(n){var t;return t=n.n,n.e.b+t.d+t.a}function VH(n){var t;return t=n.n,n.e.a+t.b+t.c}function QH(n){return wWn(),new oG(0,n)}function YH(n){return n.a?n.a:eQ(n)}function JH(n){if(!n)throw Hp(new Ky(null))}function ZH(){ZH=O,SQ(),uLt=new Gb(P7n)}function nq(){nq=O,new svn((ty(),_nt),(ey(),Knt))}function tq(){tq=O,Ctt=x8(Att,sVn,19,256,0,1)}function eq(n,t,e,i){awn.call(this,n,t,e,i,0,0)}function iq(n,t,e){return VW(n.b,BB(e.b,17),t)}function rq(n,t,e){return VW(n.b,BB(e.b,17),t)}function cq(n,t){return WB(n,new xI(t.a,t.b))}function aq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function uq(n){return n.e.c.length+n.g.c.length}function oq(n){return n.e.c.length-n.g.c.length}function sq(n){return n.b.c.length-n.e.c.length}function hq(n){return BZ(),(kUn(),bCt).Hc(n.j)}function fq(n){o_(),jH.call(this,n),this.a=-1}function lq(n,t){xC.call(this,n,t),this.a=this}function bq(n,t){var e;return(e=mX(n,t)).i=2,e}function wq(n,t){return++n.j,n.Ti(t)}function dq(n,t,e){return n.a=-1,WN(n,t.g,e),n}function gq(n,t,e){Kzn(n.a,n.b,n.c,BB(t,202),e)}function pq(n,t){Bin(n,null==t?null:(kW(t),t))}function vq(n,t){Rin(n,null==t?null:(kW(t),t))}function mq(n,t){Rin(n,null==t?null:(kW(t),t))}function yq(n,t,e){return new wK(dW(n).Ie(),e,t)}function kq(n,t,e,i,r,c){return Vjn(n,t,e,i,r,0,c)}function jq(){jq=O,jtt=x8(Ttt,sVn,217,256,0,1)}function Eq(){Eq=O,$tt=x8(Rtt,sVn,162,256,0,1)}function Tq(){Tq=O,Ktt=x8(_tt,sVn,184,256,0,1)}function Mq(){Mq=O,Mtt=x8(Stt,sVn,172,128,0,1)}function Sq(){eH(this,!1,!1,!1,!1)}function Pq(n){WX(),this.a=(SQ(),new Gb(yX(n)))}function Iq(n){for(yX(n);n.Ob();)n.Pb(),n.Qb()}function Cq(n){n.a.cd(),BB(n.a.dd(),14).gc(),wk()}function Oq(n){this.c=n,this.b=this.c.d.vc().Kc()}function Aq(n){this.c=n,this.a=new QT(this.c.a)}function $q(n){this.a=new XT(n.gc()),Frn(this,n)}function Lq(n){ew.call(this,new v4),Frn(this,n)}function Nq(n,t){return n.a+=Bdn(t,0,t.length),n}function xq(n,t){return l1(t,n.c.length),n.c[t]}function Dq(n,t){return l1(t,n.a.length),n.a[t]}function Rq(n,t){dM(),B8.call(this,n),this.a=t}function Kq(n,t){return jgn(rbn(jgn(n.a).a,t.a))}function _q(n,t){return kW(n),Ncn(n,(kW(t),t))}function Fq(n,t){return kW(t),Ncn(t,(kW(n),n))}function Bq(n,t){return $X(t,0,Hq(t[0],jgn(1)))}function Hq(n,t){return Kq(BB(n,162),BB(t,162))}function qq(n){return n.c-BB(xq(n.a,n.b),287).b}function Gq(n){return n.q?n.q:(SQ(),SQ(),het)}function zq(n){return n.e.Hd().gc()*n.c.Hd().gc()}function Uq(n,t,e){return E$(t.d[n.g],e.d[n.g])}function Xq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Wq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Vq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Qq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Yq(n,t,i){return e.Math.min(i/n,1/t)}function Jq(n,t){return n?0:e.Math.max(0,t-1)}function Zq(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function nG(n){var t;return(t=uEn(n))?nG(t):n}function tG(n,t){return null==n.a&&wRn(n),n.a[t]}function eG(n){return n.c?n.c.f:n.e.b}function iG(n){return n.c?n.c.g:n.e.a}function rG(n){gtn.call(this,n.gc()),pX(this,n)}function cG(n,t){f$(),jp.call(this,t),this.a=n}function aG(n,t,e){this.a=n,$L.call(this,t,e,2)}function uG(n,t,e,i){_h(this),rH(this,n,t,e,i)}function oG(n,t){wWn(),Ap.call(this,n),this.a=t}function sG(n){this.b=new YT,this.a=n,this.c=-1}function hG(){this.d=new xI(0,0),this.e=new Rv}function fG(n){ZN.call(this,0,0),this.a=n,this.b=0}function lG(n){this.a=n,this.c=new xp,ron(this)}function bG(n){if(n.e.c!=n.b)throw Hp(new vv)}function wG(n){if(n.c.e!=n.a)throw Hp(new vv)}function dG(n){return JO(n)?0|n:TE(n)}function gG(n,t){return wWn(),new UU(n,t)}function pG(n,t){return null==n?null==t:mK(n,t)}function vG(n,t){return null==n?null==t:mgn(n,t)}function mG(n,t,e){return orn(n.a,t),EU(n,t.g,e)}function yG(n,t,e){ihn(0,t,n.length),z9(n,0,t,e)}function kG(n,t,e){LZ(t,n.c.length),MS(n.c,t,e)}function jG(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function EG(n,t){var e;return $on(e=nbn(n),t),e}function TG(n,t){return!n&&(n=[]),n[n.length]=t,n}function MG(n,t){return!(void 0===n.a.get(t))}function SG(n,t){return Xin(new nn,new uw(n),t)}function PG(n){return null==n?Set:new vy(kW(n))}function IG(n,t){return cL(t,22)&&SN(n,BB(t,22))}function CG(n,t){return cL(t,22)&&$tn(n,BB(t,22))}function OG(n){return H$n(n,26)*rYn+H$n(n,27)*cYn}function AG(n){return Array.isArray(n)&&n.im===C}function $G(n){n.b?$G(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function LG(n,t){UR(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function NG(n,t){LG(n,XR(new xI(t.a,t.b),n.c))}function xG(n,t){this.b=new YT,this.a=n,this.c=t}function DG(){this.b=new Ot,this.c=new lY(this)}function RG(){this.d=new mn,this.e=new fY(this)}function KG(){KZ(),this.f=new YT,this.e=new YT}function _G(){BZ(),this.k=new xp,this.d=new Rv}function FG(){FG=O,bOt=new XA((sWn(),aPt),0)}function BG(){BG=O,qnt=new fG(x8(Ant,HWn,1,0,5,1))}function HG(n,t,e){VAn(e,n,1),WB(t,new cP(e,n))}function qG(n,t,e){Fkn(e,n,1),WB(t,new bP(e,n))}function GG(n,t,e){return TU(n,new xS(t.a,e.a))}function zG(n,t,e){return-E$(n.f[t.p],n.f[e.p])}function UG(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XG(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function WG(n,t,e){return n.a=-1,WN(n,t.g+1,e),n}function VG(n,t,e){return e=T_n(n,BB(t,49),7,e)}function QG(n,t,e){return e=T_n(n,BB(t,49),3,e)}function YG(n,t,e){this.a=n,LL.call(this,t,e,22)}function JG(n,t,e){this.a=n,LL.call(this,t,e,14)}function ZG(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function nz(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function tz(n,t){0!=(t.Bb&h6n)&&!n.a.o&&(n.a.o=t)}function ez(n){return null!=n&&DU(n)&&!(n.im===C)}function iz(n){return!Array.isArray(n)&&n.im===C}function rz(n){return cL(n,15)?BB(n,15).Yc():n.Kc()}function cz(n){return n.Qc(x8(Ant,HWn,1,n.gc(),5,1))}function az(n,t){return lgn(F7(n,t))?t.Qh():null}function uz(n){n?Fmn(n,($T(),Btt),""):$T()}function oz(n){this.a=(BG(),qnt),this.d=BB(yX(n),47)}function sz(n,t,e,i){this.a=n,W6.call(this,n,t,e,i)}function hz(n){eS(),this.a=0,this.b=n-1,this.c=1}function fz(n){V$(this),this.g=n,jQ(this),this._d()}function lz(n){return n.c?n.c:n.c=n.Id()}function bz(n){return n.d?n.d:n.d=n.Jd()}function wz(n){return n.c||(n.c=n.Dd())}function dz(n){return n.f||(n.f=n.Dc())}function gz(n){return n.i||(n.i=n.bc())}function pz(n){return wWn(),new vJ(10,n,0)}function vz(n){return JO(n)?""+n:GDn(n)}function mz(n){if(n.e.j!=n.d)throw Hp(new vv)}function yz(n,t){return uan(lSn(JO(n)?Pan(n):n,t))}function kz(n,t){return uan(jAn(JO(n)?Pan(n):n,t))}function jz(n,t){return uan(JSn(JO(n)?Pan(n):n,t))}function Ez(n,t){return bR((kW(n),n),(kW(t),t))}function Tz(n,t){return Pln((kW(n),n),(kW(t),t))}function Mz(n,t){return yX(t),n.a.Ad(t)&&!n.b.Ad(t)}function Sz(n,t){return M$(n.l&t.l,n.m&t.m,n.h&t.h)}function Pz(n,t){return M$(n.l|t.l,n.m|t.m,n.h|t.h)}function Iz(n,t){return M$(n.l^t.l,n.m^t.m,n.h^t.h)}function Cz(n,t){return $fn(n,(kW(t),new rw(t)))}function Oz(n,t){return $fn(n,(kW(t),new cw(t)))}function Az(n){return gcn(),0!=BB(n,11).e.c.length}function $z(n){return gcn(),0!=BB(n,11).g.c.length}function Lz(n,t){return Crn(),Pln(t.a.o.a,n.a.o.a)}function Nz(n,t,e){return TUn(n,BB(t,11),BB(e,11))}function xz(n){return n.e?D6(n.e):null}function Dz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Rz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.td(e))}function Kz(n,t){if(n<0||n>=t)throw Hp(new Sv)}function _z(n,t,e){return $X(t,0,Hq(t[0],e[0])),t}function Fz(n,t,e){t.Ye(e,Gy(MD(RX(n.b,e)))*n.a)}function Bz(n,t,e){return jDn(),Dcn(n,t)&&Dcn(n,e)}function Hz(n){return lCn(),!n.Hc(eCt)&&!n.Hc(rCt)}function qz(n){return new xI(n.c+n.b/2,n.d+n.a/2)}function Gz(n,t){return t.kh()?tfn(n.b,BB(t,49)):t}function zz(n,t){this.e=n,this.d=0!=(64&t)?t|hVn:t}function Uz(n,t){this.c=0,this.d=n,this.b=64|t|hVn}function Xz(n){this.b=new J6(11),this.a=(PQ(),n)}function Wz(n){this.b=null,this.a=(PQ(),n||wet)}function Vz(n){this.a=rvn(n.a),this.b=new t_(n.b)}function Qz(n){this.b=n,cx.call(this,n),ML(this)}function Yz(n){this.b=n,ux.call(this,n),SL(this)}function Jz(n,t,e){this.a=n,eK.call(this,t,e,5,6)}function Zz(n,t,e,i){this.b=n,$L.call(this,t,e,i)}function nU(n,t,e,i,r){k9.call(this,n,t,e,i,r,-1)}function tU(n,t,e,i,r){j9.call(this,n,t,e,i,r,-1)}function eU(n,t,e,i){$L.call(this,n,t,e),this.b=i}function iU(n,t,e,i){yH.call(this,n,t,e),this.b=i}function rU(n){NC.call(this,n,!1),this.a=!1}function cU(n,t){this.b=n,hl.call(this,n.b),this.a=t}function aU(n,t){WX(),jT.call(this,n,sfn(new Jy(t)))}function uU(n,t){return wWn(),new cW(n,t,0)}function oU(n,t){return wWn(),new cW(6,n,t)}function sU(n,t){return mK(n.substr(0,t.length),t)}function hU(n,t){return XC(t)?eY(n,t):!!AY(n.f,t)}function fU(n,t){for(kW(t);n.Ob();)t.td(n.Pb())}function lU(n,t,e){ODn(),this.e=n,this.d=t,this.a=e}function bU(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function wU(n){var t;for(t=n;t.f;)t=t.f;return t}function dU(n){var t;return Px(null!=(t=Eon(n))),t}function gU(n){var t;return Px(null!=(t=mln(n))),t}function pU(n,t){var e;return w6(t,e=n.a.gc()),e-t}function vU(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function mU(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function yU(n,t,e,i){ihn(t,e,n.length),mU(n,t,e,i)}function kU(n,t,e){Kz(e,n.a.c.length),c5(n.a,e,t)}function jU(n,t,e){this.c=n,this.a=t,SQ(),this.b=e}function EU(n,t,e){var i;return i=n.b[t],n.b[t]=e,i}function TU(n,t){return null==n.a.zc(t,n)}function MU(n){if(!n)throw Hp(new yv);return n.d}function SU(n,t){if(null==n)throw Hp(new Hy(t))}function PU(n,t){return!!t&&Frn(n,t)}function IU(n,t,e){return ehn(n,t.g,e),orn(n.c,t),n}function CU(n){return Mzn(n,(Ffn(),_Pt)),n.d=!0,n}function OU(n){return!n.j&&yb(n,FKn(n.g,n.b)),n.j}function AU(n){Mx(-1!=n.b),s6(n.c,n.a=n.b),n.b=-1}function $U(n){n.f=new eA(n),n.g=new iA(n),oY(n)}function LU(n){return new Rq(null,qU(n,n.length))}function NU(n){return new oz(new WL(n.a.length,n.a))}function xU(n){return M$(~n.l&SQn,~n.m&SQn,~n.h&PQn)}function DU(n){return typeof n===AWn||typeof n===xWn}function RU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function KU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function _U(n,t){return n>0?e.Math.log(n/t):-100}function FU(n,t){return Vhn(n,t)<0?-1:Vhn(n,t)>0?1:0}function BU(n,t,e){return SHn(n,BB(t,46),BB(e,167))}function HU(n,t){return BB(wz(lz(n.a)).Xb(t),42).cd()}function qU(n,t){return ptn(t,n.length),new BH(n,t)}function GU(n,t){this.d=n,AL.call(this,n),this.e=t}function zU(n){this.d=(kW(n),n),this.a=0,this.c=bVn}function UU(n,t){Ap.call(this,1),this.a=n,this.b=t}function XU(n,t){return n.c?XU(n.c,t):WB(n.b,t),n}function WU(n,t,e){var i;return i=dnn(n,t),r4(n,t,e),i}function VU(n,t){return m7(n.slice(0,t),n)}function QU(n,t,e){var i;for(i=0;i<t;++i)$X(n,i,e)}function YU(n,t,e,i,r){for(;t<e;)i[r++]=fV(n,t++)}function JU(n,t){return Pln(n.c.c+n.c.b,t.c.c+t.c.b)}function ZU(n,t){return null==Mon(n.a,t,(hN(),ptt))}function nX(n,t){r5(n.d,t,n.b.b,n.b),++n.a,n.c=null}function tX(n,t){J$(n,cL(t,153)?t:BB(t,1937).gl())}function eX(n,t){JT($V(n.Oc(),new Yr),new Cd(t))}function iX(n,t,e,i,r){NEn(n,BB(h6(t.k,e),15),e,i,r)}function rX(n){n.s=NaN,n.c=NaN,ZOn(n,n.e),ZOn(n,n.j)}function cX(n){n.a=null,n.e=null,$U(n.b),n.d=0,++n.c}function aX(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function uX(n,t,e){return BB(n.c._c(t,BB(e,133)),42)}function oX(){return ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])}function sX(n){return MQ(),JJ(PMn(n))==JJ(OMn(n))}function hX(n){$R.call(this),this.a=n,WB(n.a,this)}function fX(n,t){this.d=Sln(n),this.c=t,this.a=.5*t}function lX(){v4.call(this),this.a=!0,this.b=!0}function bX(n){return(null==n.i&&qFn(n),n.i).length}function wX(n){return cL(n,99)&&0!=(BB(n,18).Bb&h6n)}function dX(n,t){++n.j,sTn(n,n.i,t),zCn(n,BB(t,332))}function gX(n,t){return t=n.nk(null,t),$Tn(n,null,t)}function pX(n,t){return n.hi()&&(t=nZ(n,t)),n.Wh(t)}function vX(n,t,e){var i;return Qen(e,i=mX(n,t)),i}function mX(n,t){var e;return(e=new pon).j=n,e.d=t,e}function yX(n){if(null==n)throw Hp(new gv);return n}function kX(n){return n.j||(n.j=new wl(n))}function jX(n){return n.f||(n.f=new UL(n))}function EX(n){return n.k||(n.k=new Yf(n))}function TX(n){return n.k||(n.k=new Yf(n))}function MX(n){return n.g||(n.g=new Qf(n))}function SX(n){return n.i||(n.i=new nl(n))}function PX(n){return n.d||(n.d=new il(n))}function IX(n){return yX(n),cL(n,475)?BB(n,475):Bbn(n)}function CX(n){return cL(n,607)?n:new bJ(n)}function OX(n,t){return w2(t,n.c.b.c.gc()),new sT(n,t)}function AX(n,t,e){return wWn(),new T0(n,t,e)}function $X(n,t,e){return Sx(null==e||Q_n(n,e)),n[t]=e}function LX(n,t){var e;return w2(t,e=n.a.gc()),e-1-t}function NX(n,t){return n.a+=String.fromCharCode(t),n}function xX(n,t){return n.a+=String.fromCharCode(t),n}function DX(n,t){for(kW(t);n.c<n.d;)n.ze(t,n.c++)}function RX(n,t){return XC(t)?SJ(n,t):qC(AY(n.f,t))}function KX(n,t){return MQ(),n==PMn(t)?OMn(t):PMn(t)}function _X(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function FX(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function BX(n){this.b=new Np,this.a=new Np,this.c=n}function HX(n){this.c=new Gj,this.a=new Np,this.b=n}function qX(n){$R.call(this),this.a=new Gj,this.c=n}function GX(n){if(null==n)throw Hp(new gv);this.a=n}function zX(n){Mv(),this.b=new Np,this.a=n,vGn(this,n)}function UX(n){this.c=n,this.a=new YT,this.b=new YT}function XX(){XX=O,ott=new Ml(!1),stt=new Ml(!0)}function WX(){WX=O,s_(),Fnt=new SY((SQ(),SQ(),set))}function VX(){VX=O,s_(),Vnt=new vS((SQ(),SQ(),fet))}function QX(){QX=O,t$t=GCn(),gWn(),i$t&&Rkn()}function YX(n,t){return Crn(),BB(oV(n,t.d),15).Fc(t)}function JX(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function ZX(n,t,e){return NRn(n,yrn(n,t,e))}function nW(n,t){var e;dnn(n,e=n.a.length),r4(n,e,t)}function tW(n,t){console[n].call(console,t)}function eW(n,t){var e;++n.j,e=n.Vi(),n.Ii(n.oi(e,t))}function iW(n,t,e){BB(t.b,65),Otn(t.a,new EB(n,e,t))}function rW(n,t,e){jp.call(this,t),this.a=n,this.b=e}function cW(n,t,e){Ap.call(this,n),this.a=t,this.b=e}function aW(n,t,e){this.a=n,kp.call(this,t),this.b=e}function uW(n,t,e){this.a=n,H2.call(this,8,t,null,e)}function oW(n){this.a=(kW(_9n),_9n),this.b=n,new Nm}function sW(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function hW(n){this.c=n,this.b=n.a.d.a,bD(n.a.e,this)}function fW(n){Mx(-1!=n.c),n.d.$c(n.c),n.b=n.c,n.c=-1}function lW(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function bW(n,t){return Kz(t,n.a.c.length),xq(n.a,t)}function wW(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)}function dW(n){return 0>=n?new VT:Win(n-1)}function gW(n){return!!SNt&&eY(SNt,n)}function pW(n){return n?n.dc():!n.Kc().Ob()}function vW(n){return!n.a&&n.c?n.c.b:n.a}function mW(n){return!n.a&&(n.a=new $L(LOt,n,4)),n.a}function yW(n){return!n.d&&(n.d=new $L(VAt,n,1)),n.d}function kW(n){if(null==n)throw Hp(new gv);return n}function jW(n){n.c?n.c.He():(n.d=!0,QNn(n))}function EW(n){n.c?EW(n.c):(Qln(n),n.d=!0)}function TW(n){TV(n.a),n.b=x8(Ant,HWn,1,n.b.length,5,1)}function MW(n,t){return E$(t.j.c.length,n.j.c.length)}function SW(n,t){n.c<0||n.b.b<n.c?fO(n.b,t):n.a._e(t)}function PW(n,t){var e;(e=n.Yg(t))>=0?n.Bh(e):cCn(n,t)}function IW(n){return n.c.i.c==n.d.i.c}function CW(n){if(4!=n.p)throw Hp(new dv);return n.e}function OW(n){if(3!=n.p)throw Hp(new dv);return n.e}function AW(n){if(6!=n.p)throw Hp(new dv);return n.f}function $W(n){if(6!=n.p)throw Hp(new dv);return n.k}function LW(n){if(3!=n.p)throw Hp(new dv);return n.j}function NW(n){if(4!=n.p)throw Hp(new dv);return n.j}function xW(n){return!n.b&&(n.b=new Tp(new xm)),n.b}function DW(n){return-2==n.c&&gb(n,uMn(n.g,n.b)),n.c}function RW(n,t){var e;return(e=mX("",n)).n=t,e.i=1,e}function KW(n,t){LG(BB(t.b,65),n),Otn(t.a,new Aw(n))}function _W(n,t){f9((!n.a&&(n.a=new oR(n,n)),n.a),t)}function FW(n,t){this.b=n,GU.call(this,n,t),ML(this)}function BW(n,t){this.b=n,RK.call(this,n,t),SL(this)}function HW(n,t,e,i){vT.call(this,n,t),this.d=e,this.a=i}function qW(n,t,e,i){vT.call(this,n,e),this.a=t,this.f=i}function GW(n,t){W$.call(this,Vin(yX(n),yX(t))),this.a=t}function zW(){dMn.call(this,S7n,(rE(),dLt)),Wqn(this)}function UW(){dMn.call(this,V9n,(iE(),n$t)),OHn(this)}function XW(){gT.call(this,"DELAUNAY_TRIANGULATION",0)}function WW(n){return String.fromCharCode.apply(null,n)}function VW(n,t,e){return XC(t)?mZ(n,t,e):jIn(n.f,t,e)}function QW(n){return SQ(),n?n.ve():(PQ(),PQ(),get)}function YW(n,t,e){return Nun(),e.pg(n,BB(t.cd(),146))}function JW(n,t){return nq(),new svn(new rN(n),new iN(t))}function ZW(n){return lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))}function nV(){nV=O,Bnt=new hy(Pun(Gk(Hnt,1),kVn,42,0,[]))}function tV(n){return!n.d&&(n.d=new Hb(n.c.Cc())),n.d}function eV(n){return!n.a&&(n.a=new Lk(n.c.vc())),n.a}function iV(n){return!n.b&&(n.b=new Ak(n.c.ec())),n.b}function rV(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function cV(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)}function aV(n,t){return hN(),BB(t.b,19).a<n}function uV(n,t){return hN(),BB(t.a,19).a<n}function oV(n,t){return IG(n.a,t)?n.b[BB(t,22).g]:null}function sV(n,t,e,i){n.a=fx(n.a,0,t)+""+i+nO(n.a,e)}function hV(n,t){n.u.Hc((lCn(),eCt))&&PCn(n,t),z6(n,t)}function fV(n,t){return b1(t,n.length),n.charCodeAt(t)}function lV(){dy.call(this,"There is no more element.")}function bV(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function wV(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function dV(n,t,e,i){return Rcn(n,t,e,!1),Zfn(n,i),n}function gV(n){return n.j.c=x8(Ant,HWn,1,0,5,1),n.a=-1,n}function pV(n){return!n.c&&(n.c=new hK(KOt,n,5,8)),n.c}function vV(n){return!n.b&&(n.b=new hK(KOt,n,4,7)),n.b}function mV(n){return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n}function yV(n){return!n.c&&(n.c=new eU(XOt,n,9,9)),n.c}function kV(n){return n.e==I7n&&vb(n,Tgn(n.g,n.b)),n.e}function jV(n){return n.f==I7n&&mb(n,pkn(n.g,n.b)),n.f}function EV(n){var t;return!(t=n.b)&&(n.b=t=new Jf(n)),t}function TV(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function MV(n){if(zbn(n.d),n.d.d!=n.c)throw Hp(new vv)}function SV(n,t){this.b=n,this.c=t,this.a=new QT(this.b)}function PV(n,t,e){this.a=XVn,this.d=n,this.b=t,this.c=e}function IV(n,t){this.d=(kW(n),n),this.a=16449,this.c=t}function CV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function OV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function AV(n,t){return Qln(n),new Rq(n,new Q9(t,n.a))}function $V(n,t){return Qln(n),new Rq(n,new M6(t,n.a))}function LV(n,t){return Qln(n),new AD(n,new E6(t,n.a))}function NV(n,t){return Qln(n),new $D(n,new T6(t,n.a))}function xV(n,t){return new pY(BB(yX(n),62),BB(yX(t),62))}function DV(n,t){return jM(),Pln((kW(n),n),(kW(t),t))}function RV(){return wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])}function KV(){return IM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])}function _V(){return CM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])}function FV(){return OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])}function BV(n){this.a=new Np,this.e=x8(ANt,sVn,48,n,0,2)}function HV(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function qV(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function GV(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function zV(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function UV(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function XV(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function WV(n,t,e,i){gT.call(this,n,t),this.a=e,this.b=i}function VV(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function QV(n,t,e){EHn(n.a,e),nun(e),AAn(n.b,e),rqn(t,e)}function YV(n,t,e){var i;return i=$Un(n),t.Kh(e,i)}function JV(n,t){var e,i;return(e=n/t)>(i=IJ(e))&&++i,i}function ZV(n){var t;return cen(t=new Kp,n),t}function nQ(n){var t;return DMn(t=new Kp,n),t}function tQ(n,t){return Kcn(t,RX(n.f,t)),null}function eQ(n){return Yin(n)||null}function iQ(n){return!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b}function rQ(n){return null!=n&&xT(jAt,n.toLowerCase())}function cQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function aQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function uQ(n,t){return Pln(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function oQ(n,t){return Pln(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function sQ(n,t,e){e.a?Ien(n,t.b-n.f/2):Pen(n,t.a-n.g/2)}function hQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function fQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function lQ(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function bQ(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function wQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function dQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function gQ(n,t){this.a=n,OD.call(this,n,BB(n.d,15).Zc(t))}function pQ(n){this.f=n,this.c=this.f.e,n.f>0&&ujn(this)}function vQ(n,t,e,i){this.b=n,this.c=i,vO.call(this,t,e)}function mQ(n){return Px(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function yQ(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function kQ(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function jQ(n){return n.n&&(n.e!==FVn&&n._d(),n.j=null),n}function EQ(n){return JH(null==n||DU(n)&&!(n.im===C)),n}function TQ(n){this.b=new Np,gun(this.b,this.b),this.a=n}function MQ(){MQ=O,Sct=new Np,Mct=new xp,Tct=new Np}function SQ(){SQ=O,set=new S,het=new I,fet=new M}function PQ(){PQ=O,wet=new R,det=new R,get=new K}function IQ(){IQ=O,hit=new gn,lit=new RG,fit=new pn}function CQ(){256==ait&&(iit=rit,rit=new r,ait=0),++ait}function OQ(n){return n.f||(n.f=new pT(n,n.c))}function AQ(n){return QCn(n)&&qy(TD(ZAn(n,(HXn(),dgt))))}function $Q(n,t){return JCn(n,BB(mMn(t,(HXn(),Wgt)),19),t)}function LQ(n,t){return Tfn(n.j,t.s,t.c)+Tfn(t.e,n.s,n.c)}function NQ(n,t){n.e&&!n.e.a&&(Fp(n.e,t),NQ(n.e,t))}function xQ(n,t){n.d&&!n.d.a&&(Fp(n.d,t),xQ(n.d,t))}function DQ(n,t){return-Pln(iG(n)*eG(n),iG(t)*eG(t))}function RQ(n){return BB(n.cd(),146).tg()+":"+Bbn(n.dd())}function KQ(n){var t;G_(),(t=BB(n.g,10)).n.a=n.d.c+t.d.b}function _Q(n,t,e){return MM(),xbn(BB(RX(n.e,t),522),e)}function FQ(n,t){return tsn(n),tsn(t),Py(BB(n,22),BB(t,22))}function BQ(n,t,e){n.i=0,n.e=0,t!=e&&Xon(n,t,e)}function HQ(n,t,e){n.i=0,n.e=0,t!=e&&Won(n,t,e)}function qQ(n,t,e){rtn(n,t,new Sl(XK(e)))}function GQ(n,t,e,i,r,c){j9.call(this,n,t,e,i,r,c?-2:-1)}function zQ(n,t,e,i){LC.call(this,t,e),this.b=n,this.a=i}function UQ(n,t){new YT,this.a=new km,this.b=n,this.c=t}function XQ(n,t){return BB(mMn(n,(hWn(),clt)),15).Fc(t),t}function WQ(n,t){if(null==n)throw Hp(new Hy(t));return n}function VQ(n){return!n.q&&(n.q=new eU(QAt,n,11,10)),n.q}function QQ(n){return!n.s&&(n.s=new eU(FAt,n,21,17)),n.s}function YQ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a}function JQ(n){return cL(n,14)?new $q(BB(n,14)):qB(n.Kc())}function ZQ(n){return new qL(n,n.e.Hd().gc()*n.c.Hd().gc())}function nY(n){return new GL(n,n.e.Hd().gc()*n.c.Hd().gc())}function tY(n){return n&&n.hashCode?n.hashCode():PN(n)}function eY(n,t){return null==t?!!AY(n.f,null):MG(n.g,t)}function iY(n){return yX(n),emn(new oz(ZL(n.a.Kc(),new h)))}function rY(n){return SQ(),cL(n,54)?new $k(n):new bN(n)}function cY(n,t,e){return!!n.f&&n.f.Ne(t,e)}function aY(n,t){return n.a=fx(n.a,0,t)+""+nO(n.a,t+1),n}function uY(n,t){var e;return(e=eL(n.a,t))&&(t.d=null),e}function oY(n){var t,e;t=0|(e=n).$modCount,e.$modCount=t+1}function sY(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function hY(n){this.b=n,this.a=new dE(BB(yX(new tt),62))}function fY(n){this.c=n,this.b=new dE(BB(yX(new vn),62))}function lY(n){this.c=n,this.b=new dE(BB(yX(new Ct),62))}function bY(){this.a=new Qv,this.b=new hm,this.d=new Dt}function wY(){this.a=new km,this.b=(lin(3,AVn),new J6(3))}function dY(){this.b=new Rv,this.d=new YT,this.e=new om}function gY(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function pY(n,t){zm.call(this,new Wz(n)),this.a=n,this.b=t}function vY(){iSn(this,new Rf),this.wb=(QX(),t$t),iE()}function mY(n){OTn(n,"No crossing minimization",1),HSn(n)}function yY(n){Dk(),e.setTimeout((function(){throw n}),0)}function kY(n){return n.u||(P5(n),n.u=new uR(n,n)),n.u}function jY(n){return BB(yan(n,16),26)||n.zh()}function EY(n,t){return cL(t,146)&&mK(n.b,BB(t,146).tg())}function TY(n,t){return n.a?t.Wg().Kc():BB(t.Wg(),69).Zh()}function MY(n){return n.k==(uSn(),Iut)&&Lx(n,(hWn(),zft))}function SY(n){this.a=(SQ(),cL(n,54)?new $k(n):new bN(n))}function PY(){var n,t;PY=O,t=!Ddn(),n=new d,ett=t?new E:n}function IY(n,t){var e;return e=nE(n.gm),null==t?e:e+": "+t}function CY(n,t){var e;return j4(e=n.b.Qc(t),n.b.gc()),e}function OY(n,t){if(null==n)throw Hp(new Hy(t));return n}function AY(n,t){return hhn(n,t,pZ(n,null==t?0:n.b.se(t)))}function $Y(n,t,e){return e>=0&&mK(n.substr(e,t.length),t)}function LY(n,t,e,i,r,c,a){return new b4(n.e,t,e,i,r,c,a)}function NY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function xY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function DY(n,t){this.g=n,this.d=Pun(Gk(Out,1),a1n,10,0,[t])}function RY(n,t){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t}function KY(n,t){NR.call(this),xtn(this),this.a=n,this.c=t}function _Y(n,t,e,i){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i)}function FY(n,t,e,i){$X(n.c[t.g],t.g,e),$X(n.b[t.g],t.g,i)}function BY(){return A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])}function HY(){return g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])}function qY(){return _nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])}function GY(){return V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])}function zY(){return z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])}function UY(){return U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])}function XY(){return Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])}function WY(){return O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])}function VY(){return gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])}function QY(){return oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])}function YY(){return dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])}function JY(){return B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])}function ZY(){return sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])}function nJ(){return Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])}function tJ(){return D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])}function eJ(){return Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])}function iJ(){return $6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])}function rJ(){return hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])}function cJ(){return Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])}function aJ(){return Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])}function uJ(){return Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])}function oJ(n,t,e,i){return e>=0?n.jh(t,e,i):n.Sg(null,e,i)}function sJ(n){return 0==n.b.b?n.a.$e():dH(n.b)}function hJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.f)}function fJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.k)}function lJ(n){return GC(n.a)===GC((wcn(),C$t))&&Rqn(n),n.a}function bJ(n){this.a=BB(yX(n),271),this.b=(SQ(),new dN(n))}function wJ(n,t){Zl(this,new xI(n.a,n.b)),nb(this,zB(t))}function dJ(){dJ=O,Lyt=new oI(cJn,0),Nyt=new oI(aJn,1)}function gJ(){gJ=O,tyt=new cI(aJn,0),nyt=new cI(cJn,1)}function pJ(){ay.call(this,new XT(etn(12))),aN(!0),this.a=2}function vJ(n,t,e){wWn(),Ap.call(this,n),this.b=t,this.a=e}function mJ(n,t,e){f$(),jp.call(this,t),this.a=n,this.b=e}function yJ(n){NR.call(this),xtn(this),this.a=n,this.c=!0}function kJ(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function jJ(n){pin(n.a),RA(n.a),twn(new Pw(n.a))}function EJ(n,t){oRn(n,!0),Otn(n.e.wf(),new $_(n,!0,t))}function TJ(n,t){return c4(t),Yen(n,x8(ANt,hQn,25,t,15,1),t)}function MJ(n,t){return MQ(),n==JJ(PMn(t))||n==JJ(OMn(t))}function SJ(n,t){return null==t?qC(AY(n.f,null)):hS(n.g,t)}function PJ(n){return 0==n.b?null:(Px(0!=n.b),Atn(n,n.a.a))}function IJ(n){return 0|Math.max(Math.min(n,DWn),-2147483648)}function CJ(n,t){var e=Znt[n.charCodeAt(0)];return null==e?n:e}function OJ(n,t){return WQ(n,"set1"),WQ(t,"set2"),new ET(n,t)}function AJ(n,t){return UR(qx(nen(n.f,t)),n.f.d)}function $J(n,t){var e;return YGn(n,t,e=new q),e.d}function LJ(n,t,e,i){var r;r=new FR,t.a[e.g]=r,mG(n.b,i,r)}function NJ(n,t,e){var i;(i=n.Yg(t))>=0?n.sh(i,e):TLn(n,t,e)}function xJ(n,t,e){hZ(),n&&VW(fAt,n,t),n&&VW(hAt,n,e)}function DJ(n,t,e){this.i=new Np,this.b=n,this.g=t,this.a=e}function RJ(n,t,e){this.c=new Np,this.e=n,this.f=t,this.b=e}function KJ(n,t,e){this.a=new Np,this.e=n,this.f=t,this.c=e}function _J(n,t){V$(this),this.f=t,this.g=n,jQ(this),this._d()}function FJ(n,t){var e;e=n.q.getHours(),n.q.setDate(t),lBn(n,e)}function BJ(n,t){var e;for(yX(t),e=n.a;e;e=e.c)t.Od(e.g,e.i)}function HJ(n){var t;return $on(t=new bE(etn(n.length)),n),t}function qJ(n){function t(){}return t.prototype=n||{},new t}function GJ(n,t){return!!wun(n,t)&&(ein(n),!0)}function zJ(n,t){if(null==t)throw Hp(new gv);return ugn(n,t)}function UJ(n){if(n.qe())return null;var t=n.n;return SWn[t]}function XJ(n){return n.Db>>16!=3?null:BB(n.Cb,33)}function WJ(n){return n.Db>>16!=9?null:BB(n.Cb,33)}function VJ(n){return n.Db>>16!=6?null:BB(n.Cb,79)}function QJ(n){return n.Db>>16!=7?null:BB(n.Cb,235)}function YJ(n){return n.Db>>16!=7?null:BB(n.Cb,160)}function JJ(n){return n.Db>>16!=11?null:BB(n.Cb,33)}function ZJ(n,t){var e;return(e=n.Yg(t))>=0?n.lh(e):qCn(n,t)}function nZ(n,t){var e;return oMn(e=new Lq(t),n),new t_(e)}function tZ(n){var t;return t=n.d,t=n.si(n.f),f9(n,t),t.Ob()}function eZ(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function iZ(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function rZ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a.i>0}function cZ(){this.a=new fA,this.e=new Rv,this.g=0,this.i=0}function aZ(n){this.a=n,this.b=x8(_mt,sVn,1944,n.e.length,0,2)}function uZ(n,t,e){var i;i=Non(n,t,e),n.b=new mrn(i.c.length)}function oZ(){oZ=O,ryt=new rI(pJn,0),cyt=new rI("UP",1)}function sZ(){sZ=O,Rkt=new bI(U3n,0),Kkt=new bI("FAN",1)}function hZ(){hZ=O,fAt=new xp,hAt=new xp,FC(yet,new wo)}function fZ(n){if(0!=n.p)throw Hp(new dv);return JC(n.f,0)}function lZ(n){if(0!=n.p)throw Hp(new dv);return JC(n.k,0)}function bZ(n){return n.Db>>16!=3?null:BB(n.Cb,147)}function wZ(n){return n.Db>>16!=6?null:BB(n.Cb,235)}function dZ(n){return n.Db>>16!=17?null:BB(n.Cb,26)}function gZ(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.le(t))}function pZ(n,t){var e;return null==(e=n.a.get(t))?new Array:e}function vZ(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),lBn(n,e)}function mZ(n,t,e){return null==t?jIn(n.f,null,e):ubn(n.g,t,e)}function yZ(n,t,e,i,r,c){return new N7(n.e,t,n.aj(),e,i,r,c)}function kZ(n,t,e){return n.a=fx(n.a,0,t)+""+e+nO(n.a,t),n}function jZ(n,t,e){return WB(n.a,(nV(),zvn(t,e),new vT(t,e))),n}function EZ(n){return oN(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function TZ(n){return oN(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function MZ(n,t){n.d&&y7(n.d.e,n),n.d=t,n.d&&WB(n.d.e,n)}function SZ(n,t){n.c&&y7(n.c.g,n),n.c=t,n.c&&WB(n.c.g,n)}function PZ(n,t){n.c&&y7(n.c.a,n),n.c=t,n.c&&WB(n.c.a,n)}function IZ(n,t){n.i&&y7(n.i.j,n),n.i=t,n.i&&WB(n.i.j,n)}function CZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function OZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function AZ(n,t){this.a=n,this.c=B$(this.a),this.b=new gY(t)}function $Z(n){return Qln(n),AV(n,new vw(new Rv))}function LZ(n,t){if(n<0||n>t)throw Hp(new Ay(jYn+n+EYn+t))}function NZ(n,t){return CG(n.a,t)?EU(n,BB(t,22).g,null):null}function xZ(n){return Shn(),hN(),0!=BB(n.a,81).d.e}function DZ(){DZ=O,Xnt=lhn((ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])))}function RZ(){RZ=O,pmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function KZ(){KZ=O,vmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function _Z(){_Z=O,ymt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function FZ(){FZ=O,zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function BZ(){BZ=O,Qmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function HZ(){HZ=O,Zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function qZ(){qZ=O,oyt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function GZ(){GZ=O,zkt=WG(new B2,(zyn(),Fyt),(DPn(),zyt))}function zZ(n,t,e,i){this.c=n,this.d=i,WZ(this,t),VZ(this,e)}function UZ(n){this.c=new YT,this.b=n.b,this.d=n.c,this.a=n.a}function XZ(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function WZ(n,t){n.a&&y7(n.a.k,n),n.a=t,n.a&&WB(n.a.k,n)}function VZ(n,t){n.b&&y7(n.b.f,n),n.b=t,n.b&&WB(n.b.f,n)}function QZ(n,t){iW(n,n.b,n.c),BB(n.b.b,65),t&&BB(t.b,65).b}function YZ(n,t){zln(n,t),cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),2)}function JZ(n,t){cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,t)}function ZZ(n,t){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,t)}function n1(n,t){return ZM(),hnn(t)?new lq(t,n):new xC(t,n)}function t1(n,t){null!=t.c&&nW(n,new GX(t.c))}function e1(n){var t;return iE(),cen(t=new Kp,n),t}function i1(n){var t;return iE(),cen(t=new Kp,n),t}function r1(n,t){var e;return e=new HX(n),t.c[t.c.length]=e,e}function c1(n,t){var e;return(e=BB(lfn(OQ(n.a),t),14))?e.gc():0}function a1(n){return Qln(n),PQ(),PQ(),ytn(n,det)}function u1(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function o1(n,t){Um.call(this,new XT(etn(n))),lin(t,oVn),this.a=t}function s1(n,t,e){Hfn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function h1(n,t,e){var i;Hfn(t,e,n.c.length),i=e-t,PE(n.c,t,i)}function f1(n,t){hL(n,dG(e0(kz(t,24),sYn)),dG(e0(t,sYn)))}function l1(n,t){if(n<0||n>=t)throw Hp(new Ay(jYn+n+EYn+t))}function b1(n,t){if(n<0||n>=t)throw Hp(new Ok(jYn+n+EYn+t))}function w1(n,t){this.b=(kW(n),n),this.a=0==(t&_Qn)?64|t|hVn:t}function d1(n){DA(this),Pv(this.a,kon(e.Math.max(8,n))<<1)}function g1(n){return Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))}function p1(){return qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])}function v1(){return Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])}function m1(){return J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])}function y1(){return G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])}function k1(){return Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])}function j1(){return q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Cat,Aat])}function E1(){return Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])}function T1(){return Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])}function M1(){return uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])}function S1(){return Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])}function P1(){return Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])}function I1(){return z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Ift,Sft])}function C1(){return Kan(),Pun(Gk(Cft,1),$Vn,292,0,[jft,Eft,kft])}function O1(){return ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])}function A1(){return mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])}function $1(){return Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])}function L1(){return $un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])}function N1(){return Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])}function x1(){return dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])}function D1(){return oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])}function R1(){return Ibn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])}function K1(){return Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])}function _1(){return Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])}function F1(){return Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])}function B1(){return Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])}function H1(){return ufn(),Pun(Gk(SIt,1),$Vn,334,0,[vIt,pIt,mIt])}function q1(){return Rtn(),Pun(Gk(nIt,1),$Vn,272,0,[zPt,UPt,XPt])}function G1(n,t){return k$n(n,t,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z1(n,t,e){var i;return(i=cHn(n,t,!1)).b<=t&&i.a<=e}function U1(n,t,e){var i;(i=new ca).b=t,i.a=e,++t.b,WB(n.d,i)}function X1(n,t){var e;return Tx(!!(e=(kW(n),n).g)),kW(t),e(t)}function W1(n,t){var e,i;return i=pU(n,t),e=n.a.Zc(i),new kT(n,e)}function V1(n){return n.Db>>16!=6?null:BB(cAn(n),235)}function Q1(n){if(2!=n.p)throw Hp(new dv);return dG(n.f)&QVn}function Y1(n){if(2!=n.p)throw Hp(new dv);return dG(n.k)&QVn}function J1(n){return n.a==(R5(),eLt)&&db(n,eLn(n.g,n.b)),n.a}function Z1(n){return n.d==(R5(),eLt)&&pb(n,NKn(n.g,n.b)),n.d}function n0(n){return Px(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function t0(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function e0(n,t){return uan(Sz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function i0(n,t){return uan(Pz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function r0(n,t){return uan(Iz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function c0(n){return rbn(yz(fan(H$n(n,32)),32),fan(H$n(n,32)))}function a0(n){return yX(n),cL(n,14)?new t_(BB(n,14)):HB(n.Kc())}function u0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(n.c,t.c)}function o0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(n.c,t.c)}function s0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(t.c,n.c)}function h0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(t.c,n.c)}function f0(n,t){var e;e=Gy(MD(n.a.We((sWn(),OPt)))),VUn(n,t,e)}function l0(n,t){var e;e=BB(RX(n.g,t),57),Otn(t.d,new oP(n,e))}function b0(n,t){var e,i;return(e=oyn(n))<(i=oyn(t))?-1:e>i?1:0}function w0(n,t){var e;return e=S7(t),BB(RX(n.c,e),19).a}function d0(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function g0(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function p0(n){return null==n.c||0==n.c.length?"n_"+n.b:"n_"+n.c}function v0(n,t){return n&&n.equals?n.equals(t):GC(n)===GC(t)}function m0(n,t){return 0==t?!!n.o&&0!=n.o.f:vpn(n,t)}function y0(n,t,e){var i;n.n&&t&&e&&(i=new Zu,WB(n.e,i))}function k0(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function j0(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function E0(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function T0(n,t,e){Ap.call(this,25),this.b=n,this.a=t,this.c=e}function M0(n){wWn(),Ap.call(this,n),this.c=!1,this.a=!1}function S0(n,t,e,i,r,c){Hen.call(this,n,t,e,i,r),c&&(this.o=-2)}function P0(n,t,e,i,r,c){qen.call(this,n,t,e,i,r),c&&(this.o=-2)}function I0(n,t,e,i,r,c){J5.call(this,n,t,e,i,r),c&&(this.o=-2)}function C0(n,t,e,i,r,c){Uen.call(this,n,t,e,i,r),c&&(this.o=-2)}function O0(n,t,e,i,r,c){Z5.call(this,n,t,e,i,r),c&&(this.o=-2)}function A0(n,t,e,i,r,c){Gen.call(this,n,t,e,i,r),c&&(this.o=-2)}function $0(n,t,e,i,r,c){zen.call(this,n,t,e,i,r),c&&(this.o=-2)}function L0(n,t,e,i,r,c){n6.call(this,n,t,e,i,r),c&&(this.o=-2)}function N0(n,t,e,i){jp.call(this,e),this.b=n,this.c=t,this.d=i}function x0(n,t){this.a=new Np,this.d=new Np,this.f=n,this.c=t}function D0(){this.c=new $$,this.a=new bY,this.b=new em,bM()}function R0(){Nun(),this.b=new xp,this.a=new xp,this.c=new Np}function K0(n,t){this.g=n,this.d=(R5(),eLt),this.a=eLt,this.b=t}function _0(n,t){this.f=n,this.a=(R5(),tLt),this.c=tLt,this.b=t}function F0(n,t){!n.c&&(n.c=new Ecn(n,0)),MHn(n.c,(Uqn(),LLt),t)}function B0(){B0=O,Hkt=new wI("DFS",0),Bkt=new wI("BFS",1)}function H0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Hc(e)}function q0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Mc(e)}function G0(n,t,e,i){return n.a+=""+fx(null==t?zWn:Bbn(t),e,i),n}function z0(n,t,e,i,r,c){return Rcn(n,t,e,c),Jfn(n,i),tln(n,r),n}function U0(n){return Px(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function X0(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function W0(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function V0(n){return!(!n.a||0==H7(n.a.a).i||n.b&&Kvn(n.b))}function Q0(n){return!(!n.u||0==a4(n.u.a).i||n.n&&Rvn(n.n))}function Y0(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),16,new zf(n))}function J0(n,t){return FU(fan(n.q.getTime()),fan(t.q.getTime()))}function Z0(n){return BB(Qgn(n,x8(yut,c1n,17,n.c.length,0,1)),474)}function n2(n){return BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193)}function t2(n){return BZ(),!(b5(n)||!b5(n)&&n.c.i.c==n.d.i.c)}function e2(n,t,e){yX(n),xyn(new CZ(new t_(n),t,e))}function i2(n,t,e){yX(n),Dyn(new OZ(new t_(n),t,e))}function r2(n,t){var e;return e=1-t,n.a[e]=wrn(n.a[e],e),wrn(n,t)}function c2(n,t){var e;n.e=new Jm,m$(e=wDn(t),n.c),CDn(n,e,0)}function a2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.a,r)}function u2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.b,r)}function o2(n){var t,e;return e=t_n(t=new lX,n),yzn(t),e}function s2(){var n,t;return n=new Kp,WB(V$t,t=n),t}function h2(n){return n.j.c=x8(Ant,HWn,1,0,5,1),TV(n.c),gV(n.a),n}function f2(n){return MM(),cL(n.g,10)?BB(n.g,10):null}function l2(n){return!EV(n).dc()&&(L$(n,new m),!0)}function b2(n){if(!("stack"in n))try{throw n}catch(t){}return n}function w2(n,t){if(n<0||n>=t)throw Hp(new Ay(LIn(n,t)));return n}function d2(n,t,e){if(n<0||t<n||t>e)throw Hp(new Ay(oPn(n,t,e)))}function g2(n,t){if(TU(n.a,t),t.d)throw Hp(new dy(CYn));t.d=n}function p2(n,t){if(t.$modCount!=n.$modCount)throw Hp(new vv)}function v2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function m2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function y2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function k2(n,t){return n.a<=n.b&&(t.ud(n.a++),!0)}function j2(n){var t;return JO(n)?-0==(t=n)?0:t:pnn(n)}function E2(n){var t;return EW(n),t=new F,gE(n.a,new gw(t)),t}function T2(n){var t;return EW(n),t=new _,gE(n.a,new dw(t)),t}function M2(n,t){this.a=n,Sb.call(this,n),LZ(t,n.gc()),this.b=t}function S2(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function P2(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),273,new Gf(n))}function I2(n){return new J6((lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))))}function C2(n){return BB(Qgn(n,x8(Gut,u1n,11,n.c.length,0,1)),1943)}function O2(n,t,e){return e.f.c.length>0?BU(n.a,t,e):BU(n.b,t,e)}function A2(n,t,e){n.d&&y7(n.d.e,n),n.d=t,n.d&&kG(n.d.e,e,n)}function $2(n,t){vXn(t,n),aH(n.d),aH(BB(mMn(n,(HXn(),Agt)),207))}function L2(n,t){pXn(t,n),cH(n.d),cH(BB(mMn(n,(HXn(),Agt)),207))}function N2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.fe()),i}function x2(n,t){var e,i;return i=null,(e=dnn(n,t))&&(i=e.ie()),i}function D2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.ie()),i}function R2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=yPn(e)),i}function K2(n,t,e){var i;return i=Qdn(e),wKn(n.g,i,t),wKn(n.i,t,e),t}function _2(n,t,e){var i;i=Ldn();try{return dR(n,t,e)}finally{y3(i)}}function F2(n){var t;t=n.Wg(),this.a=cL(t,69)?BB(t,69).Zh():t.Kc()}function B2(){Ym.call(this),this.j.c=x8(Ant,HWn,1,0,5,1),this.a=-1}function H2(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function q2(n,t,e,i){this.e=i,this.d=null,this.c=n,this.a=t,this.b=e}function G2(n,t,e){this.d=new Fd(this),this.e=n,this.i=t,this.f=e}function z2(){z2=O,Aft=new DP(eJn,0),$ft=new DP("TOP_LEFT",1)}function U2(){U2=O,Tmt=JW(iln(1),iln(4)),Emt=JW(iln(1),iln(2))}function X2(){X2=O,JEt=lhn((CM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])))}function W2(){W2=O,VEt=lhn((IM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])))}function V2(){V2=O,UTt=lhn((OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])))}function Q2(){Q2=O,act=lhn((wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])))}function Y2(){return Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])}function J2(){return Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])}function Z2(){return qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])}function n3(){return Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])}function t3(){return Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])}function e3(){return Cun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])}function i3(n,t,e,i){return cL(e,54)?new Ox(n,t,e,i):new sz(n,t,e,i)}function r3(){return Oun(),Pun(Gk(Cst,1),$Vn,411,0,[vst,mst,yst,kst])}function c3(n){return n.j==(kUn(),SCt)&&SN(UOn(n),oCt)}function a3(n,t){var e;SZ(e=t.a,t.c.d),MZ(e,t.d.d),Ztn(e.a,n.n)}function u3(n,t){return BB($N(Cz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function o3(n,t){return BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function s3(n){return new w1(tcn(BB(n.a.dd(),14).gc(),n.a.cd()),16)}function h3(n){return cL(n,14)?BB(n,14).dc():!n.Kc().Ob()}function f3(n){return MM(),cL(n.g,145)?BB(n.g,145):null}function l3(n){if(n.e.g!=n.b)throw Hp(new vv);return!!n.c&&n.d>0}function b3(n){return Px(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function w3(n,t){kW(t),$X(n.a,n.c,t),n.c=n.c+1&n.a.length-1,wyn(n)}function d3(n,t){kW(t),n.b=n.b-1&n.a.length-1,$X(n.a,n.b,t),wyn(n)}function g3(n,t){var e;for(e=n.j.c.length;e<t;e++)WB(n.j,n.rg())}function p3(n,t,e,i){var r;return r=i[t.g][e.g],Gy(MD(mMn(n.a,r)))}function v3(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function m3(n,t,e,i,r){this.a=n,this.e=t,this.f=e,this.b=i,this.g=r}function y3(n){n&&Cnn((sk(),ttt)),--ctt,n&&-1!=utt&&(iS(utt),utt=-1)}function k3(){return bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])}function j3(){return zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])}function E3(){return Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])}function T3(){return mdn(),Pun(Gk(YCt,1),$Vn,374,0,[KCt,_Ct,RCt,DCt])}function M3(){return Xyn(),Pun(Gk(RIt,1),$Vn,285,0,[MIt,jIt,EIt,TIt])}function S3(){return Mbn(),Pun(Gk(oIt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])}function P3(){return Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZCt,tOt,nOt])}function I3(){return Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])}function C3(n){return hZ(),hU(fAt,n)?BB(RX(fAt,n),331).ug():null}function O3(n,t,e){return t<0?qCn(n,e):BB(e,66).Nj().Sj(n,n.yh(),t)}function A3(n,t,e){var i;return i=Qdn(e),wKn(n.d,i,t),VW(n.e,t,e),t}function $3(n,t,e){var i;return i=Qdn(e),wKn(n.j,i,t),VW(n.k,t,e),t}function L3(n){var t;return tE(),t=new io,n&&HLn(t,n),t}function N3(n){var t;return t=n.ri(n.i),n.i>0&&aHn(n.g,0,t,0,n.i),t}function x3(n,t){var e;return nS(),!(e=BB(RX(mAt,n),55))||e.wj(t)}function D3(n){if(1!=n.p)throw Hp(new dv);return dG(n.f)<<24>>24}function R3(n){if(1!=n.p)throw Hp(new dv);return dG(n.k)<<24>>24}function K3(n){if(7!=n.p)throw Hp(new dv);return dG(n.k)<<16>>16}function _3(n){if(7!=n.p)throw Hp(new dv);return dG(n.f)<<16>>16}function F3(n){var t;for(t=0;n.Ob();)n.Pb(),t=rbn(t,1);return ttn(t)}function B3(n,t){var e;return e=new Ck,n.xd(e),e.a+="..",t.yd(e),e.a}function H3(n,t,e){var i;i=BB(RX(n.g,e),57),WB(n.a.c,new rC(t,i))}function q3(n,t,e){return Tz(MD(qC(AY(n.f,t))),MD(qC(AY(n.f,e))))}function G3(n,t,e){return UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z3(n,t,e){return pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function U3(n,t,e){return x$n(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function X3(n,t){return n==(uSn(),Iut)&&t==Iut?4:n==Iut||t==Iut?8:32}function W3(n,t){return GC(t)===GC(n)?"(this Map)":null==t?zWn:Bbn(t)}function V3(n,t){return BB(null==t?qC(AY(n.f,null)):hS(n.g,t),281)}function Q3(n,t,e){var i;return i=Qdn(e),VW(n.b,i,t),VW(n.c,t,e),t}function Y3(n,t){var e;for(e=t;e;)_x(n,e.i,e.j),e=JJ(e);return n}function J3(n,t){var e;return e=rY(HB(new I7(n,t))),Iq(new I7(n,t)),e}function Z3(n,t){var e;return ZM(),TSn(e=BB(n,66).Mj(),t),e.Ok(t)}function n4(n,t,e,i,r){WB(t,mIn(r,X$n(r,e,i))),UMn(n,r,t)}function t4(n,t,e){n.i=0,n.e=0,t!=e&&(Won(n,t,e),Xon(n,t,e))}function e4(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+sQn),lBn(n,e)}function i4(n,t,e){if(e){var i=e.ee();n.a[t]=i(e)}else delete n.a[t]}function r4(n,t,e){if(e){var i=e.ee();e=i(e)}else e=void 0;n.a[t]=e}function c4(n){if(n<0)throw Hp(new By("Negative array size: "+n))}function a4(n){return n.n||(P5(n),n.n=new YG(n,VAt,n),kY(n)),n.n}function u4(n){return Px(n.a<n.c.a.length),n.b=n.a,Ann(n),n.c.b[n.b]}function o4(n){n.b!=n.c&&(n.a=x8(Ant,HWn,1,8,5,1),n.b=0,n.c=0)}function s4(n){this.b=new xp,this.c=new xp,this.d=new xp,this.a=n}function h4(n,t){wWn(),Ap.call(this,n),this.a=t,this.c=-1,this.b=-1}function f4(n,t,e,i){j0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function l4(n,t,e,i){E0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function b4(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),this.c=n,this.a=e}function w4(n,t,e){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t,this.d=e}function d4(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function g4(n){this.c=n,this.a=BB(Ckn(n),148),this.b=this.a.Aj().Nh()}function p4(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function v4(){xp.call(this),jx(this),this.d.b=this.d,this.d.a=this.d}function m4(n,t){$R.call(this),this.a=n,this.b=t,WB(this.a.b,this)}function y4(n,t){return iO(null!=t?SJ(n,t):qC(AY(n.f,t)))}function k4(n,t){return iO(null!=t?SJ(n,t):qC(AY(n.f,t)))}function j4(n,t){var e;for(e=0;e<t;++e)$X(n,e,new Ub(BB(n[e],42)))}function E4(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function T4(n,t){var e;return zsn(),0!=(e=n.j.g-t.j.g)?e:0}function M4(n,t){return kW(t),null!=n.a?PG(t.Kb(n.a)):Set}function S4(n){var t;return n?new Lq(n):(qrn(t=new fA,n),t)}function P4(n,t){return t.b.Kb(T7(n,t.c.Ee(),new yw(t)))}function I4(n){yTn(),hL(this,dG(e0(kz(n,24),sYn)),dG(e0(n,sYn)))}function C4(){C4=O,pit=lhn((hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])))}function O4(){O4=O,kit=lhn((Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])))}function A4(){A4=O,_ct=lhn((Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])))}function $4(){$4=O,zut=lhn((Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])))}function L4(){L4=O,Cht=lhn((_nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])))}function N4(){N4=O,Uht=lhn((g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])))}function x4(){x4=O,tmt=lhn((A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])))}function D4(){D4=O,Bvt=lhn((U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])))}function R4(){R4=O,oht=lhn((V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])))}function K4(){K4=O,Nft=lhn((z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])))}function _4(){_4=O,Pyt=lhn((O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])))}function F4(){F4=O,Gmt=lhn((Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])))}function B4(){B4=O,iyt=lhn((gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])))}function H4(){H4=O,uyt=lhn((oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])))}function q4(){q4=O,Dyt=lhn((dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])))}function G4(){G4=O,Gkt=lhn((B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])))}function z4(){z4=O,Zkt=lhn((Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])))}function U4(){U4=O,Fkt=lhn((sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])))}function X4(){X4=O,ojt=lhn((D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])))}function W4(){W4=O,QTt=lhn((Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])))}function V4(){V4=O,eTt=lhn(($6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])))}function Q4(){Q4=O,Hmt=new JP("UPPER",0),Bmt=new JP("LOWER",1)}function Y4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function J4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function Z4(n,t){var e,i;i=!1;do{i|=e=bon(n,t)}while(e);return i}function n5(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function t5(n,t){var e;for(e=t;e;)_x(n,-e.i,-e.j),e=JJ(e);return n}function e5(n,t){var e,i;for(kW(t),i=n.Kc();i.Ob();)e=i.Pb(),t.td(e)}function i5(n,t){var e;return new vT(e=t.cd(),n.e.pc(e,BB(t.dd(),14)))}function r5(n,t,e,i){var r;(r=new $).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function c5(n,t,e){var i;return l1(t,n.c.length),i=n.c[t],n.c[t]=e,i}function a5(n,t,e){return BB(null==t?jIn(n.f,null,e):ubn(n.g,t,e),281)}function u5(n){return n.c&&n.d?p0(n.c)+"->"+p0(n.d):"e_"+PN(n)}function o5(n,t){return(Qln(n),jE(new Rq(n,new Q9(t,n.a)))).sd(tit)}function s5(){return yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])}function h5(){return kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])}function f5(n){return Dk(),function(){return _2(n,this,arguments)}}function l5(){return Date.now?Date.now():(new Date).getTime()}function b5(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function w5(n){if(!n.c.Sb())throw Hp(new yv);return n.a=!0,n.c.Ub()}function d5(n){n.i=0,yS(n.b,null),yS(n.c,null),n.a=null,n.e=null,++n.g}function g5(n){dS.call(this,null==n?zWn:Bbn(n),cL(n,78)?BB(n,78):null)}function p5(n){eWn(),Bp(this),this.a=new YT,dsn(this,n),DH(this.a,n)}function v5(){xA(this),this.b=new xI(RQn,RQn),this.a=new xI(KQn,KQn)}function m5(n,t){this.c=0,this.b=t,pO.call(this,n,17493),this.a=this.c}function y5(n){k5(),Qet||(this.c=n,this.e=!0,this.a=new Np)}function k5(){k5=O,Qet=!0,Wet=!1,Vet=!1,Jet=!1,Yet=!1}function j5(n,t){return!!cL(t,149)&&mK(n.c,BB(t,149).c)}function E5(n,t){var e;return e=0,n&&(e+=n.f.a/2),t&&(e+=t.f.a/2),e}function T5(n,t){return BB(lnn(n.d,t),23)||BB(lnn(n.e,t),23)}function M5(n){this.b=n,AL.call(this,n),this.a=BB(yan(this.b.a,4),126)}function S5(n){this.b=n,ax.call(this,n),this.a=BB(yan(this.b.a,4),126)}function P5(n){return n.t||(n.t=new dp(n),sln(new xy(n),0,n.t)),n.t}function I5(){return Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])}function C5(){return cpn(),Pun(Gk(JIt,1),$Vn,249,0,[BIt,qIt,_It,FIt,HIt])}function O5(){return rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])}function A5(){return $Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])}function $5(){return Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])}function L5(){return Vvn(),Pun(Gk(Iht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])}function N5(){return YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])}function x5(){return LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Ist,Sst,Tst])}function D5(){return Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])}function R5(){var n,t;R5=O,iE(),t=new Ev,tLt=t,n=new Om,eLt=n}function K5(n){var t;return n.c||cL(t=n.r,88)&&(n.c=BB(t,26)),n.c}function _5(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function F5(n){return M$(n&SQn,n>>22&SQn,n<0?PQn:0)}function B5(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)jW(t[e])}function H5(n,t){var e,i;(e=BB(bfn(n.c,t),14))&&(i=e.gc(),e.$b(),n.d-=i)}function q5(n,t){var e;return!!(e=lsn(n,t.cd()))&&cV(e.e,t.dd())}function G5(n,t){return 0==t||0==n.e?n:t>0?Edn(n,t):Cxn(n,-t)}function z5(n,t){return 0==t||0==n.e?n:t>0?Cxn(n,t):Edn(n,-t)}function U5(n){if(dAn(n))return n.c=n.a,n.a.Pb();throw Hp(new yv)}function X5(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(uSn(),Mut)&&e.k==Mut}function W5(n){var t;return qan(t=new wY,n),hon(t,(HXn(),vgt),null),t}function V5(n,t,e){var i;return(i=n.Yg(t))>=0?n._g(i,e,!0):cOn(n,t,e)}function Q5(n,t,e,i){var r;for(r=0;r<Zit;r++)XG(n.a[t.g][r],e,i[t.g])}function Y5(n,t,e,i){var r;for(r=0;r<nrt;r++)UG(n.a[r][t.g],e,i[t.g])}function J5(n,t,e,i,r){j0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function Z5(n,t,e,i,r){E0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function n6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function t6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.b=e}function e6(n,t,e){jp.call(this,e),this.b=n,this.c=t,this.d=(Bwn(),z$t)}function i6(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function r6(n,t,e){var i;Tcn(i=new X$(n.a),n.a.a),jIn(i.f,t,e),n.a.a=i}function c6(n,t){n.qi(n.i+1),jL(n,n.i,n.oi(n.i,t)),n.bi(n.i++,t),n.ci()}function a6(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.di(e,t),n.ci()}function u6(n){var t;return yX(n),$on(t=new J6(ZW(n.length)),n),t}function o6(n){var t;return yX(n),JPn(t=n?new t_(n):HB(n.Kc())),sfn(t)}function s6(n,t){var e;return l1(t,n.c.length),e=n.c[t],PE(n.c,t,1),e}function h6(n,t){var e;return!(e=BB(n.c.xc(t),14))&&(e=n.ic(t)),n.pc(t,e)}function f6(n,t){var e,i;return kW(n),e=n,kW(t),e==(i=t)?0:e<i?-1:1}function l6(n){var t;return t=n.e+n.f,isNaN(t)&&WK(n.d)?n.d:t}function b6(n,t){return n.a?oO(n.a,n.b):n.a=new lN(n.d),aO(n.a,t),n}function w6(n,t){if(n<0||n>t)throw Hp(new Ay(dIn(n,t,"index")));return n}function d6(n,t,e,i){var r;return vTn(r=x8(ANt,hQn,25,t,15,1),n,t,e,i),r}function g6(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),lBn(n,e)}function p6(n,t){return e.Math.min(W8(t.a,n.d.d.c),W8(t.b,n.d.d.c))}function v6(n,t){return XC(t)?null==t?gAn(n.f,null):Gan(n.g,t):gAn(n.f,t)}function m6(n){this.c=n,this.a=new Wb(this.c.a),this.b=new Wb(this.c.b)}function y6(){this.e=new Np,this.c=new Np,this.d=new Np,this.b=new Np}function k6(){this.g=new Bv,this.b=new Bv,this.a=new Np,this.k=new Np}function j6(n,t,e){this.a=n,this.c=t,this.d=e,WB(t.e,this),WB(e.b,this)}function E6(n,t){gO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function T6(n,t){pO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function M6(n,t){vO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function S6(n,t,e){this.a=n,this.b=t,this.c=e,WB(n.t,this),WB(t.i,this)}function P6(){this.b=new YT,this.a=new YT,this.b=new YT,this.a=new YT}function I6(){I6=O,TMt=new up("org.eclipse.elk.labels.labelManager")}function C6(){C6=O,est=new iR("separateLayerConnections",(Cun(),ast))}function O6(){O6=O,Myt=new uI("REGULAR",0),Tyt=new uI("CRITICAL",1)}function A6(){A6=O,Zvt=new XP("STACKED",0),Jvt=new XP("SEQUENCED",1)}function $6(){$6=O,nTt=new TI("FIXED",0),ZEt=new TI("CENTER_NODE",1)}function L6(n,t){var e;return e=xGn(n,t),n.b=new mrn(e.c.length),yqn(n,e)}function N6(n,t,e){return++n.e,--n.f,BB(n.d[t].$c(e),133).dd()}function x6(n){var t;return n.a||cL(t=n.r,148)&&(n.a=BB(t,148)),n.a}function D6(n){return n.a?n.e?D6(n.e):null:n}function R6(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function K6(n,t){return kW(t),n.c<n.d&&(n.ze(t,n.c++),!0)}function _6(n,t){return!!hU(n.a,t)&&(v6(n.a,t),!0)}function F6(n){var t;return t=n.cd(),RB(BB(n.dd(),14).Nc(),new Vf(t))}function B6(n){var t;return t=BB(VU(n.b,n.b.length),9),new YK(n.a,t,n.c)}function H6(n){return Qln(n),new AD(n,new ZB(n,n.a.e,4|n.a.d))}function q6(n){var t;for(EW(n),t=0;n.a.sd(new fn);)t=rbn(t,1);return t}function G6(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.$f(t[r],i,e)}function z6(n,t){var e;n.C&&((e=BB(oV(n.b,t),124).n).d=n.C.d,e.a=n.C.a)}function U6(n,t,e){return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),n.a[t][e]}function X6(n,t){ODn(),this.e=n,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[t])}function W6(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function V6(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Q6(n,t,e,i){mFn(n,t,e,pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))}function Y6(n,t){OTn(t,"Label management",1),iO(mMn(n,(I6(),TMt))),HSn(t)}function J6(n){xA(this),vH(n>=0,"Initial capacity must not be negative")}function Z6(){Z6=O,Wit=lhn((Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])))}function n8(){n8=O,trt=lhn((J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])))}function t8(){t8=O,urt=lhn((G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])))}function e8(){e8=O,Zet=lhn((qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])))}function i8(){i8=O,Lat=lhn((q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Cat,Aat])))}function r8(){r8=O,gut=lhn((Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])))}function c8(){c8=O,bht=lhn((Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])))}function a8(){a8=O,vht=lhn((uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])))}function u8(){u8=O,Nht=lhn((Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])))}function o8(){o8=O,_st=lhn((Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))}function s8(){s8=O,Oft=lhn((z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Ift,Sft])))}function h8(){h8=O,Mft=lhn((Kan(),Pun(Gk(Cft,1),$Vn,292,0,[jft,Eft,kft])))}function f8(){f8=O,svt=lhn((Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])))}function l8(){l8=O,Yvt=lhn((Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])))}function b8(){b8=O,Rvt=lhn((mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])))}function w8(){w8=O,Uvt=lhn((ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])))}function d8(){d8=O,gmt=lhn(($un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])))}function g8(){g8=O,amt=lhn((Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])))}function p8(){p8=O,fmt=lhn((dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])))}function v8(){v8=O,Nmt=lhn((oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])))}function m8(){m8=O,rjt=lhn((Ibn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])))}function y8(){y8=O,bjt=lhn((Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])))}function k8(){k8=O,eEt=lhn((Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])))}function j8(){j8=O,Qjt=lhn((Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])))}function E8(){E8=O,UEt=lhn((Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])))}function T8(){T8=O,kIt=lhn((ufn(),Pun(Gk(SIt,1),$Vn,334,0,[vIt,pIt,mIt])))}function M8(){M8=O,VPt=lhn((Rtn(),Pun(Gk(nIt,1),$Vn,272,0,[zPt,UPt,XPt])))}function S8(){return QEn(),Pun(Gk(aCt,1),$Vn,98,0,[YIt,QIt,VIt,UIt,WIt,XIt])}function P8(n,t){return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),rdn(n.o,t)}function I8(n){return!n.g&&(n.g=new oo),!n.g.d&&(n.g.d=new lp(n)),n.g.d}function C8(n){return!n.g&&(n.g=new oo),!n.g.a&&(n.g.a=new bp(n)),n.g.a}function O8(n){return!n.g&&(n.g=new oo),!n.g.b&&(n.g.b=new fp(n)),n.g.b}function A8(n){return!n.g&&(n.g=new oo),!n.g.c&&(n.g.c=new wp(n)),n.g.c}function $8(n,t,e){var i,r;for(r=new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function L8(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.fi(i,r)}function N8(n,t,e,i){var r;return AFn(r=x8(ANt,hQn,25,t+1,15,1),n,t,e,i),r}function x8(n,t,e,i,r,c){var a;return a=Bmn(r,i),10!=r&&Pun(Gk(n,c),t,e,r,a),a}function D8(n,t,e,i){return e&&(i=e.gh(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function R8(n,t,e,i){return e&&(i=e.ih(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function K8(n,t,e){BB(n.b,65),BB(n.b,65),BB(n.b,65),Otn(n.a,new N_(e,t,n))}function _8(n,t,e){if(n<0||t>e||t<n)throw Hp(new Ok(mYn+n+kYn+t+hYn+e))}function F8(n){if(!n)throw Hp(new Fy("Unable to add element to queue"))}function B8(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Np)}function H8(n,t){PS.call(this,n,t),this.a=x8(Ket,kVn,436,2,0,1),this.b=!0}function q8(n){non.call(this,n,0),jx(this),this.d.b=this.d,this.d.a=this.d}function G8(n){var t;return 0==(t=n.b).b?null:BB(Dpn(t,0),188).b}function z8(n,t){var e;return(e=new q).c=!0,e.d=t.dd(),YGn(n,t.cd(),e)}function U8(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),lBn(n,e)}function X8(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function W8(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function V8(){V8=O,cht=new EP("QUADRATIC",0),aht=new EP("SCANLINE",1)}function Q8(){Q8=O,mmt=WG(dq(new B2,(yMn(),Rat),(lWn(),kot)),Bat,qot)}function Y8(){return wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])}function J8(){return wvn(),Pun(Gk(nSt,1),$Vn,248,0,[IMt,AMt,$Mt,LMt,CMt,OMt])}function Z8(){return $Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])}function n9(){return JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])}function t9(){return Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])}function e9(){return TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])}function i9(){return gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])}function r9(){return DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])}function c9(){return lCn(),Pun(Gk(CCt,1),$Vn,273,0,[rCt,eCt,iCt,tCt,nCt,cCt])}function a9(){return nMn(),Pun(Gk(yIt,1),$Vn,312,0,[aIt,rIt,uIt,eIt,cIt,iIt])}function u9(){return uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])}function o9(n){Mx(!!n.c),p2(n.e,n),n.c.Qb(),n.c=null,n.b=dun(n),bD(n.e,n)}function s9(n){return p2(n.c.a.e,n),Px(n.b!=n.c.a.d),n.a=n.b,n.b=n.b.a,n.a}function h9(n){var t;return n.a||-1==n.b||(t=n.c.Tg(),n.a=itn(t,n.b)),n.a}function f9(n,t){return!(n.hi()&&n.Hc(t)||(n.Yh(t),0))}function l9(n,t){return OY(t,"Horizontal alignment cannot be null"),n.b=t,n}function b9(n,t,e){var i;return wWn(),i=ZUn(n,t),e&&i&&gW(n)&&(i=null),i}function w9(n,t,e){var i;for(i=n.Kc();i.Ob();)ZRn(BB(i.Pb(),37),t,e)}function d9(n,t){var e;for(e=t.Kc();e.Ob();)$Kn(n,BB(e.Pb(),37),0,0)}function g9(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function p9(n,t){var e,i,r;return r=n.r,i=n.d,(e=cHn(n,t,!0)).b!=r||e.a!=i}function v9(n,t){return lS(n.e,t)||Jgn(n.e,t,new ipn(t)),BB(lnn(n.e,t),113)}function m9(n,t,e,i){return kW(n),kW(t),kW(e),kW(i),new jU(n,t,new G)}function y9(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=new Zz(this,t,e,i)}function k9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.b=e}function j9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.a=e}function E9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function T9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function M9(n,t,e){var i;return(i=$$n(n.b,t))?NHn(F7(n,i),e):null}function S9(n,t){var e;return(e=n.Yg(t))>=0?n._g(e,!0,!0):cOn(n,t,!0)}function P9(n,t){return Pln(Gy(MD(mMn(n,(hWn(),Tlt)))),Gy(MD(mMn(t,Tlt))))}function I9(){I9=O,Ukt=ogn(ogn(FM(new B2,(zyn(),Kyt)),(DPn(),Qyt)),Uyt)}function C9(n,t,e){var i;return i=Non(n,t,e),n.b=new mrn(i.c.length),sDn(n,i)}function O9(n){if(n.b<=0)throw Hp(new yv);return--n.b,n.a-=n.c.c,iln(n.a)}function A9(n){var t;if(!n.a)throw Hp(new lV);return t=n.a,n.a=JJ(n.a),t}function $9(n){for(;!n.a;)if(!TK(n.c,new pw(n)))return!1;return!0}function L9(n){return yX(n),cL(n,198)?BB(n,198):new ol(n)}function N9(n){x9(),BB(n.We((sWn(),fPt)),174).Fc((lCn(),iCt)),n.Ye(hPt,null)}function x9(){x9=O,tMt=new bu,iMt=new wu,eMt=vsn((sWn(),hPt),tMt,qSt,iMt)}function D9(){D9=O,cjt=new pI("LEAF_NUMBER",0),ajt=new pI("NODE_SIZE",1)}function R9(n,t,e){n.a=t,n.c=e,n.b.a.$b(),yQ(n.d),n.e.a.c=x8(Ant,HWn,1,0,5,1)}function K9(n){n.a=x8(ANt,hQn,25,n.b+1,15,1),n.c=x8(ANt,hQn,25,n.b,15,1),n.d=0}function _9(n,t){n.a.ue(t.d,n.b)>0&&(WB(n.c,new mH(t.c,t.d,n.d)),n.b=t.d)}function F9(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.g[t]}function B9(n,t,e){if(xsn(n,e),null!=e&&!n.wj(e))throw Hp(new lv);return e}function H9(n){var t;if(n.Ek())for(t=n.i-1;t>=0;--t)Wtn(n,t);return N3(n)}function q9(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function G9(n,t){var e;return c4(t),(e=m7(n.slice(0,t),n)).length=t,e}function z9(n,t,e,i){PQ(),i=i||wet,gIn(n.slice(t,e),n,t,e,-t,i)}function U9(n,t,e,i,r){return t<0?cOn(n,e,i):BB(e,66).Nj().Pj(n,n.yh(),t,i,r)}function X9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function W9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function V9(n,t){if(t.a)throw Hp(new dy(CYn));TU(n.a,t),t.a=n,!n.j&&(n.j=t)}function Q9(n,t){vO.call(this,t.rd(),-16449&t.qd()),kW(n),this.a=n,this.c=t}function Y9(n,t){var e,i;return i=t/n.c.Hd().gc()|0,e=t%n.c.Hd().gc(),U6(n,i,e)}function J9(){J9=O,Yit=new GS(cJn,0),Qit=new GS(eJn,1),Jit=new GS(aJn,2)}function Z9(){Z9=O,Net=new gS("All",0),xet=new LA,Det=new A$,Ret=new NA}function n7(){n7=O,_et=lhn((Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])))}function t7(){t7=O,rut=lhn((Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])))}function e7(){e7=O,_rt=lhn((Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])))}function i7(){i7=O,zrt=lhn((Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])))}function r7(){r7=O,ict=lhn((qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])))}function c7(){c7=O,Hyt=lhn((zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])))}function a7(){a7=O,ost=lhn((Cun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])))}function u7(){u7=O,zjt=lhn((Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])))}function o7(){o7=O,Est=lhn((Oun(),Pun(Gk(Cst,1),$Vn,411,0,[vst,mst,yst,kst])))}function s7(){s7=O,dvt=lhn((bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])))}function h7(){h7=O,fOt=lhn((Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])))}function f7(){f7=O,PIt=lhn((Xyn(),Pun(Gk(RIt,1),$Vn,285,0,[MIt,jIt,EIt,TIt])))}function l7(){l7=O,tIt=lhn((Mbn(),Pun(Gk(oIt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])))}function b7(){b7=O,rOt=lhn((Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZCt,tOt,nOt])))}function w7(){w7=O,BCt=lhn((mdn(),Pun(Gk(YCt,1),$Vn,374,0,[KCt,_Ct,RCt,DCt])))}function d7(){d7=O,qBn(),HLt=RQn,BLt=KQn,GLt=new Nb(RQn),qLt=new Nb(KQn)}function g7(){g7=O,Ght=new OP(QZn,0),qht=new OP("IMPROVE_STRAIGHTNESS",1)}function p7(n,t){return hH(),WB(n,new rC(t,iln(t.e.c.length+t.g.c.length)))}function v7(n,t){return hH(),WB(n,new rC(t,iln(t.e.c.length+t.g.c.length)))}function m7(n,t){return 10!=vnn(t)&&Pun(tsn(t),t.hm,t.__elementTypeId$,vnn(t),n),n}function y7(n,t){var e;return-1!=(e=E7(n,t,0))&&(s6(n,e),!0)}function k7(n,t){var e;return(e=BB(v6(n.e,t),387))?(RH(e),e.e):null}function j7(n){var t;return JO(n)&&(t=0-n,!isNaN(t))?t:uan(aon(n))}function E7(n,t,e){for(;e<n.c.length;++e)if(cV(t,n.c[e]))return e;return-1}function T7(n,t,e){var i;return EW(n),(i=new sn).a=t,n.a.Nb(new CS(i,e)),i.a}function M7(n){var t;return EW(n),t=x8(xNt,qQn,25,0,15,1),gE(n.a,new ww(t)),t}function S7(n){var t;return t=BB(xq(n.j,0),11),BB(mMn(t,(hWn(),dlt)),11)}function P7(n){var t;if(!Zin(n))throw Hp(new yv);return n.e=1,t=n.d,n.d=null,t}function I7(n,t){var e;this.f=n,this.b=t,e=BB(RX(n.b,t),283),this.c=e?e.b:null}function C7(){G_(),this.b=new xp,this.f=new xp,this.g=new xp,this.e=new xp}function O7(n,t){this.a=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.a),this.b=t}function A7(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--BB(xq(n.c.a,t),10).p}function $7(n){var t;null!=(t=n.Ai())&&-1!=n.d&&BB(t,92).Ng(n),n.i&&n.i.Fi()}function L7(n){V$(this),this.g=n?IY(n,n.$d()):null,this.f=n,jQ(this),this._d()}function N7(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),Fh(this),this.c=n,this.b=e}function x7(n,t,e,i,r){return kW(n),kW(t),kW(e),kW(i),kW(r),new jU(n,t,i)}function D7(n,t){if(t<0)throw Hp(new Ay(n5n+t));return g3(n,t+1),xq(n.j,t)}function R7(n,t,e,i){if(!n)throw Hp(new _y($Rn(t,Pun(Gk(Ant,1),HWn,1,5,[e,i]))))}function K7(n,t){return cV(t,xq(n.f,0))||cV(t,xq(n.f,1))||cV(t,xq(n.f,2))}function _7(n,t){LK(BB(BB(n.f,33).We((sWn(),uPt)),98))&&Qbn(yV(BB(n.f,33)),t)}function F7(n,t){var e,i;return!(i=(e=BB(t,675)).Oh())&&e.Rh(i=new RC(n,t)),i}function B7(n,t){var e,i;return!(i=(e=BB(t,677)).pk())&&e.tk(i=new K0(n,t)),i}function H7(n){return n.b||(n.b=new JG(n,VAt,n),!n.a&&(n.a=new oR(n,n))),n.b}function q7(){q7=O,Oat=new WS("XY",0),Cat=new WS("X",1),Aat=new WS("Y",2)}function G7(){G7=O,crt=new zS("TOP",0),rrt=new zS(eJn,1),irt=new zS(oJn,2)}function z7(){z7=O,Pft=new xP(QZn,0),Ift=new xP("TOP",1),Sft=new xP(oJn,2)}function U7(){U7=O,Kvt=new GP("INPUT_ORDER",0),_vt=new GP("PORT_DEGREE",1)}function X7(){X7=O,btt=M$(SQn,SQn,524287),wtt=M$(0,0,IQn),dtt=F5(1),F5(2),gtt=F5(0)}function W7(n,t,e){n.a.c=x8(Ant,HWn,1,0,5,1),Xqn(n,t,e),0==n.a.c.length||f_n(n,t)}function V7(n){var t,e;return YU(n,0,e=n.length,t=x8(ONt,WVn,25,e,15,1),0),t}function Q7(n){var t;return n.dh()||(t=bX(n.Tg())-n.Ah(),n.ph().bk(t)),n.Pg()}function Y7(n){var t;return null==(t=een(yan(n,32)))&&(fgn(n),t=een(yan(n,32))),t}function J7(n,t){var e;return(e=Awn(n.d,t))>=0?Zpn(n,e,!0,!0):cOn(n,t,!0)}function Z7(n,t){var e,i;return MM(),e=f3(n),i=f3(t),!!e&&!!i&&!Kpn(e.k,i.k)}function nnn(n,t){Pen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function tnn(n,t){Ien(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function enn(n,t){Sen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function inn(n,t){Men(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function rnn(n){(this.q?this.q:(SQ(),SQ(),het)).Ac(n.q?n.q:(SQ(),SQ(),het))}function cnn(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function ann(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function unn(n,t){Vrt=new it,ect=t,BB((Wrt=n).b,65),K8(Wrt,Vrt,null),uqn(Wrt)}function onn(n,t,e){var i;return i=n.g[t],jL(n,t,n.oi(t,e)),n.gi(t,e,i),n.ci(),i}function snn(n,t){var e;return(e=n.Xc(t))>=0&&(n.$c(e),!0)}function hnn(n){var t;return n.d!=n.r&&(t=Ckn(n),n.e=!!t&&t.Cj()==E9n,n.d=t),n.e}function fnn(n,t){var e;for(yX(n),yX(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function lnn(n,t){var e;return(e=BB(RX(n.e,t),387))?(uL(n,e),e.e):null}function bnn(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function wnn(n,t){return Qln(n),new Rq(n,new KK(new M6(t,n.a)))}function dnn(n,t){var e=n.a[t],i=(Zun(),ftt)[typeof e];return i?i(e):khn(typeof e)}function gnn(n){switch(n.g){case 0:return DWn;case 1:return-1;default:return 0}}function pnn(n){return Kkn(n,(X7(),gtt))<0?-IN(aon(n)):n.l+n.m*CQn+n.h*OQn}function vnn(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function mnn(n){var t;return null!=(t=0==n.b.c.length?null:xq(n.b,0))&&hrn(n,0),t}function ynn(n,t){for(;t[0]<n.length&&GO(" \t\r\n",YTn(fV(n,t[0])))>=0;)++t[0]}function knn(n,t){this.e=t,this.a=Van(n),this.a<54?this.f=j2(n):this.c=npn(n)}function jnn(n,t,e,i){wWn(),Ap.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function Enn(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function Tnn(n,t){var e;for(e=0;n.e!=n.i.gc();)gq(t,kpn(n),iln(e)),e!=DWn&&++e}function Mnn(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function Snn(n,t){var e,i,r;r=t.c.i,i=(e=BB(RX(n.f,r),57)).d.c-e.e.c,Yrn(t.a,i,0)}function Pnn(n){var t,e;return t=n+128,!(e=(jq(),jtt)[t])&&(e=jtt[t]=new $b(n)),e}function Inn(n,t){var e;return kW(t),xnn(!!(e=n[":"+t]),Pun(Gk(Ant,1),HWn,1,5,[t])),e}function Cnn(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=sPn(t,e)}while(n.b);n.b=e}}function Onn(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=sPn(t,e)}while(n.a);n.a=e}}function Ann(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function $nn(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lnn(n,t){var e;return 0==(e=Cbn(n.e.c,t.e.c))?Pln(n.e.d,t.e.d):e}function Nnn(n,t){return 0==t.e||0==n.e?eet:($On(),ANn(n,t))}function xnn(n,t){if(!n)throw Hp(new _y(YNn("Enum constant undefined: %s",t)))}function Dnn(){Dnn=O,uut=new St,out=new Tt,cut=new At,aut=new $t,sut=new Lt}function Rnn(){Rnn=O,vit=new BS("BY_SIZE",0),mit=new BS("BY_SIZE_AND_SHAPE",1)}function Knn(){Knn=O,Dct=new XS("EADES",0),Rct=new XS("FRUCHTERMAN_REINGOLD",1)}function _nn(){_nn=O,Sht=new PP("READING_DIRECTION",0),Pht=new PP("ROTATION",1)}function Fnn(){Fnn=O,Mht=lhn((Vvn(),Pun(Gk(Iht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])))}function Bnn(){Bnn=O,jvt=lhn((Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])))}function Hnn(){Hnn=O,Ost=lhn((LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Ist,Sst,Tst])))}function qnn(){qnn=O,zlt=lhn((Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])))}function Gnn(){Gnn=O,sTt=lhn(($Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])))}function znn(){znn=O,bMt=lhn((rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])))}function Unn(){Unn=O,BEt=lhn((YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])))}function Xnn(){Xnn=O,qat=lhn((yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])))}function Wnn(){Wnn=O,GPt=lhn((Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])))}function Vnn(){Vnn=O,zIt=lhn((cpn(),Pun(Gk(JIt,1),$Vn,249,0,[BIt,qIt,_It,FIt,HIt])))}function Qnn(){Qnn=O,OCt=lhn((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])))}function Ynn(n,t){var e;return(e=BB(RX(n.a,t),134))||(e=new Zn,VW(n.a,t,e)),e}function Jnn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.a==n}function Znn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.i==n}function ntn(n,t){return kW(t),Dz(n),!!n.d.Ob()&&(t.td(n.d.Pb()),!0)}function ttn(n){return Vhn(n,DWn)>0?DWn:Vhn(n,_Vn)<0?_Vn:dG(n)}function etn(n){return n<3?(lin(n,CVn),n+1):n<OVn?IJ(n/.75+1):DWn}function itn(n,t){var e;return null==n.i&&qFn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function rtn(n,t,e){var i;if(null==t)throw Hp(new gv);return i=zJ(n,t),i4(n,t,e),i}function ctn(n){return n.a>=-.01&&n.a<=fJn&&(n.a=0),n.b>=-.01&&n.b<=fJn&&(n.b=0),n}function atn(n,t){return t==(c_(),c_(),Met)?n.toLocaleLowerCase():n.toLowerCase()}function utn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(ED(n),n.o)}function otn(n){var t;t=new $m,f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),t)}function stn(n,t){var e;return e=t>0?t-1:t,$j(Lj(Fen(LH(new Xm,e),n.n),n.j),n.k)}function htn(n,t,e,i){n.j=-1,qOn(n,EPn(n,t,e),(ZM(),BB(t,66).Mj().Ok(i)))}function ftn(n){this.g=n,this.f=new Np,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function ltn(n){this.b=new Np,this.a=new Np,this.c=new Np,this.d=new Np,this.e=n}function btn(n,t){this.a=new xp,this.e=new xp,this.b=(Mhn(),uvt),this.c=n,this.b=t}function wtn(n,t,e){NR.call(this),xtn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function dtn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(ry(),znt)}function gtn(n){if(n<0)throw Hp(new _y("Illegal Capacity: "+n));this.g=this.ri(n)}function ptn(n,t){if(0>n||n>t)throw Hp(new Tk("fromIndex: 0, toIndex: "+n+hYn+t))}function vtn(n){var t;if(n.a==n.b.a)throw Hp(new yv);return t=n.a,n.c=t,n.a=n.a.e,t}function mtn(n){var t;Mx(!!n.c),t=n.c.a,Atn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function ytn(n,t){var e;return Qln(n),e=new vQ(n,n.a.rd(),4|n.a.qd(),t),new Rq(n,e)}function ktn(n,t){var e,i;return(e=BB(lfn(n.d,t),14))?(i=t,n.e.pc(i,e)):null}function jtn(n,t){var e;for(e=n.Kc();e.Ob();)hon(BB(e.Pb(),70),(hWn(),ult),t)}function Etn(n){var t;return(t=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,t=0),t}function Ttn(n,t,i){var r;Fkn(i,r=e.Math.max(0,n.b/2-.5),1),WB(t,new iP(i,r))}function Mtn(n,t,e){return IJ(HH(n.a.e[BB(t.a,10).p]-n.a.e[BB(e.a,10).p]))}function Stn(n,t,e,i,r,c){var a;SZ(a=W5(i),r),MZ(a,c),JCn(n.a,i,new L_(a,t,e.f))}function Ptn(n,t){var e;if(!(e=NNn(n.Tg(),t)))throw Hp(new _y(r6n+t+u6n));return e}function Itn(n,t){var e;for(e=n;JJ(e);)if((e=JJ(e))==t)return!0;return!1}function Ctn(n,t){var e,i,r;for(i=t.a.cd(),e=BB(t.a.dd(),14).gc(),r=0;r<e;r++)n.td(i)}function Otn(n,t){var e,i,r,c;for(kW(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.td(e)}function Atn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function $tn(n,t){return!(!t||n.b[t.g]!=t||($X(n.b,t.g,null),--n.c,0))}function Ltn(n,t){return!!Zrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))}function Ntn(n,t){LK(BB(mMn(BB(n.e,10),(HXn(),ept)),98))&&(SQ(),m$(BB(n.e,10).j,t))}function xtn(n){n.b=(J9(),Qit),n.f=(G7(),rrt),n.d=(lin(2,AVn),new J6(2)),n.e=new Gj}function Dtn(){Dtn=O,Git=new qS("BEGIN",0),zit=new qS(eJn,1),Uit=new qS("END",2)}function Rtn(){Rtn=O,zPt=new _I(eJn,0),UPt=new _I("HEAD",1),XPt=new _I("TAIL",2)}function Ktn(){return hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])}function _tn(){return PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])}function Ftn(){return kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])}function Btn(){return sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Cvt,Tvt,Pvt,Mvt,Svt,Evt,Ivt,Ovt])}function Htn(){Htn=O,ZIt=lhn((QEn(),Pun(Gk(aCt,1),$Vn,98,0,[YIt,QIt,VIt,UIt,WIt,XIt])))}function qtn(){qtn=O,nrt=(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,Zit=nrt}function Gtn(n){this.b=(yX(n),new t_(n)),this.a=new Np,this.d=new Np,this.e=new Gj}function ztn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Utn(n){var t;return n.w?n.w:((t=V1(n))&&!t.kh()&&(n.w=t),t)}function Xtn(n){var t;return null==n?null:VTn(t=BB(n,190),t.length)}function Wtn(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.li(t,n.g[t])}function Vtn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)orn(n.b,t),t=Mln(t);orn(n.b,t)}function Qtn(n){var t;for(t=0;t<n.c.length;t++)(l1(t,n.c.length),BB(n.c[t],11)).p=t}function Ytn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Jtn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],lL(n.g,e).a=t}function Ztn(n,t){var e;for(e=spn(n,0);e.b!=e.d.c;)UR(BB(b3(e),8),t);return n}function nen(n,t){return XR(B$(BB(RX(n.g,t),8)),_$(BB(RX(n.f,t),460).b))}function ten(n){var t;return p2(n.e,n),Px(n.b),n.c=n.a,t=BB(n.a.Pb(),42),n.b=dun(n),t}function een(n){var t;return JH(null==n||Array.isArray(n)&&!((t=vnn(n))>=14&&t<=16)),n}function ien(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function ren(n,t,e){var i,r;i=t;do{r=Gy(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function cen(n,t){var e,i;i=n.a,e=Qfn(n,t,null),i!=t&&!n.e&&(e=azn(n,t,e)),e&&e.Fi()}function aen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function uen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function oen(n,t){return _Mn(),E$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function sen(n,t){return Zj(Jrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function hen(){hen=O,Aut=lhn((uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])))}function fen(){fen=O,tSt=lhn((wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])))}function len(){len=O,xMt=lhn((wvn(),Pun(Gk(nSt,1),$Vn,248,0,[IMt,AMt,$Mt,LMt,CMt,OMt])))}function ben(){ben=O,rht=lhn(($Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])))}function wen(){wen=O,oft=lhn((JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])))}function den(){den=O,nft=lhn((Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])))}function gen(){gen=O,rvt=lhn((TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])))}function pen(){pen=O,Hht=lhn((gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])))}function ven(){ven=O,Jyt=lhn((DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])))}function men(){men=O,uCt=lhn((lCn(),Pun(Gk(CCt,1),$Vn,273,0,[rCt,eCt,iCt,tCt,nCt,cCt])))}function yen(){yen=O,sIt=lhn((nMn(),Pun(Gk(yIt,1),$Vn,312,0,[aIt,rIt,uIt,eIt,cIt,iIt])))}function ken(){return n$n(),Pun(Gk(GIt,1),$Vn,93,0,[CIt,IIt,AIt,DIt,xIt,NIt,$It,LIt,OIt])}function jen(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,0,e,n.a))}function Een(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.b))}function Ten(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.b))}function Men(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.f))}function Sen(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.g))}function Pen(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,5,e,n.i))}function Ien(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,6,e,n.j))}function Cen(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.j))}function Oen(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.c))}function Aen(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,2,e,n.k))}function $en(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,2,e,n.d))}function Len(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,4,e,n.s))}function Nen(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,5,e,n.t))}function xen(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,e,t))}function Den(n,t){var e;return(e=BB(RX((nS(),mAt),n),55))?e.xj(t):x8(Ant,HWn,1,t,5,1)}function Ren(n,t){var e;return t in n.a&&(e=zJ(n,t).he())?e.a:null}function Ken(n,t){var e,i;return tE(),i=new uo,!!t&&CNn(i,t),xin(e=i,n),e}function _en(n,t,e){if(xsn(n,e),!n.Bk()&&null!=e&&!n.wj(e))throw Hp(new lv);return e}function Fen(n,t){return n.n=t,n.n?(n.f=new Np,n.e=new Np):(n.f=null,n.e=null),n}function Ben(n,t,e,i,r,c){var a;return Qen(e,a=mX(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Hen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function qen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Gen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function zen(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function Uen(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xen(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],V9(n.a,e);return n}function Wen(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)yX(t[e]);return new AO(n)}function Ven(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||zVn}function Qen(n,t){if(n){t.n=n;var e=UJ(t);e?e.gm=t:SWn[n]=[t]}}function Yen(n,t,i){var r;return r=n.length,_In(n,0,t,0,e.Math.min(i,r),!0),t}function Jen(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=BB(r.Pb(),79),TU(n,BB(e.Kb(i),33))}function Zen(){YE();for(var n=PWn,t=0;t<arguments.length;t++)n.push(arguments[t])}function nin(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)r5(n,e[i],n.c.b,n.c)}function tin(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),WB(n.a,t)}function ein(n){Mx(n.c>=0),rgn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function iin(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=yhn(n.f)),n.c).e}function rin(n){if(!(n>=0))throw Hp(new _y("tolerance ("+n+") must be >= 0"));return n}function cin(){return cMt||ksn(cMt=new ORn,Pun(Gk(_it,1),HWn,130,0,[new Nf])),cMt}function ain(){ain=O,Gvt=new zP(hJn,0),Hvt=new zP("INPUT",1),qvt=new zP("OUTPUT",2)}function uin(){uin=O,wht=new MP("ARD",0),ght=new MP("MSD",1),dht=new MP("MANUAL",2)}function oin(){oin=O,Omt=new YP("BARYCENTER",0),Amt=new YP(E1n,1),$mt=new YP(T1n,2)}function sin(n,t){var e;if(e=n.gc(),t<0||t>e)throw Hp(new tK(t,e));return new RK(n,t)}function hin(n,t){var e;return cL(t,42)?n.c.Mc(t):(e=rdn(n,t),Wdn(n,t),e)}function fin(n,t,e){return Chn(n,t),Nrn(n,e),Len(n,0),Nen(n,1),nln(n,!0),Yfn(n,!0),n}function lin(n,t){if(n<0)throw Hp(new _y(t+" cannot be negative but was: "+n));return n}function bin(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(cV(t,n.Xb(e)))return e;return-1}function win(n){var t;for(t=n.c.Cc().Kc();t.Ob();)BB(t.Pb(),14).$b();n.c.$b(),n.d=0}function din(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)QU(t=e[i],t.length,null)}function gin(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function pin(n){var t;for(t=new Wb(eyn(n));t.a<t.c.c.length;)BB(n0(t),680).Gf()}function vin(n){vM(),this.g=new xp,this.f=new xp,this.b=new xp,this.c=new pJ,this.i=n}function min(){this.f=new Gj,this.d=new wm,this.c=new Gj,this.a=new Np,this.b=new Np}function yin(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=null,this.c=new lK(this,t,e,i)}function kin(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function jin(){OL.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=k6n}function Ein(){return n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GCt,UCt,qCt,XCt,WCt,QCt,VCt,zCt,HCt])}function Tin(){return tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Cit])}function Min(){Min=O,Ott=Pun(Gk(ANt,1),hQn,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Sin(){Sin=O,kmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Pin(){Pin=O,jmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Iin(){Iin=O,Mmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)}function Cin(){Cin=O,Imt=WG(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat,$ot)}function Oin(){Oin=O,hht=new TP("LAYER_SWEEP",0),sht=new TP(B1n,1),fht=new TP(QZn,2)}function Ain(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?BB(xq(e.a,i-1),10):null}function $in(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.k))}function Lin(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.f))}function Nin(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,e,n.i))}function xin(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.a))}function Din(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Rin(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Kin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function _in(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function Fin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,e,n.c))}function Bin(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.d))}function Hin(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.D))}function qin(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&qin(n.i,t/n.r*n.i.d))}function Gin(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new Fm:new Dh,n.c=MDn(i,n.b,n.a)}function zin(n,t){return $xn(n.e,t)?(ZM(),hnn(t)?new lq(t,n):new xC(t,n)):new KC(t,n)}function Uin(n,t){return Jj(Zrn(n.a,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function Xin(n,t,e){return x7(n,new fw(t),new un,new lw(e),Pun(Gk(nit,1),$Vn,132,0,[]))}function Win(n){return 0>n?new VT:new $D(null,new m5(n+1,n))}function Vin(n,t){var e;return SQ(),e=new XT(1),XC(n)?mZ(e,n,t):jIn(e.f,n,t),new Xb(e)}function Qin(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function Yin(n){var t;return cL(t=mMn(n,(hWn(),dlt)),160)?mwn(BB(t,160)):null}function Jin(n){var t;return(n=e.Math.max(n,2))>(t=kon(n))?(t<<=1)>0?t:OVn:t}function Zin(n){switch(uN(3!=n.e),n.e){case 2:return!1;case 0:return!0}return _5(n)}function nrn(n,t){var e;return!!cL(t,8)&&(e=BB(t,8),n.a==e.a&&n.b==e.b)}function trn(n,t,e){var i,r;return r=t>>5,i=31&t,e0(jz(n.n[e][r],dG(yz(i,1))),3)}function ern(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)vjn(n,(e=BB(i.Pb(),42)).cd(),e.dd())}function irn(n,t){var e;e=new it,BB(t.b,65),BB(t.b,65),BB(t.b,65),Otn(t.a,new TB(n,e,t))}function rrn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,21,e,n.b))}function crn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,e,n.d))}function arn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,13,e,n.j))}function urn(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)$X(t,i,n.a[r])}function orn(n,t){var e;return kW(t),e=t.g,!n.b[e]&&($X(n.b,e,t),++n.c,!0)}function srn(n,t){var e;return!((e=null==t?-1:E7(n.b,t,0))<0||(hrn(n,e),0))}function hrn(n,t){var e;e=s6(n.b,n.b.c.length-1),t<n.b.c.length&&(c5(n.b,t,e),KIn(n,t))}function frn(n,t){0==(k5(),Qet?null:t.c).length&&zD(t,new X),mZ(n.a,Qet?null:t.c,t)}function lrn(n,t){OTn(t,"Hierarchical port constraint processing",1),bpn(n),YXn(n),HSn(t)}function brn(n,t){var e,i;for(i=t.Kc();i.Ob();)e=BB(i.Pb(),266),n.b=!0,TU(n.e,e),e.b=n}function wrn(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function drn(n,t){var e,i;return e=BB(mMn(n,(HXn(),spt)),8),i=BB(mMn(t,spt),8),Pln(e.b,i.b)}function grn(n){RG.call(this),this.b=Gy(MD(mMn(n,(HXn(),ypt)))),this.a=BB(mMn(n,Zdt),218)}function prn(n,t,e){G2.call(this,n,t,e),this.a=new xp,this.b=new xp,this.d=new Wd(this)}function vrn(n){this.e=n,this.d=new bE(etn(gz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function mrn(n){this.b=n,this.a=x8(ANt,hQn,25,n+1,15,1),this.c=x8(ANt,hQn,25,n,15,1),this.d=0}function yrn(n,t,e){var i;return jxn(n,t,i=new Np,e,!0,!0),n.b=new mrn(i.c.length),i}function krn(n,t){var e;return(e=BB(RX(n.c,t),458))||((e=new cm).c=t,VW(n.c,e.c,e)),e}function jrn(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Ern(n){return null==n.b?(YM(),YM(),x$t):n.Lk()?n.Kk():n.Jk()}function Trn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)Pen(t=BB(kpn(e),33),0),Ien(t,0)}function Mrn(){Mrn=O,sat=new up(OZn),hat=new up(AZn),oat=new up($Zn),uat=new up(LZn)}function Srn(){Srn=O,qut=new ZS("TO_INTERNAL_LTR",0),Hut=new ZS("TO_INPUT_DIRECTION",1)}function Prn(){Prn=O,Qkt=new dI("P1_NODE_PLACEMENT",0),Ykt=new dI("P2_EDGE_ROUTING",1)}function Irn(){Irn=O,Rst=new kP("START",0),Dst=new kP("MIDDLE",1),xst=new kP("END",2)}function Crn(){Crn=O,tst=new iR("edgelabelcenterednessanalysis.includelabel",(hN(),ptt))}function Orn(n,t){JT(AV(new Rq(null,new w1(new Ib(n.b),1)),new JI(n,t)),new nC(n,t))}function Arn(){this.c=new CE(0),this.b=new CE(B3n),this.d=new CE(F3n),this.a=new CE(JJn)}function $rn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Ul(t=BB(e.Pb(),214),new HMn(t.e))}function Lrn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zl(t=BB(e.Pb(),214),new Vz(t.f))}function Nrn(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.zb))}function xrn(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,e,n.xb))}function Drn(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.yb))}function Rrn(n,t){var e;(e=new Om).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function Krn(n,t){var e;(e=new pD).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function _rn(n,t){var e,i;for(z9(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n._c(i,e[i])}function Frn(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Brn(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?nsn(e):0);return t}function Hrn(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+bnn(n))}function qrn(n,t){var e;return cL(t,14)?(e=BB(t,14),n.Gc(e)):fnn(n,BB(yX(t),20).Kc())}function Grn(n,t,e){btn.call(this,t,e),this.d=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.d)}function zrn(n){n.a=null,n.e=null,n.b.c=x8(Ant,HWn,1,0,5,1),n.f.c=x8(Ant,HWn,1,0,5,1),n.c=null}function Urn(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function Xrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new xd(n)),t))))}function Wrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new Nd(n)),t))))}function Vrn(n,t){OTn(t,k1n,1),JT(wnn(new Rq(null,new w1(n.b,16)),new Zt),new ne),HSn(t)}function Qrn(n,t){var e,i;return e=BB(ZAn(n,(Uyn(),Ljt)),19),i=BB(ZAn(t,Ljt),19),E$(e.a,i.a)}function Yrn(n,t,e){var i,r;for(r=spn(n,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a+=t,i.b+=e;return n}function Jrn(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&wW(t,i.g))return i;return null}function Zrn(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&wW(t,i.i))return i;return null}function ncn(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function tcn(n,t){var e,i;for(SQ(),i=new Np,e=0;e<n;++e)i.c[i.c.length]=t;return new $k(i)}function ecn(n){var t;return QC((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.b))}function icn(n){var t;return QC((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.c))}function rcn(n){var t;return QC((t=E2(n)).a,0)?(fM(),fM(),Iet):(fM(),new kx(t.b))}function ccn(n){return n.b.c.i.k==(uSn(),Mut)?BB(mMn(n.b.c.i,(hWn(),dlt)),11):n.b.c}function acn(n){return n.b.d.i.k==(uSn(),Mut)?BB(mMn(n.b.d.i,(hWn(),dlt)),11):n.b.d}function ucn(n,t,e,i,r,c,a,u,o,s,h,f,l){return bIn(n,t,e,i,r,c,a,u,o,s,h,f,l),Gln(n,!1),n}function ocn(n,t,e,i,r,c,a){gT.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=u6(a)}function scn(n,t){typeof window===AWn&&typeof window.$gwt===AWn&&(window.$gwt[n]=t)}function hcn(n,t){return Aun(),n==Zat&&t==eut||n==eut&&t==Zat||n==tut&&t==nut||n==nut&&t==tut}function fcn(n,t){return Aun(),n==Zat&&t==nut||n==Zat&&t==tut||n==eut&&t==tut||n==eut&&t==nut}function lcn(n,t){return h$(),rin(fJn),e.Math.abs(0-t)<=fJn||0==t||isNaN(0)&&isNaN(t)?0:n/t}function bcn(){return bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])}function wcn(){wcn=O,P$t=new Cm,C$t=Pun(Gk(FAt,1),N9n,170,0,[]),I$t=Pun(Gk(QAt,1),x9n,59,0,[])}function dcn(){dcn=O,smt=new VP("NO",0),umt=new VP("GREEDY",1),omt=new VP("LOOK_BACK",2)}function gcn(){gcn=O,Dut=new Ht,Nut=new Bt,xut=new qt,Lut=new Gt,Rut=new zt,Kut=new Ut}function pcn(n){var t,e;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),29).p=e,++e}function vcn(n,t){var e;return $Cn(new xI((e=_Tn(n)).c,e.d),new xI(e.b,e.a),n.rf(),t,n.Hf())}function mcn(n,t){var e;return n.b?null:(e=stn(n,n.g),DH(n.a,e),e.i=n,n.d=t,e)}function ycn(n,t,e){OTn(e,"DFS Treeifying phase",1),jdn(n,t),cxn(n,t),n.a=null,n.b=null,HSn(e)}function kcn(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Np,UIn(this),SQ(),m$(this.a,null)}function jcn(n){this.i=n.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Ecn(n,t){MH.call(this,W$t,n,t),this.b=this,this.a=axn(n.Tg(),itn(this.e.Tg(),this.c))}function Tcn(n,t){var e,i;for(kW(t),i=t.vc().Kc();i.Ob();)e=BB(i.Pb(),42),n.zc(e.cd(),e.dd())}function Mcn(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!G3(n,t,i.Pb()))return!1;return!0}function Scn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.gh(t,-1-(-1==c?i:c),null,r)),r}function Pcn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.ih(t,-1-(-1==c?i:c),null,r)),r}function Icn(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Ccn(n){switch(n.g){case 2:return kUn(),ICt;case 4:return kUn(),oCt;default:return n}}function Ocn(n){switch(n.g){case 1:return kUn(),SCt;case 3:return kUn(),sCt;default:return n}}function Acn(n){var t,e,i;return n.j==(kUn(),sCt)&&(e=SN(t=UOn(n),oCt),(i=SN(t,ICt))||i&&e)}function $cn(n){var t;return new YK(t=BB(n.e&&n.e(),9),BB(VU(t,t.length),9),t.length)}function Lcn(n,t){OTn(t,k1n,1),twn(sM(new Pw((gM(),new HV(n,!1,!1,new Ft))))),HSn(t)}function Ncn(n,t){return hN(),XC(n)?f6(n,SD(t)):UC(n)?Tz(n,MD(t)):zC(n)?Ez(n,TD(t)):n.wd(t)}function xcn(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),WB(n.a,t)}function Dcn(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.a<e&&t.b>c&&t.b<i}function Rcn(n,t,e,i){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,e),t&&_Cn(n,t),i&&n.xk(!0)}function Kcn(n,t){var e;qQ(e=BB(t,183),"x",n.i),qQ(e,"y",n.j),qQ(e,I6n,n.g),qQ(e,P6n,n.f)}function _cn(){_cn=O,Cmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Fcn(){Fcn=O,Dmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Bcn(){Bcn=O,Xjt=new yI(QZn,0),Wjt=new yI("POLAR_COORDINATE",1),Ujt=new yI("ID",2)}function Hcn(){Hcn=O,Xvt=new UP("EQUALLY",0),Wvt=new UP(mJn,1),Vvt=new UP("NORTH_SOUTH",2)}function qcn(){qcn=O,$vt=lhn((sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Cvt,Tvt,Pvt,Mvt,Svt,Evt,Ivt,Ovt])))}function Gcn(){Gcn=O,Vst=lhn((kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])))}function zcn(){zcn=O,EMt=lhn((PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])))}function Ucn(){Ucn=O,cAt=lhn((hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])))}function Xcn(){Xcn=O,Qrt=new iR("debugSVG",(hN(),!1)),Yrt=new iR("overlapsExisted",!0)}function Wcn(n,t){return x7(new ow(n),new sw(t),new hw(t),new tn,Pun(Gk(nit,1),$Vn,132,0,[]))}function Vcn(){var n;return qet||(qet=new Kv,YA(n=new y5(""),(lM(),Het)),frn(qet,n)),qet}function Qcn(n,t){for(yX(t);n.Ob();)if(!Qan(BB(n.Pb(),10)))return!1;return!0}function Ycn(n,t){var e;return!!(e=XRn(cin(),n))&&(Ypn(t,(sWn(),mPt),e),!0)}function Jcn(n,t){var e;for(e=0;e<t.j.c.length;e++)BB(D7(n,e),21).Gc(BB(D7(t,e),14));return n}function Zcn(n,t){var e,i;for(i=new Wb(t.b);i.a<i.c.c.length;)e=BB(n0(i),29),n.a[e.p]=QMn(e)}function nan(n,t){var e,i;for(kW(t),i=n.vc().Kc();i.Ob();)e=BB(i.Pb(),42),t.Od(e.cd(),e.dd())}function tan(n,t){cL(t,83)?(BB(n.c,76).Xj(),ern(n,BB(t,83))):BB(n.c,76).Wb(t)}function ean(n){return cL(n,152)?o6(BB(n,152)):cL(n,131)?BB(n,131).a:cL(n,54)?new fy(n):new IT(n)}function ian(n,t){return t<n.b.gc()?BB(n.b.Xb(t),10):t==n.b.gc()?n.a:BB(xq(n.e,t-n.b.gc()-1),10)}function ran(n,t){n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=rbn(n.d,t)}function can(n,t){OTn(t,"Edge and layer constraint edge reversal",1),Fzn(LRn(n)),HSn(t)}function aan(n){var t;null==n.d?(++n.e,n.f=0,rfn(null)):(++n.e,t=n.d,n.d=null,n.f=0,rfn(t))}function uan(n){var t;return 0==(t=n.h)?n.l+n.m*CQn:t==PQn?n.l+n.m*CQn-OQn:n}function oan(n){return qD(),n.A.Hc((mdn(),DCt))&&!n.B.Hc((n_n(),UCt))?ndn(n):null}function san(n){if(kW(n),0==n.length)throw Hp(new Mk("Zero length BigInteger"));iKn(this,n)}function han(n){if(!n)throw Hp(new Fy("no calls to next() since the last call to remove()"))}function fan(n){return $Qn<n&&n<OQn?n<0?e.Math.ceil(n):e.Math.floor(n):uan(gNn(n))}function lan(n,t){var e,i,r;for(e=n.c.Ee(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Od(e,i);return n.b.Kb(e)}function ban(n,t){var e,i,r;if(null!=(e=n.Jg())&&n.Mg())for(i=0,r=e.length;i<r;++i)e[i].ui(t)}function wan(n,t){var e,i;for(i=vW(e=n).e;i;){if((e=i)==t)return!0;i=vW(e).e}return!1}function dan(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function gan(n,t,e){var i,r;return r=BB(UK(n.d,t),19),i=BB(UK(n.b,e),19),r&&i?U6(n,r.a,i.a):null}function pan(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)SA(e=BB(kpn(i),33),e.i+t.b,e.j+t.d)}function van(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),70),WB(n.d,e),KMn(n,e)}function man(n,t){var e,i;i=new Np,e=t;do{i.c[i.c.length]=e,e=BB(RX(n.k,e),17)}while(e);return i}function yan(n,t){var e;return 0!=(n.Db&t)?-1==(e=Rmn(n,t))?n.Eb:een(n.Eb)[e]:null}function kan(n,t){var e;return(e=new _f).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function jan(n,t){var e;return(e=new Ev).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function Ean(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return m0(n,t)}function Tan(n){switch(n.a.g){case 1:return new EC;case 3:return new hyn;default:return new Cf}}function Man(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw Hp(new yv)}function San(n){var t;return a$(),uS(syt,n)||((t=new ua).a=n,wR(syt,n,t)),BB(oV(syt,n),635)}function Pan(n){var t,e,i;return e=0,(i=n)<0&&(i+=OQn,e=PQn),t=IJ(i/CQn),M$(IJ(i-t*CQn),t,e)}function Ian(n){var t,e,i;for(i=0,e=new QT(n.a);e.a<e.c.a.length;)t=u4(e),n.b.Hc(t)&&++i;return i}function Can(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:nsn(e)));return t}function Oan(n,t){var e;this.c=n,gmn(n,e=new Np,t,n.b,null,!1,null,!1),this.a=new M2(e,0)}function Aan(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(ZM(),BB(n,66).Oj()),this.k=axn(t.e.Tg(),n)}function $an(n,t,e){this.b=(kW(n),n),this.d=(kW(t),t),this.e=(kW(e),e),this.c=this.d+""+this.e}function Lan(){this.a=BB(mpn((fRn(),qct)),19).a,this.c=Gy(MD(mpn(cat))),this.b=Gy(MD(mpn(tat)))}function Nan(){Nan=O,KIt=lhn((n$n(),Pun(Gk(GIt,1),$Vn,93,0,[CIt,IIt,AIt,DIt,xIt,NIt,$It,LIt,OIt])))}function xan(){xan=O,Fit=lhn((tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Cit])))}function Dan(){Dan=O,Rrt=new US("UP",0),Nrt=new US(pJn,1),xrt=new US(cJn,2),Drt=new US(aJn,3)}function Ran(){Ran=O,sZ(),ykt=new $O(X3n,kkt=Rkt),B0(),vkt=new $O(W3n,mkt=Hkt)}function Kan(){Kan=O,jft=new NP("ONE_SIDED",0),Eft=new NP("TWO_SIDED",1),kft=new NP("OFF",2)}function _an(n){n.r=new Rv,n.w=new Rv,n.t=new Np,n.i=new Np,n.d=new Rv,n.a=new bA,n.c=new xp}function Fan(n){this.n=new Np,this.e=new YT,this.j=new YT,this.k=new Np,this.f=new Np,this.p=n}function Ban(n,t){n.c&&(JKn(n,t,!0),JT(new Rq(null,new w1(t,16)),new qd(n))),JKn(n,t,!1)}function Han(n,t,e){return n==(oin(),$mt)?new Pc:0!=H$n(t,1)?new Rj(e.length):new Dj(e.length)}function qan(n,t){var e;return t?((e=t.Ve()).dc()||(n.q?Tcn(n.q,e):n.q=new mO(e)),n):n}function Gan(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(mR(n.a,t),--n.c,oY(n.b)),e}function zan(n,t){var e;return 0==(e=t.p-n.p)?Pln(n.f.a*n.f.b,t.f.a*t.f.b):e}function Uan(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function Xan(n){return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:eQ(n)}function Wan(n){var t;if(n){if((t=n).dc())throw Hp(new yv);return t.Xb(t.gc()-1)}return u1(n.Kc())}function Van(n){var t;return Vhn(n,0)<0&&(n=uH(n)),64-(0!=(t=dG(kz(n,32)))?ZCn(t):ZCn(dG(n))+32)}function Qan(n){var t;return t=BB(mMn(n,(hWn(),Qft)),61),n.k==(uSn(),Mut)&&(t==(kUn(),ICt)||t==oCt)}function Yan(n,t,e){var i,r;(r=BB(mMn(n,(HXn(),vgt)),74))&&(Wsn(i=new km,0,r),Ztn(i,e),Frn(t,i))}function Jan(n,t,e){var i,r,c,a;i=(a=vW(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function Zan(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(kUn(),sCt)?n.p-t.p:t.p-n.p}function nun(n){var t,e;for(PUn(n),e=new Wb(n.d);e.a<e.c.c.length;)(t=BB(n0(e),101)).i&&XSn(t)}function tun(n,t,e,i,r){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i),$X(n.b[t.g],e.g,r),$X(n.b[e.g],t.g,r)}function eun(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),BB(i.b,65),Otn(i.a,new EB(n,t,i))}function iun(n,t){n.d==(Ffn(),_Pt)||n.d==HPt?BB(t.a,57).c.Fc(BB(t.b,57)):BB(t.b,57).c.Fc(BB(t.a,57))}function run(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),_pn(n.n,t,i)):eSn(n,t,e,i)}function cun(n,t){var e;return Nrn(e=new Ho,t),f9((!n.A&&(n.A=new NL(O$t,n,7)),n.A),e),e}function aun(n,t,e){var i,r;return r=N2(t,A6n),pjn((i=new aC(n,e)).a,i.b,r),r}function uun(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.kh())&&cL(t=Ckn(n),148)&&(n.a=BB(t,148)),n.a}function oun(n,t){var e,i;for(kW(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function sun(n,t){var e,i,r;return e=n.l+t.l,i=n.m+t.m+(e>>22),r=n.h+t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function hun(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),M$(e&SQn,i&SQn,r&PQn)}function fun(n){var t;return n<128?(!(t=(Mq(),Mtt)[n])&&(t=Mtt[n]=new Lb(n)),t):new Lb(n)}function lun(n){var t;return cL(n,78)?n:((t=n&&n.__java$exception)||ov(t=new jhn(n)),t)}function bun(n){if(cL(n,186))return BB(n,118);if(n)return null;throw Hp(new Hy(e8n))}function wun(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(Nfn(t,_hn(n)))return!0;return!1}function dun(n){return!!n.a.Ob()||n.a==n.d&&(n.a=new S2(n.e.f),n.a.Ob())}function gun(n,t){var e;return 0!=(e=t.Pc()).length&&(tH(n.c,n.c.length,e),!0)}function pun(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=BB(r.Pb(),42),n.yc(i.cd(),i.dd(),e);return n}function vun(n,t){var e;for(e=new Wb(n.b);e.a<e.c.c.length;)hon(BB(n0(e),70),(hWn(),ult),t)}function mun(n,t,e){var i,r;for(r=new Wb(n.b);r.a<r.c.c.length;)SA(i=BB(n0(r),33),i.i+t,i.j+e)}function yun(n,t){if(!n)throw Hp(new _y($Rn("value already present: %s",Pun(Gk(Ant,1),HWn,1,5,[t]))))}function kun(n,t){return!(!n||!t||n==t)&&_dn(n.d.c,t.d.c+t.d.b)&&_dn(t.d.c,n.d.c+n.d.b)}function jun(){return k5(),Qet?new y5(null):FOn(Vcn(),"com.google.common.base.Strings")}function Eun(n,t){var e;return e=sx(t.a.gc()),JT(ytn(new Rq(null,new w1(t,1)),n.i),new NI(n,e)),e}function Tun(n){var t;return Nrn(t=new Ho,"T"),f9((!n.d&&(n.d=new NL(O$t,n,11)),n.d),t),t}function Mun(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.ki(e))?0:nsn(i));return t}function Sun(n,t,e,i){var r;return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),r=n.a[t][e],$X(n.a[t],e,i),r}function Pun(n,t,e,i,r){return r.gm=n,r.hm=t,r.im=C,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Iun(n,t,i,r,c){return jDn(),e.Math.min(zGn(n,t,i,r,c),zGn(i,r,n,t,qx(new xI(c.a,c.b))))}function Cun(){Cun=O,ast=new tP(QZn,0),rst=new tP(I1n,1),cst=new tP(C1n,2),ist=new tP("BOTH",3)}function Oun(){Oun=O,vst=new mP(eJn,0),mst=new mP(cJn,1),yst=new mP(aJn,2),kst=new mP("TOP",3)}function Aun(){Aun=O,Zat=new QS("Q1",0),eut=new QS("Q4",1),nut=new QS("Q2",2),tut=new QS("Q3",3)}function $un(){$un=O,bmt=new QP("OFF",0),wmt=new QP("SINGLE_EDGE",1),lmt=new QP("MULTI_EDGE",2)}function Lun(){Lun=O,WTt=new SI("MINIMUM_SPANNING_TREE",0),XTt=new SI("MAXIMUM_SPANNING_TREE",1)}function Nun(){Nun=O,new up("org.eclipse.elk.addLayoutConfig"),ZTt=new ou,JTt=new au,new uu}function xun(n){var t,e;for(t=new YT,e=spn(n.d,0);e.b!=e.d.c;)DH(t,BB(b3(e),188).c);return t}function Dun(n){var t,e;for(e=new Np,t=n.Kc();t.Ob();)gun(e,wDn(BB(t.Pb(),33)));return e}function Run(n){var t;tBn(n,!0),t=VVn,Lx(n,(HXn(),fpt))&&(t+=BB(mMn(n,fpt),19).a),hon(n,fpt,iln(t))}function Kun(n,t,e){var i;$U(n.a),Otn(e.i,new jg(n)),kgn(n,i=new I$(BB(RX(n.a,t.b),65)),t),e.f=i}function _un(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?BB(xq(e.a,i+1),10):null}function Fun(n,t){var e,i;for(WQ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Bun(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=i0(i,yz(1,e));return i}function Hun(n){var t,e,i;for(SQ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?nsn(t):0,i|=0;return i}function qun(n){var t;return tE(),t=new co,n&&f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),t),t}function Gun(n){var t;return(t=new p).a=n,t.b=yon(n),t.c=x8(Qtt,sVn,2,2,6,1),t.c[0]=Hrn(n),t.c[1]=Hrn(n),t}function zun(n,t){if(0===t)return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),void n.o.c.$b();mPn(n,t)}function Uun(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function Xun(n){switch(n.g){case 1:return EIt;case 2:return jIt;case 3:return TIt;default:return MIt}}function Wun(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 2:case 4:return!0;default:return!1}}function Vun(){Vun=O,yft=lhn((bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])))}function Qun(){Qun=O,JCt=lhn((n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GCt,UCt,qCt,XCt,WCt,QCt,VCt,zCt,HCt])))}function Yun(){Yun=O,Xkt=dq(ogn(ogn(FM(dq(new B2,(zyn(),Kyt),(DPn(),Qyt)),_yt),Xyt),Wyt),Fyt,Vyt)}function Jun(){Jun=O,Aht=new IP(QZn,0),Oht=new IP("INCOMING_ONLY",1),$ht=new IP("OUTGOING_ONLY",2)}function Zun(){Zun=O,ftt={boolean:UT,number:Iy,string:Cy,object:TIn,function:TIn,undefined:Wp}}function non(n,t){vH(n>=0,"Negative initial capacity"),vH(t>=0,"Non-positive load factor"),$U(this)}function ton(n,t,e){return!(n>=128)&&JC(n<64?e0(yz(1,n),e):e0(yz(1,n-64),t),0)}function eon(n,t){return!(!n||!t||n==t)&&Cbn(n.b.c,t.b.c+t.b.b)<0&&Cbn(t.b.c,n.b.c+n.b.b)<0}function ion(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new UV(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ron(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Son(n,t=e[i],(kUn(),SCt)),Son(n,t,sCt)}function con(n){var t,e;for(null==n.j&&(n.j=(PY(),Cjn(ett.ce(n)))),t=0,e=n.j.length;t<e;++t);}function aon(n){var t,e;return M$(t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,~n.h+(0==t&&0==e?1:0)&PQn)}function uon(n,t){return TFn(BB(BB(RX(n.g,t.a),46).a,65),BB(BB(RX(n.g,t.b),46).a,65))}function oon(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));return n.hi()&&(e=nZ(n,e)),n.Vh(t,e)}function son(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function hon(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function fon(n){var t,e;return qan(e=new y6,n),hon(e,(Mrn(),sat),n),eBn(n,e,t=new xp),Szn(n,e,t),e}function lon(n){var t,e,i;for(jDn(),e=x8(PMt,sVn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=lmn(i,n);return e}function bon(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=Pdn(n,t,r,r+1);return e}function won(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)vmn(n,c,a)||FRn(n,c,a,!0,!1)}function don(n,t){this.b=n,NO.call(this,(BB(Wtn(QQ((QX(),t$t).o),10),18),t.i),t.g),this.a=(wcn(),C$t)}function gon(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function pon(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function von(n,t,i){this.q=new e.Date,this.q.setFullYear(n+sQn,t,i),this.q.setHours(0,0,0,0),lBn(this,0)}function mon(){mon=O,Nvt=new qP(QZn,0),Lvt=new qP("NODES_AND_EDGES",1),xvt=new qP("PREFER_EDGES",2)}function yon(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+bnn(n))}function kon(n){var t;if(n<0)return _Vn;if(0==n)return 0;for(t=OVn;0==(t&n);t>>=1);return t}function jon(n){var t,e;return 32==(e=ZCn(n.h))?32==(t=ZCn(n.m))?ZCn(n.l)+32:t+20-10:e-12}function Eon(n){var t;return null==(t=n.a[n.b])?null:($X(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Ton(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Mon(n,t,e){var i,r;return i=new H8(t,e),r=new q,n.b=Wxn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Son(n,t,e){var i,r,c;for(c=0,r=Lfn(t,e).Kc();r.Ob();)i=BB(r.Pb(),11),VW(n.c,i,iln(c++))}function Pon(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).g.c=-t.g.c-t.g.b;kNn(n)}function Ion(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).d.c=-t.d.c-t.d.b;yNn(n)}function Con(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&cL(t=Ckn(n),88)&&(n.c=BB(t,26)),n.c}function Oon(n){var t,e,i;t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,i=~n.h+(0==t&&0==e?1:0)&PQn,n.l=t,n.m=e,n.h=i}function Aon(n){var t,e,i,r,c;for(t=new Gj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function $on(n,t){var e,i,r,c,a;for(SQ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function Lon(n){var t,e;for(jDn(),e=-17976931348623157e292,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function Non(n,t,e){var i;return jxn(n,t,i=new Np,(kUn(),oCt),!0,!1),jxn(n,e,i,ICt,!1,!1),i}function xon(n,t,e){var i,r;return r=N2(t,"labels"),XAn((i=new gC(n,e)).a,i.b,r),r}function Don(n,t,e,i){var r;return(r=m$n(n,t,e,i))||!(r=aln(n,e,i))||Fqn(n,t,r)?r:null}function Ron(n,t,e,i){var r;return(r=y$n(n,t,e,i))||!(r=uln(n,e,i))||Fqn(n,t,r)?r:null}function Kon(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!BB(Dq(n.a,e),169).Lb(t))return!1;return!0}function _on(n,t,e){if(yX(t),e.Ob())for(sO(t,IX(e.Pb()));e.Ob();)sO(t,n.a),sO(t,IX(e.Pb()));return t}function Fon(n){var t,e,i;for(SQ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?nsn(t):0),i|=0;return i}function Bon(n,t,e,i,r){var c;return c=jAn(n,t),e&&Oon(c),r&&(n=Smn(n,t),ltt=i?aon(n):M$(n.l,n.m,n.h)),c}function Hon(n,t){var e;try{t.Vd()}catch(i){if(!cL(i=lun(i),78))throw Hp(i);e=i,n.c[n.c.length]=e}}function qon(n,t,e){var i,r;return cL(t,144)&&e?(i=BB(t,144),r=e,n.a[i.b][r.b]+n.a[r.b][i.b]):0}function Gon(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return fwn(n,t)}function zon(n,t){switch(t.g){case 0:cL(n.b,631)||(n.b=new Lan);break;case 1:cL(n.b,632)||(n.b=new fH)}}function Uon(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&BB(n.g[n.i-1],47).Ob():tZ(n);)vC(t,aLn(n))}function Xon(n,t,e){n.g=APn(n,t,(kUn(),oCt),n.b),n.d=APn(n,e,oCt,n.b),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Won(n,t,e){n.g=APn(n,t,(kUn(),ICt),n.j),n.d=APn(n,e,ICt,n.j),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Von(n,t,e){return!jE(AV(new Rq(null,new w1(n.c,16)),new aw(new ZI(t,e)))).sd((dM(),tit))}function Qon(n){var t;return EW(n),t=new sn,n.a.sd(t)?(IL(),new vy(kW(t.a))):(IL(),IL(),Set)}function Yon(n){var t;return!(n.b<=0)&&((t=GO("MLydhHmsSDkK",YTn(fV(n.c,0))))>1||t>=0&&n.b<3)}function Jon(n){var t,e;for(t=new km,e=spn(n,0);e.b!=e.d.c;)Kx(t,0,new wA(BB(b3(e),8)));return t}function Zon(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),81).f.$b();ky(n.b,n),BNn(n)}function nsn(n){return XC(n)?vvn(n):UC(n)?VO(n):zC(n)?(kW(n),n?1231:1237):iz(n)?n.Hb():AG(n)?PN(n):tY(n)}function tsn(n){return XC(n)?Qtt:UC(n)?Ptt:zC(n)?ktt:iz(n)||AG(n)?n.gm:n.gm||Array.isArray(n)&&Gk(ntt,1)||ntt}function esn(n){if(0===n.g)return new cu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function isn(n){if(0===n.g)return new iu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function rsn(n,t,e){if(0===t)return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),void tan(n.o,e);yIn(n,t,e)}function csn(n,t,e){this.g=n,this.e=new Gj,this.f=new Gj,this.d=new YT,this.b=new YT,this.a=t,this.c=e}function asn(n,t,e,i){this.b=new Np,this.n=new Np,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function usn(n){this.e=n,this.d=new p4(this.e.g),this.a=this.d,this.b=dun(this),this.$modCount=n.$modCount}function osn(n){for(;!n.d||!n.d.Ob();){if(!n.b||Wy(n.b))return null;n.d=BB(dU(n.b),47)}return n.d}function ssn(n){return WB(n.c,(Nun(),ZTt)),uen(n.a,Gy(MD(mpn((Rwn(),Vpt)))))?new qu:new Ig(n)}function hsn(n){switch(n.g){case 1:return F3n;default:case 2:return 0;case 3:return JJn;case 4:return B3n}}function fsn(){var n;return wWn(),PNt||(n=ex(ZUn("M",!0)),n=gG(ZUn("M",!1),n),PNt=n)}function lsn(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.ue(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function bsn(n,t,e){var i,r;hN(),i=!!TO(e),(r=BB(t.xc(i),15))||(r=new Np,t.zc(i,r)),r.Fc(e)}function wsn(n,t){var e,i;return(e=BB(ZAn(n,(W$n(),dEt)),19).a)==(i=BB(ZAn(t,dEt),19).a)||e<i?-1:e>i?1:0}function dsn(n,t){return!!bNn(n,t)&&(JCn(n.b,BB(mMn(t,(hWn(),Xft)),21),t),DH(n.a,t),!0)}function gsn(n){var t,e;(t=BB(mMn(n,(hWn(),Elt)),10))&&(y7((e=t.c).a,t),0==e.a.c.length&&y7(vW(t).b,e))}function psn(n){return Qet?x8(Get,dYn,572,0,0,1):BB(Qgn(n.a,x8(Get,dYn,572,n.a.c.length,0,1)),842)}function vsn(n,t,e,i){return nV(),new hy(Pun(Gk(Hnt,1),kVn,42,0,[(zvn(n,t),new vT(n,t)),(zvn(e,i),new vT(e,i))]))}function msn(n,t,e){var i;return fin(i=new $m,t,e),f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),i),i}function ysn(n){var t,e,i,r;for(e=(r=fS(AOt,n)).length,i=x8(Qtt,sVn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function ksn(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new UX(n),e.Qe(a),NBn(a);$U(n.f)}function jsn(n,t){var e;return t===n||!!cL(t,224)&&(e=BB(t,224),Nfn(n.Zb(),e.Zb()))}function Esn(n,t){var e;2*t+1>=n.b.c.length||(Esn(n,2*t+1),(e=2*t+2)<n.b.c.length&&Esn(n,e),KIn(n,t))}function Tsn(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=Jin(e),i=x8(Qnt,IVn,330,r,0,1),this.b=i}function Msn(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:sS(e0(n[i],UQn),e0(t[i],UQn))?-1:1}function Ssn(n,t){var e,i;for(i=spn(n,0);i.b!=i.d.c;)(e=BB(b3(i),214)).e.length>0&&(t.td(e),e.i&&pln(e))}function Psn(n,t){var e,i;return i=BB(yan(n.a,4),126),e=x8(dAt,i9n,415,t,0,1),null!=i&&aHn(i,0,e,0,i.length),e}function Isn(n,t){var e;return e=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Csn(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(BB(e.Pb(),14).Hc(t))return!0;return!1}function Osn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(vmn(n,c,a))return!0;return!1}function Asn(n,t,e){var i,r,c,a;for(kW(e),a=!1,c=n.Zc(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function $sn(n,t){var e;return n===t||!!cL(t,83)&&(e=BB(t,83),zSn(lz(n),e.vc()))}function Lsn(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=BB(r.Pb(),42),n.re(t,i.dd()))return!0;return!1}function Nsn(n,t,e){return n.d[t.p][e.p]||(ivn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function xsn(n,t){if(!n.ai()&&null==t)throw Hp(new _y("The 'no null' constraint is violated"));return t}function Dsn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),Hin(n,null==t?null:(kW(t),t)),n.C&&n.yk(null)}function Rsn(n,t){return!(!n||n==t||!Lx(t,(hWn(),rlt)))&&BB(mMn(t,(hWn(),rlt)),10)!=n}function Ksn(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function _sn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function Fsn(n){_J.call(this,"The given string does not match the expected format for individual spacings.",n)}function Bsn(){Bsn=O,uOt=new cC("ELK",0),oOt=new cC("JSON",1),aOt=new cC("DOT",2),sOt=new cC("SVG",3)}function Hsn(){Hsn=O,sjt=new vI(QZn,0),hjt=new vI("RADIAL_COMPACTION",1),fjt=new vI("WEDGE_COMPACTION",2)}function qsn(){qsn=O,zet=new pS("CONCURRENT",0),Uet=new pS("IDENTITY_FINISH",1),Xet=new pS("UNORDERED",2)}function Gsn(){Gsn=O,wM(),oct=new $O(BJn,sct=rct),uct=new up(HJn),hct=new up(qJn),fct=new up(GJn)}function zsn(){zsn=O,lst=new ji,bst=new Ei,fst=new Ti,hst=new Mi,kW(new Si),sst=new D}function Usn(){Usn=O,emt=new WP("CONSERVATIVE",0),imt=new WP("CONSERVATIVE_SOFT",1),rmt=new WP("SLOPPY",2)}function Xsn(){Xsn=O,dIt=new WA(15),wIt=new XA((sWn(),XSt),dIt),gIt=gPt,hIt=aSt,fIt=KSt,bIt=BSt,lIt=FSt}function Wsn(n,t,e){var i,r;for(i=new YT,r=spn(e,0);r.b!=r.d.c;)DH(i,new wA(BB(b3(r),8)));Asn(n,t,i)}function Vsn(n){var t,e,i;for(t=0,i=x8(PMt,sVn,8,n.b,0,1),e=spn(n,0);e.b!=e.d.c;)i[t++]=BB(b3(e),8);return i}function Qsn(n){var t;return!n.a&&(n.a=new eU(WAt,n,9,5)),0!=(t=n.a).i?HM(BB(Wtn(t,0),678)):null}function Ysn(n,t){var e;return e=rbn(n,t),sS(r0(n,t),0)|YC(r0(n,e),0)?e:rbn(bVn,r0(jz(e,63),1))}function Jsn(n,t){var e;e=null!=mpn((Rwn(),Vpt))&&null!=t.wg()?Gy(MD(t.wg()))/Gy(MD(mpn(Vpt))):1,VW(n.b,t,e)}function Zsn(n,t){var e,i;return(e=BB(n.d.Bc(t),14))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function nhn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function thn(n){var t;if((t=n.a.c.length)>0)return Kz(t-1,n.a.c.length),s6(n.a,t-1);throw Hp(new mv)}function ehn(n,t,e){if(t<0)throw Hp(new Ay(n5n+t));t<n.j.c.length?c5(n.j,t,e):(g3(n,t),WB(n.j,e))}function ihn(n,t,e){if(n>t)throw Hp(new _y(mYn+n+yYn+t));if(n<0||t>e)throw Hp(new Tk(mYn+n+kYn+t+hYn+e))}function rhn(n){if(!n.a||0==(8&n.a.i))throw Hp(new Fy("Enumeration class expected for layout option "+n.f))}function chn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.ri(n.i),aHn(t,0,n.g,0,n.i))}function ahn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.c,null)}function uhn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.b,null),n.b=n.b+1&e}function ohn(n,t,e){var i;return LZ(t,n.c.length),0!=(i=e.Pc()).length&&(tH(n.c,t,i),!0)}function shn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return n[t];return null}function hhn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.re(t,i.cd()))return i;return null}function fhn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?nsn(t):0),c|=0;return c}function lhn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function bhn(n){var t;for(yX(n),I_(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&dAn(n);t++)U5(n);return t}function whn(n){var t,e,i;for(i=0,e=new oz(ZL(n.a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||++i;return i}function dhn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw Hp(new wv);e=vW(i),++r}}function ghn(n,t){var e,i,r;for(r=t-n.f,i=new Wb(n.d);i.a<i.c.c.length;)kdn(e=BB(n0(i),443),e.e,e.f+r);n.f=t}function phn(n,t,i){return e.Math.abs(t-n)<_3n||e.Math.abs(i-n)<_3n||(t-n>_3n?n-i>_3n:i-n>_3n)}function vhn(n,t){return n?t&&!n.j||cL(n,124)&&0==BB(n,124).a.b?0:n.Re():0}function mhn(n,t){return n?t&&!n.k||cL(n,124)&&0==BB(n,124).a.a?0:n.Se():0}function yhn(n){return ODn(),n<0?-1!=n?new Rpn(-1,-n):Ytt:n<=10?Ztt[IJ(n)]:new Rpn(1,n)}function khn(n){throw Zun(),Hp(new gy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function jhn(n){hk(),V$(this),jQ(this),this.e=n,Ixn(this,n),this.g=null==n?zWn:Bbn(n),this.a="",this.b=n,this.a=""}function Ehn(){this.a=new nu,this.f=new dg(this),this.b=new gg(this),this.i=new pg(this),this.e=new vg(this)}function Thn(){cy.call(this,new q8(etn(16))),lin(2,oVn),this.b=2,this.a=new HW(null,null,0,null),iv(this.a,this.a)}function Mhn(){Mhn=O,cvt=new KP("DUMMY_NODE_OVER",0),avt=new KP("DUMMY_NODE_UNDER",1),uvt=new KP("EQUAL",2)}function Shn(){Shn=O,Xat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[(Ffn(),_Pt),FPt])),Wat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[HPt,KPt]))}function Phn(n){return(kUn(),yCt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b}function Ihn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Q$n(BB(t.Pb(),561),n.e,n.f),WB(n.g,e)}function Chn(n,t){var e,i;e=n.nk(t,null),i=null,t&&(iE(),cen(i=new Kp,n.r)),(e=HTn(n,i,e))&&e.Fi()}function Ohn(n,t){var e,i;for(i=0!=H$n(n.d,1),e=!0;e;)e=!1,e=t.c.Tf(t.e,i),e|=DNn(n,t,i,!1),i=!i;$rn(n)}function Ahn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=dNn(t.q,n.b),t.q.d>r&&(aEn(t.q,r),i=e!=t.q.d)),i}function $hn(n,t){var i,r,c,a,u;return a=t.i,u=t.j,r=a-(i=n.f).i,c=u-i.j,e.Math.sqrt(r*r+c*c)}function Lhn(n,t){var e;return(e=Ydn(n))||(!$Ot&&($Ot=new Oo),RHn(),f9((e=new Ip(YPn(t))).Vk(),n)),e}function Nhn(n,t){var e,i;return(e=BB(n.c.Bc(t),14))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function xhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Dhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Rhn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return!1;return!0}function Khn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function _hn(n){var t;return Px(n.a!=n.b),t=n.d.a[n.a],Ex(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function Fhn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw Hp(new yv);return t=n.a,n.a+=n.c.c,++n.b,iln(t)}function Bhn(n){var t;return t=new ftn(n),i2(n.a,sut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[t]))),t.d&&WB(t.f,t.d),t.f}function Hhn(n){var t;return qan(t=new O$(n.a),n),hon(t,(hWn(),dlt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function qhn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),70)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function Ghn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(cY(n,BB(i.Pb(),57),e))return!0;return!1}function zhn(n){var t,e;for(e=new Wb(n.r);e.a<e.c.c.length;)if(t=BB(n0(e),10),n.n[t.p]<=0)return t;return null}function Uhn(n){var t,e;for(e=new Rv,t=new Wb(n);t.a<t.c.c.length;)Frn(e,dDn(BB(n0(t),33)));return e}function Xhn(n){var t;return t=kA(Imt),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),dft))&&dq(t,(yMn(),_at),(lWn(),Bot)),t}function Whn(n,t,e){var i;i=new MOn(n,t),JCn(n.r,t.Hf(),i),e&&!Hz(n.u)&&(i.c=new yJ(n.d),Otn(t.wf(),new Iw(i)))}function Vhn(n,t){var e;return JO(n)&&JO(t)&&(e=n-t,!isNaN(e))?e:Kkn(JO(n)?Pan(n):n,JO(t)?Pan(t):t)}function Qhn(n,t){return t<n.length&&(b1(t,n.length),63!=n.charCodeAt(t))&&(b1(t,n.length),35!=n.charCodeAt(t))}function Yhn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new ZSn(n.c,n.a,e,c),new uRn(e,n.a,r,n.e,n.b,n.c==(oin(),Amt)))}function Jhn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,1,r,t),e?e.Ei(i):e=i),e}function Zhn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,3,r,t),e?e.Ei(i):e=i),e}function nfn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,0,r,t),e?e.Ei(i):e=i),e}function tfn(n,t){var e,i,r,c;return(c=kIn((i=t,(r=n?Ydn(n):null)&&r.Xk(),i)))==t&&(e=Ydn(n))&&e.Xk(),c}function efn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function ifn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function rfn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(BB(t.g,367),r=t.i,i=0;i<r;++i);}function cfn(n){var t,i,r;for(r=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),r=e.Math.max(r,t.g);return r}function afn(n){var t,e,i;for(i=new Wb(n.b);i.a<i.c.c.length;)(t=(e=BB(n0(i),214)).c.Rf()?e.f:e.a)&&wqn(t,e.j)}function ufn(){ufn=O,vIt=new HI("INHERIT",0),pIt=new HI("INCLUDE_CHILDREN",1),mIt=new HI("SEPARATE_CHILDREN",2)}function ofn(n,t){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),void sqn(n.n);case 2:return void $in(n,null)}zun(n,t)}function sfn(n){switch(n.gc()){case 0:return Fnt;case 1:return new Pq(yX(n.Xb(0)));default:return new SY(n)}}function hfn(n){switch(s_(),n.gc()){case 0:return VX(),Vnt;case 1:return new yk(n.Kc().Pb());default:return new vS(n)}}function ffn(n){switch(s_(),n.c){case 0:return VX(),Vnt;case 1:return new yk(JIn(new QT(n)));default:return new sy(n)}}function lfn(n,t){yX(n);try{return n.xc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function bfn(n,t){yX(n);try{return n.Bc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function wfn(n,t){yX(n);try{return n.Hc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function dfn(n,t){yX(n);try{return n.Mc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function gfn(n,t){yX(n);try{return n._b(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function pfn(n,t){n.a.c.length>0&&dsn(BB(xq(n.a,n.a.c.length-1),570),t)||WB(n.a,new p5(t))}function vfn(n){var t,e;G_(),t=n.d.c-n.e.c,Otn((e=BB(n.g,145)).b,new jd(t)),Otn(e.c,new Ed(t)),e5(e.i,new Td(t))}function mfn(n){var t;return(t=new Ik).a+="VerticalSegment ",uO(t,n.e),t.a+=" ",oO(t,JL(new mk,new Wb(n.k))),t.a}function yfn(n){var t;return(t=BB(lnn(n.c.c,""),229))||(t=new UZ(jj(kj(new pu,""),"Other")),Jgn(n.c.c,"",t)),t}function kfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (name: ",cO(t,n.zb),t.a+=")",t.a)}function jfn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),e}function Efn(n,t){var e,i;for(e=0,i=abn(n,t).Kc();i.Ob();)e+=null!=mMn(BB(i.Pb(),11),(hWn(),Elt))?1:0;return e}function Tfn(n,t,e){var i,r,c;for(i=0,c=spn(n,0);c.b!=c.d.c&&!((r=Gy(MD(b3(c))))>e);)r>=t&&++i;return i}function Mfn(n,t,e){var i;return i=new N7(n.e,3,13,null,t.c||(gWn(),l$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function Sfn(n,t,e){var i;return i=new N7(n.e,4,13,t.c||(gWn(),l$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Pfn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,8,r,n.r),e?e.Ei(i):e=i),e}function Ifn(n,t){var e,i;return!(i=(e=BB(t,676)).vk())&&e.wk(i=cL(t,88)?new $C(n,BB(t,26)):new _0(n,BB(t,148))),i}function Cfn(n,t,e){var i;n.qi(n.i+1),i=n.oi(t,e),t!=n.i&&aHn(n.g,t,n.g,t+1,n.i-t),$X(n.g,t,i),++n.i,n.bi(t,e),n.ci()}function Ofn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?oO(n.a,n.b):n.a=new lN(n.d),G0(n.a,t.a,t.d.length,e)),n}function Afn(n,t){var e,i,r;if(t.vi(n.a),null!=(r=BB(yan(n.a,8),1936)))for(e=0,i=r.length;e<i;++e)null.jm()}function $fn(n,t){var e;return e=new sn,n.a.sd(e)?(IL(),new vy(kW(T7(n,e.a,t)))):(EW(n),IL(),IL(),Set)}function Lfn(n,t){switch(t.g){case 2:case 1:return abn(n,t);case 3:case 4:return ean(abn(n,t))}return SQ(),SQ(),set}function Nfn(n,t){return XC(n)?mK(n,t):UC(n)?vK(n,t):zC(n)?(kW(n),GC(n)===GC(t)):iz(n)?n.Fb(t):AG(n)?FO(n,t):v0(n,t)}function xfn(n){return n?0!=(1&n.i)?n==$Nt?ktt:n==ANt?Att:n==DNt?Itt:n==xNt?Ptt:n==LNt?Rtt:n==RNt?_tt:n==NNt?Ttt:Stt:n:null}function Dfn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=dvn(r,e,i,n[0]):1==i?r[t]=dvn(r,n,t,e[0]):YOn(n,e,r,t,i))}function Rfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Oe),eOn(e,t))}function Kfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Ae),eOn(e,t))}function _fn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n;case 2:return n.k}return Eyn(n,t,e,i)}function Ffn(){Ffn=O,BPt=new KI(hJn,0),FPt=new KI(aJn,1),_Pt=new KI(cJn,2),KPt=new KI(pJn,3),HPt=new KI("UP",4)}function Bfn(){Bfn=O,wut=new YS(QZn,0),but=new YS("INSIDE_PORT_SIDE_GROUPS",1),lut=new YS("FORCE_MODEL_ORDER",2)}function Hfn(n,t,e){if(n<0||t>e)throw Hp(new Ay(mYn+n+kYn+t+", size: "+e));if(n>t)throw Hp(new _y(mYn+n+yYn+t))}function qfn(n,t,e){if(t<0)cCn(n,e);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Vj(n,n.yh(),t)}}function Gfn(n,t,e,i,r,c,a,u){var o;for(o=e;c<a;)o>=i||t<e&&u.ue(n[t],n[o])<=0?$X(r,c++,n[t++]):$X(r,c++,n[o++])}function zfn(n,t,e,i,r,c){this.e=new Np,this.f=(ain(),Gvt),WB(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Ufn(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),26),GC(t)===GC(e))return!0;return!1}function Xfn(n){var t,e,i,r;for(dWn(),i=0,r=(e=tpn()).length;i<r;++i)if(-1!=E7((t=e[i]).a,n,0))return t;return Crt}function Wfn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function Vfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (source: ",cO(t,n.d),t.a+=")",t.a)}function Qfn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,5,r,n.a),e?KEn(e,i):e=i),e}function Yfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,2,e,t))}function Jfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function Zfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function nln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,3,e,t))}function tln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,9,e,t))}function eln(n,t){var e;return-1==n.b&&n.a&&(e=n.a.Gj(),n.b=e?n.c.Xg(n.a.aj(),e):Awn(n.c.Tg(),n.a)),n.c.Og(n.b,t)}function iln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(tq(),Ctt)[t])&&(e=Ctt[t]=new xb(n)),e):new xb(n)}function rln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(Tq(),Ktt)[t])&&(e=Ktt[t]=new Rb(n)),e):new Rb(n)}function cln(n){var t;return n.k==(uSn(),Mut)&&((t=BB(mMn(n,(hWn(),Qft)),61))==(kUn(),sCt)||t==SCt)}function aln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?m$n(n,i,t,e):null}function uln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?y$n(n,i,t,e):null}function oln(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),138),GC(t)===GC(e))return!0;return!1}function sln(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));if(n.hi()&&n.Hc(e))throw Hp(new _y(a8n));n.Xh(t,e)}function hln(n,t){var e;if(null==(e=sen(n.i,t)))throw Hp(new ek("Node did not exist in input."));return Kcn(t,e),null}function fln(n,t){var e;if(cL(e=NNn(n,t),322))return BB(e,34);throw Hp(new _y(r6n+t+"' is not a valid attribute"))}function lln(n,t,e){var i,r;for(r=cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function bln(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function wln(n){var t,e,i;for(t=new Np,i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),594),gun(t,BB(e.jf(),14));return t}function dln(n){var t,e;for(e=BB(mMn(n,(qqn(),lkt)),15).Kc();e.Ob();)DH((t=BB(e.Pb(),188)).b.d,t),DH(t.c.b,t)}function gln(n){switch(BB(mMn(n,(hWn(),ilt)),303).g){case 1:hon(n,ilt,(z7(),Sft));break;case 2:hon(n,ilt,(z7(),Ift))}}function pln(n){var t;n.g&&(xxn((t=n.c.Rf()?n.f:n.a).a,n.o,!0),xxn(t.a,n.o,!1),hon(n.o,(HXn(),ept),(QEn(),UIt)))}function vln(n){var t;if(!n.a)throw Hp(new Fy("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,xQ(n,t),NQ(n,t)}function mln(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,$X(n.a,n.c,null),t)}function yln(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=BB(e.Pb(),213)).f&&n.b[t.c]<-1e-10)return t;return null}function kln(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new UV(t.d,0,t.a,t.b);default:return null}}function jln(n){switch(n.g){case 2:return FPt;case 1:return _Pt;case 4:return KPt;case 3:return HPt;default:return BPt}}function Eln(n){switch(n.g){case 1:return ICt;case 2:return sCt;case 3:return oCt;case 4:return SCt;default:return PCt}}function Tln(n){switch(n.g){case 1:return SCt;case 2:return ICt;case 3:return sCt;case 4:return oCt;default:return PCt}}function Mln(n){switch(n.g){case 1:return oCt;case 2:return SCt;case 3:return ICt;case 4:return sCt;default:return PCt}}function Sln(n){switch(n){case 0:return new mm;case 1:return new pm;case 2:return new vm;default:throw Hp(new wv)}}function Pln(n,t){return n<t?-1:n>t?1:n==t?0==n?Pln(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function Iln(n,t){OTn(t,"Sort end labels",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new we),new de),new ge),HSn(t)}function Cln(n,t,e){var i,r;return n.ej()?(r=n.fj(),i=YCn(n,t,e),n.$i(n.Zi(7,iln(e),i,t,r)),i):YCn(n,t,e)}function Oln(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.cd(),N6(n,i=((e=t.Sh())&DWn)%n.d.length,A$n(n,i,e,r)))}function Aln(n,t){var e;e=0!=(n.Bb&k6n),t?n.Bb|=k6n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,10,e,t))}function $ln(n,t){var e;e=0!=(n.Bb&_Qn),t?n.Bb|=_Qn:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,12,e,t))}function Lln(n,t){var e;e=0!=(n.Bb&T9n),t?n.Bb|=T9n:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,15,e,t))}function Nln(n,t){var e;e=0!=(n.Bb&M9n),t?n.Bb|=M9n:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,11,e,t))}function xln(n,t){var e;return 0!=(e=Pln(n.b.c,t.b.c))||0!=(e=Pln(n.a.a,t.a.a))?e:Pln(n.a.b,t.a.b)}function Dln(n,t){var e;if(null==(e=RX(n.k,t)))throw Hp(new ek("Port did not exist in input."));return Kcn(t,e),null}function Rln(n){var t,e;for(e=G$n(Utn(n)).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return y4((UM(),RAt),t);return null}function Kln(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=0,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&++c;return c}function _ln(n,t,e){var i,r;return i=BB(t.We(n.a),35),r=BB(e.We(n.a),35),null!=i&&null!=r?Ncn(i,r):null!=i?-1:null!=r?1:0}function Fln(n,t,e){var i;if(n.c)lMn(n.c,t,e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Fln(BB(n0(i),157),t,e)}function Bln(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),y7(n.b.b,e.b),uY(BB(e.a,189),BB(e.b,81))}function Hln(n){var t,e;for(e=xX(new Ik,91),t=!0;n.Ob();)t||(e.a+=FWn),t=!1,uO(e,n.Pb());return(e.a+="]",e).a}function qln(n,t){var e;e=0!=(n.Bb&hVn),t?n.Bb|=hVn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,16,e,t))}function Gln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function zln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function Uln(n,t){var e;e=0!=(n.Bb&BQn),t?n.Bb|=BQn:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,20,e,t))}function Xln(n){var t;return t=x8(ONt,WVn,25,2,15,1),n-=BQn,t[0]=(n>>10)+HQn&QVn,t[1]=56320+(1023&n)&QVn,Bdn(t,0,t.length)}function Wln(n){var t;return(t=BB(mMn(n,(HXn(),Udt)),103))==(Ffn(),BPt)?Gy(MD(mMn(n,Edt)))>=1?FPt:KPt:t}function Vln(n){switch(BB(mMn(n,(HXn(),Zdt)),218).g){case 1:return new ic;case 3:return new oc;default:return new ec}}function Qln(n){if(n.c)Qln(n.c);else if(n.d)throw Hp(new Fy("Stream already terminated, can't be modified or used"))}function Yln(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (identifier: ",cO(t,n.k),t.a+=")",t.a)}function Jln(n,t,e){var i;return tE(),jen(i=new ro,t),Een(i,e),n&&f9((!n.a&&(n.a=new $L(xOt,n,5)),n.a),i),i}function Zln(n,t,e,i){var r,c;return kW(i),kW(e),null==(c=null==(r=n.xc(t))?e:ZT(BB(r,15),BB(e,14)))?n.Bc(t):n.zc(t,c),c}function nbn(n){var t,e,i,r;return orn(e=new YK(t=BB(Vj((r=(i=n.gm).f)==Unt?i:r),9),BB(SR(t,t.length),9),0),n),e}function tbn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),10),oun(e,BB(xq(t,i.p),14)))return i;return null}function ebn(n,t,e){try{_on(n,t,e)}catch(i){throw cL(i=lun(i),597)?Hp(new g5(i)):Hp(i)}return t}function ibn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n-t)&&e<OQn?e:uan(hun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function rbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n+t)&&e<OQn?e:uan(sun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function cbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n*t)&&e<OQn?e:uan(fqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function abn(n,t){var e;return n.i||eCn(n),(e=BB(oV(n.g,t),46))?new s1(n.j,BB(e.a,19).a,BB(e.b,19).a):(SQ(),SQ(),set)}function ubn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,oY(n.b)):++n.d,i}function obn(n,t,i){n.n=kq(LNt,[sVn,FQn],[364,25],14,[i,IJ(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function sbn(){var n,t,i;yTn(),i=Let+++Date.now(),n=IJ(e.Math.floor(i*uYn))&sYn,t=IJ(i-n*oYn),this.a=1502^n,this.b=t^aYn}function hbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).b);return yX(t),new OO(t)}function fbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).e);return yX(t),new OO(t)}function lbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).g);return yX(t),new OO(t)}function bbn(n){var t,e;for(e=t$n(Utn(dZ(n))).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return k4((XM(),UAt),t);return null}function wbn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw Hp(new Hy("at index "+t));return new Jy(n)}function dbn(n,t){var e;if(cL(e=NNn(n.Tg(),t),99))return BB(e,18);throw Hp(new _y(r6n+t+"' is not a valid reference"))}function gbn(n){var t;return(t=bSn(n))>34028234663852886e22?RQn:t<-34028234663852886e22?KQn:t}function pbn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function vbn(n){var t,e,i;for(t=new hR(n.Hd().gc()),i=0,e=L9(n.Hd().Kc());e.Ob();)jZ(t,e.Pb(),iln(i++));return NSn(t.a)}function mbn(n,t){var e,i,r;for(r=new xp,i=t.vc().Kc();i.Ob();)VW(r,(e=BB(i.Pb(),42)).cd(),lan(n,BB(e.dd(),15)));return r}function ybn(n,t){0==n.n.c.length&&WB(n.n,new RJ(n.s,n.t,n.i)),WB(n.b,t),smn(BB(xq(n.n,n.n.c.length-1),211),t),BFn(n,t)}function kbn(n){return n.c==n.b.b&&n.i==n.g.b||(n.a.c=x8(Ant,HWn,1,0,5,1),gun(n.a,n.b),gun(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function jbn(n,t){var e,i;for(i=0,e=BB(t.Kb(n),20).Kc();e.Ob();)qy(TD(mMn(BB(e.Pb(),17),(hWn(),Ilt))))||++i;return i}function Ebn(n,t){var i,r;r=Gy(MD(edn(f2(t),(HXn(),ypt)))),Fkn(t,i=e.Math.max(0,r/2-.5),1),WB(n,new lP(t,i))}function Tbn(){Tbn=O,qlt=new BP(QZn,0),_lt=new BP("FIRST",1),Flt=new BP(I1n,2),Blt=new BP("LAST",3),Hlt=new BP(C1n,4)}function Mbn(){Mbn=O,ZPt=new FI(hJn,0),YPt=new FI("POLYLINE",1),QPt=new FI("ORTHOGONAL",2),JPt=new FI("SPLINES",3)}function Sbn(){Sbn=O,Zjt=new kI("ASPECT_RATIO_DRIVEN",0),nEt=new kI("MAX_SCALE_DRIVEN",1),Jjt=new kI("AREA_DRIVEN",2)}function Pbn(){Pbn=O,HEt=new EI("P1_STRUCTURE",0),qEt=new EI("P2_PROCESSING_ORDER",1),GEt=new EI("P3_EXECUTION",2)}function Ibn(){Ibn=O,ejt=new gI("OVERLAP_REMOVAL",0),njt=new gI("COMPACTION",1),tjt=new gI("GRAPH_SIZE_CALCULATION",2)}function Cbn(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t))}function Obn(n,t){var e,i;for(e=spn(n,0);e.b!=e.d.c;){if((i=zy(MD(b3(e))))==t)return;if(i>t){U0(e);break}}nX(e,t)}function Abn(n,t){var e,i,r,c,a;if(e=t.f,Jgn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Jgn(n.c.e,i,t)}function $bn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.ue(n[c-1],n[c])>0;--c)a=n[c],$X(n,c,n[c-1]),$X(n,c-1,a)}function Lbn(n,t,e,i){if(t<0)TLn(n,e,i);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Tj(n,n.yh(),t,i)}}function Nbn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw Hp(new _y("Node "+t+" not part of edge "+n))}function xbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Dbn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function Rbn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return _fn(n,t,e,i)}function Kbn(n){return n.k==(uSn(),Iut)&&o5(new Rq(null,new zU(new oz(ZL(lbn(n).a.Kc(),new h)))),new qr)}function _bn(n){return null==n.e?n:(!n.c&&(n.c=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Fbn(n,t){return n.h==IQn&&0==n.m&&0==n.l?(t&&(ltt=M$(0,0,0)),WO((X7(),dtt))):(t&&(ltt=M$(n.l,n.m,n.h)),M$(0,0,0))}function Bbn(n){return Array.isArray(n)&&n.im===C?nE(tsn(n))+"@"+(nsn(n)>>>0).toString(16):n.toString()}function Hbn(n){var t;this.a=new YK(t=BB(n.e&&n.e(),9),BB(SR(t,t.length),9),0),this.b=x8(Ant,HWn,1,this.a.a.length,5,1)}function qbn(n){var t,e,i;for(this.a=new fA,i=new Wb(n);i.a<i.c.c.length;)e=BB(n0(i),14),brn(t=new hG,e),TU(this.a,t)}function Gbn(n){var t,e;for(qD(),t=n.o.b,e=BB(BB(h6(n.r,(kUn(),SCt)),21),84).Kc();e.Ob();)BB(e.Pb(),111).e.b+=t}function zbn(n){var t;if(n.b){if(zbn(n.b),n.b.d!=n.c)throw Hp(new vv)}else n.d.dc()&&(t=BB(n.f.c.xc(n.e),14))&&(n.d=t)}function Ubn(n){var t;return null==n||(t=n.length)>0&&(b1(t-1,n.length),58==n.charCodeAt(t-1))&&!Xbn(n,LAt,NAt)}function Xbn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(ton((b1(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function Wbn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(tSn(t,(e=BB(i.Pb(),266)).d)||CIn(t,e.d))return!0;return!1}function Vbn(n,t){var e,i,r;for(r=(i=HRn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function Qbn(n,t){var e,i,r,c;for(dD(),r=t,z9(i=H9(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=gkn(n,i[e],e))&&Cln(n,e,c)}function Ybn(n,t){var e,i,r,c,a,u;for(i=0,e=0,a=0,u=(c=t).length;a<u;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Jbn(n){var t,e,i;for((i=new Sk).a+="[",t=0,e=n.gc();t<e;)cO(i,kN(n.ki(t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a}function Zbn(n){var t,e,i;return i=ATn(n),!WE(n.c)&&(rtn(i,"knownLayouters",e=new Il),t=new rp(e),e5(n.c,t)),i}function nwn(n,t){var e,i;for(kW(t),e=!1,i=new Wb(n);i.a<i.c.c.length;)ywn(t,n0(i),!1)&&(AU(i),e=!0);return e}function twn(n){var t,e;for(e=Gy(MD(n.a.We((sWn(),OPt)))),t=new Wb(n.a.xf());t.a<t.c.c.length;)VUn(n,BB(n0(t),680),e)}function ewn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),WB(n.b.b,BB(e.b,81)),g2(BB(e.a,189),BB(e.b,81))}function iwn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)kG(r,0,new HX(n.a));PZ(t,BB(xq(r,r.c.length-e),29)),n.b[t.p]=e}function rwn(n,t,e){var i;!(i=e)&&(i=LH(new Xm,0)),OTn(i,qZn,2),mvn(n.b,t,mcn(i,1)),Kqn(n,t,mcn(i,1)),qUn(t,mcn(i,1)),HSn(i)}function cwn(n,t,e,i,r){BZ(),UNn(aM(cM(rM(uM(new Hv,0),r.d.e-n),t),r.d)),UNn(aM(cM(rM(uM(new Hv,0),e-r.a.e),r.a),i))}function awn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&Yq(this.c,this.b,this.a)}function uwn(n){Rwn(),this.c=u6(Pun(Gk(rMt,1),HWn,831,0,[Wpt])),this.b=new xp,this.a=n,VW(this.b,Vpt,1),Otn(Qpt,new Pg(this))}function own(n,t){var e;return n.d?hU(n.b,t)?BB(RX(n.b,t),51):(e=t.Kf(),VW(n.b,t,e),e):t.Kf()}function swn(n,t){var e;return GC(n)===GC(t)||!!cL(t,91)&&(e=BB(t,91),n.e==e.e&&n.d==e.d&&E4(n,e.a))}function hwn(n){switch(kUn(),n.g){case 4:return sCt;case 1:return oCt;case 3:return SCt;case 2:return ICt;default:return PCt}}function fwn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return Ean(n,t)}function lwn(n){switch(n.g){case 0:return new Ga;case 1:return new za;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function bwn(n){switch(n.g){case 0:return new qa;case 1:return new Ua;default:throw Hp(new _y(M1n+(null!=n.f?n.f:""+n.g)))}}function wwn(n){switch(n.g){case 0:return new Vm;case 1:return new ym;default:throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}}function dwn(n){switch(n.g){case 1:return new Ra;case 2:return new gD;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function gwn(n){var t,e;if(n.b)return n.b;for(e=Qet?null:n.d;e;){if(t=Qet?null:e.b)return t;e=Qet?null:e.d}return lM(),Het}function pwn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&Icn(n)==n.d-1&&(--e,e|=0),t-=ZCn(e))}function vwn(n){var t,e,i;return n<tet.length?tet[n]:(t=31&n,(i=x8(ANt,hQn,25,1+(e=n>>5),15,1))[e]=1<<t,new lU(1,e+1,i))}function mwn(n){var t,e,i;return(e=n.zg())?cL(t=n.Ug(),160)&&null!=(i=mwn(BB(t,160)))?i+"."+e:e:null}function ywn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),GC(t)===GC(i)||null!=t&&Nfn(t,i))return e&&r.Qb(),!0;return!1}function kwn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.Hi(t,n.oi(t,i)),++t;return!0}function jwn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ewn(n){return Shn(),hN(),!!(Dbn(BB(n.a,81).j,BB(n.b,103))||0!=BB(n.a,81).d.e&&Dbn(BB(n.a,81).j,BB(n.b,103)))}function Twn(n){x9(),BB(n.We((sWn(),qSt)),174).Hc((n_n(),VCt))&&(BB(n.We(fPt),174).Fc((lCn(),cCt)),BB(n.We(qSt),174).Mc(VCt))}function Mwn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(BB(n.g[e],366).Di(t))return!1;return f9(n,t)}return!1}function Swn(n){var t,e,i;for(t=new Il,i=new qb(n.b.Kc());i.b.Ob();)e=VSn(BB(i.b.Pb(),686)),WU(t,t.a.length,e);return t.a}function Pwn(n){var t;return!n.c&&(n.c=new Nn),m$(n.d,new Dn),YKn(n),t=lDn(n),JT(new Rq(null,new w1(n.d,16)),new Cw(n)),t}function Iwn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (instanceClassName: ",cO(t,n.D),t.a+=")",t.a)}function Cwn(n,t){var e,i;t&&(e=Ren(t,"x"),Ten(new Zg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new np(n).a,(kW(i),i)))}function Own(n,t){var e,i;t&&(e=Ren(t,"x"),Cen(new Vg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Yg(n).a,(kW(i),i)))}function Awn(n,t){var e,i,r;if(null==n.i&&qFn(n),e=n.i,-1!=(i=t.aj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function $wn(n){var t,e,i,r;for(e=BB(n.g,674),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(vFn(n,t,e[r])){Lyn(n,i);break}}function Lwn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[UVn]))}function Nwn(n){var t;switch(WX(),(t=n.Pc()).length){case 0:return Fnt;case 1:return new Pq(yX(t[0]));default:return new SY(wbn(t))}}function xwn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),Nut));case 2:return KB(n.j,(gcn(),Dut));default:return SQ(),SQ(),set}}function Dwn(n,t){switch(t){case 3:return void Men(n,0);case 4:return void Sen(n,0);case 5:return void Pen(n,0);case 6:return void Ien(n,0)}ofn(n,t)}function Rwn(){Rwn=O,AM(),HXn(),Vpt=Opt,Qpt=u6(Pun(Gk(lMt,1),k3n,146,0,[mpt,ypt,jpt,Ept,Spt,Ppt,Ipt,Cpt,$pt,Npt,kpt,Tpt,Apt]))}function Kwn(n){var t,e;t=n.d==($Pn(),Jst),e=$En(n),hon(n.a,(HXn(),kdt),t&&!e||!t&&e?(wvn(),$Mt):(wvn(),AMt))}function _wn(n,t){var e;return(e=BB(P4(n,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Qc(lH(e.gc()))}function Fwn(){Fwn=O,eOt=new YI("SIMPLE",0),ZCt=new YI("GROUP_DEC",1),tOt=new YI("GROUP_MIXED",2),nOt=new YI("GROUP_INC",3)}function Bwn(){Bwn=O,z$t=new $o,K$t=new Lo,_$t=new No,F$t=new xo,B$t=new Do,H$t=new Ro,q$t=new Ko,G$t=new _o,U$t=new Fo}function Hwn(n,t,e){qtn(),sm.call(this),this.a=kq(Xit,[sVn,rJn],[595,212],0,[nrt,Zit],2),this.c=new bA,this.g=n,this.f=t,this.d=e}function qwn(n,t){this.n=kq(LNt,[sVn,FQn],[364,25],14,[t,IJ(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function Gwn(n,t){OTn(t,"End label post-processing",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new ae),new ue),new oe),HSn(t)}function zwn(n,t,e){var i;return i=Gy(n.p[t.i.p])+Gy(n.d[t.i.p])+t.n.b+t.a.b,Gy(n.p[e.i.p])+Gy(n.d[e.i.p])+e.n.b+e.a.b-i}function Uwn(n,t,e){var i,r;for(i=e0(e,UQn),r=0;0!=Vhn(i,0)&&r<t;r++)i=rbn(i,e0(n[r],UQn)),n[r]=dG(i),i=kz(i,32);return dG(i)}function Xwn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))<64&&(r=i0(r,yz(1,t)));return r}function Wwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Vwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Qwn(n,t){return n.i>0&&(t.length<n.i&&(t=Den(tsn(t).c,n.i)),aHn(n.g,0,t,0,n.i)),t.length>n.i&&$X(t,n.i,null),t}function Ywn(n,t,e){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),Cfn(n,i,t),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):Cfn(n,n.i,t),e}function Jwn(n,t,e){var i,r;return i=new N7(n.e,4,10,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Zwn(n,t,e){var i,r;return i=new N7(n.e,3,10,null,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function ndn(n){var t;return qD(),t=new wA(BB(n.e.We((sWn(),BSt)),8)),n.B.Hc((n_n(),GCt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function tdn(n){return bvn(),(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197)}function edn(n,t){var e,i;return i=null,Lx(n,(HXn(),Mpt))&&(e=BB(mMn(n,Mpt),94)).Xe(t)&&(i=e.We(t)),null==i&&(i=mMn(vW(n),t)),i}function idn(n,t){var e,i,r;return!!cL(t,42)&&(i=(e=BB(t,42)).cd(),wW(r=lfn(n.Rc(),i),e.dd())&&(null!=r||n.Rc()._b(i)))}function rdn(n,t){var e;return n.f>0&&(n.qj(),-1!=A$n(n,((e=null==t?0:nsn(t))&DWn)%n.d.length,e,t))}function cdn(n,t){var e,i;return n.f>0&&(n.qj(),e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?e.dd():null}function adn(n,t){var e,i,r,c;for(c=axn(n.e.Tg(),t),e=BB(n.g,119),r=0;r<n.i;++r)if(i=e[r],c.rl(i.ak()))return!1;return!0}function udn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!BB(n.b,49).Zg())return!0;return n.b=null,!1}return!0}function odn(n,t){n.mj();try{n.d.Vc(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function sdn(n,t){var e,i;return s$(),i=null,t==(e=fR((fk(),fk(),rtt)))&&(i=BB(SJ(itt,n),615)),i||(i=new zX(n),t==e&&mZ(itt,n,i)),i}function hdn(n,t){var i,r;n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function fdn(n,t){var e;n.c=t,n.a=pwn(t),n.a<54&&(n.f=(e=t.d>1?i0(yz(t.a[1],32),e0(t.a[0],UQn)):e0(t.a[0],UQn),j2(cbn(t.e,e))))}function ldn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n%t)&&e<OQn?e:uan((Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!0),ltt))}function bdn(n,t){var e;Dzn(t),(e=BB(mMn(n,(HXn(),Jdt)),276))&&hon(n,Jdt,Ayn(e)),nx(n.c),nx(n.f),V6(n.d),V6(BB(mMn(n,Agt),207))}function wdn(n){this.e=x8(ANt,hQn,25,n.length,15,1),this.c=x8($Nt,ZYn,25,n.length,16,1),this.b=x8($Nt,ZYn,25,n.length,16,1),this.f=0}function ddn(n){var t,e;for(n.j=x8(xNt,qQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.j[t.p]=t.o.b/n.i}function gdn(n){var t;0!=n.c&&(1==(t=BB(xq(n.a,n.b),287)).b?(++n.b,n.b<n.a.c.length&&Tb(BB(xq(n.a,n.b),287))):--t.b,--n.c)}function pdn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(lbn(t).a.Kc(),new h))),17).d.i).k==(uSn(),Put)&&WB(n.e,t)}while(t.k==(uSn(),Put))}function vdn(){vdn=O,LCt=new WA(15),$Ct=new XA((sWn(),XSt),LCt),xCt=new XA(LPt,15),NCt=new XA(vPt,iln(0)),ACt=new XA(cSt,dZn)}function mdn(){mdn=O,KCt=new VI("PORTS",0),_Ct=new VI("PORT_LABELS",1),RCt=new VI("NODE_LABELS",2),DCt=new VI("MINIMUM_SIZE",3)}function ydn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)Yxn(n,(b1(e,t.length),t.charCodeAt(e)),(b1(e+1,t.length),t.charCodeAt(e+1)))}function kdn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),i.s+c,i.t+a);n.e=t,n.f=e}function jdn(n,t){var e,i,r;for(r=t.b.b,n.a=new YT,n.b=x8(ANt,hQn,25,r,15,1),e=0,i=spn(t.b,0);i.b!=i.d.c;)BB(b3(i),86).g=e++}function Edn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),xTn(i=x8(ANt,hQn,25,r,15,1),n.a,e,t),X0(c=new lU(n.e,r,i)),c}function Tdn(n,t,e){var i,r;i=BB(SJ(iNt,t),117),r=BB(SJ(rNt,t),117),e?(mZ(iNt,n,i),mZ(rNt,n,r)):(mZ(rNt,n,i),mZ(iNt,n,r))}function Mdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Sdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function Pdn(n,t,e,i){var r,c,a;return r=!1,LGn(n.f,e,i)&&(xgn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function Idn(n,t,e,i,r){var c,a,u;for(a=r;t.b!=t.c;)c=BB(dU(t),10),u=BB(abn(c,i).Xb(0),11),n.d[u.p]=a++,e.c[e.c.length]=u;return a}function Cdn(n,t,i){var r,c,a,u,o;return u=n.k,o=t.k,c=MD(edn(n,r=i[u.g][o.g])),a=MD(edn(t,r)),e.Math.max((kW(c),c),(kW(a),a))}function Odn(n,t,e){var i,r,c,a;for(i=e/n.c.length,r=0,a=new Wb(n);a.a<a.c.c.length;)ghn(c=BB(n0(a),200),c.f+i*r),ajn(c,t,i),++r}function Adn(n,t,e){var i,r,c;for(r=BB(RX(n.b,e),177),i=0,c=new Wb(t.j);c.a<c.c.c.length;)r[BB(n0(c),113).d.p]&&++i;return i}function $dn(n){var t,e;return null!=(t=BB(yan(n.a,4),126))?(aHn(t,0,e=x8(dAt,i9n,415,t.length,0,1),0,t.length),e):wAt}function Ldn(){var n;return 0!=ctt&&(n=l5())-att>2e3&&(att=n,utt=e.setTimeout(QE,10)),0==ctt++&&(Onn((sk(),ttt)),!0)}function Ndn(n,t){var e;for(e=new oz(ZL(lbn(n).a.Kc(),new h));dAn(e);)if(BB(U5(e),17).d.i.c==t)return!1;return!0}function xdn(n,t){var e;if(cL(t,245)){e=BB(t,245);try{return 0==n.vd(e)}catch(i){if(!cL(i=lun(i),205))throw Hp(i)}}return!1}function Ddn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function Rdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))>0}function Kdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<0}function _dn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<=0}function Fdn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function Bdn(n,t,i){var r,c,a,u;for(_8(t,a=t+i,n.length),u="",c=t;c<a;)r=e.Math.min(c+1e4,a),u+=WW(n.slice(c,r)),c=r;return u}function Hdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function qdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function Gdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function zdn(n,t){var e,i,r;if(n.c)Sen(n.c,t);else for(e=t-iG(n),r=new Wb(n.d);r.a<r.c.c.length;)zdn(i=BB(n0(r),157),iG(i)+e)}function Udn(n,t){var e,i,r;if(n.c)Men(n.c,t);else for(e=t-eG(n),r=new Wb(n.a);r.a<r.c.c.length;)Udn(i=BB(n0(r),157),eG(i)+e)}function Xdn(n,t){var e,i,r;for(i=new J6(t.gc()),e=t.Kc();e.Ob();)(r=t_n(n,BB(e.Pb(),56)))&&(i.c[i.c.length]=r);return i}function Wdn(n,t){var e,i;return n.qj(),(e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?(hin(n,e),e.dd()):null}function Vdn(n){var t,e;for(e=uPn(n),t=null;2==n.c;)QXn(n),t||(wWn(),wWn(),tqn(t=new r$(2),e),e=t),e.$l(uPn(n));return e}function Qdn(n){if(!(q6n in n.a))throw Hp(new ek("Every element must have an id."));return kCn(zJ(n,q6n))}function Ydn(n){var t,e,i;if(!(i=n.Zg()))for(t=0,e=n.eh();e;e=e.eh()){if(++t>GQn)return e.fh();if((i=e.Zg())||e==n)break}return i}function Jdn(n){return hZ(),cL(n,156)?BB(RX(hAt,yet),288).vg(n):hU(hAt,tsn(n))?BB(RX(hAt,tsn(n)),288).vg(n):null}function Zdn(n){if(mgn(a5n,n))return hN(),vtt;if(mgn(u5n,n))return hN(),ptt;throw Hp(new _y("Expecting true or false"))}function ngn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw Hp(new _y("Input edge is not connected to the input port."))}function tgn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Msn(n.a,t.a,n.d)}function egn(n){return n>=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function ign(n,t){var e;return GC(t)===GC(n)||!!cL(t,21)&&(e=BB(t,21)).gc()==n.gc()&&n.Ic(e)}function rgn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,Ex(e<(n.c-n.b&i)),e>=r?(ahn(n,t),-1):(uhn(n,t),1)}function cgn(n,t){var e,i;for(b1(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(b1(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function agn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function ugn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Zun(),ftt)[typeof e];return r?r(e):khn(typeof e)}function ogn(n,t){if(n.a<0)throw Hp(new Fy("Did not call before(...) or after(...) before calling add(...)."));return WN(n,n.a,t),n}function sgn(n,t,e,i){var r;0!=t.c.length&&(r=MLn(e,i),JT(ytn(new Rq(null,new w1(uCn(t),1)),new ja),new XV(n,e,r,i)))}function hgn(n,t,e){var i;0!=(n.Db&t)?null==e?WOn(n,t):-1==(i=Rmn(n,t))?n.Eb=e:$X(een(n.Eb),i,e):null!=e&&mxn(n,t,e)}function fgn(n){var t;return 0==(32&n.Db)&&0!=(t=bX(BB(yan(n,16),26)||n.zh())-bX(n.zh()))&&hgn(n,32,x8(Ant,HWn,1,t,5,1)),n}function lgn(n){var t;return n.b||Xj(n,!(t=nK(n.e,n.a))||!mK(u5n,cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"qualified"))),n.c}function bgn(n,t,e){var i,r;return((r=(i=BB(Wtn(H7(n.a),t),87)).c||(gWn(),l$t)).kh()?tfn(n.b,BB(r,49)):r)==e?lFn(i):cen(i,e),r}function wgn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function dgn(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65).c.b,K8(i,t,n)}function ggn(n){var t,e;for(t=new Wb(n.g);t.a<t.c.c.length;)BB(n0(t),562);zzn(e=new yxn(n.g,Gy(n.a),n.c)),n.g=e.b,n.d=e.a}function pgn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function vgn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:nsn(n)-nsn(t)}function mgn(n,t){return kW(n),null!=t&&(!!mK(n,t)||n.length==t.length&&mK(n.toLowerCase(),t.toLowerCase()))}function ygn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)cL(e=t.il(i),99)&&0!=(BB(e,18).Bb&h6n)&&null!=(c=t.jl(i))&&t_n(n,BB(c,56))}function kgn(n,t,e){var i,r,c;for(c=new Wb(e.a);c.a<c.c.c.length;)r=BB(n0(c),221),i=new I$(BB(RX(n.a,r.b),65)),WB(t.a,i),kgn(n,i,r)}function jgn(n){var t,e;return Vhn(n,-129)>0&&Vhn(n,128)<0?(t=dG(n)+128,!(e=(Eq(),$tt)[t])&&(e=$tt[t]=new Db(n)),e):new Db(n)}function Egn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Tgn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Mgn(n,t){var e,i;for(qZ(),i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)if((e=BB(U5(i),17)).d.i==t||e.c.i==t)return e;return null}function Sgn(n,t,e){this.c=n,this.f=new Np,this.e=new Gj,this.j=new Sq,this.n=new Sq,this.b=t,this.g=new UV(t.c,t.d,t.b,t.a),this.a=e}function Pgn(n){var t,e,i,r;for(this.a=new fA,this.d=new Rv,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),g2(this,t)}function Ign(n){ODn(),0==n.length?(this.e=0,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0])):(this.e=1,this.d=n.length,this.a=n,X0(this))}function Cgn(n,t,e){sm.call(this),this.a=x8(Xit,rJn,212,(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,0,1),this.b=n,this.d=t,this.c=e}function Ogn(n){this.d=new Np,this.e=new v4,this.c=x8(ANt,hQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.b=n}function Agn(n){var t,e,i,r;for(hon(r=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),e=0,i=(t=Z0(n.e)).length;e<i;++e)MZ(t[e],r)}function $gn(n){var t,e,i,r;for(hon(t=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),i=0,r=(e=Z0(n.g)).length;i<r;++i)SZ(e[i],t)}function Lgn(n){var t,e;return!!Lx(n.d.i,(HXn(),Wgt))&&(t=BB(mMn(n.c.i,Wgt),19),e=BB(mMn(n.d.i,Wgt),19),E$(t.a,e.a)>0)}function Ngn(n){var t;GC(ZAn(n,(sWn(),ESt)))===GC((ufn(),vIt))&&(JJ(n)?(t=BB(ZAn(JJ(n),ESt),334),Ypn(n,ESt,t)):Ypn(n,ESt,mIt))}function xgn(n,t,e){var i,r;fMn(n.e,t,e,(kUn(),ICt)),fMn(n.i,t,e,oCt),n.a&&(r=BB(mMn(t,(hWn(),dlt)),11),i=BB(mMn(e,dlt),11),k0(n.g,r,i))}function Dgn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new DY(n,t),e&&(n.a[i][c]=new Bd(t),(r=BB(mMn(t,(hWn(),rlt)),10))&&JCn(n.d,r,t))}function Rgn(n,t){var e,i,r;if(WB(Sct,n),t.Fc(n),e=BB(RX(Mct,n),21))for(r=e.Kc();r.Ob();)i=BB(r.Pb(),33),-1!=E7(Sct,i,0)||Rgn(i,t)}function Kgn(n,t,e){var i;(Wet?(gwn(n),1):Vet||Jet?(lM(),1):Yet&&(lM(),0))&&((i=new i_(t)).b=e,aSn(n,i))}function _gn(n,t){var e;e=!n.A.Hc((mdn(),_Ct))||n.q==(QEn(),XIt),n.u.Hc((lCn(),eCt))?e?NUn(n,t):aUn(n,t):n.u.Hc(rCt)&&(e?Azn(n,t):JUn(n,t))}function Fgn(n,t){var e,i;++n.j,null!=t&&oOn(t,e=cL(i=n.a.Cb,97)?BB(i,97).Jg():null)?hgn(n.a,4,e):hgn(n.a,4,BB(t,126))}function Bgn(n,t,i){return new UV(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function Hgn(n,t){var e,i;return 0!=(e=E$(n.a.c.p,t.a.c.p))?e:0!=(i=E$(n.a.d.i.p,t.a.d.i.p))?i:E$(t.a.d.p,n.a.d.p)}function qgn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:Pln(i,r))}function Ggn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Wb(kbn(t));i.a<i.c.c.length;)Ggn(n,Nbn(BB(n0(i),213),t),e)}function zgn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new xI(0,i);case 2:case 4:return new xI(i,0);default:return null}}function Ugn(n,t,e){var i;i=BB(sJ(t.f),209);try{i.Ze(n,e),SW(t.f,i)}catch(r){throw cL(r=lun(r),102),Hp(r)}}function Xgn(n,t,e){var i,r,c,a;return i=null,(c=pGn(cin(),t))&&(r=null,null!=(a=Zqn(c,e))&&(r=n.Ye(c,a)),i=r),i}function Wgn(n,t,e,i){var r;return r=new N7(n.e,1,13,t.c||(gWn(),l$t),e.c||(gWn(),l$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Vgn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!ton((b1(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Qgn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.c[e]);return t.length>i&&$X(t,i,null),t}function Ygn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.a[e]);return t.length>i&&$X(t,i,null),t}function Jgn(n,t,e){var i,r,c;return(r=BB(RX(n.e,t),387))?(c=pR(r,e),uL(n,r),c):(i=new nH(n,t,e),VW(n.e,t,i),kJ(i),null)}function Zgn(n){var t;if(null==n)return null;if(null==(t=L$n(FBn(n,!0))))throw Hp(new ik("Invalid hexBinary value: '"+n+"'"));return t}function npn(n){return ODn(),Vhn(n,0)<0?0!=Vhn(n,-1)?new vEn(-1,j7(n)):Ytt:Vhn(n,10)<=0?Ztt[dG(n)]:new vEn(1,n)}function tpn(){return dWn(),Pun(Gk(Krt,1),$Vn,159,0,[Prt,Srt,Irt,vrt,prt,mrt,jrt,krt,yrt,Mrt,Trt,Ert,drt,wrt,grt,lrt,frt,brt,srt,ort,hrt,Crt])}function epn(n){var t;this.d=new Np,this.j=new Gj,this.g=new Gj,t=n.g.b,this.f=BB(mMn(vW(t),(HXn(),Udt)),103),this.e=Gy(MD(gpn(t,Spt)))}function ipn(n){this.b=new Np,this.e=new Np,this.d=n,this.a=!jE(AV(new Rq(null,new zU(new m6(n.b))),new aw(new Gr))).sd((dM(),tit))}function rpn(){rpn=O,hMt=new AI("PARENTS",0),sMt=new AI("NODES",1),uMt=new AI("EDGES",2),fMt=new AI("PORTS",3),oMt=new AI("LABELS",4)}function cpn(){cpn=O,BIt=new zI("DISTRIBUTED",0),qIt=new zI("JUSTIFIED",1),_It=new zI("BEGIN",2),FIt=new zI(eJn,3),HIt=new zI("END",4)}function apn(n){switch(n.yi(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function upn(n){switch(n.g){case 1:return Ffn(),HPt;case 4:return Ffn(),_Pt;case 2:return Ffn(),FPt;case 3:return Ffn(),KPt}return Ffn(),BPt}function opn(n,t,e){var i;switch((i=e.q.getFullYear()-sQn+sQn)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Enn(n,i%100,2);break;default:Enn(n,i,t)}}function spn(n,t){var e,i;if(LZ(t,n.b),t>=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e<t;++e)i=i.a;return new ZK(n,t,i)}function hpn(){hpn=O,dit=new FS("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),wit=new FS("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function fpn(n){var t,e,i;for(m$(e=uIn(n),But),(i=n.d).c=x8(Ant,HWn,1,0,5,1),t=new Wb(e);t.a<t.c.c.length;)gun(i,BB(n0(t),456).b)}function lpn(n){var t,e;for(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)BB(t.nj(),42).dd();return A8(e)}function bpn(n){var t;LK(BB(mMn(n,(HXn(),ept)),98))&&(fOn((l1(0,(t=n.b).c.length),BB(t.c[0],29))),fOn(BB(xq(t,t.c.length-1),29)))}function wpn(n,t){var i,r,c,a;for(i=0,c=new Wb(t.a);c.a<c.c.c.length;)a=(r=BB(n0(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function dpn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=i0(r,yz(1,t-64)));return r}function gpn(n,t){var e,i;return i=null,Lx(n,(sWn(),IPt))&&(e=BB(mMn(n,IPt),94)).Xe(t)&&(i=e.We(t)),null==i&&vW(n)&&(i=mMn(vW(n),t)),i}function ppn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(uSn(),Iut)&&i!=Tut&&dAn(e=new oz(ZL(lbn(r).a.Kc(),new h)))&&VW(n.k,t,BB(U5(e),17))}function vpn(n,t){var e,i,r;return i=itn(n.Tg(),t),(e=t-n.Ah())<0?(r=n.Yg(i))>=0?n.lh(r):qCn(n,i):e<0?qCn(n,i):BB(i,66).Nj().Sj(n,n.yh(),e)}function mpn(n){var t;if(cL(n.a,4)){if(null==(t=Jdn(n.a)))throw Hp(new Fy(o5n+n.b+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return t}return n.a}function ypn(n){var t;if(null==n)return null;if(null==(t=UUn(FBn(n,!0))))throw Hp(new ik("Invalid base64Binary value: '"+n+"'"));return t}function kpn(n){var t;try{return t=n.i.Xb(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function jpn(n){var t;try{return t=n.c.ki(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function Epn(){Epn=O,sWn(),Ect=TPt,pct=ySt,lct=cSt,vct=XSt,_kn(),kct=Mit,yct=Eit,jct=Pit,mct=jit,Gsn(),wct=oct,bct=uct,dct=hct,gct=fct}function Tpn(n){switch(jM(),this.c=new Np,this.d=n,n.g){case 0:case 2:this.a=QW(hut),this.b=RQn;break;case 3:case 1:this.a=hut,this.b=KQn}}function Mpn(n,t,e){var i;if(n.c)Pen(n.c,n.c.i+t),Ien(n.c,n.c.j+e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Mpn(BB(n0(i),157),t,e)}function Spn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!mK(n.j[e],t.j[e]))return!1;return!0}function Ppn(n,t,e){var i;t.a.length>0&&(WB(n.b,new VB(t.a,e)),0<(i=t.a.length)?t.a=t.a.substr(0,0):0>i&&(t.a+=rL(x8(ONt,WVn,25,-i,15,1))))}function Ipn(n,t){var e,i,r;for(e=n.o,r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.a=dyn(i,e.a),i.e.b=e.b*Gy(MD(i.b.We(Lrt)))}function Cpn(n,t){var e,i,r,c;return r=n.k,e=Gy(MD(mMn(n,(hWn(),Tlt)))),c=t.k,i=Gy(MD(mMn(t,Tlt))),c!=(uSn(),Mut)?-1:r!=Mut?1:e==i?0:e<i?-1:1}function Opn(n,t){var e,i;return e=BB(BB(RX(n.g,t.a),46).a,65),i=BB(BB(RX(n.g,t.b),46).a,65),W8(t.a,t.b)-W8(t.a,_$(e.b))-W8(t.b,_$(i.b))}function Apn(n,t){var e;return e=BB(mMn(n,(HXn(),vgt)),74),tL(t,vut)?e?yQ(e):(e=new km,hon(n,vgt,e)):e&&hon(n,vgt,null),e}function $pn(n){var t;return(t=new Ik).a+="n",n.k!=(uSn(),Iut)&&oO(oO((t.a+="(",t),dx(n.k).toLowerCase()),")"),oO((t.a+="_",t),gyn(n)),t.a}function Lpn(n,t){OTn(t,"Self-Loop post-processing",1),JT(AV(AV(wnn(new Rq(null,new w1(n.b,16)),new xi),new Di),new Ri),new Ki),HSn(t)}function Npn(n,t,e,i){var r;return e>=0?n.hh(t,e,i):(n.eh()&&(i=(r=n.Vg())>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i)),n.Sg(t,e,i))}function xpn(n,t){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),void sqn(n.e);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),void sqn(n.d)}Dwn(n,t)}function Dpn(n,t){var e;e=n.Zc(t);try{return e.Pb()}catch(i){throw cL(i=lun(i),109)?Hp(new Ay("Can't get element "+t)):Hp(i)}}function Rpn(n,t){this.e=n,t<XQn?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0|t])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[t%XQn|0,t/XQn|0]))}function Kpn(n,t){var e,i,r,c;for(SQ(),e=n,c=t,cL(n,21)&&!cL(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function _pn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=Lyn(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):Lyn(n,i)),e}function Fpn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=wq(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):wq(n,i)),e}function Bpn(n,t){var e;switch(e=BB(oV(n.b,t),124).n,t.g){case 1:n.t>=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function Hpn(){Hpn=O,Brt=new _S(mJn,0),Frt=new _S(yJn,1),Hrt=new _S(kJn,2),qrt=new _S(jJn,3),Brt.a=!1,Frt.a=!0,Hrt.a=!1,qrt.a=!0}function qpn(){qpn=O,Zrt=new KS(mJn,0),Jrt=new KS(yJn,1),nct=new KS(kJn,2),tct=new KS(jJn,3),Zrt.a=!1,Jrt.a=!0,nct.a=!1,tct.a=!0}function Gpn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i).k==(uSn(),Put)&&n.b.Fc(t)}while(t.k==(uSn(),Put));n.b=ean(n.b)}function zpn(n){var t,e,i;for(i=n.c.a,n.p=(yX(i),new t_(i)),e=new Wb(i);e.a<e.c.c.length;)(t=BB(n0(e),10)).p=hIn(t).a;SQ(),m$(n.p,new Oc)}function Upn(n){var t,e,i;if(e=0,0==(i=wDn(n)).c.length)return 1;for(t=new Wb(i);t.a<t.c.c.length;)e+=Upn(BB(n0(t),33));return e}function Xpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.b+e.b.rf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Wpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.d+e.b.rf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Vpn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Qpn(n,t){return XC(n)?!!OWn[t]:n.hm?!!n.hm[t]:UC(n)?!!CWn[t]:!!zC(n)&&!!IWn[t]}function Ypn(n,t,e){return null==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),vjn(n.o,t,e)),n}function Jpn(n,t,e,i){var r;(r=Xfn(t.Xe((sWn(),DSt))?BB(t.We(DSt),21):n.j))!=(dWn(),Crt)&&(e&&!agn(r)||USn(N$n(n,r,i),t))}function Zpn(n,t,e,i){var r,c,a;return c=itn(n.Tg(),t),(r=t-n.Ah())<0?(a=n.Yg(c))>=0?n._g(a,e,!0):cOn(n,c,e):BB(c,66).Nj().Pj(n,n.yh(),r,e,i)}function nvn(n,t,e,i){var r,c;e.mh(t)&&(ZM(),hnn(t)?ygn(n,BB(e.ah(t),153)):(r=(c=t)?BB(i,49).xh(c):null)&&_p(e.ah(t),r))}function tvn(n){switch(n.g){case 1:return Dan(),Rrt;case 3:return Dan(),Nrt;case 2:return Dan(),Drt;case 4:return Dan(),xrt;default:return null}}function evn(n){switch(typeof n){case NWn:return vvn(n);case LWn:return IJ(n);case $Wn:return hN(),n?1231:1237;default:return null==n?0:PN(n)}}function ivn(n,t,e){if(n.e)switch(n.b){case 1:BQ(n.c,t,e);break;case 0:HQ(n.c,t,e)}else t4(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function rvn(n){var t,e;if(null==n)return null;for(e=x8(Out,sVn,193,n.length,0,2),t=0;t<e.length;t++)e[t]=BB(G9(n[t],n[t].length),193);return e}function cvn(n){var t;if(Ksn(n))return mz(n),n.Lk()&&(t=FCn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw Hp(new yv)}function avn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function uvn(n,t){var e,i;if((i=Wyn(n,t))>=0)return i;if(n.Fk())for(e=0;e<n.i;++e)if(GC(n.Gk(BB(n.g[e],56)))===GC(t))return e;return-1}function ovn(n,t,e){var i,r;if(t>=(r=n.gc()))throw Hp(new tK(t,r));if(n.hi()&&(i=n.Xc(e))>=0&&i!=t)throw Hp(new _y(a8n));return n.mi(t,e)}function svn(n,t){if(this.a=BB(yX(n),245),this.b=BB(yX(t),245),n.vd(t)>0||n==(ey(),Knt)||t==(ty(),_nt))throw Hp(new _y("Invalid range: "+B3(n,t)))}function hvn(n){var t,e;for(this.b=new Np,this.c=n,this.a=!1,e=new Wb(n.a);e.a<e.c.c.length;)t=BB(n0(e),10),this.a=this.a|t.k==(uSn(),Iut)}function fvn(n,t){var e,i,r;for(e=AN(new qv,n),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),121),UNn(aM(cM(uM(rM(new Hv,0),0),e),i));return e}function lvn(n,t,e){var i,r,c;for(r=new oz(ZL((t?fbn(n):lbn(n)).a.Kc(),new h));dAn(r);)i=BB(U5(r),17),(c=t?i.c.i:i.d.i).k==(uSn(),Sut)&&PZ(c,e)}function bvn(){bvn=O,lvt=new _P(QZn,0),bvt=new _P("PORT_POSITION",1),fvt=new _P("NODE_SIZE_WHERE_SPACE_PERMITS",2),hvt=new _P("NODE_SIZE",3)}function wvn(){wvn=O,IMt=new DI("AUTOMATIC",0),AMt=new DI(cJn,1),$Mt=new DI(aJn,2),LMt=new DI("TOP",3),CMt=new DI(oJn,4),OMt=new DI(eJn,5)}function dvn(n,t,e,i){var r,c;for($On(),r=0,c=0;c<e;c++)r=rbn(cbn(e0(t[c],UQn),e0(i,UQn)),e0(dG(r),UQn)),n[c]=dG(r),r=jz(r,32);return dG(r)}function gvn(n,t,i){var r,c;for(c=0,r=0;r<Zit;r++)c=e.Math.max(c,vhn(n.a[t.g][r],i));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function pvn(n,t){var e,i;if(Tx(t>0),(t&-t)==t)return IJ(t*H$n(n,31)*4.656612873077393e-10);do{i=(e=H$n(n,31))%t}while(e-i+(t-1)<0);return IJ(i)}function vvn(n){var t,e,i;return r_(),null!=(i=rit[e=":"+n])?IJ((kW(i),i)):(t=null==(i=iit[e])?JNn(n):IJ((kW(i),i)),CQ(),rit[e]=t,t)}function mvn(n,t,e){OTn(e,"Compound graph preprocessor",1),n.a=new pJ,Nzn(n,t,null),GHn(n,t),tNn(n),hon(t,(hWn(),Hft),n.a),n.a=null,$U(n.b),HSn(e)}function yvn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function kvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Pst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Irn(),xst),0),iX(n,e,t[1],Rst,1)}function jvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Ist)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Irn(),xst),0),iX(n,e,t[1],Rst,1)}function Evn(n){switch(n.g){case 0:return null;case 1:return new Arn;case 2:return new Jm;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Tvn(n,t,e){var i,r;for(mun(n,t-n.s,e-n.t),r=new Wb(n.n);r.a<r.c.c.length;)rb(i=BB(n0(r),211),i.e+t-n.s),cb(i,i.f+e-n.t);n.s=t,n.t=e}function Mvn(n){var t,e,i,r;for(e=0,i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),121).d=e++;return r=null,(t=wSn(n)).c.length>1&&(r=fvn(n,t)),r}function Svn(n){var t;return n.f&&n.f.kh()&&(t=BB(n.f,49),n.f=BB(tfn(n,t),82),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.f))),n.f}function Pvn(n){var t;return n.i&&n.i.kh()&&(t=BB(n.i,49),n.i=BB(tfn(n,t),82),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,7,t,n.i))),n.i}function Ivn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=BB(tfn(n,t),18),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,21,t,n.b))),n.b}function Cvn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Sh(),fNn(n,n.f+1),r=(i&DWn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.uj()),e.Fc(t),++n.f)}function Ovn(n,t,e){var i;return!t.Kj()&&(-2!=t.Zj()?null==(i=t.zj())?null==e:Nfn(i,e):t.Hj()==n.e.Tg()&&null==e)}function Avn(){var n;lin(16,CVn),n=Jin(16),this.b=x8(Gnt,IVn,317,n,0,1),this.c=x8(Gnt,IVn,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function $vn(n){LR.call(this),this.k=(uSn(),Iut),this.j=(lin(6,AVn),new J6(6)),this.b=(lin(2,AVn),new J6(2)),this.d=new fm,this.f=new wm,this.a=n}function Lvn(n){var t,e;n.c.length<=1||(dPn(n,BB((t=EDn(n,(kUn(),SCt))).a,19).a,BB(t.b,19).a),dPn(n,BB((e=EDn(n,ICt)).a,19).a,BB(e.b,19).a))}function Nvn(){Nvn=O,yvt=new FP("SIMPLE",0),pvt=new FP(B1n,1),vvt=new FP("LINEAR_SEGMENTS",2),gvt=new FP("BRANDES_KOEPF",3),mvt=new FP(j3n,4)}function xvn(n,t,e){LK(BB(mMn(t,(HXn(),ept)),98))||(W7(n,t,DSn(t,e)),W7(n,t,DSn(t,(kUn(),SCt))),W7(n,t,DSn(t,sCt)),SQ(),m$(t.j,new _d(n)))}function Dvn(n,t,e,i){var r;for(r=BB(h6(i?n.a:n.b,t),21).Kc();r.Ob();)if(_Dn(n,e,BB(r.Pb(),33)))return!0;return!1}function Rvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function Kvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function _vn(n){var t,e;for(t=0,e=new Wb(n.c.a);e.a<e.c.c.length;)t+=F3(new oz(ZL(lbn(BB(n0(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function Fvn(n){var t,e;for(n.c||zqn(n),e=new km,n0(t=new Wb(n.a));t.a<t.c.c.length;)DH(e,BB(n0(t),407).a);return Px(0!=e.b),Atn(e,e.c.b),e}function Bvn(){Bvn=O,bRn(),qTt=RTt,BTt=new WA(8),new XA((sWn(),XSt),BTt),new XA(LPt,8),HTt=xTt,_Tt=MTt,FTt=STt,KTt=new XA(lSt,(hN(),!1))}function Hvn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e;case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d}return Rbn(n,t,e,i)}function qvn(n){var t;return n.a&&n.a.kh()&&(t=BB(n.a,49),n.a=BB(tfn(n,t),138),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,5,t,n.a))),n.a}function Gvn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function zvn(n,t){if(null==n)throw Hp(new Hy("null key in entry: null="+t));if(null==t)throw Hp(new Hy("null value in entry: "+n+"=null"))}function Uvn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(GC(e)===GC(i)||null!=e&&Nfn(e,i)))return!1}return!t.Ob()}function Xvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[vhn(n.a[0],t),vhn(n.a[1],t),vhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Wvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[mhn(n.a[0],t),mhn(n.a[1],t),mhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Vvn(){Vvn=O,yht=new SP("GREEDY",0),mht=new SP(H1n,1),jht=new SP(B1n,2),Eht=new SP("MODEL_ORDER",3),kht=new SP("GREEDY_MODEL_ORDER",4)}function Qvn(n,t){var e,i,r;for(n.b[t.g]=1,i=spn(t.d,0);i.b!=i.d.c;)r=(e=BB(b3(i),188)).c,1==n.b[r.g]?DH(n.a,e):2==n.b[r.g]?n.b[r.g]=1:Qvn(n,r)}function Yvn(n,t){var e,i,r;for(r=new J6(t.gc()),i=t.Kc();i.Ob();)(e=BB(i.Pb(),286)).c==e.f?hPn(n,e,e.c):rPn(n,e)||(r.c[r.c.length]=e);return r}function Jvn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Wb(n.n);c.a<c.c.c.length;)w$n(BB(n0(c),211),a,i,r),++r}function Zvn(n){var t,e;for(my(n.b.a),n.a=x8(bit,HWn,57,n.c.c.a.b.c.length,0,1),t=0,e=new Wb(n.c.c.a.b);e.a<e.c.c.length;)BB(n0(e),57).f=t++}function nmn(n){var t,e;for(my(n.b.a),n.a=x8(Qat,HWn,81,n.c.a.a.b.c.length,0,1),t=0,e=new Wb(n.c.a.a.b);e.a<e.c.c.length;)BB(n0(e),81).i=t++}function tmn(n,t,e){OTn(e,"Shrinking tree compaction",1),qy(TD(mMn(t,(Xcn(),Qrt))))?(irn(n,t.f),unn(t.f,t.c)):unn(t.f,t.c),HSn(e)}function emn(n){var t;if(t=bhn(n),!dAn(n))throw Hp(new Ay("position (0) must be less than the number of elements that remained ("+t+")"));return U5(n)}function imn(n,t,e){try{return vmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function rmn(n,t,e){try{return mmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function cmn(n,t,e){try{return ymn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function amn(n){switch(n.g){case 1:return kUn(),ICt;case 4:return kUn(),sCt;case 3:return kUn(),oCt;case 2:return kUn(),SCt;default:return kUn(),PCt}}function umn(n,t,e){t.k==(uSn(),Iut)&&e.k==Put&&(n.d=Efn(t,(kUn(),SCt)),n.b=Efn(t,sCt)),e.k==Iut&&t.k==Put&&(n.d=Efn(e,(kUn(),sCt)),n.b=Efn(e,SCt))}function omn(n,t){var e,i;for(i=abn(n,t).Kc();i.Ob();)if(null!=mMn(e=BB(i.Pb(),11),(hWn(),Elt))||zN(new m6(e.b)))return!0;return!1}function smn(n,t){return Pen(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Ien(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),WB(n.c,t),!0}function hmn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Wb(n.a);c.a<c.c.c.length;)Tvn(r=BB(n0(c),187),r.s,r.t+a*i),Jvn(r,n.d-r.r+t,i),++a}function fmn(n){var t,e,i;for(e=new Wb(n.b);e.a<e.c.c.length;)for(t=0,i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)BB(n0(i),10).p=t++}function lmn(n,t){var e,i,r,c,a,u;for(r=t.length-1,a=0,u=0,i=0;i<=r;i++)c=t[i],e=pSn(r,i)*efn(1-n,r-i)*efn(n,i),a+=c.a*e,u+=c.b*e;return new xI(a,u)}function bmn(n,t){var e,i,r,c,a;for(e=t.gc(),n.qi(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),jL(n,i,n.oi(i,r)),n.bi(i,r),n.ci();return 0!=e}function wmn(n,t,e){var i,r,c;return n.ej()?(i=n.Vi(),c=n.fj(),++n.j,n.Hi(i,n.oi(i,t)),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):ZD(n,n.Vi(),t),e}function dmn(n,t,e){var i,r,c;return(0!=(64&(c=cL(r=(i=BB(Wtn(a4(n.a),t),87)).c,88)?BB(r,26):(gWn(),d$t)).Db)?tfn(n.b,c):c)==e?lFn(i):cen(i,e),c}function gmn(n,t,e,i,r,c,a,u){var o,s;i&&((o=i.a[0])&&gmn(n,t,e,o,r,c,a,u),Cyn(n,e,i.d,r,c,a,u)&&t.Fc(i),(s=i.a[1])&&gmn(n,t,e,s,r,c,a,u))}function pmn(n,t){var e;return n.a||(e=x8(xNt,qQn,25,0,15,1),gE(n.b.a,new bw(e)),e.sort(ien(T.prototype.te,T,[])),n.a=new _K(e,n.d)),K6(n.a,t)}function vmn(n,t,e){try{return QC(trn(n,t,e),1)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function mmn(n,t,e){try{return QC(trn(n,t,e),0)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function ymn(n,t,e){try{return QC(trn(n,t,e),2)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function kmn(n,t){if(-1==n.g)throw Hp(new dv);n.mj();try{n.d._c(n.g,t),n.f=n.d.j}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function jmn(n,t,e){OTn(e,"Linear segments node placement",1),n.b=BB(mMn(t,(hWn(),Alt)),304),VXn(n,t),vHn(n,t),QHn(n,t),hXn(n),n.a=null,n.b=null,HSn(e)}function Emn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=qk(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)$X(r,e,i.Pb());return t.length>c&&$X(t,c,null),t}function Tmn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(Nfn(t,n.Xb(e)))return e;return-1}function Mmn(n,t){var e,i,r;return e=t.cd(),r=t.dd(),i=n.xc(e),!(!(GC(r)===GC(i)||null!=r&&Nfn(r,i))||null==i&&!n._b(e))}function Smn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),M$(e,i,r)}function Pmn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function Imn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function Cmn(n,t,e,i){var r,c;this.a=t,this.c=i,$l(this,new xI(-(r=n.a).c,-r.d)),UR(this.b,e),c=i/2,t.a?Bx(this.b,0,c):Bx(this.b,c,0),WB(n.c,this)}function Omn(){Omn=O,qjt=new mI(QZn,0),Bjt=new mI(q1n,1),Hjt=new mI("EDGE_LENGTH_BY_POSITION",2),Fjt=new mI("CROSSING_MINIMIZATION_BY_POSITION",3)}function Amn(n,t){var e,i;if(e=BB(sen(n.g,t),33))return e;if(i=BB(sen(n.j,t),118))return i;throw Hp(new ek("Referenced shape does not exist: "+t))}function $mn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw Hp(new _y("Node 'one' must be either source or target of edge 'edge'."))}function Lmn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw Hp(new _y("Node "+t+" is neither source nor target of edge "+n))}function Nmn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),bU(n,t,(Oun(),kst),e);break;case 1:case 3:bU(n,t,(Oun(),vst),null)}}function xmn(n,t,e,i,r,c){var a,u,o,s,h;for(a=ijn(t,e,c),u=e==(kUn(),sCt)||e==ICt?-1:1,s=n[e.g],h=0;h<s.length;h++)(o=s[h])>0&&(o+=r),s[h]=a,a+=u*(o+i)}function Dmn(n){var t,e,i;for(i=n.f,n.n=x8(xNt,qQn,25,i,15,1),n.d=x8(xNt,qQn,25,i,15,1),t=0;t<i;t++)e=BB(xq(n.c.b,t),29),n.n[t]=wpn(n,e),n.d[t]=VLn(n,e)}function Rmn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function Kmn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=null,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&(!c&&(c=new go),f9(c,i));c&&aXn(n,c)}function _mn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new Sk,t=n.Kc();t.Ob();)cO(e,SD(t.Pb())),e.a+=" ";return KO(e,e.a.length-1)}function Fmn(n,t,e){var i,r,c,a;for(con(n),null==n.k&&(n.k=x8(Jnt,sVn,78,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)Fmn(i[r],t,"\t"+e);(a=n.f)&&Fmn(a,t,e)}function Bmn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function Hmn(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();Otn(dA(n.d)?n.a.c:n.a.d,new Mw(n)),n.c.Me(n),_xn(n)}function qmn(n){var t,e,i;for(e=new Wb(n.e.c);e.a<e.c.c.length;){for(i=new Wb((t=BB(n0(e),282)).b);i.a<i.c.c.length;)_Bn(BB(n0(i),447));BIn(t)}}function Gmn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function zmn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t);u.a<u.c.c.length;)a=BB(n0(u),200),r=e.Math.max(r,a.e),c+=a.b+(i>0?n.g:0),++i;n.c=c,n.d=r}function Umn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[gvn(n,(Dtn(),Git),t),gvn(n,zit,t),gvn(n,Uit,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Xmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function Wmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+IJn+t+FWn+e+").")):Hp(i)}}function Vmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),CIt))?(t.Mc(CIt),t.Fc(AIt)):t.Hc(AIt)&&(t.Mc(AIt),t.Fc(CIt)))}function Qmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),DIt))?(t.Mc(DIt),t.Fc(NIt)):t.Hc(NIt)&&(t.Mc(NIt),t.Fc(DIt)))}function Ymn(n,t,e){OTn(e,"Self-Loop ordering",1),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new Ci),new Oi),new Ai),new $i),new bd(n)),HSn(e)}function Jmn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(l1(r,n.c.length),c=BB(n.c[r],11),!e.Mb(c))return r;i.c[i.c.length]=c}return n.c.length}function Zmn(n,t,e,i){var r,c,a;return null==n.a&&dSn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function nyn(n){var t,e;if(!n.b)for(n.b=I2(BB(n.f,33).Ag().i),e=new AL(BB(n.f,33).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function tyn(n){var t,e;if(!n.e)for(n.e=I2(yV(BB(n.f,33)).i),e=new AL(yV(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),118),WB(n.e,new op(t));return n.e}function eyn(n){var t,e;if(!n.a)for(n.a=I2(YQ(BB(n.f,33)).i),e=new AL(YQ(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),33),WB(n.a,new JN(n,t));return n.a}function iyn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=bzn(n))n.yk(t);else try{n.yk(null)}catch(e){if(!cL(e=lun(e),60))throw Hp(e)}return n.C}function ryn(n){switch(n.q.g){case 5:kjn(n,(kUn(),sCt)),kjn(n,SCt);break;case 4:cGn(n,(kUn(),sCt)),cGn(n,SCt);break;default:FPn(n,(kUn(),sCt)),FPn(n,SCt)}}function cyn(n){switch(n.q.g){case 5:jjn(n,(kUn(),oCt)),jjn(n,ICt);break;case 4:aGn(n,(kUn(),oCt)),aGn(n,ICt);break;default:BPn(n,(kUn(),oCt)),BPn(n,ICt)}}function ayn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function uyn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function oyn(n){var t,i,r;for(r=DWn,i=new Wb(n.a);i.a<i.c.c.length;)Lx(t=BB(n0(i),10),(hWn(),wlt))&&(r=e.Math.min(r,BB(mMn(t,wlt),19).a));return r}function syn(n,t){var e,i;if(0==t.length)return 0;for(e=ZX(n.a,t[0],(kUn(),ICt)),e+=ZX(n.a,t[t.length-1],oCt),i=0;i<t.length;i++)e+=qMn(n,i,t);return e}function hyn(){gxn(),this.c=new Np,this.i=new Np,this.e=new fA,this.f=new fA,this.g=new fA,this.j=new Np,this.a=new Np,this.b=new xp,this.k=new xp}function fyn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,5,GOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lyn(n){PY();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function byn(n){var t;return Min(),(t=Ott)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function wyn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=kon(e.Math.max(8,r))<<1,0!=n.b?(urn(n,t=SR(n.a,i),r),n.a=t,n.b=0):Pv(n.a,i),n.c=r)}function dyn(n,t){var e;return(e=n.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),ICt)?-e.rf().a-Gy(MD(e.We(aPt))):t+Gy(MD(e.We(aPt))):e.Hf()==(kUn(),ICt)?-e.rf().a:t}function gyn(n){var t;return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:null!=(t=eQ(n))?t:""+(n.c?E7(n.c.a,n,0):-1)}function pyn(n){var t;return 0!=n.f.c.length&&BB(xq(n.f,0),70).a?BB(xq(n.f,0),70).a:null!=(t=eQ(n))?t:""+(n.i?E7(n.i.j,n,0):-1)}function vyn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=BB(n.Xb(e),128),e==n.gc()-1||!i.o)return new rC(iln(e),i);return null}function myn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=BB(xq(c.a,r),10)).k!=(uSn(),Tut)&&!Lkn(a))return!1;return!0}function yyn(n){var t,i,r,c,a;for(a=0,c=KQn,r=0,i=new Wb(n.a);i.a<i.c.c.length;)a+=(t=BB(n0(i),187)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function kyn(n){var t,e;if(!n.b)for(n.b=I2(BB(n.f,118).Ag().i),e=new AL(BB(n.f,118).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function jyn(n,t){var e,i,r;if(t.dc())return dD(),dD(),pAt;for(e=new aR(n,t.gc()),r=new AL(n);r.e!=r.i.gc();)i=kpn(r),t.Hc(i)&&f9(e,i);return e}function Eyn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),n.o):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),A8(n.o)):Zpn(n,t,e,i)}function Tyn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)vx(Wtn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)vx(Wtn(n.vb,t));az((CPn(),Z$t),n),n.Bb|=1}function Myn(n,t,e,i,r,c,a,u,o,s,h,f,l,b){return bIn(n,t,i,null,r,c,a,u,o,s,l,!0,b),zln(n,h),cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),2),e&&rrn(n,e),Uln(n,f),n}function Syn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Pyn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Iyn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&SQn,n.m=i&SQn,n.h=r&PQn,0)))}function Cyn(n,t,e,i,r,c,a){var u,o;return!(t.Ae()&&(o=n.a.ue(e,i),o<0||!r&&0==o)||t.Be()&&(u=n.a.ue(e,c),u>0||!a&&0==u))}function Oyn(n,t){if(zsn(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return jbn(t,bst)-jbn(n,bst);case 4:return jbn(n,lst)-jbn(t,lst)}return 0}function Ayn(n){switch(n.g){case 0:return xht;case 1:return Dht;case 2:return Rht;case 3:return Kht;case 4:return _ht;case 5:return Fht;default:return null}}function $yn(n,t,e){var i,r;return Chn(r=new Lm,t),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(i=r,0),Nen(i,1),nln(i,!0),Yfn(i,!0),i}function Lyn(n,t){var e,i;if(t>=n.i)throw Hp(new LO(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&aHn(n.g,t+1,n.g,t,i),$X(n.g,--n.i,null),n.fi(t,e),n.ci(),e}function Nyn(n,t){var e;return n.Db>>16==17?n.Cb.ih(n,21,qAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function xyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),679).Ke(e)}function Dyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),369).Ke(e)}function Ryn(n){var t,e,i,r,c;for(r=DWn,c=null,i=new Wb(n.d);i.a<i.c.c.length;)(e=BB(n0(i),213)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function Kyn(){Kyn=O,dat=new $O(NZn,(hN(),!1)),fat=new $O(xZn,100),q7(),lat=new $O(DZn,bat=Oat),wat=new $O(RZn,lZn),gat=new $O(KZn,iln(DWn))}function _yn(n,t,e){var i,r,c,a,u,o;for(o=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(u=Lfn(i[r],e).Kc();u.Ob();)a=BB(u.Pb(),11),VW(n.f,a,iln(o++))}function Fyn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JCn(n,t,kCn(dnn(e,BB(r.Pb(),19).a)))}function Byn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JCn(n,t,kCn(dnn(e,BB(r.Pb(),19).a)))}function Hyn(n){var t;return _Mn(),z9(t=BB(Emn(gz(n.k),x8(FCt,YZn,61,2,0,1)),122),0,t.length,null),t[0]==(kUn(),sCt)&&t[1]==ICt&&($X(t,0,ICt),$X(t,1,sCt)),t}function qyn(n,t,e){var i,r,c;return c=sDn(n,r=XNn(n,t,e)),K9(n.b),k0(n,t,e),SQ(),m$(r,new Vd(n)),i=sDn(n,r),K9(n.b),k0(n,e,t),new rC(iln(c),iln(i))}function Gyn(){Gyn=O,Umt=dq(new B2,(yMn(),Bat),(lWn(),dot)),Xmt=new iR("linearSegments.inputPrio",iln(0)),Wmt=new iR("linearSegments.outputPrio",iln(0))}function zyn(){zyn=O,Ryt=new fI("P1_TREEIFICATION",0),Kyt=new fI("P2_NODE_ORDERING",1),_yt=new fI("P3_NODE_PLACEMENT",2),Fyt=new fI("P4_EDGE_ROUTING",3)}function Uyn(){Uyn=O,sWn(),xjt=gPt,Kjt=LPt,Ijt=KSt,Cjt=BSt,Ojt=qSt,Pjt=DSt,Ajt=USt,Njt=fPt,KAn(),Mjt=wjt,Sjt=djt,$jt=pjt,Ljt=mjt,Djt=yjt,Rjt=kjt,_jt=Ejt}function Xyn(){Xyn=O,MIt=new qI("UNKNOWN",0),jIt=new qI("ABOVE",1),EIt=new qI("BELOW",2),TIt=new qI("INLINE",3),new iR("org.eclipse.elk.labelSide",MIt)}function Wyn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(GC(n.g[e])===GC(t))return e;return-1}function Vyn(n,t,e){var i,r;return t.c==(ain(),qvt)&&e.c==Hvt?-1:t.c==Hvt&&e.c==qvt?1:(i=dhn(t.a,n.a),r=dhn(e.a,n.a),t.c==qvt?r-i:i-r)}function Qyn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw Hp(new _y("index must be >= 0 and <= layer node count"));n.c&&y7(n.c.a,n),n.c=e,e&&kG(e.a,t,n)}function Yyn(n,t){var e,i,r;for(i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)return e=BB(U5(i),17),new qf(yX((r=BB(t.Kb(e),10)).n.b+r.o.b/2));return iy(),iy(),Ont}function Jyn(n,t){this.c=new xp,this.a=n,this.b=t,this.d=BB(mMn(n,(hWn(),Alt)),304),GC(mMn(n,(HXn(),Lgt)))===GC((g7(),qht))?this.e=new gm:this.e=new dm}function Zyn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),33),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function nkn(n,t){var e,i;return i=null,n.Xe((sWn(),IPt))&&(e=BB(n.We(IPt),94)).Xe(t)&&(i=e.We(t)),null==i&&n.yf()&&(i=n.yf().We(t)),null==i&&(i=mpn(t)),i}function tkn(n,t){var e,i;e=n.Zc(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't remove element "+t)):Hp(r)}}function ekn(n,t){var e,i,r;if(0==(e=DBn(n,t,r=new von((i=new AT).q.getFullYear()-sQn,i.q.getMonth(),i.q.getDate())))||e<t.length)throw Hp(new _y(t));return r}function ikn(n,t){var e,i,r;for(kW(t),Tx(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),WB(n.b,kW(e));return r!=n.b.c.length&&(Esn(n,0),!0)}function rkn(){rkn=O,sWn(),kat=ISt,new XA(dSt,(hN(),!0)),Tat=KSt,Mat=BSt,Sat=qSt,Eat=DSt,Pat=USt,Iat=fPt,Kyn(),yat=dat,vat=lat,mat=wat,jat=gat,pat=fat}function ckn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw Hp(new _y("'port' must be either the source port or target port of the edge."))}function akn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function ukn(n,t,e,i){var r,c,a;for(PZ(t,BB(i.Xb(0),29)),a=i.bd(1,i.gc()),c=BB(e.Kb(t),20).Kc();c.Ob();)ukn(n,(r=BB(c.Pb(),17)).c.i==t?r.d.i:r.c.i,e,a)}function okn(n){var t;return t=new xp,Lx(n,(hWn(),Dlt))?BB(mMn(n,Dlt),83):(JT(AV(new Rq(null,new w1(n.j,16)),new tr),new gd(t)),hon(n,Dlt,t),t)}function skn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,6,_Ot,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),yOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function hkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,1,DOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),jOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function fkn(n,t){var e;return n.Db>>16==9?n.Cb.ih(n,9,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),TOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lkn(n,t){var e;return n.Db>>16==5?n.Cb.ih(n,9,XAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),s$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function bkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,0,BOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),e$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function wkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,6,GOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),v$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function dkn(){this.a=new lo,this.g=new Avn,this.j=new Avn,this.b=new xp,this.d=new Avn,this.i=new Avn,this.k=new xp,this.c=new xp,this.e=new xp,this.f=new xp}function gkn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=Wtn(n,r),null==t){if(null==i)return r}else if(GC(t)===GC(i)||Nfn(t,i))return r;return-1}function pkn(n,t){var e,i;return(e=t.Hh(n.a))?(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),j7n)),mK(E7n,i)?az(n,Utn(t.Hj())):i):null}function vkn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=BB(t,49).eh();i&&i!=t;i=i.eh()){if(++e>GQn)return vkn(n,i);if(i==n)return!0}}return!1}function mkn(n){switch(DN(),n.q.g){case 5:vCn(n,(kUn(),sCt)),vCn(n,SCt);break;case 4:z$n(n,(kUn(),sCt)),z$n(n,SCt);break;default:vUn(n,(kUn(),sCt)),vUn(n,SCt)}}function ykn(n){switch(DN(),n.q.g){case 5:SOn(n,(kUn(),oCt)),SOn(n,ICt);break;case 4:Ipn(n,(kUn(),oCt)),Ipn(n,ICt);break;default:mUn(n,(kUn(),oCt)),mUn(n,ICt)}}function kkn(n){var t,e;(t=BB(mMn(n,(fRn(),nat)),19))?(e=t.a,hon(n,(Mrn(),hat),0==e?new sbn:new I4(e))):hon(n,(Mrn(),hat),new I4(1))}function jkn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function Ekn(n,t){switch(n.g){case 0:return t==(Tbn(),Flt)?rst:cst;case 1:return t==(Tbn(),Flt)?rst:ist;case 2:return t==(Tbn(),Flt)?ist:cst;default:return ist}}function Tkn(n,t){var i,r,c;for(y7(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=n4n,r=new Wb(n.a);r.a<r.c.c.length;)i=BB(n0(r),187),c=e.Math.max(c,i.d);n.b=c}function Mkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,12,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),mOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Skn(n,t){var e;return n.Db>>16==11?n.Cb.ih(n,10,UOt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(IXn(),EOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Pkn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,11,qAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),g$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ikn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,12,QAt,t):(e=Ivn(BB(itn(BB(yan(n,16),26)||(gWn(),m$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ckn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.kh()&&(t=BB(n.r,49),n.r=BB(tfn(n,t),138),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.r))),n.r}function Okn(n,t,i){var r;return r=Pun(Gk(xNt,1),qQn,25,15,[iMn(n,(Dtn(),Git),t,i),iMn(n,zit,t,i),iMn(n,Uit,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function Akn(n,t){var e,i,r;if(0!=(r=Yvn(n,t)).c.length)for(m$(r,new ti),e=r.c.length,i=0;i<e;i++)hPn(n,(l1(i,r.c.length),BB(r.c[i],286)),TDn(n,r,i))}function $kn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Tst)),15).Kc();i.Ob();)for(t=gz((e=BB(i.Pb(),101)).k).Kc();t.Ob();)iX(n,e,BB(t.Pb(),61),(Irn(),Dst),1)}function Lkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&n.c==Ajn(t,n).c)return!0;return!1}function Nkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&t.c.i.c==t.d.i.c)return!0;return!1}function xkn(n,t){var e,i;for(OTn(t,"Dull edge routing",1),i=spn(n.b,0);i.b!=i.d.c;)for(e=spn(BB(b3(i),86).d,0);e.b!=e.d.c;)yQ(BB(b3(e),188).a)}function Dkn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)(i=x2(t,BB(r.Pb(),19).a))&&O$n(n,i)}function Rkn(){var n;for(tS(),nWn((QX(),t$t)),_Xn(t$t),Tyn(t$t),gWn(),L$t=l$t,n=new Wb(V$t);n.a<n.c.c.length;)azn(BB(n0(n),241),l$t,null);return!0}function Kkn(n,t){var e,i,r,c,a,u;return(a=n.h>>19)!=(u=t.h>>19)?u-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function _kn(){_kn=O,tRn(),Pit=new $O(UYn,Iit=xit),Rnn(),Mit=new $O(XYn,Sit=mit),hpn(),Eit=new $O(WYn,Tit=dit),jit=new $O(VYn,(hN(),!0))}function Fkn(n,t,e){var i,r;i=t*e,cL(n.g,145)?(r=f3(n)).f.d?r.f.a||(n.d.a+=i+fJn):(n.d.d-=i+fJn,n.d.a+=i+fJn):cL(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function Bkn(n,t,i){var r,c,a,u,o;for(c=n[i.g],o=new Wb(t.d);o.a<o.c.c.length;)(a=(u=BB(n0(o),101)).i)&&a.i==i&&(c[r=u.d[i.g]]=e.Math.max(c[r],a.j.b))}function Hkn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t.d);u.a<u.c.c.length;)Gmn(a=BB(n0(u),443)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.g:0),++i;t.b=r,t.e=c}function qkn(n){var t,e,i;if(i=n.b,qT(n.i,i.length)){for(e=2*i.length,n.b=x8(Gnt,IVn,317,e,0,1),n.c=x8(Gnt,IVn,317,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)YIn(n,t,t);++n.g}}function Gkn(n,t,e,i){var r,c,a,u;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)u=a-t.k+i,vmn(t,r,a)?cmn(n,c,u)||Xmn(n,c,u):ymn(t,r,a)&&(imn(n,c,u)||Wmn(n,c,u))}function zkn(n,t,e){var i;(i=t.c.i).k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function Ukn(n,t,i){var r,c,a,u,o,s;return jDn(),u=t/2,a=i/2,o=1,s=1,(r=e.Math.abs(n.a))>u&&(o=u/r),(c=e.Math.abs(n.b))>a&&(s=a/c),kL(n,e.Math.min(o,s)),n}function Xkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),y6n),2014))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new ao}function Wkn(){var n,t;d7();try{if(t=BB(Xjn((WM(),zAt),S7n),2024))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new Ds}function Vkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),V9n),1941))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new qo}function Qkn(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),r!=t&&(e=azn(n,t?kLn(n,t):n.a,e)),e}function Ykn(){AT.call(this),this.e=-1,this.a=!1,this.p=_Vn,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_Vn}function Jkn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function Zkn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function njn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function tjn(){tjn=O,Nat=WG(dq(dq(dq(new B2,(yMn(),Fat),(lWn(),yot)),Fat,Tot),Bat,Aot),Bat,oot),Dat=dq(dq(new B2,Fat,Jut),Fat,sot),xat=WG(new B2,Bat,fot)}function ejn(n){var t,e,i,r,c;for(t=BB(mMn(n,(hWn(),zft)),83),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=BB(i.Pb(),306)).i).c+=c.a,r.d+=c.b,e.c?NDn(e):xDn(e);hon(n,zft,null)}function ijn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function rjn(n){var t,e,i,r,c;if(i=0,r=ZJn,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,UKn(n,n.d,0,0,Z3n,e),(c=n.b.ig(n.d))<r&&(i=e,r=c);UKn(n,n.d,0,0,Z3n,i)}function cjn(n,t){var e,i,r,c;for(c=new xp,t.e=null,t.f=null,i=new Wb(t.i);i.a<i.c.c.length;)e=BB(n0(i),65),r=BB(RX(n.g,e.a),46),e.a=qz(e.b),VW(c,e.a,r);n.g=c}function ajn(n,t,e){var i,r,c,a,u;for(r=(t-n.e)/n.d.c.length,c=0,u=new Wb(n.d);u.a<u.c.c.length;)a=BB(n0(u),443),i=n.b-a.b+e,kdn(a,a.e+c*r,a.f),hmn(a,r,i),++c}function ujn(n){var t;if(n.f.qj(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function ojn(n,t){var e,i,r;for(e=$In(n,0==(r=t.c.length)?"":(l1(0,t.c.length),SD(t.c[0]))),i=1;i<r&&e;++i)e=BB(e,49).oh((l1(i,t.c.length),SD(t.c[i])));return e}function sjn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),10),n.c[e.c.p][e.p].a=OG(n.i),n.c[e.c.p][e.p].d=Gy(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function hjn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),157),c+=e.Math.pow(iG(i)*eG(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function fjn(n,t,e,i){var r,c,a;return a=NRn(n,c=qRn(n,t,e,i)),fMn(n,t,e,i),K9(n.b),SQ(),m$(c,new Qd(n)),r=NRn(n,c),fMn(n,e,t,i),K9(n.b),new rC(iln(a),iln(r))}function ljn(n,t,e){var i;for(OTn(e,"Interactive node placement",1),n.a=BB(mMn(t,(hWn(),Alt)),304),i=new Wb(t.b);i.a<i.c.c.length;)nDn(n,BB(n0(i),29));HSn(e)}function bjn(n,t){OTn(t,"General Compactor",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),dwn(BB(ZAn(n,(Uyn(),Sjt)),380)).hg(n),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function wjn(n,t,e){var i,r;for(IA(n,n.j+t,n.k+e),r=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));r.e!=r.i.gc();)TA(i=BB(kpn(r),469),i.a+t,i.b+e);PA(n,n.b+t,n.c+e)}function djn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),Ywn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),Ywn(n.d,t,i)}return FTn(n,t,e,i)}function gjn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),_pn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),_pn(n.d,t,i)}return run(n,t,e,i)}function pjn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&bCn(n,r,t)}function vjn(n,t,e){var i,r,c;return n.qj(),c=null==t?0:nsn(t),n.f>0&&(r=aOn(n,(c&DWn)%n.d.length,c,t))?r.ed(e):(i=n.tj(c,t,e),n.c.Fc(i),null)}function mjn(n,t){var e,i,r,c;switch(Ifn(n,t)._k()){case 3:case 2:for(r=0,c=(e=YBn(t)).i;r<c;++r)if(5==DW(B7(n,i=BB(Wtn(e,r),34))))return i}return null}function yjn(n){var t,e,i,r,c;if(qT(n.f,n.b.length))for(i=x8(Qnt,IVn,330,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e.Rd())t=(c=BB(e,330)).d&r,c.a=i[t],i[t]=c}function kjn(n,t){var i,r,c,a;for(a=0,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)r=BB(c.Pb(),111),a=e.Math.max(a,r.e.a+r.b.rf().a);(i=BB(oV(n.b,t),124)).n.b=0,i.a.a=a}function jjn(n,t){var i,r,c,a;for(i=0,a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)c=BB(a.Pb(),111),i=e.Math.max(i,c.e.b+c.b.rf().b);(r=BB(oV(n.b,t),124)).n.d=0,r.a.b=i}function Ejn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=kA(vyt),e.Hc((bDn(),gft))&&Jcn(t,kyt),e.Hc(vft)&&Jcn(t,Eyt),e.Hc(sft)&&Jcn(t,myt),e.Hc(fft)&&Jcn(t,yyt),t}function Tjn(n,t){var e;OTn(t,"Delaunay triangulation",1),e=new Np,Otn(n.i,new yg(e)),qy(TD(mMn(n,(Xcn(),Qrt)))),n.e?Frn(n.e,$Xn(e)):n.e=$Xn(e),HSn(t)}function Mjn(n){if(n<0)throw Hp(new _y("The input must be positive"));return n<MMt.length?j2(MMt[n]):e.Math.sqrt(Z3n*n)*(ifn(n,n)/efn(2.718281828459045,n))}function Sjn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(GC(n.g[e])===GC(t))return!0;return!1}function Pjn(n,t){if(null==t){for(;n.a.Ob();)if(null==BB(n.a.Pb(),42).dd())return!0}else for(;n.a.Ob();)if(Nfn(t,BB(n.a.Pb(),42).dd()))return!0;return!1}function Ijn(n,t){var e;return t===n||!!cL(t,664)&&(e=BB(t,1947),ign(n.g||(n.g=new Zf(n)),e.g||(e.g=new Zf(e))))}function Cjn(n){var t,i,r;for(t="Sz",i="ez",r=e.Math.min(n.length,5)-1;r>=0;r--)if(mK(n[r].d,t)||mK(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function Ojn(n,t){var i;return JO(n)&&JO(t)&&$Qn<(i=n/t)&&i<OQn?i<0?e.Math.ceil(i):e.Math.floor(i):uan(Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!1))}function Ajn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw Hp(new _y("'node' must either be the source node or target node of the edge."))}function $jn(n){var t,e,i,r;if(r=BB(mMn(n,(hWn(),Fft)),37)){for(i=new Gj,t=vW(n.c.i);t!=r;)t=vW(e=t.e),_x(UR(UR(i,e.n),t.c),t.d.b,t.d.d);return i}return Fut}function Ljn(n){var t;JT(wnn(new Rq(null,new w1((t=BB(mMn(n,(hWn(),Olt)),403)).d,16)),new _i),new wd(n)),JT(AV(new Rq(null,new w1(t.d,16)),new Fi),new dd(n))}function Njn(n,t){var e,i;for(e=new oz(ZL((t?lbn(n):fbn(n)).a.Kc(),new h));dAn(e);)if((i=Ajn(BB(U5(e),17),n)).k==(uSn(),Put)&&i.c!=n.c)return i;return null}function xjn(n){var t,i,r;for(i=new Wb(n.p);i.a<i.c.c.length;)(t=BB(n0(i),10)).k==(uSn(),Iut)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function Djn(n,t,e){var i,r,c;for(c=new Wb(t);c.a<c.c.c.length;)i=BB(n0(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Wb(t);r.a<r.c.c.length;)xzn(n,i=BB(n0(r),10),e)}function Rjn(n,t,i){var r,c;(r=Tfn(t.j,i.s,i.c)+Tfn(i.e,t.s,t.c))==(c=Tfn(i.j,t.s,t.c)+Tfn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function Kjn(n,t){var e;if(e=!1,XC(t)&&(e=!0,nW(n,new GX(SD(t)))),e||cL(t,236)&&(e=!0,nW(n,new Sl(XK(BB(t,236))))),!e)throw Hp(new Ly(H6n))}function _jn(n,t,e,i){var r,c,a;return r=new N7(n.e,1,10,cL(a=t.c,88)?BB(a,26):(gWn(),d$t),cL(c=e.c,88)?BB(c,26):(gWn(),d$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Fjn(n){var t,e;switch(BB(mMn(vW(n),(HXn(),pgt)),420).g){case 0:return t=n.n,e=n.o,new xI(t.a+e.a/2,t.b+e.b/2);case 1:return new wA(n.n);default:return null}}function Bjn(){Bjn=O,Qht=new AP(QZn,0),Vht=new AP("LEFTUP",1),Jht=new AP("RIGHTUP",2),Wht=new AP("LEFTDOWN",3),Yht=new AP("RIGHTDOWN",4),Xht=new AP("BALANCED",5)}function Hjn(n,t,e){var i,r,c;if(0==(i=Pln(n.a[t.p],n.a[e.p]))){if(r=BB(mMn(t,(hWn(),clt)),15),c=BB(mMn(e,clt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function qjn(n){switch(n.g){case 1:return new _a;case 2:return new Fa;case 3:return new Ka;case 0:return null;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Gjn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),sqn(n.n),!n.n&&(n.n=new eU(zOt,n,1,7)),void pX(n.n,BB(e,14));case 2:return void $in(n,SD(e))}rsn(n,t,e)}function zjn(n,t,e){switch(t){case 3:return void Men(n,Gy(MD(e)));case 4:return void Sen(n,Gy(MD(e)));case 5:return void Pen(n,Gy(MD(e)));case 6:return void Ien(n,Gy(MD(e)))}Gjn(n,t,e)}function Ujn(n,t,e){var i,r;(i=HTn(r=new Lm,t,null))&&i.Fi(),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(r,0),Nen(r,1),nln(r,!0),Yfn(r,!0)}function Xjn(n,t){var e,i;return cL(e=hS(n.g,t),235)?((i=BB(e,235)).Qh(),i.Nh()):cL(e,498)?i=BB(e,1938).b:null}function Wjn(n,t,e,i){var r,c;return yX(t),yX(e),R7(!!(c=BB(UK(n.d,t),19)),"Row %s not in %s",t,n.e),R7(!!(r=BB(UK(n.b,e),19)),"Column %s not in %s",e,n.c),Sun(n,c.a,r.a,i)}function Vjn(n,t,e,i,r,c,a){var u,o,s,h,f;if(f=Bmn(u=(s=c==a-1)?i:0,h=r[c]),10!=i&&Pun(Gk(n,a-c),t[c],e[c],u,f),!s)for(++c,o=0;o<h;++o)f[o]=Vjn(n,t,e,i,r,c,a);return f}function Qjn(n){if(-1==n.g)throw Hp(new dv);n.mj();try{n.i.$c(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}}function Yjn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),n.c[n.c.length]=t,!0}function Jjn(n){var t,e,i;for(i=-1,e=0,t=new Wb(n);t.a<t.c.c.length;){if(BB(n0(t),243).c==(ain(),Hvt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function Zjn(n){var t,i,r,c;for(c=0,t=0,r=new Wb(n.c);r.a<r.c.c.length;)Pen(i=BB(n0(r),33),n.e+c),Ien(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function nEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),57)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;yNn(n)}function tEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),81)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;kNn(n)}function eEn(n){var t,e,i,r,c;for(c=gz(n.k),kUn(),i=0,r=(e=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;i<r;++i)if((t=e[i])!=PCt&&!c.Hc(t))return t;return null}function iEn(n,t){var e,i;return(i=BB(EN(Qon(AV(new Rq(null,new w1(t.j,16)),new bc))),11))&&(e=BB(xq(i.e,0),17))?BB(mMn(e,(hWn(),wlt)),19).a:gnn(n.b)}function rEn(n,t){var e,i,r;for(r=new Wb(t.a);r.a<r.c.c.length;)for(i=BB(n0(r),10),nk(n.d),e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)XOn(n,i,BB(U5(e),17).d.i)}function cEn(n,t){var e,i;for(y7(n.b,t),i=new Wb(n.n);i.a<i.c.c.length;)if(-1!=E7((e=BB(n0(i),211)).c,t,0)){y7(e.c,t),Zjn(e),0==e.c.c.length&&y7(n.n,e);break}fHn(n)}function aEn(n,t){var i,r,c,a,u;for(u=n.f,c=0,a=0,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),n.e,u),p9(i,t),a=e.Math.max(a,i.r),c=u+=i.d+n.c;n.d=a,n.b=c}function uEn(n){var t,e;return h3(e=wLn(n))?null:(yX(e),t=BB(emn(new oz(ZL(e.a.Kc(),new h))),79),PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)))}function oEn(n){return n.o||(n.Lj()?n.o=new aW(n,n,null):n.rk()?n.o=new rR(n,null):1==DW(B7((CPn(),Z$t),n))?n.o=new g4(n):n.o=new cR(n,null)),n.o}function sEn(n,t,e,i){var r,c,a,u,o;e.mh(t)&&(r=(a=t)?BB(i,49).xh(a):null)&&(o=e.ah(t),(u=t.t)>1||-1==u?(c=BB(o,15),r.Wb(Xdn(n,c))):r.Wb(t_n(n,BB(o,56))))}function hEn(n,t,e,i){YE();var r=PWn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{HNt(c)()}catch(a){n(t,a)}else HNt(c)()}function fEn(n){var t,e,i,r,c;for(i=new usn(new Pb(n.b).a);i.b;)t=BB((e=ten(i)).cd(),10),c=BB(BB(e.dd(),46).a,10),r=BB(BB(e.dd(),46).b,8),UR(kO(t.n),UR(B$(c.n),r))}function lEn(n){switch(BB(mMn(n.b,(HXn(),egt)),375).g){case 1:JT($V(wnn(new Rq(null,new w1(n.d,16)),new _r),new Fr),new Br);break;case 2:vRn(n);break;case 0:IIn(n)}}function bEn(n,t,e){OTn(e,"Straight Line Edge Routing",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),mHn(n,BB(ZAn(t,(wD(),Vkt)),33)),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function wEn(){wEn=O,ZMt=new RI("V_TOP",0),JMt=new RI("V_CENTER",1),YMt=new RI("V_BOTTOM",2),VMt=new RI("H_LEFT",3),WMt=new RI("H_CENTER",4),QMt=new RI("H_RIGHT",5)}function dEn(n){var t;return 0!=(64&n.Db)?Iwn(n):((t=new fN(Iwn(n))).a+=" (abstract: ",yE(t,0!=(256&n.Bb)),t.a+=", interface: ",yE(t,0!=(512&n.Bb)),t.a+=")",t.a)}function gEn(n,t,e,i){var r,c,a;return mA(n.e)&&(a=LY(n,1,r=t.ak(),t.dd(),c=e.dd(),r.$j()?pBn(n,r,c,cL(r,99)&&0!=(BB(r,18).Bb&BQn)):-1,!0),i?i.Ei(a):i=a),i}function pEn(n){var t;null==n.c&&(t=GC(n.b)===GC(Ynt)?null:n.b,n.d=null==t?zWn:ez(t)?jN(EQ(t)):XC(t)?qVn:nE(tsn(t)),n.a=n.a+": "+(ez(t)?IR(EQ(t)):t+""),n.c="("+n.d+") "+n.a)}function vEn(n,t){this.e=n,QC(e0(t,-4294967296),0)?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t)])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t),dG(kz(t,32))]))}function mEn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===xWn&&Map.prototype.entries&&n()?Map:bUn()}function yEn(n,t){var e,i,r;for(r=new M2(n.e,0),e=0;r.b<r.d.gc();){if((i=Gy((Px(r.b<r.d.gc()),MD(r.d.Xb(r.c=r.b++))))-t)>D3n)return e;i>-1e-6&&++e}return e}function kEn(n,t){var e;t!=n.b?(e=null,n.b&&(e=oJ(n.b,n,-4,e)),t&&(e=Npn(t,n,-4,e)),(e=Zhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function jEn(n,t){var e;t!=n.f?(e=null,n.f&&(e=oJ(n.f,n,-1,e)),t&&(e=Npn(t,n,-1,e)),(e=nfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,t,t))}function EEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function TEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function MEn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Tz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function SEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),OV(new Bg(n).a,i)}function PEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),CV(new $g(n).a,i)}function IEn(n){if(null!=n&&n.length>0&&33==fV(n,n.length-1))try{return null==YPn(fx(n,0,n.length-1)).e}catch(t){if(!cL(t=lun(t),32))throw Hp(t)}return!1}function CEn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,3,i,null,c,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,1,i,i.zj(),c,-1,!0),e?e.Ei(r):e=r,e}function OEn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=QOn((b1(n,1),"X".charCodeAt(n)))))throw Hp(new ak("Unknown Option: "+"X".substr(n)));t|=e}return t}function AEn(n,t,e){var i,r;switch(i=Wln(vW(t)),IZ(r=new ISn,t),e.g){case 1:qIn(r,Tln(hwn(i)));break;case 2:qIn(r,hwn(i))}return hon(r,(HXn(),tpt),MD(mMn(n,tpt))),r}function $En(n){var t,e;return t=BB(U5(new oz(ZL(fbn(n.a).a.Kc(),new h))),17),e=BB(U5(new oz(ZL(lbn(n.a).a.Kc(),new h))),17),qy(TD(mMn(t,(hWn(),Ilt))))||qy(TD(mMn(e,Ilt)))}function LEn(){LEn=O,Mst=new yP("ONE_SIDE",0),Pst=new yP("TWO_SIDES_CORNER",1),Ist=new yP("TWO_SIDES_OPPOSING",2),Sst=new yP("THREE_SIDES",3),Tst=new yP("FOUR_SIDES",4)}function NEn(n,t,e,i,r){var c,a;c=BB(P4(AV(t.Oc(),new Zr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),a=BB(gan(n.b,e,i),15),0==r?a.Wc(0,c):a.Gc(c)}function xEn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(i),10)).a.Kc(),new h));dAn(e);)r=BB(U5(e),17).c.i.p,n.n[r]=n.n[r]-1}function DEn(n,t){var e,i,r,c;for(r=new Wb(t.d);r.a<r.c.c.length;)for(i=BB(n0(r),101),c=BB(RX(n.c,i),112).o,e=new QT(i.b);e.a<e.c.a.length;)g9(i,BB(u4(e),61),c)}function REn(n){var t;for(t=new Wb(n.e.b);t.a<t.c.c.length;)hzn(n,BB(n0(t),29));JT(AV(wnn(wnn(new Rq(null,new w1(n.e.b,16)),new Xc),new Zc),new na),new hg(n))}function KEn(n,t){return!!t&&!n.Di(t)&&(n.i?n.i.Ei(t):cL(t,143)?(n.i=BB(t,143),!0):(n.i=new po,n.i.Ei(t)))}function _En(n){if(n=FBn(n,!0),mK(a5n,n)||mK("1",n))return hN(),vtt;if(mK(u5n,n)||mK("0",n))return hN(),ptt;throw Hp(new ik("Invalid boolean value: '"+n+"'"))}function FEn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=BB(r.Pb(),42)).cd(),GC(t)===GC(c)||null!=t&&Nfn(t,c))return e&&(i=new PS(i.cd(),i.dd()),r.Qb()),i;return null}function BEn(n){var t,e,i;qD(),n.B.Hc((n_n(),qCt))&&(i=n.f.i,t=new gY(n.a.c),(e=new bm).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.Ff(e))}function HEn(n,t,i,r){var c,a,u;for(u=e.Math.min(i,WFn(BB(n.b,65),t,i,r)),a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),221))!=t&&(u=e.Math.min(u,HEn(c,t,u,r)));return u}function qEn(n){var t,e,i;for(i=x8(Out,sVn,193,n.b.c.length,0,2),e=new M2(n.b,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),29),i[e.b-1]=n2(t.a);return i}function GEn(n,t,e,i,r){var c,a,u,o;for(a=nj(Zk(H_(tvn(e)),i),akn(n,e,r)),o=DSn(n,e).Kc();o.Ob();)t[(u=BB(o.Pb(),11)).p]&&(c=t[u.p].i,WB(a.d,new xG(c,kln(a,c))));Pwn(a)}function zEn(n,t){this.f=new xp,this.b=new xp,this.j=new xp,this.a=n,this.c=t,this.c>0&&_yn(this,this.c-1,(kUn(),oCt)),this.c<this.a.length-1&&_yn(this,this.c+1,(kUn(),ICt))}function UEn(n){n.length>0&&n[0].length>0&&(this.c=qy(TD(mMn(vW(n[0][0]),(hWn(),alt))))),this.a=x8(Pmt,sVn,2018,n.length,0,2),this.b=x8(Lmt,sVn,2019,n.length,0,2),this.d=new Thn}function XEn(n){return 0!=n.c.length&&((l1(0,n.c.length),BB(n.c[0],17)).c.i.k==(uSn(),Put)||o5($V(new Rq(null,new w1(n,16)),new Kc),new _c))}function WEn(n,t,e){return OTn(e,"Tree layout",1),h2(n.b),IU(n.b,(zyn(),Ryt),Ryt),IU(n.b,Kyt,Kyt),IU(n.b,_yt,_yt),IU(n.b,Fyt,Fyt),n.a=$qn(n.b,t),lxn(n,t,mcn(e,1)),HSn(e),t}function VEn(n,t){var i,r,c,a,u,o;for(u=wDn(t),c=t.f,o=t.g,a=e.Math.sqrt(c*c+o*o),r=0,i=new Wb(u);i.a<i.c.c.length;)r+=VEn(n,BB(n0(i),33));return e.Math.max(r,a)}function QEn(){QEn=O,YIt=new UI(hJn,0),QIt=new UI("FREE",1),VIt=new UI("FIXED_SIDE",2),UIt=new UI("FIXED_ORDER",3),WIt=new UI("FIXED_RATIO",4),XIt=new UI("FIXED_POS",5)}function YEn(n,t){var e,i,r;if(e=t.Hh(n.a))for(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),T7n)),i=1;i<(CPn(),nLt).length;++i)if(mK(nLt[i],r))return i;return 0}function JEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function ZEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function nTn(n){var t,e,i;for(i=new $an(FWn,"{","}"),e=n.vc().Kc();e.Ob();)b6(i,W3(n,(t=BB(e.Pb(),42)).cd())+"="+W3(n,t.dd()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function tTn(n){for(var t,e,i,r;!Wy(n.o);)e=BB(dU(n.o),46),i=BB(e.a,121),r=Nbn(t=BB(e.b,213),i),t.e==i?(RN(r.g,t),i.e=r.e+t.a):(RN(r.b,t),i.e=r.e-t.a),WB(n.e.a,i)}function eTn(n,t){var e,i,r;for(e=null,r=BB(t.Kb(n),20).Kc();r.Ob();)if(i=BB(r.Pb(),17),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function iTn(n,t){var e,i,r;for(i=new Wb(QLn(n,!1,t));i.a<i.c.c.length;)0==(e=BB(n0(i),129)).d?(WZ(e,null),VZ(e,null)):(r=e.a,WZ(e,e.b),VZ(e,r))}function rTn(n){var t,e;return Jcn(t=new B2,Iyt),(e=BB(mMn(n,(hWn(),Zft)),21)).Hc((bDn(),vft))&&Jcn(t,$yt),e.Hc(sft)&&Jcn(t,Cyt),e.Hc(gft)&&Jcn(t,Ayt),e.Hc(fft)&&Jcn(t,Oyt),t}function cTn(n){var t,e,i,r;for(Sqn(n),e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)r=(i=(t=BB(U5(e),17)).c.i==n)?t.d:t.c,i?MZ(t,null):SZ(t,null),hon(t,(hWn(),mlt),r),uAn(n,r.i)}function aTn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function uTn(n){var t,e;for(e=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));e.e!=e.i.gc();)if(!dAn(new oz(ZL(wLn(t=BB(kpn(e),33)).a.Kc(),new h))))return t;return null}function oTn(){var n;return WOt?BB($$n((WM(),zAt),y6n),2016):(n=BB(cL(SJ((WM(),zAt),y6n),555)?SJ(zAt,y6n):new sAn,555),WOt=!0,_Gn(n),jWn(n),Tyn(n),mZ(zAt,y6n,n),n)}function sTn(n,t,e){var i,r;if(0==n.j)return e;if(r=BB(_en(n,t,e),72),!(i=e.ak()).Ij()||!n.a.rl(i))throw Hp(new dy("Invalid entry feature '"+i.Hj().zb+"."+i.ne()+"'"));return r}function hTn(n,t){var e,i,r,c,a,u,o;for(u=0,o=(a=n.a).length;u<o;++u)for(r=0,c=(i=a[u]).length;r<c;++r)if(e=i[r],GC(t)===GC(e)||null!=t&&Nfn(t,e))return!0;return!1}function fTn(n){var t,e,i;return Vhn(n,0)>=0?(e=Ojn(n,AQn),i=ldn(n,AQn)):(e=Ojn(t=jz(n,1),5e8),i=rbn(yz(i=ldn(t,5e8),1),e0(n,1))),i0(yz(i,32),e0(e,UQn))}function lTn(n,t,e){var i;switch(Px(0!=t.b),i=BB(Atn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return nX(spn(t,0),i),t}function bTn(n,t,e,i){var r,c,a,u,o;switch(o=n.b,u=zgn(a=(c=t.d).j,o.d[a.g],e),r=UR(B$(c.n),c.a),c.j.g){case 1:case 3:u.a+=r.a;break;case 2:case 4:u.b+=r.b}r5(i,u,i.c.b,i.c)}function wTn(n,t,e){var i,r,c,a;for(a=E7(n.e,t,0),(c=new rm).b=e,i=new M2(n.e,a);i.b<i.d.gc();)Px(i.b<i.d.gc()),(r=BB(i.d.Xb(i.c=i.b++),10)).p=e,WB(c.e,r),fW(i);return c}function dTn(n,t,e,i){var r,c,a,u,o;for(r=null,c=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).i+a.g,n<a.j+a.f+i&&(r?e.i-o<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function gTn(n,t,e,i){var r,c,a,u,o;for(c=null,r=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).j+a.f,n<a.i+a.g+i&&(c?e.j-o<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function pTn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Yon(BB(xq(n.b,e),434))?!t&&e+1<i&&Yon(BB(xq(n.b,e+1),434))&&(t=!0,BB(xq(n.b,e),434).a=!0):t=!1}function vTn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=rbn(c,ibn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}function mTn(n,t){var e,i;for($On(),ODn(),i=Jtt,e=n;t>1;t>>=1)0!=(1&t)&&(i=Nnn(i,e)),e=1==e.d?Nnn(e,e):new Ign(C_n(e.a,e.d,x8(ANt,hQn,25,e.d<<1,15,1)));return i=Nnn(i,e)}function yTn(){var n,t,e,i;for(yTn=O,Oet=x8(xNt,qQn,25,25,15,1),Aet=x8(xNt,qQn,25,33,15,1),i=152587890625e-16,t=32;t>=0;t--)Aet[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)Oet[n]=e,e*=.5}function kTn(n){var t,e;if(qy(TD(ZAn(n,(HXn(),wgt)))))for(e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)if(QCn(t=BB(U5(e),79))&&qy(TD(ZAn(t,dgt))))return!0;return!1}function jTn(n,t){var e,i,r;TU(n.f,t)&&(t.b=n,i=t.c,-1!=E7(n.j,i,0)||WB(n.j,i),r=t.d,-1!=E7(n.j,r,0)||WB(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new epn(n)),van(n.i,e)))}function ETn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:Mln(e)==r?0:Eln(e)==r?1:SN(n.b.b,Mln(e))?0:1}function TTn(){TTn=O,tvt=new RP(j3n,0),Zpt=new RP("LONGEST_PATH",1),Ypt=new RP("COFFMAN_GRAHAM",2),Jpt=new RP(B1n,3),evt=new RP("STRETCH_WIDTH",4),nvt=new RP("MIN_WIDTH",5)}function MTn(n){var t;this.d=new xp,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new sG(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new YK(t=BB(Vj(aAt),9),BB(SR(t,t.length),9),0)}function STn(n,t){var e,i,r,c;!(r=D2(i=n,"layoutOptions"))&&(r=D2(i,M6n)),r&&(e=null,(c=r)&&(e=new TT(c,jrn(c,x8(Qtt,sVn,2,0,6,1)))),e&&e5(e,new wC(c,t)))}function PTn(n){if(cL(n,239))return BB(n,33);if(cL(n,186))return WJ(BB(n,118));throw Hp(n?new tk("Only support nodes and ports."):new Hy(e8n))}function ITn(n,t,e,i){return t>=0&&mK(n.substr(t,3),"GMT")||t>=0&&mK(n.substr(t,3),"UTC")?(e[0]=t+3,y_n(n,e,i)):y_n(n,e,i)}function CTn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)(r=(e=BB(n0(i),70)).n).a=c,n.i==(kUn(),sCt)?r.b=a+n.j.b-e.o.b:r.b=a,UR(r,t),c+=e.o.a+n.e}function OTn(n,t,e){if(n.b)throw Hp(new Fy("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=($T(),cbn(fan(Date.now()),VVn))),!0)}function ATn(n){var t;return t=new py,null!=n.tg()&&AH(t,q6n,n.tg()),null!=n.ne()&&AH(t,t8n,n.ne()),null!=n.sg()&&AH(t,"description",n.sg()),t}function $Tn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new nU(n,1,9,c,t),e?e.Ei(r):e=r),t?(i=t.c)!=n.r&&(e=n.nk(i,e)):n.r&&(e=n.nk(null,e)),e}function LTn(n,t,e){var i,r;for(e=Npn(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function NTn(n,t,e){var i,r;for(e=oJ(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function xTn(n,t,e,i){var r,c,a;if(0==i)aHn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function DTn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.b=t,r.d.c=i}function RTn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.d=i,r.d.a=t}function KTn(n,t){var e,i,r,c;for(c=new Np,r=0,i=t.Kc();i.Ob();){for(e=iln(BB(i.Pb(),19).a+r);e.a<n.f&&!tG(n,e.a);)e=iln(e.a+1),++r;if(e.a>=n.f)break;c.c[c.c.length]=e}return c}function _Tn(n){var t,e,i,r;for(t=null,r=new Wb(n.wf());r.a<r.c.c.length;)e=new UV((i=BB(n0(r),181)).qf().a,i.qf().b,i.rf().a,i.rf().b),t?IPn(t,e):t=e;return!t&&(t=new bA),t}function FTn(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),Ywn(n.n,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Qj(n,fgn(n),e-bX(n.zh()),t,i)}function BTn(n,t,e){var i,r,c,a,u;for(i=e.gc(),n.qi(n.i+i),(u=n.i-t)>0&&aHn(n.g,t,n.g,t+i,u),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),jL(n,t,n.oi(t,c)),n.bi(t,c),n.ci(),++t;return 0!=i}function HTn(n,t,e){var i;return t!=n.q?(n.q&&(e=oJ(n.q,n,-10,e)),t&&(e=Npn(t,n,-10,e)),e=$Tn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,9,t,t),e?e.Ei(i):e=i),e}function qTn(n,t,e,i){return I_(0==(e&hVn),"flatMap does not support SUBSIZED characteristic"),I_(0==(4&e),"flatMap does not support SORTED characteristic"),yX(n),yX(t),new q2(n,e,i,t)}function GTn(n,t){SU(t,"Cannot suppress a null exception."),vH(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Pun(Gk(Jnt,1),sVn,78,0,[t]):n.k[n.k.length]=t)}function zTn(n,t,e,i){var r,c,a,u,o,s;for(a=e.length,c=0,r=-1,s=atn(n.substr(t),(c_(),Tet)),u=0;u<a;++u)(o=e[u].length)>c&&sU(s,atn(e[u],Tet))&&(r=u,c=o);return r>=0&&(i[0]=t+c),r}function UTn(n,t){var e;if(0!=(e=YO(n.b.Hf(),t.b.Hf())))return e;switch(n.b.Hf().g){case 1:case 2:return E$(n.b.sf(),t.b.sf());case 3:case 4:return E$(t.b.sf(),n.b.sf())}return 0}function XTn(n){var t,e,i;for(i=n.e.c.length,n.a=kq(ANt,[sVn,hQn],[48,25],15,[i,i],2),e=new Wb(n.c);e.a<e.c.c.length;)t=BB(n0(e),282),n.a[t.c.b][t.d.b]+=BB(mMn(t,(fRn(),Zct)),19).a}function WTn(n,t,e){OTn(e,"Grow Tree",1),n.b=t.f,qy(TD(mMn(t,(Xcn(),Qrt))))?(n.c=new it,QZ(n,null)):n.c=new it,n.a=!1,FNn(n,t.f),hon(t,Yrt,(hN(),!!n.a)),HSn(e)}function VTn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=x8(ONt,WVn,25,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=OOt[e],a[r++]=OOt[c];return Bdn(a,0,a.length)}function QTn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,4,i,c,null,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,i.Kj()?2:1,i,c,i.zj(),-1,!0),e?e.Ei(r):e=r,e}function YTn(n){var t,e;return n>=BQn?(t=HQn+(n-BQn>>10&1023)&QVn,e=56320+(n-BQn&1023)&QVn,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&QVn)}function JTn(n,t){var e,i,r,c;return qD(),(r=BB(BB(h6(n.r,t),21),84)).gc()>=2&&(i=BB(r.Kc().Pb(),111),e=n.u.Hc((lCn(),tCt)),c=n.u.Hc(cCt),!i.a&&!e&&(2==r.gc()||c))}function ZTn(n,t,e,i,r){var c,a,u;for(c=eDn(n,t,e,i,r),u=!1;!c;)E$n(n,r,!0),u=!0,c=eDn(n,t,e,i,r);u&&E$n(n,r,!1),0!=(a=Dun(r)).c.length&&(n.d&&n.d.lg(a),ZTn(n,r,e,i,a))}function nMn(){nMn=O,aIt=new BI(QZn,0),rIt=new BI("DIRECTED",1),uIt=new BI("UNDIRECTED",2),eIt=new BI("ASSOCIATION",3),cIt=new BI("GENERALIZATION",4),iIt=new BI("DEPENDENCY",5)}function tMn(n,t){var e;if(!WJ(n))throw Hp(new Fy(F5n));switch(e=WJ(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function eMn(n,t){var e,i;for(kW(t),i=n.b.c.length,WB(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.ue(xq(n.b,i),t)<=0)return c5(n.b,e,t),!0;c5(n.b,e,xq(n.b,i))}return c5(n.b,i,t),!0}function iMn(n,t,i,r){var c,a;if(c=0,i)c=mhn(n.a[i.g][t.g],r);else for(a=0;a<nrt;a++)c=e.Math.max(c,mhn(n.a[a][t.g],r));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function rMn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(kUn(),oCt)&&i.i!=(kUn(),ICt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function cMn(n,t,e,i){var r;if(r=!1,XC(i)&&(r=!0,AH(t,e,SD(i))),r||zC(i)&&(r=!0,cMn(n,t,e,i)),r||cL(i,236)&&(r=!0,qQ(t,e,BB(i,236))),!r)throw Hp(new Ly(H6n))}function aMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(CPn(),Y$t).length;++i)if(mK(Y$t[i],r))return i;return 0}function uMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(CPn(),J$t).length;++i)if(mK(J$t[i],r))return i;return 0}function oMn(n,t){var e,i,r,c;if(kW(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function sMn(n){var t,e;switch(e=B$(Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function hMn(n){var t;for(Crn(),t=BB(U5(new oz(ZL(fbn(n).a.Kc(),new h))),17).c.i;t.k==(uSn(),Put);)hon(t,(hWn(),olt),(hN(),!0)),t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i}function fMn(n,t,e,i){var r,c,a;for(a=Lfn(t,i).Kc();a.Ob();)r=BB(a.Pb(),11),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Lfn(e,i).Kc();c.Ob();)r=BB(c.Pb(),11),n.d[r.p]=n.d[r.p]-n.c[t.p]}function lMn(n,t,e){var i,r;for(r=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));r.e!=r.i.gc();)SA(i=BB(kpn(r),33),i.i+t,i.j+e);e5((!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b),new tC(t,e))}function bMn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.ue(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.ue(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function wMn(n){return lCn(),!(Ian(OJ(EG(eCt,Pun(Gk(CCt,1),$Vn,273,0,[rCt])),n))>1||Ian(OJ(EG(tCt,Pun(Gk(CCt,1),$Vn,273,0,[nCt,cCt])),n))>1)}function dMn(n,t){cL(SJ((WM(),zAt),n),498)?mZ(zAt,n,new OC(this,t)):mZ(zAt,n,this),iSn(this,t),t==(iE(),n$t)?(this.wb=BB(this,1939),BB(t,1941)):this.wb=(QX(),t$t)}function gMn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<COt.length;++e)try{return BM(COt[e],n)}catch(i){if(!cL(i=lun(i),32))throw Hp(i);t=i}throw Hp(new L7(t))}function pMn(){pMn=O,pet=Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),vet=Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function vMn(n){var t,e,i;(t=mK(typeof t,gYn)?null:new ln)&&(lM(),tW(e=(i=900)>=VVn?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&xNn(t,e,n.b,"Exception: ",!0))}function mMn(n,t){var e,i;return!n.q&&(n.q=new xp),null!=(i=RX(n.q,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e))),e)}function yMn(){yMn=O,Rat=new VS("P1_CYCLE_BREAKING",0),Kat=new VS("P2_LAYERING",1),_at=new VS("P3_NODE_ORDERING",2),Fat=new VS("P4_NODE_PLACEMENT",3),Bat=new VS("P5_EDGE_ROUTING",4)}function kMn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),y7(n.b.b,r.b),y7(n.b.a,BB(r.b,81).d)}function jMn(n,t){var e;if(Dnn(),n.c==t.c){if(n.b==t.b||hcn(n.b,t.b)){if(e=ZO(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return E$(n.b.g,t.b.g)}return Pln(n.c,t.c)}function EMn(n,t){var e;OTn(t,"Hierarchical port position processing",1),(e=n.b).c.length>0&&i_n((l1(0,e.c.length),BB(e.c[0],29)),n),e.c.length>1&&i_n(BB(xq(e,e.c.length-1),29),n),HSn(t)}function TMn(n,t){var e,i;if(NMn(n,t))return!0;for(i=new Wb(t);i.a<i.c.c.length;){if(_Dn(n,e=BB(n0(i),33),uEn(e)))return!0;if($hn(n,e)-n.g<=n.a)return!0}return!1}function MMn(){MMn=O,bRn(),kTt=RTt,vTt=LTt,pTt=ATt,dTt=PTt,gTt=CTt,wTt=new WA(8),bTt=new XA((sWn(),XSt),wTt),mTt=new XA(LPt,8),yTt=xTt,hTt=jTt,fTt=TTt,lTt=new XA(lSt,(hN(),!1))}function SMn(){SMn=O,zMt=new WA(15),GMt=new XA((sWn(),XSt),zMt),XMt=new XA(LPt,15),UMt=new XA(pPt,iln(0)),_Mt=jSt,BMt=KSt,qMt=qSt,DMt=new XA(cSt,f5n),FMt=ISt,HMt=BSt,RMt=uSt,KMt=hSt}function PMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function IMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function CMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function OMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function AMn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Vi())||t<0)throw Hp(new Ay(u8n+t+o8n+r));if(e>=r||e<0)throw Hp(new Ay(s8n+e+o8n+r));return t!=e?(c=n.Ti(e),n.Hi(t,c),i=c):i=n.Oi(e),i}function $Mn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Ug();e;e=e.Ug()){if(++t>GQn)return $Mn(e);if(i=e,e==n)throw Hp(new Fy("There is a cycle in the containment hierarchy of "+n))}return i}function LMn(n){var t,e,i;for(i=new $an(FWn,"[","]"),e=n.Kc();e.Ob();)b6(i,GC(t=e.Pb())===GC(n)?"(this Collection)":null==t?zWn:Bbn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function NMn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(e+1),33)):i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(0),33));return i}function xMn(n,t){var e;t!=n.a?(e=null,n.a&&(e=BB(n.a,49).ih(n,4,GOt,e)),t&&(e=BB(t,49).gh(n,4,GOt,e)),(e=Jhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,t,t))}function DMn(n,t){var e;t!=n.e?(n.e&&_6(xW(n.e),n),t&&(!t.b&&(t.b=new Tp(new xm)),YR(t.b,n)),(e=Qkn(n,t,null))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function RMn(n){var t,e,i;for(e=n.length,i=0;i<e&&(b1(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(b1(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?n.substr(i,t-i):n}function KMn(n,t){var i;i=t.o,dA(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function _Mn(){_Mn=O,$st=Pun(Gk(FCt,1),YZn,61,0,[(kUn(),sCt),oCt,SCt]),Ast=Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt,ICt]),Lst=Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt,sCt]),Nst=Pun(Gk(FCt,1),YZn,61,0,[ICt,sCt,oCt])}function FMn(n,t,e,i){var r,c,a,u,o;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(o=n.b,r=c.j,u=null;r!=a.j;)u=0==t?Mln(r):Eln(r),DH(i,UR(zgn(r,o.d[r.g],e),zgn(u,o.d[u.g],e))),r=u}function BMn(n,t,e,i){var r,c,a,u,o;return u=BB((a=qyn(n.a,t,e)).a,19).a,c=BB(a.b,19).a,i&&(o=BB(mMn(t,(hWn(),Elt)),10),r=BB(mMn(e,Elt),10),o&&r&&(t4(n.b,o,r),u+=n.b.i,c+=n.b.e)),u>c}function HMn(n){var t,e,i,r,c,a,u,o;for(this.a=rvn(n),this.b=new Np,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Np,WB(this.b,c),u=0,o=(a=t).length;u<o;++u)WB(c,new t_(a[u].j))}function qMn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=bWn(n.d,i,r),c+=ZX(n.a,i,(kUn(),oCt)),c+=ZX(n.a,r,ICt)):c=C9(n.a,i,r)),n.c[t]&&(c+=L6(n.a,i)),c}function GMn(n,t,e,i,r){var c,a,u,o;for(o=null,u=new Wb(i);u.a<u.c.c.length;)if((a=BB(n0(u),441))!=e&&-1!=E7(a.e,r,0)){o=a;break}SZ(c=W5(r),e.b),MZ(c,o.b),JCn(n.a,r,new L_(c,t,e.f))}function zMn(n){for(;0!=n.g.c&&0!=n.d.c;)FD(n.g).c>FD(n.d).c?(n.i+=n.g.c,gdn(n.d)):FD(n.d).c>FD(n.g).c?(n.e+=n.d.c,gdn(n.g)):(n.i+=qq(n.g),n.e+=qq(n.d),gdn(n.g),gdn(n.d))}function UMn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new zZ((O6(),Tyt),t,c,1),new zZ(Tyt,c,a,1),r=new Wb(e);r.a<r.c.c.length;)(i=BB(n0(r),112))!=c&&i!=t&&i!=a&&(gHn(n.a,i,t),gHn(n.a,i,a))}function XMn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=K3n*n.b+.9*t,n.f=K3n*n.b+.9*i):(n.b=.5*(t+r),n.g=K3n*n.b+.9*r,n.f=K3n*n.b+.9*t)}function WMn(){function n(){return(new Date).getTime()}SWn={},!Array.isArray&&(Array.isArray=function(n){return"[object Array]"===Object.prototype.toString.call(n)}),!Date.now&&(Date.now=n)}function VMn(n,t){var e,i;i=BB(mMn(t,(HXn(),ept)),98),hon(t,(hWn(),ylt),i),(e=t.e)&&(JT(new Rq(null,new w1(e.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(e.b,16)),new mt),new Kw(n)))}function QMn(n){var t,i,r,c;if(gA(BB(mMn(n.b,(HXn(),Udt)),103)))return 0;for(t=0,r=new Wb(n.a);r.a<r.c.c.length;)(i=BB(n0(r),10)).k==(uSn(),Iut)&&(c=i.o.a,t=e.Math.max(t,c));return t}function YMn(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 1:hon(n,kgt,(Tbn(),Blt));break;case 2:hon(n,kgt,(Tbn(),Hlt));break;case 3:hon(n,kgt,(Tbn(),_lt));break;case 4:hon(n,kgt,(Tbn(),Flt))}}function JMn(){JMn=O,cft=new $P(QZn,0),eft=new $P(cJn,1),aft=new $P(aJn,2),rft=new $P("LEFT_RIGHT_CONSTRAINT_LOCKING",3),ift=new $P("LEFT_RIGHT_CONNECTION_LOCKING",4),tft=new $P(q1n,5)}function ZMn(n,t,i){var r,c,a,u,o,s,h;o=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>o&&(s=o/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),u=e.Math.min(s,h),n.a+=u*(t.a-n.a),n.b+=u*(t.b-n.b)}function nSn(n,t,e,i,r){var c,a;for(a=!1,c=BB(xq(e.b,0),33);hBn(n,t,c,i,r)&&(a=!0,cEn(e,c),0!=e.b.c.length);)c=BB(xq(e.b,0),33);return 0==e.b.c.length&&Tkn(e.j,e),a&&Gmn(t.q),a}function tSn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(cNn(n,i,r=BB(b3(c),8)))return!0;i=r}return!!cNn(n,i,e)}function eSn(n,t,e,i){return 0==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),BK(n.o,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Rj(n,fgn(n),e-bX(n.zh()),t,i)}function iSn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=BB(n.sb,49).ih(n,1,HOt,e)),t&&(e=BB(t,49).gh(n,1,HOt,e)),(e=jfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function rSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need an end point."));e=Ren(t,"x"),Ten(new Kg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new _g(n).a,(kW(i),i))}function cSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need a start point."));e=Ren(t,"x"),Cen(new xg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Dg(n).a,(kW(i),i))}function aSn(n,t){var e,i,r,c,a;for(i=0,c=psn(n).length;i<c;++i)vMn(t);for(a=!Qet&&n.e?Qet?null:n.d:null;a;){for(e=0,r=psn(a).length;e<r;++e)vMn(t);a=!Qet&&a.e?Qet?null:a.d:null}}function uSn(){uSn=O,Iut=new JS("NORMAL",0),Put=new JS("LONG_EDGE",1),Mut=new JS("EXTERNAL_PORT",2),Cut=new JS("NORTH_SOUTH_PORT",3),Sut=new JS("LABEL",4),Tut=new JS("BREAKING_POINT",5)}function oSn(n){var t,e,i,r;if(t=!1,Lx(n,(hWn(),zft)))for(e=BB(mMn(n,zft),83),r=new Wb(n.j);r.a<r.c.c.length;)J$n(i=BB(n0(r),11))&&(t||(iCn(vW(n)),t=!0),fpn(BB(e.xc(i),306)))}function sSn(n,t,e){var i;OTn(e,"Self-Loop routing",1),i=Vln(t),iO(mMn(t,(I6(),TMt))),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new zi),new Ui),new Xi),new Wi),new eP(n,i)),HSn(e)}function hSn(n){var t,e,i;return i=ATn(n),null!=n.e&&AH(i,n8n,n.e),!!n.k&&AH(i,"type",dx(n.k)),!WE(n.j)&&(e=new Il,rtn(i,N6n,e),t=new cp(e),e5(n.j,t)),i}function fSn(n){var t,e,i,r;for(r=xX((lin(n.gc(),"size"),new Ck),123),i=!0,e=lz(n).Kc();e.Ob();)t=BB(e.Pb(),42),i||(r.a+=FWn),i=!1,uO(xX(uO(r,t.cd()),61),t.dd());return(r.a+="}",r).a}function lSn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),M$(e&SQn,i&SQn,r&PQn)}function bSn(n){if(null==ytt&&(ytt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!ytt.test(n))throw Hp(new Mk(DQn+n+'"'));return parseFloat(n)}function wSn(n){var t,e,i,r;for(t=new Np,vU(e=x8($Nt,ZYn,25,n.a.c.length,16,1),e.length),r=new Wb(n.a);r.a<r.c.c.length;)e[(i=BB(n0(r),121)).d]||(t.c[t.c.length]=i,Ggn(n,i,e));return t}function dSn(n,t){var e,i,r,c;for(c=t.b.j,n.a=x8(ANt,hQn,25,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)l1(i,c.c.length),0==(e=BB(c.c[i],11)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function gSn(){gSn=O,Dht=new CP("ALWAYS_UP",0),xht=new CP("ALWAYS_DOWN",1),Kht=new CP("DIRECTION_UP",2),Rht=new CP("DIRECTION_DOWN",3),Fht=new CP("SMART_UP",4),_ht=new CP("SMART_DOWN",5)}function pSn(n,t){if(n<0||t<0)throw Hp(new _y("k and n must be positive"));if(t>n)throw Hp(new _y("k must be smaller than n"));return 0==t||t==n?1:0==n?0:Mjn(n)/(Mjn(t)*Mjn(n-t))}function vSn(n,t){var e,i,r,c;for(e=new OA(n);null!=e.g||e.c?null==e.g||0!=e.i&&BB(e.g[e.i-1],47).Ob():tZ(e);)if(cL(c=BB(aLn(e),56),160))for(i=BB(c,160),r=0;r<t.length;r++)t[r].og(i)}function mSn(n){var t;return 0!=(64&n.Db)?Yln(n):((t=new fN(Yln(n))).a+=" (height: ",vE(t,n.f),t.a+=", width: ",vE(t,n.g),t.a+=", x: ",vE(t,n.i),t.a+=", y: ",vE(t,n.j),t.a+=")",t.a)}function ySn(n){var t,e,i,r,c,a;for(t=new v4,r=0,c=(i=n).length;r<c;++r)if(null!=Jgn(t,a=yX((e=i[r]).cd()),yX(e.dd())))throw Hp(new _y("duplicate key: "+a));this.b=(SQ(),new Xb(t))}function kSn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],b6(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function jSn(){jSn=O,Knn(),Cct=new $O(oZn,Oct=Rct),iln(1),Ict=new $O(sZn,iln(300)),iln(0),Lct=new $O(hZn,iln(0)),new $p,Nct=new $O(fZn,lZn),new $p,Act=new $O(bZn,5),xct=Rct,$ct=Dct}function ESn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),WB(n.b.b,BB(r.b,81)),WB(n.b.a,BB(r.b,81).d)}function TSn(n,t){var e;if(null!=t&&!n.c.Yj().wj(t))throw e=cL(t,56)?BB(t,56).Tg().zb:nE(tsn(t)),Hp(new Ky(r6n+n.c.ne()+"'s type '"+n.c.Yj().ne()+"' does not permit a value of type '"+e+"'"))}function MSn(n,t,e){var i,r;for(r=new M2(n.b,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),GC(mMn(i=BB(r.d.Xb(r.c=r.b++),70),(hWn(),vlt)))===GC(t)&&(OPn(i.n,vW(n.c.i),e),fW(r),WB(t.b,i))}function SSn(n,t){if(t.a)switch(BB(mMn(t.b,(hWn(),ylt)),98).g){case 0:case 1:lEn(t);case 2:JT(new Rq(null,new w1(t.d,16)),new Li),oAn(n.a,t)}else JT(new Rq(null,new w1(t.d,16)),new Li)}function PSn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=Wrn(n,new Ec)),Gy(n.k)/(n.b*(null==n.g&&(n.g=Xrn(n,new jc)),Gy(n.g))))),t=dG(fan(e.Math.round(i))),t=e.Math.min(t,n.f)}function ISn(){gcn(),LR.call(this),this.j=(kUn(),PCt),this.a=new Gj,new fm,this.f=(lin(2,AVn),new J6(2)),this.e=(lin(4,AVn),new J6(4)),this.g=(lin(4,AVn),new J6(4)),this.b=new hP(this.e,this.g)}function CSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Ilt))))&&(e=t.c.i,(n!=(Tbn(),_lt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Flt)}function OSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Ilt))))&&(e=t.d.i,(n!=(Tbn(),Blt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Hlt)}function ASn(n,t){var e,i,r,c,a,u,o;for(a=n.d,o=n.o,u=new UV(-a.b,-a.d,a.b+o.a+a.c,a.d+o.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&IPn(u,e.i);a.b=-u.c,a.d=-u.d,a.c=u.b-a.b-o.a,a.a=u.a-a.d-o.b}function $Sn(){$Sn=O,iTt=new MI("CENTER_DISTANCE",0),rTt=new MI("CIRCLE_UNDERLAP",1),uTt=new MI("RECTANGLE_UNDERLAP",2),cTt=new MI("INVERTED_OVERLAP",3),aTt=new MI("MINIMUM_ROOT_DISTANCE",4)}function LSn(n){var t,e,i,r;if(KDn(),null==n)return null;for(i=n.length,t=x8(ONt,WVn,25,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=YLt[r>>4],t[2*e+1]=YLt[15&r];return Bdn(t,0,t.length)}function NSn(n){var t;switch(nV(),n.c.length){case 0:return Bnt;case 1:return CH((t=BB(JIn(new Wb(n)),42)).cd(),t.dd());default:return new hy(BB(Qgn(n,x8(Hnt,kVn,42,n.c.length,0,1)),165))}}function xSn(n){var t,e,i,r,c;for(t=new Lp,e=new Lp,d3(t,n),d3(e,n);e.b!=e.c;)for(c=new Wb(BB(dU(e),37).a);c.a<c.c.c.length;)(r=BB(n0(c),10)).e&&(d3(t,i=r.e),d3(e,i));return t}function DSn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),xut));case 2:return KB(n.j,(gcn(),Lut));case 3:return KB(n.j,(gcn(),Rut));case 4:return KB(n.j,(gcn(),Kut));default:return SQ(),SQ(),set}}function RSn(n,t){var e,i,r;e=sH(t,n.e),i=BB(RX(n.g.f,e),19).a,r=n.a.c.length-1,0!=n.a.c.length&&BB(xq(n.a,r),287).c==i?(++BB(xq(n.a,r),287).a,++BB(xq(n.a,r),287).b):WB(n.a,new Gx(i))}function KSn(n,t,e){var i,r;return 0!=(i=SRn(n,t,e))?i:Lx(t,(hWn(),wlt))&&Lx(e,wlt)?((r=E$(BB(mMn(t,wlt),19).a,BB(mMn(e,wlt),19).a))<0?uKn(n,t,e):r>0&&uKn(n,e,t),r):COn(n,t,e)}function _Sn(n,t,e){var i,r,c,a;if(0!=t.b){for(i=new YT,a=spn(t,0);a.b!=a.d.c;)Frn(i,xun(c=BB(b3(a),86))),(r=c.e).a=BB(mMn(c,(qqn(),gkt)),19).a,r.b=BB(mMn(c,pkt),19).a;_Sn(n,i,mcn(e,i.b/n.a|0))}}function FSn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(z1(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=cHn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function BSn(n,t,e){OTn(e,"Recursive Graph Layout",hDn(n,t,!0)),vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new $f])),P8(t,(sWn(),mPt))||vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new gu])),lXn(n,t,null,e),HSn(e)}function HSn(n){var t;if(null==n.p)throw Hp(new Fy("The task has not begun yet."));n.b||(n.k&&($T(),t=cbn(fan(Date.now()),VVn),n.q=1e-9*j2(ibn(t,n.o))),n.c<n.r&&qin(n,n.r-n.c),n.b=!0)}function qSn(n){var t,e,i;for(DH(i=new km,new xI(n.j,n.k)),e=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));e.e!=e.i.gc();)DH(i,new xI((t=BB(kpn(e),469)).a,t.b));return DH(i,new xI(n.b,n.c)),i}function GSn(n,t,e,i,r){var c,a,u,o;if(r)for(o=((c=new hz(r.a.length)).b-c.a)*c.c<0?(eS(),MNt):new XL(c);o.Ob();)u=x2(r,BB(o.Pb(),19).a),D_n((a=new hQ(n,t,e,i)).a,a.b,a.c,a.d,u)}function zSn(n,t){var e;if(GC(n)===GC(t))return!0;if(cL(t,21)){e=BB(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(cL(i=lun(i),173)||cL(i,205))return!1;throw Hp(i)}}return!1}function USn(n,t){var i;WB(n.d,t),i=t.rf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function XSn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function WSn(n,t,e,i,r){if(i<t||r<e)throw Hp(new _y("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function VSn(n){if(cL(n,149))return MNn(BB(n,149));if(cL(n,229))return Zbn(BB(n,229));if(cL(n,23))return hSn(BB(n,23));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[n])))))}function QSn(n,t,e,i,r){var c,a,u;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)aHn(e,i,n,0,t),a=t;else{for(u=32-r,c&=e[a]<<u==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<u;n[a]=e[a+i]>>>r,++a}return c}function YSn(n,t,e,i){var r,c;if(t.k==(uSn(),Put))for(c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if((r=BB(U5(c),17)).c.i.k==Put&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function JSn(n,t){var e,i,r,c;return t&=63,e=n.h&PQn,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),M$(i&SQn,r&SQn,c&PQn)}function ZSn(n,t,e,i){var r;this.b=i,this.e=n==(oin(),Amt),r=t[e],this.d=kq($Nt,[sVn,ZYn],[177,25],16,[r.length,r.length],2),this.a=kq(ANt,[sVn,hQn],[48,25],15,[r.length,r.length],2),this.c=new zEn(t,e)}function nPn(n){var t,e,i;for(n.k=new o1((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,n.j.c.length),i=new Wb(n.j);i.a<i.c.c.length;)t=(e=BB(n0(i),113)).d.j,JCn(n.k,t,e);n.e=iNn(gz(n.k))}function tPn(n,t){var e,i,r;TU(n.d,t),e=new ka,VW(n.c,t,e),e.f=Phn(t.c),e.a=Phn(t.d),e.d=(gxn(),(r=t.c.i.k)==(uSn(),Iut)||r==Tut),e.e=(i=t.d.i.k)==Iut||i==Tut,e.b=t.c.j==(kUn(),ICt),e.c=t.d.j==oCt}function ePn(n){var t,e,i,r,c;for(c=DWn,r=DWn,i=new Wb(kbn(n));i.a<i.c.c.length;)t=(e=BB(n0(i),213)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==DWn&&(r=-1),c==DWn&&(c=-1),new rC(iln(r),iln(c))}function iPn(n,t){var i,r,c;return c=ZJn,qpn(),r=Zrt,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=nct),(i=e.Math.abs(n.a))<c&&(c=i,r=tct),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Jrt),r}function rPn(n,t){var e,i,r;for(e=t.a.o.a,r=new Sb(new s1(vW(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(Px(r.b<r.d.gc()),(i=BB(r.d.Xb(r.c=r.b++),29)).c.a>=e)return hPn(n,t,i.p),!0;return!1}function cPn(n){var t;return 0!=(64&n.Db)?mSn(n):(t=new lN(Z5n),!n.a||oO(oO((t.a+=' "',t),n.a),'"'),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function aPn(n,t,e){var i,r,c,a,u;for(u=axn(n.e.Tg(),t),r=BB(n.g,119),i=0,a=0;a<n.i;++a)if(c=r[a],u.rl(c.ak())){if(i==e)return fDn(n,a),ZM(),BB(t,66).Oj()?c:c.dd();++i}throw Hp(new Ay(e9n+e+o8n+i))}function uPn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return wWn(),wWn(),sNt;for(i=OXn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(wWn(),wWn(),tqn(e=new r$(1),i),i=e),tqn(e,OXn(n));return i}function oPn(n,t,e){return n<0||n>e?dIn(n,e,"start index"):t<0||t>e?dIn(t,e,"end index"):$Rn("end index (%s) must not be less than start index (%s)",Pun(Gk(Ant,1),HWn,1,5,[iln(t),iln(n)]))}function sPn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].jm()&&(t=TG(t,c)):c[0].jm()}catch(a){if(!cL(a=lun(a),78))throw Hp(a);e=a,Dk(),yY(cL(e,477)?BB(e,477).ae():e)}}return t}function hPn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&wHn(t.a,ian(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=BB(mMn(t.a,(hWn(),Plt)),15).Kc();r.Ob();)hon(BB(r.Pb(),70),tst,(hN(),!0))}function fPn(n,t){var i,r,c;c=qNn(t),hon(t,(hWn(),llt),c),c&&(r=DWn,AY(n.f,c)&&(r=BB(qC(AY(n.f,c)),19).a),qy(TD(mMn(i=BB(xq(t.g,0),17),Ilt)))||VW(n,c,iln(e.Math.min(BB(mMn(i,wlt),19).a,r))))}function lPn(n,t,e){var i,r,c,a;for(t.p=-1,a=xwn(t,(ain(),qvt)).Kc();a.Ob();)for(r=new Wb(BB(a.Pb(),11).g);r.a<r.c.c.length;)t!=(c=(i=BB(n0(r),17)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&lPn(n,c,e));t.p=0}function bPn(n){var t;this.c=new YT,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new YK(t=BB(Vj(jMt),9),BB(SR(t,t.length),9),0),this.g=n.f}function wPn(n){var t,e,i,r;for(t=xX(oO(new lN("Predicates."),"and"),40),e=!0,r=new Sb(n);r.b<r.d.gc();)Px(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function dPn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)l1(t+i,n.c.length),c=BB(n.c[t+i],11),c5(n,t+i,(l1(e-i-1,n.c.length),BB(n.c[e-i-1],11))),l1(e-i-1,n.c.length),n.c[e-i-1]=c}function gPn(n,t,e){var i,r,c,a,u,o,s;u=(c=n.d.p).e,o=c.r,n.g=new QK(o),i=(a=n.d.o.c.p)>0?u[a-1]:x8(Out,a1n,10,0,0,1),r=u[a],s=a<u.length-1?u[a+1]:x8(Out,a1n,10,0,0,1),t==e-1?uZ(n.g,r,s):uZ(n.g,i,r)}function pPn(n){var t;this.j=new Np,this.f=new Rv,this.b=new YK(t=BB(Vj(FCt),9),BB(SR(t,t.length),9),0),this.d=x8(ANt,hQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.g=n}function vPn(n,t){var e,i,r;if(0!=t.c.length){for(e=TMn(n,t),r=!1;!e;)E$n(n,t,!0),r=!0,e=TMn(n,t);r&&E$n(n,t,!1),i=Dun(t),n.b&&n.b.lg(i),n.a=$hn(n,(l1(0,t.c.length),BB(t.c[0],33))),vPn(n,i)}}function mPn(n,t){var e,i,r;if(i=itn(n.Tg(),t),(e=t-n.Ah())<0){if(!i)throw Hp(new _y(o6n+t+s6n));if(!i.Ij())throw Hp(new _y(r6n+i.ne()+c6n));(r=n.Yg(i))>=0?n.Bh(r):cCn(n,i)}else qfn(n,e,i)}function yPn(n){var t,e;if(e=null,t=!1,cL(n,204)&&(t=!0,e=BB(n,204).a),t||cL(n,258)&&(t=!0,e=""+BB(n,258).a),t||cL(n,483)&&(t=!0,e=""+BB(n,483).a),!t)throw Hp(new Ly(H6n));return e}function kPn(n,t){var e,i;if(n.f){for(;t.Ob();)if(cL(i=(e=BB(t.Pb(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Ub(),!0;return!1}return t.Ob()}function jPn(n,t){var e,i;if(n.f){for(;t.Sb();)if(cL(i=(e=BB(t.Ub(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Pb(),!0;return!1}return t.Sb()}function EPn(n,t,e){var i,r,c,a,u,o;for(o=axn(n.e.Tg(),t),i=0,u=n.i,r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())){if(e==i)return a;++i,u=a+1}if(e==i)return u;throw Hp(new Ay(e9n+e+o8n+i))}function TPn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new bA,i=new Wb(n.f);i.a<i.c.c.length;)r=BB(n0(i),70).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function MPn(n,t,e){var i,r,c;for(r=new oz(ZL(hbn(e).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||!b5(i)&&i.c.i.c==i.d.i.c||(c=zLn(n,i,e,new um)).c.length>1&&(t.c[t.c.length]=c)}function SPn(n){var t,e,i;for(Frn(e=new YT,n.o),i=new om;0!=e.b;)WUn(n,t=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),508),!0)&&WB(i.a,t);for(;0!=i.a.c.length;)WUn(n,t=BB(thn(i),508),!1)}function PPn(){PPn=O,kMt=new $I(hJn,0),wMt=new $I("BOOLEAN",1),vMt=new $I("INT",2),yMt=new $I("STRING",3),dMt=new $I("DOUBLE",4),gMt=new $I("ENUM",5),pMt=new $I("ENUMSET",6),mMt=new $I("OBJECT",7)}function IPn(n,t){var i,r,c,a,u;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(u=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=u,u=i),xH(n,r,a,c-r,u-a)}function CPn(){CPn=O,J$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,d7n,g7n,p7n,v7n,m7n,n8n]),Y$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"empty",d7n,K9n,"elementOnly"]),nLt=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"preserve","replace",y7n]),Z$t=new SH}function OPn(n,t,e){var i,r,c;if(t!=e){i=t;do{UR(n,i.c),(r=i.e)&&(_x(n,(c=i.d).b,c.d),UR(n,r.n),i=vW(r))}while(r);i=e;do{XR(n,i.c),(r=i.e)&&(Bx(n,(c=i.d).b,c.d),XR(n,r.n),i=vW(r))}while(r)}}function APn(n,t,e,i){var r,c,a,u,o;if(i.f.c+i.g.c==0)for(u=0,o=(a=n.a[n.c]).length;u<o;++u)VW(i,c=a[u],new kcn(n,c,e));return(r=BB(qC(AY(i.f,t)),663)).b=0,r.c=r.f,0==r.c||Tb(BB(xq(r.a,r.b),287)),r}function $Pn(){$Pn=O,Zst=new jP("MEDIAN_LAYER",0),tht=new jP("TAIL_LAYER",1),Jst=new jP("HEAD_LAYER",2),nht=new jP("SPACE_EFFICIENT_LAYER",3),eht=new jP("WIDEST_LAYER",4),Yst=new jP("CENTER_LAYER",5)}function LPn(n){switch(n.g){case 0:case 1:case 2:return kUn(),sCt;case 3:case 4:case 5:return kUn(),SCt;case 6:case 7:case 8:return kUn(),ICt;case 9:case 10:case 11:return kUn(),oCt;default:return kUn(),PCt}}function NPn(n,t){var e;return 0!=n.c.length&&(e=tdn((l1(0,n.c.length),BB(n.c[0],17)).c.i),BZ(),e==(bvn(),fvt)||e==hvt||o5($V(new Rq(null,new w1(n,16)),new Fc),new ig(t)))}function xPn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new P6),DH(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=BB(c.Pb(),188)).b!=t&&xPn(n,r.b,i),r.c!=t&&xPn(n,r.c,i),DH(i.a,r);return i}return null}function DPn(){DPn=O,Qyt=new lI("ROOT_PROC",0),Uyt=new lI("FAN_PROC",1),Wyt=new lI("NEIGHBORS_PROC",2),Xyt=new lI("LEVEL_HEIGHT",3),Vyt=new lI("NODE_POSITION_PROC",4),zyt=new lI("DETREEIFYING_PROC",5)}function RPn(n,t){if(cL(t,239))return zA(n,BB(t,33));if(cL(t,186))return UA(n,BB(t,118));if(cL(t,439))return GA(n,BB(t,202));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function KPn(n,t,e){var i,r;if(this.f=n,w6(e,r=(i=BB(RX(n.b,t),283))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)TZ(this);else for(this.c=i?i.b:null;e-- >0;)EZ(this);this.b=t,this.a=null}function _Pn(n,t){var e,i;t.a?zNn(n,t):(!!(e=BB(kK(n.b,t.b),57))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=BB(yK(n.b,t.b),57))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),MN(n.b,t.b))}function FPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((mdn(),_Ct))&&yRn(n,t),i=Xpn(n,t),PDn(n,t)==(cpn(),BIt)&&(i+=2*n.w),e.a.a=i}function BPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((mdn(),_Ct))&&kRn(n,t),i=Wpn(n,t),PDn(n,t)==(cpn(),BIt)&&(i+=2*n.w),e.a.b=i}function HPn(n,t){var e,i,r,c;for(c=new Np,i=new Wb(t);i.a<i.c.c.length;)WB(c,new RS(e=BB(n0(i),65),!0)),WB(c,new RS(e,!1));my((r=new hY(n)).a.a),e2(c,n.b,new Jy(Pun(Gk(oit,1),HWn,679,0,[r])))}function qPn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;return u=n.a,f=n.b,o=t.a,l=t.b,s=e.a,b=e.b,new xI(((c=u*l-f*o)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(u-o))/(r=(u-o)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function GPn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new oz(ZL(lbn(t).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||(r=e.d.i,n.a[r.p]?WB(n.b,e):GPn(n,r));n.a[t.p]=!1}}function zPn(n,t,e){var i;switch(i=0,BB(mMn(t,(HXn(),kgt)),163).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return Lx(t,(hWn(),wlt))&&(i+=BB(mMn(t,wlt),19).a),i}function UPn(n,t,e){var i,r,c;for(e.zc(t,n),WB(n.n,t),c=n.p.eg(t),t.j==n.p.fg()?Obn(n.e,c):Obn(n.j,c),rX(n),r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(r);)i=BB(U5(r),11),e._b(i)||UPn(n,i,e)}function XPn(n){var t,e;return BB(ZAn(n,(sWn(),KSt)),21).Hc((mdn(),DCt))?(e=BB(ZAn(n,qSt),21),t=new wA(BB(ZAn(n,BSt),8)),e.Hc((n_n(),GCt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new Gj}function WPn(n){var t,e,i;if(!n.b){for(i=new Io,e=new ax(RBn(n));e.e!=e.i.gc();)0!=((t=BB(jpn(e),18)).Bb&h6n)&&f9(i,t);chn(i),n.b=new NO((BB(Wtn(QQ((QX(),t$t).o),8),18),i.i),i.g),P5(n).b&=-9}return n.b}function VPn(n,t){var e,i,r,c,a,u;a=BB(Emn(gz(t.k),x8(FCt,YZn,61,2,0,1)),122),Zmn(n,u=t.g,e=o3(t,a[0]),i=u3(t,a[1]))<=Zmn(n,u,r=o3(t,a[1]),c=u3(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function QPn(n,t,e){var i,r,c;for(OTn(e,"Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&LDn(n,new bg(r),e),HSn(e)}function YPn(n){var t,e,i,r;return RHn(),t=-1==(i=GO(n,YTn(35)))?n:n.substr(0,i),e=-1==i?null:n.substr(i+1),(r=V3(EAt,t))?null!=e&&(r=Isn(r,(kW(e),e))):(r=WXn(t),a5(EAt,t,r),null!=e&&(r=Isn(r,e))),r}function JPn(n){var t,e,i,r,c,a,u;if(SQ(),cL(n,54))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n._c(c,n.Xb(r)),n._c(r,t);else for(e=n.Yc(),a=n.Zc(n.gc());e.Tb()<a.Vb();)i=e.Pb(),u=a.Ub(),e.Wb(u),a.Wb(i)}function ZPn(n,t){var e,i,r;OTn(t,"End label pre-processing",1),e=Gy(MD(mMn(n,(HXn(),jpt)))),i=Gy(MD(mMn(n,Spt))),r=gA(BB(mMn(n,Udt),103)),JT(wnn(new Rq(null,new w1(n.b,16)),new he),new D_(e,i,r)),HSn(t)}function nIn(n,t){var e,i,r,c,a,u;for(u=0,d3(c=new Lp,t);c.b!=c.c;)for(u+=syn((a=BB(dU(c),214)).d,a.e),r=new Wb(a.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(u+=nIn(n,e));return u}function tIn(n,t,i){var r,c;_an(this),t==(dJ(),Lyt)?TU(this.r,n.c):TU(this.w,n.c),TU(i==Lyt?this.r:this.w,n.d),tPn(this,n),XMn(this,r=Phn(n.c),c=Phn(n.d),c),this.o=(gxn(),e.Math.abs(r-c)<.2)}function eIn(n,t,e){var i,r,c,a,u;if(null!=(a=BB(yan(n.a,8),1936)))for(r=0,c=a.length;r<c;++r)null.jm();i=e,0==(1&n.a.Db)&&(u=new uW(n,e,t),i.ui(u)),cL(i,672)?BB(i,672).wi(n.a):i.ti()==n.a&&i.vi(null)}function iIn(){var n;return ZLt?BB($$n((WM(),zAt),S7n),1945):(sUn(),n=BB(cL(SJ((WM(),zAt),S7n),586)?SJ(zAt,S7n):new zW,586),ZLt=!0,gXn(n),pWn(n),VW((VM(),ZAt),n,new Ks),Tyn(n),mZ(zAt,S7n,n),n)}function rIn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function cIn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function aIn(n){var t,e,i;for(_$n(n),i=new Np,e=new Wb(n.a.a.b);e.a<e.c.c.length;)WB(i,new fP(t=BB(n0(e),81),!0)),WB(i,new fP(t,!1));nmn(n.c),i2(i,n.b,new Jy(Pun(Gk(Jat,1),HWn,369,0,[n.c]))),vAn(n)}function uIn(n){var t,e,i,r;for(e=new xp,r=new Wb(n.d);r.a<r.c.c.length;)i=BB(n0(r),181),t=BB(i.We((hWn(),Uft)),17),AY(e.f,t)||VW(e,t,new TQ(t)),WB(BB(qC(AY(e.f,t)),456).b,i);return new t_(new Ob(e))}function oIn(n,t){var e,i,r,c,a;for(i=new d1(n.j.c.length),e=null,c=new Wb(n.j);c.a<c.c.c.length;)(r=BB(n0(c),11)).j!=e&&(i.b==i.c||F$n(i,e,t),o4(i),e=r.j),(a=mAn(r))&&w3(i,a);i.b==i.c||F$n(i,e,t)}function sIn(n,t){var e,i;for(i=new M2(n.b,0);i.b<i.d.gc();)Px(i.b<i.d.gc()),e=BB(i.d.Xb(i.c=i.b++),70),BB(mMn(e,(HXn(),Ydt)),272)==(Rtn(),UPt)&&(fW(i),WB(t.b,e),Lx(e,(hWn(),Uft))||hon(e,Uft,n))}function hIn(n){var t,i,r;for(t=F3(new oz(ZL(lbn(n).a.Kc(),new h))),i=new oz(ZL(fbn(n).a.Kc(),new h));dAn(i);)r=F3(new oz(ZL(lbn(BB(U5(i),17).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return iln(t)}function fIn(n,t,e){var i,r,c,a;for(OTn(e,"Processor arrange node",1),r=null,c=new YT,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(r=a);r5(c,r,c.c.b,c.c),Yzn(n,c,mcn(e,1)),HSn(e)}function lIn(n,t,e){var i,r,c;i=BB(ZAn(n,(sWn(),hSt)),21),r=0,c=0,t.a>e.a&&(i.Hc((wEn(),WMt))?r=(t.a-e.a)/2:i.Hc(QMt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((wEn(),JMt))?c=(t.b-e.b)/2:i.Hc(YMt)&&(c=t.b-e.b)),lMn(n,r,c)}function bIn(n,t,e,i,r,c,a,u,o,s,h,f,l){cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=a,$ln(n,u),Nln(n,o),Aln(n,s),Lln(n,h),nln(n,f),qln(n,l),Yfn(n,!0),Len(n,r),n.ok(c),Chn(n,t),null!=i&&(n.i=null,arn(n,i))}function wIn(n){var t,e;if(n.f){for(;n.n>0;){if(cL(e=(t=BB(n.k.Xb(n.n-1),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;--n.n}return!1}return n.n>0}function dIn(n,t,e){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,[e,iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must not be greater than size (%s)",Pun(Gk(Ant,1),HWn,1,5,[e,iln(n),iln(t)]))}function gIn(n,t,e,i,r,c){var a,u,o;if(i-e<7)$bn(t,e,i,c);else if(gIn(t,n,u=e+r,o=u+((a=i+r)-u>>1),-r,c),gIn(t,n,o,a,-r,c),c.ue(n[o-1],n[o])<=0)for(;e<i;)$X(t,e++,n[u++]);else Gfn(n,u,o,a,t,e,i,c)}function pIn(n,t){var e,i,r;for(r=new Np,i=new Wb(n.c.a.b);i.a<i.c.c.length;)e=BB(n0(i),57),t.Lb(e)&&(WB(r,new OS(e,!0)),WB(r,new OS(e,!1)));Zvn(n.e),e2(r,n.d,new Jy(Pun(Gk(oit,1),HWn,679,0,[n.e])))}function vIn(n,t){var e,i,r,c,a,u,o;for(o=t.d,r=t.b.j,u=new Wb(o);u.a<u.c.c.length;)for(a=BB(n0(u),101),c=x8($Nt,ZYn,25,r.c.length,16,1),VW(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function mIn(n,t){for(n.r=new Fan(n.p),Jl(n.r,n),Frn(n.r.j,n.j),yQ(n.j),DH(n.j,t),DH(n.r.e,t),rX(n),rX(n.r);0!=n.f.c.length;)G$(BB(xq(n.f,0),129));for(;0!=n.k.c.length;)G$(BB(xq(n.k,0),129));return n.r}function yIn(n,t,e){var i,r,c;if(r=itn(n.Tg(),t),(i=t-n.Ah())<0){if(!r)throw Hp(new _y(o6n+t+s6n));if(!r.Ij())throw Hp(new _y(r6n+r.ne()+c6n));(c=n.Yg(r))>=0?n.sh(c,e):TLn(n,r,e)}else Lbn(n,i,r,e)}function kIn(n){var t,e,i,r;if(e=BB(n,49).qh())try{if(i=null,(t=$$n((WM(),zAt),M_n(_bn(e))))&&(r=t.rh())&&(i=r.Wk(Xy(e.e))),i&&i!=n)return kIn(i)}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}return n}function jIn(n,t,e){var i,r,c,a;if(a=null==t?0:n.b.se(t),0==(r=null==(i=n.a.get(a))?new Array:i).length)n.a.set(a,r);else if(c=hhn(n,t,r))return c.ed(e);return $X(r,r.length,new PS(t,e)),++n.c,oY(n.b),null}function EIn(n,t){var e;return h2(n.a),IU(n.a,(Prn(),Qkt),Qkt),IU(n.a,Ykt,Ykt),dq(e=new B2,Ykt,(Ibn(),ejt)),GC(ZAn(t,(Uyn(),Sjt)))!==GC((Hsn(),sjt))&&dq(e,Ykt,njt),dq(e,Ykt,tjt),aA(n.a,e),$qn(n.a,t)}function TIn(n){if(!n)return lk(),htt;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=ftt[typeof t];return i?i(t):khn(typeof t)}return n instanceof Array||n instanceof e.Array?new Tl(n):new Pl(n)}function MIn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SCn(r),c.a=MCn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}_Fn(r),GFn(r)}function SIn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SCn(r),c.a=MCn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}_Fn(r),GFn(r)}function PIn(n,t){var e,i,r,c,a;if(!t.dc())if(r=BB(t.Xb(0),128),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=vyn(t,e))&&(i=BB(c.a,19).a,kxn(n,r,a=BB(c.b,128),e,i,t),e=i+1,r=a);else kxn(n,r,r,1,0,t)}function IIn(n){var t,e,i,r;for(m$(r=new t_(n.d),new zr),kDn(),t=Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst]),e=0,i=new Wb(r);i.a<i.c.c.length;)IOn(BB(n0(i),101),t[e%t.length]),++e}function CIn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(r=BB(b3(c),8),!Dcn(n,i)||!Dcn(n,r))return!1;i=r}return!(!Dcn(n,i)||!Dcn(n,e))}function OIn(n,t){var e,i,r,c,a;return e=Ren(a=n,"x"),nnn(new qg(t).a,e),i=Ren(a,"y"),tnn(new Gg(t).a,i),r=Ren(a,I6n),enn(new zg(t).a,r),c=Ren(a,P6n),inn(new Ug(t).a,c),c}function AIn(n,t){dRn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function $In(n,t){var e,i;if(i=0,t.length>0)try{i=l_n(t,_Vn,DWn)}catch(r){throw cL(r=lun(r),127)?Hp(new L7(r)):Hp(r)}return!n.a&&(n.a=new Sp(n)),i<(e=n.a).i&&i>=0?BB(Wtn(e,i),56):null}function LIn(n,t){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,["index",iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must be less than size (%s)",Pun(Gk(Ant,1),HWn,1,5,["index",iln(n),iln(t)]))}function NIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function xIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function DIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function RIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function KIn(n,t){var e,i,r,c,a,u;for(e=n.b.c.length,r=xq(n.b,t);2*t+1<e&&(u=c=2*t+1,(a=c+1)<e&&n.a.ue(xq(n.b,a),xq(n.b,c))<0&&(u=a),i=u,!(n.a.ue(r,xq(n.b,i))<0));)c5(n.b,t,xq(n.b,i)),t=i;c5(n.b,t,r)}function _In(n,t,i,r,c,a){var u,o,s,h,f;for(GC(n)===GC(i)&&(n=n.slice(t,t+c),t=0),s=i,o=t,h=t+c;o<h;)c=(u=e.Math.min(o+1e4,h))-o,(f=n.slice(o,u)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),o=u,r+=c}function FIn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function BIn(n){var t,e,i,r,c,a,u;if((i=n.a.c.length)>0)for(a=n.c.d,r=kL(XR(new xI((u=n.d.d).a,u.b),a),1/(i+1)),c=new xI(a.a,a.b),e=new Wb(n.a);e.a<e.c.c.length;)(t=BB(n0(e),559)).d.a=c.a,t.d.b=c.b,UR(c,r)}function HIn(n,t,i){var r,c,a,u,o,s;for(s=RQn,a=new Wb(GLn(n.b));a.a<a.c.c.length;)for(c=BB(n0(a),168),o=new Wb(GLn(t.b));o.a<o.c.c.length;)u=BB(n0(o),168),r=Iun(c.a,c.b,u.a,u.b,i),s=e.Math.min(s,r);return s}function qIn(n,t){if(!t)throw Hp(new gv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function GIn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function zIn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function UIn(n){var t,e,i,r;for(r=Lfn(n.d,n.e).Kc();r.Ob();)for(i=BB(r.Pb(),11),e=new Wb(n.e==(kUn(),ICt)?i.e:i.g);e.a<e.c.c.length;)b5(t=BB(n0(e),17))||t.c.i.c==t.d.i.c||(RSn(n,t),++n.f,++n.c)}function XIn(n,t){var e,i;if(t.dc())return SQ(),SQ(),set;for(WB(i=new Np,iln(_Vn)),e=1;e<n.f;++e)null==n.a&&wRn(n),n.a[e]&&WB(i,iln(e));return 1==i.c.length?(SQ(),SQ(),set):(WB(i,iln(DWn)),dBn(t,i))}function WIn(n,t){var e,i,r,c,a,u;e=ckn(t,u=t.c.i.k!=(uSn(),Iut)?t.d:t.c).i,r=BB(RX(n.k,u),121),i=n.i[e.p].a,AK(u.i)<(e.c?E7(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),UNn(aM(cM(uM(rM(new Hv,0),4),c),a))}function VIn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kCn(dnn(e,BB(r.Pb(),19).a))))&&(!t.b&&(t.b=new hK(KOt,t,4,7)),f9(t.b,c))}function QIn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kCn(dnn(e,BB(r.Pb(),19).a))))&&(!t.c&&(t.c=new hK(KOt,t,5,8)),f9(t.c,c))}function YIn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function JIn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=uO(oO(new Ik,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)uO((i.a+=FWn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",Hp(new _y(i.a))}function ZIn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=BB(RX(n.b,t.a),283)).a,t.e?t.e.c=t.c:e.b=t.c,t.c?t.c.e=t.e:e.c=t.e):((e=BB(v6(n.b,t.a),283)).a=0,++n.c),--n.d}function nCn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[3]=t[3]+(e%60/10|0)&QVn,t[4]=t[4]+e%10&QVn,Bdn(t,0,t.length)}function tCn(n,t,e){var i,r;for(i=t.d,r=e.d;i.a-r.a==0&&i.b-r.b==0;)i.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,i.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5}function eCn(n){var t,e,i,r;for(n.g=new Hbn(BB(yX(FCt),290)),i=0,kUn(),e=sCt,t=0;t<n.j.c.length;t++)(r=BB(xq(n.j,t),11)).j!=e&&(i!=t&&mG(n.g,e,new rC(iln(i),iln(t))),e=r.j,i=t);mG(n.g,e,new rC(iln(i),iln(t)))}function iCn(n){var t,e,i,r,c;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)for(r=new Wb(BB(n0(t),29).a);r.a<r.c.c.length;)for((i=BB(n0(r),10)).p=e++,c=new Wb(i.j);c.a<c.c.c.length;)BB(n0(c),11).p=e++}function rCn(n,t,e,i,r){var c,a,u,o;if(t)for(a=t.Kc();a.Ob();)for(o=cRn(BB(a.Pb(),10),(ain(),qvt),e).Kc();o.Ob();)u=BB(o.Pb(),11),(c=BB(qC(AY(r.f,u)),112))||(c=new Fan(n.d),i.c[i.c.length]=c,UPn(c,u,r))}function cCn(n,t){var e,i,r;if(!(r=Fqn((CPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ol(t)}function aCn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=IJ(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):Van(fan(n))}function uCn(n){var t,e,i,r,c,a,u;for(c=new fA,e=new Wb(n);e.a<e.c.c.length;)a=(t=BB(n0(e),129)).a,u=t.b,c.a._b(a)||c.a._b(u)||(r=a,i=u,a.e.b+a.j.b>2&&u.e.b+u.j.b<=2&&(r=u,i=a),c.a.zc(r,c),r.q=i);return c}function oCn(n,t){var e,i,r;return qan(i=new $vn(n),t),hon(i,(hWn(),Vft),t),hon(i,(HXn(),ept),(QEn(),XIt)),hon(i,kdt,(wvn(),OMt)),Bl(i,(uSn(),Mut)),IZ(e=new ISn,i),qIn(e,(kUn(),ICt)),IZ(r=new ISn,i),qIn(r,oCt),i}function sCn(n){switch(n.g){case 0:return new Ny((oin(),Omt));case 1:return new df;case 2:return new jf;default:throw Hp(new _y("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function hCn(n,t){var e,i,r,c;for(n.c[t.p]=!0,WB(n.a,t),c=new Wb(t.j);c.a<c.c.c.length;)for(e=new m6((r=BB(n0(c),11)).b);y$(e.a)||y$(e.b);)i=ngn(r,BB(y$(e.a)?n0(e.a):n0(e.b),17)).i,n.c[i.p]||hCn(n,i)}function fCn(n){var t,i,r,c,a,u,o;for(u=0,i=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));i.e!=i.i.gc();)o=(t=BB(kpn(i),33)).g,c=t.f,r=e.Math.sqrt(o*o+c*c),u=e.Math.max(r,u),a=fCn(t),u=e.Math.max(a,u);return u}function lCn(){lCn=O,rCt=new XI("OUTSIDE",0),eCt=new XI("INSIDE",1),iCt=new XI("NEXT_TO_PORT_IF_POSSIBLE",2),tCt=new XI("ALWAYS_SAME_SIDE",3),nCt=new XI("ALWAYS_OTHER_SAME_SIDE",4),cCt=new XI("SPACE_EFFICIENT",5)}function bCn(n,t,e){var i,r,c,a;return $in(i=K2(n,(tE(),r=new jm,!!e&&nNn(r,e),r),t),R2(t,q6n)),STn(t,i),o$n(t,i),OIn(t,i),c=N2(t,"ports"),PLn((a=new pC(n,i)).a,a.b,c),xon(n,t,i),aun(n,t,i),i}function wCn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[4]=t[4]+(e%60/10|0)&QVn,t[5]=t[5]+e%10&QVn,Bdn(t,0,t.length)}function dCn(n){var t;return t=Pun(Gk(ONt,1),WVn,25,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&QVn,t[5]=t[5]+(n/60|0)%10&QVn,t[7]=t[7]+(n%60/10|0)&QVn,t[8]=t[8]+n%10&QVn,Bdn(t,0,t.length)}function gCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+vz(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function pCn(n,t){var i,r,c;for(c=DWn,r=new Wb(kbn(t));r.a<r.c.c.length;)(i=BB(n0(r),213)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,pCn(n,Nbn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function vCn(n,t){var e,i,r;for(r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.b=(e=i.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),sCt)?-e.rf().b-Gy(MD(e.We(aPt))):Gy(MD(e.We(aPt))):e.Hf()==(kUn(),sCt)?-e.rf().b:0}function mCn(n){var t,e,i,r,c,a,u;for(e=QA(n.e),c=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,u=0;u<n.c;u++){for(i=t,a=0;a<n.d;a++)Wbn(n.e,new UV(i,r,n.a,n.b))&&FRn(n,a,u,!1,!0),i+=n.a;r+=n.b}}function yCn(n){var t,e,i;if(qy(TD(ZAn(n,(sWn(),SSt))))){for(i=new Np,e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)QCn(t=BB(U5(e),79))&&qy(TD(ZAn(t,PSt)))&&(i.c[i.c.length]=t);return i}return SQ(),SQ(),set}function kCn(n){var t;if(t=!1,cL(n,204))return t=!0,BB(n,204).a;if(!t&&cL(n,258)&&BB(n,258).a%1==0)return t=!0,iln(QO(BB(n,258).a));throw Hp(new ek("Id must be a string or an integer: '"+n+"'."))}function jCn(n,t){var e,i,r,c,a,u;for(c=null,r=new rU((!n.a&&(n.a=new Sp(n)),n.a));bOn(r);)if(YBn(a=(e=BB(aLn(r),56)).Tg()),null!=(i=(u=a.o)&&e.mh(u)?pK(uun(u),e.ah(u)):null)&&mK(i,t)){c=e;break}return c}function ECn(n,t,e){var i,r,c,a,u;if(lin(e,"occurrences"),0==e)return(u=BB(lfn(OQ(n.a),t),14))?u.gc():0;if(!(a=BB(lfn(OQ(n.a),t),14)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function TCn(n,t,e){var i,r,c;return lin(e,"oldCount"),lin(0,"newCount"),((i=BB(lfn(OQ(n.a),t),14))?i.gc():0)==e&&(lin(0,"count"),(c=-((r=BB(lfn(OQ(n.a),t),14))?r.gc():0))>0?wk():c<0&&ECn(n,t,-c),!0)}function MCn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=Xvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=Kk(ecn(LV(AV(LU(n.a),new Mn),new Sn)));return a>0?a+n.n.d+n.n.a:0}function SCn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=Kk(ecn(LV(AV(LU(n.a),new En),new Tn)));else{for(t=0,r=0,c=(i=Wvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function PCn(n,t){var i,r,c,a;for(i=(a=BB(oV(n.b,t),124)).a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).c&&(i.a=e.Math.max(i.a,VH(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function ICn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(fRn(),Zct)),19).a-BB(mMn(n,Zct),19).a)?(i=XR(B$(BB(mMn(n,(Mrn(),uat)),8)),BB(mMn(n,oat),8)),r=XR(B$(BB(mMn(t,uat),8)),BB(mMn(t,oat),8)),Pln(i.a*i.b,r.a*r.b)):e}function CCn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(IAn(),$kt)),19).a-BB(mMn(n,$kt),19).a)?(i=XR(B$(BB(mMn(n,(qqn(),Zyt)),8)),BB(mMn(n,nkt),8)),r=XR(B$(BB(mMn(t,Zyt),8)),BB(mMn(t,nkt),8)),Pln(i.a*i.b,r.a*r.b)):e}function OCn(n){var t,e;return(e=new Ik).a+="e_",null!=(t=Xan(n))&&(e.a+=""+t),n.c&&n.d&&(oO((e.a+=" ",e),pyn(n.c)),oO(uO((e.a+="[",e),n.c.i),"]"),oO((e.a+=e1n,e),pyn(n.d)),oO(uO((e.a+="[",e),n.d.i),"]")),e.a}function ACn(n){switch(n.g){case 0:return new pf;case 1:return new vf;case 2:return new gf;case 3:return new mf;default:throw Hp(new _y("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function $Cn(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function LCn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)r=x2(e,BB(c.Pb(),19).a),L6n in r.a||N6n in r.a?sKn(n,r,t):EXn(n,r,t),PL(BB(RX(n.b,Qdn(r)),79))}function NCn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=Ckn(n))&&(ZM(),t.Cj()==E9n)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function xCn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 2:case 3:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function DCn(n,t){var e,i,r,c;if(QXn(n),0!=n.c||123!=n.a)throw Hp(new ak(kWn((u$(),P8n))));if(c=112==t,i=n.d,(e=lx(n.i,125,i))<0)throw Hp(new ak(kWn((u$(),I8n))));return r=fx(n.i,i,e),n.d=e+1,b9(r,c,512==(512&n.e))}function RCn(n){var t;if((t=BB(mMn(n,(HXn(),qdt)),314))==(Oin(),hht))throw Hp(new ck("The hierarchy aware processor "+t+" in child node "+n+" is only allowed if the root node specifies the same hierarchical processor."))}function KCn(n,t){var e,i,r,c;for(G_(),e=null,r=t.Kc();r.Ob();)(i=BB(r.Pb(),128)).o||(WB((c=new PBn(F$(i.a),bH(i.a),null,BB(i.d.a.ec().Kc().Pb(),17))).c,i.a),n.c[n.c.length]=c,e&&WB(e.d,c),e=c)}function _Cn(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){Hin(n,r=Uy((ED(e),e.o+i))),xen(n,r);break}i+="[]"}else Hin(n,r=Uy((ED(t),t.o))),xen(n,r);else Hin(n,null),xen(n,null);n.yk(t)}function FCn(n,t,e,i,r){var c,a,u,o;return GC(o=hD(n,BB(r,56)))!==GC(r)?(u=BB(n.g[e],72),jL(n,e,sTn(n,e,c=Z3(t,o))),mA(n.e)&&(KEn(a=LY(n,9,c.ak(),r,o,i,!1),new N7(n.e,9,n.c,u,c,i,!1)),$7(a)),o):r}function BCn(n,t,e){var i,r,c,a,u,o;for(i=BB(h6(n.c,t),15),r=BB(h6(n.c,e),15),c=i.Zc(i.gc()),a=r.Zc(r.gc());c.Sb()&&a.Sb();)if((u=BB(c.Ub(),19))!=(o=BB(a.Ub(),19)))return E$(u.a,o.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function HCn(n,t){var e,i;try{return X1(n.a,t)}catch(r){if(cL(r=lun(r),32)){try{if(i=l_n(t,_Vn,DWn),e=Vj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!cL(c=lun(c),127))throw Hp(c)}return null}throw Hp(r)}}function qCn(n,t){var e,i,r;if(r=Fqn((CPn(),Z$t),n.Tg(),t))return ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ll(t);throw Hp(new _y(r6n+t.ne()+u6n))}function GCn(){var n;return tS(),Q$t?BB($$n((WM(),zAt),V9n),1939):(RO(Hnt,new Is),nzn(),n=BB(cL(SJ((WM(),zAt),V9n),547)?SJ(zAt,V9n):new UW,547),Q$t=!0,oWn(n),TWn(n),VW((VM(),ZAt),n,new Go),mZ(zAt,V9n,n),n)}function zCn(n,t){var e,i,r,c;n.j=-1,mA(n.e)?(e=n.i,c=0!=n.i,c6(n,t),i=new N7(n.e,3,n.c,null,t,e,c),r=t.Qk(n.e,n.c,null),(r=CEn(n,t,r))?(r.Ei(i),r.Fi()):ban(n.e,i)):(c6(n,t),(r=t.Qk(n.e,n.c,null))&&r.Fi())}function UCn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(b1(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)b1(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function XCn(n){var t,i,r,c,a;return i=c=BB(n.a,19).a,r=a=BB(n.b,19).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new rC(iln(i),iln(r))}function WCn(n,t,e,i){var r,c,a,u,o,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(o=c,s=u=a-t.k+i,o+=n.j,s+=n.k,o>=0&&s>=0&&o<n.o&&s<n.p&&(!mmn(t,r,a)&&imn(n,c,u)||vmn(t,r,a)&&!rmn(n,c,u)))return!0;return!1}function VCn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Aon(Pun(Gk(PMt,1),sVn,8,0,[c.i.n,c.n,c.a])).b+Aon(Pun(Gk(PMt,1),sVn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(kUn(),oCt)?new xI(t+c.i.c.c.a+e,r):new xI(t-e,r),Kx(n.a,0,i)}function QCn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=i)return!1}else t=i;return!0}function YCn(n,t,e){var i;if(++n.j,t>=n.i)throw Hp(new Ay(u8n+t+o8n+n.i));if(e>=n.i)throw Hp(new Ay(s8n+e+o8n+n.i));return i=n.g[e],t!=e&&(t<e?aHn(n.g,t,n.g,t+1,e-t):aHn(n.g,e+1,n.g,e,t-e),$X(n.g,t,i),n.ei(t,i,e),n.ci()),i}function JCn(n,t,e){var i;if(i=BB(n.c.xc(t),14))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw Hp(new g5("New Collection violated the Collection spec"))}function ZCn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-_Qn)>>16&4,(e+=t=(i=(n<<=t)-hVn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function nOn(n){var t,e,i,r;for(MQ(),Sct=new Np,Mct=new xp,Tct=new Np,!n.a&&(n.a=new eU(UOt,n,10,11)),xUn(t=n.a),r=new AL(t);r.e!=r.i.gc();)i=BB(kpn(r),33),-1==E7(Sct,i,0)&&(e=new Np,WB(Tct,e),Rgn(i,e));return Tct}function tOn(n,t,e){var i,r,c,a;n.a=e.b.d,cL(t,352)?(e5(c=qSn(r=cDn(BB(t,79),!1,!1)),i=new Nw(n)),VFn(c,r),null!=t.We((sWn(),OSt))&&e5(BB(t.We(OSt),74),i)):((a=BB(t,470)).Hg(a.Dg()+n.a.a),a.Ig(a.Eg()+n.a.b))}function eOn(n,t){var i,r,c,a,u,o,s,h;for(h=Gy(MD(mMn(t,(HXn(),Npt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,o=1;o<n.length;o++)r=n[o].n,c=n[o].o,i=n[o].d,(a=r.a-i.b-s)<0&&(r.a-=a),(u=t.f).a=e.Math.max(u.a,r.a+c.a),s=r.a+c.a+i.c+h}function iOn(n,t){var e,i,r,c,a,u;return i=BB(BB(RX(n.g,t.a),46).a,65),r=BB(BB(RX(n.g,t.b),46).a,65),(e=nqn(c=i.b,a=r.b))>=0?e:(u=lW(XR(new xI(a.c+a.b/2,a.d+a.a/2),new xI(c.c+c.b/2,c.d+c.a/2))),-(Y_n(c,a)-1)*u)}function rOn(n,t,e){var i;JT(new Rq(null,(!e.a&&(e.a=new eU(FOt,e,6,6)),new w1(e.a,16))),new eC(n,t)),JT(new Rq(null,(!e.n&&(e.n=new eU(zOt,e,1,7)),new w1(e.n,16))),new iC(n,t)),(i=BB(ZAn(e,(sWn(),OSt)),74))&&Yrn(i,n,t)}function cOn(n,t,e){var i,r,c;if(c=Fqn((CPn(),Z$t),n.Tg(),t))return ZM(),BB(c,66).Oj()||(c=Z1(B7(Z$t,c))),r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).hl(t,e);throw Hp(new _y(r6n+t.ne()+u6n))}function aOn(n,t,e,i){var r,c,a,u,o;if(r=n.d[t])if(c=r.g,o=r.i,null!=i){for(u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return a}else for(u=0;u<o;++u)if(GC((a=BB(c[u],133)).cd())===GC(i))return a;return null}function uOn(n,t){var e;if(t<0)throw Hp(new Oy("Negative exponent"));if(0==t)return Jtt;if(1==t||swn(n,Jtt)||swn(n,eet))return n;if(!fAn(n,0)){for(e=1;!fAn(n,e);)++e;return Nnn(vwn(e*t),uOn(z5(n,e),t))}return mTn(n,t)}function oOn(n,t){var e,i,r;if(GC(n)===GC(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(GC(i)===GC(r)||null!=i&&Nfn(i,r)))return!1;return!0}function sOn(n){var t,e,i;for(kM(),this.b=Vat,this.c=(Ffn(),BPt),this.f=(yM(),zat),this.a=n,tj(this,new It),kNn(this),i=new Wb(n.b);i.a<i.c.c.length;)(e=BB(n0(i),81)).d||(t=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[e])),WB(n.a,t))}function hOn(n,t,e){var i,r,c,a,u,o;if(!n||0==n.c.length)return null;for(c=new KY(t,!e),r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),70),USn(c,(gM(),new Bw(i)));return(a=c.i).a=(o=c.n,c.e.b+o.d+o.a),a.b=(u=c.n,c.e.a+u.b+u.c),c}function fOn(n){var t,e,i,r,c,a,u;for(hA(u=n2(n.a),new Pe),e=null,c=0,a=(r=u).length;c<a&&(i=r[c]).k==(uSn(),Mut);++c)(t=BB(mMn(i,(hWn(),Qft)),61))!=(kUn(),ICt)&&t!=oCt||(e&&BB(mMn(e,clt),15).Fc(i),e=i)}function lOn(n,t,e){var i,r,c,a,u,o;l1(t,n.c.length),u=BB(n.c[t],329),s6(n,t),u.b/2>=e&&(i=t,c=(o=(u.c+u.a)/2)-e,u.c<=o-e&&kG(n,i++,new kB(u.c,c)),(a=o+e)<=u.a&&(r=new kB(a,u.a),LZ(i,n.c.length),MS(n.c,i,r)))}function bOn(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=BB(n.g[n.i-1],47)}else n.d=n.si(n.f),f9(n,n.d),t=n.d;return t==n.b&&null.km>=null.jm()?(aLn(n),bOn(n)):t.Ob()}function wOn(n,t,e){var i,r,c,a;if(!(a=e)&&(a=LH(new Xm,0)),OTn(a,qZn,1),$Gn(n.c,t),1==(c=RGn(n.a,t)).gc())VHn(BB(c.Xb(0),37),a);else for(r=1/c.gc(),i=c.Kc();i.Ob();)VHn(BB(i.Pb(),37),mcn(a,r));Ek(n.a,c,t),FDn(t),HSn(a)}function dOn(n){if(this.a=n,n.c.i.k==(uSn(),Mut))this.c=n.c,this.d=BB(mMn(n.c.i,(hWn(),Qft)),61);else{if(n.d.i.k!=Mut)throw Hp(new _y("Edge "+n+" is not an external edge."));this.c=n.d,this.d=BB(mMn(n.d.i,(hWn(),Qft)),61)}}function gOn(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,r,n.b)),t?t!=n&&(Nrn(n,t.zb),$en(n,t.d),Fin(n,null==(e=null==(i=t.c)?t.zb:i)||mK(e,t.zb)?null:e)):(Nrn(n,null),$en(n,0),Fin(n,null))}function pOn(n){var t,e;if(n.f){for(;n.n<n.o;){if(cL(e=(t=BB(n.j?n.j.pi(n.n):n.k.Xb(n.n),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;++n.n}return!1}return n.n<n.o}function vOn(n,t){var e;this.e=(WX(),yX(n),WX(),Nwn(n)),this.c=(yX(t),Nwn(t)),aN(this.e.Hd().dc()==this.c.Hd().dc()),this.d=vbn(this.e),this.b=vbn(this.c),e=kq(Ant,[sVn,HWn],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=e,din(this)}function mOn(n){var t=(!Znt&&(Znt=QUn()),Znt);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return CJ(n,t)}))+'"'}function yOn(n){var t,e;for(IQ(),this.b=hit,this.c=lit,this.g=(pM(),sit),this.d=(Ffn(),BPt),this.a=n,yNn(this),e=new Wb(n.b);e.a<e.c.c.length;)!(t=BB(n0(e),57)).a&&CN(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),n),t.e=new gY(t.d)}function kOn(n){var t,e,i,r,c;for(r=n.e.c.length,i=x8(Rnt,nZn,15,r,0,1),c=new Wb(n.e);c.a<c.c.c.length;)i[BB(n0(c),144).b]=new YT;for(e=new Wb(n.c);e.a<e.c.c.length;)i[(t=BB(n0(e),282)).c.b].Fc(t),i[t.d.b].Fc(t);return i}function jOn(n){var t,e,i,r,c,a;for(a=sx(n.c.length),r=new Wb(n);r.a<r.c.c.length;){for(i=BB(n0(r),10),c=new Rv,e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||TU(c,t.d.i);a.c[a.c.length]=c}return a}function EOn(n,t){var e,i,r,c,a;if(t>=(a=null==(e=BB(yan(n.a,4),126))?0:e.length))throw Hp(new tK(t,a));return r=e[t],1==a?i=null:(aHn(e,0,i=x8(dAt,i9n,415,a-1,0,1),0,t),(c=a-t-1)>0&&aHn(e,t+1,i,t,c)),Fgn(n,i),eIn(n,t,r),r}function TOn(){TOn=O,lLt=BB(Wtn(QQ((cE(),gLt).qb),6),34),sLt=BB(Wtn(QQ(gLt.qb),3),34),hLt=BB(Wtn(QQ(gLt.qb),4),34),fLt=BB(Wtn(QQ(gLt.qb),5),18),oEn(lLt),oEn(sLt),oEn(hLt),oEn(fLt),bLt=new Jy(Pun(Gk(FAt,1),N9n,170,0,[lLt,sLt]))}function MOn(n,t){var e;this.d=new lm,this.b=t,this.e=new wA(t.qf()),e=n.u.Hc((lCn(),iCt)),n.u.Hc(eCt)?n.D?this.a=e&&!t.If():this.a=!0:n.u.Hc(rCt)?this.a=!!e&&!(t.zf().Kc().Ob()||t.Bf().Kc().Ob()):this.a=!1}function SOn(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),ICt)?-i.rf().a-Gy(MD(i.We(aPt))):e+Gy(MD(i.We(aPt))):i.Hf()==(kUn(),ICt)?-i.rf().a:e}function POn(n,t){var e,i,r;e=BB(mMn(n,(HXn(),Udt)),103),r=BB(ZAn(t,upt),61),(i=BB(mMn(n,ept),98))!=(QEn(),QIt)&&i!=YIt?r==(kUn(),PCt)&&(r=OFn(t,e))==PCt&&(r=hwn(e)):r=XHn(t)>0?hwn(e):Tln(hwn(e)),Ypn(t,upt,r)}function IOn(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&m$(a,new Ur),r=a.c.length/2|0,i=0;i<r;i++)l1(i,a.c.length),(c=BB(a.c[i],113)).c&&qIn(c.d,t.a);for(e=r;e<a.c.length;e++)l1(e,a.c.length),(c=BB(a.c[e],113)).c&&qIn(c.d,t.b)}function COn(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Tz(i.a,r.a))<0?uKn(n,t,e):c>0&&uKn(n,e,t),c):null!=i.a?(uKn(n,t,e),-1):null!=r.a?(uKn(n,e,t),1):0}function OOn(n,t){var e,i,r,c;n.ej()?(e=n.Vi(),c=n.fj(),++n.j,n.Hi(e,n.oi(e,t)),i=n.Zi(3,null,t,e,c),n.bj()&&(r=n.cj(t,null))?(r.Ei(i),r.Fi()):n.$i(i)):(eW(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function AOn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),r=new go,e=BB(n.g,119),c=n.i;--c>=0;)i=e[c],a.rl(i.ak())&&f9(r,i);!aXn(n,r)&&mA(n.e)&&Lv(n,t.$j()?LY(n,6,t,(SQ(),set),null,-1,!1):LY(n,t.Kj()?2:1,t,null,null,-1,!1))}function $On(){var n,t;for($On=O,aet=x8(oet,sVn,91,32,0,1),uet=x8(oet,sVn,91,32,0,1),n=1,t=0;t<=18;t++)aet[t]=npn(n),uet[t]=npn(yz(n,t)),n=cbn(n,5);for(;t<uet.length;t++)aet[t]=Nnn(aet[t-1],aet[1]),uet[t]=Nnn(uet[t-1],(ODn(),net))}function LOn(n,t){var e,i,r,c;return n.a==(JMn(),cft)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function NOn(n,t){OTn(t,"Partition preprocessing",1),JT(BB(P4(AV(wnn(AV(new Rq(null,new w1(n.a,16)),new vi),new mi),new yi),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15).Oc(),new ki),HSn(t)}function xOn(n){var t,e,i,r,c,a;for(qZ(),e=new v4,i=new Wb(n.e.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)r=BB(n0(c),10),(t=BB(lnn(e,a=n.g[r.p]),15))||Jgn(e,a,t=new Np),t.Fc(r);return e}function DOn(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=x8(Rnt,nZn,15,r,0,1),n.b=x8($Nt,ZYn,25,r,16,1),a=spn(t.b,0);a.b!=a.d.c;)c=BB(b3(a),86),n.a[c.g]=new YT;for(i=spn(t.a,0);i.b!=i.d.c;)e=BB(b3(i),188),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function ROn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (startX: ",vE(t,n.j),t.a+=", startY: ",vE(t,n.k),t.a+=", endX: ",vE(t,n.b),t.a+=", endY: ",vE(t,n.c),t.a+=", identifier: ",cO(t,n.d),t.a+=")",t.a)}function KOn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (ordered: ",yE(t,0!=(256&n.Bb)),t.a+=", unique: ",yE(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",mE(t,n.s),t.a+=", upperBound: ",mE(t,n.t),t.a+=")",t.a)}function _On(n,t,e,i,r,c,a,u){var o;return cL(n.Cb,88)&&AIn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=i,$ln(n,r),Nln(n,c),Aln(n,a),Lln(n,!1),nln(n,!0),qln(n,u),Yfn(n,!0),Len(n,0),n.b=0,Nen(n,1),(o=HTn(n,t,null))&&o.Fi(),Gln(n,!1),n}function FOn(n,t){var i,r;return BB(SJ(n.a,t),512)||(i=new y5(t),k5(),xK(i,FOn(n,fx(r=Qet?null:i.c,0,e.Math.max(0,mN(r,YTn(46)))))),0==(Qet?null:i.c).length&&zD(i,new X),mZ(n.a,Qet?null:i.c,i),i)}function BOn(n,t){var e;n.b=t,n.g=new Np,e=JOn(n.b),n.e=e,n.f=e,n.c=qy(TD(mMn(n.b,(_kn(),jit)))),n.a=MD(mMn(n.b,(sWn(),cSt))),null==n.a&&(n.a=1),Gy(n.a)>1?n.e*=Gy(n.a):n.f/=Gy(n.a),Ihn(n),ggn(n),TRn(n),hon(n.b,(Epn(),gct),n.g)}function HOn(n,t,e){var i,r,c,a,u;for(i=0,u=e,t||(i=e*(n.c.length-1),u*=-1),c=new Wb(n);c.a<c.c.c.length;){for(hon(r=BB(n0(c),10),(HXn(),kdt),(wvn(),OMt)),r.o.a=i,a=DSn(r,(kUn(),oCt)).Kc();a.Ob();)BB(a.Pb(),11).n.a=i;i+=u}}function qOn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),Cfn(n,t,e),i=n.Zi(3,null,e,t,c),n.bj()?(r=n.cj(e,null),n.ij()&&(r=n.jj(e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(Cfn(n,t,e),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function GOn(n,t,e){var i,r,c,a,u,o;return(u=n.Gk(e))!=e?(a=n.g[t],o=u,jL(n,t,n.oi(t,o)),c=a,n.gi(t,o,c),n.rk()&&(i=e,r=n.dj(i,null),!BB(u,49).eh()&&(r=n.cj(o,r)),r&&r.Fi()),mA(n.e)&&Lv(n,n.Zi(9,e,u,t,!1)),u):e}function zOn(n,t){var e,i,r;for(e=new Wb(n.a.a);e.a<e.c.c.length;)BB(n0(e),189).g=!0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)(i=BB(n0(r),81)).k=qy(TD(n.e.Kb(new rC(i,t)))),i.d.g=i.d.g&qy(TD(n.e.Kb(new rC(i,t))));return n}function UOn(n){var t,e,i,r,c;if(e=new YK(t=BB(Vj(FCt),9),BB(SR(t,t.length),9),0),c=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(c.j);r.a<r.c.c.length;)GC(mMn(i=BB(n0(r),11),dlt))===GC(n)&&zN(new m6(i.b))&&orn(e,i.j);return e}function XOn(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new oz(ZL(lbn(e).a.Kc(),new h));dAn(i);){for(c=new oz(ZL(fbn(a=BB(U5(i),17).d.i).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).c.i==t&&(n.a[r.p]=!0);XOn(n,t,a)}n.d[e.p]=!0}}function WOn(n,t){var e,i,r,c,a,u,o;if(1==(i=pbn(254&n.Db)))n.Eb=null;else if(c=een(n.Eb),2==i)r=Rmn(n,t),n.Eb=c[0==r?1:0];else{for(a=x8(Ant,HWn,1,i-1,5,1),e=2,u=0,o=0;e<=128;e<<=1)e==t?++u:0!=(n.Db&e)&&(a[o++]=c[u++]);n.Eb=a}n.Db&=~t}function VOn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 4:case 5:case 6:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function QOn(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=k6n}return t}function YOn(n,t,e,i,r){var c,a,u,o;if(GC(n)!==GC(t)||i!=r)for(u=0;u<i;u++){for(a=0,c=n[u],o=0;o<r;o++)a=rbn(rbn(cbn(e0(c,UQn),e0(t[o],UQn)),e0(e[u+o],UQn)),e0(dG(a),UQn)),e[u+o]=dG(a),a=jz(a,32);e[u+r]=dG(a)}else C_n(n,i,e)}function JOn(n){var t,i,r,c,a,u,o,s,h,f,l;for(f=0,h=0,o=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),561)).b&&VBn(i),f+=(l=(t=i.a).a)+(u=t.b),h+=l*u;return s=e.Math.sqrt(400*o*h-4*h+f*f)+f,0==(a=2*(100*o-1))?s:s/a}function ZOn(n,t){0!=t.b&&(isNaN(n.s)?n.s=Gy((Px(0!=t.b),MD(t.a.a.c))):n.s=e.Math.min(n.s,Gy((Px(0!=t.b),MD(t.a.a.c)))),isNaN(n.c)?n.c=Gy((Px(0!=t.b),MD(t.c.b.c))):n.c=e.Math.max(n.c,Gy((Px(0!=t.b),MD(t.c.b.c)))))}function nAn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=JJ(i))return!0}else t=JJ(i);return!1}function tAn(n,t){var e,i,r,c;n.ej()?(e=n.i,c=n.fj(),c6(n,t),i=n.Zi(3,null,t,e,c),n.bj()?(r=n.cj(t,null),n.ij()&&(r=n.jj(t,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(c6(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function eAn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),++n.j,n.Hi(t,n.oi(t,e)),i=n.Zi(3,null,e,t,c),n.bj()&&(r=n.cj(e,null))?(r.Ei(i),r.Fi()):n.$i(i)):(++n.j,n.Hi(t,n.oi(t,e)),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function iAn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)b1(i,n.length),GO(".*+?{[()|\\^$",YTn(e=n.charCodeAt(i)))>=0?(t||(t=new Pk,i>0&&cO(t,n.substr(0,i))),t.a+="\\",NX(t,e&QVn)):t&&NX(t,e&QVn);return t?t.a:n}function rAn(n){var t;if(!n.a)throw Hp(new Fy("IDataType class expected for layout option "+n.f));if(null==(t=C3(n.a)))throw Hp(new Fy("Couldn't create new instance of property '"+n.f+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return BB(t,414)}function cAn(n){var t,e,i,r,c;return(c=n.eh())&&c.kh()&&(r=tfn(n,c))!=c?(e=n.Vg(),i=(t=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-t,null,null),n.Rg(BB(r,49),e),i&&i.Fi(),n.Lg()&&n.Mg()&&e>-1&&ban(n,new nU(n,9,e,c,r)),r):c}function aAn(n){var t,e,i,r,c,a,u;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(l1(e,r.c.length),a=BB(r.c[e],144),i=e+1;i<r.c.length;++i)l1(i,r.c.length),u=BB(r.c[i],144),t=W8(a.d,u.d)-n.a[a.b][u.b],c+=n.i[a.b][u.b]*t*t;return c}function uAn(n,t){var e;if(!Lx(t,(HXn(),kgt))&&(e=Ekn(BB(mMn(t,est),360),BB(mMn(n,kgt),163)),hon(t,est,e),!dAn(new oz(ZL(hbn(t).a.Kc(),new h)))))switch(e.g){case 1:hon(t,kgt,(Tbn(),_lt));break;case 2:hon(t,kgt,(Tbn(),Blt))}}function oAn(n,t){var e;mRn(n),n.a=(e=new ok,JT(new Rq(null,new w1(t.d,16)),new Od(e)),e),Mxn(n,BB(mMn(t.b,(HXn(),igt)),376)),kvn(n),OAn(n),$kn(n),jvn(n),jqn(n,t),JT(wnn(new Rq(null,Y0(SX(n.b).a)),new Wr),new Vr),t.a=!1,n.a=null}function sAn(){dMn.call(this,y6n,(tE(),dOt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function hAn(){hAn=O,iAt=new MC(G1n,0),nAt=new MC("INSIDE_SELF_LOOPS",1),tAt=new MC("MULTI_EDGES",2),ZOt=new MC("EDGE_LABELS",3),eAt=new MC("PORTS",4),YOt=new MC("COMPOUND",5),QOt=new MC("CLUSTERS",6),JOt=new MC("DISCONNECTED",7)}function fAn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw Hp(new Oy("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=Icn(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function lAn(n,t,e,i){var r;BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),NH(r=XR(B$(BB(e.b,65).c),BB(i.b,65).c),HIn(BB(e.b,65),BB(i.b,65),r)),BB(i.b,65),BB(i.b,65),BB(i.b,65).c.a,r.a,BB(i.b,65).c.b,r.b,BB(i.b,65),Otn(i.a,new TB(n,t,i))}function bAn(n,t){var e,i,r,c,a,u,o;if(c=t.e)for(e=cAn(c),i=BB(n.g,674),a=0;a<n.i;++a)if(qvn(o=i[a])==e&&(!o.d&&(o.d=new $L(VAt,o,1)),r=o.d,(u=BB(e.ah(gKn(c,c.Cb,c.Db>>16)),15).Xc(c))<r.i))return bAn(n,BB(Wtn(r,u),87));return t}function wAn(n,t,e){var i,r=SWn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?MWn=c:(!(i=t&&t.prototype)&&(i=SWn[t]),(MWn=qJ(i)).hm=e,!t&&(MWn.im=C),r[n]=MWn);for(var u=3;u<arguments.length;++u)arguments[u].prototype=MWn;a&&(MWn.gm=a)}function dAn(n){for(var t;!BB(yX(n.a),47).Ob();){if(n.d=osn(n),!n.d)return!1;if(n.a=BB(n.d.Pb(),47),cL(n.a,39)){if(t=BB(n.a,39),n.a=t.a,!n.b&&(n.b=new Lp),d3(n.b,n.d),t.b)for(;!Wy(t.b);)d3(n.b,BB(gU(t.b),47));n.d=t.d}}return!0}function gAn(n,t){var e,i,r,c,a;for(c=null==t?0:n.b.se(t),i=null==(e=n.a.get(c))?new Array:e,a=0;a<i.length;a++)if(r=i[a],n.b.re(t,r.cd()))return 1==i.length?(i.length=0,vR(n.a,c)):i.splice(a,1),--n.c,oY(n.b),r.dd();return null}function pAn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Wb(kbn(t));i.a<i.c.c.length;)e=BB(n0(i),213),n.c[e.c]||(n.c[e.c]=!0,c=Nbn(e,t),e.f?r+=pAn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,TU(n.p,e),r+=pAn(n,c)));return r}function vAn(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function mAn(n){var t,i,r,c,a;if(a=K_n(n,c=new Np),t=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(t.j);r.a<r.c.c.length;)GC(mMn(i=BB(n0(r),11),dlt))===GC(n)&&(a=e.Math.max(a,K_n(i,c)));return 0==c.c.length||hon(n,blt,a),-1!=a?c:null}function yAn(n,t,e){var i,r,c,a,u,o;r=(i=(c=BB(xq(t.e,0),17).c).i).k,u=(a=(o=BB(xq(e.g,0),17).d).i).k,r==(uSn(),Put)?hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)):hon(n,(hWn(),hlt),c),hon(n,(hWn(),flt),u==Put?BB(mMn(a,flt),11):o)}function kAn(n,t){var e,i,r,c;for(e=(c=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&wW(i.i,t))return r?r.a=i.a:n.b[e]=i.a,kk(i.c,i.f),iv(i.b,i.e),--n.f,++n.e,!0;return!1}function jAn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&IQn))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?PQn:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?PQn:0,c=i?SQn:0,r=e>>t-44),M$(r&SQn,c&SQn,a&PQn)}function EAn(n){var t,i,r,c,a,u;for(this.c=new Np,this.d=n,r=RQn,c=RQn,t=KQn,i=KQn,u=spn(n,0);u.b!=u.d.c;)a=BB(b3(u),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new UV(r,c,t-r,i-c)}function TAn(n,t){var e,i,r,c;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)for((r=BB(n0(c),10)).k==(uSn(),Sut)&&hFn(r,t),e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)vun(BB(U5(e),17),t)}function MAn(n){var t,e,i;this.c=n,i=BB(mMn(n,(HXn(),Udt)),103),t=Gy(MD(mMn(n,Edt))),e=Gy(MD(mMn(n,Kpt))),i==(Ffn(),_Pt)||i==FPt||i==BPt?this.b=t*e:this.b=1/(t*e),this.j=Gy(MD(mMn(n,Apt))),this.e=Gy(MD(mMn(n,Opt))),this.f=n.b.c.length}function SAn(n){var t,e;for(n.e=x8(ANt,hQn,25,n.p.c.length,15,1),n.k=x8(ANt,hQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.e[t.p]=F3(new oz(ZL(fbn(t).a.Kc(),new h))),n.k[t.p]=F3(new oz(ZL(lbn(t).a.Kc(),new h)))}function PAn(n){var t,e,i,r,c;for(i=0,n.q=new Np,t=new Rv,c=new Wb(n.p);c.a<c.c.c.length;){for((r=BB(n0(c),10)).p=i,e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)TU(t,BB(U5(e),17).d.i);t.a.Bc(r),WB(n.q,new $q(t)),t.a.$b(),++i}}function IAn(){IAn=O,Okt=new WA(20),Ckt=new XA((sWn(),XSt),Okt),xkt=new XA(LPt,20),jkt=new XA(cSt,dZn),$kt=new XA(pPt,iln(1)),Nkt=new XA(kPt,(hN(),!0)),Ekt=lSt,Mkt=KSt,Skt=BSt,Pkt=qSt,Tkt=DSt,Ikt=USt,Akt=fPt,Ran(),Dkt=ykt,Lkt=vkt}function CAn(n,t){var e,i,r,c,a,u,o,s,h;if(n.a.f>0&&cL(t,42)&&(n.a.qj(),c=null==(o=(s=BB(t,42)).cd())?0:nsn(o),a=eR(n.a,c),e=n.a.d[a]))for(i=BB(e.g,367),h=e.i,u=0;u<h;++u)if((r=i[u]).Sh()==c&&r.Fb(s))return CAn(n,s),!0;return!1}function OAn(n){var t,e,i,r;for(r=BB(h6(n.a,(LEn(),Sst)),15).Kc();r.Ob();)iX(n,i=BB(r.Pb(),101),(e=(t=gz(i.k)).Hc((kUn(),sCt))?t.Hc(oCt)?t.Hc(SCt)?t.Hc(ICt)?null:$st:Nst:Lst:Ast)[0],(Irn(),xst),0),iX(n,i,e[1],Dst,1),iX(n,i,e[2],Rst,1)}function AAn(n,t){var e,i;Jxn(n,t,e=mKn(t)),iTn(n.a,BB(mMn(vW(t.b),(hWn(),Slt)),230)),b_n(n),DEn(n,t),i=x8(ANt,hQn,25,t.b.j.c.length,15,1),szn(n,t,(kUn(),sCt),i,e),szn(n,t,oCt,i,e),szn(n,t,SCt,i,e),szn(n,t,ICt,i,e),n.a=null,n.c=null,n.b=null}function $An(){$An=O,Sbn(),oEt=new $O(E4n,sEt=nEt),aEt=new $O(T4n,(hN(),!0)),iln(-1),iEt=new $O(M4n,iln(-1)),iln(-1),rEt=new $O(S4n,iln(-1)),uEt=new $O(P4n,!1),hEt=new $O(I4n,!0),cEt=new $O(C4n,!1),fEt=new $O(O4n,-1)}function LAn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),sqn(n.e),!n.e&&(n.e=new hK(_Ot,n,7,4)),void pX(n.e,BB(e,14));case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),sqn(n.d),!n.d&&(n.d=new hK(_Ot,n,8,5)),void pX(n.d,BB(e,14))}zjn(n,t,e)}function NAn(n,t){var e,i,r,c,a;if(GC(t)===GC(n))return!0;if(!cL(t,15))return!1;if(a=BB(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(GC(e)===GC(r)||null!=e&&Nfn(e,r)))return!1;return!0}function xAn(n,t){var e,i,r,c;for((c=BB(P4(wnn(wnn(new Rq(null,new w1(t.b,16)),new Re),new Ke),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Jc(new _e),e=0,r=c.Kc();r.Ob();)-1==(i=BB(r.Pb(),11)).p&&FAn(n,i,e++)}function DAn(n){switch(n.g){case 0:return new If;case 1:return new lf;case 2:return new ff;case 3:return new jC;case 4:return new _G;default:throw Hp(new _y("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function RAn(n){switch(n.g){case 0:return new KG;case 1:return new wf;case 2:return new rf;case 3:return new cf;case 4:return new TC;default:throw Hp(new _y("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function KAn(){KAn=O,mjt=new $O(u4n,iln(0)),yjt=new $O(o4n,0),Hsn(),djt=new $O(s4n,gjt=sjt),iln(0),wjt=new $O(h4n,iln(1)),Bcn(),kjt=new $O(f4n,jjt=Xjt),D9(),Ejt=new $O(l4n,Tjt=ajt),Omn(),pjt=new $O(b4n,vjt=qjt)}function _An(n,t,e){var i;i=null,t&&(i=t.d),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function FAn(n,t,e){var i,r,c;for(t.p=e,c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(c);)-1==(i=BB(U5(c),11)).p&&FAn(n,i,e);if(t.i.k==(uSn(),Put))for(r=new Wb(t.i.j);r.a<r.c.c.length;)(i=BB(n0(r),11))!=t&&-1==i.p&&FAn(n,i,e)}function BAn(n){var t,i,r,c,a;if(c=BB(P4($Z(a1(n)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),r=ZJn,c.gc()>=2)for(t=MD((i=c.Kc()).Pb());i.Ob();)a=t,t=MD(i.Pb()),r=e.Math.min(r,(kW(t),t-(kW(a),a)));return r}function HAn(n,t){var e,i,r,c,a;r5(i=new YT,t,i.c.b,i.c);do{for(Px(0!=i.b),e=BB(Atn(i,i.a.a),86),n.b[e.g]=1,c=spn(e.d,0);c.b!=c.d.c;)a=(r=BB(b3(c),188)).c,1==n.b[a.g]?DH(n.a,r):2==n.b[a.g]?n.b[a.g]=1:r5(i,a,i.c.b,i.c)}while(0!=i.b)}function qAn(n,t){var e,i,r;if(GC(t)===GC(yX(n)))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),(r=n.gc())!=i.gc())return!1;if(cL(i,54)){for(e=0;e<r;e++)if(!wW(n.Xb(e),i.Xb(e)))return!1;return!0}return Uvn(n.Kc(),i.Kc())}function GAn(n,t){var e;if(0!=n.c.length){if(2==n.c.length)hFn((l1(0,n.c.length),BB(n.c[0],10)),(Xyn(),jIt)),hFn((l1(1,n.c.length),BB(n.c[1],10)),EIt);else for(e=new Wb(n);e.a<e.c.c.length;)hFn(BB(n0(e),10),t);n.c=x8(Ant,HWn,1,0,5,1)}}function zAn(n){var t,e;if(2!=n.c.length)throw Hp(new Fy("Order only allowed for two paths."));l1(0,n.c.length),t=BB(n.c[0],17),l1(1,n.c.length),e=BB(n.c[1],17),t.d.i!=e.c.i&&(n.c=x8(Ant,HWn,1,0,5,1),n.c[n.c.length]=e,n.c[n.c.length]=t)}function UAn(n,t){var e,i,r,c,a;for(i=new v4,c=S4(new Jy(n.g)).a.ec().Kc();c.Ob();){if(!(r=BB(c.Pb(),10))){OH(t,"There are no classes in a balanced layout.");break}(e=BB(lnn(i,a=n.j[r.p]),15))||Jgn(i,a,e=new Np),e.Fc(r)}return i}function XAn(n,t,e){var i,r,c,a;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=x2(e,BB(r.Pb(),19).a))&&(a=Ken(R2(c,O6n),t),VW(n.f,a,c),q6n in c.a&&$in(a,R2(c,q6n)),STn(c,a),OIn(c,a))}function WAn(n,t){var e,i,r;for(OTn(t,"Port side processing",1),r=new Wb(n.a);r.a<r.c.c.length;)cBn(BB(n0(r),10));for(e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)cBn(BB(n0(i),10));HSn(t)}function VAn(n,t,e){var i,r,c,a,u;if(!(r=n.f)&&(r=BB(n.a.a.ec().Kc().Pb(),57)),Fkn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=BB(a.Pb(),57))!=r&&((u=f3(c)).f.d?(c.d.d+=i+fJn,c.d.a-=i+fJn):u.f.a&&(c.d.a-=i+fJn))}function QAn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w;return u=i-n,o=r-t,s=(a=e.Math.atan2(u,o))+JJn,h=a-JJn,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,u6(Pun(Gk(PMt,1),sVn,8,0,[new xI(f,b),new xI(l,w)]))}function YAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=Gy(n.p[l.p])+Gy(n.d[a.p])-a.d.d,(s=Ain(a,r))&&(h=n.g[s.p],u=Gy(n.p[h.p])+Gy(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function JAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=Gy(n.p[l.p])+Gy(n.d[a.p])+a.o.b+a.d.a,(s=_un(a,r))&&(h=n.g[s.p],o=Gy(n.p[h.p])+Gy(n.d[s.p])-s.d.d,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function ZAn(n,t){var e,i;return!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),null!=(i=cdn(n.o,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((IXn(),MOt),rAt,n,0)),vjn(n.o,t,e))),e)}function n$n(){n$n=O,CIt=new GI("H_LEFT",0),IIt=new GI("H_CENTER",1),AIt=new GI("H_RIGHT",2),DIt=new GI("V_TOP",3),xIt=new GI("V_CENTER",4),NIt=new GI("V_BOTTOM",5),$It=new GI("INSIDE",6),LIt=new GI("OUTSIDE",7),OIt=new GI("H_PRIORITY",8)}function t$n(n){var t,e,i,r,c,a,u;if((t=n.Hh(V9n))&&null!=(u=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"settingDelegates")))){for(e=new Np,c=0,a=(r=kKn(u,"\\w+")).length;c<a;++c)i=r[c],e.c[e.c.length]=i;return e}return SQ(),SQ(),set}function e$n(n,t){var e,i,r,c,a,u,o;if(!t.f)throw Hp(new _y("The input edge is not a tree edge."));for(c=null,r=DWn,i=new Wb(n.d);i.a<i.c.c.length;)u=(e=BB(n0(i),213)).d,o=e.e,FIn(n,u,t)&&!FIn(n,o,t)&&(a=o.e-u.e-e.a)<r&&(r=a,c=e);return c}function i$n(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=aAn(n),e=RQn;do{for(t>0&&(r=e),a=new Wb(n.f.e);a.a<a.c.c.length;)qy(TD(mMn(c=BB(n0(a),144),(rkn(),yat))))||(i=Z_n(n,c),UR(kO(c.d),i));e=aAn(n)}while(!JX(n,t++,r,e))}}function r$n(n,t){var e,i,r;for(OTn(t,"Layer constraint preprocessing",1),e=new Np,r=new M2(n.a,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),Wun(i=BB(r.d.Xb(r.c=r.b++),10))&&(cTn(i),e.c[e.c.length]=i,fW(r));0==e.c.length||hon(n,(hWn(),nlt),e),HSn(t)}function c$n(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)r=(e=BB(n0(i),70)).n,n.a==(Oun(),mst)||n.i==(kUn(),oCt)?r.a=c:n.a==yst||n.i==(kUn(),ICt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,UR(r,t),a+=e.o.b+n.e}function a$n(n,t,e){var i,r,c,a;for(OTn(e,"Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,c=null,i=spn(t.b,0);!c&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(c=a,(r=a.e).a=BB(mMn(a,gkt),19).a,r.b=0);_Sn(n,xun(c),mcn(e,1)),HSn(e)}function u$n(n,t,e){var i,r,c;for(OTn(e,"Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&Zxn(n,u6(Pun(Gk(Yyt,1),tZn,86,0,[r])),e),HSn(e)}function o$n(n,t){var e,i,r,c,a;(c=D2(n,"individualSpacings"))&&(!P8(t,(sWn(),IPt))&&(e=new Yu,Ypn(t,IPt,e)),r=BB(ZAn(t,IPt),373),i=null,(a=c)&&(i=new TT(a,jrn(a,x8(Qtt,sVn,2,0,6,1)))),i&&e5(i,new dC(a,r)))}function s$n(n,t){var e,i,r,c,a,u;return c=null,(J6n in(a=n).a||Z6n in a.a||D6n in a.a)&&(u=qun(t),i=D2(a,J6n),Own(new Hg(u).a,i),r=D2(a,Z6n),Cwn(new Jg(u).a,r),e=N2(a,D6n),PEn(new tp(u).a,e),c=e),c}function h$n(n,t){var e,i,r;if(t===n)return!0;if(cL(t,543)){if(r=BB(t,835),n.a.d!=r.a.d||EV(n).gc()!=EV(r).gc())return!1;for(i=EV(r).Kc();i.Ob();)if(c1(n,(e=BB(i.Pb(),416)).a.cd())!=BB(e.a.dd(),14).gc())return!1;return!0}return!1}function f$n(n){var t,e,i,r;return t=i=BB(n.a,19).a,e=r=BB(n.b,19).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new rC(iln(t),iln(e))}function l$n(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?nsn(n.a)-nsn(t.a):n.d==(Q4(),Hmt)&&t.d==Bmt?-1:n.d==Bmt&&t.d==Hmt?1:0}function b$n(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=zwn(n.a,a,i))>0&&r<ZJn?(e=YAn(n.a,i.i,r,n.c),ren(n.a,i.i,-e),e>0):r<0&&-r<ZJn&&(e=JAn(n.a,i.i,-r,n.c),ren(n.a,i.i,e),e>0)}function w$n(n,t,e,i){var r,c,a,u,o,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Wb(n.c);s.a<s.c.c.length;)u=(o=BB(n0(s),33)).g,a=o.f,Pen(o,o.i+c*r),Ien(o,o.j+i*e),Sen(o,o.g+r),Men(o,n.a),++c,lIn(o,new xI(o.g,o.f),new xI(u,a))}function d$n(n){var t,e,i,r,c,a,u;if(null==n)return null;for(u=n.length,a=x8(NNt,v6n,25,r=(u+1)/2|0,15,1),u%2!=0&&(a[--r]=ZDn((b1(u-1,n.length),n.charCodeAt(u-1)))),e=0,i=0;e<r;++e)t=ZDn(fV(n,i++)),c=ZDn(fV(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function g$n(n){if(n.pe()){var t=n.c;return t.qe()?n.o="["+t.n:t.pe()?n.o="["+t.ne():n.o="[L"+t.ne()+";",n.b=t.me()+"[]",void(n.k=t.oe()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=Fdn(".",[e,Fdn("$",i)]),n.b=Fdn(".",[e,Fdn(".",i)]),n.k=i[i.length-1]}function p$n(n,t){var e,i,r,c,a;for(a=null,c=new Wb(n.e.a);c.a<c.c.c.length;)if((r=BB(n0(c),121)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=ePn(r),e=r.e-BB(a.a,19).a+1;e<r.e+BB(a.b,19).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function v$n(n){var t,i,r,c,a,u,o;for(r=RQn,i=KQn,t=new Wb(n.e.b);t.a<t.c.c.length;)for(a=new Wb(BB(n0(t),29).a);a.a<a.c.c.length;)c=BB(n0(a),10),u=(o=Gy(n.p[c.p]))+Gy(n.b[n.g[c.p].p]),r=e.Math.min(r,o),i=e.Math.max(i,u);return i-r}function m$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=jKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function y$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=EKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function k$n(n,t,e){var i,r,c,a,u,o;if(a=new go,u=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj())for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&f9(a,r);else for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&(o=r.dd(),f9(a,e?FCn(n,t,c,a.i,o):o));return N3(a)}function j$n(n,t){var e,i,r,c;for(e=new Hbn(uht),$Pn(),r=0,c=(i=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;r<c;++r)wR(e,i[r],new Np);return JT($V(AV(wnn(new Rq(null,new w1(n.b,16)),new Ze),new ni),new hd(t)),new fd(e)),e}function E$n(n,t,i){var r,c,a,u,o,s,h,f;for(a=t.Kc();a.Ob();)s=(c=BB(a.Pb(),33)).i+c.g/2,f=c.j+c.f/2,o=s-((u=n.f).i+u.g/2),h=f-(u.j+u.f/2),r=e.Math.sqrt(o*o+h*h),o*=n.e/r,h*=n.e/r,i?(s-=o,f-=h):(s+=o,f+=h),Pen(c,s-c.g/2),Ien(c,f-c.f/2)}function T$n(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function M$n(n,t){var e,i,r,c,a,u;for(c=(1==t?Wat:Xat).a.ec().Kc();c.Ob();)for(r=BB(c.Pb(),103),u=BB(h6(n.f.c,r),21).Kc();u.Ob();)switch(a=BB(u.Pb(),46),i=BB(a.b,81),e=BB(a.a,189).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function S$n(n,t){var e,i,r,c,a,u,o,s,h;for(s=-1,h=0,u=0,o=(a=n).length;u<o;++u){for(c=a[u],e=new kH(-1==s?n[0]:n[s],t,(Mhn(),uvt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)Lx(c[i],(hWn(),wlt))&&Lx(c[r],wlt)&&fXn(e,c[i],c[r])>0&&++h;++s}return h}function P$n(n){var t;return(t=new lN(nE(n.gm))).a+="@",oO(t,(nsn(n)>>>0).toString(16)),n.kh()?(t.a+=" (eProxyURI: ",uO(t,n.qh()),n.$g()&&(t.a+=" eClass: ",uO(t,n.$g())),t.a+=")"):n.$g()&&(t.a+=" (eClass: ",uO(t,n.$g()),t.a+=")"),t.a}function I$n(n){var t,e,i;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));for(n.d==(Ffn(),BPt)&&Tzn(n,_Pt),e=new Wb(n.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).g=t.i;for(i=new Wb(n.a.b);i.a<i.c.c.length;)BB(n0(i),57).i=KQn;return n.b.Le(n),n}function C$n(n,t){var e,i,r,c,a;if(t<2*n.b)throw Hp(new _y("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)WB(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)WB(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)WB(n.e,1)}function O$n(n,t){var e,i,r,c,a;if(c=t,!(a=BB(Uin(PX(n.i),c),33)))throw Hp(new ek("Unable to find elk node for json object '"+R2(c,q6n)+"' Panic!"));i=N2(c,"edges"),LCn((e=new uC(n,a)).a,e.b,i),r=N2(c,A6n),Dkn(new Ng(n).a,r)}function A$n(n,t,e,i){var r,c,a,u,o;if(null!=i){if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return u}else if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if(GC((a=BB(c[u],133)).cd())===GC(i))return u;return-1}function $$n(n,t){var e,i;return cL(e=null==t?qC(AY(n.f,null)):hS(n.g,t),235)?((i=BB(e,235)).Qh(),i):cL(e,498)?((i=BB(e,1938).a)&&(null==i.yb||(null==t?jIn(n.f,null,i):ubn(n.g,t,i))),i):null}function L$n(n){var t,e,i,r,c,a,u;if(KDn(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=V7(n),e=x8(NNt,v6n,25,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=QLt[t[2*i]]))return null;if(-1==(u=QLt[t[2*i+1]]))return null;e[i]=(a<<4|u)<<24>>24}return e}function N$n(n,t,e){var i,r,c;if(!(r=BB(oV(n.i,t),306)))if(r=new wtn(n.d,t,e),mG(n.i,t,r),agn(t))EL(n.a,t.c,t.b,r);else switch(c=LPn(t),i=BB(oV(n.p,c),244),c.g){case 1:case 3:r.j=!0,jy(i,t.b,r);break;case 4:case 2:r.k=!0,jy(i,t.c,r)}return r}function x$n(n,t,e,i){var r,c,a,u,o,s;if(u=new go,o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj())for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&f9(u,c);else for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&(s=c.dd(),f9(u,i?FCn(n,t,a,u.i,s):s));return Qwn(u,e)}function D$n(n,t){var i,r,c,a,u,o;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Wb(t.j);a.a<a.c.c.length;)for(i=new Wb(BB(n0(a),11).g);i.a<i.c.c.length;)t!=(o=BB(n0(i),17).d.i)&&(u=D$n(n,o),c=e.Math.max(c,u+1));return iwn(n,t,c),c}function R$n(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(l1(i,n.c.length),c=BB(n.c[i],10),r=i;r>0&&t.ue((l1(r-1,n.c.length),BB(n.c[r-1],10)),c)>0;)c5(n,r,(l1(r-1,n.c.length),BB(n.c[r-1],10))),--r;l1(r,n.c.length),n.c[r]=c}e.a=new xp,e.b=new xp}function K$n(n,t,e){var i,r,c,a,u,o,s;for(s=new YK(i=BB(t.e&&t.e(),9),BB(SR(i,i.length),9),0),a=0,u=(c=kKn(e,"[\\[\\]\\s,]+")).length;a<u;++a)if(0!=RMn(r=c[a]).length){if(null==(o=HCn(n,r)))return null;orn(s,BB(o,22))}return s}function _$n(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function F$n(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(kUn(),sCt)||t==oCt?(jtn(BB(Eon(n),15),(Xyn(),jIt)),jtn(BB(Eon(n),15),EIt)):(jtn(BB(Eon(n),15),(Xyn(),EIt)),jtn(BB(Eon(n),15),jIt));else for(i=new bV(n);i.a!=i.b;)jtn(BB(_hn(i),15),e)}function B$n(n,t){var e,i,r,c,a,u;for(a=new M2(i=HB(new sp(n)),i.c.length),u=new M2(r=HB(new sp(t)),r.c.length),c=null;a.b>0&&u.b>0&&(Px(a.b>0),e=BB(a.a.Xb(a.c=--a.b),33),Px(u.b>0),e==BB(u.a.Xb(u.c=--u.b),33));)c=e;return c}function H$n(n,t){var i,r,c,a;return c=n.a*aYn+1502*n.b,a=n.b*aYn+11,c+=i=e.Math.floor(a*uYn),a-=i*oYn,c%=oYn,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*Oet[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*Aet[t]))>=2147483648&&(r-=XQn),r)}function q$n(n,t,e){var i,r,c,a;w0(n,t)>w0(n,e)?(i=abn(e,(kUn(),oCt)),n.d=i.dc()?0:uq(BB(i.Xb(0),11)),a=abn(t,ICt),n.b=a.dc()?0:uq(BB(a.Xb(0),11))):(r=abn(e,(kUn(),ICt)),n.d=r.dc()?0:uq(BB(r.Xb(0),11)),c=abn(t,oCt),n.b=c.dc()?0:uq(BB(c.Xb(0),11)))}function G$n(n){var t,e,i,r,c,a,u;if(n&&(t=n.Hh(V9n))&&null!=(a=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"conversionDelegates")))){for(u=new Np,r=0,c=(i=kKn(a,"\\w+")).length;r<c;++r)e=i[r],u.c[u.c.length]=e;return u}return SQ(),SQ(),set}function z$n(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=e*Gy(MD(r.b.We(Lrt))),r.e.b=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),sCt)?-i.rf().b-Gy(MD(i.We(aPt))):Gy(MD(i.We(aPt))):i.Hf()==(kUn(),sCt)?-i.rf().b:0}function U$n(n){var t,e,i,r,c,a,u,o;t=!0,r=null,c=null;n:for(o=new Wb(n.a);o.a<o.c.c.length;)for(i=new oz(ZL(fbn(u=BB(n0(o),10)).a.Kc(),new h));dAn(i);){if(e=BB(U5(i),17),r&&r!=u){t=!1;break n}if(r=u,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function X$n(n,t,e){var i,r,c,a,u,o;for(c=-1,u=-1,a=0;a<t.c.length&&(l1(a,t.c.length),!((r=BB(t.c[a],329)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),u=a);return o=(n.s+n.c)/2,c>=0&&(o=qM((l1(i=YRn(n,t,c,u),t.c.length),BB(t.c[i],329))),lOn(t,i,e)),o}function W$n(){W$n=O,lEt=new XA((sWn(),cSt),1.3),gEt=jSt,CEt=new WA(15),IEt=new XA(XSt,CEt),$Et=new XA(LPt,15),bEt=hSt,jEt=KSt,EEt=BSt,TEt=qSt,kEt=DSt,MEt=USt,OEt=fPt,$An(),PEt=oEt,yEt=aEt,SEt=uEt,AEt=hEt,pEt=cEt,vEt=ISt,mEt=CSt,dEt=rEt,wEt=iEt,LEt=fEt}function V$n(n,t,e){var i,r,c,a,u;for(Bin(r=new jo,(kW(t),t)),!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),u=r.b,a=1;a<e.length;a+=2)vjn(u,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new eU(KAt,n,0,3)),i=n.Ab,c=0;c<0;++c)i=mW(BB(Wtn(i,i.i-1),590));f9(i,r)}function Q$n(n,t,e){var i,r,c;for(LD.call(this,new Np),this.a=t,this.b=e,this.e=n,n.b&&VBn(n),i=n.a,this.d=JV(i.a,this.a),this.c=JV(i.b,this.b),obn(this,this.d,this.c),mCn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=BB(c.Pb(),266)).c.c.length>0&&xqn(this,r)}function Y$n(n,t,e,i,r,c){var a,u,o;if(!r[t.b]){for(r[t.b]=!0,!(a=i)&&(a=new y6),WB(a.e,t),o=c[t.b].Kc();o.Ob();)(u=BB(o.Pb(),282)).d!=e&&u.c!=e&&(u.c!=t&&Y$n(n,u.c,t,a,r,c),u.d!=t&&Y$n(n,u.d,t,a,r,c),WB(a.c,u),gun(a.d,u.b));return a}return null}function J$n(n){var t,e,i;for(t=0,e=new Wb(n.e);e.a<e.c.c.length;)o5(new Rq(null,new w1(BB(n0(e),17).b,16)),new pe)&&++t;for(i=new Wb(n.g);i.a<i.c.c.length;)o5(new Rq(null,new w1(BB(n0(i),17).b,16)),new ve)&&++t;return t>=2}function Z$n(n,t){var e,i,r,c;for(OTn(t,"Self-Loop pre-processing",1),i=new Wb(n.a);i.a<i.c.c.length;)Kbn(e=BB(n0(i),10))&&(c=new Ogn(e),hon(e,(hWn(),Olt),c),k_n(c),JT($V(wnn(new Rq(null,new w1((r=c).d,16)),new Hi),new qi),new Gi),ixn(r));HSn(t)}function nLn(n,t,e,i,r){var c,a,u,o,s;for(c=n.c.d.j,a=BB(Dpn(e,0),8),s=1;s<e.b;s++)o=BB(Dpn(e,s),8),r5(i,a,i.c.b,i.c),u=kL(UR(new wA(a),o),.5),UR(u,kL(new XZ(hsn(c)),r)),r5(i,u,i.c.b,i.c),a=o,c=0==t?Mln(c):Eln(c);DH(i,(Px(0!=e.b),BB(e.c.b.c,8)))}function tLn(n){return n$n(),!(Ian(OJ(EG($It,Pun(Gk(GIt,1),$Vn,93,0,[LIt])),n))>1||Ian(OJ(EG(CIt,Pun(Gk(GIt,1),$Vn,93,0,[IIt,AIt])),n))>1||Ian(OJ(EG(DIt,Pun(Gk(GIt,1),$Vn,93,0,[xIt,NIt])),n))>1)}function eLn(n,t){var e,i,r;return(e=t.Hh(n.a))&&null!=(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"affiliation")))?-1==(i=mN(r,YTn(35)))?uln(n,az(n,Utn(t.Hj())),r):0==i?uln(n,null,r.substr(1)):uln(n,r.substr(0,i),r.substr(i+1)):null}function iLn(n){var t,e;try{return null==n?zWn:Bbn(n)}catch(i){if(cL(i=lun(i),102))return t=i,e=nE(tsn(n))+"@"+($T(),(evn(n)>>>0).toString(16)),Kgn(jun(),(lM(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+nE(t.gm)+">";throw Hp(i)}}function rLn(n){switch(n.g){case 0:return new of;case 1:return new ef;case 2:return new $M;case 3:return new Cc;case 4:return new RR;case 5:return new sf;default:throw Hp(new _y("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function cLn(n,t,e){var i,r,c;for(c=new Wb(n.t);c.a<c.c.c.length;)(i=BB(n0(c),268)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&DH(t,i.b));for(r=new Wb(n.i);r.a<r.c.c.length;)(i=BB(n0(r),268)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&DH(e,i.a))}function aLn(n){var t,e,i;if(null==n.g&&(n.d=n.si(n.f),f9(n,n.d),n.c))return n.f;if(i=(t=BB(n.g[n.i-1],47)).Pb(),n.e=t,(e=n.si(i)).Ob())n.d=e,f9(n,e);else for(n.d=null;!t.Ob()&&($X(n.g,--n.i,null),0!=n.i);)t=BB(n.g[n.i-1],47);return i}function uLn(n,t){var e,i,r,c,a,u;if(r=(i=t).ak(),$xn(n.e,r)){if(r.hi()&&G3(n,r,i.dd()))return!1}else for(u=axn(n.e.Tg(),r),e=BB(n.g,119),c=0;c<n.i;++c)if(a=e[c],u.rl(a.ak()))return!Nfn(a,i)&&(BB(ovn(n,c,t),72),!0);return f9(n,t)}function oLn(n,t,i,r){var c,a,u;for(Bl(c=new $vn(n),(uSn(),Sut)),hon(c,(hWn(),dlt),t),hon(c,Plt,r),hon(c,(HXn(),ept),(QEn(),XIt)),hon(c,hlt,t.c),hon(c,flt,t.d),zxn(t,c),u=e.Math.floor(i/2),a=new Wb(c.j);a.a<a.c.c.length;)BB(n0(a),11).n.b=u;return c}function sLn(n,t){var e,i,r,c,a,u,o,s,h;for(o=sx(n.c-n.b&n.a.length-1),s=null,h=null,c=new bV(n);c.a!=c.b;)r=BB(_hn(c),10),e=(u=BB(mMn(r,(hWn(),hlt)),11))?u.i:null,i=(a=BB(mMn(r,flt),11))?a.i:null,s==e&&h==i||(GAn(o,t),s=e,h=i),o.c[o.c.length]=r;GAn(o,t)}function hLn(n){var t,i,r,c,a,u;for(t=0,i=new Wb(n.a);i.a<i.c.c.length;)for(c=new oz(ZL(lbn(BB(n0(i),10)).a.Kc(),new h));dAn(c);)n==(r=BB(U5(c),17)).d.i.c&&r.c.j==(kUn(),ICt)&&(a=g1(r.c).b,u=g1(r.d).b,t=e.Math.max(t,e.Math.abs(u-a)));return t}function fLn(n,t,e){var i,r;OTn(e,"Remove overlaps",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),i=BB(ZAn(t,(wD(),Vkt)),33),n.f=i,n.a=Evn(BB(ZAn(t,(Uyn(),Rjt)),293)),ib(n,(kW(r=MD(ZAn(t,(sWn(),LPt)))),r)),Xzn(n,t,wDn(i),e),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function lLn(n,t,i){switch(i.g){case 1:return new xI(t.a,e.Math.min(n.d.b,t.b));case 2:return new xI(e.Math.max(n.c.a,t.a),t.b);case 3:return new xI(t.a,e.Math.max(n.c.b,t.b));case 4:return new xI(e.Math.min(t.a,n.d.a),t.b)}return new xI(t.a,t.b)}function bLn(n,t,e,i){var r,c,a,u,o,s,h,f,l;for(f=i?(kUn(),ICt):(kUn(),oCt),r=!1,s=0,h=(o=t[e]).length;s<h;++s)LK(BB(mMn(u=o[s],(HXn(),ept)),98))||(a=u.e,(l=!abn(u,f).dc()&&!!a)&&(c=qEn(a),n.b=new zEn(c,i?0:c.length-1)),r|=c_n(n,u,f,l));return r}function wLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).d&&(e.d=new hK(_Ot,e,8,5)),e.d));return yX(t),new OO(t)}function dLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).e&&(e.e=new hK(_Ot,e,7,4)),e.e));return yX(t),new OO(t)}function gLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return HLt;if(45==t)return BLt}else if(3==e)return HLt;return bSn(i)}function pLn(n){var t,e,i,r;for(t=0,e=0,r=new Wb(n.j);r.a<r.c.c.length;)if(t=dG(rbn(t,q6(AV(new Rq(null,new w1((i=BB(n0(r),11)).e,16)),new Yc)))),e=dG(rbn(e,q6(AV(new Rq(null,new w1(i.g,16)),new Jc)))),t>1||e>1)return 2;return t+e==1?2:0}function vLn(n,t,e){var i,r,c,a;for(OTn(e,"ELK Force",1),qy(TD(ZAn(t,(fRn(),Wct))))||jJ(new Tw((GM(),new Dy(t)))),kkn(a=fon(t)),zon(n,BB(mMn(a,Gct),424)),r=(c=HFn(n.a,a)).Kc();r.Ob();)i=BB(r.Pb(),231),PKn(n.b,i,mcn(e,1/c.gc()));SUn(a=GUn(c)),HSn(e)}function mLn(n,t){var e,i,r;if(OTn(t,"Breaking Point Processor",1),Ozn(n),qy(TD(mMn(n,(HXn(),Gpt))))){for(i=new Wb(n.b);i.a<i.c.c.length;)for(e=0,r=new Wb(BB(n0(i),29).a);r.a<r.c.c.length;)BB(n0(r),10).p=e++;oHn(n),Hxn(n,!0),Hxn(n,!1)}HSn(t)}function yLn(n,t,e){var i,r,c,a,u;for(a=n.c,c=(e.q?e.q:(SQ(),SQ(),het)).vc().Kc();c.Ob();)r=BB(c.Pb(),42),!jE(AV(new Rq(null,new w1(a,16)),new aw(new LI(t,r)))).sd((dM(),tit))&&(cL(u=r.dd(),4)&&null!=(i=Jdn(u))&&(u=i),t.Ye(BB(r.cd(),146),u))}function kLn(n,t){var e,i,r,c;if(t){for(c=!(r=cL(n.Cb,88)||cL(n.Cb,99))&&cL(n.Cb,322),e=new AL((!t.a&&(t.a=new aG(t,VAt,t)),t.a));e.e!=e.i.gc();)if(i=lFn(BB(kpn(e),87)),r?cL(i,88):c?cL(i,148):i)return i;return r?(gWn(),d$t):(gWn(),l$t)}return null}function jLn(n,t){var e,i,r,c,a;for(OTn(t,"Constraints Postprocessor",1),c=0,r=new Wb(n.b);r.a<r.c.c.length;){for(a=0,i=new Wb(BB(n0(r),29).a);i.a<i.c.c.length;)(e=BB(n0(i),10)).k==(uSn(),Iut)&&(hon(e,(HXn(),jgt),iln(c)),hon(e,Bdt,iln(a)),++a);++c}HSn(t)}function ELn(n,t,e,i){var r,c,a,u,o,s;for(XR(u=new xI(e,i),BB(mMn(t,(qqn(),nkt)),8)),s=spn(t.b,0);s.b!=s.d.c;)UR((o=BB(b3(s),86)).e,u),DH(n.b,o);for(a=spn(t.a,0);a.b!=a.d.c;){for(r=spn((c=BB(b3(a),188)).a,0);r.b!=r.d.c;)UR(BB(b3(r),8),u);DH(n.a,c)}}function TLn(n,t,e){var i,r,c;if(!(c=Fqn((CPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));if(ZM(),!BB(c,66).Oj()&&!(c=Z1(B7(Z$t,c))))throw Hp(new _y(r6n+t.ne()+c6n));r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).ml(t,e)}function MLn(n,t){var e,i,r,c,a;for(e=new Np,r=wnn(new Rq(null,new w1(n,16)),new Ea),c=wnn(new Rq(null,new w1(n,16)),new Ta),a=M7(H6(LV(SNn(Pun(Gk(eit,1),HWn,833,0,[r,c])),new Ma))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&WB(e,new kB(a[i-1]+t,a[i]-t));return e}function SLn(n,t,e){OTn(e,"Eades radial",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),n.d=BB(ZAn(t,(wD(),Vkt)),33),n.c=Gy(MD(ZAn(t,(Uyn(),Djt)))),n.e=Evn(BB(ZAn(t,Rjt),293)),n.a=lwn(BB(ZAn(t,_jt),426)),n.b=qjn(BB(ZAn(t,$jt),340)),rjn(n),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function PLn(n,t,e){var i,r,c,a,u;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&($in(a=$3(n,(tE(),u=new Em,!!t&&BLn(u,t),u),r),R2(r,q6n)),STn(r,a),OIn(r,a),xon(n,r,a))}function ILn(n){var t,e,i,r;if(!n.j){if(r=new Co,null==(t=P$t).a.zc(n,t)){for(i=new AL(kY(n));i.e!=i.i.gc();)pX(r,ILn(e=BB(kpn(i),26))),f9(r,e);t.a.Bc(n)}chn(r),n.j=new NO((BB(Wtn(QQ((QX(),t$t).o),11),18),r.i),r.g),P5(n).b&=-33}return n.j}function CLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return GLt;if(45==t)return qLt}else if(3==e)return GLt;return new Dv(i)}function OLn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?gin(e):0==t&&0!=i&&0==e?gin(i)+22:0!=t&&0==i&&0==e?gin(t)+44:-1}function ALn(n,t){var e,i,r,c;for(OTn(t,"Edge joining",1),e=qy(TD(mMn(n,(HXn(),Dpt)))),i=new Wb(n.b);i.a<i.c.c.length;)for(c=new M2(BB(n0(i),29).a,0);c.b<c.d.gc();)Px(c.b<c.d.gc()),(r=BB(c.d.Xb(c.c=c.b++),10)).k==(uSn(),Put)&&(rGn(r,e),fW(c));HSn(t)}function $Ln(n,t,e){var i;if(h2(n.b),IU(n.b,(Pbn(),HEt),(OM(),GTt)),IU(n.b,qEt,t.g),IU(n.b,GEt,t.a),n.a=$qn(n.b,t),OTn(e,"Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),51).pf(t,mcn(e,1));HSn(e)}function LLn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function NLn(n){var t,i,r,c,a,u,o,s,h,f;for(i=n.o,t=n.p,u=DWn,c=_Vn,o=DWn,a=_Vn,h=0;h<i;++h)for(f=0;f<t;++f)vmn(n,h,f)&&(u=e.Math.min(u,h),c=e.Math.max(c,h),o=e.Math.min(o,f),a=e.Math.max(a,f));return s=c-u+1,r=a-o+1,new VV(iln(u),iln(o),iln(s),iln(r))}function xLn(n,t){var e,i,r,c;for(Px((c=new M2(n,0)).b<c.d.gc()),e=BB(c.d.Xb(c.c=c.b++),140);c.b<c.d.gc();)Px(c.b<c.d.gc()),r=new mH((i=BB(c.d.Xb(c.c=c.b++),140)).c,e.d,t),Px(c.b>0),c.a.Xb(c.c=--c.b),yR(c,r),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function DLn(n){var t,e,i,r,c;for(i=BB(mMn(n,(hWn(),Kft)),11),c=new Wb(n.j);c.a<c.c.c.length;){for(e=new Wb((r=BB(n0(c),11)).g);e.a<e.c.c.length;)return MZ(BB(n0(e),17),i),r;for(t=new Wb(r.e);t.a<t.c.c.length;)return SZ(BB(n0(t),17),i),r}return null}function RLn(n,t,i){var r,c;Vhn(r=fan(i.q.getTime()),0)<0?(c=VVn-dG(ldn(j7(r),VVn)))==VVn&&(c=0):c=dG(ldn(r,VVn)),1==t?xX(n,48+(c=e.Math.min((c+50)/100|0,9))&QVn):2==t?Enn(n,c=e.Math.min((c+5)/10|0,99),2):(Enn(n,c,3),t>3&&Enn(n,0,t-3))}function KLn(n){var t,e,i,r;return GC(mMn(n,(HXn(),sgt)))===GC((ufn(),pIt))?!n.e&&GC(mMn(n,Rdt))!==GC((Kan(),kft)):(i=BB(mMn(n,Kdt),292),r=qy(TD(mMn(n,Hdt)))||GC(mMn(n,qdt))===GC((Oin(),sht)),t=BB(mMn(n,Ddt),19).a,e=n.a.c.length,!r&&i!=(Kan(),kft)&&(0==t||t>e))}function _Ln(n){var t,e;for(e=0;e<n.c.length&&!(sq((l1(e,n.c.length),BB(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(sq((l1(t,n.c.length),BB(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function FLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(vkn(n,t))throw Hp(new _y(w6n+ROn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,6,i)),(i=QD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,6,t,t))}function BLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(vkn(n,t))throw Hp(new _y(w6n+URn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?fkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,9,i)),(i=YD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,9,t,t))}function HLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+lHn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Mkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,12,i)),(i=VD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function qLn(n){var t,e,i,r,c;if(i=Ckn(n),null==(c=n.j)&&i)return n.$j()?null:i.zj();if(cL(i,148)){if((e=i.Aj())&&(r=e.Nh())!=n.i){if((t=BB(i,148)).Ej())try{n.g=r.Kh(t,c)}catch(a){if(!cL(a=lun(a),78))throw Hp(a);n.g=null}n.i=r}return n.g}return null}function GLn(n){var t;return WB(t=new Np,new xS(new xI(n.c,n.d),new xI(n.c+n.b,n.d))),WB(t,new xS(new xI(n.c,n.d),new xI(n.c,n.d+n.a))),WB(t,new xS(new xI(n.c+n.b,n.d+n.a),new xI(n.c+n.b,n.d))),WB(t,new xS(new xI(n.c+n.b,n.d+n.a),new xI(n.c,n.d+n.a))),t}function zLn(n,t,e,i){var r,c,a;if(a=Ajn(t,e),i.c[i.c.length]=t,-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new oz(ZL(hbn(a).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&(b5(r)||r.c.i.c!=r.d.i.c)&&r!=t)return zLn(n,r,a,i);return i}function ULn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=BB(r.Pb(),79),!BB(RX(n.b,i),266)&&(JJ(PMn(i))==JJ(OMn(i))?tDn(n,i,e):PMn(i)==JJ(OMn(i))?null==RX(n.c,i)&&null!=RX(n.b,OMn(i))&&rzn(n,i,e,!1):null==RX(n.d,i)&&null!=RX(n.b,PMn(i))&&rzn(n,i,e,!0))}function XLn(n,t){var e,i,r,c,a,u,o;for(r=n.Kc();r.Ob();)for(i=BB(r.Pb(),10),IZ(u=new ISn,i),qIn(u,(kUn(),oCt)),hon(u,(hWn(),jlt),(hN(),!0)),a=t.Kc();a.Ob();)c=BB(a.Pb(),10),IZ(o=new ISn,c),qIn(o,ICt),hon(o,jlt,!0),hon(e=new wY,jlt,!0),SZ(e,u),MZ(e,o)}function WLn(n,t,e,i){var r,c,a,u;r=Adn(n,t,e),c=Adn(n,e,t),a=BB(RX(n.c,t),112),u=BB(RX(n.c,e),112),r<c?new zZ((O6(),Myt),a,u,c-r):c<r?new zZ((O6(),Myt),u,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new zZ((O6(),Myt),a,u,0),new zZ(Myt,u,a,0))}function VLn(n,t){var e,i,r,c,a,u;for(r=0,a=new Wb(t.a);a.a<a.c.c.length;)for(r+=(c=BB(n0(a),10)).o.b+c.d.a+c.d.d+n.e,i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)(e=BB(U5(i),17)).c.i.k==(uSn(),Cut)&&(r+=(u=BB(mMn(e.c.i,(hWn(),dlt)),10)).o.b+u.d.a+u.d.d);return r}function QLn(n,t,e){var i,r,c,a,u,o,s;for(c=new Np,OBn(n,s=new YT,a=new YT,t),Ezn(n,s,a,t,e),o=new Wb(n);o.a<o.c.c.length;)for(r=new Wb((u=BB(n0(o),112)).k);r.a<r.c.c.length;)i=BB(n0(r),129),(!t||i.c==(O6(),Tyt))&&u.g>i.b.g&&(c.c[c.c.length]=i);return c}function YLn(){YLn=O,DEt=new jI("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),xEt=new jI("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KEt=new jI("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),REt=new jI("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),_Et=new jI("WHOLE_DRAWING",4)}function JLn(n,t){if(cL(t,239))return hln(n,BB(t,33));if(cL(t,186))return Dln(n,BB(t,118));if(cL(t,354))return tQ(n,BB(t,137));if(cL(t,352))return JFn(n,BB(t,79));if(t)return null;throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function ZLn(n){var t,e,i,r,c,a,u;for(c=new YT,r=new Wb(n.d.a);r.a<r.c.c.length;)0==(i=BB(n0(r),121)).b.a.c.length&&r5(c,i,c.c.b,c.c);if(c.b>1)for(t=AN((e=new qv,++n.b,e),n.d),u=spn(c,0);u.b!=u.d.c;)a=BB(b3(u),121),UNn(aM(cM(uM(rM(new Hv,1),0),t),a))}function nNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(vkn(n,t))throw Hp(new _y(w6n+zRn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,10,i)),(i=zR(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,t,t))}function tNn(n){var t,e,i,r;for(i=new usn(new Pb(n.b).a);i.b;)r=BB((e=ten(i)).cd(),11),hon(t=BB(e.dd(),10),(hWn(),dlt),r),hon(r,Elt,t),hon(r,elt,(hN(),!0)),qIn(r,BB(mMn(t,Qft),61)),mMn(t,Qft),hon(r.i,(HXn(),ept),(QEn(),VIt)),BB(mMn(vW(r.i),Zft),21).Fc((bDn(),dft))}function eNn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Wb(n.d.i.j);c.a<c.c.c.length;)i+=BB(n0(c),11).e.c.length;else i=1;if(n.d)for(c=new Wb(n.c.i.j);c.a<c.c.c.length;)r+=BB(n0(c),11).g.c.length;else r=1;return(e+t)/2+.4*IJ(HH(r-i))*(e-t)}function iNn(n){var t,e;if(LEn(),n.Hc((kUn(),PCt)))throw Hp(new _y("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return Mst;case 2:return t=n.Hc(oCt)&&n.Hc(ICt),e=n.Hc(sCt)&&n.Hc(SCt),t||e?Ist:Pst;case 3:return Sst;case 4:return Tst;default:return null}}function rNn(n,t,e){var i,r,c,a;for(OTn(e,"Breaking Point Removing",1),n.a=BB(mMn(t,(HXn(),Zdt)),218),r=new Wb(t.b);r.a<r.c.c.length;)for(a=new Wb(a0(BB(n0(r),29).a));a.a<a.c.c.length;)Jnn(c=BB(n0(a),10))&&!(i=BB(mMn(c,(hWn(),Rft)),305)).d&&zUn(n,i);HSn(e)}function cNn(n,t,e){return jDn(),(!Dcn(n,t)||!Dcn(n,e))&&(mzn(new xI(n.c,n.d),new xI(n.c+n.b,n.d),t,e)||mzn(new xI(n.c+n.b,n.d),new xI(n.c+n.b,n.d+n.a),t,e)||mzn(new xI(n.c+n.b,n.d+n.a),new xI(n.c,n.d+n.a),t,e)||mzn(new xI(n.c,n.d+n.a),new xI(n.c,n.d),t,e))}function aNn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=SD(n.Xb(e)))?null==t:mK(c.substr(0,3),"!##")?null!=t&&(r=t.length,!mK(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!mK(S7n,t):mK(c,P7n)&&!mK(S7n,t)||mK(c,t))return!0;return!1}function uNn(n,t,e,i){var r,c,a,u,o,s;for(a=n.j.c.length,o=x8(art,rJn,306,a,0,1),u=0;u<a;u++)(c=BB(xq(n.j,u),11)).p=u,o[u]=hOn(mAn(c),e,i);for(VNn(n,o,e,t,i),s=new xp,r=0;r<o.length;r++)o[r]&&VW(s,BB(xq(n.j,r),11),o[r]);s.f.c+s.g.c!=0&&(hon(n,(hWn(),zft),s),ASn(n,o))}function oNn(n,t,e){var i,r;for(i=new Wb(n.a.b);i.a<i.c.c.length;)if((r=f2(BB(n0(i),57)))&&r.k==(uSn(),Mut))switch(BB(mMn(r,(hWn(),Qft)),61).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function sNn(){sNn=O,Cvt=new HP(QZn,0),Tvt=new HP("NIKOLOV",1),Pvt=new HP("NIKOLOV_PIXEL",2),Mvt=new HP("NIKOLOV_IMPROVED",3),Svt=new HP("NIKOLOV_IMPROVED_PIXEL",4),Evt=new HP("DUMMYNODE_PERCENTAGE",5),Ivt=new HP("NODECOUNT_PERCENTAGE",6),Ovt=new HP("NO_BOUNDARY",7)}function hNn(n,t,e){var i,r,c;if(!(r=BB(ZAn(t,(SMn(),UMt)),19))&&(r=iln(0)),!(c=BB(ZAn(e,UMt),19))&&(c=iln(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=Pln(t.j,e.j)))return i;if(0!=(i=Pln(t.i,e.i)))return i}return Pln(t.g*t.f,e.g*e.f)}function fNn(n,t){var e,i,r,c,a,u,o,s,h,f;if(++n.e,t>(o=null==n.d?0:n.d.length)){for(h=n.d,n.d=x8(oAt,c9n,63,2*o+4,0,1),c=0;c<o;++c)if(s=h[c])for(i=s.g,f=s.i,u=0;u<f;++u)a=eR(n,(r=BB(i[u],133)).Sh()),!(e=n.d[a])&&(e=n.d[a]=n.uj()),e.Fc(r);return!0}return!1}function lNn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak()))throw Hp(new _y(C7n));sln(n,t,e)}function bNn(n,t){var e,i,r,c,a,u;for(e=BB(mMn(t,(hWn(),Xft)),21),a=BB(h6((RXn(),fut),e),21),u=BB(h6(put,e),21),c=a.Kc();c.Ob();)if(i=BB(c.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;for(r=u.Kc();r.Ob();)if(i=BB(r.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;return!0}function wNn(n,t){var e,i,r;for(OTn(t,"Partition postprocessing",1),e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)for(r=new Wb(BB(n0(i),10).j);r.a<r.c.c.length;)qy(TD(mMn(BB(n0(r),11),(hWn(),jlt))))&&AU(r);HSn(t)}function dNn(n,t){var e,i,r,c,a,u,o;if(1==n.a.c.length)return FSn(BB(xq(n.a,0),187),t);for(r=cfn(n),a=0,u=n.d,i=r,o=n.d,c=(u-i)/2+i;i+1<u;){for(a=0,e=new Wb(n.a);e.a<e.c.c.length;)a+=cHn(BB(n0(e),187),c,!1).a;a<t?(o=c,u=c):i=c,c=(u-i)/2+i}return o}function gNn(n){var t,e,i,r;return isNaN(n)?(X7(),gtt):n<-0x8000000000000000?(X7(),wtt):n>=0x8000000000000000?(X7(),btt):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=OQn&&(n-=(e=IJ(n/OQn))*OQn),t=0,n>=CQn&&(n-=(t=IJ(n/CQn))*CQn),r=M$(IJ(n),t,e),i&&Oon(r),r)}function pNn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((lCn(),eCt)),c=0,r=new Wb(n.e.Cf());r.a<r.c.c.length;){if((i=BB(n0(r),838)).Hf()==(kUn(),PCt))throw Hp(new _y("Label and node size calculator can only be used with ports that have port sides assigned."));i.vf(c++),Whn(n,i,e)}}function vNn(n,t){var e,i,r,c;return(i=t.Hh(n.a))&&(!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),null!=(e=SD(cdn(i.b,J9n)))&&cL(c=-1==(r=e.lastIndexOf("#"))?uD(n,t.Aj(),e):0==r?M9(n,null,e.substr(1)):M9(n,e.substr(0,r),e.substr(r+1)),148))?BB(c,148):null}function mNn(n,t){var e,i,r,c;return(e=t.Hh(n.a))&&(!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),null!=(r=SD(cdn(e.b,k7n)))&&cL(c=-1==(i=r.lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148))?BB(c,148):null}function yNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),307)).j=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),57)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),57)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function kNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),189)).f=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),81)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),81)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function jNn(n){var t,i,r;return i=BB(n.a,19).a,r=BB(n.b,19).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new rC(iln(i+1),iln(r)):i==t&&r<t?new rC(iln(i),iln(r+1)):i>=-t&&r==t?new rC(iln(i-1),iln(r)):new rC(iln(i),iln(r-1))}function ENn(){return lWn(),Pun(Gk(ust,1),$Vn,77,0,[rot,tot,cot,kot,Fot,Mot,Uot,Oot,Kot,got,Not,Cot,_ot,lot,Wot,Vut,Lot,Hot,jot,Bot,Qot,Dot,Qut,Rot,Yot,Got,Vot,Eot,sot,Tot,yot,Xot,Zut,uot,Pot,Jut,Iot,vot,bot,Aot,dot,eot,not,mot,wot,$ot,zot,Yut,xot,pot,Sot,hot,oot,qot,aot,fot,iot])}function TNn(n,t,e){n.d=0,n.b=0,t.k==(uSn(),Cut)&&e.k==Cut&&BB(mMn(t,(hWn(),dlt)),10)==BB(mMn(e,dlt),10)&&(S7(t).j==(kUn(),sCt)?q$n(n,t,e):q$n(n,e,t)),t.k==Cut&&e.k==Put?S7(t).j==(kUn(),sCt)?n.d=1:n.b=1:e.k==Cut&&t.k==Put&&(S7(e).j==(kUn(),sCt)?n.b=1:n.d=1),umn(n,t,e)}function MNn(n){var t,e,i,r,c;return c=ATn(n),null!=n.a&&AH(c,"category",n.a),!WE(new Ib(n.d))&&(rtn(c,"knownOptions",i=new Il),t=new ep(i),e5(new Ib(n.d),t)),!WE(n.g)&&(rtn(c,"supportedFeatures",r=new Il),e=new ip(r),e5(n.g,e)),c}function SNn(n){var t,e,i,r,c,a,u,o;for(t=336,e=0,r=new sR(n.length),u=0,o=(a=n).length;u<o;++u)Qln(c=a[u]),EW(c),i=c.a,WB(r.a,yX(i)),t&=i.qd(),e=Ysn(e,i.rd());return BB(BB(XU(new Rq(null,qTn(new w1((WX(),Nwn(r.a)),16),new k,t,e)),new El(n)),670),833)}function PNn(n,t){var e;n.d&&(t.c!=n.e.c||fcn(n.e.b,t.b))&&(WB(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),nA(t.b)?n.c=t:n.b=t,(t.b==(Aun(),Zat)&&!t.a||t.b==nut&&t.a||t.b==tut&&t.a||t.b==eut&&!t.a)&&n.c&&n.b&&(e=new UV(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function INn(n){var t;if(Ym.call(this),this.i=new lu,this.g=n,this.f=BB(n.e&&n.e(),9).length,0==this.f)throw Hp(new _y("There must be at least one phase in the phase enumeration."));this.c=new YK(t=BB(Vj(this.g),9),BB(SR(t,t.length),9),0),this.a=new B2,this.b=new xp}function CNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(vkn(n,t))throw Hp(new _y(w6n+cPn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,1,DOt,i)),(i=VG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,t,t))}function ONn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+Vfn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?bkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,0,BOt,i)),(i=QG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function ANn(n,t){var e,i,r,c,a,u,o,s,h;return $On(),t.d>n.d&&(u=n,n=t,t=u),t.d<63?Xxn(n,t):(s=z5(n,a=(-2&n.d)<<4),h=z5(t,a),i=uBn(n,G5(s,a)),r=uBn(t,G5(h,a)),o=ANn(s,h),e=ANn(i,r),c=G5(c=$Hn($Hn(c=ANn(uBn(s,i),uBn(r,h)),o),e),a),$Hn($Hn(o=G5(o,a<<1),c),e))}function $Nn(n,t,e){var i,r,c,a,u;for(a=Lfn(n,e),u=x8(Out,a1n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)qy(TD(mMn(r=BB(c.Pb(),11),(hWn(),elt))))&&(u[i++]=BB(mMn(r,Elt),10));if(i<t.length)throw Hp(new Fy("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return u}function LNn(n,t){var e,i,r,c,a,u;if(!n.tb){for(!n.rb&&(n.rb=new Jz(n,HAt,n)),u=new XT((c=n.rb).i),r=new AL(c);r.e!=r.i.gc();)i=BB(kpn(r),138),(e=BB(null==(a=i.ne())?jIn(u.f,null,i):ubn(u.g,a,i),138))&&(null==a?jIn(u.f,null,e):ubn(u.g,a,e));n.tb=u}return BB(SJ(n.tb,t),138)}function NNn(n,t){var e,i,r,c,a;if((null==n.i&&qFn(n),n.i).length,!n.p){for(a=new XT(1+(3*n.g.i/2|0)),r=new ax(n.g);r.e!=r.i.gc();)i=BB(jpn(r),170),(e=BB(null==(c=i.ne())?jIn(a.f,null,i):ubn(a.g,c,i),170))&&(null==c?jIn(a.f,null,e):ubn(a.g,c,e));n.p=a}return BB(SJ(n.p,t),170)}function xNn(n,t,e,i,r){var c,a,u,o;for(wgn(i+IY(e,e.$d()),r),tW(t,Lwn(e)),(c=e.f)&&xNn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=x8(Jnt,sVn,78,0,0,1)),u=0,o=(a=e.k).length;u<o;++u)xNn(n,t,a[u],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function DNn(n,t,e,i){var r,c,a,u;for(a=(u=t.e).length,c=t.q._f(u,e?0:a-1,e),c|=gRn(n,u[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.Sf(u,r,e,i&&!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,(hWn(),Clt))))),c|=t.q._f(u,r,e),c|=gRn(n,u[r],e,i);return TU(n.c,t),c}function RNn(n,t,e){var i,r,c,a,u,o,s,h;for(s=0,h=(o=C2(n.j)).length;s<h;++s){if(u=o[s],e==(ain(),Hvt)||e==Gvt)for(c=0,a=(r=Z0(u.g)).length;c<a;++c)OSn(t,i=r[c])&&tBn(i,!0);if(e==qvt||e==Gvt)for(c=0,a=(r=Z0(u.e)).length;c<a;++c)CSn(t,i=r[c])&&tBn(i,!0)}}function KNn(n){var t,e;switch(t=null,e=null,eEn(n).g){case 1:kUn(),t=oCt,e=ICt;break;case 2:kUn(),t=SCt,e=sCt;break;case 3:kUn(),t=ICt,e=oCt;break;case 4:kUn(),t=sCt,e=SCt}Gl(n,BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)),ql(n,BB($N(Cz(BB(h6(n.k,e),15).Oc(),Qst)),113))}function _Nn(n){var t,e,i,r,c,a;if((r=BB(xq(n.j,0),11)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(r),new Gw(r)])));dAn(i);)a+=(e=BB(U5(i),11)).i.n.a+e.n.a+e.a.a;c=(t=BB(mMn(n,(HXn(),npt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function FNn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)e=BB(n0(i),221),LG(BB(e.b,65),XR(B$(BB(t.b,65).c),BB(t.b,65).a)),(r=Y_n(BB(t.b,65).b,BB(e.b,65).b))>1&&(n.a=!0),NG(BB(e.b,65),UR(B$(BB(t.b,65).c),kL(XR(B$(BB(e.b,65).a),BB(t.b,65).a),r))),QZ(n,t),FNn(n,e)}function BNn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),189)).e=0,e.d.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),189)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),81).f.Kc();a.Ob();)(c=BB(a.Pb(),81)).d!=e&&(TU(e.d,c),++c.d.e)}function HNn(n){var t,e,i,r,c,a,u,o;for(e=0,t=o=n.j.c.length,r=2*o,u=new Wb(n.j);u.a<u.c.c.length;)switch((a=BB(n0(u),11)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}SQ(),m$(n.j,new bi)}function qNn(n){var t,e;e=null,t=BB(xq(n.g,0),17);do{if(Lx(e=t.d.i,(hWn(),flt)))return BB(mMn(e,flt),11).i;if(e.k!=(uSn(),Iut)&&dAn(new oz(ZL(lbn(e).a.Kc(),new h))))t=BB(U5(new oz(ZL(lbn(e).a.Kc(),new h))),17);else if(e.k!=Iut)return null}while(e&&e.k!=(uSn(),Iut));return e}function GNn(n,t){var e,i,r,c,a,u,o,s,h;for(u=t.j,a=t.g,o=BB(xq(u,u.c.length-1),113),l1(0,u.c.length),s=Zmn(n,a,o,h=BB(u.c[0],113)),c=1;c<u.c.length;c++)l1(c-1,u.c.length),e=BB(u.c[c-1],113),l1(c,u.c.length),(i=Zmn(n,a,e,r=BB(u.c[c],113)))>s&&(o=e,h=r,s=i);t.a=h,t.c=o}function zNn(n,t){var e;if(!ZU(n.b,t.b))throw Hp(new Fy("Invalid hitboxes for scanline constraint calculation."));(kun(t.b,BB(MR(n.b,t.b),57))||kun(t.b,BB(TR(n.b,t.b),57)))&&($T(),t.b),n.a[t.b.f]=BB(kK(n.b,t.b),57),(e=BB(yK(n.b,t.b),57))&&(n.a[e.f]=t.b)}function UNn(n){if(!n.a.d||!n.a.e)throw Hp(new Fy((ED(Hit),Hit.k+" must have a source and target "+(ED(qit),qit.k+" specified."))));if(n.a.d==n.a.e)throw Hp(new Fy("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return RN(n.a.d.g,n.a),RN(n.a.e.b,n.a),n.a}function XNn(n,t,e){var i,r,c,a,u,o,s;for(s=new dE(new Jd(n)),u=0,o=(a=Pun(Gk(Gut,1),u1n,11,0,[t,e])).length;u<o;++u)for(c=a[u],Mon(s.a,c,(hN(),ptt)),r=new m6(c.b);y$(r.a)||y$(r.b);)(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==i.d||ZU(s,c==i.c?i.d:i.c);return yX(s),new t_(s)}function WNn(n,t,e){var i,r,c,a,u,o;if(i=0,0!=t.b&&0!=e.b){c=spn(t,0),a=spn(e,0),u=Gy(MD(b3(c))),o=Gy(MD(b3(a))),r=!0;do{if(u>o-n.b&&u<o+n.b)return-1;u>o-n.a&&u<o+n.a&&++i,u<=o&&c.b!=c.d.c?u=Gy(MD(b3(c))):o<=u&&a.b!=a.d.c?o=Gy(MD(b3(a))):r=!1}while(r)}return i}function VNn(n,t,e,i,r){var c,a,u,o;for(o=new YK(c=BB(Vj(FCt),9),BB(SR(c,c.length),9),0),u=new Wb(n.j);u.a<u.c.c.length;)t[(a=BB(n0(u),11)).p]&&(BUn(a,t[a.p],i),orn(o,a.j));r?(GEn(n,t,(kUn(),oCt),2*e,i),GEn(n,t,ICt,2*e,i)):(GEn(n,t,(kUn(),sCt),2*e,i),GEn(n,t,SCt,2*e,i))}function QNn(n){var t,e,i,r,c;if(c=new Np,Otn(n.b,new kw(c)),n.b.c=x8(Ant,HWn,1,0,5,1),0!=c.c.length){for(l1(0,c.c.length),t=BB(c.c[0],78),e=1,i=c.c.length;e<i;++e)l1(e,c.c.length),(r=BB(c.c[e],78))!=t&>n(t,r);if(cL(t,60))throw Hp(BB(t,60));if(cL(t,289))throw Hp(BB(t,289))}}function YNn(n,t){var e,i,r,c;for(n=null==n?zWn:(kW(n),n),e=new Ck,c=0,i=0;i<t.length&&-1!=(r=n.indexOf("%s",c));)oO(e,n.substr(c,r-c)),uO(e,t[i++]),c=r+2;if(oO(e,n.substr(c)),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function JNn(n){var t,e,i,r;for(t=0,r=(i=n.length)-4,e=0;e<r;)b1(e+3,n.length),t=n.charCodeAt(e+3)+(b1(e+2,n.length),31*(n.charCodeAt(e+2)+(b1(e+1,n.length),31*(n.charCodeAt(e+1)+(b1(e,n.length),31*(n.charCodeAt(e)+31*t)))))),t|=0,e+=4;for(;e<i;)t=31*t+fV(n,e++);return t|=0}function ZNn(n){var t;for(t=new oz(ZL(lbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).d.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function nxn(n,t,i,r){var c,a,u,o,s,f,l;for(o=0,s=new Wb(n.a);s.a<s.c.c.length;){for(u=0,a=new oz(ZL(fbn(BB(n0(s),10)).a.Kc(),new h));dAn(a);)f=g1((c=BB(U5(a),17)).c).b,l=g1(c.d).b,u=e.Math.max(u,e.Math.abs(l-f));o=e.Math.max(o,u)}return r*e.Math.min(1,t/i)*o}function txn(n){var t;return t=new Pk,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&k6n)&&(t.a+=","),Uy(t.a)}function exn(n,t){var e,i,r;for(OTn(t,"Resize child graph to fit parent.",1),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),29),gun(n.a,e.a),e.a.c=x8(Ant,HWn,1,0,5,1);for(r=new Wb(n.a);r.a<r.c.c.length;)PZ(BB(n0(r),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),Bxn(n),n.e&&S_n(n.e,n),HSn(t)}function ixn(n){var t,e,i,r,c,a,u;if(r=(i=n.b).e,c=LK(BB(mMn(i,(HXn(),ept)),98)),e=!!r&&BB(mMn(r,(hWn(),Zft)),21).Hc((bDn(),lft)),!c&&!e)for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(a=BB(t.dd(),113)).a&&(IZ(a.d,null),a.c=!0,n.a=!0)}function rxn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(f=-1,l=0,s=0,h=(o=n).length;s<h;++s){for(a=0,u=(c=o[s]).length;a<u;++a)for(r=c[a],t=new pP(-1==f?n[0]:n[f],okn(r)),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Nz(t,BB(xq(r.j,e),11),BB(xq(r.j,i),11))>0&&++l;++f}return l}function cxn(n,t){var e,i,r,c,a;for(a=BB(mMn(t,(IAn(),Lkt)),425),c=spn(t.b,0);c.b!=c.d.c;)if(r=BB(b3(c),86),0==n.b[r.g]){switch(a.g){case 0:Qvn(n,r);break;case 1:HAn(n,r)}n.b[r.g]=2}for(i=spn(n.a,0);i.b!=i.d.c;)ywn((e=BB(b3(i),188)).b.d,e,!0),ywn(e.c.b,e,!0);hon(t,(qqn(),lkt),n.a)}function axn(n,t){var e,i,r,c;return ZM(),t?t==(Uqn(),KLt)||(t==yLt||t==vLt||t==mLt)&&n!=pLt?new cUn(n,t):((e=(i=BB(t,677)).pk())||(kV(B7((CPn(),Z$t),t)),e=i.pk()),!e.i&&(e.i=new xp),!(r=BB(qC(AY((c=e.i).f,n)),1942))&&VW(c,n,r=new cUn(n,t)),r):aLt}function uxn(n,t){var e,i,r,c,a,u,o,s;for(u=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).a,s=n.i.n.b,r=0,c=(i=Z0(n.e)).length;r<c;++r)MZ(e=i[r],u),fO(e.a,new xI(o,s)),t&&((a=BB(mMn(e,(HXn(),vgt)),74))||(a=new km,hon(e,vgt,a)),DH(a,new xI(o,s)))}function oxn(n,t){var e,i,r,c,a,u,o,s;for(i=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,u=(c=Z0(n.g)).length;a<u;++a)SZ(r=c[a],i),hO(r.a,new xI(o,s)),t&&((e=BB(mMn(r,(HXn(),vgt)),74))||(e=new km,hon(r,vgt,e)),DH(e,new xI(o,s)))}function sxn(n,t){var e,i,r,c,a;for(n.b=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230),n.e=c0(n.d),c=new YT,r=u6(Pun(Gk(jut,1),JZn,37,0,[t])),a=0;a<r.c.length;)l1(a,r.c.length),(i=BB(r.c[a],37)).p=a++,gun(r,(e=new IGn(i,n.a,n.b)).b),WB(n.b,e),e.s&&nX(spn(c,0),e);return n.c=new Rv,c}function hxn(n,t){var e,i,r,c,a,u;for(a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)(e=(c=BB(a.Pb(),111)).c?VH(c.c):0)>0?c.a?e>(u=c.b.rf().a)&&(r=(e-u)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:Hz(n.u)&&((i=_Tn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.rf().a&&(c.d.c=i.c+i.b-c.b.rf().a))}function fxn(n,t){var e,i;for(OTn(t,"Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Wb(n.b);i.a<i.c.c.length;)e|=null!=$fn(ytn(AV(AV(new Rq(null,new w1(BB(n0(i),29).a,16)),new Qi),new Yi),new Ji),new Zi).a;e&&hon(n,(hWn(),alt),(hN(),!0)),HSn(t)}function lxn(n,t,e){var i,r,c;if(!(r=e)&&(r=new Xm),OTn(r,"Layout",n.a.c.length),qy(TD(mMn(t,(IAn(),Ekt)))))for($T(),i=0;i<n.a.c.length;i++)i++,nE(tsn(BB(xq(n.a,i),51)));for(c=new Wb(n.a);c.a<c.c.c.length;)BB(n0(c),51).pf(t,mcn(r,1));HSn(r)}function bxn(n){var t,i;if(t=BB(n.a,19).a,i=BB(n.b,19).a,t>=0){if(t==i)return new rC(iln(-t-1),iln(-t-1));if(t==-i)return new rC(iln(-t),iln(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new rC(iln(-t),iln(t<0?i:i+1)):new rC(iln(t+1),iln(i))}function wxn(n){var t,e;e=BB(mMn(n,(HXn(),kgt)),163),t=BB(mMn(n,(hWn(),ilt)),303),e==(Tbn(),Flt)?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Ift))):e==Hlt?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Sft))):t==(z7(),Ift)?(hon(n,kgt,Flt),hon(n,ilt,Pft)):t==Sft&&(hon(n,kgt,Hlt),hon(n,ilt,Pft))}function dxn(){dxn=O,jyt=new oa,vyt=dq(new B2,(yMn(),_at),(lWn(),jot)),kyt=WG(dq(new B2,_at,Dot),Bat,xot),Eyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),myt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),yyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function gxn(){gxn=O,Iyt=dq(WG(new B2,(yMn(),Bat),(lWn(),hot)),_at,jot),$yt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),Cyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),Ayt=dq(dq(new B2,_at,Dot),Bat,xot),Oyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function pxn(n,t,e,i,r){var c,a;(b5(t)||t.c.i.c!=t.d.i.c)&&nrn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])),e)||b5(t)||(t.c==r?Kx(t.a,0,new wA(e)):DH(t.a,new wA(e)),i&&!FT(n.a,e)&&((a=BB(mMn(t,(HXn(),vgt)),74))||(a=new km,hon(t,vgt,a)),r5(a,c=new wA(e),a.c.b,a.c),TU(n.a,c)))}function vxn(n){var t;for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).c.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function mxn(n,t,e){var i,r,c,a,u,o;if(0==(r=pbn(254&n.Db)))n.Eb=e;else{if(1==r)a=x8(Ant,HWn,1,2,5,1),0==Rmn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=x8(Ant,HWn,1,r+1,5,1),c=een(n.Eb),i=2,u=0,o=0;i<=128;i<<=1)i==t?a[o++]=e:0!=(n.Db&i)&&(a[o++]=c[u++]);n.Eb=a}n.Db|=t}function yxn(n,t,i){var r,c,a,u;for(this.b=new Np,c=0,r=0,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),167),i&&KBn(a),WB(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=BB(xq(this.b,0),167)).o,r+=a.p),c*=2,r*=2,t>1?c=IJ(e.Math.ceil(c*t)):r=IJ(e.Math.ceil(r/t)),this.a=new qwn(c,r)}function kxn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=BB(RX(n.f,t.A),57)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=BB(RX(n.f,i.C),57)).d.c,++f):s=i.a.c,w=d+(o=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(u=BB(a.Xb(l),128)).a.b,u.a.c=w-g/2,w+=o}function jxn(n,t,e,i,r,c){var a,u,o,s,h,f;for(s=e.c.length,c&&(n.c=x8(ANt,hQn,25,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(u=t[a],o=i==(kUn(),oCt)?r?abn(u,i):ean(abn(u,i)):r?ean(abn(u,i)):abn(u,i),c&&(n.c[u.p]=o.gc()),f=o.Kc();f.Ob();)h=BB(f.Pb(),11),n.d[h.p]=s++;gun(e,o)}}function Exn(n,t,e){var i,r,c,a,u,o,s,h;for(c=Gy(MD(n.b.Kc().Pb())),s=Gy(MD(Wan(t.b))),i=kL(B$(n.a),s-e),r=kL(B$(t.a),e-c),kL(h=UR(i,r),1/(s-c)),this.a=h,this.b=new Np,u=!0,(a=n.b.Kc()).Pb();a.Ob();)o=Gy(MD(a.Pb())),u&&o-e>D3n&&(this.b.Fc(e),u=!1),this.b.Fc(o);u&&this.b.Fc(e)}function Txn(n){var t,e,i,r;if(hKn(n,n.n),n.d.c.length>0){for(nk(n.c);pAn(n,BB(n0(new Wb(n.e.a)),121))<n.e.a.c.length;){for(r=(t=Ryn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Wb(n.e.a);i.a<i.c.c.length;)(e=BB(n0(i),121)).j&&(e.e+=r);nk(n.c)}nk(n.c),pCn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}}function Mxn(n,t){var e,i,r,c,a;for(r=BB(h6(n.a,(LEn(),Mst)),15).Kc();r.Ob();)switch(i=BB(r.Pb(),101),e=BB(xq(i.j,0),113).d.j,m$(c=new t_(i.j),new Jr),t.g){case 1:NEn(n,c,e,(Irn(),Dst),1);break;case 0:NEn(n,new s1(c,0,a=_Ln(c)),e,(Irn(),Dst),0),NEn(n,new s1(c,a,c.c.length),e,Dst,1)}}function Sxn(n,t){var e,i;if(Nun(),e=T5(cin(),t.tg())){if(i=e.j,cL(n,239))return rZ(BB(n,33))?SN(i,(rpn(),sMt))||SN(i,hMt):SN(i,(rpn(),sMt));if(cL(n,352))return SN(i,(rpn(),uMt));if(cL(n,186))return SN(i,(rpn(),fMt));if(cL(n,354))return SN(i,(rpn(),oMt))}return!0}function Pxn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak())&&a!=t)throw Hp(new _y(C7n));return BB(ovn(n,t,e),72)}function Ixn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.Zd();return n&&n.Xd()}},suppressed:{get:function(){return e.Yd()}}})}catch(i){}}function Cxn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(ODn(),Ytt):(ODn(),eet);if(c=n.d-i,QSn(r=x8(ANt,hQn,25,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return X0(a=new lU(n.e,c,r)),a}function Oxn(n){var t,e,i,r;return e=new $w(r=WJ(n)),i=new Lw(r),gun(t=new Np,(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),gun(t,(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),BB(P4($V(AV(new Rq(null,new w1(t,16)),e),i),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)}function Axn(n,t,e,i){var r,c,a,u,o;if(ZM(),u=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),t),r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak()))throw Hp(new _y(C7n));sln(n,EPn(n,t,e),u?BB(i,72):Z3(t,i))}function $xn(n,t){var e,i,r;return ZM(),!!t.$j()||-2==t.Zj()&&(t==(TOn(),lLt)||t==sLt||t==hLt||t==fLt||!(Awn(r=n.Tg(),t)>=0)&&(!(e=Fqn((CPn(),Z$t),r,t))||((i=e.Zj())>1||-1==i)&&3!=DW(B7(Z$t,e))))}function Lxn(n,t,e,i){var r,c,a,u,o;return u=PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82)),JJ(u)==JJ(o)||Itn(o,u)?null:(a=XJ(t))==e?i:(c=BB(RX(n.a,a),10))&&(r=c.e)?r:null}function Nxn(n,t){var e;switch(OTn(t,"Label side selection ("+(e=BB(mMn(n,(HXn(),Jdt)),276))+")",1),e.g){case 0:TAn(n,(Xyn(),jIt));break;case 1:TAn(n,(Xyn(),EIt));break;case 2:sBn(n,(Xyn(),jIt));break;case 3:sBn(n,(Xyn(),EIt));break;case 4:uDn(n,(Xyn(),jIt));break;case 5:uDn(n,(Xyn(),EIt))}HSn(t)}function xxn(n,t,e){var i,r,c,a,u;if((c=n[lj(e,n.length)])[0].k==(uSn(),Mut))for(r=fj(e,c.length),u=t.j,i=0;i<u.c.length;i++)l1(i,u.c.length),a=BB(u.c[i],11),(e?a.j==(kUn(),oCt):a.j==(kUn(),ICt))&&qy(TD(mMn(a,(hWn(),elt))))&&(c5(u,i,BB(mMn(c[r],(hWn(),dlt)),11)),r+=e?1:-1)}function Dxn(n,t){var e,i,r,c,a;a=new Np,e=t;do{(c=BB(RX(n.b,e),128)).B=e.c,c.D=e.d,a.c[a.c.length]=c,e=BB(RX(n.k,e),17)}while(e);return l1(0,a.c.length),(i=BB(a.c[0],128)).j=!0,i.A=BB(i.d.a.ec().Kc().Pb(),17).c.i,(r=BB(xq(a,a.c.length-1),128)).q=!0,r.C=BB(r.d.a.ec().Kc().Pb(),17).d.i,a}function Rxn(n){if(null==n.g)switch(n.p){case 0:n.g=fZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.g=Pnn(D3(n));break;case 2:n.g=fun(Q1(n));break;case 3:n.g=OW(n);break;case 4:n.g=new Nb(CW(n));break;case 6:n.g=jgn(AW(n));break;case 5:n.g=iln(hJ(n));break;case 7:n.g=rln(_3(n))}return n.g}function Kxn(n){if(null==n.n)switch(n.p){case 0:n.n=lZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.n=Pnn(R3(n));break;case 2:n.n=fun(Y1(n));break;case 3:n.n=LW(n);break;case 4:n.n=new Nb(NW(n));break;case 6:n.n=jgn($W(n));break;case 5:n.n=iln(fJ(n));break;case 7:n.n=rln(K3(n))}return n.n}function _xn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),307)).g=0,e.i=0,e.e.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),307)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),57).c.Kc();a.Ob();)(c=BB(a.Pb(),57)).a!=e&&(TU(e.e,c),++c.a.g,++c.a.i)}function Fxn(n,t){var e,i,r;if(!ZU(n.a,t.b))throw Hp(new Fy("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=new Fb(new BR(new xN(new _b(n.a.a).a).b));aS(i.a.a);)if(e=BB(mx(i.a).cd(),65),eon(t.b,e))xj(n.b.a,t.b,e),r=!0;else if(r)break}function Bxn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DCt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GCt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),XBn(n,i,t)}function Hxn(n,t){var e,i,r,c,a,u,o,s;r=t?new pc:new vc,c=!1;do{for(c=!1,a=(t?ean(n.b):n.b).Kc();a.Ob();)for(s=a0(BB(a.Pb(),29).a),t||new fy(s),o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),r.Mb(u)&&(i=u,e=BB(mMn(u,(hWn(),Rft)),305),c=eRn(i,t?e.b:e.k,t,!1))}while(c)}function qxn(n,t,e){var i,r,c,a;for(OTn(e,"Longest path layering",1),n.a=t,a=n.a.a,n.b=x8(ANt,hQn,25,a.c.length,15,1),i=0,c=new Wb(a);c.a<c.c.c.length;)BB(n0(c),10).p=i,n.b[i]=-1,++i;for(r=new Wb(a);r.a<r.c.c.length;)D$n(n,BB(n0(r),10));a.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,HSn(e)}function Gxn(n,t){var e,i,r;t.a?(ZU(n.b,t.b),n.a[t.b.i]=BB(kK(n.b,t.b),81),(e=BB(yK(n.b,t.b),81))&&(n.a[e.i]=t.b)):(!!(i=BB(kK(n.b,t.b),81))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=BB(yK(n.b,t.b),81))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),MN(n.b,t.b))}function zxn(n,t){var i,r,c,a,u,o;return a=n.d,(o=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,o=0),t.o.b=o,u=e.Math.floor(o/2),qIn(r=new ISn,(kUn(),ICt)),IZ(r,t),r.n.b=u,qIn(c=new ISn,oCt),IZ(c,t),c.n.b=u,MZ(n,r),qan(i=new wY,n),hon(i,vgt,null),SZ(i,c),MZ(i,a),jFn(t,n,i),sIn(n,i),i}function Uxn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=new B2,e.Hc((bDn(),bft))&&(Jcn(t,byt),Jcn(t,dyt)),(e.Hc(dft)||qy(TD(mMn(n,(HXn(),ugt)))))&&(Jcn(t,dyt),e.Hc(gft)&&Jcn(t,gyt)),e.Hc(lft)&&Jcn(t,lyt),e.Hc(vft)&&Jcn(t,pyt),e.Hc(wft)&&Jcn(t,wyt),e.Hc(sft)&&Jcn(t,hyt),e.Hc(fft)&&Jcn(t,fyt),t}function Xxn(n,t){var e,i,r,c,a,u,o,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=dG(o=cbn(e0(n.a[0],UQn),e0(t.a[0],UQn))),0==(s=dG(jz(o,32)))?new X6(a,h):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[h,s]))):(Dfn(n.a,e,t.a,i,r=x8(ANt,hQn,25,c,15,1)),X0(u=new lU(a,c,r)),u)}function Wxn(n,t,e,i){var r,c;return t?0==(r=n.a.ue(e.d,t.d))?(i.d=pR(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=Wxn(n,t.a[c],e,i),Vy(t.a[c])&&(Vy(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):Vy(t.a[c].a[c])?t=wrn(t,1-c):Vy(t.a[c].a[1-c])&&(t=r2(t,1-c))),t):e}function Vxn(n,t,i){var r,c,a,u;c=n.i,r=n.n,Y5(n,(Dtn(),Git),c.c+r.b,i),Y5(n,Uit,c.c+c.b-r.c-i[2],i),u=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,u-=i[0]),i[2]>0&&(i[2]+=n.d,u-=i[2]),a=e.Math.max(0,u),i[1]=e.Math.max(i[1],u),Y5(n,zit,c.c+r.b+i[0]-(i[1]-u)/2,i),t==zit&&(n.c.b=a,n.c.c=c.c+r.b+(a-u)/2)}function Qxn(){this.c=x8(xNt,qQn,25,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,15,1),this.b=x8(xNt,qQn,25,Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]).length,15,1),this.a=x8(xNt,qQn,25,Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]).length,15,1),mS(this.c,RQn),mS(this.b,KQn),mS(this.a,KQn)}function Yxn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=x8(ANt,hQn,25,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=x8(ANt,hQn,25,i+2,15,1),aHn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||T$n(n)}}function Jxn(n,t,e){var i,r,c,a,u,o,s;for(s=t.d,n.a=new J6(s.c.length),n.c=new xp,u=new Wb(s);u.a<u.c.c.length;)a=BB(n0(u),101),c=new Fan(null),WB(n.a,c),VW(n.c,a,c);for(n.b=new xp,vIn(n,t),i=0;i<s.c.length-1;i++)for(o=BB(xq(t.d,i),101),r=i+1;r<s.c.length;r++)WLn(n,o,BB(xq(t.d,r),101),e)}function Zxn(n,t,e){var i,r,c,a,u,o;if(!h3(t)){for(OTn(o=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),u=new Ca,a=0,c=t.Kc();c.Ob();)i=BB(c.Pb(),86),u=Wen(Pun(Gk(xnt,1),HWn,20,0,[u,new bg(i)])),a<i.f.b&&(a=i.f.b);for(r=t.Kc();r.Ob();)hon(i=BB(r.Pb(),86),(qqn(),ukt),a);HSn(o),Zxn(n,u,e)}}function nDn(n,t){var i,r,c,a,u,o,s;for(i=KQn,uSn(),o=Iut,c=new Wb(t.a);c.a<c.c.c.length;)(a=(r=BB(n0(c),10)).k)!=Iut&&(null==(u=MD(mMn(r,(hWn(),plt))))?(i=e.Math.max(i,0),r.n.b=i+XN(n.a,a,o)):r.n.b=(kW(u),u)),s=XN(n.a,a,o),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,o=a}function tDn(n,t,e){var i,r,c;for(qan(c=new EAn(XXn(qSn(cDn(t,!1,!1)),Gy(MD(ZAn(t,(Epn(),pct))))+n.a)),t),VW(n.b,t,c),e.c[e.c.length]=c,!t.n&&(t.n=new eU(zOt,t,1,7)),r=new AL(t.n);r.e!=r.i.gc();)i=JRn(n,BB(kpn(r),137),!0,0,0),e.c[e.c.length]=i;return c}function eDn(n,t,e,i,r){var c,a,u;if(n.d&&n.d.lg(r),Dvn(n,e,BB(r.Xb(0),33),!1))return!0;if(Dvn(n,i,BB(r.Xb(r.gc()-1),33),!0))return!0;if(NMn(n,r))return!0;for(u=r.Kc();u.Ob();)for(a=BB(u.Pb(),33),c=t.Kc();c.Ob();)if(_Dn(n,a,BB(c.Pb(),33)))return!0;return!1}function iDn(n,t,e){var i,r,c,a,u,o,s,h,f;f=t.c.length;n:for(c=BB((s=n.Yg(e))>=0?n._g(s,!1,!0):cOn(n,e,!1),58).Kc();c.Ob();){for(r=BB(c.Pb(),56),h=0;h<f;++h)if(l1(h,t.c.length),o=(a=BB(t.c[h],72)).dd(),u=a.ak(),i=r.bh(u,!1),null==o?null!=i:!Nfn(o,i))continue n;return r}return null}function rDn(n,t,e,i){var r,c,a,u;for(r=BB(DSn(t,(kUn(),ICt)).Kc().Pb(),11),c=BB(DSn(t,oCt).Kc().Pb(),11),u=new Wb(n.j);u.a<u.c.c.length;){for(a=BB(n0(u),11);0!=a.e.c.length;)MZ(BB(xq(a.e,0),17),r);for(;0!=a.g.c.length;)SZ(BB(xq(a.g,0),17),c)}e||hon(t,(hWn(),hlt),null),i||hon(t,(hWn(),flt),null)}function cDn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)return qun(n);if(i=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),t&&(sqn((!i.a&&(i.a=new $L(xOt,i,5)),i.a)),Cen(i,0),Aen(i,0),Ten(i,0),Oen(i,0)),e)for(!n.a&&(n.a=new eU(FOt,n,6,6)),r=n.a;r.i>1;)fDn(r,r.i-1);return i}function aDn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Comment post-processing",1),c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),i=new Np,u=new Wb(r.a);u.a<u.c.c.length;)a=BB(n0(u),10),o=BB(mMn(a,(hWn(),Klt)),15),e=BB(mMn(a,Dft),15),(o||e)&&(Wzn(a,o,e),o&&gun(i,o),e&&gun(i,e));gun(r.a,i)}HSn(t)}function uDn(n,t){var e,i,r,c,a,u;for(e=new Lp,r=new Wb(n.b);r.a<r.c.c.length;){for(u=!0,i=0,a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)switch((c=BB(n0(a),10)).k.g){case 4:++i;case 1:w3(e,c);break;case 0:oIn(c,t);default:e.b==e.c||p_n(e,i,u,!1,t),u=!1,i=0}e.b==e.c||p_n(e,i,u,!0,t)}}function oDn(n,t){var e,i,r,c,a,u;for(r=new Np,e=0;e<=n.i;e++)(i=new HX(t)).p=n.i-e,r.c[r.c.length]=i;for(u=new Wb(n.o);u.a<u.c.c.length;)PZ(a=BB(n0(u),10),BB(xq(r,n.i-n.f[a.p]),29));for(c=new Wb(r);c.a<c.c.c.length;)0==BB(n0(c),29).a.c.length&&AU(c);t.b.c=x8(Ant,HWn,1,0,5,1),gun(t.b,r)}function sDn(n,t){var e,i,r,c,a,u;for(e=0,u=new Wb(t);u.a<u.c.c.length;){for(a=BB(n0(u),11),nhn(n.b,n.d[a.p]),r=new m6(a.b);y$(r.a)||y$(r.b);)(c=ME(n,a==(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c?i.d:i.c))>n.d[a.p]&&(e+=n5(n.b,c),d3(n.a,iln(c)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function hDn(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=BB(kpn(r),33)).a&&(i.a=new eU(UOt,i,10,11)),i.a).i||(c+=hDn(n,i,!1));if(e)for(a=JJ(t);a;)c+=(!a.a&&(a.a=new eU(UOt,a,10,11)),a.a).i,a=JJ(a);return c}function fDn(n,t){var e,i,r,c;return n.ej()?(i=null,r=n.fj(),n.ij()&&(i=n.kj(n.pi(t),null)),e=n.Zi(4,c=Lyn(n,t),null,t,r),n.bj()&&null!=c?(i=n.dj(c,i))?(i.Ei(e),i.Fi()):n.$i(e):i?(i.Ei(e),i.Fi()):n.$i(e),c):(c=Lyn(n,t),n.bj()&&null!=c&&(i=n.dj(c,null))&&i.Fi(),c)}function lDn(n){var t,i,r,c,a,u,o,s,h,f;for(h=n.a,t=new Rv,s=0,r=new Wb(n.d);r.a<r.c.c.length;){for(f=0,_rn((i=BB(n0(r),222)).b,new $n),u=spn(i.b,0);u.b!=u.d.c;)a=BB(b3(u),222),t.a._b(a)&&(c=i.c,f<(o=a.c).d+o.a+h&&f+c.a+h>o.d&&(f=o.d+o.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function bDn(){bDn=O,hft=new LP("COMMENTS",0),lft=new LP("EXTERNAL_PORTS",1),bft=new LP("HYPEREDGES",2),wft=new LP("HYPERNODES",3),dft=new LP("NON_FREE_PORTS",4),gft=new LP("NORTH_SOUTH_PORTS",5),vft=new LP(G1n,6),sft=new LP("CENTER_LABELS",7),fft=new LP("END_LABELS",8),pft=new LP("PARTITIONS",9)}function wDn(n){var t,e,i,r,c;for(r=new Np,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||(r.c[r.c.length]=c));return r}function dDn(n){var t,e,i,r,c;for(r=new Rv,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||r.a.zc(c,r));return r}function gDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function pDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function vDn(n,t,e,i,r,c){var a,u,o;if(u=32,i<0){if(t[0]>=n.length)return!1;if(43!=(u=fV(n,t[0]))&&45!=u)return!1;if(++t[0],(i=UCn(n,t))<0)return!1;45==u&&(i=-i)}return 32==u&&t[0]-e==2&&2==r.b&&(a=(o=(new AT).q.getFullYear()-sQn+sQn-80)%100,c.a=i==a,i+=100*(o/100|0)+(i<a?100:0)),c.p=i,!0}function mDn(n,t){var i,r,c;JJ(n)&&(c=BB(mMn(t,(HXn(),Fgt)),174),GC(ZAn(n,ept))===GC((QEn(),YIt))&&Ypn(n,ept,QIt),GM(),r=qzn(new Dy(JJ(n)),new JN(JJ(n)?new Dy(JJ(n)):null,n),!1,!0),orn(c,(mdn(),DCt)),(i=BB(mMn(t,Hgt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function yDn(n,t,e){var i,r,c,a,u,o;for(a=BB(mMn(n,(hWn(),nlt)),15).Kc();a.Ob();){switch(c=BB(a.Pb(),10),BB(mMn(c,(HXn(),kgt)),163).g){case 2:PZ(c,t);break;case 4:PZ(c,e)}for(r=new oz(ZL(hbn(c).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c&&i.d||(u=!i.d,o=BB(mMn(i,mlt),11),u?MZ(i,o):SZ(i,o))}}function kDn(){kDn=O,Bst=new WV(mJn,0,(kUn(),sCt),sCt),Gst=new WV(kJn,1,SCt,SCt),Fst=new WV(yJn,2,oCt,oCt),Xst=new WV(jJn,3,ICt,ICt),qst=new WV("NORTH_WEST_CORNER",4,ICt,sCt),Hst=new WV("NORTH_EAST_CORNER",5,sCt,oCt),Ust=new WV("SOUTH_WEST_CORNER",6,SCt,ICt),zst=new WV("SOUTH_EAST_CORNER",7,oCt,SCt)}function jDn(){jDn=O,MMt=Pun(Gk(LNt,1),FQn,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function EDn(n,t){var e,i,r,c,a;if(0==n.c.length)return new rC(iln(0),iln(0));for(e=(l1(0,n.c.length),BB(n.c[0],11)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(l1(++a,n.c.length),BB(n.c[a],11)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(l1(a,n.c.length),BB(n.c[a],11)).j;return new rC(iln(a),iln(r))}function TDn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=t.c.length,l1(i,t.c.length),o=(u=BB(t.c[i],286)).a.o.a,l=u.c,b=0,h=u.c;h<=u.f;h++){if(o<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)l1(c,t.c.length),(r=BB(t.c[c],286)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function MDn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=pKn(n.i)),n.j=n.i.length,QXn(n),c=Vdn(n),n.d!=n.j)throw Hp(new ak(kWn((u$(),w8n))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=BB(bW(n.g,i),584),n.f<=r.a)throw Hp(new ak(kWn((u$(),d8n))));n.g.a.c=x8(Ant,HWn,1,0,5,1)}return c}function SDn(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(mK(t,null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e;return null}function PDn(n,t){var e;switch(e=null,t.g){case 1:n.e.Xe((sWn(),ePt))&&(e=BB(n.e.We(ePt),249));break;case 3:n.e.Xe((sWn(),iPt))&&(e=BB(n.e.We(iPt),249));break;case 2:n.e.Xe((sWn(),tPt))&&(e=BB(n.e.We(tPt),249));break;case 4:n.e.Xe((sWn(),rPt))&&(e=BB(n.e.We(rPt),249))}return!e&&(e=BB(n.e.We((sWn(),ZSt)),249)),e}function IDn(n,t,e){var i,r,c,a,u,o;for(t.p=1,r=t.c,o=xwn(t,(ain(),qvt)).Kc();o.Ob();)for(i=new Wb(BB(o.Pb(),11).g);i.a<i.c.c.length;)t!=(u=BB(n0(i),17).d.i)&&u.c.p<=r.p&&((c=r.p+1)==e.b.c.length?((a=new HX(e)).p=c,WB(e.b,a),PZ(u,a)):PZ(u,a=BB(xq(e.b,c),29)),IDn(n,u,e))}function CDn(n,t,i){var r,c,a,u,o,s;for(c=i,a=0,o=new Wb(t);o.a<o.c.c.length;)Ypn(u=BB(n0(o),33),(Uyn(),Ljt),iln(c++)),s=wDn(u),r=e.Math.atan2(u.j+u.f/2,u.i+u.g/2),(r+=r<0?Z3n:0)<.7853981633974483||r>p4n?m$(s,n.b):r<=p4n&&r>v4n?m$(s,n.d):r<=v4n&&r>m4n?m$(s,n.c):r<=m4n&&m$(s,n.a),a=CDn(n,s,a);return c}function ODn(){var n;for(ODn=O,Jtt=new X6(1,1),net=new X6(1,10),eet=new X6(0,0),Ytt=new X6(-1,1),Ztt=Pun(Gk(oet,1),sVn,91,0,[eet,Jtt,new X6(1,2),new X6(1,3),new X6(1,4),new X6(1,5),new X6(1,6),new X6(1,7),new X6(1,8),new X6(1,9),net]),tet=x8(oet,sVn,91,32,0,1),n=0;n<tet.length;n++)tet[n]=npn(yz(1,n))}function ADn(n,t,e,i,r,c){var a,u,o,s;for(u=!jE(AV(n.Oc(),new aw(new Je))).sd((dM(),tit)),a=n,c==(Ffn(),HPt)&&(a=cL(a,152)?o6(BB(a,152)):cL(a,131)?BB(a,131).a:cL(a,54)?new fy(a):new IT(a)),s=a.Kc();s.Ob();)(o=BB(s.Pb(),70)).n.a=t.a,o.n.b=u?t.b+(i.b-o.o.b)/2:r?t.b:t.b+i.b-o.o.b,t.a+=o.o.a+e}function $Dn(n,t,e,i){var r,c,a,u,o;for(r=(i.c+i.a)/2,yQ(t.j),DH(t.j,r),yQ(e.e),DH(e.e,r),o=new zj,a=new Wb(n.f);a.a<a.c.c.length;)Rjn(o,t,u=BB(n0(a),129).a),Rjn(o,e,u);for(c=new Wb(n.k);c.a<c.c.c.length;)Rjn(o,t,u=BB(n0(c),129).b),Rjn(o,e,u);return o.b+=2,o.a+=LQ(t,n.q),o.a+=LQ(n.q,e),o}function LDn(n,t,e){var i,r,c,a,u;if(!h3(t)){for(OTn(u=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),a=new Aa,c=null,r=t.Kc();r.Ob();)i=BB(r.Pb(),86),a=Wen(Pun(Gk(xnt,1),HWn,20,0,[a,new bg(i)])),c&&(hon(c,(qqn(),bkt),i),hon(i,ckt,c),G8(i)==G8(c)&&(hon(c,wkt,i),hon(i,akt,c))),c=i;HSn(u),LDn(n,a,e)}}function NDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.d,n.f==(G7(),rrt)?u+=(e.a-n.e.b)/2:n.f==irt&&(u+=e.a-n.e.b),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).b=u,u+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.tf(c)}}function xDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.c,n.b==(J9(),Qit)?u+=(e.b-n.e.a)/2:n.b==Jit&&(u+=e.b-n.e.a),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).a=u,u+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.tf(c)}}function DDn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=new xI(s,l),h=new xI(a,b),r=s,e.p||(r+=n.c),o=new xI(r+=e.F+e.v*n.b,l),f=new xI(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xI(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function RDn(n){NM(n,new MTn(vj(wj(pj(gj(new du,_5n),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Qu))),u2(n,_5n,QJn,LCt),u2(n,_5n,vZn,15),u2(n,_5n,yZn,iln(0)),u2(n,_5n,VJn,dZn)}function KDn(){var n,t,e,i,r,c;for(KDn=O,QLt=x8(NNt,v6n,25,255,15,1),YLt=x8(ONt,WVn,25,16,15,1),t=0;t<255;t++)QLt[t]=-1;for(e=57;e>=48;e--)QLt[e]=e-48<<24>>24;for(i=70;i>=65;i--)QLt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)QLt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)YLt[c]=48+c&QVn;for(n=10;n<=15;n++)YLt[n]=65+n-10&QVn}function _Dn(n,t,e){var i,r,c,a,u,o,s,h;return u=t.i-n.g/2,o=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g/2,a=e.g+n.g/2,i=t.f+n.g/2,r=e.f+n.g/2,u<o+a&&o<u&&s<h+r&&h<s||o<u+c&&u<o&&h<s+i&&s<h||u<o+a&&o<u&&s<h&&h<s+i||o<u+c&&u<o&&s<h+r&&h<s}function FDn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DCt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GCt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),qy(TD(mMn(n,Bgt)))||UBn(n,i,t)}function BDn(n,t){var e,i,r,c;for(c=abn(t,(kUn(),SCt)).Kc();c.Ob();)i=BB(c.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=abn(t,sCt).Kc();r.Ob();)i=BB(r.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[e.p].d),n.i[t.p].a))}function HDn(n){var t,e,i,r,c;if(!n.c){if(c=new Eo,null==(t=P$t).a.zc(n,t)){for(i=new AL(a4(n));i.e!=i.i.gc();)cL(r=lFn(e=BB(kpn(i),87)),88)&&pX(c,HDn(BB(r,26))),f9(c,e);t.a.Bc(n),t.a.gc()}$wn(c),chn(c),n.c=new NO((BB(Wtn(QQ((QX(),t$t).o),15),18),c.i),c.g),P5(n).b&=-33}return n.c}function qDn(n){var t;if(10!=n.c)throw Hp(new ak(kWn((u$(),g8n))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Hp(new ak(kWn((u$(),U8n))))}return t}function GDn(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==IQn&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+GDn(aon(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Aqn(e,F5(AQn),!0),t=""+TE(ltt),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function zDn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function UDn(n){var t,e,i,r,c,a,u;for(t=!1,e=0,r=new Wb(n.d.b);r.a<r.c.c.length;)for((i=BB(n0(r),29)).p=e++,a=new Wb(i.a);a.a<a.c.c.length;)c=BB(n0(a),10),!t&&!h3(hbn(c))&&(t=!0);u=EG((Ffn(),BPt),Pun(Gk(WPt,1),$Vn,103,0,[_Pt,FPt])),t||(orn(u,HPt),orn(u,KPt)),n.a=new ltn(u),$U(n.f),$U(n.b),$U(n.e),$U(n.g)}function XDn(n,t,e){var i,r,c,a,u,o,s,h,f;for(i=e.c,r=e.d,u=g1(t.c),o=g1(t.d),i==t.c?(u=lLn(n,u,r),o=sMn(t.d)):(u=sMn(t.c),o=lLn(n,o,r)),r5(s=new Kj(t.a),u,s.a,s.a.a),r5(s,o,s.c.b,s.c),a=t.c==i,f=new Jv,c=0;c<s.b-1;++c)h=new rC(BB(Dpn(s,c),8),BB(Dpn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:WB(f.a,h);return f}function WDn(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=BB(mMn(n,(HXn(),ipt)),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function VDn(n,t,i,r){var c,a,u,o;if(F3((q_(),new oz(ZL(hbn(t).a.Kc(),new h))))>=n.a)return-1;if(!eTn(t,i))return-1;if(h3(BB(r.Kb(t),20)))return 1;for(c=0,u=BB(r.Kb(t),20).Kc();u.Ob();){if(-1==(o=VDn(n,(a=BB(u.Pb(),17)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,o))>n.c-1)return-1}return c+1}function QDn(n,t){var e,i,r,c,a,u;if(GC(t)===GC(n))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),u=n.gc(),i.gc()!=u)return!1;if(a=i.Kc(),n.ni()){for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),null==r?null!=c:!Nfn(r,c))return!1}else for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),GC(r)!==GC(c))return!1;return!0}function YDn(n,t){var e,i,r,c,a,u;if(n.f>0)if(n.qj(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(Nfn(t,(r=i[a]).dd()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(r=i[a],GC(t)===GC(r.dd()))return!0;return!1}function JDn(n,t,e){var i,r,c,a;OTn(e,"Orthogonally routing hierarchical port edges",1),n.a=0,NGn(t,i=UHn(t)),Qqn(n,t,i),fUn(t),r=BB(mMn(t,(HXn(),ept)),98),Izn((l1(0,(c=t.b).c.length),BB(c.c[0],29)),r,t),Izn(BB(xq(c,c.c.length-1),29),r,t),TBn((l1(0,(a=t.b).c.length),BB(a.c[0],29))),TBn(BB(xq(a,a.c.length-1),29)),HSn(e)}function ZDn(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw Hp(new Mk("Invalid hexadecimal"))}}function nRn(n,t,e){var i,r,c,a;for(OTn(e,"Processor order nodes",2),n.a=Gy(MD(mMn(t,(IAn(),xkt)))),r=new YT,a=spn(t.b,0);a.b!=a.d.c;)qy(TD(mMn(c=BB(b3(a),86),(qqn(),dkt))))&&r5(r,c,r.c.b,r.c);Px(0!=r.b),KHn(n,i=BB(r.a.a.c,86)),!e.b&&qin(e,1),BRn(n,i,0-Gy(MD(mMn(i,(qqn(),ukt))))/2,0),!e.b&&qin(e,1),HSn(e)}function tRn(){tRn=O,Rit=new HS("SPIRAL",0),$it=new HS("LINE_BY_LINE",1),Lit=new HS("MANHATTAN",2),Ait=new HS("JITTER",3),xit=new HS("QUADRANTS_LINE_BY_LINE",4),Dit=new HS("QUADRANTS_MANHATTAN",5),Nit=new HS("QUADRANTS_JITTER",6),Oit=new HS("COMBINE_LINE_BY_LINE_MANHATTAN",7),Cit=new HS("COMBINE_JITTER_MANHATTAN",8)}function eRn(n,t,e,i){var r,c,a,u,o,s;for(o=Njn(n,e),s=Njn(t,e),r=!1;o&&s&&(i||myn(o,s,e));)a=Njn(o,e),u=Njn(s,e),A7(t),A7(n),c=o.c,rGn(o,!1),rGn(s,!1),e?(Qyn(t,s.p,c),t.p=s.p,Qyn(n,o.p+1,c),n.p=o.p):(Qyn(n,o.p,c),n.p=o.p,Qyn(t,s.p+1,c),t.p=s.p),PZ(o,null),PZ(s,null),o=a,s=u,r=!0;return r}function iRn(n,t,e,i){var r,c,a,u,o;for(r=!1,c=!1,u=new Wb(i.j);u.a<u.c.c.length;)GC(mMn(a=BB(n0(u),11),(hWn(),dlt)))===GC(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return o=0,r&&r^c?o=e.j==(kUn(),sCt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?o=n.e[i.c.p][i.p]+1:r&&c&&(o=e.j==(kUn(),sCt)?0:t/2),o}function rRn(n,t,e,i,r,c,a,u){var o,s,h;for(o=0,null!=t&&(o^=vvn(t.toLowerCase())),null!=e&&(o^=vvn(e)),null!=i&&(o^=vvn(i)),null!=a&&(o^=vvn(a)),null!=u&&(o^=vvn(u)),s=0,h=c.length;s<h;s++)o^=vvn(c[s]);n?o|=256:o&=-257,r?o|=16:o&=-17,this.f=o,this.i=null==t?null:(kW(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=u}function cRn(n,t,e){var i,r;switch(r=null,t.g){case 1:gcn(),r=Nut;break;case 2:gcn(),r=Dut}switch(i=null,e.g){case 1:gcn(),i=xut;break;case 2:gcn(),i=Lut;break;case 3:gcn(),i=Rut;break;case 4:gcn(),i=Kut}return r&&i?KB(n.j,new Hf(new Jy(Pun(Gk(Lnt,1),HWn,169,0,[BB(yX(r),169),BB(yX(i),169)])))):(SQ(),SQ(),set)}function aRn(n){var t,e,i;switch(t=BB(mMn(n,(HXn(),Hgt)),8),hon(n,Hgt,new xI(t.b,t.a)),BB(mMn(n,kdt),248).g){case 1:hon(n,kdt,(wvn(),LMt));break;case 2:hon(n,kdt,(wvn(),CMt));break;case 3:hon(n,kdt,(wvn(),AMt));break;case 4:hon(n,kdt,(wvn(),$Mt))}(n.q?n.q:(SQ(),SQ(),het))._b(spt)&&(i=(e=BB(mMn(n,spt),8)).a,e.a=e.b,e.b=i)}function uRn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw Hp(new Ay("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new QK(i),yrn(this.e,this.c,(kUn(),ICt)),this.i=new QK(i),yrn(this.i,this.c,oCt),this.f=new lG(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(uSn(),Mut),this.a&&gPn(this,n,t.length)}function oRn(n,t){var e,i,r,c,a,u;c=!n.B.Hc((n_n(),HCt)),a=n.B.Hc(zCt),n.a=new Hwn(a,c,n.c),n.n&&kQ(n.a.n,n.n),jy(n.g,(Dtn(),zit),n.a),t||((i=new Cgn(1,c,n.c)).n.a=n.k,mG(n.p,(kUn(),sCt),i),(r=new Cgn(1,c,n.c)).n.d=n.k,mG(n.p,SCt,r),(u=new Cgn(0,c,n.c)).n.c=n.k,mG(n.p,ICt,u),(e=new Cgn(0,c,n.c)).n.b=n.k,mG(n.p,oCt,e))}function sRn(n){var t,e,i;switch((t=BB(mMn(n.d,(HXn(),Zdt)),218)).g){case 2:e=MXn(n);break;case 3:i=new Np,JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Or),new Ar),new $r),new pr),new Id(i)),e=i;break;default:throw Hp(new Fy("Compaction not supported for "+t+" edges."))}gqn(n,e),e5(new Ib(n.g),new Sd(n))}function hRn(n,t){var e;return e=new Zn,t&&qan(e,BB(RX(n.a,DOt),94)),cL(t,470)&&qan(e,BB(RX(n.a,ROt),94)),cL(t,354)?(qan(e,BB(RX(n.a,zOt),94)),e):(cL(t,82)&&qan(e,BB(RX(n.a,KOt),94)),cL(t,239)?(qan(e,BB(RX(n.a,UOt),94)),e):cL(t,186)?(qan(e,BB(RX(n.a,XOt),94)),e):(cL(t,352)&&qan(e,BB(RX(n.a,_Ot),94)),e))}function fRn(){fRn=O,Zct=new XA((sWn(),pPt),iln(1)),cat=new XA(LPt,80),rat=new XA(SPt,5),Fct=new XA(cSt,dZn),nat=new XA(vPt,iln(1)),iat=new XA(kPt,(hN(),!0)),Qct=new WA(50),Vct=new XA(XSt,Qct),Hct=ISt,Yct=uPt,Bct=new XA(dSt,!1),Wct=USt,Xct=qSt,Uct=KSt,zct=DSt,Jct=fPt,jSn(),Gct=Cct,aat=Nct,qct=Ict,tat=Act,eat=Lct}function lRn(n){var t,e,i,r,c,a,u;for(u=new v5,a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k!=(uSn(),Mut))for(_An(u,c,new Gj),r=new oz(ZL(lbn(c).a.Kc(),new h));dAn(r);)if((i=BB(U5(r),17)).c.i.k!=Mut&&i.d.i.k!=Mut)for(e=spn(i.a,0);e.b!=e.d.c;)Yjn(u,new dP((t=BB(b3(e),8)).a,t.b));return u}function bRn(){bRn=O,RTt=new up(K4n),OM(),xTt=new $O(q4n,DTt=GTt),Lun(),LTt=new $O(_4n,NTt=WTt),$Sn(),ATt=new $O(F4n,$Tt=rTt),PTt=new $O(B4n,null),$6(),CTt=new $O(H4n,OTt=ZEt),IM(),jTt=new $O(G4n,ETt=XEt),TTt=new $O(z4n,(hN(),!1)),MTt=new $O(U4n,iln(64)),STt=new $O(X4n,!0),ITt=nTt}function wRn(n){var t,e,i,r,c;if(null==n.a)if(n.a=x8($Nt,ZYn,25,n.c.b.c.length,16,1),n.a[0]=!1,Lx(n.c,(HXn(),Upt)))for(e=BB(mMn(n.c,Upt),15).Kc();e.Ob();)(t=BB(e.Pb(),19).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Wb(n.c.b)).a<c.c.c.length&&n0(c),i=1;c.a<c.c.c.length;)r=BB(n0(c),29),n.a[i++]=U$n(r)}function dRn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new AL(n.c);e.e!=e.i.gc();)AIn(P5(BB(kpn(e),473)),t)}function gRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(r=!1,u=0,o=(a=t).length;u<o;++u)c=a[u],qy((hN(),!!c.e))&&!BB(xq(n.b,c.e.p),214).s&&(r|=(s=c.e,(f=(h=BB(xq(n.b,s.p),214)).e)[l=fj(e,f.length)][0].k==(uSn(),Mut)?f[l]=$Nn(c,f[l],e?(kUn(),ICt):(kUn(),oCt)):h.c.Tf(f,e),b=DNn(n,h,e,i),xxn(h.e,h.o,e),b));return r}function pRn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)GC(ZAn(i=BB(kpn(r),33),(sWn(),ESt)))!==GC((ufn(),mIt))&&((a=BB(ZAn(t,mPt),149))==(e=BB(ZAn(i,mPt),149))||a&&j5(a,e))&&0!=(!i.a&&(i.a=new eU(UOt,i,10,11)),i.a).i&&(c+=pRn(n,i));return c}function vRn(n){var t,e,i,r,c,a,u;for(i=0,u=0,a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),101),r=BB(P4(AV(new Rq(null,new w1(c.j,16)),new Xr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=null,i<=u?(kUn(),e=sCt,i+=r.gc()):u<i&&(kUn(),e=SCt,u+=r.gc()),t=e,JT($V(r.Oc(),new Hr),new Ad(t))}function mRn(n){var t,e,i,r,c,a,u,o;for(n.b=new vOn(new Jy((kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt]))),new Jy((Irn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))),u=0,o=(a=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;u<o;++u)for(c=a[u],i=0,r=(e=Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])).length;i<r;++i)t=e[i],Wjn(n.b,c,t,new Np)}function yRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lCn(),rCt)),e=n.u.Hc(tCt),i=n.u.Hc(nCt),s=n.u.Hc(cCt),f=n.B.Hc((n_n(),QCt)),h=!e&&!i&&(s||2==a.gc()),hxn(n,t),r=null,o=null,u){for(o=r=BB((c=a.Kc()).Pb(),111);c.Ob();)o=BB(c.Pb(),111);r.d.b=0,o.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(DTn(a),u&&(r.d.b=0,o.d.c=0))}function kRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lCn(),rCt)),e=n.u.Hc(tCt),i=n.u.Hc(nCt),o=n.u.Hc(cCt),f=n.B.Hc((n_n(),QCt)),s=!e&&!i&&(o||2==a.gc()),V_n(n,t),h=null,r=null,u){for(r=h=BB((c=a.Kc()).Pb(),111);c.Ob();)r=BB(c.Pb(),111);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(RTn(a),u&&(h.d.d=0,r.d.a=0))}function jRn(n,t,e){var i,r,c,a,u;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,WB(e.e,t),i==(uSn(),Put)||i==Cut)for(r=new Wb(t.j);r.a<r.c.c.length;)for(u=new zw(new Wb(new Gw(BB(n0(r),11)).a.g));y$(u.a);)if(a=(c=BB(n0(u.a),17).d.i).k,t.c!=c.c&&(a==Put||a==Cut)&&jRn(n,c,e))return!0;return!0}function ERn(n){var t;return 0!=(64&n.Db)?KOn(n):((t=new fN(KOn(n))).a+=" (changeable: ",yE(t,0!=(n.Bb&k6n)),t.a+=", volatile: ",yE(t,0!=(n.Bb&M9n)),t.a+=", transient: ",yE(t,0!=(n.Bb&_Qn)),t.a+=", defaultValueLiteral: ",cO(t,n.j),t.a+=", unsettable: ",yE(t,0!=(n.Bb&T9n)),t.a+=", derived: ",yE(t,0!=(n.Bb&hVn)),t.a+=")",t.a)}function TRn(n){var t,e,i,r,c,a,u,o,s,h;for(e=NLn(n.d),c=(r=BB(mMn(n.b,(Epn(),vct)),116)).b+r.c,a=r.d+r.a,o=e.d.a*n.e+c,u=e.b.a*n.f+a,Ll(n.b,new xI(o,u)),h=new Wb(n.g);h.a<h.c.c.length;)t=UR(Fx(new xI((s=BB(n0(h),562)).g-e.a.a,s.i-e.c.a),s.a,s.b),kL(Bx(B$(VA(s.e)),s.d*s.a,s.c*s.b),-.5)),i=QA(s.e),ij(s.e,XR(t,i))}function MRn(n,t,e,i){var r,c,a,u,o;for(o=x8(xNt,sVn,104,(kUn(),Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length,0,2),a=0,u=(c=Pun(Gk(FCt,1),YZn,61,0,[PCt,sCt,oCt,SCt,ICt])).length;a<u;++a)o[(r=c[a]).g]=x8(xNt,qQn,25,n.c[r.g],15,1);return Bkn(o,n,sCt),Bkn(o,n,SCt),xmn(o,n,sCt,t,e,i),xmn(o,n,oCt,t,e,i),xmn(o,n,SCt,t,e,i),xmn(o,n,ICt,t,e,i),o}function SRn(n,t,e){if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.b,t)){if(FT(BB(RX(n.b,t),53),e))return-1}else VW(n.b,t,new Rv);if(hU(n.b,e)){if(FT(BB(RX(n.b,e),53),t))return 1}else VW(n.b,e,new Rv);return 0}function PRn(n,t,e,i){var r,c,a,u,o,s;if(null==e)for(r=BB(n.g,119),u=0;u<n.i;++u)if((a=r[u]).ak()==t)return _pn(n,a,i);return ZM(),c=BB(t,66).Oj()?BB(e,72):Z3(t,e),mA(n.e)?(s=!adn(n,t),i=Ywn(n,c,i),o=t.$j()?LY(n,3,t,null,e,pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)),s):LY(n,1,t,t.zj(),e,-1,s),i?i.Ei(o):i=o):i=Ywn(n,c,i),i}function IRn(n){var t,i,r,c,a,u;n.q!=(QEn(),WIt)&&n.q!=XIt&&(c=n.f.n.d+XH(BB(oV(n.b,(kUn(),sCt)),124))+n.c,t=n.f.n.a+XH(BB(oV(n.b,SCt),124))+n.c,r=BB(oV(n.b,oCt),124),u=BB(oV(n.b,ICt),124),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,u.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,u.n.a-t),r.n.d=a,u.n.d=a,r.n.a=i,u.n.a=i)}function CRn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Restoring reversed edges",1),a=new Wb(n.b);a.a<a.c.c.length;)for(u=new Wb(BB(n0(a),29).a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(r=0,c=(i=Z0(BB(n0(o),11).g)).length;r<c;++r)qy(TD(mMn(e=i[r],(hWn(),Ilt))))&&tBn(e,!1);HSn(t)}function ORn(){this.b=new v4,this.d=new v4,this.e=new v4,this.c=new v4,this.a=new xp,this.f=new xp,xJ(PMt,new mu,new yu),xJ(NMt,new Au,new $u),xJ(Eut,new Lu,new Nu),xJ(_ut,new Du,new Ru),xJ(hOt,new Ku,new _u),xJ(met,new ku,new ju),xJ(Cet,new Eu,new Tu),xJ(jet,new Mu,new Su),xJ(Eet,new Pu,new Iu),xJ(Bet,new Cu,new Ou)}function ARn(n){var t,e,i,r,c,a;return c=0,(t=Ckn(n)).Bj()&&(c|=4),0!=(n.Bb&T9n)&&(c|=2),cL(n,99)?(r=Ivn(e=BB(n,18)),0!=(e.Bb&h6n)&&(c|=32),r&&(bX(dZ(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&h6n)&&(c|=64)),0!=(e.Bb&BQn)&&(c|=M9n),c|=k6n):cL(t,457)?c|=512:(i=t.Bj())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function $Rn(n,t){var e,i,r,c,a;for(n=null==n?zWn:(kW(n),n),r=0;r<t.length;r++)t[r]=iLn(t[r]);for(e=new Ck,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+fx(null==n?zWn:(kW(n),n),a,c),uO(e,t[i++]),a=c+2;if(G0(e,n,a,n.length),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function LRn(n){var t,e,i,r,c;for(c=new J6(n.a.c.length),r=new Wb(n.a);r.a<r.c.c.length;){switch(i=BB(n0(r),10),t=null,(e=BB(mMn(i,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),t=$ht;break;case 3:case 4:Jun(),t=Oht}t?(hon(i,(hWn(),Gft),(Jun(),$ht)),t==Oht?RNn(i,e,(ain(),Hvt)):t==$ht&&RNn(i,e,(ain(),qvt))):c.c[c.c.length]=i}return c}function NRn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Wb(t);o.a<o.c.c.length;){for(u=BB(n0(o),11),nhn(n.b,n.d[u.p]),a=0,r=new m6(u.b);y$(r.a)||y$(r.b);)IW(i=BB(y$(r.a)?n0(r.a):n0(r.b),17))?(c=ME(n,u==i.c?i.d:i.c))>n.d[u.p]&&(e+=n5(n.b,c),d3(n.a,iln(c))):++a;for(e+=n.b.d*a;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function xRn(n,t){var e;return n.f==uLt?(e=DW(B7((CPn(),Z$t),t)),n.e?4==e&&t!=(TOn(),lLt)&&t!=(TOn(),sLt)&&t!=(TOn(),hLt)&&t!=(TOn(),fLt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(Z1(B7((CPn(),Z$t),t)))||n.d.Hc(Fqn((CPn(),Z$t),n.b,t))))||!(!n.f||!aNn((CPn(),n.f),jV(B7(Z$t,t))))&&(e=DW(B7(Z$t,t)),n.e?4==e:2==e)}function DRn(n,t,i,r){var c,a,u,o,s,h,f,l;return s=(u=BB(ZAn(i,(sWn(),gPt)),8)).a,f=u.b+n,(c=e.Math.atan2(f,s))<0&&(c+=Z3n),(c+=t)>Z3n&&(c-=Z3n),h=(o=BB(ZAn(r,gPt),8)).a,l=o.b+n,(a=e.Math.atan2(l,h))<0&&(a+=Z3n),(a+=t)>Z3n&&(a-=Z3n),h$(),rin(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:zO(isNaN(c),isNaN(a))}function RRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),57),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),57)).i=KQn,a=t.c.Kc();a.Ob();)c=BB(a.Pb(),57),BB(qC(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).c.$b(),t.c=BB(qC(AY(u.f,t)),15);_xn(n)}function KRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),81),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),81)).o=KQn,a=t.f.Kc();a.Ob();)c=BB(a.Pb(),81),BB(qC(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).f.$b(),t.f=BB(qC(AY(u.f,t)),15);BNn(n)}function _Rn(n,t,e,i){var r,c;for(Gkn(n,t,e,i),xl(t,n.j-t.j+e),Dl(t,n.k-t.k+i),c=new Wb(t.f);c.a<c.c.c.length;)switch((r=BB(n0(c),324)).a.g){case 0:won(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:won(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:won(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:won(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function FRn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw Hp(new Sv);a=t>>5,c=yz(1,dG(yz(31&t,1))),n.n[e][a]=r?i0(n.n[e][a],c):e0(n.n[e][a],uH(c)),c=yz(c,1),n.n[e][a]=i?i0(n.n[e][a],c):e0(n.n[e][a],uH(c))}catch(u){throw cL(u=lun(u),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(u)}}function BRn(n,t,i,r){var c,a;t&&(c=Gy(MD(mMn(t,(qqn(),fkt))))+r,a=i+Gy(MD(mMn(t,ukt)))/2,hon(t,gkt,iln(dG(fan(e.Math.round(c))))),hon(t,pkt,iln(dG(fan(e.Math.round(a))))),0==t.d.b||BRn(n,BB(iL(new wg(spn(new bg(t).a.d,0))),86),i+Gy(MD(mMn(t,ukt)))+n.a,r+Gy(MD(mMn(t,okt)))),null!=mMn(t,wkt)&&BRn(n,BB(mMn(t,wkt),86),i,r))}function HRn(n,t){var i,r,c,a,u,o,s,h,f,l,b;for(c=2*Gy(MD(mMn(s=vW(t.a),(HXn(),Tpt)))),f=Gy(MD(mMn(s,Apt))),h=e.Math.max(c,f),a=x8(xNt,qQn,25,t.f-t.c+1,15,1),r=-h,i=0,o=t.b.Kc();o.Ob();)u=BB(o.Pb(),10),r+=n.a[u.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Wb(t.e);b.a<b.c.c.length;)l=BB(n0(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function qRn(n,t,e,i){var r,c,a,u,o,s,h,f;for(f=new dE(new Yd(n)),u=0,o=(a=Pun(Gk(Out,1),a1n,10,0,[t,e])).length;u<o;++u)for(h=Lfn(a[u],i).Kc();h.Ob();)for(c=new m6((s=BB(h.Pb(),11)).b);y$(c.a)||y$(c.b);)b5(r=BB(y$(c.a)?n0(c.a):n0(c.b),17))||(Mon(f.a,s,(hN(),ptt)),IW(r)&&ZU(f,s==r.c?r.d:r.c));return yX(f),new t_(f)}function GRn(n,t){var e,i,r,c;if(0!=(c=BB(ZAn(n,(sWn(),wPt)),61).g-BB(ZAn(t,wPt),61).g))return c;if(e=BB(ZAn(n,sPt),19),i=BB(ZAn(t,sPt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(BB(ZAn(n,wPt),61).g){case 1:return Pln(n.i,t.i);case 2:return Pln(n.j,t.j);case 3:return Pln(t.i,n.i);case 4:return Pln(t.j,n.j);default:throw Hp(new Fy(r1n))}}function zRn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(n6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function URn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(t6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function XRn(n,t){var e,i,r,c,a,u;if(null==t||0==t.length)return null;if(!(r=BB(SJ(n.a,t),149))){for(i=new Kb(new Ob(n.b).a.vc().Kc());i.a.Ob();)if(c=BB(i.a.Pb(),42),a=(e=BB(c.dd(),149)).c,u=t.length,mK(a.substr(a.length-u,u),t)&&(t.length==a.length||46==fV(a,a.length-t.length-1))){if(r)return null;r=e}r&&mZ(n.a,t,r)}return r}function WRn(n,t){var e,i,r;return e=new xn,(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())<(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?-1:i==r?0:1}function VRn(n){var t,e,i;Lx(n,(HXn(),$gt))&&((i=BB(mMn(n,$gt),21)).dc()||(e=new YK(t=BB(Vj(GIt),9),BB(SR(t,t.length),9),0),i.Hc((n$n(),$It))?orn(e,$It):orn(e,LIt),i.Hc(OIt)||orn(e,OIt),i.Hc(CIt)?orn(e,DIt):i.Hc(IIt)?orn(e,xIt):i.Hc(AIt)&&orn(e,NIt),i.Hc(DIt)?orn(e,CIt):i.Hc(xIt)?orn(e,IIt):i.Hc(NIt)&&orn(e,AIt),hon(n,$gt,e)))}function QRn(n){var t,e,i,r,c,a,u;for(r=BB(mMn(n,(hWn(),rlt)),10),l1(0,(i=n.j).c.length),e=BB(i.c[0],11),a=new Wb(r.j);a.a<a.c.c.length;)if(GC(c=BB(n0(a),11))===GC(mMn(e,dlt))){c.j==(kUn(),sCt)&&n.p>r.p?(qIn(c,SCt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=u-t)):c.j==SCt&&r.p>n.p&&(qIn(c,sCt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=-(u-t)));break}return r}function YRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;if(c=e,e<i)for(b=new Fan(n.p),w=new Fan(n.p),Frn(b.e,n.e),b.q=n.q,b.r=w,rX(b),Frn(w.j,n.j),w.r=b,rX(w),f=BB((l=new rC(b,w)).a,112),h=BB(l.b,112),l1(c,t.c.length),a=$Dn(n,f,h,r=BB(t.c[c],329)),s=e+1;s<=i;s++)l1(s,t.c.length),Vpn(u=BB(t.c[s],329),o=$Dn(n,f,h,u),r,a)&&(r=u,a=o);return c}function JRn(n,t,e,i,r){var c,a,u,o,s,h,f;if(!(cL(t,239)||cL(t,354)||cL(t,186)))throw Hp(new _y("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,o=t.i+i-a,h=t.j+r-a,s=o+t.g+n.a,f=h+t.f+n.a,DH(c=new km,new xI(o,h)),DH(c,new xI(o,f)),DH(c,new xI(s,f)),DH(c,new xI(s,h)),qan(u=new EAn(c),t),e&&VW(n.b,t,u),u}function ZRn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xI(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function nKn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xI(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function tKn(n){if(0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i)throw Hp(new ck("Edges must have a source."));if(0==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new ck("Edges must have a target."));if(!n.b&&(n.b=new hK(KOt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)))throw Hp(new ck("Hyperedges are not supported."))}function eKn(n,t){var e,i,r,c,a,u,o,s,h,f;for(f=0,d3(c=new Lp,t);c.b!=c.c;)for(o=BB(dU(c),214),s=0,h=BB(mMn(t.j,(HXn(),Ldt)),339),a=Gy(MD(mMn(t.j,Cdt))),u=Gy(MD(mMn(t.j,Odt))),h!=(mon(),Nvt)&&(s+=a*S$n(o.e,h),s+=u*rxn(o.e)),f+=syn(o.d,o.e)+s,r=new Wb(o.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(f+=nIn(n,e));return f}function iKn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=b=t.length,b1(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(uHn(),cet)[10])|0,0!=(g=b%c)&&++r,u=x8(ANt,hQn,25,r,15,1),e=ret[8],a=0,w=l+(0==g?c:g),d=l;d<o;w=(d=w)+c)i=l_n(t.substr(d,w-d),_Vn,DWn),$On(),s=dvn(u,u,a,e),s+=Uwn(u,a,i),u[a++]=s;h=a,n.e=f,n.d=h,n.a=u,X0(n)}function rKn(n,t,e,i,r,c,a){if(n.c=i.qf().a,n.d=i.qf().b,r&&(n.c+=r.qf().a,n.d+=r.qf().b),n.b=t.rf().a,n.a=t.rf().b,r)switch(r.Hf().g){case 0:case 2:n.c+=r.rf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.rf().a;break;case 1:n.c+=r.rf().a+a,n.d-=a+c.b+a+t.rf().b;break;case 3:n.c+=r.rf().a+a,n.d+=r.rf().b+a+c.b+a}else e?n.c-=a+t.rf().a:n.c+=i.rf().a+a}function cKn(n,t){var e,i;for(this.b=new Np,this.e=new Np,this.a=n,this.d=t,Gpn(this),pdn(this),this.b.dc()?this.c=n.c.p:this.c=BB(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=BB(xq(this.e,this.e.c.length-1),10).c.p,i=BB(mMn(n,(hWn(),Plt)),15).Kc();i.Ob();)if(Lx(e=BB(i.Pb(),70),(HXn(),Vdt))){this.d=BB(mMn(e,Vdt),227);break}}function aKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.e,t),53),a=BB(RX(n.e,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.e,s),53),t),Frn(BB(RX(n.e,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function uKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.b,t),53),a=BB(RX(n.b,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.b,s),53),t),Frn(BB(RX(n.b,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function oKn(n,t){var e,i,r;switch(OTn(t,"Breaking Point Insertion",1),i=new MAn(n),BB(mMn(n,(HXn(),Bpt)),337).g){case 2:r=new Tc;case 0:r=new wc;break;default:r=new Mc}if(e=r.Vf(n,i),qy(TD(mMn(n,qpt)))&&(e=Dqn(n,e)),!r.Wf()&&Lx(n,Xpt))switch(BB(mMn(n,Xpt),338).g){case 2:e=XIn(i,e);break;case 1:e=KTn(i,e)}e.dc()||tXn(n,e),HSn(t)}function sKn(n,t,e){var i,r,c,a,u,o,s;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),a=N2(s,L6n),VIn((i=new oC(n,o)).a,i.b,a),u=N2(s,N6n),QIn((r=new sC(n,o)).a,r.b,u),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),sXn(n,s,o),xon(n,s,o)}function hKn(n,t){var i,r,c,a,u,o,s;for(c=x8(ANt,hQn,25,n.e.a.c.length,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)c[(a=BB(n0(u),121)).d]+=a.b.a.c.length;for(o=zB(t);0!=o.b;)for(r=L9(new Wb((a=BB(0==o.b?null:(Px(0!=o.b),Atn(o,o.a.a)),121)).g.a));r.Ob();)(s=(i=BB(r.Pb(),213)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&r5(o,s,o.c.b,o.c)}function fKn(n){var t,i,r,c,a,u,o,s,h,f,l;for(i=_Vn,c=DWn,o=new Wb(n.e.a);o.a<o.c.c.length;)a=BB(n0(o),121),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=x8(ANt,hQn,25,i-c+1,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function lKn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return BB(Kxn(n),19).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return QC(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:Nfn(n.n,n.g)}default:return!1}}function bKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,K5n),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Vu))),u2(n,K5n,QJn,dIt),u2(n,K5n,g3n,mpn(gIt)),u2(n,K5n,g5n,mpn(hIt)),u2(n,K5n,PZn,mpn(fIt)),u2(n,K5n,BZn,mpn(bIt)),u2(n,K5n,Y2n,mpn(lIt))}function wKn(n,t,e){var i,r,c,a;if(i=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),a=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),(c=Jrn(n,t,i))&&a==c.f&&wW(e,c.i))return e;if(Zrn(n,e,a))throw Hp(new _y("value already present: "+e));return r=new qW(t,i,e,a),c?(LLn(n,c),YIn(n,r,c),c.e=null,c.c=null,c.i):(YIn(n,r,null),qkn(n),null)}function dKn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=c.b?new xI(a,l):new xI(s,l),h=c.c?new xI(s,b):new xI(a,b),r=s,e.p||(r+=n.c),o=new xI(r+=e.F+e.v*n.b,l),f=new xI(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xI(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function gKn(n,t,e){var i,r,c,a,u,o;if(t){if(e<=-1){if(cL(i=itn(t.Tg(),-1-e),99))return BB(i,18);for(u=0,o=(a=BB(t.ah(i),153)).gc();u<o;++u)if(GC(a.jl(u))===GC(n)&&cL(r=a.il(u),99)&&0!=((c=BB(r,18)).Bb&h6n))return c;throw Hp(new Fy("The containment feature could not be located"))}return Ivn(BB(itn(n.Tg(),e),18))}return null}function pKn(n){var t,e,i,r,c;for(i=n.length,t=new Pk,c=0;c<i;)if(9!=(e=fV(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(b1(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(NX(t,r&QVn),++c):(t.a+="\\",NX(t,r&QVn),++c):NX(t,e&QVn);else for(;c<i&&13!=(e=fV(n,c++))&&10!=e;);return t.a}function vKn(n,t){var e,i,r;for(i=new Wb(t);i.a<i.c.c.length;)if(e=BB(n0(i),33),JCn(n.a,e,e),JCn(n.b,e,e),0!=(r=wDn(e)).c.length)for(n.d&&n.d.lg(r),JCn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JCn(n.b,e,BB(xq(r,r.c.length-1),33));0!=Dun(r).c.length;)r=Dun(r),n.d&&n.d.lg(r),JCn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JCn(n.b,e,BB(xq(r,r.c.length-1),33))}function mKn(n){var t,e,i,r,c,a,u,o,s,h;for(e=0,u=new Wb(n.d);u.a<u.c.c.length;)(a=BB(n0(u),101)).i&&(a.i.c=e++);for(t=kq($Nt,[sVn,ZYn],[177,25],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(l1(r,h.c.length),(o=BB(h.c[r],101)).i)for(c=r+1;c<h.c.length;c++)l1(c,h.c.length),(s=BB(h.c[c],101)).i&&(i=rMn(o,s),t[o.i.c][s.i.c]=i,t[s.i.c][o.i.c]=i);return t}function yKn(n,t,e,i){var r,c,a;return a=new yT(t,e),n.a?i?(++(r=BB(RX(n.b,t),283)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:BB(RX(n.b,t),283).b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(n.e.b=a,a.d=n.e,n.e=a,(r=BB(RX(n.b,t),283))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(VW(n.b,t,r=new sY(a)),++n.c)):(n.a=n.e=a,VW(n.b,t,new sY(a)),++n.c),++n.d,a}function kKn(n,t){var e,i,r,c,a,u,o,s;for(e=new RegExp(t,"g"),o=x8(Qtt,sVn,2,0,6,1),i=0,s=n,c=null;;){if(null==(u=e.exec(s))||""==s){o[i]=s;break}a=u.index,o[i]=s.substr(0,a),s=fx(s,a+u[0].length,s.length),e.lastIndex=0,c==s&&(o[i]=s.substr(0,1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=o.length;r>0&&""==o[r-1];)--r;r<o.length&&(o.length=r)}return o}function jKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,r=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=jKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(r||(r=!0,u=new rG(u)),u.Gc(e)):u=e);return(i=xCn(n,t)).dc()?u||(SQ(),SQ(),set):u?(r||(u=new rG(u)),u.Gc(i),u):i}function EKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,i=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=EKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(i||(i=!0,u=new rG(u)),u.Gc(e)):u=e);return(r=VOn(n,t)).dc()?u||(SQ(),SQ(),set):u?(i||(u=new rG(u)),u.Gc(r),u):r}function TKn(n,t,e){var i,r,c,a,u,o;if(cL(t,72))return _pn(n,t,e);for(u=null,c=null,i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(t,(r=i[a]).dd())&&cL(c=r.ak(),99)&&0!=(BB(c,18).Bb&h6n)){u=r;break}return u&&(mA(n.e)&&(o=c.$j()?LY(n,4,c,t,null,pBn(n,c,t,cL(c,99)&&0!=(BB(c,18).Bb&BQn)),!0):LY(n,c.Kj()?2:1,c,t,c.zj(),-1,!0),e?e.Ei(o):e=o),e=TKn(n,u,e)),e}function MKn(n){var t,i,r,c;r=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?c=r.a:(c=SCn(n.f),n.A.Hc((mdn(),RCt))&&!n.B.Hc((n_n(),XCt))&&(c=e.Math.max(c,SCn(BB(oV(n.p,(kUn(),sCt)),244))),c=e.Math.max(c,SCn(BB(oV(n.p,SCt),244)))),(t=oan(n))&&(c=e.Math.max(c,t.a))),qy(TD(n.e.yf().We((sWn(),FSt))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,_Fn(n.f)}function SKn(n,t){var e,i,r,c,a,u,o,s,h;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"memberTypes")))){for(s=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)cL(h=-1==(i=(r=c[a]).lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148)&&WB(s,BB(h,148));return s}return SQ(),SQ(),set}function PKn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,aZn,1),n.bf(t),c=0;n.df(c);){for(h=new Wb(t.e);h.a<h.c.c.length;)for(o=BB(n0(h),144),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[t.e,t.d,t.b])));dAn(u);)(a=BB(U5(u),357))!=o&&(r=n.af(a,o))&&UR(o.a,r);for(s=new Wb(t.e);s.a<s.c.c.length;)WSn(i=(o=BB(n0(s),144)).a,-n.d,-n.d,n.d,n.d),UR(o.d,i),kO(i);n.cf(),++c}HSn(e)}function IKn(n,t,e){var i,r,c,a;if(a=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj()){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(r,e))return fDn(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(e,r.dd()))return fDn(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&null==r.dd())return fDn(n,c),!0;return!1}function CKn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=x8($Nt,ZYn,25,t.c.length,16,1):nk(n.c),n.a=new Np,i=0,a=new Wb(t);a.a<a.c.c.length;)(r=BB(n0(a),10)).p=i++;for(e=new YT,c=new Wb(t);c.a<c.c.c.length;)r=BB(n0(c),10),n.c[r.p]||(hCn(n,r),0==e.b||(Px(0!=e.b),BB(e.a.a.c,15)).gc()<n.a.c.length?hO(e,n.a):fO(e,n.a),n.a=new Np);return e}function OKn(n,t,e,i){var r,c,a,u,o,s,h;for(Pen(a=BB(Wtn(t,0),33),0),Ien(a,0),(o=new Np).c[o.c.length]=a,u=a,c=new eq(n.a,a.g,a.f,(YLn(),_Et)),s=1;s<t.i;s++)Pen(h=BB(Wtn(t,s),33),(r=aqn(n,nHn(n,DEt,h,u,c,o,e),nHn(n,xEt,h,u,c,o,e),nHn(n,KEt,h,u,c,o,e),nHn(n,REt,h,u,c,o,e),h,u,i)).d),Ien(h,r.e),ab(r,_Et),c=r,u=h,o.c[o.c.length]=h;return c}function AKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,Q4n),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new eu))),u2(n,Q4n,K4n,mpn(qTt)),u2(n,Q4n,QJn,BTt),u2(n,Q4n,vZn,8),u2(n,Q4n,q4n,mpn(HTt)),u2(n,Q4n,U4n,mpn(_Tt)),u2(n,Q4n,X4n,mpn(FTt)),u2(n,Q4n,X2n,(hN(),!1))}function $Kn(n,t,e,i){var r,c,a,u,o,s,h,f;for(a=_x(t.c,e,i),h=new Wb(t.a);h.a<h.c.c.length;){for(UR((s=BB(n0(h),10)).n,a),f=new Wb(s.j);f.a<f.c.c.length;)for(c=new Wb(BB(n0(f),11).g);c.a<c.c.c.length;)for(Ztn((r=BB(n0(c),17)).a,a),(u=BB(mMn(r,(HXn(),vgt)),74))&&Ztn(u,a),o=new Wb(r.b);o.a<o.c.c.length;)UR(BB(n0(o),70).n,a);WB(n.a,s),s.a=n}}function LKn(n,t){var e,i,r,c;if(OTn(t,"Node and Port Label Placement and Node Sizing",1),RA((gM(),new HV(n,!0,!0,new Ve))),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft)))for(i=(r=BB(mMn(n,(HXn(),cpt)),21)).Hc((lCn(),iCt)),c=qy(TD(mMn(n,apt))),e=new Wb(n.b);e.a<e.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(e),29).a,16)),new Qe),new K_(r,i,c));HSn(t)}function NKn(n,t){var e,i,r,c,a,u;if((e=t.Hh(n.a))&&null!=(u=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),n8n))))switch(r=mN(u,YTn(35)),i=t.Hj(),-1==r?(a=az(n,Utn(i)),c=u):0==r?(a=null,c=u.substr(1)):(a=u.substr(0,r),c=u.substr(r+1)),DW(B7(n,t))){case 2:case 3:return Don(n,i,a,c);case 0:case 4:case 5:case 6:return Ron(n,i,a,c)}return null}function xKn(n,t,e){var i,r,c,a,u;if(ZM(),a=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))return!1}else for(u=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c],u.rl(r.ak()))return!(a?Nfn(r,e):null==e?null==r.dd():Nfn(e,r.dd()))&&(BB(ovn(n,c,a?BB(e,72):Z3(t,e)),72),!0);return f9(n,a?BB(e,72):Z3(t,e))}function DKn(n){var t,e,i,r,c;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));for(n.c==(Ffn(),BPt)&&Mzn(n,_Pt),t=new Wb(n.a.a);t.a<t.c.c.length;)BB(n0(t),189).e=0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((i=BB(n0(r),81)).o=KQn,e=i.f.Kc();e.Ob();)++BB(e.Pb(),81).d.e;for(Gzn(n),c=new Wb(n.a.b);c.a<c.c.c.length;)BB(n0(c),81).k=!0;return n}function RKn(n,t){var e,i,r,c,a,u,o,s;for(u=new pPn(n),r5(e=new YT,t,e.c.b,e.c);0!=e.b;){for((i=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),113)).d.p=1,a=new Wb(i.e);a.a<a.c.c.length;)jTn(u,r=BB(n0(a),409)),0==(s=r.d).d.p&&r5(e,s,e.c.b,e.c);for(c=new Wb(i.b);c.a<c.c.c.length;)jTn(u,r=BB(n0(c),409)),0==(o=r.c).d.p&&r5(e,o,e.c.b,e.c)}return u}function KKn(n){var t,e,i,r,c;if(1!=(i=Gy(MD(ZAn(n,(sWn(),yPt))))))for(MA(n,i*n.g,i*n.f),e=XO(_B((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),new Bu)),c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n),(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),e])));dAn(c);)(r=BB(U5(c),470)).Gg(i*r.Dg(),i*r.Eg()),r.Fg(i*r.Cg(),i*r.Bg()),(t=BB(r.We(cPt),8))&&(t.a*=i,t.b*=i)}function _Kn(n,t,e,i,r){var c,a,u,o,s,h;for(c=new Wb(n.b);c.a<c.c.c.length;)for(s=0,h=(o=n2(BB(n0(c),29).a)).length;s<h;++s)switch(BB(mMn(u=o[s],(HXn(),kgt)),163).g){case 1:vxn(u),PZ(u,t),lvn(u,!0,i);break;case 3:ZNn(u),PZ(u,e),lvn(u,!1,r)}for(a=new M2(n.b,0);a.b<a.d.gc();)0==(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)).a.c.length&&fW(a)}function FKn(n,t){var e,i,r,c,a,u,o;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),M7n)))){for(i=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)mK(r=c[a],"##other")?WB(i,"!##"+az(n,Utn(t.Hj()))):mK(r,"##local")?i.c[i.c.length]=null:mK(r,E7n)?WB(i,az(n,Utn(t.Hj()))):i.c[i.c.length]=r;return i}return SQ(),SQ(),set}function BKn(n,t){var e,i,r;return e=new Xn,(i=1==(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())?1:0)<(r=1==(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?1:0)?-1:i==r?0:1}function HKn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(r=qy(TD(mMn(u=n.i,(HXn(),wgt)))),h=0,i=0,s=new Wb(n.g);s.a<s.c.c.length;)c=(a=b5(o=BB(n0(s),17)))&&r&&qy(TD(mMn(o,dgt))),l=o.d.i,a&&c?++i:a&&!c?++h:vW(l).e==u?++i:++h;for(e=new Wb(n.e);e.a<e.c.c.length;)c=(a=b5(t=BB(n0(e),17)))&&r&&qy(TD(mMn(t,dgt))),f=t.c.i,a&&c?++h:a&&!c?++i:vW(f).e==u?++h:++i;return h-i}function qKn(n,t,e,i){this.e=n,this.k=BB(mMn(n,(hWn(),Alt)),304),this.g=x8(Out,a1n,10,t,0,1),this.b=x8(Ptt,sVn,333,t,7,1),this.a=x8(Out,a1n,10,t,0,1),this.d=x8(Ptt,sVn,333,t,7,1),this.j=x8(Out,a1n,10,t,0,1),this.i=x8(Ptt,sVn,333,t,7,1),this.p=x8(Ptt,sVn,333,t,7,1),this.n=x8(ktt,sVn,476,t,8,1),yS(this.n,(hN(),!1)),this.f=x8(ktt,sVn,476,t,8,1),yS(this.f,!0),this.o=e,this.c=i}function GKn(n,t){var e,i,r;if(!t.dc())if(BB(t.Xb(0),286).d==($Pn(),nht))Akn(n,t);else for(i=t.Kc();i.Ob();){switch((e=BB(i.Pb(),286)).d.g){case 5:hPn(n,e,Vbn(n,e));break;case 0:hPn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:hPn(n,e,$nn(n,e));break;case 2:Kwn(e),hPn(n,e,$En(e)?e.c:e.f);break;case 1:Kwn(e),hPn(n,e,$En(e)?e.f:e.c)}hMn(e.a)}}function zKn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=BB(i.Pb(),17),t.o&&t.d.a.gc()<=1?(a=new xI((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),DH(BB(t.d.a.ec().Kc().Pb(),17).a,a)):(r=BB(RX(t.c,e),459)).b||r.c?dKn(n,e,t):n.d==(Usn(),rmt)&&(r.d||r.e)&&LOn(n,t)&&t.d.a.gc()<=1?dzn(e,t):DDn(n,e,t);t.k&&e5(t.d,new Te)}}function UKn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g,p,v,m;for(o=(r+c)/2+a,g=i*e.Math.cos(o),p=i*e.Math.sin(o),v=g-t.g/2,m=p-t.f/2,Pen(t,v),Ien(t,m),l=n.a.jg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,u=(r+c-d)/2):(b=(c-r)/l,u=r),w=wDn(t),n.e&&(n.e.kg(n.d),n.e.lg(w)),h=new Wb(w);h.a<h.c.c.length;)s=BB(n0(h),33),f=n.a.jg(s),UKn(n,s,i+n.c,u,u+b*f,a),u+=b*f}function XKn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[i]);break;case 3:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Enn(n,i+1,t)}}function WKn(n,t){var e,i,r,c;if(OTn(t,"Network simplex",1),n.e.a.c.length<1)HSn(t);else{for(r=new Wb(n.e.a);r.a<r.c.c.length;)BB(n0(r),121).e=0;for((c=n.e.a.c.length>=40)&&EFn(n),BHn(n),Txn(n),e=yln(n),i=0;e&&i<n.f;)e_n(n,e,e$n(n,e)),e=yln(n),++i;c&&tTn(n),n.a?p$n(n,fKn(n)):fKn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,HSn(t)}}function VKn(n,t,e,i){var r,c,a,u,o,s,h,f;for(XR(u=new xI(e,i),BB(mMn(t,(Mrn(),oat)),8)),f=new Wb(t.e);f.a<f.c.c.length;)UR((h=BB(n0(f),144)).d,u),WB(n.e,h);for(a=new Wb(t.c);a.a<a.c.c.length;){for(r=new Wb((c=BB(n0(a),282)).a);r.a<r.c.c.length;)UR(BB(n0(r),559).d,u);WB(n.c,c)}for(s=new Wb(t.d);s.a<s.c.c.length;)UR((o=BB(n0(s),447)).d,u),WB(n.d,o)}function QKn(n,t){var e,i,r,c,a,u,o,s;for(o=new Wb(t.j);o.a<o.c.c.length;)for(r=new m6((u=BB(n0(o),11)).b);y$(r.a)||y$(r.b);)t!=(c=(e=(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==u?i.d:i.c).i)&&((s=BB(mMn(i,(HXn(),fpt)),19).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&DH(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&DH(n.e,c))))}function YKn(n){var t,e,i,r,c,a,u;for(c=new dE(BB(yX(new Rn),62)),u=KQn,e=new Wb(n.d);e.a<e.c.c.length;){for(u=(t=BB(n0(e),222)).c.c;0!=c.a.c&&(a=BB(MU(q9(c.a)),222)).c.c+a.c.b<u;)$J(c.a,a);for(r=new Fb(new BR(new xN(new _b(c.a).a).b));aS(r.a.a);)DH((i=BB(mx(r.a).cd(),222)).b,t),DH(t.b,i);Mon(c.a,t,(hN(),ptt))}}function JKn(n,t,e){var i,r,c,a,u,o,s,h,f;for(c=new J6(t.c.length),s=new Wb(t);s.a<s.c.c.length;)a=BB(n0(s),10),WB(c,n.b[a.c.p][a.p]);for(mqn(n,c,e),f=null;f=ezn(c);)rBn(n,BB(f.a,233),BB(f.b,233),c);for(t.c=x8(Ant,HWn,1,0,5,1),r=new Wb(c);r.a<r.c.c.length;)for(o=0,h=(u=(i=BB(n0(r),233)).d).length;o<h;++o)a=u[o],t.c[t.c.length]=a,n.a[a.c.p][a.p].a=lL(i.g,i.d[0]).a}function ZKn(n,t){var e,i,r,c;if(0<(cL(n,14)?BB(n,14).gc():F3(n.Kc()))){if(1<(r=t)){for(--r,c=new pa,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));return ZKn(c,r)}if(r<0){for(c=new va,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));if(0<(cL(c,14)?BB(c,14).gc():F3(c.Kc())))return ZKn(c,r)}}return BB(iL(n.Kc()),86)}function n_n(){n_n=O,GCt=new QI("DEFAULT_MINIMUM_SIZE",0),UCt=new QI("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),qCt=new QI("COMPUTE_PADDING",2),XCt=new QI("OUTSIDE_NODE_LABELS_OVERHANG",3),WCt=new QI("PORTS_OVERHANG",4),QCt=new QI("UNIFORM_PORT_SPACING",5),VCt=new QI("SPACE_EFFICIENT_PORT_LABELS",6),zCt=new QI("FORCE_TABULAR_NODE_LABELS",7),HCt=new QI("ASYMMETRICAL",8)}function t_n(n,t){var e,i,r,c,a,u,o,s;if(t){if(e=(c=t.Tg())?Utn(c).Nh().Jh(c):null){for(Jgn(n,t,e),o=0,s=(null==(r=t.Tg()).i&&qFn(r),r.i).length;o<s;++o)null==r.i&&qFn(r),i=r.i,(u=o>=0&&o<i.length?i[o]:null).Ij()&&!u.Jj()&&(cL(u,322)?nvn(n,BB(u,34),t,e):0!=((a=BB(u,18)).Bb&h6n)&&sEn(n,a,t,e));t.kh()&&BB(e,49).vh(BB(t,49).qh())}return e}return null}function e_n(n,t,e){var i,r,c;if(!t.f)throw Hp(new _y("Given leave edge is no tree edge."));if(e.f)throw Hp(new _y("Given enter edge is a tree edge already."));for(t.f=!1,eL(n.p,t),e.f=!0,TU(n.p,e),i=e.e.e-e.d.e-e.a,FIn(n,e.e,t)||(i=-i),c=new Wb(n.e.a);c.a<c.c.c.length;)FIn(n,r=BB(n0(c),121),t)||(r.e+=i);n.j=1,nk(n.c),pCn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}function i_n(n,t){var e,i,r,c,a,u;if((u=BB(mMn(t,(HXn(),ept)),98))==(QEn(),WIt)||u==XIt)for(r=new xI(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((e=BB(mMn(c,(hWn(),Qft)),61))!=(kUn(),oCt)&&e!=ICt||(i=Gy(MD(mMn(c,Tlt))),u==WIt&&(i*=r),c.n.b=i-BB(mMn(c,npt),8).b,Jan(c,!1,!0)))}function r_n(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;if(Ytn(n,t,e),c=t[e],b=i?(kUn(),ICt):(kUn(),oCt),mL(t.length,e,i)){for(G6(n,r=t[i?e-1:e+1],i?(ain(),qvt):(ain(),Hvt)),h=0,l=(o=c).length;h<l;++h)xvn(n,a=o[h],b);for(G6(n,c,i?(ain(),Hvt):(ain(),qvt)),s=0,f=(u=r).length;s<f;++s)(a=u[s]).e||xvn(n,a,Tln(b))}else for(s=0,f=(u=c).length;s<f;++s)xvn(n,a=u[s],b);return!1}function c_n(n,t,e,i){var r,c,a,u,o;u=abn(t,e),(e==(kUn(),SCt)||e==ICt)&&(u=cL(u,152)?o6(BB(u,152)):cL(u,131)?BB(u,131).a:cL(u,54)?new fy(u):new IT(u)),a=!1;do{for(r=!1,c=0;c<u.gc()-1;c++)BMn(n,BB(u.Xb(c),11),BB(u.Xb(c+1),11),i)&&(a=!0,k0(n.a,BB(u.Xb(c),11),BB(u.Xb(c+1),11)),o=BB(u.Xb(c+1),11),u._c(c+1,BB(u.Xb(c),11)),u._c(c,o),r=!0)}while(r);return a}function a_n(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;if(!mA(n.e))return BB(YCn(n,t,e),72);if(t!=e&&(a=(b=(r=BB(n.g,119))[e]).ak(),$xn(n.e,a))){for(w=axn(n.e.Tg(),a),o=-1,u=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?u=i++:(c=r[s],h=w.rl(c.ak()),s==t&&(o=s!=f||h?i:i-1),h&&++i);return l=BB(Cln(n,t,e),72),u!=o&&Lv(n,new j9(n.e,7,a,iln(u),b.dd(),o)),l}return BB(Cln(n,t,e),72)}function u_n(n,t){var e,i,r,c,a,u;for(OTn(t,"Port order processing",1),u=BB(mMn(n,(HXn(),opt)),421),e=new Wb(n.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)i=BB(n0(r),10),c=BB(mMn(i,ept),98),a=i.j,c==(QEn(),UIt)||c==WIt||c==XIt?(SQ(),m$(a,sst)):c!=QIt&&c!=YIt&&(SQ(),m$(a,fst),Lvn(a),u==(U7(),_vt)&&m$(a,hst)),i.i=!0,eCn(i);HSn(t)}function o_n(n){var t,i,r,c,a,u,o,s;for(s=new xp,t=new Fv,u=n.Kc();u.Ob();)c=BB(u.Pb(),10),o=AN(oM(new qv,c),t),jIn(s.f,c,o);for(a=n.Kc();a.Ob();)for(r=new oz(ZL(lbn(c=BB(a.Pb(),10)).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||UNn(aM(cM(rM(uM(new Hv,e.Math.max(1,BB(mMn(i,(HXn(),lpt)),19).a)),1),BB(RX(s,i.c.i),121)),BB(RX(s,i.d.i),121)));return t}function s_n(){s_n=O,byt=dq(new B2,(yMn(),Fat),(lWn(),vot)),dyt=dq(new B2,_at,jot),gyt=WG(dq(new B2,_at,Dot),Bat,xot),lyt=WG(dq(dq(new B2,_at,lot),Fat,bot),Bat,wot),pyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),wyt=WG(new B2,Bat,mot),hyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Iot),Bat,Sot),fyt=WG(dq(dq(new B2,Fat,Iot),Fat,uot),Bat,aot)}function h_n(n,t,e,i,r,c){var a,u,o,s,h,f;for(a=lSn(t,o=jon(t)-jon(n)),u=M$(0,0,0);o>=0&&(!Iyn(n,a)||(o<22?u.l|=1<<o:o<44?u.m|=1<<o-22:u.h|=1<<o-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--o;return e&&Oon(u),c&&(i?(ltt=aon(n),r&&(ltt=hun(ltt,(X7(),dtt)))):ltt=M$(n.l,n.m,n.h)),u}function f_n(n,t){var e,i,r,c,a,u,o,s,h,f;for(s=n.e[t.c.p][t.p]+1,o=t.c.a.c.length+1,u=new Wb(n.a);u.a<u.c.c.length;){for(a=BB(n0(u),11),f=0,c=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(a),new Gw(a)])));dAn(r);)(i=BB(U5(r),11)).i.c==t.c&&(f+=bL(n,i.i)+1,++c);e=f/c,(h=a.j)==(kUn(),oCt)?n.f[a.p]=e<s?n.c-e:n.b+(o-e):h==ICt&&(n.f[a.p]=e<s?n.b+e:n.c-(o-e))}}function l_n(n,t,e){var i,r,c,a;if(null==n)throw Hp(new Mk(zWn));for(i=(c=n.length)>0&&(b1(0,n.length),45==n.charCodeAt(0)||(b1(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==egn((b1(i,n.length),n.charCodeAt(i))))throw Hp(new Mk(DQn+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw Hp(new Mk(DQn+n+'"'));if(r||a>e)throw Hp(new Mk(DQn+n+'"'));return a}function b_n(n){var t,i,r,c,a,u;for(a=new YT,c=new Wb(n.a);c.a<c.c.c.length;)Vl(r=BB(n0(c),112),r.f.c.length),Ql(r,r.k.c.length),0==r.i&&(r.o=0,r5(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),112)).o+1,t=new Wb(r.f);t.a<t.c.c.length;)Yl(u=BB(n0(t),129).a,e.Math.max(u.o,i)),Ql(u,u.i-1),0==u.i&&r5(a,u,a.c.b,a.c)}function w_n(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n);a.a<a.c.c.length;){for(c=BB(n0(a),79),u=(i=PTn(BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82))).i,o=i.j,IA(r=BB(Wtn((!c.a&&(c.a=new eU(FOt,c,6,6)),c.a),0),202),r.j+u,r.k+o),PA(r,r.b+u,r.c+o),e=new AL((!r.a&&(r.a=new $L(xOt,r,5)),r.a));e.e!=e.i.gc();)TA(t=BB(kpn(e),469),t.a+u,t.b+o);Yrn(BB(ZAn(c,(sWn(),OSt)),74),u,o)}}function d_n(n){switch(n){case 100:return mWn(snt,!0);case 68:return mWn(snt,!1);case 119:return mWn(hnt,!0);case 87:return mWn(hnt,!1);case 115:return mWn(fnt,!0);case 83:return mWn(fnt,!1);case 99:return mWn(lnt,!0);case 67:return mWn(lnt,!1);case 105:return mWn(bnt,!0);case 73:return mWn(bnt,!1);default:throw Hp(new dy(ont+n.toString(16)))}}function g_n(n){var t,i,r,c,a;switch(c=BB(xq(n.a,0),10),t=new $vn(n),WB(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,BB(mMn(c,(hWn(),Qft)),61).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return IZ(r=new ISn,t),SZ(i=new wY,a=BB(xq(c.j,0),11)),MZ(i,r),UR(kO(r.n),a.n),UR(kO(r.a),a.a),t}function p_n(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.b],10).k==(uSn(),Sut)?hFn(BB(n.a[n.b],10),(Xyn(),jIt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.c-1&n.a.length-1],10).k==(uSn(),Sut)?hFn(BB(n.a[n.c-1&n.a.length-1],10),(Xyn(),EIt)):2==(n.c-n.b&n.a.length-1)?(hFn(BB(Eon(n),10),(Xyn(),jIt)),hFn(BB(Eon(n),10),EIt)):sLn(n,r),o4(n)}function v_n(n,t,i){var r,c,a,u,o;for(a=0,c=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));c.e!=c.i.gc();)u="",0==(!(r=BB(kpn(c),33)).n&&(r.n=new eU(zOt,r,1,7)),r.n).i||(u=BB(Wtn((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n),0),137).a),qan(o=new csn(a++,t,u),r),hon(o,(qqn(),skt),r),o.e.b=r.j+r.f/2,o.f.a=e.Math.max(r.g,1),o.e.a=r.i+r.g/2,o.f.b=e.Math.max(r.f,1),DH(t.b,o),jIn(i.f,r,o)}function m_n(n){var t,e,i,r,c;i=BB(mMn(n,(hWn(),dlt)),33),c=BB(ZAn(i,(HXn(),Fgt)),174).Hc((mdn(),_Ct)),n.e||(r=BB(mMn(n,Zft),21),t=new xI(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((bDn(),lft))?(Ypn(i,ept,(QEn(),XIt)),KUn(i,t.a,t.b,!1,!0)):qy(TD(ZAn(i,Bgt)))||KUn(i,t.a,t.b,!0,!0)),Ypn(i,Fgt,c?nbn(_Ct):new YK(e=BB(Vj(YCt),9),BB(SR(e,e.length),9),0))}function y_n(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(fV(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=UCn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==fV(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=UCn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function k_n(n){var t,e,i,r,c,a,u;for(r=new Np,i=new oz(ZL(lbn(n.b).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))&&WB(r,new j6(e,v9(n,e.c),v9(n,e.d)));for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(c=BB(t.dd(),113)).d.p=0;for(a=new Kb(new Ob(n.e).a.vc().Kc());a.a.Ob();)t=BB(a.a.Pb(),42),0==(c=BB(t.dd(),113)).d.p&&WB(n.d,RKn(n,c))}function j_n(n){var t,e,i,r,c;for(c=WJ(n),r=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));r.e!=r.i.gc();)if(i=BB(kpn(r),79),!Itn(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82)),c))return!0;for(e=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));e.e!=e.i.gc();)if(t=BB(kpn(e),79),!Itn(PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),c))return!0;return!1}function E_n(n){var t,i,r,c,a,u,o,s;for(s=new km,o=null,i=BB(b3(t=spn(n,0)),8),c=BB(b3(t),8);t.b!=t.d.c;)o=i,i=c,c=BB(b3(t),8),a=ctn(XR(new xI(o.a,o.b),i)),u=ctn(XR(new xI(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(u.a+u.b)/2),a.a=HH(a.a)*r,a.b=HH(a.b)*r,u.a=HH(u.a)*r,u.b=HH(u.b)*r,DH(s,UR(a,i)),DH(s,UR(u,i));return s}function T_n(n,t,e,i){var r,c,a,u,o;return a=n.eh(),r=null,(o=n.Zg())?t&&0==(gKn(n,t,e).Bb&BQn)?(i=_pn(o.Vk(),n,i),n.uh(null),r=t.fh()):o=null:(a&&(o=a.fh()),t&&(r=t.fh())),o!=r&&o&&o.Zk(n),u=n.Vg(),n.Rg(t,e),o!=r&&r&&r.Yk(n),n.Lg()&&n.Mg()&&(a&&u>=0&&u!=e&&(c=new nU(n,1,u,a,null),i?i.Ei(c):i=c),e>=0&&(c=new nU(n,1,e,u==e?a:null,t),i?i.Ei(c):i=c)),i}function M_n(n){var t,e,i;if(null==n.b){if(i=new Sk,null!=n.i&&(cO(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(rQ(n.i)||(i.a+="//"),cO(i,n.a)),null!=n.d&&(i.a+="/",cO(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),cO(i,n.j[t]);null!=n.g&&(i.a+="?",cO(i,n.g))}else cO(i,n.a);null!=n.e&&(i.a+="#",cO(i,n.e)),n.b=i.a}return n.b}function S_n(n,t){var e,i,r,c,a,u;for(r=new Wb(t.a);r.a<r.c.c.length;)cL(c=mMn(i=BB(n0(r),10),(hWn(),dlt)),11)&&(u=yFn(t,i,(a=BB(c,11)).o.a,a.o.b),a.n.a=u.a,a.n.b=u.b,qIn(a,BB(mMn(i,Qft),61)));e=new xI(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))?(hon(n,(HXn(),ept),(QEn(),XIt)),BB(mMn(vW(n),Zft),21).Fc(dft),bGn(n,e,!1)):bGn(n,e,!0)}function P_n(n,t,e){var i,r,c,a,u;OTn(e,"Minimize Crossings "+n.a,1),i=0==t.b.c.length||!jE(AV(new Rq(null,new w1(t.b,16)),new aw(new Ac))).sd((dM(),tit)),u=1==t.b.c.length&&1==BB(xq(t.b,0),29).a.c.length,c=GC(mMn(t,(HXn(),sgt)))===GC((ufn(),pIt)),i||u&&!c||(Ssn(r=sxn(n,t),(a=BB(Dpn(r,0),214)).c.Rf()?a.c.Lf()?new Ud(n):new Xd(n):new zd(n)),afn(n)),HSn(e)}function I_n(n,t,e,i){var r,c,a,u;if(u=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),r=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),a=Zrn(n,t,u),c=Jrn(n,e,r),a&&r==a.a&&wW(e,a.g))return e;if(c&&!i)throw Hp(new _y("key already present: "+e));return a&&LLn(n,a),c&&LLn(n,c),YIn(n,new qW(e,r,t,u),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),qkn(n),a?a.g:null}function C_n(n,t,e){var i,r,c,a,u;for(c=0;c<t;c++){for(i=0,u=c+1;u<t;u++)i=rbn(rbn(cbn(e0(n[c],UQn),e0(n[u],UQn)),e0(e[c+u],UQn)),e0(dG(i),UQn)),e[c+u]=dG(i),i=jz(i,32);e[c+t]=dG(i)}for(ncn(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=rbn(rbn(cbn(e0(n[r],UQn),e0(n[r],UQn)),e0(e[a],UQn)),e0(dG(i),UQn)),e[a]=dG(i),i=rbn(i=jz(i,32),e0(e[++a],UQn)),e[a]=dG(i),i=jz(i,32);return e}function O_n(n,t,i){var r,c,a,u,o,s,h,f;if(!h3(t)){for(s=Gy(MD(edn(i.c,(HXn(),Npt)))),!(h=BB(edn(i.c,Lpt),142))&&(h=new lm),r=i.a,c=null,o=t.Kc();o.Ob();)u=BB(o.Pb(),11),f=0,c?(f=s,f+=c.o.b):f=h.d,a=AN(oM(new qv,u),n.f),VW(n.k,u,a),UNn(aM(cM(rM(uM(new Hv,0),IJ(e.Math.ceil(f))),r),a)),c=u,r=a;UNn(aM(cM(rM(uM(new Hv,0),IJ(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function A_n(n,t,e,i,r,c,a,u){var o,s,h;return h=!1,s=c-e.s,o=e.t-t.f+cHn(e,s,!1).a,!(i.g+u>s)&&(o+u+cHn(i,s,!1).a<=t.b&&(p9(e,c-e.s),e.c=!0,p9(i,c-e.s),Tvn(i,e.s,e.t+e.d+u),i.k=!0,xcn(e.q,i),h=!0,r&&(tin(t,i),i.j=t,n.c.length>a&&(Tkn((l1(a,n.c.length),BB(n.c[a],200)),i),0==(l1(a,n.c.length),BB(n.c[a],200)).a.c.length&&s6(n,a)))),h)}function $_n(n,t){var e,i,r,c,a;if(OTn(t,"Partition midprocessing",1),r=new pJ,JT(AV(new Rq(null,new w1(n.a,16)),new di),new ld(r)),0!=r.d){for(a=BB(P4(a1(new Rq(null,(r.i||(r.i=new HL(r,r.c))).Nc())),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=BB((i=a.Kc()).Pb(),19);i.Ob();)c=BB(i.Pb(),19),XLn(BB(h6(r,e),21),BB(h6(r,c),21)),e=c;HSn(t)}}function L_n(n,t,e){var i,r,c,a,u;if(0==t.p){for(t.p=1,(r=e)||(r=new rC(new Np,new YK(i=BB(Vj(FCt),9),BB(SR(i,i.length),9),0))),BB(r.a,15).Fc(t),t.k==(uSn(),Mut)&&BB(r.b,21).Fc(BB(mMn(t,(hWn(),Qft)),61)),a=new Wb(t.j);a.a<a.c.c.length;)for(c=BB(n0(a),11),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(c),new Gw(c)])));dAn(u);)L_n(n,BB(U5(u),11).i,r);return r}return null}function N_n(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=BB(n.Ab.g,1934),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(mK(t,(e=r[c]).d))return e}else if(null==t){for(i=new AL(n.Ab);i.e!=i.i.gc();)if(null==(e=BB(kpn(i),590)).d)return e}else for(i=new AL(n.Ab);i.e!=i.i.gc();)if(mK(t,(e=BB(kpn(i),590)).d))return e;return null}function x_n(n,t){var e,i,r,c,a,u,o;if(null==(o=TD(mMn(t,(IAn(),Nkt))))||(kW(o),o)){for(DOn(n,t),r=new Np,u=spn(t.b,0);u.b!=u.d.c;)(e=xPn(n,BB(b3(u),86),null))&&(qan(e,t),r.c[r.c.length]=e);if(n.a=null,n.b=null,r.c.length>1)for(i=new Wb(r);i.a<i.c.c.length;)for(c=0,a=spn((e=BB(n0(i),135)).b,0);a.b!=a.d.c;)BB(b3(a),86).g=c++;return r}return u6(Pun(Gk(Gyt,1),tZn,135,0,[t]))}function D_n(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p;crn(b=A3(n,qun(t),r),R2(r,q6n)),d=D2(w=r,U6n),cSn(new Lg(b).a,d),g=D2(w,"endPoint"),rSn(new Rg(b).a,g),p=N2(w,D6n),SEn(new Fg(b).a,p),f=R2(r,K6n),qR((c=new hC(n,b)).a,c.b,f),l=R2(r,R6n),GR((a=new fC(n,b)).a,a.b,l),s=N2(r,F6n),Fyn((u=new lC(e,b)).b,u.a,s),h=N2(r,_6n),Byn((o=new bC(i,b)).b,o.a,h)}function R_n(n,t,e){var i,r,c,a,u;switch(u=null,t.g){case 1:for(r=new Wb(n.j);r.a<r.c.c.length;)if(qy(TD(mMn(i=BB(n0(r),11),(hWn(),tlt)))))return i;hon(u=new ISn,(hWn(),tlt),(hN(),!0));break;case 2:for(a=new Wb(n.j);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),11),(hWn(),klt)))))return c;hon(u=new ISn,(hWn(),klt),(hN(),!0))}return u&&(IZ(u,n),qIn(u,e),yvn(u.n,n.o,e)),u}function K_n(n,t){var i,r,c,a,u,o;for(o=-1,u=new YT,r=new m6(n.b);y$(r.a)||y$(r.b);){for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),o=e.Math.max(o,Gy(MD(mMn(i,(HXn(),agt))))),i.c==n?JT(AV(new Rq(null,new w1(i.b,16)),new fe),new nd(u)):JT(AV(new Rq(null,new w1(i.b,16)),new le),new td(u)),a=spn(u,0);a.b!=a.d.c;)Lx(c=BB(b3(a),70),(hWn(),Uft))||hon(c,Uft,i);gun(t,u),yQ(u)}return o}function __n(n,t,e,i,r){var c,a,u,o;Bl(c=new $vn(n),(uSn(),Cut)),hon(c,(HXn(),ept),(QEn(),XIt)),hon(c,(hWn(),dlt),t.c.i),hon(a=new ISn,dlt,t.c),qIn(a,r),IZ(a,c),hon(t.c,Elt,c),Bl(u=new $vn(n),Cut),hon(u,ept,XIt),hon(u,dlt,t.d.i),hon(o=new ISn,dlt,t.d),qIn(o,r),IZ(o,u),hon(t.d,Elt,u),SZ(t,a),MZ(t,o),LZ(0,e.c.length),MS(e.c,0,c),i.c[i.c.length]=u,hon(c,Bft,iln(1)),hon(u,Bft,iln(1))}function F_n(n,t,i,r,c){var a,u,o,s,h;o=c?r.b:r.a,FT(n.a,r)||(h=o>i.s&&o<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(o-Gy(MD(gx(i.e))))<lZn&&e.Math.abs(o-Gy(MD(gx(i.j))))<lZn,s|=e.Math.abs(o-Gy(MD(px(i.e))))<lZn&&e.Math.abs(o-Gy(MD(px(i.j))))<lZn),(h||s)&&((u=BB(mMn(t,(HXn(),vgt)),74))||(u=new km,hon(t,vgt,u)),r5(u,a=new wA(r),u.c.b,u.c),TU(n.a,a)))}function B_n(n,t,e,i){var r,c,a,u,o,s,h;if(WCn(n,t,e,i))return!0;for(a=new Wb(t.f);a.a<a.c.c.length;){switch(c=BB(n0(a),324),u=!1,s=(o=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:u=Osn(n,o+c.b.a,0,o+c.c.a,h-1);break;case 1:u=Osn(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:u=Osn(n,o+c.b.a,r,o+c.c.a,n.p-1);break;default:u=Osn(n,0,h+c.b.a,o-1,h+c.c.a)}if(u)return!0}return!1}function H_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(fbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rC(e.c.i,e)));SQ(),m$(s,n.c),kG(n.b,u.p,s)}}function q_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(lbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rC(e.d.i,e)));SQ(),m$(s,n.c),kG(n.f,u.p,s)}}function G_n(n){NM(n,new MTn(vj(wj(pj(gj(new du,l5n),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new xu))),u2(n,l5n,QJn,zMt),u2(n,l5n,vZn,15),u2(n,l5n,pZn,iln(0)),u2(n,l5n,A4n,mpn(_Mt)),u2(n,l5n,PZn,mpn(BMt)),u2(n,l5n,SZn,mpn(qMt)),u2(n,l5n,VJn,f5n),u2(n,l5n,jZn,mpn(FMt)),u2(n,l5n,BZn,mpn(HMt)),u2(n,l5n,b5n,mpn(RMt)),u2(n,l5n,u3n,mpn(KMt))}function z_n(n,t){var e,i,r,c,a,u,o,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return kUn(),PCt;switch(s=n.n.a,h=n.n.b,u=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return kUn(),ICt;if(s+u>a)return kUn(),oCt;break;case 4:case 3:if(h<0)return kUn(),sCt;if(h+e>c)return kUn(),SCt}return(o=(s+u/2)/a)+(i=(h+e/2)/c)<=1&&o-i<=0?(kUn(),ICt):o+i>=1&&o-i>=0?(kUn(),oCt):i<.5?(kUn(),sCt):(kUn(),SCt)}function U_n(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(e=!1,o=Gy(MD(mMn(t,(HXn(),Opt)))),l=KVn*o,r=new Wb(t.b);r.a<r.c.c.length;)for(i=BB(n0(r),29),c=BB(n0(u=new Wb(i.a)),10),s=wU(n.a[c.p]);u.a<u.c.c.length;)a=BB(n0(u),10),s!=(h=wU(n.a[a.p]))&&(f=K$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function X_n(n,t,e,i,r,c,a){var u,o,s,h,f;for(f=new bA,o=t.Kc();o.Ob();)for(h=new Wb(BB(o.Pb(),839).wf());h.a<h.c.c.length;)GC((s=BB(n0(h),181)).We((sWn(),gSt)))===GC((Rtn(),XPt))&&(rKn(f,s,!1,i,r,c,a),IPn(n,f));for(u=e.Kc();u.Ob();)for(h=new Wb(BB(u.Pb(),839).wf());h.a<h.c.c.length;)GC((s=BB(n0(h),181)).We((sWn(),gSt)))===GC((Rtn(),UPt))&&(rKn(f,s,!0,i,r,c,a),IPn(n,f))}function W_n(n,t,e){var i,r,c,a,u,o,s;for(a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new oz(ZL(dLn(c=BB(kpn(a),33)).a.Kc(),new h));dAn(r);)nAn(i=BB(U5(r),79))||nAn(i)||QCn(i)||(o=BB(qC(AY(e.f,c)),86),s=BB(RX(e,PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))),86),o&&s&&(hon(u=new UQ(o,s),(qqn(),skt),i),qan(u,i),DH(o.d,u),DH(s.b,u),DH(t.a,u)))}function V_n(n,t){var i,r,c,a,u,o,s;for(o=BB(BB(h6(n.r,t),21),84).Kc();o.Ob();)(r=(u=BB(o.Pb(),111)).c?WH(u.c):0)>0?u.a?r>(s=u.b.rf().b)&&(n.v||1==u.c.d.c.length?(a=(r-s)/2,u.d.d=a,u.d.a=a):(i=(BB(xq(u.c.d,0),181).rf().b-s)/2,u.d.d=e.Math.max(0,i),u.d.a=r-i-s)):u.d.a=n.t+r:Hz(n.u)&&((c=_Tn(u.b)).d<0&&(u.d.d=-c.d),c.d+c.a>u.b.rf().b&&(u.d.a=c.d+c.a-u.b.rf().b))}function Q_n(n,t){var e;switch(vnn(n)){case 6:return XC(t);case 7:return UC(t);case 8:return zC(t);case 3:return Array.isArray(t)&&!((e=vnn(t))>=14&&e<=16);case 11:return null!=t&&typeof t===xWn;case 12:return null!=t&&(typeof t===AWn||typeof t==xWn);case 0:return Qpn(t,n.__elementTypeId$);case 2:return DU(t)&&!(t.im===C);case 1:return DU(t)&&!(t.im===C)||Qpn(t,n.__elementTypeId$);default:return!0}}function Y_n(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function J_n(n,t){var i,r,c,a,u,o;return(c=iin(n))==(o=iin(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*zQn)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*zQn)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=yhn(n.f)),a=n.c,!t.c&&(t.c=yhn(t.f)),u=t.c,r<0?a=Nnn(a,kBn(-r)):r>0&&(u=Nnn(u,kBn(r))),tgn(a,u))):c<o?-1:1}function Z_n(n,t){var e,i,r,c,a,u,o;for(c=0,u=0,o=0,r=new Wb(n.f.e);r.a<r.c.c.length;)t!=(i=BB(n0(r),144))&&(c+=a=n.i[t.b][i.b],(e=W8(t.d,i.d))>0&&n.d!=(q7(),Aat)&&(u+=a*(i.d.a+n.a[t.b][i.b]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(q7(),Cat)&&(o+=a*(i.d.b+n.a[t.b][i.b]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new xI(u/c,t.d.b);case 2:return new xI(t.d.a,o/c);default:return new xI(u/c,o/c)}}function nFn(n,t){var e,i,r,c;if(zsn(),c=BB(mMn(n.i,(HXn(),ept)),98),0!=n.j.g-t.j.g||c!=(QEn(),UIt)&&c!=WIt&&c!=XIt)return 0;if(c==(QEn(),UIt)&&(e=BB(mMn(n,ipt),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function tFn(n){var t,e,i,r,c;for(WB(c=new J6((!n.a&&(n.a=new $L(xOt,n,5)),n.a).i+2),new xI(n.j,n.k)),JT(new Rq(null,(!n.a&&(n.a=new $L(xOt,n,5)),new w1(n.a,16))),new Cg(c)),WB(c,new xI(n.b,n.c)),t=1;t<c.c.length-1;)l1(t-1,c.c.length),e=BB(c.c[t-1],8),l1(t,c.c.length),i=BB(c.c[t],8),l1(t+1,c.c.length),r=BB(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?s6(c,t):++t;return c}function eFn(n,t){var e,i,r,c,a,u,o;for(e=ON(iM(tM(eM(new Wv,t),new gY(t.e)),gst),n.a),0==t.j.c.length||V9(BB(xq(t.j,0),57).a,e),o=new Dp,VW(n.e,e,o),a=new Rv,u=new Rv,c=new Wb(t.k);c.a<c.c.c.length;)TU(a,(r=BB(n0(c),17)).c),TU(u,r.d);(i=a.a.gc()-u.a.gc())<0?(Uun(o,!0,(Ffn(),_Pt)),Uun(o,!1,FPt)):i>0&&(Uun(o,!1,(Ffn(),_Pt)),Uun(o,!0,FPt)),Otn(t.g,new sP(n,e)),VW(n.g,t,e)}function iFn(){var n;for(iFn=O,Ltt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Ntt=x8(ANt,hQn,25,37,15,1),xtt=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),Dtt=x8(LNt,FQn,25,37,14,1),n=2;n<=36;n++)Ntt[n]=IJ(e.Math.pow(n,Ltt[n])),Dtt[n]=Ojn(bVn,Ntt[n])}function rFn(n){var t;if(1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));return t=new km,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),!1)),bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),!0)),t}function cFn(n,t){var e,i,r;for(r=!1,i=new oz(ZL((t.d?n.a.c==(gJ(),tyt)?fbn(t.b):lbn(t.b):n.a.c==(gJ(),nyt)?fbn(t.b):lbn(t.b)).a.Kc(),new h));dAn(i);)if(e=BB(U5(i),17),(qy(n.a.f[n.a.g[t.b.p].p])||b5(e)||e.c.i.c!=e.d.i.c)&&!qy(n.a.n[n.a.g[t.b.p].p])&&!qy(n.a.n[n.a.g[t.b.p].p])&&(r=!0,FT(n.b,n.a.g[Lmn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function aFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(SQ(),m$(n,new Xu),u=new M2(n,0),f=new Np,c=0;u.b<u.d.gc();)Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),157),0!=f.c.length&&iG(a)*eG(a)>2*c?(h=new Gtn(f),s=iG(a)/eG(a),o=yXn(h,t,new bm,e,i,r,s),UR(kO(h.e),o),f.c=x8(Ant,HWn,1,0,5,1),c=0,f.c[f.c.length]=h,f.c[f.c.length]=a,c=iG(h)*eG(h)+iG(a)*eG(a)):(f.c[f.c.length]=a,c+=iG(a)*eG(a));return f}function uFn(n,t,e){var i,r,c,a,u,o,s;if(0==(i=e.gc()))return!1;if(n.ej())if(o=n.fj(),kwn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,o):n.Zi(5,null,e,t,o),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)s=n.Oi(r),u=n.cj(s,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(kwn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)u=n.cj(n.Oi(r),u);u&&u.Fi()}return!0}function oFn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=n.Ui(t,n.oi(t,e)),e,t,c),n.bj()&&!(n.ni()&&a?Nfn(a,e):GC(a)===GC(e))?(a&&(r=n.dj(a,r)),(r=n.cj(e,r))?(r.Ei(i),r.Fi()):n.$i(i)):r?(r.Ei(i),r.Fi()):n.$i(i),a):(a=n.Ui(t,n.oi(t,e)),n.bj()&&!(n.ni()&&a?Nfn(a,e):GC(a)===GC(e))&&(r=null,a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function sFn(n,t){var i,r,c,a,u,o,s,h;if(n.e=t,n.f=BB(mMn(t,(Mrn(),hat)),230),XTn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!qy(TD(mMn(t,(fRn(),Hct)))))for(h=n.e.e.c.length,o=new Wb(t.e);o.a<o.c.c.length;)(s=BB(n0(o),144).d).a=OG(n.f)*h,s.b=OG(n.f)*h;for(i=t.b,a=new Wb(t.c);a.a<a.c.c.length;)if(c=BB(n0(a),282),(r=BB(mMn(c,eat),19).a)>0){for(u=0;u<r;u++)WB(i,new hX(c));BIn(c)}}function hFn(n,t){var i,r,c,a,u;if(n.k==(uSn(),Sut)&&(i=jE(AV(BB(mMn(n,(hWn(),Plt)),15).Oc(),new aw(new ri))).sd((dM(),tit))?t:(Xyn(),TIt),hon(n,ult,i),i!=(Xyn(),EIt)))for(r=BB(mMn(n,dlt),17),u=Gy(MD(mMn(r,(HXn(),agt)))),a=0,i==jIt?a=n.o.b-e.Math.ceil(u/2):i==TIt&&(n.o.b-=Gy(MD(mMn(vW(n),jpt))),a=(n.o.b-e.Math.ceil(u))/2),c=new Wb(n.j);c.a<c.c.c.length;)BB(n0(c),11).n.b=a}function fFn(){fFn=O,JM(),TNt=new Rh,Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(z7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(X7n)]),Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),new $A("-1"),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE("\\c+")])]),new $A("0"),new $A("0"),new $A("1"),new $A("0"),new $A(int)}function lFn(n){var t,e;return n.c&&n.c.kh()&&(e=BB(n.c,49),n.c=BB(tfn(n,e),138),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,2,e,n.c)),cL(n.Cb,399)?n.Db>>16==-15&&n.Cb.nh()&&$7(new k9(n.Cb,9,13,e,n.c,uvn(H7(BB(n.Cb,59)),n))):cL(n.Cb,88)&&n.Db>>16==-23&&n.Cb.nh()&&(cL(t=n.c,88)||(gWn(),t=d$t),cL(e,88)||(gWn(),e=d$t),$7(new k9(n.Cb,9,10,e,t,uvn(a4(BB(n.Cb,26)),n)))))),n.c}function bFn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hypernodes processing",1),i=new Wb(n.b);i.a<i.c.c.length;)for(a=new Wb(BB(n0(i),29).a);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),10),(HXn(),bgt))))&&c.j.c.length<=2){for(s=0,o=0,e=0,r=0,u=new Wb(c.j);u.a<u.c.c.length;)switch(BB(n0(u),11).j.g){case 1:++s;break;case 2:++o;break;case 3:++e;break;case 4:++r}0==s&&0==e&&jXn(n,c,r<=o)}HSn(t)}function wFn(n,t){var e,i,r,c,a,u,o,s,h;for(OTn(t,"Layer constraint edge reversal",1),a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),h=-1,e=new Np,s=n2(c.a),r=0;r<s.length;r++)i=BB(mMn(s[r],(hWn(),ilt)),303),-1==h?i!=(z7(),Ift)&&(h=r):i==(z7(),Ift)&&(PZ(s[r],null),Qyn(s[r],h++,c)),i==(z7(),Sft)&&WB(e,s[r]);for(o=new Wb(e);o.a<o.c.c.length;)PZ(u=BB(n0(o),10),null),PZ(u,c)}HSn(t)}function dFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Hyperedge merging",1),xAn(n,t),u=new M2(t.b,0);u.b<u.d.gc();)if(Px(u.b<u.d.gc()),0!=(s=BB(u.d.Xb(u.c=u.b++),29).a).c.length)for(i=null,r=null,c=null,a=null,o=0;o<s.c.length;o++)l1(o,s.c.length),(r=(i=BB(s.c[o],10)).k)==(uSn(),Put)&&a==Put&&(h=hHn(i,c)).a&&(rDn(i,c,h.b,h.c),l1(o,s.c.length),PE(s.c,o,1),--o,i=c,r=a),c=i,a=r;HSn(e)}function gFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Clt)))||GC(mMn(t.j,(HXn(),Ldt)))===GC((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Clt)))&&hon(t.j,Clt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Clt,!0)),e=eKn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=eKn(n,t)}while(r>e);return r}function pFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Clt)))||GC(mMn(t.j,(HXn(),Ldt)))===GC((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Clt)))&&hon(t.j,Clt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Clt,!0)),e=nIn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=nIn(n,t)}while(r>e);return r}function vFn(n,t,e){var i,r,c,a,u,o,s;if(t==e)return!0;if(t=bAn(n,t),e=bAn(n,e),i=qvn(t)){if((o=qvn(e))!=i)return!!o&&(a=i.Dj())==o.Dj()&&null!=a;if(!t.d&&(t.d=new $L(VAt,t,1)),r=(c=t.d).i,!e.d&&(e.d=new $L(VAt,e,1)),r==(s=e.d).i)for(u=0;u<r;++u)if(!vFn(n,BB(Wtn(c,u),87),BB(Wtn(s,u),87)))return!1;return!0}return t.e==e.e}function mFn(n,t,e,i){var r,c,a,u,o,s,h,f;if($xn(n.e,t)){for(f=axn(n.e.Tg(),t),c=BB(n.g,119),h=null,o=-1,u=-1,r=0,s=0;s<n.i;++s)a=c[s],f.rl(a.ak())&&(r==e&&(o=s),r==i&&(u=s,h=a.dd()),++r);if(-1==o)throw Hp(new Ay(u8n+e+o8n+r));if(-1==u)throw Hp(new Ay(s8n+i+o8n+r));return Cln(n,o,u),mA(n.e)&&Lv(n,LY(n,7,t,iln(i),h,e,!0)),h}throw Hp(new _y("The feature must be many-valued to support move"))}function yFn(n,t,e,i){var r,c,a,u,o;switch((o=new wA(t.n)).a+=t.o.a/2,o.b+=t.o.b/2,u=Gy(MD(mMn(t,(HXn(),tpt)))),c=n.f,a=n.d,r=n.c,BB(mMn(t,(hWn(),Qft)),61).g){case 1:o.a+=a.b+r.a-e/2,o.b=-i-u,t.n.b=-(a.d+u+r.b);break;case 2:o.a=c.a+a.b+a.c+u,o.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+u-r.a;break;case 3:o.a+=a.b+r.a-e/2,o.b=c.b+a.d+a.a+u,t.n.b=c.b+a.a+u-r.b;break;case 4:o.a=-e-u,o.b+=a.d+r.b-i/2,t.n.a=-(a.b+u+r.a)}return o}function kFn(n){var t,e,i,r,c,a;return qan(i=new min,n),GC(mMn(i,(HXn(),Udt)))===GC((Ffn(),BPt))&&hon(i,Udt,Wln(i)),null==mMn(i,(I6(),TMt))&&(a=BB($Mn(n),160),hon(i,TMt,iO(a.We(TMt)))),hon(i,(hWn(),dlt),n),hon(i,Zft,new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),r=Pzn((JJ(n)&&(GM(),new Dy(JJ(n))),GM(),new JN(JJ(n)?new Dy(JJ(n)):null,n)),FPt),c=BB(mMn(i,zgt),116),eZ(e=i.d,c),eZ(e,r),i}function jFn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,TD(mMn(i,slt)))):i.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,(hN(),!0))):r.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(r,hlt),11)),hon(n,flt,BB(mMn(r,flt),11)),hon(n,slt,(hN(),!0))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function EFn(n){var t,e,i,r,c,a,u;for(n.o=new Lp,i=new YT,a=new Wb(n.e.a);a.a<a.c.c.length;)1==kbn(c=BB(n0(a),121)).c.length&&r5(i,c,i.c.b,i.c);for(;0!=i.b;)0!=kbn(c=BB(0==i.b?null:(Px(0!=i.b),Atn(i,i.a.a)),121)).c.length&&(t=BB(xq(kbn(c),0),213),e=c.g.a.c.length>0,u=Nbn(t,c),KN(e?u.b:u.g,t),1==kbn(u).c.length&&r5(i,u,i.c.b,i.c),r=new rC(c,t),d3(n.o,r),y7(n.e.a,c))}function TFn(n,t){var i,r,c,a;return r=e.Math.abs(qz(n.b).a-qz(t.b).a),a=e.Math.abs(qz(n.b).b-qz(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function MFn(n){var t,e,i;for(nUn(n,n.e,n.f,(dJ(),Lyt),!0,n.c,n.i),nUn(n,n.e,n.f,Lyt,!1,n.c,n.i),nUn(n,n.e,n.f,Nyt,!0,n.c,n.i),nUn(n,n.e,n.f,Nyt,!1,n.c,n.i),CFn(n,n.c,n.e,n.f,n.i),e=new M2(n.i,0);e.b<e.d.gc();)for(Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),128),i=new M2(n.i,e.b);i.b<i.d.gc();)Px(i.b<i.d.gc()),Nqn(t,BB(i.d.Xb(i.c=i.b++),128));CXn(n.i,BB(mMn(n.d,(hWn(),Slt)),230)),GGn(n.i)}function SFn(n,t){var e,i;if(null!=t)if(i=iyn(n)){if(0==(1&i.i))return nS(),!(e=BB(RX(mAt,i),55))||e.wj(t);if(i==$Nt)return zC(t);if(i==ANt)return cL(t,19);if(i==DNt)return cL(t,155);if(i==NNt)return cL(t,217);if(i==ONt)return cL(t,172);if(i==xNt)return UC(t);if(i==RNt)return cL(t,184);if(i==LNt)return cL(t,162)}else if(cL(t,56))return n.uk(BB(t,56));return!1}function PFn(){var n,t,e,i,r,c,a,u,o;for(PFn=O,WLt=x8(NNt,v6n,25,255,15,1),VLt=x8(ONt,WVn,25,64,15,1),t=0;t<255;t++)WLt[t]=-1;for(e=90;e>=65;e--)WLt[e]=e-65<<24>>24;for(i=122;i>=97;i--)WLt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)WLt[r]=r-48+52<<24>>24;for(WLt[43]=62,WLt[47]=63,c=0;c<=25;c++)VLt[c]=65+c&QVn;for(a=26,o=0;a<=51;++a,o++)VLt[a]=97+o&QVn;for(n=52,u=0;n<=61;++n,u++)VLt[n]=48+u&QVn;VLt[62]=43,VLt[63]=47}function IFn(n,t){var i,r,c,a,u,o,s,h,f,l,b;if(n.dc())return new Gj;for(s=0,f=0,r=n.Kc();r.Ob();)c=BB(r.Pb(),37).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*Gy(MD(mMn(BB(n.Kc().Pb(),37),(HXn(),Edt))))),l=0,b=0,o=0,i=t,u=n.Kc();u.Ob();)l+(h=(a=BB(u.Pb(),37)).f).a>s&&(l=0,b+=o+t,o=0),ZRn(a,l,b),i=e.Math.max(i,l+h.a),o=e.Math.max(o,h.b),l+=h.a+t;return new xI(i+t,b+o+t)}function CFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(a=new Wb(t);a.a<a.c.c.length;){if(o=(c=BB(n0(a),17)).c,e.a._b(o))dJ(),s=Lyt;else{if(!i.a._b(o))throw Hp(new _y("Source port must be in one of the port sets."));dJ(),s=Nyt}if(h=c.d,e.a._b(h))dJ(),f=Lyt;else{if(!i.a._b(h))throw Hp(new _y("Target port must be in one of the port sets."));dJ(),f=Nyt}u=new tIn(c,s,f),VW(n.b,c,u),r.c[r.c.length]=u}}function OFn(n,t){var e,i,r,c,a,u,o;if(!WJ(n))throw Hp(new Fy(F5n));if(c=(i=WJ(n)).g,r=i.f,c<=0&&r<=0)return kUn(),PCt;switch(u=n.i,o=n.j,t.g){case 2:case 1:if(u<0)return kUn(),ICt;if(u+n.g>c)return kUn(),oCt;break;case 4:case 3:if(o<0)return kUn(),sCt;if(o+n.f>r)return kUn(),SCt}return(a=(u+n.g/2)/c)+(e=(o+n.f/2)/r)<=1&&a-e<=0?(kUn(),ICt):a+e>=1&&a-e>=0?(kUn(),oCt):e<.5?(kUn(),sCt):(kUn(),SCt)}function AFn(n,t,e,i,r){var c,a;if(c=rbn(e0(t[0],UQn),e0(i[0],UQn)),n[0]=dG(c),c=kz(c,32),e>=r){for(a=1;a<r;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}else{for(a=1;a<e;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<r;a++)c=rbn(c,e0(i[a],UQn)),n[a]=dG(c),c=kz(c,32)}0!=Vhn(c,0)&&(n[a]=dG(c))}function $Fn(n){var t,e,i,r,c,a;if(wWn(),4!=n.e&&5!=n.e)throw Hp(new _y("Token#complementRanges(): must be RANGE: "+n.e));for(T$n(c=n),qHn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==unt&&(i-=2),(r=new M0(4)).b=x8(ANt,hQn,25,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=unt&&(r.b[a++]=e+1,r.b[a]=unt),r.a=!0,r}function LFn(n,t,e){var i,r,c,a,u,o,s,h;if(0==(i=e.gc()))return!1;if(n.ej())if(s=n.fj(),BTn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,s):n.Zi(5,null,e,t,s),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)h=n.g[r],u=n.cj(h,u),u=n.jj(h,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(BTn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)o=n.g[r],u=n.cj(o,u);u&&u.Fi()}return!0}function NFn(n,t,e,i){var r,c,a,u,o;for(a=new Wb(n.k);a.a<a.c.c.length;)r=BB(n0(a),129),i&&r.c!=(O6(),Tyt)||(o=r.b).g<0&&r.d>0&&(Vl(o,o.d-r.d),r.c==(O6(),Tyt)&&Xl(o,o.a-r.d),o.d<=0&&o.i>0&&r5(t,o,t.c.b,t.c));for(c=new Wb(n.f);c.a<c.c.c.length;)r=BB(n0(c),129),i&&r.c!=(O6(),Tyt)||(u=r.a).g<0&&r.d>0&&(Ql(u,u.i-r.d),r.c==(O6(),Tyt)&&Wl(u,u.b-r.d),u.i<=0&&u.d>0&&r5(e,u,e.c.b,e.c))}function xFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Processor compute fanout",1),$U(n.b),$U(n.a),u=null,c=spn(t.b,0);!u&&c.b!=c.d.c;)qy(TD(mMn(s=BB(b3(c),86),(qqn(),dkt))))&&(u=s);for(r5(o=new YT,u,o.c.b,o.c),jUn(n,o),h=spn(t.b,0);h.b!=h.d.c;)a=SD(mMn(s=BB(b3(h),86),(qqn(),rkt))),r=null!=SJ(n.b,a)?BB(SJ(n.b,a),19).a:0,hon(s,ikt,iln(r)),i=1+(null!=SJ(n.a,a)?BB(SJ(n.a,a),19).a:0),hon(s,tkt,iln(i));HSn(e)}function DFn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(f=yEn(n,e),u=0;u<t;u++){for(yR(r,e),l=new Np,Px(i.b<i.d.gc()),b=BB(i.d.Xb(i.c=i.b++),407),s=f+u;s<n.b;s++)a=b,Px(i.b<i.d.gc()),WB(l,new Exn(a,b=BB(i.d.Xb(i.c=i.b++),407),e));for(h=f+u;h<n.b;h++)Px(i.b>0),i.a.Xb(i.c=--i.b),h>f+u&&fW(i);for(c=new Wb(l);c.a<c.c.c.length;)yR(i,BB(n0(c),407));if(u<t-1)for(o=f+u;o<n.b;o++)Px(i.b>0),i.a.Xb(i.c=--i.b)}}function RFn(){var n,t,e,i,r,c;if(wWn(),INt)return INt;for(sHn(n=new M0(4),ZUn(pnt,!0)),WGn(n,ZUn("M",!0)),WGn(n,ZUn("C",!0)),c=new M0(4),i=0;i<11;i++)Yxn(c,i,i);return sHn(t=new M0(4),ZUn("M",!0)),Yxn(t,4448,4607),Yxn(t,65438,65439),tqn(r=new r$(2),n),tqn(r,sNt),(e=new r$(2)).$l(gG(c,ZUn("L",!0))),e.$l(t),e=new h4(3,e),e=new UU(r,e),INt=e}function KFn(n){var t,e;if(!Ycn(t=SD(ZAn(n,(sWn(),eSt))),n)&&!P8(n,mPt)&&(0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i||qy(TD(ZAn(n,SSt))))){if(null!=t&&0!=RMn(t).length)throw gzn(n,e=oO(oO(new lN("Layout algorithm '"),t),"' not found for ")),Hp(new rk(e.a));if(!Ycn(w1n,n))throw gzn(n,e=oO(oO(new lN("Unable to load default layout algorithm "),w1n)," for unconfigured node ")),Hp(new rk(e.a))}}function _Fn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(u=n.a).length;s<f;++s)UG(c=u[s],w,b);else r=Wvn(n,!1),UG(n.a[0],i.c+t.b,r[0]),UG(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),UG(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Te()}function FFn(n){var t,e,i,r,c,a,u,o,s,h,f;for((f=new aa).d=0,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),29),f.d+=c.a.c.length;for(i=0,r=0,f.a=x8(ANt,hQn,25,n.b.c.length,15,1),s=0,h=0,f.e=x8(ANt,hQn,25,f.d,15,1),e=new Wb(n.b);e.a<e.c.c.length;)for((t=BB(n0(e),29)).p=i++,f.a[t.p]=r++,h=0,o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p=s++,f.e[u.p]=h++;return f.c=new fg(f),f.b=sx(f.d),H_n(f,n),f.f=sx(f.d),q_n(f,n),f}function BFn(n,t){var i,r,c;for(c=BB(xq(n.n,n.n.c.length-1),211).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Wb(n.n);i.a<i.c.c.length;)r+=BB(n0(i),211).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function HFn(n,t){var e,i,r,c,a,u,o,s,h;if(null==(s=TD(mMn(t,(fRn(),iat))))||(kW(s),s)){for(h=x8($Nt,ZYn,25,t.e.c.length,16,1),a=kOn(t),r=new YT,o=new Wb(t.e);o.a<o.c.c.length;)(e=Y$n(n,BB(n0(o),144),null,null,h,a))&&(qan(e,t),r5(r,e,r.c.b,r.c));if(r.b>1)for(i=spn(r,0);i.b!=i.d.c;)for(c=0,u=new Wb((e=BB(b3(i),231)).e);u.a<u.c.c.length;)BB(n0(u),144).b=c++;return r}return u6(Pun(Gk(Kct,1),tZn,231,0,[t]))}function qFn(n){var t,e,i,r,c;if(!n.g){if(c=new To,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,qFn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();++i)ub(BB(kpn(r),449),i);pX(c,(!n.s&&(n.s=new eU(FAt,n,21,17)),n.s)),chn(c),n.g=new don(n,c),n.i=BB(c.g,247),null==n.i&&(n.i=C$t),n.p=null,P5(n).b&=-5}return n.g}function GFn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=Xvn(n,!1),XG(n.a[0],r.d+i.d,t[0]),XG(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XG(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(u=n.a).length;s<f;++s)XG(c=u[s],w,b);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Ue()}function zFn(n){var t,e,i,r,c,a,u,o,s;for(s=x8(ANt,hQn,25,n.b.c.length+1,15,1),o=new Rv,i=0,c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),s[i++]=o.a.gc(),u=new Wb(r.a);u.a<u.c.c.length;)for(e=new oz(ZL(lbn(BB(n0(u),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.zc(t,o);for(a=new Wb(r.a);a.a<a.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(a),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.Bc(t)}return s}function UFn(n,t,e,i){var r,c,a,u,o;if(o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&Nfn(c,e))return!0}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],o.rl(c.ak())&&Nfn(e,c.dd()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&GC(e)===GC(hD(n,BB(c.dd(),56))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&null==c.dd())return!1;return!1}function XFn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),a=BB(n.g,119),$xn(n.e,t)){if(t.hi()&&(c=pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))>=0&&c!=e)throw Hp(new _y(a8n));for(r=0,o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak())){if(r==e)return BB(ovn(n,o,(ZM(),BB(t,66).Oj()?BB(i,72):Z3(t,i))),72);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak()))return ZM(),BB(t,66).Oj()?u:u.dd();return null}function WFn(n,t,i,r){var c,a,u,o;for(o=i,u=new Wb(t.a);u.a<u.c.c.length;){if(a=BB(n0(u),221),c=BB(a.b,65),Cbn(n.b.c,c.b.c+c.b.b)<=0&&Cbn(c.b.c,n.b.c+n.b.b)<=0&&Cbn(n.b.d,c.b.d+c.b.a)<=0&&Cbn(c.b.d,n.b.d+n.b.a)<=0){if(0==Cbn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Cbn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Cbn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Cbn(c.b.d+c.b.a,n.b.d)&&r.b>0){o=0;break}}else o=e.Math.min(o,HIn(n,c,r));o=e.Math.min(o,WFn(n,a,o,r))}return o}function VFn(n,t){var e,i,r,c,a,u;if(n.b<2)throw Hp(new _y("The vector chain must contain at least a source and a target point."));for(Px(0!=n.b),IA(t,(i=BB(n.a.a.c,8)).a,i.b),u=new cx((!t.a&&(t.a=new $L(xOt,t,5)),t.a)),c=spn(n,1);c.a<n.b-1;)a=BB(b3(c),8),u.e!=u.i.gc()?e=BB(kpn(u),469):(tE(),odn(u,e=new ro)),TA(e,a.a,a.b);for(;u.e!=u.i.gc();)kpn(u),Qjn(u);Px(0!=n.b),PA(t,(r=BB(n.c.b.c,8)).a,r.b)}function QFn(n,t){var e,i,r,c,a,u,o,s;for(e=0,i=new Wb((l1(0,n.c.length),BB(n.c[0],101)).g.b.j);i.a<i.c.c.length;)BB(n0(i),11).p=e++;for(t==(kUn(),sCt)?m$(n,new nc):m$(n,new tc),a=0,s=n.c.length-1;a<s;)l1(a,n.c.length),c=BB(n.c[a],101),l1(s,n.c.length),o=BB(n.c[s],101),r=t==sCt?c.c:c.a,u=t==sCt?o.a:o.c,bU(c,t,(Oun(),yst),r),bU(o,t,mst,u),++a,--s;a==s&&bU((l1(a,n.c.length),BB(n.c[a],101)),t,(Oun(),vst),null)}function YFn(n,t,e){var i,r,c,a,u,o,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new xI(t.i+t.g/2,t.j+t.f/2),(o=BB(ZAn(t,(sWn(),gPt)),8)).a=o.a+h,o.b=o.b+f,r=(a.b-o.b)/(a.a-o.a),i=a.b-r*a.a,u=new xI(e.i+e.g/2,e.j+e.f/2),(s=BB(ZAn(e,gPt),8)).a=s.a+h,s.b=s.b+f,c=(u.b-s.b)/(u.a-s.a),l=(i-(u.b-c*u.a))/(c-r),!(o.a<l&&a.a<l||l<o.a&&l<a.a||s.a<l&&u.a<l||l<s.a&&l<u.a)}function JFn(n,t){var e,i,r,c,a,u;if(!(a=BB(RX(n.c,t),183)))throw Hp(new ek("Edge did not exist in input."));return i=Qdn(a),!WE((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a))&&(e=new MB(n,i,u=new Il),wO((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),e),rtn(a,x6n,u)),P8(t,(sWn(),OSt))&&!(!(r=BB(ZAn(t,OSt),74))||pW(r))&&(e5(r,new Qg(c=new Il)),rtn(a,"junctionPoints",c)),AH(a,"container",XJ(t).k),null}function ZFn(n,t,e){var i,r,c,a,u,o;this.a=n,this.b=t,this.c=e,this.e=u6(Pun(Gk(uit,1),HWn,168,0,[new xS(n,t),new xS(t,e),new xS(e,n)])),this.f=u6(Pun(Gk(PMt,1),sVn,8,0,[n,t,e])),this.d=(i=XR(B$(this.b),this.a),r=XR(B$(this.c),this.a),c=XR(B$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),u=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),o=2*(i.a*c.b-i.b*c.a),new xI((r.b*a-i.b*u)/o,(i.a*u-r.a*a)/o))}function nBn(n,t,e,i){var r,c,a,u,o,s,h,f,l;if(f=new GX(n.p),rtn(t,t8n,f),e&&!(n.f?rY(n.f):null).a.dc())for(rtn(t,"logs",s=new Il),u=0,l=new qb((n.f?rY(n.f):null).b.Kc());l.b.Ob();)h=new GX(SD(l.b.Pb())),dnn(s,u),r4(s,u,h),++u;if(i&&rtn(t,"executionTime",new Sl(n.q)),!rY(n.a).a.dc())for(a=new Il,rtn(t,A6n,a),u=0,c=new qb(rY(n.a).b.Kc());c.b.Ob();)r=BB(c.b.Pb(),1949),o=new py,dnn(a,u),r4(a,u,o),nBn(r,o,e,i),++u}function tBn(n,t){var e,i,r,c,a,u;for(c=n.c,a=n.d,SZ(n,null),MZ(n,null),t&&qy(TD(mMn(a,(hWn(),tlt))))?SZ(n,R_n(a.i,(ain(),qvt),(kUn(),oCt))):SZ(n,a),t&&qy(TD(mMn(c,(hWn(),klt))))?MZ(n,R_n(c.i,(ain(),Hvt),(kUn(),ICt))):MZ(n,c),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),70),(r=BB(mMn(e,(HXn(),Ydt)),272))==(Rtn(),XPt)?hon(e,Ydt,UPt):r==UPt&&hon(e,Ydt,XPt);u=qy(TD(mMn(n,(hWn(),Ilt)))),hon(n,Ilt,(hN(),!u)),n.a=Jon(n.a)}function eBn(n,t,i){var r,c,a,u,o;for(r=0,a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)u="",0==(!(c=BB(kpn(a),33)).n&&(c.n=new eU(zOt,c,1,7)),c.n).i||(u=BB(Wtn((!c.n&&(c.n=new eU(zOt,c,1,7)),c.n),0),137).a),qan(o=new qX(u),c),hon(o,(Mrn(),sat),c),o.b=r++,o.d.a=c.i+c.g/2,o.d.b=c.j+c.f/2,o.e.a=e.Math.max(c.g,1),o.e.b=e.Math.max(c.f,1),WB(t.e,o),jIn(i.f,c,o),BB(ZAn(c,(fRn(),Yct)),98),QEn()}function iBn(n,t){var i,r,c,a,u,o,s,h,f,l,b;i=AN(new qv,n.f),o=n.i[t.c.i.p],l=n.i[t.d.i.p],u=t.c,f=t.d,a=u.a.b,h=f.a.b,o.b||(a+=u.n.b),l.b||(h+=f.n.b),s=IJ(e.Math.max(0,a-h)),c=IJ(e.Math.max(0,h-a)),b=e.Math.max(1,BB(mMn(t,(HXn(),bpt)),19).a)*X3(t.c.i.k,t.d.i.k),r=new nI(UNn(aM(cM(rM(uM(new Hv,b),c),i),BB(RX(n.k,t.c),121))),UNn(aM(cM(rM(uM(new Hv,b),s),i),BB(RX(n.k,t.d),121)))),n.c[t.p]=r}function rBn(n,t,e,i){var r,c,a,u,o,s;for(a=new uGn(n,t,e),o=new M2(i,0),r=!1;o.b<o.d.gc();)Px(o.b<o.d.gc()),(u=BB(o.d.Xb(o.c=o.b++),233))==t||u==e?fW(o):!r&&Gy(lL(u.g,u.d[0]).a)>Gy(lL(a.g,a.d[0]).a)?(Px(o.b>0),o.a.Xb(o.c=--o.b),yR(o,a),r=!0):u.e&&u.e.gc()>0&&(c=(!u.e&&(u.e=new Np),u.e).Mc(t),s=(!u.e&&(u.e=new Np),u.e).Mc(e),(c||s)&&((!u.e&&(u.e=new Np),u.e).Fc(a),++a.c));r||(i.c[i.c.length]=a)}function cBn(n){var t,e,i;if(vA(BB(mMn(n,(HXn(),ept)),98)))for(e=new Wb(n.j);e.a<e.c.c.length;)(t=BB(n0(e),11)).j==(kUn(),PCt)&&((i=BB(mMn(t,(hWn(),Elt)),10))?qIn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qIn(t,oCt):qIn(t,ICt));else{for(e=new Wb(n.j);e.a<e.c.c.length;)t=BB(n0(e),11),(i=BB(mMn(t,(hWn(),Elt)),10))?qIn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qIn(t,(kUn(),oCt)):qIn(t,(kUn(),ICt));hon(n,ept,(QEn(),VIt))}}function aBn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=n<32?"\\x"+fx(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=BQn?"\\v"+fx(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&QVn)}return e}function uBn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=n.e,0==(o=t.e))return n;if(0==a)return 0==t.e?t:new lU(-t.e,t.d,t.a);if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a<0&&(e=j7(e)),o<0&&(i=j7(i)),npn(ibn(e,i));if(-1==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))f=-o,h=a==o?d6(t.a,u,n.a,c):N8(t.a,u,n.a,c);else if(f=a,a==o){if(0==r)return ODn(),eet;h=d6(n.a,c,t.a,u)}else h=N8(n.a,c,t.a,u);return X0(s=new lU(f,h.length,h)),s}function oBn(n){var t,e,i,r,c,a;for(this.e=new Np,this.a=new Np,e=n.b-1;e<3;e++)Kx(n,0,BB(Dpn(n,0),8));if(n.b<4)throw Hp(new _y("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,C$n(this,n.b+this.b-1),a=new Np,c=new Wb(this.e),t=0;t<this.b-1;t++)WB(a,MD(n0(c)));for(r=spn(n,0);r.b!=r.d.c;)i=BB(b3(r),8),WB(a,MD(n0(c))),WB(this.a,new wJ(i,a)),l1(0,a.c.length),a.c.splice(0,1)}function sBn(n,t){var e,i,r,c,a,u,o;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)for((c=BB(n0(a),10)).k==(uSn(),Sut)&&(u=BB(U5(new oz(ZL(fbn(c).a.Kc(),new h))),17),o=BB(U5(new oz(ZL(lbn(c).a.Kc(),new h))),17),hFn(c,qy(TD(mMn(u,(hWn(),Ilt))))&&qy(TD(mMn(o,Ilt)))?Xun(t):t)),i=new oz(ZL(lbn(c).a.Kc(),new h));dAn(i);)vun(e=BB(U5(i),17),qy(TD(mMn(e,(hWn(),Ilt))))?Xun(t):t)}function hBn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=BB(xq(t.n,t.n.c.length-1),211)).e+c.d+e.g+r<=i&&(BB(xq(t.n,t.n.c.length-1),211).f-n.f+e.f<=n.b||1==n.a.c.length))return ybn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return WB(t.b,e),a=BB(xq(t.n,t.n.c.length-1),211),WB(t.n,new RJ(t.s,a.f+a.a+t.i,t.i)),smn(BB(xq(t.n,t.n.c.length-1),211),e),BFn(t,e),!0}return!1}function fBn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=onn(n,t,e),e,t,c),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GC(a)===GC(e))?(null!=a&&(r=n.dj(a,r)),r=n.cj(e,r),n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):(n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)),a):(a=onn(n,t,e),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GC(a)===GC(e))&&(r=null,null!=a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function lBn(n,t){var i,r,c,a,u,o,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(u=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(o=u/60|0,s=u%60,r=n.q.getDate(),n.q.getHours()+o>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+o,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function bBn(n,t){var e,i,r,c;if(OTn(t,"Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new MAn(n)).i&&(r.i=Wrn(r,new kc)),e=Gy(r.i)*r.f/(null==r.i&&(r.i=Wrn(r,new kc)),Gy(r.i)),r.b>e)HSn(t);else{switch(BB(mMn(n,(HXn(),Bpt)),337).g){case 2:c=new Tc;break;case 0:c=new wc;break;default:c=new Mc}if(i=c.Vf(n,r),!c.Wf())switch(BB(mMn(n,Xpt),338).g){case 2:i=XIn(r,i);break;case 1:i=KTn(r,i)}iqn(n,r,i),HSn(t)}else HSn(t)}function wBn(n,t){var e,i,r,c;if(f1(n.d,n.e),n.c.a.$b(),0!=Gy(MD(mMn(t.j,(HXn(),Cdt))))||0!=Gy(MD(mMn(t.j,Cdt))))for(e=ZJn,GC(mMn(t.j,Ldt))!==GC((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=gFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);else for(e=DWn,GC(mMn(t.j,Ldt))!==GC((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=pFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);}function dBn(n,t){var e,i,r,c,a,u;for(r=new Np,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=BB(n.Xb(e),19).a+a;(l1(c+1,t.c.length),BB(t.c[c+1],19)).a<i;)++c;for(u=0,i-(l1(c,t.c.length),BB(t.c[c],19)).a>(l1(c+1,t.c.length),BB(t.c[c+1],19)).a-i&&++u,WB(r,(l1(c+u,t.c.length),BB(t.c[c+u],19))),a+=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a-i,++e;e<n.gc()&&BB(n.Xb(e),19).a+a<=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a;)++e;c+=1+u}return r}function gBn(n){var t,e,i,r,c;if(!n.d){if(c=new Po,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,gBn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new eU(QAt,n,11,10)),i=new AL(n.q);i.e!=i.i.gc();++r)BB(kpn(i),399);pX(c,(!n.q&&(n.q=new eU(QAt,n,11,10)),n.q)),chn(c),n.d=new NO((BB(Wtn(QQ((QX(),t$t).o),9),18),c.i),c.g),n.e=BB(c.g,673),null==n.e&&(n.e=I$t),P5(n).b&=-17}return n.d}function pBn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),o=0,r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(Nfn(c,e))return o;++o}}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],s.rl(c.ak())){if(Nfn(e,c.dd()))return o;++o}if(i)for(o=0,a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(GC(e)===GC(hD(n,BB(c.dd(),56))))return o;++o}}else for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(null==c.dd())return o;++o}return-1}function vBn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(SQ(),m$(n,new zu),a=zB(n),b=new Np,l=new Np,u=null,o=0;0!=a.b;)c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),157),!u||iG(u)*eG(u)/2<iG(c)*eG(c)?(u=c,b.c[b.c.length]=c):(o+=iG(c)*eG(c),l.c[l.c.length]=c,l.c.length>1&&(o>iG(u)*eG(u)/2||0==a.b)&&(f=new Gtn(l),h=iG(u)/eG(u),s=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),s),u=f,b.c[b.c.length]=f,o=0,l.c=x8(Ant,HWn,1,0,5,1)));return gun(b,l),b}function mBn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(e.mh(t)&&(h=(b=t)?BB(i,49).xh(b):null))if(d=e.bh(t,n.a),(w=t.t)>1||-1==w)if(f=BB(d,69),l=BB(h,69),f.dc())l.$b();else for(a=!!Ivn(t),c=0,u=n.a?f.Kc():f.Zh();u.Ob();)s=BB(u.Pb(),56),(r=BB(lnn(n,s),56))?(a?-1==(o=l.Xc(r))?l.Xh(c,r):c!=o&&l.ji(c,r):l.Xh(c,r),++c):n.b&&!a&&(l.Xh(c,s),++c);else null==d?h.Wb(null):null==(r=lnn(n,d))?n.b&&!Ivn(t)&&h.Wb(d):h.Wb(r)}function yBn(n,t){var i,r,c,a,u,o,s,f;for(i=new Le,c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&eTn(o=r.c.i,Xut)){if(-1==(f=VDn(n,o,Xut,Uut)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Np),WB(i.a,o)}for(u=new oz(ZL(lbn(t).a.Kc(),new h));dAn(u);)if(!b5(a=BB(U5(u),17))&&eTn(s=a.d.i,Uut)){if(-1==(f=VDn(n,s,Uut,Xut)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Np),WB(i.c,s)}return i}function kBn(n){var t,e,i,r;if($On(),t=IJ(n),n<uet.length)return uet[t];if(n<=50)return uOn((ODn(),net),t);if(n<=VVn)return G5(uOn(aet[1],t),t);if(n>1e6)throw Hp(new Oy("power of ten too big"));if(n<=DWn)return G5(uOn(aet[1],t),t);for(r=i=uOn(aet[1],DWn),e=fan(n-DWn),t=IJ(n%DWn);Vhn(e,DWn)>0;)r=Nnn(r,i),e=ibn(e,DWn);for(r=G5(r=Nnn(r,uOn(aet[1],t)),DWn),e=fan(n-DWn);Vhn(e,DWn)>0;)r=G5(r,DWn),e=ibn(e,DWn);return r=G5(r,t)}function jBn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hierarchical port dummy size processing",1),u=new Np,s=new Np,e=2*Gy(MD(mMn(n,(HXn(),kpt)))),r=new Wb(n.b);r.a<r.c.c.length;){for(i=BB(n0(r),29),u.c=x8(Ant,HWn,1,0,5,1),s.c=x8(Ant,HWn,1,0,5,1),a=new Wb(i.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((o=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sCt)?u.c[u.c.length]=c:o==SCt&&(s.c[s.c.length]=c));HOn(u,!0,e),HOn(s,!1,e)}HSn(t)}function EBn(n,t){var e,i,r,c,a;OTn(t,"Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(l1(0,a.c.length),_Kn(n,BB(a.c[0],29),BB(xq(a,a.c.length-1),29),e=new HX(n),r=new HX(n)),0==e.a.c.length||(LZ(0,a.c.length),MS(a.c,0,e)),0==r.a.c.length||(a.c[a.c.length]=r)),Lx(n,(hWn(),nlt))&&(yDn(n,i=new HX(n),c=new HX(n)),0==i.a.c.length||(LZ(0,a.c.length),MS(a.c,0,i)),0==c.a.c.length||(a.c[a.c.length]=c)),HSn(t)}function TBn(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),oCt)||r==ICt))for(i=new oz(ZL(hbn(c).a.Kc(),new h));dAn(i);)0!=(t=(e=BB(U5(i),17)).a).b&&((u=e.c).i==c&&(Px(0!=t.b),BB(t.a.a.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).b),(o=e.d).i==c&&(Px(0!=t.b),BB(t.c.b.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).b))}function MBn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Sort By Input Model "+mMn(n,(HXn(),Ldt)),1),r=0,i=new Wb(n.b);i.a<i.c.c.length;){for(e=BB(n0(i),29),o=0==r?0:r-1,u=BB(xq(n.b,o),29),a=new Wb(e.a);a.a<a.c.c.length;)GC(mMn(c=BB(n0(a),10),ept))!==GC((QEn(),UIt))&&GC(mMn(c,ept))!==GC(XIt)&&(SQ(),m$(c.j,new O7(u,okn(c))),OH(t,"Node "+c+" ports: "+c.j));SQ(),m$(e.a,new Grn(u,BB(mMn(n,Ldt),339),BB(mMn(n,Adt),378))),OH(t,"Layer "+r+": "+e),++r}HSn(t)}function SBn(n,t){var e,i,r;if(r=kFn(t),JT(new Rq(null,(!t.c&&(t.c=new eU(XOt,t,9,9)),new w1(t.c,16))),new Uw(r)),uzn(t,i=BB(mMn(r,(hWn(),Zft)),21)),i.Hc((bDn(),lft)))for(e=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));e.e!=e.i.gc();)Qzn(n,t,r,BB(kpn(e),118));return 0!=BB(ZAn(t,(HXn(),Fgt)),174).gc()&&mDn(t,r),qy(TD(mMn(r,Xgt)))&&i.Fc(pft),Lx(r,gpt)&&My(new uwn(Gy(MD(mMn(r,gpt)))),r),GC(ZAn(t,sgt))===GC((ufn(),pIt))?cWn(n,t,r):eXn(n,t,r),r}function PBn(n,t,i,r){var c,a,u;if(this.j=new Np,this.k=new Np,this.b=new Np,this.c=new Np,this.e=new bA,this.i=new km,this.f=new Dp,this.d=new Np,this.g=new Np,WB(this.b,n),WB(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=BB(mMn(r,(HXn(),vgt)),74))for(u=spn(c,0);u.b!=u.d.c;)aen((a=BB(b3(u),8)).a,n.a)&&DH(this.i,a);i&&WB(this.j,i),WB(this.k,r)}function IBn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(h=new Xz(new xw(e)),vU(u=x8($Nt,ZYn,25,n.f.e.c.length,16,1),u.length),e[t.b]=0,s=new Wb(n.f.e);s.a<s.c.c.length;)(o=BB(n0(s),144)).b!=t.b&&(e[o.b]=DWn),F8(eMn(h,o));for(;0!=h.b.c.length;)for(u[(f=BB(mnn(h),144)).b]=!0,c=vN(new mT(n.b,f),0);c.c;)u[(l=$mn(r=BB(EZ(c),282),f)).b]||(a=Lx(r,(rkn(),pat))?Gy(MD(mMn(r,pat))):n.c,(i=e[f.b]+a)<e[l.b]&&(e[l.b]=i,srn(h,l),F8(eMn(h,l))))}function CBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(r=!0,a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),s=KQn,h=null,o=new Wb(c.a);o.a<o.c.c.length;){if(u=BB(n0(o),10),f=Gy(t.p[u.p])+Gy(t.d[u.p])-u.d.d,i=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a,!(f>s&&i>s)){r=!1,e.n&&OH(e,"bk node placement breaks on "+u+" which should have been after "+h);break}h=u,s=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a}if(!r)break}return e.n&&OH(e,t+" is feasible: "+r),r}function OBn(n,t,e,i){var r,c,a,u,o,s,h;for(u=-1,h=new Wb(n);h.a<h.c.c.length;)(s=BB(n0(h),112)).g=u--,a=r=dG(E2(NV(AV(new Rq(null,new w1(s.f,16)),new sa),new ha)).d),o=c=dG(E2(NV(AV(new Rq(null,new w1(s.k,16)),new fa),new la)).d),i||(a=dG(E2(NV(new Rq(null,new w1(s.f,16)),new ba)).d),o=dG(E2(NV(new Rq(null,new w1(s.k,16)),new wa)).d)),s.d=a,s.a=r,s.i=o,s.b=c,0==o?r5(e,s,e.c.b,e.c):0==a&&r5(t,s,t.c.b,t.c)}function ABn(n,t,e,i){var r,c,a,u,o,s,h;if(e.d.i!=t.i){for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XIt)),i.c[i.c.length]=r,IZ(a=new ISn,r),qIn(a,(kUn(),ICt)),IZ(u=new ISn,r),qIn(u,oCt),h=e.d,MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,h),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),GC(mMn(o=BB(s.d.Xb(s.c=s.b++),70),Ydt))===GC((Rtn(),UPt))&&(hon(o,Uft,e),fW(s),WB(c.b,o));yAn(r,a,u)}}function $Bn(n,t,e,i){var r,c,a,u,o,s;if(e.c.i!=t.i)for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XIt)),i.c[i.c.length]=r,IZ(a=new ISn,r),qIn(a,(kUn(),ICt)),IZ(u=new ISn,r),qIn(u,oCt),MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,t),yAn(r,a,u),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),o=BB(s.d.Xb(s.c=s.b++),70),BB(mMn(o,Ydt),272)==(Rtn(),UPt)&&(Lx(o,Uft)||hon(o,Uft,e),fW(s),WB(c.b,o))}function LBn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(l=new Np,p=S4(r),g=t*n.a,w=0,a=new Rv,u=new Rv,o=new Np,v=0,m=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=tbn(p,c,u))&&(p.a.Bc(s),o.c[o.c.length]=s,a.a.zc(s,a),w=n.f[s.p],v+=n.e[s.p]-w*n.b,m+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||v>=g&&n.e[s.p]>w*n.b||m>=i*g)&&(l.c[l.c.length]=o,o=new Np,Frn(u,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=m,v=m,m=0,f=0,d=0);return new rC(b,l)}function NBn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(e=new Kb(new Ob(n.c.b).a.vc().Kc());e.a.Ob();)u=BB(e.a.Pb(),42),null==(r=(t=BB(u.dd(),149)).a)&&(r=""),!(i=_D(n.c,r))&&0==r.length&&(i=yfn(n)),i&&!ywn(i.c,t,!1)&&DH(i.c,t);for(a=spn(n.a,0);a.b!=a.d.c;)c=BB(b3(a),478),s=T5(n.c,c.a),l=T5(n.c,c.b),s&&l&&DH(s.c,new rC(l,c.c));for(yQ(n.a),f=spn(n.b,0);f.b!=f.d.c;)h=BB(b3(f),478),t=KD(n.c,h.a),o=T5(n.c,h.b),t&&o&&DM(t,o,h.c);yQ(n.b)}function xBn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;c=new Pl(n),d5((a=new dkn).g),d5(a.j),$U(a.b),d5(a.d),d5(a.i),$U(a.k),$U(a.c),$U(a.e),b=bCn(a,c,null),O$n(a,c),r=b,t&&(u=eHn(s=new Pl(t)),vSn(r,Pun(Gk(nMt,1),HWn,527,0,[u]))),l=!1,f=!1,e&&(s=new Pl(e),l8n in s.a&&(l=zJ(s,l8n).ge().a),b8n in s.a&&(f=zJ(s,b8n).ge().a)),h=$j(Fen(new Xm,l),f),BSn(new su,r,h),l8n in c.a&&rtn(c,l8n,null),(l||f)&&(nBn(h,o=new py,l,f),rtn(c,l8n,o)),i=new Xg(a),Uon(new OA(r),i)}function DBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(a=new Ykn,s=Pun(Gk(ANt,1),hQn,25,15,[0]),r=-1,c=0,i=0,o=0;o<n.b.c.length;++o){if(!((h=BB(xq(n.b,o),434)).b>0)){if(r=-1,32==fV(h.c,0)){if(f=s[0],ynn(t,s),s[0]>f)continue}else if($Y(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=o,c=s[0],i=0),r>=0){if(u=h.b,o==r&&0==(u-=i++))return 0;if(!LUn(t,s,h,u,a)){o=r-1,s[0]=c;continue}}else if(r=-1,!LUn(t,s,h,0,a))return 0}return dUn(a,e)?s[0]:0}function RBn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Mo,c=new Mo,null==(t=P$t).a.zc(n,t)){for(r=new AL(kY(n));r.e!=r.i.gc();)pX(a,RBn(BB(kpn(r),26)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),i=new AL(n.s);i.e!=i.i.gc();)cL(e=BB(kpn(i),170),99)&&f9(c,BB(e,18));chn(c),n.r=new TH(n,(BB(Wtn(QQ((QX(),t$t).o),6),18),c.i),c.g),pX(a,n.r),chn(a),n.f=new NO((BB(Wtn(QQ(t$t.o),5),18),a.i),a.g),P5(n).b&=-3}return n.f}function KBn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(a=n.o,i=x8(ANt,hQn,25,a,15,1),r=x8(ANt,hQn,25,a,15,1),e=n.p,t=x8(ANt,hQn,25,e,15,1),c=x8(ANt,hQn,25,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!vmn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!vmn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(u=0;u<a&&!vmn(n,u,b);)++u;t[b]=u}for(w=0;w<e;w++){for(u=a-1;u>=0&&!vmn(n,u,w);)--u;c[w]=u}for(o=0;o<a;o++)for(l=0;l<e;l++)o<c[l]&&o>t[l]&&l<r[o]&&l>i[o]&&FRn(n,o,l,!1,!0)}function _Bn(n){var t,e,i,r,c,a,u,o;e=qy(TD(mMn(n,(fRn(),Bct)))),c=n.a.c.d,u=n.a.d.d,e?(a=kL(XR(new xI(u.a,u.b),c),.5),o=kL(B$(n.e),.5),t=XR(UR(new xI(c.a,c.b),a),o),Hx(n.d,t)):(r=Gy(MD(mMn(n.a,rat))),i=n.d,c.a>=u.a?c.b>=u.b?(i.a=u.a+(c.a-u.a)/2+r,i.b=u.b+(c.b-u.b)/2-r-n.e.b):(i.a=u.a+(c.a-u.a)/2+r,i.b=c.b+(u.b-c.b)/2+r):c.b>=u.b?(i.a=c.a+(u.a-c.a)/2+r,i.b=u.b+(c.b-u.b)/2+r):(i.a=c.a+(u.a-c.a)/2+r,i.b=c.b+(u.b-c.b)/2-r-n.e.b))}function FBn(n,t){var e,i,r,c,a,u,o;if(null==n)return null;if(0==(c=n.length))return"";for(o=x8(ONt,WVn,25,c,15,1),_8(0,c,n.length),_8(0,c,o.length),YU(n,0,c,o,0),e=null,u=t,r=0,a=0;r<c;r++)i=o[r],EWn(),i<=32&&0!=(2&JLt[i])?u?(!e&&(e=new fN(n)),aY(e,r-a++)):(u=t,32!=i&&(!e&&(e=new fN(n)),sV(e,r-a,r-a+1,String.fromCharCode(32)))):u=!1;return u?e?(c=e.a.length)>0?fx(e.a,0,c-1):"":n.substr(0,c-1):e?e.a:n}function BBn(n){NM(n,new MTn(vj(wj(pj(gj(new du,UJn),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new at))),u2(n,UJn,XJn,mpn(Ect)),u2(n,UJn,WJn,mpn(pct)),u2(n,UJn,VJn,mpn(lct)),u2(n,UJn,QJn,mpn(vct)),u2(n,UJn,XYn,mpn(kct)),u2(n,UJn,WYn,mpn(yct)),u2(n,UJn,UYn,mpn(jct)),u2(n,UJn,VYn,mpn(mct)),u2(n,UJn,BJn,mpn(wct)),u2(n,UJn,HJn,mpn(bct)),u2(n,UJn,qJn,mpn(dct)),u2(n,UJn,GJn,mpn(gct))}function HBn(n,t,e,i){var r,c,a,u,o,s,h;if(Bl(c=new $vn(n),(uSn(),Cut)),hon(c,(HXn(),ept),(QEn(),XIt)),r=0,t){for(hon(a=new ISn,(hWn(),dlt),t),hon(c,dlt,t.i),qIn(a,(kUn(),ICt)),IZ(a,c),s=0,h=(o=Z0(t.e)).length;s<h;++s)MZ(o[s],a);hon(t,Elt,c),++r}if(e){for(u=new ISn,hon(c,(hWn(),dlt),e.i),hon(u,dlt,e),qIn(u,(kUn(),oCt)),IZ(u,c),s=0,h=(o=Z0(e.g)).length;s<h;++s)SZ(o[s],u);hon(e,Elt,c),++r}return hon(c,(hWn(),Bft),iln(r)),i.c[i.c.length]=c,c}function qBn(){qBn=O,OOt=Pun(Gk(ONt,1),WVn,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),AOt=new RegExp("[ \t\n\r\f]+");try{COt=Pun(Gk(D$t,1),HWn,2015,0,[new vp((s$(),sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",fR((fk(),fk(),rtt))))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm",fR(rtt))),new vp(sdn("yyyy-MM-dd",fR(rtt)))])}catch(n){if(!cL(n=lun(n),78))throw Hp(n)}}function GBn(n){var t,i,r,c;if(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=iin(n)<0?1:0,i=n.e,r.length,e.Math.abs(IJ(n.e)),c=new Ck,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>qtt.length;i-=qtt.length)Nq(c,qtt);gR(c,qtt,IJ(i)),oO(c,r.substr(t))}else oO(c,fx(r,t,IJ(i=t-i))),c.a+=".",oO(c,nO(r,IJ(i)));else{for(oO(c,r.substr(t));i<-qtt.length;i+=qtt.length)Nq(c,qtt);gR(c,qtt,IJ(-i))}return c.a}function zBn(n,t,i,r){var c,a,u,o,s,h,f,l,b;return h=(s=XR(new xI(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=W8(n,c=UR(new xI(i.a,i.b),kL(new xI(r.a,r.b),.5))),u=W8(UR(new xI(n.a,n.b),t),c),o=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<u&&a<=o?new xI(n.a,n.b):u<=o?UR(new xI(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?UR(new xI(n.a,n.b),kL(new xI(t.a,t.b),l)):null}function UBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(u=new Wb(n.a);u.a<u.c.c.length;)(a=BB(n0(u),10)).k==(uSn(),Mut)&&((r=BB(mMn(a,Qft),61))==(kUn(),oCt)?a.n.a+=e.a-t.a:r==SCt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function XBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,Qft),61))==(kUn(),oCt)?c.n.a+=e.a-t.a:r==SCt&&(c.n.b+=e.b-t.b));u=n.d,n.f.a=e.a-u.b-u.c,n.f.b=e.b-u.d-u.a}function WBn(n){var t,i,r,c,a,u,o,s,h,f;for(s=new Cb(new Ib(xOn(n)).a.vc().Kc());s.a.Ob();){for(r=BB(s.a.Pb(),42),h=0,f=0,h=(o=BB(r.cd(),10)).d.d,f=o.o.b+o.d.a,n.d[o.p]=0,t=o;(c=n.a[t.p])!=o;)i=Mgn(t,c),u=0,u=n.c==(gJ(),nyt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=Gy(n.d[t.p])+u,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=o;do{n.d[t.p]=Gy(n.d[t.p])+h,t=n.a[t.p]}while(t!=o);n.b[o.p]=h+f}}function VBn(n){var t,i,r,c,a,u,o,s,h,f,l;for(n.b=!1,f=RQn,o=KQn,l=RQn,s=KQn,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=BB(i.Pb(),266)).a,f=e.Math.min(f,r.c),o=e.Math.max(o,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Wb(t.c);a.a<a.c.c.length;)(c=BB(n0(a),395)).a.a?(u=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,u)):(u=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),o=e.Math.max(o,u));n.a=new xI(o-f,s-l),n.c=new xI(f+n.d.a,l+n.d.b)}function QBn(n,t,e){var i,r,c,a,u,o,s,h;for(h=new Np,c=0,tin(s=new x0(0,e),new asn(0,0,s,e)),r=0,o=new AL(n);o.e!=o.i.gc();)u=BB(kpn(o),33),i=BB(xq(s.a,s.a.c.length-1),187),r+u.g+(0==BB(xq(s.a,0),187).b.c.length?0:e)>t&&(r=0,c+=s.b+e,h.c[h.c.length]=s,tin(s=new x0(c,e),i=new asn(0,s.f,s,e)),r=0),0==i.b.c.length||u.f>=i.o&&u.f<=i.f||.5*i.a<=u.f&&1.5*i.a>=u.f?ybn(i,u):(tin(s,a=new asn(i.s+i.r+e,s.f,s,e)),ybn(a,u)),r=u.i+u.g;return h.c[h.c.length]=s,h}function YBn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new gp(n),t=new So,null==(e=P$t).a.zc(n,e)){for(c=new AL(kY(n));c.e!=c.i.gc();)pX(a,YBn(BB(kpn(c),26)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();)cL(i=BB(kpn(r),170),322)&&f9(t,BB(i,34));chn(t),n.k=new EH(n,(BB(Wtn(QQ((QX(),t$t).o),7),18),t.i),t.g),pX(a,n.k),chn(a),n.a=new NO((BB(Wtn(QQ(t$t.o),4),18),a.i),a.g),P5(n).b&=-2}return n.a}function JBn(n,t,e,i,r,c,a){var u,o,s,h,f;return h=!1,u=dNn(e.q,t.f+t.b-e.q.f),!((f=r-(e.q.e+u-a))<i.g)&&(o=c==n.c.length-1&&f>=(l1(c,n.c.length),BB(n.c[c],200)).e,!((s=cHn(i,f,!1).a)>t.b&&!o)&&((o||s<=t.b)&&(o&&s>t.b?(e.d=s,p9(e,FSn(e,s))):(aEn(e.q,u),e.c=!0),p9(i,r-(e.s+e.r)),Tvn(i,e.q.e+e.q.d,t.f),tin(t,i),n.c.length>c&&(Tkn((l1(c,n.c.length),BB(n.c[c],200)),i),0==(l1(c,n.c.length),BB(n.c[c],200)).a.c.length&&s6(n,c)),h=!0),h))}function ZBn(n,t,e,i){var r,c,a,u,o,s,h;if(h=axn(n.e.Tg(),t),r=0,c=BB(n.g,119),o=null,ZM(),BB(t,66).Oj()){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(a,e)){o=a;break}++r}}else if(null!=e){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(e,a.dd())){o=a;break}++r}}else for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(null==a.dd()){o=a;break}++r}return o&&(mA(n.e)&&(s=t.$j()?new b4(n.e,4,t,e,null,r,!0):LY(n,t.Kj()?2:1,t,e,t.zj(),-1,!0),i?i.Ei(s):i=s),i=TKn(n,o,i)),i}function nHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,o=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+u,d=n.c?gTn(w,a,r,u):r.j,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 1:d=r.j+r.f+u,w=n.c?dTn(d,a,r,u):r.i,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 2:w=s+u,d=0,l=s+u+b,h=e.Math.max(o,f);break;case 3:w=0,d=o+u,l=e.Math.max(s,b),h=o+u+f;break;default:throw Hp(new _y("IllegalPlacementOption."))}return new awn(n.a,l,h,t,w,d)}function tHn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if(o=n.d,l=BB(mMn(n,(hWn(),Klt)),15),t=BB(mMn(n,Dft),15),l||t){if(a=Gy(MD(edn(n,(HXn(),ppt)))),u=Gy(MD(edn(n,vpt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),o.d+=h+u}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),o.a+=h+u}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,o.b=e.Math.max(o.b,f),o.c=e.Math.max(o.c,f))}}function eHn(n){var t,e,i,r,c,a;for(cA(r=new R0,(Nun(),JTt)),i=new Sb(new Jy(new TT(n,jrn(n,x8(Qtt,sVn,2,0,6,1))).b));i.b<i.d.gc();)Px(i.b<i.d.gc()),e=SD(i.d.Xb(i.c=i.b++)),(c=pGn(lAt,e))&&null!=(a=Zqn(c,(t=zJ(n,e)).je()?t.je().a:t.ge()?""+t.ge().a:t.he()?""+t.he().a:t.Ib()))&&((SN(c.j,(rpn(),sMt))||SN(c.j,hMt))&&son(Ynn(r,UOt),c,a),SN(c.j,uMt)&&son(Ynn(r,_Ot),c,a),SN(c.j,fMt)&&son(Ynn(r,XOt),c,a),SN(c.j,oMt)&&son(Ynn(r,zOt),c,a));return r}function iHn(n,t,e,i){var r,c,a,u,o,s;if(o=axn(n.e.Tg(),t),c=BB(n.g,119),$xn(n.e,t)){for(r=0,u=0;u<n.i;++u)if(a=c[u],o.rl(a.ak())){if(r==e)return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FCn(n,t,u,r,s)),s);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(r=0,u=0;u<n.i;++u){if(a=c[u],o.rl(a.ak()))return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FCn(n,t,u,r,s)),s);++r}return t.zj()}function rHn(n,t,e){var i,r,c,a,u,o,s,h;if(r=BB(n.g,119),$xn(n.e,t))return ZM(),BB(t,66).Oj()?new lq(t,n):new xC(t,n);for(s=axn(n.e.Tg(),t),i=0,u=0;u<n.i;++u){if(a=(c=r[u]).ak(),s.rl(a)){if(ZM(),BB(t,66).Oj())return c;if(a==(TOn(),lLt)||a==sLt){for(o=new lN(Bbn(c.dd()));++u<n.i;)((a=(c=r[u]).ak())==lLt||a==sLt)&&oO(o,Bbn(c.dd()));return gK(BB(t.Yj(),148),o.a)}return null!=(h=c.dd())&&e&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(h=FCn(n,t,u,i,h)),h}++i}return t.zj()}function cHn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=0,u=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c=x8(Ant,HWn,1,0,5,1),WB(n.n,new RJ(n.s,n.t,n.i))),o=0,f=new Wb(n.b);f.a<f.c.c.length;)a+(h=BB(n0(f),33)).g+(o>0?n.i:0)>t&&s>0&&(a=0,u+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,WB(n.n,new RJ(n.s,u,n.i))),o=0),b+=h.g+(o>0?n.i:0),s=e.Math.max(s,h.f),i&&smn(BB(xq(n.n,l),211),h),a+=h.g+(o>0?n.i:0),++o;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,yyn(n.j)),new UV(n.s,n.t,c,r)}function aHn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;if($T(),SU(n,"src"),SU(e,"dest"),l=tsn(n),o=tsn(e),pH(0!=(4&l.i),"srcType is not an array"),pH(0!=(4&o.i),"destType is not an array"),f=l.c,a=o.c,pH(0!=(1&f.i)?f==a:0==(1&a.i),"Array types don't match"),b=n.length,s=e.length,t<0||i<0||r<0||t+r>b||i+r>s)throw Hp(new fv);if(0==(1&f.i)&&l!=o)if(h=een(n),c=een(e),GC(n)===GC(e)&&t<i)for(t+=r,u=i+r;u-- >i;)$X(c,u,h[--t]);else for(u=i+r;i<u;)$X(c,i++,h[t++]);else r>0&&_In(n,t,e,i,r,!0)}function uHn(){uHn=O,ret=Pun(Gk(ANt,1),hQn,25,15,[_Vn,1162261467,OVn,1220703125,362797056,1977326743,OVn,387420489,AQn,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,OVn,1291467969,1544804416,1838265625,60466176]),cet=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function oHn(n){var t,e,i,r,c,a,u;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(a0(BB(n0(i),29).a));c.a<c.c.c.length;)if(Znn(r=BB(n0(c),10))&&!(e=BB(mMn(r,(hWn(),Rft)),305)).g&&e.d)for(t=e,u=e.d;u;)eRn(u.i,u.k,!1,!0),A7(t.a),A7(u.i),A7(u.k),A7(u.b),MZ(u.c,t.c.d),MZ(t.c,null),PZ(t.a,null),PZ(u.i,null),PZ(u.k,null),PZ(u.b,null),(a=new v3(t.i,u.a,t.e,u.j,u.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=u.c,a.g=t.g,a.d=u.d,hon(t.i,Rft,a),hon(u.a,Rft,a),u=u.d,t=a}function sHn(n,t){var e,i,r,c,a;if(a=BB(t,136),T$n(n),T$n(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=x8(ANt,hQn,25,a.b.length,15,1),void aHn(a.b,0,n.b,0,a.b.length);for(c=x8(ANt,hQn,25,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function hHn(n,t){var e,i,r,c,a,u,o,s,h,f;return e=qy(TD(mMn(n,(hWn(),slt)))),u=qy(TD(mMn(t,slt))),i=BB(mMn(n,hlt),11),o=BB(mMn(t,hlt),11),r=BB(mMn(n,flt),11),s=BB(mMn(t,flt),11),h=!!i&&i==o,f=!!r&&r==s,e||u?(c=(!qy(TD(mMn(n,slt)))||qy(TD(mMn(n,olt))))&&(!qy(TD(mMn(t,slt)))||qy(TD(mMn(t,olt)))),a=!(qy(TD(mMn(n,slt)))&&qy(TD(mMn(n,olt)))||qy(TD(mMn(t,slt)))&&qy(TD(mMn(t,olt)))),new R_(h&&c||f&&a,h,f)):new R_(BB(n0(new Wb(n.j)),11).p==BB(n0(new Wb(t.j)),11).p,h,f)}function fHn(n){var t,i,r,c,a,u,o,s;for(r=0,i=0,s=new YT,t=0,o=new Wb(n.n);o.a<o.c.c.length;)0==(u=BB(n0(o),211)).c.c.length?r5(s,u,s.c.b,s.c):(r=e.Math.max(r,u.d),i+=u.a+(t>0?n.i:0)),++t;for(nwn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=RQn,n.p=RQn,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),33),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function lHn(n){var t,e,i,r;return 0!=(64&n.Db)?Yln(n):(t=new lN(V5n),(i=n.k)?oO(oO((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new hK(KOt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",oO(t,JL(new mk,new AL(n.b))),e&&(t.a+="]"),t.a+=e1n,e&&(t.a+="["),oO(t,JL(new mk,new AL(n.c))),e&&(t.a+="]"),t.a)}function bHn(n,t){var e,i,r,c,a,u,o;if(n.a){if(o=null,null!=(u=n.a.ne())?t.a+=""+u:null!=(a=n.a.Dj())&&(-1!=(c=GO(a,YTn(91)))?(o=a.substr(c),t.a+=""+fx(null==a?zWn:(kW(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new AL(n.d);i.e!=i.i.gc();)e=BB(kpn(i),87),r?r=!1:t.a+=FWn,bHn(e,t);t.a+=">"}null!=o&&(t.a+=""+o)}else n.e?null!=(u=n.e.zb)&&(t.a+=""+u):(t.a+="?",n.b?(t.a+=" super ",bHn(n.b,t)):n.f&&(t.a+=" extends ",bHn(n.f,t)))}function wHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(y=n.c,k=t.c,e=E7(y.a,n,0),i=E7(k.a,t,0),v=BB(xwn(n,(ain(),Hvt)).Kc().Pb(),11),T=BB(xwn(n,qvt).Kc().Pb(),11),m=BB(xwn(t,Hvt).Kc().Pb(),11),M=BB(xwn(t,qvt).Kc().Pb(),11),g=Z0(v.e),j=Z0(T.g),p=Z0(m.e),E=Z0(M.g),Qyn(n,i,k),s=0,b=(c=p).length;s<b;++s)MZ(c[s],v);for(h=0,w=(a=E).length;h<w;++h)SZ(a[h],T);for(Qyn(t,e,y),f=0,d=(u=g).length;f<d;++f)MZ(u[f],m);for(o=0,l=(r=j).length;o<l;++o)SZ(r[o],M)}function dHn(n,t,e,i){var r,c,a,u,o,s;if(c=Wln(i),!qy(TD(mMn(i,(HXn(),Cgt))))&&!qy(TD(mMn(n,bgt)))||vA(BB(mMn(n,ept),98)))switch(IZ(u=new ISn,n),t?((s=u.n).a=t.a-n.n.a,s.b=t.b-n.n.b,WSn(s,0,0,n.o.a,n.o.b),qIn(u,z_n(u,c))):(r=hwn(c),qIn(u,e==(ain(),qvt)?r:Tln(r))),a=BB(mMn(i,(hWn(),Zft)),21),o=u.j,c.g){case 2:case 1:(o==(kUn(),sCt)||o==SCt)&&a.Fc((bDn(),gft));break;case 4:case 3:(o==(kUn(),oCt)||o==ICt)&&a.Fc((bDn(),gft))}else r=hwn(c),u=R_n(n,e,e==(ain(),qvt)?r:Tln(r));return u}function gHn(n,t,i){var r,c,a,u,o,s,h;return e.Math.abs(t.s-t.c)<lZn||e.Math.abs(i.s-i.c)<lZn?0:(r=WNn(n,t.j,i.e),c=WNn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new zZ((O6(),Tyt),i,t,1),++a),-1==c&&(new zZ((O6(),Tyt),t,i,1),++a)):(u=Tfn(t.j,i.s,i.c),u+=Tfn(i.e,t.s,t.c),o=Tfn(i.j,t.s,t.c),(s=r+16*u)<(h=c+16*(o+=Tfn(t.e,i.s,i.c)))?new zZ((O6(),Myt),t,i,h-s):s>h?new zZ((O6(),Myt),i,t,s-h):s>0&&h>0&&(new zZ((O6(),Myt),t,i,0),new zZ(Myt,i,t,0))),a)}function pHn(n,t){var i,r,c,a,u;for(u=new usn(new Pb(n.f.b).a);u.b;){if(c=BB((a=ten(u)).cd(),594),1==t){if(c.gf()!=(Ffn(),HPt)&&c.gf()!=KPt)continue}else if(c.gf()!=(Ffn(),_Pt)&&c.gf()!=FPt)continue;switch(r=BB(BB(a.dd(),46).b,81),i=BB(BB(a.dd(),46).a,189).c,c.gf().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function vHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=x8(ANt,hQn,25,t.b.c.length,15,1),h=x8($ut,$Vn,267,t.b.c.length,0,1),s=x8(Out,a1n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,u=new Wb((f=l[b]).e);u.a<u.c.c.length;)++o[r=tA((c=BB(n0(u),10)).c)],d=Gy(MD(mMn(t,(HXn(),ypt)))),o[r]>0&&s[r]&&(d=K$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Wb(f.e);a.a<a.c.c.length;)(c=BB(n0(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[E7(i.b.b,i,0)]=c.k,s[E7(i.b.b,i,0)]=c}}function mHn(n,t){var e,i,r,c,a,u,o,s,f,l,b;for(i=new oz(ZL(dLn(t).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(o=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),nAn(e)||(a=t.i+t.g/2,u=t.j+t.f/2,f=o.i+o.g/2,l=o.j+o.f/2,(b=new Gj).a=f-a,b.b=l-u,Ukn(c=new xI(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,u=l-b.b,Ukn(s=new xI(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=u+b.b,Cen(r=cDn(e,!0,!0),a),Aen(r,u),Ten(r,f),Oen(r,l),mHn(n,o)))}function yHn(n){NM(n,new MTn(vj(wj(pj(gj(new du,R4n),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new tu))),u2(n,R4n,K4n,mpn(kTt)),u2(n,R4n,_4n,mpn(vTt)),u2(n,R4n,F4n,mpn(pTt)),u2(n,R4n,B4n,mpn(dTt)),u2(n,R4n,H4n,mpn(gTt)),u2(n,R4n,QJn,wTt),u2(n,R4n,vZn,8),u2(n,R4n,q4n,mpn(yTt)),u2(n,R4n,G4n,mpn(hTt)),u2(n,R4n,z4n,mpn(fTt)),u2(n,R4n,X2n,(hN(),!1))}function kHn(n,t){var i,r,c,a,u,o,s,h,f,l;for(OTn(t,"Simple node placement",1),l=BB(mMn(n,(hWn(),Alt)),304),o=0,a=new Wb(n.b);a.a<a.c.c.length;){for((u=(r=BB(n0(a),29)).c).b=0,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(u.b+=Cdn(s,i,l.c)),u.b+=s.d.d+s.o.b+s.d.a,i=s;o=e.Math.max(o,u.b)}for(c=new Wb(n.b);c.a<c.c.c.length;)for(f=(o-(u=(r=BB(n0(c),29)).c).b)/2,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(f+=Cdn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;HSn(t)}function jHn(n,t,e,i){var r,c,a,u,o,s,h,f;if(0==i.gc())return!1;if(ZM(),a=(o=BB(t,66).Oj())?i:new gtn(i.gc()),$xn(n.e,t)){if(t.hi())for(h=i.Kc();h.Ob();)UFn(n,t,s=h.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(c=Z3(t,s),a.Fc(c));else if(!o)for(h=i.Kc();h.Ob();)c=Z3(t,s=h.Pb()),a.Fc(c)}else{for(f=axn(n.e.Tg(),t),r=BB(n.g,119),u=0;u<n.i;++u)if(c=r[u],f.rl(c.ak()))throw Hp(new _y(C7n));if(i.gc()>1)throw Hp(new _y(C7n));o||(c=Z3(t,i.Kc().Pb()),a.Fc(c))}return oon(n,EPn(n,t,e),a)}function EHn(n,t){var e,i,r,c;for(Qtn(t.b.j),JT($V(new Rq(null,new w1(t.d,16)),new cc),new ac),c=new Wb(t.d);c.a<c.c.c.length;){switch((r=BB(n0(c),101)).e.g){case 0:e=BB(xq(r.j,0),113).d.j,Gl(r,BB($N(Oz(BB(h6(r.k,e),15).Oc(),Qst)),113)),ql(r,BB($N(Cz(BB(h6(r.k,e),15).Oc(),Qst)),113));break;case 1:i=Hyn(r),Gl(r,BB($N(Oz(BB(h6(r.k,i[0]),15).Oc(),Qst)),113)),ql(r,BB($N(Cz(BB(h6(r.k,i[1]),15).Oc(),Qst)),113));break;case 2:VPn(n,r);break;case 3:KNn(r);break;case 4:GNn(n,r)}Vtn(r)}n.a=null}function THn(n,t,e){var i,r,c,a,u,o,s,h;return i=n.a.o==(oZ(),cyt)?RQn:KQn,!(u=cFn(n,new aI(t,e))).a&&u.c?(DH(n.d,u),i):u.a?(r=u.a.c,o=u.a.d,e?(s=n.a.c==(gJ(),tyt)?o:r,c=n.a.c==tyt?r:o,a=n.a.g[c.i.p],h=Gy(n.a.p[a.p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(gJ(),nyt)?o:r,c=n.a.c==nyt?r:o,h=Gy(n.a.p[n.a.g[c.i.p].p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(hN(),!0),n.a.n[n.a.g[o.i.p].p]=!0,h):i}function MHn(n,t,e){var i,r,c,a,u,o,s;if($xn(n.e,t))ZM(),AOn((u=BB(t,66).Oj()?new lq(t,n):new xC(t,n)).c,u.b),Z$(u,BB(e,14));else{for(s=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c].ak(),s.rl(r)){if(r==(TOn(),lLt)||r==sLt){for(a=c,(o=Ovn(n,t,e))?fDn(n,c):++c;c<n.i;)(r=i[c].ak())==lLt||r==sLt?fDn(n,c):++c;o||BB(ovn(n,a,Z3(t,e)),72)}else Ovn(n,t,e)?fDn(n,c):BB(ovn(n,c,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e))),72);return}Ovn(n,t,e)||f9(n,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e)))}}function SHn(n,t,e){var i,r,c,a,u,o,s,h;return Nfn(e,n.b)||(n.b=e,c=new Jn,a=BB(P4($V(new Rq(null,new w1(e.f,16)),c),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((Hpn(),Brt)),i=a.Hc(Hrt),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(Frt),i=a.Hc(qrt),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=BB(n.a.Ce(t,e),46),o=BB(h.a,19).a,s=BB(h.b,19).a,u=!1,o<0?n.c||(u=!0):n.e||(u=!0),s<0?n.d||(u=!0):n.f||(u=!0),u?SHn(n,h,e):h}function PHn(n){var t,i,r,c;c=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?t=c.b:(t=MCn(n.f),n.A.Hc((mdn(),RCt))&&!n.B.Hc((n_n(),XCt))&&(t=e.Math.max(t,MCn(BB(oV(n.p,(kUn(),oCt)),244))),t=e.Math.max(t,MCn(BB(oV(n.p,ICt),244)))),(i=oan(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(KCt)&&(n.q!=(QEn(),WIt)&&n.q!=XIt||(t=e.Math.max(t,XH(BB(oV(n.b,(kUn(),oCt)),124))),t=e.Math.max(t,XH(BB(oV(n.b,ICt),124)))))),qy(TD(n.e.yf().We((sWn(),FSt))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,GFn(n.f)}function IHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)BB(a.Pb(),225).Of(h,t);for(f=0;f<t[h].length;f++){for(u=n.Kc();u.Ob();)BB(u.Pb(),225).Pf(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(o=n.Kc();o.Ob();)BB(o.Pb(),225).Qf(h,f,l,t);for(l1(l,b.c.length),e=0,r=new m6(BB(b.c[l],11).b);y$(r.a)||y$(r.b);)for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),s=n.Kc();s.Ob();)BB(s.Pb(),225).Nf(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)BB(c.Pb(),225).Mf()}function CHn(n,t){var e,i,r,c,a;for(n.b=Gy(MD(mMn(t,(HXn(),kpt)))),n.c=Gy(MD(mMn(t,Tpt))),n.d=BB(mMn(t,rgt),336),n.a=BB(mMn(t,Pdt),275),fmn(t),r=(c=BB(P4(AV(AV(wnn(wnn(new Rq(null,new w1(t.b,16)),new ye),new ke),new je),new Ee),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Kc();r.Ob();)e=BB(r.Pb(),17),BB(mMn(e,(hWn(),Nlt)),15).Jc(new ed(n)),hon(e,Nlt,null);for(i=c.Kc();i.Ob();)e=BB(i.Pb(),17),a=BB(mMn(e,(hWn(),xlt)),17),FXn(n,BB(mMn(e,$lt),15),a),hon(e,$lt,null)}function OHn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function AHn(n){var t,e,i,r,c;if(n.k!=(uSn(),Iut))return!1;if(n.j.c.length<=1)return!1;if(BB(mMn(n,(HXn(),ept)),98)==(QEn(),XIt))return!1;if(bvn(),(i=(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))==lvt)return!1;if(i!=fvt&&i!=hvt){if(r=Gy(MD(edn(n,Npt))),!(t=BB(mMn(n,Lpt),142))&&(t=new HR(r,r,r,r)),c=abn(n,(kUn(),ICt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=abn(n,oCt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function $Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(a=n.e,o=t.e,0==a)return t;if(0==o)return n;if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a==o?(w=dG(h=rbn(e,i)),0==(b=dG(jz(h,32)))?new X6(a,w):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[w,b]))):npn(a<0?ibn(i,e):ibn(e,i));if(a==o)l=a,f=c>=u?N8(n.a,c,t.a,u):N8(t.a,u,n.a,c);else{if(0==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))return ODn(),eet;1==r?(l=a,f=d6(n.a,c,t.a,u)):(l=o,f=d6(t.a,u,n.a,c))}return X0(s=new lU(l,f.length,f)),s}function LHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w;return l=qy(TD(mMn(t,(HXn(),Ogt)))),b=null,a==(ain(),Hvt)&&r.c.i==i?b=r.c:a==qvt&&r.d.i==i&&(b=r.d),(h=u)&&l&&!b?(WB(h.e,r),w=e.Math.max(Gy(MD(mMn(h.d,agt))),Gy(MD(mMn(r,agt)))),hon(h.d,agt,w)):(kUn(),f=PCt,b?f=b.j:vA(BB(mMn(i,ept),98))&&(f=a==Hvt?ICt:oCt),s=xHn(n,t,i,a,f,r),o=W5((vW(i),r)),a==Hvt?(SZ(o,BB(xq(s.j,0),11)),MZ(o,c)):(SZ(o,c),MZ(o,BB(xq(s.j,0),11))),h=new zfn(r,o,s,BB(mMn(s,(hWn(),dlt)),11),a,!b)),JCn(n.a,r,new L_(h.d,t,a)),h}function NHn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=null,n.d&&(h=BB(SJ(n.d,t),138)),!h){if(f=(c=n.a.Mh()).i,!n.d||NT(n.d)!=f){for(o=new xp,n.d&&Tcn(o,n.d),u=s=o.f.c+o.g.c;u<f;++u)i=BB(Wtn(c,u),138),(e=BB(null==(r=Ifn(n.e,i).ne())?jIn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jIn(o.f,null,e):ubn(o.g,r,e));if(o.f.c+o.g.c!=f)for(a=0;a<s;++a)i=BB(Wtn(c,a),138),(e=BB(null==(r=Ifn(n.e,i).ne())?jIn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jIn(o.f,null,e):ubn(o.g,r,e));n.d=o}h=BB(SJ(n.d,t),138)}return h}function xHn(n,t,e,i,r,c){var a,u,o,s,h,f;return a=null,s=i==(ain(),Hvt)?c.c:c.d,o=Wln(t),s.i==e?(a=BB(RX(n.b,s),10))||(hon(a=bXn(s,BB(mMn(e,(HXn(),ept)),98),r,HKn(s),null,s.n,s.o,o,t),(hWn(),dlt),s),VW(n.b,s,a)):(u=AEn(a=bXn((h=new Zn,f=Gy(MD(mMn(t,(HXn(),ypt))))/2,son(h,tpt,f),h),BB(mMn(e,ept),98),r,i==Hvt?-1:1,null,new Gj,new xI(0,0),o,t),e,i),hon(a,(hWn(),dlt),u),VW(n.b,u,a)),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)),vA(BB(mMn(t,(HXn(),ept)),98))?hon(t,ept,(QEn(),VIt)):hon(t,ept,(QEn(),QIt)),a}function DHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;OTn(t,"Orthogonal edge routing",1),s=Gy(MD(mMn(n,(HXn(),Apt)))),e=Gy(MD(mMn(n,kpt))),i=Gy(MD(mMn(n,Tpt))),l=new fX(0,e),d=0,a=new M2(n.b,0),u=null,h=null,o=null,f=null;do{f=(h=a.b<a.d.gc()?(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)):null)?h.a:null,u&&(Tqn(u,d),d+=u.c.a),w=AGn(l,n,o,f,u?d+i:d),r=!u||VC(o,(dxn(),jyt)),c=!h||VC(f,(dxn(),jyt)),w>0?(b=(w-1)*e,u&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),u=h,o=f}while(h);n.f.a=d,HSn(t)}function RHn(){var n;RHn=O,EAt=new Sm,kAt=x8(Qtt,sVn,2,0,6,1),SAt=i0(Bun(33,58),Bun(1,26)),PAt=i0(Bun(97,122),Bun(65,90)),IAt=Bun(48,57),TAt=i0(SAt,0),MAt=i0(PAt,IAt),CAt=i0(i0(0,Bun(1,6)),Bun(33,38)),OAt=i0(i0(IAt,Bun(65,70)),Bun(97,102)),xAt=i0(TAt,dpn("-_.!~*'()")),DAt=i0(MAt,Xwn("-_.!~*'()")),dpn(u9n),Xwn(u9n),i0(xAt,dpn(";:@&=+$,")),i0(DAt,Xwn(";:@&=+$,")),AAt=dpn(":/?#"),$At=Xwn(":/?#"),LAt=dpn("/?#"),NAt=Xwn("/?#"),(n=new Rv).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),SQ(),jAt=new Ak(n)}function KHn(n,t){var e,i,r,c,a;if(hon(t,(qqn(),okt),0),r=BB(mMn(t,akt),86),0==t.d.b)r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a)):hon(t,fkt,0);else{for(e=new wg(spn(new bg(t).a.d,0));EE(e.a);)KHn(n,BB(b3(e.a),188).c);i=BB(iL(new wg(spn(new bg(t).a.d,0))),86),c=(Gy(MD(mMn(BB(TN(new wg(spn(new bg(t).a.d,0))),86),fkt)))+Gy(MD(mMn(i,fkt))))/2,r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a),hon(t,okt,Gy(MD(mMn(t,fkt)))-c),CGn(n,t)):hon(t,fkt,c)}}function _Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;u=0,b=0,o=TJ(n.f,n.f.length),c=n.d,a=n.i,i=n.a,r=n.b;do{for(l=0,s=new Wb(n.p);s.a<s.c.c.length;)f=OGn(n,BB(n0(s),10)),e=!0,(n.q==(sNn(),Tvt)||n.q==Pvt)&&(e=qy(TD(f.b))),BB(f.a,19).a<0&&e?(++l,o=TJ(n.f,n.f.length),n.d=n.d+BB(f.a,19).a,b+=c-n.d,c=n.d+BB(f.a,19).a,a=n.i,i=a0(n.a),r=a0(n.b)):(n.f=TJ(o,o.length),n.d=c,n.a=(yX(i),i?new t_(i):HB(new Wb(i))),n.b=(yX(r),r?new t_(r):HB(new Wb(r))),n.i=a);++u,h=0!=l&&qy(TD(t.Kb(new rC(iln(b),iln(u)))))}while(h)}function FHn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return a=n.f,l=t.f,u=a==(YLn(),xEt)||a==REt,o=a==DEt||a==KEt,b=l==DEt||l==KEt,s=a==DEt||a==xEt,w=l==DEt||l==xEt,!u||l!=xEt&&l!=REt?o&&b?n.f==KEt?n:t:s&&w?(a==DEt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,v=i.i+i.g,m=h.d+r.g,c<=(e.Math.max(v,m)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==DEt?n:t:n.f==xEt?n:t):n:n.f==REt?n:t}function BHn(n){var t,e,i,r,c,a,u,o,s,h;for(s=n.e.a.c.length,c=new Wb(n.e.a);c.a<c.c.c.length;)BB(n0(c),121).j=!1;for(n.i=x8(ANt,hQn,25,s,15,1),n.g=x8(ANt,hQn,25,s,15,1),n.n=new Np,r=0,h=new Np,u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).d=r++,0==a.b.a.c.length&&WB(n.n,a),gun(h,a.g);for(t=0,i=new Wb(h);i.a<i.c.c.length;)(e=BB(n0(i),213)).c=t++,e.f=!1;o=h.c.length,null==n.b||n.b.length<o?(n.b=x8(xNt,qQn,25,o,15,1),n.c=x8($Nt,ZYn,25,o,16,1)):nk(n.c),n.d=h,n.p=new LN(etn(n.d.c.length)),n.j=1}function HHn(n,t){var e,i,r,c,a,u,o,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=BB(mMn(n.f,(rkn(),vat)),379),n.g=BB(mMn(n.f,jat),19).a,n.e=Gy(MD(mMn(n.f,mat))),n.c=Gy(MD(mMn(n.f,pat))),cX(n.b),r=new Wb(n.f.c);r.a<r.c.c.length;)i=BB(n0(r),282),yKn(n.b,i.c,i,null),yKn(n.b,i.d,i,null);for(u=n.f.e.c.length,n.a=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),s=new Wb(n.f.e);s.a<s.c.c.length;)IBn(n,o=BB(n0(s),144),n.a[o.b]);for(n.i=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),c=0;c<u;++c)for(a=0;a<u;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function qHn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw Hp(new dy("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=x8(ANt,hQn,25,t,15,1),aHn(n.b,0,i,0,t),n.b=i),n.a=!0}}function GHn(n,t){var e,i,r,c,a,u,o;for(a=gz(n.a).Kc();a.Ob();){if((c=BB(a.Pb(),17)).b.c.length>0)for(i=new t_(BB(h6(n.a,c),21)),SQ(),m$(i,new _w(t)),r=new M2(c.b,0);r.b<r.d.gc();){switch(Px(r.b<r.d.gc()),e=BB(r.d.Xb(r.c=r.b++),70),u=-1,BB(mMn(e,(HXn(),Ydt)),272).g){case 1:u=i.c.length-1;break;case 0:u=Jjn(i);break;case 2:u=0}-1!=u&&(l1(u,i.c.length),WB((o=BB(i.c[u],243)).b.b,e),BB(mMn(vW(o.b.c.i),(hWn(),Zft)),21).Fc((bDn(),fft)),BB(mMn(vW(o.b.c.i),Zft),21).Fc(sft),fW(r),hon(e,vlt,c))}SZ(c,null),MZ(c,null)}}function zHn(n,t){var e,i,r,c;return e=new _n,1==(r=2==(r=(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)).gc())?1:0)&&QC(ldn(BB(P4(AV(i.Lc(),new Fn),Wcn(jgn(0),new en)),162).a,2),0)&&(r=0),1==(c=2==(c=(i=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21)).gc())?1:0)&&QC(ldn(BB(P4(AV(i.Lc(),new Bn),Wcn(jgn(0),new en)),162).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function UHn(n){var t,e,i,r,c,a,u,o,s,h,f;if(o=new Np,!Lx(n,(hWn(),Wft)))return o;for(i=BB(mMn(n,Wft),15).Kc();i.Ob();)dqn(t=BB(i.Pb(),10),n),o.c[o.c.length]=t;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&(u=BB(mMn(c,Vft),10))&&(IZ(s=new ISn,c),qIn(s,BB(mMn(c,Qft),61)),h=BB(xq(u.j,0),11),SZ(f=new wY,s),MZ(f,h));for(e=new Wb(o);e.a<e.c.c.length;)PZ(t=BB(n0(e),10),BB(xq(n.b,n.b.c.length-1),29));return o}function XHn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(c=qy(TD(ZAn(t=WJ(n),(HXn(),wgt)))),h=0,r=0,s=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));s.e!=s.i.gc();)a=(u=QCn(o=BB(kpn(s),79)))&&c&&qy(TD(ZAn(o,dgt))),l=PTn(BB(Wtn((!o.c&&(o.c=new hK(KOt,o,5,8)),o.c),0),82)),u&&a?++r:u&&!a?++h:JJ(l)==t||l==t?++r:++h;for(i=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));i.e!=i.i.gc();)a=(u=QCn(e=BB(kpn(i),79)))&&c&&qy(TD(ZAn(e,dgt))),f=PTn(BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),u&&a?++h:u&&!a?++r:JJ(f)==t||f==t?++h:++r;return h-r}function WHn(n,t){var e,i,r,c,a,u,o,s,h;if(OTn(t,"Edge splitting",1),n.b.c.length<=2)HSn(t);else{for(Px((c=new M2(n.b,0)).b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29);c.b<c.d.gc();)for(r=a,Px(c.b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29),u=new Wb(r.a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(i=new Wb(BB(n0(o),11).g);i.a<i.c.c.length;)(s=(e=BB(n0(i),17)).d.i.c)!=r&&s!=a&&zxn(e,(Bl(h=new $vn(n),(uSn(),Put)),hon(h,(hWn(),dlt),e),hon(h,(HXn(),ept),(QEn(),XIt)),PZ(h,a),h));HSn(t)}}function VHn(n,t){var e,i,r,c,a,u,o,s,h;if((a=null!=t.p&&!t.b)||OTn(t,aZn,1),c=1/(e=BB(mMn(n,(hWn(),Mlt)),15)).gc(),t.n)for(OH(t,"ELK Layered uses the following "+e.gc()+" modules:"),h=0,s=e.Kc();s.Ob();)OH(t," Slot "+(h<10?"0":"")+h+++": "+nE(tsn(BB(s.Pb(),51))));for(o=e.Kc();o.Ob();)BB(o.Pb(),51).pf(n,mcn(t,c));for(r=new Wb(n.b);r.a<r.c.c.length;)i=BB(n0(r),29),gun(n.a,i.a),i.a.c=x8(Ant,HWn,1,0,5,1);for(u=new Wb(n.a);u.a<u.c.c.length;)PZ(BB(n0(u),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),a||HSn(t)}function QHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;r=Gy(MD(mMn(t,(HXn(),Dgt)))),l=4,c=3,j=20/(k=BB(mMn(t,xpt),19).a),b=!1,s=0,u=DWn;do{for(a=1!=s,f=0!=s,E=0,v=0,y=(g=n.a).length;v<y;++v)(w=g[v]).f=null,Bzn(n,w,a,f,r),E+=e.Math.abs(w.a);do{o=U_n(n,t)}while(o);for(p=0,m=(d=n.a).length;p<m;++p)if(0!=(i=wU(w=d[p]).a))for(h=new Wb(w.e);h.a<h.c.c.length;)BB(n0(h),10).n.b+=i;0==s||1==s?--l<=0&&(E<u||-l>k)?(s=2,u=DWn):0==s?(s=1,u=E):(s=0,u=E):(b=E>=u||u-E<j,u=E,b&&--c)}while(!(b&&c<=0))}function YHn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(w=new xp,c=n.a.ec().Kc();c.Ob();)VW(w,i=BB(c.Pb(),168),e.Je(i));for(yX(n),m$(a=n?new t_(n):HB(n.a.ec().Kc()),new Ew(w)),u=S4(a),o=new I$(t),jIn((b=new xp).f,t,o);0!=u.a.gc();){for(s=null,h=null,f=null,r=u.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),168),Gy(MD(qC(AY(w.f,i))))<=RQn){if(hU(b,i.a)&&!hU(b,i.b)){h=i.b,f=i.a,s=i;break}if(hU(b,i.b)&&!hU(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new I$(h),WB(BB(qC(AY(b.f,f)),221).a,l),jIn(b.f,h,l),u.a.Bc(s)}return o}function JHn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Depth-first cycle removal",1),o=(s=t.a).c.length,n.c=new Np,n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,o,16,1),n.b=new Np,c=0,u=new Wb(s);u.a<u.c.c.length;)(a=BB(n0(u),10)).p=c,h3(fbn(a))&&WB(n.c,a),++c;for(h=new Wb(n.c);h.a<h.c.c.length;)GPn(n,BB(n0(h),10));for(r=0;r<o;r++)n.d[r]||(l1(r,s.c.length),GPn(n,BB(s.c[r],10)));for(i=new Wb(n.b);i.a<i.c.c.length;)tBn(BB(n0(i),17),!0),hon(t,(hWn(),qft),(hN(),!0));n.c=null,n.d=null,n.a=null,n.b=null,HSn(e)}function ZHn(n,t){var e,i,r,c,a,u,o;for(n.a.c=x8(Ant,HWn,1,0,5,1),i=spn(t.b,0);i.b!=i.d.c;)0==(e=BB(b3(i),86)).b.b&&(hon(e,(qqn(),dkt),(hN(),!0)),WB(n.a,e));switch(n.a.c.length){case 0:hon(r=new csn(0,t,"DUMMY_ROOT"),(qqn(),dkt),(hN(),!0)),hon(r,ekt,!0),DH(t.b,r);break;case 1:break;default:for(c=new csn(0,t,"SUPER_ROOT"),u=new Wb(n.a);u.a<u.c.c.length;)hon(o=new UQ(c,a=BB(n0(u),86)),(qqn(),ekt),(hN(),!0)),DH(c.a.a,o),DH(c.d,o),DH(a.b,o),hon(a,dkt,!1);hon(c,(qqn(),dkt),(hN(),!0)),hon(c,ekt,!0),DH(t.b,c)}}function nqn(n,t){var i,r,c,a,u,o;return jDn(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),u=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),o=e.Math.max(u,i),h$(),rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>=0^(rin(A3n),(e.Math.abs(o)<=A3n||0==o||isNaN(o)&&isNaN(0)?0:o<0?-1:o>0?1:zO(isNaN(o),isNaN(0)))>=0)?e.Math.max(o,r):(rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>0?e.Math.sqrt(o*o+r*r):-e.Math.sqrt(o*o+r*r))}function tqn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new _v),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=BB(bW(n.a,a-1),117)).e&&10!=c.e||0!=t.e&&10!=t.e?Iv(n.a,t):(0==t.e||t.bm().length,0==c.e?(e=new Pk,(i=c._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn),c=new vJ(10,null,0),kU(n.a,c,a-1)):(c.bm().length,cO(e=new Pk,c.bm())),0==t.e?(i=t._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn):cO(e,t.bm()),BB(c,521).b=e.a):Iv(n.a,t);else for(r=0;r<t.em();r++)tqn(n,t.am(r));else Iv(n.a,t)}function eqn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=DUn(fan(n.f),IJ(n.e)),n.g):(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=yhn(n.f)),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new Ik).a+=""+r,n.e>0&&i>=-6?i>=0?kZ(c,e-IJ(n.e),String.fromCharCode(46)):(c.a=fx(c.a,0,t-1)+"0."+nO(c.a,t-1),kZ(c,t+1,Bdn(qtt,0,-IJ(i)-1))):(e-t>=1&&(kZ(c,t,String.fromCharCode(46)),++e),kZ(c,e,String.fromCharCode(69)),i>0&&kZ(c,++e,String.fromCharCode(43)),kZ(c,++e,""+vz(fan(i)))),n.g=c.a,n.g))}function iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=BB((i=e.Kc()).Pb(),19).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?BB(i.Pb(),19).a:t.f+1),a!=h)for(b=BB(xq(n.b,a),29),f=BB(xq(n.b,h),29),s=new Wb(a0(b.a));s.a<s.c.c.length;)if(Qyn(o=BB(n0(s),10),f.a.c.length,f),0==h)for(c=new Wb(a0(fbn(o)));c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(n,(hWn(),qft),(hN(),!0)),iGn(n,r,1);++h,++a}for(u=new M2(n.b,0);u.b<u.d.gc();)Px(u.b<u.d.gc()),0==BB(u.d.Xb(u.c=u.b++),29).a.c.length&&fW(u)}}function rqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=(a=t.b).o,o=a.d,i=Gy(MD(gpn(a,(HXn(),ypt)))),r=Gy(MD(gpn(a,jpt))),s=Gy(MD(gpn(a,$pt))),rH(u=new fm,o.d,o.c,o.a,o.b),l=MRn(t,i,r,s),p=new Wb(t.d);p.a<p.c.c.length;){for(w=(g=BB(n0(p),101)).f.a.ec().Kc();w.Ob();)c=(b=BB(w.Pb(),409)).a,f=ETn(b),v=new km,bTn(b,b.c,l,v),FMn(b,f,l,v),bTn(b,b.d,l,v),e=v,e=n.Uf(b,f,e),yQ(c.a),Frn(c.a,e),JT(new Rq(null,new w1(e,16)),new wP(h,u));(d=g.i)&&(aTn(g,d,l,r),pgn(h,u,m=new wA(d.g)),UR(m,d.j),pgn(h,u,m))}rH(o,u.d,u.c,u.a,u.b)}function cqn(n,t,e){var i,r,c;if((r=BB(mMn(t,(HXn(),Pdt)),275))!=(JMn(),cft)){switch(OTn(e,"Horizontal Compaction",1),n.a=t,Vk(i=new yOn(((c=new C7).d=t,c.c=BB(mMn(c.d,Zdt),218),UDn(c),SGn(c),sRn(c),c.a)),n.b),1===BB(mMn(t,Sdt),422).g?Wk(i,new grn(n.a)):Wk(i,(IQ(),fit)),r.g){case 1:I$n(i);break;case 2:I$n(Tzn(i,(Ffn(),FPt)));break;case 3:I$n(Uk(Tzn(I$n(i),(Ffn(),FPt)),new gr));break;case 4:I$n(Uk(Tzn(I$n(i),(Ffn(),FPt)),new kd(c)));break;case 5:I$n(Xk(i,wst))}Tzn(i,(Ffn(),_Pt)),i.e=!0,Lzn(c),HSn(e)}}function aqn(n,t,e,i,r,c,a,u){var o,s,h,f;switch(o=u6(Pun(Gk(FEt,1),HWn,220,0,[t,e,i,r])),f=null,n.b.g){case 1:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ja,new Qa,new Ya]));break;case 0:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ya,new Qa,new Ja]));break;case 2:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Qa,new Ja,new Ya]))}for(h=new Wb(f);h.a<h.c.c.length;)s=BB(n0(h),526),o.c.length>1&&(o=s.mg(o,n.a,u));return 1==o.c.length?BB(xq(o,o.c.length-1),220):2==o.c.length?FHn((l1(0,o.c.length),BB(o.c[0],220)),(l1(1,o.c.length),BB(o.c[1],220)),a,c):null}function uqn(n){var t,i,r,c,a,u;for(Otn(n.a,new nt),i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),221),r=XR(B$(BB(n.b,65).c),BB(t.b,65).c),ect?(u=BB(n.b,65).b,a=BB(t.b,65).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>u.d&&a.d<u.d+u.a&&NH(r,e.Math.max(u.c-(a.c+a.b),a.c-(u.c+u.b)))):(r.a=0,a.c+a.b>u.c&&a.c<u.c+u.b&&NH(r,e.Math.max(u.d-(a.d+a.a),a.d-(u.d+u.a))))):NH(r,TFn(BB(n.b,65),BB(t.b,65))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),NH(r,c=HEn(Wrt,t,c,r)),LG(BB(t.b,65),r),Otn(t.a,new Aw(r)),BB(Wrt.b,65),K8(Wrt,Vrt,t)}function oqn(n){var t,i,r,c,a,u,o,s,f,l,b,w;for(n.f=new Fv,o=0,r=0,c=new Wb(n.e.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;){for((a=BB(n0(u),10)).p=o++,i=new oz(ZL(lbn(a).a.Kc(),new h));dAn(i);)BB(U5(i),17).p=r++;for(t=AHn(a),l=new Wb(a.j);l.a<l.c.c.length;)f=BB(n0(l),11),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-j2(fan(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-j2(fan(e.Math.round(b))),f.n.b-=s)}n.g=o,n.b=r,n.i=x8(eyt,HWn,401,o,0,1),n.c=x8(Jmt,HWn,649,r,0,1),n.d.a.$b()}function sqn(n){var t,e,i,r,c,a,u,o,s;if(n.ej())if(o=n.fj(),n.i>0){if(t=new DC(n.i,n.g),c=(e=n.i)<100?null:new Fj(e),n.ij())for(i=0;i<n.i;++i)a=n.g[i],c=n.kj(a,c);if(a6(n),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new ax(t);i.e!=i.i.gc();)c=n.dj(jpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r)}else a6(n),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if(n.i>0){for(u=n.g,s=n.i,a6(n),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else a6(n);else a6(n)}function hqn(n,t,i){var r,c,a,u,o,s,h,f,l;for(_an(this),i==(dJ(),Lyt)?TU(this.r,n):TU(this.w,n),f=RQn,h=KQn,u=t.a.ec().Kc();u.Ob();)c=BB(u.Pb(),46),o=BB(c.a,455),(s=(r=BB(c.b,17)).c)==n&&(s=r.d),TU(o==Lyt?this.r:this.w,s),l=(kUn(),yCt).Hc(s.j)?Gy(MD(mMn(s,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(XMn(this,(kUn(),yCt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=BB(a.Pb(),46),tPn(this,BB(c.b,17));this.o=!1}function fqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return e=8191&n.l,i=n.l>>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(u=8191&t.l),p=r*u,v=c*u,m=a*u,0!=(o=t.l>>13|(15&t.m)<<9)&&(g+=e*o,p+=i*o,v+=r*o,m+=c*o),0!=(s=t.m>>4&8191)&&(p+=e*s,v+=i*s,m+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(v+=e*h,m+=i*h),0!=(f=(1048320&t.h)>>8)&&(m+=e*f),b=((d=e*u)>>22)+(g>>9)+((262143&p)<<4)+((31&v)<<17),w=(p>>18)+(v>>5)+((4095&m)<<8),w+=(b+=(l=(d&SQn)+((511&g)<<13))>>22)>>22,M$(l&=SQn,b&=SQn,w&=PQn)}function lqn(n){var t,i,r,c,a,u,o;if(0!=(o=BB(xq(n.j,0),11)).g.c.length&&0!=o.e.c.length)throw Hp(new Fy("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=o.g.c.length){for(a=RQn,i=new Wb(o.g);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.d.i,(HXn(),Igt)),142),a=e.Math.min(a,u.n.a-r.b);return new qf(yX(a))}if(0!=o.e.c.length){for(c=KQn,i=new Wb(o.e);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.c.i,(HXn(),Igt)),142),c=e.Math.max(c,u.n.a+u.o.a+r.c);return new qf(yX(c))}return iy(),iy(),Ont}function bqn(n,t){var e,i,r,c,a,u;if(n.Fk()){if(n.i>4){if(!n.wj(t))return!1;if(n.rk()){if(u=(e=(i=BB(t,49)).Ug())==n.e&&(n.Dk()?i.Og(i.Vg(),n.zk())==n.Ak():-1-i.Vg()==n.aj()),n.Ek()&&!u&&!e&&i.Zg())for(r=0;r<n.i;++r)if(GC(n.Gk(BB(n.g[r],56)))===GC(t))return!0;return u}if(n.Dk()&&!n.Ck()){if(GC(c=BB(t,56).ah(Ivn(BB(n.ak(),18))))===GC(n.e))return!0;if(null==c||!BB(c,56).kh())return!1}}if(a=Sjn(n,t),n.Ek()&&!a)for(r=0;r<n.i;++r)if(GC(i=n.Gk(BB(n.g[r],56)))===GC(t))return!0;return a}return Sjn(n,t)}function wqn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(h=new Np,l=new Rv,a=t.b,r=0;r<a.c.length;r++){for(s=(l1(r,a.c.length),BB(a.c[r],29)).a,h.c=x8(Ant,HWn,1,0,5,1),c=0;c<s.c.length;c++)(u=n.a[r][c]).p=c,u.k==(uSn(),Cut)&&(h.c[h.c.length]=u),c5(BB(xq(t.b,r),29).a,c,u),u.j.c=x8(Ant,HWn,1,0,5,1),gun(u.j,BB(BB(xq(n.b,r),15).Xb(c),14)),LK(BB(mMn(u,(HXn(),ept)),98))||hon(u,ept,(QEn(),UIt));for(i=new Wb(h);i.a<i.c.c.length;)f=QRn(e=BB(n0(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(o=l.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),SQ(),m$(u.j,(zsn(),sst)),u.i=!0,eCn(u)}function dqn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=BB(mMn(n,(hWn(),Qft)),61),i=BB(xq(n.j,0),11),h==(kUn(),sCt)?qIn(i,SCt):h==SCt&&qIn(i,sCt),BB(mMn(t,(HXn(),Fgt)),174).Hc((mdn(),_Ct))){if(o=Gy(MD(mMn(n,Ipt))),s=Gy(MD(mMn(n,Cpt))),a=Gy(MD(mMn(n,Spt))),(u=BB(mMn(t,cpt),21)).Hc((lCn(),eCt)))for(e=s,f=n.o.a/2-i.n.a,c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(u.Hc(rCt))for(c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.a=o+n.o.a-i.n.a;f0(new Pw((gM(),new HV(t,!1,!1,new Ft))),new __(null,n,!1))}}function gqn(n,t){var i,r,c,a,u,o,s;if(0!=t.c.length){for(SQ(),yG(t.c,t.c.length,null),r=BB(n0(c=new Wb(t)),145);c.a<c.c.c.length;)i=BB(n0(c),145),!aen(r.e.c,i.e.c)||Kdn(BD(r.e).b,i.e.d)||Kdn(BD(i.e).b,r.e.d)?(eFn(n,r),r=i):(gun(r.k,i.k),gun(r.b,i.b),gun(r.c,i.c),Frn(r.i,i.i),gun(r.d,i.d),gun(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),u=e.Math.min(r.e.d,i.e.d),o=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-u,xH(r.e,a,u,o,s),t0(r.f,i.f),!r.a&&(r.a=i.a),gun(r.g,i.g),WB(r.g,i));eFn(n,r)}}function pqn(n,t,e,i){var r,c,a,u,o,s;if((u=n.j)==(kUn(),PCt)&&t!=(QEn(),QIt)&&t!=(QEn(),YIt)&&(qIn(n,u=z_n(n,e)),!(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),tpt))&&u!=PCt&&(0!=n.n.a||0!=n.n.b)&&hon(n,tpt,jkn(n,u))),t==(QEn(),WIt)){switch(s=0,u.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}hon(n,(hWn(),Tlt),s)}if(o=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=QIt&&t!=YIt&&u!=PCt)switch(u.g){case 1:a.a=o.a/2;break;case 2:a.a=o.a,a.b=o.b/2;break;case 3:a.a=o.a/2,a.b=o.b;break;case 4:a.b=o.b/2}else a.a=o.a/2,a.b=o.b/2}function vqn(n){var t,e,i,r,c,a,u,o,s,h;if(n.ej())if(h=n.Vi(),o=n.fj(),h>0)if(t=new jcn(n.Gi()),c=(e=h)<100?null:new Fj(e),JD(n,e,t.g),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new AL(t);i.e!=i.i.gc();)c=n.dj(kpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r);else JD(n,n.Vi(),n.Wi()),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if((h=n.Vi())>0){for(u=n.Wi(),s=h,JD(n,h,u),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else JD(n,n.Vi(),n.Wi());else JD(n,n.Vi(),n.Wi())}function mqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(u=new Wb(t);u.a<u.c.c.length;)(c=BB(n0(u),233)).e=null,c.c=0;for(o=null,a=new Wb(t);a.a<a.c.c.length;)if(f=(c=BB(n0(a),233)).d[0],!e||f.k==(uSn(),Iut)){for(b=BB(mMn(f,(hWn(),clt)),15).Kc();b.Ob();)l=BB(b.Pb(),10),e&&l.k!=(uSn(),Iut)||((!c.e&&(c.e=new Np),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(uSn(),Iut)){if(o)for(h=BB(h6(n.d,o),21).Kc();h.Ob();)for(s=BB(h.Pb(),10),r=BB(h6(n.d,f),21).Kc();r.Ob();)i=BB(r.Pb(),10),UB(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;o=f}}}function yqn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),11),nhn(n.b,n.d[r.p]),o.c=x8(Ant,HWn,1,0,5,1),r.i.k.g){case 0:Otn(BB(mMn(r,(hWn(),Elt)),10).j,new Zd(o));break;case 1:S$(Qon(AV(new Rq(null,new w1(r.i.j,16)),new ng(r))),new tg(o));break;case 3:WB(o,new rC(BB(mMn(r,(hWn(),dlt)),11),iln(r.e.c.length+r.g.c.length)))}for(u=new Wb(o);u.a<u.c.c.length;)a=BB(n0(u),46),(i=ME(n,BB(a.a,11)))>n.d[r.p]&&(e+=n5(n.b,i)*BB(a.b,19).a,d3(n.a,iln(i)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function kqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for((f=new wA(BB(ZAn(n,(SMn(),HMt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=MD(ZAn(n,DMt)))||(kW(c),c<=0))&&(c=1.3),u=new Np,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)a=new zx(BB(kpn(l),33)),u.c[u.c.length]=a;switch(BB(ZAn(n,RMt),311).g){case 3:w=aFn(u,t,f.a,f.b,(s=r,kW(c),s));break;case 1:w=vBn(u,t,f.a,f.b,(h=r,kW(c),h));break;default:w=Mqn(u,t,f.a,f.b,(o=r,kW(c),o))}KUn(n,(b=yXn(new Gtn(w),t,i,f.a,f.b,r,(kW(c),c))).a,b.b,!1,!0)}function jqn(n,t){var e,i,r,c;c=new t_((e=t.b).j),r=0,(i=e.j).c=x8(Ant,HWn,1,0,5,1),eX(BB(gan(n.b,(kUn(),sCt),(Irn(),Rst)),15),e),r=Jmn(c,r,new xr,i),eX(BB(gan(n.b,sCt,Dst),15),e),r=Jmn(c,r,new Nr,i),eX(BB(gan(n.b,sCt,xst),15),e),eX(BB(gan(n.b,oCt,Rst),15),e),eX(BB(gan(n.b,oCt,Dst),15),e),r=Jmn(c,r,new Dr,i),eX(BB(gan(n.b,oCt,xst),15),e),eX(BB(gan(n.b,SCt,Rst),15),e),r=Jmn(c,r,new Rr,i),eX(BB(gan(n.b,SCt,Dst),15),e),r=Jmn(c,r,new Kr,i),eX(BB(gan(n.b,SCt,xst),15),e),eX(BB(gan(n.b,ICt,Rst),15),e),r=Jmn(c,r,new Qr,i),eX(BB(gan(n.b,ICt,Dst),15),e),eX(BB(gan(n.b,ICt,xst),15),e)}function Eqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Layer size calculation",1),f=RQn,h=KQn,c=!1,o=new Wb(n.b);o.a<o.c.c.length;)if((s=(u=BB(n0(o),29)).c).a=0,s.b=0,0!=u.a.c.length){for(c=!0,b=new Wb(u.a);b.a<b.c.c.length;)d=(l=BB(n0(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=BB(xq(u.a,0),10)).n.b-r.d.d,r.k==(uSn(),Mut)&&(g-=BB(mMn(n,(HXn(),Lpt)),142).d),i=(a=BB(xq(u.a,u.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==Mut&&(i+=BB(mMn(n,(HXn(),Lpt)),142).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,HSn(t)}function Tqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Wb(n.a);s.a<s.c.c.length;)u=BB(n0(s),10),c=e.Math.max(c,u.d.b),a=e.Math.max(a,u.d.c);for(o=new Wb(n.a);o.a<o.c.c.length;){switch(u=BB(n0(o),10),BB(mMn(u,(HXn(),kdt)),248).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Wb(u.j);b.a<b.c.c.length;)0==(l=BB(n0(b),11)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=u.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=u.d.b)&&(p=r),d=u.d.c,p>g.a-d-h&&(p=g.a-d-h),u.n.a=t+p}}function Mqn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(u=x8(xNt,qQn,25,n.c.length,15,1),ikn(l=new Xz(new Uu),n),s=0,b=new Np;0!=l.b.c.length;)if(a=BB(0==l.b.c.length?null:xq(l.b,0),157),s>1&&iG(a)*eG(a)/2>u[0]){for(c=0;c<b.c.length-1&&iG(a)*eG(a)/2>u[c];)++c;f=new Gtn(new s1(b,0,c+1)),h=iG(a)/eG(a),o=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),o),F8(eMn(l,f)),ikn(l,new s1(b,c+1,b.c.length)),b.c=x8(Ant,HWn,1,0,5,1),s=0,jG(u,u.length,0)}else null!=(0==l.b.c.length?null:xq(l.b,0))&&hrn(l,0),s>0&&(u[s]=u[s-1]),u[s]+=iG(a)*eG(a),++s,b.c[b.c.length]=a;return b}function Sqn(n){var t,e,i;if((e=BB(mMn(n,(HXn(),kgt)),163))==(Tbn(),Flt)){for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(!X5(BB(U5(t),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Hlt)for(i=new oz(ZL(lbn(n).a.Kc(),new h));dAn(i);)if(!X5(BB(U5(i),17)))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Pqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(OTn(t,"Label dummy removal",1),i=Gy(MD(mMn(n,(HXn(),jpt)))),r=Gy(MD(mMn(n,Spt))),o=BB(mMn(n,Udt),103),u=new Wb(n.b);u.a<u.c.c.length;)for(h=new M2(BB(n0(u),29).a,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),(s=BB(h.d.Xb(h.c=h.b++),10)).k==(uSn(),Sut)&&(f=BB(mMn(s,(hWn(),dlt)),17),b=Gy(MD(mMn(f,agt))),a=GC(mMn(s,ult))===GC((Xyn(),EIt)),e=new wA(s.n),a&&(e.b+=b+i),c=new xI(s.o.a,s.o.b-b-i),l=BB(mMn(s,Plt),15),o==(Ffn(),HPt)||o==KPt?ADn(l,e,r,c,a,o):qhn(l,e,r,c),gun(f.b,l),rGn(s,GC(mMn(n,Zdt))===GC((Mbn(),YPt))),fW(h));HSn(t)}function Iqn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(u=new Np,r=new Wb(t.a);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),10).j);a.a<a.c.c.length;){for(s=null,m=0,y=(v=Z0((c=BB(n0(a),11)).g)).length;m<y;++m)wan((p=v[m]).d.i,e)||((g=LHn(n,t,e,p,p.c,(ain(),qvt),s))!=s&&(u.c[u.c.length]=g),g.c&&(s=g));for(o=null,w=0,d=(b=Z0(c.e)).length;w<d;++w)wan((l=b[w]).c.i,e)||((g=LHn(n,t,e,l,l.d,(ain(),Hvt),o))!=o&&(u.c[u.c.length]=g),g.c&&(o=g))}for(f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),441),-1!=E7(t.a,h.a,0)||WB(t.a,h.a),h.c&&(i.c[i.c.length]=h)}function Cqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Interactive cycle breaking",1),h=new Np,l=new Wb(t.a);l.a<l.c.c.length;)for((f=BB(n0(l),10)).p=1,b=Fjn(f).a,s=xwn(f,(ain(),qvt)).Kc();s.Ob();)for(c=new Wb(BB(s.Pb(),11).g);c.a<c.c.c.length;)(w=(i=BB(n0(c),17)).d.i)!=f&&Fjn(w).a<b&&(h.c[h.c.length]=i);for(a=new Wb(h);a.a<a.c.c.length;)tBn(i=BB(n0(a),17),!0);for(h.c=x8(Ant,HWn,1,0,5,1),o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p>0&&lPn(n,u,h);for(r=new Wb(h);r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0);h.c=x8(Ant,HWn,1,0,5,1),HSn(e)}function Oqn(n,t){var e,i,r,c,a,u,o,s,h;return s="",0==t.length?n.de(XVn,zVn,-1,-1):(mK((h=RMn(t)).substr(0,3),"at ")&&(h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=RMn(h.substr(a+1)),h=RMn(h.substr(0,a))):(e=h.indexOf(")",a),s=h.substr(a+1,e-(a+1)),h=RMn(h.substr(0,a))),-1!=(a=GO(h,YTn(46)))&&(h=h.substr(a+1)),(0==h.length||mK(h,"Anonymous function"))&&(h=zVn),u=mN(s,YTn(58)),r=MK(s,YTn(58),u-1),o=-1,i=-1,c=XVn,-1!=u&&-1!=r&&(c=s.substr(0,r),o=hx(s.substr(r+1,u-(r+1))),i=hx(s.substr(u+1))),n.de(c,h,o,i))}function Aqn(n,t,e){var i,r,c,a,u,o;if(0==t.l&&0==t.m&&0==t.h)throw Hp(new Oy("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(ltt=M$(0,0,0)),M$(0,0,0);if(t.h==IQn&&0==t.m&&0==t.l)return Fbn(n,e);if(o=!1,t.h>>19!=0&&(t=aon(t),o=!o),a=OLn(t),c=!1,r=!1,i=!1,n.h==IQn&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return u=jAn(n,a),o&&Oon(u),e&&(ltt=M$(0,0,0)),u;n=WO((X7(),btt)),i=!0,o=!o}else n.h>>19!=0&&(c=!0,n=aon(n),i=!0,o=!o);return-1!=a?Bon(n,a,o,c,e):Kkn(n,t)<0?(e&&(ltt=c?aon(n):M$(n.l,n.m,n.h)),M$(0,0,0)):h_n(i?n:M$(n.l,n.m,n.h),t,o,c,r,e)}function $qn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw Hp(new Fy("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=BB(Vj(n.g),9),b=sx(n.f),u=0,s=(c=h).length;u<s;++u)(f=BB(D7(n,(i=c[u]).g),246))?WB(b,BB(own(n,f),123)):b.c[b.c.length]=null;for(w=new B2,JT(AV($V(AV(new Rq(null,new w1(b,16)),new hu),new Eg(t)),new fu),new Tg(w)),Jcn(w,n.a),e=new Np,a=0,o=(r=h).length;a<o;++a)gun(e,Eun(n,JQ(BB(D7(w,(i=r[a]).g),20)))),(l=BB(xq(b,i.g),123))&&(e.c[e.c.length]=l);return gun(e,Eun(n,JQ(BB(D7(w,h[h.length-1].g+1),20)))),e}function Lqn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w;for(OTn(i,"Model order cycle breaking",1),n.a=0,n.b=0,l=new Np,h=t.a.c.length,s=new Wb(t.a);s.a<s.c.c.length;)Lx(o=BB(n0(s),10),(hWn(),wlt))&&(h=e.Math.max(h,BB(mMn(o,wlt),19).a+1));for(w=new Wb(t.a);w.a<w.c.c.length;)for(u=zPn(n,b=BB(n0(w),10),h),f=xwn(b,(ain(),qvt)).Kc();f.Ob();)for(a=new Wb(BB(f.Pb(),11).g);a.a<a.c.c.length;)zPn(n,(r=BB(n0(a),17)).d.i,h)<u&&(l.c[l.c.length]=r);for(c=new Wb(l);c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(t,(hWn(),qft),(hN(),!0));l.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function Nqn(n,t){var e,i,r,c,a,u,o;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=BB(a.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(u=n.r.a.ec().Kc();u.Ob();)r=BB(u.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(o=t.w.a.ec().Kc();o.Ob();)r=BB(o.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=BB(c.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new S6(n,t,i-e):i<e?new S6(t,n,e-i):(new S6(t,n,0),new S6(n,t,0))}}function xqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(s=t.c,r=QA(n.e),f=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,o=new Wb(s);o.a<o.c.c.length;){switch(b=e+(l=(u=BB(n0(o),395)).b).a,g=i+l.b,w=IJ(b/n.a),p=IJ(g/n.b),(c=u.a).g){case 0:Hpn(),h=Brt;break;case 1:Hpn(),h=Frt;break;case 2:Hpn(),h=Hrt;break;default:Hpn(),h=qrt}c.a?(v=IJ((g+u.c)/n.b),WB(n.f,new x_(h,iln(p),iln(v))),c==(qpn(),tct)?won(n,0,p,w,v):won(n,w,p,n.d-1,v)):(d=IJ((b+u.c)/n.a),WB(n.f,new x_(h,iln(w),iln(d))),c==(qpn(),Zrt)?won(n,w,0,d,p):won(n,w,p,d,n.c-1))}}function Dqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(l=new Np,c=new Np,d=null,u=t.Kc();u.Ob();)a=new Hd(BB(u.Pb(),19).a),c.c[c.c.length]=a,d&&(a.d=d,d.e=a),d=a;for(m=zFn(n),h=0;h<c.c.length;++h){for(b=null,g=D6((l1(0,c.c.length),BB(c.c[0],652))),i=null,r=RQn,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,o=w):(s=g,o=p),y=Gy(MD(mMn(n,(HXn(),Hpt)))),(v=m[f]+e.Math.pow(o,y))<r&&(r=v,(i=s).c=f),g&&f==g.b&&(b=g,g=xz(g));i&&(WB(l,iln(i.c)),i.a=!0,vln(i))}return SQ(),yG(l.c,l.c.length,null),l}function Rqn(n){var t,e,i,r,c,a,u,o,s,h;for(t=new To,e=new To,s=mK(K9n,(r=N_n(n.b,_9n))?SD(cdn((!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),r.b),F9n)):null),o=0;o<n.i;++o)cL(u=BB(n.g[o],170),99)?0!=((a=BB(u,18)).Bb&h6n)?(0==(a.Bb&hVn)||!s&&null==((c=N_n(a,_9n))?SD(cdn((!c.b&&(c.b=new Jx((gWn(),k$t),X$t,c)),c.b),n8n)):null))&&f9(t,a):(h=Ivn(a))&&0!=(h.Bb&h6n)||(0==(a.Bb&hVn)||!s&&null==((i=N_n(a,_9n))?SD(cdn((!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),i.b),n8n)):null))&&f9(e,a):(ZM(),BB(u,66).Oj()&&(u.Jj()||(f9(t,u),f9(e,u))));chn(t),chn(e),n.a=BB(t.g,247),BB(e.g,247)}function Kqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(o=xSn(t),BB(mMn(t,(HXn(),qdt)),314)!=(Oin(),hht)&&e5(o,new vt),e5(o,new Dw(BB(mMn(t,Rdt),292))),b=0,s=new Np,r=new bV(o);r.a!=r.b;)i=BB(_hn(r),37),$Gn(n.c,i),b+=(f=BB(mMn(i,(hWn(),Mlt)),15)).gc(),WB(s,new rC(i,f.Kc()));for(OTn(e,"Recursive hierarchical layout",b),l=BB(BB(xq(s,s.c.length-1),46).b,47);l.Ob();)for(u=new Wb(s);u.a<u.c.c.length;)for(a=BB(n0(u),46),f=BB(a.b,47),c=BB(a.a,37);f.Ob();){if(cL(h=BB(f.Pb(),51),507)){if(c.e)break;h.pf(c,mcn(e,1));break}h.pf(c,mcn(e,1))}HSn(e)}function _qn(n,t){var e,i,r,c,a,u,o,s;if(b1(u=t.length-1,t.length),93==(a=t.charCodeAt(u))){if((c=GO(t,YTn(91)))>=0)return r=dbn(n,t.substr(1,c-1)),YUn(n,t.substr(c+1,u-(c+1)),r)}else{if(e=-1,null==Ett&&(Ett=new RegExp("\\d")),Ett.test(String.fromCharCode(a))&&(e=MK(t,YTn(46),u-1))>=0){i=BB(V5(n,Ptn(n,t.substr(1,e-1)),!1),58),o=0;try{o=l_n(t.substr(e+1),_Vn,DWn)}catch(h){throw cL(h=lun(h),127)?Hp(new L7(h)):Hp(h)}if(o<i.gc())return cL(s=i.Xb(o),72)&&(s=BB(s,72).dd()),BB(s,56)}if(e<0)return BB(V5(n,Ptn(n,t.substr(1)),!1),56)}return null}function Fqn(n,t,e){var i,r,c,a,u,o,s;if(Awn(t,e)>=0)return e;switch(DW(B7(n,e))){case 2:if(mK("",Ifn(n,e.Hj()).ne())){if(o=m$n(n,t,u=jV(B7(n,e)),kV(B7(n,e))))return o;for(a=0,s=(r=jKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(r.Xb(a),170))),u))return o}return null;case 4:if(mK("",Ifn(n,e.Hj()).ne())){for(i=e;i;i=J1(B7(n,i)))if(o=y$n(n,t,jV(B7(n,i)),kV(B7(n,i))))return o;if(u=jV(B7(n,e)),mK(S7n,u))return mjn(n,t);for(a=0,s=(c=EKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(c.Xb(a),170))),u))return o}return null;default:return null}}function Bqn(n,t,e){var i,r,c,a,u,o,s,h;if(0==e.gc())return!1;if(ZM(),c=(u=BB(t,66).Oj())?e:new gtn(e.gc()),$xn(n.e,t)){if(t.hi())for(s=e.Kc();s.Ob();)UFn(n,t,o=s.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(r=Z3(t,o),c.Hc(r)||c.Fc(r));else if(!u)for(s=e.Kc();s.Ob();)r=Z3(t,o=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw Hp(new _y(C7n));for(h=axn(n.e.Tg(),t),i=BB(n.g,119),a=0;a<n.i;++a)if(r=i[a],h.rl(r.ak())){if(e.Hc(u?r:r.dd()))return!1;for(s=e.Kc();s.Ob();)o=s.Pb(),BB(ovn(n,a,u?BB(o,72):Z3(t,o)),72);return!0}u||(r=Z3(t,e.Kc().Pb()),c.Fc(r))}return pX(n,c)}function Hqn(n,t){var i,r,c,a,u,o,s;for(s=new YT,o=new Kb(new Ob(n.c).a.vc().Kc());o.a.Ob();)c=BB(o.a.Pb(),42),0==(a=BB(c.dd(),458)).b&&r5(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=BB(0==s.b?null:(Px(0!=s.b),Atn(s,s.a.a)),458)).a&&(a.a=0),r=new Wb(a.d);r.a<r.c.c.length;)null==(i=BB(n0(r),654)).b.a?i.b.a=Gy(a.a)+i.a:t.o==(oZ(),ryt)?i.b.a=e.Math.min(Gy(i.b.a),Gy(a.a)+i.a):i.b.a=e.Math.max(Gy(i.b.a),Gy(a.a)+i.a),--i.b.b,0==i.b.b&&DH(s,i.b);for(u=new Kb(new Ob(n.c).a.vc().Kc());u.a.Ob();)c=BB(u.a.Pb(),42),a=BB(c.dd(),458),t.i[a.c.p]=a.a}function qqn(){qqn=O,skt=new up(OZn),new up(AZn),new iR("DEPTH",iln(0)),ikt=new iR("FAN",iln(0)),tkt=new iR(U3n,iln(0)),dkt=new iR("ROOT",(hN(),!1)),ckt=new iR("LEFTNEIGHBOR",null),bkt=new iR("RIGHTNEIGHBOR",null),akt=new iR("LEFTSIBLING",null),wkt=new iR("RIGHTSIBLING",null),ekt=new iR("DUMMY",!1),new iR("LEVEL",iln(0)),lkt=new iR("REMOVABLE_EDGES",new YT),gkt=new iR("XCOOR",iln(0)),pkt=new iR("YCOOR",iln(0)),ukt=new iR("LEVELHEIGHT",0),rkt=new iR("ID",""),hkt=new iR("POSITION",iln(0)),fkt=new iR("PRELIM",0),okt=new iR("MODIFIER",0),nkt=new up($Zn),Zyt=new up(LZn)}function Gqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Wb(t.j);w.a<w.c.c.length;){if(b=BB(n0(w),11),c=Aon(Pun(Gk(PMt,1),sVn,8,0,[b.i.n,b.n,b.a])),t.k==(uSn(),Cut)&&(o=BB(mMn(b,(hWn(),dlt)),11),c.a=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).a,t.n.a=c.a),u=new xI(0,c.b),b.j==(kUn(),oCt))u.a=f;else{if(b.j!=ICt)continue;u.a=i}if(!(e.Math.abs(c.a-u.a)<=r)||Nkn(t))for(a=b.g.c.length+b.e.c.length>1,h=new m6(b.b);y$(h.a)||y$(h.b);)l=(s=BB(y$(h.a)?n0(h.a):n0(h.b),17)).c==b?s.d:s.c,e.Math.abs(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).b-u.b)>1&&pxn(n,s,u,a,b)}}function zqn(n){var t,i,r,c,a,u;if(c=new M2(n.e,0),r=new M2(n.a,0),n.d)for(i=0;i<n.b;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);for(t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++))));n.f-t>D3n;){for(a=t,u=0;e.Math.abs(t-a)<D3n;)++u,t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++)))),Px(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);u<n.b&&(Px(c.b>0),c.a.Xb(c.c=--c.b),DFn(n,n.b-u,a,r,c),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),Px(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);n.d=!0,n.c=!0}function Uqn(){Uqn=O,pLt=(cE(),gLt).b,yLt=BB(Wtn(QQ(gLt.b),0),34),vLt=BB(Wtn(QQ(gLt.b),1),34),mLt=BB(Wtn(QQ(gLt.b),2),34),OLt=gLt.bb,BB(Wtn(QQ(gLt.bb),0),34),BB(Wtn(QQ(gLt.bb),1),34),$Lt=gLt.fb,LLt=BB(Wtn(QQ(gLt.fb),0),34),BB(Wtn(QQ(gLt.fb),1),34),BB(Wtn(QQ(gLt.fb),2),18),xLt=gLt.qb,KLt=BB(Wtn(QQ(gLt.qb),0),34),BB(Wtn(QQ(gLt.qb),1),18),BB(Wtn(QQ(gLt.qb),2),18),DLt=BB(Wtn(QQ(gLt.qb),3),34),RLt=BB(Wtn(QQ(gLt.qb),4),34),FLt=BB(Wtn(QQ(gLt.qb),6),34),_Lt=BB(Wtn(QQ(gLt.qb),5),18),kLt=gLt.j,jLt=gLt.k,ELt=gLt.q,TLt=gLt.w,MLt=gLt.B,SLt=gLt.A,PLt=gLt.C,ILt=gLt.D,CLt=gLt._,ALt=gLt.cb,NLt=gLt.hb}function Xqn(n,t,i){var r,c,a,u,o,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,u=(s=BB(h.Pb(),11)).j==(kUn(),sCt)||s.j==SCt){if(!(f=BB(mMn(s,(hWn(),Elt)),10)))continue;l+=iRn(n,r,s,f)}else{for(o=new Wb(s.g);o.a<o.c.c.length;){if((c=BB(n0(o),17).d).i.c==t.c){WB(n.a,s);continue n}l+=n.g[c.p]}for(a=new Wb(s.e);a.a<a.c.c.length;){if((c=BB(n0(a),17).c).i.c==t.c){WB(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):u&&(n.f[s.p]=l)}}function Wqn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function Vqn(n,t,e){var i,r;for(OTn(e,"Graph transformation ("+n.a+")",1),r=a0(t.a),i=new Wb(t.b);i.a<i.c.c.length;)gun(r,BB(n0(i),29).a);if(BB(mMn(t,(HXn(),Xdt)),419)==(_nn(),Sht))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r);break;case 3:bdn(t,r);break;case 4:n.a==(Srn(),qut)?(bdn(t,r),$2(t,r)):($2(t,r),bdn(t,r))}else if(n.a==(Srn(),qut))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:bdn(t,r),L2(t,r);break;case 4:L2(t,r),bdn(t,r)}else switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:L2(t,r),bdn(t,r);break;case 4:bdn(t,r),L2(t,r)}HSn(e)}function Qqn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w;for(o=new fA,s=new fA,b=new fA,w=new fA,u=Gy(MD(mMn(t,(HXn(),Opt)))),r=Gy(MD(mMn(t,ypt))),a=new Wb(e);a.a<a.c.c.length;)if(c=BB(n0(a),10),(f=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sCt))for(s.a.zc(c,s),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(o,BB(U5(i),17).c.i);else if(f==SCt)for(w.a.zc(c,w),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(b,BB(U5(i),17).c.i);0!=o.a.gc()&&(l=AGn(new fX(2,r),t,o,s,-u-t.c.b))>0&&(n.a=u+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=AGn(new fX(1,r),t,b,w,t.f.b+u-t.c.b))>0&&(t.f.b+=u+(l-1)*r)}function Yqn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,Dsn(n,null)):(n.F=(kW(t),t),-1!=(i=GO(t,YTn(60)))?(r=t.substr(0,i),-1==GO(t,YTn(46))&&!mK(r,$Wn)&&!mK(r,S9n)&&!mK(r,P9n)&&!mK(r,I9n)&&!mK(r,C9n)&&!mK(r,O9n)&&!mK(r,A9n)&&!mK(r,$9n)&&(r=L9n),-1!=(e=mN(t,YTn(62)))&&(r+=""+t.substr(e+1)),Dsn(n,r)):(r=t,-1==GO(t,YTn(46))&&(-1!=(i=GO(t,YTn(91)))&&(r=t.substr(0,i)),mK(r,$Wn)||mK(r,S9n)||mK(r,P9n)||mK(r,I9n)||mK(r,C9n)||mK(r,O9n)||mK(r,A9n)||mK(r,$9n)?r=t:(r=L9n,-1!=i&&(r+=""+t.substr(i)))),Dsn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,c,t))}function Jqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(!((d=t.b.c.length)<3)){for(b=x8(ANt,hQn,25,d,15,1),f=0,h=new Wb(t.b);h.a<h.c.c.length;)s=BB(n0(h),29),b[f++]=s.a.c.length;for(l=new M2(t.b,2),i=1;i<d-1;i++)for(Px(l.b<l.d.gc()),w=new Wb((e=BB(l.d.Xb(l.c=l.b++),29)).a),c=0,u=0,o=0;o<b[i+1];o++)if(m=BB(n0(w),10),o==b[i+1]-1||YSn(n,m,i+1,i)){for(a=b[i]-1,YSn(n,m,i+1,i)&&(a=n.c.e[BB(BB(BB(xq(n.c.b,m.p),15).Xb(0),46).a,10).p]);u<=o;){if(!YSn(n,v=BB(xq(e.a,u),10),i+1,i))for(p=BB(xq(n.c.b,v.p),15).Kc();p.Ob();)g=BB(p.Pb(),46),((r=n.c.e[BB(g.a,10).p])<c||r>a)&&TU(n.b,BB(g.b,17));++u}c=a}}}function Zqn(n,t){var e;if(null==t||mK(t,zWn))return null;if(0==t.length&&n.k!=(PPn(),pMt))return null;switch(n.k.g){case 1:return mgn(t,a5n)?(hN(),vtt):mgn(t,u5n)?(hN(),ptt):null;case 2:try{return iln(l_n(t,_Vn,DWn))}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 4:try{return bSn(t)}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 3:return t;case 5:return rhn(n),HCn(n,t);case 6:return rhn(n),K$n(n,n.a,t);case 7:try{return(e=rAn(n)).Jf(t),e}catch(i){if(cL(i=lun(i),32))return null;throw Hp(i)}default:throw Hp(new Fy("Invalid type set for this layout option."))}}function nGn(n){var t,e,i,r,c,a,u;for(Dnn(),u=new Vv,e=new Wb(n);e.a<e.c.c.length;)t=BB(n0(e),140),(!u.b||t.c>=u.b.c)&&(u.b=t),(!u.c||t.c<=u.c.c)&&(u.d=u.c,u.c=t),(!u.e||t.d>=u.e.d)&&(u.e=t),(!u.f||t.d<=u.f.d)&&(u.f=t);return i=new Tpn((Aun(),Zat)),i2(n,out,new Jy(Pun(Gk(Jat,1),HWn,369,0,[i]))),a=new Tpn(eut),i2(n,uut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[a]))),r=new Tpn(nut),i2(n,aut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[r]))),c=new Tpn(tut),i2(n,cut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[c]))),xLn(i.c,Zat),xLn(r.c,nut),xLn(c.c,tut),xLn(a.c,eut),u.a.c=x8(Ant,HWn,1,0,5,1),gun(u.a,i.c),gun(u.a,ean(r.c)),gun(u.a,c.c),gun(u.a,ean(a.c)),u}function tGn(n){var t;switch(n.d){case 1:if(n.hj())return-2!=n.o;break;case 2:if(n.hj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.gj(),n.p){case 0:return null!=t&&qy(TD(t))!=JC(n.k,0);case 1:return null!=t&&BB(t,217).a!=dG(n.k)<<24>>24;case 2:return null!=t&&BB(t,172).a!=(dG(n.k)&QVn);case 6:return null!=t&&JC(BB(t,162).a,n.k);case 5:return null!=t&&BB(t,19).a!=dG(n.k);case 7:return null!=t&&BB(t,184).a!=dG(n.k)<<16>>16;case 3:return null!=t&&Gy(MD(t))!=n.j;case 4:return null!=t&&BB(t,155).a!=n.j;default:return null==t?null!=n.n:!Nfn(t,n.n)}}function eGn(n,t,e){var i,r,c,a;return n.Fk()&&n.Ek()&&GC(a=Gz(n,BB(e,56)))!==GC(e)?(n.Oi(t),n.Ui(t,B9(n,t,a)),n.rk()&&(r=BB(e,49),c=n.Dk()?n.Bk()?r.ih(n.b,Ivn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),null):r.ih(n.b,Awn(r.Tg(),Ivn(BB(itn(jY(n.b),n.aj()),18))),null,null):r.ih(n.b,-1-n.aj(),null,null),!BB(a,49).eh()&&(i=BB(a,49),c=n.Dk()?n.Bk()?i.gh(n.b,Ivn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),c):i.gh(n.b,Awn(i.Tg(),Ivn(BB(itn(jY(n.b),n.aj()),18))),null,c):i.gh(n.b,-1-n.aj(),null,c)),c&&c.Fi()),mA(n.b)&&n.$i(n.Zi(9,e,a,t,!1)),a):e}function iGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(f=Gy(MD(mMn(n,(HXn(),Ept)))),r=Gy(MD(mMn(n,Rpt))),hon(b=new Yu,Ept,f+r),v=(h=t).d,g=h.c.i,m=h.d.i,p=tA(g.c),y=tA(m.c),c=new Np,l=p;l<=y;l++)Bl(o=new $vn(n),(uSn(),Put)),hon(o,(hWn(),dlt),h),hon(o,ept,(QEn(),XIt)),hon(o,Mpt,b),w=BB(xq(n.b,l),29),l==p?Qyn(o,w.a.c.length-i,w):PZ(o,w),(k=Gy(MD(mMn(h,agt))))<0&&hon(h,agt,k=0),o.o.b=k,d=e.Math.floor(k/2),qIn(u=new ISn,(kUn(),ICt)),IZ(u,o),u.n.b=d,qIn(s=new ISn,oCt),IZ(s,o),s.n.b=d,MZ(h,u),qan(a=new wY,h),hon(a,vgt,null),SZ(a,s),MZ(a,v),zkn(o,h,a),c.c[c.c.length]=a,h=a;return c}function rGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(u=BB(DSn(n,(kUn(),ICt)).Kc().Pb(),11).e,f=BB(DSn(n,oCt).Kc().Pb(),11).g,a=u.c.length,g=g1(BB(xq(n.j,0),11));a-- >0;){for(l1(0,u.c.length),b=BB(u.c[0],17),l1(0,f.c.length),r=E7((i=BB(f.c[0],17)).d.e,i,0),A2(b,i.d,r),SZ(i,null),MZ(i,null),l=b.a,t&&DH(l,new wA(g)),e=spn(i.a,0);e.b!=e.d.c;)DH(l,new wA(BB(b3(e),8)));for(d=b.b,h=new Wb(i.b);h.a<h.c.c.length;)s=BB(n0(h),70),d.c[d.c.length]=s;if(w=BB(mMn(b,(HXn(),vgt)),74),c=BB(mMn(i,vgt),74))for(w||(w=new km,hon(b,vgt,w)),o=spn(c,0);o.b!=o.d.c;)DH(w,new wA(BB(b3(o),8)))}}function cGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((lCn(),eCt)),u=0,o=s.Kc(),f=null,l=0,b=0;o.Ob();)c=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),a=r.b.rf().a,n.A.Hc((mdn(),_Ct))&&yRn(n,t),f?(w=b+f.d.c+n.w+r.d.b,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-c)<=fJn||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(u=e.Math.max(u,lcn(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-1)<=fJn||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=u}function aGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((lCn(),eCt)),u=0,n.A.Hc((mdn(),_Ct))&&kRn(n,t),o=s.Kc(),f=null,b=0,l=0;o.Ob();)a=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),c=r.b.rf().b,f?(w=l+f.d.a+n.w+r.d.d,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-a)<=fJn||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(u=e.Math.max(u,lcn(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-1)<=fJn||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=u}function uGn(n,t,e){var i,r,c,a,u,o;for(this.g=n,u=t.d.length,o=e.d.length,this.d=x8(Out,a1n,10,u+o,0,1),a=0;a<u;a++)this.d[a]=t.d[a];for(c=0;c<o;c++)this.d[u+c]=e.d[c];if(t.e){if(this.e=zB(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=BB(r.Pb(),233))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=zB(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Jtn(this,this.f/this.a):null!=lL(t.g,t.d[0]).a&&null!=lL(e.g,e.d[0]).a?Jtn(this,(Gy(lL(t.g,t.d[0]).a)+Gy(lL(e.g,e.d[0]).a))/2):null!=lL(t.g,t.d[0]).a?Jtn(this,lL(t.g,t.d[0]).a):null!=lL(e.g,e.d[0]).a&&Jtn(this,lL(e.g,e.d[0]).a)}function oGn(n,t){var e,i,r,c,a,u,o,s,h;for(n.a=new BX($cn(WPt)),i=new Wb(t.a);i.a<i.c.c.length;){for(e=BB(n0(i),841),a=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),WB(n.a.a,a),o=new Wb(e.d);o.a<o.c.c.length;)FGn(s=new NN(n,u=BB(n0(o),110)),BB(mMn(e.c,(hWn(),Xft)),21)),hU(n.g,e)||(VW(n.g,e,new xI(u.c,u.d)),VW(n.f,e,s)),WB(n.a.b,s),g2(a,s);for(c=new Wb(e.b);c.a<c.c.c.length;)s=new NN(n,(r=BB(n0(c),594)).kf()),VW(n.b,r,new rC(a,s)),FGn(s,BB(mMn(e.c,(hWn(),Xft)),21)),r.hf()&&(FGn(h=new Sgn(n,r.hf(),1),BB(mMn(e.c,Xft),21)),g2(new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),h),JCn(n.c,r.gf(),new rC(a,h)))}return n.a}function sGn(n){var t;this.a=n,t=(uSn(),Pun(Gk($ut,1),$Vn,267,0,[Iut,Put,Mut,Cut,Sut,Tut])).length,this.b=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),this.c=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),FY(this,Iut,(HXn(),Opt),Apt),tun(this,Iut,Put,Ept,Tpt),_Y(this,Iut,Cut,Ept),_Y(this,Iut,Mut,Ept),tun(this,Iut,Sut,Opt,Apt),FY(this,Put,ypt,kpt),_Y(this,Put,Cut,ypt),_Y(this,Put,Mut,ypt),tun(this,Put,Sut,Ept,Tpt),ZA(this,Cut,ypt),_Y(this,Cut,Mut,ypt),_Y(this,Cut,Sut,Ppt),ZA(this,Mut,Npt),tun(this,Mut,Sut,Cpt,Ipt),FY(this,Sut,ypt,ypt),FY(this,Tut,ypt,kpt),tun(this,Tut,Iut,Ept,Tpt),tun(this,Tut,Sut,Ept,Tpt),tun(this,Tut,Put,Ept,Tpt)}function hGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(cL(a=e.ak(),99)&&0!=(BB(a,18).Bb&BQn)&&(l=BB(e.dd(),49),(d=tfn(n.e,l))!=l)){if(jL(n,t,sTn(n,t,h=Z3(a,d))),f=null,mA(n.e)&&(i=Fqn((CPn(),Z$t),n.e.Tg(),a))!=itn(n.e.Tg(),n.c)){for(g=axn(n.e.Tg(),a),u=0,c=BB(n.g,119),o=0;o<t;++o)r=c[o],g.rl(r.ak())&&++u;(f=new b4(n.e,9,i,l,d,u,!1)).Ei(new N7(n.e,9,n.c,e,h,t,!1))}return(b=Ivn(w=BB(a,18)))?(f=l.ih(n.e,Awn(l.Tg(),b),null,f),f=BB(d,49).gh(n.e,Awn(d.Tg(),b),null,f)):0!=(w.Bb&h6n)&&(s=-1-Awn(n.e.Tg(),w),f=l.ih(n.e,s,null,null),!BB(d,49).eh()&&(f=BB(d,49).gh(n.e,s,null,f))),f&&f.Fi(),h}return e}function fGn(n){var t,i,r,c,a,u,o,s;for(a=new Wb(n.a.b);a.a<a.c.c.length;)(c=BB(n0(a),81)).b.c=c.g.c,c.b.d=c.g.d;for(s=new xI(RQn,RQn),t=new xI(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(o=TX(n.c).a.nc();o.Ob();)u=BB(o.Pb(),46),i=BB(u.b,81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=qx(new xI(s.a,s.b)),n.e=XR(new xI(t.a,t.b),s),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1)}function lGn(n){var t,e,i;for(ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Nf])),e=new Tl(n),i=0;i<e.a.length;++i)mK(t=dnn(e,i).je().a,"layered")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new hf])):mK(t,"force")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new zh])):mK(t,"stress")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Xh])):mK(t,"mrtree")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Pf])):mK(t,"radial")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new yf])):mK(t,"disco")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Gh,new Hh])):mK(t,"sporeOverlap")||mK(t,"sporeCompaction")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Tf])):mK(t,"rectpacking")&&ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Of]))}function bGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=new wA(n.o),p=t.a/l.a,u=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=GC(mMn(n,(HXn(),ept)))===GC((QEn(),XIt)),w=new Wb(n.j);w.a<w.c.c.length;)switch((b=BB(n0(w),11)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=u);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=u)}for(s=new Wb(n.b);s.a<s.c.c.length;)h=(o=BB(n0(s),70)).n.a+o.o.a/2,f=o.n.b+o.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(o.n.a+=d,o.n.b+=c*a):g-a<0&&h>=0&&(o.n.a+=d*g,o.n.b+=c));n.o.a=t.a,n.o.b=t.b,hon(n,(HXn(),Fgt),(mdn(),new YK(i=BB(Vj(YCt),9),BB(SR(i,i.length),9),0)))}function wGn(n,t,e,i,r,c){if(null!=t&&Xbn(t,AAt,$At))throw Hp(new _y("invalid scheme: "+t));if(!(n||null!=e&&-1==GO(e,YTn(35))&&e.length>0&&(b1(0,e.length),47!=e.charCodeAt(0))))throw Hp(new _y("invalid opaquePart: "+e));if(n&&(null==t||!xT(jAt,t.toLowerCase()))&&null!=e&&Xbn(e,LAt,NAt))throw Hp(new _y(o9n+e));if(n&&null!=t&&xT(jAt,t.toLowerCase())&&!IEn(e))throw Hp(new _y(o9n+e));if(!Ubn(i))throw Hp(new _y("invalid device: "+i));if(!Rhn(r))throw Hp(new _y(null==r?"invalid segments: null":"invalid segment: "+shn(r)));if(null!=c&&-1!=GO(c,YTn(35)))throw Hp(new _y("invalid query: "+c))}function dGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(t,"Calculate Graph Size",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),o=ZJn,s=ZJn,a=n4n,u=n4n,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)d=(h=BB(kpn(l),33)).i,g=h.j,v=h.g,r=h.f,c=BB(ZAn(h,(sWn(),$St)),142),o=e.Math.min(o,d-c.b),s=e.Math.min(s,g-c.d),a=e.Math.max(a,d+v+c.c),u=e.Math.max(u,g+r+c.a);for(b=new xI(o-(w=BB(ZAn(n,(sWn(),XSt)),116)).b,s-w.d),f=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));f.e!=f.i.gc();)Pen(h=BB(kpn(f),33),h.i-b.a),Ien(h,h.j-b.b);p=a-o+(w.b+w.c),i=u-s+(w.d+w.a),Sen(n,p),Men(n,i),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function gGn(n){var t,e,i,r,c,a,u,o,s,h;for(i=new Np,a=new Wb(n.e.a);a.a<a.c.c.length;){for(h=0,(r=BB(n0(a),121)).k.c=x8(Ant,HWn,1,0,5,1),e=new Wb(kbn(r));e.a<e.c.c.length;)(t=BB(n0(e),213)).f&&(WB(r.k,t),++h);1==h&&(i.c[i.c.length]=r)}for(c=new Wb(i);c.a<c.c.c.length;)for(r=BB(n0(c),121);1==r.k.c.length;){for(s=BB(n0(new Wb(r.k)),213),n.b[s.c]=s.g,u=s.d,o=s.e,e=new Wb(kbn(r));e.a<e.c.c.length;)Nfn(t=BB(n0(e),213),s)||(t.f?u==t.d||o==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==u?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);y7(u.k,s),y7(o.k,s),r=u==r?s.e:s.d}}function pGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=BB(SJ(n.f,t),23))){for(r=new Kb(new Ob(n.d).a.vc().Kc());r.a.Ob();)if(a=BB(r.a.Pb(),42),u=(e=BB(a.dd(),23)).f,l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new Kb(new Ob(n.d).a.vc().Kc());i.a.Ob();)if(a=BB(i.a.Pb(),42),null!=(f=(e=BB(a.dd(),23)).g))for(s=0,h=(o=f).length;s<h;++s)if(u=o[s],l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}c&&mZ(n.f,t,c)}return c}function vGn(n,t){var e,i,r,c,a;for(e=new Ck,a=!1,c=0;c<t.length;c++)if(b1(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):GO("GyMLdkHmsSEcDahKzZv",YTn(i))>0?(Ppn(n,e,0),e.a+=String.fromCharCode(i),Ppn(n,e,r=cgn(t,c)),c+=r-1):39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ppn(n,e,0),e.a+=" ",Ppn(n,e,0);c+1<t.length&&(b1(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ppn(n,e,0),pTn(n)}function mGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(OTn(i,"Network simplex layering",1),n.b=t,p=4*BB(mMn(t,(HXn(),xpt)),19).a,(g=n.b.a).c.length<1)HSn(i);else{for(d=null,c=spn(a=CKn(n,g),0);c.b!=c.d.c;){for(r=BB(b3(c),15),o=p*IJ(e.Math.sqrt(r.gc())),WKn(Qk(Jk(Yk(B_(u=o_n(r)),o),d),!0),mcn(i,1)),l=n.b.b,w=new Wb(u.a);w.a<w.c.c.length;){for(b=BB(n0(w),121);l.c.length<=b.e;)kG(l,l.c.length,new HX(n.b));PZ(BB(b.f,10),BB(xq(l,b.e),29))}if(a.b>1)for(d=x8(ANt,hQn,25,n.b.b.c.length,15,1),f=0,h=new Wb(n.b.b);h.a<h.c.c.length;)s=BB(n0(h),29),d[f++]=s.a.c.length}g.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,n.c=null,HSn(i)}}function yGn(n){var t,i,r,c,a,u,o;for(t=0,a=new Wb(n.b.a);a.a<a.c.c.length;)(r=BB(n0(a),189)).b=0,r.c=0;for(ESn(n,0),ewn(n,n.g),kNn(n.c),Zy(n.c),Ffn(),i=_Pt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Mzn(n.c,i)),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.g),kMn(n,0),pHn(n,0),M$n(n,1),ESn(n,1),ewn(n,n.d),kNn(n.c),u=new Wb(n.b.a);u.a<u.c.c.length;)r=BB(n0(u),189),t+=e.Math.abs(r.c);for(o=new Wb(n.b.a);o.a<o.c.c.length;)(r=BB(n0(o),189)).b=0,r.c=0;for(i=HPt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Zy(Mzn(n.c,i))),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.d),kMn(n,1),pHn(n,1),M$n(n,0),Zy(n.c),c=new Wb(n.b.a);c.a<c.c.c.length;)r=BB(n0(c),189),t+=e.Math.abs(r.c);return t}function kGn(n,t){var e,i,r,c,a,u,o,s,h;if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)i+=2;else if(c>=u&&r<=o)u<=r&&c<=o?(e[h++]=r,e[h++]=c,i+=2):u<=r?(e[h++]=r,e[h++]=o,n.b[i]=o+1,a+=2):c<=o?(e[h++]=u,e[h++]=c,i+=2):(e[h++]=u,e[h++]=o,n.b[i]=o+1);else{if(!(o<r))throw Hp(new dy("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}function jGn(n){var t,i,r,c,a,u,o;for(t=new Np,n.g=new Np,n.d=new Np,u=new usn(new Pb(n.f.b).a);u.b;)WB(t,BB(BB((a=ten(u)).dd(),46).b,81)),dA(BB(a.cd(),594).gf())?WB(n.d,BB(a.dd(),46)):WB(n.g,BB(a.dd(),46));for(ewn(n,n.d),ewn(n,n.g),n.c=new sOn(n.b),ej(n.c,(vM(),Gat)),Bln(n,n.d),Bln(n,n.g),gun(t,n.c.a.b),n.e=new xI(RQn,RQn),n.a=new xI(KQn,KQn),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),81),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);tj(n.c,new jt),o=0;do{c=yGn(n),++o}while((o<2||c>KVn)&&o<10);tj(n.c,new Et),yGn(n),CU(n.c),fGn(n.f)}function EGn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(qy(TD(mMn(e,(HXn(),wgt)))))for(r=new Wb(e.j);r.a<r.c.c.length;)for(u=0,o=(a=Z0(BB(n0(r),11).g)).length;u<o;++u)(c=a[u]).d.i==e&&qy(TD(mMn(c,dgt)))&&(h=c.c,(s=BB(RX(n.b,h),10))||(hon(s=bXn(h,(QEn(),QIt),h.j,-1,null,null,h.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),h),VW(n.b,h,s),WB(t.a,s)),l=c.d,(f=BB(RX(n.b,l),10))||(hon(f=bXn(l,(QEn(),QIt),l.j,1,null,null,l.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),l),VW(n.b,l,f),WB(t.a,f)),SZ(i=W5(c),BB(xq(s.j,0),11)),MZ(i,BB(xq(f.j,0),11)),JCn(n.a,c,new L_(i,t,(ain(),qvt))),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)))}function TGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Label dummy switching",1),i=BB(mMn(t,(HXn(),Vdt)),227),pcn(t),r=j$n(t,i),n.a=x8(xNt,qQn,25,t.b.c.length,15,1),$Pn(),h=0,b=(u=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;h<b;++h)if(((c=u[h])==eht||c==Yst||c==nht)&&!BB(SN(r.a,c)?r.b[c.g]:null,15).dc()){Zcn(n,t);break}for(f=0,w=(o=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;f<w;++f)(c=o[f])==eht||c==Yst||c==nht||GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;s<l;++s)((c=a[s])==eht||c==Yst||c==nht)&&GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));n.a=null,HSn(e)}function MGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;switch(n.k.g){case 1:if(i=BB(mMn(n,(hWn(),dlt)),17),(e=BB(mMn(i,glt),74))?qy(TD(mMn(i,Ilt)))&&(e=Jon(e)):e=new km,s=BB(mMn(n,hlt),11)){if(t<=(h=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;r5(e,h,e.a,e.a.a)}if(f=BB(mMn(n,flt),11)){if((l=Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;r5(e,l,e.c.b,e.c)}if(e.b>=2){for(a=BB(b3(o=spn(e,0)),8),u=BB(b3(o),8);u.a<t&&o.b!=o.d.c;)a=u,u=BB(b3(o),8);return a.b+(t-a.a)/(u.a-a.a)*(u.b-a.b)}break;case 3:switch(r=(c=BB(mMn(BB(xq(n.j,0),11),(hWn(),dlt)),11)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return Fjn(n).b}function SGn(n){var t,e,i,r,c,a,u,o,s,f;for(c=new Wb(n.d.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;)!qy(TD(mMn(a=BB(n0(u),10),(HXn(),Tdt))))||h3(hbn(a))?(r=new UV(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=ON(iM(tM(eM(new Wv,a),r),dst),n.a),CN(nM(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),t),n.a),o=new Dp,VW(n.e,t,o),(e=F3(new oz(ZL(fbn(a).a.Kc(),new h)))-F3(new oz(ZL(lbn(a).a.Kc(),new h))))<0?Uun(o,!0,(Ffn(),_Pt)):e>0&&Uun(o,!0,(Ffn(),FPt)),a.k==(uSn(),Mut)&&wV(o),VW(n.f,a,t)):((s=(i=BB(iY(hbn(a)),17)).c.i)==a&&(s=i.d.i),f=new rC(s,XR(B$(a.n),s.n)),VW(n.b,a,f))}function PGn(n,t,i){var r,c,a,u,o,s,h,f;switch(OTn(i,"Node promotion heuristic",1),n.g=t,yUn(n),n.q=BB(mMn(t,(HXn(),Sgt)),260),f=BB(mMn(n.g,Mgt),19).a,a=new hi,n.q.g){case 2:case 1:default:_Hn(n,a);break;case 3:for(n.q=(sNn(),Ovt),_Hn(n,a),s=0,o=new Wb(n.a);o.a<o.c.c.length;)u=BB(n0(o),19),s=e.Math.max(s,u.a);s>n.j&&(n.q=Tvt,_Hn(n,a));break;case 4:for(n.q=(sNn(),Ovt),_Hn(n,a),h=0,c=new Wb(n.b);c.a<c.c.c.length;)r=MD(n0(c)),h=e.Math.max(h,(kW(r),r));h>n.k&&(n.q=Pvt,_Hn(n,a));break;case 6:_Hn(n,new od(IJ(e.Math.ceil(n.f.length*f/100))));break;case 5:_Hn(n,new sd(IJ(e.Math.ceil(n.d*f/100))))}oDn(n,t),HSn(i)}function IGn(n,t,e){var i,r,c,a;this.j=n,this.e=qEn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?BB(xq(e,vW(this.o).p),214):null,r=BB(mMn(n,(hWn(),Zft)),21),this.g=r.Hc((bDn(),lft)),this.b=new Np,this.d=new wdn(this.e),a=BB(mMn(this.j,Slt),230),this.q=Han(t,a,this.e),this.k=new aZ(this),c=u6(Pun(Gk(jst,1),HWn,225,0,[this,this.d,this.k,this.q])),t!=(oin(),Omt)||qy(TD(mMn(n,(HXn(),xdt))))?t==Omt&&qy(TD(mMn(n,(HXn(),xdt))))?(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new prn(i,a,BB(this.q,402))):this.c=new vP(t,this):(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new G2(i,a,BB(this.q,402))),WB(c,this.c),IHn(c,this.e),this.s=wXn(this.k)}function CGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=(s=BB(iL(new wg(spn(new bg(t).a.d,0))),86))?BB(mMn(s,(qqn(),ckt)),86):null,r=1;s&&l;){for(a=0,v=0,e=s,i=l,c=0;c<r;c++)e=G8(e),i=G8(i),v+=Gy(MD(mMn(e,(qqn(),okt)))),a+=Gy(MD(mMn(i,okt)));if(p=Gy(MD(mMn(l,(qqn(),fkt)))),g=Gy(MD(mMn(s,fkt))),h=E5(s,l),0<(f=p+a+n.a+h-g-v)){for(u=t,o=0;u&&u!=i;)++o,u=BB(mMn(u,akt),86);if(!u)return;for(d=f/o,u=t;u!=i;)w=Gy(MD(mMn(u,fkt)))+f,hon(u,fkt,w),b=Gy(MD(mMn(u,okt)))+f,hon(u,okt,b),f-=d,u=BB(mMn(u,akt),86)}++r,l=(s=0==s.d.b?ZKn(new bg(t),r):BB(iL(new wg(spn(new bg(s).a.d,0))),86))?BB(mMn(s,ckt),86):null}}function OGn(n,t){var e,i,r,c,a,u,o,s,f;for(u=!0,r=0,o=n.f[t.p],s=t.o.b+n.n,e=n.c[t.p][2],c5(n.a,o,iln(BB(xq(n.a,o),19).a-1+e)),c5(n.b,o,Gy(MD(xq(n.b,o)))-s+e*n.e),++o>=n.i?(++n.i,WB(n.a,iln(1)),WB(n.b,s)):(i=n.c[t.p][1],c5(n.a,o,iln(BB(xq(n.a,o),19).a+1-i)),c5(n.b,o,Gy(MD(xq(n.b,o)))+s-i*n.e)),(n.q==(sNn(),Tvt)&&(BB(xq(n.a,o),19).a>n.j||BB(xq(n.a,o-1),19).a>n.j)||n.q==Pvt&&(Gy(MD(xq(n.b,o)))>n.k||Gy(MD(xq(n.b,o-1)))>n.k))&&(u=!1),c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)a=BB(U5(c),17).c.i,n.f[a.p]==o&&(r+=BB((f=OGn(n,a)).a,19).a,u=u&&qy(TD(f.b)));return n.f[t.p]=o,new rC(iln(r+=n.c[t.p][0]),(hN(),!!u))}function AGn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=new xp,u=new Np,rCn(n,i,n.d.fg(),u,l),rCn(n,r,n.d.gg(),u,l),n.b=.2*(g=BAn(wnn(new Rq(null,new w1(u,16)),new Sa)),p=BAn(wnn(new Rq(null,new w1(u,16)),new Pa)),e.Math.min(g,p)),a=0,o=0;o<u.c.length-1;o++)for(l1(o,u.c.length),s=BB(u.c[o],112),d=o+1;d<u.c.length;d++)a+=gHn(n,s,(l1(d,u.c.length),BB(u.c[d],112)));for(b=BB(mMn(t,(hWn(),Slt)),230),a>=2&&(v=QLn(u,!0,b),!n.e&&(n.e=new lg(n)),sgn(n.e,v,u,n.b)),iTn(u,b),czn(u),w=-1,f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),112),e.Math.abs(h.s-h.c)<lZn||(w=e.Math.max(w,h.o),n.d.dg(h,c,n.c));return n.d.a.a.$b(),w+1}function $Gn(n,t){var e,i;Gy(MD(mMn(t,(HXn(),ypt))))<2&&hon(t,ypt,2),BB(mMn(t,Udt),103)==(Ffn(),BPt)&&hon(t,Udt,Wln(t)),0==(e=BB(mMn(t,wpt),19)).a?hon(t,(hWn(),Slt),new sbn):hon(t,(hWn(),Slt),new I4(e.a)),null==TD(mMn(t,xgt))&&hon(t,xgt,(hN(),GC(mMn(t,Zdt))===GC((Mbn(),QPt)))),JT(new Rq(null,new w1(t.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(t.b,16)),new mt),new Kw(n)),i=new sGn(t),hon(t,(hWn(),Alt),i),h2(n.a),IU(n.a,(yMn(),Rat),BB(mMn(t,Gdt),246)),IU(n.a,Kat,BB(mMn(t,Pgt),246)),IU(n.a,_at,BB(mMn(t,qdt),246)),IU(n.a,Fat,BB(mMn(t,_gt),246)),IU(n.a,Bat,San(BB(mMn(t,Zdt),218))),aA(n.a,LXn(t)),hon(t,Mlt,$qn(n.a,t))}function LGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;return l=n.c[t],b=n.c[e],!((w=BB(mMn(l,(hWn(),clt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(uSn(),Put)&&b.k!=Put,v=(g=BB(mMn(l,rlt),10))!=(p=BB(mMn(b,rlt),10)),m=!!g&&g!=l||!!p&&p!=b,y=omn(l,(kUn(),sCt)),k=omn(b,SCt),m|=omn(l,SCt)||omn(b,sCt),d&&(m&&v||y||k))||l.k==(uSn(),Cut)&&b.k==Iut||b.k==(uSn(),Cut)&&l.k==Iut)&&(h=n.c[t],c=n.c[e],r=fjn(n.e,h,c,(kUn(),ICt)),o=fjn(n.i,h,c,oCt),TNn(n.f,h,c),s=Nsn(n.b,h,c)+BB(r.a,19).a+BB(o.a,19).a+n.f.d,u=Nsn(n.b,c,h)+BB(r.b,19).a+BB(o.b,19).a+n.f.b,n.a&&(f=BB(mMn(h,dlt),11),a=BB(mMn(c,dlt),11),s+=BB((i=qyn(n.g,f,a)).a,19).a,u+=BB(i.b,19).a),s>u)}function NGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(i=BB(mMn(n,(HXn(),ept)),98),u=n.f,a=n.d,o=u.a+a.b+a.c,s=0-a.d-n.c.b,f=u.b+a.d+a.a-n.c.b,h=new Np,l=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),10),i.g){case 1:case 2:case 3:_Nn(r);break;case 4:w=(b=BB(mMn(r,npt),8))?b.a:0,r.n.a=o*Gy(MD(mMn(r,(hWn(),Tlt))))-w,Jan(r,!0,!1);break;case 5:g=(d=BB(mMn(r,npt),8))?d.a:0,r.n.a=Gy(MD(mMn(r,(hWn(),Tlt))))-g,Jan(r,!0,!1),u.a=e.Math.max(u.a,r.n.a+r.o.a/2)}switch(BB(mMn(r,(hWn(),Qft)),61).g){case 1:r.n.b=s,h.c[h.c.length]=r;break;case 3:r.n.b=f,l.c[l.c.length]=r}}switch(i.g){case 1:case 2:Rfn(h,n),Rfn(l,n);break;case 3:Kfn(h,n),Kfn(l,n)}}function xGn(n,t){var e,i,r,c,a,u,o,s,h,f;for(h=new Np,f=new Lp,c=null,r=0,i=0;i<t.length;++i)switch(Rsn(c,e=t[i])&&(r=Idn(n,f,h,Kmt,r)),Lx(e,(hWn(),rlt))&&(c=BB(mMn(e,rlt),10)),e.k.g){case 0:for(o=qA(KB(abn(e,(kUn(),sCt)),new xc));Zin(o);)a=BB(P7(o),11),n.d[a.p]=r++,h.c[h.c.length]=a;for(r=Idn(n,f,h,Kmt,r),s=qA(KB(abn(e,SCt),new xc));Zin(s);)a=BB(P7(s),11),n.d[a.p]=r++,h.c[h.c.length]=a;break;case 3:abn(e,Rmt).dc()||(a=BB(abn(e,Rmt).Xb(0),11),n.d[a.p]=r++,h.c[h.c.length]=a),abn(e,Kmt).dc()||d3(f,e);break;case 1:for(u=abn(e,(kUn(),ICt)).Kc();u.Ob();)a=BB(u.Pb(),11),n.d[a.p]=r++,h.c[h.c.length]=a;abn(e,oCt).Jc(new ZP(f,e))}return Idn(n,f,h,Kmt,r),h}function DGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=RQn,f=RQn,o=KQn,s=KQn,b=new Wb(t.i);b.a<b.c.c.length;)l=BB(n0(b),65),SA(c=BB(BB(RX(n.g,l.a),46).b,33),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),o=e.Math.max(o,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=BB(ZAn(n.c,(MMn(),bTt)),116),KUn(n.c,o-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),lMn(n.c,-h+w.b,-f+w.d),r=new AL(iQ(n.c));r.e!=r.i.gc();)u=cDn(i=BB(kpn(r),79),!0,!0),d=PMn(i),p=OMn(i),g=new xI(d.i+d.g/2,d.j+d.f/2),a=new xI(p.i+p.g/2,p.j+p.f/2),Ukn(v=XR(new xI(a.a,a.b),g),d.g,d.f),UR(g,v),Ukn(m=XR(new xI(g.a,g.b),a),p.g,p.f),UR(a,m),IA(u,g.a,g.b),PA(u,a.a,a.b)}function RGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;if(n.c=n.d,l=null==(b=TD(mMn(t,(HXn(),dpt))))||(kW(b),b),c=BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft)),e=!((r=BB(mMn(t,ept),98))==(QEn(),UIt)||r==WIt||r==XIt),!l||!e&&c)f=new Jy(Pun(Gk(jut,1),JZn,37,0,[t]));else{for(h=new Wb(t.a);h.a<h.c.c.length;)BB(n0(h),10).p=0;for(f=new Np,s=new Wb(t.a);s.a<s.c.c.length;)if(i=L_n(n,BB(n0(s),10),null)){for(qan(o=new min,t),hon(o,Xft,BB(i.b,21)),kQ(o.d,t.d),hon(o,Hgt,null),u=BB(i.a,15).Kc();u.Ob();)a=BB(u.Pb(),10),WB(o.a,a),a.a=o;f.Fc(o)}c&&(GC(mMn(t,Idt))===GC((Bfn(),lut))?n.c=n.b:n.c=n.a)}return GC(mMn(t,Idt))!==GC((Bfn(),wut))&&(SQ(),f.ad(new xt)),f}function KGn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,Q3n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Na),Y3n),nbn((hAn(),JOt))))),u2(n,Q3n,QJn,Okt),u2(n,Q3n,vZn,20),u2(n,Q3n,VJn,dZn),u2(n,Q3n,pZn,iln(1)),u2(n,Q3n,kZn,(hN(),!0)),u2(n,Q3n,X2n,mpn(Ekt)),u2(n,Q3n,PZn,mpn(Mkt)),u2(n,Q3n,BZn,mpn(Skt)),u2(n,Q3n,SZn,mpn(Pkt)),u2(n,Q3n,IZn,mpn(Tkt)),u2(n,Q3n,MZn,mpn(Ikt)),u2(n,Q3n,CZn,mpn(Akt)),u2(n,Q3n,X3n,mpn(Dkt)),u2(n,Q3n,W3n,mpn(Lkt))}function _Gn(n){n.q||(n.q=!0,n.p=kan(n,0),n.a=kan(n,1),Krn(n.a,0),n.f=kan(n,2),Krn(n.f,1),Rrn(n.f,2),n.n=kan(n,3),Rrn(n.n,3),Rrn(n.n,4),Rrn(n.n,5),Rrn(n.n,6),n.g=kan(n,4),Krn(n.g,7),Rrn(n.g,8),n.c=kan(n,5),Krn(n.c,7),Krn(n.c,8),n.i=kan(n,6),Krn(n.i,9),Krn(n.i,10),Krn(n.i,11),Krn(n.i,12),Rrn(n.i,13),n.j=kan(n,7),Krn(n.j,9),n.d=kan(n,8),Krn(n.d,3),Krn(n.d,4),Krn(n.d,5),Krn(n.d,6),Rrn(n.d,7),Rrn(n.d,8),Rrn(n.d,9),Rrn(n.d,10),n.b=kan(n,9),Rrn(n.b,0),Rrn(n.b,1),n.e=kan(n,10),Rrn(n.e,1),Rrn(n.e,2),Rrn(n.e,3),Rrn(n.e,4),Krn(n.e,5),Krn(n.e,6),Krn(n.e,7),Krn(n.e,8),Krn(n.e,9),Krn(n.e,10),Rrn(n.e,11),n.k=kan(n,11),Rrn(n.k,0),Rrn(n.k,1),n.o=jan(n,12),n.s=jan(n,13))}function FGn(n,t){t.dc()&&eH(n.j,!0,!0,!0,!0),Nfn(t,(kUn(),dCt))&&eH(n.j,!0,!0,!0,!1),Nfn(t,hCt)&&eH(n.j,!1,!0,!0,!0),Nfn(t,ECt)&&eH(n.j,!0,!0,!1,!0),Nfn(t,MCt)&&eH(n.j,!0,!1,!0,!0),Nfn(t,gCt)&&eH(n.j,!1,!0,!0,!1),Nfn(t,fCt)&&eH(n.j,!1,!0,!1,!0),Nfn(t,TCt)&&eH(n.j,!0,!1,!1,!0),Nfn(t,jCt)&&eH(n.j,!0,!1,!0,!1),Nfn(t,yCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,bCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,yCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,lCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,kCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,mCt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,vCt)&&eH(n.j,!0,!0,!0,!0)}function BGn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(c=new Np,s=new Wb(i);s.a<s.c.c.length;)if(a=null,(u=BB(n0(s),441)).f==(ain(),qvt))for(w=new Wb(u.e);w.a<w.c.c.length;)vW(g=(b=BB(n0(w),17)).d.i)==t?Stn(n,t,u,b,u.b,b.d):!e||wan(g,e)?GMn(n,t,u,i,b):((l=LHn(n,t,e,b,u.b,qvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l));else for(f=new Wb(u.e);f.a<f.c.c.length;)if(vW(d=(h=BB(n0(f),17)).c.i)==t)Stn(n,t,u,h,h.c,u.b);else{if(!e||wan(d,e))continue;(l=LHn(n,t,e,h,u.b,Hvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l)}for(o=new Wb(c);o.a<o.c.c.length;)u=BB(n0(o),441),-1!=E7(t.a,u.a,0)||WB(t.a,u.a),u.c&&(r.c[r.c.length]=u)}function HGn(n,t,e){var i,r,c,a,u,o,s,h;for(o=new Np,u=new Wb(t.a);u.a<u.c.c.length;)for(h=abn(BB(n0(u),10),(kUn(),oCt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).g);r.a<r.c.c.length;)!b5(i=BB(n0(r),17))&&i.c.i.c==i.d.i.c||b5(i)||i.d.i.c!=e||(o.c[o.c.length]=i);for(a=ean(e.a).Kc();a.Ob();)for(h=abn(BB(a.Pb(),10),(kUn(),ICt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).e);r.a<r.c.c.length;)if((b5(i=BB(n0(r),17))||i.c.i.c!=i.d.i.c)&&!b5(i)&&i.c.i.c==t){for(Px((s=new M2(o,o.c.length)).b>0),c=BB(s.a.Xb(s.c=--s.b),17);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,Px(s.b>0),c=BB(s.a.Xb(s.c=--s.b),17);s.b>0&&fW(s)}}function qGn(n,t,e){var i,r,c,a,u,o,s,h,f;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(i=Ifn((CPn(),Z$t),t).$k())return i.Aj().Nh().Ih(i,e);if(a=Ifn(Z$t,t).al()){if(null==e)return null;if((u=BB(e,15)).dc())return"";for(f=new Sk,c=u.Kc();c.Ob();)r=c.Pb(),cO(f,a.Aj().Nh().Ih(a,r)),f.a+=" ";return KO(f,f.a.length-1)}if(!(h=Ifn(Z$t,t).bl()).dc()){for(s=h.Kc();s.Ob();)if((o=BB(s.Pb(),148)).wj(e))try{if(null!=(f=o.Aj().Nh().Ih(o,e)))return f}catch(l){if(!cL(l=lun(l),102))throw Hp(l)}throw Hp(new _y("Invalid value: '"+e+"' for datatype :"+t.ne()))}return BB(t,834).Fj(),null==e?null:cL(e,172)?""+BB(e,172).a:tsn(e)==mtt?H$(COt[0],BB(e,199)):Bbn(e)}function GGn(n){var t,i,r,c,a,u,o,s,h;for(s=new YT,u=new YT,c=new Wb(n);c.a<c.c.c.length;)(i=BB(n0(c),128)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&r5(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&r5(u,i,u.c.b,u.c);for(a=-1;0!=s.b;)for(t=new Wb((i=BB(tkn(s,0),128)).t);t.a<t.c.c.length;)(h=BB(n0(t),268).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&r5(s,h,s.c.b,s.c);if(a>-1){for(r=spn(u,0);r.b!=r.d.c;)(i=BB(b3(r),128)).v=a;for(;0!=u.b;)for(t=new Wb((i=BB(tkn(u,0),128)).i);t.a<t.c.c.length;)0==(o=BB(n0(t),268).a).r.a.gc()&&(o.v=e.Math.min(o.v,i.v-1),--o.u,0==o.u&&r5(u,o,u.c.b,u.c))}}function zGn(n,t,i,r,c){var a,u,o,s;return s=RQn,u=!1,a=!!(o=zBn(n,XR(new xI(t.a,t.b),n),UR(new xI(i.a,i.b),c),XR(new xI(r.a,r.b),i)))&&!(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n||e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n),(o=zBn(n,XR(new xI(t.a,t.b),n),i,c))&&((e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a?s=e.Math.min(s,lW(XR(o,i))):u=!0),(o=zBn(n,XR(new xI(t.a,t.b),n),r,c))&&(u||(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a)&&(s=e.Math.min(s,lW(XR(o,r)))),s}function UGn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,_Zn),FZn),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),gZn))),u2(n,_Zn,jZn,mpn(kat)),u2(n,_Zn,TZn,(hN(),!0)),u2(n,_Zn,PZn,mpn(Tat)),u2(n,_Zn,BZn,mpn(Mat)),u2(n,_Zn,SZn,mpn(Sat)),u2(n,_Zn,IZn,mpn(Eat)),u2(n,_Zn,MZn,mpn(Pat)),u2(n,_Zn,CZn,mpn(Iat)),u2(n,_Zn,NZn,mpn(yat)),u2(n,_Zn,DZn,mpn(vat)),u2(n,_Zn,RZn,mpn(mat)),u2(n,_Zn,KZn,mpn(jat)),u2(n,_Zn,xZn,mpn(pat))}function XGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Interactive crossing minimization",1),a=0,c=new Wb(n.b);c.a<c.c.c.length;)(i=BB(n0(c),29)).p=a++;for(d=new Rj((l=qEn(n)).length),IHn(new Jy(Pun(Gk(jst,1),HWn,225,0,[d])),l),w=0,a=0,r=new Wb(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Wb((i=BB(n0(r),29)).a);h.a<h.c.c.length;)for((o=BB(n0(h),10)).n.a>0&&(e+=o.n.a+o.o.a/2,++f),b=new Wb(o.j);b.a<b.c.c.length;)BB(n0(b),11).p=w++;for(f>0&&(e/=f),g=x8(xNt,qQn,25,i.a.c.length,15,1),u=0,s=new Wb(i.a);s.a<s.c.c.length;)(o=BB(n0(s),10)).p=u++,g[o.p]=MGn(o,e),o.k==(uSn(),Put)&&hon(o,(hWn(),plt),g[o.p]);SQ(),m$(i.a,new Gd(g)),r_n(d,l,a,!0),++a}HSn(t)}function WGn(n,t){var e,i,r,c,a,u,o,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=u&&r<=o)u<=r&&c<=o?i+=2:u<=r?(n.b[i]=o+1,a+=2):c<=o?(e[h++]=r,e[h++]=u-1,i+=2):(e[h++]=r,e[h++]=u-1,n.b[i]=o+1,a+=2);else{if(!(o<r))throw Hp(new dy("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}else kGn(n,t)}function VGn(n){var t,e,i,r,c,a,u;if(!n.A.dc()){if(n.A.Hc((mdn(),KCt))&&(BB(oV(n.b,(kUn(),sCt)),124).k=!0,BB(oV(n.b,SCt),124).k=!0,t=n.q!=(QEn(),WIt)&&n.q!=XIt,Nl(BB(oV(n.b,oCt),124),t),Nl(BB(oV(n.b,ICt),124),t),Nl(n.g,t),n.A.Hc(_Ct)&&(BB(oV(n.b,sCt),124).j=!0,BB(oV(n.b,SCt),124).j=!0,BB(oV(n.b,oCt),124).k=!0,BB(oV(n.b,ICt),124).k=!0,n.g.k=!0)),n.A.Hc(RCt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,u=n.B.Hc((n_n(),XCt)),c=0,a=(r=tpn()).length;c<a;++c)i=r[c],(e=BB(oV(n.i,i),306))&&(agn(i)?(e.j=!0,e.k=!0):(e.j=!u,e.k=!u));n.A.Hc(DCt)&&n.B.Hc((n_n(),UCt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function QGn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;for(e=new Wb(n.e.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),o=(f=n.i[i.p]).a.e,u=f.d.e,i.n.b=o,d=u-o-i.o.b,t=AHn(i),bvn(),h=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197),t&&(h==fvt||h==hvt)&&(i.o.b+=d),t&&(h==bvt||h==fvt||h==hvt)){for(b=new Wb(i.j);b.a<b.c.c.length;)l=BB(n0(b),11),(kUn(),bCt).Hc(l.j)&&(s=BB(RX(n.k,l),121),l.n.b=s.e-o);for(a=new Wb(i.b);a.a<a.c.c.length;)c=BB(n0(a),70),(w=BB(mMn(i,$gt),21)).Hc((n$n(),NIt))?c.n.b+=d:w.Hc(xIt)&&(c.n.b+=d/2);(h==fvt||h==hvt)&&abn(i,(kUn(),SCt)).Jc(new ag(d))}}function YGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(o=new H8(null,null)).a[1]=n.b,f=o;f.a[r];)s=r,u=l,l=f,f=f.a[r],r=(i=n.a.ue(t,f.d))<0?0:1,0==i&&(!e.c||cV(f.e,e.d))&&(a=f),f&&f.b||Vy(f.a[r])||(Vy(f.a[1-r])?l=l.a[s]=wrn(f,r):Vy(f.a[1-r])||(b=l.a[1-s])&&(Vy(b.a[1-s])||Vy(b.a[s])?(c=u.a[1]==l?1:0,Vy(b.a[s])?u.a[c]=r2(l,s):Vy(b.a[1-s])&&(u.a[c]=wrn(l,s)),f.b=u.a[c].b=!0,u.a[c].a[0].b=!1,u.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(bMn(n,o,a,h=new H8(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=o.a[1],n.b&&(n.b.b=!1),e.b}function JGn(n){var t,i,r,c,a,u,o,s,h,f,l,b;for(c=new Wb(n.a.a.b);c.a<c.c.c.length;)for(s=(r=BB(n0(c),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),r.a!=o.a&&(l=dA(n.a.d)?n.a.g.Oe(r,o):n.a.g.Pe(r,o),a=r.b.a+r.d.b+l-o.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),Z7(r,o)?(u=AN(new qv,n.d),t=(h=IJ(e.Math.ceil(o.b.a-r.b.a)))-(o.b.a-r.b.a),i=r,(f=f3(r).a)||(f=f3(o).a,t=-t,i=o),f&&(i.b.a-=t,f.n.a-=t),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,h)),1),u),n.c[r.a.d])),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,-h)),1),u),n.c[o.a.d]))):(b=1,(cL(r.g,145)&&cL(o.g,10)||cL(o.g,145)&&cL(r.g,10))&&(b=2),UNn(aM(cM(uM(rM(new Hv,IJ(a)),b),n.c[r.a.d]),n.c[o.a.d]))))}function ZGn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(i)for(r=-1,f=new M2(t,0);f.b<f.d.gc();){if(Px(f.b<f.d.gc()),o=BB(f.d.Xb(f.c=f.b++),10),null==(l=n.c[o.c.p][o.p].a)){for(u=r+1,a=new M2(t,f.b);a.b<a.d.gc();)if(null!=(b=wL(n,(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),10))).a)){kW(b),u=b;break}l=(r+u)/2,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=(kW(l),l),n.c[o.c.p][o.p].b=1}kW(l),r=l}else{for(c=0,h=new Wb(t);h.a<h.c.c.length;)o=BB(n0(h),10),null!=n.c[o.c.p][o.p].a&&(c=e.Math.max(c,Gy(n.c[o.c.p][o.p].a)));for(c+=2,s=new Wb(t);s.a<s.c.c.length;)o=BB(n0(s),10),null==n.c[o.c.p][o.p].a&&(l=H$n(n.i,24)*uYn*c-1,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=l,n.c[o.c.p][o.p].b=1)}}function nzn(){RO(BAt,new ts),RO(KAt,new ls),RO(qAt,new Es),RO(HAt,new Cs),RO(GAt,new Os),RO(XAt,new As),RO(WAt,new $s),RO(HOt,new Ls),RO(BOt,new zo),RO(qOt,new Uo),RO(LOt,new Xo),RO(QAt,new Wo),RO(GOt,new Vo),RO(YAt,new Qo),RO(JAt,new Yo),RO(FAt,new Jo),RO(_At,new Zo),RO(X$t,new ns),RO(VAt,new es),RO(O$t,new is),RO(ktt,new rs),RO(Gk(NNt,1),new cs),RO(Ttt,new as),RO(Stt,new us),RO(mtt,new os),RO(_Nt,new ss),RO(Ptt,new hs),RO(uAt,new fs),RO(yAt,new bs),RO(oLt,new ws),RO($$t,new ds),RO(Itt,new gs),RO(Att,new ps),RO($nt,new vs),RO(Rtt,new ms),RO(Nnt,new ys),RO(iLt,new ks),RO(FNt,new js),RO(_tt,new Ts),RO(Qtt,new Ms),RO(sAt,new Ss),RO(BNt,new Ps)}function tzn(n,t,e){var i,r,c,a,u,o,s,h,f;for(!e&&(e=Gun(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),o=u=new PD(rbn(fan(t.q.getTime()),r)),u.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,o=new PD(rbn(fan(t.q.getTime()),r))),h=new Ck,s=n.a.length,c=0;c<s;)if((i=fV(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&fV(n.a,a)==i;++a);aWn(h,i,a-c,u,o,e),c=a}else if(39==i){if(++c<s&&39==fV(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=fV(n.a,a);)++a;if(a>=s)throw Hp(new _y("Missing trailing '"));a+1<s&&39==fV(n.a,a+1)?++a:f=!0,oO(h,fx(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function ezn(n){var t,e,i,r,c,a,u,o;for(t=null,i=new Wb(n);i.a<i.c.c.length;)Gy(lL((e=BB(n0(i),233)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Np),t.c[t.c.length]=e);if(t)for(;0!=t.c.length;){if((e=BB(s6(t,0),233)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Np),c=new Wb(e.b);c.a<c.c.c.length;)if(zy(lL((r=BB(n0(c),233)).g,r.d[0]).a)==zy(lL(e.g,e.d[0]).a)){if(E7(n,r,0)>E7(n,e,0))return new rC(r,e)}else if(Gy(lL(r.g,r.d[0]).a)>Gy(lL(e.g,e.d[0]).a))return new rC(r,e);for(u=(!e.e&&(e.e=new Np),e.e).Kc();u.Ob();)!(a=BB(u.Pb(),233)).b&&(a.b=new Np),LZ(0,(o=a.b).c.length),MS(o.c,0,e),a.c==o.c.length&&(t.c[t.c.length]=a)}return null}function izn(n,t){var e,i,r,c,a,u;if(null==n)return zWn;if(null!=t.a.zc(n,t))return"[...]";for(e=new $an(FWn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&tsn(i).i)?!Array.isArray(i)||(u=vnn(i))>=14&&u<=16?cL(i,177)?b6(e,RIn(BB(i,177))):cL(i,190)?b6(e,JEn(BB(i,190))):cL(i,195)?b6(e,kSn(BB(i,195))):cL(i,2012)?b6(e,ZEn(BB(i,2012))):cL(i,48)?b6(e,DIn(BB(i,48))):cL(i,364)?b6(e,gCn(BB(i,364))):cL(i,832)?b6(e,xIn(BB(i,832))):cL(i,104)&&b6(e,NIn(BB(i,104))):t.a._b(i)?(e.a?oO(e.a,e.b):e.a=new lN(e.d),aO(e.a,"[...]")):b6(e,izn(een(i),new $q(t))):b6(e,null==i?zWn:Bbn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function rzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(w=qSn(cDn(t,!1,!1)),r&&(w=Jon(w)),g=Gy(MD(ZAn(t,(Epn(),pct)))),Px(0!=w.b),b=BB(w.a.a.c,8),h=BB(Dpn(w,1),8),w.b>2?(gun(s=new Np,new s1(w,1,w.b)),qan(d=new EAn(XXn(s,g+n.a)),t),i.c[i.c.length]=d):d=BB(RX(n.b,r?PMn(t):OMn(t)),266),u=PMn(t),r&&(u=OMn(t)),a=iPn(b,u),o=g+n.a,a.a?(o+=e.Math.abs(b.b-h.b),l=new xI(h.a,(h.b+b.b)/2)):(o+=e.Math.abs(b.a-h.a),l=new xI((h.a+b.a)/2,h.b)),VW(r?n.d:n.c,t,new Cmn(d,a,l,o)),VW(n.b,t,d),!t.n&&(t.n=new eU(zOt,t,1,7)),f=new AL(t.n);f.e!=f.i.gc();)c=JRn(n,BB(kpn(f),137),!0,0,0),i.c[i.c.length]=c}function czn(n){var t,i,r,c,a,u,o,s,h;for(s=new Np,u=new Np,a=new Wb(n);a.a<a.c.c.length;)Vl(r=BB(n0(a),112),r.f.c.length),Ql(r,r.k.c.length),0==r.d&&(s.c[s.c.length]=r),0==r.i&&0==r.e.b&&(u.c[u.c.length]=r);for(i=-1;0!=s.c.length;)for(t=new Wb((r=BB(s6(s,0),112)).k);t.a<t.c.c.length;)Yl(h=BB(n0(t),129).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Vl(h,h.d-1),0==h.d&&(s.c[s.c.length]=h);if(i>-1){for(c=new Wb(u);c.a<c.c.c.length;)(r=BB(n0(c),112)).o=i;for(;0!=u.c.length;)for(t=new Wb((r=BB(s6(u,0),112)).f);t.a<t.c.c.length;)(o=BB(n0(t),129).a).e.b>0||(Yl(o,e.Math.min(o.o,r.o-1)),Ql(o,o.i-1),0==o.i&&(u.c[u.c.length]=o))}}function azn(n,t,e){var i,r,c,a,u;if(u=n.c,!t&&(t=L$t),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new nU(n,1,2,u,n.c),e?e.Ei(a):e=a),u!=t)if(cL(n.Cb,284))n.Db>>16==-10?e=BB(n.Cb,284).nk(t,e):n.Db>>16==-15&&(!t&&(gWn(),t=l$t),!u&&(gWn(),u=l$t),n.Cb.nh()&&(a=new N7(n.Cb,1,13,u,t,uvn(H7(BB(n.Cb,59)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,88))n.Db>>16==-23&&(cL(t,88)||(gWn(),t=d$t),cL(u,88)||(gWn(),u=d$t),n.Cb.nh()&&(a=new N7(n.Cb,1,10,u,t,uvn(a4(BB(n.Cb,26)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,444))for(!(c=BB(n.Cb,836)).b&&(c.b=new Tp(new xm)),r=new Mp(new usn(new Pb(c.b.a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,c),e);return e}function uzn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(a=qy(TD(ZAn(n,(HXn(),wgt)))),l=BB(ZAn(n,cpt),21),o=!1,s=!1,f=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));!(f.e==f.i.gc()||o&&s);){for(c=BB(kpn(f),118),u=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!c.d&&(c.d=new hK(_Ot,c,8,5)),c.d),(!c.e&&(c.e=new hK(_Ot,c,7,4)),c.e)])));dAn(r)&&(i=BB(U5(r),79),h=a&&QCn(i)&&qy(TD(ZAn(i,dgt))),e=bqn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),c)?n==JJ(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))):n==JJ(PTn(BB(Wtn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),0),82))),!((h||e)&&++u>1)););(u>0||l.Hc((lCn(),eCt))&&(!c.n&&(c.n=new eU(zOt,c,1,7)),c.n).i>0)&&(o=!0),u>1&&(s=!0)}o&&t.Fc((bDn(),lft)),s&&t.Fc((bDn(),bft))}function ozn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if((b=BB(ZAn(n,(sWn(),KSt)),21)).dc())return null;if(o=0,u=0,b.Hc((mdn(),KCt))){for(f=BB(ZAn(n,uPt),98),r=2,i=2,c=2,a=2,t=JJ(n)?BB(ZAn(JJ(n),bSt),103):BB(ZAn(n,bSt),103),h=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=BB(kpn(h),118),(l=BB(ZAn(s,wPt),61))==(kUn(),PCt)&&(l=OFn(s,t),Ypn(s,wPt,l)),f==(QEn(),XIt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}o=e.Math.max(r,c),u=e.Math.max(i,a)}return KUn(n,o,u,!0,!0)}function szn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(m=BB(P4(ytn(AV(new Rq(null,new w1(t.d,16)),new $d(i)),new Ld(i)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),l=DWn,f=_Vn,s=new Wb(t.b.j);s.a<s.c.c.length;)(o=BB(n0(s),11)).j==i&&(l=e.Math.min(l,o.p),f=e.Math.max(f,o.p));if(l==DWn)for(u=0;u<m.gc();u++)g9(BB(m.Xb(u),101),i,u);else for(Zq(y=x8(ANt,hQn,25,c.length,15,1),y.length),v=m.Kc();v.Ob();){for(p=BB(v.Pb(),101),a=BB(RX(n.b,p),177),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,k=new Rv,b=0;b<c.length;b++)c[w][b]&&TU(k,iln(y[b]));for(;FT(k,iln(h));)++h}for(g9(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(y[p.i.c]=h)}}function hzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(c=null,r=new Wb(t.a);r.a<r.c.c.length;)AHn(i=BB(n0(r),10))?(h=new GV(i,!0,o=AN(oM(new qv,i),n.f),s=AN(oM(new qv,i),n.f)),f=i.o.b,bvn(),b=1e4,(l=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197))==hvt&&(b=1),w=UNn(aM(cM(rM(uM(new Hv,b),IJ(e.Math.ceil(f))),o),s)),l==fvt&&TU(n.d,w),O_n(n,ean(abn(i,(kUn(),ICt))),h),O_n(n,abn(i,oCt),h),a=h):(d=AN(oM(new qv,i),n.f),JT(AV(new Rq(null,new w1(i.j,16)),new Bc),new tI(n,d)),a=new GV(i,!1,d,d)),n.i[i.p]=a,c&&(u=c.c.d.a+K$(n.n,c.c,i)+i.d.d,c.b||(u+=c.c.o.b),UNn(aM(cM(uM(rM(new Hv,IJ(e.Math.ceil(u))),0),c.d),a.a))),c=a}function fzn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g;for(OTn(t,"Label dummy insertions",1),b=new Np,u=Gy(MD(mMn(n,(HXn(),jpt)))),f=Gy(MD(mMn(n,Spt))),l=BB(mMn(n,Udt),103),w=new Wb(n.a);w.a<w.c.c.length;)for(a=new oz(ZL(lbn(BB(n0(w),10)).a.Kc(),new h));dAn(a);)if((c=BB(U5(a),17)).c.i!=c.d.i&&tL(c.b,nst)){for(i=oLn(n,c,g=Etn(c),d=sx(c.b.c.length)),b.c[b.c.length]=i,r=i.o,o=new M2(c.b,0);o.b<o.d.gc();)Px(o.b<o.d.gc()),GC(mMn(s=BB(o.d.Xb(o.c=o.b++),70),Ydt))===GC((Rtn(),zPt))&&(l==(Ffn(),HPt)||l==KPt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),d.c[d.c.length]=s,fW(o));l==(Ffn(),HPt)||l==KPt?(r.a-=f,r.b+=u+g):r.b+=u-f+g}gun(n.a,b),HSn(t)}function lzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(l=XDn(n,t,a=new dOn(t)),w=e.Math.max(Gy(MD(mMn(t,(HXn(),agt)))),1),f=new Wb(l.a);f.a<f.c.c.length;)h=BB(n0(f),46),s=Bgn(BB(h.a,8),BB(h.b,8),w),zH(i,new xI(s.c,s.d)),zH(i,_x(new xI(s.c,s.d),s.b,0)),zH(i,_x(new xI(s.c,s.d),0,s.a)),zH(i,_x(new xI(s.c,s.d),s.b,s.a));switch(b=a.d,o=Bgn(BB(l.b.a,8),BB(l.b.b,8),w),b==(kUn(),ICt)||b==oCt?(r.c[b.g]=e.Math.min(r.c[b.g],o.d),r.b[b.g]=e.Math.max(r.b[b.g],o.d+o.a)):(r.c[b.g]=e.Math.min(r.c[b.g],o.c),r.b[b.g]=e.Math.max(r.b[b.g],o.c+o.b)),c=KQn,u=a.c.i.d,b.g){case 4:c=u.c;break;case 2:c=u.b;break;case 1:c=u.a;break;case 3:c=u.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function bzn(n){var t,e,i,r;if(-1!=(t=GO(e=null!=n.D?n.D:n.B,YTn(91)))){i=e.substr(0,t),r=new Sk;do{r.a+="["}while(-1!=(t=lx(e,91,++t)));mK(i,$Wn)?r.a+="Z":mK(i,S9n)?r.a+="B":mK(i,P9n)?r.a+="C":mK(i,I9n)?r.a+="D":mK(i,C9n)?r.a+="F":mK(i,O9n)?r.a+="I":mK(i,A9n)?r.a+="J":mK(i,$9n)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}}else if(-1==GO(e,YTn(46))){if(mK(e,$Wn))return $Nt;if(mK(e,S9n))return NNt;if(mK(e,P9n))return ONt;if(mK(e,I9n))return xNt;if(mK(e,C9n))return DNt;if(mK(e,O9n))return ANt;if(mK(e,A9n))return LNt;if(mK(e,$9n))return RNt}return null}function wzn(n,t,e){var i,r,c,a,u,o,s,h;for(qan(s=new $vn(e),t),hon(s,(hWn(),dlt),t),s.o.a=t.g,s.o.b=t.f,s.n.a=t.i,s.n.b=t.j,WB(e.a,s),VW(n.a,t,s),(0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i||qy(TD(ZAn(t,(HXn(),wgt)))))&&hon(s,_ft,(hN(),!0)),o=BB(mMn(e,Zft),21),(h=BB(mMn(s,(HXn(),ept)),98))==(QEn(),YIt)?hon(s,ept,QIt):h!=QIt&&o.Fc((bDn(),dft)),i=BB(mMn(e,Udt),103),u=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));u.e!=u.i.gc();)qy(TD(ZAn(a=BB(kpn(u),118),Ggt)))||Zzn(n,a,s,o,i,h);for(c=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));c.e!=c.i.gc();)!qy(TD(ZAn(r=BB(kpn(c),137),Ggt)))&&r.a&&WB(s.b,Hhn(r));return qy(TD(mMn(s,Tdt)))&&o.Fc((bDn(),hft)),qy(TD(mMn(s,bgt)))&&(o.Fc((bDn(),wft)),o.Fc(bft),hon(s,ept,QIt)),s}function dzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;u=BB(RX(t.c,n),459),g=t.a.c,o=t.a.c+t.a.b,a=(E=u.f)<(T=u.a),b=new xI(g,E),p=new xI(o,T),w=new xI(r=(g+o)/2,E),v=new xI(r,T),c=eNn(n,E,T),y=g1(t.B),k=new xI(r,c),j=g1(t.D),e=lon(Pun(Gk(PMt,1),sVn,8,0,[y,k,j])),f=!1,(d=t.B.i)&&d.c&&u.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(cNn(i=ion(BB(xq(d.c.a,h),10)),y,e[0])||Bz(i,y,e[0]))):f=!0),l=!1,(m=t.D.i)&&m.c&&u.e&&(a&&m.p>0||!a&&m.p<m.c.a.c.length-1?(h=m.p,a?--h:++h,l=!(cNn(i=ion(BB(xq(m.c.a,h),10)),e[0],j)||Bz(i,e[0],j))):l=!0),f&&l&&DH(n.a,k),f||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[b,w])),l||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[v,p]))}function gzn(n,t){var e,i,r,c,a,u,o;if(cL(n.Ug(),160)?(gzn(BB(n.Ug(),160),t),t.a+=" > "):t.a+="Root ",mK((e=n.Tg().zb).substr(0,3),"Elk")?oO(t,e.substr(3)):t.a+=""+e,r=n.zg())oO((t.a+=" ",t),r);else if(cL(n,354)&&(o=BB(n,137).a))oO((t.a+=" ",t),o);else{for(c=new AL(n.Ag());c.e!=c.i.gc();)if(o=BB(kpn(c),137).a)return void oO((t.a+=" ",t),o);if(cL(n,352)&&(!(i=BB(n,79)).b&&(i.b=new hK(KOt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new hK(KOt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new cx((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=FWn),gzn(BB(kpn(a),160),t);for(t.a+=e1n,u=new cx((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c));u.e!=u.i.gc();)u.e>0&&(t.a+=FWn),gzn(BB(kpn(u),160),t);t.a+=")"}}}function pzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(c=BB(mMn(n,(hWn(),dlt)),79)){for(i=n.a,UR(r=new wA(e),$jn(n)),wan(n.d.i,n.c.i)?(l=n.c,XR(f=Aon(Pun(Gk(PMt,1),sVn,8,0,[l.n,l.a])),e)):f=g1(n.c),r5(i,f,i.a,i.a.a),b=g1(n.d),null!=mMn(n,Rlt)&&UR(b,BB(mMn(n,Rlt),8)),r5(i,b,i.c.b,i.c),Ztn(i,r),Lin(a=cDn(c,!0,!0),BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82)),Nin(a,BB(Wtn((!c.c&&(c.c=new hK(KOt,c,5,8)),c.c),0),82)),VFn(i,a),h=new Wb(n.b);h.a<h.c.c.length;)s=BB(n0(h),70),Sen(u=BB(mMn(s,dlt),137),s.o.a),Men(u,s.o.b),SA(u,s.n.a+r.a,s.n.b+r.b),Ypn(u,(Crn(),tst),TD(mMn(s,tst)));(o=BB(mMn(n,(HXn(),vgt)),74))?(Ztn(o,r),Ypn(c,vgt,o)):Ypn(c,vgt,null),t==(Mbn(),JPt)?Ypn(c,Zdt,JPt):Ypn(c,Zdt,null)}}function vzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(b=t.c.length,l=0,f=new Wb(n.b);f.a<f.c.c.length;)if(0!=(p=(h=BB(n0(f),29)).a).c.length){for(s=0,v=null,r=BB(n0(g=new Wb(p)),10),c=null;r;){if((c=BB(xq(t,r.p),257)).c>=0){for(o=null,u=new M2(h.a,s+1);u.b<u.d.gc()&&(Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),10),!((o=BB(xq(t,a.p),257)).d==c.d&&o.c<c.c));)o=null;o&&(v&&(c5(i,r.p,iln(BB(xq(i,r.p),19).a-1)),BB(xq(e,v.p),15).Mc(c)),c=wTn(c,r,b++),t.c[t.c.length]=c,WB(e,new Np),v?(BB(xq(e,v.p),15).Fc(c),WB(i,iln(1))):WB(i,iln(0)))}w=null,g.a<g.c.c.length&&(w=BB(n0(g),10),d=BB(xq(t,w.p),257),BB(xq(e,r.p),15).Fc(d),c5(i,w.p,iln(BB(xq(i,w.p),19).a+1))),c.d=l,c.c=s++,v=r,r=w}++l}}function mzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return o=n,h=XR(new xI(t.a,t.b),n),s=i,f=XR(new xI(r.a,r.b),i),l=o.a,g=o.b,w=s.a,v=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(m=f.b),h$(),rin(A3n),!(e.Math.abs(0-c)<=A3n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-v)*b),u=1/c*-(-(l-w)*m+(g-v)*d),rin(A3n),(e.Math.abs(0-a)<=A3n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:zO(isNaN(0),isNaN(a)))<0&&(rin(A3n),(e.Math.abs(a-1)<=A3n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:zO(isNaN(a),isNaN(1)))<0)&&(rin(A3n),(e.Math.abs(0-u)<=A3n||0==u||isNaN(0)&&isNaN(u)?0:0<u?-1:0>u?1:zO(isNaN(0),isNaN(u)))<0)&&(rin(A3n),(e.Math.abs(u-1)<=A3n||1==u||isNaN(u)&&isNaN(1)?0:u<1?-1:u>1?1:zO(isNaN(u),isNaN(1)))<0))}function yzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(f=new hW(new iw(n));f.b!=f.c.a.d;)for(u=BB((h=s9(f)).d,56),t=BB(h.e,56),d=0,y=(null==(a=u.Tg()).i&&qFn(a),a.i).length;d<y;++d)if(null==a.i&&qFn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).Ij()&&!s.Jj())if(cL(s,99))0==((o=BB(s,18)).Bb&h6n)&&(!(j=Ivn(o))||0==(j.Bb&h6n))&&mBn(n,o,u,t);else if(ZM(),BB(s,66).Oj()&&(e=BB((k=s)?BB(t,49).xh(k):null,153)))for(b=BB(u.ah(s),153),i=e.gc(),g=0,w=b.gc();g<w;++g)if(cL(l=b.il(g),99)){if(null==(r=lnn(n,m=b.jl(g)))&&null!=m){if(v=BB(l,18),!n.b||0!=(v.Bb&h6n)||Ivn(v))continue;r=m}if(!e.dl(l,r))for(p=0;p<i;++p)if(e.il(p)==l&&GC(e.jl(p))===GC(r)){e.ii(e.gc()-1,p),--i;break}}else e.dl(b.il(g),b.jl(g))}function kzn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;if(p=QBn(t,i,n.g),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),n.b)for(g=0;g<p.c.length;g++)l1(g,p.c.length),f=BB(p.c[g],200),0!=g&&(l1(g-1,p.c.length),ghn(f,(b=BB(p.c[g-1],200)).f+b.b+n.g)),mXn(g,p,i,n.g),Hkn(n,f),c.n&&a&&y0(c,o2(a),(Bsn(),uOt));else for(d=new Wb(p);d.a<d.c.c.length;)for(h=new Wb((w=BB(n0(d),200)).a);h.a<h.c.c.length;)xcn(v=new KJ((s=BB(n0(h),187)).s,s.t,n.g),s),WB(w.d,v);return zmn(n,p),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),m=e.Math.max(n.d,r.a-(u.b+u.c)),o=(l=e.Math.max(n.c,r.b-(u.d+u.a)))-n.c,n.e&&n.f&&(m/l<n.a?m=l*n.a:o+=m/n.a-l),n.e&&Odn(p,m,o),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),new eq(n.a,m,n.c+o,(YLn(),_Et))}function jzn(n){var t,i,r,c,a,u,o,s,h,f;for(n.j=x8(ANt,hQn,25,n.g,15,1),n.o=new Np,JT(wnn(new Rq(null,new w1(n.e.b,16)),new Wc),new ug(n)),n.a=x8($Nt,ZYn,25,n.b,16,1),$fn(new Rq(null,new w1(n.e.b,16)),new sg(n)),f=new Np,JT(AV(wnn(new Rq(null,new w1(n.e.b,16)),new Qc),new og(n)),new eI(n,f)),o=new Wb(f);o.a<o.c.c.length;)if(!((u=BB(n0(o),508)).c.length<=1))if(2!=u.c.length){if(!XEn(u)&&!NPn(u,new Vc))for(s=new Wb(u),r=null;s.a<s.c.c.length;)t=BB(n0(s),17),i=n.c[t.p],h=!r||s.a>=s.c.c.length?X3((uSn(),Iut),Put):X3((uSn(),Put),Put),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else zAn(u),AHn((l1(0,u.c.length),BB(u.c[0],17)).d.i)||WB(n.o,u)}function Ezn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(m=GB(n),o=new Np,s=(c=n.c.length)-1,h=c+1;0!=m.a.c;){for(;0!=e.b;)Px(0!=e.b),p=BB(Atn(e,e.a.a),112),$J(m.a,p),p.g=s--,NFn(p,t,e,i);for(;0!=t.b;)Px(0!=t.b),v=BB(Atn(t,t.a.a),112),$J(m.a,v),v.g=h++,NFn(v,t,e,i);for(u=_Vn,d=new Fb(new BR(new xN(new _b(m.a).a).b));aS(d.a.a);){if(w=BB(mx(d.a).cd(),112),!i&&w.b>0&&w.a<=0){o.c=x8(Ant,HWn,1,0,5,1),o.c[o.c.length]=w;break}(b=w.i-w.d)>=u&&(b>u&&(o.c=x8(Ant,HWn,1,0,5,1),u=b),o.c[o.c.length]=w)}0!=o.c.length&&(a=BB(xq(o,pvn(r,o.c.length)),112),$J(m.a,a),a.g=h++,NFn(a,t,e,i),o.c=x8(Ant,HWn,1,0,5,1))}for(g=n.c.length+1,l=new Wb(n);l.a<l.c.c.length;)(f=BB(n0(l),112)).g<c&&(f.g=f.g+g)}function Tzn(n,t){var e;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));if(!SS(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:Hmn(n);break;case 1:Ion(n),Hmn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Ion(n),Hmn(n)}break;case 2:switch(t.g){case 1:Ion(n),RRn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Ion(n),Hmn(n)}break;case 1:switch(t.g){case 2:Ion(n),RRn(n);break;case 4:Ion(n),nEn(n),Hmn(n);break;case 3:Ion(n),nEn(n),Ion(n),Hmn(n)}break;case 4:switch(t.g){case 2:nEn(n),Hmn(n);break;case 1:nEn(n),Ion(n),Hmn(n);break;case 3:Ion(n),RRn(n)}break;case 3:switch(t.g){case 2:Ion(n),nEn(n),Hmn(n);break;case 1:Ion(n),nEn(n),Ion(n),Hmn(n);break;case 4:Ion(n),RRn(n)}}return n}function Mzn(n,t){var e;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));if(!PI(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:Zon(n);break;case 1:Pon(n),Zon(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 2:switch(t.g){case 1:Pon(n),KRn(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 1:switch(t.g){case 2:Pon(n),KRn(n);break;case 4:Pon(n),tEn(n),Zon(n);break;case 3:Pon(n),tEn(n),Pon(n),Zon(n)}break;case 4:switch(t.g){case 2:tEn(n),Zon(n);break;case 1:tEn(n),Pon(n),Zon(n);break;case 3:Pon(n),KRn(n)}break;case 3:switch(t.g){case 2:Pon(n),tEn(n),Zon(n);break;case 1:Pon(n),tEn(n),Pon(n),Zon(n);break;case 4:Pon(n),KRn(n)}}return n}function Szn(n,t,i){var r,c,a,u,o,s,f,l;for(s=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new oz(ZL(dLn(o=BB(kpn(s),33)).a.Kc(),new h));dAn(c);){if(!(r=BB(U5(c),79)).b&&(r.b=new hK(KOt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new hK(KOt,r,5,8)),r.c.i<=1)))throw Hp(new ck("Graph must not contain hyperedges."));if(!nAn(r)&&o!=PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82)))for(qan(f=new CR,r),hon(f,(Mrn(),sat),r),Rl(f,BB(qC(AY(i.f,o)),144)),Kl(f,BB(RX(i,PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82))),144)),WB(t.c,f),u=new AL((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n));u.e!=u.i.gc();)qan(l=new m4(f,(a=BB(kpn(u),137)).a),a),hon(l,sat,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),_Bn(l),WB(t.d,l)}}function Pzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(EJ(l=new eUn(n),!(t==(Ffn(),HPt)||t==KPt)),f=l.a,b=new bm,Dtn(),u=0,s=(c=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;u<s;++u)i=c[u],(h=fL(f,Git,i))&&(b.d=e.Math.max(b.d,h.Re()));for(a=0,o=(r=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;a<o;++a)i=r[a],(h=fL(f,Uit,i))&&(b.a=e.Math.max(b.a,h.Re()));for(p=0,m=(d=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;p<m;++p)(h=fL(f,d[p],Git))&&(b.b=e.Math.max(b.b,h.Se()));for(g=0,v=(w=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;g<v;++g)(h=fL(f,w[g],Uit))&&(b.c=e.Math.max(b.c,h.Se()));return b.d>0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function Izn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(b=i.d,l=i.c,u=(a=new xI(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Wb(n.a);h.a<h.c.c.length;)if((o=BB(n0(h),10)).k==(uSn(),Mut)){switch(r=BB(mMn(o,(hWn(),Qft)),61),c=BB(mMn(o,Yft),8),f=o.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==(QEn(),WIt)?(w=Gy(MD(mMn(o,Tlt))),f.b=a.b*w-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0)):t==XIt&&(f.b=Gy(MD(mMn(o,Tlt)))-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0))}u=e.Math.max(u,d)}for(i.f.b+=u-a.b,s=new Wb(n.a);s.a<s.c.c.length;)if((o=BB(n0(s),10)).k==(uSn(),Mut))switch(r=BB(mMn(o,(hWn(),Qft)),61),f=o.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function Czn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(r=BB(mMn(n,(qqn(),skt)),33),o=DWn,s=DWn,a=_Vn,u=_Vn,k=spn(n.b,0);k.b!=k.d.c;)w=(m=BB(b3(k),86)).e,d=m.f,o=e.Math.min(o,w.a-d.a/2),s=e.Math.min(s,w.b-d.b/2),a=e.Math.max(a,w.a+d.a/2),u=e.Math.max(u,w.b+d.b/2);for(l=new xI((b=BB(ZAn(r,(IAn(),Ckt)),116)).b-o,b.d-s),y=spn(n.b,0);y.b!=y.d.c;)cL(f=mMn(m=BB(b3(y),86),skt),239)&&SA(c=BB(f,33),(h=UR(m.e,l)).a-c.g/2,h.b-c.f/2);for(v=spn(n.a,0);v.b!=v.d.c;)p=BB(b3(v),188),(i=BB(mMn(p,skt),79))&&(r5(t=p.a,g=new wA(p.b.e),t.a,t.a.a),r5(t,j=new wA(p.c.e),t.c.b,t.c),ZMn(g,BB(Dpn(t,1),8),p.b.f),ZMn(j,BB(Dpn(t,t.b-2),8),p.c.f),VFn(t,cDn(i,!0,!0)));KUn(r,a-o+(b.b+b.c),u-s+(b.d+b.a),!1,!1)}function Ozn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(yR(o=new M2(s=n.b,0),new HX(n)),g=!1,c=1;o.b<o.d.gc();){for(Px(o.b<o.d.gc()),u=BB(o.d.Xb(o.c=o.b++),29),l1(c,s.c.length),b=BB(s.c[c],29),d=(w=a0(u.a)).c.length,l=new Wb(w);l.a<l.c.c.length;)PZ(h=BB(n0(l),10),b);if(g){for(f=W1(new fy(w),0);f.c.Sb();)for(r=new Wb(a0(fbn(h=BB(w5(f),10))));r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0),hon(n,(hWn(),qft),(hN(),!0)),e=iGn(n,i,d),t=BB(mMn(h,Rft),305),p=BB(xq(e,e.c.length-1),17),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(l1(0,w.c.length),BB(w.c[0],10).k==(uSn(),Tut)&&(g=!0,c=-1));++c}for(a=new M2(n.b,0);a.b<a.d.gc();)Px(a.b<a.d.gc()),0==BB(a.d.Xb(a.c=a.b++),29).a.c.length&&fW(a)}function Azn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=BB(BB(h6(n.r,t),21),84)).gc()<=2||t==(kUn(),oCt)||t==(kUn(),ICt))JUn(n,t);else{for(g=n.u.Hc((lCn(),cCt)),i=t==(kUn(),sCt)?(Dan(),Rrt):(Dan(),Nrt),v=t==sCt?(G7(),irt):(G7(),crt),r=Zk(H_(i),n.s),p=t==sCt?RQn:KQn,h=f.Kc();h.Ob();)!(o=BB(h.Pb(),111)).c||o.c.d.c.length<=0||(d=o.b.rf(),w=o.e,(b=(l=o.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(u=l.n,l.e.b+u.d+u.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,OY(v,uJn),l.f=v,l9(l,(J9(),Jit)),WB(r.d,new xG(b,kln(r,b))),p=t==sCt?e.Math.min(p,w.b):e.Math.max(p,w.b+o.b.rf().b));for(p+=t==sCt?-n.t:n.t,Pwn((r.e=p,r)),s=f.Kc();s.Ob();)!(o=BB(s.Pb(),111)).c||o.c.d.c.length<=0||((b=o.c.i).c-=o.e.a,b.d-=o.e.b)}}function $zn(n,t,i){var r;if(OTn(i,"StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=RQn,n.g=KQn,n.d=Gy(MD(mMn(t,(HXn(),ypt)))),zpn(n),PAn(n),SAn(n),xjn(n),ddn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=_vn(n),r=new HX(n.c),WB(n.c.b,r),n.r=a0(n.p),n.n=TJ(n.k,n.k.length);0!=n.r.c.length;)n.o=zhn(n),!n.o||Ton(n)&&0!=n.b.a.gc()?(xEn(n,r),r=new HX(n.c),WB(n.c.b,r),Frn(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Ton(n)?(n.c.b.c=x8(Ant,HWn,1,0,5,1),r=new HX(n.c),WB(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=a0(n.p),n.n=TJ(n.k,n.k.length)):(PZ(n.o,r),y7(n.r,n.o),TU(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c=x8(Ant,HWn,1,0,5,1),JPn(t.b),HSn(i)}else HSn(i)}function Lzn(n){var t,i,r,c;for(JT(AV(new Rq(null,new w1(n.a.b,16)),new yr),new kr),fEn(n),JT(AV(new Rq(null,new w1(n.a.b,16)),new jr),new Er),n.c==(Mbn(),JPt)&&(JT(AV(wnn(new Rq(null,new w1(new Ib(n.f),1)),new Tr),new Mr),new Md(n)),JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Sr),new Pr),new Ir),new Cr),new Pd(n))),c=new xI(RQn,RQn),t=new xI(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),57),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);UR(kO(n.d.c),qx(new xI(c.a,c.b))),UR(kO(n.d.f),XR(new xI(t.a,t.b),c)),oNn(n,c,t),$U(n.f),$U(n.b),$U(n.g),$U(n.e),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.d=null}function Nzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(i=new Np,w=new Wb(t.a);w.a<w.c.c.length;)if((l=(b=BB(n0(w),10)).e)&&(gun(i,Nzn(n,l,b)),EGn(n,l,b),BB(mMn(l,(hWn(),Zft)),21).Hc((bDn(),lft))))for(p=BB(mMn(b,(HXn(),ept)),98),f=BB(mMn(b,cpt),174).Hc((lCn(),eCt)),g=new Wb(b.j);g.a<g.c.c.length;)for(d=BB(n0(g),11),(r=BB(RX(n.b,d),10))||(hon(r=bXn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new Gj,d.o,BB(mMn(l,Udt),103),l),dlt,d),VW(n.b,d,r),WB(l.a,r)),c=BB(xq(r.j,0),11),s=new Wb(d.f);s.a<s.c.c.length;)o=BB(n0(s),70),(a=new qj).o.a=o.o.a,a.o.b=o.o.b,WB(c.f,a),f||(v=d.j,h=0,Hz(BB(mMn(b,cpt),21))&&(h=$Cn(o.n,o.o,d.o,0,v)),p==(QEn(),QIt)||(kUn(),bCt).Hc(v)?a.o.a=h:a.o.b=h);return BGn(n,t,e,i,u=new Np),e&&Iqn(n,t,e,u),u}function xzn(n,t,e){var i,r,c,a,u,o,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Wb(t.j);h.a<h.c.c.length;)for(s=BB(n0(h),11),o=(e?new Hw(s):new Gw(s)).Kc();o.Ob();)(a=(u=BB(o.Pb(),11)).i).c==t.c?a!=t&&(xzn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[u.p],++n.c[t.c.p][t.p].b);if(c=BB(mMn(t,(hWn(),xft)),15))for(r=c.Kc();r.Ob();)i=BB(r.Pb(),10),t.c==i.c&&(xzn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=H$n(n.i,24)*uYn*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function Dzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(l=new Wb(n);l.a<l.c.c.length;){for(nx((f=BB(n0(l),10)).n),nx(f.o),V6(f.f),VRn(f),aRn(f),w=new Wb(f.j);w.a<w.c.c.length;){for(nx((b=BB(n0(w),11)).n),nx(b.a),nx(b.o),qIn(b,amn(b.j)),(r=BB(mMn(b,(HXn(),ipt)),19))&&hon(b,ipt,iln(-r.a)),i=new Wb(b.g);i.a<i.c.c.length;){for(t=spn((e=BB(n0(i),17)).a,0);t.b!=t.d.c;)nx(BB(b3(t),8));if(a=BB(mMn(e,vgt),74))for(c=spn(a,0);c.b!=c.d.c;)nx(BB(b3(c),8));for(s=new Wb(e.b);s.a<s.c.c.length;)nx((u=BB(n0(s),70)).n),nx(u.o)}for(h=new Wb(b.f);h.a<h.c.c.length;)nx((u=BB(n0(h),70)).n),nx(u.o)}for(f.k==(uSn(),Mut)&&(hon(f,(hWn(),Qft),amn(BB(mMn(f,Qft),61))),wxn(f)),o=new Wb(f.b);o.a<o.c.c.length;)VRn(u=BB(n0(o),70)),nx(u.o),nx(u.n)}}function Rzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(n.e=t,u=nOn(t),m=new Np,i=new Wb(u);i.a<i.c.c.length;){for(e=BB(n0(i),15),y=new Np,m.c[m.c.length]=y,o=new Rv,l=e.Kc();l.Ob();){for(c=JRn(n,f=BB(l.Pb(),33),!0,0,0),y.c[y.c.length]=c,new xI(b=f.i,w=f.j),!f.n&&(f.n=new eU(zOt,f,1,7)),h=new AL(f.n);h.e!=h.i.gc();)r=JRn(n,BB(kpn(h),137),!1,b,w),y.c[y.c.length]=r;for(!f.c&&(f.c=new eU(XOt,f,9,9)),g=new AL(f.c);g.e!=g.i.gc();)for(a=JRn(n,d=BB(kpn(g),118),!1,b,w),y.c[y.c.length]=a,p=d.i+b,v=d.j+w,!d.n&&(d.n=new eU(zOt,d,1,7)),s=new AL(d.n);s.e!=s.i.gc();)r=JRn(n,BB(kpn(s),137),!1,p,v),y.c[y.c.length]=r;Frn(o,JQ(Wen(Pun(Gk(xnt,1),HWn,20,0,[dLn(f),wLn(f)]))))}ULn(n,o,y)}return n.f=new _j(m),qan(n.f,t),n.f}function Kzn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;null==(w=RX(n.e,i))&&(s=BB(w=new py,183),o=new GX(t+"_s"+r),rtn(s,q6n,o)),nW(e,b=BB(w,183)),qQ(g=new py,"x",i.j),qQ(g,"y",i.k),rtn(b,U6n,g),qQ(f=new py,"x",i.b),qQ(f,"y",i.c),rtn(b,"endPoint",f),!WE((!i.a&&(i.a=new $L(xOt,i,5)),i.a))&&(c=new Wg(h=new Il),e5((!i.a&&(i.a=new $L(xOt,i,5)),i.a),c),rtn(b,D6n,h)),!!Svn(i)&&cMn(n.a,b,K6n,RPn(n,Svn(i))),!!Pvn(i)&&cMn(n.a,b,R6n,RPn(n,Pvn(i))),!(0==(!i.e&&(i.e=new hK(FOt,i,10,9)),i.e).i)&&(a=new SC(n,l=new Il),e5((!i.e&&(i.e=new hK(FOt,i,10,9)),i.e),a),rtn(b,F6n,l)),0!=(!i.g&&(i.g=new hK(FOt,i,9,10)),i.g).i&&(u=new PC(n,d=new Il),e5((!i.g&&(i.g=new hK(FOt,i,9,10)),i.g),u),rtn(b,_6n,d))}function _zn(n){var t,i,r,c,a,u,o;for(qD(),r=n.f.n,u=EX(n.r).a.nc();u.Ob();){if(c=0,(a=BB(u.Pb(),111)).b.Xe((sWn(),aPt))&&(c=Gy(MD(a.b.We(aPt))))<0)switch(a.b.Hf().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(Hz(n.u))switch(t=vcn(a.b,c),o=!BB(n.e.We(qSt),174).Hc((n_n(),HCt)),i=!1,a.b.Hf().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),o&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),o&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),o&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),o&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function Fzn(n){var t,e,i,r,c,a,u,o,s,h,f;for(s=new Wb(n);s.a<s.c.c.length;){switch(o=BB(n0(s),10),c=null,(a=BB(mMn(o,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),c=$ht;break;case 3:case 4:Jun(),c=Oht}if(c)hon(o,(hWn(),Gft),(Jun(),$ht)),c==Oht?RNn(o,a,(ain(),Hvt)):c==$ht&&RNn(o,a,(ain(),qvt));else if(vA(BB(mMn(o,ept),98))&&0!=o.j.c.length){for(t=!0,f=new Wb(o.j);f.a<f.c.c.length;){if(!((h=BB(n0(f),11)).j==(kUn(),oCt)&&h.e.c.length-h.g.c.length>0||h.j==ICt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Wb(h.g);r.a<r.c.c.length;)if(e=BB(n0(r),17),(u=BB(mMn(e.d.i,kgt),163))==(Tbn(),Blt)||u==Hlt){t=!1;break}for(i=new Wb(h.e);i.a<i.c.c.length;)if(e=BB(n0(i),17),(u=BB(mMn(e.c.i,kgt),163))==(Tbn(),_lt)||u==Flt){t=!1;break}}t&&RNn(o,a,(ain(),Gvt))}}}function Bzn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(E=0,w=0,l=new Wb(t.e);l.a<l.c.c.length;){for(f=BB(n0(l),10),b=0,o=0,s=i?BB(mMn(f,Xmt),19).a:_Vn,v=r?BB(mMn(f,Wmt),19).a:_Vn,h=e.Math.max(s,v),y=new Wb(f.j);y.a<y.c.c.length;){if(m=BB(n0(y),11),k=f.n.b+m.n.b+m.a.b,r)for(u=new Wb(m.g);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).d).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o));if(i)for(u=new Wb(m.e);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).c).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o))}o>0&&(E+=b/o,++w)}w>0?(t.a=c*E/w,t.g=w):(t.a=0,t.g=0)}function Hzn(n,t){var e,i,r,c,a,u,o,s,h,f;for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(u=new Wb(BB(n0(i),29).a);u.a<u.c.c.length;)a=BB(n0(u),10),t.j[a.p]=a,t.i[a.p]=t.o==(oZ(),cyt)?KQn:RQn;for($U(n.c),c=n.a.b,t.c==(gJ(),nyt)&&(c=cL(c,152)?o6(BB(c,152)):cL(c,131)?BB(c,131).a:cL(c,54)?new fy(c):new IT(c)),R9(n.e,t,n.b),yS(t.p,null),r=c.Kc();r.Ob();)for(o=BB(r.Pb(),29).a,t.o==(oZ(),cyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new IT(o)),f=o.Kc();f.Ob();)h=BB(f.Pb(),10),t.g[h.p]==h&&oXn(n,h,t);for(Hqn(n,t),e=c.Kc();e.Ob();)for(f=new Wb(BB(e.Pb(),29).a);f.a<f.c.c.length;)h=BB(n0(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=Gy(t.i[t.j[h.p].p]),(t.o==(oZ(),cyt)&&s>KQn||t.o==ryt&&s<RQn)&&(t.p[h.p]=Gy(t.p[h.p])+s));n.e.cg()}function qzn(n,t,e,i){var r,c,a,u,o;return pNn(u=new eUn(t),i),r=!0,n&&n.Xe((sWn(),bSt))&&(r=(c=BB(n.We((sWn(),bSt)),103))==(Ffn(),BPt)||c==_Pt||c==FPt),oRn(u,!1),Otn(u.e.wf(),new $_(u,!1,r)),LJ(u,u.f,(Dtn(),Git),(kUn(),sCt)),LJ(u,u.f,Uit,SCt),LJ(u,u.g,Git,ICt),LJ(u,u.g,Uit,oCt),Bpn(u,sCt),Bpn(u,SCt),hV(u,oCt),hV(u,ICt),qD(),(a=u.A.Hc((mdn(),DCt))&&u.B.Hc((n_n(),UCt))?ndn(u):null)&&rj(u.a,a),_zn(u),ryn(u),cyn(u),VGn(u),MKn(u),mkn(u),_gn(u,sCt),_gn(u,SCt),IRn(u),PHn(u),e?(Gbn(u),ykn(u),_gn(u,oCt),_gn(u,ICt),o=u.B.Hc((n_n(),XCt)),MIn(u,o,sCt),MIn(u,o,SCt),SIn(u,o,oCt),SIn(u,o,ICt),JT(new Rq(null,new w1(new Ob(u.i),0)),new Cn),JT(AV(new Rq(null,EX(u.r).a.oc()),new On),new An),BEn(u),u.e.uf(u.o),JT(new Rq(null,EX(u.r).a.oc()),new Ln),u.o):u.o}function Gzn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),81),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),189)).i=h,0==a.e&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),189)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),81),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(Ffn(),FPt)||n.c==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),81)).f.Kc();s.Ob();)o=BB(s.Pb(),81),d=dA(n.c)?n.f.ef(f,o):n.f.ff(f,o),o.d.i=e.Math.max(o.d.i,f.o+f.g.b+d-o.e.a),o.k||(o.d.i=e.Math.max(o.d.i,o.g.c-o.e.a)),--o.d.e,0==o.d.e&&DH(w,o.d)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),81)).g.c=t.o}function zzn(n){var t,e,i,r,c,a,u,o;switch(u=n.b,t=n.a,0===BB(mMn(n,(_kn(),Mit)),427).g?m$(u,new nw(new Gn)):m$(u,new nw(new zn)),1===BB(mMn(n,Eit),428).g?(m$(u,new qn),m$(u,new Un),m$(u,new Kn)):(m$(u,new qn),m$(u,new Hn)),BB(mMn(n,Pit),250).g){case 0:o=new Yn;break;case 1:o=new Vn;break;case 2:o=new Qn;break;case 3:o=new Wn;break;case 5:o=new Ow(new Qn);break;case 4:o=new Ow(new Vn);break;case 7:o=new DS(new Ow(new Vn),new Ow(new Qn));break;case 8:o=new DS(new Ow(new Wn),new Ow(new Qn));break;default:o=new Ow(new Wn)}for(a=new Wb(u);a.a<a.c.c.length;){for(c=BB(n0(a),167),r=0,e=new rC(iln(i=0),iln(r));B_n(t,c,i,r);)e=BB(o.Ce(e,c),46),i=BB(e.a,19).a,r=BB(e.b,19).a;_Rn(t,c,i,r)}}function Uzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,MA(n.e,c.a,c.b),j=l/w,E=h/b,s=new AL(mV(n.e));s.e!=s.i.gc();)Pen(o=BB(kpn(s),137),o.i*j),Ien(o,o.j*E);for(v=new AL(yV(n.e));v.e!=v.i.gc();)y=(p=BB(kpn(v),118)).i,k=p.j,y>0&&Pen(p,y*j),k>0&&Ien(p,k*E);for(nan(n.b,new lt),t=new Np,u=new usn(new Pb(n.c).a);u.b;)i=BB((a=ten(u)).cd(),79),e=BB(a.dd(),395).a,r=cDn(i,!1,!1),VFn(f=lTn(PMn(i),qSn(r),e),r),(m=IMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.a.a.c,8)),e));for(g=new usn(new Pb(n.d).a);g.b;)i=BB((d=ten(g)).cd(),79),e=BB(d.dd(),395).a,r=cDn(i,!1,!1),f=lTn(OMn(i),Jon(qSn(r)),e),VFn(f=Jon(f),r),(m=CMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.c.b.c,8)),e))}function Xzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(0!=i.c.length){for(w=new Np,b=new Wb(i);b.a<b.c.c.length;)WB(w,new xI((l=BB(n0(b),33)).i,l.j));for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt));NMn(n,i);)E$n(n,i,!1);for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),u=0,o=0,c=null,0!=i.c.length&&(l1(0,i.c.length),u=(c=BB(i.c[0],33)).i-(l1(0,w.c.length),BB(w.c[0],8)).a,o=c.j-(l1(0,w.c.length),BB(w.c[0],8)).b),a=e.Math.sqrt(u*u+o*o),f=Uhn(i);0!=f.a.gc();){for(h=f.a.ec().Kc();h.Ob();)s=BB(h.Pb(),33),g=(d=n.f).i+d.g/2,p=d.j+d.f/2,v=s.i+s.g/2,y=s.j+s.f/2-p,j=(m=v-g)/(k=e.Math.sqrt(m*m+y*y)),E=y/k,Pen(s,s.i+j*a),Ien(s,s.j+E*a);r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),f=Uhn(new t_(f))}n.a&&n.a.lg(new t_(f)),r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),Xzn(n,t,new t_(f),r)}}function Wzn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(g=n.n,p=n.o,b=n.d,l=Gy(MD(edn(n,(HXn(),ppt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),o=t.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a-u.o.b,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=u.o.b,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,IZ(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),o=i.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=0,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,IZ(d,n)),c+=r}}function Vzn(n,t){var i,r,c,a,u,o;if(BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))){for(o=new Wb(t.a);o.a<o.c.c.length;)(a=BB(n0(o),10)).k==(uSn(),Iut)&&(c=BB(mMn(a,(HXn(),Igt)),142),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(u=new Wb(t.a);u.a<u.c.c.length;)if((a=BB(n0(u),10)).k!=(uSn(),Iut))switch(a.k.g){case 2:if((r=BB(mMn(a,(HXn(),kgt)),163))==(Tbn(),Flt)){a.n.a=n.c-10,Yyn(a,new Ge).Jb(new rd(a));break}if(r==Hlt){a.n.a=n.a+10,Yyn(a,new ze).Jb(new cd(a));break}if((i=BB(mMn(a,ilt),303))==(z7(),Ift)){lqn(a).Jb(new ad(a)),a.n.b=n.d-10;break}if(i==Sft){lqn(a).Jb(new ud(a)),a.n.b=n.b+10;break}break;default:throw Hp(new _y("The node type "+a.k+" is not supported by the "+Jot))}}}function Qzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(o=new xI(i.i+i.g/2,i.j+i.f/2),l=XHn(i),b=BB(ZAn(t,(HXn(),ept)),98),d=BB(ZAn(i,upt),61),BC(lpn(i),tpt)||(w=0==i.i&&0==i.j?0:tMn(i,d),Ypn(i,tpt,w)),hon(r=bXn(i,b,d,l,new xI(t.g,t.f),o,new xI(i.g,i.f),BB(mMn(e,Udt),103),e),(hWn(),dlt),i),Hl(c=BB(xq(r.j,0),11),j_n(i)),hon(r,cpt,(lCn(),nbn(rCt))),h=BB(ZAn(t,cpt),174).Hc(eCt),u=new AL((!i.n&&(i.n=new eU(zOt,i,1,7)),i.n));u.e!=u.i.gc();)if(!qy(TD(ZAn(a=BB(kpn(u),137),Ggt)))&&a.a&&(f=Hhn(a),WB(c.f,f),!h))switch(s=0,Hz(BB(ZAn(t,cpt),21))&&(s=$Cn(new xI(a.i,a.j),new xI(a.g,a.f),new xI(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}hon(r,Ipt,MD(ZAn(JJ(t),Ipt))),hon(r,Cpt,MD(ZAn(JJ(t),Cpt))),hon(r,Spt,MD(ZAn(JJ(t),Spt))),WB(e.a,r),VW(n.a,i,r)}function Yzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(e,"Processor arrange level",1),h=0,SQ(),_rn(t,new ap((qqn(),ikt))),c=t.b,u=spn(t,t.b),s=!0;s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?--c:s=!1;if(a=new n_(new s1(t,0,c)),o=new n_(new s1(t,c,t.b)),0==a.b)for(b=spn(o,0);b.b!=b.d.c;)hon(BB(b3(b),86),hkt,iln(h++));else for(f=a.b,m=spn(a,0);m.b!=m.d.c;){for(hon(v=BB(b3(m),86),hkt,iln(h++)),Yzn(n,i=xun(v),mcn(e,1/f|0)),_rn(i,QW(new ap(hkt))),l=new YT,p=spn(i,0);p.b!=p.d.c;)for(g=BB(b3(p),86),d=spn(v.d,0);d.b!=d.d.c;)(w=BB(b3(d),188)).c==g&&r5(l,w,l.c.b,l.c);for(yQ(v.d),Frn(v.d,l),u=spn(o,o.b),r=v.d.b,s=!0;0<r&&s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?(hon(g,hkt,iln(h++)),--r,mtn(u)):s=!1}HSn(e)}function Jzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Inverted port preprocessing",1),u=new M2(n.b,0),e=null,g=new Np;u.b<u.d.gc();){for(d=e,Px(u.b<u.d.gc()),e=BB(u.d.Xb(u.c=u.b++),29),h=new Wb(g);h.a<h.c.c.length;)PZ(o=BB(n0(h),10),d);for(g.c=x8(Ant,HWn,1,0,5,1),f=new Wb(e.a);f.a<f.c.c.length;)if((o=BB(n0(f),10)).k==(uSn(),Iut)&&vA(BB(mMn(o,(HXn(),ept)),98))){for(w=cRn(o,(ain(),Hvt),(kUn(),oCt)).Kc();w.Ob();)for(l=BB(w.Pb(),11),r=0,c=(i=BB(Qgn(a=l.e,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)$Bn(n,l,i[r],g);for(b=cRn(o,qvt,ICt).Kc();b.Ob();)for(l=BB(b.Pb(),11),r=0,c=(i=BB(Qgn(a=l.g,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)ABn(n,l,i[r],g)}}for(s=new Wb(g);s.a<s.c.c.length;)PZ(o=BB(n0(s),10),e);HSn(t)}function Zzn(n,t,e,i,r,c){var a,u,o,s,h,f;for(qan(s=new ISn,t),qIn(s,BB(ZAn(t,(HXn(),upt)),61)),hon(s,(hWn(),dlt),t),IZ(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,VW(n.a,t,s),(a=o5($V(wnn(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Vt),new Xt),new Ww(t)))||(a=o5($V(wnn(new Rq(null,(!t.d&&(t.d=new hK(_Ot,t,8,5)),new w1(t.d,16))),new Qt),new Wt),new Vw(t))),a||(a=o5(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Yt)),hon(s,elt,(hN(),!!a)),pqn(s,c,r,BB(ZAn(t,npt),8)),o=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));o.e!=o.i.gc();)!qy(TD(ZAn(u=BB(kpn(o),137),Ggt)))&&u.a&&WB(s.f,Hhn(u));switch(r.g){case 2:case 1:(s.j==(kUn(),sCt)||s.j==SCt)&&i.Fc((bDn(),gft));break;case 4:case 3:(s.j==(kUn(),oCt)||s.j==ICt)&&i.Fc((bDn(),gft))}return s}function nUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;for(l=null,r==(dJ(),Lyt)?l=t:r==Nyt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=BB(d.Pb(),11),g=Aon(Pun(Gk(PMt,1),sVn,8,0,[w.i.n,w.n,w.a])).b,m=new Rv,o=new Rv,h=new m6(w.b);y$(h.a)||y$(h.b);)if(qy(TD(mMn(s=BB(y$(h.a)?n0(h.a):n0(h.b),17),(hWn(),Ilt))))==c&&-1!=E7(a,s,0)){if(p=s.d==w?s.c:s.d,v=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(v-g)<.2)continue;v<g?t.a._b(p)?TU(m,new rC(Lyt,s)):TU(m,new rC(Nyt,s)):t.a._b(p)?TU(o,new rC(Lyt,s)):TU(o,new rC(Nyt,s))}if(m.a.gc()>1)for(e5(m,new sI(n,b=new hqn(w,m,r))),u.c[u.c.length]=b,f=m.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b);if(o.a.gc()>1)for(e5(o,new hI(n,b=new hqn(w,o,r))),u.c[u.c.length]=b,f=o.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b)}}function tUn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,w4n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Ha),w4n))),u2(n,w4n,g3n,mpn(xjt)),u2(n,w4n,vZn,mpn(Kjt)),u2(n,w4n,PZn,mpn(Ijt)),u2(n,w4n,BZn,mpn(Cjt)),u2(n,w4n,SZn,mpn(Ojt)),u2(n,w4n,IZn,mpn(Pjt)),u2(n,w4n,MZn,mpn(Ajt)),u2(n,w4n,CZn,mpn(Njt)),u2(n,w4n,h4n,mpn(Mjt)),u2(n,w4n,s4n,mpn(Sjt)),u2(n,w4n,b4n,mpn($jt)),u2(n,w4n,u4n,mpn(Ljt)),u2(n,w4n,o4n,mpn(Djt)),u2(n,w4n,f4n,mpn(Rjt)),u2(n,w4n,l4n,mpn(_jt))}function eUn(n){var t;if(this.r=xV(new Pn,new In),this.b=new Hbn(BB(yX(FCt),290)),this.p=new Hbn(BB(yX(FCt),290)),this.i=new Hbn(BB(yX(Krt),290)),this.e=n,this.o=new wA(n.rf()),this.D=n.Df()||qy(TD(n.We((sWn(),SSt)))),this.A=BB(n.We((sWn(),KSt)),21),this.B=BB(n.We(qSt),21),this.q=BB(n.We(uPt),98),this.u=BB(n.We(fPt),21),!wMn(this.u))throw Hp(new rk("Invalid port label placement: "+this.u));if(this.v=qy(TD(n.We(bPt))),this.j=BB(n.We(DSt),21),!tLn(this.j))throw Hp(new rk("Invalid node label placement: "+this.j));this.n=BB(nkn(n,NSt),116),this.k=Gy(MD(nkn(n,OPt))),this.d=Gy(MD(nkn(n,CPt))),this.w=Gy(MD(nkn(n,RPt))),this.s=Gy(MD(nkn(n,APt))),this.t=Gy(MD(nkn(n,$Pt))),this.C=BB(nkn(n,xPt),142),this.c=2*this.d,t=!this.B.Hc((n_n(),HCt)),this.f=new Cgn(0,t,0),this.g=new Cgn(1,t,0),jy(this.f,(Dtn(),zit),this.g)}function iUn(n,t,i,r,c){var a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,g=0,d=0,w=1,m=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));m.e!=m.i.gc();)w+=F3(new oz(ZL(dLn(p=BB(kpn(m),33)).a.Kc(),new h))),T=p.g,g=e.Math.max(g,T),b=p.f,d=e.Math.max(d,b),y+=T*b;for(u=y+2*r*r*w*(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i,a=e.Math.sqrt(u),s=e.Math.max(a*i,g),o=e.Math.max(a/i,d),v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();)p=BB(kpn(v),33),M=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(s-p.g),S=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(o-p.f),Pen(p,M),Ien(p,S);for(E=s+(c.b+c.c),j=o+(c.d+c.a),k=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));k.e!=k.i.gc();)for(l=new oz(ZL(dLn(BB(kpn(k),33)).a.Kc(),new h));dAn(l);)nAn(f=BB(U5(l),79))||BXn(f,t,E,j);KUn(n,E+=c.b+c.c,j+=c.d+c.a,!1,!0)}function rUn(n){var t,e,i,r,c,a,u,o,s,h,f;if(null==n)throw Hp(new Mk(zWn));if(s=n,o=!1,(c=n.length)>0&&(b1(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(n=n.substr(1),--c,o=45==t)),0==c)throw Hp(new Mk(DQn+s+'"'));for(;n.length>0&&(b1(0,n.length),48==n.charCodeAt(0));)n=n.substr(1),--c;if(c>(iFn(),xtt)[10])throw Hp(new Mk(DQn+s+'"'));for(r=0;r<c;r++)if(-1==egn((b1(r,n.length),n.charCodeAt(r))))throw Hp(new Mk(DQn+s+'"'));for(f=0,a=Ltt[10],h=Ntt[10],u=j7(Dtt[10]),e=!0,(i=c%a)>0&&(f=-parseInt(n.substr(0,i),10),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt(n.substr(0,a),10),n=n.substr(a),c-=a,e)e=!1;else{if(Vhn(f,u)<0)throw Hp(new Mk(DQn+s+'"'));f=cbn(f,h)}f=ibn(f,i)}if(Vhn(f,0)>0)throw Hp(new Mk(DQn+s+'"'));if(!o&&Vhn(f=j7(f),0)<0)throw Hp(new Mk(DQn+s+'"'));return f}function cUn(n,t){var e,i,r,c,a,u,o;if(ZH(),this.a=new X$(this),this.b=n,this.c=t,this.f=OU(B7((CPn(),Z$t),t)),this.f.dc())if((u=mjn(Z$t,n))==t)for(this.e=!0,this.d=new Np,this.f=new fo,this.f.Fc(S7n),BB(NHn(F7(Z$t,Utn(n)),""),26)==n&&this.f.Fc(az(Z$t,Utn(n))),r=EKn(Z$t,n).Kc();r.Ob();)switch(i=BB(r.Pb(),170),DW(B7(Z$t,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(OU(B7(Z$t,i)))}else if(ZM(),BB(t,66).Oj())for(this.e=!0,this.f=null,this.d=new Np,a=0,o=(null==n.i&&qFn(n),n.i).length;a<o;++a)for(null==n.i&&qFn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=Z1(B7(Z$t,i));c;c=Z1(B7(Z$t,c)))c==t&&this.d.Fc(i);else 1==DW(B7(Z$t,t))&&u?(this.f=null,this.d=(TOn(),bLt)):(this.f=null,this.e=!0,this.d=(SQ(),new Gb(t)));else this.e=5==DW(B7(Z$t,t)),this.f.Fb(uLt)&&(this.f=uLt)}function aUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(i=0,r=Pmn(n,t),b=n.s,w=n.t,h=BB(BB(h6(n.r,t),21),84).Kc();h.Ob();)if((s=BB(h.Pb(),111)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.rf(),o=s.b.Xe((sWn(),aPt))?Gy(MD(s.b.We(aPt))):0,(l=(f=s.c).i).b=(u=f.n,f.e.a+u.b+u.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+o+r,l9(f,(J9(),Qit)),WD(f,(G7(),crt));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-o-r-l.a,l9(f,(J9(),Qit)),WD(f,(G7(),irt));break;case 2:l.c=-o-r-l.b,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Jit)),WD(f,(G7(),rrt));break;case 4:l.c=d.a+o+r,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Yit)),WD(f,(G7(),rrt))}(t==(kUn(),sCt)||t==SCt)&&(i=e.Math.max(i,l.a))}i>0&&(BB(oV(n.b,t),124).a.b=i)}function uUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Comment pre-processing",1),e=0,o=new Wb(n.a);o.a<o.c.c.length;)if(qy(TD(mMn(u=BB(n0(o),10),(HXn(),Tdt))))){for(++e,r=0,i=null,s=null,w=new Wb(u.j);w.a<w.c.c.length;)r+=(l=BB(n0(w),11)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=BB(xq(l.e,0),17)).c),1==l.g.c.length&&(s=(i=BB(xq(l.g,0),17)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||qy(TD(mMn(s.i,Tdt)))){for(g=new Np,b=new Wb(u.j);b.a<b.c.c.length;){for(f=new Wb((l=BB(n0(b),11)).g);f.a<f.c.c.length;)0==(h=BB(n0(f),17)).d.g.c.length||(g.c[g.c.length]=h);for(a=new Wb(l.e);a.a<a.c.c.length;)0==(c=BB(n0(a),17)).c.e.c.length||(g.c[g.c.length]=c)}for(d=new Wb(g);d.a<d.c.c.length;)tBn(BB(n0(d),17),!0)}else nXn(u,i,s,s.i),AU(o)}t.n&&OH(t,"Found "+e+" comment boxes"),HSn(t)}function oUn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(l=Gy(MD(mMn(n,(HXn(),Ipt)))),b=Gy(MD(mMn(n,Cpt))),f=Gy(MD(mMn(n,Spt))),u=n.o,a=(c=BB(xq(n.j,0),11)).n,d=TPn(c,f)){if(t.Hc((lCn(),eCt)))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:d.c=(u.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(u.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=l}else if(t.Hc(rCt))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Wb(c.f);s.a<s.c.c.length;)(w=(o=BB(n0(s),70)).n).a=d.c,w.b=r,r+=o.o.b+f}}function sUn(){RO(wLt,new Vs),RO(zLt,new ah),RO(ULt,new ph),RO(XLt,new Ih),RO(Qtt,new $h),RO(Gk(NNt,1),new Lh),RO(ktt,new Nh),RO(Ttt,new xh),RO(Qtt,new _s),RO(Qtt,new Fs),RO(Qtt,new Bs),RO(Ptt,new Hs),RO(Qtt,new qs),RO(Rnt,new Gs),RO(Rnt,new zs),RO(Qtt,new Us),RO(Itt,new Xs),RO(Qtt,new Ws),RO(Qtt,new Qs),RO(Qtt,new Ys),RO(Qtt,new Js),RO(Qtt,new Zs),RO(Gk(NNt,1),new nh),RO(Qtt,new th),RO(Qtt,new eh),RO(Rnt,new ih),RO(Rnt,new rh),RO(Qtt,new ch),RO(Att,new uh),RO(Qtt,new oh),RO(Rtt,new sh),RO(Qtt,new hh),RO(Qtt,new fh),RO(Qtt,new lh),RO(Qtt,new bh),RO(Rnt,new wh),RO(Rnt,new dh),RO(Qtt,new gh),RO(Qtt,new vh),RO(Qtt,new mh),RO(Qtt,new yh),RO(Qtt,new kh),RO(Qtt,new jh),RO(_tt,new Eh),RO(Qtt,new Th),RO(Qtt,new Mh),RO(Qtt,new Sh),RO(_tt,new Ph),RO(Rtt,new Ch),RO(Qtt,new Oh),RO(Att,new Ah)}function hUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=t.length)>0&&(b1(0,t.length),64!=(u=t.charCodeAt(0)))){if(37==u&&(o=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(b1(h+1,t.length),o=46==t.charCodeAt(h+1))))){if(v=mK("%",a=t.substr(1,h-1))?null:$Un(a),i=0,o)try{i=l_n(t.substr(h+2),_Vn,DWn)}catch(m){throw cL(m=lun(m),127)?Hp(new L7(m)):Hp(m)}for(d=Ern(n.Wg());d.Ob();)if(cL(b=Man(d),510)&&(p=(r=BB(b,590)).d,(null==v?null==p:mK(v,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:t.substr(0,s),e=0,-1!=s)try{e=l_n(t.substr(s+1),_Vn,DWn)}catch(m){if(!cL(m=lun(m),127))throw Hp(m);l=t}for(l=mK("%",l)?null:$Un(l),w=Ern(n.Wg());w.Ob();)if(cL(b=Man(w),191)&&(g=(c=BB(b,191)).ne(),(null==l?null==g:mK(l,g))&&0==e--))return c;return null}return _qn(n,t)}function fUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(m=new Np,f=new Wb(n.b);f.a<f.c.c.length;)for(w=new Wb(BB(n0(f),29).a);w.a<w.c.c.length;)if((l=BB(n0(w),10)).k==(uSn(),Mut)&&Lx(l,(hWn(),Vft))){for(d=null,p=null,g=null,j=new Wb(l.j);j.a<j.c.c.length;)switch((k=BB(n0(j),11)).j.g){case 4:d=k;break;case 2:p=k;break;default:g=k}for(s=new Kj((v=BB(xq(g.g,0),17)).a),UR(o=new wA(g.n),l.n),nX(spn(s,0),o),y=Jon(v.a),UR(h=new wA(g.n),l.n),r5(y,h,y.c.b,y.c),E=BB(mMn(l,Vft),10),T=BB(xq(E.j,0),11),c=0,u=(i=BB(Qgn(d.e,x8(yut,c1n,17,0,0,1)),474)).length;c<u;++c)MZ(t=i[c],T),Wsn(t.a,t.a.b,s);for(r=0,a=(e=Z0(p.g)).length;r<a;++r)SZ(t=e[r],T),Wsn(t.a,0,y);SZ(v,null),MZ(v,null),m.c[m.c.length]=l}for(b=new Wb(m);b.a<b.c.c.length;)PZ(l=BB(n0(b),10),null)}function lUn(){var n,t,e;for(lUn=O,new knn(1,0),new knn(10,0),new knn(0,0),Htt=x8(iet,sVn,240,11,0,1),qtt=x8(ONt,WVn,25,100,15,1),Gtt=Pun(Gk(xNt,1),qQn,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ztt=x8(ANt,hQn,25,Gtt.length,15,1),Utt=Pun(Gk(xNt,1),qQn,25,15,[1,10,100,VVn,1e4,GQn,1e6,1e7,1e8,AQn,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Xtt=x8(ANt,hQn,25,Utt.length,15,1),Wtt=x8(iet,sVn,240,11,0,1),n=0;n<Wtt.length;n++)Htt[n]=new knn(n,0),Wtt[n]=new knn(0,n),qtt[n]=48;for(;n<qtt.length;n++)qtt[n]=48;for(e=0;e<ztt.length;e++)ztt[e]=aCn(Gtt[e]);for(t=0;t<Xtt.length;t++)Xtt[t]=aCn(Utt[t]);$On()}function bUn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[iYn]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},zDn()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[iYn]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function wUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(PFn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=x8(ONt,WVn,25,4*(0!=(u=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,o=0;o<l;o++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2|d],c[a++]=VLt[63&i];return 8==u?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[s<<4],c[a++]=61,c[a++]=61):16==u&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2],c[a++]=61),Bdn(c,0,c.length)}function dUn(n,t){var i,r,c,a,u,o;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>_Vn&&e4(t,n.p-sQn),u=t.q.getDate(),FJ(t,1),n.k>=0&&vZ(t,n.k),n.c>=0?FJ(t,n.c):n.k>=0?(r=35-new von(t.q.getFullYear()-sQn,t.q.getMonth(),35).q.getDate(),FJ(t,e.Math.min(r,u))):FJ(t,u),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),aL(t,24==n.f&&n.g?0:n.f),n.j>=0&&g6(t,n.j),n.n>=0&&U8(t,n.n),n.i>=0&&dO(t,rbn(cbn(Ojn(fan(t.q.getTime()),VVn),VVn),n.i)),n.a&&(e4(c=new AT,c.q.getFullYear()-sQn-80),sS(fan(t.q.getTime()),fan(c.q.getTime()))&&e4(t,c.q.getFullYear()-sQn+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),o=t.q.getMonth(),FJ(t,t.q.getDate()+i),t.q.getMonth()!=o&&FJ(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>_Vn&&(a=t.q.getTimezoneOffset(),dO(t,rbn(fan(t.q.getTime()),60*(n.o-a)*VVn))),!0}function gUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(cL(r=mMn(t,(hWn(),dlt)),239)){for(b=BB(r,33),w=t.e,f=new wA(t.c),c=t.d,f.a+=c.b,f.b+=c.d,SN(BB(ZAn(b,(HXn(),qgt)),174),(n_n(),qCt))&&(Ol(l=BB(ZAn(b,zgt),116),c.a),_l(l,c.d),Al(l,c.b),Fl(l,c.c)),e=new Np,s=new Wb(t.a);s.a<s.c.c.length;)for(cL(mMn(u=BB(n0(s),10),dlt),239)?IUn(u,f):cL(mMn(u,dlt),186)&&!w&&SA(i=BB(mMn(u,dlt),118),(g=yFn(t,u,i.g,i.f)).a,g.b),d=new Wb(u.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Qw(u)),new Yw(e));if(w)for(d=new Wb(w.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Jw(w)),new Zw(e));for(p=BB(ZAn(b,Zdt),218),a=new Wb(e);a.a<a.c.c.length;)pzn(BB(n0(a),17),p,f);for(m_n(t),o=new Wb(t.a);o.a<o.c.c.length;)(h=(u=BB(n0(o),10)).e)&&gUn(n,h)}}function pUn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,gZn),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new dt),gZn),EG((hAn(),tAt),Pun(Gk(aAt,1),$Vn,237,0,[ZOt]))))),u2(n,gZn,pZn,iln(1)),u2(n,gZn,vZn,80),u2(n,gZn,mZn,5),u2(n,gZn,VJn,dZn),u2(n,gZn,yZn,iln(1)),u2(n,gZn,kZn,(hN(),!0)),u2(n,gZn,QJn,Qct),u2(n,gZn,jZn,mpn(Hct)),u2(n,gZn,EZn,mpn(Yct)),u2(n,gZn,TZn,!1),u2(n,gZn,MZn,mpn(Wct)),u2(n,gZn,SZn,mpn(Xct)),u2(n,gZn,PZn,mpn(Uct)),u2(n,gZn,IZn,mpn(zct)),u2(n,gZn,CZn,mpn(Jct)),u2(n,gZn,oZn,mpn(Gct)),u2(n,gZn,fZn,mpn(aat)),u2(n,gZn,sZn,mpn(qct)),u2(n,gZn,bZn,mpn(tat)),u2(n,gZn,hZn,mpn(eat))}function vUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,f=PDn(n,t),r=s.b-o.b-o.c,c=u.a.a,a=s.c+o.b,w=n.w,f!=(cpn(),BIt)&&f!=qIt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=f==BIt?c-2*n.w:c,f=FIt),r<c&&!n.B.Hc((n_n(),WCt)))f==BIt?a+=w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=f==BIt?c-2*n.w:c,f=FIt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),w+=e.Math.max(0,i)}for(b=BB(BB(h6(n.r,t),21),84).Kc();b.Ob();)(l=BB(b.Pb(),111)).e.a=a+l.d.b,l.e.b=(h=l.b).Xe((sWn(),aPt))?h.Hf()==(kUn(),sCt)?-h.rf().b-Gy(MD(h.We(aPt))):Gy(MD(h.We(aPt))):h.Hf()==(kUn(),sCt)?-h.rf().b:0,a+=l.d.b+l.b.rf().a+l.d.c+w}}function mUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,l=PDn(n,t),r=s.a-o.d-o.a,c=u.a.b,a=s.d+o.d,d=n.w,h=n.o.a,l!=(cpn(),BIt)&&l!=qIt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=l==BIt?c-2*n.w:c,l=FIt),r<c&&!n.B.Hc((n_n(),WCt)))l==BIt?a+=d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=l==BIt?c-2*n.w:c,l=FIt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),d+=e.Math.max(0,i)}for(w=BB(BB(h6(n.r,t),21),84).Kc();w.Ob();)(b=BB(w.Pb(),111)).e.a=(f=b.b).Xe((sWn(),aPt))?f.Hf()==(kUn(),ICt)?-f.rf().a-Gy(MD(f.We(aPt))):h+Gy(MD(f.We(aPt))):f.Hf()==(kUn(),ICt)?-f.rf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.rf().b+b.d.a+d}}function yUn(n){var t,i,r,c,a,u,o,s,f,l,b,w,d,g,p;for(n.n=Gy(MD(mMn(n.g,(HXn(),Opt)))),n.e=Gy(MD(mMn(n.g,Tpt))),n.i=n.g.b.c.length,o=n.i-1,w=0,n.j=0,n.k=0,n.a=u6(x8(Att,sVn,19,n.i,0,1)),n.b=u6(x8(Ptt,sVn,333,n.i,7,1)),u=new Wb(n.g.b);u.a<u.c.c.length;){for((c=BB(n0(u),29)).p=o,b=new Wb(c.a);b.a<b.c.c.length;)(l=BB(n0(b),10)).p=w,++w;--o}for(n.f=x8(ANt,hQn,25,w,15,1),n.c=kq(ANt,[sVn,hQn],[48,25],15,[w,3],2),n.o=new Np,n.p=new Np,t=0,n.d=0,a=new Wb(n.g.b);a.a<a.c.c.length;){for(o=(c=BB(n0(a),29)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Wb(c.a);b.a<b.c.c.length;)w=(l=BB(n0(b),10)).p,n.f[w]=l.c.p,f+=l.o.b+n.n,i=F3(new oz(ZL(fbn(l).a.Kc(),new h))),g=F3(new oz(ZL(lbn(l).a.Kc(),new h))),n.c[w][0]=g-i,n.c[w][1]=i,n.c[w][2]=g,r+=i,p+=g,i>0&&WB(n.p,l),WB(n.o,l);d=s+(t-=r),f+=t*n.e,c5(n.a,o,iln(d)),c5(n.b,o,f),n.j=e.Math.max(n.j,d),n.k=e.Math.max(n.k,f),n.d+=t,t+=p}}function kUn(){var n;kUn=O,PCt=new WI(hJn,0),sCt=new WI(mJn,1),oCt=new WI(yJn,2),SCt=new WI(kJn,3),ICt=new WI(jJn,4),SQ(),wCt=new Ak(new YK(n=BB(Vj(FCt),9),BB(SR(n,n.length),9),0)),dCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[]))),hCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[]))),ECt=ffn(EG(SCt,Pun(Gk(FCt,1),YZn,61,0,[]))),MCt=ffn(EG(ICt,Pun(Gk(FCt,1),YZn,61,0,[]))),yCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[SCt]))),bCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),jCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),gCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt]))),TCt=ffn(EG(SCt,Pun(Gk(FCt,1),YZn,61,0,[ICt]))),fCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[SCt]))),mCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,ICt]))),lCt=ffn(EG(oCt,Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt]))),kCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[SCt,ICt]))),pCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt]))),vCt=ffn(EG(sCt,Pun(Gk(FCt,1),YZn,61,0,[oCt,SCt,ICt])))}function jUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(0!=t.b){for(l=new YT,a=null,b=null,i=IJ(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),u=0,v=spn(t,0);v.b!=v.d.c;)for(g=BB(b3(v),86),GC(b)!==GC(mMn(g,(qqn(),rkt)))&&(b=SD(mMn(g,rkt)),u=0),a=null!=b?b+d0(u++,i):d0(u++,i),hon(g,rkt,a),d=new wg(spn(new bg(g).a.d,0));EE(d.a);)r5(l,w=BB(b3(d.a),188).c,l.c.b,l.c),hon(w,rkt,a);for(f=new xp,c=0;c<a.length-i;c++)for(p=spn(t,0);p.b!=p.d.c;)mZ(f,o=fx(SD(mMn(g=BB(b3(p),86),(qqn(),rkt))),0,c+1),iln(null!=(null==o?qC(AY(f.f,null)):hS(f.g,o))?BB(null==o?qC(AY(f.f,null)):hS(f.g,o),19).a+1:1));for(h=new usn(new Pb(f).a);h.b;)s=ten(h),r=iln(null!=RX(n.a,s.cd())?BB(RX(n.a,s.cd()),19).a:0),mZ(n.a,SD(s.cd()),iln(BB(s.dd(),19).a+r.a)),(!(r=BB(RX(n.b,s.cd()),19))||r.a<BB(s.dd(),19).a)&&mZ(n.b,SD(s.cd()),BB(s.dd(),19));jUn(n,l)}}function EUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(i,"Interactive node layering",1),r=new Np,w=new Wb(t.a);w.a<w.c.c.length;){for(s=(h=(l=BB(n0(w),10)).n.a)+l.o.a,s=e.Math.max(h+1,s),v=new M2(r,0),c=null;v.b<v.d.gc();){if(Px(v.b<v.d.gc()),(g=BB(v.d.Xb(v.c=v.b++),569)).c>=s){Px(v.b>0),v.a.Xb(v.c=--v.b);break}g.a>h&&(c?(gun(c.b,g.b),c.a=e.Math.max(c.a,g.a),fW(v)):(WB(g.b,l),g.c=e.Math.min(g.c,h),g.a=e.Math.max(g.a,s),c=g))}c||((c=new im).c=h,c.a=s,yR(v,c),WB(c.b,l))}for(o=t.b,f=0,p=new Wb(r);p.a<p.c.c.length;)for(g=BB(n0(p),569),(a=new HX(t)).p=f++,o.c[o.c.length]=a,d=new Wb(g.b);d.a<d.c.c.length;)PZ(l=BB(n0(d),10),a),l.p=0;for(b=new Wb(t.a);b.a<b.c.c.length;)0==(l=BB(n0(b),10)).p&&IDn(n,l,t);for(u=new M2(o,0);u.b<u.d.gc();)0==(Px(u.b<u.d.gc()),BB(u.d.Xb(u.c=u.b++),29)).a.c.length&&fW(u);t.a.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function TUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(0!=t.e.c.length&&0!=e.e.c.length){if((i=BB(xq(t.e,0),17).c.i)==(a=BB(xq(e.e,0),17).c.i))return E$(BB(mMn(BB(xq(t.e,0),17),(hWn(),wlt)),19).a,BB(mMn(BB(xq(e.e,0),17),wlt),19).a);for(f=0,l=(h=n.a).length;f<l;++f){if((s=h[f])==i)return 1;if(s==a)return-1}}return 0!=t.g.c.length&&0!=e.g.c.length?(c=BB(mMn(t,(hWn(),llt)),10),o=BB(mMn(e,llt),10),r=0,u=0,Lx(BB(xq(t.g,0),17),wlt)&&(r=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),Lx(BB(xq(e.g,0),17),wlt)&&(u=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),c&&c==o?qy(TD(mMn(BB(xq(t.g,0),17),Ilt)))&&!qy(TD(mMn(BB(xq(e.g,0),17),Ilt)))?1:!qy(TD(mMn(BB(xq(t.g,0),17),Ilt)))&&qy(TD(mMn(BB(xq(e.g,0),17),Ilt)))||r<u?-1:r>u?1:0:(n.b&&(n.b._b(c)&&(r=BB(n.b.xc(c),19).a),n.b._b(o)&&(u=BB(n.b.xc(o),19).a)),r<u?-1:r>u?1:0)):0!=t.e.c.length&&0!=e.g.c.length?1:-1}function MUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(OTn(t,O1n,1),w=new Np,y=new Np,s=new Wb(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=n2((o=BB(n0(s),29)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(uSn(),Iut)&&vA(BB(mMn(h,(HXn(),ept)),98))){for(LK(BB(mMn(h,(HXn(),ept)),98))||HNn(h),hon(h,(hWn(),rlt),h),w.c=x8(Ant,HWn,1,0,5,1),y.c=x8(Ant,HWn,1,0,5,1),e=new Np,qrn(v=new YT,DSn(h,(kUn(),sCt))),AXn(n,v,w,y,e),u=g,k=h,c=new Wb(w);c.a<c.c.c.length;)Qyn(i=BB(n0(c),10),u,o),++g,hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(i,clt),15).Fc(k);for(yQ(v),p=DSn(h,SCt).Kc();p.Ob();)r5(v,BB(p.Pb(),11),v.a,v.a.a);for(AXn(n,v,y,null,e),m=h,r=new Wb(y);r.a<r.c.c.length;)Qyn(i=BB(n0(r),10),++g,o),hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(m,clt),15).Fc(i);0==e.c.length||hon(h,xft,e)}HSn(t)}function SUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(h=BB(mMn(n,(Mrn(),sat)),33),d=DWn,g=DWn,b=_Vn,w=_Vn,v=new Wb(n.e);v.a<v.c.c.length;)E=(p=BB(n0(v),144)).d,T=p.e,d=e.Math.min(d,E.a-T.a/2),g=e.Math.min(g,E.b-T.b/2),b=e.Math.max(b,E.a+T.a/2),w=e.Math.max(w,E.b+T.b/2);for(k=new xI((j=BB(ZAn(h,(fRn(),Vct)),116)).b-d,j.d-g),o=new Wb(n.e);o.a<o.c.c.length;)cL(y=mMn(u=BB(n0(o),144),sat),239)&&SA(f=BB(y,33),(m=UR(u.d,k)).a-f.g/2,m.b-f.f/2);for(r=new Wb(n.c);r.a<r.c.c.length;)i=BB(n0(r),282),s=cDn(BB(mMn(i,sat),79),!0,!0),Ukn(S=XR(B$(i.d.d),i.c.d),i.c.e.a,i.c.e.b),IA(s,(M=UR(S,i.c.d)).a,M.b),Ukn(P=XR(B$(i.c.d),i.d.d),i.d.e.a,i.d.e.b),PA(s,(t=UR(P,i.d.d)).a,t.b);for(a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),447),SA(BB(mMn(c,sat),137),(l=UR(c.d,k)).a,l.b);KUn(h,b-d+(j.b+j.c),w-g+(j.d+j.a),!1,!0)}function PUn(n){var t,e,i,r,c,a,u,o,s,h,f;for(e=null,u=null,(r=BB(mMn(n.b,(HXn(),igt)),376))==(A6(),Jvt)&&(e=new Np,u=new Np),a=new Wb(n.d);a.a<a.c.c.length;)if((c=BB(n0(a),101)).i)switch(c.e.g){case 0:t=BB(u4(new QT(c.b)),61),r==Jvt&&t==(kUn(),sCt)?e.c[e.c.length]=c:r==Jvt&&t==(kUn(),SCt)?u.c[u.c.length]=c:Nmn(c,t);break;case 1:o=c.a.d.j,s=c.c.d.j,o==(kUn(),sCt)?bU(c,sCt,(Oun(),mst),c.a):s==sCt?bU(c,sCt,(Oun(),yst),c.c):o==SCt?bU(c,SCt,(Oun(),yst),c.a):s==SCt&&bU(c,SCt,(Oun(),mst),c.c);break;case 2:case 3:SN(i=c.b,(kUn(),sCt))?SN(i,SCt)?SN(i,ICt)?SN(i,oCt)||bU(c,sCt,(Oun(),yst),c.c):bU(c,sCt,(Oun(),mst),c.a):bU(c,sCt,(Oun(),vst),null):bU(c,SCt,(Oun(),vst),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(kUn(),sCt)||f==sCt?bU(c,SCt,(Oun(),vst),null):bU(c,sCt,(Oun(),vst),null)}e&&(0==e.c.length||QFn(e,(kUn(),sCt)),0==u.c.length||QFn(u,(kUn(),SCt)))}function IUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;for(i=BB(mMn(n,(hWn(),dlt)),33),b=BB(mMn(n,(HXn(),Bdt)),19).a,c=BB(mMn(n,jgt),19).a,Ypn(i,Bdt,iln(b)),Ypn(i,jgt,iln(c)),Pen(i,n.n.a+t.a),Ien(i,n.n.b+t.b),(0!=BB(ZAn(i,Fgt),174).gc()||n.e||GC(mMn(vW(n),_gt))===GC((Nvn(),mvt))&&pA((bvn(),(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))))&&(Sen(i,n.o.a),Men(i,n.o.b)),f=new Wb(n.j);f.a<f.c.c.length;)cL(w=mMn(s=BB(n0(f),11),dlt),186)&&(SA(r=BB(w,118),s.n.a,s.n.b),Ypn(r,upt,s.j));for(l=0!=BB(mMn(n,$gt),174).gc(),o=new Wb(n.b);o.a<o.c.c.length;)a=BB(n0(o),70),(l||0!=BB(mMn(a,$gt),174).gc())&&(MA(e=BB(mMn(a,dlt),137),a.o.a,a.o.b),SA(e,a.n.a,a.n.b));if(!Hz(BB(mMn(n,cpt),21)))for(h=new Wb(n.j);h.a<h.c.c.length;)for(u=new Wb((s=BB(n0(h),11)).f);u.a<u.c.c.length;)a=BB(n0(u),70),Sen(e=BB(mMn(a,dlt),137),a.o.a),Men(e,a.o.b),SA(e,a.n.a,a.n.b)}function CUn(n){var t,e,i,r,c;switch(OY(n,i8n),(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i+(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){case 0:throw Hp(new _y("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i?JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))):JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))}if(1==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){if(r=PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),c=PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),JJ(r)==JJ(c))return JJ(r);if(r==JJ(c))return r;if(c==JJ(r))return c}for(t=PTn(BB(U5(i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])))),82));dAn(i);)if((e=PTn(BB(U5(i),82)))!=t&&!Itn(e,t))if(JJ(e)==JJ(t))t=JJ(e);else if(!(t=B$n(t,e)))return null;return t}function OUn(n,t,i){var r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;for(OTn(i,"Polyline edge routing",1),v=Gy(MD(mMn(t,(HXn(),tgt)))),d=Gy(MD(mMn(t,Apt))),c=Gy(MD(mMn(t,kpt))),r=e.Math.min(1,c/d),k=0,s=0,0!=t.b.c.length&&(k=.4*r*(j=hLn(BB(xq(t.b,0),29)))),o=new M2(t.b,0);o.b<o.d.gc();){for(Px(o.b<o.d.gc()),(a=VC(u=BB(o.d.Xb(o.c=o.b++),29),jyt))&&k>0&&(k-=d),Tqn(u,k),l=0,w=new Wb(u.a);w.a<w.c.c.length;){for(f=0,p=new oz(ZL(lbn(b=BB(n0(w),10)).a.Kc(),new h));dAn(p);)m=g1((g=BB(U5(p),17)).c).b,y=g1(g.d).b,u!=g.d.i.c||b5(g)||(VCn(g,k,.4*r*e.Math.abs(m-y)),g.c.j==(kUn(),ICt)&&(m=0,y=0)),f=e.Math.max(f,e.Math.abs(y-m));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:Gqn(n,b,k,v)}l=e.Math.max(l,f)}o.b<o.d.gc()&&(j=hLn((Px(o.b<o.d.gc()),BB(o.d.Xb(o.c=o.b++),29))),l=e.Math.max(l,j),Px(o.b>0),o.a.Xb(o.c=--o.b)),s=.4*r*l,!a&&o.b<o.d.gc()&&(s+=d),k+=u.c.a+s}n.a.a.$b(),t.f.a=k,HSn(i)}function AUn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v;for(s=new xp,u=new pJ,i=new Wb(n.a.a.b);i.a<i.c.c.length;)if(o=f2(t=BB(n0(i),57)))jIn(s.f,o,t);else if(v=f3(t))for(r=new Wb(v.k);r.a<r.c.c.length;)JCn(u,BB(n0(r),17),t);for(e=new Wb(n.a.a.b);e.a<e.c.c.length;)if(o=f2(t=BB(n0(e),57)))for(a=new oz(ZL(lbn(o).a.Kc(),new h));dAn(a);)if(!b5(c=BB(U5(a),17))&&(w=c.c,p=c.d,!(kUn(),yCt).Hc(c.c.j)||!yCt.Hc(c.d.j))){if(d=BB(RX(s,c.d.i),57),UNn(aM(cM(uM(rM(new Hv,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==ICt&&$z((gcn(),w)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}if(p.j==oCt&&Az((gcn(),p)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}}}function $Un(n){var t,e,i,r,c,a,u,o;if(RHn(),null==n)return null;if((r=GO(n,YTn(37)))<0)return n;for(o=new lN(n.substr(0,r)),t=x8(NNt,v6n,25,4,15,1),u=0,i=0,a=n.length;r<a;r++)if(b1(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&ton((b1(r+1,n.length),n.charCodeAt(r+1)),CAt,OAt)&&ton((b1(r+2,n.length),n.charCodeAt(r+2)),CAt,OAt))if(e=IH((b1(r+1,n.length),n.charCodeAt(r+1)),(b1(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[u++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[u++]=e<<24>>24,i=2):224==(240&e)?(t[u++]=e<<24>>24,i=3):240==(248&e)&&(t[u++]=e<<24>>24,i=4)),i>0){if(u==i){switch(u){case 2:xX(o,((31&t[0])<<6|63&t[1])&QVn);break;case 3:xX(o,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&QVn)}u=0,i=0}}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,o.a+=String.fromCharCode(e)}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,xX(o,(b1(r,n.length),n.charCodeAt(r)))}return o.a}function LUn(n,t,e,i,r){var c,a,u;if(ynn(n,t),a=t[0],c=fV(e.c,0),u=-1,Yon(e))if(i>0){if(a+i>n.length)return!1;u=UCn(n.substr(0,a+i),t)}else u=UCn(n,t);switch(c){case 71:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn]),t),r.e=u,!0;case 77:return gDn(n,t,r,u,a);case 76:return pDn(n,t,r,u,a);case 69:return rIn(n,t,a,r);case 99:return cIn(n,t,a,r);case 97:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"]),t),r.b=u,!0;case 121:return vDn(n,t,a,u,e,r);case 100:return!(u<=0||(r.c=u,0));case 83:return!(u<0)&&jwn(u,a,t[0],r);case 104:12==u&&(u=0);case 75:case 72:return!(u<0||(r.f=u,r.g=!1,0));case 107:return!(u<0||(r.f=u,r.g=!0,0));case 109:return!(u<0||(r.j=u,0));case 115:return!(u<0||(r.n=u,0));case 90:if(a<n.length&&(b1(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return ITn(n,a,t,r);default:return!1}}function NUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(b=BB(BB(h6(n.r,t),21),84),t!=(kUn(),oCt)&&t!=ICt){for(a=t==sCt?(Dan(),Nrt):(Dan(),Rrt),k=t==sCt?(G7(),crt):(G7(),irt),c=(r=(i=BB(oV(n.b,t),124)).i).c+Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.b,n.C.b,n.k])),v=r.c+r.b-Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.c,n.C.c,n.k])),u=Zk(H_(a),n.t),m=t==sCt?KQn:RQn,l=b.Kc();l.Ob();)!(h=BB(l.Pb(),111)).c||h.c.d.c.length<=0||(p=h.b.rf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(o=w.n,w.e.b+o.d+o.a),OY(k,uJn),w.f=k,l9(w,(J9(),Jit)),d.c=g.a-(d.b-p.a)/2,j=e.Math.min(c,g.a),E=e.Math.max(v,g.a+p.a),d.c<j?d.c=j:d.c+d.b>E&&(d.c=E-d.b),WB(u.d,new xG(d,kln(u,d))),m=t==sCt?e.Math.max(m,g.b+h.b.rf().b):e.Math.min(m,g.b));for(m+=t==sCt?n.t:-n.t,(y=Pwn((u.e=m,u)))>0&&(BB(oV(n.b,t),124).a.b=y),f=b.Kc();f.Ob();)!(h=BB(f.Pb(),111)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else aUn(n,t)}function xUn(n){var t,e,i,r,c,a,u,o,s,f;for(t=new xp,a=new AL(n);a.e!=a.i.gc();){for(c=BB(kpn(a),33),e=new Rv,VW(Mct,c,e),f=new ut,i=BB(P4(new Rq(null,new zU(new oz(ZL(wLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)])))),83),Jen(e,BB(i.xc((hN(),!0)),14),new ot),r=BB(P4(AV(BB(i.xc(!1),15).Lc(),new st),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();r.Ob();)(s=IMn(BB(r.Pb(),79)))&&((u=BB(qC(AY(t.f,s)),21))||(u=Oxn(s),jIn(t.f,s,u)),Frn(e,u));for(i=BB(P4(new Rq(null,new zU(new oz(ZL(dLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet])))),83),Jen(e,BB(i.xc(!0),14),new ht),o=BB(P4(AV(BB(i.xc(!1),15).Lc(),new ft),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();o.Ob();)(s=CMn(BB(o.Pb(),79)))&&((u=BB(qC(AY(t.f,s)),21))||(u=Oxn(s),jIn(t.f,s,u)),Frn(e,u))}}function DUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(uHn(),(o=Vhn(n,0)<0)&&(n=j7(n)),0==Vhn(n,0))switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new Ik).a+=t<0?"0E+":"0E",b.a+=t==_Vn?"2147483648":""+-t,b.a}f=x8(ONt,WVn,25,1+(h=18),15,1),e=h,d=n;do{s=d,d=Ojn(d,10),f[--e]=dG(rbn(48,ibn(s,cbn(d,10))))&QVn}while(0!=Vhn(d,0));if(r=ibn(ibn(ibn(h,e),t),1),0==t)return o&&(f[--e]=45),Bdn(f,e,h-e);if(t>0&&Vhn(r,-6)>=0){if(Vhn(r,0)>=0){for(c=e+dG(r),u=h-1;u>=c;u--)f[u+1]=f[u];return f[++c]=46,o&&(f[--e]=45),Bdn(f,e,h-e+1)}for(a=2;sS(a,rbn(j7(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,o&&(f[--e]=45),Bdn(f,e,h-e)}return w=e+1,i=h,l=new Ck,o&&(l.a+="-"),i-w>=1?(xX(l,f[e]),l.a+=".",l.a+=Bdn(f,e+1,h-e-1)):l.a+=Bdn(f,e,h-e),l.a+="E",Vhn(r,0)>0&&(l.a+="+"),l.a+=""+vz(r),l.a}function RUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c=x8(Ant,HWn,1,0,5,1),n.i.c=x8(Ant,HWn,1,0,5,1),n.g.a.$b(),t)for(a=new Wb(t.a);a.a<a.c.c.length;)for(h=DSn(c=BB(n0(a),10),(kUn(),oCt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.e,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Iut)||u==Cut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i));if(e)for(a=new Wb(e.a);a.a<a.c.c.length;){for(o=new Wb((c=BB(n0(a),10)).j);o.a<o.c.c.length;)for(r=new Wb(BB(n0(o),11).g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))&&TU(n.g,i);for(h=DSn(c,(kUn(),ICt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.f,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Iut)||u==Cut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i))}}function KUn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(p=new xI(n.g,n.f),(g=XPn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),E=g.a/p.a,f=g.b/p.b,k=g.a-p.a,s=g.b-p.b,r)for(u=JJ(n)?BB(ZAn(JJ(n),(sWn(),bSt)),103):BB(ZAn(n,(sWn(),bSt)),103),o=GC(ZAn(n,(sWn(),uPt)))===GC((QEn(),XIt)),m=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));m.e!=m.i.gc();)switch(v=BB(kpn(m),118),(y=BB(ZAn(v,wPt),61))==(kUn(),PCt)&&(y=OFn(v,u),Ypn(v,wPt,y)),y.g){case 1:o||Pen(v,v.i*E);break;case 2:Pen(v,v.i+k),o||Ien(v,v.j*f);break;case 3:o||Pen(v,v.i*E),Ien(v,v.j+s);break;case 4:o||Ien(v,v.j*f)}if(MA(n,g.a,g.b),c)for(b=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=BB(kpn(b),137)).i+l.g/2,d=l.j+l.f/2,(j=w/p.a)+(h=d/p.b)>=1&&(j-h>0&&d>=0?(Pen(l,l.i+k),Ien(l,l.j+s*h)):j-h<0&&w>=0&&(Pen(l,l.i+k*j),Ien(l,l.j+s)));return Ypn(n,(sWn(),KSt),(mdn(),new YK(a=BB(Vj(YCt),9),BB(SR(a,a.length),9),0))),new xI(E,f)}function _Un(n){var t,i,r,c,a,u,o,s,h,f,l;if(f=JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))==JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))),u=new Gj,(t=BB(ZAn(n,(Xsn(),hIt)),74))&&t.b>=2){if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),i=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(l=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));l.e!=l.i.gc();)Qjn(l);VFn(t,BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202))}if(f)for(r=new AL((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new AL((!(i=BB(kpn(r),202)).a&&(i.a=new $L(xOt,i,5)),i.a));s.e!=s.i.gc();)o=BB(kpn(s),469),u.a=e.Math.max(u.a,o.a),u.b=e.Math.max(u.b,o.b);for(a=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));a.e!=a.i.gc();)c=BB(kpn(a),137),(h=BB(ZAn(c,gIt),8))&&SA(c,h.a,h.b),f&&(u.a=e.Math.max(u.a,c.i+c.g),u.b=e.Math.max(u.b,c.j+c.f));return u}function FUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(v=t.c.length,c=new qKn(n.a,i,null,null),E=x8(xNt,qQn,25,v,15,1),w=x8(xNt,qQn,25,v,15,1),b=x8(xNt,qQn,25,v,15,1),d=0,o=0;o<v;o++)w[o]=DWn,b[o]=_Vn;for(s=0;s<v;s++)for(l1(s,t.c.length),r=BB(t.c[s],180),E[s]=v$n(r),E[d]>E[s]&&(d=s),f=new Wb(n.a.b);f.a<f.c.c.length;)for(p=new Wb(BB(n0(f),29).a);p.a<p.c.c.length;)g=BB(n0(p),10),k=Gy(r.p[g.p])+Gy(r.d[g.p]),w[s]=e.Math.min(w[s],k),b[s]=e.Math.max(b[s],k+g.o.b);for(j=x8(xNt,qQn,25,v,15,1),h=0;h<v;h++)(l1(h,t.c.length),BB(t.c[h],180)).o==(oZ(),ryt)?j[h]=w[d]-w[h]:j[h]=b[d]-b[h];for(a=x8(xNt,qQn,25,v,15,1),l=new Wb(n.a.b);l.a<l.c.c.length;)for(y=new Wb(BB(n0(l),29).a);y.a<y.c.c.length;){for(m=BB(n0(y),10),u=0;u<v;u++)a[u]=Gy((l1(u,t.c.length),BB(t.c[u],180)).p[m.p])+Gy((l1(u,t.c.length),BB(t.c[u],180)).d[m.p])+j[u];a.sort(ien(T.prototype.te,T,[])),c.p[m.p]=(a[1]+a[2])/2,c.d[m.p]=0}return c}function BUn(n,t,e){var i,r,c,a,u;switch(i=t.i,c=n.i.o,r=n.i.d,u=n.n,a=Aon(Pun(Gk(PMt,1),sVn,8,0,[u,n.a])),n.j.g){case 1:WD(t,(G7(),irt)),i.d=-r.d-e-i.a,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 2:l9(t,(J9(),Yit)),i.c=c.a+r.c+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e);break;case 3:WD(t,(G7(),crt)),i.d=c.b+r.a+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 4:l9(t,(J9(),Jit)),i.c=-r.b-e-i.b,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jIt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e)}}function HUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O;for(w=0,S=0,s=new Wb(n);s.a<s.c.c.length;)ozn(o=BB(n0(s),33)),w=e.Math.max(w,o.g),S+=o.g*o.f;for(M=Zyn(n,S/n.c.length),S+=n.c.length*M,w=e.Math.max(w,e.Math.sqrt(S*u))+i.b,C=i.b,O=i.d,b=0,f=i.b+i.c,DH(T=new YT,iln(0)),j=new YT,h=new M2(n,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),I=(o=BB(h.d.Xb(h.c=h.b++),33)).g,l=o.f,C+I>w&&(a&&(fO(j,b),fO(T,iln(h.b-1))),C=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+I)),Pen(o,C),Ien(o,O),f=e.Math.max(f,C+I+i.c),b=e.Math.max(b,l),C+=I+t;if(f=e.Math.max(f,r),(P=O+b+i.a)<c&&(b+=c-P,P=c),a)for(C=i.b,h=new M2(n,0),fO(T,iln(n.c.length)),p=BB(b3(E=spn(T,0)),19).a,fO(j,b),k=spn(j,0),y=0;h.b<h.d.gc();)h.b==p&&(C=i.b,y=Gy(MD(b3(k))),p=BB(b3(E),19).a),Px(h.b<h.d.gc()),v=(o=BB(h.d.Xb(h.c=h.b++),33)).f,Men(o,y),d=y,h.b==p&&(g=f-C-i.c,m=o.g,Sen(o,g),lIn(o,new xI(g,d),new xI(m,v))),C+=o.g+t;return new xI(f,P)}function qUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(OTn(t,"Compound graph postprocessor",1),i=qy(TD(mMn(n,(HXn(),Dpt)))),o=BB(mMn(n,(hWn(),Hft)),224),f=new Rv,v=o.ec().Kc();v.Ob();){for(p=BB(v.Pb(),17),u=new t_(o.cc(p)),SQ(),m$(u,new _w(n)),j=ccn((l1(0,u.c.length),BB(u.c[0],243))),T=acn(BB(xq(u,u.c.length-1),243)),y=j.i,m=wan(T.i,y)?y.e:vW(y),l=Apn(p,u),yQ(p.a),b=null,a=new Wb(u);a.a<a.c.c.length;)c=BB(n0(a),243),OPn(g=new Gj,c.a,m),w=c.b,Wsn(r=new km,0,w.a),Ztn(r,g),k=new wA(g1(w.c)),E=new wA(g1(w.d)),UR(k,g),UR(E,g),b&&(0==r.b?d=E:(Px(0!=r.b),d=BB(r.a.a.c,8)),M=e.Math.abs(b.a-d.a)>lZn,S=e.Math.abs(b.b-d.b)>lZn,(!i&&M&&S||i&&(M||S))&&DH(p.a,k)),Frn(p.a,r),0==r.b?b=k:(Px(0!=r.b),b=BB(r.c.b.c,8)),Yan(w,l,g),acn(c)==T&&(vW(T.i)!=c.a&&OPn(g=new Gj,vW(T.i),m),hon(p,Rlt,g)),MSn(w,p,m),f.a.zc(w,f);SZ(p,j),MZ(p,T)}for(h=f.a.ec().Kc();h.Ob();)SZ(s=BB(h.Pb(),17),null),MZ(s,null);HSn(t)}function GUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(1==n.gc())return BB(n.Xb(0),231);if(n.gc()<=0)return new y6;for(c=n.Kc();c.Ob();){for(i=BB(c.Pb(),231),d=0,f=DWn,l=DWn,s=_Vn,h=_Vn,w=new Wb(i.e);w.a<w.c.c.length;)b=BB(n0(w),144),d+=BB(mMn(b,(fRn(),Zct)),19).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);hon(i,(fRn(),Zct),iln(d)),hon(i,(Mrn(),oat),new xI(f,l)),hon(i,uat,new xI(s,h))}for(SQ(),n.ad(new wt),qan(g=new y6,BB(n.Xb(0),94)),o=0,m=0,a=n.Kc();a.Ob();)i=BB(a.Pb(),231),p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8)),o=e.Math.max(o,p.a),m+=p.a*p.b;for(o=e.Math.max(o,e.Math.sqrt(m)*Gy(MD(mMn(g,(fRn(),Fct))))),y=0,k=0,u=0,t=v=Gy(MD(mMn(g,cat))),r=n.Kc();r.Ob();)i=BB(r.Pb(),231),y+(p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8))).a>o&&(y=0,k+=u+v,u=0),VKn(g,i,y,k),t=e.Math.max(t,y+p.a),u=e.Math.max(u,p.b),y+=p.a+v;return g}function zUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;switch(h=new km,n.a.g){case 3:l=BB(mMn(t.e,(hWn(),Nlt)),15),b=BB(mMn(t.j,Nlt),15),w=BB(mMn(t.f,Nlt),15),e=BB(mMn(t.e,$lt),15),i=BB(mMn(t.j,$lt),15),r=BB(mMn(t.f,$lt),15),gun(a=new Np,l),b.Jc(new yc),gun(a,cL(b,152)?o6(BB(b,152)):cL(b,131)?BB(b,131).a:cL(b,54)?new fy(b):new IT(b)),gun(a,w),gun(c=new Np,e),gun(c,cL(i,152)?o6(BB(i,152)):cL(i,131)?BB(i,131).a:cL(i,54)?new fy(i):new IT(i)),gun(c,r),hon(t.f,Nlt,a),hon(t.f,$lt,c),hon(t.f,xlt,t.f),hon(t.e,Nlt,null),hon(t.e,$lt,null),hon(t.j,Nlt,null),hon(t.j,$lt,null);break;case 1:Frn(h,t.e.a),DH(h,t.i.n),Frn(h,ean(t.j.a)),DH(h,t.a.n),Frn(h,t.f.a);break;default:Frn(h,t.e.a),Frn(h,ean(t.j.a)),Frn(h,t.f.a)}yQ(t.f.a),Frn(t.f.a,h),SZ(t.f,t.e.c),u=BB(mMn(t.e,(HXn(),vgt)),74),s=BB(mMn(t.j,vgt),74),o=BB(mMn(t.f,vgt),74),(u||s||o)&&(PU(f=new km,o),PU(f,s),PU(f,u),hon(t.f,vgt,f)),SZ(t.j,null),MZ(t.j,null),SZ(t.e,null),MZ(t.e,null),PZ(t.a,null),PZ(t.i,null),t.g&&zUn(n,t.g)}function UUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(PFn(),null==n)return null;if((w=bln(c=V7(n)))%4!=0)return null;if(0==(d=w/4|0))return x8(NNt,v6n,25,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,u=0,o=0,s=0,b=0,l=0,h=0,f=x8(NNt,v6n,25,3*d,15,1);b<d-1;b++){if(!(VE(a=c[h++])&&VE(u=c[h++])&&VE(o=c[h++])&&VE(s=c[h++])))return null;t=WLt[a],e=WLt[u],i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return VE(a=c[h++])&&VE(u=c[h++])?(t=WLt[a],e=WLt[u],o=c[h++],s=c[h++],-1==WLt[o]||-1==WLt[s]?61==o&&61==s?0!=(15&e)?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=o&&61==s?0!=(3&(i=WLt[o]))?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=WLt[o],r=WLt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function XUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(t,O1n,1),l=BB(mMn(n,(HXn(),Zdt)),218),i=new Wb(n.b);i.a<i.c.c.length;)for(a=0,u=(c=n2(BB(n0(i),29).a)).length;a<u;++a)if((r=c[a]).k==(uSn(),Cut)){if(l==(Mbn(),JPt))for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||Agn(o),0==o.g.c.length||$gn(o);else if(cL(mMn(r,(hWn(),dlt)),17))w=BB(mMn(r,dlt),17),d=BB(DSn(r,(kUn(),ICt)).Kc().Pb(),11),g=BB(DSn(r,oCt).Kc().Pb(),11),p=BB(mMn(d,dlt),11),SZ(w,v=BB(mMn(g,dlt),11)),MZ(w,p),(m=new wA(g.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[v.i.n,v.n,v.a])).a,DH(w.a,m),(m=new wA(d.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).a,DH(w.a,m);else{if(r.j.c.length>=2){for(b=!0,e=BB(n0(h=new Wb(r.j)),11),f=null;h.a<h.c.c.length;)if(f=e,e=BB(n0(h),11),!Nfn(mMn(f,dlt),mMn(e,dlt))){b=!1;break}}else b=!1;for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||uxn(o,b),0==o.g.c.length||oxn(o,b)}PZ(r,null)}HSn(t)}function WUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;return y=n.c[(l1(0,t.c.length),BB(t.c[0],17)).p],T=n.c[(l1(1,t.c.length),BB(t.c[1],17)).p],!(y.a.e.e-y.a.a-(y.b.e.e-y.b.a)==0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)==0||!cL(v=y.b.e.f,10)||(p=BB(v,10),j=n.i[p.p],E=p.c?E7(p.c.a,p,0):-1,a=RQn,E>0&&(c=BB(xq(p.c.a,E-1),10),u=n.i[c.p],M=e.Math.ceil(K$(n.n,c,p)),a=j.a.e-p.d.d-(u.a.e+c.o.b+c.d.a)-M),h=RQn,E<p.c.a.c.length-1&&(s=BB(xq(p.c.a,E+1),10),f=n.i[s.p],M=e.Math.ceil(K$(n.n,s,p)),h=f.a.e-s.d.d-(j.a.e+p.o.b+p.d.a)-M),!(i&&(h$(),rin(A3n),e.Math.abs(a-h)<=A3n||a==h||isNaN(a)&&isNaN(h)))&&(r=aX(y.a),o=-aX(y.b),l=-aX(T.a),m=aX(T.b),g=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)>0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)<0,d=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)<0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)>0,w=y.a.e.e+y.b.a<T.b.e.e+T.a.a,b=y.a.e.e+y.b.a>T.b.e.e+T.a.a,k=0,!g&&!d&&(b?a+l>0?k=l:h-r>0&&(k=r):w&&(a+o>0?k=o:h-m>0&&(k=m))),j.a.e+=k,j.b&&(j.d.e+=k),1)))}function VUn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(r=new UV(t.qf().a,t.qf().b,t.rf().a,t.rf().b),c=new bA,n.c)for(u=new Wb(t.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+t.qf().a,c.d=a.qf().b+t.qf().b,c.b=a.rf().a,c.a=a.rf().b,IPn(r,c);for(h=new Wb(t.Cf());h.a<h.c.c.length;){if(f=(s=BB(n0(h),838)).qf().a+t.qf().a,l=s.qf().b+t.qf().b,n.e&&(c.c=f,c.d=l,c.b=s.rf().a,c.a=s.rf().b,IPn(r,c)),n.d)for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+f,c.d=a.qf().b+l,c.b=a.rf().a,c.a=a.rf().b,IPn(r,c);if(n.b){if(b=new xI(-i,-i),BB(t.We((sWn(),fPt)),174).Hc((lCn(),rCt)))for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),b.a+=a.rf().a+i,b.b+=a.rf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),X_n(r,s.Bf(),s.zf(),t,s,b,i)}}n.b&&X_n(r,t.Bf(),t.zf(),t,null,null,i),(o=new A_(t.Af())).d=e.Math.max(0,t.qf().b-r.d),o.a=e.Math.max(0,r.d+r.a-(t.qf().b+t.rf().b)),o.b=e.Math.max(0,t.qf().a-r.c),o.c=e.Math.max(0,r.c+r.b-(t.qf().a+t.rf().a)),t.Ef(o)}function QUn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function YUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(o=new Np,f=t.length,a=Con(e),s=0;s<f;++s){switch(h=yN(t,YTn(61),s),c=(r=uun(i=fln(a,t.substr(s,h-s)))).Aj().Nh(),fV(t,++h)){case 39:u=lx(t,39,++h),WB(o,new IC(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 34:u=lx(t,34,++h),WB(o,new IC(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 91:WB(o,new IC(i,l=new Np));n:for(;;){switch(fV(t,++h)){case 39:u=lx(t,39,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 34:u=lx(t,34,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));l.c[l.c.length]=null,h+=3}if(!(h<f))break;switch(b1(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw Hp(new dy("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));WB(o,new IC(i,null)),s=h+3}if(!(s<f))break;if(b1(s,t.length),44!=t.charCodeAt(s))throw Hp(new dy("Expecting ,"))}return iDn(n,o,e)}function JUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(s=BB(BB(h6(n.r,t),21),84),a=JTn(n,t),e=n.u.Hc((lCn(),nCt)),o=s.Kc();o.Ob();)if((u=BB(o.Pb(),111)).c&&!(u.c.d.c.length<=0)){switch(l=u.b.rf(),(f=(h=u.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=-f.a-n.t,WD(h,(G7(),irt));break;case 3:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=l.b+n.t,WD(h,(G7(),crt));break;case 2:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=l.a+n.s,l9(h,(J9(),Yit));break;case 4:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=-f.b-n.s,l9(h,(J9(),Jit))}a=!1}}function ZUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(wWn(),0==NT(iNt)){for(f=x8(CNt,sVn,117,cNt.length,0,1),a=0;a<f.length;a++)f[a]=new M0(4);for(i=new Pk,c=0;c<eNt.length;c++){if(h=new M0(4),c<84?(b1(u=2*c,vnt.length),l=vnt.charCodeAt(u),b1(u+1,vnt.length),Yxn(h,l,vnt.charCodeAt(u+1))):Yxn(h,aNt[u=2*(c-84)],aNt[u+1]),mK(o=eNt[c],"Specials")&&Yxn(h,65520,65533),mK(o,gnt)&&(Yxn(h,983040,1048573),Yxn(h,1048576,1114109)),mZ(iNt,o,h),mZ(rNt,o,$Fn(h)),0<(s=i.a.length)?i.a=i.a.substr(0,0):0>s&&(i.a+=rL(x8(ONt,WVn,25,-s,15,1))),i.a+="Is",GO(o,YTn(32))>=0)for(r=0;r<o.length;r++)b1(r,o.length),32!=o.charCodeAt(r)&&NX(i,(b1(r,o.length),o.charCodeAt(r)));else i.a+=""+o;Tdn(i.a,o,!0)}Tdn(pnt,"Cn",!1),Tdn(mnt,"Cn",!0),Yxn(e=new M0(4),0,unt),mZ(iNt,"ALL",e),mZ(rNt,"ALL",$Fn(e)),!SNt&&(SNt=new xp),mZ(SNt,pnt,pnt),!SNt&&(SNt=new xp),mZ(SNt,mnt,mnt),!SNt&&(SNt=new xp),mZ(SNt,"ALL","ALL")}return BB(SJ(t?iNt:rNt,n),136)}function nXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,vA(BB(mMn(i,(HXn(),ept)),98))){a=!1,u=!1;n:for(w=new Wb(i.j);w.a<w.c.c.length;)for(b=BB(n0(w),11),d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(b),new Gw(b)])));dAn(d);)if(!qy(TD(mMn(BB(U5(d),11).i,Tdt)))){if(b.j==(kUn(),sCt)){a=!0;break n}if(b.j==SCt){u=!0;break n}}l=u&&!a,f=a&&!u}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Wb(i.b);s.a<s.c.c.length;)h+=(o=BB(n0(s),70)).n.b+o.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=BB(mMn(i,(hWn(),Klt)),15))?l?c=g:(r=BB(mMn(i,Dft),15))?c=g.gc()<=r.gc()?g:r:(c=new Np,hon(i,Dft,c)):(c=new Np,hon(i,Klt,c)):(r=BB(mMn(i,(hWn(),Dft)),15))?f?c=r:(g=BB(mMn(i,Klt),15))?c=r.gc()<=g.gc()?r:g:(c=new Np,hon(i,Klt,c)):(c=new Np,hon(i,Dft,c)),c.Fc(n),hon(n,(hWn(),Kft),e),t.d==e?(MZ(t,null),e.e.c.length+e.g.c.length==0&&IZ(e,null),gsn(e)):(SZ(t,null),e.e.c.length+e.g.c.length==0&&IZ(e,null)),yQ(t.a)}function tXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C;for(v=new M2(n.b,0),d=0,s=BB((f=t.Kc()).Pb(),19).a,k=0,e=new Rv,E=new fA;v.b<v.d.gc();){for(Px(v.b<v.d.gc()),y=new Wb(BB(v.d.Xb(v.c=v.b++),29).a);y.a<y.c.c.length;){for(w=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(w);)l=BB(U5(w),17),E.a.zc(l,E);for(b=new oz(ZL(fbn(m).a.Kc(),new h));dAn(b);)l=BB(U5(b),17),E.a.Bc(l)}if(d+1==s){for(yR(v,r=new HX(n)),yR(v,c=new HX(n)),M=E.a.ec().Kc();M.Ob();)T=BB(M.Pb(),17),e.a._b(T)||(++k,e.a.zc(T,e)),hon(a=new $vn(n),(HXn(),ept),(QEn(),VIt)),PZ(a,r),Bl(a,(uSn(),Tut)),IZ(g=new ISn,a),qIn(g,(kUn(),ICt)),IZ(S=new ISn,a),qIn(S,oCt),hon(i=new $vn(n),ept,VIt),PZ(i,c),Bl(i,Tut),IZ(p=new ISn,i),qIn(p,ICt),IZ(P=new ISn,i),qIn(P,oCt),SZ(j=new wY,T.c),MZ(j,g),SZ(C=new wY,S),MZ(C,p),SZ(T,P),u=new v3(a,i,j,C,T),hon(a,(hWn(),Rft),u),hon(i,Rft,u),(I=j.c.i).k==Tut&&((o=BB(mMn(I,Rft),305)).d=u,u.g=o);if(!f.Ob())break;s=BB(f.Pb(),19).a}++d}return iln(k)}function eXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(f=0,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)qy(TD(ZAn(i=BB(kpn(r),33),(HXn(),Ggt))))||(GC(ZAn(t,Ldt))===GC((mon(),Nvt))&&GC(ZAn(t,Gdt))!==GC((Vvn(),Eht))&&GC(ZAn(t,Gdt))!==GC((Vvn(),kht))&&!qy(TD(ZAn(t,xdt)))&&GC(ZAn(t,Idt))===GC((Bfn(),wut))||qy(TD(ZAn(i,$dt)))||(Ypn(i,(hWn(),wlt),iln(f)),++f),wzn(n,i,e));for(f=0,s=new AL((!t.b&&(t.b=new eU(_Ot,t,12,3)),t.b));s.e!=s.i.gc();)u=BB(kpn(s),79),(GC(ZAn(t,(HXn(),Ldt)))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&(Ypn(u,(hWn(),wlt),iln(f)),++f),w=PMn(u),d=OMn(u),h=qy(TD(ZAn(w,wgt))),b=!qy(TD(ZAn(u,Ggt))),l=h&&QCn(u)&&qy(TD(ZAn(u,dgt))),c=JJ(w)==t&&JJ(w)==JJ(d),a=(JJ(w)==t&&d==t)^(JJ(d)==t&&w==t),b&&!l&&(a||c)&&uWn(n,u,t,e);if(JJ(t))for(o=new AL(iQ(JJ(t)));o.e!=o.i.gc();)(w=PMn(u=BB(kpn(o),79)))==t&&QCn(u)&&(l=qy(TD(ZAn(w,(HXn(),wgt))))&&qy(TD(ZAn(u,dgt))))&&uWn(n,u,t,e)}function iXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(OTn(i,"MinWidth layering",1),w=t.b,T=t.a,A=BB(mMn(t,(HXn(),Egt)),19).a,o=BB(mMn(t,Tgt),19).a,n.b=Gy(MD(mMn(t,ypt))),n.d=RQn,k=new Wb(T);k.a<k.c.c.length;)(m=BB(n0(k),10)).k==(uSn(),Iut)&&(P=m.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),M=T.c.length,n.c=x8(ANt,hQn,25,M,15,1),n.f=x8(ANt,hQn,25,M,15,1),n.e=x8(xNt,qQn,25,M,15,1),h=0,n.a=0,j=new Wb(T);j.a<j.c.c.length;)(m=BB(n0(j),10)).p=h++,n.c[m.p]=whn(fbn(m)),n.f[m.p]=whn(lbn(m)),n.e[m.p]=m.o.b/n.d,n.a+=n.e[m.p];for(n.b/=n.d,n.a/=M,E=jOn(T),m$(T,QW(new Kd(n))),g=RQn,d=DWn,u=null,O=A,C=A,a=o,c=o,A<0&&(O=BB(Tmt.a.zd(),19).a,C=BB(Tmt.b.zd(),19).a),o<0&&(a=BB(Emt.a.zd(),19).a,c=BB(Emt.b.zd(),19).a),I=O;I<=C;I++)for(r=a;r<=c;r++)v=Gy(MD((S=LBn(n,I,r,T,E)).a)),p=(b=BB(S.b,15)).gc(),(v<g||v==g&&p<d)&&(g=v,d=p,u=b);for(l=u.Kc();l.Ob();){for(f=BB(l.Pb(),15),s=new HX(t),y=f.Kc();y.Ob();)PZ(m=BB(y.Pb(),10),s);w.c[w.c.length]=s}JPn(w),T.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function rXn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(n.b=t,n.a=BB(mMn(t,(HXn(),hgt)),19).a,n.c=BB(mMn(t,lgt),19).a,0==n.c&&(n.c=DWn),g=new M2(t.b,0);g.b<g.d.gc();){for(Px(g.b<g.d.gc()),d=BB(g.d.Xb(g.c=g.b++),29),o=new Np,l=-1,y=-1,m=new Wb(d.a);m.a<m.c.c.length;)v=BB(n0(m),10),F3((q_(),new oz(ZL(hbn(v).a.Kc(),new h))))>=n.a&&(r=yBn(n,v),l=e.Math.max(l,r.b),y=e.Math.max(y,r.d),WB(o,new rC(v,r)));for(E=new Np,f=0;f<l;++f)kG(E,0,(Px(g.b>0),g.a.Xb(g.c=--g.b),yR(g,T=new HX(n.b)),Px(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),T));for(u=new Wb(o);u.a<u.c.c.length;)if(c=BB(n0(u),46),w=BB(c.b,571).a)for(b=new Wb(w);b.a<b.c.c.length;)ukn(n,BB(n0(b),10),Uut,E);for(i=new Np,s=0;s<y;++s)WB(i,(yR(g,M=new HX(n.b)),M));for(a=new Wb(o);a.a<a.c.c.length;)if(c=BB(n0(a),46),j=BB(c.b,571).c)for(k=new Wb(j);k.a<k.c.c.length;)ukn(n,BB(n0(k),10),Xut,i)}for(p=new M2(t.b,0);p.b<p.d.gc();)Px(p.b<p.d.gc()),0==BB(p.d.Xb(p.c=p.b++),29).a.c.length&&fW(p)}function cXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(OTn(i,"Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void HSn(i);v=Gy(MD(mMn(t,(HXn(),Apt)))),o=Gy(MD(mMn(t,Tpt))),u=Gy(MD(mMn(t,kpt))),T=BB(mMn(t,rgt),336)==(Usn(),rmt),E=Gy(MD(mMn(t,cgt))),n.d=t,n.j.c=x8(Ant,HWn,1,0,5,1),n.a.c=x8(Ant,HWn,1,0,5,1),$U(n.k),f=VC((s=BB(xq(t.b,0),29)).a,(dxn(),jyt)),l=VC((d=BB(xq(t.b,t.b.c.length-1),29)).a,jyt),g=new Wb(t.b),p=null,I=0;do{for(RUn(n,p,m=g.a<g.c.c.length?BB(n0(g),29):null),MFn(n),P=0,y=I,b=!p||f&&p==s,w=!m||l&&m==d,(M=_k(rcn(NV(AV(new Rq(null,new w1(n.i,16)),new ya),new ma))))>0?(h=0,p&&(h+=o),h+=(M-1)*u,m&&(h+=o),T&&m&&(h=e.Math.max(h,nxn(m,u,v,E))),h<v&&!b&&!w&&(P=(v-h)/2,h=v),y+=h):!b&&!w&&(y+=v),m&&Tqn(m,y),j=new Wb(n.i);j.a<j.c.c.length;)(k=BB(n0(j),128)).a.c=I,k.a.b=y-I,k.F=P,k.p=!p;gun(n.a,n.i),I=y,m&&(I+=m.c.a),p=m,b=w}while(m);for(c=new Wb(n.j);c.a<c.c.c.length;)a=man(n,r=BB(n0(c),17)),hon(r,(hWn(),$lt),a),S=Dxn(n,r),hon(r,Nlt,S);t.f.a=I,n.d=null,HSn(i)}function aXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(d=0!=n.i,v=!1,g=null,mA(n.e)){if((h=t.gc())>0){for(l=h<100?null:new Fj(h),w=(s=new jcn(t)).g,g=x8(ANt,hQn,25,h,15,1),i=0,m=new gtn(h),r=0;r<n.i;++r){b=u=n.g[r];n:for(p=0;p<2;++p){for(o=h;--o>=0;)if(null!=b?Nfn(b,w[o]):GC(b)===GC(w[o])){g.length<=i&&aHn(g,0,g=x8(ANt,hQn,25,2*g.length,15,1),0,i),g[i++]=r,f9(m,w[o]);break n}if(GC(b)===GC(u))break}}if(s=m,w=m.g,h=i,i>g.length&&aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i),i>0){for(v=!0,c=0;c<i;++c)l=zK(n,BB(b=w[c],72),l);for(a=i;--a>=0;)Lyn(n,g[a]);if(i!=h){for(r=h;--r>=i;)Lyn(s,r);aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i)}t=s}}}else for(t=jyn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(Lyn(n,r),v=!0);if(v){if(null!=g){for(f=1==(e=t.gc())?yZ(n,4,t.Kc().Pb(),null,g[0],d):yZ(n,6,t,g,g[0],d),l=e<100?null:new Fj(e),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l?(l.Ei(f),l.Fi()):ban(n.e,f)}else{for(l=$K(t.gc()),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l&&l.Fi()}return!0}return!1}function uXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m;for((e=new hvn(t)).a||g_n(t),s=lRn(t),o=new pJ,g=new Qxn,d=new Wb(t.a);d.a<d.c.c.length;)for(r=new oz(ZL(lbn(BB(n0(d),10)).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c.i.k!=(uSn(),Mut)&&i.d.i.k!=Mut||JCn(o,upn((f=lzn(n,i,s,g)).d),f.a);for(a=new Np,m=BB(mMn(e.c,(hWn(),Xft)),21).Kc();m.Ob();){switch(v=BB(m.Pb(),61),w=g.c[v.g],b=g.b[v.g],u=g.a[v.g],c=null,p=null,v.g){case 4:c=new UV(n.d.a,w,s.b.a-n.d.a,b-w),p=new UV(n.d.a,w,u,b-w),zH(s,new xI(c.c+c.b,c.d)),zH(s,new xI(c.c+c.b,c.d+c.a));break;case 2:c=new UV(s.a.a,w,n.c.a-s.a.a,b-w),p=new UV(n.c.a-u,w,u,b-w),zH(s,new xI(c.c,c.d)),zH(s,new xI(c.c,c.d+c.a));break;case 1:c=new UV(w,n.d.b,b-w,s.b.b-n.d.b),p=new UV(w,n.d.b,b-w,u),zH(s,new xI(c.c,c.d+c.a)),zH(s,new xI(c.c+c.b,c.d+c.a));break;case 3:c=new UV(w,s.a.b,b-w,n.c.b-s.a.b),p=new UV(w,n.c.b-u,b-w,u),zH(s,new xI(c.c,c.d)),zH(s,new xI(c.c+c.b,c.d))}c&&((l=new nm).d=v,l.b=c,l.c=p,l.a=JQ(BB(h6(o,upn(v)),21)),a.c[a.c.length]=l)}return gun(e.b,a),e.d=Bhn(nGn(s)),e}function oXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(null==i.p[t.p]){o=!0,i.p[t.p]=0,u=t,d=i.o==(oZ(),ryt)?KQn:RQn;do{c=n.b.e[u.p],a=u.c.a.c.length,i.o==ryt&&c>0||i.o==cyt&&c<a-1?(s=null,h=null,s=i.o==cyt?BB(xq(u.c.a,c+1),10):BB(xq(u.c.a,c-1),10),oXn(n,h=i.g[s.p],i),d=n.e.bg(d,t,u),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=K$(n.d,u,s),i.o==cyt?(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d-w-u.d.a-u.o.b-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])+s.o.b+s.d.a+w+u.d.d-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=Gy(MD(mMn(n.a,(HXn(),Opt)))),b=krn(n,i.j[t.p]),f=krn(n,i.j[h.p]),i.o==cyt?U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])+u.o.b+u.d.a+w-(Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d)):U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])-u.d.d-Gy(i.p[h.p])-Gy(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.bg(d,t,u),u=i.a[u.p]}while(u!=t);Ov(n.e,t)}}function sXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(f=t,h=new pJ,l=new pJ,c=N2(f,x6n),GSn((i=new fQ(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new HL(h,h.c))).Kc();d.Ob();)for(w=BB(d.Pb(),202),u=BB(h6(h,w),21).Kc();u.Ob();){if(a=u.Pb(),!(b=BB(sen(n.d,a),202)))throw r=R2(f,q6n),Hp(new ek(V6n+a+Q6n+r+W6n));!w.e&&(w.e=new hK(FOt,w,10,9)),f9(w.e,b)}for(p=(l.i||(l.i=new HL(l,l.c))).Kc();p.Ob();)for(g=BB(p.Pb(),202),s=BB(h6(l,g),21).Kc();s.Ob();){if(o=s.Pb(),!(b=BB(sen(n.d,o),202)))throw r=R2(f,q6n),Hp(new ek(V6n+o+Q6n+r+W6n));!g.g&&(g.g=new hK(FOt,g,9,10)),f9(g.g,b)}!e.b&&(e.b=new hK(KOt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new hK(KOt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new hK(KOt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new hK(KOt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new eU(FOt,e,6,6)),e.a).i&&(Svn(v=BB(Wtn((!e.a&&(e.a=new eU(FOt,e,6,6)),e.a),0),202))||Pvn(v)||(Lin(v,BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),Nin(v,BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82))))}function hXn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,k=(m=n.a).length;y<k;++y){for(v=m[y],s=DWn,h=DWn,w=new Wb(v.e);w.a<w.c.c.length;)(a=(l=BB(n0(w),10)).c?E7(l.c.a,l,0):-1)>0?(f=BB(xq(l.c.a,a-1),10),T=K$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+T)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=BB(xq(l.c.a,a+1),10),T=K$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+T)):p=2*l.n.b,h=e.Math.min(p,h);for(o=DWn,c=!1,S=new Wb((r=BB(xq(v.e,0),10)).j);S.a<S.c.c.length;)for(M=BB(n0(S),11),d=r.n.b+M.n.b+M.a.b,i=new Wb(M.e);i.a<i.c.c.length;)t=(j=BB(n0(i),17).c).i.n.b+j.n.b+j.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);for(E=new Wb((u=BB(xq(v.e,v.e.c.length-1),10)).j);E.a<E.c.c.length;)for(j=BB(n0(E),11),d=u.n.b+j.n.b+j.a.b,i=new Wb(j.g);i.a<i.c.c.length;)t=(M=BB(n0(i),17).d).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);if(c&&0!=o)for(b=new Wb(v.e);b.a<b.c.c.length;)(l=BB(n0(b),10)).n.b+=o}}function fXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.e,t)){if(FT(BB(RX(n.e,t),53),e))return-1}else VW(n.e,t,new Rv);if(hU(n.e,e)){if(FT(BB(RX(n.a,e),53),t))return 1}else VW(n.e,e,new Rv);if(n.c==(mon(),xvt)||!Lx(t,(hWn(),wlt))||!Lx(e,(hWn(),wlt))){if(o=BB(EN(M4(Qon(AV(new Rq(null,new w1(t.j,16)),new sc)),new hc)),11),h=BB(EN(M4(Qon(AV(new Rq(null,new w1(e.j,16)),new fc)),new lc)),11),o&&h){if(u=o.i,s=h.i,u&&u==s){for(l=new Wb(u.j);l.a<l.c.c.length;){if((f=BB(n0(l),11))==o)return aKn(n,e,t),-1;if(f==h)return aKn(n,t,e),1}return E$(iEn(n,t),iEn(n,e))}for(d=0,g=(w=n.d).length;d<g;++d){if((b=w[d])==u)return aKn(n,e,t),-1;if(b==s)return aKn(n,t,e),1}}if(!Lx(t,(hWn(),wlt))||!Lx(e,wlt))return(r=iEn(n,t))>(a=iEn(n,e))?aKn(n,t,e):aKn(n,e,t),r<a?-1:r>a?1:0}return(i=BB(mMn(t,(hWn(),wlt)),19).a)>(c=BB(mMn(e,wlt),19).a)?aKn(n,t,e):aKn(n,e,t),i<c?-1:i>c?1:0}function lXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(qy(TD(ZAn(t,(sWn(),zSt)))))return SQ(),SQ(),set;if(o=0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,s=!(h=yCn(t)).dc(),o||s){if(!(r=BB(ZAn(t,mPt),149)))throw Hp(new rk("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(d=OI(r,(hAn(),nAt)),Ngn(t),!o&&s&&!d)return SQ(),SQ(),set;if(u=new Np,GC(ZAn(t,ESt))===GC((ufn(),pIt))&&(OI(r,YOt)||OI(r,QOt)))for(l=pRn(n,t),Frn(b=new YT,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=b.b;)Ngn(f=BB(0==b.b?null:(Px(0!=b.b),Atn(b,b.a.a)),33)),GC(ZAn(f,ESt))===GC(mIt)||P8(f,eSt)&&!j5(r,ZAn(f,mPt))?(gun(u,lXn(n,f,e,i)),Ypn(f,ESt,mIt),KKn(f)):Frn(b,(!f.a&&(f.a=new eU(UOt,f,10,11)),f.a));else for(l=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,a=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));a.e!=a.i.gc();)gun(u,lXn(n,c=BB(kpn(a),33),e,i)),KKn(c);for(w=new Wb(u);w.a<w.c.c.length;)Ypn(BB(n0(w),79),zSt,(hN(),!0));return Ugn(t,r,mcn(i,l)),w_n(u),s&&d?h:(SQ(),SQ(),set)}return SQ(),SQ(),set}function bXn(n,t,e,i,r,c,a,u,o){var s,h,f,l,b,w,d;switch(b=e,Bl(h=new $vn(o),(uSn(),Mut)),hon(h,(hWn(),Yft),a),hon(h,(HXn(),ept),(QEn(),XIt)),d=Gy(MD(n.We(tpt))),hon(h,tpt,d),IZ(f=new ISn,h),t!=QIt&&t!=YIt||(b=i>=0?hwn(u):Tln(hwn(u)),n.Ye(upt,b)),s=new Gj,l=!1,n.Xe(npt)?(Hx(s,BB(n.We(npt),8)),l=!0):yL(s,a.a/2,a.b/2),b.g){case 4:hon(h,kgt,(Tbn(),Flt)),hon(h,Gft,(Jun(),$ht)),h.o.b=a.b,d<0&&(h.o.a=-d),qIn(f,(kUn(),oCt)),l||(s.a=a.a),s.a-=a.a;break;case 2:hon(h,kgt,(Tbn(),Hlt)),hon(h,Gft,(Jun(),Oht)),h.o.b=a.b,d<0&&(h.o.a=-d),qIn(f,(kUn(),ICt)),l||(s.a=0);break;case 1:hon(h,ilt,(z7(),Ift)),h.o.a=a.a,d<0&&(h.o.b=-d),qIn(f,(kUn(),SCt)),l||(s.b=a.b),s.b-=a.b;break;case 3:hon(h,ilt,(z7(),Sft)),h.o.a=a.a,d<0&&(h.o.b=-d),qIn(f,(kUn(),sCt)),l||(s.b=0)}if(Hx(f.n,s),hon(h,npt,s),t==UIt||t==WIt||t==XIt){if(w=0,t==UIt&&n.Xe(ipt))switch(b.g){case 1:case 2:w=BB(n.We(ipt),19).a;break;case 3:case 4:w=-BB(n.We(ipt),19).a}else switch(b.g){case 4:case 2:w=c.b,t==WIt&&(w/=r.b);break;case 1:case 3:w=c.a,t==WIt&&(w/=r.a)}hon(h,Tlt,w)}return hon(h,Qft,b),h}function wXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E;if((e=Gy(MD(mMn(n.a.j,(HXn(),_dt)))))<-1||!n.a.i||LK(BB(mMn(n.a.o,ept),98))||abn(n.a.o,(kUn(),oCt)).gc()<2&&abn(n.a.o,ICt).gc()<2)return!0;if(n.a.c.Rf())return!1;for(y=0,m=0,v=new Np,o=0,s=(u=n.a.e).length;o<s;++o){for(b=0,d=(l=u[o]).length;b<d;++b)if((f=l[b]).k!=(uSn(),Cut)){for(i=n.b[f.c.p][f.p],f.k==Mut?(i.b=1,BB(mMn(f,(hWn(),dlt)),11).j==(kUn(),oCt)&&(m+=i.a)):(E=abn(f,(kUn(),ICt))).dc()||!tL(E,new Nc)?i.c=1:((r=abn(f,oCt)).dc()||!tL(r,new Lc))&&(y+=i.a),a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);for(j=new oz(new WL((g=Wen(Pun(Gk(xnt,1),HWn,20,0,[abn(f,(kUn(),sCt)),abn(f,SCt)]))).a.length,g.a));dAn(j);)k=BB(U5(j),11),(p=BB(mMn(k,(hWn(),Elt)),10))&&(y+=i.c,m+=i.b,X8(n,i,p))}else v.c[v.c.length]=f;for(w=new Wb(v);w.a<w.c.c.length;)for(f=BB(n0(w),10),i=n.b[f.c.p][f.p],a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);v.c=x8(Ant,HWn,1,0,5,1)}return(0==(t=y+m)?RQn:(y-m)/t)>=e}function dXn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=Swn((SQ(),new Hb(new Ob(lAt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=Swn((SQ(),new Hb(new Ob(lAt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=Swn((SQ(),new Hb(new Ob(lAt.d))));n.postMessage({id:e.id,data:c});break;case"register":lGn(e.algorithms),n.postMessage({id:e.id});break;case"layout":xBn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(aE(),typeof document===gYn&&typeof self!==gYn){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==gYn&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function gXn(n){n.N||(n.N=!0,n.b=kan(n,0),Rrn(n.b,0),Rrn(n.b,1),Rrn(n.b,2),n.bb=kan(n,1),Rrn(n.bb,0),Rrn(n.bb,1),n.fb=kan(n,2),Rrn(n.fb,3),Rrn(n.fb,4),Krn(n.fb,5),n.qb=kan(n,3),Rrn(n.qb,0),Krn(n.qb,1),Krn(n.qb,2),Rrn(n.qb,3),Rrn(n.qb,4),Krn(n.qb,5),Rrn(n.qb,6),n.a=jan(n,4),n.c=jan(n,5),n.d=jan(n,6),n.e=jan(n,7),n.f=jan(n,8),n.g=jan(n,9),n.i=jan(n,10),n.j=jan(n,11),n.k=jan(n,12),n.n=jan(n,13),n.o=jan(n,14),n.p=jan(n,15),n.q=jan(n,16),n.s=jan(n,17),n.r=jan(n,18),n.t=jan(n,19),n.u=jan(n,20),n.v=jan(n,21),n.w=jan(n,22),n.B=jan(n,23),n.A=jan(n,24),n.C=jan(n,25),n.D=jan(n,26),n.F=jan(n,27),n.G=jan(n,28),n.H=jan(n,29),n.J=jan(n,30),n.I=jan(n,31),n.K=jan(n,32),n.M=jan(n,33),n.L=jan(n,34),n.P=jan(n,35),n.Q=jan(n,36),n.R=jan(n,37),n.S=jan(n,38),n.T=jan(n,39),n.U=jan(n,40),n.V=jan(n,41),n.X=jan(n,42),n.W=jan(n,43),n.Y=jan(n,44),n.Z=jan(n,45),n.$=jan(n,46),n._=jan(n,47),n.ab=jan(n,48),n.cb=jan(n,49),n.db=jan(n,50),n.eb=jan(n,51),n.gb=jan(n,52),n.hb=jan(n,53),n.ib=jan(n,54),n.jb=jan(n,55),n.kb=jan(n,56),n.lb=jan(n,57),n.mb=jan(n,58),n.nb=jan(n,59),n.ob=jan(n,60),n.pb=jan(n,61))}function pXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.a)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.a+d.o.a+d.d.c);else m=t.f.a-t.c.a;for(m-=t.c.a,g=new Wb(n);g.a<g.c.c.length;){switch(Zp((d=BB(n0(g),10)).n,m-d.o.a),cH(d.f),Vmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Zp(BB(mMn(d,spt),8),m-d.o.a),BB(mMn(d,kdt),248).g){case 1:hon(d,kdt,(wvn(),$Mt));break;case 2:hon(d,kdt,(wvn(),AMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Zp((y=BB(n0(k),11)).n,v.a-y.o.a),Zp(y.a,y.o.a),qIn(y,Ccn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a=m-i.a;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).a=m-o.a;for(b=new Wb(c.b);b.a<b.c.c.length;)Zp((f=BB(n0(b),70)).n,m-f.o.a)}for(w=new Wb(y.f);w.a<w.c.c.length;)Zp((f=BB(n0(w),70)).n,y.o.a-f.o.a)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ccn(BB(mMn(d,Qft),61))),YMn(d)),l=new Wb(d.b);l.a<l.c.c.length;)Vmn(f=BB(n0(l),70)),Zp(f.n,v.a-f.o.a)}}function vXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.b)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.b+d.o.b+d.d.a);else m=t.f.b-t.c.b;for(m-=t.c.b,g=new Wb(n);g.a<g.c.c.length;){switch(Jp((d=BB(n0(g),10)).n,m-d.o.b),aH(d.f),Qmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Jp(BB(mMn(d,spt),8),m-d.o.b),BB(mMn(d,kdt),248).g){case 3:hon(d,kdt,(wvn(),CMt));break;case 4:hon(d,kdt,(wvn(),LMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Jp((y=BB(n0(k),11)).n,v.b-y.o.b),Jp(y.a,y.o.b),qIn(y,Ocn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).b=m-i.b;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).b=m-o.b;for(b=new Wb(c.b);b.a<b.c.c.length;)Jp((f=BB(n0(b),70)).n,m-f.o.b)}for(w=new Wb(y.f);w.a<w.c.c.length;)Jp((f=BB(n0(w),70)).n,y.o.b-f.o.b)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ocn(BB(mMn(d,Qft),61))),gln(d)),l=new Wb(d.b);l.a<l.c.c.length;)Qmn(f=BB(n0(l),70)),Jp(f.n,v.b-f.o.b)}}function mXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(f=!1,s=n+1,l1(n,t.c.length),a=(h=BB(t.c[n],200)).a,u=null,c=0;c<h.a.c.length;c++)if(l1(c,a.c.length),!(r=BB(a.c[c],187)).c)if(0!=r.b.c.length){if(r.k||(u&&Gmn(u),Tvn(r,(u=new KJ(u?u.e+u.d+i:0,h.f,i)).e+u.d,h.f),WB(h.d,u),xcn(u,r),r.k=!0),o=null,b=null,c<h.a.c.length-1?b=BB(xq(h.a,c+1),187):s<t.c.length&&0!=(l1(s,t.c.length),BB(t.c[s],200)).a.c.length&&(b=BB(xq((l1(s,t.c.length),BB(t.c[s],200)).a,0),187)),l=!1,(o=b)&&(l=!Nfn(o.j,h)),o){if(0==o.b.c.length){Tkn(h,o);break}if(p9(r,e-r.s),Gmn(r.q),f|=nSn(h,r,o,e,i),0==o.b.c.length)for(Tkn((l1(s,t.c.length),BB(t.c[s],200)),o),o=null;t.c.length>s&&0==(l1(s,t.c.length),BB(t.c[s],200)).a.c.length;)y7(t,(l1(s,t.c.length),t.c[s]));if(!o){--c;continue}if(A_n(t,h,r,o,l,e,s,i)){f=!0;continue}if(l){if(JBn(t,h,r,o,e,s,i)){f=!0;continue}if(Ahn(h,r)){r.c=!0,f=!0;continue}}else if(Ahn(h,r)){r.c=!0,f=!0;continue}if(f)continue}Ahn(h,r)?(r.c=!0,f=!0,o&&(o.k=!1)):Gmn(r.q)}else $T(),Tkn(h,r),--c,f=!0;return f}function yXn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(g=0,P=0,h=new Wb(n.b);h.a<h.c.c.length;)(s=BB(n0(h),157)).c&&ozn(s.c),g=e.Math.max(g,iG(s)),P+=iG(s)*eG(s);for(p=P/n.b.c.length,S=hjn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*u))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,DH(M=new YT,iln(0)),E=new YT,f=new M2(n.b,0),d=null,o=new Np;f.b<f.d.gc();)Px(f.b<f.d.gc()),C=iG(s=BB(f.d.Xb(f.c=f.b++),157)),b=eG(s),O+C>g&&(a&&(fO(E,w),fO(M,iln(f.b-1)),WB(n.d,d),o.c=x8(Ant,HWn,1,0,5,1)),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+C)),o.c[o.c.length]=s,Mpn(s,O,A),l=e.Math.max(l,O+C+i.c),w=e.Math.max(w,b),O+=C+t,d=s;if(gun(n.a,o),WB(n.d,BB(xq(o,o.c.length-1),157)),l=e.Math.max(l,r),(I=A+w+i.a)<c&&(w+=c-I,I=c),a)for(O=i.b,f=new M2(n.b,0),fO(M,iln(n.b.c.length)),m=BB(b3(T=spn(M,0)),19).a,fO(E,w),j=spn(E,0),k=0;f.b<f.d.gc();)f.b==m&&(O=i.b,k=Gy(MD(b3(j))),m=BB(b3(T),19).a),Px(f.b<f.d.gc()),Udn(s=BB(f.d.Xb(f.c=f.b++),157),k),f.b==m&&(v=l-O-i.c,y=iG(s),zdn(s,v),Fln(s,(v-y)/2,0)),O+=iG(s)+t;return new xI(l,I)}function kXn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Vl();case 13:return n.Wl();case 23:return n.Nl();case 22:return n.Sl();case 18:return n.Pl();case 8:QXn(n),wWn(),r=oNt;break;case 9:return n.vl(!0);case 19:return n.wl();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.ul(n.a),QXn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.tl())<BQn?(wWn(),wWn(),r=new oG(0,t)):r=pz(Xln(t));break;case 99:return n.Fl();case 67:return n.Al();case 105:return n.Il();case 73:return n.Bl();case 103:return n.Gl();case 88:return n.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.xl();case 80:case 112:if(!(r=DCn(n,n.a)))throw Hp(new ak(kWn((u$(),O8n))));break;default:r=QH(n.a)}QXn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw Hp(new ak(kWn((u$(),C8n))));r=QH(n.a),e=n.a,QXn(n),(64512&e)==HQn&&0==n.c&&56320==(64512&n.a)&&((i=x8(ONt,WVn,25,2,15,1))[0]=e&QVn,i[1]=n.a&QVn,r=oU(pz(Bdn(i,0,i.length)),0),QXn(n));break;default:throw Hp(new ak(kWn((u$(),C8n))))}return r}function jXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(r=new Np,c=DWn,a=DWn,u=DWn,i)for(c=n.f.a,d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).g);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((f=BB(gx(o.a),8)).a<c&&(a=c-f.a,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=f.a),f.a<=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,1),8).b-f.b)))));else for(d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).e);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((b=BB(px(o.a),8)).a>c&&(a=b.a-c,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=b.a),b.a>=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,o.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&u>t.o.b/2){for(IZ(w=new ISn,t),qIn(w,(kUn(),sCt)),w.n.a=t.o.a/2,IZ(g=new ISn,t),qIn(g,SCt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Wb(r);s.a<s.c.c.length;)o=BB(n0(s),17),i?(h=BB(dH(o.a),8),(0==o.a.b?g1(o.d):BB(gx(o.a),8)).b>=h.b?SZ(o,g):SZ(o,w)):(h=BB(gH(o.a),8),(0==o.a.b?g1(o.c):BB(px(o.a),8)).b>=h.b?MZ(o,g):MZ(o,w)),(l=BB(mMn(o,(HXn(),vgt)),74))&&ywn(l,h,!0);t.n.a=c-t.o.a/2}}function EXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),h=BB(sen(n.g,kCn(zJ(s,T6n))),33),i=null,(a=zJ(s,"sourcePort"))&&(i=kCn(a)),f=BB(sen(n.j,i),118),!h)throw Hp(new ek("An edge must have a source node (edge id: '"+Qdn(s)+W6n));if(f&&!wW(WJ(f),h))throw Hp(new ek("The source port of an edge must be a port of the edge's source node (edge id: '"+R2(s,q6n)+W6n));if(!o.b&&(o.b=new hK(KOt,o,4,7)),f9(o.b,f||h),l=BB(sen(n.g,kCn(zJ(s,Y6n))),33),r=null,(u=zJ(s,"targetPort"))&&(r=kCn(u)),b=BB(sen(n.j,r),118),!l)throw Hp(new ek("An edge must have a target node (edge id: '"+Qdn(s)+W6n));if(b&&!wW(WJ(b),l))throw Hp(new ek("The target port of an edge must be a port of the edge's target node (edge id: '"+R2(s,q6n)+W6n));if(!o.c&&(o.c=new hK(KOt,o,5,8)),f9(o.c,b||l),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),s$n(s,o),xon(n,s,o)}function TXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;return f=IFn(HN(n,(kUn(),wCt)),t),w=ayn(HN(n,dCt),t),y=ayn(HN(n,ECt),t),T=uyn(HN(n,MCt),t),l=uyn(HN(n,hCt),t),v=ayn(HN(n,jCt),t),d=ayn(HN(n,gCt),t),j=ayn(HN(n,TCt),t),k=ayn(HN(n,fCt),t),M=uyn(HN(n,bCt),t),p=ayn(HN(n,yCt),t),m=ayn(HN(n,mCt),t),E=ayn(HN(n,lCt),t),S=uyn(HN(n,kCt),t),b=uyn(HN(n,pCt),t),g=ayn(HN(n,vCt),t),e=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.a,T.a,j.a,S.a])),i=Lon(Pun(Gk(xNt,1),qQn,25,15,[w.a,f.a,y.a,g.a])),r=p.a,c=Lon(Pun(Gk(xNt,1),qQn,25,15,[d.a,l.a,k.a,b.a])),s=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.b,w.b,d.b,m.b])),o=Lon(Pun(Gk(xNt,1),qQn,25,15,[T.b,f.b,l.b,g.b])),h=M.b,u=Lon(Pun(Gk(xNt,1),qQn,25,15,[j.b,y.b,k.b,E.b])),w9(HN(n,wCt),e+r,s+h),w9(HN(n,vCt),e+r,s+h),w9(HN(n,dCt),e+r,0),w9(HN(n,ECt),e+r,s+h+o),w9(HN(n,MCt),0,s+h),w9(HN(n,hCt),e+r+i,s+h),w9(HN(n,gCt),e+r+i,0),w9(HN(n,TCt),0,s+h+o),w9(HN(n,fCt),e+r+i,s+h+o),w9(HN(n,bCt),0,s),w9(HN(n,yCt),e,0),w9(HN(n,lCt),0,s+h+o),w9(HN(n,pCt),e+r+i,0),(a=new Gj).a=Lon(Pun(Gk(xNt,1),qQn,25,15,[e+i+r+c,M.a,m.a,E.a])),a.b=Lon(Pun(Gk(xNt,1),qQn,25,15,[s+o+h+u,p.b,S.b,b.b])),a}function MXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g;for(d=new Np,l=new Wb(n.d.b);l.a<l.c.c.length;)for(w=new Wb(BB(n0(l),29).a);w.a<w.c.c.length;){for(b=BB(n0(w),10),r=BB(RX(n.f,b),57),o=new oz(ZL(lbn(b).a.Kc(),new h));dAn(o);)if(s=!0,f=null,(i=spn((a=BB(U5(o),17)).a,0)).b!=i.d.c){for(t=BB(b3(i),8),e=null,a.c.j==(kUn(),sCt)&&((g=new PBn(t,new xI(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,d.c[d.c.length]=g),a.c.j==SCt&&((g=new PBn(t,new xI(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,d.c[d.c.length]=g);i.b!=i.d.c;)e=BB(b3(i),8),aen(t.b,e.b)||(f=new PBn(t,e,null,a),d.c[d.c.length]=f,s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=BB(RX(n.f,a.d.i),57),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(u=new oz(ZL(fbn(b).a.Kc(),new h));dAn(u);)0!=(a=BB(U5(u),17)).a.b&&(t=BB(px(a.a),8),a.d.j==(kUn(),sCt)&&((g=new PBn(t,new xI(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,d.c[d.c.length]=g),a.d.j==SCt&&((g=new PBn(t,new xI(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,d.c[d.c.length]=g))}return d}function SXn(n,t,e){var i,r,c,a,u,o,s;if(OTn(e,"Network simplex node placement",1),n.e=t,n.n=BB(mMn(t,(hWn(),Alt)),304),oqn(n),REn(n),JT(wnn(new Rq(null,new w1(n.e.b,16)),new Hc),new cg(n)),JT(AV(wnn(AV(wnn(new Rq(null,new w1(n.e.b,16)),new ta),new ea),new ia),new ra),new rg(n)),qy(TD(mMn(n.e,(HXn(),xgt))))&&(OTn(c=mcn(e,1),"Straight Edges Pre-Processing",1),jzn(n),HSn(c)),Mvn(n.f),r=BB(mMn(t,xpt),19).a*n.f.a.c.length,WKn(Qk(Yk(B_(n.f),r),!1),mcn(e,1)),0!=n.d.a.gc()){for(OTn(c=mcn(e,1),"Flexible Where Space Processing",1),a=BB($N(Oz($V(new Rq(null,new w1(n.f.a,16)),new qc),new Dc)),19).a,u=BB($N(Cz($V(new Rq(null,new w1(n.f.a,16)),new Gc),new Rc)),19).a-a,o=AN(new qv,n.f),s=AN(new qv,n.f),UNn(aM(cM(rM(uM(new Hv,2e4),u),o),s)),JT(AV(AV(LU(n.i),new zc),new Uc),new zV(a,o,u,s)),i=n.d.a.ec().Kc();i.Ob();)BB(i.Pb(),213).g=1;WKn(Qk(Yk(B_(n.f),r),!1),mcn(c,1)),HSn(c)}qy(TD(mMn(t,xgt)))&&(OTn(c=mcn(e,1),"Straight Edges Post-Processing",1),SPn(n),HSn(c)),QGn(n),n.e=null,n.f=null,n.i=null,n.c=null,$U(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),HSn(e)}function PXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(u=new Wb(n.a.b);u.a<u.c.c.length;)for(m=new Wb(BB(n0(u),29).a);m.a<m.c.c.length;)v=BB(n0(m),10),t.g[v.p]=v,t.a[v.p]=v,t.d[v.p]=0;for(o=n.a.b,t.c==(gJ(),nyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new IT(o)),a=o.Kc();a.Ob();)for(b=-1,l=BB(a.Pb(),29).a,t.o==(oZ(),cyt)&&(b=DWn,l=cL(l,152)?o6(BB(l,152)):cL(l,131)?BB(l,131).a:cL(l,54)?new fy(l):new IT(l)),k=l.Kc();k.Ob();)if(y=BB(k.Pb(),10),f=null,(f=t.c==nyt?BB(xq(n.b.f,y.p),15):BB(xq(n.b.b,y.p),15)).gc()>0)if(r=f.gc(),s=IJ(e.Math.floor((r+1)/2))-1,c=IJ(e.Math.ceil((r+1)/2))-1,t.o==cyt)for(h=c;h>=s;h--)t.a[y.p]==y&&(d=BB(f.Xb(h),46),w=BB(d.a,10),!FT(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=y,t.g[y.p]=t.g[w.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[y.p]==y&&(p=BB(f.Xb(h),46),g=BB(p.a,10),!FT(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=y,t.g[y.p]=t.g[g.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[g.p]))}function IXn(){IXn=O,eE(),POt=gOt.a,BB(Wtn(QQ(gOt.a),0),18),kOt=gOt.f,BB(Wtn(QQ(gOt.f),0),18),BB(Wtn(QQ(gOt.f),1),34),SOt=gOt.n,BB(Wtn(QQ(gOt.n),0),34),BB(Wtn(QQ(gOt.n),1),34),BB(Wtn(QQ(gOt.n),2),34),BB(Wtn(QQ(gOt.n),3),34),jOt=gOt.g,BB(Wtn(QQ(gOt.g),0),18),BB(Wtn(QQ(gOt.g),1),34),vOt=gOt.c,BB(Wtn(QQ(gOt.c),0),18),BB(Wtn(QQ(gOt.c),1),18),EOt=gOt.i,BB(Wtn(QQ(gOt.i),0),18),BB(Wtn(QQ(gOt.i),1),18),BB(Wtn(QQ(gOt.i),2),18),BB(Wtn(QQ(gOt.i),3),18),BB(Wtn(QQ(gOt.i),4),34),TOt=gOt.j,BB(Wtn(QQ(gOt.j),0),18),mOt=gOt.d,BB(Wtn(QQ(gOt.d),0),18),BB(Wtn(QQ(gOt.d),1),18),BB(Wtn(QQ(gOt.d),2),18),BB(Wtn(QQ(gOt.d),3),18),BB(Wtn(QQ(gOt.d),4),34),BB(Wtn(QQ(gOt.d),5),34),BB(Wtn(QQ(gOt.d),6),34),BB(Wtn(QQ(gOt.d),7),34),pOt=gOt.b,BB(Wtn(QQ(gOt.b),0),34),BB(Wtn(QQ(gOt.b),1),34),yOt=gOt.e,BB(Wtn(QQ(gOt.e),0),34),BB(Wtn(QQ(gOt.e),1),34),BB(Wtn(QQ(gOt.e),2),34),BB(Wtn(QQ(gOt.e),3),34),BB(Wtn(QQ(gOt.e),4),18),BB(Wtn(QQ(gOt.e),5),18),BB(Wtn(QQ(gOt.e),6),18),BB(Wtn(QQ(gOt.e),7),18),BB(Wtn(QQ(gOt.e),8),18),BB(Wtn(QQ(gOt.e),9),18),BB(Wtn(QQ(gOt.e),10),34),MOt=gOt.k,BB(Wtn(QQ(gOt.k),0),34),BB(Wtn(QQ(gOt.k),1),34)}function CXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(M=new YT,j=new YT,g=-1,o=new Wb(n);o.a<o.c.c.length;){for((a=BB(n0(o),128)).s=g--,h=0,m=0,c=new Wb(a.t);c.a<c.c.c.length;)m+=(i=BB(n0(c),268)).c;for(r=new Wb(a.i);r.a<r.c.c.length;)h+=(i=BB(n0(r),268)).c;a.n=h,a.u=m,0==m?r5(j,a,j.c.b,j.c):0==h&&r5(M,a,M.c.b,M.c)}for(P=S4(n),d=(f=n.c.length)+1,p=f-1,b=new Np;0!=P.a.gc();){for(;0!=j.b;)Px(0!=j.b),k=BB(Atn(j,j.a.a),128),P.a.Bc(k),k.s=p--,cLn(k,M,j);for(;0!=M.b;)Px(0!=M.b),E=BB(Atn(M,M.a.a),128),P.a.Bc(E),E.s=d++,cLn(E,M,j);for(w=_Vn,s=P.a.ec().Kc();s.Ob();)(v=(a=BB(s.Pb(),128)).u-a.n)>=w&&(v>w&&(b.c=x8(Ant,HWn,1,0,5,1),w=v),b.c[b.c.length]=a);0!=b.c.length&&(l=BB(xq(b,pvn(t,b.c.length)),128),P.a.Bc(l),l.s=d++,cLn(l,M,j),b.c=x8(Ant,HWn,1,0,5,1))}for(y=n.c.length+1,u=new Wb(n);u.a<u.c.c.length;)(a=BB(n0(u),128)).s<f&&(a.s+=y);for(T=new Wb(n);T.a<T.c.c.length;)for(e=new M2((E=BB(n0(T),128)).t,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),S=(i=BB(e.d.Xb(e.c=e.b++),268)).b,E.s>S.s&&(fW(e),y7(S.i,i),i.c>0&&(i.a=S,WB(S.t,i),i.b=E,WB(E.i,i)))}function OXn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.Ml();case 12:return n.Ol();case 14:return n.Ql();case 15:return n.Tl();case 16:return n.Rl();case 17:return n.Ul();case 21:return QXn(n),wWn(),wWn(),sNt;case 10:switch(n.a){case 65:return n.yl();case 90:return n.Dl();case 122:return n.Kl();case 98:return n.El();case 66:return n.zl();case 60:return n.Jl();case 62:return n.Hl()}}switch(c=kXn(n),t=n.c){case 3:return n.Zl(c);case 4:return n.Xl(c);case 5:return n.Yl(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=fV(n.i,r++))>=48&&t<=57))throw Hp(new ak(kWn((u$(),X8n))));for(i=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(e=i,44==t){if(r>=n.j)throw Hp(new ak(kWn((u$(),V8n))));if((t=fV(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(i>e)throw Hp(new ak(kWn((u$(),Q8n))))}else e=-1}if(125!=t)throw Hp(new ak(kWn((u$(),W8n))));n.sl(r)?(wWn(),wWn(),c=new h4(9,c),n.d=r+1):(wWn(),wWn(),c=new h4(3,c),n.d=r),c.dm(i),c.cm(e),QXn(n)}}return c}function AXn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(w=new J6(t.b),v=new J6(t.b),l=new J6(t.b),j=new J6(t.b),d=new J6(t.b),k=spn(t,0);k.b!=k.d.c;)for(u=new Wb((m=BB(b3(k),11)).g);u.a<u.c.c.length;)if((c=BB(n0(u),17)).c.i==c.d.i){if(m.j==c.d.j){j.c[j.c.length]=c;continue}if(m.j==(kUn(),sCt)&&c.d.j==SCt){d.c[d.c.length]=c;continue}}for(o=new Wb(d);o.a<o.c.c.length;)__n(n,c=BB(n0(o),17),e,i,(kUn(),oCt));for(a=new Wb(j);a.a<a.c.c.length;)c=BB(n0(a),17),Bl(E=new $vn(n),(uSn(),Cut)),hon(E,(HXn(),ept),(QEn(),XIt)),hon(E,(hWn(),dlt),c),hon(T=new ISn,dlt,c.d),qIn(T,(kUn(),ICt)),IZ(T,E),hon(M=new ISn,dlt,c.c),qIn(M,oCt),IZ(M,E),hon(c.c,Elt,E),hon(c.d,Elt,E),SZ(c,null),MZ(c,null),e.c[e.c.length]=E,hon(E,Bft,iln(2));for(y=spn(t,0);y.b!=y.d.c;)s=(m=BB(b3(y),11)).e.c.length>0,g=m.g.c.length>0,s&&g?l.c[l.c.length]=m:s?w.c[w.c.length]=m:g&&(v.c[v.c.length]=m);for(b=new Wb(w);b.a<b.c.c.length;)WB(r,HBn(n,BB(n0(b),11),null,e));for(p=new Wb(v);p.a<p.c.c.length;)WB(r,HBn(n,null,BB(n0(p),11),e));for(f=new Wb(l);f.a<f.c.c.length;)WB(r,HBn(n,h=BB(n0(f),11),h,e))}function $Xn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(d=new xI(RQn,RQn),t=new xI(KQn,KQn),k=new Wb(n);k.a<k.c.c.length;)y=BB(n0(k),8),d.a=e.Math.min(d.a,y.a),d.b=e.Math.min(d.b,y.b),t.a=e.Math.max(t.a,y.a),t.b=e.Math.max(t.b,y.b);for(s=new xI(t.a-d.a,t.b-d.b),h=new ZFn(new xI(d.a-50,d.b-s.a-50),new xI(d.a-50,t.b+s.a+50),new xI(t.a+s.b/2+50,d.b+s.b/2)),m=new Rv,c=new Np,i=new Np,m.a.zc(h,m),E=new Wb(n);E.a<E.c.c.length;){for(j=BB(n0(E),8),c.c=x8(Ant,HWn,1,0,5,1),v=m.a.ec().Kc();v.Ob();)W8((g=BB(v.Pb(),308)).d,g.a),Cbn(W8(g.d,j),W8(g.d,g.a))<0&&(c.c[c.c.length]=g);for(i.c=x8(Ant,HWn,1,0,5,1),p=new Wb(c);p.a<p.c.c.length;)for(b=new Wb((g=BB(n0(p),308)).e);b.a<b.c.c.length;){for(f=BB(n0(b),168),a=!0,o=new Wb(c);o.a<o.c.c.length;)(u=BB(n0(o),308))!=g&&(cV(f,xq(u.e,0))||cV(f,xq(u.e,1))||cV(f,xq(u.e,2)))&&(a=!1);a&&(i.c[i.c.length]=f)}for(oMn(m,c),e5(m,new bn),l=new Wb(i);l.a<l.c.c.length;)TU(m,new ZFn(j,(f=BB(n0(l),168)).a,f.b))}for(e5(m,new jw(w=new Rv)),r=w.a.ec().Kc();r.Ob();)(K7(h,(f=BB(r.Pb(),168)).a)||K7(h,f.b))&&r.Qb();return e5(w,new wn),w}function LXn(n){var t,e,i;switch(e=BB(mMn(n,(hWn(),Zft)),21),t=kA(Nat),BB(mMn(n,(HXn(),sgt)),334)==(ufn(),pIt)&&Jcn(t,xat),qy(TD(mMn(n,ugt)))?dq(t,(yMn(),Rat),(lWn(),Hot)):dq(t,(yMn(),_at),(lWn(),Hot)),null!=mMn(n,(I6(),TMt))&&Jcn(t,Dat),(qy(TD(mMn(n,ggt)))||qy(TD(mMn(n,ogt))))&&WG(t,(yMn(),Bat),(lWn(),eot)),BB(mMn(n,Udt),103).g){case 2:case 3:case 4:WG(dq(t,(yMn(),Rat),(lWn(),rot)),Bat,iot)}switch(e.Hc((bDn(),hft))&&WG(dq(dq(t,(yMn(),Rat),(lWn(),tot)),Fat,Zut),Bat,not),GC(mMn(n,Sgt))!==GC((sNn(),Cvt))&&dq(t,(yMn(),_at),(lWn(),Not)),e.Hc(pft)&&(dq(t,(yMn(),Rat),(lWn(),Fot)),dq(t,Kat,Kot),dq(t,_at,_ot)),GC(mMn(n,Pdt))!==GC((JMn(),cft))&&GC(mMn(n,Zdt))!==GC((Mbn(),YPt))&&WG(t,(yMn(),Bat),(lWn(),pot)),qy(TD(mMn(n,fgt)))&&dq(t,(yMn(),_at),(lWn(),got)),qy(TD(mMn(n,Hdt)))&&dq(t,(yMn(),_at),(lWn(),Wot)),KLn(n)&&(i=(GC(mMn(n,sgt))===GC(pIt)?BB(mMn(n,Rdt),292):BB(mMn(n,Kdt),292))==(Kan(),jft)?(lWn(),Rot):(lWn(),Yot),dq(t,(yMn(),Fat),i)),BB(mMn(n,zpt),377).g){case 1:dq(t,(yMn(),Fat),(lWn(),Vot));break;case 2:WG(dq(dq(t,(yMn(),_at),(lWn(),Vut)),Fat,Qut),Bat,Yut)}return GC(mMn(n,Ldt))!==GC((mon(),Nvt))&&dq(t,(yMn(),_at),(lWn(),Qot)),t}function NXn(n){NM(n,new MTn(vj(wj(pj(gj(new du,$4n),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new Za))),u2(n,$4n,VJn,1.3),u2(n,$4n,A4n,mpn(gEt)),u2(n,$4n,QJn,CEt),u2(n,$4n,vZn,15),u2(n,$4n,u3n,mpn(bEt)),u2(n,$4n,PZn,mpn(jEt)),u2(n,$4n,BZn,mpn(EEt)),u2(n,$4n,SZn,mpn(TEt)),u2(n,$4n,IZn,mpn(kEt)),u2(n,$4n,MZn,mpn(MEt)),u2(n,$4n,CZn,mpn(OEt)),u2(n,$4n,E4n,mpn(PEt)),u2(n,$4n,T4n,mpn(yEt)),u2(n,$4n,P4n,mpn(SEt)),u2(n,$4n,I4n,mpn(AEt)),u2(n,$4n,C4n,mpn(pEt)),u2(n,$4n,jZn,mpn(vEt)),u2(n,$4n,m3n,mpn(mEt)),u2(n,$4n,S4n,mpn(dEt)),u2(n,$4n,M4n,mpn(wEt)),u2(n,$4n,O4n,mpn(LEt))}function xXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(cL(t,457)){if(!(d=SDn(BB(t,671),e)))throw Hp(new _y(p6n+e+"' is not a valid enumerator of '"+t.ne()+"'"));return d}switch(Ifn((CPn(),Z$t),t).cl()){case 2:e=FBn(e,!1);break;case 3:e=FBn(e,!0)}if(i=Ifn(Z$t,t).$k())return i.Aj().Nh().Kh(i,e);if(f=Ifn(Z$t,t).al()){for(d=new Np,s=0,h=(o=ysn(e)).length;s<h;++s)u=o[s],WB(d,f.Aj().Nh().Kh(f,u));return d}if(!(w=Ifn(Z$t,t).bl()).dc()){for(b=w.Kc();b.Ob();){l=BB(b.Pb(),148);try{if(null!=(d=l.Aj().Nh().Kh(l,e)))return d}catch(g){if(!cL(g=lun(g),60))throw Hp(g)}}throw Hp(new _y(p6n+e+"' does not match any member types of the union datatype '"+t.ne()+"'"))}if(BB(t,834).Fj(),!(r=xfn(t.Bj())))return null;if(r==Stt){c=0;try{c=l_n(e,_Vn,DWn)&QVn}catch(g){if(!cL(g=lun(g),127))throw Hp(g);c=V7(e)[0]}return fun(c)}if(r==mtt){for(a=0;a<COt.length;++a)try{return BM(COt[a],e)}catch(g){if(!cL(g=lun(g),32))throw Hp(g)}throw Hp(new _y(p6n+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Hp(new _y(p6n+e+"' is invalid. "))}function DXn(n,t){var e,i,r,c,a,u,o,s;if(e=0,a=0,c=t.length,u=null,s=new Ck,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(b1(a,t.length),43==t.charCodeAt(a)||(b1(a,t.length),45==t.charCodeAt(a)))))throw Hp(new Mk(DQn+t+'"'));for(;a<c&&(b1(a,t.length),46!=t.charCodeAt(a))&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+fx(null==t?zWn:(kW(t),t),e,a),a<c&&(b1(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+fx(null==t?zWn:(kW(t),t),e,a)}else n.e=0;if(a<c&&(b1(a,t.length),101==t.charCodeAt(a)||(b1(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&++a<c&&(b1(a,t.length),45!=t.charCodeAt(a))&&++e,u=t.substr(e,c-e),n.e=n.e-l_n(u,_Vn,DWn),n.e!=IJ(n.e)))throw Hp(new Mk("Scale out of range."));if((o=s.a).length<16){if(n.f=(null==Vtt&&(Vtt=new RegExp("^[+-]?\\d*$","i")),Vtt.test(o)?parseInt(o,10):NaN),isNaN(n.f))throw Hp(new Mk(DQn+t+'"'));n.a=aCn(n.f)}else fdn(n,new $A(o));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=fV(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function RXn(){RXn=O,JCn(fut=new pJ,(kUn(),wCt),vCt),JCn(fut,MCt,vCt),JCn(fut,MCt,kCt),JCn(fut,hCt,pCt),JCn(fut,hCt,vCt),JCn(fut,dCt,vCt),JCn(fut,dCt,mCt),JCn(fut,ECt,lCt),JCn(fut,ECt,vCt),JCn(fut,yCt,bCt),JCn(fut,yCt,vCt),JCn(fut,yCt,mCt),JCn(fut,yCt,lCt),JCn(fut,bCt,yCt),JCn(fut,bCt,kCt),JCn(fut,bCt,pCt),JCn(fut,bCt,vCt),JCn(fut,jCt,jCt),JCn(fut,jCt,mCt),JCn(fut,jCt,kCt),JCn(fut,gCt,gCt),JCn(fut,gCt,mCt),JCn(fut,gCt,pCt),JCn(fut,TCt,TCt),JCn(fut,TCt,lCt),JCn(fut,TCt,kCt),JCn(fut,fCt,fCt),JCn(fut,fCt,lCt),JCn(fut,fCt,pCt),JCn(fut,mCt,dCt),JCn(fut,mCt,yCt),JCn(fut,mCt,jCt),JCn(fut,mCt,gCt),JCn(fut,mCt,vCt),JCn(fut,mCt,mCt),JCn(fut,mCt,kCt),JCn(fut,mCt,pCt),JCn(fut,lCt,ECt),JCn(fut,lCt,yCt),JCn(fut,lCt,TCt),JCn(fut,lCt,fCt),JCn(fut,lCt,lCt),JCn(fut,lCt,kCt),JCn(fut,lCt,pCt),JCn(fut,lCt,vCt),JCn(fut,kCt,MCt),JCn(fut,kCt,bCt),JCn(fut,kCt,jCt),JCn(fut,kCt,TCt),JCn(fut,kCt,mCt),JCn(fut,kCt,lCt),JCn(fut,kCt,kCt),JCn(fut,kCt,vCt),JCn(fut,pCt,hCt),JCn(fut,pCt,bCt),JCn(fut,pCt,gCt),JCn(fut,pCt,fCt),JCn(fut,pCt,mCt),JCn(fut,pCt,lCt),JCn(fut,pCt,pCt),JCn(fut,pCt,vCt),JCn(fut,vCt,wCt),JCn(fut,vCt,MCt),JCn(fut,vCt,hCt),JCn(fut,vCt,dCt),JCn(fut,vCt,ECt),JCn(fut,vCt,yCt),JCn(fut,vCt,bCt),JCn(fut,vCt,mCt),JCn(fut,vCt,lCt),JCn(fut,vCt,kCt),JCn(fut,vCt,pCt),JCn(fut,vCt,vCt)}function KXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(n.d=new xI(RQn,RQn),n.c=new xI(KQn,KQn),l=t.Kc();l.Ob();)for(m=new Wb(BB(l.Pb(),37).a);m.a<m.c.c.length;)v=BB(n0(m),10),n.d.a=e.Math.min(n.d.a,v.n.a-v.d.b),n.d.b=e.Math.min(n.d.b,v.n.b-v.d.d),n.c.a=e.Math.max(n.c.a,v.n.a+v.o.a+v.d.c),n.c.b=e.Math.max(n.c.b,v.n.b+v.o.b+v.d.a);for(o=new Yv,f=t.Kc();f.Ob();)r=uXn(n,BB(f.Pb(),37)),WB(o.a,r),r.a=r.a|!BB(mMn(r.c,(hWn(),Xft)),21).dc();for(n.b=(Shn(),(T=new kt).f=new vin(i),T.b=oGn(T.f,o),T),jGn((w=n.b,new Xm,w)),n.e=new Gj,n.a=n.b.f.e,u=new Wb(o.a);u.a<u.c.c.length;)for(c=BB(n0(u),841),y=AJ(n.b,c),nKn(c.c,y.a,y.b),g=new Wb(c.c.a);g.a<g.c.c.length;)(d=BB(n0(g),10)).k==(uSn(),Mut)&&(p=lLn(n,d.n,BB(mMn(d,(hWn(),Qft)),61)),UR(kO(d.n),p));for(a=new Wb(o.a);a.a<a.c.c.length;)for(h=new Wb(wln(c=BB(n0(a),841)));h.a<h.c.c.length;)for(Kx(E=new Kj((s=BB(n0(h),17)).a),0,g1(s.c)),DH(E,g1(s.d)),b=null,j=spn(E,0);j.b!=j.d.c;)k=BB(b3(j),8),b?(uen(b.a,k.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):uen(b.b,k.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=k):b=k;qx(n.e),UR(n.a,n.e)}function _Xn(n){V$n(n.b,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentTransient"])),V$n(n.a,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedSourceURI"])),V$n(n.o,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),V$n(n.p,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),V$n(n.v,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),V$n(n.R,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedName"])),V$n(n.T,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),V$n(n.U,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),V$n(n.W,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),V$n(n.bb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidDefaultValueLiteral"])),V$n(n.eb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),V$n(n.H,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentType ConsistentBounds ConsistentArguments"]))}function FXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(!t.dc()){if(r=new km,f=(a=e||BB(t.Xb(0),17)).c,gxn(),(s=f.i.k)!=(uSn(),Iut)&&s!=Cut&&s!=Mut&&s!=Tut)throw Hp(new _y("The target node of the edge must be a normal node or a northSouthPort."));for(fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))),(kUn(),yCt).Hc(f.j)&&(b=Gy(MD(mMn(f,(hWn(),Llt)))),r5(r,new xI(Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),o=null,i=!1,u=t.Kc();u.Ob();)0!=(c=BB(u.Pb(),17).a).b&&(i?(r5(r,kL(UR(o,(Px(0!=c.b),BB(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,o=B$((Px(0!=c.b),BB(c.c.b.c,8))),Frn(r,c),yQ(c));l=a.d,yCt.Hc(l.j)&&(b=Gy(MD(mMn(l,(hWn(),Llt)))),r5(r,new xI(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a]))),n.d==(Usn(),emt)&&(Px(0!=r.b),w=BB(r.a.a.c,8),d=BB(Dpn(r,1),8),(g=new XZ(hsn(f.j))).a*=5,g.b*=5,p=XR(new xI(d.a,d.b),w),UR(v=new xI(iZ(g.a,p.a),iZ(g.b,p.b)),w),nX(spn(r,1),v),Px(0!=r.b),m=BB(r.c.b.c,8),y=BB(Dpn(r,r.b-2),8),(g=new XZ(hsn(l.j))).a*=5,g.b*=5,p=XR(new xI(y.a,y.b),m),UR(k=new xI(iZ(g.a,p.a),iZ(g.b,p.b)),m),Kx(r,r.b-1,k)),h=new oBn(r),Frn(a.a,Fvn(h))}}function BXn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$,L,N,x;if(y=(v=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),k=v.Eg(),m=v.Cg()/2,w=v.Bg()/2,cL(v,186)&&(y+=WJ(p=BB(v,118)).i,y+=WJ(p).i),y+=m,k+=w,I=(S=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),C=S.Eg(),P=S.Cg()/2,j=S.Bg()/2,cL(S,186)&&(I+=WJ(M=BB(S,118)).i,I+=WJ(M).i),I+=P,C+=j,0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),o=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),o);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(b=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));b.e!=b.i.gc();)Qjn(b);for(d=I,I>y+m?d=y+m:I<y-m&&(d=y-m),g=C,C>k+w?g=k+w:C<k-w&&(g=k-w),d>y-m&&d<y+m&&g>k-w&&g<k+w&&(d=y+m),Cen(u=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),d),Aen(u,g),E=y,y>I+P?E=I+P:y<I-P&&(E=I-P),T=k,k>C+j?T=C+j:k<C-j&&(T=C-j),E>I-P&&E<I+P&&T>C-j&&T<C+j&&(T=C+j),Ten(u,E),Oen(u,T),sqn((!u.a&&(u.a=new $L(xOt,u,5)),u.a)),a=pvn(t,5),v==S&&++a,A=E-d,N=T-g,h=.20000000298023224*e.Math.sqrt(A*A+N*N),$=A/(a+1),x=N/(a+1),O=d,L=g,s=0;s<a;s++)L+=x,(f=(O+=$)+H$n(t,24)*uYn*h-h/2)<0?f=1:f>i&&(f=i-1),(l=L+H$n(t,24)*uYn*h-h/2)<0?l=1:l>r&&(l=r-1),tE(),jen(c=new ro,f),Een(c,l),f9((!u.a&&(u.a=new $L(xOt,u,5)),u.a),c)}function HXn(){HXn=O,sWn(),ppt=jPt,vpt=EPt,mpt=TPt,ypt=MPt,jpt=SPt,Ept=PPt,Spt=CPt,Ipt=APt,Cpt=$Pt,Ppt=OPt,Opt=LPt,$pt=NPt,Npt=RPt,Mpt=IPt,fWn(),gpt=_wt,kpt=Fwt,Tpt=Bwt,Apt=Hwt,hpt=new XA(pPt,iln(0)),fpt=Dwt,lpt=Rwt,bpt=Kwt,zpt=ldt,Rpt=zwt,Kpt=Wwt,Bpt=edt,_pt=Ywt,Fpt=Zwt,Xpt=pdt,Upt=wdt,qpt=odt,Hpt=adt,Gpt=hdt,Rgt=Pwt,Kgt=Iwt,rgt=Kbt,cgt=Bbt,Ugt=new WA(12),zgt=new XA(XSt,Ugt),Mbn(),Zdt=new XA(vSt,ngt=QPt),tpt=new XA(aPt,0),wpt=new XA(vPt,iln(1)),Edt=new XA(cSt,dZn),Ggt=zSt,ept=uPt,upt=wPt,zdt=lSt,kdt=iSt,sgt=ESt,dpt=new XA(kPt,(hN(),!0)),wgt=SSt,dgt=PSt,Fgt=KSt,qgt=qSt,Bgt=FSt,Ffn(),Udt=new XA(bSt,Wdt=BPt),$gt=DSt,Agt=NSt,cpt=fPt,rpt=hPt,apt=bPt,cpn(),new XA(ZSt,Vgt=qIt),Ygt=ePt,Jgt=iPt,Zgt=rPt,Qgt=tPt,Dpt=Gwt,Pgt=lwt,Sgt=hwt,xpt=qwt,kgt=ewt,Gdt=Tbt,qdt=jbt,xdt=ubt,Ddt=obt,Kdt=bbt,Rdt=sbt,Hdt=ybt,Cgt=wwt,Ogt=dwt,pgt=Vbt,_gt=$wt,Ngt=mwt,ugt=Gbt,Dgt=Mwt,egt=Nbt,igt=Dbt,Ndt=hSt,Lgt=gwt,Pdt=Qlt,Sdt=Wlt,Mdt=Xlt,fgt=Xbt,hgt=Ubt,lgt=Wbt,Hgt=BSt,vgt=OSt,agt=ySt,Ydt=gSt,Qdt=dSt,_dt=gbt,ipt=sPt,Tdt=sSt,bgt=MSt,npt=cPt,Xgt=VSt,Wgt=YSt,Egt=cwt,Tgt=uwt,spt=gPt,jdt=Ult,Mgt=swt,Jdt=Obt,Vdt=Ibt,Igt=$St,mgt=Zbt,xgt=jwt,Lpt=xPt,Xdt=Sbt,opt=Nwt,tgt=$bt,ygt=twt,Fdt=vbt,ggt=CSt,jgt=rwt,Bdt=mbt,Ldt=cbt,Adt=ebt,Cdt=nbt,Odt=tbt,$dt=rbt,Idt=Jlt,ogt=zbt}function qXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(uHn(),T=n.e,w=n.d,r=n.a,0==T)switch(t){case 0:return"0";case 1:return WQn;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(j=new Ik).a+=t<0?"0E+":"0E",j.a+=-t,j.a}if(y=x8(ONt,WVn,25,1+(m=10*w+1+7),15,1),e=m,1==w)if((u=r[0])<0){I=e0(u,UQn);do{d=I,I=Ojn(I,10),y[--e]=48+dG(ibn(d,cbn(I,10)))&QVn}while(0!=Vhn(I,0))}else{I=u;do{d=I,I=I/10|0,y[--e]=d-10*I+48&QVn}while(0!=I)}else{aHn(r,0,S=x8(ANt,hQn,25,w,15,1),0,P=w);n:for(;;){for(E=0,s=P-1;s>=0;s--)p=fTn(rbn(yz(E,32),e0(S[s],UQn))),S[s]=dG(p),E=dG(kz(p,32));v=dG(E),g=e;do{y[--e]=48+v%10&QVn}while(0!=(v=v/10|0)&&0!=e);for(i=9-g+e,o=0;o<i&&e>0;o++)y[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==y[e];)++e}if(b=T<0,a=m-e-t-1,0==t)return b&&(y[--e]=45),Bdn(y,e,m-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=m-1;l>=h;l--)y[l+1]=y[l];return y[++h]=46,b&&(y[--e]=45),Bdn(y,e,m-e+1)}for(f=2;f<1-a;f++)y[--e]=48;return y[--e]=46,y[--e]=48,b&&(y[--e]=45),Bdn(y,e,m-e)}return M=e+1,c=m,k=new Ck,b&&(k.a+="-"),c-M>=1?(xX(k,y[e]),k.a+=".",k.a+=Bdn(y,e+1,m-e-1)):k.a+=Bdn(y,e,m-e),k.a+="E",a>0&&(k.a+="+"),k.a+=""+a,k.a}function GXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(n.c=t,n.g=new xp,GM(),twn(new Pw(new Dy(n.c))),v=SD(ZAn(n.c,(MMn(),dTt))),u=BB(ZAn(n.c,pTt),316),y=BB(ZAn(n.c,vTt),429),c=BB(ZAn(n.c,hTt),482),m=BB(ZAn(n.c,gTt),430),n.j=Gy(MD(ZAn(n.c,mTt))),a=n.a,u.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw Hp(new _y(N4n+(null!=u.f?u.f:""+u.g)))}if(n.d=new DJ(a,y,c),hon(n.d,(Xcn(),Qrt),TD(ZAn(n.c,lTt))),n.d.c=qy(TD(ZAn(n.c,fTt))),0==YQ(n.c).i)return n.d;for(h=new AL(YQ(n.c));h.e!=h.i.gc();){for(l=(s=BB(kpn(h),33)).g/2,f=s.f/2,k=new xI(s.i+l,s.j+f);hU(n.g,k);)_x(k,(e.Math.random()-.5)*lZn,(e.Math.random()-.5)*lZn);w=BB(ZAn(s,(sWn(),$St)),142),d=new AZ(k,new UV(k.a-l-n.j/2-w.b,k.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),WB(n.d.i,d),VW(n.g,k,new rC(d,s))}switch(m.g){case 0:if(null==v)n.d.d=BB(xq(n.d.i,0),65);else for(p=new Wb(n.d.i);p.a<p.c.c.length;)d=BB(n0(p),65),null!=(b=BB(BB(RX(n.g,d.a),46).b,33).zg())&&mK(b,v)&&(n.d.d=d);break;case 1:for((i=new xI(n.c.g,n.c.f)).a*=.5,i.b*=.5,_x(i,n.c.i,n.c.j),r=RQn,g=new Wb(n.d.i);g.a<g.c.c.length;)(o=W8((d=BB(n0(g),65)).a,i))<r&&(r=o,n.d.d=d);break;default:throw Hp(new _y(N4n+(null!=m.f?m.f:""+m.g)))}return n.d}function zXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(j=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),f=new km,k=new xp,E=tFn(j),jIn(k.f,j,E),b=new xp,r=new YT,d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!t.d&&(t.d=new hK(_Ot,t,8,5)),t.d),(!t.e&&(t.e=new hK(_Ot,t,7,4)),t.e)])));dAn(d);){if(w=BB(U5(d),79),1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));w!=n&&(r5(r,p=BB(Wtn((!w.a&&(w.a=new eU(FOt,w,6,6)),w.a),0),202),r.c.b,r.c),(g=BB(qC(AY(k.f,p)),12))||(g=tFn(p),jIn(k.f,p,g)),l=i?XR(new wA(BB(xq(E,E.c.length-1),8)),BB(xq(g,g.c.length-1),8)):XR(new wA((l1(0,E.c.length),BB(E.c[0],8))),(l1(0,g.c.length),BB(g.c[0],8))),jIn(b.f,p,l))}if(0!=r.b)for(v=BB(xq(E,i?E.c.length-1:0),8),h=1;h<E.c.length;h++){for(m=BB(xq(E,i?E.c.length-1-h:h),8),c=spn(r,0);c.b!=c.d.c;)p=BB(b3(c),202),(g=BB(qC(AY(k.f,p)),12)).c.length<=h?mtn(c):(y=UR(new wA(BB(xq(g,i?g.c.length-1-h:h),8)),BB(qC(AY(b.f,p)),8)),m.a==y.a&&m.b==y.b||(a=m.a-v.a,o=m.b-v.b,(u=y.a-v.a)*o==(s=y.b-v.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==u||isNaN(u)?u:u<0?-1:1)&&(0==o||isNaN(o)?o:o<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(u)||e.Math.abs(o)<e.Math.abs(s))&&r5(f,m,f.c.b,f.c):h>1&&r5(f,v,f.c.b,f.c),mtn(c)));v=m}return f}function UXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A;for(OTn(e,"Greedy cycle removal",1),A=(m=t.a).c.length,n.a=x8(ANt,hQn,25,A,15,1),n.c=x8(ANt,hQn,25,A,15,1),n.b=x8(ANt,hQn,25,A,15,1),s=0,p=new Wb(m);p.a<p.c.c.length;){for((d=BB(n0(p),10)).p=s,T=new Wb(d.j);T.a<T.c.c.length;){for(u=new Wb((k=BB(n0(T),11)).e);u.a<u.c.c.length;)(i=BB(n0(u),17)).c.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.a[s]+=S>0?S+1:1);for(a=new Wb(k.g);a.a<a.c.c.length;)(i=BB(n0(a),17)).d.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?DH(n.e,d):0==n.a[s]&&DH(n.f,d),++s}for(w=-1,b=1,f=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230);A>0;){for(;0!=n.e.b;)I=BB(dH(n.e),10),n.b[I.p]=w--,QKn(n,I),--A;for(;0!=n.f.b;)C=BB(dH(n.f),10),n.b[C.p]=b++,QKn(n,C),--A;if(A>0){for(l=_Vn,v=new Wb(m);v.a<v.c.c.length;)d=BB(n0(v),10),0==n.b[d.p]&&(y=n.c[d.p]-n.a[d.p])>=l&&(y>l&&(f.c=x8(Ant,HWn,1,0,5,1),l=y),f.c[f.c.length]=d);h=n.Zf(f),n.b[h.p]=b++,QKn(n,h),--A}}for(P=m.c.length+1,s=0;s<m.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Wb(m);g.a<g.c.c.length;)for(E=0,M=(j=C2((d=BB(n0(g),10)).j)).length;E<M;++E)for(c=0,o=(r=Z0((k=j[E]).g)).length;c<o;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(tBn(i,!0),hon(t,qft,(hN(),!0)));n.a=null,n.c=null,n.b=null,yQ(n.f),yQ(n.e),HSn(e)}function XXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(i=new Np,u=new Np,g=t/2,b=n.gc(),r=BB(n.Xb(0),8),p=BB(n.Xb(1),8),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=BB(n.Xb(s),8),WB(i,(l1(1,(w=QAn(r.a,r.b,d.a,d.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8)));for(WB(i,(l1(1,(w=QAn(p.a,p.b,r.a,r.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),e=new km,a=new Np,DH(e,(l1(0,i.c.length),BB(i.c[0],8))),h=1;h<i.c.length-2;h+=2)l1(h,i.c.length),c=BB(i.c[h],8),l=qPn((l1(h-1,i.c.length),BB(i.c[h-1],8)),c,(l1(h+1,i.c.length),BB(i.c[h+1],8)),(l1(h+2,i.c.length),BB(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?r5(e,l,e.c.b,e.c):r5(e,c,e.c.b,e.c);for(DH(e,BB(xq(i,i.c.length-1),8)),WB(a,(l1(0,u.c.length),BB(u.c[0],8))),f=1;f<u.c.length-2;f+=2)l1(f,u.c.length),c=BB(u.c[f],8),l=qPn((l1(f-1,u.c.length),BB(u.c[f-1],8)),c,(l1(f+1,u.c.length),BB(u.c[f+1],8)),(l1(f+2,u.c.length),BB(u.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?a.c[a.c.length]=l:a.c[a.c.length]=c;for(WB(a,BB(xq(u,u.c.length-1),8)),o=a.c.length-1;o>=0;o--)DH(e,(l1(o,a.c.length),BB(a.c[o],8)));return e}function WXn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=kAt,s=null,c=null,(o=Vgn(n,u=0,AAt,$At))<n.length&&(b1(o,n.length),58==n.charCodeAt(o))&&(f=n.substr(u,o-u),u=o+1),e=null!=f&&xT(jAt,f.toLowerCase())){if(-1==(o=n.lastIndexOf("!/")))throw Hp(new _y("no archive separator"));a=!0,i=fx(n,u,++o),u=o}else u>=0&&mK(n.substr(u,2),"//")?(o=Vgn(n,u+=2,LAt,NAt),i=n.substr(u,o-u),u=o):null==f||u!=n.length&&(b1(u,n.length),47==n.charCodeAt(u))||(a=!1,-1==(o=yN(n,YTn(35),u))&&(o=n.length),i=n.substr(u,o-u),u=o);if(!e&&u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(o=Vgn(n,u+1,LAt,NAt),(h=n.substr(u+1,o-(u+1))).length>0&&58==fV(h,h.length-1)&&(r=h,u=o)),u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(++u,t=!0),u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u))){for(l=new Np;u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u));)o=Vgn(n,u,LAt,NAt),WB(l,n.substr(u,o-u)),(u=o)<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(Qhn(n,++u)||(l.c[l.c.length]=""));Qgn(l,b=x8(Qtt,sVn,2,l.c.length,6,1))}return u<n.length&&(b1(u,n.length),63==n.charCodeAt(u))&&(-1==(o=lx(n,35,++u))&&(o=n.length),s=n.substr(u,o-u),u=o),u<n.length&&(c=nO(n,++u)),wGn(a,f,i,r,b,s),new rRn(a,f,i,r,t,b,s,c)}function VXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$;for(O=new Np,w=new Wb(t.b);w.a<w.c.c.length;)for(k=new Wb(BB(n0(w),29).a);k.a<k.c.c.length;){for((y=BB(n0(k),10)).p=-1,l=_Vn,T=_Vn,S=new Wb(y.j);S.a<S.c.c.length;){for(c=new Wb((M=BB(n0(S),11)).e);c.a<c.c.c.length;)i=BB(n0(c),17),P=BB(mMn(i,(HXn(),bpt)),19).a,l=e.Math.max(l,P);for(r=new Wb(M.g);r.a<r.c.c.length;)i=BB(n0(r),17),P=BB(mMn(i,(HXn(),bpt)),19).a,T=e.Math.max(T,P)}hon(y,Xmt,iln(l)),hon(y,Wmt,iln(T))}for(p=0,b=new Wb(t.b);b.a<b.c.c.length;)for(k=new Wb(BB(n0(b),29).a);k.a<k.c.c.length;)(y=BB(n0(k),10)).p<0&&((C=new rm).b=p++,jRn(n,y,C),O.c[O.c.length]=C);for(E=sx(O.c.length),f=sx(O.c.length),u=0;u<O.c.length;u++)WB(E,new Np),WB(f,iln(0));for(vzn(t,O,E,f),A=BB(Qgn(O,x8(Ymt,O3n,257,O.c.length,0,1)),840),j=BB(Qgn(E,x8(Rnt,nZn,15,E.c.length,0,1)),192),h=x8(ANt,hQn,25,f.c.length,15,1),o=0;o<h.length;o++)h[o]=(l1(o,f.c.length),BB(f.c[o],19)).a;for(v=0,m=new Np,s=0;s<A.length;s++)0==h[s]&&WB(m,A[s]);for(g=x8(ANt,hQn,25,A.length,15,1);0!=m.c.length;)for(g[(C=BB(s6(m,0),257)).b]=v++;!j[C.b].dc();)--h[($=BB(j[C.b].$c(0),257)).b],0==h[$.b]&&(m.c[m.c.length]=$);for(n.a=x8(Ymt,O3n,257,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],I=g[a],n.a[I]=d,d.b=I,k=new Wb(d.e);k.a<k.c.c.length;)(y=BB(n0(k),10)).p=I;return n.a}function QXn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=fV(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=fV(n.i,n.d))break;if(++n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));switch(t=fV(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));if(61==(t=fV(n.i,n.d++)))i=16;else{if(33!=t)throw Hp(new ak(kWn((u$(),v8n))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=fV(n.i,n.d++)););if(41!=t)throw Hp(new ak(kWn((u$(),m8n))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw Hp(new ak(kWn((u$(),p8n))))}break;case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==fV(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==fV(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==HQn&&n.d<n.j&&56320==(64512&(e=fV(n.i,n.d)))&&(n.a=BQn+(t-HQn<<10)+e-56320,++n.d),i=0}n.c=i}}function YXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;if((j=BB(mMn(n,(HXn(),ept)),98))!=(QEn(),QIt)&&j!=YIt){for(s=new J6((lin((b=(w=n.b).c.length)+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),d=new J6((lin(b+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),WB(s,new xp),WB(s,new xp),WB(d,new Np),WB(d,new Np),k=new Np,t=0;t<b;t++)for(l1(t,w.c.length),e=BB(w.c[t],29),l1(t,s.c.length),E=BB(s.c[t],83),g=new xp,s.c[s.c.length]=g,l1(t,d.c.length),M=BB(d.c[t],15),v=new Np,d.c[d.c.length]=v,r=new Wb(e.a);r.a<r.c.c.length;)if(cln(i=BB(n0(r),10)))k.c[k.c.length]=i;else{for(o=new oz(ZL(fbn(i).a.Kc(),new h));dAn(o);)cln(S=(a=BB(U5(o),17)).c.i)&&((T=BB(E.xc(mMn(S,(hWn(),dlt))),10))||(T=oCn(n,S),E.zc(mMn(S,dlt),T),M.Fc(T)),SZ(a,BB(xq(T.j,1),11)));for(u=new oz(ZL(lbn(i).a.Kc(),new h));dAn(u);)cln(P=(a=BB(U5(u),17)).d.i)&&((p=BB(RX(g,mMn(P,(hWn(),dlt))),10))||(p=oCn(n,P),VW(g,mMn(P,dlt),p),v.c[v.c.length]=p),MZ(a,BB(xq(p.j,0),11)))}for(f=0;f<d.c.length;f++)if(l1(f,d.c.length),!(m=BB(d.c[f],15)).dc())for(l=null,0==f?(l=new HX(n),LZ(0,w.c.length),MS(w.c,0,l)):f==s.c.length-1?(l=new HX(n),w.c[w.c.length]=l):(l1(f-1,w.c.length),l=BB(w.c[f-1],29)),c=m.Kc();c.Ob();)PZ(BB(c.Pb(),10),l);for(y=new Wb(k);y.a<y.c.c.length;)PZ(BB(n0(y),10),null);hon(n,(hWn(),Wft),k)}}function JXn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;if(OTn(e,"Coffman-Graham Layering",1),0!=t.a.c.length){for(j=BB(mMn(t,(HXn(),mgt)),19).a,o=0,a=0,b=new Wb(t.a);b.a<b.c.c.length;)for((l=BB(n0(b),10)).p=o++,c=new oz(ZL(lbn(l).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).p=a++;for(n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,a,16,1),n.b=x8(ANt,hQn,25,o,15,1),n.e=x8(ANt,hQn,25,o,15,1),n.f=x8(ANt,hQn,25,o,15,1),win(n.c),rEn(n,t),d=new Xz(new Dd(n)),k=new Wb(t.a);k.a<k.c.c.length;){for(c=new oz(ZL(fbn(m=BB(n0(k),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.b[m.p];0==n.b[m.p]&&F8(eMn(d,m))}for(u=0;0!=d.b.c.length;)for(m=BB(mnn(d),10),n.f[m.p]=u++,c=new oz(ZL(lbn(m).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(p=r.d.i,--n.b[p.p],JCn(n.c,p,iln(n.f[m.p])),0==n.b[p.p]&&F8(eMn(d,p)));for(w=new Xz(new Rd(n)),y=new Wb(t.a);y.a<y.c.c.length;){for(c=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.e[m.p];0==n.e[m.p]&&F8(eMn(w,m))}for(i=r1(t,f=new Np);0!=w.b.c.length;)for(v=BB(mnn(w),10),(i.a.c.length>=j||!Ndn(v,i))&&(i=r1(t,f)),PZ(v,i),c=new oz(ZL(fbn(v).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&F8(eMn(w,g)));for(s=f.c.length-1;s>=0;--s)WB(t.b,(l1(s,f.c.length),BB(f.c[s],29)));t.a.c=x8(Ant,HWn,1,0,5,1),HSn(e)}else HSn(e)}function ZXn(n){var t,e,i,r,c,a,u,o;for(n.b=1,QXn(n),t=null,0==n.c&&94==n.a?(QXn(n),wWn(),wWn(),Yxn(t=new M0(4),0,unt),a=new M0(4)):(wWn(),wWn(),a=new M0(4)),r=!0;1!=(o=n.c);){if(0==o&&93==n.a&&!r){t&&(WGn(t,a),a=t);break}if(e=n.a,i=!1,10==o)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(a,d_n(e)),i=!0;break;case 105:case 73:case 99:case 67:sHn(a,d_n(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(u=DCn(n,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(a,u),i=!0;break;default:e=qDn(n)}else if(24==o&&!r){if(t&&(WGn(t,a),a=t),WGn(a,ZXn(n)),0!=n.c||93!=n.a)throw Hp(new ak(kWn((u$(),N8n))));break}if(QXn(n),!i){if(0==o){if(91==e)throw Hp(new ak(kWn((u$(),x8n))));if(93==e)throw Hp(new ak(kWn((u$(),D8n))));if(45==e&&!r&&93!=n.a)throw Hp(new ak(kWn((u$(),R8n))))}if(0!=n.c||45!=n.a||45==e&&r)Yxn(a,e,e);else{if(QXn(n),1==(o=n.c))throw Hp(new ak(kWn((u$(),$8n))));if(0==o&&93==n.a)Yxn(a,e,e),Yxn(a,45,45);else{if(0==o&&93==n.a||24==o)throw Hp(new ak(kWn((u$(),R8n))));if(c=n.a,0==o){if(91==c)throw Hp(new ak(kWn((u$(),x8n))));if(93==c)throw Hp(new ak(kWn((u$(),D8n))));if(45==c)throw Hp(new ak(kWn((u$(),R8n))))}else 10==o&&(c=qDn(n));if(QXn(n),e>c)throw Hp(new ak(kWn((u$(),F8n))));Yxn(a,e,c)}}}r=!1}if(1==n.c)throw Hp(new ak(kWn((u$(),$8n))));return T$n(a),qHn(a),n.b=0,QXn(n),a}function nWn(n){V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#decimal"])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#integer"])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#boolean"])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EBoolean",t8n,"EBoolean:Object"])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#byte"])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#hexBinary"])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EByte",t8n,"EByte:Object"])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EChar",t8n,"EChar:Object"])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#double"])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EDouble",t8n,"EDouble:Object"])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#float"])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EFloat",t8n,"EFloat:Object"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#int"])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EInt",t8n,"EInt:Object"])),V$n(n.N,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#long"])),V$n(n.O,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"ELong",t8n,"ELong:Object"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#short"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EShort",t8n,"EShort:Object"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#string"]))}function tWn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(1==n.c.length)return l1(0,n.c.length),BB(n.c[0],135);if(n.c.length<=0)return new P6;for(s=new Wb(n);s.a<s.c.c.length;){for(u=BB(n0(s),135),m=0,d=DWn,g=DWn,b=_Vn,w=_Vn,v=spn(u.b,0);v.b!=v.d.c;)p=BB(b3(v),86),m+=BB(mMn(p,(IAn(),$kt)),19).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);hon(u,(IAn(),$kt),iln(m)),hon(u,(qqn(),nkt),new xI(d,g)),hon(u,Zyt,new xI(b,w))}for(SQ(),m$(n,new ga),qan(k=new P6,(l1(0,n.c.length),BB(n.c[0],94))),l=0,S=0,h=new Wb(n);h.a<h.c.c.length;)u=BB(n0(h),135),j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8)),l=e.Math.max(l,j.a),S+=j.a*j.b;for(l=e.Math.max(l,e.Math.sqrt(S)*Gy(MD(mMn(k,(IAn(),jkt))))),P=0,I=0,f=0,t=E=Gy(MD(mMn(k,xkt))),o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),135),P+(j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8))).a>l&&(P=0,I+=f+E,f=0),ELn(k,u,P,I),t=e.Math.max(t,P+j.a),f=e.Math.max(f,j.b),P+=j.a+E;for(y=new xp,i=new xp,M=new Wb(n);M.a<M.c.c.length;)for(r=qy(TD(mMn(T=BB(n0(M),135),(sWn(),lSt)))),a=(T.q?T.q:het).vc().Kc();a.Ob();)hU(y,(c=BB(a.Pb(),42)).cd())?GC(BB(c.cd(),146).wg())!==GC(c.dd())&&(r&&hU(i,c.cd())?($T(),BB(c.cd(),146).tg()):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()),r&&VW(i,BB(c.cd(),146),c.dd()))):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()));return k}function eWn(){eWn=O,RXn(),JCn(put=new pJ,(kUn(),dCt),wCt),JCn(put,MCt,wCt),JCn(put,gCt,wCt),JCn(put,jCt,wCt),JCn(put,kCt,wCt),JCn(put,mCt,wCt),JCn(put,jCt,dCt),JCn(put,wCt,hCt),JCn(put,dCt,hCt),JCn(put,MCt,hCt),JCn(put,gCt,hCt),JCn(put,yCt,hCt),JCn(put,jCt,hCt),JCn(put,kCt,hCt),JCn(put,mCt,hCt),JCn(put,bCt,hCt),JCn(put,wCt,ECt),JCn(put,dCt,ECt),JCn(put,hCt,ECt),JCn(put,MCt,ECt),JCn(put,gCt,ECt),JCn(put,yCt,ECt),JCn(put,jCt,ECt),JCn(put,bCt,ECt),JCn(put,TCt,ECt),JCn(put,kCt,ECt),JCn(put,pCt,ECt),JCn(put,mCt,ECt),JCn(put,dCt,MCt),JCn(put,gCt,MCt),JCn(put,jCt,MCt),JCn(put,mCt,MCt),JCn(put,dCt,gCt),JCn(put,MCt,gCt),JCn(put,jCt,gCt),JCn(put,gCt,gCt),JCn(put,kCt,gCt),JCn(put,wCt,fCt),JCn(put,dCt,fCt),JCn(put,hCt,fCt),JCn(put,ECt,fCt),JCn(put,MCt,fCt),JCn(put,gCt,fCt),JCn(put,yCt,fCt),JCn(put,jCt,fCt),JCn(put,TCt,fCt),JCn(put,bCt,fCt),JCn(put,mCt,fCt),JCn(put,kCt,fCt),JCn(put,vCt,fCt),JCn(put,wCt,TCt),JCn(put,dCt,TCt),JCn(put,hCt,TCt),JCn(put,MCt,TCt),JCn(put,gCt,TCt),JCn(put,yCt,TCt),JCn(put,jCt,TCt),JCn(put,bCt,TCt),JCn(put,mCt,TCt),JCn(put,pCt,TCt),JCn(put,vCt,TCt),JCn(put,dCt,bCt),JCn(put,MCt,bCt),JCn(put,gCt,bCt),JCn(put,jCt,bCt),JCn(put,TCt,bCt),JCn(put,mCt,bCt),JCn(put,kCt,bCt),JCn(put,wCt,lCt),JCn(put,dCt,lCt),JCn(put,hCt,lCt),JCn(put,MCt,lCt),JCn(put,gCt,lCt),JCn(put,yCt,lCt),JCn(put,jCt,lCt),JCn(put,bCt,lCt),JCn(put,mCt,lCt),JCn(put,dCt,kCt),JCn(put,hCt,kCt),JCn(put,ECt,kCt),JCn(put,gCt,kCt),JCn(put,wCt,pCt),JCn(put,dCt,pCt),JCn(put,ECt,pCt),JCn(put,MCt,pCt),JCn(put,gCt,pCt),JCn(put,yCt,pCt),JCn(put,jCt,pCt),JCn(put,jCt,vCt),JCn(put,gCt,vCt),JCn(put,bCt,wCt),JCn(put,bCt,MCt),JCn(put,bCt,hCt),JCn(put,yCt,wCt),JCn(put,yCt,dCt),JCn(put,yCt,ECt)}function iWn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zQ(n.b,n.a,t,n.c);case 1:return new LL(n.a,t,Awn(t.Tg(),n.c));case 43:return new xL(n.a,t,Awn(t.Tg(),n.c));case 3:return new $L(n.a,t,Awn(t.Tg(),n.c));case 45:return new NL(n.a,t,Awn(t.Tg(),n.c));case 41:return new y9(BB(Ckn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 50:return new yin(BB(Ckn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 5:return new iK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 47:return new rK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 7:return new eU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 49:return new eK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 9:return new FL(n.a,t,Awn(t.Tg(),n.c));case 11:return new _L(n.a,t,Awn(t.Tg(),n.c));case 13:return new KL(n.a,t,Awn(t.Tg(),n.c));case 15:return new MH(n.a,t,Awn(t.Tg(),n.c));case 17:return new BL(n.a,t,Awn(t.Tg(),n.c));case 19:return new RL(n.a,t,Awn(t.Tg(),n.c));case 21:return new DL(n.a,t,Awn(t.Tg(),n.c));case 23:return new yH(n.a,t,Awn(t.Tg(),n.c));case 25:return new fK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 27:return new hK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 29:return new oK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 31:return new cK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 33:return new sK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 35:return new uK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 37:return new aK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 39:return new iU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 40:return new Ecn(t,Awn(t.Tg(),n.c));default:throw Hp(new dy("Unknown feature style: "+n.e))}}function rWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(OTn(e,"Brandes & Koepf node placement",1),n.a=t,n.c=FFn(t),i=BB(mMn(t,(HXn(),Ngt)),274),b=qy(TD(mMn(t,xgt))),n.d=i==(Bjn(),Qht)&&!b||i==Xht,Jqn(n,t),y=null,k=null,g=null,p=null,lin(4,AVn),d=new J6(4),BB(mMn(t,Ngt),274).g){case 3:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),d.c[d.c.length]=g;break;case 1:p=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),nyt)),d.c[d.c.length]=p;break;case 4:y=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),tyt)),d.c[d.c.length]=y;break;case 2:k=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),tyt)),d.c[d.c.length]=k;break;default:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),p=new qKn(t,n.c.d,cyt,nyt),y=new qKn(t,n.c.d,ryt,tyt),k=new qKn(t,n.c.d,cyt,tyt),d.c[d.c.length]=y,d.c[d.c.length]=k,d.c[d.c.length]=g,d.c[d.c.length]=p}for(r=new iI(t,n.c),u=new Wb(d);u.a<u.c.c.length;)PXn(r,c=BB(n0(u),180),n.b),WBn(c);for(l=new Jyn(t,n.c),o=new Wb(d);o.a<o.c.c.length;)Hzn(l,c=BB(n0(o),180));if(e.n)for(s=new Wb(d);s.a<s.c.c.length;)OH(e,(c=BB(n0(s),180))+" size is "+v$n(c));if(f=null,n.d&&CBn(t,h=FUn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Wb(d);s.a<s.c.c.length;)CBn(t,c=BB(n0(s),180),e)&&(!f||v$n(f)>v$n(c))&&(f=c);for(!f&&(l1(0,d.c.length),f=BB(d.c[0],180)),w=new Wb(t.b);w.a<w.c.c.length;)for(m=new Wb(BB(n0(w),29).a);m.a<m.c.c.length;)(v=BB(n0(m),10)).n.b=Gy(f.p[v.p])+Gy(f.d[v.p]);for(e.n&&(OH(e,"Chosen node placement: "+f),OH(e,"Blocks: "+xOn(f)),OH(e,"Classes: "+UAn(f,e)),OH(e,"Marked edges: "+n.b)),a=new Wb(d);a.a<a.c.c.length;)(c=BB(n0(a),180)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;zrn(n.c),n.b.a.$b(),HSn(e)}function cWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(a=new YT,v=BB(mMn(e,(HXn(),Udt)),103),w=0,Frn(a,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=a.b;)s=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33),(GC(ZAn(t,Ldt))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&!qy(TD(ZAn(s,$dt)))&&Ypn(s,(hWn(),wlt),iln(w++)),!qy(TD(ZAn(s,Ggt)))&&(f=0!=(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a).i,b=kTn(s),l=GC(ZAn(s,sgt))===GC((ufn(),pIt)),g=null,(T=!P8(s,(sWn(),eSt))||mK(SD(ZAn(s,eSt)),w1n))&&l&&(f||b)&&(hon(g=kFn(s),Udt,v),Lx(g,gpt)&&My(new uwn(Gy(MD(mMn(g,gpt)))),g),0!=BB(ZAn(s,Fgt),174).gc()&&(h=g,JT(new Rq(null,(!s.c&&(s.c=new eU(XOt,s,9,9)),new w1(s.c,16))),new Xw(h)),mDn(s,g))),m=e,(y=BB(RX(n.a,JJ(s)),10))&&(m=y.e),d=wzn(n,s,m),g&&(d.e=g,g.e=d,Frn(a,(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a))));for(w=0,r5(a,t,a.c.b,a.c);0!=a.b;){for(o=new AL((!(c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33)).b&&(c.b=new eU(_Ot,c,12,3)),c.b));o.e!=o.i.gc();)tKn(u=BB(kpn(o),79)),(GC(ZAn(t,Ldt))!==GC((mon(),Nvt))||GC(ZAn(t,Gdt))===GC((Vvn(),Eht))||GC(ZAn(t,Gdt))===GC((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GC(ZAn(t,Idt))!==GC((Bfn(),wut)))&&Ypn(u,(hWn(),wlt),iln(w++)),j=PTn(BB(Wtn((!u.b&&(u.b=new hK(KOt,u,4,7)),u.b),0),82)),E=PTn(BB(Wtn((!u.c&&(u.c=new hK(KOt,u,5,8)),u.c),0),82)),qy(TD(ZAn(u,Ggt)))||qy(TD(ZAn(j,Ggt)))||qy(TD(ZAn(E,Ggt)))||(p=c,QCn(u)&&qy(TD(ZAn(j,wgt)))&&qy(TD(ZAn(u,dgt)))||Itn(E,j)?p=j:Itn(j,E)&&(p=E),m=e,(y=BB(RX(n.a,p),10))&&(m=y.e),hon(uWn(n,u,p,m),(hWn(),Fft),Lxn(n,u,t,e)));if(l=GC(ZAn(c,sgt))===GC((ufn(),pIt)))for(r=new AL((!c.a&&(c.a=new eU(UOt,c,10,11)),c.a));r.e!=r.i.gc();)T=!P8(i=BB(kpn(r),33),(sWn(),eSt))||mK(SD(ZAn(i,eSt)),w1n),k=GC(ZAn(i,sgt))===GC(pIt),T&&k&&r5(a,i,a.c.b,a.c)}}function aWn(n,t,e,i,r,c){var a,u,o,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-sQn>=-1900?1:0,oO(n,e>=4?Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn])[a]:Pun(Gk(Qtt,1),sVn,2,6,["BC","AD"])[a]);break;case 121:opn(n,e,i);break;case 77:XKn(n,e,i);break;case 107:Enn(n,0==(u=r.q.getHours())?24:u,e);break;case 83:RLn(n,e,r);break;case 69:o=i.q.getDay(),oO(n,5==e?Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[o]:4==e?Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[o]:Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[o]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[1]):oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[0]);break;case 104:Enn(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Enn(n,r.q.getHours()%12,e);break;case 72:Enn(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[h]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Enn(n,h,1);break;case 76:f=i.q.getMonth(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[f]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Enn(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,oO(n,e<4?Pun(Gk(Qtt,1),sVn,2,6,["Q1","Q2","Q3","Q4"])[l]:Pun(Gk(Qtt,1),sVn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Enn(n,i.q.getDate(),e);break;case 109:Enn(n,r.q.getMinutes(),e);break;case 115:Enn(n,r.q.getSeconds(),e);break;case 122:oO(n,e<4?c.c[0]:c.c[1]);break;case 118:oO(n,c.b);break;case 90:oO(n,e<3?nCn(c):3==e?wCn(c):dCn(c.a));break;default:return!1}return!0}function uWn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I;if(tKn(t),o=BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82),h=BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82),u=PTn(o),s=PTn(h),a=0==(!t.a&&(t.a=new eU(FOt,t,6,6)),t.a).i?null:BB(Wtn((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),0),202),j=BB(RX(n.a,u),10),S=BB(RX(n.a,s),10),E=null,P=null,cL(o,186)&&(cL(k=BB(RX(n.a,o),299),11)?E=BB(k,11):cL(k,10)&&(j=BB(k,10),E=BB(xq(j.j,0),11))),cL(h,186)&&(cL(M=BB(RX(n.a,h),299),11)?P=BB(M,11):cL(M,10)&&(S=BB(M,10),P=BB(xq(S.j,0),11))),!j||!S)throw Hp(new ck("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(qan(d=new wY,t),hon(d,(hWn(),dlt),t),hon(d,(HXn(),vgt),null),b=BB(mMn(i,Zft),21),j==S&&b.Fc((bDn(),vft)),E||(ain(),y=qvt,T=null,a&&vA(BB(mMn(j,ept),98))&&(Y3(T=new xI(a.j,a.k),XJ(t)),t5(T,e),Itn(s,u)&&(y=Hvt,UR(T,j.n))),E=dHn(j,T,y,i)),P||(ain(),y=Hvt,I=null,a&&vA(BB(mMn(S,ept),98))&&(Y3(I=new xI(a.b,a.c),XJ(t)),t5(I,e)),P=dHn(S,I,y,vW(S))),SZ(d,E),MZ(d,P),(E.e.c.length>1||E.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((bDn(),bft)),l=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));l.e!=l.i.gc();)if(!qy(TD(ZAn(f=BB(kpn(l),137),Ggt)))&&f.a)switch(g=Hhn(f),WB(d.b,g),BB(mMn(g,Ydt),272).g){case 1:case 2:b.Fc((bDn(),fft));break;case 0:b.Fc((bDn(),sft)),hon(g,Ydt,(Rtn(),zPt))}if(c=BB(mMn(i,qdt),314),p=BB(mMn(i,_gt),315),r=c==(Oin(),sht)||p==(Nvn(),pvt),a&&0!=(!a.a&&(a.a=new $L(xOt,a,5)),a.a).i&&r){for(v=qSn(a),w=new km,m=spn(v,0);m.b!=m.d.c;)DH(w,new wA(BB(b3(m),8)));hon(d,glt,w)}return d}function oWn(n){n.gb||(n.gb=!0,n.b=kan(n,0),Rrn(n.b,18),Krn(n.b,19),n.a=kan(n,1),Rrn(n.a,1),Krn(n.a,2),Krn(n.a,3),Krn(n.a,4),Krn(n.a,5),n.o=kan(n,2),Rrn(n.o,8),Rrn(n.o,9),Krn(n.o,10),Krn(n.o,11),Krn(n.o,12),Krn(n.o,13),Krn(n.o,14),Krn(n.o,15),Krn(n.o,16),Krn(n.o,17),Krn(n.o,18),Krn(n.o,19),Krn(n.o,20),Krn(n.o,21),Krn(n.o,22),Krn(n.o,23),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),n.p=kan(n,3),Rrn(n.p,2),Rrn(n.p,3),Rrn(n.p,4),Rrn(n.p,5),Krn(n.p,6),Krn(n.p,7),otn(n.p),otn(n.p),n.q=kan(n,4),Rrn(n.q,8),n.v=kan(n,5),Krn(n.v,9),otn(n.v),otn(n.v),otn(n.v),n.w=kan(n,6),Rrn(n.w,2),Rrn(n.w,3),Rrn(n.w,4),Krn(n.w,5),n.B=kan(n,7),Krn(n.B,1),otn(n.B),otn(n.B),otn(n.B),n.Q=kan(n,8),Krn(n.Q,0),otn(n.Q),n.R=kan(n,9),Rrn(n.R,1),n.S=kan(n,10),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),n.T=kan(n,11),Krn(n.T,10),Krn(n.T,11),Krn(n.T,12),Krn(n.T,13),Krn(n.T,14),otn(n.T),otn(n.T),n.U=kan(n,12),Rrn(n.U,2),Rrn(n.U,3),Krn(n.U,4),Krn(n.U,5),Krn(n.U,6),Krn(n.U,7),otn(n.U),n.V=kan(n,13),Krn(n.V,10),n.W=kan(n,14),Rrn(n.W,18),Rrn(n.W,19),Rrn(n.W,20),Krn(n.W,21),Krn(n.W,22),Krn(n.W,23),n.bb=kan(n,15),Rrn(n.bb,10),Rrn(n.bb,11),Rrn(n.bb,12),Rrn(n.bb,13),Rrn(n.bb,14),Rrn(n.bb,15),Rrn(n.bb,16),Krn(n.bb,17),otn(n.bb),otn(n.bb),n.eb=kan(n,16),Rrn(n.eb,2),Rrn(n.eb,3),Rrn(n.eb,4),Rrn(n.eb,5),Rrn(n.eb,6),Rrn(n.eb,7),Krn(n.eb,8),Krn(n.eb,9),n.ab=kan(n,17),Rrn(n.ab,0),Rrn(n.ab,1),n.H=kan(n,18),Krn(n.H,0),Krn(n.H,1),Krn(n.H,2),Krn(n.H,3),Krn(n.H,4),Krn(n.H,5),otn(n.H),n.db=kan(n,19),Krn(n.db,2),n.c=jan(n,20),n.d=jan(n,21),n.e=jan(n,22),n.f=jan(n,23),n.i=jan(n,24),n.g=jan(n,25),n.j=jan(n,26),n.k=jan(n,27),n.n=jan(n,28),n.r=jan(n,29),n.s=jan(n,30),n.t=jan(n,31),n.u=jan(n,32),n.fb=jan(n,33),n.A=jan(n,34),n.C=jan(n,35),n.D=jan(n,36),n.F=jan(n,37),n.G=jan(n,38),n.I=jan(n,39),n.J=jan(n,40),n.L=jan(n,41),n.M=jan(n,42),n.N=jan(n,43),n.O=jan(n,44),n.P=jan(n,45),n.X=jan(n,46),n.Y=jan(n,47),n.Z=jan(n,48),n.$=jan(n,49),n._=jan(n,50),n.cb=jan(n,51),n.K=jan(n,52))}function sWn(){var n,t;sWn=O,eSt=new up(w5n),mPt=new up(d5n),wvn(),iSt=new $O(W2n,rSt=IMt),new $p,cSt=new $O(VJn,null),aSt=new up(g5n),wEn(),fSt=EG(ZMt,Pun(Gk(qPt,1),$Vn,291,0,[VMt])),hSt=new $O(u3n,fSt),lSt=new $O(X2n,(hN(),!1)),Ffn(),bSt=new $O(J2n,wSt=BPt),Mbn(),vSt=new $O(y2n,mSt=ZPt),jSt=new $O(A4n,!1),ufn(),ESt=new $O(d2n,TSt=vIt),WSt=new WA(12),XSt=new $O(QJn,WSt),ISt=new $O(jZn,!1),CSt=new $O(m3n,!1),USt=new $O(MZn,!1),QEn(),uPt=new $O(EZn,oPt=YIt),gPt=new up(g3n),pPt=new up(pZn),vPt=new up(yZn),kPt=new up(kZn),ASt=new km,OSt=new $O(o3n,ASt),sSt=new $O(f3n,!1),MSt=new $O(l3n,!1),new up(p5n),LSt=new lm,$St=new $O(p3n,LSt),zSt=new $O(z2n,!1),new $p,yPt=new $O(v5n,1),new $O(m5n,!0),iln(0),new $O(y5n,iln(100)),new $O(k5n,!1),iln(0),new $O(j5n,iln(4e3)),iln(0),new $O(E5n,iln(400)),new $O(T5n,!1),new $O(M5n,!1),new $O(S5n,!0),new $O(P5n,!1),Fwn(),uSt=new $O(b5n,oSt=eOt),jPt=new $O(L2n,10),EPt=new $O(N2n,10),TPt=new $O(XJn,20),MPt=new $O(x2n,10),SPt=new $O(mZn,2),PPt=new $O(D2n,10),CPt=new $O(R2n,0),OPt=new $O(F2n,5),APt=new $O(K2n,1),$Pt=new $O(_2n,1),LPt=new $O(vZn,20),NPt=new $O(B2n,10),RPt=new $O(H2n,10),IPt=new up(q2n),DPt=new lA,xPt=new $O(v3n,DPt),YSt=new up(d3n),VSt=new $O(w3n,QSt=!1),xSt=new WA(5),NSt=new $O(Z2n,xSt),n$n(),t=BB(Vj(GIt),9),RSt=new YK(t,BB(SR(t,t.length),9),0),DSt=new $O(IZn,RSt),cpn(),ZSt=new $O(e3n,nPt=BIt),ePt=new up(i3n),iPt=new up(r3n),rPt=new up(c3n),tPt=new up(a3n),n=BB(Vj(YCt),9),_St=new YK(n,BB(SR(n,n.length),9),0),KSt=new $O(PZn,_St),GSt=nbn((n_n(),GCt)),qSt=new $O(SZn,GSt),HSt=new xI(0,0),BSt=new $O(BZn,HSt),FSt=new $O(Y2n,!1),Rtn(),gSt=new $O(s3n,pSt=zPt),dSt=new $O(TZn,!1),new up(I5n),iln(1),new $O(C5n,null),cPt=new up(b3n),sPt=new up(h3n),kUn(),wPt=new $O(U2n,dPt=PCt),aPt=new up(G2n),lCn(),lPt=nbn(rCt),fPt=new $O(CZn,lPt),hPt=new $O(n3n,!1),bPt=new $O(t3n,!0),SSt=new $O(V2n,!1),PSt=new $O(Q2n,!1),ySt=new $O(WJn,1),nMn(),new $O(O5n,kSt=aIt),JSt=!0}function hWn(){var n,t;hWn=O,dlt=new up(OZn),Fft=new up("coordinateOrigin"),Mlt=new up("processors"),_ft=new iR("compoundNode",(hN(),!1)),elt=new iR("insideConnections",!1),glt=new up("originalBendpoints"),plt=new up("originalDummyNodePosition"),vlt=new up("originalLabelEdge"),Plt=new up("representedLabels"),zft=new up("endLabels"),Uft=new up("endLabel.origin"),ult=new iR("labelSide",(Xyn(),MIt)),blt=new iR("maxEdgeThickness",0),Ilt=new iR("reversed",!1),Slt=new up(AZn),hlt=new iR("longEdgeSource",null),flt=new iR("longEdgeTarget",null),slt=new iR("longEdgeHasLabelDummies",!1),olt=new iR("longEdgeBeforeLabelDummy",!1),Gft=new iR("edgeConstraint",(Jun(),Aht)),rlt=new up("inLayerLayoutUnit"),ilt=new iR("inLayerConstraint",(z7(),Pft)),clt=new iR("inLayerSuccessorConstraint",new Np),alt=new iR("inLayerSuccessorConstraintBetweenNonDummies",!1),Elt=new up("portDummy"),Bft=new iR("crossingHint",iln(0)),Zft=new iR("graphProperties",new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),Qft=new iR("externalPortSide",(kUn(),PCt)),Yft=new iR("externalPortSize",new Gj),Wft=new up("externalPortReplacedDummies"),Vft=new up("externalPortReplacedDummy"),Xft=new iR("externalPortConnections",new YK(n=BB(Vj(FCt),9),BB(SR(n,n.length),9),0)),Tlt=new iR(dJn,0),xft=new up("barycenterAssociates"),Klt=new up("TopSideComments"),Dft=new up("BottomSideComments"),Kft=new up("CommentConnectionPort"),tlt=new iR("inputCollect",!1),klt=new iR("outputCollect",!1),qft=new iR("cyclic",!1),Hft=new up("crossHierarchyMap"),Rlt=new up("targetOffset"),new iR("splineLabelSize",new Gj),Alt=new up("spacings"),jlt=new iR("partitionConstraint",!1),Rft=new up("breakingPoint.info"),xlt=new up("splines.survivingEdge"),Nlt=new up("splines.route.start"),$lt=new up("splines.edgeChain"),ylt=new up("originalPortConstraints"),Olt=new up("selfLoopHolder"),Llt=new up("splines.nsPortY"),wlt=new up("modelOrder"),llt=new up("longEdgeTargetNode"),Jft=new iR(z1n,!1),Clt=new iR(z1n,!1),nlt=new up("layerConstraints.hiddenNodes"),mlt=new up("layerConstraints.opposidePort"),Dlt=new up("targetNode.modelOrder")}function fWn(){fWn=O,_nn(),Sbt=new $O(U1n,Pbt=Sht),Gbt=new $O(X1n,(hN(),!1)),z2(),Vbt=new $O(W1n,Qbt=Aft),wwt=new $O(V1n,!1),dwt=new $O(Q1n,!0),Ult=new $O(Y1n,!1),U7(),Nwt=new $O(J1n,xwt=Kvt),iln(1),qwt=new $O(Z1n,iln(7)),Gwt=new $O(n0n,!1),zbt=new $O(t0n,!1),Vvn(),Tbt=new $O(e0n,Mbt=yht),TTn(),lwt=new $O(i0n,bwt=tvt),Tbn(),ewt=new $O(r0n,iwt=qlt),iln(-1),twt=new $O(c0n,iln(-1)),iln(-1),rwt=new $O(a0n,iln(-1)),iln(-1),cwt=new $O(u0n,iln(4)),iln(-1),uwt=new $O(o0n,iln(2)),sNn(),hwt=new $O(s0n,fwt=Cvt),iln(0),swt=new $O(h0n,iln(0)),Zbt=new $O(f0n,iln(DWn)),Oin(),jbt=new $O(l0n,Ebt=hht),ubt=new $O(b0n,!1),gbt=new $O(w0n,.1),ybt=new $O(d0n,!1),iln(-1),vbt=new $O(g0n,iln(-1)),iln(-1),mbt=new $O(p0n,iln(-1)),iln(0),obt=new $O(v0n,iln(40)),Kan(),bbt=new $O(m0n,wbt=Eft),sbt=new $O(y0n,hbt=kft),Nvn(),$wt=new $O(k0n,Lwt=gvt),jwt=new up(j0n),g7(),gwt=new $O(E0n,pwt=qht),Bjn(),mwt=new $O(T0n,ywt=Qht),new $p,Mwt=new $O(M0n,.3),Pwt=new up(S0n),bvn(),Iwt=new $O(P0n,Cwt=lvt),Hcn(),Nbt=new $O(I0n,xbt=Wvt),A6(),Dbt=new $O(C0n,Rbt=Zvt),Usn(),Kbt=new $O(O0n,_bt=rmt),Bbt=new $O(A0n,.2),$bt=new $O($0n,2),_wt=new $O(L0n,null),Bwt=new $O(N0n,10),Fwt=new $O(x0n,10),Hwt=new $O(D0n,20),iln(0),Dwt=new $O(R0n,iln(0)),iln(0),Rwt=new $O(K0n,iln(0)),iln(0),Kwt=new $O(_0n,iln(0)),Xlt=new $O(F0n,!1),JMn(),Qlt=new $O(B0n,Ylt=cft),V8(),Wlt=new $O(H0n,Vlt=aht),Xbt=new $O(q0n,!1),iln(0),Ubt=new $O(G0n,iln(16)),iln(0),Wbt=new $O(z0n,iln(5)),$un(),ldt=new $O(U0n,bdt=bmt),zwt=new $O(X0n,10),Wwt=new $O(W0n,1),uin(),edt=new $O(V0n,idt=ght),Ywt=new up(Q0n),ndt=iln(1),iln(0),Zwt=new $O(Y0n,ndt),dcn(),pdt=new $O(J0n,vdt=umt),wdt=new up(Z0n),odt=new $O(n2n,!0),adt=new $O(t2n,2),hdt=new $O(e2n,!0),gSn(),Obt=new $O(i2n,Abt=_ht),$Pn(),Ibt=new $O(r2n,Cbt=Zst),mon(),cbt=new $O(c2n,abt=Nvt),rbt=new $O(a2n,!1),Bfn(),Jlt=new $O(u2n,Zlt=wut),Mhn(),ebt=new $O(o2n,ibt=cvt),nbt=new $O(s2n,0),tbt=new $O(h2n,0),Jbt=jht,Ybt=sht,awt=nvt,owt=nvt,nwt=Ypt,ufn(),pbt=pIt,kbt=hht,dbt=hht,fbt=hht,lbt=pIt,Ewt=mvt,Twt=gvt,vwt=gvt,kwt=gvt,Swt=vvt,Awt=mvt,Owt=mvt,Mbn(),Fbt=JPt,Hbt=JPt,qbt=rmt,Lbt=YPt,Uwt=wmt,Xwt=lmt,Vwt=wmt,Qwt=lmt,rdt=wmt,cdt=lmt,Jwt=dht,tdt=ght,mdt=wmt,ydt=lmt,ddt=wmt,gdt=lmt,sdt=lmt,udt=lmt,fdt=lmt}function lWn(){lWn=O,rot=new nP("DIRECTION_PREPROCESSOR",0),tot=new nP("COMMENT_PREPROCESSOR",1),cot=new nP("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),kot=new nP("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Fot=new nP("PARTITION_PREPROCESSOR",4),Mot=new nP("LABEL_DUMMY_INSERTER",5),Uot=new nP("SELF_LOOP_PREPROCESSOR",6),Oot=new nP("LAYER_CONSTRAINT_PREPROCESSOR",7),Kot=new nP("PARTITION_MIDPROCESSOR",8),got=new nP("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),Not=new nP("NODE_PROMOTION",10),Cot=new nP("LAYER_CONSTRAINT_POSTPROCESSOR",11),_ot=new nP("PARTITION_POSTPROCESSOR",12),lot=new nP("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Wot=new nP("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),Vut=new nP("BREAKING_POINT_INSERTER",15),Lot=new nP("LONG_EDGE_SPLITTER",16),Hot=new nP("PORT_SIDE_PROCESSOR",17),jot=new nP("INVERTED_PORT_PROCESSOR",18),Bot=new nP("PORT_LIST_SORTER",19),Qot=new nP("SORT_BY_INPUT_ORDER_OF_MODEL",20),Dot=new nP("NORTH_SOUTH_PORT_PREPROCESSOR",21),Qut=new nP("BREAKING_POINT_PROCESSOR",22),Rot=new nP(E1n,23),Yot=new nP(T1n,24),Got=new nP("SELF_LOOP_PORT_RESTORER",25),Vot=new nP("SINGLE_EDGE_GRAPH_WRAPPER",26),Eot=new nP("IN_LAYER_CONSTRAINT_PROCESSOR",27),sot=new nP("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),Tot=new nP("LABEL_AND_NODE_SIZE_PROCESSOR",29),yot=new nP("INNERMOST_NODE_MARGIN_CALCULATOR",30),Xot=new nP("SELF_LOOP_ROUTER",31),Zut=new nP("COMMENT_NODE_MARGIN_CALCULATOR",32),uot=new nP("END_LABEL_PREPROCESSOR",33),Pot=new nP("LABEL_DUMMY_SWITCHER",34),Jut=new nP("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),Iot=new nP("LABEL_SIDE_SELECTOR",36),vot=new nP("HYPEREDGE_DUMMY_MERGER",37),bot=new nP("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),Aot=new nP("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),dot=new nP("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),eot=new nP("CONSTRAINTS_POSTPROCESSOR",41),not=new nP("COMMENT_POSTPROCESSOR",42),mot=new nP("HYPERNODE_PROCESSOR",43),wot=new nP("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),$ot=new nP("LONG_EDGE_JOINER",45),zot=new nP("SELF_LOOP_POSTPROCESSOR",46),Yut=new nP("BREAKING_POINT_REMOVER",47),xot=new nP("NORTH_SOUTH_PORT_POSTPROCESSOR",48),pot=new nP("HORIZONTAL_COMPACTOR",49),Sot=new nP("LABEL_DUMMY_REMOVER",50),hot=new nP("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),oot=new nP("END_LABEL_SORTER",52),qot=new nP("REVERSED_EDGE_RESTORER",53),aot=new nP("END_LABEL_POSTPROCESSOR",54),fot=new nP("HIERARCHICAL_NODE_RESIZER",55),iot=new nP("DIRECTION_POSTPROCESSOR",56)}function bWn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,I,C,O,A,$,L,N,x,D,R,K,_,F,B,H,q,G,z,U,X,W,V,Q,Y,J,Z,nn,tn,en,rn,cn,an,un,on;for(J=0,L=0,D=(O=t).length;L<D;++L)for(G=new Wb((I=O[L]).j);G.a<G.c.c.length;){for(U=0,o=new Wb((q=BB(n0(G),11)).g);o.a<o.c.c.length;)u=BB(n0(o),17),I.c!=u.d.i.c&&++U;U>0&&(n.a[q.p]=J++)}for(rn=0,N=0,R=(A=i).length;N<R;++N){for(K=0,G=new Wb((I=A[N]).j);G.a<G.c.c.length&&(q=BB(n0(G),11)).j==(kUn(),sCt);)for(o=new Wb(q.e);o.a<o.c.c.length;)if(u=BB(n0(o),17),I.c!=u.c.i.c){++K;break}for(F=0,X=new M2(I.j,I.j.c.length);X.b>0;){for(Px(X.b>0),U=0,o=new Wb((q=BB(X.a.Xb(X.c=--X.b),11)).e);o.a<o.c.c.length;)u=BB(n0(o),17),I.c!=u.c.i.c&&++U;U>0&&(q.j==(kUn(),sCt)?(n.a[q.p]=rn,++rn):(n.a[q.p]=rn+K+F,++F))}rn+=F}for(z=new xp,d=new fA,$=0,x=(C=t).length;$<x;++$)for(tn=new Wb((I=C[$]).j);tn.a<tn.c.c.length;)for(o=new Wb((nn=BB(n0(tn),11)).g);o.a<o.c.c.length;)if(an=(u=BB(n0(o),17)).d,I.c!=an.i.c)if(Z=BB(qC(AY(z.f,nn)),467),cn=BB(qC(AY(z.f,an)),467),Z||cn)if(Z)if(cn)if(Z==cn)WB(Z.a,u);else{for(WB(Z.a,u),H=new Wb(cn.d);H.a<H.c.c.length;)B=BB(n0(H),11),jIn(z.f,B,Z);gun(Z.a,cn.a),gun(Z.d,cn.d),d.a.Bc(cn)}else WB(Z.a,u),WB(Z.d,an),jIn(z.f,an,Z);else WB(cn.a,u),WB(cn.d,nn),jIn(z.f,nn,cn);else w=new DR,d.a.zc(w,d),WB(w.a,u),WB(w.d,nn),jIn(z.f,nn,w),WB(w.d,an),jIn(z.f,an,w);for(g=BB(Emn(d,x8(Fmt,{3:1,4:1,5:1,1946:1},467,d.a.gc(),0,1)),1946),P=t[0].c,Y=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=J,h.f=rn,G=new Wb(h.d);G.a<G.c.c.length;)q=BB(n0(G),11),W=n.a[q.p],q.i.c==P?(W<h.e&&(h.e=W),W>h.b&&(h.b=W)):q.i.c==Y&&(W<h.f&&(h.f=W),W>h.c&&(h.c=W));for(z9(g,0,g.length,null),en=x8(ANt,hQn,25,g.length,15,1),r=x8(ANt,hQn,25,rn+1,15,1),v=0;v<g.length;v++)en[v]=g[v].f,r[en[v]]=1;for(a=0,m=0;m<r.length;m++)1==r[m]?r[m]=a:--a;for(V=0,y=0;y<en.length;y++)en[y]+=r[en[y]],V=e.Math.max(V,en[y]+1);for(s=1;s<V;)s*=2;for(on=2*s-1,s-=1,un=x8(ANt,hQn,25,on,15,1),c=0,M=0;M<en.length;M++)for(++un[T=en[M]+s];T>0;)T%2>0&&(c+=un[T+1]),++un[T=(T-1)/2|0];for(S=x8(qmt,HWn,362,2*g.length,0,1),k=0;k<g.length;k++)S[2*k]=new qV(g[k],g[k].e,g[k].b,(Q4(),Hmt)),S[2*k+1]=new qV(g[k],g[k].b,g[k].e,Bmt);for(z9(S,0,S.length,null),_=0,j=0;j<S.length;j++)switch(S[j].d.g){case 0:++_;break;case 1:c+=--_}for(Q=x8(qmt,HWn,362,2*g.length,0,1),E=0;E<g.length;E++)Q[2*E]=new qV(g[E],g[E].f,g[E].c,(Q4(),Hmt)),Q[2*E+1]=new qV(g[E],g[E].c,g[E].f,Bmt);for(z9(Q,0,Q.length,null),_=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++_;break;case 1:c+=--_}return c}function wWn(){wWn=O,sNt=new Ap(7),hNt=new oG(8,94),new oG(8,64),fNt=new oG(8,36),pNt=new oG(8,65),vNt=new oG(8,122),mNt=new oG(8,90),jNt=new oG(8,98),dNt=new oG(8,66),yNt=new oG(8,60),ENt=new oG(8,62),oNt=new Ap(11),Yxn(uNt=new M0(4),48,57),Yxn(kNt=new M0(4),48,57),Yxn(kNt,65,90),Yxn(kNt,95,95),Yxn(kNt,97,122),Yxn(gNt=new M0(4),9,9),Yxn(gNt,10,10),Yxn(gNt,12,12),Yxn(gNt,13,13),Yxn(gNt,32,32),lNt=$Fn(uNt),wNt=$Fn(kNt),bNt=$Fn(gNt),iNt=new xp,rNt=new xp,cNt=Pun(Gk(Qtt,1),sVn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),eNt=Pun(Gk(Qtt,1),sVn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",gnt,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),aNt=Pun(Gk(ANt,1),hQn,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function dWn(){dWn=O,Prt=new ocn("OUT_T_L",0,(J9(),Yit),(G7(),irt),(Dtn(),Git),Git,Pun(Gk(Dnt,1),HWn,21,0,[EG((n$n(),LIt),Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt]))])),Srt=new ocn("OUT_T_C",1,Qit,irt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt,OIt]))])),Irt=new ocn("OUT_T_R",2,Jit,irt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt]))])),vrt=new ocn("OUT_B_L",3,Yit,crt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt]))])),prt=new ocn("OUT_B_C",4,Qit,crt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt,OIt]))])),mrt=new ocn("OUT_B_R",5,Jit,crt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt]))])),jrt=new ocn("OUT_L_T",6,Jit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,DIt,OIt]))])),krt=new ocn("OUT_L_C",7,Jit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,xIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,xIt,OIt]))])),yrt=new ocn("OUT_L_B",8,Jit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[CIt,NIt,OIt]))])),Mrt=new ocn("OUT_R_T",9,Yit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,DIt,OIt]))])),Trt=new ocn("OUT_R_C",10,Yit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,xIt])),EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,xIt,OIt]))])),Ert=new ocn("OUT_R_B",11,Yit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LIt,Pun(Gk(GIt,1),$Vn,93,0,[AIt,NIt,OIt]))])),drt=new ocn("IN_T_L",12,Yit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,CIt,OIt]))])),wrt=new ocn("IN_T_C",13,Qit,crt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,IIt,OIt]))])),grt=new ocn("IN_T_R",14,Jit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[DIt,AIt,OIt]))])),lrt=new ocn("IN_C_L",15,Yit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,CIt,OIt]))])),frt=new ocn("IN_C_C",16,Qit,rrt,zit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,IIt,OIt]))])),brt=new ocn("IN_C_R",17,Jit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[xIt,AIt,OIt]))])),srt=new ocn("IN_B_L",18,Yit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,CIt,OIt]))])),ort=new ocn("IN_B_C",19,Qit,irt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,IIt,OIt]))])),hrt=new ocn("IN_B_R",20,Jit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt])),EG($It,Pun(Gk(GIt,1),$Vn,93,0,[NIt,AIt,OIt]))])),Crt=new ocn(hJn,21,null,null,null,null,Pun(Gk(Dnt,1),HWn,21,0,[]))}function gWn(){gWn=O,i$t=(QX(),t$t).b,BB(Wtn(QQ(t$t.b),0),34),BB(Wtn(QQ(t$t.b),1),18),e$t=t$t.a,BB(Wtn(QQ(t$t.a),0),34),BB(Wtn(QQ(t$t.a),1),18),BB(Wtn(QQ(t$t.a),2),18),BB(Wtn(QQ(t$t.a),3),18),BB(Wtn(QQ(t$t.a),4),18),r$t=t$t.o,BB(Wtn(QQ(t$t.o),0),34),BB(Wtn(QQ(t$t.o),1),34),a$t=BB(Wtn(QQ(t$t.o),2),18),BB(Wtn(QQ(t$t.o),3),18),BB(Wtn(QQ(t$t.o),4),18),BB(Wtn(QQ(t$t.o),5),18),BB(Wtn(QQ(t$t.o),6),18),BB(Wtn(QQ(t$t.o),7),18),BB(Wtn(QQ(t$t.o),8),18),BB(Wtn(QQ(t$t.o),9),18),BB(Wtn(QQ(t$t.o),10),18),BB(Wtn(QQ(t$t.o),11),18),BB(Wtn(QQ(t$t.o),12),18),BB(Wtn(QQ(t$t.o),13),18),BB(Wtn(QQ(t$t.o),14),18),BB(Wtn(QQ(t$t.o),15),18),BB(Wtn(VQ(t$t.o),0),59),BB(Wtn(VQ(t$t.o),1),59),BB(Wtn(VQ(t$t.o),2),59),BB(Wtn(VQ(t$t.o),3),59),BB(Wtn(VQ(t$t.o),4),59),BB(Wtn(VQ(t$t.o),5),59),BB(Wtn(VQ(t$t.o),6),59),BB(Wtn(VQ(t$t.o),7),59),BB(Wtn(VQ(t$t.o),8),59),BB(Wtn(VQ(t$t.o),9),59),c$t=t$t.p,BB(Wtn(QQ(t$t.p),0),34),BB(Wtn(QQ(t$t.p),1),34),BB(Wtn(QQ(t$t.p),2),34),BB(Wtn(QQ(t$t.p),3),34),BB(Wtn(QQ(t$t.p),4),18),BB(Wtn(QQ(t$t.p),5),18),BB(Wtn(VQ(t$t.p),0),59),BB(Wtn(VQ(t$t.p),1),59),u$t=t$t.q,BB(Wtn(QQ(t$t.q),0),34),o$t=t$t.v,BB(Wtn(QQ(t$t.v),0),18),BB(Wtn(VQ(t$t.v),0),59),BB(Wtn(VQ(t$t.v),1),59),BB(Wtn(VQ(t$t.v),2),59),s$t=t$t.w,BB(Wtn(QQ(t$t.w),0),34),BB(Wtn(QQ(t$t.w),1),34),BB(Wtn(QQ(t$t.w),2),34),BB(Wtn(QQ(t$t.w),3),18),h$t=t$t.B,BB(Wtn(QQ(t$t.B),0),18),BB(Wtn(VQ(t$t.B),0),59),BB(Wtn(VQ(t$t.B),1),59),BB(Wtn(VQ(t$t.B),2),59),b$t=t$t.Q,BB(Wtn(QQ(t$t.Q),0),18),BB(Wtn(VQ(t$t.Q),0),59),w$t=t$t.R,BB(Wtn(QQ(t$t.R),0),34),d$t=t$t.S,BB(Wtn(VQ(t$t.S),0),59),BB(Wtn(VQ(t$t.S),1),59),BB(Wtn(VQ(t$t.S),2),59),BB(Wtn(VQ(t$t.S),3),59),BB(Wtn(VQ(t$t.S),4),59),BB(Wtn(VQ(t$t.S),5),59),BB(Wtn(VQ(t$t.S),6),59),BB(Wtn(VQ(t$t.S),7),59),BB(Wtn(VQ(t$t.S),8),59),BB(Wtn(VQ(t$t.S),9),59),BB(Wtn(VQ(t$t.S),10),59),BB(Wtn(VQ(t$t.S),11),59),BB(Wtn(VQ(t$t.S),12),59),BB(Wtn(VQ(t$t.S),13),59),BB(Wtn(VQ(t$t.S),14),59),g$t=t$t.T,BB(Wtn(QQ(t$t.T),0),18),BB(Wtn(QQ(t$t.T),2),18),p$t=BB(Wtn(QQ(t$t.T),3),18),BB(Wtn(QQ(t$t.T),4),18),BB(Wtn(VQ(t$t.T),0),59),BB(Wtn(VQ(t$t.T),1),59),BB(Wtn(QQ(t$t.T),1),18),v$t=t$t.U,BB(Wtn(QQ(t$t.U),0),34),BB(Wtn(QQ(t$t.U),1),34),BB(Wtn(QQ(t$t.U),2),18),BB(Wtn(QQ(t$t.U),3),18),BB(Wtn(QQ(t$t.U),4),18),BB(Wtn(QQ(t$t.U),5),18),BB(Wtn(VQ(t$t.U),0),59),m$t=t$t.V,BB(Wtn(QQ(t$t.V),0),18),y$t=t$t.W,BB(Wtn(QQ(t$t.W),0),34),BB(Wtn(QQ(t$t.W),1),34),BB(Wtn(QQ(t$t.W),2),34),BB(Wtn(QQ(t$t.W),3),18),BB(Wtn(QQ(t$t.W),4),18),BB(Wtn(QQ(t$t.W),5),18),j$t=t$t.bb,BB(Wtn(QQ(t$t.bb),0),34),BB(Wtn(QQ(t$t.bb),1),34),BB(Wtn(QQ(t$t.bb),2),34),BB(Wtn(QQ(t$t.bb),3),34),BB(Wtn(QQ(t$t.bb),4),34),BB(Wtn(QQ(t$t.bb),5),34),BB(Wtn(QQ(t$t.bb),6),34),BB(Wtn(QQ(t$t.bb),7),18),BB(Wtn(VQ(t$t.bb),0),59),BB(Wtn(VQ(t$t.bb),1),59),E$t=t$t.eb,BB(Wtn(QQ(t$t.eb),0),34),BB(Wtn(QQ(t$t.eb),1),34),BB(Wtn(QQ(t$t.eb),2),34),BB(Wtn(QQ(t$t.eb),3),34),BB(Wtn(QQ(t$t.eb),4),34),BB(Wtn(QQ(t$t.eb),5),34),BB(Wtn(QQ(t$t.eb),6),18),BB(Wtn(QQ(t$t.eb),7),18),k$t=t$t.ab,BB(Wtn(QQ(t$t.ab),0),34),BB(Wtn(QQ(t$t.ab),1),34),f$t=t$t.H,BB(Wtn(QQ(t$t.H),0),18),BB(Wtn(QQ(t$t.H),1),18),BB(Wtn(QQ(t$t.H),2),18),BB(Wtn(QQ(t$t.H),3),18),BB(Wtn(QQ(t$t.H),4),18),BB(Wtn(QQ(t$t.H),5),18),BB(Wtn(VQ(t$t.H),0),59),T$t=t$t.db,BB(Wtn(QQ(t$t.db),0),18),l$t=t$t.M}function pWn(n){var t;n.O||(n.O=!0,Nrn(n,"type"),xrn(n,"ecore.xml.type"),Drn(n,S7n),t=BB($$n((WM(),zAt),S7n),1945),f9(kY(n.fb),n.b),z0(n.b,wLt,"AnyType",!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.D,K9n,null,0,-1,wLt,!1,!1,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.D,"any",null,0,-1,wLt,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),2),34),n.wb.D,"anyAttribute",null,0,-1,wLt,!1,!1,!0,!1,!1,!1),z0(n.bb,zLt,A7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.gb,"data",null,0,1,zLt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.gb,Y6n,null,1,1,zLt,!1,!1,!0,!1,!0,!1),z0(n.fb,ULt,$7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.fb),0),34),t.gb,"rawValue",null,0,1,ULt,!0,!0,!0,!1,!0,!0),ucn(BB(Wtn(QQ(n.fb),1),34),t.a,E6n,null,0,1,ULt,!0,!0,!0,!1,!0,!0),Myn(BB(Wtn(QQ(n.fb),2),18),n.wb.q,null,"instanceType",1,1,ULt,!1,!1,!0,!1,!1,!1,!1),z0(n.qb,XLt,L7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),0),34),n.wb.D,K9n,null,0,-1,null,!1,!1,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),1),18),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),2),18),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.qb),3),34),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),4),34),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Myn(BB(Wtn(QQ(n.qb),5),18),n.bb,null,cnt,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),6),34),n.gb,O6n,null,0,-2,null,!0,!0,!0,!1,!1,!0),dV(n.a,Ant,"AnySimpleType",!0),dV(n.c,Qtt,"AnyURI",!0),dV(n.d,Gk(NNt,1),"Base64Binary",!0),dV(n.e,$Nt,"Boolean",!0),dV(n.f,ktt,"BooleanObject",!0),dV(n.g,NNt,"Byte",!0),dV(n.i,Ttt,"ByteObject",!0),dV(n.j,Qtt,"Date",!0),dV(n.k,Qtt,"DateTime",!0),dV(n.n,iet,"Decimal",!0),dV(n.o,xNt,"Double",!0),dV(n.p,Ptt,"DoubleObject",!0),dV(n.q,Qtt,"Duration",!0),dV(n.s,Rnt,"ENTITIES",!0),dV(n.r,Rnt,"ENTITIESBase",!0),dV(n.t,Qtt,_7n,!0),dV(n.u,DNt,"Float",!0),dV(n.v,Itt,"FloatObject",!0),dV(n.w,Qtt,"GDay",!0),dV(n.B,Qtt,"GMonth",!0),dV(n.A,Qtt,"GMonthDay",!0),dV(n.C,Qtt,"GYear",!0),dV(n.D,Qtt,"GYearMonth",!0),dV(n.F,Gk(NNt,1),"HexBinary",!0),dV(n.G,Qtt,"ID",!0),dV(n.H,Qtt,"IDREF",!0),dV(n.J,Rnt,"IDREFS",!0),dV(n.I,Rnt,"IDREFSBase",!0),dV(n.K,ANt,"Int",!0),dV(n.M,oet,"Integer",!0),dV(n.L,Att,"IntObject",!0),dV(n.P,Qtt,"Language",!0),dV(n.Q,LNt,"Long",!0),dV(n.R,Rtt,"LongObject",!0),dV(n.S,Qtt,"Name",!0),dV(n.T,Qtt,F7n,!0),dV(n.U,oet,"NegativeInteger",!0),dV(n.V,Qtt,Q7n,!0),dV(n.X,Rnt,"NMTOKENS",!0),dV(n.W,Rnt,"NMTOKENSBase",!0),dV(n.Y,oet,"NonNegativeInteger",!0),dV(n.Z,oet,"NonPositiveInteger",!0),dV(n.$,Qtt,"NormalizedString",!0),dV(n._,Qtt,"NOTATION",!0),dV(n.ab,Qtt,"PositiveInteger",!0),dV(n.cb,Qtt,"QName",!0),dV(n.db,RNt,"Short",!0),dV(n.eb,_tt,"ShortObject",!0),dV(n.gb,Qtt,qVn,!0),dV(n.hb,Qtt,"Time",!0),dV(n.ib,Qtt,"Token",!0),dV(n.jb,RNt,"UnsignedByte",!0),dV(n.kb,_tt,"UnsignedByteObject",!0),dV(n.lb,LNt,"UnsignedInt",!0),dV(n.mb,Rtt,"UnsignedIntObject",!0),dV(n.nb,oet,"UnsignedLong",!0),dV(n.ob,ANt,"UnsignedShort",!0),dV(n.pb,Att,"UnsignedShortObject",!0),Lhn(n,S7n),yWn(n))}function vWn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,w1n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Ic),w1n),EG((hAn(),iAt),Pun(Gk(aAt,1),$Vn,237,0,[nAt,tAt,ZOt,eAt,YOt,QOt]))))),u2(n,w1n,L2n,mpn(ppt)),u2(n,w1n,N2n,mpn(vpt)),u2(n,w1n,XJn,mpn(mpt)),u2(n,w1n,x2n,mpn(ypt)),u2(n,w1n,mZn,mpn(jpt)),u2(n,w1n,D2n,mpn(Ept)),u2(n,w1n,R2n,mpn(Spt)),u2(n,w1n,K2n,mpn(Ipt)),u2(n,w1n,_2n,mpn(Cpt)),u2(n,w1n,F2n,mpn(Ppt)),u2(n,w1n,vZn,mpn(Opt)),u2(n,w1n,B2n,mpn($pt)),u2(n,w1n,H2n,mpn(Npt)),u2(n,w1n,q2n,mpn(Mpt)),u2(n,w1n,L0n,mpn(gpt)),u2(n,w1n,x0n,mpn(kpt)),u2(n,w1n,N0n,mpn(Tpt)),u2(n,w1n,D0n,mpn(Apt)),u2(n,w1n,pZn,iln(0)),u2(n,w1n,R0n,mpn(fpt)),u2(n,w1n,K0n,mpn(lpt)),u2(n,w1n,_0n,mpn(bpt)),u2(n,w1n,U0n,mpn(zpt)),u2(n,w1n,X0n,mpn(Rpt)),u2(n,w1n,W0n,mpn(Kpt)),u2(n,w1n,V0n,mpn(Bpt)),u2(n,w1n,Q0n,mpn(_pt)),u2(n,w1n,Y0n,mpn(Fpt)),u2(n,w1n,J0n,mpn(Xpt)),u2(n,w1n,Z0n,mpn(Upt)),u2(n,w1n,n2n,mpn(qpt)),u2(n,w1n,t2n,mpn(Hpt)),u2(n,w1n,e2n,mpn(Gpt)),u2(n,w1n,S0n,mpn(Rgt)),u2(n,w1n,P0n,mpn(Kgt)),u2(n,w1n,O0n,mpn(rgt)),u2(n,w1n,A0n,mpn(cgt)),u2(n,w1n,QJn,Ugt),u2(n,w1n,y2n,ngt),u2(n,w1n,G2n,0),u2(n,w1n,yZn,iln(1)),u2(n,w1n,VJn,dZn),u2(n,w1n,z2n,mpn(Ggt)),u2(n,w1n,EZn,mpn(ept)),u2(n,w1n,U2n,mpn(upt)),u2(n,w1n,X2n,mpn(zdt)),u2(n,w1n,W2n,mpn(kdt)),u2(n,w1n,d2n,mpn(sgt)),u2(n,w1n,kZn,(hN(),!0)),u2(n,w1n,V2n,mpn(wgt)),u2(n,w1n,Q2n,mpn(dgt)),u2(n,w1n,PZn,mpn(Fgt)),u2(n,w1n,SZn,mpn(qgt)),u2(n,w1n,Y2n,mpn(Bgt)),u2(n,w1n,J2n,Wdt),u2(n,w1n,IZn,mpn($gt)),u2(n,w1n,Z2n,mpn(Agt)),u2(n,w1n,CZn,mpn(cpt)),u2(n,w1n,n3n,mpn(rpt)),u2(n,w1n,t3n,mpn(apt)),u2(n,w1n,e3n,Vgt),u2(n,w1n,i3n,mpn(Ygt)),u2(n,w1n,r3n,mpn(Jgt)),u2(n,w1n,c3n,mpn(Zgt)),u2(n,w1n,a3n,mpn(Qgt)),u2(n,w1n,n0n,mpn(Dpt)),u2(n,w1n,i0n,mpn(Pgt)),u2(n,w1n,s0n,mpn(Sgt)),u2(n,w1n,Z1n,mpn(xpt)),u2(n,w1n,r0n,mpn(kgt)),u2(n,w1n,e0n,mpn(Gdt)),u2(n,w1n,l0n,mpn(qdt)),u2(n,w1n,b0n,mpn(xdt)),u2(n,w1n,v0n,mpn(Ddt)),u2(n,w1n,m0n,mpn(Kdt)),u2(n,w1n,y0n,mpn(Rdt)),u2(n,w1n,d0n,mpn(Hdt)),u2(n,w1n,V1n,mpn(Cgt)),u2(n,w1n,Q1n,mpn(Ogt)),u2(n,w1n,W1n,mpn(pgt)),u2(n,w1n,k0n,mpn(_gt)),u2(n,w1n,T0n,mpn(Ngt)),u2(n,w1n,X1n,mpn(ugt)),u2(n,w1n,M0n,mpn(Dgt)),u2(n,w1n,I0n,mpn(egt)),u2(n,w1n,C0n,mpn(igt)),u2(n,w1n,u3n,mpn(Ndt)),u2(n,w1n,E0n,mpn(Lgt)),u2(n,w1n,B0n,mpn(Pdt)),u2(n,w1n,H0n,mpn(Sdt)),u2(n,w1n,F0n,mpn(Mdt)),u2(n,w1n,q0n,mpn(fgt)),u2(n,w1n,G0n,mpn(hgt)),u2(n,w1n,z0n,mpn(lgt)),u2(n,w1n,BZn,mpn(Hgt)),u2(n,w1n,o3n,mpn(vgt)),u2(n,w1n,WJn,mpn(agt)),u2(n,w1n,s3n,mpn(Ydt)),u2(n,w1n,TZn,mpn(Qdt)),u2(n,w1n,w0n,mpn(_dt)),u2(n,w1n,h3n,mpn(ipt)),u2(n,w1n,f3n,mpn(Tdt)),u2(n,w1n,l3n,mpn(bgt)),u2(n,w1n,b3n,mpn(npt)),u2(n,w1n,w3n,mpn(Xgt)),u2(n,w1n,d3n,mpn(Wgt)),u2(n,w1n,u0n,mpn(Egt)),u2(n,w1n,o0n,mpn(Tgt)),u2(n,w1n,g3n,mpn(spt)),u2(n,w1n,Y1n,mpn(jdt)),u2(n,w1n,h0n,mpn(Mgt)),u2(n,w1n,i2n,mpn(Jdt)),u2(n,w1n,r2n,mpn(Vdt)),u2(n,w1n,p3n,mpn(Igt)),u2(n,w1n,f0n,mpn(mgt)),u2(n,w1n,j0n,mpn(xgt)),u2(n,w1n,v3n,mpn(Lpt)),u2(n,w1n,U1n,mpn(Xdt)),u2(n,w1n,J1n,mpn(opt)),u2(n,w1n,$0n,mpn(tgt)),u2(n,w1n,c0n,mpn(ygt)),u2(n,w1n,g0n,mpn(Fdt)),u2(n,w1n,m3n,mpn(ggt)),u2(n,w1n,a0n,mpn(jgt)),u2(n,w1n,p0n,mpn(Bdt)),u2(n,w1n,c2n,mpn(Ldt)),u2(n,w1n,o2n,mpn(Adt)),u2(n,w1n,s2n,mpn(Cdt)),u2(n,w1n,h2n,mpn(Odt)),u2(n,w1n,a2n,mpn($dt)),u2(n,w1n,u2n,mpn(Idt)),u2(n,w1n,t0n,mpn(ogt))}function mWn(n,t){var e;return nNt||(nNt=new xp,tNt=new xp,wWn(),wWn(),ydn(e=new M0(4),"\t\n\r\r "),mZ(nNt,fnt,e),mZ(tNt,fnt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),dnt),sHn(e,BB(SJ(nNt,snt),117)),mZ(nNt,hnt,e),mZ(tNt,hnt,$Fn(e)),ydn(e=new M0(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),mZ(nNt,lnt,e),mZ(tNt,lnt,$Fn(e)),ydn(e=new M0(4),dnt),Yxn(e,95,95),Yxn(e,58,58),mZ(nNt,bnt,e),mZ(tNt,bnt,$Fn(e))),BB(SJ(t?nNt:tNt,n),136)}function yWn(n){V$n(n.a,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anySimpleType"])),V$n(n.b,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyType",F9n,K9n])),V$n(BB(Wtn(QQ(n.b),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.b),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,M7n,P7n,t8n,":1",D7n,"lax"])),V$n(BB(Wtn(QQ(n.b),2),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,p7n,M7n,P7n,t8n,":2",D7n,"lax"])),V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyURI",T7n,y7n])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"base64Binary",T7n,y7n])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$Wn,T7n,y7n])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"boolean:Object",J9n,$Wn])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,S9n])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"byte:Object",J9n,S9n])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"date",T7n,y7n])),V$n(n.k,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"dateTime",T7n,y7n])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"decimal",T7n,y7n])),V$n(n.o,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,I9n,T7n,y7n])),V$n(n.p,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"double:Object",J9n,I9n])),V$n(n.q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"duration",T7n,y7n])),V$n(n.s,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ENTITIES",J9n,R7n,K7n,"1"])),V$n(n.r,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,R7n,k7n,_7n])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,_7n,J9n,F7n])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,C9n,T7n,y7n])),V$n(n.v,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"float:Object",J9n,C9n])),V$n(n.w,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gDay",T7n,y7n])),V$n(n.B,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonth",T7n,y7n])),V$n(n.A,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonthDay",T7n,y7n])),V$n(n.C,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYear",T7n,y7n])),V$n(n.D,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYearMonth",T7n,y7n])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"hexBinary",T7n,y7n])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ID",J9n,F7n])),V$n(n.H,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREF",J9n,F7n])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREFS",J9n,B7n,K7n,"1"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,B7n,k7n,"IDREF"])),V$n(n.K,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,O9n])),V$n(n.M,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,H7n])),V$n(n.L,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"int:Object",J9n,O9n])),V$n(n.P,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"language",J9n,q7n,G7n,z7n])),V$n(n.Q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,A9n])),V$n(n.R,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"long:Object",J9n,A9n])),V$n(n.S,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"Name",J9n,q7n,G7n,U7n])),V$n(n.T,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,F7n,J9n,"Name",G7n,X7n])),V$n(n.U,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"negativeInteger",J9n,W7n,V7n,"-1"])),V$n(n.V,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Q7n,J9n,q7n,G7n,"\\c+"])),V$n(n.X,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NMTOKENS",J9n,Y7n,K7n,"1"])),V$n(n.W,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Y7n,k7n,Q7n])),V$n(n.Y,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,J7n,J9n,H7n,Z7n,"0"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,W7n,J9n,H7n,V7n,"0"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,nnt,J9n,NWn,T7n,"replace"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NOTATION",T7n,y7n])),V$n(n.ab,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"positiveInteger",J9n,J7n,Z7n,"1"])),V$n(n.bb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"processingInstruction_._type",F9n,"empty"])),V$n(BB(Wtn(QQ(n.bb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"data"])),V$n(BB(Wtn(QQ(n.bb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,Y6n])),V$n(n.cb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"QName",T7n,y7n])),V$n(n.db,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$9n])),V$n(n.eb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"short:Object",J9n,$9n])),V$n(n.fb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"simpleAnyType",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":3",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":4",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":5",F9n,d7n])),V$n(n.gb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,NWn,T7n,"preserve"])),V$n(n.hb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"time",T7n,y7n])),V$n(n.ib,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,q7n,J9n,nnt,T7n,y7n])),V$n(n.jb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,tnt,V7n,"255",Z7n,"0"])),V$n(n.kb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedByte:Object",J9n,tnt])),V$n(n.lb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,ent,V7n,"4294967295",Z7n,"0"])),V$n(n.mb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedInt:Object",J9n,ent])),V$n(n.nb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedLong",J9n,J7n,V7n,int,Z7n,"0"])),V$n(n.ob,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,rnt,V7n,"65535",Z7n,"0"])),V$n(n.pb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedShort:Object",J9n,rnt])),V$n(n.qb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"",F9n,K9n])),V$n(BB(Wtn(QQ(n.qb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.qb),1),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xmlns:prefix"])),V$n(BB(Wtn(QQ(n.qb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xsi:schemaLocation"])),V$n(BB(Wtn(QQ(n.qb),3),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"cDATA",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),4),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"comment",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),5),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,cnt,j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),6),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,O6n,j7n,E7n]))}function kWn(n){return mK("_UI_EMFDiagnostic_marker",n)?"EMF Problem":mK("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":mK(w8n,n)?"Wrong character.":mK(d8n,n)?"Invalid reference number.":mK(g8n,n)?"A character is required after \\.":mK(p8n,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":mK(v8n,n)?"'(?<' or '(?<!' is expected.":mK(m8n,n)?"A comment is not terminated.":mK(y8n,n)?"')' is expected.":mK(k8n,n)?"Unexpected end of the pattern in a modifier group.":mK(j8n,n)?"':' is expected.":mK(E8n,n)?"Unexpected end of the pattern in a conditional group.":mK(T8n,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":mK(M8n,n)?"There are more than three choices in a conditional group.":mK(S8n,n)?"A character in U+0040-U+005f must follow \\c.":mK(P8n,n)?"A '{' is required before a character category.":mK(I8n,n)?"A property name is not closed by '}'.":mK(C8n,n)?"Unexpected meta character.":mK(O8n,n)?"Unknown property.":mK(A8n,n)?"A POSIX character class must be closed by ':]'.":mK($8n,n)?"Unexpected end of the pattern in a character class.":mK(L8n,n)?"Unknown name for a POSIX character class.":mK("parser.cc.4",n)?"'-' is invalid here.":mK(N8n,n)?"']' is expected.":mK(x8n,n)?"'[' is invalid in a character class. Write '\\['.":mK(D8n,n)?"']' is invalid in a character class. Write '\\]'.":mK(R8n,n)?"'-' is an invalid character range. Write '\\-'.":mK(K8n,n)?"'[' is expected.":mK(_8n,n)?"')' or '-[' or '+[' or '&[' is expected.":mK(F8n,n)?"The range end code point is less than the start code point.":mK(B8n,n)?"Invalid Unicode hex notation.":mK(H8n,n)?"Overflow in a hex notation.":mK(q8n,n)?"'\\x{' must be closed by '}'.":mK(G8n,n)?"Invalid Unicode code point.":mK(z8n,n)?"An anchor must not be here.":mK(U8n,n)?"This expression is not supported in the current option setting.":mK(X8n,n)?"Invalid quantifier. A digit is expected.":mK(W8n,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":mK(V8n,n)?"Invalid quantifier. A digit or '}' is expected.":mK(Q8n,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":mK(Y8n,n)?"Invalid quantifier. A quantity value overflow.":mK("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":mK("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":mK("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":mK("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":mK("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":mK("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":mK("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":mK("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":mK("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":mK("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":mK("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":mK("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":mK("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":mK("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":mK("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":mK("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":mK("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":mK("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":mK("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":mK("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":mK("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":mK("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":mK("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":mK("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":mK("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":mK("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":mK("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":mK("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":mK("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":mK("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":mK("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function jWn(n){var t,e,i,r,c,a,u;n.r||(n.r=!0,Nrn(n,"graph"),xrn(n,"graph"),Drn(n,y6n),cun(n.o,"T"),f9(kY(n.a),n.p),f9(kY(n.f),n.a),f9(kY(n.n),n.f),f9(kY(n.g),n.n),f9(kY(n.c),n.n),f9(kY(n.i),n.c),f9(kY(n.j),n.c),f9(kY(n.d),n.f),f9(kY(n.e),n.a),z0(n.p,Xrt,OJn,!0,!0,!1),u=Tun(a=msn(n.p,n.p,"setProperty")),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),kEn(e,i=nQ(u)),Ujn(a,t,j6n),Ujn(a,t=nQ(u),E6n),u=Tun(a=msn(n.p,null,"getProperty")),t=ZV(n.o),e=nQ(u),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),(c=HTn(a,t=nQ(u),null))&&c.Fi(),a=msn(n.p,n.wb.e,"hasProperty"),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),$yn(a=msn(n.p,n.p,"copyProperties"),n.p,T6n),a=msn(n.p,null,"getAllProperties"),t=ZV(n.wb.P),e=ZV(n.o),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),i=new Kp,f9((!e.d&&(e.d=new $L(VAt,e,1)),e.d),i),e=ZV(n.wb.M),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(a,t,null))&&r.Fi(),z0(n.a,NOt,z5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.a),0),18),n.k,null,M6n,0,-1,NOt,!1,!1,!0,!0,!1,!1,!1),z0(n.f,DOt,X5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.f),0),18),n.g,BB(Wtn(QQ(n.g),0),18),"labels",0,-1,DOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.f),1),34),n.wb._,S6n,null,0,1,DOt,!1,!1,!0,!1,!0,!1),z0(n.n,ROt,"ElkShape",!0,!1,!0),ucn(BB(Wtn(QQ(n.n),0),34),n.wb.t,P6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),1),34),n.wb.t,I6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),2),34),n.wb.t,"x",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),3),34),n.wb.t,"y",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.n,null,"setDimensions"),n.wb.t,I6n),$yn(a,n.wb.t,P6n),$yn(a=msn(n.n,null,"setLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.g,zOt,Z5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.g),0),18),n.f,BB(Wtn(QQ(n.f),0),18),C6n,0,1,zOt,!1,!1,!0,!1,!1,!1,!1),ucn(BB(Wtn(QQ(n.g),1),34),n.wb._,O6n,"",0,1,zOt,!1,!1,!0,!1,!0,!1),z0(n.c,KOt,W5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.c),0),18),n.d,BB(Wtn(QQ(n.d),1),18),"outgoingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.c),1),18),n.d,BB(Wtn(QQ(n.d),2),18),"incomingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),z0(n.i,UOt,n6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.i),0),18),n.j,BB(Wtn(QQ(n.j),0),18),"ports",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),1),18),n.i,BB(Wtn(QQ(n.i),2),18),A6n,0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),2),18),n.i,BB(Wtn(QQ(n.i),1),18),C6n,0,1,UOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),3),18),n.d,BB(Wtn(QQ(n.d),0),18),"containedEdges",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.i),4),34),n.wb.e,$6n,null,0,1,UOt,!0,!0,!1,!1,!0,!0),z0(n.j,XOt,t6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.j),0),18),n.i,BB(Wtn(QQ(n.i),0),18),C6n,0,1,XOt,!1,!1,!0,!1,!1,!1,!1),z0(n.d,_Ot,V5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.d),0),18),n.i,BB(Wtn(QQ(n.i),3),18),"containingNode",0,1,_Ot,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.d),1),18),n.c,BB(Wtn(QQ(n.c),0),18),L6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),2),18),n.c,BB(Wtn(QQ(n.c),1),18),N6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),3),18),n.e,BB(Wtn(QQ(n.e),5),18),x6n,0,-1,_Ot,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.d),4),34),n.wb.e,"hyperedge",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),5),34),n.wb.e,$6n,null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),6),34),n.wb.e,"selfloop",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),7),34),n.wb.e,"connected",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),z0(n.b,xOt,U5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.t,"x",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.t,"y",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.b,null,"set"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.e,FOt,Q5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.e),0),34),n.wb.t,"startX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),1),34),n.wb.t,"startY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),2),34),n.wb.t,"endX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),3),34),n.wb.t,"endY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.e),4),18),n.b,null,D6n,0,-1,FOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),5),18),n.d,BB(Wtn(QQ(n.d),3),18),C6n,0,1,FOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),6),18),n.c,null,R6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),7),18),n.c,null,K6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),8),18),n.e,BB(Wtn(QQ(n.e),9),18),_6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),9),18),n.e,BB(Wtn(QQ(n.e),8),18),F6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),ucn(BB(Wtn(QQ(n.e),10),34),n.wb._,S6n,null,0,1,FOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.e,null,"setStartLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),$yn(a=msn(n.e,null,"setEndLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.k,Hnt,"ElkPropertyToValueMapEntry",!1,!1,!1),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.k),0),34),t,"key",Hnt,!1,!1,!0,!1),ucn(BB(Wtn(QQ(n.k),1),34),n.s,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),dV(n.o,lMt,"IProperty",!0),dV(n.s,Ant,"PropertyValue",!0),Lhn(n,y6n))}function EWn(){EWn=O,(JLt=x8(NNt,v6n,25,BQn,15,1))[9]=35,JLt[10]=19,JLt[13]=19,JLt[32]=51,JLt[33]=49,JLt[34]=33,yU(JLt,35,38,49),JLt[38]=1,yU(JLt,39,45,49),yU(JLt,45,47,-71),JLt[47]=49,yU(JLt,48,58,-71),JLt[58]=61,JLt[59]=49,JLt[60]=1,JLt[61]=49,JLt[62]=33,yU(JLt,63,65,49),yU(JLt,65,91,-3),yU(JLt,91,93,33),JLt[93]=1,JLt[94]=33,JLt[95]=-3,JLt[96]=33,yU(JLt,97,123,-3),yU(JLt,123,183,33),JLt[183]=-87,yU(JLt,184,192,33),yU(JLt,192,215,-19),JLt[215]=33,yU(JLt,216,247,-19),JLt[247]=33,yU(JLt,248,306,-19),yU(JLt,306,308,33),yU(JLt,308,319,-19),yU(JLt,319,321,33),yU(JLt,321,329,-19),JLt[329]=33,yU(JLt,330,383,-19),JLt[383]=33,yU(JLt,384,452,-19),yU(JLt,452,461,33),yU(JLt,461,497,-19),yU(JLt,497,500,33),yU(JLt,500,502,-19),yU(JLt,502,506,33),yU(JLt,506,536,-19),yU(JLt,536,592,33),yU(JLt,592,681,-19),yU(JLt,681,699,33),yU(JLt,699,706,-19),yU(JLt,706,720,33),yU(JLt,720,722,-87),yU(JLt,722,768,33),yU(JLt,768,838,-87),yU(JLt,838,864,33),yU(JLt,864,866,-87),yU(JLt,866,902,33),JLt[902]=-19,JLt[903]=-87,yU(JLt,904,907,-19),JLt[907]=33,JLt[908]=-19,JLt[909]=33,yU(JLt,910,930,-19),JLt[930]=33,yU(JLt,931,975,-19),JLt[975]=33,yU(JLt,976,983,-19),yU(JLt,983,986,33),JLt[986]=-19,JLt[987]=33,JLt[988]=-19,JLt[989]=33,JLt[990]=-19,JLt[991]=33,JLt[992]=-19,JLt[993]=33,yU(JLt,994,1012,-19),yU(JLt,1012,1025,33),yU(JLt,1025,1037,-19),JLt[1037]=33,yU(JLt,1038,1104,-19),JLt[1104]=33,yU(JLt,1105,1117,-19),JLt[1117]=33,yU(JLt,1118,1154,-19),JLt[1154]=33,yU(JLt,1155,1159,-87),yU(JLt,1159,1168,33),yU(JLt,1168,1221,-19),yU(JLt,1221,1223,33),yU(JLt,1223,1225,-19),yU(JLt,1225,1227,33),yU(JLt,1227,1229,-19),yU(JLt,1229,1232,33),yU(JLt,1232,1260,-19),yU(JLt,1260,1262,33),yU(JLt,1262,1270,-19),yU(JLt,1270,1272,33),yU(JLt,1272,1274,-19),yU(JLt,1274,1329,33),yU(JLt,1329,1367,-19),yU(JLt,1367,1369,33),JLt[1369]=-19,yU(JLt,1370,1377,33),yU(JLt,1377,1415,-19),yU(JLt,1415,1425,33),yU(JLt,1425,1442,-87),JLt[1442]=33,yU(JLt,1443,1466,-87),JLt[1466]=33,yU(JLt,1467,1470,-87),JLt[1470]=33,JLt[1471]=-87,JLt[1472]=33,yU(JLt,1473,1475,-87),JLt[1475]=33,JLt[1476]=-87,yU(JLt,1477,1488,33),yU(JLt,1488,1515,-19),yU(JLt,1515,1520,33),yU(JLt,1520,1523,-19),yU(JLt,1523,1569,33),yU(JLt,1569,1595,-19),yU(JLt,1595,1600,33),JLt[1600]=-87,yU(JLt,1601,1611,-19),yU(JLt,1611,1619,-87),yU(JLt,1619,1632,33),yU(JLt,1632,1642,-87),yU(JLt,1642,1648,33),JLt[1648]=-87,yU(JLt,1649,1720,-19),yU(JLt,1720,1722,33),yU(JLt,1722,1727,-19),JLt[1727]=33,yU(JLt,1728,1743,-19),JLt[1743]=33,yU(JLt,1744,1748,-19),JLt[1748]=33,JLt[1749]=-19,yU(JLt,1750,1765,-87),yU(JLt,1765,1767,-19),yU(JLt,1767,1769,-87),JLt[1769]=33,yU(JLt,1770,1774,-87),yU(JLt,1774,1776,33),yU(JLt,1776,1786,-87),yU(JLt,1786,2305,33),yU(JLt,2305,2308,-87),JLt[2308]=33,yU(JLt,2309,2362,-19),yU(JLt,2362,2364,33),JLt[2364]=-87,JLt[2365]=-19,yU(JLt,2366,2382,-87),yU(JLt,2382,2385,33),yU(JLt,2385,2389,-87),yU(JLt,2389,2392,33),yU(JLt,2392,2402,-19),yU(JLt,2402,2404,-87),yU(JLt,2404,2406,33),yU(JLt,2406,2416,-87),yU(JLt,2416,2433,33),yU(JLt,2433,2436,-87),JLt[2436]=33,yU(JLt,2437,2445,-19),yU(JLt,2445,2447,33),yU(JLt,2447,2449,-19),yU(JLt,2449,2451,33),yU(JLt,2451,2473,-19),JLt[2473]=33,yU(JLt,2474,2481,-19),JLt[2481]=33,JLt[2482]=-19,yU(JLt,2483,2486,33),yU(JLt,2486,2490,-19),yU(JLt,2490,2492,33),JLt[2492]=-87,JLt[2493]=33,yU(JLt,2494,2501,-87),yU(JLt,2501,2503,33),yU(JLt,2503,2505,-87),yU(JLt,2505,2507,33),yU(JLt,2507,2510,-87),yU(JLt,2510,2519,33),JLt[2519]=-87,yU(JLt,2520,2524,33),yU(JLt,2524,2526,-19),JLt[2526]=33,yU(JLt,2527,2530,-19),yU(JLt,2530,2532,-87),yU(JLt,2532,2534,33),yU(JLt,2534,2544,-87),yU(JLt,2544,2546,-19),yU(JLt,2546,2562,33),JLt[2562]=-87,yU(JLt,2563,2565,33),yU(JLt,2565,2571,-19),yU(JLt,2571,2575,33),yU(JLt,2575,2577,-19),yU(JLt,2577,2579,33),yU(JLt,2579,2601,-19),JLt[2601]=33,yU(JLt,2602,2609,-19),JLt[2609]=33,yU(JLt,2610,2612,-19),JLt[2612]=33,yU(JLt,2613,2615,-19),JLt[2615]=33,yU(JLt,2616,2618,-19),yU(JLt,2618,2620,33),JLt[2620]=-87,JLt[2621]=33,yU(JLt,2622,2627,-87),yU(JLt,2627,2631,33),yU(JLt,2631,2633,-87),yU(JLt,2633,2635,33),yU(JLt,2635,2638,-87),yU(JLt,2638,2649,33),yU(JLt,2649,2653,-19),JLt[2653]=33,JLt[2654]=-19,yU(JLt,2655,2662,33),yU(JLt,2662,2674,-87),yU(JLt,2674,2677,-19),yU(JLt,2677,2689,33),yU(JLt,2689,2692,-87),JLt[2692]=33,yU(JLt,2693,2700,-19),JLt[2700]=33,JLt[2701]=-19,JLt[2702]=33,yU(JLt,2703,2706,-19),JLt[2706]=33,yU(JLt,2707,2729,-19),JLt[2729]=33,yU(JLt,2730,2737,-19),JLt[2737]=33,yU(JLt,2738,2740,-19),JLt[2740]=33,yU(JLt,2741,2746,-19),yU(JLt,2746,2748,33),JLt[2748]=-87,JLt[2749]=-19,yU(JLt,2750,2758,-87),JLt[2758]=33,yU(JLt,2759,2762,-87),JLt[2762]=33,yU(JLt,2763,2766,-87),yU(JLt,2766,2784,33),JLt[2784]=-19,yU(JLt,2785,2790,33),yU(JLt,2790,2800,-87),yU(JLt,2800,2817,33),yU(JLt,2817,2820,-87),JLt[2820]=33,yU(JLt,2821,2829,-19),yU(JLt,2829,2831,33),yU(JLt,2831,2833,-19),yU(JLt,2833,2835,33),yU(JLt,2835,2857,-19),JLt[2857]=33,yU(JLt,2858,2865,-19),JLt[2865]=33,yU(JLt,2866,2868,-19),yU(JLt,2868,2870,33),yU(JLt,2870,2874,-19),yU(JLt,2874,2876,33),JLt[2876]=-87,JLt[2877]=-19,yU(JLt,2878,2884,-87),yU(JLt,2884,2887,33),yU(JLt,2887,2889,-87),yU(JLt,2889,2891,33),yU(JLt,2891,2894,-87),yU(JLt,2894,2902,33),yU(JLt,2902,2904,-87),yU(JLt,2904,2908,33),yU(JLt,2908,2910,-19),JLt[2910]=33,yU(JLt,2911,2914,-19),yU(JLt,2914,2918,33),yU(JLt,2918,2928,-87),yU(JLt,2928,2946,33),yU(JLt,2946,2948,-87),JLt[2948]=33,yU(JLt,2949,2955,-19),yU(JLt,2955,2958,33),yU(JLt,2958,2961,-19),JLt[2961]=33,yU(JLt,2962,2966,-19),yU(JLt,2966,2969,33),yU(JLt,2969,2971,-19),JLt[2971]=33,JLt[2972]=-19,JLt[2973]=33,yU(JLt,2974,2976,-19),yU(JLt,2976,2979,33),yU(JLt,2979,2981,-19),yU(JLt,2981,2984,33),yU(JLt,2984,2987,-19),yU(JLt,2987,2990,33),yU(JLt,2990,2998,-19),JLt[2998]=33,yU(JLt,2999,3002,-19),yU(JLt,3002,3006,33),yU(JLt,3006,3011,-87),yU(JLt,3011,3014,33),yU(JLt,3014,3017,-87),JLt[3017]=33,yU(JLt,3018,3022,-87),yU(JLt,3022,3031,33),JLt[3031]=-87,yU(JLt,3032,3047,33),yU(JLt,3047,3056,-87),yU(JLt,3056,3073,33),yU(JLt,3073,3076,-87),JLt[3076]=33,yU(JLt,3077,3085,-19),JLt[3085]=33,yU(JLt,3086,3089,-19),JLt[3089]=33,yU(JLt,3090,3113,-19),JLt[3113]=33,yU(JLt,3114,3124,-19),JLt[3124]=33,yU(JLt,3125,3130,-19),yU(JLt,3130,3134,33),yU(JLt,3134,3141,-87),JLt[3141]=33,yU(JLt,3142,3145,-87),JLt[3145]=33,yU(JLt,3146,3150,-87),yU(JLt,3150,3157,33),yU(JLt,3157,3159,-87),yU(JLt,3159,3168,33),yU(JLt,3168,3170,-19),yU(JLt,3170,3174,33),yU(JLt,3174,3184,-87),yU(JLt,3184,3202,33),yU(JLt,3202,3204,-87),JLt[3204]=33,yU(JLt,3205,3213,-19),JLt[3213]=33,yU(JLt,3214,3217,-19),JLt[3217]=33,yU(JLt,3218,3241,-19),JLt[3241]=33,yU(JLt,3242,3252,-19),JLt[3252]=33,yU(JLt,3253,3258,-19),yU(JLt,3258,3262,33),yU(JLt,3262,3269,-87),JLt[3269]=33,yU(JLt,3270,3273,-87),JLt[3273]=33,yU(JLt,3274,3278,-87),yU(JLt,3278,3285,33),yU(JLt,3285,3287,-87),yU(JLt,3287,3294,33),JLt[3294]=-19,JLt[3295]=33,yU(JLt,3296,3298,-19),yU(JLt,3298,3302,33),yU(JLt,3302,3312,-87),yU(JLt,3312,3330,33),yU(JLt,3330,3332,-87),JLt[3332]=33,yU(JLt,3333,3341,-19),JLt[3341]=33,yU(JLt,3342,3345,-19),JLt[3345]=33,yU(JLt,3346,3369,-19),JLt[3369]=33,yU(JLt,3370,3386,-19),yU(JLt,3386,3390,33),yU(JLt,3390,3396,-87),yU(JLt,3396,3398,33),yU(JLt,3398,3401,-87),JLt[3401]=33,yU(JLt,3402,3406,-87),yU(JLt,3406,3415,33),JLt[3415]=-87,yU(JLt,3416,3424,33),yU(JLt,3424,3426,-19),yU(JLt,3426,3430,33),yU(JLt,3430,3440,-87),yU(JLt,3440,3585,33),yU(JLt,3585,3631,-19),JLt[3631]=33,JLt[3632]=-19,JLt[3633]=-87,yU(JLt,3634,3636,-19),yU(JLt,3636,3643,-87),yU(JLt,3643,3648,33),yU(JLt,3648,3654,-19),yU(JLt,3654,3663,-87),JLt[3663]=33,yU(JLt,3664,3674,-87),yU(JLt,3674,3713,33),yU(JLt,3713,3715,-19),JLt[3715]=33,JLt[3716]=-19,yU(JLt,3717,3719,33),yU(JLt,3719,3721,-19),JLt[3721]=33,JLt[3722]=-19,yU(JLt,3723,3725,33),JLt[3725]=-19,yU(JLt,3726,3732,33),yU(JLt,3732,3736,-19),JLt[3736]=33,yU(JLt,3737,3744,-19),JLt[3744]=33,yU(JLt,3745,3748,-19),JLt[3748]=33,JLt[3749]=-19,JLt[3750]=33,JLt[3751]=-19,yU(JLt,3752,3754,33),yU(JLt,3754,3756,-19),JLt[3756]=33,yU(JLt,3757,3759,-19),JLt[3759]=33,JLt[3760]=-19,JLt[3761]=-87,yU(JLt,3762,3764,-19),yU(JLt,3764,3770,-87),JLt[3770]=33,yU(JLt,3771,3773,-87),JLt[3773]=-19,yU(JLt,3774,3776,33),yU(JLt,3776,3781,-19),JLt[3781]=33,JLt[3782]=-87,JLt[3783]=33,yU(JLt,3784,3790,-87),yU(JLt,3790,3792,33),yU(JLt,3792,3802,-87),yU(JLt,3802,3864,33),yU(JLt,3864,3866,-87),yU(JLt,3866,3872,33),yU(JLt,3872,3882,-87),yU(JLt,3882,3893,33),JLt[3893]=-87,JLt[3894]=33,JLt[3895]=-87,JLt[3896]=33,JLt[3897]=-87,yU(JLt,3898,3902,33),yU(JLt,3902,3904,-87),yU(JLt,3904,3912,-19),JLt[3912]=33,yU(JLt,3913,3946,-19),yU(JLt,3946,3953,33),yU(JLt,3953,3973,-87),JLt[3973]=33,yU(JLt,3974,3980,-87),yU(JLt,3980,3984,33),yU(JLt,3984,3990,-87),JLt[3990]=33,JLt[3991]=-87,JLt[3992]=33,yU(JLt,3993,4014,-87),yU(JLt,4014,4017,33),yU(JLt,4017,4024,-87),JLt[4024]=33,JLt[4025]=-87,yU(JLt,4026,4256,33),yU(JLt,4256,4294,-19),yU(JLt,4294,4304,33),yU(JLt,4304,4343,-19),yU(JLt,4343,4352,33),JLt[4352]=-19,JLt[4353]=33,yU(JLt,4354,4356,-19),JLt[4356]=33,yU(JLt,4357,4360,-19),JLt[4360]=33,JLt[4361]=-19,JLt[4362]=33,yU(JLt,4363,4365,-19),JLt[4365]=33,yU(JLt,4366,4371,-19),yU(JLt,4371,4412,33),JLt[4412]=-19,JLt[4413]=33,JLt[4414]=-19,JLt[4415]=33,JLt[4416]=-19,yU(JLt,4417,4428,33),JLt[4428]=-19,JLt[4429]=33,JLt[4430]=-19,JLt[4431]=33,JLt[4432]=-19,yU(JLt,4433,4436,33),yU(JLt,4436,4438,-19),yU(JLt,4438,4441,33),JLt[4441]=-19,yU(JLt,4442,4447,33),yU(JLt,4447,4450,-19),JLt[4450]=33,JLt[4451]=-19,JLt[4452]=33,JLt[4453]=-19,JLt[4454]=33,JLt[4455]=-19,JLt[4456]=33,JLt[4457]=-19,yU(JLt,4458,4461,33),yU(JLt,4461,4463,-19),yU(JLt,4463,4466,33),yU(JLt,4466,4468,-19),JLt[4468]=33,JLt[4469]=-19,yU(JLt,4470,4510,33),JLt[4510]=-19,yU(JLt,4511,4520,33),JLt[4520]=-19,yU(JLt,4521,4523,33),JLt[4523]=-19,yU(JLt,4524,4526,33),yU(JLt,4526,4528,-19),yU(JLt,4528,4535,33),yU(JLt,4535,4537,-19),JLt[4537]=33,JLt[4538]=-19,JLt[4539]=33,yU(JLt,4540,4547,-19),yU(JLt,4547,4587,33),JLt[4587]=-19,yU(JLt,4588,4592,33),JLt[4592]=-19,yU(JLt,4593,4601,33),JLt[4601]=-19,yU(JLt,4602,7680,33),yU(JLt,7680,7836,-19),yU(JLt,7836,7840,33),yU(JLt,7840,7930,-19),yU(JLt,7930,7936,33),yU(JLt,7936,7958,-19),yU(JLt,7958,7960,33),yU(JLt,7960,7966,-19),yU(JLt,7966,7968,33),yU(JLt,7968,8006,-19),yU(JLt,8006,8008,33),yU(JLt,8008,8014,-19),yU(JLt,8014,8016,33),yU(JLt,8016,8024,-19),JLt[8024]=33,JLt[8025]=-19,JLt[8026]=33,JLt[8027]=-19,JLt[8028]=33,JLt[8029]=-19,JLt[8030]=33,yU(JLt,8031,8062,-19),yU(JLt,8062,8064,33),yU(JLt,8064,8117,-19),JLt[8117]=33,yU(JLt,8118,8125,-19),JLt[8125]=33,JLt[8126]=-19,yU(JLt,8127,8130,33),yU(JLt,8130,8133,-19),JLt[8133]=33,yU(JLt,8134,8141,-19),yU(JLt,8141,8144,33),yU(JLt,8144,8148,-19),yU(JLt,8148,8150,33),yU(JLt,8150,8156,-19),yU(JLt,8156,8160,33),yU(JLt,8160,8173,-19),yU(JLt,8173,8178,33),yU(JLt,8178,8181,-19),JLt[8181]=33,yU(JLt,8182,8189,-19),yU(JLt,8189,8400,33),yU(JLt,8400,8413,-87),yU(JLt,8413,8417,33),JLt[8417]=-87,yU(JLt,8418,8486,33),JLt[8486]=-19,yU(JLt,8487,8490,33),yU(JLt,8490,8492,-19),yU(JLt,8492,8494,33),JLt[8494]=-19,yU(JLt,8495,8576,33),yU(JLt,8576,8579,-19),yU(JLt,8579,12293,33),JLt[12293]=-87,JLt[12294]=33,JLt[12295]=-19,yU(JLt,12296,12321,33),yU(JLt,12321,12330,-19),yU(JLt,12330,12336,-87),JLt[12336]=33,yU(JLt,12337,12342,-87),yU(JLt,12342,12353,33),yU(JLt,12353,12437,-19),yU(JLt,12437,12441,33),yU(JLt,12441,12443,-87),yU(JLt,12443,12445,33),yU(JLt,12445,12447,-87),yU(JLt,12447,12449,33),yU(JLt,12449,12539,-19),JLt[12539]=33,yU(JLt,12540,12543,-87),yU(JLt,12543,12549,33),yU(JLt,12549,12589,-19),yU(JLt,12589,19968,33),yU(JLt,19968,40870,-19),yU(JLt,40870,44032,33),yU(JLt,44032,55204,-19),yU(JLt,55204,HQn,33),yU(JLt,57344,65534,33)}function TWn(n){var t,e,i,r,c,a,u;n.hb||(n.hb=!0,Nrn(n,"ecore"),xrn(n,"ecore"),Drn(n,V9n),cun(n.fb,"E"),cun(n.L,"T"),cun(n.P,"K"),cun(n.P,"V"),cun(n.cb,"E"),f9(kY(n.b),n.bb),f9(kY(n.a),n.Q),f9(kY(n.o),n.p),f9(kY(n.p),n.R),f9(kY(n.q),n.p),f9(kY(n.v),n.q),f9(kY(n.w),n.R),f9(kY(n.B),n.Q),f9(kY(n.R),n.Q),f9(kY(n.T),n.eb),f9(kY(n.U),n.R),f9(kY(n.V),n.eb),f9(kY(n.W),n.bb),f9(kY(n.bb),n.eb),f9(kY(n.eb),n.R),f9(kY(n.db),n.R),z0(n.b,BAt,l9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.e,"iD",null,0,1,BAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.b),1),18),n.q,null,"eAttributeType",1,1,BAt,!0,!0,!1,!1,!0,!1,!0),z0(n.a,KAt,s9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.a),0),34),n._,T6n,null,0,1,KAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.a),1),18),n.ab,null,"details",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),2),18),n.Q,BB(Wtn(QQ(n.Q),0),18),"eModelElement",0,1,KAt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),3),18),n.S,null,"contents",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),4),18),n.S,null,"references",0,-1,KAt,!1,!1,!0,!1,!0,!1,!1),z0(n.o,qAt,"EClass",!1,!1,!0),ucn(BB(Wtn(QQ(n.o),0),34),n.e,"abstract",null,0,1,qAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.o),1),34),n.e,"interface",null,0,1,qAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),2),18),n.o,null,"eSuperTypes",0,-1,qAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.o),3),18),n.T,BB(Wtn(QQ(n.T),0),18),"eOperations",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),4),18),n.b,null,"eAllAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),5),18),n.W,null,"eAllReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),6),18),n.W,null,"eReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),7),18),n.b,null,"eAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),8),18),n.W,null,"eAllContainments",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),9),18),n.T,null,"eAllOperations",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),10),18),n.bb,null,"eAllStructuralFeatures",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),11),18),n.o,null,"eAllSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),12),18),n.b,null,"eIDAttribute",0,1,qAt,!0,!0,!1,!1,!1,!1,!0),Myn(BB(Wtn(QQ(n.o),13),18),n.bb,BB(Wtn(QQ(n.bb),7),18),"eStructuralFeatures",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),14),18),n.H,null,"eGenericSuperTypes",0,-1,qAt,!1,!1,!0,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),15),18),n.H,null,"eAllGenericSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),$yn(u=fin(BB(Wtn(VQ(n.o),0),59),n.e,"isSuperTypeOf"),n.o,"someClass"),fin(BB(Wtn(VQ(n.o),1),59),n.I,"getFeatureCount"),$yn(u=fin(BB(Wtn(VQ(n.o),2),59),n.bb,Z9n),n.I,"featureID"),$yn(u=fin(BB(Wtn(VQ(n.o),3),59),n.I,n7n),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.o),4),59),n.bb,Z9n),n._,"featureName"),fin(BB(Wtn(VQ(n.o),5),59),n.I,"getOperationCount"),$yn(u=fin(BB(Wtn(VQ(n.o),6),59),n.T,"getEOperation"),n.I,"operationID"),$yn(u=fin(BB(Wtn(VQ(n.o),7),59),n.I,e7n),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),8),59),n.T,"getOverride"),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),9),59),n.H,"getFeatureType"),n.bb,t7n),z0(n.p,HAt,b9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),0),34),n._,"instanceClassName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.p),1),34),t,"instanceClass",HAt,!0,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),2),34),n.M,r7n,null,0,1,HAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.p),3),34),n._,"instanceTypeName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),Myn(BB(Wtn(QQ(n.p),4),18),n.U,BB(Wtn(QQ(n.U),3),18),"ePackage",0,1,HAt,!0,!1,!1,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.p),5),18),n.db,null,c7n,0,-1,HAt,!1,!1,!0,!0,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.p),0),59),n.e,a7n),n.M,AWn),fin(BB(Wtn(VQ(n.p),1),59),n.I,"getClassifierID"),z0(n.q,GAt,"EDataType",!1,!1,!0),ucn(BB(Wtn(QQ(n.q),0),34),n.e,"serializable",a5n,0,1,GAt,!1,!1,!0,!1,!0,!1),z0(n.v,XAt,"EEnum",!1,!1,!0),Myn(BB(Wtn(QQ(n.v),0),18),n.w,BB(Wtn(QQ(n.w),3),18),"eLiterals",0,-1,XAt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.v),0),59),n.w,u7n),n._,t8n),$yn(u=fin(BB(Wtn(VQ(n.v),1),59),n.w,u7n),n.I,E6n),$yn(u=fin(BB(Wtn(VQ(n.v),2),59),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),z0(n.w,WAt,w9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.w),0),34),n.I,E6n,null,0,1,WAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),1),34),n.A,"instance",null,0,1,WAt,!0,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),2),34),n._,"literal",null,0,1,WAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.w),3),18),n.v,BB(Wtn(QQ(n.v),0),18),"eEnum",0,1,WAt,!0,!1,!1,!1,!1,!1,!1),z0(n.B,HOt,"EFactory",!1,!1,!0),Myn(BB(Wtn(QQ(n.B),0),18),n.U,BB(Wtn(QQ(n.U),2),18),"ePackage",1,1,HOt,!0,!1,!0,!1,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.B),0),59),n.S,"create"),n.o,"eClass"),$yn(u=fin(BB(Wtn(VQ(n.B),1),59),n.M,"createFromString"),n.q,"eDataType"),$yn(u,n._,"literalValue"),$yn(u=fin(BB(Wtn(VQ(n.B),2),59),n._,"convertToString"),n.q,"eDataType"),$yn(u,n.M,"instanceValue"),z0(n.Q,BOt,Y5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.Q),0),18),n.a,BB(Wtn(QQ(n.a),2),18),"eAnnotations",0,-1,BOt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.Q),0),59),n.a,"getEAnnotation"),n._,T6n),z0(n.R,qOt,J5n,!0,!1,!0),ucn(BB(Wtn(QQ(n.R),0),34),n._,t8n,null,0,1,qOt,!1,!1,!0,!1,!0,!1),z0(n.S,LOt,"EObject",!1,!1,!0),fin(BB(Wtn(VQ(n.S),0),59),n.o,"eClass"),fin(BB(Wtn(VQ(n.S),1),59),n.e,"eIsProxy"),fin(BB(Wtn(VQ(n.S),2),59),n.X,"eResource"),fin(BB(Wtn(VQ(n.S),3),59),n.S,"eContainer"),fin(BB(Wtn(VQ(n.S),4),59),n.bb,"eContainingFeature"),fin(BB(Wtn(VQ(n.S),5),59),n.W,"eContainmentFeature"),u=fin(BB(Wtn(VQ(n.S),6),59),null,"eContents"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(u,t,null))&&r.Fi(),u=fin(BB(Wtn(VQ(n.S),7),59),null,"eAllContents"),t=ZV(n.cb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(c=HTn(u,t,null))&&c.Fi(),u=fin(BB(Wtn(VQ(n.S),8),59),null,"eCrossReferences"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(a=HTn(u,t,null))&&a.Fi(),$yn(u=fin(BB(Wtn(VQ(n.S),9),59),n.M,"eGet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),10),59),n.M,"eGet"),n.bb,t7n),$yn(u,n.e,"resolve"),$yn(u=fin(BB(Wtn(VQ(n.S),11),59),null,"eSet"),n.bb,t7n),$yn(u,n.M,"newValue"),$yn(u=fin(BB(Wtn(VQ(n.S),12),59),n.e,"eIsSet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),13),59),null,"eUnset"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),14),59),n.M,"eInvoke"),n.T,i7n),t=ZV(n.fb),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(u,t,"arguments"),_W(u,n.K),z0(n.T,QAt,g9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.T),0),18),n.o,BB(Wtn(QQ(n.o),3),18),o7n,0,1,QAt,!0,!1,!1,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),1),18),n.db,null,c7n,0,-1,QAt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.T),2),18),n.V,BB(Wtn(QQ(n.V),0),18),"eParameters",0,-1,QAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),3),18),n.p,null,"eExceptions",0,-1,QAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.T),4),18),n.H,null,"eGenericExceptions",0,-1,QAt,!1,!1,!0,!0,!1,!0,!1),fin(BB(Wtn(VQ(n.T),0),59),n.I,e7n),$yn(u=fin(BB(Wtn(VQ(n.T),1),59),n.e,"isOverrideOf"),n.T,"someOperation"),z0(n.U,GOt,"EPackage",!1,!1,!0),ucn(BB(Wtn(QQ(n.U),0),34),n._,"nsURI",null,0,1,GOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.U),1),34),n._,"nsPrefix",null,0,1,GOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.U),2),18),n.B,BB(Wtn(QQ(n.B),0),18),"eFactoryInstance",1,1,GOt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.U),3),18),n.p,BB(Wtn(QQ(n.p),4),18),"eClassifiers",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),4),18),n.U,BB(Wtn(QQ(n.U),5),18),"eSubpackages",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),5),18),n.U,BB(Wtn(QQ(n.U),4),18),"eSuperPackage",0,1,GOt,!0,!1,!1,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.U),0),59),n.p,"getEClassifier"),n._,t8n),z0(n.V,YAt,p9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.V),0),18),n.T,BB(Wtn(QQ(n.T),2),18),"eOperation",0,1,YAt,!0,!1,!1,!1,!1,!1,!1),z0(n.W,JAt,v9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.W),0),34),n.e,"containment",null,0,1,JAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.W),1),34),n.e,"container",null,0,1,JAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.W),2),34),n.e,"resolveProxies",a5n,0,1,JAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.W),3),18),n.W,null,"eOpposite",0,1,JAt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.W),4),18),n.o,null,"eReferenceType",1,1,JAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.W),5),18),n.b,null,"eKeys",0,-1,JAt,!1,!1,!0,!1,!0,!1,!1),z0(n.bb,FAt,f9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.e,"changeable",a5n,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.e,"volatile",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),2),34),n.e,"transient",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),3),34),n._,"defaultValueLiteral",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),4),34),n.M,r7n,null,0,1,FAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.bb),5),34),n.e,"unsettable",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),6),34),n.e,"derived",null,0,1,FAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.bb),7),18),n.o,BB(Wtn(QQ(n.o),13),18),o7n,0,1,FAt,!0,!1,!1,!1,!1,!1,!1),fin(BB(Wtn(VQ(n.bb),0),59),n.I,n7n),u=fin(BB(Wtn(VQ(n.bb),1),59),null,"getContainerClass"),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(i=HTn(u,t,null))&&i.Fi(),z0(n.eb,_At,h9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.eb),0),34),n.e,"ordered",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),1),34),n.e,"unique",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),2),34),n.I,"lowerBound",null,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),3),34),n.I,"upperBound","1",0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),4),34),n.e,"many",null,0,1,_At,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.eb),5),34),n.e,"required",null,0,1,_At,!0,!0,!1,!1,!0,!0),Myn(BB(Wtn(QQ(n.eb),6),18),n.p,null,"eType",0,1,_At,!1,!0,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.eb),7),18),n.H,null,"eGenericType",0,1,_At,!1,!0,!0,!0,!1,!0,!1),z0(n.ab,Hnt,"EStringToStringMapEntry",!1,!1,!1),ucn(BB(Wtn(QQ(n.ab),0),34),n._,"key",null,0,1,Hnt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.ab),1),34),n._,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),z0(n.H,VAt,d9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.H),0),18),n.H,null,"eUpperBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),1),18),n.H,null,"eTypeArguments",0,-1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),2),18),n.p,null,"eRawType",1,1,VAt,!0,!1,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.H),3),18),n.H,null,"eLowerBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),4),18),n.db,null,"eTypeParameter",0,1,VAt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),5),18),n.p,null,"eClassifier",0,1,VAt,!1,!1,!0,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.H),0),59),n.e,a7n),n.M,AWn),z0(n.db,O$t,m9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.db),0),18),n.H,null,"eBounds",0,-1,O$t,!1,!1,!0,!0,!1,!1,!1),dV(n.c,iet,"EBigDecimal",!0),dV(n.d,oet,"EBigInteger",!0),dV(n.e,$Nt,"EBoolean",!0),dV(n.f,ktt,"EBooleanObject",!0),dV(n.i,NNt,"EByte",!0),dV(n.g,Gk(NNt,1),"EByteArray",!0),dV(n.j,Ttt,"EByteObject",!0),dV(n.k,ONt,"EChar",!0),dV(n.n,Stt,"ECharacterObject",!0),dV(n.r,mtt,"EDate",!0),dV(n.s,_Nt,"EDiagnosticChain",!1),dV(n.t,xNt,"EDouble",!0),dV(n.u,Ptt,"EDoubleObject",!0),dV(n.fb,uAt,"EEList",!1),dV(n.A,yAt,"EEnumerator",!1),dV(n.C,oLt,"EFeatureMap",!1),dV(n.D,$$t,"EFeatureMapEntry",!1),dV(n.F,DNt,"EFloat",!0),dV(n.G,Itt,"EFloatObject",!0),dV(n.I,ANt,"EInt",!0),dV(n.J,Att,"EIntegerObject",!0),dV(n.L,$nt,"EJavaClass",!0),dV(n.M,Ant,"EJavaObject",!0),dV(n.N,LNt,"ELong",!0),dV(n.O,Rtt,"ELongObject",!0),dV(n.P,Nnt,"EMap",!1),dV(n.X,iLt,"EResource",!1),dV(n.Y,FNt,"EResourceSet",!1),dV(n.Z,RNt,"EShort",!0),dV(n.$,_tt,"EShortObject",!0),dV(n._,Qtt,"EString",!0),dV(n.cb,sAt,"ETreeIterator",!1),dV(n.K,BNt,"EInvocationTargetException",!1),Lhn(n,V9n))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var MWn,SWn,PWn,IWn,CWn,OWn,AWn="object",$Wn="boolean",LWn="number",NWn="string",xWn="function",DWn=2147483647,RWn="java.lang",KWn={3:1},_Wn="com.google.common.base",FWn=", ",BWn="%s (%s) must not be negative",HWn={3:1,4:1,5:1},qWn="negative size: ",GWn="Optional.of(",zWn="null",UWn={198:1,47:1},XWn="com.google.common.collect",WWn={198:1,47:1,125:1},VWn={224:1,3:1},QWn={47:1},YWn="java.util",JWn={83:1},ZWn={20:1,28:1,14:1},nVn=1965,tVn={20:1,28:1,14:1,21:1},eVn={83:1,171:1,161:1},iVn={20:1,28:1,14:1,21:1,84:1},rVn={20:1,28:1,14:1,271:1,21:1,84:1},cVn={47:1,125:1},aVn={345:1,42:1},uVn="AbstractMapEntry",oVn="expectedValuesPerKey",sVn={3:1,6:1,4:1,5:1},hVn=16384,fVn={164:1},lVn={38:1},bVn={l:4194303,m:4194303,h:524287},wVn={196:1},dVn={245:1,3:1,35:1},gVn="range unbounded on this side",pVn={20:1},vVn={20:1,14:1},mVn={3:1,20:1,28:1,14:1},yVn={152:1,3:1,20:1,28:1,14:1,15:1,54:1},kVn={3:1,4:1,5:1,165:1},jVn={3:1,83:1},EVn={20:1,14:1,21:1},TVn={3:1,20:1,28:1,14:1,21:1},MVn={20:1,14:1,21:1,84:1},SVn=461845907,PVn=-862048943,IVn={3:1,6:1,4:1,5:1,165:1},CVn="expectedSize",OVn=1073741824,AVn="initialArraySize",$Vn={3:1,6:1,4:1,9:1,5:1},LVn={20:1,28:1,52:1,14:1,15:1},NVn="arraySize",xVn={20:1,28:1,52:1,14:1,15:1,54:1},DVn={45:1},RVn={365:1},KVn=1e-4,_Vn=-2147483648,FVn="__noinit__",BVn={3:1,102:1,60:1,78:1},HVn="com.google.gwt.core.client.impl",qVn="String",GVn="com.google.gwt.core.client",zVn="anonymous",UVn="fnStack",XVn="Unknown",WVn={195:1,3:1,4:1},VVn=1e3,QVn=65535,YVn="January",JVn="February",ZVn="March",nQn="April",tQn="May",eQn="June",iQn="July",rQn="August",cQn="September",aQn="October",uQn="November",oQn="December",sQn=1900,hQn={48:1,3:1,4:1},fQn="Before Christ",lQn="Anno Domini",bQn="Sunday",wQn="Monday",dQn="Tuesday",gQn="Wednesday",pQn="Thursday",vQn="Friday",mQn="Saturday",yQn="com.google.gwt.i18n.shared",kQn="DateTimeFormat",jQn="com.google.gwt.i18n.client",EQn="DefaultDateTimeFormatInfo",TQn={3:1,4:1,35:1,199:1},MQn="com.google.gwt.json.client",SQn=4194303,PQn=1048575,IQn=524288,CQn=4194304,OQn=17592186044416,AQn=1e9,$Qn=-17592186044416,LQn="java.io",NQn={3:1,102:1,73:1,60:1,78:1},xQn={3:1,289:1,78:1},DQn='For input string: "',RQn=1/0,KQn=-1/0,_Qn=4096,FQn={3:1,4:1,364:1},BQn=65536,HQn=55296,qQn={104:1,3:1,4:1},GQn=1e5,zQn=.3010299956639812,UQn=4294967295,XQn=4294967296,WQn="0.0",VQn={42:1},QQn={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},YQn={3:1,20:1,28:1,52:1,14:1,15:1,54:1},JQn={20:1,14:1,15:1},ZQn={3:1,62:1},nYn={182:1},tYn={3:1,4:1,83:1},eYn={3:1,4:1,20:1,28:1,14:1,53:1,21:1},iYn="delete",rYn=1.4901161193847656e-8,cYn=11102230246251565e-32,aYn=15525485,uYn=5.960464477539063e-8,oYn=16777216,sYn=16777215,hYn=", length: ",fYn={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},lYn={3:1,35:1,22:1,297:1},bYn="java.util.function",wYn="java.util.logging",dYn={3:1,4:1,5:1,842:1},gYn="undefined",pYn="java.util.stream",vYn={525:1,670:1},mYn="fromIndex: ",yYn=" > toIndex: ",kYn=", toIndex: ",jYn="Index: ",EYn=", Size: ",TYn="org.eclipse.elk.alg.common",MYn={62:1},SYn="org.eclipse.elk.alg.common.compaction",PYn="Scanline/EventHandler",IYn="org.eclipse.elk.alg.common.compaction.oned",CYn="CNode belongs to another CGroup.",OYn="ISpacingsHandler/1",AYn="The ",$Yn=" instance has been finished already.",LYn="The direction ",NYn=" is not supported by the CGraph instance.",xYn="OneDimensionalCompactor",DYn="OneDimensionalCompactor/lambda$0$Type",RYn="Quadruplet",KYn="ScanlineConstraintCalculator",_Yn="ScanlineConstraintCalculator/ConstraintsScanlineHandler",FYn="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",BYn="ScanlineConstraintCalculator/Timestamp",HYn="ScanlineConstraintCalculator/lambda$0$Type",qYn={169:1,45:1},GYn="org.eclipse.elk.alg.common.compaction.options",zYn="org.eclipse.elk.core.data",UYn="org.eclipse.elk.polyomino.traversalStrategy",XYn="org.eclipse.elk.polyomino.lowLevelSort",WYn="org.eclipse.elk.polyomino.highLevelSort",VYn="org.eclipse.elk.polyomino.fill",QYn={130:1},YYn="polyomino",JYn="org.eclipse.elk.alg.common.networksimplex",ZYn={177:1,3:1,4:1},nJn="org.eclipse.elk.alg.common.nodespacing",tJn="org.eclipse.elk.alg.common.nodespacing.cellsystem",eJn="CENTER",iJn={212:1,326:1},rJn={3:1,4:1,5:1,595:1},cJn="LEFT",aJn="RIGHT",uJn="Vertical alignment cannot be null",oJn="BOTTOM",sJn="org.eclipse.elk.alg.common.nodespacing.internal",hJn="UNDEFINED",fJn=.01,lJn="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",bJn="LabelPlacer/lambda$0$Type",wJn="LabelPlacer/lambda$1$Type",dJn="portRatioOrPosition",gJn="org.eclipse.elk.alg.common.overlaps",pJn="DOWN",vJn="org.eclipse.elk.alg.common.polyomino",mJn="NORTH",yJn="EAST",kJn="SOUTH",jJn="WEST",EJn="org.eclipse.elk.alg.common.polyomino.structures",TJn="Direction",MJn="Grid is only of size ",SJn=". Requested point (",PJn=") is out of bounds.",IJn=" Given center based coordinates were (",CJn="org.eclipse.elk.graph.properties",OJn="IPropertyHolder",AJn={3:1,94:1,134:1},$Jn="org.eclipse.elk.alg.common.spore",LJn="org.eclipse.elk.alg.common.utils",NJn={209:1},xJn="org.eclipse.elk.core",DJn="Connected Components Compaction",RJn="org.eclipse.elk.alg.disco",KJn="org.eclipse.elk.alg.disco.graph",_Jn="org.eclipse.elk.alg.disco.options",FJn="CompactionStrategy",BJn="org.eclipse.elk.disco.componentCompaction.strategy",HJn="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",qJn="org.eclipse.elk.disco.debug.discoGraph",GJn="org.eclipse.elk.disco.debug.discoPolys",zJn="componentCompaction",UJn="org.eclipse.elk.disco",XJn="org.eclipse.elk.spacing.componentComponent",WJn="org.eclipse.elk.edge.thickness",VJn="org.eclipse.elk.aspectRatio",QJn="org.eclipse.elk.padding",YJn="org.eclipse.elk.alg.disco.transform",JJn=1.5707963267948966,ZJn=17976931348623157e292,nZn={3:1,4:1,5:1,192:1},tZn={3:1,6:1,4:1,5:1,106:1,120:1},eZn="org.eclipse.elk.alg.force",iZn="ComponentsProcessor",rZn="ComponentsProcessor/1",cZn="org.eclipse.elk.alg.force.graph",aZn="Component Layout",uZn="org.eclipse.elk.alg.force.model",oZn="org.eclipse.elk.force.model",sZn="org.eclipse.elk.force.iterations",hZn="org.eclipse.elk.force.repulsivePower",fZn="org.eclipse.elk.force.temperature",lZn=.001,bZn="org.eclipse.elk.force.repulsion",wZn="org.eclipse.elk.alg.force.options",dZn=1.600000023841858,gZn="org.eclipse.elk.force",pZn="org.eclipse.elk.priority",vZn="org.eclipse.elk.spacing.nodeNode",mZn="org.eclipse.elk.spacing.edgeLabel",yZn="org.eclipse.elk.randomSeed",kZn="org.eclipse.elk.separateConnectedComponents",jZn="org.eclipse.elk.interactive",EZn="org.eclipse.elk.portConstraints",TZn="org.eclipse.elk.edgeLabels.inline",MZn="org.eclipse.elk.omitNodeMicroLayout",SZn="org.eclipse.elk.nodeSize.options",PZn="org.eclipse.elk.nodeSize.constraints",IZn="org.eclipse.elk.nodeLabels.placement",CZn="org.eclipse.elk.portLabels.placement",OZn="origin",AZn="random",$Zn="boundingBox.upLeft",LZn="boundingBox.lowRight",NZn="org.eclipse.elk.stress.fixed",xZn="org.eclipse.elk.stress.desiredEdgeLength",DZn="org.eclipse.elk.stress.dimension",RZn="org.eclipse.elk.stress.epsilon",KZn="org.eclipse.elk.stress.iterationLimit",_Zn="org.eclipse.elk.stress",FZn="ELK Stress",BZn="org.eclipse.elk.nodeSize.minimum",HZn="org.eclipse.elk.alg.force.stress",qZn="Layered layout",GZn="org.eclipse.elk.alg.layered",zZn="org.eclipse.elk.alg.layered.compaction.components",UZn="org.eclipse.elk.alg.layered.compaction.oned",XZn="org.eclipse.elk.alg.layered.compaction.oned.algs",WZn="org.eclipse.elk.alg.layered.compaction.recthull",VZn="org.eclipse.elk.alg.layered.components",QZn="NONE",YZn={3:1,6:1,4:1,9:1,5:1,122:1},JZn={3:1,6:1,4:1,5:1,141:1,106:1,120:1},ZZn="org.eclipse.elk.alg.layered.compound",n1n={51:1},t1n="org.eclipse.elk.alg.layered.graph",e1n=" -> ",i1n="Not supported by LGraph",r1n="Port side is undefined",c1n={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},a1n={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},u1n={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},o1n="([{\"' \t\r\n",s1n=")]}\"' \t\r\n",h1n="The given string contains parts that cannot be parsed as numbers.",f1n="org.eclipse.elk.core.math",l1n={3:1,4:1,142:1,207:1,414:1},b1n={3:1,4:1,116:1,207:1,414:1},w1n="org.eclipse.elk.layered",d1n="org.eclipse.elk.alg.layered.graph.transform",g1n="ElkGraphImporter",p1n="ElkGraphImporter/lambda$0$Type",v1n="ElkGraphImporter/lambda$1$Type",m1n="ElkGraphImporter/lambda$2$Type",y1n="ElkGraphImporter/lambda$4$Type",k1n="Node margin calculation",j1n="org.eclipse.elk.alg.layered.intermediate",E1n="ONE_SIDED_GREEDY_SWITCH",T1n="TWO_SIDED_GREEDY_SWITCH",M1n="No implementation is available for the layout processor ",S1n="IntermediateProcessorStrategy",P1n="Node '",I1n="FIRST_SEPARATE",C1n="LAST_SEPARATE",O1n="Odd port side processing",A1n="org.eclipse.elk.alg.layered.intermediate.compaction",$1n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",L1n="org.eclipse.elk.alg.layered.p3order.counting",N1n={225:1},x1n="org.eclipse.elk.alg.layered.intermediate.loops",D1n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",R1n="org.eclipse.elk.alg.layered.intermediate.loops.routing",K1n="org.eclipse.elk.alg.layered.intermediate.preserveorder",_1n="org.eclipse.elk.alg.layered.intermediate.wrapping",F1n="org.eclipse.elk.alg.layered.options",B1n="INTERACTIVE",H1n="DEPTH_FIRST",q1n="EDGE_LENGTH",G1n="SELF_LOOPS",z1n="firstTryWithInitialOrder",U1n="org.eclipse.elk.layered.directionCongruency",X1n="org.eclipse.elk.layered.feedbackEdges",W1n="org.eclipse.elk.layered.interactiveReferencePoint",V1n="org.eclipse.elk.layered.mergeEdges",Q1n="org.eclipse.elk.layered.mergeHierarchyEdges",Y1n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",J1n="org.eclipse.elk.layered.portSortingStrategy",Z1n="org.eclipse.elk.layered.thoroughness",n0n="org.eclipse.elk.layered.unnecessaryBendpoints",t0n="org.eclipse.elk.layered.generatePositionAndLayerIds",e0n="org.eclipse.elk.layered.cycleBreaking.strategy",i0n="org.eclipse.elk.layered.layering.strategy",r0n="org.eclipse.elk.layered.layering.layerConstraint",c0n="org.eclipse.elk.layered.layering.layerChoiceConstraint",a0n="org.eclipse.elk.layered.layering.layerId",u0n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",o0n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",s0n="org.eclipse.elk.layered.layering.nodePromotion.strategy",h0n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",f0n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",l0n="org.eclipse.elk.layered.crossingMinimization.strategy",b0n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",w0n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",d0n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",g0n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",p0n="org.eclipse.elk.layered.crossingMinimization.positionId",v0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",m0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",y0n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k0n="org.eclipse.elk.layered.nodePlacement.strategy",j0n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",E0n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",T0n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M0n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",S0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",P0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",I0n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",C0n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",O0n="org.eclipse.elk.layered.edgeRouting.splines.mode",A0n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",$0n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",L0n="org.eclipse.elk.layered.spacing.baseValue",N0n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",x0n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",D0n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",R0n="org.eclipse.elk.layered.priority.direction",K0n="org.eclipse.elk.layered.priority.shortness",_0n="org.eclipse.elk.layered.priority.straightness",F0n="org.eclipse.elk.layered.compaction.connectedComponents",B0n="org.eclipse.elk.layered.compaction.postCompaction.strategy",H0n="org.eclipse.elk.layered.compaction.postCompaction.constraints",q0n="org.eclipse.elk.layered.highDegreeNodes.treatment",G0n="org.eclipse.elk.layered.highDegreeNodes.threshold",z0n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U0n="org.eclipse.elk.layered.wrapping.strategy",X0n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",W0n="org.eclipse.elk.layered.wrapping.correctionFactor",V0n="org.eclipse.elk.layered.wrapping.cutting.strategy",Q0n="org.eclipse.elk.layered.wrapping.cutting.cuts",Y0n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",J0n="org.eclipse.elk.layered.wrapping.validify.strategy",Z0n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",n2n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",t2n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",e2n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",i2n="org.eclipse.elk.layered.edgeLabels.sideSelection",r2n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",c2n="org.eclipse.elk.layered.considerModelOrder.strategy",a2n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",u2n="org.eclipse.elk.layered.considerModelOrder.components",o2n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",s2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",h2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",f2n="layering",l2n="layering.minWidth",b2n="layering.nodePromotion",w2n="crossingMinimization",d2n="org.eclipse.elk.hierarchyHandling",g2n="crossingMinimization.greedySwitch",p2n="nodePlacement",v2n="nodePlacement.bk",m2n="edgeRouting",y2n="org.eclipse.elk.edgeRouting",k2n="spacing",j2n="priority",E2n="compaction",T2n="compaction.postCompaction",M2n="Specifies whether and how post-process compaction is applied.",S2n="highDegreeNodes",P2n="wrapping",I2n="wrapping.cutting",C2n="wrapping.validify",O2n="wrapping.multiEdge",A2n="edgeLabels",$2n="considerModelOrder",L2n="org.eclipse.elk.spacing.commentComment",N2n="org.eclipse.elk.spacing.commentNode",x2n="org.eclipse.elk.spacing.edgeEdge",D2n="org.eclipse.elk.spacing.edgeNode",R2n="org.eclipse.elk.spacing.labelLabel",K2n="org.eclipse.elk.spacing.labelPortHorizontal",_2n="org.eclipse.elk.spacing.labelPortVertical",F2n="org.eclipse.elk.spacing.labelNode",B2n="org.eclipse.elk.spacing.nodeSelfLoop",H2n="org.eclipse.elk.spacing.portPort",q2n="org.eclipse.elk.spacing.individual",G2n="org.eclipse.elk.port.borderOffset",z2n="org.eclipse.elk.noLayout",U2n="org.eclipse.elk.port.side",X2n="org.eclipse.elk.debugMode",W2n="org.eclipse.elk.alignment",V2n="org.eclipse.elk.insideSelfLoops.activate",Q2n="org.eclipse.elk.insideSelfLoops.yo",Y2n="org.eclipse.elk.nodeSize.fixedGraphSize",J2n="org.eclipse.elk.direction",Z2n="org.eclipse.elk.nodeLabels.padding",n3n="org.eclipse.elk.portLabels.nextToPortIfPossible",t3n="org.eclipse.elk.portLabels.treatAsGroup",e3n="org.eclipse.elk.portAlignment.default",i3n="org.eclipse.elk.portAlignment.north",r3n="org.eclipse.elk.portAlignment.south",c3n="org.eclipse.elk.portAlignment.west",a3n="org.eclipse.elk.portAlignment.east",u3n="org.eclipse.elk.contentAlignment",o3n="org.eclipse.elk.junctionPoints",s3n="org.eclipse.elk.edgeLabels.placement",h3n="org.eclipse.elk.port.index",f3n="org.eclipse.elk.commentBox",l3n="org.eclipse.elk.hypernode",b3n="org.eclipse.elk.port.anchor",w3n="org.eclipse.elk.partitioning.activate",d3n="org.eclipse.elk.partitioning.partition",g3n="org.eclipse.elk.position",p3n="org.eclipse.elk.margins",v3n="org.eclipse.elk.spacing.portsSurrounding",m3n="org.eclipse.elk.interactiveLayout",y3n="org.eclipse.elk.core.util",k3n={3:1,4:1,5:1,593:1},j3n="NETWORK_SIMPLEX",E3n={123:1,51:1},T3n="org.eclipse.elk.alg.layered.p1cycles",M3n="org.eclipse.elk.alg.layered.p2layers",S3n={402:1,225:1},P3n={832:1,3:1,4:1},I3n="org.eclipse.elk.alg.layered.p3order",C3n="org.eclipse.elk.alg.layered.p4nodes",O3n={3:1,4:1,5:1,840:1},A3n=1e-5,$3n="org.eclipse.elk.alg.layered.p4nodes.bk",L3n="org.eclipse.elk.alg.layered.p5edges",N3n="org.eclipse.elk.alg.layered.p5edges.orthogonal",x3n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",D3n=1e-6,R3n="org.eclipse.elk.alg.layered.p5edges.splines",K3n=.09999999999999998,_3n=1e-8,F3n=4.71238898038469,B3n=3.141592653589793,H3n="org.eclipse.elk.alg.mrtree",q3n="org.eclipse.elk.alg.mrtree.graph",G3n="org.eclipse.elk.alg.mrtree.intermediate",z3n="Set neighbors in level",U3n="DESCENDANTS",X3n="org.eclipse.elk.mrtree.weighting",W3n="org.eclipse.elk.mrtree.searchOrder",V3n="org.eclipse.elk.alg.mrtree.options",Q3n="org.eclipse.elk.mrtree",Y3n="org.eclipse.elk.tree",J3n="org.eclipse.elk.alg.radial",Z3n=6.283185307179586,n4n=5e-324,t4n="org.eclipse.elk.alg.radial.intermediate",e4n="org.eclipse.elk.alg.radial.intermediate.compaction",i4n={3:1,4:1,5:1,106:1},r4n="org.eclipse.elk.alg.radial.intermediate.optimization",c4n="No implementation is available for the layout option ",a4n="org.eclipse.elk.alg.radial.options",u4n="org.eclipse.elk.radial.orderId",o4n="org.eclipse.elk.radial.radius",s4n="org.eclipse.elk.radial.compactor",h4n="org.eclipse.elk.radial.compactionStepSize",f4n="org.eclipse.elk.radial.sorter",l4n="org.eclipse.elk.radial.wedgeCriteria",b4n="org.eclipse.elk.radial.optimizationCriteria",w4n="org.eclipse.elk.radial",d4n="org.eclipse.elk.alg.radial.p1position.wedge",g4n="org.eclipse.elk.alg.radial.sorting",p4n=5.497787143782138,v4n=3.9269908169872414,m4n=2.356194490192345,y4n="org.eclipse.elk.alg.rectpacking",k4n="org.eclipse.elk.alg.rectpacking.firstiteration",j4n="org.eclipse.elk.alg.rectpacking.options",E4n="org.eclipse.elk.rectpacking.optimizationGoal",T4n="org.eclipse.elk.rectpacking.lastPlaceShift",M4n="org.eclipse.elk.rectpacking.currentPosition",S4n="org.eclipse.elk.rectpacking.desiredPosition",P4n="org.eclipse.elk.rectpacking.onlyFirstIteration",I4n="org.eclipse.elk.rectpacking.rowCompaction",C4n="org.eclipse.elk.rectpacking.expandToAspectRatio",O4n="org.eclipse.elk.rectpacking.targetWidth",A4n="org.eclipse.elk.expandNodes",$4n="org.eclipse.elk.rectpacking",L4n="org.eclipse.elk.alg.rectpacking.util",N4n="No implementation available for ",x4n="org.eclipse.elk.alg.spore",D4n="org.eclipse.elk.alg.spore.options",R4n="org.eclipse.elk.sporeCompaction",K4n="org.eclipse.elk.underlyingLayoutAlgorithm",_4n="org.eclipse.elk.processingOrder.treeConstruction",F4n="org.eclipse.elk.processingOrder.spanningTreeCostFunction",B4n="org.eclipse.elk.processingOrder.preferredRoot",H4n="org.eclipse.elk.processingOrder.rootSelection",q4n="org.eclipse.elk.structure.structureExtractionStrategy",G4n="org.eclipse.elk.compaction.compactionStrategy",z4n="org.eclipse.elk.compaction.orthogonal",U4n="org.eclipse.elk.overlapRemoval.maxIterations",X4n="org.eclipse.elk.overlapRemoval.runScanline",W4n="processingOrder",V4n="overlapRemoval",Q4n="org.eclipse.elk.sporeOverlap",Y4n="org.eclipse.elk.alg.spore.p1structure",J4n="org.eclipse.elk.alg.spore.p2processingorder",Z4n="org.eclipse.elk.alg.spore.p3execution",n5n="Invalid index: ",t5n="org.eclipse.elk.core.alg",e5n={331:1},i5n={288:1},r5n="Make sure its type is registered with the ",c5n=" utility class.",a5n="true",u5n="false",o5n="Couldn't clone property '",s5n=.05,h5n="org.eclipse.elk.core.options",f5n=1.2999999523162842,l5n="org.eclipse.elk.box",b5n="org.eclipse.elk.box.packingMode",w5n="org.eclipse.elk.algorithm",d5n="org.eclipse.elk.resolvedAlgorithm",g5n="org.eclipse.elk.bendPoints",p5n="org.eclipse.elk.labelManager",v5n="org.eclipse.elk.scaleFactor",m5n="org.eclipse.elk.animate",y5n="org.eclipse.elk.animTimeFactor",k5n="org.eclipse.elk.layoutAncestors",j5n="org.eclipse.elk.maxAnimTime",E5n="org.eclipse.elk.minAnimTime",T5n="org.eclipse.elk.progressBar",M5n="org.eclipse.elk.validateGraph",S5n="org.eclipse.elk.validateOptions",P5n="org.eclipse.elk.zoomToFit",I5n="org.eclipse.elk.font.name",C5n="org.eclipse.elk.font.size",O5n="org.eclipse.elk.edge.type",A5n="partitioning",$5n="nodeLabels",L5n="portAlignment",N5n="nodeSize",x5n="port",D5n="portLabels",R5n="insideSelfLoops",K5n="org.eclipse.elk.fixed",_5n="org.eclipse.elk.random",F5n="port must have a parent node to calculate the port side",B5n="The edge needs to have exactly one edge section. Found: ",H5n="org.eclipse.elk.core.util.adapters",q5n="org.eclipse.emf.ecore",G5n="org.eclipse.elk.graph",z5n="EMapPropertyHolder",U5n="ElkBendPoint",X5n="ElkGraphElement",W5n="ElkConnectableShape",V5n="ElkEdge",Q5n="ElkEdgeSection",Y5n="EModelElement",J5n="ENamedElement",Z5n="ElkLabel",n6n="ElkNode",t6n="ElkPort",e6n={92:1,90:1},i6n="org.eclipse.emf.common.notify.impl",r6n="The feature '",c6n="' is not a valid changeable feature",a6n="Expecting null",u6n="' is not a valid feature",o6n="The feature ID",s6n=" is not a valid feature ID",h6n=32768,f6n={105:1,92:1,90:1,56:1,49:1,97:1},l6n="org.eclipse.emf.ecore.impl",b6n="org.eclipse.elk.graph.impl",w6n="Recursive containment not allowed for ",d6n="The datatype '",g6n="' is not a valid classifier",p6n="The value '",v6n={190:1,3:1,4:1},m6n="The class '",y6n="http://www.eclipse.org/elk/ElkGraph",k6n=1024,j6n="property",E6n="value",T6n="source",M6n="properties",S6n="identifier",P6n="height",I6n="width",C6n="parent",O6n="text",A6n="children",$6n="hierarchical",L6n="sources",N6n="targets",x6n="sections",D6n="bendPoints",R6n="outgoingShape",K6n="incomingShape",_6n="outgoingSections",F6n="incomingSections",B6n="org.eclipse.emf.common.util",H6n="Severe implementation error in the Json to ElkGraph importer.",q6n="id",G6n="org.eclipse.elk.graph.json",z6n="Unhandled parameter types: ",U6n="startPoint",X6n="An edge must have at least one source and one target (edge id: '",W6n="').",V6n="Referenced edge section does not exist: ",Q6n=" (edge id: '",Y6n="target",J6n="sourcePoint",Z6n="targetPoint",n8n="group",t8n="name",e8n="connectableShape cannot be null",i8n="edge cannot be null",r8n="Passed edge is not 'simple'.",c8n="org.eclipse.elk.graph.util",a8n="The 'no duplicates' constraint is violated",u8n="targetIndex=",o8n=", size=",s8n="sourceIndex=",h8n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},f8n={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},l8n="logging",b8n="measureExecutionTime",w8n="parser.parse.1",d8n="parser.parse.2",g8n="parser.next.1",p8n="parser.next.2",v8n="parser.next.3",m8n="parser.next.4",y8n="parser.factor.1",k8n="parser.factor.2",j8n="parser.factor.3",E8n="parser.factor.4",T8n="parser.factor.5",M8n="parser.factor.6",S8n="parser.atom.1",P8n="parser.atom.2",I8n="parser.atom.3",C8n="parser.atom.4",O8n="parser.atom.5",A8n="parser.cc.1",$8n="parser.cc.2",L8n="parser.cc.3",N8n="parser.cc.5",x8n="parser.cc.6",D8n="parser.cc.7",R8n="parser.cc.8",K8n="parser.ope.1",_8n="parser.ope.2",F8n="parser.ope.3",B8n="parser.descape.1",H8n="parser.descape.2",q8n="parser.descape.3",G8n="parser.descape.4",z8n="parser.descape.5",U8n="parser.process.1",X8n="parser.quantifier.1",W8n="parser.quantifier.2",V8n="parser.quantifier.3",Q8n="parser.quantifier.4",Y8n="parser.quantifier.5",J8n="org.eclipse.emf.common.notify",Z8n={415:1,672:1},n9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},t9n={366:1,143:1},e9n="index=",i9n={3:1,4:1,5:1,126:1},r9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},c9n={3:1,6:1,4:1,5:1,192:1},a9n={3:1,4:1,5:1,165:1,367:1},u9n=";/?:@&=+$,",o9n="invalid authority: ",s9n="EAnnotation",h9n="ETypedElement",f9n="EStructuralFeature",l9n="EAttribute",b9n="EClassifier",w9n="EEnumLiteral",d9n="EGenericType",g9n="EOperation",p9n="EParameter",v9n="EReference",m9n="ETypeParameter",y9n="org.eclipse.emf.ecore.util",k9n={76:1},j9n={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},E9n="org.eclipse.emf.ecore.util.FeatureMap$Entry",T9n=8192,M9n=2048,S9n="byte",P9n="char",I9n="double",C9n="float",O9n="int",A9n="long",$9n="short",L9n="java.lang.Object",N9n={3:1,4:1,5:1,247:1},x9n={3:1,4:1,5:1,673:1},D9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},R9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},K9n="mixed",_9n="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",F9n="kind",B9n={3:1,4:1,5:1,674:1},H9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},q9n={20:1,28:1,52:1,14:1,15:1,58:1,69:1},G9n={47:1,125:1,279:1},z9n={72:1,332:1},U9n="The value of type '",X9n="' must be of type '",W9n=1316,V9n="http://www.eclipse.org/emf/2002/Ecore",Q9n=-32768,Y9n="constraints",J9n="baseType",Z9n="getEStructuralFeature",n7n="getFeatureID",t7n="feature",e7n="getOperationID",i7n="operation",r7n="defaultValue",c7n="eTypeParameters",a7n="isInstance",u7n="getEEnumLiteral",o7n="eContainingClass",s7n={55:1},h7n={3:1,4:1,5:1,119:1},f7n="org.eclipse.emf.ecore.resource",l7n={92:1,90:1,591:1,1935:1},b7n="org.eclipse.emf.ecore.resource.impl",w7n="unspecified",d7n="simple",g7n="attribute",p7n="attributeWildcard",v7n="element",m7n="elementWildcard",y7n="collapse",k7n="itemType",j7n="namespace",E7n="##targetNamespace",T7n="whiteSpace",M7n="wildcards",S7n="http://www.eclipse.org/emf/2003/XMLType",P7n="##any",I7n="uninitialized",C7n="The multiplicity constraint is violated",O7n="org.eclipse.emf.ecore.xml.type",A7n="ProcessingInstruction",$7n="SimpleAnyType",L7n="XMLTypeDocumentRoot",N7n="org.eclipse.emf.ecore.xml.type.impl",x7n="INF",D7n="processing",R7n="ENTITIES_._base",K7n="minLength",_7n="ENTITY",F7n="NCName",B7n="IDREFS_._base",H7n="integer",q7n="token",G7n="pattern",z7n="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",U7n="\\i\\c*",X7n="[\\i-[:]][\\c-[:]]*",W7n="nonPositiveInteger",V7n="maxInclusive",Q7n="NMTOKEN",Y7n="NMTOKENS_._base",J7n="nonNegativeInteger",Z7n="minInclusive",nnt="normalizedString",tnt="unsignedByte",ent="unsignedInt",int="18446744073709551615",rnt="unsignedShort",cnt="processingInstruction",ant="org.eclipse.emf.ecore.xml.type.internal",unt=1114111,ont="Internal Error: shorthands: \\u",snt="xml:isDigit",hnt="xml:isWord",fnt="xml:isSpace",lnt="xml:isNameChar",bnt="xml:isInitialNameChar",wnt="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",dnt="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",gnt="Private Use",pnt="ASSIGNED",vnt="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",mnt="UNASSIGNED",ynt={3:1,117:1},knt="org.eclipse.emf.ecore.xml.type.util",jnt={3:1,4:1,5:1,368:1},Ent="org.eclipse.xtext.xbase.lib",Tnt="Cannot add elements to a Range",Mnt="Cannot set elements in a Range",Snt="Cannot remove elements from a Range",Pnt="locale",Int="default",Cnt="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,WMn(),wAn(1,null,{},r),MWn.Fb=function(n){return FO(this,n)},MWn.Gb=function(){return this.gm},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return nE(tsn(this))+"@"+(nsn(this)>>>0).toString(16)},MWn.equals=function(n){return this.Fb(n)},MWn.hashCode=function(){return this.Hb()},MWn.toString=function(){return this.Ib()},wAn(290,1,{290:1,2026:1},pon),MWn.le=function(n){var t;return(t=new pon).i=4,t.c=n>1?gZ(this,n-1):this,t},MWn.me=function(){return ED(this),this.b},MWn.ne=function(){return nE(this)},MWn.oe=function(){return ED(this),this.k},MWn.pe=function(){return 0!=(4&this.i)},MWn.qe=function(){return 0!=(1&this.i)},MWn.Ib=function(){return utn(this)},MWn.i=0;var Ont,Ant=vX(RWn,"Object",1),$nt=vX(RWn,"Class",290);wAn(1998,1,KWn),vX(_Wn,"Optional",1998),wAn(1170,1998,KWn,c),MWn.Fb=function(n){return n===this},MWn.Hb=function(){return 2040732332},MWn.Ib=function(){return"Optional.absent()"},MWn.Jb=function(n){return yX(n),iy(),Ont},vX(_Wn,"Absent",1170),wAn(628,1,{},mk),vX(_Wn,"Joiner",628);var Lnt=bq(_Wn,"Predicate");wAn(582,1,{169:1,582:1,3:1,45:1},Hf),MWn.Mb=function(n){return Kon(this,n)},MWn.Lb=function(n){return Kon(this,n)},MWn.Fb=function(n){var t;return!!cL(n,582)&&(t=BB(n,582),NAn(this.a,t.a))},MWn.Hb=function(){return Fon(this.a)+306654252},MWn.Ib=function(){return wPn(this.a)},vX(_Wn,"Predicates/AndPredicate",582),wAn(408,1998,{408:1,3:1},qf),MWn.Fb=function(n){var t;return!!cL(n,408)&&(t=BB(n,408),Nfn(this.a,t.a))},MWn.Hb=function(){return 1502476572+nsn(this.a)},MWn.Ib=function(){return GWn+this.a+")"},MWn.Jb=function(n){return new qf(WQ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},vX(_Wn,"Present",408),wAn(198,1,UWn),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){bk()},vX(XWn,"UnmodifiableIterator",198),wAn(1978,198,WWn),MWn.Qb=function(){bk()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(XWn,"UnmodifiableListIterator",1978),wAn(386,1978,WWn),MWn.Ob=function(){return this.c<this.d},MWn.Sb=function(){return this.c>0},MWn.Pb=function(){if(this.c>=this.d)throw Hp(new yv);return this.Xb(this.c++)},MWn.Tb=function(){return this.c},MWn.Ub=function(){if(this.c<=0)throw Hp(new yv);return this.Xb(--this.c)},MWn.Vb=function(){return this.c-1},MWn.c=0,MWn.d=0,vX(XWn,"AbstractIndexedListIterator",386),wAn(699,198,UWn),MWn.Ob=function(){return Zin(this)},MWn.Pb=function(){return P7(this)},MWn.e=1,vX(XWn,"AbstractIterator",699),wAn(1986,1,{224:1}),MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.Fb=function(n){return jsn(this,n)},MWn.Hb=function(){return nsn(this.Zb())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return gz(this)},MWn.Ib=function(){return Bbn(this.Zb())},vX(XWn,"AbstractMultimap",1986),wAn(726,1986,VWn),MWn.$b=function(){win(this)},MWn._b=function(n){return Wj(this,n)},MWn.ac=function(){return new pT(this,this.c)},MWn.ic=function(n){return this.hc()},MWn.bc=function(){return new HL(this,this.c)},MWn.jc=function(){return this.mc(this.hc())},MWn.kc=function(){return new Hm(this)},MWn.lc=function(){return qTn(this.c.vc().Nc(),new u,64,this.d)},MWn.cc=function(n){return h6(this,n)},MWn.fc=function(n){return Nhn(this,n)},MWn.gc=function(){return this.d},MWn.mc=function(n){return SQ(),new Hb(n)},MWn.nc=function(){return new Bm(this)},MWn.oc=function(){return qTn(this.c.Cc().Nc(),new a,64,this.d)},MWn.pc=function(n,t){return new W6(this,n,t,null)},MWn.d=0,vX(XWn,"AbstractMapBasedMultimap",726),wAn(1631,726,VWn),MWn.hc=function(){return new J6(this.a)},MWn.jc=function(){return SQ(),SQ(),set},MWn.cc=function(n){return BB(h6(this,n),15)},MWn.fc=function(n){return BB(Nhn(this,n),15)},MWn.Zb=function(){return OQ(this)},MWn.Fb=function(n){return jsn(this,n)},MWn.qc=function(n){return BB(h6(this,n),15)},MWn.rc=function(n){return BB(Nhn(this,n),15)},MWn.mc=function(n){return rY(BB(n,15))},MWn.pc=function(n,t){return i3(this,n,BB(t,15),null)},vX(XWn,"AbstractListMultimap",1631),wAn(732,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()||this.e.Ob()},MWn.Pb=function(){var n;return this.e.Ob()||(n=BB(this.c.Pb(),42),this.b=n.cd(),this.a=BB(n.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},MWn.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},vX(XWn,"AbstractMapBasedMultimap/Itr",732),wAn(1099,732,QWn,Bm),MWn.sc=function(n,t){return t},vX(XWn,"AbstractMapBasedMultimap/1",1099),wAn(1100,1,{},a),MWn.Kb=function(n){return BB(n,14).Nc()},vX(XWn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),wAn(1101,732,QWn,Hm),MWn.sc=function(n,t){return new vT(n,t)},vX(XWn,"AbstractMapBasedMultimap/2",1101);var Nnt=bq(YWn,"Map");wAn(1967,1,JWn),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.vc().$b()},MWn.tc=function(n){return Mmn(this,n)},MWn._b=function(n){return!!FEn(this,n,!1)},MWn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=BB(t.Pb(),42).dd(),GC(n)===GC(e)||null!=n&&Nfn(n,e))return!0;return!1},MWn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!cL(n,83))return!1;if(i=BB(n,83),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=BB(e.Pb(),42),!this.tc(t))return!1;return!0},MWn.xc=function(n){return qC(FEn(this,n,!1))},MWn.Hb=function(){return Hun(this.vc())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return new Ib(this)},MWn.zc=function(n,t){throw Hp(new tk("Put not supported on this map"))},MWn.Ac=function(n){Tcn(this,n)},MWn.Bc=function(n){return qC(FEn(this,n,!0))},MWn.gc=function(){return this.vc().gc()},MWn.Ib=function(){return nTn(this)},MWn.Cc=function(){return new Ob(this)},vX(YWn,"AbstractMap",1967),wAn(1987,1967,JWn),MWn.bc=function(){return new ST(this)},MWn.vc=function(){return dz(this)},MWn.ec=function(){return this.g||(this.g=this.bc())},MWn.Cc=function(){return this.i||(this.i=new PT(this))},vX(XWn,"Maps/ViewCachingAbstractMap",1987),wAn(389,1987,JWn,pT),MWn.xc=function(n){return ktn(this,n)},MWn.Bc=function(n){return Zsn(this,n)},MWn.$b=function(){this.d==this.e.c?this.e.$b():Iq(new Oq(this))},MWn._b=function(n){return gfn(this.d,n)},MWn.Ec=function(){return new Xf(this)},MWn.Dc=function(){return this.Ec()},MWn.Fb=function(n){return this===n||Nfn(this.d,n)},MWn.Hb=function(){return nsn(this.d)},MWn.ec=function(){return this.e.ec()},MWn.gc=function(){return this.d.gc()},MWn.Ib=function(){return Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/AsMap",389);var xnt=bq(RWn,"Iterable");wAn(28,1,ZWn),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){throw Hp(new tk("Add not supported on this collection"))},MWn.Gc=function(n){return Frn(this,n)},MWn.$b=function(){TV(this)},MWn.Hc=function(n){return ywn(this,n,!1)},MWn.Ic=function(n){return oun(this,n)},MWn.dc=function(){return 0==this.gc()},MWn.Mc=function(n){return ywn(this,n,!0)},MWn.Pc=function(){return cz(this)},MWn.Qc=function(n){return Emn(this,n)},MWn.Ib=function(){return LMn(this)},vX(YWn,"AbstractCollection",28);var Dnt=bq(YWn,"Set");wAn(nVn,28,tVn),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return ign(this,n)},MWn.Hb=function(){return Hun(this)},vX(YWn,"AbstractSet",nVn),wAn(1970,nVn,tVn),vX(XWn,"Sets/ImprovedAbstractSet",1970),wAn(1971,1970,tVn),MWn.$b=function(){this.Rc().$b()},MWn.Hc=function(n){return idn(this,n)},MWn.dc=function(){return this.Rc().dc()},MWn.Mc=function(n){var t;return!!this.Hc(n)&&(t=BB(n,42),this.Rc().ec().Mc(t.cd()))},MWn.gc=function(){return this.Rc().gc()},vX(XWn,"Maps/EntrySet",1971),wAn(1097,1971,tVn,Xf),MWn.Hc=function(n){return wfn(this.a.d.vc(),n)},MWn.Kc=function(){return new Oq(this.a)},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!wfn(this.a.d.vc(),n)&&(t=BB(n,42),H5(this.a.e,t.cd()),!0)},MWn.Nc=function(){return RB(this.a.d.vc().Nc(),new Wf(this.a))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),wAn(1098,1,{},Wf),MWn.Kb=function(n){return i5(this.a,BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),wAn(730,1,QWn,Oq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){var n;return n=BB(this.b.Pb(),42),this.a=BB(n.dd(),14),i5(this.c,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Qb=function(){han(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),wAn(532,1970,tVn,ST),MWn.$b=function(){this.b.$b()},MWn.Hc=function(n){return this.b._b(n)},MWn.Jc=function(n){yX(n),this.b.wc(new vl(n))},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new ly(this.b.vc().Kc())},MWn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},MWn.gc=function(){return this.b.gc()},vX(XWn,"Maps/KeySet",532),wAn(318,532,tVn,HL),MWn.$b=function(){Iq(new eT(this,this.b.vc().Kc()))},MWn.Ic=function(n){return this.b.ec().Ic(n)},MWn.Fb=function(n){return this===n||Nfn(this.b.ec(),n)},MWn.Hb=function(){return nsn(this.b.ec())},MWn.Kc=function(){return new eT(this,this.b.vc().Kc())},MWn.Mc=function(n){var t,e;return e=0,(t=BB(this.b.Bc(n),14))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/KeySet",318),wAn(731,1,QWn,eT),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()},MWn.Pb=function(){return this.a=BB(this.c.Pb(),42),this.a.cd()},MWn.Qb=function(){var n;han(!!this.a),n=BB(this.a.dd(),14),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/KeySet/1",731),wAn(491,389,{83:1,161:1},ID),MWn.bc=function(){return this.Sc()},MWn.ec=function(){return this.Tc()},MWn.Sc=function(){return new nT(this.c,this.Uc())},MWn.Tc=function(){return this.b||(this.b=this.Sc())},MWn.Uc=function(){return BB(this.d,161)},vX(XWn,"AbstractMapBasedMultimap/SortedAsMap",491),wAn(542,491,eVn,CD),MWn.bc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.Sc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.ec=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Tc=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Uc=function(){return BB(BB(this.d,161),171)},vX(XWn,"AbstractMapBasedMultimap/NavigableAsMap",542),wAn(490,318,iVn,nT),MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/SortedKeySet",490),wAn(388,490,rVn,tT),vX(XWn,"AbstractMapBasedMultimap/NavigableKeySet",388),wAn(541,28,ZWn,W6),MWn.Fc=function(n){var t,e;return zbn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&jR(this)),t},MWn.Gc=function(n){var t,e,i;return!n.dc()&&(zbn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&jR(this)),t)},MWn.$b=function(){var n;zbn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,$G(this))},MWn.Hc=function(n){return zbn(this),this.d.Hc(n)},MWn.Ic=function(n){return zbn(this),this.d.Ic(n)},MWn.Fb=function(n){return n===this||(zbn(this),Nfn(this.d,n))},MWn.Hb=function(){return zbn(this),nsn(this.d)},MWn.Kc=function(){return zbn(this),new QB(this)},MWn.Mc=function(n){var t;return zbn(this),(t=this.d.Mc(n))&&(--this.f.d,$G(this)),t},MWn.gc=function(){return tO(this)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Ib=function(){return zbn(this),Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection",541);var Rnt=bq(YWn,"List");wAn(728,541,{20:1,28:1,14:1,15:1},sz),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Vc=function(n,t){var e;zbn(this),e=this.d.dc(),BB(this.d,15).Vc(n,t),++this.a.d,e&&jR(this)},MWn.Wc=function(n,t){var e,i,r;return!t.dc()&&(zbn(this),r=this.d.gc(),(e=BB(this.d,15).Wc(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&jR(this)),e)},MWn.Xb=function(n){return zbn(this),BB(this.d,15).Xb(n)},MWn.Xc=function(n){return zbn(this),BB(this.d,15).Xc(n)},MWn.Yc=function(){return zbn(this),new g$(this)},MWn.Zc=function(n){return zbn(this),new gQ(this,n)},MWn.$c=function(n){var t;return zbn(this),t=BB(this.d,15).$c(n),--this.a.d,$G(this),t},MWn._c=function(n,t){return zbn(this),BB(this.d,15)._c(n,t)},MWn.bd=function(n,t){return zbn(this),i3(this.a,this.e,BB(this.d,15).bd(n,t),this.b?this.b:this)},vX(XWn,"AbstractMapBasedMultimap/WrappedList",728),wAn(1096,728,{20:1,28:1,14:1,15:1,54:1},Ox),vX(XWn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),wAn(620,1,QWn,QB),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return MV(this),this.b.Ob()},MWn.Pb=function(){return MV(this),this.b.Pb()},MWn.Qb=function(){eN(this)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),wAn(729,620,cVn,g$,gQ),MWn.Qb=function(){eN(this)},MWn.Rb=function(n){var t;t=0==tO(this.a),(MV(this),BB(this.b,125)).Rb(n),++this.a.a.d,t&&jR(this.a)},MWn.Sb=function(){return(MV(this),BB(this.b,125)).Sb()},MWn.Tb=function(){return(MV(this),BB(this.b,125)).Tb()},MWn.Ub=function(){return(MV(this),BB(this.b,125)).Ub()},MWn.Vb=function(){return(MV(this),BB(this.b,125)).Vb()},MWn.Wb=function(n){(MV(this),BB(this.b,125)).Wb(n)},vX(XWn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),wAn(727,541,iVn,ND),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSortedSet",727),wAn(1095,727,rVn,AA),vX(XWn,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),wAn(1094,541,tVn,xD),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSet",1094),wAn(1103,1,{},u),MWn.Kb=function(n){return F6(BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/lambda$1$Type",1103),wAn(1102,1,{},Vf),MWn.Kb=function(n){return new vT(this.a,n)},vX(XWn,"AbstractMapBasedMultimap/lambda$2$Type",1102);var Knt,_nt,Fnt,Bnt,Hnt=bq(YWn,"Map/Entry");wAn(345,1,aVn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),wW(this.cd(),t.cd())&&wW(this.dd(),t.dd()))},MWn.Hb=function(){var n,t;return n=this.cd(),t=this.dd(),(null==n?0:nsn(n))^(null==t?0:nsn(t))},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(XWn,uVn,345),wAn(1988,28,ZWn),MWn.$b=function(){this.fd().$b()},MWn.Hc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),H0(this.fd(),t.cd(),t.dd()))},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),q0(this.fd(),t.cd(),t.dd()))},MWn.gc=function(){return this.fd().d},vX(XWn,"Multimaps/Entries",1988),wAn(733,1988,ZWn,Qf),MWn.Kc=function(){return this.a.kc()},MWn.fd=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"AbstractMultimap/Entries",733),wAn(734,733,tVn,qm),MWn.Nc=function(){return this.a.lc()},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"AbstractMultimap/EntrySet",734),wAn(735,28,ZWn,Yf),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return Csn(this.a,n)},MWn.Kc=function(){return this.a.nc()},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return this.a.oc()},vX(XWn,"AbstractMultimap/Values",735),wAn(1989,28,{835:1,20:1,28:1,14:1}),MWn.Jc=function(n){yX(n),EV(this).Jc(new pl(n))},MWn.Nc=function(){var n;return qTn(n=EV(this).Nc(),new y,64|1296&n.qd(),this.a.d)},MWn.Fc=function(n){return wk(),!0},MWn.Gc=function(n){return yX(this),yX(n),cL(n,543)?l2(BB(n,835)):!n.dc()&&fnn(this,n.Kc())},MWn.Hc=function(n){var t;return((t=BB(lfn(OQ(this.a),n),14))?t.gc():0)>0},MWn.Fb=function(n){return h$n(this,n)},MWn.Hb=function(){return nsn(EV(this))},MWn.dc=function(){return EV(this).dc()},MWn.Mc=function(n){return ECn(this,n,1)>0},MWn.Ib=function(){return Bbn(EV(this))},vX(XWn,"AbstractMultiset",1989),wAn(1991,1970,tVn),MWn.$b=function(){win(this.a.a)},MWn.Hc=function(n){var t;return!(!cL(n,492)||(t=BB(n,416),BB(t.a.dd(),14).gc()<=0||c1(this.a,t.a.cd())!=BB(t.a.dd(),14).gc()))},MWn.Mc=function(n){var t,e,i;return!(!cL(n,492)||(t=(e=BB(n,416)).a.cd(),0==(i=BB(e.a.dd(),14).gc())))&&TCn(this.a,t,i)},vX(XWn,"Multisets/EntrySet",1991),wAn(1109,1991,tVn,Jf),MWn.Kc=function(){return new wy(dz(OQ(this.a.a)).Kc())},MWn.gc=function(){return OQ(this.a.a).gc()},vX(XWn,"AbstractMultiset/EntrySet",1109),wAn(619,726,VWn),MWn.hc=function(){return this.gd()},MWn.jc=function(){return this.hd()},MWn.cc=function(n){return this.jd(n)},MWn.fc=function(n){return this.kd(n)},MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.hd=function(){return SQ(),SQ(),fet},MWn.Fb=function(n){return jsn(this,n)},MWn.jd=function(n){return BB(h6(this,n),21)},MWn.kd=function(n){return BB(Nhn(this,n),21)},MWn.mc=function(n){return SQ(),new Ak(BB(n,21))},MWn.pc=function(n,t){return new xD(this,n,BB(t,21))},vX(XWn,"AbstractSetMultimap",619),wAn(1657,619,VWn),MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.jc=function(){return CX(new dE(this.b))},MWn.hd=function(){return CX(new dE(this.b))},MWn.cc=function(n){return BB(BB(h6(this,n),21),84)},MWn.jd=function(n){return BB(BB(h6(this,n),21),84)},MWn.fc=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.kd=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.mc=function(n){return cL(n,271)?CX(BB(n,271)):(SQ(),new dN(BB(n,84)))},MWn.Zb=function(){return this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c))},MWn.pc=function(n,t){return cL(t,271)?new AA(this,n,BB(t,271)):new ND(this,n,BB(t,84))},vX(XWn,"AbstractSortedSetMultimap",1657),wAn(1658,1657,VWn),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.bc=function(){return cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)},vX(XWn,"AbstractSortedKeySortedSetMultimap",1658),wAn(2010,1,{1947:1}),MWn.Fb=function(n){return Ijn(this,n)},MWn.Hb=function(){return Hun(this.g||(this.g=new Zf(this)))},MWn.Ib=function(){return nTn(this.f||(this.f=new UL(this)))},vX(XWn,"AbstractTable",2010),wAn(665,nVn,tVn,Zf),MWn.$b=function(){dk()},MWn.Hc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WC(t.c.e,t.b)),83))&&wfn(e.vc(),new vT(WC(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.Kc=function(){return ZQ(this.a)},MWn.Mc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WC(t.c.e,t.b)),83))&&dfn(e.vc(),new vT(WC(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return P2(this.a)},vX(XWn,"AbstractTable/CellSet",665),wAn(1928,28,ZWn,nl),MWn.$b=function(){dk()},MWn.Hc=function(n){return hTn(this.a,n)},MWn.Kc=function(){return nY(this.a)},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return Y0(this.a)},vX(XWn,"AbstractTable/Values",1928),wAn(1632,1631,VWn),vX(XWn,"ArrayListMultimapGwtSerializationDependencies",1632),wAn(513,1632,VWn,ok,o1),MWn.hc=function(){return new J6(this.a)},MWn.a=0,vX(XWn,"ArrayListMultimap",513),wAn(664,2010,{664:1,1947:1,3:1},vOn),vX(XWn,"ArrayTable",664),wAn(1924,386,WWn,qL),MWn.Xb=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1",1924),wAn(1925,1,{},Gf),MWn.ld=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1methodref$getCell$Type",1925),wAn(2011,1,{682:1}),MWn.Fb=function(n){var t;return n===this||!!cL(n,468)&&(t=BB(n,682),wW(WC(this.c.e,this.b),WC(t.c.e,t.b))&&wW(WC(this.c.c,this.a),WC(t.c.c,t.a))&&wW(U6(this.c,this.b,this.a),U6(t.c,t.b,t.a)))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[WC(this.c.e,this.b),WC(this.c.c,this.a),U6(this.c,this.b,this.a)]))},MWn.Ib=function(){return"("+WC(this.c.e,this.b)+","+WC(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},vX(XWn,"Tables/AbstractCell",2011),wAn(468,2011,{468:1,682:1},gon),MWn.a=0,MWn.b=0,MWn.d=0,vX(XWn,"ArrayTable/2",468),wAn(1927,1,{},zf),MWn.ld=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/2methodref$getValue$Type",1927),wAn(1926,386,WWn,GL),MWn.Xb=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/3",1926),wAn(1979,1967,JWn),MWn.$b=function(){Iq(this.kc())},MWn.vc=function(){return new ml(this)},MWn.lc=function(){return new IV(this.kc(),this.gc())},vX(XWn,"Maps/IteratorBasedAbstractMap",1979),wAn(828,1979,JWn),MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return Yj(this.c,n)},MWn.kc=function(){return new zL(this,this.c.b.c.gc())},MWn.lc=function(){return yq(this.c.b.c.gc(),16,new Uf(this))},MWn.xc=function(n){var t;return(t=BB(UK(this.c,n),19))?this.nd(t.a):null},MWn.dc=function(){return this.c.b.c.dc()},MWn.ec=function(){return bz(this.c)},MWn.zc=function(n,t){var e;if(!(e=BB(UK(this.c,n),19)))throw Hp(new _y(this.md()+" "+n+" not in "+bz(this.c)));return this.od(e.a,t)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.b.c.gc()},vX(XWn,"ArrayTable/ArrayMap",828),wAn(1923,1,{},Uf),MWn.ld=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),wAn(1921,345,aVn,sT),MWn.cd=function(){return YL(this.a,this.b)},MWn.dd=function(){return this.a.nd(this.b)},MWn.ed=function(n){return this.a.od(this.b,n)},MWn.b=0,vX(XWn,"ArrayTable/ArrayMap/1",1921),wAn(1922,386,WWn,zL),MWn.Xb=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/2",1922),wAn(1920,828,JWn,cU),MWn.md=function(){return"Column"},MWn.nd=function(n){return U6(this.b,this.a,n)},MWn.od=function(n,t){return Sun(this.b,this.a,n,t)},MWn.a=0,vX(XWn,"ArrayTable/Row",1920),wAn(829,828,JWn,UL),MWn.nd=function(n){return new cU(this.a,n)},MWn.zc=function(n,t){return BB(t,83),gk()},MWn.od=function(n,t){return BB(t,83),pk()},MWn.md=function(){return"Row"},vX(XWn,"ArrayTable/RowMap",829),wAn(1120,1,fVn,hT),MWn.qd=function(){return-262&this.a.qd()},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.Nb(new cT(n,this.b))},MWn.sd=function(n){return this.a.sd(new rT(n,this.b))},vX(XWn,"CollectSpliterators/1",1120),wAn(1121,1,lVn,rT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$0$Type",1121),wAn(1122,1,lVn,cT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$1$Type",1122),wAn(1123,1,fVn,q2),MWn.qd=function(){return this.a},MWn.rd=function(){return this.d&&(this.b=T$(this.b,this.d.rd())),T$(this.b,0)},MWn.Nb=function(n){this.d&&(this.d.Nb(n),this.d=null),this.c.Nb(new iT(this.e,n)),this.b=0},MWn.sd=function(n){for(;;){if(this.d&&this.d.sd(n))return JC(this.b,bVn)&&(this.b=ibn(this.b,1)),!0;if(this.d=null,!this.c.sd(new aT(this,this.e)))return!1}},MWn.a=0,MWn.b=0,vX(XWn,"CollectSpliterators/1FlatMapSpliterator",1123),wAn(1124,1,lVn,aT),MWn.td=function(n){dK(this.a,this.b,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),wAn(1125,1,lVn,iT),MWn.td=function(n){oL(this.b,this.a,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),wAn(1117,1,fVn,wK),MWn.qd=function(){return 16464|this.b},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.xe(new oT(n,this.c))},MWn.sd=function(n){return this.a.ye(new uT(n,this.c))},MWn.b=0,vX(XWn,"CollectSpliterators/1WithCharacteristics",1117),wAn(1118,1,wVn,uT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),wAn(1119,1,wVn,oT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),wAn(245,1,dVn),MWn.wd=function(n){return this.vd(BB(n,245))},MWn.vd=function(n){var t;return n==(ty(),_nt)?1:n==(ey(),Knt)?-1:(nq(),0!=(t=Ncn(this.a,n.a))?t:cL(this,519)==cL(n,519)?0:cL(this,519)?1:-1)},MWn.zd=function(){return this.a},MWn.Fb=function(n){return xdn(this,n)},vX(XWn,"Cut",245),wAn(1761,245,dVn,Nk),MWn.vd=function(n){return n==this?0:1},MWn.xd=function(n){throw Hp(new hv)},MWn.yd=function(n){n.a+="+\u221e)"},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!1},MWn.Ib=function(){return"+\u221e"},vX(XWn,"Cut/AboveAll",1761),wAn(519,245,{245:1,519:1,3:1,35:1},iN),MWn.xd=function(n){uO((n.a+="(",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),93)},MWn.Hb=function(){return~nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<0},MWn.Ib=function(){return"/"+this.a+"\\"},vX(XWn,"Cut/AboveValue",519),wAn(1760,245,dVn,xk),MWn.vd=function(n){return n==this?0:-1},MWn.xd=function(n){n.a+="(-\u221e"},MWn.yd=function(n){throw Hp(new hv)},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!0},MWn.Ib=function(){return"-\u221e"},vX(XWn,"Cut/BelowAll",1760),wAn(1762,245,dVn,rN),MWn.xd=function(n){uO((n.a+="[",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),41)},MWn.Hb=function(){return nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<=0},MWn.Ib=function(){return"\\"+this.a+"/"},vX(XWn,"Cut/BelowValue",1762),wAn(537,1,pVn),MWn.Jc=function(n){e5(this,n)},MWn.Ib=function(){return Hln(BB(WQ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},vX(XWn,"FluentIterable",537),wAn(433,537,pVn,OO),MWn.Kc=function(){return new oz(ZL(this.a.Kc(),new h))},vX(XWn,"FluentIterable/2",433),wAn(1046,537,pVn,AO),MWn.Kc=function(){return NU(this)},vX(XWn,"FluentIterable/3",1046),wAn(708,386,WWn,WL),MWn.Xb=function(n){return this.a[n].Kc()},vX(XWn,"FluentIterable/3/1",708),wAn(1972,1,{}),MWn.Ib=function(){return Bbn(this.Bd().b)},vX(XWn,"ForwardingObject",1972),wAn(1973,1972,vVn),MWn.Bd=function(){return this.Cd()},MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return this.Cd(),oE()},MWn.Gc=function(n){return this.Cd(),sE()},MWn.$b=function(){this.Cd(),hE()},MWn.Hc=function(n){return this.Cd().Hc(n)},MWn.Ic=function(n){return this.Cd().Ic(n)},MWn.dc=function(){return this.Cd().b.dc()},MWn.Kc=function(){return this.Cd().Kc()},MWn.Mc=function(n){return this.Cd(),fE()},MWn.gc=function(){return this.Cd().b.gc()},MWn.Pc=function(){return this.Cd().Pc()},MWn.Qc=function(n){return this.Cd().Qc(n)},vX(XWn,"ForwardingCollection",1973),wAn(1980,28,mVn),MWn.Kc=function(){return this.Ed()},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Hc=function(n){return null!=n&&ywn(this,n,!1)},MWn.Dd=function(){switch(this.gc()){case 0:return WX(),WX(),Fnt;case 1:return WX(),new Pq(yX(this.Ed().Pb()));default:return new aU(this,this.Pc())}},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"ImmutableCollection",1980),wAn(712,1980,mVn,rv),MWn.Kc=function(){return L9(this.a.Kc())},MWn.Hc=function(n){return null!=n&&this.a.Hc(n)},MWn.Ic=function(n){return this.a.Ic(n)},MWn.dc=function(){return this.a.dc()},MWn.Ed=function(){return L9(this.a.Kc())},MWn.gc=function(){return this.a.gc()},MWn.Pc=function(){return this.a.Pc()},MWn.Qc=function(n){return this.a.Qc(n)},MWn.Ib=function(){return Bbn(this.a)},vX(XWn,"ForwardingImmutableCollection",712),wAn(152,1980,yVn),MWn.Kc=function(){return this.Ed()},MWn.Yc=function(){return this.Fd(0)},MWn.Zc=function(n){return this.Fd(n)},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.bd=function(n,t){return this.Gd(n,t)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return qAn(this,n)},MWn.Hb=function(){return Can(this)},MWn.Xc=function(n){return null==n?-1:Tmn(this,n)},MWn.Ed=function(){return this.Fd(0)},MWn.Fd=function(n){return ix(this,n)},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.Gd=function(n,t){return sfn(new s1(new CT(this),n,t))},vX(XWn,"ImmutableList",152),wAn(2006,152,yVn),MWn.Kc=function(){return L9(this.Hd().Kc())},MWn.bd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Hc=function(n){return null!=n&&this.Hd().Hc(n)},MWn.Ic=function(n){return this.Hd().Ic(n)},MWn.Fb=function(n){return Nfn(this.Hd(),n)},MWn.Xb=function(n){return WC(this,n)},MWn.Hb=function(){return nsn(this.Hd())},MWn.Xc=function(n){return this.Hd().Xc(n)},MWn.dc=function(){return this.Hd().dc()},MWn.Ed=function(){return L9(this.Hd().Kc())},MWn.gc=function(){return this.Hd().gc()},MWn.Gd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Pc=function(){return this.Hd().Qc(x8(Ant,HWn,1,this.Hd().gc(),5,1))},MWn.Qc=function(n){return this.Hd().Qc(n)},MWn.Ib=function(){return Bbn(this.Hd())},vX(XWn,"ForwardingImmutableList",2006),wAn(714,1,jVn),MWn.vc=function(){return lz(this)},MWn.wc=function(n){nan(this,n)},MWn.ec=function(){return bz(this)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.Cc=function(){return this.Ld()},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return null!=this.xc(n)},MWn.uc=function(n){return this.Ld().Hc(n)},MWn.Jd=function(){return new cv(this)},MWn.Kd=function(){return new av(this)},MWn.Fb=function(n){return $sn(this,n)},MWn.Hb=function(){return lz(this).Hb()},MWn.dc=function(){return 0==this.gc()},MWn.zc=function(n,t){return vk()},MWn.Bc=function(n){throw Hp(new pv)},MWn.Ib=function(){return fSn(this)},MWn.Ld=function(){return this.e?this.e:this.e=this.Kd()},MWn.c=null,MWn.d=null,MWn.e=null,vX(XWn,"ImmutableMap",714),wAn(715,714,jVn),MWn._b=function(n){return Yj(this,n)},MWn.uc=function(n){return _T(this.b,n)},MWn.Id=function(){return hfn(new el(this))},MWn.Jd=function(){return hfn(iV(this.b))},MWn.Kd=function(){return s_(),new rv(tV(this.b))},MWn.Fb=function(n){return BT(this.b,n)},MWn.xc=function(n){return UK(this,n)},MWn.Hb=function(){return nsn(this.b.c)},MWn.dc=function(){return this.b.c.dc()},MWn.gc=function(){return this.b.c.gc()},MWn.Ib=function(){return Bbn(this.b.c)},vX(XWn,"ForwardingImmutableMap",715),wAn(1974,1973,EVn),MWn.Bd=function(){return this.Md()},MWn.Cd=function(){return this.Md()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return n===this||this.Md().Fb(n)},MWn.Hb=function(){return this.Md().Hb()},vX(XWn,"ForwardingSet",1974),wAn(1069,1974,EVn,el),MWn.Bd=function(){return eV(this.a.b)},MWn.Cd=function(){return eV(this.a.b)},MWn.Hc=function(n){if(cL(n,42)&&null==BB(n,42).cd())return!1;try{return KT(eV(this.a.b),n)}catch(t){if(cL(t=lun(t),205))return!1;throw Hp(t)}},MWn.Md=function(){return eV(this.a.b)},MWn.Qc=function(n){var t;return t=CY(eV(this.a.b),n),eV(this.a.b).b.gc()<t.length&&$X(t,eV(this.a.b).b.gc(),null),t},vX(XWn,"ForwardingImmutableMap/1",1069),wAn(1981,1980,TVn),MWn.Kc=function(){return this.Ed()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"ImmutableSet",1981),wAn(703,1981,TVn),MWn.Kc=function(){return L9(new qb(this.a.b.Kc()))},MWn.Hc=function(n){return null!=n&&xT(this.a,n)},MWn.Ic=function(n){return DT(this.a,n)},MWn.Hb=function(){return nsn(this.a.b)},MWn.dc=function(){return this.a.b.dc()},MWn.Ed=function(){return L9(new qb(this.a.b.Kc()))},MWn.gc=function(){return this.a.b.gc()},MWn.Pc=function(){return this.a.b.Pc()},MWn.Qc=function(n){return RT(this.a,n)},MWn.Ib=function(){return Bbn(this.a.b)},vX(XWn,"ForwardingImmutableSet",703),wAn(1975,1974,MVn),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Nc=function(){return new wS(this)},vX(XWn,"ForwardingSortedSet",1975),wAn(533,1979,jVn,Avn),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new p$(this.d||(this.d=new il(this)))},MWn.$b=function(){d5(this)},MWn._b=function(n){return!!Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))},MWn.uc=function(n){return Ltn(this,n)},MWn.kc=function(){return new VL(this,this)},MWn.wc=function(n){BJ(this,n)},MWn.xc=function(n){return sen(this,n)},MWn.ec=function(){return new v$(this)},MWn.zc=function(n,t){return wKn(this,n,t)},MWn.Bc=function(n){var t;return(t=Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this,t),t.e=null,t.c=null,t.i):null},MWn.gc=function(){return this.i},MWn.pd=function(){return new p$(this.d||(this.d=new il(this)))},MWn.f=0,MWn.g=0,MWn.i=0,vX(XWn,"HashBiMap",533),wAn(534,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return l3(this)},MWn.Pb=function(){var n;if(!l3(this))throw Hp(new yv);return n=this.c,this.c=n.c,this.f=n,--this.d,this.Nd(n)},MWn.Qb=function(){if(this.e.g!=this.b)throw Hp(new vv);han(!!this.f),LLn(this.e,this.f),this.b=this.e.g,this.f=null},MWn.b=0,MWn.d=0,MWn.f=null,vX(XWn,"HashBiMap/Itr",534),wAn(1011,534,QWn,VL),MWn.Nd=function(n){return new bT(this,n)},vX(XWn,"HashBiMap/1",1011),wAn(1012,345,aVn,bT),MWn.cd=function(){return this.a.g},MWn.dd=function(){return this.a.i},MWn.ed=function(n){var t,e,i;return e=this.a.i,(i=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.f&&(GC(n)===GC(e)||null!=n&&Nfn(n,e))?n:(yun(!Zrn(this.b.a,n,i),n),LLn(this.b.a,this.a),t=new qW(this.a.g,this.a.a,n,i),YIn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},vX(XWn,"HashBiMap/1/MapEntry",1012),wAn(238,345,{345:1,238:1,3:1,42:1},vT),MWn.cd=function(){return this.g},MWn.dd=function(){return this.i},MWn.ed=function(n){throw Hp(new pv)},vX(XWn,"ImmutableEntry",238),wAn(317,238,{345:1,317:1,238:1,3:1,42:1},qW),MWn.a=0,MWn.f=0;var qnt,Gnt=vX(XWn,"HashBiMap/BiEntry",317);wAn(610,1979,jVn,il),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new v$(this.a)},MWn.$b=function(){d5(this.a)},MWn._b=function(n){return Ltn(this.a,n)},MWn.kc=function(){return new QL(this,this.a)},MWn.wc=function(n){yX(n),BJ(this.a,new rl(n))},MWn.xc=function(n){return Uin(this,n)},MWn.ec=function(){return new p$(this)},MWn.zc=function(n,t){return I_n(this.a,n,t,!1)},MWn.Bc=function(n){var t;return(t=Zrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this.a,t),t.e=null,t.c=null,t.g):null},MWn.gc=function(){return this.a.i},MWn.pd=function(){return new v$(this.a)},vX(XWn,"HashBiMap/Inverse",610),wAn(1008,534,QWn,QL),MWn.Nd=function(n){return new wT(this,n)},vX(XWn,"HashBiMap/Inverse/1",1008),wAn(1009,345,aVn,wT),MWn.cd=function(){return this.a.i},MWn.dd=function(){return this.a.g},MWn.ed=function(n){var t,e,i;return i=this.a.g,(t=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.a&&(GC(n)===GC(i)||null!=n&&Nfn(n,i))?n:(yun(!Jrn(this.b.a.a,n,t),n),LLn(this.b.a.a,this.a),e=new qW(n,t,this.a.i,this.a.f),this.a=e,YIn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},vX(XWn,"HashBiMap/Inverse/1/InverseEntry",1009),wAn(611,532,tVn,p$),MWn.Kc=function(){return new uy(this.a.a)},MWn.Mc=function(n){var t;return!!(t=Zrn(this.a.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a.a,t),!0)},vX(XWn,"HashBiMap/Inverse/InverseKeySet",611),wAn(1007,534,QWn,uy),MWn.Nd=function(n){return n.i},vX(XWn,"HashBiMap/Inverse/InverseKeySet/1",1007),wAn(1010,1,{},rl),MWn.Od=function(n,t){ev(this.a,n,t)},vX(XWn,"HashBiMap/Inverse/lambda$0$Type",1010),wAn(609,532,tVn,v$),MWn.Kc=function(){return new oy(this.a)},MWn.Mc=function(n){var t;return!!(t=Jrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a,t),t.e=null,t.c=null,!0)},vX(XWn,"HashBiMap/KeySet",609),wAn(1006,534,QWn,oy),MWn.Nd=function(n){return n.g},vX(XWn,"HashBiMap/KeySet/1",1006),wAn(1093,619,VWn),vX(XWn,"HashMultimapGwtSerializationDependencies",1093),wAn(265,1093,VWn,pJ),MWn.hc=function(){return new bE(etn(this.a))},MWn.gd=function(){return new bE(etn(this.a))},MWn.a=2,vX(XWn,"HashMultimap",265),wAn(1999,152,yVn),MWn.Hc=function(n){return this.Pd().Hc(n)},MWn.dc=function(){return this.Pd().dc()},MWn.gc=function(){return this.Pd().gc()},vX(XWn,"ImmutableAsList",1999),wAn(1931,715,jVn),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"ImmutableBiMap",1931),wAn(1977,1,{}),vX(XWn,"ImmutableCollection/Builder",1977),wAn(1022,703,TVn,sy),vX(XWn,"ImmutableEnumSet",1022),wAn(969,386,WWn,bK),MWn.Xb=function(n){return this.a.Xb(n)},vX(XWn,"ImmutableList/1",969),wAn(968,1977,{},sR),vX(XWn,"ImmutableList/Builder",968),wAn(614,198,UWn,cl),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},vX(XWn,"ImmutableMap/1",614),wAn(1041,1,{},o),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"ImmutableMap/2methodref$getKey$Type",1041),wAn(1040,1,{},hR),vX(XWn,"ImmutableMap/Builder",1040),wAn(2e3,1981,TVn),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Dd=function(){return new uv(this)},MWn.Jc=function(n){var t,e;for(yX(n),e=this.gc(),t=0;t<e;t++)n.td(BB(wz(lz(this.a)).Xb(t),42).cd())},MWn.Ed=function(){var n;return(n=this.c,n||(this.c=new uv(this))).Ed()},MWn.Nc=function(){return yq(this.gc(),1296,new ul(this))},vX(XWn,"IndexedImmutableSet",2e3),wAn(1180,2e3,TVn,cv),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Hc=function(n){return this.a._b(n)},MWn.Jc=function(n){yX(n),nan(this.a,new al(n))},MWn.Ed=function(){return new cl(lz(this.a).Ed())},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new o)},vX(XWn,"ImmutableMapKeySet",1180),wAn(1181,1,{},al),MWn.Od=function(n,t){s_(),this.a.td(n)},vX(XWn,"ImmutableMapKeySet/lambda$0$Type",1181),wAn(1178,1980,mVn,av),MWn.Kc=function(){return new KH(this)},MWn.Hc=function(n){return null!=n&&Pjn(new KH(this),n)},MWn.Ed=function(){return new KH(this)},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new s)},vX(XWn,"ImmutableMapValues",1178),wAn(1179,1,{},s),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"ImmutableMapValues/0methodref$getValue$Type",1179),wAn(626,198,UWn,KH),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},vX(XWn,"ImmutableMapValues/1",626),wAn(1182,1,{},ul),MWn.ld=function(n){return HU(this.a,n)},vX(XWn,"IndexedImmutableSet/0methodref$get$Type",1182),wAn(752,1999,yVn,uv),MWn.Pd=function(){return this.a},MWn.Xb=function(n){return HU(this.a,n)},MWn.gc=function(){return this.a.a.gc()},vX(XWn,"IndexedImmutableSet/1",752),wAn(44,1,{},h),MWn.Kb=function(n){return BB(n,20).Kc()},MWn.Fb=function(n){return this===n},vX(XWn,"Iterables/10",44),wAn(1042,537,pVn,_H),MWn.Jc=function(n){yX(n),this.b.Jc(new dT(this.a,n))},MWn.Kc=function(){return qA(this)},vX(XWn,"Iterables/4",1042),wAn(1043,1,lVn,dT),MWn.td=function(n){TS(this.b,this.a,n)},vX(XWn,"Iterables/4/lambda$0$Type",1043),wAn(1044,537,pVn,FH),MWn.Jc=function(n){yX(n),e5(this.a,new fT(n,this.b))},MWn.Kc=function(){return ZL(new AL(this.a),this.b)},vX(XWn,"Iterables/5",1044),wAn(1045,1,lVn,fT),MWn.td=function(n){this.a.td(yA(n))},vX(XWn,"Iterables/5/lambda$0$Type",1045),wAn(1071,198,UWn,ol),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return this.a.Pb()},vX(XWn,"Iterators/1",1071),wAn(1072,699,UWn,lT),MWn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},vX(XWn,"Iterators/5",1072),wAn(487,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.Qd(this.b.Pb())},MWn.Qb=function(){this.b.Qb()},vX(XWn,"TransformedIterator",487),wAn(1073,487,QWn,nN),MWn.Qd=function(n){return this.a.Kb(n)},vX(XWn,"Iterators/6",1073),wAn(717,198,UWn,sl),MWn.Ob=function(){return!this.a},MWn.Pb=function(){if(this.a)throw Hp(new yv);return this.a=!0,this.b},MWn.a=!1,vX(XWn,"Iterators/9",717),wAn(1070,386,WWn,fG),MWn.Xb=function(n){return this.a[this.b+n]},MWn.b=0,vX(XWn,"Iterators/ArrayItr",1070),wAn(39,1,{39:1,47:1},oz),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return dAn(this)},MWn.Pb=function(){return U5(this)},MWn.Qb=function(){han(!!this.c),this.c.Qb(),this.c=null},vX(XWn,"Iterators/ConcatenatedIterator",39),wAn(22,1,{3:1,35:1,22:1}),MWn.wd=function(n){return Py(this,BB(n,22))},MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return dx(this)},MWn.g=0;var znt,Unt=vX(RWn,"Enum",22);wAn(538,22,{538:1,3:1,35:1,22:1,47:1},cN),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Qb=function(){han(!1)};var Xnt,Wnt=Ben(XWn,"Iterators/EmptyModifiableIterator",538,Unt,oX,rx);wAn(1834,619,VWn),vX(XWn,"LinkedHashMultimapGwtSerializationDependencies",1834),wAn(1835,1834,VWn,Thn),MWn.hc=function(){return new LN(etn(this.b))},MWn.$b=function(){win(this),iv(this.a,this.a)},MWn.gd=function(){return new LN(etn(this.b))},MWn.ic=function(n){return new Tsn(this,n,this.b)},MWn.kc=function(){return new tN(this)},MWn.lc=function(){return new w1(BB(this.g||(this.g=new qm(this)),21),17)},MWn.ec=function(){return this.i||(this.i=new HL(this,this.c))},MWn.nc=function(){return new by(new tN(this))},MWn.oc=function(){return RB(new w1(BB(this.g||(this.g=new qm(this)),21),17),new f)},MWn.b=2,vX(XWn,"LinkedHashMultimap",1835),wAn(1838,1,{},f),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"LinkedHashMultimap/0methodref$getValue$Type",1838),wAn(824,1,QWn,tN),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return vtn(this)},MWn.Ob=function(){return this.a!=this.b.a},MWn.Qb=function(){han(!!this.c),q0(this.b,this.c.g,this.c.i),this.c=null},vX(XWn,"LinkedHashMultimap/1",824),wAn(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},HW),MWn.Rd=function(){return this.f},MWn.Sd=function(n){this.c=n},MWn.Td=function(n){this.f=n},MWn.d=0;var Vnt,Qnt=vX(XWn,"LinkedHashMultimap/ValueEntry",330);wAn(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Tsn),MWn.Fc=function(n){var t,e,i,r,c;for(t=(c=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&wW(e.i,n))return!1;return i=new HW(this.c,n,c,r),kk(this.d,i),i.f=this,this.d=i,iv(this.g.a.b,i),iv(i,this.g.a),this.b[t]=i,++this.f,++this.e,yjn(this),!0},MWn.$b=function(){var n,t;for(yS(this.b,null),this.f=0,n=this.a;n!=this;n=n.Rd())iv((t=BB(n,330)).b,t.e);this.a=this,this.d=this,++this.e},MWn.Hc=function(n){var t,e;for(e=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&wW(t.i,n))return!0;return!1},MWn.Jc=function(n){var t;for(yX(n),t=this.a;t!=this;t=t.Rd())n.td(BB(t,330).i)},MWn.Rd=function(){return this.a},MWn.Kc=function(){return new sW(this)},MWn.Mc=function(n){return kAn(this,n)},MWn.Sd=function(n){this.d=n},MWn.Td=function(n){this.a=n},MWn.gc=function(){return this.f},MWn.e=0,MWn.f=0,vX(XWn,"LinkedHashMultimap/ValueSet",1836),wAn(1837,1,QWn,sW),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return wG(this),this.b!=this.c},MWn.Pb=function(){var n,t;if(wG(this),this.b==this.c)throw Hp(new yv);return t=(n=BB(this.b,330)).i,this.d=n,this.b=n.f,t},MWn.Qb=function(){wG(this),han(!!this.d),kAn(this.c,this.d.i),this.a=this.c.e,this.d=null},MWn.a=0,vX(XWn,"LinkedHashMultimap/ValueSet/1",1837),wAn(766,1986,VWn,PO),MWn.Zb=function(){return this.f||(this.f=new rS(this))},MWn.Fb=function(n){return jsn(this,n)},MWn.cc=function(n){return new mT(this,n)},MWn.fc=function(n){return J3(this,n)},MWn.$b=function(){cX(this)},MWn._b=function(n){return HT(this,n)},MWn.ac=function(){return new rS(this)},MWn.bc=function(){return new yl(this)},MWn.qc=function(n){return new mT(this,n)},MWn.dc=function(){return!this.a},MWn.rc=function(n){return J3(this,n)},MWn.gc=function(){return this.d},MWn.c=0,MWn.d=0,vX(XWn,"LinkedListMultimap",766),wAn(52,28,LVn),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new tk("Add not supported on this list"))},MWn.Fc=function(n){return this.Vc(this.gc(),n),!0},MWn.Wc=function(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.Vc(n++,i),e=!0;return e},MWn.$b=function(){this.Ud(0,this.gc())},MWn.Fb=function(n){return NAn(this,n)},MWn.Hb=function(){return Fon(this)},MWn.Xc=function(n){return bin(this,n)},MWn.Kc=function(){return new Sb(this)},MWn.Yc=function(){return this.Zc(0)},MWn.Zc=function(n){return new M2(this,n)},MWn.$c=function(n){throw Hp(new tk("Remove not supported on this list"))},MWn.Ud=function(n,t){var e,i;for(i=this.Zc(n),e=n;e<t;++e)i.Pb(),i.Qb()},MWn._c=function(n,t){throw Hp(new tk("Set not supported on this list"))},MWn.bd=function(n,t){return new s1(this,n,t)},MWn.j=0,vX(YWn,"AbstractList",52),wAn(1964,52,LVn),MWn.Vc=function(n,t){Kx(this,n,t)},MWn.Wc=function(n,t){return Asn(this,n,t)},MWn.Xb=function(n){return Dpn(this,n)},MWn.Kc=function(){return this.Zc(0)},MWn.$c=function(n){return tkn(this,n)},MWn._c=function(n,t){var e,i;e=this.Zc(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't set element "+n)):Hp(r)}},vX(YWn,"AbstractSequentialList",1964),wAn(636,1964,LVn,mT),MWn.Zc=function(n){return vN(this,n)},MWn.gc=function(){var n;return(n=BB(RX(this.a.b,this.b),283))?n.a:0},vX(XWn,"LinkedListMultimap/1",636),wAn(1297,1970,tVn,yl),MWn.Hc=function(n){return HT(this.a,n)},MWn.Kc=function(){return new vrn(this.a)},MWn.Mc=function(n){return!J3(this.a,n).a.dc()},MWn.gc=function(){return NT(this.a.b)},vX(XWn,"LinkedListMultimap/1KeySetImpl",1297),wAn(1296,1,QWn,vrn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return bG(this),!!this.c},MWn.Pb=function(){bG(this),oN(this.c),this.a=this.c,TU(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!TU(this.d,this.c.a));return this.a.a},MWn.Qb=function(){bG(this),han(!!this.a),Iq(new I7(this.e,this.a.a)),this.a=null,this.b=this.e.c},MWn.b=0,vX(XWn,"LinkedListMultimap/DistinctKeyIterator",1296),wAn(283,1,{283:1},sY),MWn.a=0,vX(XWn,"LinkedListMultimap/KeyList",283),wAn(1295,345,aVn,yT),MWn.cd=function(){return this.a},MWn.dd=function(){return this.f},MWn.ed=function(n){var t;return t=this.f,this.f=n,t},vX(XWn,"LinkedListMultimap/Node",1295),wAn(560,1,cVn,I7,KPn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.e=yKn(this.f,this.b,n,this.c),++this.d,this.a=null},MWn.Ob=function(){return!!this.c},MWn.Sb=function(){return!!this.e},MWn.Pb=function(){return EZ(this)},MWn.Tb=function(){return this.d},MWn.Ub=function(){return TZ(this)},MWn.Vb=function(){return this.d-1},MWn.Qb=function(){han(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,ZIn(this.f,this.a),this.a=null},MWn.Wb=function(n){uN(!!this.a),this.a.f=n},MWn.d=0,vX(XWn,"LinkedListMultimap/ValueForKeyIterator",560),wAn(1018,52,LVn),MWn.Vc=function(n,t){this.a.Vc(n,t)},MWn.Wc=function(n,t){return this.a.Wc(n,t)},MWn.Hc=function(n){return this.a.Hc(n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.$c=function(n){return this.a.$c(n)},MWn._c=function(n,t){return this.a._c(n,t)},MWn.gc=function(){return this.a.gc()},vX(XWn,"Lists/AbstractListWrapper",1018),wAn(1019,1018,xVn),vX(XWn,"Lists/RandomAccessListWrapper",1019),wAn(1021,1019,xVn,CT),MWn.Zc=function(n){return this.a.Zc(n)},vX(XWn,"Lists/1",1021),wAn(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},IT),MWn.Vc=function(n,t){this.a.Vc(pU(this,n),t)},MWn.$b=function(){this.a.$b()},MWn.Xb=function(n){return this.a.Xb(LX(this,n))},MWn.Kc=function(){return W1(this,0)},MWn.Zc=function(n){return W1(this,n)},MWn.$c=function(n){return this.a.$c(LX(this,n))},MWn.Ud=function(n,t){(d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))).$b()},MWn._c=function(n,t){return this.a._c(LX(this,n),t)},MWn.gc=function(){return this.a.gc()},MWn.bd=function(n,t){return d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))},vX(XWn,"Lists/ReverseList",131),wAn(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},fy),vX(XWn,"Lists/RandomAccessReverseList",280),wAn(1020,1,cVn,kT),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},MWn.Ob=function(){return this.c.Sb()},MWn.Sb=function(){return this.c.Ob()},MWn.Pb=function(){return w5(this)},MWn.Tb=function(){return pU(this.b,this.c.Tb())},MWn.Ub=function(){if(!this.c.Ob())throw Hp(new yv);return this.a=!0,this.c.Pb()},MWn.Vb=function(){return pU(this.b,this.c.Tb())-1},MWn.Qb=function(){han(this.a),this.c.Qb(),this.a=!1},MWn.Wb=function(n){uN(this.a),this.c.Wb(n)},MWn.a=!1,vX(XWn,"Lists/ReverseList/1",1020),wAn(432,487,QWn,ly),MWn.Qd=function(n){return cS(n)},vX(XWn,"Maps/1",432),wAn(698,487,QWn,by),MWn.Qd=function(n){return BB(n,42).dd()},vX(XWn,"Maps/2",698),wAn(962,487,QWn,pN),MWn.Qd=function(n){return new vT(n,_O(this.a,n))},vX(XWn,"Maps/3",962),wAn(959,1971,tVn,ml),MWn.Jc=function(n){xv(this.a,n)},MWn.Kc=function(){return this.a.kc()},MWn.Rc=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"Maps/IteratorBasedAbstractMap/1",959),wAn(960,1,{},vl),MWn.Od=function(n,t){this.a.td(n)},vX(XWn,"Maps/KeySet/lambda$0$Type",960),wAn(958,28,ZWn,PT),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Jc=function(n){yX(n),this.a.wc(new ll(n))},MWn.dc=function(){return this.a.dc()},MWn.Kc=function(){return new by(this.a.vc().Kc())},MWn.Mc=function(n){var t,e;try{return ywn(this,n,!0)}catch(i){if(cL(i=lun(i),41)){for(e=this.a.vc().Kc();e.Ob();)if(wW(n,(t=BB(e.Pb(),42)).dd()))return this.a.Bc(t.cd()),!0;return!1}throw Hp(i)}},MWn.gc=function(){return this.a.gc()},vX(XWn,"Maps/Values",958),wAn(961,1,{},ll),MWn.Od=function(n,t){this.a.td(t)},vX(XWn,"Maps/Values/lambda$0$Type",961),wAn(736,1987,JWn,rS),MWn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},MWn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},MWn.$b=function(){this.a.$b()},MWn._b=function(n){return this.a._b(n)},MWn.Ec=function(){return new fl(this)},MWn.Dc=function(){return this.Ec()},MWn.dc=function(){return this.a.dc()},MWn.ec=function(){return this.a.ec()},MWn.gc=function(){return this.a.ec().gc()},vX(XWn,"Multimaps/AsMap",736),wAn(1104,1971,tVn,fl),MWn.Kc=function(){return nL(this.a.a.ec(),new bl(this))},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!idn(this,n)&&(t=BB(n,42),jk(this.a,t.cd()),!0)},vX(XWn,"Multimaps/AsMap/EntrySet",1104),wAn(1108,1,{},bl),MWn.Kb=function(n){return _O(this,n)},MWn.Fb=function(n){return this===n},vX(XWn,"Multimaps/AsMap/EntrySet/1",1108),wAn(543,1989,{543:1,835:1,20:1,28:1,14:1},wl),MWn.$b=function(){win(this.a)},MWn.Hc=function(n){return Wj(this.a,n)},MWn.Jc=function(n){yX(n),e5(MX(this.a),new gl(n))},MWn.Kc=function(){return new ly(MX(this.a).a.kc())},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return RB(MX(this.a).Nc(),new l)},vX(XWn,"Multimaps/Keys",543),wAn(1106,1,{},l),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"Multimaps/Keys/0methodref$getKey$Type",1106),wAn(1105,487,QWn,wy),MWn.Qd=function(n){return new dl(BB(n,42))},vX(XWn,"Multimaps/Keys/1",1105),wAn(1990,1,{416:1}),MWn.Fb=function(n){var t;return!!cL(n,492)&&(t=BB(n,416),BB(this.a.dd(),14).gc()==BB(t.a.dd(),14).gc()&&wW(this.a.cd(),t.a.cd()))},MWn.Hb=function(){var n;return(null==(n=this.a.cd())?0:nsn(n))^BB(this.a.dd(),14).gc()},MWn.Ib=function(){var n,t;return t=kN(this.a.cd()),1==(n=BB(this.a.dd(),14).gc())?t:t+" x "+n},vX(XWn,"Multisets/AbstractEntry",1990),wAn(492,1990,{492:1,416:1},dl),vX(XWn,"Multimaps/Keys/1/1",492),wAn(1107,1,lVn,gl),MWn.td=function(n){this.a.td(BB(n,42).cd())},vX(XWn,"Multimaps/Keys/lambda$1$Type",1107),wAn(1110,1,lVn,b),MWn.td=function(n){Cq(BB(n,416))},vX(XWn,"Multiset/lambda$0$Type",1110),wAn(737,1,lVn,pl),MWn.td=function(n){Ctn(this.a,BB(n,416))},vX(XWn,"Multiset/lambda$1$Type",737),wAn(1111,1,{},m),vX(XWn,"Multisets/0methodref$add$Type",1111),wAn(738,1,{},y),MWn.Kb=function(n){return s3(BB(n,416))},vX(XWn,"Multisets/lambda$3$Type",738),wAn(2008,1,KWn),vX(XWn,"RangeGwtSerializationDependencies",2008),wAn(514,2008,{169:1,514:1,3:1,45:1},svn),MWn.Lb=function(n){return Mz(this,BB(n,35))},MWn.Mb=function(n){return Mz(this,BB(n,35))},MWn.Fb=function(n){var t;return!!cL(n,514)&&(t=BB(n,514),xdn(this.a,t.a)&&xdn(this.b,t.b))},MWn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},MWn.Ib=function(){return B3(this.a,this.b)},vX(XWn,"Range",514),wAn(778,1999,yVn,aU),MWn.Zc=function(n){return ix(this.b,n)},MWn.Pd=function(){return this.a},MWn.Xb=function(n){return WC(this.b,n)},MWn.Fd=function(n){return ix(this.b,n)},vX(XWn,"RegularImmutableAsList",778),wAn(646,2006,yVn,SY),MWn.Hd=function(){return this.a},vX(XWn,"RegularImmutableList",646),wAn(616,715,jVn,hy),vX(XWn,"RegularImmutableMap",616),wAn(716,703,TVn,vS),vX(XWn,"RegularImmutableSet",716),wAn(1976,nVn,tVn),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"Sets/SetView",1976),wAn(963,1976,tVn,ET),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Hc=function(n){return IG(this.a,n)&&this.b.Hc(n)},MWn.Ic=function(n){return oun(this.a,n)&&this.b.Ic(n)},MWn.dc=function(){return Kpn(this.b,this.a)},MWn.Lc=function(){return AV(new Rq(null,new w1(this.a,1)),new jl(this.b))},MWn.gc=function(){return Ian(this)},MWn.Oc=function(){return AV(new Rq(null,new w1(this.a,1)),new kl(this.b))},vX(XWn,"Sets/2",963),wAn(700,699,UWn,SV),MWn.Yb=function(){for(var n;k$(this.a);)if(n=u4(this.a),this.c.Hc(n))return n;return this.e=2,null},vX(XWn,"Sets/2/1",700),wAn(964,1,DVn,kl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/4methodref$contains$Type",964),wAn(965,1,DVn,jl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/5methodref$contains$Type",965),wAn(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},bJ),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Jc=function(n){this.a.Jc(n)},MWn.Lc=function(){return this.a.Lc()},MWn.Oc=function(){return this.a.Oc()},vX(XWn,"Sets/UnmodifiableNavigableSet",607),wAn(1932,1931,jVn,GW),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"SingletonImmutableBiMap",1932),wAn(647,2006,yVn,Pq),MWn.Hd=function(){return this.a},vX(XWn,"SingletonImmutableList",647),wAn(350,1981,TVn,yk),MWn.Kc=function(){return new sl(this.a)},MWn.Hc=function(n){return Nfn(this.a,n)},MWn.Ed=function(){return new sl(this.a)},MWn.gc=function(){return 1},vX(XWn,"SingletonImmutableSet",350),wAn(1115,1,{},k),MWn.Kb=function(n){return BB(n,164)},vX(XWn,"Streams/lambda$0$Type",1115),wAn(1116,1,RVn,El),MWn.Vd=function(){B5(this.a)},vX(XWn,"Streams/lambda$1$Type",1116),wAn(1659,1658,VWn,pY),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.ac=function(){return cL(this.c,171)?new CD(this,BB(this.c,171)):cL(this.c,161)?new ID(this,BB(this.c,161)):new pT(this,this.c)},MWn.ic=function(n){return null==n&&this.a.ue(n,n),new dE(this.b)},vX(XWn,"TreeMultimap",1659),wAn(78,1,{3:1,78:1}),MWn.Wd=function(n){return new Error(n)},MWn.Xd=function(){return this.e},MWn.Yd=function(){return _wn($V(LU((null==this.k&&(this.k=x8(Jnt,sVn,78,0,0,1)),this.k)),new x),new on)},MWn.Zd=function(){return this.f},MWn.$d=function(){return this.g},MWn._d=function(){yy(this,b2(this.Wd(IY(this,this.g)))),ov(this)},MWn.Ib=function(){return IY(this,this.$d())},MWn.e=FVn,MWn.i=!1,MWn.n=!0;var Ynt,Jnt=vX(RWn,"Throwable",78);wAn(102,78,{3:1,102:1,78:1}),vX(RWn,"Exception",102),wAn(60,102,BVn,sv,dy),vX(RWn,"RuntimeException",60),wAn(598,60,BVn),vX(RWn,"JsException",598),wAn(863,598,BVn),vX(HVn,"JavaScriptExceptionBase",863),wAn(477,863,{477:1,3:1,102:1,60:1,78:1},jhn),MWn.$d=function(){return pEn(this),this.c},MWn.ae=function(){return GC(this.b)===GC(Ynt)?null:this.b},vX(GVn,"JavaScriptException",477);var Znt,ntt=vX(GVn,"JavaScriptObject$",0);wAn(1948,1,{}),vX(GVn,"Scheduler",1948);var ttt,ett,itt,rtt,ctt=0,att=0,utt=-1;wAn(890,1948,{},j),vX(HVn,"SchedulerImpl",890),wAn(1960,1,{}),vX(HVn,"StackTraceCreator/Collector",1960),wAn(864,1960,{},E),MWn.be=function(n){var t={},e=[];n[UVn]=e;for(var i=arguments.callee.caller;i;){var r=(PY(),i.name||(i.name=Ven(i.toString())));e.push(r);var c,a,u=":"+r,o=t[u];if(o)for(c=0,a=o.length;c<a;c++)if(o[c]===i)return;(o||(t[u]=[])).push(i),i=i.caller}},MWn.ce=function(n){var t,e,i,r;for(PY(),e=(i=n&&n[UVn]?n[UVn]:[]).length,r=x8(Ftt,sVn,310,e,0,1),t=0;t<e;t++)r[t]=new PV(i[t],null,-1);return r},vX(HVn,"StackTraceCreator/CollectorLegacy",864),wAn(1961,1960,{}),MWn.be=function(n){},MWn.de=function(n,t,e,i){return new PV(t,n+"@"+i,e<0?-1:e)},MWn.ce=function(n){var t,e,i,r,c,a;if(r=lyn(n),c=x8(Ftt,sVn,310,0,0,1),t=0,0==(i=r.length))return c;for(mK((a=Oqn(this,r[0])).d,zVn)||(c[t++]=a),e=1;e<i;e++)c[t++]=Oqn(this,r[e]);return c},vX(HVn,"StackTraceCreator/CollectorModern",1961),wAn(865,1961,{},d),MWn.de=function(n,t,e,i){return new PV(t,n,-1)},vX(HVn,"StackTraceCreator/CollectorModernNoSourceMap",865),wAn(1050,1,{}),vX(yQn,kQn,1050),wAn(615,1050,{615:1},zX),vX(jQn,kQn,615),wAn(2001,1,{}),vX(yQn,EQn,2001),wAn(2002,2001,{}),vX(jQn,EQn,2002),wAn(1090,1,{},g),vX(jQn,"LocaleInfo",1090),wAn(1918,1,{},p),MWn.a=0,vX(jQn,"TimeZone",1918),wAn(1258,2002,{},w),vX("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),wAn(434,1,{434:1},VB),MWn.a=!1,MWn.b=0,vX(yQn,"DateTimeFormat/PatternPart",434),wAn(199,1,TQn,AT,von,PD),MWn.wd=function(n){return J0(this,BB(n,199))},MWn.Fb=function(n){return cL(n,199)&&QC(fan(this.q.getTime()),fan(BB(n,199).q.getTime()))},MWn.Hb=function(){var n;return dG(r0(n=fan(this.q.getTime()),jz(n,32)))},MWn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=UO(e.Math.abs(i)%60),(pMn(),pet)[this.q.getDay()]+" "+vet[this.q.getMonth()]+" "+UO(this.q.getDate())+" "+UO(this.q.getHours())+":"+UO(this.q.getMinutes())+":"+UO(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var ott,stt,htt,ftt,ltt,btt,wtt,dtt,gtt,ptt,vtt,mtt=vX(YWn,"Date",199);wAn(1915,199,TQn,Ykn),MWn.a=!1,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=!1,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,MWn.o=0,MWn.p=0,vX("com.google.gwt.i18n.shared.impl","DateRecord",1915),wAn(1966,1,{}),MWn.fe=function(){return null},MWn.ge=function(){return null},MWn.he=function(){return null},MWn.ie=function(){return null},MWn.je=function(){return null},vX(MQn,"JSONValue",1966),wAn(216,1966,{216:1},Il,Tl),MWn.Fb=function(n){return!!cL(n,216)&&v0(this.a,BB(n,216).a)},MWn.ee=function(){return qp},MWn.Hb=function(){return tY(this.a)},MWn.fe=function(){return this},MWn.Ib=function(){var n,t,e;for(e=new lN("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),uO(e,dnn(this,t));return e.a+="]",e.a},vX(MQn,"JSONArray",216),wAn(483,1966,{483:1},Ml),MWn.ee=function(){return Gp},MWn.ge=function(){return this},MWn.Ib=function(){return hN(),""+this.a},MWn.a=!1,vX(MQn,"JSONBoolean",483),wAn(985,60,BVn,gy),vX(MQn,"JSONException",985),wAn(1023,1966,{},v),MWn.ee=function(){return Vp},MWn.Ib=function(){return zWn},vX(MQn,"JSONNull",1023),wAn(258,1966,{258:1},Sl),MWn.Fb=function(n){return!!cL(n,258)&&this.a==BB(n,258).a},MWn.ee=function(){return zp},MWn.Hb=function(){return VO(this.a)},MWn.he=function(){return this},MWn.Ib=function(){return this.a+""},MWn.a=0,vX(MQn,"JSONNumber",258),wAn(183,1966,{183:1},py,Pl),MWn.Fb=function(n){return!!cL(n,183)&&v0(this.a,BB(n,183).a)},MWn.ee=function(){return Up},MWn.Hb=function(){return tY(this.a)},MWn.ie=function(){return this},MWn.Ib=function(){var n,t,e,i,r,c;for(c=new lN("{"),n=!0,i=0,r=(e=jrn(this,x8(Qtt,sVn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=FWn,oO(c,mOn(t)),c.a+=":",uO(c,zJ(this,t));return c.a+="}",c.a},vX(MQn,"JSONObject",183),wAn(596,nVn,tVn,TT),MWn.Hc=function(n){return XC(n)&&zk(this.a,SD(n))},MWn.Kc=function(){return new Sb(new Jy(this.b))},MWn.gc=function(){return this.b.length},vX(MQn,"JSONObject/1",596),wAn(204,1966,{204:1},GX),MWn.Fb=function(n){return!!cL(n,204)&&mK(this.a,BB(n,204).a)},MWn.ee=function(){return Xp},MWn.Hb=function(){return vvn(this.a)},MWn.je=function(){return this},MWn.Ib=function(){return mOn(this.a)},vX(MQn,"JSONString",204),wAn(1962,1,{525:1}),vX(LQn,"OutputStream",1962),wAn(1963,1962,{525:1}),vX(LQn,"FilterOutputStream",1963),wAn(866,1963,{525:1},A),vX(LQn,"PrintStream",866),wAn(418,1,{475:1}),MWn.Ib=function(){return this.a},vX(RWn,"AbstractStringBuilder",418),wAn(529,60,BVn,Oy),vX(RWn,"ArithmeticException",529),wAn(73,60,NQn,fv,Ay),vX(RWn,"IndexOutOfBoundsException",73),wAn(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},Sv,Tk),vX(RWn,"ArrayIndexOutOfBoundsException",320),wAn(528,60,BVn,lv,$y),vX(RWn,"ArrayStoreException",528),wAn(289,78,xQn,Ly),vX(RWn,"Error",289),wAn(194,289,xQn,hv,g5),vX(RWn,"AssertionError",194),IWn={3:1,476:1,35:1};var ytt,ktt=vX(RWn,"Boolean",476);wAn(236,1,{3:1,236:1}),vX(RWn,"Number",236),wAn(217,236,{3:1,217:1,35:1,236:1},$b),MWn.wd=function(n){return Fk(this,BB(n,217))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,217)&&BB(n,217).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var jtt,Ett,Ttt=vX(RWn,"Byte",217);wAn(172,1,{3:1,172:1,35:1},Lb),MWn.wd=function(n){return Bk(this,BB(n,172))},MWn.Fb=function(n){return cL(n,172)&&BB(n,172).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return String.fromCharCode(this.a)},MWn.a=0;var Mtt,Stt=vX(RWn,"Character",172);wAn(205,60,{3:1,205:1,102:1,60:1,78:1},bv,Ky),vX(RWn,"ClassCastException",205),CWn={3:1,35:1,333:1,236:1};var Ptt=vX(RWn,"Double",333);wAn(155,236,{3:1,35:1,155:1,236:1},Nb,Dv),MWn.wd=function(n){return BO(this,BB(n,155))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,155)&&vK(this.a,BB(n,155).a)},MWn.Hb=function(){return IJ(this.a)},MWn.Ib=function(){return""+this.a},MWn.a=0;var Itt=vX(RWn,"Float",155);wAn(32,60,{3:1,102:1,32:1,60:1,78:1},wv,_y,Fsn),vX(RWn,"IllegalArgumentException",32),wAn(71,60,BVn,dv,Fy),vX(RWn,"IllegalStateException",71),wAn(19,236,{3:1,35:1,19:1,236:1},xb),MWn.wd=function(n){return HO(this,BB(n,19))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,19)&&BB(n,19).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ctt,Ott,Att=vX(RWn,"Integer",19);wAn(162,236,{3:1,35:1,162:1,236:1},Db),MWn.wd=function(n){return qO(this,BB(n,162))},MWn.ke=function(){return j2(this.a)},MWn.Fb=function(n){return cL(n,162)&&QC(BB(n,162).a,this.a)},MWn.Hb=function(){return dG(this.a)},MWn.Ib=function(){return""+vz(this.a)},MWn.a=0;var $tt,Ltt,Ntt,xtt,Dtt,Rtt=vX(RWn,"Long",162);wAn(2039,1,{}),wAn(1831,60,BVn,By),vX(RWn,"NegativeArraySizeException",1831),wAn(173,598,{3:1,102:1,173:1,60:1,78:1},gv,Hy),MWn.Wd=function(n){return new TypeError(n)},vX(RWn,"NullPointerException",173),wAn(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Mk),vX(RWn,"NumberFormatException",127),wAn(184,236,{3:1,35:1,236:1,184:1},Rb),MWn.wd=function(n){return Hk(this,BB(n,184))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,184)&&BB(n,184).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ktt,_tt=vX(RWn,"Short",184);wAn(310,1,{3:1,310:1},PV),MWn.Fb=function(n){var t;return!!cL(n,310)&&(t=BB(n,310),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[iln(this.c),this.a,this.d,this.b]))},MWn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},MWn.c=0;var Ftt=vX(RWn,"StackTraceElement",310);OWn={3:1,475:1,35:1,2:1};var Btt,Htt,qtt,Gtt,ztt,Utt,Xtt,Wtt,Vtt,Qtt=vX(RWn,qVn,2);wAn(107,418,{475:1},Sk,Pk,fN),vX(RWn,"StringBuffer",107),wAn(100,418,{475:1},Ik,Ck,lN),vX(RWn,"StringBuilder",100),wAn(687,73,NQn,Ok),vX(RWn,"StringIndexOutOfBoundsException",687),wAn(2043,1,{}),wAn(844,1,{},x),MWn.Kb=function(n){return BB(n,78).e},vX(RWn,"Throwable/lambda$0$Type",844),wAn(41,60,{3:1,102:1,60:1,78:1,41:1},pv,tk),vX(RWn,"UnsupportedOperationException",41),wAn(240,236,{3:1,35:1,236:1,240:1},knn,wE),MWn.wd=function(n){return J_n(this,BB(n,240))},MWn.ke=function(){return bSn(eqn(this))},MWn.Fb=function(n){var t;return this===n||!!cL(n,240)&&(t=BB(n,240),this.e==t.e&&0==J_n(this,t))},MWn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=fan(this.f),this.b=dG(e0(n,-1)),this.b=33*this.b+dG(e0(kz(n,32),-1)),this.b=17*this.b+IJ(this.e),this.b):(this.b=17*Khn(this.c)+IJ(this.e),this.b)},MWn.Ib=function(){return eqn(this)},MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0;var Ytt,Jtt,Ztt,net,tet,eet,iet=vX("java.math","BigDecimal",240);wAn(91,236,{3:1,35:1,236:1,91:1},Rpn,X6,lU,vEn,Ign,$A),MWn.wd=function(n){return tgn(this,BB(n,91))},MWn.ke=function(){return bSn(qXn(this,0))},MWn.Fb=function(n){return swn(this,n)},MWn.Hb=function(){return Khn(this)},MWn.Ib=function(){return qXn(this,0)},MWn.b=-2,MWn.c=0,MWn.d=0,MWn.e=0;var ret,cet,aet,uet,oet=vX("java.math","BigInteger",91);wAn(488,1967,JWn),MWn.$b=function(){$U(this)},MWn._b=function(n){return hU(this,n)},MWn.uc=function(n){return Lsn(this,n,this.g)||Lsn(this,n,this.f)},MWn.vc=function(){return new Pb(this)},MWn.xc=function(n){return RX(this,n)},MWn.zc=function(n,t){return VW(this,n,t)},MWn.Bc=function(n){return v6(this,n)},MWn.gc=function(){return NT(this)},vX(YWn,"AbstractHashMap",488),wAn(261,nVn,tVn,Pb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return m2(this,n)},MWn.Kc=function(){return new usn(this.a)},MWn.Mc=function(n){var t;return!!m2(this,n)&&(t=BB(n,42).cd(),this.a.Bc(t),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractHashMap/EntrySet",261),wAn(262,1,QWn,usn),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return ten(this)},MWn.Ob=function(){return this.b},MWn.Qb=function(){o9(this)},MWn.b=!1,vX(YWn,"AbstractHashMap/EntrySetIterator",262),wAn(417,1,QWn,Sb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this)},MWn.Pb=function(){return mQ(this)},MWn.Qb=function(){fW(this)},MWn.b=0,MWn.c=-1,vX(YWn,"AbstractList/IteratorImpl",417),wAn(96,417,cVn,M2),MWn.Qb=function(){fW(this)},MWn.Rb=function(n){yR(this,n)},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Ub=function(){return Px(this.b>0),this.a.Xb(this.c=--this.b)},MWn.Vb=function(){return this.b-1},MWn.Wb=function(n){Mx(-1!=this.c),this.a._c(this.c,n)},vX(YWn,"AbstractList/ListIteratorImpl",96),wAn(219,52,LVn,s1),MWn.Vc=function(n,t){LZ(n,this.b),this.c.Vc(this.a+n,t),++this.b},MWn.Xb=function(n){return l1(n,this.b),this.c.Xb(this.a+n)},MWn.$c=function(n){var t;return l1(n,this.b),t=this.c.$c(this.a+n),--this.b,t},MWn._c=function(n,t){return l1(n,this.b),this.c._c(this.a+n,t)},MWn.gc=function(){return this.b},MWn.a=0,MWn.b=0,vX(YWn,"AbstractList/SubList",219),wAn(384,nVn,tVn,Ib),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a._b(n)},MWn.Kc=function(){return new Cb(this.a.vc().Kc())},MWn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/1",384),wAn(691,1,QWn,Cb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/1/1",691),wAn(226,28,ZWn,Ob),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Kc=function(){return new Kb(this.a.vc().Kc())},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/2",226),wAn(294,1,QWn,Kb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/2/1",294),wAn(484,1,{484:1,42:1}),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.d,t.cd())&&cV(this.e,t.dd()))},MWn.cd=function(){return this.d},MWn.dd=function(){return this.e},MWn.Hb=function(){return KA(this.d)^KA(this.e)},MWn.ed=function(n){return pR(this,n)},MWn.Ib=function(){return this.d+"="+this.e},vX(YWn,"AbstractMap/AbstractEntry",484),wAn(383,484,{484:1,383:1,42:1},PS),vX(YWn,"AbstractMap/SimpleEntry",383),wAn(1984,1,VQn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.cd(),t.cd())&&cV(this.dd(),t.dd()))},MWn.Hb=function(){return KA(this.cd())^KA(this.dd())},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(YWn,uVn,1984),wAn(1992,1967,eVn),MWn.tc=function(n){return q5(this,n)},MWn._b=function(n){return DK(this,n)},MWn.vc=function(){return new Bb(this)},MWn.xc=function(n){return qC(lsn(this,n))},MWn.ec=function(){return new _b(this)},vX(YWn,"AbstractNavigableMap",1992),wAn(739,nVn,tVn,Bb),MWn.Hc=function(n){return cL(n,42)&&q5(this.b,BB(n,42))},MWn.Kc=function(){return new BR(this.b)},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),z8(this.b,t))},MWn.gc=function(){return this.b.c},vX(YWn,"AbstractNavigableMap/EntrySet",739),wAn(493,nVn,rVn,_b),MWn.Nc=function(){return new wS(this)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(this.a).b))},MWn.Mc=function(n){return!!DK(this.a,n)&&($J(this.a,n),!0)},MWn.gc=function(){return this.a.c},vX(YWn,"AbstractNavigableMap/NavigableKeySet",493),wAn(494,1,QWn,Fb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this.a.a)},MWn.Pb=function(){return mx(this.a).cd()},MWn.Qb=function(){e_(this.a)},vX(YWn,"AbstractNavigableMap/NavigableKeySet/1",494),wAn(2004,28,ZWn),MWn.Fc=function(n){return F8(eMn(this,n)),!0},MWn.Gc=function(n){return kW(n),vH(n!=this,"Can't add a queue to itself"),Frn(this,n)},MWn.$b=function(){for(;null!=mnn(this););},vX(YWn,"AbstractQueue",2004),wAn(302,28,{4:1,20:1,28:1,14:1},Lp,d1),MWn.Fc=function(n){return w3(this,n),!0},MWn.$b=function(){o4(this)},MWn.Hc=function(n){return wun(new bV(this),n)},MWn.dc=function(){return Wy(this)},MWn.Kc=function(){return new bV(this)},MWn.Mc=function(n){return GJ(new bV(this),n)},MWn.gc=function(){return this.c-this.b&this.a.length-1},MWn.Nc=function(){return new w1(this,272)},MWn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=qk(new Array(t),n)),urn(this,n,t),n.length>t&&$X(n,t,null),n},MWn.b=0,MWn.c=0,vX(YWn,"ArrayDeque",302),wAn(446,1,QWn,bV),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a!=this.b},MWn.Pb=function(){return _hn(this)},MWn.Qb=function(){ein(this)},MWn.a=0,MWn.b=0,MWn.c=-1,vX(YWn,"ArrayDeque/IteratorImpl",446),wAn(12,52,QQn,Np,J6,t_),MWn.Vc=function(n,t){kG(this,n,t)},MWn.Fc=function(n){return WB(this,n)},MWn.Wc=function(n,t){return ohn(this,n,t)},MWn.Gc=function(n){return gun(this,n)},MWn.$b=function(){this.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this,n,0)},MWn.Jc=function(n){Otn(this,n)},MWn.Xb=function(n){return xq(this,n)},MWn.Xc=function(n){return E7(this,n,0)},MWn.dc=function(){return 0==this.c.length},MWn.Kc=function(){return new Wb(this)},MWn.$c=function(n){return s6(this,n)},MWn.Mc=function(n){return y7(this,n)},MWn.Ud=function(n,t){h1(this,n,t)},MWn._c=function(n,t){return c5(this,n,t)},MWn.gc=function(){return this.c.length},MWn.ad=function(n){m$(this,n)},MWn.Pc=function(){return bx(this)},MWn.Qc=function(n){return Qgn(this,n)};var set,het,fet,bet,wet,det,get,pet,vet,met=vX(YWn,"ArrayList",12);wAn(7,1,QWn,Wb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return y$(this)},MWn.Pb=function(){return n0(this)},MWn.Qb=function(){AU(this)},MWn.a=0,MWn.b=-1,vX(YWn,"ArrayList/1",7),wAn(2013,e.Function,{},T),MWn.te=function(n,t){return Pln(n,t)},wAn(154,52,YQn,Jy),MWn.Hc=function(n){return-1!=bin(this,n)},MWn.Jc=function(n){var t,e,i,r;for(kW(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.td(t)},MWn.Xb=function(n){return Dq(this,n)},MWn._c=function(n,t){var e;return l1(n,this.a.length),e=this.a[n],$X(this.a,n,t),e},MWn.gc=function(){return this.a.length},MWn.ad=function(n){yG(this.a,this.a.length,n)},MWn.Pc=function(){return Ygn(this,x8(Ant,HWn,1,this.a.length,5,1))},MWn.Qc=function(n){return Ygn(this,n)},vX(YWn,"Arrays/ArrayList",154),wAn(940,52,YQn,S),MWn.Hc=function(n){return!1},MWn.Xb=function(n){return yO(n)},MWn.Kc=function(){return SQ(),LT(),bet},MWn.Yc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptyList",940),wAn(941,1,cVn,P),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new dv)},MWn.Wb=function(n){throw Hp(new dv)},vX(YWn,"Collections/EmptyListIterator",941),wAn(943,1967,jVn,I),MWn._b=function(n){return!1},MWn.uc=function(n){return!1},MWn.vc=function(){return SQ(),fet},MWn.xc=function(n){return null},MWn.ec=function(){return SQ(),fet},MWn.gc=function(){return 0},MWn.Cc=function(){return SQ(),set},vX(YWn,"Collections/EmptyMap",943),wAn(942,nVn,TVn,M),MWn.Hc=function(n){return!1},MWn.Kc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptySet",942),wAn(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},Gb),MWn.Hc=function(n){return cV(this.a,n)},MWn.Xb=function(n){return l1(n,1),this.a},MWn.gc=function(){return 1},vX(YWn,"Collections/SingletonList",599),wAn(372,1,vVn,Hb),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,this.Nc())},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return oE()},MWn.Gc=function(n){return sE()},MWn.$b=function(){hE()},MWn.Hc=function(n){return xT(this,n)},MWn.Ic=function(n){return DT(this,n)},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new qb(this.b.Kc())},MWn.Mc=function(n){return fE()},MWn.gc=function(){return this.b.gc()},MWn.Pc=function(){return this.b.Pc()},MWn.Qc=function(n){return RT(this,n)},MWn.Ib=function(){return Bbn(this.b)},vX(YWn,"Collections/UnmodifiableCollection",372),wAn(371,1,QWn,qb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.b.Pb()},MWn.Qb=function(){lE()},vX(YWn,"Collections/UnmodifiableCollectionIterator",371),wAn(531,372,JQn,bN),MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.Hb=function(){return nsn(this.a)},MWn.Xc=function(n){return this.a.Xc(n)},MWn.dc=function(){return this.a.dc()},MWn.Yc=function(){return new wN(this.a.Zc(0))},MWn.Zc=function(n){return new wN(this.a.Zc(n))},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.ad=function(n){throw Hp(new pv)},MWn.bd=function(n,t){return new bN(this.a.bd(n,t))},vX(YWn,"Collections/UnmodifiableList",531),wAn(690,371,cVn,wN),MWn.Qb=function(){lE()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Sb=function(){return this.a.Sb()},MWn.Tb=function(){return this.a.Tb()},MWn.Ub=function(){return this.a.Ub()},MWn.Vb=function(){return this.a.Vb()},MWn.Wb=function(n){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableListIterator",690),wAn(600,1,JWn,Xb),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return this.c._b(n)},MWn.uc=function(n){return _T(this,n)},MWn.vc=function(){return eV(this)},MWn.Fb=function(n){return BT(this,n)},MWn.xc=function(n){return this.c.xc(n)},MWn.Hb=function(){return nsn(this.c)},MWn.dc=function(){return this.c.dc()},MWn.ec=function(){return iV(this)},MWn.zc=function(n,t){throw Hp(new pv)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.gc()},MWn.Ib=function(){return Bbn(this.c)},MWn.Cc=function(){return tV(this)},vX(YWn,"Collections/UnmodifiableMap",600),wAn(382,372,EVn,Ak),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return Nfn(this.b,n)},MWn.Hb=function(){return nsn(this.b)},vX(YWn,"Collections/UnmodifiableSet",382),wAn(944,382,EVn,Lk),MWn.Hc=function(n){return KT(this,n)},MWn.Ic=function(n){return this.b.Ic(n)},MWn.Kc=function(){return new zb(this.b.Kc())},MWn.Pc=function(){var n;return j4(n=this.b.Pc(),n.length),n},MWn.Qc=function(n){return CY(this,n)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),wAn(945,1,QWn,zb),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return new Ub(BB(this.a.Pb(),42))},MWn.Ob=function(){return this.a.Ob()},MWn.Qb=function(){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),wAn(688,1,VQn,Ub),MWn.Fb=function(n){return this.a.Fb(n)},MWn.cd=function(){return this.a.cd()},MWn.dd=function(){return this.a.dd()},MWn.Hb=function(){return this.a.Hb()},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return Bbn(this.a)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),wAn(601,531,{20:1,14:1,15:1,54:1},$k),vX(YWn,"Collections/UnmodifiableRandomAccessList",601),wAn(689,382,MVn,dN),MWn.Nc=function(){return new wS(this)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Hb=function(){return nsn(this.a)},vX(YWn,"Collections/UnmodifiableSortedSet",689),wAn(847,1,ZQn,D),MWn.ue=function(n,t){var e;return 0!=(e=T4(BB(n,11),BB(t,11)))?e:nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(YWn,"Comparator/lambda$0$Type",847),wAn(751,1,ZQn,R),MWn.ue=function(n,t){return _q(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),get},vX(YWn,"Comparators/NaturalOrderComparator",751),wAn(1177,1,ZQn,K),MWn.ue=function(n,t){return Fq(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),det},vX(YWn,"Comparators/ReverseNaturalOrderComparator",1177),wAn(64,1,ZQn,nw),MWn.Fb=function(n){return this===n},MWn.ue=function(n,t){return this.a.ue(t,n)},MWn.ve=function(){return this.a},vX(YWn,"Comparators/ReversedComparator",64),wAn(166,60,BVn,vv),vX(YWn,"ConcurrentModificationException",166),wAn(1904,1,nYn,_),MWn.we=function(n){hdn(this,n)},MWn.Ib=function(){return"DoubleSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?l6(this)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+l6(this)+"]"},MWn.a=0,MWn.b=KQn,MWn.c=RQn,MWn.d=0,MWn.e=0,MWn.f=0,vX(YWn,"DoubleSummaryStatistics",1904),wAn(1805,60,BVn,mv),vX(YWn,"EmptyStackException",1805),wAn(451,1967,JWn,Hbn),MWn.zc=function(n,t){return wR(this,n,t)},MWn.$b=function(){TW(this)},MWn._b=function(n){return uS(this,n)},MWn.uc=function(n){var t,e;for(e=new QT(this.a);e.a<e.c.a.length;)if(t=u4(e),cV(n,this.b[t.g]))return!0;return!1},MWn.vc=function(){return new tw(this)},MWn.xc=function(n){return oV(this,n)},MWn.Bc=function(n){return NZ(this,n)},MWn.gc=function(){return this.a.c},vX(YWn,"EnumMap",451),wAn(1352,nVn,tVn,tw),MWn.$b=function(){TW(this.a)},MWn.Hc=function(n){return v2(this,n)},MWn.Kc=function(){return new Aq(this.a)},MWn.Mc=function(n){var t;return!!v2(this,n)&&(t=BB(n,42).cd(),NZ(this.a,t),!0)},MWn.gc=function(){return this.a.a.c},vX(YWn,"EnumMap/EntrySet",1352),wAn(1353,1,QWn,Aq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.b=u4(this.a),new IS(this.c,this.b)},MWn.Ob=function(){return k$(this.a)},MWn.Qb=function(){Mx(!!this.b),NZ(this.c,this.b),this.b=null},vX(YWn,"EnumMap/EntrySetIterator",1353),wAn(1354,1984,VQn,IS),MWn.cd=function(){return this.a},MWn.dd=function(){return this.b.b[this.a.g]},MWn.ed=function(n){return EU(this.b,this.a.g,n)},vX(YWn,"EnumMap/MapEntry",1354),wAn(174,nVn,{20:1,28:1,14:1,174:1,21:1});var yet=vX(YWn,"EnumSet",174);wAn(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},YK),MWn.Fc=function(n){return orn(this,BB(n,22))},MWn.Hc=function(n){return IG(this,n)},MWn.Kc=function(){return new QT(this)},MWn.Mc=function(n){return CG(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"EnumSet/EnumSetImpl",156),wAn(343,1,QWn,QT),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return u4(this)},MWn.Ob=function(){return k$(this)},MWn.Qb=function(){Mx(-1!=this.b),$X(this.c.b,this.b,null),--this.c.c,this.b=-1},MWn.a=-1,MWn.b=-1,vX(YWn,"EnumSet/EnumSetImpl/IteratorImpl",343),wAn(43,488,tYn,xp,XT,mO),MWn.re=function(n,t){return GC(n)===GC(t)||null!=n&&Nfn(n,t)},MWn.se=function(n){return 0|nsn(n)},vX(YWn,"HashMap",43),wAn(53,nVn,eYn,Rv,bE,$q),MWn.Fc=function(n){return TU(this,n)},MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return FT(this,n)},MWn.dc=function(){return 0==this.a.gc()},MWn.Kc=function(){return this.a.ec().Kc()},MWn.Mc=function(n){return eL(this,n)},MWn.gc=function(){return this.a.gc()};var ket,jet=vX(YWn,"HashSet",53);wAn(1781,1,wVn,F),MWn.ud=function(n){ran(this,n)},MWn.Ib=function(){return"IntSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?j2(this.d)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+vz(this.d)+"]"},MWn.a=0,MWn.b=_Vn,MWn.c=DWn,MWn.d=0,vX(YWn,"IntSummaryStatistics",1781),wAn(1049,1,pVn,eA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new S2(this)},MWn.c=0,vX(YWn,"InternalHashCodeMap",1049),wAn(711,1,QWn,S2),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.d=this.a[this.c++],this.d},MWn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},MWn.Qb=function(){gAn(this.e,this.d.cd()),0!=this.c&&--this.c},MWn.c=0,MWn.d=null,vX(YWn,"InternalHashCodeMap/1",711),wAn(1047,1,pVn,iA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new p4(this)},MWn.c=0,MWn.d=0,vX(YWn,"InternalStringMap",1047),wAn(710,1,QWn,p4),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new JK(this.d,this.c,this.d.d)},MWn.Ob=function(){return!this.a.done},MWn.Qb=function(){Gan(this.d,this.c.value[0])},vX(YWn,"InternalStringMap/1",710),wAn(1048,1984,VQn,JK),MWn.cd=function(){return this.b.value[0]},MWn.dd=function(){return this.a.d!=this.c?hS(this.a,this.b.value[0]):this.b.value[1]},MWn.ed=function(n){return ubn(this.a,this.b.value[0],n)},MWn.c=0,vX(YWn,"InternalStringMap/2",1048),wAn(228,43,tYn,v4,q8),MWn.$b=function(){kR(this)},MWn._b=function(n){return lS(this,n)},MWn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(cV(t.e,n))return!0;t=t.a}return!1},MWn.vc=function(){return new iw(this)},MWn.xc=function(n){return lnn(this,n)},MWn.zc=function(n,t){return Jgn(this,n,t)},MWn.Bc=function(n){return k7(this,n)},MWn.gc=function(){return NT(this.e)},MWn.c=!1,vX(YWn,"LinkedHashMap",228),wAn(387,383,{484:1,383:1,387:1,42:1},Ix,nH),vX(YWn,"LinkedHashMap/ChainEntry",387),wAn(701,nVn,tVn,iw),MWn.$b=function(){kR(this.a)},MWn.Hc=function(n){return y2(this,n)},MWn.Kc=function(){return new hW(this)},MWn.Mc=function(n){var t;return!!y2(this,n)&&(t=BB(n,42).cd(),k7(this.a,t),!0)},MWn.gc=function(){return NT(this.a.e)},vX(YWn,"LinkedHashMap/EntrySet",701),wAn(702,1,QWn,hW),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return s9(this)},MWn.Ob=function(){return this.b!=this.c.a.d},MWn.Qb=function(){Mx(!!this.a),p2(this.c.a.e,this),RH(this.a),v6(this.c.a.e,this.a.d),bD(this.c.a.e,this),this.a=null},vX(YWn,"LinkedHashMap/EntrySet/EntryIterator",702),wAn(178,53,eYn,fA,LN,Lq);var Eet=vX(YWn,"LinkedHashSet",178);wAn(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},YT,n_),MWn.Fc=function(n){return DH(this,n)},MWn.$b=function(){yQ(this)},MWn.Zc=function(n){return spn(this,n)},MWn.gc=function(){return this.b},MWn.b=0;var Tet,Met,Set,Pet,Iet,Cet=vX(YWn,"LinkedList",68);wAn(970,1,cVn,ZK),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){nX(this,n)},MWn.Ob=function(){return EE(this)},MWn.Sb=function(){return this.b.b!=this.d.a},MWn.Pb=function(){return b3(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){return U0(this)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){mtn(this)},MWn.Wb=function(n){Mx(!!this.c),this.c.c=n},MWn.a=0,MWn.c=null,vX(YWn,"LinkedList/ListIteratorImpl",970),wAn(608,1,{},$),vX(YWn,"LinkedList/Node",608),wAn(1959,1,{}),vX(YWn,"Locale",1959),wAn(861,1959,{},L),MWn.Ib=function(){return""},vX(YWn,"Locale/1",861),wAn(862,1959,{},N),MWn.Ib=function(){return"unknown"},vX(YWn,"Locale/4",862),wAn(109,60,{3:1,102:1,60:1,78:1,109:1},yv,lV),vX(YWn,"NoSuchElementException",109),wAn(404,1,{404:1},vy),MWn.Fb=function(n){var t;return n===this||!!cL(n,404)&&(t=BB(n,404),cV(this.a,t.a))},MWn.Hb=function(){return KA(this.a)},MWn.Ib=function(){return null!=this.a?GWn+kN(this.a)+")":"Optional.empty()"},vX(YWn,"Optional",404),wAn(463,1,{463:1},IO,yx),MWn.Fb=function(n){var t;return n===this||!!cL(n,463)&&(t=BB(n,463),this.a==t.a&&0==Pln(this.b,t.b))},MWn.Hb=function(){return this.a?IJ(this.b):0},MWn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalDouble",463),wAn(517,1,{517:1},CO,kx),MWn.Fb=function(n){var t;return n===this||!!cL(n,517)&&(t=BB(n,517),this.a==t.a&&0==E$(this.b,t.b))},MWn.Hb=function(){return this.a?this.b:0},MWn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalInt",517),wAn(503,2004,ZWn,Xz),MWn.Gc=function(n){return ikn(this,n)},MWn.$b=function(){this.b.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=(null==n?-1:E7(this.b,n,0))},MWn.Kc=function(){return new Vb(this)},MWn.Mc=function(n){return srn(this,n)},MWn.gc=function(){return this.b.c.length},MWn.Nc=function(){return new w1(this,256)},MWn.Pc=function(){return bx(this.b)},MWn.Qc=function(n){return Qgn(this.b,n)},vX(YWn,"PriorityQueue",503),wAn(1277,1,QWn,Vb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a<this.c.b.c.length},MWn.Pb=function(){return Px(this.a<this.c.b.c.length),this.b=this.a++,xq(this.c.b,this.b)},MWn.Qb=function(){Mx(-1!=this.b),hrn(this.c,this.a=this.b),this.b=-1},MWn.a=0,MWn.b=-1,vX(YWn,"PriorityQueue/1",1277),wAn(230,1,{230:1},sbn,I4),MWn.a=0,MWn.b=0;var Oet,Aet,$et,Let=0;vX(YWn,"Random",230),wAn(27,1,fVn,w1,zU,IV),MWn.qd=function(){return this.a},MWn.rd=function(){return Dz(this),this.c},MWn.Nb=function(n){Dz(this),this.d.Nb(n)},MWn.sd=function(n){return ntn(this,n)},MWn.a=0,MWn.c=0,vX(YWn,"Spliterators/IteratorSpliterator",27),wAn(485,27,fVn,wS),vX(YWn,"SortedSet/1",485),wAn(602,1,nYn,Qb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/0methodref$accept$Type",602),wAn(603,1,nYn,Yb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/1methodref$accept$Type",603),wAn(604,1,wVn,Jb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/2methodref$accept$Type",604),wAn(605,1,wVn,Zb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/3methodref$accept$Type",605),wAn(617,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.d},MWn.rd=function(){return this.e},MWn.d=0,MWn.e=0,vX(YWn,"Spliterators/BaseSpliterator",617),wAn(721,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,182)?gE(this,BB(n,182)):gE(this,new Yb(n))},MWn.sd=function(n){return cL(n,182)?this.ye(BB(n,182)):this.ye(new Qb(n))},vX(YWn,"Spliterators/AbstractDoubleSpliterator",721),wAn(720,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,196)?gE(this,BB(n,196)):gE(this,new Zb(n))},MWn.sd=function(n){return cL(n,196)?this.ye(BB(n,196)):this.ye(new Jb(n))},vX(YWn,"Spliterators/AbstractIntSpliterator",720),wAn(540,617,fVn),vX(YWn,"Spliterators/AbstractSpliterator",540),wAn(692,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.b},MWn.rd=function(){return this.d-this.c},MWn.b=0,MWn.c=0,MWn.d=0,vX(YWn,"Spliterators/BaseArraySpliterator",692),wAn(947,692,fVn,BH),MWn.ze=function(n,t){cj(this,BB(n,38),t)},MWn.Nb=function(n){DX(this,n)},MWn.sd=function(n){return K6(this,n)},vX(YWn,"Spliterators/ArraySpliterator",947),wAn(693,692,fVn,_K),MWn.ze=function(n,t){aj(this,BB(n,182),t)},MWn.xe=function(n){DX(this,n)},MWn.Nb=function(n){cL(n,182)?DX(this,BB(n,182)):DX(this,new Yb(n))},MWn.ye=function(n){return K6(this,n)},MWn.sd=function(n){return cL(n,182)?K6(this,BB(n,182)):K6(this,new Qb(n))},vX(YWn,"Spliterators/DoubleArraySpliterator",693),wAn(1968,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return 16448},MWn.rd=function(){return 0},vX(YWn,"Spliterators/EmptySpliterator",1968),wAn(946,1968,fVn,z),MWn.xe=function(n){Bf(n)},MWn.Nb=function(n){cL(n,196)?Bf(BB(n,196)):Bf(new Zb(n))},MWn.ye=function(n){return bS(n)},MWn.sd=function(n){return cL(n,196)?bS(BB(n,196)):bS(new Jb(n))},vX(YWn,"Spliterators/EmptySpliterator/OfInt",946),wAn(580,52,fYn,_v),MWn.Vc=function(n,t){Kz(n,this.a.c.length+1),kG(this.a,n,t)},MWn.Fc=function(n){return WB(this.a,n)},MWn.Wc=function(n,t){return Kz(n,this.a.c.length+1),ohn(this.a,n,t)},MWn.Gc=function(n){return gun(this.a,n)},MWn.$b=function(){this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Jc=function(n){Otn(this.a,n)},MWn.Xb=function(n){return Kz(n,this.a.c.length),xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return new Wb(this.a)},MWn.$c=function(n){return Kz(n,this.a.c.length),s6(this.a,n)},MWn.Ud=function(n,t){h1(this.a,n,t)},MWn._c=function(n,t){return Kz(n,this.a.c.length),c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.ad=function(n){m$(this.a,n)},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.Ib=function(){return LMn(this.a)},vX(YWn,"Vector",580),wAn(809,580,fYn,om),vX(YWn,"Stack",809),wAn(206,1,{206:1},$an),MWn.Ib=function(){return W0(this)},vX(YWn,"StringJoiner",206),wAn(544,1992,{3:1,83:1,171:1,161:1},WT,Wz),MWn.$b=function(){my(this)},MWn.vc=function(){return new xN(this)},MWn.zc=function(n,t){return Mon(this,n,t)},MWn.Bc=function(n){return $J(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"TreeMap",544),wAn(390,1,QWn,BR),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return mx(this)},MWn.Ob=function(){return aS(this.a)},MWn.Qb=function(){e_(this)},vX(YWn,"TreeMap/EntryIterator",390),wAn(435,739,tVn,xN),MWn.$b=function(){my(this.a)},vX(YWn,"TreeMap/EntrySet",435),wAn(436,383,{484:1,383:1,42:1,436:1},H8),MWn.b=!1;var Net,xet,Det,Ret,Ket=vX(YWn,"TreeMap/Node",436);wAn(621,1,{},q),MWn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(YWn,"TreeMap/State",621),wAn(297,22,lYn,gS),MWn.Ae=function(){return!1},MWn.Be=function(){return!1};var _et,Fet=Ben(YWn,"TreeMap/SubMapType",297,Unt,J2,h_);wAn(1112,297,lYn,LA),MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/1",1112,Fet,null,null),wAn(1113,297,lYn,A$),MWn.Ae=function(){return!0},MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/2",1113,Fet,null,null),wAn(1114,297,lYn,NA),MWn.Ae=function(){return!0},Ben(YWn,"TreeMap/SubMapType/3",1114,Fet,null,null),wAn(208,nVn,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},zv,dE),MWn.Nc=function(){return new wS(this)},MWn.Fc=function(n){return ZU(this,n)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(new _b(this.a).a).b))},MWn.Mc=function(n){return MN(this,n)},MWn.gc=function(){return this.a.c};var Bet=vX(YWn,"TreeSet",208);wAn(966,1,{},rw),MWn.Ce=function(n,t){return DD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$0$Type",966),wAn(967,1,{},cw),MWn.Ce=function(n,t){return RD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$1$Type",967),wAn(846,1,{},G),MWn.Kb=function(n){return n},vX(bYn,"Function/lambda$0$Type",846),wAn(431,1,DVn,aw),MWn.Mb=function(n){return!this.a.Mb(n)},vX(bYn,"Predicate/lambda$2$Type",431),wAn(572,1,{572:1});var Het,qet,Get=vX(wYn,"Handler",572);wAn(2007,1,KWn),MWn.ne=function(){return"DUMMY"},MWn.Ib=function(){return this.ne()},vX(wYn,"Level",2007),wAn(1621,2007,KWn,U),MWn.ne=function(){return"INFO"},vX(wYn,"Level/LevelInfo",1621),wAn(1640,1,{},Kv),vX(wYn,"LogManager",1640),wAn(1780,1,KWn,i_),MWn.b=null,vX(wYn,"LogRecord",1780),wAn(512,1,{512:1},y5),MWn.e=!1;var zet,Uet,Xet,Wet=!1,Vet=!1,Qet=!1,Yet=!1,Jet=!1;vX(wYn,"Logger",512),wAn(819,572,{572:1},X),vX(wYn,"SimpleConsoleLogHandler",819),wAn(132,22,{3:1,35:1,22:1,132:1},pS);var Zet,nit=Ben(pYn,"Collector/Characteristics",132,Unt,p1,f_);wAn(744,1,{},jU),vX(pYn,"CollectorImpl",744),wAn(1060,1,{},W),MWn.Ce=function(n,t){return Ofn(BB(n,206),BB(t,206))},vX(pYn,"Collectors/10methodref$merge$Type",1060),wAn(1061,1,{},V),MWn.Kb=function(n){return W0(BB(n,206))},vX(pYn,"Collectors/11methodref$toString$Type",1061),wAn(1062,1,{},uw),MWn.Kb=function(n){return hN(),!!TO(n)},vX(pYn,"Collectors/12methodref$test$Type",1062),wAn(251,1,{},B),MWn.Od=function(n,t){BB(n,14).Fc(t)},vX(pYn,"Collectors/20methodref$add$Type",251),wAn(253,1,{},H),MWn.Ee=function(){return new Np},vX(pYn,"Collectors/21methodref$ctor$Type",253),wAn(346,1,{},Q),MWn.Ee=function(){return new Rv},vX(pYn,"Collectors/23methodref$ctor$Type",346),wAn(347,1,{},Y),MWn.Od=function(n,t){TU(BB(n,53),t)},vX(pYn,"Collectors/24methodref$add$Type",347),wAn(1055,1,{},J),MWn.Ce=function(n,t){return ZT(BB(n,15),BB(t,14))},vX(pYn,"Collectors/4methodref$addAll$Type",1055),wAn(1059,1,{},Z),MWn.Od=function(n,t){b6(BB(n,206),BB(t,475))},vX(pYn,"Collectors/9methodref$add$Type",1059),wAn(1058,1,{},YB),MWn.Ee=function(){return new $an(this.a,this.b,this.c)},vX(pYn,"Collectors/lambda$15$Type",1058),wAn(1063,1,{},nn),MWn.Ee=function(){var n;return Jgn(n=new v4,(hN(),!1),new Np),Jgn(n,!0,new Np),n},vX(pYn,"Collectors/lambda$22$Type",1063),wAn(1064,1,{},ow),MWn.Ee=function(){return Pun(Gk(Ant,1),HWn,1,5,[this.a])},vX(pYn,"Collectors/lambda$25$Type",1064),wAn(1065,1,{},sw),MWn.Od=function(n,t){Bq(this.a,een(n))},vX(pYn,"Collectors/lambda$26$Type",1065),wAn(1066,1,{},hw),MWn.Ce=function(n,t){return _z(this.a,een(n),een(t))},vX(pYn,"Collectors/lambda$27$Type",1066),wAn(1067,1,{},tn),MWn.Kb=function(n){return een(n)[0]},vX(pYn,"Collectors/lambda$28$Type",1067),wAn(713,1,{},en),MWn.Ce=function(n,t){return Hq(n,t)},vX(pYn,"Collectors/lambda$4$Type",713),wAn(252,1,{},rn),MWn.Ce=function(n,t){return GT(BB(n,14),BB(t,14))},vX(pYn,"Collectors/lambda$42$Type",252),wAn(348,1,{},cn),MWn.Ce=function(n,t){return zT(BB(n,53),BB(t,53))},vX(pYn,"Collectors/lambda$50$Type",348),wAn(349,1,{},an),MWn.Kb=function(n){return BB(n,53)},vX(pYn,"Collectors/lambda$51$Type",349),wAn(1054,1,{},fw),MWn.Od=function(n,t){bsn(this.a,BB(n,83),t)},vX(pYn,"Collectors/lambda$7$Type",1054),wAn(1056,1,{},un),MWn.Ce=function(n,t){return pun(BB(n,83),BB(t,83),new J)},vX(pYn,"Collectors/lambda$8$Type",1056),wAn(1057,1,{},lw),MWn.Kb=function(n){return mbn(this.a,BB(n,83))},vX(pYn,"Collectors/lambda$9$Type",1057),wAn(539,1,{}),MWn.He=function(){jW(this)},MWn.d=!1,vX(pYn,"TerminatableStream",539),wAn(812,539,vYn,AD),MWn.He=function(){jW(this)},vX(pYn,"DoubleStreamImpl",812),wAn(1784,721,fVn,ZB),MWn.ye=function(n){return pmn(this,BB(n,182))},MWn.a=null,vX(pYn,"DoubleStreamImpl/2",1784),wAn(1785,1,nYn,bw),MWn.we=function(n){HA(this.a,n)},vX(pYn,"DoubleStreamImpl/2/lambda$0$Type",1785),wAn(1782,1,nYn,ww),MWn.we=function(n){BA(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$0$Type",1782),wAn(1783,1,nYn,dw),MWn.we=function(n){hdn(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$2$Type",1783),wAn(1358,720,fVn,m5),MWn.ye=function(n){return k2(this,BB(n,196))},MWn.a=0,MWn.b=0,MWn.c=0,vX(pYn,"IntStream/5",1358),wAn(787,539,vYn,$D),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),this.a},vX(pYn,"IntStreamImpl",787),wAn(788,539,vYn,VT),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),CL(),$et},vX(pYn,"IntStreamImpl/Empty",788),wAn(1463,1,wVn,gw),MWn.ud=function(n){ran(this.a,n)},vX(pYn,"IntStreamImpl/lambda$4$Type",1463);var tit,eit=bq(pYn,"Stream");wAn(30,539,{525:1,670:1,833:1},Rq),MWn.He=function(){jW(this)},vX(pYn,"StreamImpl",30),wAn(845,1,{},on),MWn.ld=function(n){return lH(n)},vX(pYn,"StreamImpl/0methodref$lambda$2$Type",845),wAn(1084,540,fVn,KK),MWn.sd=function(n){for(;$9(this);){if(this.a.sd(n))return!0;jW(this.b),this.b=null,this.a=null}return!1},vX(pYn,"StreamImpl/1",1084),wAn(1085,1,lVn,pw),MWn.td=function(n){iH(this.a,BB(n,833))},vX(pYn,"StreamImpl/1/lambda$0$Type",1085),wAn(1086,1,DVn,vw),MWn.Mb=function(n){return TU(this.a,n)},vX(pYn,"StreamImpl/1methodref$add$Type",1086),wAn(1087,540,fVn,vQ),MWn.sd=function(n){var t;return this.a||(t=new Np,this.b.a.Nb(new mw(t)),SQ(),m$(t,this.c),this.a=new w1(t,16)),ntn(this.a,n)},MWn.a=null,vX(pYn,"StreamImpl/5",1087),wAn(1088,1,lVn,mw),MWn.td=function(n){WB(this.a,n)},vX(pYn,"StreamImpl/5/2methodref$add$Type",1088),wAn(722,540,fVn,Q9),MWn.sd=function(n){for(this.b=!1;!this.b&&this.c.sd(new AS(this,n)););return this.b},MWn.b=!1,vX(pYn,"StreamImpl/FilterSpliterator",722),wAn(1079,1,lVn,AS),MWn.td=function(n){Rz(this.a,this.b,n)},vX(pYn,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),wAn(1075,721,fVn,E6),MWn.ye=function(n){return jK(this,BB(n,182))},vX(pYn,"StreamImpl/MapToDoubleSpliterator",1075),wAn(1078,1,lVn,$S),MWn.td=function(n){jS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),wAn(1074,720,fVn,T6),MWn.ye=function(n){return EK(this,BB(n,196))},vX(pYn,"StreamImpl/MapToIntSpliterator",1074),wAn(1077,1,lVn,LS),MWn.td=function(n){kS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),wAn(719,540,fVn,M6),MWn.sd=function(n){return TK(this,n)},vX(pYn,"StreamImpl/MapToObjSpliterator",719),wAn(1076,1,lVn,NS),MWn.td=function(n){ES(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),wAn(618,1,lVn,sn),MWn.td=function(n){Cl(this,n)},vX(pYn,"StreamImpl/ValueConsumer",618),wAn(1080,1,lVn,hn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$0$Type",1080),wAn(1081,1,lVn,fn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$1$Type",1081),wAn(1082,1,{},yw),MWn.Ce=function(n,t){return F_(this.a,n,t)},vX(pYn,"StreamImpl/lambda$4$Type",1082),wAn(1083,1,lVn,CS),MWn.td=function(n){ER(this.b,this.a,n)},vX(pYn,"StreamImpl/lambda$5$Type",1083),wAn(1089,1,lVn,kw),MWn.td=function(n){Hon(this.a,BB(n,365))},vX(pYn,"TerminatableStream/lambda$0$Type",1089),wAn(2041,1,{}),wAn(1914,1,{},ln),vX("javaemul.internal","ConsoleLogger",1914),wAn(2038,1,{});var iit,rit,cit=0,ait=0;wAn(1768,1,lVn,bn),MWn.td=function(n){BB(n,308)},vX(TYn,"BowyerWatsonTriangulation/lambda$0$Type",1768),wAn(1769,1,lVn,jw),MWn.td=function(n){Frn(this.a,BB(n,308).e)},vX(TYn,"BowyerWatsonTriangulation/lambda$1$Type",1769),wAn(1770,1,lVn,wn),MWn.td=function(n){BB(n,168)},vX(TYn,"BowyerWatsonTriangulation/lambda$2$Type",1770),wAn(1765,1,MYn,Ew),MWn.ue=function(n,t){return q3(this.a,BB(n,168),BB(t,168))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(TYn,"NaiveMinST/lambda$0$Type",1765),wAn(499,1,{},Tw),vX(TYn,"NodeMicroLayout",499),wAn(168,1,{168:1},xS),MWn.Fb=function(n){var t;return!!cL(n,168)&&(t=BB(n,168),cV(this.a,t.a)&&cV(this.b,t.b)||cV(this.a,t.b)&&cV(this.b,t.a))},MWn.Hb=function(){return KA(this.a)+KA(this.b)};var uit=vX(TYn,"TEdge",168);wAn(308,1,{308:1},ZFn),MWn.Fb=function(n){var t;return!!cL(n,308)&&K7(this,(t=BB(n,308)).a)&&K7(this,t.b)&&K7(this,t.c)},MWn.Hb=function(){return KA(this.a)+KA(this.b)+KA(this.c)},vX(TYn,"TTriangle",308),wAn(221,1,{221:1},I$),vX(TYn,"Tree",221),wAn(1254,1,{},CZ),vX(SYn,"Scanline",1254);var oit=bq(SYn,PYn);wAn(1692,1,{},ltn),vX(IYn,"CGraph",1692),wAn(307,1,{307:1},cZ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.g=0,MWn.i=0,MWn.k=KQn,vX(IYn,"CGroup",307),wAn(815,1,{},Xv),vX(IYn,"CGroup/CGroupBuilder",815),wAn(57,1,{57:1},AR),MWn.Ib=function(){return this.j?SD(this.j.Kb(this)):(ED(bit),bit.o+"@"+(PN(this)>>>0).toString(16))},MWn.f=0,MWn.i=KQn;var sit,hit,fit,lit,bit=vX(IYn,"CNode",57);wAn(814,1,{},Wv),vX(IYn,"CNode/CNodeBuilder",814),wAn(1525,1,{},dn),MWn.Oe=function(n,t){return 0},MWn.Pe=function(n,t){return 0},vX(IYn,OYn,1525),wAn(1790,1,{},gn),MWn.Le=function(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),57),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),307)).k=h,0==a.g&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),307)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),57),g=a.k+f.b.a,!Ghn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(Ffn(),FPt)||n.d==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),d=dA(n.d)?n.g.Oe(f,o):n.g.Pe(f,o),o.a.k=e.Math.max(o.a.k,f.i+f.d.b+d-o.b.a),cY(n,o,n.d)&&(o.a.k=e.Math.max(o.a.k,o.d.c-o.b.a)),--o.a.g,0==o.a.g&&DH(w,o.a)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),57)).d.c=t.i},vX(IYn,"LongestPathCompaction",1790),wAn(1690,1,{},yOn),MWn.e=!1;var wit,dit,git=vX(IYn,xYn,1690);wAn(1691,1,lVn,Mw),MWn.td=function(n){iun(this.a,BB(n,46))},vX(IYn,DYn,1691),wAn(1791,1,{},pn),MWn.Me=function(n){var t,e,i,r,c,a;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(e=BB(n0(i),57),c=new Wb(n.a.b);c.a<c.c.c.length;)e!=(r=BB(n0(c),57))&&(e.a&&e.a==r.a||(a=dA(n.d)?n.g.Pe(e,r):n.g.Oe(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&Rdn(r.d.d+r.d.a+a,e.d.d)&&Kdn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},vX(IYn,"QuadraticConstraintCalculation",1791),wAn(522,1,{522:1},Dp),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(IYn,RYn,522),wAn(803,1,{},RG),MWn.Me=function(n){this.c=n,pIn(this,new yn)},vX(IYn,KYn,803),wAn(1718,1,{679:1},fY),MWn.Ke=function(n){_Pn(this,BB(n,464))},vX(IYn,_Yn,1718),wAn(1719,1,MYn,vn),MWn.ue=function(n,t){return uQ(BB(n,57),BB(t,57))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IYn,FYn,1719),wAn(464,1,{464:1},OS),MWn.a=!1,vX(IYn,BYn,464),wAn(1720,1,MYn,mn),MWn.ue=function(n,t){return Jkn(BB(n,464),BB(t,464))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IYn,HYn,1720),wAn(1721,1,qYn,yn),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(IYn,"ScanlineConstraintCalculator/lambda$1$Type",1721),wAn(428,22,{3:1,35:1,22:1,428:1},FS);var pit,vit,mit,yit=Ben(GYn,"HighLevelSortingCriterion",428,Unt,rJ,l_);wAn(427,22,{3:1,35:1,22:1,427:1},BS);var kit,jit,Eit,Tit,Mit,Sit,Pit,Iit,Cit,Oit,Ait,$it,Lit,Nit,xit,Dit,Rit,Kit=Ben(GYn,"LowLevelSortingCriterion",427,Unt,cJ,b_),_it=bq(zYn,"ILayoutMetaDataProvider");wAn(853,1,QYn,Gh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,UYn),YYn),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),Iit),(PPn(),gMt)),Bit),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,XYn),YYn),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),Sit),gMt),Kit),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,WYn),YYn),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),Tit),gMt),yit),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,VYn),YYn),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(hN(),!0)),wMt),ktt),nbn(hMt))))},vX(GYn,"PolyominoOptions",853),wAn(250,22,{3:1,35:1,22:1,250:1},HS);var Fit,Bit=Ben(GYn,"TraversalStrategy",250,Unt,Tin,w_);wAn(213,1,{213:1},kn),MWn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},MWn.a=1,MWn.b=0,MWn.c=0,MWn.f=!1,MWn.g=0;var Hit=vX(JYn,"NEdge",213);wAn(176,1,{},Hv),vX(JYn,"NEdge/NEdgeBuilder",176),wAn(653,1,{},Fv),vX(JYn,"NGraph",653),wAn(121,1,{121:1},k6),MWn.c=-1,MWn.d=0,MWn.e=0,MWn.i=-1,MWn.j=!1;var qit=vX(JYn,"NNode",121);wAn(795,1,JQn,Bv),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Vc=function(n,t){++this.b,kG(this.a,n,t)},MWn.Fc=function(n){return RN(this,n)},MWn.Wc=function(n,t){return++this.b,ohn(this.a,n,t)},MWn.Gc=function(n){return++this.b,gun(this.a,n)},MWn.$b=function(){++this.b,this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Xb=function(n){return xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return L9(new Wb(this.a))},MWn.Yc=function(){throw Hp(new pv)},MWn.Zc=function(n){throw Hp(new pv)},MWn.$c=function(n){return++this.b,s6(this.a,n)},MWn.Mc=function(n){return KN(this,n)},MWn._c=function(n,t){return++this.b,c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.b=0,vX(JYn,"NNode/ChangeAwareArrayList",795),wAn(269,1,{},qv),vX(JYn,"NNode/NNodeBuilder",269),wAn(1630,1,{},jn),MWn.a=!1,MWn.f=DWn,MWn.j=0,vX(JYn,"NetworkSimplex",1630),wAn(1294,1,lVn,Sw),MWn.td=function(n){qzn(this.a,BB(n,680),!0,!1)},vX(nJn,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),wAn(558,1,{},Pw),MWn.b=!0,MWn.c=!0,MWn.d=!0,MWn.e=!0,vX(nJn,"NodeMarginCalculator",558),wAn(212,1,{212:1}),MWn.j=!1,MWn.k=!1;var Git,zit,Uit,Xit=vX(tJn,"Cell",212);wAn(124,212,{124:1,212:1},FR),MWn.Re=function(){return XH(this)},MWn.Se=function(){var n;return n=this.n,this.a.a+n.b+n.c},vX(tJn,"AtomicCell",124),wAn(232,22,{3:1,35:1,22:1,232:1},qS);var Wit,Vit=Ben(tJn,"ContainerArea",232,Unt,v1,d_);wAn(326,212,iJn),vX(tJn,"ContainerCell",326),wAn(1473,326,iJn,Hwn),MWn.Re=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].Re()):n=Ybn(this,Umn(this,!0)),n>0?n+this.n.d+this.n.a:0},MWn.Se=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].Se());else if(this.g)c=Ybn(this,Okn(this,null,!0));else for(Dtn(),i=0,r=(t=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)n=t[i],c=e.Math.max(c,Ybn(this,Okn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},MWn.Te=function(){var n,t,e,i,r;if(this.g)for(n=Okn(this,null,!1),Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n);else for(Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n=Okn(this,t,!1))},MWn.Ue=function(){var n,t,i,r;t=this.i,n=this.n,r=Umn(this,!1),Q5(this,(Dtn(),Git),t.d+n.d,r),Q5(this,Uit,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),Q5(this,zit,t.d+n.d+r[0]-(r[1]-i)/2,r)},MWn.b=null,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=!1;var Qit,Yit,Jit,Zit=0,nrt=0;vX(tJn,"GridContainerCell",1473),wAn(461,22,{3:1,35:1,22:1,461:1},GS);var trt,ert=Ben(tJn,"HorizontalLabelAlignment",461,Unt,m1,g_);wAn(306,212,{212:1,306:1},yJ,wtn,KY),MWn.Re=function(){return WH(this)},MWn.Se=function(){return VH(this)},MWn.a=0,MWn.c=!1;var irt,rrt,crt,art=vX(tJn,"LabelCell",306);wAn(244,326,{212:1,326:1,244:1},Cgn),MWn.Re=function(){return MCn(this)},MWn.Se=function(){return SCn(this)},MWn.Te=function(){_Fn(this)},MWn.Ue=function(){GFn(this)},MWn.b=0,MWn.c=0,MWn.d=!1,vX(tJn,"StripContainerCell",244),wAn(1626,1,DVn,En),MWn.Mb=function(n){return Qy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$0$Type",1626),wAn(1627,1,{},Tn),MWn.Fe=function(n){return BB(n,212).Se()},vX(tJn,"StripContainerCell/lambda$1$Type",1627),wAn(1628,1,DVn,Mn),MWn.Mb=function(n){return Yy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$2$Type",1628),wAn(1629,1,{},Sn),MWn.Fe=function(n){return BB(n,212).Re()},vX(tJn,"StripContainerCell/lambda$3$Type",1629),wAn(462,22,{3:1,35:1,22:1,462:1},zS);var urt,ort,srt,hrt,frt,lrt,brt,wrt,drt,grt,prt,vrt,mrt,yrt,krt,jrt,Ert,Trt,Mrt,Srt,Prt,Irt,Crt,Ort=Ben(tJn,"VerticalLabelAlignment",462,Unt,y1,p_);wAn(789,1,{},eUn),MWn.c=0,MWn.d=0,MWn.k=0,MWn.s=0,MWn.t=0,MWn.v=!1,MWn.w=0,MWn.D=!1,vX(sJn,"NodeContext",789),wAn(1471,1,MYn,Pn),MWn.ue=function(n,t){return YO(BB(n,61),BB(t,61))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/0methodref$comparePortSides$Type",1471),wAn(1472,1,MYn,In),MWn.ue=function(n,t){return UTn(BB(n,111),BB(t,111))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/1methodref$comparePortContexts$Type",1472),wAn(159,22,{3:1,35:1,22:1,159:1},ocn);var Art,$rt,Lrt,Nrt,xrt,Drt,Rrt,Krt=Ben(sJn,"NodeLabelLocation",159,Unt,tpn,v_);wAn(111,1,{111:1},MOn),MWn.a=!1,vX(sJn,"PortContext",111),wAn(1476,1,lVn,Cn),MWn.td=function(n){IE(BB(n,306))},vX(lJn,bJn,1476),wAn(1477,1,DVn,On),MWn.Mb=function(n){return!!BB(n,111).c},vX(lJn,wJn,1477),wAn(1478,1,lVn,An),MWn.td=function(n){IE(BB(n,111).c)},vX(lJn,"LabelPlacer/lambda$2$Type",1478),wAn(1475,1,lVn,Ln),MWn.td=function(n){qD(),Yp(BB(n,111))},vX(lJn,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),wAn(790,1,lVn,$_),MWn.td=function(n){RM(this.b,this.c,this.a,BB(n,181))},MWn.a=!1,MWn.c=!1,vX(lJn,"NodeLabelCellCreator/lambda$0$Type",790),wAn(1474,1,lVn,Iw),MWn.td=function(n){Cv(this.a,BB(n,181))},vX(lJn,"PortContextCreator/lambda$0$Type",1474),wAn(1829,1,{},Nn),vX(gJn,"GreedyRectangleStripOverlapRemover",1829),wAn(1830,1,MYn,$n),MWn.ue=function(n,t){return FN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),wAn(1786,1,{},Zv),MWn.a=5,MWn.e=0,vX(gJn,"RectangleStripOverlapRemover",1786),wAn(1787,1,MYn,Dn),MWn.ue=function(n,t){return BN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),wAn(1789,1,MYn,Rn),MWn.ue=function(n,t){return JU(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),wAn(406,22,{3:1,35:1,22:1,406:1},US);var _rt,Frt,Brt,Hrt,qrt,Grt=Ben(gJn,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Unt,Y2,m_);wAn(222,1,{222:1},xG),vX(gJn,"RectangleStripOverlapRemover/RectangleNode",222),wAn(1788,1,lVn,Cw),MWn.td=function(n){Imn(this.a,BB(n,222))},vX(gJn,"RectangleStripOverlapRemover/lambda$1$Type",1788),wAn(1304,1,MYn,Kn),MWn.ue=function(n,t){return zHn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),wAn(1307,1,{},_n),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),wAn(1308,1,DVn,Fn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),wAn(1309,1,DVn,Bn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),wAn(1302,1,MYn,Hn),MWn.ue=function(n,t){return WRn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),wAn(1305,1,{},xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),wAn(767,1,MYn,qn),MWn.ue=function(n,t){return Uan(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionsComparator",767),wAn(1300,1,MYn,Gn),MWn.ue=function(n,t){return Qin(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparator",1300),wAn(1301,1,MYn,zn),MWn.ue=function(n,t){return avn(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),wAn(1303,1,MYn,Un),MWn.ue=function(n,t){return BKn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),wAn(1306,1,{},Xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),wAn(777,1,{},DS),MWn.Ce=function(n,t){return O2(this,BB(n,46),BB(t,167))},vX(vJn,"SuccessorCombination",777),wAn(644,1,{},Wn),MWn.Ce=function(n,t){var e;return XCn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorJitter",644),wAn(643,1,{},Vn),MWn.Ce=function(n,t){var e;return bxn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorLineByLine",643),wAn(568,1,{},Qn),MWn.Ce=function(n,t){var e;return f$n((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorManhattan",568),wAn(1356,1,{},Yn),MWn.Ce=function(n,t){var e;return jNn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorMaxNormWindingInMathPosSense",1356),wAn(400,1,{},Ow),MWn.Ce=function(n,t){return BU(this,n,t)},MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=!1,vX(vJn,"SuccessorQuadrantsGeneric",400),wAn(1357,1,{},Jn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),wAn(323,22,{3:1,35:1,22:1,323:1},_S),MWn.a=!1;var zrt,Urt=Ben(EJn,TJn,323,Unt,n3,y_);wAn(1298,1,{}),MWn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=iln(0),r=0;r<this.o;r++)e+=""+n.a,n=iln(lR(n.a));for(e+="\n",n=iln(0),c=0;c<this.p;c++){for(e+=""+n.a,n=iln(lR(n.a)),i=0;i<this.o;i++)0==Vhn(t=trn(this,i,c),0)?e+="_":0==Vhn(t,1)?e+="X":e+="0";e+="\n"}return fx(e,0,e.length-1)},MWn.o=0,MWn.p=0,vX(EJn,"TwoBitGrid",1298),wAn(321,1298,{321:1},qwn),MWn.j=0,MWn.k=0,vX(EJn,"PlanarGrid",321),wAn(167,321,{321:1,167:1}),MWn.g=0,MWn.i=0,vX(EJn,"Polyomino",167);var Xrt=bq(CJn,OJn);wAn(134,1,AJn,Zn),MWn.Ye=function(n,t){return son(this,n,t)},MWn.Ve=function(){return Gq(this)},MWn.We=function(n){return mMn(this,n)},MWn.Xe=function(n){return Lx(this,n)},vX(CJn,"MapPropertyHolder",134),wAn(1299,134,AJn,yxn),vX(EJn,"Polyominoes",1299);var Wrt,Vrt,Qrt,Yrt,Jrt,Zrt,nct,tct,ect=!1;wAn(1766,1,lVn,nt),MWn.td=function(n){uqn(BB(n,221))},vX($Jn,"DepthFirstCompaction/0methodref$compactTree$Type",1766),wAn(810,1,lVn,Aw),MWn.td=function(n){KW(this.a,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$1$Type",810),wAn(1767,1,lVn,N_),MWn.td=function(n){dgn(this.a,this.b,this.c,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$2$Type",1767),wAn(65,1,{65:1},AZ),vX($Jn,"Node",65),wAn(1250,1,{},C$),vX($Jn,"ScanlineOverlapCheck",1250),wAn(1251,1,{679:1},hY),MWn.Ke=function(n){GD(this,BB(n,440))},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),wAn(1252,1,MYn,tt),MWn.ue=function(n,t){return xln(BB(n,65),BB(t,65))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),wAn(440,1,{440:1},RS),MWn.a=!1,vX($Jn,"ScanlineOverlapCheck/Timestamp",440),wAn(1253,1,MYn,et),MWn.ue=function(n,t){return Zkn(BB(n,440),BB(t,440))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/lambda$0$Type",1253),wAn(550,1,{},it),vX(LJn,"SVGImage",550),wAn(324,1,{324:1},x_),MWn.Ib=function(){return"("+this.a+FWn+this.b+FWn+this.c+")"},vX(LJn,"UniqueTriple",324),wAn(209,1,NJn),vX(xJn,"AbstractLayoutProvider",209),wAn(1132,209,NJn,rt),MWn.Ze=function(n,t){var e,i,r;OTn(t,DJn,1),this.a=Gy(MD(ZAn(n,(Epn(),Ect)))),P8(n,bct)&&(i=SD(ZAn(n,bct)),(e=XRn(cin(),i))&&BB(sJ(e.f),209).Ze(n,mcn(t,1))),r=new s4(this.a),this.b=Rzn(r,n),0===BB(ZAn(n,(Gsn(),oct)),481).g?(BOn(new ct,this.b),Ypn(n,gct,mMn(this.b,gct))):$T(),Uzn(r),Ypn(n,dct,this.b),HSn(t)},MWn.a=0,vX(RJn,"DisCoLayoutProvider",1132),wAn(1244,1,{},ct),MWn.c=!1,MWn.e=0,MWn.f=0,vX(RJn,"DisCoPolyominoCompactor",1244),wAn(561,1,{561:1},hG),MWn.b=!0,vX(KJn,"DCComponent",561),wAn(394,22,{3:1,35:1,22:1,394:1},KS),MWn.a=!1;var ict,rct,cct=Ben(KJn,"DCDirection",394,Unt,Z2,k_);wAn(266,134,{3:1,266:1,94:1,134:1},EAn),vX(KJn,"DCElement",266),wAn(395,1,{395:1},Cmn),MWn.c=0,vX(KJn,"DCExtension",395),wAn(755,134,AJn,_j),vX(KJn,"DCGraph",755),wAn(481,22,{3:1,35:1,22:1,481:1},Cx);var act,uct,oct,sct,hct,fct,lct,bct,wct,dct,gct,pct,vct,mct,yct,kct,jct,Ect,Tct,Mct,Sct,Pct=Ben(_Jn,FJn,481,Unt,RV,j_);wAn(854,1,QYn,Hh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,BJn),zJn),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),sct),(PPn(),gMt)),Pct),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,HJn),zJn),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),yMt),Qtt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,qJn),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),mMt),Ant),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,GJn),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),mMt),Ant),nbn(hMt)))),BBn((new qh,n))},vX(_Jn,"DisCoMetaDataProvider",854),wAn(998,1,QYn,qh),MWn.Qe=function(n){BBn(n)},vX(_Jn,"DisCoOptions",998),wAn(999,1,{},at),MWn.$e=function(){return new rt},MWn._e=function(n){},vX(_Jn,"DisCoOptions/DiscoFactory",999),wAn(562,167,{321:1,167:1,562:1},Q$n),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX("org.eclipse.elk.alg.disco.structures","DCPolyomino",562),wAn(1268,1,DVn,ut),MWn.Mb=function(n){return TO(n)},vX(YJn,"ElkGraphComponentsProcessor/lambda$0$Type",1268),wAn(1269,1,{},ot),MWn.Kb=function(n){return MQ(),PMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$1$Type",1269),wAn(1270,1,DVn,st),MWn.Mb=function(n){return qH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$2$Type",1270),wAn(1271,1,{},ht),MWn.Kb=function(n){return MQ(),OMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$3$Type",1271),wAn(1272,1,DVn,ft),MWn.Mb=function(n){return GH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$4$Type",1272),wAn(1273,1,DVn,$w),MWn.Mb=function(n){return MJ(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$5$Type",1273),wAn(1274,1,{},Lw),MWn.Kb=function(n){return KX(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$6$Type",1274),wAn(1241,1,{},s4),MWn.a=0,vX(YJn,"ElkGraphTransformer",1241),wAn(1242,1,{},lt),MWn.Od=function(n,t){tOn(this,BB(n,160),BB(t,266))},vX(YJn,"ElkGraphTransformer/OffsetApplier",1242),wAn(1243,1,lVn,Nw),MWn.td=function(n){TL(this,BB(n,8))},vX(YJn,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),wAn(753,1,{},bt),vX(eZn,iZn,753),wAn(1232,1,MYn,wt),MWn.ue=function(n,t){return ICn(BB(n,231),BB(t,231))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(eZn,rZn,1232),wAn(740,209,NJn,Gv),MWn.Ze=function(n,t){vLn(this,n,t)},vX(eZn,"ForceLayoutProvider",740),wAn(357,134,{3:1,357:1,94:1,134:1}),vX(cZn,"FParticle",357),wAn(559,357,{3:1,559:1,357:1,94:1,134:1},hX),MWn.Ib=function(){var n;return this.a?(n=E7(this.a.a,this,0))>=0?"b"+n+"["+u5(this.a)+"]":"b["+u5(this.a)+"]":"b_"+PN(this)},vX(cZn,"FBendpoint",559),wAn(282,134,{3:1,282:1,94:1,134:1},CR),MWn.Ib=function(){return u5(this)},vX(cZn,"FEdge",282),wAn(231,134,{3:1,231:1,94:1,134:1},y6);var Ict,Cct,Oct,Act,$ct,Lct,Nct,xct,Dct,Rct,Kct=vX(cZn,"FGraph",231);wAn(447,357,{3:1,447:1,357:1,94:1,134:1},m4),MWn.Ib=function(){return null==this.b||0==this.b.length?"l["+u5(this.a)+"]":"l_"+this.b},vX(cZn,"FLabel",447),wAn(144,357,{3:1,144:1,357:1,94:1,134:1},qX),MWn.Ib=function(){return p0(this)},MWn.b=0,vX(cZn,"FNode",144),wAn(2003,1,{}),MWn.bf=function(n){sFn(this,n)},MWn.cf=function(){qmn(this)},MWn.d=0,vX(uZn,"AbstractForceModel",2003),wAn(631,2003,{631:1},Lan),MWn.af=function(n,t){var i,r,c,a;return tCn(this.f,n,t),c=XR(B$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-lW(n.e)/2-lW(t.e)/2),kL(c,((i=qon(this.e,n,t))>0?-_U(r,this.c)*i:xx(r,this.b)*BB(mMn(n,(fRn(),Zct)),19).a)/a),c},MWn.bf=function(n){sFn(this,n),this.a=BB(mMn(n,(fRn(),qct)),19).a,this.c=Gy(MD(mMn(n,cat))),this.b=Gy(MD(mMn(n,tat)))},MWn.df=function(n){return n<this.a},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"EadesModel",631),wAn(632,2003,{632:1},fH),MWn.af=function(n,t){var i,r,c,a,u;return tCn(this.f,n,t),c=XR(B$(t.d),n.d),u=e.Math.sqrt(c.a*c.a+c.b*c.b),a=Nx(r=e.Math.max(0,u-lW(n.e)/2-lW(t.e)/2),this.a)*BB(mMn(n,(fRn(),Zct)),19).a,(i=qon(this.e,n,t))>0&&(a-=Sy(r,this.a)*i),kL(c,a*this.b/u),c},MWn.bf=function(n){var t,i,r,c,a,u,o;for(sFn(this,n),this.b=Gy(MD(mMn(n,(fRn(),aat)))),this.c=this.b/BB(mMn(n,qct),19).a,r=n.e.c.length,a=0,c=0,o=new Wb(n.e);o.a<o.c.c.length;)a+=(u=BB(n0(o),144)).e.a,c+=u.e.b;t=a*c,i=Gy(MD(mMn(n,cat)))*fJn,this.a=e.Math.sqrt(t/(2*r))*i},MWn.cf=function(){qmn(this),this.b-=this.c},MWn.df=function(n){return this.b>0},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"FruchtermanReingoldModel",632),wAn(849,1,QYn,zh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,oZn),""),"Force Model"),"Determines the model for force calculation."),Oct),(PPn(),gMt)),$at),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,sZn),""),"Iterations"),"The number of iterations on the force model."),iln(300)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,hZn),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,fZn),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),lZn),dMt),Ptt),nbn(hMt)))),a2(n,fZn,oZn,xct),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,bZn),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dMt),Ptt),nbn(hMt)))),a2(n,bZn,oZn,$ct),pUn((new Uh,n))},vX(wZn,"ForceMetaDataProvider",849),wAn(424,22,{3:1,35:1,22:1,424:1},XS);var _ct,Fct,Bct,Hct,qct,Gct,zct,Uct,Xct,Wct,Vct,Qct,Yct,Jct,Zct,nat,tat,eat,iat,rat,cat,aat,uat,oat,sat,hat,fat,lat,bat,wat,dat,gat,pat,vat,mat,yat,kat,jat,Eat,Tat,Mat,Sat,Pat,Iat,Cat,Oat,Aat,$at=Ben(wZn,"ForceModelStrategy",424,Unt,aJ,E_);wAn(988,1,QYn,Uh),MWn.Qe=function(n){pUn(n)},vX(wZn,"ForceOptions",988),wAn(989,1,{},dt),MWn.$e=function(){return new Gv},MWn._e=function(n){},vX(wZn,"ForceOptions/ForceFactory",989),wAn(850,1,QYn,Xh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,NZn),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(hN(),!1)),(PPn(),wMt)),ktt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,xZn),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,DZn),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),bat),gMt),Hat),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,RZn),""),"Stress Epsilon"),"Termination criterion for the iterative process."),lZn),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,KZn),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),iln(DWn)),vMt),Att),nbn(hMt)))),UGn((new Wh,n))},vX(wZn,"StressMetaDataProvider",850),wAn(992,1,QYn,Wh),MWn.Qe=function(n){UGn(n)},vX(wZn,"StressOptions",992),wAn(993,1,{},gt),MWn.$e=function(){return new OR},MWn._e=function(n){},vX(wZn,"StressOptions/StressFactory",993),wAn(1128,209,NJn,OR),MWn.Ze=function(n,t){var e,i,r,c;for(OTn(t,FZn,1),qy(TD(ZAn(n,(rkn(),kat))))?qy(TD(ZAn(n,Pat)))||jJ(new Tw((GM(),new Dy(n)))):vLn(new Gv,n,mcn(t,1)),i=fon(n),c=(e=HFn(this.a,i)).Kc();c.Ob();)(r=BB(c.Pb(),231)).e.c.length<=1||(HHn(this.b,r),i$n(this.b),Otn(r.d,new pt));SUn(i=GUn(e)),HSn(t)},vX(HZn,"StressLayoutProvider",1128),wAn(1129,1,lVn,pt),MWn.td=function(n){_Bn(BB(n,447))},vX(HZn,"StressLayoutProvider/lambda$0$Type",1129),wAn(990,1,{},Tv),MWn.c=0,MWn.e=0,MWn.g=0,vX(HZn,"StressMajorization",990),wAn(379,22,{3:1,35:1,22:1,379:1},WS);var Lat,Nat,xat,Dat,Rat,Kat,_at,Fat,Bat,Hat=Ben(HZn,"StressMajorization/Dimension",379,Unt,j1,T_);wAn(991,1,MYn,xw),MWn.ue=function(n,t){return SK(this.a,BB(n,144),BB(t,144))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(HZn,"StressMajorization/lambda$0$Type",991),wAn(1229,1,{},D0),vX(GZn,"ElkLayered",1229),wAn(1230,1,lVn,vt),MWn.td=function(n){RCn(BB(n,37))},vX(GZn,"ElkLayered/lambda$0$Type",1230),wAn(1231,1,lVn,Dw),MWn.td=function(n){PK(this.a,BB(n,37))},vX(GZn,"ElkLayered/lambda$1$Type",1231),wAn(1263,1,{},$$),vX(GZn,"GraphConfigurator",1263),wAn(759,1,lVn,Rw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$0$Type",759),wAn(760,1,{},mt),MWn.Kb=function(n){return tjn(),new Rq(null,new w1(BB(n,29).a,16))},vX(GZn,"GraphConfigurator/lambda$1$Type",760),wAn(761,1,lVn,Kw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$2$Type",761),wAn(1127,209,NJn,Uv),MWn.Ze=function(n,t){var e;e=SBn(new tm,n),GC(ZAn(n,(HXn(),sgt)))===GC((ufn(),pIt))?rwn(this.a,e,t):wOn(this.a,e,t),gUn(new Qh,e)},vX(GZn,"LayeredLayoutProvider",1127),wAn(356,22,{3:1,35:1,22:1,356:1},VS);var qat,Gat,zat,Uat=Ben(GZn,"LayeredPhases",356,Unt,s5,M_);wAn(1651,1,{},vin),MWn.i=0,vX(zZn,"ComponentsToCGraphTransformer",1651),wAn(1652,1,{},yt),MWn.ef=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(zZn,"ComponentsToCGraphTransformer/1",1652),wAn(81,1,{81:1}),MWn.i=0,MWn.k=!0,MWn.o=KQn;var Xat,Wat,Vat,Qat=vX(UZn,"CNode",81);wAn(460,81,{460:1,81:1},NN,Sgn),MWn.Ib=function(){return""},vX(zZn,"ComponentsToCGraphTransformer/CRectNode",460),wAn(1623,1,{},kt),vX(zZn,"OneDimensionalComponentsCompaction",1623),wAn(1624,1,{},jt),MWn.Kb=function(n){return xZ(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),wAn(1625,1,{},Et),MWn.Kb=function(n){return Ewn(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),wAn(1654,1,{},BX),vX(UZn,"CGraph",1654),wAn(189,1,{189:1},Pgn),MWn.b=0,MWn.c=0,MWn.e=0,MWn.g=!0,MWn.i=KQn,vX(UZn,"CGroup",189),wAn(1653,1,{},Pt),MWn.ef=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(UZn,OYn,1653),wAn(1655,1,{},sOn),MWn.d=!1;var Yat=vX(UZn,xYn,1655);wAn(1656,1,{},It),MWn.Kb=function(n){return kM(),hN(),0!=BB(BB(n,46).a,81).d.e},MWn.Fb=function(n){return this===n},vX(UZn,DYn,1656),wAn(823,1,{},Sq),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(UZn,RYn,823),wAn(1825,1,{},DG),vX(XZn,KYn,1825);var Jat=bq(WZn,PYn);wAn(1826,1,{369:1},lY),MWn.Ke=function(n){Gxn(this,BB(n,466))},vX(XZn,_Yn,1826),wAn(1827,1,MYn,Ct),MWn.ue=function(n,t){return oQ(BB(n,81),BB(t,81))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,FYn,1827),wAn(466,1,{466:1},fP),MWn.a=!1,vX(XZn,BYn,466),wAn(1828,1,MYn,Ot),MWn.ue=function(n,t){return njn(BB(n,466),BB(t,466))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,HYn,1828),wAn(140,1,{140:1},dP,mH),MWn.Fb=function(n){var t;return null!=n&&iut==tsn(n)&&(t=BB(n,140),cV(this.c,t.c)&&cV(this.d,t.d))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d]))},MWn.Ib=function(){return"("+this.c+FWn+this.d+(this.a?"cx":"")+this.b+")"},MWn.a=!0,MWn.c=0,MWn.d=0;var Zat,nut,tut,eut,iut=vX(WZn,"Point",140);wAn(405,22,{3:1,35:1,22:1,405:1},QS);var rut,cut,aut,uut,out,sut,hut,fut,lut,but,wut,dut=Ben(WZn,"Point/Quadrant",405,Unt,t3,S_);wAn(1642,1,{},Vv),MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,MWn.f=null,vX(WZn,"RectilinearConvexHull",1642),wAn(574,1,{369:1},Tpn),MWn.Ke=function(n){_9(this,BB(n,140))},MWn.b=0,vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler",574),wAn(1644,1,MYn,Mt),MWn.ue=function(n,t){return DV(MD(n),MD(t))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),wAn(1643,1,{369:1},ftn),MWn.Ke=function(n){PNn(this,BB(n,140))},MWn.a=0,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(WZn,"RectilinearConvexHull/RectangleEventHandler",1643),wAn(1645,1,MYn,St),MWn.ue=function(n,t){return u0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$0$Type",1645),wAn(1646,1,MYn,Tt),MWn.ue=function(n,t){return o0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$1$Type",1646),wAn(1647,1,MYn,At),MWn.ue=function(n,t){return h0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$2$Type",1647),wAn(1648,1,MYn,$t),MWn.ue=function(n,t){return s0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$3$Type",1648),wAn(1649,1,MYn,Lt),MWn.ue=function(n,t){return jMn(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$4$Type",1649),wAn(1650,1,{},OZ),vX(WZn,"Scanline",1650),wAn(2005,1,{}),vX(VZn,"AbstractGraphPlacer",2005),wAn(325,1,{325:1},Xx),MWn.mf=function(n){return!!this.nf(n)&&(JCn(this.b,BB(mMn(n,(hWn(),Xft)),21),n),!0)},MWn.nf=function(n){var t,e,i;for(t=BB(mMn(n,(hWn(),Xft)),21),i=BB(h6(fut,t),21).Kc();i.Ob();)if(e=BB(i.Pb(),21),!BB(h6(this.b,e),15).dc())return!1;return!0},vX(VZn,"ComponentGroup",325),wAn(765,2005,{},Qv),MWn.of=function(n){var t;for(t=new Wb(this.a);t.a<t.c.c.length;)if(BB(n0(t),325).mf(n))return;WB(this.a,new Xx(n))},MWn.lf=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)i=BB(r.Pb(),37),this.of(i);for(w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;)h=TXn(u=BB(n0(s),325),c),w9(TX(u.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GC(mMn(a,Zdt))===GC((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(e=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),e.e);UR(kO(t.f),e.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupGraphPlacer",765),wAn(1293,765,{},hm),MWn.of=function(n){pfn(this,n)},MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)pfn(this,BB(r.Pb(),37));for(v=new Gj,p=new Gj,d=new Gj,w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;){if(u=BB(n0(s),325),dA(BB(mMn(t,(sWn(),bSt)),103))){for(d.a=v.a,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),sCt))){d.a=p.a;break}}else if(gA(BB(mMn(t,bSt),103)))for(d.b=v.b,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),ICt))){d.b=p.b;break}if(h=TXn(BB(u,570),c),w9(TX(u.b),d.a,d.b),dA(BB(mMn(t,bSt),103))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),SCt))){v.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(gA(BB(mMn(t,bSt),103))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),oCt))){v.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GC(mMn(a,Zdt))===GC((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(i=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),i.e);UR(kO(t.f),i.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupModelOrderGraphPlacer",1293),wAn(423,22,{3:1,35:1,22:1,423:1},YS);var gut,put,vut,mut=Ben(VZn,"ComponentOrderingStrategy",423,Unt,k1,P_);wAn(650,1,{},Nt),vX(VZn,"ComponentsCompactor",650),wAn(1468,12,QQn,v5),MWn.Fc=function(n){return Yjn(this,BB(n,140))},vX(VZn,"ComponentsCompactor/Hullpoints",1468),wAn(1465,1,{841:1},hvn),MWn.a=!1,vX(VZn,"ComponentsCompactor/InternalComponent",1465),wAn(1464,1,pVn,Yv),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},vX(VZn,"ComponentsCompactor/InternalConnectedComponents",1464),wAn(1467,1,{594:1},dOn),MWn.hf=function(){return null},MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalExternalExtension",1467),wAn(1466,1,{594:1},nm),MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.hf=function(){return this.c},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalUnionExternalExtension",1466),wAn(1470,1,{},Qxn),vX(VZn,"ComponentsCompactor/OuterSegments",1470),wAn(1469,1,{},Jv),vX(VZn,"ComponentsCompactor/Segments",1469),wAn(1264,1,{},bY),vX(VZn,iZn,1264),wAn(1265,1,MYn,xt),MWn.ue=function(n,t){return b0(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"ComponentsProcessor/lambda$0$Type",1265),wAn(570,325,{325:1,570:1},p5),MWn.mf=function(n){return dsn(this,n)},MWn.nf=function(n){return bNn(this,n)},vX(VZn,"ModelOrderComponentGroup",570),wAn(1291,2005,{},Dt),MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;if(1!=n.gc()){if(n.dc())return t.a.c=x8(Ant,HWn,1,0,5,1),t.f.a=0,void(t.f.b=0);if(GC(mMn(t,(HXn(),Idt)))===GC((Bfn(),wut))){for(s=n.Kc();s.Ob();){for(p=0,d=new Wb((u=BB(s.Pb(),37)).a);d.a<d.c.c.length;)w=BB(n0(d),10),p+=BB(mMn(w,hpt),19).a;u.p=p}SQ(),n.ad(new Rt)}for(a=BB(n.Xb(0),37),t.a.c=x8(Ant,HWn,1,0,5,1),qan(t,a),b=0,y=0,h=n.Kc();h.Ob();)v=(u=BB(h.Pb(),37)).f,b=e.Math.max(b,v.a),y+=v.a*v.b;for(b=e.Math.max(b,e.Math.sqrt(y)*Gy(MD(mMn(t,Edt)))),k=0,j=0,l=0,i=c=Gy(MD(mMn(t,mpt))),o=n.Kc();o.Ob();)k+(v=(u=BB(o.Pb(),37)).f).a>b&&(k=0,j+=l+c,l=0),ZRn(u,k+(g=u.c).a,j+g.b),kO(g),i=e.Math.max(i,k+v.a),l=e.Math.max(l,v.b),k+=v.a+c;if(t.f.a=i,t.f.b=j+l,qy(TD(mMn(a,Mdt)))){for(KXn(r=new Nt,n,c),f=n.Kc();f.Ob();)UR(kO(BB(f.Pb(),37).c),r.e);UR(kO(t.f),r.a)}d9(t,n)}else(m=BB(n.Xb(0),37))!=t&&(t.a.c=x8(Ant,HWn,1,0,5,1),$Kn(t,m,0,0),qan(t,m),kQ(t.d,m.d),t.f.a=m.f.a,t.f.b=m.f.b)},vX(VZn,"SimpleRowGraphPlacer",1291),wAn(1292,1,MYn,Rt),MWn.ue=function(n,t){return zan(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"SimpleRowGraphPlacer/1",1292),wAn(1262,1,qYn,Kt),MWn.Lb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},vX(ZZn,"CompoundGraphPostprocessor/1",1262),wAn(1261,1,n1n,em),MWn.pf=function(n,t){mvn(this,BB(n,37),t)},vX(ZZn,"CompoundGraphPreprocessor",1261),wAn(441,1,{441:1},zfn),MWn.c=!1,vX(ZZn,"CompoundGraphPreprocessor/ExternalPort",441),wAn(243,1,{243:1},L_),MWn.Ib=function(){return dx(this.c)+":"+OCn(this.b)},vX(ZZn,"CrossHierarchyEdge",243),wAn(763,1,MYn,_w),MWn.ue=function(n,t){return Vyn(this,BB(n,243),BB(t,243))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(ZZn,"CrossHierarchyEdgeComparator",763),wAn(299,134,{3:1,299:1,94:1,134:1}),MWn.p=0,vX(t1n,"LGraphElement",299),wAn(17,299,{3:1,17:1,299:1,94:1,134:1},wY),MWn.Ib=function(){return OCn(this)};var yut=vX(t1n,"LEdge",17);wAn(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},min),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.b)},MWn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+LMn(this.a):0==this.a.c.length?"G-layered"+LMn(this.b):"G[layerless"+LMn(this.a)+", layers"+LMn(this.b)+"]"};var kut,jut=vX(t1n,"LGraph",37);wAn(657,1,{}),MWn.qf=function(){return this.e.n},MWn.We=function(n){return mMn(this.e,n)},MWn.rf=function(){return this.e.o},MWn.sf=function(){return this.e.p},MWn.Xe=function(n){return Lx(this.e,n)},MWn.tf=function(n){this.e.n.a=n.a,this.e.n.b=n.b},MWn.uf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},MWn.vf=function(n){this.e.p=n},vX(t1n,"LGraphAdapters/AbstractLShapeAdapter",657),wAn(577,1,{839:1},Fw),MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(this.a.b.c.length),t=new Wb(this.a.b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.b=null,vX(t1n,"LGraphAdapters/LEdgeAdapter",577),wAn(656,1,{},HV),MWn.xf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Np,e=new Wb(this.a.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),this.c.Mb(i)&&(WB(this.b,new __(this,i,this.e)),this.d)){if(Lx(i,(hWn(),Klt)))for(t=BB(mMn(i,Klt),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1));if(Lx(i,Dft))for(t=BB(mMn(i,Dft),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1))}return this.b},MWn.qf=function(){throw Hp(new tk(i1n))},MWn.We=function(n){return mMn(this.a,n)},MWn.rf=function(){return this.a.f},MWn.sf=function(){return this.a.p},MWn.Xe=function(n){return Lx(this.a,n)},MWn.tf=function(n){throw Hp(new tk(i1n))},MWn.uf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},MWn.vf=function(n){this.a.p=n},MWn.b=null,MWn.d=!1,MWn.e=!1,vX(t1n,"LGraphAdapters/LGraphAdapter",656),wAn(576,657,{181:1},Bw),vX(t1n,"LGraphAdapters/LLabelAdapter",576),wAn(575,657,{680:1},__),MWn.yf=function(){return this.b},MWn.zf=function(){return SQ(),SQ(),set},MWn.wf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.e,10).b.c.length),t=new Wb(BB(this.e,10).b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.a,new Bw(n));return this.a},MWn.Af=function(){var n;return new HR((n=BB(this.e,10).d).d,n.c,n.a,n.b)},MWn.Bf=function(){return SQ(),SQ(),set},MWn.Cf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.e,10).j.c.length),t=new Wb(BB(this.e,10).j);t.a<t.c.c.length;)n=BB(n0(t),11),WB(this.c,new gP(n,this.d));return this.c},MWn.Df=function(){return qy(TD(mMn(BB(this.e,10),(hWn(),_ft))))},MWn.Ef=function(n){BB(this.e,10).d.b=n.b,BB(this.e,10).d.d=n.d,BB(this.e,10).d.c=n.c,BB(this.e,10).d.a=n.a},MWn.Ff=function(n){BB(this.e,10).f.b=n.b,BB(this.e,10).f.d=n.d,BB(this.e,10).f.c=n.c,BB(this.e,10).f.a=n.a},MWn.Gf=function(){Ntn(this,(gM(),kut))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LNodeAdapter",575),wAn(1722,657,{838:1},gP),MWn.zf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Cut))return SQ(),SQ(),set;if(!this.a){for(this.a=new Np,e=new Wb(BB(this.e,11).e);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.a,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(fbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.a,new Fw(n))}return this.a},MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(BB(this.e,11).f.c.length),t=new Wb(BB(this.e,11).f);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.Bf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Cut))return SQ(),SQ(),set;if(!this.c){for(this.c=new Np,e=new Wb(BB(this.e,11).g);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.c,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(lbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.c,new Fw(n))}return this.c},MWn.Hf=function(){return BB(this.e,11).j},MWn.If=function(){return qy(TD(mMn(BB(this.e,11),(hWn(),elt))))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LPortAdapter",1722),wAn(1723,1,MYn,_t),MWn.ue=function(n,t){return WDn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t1n,"LGraphAdapters/PortComparator",1723),wAn(804,1,DVn,Ft),MWn.Mb=function(n){return BB(n,10),gM(),!0},vX(t1n,"LGraphAdapters/lambda$0$Type",804),wAn(392,299,{3:1,299:1,392:1,94:1,134:1}),vX(t1n,"LShape",392),wAn(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},qj,O$),MWn.Ib=function(){var n;return null==(n=YH(this))?"label":"l_"+n},vX(t1n,"LLabel",70),wAn(207,1,{3:1,4:1,207:1,414:1}),MWn.Fb=function(n){var t;return!!cL(n,207)&&(t=BB(n,207),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},MWn.Hb=function(){var n,t;return n=VO(this.b)<<16,n|=VO(this.a)&QVn,t=VO(this.c)<<16,n^(t|=VO(this.d)&QVn)},MWn.Jf=function(n){var t,e,i,r,c,a,u,o,s;for(r=0;r<n.length&&Dhn((b1(r,n.length),n.charCodeAt(r)),o1n);)++r;for(t=n.length;t>0&&Dhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(r<t){o=kKn(n.substr(r,t-r),",|;");try{for(a=0,u=(c=o).length;a<u;++a){if(2!=(i=kKn(c[a],"=")).length)throw Hp(new _y("Expecting a list of key-value pairs."));e=RMn(i[0]),s=bSn(RMn(i[1])),mK(e,"top")?this.d=s:mK(e,"left")?this.b=s:mK(e,"bottom")?this.a=s:mK(e,"right")&&(this.c=s)}}catch(h){throw cL(h=lun(h),127)?Hp(new _y(h1n+h)):Hp(h)}}},MWn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"Spacing",207),wAn(142,207,l1n,lm,lA,HR,A_);var Eut=vX(f1n,"ElkMargin",142);wAn(651,142,l1n,fm),vX(t1n,"LMargin",651),wAn(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},$vn),MWn.Ib=function(){return $pn(this)},MWn.i=!1;var Tut,Mut,Sut,Put,Iut,Cut,Out=vX(t1n,"LNode",10);wAn(267,22,{3:1,35:1,22:1,267:1},JS);var Aut,$ut=Ben(t1n,"LNode/NodeType",267,Unt,u9,C_);wAn(116,207,b1n,bm,WA,O_);var Lut,Nut,xut,Dut,Rut,Kut,_ut=vX(f1n,"ElkPadding",116);wAn(764,116,b1n,wm),vX(t1n,"LPadding",764),wAn(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},ISn),MWn.Ib=function(){var n,t,e;return oO(((n=new Ik).a+="p_",n),pyn(this)),this.i&&oO(uO((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&BB(xq(this.e,0),17).c!=this&&(t=BB(xq(this.e,0),17).c,oO((n.a+=" << ",n),pyn(t)),oO(uO((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&BB(xq(this.g,0),17).d!=this&&(e=BB(xq(this.g,0),17).d,oO((n.a+=" >> ",n),pyn(e)),oO(uO((n.a+="[",n),e.i),"]")),n.a},MWn.c=!0,MWn.d=!1;var Fut,But,Hut,qut,Gut=vX(t1n,"LPort",11);wAn(397,1,pVn,Hw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new qw(new Wb(this.a.e))},vX(t1n,"LPort/1",397),wAn(1290,1,QWn,qw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).c},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/1/1",1290),wAn(359,1,pVn,Gw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new zw(new Wb(this.a.g))},vX(t1n,"LPort/2",359),wAn(762,1,QWn,zw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).d},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/2/1",762),wAn(1283,1,pVn,hP),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new m6(this)},vX(t1n,"LPort/CombineIter",1283),wAn(201,1,QWn,m6),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){uE()},MWn.Ob=function(){return zN(this)},MWn.Pb=function(){return y$(this.a)?n0(this.a):n0(this.b)},vX(t1n,"LPort/CombineIter/1",201),wAn(1285,1,qYn,Bt),MWn.Lb=function(n){return Az(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).e.c.length},vX(t1n,"LPort/lambda$0$Type",1285),wAn(1284,1,qYn,Ht),MWn.Lb=function(n){return $z(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).g.c.length},vX(t1n,"LPort/lambda$1$Type",1284),wAn(1286,1,qYn,qt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),sCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),sCt)},vX(t1n,"LPort/lambda$2$Type",1286),wAn(1287,1,qYn,Gt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),oCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),oCt)},vX(t1n,"LPort/lambda$3$Type",1287),wAn(1288,1,qYn,zt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),SCt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),SCt)},vX(t1n,"LPort/lambda$4$Type",1288),wAn(1289,1,qYn,Ut),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),ICt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),ICt)},vX(t1n,"LPort/lambda$5$Type",1289),wAn(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},HX),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},MWn.Ib=function(){return"L_"+E7(this.b.b,this,0)+LMn(this.a)},vX(t1n,"Layer",29),wAn(1342,1,{},tm),vX(d1n,g1n,1342),wAn(1346,1,{},Xt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),wAn(1349,1,{},Wt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),wAn(1343,1,lVn,Uw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,p1n,1343),wAn(1344,1,lVn,Xw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,v1n,1344),wAn(1345,1,{},Vt),MWn.Kb=function(n){return new Rq(null,new w1(pV(BB(n,79)),16))},vX(d1n,m1n,1345),wAn(1347,1,DVn,Ww),MWn.Mb=function(n){return _A(this.a,BB(n,33))},vX(d1n,y1n,1347),wAn(1348,1,{},Qt),MWn.Kb=function(n){return new Rq(null,new w1(vV(BB(n,79)),16))},vX(d1n,"ElkGraphImporter/lambda$5$Type",1348),wAn(1350,1,DVn,Vw),MWn.Mb=function(n){return FA(this.a,BB(n,33))},vX(d1n,"ElkGraphImporter/lambda$7$Type",1350),wAn(1351,1,DVn,Yt),MWn.Mb=function(n){return AQ(BB(n,79))},vX(d1n,"ElkGraphImporter/lambda$8$Type",1351),wAn(1278,1,{},Qh),vX(d1n,"ElkGraphLayoutTransferrer",1278),wAn(1279,1,DVn,Qw),MWn.Mb=function(n){return JR(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),wAn(1280,1,lVn,Yw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),wAn(1281,1,DVn,Jw),MWn.Mb=function(n){return UD(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),wAn(1282,1,lVn,Zw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),wAn(1485,1,n1n,Jt),MWn.pf=function(n,t){Vrn(BB(n,37),t)},vX(j1n,"CommentNodeMarginCalculator",1485),wAn(1486,1,{},Zt),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"CommentNodeMarginCalculator/lambda$0$Type",1486),wAn(1487,1,lVn,ne),MWn.td=function(n){tHn(BB(n,10))},vX(j1n,"CommentNodeMarginCalculator/lambda$1$Type",1487),wAn(1488,1,n1n,te),MWn.pf=function(n,t){aDn(BB(n,37),t)},vX(j1n,"CommentPostprocessor",1488),wAn(1489,1,n1n,ee),MWn.pf=function(n,t){uUn(BB(n,37),t)},vX(j1n,"CommentPreprocessor",1489),wAn(1490,1,n1n,ie),MWn.pf=function(n,t){jLn(BB(n,37),t)},vX(j1n,"ConstraintsPostprocessor",1490),wAn(1491,1,n1n,re),MWn.pf=function(n,t){can(BB(n,37),t)},vX(j1n,"EdgeAndLayerConstraintEdgeReverser",1491),wAn(1492,1,n1n,ce),MWn.pf=function(n,t){Gwn(BB(n,37),t)},vX(j1n,"EndLabelPostprocessor",1492),wAn(1493,1,{},ae),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPostprocessor/lambda$0$Type",1493),wAn(1494,1,DVn,ue),MWn.Mb=function(n){return MY(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$1$Type",1494),wAn(1495,1,lVn,oe),MWn.td=function(n){ejn(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$2$Type",1495),wAn(1496,1,n1n,se),MWn.pf=function(n,t){ZPn(BB(n,37),t)},vX(j1n,"EndLabelPreprocessor",1496),wAn(1497,1,{},he),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPreprocessor/lambda$0$Type",1497),wAn(1498,1,lVn,D_),MWn.td=function(n){KM(this.a,this.b,this.c,BB(n,10))},MWn.a=0,MWn.b=0,MWn.c=!1,vX(j1n,"EndLabelPreprocessor/lambda$1$Type",1498),wAn(1499,1,DVn,fe),MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),XPt))},vX(j1n,"EndLabelPreprocessor/lambda$2$Type",1499),wAn(1500,1,lVn,nd),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$3$Type",1500),wAn(1501,1,DVn,le),MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),UPt))},vX(j1n,"EndLabelPreprocessor/lambda$4$Type",1501),wAn(1502,1,lVn,td),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$5$Type",1502),wAn(1551,1,n1n,Vh),MWn.pf=function(n,t){Iln(BB(n,37),t)},vX(j1n,"EndLabelSorter",1551),wAn(1552,1,MYn,be),MWn.ue=function(n,t){return Hgn(BB(n,456),BB(t,456))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"EndLabelSorter/1",1552),wAn(456,1,{456:1},TQ),vX(j1n,"EndLabelSorter/LabelGroup",456),wAn(1553,1,{},we),MWn.Kb=function(n){return EM(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelSorter/lambda$0$Type",1553),wAn(1554,1,DVn,de),MWn.Mb=function(n){return EM(),BB(n,10).k==(uSn(),Iut)},vX(j1n,"EndLabelSorter/lambda$1$Type",1554),wAn(1555,1,lVn,ge),MWn.td=function(n){oSn(BB(n,10))},vX(j1n,"EndLabelSorter/lambda$2$Type",1555),wAn(1556,1,DVn,pe),MWn.Mb=function(n){return EM(),GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),UPt))},vX(j1n,"EndLabelSorter/lambda$3$Type",1556),wAn(1557,1,DVn,ve),MWn.Mb=function(n){return EM(),GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),XPt))},vX(j1n,"EndLabelSorter/lambda$4$Type",1557),wAn(1503,1,n1n,me),MWn.pf=function(n,t){CHn(this,BB(n,37))},MWn.b=0,MWn.c=0,vX(j1n,"FinalSplineBendpointsCalculator",1503),wAn(1504,1,{},ye),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),wAn(1505,1,{},ke),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),wAn(1506,1,DVn,je),MWn.Mb=function(n){return!b5(BB(n,17))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),wAn(1507,1,DVn,Ee),MWn.Mb=function(n){return Lx(BB(n,17),(hWn(),Nlt))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),wAn(1508,1,lVn,ed),MWn.td=function(n){zKn(this.a,BB(n,128))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),wAn(1509,1,lVn,Te),MWn.td=function(n){JPn(BB(n,17).a)},vX(j1n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),wAn(792,1,n1n,id),MWn.pf=function(n,t){Vqn(this,BB(n,37),t)},vX(j1n,"GraphTransformer",792),wAn(511,22,{3:1,35:1,22:1,511:1},ZS);var zut,Uut,Xut,Wut=Ben(j1n,"GraphTransformer/Mode",511,Unt,uJ,tB);wAn(1510,1,n1n,Me),MWn.pf=function(n,t){exn(BB(n,37),t)},vX(j1n,"HierarchicalNodeResizingProcessor",1510),wAn(1511,1,n1n,Se),MWn.pf=function(n,t){lrn(BB(n,37),t)},vX(j1n,"HierarchicalPortConstraintProcessor",1511),wAn(1512,1,MYn,Pe),MWn.ue=function(n,t){return Cpn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),wAn(1513,1,n1n,Ie),MWn.pf=function(n,t){jBn(BB(n,37),t)},vX(j1n,"HierarchicalPortDummySizeProcessor",1513),wAn(1514,1,n1n,Ce),MWn.pf=function(n,t){JDn(this,BB(n,37),t)},MWn.a=0,vX(j1n,"HierarchicalPortOrthogonalEdgeRouter",1514),wAn(1515,1,MYn,Oe),MWn.ue=function(n,t){return _N(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),wAn(1516,1,MYn,Ae),MWn.ue=function(n,t){return P9(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),wAn(1517,1,n1n,$e),MWn.pf=function(n,t){EMn(BB(n,37),t)},vX(j1n,"HierarchicalPortPositionProcessor",1517),wAn(1518,1,n1n,Yh),MWn.pf=function(n,t){rXn(this,BB(n,37))},MWn.a=0,MWn.c=0,vX(j1n,"HighDegreeNodeLayeringProcessor",1518),wAn(571,1,{571:1},Le),MWn.b=-1,MWn.d=-1,vX(j1n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),wAn(1519,1,{},Ne),MWn.Kb=function(n){return q_(),fbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),wAn(1520,1,{},xe),MWn.Kb=function(n){return q_(),lbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),wAn(1526,1,n1n,De),MWn.pf=function(n,t){dFn(this,BB(n,37),t)},vX(j1n,"HyperedgeDummyMerger",1526),wAn(793,1,{},R_),MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(j1n,"HyperedgeDummyMerger/MergeState",793),wAn(1527,1,{},Re),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"HyperedgeDummyMerger/lambda$0$Type",1527),wAn(1528,1,{},Ke),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,10).j,16))},vX(j1n,"HyperedgeDummyMerger/lambda$1$Type",1528),wAn(1529,1,lVn,_e),MWn.td=function(n){BB(n,11).p=-1},vX(j1n,"HyperedgeDummyMerger/lambda$2$Type",1529),wAn(1530,1,n1n,Fe),MWn.pf=function(n,t){bFn(BB(n,37),t)},vX(j1n,"HypernodesProcessor",1530),wAn(1531,1,n1n,Be),MWn.pf=function(n,t){wFn(BB(n,37),t)},vX(j1n,"InLayerConstraintProcessor",1531),wAn(1532,1,n1n,He),MWn.pf=function(n,t){Lcn(BB(n,37),t)},vX(j1n,"InnermostNodeMarginCalculator",1532),wAn(1533,1,n1n,qe),MWn.pf=function(n,t){Vzn(this,BB(n,37))},MWn.a=KQn,MWn.b=KQn,MWn.c=RQn,MWn.d=RQn;var Vut,Qut,Yut,Jut,Zut,not,tot,eot,iot,rot,cot,aot,uot,oot,sot,hot,fot,lot,bot,wot,dot,got,pot,vot,mot,yot,kot,jot,Eot,Tot,Mot,Sot,Pot,Iot,Cot,Oot,Aot,$ot,Lot,Not,xot,Dot,Rot,Kot,_ot,Fot,Bot,Hot,qot,Got,zot,Uot,Xot,Wot,Vot,Qot,Yot,Jot=vX(j1n,"InteractiveExternalPortPositioner",1533);wAn(1534,1,{},Ge),MWn.Kb=function(n){return BB(n,17).d.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),wAn(1535,1,{},rd),MWn.Kb=function(n){return qN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),wAn(1536,1,{},ze),MWn.Kb=function(n){return BB(n,17).c.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),wAn(1537,1,{},cd),MWn.Kb=function(n){return GN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),wAn(1538,1,{},ad),MWn.Kb=function(n){return WR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),wAn(1539,1,{},ud),MWn.Kb=function(n){return VR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),wAn(77,22,{3:1,35:1,22:1,77:1,234:1},nP),MWn.Kf=function(){switch(this.g){case 15:return new dc;case 22:return new gc;case 47:return new mc;case 28:case 35:return new ei;case 32:return new Jt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new id((Srn(),qut));case 0:return new id((Srn(),Hut));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new me;case 55:return new Me;case 13:return new Se;case 38:return new Ie;case 44:return new Ce;case 40:return new $e;case 9:return new Yh;case 49:return new ox;case 37:return new De;case 43:return new Fe;case 27:return new Be;case 30:return new He;case 3:return new qe;case 18:return new Xe;case 29:return new We;case 5:return new Jh;case 50:return new Ue;case 34:return new Zh;case 36:return new ii;case 52:return new Vh;case 11:return new ci;case 7:return new tf;case 39:return new ai;case 45:return new ui;case 16:return new oi;case 10:return new si;case 48:return new fi;case 21:return new li;case 23:return new Ny((oin(),Amt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new af;case 17:return new Pi;case 53:return new Ii;case 6:return new Bi;case 25:return new am;case 46:return new Ni;case 31:return new xR;case 14:return new Vi;case 26:return new Sc;case 20:return new nr;case 24:return new Ny((oin(),$mt));default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Zot,nst,tst,est,ist,rst,cst,ast,ust=Ben(j1n,S1n,77,Unt,ENn,nB);wAn(1540,1,n1n,Xe),MWn.pf=function(n,t){Jzn(BB(n,37),t)},vX(j1n,"InvertedPortProcessor",1540),wAn(1541,1,n1n,We),MWn.pf=function(n,t){LKn(BB(n,37),t)},vX(j1n,"LabelAndNodeSizeProcessor",1541),wAn(1542,1,DVn,Ve),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),wAn(1543,1,DVn,Qe),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Mut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),wAn(1544,1,lVn,K_),MWn.td=function(n){_M(this.b,this.a,this.c,BB(n,10))},MWn.a=!1,MWn.c=!1,vX(j1n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),wAn(1545,1,n1n,Jh),MWn.pf=function(n,t){fzn(BB(n,37),t)},vX(j1n,"LabelDummyInserter",1545),wAn(1546,1,qYn,Ye),MWn.Lb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),zPt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return GC(mMn(BB(n,70),(HXn(),Ydt)))===GC((Rtn(),zPt))},vX(j1n,"LabelDummyInserter/1",1546),wAn(1547,1,n1n,Ue),MWn.pf=function(n,t){Pqn(BB(n,37),t)},vX(j1n,"LabelDummyRemover",1547),wAn(1548,1,DVn,Je),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelDummyRemover/lambda$0$Type",1548),wAn(1359,1,n1n,Zh),MWn.pf=function(n,t){TGn(this,BB(n,37),t)},MWn.a=null,vX(j1n,"LabelDummySwitcher",1359),wAn(286,1,{286:1},cKn),MWn.c=0,MWn.d=null,MWn.f=0,vX(j1n,"LabelDummySwitcher/LabelDummyInfo",286),wAn(1360,1,{},Ze),MWn.Kb=function(n){return Crn(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"LabelDummySwitcher/lambda$0$Type",1360),wAn(1361,1,DVn,ni),MWn.Mb=function(n){return Crn(),BB(n,10).k==(uSn(),Sut)},vX(j1n,"LabelDummySwitcher/lambda$1$Type",1361),wAn(1362,1,{},hd),MWn.Kb=function(n){return XD(this.a,BB(n,10))},vX(j1n,"LabelDummySwitcher/lambda$2$Type",1362),wAn(1363,1,lVn,fd),MWn.td=function(n){YX(this.a,BB(n,286))},vX(j1n,"LabelDummySwitcher/lambda$3$Type",1363),wAn(1364,1,MYn,ti),MWn.ue=function(n,t){return Lz(BB(n,286),BB(t,286))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"LabelDummySwitcher/lambda$4$Type",1364),wAn(791,1,n1n,ei),MWn.pf=function(n,t){Y6(BB(n,37),t)},vX(j1n,"LabelManagementProcessor",791),wAn(1549,1,n1n,ii),MWn.pf=function(n,t){Nxn(BB(n,37),t)},vX(j1n,"LabelSideSelector",1549),wAn(1550,1,DVn,ri),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelSideSelector/lambda$0$Type",1550),wAn(1558,1,n1n,ci),MWn.pf=function(n,t){EBn(BB(n,37),t)},vX(j1n,"LayerConstraintPostprocessor",1558),wAn(1559,1,n1n,tf),MWn.pf=function(n,t){r$n(BB(n,37),t)},vX(j1n,"LayerConstraintPreprocessor",1559),wAn(360,22,{3:1,35:1,22:1,360:1},tP);var ost,sst,hst,fst,lst,bst,wst,dst,gst,pst=Ben(j1n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Unt,e3,z_);wAn(1560,1,n1n,ai),MWn.pf=function(n,t){Eqn(BB(n,37),t)},vX(j1n,"LayerSizeAndGraphHeightCalculator",1560),wAn(1561,1,n1n,ui),MWn.pf=function(n,t){ALn(BB(n,37),t)},vX(j1n,"LongEdgeJoiner",1561),wAn(1562,1,n1n,oi),MWn.pf=function(n,t){WHn(BB(n,37),t)},vX(j1n,"LongEdgeSplitter",1562),wAn(1563,1,n1n,si),MWn.pf=function(n,t){PGn(this,BB(n,37),t)},MWn.d=0,MWn.e=0,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,vX(j1n,"NodePromotion",1563),wAn(1564,1,{},hi),MWn.Kb=function(n){return BB(n,46),hN(),!0},MWn.Fb=function(n){return this===n},vX(j1n,"NodePromotion/lambda$0$Type",1564),wAn(1565,1,{},od),MWn.Kb=function(n){return aV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$1$Type",1565),wAn(1566,1,{},sd),MWn.Kb=function(n){return uV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$2$Type",1566),wAn(1567,1,n1n,fi),MWn.pf=function(n,t){XUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPostprocessor",1567),wAn(1568,1,n1n,li),MWn.pf=function(n,t){MUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPreprocessor",1568),wAn(1569,1,MYn,bi),MWn.ue=function(n,t){return Zan(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),wAn(1570,1,n1n,wi),MWn.pf=function(n,t){$_n(BB(n,37),t)},vX(j1n,"PartitionMidprocessor",1570),wAn(1571,1,DVn,di),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionMidprocessor/lambda$0$Type",1571),wAn(1572,1,lVn,ld),MWn.td=function(n){$Q(this.a,BB(n,10))},vX(j1n,"PartitionMidprocessor/lambda$1$Type",1572),wAn(1573,1,n1n,gi),MWn.pf=function(n,t){wNn(BB(n,37),t)},vX(j1n,"PartitionPostprocessor",1573),wAn(1574,1,n1n,pi),MWn.pf=function(n,t){NOn(BB(n,37),t)},vX(j1n,"PartitionPreprocessor",1574),wAn(1575,1,DVn,vi),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionPreprocessor/lambda$0$Type",1575),wAn(1576,1,{},mi),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"PartitionPreprocessor/lambda$1$Type",1576),wAn(1577,1,DVn,yi),MWn.Mb=function(n){return Lgn(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$2$Type",1577),wAn(1578,1,lVn,ki),MWn.td=function(n){Run(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$3$Type",1578),wAn(1579,1,n1n,af),MWn.pf=function(n,t){u_n(BB(n,37),t)},vX(j1n,"PortListSorter",1579),wAn(1580,1,{},ji),MWn.Kb=function(n){return zsn(),BB(n,11).e},vX(j1n,"PortListSorter/lambda$0$Type",1580),wAn(1581,1,{},Ei),MWn.Kb=function(n){return zsn(),BB(n,11).g},vX(j1n,"PortListSorter/lambda$1$Type",1581),wAn(1582,1,MYn,Ti),MWn.ue=function(n,t){return T4(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$2$Type",1582),wAn(1583,1,MYn,Mi),MWn.ue=function(n,t){return Oyn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$3$Type",1583),wAn(1584,1,MYn,Si),MWn.ue=function(n,t){return nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$4$Type",1584),wAn(1585,1,n1n,Pi),MWn.pf=function(n,t){WAn(BB(n,37),t)},vX(j1n,"PortSideProcessor",1585),wAn(1586,1,n1n,Ii),MWn.pf=function(n,t){CRn(BB(n,37),t)},vX(j1n,"ReversedEdgeRestorer",1586),wAn(1591,1,n1n,am),MWn.pf=function(n,t){Ymn(this,BB(n,37),t)},vX(j1n,"SelfLoopPortRestorer",1591),wAn(1592,1,{},Ci),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPortRestorer/lambda$0$Type",1592),wAn(1593,1,DVn,Oi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopPortRestorer/lambda$1$Type",1593),wAn(1594,1,DVn,Ai),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPortRestorer/lambda$2$Type",1594),wAn(1595,1,{},$i),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopPortRestorer/lambda$3$Type",1595),wAn(1596,1,lVn,bd),MWn.td=function(n){SSn(this.a,BB(n,403))},vX(j1n,"SelfLoopPortRestorer/lambda$4$Type",1596),wAn(794,1,lVn,Li),MWn.td=function(n){nPn(BB(n,101))},vX(j1n,"SelfLoopPortRestorer/lambda$5$Type",794),wAn(1597,1,n1n,Ni),MWn.pf=function(n,t){Lpn(BB(n,37),t)},vX(j1n,"SelfLoopPostProcessor",1597),wAn(1598,1,{},xi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPostProcessor/lambda$0$Type",1598),wAn(1599,1,DVn,Di),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopPostProcessor/lambda$1$Type",1599),wAn(1600,1,DVn,Ri),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPostProcessor/lambda$2$Type",1600),wAn(1601,1,lVn,Ki),MWn.td=function(n){Ljn(BB(n,10))},vX(j1n,"SelfLoopPostProcessor/lambda$3$Type",1601),wAn(1602,1,{},_i),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPostProcessor/lambda$4$Type",1602),wAn(1603,1,lVn,wd),MWn.td=function(n){a3(this.a,BB(n,409))},vX(j1n,"SelfLoopPostProcessor/lambda$5$Type",1603),wAn(1604,1,DVn,Fi),MWn.Mb=function(n){return!!BB(n,101).i},vX(j1n,"SelfLoopPostProcessor/lambda$6$Type",1604),wAn(1605,1,lVn,dd),MWn.td=function(n){Ty(this.a,BB(n,101))},vX(j1n,"SelfLoopPostProcessor/lambda$7$Type",1605),wAn(1587,1,n1n,Bi),MWn.pf=function(n,t){Z$n(BB(n,37),t)},vX(j1n,"SelfLoopPreProcessor",1587),wAn(1588,1,{},Hi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPreProcessor/lambda$0$Type",1588),wAn(1589,1,{},qi),MWn.Kb=function(n){return BB(n,409).a},vX(j1n,"SelfLoopPreProcessor/lambda$1$Type",1589),wAn(1590,1,lVn,Gi),MWn.td=function(n){q$(BB(n,17))},vX(j1n,"SelfLoopPreProcessor/lambda$2$Type",1590),wAn(1606,1,n1n,xR),MWn.pf=function(n,t){sSn(this,BB(n,37),t)},vX(j1n,"SelfLoopRouter",1606),wAn(1607,1,{},zi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopRouter/lambda$0$Type",1607),wAn(1608,1,DVn,Ui),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SelfLoopRouter/lambda$1$Type",1608),wAn(1609,1,DVn,Xi),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopRouter/lambda$2$Type",1609),wAn(1610,1,{},Wi),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopRouter/lambda$3$Type",1610),wAn(1611,1,lVn,eP),MWn.td=function(n){QV(this.a,this.b,BB(n,403))},vX(j1n,"SelfLoopRouter/lambda$4$Type",1611),wAn(1612,1,n1n,Vi),MWn.pf=function(n,t){fxn(BB(n,37),t)},vX(j1n,"SemiInteractiveCrossMinProcessor",1612),wAn(1613,1,DVn,Qi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Iut)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),wAn(1614,1,DVn,Yi),MWn.Mb=function(n){return Gq(BB(n,10))._b((HXn(),spt))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),wAn(1615,1,MYn,Ji),MWn.ue=function(n,t){return drn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),wAn(1616,1,{},Zi),MWn.Ce=function(n,t){return XQ(BB(n,10),BB(t,10))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),wAn(1618,1,n1n,nr),MWn.pf=function(n,t){MBn(BB(n,37),t)},vX(j1n,"SortByInputModelProcessor",1618),wAn(1619,1,DVn,tr),MWn.Mb=function(n){return 0!=BB(n,11).g.c.length},vX(j1n,"SortByInputModelProcessor/lambda$0$Type",1619),wAn(1620,1,lVn,gd),MWn.td=function(n){fPn(this.a,BB(n,11))},vX(j1n,"SortByInputModelProcessor/lambda$1$Type",1620),wAn(1693,803,{},grn),MWn.Me=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Np,JT(AV(new Rq(null,new w1(this.c.a.b,16)),new dr),new uP(this,t)),pIn(this,new rr),Otn(t,new cr),t.c=x8(Ant,HWn,1,0,5,1),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new ar),new vd(t)),pIn(this,new ur),Otn(t,new or),t.c=x8(Ant,HWn,1,0,5,1),e=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new md(this))),new sr),JT(new Rq(null,new w1(this.c.a.a,16)),new rP(e,t)),pIn(this,new fr),Otn(t,new er),t.c=x8(Ant,HWn,1,0,5,1);break;case 3:i=new Np,pIn(this,new ir),r=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new pd(this))),new hr),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new lr),new aP(r,i)),pIn(this,new br),Otn(i,new wr),i.c=x8(Ant,HWn,1,0,5,1);break;default:throw Hp(new kv)}},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation",1693),wAn(1694,1,qYn,ir),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),wAn(1695,1,{},pd),MWn.Fe=function(n){return GIn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),wAn(1703,1,RVn,iP),MWn.Vd=function(){Fkn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),wAn(1705,1,qYn,rr),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),wAn(1706,1,lVn,cr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),wAn(1707,1,DVn,ar),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),wAn(1709,1,lVn,vd),MWn.td=function(n){Ebn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),wAn(1708,1,RVn,lP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),wAn(1710,1,qYn,ur),MWn.Lb=function(n){return cL(BB(n,57).g,10)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),wAn(1711,1,lVn,or),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),wAn(1712,1,{},md),MWn.Fe=function(n){return zIn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),wAn(1713,1,{},sr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),wAn(1696,1,{},hr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),wAn(1715,1,lVn,rP),MWn.td=function(n){HG(this.a,this.b,BB(n,307))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),wAn(1714,1,RVn,cP),MWn.Vd=function(){VAn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),wAn(1716,1,qYn,fr),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),wAn(1717,1,lVn,er),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),wAn(1697,1,DVn,lr),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),wAn(1699,1,lVn,aP),MWn.td=function(n){qG(this.a,this.b,BB(n,57))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),wAn(1698,1,RVn,bP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),wAn(1700,1,qYn,br),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),wAn(1701,1,lVn,wr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),wAn(1702,1,DVn,dr),MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),wAn(1704,1,lVn,uP),MWn.td=function(n){Ttn(this.a,this.b,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),wAn(1521,1,n1n,ox),MWn.pf=function(n,t){cqn(this,BB(n,37),t)},vX(A1n,"HorizontalGraphCompactor",1521),wAn(1522,1,{},yd),MWn.Oe=function(n,t){var e,i;return Z7(n,t)?0:(e=f2(n),i=f2(t),e&&e.k==(uSn(),Mut)||i&&i.k==(uSn(),Mut)?0:UN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},MWn.Pe=function(n,t){var e,i;return Z7(n,t)?1:(e=f2(n),i=f2(t),XN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},vX(A1n,"HorizontalGraphCompactor/1",1522),wAn(1523,1,{},gr),MWn.Ne=function(n,t){return MM(),0==n.a.i},vX(A1n,"HorizontalGraphCompactor/lambda$0$Type",1523),wAn(1524,1,{},kd),MWn.Ne=function(n,t){return _Q(this.a,n,t)},vX(A1n,"HorizontalGraphCompactor/lambda$1$Type",1524),wAn(1664,1,{},C7),vX(A1n,"LGraphToCGraphTransformer",1664),wAn(1672,1,DVn,pr),MWn.Mb=function(n){return null!=n},vX(A1n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),wAn(1665,1,{},vr),MWn.Kb=function(n){return G_(),Bbn(mMn(BB(BB(n,57).g,10),(hWn(),dlt)))},vX(A1n,"LGraphToCGraphTransformer/lambda$0$Type",1665),wAn(1666,1,{},mr),MWn.Kb=function(n){return G_(),mfn(BB(BB(n,57).g,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$1$Type",1666),wAn(1675,1,DVn,yr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,10)},vX(A1n,"LGraphToCGraphTransformer/lambda$10$Type",1675),wAn(1676,1,lVn,kr),MWn.td=function(n){KQ(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$11$Type",1676),wAn(1677,1,DVn,jr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,145)},vX(A1n,"LGraphToCGraphTransformer/lambda$12$Type",1677),wAn(1681,1,lVn,Er),MWn.td=function(n){vfn(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$13$Type",1681),wAn(1678,1,lVn,jd),MWn.td=function(n){uA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$14$Type",1678),wAn(1679,1,lVn,Ed),MWn.td=function(n){sA(this.a,BB(n,110))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$15$Type",1679),wAn(1680,1,lVn,Td),MWn.td=function(n){oA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$16$Type",1680),wAn(1682,1,{},Tr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$17$Type",1682),wAn(1683,1,DVn,Mr),MWn.Mb=function(n){return G_(),b5(BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$18$Type",1683),wAn(1684,1,lVn,Md),MWn.td=function(n){Snn(this.a,BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$19$Type",1684),wAn(1668,1,lVn,Sd),MWn.td=function(n){l0(this.a,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$2$Type",1668),wAn(1685,1,{},Sr),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$20$Type",1685),wAn(1686,1,{},Pr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$21$Type",1686),wAn(1687,1,{},Ir),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$22$Type",1687),wAn(1688,1,DVn,Cr),MWn.Mb=function(n){return tx(BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$23$Type",1688),wAn(1689,1,lVn,Pd),MWn.td=function(n){PIn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$24$Type",1689),wAn(1667,1,lVn,oP),MWn.td=function(n){H3(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$3$Type",1667),wAn(1669,1,{},Or),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$4$Type",1669),wAn(1670,1,{},Ar),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$5$Type",1670),wAn(1671,1,{},$r),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$6$Type",1671),wAn(1673,1,lVn,Id),MWn.td=function(n){KCn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$8$Type",1673),wAn(1674,1,lVn,sP),MWn.td=function(n){x$(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$9$Type",1674),wAn(1663,1,{},Lr),MWn.Le=function(n){var t,e,i,r,c;for(this.a=n,this.d=new Fv,this.c=x8(qit,HWn,121,this.a.a.a.c.length,0,1),this.b=0,e=new Wb(this.a.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).d=this.b,c=AN(oM(new qv,t),this.d),this.c[this.b]=c,++this.b;for(JGn(this),AUn(this),ZLn(this),WKn(B_(this.d),new Xm),r=new Wb(this.a.a.b);r.a<r.c.c.length;)(i=BB(n0(r),57)).d.c=this.c[i.a.d].e+i.b.a},MWn.b=0,vX(A1n,"NetworkSimplexCompaction",1663),wAn(145,1,{35:1,145:1},PBn),MWn.wd=function(n){return Lnn(this,BB(n,145))},MWn.Ib=function(){return mfn(this)},vX(A1n,"VerticalSegment",145),wAn(827,1,{},zEn),MWn.c=0,MWn.e=0,MWn.i=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),wAn(663,1,{663:1},kcn),MWn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},MWn.b=0,MWn.c=0,MWn.f=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),wAn(287,1,{35:1,287:1},Gx),MWn.wd=function(n){return aq(this,BB(n,287))},MWn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},MWn.a=0,MWn.b=0,MWn.c=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),wAn(1929,1,{},ZSn),MWn.b=0,MWn.e=!1,vX($1n,"CrossingMatrixFiller",1929);var vst,mst,yst,kst,jst=bq(L1n,"IInitializable");wAn(1804,1,N1n,vP),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Lf=function(){return this.c!=(oin(),Amt)},MWn.Mf=function(){this.e=x8(ANt,hQn,25,this.d,15,1)},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Qf=function(n,t,e,i){++this.d},MWn.Rf=function(){return!0},MWn.Sf=function(n,t,e,i){return Yhn(this,n,t,e),Z4(this,t)},MWn.Tf=function(n,t){var e;return Yhn(this,n,e=hj(t,n.length),t),bon(this,e)},MWn.d=0,vX($1n,"GreedySwitchHeuristic",1804),wAn(1930,1,{},lG),MWn.b=0,MWn.d=0,vX($1n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),wAn(1917,1,{},uRn),MWn.a=!1,vX($1n,"SwitchDecider",1917),wAn(101,1,{101:1},pPn),MWn.a=null,MWn.c=null,MWn.i=null,vX(x1n,"SelfHyperLoop",101),wAn(1916,1,{},epn),MWn.c=0,MWn.e=0,vX(x1n,"SelfHyperLoopLabels",1916),wAn(411,22,{3:1,35:1,22:1,411:1},mP);var Est,Tst,Mst,Sst,Pst,Ist,Cst=Ben(x1n,"SelfHyperLoopLabels/Alignment",411,Unt,r3,U_);wAn(409,1,{409:1},j6),vX(x1n,"SelfLoopEdge",409),wAn(403,1,{403:1},Ogn),MWn.a=!1,vX(x1n,"SelfLoopHolder",403),wAn(1724,1,DVn,qr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopHolder/lambda$0$Type",1724),wAn(113,1,{113:1},ipn),MWn.a=!1,MWn.c=!1,vX(x1n,"SelfLoopPort",113),wAn(1792,1,DVn,Gr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopPort/lambda$0$Type",1792),wAn(363,22,{3:1,35:1,22:1,363:1},yP);var Ost,Ast,$st,Lst,Nst,xst,Dst,Rst,Kst=Ben(x1n,"SelfLoopType",363,Unt,x5,Y_);wAn(1732,1,{},uf),vX(D1n,"PortRestorer",1732),wAn(361,22,{3:1,35:1,22:1,361:1},kP);var _st,Fst,Bst,Hst,qst,Gst,zst,Ust,Xst,Wst=Ben(D1n,"PortRestorer/PortSideArea",361,Unt,P1,J_);wAn(1733,1,{},Wr),MWn.Kb=function(n){return _Mn(),BB(n,15).Oc()},vX(D1n,"PortRestorer/lambda$0$Type",1733),wAn(1734,1,lVn,Vr),MWn.td=function(n){_Mn(),BB(n,113).c=!1},vX(D1n,"PortRestorer/lambda$1$Type",1734),wAn(1743,1,DVn,Qr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),ICt)},vX(D1n,"PortRestorer/lambda$10$Type",1743),wAn(1744,1,{},Yr),MWn.Kb=function(n){return _Mn(),BB(n,113).d},vX(D1n,"PortRestorer/lambda$11$Type",1744),wAn(1745,1,lVn,Cd),MWn.td=function(n){Nj(this.a,BB(n,11))},vX(D1n,"PortRestorer/lambda$12$Type",1745),wAn(1735,1,lVn,Od),MWn.td=function(n){Ax(this.a,BB(n,101))},vX(D1n,"PortRestorer/lambda$2$Type",1735),wAn(1736,1,MYn,Jr),MWn.ue=function(n,t){return oen(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortRestorer/lambda$3$Type",1736),wAn(1737,1,DVn,Zr),MWn.Mb=function(n){return _Mn(),BB(n,113).c},vX(D1n,"PortRestorer/lambda$4$Type",1737),wAn(1738,1,DVn,xr),MWn.Mb=function(n){return Acn(BB(n,11))},vX(D1n,"PortRestorer/lambda$5$Type",1738),wAn(1739,1,DVn,Nr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),sCt)},vX(D1n,"PortRestorer/lambda$6$Type",1739),wAn(1740,1,DVn,Dr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),oCt)},vX(D1n,"PortRestorer/lambda$7$Type",1740),wAn(1741,1,DVn,Rr),MWn.Mb=function(n){return c3(BB(n,11))},vX(D1n,"PortRestorer/lambda$8$Type",1741),wAn(1742,1,DVn,Kr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),SCt)},vX(D1n,"PortRestorer/lambda$9$Type",1742),wAn(270,22,{3:1,35:1,22:1,270:1},WV);var Vst,Qst,Yst,Jst,Zst,nht,tht,eht,iht=Ben(D1n,"PortSideAssigner/Target",270,Unt,Ftn,X_);wAn(1725,1,{},_r),MWn.Kb=function(n){return AV(new Rq(null,new w1(BB(n,101).j,16)),new Xr)},vX(D1n,"PortSideAssigner/lambda$1$Type",1725),wAn(1726,1,{},Fr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$2$Type",1726),wAn(1727,1,lVn,Br),MWn.td=function(n){qIn(BB(n,11),(kUn(),sCt))},vX(D1n,"PortSideAssigner/lambda$3$Type",1727),wAn(1728,1,{},Hr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$4$Type",1728),wAn(1729,1,lVn,Ad),MWn.td=function(n){tv(this.a,BB(n,11))},vX(D1n,"PortSideAssigner/lambda$5$Type",1729),wAn(1730,1,MYn,zr),MWn.ue=function(n,t){return MW(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$6$Type",1730),wAn(1731,1,MYn,Ur),MWn.ue=function(n,t){return oH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$7$Type",1731),wAn(805,1,DVn,Xr),MWn.Mb=function(n){return BB(n,113).c},vX(D1n,"PortSideAssigner/lambda$8$Type",805),wAn(2009,1,{}),vX(R1n,"AbstractSelfLoopRouter",2009),wAn(1750,1,MYn,nc),MWn.ue=function(n,t){return CK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,bJn,1750),wAn(1751,1,MYn,tc),MWn.ue=function(n,t){return IK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,wJn,1751),wAn(1793,2009,{},ec),MWn.Uf=function(n,t,e){return e},vX(R1n,"OrthogonalSelfLoopRouter",1793),wAn(1795,1,lVn,wP),MWn.td=function(n){pgn(this.b,this.a,BB(n,8))},vX(R1n,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),wAn(1794,1793,{},ic),MWn.Uf=function(n,t,e){var i,r;return Kx(e,0,UR(B$((i=n.c.d).n),i.a)),DH(e,UR(B$((r=n.d.d).n),r.a)),E_n(e)},vX(R1n,"PolylineSelfLoopRouter",1794),wAn(1746,1,{},nf),MWn.a=null,vX(R1n,"RoutingDirector",1746),wAn(1747,1,MYn,rc),MWn.ue=function(n,t){return wH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingDirector/lambda$0$Type",1747),wAn(1748,1,{},cc),MWn.Kb=function(n){return SM(),BB(n,101).j},vX(R1n,"RoutingDirector/lambda$1$Type",1748),wAn(1749,1,lVn,ac),MWn.td=function(n){SM(),BB(n,15).ad(Qst)},vX(R1n,"RoutingDirector/lambda$2$Type",1749),wAn(1752,1,{},uc),vX(R1n,"RoutingSlotAssigner",1752),wAn(1753,1,DVn,$d),MWn.Mb=function(n){return II(this.a,BB(n,101))},vX(R1n,"RoutingSlotAssigner/lambda$0$Type",1753),wAn(1754,1,MYn,Ld),MWn.ue=function(n,t){return Uq(this.a,BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingSlotAssigner/lambda$1$Type",1754),wAn(1796,1793,{},oc),MWn.Uf=function(n,t,e){var i,r,c,a;return i=Gy(MD(gpn(n.b.g.b,(HXn(),jpt)))),nLn(n,t,e,a=new Ux(Pun(Gk(PMt,1),sVn,8,0,[(c=n.c.d,UR(new wA(c.n),c.a))])),i),DH(a,UR(new wA((r=n.d.d).n),r.a)),Fvn(new oBn(a))},vX(R1n,"SplineSelfLoopRouter",1796),wAn(578,1,MYn,Grn,kH),MWn.ue=function(n,t){return fXn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderNodeComparator",578),wAn(1755,1,DVn,sc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$0$Type",1755),wAn(1756,1,{},hc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$1$Type",1756),wAn(1757,1,DVn,fc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$2$Type",1757),wAn(1758,1,{},lc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$3$Type",1758),wAn(1759,1,DVn,bc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$4$Type",1759),wAn(806,1,MYn,O7,pP),MWn.ue=function(n,t){return Nz(this,n,t)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderPortComparator",806),wAn(801,1,{},wc),MWn.Vf=function(n,t){var i,r,c,a;for(c=PSn(t),i=new Np,a=t.f/c,r=1;r<c;++r)WB(i,iln(dG(fan(e.Math.round(r*a)))));return i},MWn.Wf=function(){return!1},vX(_1n,"ARDCutIndexHeuristic",801),wAn(1479,1,n1n,dc),MWn.pf=function(n,t){oKn(BB(n,37),t)},vX(_1n,"BreakingPointInserter",1479),wAn(305,1,{305:1},v3),MWn.Ib=function(){var n;return(n=new Ik).a+="BPInfo[",n.a+="\n\tstart=",uO(n,this.i),n.a+="\n\tend=",uO(n,this.a),n.a+="\n\tnodeStartEdge=",uO(n,this.e),n.a+="\n\tstartEndEdge=",uO(n,this.j),n.a+="\n\toriginalEdge=",uO(n,this.f),n.a+="\n\tstartInLayerDummy=",uO(n,this.k),n.a+="\n\tstartInLayerEdge=",uO(n,this.n),n.a+="\n\tendInLayerDummy=",uO(n,this.b),n.a+="\n\tendInLayerEdge=",uO(n,this.c),n.a},vX(_1n,"BreakingPointInserter/BPInfo",305),wAn(652,1,{652:1},Hd),MWn.a=!1,MWn.b=0,MWn.c=0,vX(_1n,"BreakingPointInserter/Cut",652),wAn(1480,1,n1n,gc),MWn.pf=function(n,t){mLn(BB(n,37),t)},vX(_1n,"BreakingPointProcessor",1480),wAn(1481,1,DVn,pc),MWn.Mb=function(n){return Jnn(BB(n,10))},vX(_1n,"BreakingPointProcessor/0methodref$isEnd$Type",1481),wAn(1482,1,DVn,vc),MWn.Mb=function(n){return Znn(BB(n,10))},vX(_1n,"BreakingPointProcessor/1methodref$isStart$Type",1482),wAn(1483,1,n1n,mc),MWn.pf=function(n,t){rNn(this,BB(n,37),t)},vX(_1n,"BreakingPointRemover",1483),wAn(1484,1,lVn,yc),MWn.td=function(n){BB(n,128).k=!0},vX(_1n,"BreakingPointRemover/lambda$0$Type",1484),wAn(797,1,{},MAn),MWn.b=0,MWn.e=0,MWn.f=0,MWn.j=0,vX(_1n,"GraphStats",797),wAn(798,1,{},kc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/0methodref$max$Type",798),wAn(799,1,{},jc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/2methodref$max$Type",799),wAn(1660,1,{},Ec),MWn.Ce=function(n,t){return vB(MD(n),MD(t))},vX(_1n,"GraphStats/lambda$1$Type",1660),wAn(1661,1,{},Nd),MWn.Kb=function(n){return wpn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$2$Type",1661),wAn(1662,1,{},xd),MWn.Kb=function(n){return VLn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$6$Type",1662),wAn(800,1,{},Tc),MWn.Vf=function(n,t){return BB(mMn(n,(HXn(),_pt)),15)||(SQ(),SQ(),set)},MWn.Wf=function(){return!1},vX(_1n,"ICutIndexCalculator/ManualCutIndexCalculator",800),wAn(802,1,{},Mc),MWn.Vf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(null==t.n&&Dmn(t),k=t.n,null==t.d&&Dmn(t),s=t.d,(y=x8(xNt,qQn,25,k.length,15,1))[0]=k[0],v=k[0],h=1;h<k.length;h++)y[h]=y[h-1]+k[h],v+=k[h];for(c=PSn(t)-1,u=BB(mMn(n,(HXn(),Fpt)),19).a,r=KQn,i=new Np,b=e.Math.max(0,c-u);b<=e.Math.min(t.f-1,c+u);b++){if(g=v/(b+1),p=0,f=1,a=new Np,m=KQn,l=0,o=0,d=s[0],0==b)m=v,null==t.g&&(t.g=Xrn(t,new jc)),o=Gy(t.g);else{for(;f<t.f;)y[f-1]-p>=g&&(WB(a,iln(f)),m=e.Math.max(m,y[f-1]-l),o+=d,p+=y[f-1]-p,l=y[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;o+=d}(w=e.Math.min(1/m,1/t.b/o))>r&&(r=w,i=a)}return i},MWn.Wf=function(){return!1},vX(_1n,"MSDCutIndexHeuristic",802),wAn(1617,1,n1n,Sc),MWn.pf=function(n,t){bBn(BB(n,37),t)},vX(_1n,"SingleEdgeGraphWrapper",1617),wAn(227,22,{3:1,35:1,22:1,227:1},jP);var rht,cht,aht,uht=Ben(F1n,"CenterEdgeLabelPlacementStrategy",227,Unt,Z8,W_);wAn(422,22,{3:1,35:1,22:1,422:1},EP);var oht,sht,hht,fht,lht=Ben(F1n,"ConstraintCalculationStrategy",422,Unt,GY,V_);wAn(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},TP),MWn.Kf=function(){return sCn(this)},MWn.Xf=function(){return sCn(this)};var bht,wht,dht,ght,pht=Ben(F1n,"CrossingMinimizationStrategy",314,Unt,T1,Q_);wAn(337,22,{3:1,35:1,22:1,337:1},MP);var vht,mht,yht,kht,jht,Eht,Tht=Ben(F1n,"CuttingStrategy",337,Unt,M1,Z_);wAn(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},SP),MWn.Kf=function(){return RAn(this)},MWn.Xf=function(){return RAn(this)};var Mht,Sht,Pht,Iht=Ben(F1n,"CycleBreakingStrategy",335,Unt,L5,nF);wAn(419,22,{3:1,35:1,22:1,419:1},PP);var Cht,Oht,Aht,$ht,Lht=Ben(F1n,"DirectionCongruency",419,Unt,qY,tF);wAn(450,22,{3:1,35:1,22:1,450:1},IP);var Nht,xht,Dht,Rht,Kht,_ht,Fht,Bht=Ben(F1n,"EdgeConstraint",450,Unt,S1,eF);wAn(276,22,{3:1,35:1,22:1,276:1},CP);var Hht,qht,Ght,zht=Ben(F1n,"EdgeLabelSideSelection",276,Unt,i9,iF);wAn(479,22,{3:1,35:1,22:1,479:1},OP);var Uht,Xht,Wht,Vht,Qht,Yht,Jht,Zht=Ben(F1n,"EdgeStraighteningStrategy",479,Unt,HY,rF);wAn(274,22,{3:1,35:1,22:1,274:1},AP);var nft,tft,eft,ift,rft,cft,aft,uft=Ben(F1n,"FixedAlignment",274,Unt,t9,cF);wAn(275,22,{3:1,35:1,22:1,275:1},$P);var oft,sft,hft,fft,lft,bft,wft,dft,gft,pft,vft,mft=Ben(F1n,"GraphCompactionStrategy",275,Unt,n9,aF);wAn(256,22,{3:1,35:1,22:1,256:1},LP);var yft,kft,jft,Eft,Tft=Ben(F1n,"GraphProperties",256,Unt,bcn,uF);wAn(292,22,{3:1,35:1,22:1,292:1},NP);var Mft,Sft,Pft,Ift,Cft=Ben(F1n,"GreedySwitchType",292,Unt,C1,oF);wAn(303,22,{3:1,35:1,22:1,303:1},xP);var Oft,Aft,$ft,Lft=Ben(F1n,"InLayerConstraint",303,Unt,I1,sF);wAn(420,22,{3:1,35:1,22:1,420:1},DP);var Nft,xft,Dft,Rft,Kft,_ft,Fft,Bft,Hft,qft,Gft,zft,Uft,Xft,Wft,Vft,Qft,Yft,Jft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,ult,olt,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,vlt,mlt,ylt,klt,jlt,Elt,Tlt,Mlt,Slt,Plt,Ilt,Clt,Olt,Alt,$lt,Llt,Nlt,xlt,Dlt,Rlt,Klt,_lt,Flt,Blt,Hlt,qlt,Glt=Ben(F1n,"InteractiveReferencePoint",420,Unt,zY,hF);wAn(163,22,{3:1,35:1,22:1,163:1},BP);var zlt,Ult,Xlt,Wlt,Vlt,Qlt,Ylt,Jlt,Zlt,nbt,tbt,ebt,ibt,rbt,cbt,abt,ubt,obt,sbt,hbt,fbt,lbt,bbt,wbt,dbt,gbt,pbt,vbt,mbt,ybt,kbt,jbt,Ebt,Tbt,Mbt,Sbt,Pbt,Ibt,Cbt,Obt,Abt,$bt,Lbt,Nbt,xbt,Dbt,Rbt,Kbt,_bt,Fbt,Bbt,Hbt,qbt,Gbt,zbt,Ubt,Xbt,Wbt,Vbt,Qbt,Ybt,Jbt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,uwt,owt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,vwt,mwt,ywt,kwt,jwt,Ewt,Twt,Mwt,Swt,Pwt,Iwt,Cwt,Owt,Awt,$wt,Lwt,Nwt,xwt,Dwt,Rwt,Kwt,_wt,Fwt,Bwt,Hwt,qwt,Gwt,zwt,Uwt,Xwt,Wwt,Vwt,Qwt,Ywt,Jwt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt,udt,odt,sdt,hdt,fdt,ldt,bdt,wdt,ddt,gdt,pdt,vdt,mdt,ydt,kdt,jdt,Edt,Tdt,Mdt,Sdt,Pdt,Idt,Cdt,Odt,Adt,$dt,Ldt,Ndt,xdt,Ddt,Rdt,Kdt,_dt,Fdt,Bdt,Hdt,qdt,Gdt,zdt,Udt,Xdt,Wdt,Vdt,Qdt,Ydt,Jdt,Zdt,ngt,tgt,egt,igt,rgt,cgt,agt,ugt,ogt,sgt,hgt,fgt,lgt,bgt,wgt,dgt,ggt,pgt,vgt,mgt,ygt,kgt,jgt,Egt,Tgt,Mgt,Sgt,Pgt,Igt,Cgt,Ogt,Agt,$gt,Lgt,Ngt,xgt,Dgt,Rgt,Kgt,_gt,Fgt,Bgt,Hgt,qgt,Ggt,zgt,Ugt,Xgt,Wgt,Vgt,Qgt,Ygt,Jgt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,upt,opt,spt,hpt,fpt,lpt,bpt,wpt,dpt,gpt,ppt,vpt,mpt,ypt,kpt,jpt,Ept,Tpt,Mpt,Spt,Ppt,Ipt,Cpt,Opt,Apt,$pt,Lpt,Npt,xpt,Dpt,Rpt,Kpt,_pt,Fpt,Bpt,Hpt,qpt,Gpt,zpt,Upt,Xpt,Wpt,Vpt,Qpt,Ypt,Jpt,Zpt,nvt,tvt,evt,ivt=Ben(F1n,"LayerConstraint",163,Unt,D5,fF);wAn(848,1,QYn,hf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U1n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),Pbt),(PPn(),gMt)),Lht),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X1n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W1n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Qbt),gMt),Glt),nbn(hMt)))),a2(n,W1n,e0n,Jbt),a2(n,W1n,l0n,Ybt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V1n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Q1n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Pj(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y1n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wMt),ktt),nbn(fMt)),Pun(Gk(Qtt,1),sVn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J1n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xwt),gMt),zvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Z1n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),iln(7)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n0n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t0n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e0n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),Mbt),gMt),Iht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,i0n),f2n),"Node Layering Strategy"),"Strategy for node layering."),bwt),gMt),ovt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,r0n),f2n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),iwt),gMt),ivt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,c0n),f2n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,a0n),f2n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u0n),l2n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),iln(4)),vMt),Att),nbn(hMt)))),a2(n,u0n,i0n,awt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o0n),l2n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),iln(2)),vMt),Att),nbn(hMt)))),a2(n,o0n,i0n,owt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s0n),b2n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fwt),gMt),Dvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h0n),b2n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),iln(0)),vMt),Att),nbn(hMt)))),a2(n,h0n,s0n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f0n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),iln(DWn)),vMt),Att),nbn(hMt)))),a2(n,f0n,i0n,nwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l0n),w2n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),Ebt),gMt),pht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b0n),w2n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,w0n),w2n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dMt),Ptt),nbn(hMt)))),a2(n,w0n,d2n,pbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,d0n),w2n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wMt),ktt),nbn(hMt)))),a2(n,d0n,l0n,kbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,g0n),w2n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,p0n),w2n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v0n),g2n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),iln(40)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m0n),g2n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),wbt),gMt),Cft),nbn(hMt)))),a2(n,m0n,l0n,dbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y0n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),hbt),gMt),Cft),nbn(hMt)))),a2(n,y0n,l0n,fbt),a2(n,y0n,d2n,lbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,k0n),p2n),"Node Placement Strategy"),"Strategy for node placement."),Lwt),gMt),Avt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,j0n),p2n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wMt),ktt),nbn(hMt)))),a2(n,j0n,k0n,Ewt),a2(n,j0n,k0n,Twt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E0n),v2n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),pwt),gMt),Zht),nbn(hMt)))),a2(n,E0n,k0n,vwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T0n),v2n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),ywt),gMt),uft),nbn(hMt)))),a2(n,T0n,k0n,kwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M0n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dMt),Ptt),nbn(hMt)))),a2(n,M0n,k0n,Swt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,S0n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gMt),kvt),nbn(sMt)))),a2(n,S0n,k0n,Awt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P0n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Cwt),gMt),kvt),nbn(hMt)))),a2(n,P0n,k0n,Owt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,I0n),m2n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),xbt),gMt),nmt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,C0n),m2n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Rbt),gMt),cmt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O0n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),_bt),gMt),hmt),nbn(hMt)))),a2(n,O0n,y2n,Fbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,A0n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dMt),Ptt),nbn(hMt)))),a2(n,A0n,y2n,Hbt),a2(n,A0n,O0n,qbt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,$0n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dMt),Ptt),nbn(hMt)))),a2(n,$0n,y2n,Lbt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,L0n),k2n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,N0n),k2n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,x0n),k2n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,D0n),k2n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,R0n),j2n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,K0n),j2n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_0n),j2n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F0n),E2n),DJn),"Tries to further compact components (disconnected sub-graphs)."),!1),wMt),ktt),nbn(hMt)))),a2(n,F0n,kZn,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B0n),T2n),"Post Compaction Strategy"),M2n),Ylt),gMt),mft),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H0n),T2n),"Post Compaction Constraint Calculation"),M2n),Vlt),gMt),lht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,q0n),S2n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,G0n),S2n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),iln(16)),vMt),Att),nbn(hMt)))),a2(n,G0n,q0n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z0n),S2n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),iln(5)),vMt),Att),nbn(hMt)))),a2(n,z0n,q0n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U0n),P2n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bdt),gMt),Smt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X0n),P2n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dMt),Ptt),nbn(hMt)))),a2(n,X0n,U0n,Uwt),a2(n,X0n,U0n,Xwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W0n),P2n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dMt),Ptt),nbn(hMt)))),a2(n,W0n,U0n,Vwt),a2(n,W0n,U0n,Qwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V0n),I2n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),idt),gMt),Tht),nbn(hMt)))),a2(n,V0n,U0n,rdt),a2(n,V0n,U0n,cdt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,Q0n),I2n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),mMt),Rnt),nbn(hMt)))),a2(n,Q0n,V0n,Jwt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y0n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),ndt),vMt),Att),nbn(hMt)))),a2(n,Y0n,V0n,tdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J0n),C2n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),vdt),gMt),dmt),nbn(hMt)))),a2(n,J0n,U0n,mdt),a2(n,J0n,U0n,ydt),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,Z0n),C2n),"Valid Indices for Wrapping"),null),mMt),Rnt),nbn(hMt)))),a2(n,Z0n,U0n,ddt),a2(n,Z0n,U0n,gdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n2n),O2n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wMt),ktt),nbn(hMt)))),a2(n,n2n,U0n,sdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t2n),O2n),"Distance Penalty When Improving Cuts"),null),2),dMt),Ptt),nbn(hMt)))),a2(n,t2n,U0n,udt),a2(n,t2n,n2n,!0),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e2n),O2n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wMt),ktt),nbn(hMt)))),a2(n,e2n,U0n,fdt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,i2n),A2n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Abt),gMt),zht),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,r2n),A2n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),Cbt),gMt),uht),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,c2n),$2n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),abt),gMt),Fvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,a2n),$2n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u2n),$2n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Zlt),gMt),mut),nbn(hMt)))),a2(n,u2n,kZn,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o2n),$2n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),ibt),gMt),wvt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s2n),$2n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,s2n,c2n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h2n),$2n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dMt),Ptt),nbn(hMt)))),a2(n,h2n,c2n,null),vWn((new bf,n))},vX(F1n,"LayeredMetaDataProvider",848),wAn(986,1,QYn,bf),MWn.Qe=function(n){vWn(n)},vX(F1n,"LayeredOptions",986),wAn(987,1,{},Ic),MWn.$e=function(){return new Uv},MWn._e=function(n){},vX(F1n,"LayeredOptions/LayeredFactory",987),wAn(1372,1,{}),MWn.a=0,vX(y3n,"ElkSpacings/AbstractSpacingsBuilder",1372),wAn(779,1372,{},uwn),vX(F1n,"LayeredSpacings/LayeredSpacingsBuilder",779),wAn(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},RP),MWn.Kf=function(){return rLn(this)},MWn.Xf=function(){return rLn(this)};var rvt,cvt,avt,uvt,ovt=Ben(F1n,"LayeringStrategy",313,Unt,e9,lF);wAn(378,22,{3:1,35:1,22:1,378:1},KP);var svt,hvt,fvt,lvt,bvt,wvt=Ben(F1n,"LongEdgeOrderingStrategy",378,Unt,E1,bF);wAn(197,22,{3:1,35:1,22:1,197:1},_P);var dvt,gvt,pvt,vvt,mvt,yvt,kvt=Ben(F1n,"NodeFlexibility",197,Unt,k3,wF);wAn(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},FP),MWn.Kf=function(){return DAn(this)},MWn.Xf=function(){return DAn(this)};var jvt,Evt,Tvt,Mvt,Svt,Pvt,Ivt,Cvt,Ovt,Avt=Ben(F1n,"NodePlacementStrategy",315,Unt,$5,yF);wAn(260,22,{3:1,35:1,22:1,260:1},HP);var $vt,Lvt,Nvt,xvt,Dvt=Ben(F1n,"NodePromotionStrategy",260,Unt,Btn,gF);wAn(339,22,{3:1,35:1,22:1,339:1},qP);var Rvt,Kvt,_vt,Fvt=Ben(F1n,"OrderingStrategy",339,Unt,A1,pF);wAn(421,22,{3:1,35:1,22:1,421:1},GP);var Bvt,Hvt,qvt,Gvt,zvt=Ben(F1n,"PortSortingStrategy",421,Unt,UY,vF);wAn(452,22,{3:1,35:1,22:1,452:1},zP);var Uvt,Xvt,Wvt,Vvt,Qvt=Ben(F1n,"PortType",452,Unt,O1,dF);wAn(375,22,{3:1,35:1,22:1,375:1},UP);var Yvt,Jvt,Zvt,nmt=Ben(F1n,"SelfLoopDistributionStrategy",375,Unt,$1,mF);wAn(376,22,{3:1,35:1,22:1,376:1},XP);var tmt,emt,imt,rmt,cmt=Ben(F1n,"SelfLoopOrderingStrategy",376,Unt,BY,kF);wAn(304,1,{304:1},sGn),vX(F1n,"Spacings",304),wAn(336,22,{3:1,35:1,22:1,336:1},WP);var amt,umt,omt,smt,hmt=Ben(F1n,"SplineRoutingMode",336,Unt,N1,jF);wAn(338,22,{3:1,35:1,22:1,338:1},VP);var fmt,lmt,bmt,wmt,dmt=Ben(F1n,"ValidifyStrategy",338,Unt,x1,EF);wAn(377,22,{3:1,35:1,22:1,377:1},QP);var gmt,pmt,vmt,mmt,ymt,kmt,jmt,Emt,Tmt,Mmt,Smt=Ben(F1n,"WrappingStrategy",377,Unt,L1,TF);wAn(1383,1,E3n,wf),MWn.Yf=function(n){return BB(n,37),pmt},MWn.pf=function(n,t){JHn(this,BB(n,37),t)},vX(T3n,"DepthFirstCycleBreaker",1383),wAn(782,1,E3n,KG),MWn.Yf=function(n){return BB(n,37),vmt},MWn.pf=function(n,t){UXn(this,BB(n,37),t)},MWn.Zf=function(n){return BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyCycleBreaker",782),wAn(1386,782,E3n,TC),MWn.Zf=function(n){var t,e,i,r;for(r=null,t=DWn,i=new Wb(n);i.a<i.c.c.length;)Lx(e=BB(n0(i),10),(hWn(),wlt))&&BB(mMn(e,wlt),19).a<t&&(t=BB(mMn(e,wlt),19).a,r=e);return r||BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyModelOrderCycleBreaker",1386),wAn(1384,1,E3n,rf),MWn.Yf=function(n){return BB(n,37),mmt},MWn.pf=function(n,t){Cqn(this,BB(n,37),t)},vX(T3n,"InteractiveCycleBreaker",1384),wAn(1385,1,E3n,cf),MWn.Yf=function(n){return BB(n,37),ymt},MWn.pf=function(n,t){Lqn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,vX(T3n,"ModelOrderCycleBreaker",1385),wAn(1389,1,E3n,$M),MWn.Yf=function(n){return BB(n,37),kmt},MWn.pf=function(n,t){JXn(this,BB(n,37),t)},vX(M3n,"CoffmanGrahamLayerer",1389),wAn(1390,1,MYn,Dd),MWn.ue=function(n,t){return BCn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),wAn(1391,1,MYn,Rd),MWn.ue=function(n,t){return zG(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/lambda$1$Type",1391),wAn(1392,1,E3n,Cc),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),kot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){EUn(this,BB(n,37),t)},vX(M3n,"InteractiveLayerer",1392),wAn(569,1,{569:1},im),MWn.a=0,MWn.c=0,vX(M3n,"InteractiveLayerer/LayerSpan",569),wAn(1388,1,E3n,ef),MWn.Yf=function(n){return BB(n,37),jmt},MWn.pf=function(n,t){qxn(this,BB(n,37),t)},vX(M3n,"LongestPathLayerer",1388),wAn(1395,1,E3n,sf),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){iXn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,MWn.d=0,vX(M3n,"MinWidthLayerer",1395),wAn(1396,1,MYn,Kd),MWn.ue=function(n,t){return dan(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),wAn(1387,1,E3n,of),MWn.Yf=function(n){return BB(n,37),Mmt},MWn.pf=function(n,t){mGn(this,BB(n,37),t)},vX(M3n,"NetworkSimplexLayerer",1387),wAn(1393,1,E3n,RR),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Cot)},MWn.pf=function(n,t){$zn(this,BB(n,37),t)},MWn.d=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.s=0,MWn.t=0,MWn.u=0,vX(M3n,"StretchWidthLayerer",1393),wAn(1394,1,MYn,Oc),MWn.ue=function(n,t){return R6(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"StretchWidthLayerer/1",1394),wAn(402,1,S3n),MWn.Nf=function(n,t,e,i,r,c){},MWn._f=function(n,t,e){return r_n(this,n,t,e)},MWn.Mf=function(){this.g=x8(DNt,P3n,25,this.d,15,1),this.f=x8(DNt,P3n,25,this.d,15,1)},MWn.Of=function(n,t){this.e[n]=x8(ANt,hQn,25,t[n].length,15,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},MWn.Qf=function(n,t,e,i){BB(xq(i[n][t].j,e),11).p=this.d++},MWn.b=0,MWn.c=0,MWn.d=0,vX(I3n,"AbstractBarycenterPortDistributor",402),wAn(1633,1,MYn,_d),MWn.ue=function(n,t){return qgn(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),wAn(817,1,N1n,G2),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Qf=function(n,t,e,i){},MWn.Lf=function(){return!1},MWn.Mf=function(){this.c=this.e.a,this.g=this.f.g},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Rf=function(){return!1},MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,BB(this,660)):(SQ(),m$(n,this.d)),Ban(this.e,n))},MWn.Sf=function(n,t,e,i){var r,c,a,u,o,s,h;for(t!=Jq(e,n.length)&&(c=n[t-(e?1:-1)],G6(this.f,c,e?(ain(),qvt):(ain(),Hvt))),r=n[t][0],h=!i||r.k==(uSn(),Mut),s=u6(n[t]),this.ag(s,h,!1,e),a=0,o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),n[t][a++]=u;return!1},MWn.Tf=function(n,t){var e,i,r,c,a;for(c=u6(n[a=Jq(t,n.length)]),this.ag(c,!1,!0,t),e=0,r=new Wb(c);r.a<r.c.c.length;)i=BB(n0(r),10),n[a][e++]=i;return!1},vX(I3n,"BarycenterHeuristic",817),wAn(658,1,{658:1},Bd),MWn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},MWn.b=0,MWn.d=0,MWn.e=!1;var Pmt=vX(I3n,"BarycenterHeuristic/BarycenterState",658);wAn(1802,1,MYn,Fd),MWn.ue=function(n,t){return MEn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"BarycenterHeuristic/lambda$0$Type",1802),wAn(816,1,N1n,UEn),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){this.a[n]=x8(Pmt,{3:1,4:1,5:1,2018:1},658,t[n].length,0,1),this.b[n]=x8(Lmt,{3:1,4:1,5:1,2019:1},233,t[n].length,0,1)},MWn.Pf=function(n,t,e){Dgn(this,e[n][t],!0)},MWn.c=!1,vX(I3n,"ForsterConstraintResolver",816),wAn(233,1,{233:1},DY,uGn),MWn.Ib=function(){var n,t;for((t=new Ik).a+="[",n=0;n<this.d.length;n++)oO(t,$pn(this.d[n])),null!=lL(this.g,this.d[0]).a&&oO(oO((t.a+="<",t),ZC(lL(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=FWn);return(t.a+="]",t).a},MWn.a=0,MWn.c=0,MWn.f=0;var Imt,Cmt,Omt,Amt,$mt,Lmt=vX(I3n,"ForsterConstraintResolver/ConstraintGroup",233);wAn(1797,1,lVn,qd),MWn.td=function(n){Dgn(this.a,BB(n,10),!1)},vX(I3n,"ForsterConstraintResolver/lambda$0$Type",1797),wAn(214,1,{214:1,225:1},IGn),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Mf=function(){this.r=x8(ANt,hQn,25,this.n,15,1)},MWn.Pf=function(n,t,e){var i;(i=e[n][t].e)&&WB(this.b,i)},MWn.Qf=function(n,t,e,i){++this.n},MWn.Ib=function(){return izn(this.e,new Rv)},MWn.g=!1,MWn.i=!1,MWn.n=0,MWn.s=!1,vX(I3n,"GraphInfoHolder",214),wAn(1832,1,N1n,Pc),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Qf=function(n,t,e,i){},MWn._f=function(n,t,e){return e&&t>0?uZ(this.a,n[t-1],n[t]):!e&&t<n.length-1?uZ(this.a,n[t],n[t+1]):yrn(this.a,n[t],e?(kUn(),ICt):(kUn(),oCt)),bLn(this,n,t,e)},MWn.Mf=function(){this.d=x8(ANt,hQn,25,this.c,15,1),this.a=new QK(this.d)},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},MWn.c=0,vX(I3n,"GreedyPortDistributor",1832),wAn(1401,1,E3n,df),MWn.Yf=function(n){return Xhn(BB(n,37))},MWn.pf=function(n,t){XGn(BB(n,37),t)},vX(I3n,"InteractiveCrossingMinimizer",1401),wAn(1402,1,MYn,Gd),MWn.ue=function(n,t){return Hjn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"InteractiveCrossingMinimizer/1",1402),wAn(507,1,{507:1,123:1,51:1},Ny),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Cmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){P_n(this,BB(n,37),t)},MWn.e=0,vX(I3n,"LayerSweepCrossingMinimizer",507),wAn(1398,1,lVn,zd),MWn.td=function(n){wBn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),wAn(1399,1,lVn,Ud),MWn.td=function(n){Ohn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),wAn(1400,1,lVn,Xd),MWn.td=function(n){pFn(this.a,BB(n,214))},vX(I3n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),wAn(454,22,{3:1,35:1,22:1,454:1},YP);var Nmt,xmt=Ben(I3n,"LayerSweepCrossingMinimizer/CrossMinType",454,Unt,D1,MF);wAn(1397,1,DVn,Ac),MWn.Mb=function(n){return _cn(),0==BB(n,29).a.c.length},vX(I3n,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),wAn(1799,1,N1n,aZ),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){t[n][0].c.p=n,this.b[n]=x8(_mt,{3:1,4:1,5:1,1944:1},659,t[n].length,0,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,$X(this.b[n],t,new $c)},vX(I3n,"LayerSweepTypeDecider",1799),wAn(659,1,{659:1},$c),MWn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0;var Dmt,Rmt,Kmt,_mt=vX(I3n,"LayerSweepTypeDecider/NodeInfo",659);wAn(1800,1,qYn,Lc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(I3n,"LayerSweepTypeDecider/lambda$0$Type",1800),wAn(1801,1,qYn,Nc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(I3n,"LayerSweepTypeDecider/lambda$1$Type",1801),wAn(1833,402,S3n,Dj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,o=new Wb(n.j);o.a<o.c.c.length;)0!=(a=BB(n0(o),11)).e.c.length&&(++i,a.j==(kUn(),sCt)&&++r);for(c=t+r,f=t+i,u=xwn(n,(ain(),Hvt)).Kc();u.Ob();)(a=BB(u.Pb(),11)).j==(kUn(),sCt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,u=xwn(n,(ain(),qvt)).Kc();u.Ob();)++h,s[(a=BB(u.Pb(),11)).p]=t+h;return h;default:throw Hp(new wv)}},vX(I3n,"LayerTotalPortDistributor",1833),wAn(660,817,{660:1,225:1},prn),MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,this):(SQ(),m$(n,this.d)),qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),xdt)))||Ban(this.e,n))},vX(I3n,"ModelOrderBarycenterHeuristic",660),wAn(1803,1,MYn,Wd),MWn.ue=function(n,t){return KSn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),wAn(1403,1,E3n,jf),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Dmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){mY((BB(n,37),t))},vX(I3n,"NoCrossingMinimizer",1403),wAn(796,402,S3n,Rj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Wb(n.j);h.a<h.c.c.length;)0!=(o=BB(n0(h),11)).e.c.length&&(++r,o.j==(kUn(),sCt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=xwn(n,(ain(),Hvt)).Kc();s.Ob();)(o=BB(s.Pb(),11)).j==(kUn(),sCt)?(f[o.p]=a,a-=i):(f[o.p]=b,b-=i);break;case 2:for(u=0,h=new Wb(n.j);h.a<h.c.c.length;)0==(o=BB(n0(h),11)).g.c.length||++u;for(l=t+(i=1/(u+1)),s=xwn(n,(ain(),qvt)).Kc();s.Ob();)f[(o=BB(s.Pb(),11)).p]=l,l+=i;break;default:throw Hp(new _y("Port type is undefined"))}return 1},vX(I3n,"NodeRelativePortDistributor",796),wAn(807,1,{},Vz,HMn),vX(I3n,"SweepCopy",807),wAn(1798,1,N1n,wdn),MWn.Of=function(n,t){},MWn.Mf=function(){var n;n=x8(ANt,hQn,25,this.f,15,1),this.d=new eg(n),this.a=new QK(n)},MWn.Nf=function(n,t,e,i,r,c){var a;a=BB(xq(c[n][t].j,e),11),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(uSn(),Cut)},MWn.Qf=function(n,t,e,i){var r;(r=BB(xq(i[n][t].j,e),11)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(kUn(),oCt)?this.b[n]=!0:r.j==ICt&&n>0&&(this.b[n-1]=!0))},MWn.f=0,vX(L1n,"AllCrossingsCounter",1798),wAn(587,1,{},mrn),MWn.b=0,MWn.d=0,vX(L1n,"BinaryIndexedTree",587),wAn(524,1,{},QK),vX(L1n,"CrossingsCounter",524),wAn(1906,1,MYn,Vd),MWn.ue=function(n,t){return Xq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$0$Type",1906),wAn(1907,1,MYn,Qd),MWn.ue=function(n,t){return Wq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$1$Type",1907),wAn(1908,1,MYn,Yd),MWn.ue=function(n,t){return Vq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$2$Type",1908),wAn(1909,1,MYn,Jd),MWn.ue=function(n,t){return Qq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$3$Type",1909),wAn(1910,1,lVn,Zd),MWn.td=function(n){p7(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$4$Type",1910),wAn(1911,1,DVn,ng),MWn.Mb=function(n){return yC(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$5$Type",1911),wAn(1912,1,lVn,tg),MWn.td=function(n){mC(this,n)},vX(L1n,"CrossingsCounter/lambda$6$Type",1912),wAn(1913,1,lVn,ZP),MWn.td=function(n){var t;hH(),d3(this.b,(t=this.a,BB(n,11),t))},vX(L1n,"CrossingsCounter/lambda$7$Type",1913),wAn(826,1,qYn,xc),MWn.Lb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},vX(L1n,"CrossingsCounter/lambda$8$Type",826),wAn(1905,1,{},eg),vX(L1n,"HyperedgeCrossingsCounter",1905),wAn(467,1,{35:1,467:1},DR),MWn.wd=function(n){return vgn(this,BB(n,467))},MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0;var Fmt=vX(L1n,"HyperedgeCrossingsCounter/Hyperedge",467);wAn(362,1,{35:1,362:1},qV),MWn.wd=function(n){return l$n(this,BB(n,362))},MWn.b=0,MWn.c=0;var Bmt,Hmt,qmt=vX(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner",362);wAn(523,22,{3:1,35:1,22:1,523:1},JP);var Gmt,zmt,Umt,Xmt,Wmt,Vmt=Ben(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Unt,XY,SF);wAn(1405,1,E3n,lf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?zmt:null},MWn.pf=function(n,t){ljn(this,BB(n,37),t)},vX(C3n,"InteractiveNodePlacer",1405),wAn(1406,1,E3n,ff),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Umt:null},MWn.pf=function(n,t){jmn(this,BB(n,37),t)},vX(C3n,"LinearSegmentsNodePlacer",1406),wAn(257,1,{35:1,257:1},rm),MWn.wd=function(n){return uj(this,BB(n,257))},MWn.Fb=function(n){var t;return!!cL(n,257)&&(t=BB(n,257),this.b==t.b)},MWn.Hb=function(){return this.b},MWn.Ib=function(){return"ls"+LMn(this.e)},MWn.a=0,MWn.b=0,MWn.c=-1,MWn.d=-1,MWn.g=0;var Qmt,Ymt=vX(C3n,"LinearSegmentsNodePlacer/LinearSegment",257);wAn(1408,1,E3n,_G),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Qmt:null},MWn.pf=function(n,t){SXn(this,BB(n,37),t)},MWn.b=0,MWn.g=0,vX(C3n,"NetworkSimplexPlacer",1408),wAn(1427,1,MYn,Dc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"NetworkSimplexPlacer/0methodref$compare$Type",1427),wAn(1429,1,MYn,Rc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"NetworkSimplexPlacer/1methodref$compare$Type",1429),wAn(649,1,{649:1},nI);var Jmt=vX(C3n,"NetworkSimplexPlacer/EdgeRep",649);wAn(401,1,{401:1},GV),MWn.b=!1;var Zmt,nyt,tyt,eyt=vX(C3n,"NetworkSimplexPlacer/NodeRep",401);wAn(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},um),vX(C3n,"NetworkSimplexPlacer/Path",508),wAn(1409,1,{},Kc),MWn.Kb=function(n){return BB(n,17).d.i.k},vX(C3n,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),wAn(1410,1,DVn,_c),MWn.Mb=function(n){return BB(n,267)==(uSn(),Put)},vX(C3n,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),wAn(1411,1,{},Fc),MWn.Kb=function(n){return BB(n,17).d.i},vX(C3n,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),wAn(1412,1,DVn,ig),MWn.Mb=function(n){return HD(tdn(BB(n,10)))},vX(C3n,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),wAn(1413,1,DVn,Bc),MWn.Mb=function(n){return hq(BB(n,11))},vX(C3n,"NetworkSimplexPlacer/lambda$0$Type",1413),wAn(1414,1,lVn,tI),MWn.td=function(n){D$(this.a,this.b,BB(n,11))},vX(C3n,"NetworkSimplexPlacer/lambda$1$Type",1414),wAn(1423,1,lVn,rg),MWn.td=function(n){WIn(this.a,BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$10$Type",1423),wAn(1424,1,{},Hc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$11$Type",1424),wAn(1425,1,lVn,cg),MWn.td=function(n){BDn(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$12$Type",1425),wAn(1426,1,{},qc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(C3n,"NetworkSimplexPlacer/lambda$13$Type",1426),wAn(1428,1,{},Gc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(C3n,"NetworkSimplexPlacer/lambda$15$Type",1428),wAn(1430,1,DVn,zc),MWn.Mb=function(n){return BZ(),BB(n,401).c.k==(uSn(),Iut)},vX(C3n,"NetworkSimplexPlacer/lambda$17$Type",1430),wAn(1431,1,DVn,Uc),MWn.Mb=function(n){return BZ(),BB(n,401).c.j.c.length>1},vX(C3n,"NetworkSimplexPlacer/lambda$18$Type",1431),wAn(1432,1,lVn,zV),MWn.td=function(n){cwn(this.c,this.b,this.d,this.a,BB(n,401))},MWn.c=0,MWn.d=0,vX(C3n,"NetworkSimplexPlacer/lambda$19$Type",1432),wAn(1415,1,{},Xc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$2$Type",1415),wAn(1433,1,lVn,ag),MWn.td=function(n){N$(this.a,BB(n,11))},MWn.a=0,vX(C3n,"NetworkSimplexPlacer/lambda$20$Type",1433),wAn(1434,1,{},Wc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$21$Type",1434),wAn(1435,1,lVn,ug),MWn.td=function(n){dL(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$22$Type",1435),wAn(1436,1,DVn,Vc),MWn.Mb=function(n){return HD(n)},vX(C3n,"NetworkSimplexPlacer/lambda$23$Type",1436),wAn(1437,1,{},Qc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$24$Type",1437),wAn(1438,1,DVn,og),MWn.Mb=function(n){return EO(this.a,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$25$Type",1438),wAn(1439,1,lVn,eI),MWn.td=function(n){MPn(this.a,this.b,BB(n,10))},vX(C3n,"NetworkSimplexPlacer/lambda$26$Type",1439),wAn(1440,1,DVn,Yc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$27$Type",1440),wAn(1441,1,DVn,Jc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$28$Type",1441),wAn(1442,1,{},sg),MWn.Ce=function(n,t){return sL(this.a,BB(n,29),BB(t,29))},vX(C3n,"NetworkSimplexPlacer/lambda$29$Type",1442),wAn(1416,1,{},Zc),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(C3n,"NetworkSimplexPlacer/lambda$3$Type",1416),wAn(1417,1,DVn,na),MWn.Mb=function(n){return BZ(),t2(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$4$Type",1417),wAn(1418,1,lVn,hg),MWn.td=function(n){iBn(this.a,BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$5$Type",1418),wAn(1419,1,{},ta),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(C3n,"NetworkSimplexPlacer/lambda$6$Type",1419),wAn(1420,1,DVn,ea),MWn.Mb=function(n){return BZ(),BB(n,10).k==(uSn(),Iut)},vX(C3n,"NetworkSimplexPlacer/lambda$7$Type",1420),wAn(1421,1,{},ia),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(hbn(BB(n,10)).a.Kc(),new h))))},vX(C3n,"NetworkSimplexPlacer/lambda$8$Type",1421),wAn(1422,1,DVn,ra),MWn.Mb=function(n){return BZ(),UH(BB(n,17))},vX(C3n,"NetworkSimplexPlacer/lambda$9$Type",1422),wAn(1404,1,E3n,If),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Zmt:null},MWn.pf=function(n,t){kHn(BB(n,37),t)},vX(C3n,"SimpleNodePlacer",1404),wAn(180,1,{180:1},qKn),MWn.Ib=function(){var n;return n="",this.c==(gJ(),tyt)?n+=aJn:this.c==nyt&&(n+=cJn),this.o==(oZ(),ryt)?n+=pJn:this.o==cyt?n+="UP":n+="BALANCED",n},vX($3n,"BKAlignedLayout",180),wAn(516,22,{3:1,35:1,22:1,516:1},cI);var iyt,ryt,cyt,ayt=Ben($3n,"BKAlignedLayout/HDirection",516,Unt,VY,PF);wAn(515,22,{3:1,35:1,22:1,515:1},rI);var uyt,oyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,vyt,myt,yyt,kyt,jyt,Eyt,Tyt,Myt,Syt=Ben($3n,"BKAlignedLayout/VDirection",515,Unt,QY,IF);wAn(1634,1,{},iI),vX($3n,"BKAligner",1634),wAn(1637,1,{},Jyn),vX($3n,"BKCompactor",1637),wAn(654,1,{654:1},ca),MWn.a=0,vX($3n,"BKCompactor/ClassEdge",654),wAn(458,1,{458:1},cm),MWn.a=null,MWn.b=0,vX($3n,"BKCompactor/ClassNode",458),wAn(1407,1,E3n,jC),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?oyt:null},MWn.pf=function(n,t){rWn(this,BB(n,37),t)},MWn.d=!1,vX($3n,"BKNodePlacer",1407),wAn(1635,1,{},aa),MWn.d=0,vX($3n,"NeighborhoodInformation",1635),wAn(1636,1,MYn,fg),MWn.ue=function(n,t){return Mtn(this,BB(n,46),BB(t,46))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($3n,"NeighborhoodInformation/NeighborComparator",1636),wAn(808,1,{}),vX($3n,"ThresholdStrategy",808),wAn(1763,808,{},dm),MWn.bg=function(n,t,e){return this.a.o==(oZ(),cyt)?RQn:KQn},MWn.cg=function(){},vX($3n,"ThresholdStrategy/NullThresholdStrategy",1763),wAn(579,1,{579:1},aI),MWn.c=!1,MWn.d=!1,vX($3n,"ThresholdStrategy/Postprocessable",579),wAn(1764,808,{},gm),MWn.bg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,gJ(),r&&(c=THn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=THn(this,e,!1)),c):n},MWn.cg=function(){for(var n,t,e;0!=this.d.b;)(t=cFn(this,e=BB(PJ(this.d),579))).a&&(n=t.a,(qy(this.a.f[this.a.g[e.b.p].p])||b5(n)||n.c.i.c!=n.d.i.c)&&(b$n(this,e)||rA(this.e,e)));for(;0!=this.e.a.c.length;)b$n(this,BB(thn(this.e),579))},vX($3n,"ThresholdStrategy/SimpleThresholdStrategy",1764),wAn(635,1,{635:1,246:1,234:1},ua),MWn.Kf=function(){return Tan(this)},MWn.Xf=function(){return Tan(this)},vX(L3n,"EdgeRouterFactory",635),wAn(1458,1,E3n,Cf),MWn.Yf=function(n){return Uxn(BB(n,37))},MWn.pf=function(n,t){DHn(BB(n,37),t)},vX(L3n,"OrthogonalEdgeRouter",1458),wAn(1451,1,E3n,EC),MWn.Yf=function(n){return Ejn(BB(n,37))},MWn.pf=function(n,t){OUn(this,BB(n,37),t)},vX(L3n,"PolylineEdgeRouter",1451),wAn(1452,1,qYn,oa),MWn.Lb=function(n){return Qan(BB(n,10))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return Qan(BB(n,10))},vX(L3n,"PolylineEdgeRouter/1",1452),wAn(1809,1,DVn,sa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$0$Type",1809),wAn(1810,1,{},ha),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$1$Type",1810),wAn(1811,1,DVn,fa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$2$Type",1811),wAn(1812,1,{},la),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$3$Type",1812),wAn(1813,1,{},ba),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$4$Type",1813),wAn(1814,1,{},wa),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$5$Type",1814),wAn(112,1,{35:1,112:1},Fan),MWn.wd=function(n){return oj(this,BB(n,112))},MWn.Fb=function(n){var t;return!!cL(n,112)&&(t=BB(n,112),this.g==t.g)},MWn.Hb=function(){return this.g},MWn.Ib=function(){var n,t,e,i;for(n=new lN("{"),i=new Wb(this.n);i.a<i.c.c.length;)null==(t=gyn((e=BB(n0(i),11)).i))&&(t="n"+AK(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},MWn.a=0,MWn.b=0,MWn.c=NaN,MWn.d=0,MWn.g=0,MWn.i=0,MWn.o=0,MWn.s=NaN,vX(N3n,"HyperEdgeSegment",112),wAn(129,1,{129:1},zZ),MWn.Ib=function(){return this.a+"->"+this.b+" ("+wx(this.c)+")"},MWn.d=0,vX(N3n,"HyperEdgeSegmentDependency",129),wAn(520,22,{3:1,35:1,22:1,520:1},uI);var Pyt,Iyt,Cyt,Oyt,Ayt,$yt,Lyt,Nyt,xyt=Ben(N3n,"HyperEdgeSegmentDependency/DependencyType",520,Unt,WY,CF);wAn(1815,1,{},lg),vX(N3n,"HyperEdgeSegmentSplitter",1815),wAn(1816,1,{},zj),MWn.a=0,MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/AreaRating",1816),wAn(329,1,{329:1},kB),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"HyperEdgeSegmentSplitter/FreeArea",329),wAn(1817,1,MYn,ja),MWn.ue=function(n,t){return OK(BB(n,112),BB(t,112))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(N3n,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),wAn(1818,1,lVn,XV),MWn.td=function(n){n4(this.a,this.d,this.c,this.b,BB(n,112))},MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),wAn(1819,1,{},Ea),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),wAn(1820,1,{},Ta),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),wAn(1821,1,{},Ma),MWn.Fe=function(n){return Gy(MD(n))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),wAn(655,1,{},fX),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"OrthogonalRoutingGenerator",655),wAn(1638,1,{},Sa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$0$Type",1638),wAn(1639,1,{},Pa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$1$Type",1639),wAn(661,1,{}),vX(x3n,"BaseRoutingDirectionStrategy",661),wAn(1807,661,{},pm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xI(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xI(w,a=t+b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xI(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),SCt},MWn.gg=function(){return kUn(),sCt},vX(x3n,"NorthToSouthRoutingStrategy",1807),wAn(1808,661,{},vm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xI(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xI(w,a=t-b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xI(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),sCt},MWn.gg=function(){return kUn(),SCt},vX(x3n,"SouthToNorthRoutingStrategy",1808),wAn(1806,661,{},mm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>lZn&&(c=n,r=new xI(a=f,l),DH(u.a,r),F_n(this,u,c,r,!0),(b=n.r)&&(r=new xI(a,w=Gy(MD(Dpn(b.e,0)))),DH(u.a,r),F_n(this,u,c,r,!0),c=b,r=new xI(a=t+b.o*i,w),DH(u.a,r),F_n(this,u,c,r,!0)),r=new xI(a,g),DH(u.a,r),F_n(this,u,c,r,!0)))},MWn.eg=function(n){return n.i.n.b+n.n.b+n.a.b},MWn.fg=function(){return kUn(),oCt},MWn.gg=function(){return kUn(),ICt},vX(x3n,"WestToEastRoutingStrategy",1806),wAn(813,1,{},oBn),MWn.Ib=function(){return LMn(this.a)},MWn.b=0,MWn.c=!1,MWn.d=!1,MWn.f=0,vX(R3n,"NubSpline",813),wAn(407,1,{407:1},Exn,wJ),vX(R3n,"NubSpline/PolarCP",407),wAn(1453,1,E3n,hyn),MWn.Yf=function(n){return rTn(BB(n,37))},MWn.pf=function(n,t){cXn(this,BB(n,37),t)},vX(R3n,"SplineEdgeRouter",1453),wAn(268,1,{268:1},S6),MWn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},MWn.c=0,vX(R3n,"SplineEdgeRouter/Dependency",268),wAn(455,22,{3:1,35:1,22:1,455:1},oI);var Dyt,Ryt,Kyt,_yt,Fyt,Byt=Ben(R3n,"SplineEdgeRouter/SideToProcess",455,Unt,YY,OF);wAn(1454,1,DVn,ya),MWn.Mb=function(n){return gxn(),!BB(n,128).o},vX(R3n,"SplineEdgeRouter/lambda$0$Type",1454),wAn(1455,1,{},ma),MWn.Ge=function(n){return gxn(),BB(n,128).v+1},vX(R3n,"SplineEdgeRouter/lambda$1$Type",1455),wAn(1456,1,lVn,sI),MWn.td=function(n){iq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$2$Type",1456),wAn(1457,1,lVn,hI),MWn.td=function(n){rq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$3$Type",1457),wAn(128,1,{35:1,128:1},tIn,hqn),MWn.wd=function(n){return sj(this,BB(n,128))},MWn.b=0,MWn.e=!1,MWn.f=0,MWn.g=0,MWn.j=!1,MWn.k=!1,MWn.n=0,MWn.o=!1,MWn.p=!1,MWn.q=!1,MWn.s=0,MWn.u=0,MWn.v=0,MWn.F=0,vX(R3n,"SplineSegment",128),wAn(459,1,{459:1},ka),MWn.a=0,MWn.b=!1,MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=0,vX(R3n,"SplineSegment/EdgeInformation",459),wAn(1234,1,{},da),vX(H3n,iZn,1234),wAn(1235,1,MYn,ga),MWn.ue=function(n,t){return CCn(BB(n,135),BB(t,135))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H3n,rZn,1235),wAn(1233,1,{},AE),vX(H3n,"MrTree",1233),wAn(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},fI),MWn.Kf=function(){return ACn(this)},MWn.Xf=function(){return ACn(this)};var Hyt,qyt=Ben(H3n,"TreeLayoutPhases",393,Unt,j3,AF);wAn(1130,209,NJn,_R),MWn.Ze=function(n,t){var e,i,r,c,a,u;for(qy(TD(ZAn(n,(IAn(),Ikt))))||jJ(new Tw((GM(),new Dy(n)))),qan(a=new P6,n),hon(a,(qqn(),skt),n),v_n(n,a,u=new xp),W_n(n,a,u),c=a,i=new Wb(r=x_n(this.a,c));i.a<i.c.c.length;)e=BB(n0(i),135),WEn(this.b,e,mcn(t,1/r.c.length));Czn(c=tWn(r))},vX(H3n,"TreeLayoutProvider",1130),wAn(1847,1,pVn,pa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/1",1847),wAn(1848,1,pVn,va),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/2",1848),wAn(502,134,{3:1,502:1,94:1,134:1}),MWn.g=0,vX(q3n,"TGraphElement",502),wAn(188,502,{3:1,188:1,502:1,94:1,134:1},UQ),MWn.Ib=function(){return this.b&&this.c?g0(this.b)+"->"+g0(this.c):"e_"+nsn(this)},vX(q3n,"TEdge",188),wAn(135,134,{3:1,135:1,94:1,134:1},P6),MWn.Ib=function(){var n,t,e,i,r;for(r=null,i=spn(this.b,0);i.b!=i.d.c;)r+=(null==(e=BB(b3(i),86)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=spn(this.a,0);t.b!=t.d.c;)r+=((n=BB(b3(t),188)).b&&n.c?g0(n.b)+"->"+g0(n.c):"e_"+nsn(n))+"\n";return r};var Gyt=vX(q3n,"TGraph",135);wAn(633,502,{3:1,502:1,633:1,94:1,134:1}),vX(q3n,"TShape",633),wAn(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},csn),MWn.Ib=function(){return g0(this)};var zyt,Uyt,Xyt,Wyt,Vyt,Qyt,Yyt=vX(q3n,"TNode",86);wAn(255,1,pVn,bg),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new wg(spn(this.a.d,0))},vX(q3n,"TNode/2",255),wAn(358,1,QWn,wg),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(b3(this.a),188).c},MWn.Ob=function(){return EE(this.a)},MWn.Qb=function(){mtn(this.a)},vX(q3n,"TNode/2/1",358),wAn(1840,1,n1n,KR),MWn.pf=function(n,t){xFn(this,BB(n,135),t)},vX(G3n,"FanProcessor",1840),wAn(327,22,{3:1,35:1,22:1,327:1,234:1},lI),MWn.Kf=function(){switch(this.g){case 0:return new Qm;case 1:return new KR;case 2:return new Oa;case 3:return new Ia;case 4:return new $a;case 5:return new La;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Jyt,Zyt,nkt,tkt,ekt,ikt,rkt,ckt,akt,ukt,okt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,vkt,mkt,ykt,kkt,jkt,Ekt,Tkt,Mkt,Skt,Pkt,Ikt,Ckt,Okt,Akt,$kt,Lkt,Nkt,xkt,Dkt,Rkt,Kkt,_kt=Ben(G3n,S1n,327,Unt,r9,$F);wAn(1843,1,n1n,Ia),MWn.pf=function(n,t){u$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"LevelHeightProcessor",1843),wAn(1844,1,pVn,Ca),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"LevelHeightProcessor/1",1844),wAn(1841,1,n1n,Oa),MWn.pf=function(n,t){QPn(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NeighborsProcessor",1841),wAn(1842,1,pVn,Aa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"NeighborsProcessor/1",1842),wAn(1845,1,n1n,$a),MWn.pf=function(n,t){a$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NodePositionProcessor",1845),wAn(1839,1,n1n,Qm),MWn.pf=function(n,t){ZHn(this,BB(n,135))},vX(G3n,"RootProcessor",1839),wAn(1846,1,n1n,La),MWn.pf=function(n,t){dln(BB(n,135))},vX(G3n,"Untreeifyer",1846),wAn(851,1,QYn,Pf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X3n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),kkt),(PPn(),gMt)),qkt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W3n),""),"Search Order"),"Which search order to use when computing a spanning tree."),mkt),gMt),Jkt),nbn(hMt)))),KGn((new Sf,n))},vX(V3n,"MrTreeMetaDataProvider",851),wAn(994,1,QYn,Sf),MWn.Qe=function(n){KGn(n)},vX(V3n,"MrTreeOptions",994),wAn(995,1,{},Na),MWn.$e=function(){return new _R},MWn._e=function(n){},vX(V3n,"MrTreeOptions/MrtreeFactory",995),wAn(480,22,{3:1,35:1,22:1,480:1},bI);var Fkt,Bkt,Hkt,qkt=Ben(V3n,"OrderWeighting",480,Unt,ZY,LF);wAn(425,22,{3:1,35:1,22:1,425:1},wI);var Gkt,zkt,Ukt,Xkt,Wkt,Vkt,Qkt,Ykt,Jkt=Ben(V3n,"TreeifyingOrder",425,Unt,JY,xF);wAn(1459,1,E3n,pf),MWn.Yf=function(n){return BB(n,135),zkt},MWn.pf=function(n,t){ycn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),wAn(1460,1,E3n,vf),MWn.Yf=function(n){return BB(n,135),Ukt},MWn.pf=function(n,t){fIn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),wAn(1461,1,E3n,gf),MWn.Yf=function(n){return BB(n,135),Xkt},MWn.pf=function(n,t){nRn(this,BB(n,135),t)},MWn.a=0,vX("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),wAn(1462,1,E3n,mf),MWn.Yf=function(n){return BB(n,135),Wkt},MWn.pf=function(n,t){xkn(BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462),wAn(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},dI),MWn.Kf=function(){return bwn(this)},MWn.Xf=function(){return bwn(this)};var Zkt,njt,tjt,ejt,ijt=Ben(J3n,"RadialLayoutPhases",495,Unt,nJ,NF);wAn(1131,209,NJn,OE),MWn.Ze=function(n,t){var e,i,r;if(OTn(t,"Radial layout",EIn(this,n).c.length),qy(TD(ZAn(n,(Uyn(),Ajt))))||jJ(new Tw((GM(),new Dy(n)))),r=uTn(n),Ypn(n,(wD(),Vkt),r),!r)throw Hp(new _y("The given graph is not a tree!"));for(0==(e=Gy(MD(ZAn(n,Djt))))&&(e=fCn(n)),Ypn(n,Djt,e),i=new Wb(EIn(this,n));i.a<i.c.c.length;)BB(n0(i),51).pf(n,mcn(t,1));HSn(t)},vX(J3n,"RadialLayoutProvider",1131),wAn(549,1,MYn,CE),MWn.ue=function(n,t){return DRn(this.a,this.b,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=0,MWn.b=0,vX(J3n,"RadialUtil/lambda$0$Type",549),wAn(1375,1,n1n,Da),MWn.pf=function(n,t){dGn(BB(n,33),t)},vX(t4n,"CalculateGraphSize",1375),wAn(442,22,{3:1,35:1,22:1,442:1,234:1},gI),MWn.Kf=function(){switch(this.g){case 0:return new Ba;case 1:return new xa;case 2:return new Da;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var rjt,cjt,ajt,ujt=Ben(t4n,S1n,442,Unt,R1,DF);wAn(645,1,{}),MWn.e=1,MWn.g=0,vX(e4n,"AbstractRadiusExtensionCompaction",645),wAn(1772,645,{},gD),MWn.hg=function(n){var t,e,i,r,c,a,u,o,s;for(this.c=BB(ZAn(n,(wD(),Vkt)),33),eb(this,this.c),this.d=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(o=BB(ZAn(n,Mjt),19))&&tb(this,o.a),ib(this,(kW(u=MD(ZAn(n,(sWn(),LPt)))),u)),s=wDn(this.c),this.d&&this.d.lg(s),vKn(this,s),a=new Jy(Pun(Gk(UOt,1),i4n,33,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new Jy(Pun(Gk(UOt,1),i4n,33,0,[(l1(t,s.c.length),BB(s.c[t],33))])),c=t<s.c.length-1?(l1(t+1,s.c.length),BB(s.c[t+1],33)):(l1(0,s.c.length),BB(s.c[0],33)),i=0==t?BB(xq(s,s.c.length-1),33):(l1(t-1,s.c.length),BB(s.c[t-1],33)),ZTn(this,(l1(t,s.c.length),BB(s.c[t],33),a),i,c,r)},vX(e4n,"AnnulusWedgeCompaction",1772),wAn(1374,1,n1n,xa),MWn.pf=function(n,t){bjn(BB(n,33),t)},vX(e4n,"GeneralCompactor",1374),wAn(1771,645,{},Ra),MWn.hg=function(n){var t,e,i,r;e=BB(ZAn(n,(wD(),Vkt)),33),this.f=e,this.b=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(r=BB(ZAn(n,Mjt),19))&&tb(this,r.a),ib(this,(kW(i=MD(ZAn(n,(sWn(),LPt)))),i)),t=wDn(e),this.b&&this.b.lg(t),vPn(this,t)},MWn.a=0,vX(e4n,"RadialCompaction",1771),wAn(1779,1,{},Ka),MWn.ig=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Wb(a=wDn(n));c.a<c.c.c.length;)for(r=BB(n0(c),33),e=++i;e<a.c.length;e++)YFn(this,r,(l1(e,a.c.length),BB(a.c[e],33)))&&(t+=1);return t},vX(r4n,"CrossingMinimizationPosition",1779),wAn(1777,1,{},_a),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f,l,b,w,d;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),f=(o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+o.g/2,l=o.j+o.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new Gj).a=f-c,b.b=l-a,Ukn(u=new xI(b.a,b.b),n.g,n.f),b.a-=u.a,b.b-=u.b,c=f-b.a,a=l-b.b,Ukn(s=new xI(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},vX(r4n,"EdgeLengthOptimization",1777),wAn(1778,1,{},Fa),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),u=(a=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+a.g/2,o=a.j+a.f/2,c=BB(ZAn(a,(sWn(),gPt)),8),s=u-(n.i+c.a+n.g/2),f=o-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},vX(r4n,"EdgeLengthPositionOptimization",1778),wAn(1373,645,n1n,Ba),MWn.pf=function(n,t){fLn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),wAn(426,22,{3:1,35:1,22:1,426:1},pI);var ojt,sjt,hjt,fjt,ljt=Ben(a4n,"AnnulusWedgeCriteria",426,Unt,tJ,RF);wAn(380,22,{3:1,35:1,22:1,380:1},vI);var bjt,wjt,djt,gjt,pjt,vjt,mjt,yjt,kjt,jjt,Ejt,Tjt,Mjt,Sjt,Pjt,Ijt,Cjt,Ojt,Ajt,$jt,Ljt,Njt,xjt,Djt,Rjt,Kjt,_jt,Fjt,Bjt,Hjt,qjt,Gjt=Ben(a4n,FJn,380,Unt,K1,KF);wAn(852,1,QYn,yf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u4n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),iln(0)),(PPn(),vMt)),Att),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o4n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s4n),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),gjt),gMt),Gjt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,h4n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),iln(1)),vMt),Att),nbn(hMt)))),a2(n,h4n,s4n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f4n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),jjt),gMt),Yjt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l4n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),Tjt),gMt),ljt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b4n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vjt),gMt),Vjt),nbn(hMt)))),tUn((new kf,n))},vX(a4n,"RadialMetaDataProvider",852),wAn(996,1,QYn,kf),MWn.Qe=function(n){tUn(n)},vX(a4n,"RadialOptions",996),wAn(997,1,{},Ha),MWn.$e=function(){return new OE},MWn._e=function(n){},vX(a4n,"RadialOptions/RadialFactory",997),wAn(340,22,{3:1,35:1,22:1,340:1},mI);var zjt,Ujt,Xjt,Wjt,Vjt=Ben(a4n,"RadialTranslationStrategy",340,Unt,E3,_F);wAn(293,22,{3:1,35:1,22:1,293:1},yI);var Qjt,Yjt=Ben(a4n,"SortingStrategy",293,Unt,F1,FF);wAn(1449,1,E3n,qa),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){SLn(this,BB(n,33),t)},MWn.c=0,vX("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),wAn(1775,1,{},Ga),MWn.jg=function(n){return Upn(n)},vX(d4n,"AnnulusWedgeByLeafs",1775),wAn(1776,1,{},za),MWn.jg=function(n){return VEn(this,n)},vX(d4n,"AnnulusWedgeByNodeSpace",1776),wAn(1450,1,E3n,Ua),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){bEn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),wAn(811,1,{},Jm),MWn.kg=function(n){},MWn.lg=function(n){nv(this,n)},vX(g4n,"IDSorter",811),wAn(1774,1,MYn,Xa),MWn.ue=function(n,t){return Qrn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(g4n,"IDSorter/lambda$0$Type",1774),wAn(1773,1,{},Arn),MWn.kg=function(n){c2(this,n)},MWn.lg=function(n){n.dc()||(this.e||c2(this,nG(BB(n.Xb(0),33))),nv(this.e,n))},vX(g4n,"PolarCoordinateSorter",1773),wAn(1136,209,NJn,Wa),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;if(OTn(t,"Rectangle Packing",1),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),i=Gy(MD(ZAn(n,(W$n(),lEt)))),w=BB(ZAn(n,PEt),381),p=qy(TD(ZAn(n,yEt))),y=qy(TD(ZAn(n,SEt))),f=qy(TD(ZAn(n,gEt))),k=BB(ZAn(n,IEt),116),m=Gy(MD(ZAn(n,$Et))),r=qy(TD(ZAn(n,AEt))),l=qy(TD(ZAn(n,pEt))),g=qy(TD(ZAn(n,vEt))),T=Gy(MD(ZAn(n,LEt))),!n.a&&(n.a=new eU(UOt,n,10,11)),Trn(E=n.a),g){for(b=new Np,o=new AL(E);o.e!=o.i.gc();)P8(a=BB(kpn(o),33),dEt)&&(b.c[b.c.length]=a);for(s=new Wb(b);s.a<s.c.c.length;)snn(E,a=BB(n0(s),33));for(SQ(),m$(b,new Va),h=new Wb(b);h.a<h.c.c.length;)a=BB(n0(h),33),j=BB(ZAn(a,dEt),19).a,sln(E,j=e.Math.min(j,E.i),a);for(d=0,u=new AL(E);u.e!=u.i.gc();)Ypn(a=BB(kpn(u),33),wEt,iln(d)),++d}(v=XPn(n)).a-=k.b+k.c,v.b-=k.d+k.a,v.a,T<0||T<v.a?(c=OKn(new jB(i,w,p),E,m,k),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt))):c=new eq(i,T,0,(YLn(),_Et)),v.a+=k.b+k.c,v.b+=k.d+k.a,y||(Trn(E),c=kzn(new m3(i,f,l,r,m),E,e.Math.max(v.a,c.c),v,t,n,k)),pan(E,k),KUn(n,c.c+(k.b+k.c),c.b+(k.d+k.a),!1,!0),qy(TD(ZAn(n,MEt)))||jJ(new Tw((GM(),new Dy(n)))),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),HSn(t)},vX(y4n,"RectPackingLayoutProvider",1136),wAn(1137,1,MYn,Va),MWn.ue=function(n,t){return wsn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y4n,"RectPackingLayoutProvider/lambda$0$Type",1137),wAn(1256,1,{},jB),MWn.a=0,MWn.c=!1,vX(k4n,"AreaApproximation",1256);var Jjt,Zjt,nEt,tEt=bq(k4n,"BestCandidateFilter");wAn(638,1,{526:1},Qa),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=RQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.min(a,(u.c+(i.b+i.c))*(u.b+(i.d+i.a)));for(c=new Wb(n);c.a<c.c.c.length;)((r=BB(n0(c),220)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&(s.c[s.c.length]=r);return s},vX(k4n,"AreaFilter",638),wAn(639,1,{526:1},Ya),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(o=new Np,s=RQn,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),220),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Wb(n);c.a<c.c.c.length;)r=BB(n0(c),220),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&(o.c[o.c.length]=r);return o},vX(k4n,"AspectRatioFilter",639),wAn(637,1,{526:1},Ja),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=KQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.max(a,Yq(u.c+(i.b+i.c),u.b+(i.d+i.a),u.a));for(c=new Wb(n);c.a<c.c.c.length;)Yq((r=BB(n0(c),220)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&(s.c[s.c.length]=r);return s},vX(k4n,"ScaleMeasureFilter",637),wAn(381,22,{3:1,35:1,22:1,381:1},kI);var eEt,iEt,rEt,cEt,aEt,uEt,oEt,sEt,hEt,fEt,lEt,bEt,wEt,dEt,gEt,pEt,vEt,mEt,yEt,kEt,jEt,EEt,TEt,MEt,SEt,PEt,IEt,CEt,OEt,AEt,$Et,LEt,NEt=Ben(j4n,"OptimizationGoal",381,Unt,_1,BF);wAn(856,1,QYn,Of),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E4n),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),sEt),(PPn(),gMt)),NEt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T4n),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(hN(),!0)),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M4n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,S4n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P4n),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,I4n),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,C4n),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),wMt),ktt),nbn(sMt)))),a2(n,C4n,A4n,null),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O4n),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dMt),Ptt),nbn(sMt)))),NXn((new Af,n))},vX(j4n,"RectPackingMetaDataProvider",856),wAn(1004,1,QYn,Af),MWn.Qe=function(n){NXn(n)},vX(j4n,"RectPackingOptions",1004),wAn(1005,1,{},Za),MWn.$e=function(){return new Wa},MWn._e=function(n){},vX(j4n,"RectPackingOptions/RectpackingFactory",1005),wAn(1257,1,{},m3),MWn.a=0,MWn.b=!1,MWn.c=0,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=0,vX("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),wAn(187,1,{187:1},asn),MWn.a=0,MWn.c=!1,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.k=!1,MWn.o=RQn,MWn.p=RQn,MWn.r=0,MWn.s=0,MWn.t=0,vX(L4n,"Block",187),wAn(211,1,{211:1},RJ),MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockRow",211),wAn(443,1,{443:1},KJ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockStack",443),wAn(220,1,{220:1},eq,awn),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0;var xEt,DEt,REt,KEt,_Et,FEt=vX(L4n,"DrawingData",220);wAn(355,22,{3:1,35:1,22:1,355:1},jI);var BEt,HEt,qEt,GEt,zEt=Ben(L4n,"DrawingDataDescriptor",355,Unt,N5,HF);wAn(200,1,{200:1},x0),MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0,vX(L4n,"RectRow",200),wAn(756,1,{},Ehn),MWn.j=0,vX(x4n,g1n,756),wAn(1245,1,{},nu),MWn.Je=function(n){return W8(n.a,n.b)},vX(x4n,p1n,1245),wAn(1246,1,{},dg),MWn.Je=function(n){return p6(this.a,n)},vX(x4n,v1n,1246),wAn(1247,1,{},gg),MWn.Je=function(n){return Opn(this.a,n)},vX(x4n,m1n,1247),wAn(1248,1,{},pg),MWn.Je=function(n){return uon(this.a,n)},vX(x4n,"ElkGraphImporter/lambda$3$Type",1248),wAn(1249,1,{},vg),MWn.Je=function(n){return iOn(this.a,n)},vX(x4n,y1n,1249),wAn(1133,209,NJn,$E),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h,f;for(P8(n,(MMn(),kTt))&&(f=SD(ZAn(n,(Bvn(),qTt))),(c=XRn(cin(),f))&&BB(sJ(c.f),209).Ze(n,mcn(t,1))),Ypn(n,gTt,($6(),ZEt)),Ypn(n,pTt,($Sn(),cTt)),Ypn(n,vTt,(Lun(),WTt)),a=BB(ZAn(n,(Bvn(),_Tt)),19).a,OTn(t,"Overlap removal",1),qy(TD(ZAn(n,KTt))),o=new mg(u=new Rv),e=GXn(i=new Ehn,n),s=!0,r=0;r<a&&s;){if(qy(TD(ZAn(n,FTt)))){if(u.a.$b(),HPn(new C$(o),e.i),0==u.a.gc())break;e.e=u}for(h2(this.b),IU(this.b,(Pbn(),HEt),(OM(),GTt)),IU(this.b,qEt,e.g),IU(this.b,GEt,(CM(),QEt)),this.a=$qn(this.b,e),h=new Wb(this.a);h.a<h.c.c.length;)BB(n0(h),51).pf(e,mcn(t,1));cjn(i,e),s=qy(TD(mMn(e,(Xcn(),Yrt)))),++r}DGn(i,e),HSn(t)},vX(x4n,"OverlapRemovalLayoutProvider",1133),wAn(1134,1,{},mg),vX(x4n,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),wAn(437,22,{3:1,35:1,22:1,437:1},EI);var UEt,XEt,WEt=Ben(x4n,"SPOrEPhases",437,Unt,B1,qF);wAn(1255,1,{},LE),vX(x4n,"ShrinkTree",1255),wAn(1135,209,NJn,Zm),MWn.Ze=function(n,t){var e,i,r,c;P8(n,(MMn(),kTt))&&(c=SD(ZAn(n,kTt)),(r=XRn(cin(),c))&&BB(sJ(r.f),209).Ze(n,mcn(t,1))),e=GXn(i=new Ehn,n),$Ln(this.a,e,mcn(t,1)),DGn(i,e)},vX(x4n,"ShrinkTreeLayoutProvider",1135),wAn(300,134,{3:1,300:1,94:1,134:1},DJ),MWn.c=!1,vX("org.eclipse.elk.alg.spore.graph","Graph",300),wAn(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},LM),MWn.Kf=function(){return esn(this)},MWn.Xf=function(){return esn(this)};var VEt,QEt,YEt=Ben(D4n,FJn,482,Unt,KV,GF);wAn(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},vD),MWn.Kf=function(){return new ru},MWn.Xf=function(){return new ru};var JEt,ZEt,nTt,tTt=Ben(D4n,"OverlapRemovalStrategy",551,Unt,_V,zF);wAn(430,22,{3:1,35:1,22:1,430:1},TI);var eTt,iTt,rTt,cTt,aTt,uTt,oTt=Ben(D4n,"RootSelection",430,Unt,iJ,UF);wAn(316,22,{3:1,35:1,22:1,316:1},MI);var sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,vTt,mTt,yTt,kTt,jTt,ETt,TTt,MTt,STt,PTt,ITt,CTt,OTt,ATt,$Tt,LTt,NTt,xTt,DTt,RTt,KTt,_Tt,FTt,BTt,HTt,qTt,GTt,zTt=Ben(D4n,"SpanningTreeCostFunction",316,Unt,A5,XF);wAn(1002,1,QYn,Ef),MWn.Qe=function(n){yHn(n)},vX(D4n,"SporeCompactionOptions",1002),wAn(1003,1,{},tu),MWn.$e=function(){return new Zm},MWn._e=function(n){},vX(D4n,"SporeCompactionOptions/SporeCompactionFactory",1003),wAn(855,1,QYn,Tf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,K4n),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,q4n),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),DTt),gMt),VTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_4n),W4n),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),NTt),gMt),YTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F4n),W4n),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),$Tt),gMt),zTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B4n),W4n),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),yMt),Qtt),nbn(hMt)))),a2(n,B4n,H4n,ITt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H4n),W4n),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OTt),gMt),oTt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,G4n),E2n),"Compaction Strategy"),"This option defines how the compaction is applied."),ETt),gMt),YEt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z4n),E2n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U4n),V4n),"Upper limit for iterations of overlap removal"),null),iln(64)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X4n),V4n),"Whether to run a supplementary scanline overlap check."),null),!0),wMt),ktt),nbn(hMt)))),AKn((new Mf,n)),yHn((new Ef,n))},vX(D4n,"SporeMetaDataProvider",855),wAn(VVn,1,QYn,Mf),MWn.Qe=function(n){AKn(n)},vX(D4n,"SporeOverlapRemovalOptions",VVn),wAn(1001,1,{},eu),MWn.$e=function(){return new $E},MWn._e=function(n){},vX(D4n,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),wAn(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},XW),MWn.Kf=function(){return isn(this)},MWn.Xf=function(){return isn(this)};var UTt,XTt,WTt,VTt=Ben(D4n,"StructureExtractionStrategy",530,Unt,FV,WF);wAn(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},SI),MWn.Kf=function(){return wwn(this)},MWn.Xf=function(){return wwn(this)};var QTt,YTt=Ben(D4n,"TreeConstructionStrategy",429,Unt,eJ,VF);wAn(1443,1,E3n,iu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){Tjn(BB(n,300),t)},vX(Y4n,"DelaunayTriangulationPhase",1443),wAn(1444,1,lVn,yg),MWn.td=function(n){WB(this.a,BB(n,65).a)},vX(Y4n,"DelaunayTriangulationPhase/lambda$0$Type",1444),wAn(783,1,E3n,Vm),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){this.ng(BB(n,300),t)},MWn.ng=function(n,t){var e;OTn(t,"Minimum spanning tree construction",1),e=n.d?n.d.a:BB(xq(n.i,0),65).a,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,e,n.b)),n),HSn(t)},vX(J4n,"MinSTPhase",783),wAn(1446,783,E3n,ym),MWn.ng=function(n,t){var e,i;OTn(t,"Maximum spanning tree construction",1),e=new kg(n),i=n.d?n.d.c:BB(xq(n.i,0),65).c,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,i,e)),n),HSn(t)},vX(J4n,"MaxSTPhase",1446),wAn(1447,1,{},kg),MWn.Je=function(n){return CI(this.a,n)},vX(J4n,"MaxSTPhase/lambda$0$Type",1447),wAn(1445,1,lVn,jg),MWn.td=function(n){R$(this.a,BB(n,65))},vX(J4n,"MinSTPhase/lambda$0$Type",1445),wAn(785,1,E3n,ru),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){WTn(this,BB(n,300),t)},MWn.a=!1,vX(Z4n,"GrowTreePhase",785),wAn(786,1,lVn,EB),MWn.td=function(n){eun(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"GrowTreePhase/lambda$0$Type",786),wAn(1448,1,E3n,cu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){tmn(this,BB(n,300),t)},vX(Z4n,"ShrinkTreeCompactionPhase",1448),wAn(784,1,lVn,TB),MWn.td=function(n){lAn(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var JTt,ZTt,nMt=bq(y3n,"IGraphElementVisitor");wAn(860,1,{527:1},R0),MWn.og=function(n){var t;qan(t=hRn(this,n),BB(RX(this.b,n),94)),yLn(this,n,t)},vX(xJn,"LayoutConfigurator",860);var tMt,eMt,iMt,rMt=bq(xJn,"LayoutConfigurator/IPropertyHolderOptionFilter");wAn(932,1,{1933:1},au),MWn.pg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$0$Type",932),wAn(933,1,{1933:1},uu),MWn.pg=function(n,t){return SE(n,t)},vX(xJn,"LayoutConfigurator/lambda$1$Type",933),wAn(931,1,{831:1},ou),MWn.qg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$2$Type",931),wAn(934,1,DVn,LI),MWn.Mb=function(n){return YW(this.a,this.b,BB(n,1933))},vX(xJn,"LayoutConfigurator/lambda$3$Type",934),wAn(858,1,{},su),vX(xJn,"RecursiveGraphLayoutEngine",858),wAn(296,60,BVn,kv,rk),vX(xJn,"UnsupportedConfigurationException",296),wAn(453,60,BVn,ck),vX(xJn,"UnsupportedGraphException",453),wAn(754,1,{}),vX(y3n,"AbstractRandomListAccessor",754),wAn(500,754,{},INn),MWn.rg=function(){return null},MWn.d=!0,MWn.e=!0,MWn.f=0,vX(t5n,"AlgorithmAssembler",500),wAn(1236,1,DVn,hu),MWn.Mb=function(n){return!!BB(n,123)},vX(t5n,"AlgorithmAssembler/lambda$0$Type",1236),wAn(1237,1,{},Eg),MWn.Kb=function(n){return bj(this.a,BB(n,123))},vX(t5n,"AlgorithmAssembler/lambda$1$Type",1237),wAn(1238,1,DVn,fu),MWn.Mb=function(n){return!!BB(n,80)},vX(t5n,"AlgorithmAssembler/lambda$2$Type",1238),wAn(1239,1,lVn,Tg),MWn.td=function(n){Jcn(this.a,BB(n,80))},vX(t5n,"AlgorithmAssembler/lambda$3$Type",1239),wAn(1240,1,lVn,NI),MWn.td=function(n){Dx(this.a,this.b,BB(n,234))},vX(t5n,"AlgorithmAssembler/lambda$4$Type",1240),wAn(1355,1,MYn,lu),MWn.ue=function(n,t){return FQ(BB(n,234),BB(t,234))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t5n,"EnumBasedFactoryComparator",1355),wAn(80,754,{80:1},B2),MWn.rg=function(){return new Rv},MWn.a=0,vX(t5n,"LayoutProcessorConfiguration",80),wAn(1013,1,{527:1},$f),MWn.og=function(n){nan(eMt,new Mg(n))},vX(zYn,"DeprecatedLayoutOptionReplacer",1013),wAn(1014,1,lVn,bu),MWn.td=function(n){N9(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),wAn(1015,1,lVn,wu),MWn.td=function(n){Twn(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),wAn(1016,1,{},Mg),MWn.Od=function(n,t){Rx(this.a,BB(n,146),BB(t,38))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),wAn(149,1,{686:1,149:1},MTn),MWn.Fb=function(n){return j5(this,n)},MWn.sg=function(){return this.b},MWn.tg=function(){return this.c},MWn.ne=function(){return this.e},MWn.Hb=function(){return vvn(this.c)},MWn.Ib=function(){return"Layout Algorithm: "+this.c};var cMt,aMt=vX(zYn,"LayoutAlgorithmData",149);wAn(263,1,{},du),vX(zYn,"LayoutAlgorithmData/Builder",263),wAn(1017,1,{527:1},gu),MWn.og=function(n){cL(n,239)&&!qy(TD(n.We((sWn(),zSt))))&&KFn(BB(n,33))},vX(zYn,"LayoutAlgorithmResolver",1017),wAn(229,1,{686:1,229:1},UZ),MWn.Fb=function(n){return!!cL(n,229)&&mK(this.b,BB(n,229).b)},MWn.sg=function(){return this.a},MWn.tg=function(){return this.b},MWn.ne=function(){return this.d},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return"Layout Type: "+this.b},vX(zYn,"LayoutCategoryData",229),wAn(344,1,{},pu),vX(zYn,"LayoutCategoryData/Builder",344),wAn(867,1,{},ORn),vX(zYn,"LayoutMetaDataService",867),wAn(868,1,{},UX),vX(zYn,"LayoutMetaDataService/Registry",868),wAn(478,1,{478:1},vu),vX(zYn,"LayoutMetaDataService/Registry/Triple",478),wAn(869,1,e5n,mu),MWn.ug=function(){return new Gj},vX(zYn,"LayoutMetaDataService/lambda$0$Type",869),wAn(870,1,i5n,yu),MWn.vg=function(n){return B$(BB(n,8))},vX(zYn,"LayoutMetaDataService/lambda$1$Type",870),wAn(879,1,e5n,ku),MWn.ug=function(){return new Np},vX(zYn,"LayoutMetaDataService/lambda$10$Type",879),wAn(880,1,i5n,ju),MWn.vg=function(n){return new t_(BB(n,12))},vX(zYn,"LayoutMetaDataService/lambda$11$Type",880),wAn(881,1,e5n,Eu),MWn.ug=function(){return new YT},vX(zYn,"LayoutMetaDataService/lambda$12$Type",881),wAn(882,1,i5n,Tu),MWn.vg=function(n){return zB(BB(n,68))},vX(zYn,"LayoutMetaDataService/lambda$13$Type",882),wAn(883,1,e5n,Mu),MWn.ug=function(){return new Rv},vX(zYn,"LayoutMetaDataService/lambda$14$Type",883),wAn(884,1,i5n,Su),MWn.vg=function(n){return JQ(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$15$Type",884),wAn(885,1,e5n,Pu),MWn.ug=function(){return new fA},vX(zYn,"LayoutMetaDataService/lambda$16$Type",885),wAn(886,1,i5n,Iu),MWn.vg=function(n){return S4(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$17$Type",886),wAn(887,1,e5n,Cu),MWn.ug=function(){return new zv},vX(zYn,"LayoutMetaDataService/lambda$18$Type",887),wAn(888,1,i5n,Ou),MWn.vg=function(n){return GB(BB(n,208))},vX(zYn,"LayoutMetaDataService/lambda$19$Type",888),wAn(871,1,e5n,Au),MWn.ug=function(){return new km},vX(zYn,"LayoutMetaDataService/lambda$2$Type",871),wAn(872,1,i5n,$u),MWn.vg=function(n){return new Kj(BB(n,74))},vX(zYn,"LayoutMetaDataService/lambda$3$Type",872),wAn(873,1,e5n,Lu),MWn.ug=function(){return new lm},vX(zYn,"LayoutMetaDataService/lambda$4$Type",873),wAn(874,1,i5n,Nu),MWn.vg=function(n){return new A_(BB(n,142))},vX(zYn,"LayoutMetaDataService/lambda$5$Type",874),wAn(875,1,e5n,Du),MWn.ug=function(){return new bm},vX(zYn,"LayoutMetaDataService/lambda$6$Type",875),wAn(876,1,i5n,Ru),MWn.vg=function(n){return new O_(BB(n,116))},vX(zYn,"LayoutMetaDataService/lambda$7$Type",876),wAn(877,1,e5n,Ku),MWn.ug=function(){return new Yu},vX(zYn,"LayoutMetaDataService/lambda$8$Type",877),wAn(878,1,i5n,_u),MWn.vg=function(n){return new rnn(BB(n,373))},vX(zYn,"LayoutMetaDataService/lambda$9$Type",878);var uMt,oMt,sMt,hMt,fMt,lMt=bq(CJn,"IProperty");wAn(23,1,{35:1,686:1,23:1,146:1},bPn),MWn.wd=function(n){return gL(this,BB(n,146))},MWn.Fb=function(n){return cL(n,23)?mK(this.f,BB(n,23).f):cL(n,146)&&mK(this.f,BB(n,146).tg())},MWn.wg=function(){var n;if(cL(this.b,4)){if(null==(n=Jdn(this.b)))throw Hp(new Fy(o5n+this.f+"'. Make sure it's type is registered with the "+(ED(bAt),bAt.k)+c5n));return n}return this.b},MWn.sg=function(){return this.d},MWn.tg=function(){return this.f},MWn.ne=function(){return this.i},MWn.Hb=function(){return vvn(this.f)},MWn.Ib=function(){return"Layout Option: "+this.f},vX(zYn,"LayoutOptionData",23),wAn(24,1,{},Fu),vX(zYn,"LayoutOptionData/Builder",24),wAn(175,22,{3:1,35:1,22:1,175:1},AI);var bMt,wMt,dMt,gMt,pMt,vMt,mMt,yMt,kMt,jMt=Ben(zYn,"LayoutOptionData/Target",175,Unt,O5,QF);wAn(277,22,{3:1,35:1,22:1,277:1},$I);var EMt,TMt,MMt,SMt=Ben(zYn,"LayoutOptionData/Type",277,Unt,_tn,YF);wAn(110,1,{110:1},bA,UV,gY),MWn.Fb=function(n){var t;return!(null==n||!cL(n,110))&&(t=BB(n,110),cV(this.c,t.c)&&cV(this.d,t.d)&&cV(this.b,t.b)&&cV(this.a,t.a))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d,this.b,this.a]))},MWn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"ElkRectangle",110),wAn(8,1,{3:1,4:1,8:1,414:1},Gj,XZ,xI,wA),MWn.Fb=function(n){return nrn(this,n)},MWn.Hb=function(){return VO(this.a)+byn(VO(this.b))},MWn.Jf=function(n){var t,e,i;for(e=0;e<n.length&&xhn((b1(e,n.length),n.charCodeAt(e)),o1n);)++e;for(t=n.length;t>0&&xhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(e>=t)throw Hp(new _y("The given string does not contain any numbers."));if(2!=(i=kKn(n.substr(e,t-e),",|;|\r|\n")).length)throw Hp(new _y("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=bSn(RMn(i[0])),this.b=bSn(RMn(i[1]))}catch(r){throw cL(r=lun(r),127)?Hp(new _y(h1n+r)):Hp(r)}},MWn.Ib=function(){return"("+this.a+","+this.b+")"},MWn.a=0,MWn.b=0;var PMt=vX(f1n,"KVector",8);wAn(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},km,Kj,Ux),MWn.Pc=function(){return Vsn(this)},MWn.Jf=function(n){var t,e,i,r,c;e=kKn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),yQ(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&RMn(e[t]).length>0&&(r%2==0?i=bSn(e[t]):c=bSn(e[t]),r>0&&r%2!=0&&DH(this,new xI(i,c)),++r),++t}catch(a){throw cL(a=lun(a),127)?Hp(new _y("The given string does not match the expected format for vectors."+a)):Hp(a)}},MWn.Ib=function(){var n,t,e;for(n=new lN("("),t=spn(this,0);t.b!=t.d.c;)oO(n,(e=BB(b3(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var IMt,CMt,OMt,AMt,$Mt,LMt,NMt=vX(f1n,"KVectorChain",74);wAn(248,22,{3:1,35:1,22:1,248:1},DI);var xMt,DMt,RMt,KMt,_Mt,FMt,BMt,HMt,qMt,GMt,zMt,UMt,XMt,WMt,VMt,QMt,YMt,JMt,ZMt,nSt=Ben(h5n,"Alignment",248,Unt,J8,JF);wAn(979,1,QYn,Lf),MWn.Qe=function(n){G_n(n)},vX(h5n,"BoxLayouterOptions",979),wAn(980,1,{},xu),MWn.$e=function(){return new Gu},MWn._e=function(n){},vX(h5n,"BoxLayouterOptions/BoxFactory",980),wAn(291,22,{3:1,35:1,22:1,291:1},RI);var tSt,eSt,iSt,rSt,cSt,aSt,uSt,oSt,sSt,hSt,fSt,lSt,bSt,wSt,dSt,gSt,pSt,vSt,mSt,ySt,kSt,jSt,ESt,TSt,MSt,SSt,PSt,ISt,CSt,OSt,ASt,$St,LSt,NSt,xSt,DSt,RSt,KSt,_St,FSt,BSt,HSt,qSt,GSt,zSt,USt,XSt,WSt,VSt,QSt,YSt,JSt,ZSt,nPt,tPt,ePt,iPt,rPt,cPt,aPt,uPt,oPt,sPt,hPt,fPt,lPt,bPt,wPt,dPt,gPt,pPt,vPt,mPt,yPt,kPt,jPt,EPt,TPt,MPt,SPt,PPt,IPt,CPt,OPt,APt,$Pt,LPt,NPt,xPt,DPt,RPt,KPt,_Pt,FPt,BPt,HPt,qPt=Ben(h5n,"ContentAlignment",291,Unt,Y8,ZF);wAn(684,1,QYn,Nf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,w5n),""),"Layout Algorithm"),"Select a specific layout algorithm."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,d5n),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),mMt),aMt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,W2n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),rSt),gMt),nSt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,VJn),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,g5n),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,u3n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),fSt),pMt),qPt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,X2n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,J2n),""),TJn),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),wSt),gMt),WPt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y2n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),mSt),gMt),oIt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,A4n),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,d2n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),TSt),gMt),SIt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,QJn),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),WSt),mMt),_ut),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,jZn),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m3n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,MZn),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,EZn),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oPt),gMt),aCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,g3n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),mMt),PMt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,pZn),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),vMt),Att),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,yZn),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,kZn),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,o3n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),ASt),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,f3n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,l3n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,p5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),mMt),KNt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,p3n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),LSt),mMt),Eut),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,z2n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wMt),ktt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v5n),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dMt),Ptt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,m5n),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,y5n),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),iln(100)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,k5n),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,j5n),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),iln(4e3)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,E5n),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),iln(400)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,T5n),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,M5n),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,S5n),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,P5n),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,b5n),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),oSt),gMt),cOt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,L2n),k2n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,N2n),k2n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,XJn),k2n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,x2n),k2n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,mZn),k2n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,D2n),k2n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,R2n),k2n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,F2n),k2n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,K2n),k2n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,_2n),k2n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,vZn),k2n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,B2n),k2n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,H2n),k2n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,q2n),k2n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),mMt),hOt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,v3n),k2n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),DPt),mMt),Eut),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,d3n),A5n),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),vMt),Att),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),a2(n,d3n,w3n,JSt),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,w3n),A5n),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),QSt),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Z2n),$5n),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),xSt),mMt),_ut),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,IZn),$5n),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),RSt),pMt),GIt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,e3n),L5n),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),nPt),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,i3n),L5n),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,r3n),L5n),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,c3n),L5n),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,a3n),L5n),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gMt),JIt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,PZn),N5n),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),_St),pMt),YCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,SZn),N5n),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),GSt),pMt),iOt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,BZn),N5n),"Node Size Minimum"),"The minimal size to which a node can be reduced."),HSt),mMt),PMt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Y2n),N5n),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,s3n),A2n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),pSt),gMt),nIt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,TZn),A2n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wMt),ktt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,I5n),"font"),"Font Name"),"Font name used for a label."),yMt),Qtt),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,C5n),"font"),"Font Size"),"Font size used for a label."),vMt),Att),nbn(oMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,b3n),x5n),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),mMt),PMt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,h3n),x5n),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),vMt),Att),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,U2n),x5n),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),dPt),gMt),FCt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Ej(Ij(Mj(Sj(new Fu,G2n),x5n),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dMt),Ptt),nbn(fMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,CZn),D5n),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),lPt),pMt),CCt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,n3n),D5n),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,t3n),D5n),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,V2n),R5n),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,Q2n),R5n),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wMt),ktt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,WJn),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dMt),Ptt),nbn(uMt)))),Abn(n,new bPn(Oj(Cj(Aj(Tj(Ej(Ij(Mj(Sj(new Fu,O5n),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),kSt),gMt),yIt),nbn(uMt)))),xM(n,new UZ(yj(jj(kj(new pu,w1n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),xM(n,new UZ(yj(jj(kj(new pu,gZn),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),xM(n,new UZ(yj(jj(kj(new pu,Y3n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),xM(n,new UZ(yj(jj(kj(new pu,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),xM(n,new UZ(yj(jj(kj(new pu,w4n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),bKn((new xf,n)),G_n((new Lf,n)),RDn((new Df,n))},vX(h5n,"CoreOptions",684),wAn(103,22,{3:1,35:1,22:1,103:1},KI);var GPt,zPt,UPt,XPt,WPt=Ben(h5n,TJn,103,Unt,I5,eB);wAn(272,22,{3:1,35:1,22:1,272:1},_I);var VPt,QPt,YPt,JPt,ZPt,nIt=Ben(h5n,"EdgeLabelPlacement",272,Unt,q1,iB);wAn(218,22,{3:1,35:1,22:1,218:1},FI);var tIt,eIt,iIt,rIt,cIt,aIt,uIt,oIt=Ben(h5n,"EdgeRouting",218,Unt,S3,rB);wAn(312,22,{3:1,35:1,22:1,312:1},BI);var sIt,hIt,fIt,lIt,bIt,wIt,dIt,gIt,pIt,vIt,mIt,yIt=Ben(h5n,"EdgeType",312,Unt,a9,cB);wAn(977,1,QYn,xf),MWn.Qe=function(n){bKn(n)},vX(h5n,"FixedLayouterOptions",977),wAn(978,1,{},Vu),MWn.$e=function(){return new Hu},MWn._e=function(n){},vX(h5n,"FixedLayouterOptions/FixedFactory",978),wAn(334,22,{3:1,35:1,22:1,334:1},HI);var kIt,jIt,EIt,TIt,MIt,SIt=Ben(h5n,"HierarchyHandling",334,Unt,H1,aB);wAn(285,22,{3:1,35:1,22:1,285:1},qI);var PIt,IIt,CIt,OIt,AIt,$It,LIt,NIt,xIt,DIt,RIt=Ben(h5n,"LabelSide",285,Unt,M3,uB);wAn(93,22,{3:1,35:1,22:1,93:1},GI);var KIt,_It,FIt,BIt,HIt,qIt,GIt=Ben(h5n,"NodeLabelPlacement",93,Unt,ken,oB);wAn(249,22,{3:1,35:1,22:1,249:1},zI);var zIt,UIt,XIt,WIt,VIt,QIt,YIt,JIt=Ben(h5n,"PortAlignment",249,Unt,C5,sB);wAn(98,22,{3:1,35:1,22:1,98:1},UI);var ZIt,nCt,tCt,eCt,iCt,rCt,cCt,aCt=Ben(h5n,"PortConstraints",98,Unt,S8,hB);wAn(273,22,{3:1,35:1,22:1,273:1},XI);var uCt,oCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,vCt,mCt,yCt,kCt,jCt,ECt,TCt,MCt,SCt,PCt,ICt,CCt=Ben(h5n,"PortLabelPlacement",273,Unt,c9,fB);wAn(61,22,{3:1,35:1,22:1,61:1},WI);var OCt,ACt,$Ct,LCt,NCt,xCt,DCt,RCt,KCt,_Ct,FCt=Ben(h5n,"PortSide",61,Unt,h5,wB);wAn(981,1,QYn,Df),MWn.Qe=function(n){RDn(n)},vX(h5n,"RandomLayouterOptions",981),wAn(982,1,{},Qu),MWn.$e=function(){return new no},MWn._e=function(n){},vX(h5n,"RandomLayouterOptions/RandomFactory",982),wAn(374,22,{3:1,35:1,22:1,374:1},VI);var BCt,HCt,qCt,GCt,zCt,UCt,XCt,WCt,VCt,QCt,YCt=Ben(h5n,"SizeConstraint",374,Unt,T3,lB);wAn(259,22,{3:1,35:1,22:1,259:1},QI);var JCt,ZCt,nOt,tOt,eOt,iOt=Ben(h5n,"SizeOptions",259,Unt,Ein,bB);wAn(370,1,{1949:1},Xm),MWn.b=!1,MWn.c=0,MWn.d=-1,MWn.e=null,MWn.f=null,MWn.g=-1,MWn.j=!1,MWn.k=!1,MWn.n=!1,MWn.o=0,MWn.q=0,MWn.r=0,vX(y3n,"BasicProgressMonitor",370),wAn(972,209,NJn,Gu),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h;OTn(t,"Box layout",2),r=zy(MD(ZAn(n,(SMn(),XMt)))),c=BB(ZAn(n,GMt),116),e=qy(TD(ZAn(n,_Mt))),i=qy(TD(ZAn(n,FMt))),0===BB(ZAn(n,RMt),311).g?(u=new t_((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),SQ(),m$(u,new Sg(i)),a=u,o=XPn(n),(null==(s=MD(ZAn(n,DMt)))||(kW(s),s<=0))&&(s=1.3),KUn(n,(h=HUn(a,r,c,o.a,o.b,e,(kW(s),s))).a,h.b,!1,!0)):kqn(n,r,c,e),HSn(t)},vX(y3n,"BoxLayoutProvider",972),wAn(973,1,MYn,Sg),MWn.ue=function(n,t){return hNn(this,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=!1,vX(y3n,"BoxLayoutProvider/1",973),wAn(157,1,{157:1},Gtn,zx),MWn.Ib=function(){return this.c?zRn(this.c):LMn(this.b)},vX(y3n,"BoxLayoutProvider/Group",157),wAn(311,22,{3:1,35:1,22:1,311:1},YI);var rOt,cOt=Ben(y3n,"BoxLayoutProvider/PackingMode",311,Unt,P3,dB);wAn(974,1,MYn,zu),MWn.ue=function(n,t){return DQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$0$Type",974),wAn(975,1,MYn,Uu),MWn.ue=function(n,t){return cQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$1$Type",975),wAn(976,1,MYn,Xu),MWn.ue=function(n,t){return aQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$2$Type",976),wAn(1365,1,{831:1},Wu),MWn.qg=function(n,t){return AM(),!cL(t,160)||SE((Nun(),BB(n,160)),t)},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),wAn(1366,1,lVn,Pg),MWn.td=function(n){Jsn(this.a,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),wAn(1367,1,lVn,qu),MWn.td=function(n){BB(n,94),AM()},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),wAn(1371,1,lVn,Ig),MWn.td=function(n){Orn(this.a,BB(n,94))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),wAn(1369,1,DVn,JI),MWn.Mb=function(n){return Von(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),wAn(1368,1,DVn,ZI),MWn.Mb=function(n){return $x(this.a,this.b,BB(n,831))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),wAn(1370,1,lVn,nC),MWn.td=function(n){Fz(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),wAn(935,1,{},Bu),MWn.Kb=function(n){return yA(n)},MWn.Fb=function(n){return this===n},vX(y3n,"ElkUtil/lambda$0$Type",935),wAn(936,1,lVn,tC),MWn.td=function(n){rOn(this.a,this.b,BB(n,79))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$1$Type",936),wAn(937,1,lVn,eC),MWn.td=function(n){Ey(this.a,this.b,BB(n,202))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$2$Type",937),wAn(938,1,lVn,iC),MWn.td=function(n){t$(this.a,this.b,BB(n,137))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$3$Type",938),wAn(939,1,lVn,Cg),MWn.td=function(n){cq(this.a,BB(n,469))},vX(y3n,"ElkUtil/lambda$4$Type",939),wAn(342,1,{35:1,342:1},$p),MWn.wd=function(n){return vL(this,BB(n,236))},MWn.Fb=function(n){var t;return!!cL(n,342)&&(t=BB(n,342),this.a==t.a)},MWn.Hb=function(){return IJ(this.a)},MWn.Ib=function(){return this.a+" (exclusive)"},MWn.a=0,vX(y3n,"ExclusiveBounds/ExclusiveLowerBound",342),wAn(1138,209,NJn,Hu),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(OTn(t,"Fixed Layout",1),a=BB(ZAn(n,(sWn(),vSt)),218),b=0,w=0,v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();){for(g=BB(kpn(v),33),(T=BB(ZAn(g,(Xsn(),gIt)),8))&&(SA(g,T.a,T.b),BB(ZAn(g,fIt),174).Hc((mdn(),DCt))&&(d=BB(ZAn(g,bIt),8)).a>0&&d.b>0&&KUn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new AL((!g.n&&(g.n=new eU(zOt,g,1,7)),g.n));f.e!=f.i.gc();)o=BB(kpn(f),137),(T=BB(ZAn(o,gIt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,g.i+o.i+o.g),w=e.Math.max(w,g.j+o.j+o.f);for(k=new AL((!g.c&&(g.c=new eU(XOt,g,9,9)),g.c));k.e!=k.i.gc();)for(y=BB(kpn(k),118),(T=BB(ZAn(y,gIt),8))&&SA(y,T.a,T.b),j=g.i+y.i,E=g.j+y.j,b=e.Math.max(b,j+y.g),w=e.Math.max(w,E+y.f),s=new AL((!y.n&&(y.n=new eU(zOt,y,1,7)),y.n));s.e!=s.i.gc();)o=BB(kpn(s),137),(T=BB(ZAn(o,gIt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,j+o.i+o.g),w=e.Math.max(w,E+o.j+o.f);for(c=new oz(ZL(dLn(g).a.Kc(),new h));dAn(c);)l=_Un(i=BB(U5(c),79)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new oz(ZL(wLn(g).a.Kc(),new h));dAn(r);)JJ(PMn(i=BB(U5(r),79)))!=n&&(l=_Un(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(Mbn(),QPt))for(p=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new oz(ZL(dLn(g=BB(kpn(p),33)).a.Kc(),new h));dAn(r);)0==(u=rFn(i=BB(U5(r),79))).b?Ypn(i,OSt,null):Ypn(i,OSt,u);qy(TD(ZAn(n,(Xsn(),lIt))))||KUn(n,b+(m=BB(ZAn(n,wIt),116)).b+m.c,w+m.d+m.a,!0,!0),HSn(t)},vX(y3n,"FixedLayoutProvider",1138),wAn(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,rnn),MWn.Jf=function(n){var t,e,i,r,c,a,u;if(n)try{for(a=kKn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=kKn(i[r],"\\:"),!(e=pGn(cin(),t[0])))throw Hp(new _y("Invalid option id: "+t[0]));if(null==(u=Zqn(e,t[1])))throw Hp(new _y("Invalid option value: "+t[1]));null==u?(!this.q&&(this.q=new xp),v6(this.q,e)):(!this.q&&(this.q=new xp),VW(this.q,e,u))}}catch(o){throw cL(o=lun(o),102)?Hp(new Fsn(o)):Hp(o)}},MWn.Ib=function(){return SD(P4($V((this.q?this.q:(SQ(),SQ(),het)).vc().Oc(),new Ju),x7(new YB,new Z,new W,new V,Pun(Gk(nit,1),$Vn,132,0,[]))))};var aOt,uOt,oOt,sOt,hOt=vX(y3n,"IndividualSpacings",373);wAn(971,1,{},Ju),MWn.Kb=function(n){return RQ(BB(n,42))},vX(y3n,"IndividualSpacings/lambda$0$Type",971),wAn(709,1,{},sG),MWn.c=0,vX(y3n,"InstancePool",709),wAn(1275,1,{},Zu),vX(y3n,"LoggedGraph",1275),wAn(396,22,{3:1,35:1,22:1,396:1},cC);var fOt,lOt,bOt,wOt=Ben(y3n,"LoggedGraph/Type",396,Unt,I3,gB);wAn(46,1,{20:1,46:1},rC),MWn.Jc=function(n){e5(this,n)},MWn.Fb=function(n){var t,e,i;return!!cL(n,46)&&(e=BB(n,46),t=null==this.a?null==e.a:Nfn(this.a,e.a),i=null==this.b?null==e.b:Nfn(this.b,e.b),t&&i)},MWn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:nsn(this.a)),t&QVn^(-65536&(e=null==this.b?0:nsn(this.b)))>>16&QVn|n^(e&QVn)<<16},MWn.Kc=function(){return new Og(this)},MWn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+Bbn(this.b)+")":null==this.b?"pair("+Bbn(this.a)+",null)":"pair("+Bbn(this.a)+","+Bbn(this.b)+")"},vX(y3n,"Pair",46),wAn(983,1,QWn,Og),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},MWn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw Hp(new yv)},MWn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),Hp(new dv)},MWn.b=!1,MWn.c=!1,vX(y3n,"Pair/1",983),wAn(448,1,{448:1},VV),MWn.Fb=function(n){return cV(this.a,BB(n,448).a)&&cV(this.c,BB(n,448).c)&&cV(this.d,BB(n,448).d)&&cV(this.b,BB(n,448).b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.a,this.c,this.d,this.b]))},MWn.Ib=function(){return"("+this.a+FWn+this.c+FWn+this.d+FWn+this.b+")"},vX(y3n,"Quadruple",448),wAn(1126,209,NJn,no),MWn.Ze=function(n,t){var e;OTn(t,"Random Layout",1),0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i?(iUn(n,(e=BB(ZAn(n,(vdn(),NCt)),19))&&0!=e.a?new I4(e.a):new sbn,zy(MD(ZAn(n,ACt))),zy(MD(ZAn(n,xCt))),BB(ZAn(n,$Ct),116)),HSn(t)):HSn(t)},vX(y3n,"RandomLayoutProvider",1126),wAn(553,1,{}),MWn.qf=function(){return new xI(this.f.i,this.f.j)},MWn.We=function(n){return EY(n,(sWn(),aPt))?ZAn(this.f,bOt):ZAn(this.f,n)},MWn.rf=function(){return new xI(this.f.g,this.f.f)},MWn.sf=function(){return this.g},MWn.Xe=function(n){return P8(this.f,n)},MWn.tf=function(n){Pen(this.f,n.a),Ien(this.f,n.b)},MWn.uf=function(n){Sen(this.f,n.a),Men(this.f,n.b)},MWn.vf=function(n){this.g=n},MWn.g=0,vX(H5n,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),wAn(554,1,{839:1},Ag),MWn.wf=function(){var n,t;if(!this.b)for(this.b=I2(mV(this.a).i),t=new AL(mV(this.a));t.e!=t.i.gc();)n=BB(kpn(t),137),WB(this.b,new Ry(n));return this.b},MWn.b=null,vX(H5n,"ElkGraphAdapters/ElkEdgeAdapter",554),wAn(301,553,{},Dy),MWn.xf=function(){return eyn(this)},MWn.a=null,vX(H5n,"ElkGraphAdapters/ElkGraphAdapter",301),wAn(630,553,{181:1},Ry),vX(H5n,"ElkGraphAdapters/ElkLabelAdapter",630),wAn(629,553,{680:1},JN),MWn.wf=function(){return nyn(this)},MWn.Af=function(){var n;return!(n=BB(ZAn(this.f,(sWn(),$St)),142))&&(n=new lm),n},MWn.Cf=function(){return tyn(this)},MWn.Ef=function(n){var t;t=new A_(n),Ypn(this.f,(sWn(),$St),t)},MWn.Ff=function(n){Ypn(this.f,(sWn(),XSt),new O_(n))},MWn.yf=function(){return this.d},MWn.zf=function(){var n,t;if(!this.a)for(this.a=new Np,t=new oz(ZL(wLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=new Np,t=new oz(ZL(dLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.c,new Ag(n));return this.c},MWn.Df=function(){return 0!=YQ(BB(this.f,33)).i||qy(TD(BB(this.f,33).We((sWn(),SSt))))},MWn.Gf=function(){_7(this,(GM(),lOt))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(H5n,"ElkGraphAdapters/ElkNodeAdapter",629),wAn(1266,553,{838:1},op),MWn.wf=function(){return kyn(this)},MWn.zf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.f,118).xg().i),t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.f,118).yg().i),t=new AL(BB(this.f,118).yg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.c,new Ag(n));return this.c},MWn.Hf=function(){return BB(BB(this.f,118).We((sWn(),wPt)),61)},MWn.If=function(){var n,t,e,i,r,c,a;for(i=WJ(BB(this.f,118)),e=new AL(BB(this.f,118).yg());e.e!=e.i.gc();)for(a=new AL((!(n=BB(kpn(e),79)).c&&(n.c=new hK(KOt,n,5,8)),n.c));a.e!=a.i.gc();){if(Itn(PTn(c=BB(kpn(a),82)),i))return!0;if(PTn(c)==i&&qy(TD(ZAn(n,(sWn(),PSt)))))return!0}for(t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)for(r=new AL((!(n=BB(kpn(t),79)).b&&(n.b=new hK(KOt,n,4,7)),n.b));r.e!=r.i.gc();)if(Itn(PTn(BB(kpn(r),82)),i))return!0;return!1},MWn.a=null,MWn.b=null,MWn.c=null,vX(H5n,"ElkGraphAdapters/ElkPortAdapter",1266),wAn(1267,1,MYn,to),MWn.ue=function(n,t){return GRn(BB(n,118),BB(t,118))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H5n,"ElkGraphAdapters/PortComparator",1267);var dOt,gOt,pOt,vOt,mOt,yOt,kOt,jOt,EOt,TOt,MOt,SOt,POt,IOt,COt,OOt,AOt,$Ot,LOt=bq(q5n,"EObject"),NOt=bq(G5n,z5n),xOt=bq(G5n,U5n),DOt=bq(G5n,X5n),ROt=bq(G5n,"ElkShape"),KOt=bq(G5n,W5n),_Ot=bq(G5n,V5n),FOt=bq(G5n,Q5n),BOt=bq(q5n,Y5n),HOt=bq(q5n,"EFactory"),qOt=bq(q5n,J5n),GOt=bq(q5n,"EPackage"),zOt=bq(G5n,Z5n),UOt=bq(G5n,n6n),XOt=bq(G5n,t6n);wAn(90,1,e6n),MWn.Jg=function(){return this.Kg(),null},MWn.Kg=function(){return null},MWn.Lg=function(){return this.Kg(),!1},MWn.Mg=function(){return!1},MWn.Ng=function(n){ban(this,n)},vX(i6n,"BasicNotifierImpl",90),wAn(97,90,f6n),MWn.nh=function(){return mA(this)},MWn.Og=function(n,t){return n},MWn.Pg=function(){throw Hp(new pv)},MWn.Qg=function(n){var t;return t=Ivn(BB(itn(this.Tg(),this.Vg()),18)),this.eh().ih(this,t.n,t.f,n)},MWn.Rg=function(n,t){throw Hp(new pv)},MWn.Sg=function(n,t,e){return T_n(this,n,t,e)},MWn.Tg=function(){var n;return this.Pg()&&(n=this.Pg().ck())?n:this.zh()},MWn.Ug=function(){return cAn(this)},MWn.Vg=function(){throw Hp(new pv)},MWn.Wg=function(){var n,t;return!(t=this.ph().dk())&&this.Pg().ik((QM(),t=null==(n=lJ(qFn(this.Tg())))?N$t:new QN(this,n))),t},MWn.Xg=function(n,t){return n},MWn.Yg=function(n){return n.Gj()?n.aj():Awn(this.Tg(),n)},MWn.Zg=function(){var n;return(n=this.Pg())?n.fk():null},MWn.$g=function(){return this.Pg()?this.Pg().ck():null},MWn._g=function(n,t,e){return Zpn(this,n,t,e)},MWn.ah=function(n){return S9(this,n)},MWn.bh=function(n,t){return V5(this,n,t)},MWn.dh=function(){var n;return!!(n=this.Pg())&&n.gk()},MWn.eh=function(){throw Hp(new pv)},MWn.fh=function(){return Ydn(this)},MWn.gh=function(n,t,e,i){return Npn(this,n,t,i)},MWn.hh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Qj(this,this.yh(),t-this.Ah(),n,e)},MWn.ih=function(n,t,e,i){return oJ(this,n,t,i)},MWn.jh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Rj(this,this.yh(),t-this.Ah(),n,e)},MWn.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},MWn.lh=function(n){return vpn(this,n)},MWn.mh=function(n){return ZJ(this,n)},MWn.oh=function(n){return _qn(this,n)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return this.Pg()?this.Pg().ek():null},MWn.rh=function(){return Ydn(this)},MWn.sh=function(n,t){yIn(this,n,t)},MWn.th=function(n){this.ph().hk(n)},MWn.uh=function(n){this.ph().kk(n)},MWn.vh=function(n){this.ph().jk(n)},MWn.wh=function(n,t){var e,i,r,c;return(c=this.Zg())&&n&&(t=_pn(c.Vk(),this,t),c.Zk(this)),(i=this.eh())&&(0!=(gKn(this,this.eh(),this.Vg()).Bb&BQn)?(r=i.fh())&&(n?!c&&r.Zk(this):r.Yk(this)):(t=(e=this.Vg())>=0?this.Qg(t):this.eh().ih(this,-1-e,null,t),t=this.Sg(null,-1,t))),this.uh(n),t},MWn.xh=function(n){var t,e,i,r,c,a,u;if((c=Awn(e=this.Tg(),n))>=(t=this.Ah()))return BB(n,66).Nj().Uj(this,this.yh(),c-t);if(c<=-1){if(!(a=Fqn((CPn(),Z$t),e,n)))throw Hp(new _y(r6n+n.ne()+u6n));if(ZM(),BB(a,66).Oj()||(a=Z1(B7(Z$t,a))),r=BB((i=this.Yg(a))>=0?this._g(i,!0,!0):cOn(this,a,!0),153),(u=a.Zj())>1||-1==u)return BB(BB(r,215).hl(n,!1),76)}else if(n.$j())return BB((i=this.Yg(n))>=0?this._g(i,!1,!0):cOn(this,n,!1),76);return new CC(this,n)},MWn.yh=function(){return Q7(this)},MWn.zh=function(){return(QX(),t$t).S},MWn.Ah=function(){return bX(this.zh())},MWn.Bh=function(n){mPn(this,n)},MWn.Ib=function(){return P$n(this)},vX(l6n,"BasicEObjectImpl",97),wAn(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),MWn.Ch=function(n){return Y7(this)[n]},MWn.Dh=function(n,t){$X(Y7(this),n,t)},MWn.Eh=function(n){$X(Y7(this),n,null)},MWn.Jg=function(){return BB(yan(this,4),126)},MWn.Kg=function(){throw Hp(new pv)},MWn.Lg=function(){return 0!=(4&this.Db)},MWn.Pg=function(){throw Hp(new pv)},MWn.Fh=function(n){hgn(this,2,n)},MWn.Rg=function(n,t){this.Db=t<<16|255&this.Db,this.Fh(n)},MWn.Tg=function(){return jY(this)},MWn.Vg=function(){return this.Db>>16},MWn.Wg=function(){var n;return QM(),null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?N$t:new QN(this,n)},MWn.Mg=function(){return 0==(1&this.Db)},MWn.Zg=function(){return BB(yan(this,128),1935)},MWn.$g=function(){return BB(yan(this,16),26)},MWn.dh=function(){return 0!=(32&this.Db)},MWn.eh=function(){return BB(yan(this,2),49)},MWn.kh=function(){return 0!=(64&this.Db)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return BB(yan(this,64),281)},MWn.th=function(n){hgn(this,16,n)},MWn.uh=function(n){hgn(this,128,n)},MWn.vh=function(n){hgn(this,64,n)},MWn.yh=function(){return fgn(this)},MWn.Db=0,vX(l6n,"MinimalEObjectImpl",114),wAn(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn.Fh=function(n){this.Cb=n},MWn.eh=function(){return this.Cb},vX(l6n,"MinimalEObjectImpl/Container",115),wAn(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Eyn(this,n,t,e)},MWn.jh=function(n,t,e){return eSn(this,n,t,e)},MWn.lh=function(n){return m0(this,n)},MWn.sh=function(n,t){rsn(this,n,t)},MWn.zh=function(){return IXn(),POt},MWn.Bh=function(n){zun(this,n)},MWn.Ve=function(){return lpn(this)},MWn.We=function(n){return ZAn(this,n)},MWn.Xe=function(n){return P8(this,n)},MWn.Ye=function(n,t){return Ypn(this,n,t)},vX(b6n,"EMapPropertyHolderImpl",1985),wAn(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ro),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void jen(this,Gy(MD(t)));case 1:return void Een(this,Gy(MD(t)))}yIn(this,n,t)},MWn.zh=function(){return IXn(),pOt},MWn.Bh=function(n){switch(n){case 0:return void jen(this,0);case 1:return void Een(this,0)}mPn(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (x: ",vE(n,this.a),n.a+=", y: ",vE(n,this.b),n.a+=")",n.a)},MWn.a=0,MWn.b=0,vX(b6n,"ElkBendPointImpl",567),wAn(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return _fn(this,n,t,e)},MWn.hh=function(n,t,e){return FTn(this,n,t,e)},MWn.jh=function(n,t,e){return run(this,n,t,e)},MWn.lh=function(n){return Ean(this,n)},MWn.sh=function(n,t){Gjn(this,n,t)},MWn.zh=function(){return IXn(),kOt},MWn.Bh=function(n){ofn(this,n)},MWn.zg=function(){return this.k},MWn.Ag=function(){return mV(this)},MWn.Ib=function(){return Yln(this)},MWn.k=null,vX(b6n,"ElkGraphElementImpl",723),wAn(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Rbn(this,n,t,e)},MWn.lh=function(n){return fwn(this,n)},MWn.sh=function(n,t){zjn(this,n,t)},MWn.zh=function(){return IXn(),SOt},MWn.Bh=function(n){Dwn(this,n)},MWn.Bg=function(){return this.f},MWn.Cg=function(){return this.g},MWn.Dg=function(){return this.i},MWn.Eg=function(){return this.j},MWn.Fg=function(n,t){MA(this,n,t)},MWn.Gg=function(n,t){SA(this,n,t)},MWn.Hg=function(n){Pen(this,n)},MWn.Ig=function(n){Ien(this,n)},MWn.Ib=function(){return mSn(this)},MWn.f=0,MWn.g=0,MWn.i=0,MWn.j=0,vX(b6n,"ElkShapeImpl",724),wAn(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){return djn(this,n,t,e)},MWn.jh=function(n,t,e){return gjn(this,n,t,e)},MWn.lh=function(n){return Gon(this,n)},MWn.sh=function(n,t){LAn(this,n,t)},MWn.zh=function(){return IXn(),vOt},MWn.Bh=function(n){xpn(this,n)},MWn.xg=function(){return!this.d&&(this.d=new hK(_Ot,this,8,5)),this.d},MWn.yg=function(){return!this.e&&(this.e=new hK(_Ot,this,7,4)),this.e},vX(b6n,"ElkConnectableShapeImpl",725),wAn(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},io),MWn.Qg=function(n){return Mkn(this,n)},MWn._g=function(n,t,e){switch(n){case 3:return XJ(this);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),this.a;case 7:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return hN(),!!nAn(this);case 9:return hN(),!!QCn(this);case 10:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return _fn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Mkn(this,e):this.Cb.ih(this,-1-i,null,e)),VD(this,BB(n,33),e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),Ywn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),Ywn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),Ywn(this.a,n,e)}return FTn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 3:return VD(this,null,e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),_pn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),_pn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),_pn(this.a,n,e)}return run(this,n,t,e)},MWn.lh=function(n){switch(n){case 3:return!!XJ(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return nAn(this);case 9:return QCn(this);case 10:return!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return Ean(this,n)},MWn.sh=function(n,t){switch(n){case 3:return void HLn(this,BB(t,33));case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),sqn(this.b),!this.b&&(this.b=new hK(KOt,this,4,7)),void pX(this.b,BB(t,14));case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),sqn(this.c),!this.c&&(this.c=new hK(KOt,this,5,8)),void pX(this.c,BB(t,14));case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),sqn(this.a),!this.a&&(this.a=new eU(FOt,this,6,6)),void pX(this.a,BB(t,14))}Gjn(this,n,t)},MWn.zh=function(){return IXn(),mOt},MWn.Bh=function(n){switch(n){case 3:return void HLn(this,null);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),void sqn(this.b);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),void sqn(this.c);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),void sqn(this.a)}ofn(this,n)},MWn.Ib=function(){return lHn(this)},vX(b6n,"ElkEdgeImpl",352),wAn(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},co),MWn.Qg=function(n){return skn(this,n)},MWn._g=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new $L(xOt,this,5)),this.a;case 6:return VJ(this);case 7:return t?Pvn(this):this.i;case 8:return t?Svn(this):this.f;case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),this.e;case 11:return this.d}return Eyn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?skn(this,e):this.Cb.ih(this,-1-i,null,e)),QD(this,BB(n,79),e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),Ywn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),Ywn(this.e,n,e)}return BB(itn(BB(yan(this,16),26)||(IXn(),yOt),t),66).Nj().Qj(this,fgn(this),t-bX((IXn(),yOt)),n,e)},MWn.jh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new $L(xOt,this,5)),_pn(this.a,n,e);case 6:return QD(this,null,e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),_pn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),_pn(this.e,n,e)}return eSn(this,n,t,e)},MWn.lh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!VJ(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return m0(this,n)},MWn.sh=function(n,t){switch(n){case 1:return void Cen(this,Gy(MD(t)));case 2:return void Aen(this,Gy(MD(t)));case 3:return void Ten(this,Gy(MD(t)));case 4:return void Oen(this,Gy(MD(t)));case 5:return!this.a&&(this.a=new $L(xOt,this,5)),sqn(this.a),!this.a&&(this.a=new $L(xOt,this,5)),void pX(this.a,BB(t,14));case 6:return void FLn(this,BB(t,79));case 7:return void Nin(this,BB(t,82));case 8:return void Lin(this,BB(t,82));case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),sqn(this.g),!this.g&&(this.g=new hK(FOt,this,9,10)),void pX(this.g,BB(t,14));case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),sqn(this.e),!this.e&&(this.e=new hK(FOt,this,10,9)),void pX(this.e,BB(t,14));case 11:return void crn(this,SD(t))}rsn(this,n,t)},MWn.zh=function(){return IXn(),yOt},MWn.Bh=function(n){switch(n){case 1:return void Cen(this,0);case 2:return void Aen(this,0);case 3:return void Ten(this,0);case 4:return void Oen(this,0);case 5:return!this.a&&(this.a=new $L(xOt,this,5)),void sqn(this.a);case 6:return void FLn(this,null);case 7:return void Nin(this,null);case 8:return void Lin(this,null);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),void sqn(this.g);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),void sqn(this.e);case 11:return void crn(this,null)}zun(this,n)},MWn.Ib=function(){return ROn(this)},MWn.b=0,MWn.c=0,MWn.d=null,MWn.j=0,MWn.k=0,vX(b6n,"ElkEdgeSectionImpl",439),wAn(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn._g=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab):U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.oh=function(n){return hUn(this,n)},MWn.sh=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.uh=function(n){hgn(this,128,n)},MWn.zh=function(){return gWn(),b$t},MWn.Bh=function(n){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){this.Bb|=1},MWn.Hh=function(n){return N_n(this,n)},MWn.Bb=0,vX(l6n,"EModelElementImpl",150),wAn(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Rf),MWn.Ih=function(n,t){return qGn(this,n,t)},MWn.Jh=function(n){var t,e,i,r;if(this.a!=Utn(n)||0!=(256&n.Bb))throw Hp(new _y(m6n+n.zb+g6n));for(e=kY(n);0!=a4(e.a).i;){if(iyn(t=BB(eGn(e,0,cL(r=BB(Wtn(a4(e.a),0),87).c,88)?BB(r,26):(gWn(),d$t)),26)))return BB(i=Utn(t).Nh().Jh(t),49).th(n),i;e=kY(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new fq(n):new jH(n)},MWn.Kh=function(n,t){return xXn(this,n,t)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.a}return U9(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t,e)},MWn.hh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 1:return this.a&&(e=BB(this.a,49).ih(this,4,GOt,e)),Jhn(this,BB(n,235),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 1:return Jhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return O3(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void xMn(this,BB(t,235))}Lbn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t)},MWn.zh=function(){return gWn(),h$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void xMn(this,null)}qfn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},vX(l6n,"EFactoryImpl",704),wAn(k6n,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ao),MWn.Ih=function(n,t){switch(n.yj()){case 12:return BB(t,146).tg();case 13:return Bbn(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 4:return new uo;case 6:return new jm;case 7:return new Em;case 8:return new io;case 9:return new ro;case 10:return new co;case 11:return new so;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 13:case 12:return null;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(b6n,"ElkGraphFactoryImpl",k6n),wAn(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn.Wg=function(){var n;return null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?(QM(),QM(),N$t):new Wx(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.ne()}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),w$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.ne=function(){return this.zb},MWn.Lh=function(n){Nrn(this,n)},MWn.Ib=function(){return kfn(this)},MWn.zb=null,vX(l6n,"ENamedElementImpl",438),wAn(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},vY),MWn.Qg=function(n){return wkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb;case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?BB(this.Cb,235):null:QJ(this)}return U9(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 4:return this.sb&&(e=BB(this.sb,49).ih(this,1,HOt,e)),jfn(this,BB(n,471),e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),Ywn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),Ywn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?wkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 4:return jfn(this,null,e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),_pn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),_pn(this.vb,n,e);case 7:return T_n(this,null,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!QJ(this)}return O3(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.oh=function(n){return LNn(this,n)||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Drn(this,SD(t));case 3:return void xrn(this,SD(t));case 4:return void iSn(this,BB(t,471));case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),sqn(this.rb),!this.rb&&(this.rb=new Jz(this,HAt,this)),void pX(this.rb,BB(t,14));case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),sqn(this.vb),!this.vb&&(this.vb=new eK(GOt,this,6,7)),void pX(this.vb,BB(t,14))}Lbn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t)},MWn.vh=function(n){var t,e;if(n&&this.rb)for(e=new AL(this.rb);e.e!=e.i.gc();)cL(t=kpn(e),351)&&(BB(t,351).w=null);hgn(this,64,n)},MWn.zh=function(){return gWn(),v$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Drn(this,null);case 3:return void xrn(this,null);case 4:return void iSn(this,null);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),void sqn(this.rb);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),void sqn(this.vb)}qfn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.Gh=function(){Tyn(this)},MWn.Mh=function(){return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb},MWn.Nh=function(){return this.sb},MWn.Oh=function(){return this.ub},MWn.Ph=function(){return this.xb},MWn.Qh=function(){return this.yb},MWn.Rh=function(n){this.ub=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?kfn(this):((n=new fN(kfn(this))).a+=" (nsURI: ",cO(n,this.yb),n.a+=", nsPrefix: ",cO(n,this.xb),n.a+=")",n.a)},MWn.xb=null,MWn.yb=null,vX(l6n,"EPackageImpl",179),wAn(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},sAn),MWn.q=!1,MWn.r=!1;var WOt=!1;vX(b6n,"ElkGraphPackageImpl",555),wAn(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},uo),MWn.Qg=function(n){return hkn(this,n)},MWn._g=function(n,t,e){switch(n){case 7:return YJ(this);case 8:return this.a}return Rbn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?hkn(this,e):this.Cb.ih(this,-1-i,null,e)),VG(this,BB(n,160),e)):FTn(this,n,t,e)},MWn.jh=function(n,t,e){return 7==t?VG(this,null,e):run(this,n,t,e)},MWn.lh=function(n){switch(n){case 7:return!!YJ(this);case 8:return!mK("",this.a)}return fwn(this,n)},MWn.sh=function(n,t){switch(n){case 7:return void CNn(this,BB(t,160));case 8:return void xin(this,SD(t))}zjn(this,n,t)},MWn.zh=function(){return IXn(),jOt},MWn.Bh=function(n){switch(n){case 7:return void CNn(this,null);case 8:return void xin(this,"")}Dwn(this,n)},MWn.Ib=function(){return cPn(this)},MWn.a="",vX(b6n,"ElkLabelImpl",354),wAn(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},jm),MWn.Qg=function(n){return Skn(this,n)},MWn._g=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a;case 11:return JJ(this);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),this.b;case 13:return hN(),!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),Ywn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),Ywn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?Skn(this,e):this.Cb.ih(this,-1-i,null,e)),zR(this,BB(n,33),e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),Ywn(this.b,n,e)}return djn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),_pn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),_pn(this.a,n,e);case 11:return zR(this,null,e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),_pn(this.b,n,e)}return gjn(this,n,t,e)},MWn.lh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!JJ(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Gon(this,n)},MWn.sh=function(n,t){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),sqn(this.c),!this.c&&(this.c=new eU(XOt,this,9,9)),void pX(this.c,BB(t,14));case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),sqn(this.a),!this.a&&(this.a=new eU(UOt,this,10,11)),void pX(this.a,BB(t,14));case 11:return void nNn(this,BB(t,33));case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),sqn(this.b),!this.b&&(this.b=new eU(_Ot,this,12,3)),void pX(this.b,BB(t,14))}LAn(this,n,t)},MWn.zh=function(){return IXn(),EOt},MWn.Bh=function(n){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),void sqn(this.c);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),void sqn(this.a);case 11:return void nNn(this,null);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),void sqn(this.b)}xpn(this,n)},MWn.Ib=function(){return zRn(this)},vX(b6n,"ElkNodeImpl",239),wAn(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Em),MWn.Qg=function(n){return fkn(this,n)},MWn._g=function(n,t,e){return 9==n?WJ(this):Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?fkn(this,e):this.Cb.ih(this,-1-i,null,e)),YD(this,BB(n,33),e)):djn(this,n,t,e)},MWn.jh=function(n,t,e){return 9==t?YD(this,null,e):gjn(this,n,t,e)},MWn.lh=function(n){return 9==n?!!WJ(this):Gon(this,n)},MWn.sh=function(n,t){9!==n?LAn(this,n,t):BLn(this,BB(t,33))},MWn.zh=function(){return IXn(),TOt},MWn.Bh=function(n){9!==n?xpn(this,n):BLn(this,null)},MWn.Ib=function(){return URn(this)},vX(b6n,"ElkPortImpl",186);var VOt=bq(B6n,"BasicEMap/Entry");wAn(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},so),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){Din(this,BB(n,146))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void Din(this,BB(t,146));case 1:return void _in(this,t)}yIn(this,n,t)},MWn.zh=function(){return IXn(),MOt},MWn.Bh=function(n){switch(n){case 0:return void Din(this,null);case 1:return void _in(this,null)}mPn(this,n)},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=n?nsn(n):0),this.a},MWn.dd=function(){return this.c},MWn.Th=function(n){this.a=n},MWn.ed=function(n){var t;return t=this.c,_in(this,n),t},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):(oO(oO(oO(n=new Ik,this.b?this.b.tg():zWn),e1n),kN(this.c)),n.a)},MWn.a=-1,MWn.c=null;var QOt,YOt,JOt,ZOt,nAt,tAt,eAt,iAt,rAt=vX(b6n,"ElkPropertyToValueMapEntryImpl",1092);wAn(984,1,{},lo),vX(G6n,"JsonAdapter",984),wAn(210,60,BVn,ek),vX(G6n,"JsonImportException",210),wAn(857,1,{},dkn),vX(G6n,"JsonImporter",857),wAn(891,1,{},aC),vX(G6n,"JsonImporter/lambda$0$Type",891),wAn(892,1,{},uC),vX(G6n,"JsonImporter/lambda$1$Type",892),wAn(900,1,{},$g),vX(G6n,"JsonImporter/lambda$10$Type",900),wAn(902,1,{},oC),vX(G6n,"JsonImporter/lambda$11$Type",902),wAn(903,1,{},sC),vX(G6n,"JsonImporter/lambda$12$Type",903),wAn(909,1,{},fQ),vX(G6n,"JsonImporter/lambda$13$Type",909),wAn(908,1,{},hQ),vX(G6n,"JsonImporter/lambda$14$Type",908),wAn(904,1,{},hC),vX(G6n,"JsonImporter/lambda$15$Type",904),wAn(905,1,{},fC),vX(G6n,"JsonImporter/lambda$16$Type",905),wAn(906,1,{},lC),vX(G6n,"JsonImporter/lambda$17$Type",906),wAn(907,1,{},bC),vX(G6n,"JsonImporter/lambda$18$Type",907),wAn(912,1,{},Lg),vX(G6n,"JsonImporter/lambda$19$Type",912),wAn(893,1,{},Ng),vX(G6n,"JsonImporter/lambda$2$Type",893),wAn(910,1,{},xg),vX(G6n,"JsonImporter/lambda$20$Type",910),wAn(911,1,{},Dg),vX(G6n,"JsonImporter/lambda$21$Type",911),wAn(915,1,{},Rg),vX(G6n,"JsonImporter/lambda$22$Type",915),wAn(913,1,{},Kg),vX(G6n,"JsonImporter/lambda$23$Type",913),wAn(914,1,{},_g),vX(G6n,"JsonImporter/lambda$24$Type",914),wAn(917,1,{},Fg),vX(G6n,"JsonImporter/lambda$25$Type",917),wAn(916,1,{},Bg),vX(G6n,"JsonImporter/lambda$26$Type",916),wAn(918,1,lVn,wC),MWn.td=function(n){E9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$27$Type",918),wAn(919,1,lVn,dC),MWn.td=function(n){T9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$28$Type",919),wAn(920,1,{},gC),vX(G6n,"JsonImporter/lambda$29$Type",920),wAn(896,1,{},Hg),vX(G6n,"JsonImporter/lambda$3$Type",896),wAn(921,1,{},pC),vX(G6n,"JsonImporter/lambda$30$Type",921),wAn(922,1,{},qg),vX(G6n,"JsonImporter/lambda$31$Type",922),wAn(923,1,{},Gg),vX(G6n,"JsonImporter/lambda$32$Type",923),wAn(924,1,{},zg),vX(G6n,"JsonImporter/lambda$33$Type",924),wAn(925,1,{},Ug),vX(G6n,"JsonImporter/lambda$34$Type",925),wAn(859,1,{},Xg),vX(G6n,"JsonImporter/lambda$35$Type",859),wAn(929,1,{},MB),vX(G6n,"JsonImporter/lambda$36$Type",929),wAn(926,1,lVn,Wg),MWn.td=function(n){Y4(this.a,BB(n,469))},vX(G6n,"JsonImporter/lambda$37$Type",926),wAn(927,1,lVn,SC),MWn.td=function(n){lO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$38$Type",927),wAn(928,1,lVn,PC),MWn.td=function(n){bO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$39$Type",928),wAn(894,1,{},Vg),vX(G6n,"JsonImporter/lambda$4$Type",894),wAn(930,1,lVn,Qg),MWn.td=function(n){J4(this.a,BB(n,8))},vX(G6n,"JsonImporter/lambda$40$Type",930),wAn(895,1,{},Yg),vX(G6n,"JsonImporter/lambda$5$Type",895),wAn(899,1,{},Jg),vX(G6n,"JsonImporter/lambda$6$Type",899),wAn(897,1,{},Zg),vX(G6n,"JsonImporter/lambda$7$Type",897),wAn(898,1,{},np),vX(G6n,"JsonImporter/lambda$8$Type",898),wAn(901,1,{},tp),vX(G6n,"JsonImporter/lambda$9$Type",901),wAn(948,1,lVn,ep),MWn.td=function(n){nW(this.a,new GX(SD(n)))},vX(G6n,"JsonMetaDataConverter/lambda$0$Type",948),wAn(949,1,lVn,ip),MWn.td=function(n){_X(this.a,BB(n,237))},vX(G6n,"JsonMetaDataConverter/lambda$1$Type",949),wAn(950,1,lVn,rp),MWn.td=function(n){t1(this.a,BB(n,149))},vX(G6n,"JsonMetaDataConverter/lambda$2$Type",950),wAn(951,1,lVn,cp),MWn.td=function(n){FX(this.a,BB(n,175))},vX(G6n,"JsonMetaDataConverter/lambda$3$Type",951),wAn(237,22,{3:1,35:1,22:1,237:1},MC);var cAt,aAt=Ben(CJn,"GraphFeature",237,Unt,Ktn,pB);wAn(13,1,{35:1,146:1},up,iR,$O,XA),MWn.wd=function(n){return pL(this,BB(n,146))},MWn.Fb=function(n){return EY(this,n)},MWn.wg=function(){return mpn(this)},MWn.tg=function(){return this.b},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return this.b},vX(CJn,"Property",13),wAn(818,1,MYn,ap),MWn.ue=function(n,t){return _ln(this,BB(n,94),BB(t,94))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CJn,"PropertyHolderComparator",818),wAn(695,1,QWn,sp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return A9(this)},MWn.Qb=function(){uE()},MWn.Ob=function(){return!!this.a},vX(c8n,"ElkGraphUtil/AncestorIterator",695);var uAt=bq(B6n,"EList");wAn(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),MWn.Vc=function(n,t){sln(this,n,t)},MWn.Fc=function(n){return f9(this,n)},MWn.Wc=function(n,t){return oon(this,n,t)},MWn.Gc=function(n){return pX(this,n)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.ai=function(){return!0},MWn.bi=function(n,t){},MWn.ci=function(){},MWn.di=function(n,t){L8(this,n,t)},MWn.ei=function(n,t,e){},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.Fb=function(n){return QDn(this,n)},MWn.Hb=function(){return Mun(this)},MWn.hi=function(){return!1},MWn.Kc=function(){return new AL(this)},MWn.Yc=function(){return new cx(this)},MWn.Zc=function(n){var t;if(t=this.gc(),n<0||n>t)throw Hp(new tK(n,t));return new GU(this,n)},MWn.ji=function(n,t){this.ii(n,this.Xc(t))},MWn.Mc=function(n){return snn(this,n)},MWn.li=function(n,t){return t},MWn._c=function(n,t){return ovn(this,n,t)},MWn.Ib=function(){return Jbn(this)},MWn.ni=function(){return!0},MWn.oi=function(n,t){return xsn(this,t)},vX(B6n,"AbstractEList",67),wAn(63,67,h8n,go,gtn,jcn),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Cfn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.$b=function(){a6(this)},MWn.Hc=function(n){return Sjn(this,n)},MWn.Xb=function(n){return Wtn(this,n)},MWn.qi=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)<n&&(t=n),this.g=this.ri(t),null!=i&&aHn(i,0,this.g,0,this.i))},MWn.Xc=function(n){return Wyn(this,n)},MWn.dc=function(){return 0==this.i},MWn.ii=function(n,t){return YCn(this,n,t)},MWn.ri=function(n){return x8(Ant,HWn,1,n,5,1)},MWn.ki=function(n){return this.g[n]},MWn.$c=function(n){return Lyn(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.gc=function(){return this.i},MWn.Pc=function(){return N3(this)},MWn.Qc=function(n){return Qwn(this,n)},MWn.i=0;var oAt=vX(B6n,"BasicEList",63),sAt=bq(B6n,"TreeIterator");wAn(694,63,f8n),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&BB(this.g[this.i-1],47).Ob():tZ(this)},MWn.Pb=function(){return aLn(this)},MWn.Qb=function(){if(!this.e)throw Hp(new Fy("There is no valid object to remove."));this.e.Qb()},MWn.c=!1,vX(B6n,"AbstractTreeIterator",694),wAn(685,694,f8n,OA),MWn.si=function(n){var t;return cL(t=BB(n,56).Wg().Kc(),279)&&BB(t,279).Nk(new bo),t},vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),wAn(952,1,{},bo),vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var hAt,fAt,lAt,bAt=vX(c8n,"ElkReflect",null);wAn(889,1,i5n,wo),MWn.vg=function(n){return hZ(),B6(BB(n,174))},vX(c8n,"ElkReflect/lambda$0$Type",889),bq(B6n,"ResourceLocator"),wAn(1051,1,{}),vX(B6n,"DelegatingResourceLocator",1051),wAn(1052,1051,{}),vX("org.eclipse.emf.common","EMFPlugin",1052);var wAt,dAt=bq(J8n,"Adapter"),gAt=bq(J8n,"Notification");wAn(1153,1,Z8n),MWn.ti=function(){return this.d},MWn.ui=function(n){},MWn.vi=function(n){this.d=n},MWn.wi=function(n){this.d==n&&(this.d=null)},MWn.d=null,vX(i6n,"AdapterImpl",1153),wAn(1995,67,n9n),MWn.Vh=function(n,t){return kwn(this,n,t)},MWn.Wh=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Vi(),i=n.Kc();i.Ob();)e=i.Pb(),this.Ii(this.oi(t,e)),++t;return!0},MWn.Xh=function(n,t){ZD(this,n,t)},MWn.Yh=function(n){eW(this,n)},MWn.Gi=function(){return this.Ji()},MWn.$b=function(){JD(this,this.Vi(),this.Wi())},MWn.Hc=function(n){return this.Li(n)},MWn.Ic=function(n){return this.Mi(n)},MWn.Hi=function(n,t){this.Si().jm()},MWn.Ii=function(n){this.Si().jm()},MWn.Ji=function(){return this.Si()},MWn.Ki=function(){this.Si().jm()},MWn.Li=function(n){return this.Si().jm()},MWn.Mi=function(n){return this.Si().jm()},MWn.Ni=function(n){return this.Si().jm()},MWn.Oi=function(n){return this.Si().jm()},MWn.Pi=function(){return this.Si().jm()},MWn.Qi=function(n){return this.Si().jm()},MWn.Ri=function(){return this.Si().jm()},MWn.Ti=function(n){return this.Si().jm()},MWn.Ui=function(n,t){return this.Si().jm()},MWn.Vi=function(){return this.Si().jm()},MWn.Wi=function(){return this.Si().jm()},MWn.Xi=function(n){return this.Si().jm()},MWn.Yi=function(){return this.Si().jm()},MWn.Fb=function(n){return this.Ni(n)},MWn.Xb=function(n){return this.li(n,this.Oi(n))},MWn.Hb=function(){return this.Pi()},MWn.Xc=function(n){return this.Qi(n)},MWn.dc=function(){return this.Ri()},MWn.ii=function(n,t){return AMn(this,n,t)},MWn.ki=function(n){return this.Oi(n)},MWn.$c=function(n){return wq(this,n)},MWn.Mc=function(n){var t;return(t=this.Xc(n))>=0&&(this.$c(t),!0)},MWn.mi=function(n,t){return this.Ui(n,this.oi(n,t))},MWn.gc=function(){return this.Vi()},MWn.Pc=function(){return this.Wi()},MWn.Qc=function(n){return this.Xi(n)},MWn.Ib=function(){return this.Yi()},vX(B6n,"DelegatingEList",1995),wAn(1996,1995,n9n),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){vqn(this)},MWn.Zi=function(n,t,e,i,r){return new NY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return!this.Ri()},MWn.ii=function(n,t){var e,i;return this.ej()?(i=this.fj(),e=AMn(this,n,t),this.$i(this.Zi(7,iln(t),e,n,i)),e):AMn(this,n,t)},MWn.$c=function(n){var t,e,i,r;return this.ej()?(e=null,i=this.fj(),t=this.Zi(4,r=wq(this,n),null,n,i),this.bj()&&r?(e=this.dj(r,e))?(e.Ei(t),e.Fi()):this.$i(t):e?(e.Ei(t),e.Fi()):this.$i(t),r):(r=wq(this,n),this.bj()&&r&&(e=this.dj(r,null))&&e.Fi(),r)},MWn.mi=function(n,t){return oFn(this,n,t)},vX(i6n,"DelegatingNotifyingListImpl",1996),wAn(143,1,t9n),MWn.Ei=function(n){return KEn(this,n)},MWn.Fi=function(){$7(this)},MWn.xi=function(){return this.d},MWn._i=function(){return null},MWn.gj=function(){return null},MWn.yi=function(n){return-1},MWn.zi=function(){return Rxn(this)},MWn.Ai=function(){return null},MWn.Bi=function(){return Kxn(this)},MWn.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},MWn.hj=function(){return!1},MWn.Di=function(n){var t,e,i,r,c,a,u,o;switch(this.d){case 1:case 2:switch(n.xi()){case 1:case 2:if(GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0}case 4:if(4===n.xi()&&GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null))return a=tGn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.Ci(),this.d=6,o=new gtn(2),c<=i?(f9(o,this.n),f9(o,n.Bi()),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=c,i+1])):(f9(o,n.Bi()),f9(o,this.n),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=i,c])),this.n=o,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.xi()&&GC(n.Ai())===GC(this.Ai())&&this.yi(null)==n.yi(null)){for(a=tGn(this),i=n.Ci(),u=BB(this.g,48),e=x8(ANt,hQn,25,u.length+1,15,1),t=0;t<u.length&&(r=u[t])<=i;)e[t++]=r,++i;for(BB(this.n,15).Vc(t,n.Bi()),e[t]=i;++t<e.length;)e[t]=u[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},MWn.Ib=function(){var n,t,e;switch((e=new fN(nE(this.gm)+"@"+(nsn(this)>>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:mE(e,this.d)}if(lKn(this)&&(e.a+=", touch: true"),e.a+=", position: ",mE(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",rO(e,this.Ai()),e.a+=", feature: ",rO(e,this._i()),e.a+=", oldValue: ",rO(e,Kxn(this)),e.a+=", newValue: ",6==this.d&&cL(this.g,48)){for(t=BB(this.g,48),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=FWn);e.a+="]"}else rO(e,Rxn(this));return e.a+=", isTouch: ",yE(e,lKn(this)),e.a+=", wasSet: ",yE(e,tGn(this)),e.a+=")",e.a},MWn.d=0,MWn.e=0,MWn.f=0,MWn.j=0,MWn.k=0,MWn.o=0,MWn.p=0,vX(i6n,"NotificationImpl",143),wAn(1167,143,t9n,NY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"DelegatingNotifyingListImpl/1",1167),wAn(242,63,h8n,po,Fj),MWn.Fc=function(n){return Mwn(this,BB(n,366))},MWn.Ei=function(n){return Mwn(this,n)},MWn.Fi=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=BB(this.g[n],366)).Ai())&&-1!=t.xi()&&BB(e,92).Ng(t)},MWn.ri=function(n){return x8(gAt,HWn,366,n,0,1)},vX(i6n,"NotificationChainImpl",242),wAn(1378,90,e6n),MWn.Kg=function(){return this.e},MWn.Mg=function(){return 0!=(1&this.f)},MWn.f=1,vX(i6n,"NotifierImpl",1378),wAn(1993,63,h8n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){sqn(this)},MWn.Zi=function(n,t,e,i,r){return new xY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.ij=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return 0!=this.i},MWn.ii=function(n,t){return Cln(this,n,t)},MWn.$c=function(n){return fDn(this,n)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.jj=function(n,t){return t},MWn.kj=function(n,t){return t},MWn.lj=function(n,t,e){return e},vX(i6n,"NotifyingListImpl",1993),wAn(1166,143,t9n,xY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"NotifyingListImpl/1",1166),wAn(953,63,h8n,aR),MWn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new $q(this),this.a=this.j),FT(this.b,n)):Sjn(this,n)},MWn.ni=function(){return!0},MWn.a=0,vX(B6n,"AbstractEList/1",953),wAn(295,73,NQn,tK),vX(B6n,"AbstractEList/BasicIndexOutOfBoundsException",295),wAn(40,1,QWn,AL),MWn.Nb=function(n){fU(this,n)},MWn.mj=function(){if(this.i.j!=this.f)throw Hp(new vv)},MWn.nj=function(){return kpn(this)},MWn.Ob=function(){return this.e!=this.i.gc()},MWn.Pb=function(){return this.nj()},MWn.Qb=function(){Qjn(this)},MWn.e=0,MWn.f=0,MWn.g=-1,vX(B6n,"AbstractEList/EIterator",40),wAn(278,40,cVn,cx,GU),MWn.Qb=function(){Qjn(this)},MWn.Rb=function(n){odn(this,n)},MWn.oj=function(){var n;try{return n=this.d.Xb(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.pj=function(n){kmn(this,n)},MWn.Sb=function(){return 0!=this.e},MWn.Tb=function(){return this.e},MWn.Ub=function(){return this.oj()},MWn.Vb=function(){return this.e-1},MWn.Wb=function(n){this.pj(n)},vX(B6n,"AbstractEList/EListIterator",278),wAn(341,40,QWn,ax),MWn.nj=function(){return jpn(this)},MWn.Qb=function(){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEIterator",341),wAn(385,278,cVn,ux,RK),MWn.Rb=function(n){throw Hp(new pv)},MWn.nj=function(){var n;try{return n=this.c.ki(this.e),this.mj(),this.g=this.e++,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.oj=function(){var n;try{return n=this.c.ki(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEListIterator",385),wAn(1982,67,r9n),MWn.Vh=function(n,t){var e,i,r,c,a,u,o,s,h;if(0!=(i=t.gc())){for(e=Psn(this,(s=null==(o=BB(yan(this.a,4),126))?0:o.length)+i),(h=s-n)>0&&aHn(o,n,e,n+i,h),u=t.Kc(),c=0;c<i;++c)JA(e,n+c,xsn(this,a=u.Pb()));for(Fgn(this,e),r=0;r<i;++r)a=e[n],this.bi(n,a),++n;return!0}return++this.j,!1},MWn.Wh=function(n){var t,e,i,r,c,a,u,o,s;if(0!=(i=n.gc())){for(t=Psn(this,s=(o=null==(e=BB(yan(this.a,4),126))?0:e.length)+i),u=n.Kc(),c=o;c<s;++c)JA(t,c,xsn(this,a=u.Pb()));for(Fgn(this,t),r=o;r<s;++r)a=t[r],this.bi(r,a);return!0}return++this.j,!1},MWn.Xh=function(n,t){var e,i,r,c;e=Psn(this,(r=null==(i=BB(yan(this.a,4),126))?0:i.length)+1),c=xsn(this,t),n!=r&&aHn(i,n,e,n+1,r-n),$X(e,n,c),Fgn(this,e),this.bi(n,t)},MWn.Yh=function(n){var t,e,i;JA(t=Psn(this,(i=null==(e=BB(yan(this.a,4),126))?0:e.length)+1),i,xsn(this,n)),Fgn(this,t),this.bi(i,n)},MWn.Zh=function(){return new S5(this)},MWn.$h=function(){return new Yz(this)},MWn._h=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new BW(this,n)},MWn.$b=function(){var n,t;++this.j,t=null==(n=BB(yan(this.a,4),126))?0:n.length,Fgn(this,null),L8(this,t,n)},MWn.Hc=function(n){var t,e,i,r;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(Nfn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(GC(e[i])===GC(n))return!0;return!1},MWn.Xb=function(n){var t,e;if(n>=(e=null==(t=BB(yan(this.a,4),126))?0:t.length))throw Hp(new tK(n,e));return t[n]},MWn.Xc=function(n){var t,e,i;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(Nfn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(GC(t[e])===GC(n))return e;return-1},MWn.dc=function(){return null==BB(yan(this.a,4),126)},MWn.Kc=function(){return new M5(this)},MWn.Yc=function(){return new Qz(this)},MWn.Zc=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new FW(this,n)},MWn.ii=function(n,t){var e,i,r;if(n>=(r=null==(e=$dn(this))?0:e.length))throw Hp(new Ay(u8n+n+o8n+r));if(t>=r)throw Hp(new Ay(s8n+t+o8n+r));return i=e[t],n!=t&&(n<t?aHn(e,n,e,n+1,t-n):aHn(e,t+1,e,t,n-t),$X(e,n,i),Fgn(this,e)),i},MWn.ki=function(n){return BB(yan(this.a,4),126)[n]},MWn.$c=function(n){return EOn(this,n)},MWn.mi=function(n,t){var e,i;return i=(e=$dn(this))[n],JA(e,n,xsn(this,t)),Fgn(this,e),i},MWn.gc=function(){var n;return null==(n=BB(yan(this.a,4),126))?0:n.length},MWn.Pc=function(){var n,t,e;return e=null==(n=BB(yan(this.a,4),126))?0:n.length,t=x8(dAt,i9n,415,e,0,1),e>0&&aHn(n,0,t,0,e),t},MWn.Qc=function(n){var t,e;return(e=null==(t=BB(yan(this.a,4),126))?0:t.length)>0&&(n.length<e&&(n=Den(tsn(n).c,e)),aHn(t,0,n,0,e)),n.length>e&&$X(n,e,null),n},vX(B6n,"ArrayDelegatingEList",1982),wAn(1038,40,QWn,M5),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EIterator",1038),wAn(706,278,cVn,Qz,FW),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},MWn.pj=function(n){kmn(this,n),this.a=BB(yan(this.b.a,4),126)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EListIterator",706),wAn(1039,341,QWn,S5),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEIterator",1039),wAn(707,385,cVn,Yz,BW),MWn.mj=function(){if(this.b.j!=this.f||GC(BB(yan(this.b.a,4),126))!==GC(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEListIterator",707),wAn(606,295,NQn,LO),vX(B6n,"BasicEList/BasicIndexOutOfBoundsException",606),wAn(696,63,h8n,DC),MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.qi=function(n){throw Hp(new pv)},MWn.Kc=function(){return this.Zh()},MWn.Yc=function(){return this.$h()},MWn.Zc=function(n){return this._h(n)},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.$c=function(n){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},vX(B6n,"BasicEList/UnmodifiableEList",696),wAn(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),MWn.Vc=function(n,t){Q$(this,n,BB(t,42))},MWn.Fc=function(n){return aD(this,BB(n,42))},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return BB(Wtn(this.c,n),133)},MWn.ii=function(n,t){return BB(this.c.ii(n,t),42)},MWn.ji=function(n,t){Y$(this,n,BB(t,42))},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BB(this.c.$c(n),42)},MWn._c=function(n,t){return uX(this,n,BB(t,42))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Wc=function(n,t){return this.c.Wc(n,t)},MWn.Gc=function(n){return this.c.Gc(n)},MWn.$b=function(){this.c.$b()},MWn.Hc=function(n){return this.c.Hc(n)},MWn.Ic=function(n){return oun(this.c,n)},MWn.qj=function(){var n,t;if(null==this.d){for(this.d=x8(oAt,c9n,63,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)Cvn(this,BB(n.nj(),133));this.e=t}},MWn.Fb=function(n){return NK(this,n)},MWn.Hb=function(){return Mun(this.c)},MWn.Xc=function(n){return this.c.Xc(n)},MWn.rj=function(){this.c=new hp(this)},MWn.dc=function(){return 0==this.f},MWn.Kc=function(){return this.c.Kc()},MWn.Yc=function(){return this.c.Yc()},MWn.Zc=function(n){return this.c.Zc(n)},MWn.sj=function(){return A8(this)},MWn.tj=function(n,t,e){return new SB(n,t,e)},MWn.uj=function(){return new vo},MWn.Mc=function(n){return hin(this,n)},MWn.gc=function(){return this.f},MWn.bd=function(n,t){return new s1(this.c,n,t)},MWn.Pc=function(){return this.c.Pc()},MWn.Qc=function(n){return this.c.Qc(n)},MWn.Ib=function(){return Jbn(this.c)},MWn.e=0,MWn.f=0,vX(B6n,"BasicEMap",705),wAn(1033,63,h8n,hp),MWn.bi=function(n,t){Av(this,BB(t,133))},MWn.ei=function(n,t,e){var i;++(i=this,BB(t,133),i).a.e},MWn.fi=function(n,t){$v(this,BB(t,133))},MWn.gi=function(n,t,e){VN(this,BB(t,133),BB(e,133))},MWn.di=function(n,t){aan(this.a)},vX(B6n,"BasicEMap/1",1033),wAn(1034,63,h8n,vo),MWn.ri=function(n){return x8(vAt,a9n,612,n,0,1)},vX(B6n,"BasicEMap/2",1034),wAn(1035,nVn,tVn,fp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return rdn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Bj(this.a)},MWn.Mc=function(n){var t;return t=this.a.f,Wdn(this.a,n),this.a.f!=t},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/3",1035),wAn(1036,28,ZWn,lp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return YDn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Hj(this.a)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/4",1036),wAn(1037,nVn,tVn,bp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){var t,e,i,r,c,a,u,o,s;if(this.a.f>0&&cL(n,42)&&(this.a.qj(),r=null==(u=(o=BB(n,42)).cd())?0:nsn(u),c=eR(this.a,r),t=this.a.d[c]))for(e=BB(t.g,367),s=t.i,a=0;a<s;++a)if((i=e[a]).Sh()==r&&i.Fb(o))return!0;return!1},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new pQ(this.a)},MWn.Mc=function(n){return CAn(this,n)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/5",1037),wAn(613,1,QWn,pQ),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return-1!=this.b},MWn.Pb=function(){var n;if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.b)throw Hp(new yv);return this.d=this.a,this.e=this.b,ujn(this),n=BB(this.f.d[this.d].g[this.e],133),this.vj(n)},MWn.Qb=function(){if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.e)throw Hp(new dv);this.f.c.Mc(Wtn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},MWn.vj=function(n){return n},MWn.a=0,MWn.b=-1,MWn.c=0,MWn.d=0,MWn.e=0,vX(B6n,"BasicEMap/BasicEMapIterator",613),wAn(1031,613,QWn,Bj),MWn.vj=function(n){return n.cd()},vX(B6n,"BasicEMap/BasicEMapKeyIterator",1031),wAn(1032,613,QWn,Hj),MWn.vj=function(n){return n.dd()},vX(B6n,"BasicEMap/BasicEMapValueIterator",1032),wAn(1030,1,JWn,wp),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.a.c.$b()},MWn._b=function(n){return BC(this,n)},MWn.uc=function(n){return YDn(this.a,n)},MWn.vc=function(){return C8(this.a)},MWn.Fb=function(n){return NK(this.a,n)},MWn.xc=function(n){return cdn(this.a,n)},MWn.Hb=function(){return Mun(this.a.c)},MWn.dc=function(){return 0==this.a.f},MWn.ec=function(){return O8(this.a)},MWn.zc=function(n,t){return vjn(this.a,n,t)},MWn.Bc=function(n){return Wdn(this.a,n)},MWn.gc=function(){return this.a.f},MWn.Ib=function(){return Jbn(this.a.c)},MWn.Cc=function(){return I8(this.a)},vX(B6n,"BasicEMap/DelegatingMap",1030),wAn(612,1,{42:1,133:1,612:1},SB),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),(null!=this.b?Nfn(this.b,t.cd()):GC(this.b)===GC(t.cd()))&&(null!=this.c?Nfn(this.c,t.dd()):GC(this.c)===GC(t.dd())))},MWn.Sh=function(){return this.a},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return this.a^(null==this.c?0:nsn(this.c))},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){throw Hp(new sv)},MWn.ed=function(n){var t;return t=this.c,this.c=n,t},MWn.Ib=function(){return this.b+"->"+this.c},MWn.a=0;var pAt,vAt=vX(B6n,"BasicEMap/EntryImpl",612);wAn(536,1,{},oo),vX(B6n,"BasicEMap/View",536),wAn(768,1,{}),MWn.Fb=function(n){return NAn((SQ(),set),n)},MWn.Hb=function(){return Fon((SQ(),set))},MWn.Ib=function(){return LMn((SQ(),set))},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList",768),wAn(1312,1,cVn,mo),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList/1",1312),wAn(1310,768,{20:1,14:1,15:1,58:1},Tm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},vX(B6n,"ECollections/EmptyUnmodifiableEList",1310),wAn(1311,768,{20:1,14:1,15:1,58:1,589:1},Mm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},MWn.sj=function(){return SQ(),SQ(),het},vX(B6n,"ECollections/EmptyUnmodifiableEMap",1311);var mAt,yAt=bq(B6n,"Enumerator");wAn(281,1,{281:1},rRn),MWn.Fb=function(n){var t;return this===n||!!cL(n,281)&&(t=BB(n,281),this.f==t.f&&vG(this.i,t.i)&&pG(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&pG(this.d,t.d)&&pG(this.g,t.g)&&pG(this.e,t.e)&&Spn(this,t))},MWn.Hb=function(){return this.f},MWn.Ib=function(){return M_n(this)},MWn.f=0;var kAt,jAt,EAt,TAt=0,MAt=0,SAt=0,PAt=0,IAt=0,CAt=0,OAt=0,AAt=0,$At=0,LAt=0,NAt=0,xAt=0,DAt=0;vX(B6n,"URI",281),wAn(1091,43,tYn,Sm),MWn.zc=function(n,t){return BB(mZ(this,SD(n),BB(t,281)),281)},vX(B6n,"URI/URICache",1091),wAn(497,63,h8n,fo,rG),MWn.hi=function(){return!0},vX(B6n,"UniqueEList",497),wAn(581,60,BVn,L7),vX(B6n,"WrappedException",581);var RAt,KAt=bq(q5n,s9n),_At=bq(q5n,h9n),FAt=bq(q5n,f9n),BAt=bq(q5n,l9n),HAt=bq(q5n,b9n),qAt=bq(q5n,"EClass"),GAt=bq(q5n,"EDataType");wAn(1183,43,tYn,Pm),MWn.xc=function(n){return XC(n)?SJ(this,n):qC(AY(this.f,n))},vX(q5n,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var zAt,UAt,XAt=bq(q5n,"EEnum"),WAt=bq(q5n,w9n),VAt=bq(q5n,d9n),QAt=bq(q5n,g9n),YAt=bq(q5n,p9n),JAt=bq(q5n,v9n);wAn(1029,1,{},ho),MWn.Ib=function(){return"NIL"},vX(q5n,"EStructuralFeature/Internal/DynamicValueHolder/1",1029),wAn(1028,43,tYn,Im),MWn.xc=function(n){return XC(n)?SJ(this,n):qC(AY(this.f,n))},vX(q5n,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var ZAt,n$t,t$t,e$t,i$t,r$t,c$t,a$t,u$t,o$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,v$t,m$t,y$t,k$t,j$t,E$t,T$t,M$t,S$t,P$t,I$t,C$t,O$t=bq(q5n,m9n),A$t=bq(q5n,"EValidator/PatternMatcher"),$$t=bq(y9n,"FeatureMap/Entry");wAn(535,1,{72:1},IC),MWn.ak=function(){return this.a},MWn.dd=function(){return this.b},vX(l6n,"BasicEObjectImpl/1",535),wAn(1027,1,k9n,CC),MWn.Wj=function(n){return V5(this.a,this.b,n)},MWn.fj=function(){return ZJ(this.a,this.b)},MWn.Wb=function(n){NJ(this.a,this.b,n)},MWn.Xj=function(){PW(this.a,this.b)},vX(l6n,"BasicEObjectImpl/4",1027),wAn(1983,1,{108:1}),MWn.bk=function(n){this.e=0==n?M$t:x8(Ant,HWn,1,n,5,1)},MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.ck=function(){return this.c},MWn.dk=function(){throw Hp(new pv)},MWn.ek=function(){throw Hp(new pv)},MWn.fk=function(){return this.d},MWn.gk=function(){return null!=this.e},MWn.hk=function(n){this.c=n},MWn.ik=function(n){throw Hp(new pv)},MWn.jk=function(n){throw Hp(new pv)},MWn.kk=function(n){this.d=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),wAn(185,1983,{108:1},Kf),MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderImpl",185),wAn(506,97,f6n,yo),MWn.Kg=function(){return this.f},MWn.Pg=function(){return this.k},MWn.Rg=function(n,t){this.g=n,this.i=t},MWn.Tg=function(){return 0==(2&this.j)?this.zh():this.ph().ck()},MWn.Vg=function(){return this.i},MWn.Mg=function(){return 0!=(1&this.j)},MWn.eh=function(){return this.g},MWn.kh=function(){return 0!=(4&this.j)},MWn.ph=function(){return!this.k&&(this.k=new Kf),this.k},MWn.th=function(n){this.ph().hk(n),n?this.j|=2:this.j&=-3},MWn.vh=function(n){this.ph().jk(n),n?this.j|=4:this.j&=-5},MWn.zh=function(){return(QX(),t$t).S},MWn.i=0,MWn.j=1,vX(l6n,"EObjectImpl",506),wAn(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},jH),MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.Tg=function(){return this.d},MWn.Yg=function(n){return Awn(this.d,n)},MWn.$g=function(){return this.d},MWn.dh=function(){return null!=this.e},MWn.ph=function(){return!this.k&&(this.k=new ko),this.k},MWn.th=function(n){this.d=n},MWn.yh=function(){var n;return null==this.e&&(n=bX(this.d),this.e=0==n?S$t:x8(Ant,HWn,1,n,5,1)),this},MWn.Ah=function(){return 0},vX(l6n,"DynamicEObjectImpl",780),wAn(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},fq),MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.th=function(n){this.d=n,this.b=NNn(n,"key"),this.c=NNn(n,E6n)},MWn.Sh=function(){var n;return-1==this.a&&(n=J7(this,this.b),this.a=null==n?0:nsn(n)),this.a},MWn.cd=function(){return J7(this,this.b)},MWn.dd=function(){return J7(this,this.c)},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){NJ(this,this.b,n)},MWn.ed=function(n){var t;return t=J7(this,this.c),NJ(this,this.c,n),t},MWn.a=0,vX(l6n,"DynamicEObjectImpl/BasicEMapEntry",1376),wAn(1377,1,{108:1},ko),MWn.bk=function(n){throw Hp(new pv)},MWn.Ch=function(n){throw Hp(new pv)},MWn.Dh=function(n,t){throw Hp(new pv)},MWn.Eh=function(n){throw Hp(new pv)},MWn.ck=function(){throw Hp(new pv)},MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.fk=function(){return this.c},MWn.gk=function(){throw Hp(new pv)},MWn.hk=function(n){throw Hp(new pv)},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},MWn.kk=function(n){this.c=n},vX(l6n,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),wAn(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},jo),MWn.Qg=function(n){return bkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),this.b):(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),A8(this.b));case 3:return bZ(this);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),this.a;case 5:return!this.c&&(this.c=new RL(LOt,this,5)),this.c}return U9(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?bkn(this,e):this.Cb.ih(this,-1-i,null,e)),QG(this,BB(n,147),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),BK(this.b,n,e);case 3:return QG(this,null,e);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!bZ(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return O3(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void pq(this,SD(t));case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void tan(this.b,t);case 3:return void ONn(this,BB(t,147));case 4:return!this.a&&(this.a=new $L(LOt,this,4)),sqn(this.a),!this.a&&(this.a=new $L(LOt,this,4)),void pX(this.a,BB(t,14));case 5:return!this.c&&(this.c=new RL(LOt,this,5)),sqn(this.c),!this.c&&(this.c=new RL(LOt,this,5)),void pX(this.c,BB(t,14))}Lbn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t)},MWn.zh=function(){return gWn(),e$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Bin(this,null);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void this.b.c.$b();case 3:return void ONn(this,null);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),void sqn(this.a);case 5:return!this.c&&(this.c=new RL(LOt,this,5)),void sqn(this.c)}qfn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.Ib=function(){return Vfn(this)},MWn.d=null,vX(l6n,"EAnnotationImpl",510),wAn(151,705,j9n,y9),MWn.Xh=function(n,t){n$(this,n,BB(t,42))},MWn.lk=function(n,t){return FK(this,BB(n,42),t)},MWn.pi=function(n){return BB(BB(this.c,69).pi(n),133)},MWn.Zh=function(){return BB(this.c,69).Zh()},MWn.$h=function(){return BB(this.c,69).$h()},MWn._h=function(n){return BB(this.c,69)._h(n)},MWn.mk=function(n,t){return BK(this,n,t)},MWn.Wj=function(n){return BB(this.c,76).Wj(n)},MWn.rj=function(){},MWn.fj=function(){return BB(this.c,76).fj()},MWn.tj=function(n,t,e){var i;return(i=BB(Utn(this.b).Nh().Jh(this.b),133)).Th(n),i.Uh(t),i.ed(e),i},MWn.uj=function(){return new Cp(this)},MWn.Wb=function(n){tan(this,n)},MWn.Xj=function(){BB(this.c,76).Xj()},vX(y9n,"EcoreEMap",151),wAn(158,151,j9n,Jx),MWn.qj=function(){var n,t,e,i,r;if(null==this.d){for(r=x8(oAt,c9n,63,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=BB(e.nj(),133)).Sh()&DWn)%r.length])&&(n=r[i]=new Cp(this)),n.Fc(t);this.d=r}},vX(l6n,"EAnnotationImpl/1",158),wAn(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi())}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),E$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi())}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ckn(this),this.Bb|=1},MWn.Yj=function(){return Ckn(this)},MWn.Zj=function(){return this.t},MWn.$j=function(){var n;return(n=this.t)>1||-1==n},MWn.hi=function(){return 0!=(512&this.Bb)},MWn.nk=function(n,t){return Pfn(this,n,t)},MWn.ok=function(n){Nen(this,n)},MWn.Ib=function(){return KOn(this)},MWn.s=0,MWn.t=1,vX(l6n,"ETypedElementImpl",284),wAn(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),MWn.Qg=function(n){return Nyn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?Nyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 17:return T_n(this,null,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),j$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.Gj=function(){return this.f},MWn.zj=function(){return qLn(this)},MWn.Hj=function(){return dZ(this)},MWn.Lj=function(){return null},MWn.pk=function(){return this.k},MWn.aj=function(){return this.n},MWn.Mj=function(){return oEn(this)},MWn.Nj=function(){var n,t,e,i,r,c,a,u,o;return this.p||((null==(e=dZ(this)).i&&qFn(e),e.i).length,(i=this.Lj())&&bX(dZ(i)),n=(a=(r=Ckn(this)).Bj())?0!=(1&a.i)?a==$Nt?ktt:a==ANt?Att:a==DNt?Itt:a==xNt?Ptt:a==LNt?Rtt:a==RNt?_tt:a==NNt?Ttt:Stt:a:null,t=qLn(this),u=r.zj(),bbn(this),0!=(this.Bb&hVn)&&((c=mjn((CPn(),Z$t),e))&&c!=this||(c=Z1(B7(Z$t,this))))?this.p=new AC(this,c):this.$j()?this.rk()?i?0!=(this.Bb&T9n)?n?this.sk()?this.p=new lQ(47,n,this,i):this.p=new lQ(5,n,this,i):this.sk()?this.p=new w4(46,this,i):this.p=new w4(4,this,i):n?this.sk()?this.p=new lQ(49,n,this,i):this.p=new lQ(7,n,this,i):this.sk()?this.p=new w4(48,this,i):this.p=new w4(6,this,i):0!=(this.Bb&T9n)?n?n==Hnt?this.p=new PB(50,VOt,this):this.sk()?this.p=new PB(43,n,this):this.p=new PB(1,n,this):this.sk()?this.p=new RY(42,this):this.p=new RY(0,this):n?n==Hnt?this.p=new PB(41,VOt,this):this.sk()?this.p=new PB(45,n,this):this.p=new PB(3,n,this):this.sk()?this.p=new RY(44,this):this.p=new RY(2,this):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(512&this.Bb)?0!=(this.Bb&T9n)?this.p=n?new PB(9,n,this):new RY(8,this):this.p=n?new PB(11,n,this):new RY(10,this):0!=(this.Bb&T9n)?this.p=n?new PB(13,n,this):new RY(12,this):this.p=n?new PB(15,n,this):new RY(14,this):i?(o=i.t)>1||-1==o?this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(25,n,this,i):new w4(24,this,i):this.p=n?new lQ(27,n,this,i):new w4(26,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(29,n,this,i):new w4(28,this,i):this.p=n?new lQ(31,n,this,i):new w4(30,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(33,n,this,i):new w4(32,this,i):this.p=n?new lQ(35,n,this,i):new w4(34,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(37,n,this,i):new w4(36,this,i):this.p=n?new lQ(39,n,this,i):new w4(38,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new PB(17,n,this):new RY(16,this):this.p=n?new PB(19,n,this):new RY(18,this):0!=(this.Bb&T9n)?this.p=n?new PB(21,n,this):new RY(20,this):this.p=n?new PB(23,n,this):new RY(22,this):this.qk()?this.sk()?this.p=new IB(BB(r,26),this,i):this.p=new mJ(BB(r,26),this,i):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(this.Bb&T9n)?this.p=n?new nz(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new dQ(BB(r,148),t,u,this):this.p=n?new ZG(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new wQ(BB(r,148),t,u,this):this.rk()?i?0!=(this.Bb&T9n)?this.sk()?this.p=new NB(BB(r,26),this,i):this.p=new LB(BB(r,26),this,i):this.sk()?this.p=new $B(BB(r,26),this,i):this.p=new CB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.sk()?this.p=new eD(BB(r,26),this):this.p=new tD(BB(r,26),this):this.sk()?this.p=new nD(BB(r,26),this):this.p=new Zx(BB(r,26),this):this.sk()?i?0!=(this.Bb&T9n)?this.p=new xB(BB(r,26),this,i):this.p=new OB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new rD(BB(r,26),this):this.p=new iD(BB(r,26),this):i?0!=(this.Bb&T9n)?this.p=new DB(BB(r,26),this,i):this.p=new AB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new cD(BB(r,26),this):this.p=new cG(BB(r,26),this)),this.p},MWn.Ij=function(){return 0!=(this.Bb&k6n)},MWn.qk=function(){return!1},MWn.rk=function(){return!1},MWn.Jj=function(){return 0!=(this.Bb&hVn)},MWn.Oj=function(){return hnn(this)},MWn.sk=function(){return!1},MWn.Kj=function(){return 0!=(this.Bb&T9n)},MWn.tk=function(n){this.k=n},MWn.Lh=function(n){JZ(this,n)},MWn.Ib=function(){return ERn(this)},MWn.e=!1,MWn.n=0,vX(l6n,"EStructuralFeatureImpl",449),wAn(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Om),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!NCn(this);case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return t?uun(this):x6(this)}return U9(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return NCn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!x6(this)}return O3(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Uj(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void Gln(this,qy(TD(t)))}Lbn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t)},MWn.zh=function(){return gWn(),i$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return this.b=0,void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return void Gln(this,!1)}qfn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.Gh=function(){uun(this),kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.$j=function(){return NCn(this)},MWn.nk=function(n,t){return this.b=0,this.a=null,Pfn(this,n,t)},MWn.ok=function(n){Uj(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (iD: ",yE(n,0!=(this.Bb&h6n)),n.a+=")",n.a)},MWn.b=0,vX(l6n,"EAttributeImpl",322),wAn(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),MWn.uk=function(n){return n.Tg()==this},MWn.Qg=function(n){return fyn(this,n)},MWn.Rg=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),c$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.yj=function(){var n;return-1==this.G&&(this.G=(n=Utn(this))?uvn(n.Mh(),this):-1),this.G},MWn.zj=function(){return null},MWn.Aj=function(){return Utn(this)},MWn.vk=function(){return this.v},MWn.Bj=function(){return iyn(this)},MWn.Cj=function(){return null!=this.D?this.D:this.B},MWn.Dj=function(){return this.F},MWn.wj=function(n){return SFn(this,n)},MWn.wk=function(n){this.v=n},MWn.xk=function(n){Urn(this,n)},MWn.yk=function(n){this.C=n},MWn.Lh=function(n){ZZ(this,n)},MWn.Ib=function(){return Iwn(this)},MWn.C=null,MWn.D=null,MWn.G=-1,vX(l6n,"EClassifierImpl",351),wAn(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},_f),MWn.uk=function(n){return QR(this,n.Tg())},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return null;case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return hN(),0!=(512&this.Bb);case 10:return kY(this);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),this.q;case 12:return YBn(this);case 13:return RBn(this);case 14:return RBn(this),this.r;case 15:return YBn(this),this.k;case 16:return WPn(this);case 17:return gBn(this);case 18:return qFn(this);case 19:return ILn(this);case 20:return YBn(this),this.o;case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),this.s;case 22:return a4(this);case 23:return HDn(this)}return U9(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),Ywn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),Ywn(this.s,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),_pn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),_pn(this.s,n,e);case 22:return _pn(a4(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==a4(this.u.a).i||this.n&&Rvn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=YBn(this).i;case 13:return 0!=RBn(this).i;case 14:return RBn(this),0!=this.r.i;case 15:return YBn(this),0!=this.k.i;case 16:return 0!=WPn(this).i;case 17:return 0!=gBn(this).i;case 18:return 0!=qFn(this).i;case 19:return 0!=ILn(this).i;case 20:return YBn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&Rvn(this.n);case 23:return 0!=HDn(this).i}return O3(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.oh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:NNn(this,n))||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Jfn(this,qy(TD(t)));case 9:return void tln(this,qy(TD(t)));case 10:return vqn(kY(this)),void pX(kY(this),BB(t,14));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),sqn(this.q),!this.q&&(this.q=new eU(QAt,this,11,10)),void pX(this.q,BB(t,14));case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),sqn(this.s),!this.s&&(this.s=new eU(FAt,this,21,17)),void pX(this.s,BB(t,14));case 22:return sqn(a4(this)),void pX(a4(this),BB(t,14))}Lbn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t)},MWn.zh=function(){return gWn(),r$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Jfn(this,!1);case 9:return void tln(this,!1);case 10:return void(this.u&&vqn(this.u));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),void sqn(this.q);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),void sqn(this.s);case 22:return void(this.n&&sqn(this.n))}qfn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.Gh=function(){var n,t;if(YBn(this),RBn(this),WPn(this),gBn(this),qFn(this),ILn(this),HDn(this),a6(XB(P5(this))),this.s)for(n=0,t=this.s.i;n<t;++n)vx(Wtn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)vx(Wtn(this.q,n));Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.Ib=function(){return dEn(this)},MWn.k=null,MWn.r=null,vX(l6n,"EClassImpl",88),wAn(1994,1993,D9n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return LFn(this,this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.lk=function(n,t){return Ywn(this,n,t)},MWn.pi=function(n){return F9(this,n)},MWn.mk=function(n,t){return _pn(this,n,t)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"NotifyingInternalEListImpl",1994),wAn(622,1994,R9n),MWn.Hc=function(n){return bqn(this,n)},MWn.Zi=function(n,t,e,i,r){return yZ(this,n,t,e,i,r)},MWn.$i=function(n){Lv(this,n)},MWn.Wj=function(n){return this},MWn.ak=function(){return itn(this.e.Tg(),this.aj())},MWn._i=function(){return this.ak()},MWn.aj=function(){return Awn(this.e.Tg(),this.ak())},MWn.zk=function(){return BB(this.ak().Yj(),26).Bj()},MWn.Ak=function(){return Ivn(BB(this.ak(),18)).n},MWn.Ai=function(){return this.e},MWn.Bk=function(){return!0},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!1},MWn.Xc=function(n){return uvn(this,n)},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.e,this.Ak(),this.zk(),t):e.gh(this.e,Awn(e.Tg(),Ivn(BB(this.ak(),18))),null,t):e.gh(this.e,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.e,this.Ak(),this.zk(),t):e.ih(this.e,Awn(e.Tg(),Ivn(BB(this.ak(),18))),null,t):e.ih(this.e,-1-this.aj(),null,t)},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return x3(this.d,n)},MWn.ej=function(){return mA(this.e)},MWn.fj=function(){return 0!=this.i},MWn.ri=function(n){return Den(this.d,n)},MWn.li=function(n,t){return this.Fk()&&this.Ek()?GOn(this,n,BB(t,56)):t},MWn.Gk=function(n){return n.kh()?tfn(this.e,BB(n,49)):n},MWn.Wb=function(n){J$(this,n)},MWn.Pc=function(){return H9(this)},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.i-1;t>=0;--t)Wtn(this,t);return Qwn(this,n)},MWn.Xj=function(){sqn(this)},MWn.oi=function(n,t){return _en(this,n,t)},vX(y9n,"EcoreEList",622),wAn(496,622,R9n,yH),MWn.ai=function(){return!1},MWn.aj=function(){return this.c},MWn.bj=function(){return!1},MWn.Fk=function(){return!0},MWn.hi=function(){return!0},MWn.li=function(n,t){return t},MWn.ni=function(){return!1},MWn.c=0,vX(y9n,"EObjectEList",496),wAn(85,496,R9n,$L),MWn.bj=function(){return!0},MWn.Dk=function(){return!1},MWn.rk=function(){return!0},vX(y9n,"EObjectContainmentEList",85),wAn(545,85,R9n,LL),MWn.ci=function(){this.b=!0},MWn.fj=function(){return this.b},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.b,this.b=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.b=!1},MWn.b=!1,vX(y9n,"EObjectContainmentEList/Unsettable",545),wAn(1140,545,R9n,YG),MWn.ii=function(n,t){var e,i;return e=BB(Cln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),a$t),iln(t),cL(i=e.c,88)?BB(i,26):d$t,n)),e},MWn.jj=function(n,t){return Zwn(this,BB(n,87),t)},MWn.kj=function(n,t){return Jwn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return _jn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Rvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EClassImpl/1",1140),wAn(1154,1153,Z8n),MWn.ui=function(n){var t,e,i,r,c,a,u;if(8!=(e=n.xi())){if(0==(i=apn(n)))switch(e){case 1:case 9:null!=(u=n.Bi())&&(!(t=P5(BB(u,473))).c&&(t.c=new Bo),snn(t.c,n.Ai())),null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 3:null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 5:if(null!=(a=n.zi()))for(c=BB(a,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 4:null!=(u=n.Bi())&&0==(1&(r=BB(u,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()));break;case 6:if(null!=(u=n.Bi()))for(c=BB(u,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()))}this.Hk(i)}},MWn.Hk=function(n){dRn(this,n)},MWn.b=63,vX(l6n,"ESuperAdapter",1154),wAn(1155,1154,Z8n,dp),MWn.Hk=function(n){AIn(this,n)},vX(l6n,"EClassImpl/10",1155),wAn(1144,696,R9n),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Cfn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.lk=function(n,t){throw Hp(new pv)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.mk=function(n,t){throw Hp(new pv)},MWn.Wj=function(n){return this},MWn.fj=function(){return 0!=this.i},MWn.Wb=function(n){throw Hp(new pv)},MWn.Xj=function(){throw Hp(new pv)},vX(y9n,"EcoreEList/UnmodifiableEList",1144),wAn(319,1144,R9n,NO),MWn.ni=function(){return!1},vX(y9n,"EcoreEList/UnmodifiableEList/FastCompare",319),wAn(1147,319,R9n,don),MWn.Xc=function(n){var t,e;if(cL(n,170)&&-1!=(t=BB(n,170).aj()))for(e=this.i;t<e;++t)if(GC(this.g[t])===GC(n))return t;return-1},vX(l6n,"EClassImpl/1EAllStructuralFeaturesList",1147),wAn(1141,497,h8n,Eo),MWn.ri=function(n){return x8(VAt,B9n,87,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EGenericSuperTypeEList",1141),wAn(623,497,h8n,To),MWn.ri=function(n){return x8(FAt,N9n,170,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EStructuralFeatureUniqueEList",623),wAn(741,497,h8n,Mo),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1ReferenceList",741),wAn(1142,497,h8n,gp),MWn.bi=function(n,t){tz(this,BB(t,34))},MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/2",1142),wAn(1143,497,h8n,So),MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/3",1143),wAn(1145,319,R9n,EH),MWn.Fc=function(n){return mB(this,BB(n,34))},MWn.Yh=function(n){JE(this,BB(n,34))},vX(l6n,"EClassImpl/4",1145),wAn(1146,319,R9n,TH),MWn.Fc=function(n){return yB(this,BB(n,18))},MWn.Yh=function(n){ZE(this,BB(n,18))},vX(l6n,"EClassImpl/5",1146),wAn(1148,497,h8n,Po),MWn.ri=function(n){return x8(QAt,x9n,59,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/6",1148),wAn(1149,497,h8n,Io),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/7",1149),wAn(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return uFn(this,this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.lk=function(n,t){return wmn(this,n,t)},MWn.mk=function(n,t){return Fpn(this,n,t)},MWn.mi=function(n,t){return oFn(this,n,t)},MWn.pi=function(n){return this.Oi(n)},MWn.Zh=function(){return new ax(this)},MWn.Gi=function(){return this.Ji()},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"DelegatingNotifyingInternalEListImpl",1997),wAn(742,1997,H9n),MWn.ai=function(){var n;return cL(n=itn(jY(this.b),this.aj()).Yj(),148)&&!cL(n,457)&&0==(1&n.Bj().i)},MWn.Hc=function(n){var t,e,i,r,c,a,u;if(this.Fk()){if((u=this.Vi())>4){if(!this.wj(n))return!1;if(this.rk()){if(a=(t=(e=BB(n,49)).Ug())==this.b&&(this.Dk()?e.Og(e.Vg(),BB(itn(jY(this.b),this.aj()).Yj(),26).Bj())==Ivn(BB(itn(jY(this.b),this.aj()),18)).n:-1-e.Vg()==this.aj()),this.Ek()&&!a&&!t&&e.Zg())for(i=0;i<u;++i)if(GC(Gz(this,this.Oi(i)))===GC(n))return!0;return a}if(this.Dk()&&!this.Ck()){if(GC(r=BB(n,56).ah(Ivn(BB(itn(jY(this.b),this.aj()),18))))===GC(this.b))return!0;if(null==r||!BB(r,56).kh())return!1}}if(c=this.Li(n),this.Ek()&&!c)for(i=0;i<u;++i)if(GC(e=Gz(this,this.Oi(i)))===GC(n))return!0;return c}return this.Li(n)},MWn.Zi=function(n,t,e,i,r){return new N7(this.b,n,this.aj(),t,e,i,r)},MWn.$i=function(n){ban(this.b,n)},MWn.Wj=function(n){return this},MWn._i=function(){return itn(jY(this.b),this.aj())},MWn.aj=function(){return Awn(jY(this.b),itn(jY(this.b),this.aj()))},MWn.Ai=function(){return this.b},MWn.Bk=function(){return!!itn(jY(this.b),this.aj()).Yj().Bj()},MWn.bj=function(){var n;return!(!cL(n=itn(jY(this.b),this.aj()),99)||0==(BB(n,18).Bb&h6n)&&!Ivn(BB(n,18)))},MWn.Ck=function(){var n,t,e;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!(t=Ivn(BB(n,18)))&&((e=t.t)>1||-1==e)},MWn.Dk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!Ivn(BB(n,18))},MWn.Ek=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&BQn)},MWn.Xc=function(n){var t,e,i;if((e=this.Qi(n))>=0)return e;if(this.Fk())for(t=0,i=this.Vi();t<i;++t)if(GC(Gz(this,this.Oi(t)))===GC(n))return t;return-1},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.b,Ivn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.gh(this.b,Awn(e.Tg(),Ivn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.gh(this.b,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.b,Ivn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.ih(this.b,Awn(e.Tg(),Ivn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.ih(this.b,-1-this.aj(),null,t)},MWn.rk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&h6n)},MWn.Fk=function(){return cL(itn(jY(this.b),this.aj()).Yj(),88)},MWn.wj=function(n){return itn(jY(this.b),this.aj()).Yj().wj(n)},MWn.ej=function(){return mA(this.b)},MWn.fj=function(){return!this.Ri()},MWn.hi=function(){return itn(jY(this.b),this.aj()).hi()},MWn.li=function(n,t){return eGn(this,n,t)},MWn.Wb=function(n){vqn(this),pX(this,BB(n,15))},MWn.Pc=function(){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)eGn(this,n,this.Oi(n));return this.Wi()},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.Vi()-1;t>=0;--t)eGn(this,t,this.Oi(t));return this.Xi(n)},MWn.Xj=function(){vqn(this)},MWn.oi=function(n,t){return B9(this,n,t)},vX(y9n,"DelegatingEcoreEList",742),wAn(1150,742,H9n,uR),MWn.Hi=function(n,t){lD(this,n,BB(t,26))},MWn.Ii=function(n){e$(this,BB(n,26))},MWn.Oi=function(n){var t;return cL(t=BB(Wtn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ti=function(n){var t;return cL(t=BB(fDn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ui=function(n,t){return dmn(this,n,BB(t,26))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new pp(this)},MWn.Ki=function(){sqn(a4(this.a))},MWn.Li=function(n){return Ufn(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!Ufn(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==a4(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GC(t.Pb())!==GC(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e,i;for(t=1,n=new AL(a4(this.a));n.e!=n.i.gc();)t=31*t+((e=cL(i=BB(kpn(n),87).c,88)?BB(i,26):(gWn(),d$t))?PN(e):0);return t},MWn.Qi=function(n){var t,e,i,r;for(i=0,e=new AL(a4(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GC(n)===GC(cL(r=t.c,88)?BB(r,26):(gWn(),d$t)))return i;++i}return-1},MWn.Ri=function(){return 0==a4(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return a4(this.a).i},MWn.Wi=function(){var n,t,e,i,r,c;for(c=a4(this.a).i,r=x8(Ant,HWn,1,c,5,1),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),r[e++]=cL(i=n.c,88)?BB(i,26):(gWn(),d$t);return r},MWn.Xi=function(n){var t,e,i,r;for(r=a4(this.a).i,n.length<r&&(n=Den(tsn(n).c,r)),n.length>r&&$X(n,r,null),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)$X(n,e++,cL(i=BB(kpn(t),87).c,88)?BB(i,26):(gWn(),d$t));return n},MWn.Yi=function(){var n,t,e,i,r;for((r=new Sk).a+="[",n=a4(this.a),t=0,i=a4(this.a).i;t<i;)cO(r,kN(cL(e=BB(Wtn(n,t),87).c,88)?BB(e,26):(gWn(),d$t))),++t<i&&(r.a+=FWn);return r.a+="]",r.a},MWn.$i=function(n){},MWn.aj=function(){return 10},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,88)},MWn.fj=function(){return Q0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EClassImpl/8",1150),wAn(1151,1964,LVn,pp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return a4(this.a.a).i},vX(l6n,"EClassImpl/8/1",1151),wAn(1152,497,h8n,Co),MWn.ri=function(n){return x8(HAt,HWn,138,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/9",1152),wAn(1139,53,eYn,Cm),vX(l6n,"EClassImpl/MyHashSet",1139),wAn(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},Ev),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),u$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.Fj=function(){var n,t;if(!this.c&&!(n=G$n(Utn(this))).dc())for(t=n.Kc();t.Ob();)N_n(this,SD(t.Pb()))&&Rln(this);return this.b},MWn.zj=function(){var n;if(!this.e){n=null;try{n=iyn(this)}catch(t){if(!cL(t=lun(t),102))throw Hp(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==$Nt?(hN(),ptt):n==ANt?iln(0):n==DNt?new Nb(0):n==xNt?0:n==LNt?jgn(0):n==RNt?rln(0):n==NNt?Pnn(0):fun(0)),this.e=!0}return this.d},MWn.Ej=function(){return 0!=(256&this.Bb)},MWn.Ik=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},MWn.xk=function(n){Urn(this,n),this.Ik(n)},MWn.yk=function(n){this.C=n,this.e=!1},MWn.Ib=function(){var n;return 0!=(64&this.Db)?Iwn(this):((n=new fN(Iwn(this))).a+=" (serializable: ",yE(n,0!=(256&this.Bb)),n.a+=")",n.a)},MWn.c=!1,MWn.d=null,MWn.e=!1,vX(l6n,"EDataTypeImpl",566),wAn(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Am),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return Qsn(this);case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),this.a}return U9(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),Ywn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!iyn(this);case 4:return!!Qsn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void CA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)));case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),sqn(this.a),!this.a&&(this.a=new eU(WAt,this,9,5)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t)},MWn.zh=function(){return gWn(),o$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),void sqn(this.a)}qfn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.Gh=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)vx(Wtn(this.a,n));Ifn((CPn(),Z$t),this).ne(),this.Bb|=1},MWn.zj=function(){return Qsn(this)},MWn.wj=function(n){return null!=n},MWn.Ik=function(n){},vX(l6n,"EEnumImpl",457),wAn(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},jv),MWn.ne=function(){return this.zb},MWn.Qg=function(n){return lkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return iln(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?BB(this.Cb,671):null}return U9(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?lkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 5:return T_n(this,null,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!BB(this.Cb,671))}return O3(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void $en(this,BB(t,19).a);case 3:return void gOn(this,BB(t,1940));case 4:return void Fin(this,SD(t))}Lbn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t)},MWn.zh=function(){return gWn(),s$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void $en(this,0);case 3:return void gOn(this,null);case 4:return void Fin(this,null)}qfn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},MWn.b=null,MWn.c=null,MWn.d=0,vX(l6n,"EEnumLiteralImpl",573);var L$t,N$t,x$t,D$t=bq(l6n,"EFactoryImpl/InternalEDateTimeFormat");wAn(489,1,{2015:1},vp),vX(l6n,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),wAn(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},Kp),MWn.Sg=function(n,t,e){var i;return e=T_n(this,n,t,e),this.e&&cL(n,170)&&(i=kLn(this,this.e))!=this.c&&(e=azn(this,i,e)),e},MWn._g=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new $L(VAt,this,1)),this.d;case 2:return t?lFn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?qvn(this):this.a}return U9(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return nfn(this,null,e);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),_pn(this.d,n,e);case 3:return Zhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),f$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),f$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return O3(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void jEn(this,BB(t,87));case 1:return!this.d&&(this.d=new $L(VAt,this,1)),sqn(this.d),!this.d&&(this.d=new $L(VAt,this,1)),void pX(this.d,BB(t,14));case 3:return void kEn(this,BB(t,87));case 4:return void DMn(this,BB(t,836));case 5:return void cen(this,BB(t,138))}Lbn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t)},MWn.zh=function(){return gWn(),f$t},MWn.Bh=function(n){switch(n){case 0:return void jEn(this,null);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),void sqn(this.d);case 3:return void kEn(this,null);case 4:return void DMn(this,null);case 5:return void cen(this,null)}qfn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.Ib=function(){var n;return(n=new lN(P$n(this))).a+=" (expression: ",bHn(this,n),n.a+=")",n.a},vX(l6n,"EGenericTypeImpl",241),wAn(1969,1964,q9n),MWn.Xh=function(n,t){nR(this,n,t)},MWn.lk=function(n,t){return nR(this,this.gc(),n),t},MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return this.$h()},MWn.Gi=function(){return new Pp(this)},MWn.$h=function(){return this._h(0)},MWn._h=function(n){return this.Gi().Zc(n)},MWn.mk=function(n,t){return ywn(this,n,!0),t},MWn.ii=function(n,t){var e;return e=tkn(this,t),this.Zc(n).Rb(e),e},MWn.ji=function(n,t){ywn(this,t,!0),this.Zc(n).Rb(t)},vX(y9n,"AbstractSequentialInternalEList",1969),wAn(486,1969,q9n,QN),MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn.Gi=function(){return new DO(this.a,this.b)},MWn.$h=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn._h=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(c=this.a.bh(n,!1),ZM(),BB(n,66).Oj()){for(i=0,r=(t=BB(c,153)).gc();i<r;++i)if(wX(t.il(i))&&null!=t.jl(i))return!1}else if(n.$j()){if(!BB(c,14).dc())return!1}else if(null!=c)return!1;return!0},MWn.Kc=function(){return Ern(this)},MWn.Zc=function(n){var t,e;if(null==this.b){if(0!=n)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Lk()?this.Kk():this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.Jk=function(){return new YN(this.a,this.b)},MWn.Kk=function(){return new Vx(this.a,this.b)},MWn.Lk=function(){return!0},MWn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(a=this.a.bh(n,!1),ZM(),BB(n,66).Oj())for(i=0,c=(t=BB(a,153)).gc();i<c;++i)wX(t.il(i))&&null!=t.jl(i)&&++r;else n.$j()?r+=BB(a,14).gc():null!=a&&++r;return r},MWn.Mk=function(){return!0},vX(y9n,"EContentsEList",486),wAn(1156,486,q9n,Wx),MWn.Jk=function(){return new Qx(this.a,this.b)},MWn.Kk=function(){return new Yx(this.a,this.b)},MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1",1156),wAn(279,1,G9n,YN),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Nk=function(n){if(0!=this.g||this.e)throw Hp(new Fy("Iterator already in use or already filtered"));this.e=n},MWn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?kPn(this,this.p):pOn(this)))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?kPn(this,this.p):pOn(this))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=2,!0;return this.k=null,this.p=null,this.f=!1,this.g=1,!1}},MWn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?jPn(this,this.p):wIn(this)))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?jPn(this,this.p):wIn(this))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},MWn.Pb=function(){return Man(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Lk=function(){return!1},MWn.Wb=function(n){throw Hp(new pv)},MWn.Mk=function(){return!0},MWn.a=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.n=0,MWn.o=0,vX(y9n,"EContentsEList/FeatureIteratorImpl",279),wAn(697,279,G9n,Vx),MWn.Lk=function(){return!0},vX(y9n,"EContentsEList/ResolvingFeatureIteratorImpl",697),wAn(1157,697,G9n,Yx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/1",1157),wAn(1158,279,G9n,Qx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/2",1158),wAn(36,143,t9n,f4,l4,nU,k9,N7,t6,Hen,S0,qen,P0,J5,I0,Uen,C0,Z5,O0,Gen,A0,tU,j9,GQ,zen,$0,n6,L0),MWn._i=function(){return h9(this)},MWn.gj=function(){var n;return(n=h9(this))?n.zj():null},MWn.yi=function(n){return-1==this.b&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,n)},MWn.Ai=function(){return this.c},MWn.hj=function(){var n;return!!(n=h9(this))&&n.Kj()},MWn.b=-1,vX(l6n,"ENotificationImpl",36),wAn(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},$m),MWn.Qg=function(n){return Pkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,26):null;case 11:return!this.d&&(this.d=new NL(O$t,this,11)),this.d;case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oR(this,this)),this.a;case 14:return H7(this)}return U9(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Pkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),Ywn(this.c,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e);case 11:return!this.d&&(this.d=new NL(O$t,this,11)),_pn(this.d,n,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),_pn(this.c,n,e);case 14:return _pn(H7(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,26));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==H7(this.a.a).i||this.b&&Kvn(this.b));case 14:return!!this.b&&Kvn(this.b)}return O3(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),sqn(this.d),!this.d&&(this.d=new NL(O$t,this,11)),void pX(this.d,BB(t,14));case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),sqn(this.c),!this.c&&(this.c=new eU(YAt,this,12,10)),void pX(this.c,BB(t,14));case 13:return!this.a&&(this.a=new oR(this,this)),vqn(this.a),!this.a&&(this.a=new oR(this,this)),void pX(this.a,BB(t,14));case 14:return sqn(H7(this)),void pX(H7(this),BB(t,14))}Lbn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t)},MWn.zh=function(){return gWn(),g$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),void sqn(this.d);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),void sqn(this.c);case 13:return void(this.a&&vqn(this.a));case 14:return void(this.b&&sqn(this.b))}qfn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.Gh=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)vx(Wtn(this.c,n));Ckn(this),this.Bb|=1},vX(l6n,"EOperationImpl",399),wAn(505,742,H9n,oR),MWn.Hi=function(n,t){fD(this,n,BB(t,138))},MWn.Ii=function(n){i$(this,BB(n,138))},MWn.Oi=function(n){return BB(Wtn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ti=function(n){return BB(fDn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ui=function(n,t){return bgn(this,n,BB(t,138))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new mp(this)},MWn.Ki=function(){sqn(H7(this.a))},MWn.Li=function(n){return oln(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!oln(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==H7(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GC(t.Pb())!==GC(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e;for(t=1,n=new AL(H7(this.a));n.e!=n.i.gc();)t=31*t+((e=BB(kpn(n),87).c||(gWn(),l$t))?nsn(e):0);return t},MWn.Qi=function(n){var t,e,i;for(i=0,e=new AL(H7(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GC(n)===GC(t.c||(gWn(),l$t)))return i;++i}return-1},MWn.Ri=function(){return 0==H7(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return H7(this.a).i},MWn.Wi=function(){var n,t,e,i,r;for(r=H7(this.a).i,i=x8(Ant,HWn,1,r,5,1),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),i[e++]=n.c||(gWn(),l$t);return i},MWn.Xi=function(n){var t,e,i;for(i=H7(this.a).i,n.length<i&&(n=Den(tsn(n).c,i)),n.length>i&&$X(n,i,null),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)$X(n,e++,BB(kpn(t),87).c||(gWn(),l$t));return n},MWn.Yi=function(){var n,t,e,i;for((i=new Sk).a+="[",n=H7(this.a),t=0,e=H7(this.a).i;t<e;)cO(i,kN(BB(Wtn(n,t),87).c||(gWn(),l$t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a},MWn.$i=function(n){},MWn.aj=function(){return 13},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,138)},MWn.fj=function(){return V0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EOperationImpl/1",505),wAn(1340,1964,LVn,mp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return H7(this.a.a).i},vX(l6n,"EOperationImpl/1/1",1340),wAn(1341,545,R9n,JG),MWn.ii=function(n,t){var e;return e=BB(Cln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),p$t),iln(t),e.c||l$t,n)),e},MWn.jj=function(n,t){return Mfn(this,BB(n,87),t)},MWn.kj=function(n,t){return Sfn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return Wgn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Kvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EOperationImpl/2",1341),wAn(498,1,{1938:1,498:1},OC),vX(l6n,"EPackageImpl/1",498),wAn(16,85,R9n,eU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectContainmentWithInverseEList",16),wAn(353,16,R9n,eK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Resolving",353),wAn(298,353,R9n,Jz),MWn.ci=function(){this.a.tb=null},vX(l6n,"EPackageImpl/2",298),wAn(1228,1,{},Oo),vX(l6n,"EPackageImpl/3",1228),wAn(718,43,tYn,Nm),MWn._b=function(n){return XC(n)?eY(this,n):!!AY(this.f,n)},vX(l6n,"EPackageRegistryImpl",718),wAn(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Lm),MWn.Qg=function(n){return Ikn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,59):null}return U9(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Ikn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,59))}return O3(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n))},MWn.zh=function(){return gWn(),m$t},vX(l6n,"EParameterImpl",509),wAn(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},pD),MWn._g=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(r=this.t)>1||-1==r;case 7:return hN(),this.s>=1;case 8:return t?Ckn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return hN(),!(!(i=Ivn(this))||0==(i.Bb&h6n));case 20:return hN(),0!=(this.Bb&BQn);case 21:return t?Ivn(this):this.b;case 22:return t?Con(this):K5(this);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),this.a}return U9(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t,e)},MWn.lh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!(t=Ivn(this))&&0!=(t.Bb&h6n);case 20:return 0==(this.Bb&BQn);case 21:return!!this.b;case 22:return!!K5(this);case 23:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Chn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _C(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void YZ(this,qy(TD(t)));case 20:return void Uln(this,qy(TD(t)));case 21:return void rrn(this,BB(t,18));case 23:return!this.a&&(this.a=new RL(BAt,this,23)),sqn(this.a),!this.a&&(this.a=new RL(BAt,this,23)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t)},MWn.zh=function(){return gWn(),y$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Chn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return zln(this,!1),void(cL(this.Cb,88)&&AIn(P5(BB(this.Cb,88)),2));case 20:return void Uln(this,!0);case 21:return void rrn(this,null);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),void sqn(this.a)}qfn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.Gh=function(){Con(this),kV(B7((CPn(),Z$t),this)),Ckn(this),this.Bb|=1},MWn.Lj=function(){return Ivn(this)},MWn.qk=function(){var n;return!!(n=Ivn(this))&&0!=(n.Bb&h6n)},MWn.rk=function(){return 0!=(this.Bb&h6n)},MWn.sk=function(){return 0!=(this.Bb&BQn)},MWn.nk=function(n,t){return this.c=null,Pfn(this,n,t)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (containment: ",yE(n,0!=(this.Bb&h6n)),n.a+=", resolveProxies: ",yE(n,0!=(this.Bb&BQn)),n.a+=")",n.a)},vX(l6n,"EReferenceImpl",99),wAn(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},Ao),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){vq(this,SD(n))},MWn.ed=function(n){return $H(this,SD(n))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return U9(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return O3(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void mq(this,SD(t));case 1:return void Kin(this,SD(t))}Lbn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t)},MWn.zh=function(){return gWn(),k$t},MWn.Bh=function(n){switch(n){case 0:return void Rin(this,null);case 1:return void Kin(this,null)}qfn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:vvn(n)),this.a},MWn.Th=function(n){this.a=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (key: ",cO(n,this.b),n.a+=", value: ",cO(n,this.c),n.a+=")",n.a)},MWn.a=-1,MWn.b=null,MWn.c=null;var R$t,K$t,_$t,F$t,B$t,H$t,q$t,G$t,z$t,U$t,X$t=vX(l6n,"EStringToStringMapEntryImpl",548),W$t=bq(y9n,"FeatureMap/Entry/Internal");wAn(565,1,z9n),MWn.Ok=function(n){return this.Pk(BB(n,49))},MWn.Pk=function(n){return this.Ok(n)},MWn.Fb=function(n){var t,e;return this===n||!!cL(n,72)&&(t=BB(n,72)).ak()==this.c&&(null==(e=this.dd())?null==t.dd():Nfn(e,t.dd()))},MWn.ak=function(){return this.c},MWn.Hb=function(){var n;return n=this.dd(),nsn(this.c)^(null==n?0:nsn(n))},MWn.Ib=function(){var n,t;return t=Utn((n=this.c).Hj()).Ph(),n.ne(),(null!=t&&0!=t.length?t+":"+n.ne():n.ne())+"="+this.dd()},vX(l6n,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),wAn(776,565,z9n,rR),MWn.Pk=function(n){return new rR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return Scn(this,n,this.a,t,e)},MWn.Rk=function(n,t,e){return Pcn(this,n,this.a,t,e)},vX(l6n,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),wAn(1314,1,{},AC),MWn.Pj=function(n,t,e,i,r){return BB(S9(n,this.b),215).nl(this.a).Wj(i)},MWn.Qj=function(n,t,e,i,r){return BB(S9(n,this.b),215).el(this.a,i,r)},MWn.Rj=function(n,t,e,i,r){return BB(S9(n,this.b),215).fl(this.a,i,r)},MWn.Sj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a).fj()},MWn.Tj=function(n,t,e,i){BB(S9(n,this.b),215).nl(this.a).Wb(i)},MWn.Uj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a)},MWn.Vj=function(n,t,e){BB(S9(n,this.b),215).nl(this.a).Xj()},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),wAn(89,1,{},PB,lQ,RY,w4),MWn.Pj=function(n,t,e,i,r){var c;if(null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),!r)switch(this.e){case 50:case 41:return BB(c,589).sj();case 40:return BB(c,215).kl()}return c},MWn.Qj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),BB(c,69).lk(i,r)},MWn.Rj=function(n,t,e,i,r){var c;return null!=(c=t.Ch(e))&&(r=BB(c,69).mk(i,r)),r},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&BB(i,76).fj()},MWn.Tj=function(n,t,e,i){var r;!(r=BB(t.Ch(e),76))&&t.Dh(e,r=iWn(this,n)),r.Wb(i)},MWn.Uj=function(n,t,e){var i;return null==(i=t.Ch(e))&&t.Dh(e,i=iWn(this,n)),cL(i,76)?BB(i,76):new Ep(BB(t.Ch(e),15))},MWn.Vj=function(n,t,e){var i;!(i=BB(t.Ch(e),76))&&t.Dh(e,i=iWn(this,n)),i.Xj()},MWn.b=0,MWn.e=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),wAn(504,1,{}),MWn.Qj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Rj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Uj=function(n,t,e){return new bQ(this,n,t,e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),wAn(1331,1,k9n,bQ),MWn.Wj=function(n){return this.a.Pj(this.c,this.d,this.b,n,!0)},MWn.fj=function(){return this.a.Sj(this.c,this.d,this.b)},MWn.Wb=function(n){this.a.Tj(this.c,this.d,this.b,n)},MWn.Xj=function(){this.a.Vj(this.c,this.d,this.b)},MWn.b=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),wAn(769,504,{},mJ),MWn.Pj=function(n,t,e,i,r){return gKn(n,n.eh(),n.Vg())==this.b?this.sk()&&i?cAn(n):n.eh():null},MWn.Qj=function(n,t,e,i,r){var c,a;return n.eh()&&(r=(c=n.Vg())>=0?n.Qg(r):n.eh().ih(n,-1-c,null,r)),a=Awn(n.Tg(),this.e),n.Sg(i,a,r)},MWn.Rj=function(n,t,e,i,r){var c;return c=Awn(n.Tg(),this.e),n.Sg(null,c,r)},MWn.Sj=function(n,t,e){var i;return i=Awn(n.Tg(),this.e),!!n.eh()&&n.Vg()==i},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));if(r=n.eh(),a=Awn(n.Tg(),this.e),GC(i)!==GC(r)||n.Vg()!=a&&null!=i){if(vkn(n,BB(i,56)))throw Hp(new _y(w6n+n.Ib()));o=null,r&&(o=(c=n.Vg())>=0?n.Qg(o):n.eh().ih(n,-1-c,null,o)),(u=BB(i,49))&&(o=u.gh(n,Awn(u.Tg(),this.b),null,o)),(o=n.Sg(u,a,o))&&o.Fi()}else n.Lg()&&n.Mg()&&ban(n,new nU(n,1,a,i,i))},MWn.Vj=function(n,t,e){var i,r,c;n.eh()?(c=(i=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-i,null,null),r=Awn(n.Tg(),this.e),(c=n.Sg(null,r,c))&&c.Fi()):n.Lg()&&n.Mg()&&ban(n,new tU(n,1,this.e,null,null))},MWn.sk=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),wAn(1315,769,{},IB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),wAn(563,504,{}),MWn.Pj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))?this.b:GC(c)===GC(R$t)?null:c},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&(GC(i)===GC(R$t)||!Nfn(i,this.b))},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=null==(c=t.Ch(e))?this.b:GC(c)===GC(R$t)?null:c,null==i?null!=this.c?(t.Dh(e,null),i=this.b):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Tk(n,1,this.e,r,i))):null==i?null!=this.c?t.Dh(e,null):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=null==(r=t.Ch(e))?this.b:GC(r)===GC(R$t)?null:r,t.Eh(e),ban(n,this.d.Tk(n,1,this.e,i,this.b))):t.Eh(e)},MWn.Sk=function(n){throw Hp(new bv)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),wAn(W9n,1,{},$o),MWn.Tk=function(n,t,e,i,r){return new tU(n,t,e,i,r)},MWn.Uk=function(n,t,e,i,r,c){return new GQ(n,t,e,i,r,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",W9n),wAn(1332,W9n,{},Lo),MWn.Tk=function(n,t,e,i,r){return new n6(n,t,e,qy(TD(i)),qy(TD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new L0(n,t,e,qy(TD(i)),qy(TD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),wAn(1333,W9n,{},No),MWn.Tk=function(n,t,e,i,r){return new Hen(n,t,e,BB(i,217).a,BB(r,217).a)},MWn.Uk=function(n,t,e,i,r,c){return new S0(n,t,e,BB(i,217).a,BB(r,217).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),wAn(1334,W9n,{},xo),MWn.Tk=function(n,t,e,i,r){return new qen(n,t,e,BB(i,172).a,BB(r,172).a)},MWn.Uk=function(n,t,e,i,r,c){return new P0(n,t,e,BB(i,172).a,BB(r,172).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),wAn(1335,W9n,{},Do),MWn.Tk=function(n,t,e,i,r){return new J5(n,t,e,Gy(MD(i)),Gy(MD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new I0(n,t,e,Gy(MD(i)),Gy(MD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),wAn(1336,W9n,{},Ro),MWn.Tk=function(n,t,e,i,r){return new Uen(n,t,e,BB(i,155).a,BB(r,155).a)},MWn.Uk=function(n,t,e,i,r,c){return new C0(n,t,e,BB(i,155).a,BB(r,155).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),wAn(1337,W9n,{},Ko),MWn.Tk=function(n,t,e,i,r){return new Z5(n,t,e,BB(i,19).a,BB(r,19).a)},MWn.Uk=function(n,t,e,i,r,c){return new O0(n,t,e,BB(i,19).a,BB(r,19).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),wAn(1338,W9n,{},_o),MWn.Tk=function(n,t,e,i,r){return new Gen(n,t,e,BB(i,162).a,BB(r,162).a)},MWn.Uk=function(n,t,e,i,r,c){return new A0(n,t,e,BB(i,162).a,BB(r,162).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),wAn(1339,W9n,{},Fo),MWn.Tk=function(n,t,e,i,r){return new zen(n,t,e,BB(i,184).a,BB(r,184).a)},MWn.Uk=function(n,t,e,i,r,c){return new $0(n,t,e,BB(i,184).a,BB(r,184).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),wAn(1317,563,{},wQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),wAn(1318,563,{},ZG),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),wAn(770,563,{}),MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=!0,null==(c=t.Ch(e))?(r=!1,c=this.b):GC(c)===GC(R$t)&&(c=null),null==i?null!=this.c?(t.Dh(e,null),i=this.b):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Uk(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.Dh(e,null):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=!0,null==(r=t.Ch(e))?(i=!1,r=this.b):GC(r)===GC(R$t)&&(r=null),t.Eh(e),ban(n,this.d.Uk(n,2,this.e,r,this.b,i))):t.Eh(e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),wAn(1319,770,{},dQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),wAn(1320,770,{},nz),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),wAn(398,504,{},cG),MWn.Pj=function(n,t,e,i,r){var c,a,u,o,s;if(s=t.Ch(e),this.Kj()&&GC(s)===GC(R$t))return null;if(this.sk()&&i&&null!=s){if((u=BB(s,49)).kh()&&u!=(o=tfn(n,u))){if(!SFn(this.a,o))throw Hp(new Ky(U9n+tsn(o)+X9n+this.a+"'"));t.Dh(e,s=o),this.rk()&&(c=BB(o,49),a=u.ih(n,this.b?Awn(u.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,null),!c.eh()&&(a=c.gh(n,this.b?Awn(c.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,a)),a&&a.Fi()),n.Lg()&&n.Mg()&&ban(n,new tU(n,9,this.e,u,o))}return s}return s},MWn.Qj=function(n,t,e,i,r){var c,a;return GC(a=t.Ch(e))===GC(R$t)&&(a=null),t.Dh(e,i),this.bj()?GC(a)!==GC(i)&&null!=a&&(r=(c=BB(a,49)).ih(n,Awn(c.Tg(),this.b),null,r)):this.rk()&&null!=a&&(r=BB(a,49).ih(n,-1-Awn(n.Tg(),this.e),null,r)),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),r.Ei(new tU(n,1,this.e,a,i))),r},MWn.Rj=function(n,t,e,i,r){var c;return GC(c=t.Ch(e))===GC(R$t)&&(c=null),t.Eh(e),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),this.Kj()?r.Ei(new tU(n,2,this.e,c,null)):r.Ei(new tU(n,1,this.e,c,null))),r},MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));u=null!=(o=t.Ch(e)),this.Kj()&&GC(o)===GC(R$t)&&(o=null),a=null,this.bj()?GC(o)!==GC(i)&&(null!=o&&(a=(r=BB(o,49)).ih(n,Awn(r.Tg(),this.b),null,a)),null!=i&&(a=(r=BB(i,49)).gh(n,Awn(r.Tg(),this.b),null,a))):this.rk()&&GC(o)!==GC(i)&&(null!=o&&(a=BB(o,49).ih(n,-1-Awn(n.Tg(),this.e),null,a)),null!=i&&(a=BB(i,49).gh(n,-1-Awn(n.Tg(),this.e),null,a))),null==i&&this.Kj()?t.Dh(e,R$t):t.Dh(e,i),n.Lg()&&n.Mg()?(c=new GQ(n,1,this.e,o,i,this.Kj()&&!u),a?(a.Ei(c),a.Fi()):ban(n,c)):a&&a.Fi()},MWn.Vj=function(n,t,e){var i,r,c,a,u;a=null!=(u=t.Ch(e)),this.Kj()&&GC(u)===GC(R$t)&&(u=null),c=null,null!=u&&(this.bj()?c=(i=BB(u,49)).ih(n,Awn(i.Tg(),this.b),null,c):this.rk()&&(c=BB(u,49).ih(n,-1-Awn(n.Tg(),this.e),null,c))),t.Eh(e),n.Lg()&&n.Mg()?(r=new GQ(n,this.Kj()?2:1,this.e,u,null,a),c?(c.Ei(r),c.Fi()):ban(n,r)):c&&c.Fi()},MWn.bj=function(){return!1},MWn.rk=function(){return!1},MWn.sk=function(){return!1},MWn.Kj=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),wAn(564,398,{},Zx),MWn.rk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),wAn(1323,564,{},nD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),wAn(772,564,{},tD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),wAn(1325,772,{},eD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),wAn(640,564,{},CB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),wAn(1324,640,{},$B),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),wAn(773,640,{},LB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),wAn(1326,773,{},NB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),wAn(641,398,{},iD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),wAn(1327,641,{},rD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),wAn(774,641,{},OB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),wAn(1328,774,{},xB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),wAn(1321,398,{},cD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),wAn(771,398,{},AB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),wAn(1322,771,{},DB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),wAn(775,565,z9n,aW),MWn.Pk=function(n){return new aW(this.a,this.c,n)},MWn.dd=function(){return this.b},MWn.Qk=function(n,t,e){return D8(this,n,this.b,e)},MWn.Rk=function(n,t,e){return R8(this,n,this.b,e)},vX(l6n,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),wAn(1329,1,k9n,Ep),MWn.Wj=function(n){return this.a},MWn.fj=function(){return cL(this.a,95)?BB(this.a,95).fj():!this.a.dc()},MWn.Wb=function(n){this.a.$b(),this.a.Gc(BB(n,15))},MWn.Xj=function(){cL(this.a,95)?BB(this.a,95).Xj():this.a.$b()},vX(l6n,"EStructuralFeatureImpl/SettingMany",1329),wAn(1330,565,z9n,g4),MWn.Ok=function(n){return new cR((Uqn(),FLt),this.b.Ih(this.a,n))},MWn.dd=function(){return null},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),wAn(642,565,z9n,cR),MWn.Ok=function(n){return new cR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),wAn(391,497,h8n,Bo),MWn.ri=function(n){return x8(qAt,HWn,26,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"ESuperAdapter/1",391),wAn(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},Ho),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new aG(this,VAt,this)),this.a}return U9(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),T$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),T$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return!this.a&&(this.a=new aG(this,VAt,this)),sqn(this.a),!this.a&&(this.a=new aG(this,VAt,this)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t)},MWn.zh=function(){return gWn(),T$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),void sqn(this.a)}qfn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},vX(l6n,"ETypeParameterImpl",444),wAn(445,85,R9n,aG),MWn.cj=function(n,t){return LTn(this,BB(n,87),t)},MWn.dj=function(n,t){return NTn(this,BB(n,87),t)},vX(l6n,"ETypeParameterImpl/1",445),wAn(634,43,tYn,xm),MWn.ec=function(){return new Tp(this)},vX(l6n,"ETypeParameterImpl/2",634),wAn(556,nVn,tVn,Tp),MWn.Fc=function(n){return YR(this,BB(n,87))},MWn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=BB(e.Pb(),87),null==VW(this.a,t,"")&&(i=!0);return i},MWn.$b=function(){$U(this.a)},MWn.Hc=function(n){return hU(this.a,n)},MWn.Kc=function(){return new Mp(new usn(new Pb(this.a).a))},MWn.Mc=function(n){return _6(this,n)},MWn.gc=function(){return NT(this.a)},vX(l6n,"ETypeParameterImpl/2/1",556),wAn(557,1,QWn,Mp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(ten(this.a).cd(),87)},MWn.Ob=function(){return this.a.b},MWn.Qb=function(){o9(this.a)},vX(l6n,"ETypeParameterImpl/2/1/1",557),wAn(1276,43,tYn,Dm),MWn._b=function(n){return XC(n)?eY(this,n):!!AY(this.f,n)},MWn.xc=function(n){var t;return cL(t=XC(n)?SJ(this,n):qC(AY(this.f,n)),837)?(t=BB(t,837)._j(),VW(this,BB(n,235),t),t):null!=t?t:null==n?(JM(),rLt):null},vX(l6n,"EValidatorRegistryImpl",1276),wAn(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},qo),MWn.Ih=function(n,t){switch(n.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:Bbn(t);case 25:return Xtn(t);case 27:return X9(t);case 28:return W9(t);case 29:return null==t?null:H$(COt[0],BB(t,199));case 41:return null==t?"":nE(BB(t,290));case 42:return Bbn(t);case 50:return SD(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Om;case 1:return new jo;case 2:return new _f;case 4:return new Ev;case 5:return new Am;case 6:return new jv;case 7:return new Rf;case 10:return new yo;case 11:return new $m;case 12:return new vY;case 13:return new Lm;case 14:return new pD;case 17:return new Ao;case 18:return new Kp;case 19:return new Ho;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 20:return null==t?null:new wE(t);case 21:return null==t?null:new $A(t);case 23:case 22:return null==t?null:Zdn(t);case 26:case 24:return null==t?null:Pnn(l_n(t,-128,127)<<24>>24);case 25:return d$n(t);case 27:return Syn(t);case 28:return Pyn(t);case 29:return gMn(t);case 32:case 31:return null==t?null:bSn(t);case 38:case 37:return null==t?null:new Dv(t);case 40:case 39:return null==t?null:iln(l_n(t,_Vn,DWn));case 41:case 42:return null;case 44:case 43:return null==t?null:jgn(rUn(t));case 49:case 48:return null==t?null:rln(l_n(t,Q9n,32767)<<16>>16);case 50:return t;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(l6n,"EcoreFactoryImpl",1313),wAn(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},UW),MWn.gb=!1,MWn.hb=!1;var V$t,Q$t=!1;vX(l6n,"EcorePackageImpl",547),wAn(1184,1,{837:1},Go),MWn._j=function(){return sN(),cLt},vX(l6n,"EcorePackageImpl/1",1184),wAn(1193,1,s7n,zo),MWn.wj=function(n){return cL(n,147)},MWn.xj=function(n){return x8(BOt,HWn,147,n,0,1)},vX(l6n,"EcorePackageImpl/10",1193),wAn(1194,1,s7n,Uo),MWn.wj=function(n){return cL(n,191)},MWn.xj=function(n){return x8(qOt,HWn,191,n,0,1)},vX(l6n,"EcorePackageImpl/11",1194),wAn(1195,1,s7n,Xo),MWn.wj=function(n){return cL(n,56)},MWn.xj=function(n){return x8(LOt,HWn,56,n,0,1)},vX(l6n,"EcorePackageImpl/12",1195),wAn(1196,1,s7n,Wo),MWn.wj=function(n){return cL(n,399)},MWn.xj=function(n){return x8(QAt,x9n,59,n,0,1)},vX(l6n,"EcorePackageImpl/13",1196),wAn(1197,1,s7n,Vo),MWn.wj=function(n){return cL(n,235)},MWn.xj=function(n){return x8(GOt,HWn,235,n,0,1)},vX(l6n,"EcorePackageImpl/14",1197),wAn(1198,1,s7n,Qo),MWn.wj=function(n){return cL(n,509)},MWn.xj=function(n){return x8(YAt,HWn,2017,n,0,1)},vX(l6n,"EcorePackageImpl/15",1198),wAn(1199,1,s7n,Yo),MWn.wj=function(n){return cL(n,99)},MWn.xj=function(n){return x8(JAt,N9n,18,n,0,1)},vX(l6n,"EcorePackageImpl/16",1199),wAn(1200,1,s7n,Jo),MWn.wj=function(n){return cL(n,170)},MWn.xj=function(n){return x8(FAt,N9n,170,n,0,1)},vX(l6n,"EcorePackageImpl/17",1200),wAn(1201,1,s7n,Zo),MWn.wj=function(n){return cL(n,472)},MWn.xj=function(n){return x8(_At,HWn,472,n,0,1)},vX(l6n,"EcorePackageImpl/18",1201),wAn(1202,1,s7n,ns),MWn.wj=function(n){return cL(n,548)},MWn.xj=function(n){return x8(X$t,a9n,548,n,0,1)},vX(l6n,"EcorePackageImpl/19",1202),wAn(1185,1,s7n,ts),MWn.wj=function(n){return cL(n,322)},MWn.xj=function(n){return x8(BAt,N9n,34,n,0,1)},vX(l6n,"EcorePackageImpl/2",1185),wAn(1203,1,s7n,es),MWn.wj=function(n){return cL(n,241)},MWn.xj=function(n){return x8(VAt,B9n,87,n,0,1)},vX(l6n,"EcorePackageImpl/20",1203),wAn(1204,1,s7n,is),MWn.wj=function(n){return cL(n,444)},MWn.xj=function(n){return x8(O$t,HWn,836,n,0,1)},vX(l6n,"EcorePackageImpl/21",1204),wAn(1205,1,s7n,rs),MWn.wj=function(n){return zC(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(l6n,"EcorePackageImpl/22",1205),wAn(1206,1,s7n,cs),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(l6n,"EcorePackageImpl/23",1206),wAn(1207,1,s7n,as),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(l6n,"EcorePackageImpl/24",1207),wAn(1208,1,s7n,us),MWn.wj=function(n){return cL(n,172)},MWn.xj=function(n){return x8(Stt,sVn,172,n,0,1)},vX(l6n,"EcorePackageImpl/25",1208),wAn(1209,1,s7n,os),MWn.wj=function(n){return cL(n,199)},MWn.xj=function(n){return x8(mtt,sVn,199,n,0,1)},vX(l6n,"EcorePackageImpl/26",1209),wAn(1210,1,s7n,ss),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(_Nt,HWn,2110,n,0,1)},vX(l6n,"EcorePackageImpl/27",1210),wAn(1211,1,s7n,hs),MWn.wj=function(n){return UC(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(l6n,"EcorePackageImpl/28",1211),wAn(1212,1,s7n,fs),MWn.wj=function(n){return cL(n,58)},MWn.xj=function(n){return x8(uAt,nZn,58,n,0,1)},vX(l6n,"EcorePackageImpl/29",1212),wAn(1186,1,s7n,ls),MWn.wj=function(n){return cL(n,510)},MWn.xj=function(n){return x8(KAt,{3:1,4:1,5:1,1934:1},590,n,0,1)},vX(l6n,"EcorePackageImpl/3",1186),wAn(1213,1,s7n,bs),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(yAt,HWn,1940,n,0,1)},vX(l6n,"EcorePackageImpl/30",1213),wAn(1214,1,s7n,ws),MWn.wj=function(n){return cL(n,153)},MWn.xj=function(n){return x8(oLt,nZn,153,n,0,1)},vX(l6n,"EcorePackageImpl/31",1214),wAn(1215,1,s7n,ds),MWn.wj=function(n){return cL(n,72)},MWn.xj=function(n){return x8($$t,h7n,72,n,0,1)},vX(l6n,"EcorePackageImpl/32",1215),wAn(1216,1,s7n,gs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Itt,sVn,155,n,0,1)},vX(l6n,"EcorePackageImpl/33",1216),wAn(1217,1,s7n,ps),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(l6n,"EcorePackageImpl/34",1217),wAn(1218,1,s7n,vs),MWn.wj=function(n){return cL(n,290)},MWn.xj=function(n){return x8($nt,HWn,290,n,0,1)},vX(l6n,"EcorePackageImpl/35",1218),wAn(1219,1,s7n,ms),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(l6n,"EcorePackageImpl/36",1219),wAn(1220,1,s7n,ys),MWn.wj=function(n){return cL(n,83)},MWn.xj=function(n){return x8(Nnt,HWn,83,n,0,1)},vX(l6n,"EcorePackageImpl/37",1220),wAn(1221,1,s7n,ks),MWn.wj=function(n){return cL(n,591)},MWn.xj=function(n){return x8(iLt,HWn,591,n,0,1)},vX(l6n,"EcorePackageImpl/38",1221),wAn(1222,1,s7n,js),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(FNt,HWn,2111,n,0,1)},vX(l6n,"EcorePackageImpl/39",1222),wAn(1187,1,s7n,Es),MWn.wj=function(n){return cL(n,88)},MWn.xj=function(n){return x8(qAt,HWn,26,n,0,1)},vX(l6n,"EcorePackageImpl/4",1187),wAn(1223,1,s7n,Ts),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(l6n,"EcorePackageImpl/40",1223),wAn(1224,1,s7n,Ms),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(l6n,"EcorePackageImpl/41",1224),wAn(1225,1,s7n,Ss),MWn.wj=function(n){return cL(n,588)},MWn.xj=function(n){return x8(sAt,HWn,588,n,0,1)},vX(l6n,"EcorePackageImpl/42",1225),wAn(1226,1,s7n,Ps),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(BNt,sVn,2112,n,0,1)},vX(l6n,"EcorePackageImpl/43",1226),wAn(1227,1,s7n,Is),MWn.wj=function(n){return cL(n,42)},MWn.xj=function(n){return x8(Hnt,kVn,42,n,0,1)},vX(l6n,"EcorePackageImpl/44",1227),wAn(1188,1,s7n,Cs),MWn.wj=function(n){return cL(n,138)},MWn.xj=function(n){return x8(HAt,HWn,138,n,0,1)},vX(l6n,"EcorePackageImpl/5",1188),wAn(1189,1,s7n,Os),MWn.wj=function(n){return cL(n,148)},MWn.xj=function(n){return x8(GAt,HWn,148,n,0,1)},vX(l6n,"EcorePackageImpl/6",1189),wAn(1190,1,s7n,As),MWn.wj=function(n){return cL(n,457)},MWn.xj=function(n){return x8(XAt,HWn,671,n,0,1)},vX(l6n,"EcorePackageImpl/7",1190),wAn(1191,1,s7n,$s),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(WAt,HWn,678,n,0,1)},vX(l6n,"EcorePackageImpl/8",1191),wAn(1192,1,s7n,Ls),MWn.wj=function(n){return cL(n,471)},MWn.xj=function(n){return x8(HOt,HWn,471,n,0,1)},vX(l6n,"EcorePackageImpl/9",1192),wAn(1025,1982,r9n,xy),MWn.bi=function(n,t){Afn(this,BB(t,415))},MWn.fi=function(n,t){eIn(this,n,BB(t,415))},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),wAn(1026,143,t9n,uW),MWn.Ai=function(){return this.a.a},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),wAn(1053,1052,{},o$),vX("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var Y$t,J$t,Z$t,nLt,tLt,eLt,iLt=bq(f7n,"Resource");wAn(781,1378,l7n),MWn.Yk=function(n){},MWn.Zk=function(n){},MWn.Vk=function(){return!this.a&&(this.a=new Sp(this)),this.a},MWn.Wk=function(n){var t,e,i,r,c;if((i=n.length)>0){if(b1(0,n.length),47==n.charCodeAt(0)){for(c=new J6(4),r=1,t=1;t<i;++t)b1(t,n.length),47==n.charCodeAt(t)&&(WB(c,r==t?"":n.substr(r,t-r)),r=t+1);return WB(c,n.substr(r)),ojn(this,c)}b1(i-1,n.length),63==n.charCodeAt(i-1)&&(e=MK(n,YTn(63),i-2))>0&&(n=n.substr(0,e))}return jCn(this,n)},MWn.Xk=function(){return this.c},MWn.Ib=function(){return nE(this.gm)+"@"+(nsn(this)>>>0).toString(16)+" uri='"+this.d+"'"},MWn.b=!1,vX(b7n,"ResourceImpl",781),wAn(1379,781,l7n,Ip),vX(b7n,"BinaryResourceImpl",1379),wAn(1169,694,f8n),MWn.si=function(n){return cL(n,56)?TY(this,BB(n,56)):cL(n,591)?new AL(BB(n,591).Vk()):GC(n)===GC(this.f)?BB(n,14).Kc():(dD(),pAt.a)},MWn.Ob=function(){return bOn(this)},MWn.a=!1,vX(y9n,"EcoreUtil/ContentTreeIterator",1169),wAn(1380,1169,f8n,rU),MWn.si=function(n){return GC(n)===GC(this.f)?BB(n,15).Kc():new F2(BB(n,56))},vX(b7n,"ResourceImpl/5",1380),wAn(648,1994,D9n,Sp),MWn.Hc=function(n){return this.i<=4?Sjn(this,n):cL(n,49)&&BB(n,49).Zg()==this.a},MWn.bi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},MWn.di=function(n,t){0==n?this.a.b||(this.a.b=!0):L8(this,n,t)},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.aj=function(){return 2},MWn.Ai=function(){return this.a},MWn.bj=function(){return!0},MWn.cj=function(n,t){return t=BB(n,49).wh(this.a,t)},MWn.dj=function(n,t){return BB(n,49).wh(null,t)},MWn.ej=function(){return!1},MWn.hi=function(){return!0},MWn.ri=function(n){return x8(LOt,HWn,56,n,0,1)},MWn.ni=function(){return!1},vX(b7n,"ResourceImpl/ContentsEList",648),wAn(957,1964,LVn,Pp),MWn.Zc=function(n){return this.a._h(n)},MWn.gc=function(){return this.a.gc()},vX(y9n,"AbstractSequentialInternalEList/1",957),wAn(624,1,{},SH),vX(y9n,"BasicExtendedMetaData",624),wAn(1160,1,{},$C),MWn.$k=function(){return null},MWn._k=function(){return-2==this.a&&ob(this,aMn(this.d,this.b)),this.a},MWn.al=function(){return null},MWn.bl=function(){return SQ(),SQ(),set},MWn.ne=function(){return this.c==I7n&&hb(this,Egn(this.d,this.b)),this.c},MWn.cl=function(){return 0},MWn.a=-2,MWn.c=I7n,vX(y9n,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),wAn(1161,1,{},_0),MWn.$k=function(){return this.a==(R5(),tLt)&&sb(this,vNn(this.f,this.b)),this.a},MWn._k=function(){return 0},MWn.al=function(){return this.c==(R5(),tLt)&&fb(this,mNn(this.f,this.b)),this.c},MWn.bl=function(){return!this.d&&lb(this,SKn(this.f,this.b)),this.d},MWn.ne=function(){return this.e==I7n&&bb(this,Egn(this.f,this.b)),this.e},MWn.cl=function(){return-2==this.g&&wb(this,YEn(this.f,this.b)),this.g},MWn.e=I7n,MWn.g=-2,vX(y9n,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),wAn(1159,1,{},RC),MWn.b=!1,MWn.c=!1,vX(y9n,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),wAn(1162,1,{},K0),MWn.c=-2,MWn.e=I7n,MWn.f=I7n,vX(y9n,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),wAn(585,622,R9n,MH),MWn.aj=function(){return this.c},MWn.Fk=function(){return!1},MWn.li=function(n,t){return t},MWn.c=0,vX(y9n,"EDataTypeEList",585);var rLt,cLt,aLt,uLt,oLt=bq(y9n,"FeatureMap");wAn(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ecn),MWn.Vc=function(n,t){lNn(this,n,BB(t,72))},MWn.Fc=function(n){return uLn(this,BB(n,72))},MWn.Yh=function(n){dX(this,BB(n,72))},MWn.cj=function(n,t){return HK(this,BB(n,72),t)},MWn.dj=function(n,t){return qK(this,BB(n,72),t)},MWn.ii=function(n,t){return a_n(this,n,t)},MWn.li=function(n,t){return hGn(this,n,BB(t,72))},MWn._c=function(n,t){return Pxn(this,n,BB(t,72))},MWn.jj=function(n,t){return GK(this,BB(n,72),t)},MWn.kj=function(n,t){return zK(this,BB(n,72),t)},MWn.lj=function(n,t,e){return gEn(this,BB(n,72),BB(t,72),e)},MWn.oi=function(n,t){return sTn(this,n,BB(t,72))},MWn.dl=function(n,t){return xKn(this,n,t)},MWn.Wc=function(n,t){var e,i,r,c,a,u,o,s,h;for(s=new gtn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=BB(r.Pb(),72)).ak(),$xn(this.e,c))(!c.hi()||!G3(this,c,i.dd())&&!Sjn(s,i))&&f9(s,i);else{for(h=axn(this.e.Tg(),c),e=BB(this.g,119),a=!0,u=0;u<this.i;++u)if(o=e[u],h.rl(o.ak())){BB(ovn(this,u,i),72),a=!1;break}a&&f9(s,i)}return oon(this,n,s)},MWn.Gc=function(n){var t,e,i,r,c,a,u,o,s;for(o=new gtn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=BB(i.Pb(),72)).ak(),$xn(this.e,r))(!r.hi()||!G3(this,r,e.dd())&&!Sjn(o,e))&&f9(o,e);else{for(s=axn(this.e.Tg(),r),t=BB(this.g,119),c=!0,a=0;a<this.i;++a)if(u=t[a],s.rl(u.ak())){BB(ovn(this,a,e),72),c=!1;break}c&&f9(o,e)}return pX(this,o)},MWn.Wh=function(n){return this.j=-1,LFn(this,this.i,n)},MWn.el=function(n,t,e){return PRn(this,n,t,e)},MWn.mk=function(n,t){return TKn(this,n,t)},MWn.fl=function(n,t,e){return ZBn(this,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this,n,t)},MWn.il=function(n){return BB(Wtn(this,n),72).ak()},MWn.jl=function(n){return BB(Wtn(this,n),72).dd()},MWn.kl=function(){return this.b},MWn.bj=function(){return!0},MWn.ij=function(){return!0},MWn.ll=function(n){return!adn(this,n)},MWn.ri=function(n){return x8(W$t,h7n,332,n,0,1)},MWn.Gk=function(n){return hD(this,n)},MWn.Wb=function(n){tX(this,n)},MWn.ml=function(n,t){MHn(this,n,t)},MWn.nl=function(n){return zin(this,n)},MWn.ol=function(n){Kmn(this,n)},vX(y9n,"BasicFeatureMap",75),wAn(1851,1,cVn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{Axn(this.e,this.b,this.a,n),this.d=this.e.j,cvn(this)}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.Ob=function(){return Ksn(this)},MWn.Sb=function(){return _sn(this)},MWn.Pb=function(){return cvn(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(_sn(this))return mz(this),this.g=--this.a,this.Lk()&&(n=FCn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){if(-1==this.g)throw Hp(new dv);mz(this);try{aPn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw cL(n=lun(n),73)?Hp(new vv):Hp(n)}},MWn.Lk=function(){return!1},MWn.Wb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{XFn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.a=0,MWn.c=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.i=0,vX(y9n,"FeatureMapUtil/BasicFeatureEIterator",1851),wAn(410,1851,cVn,Aan),MWn.pl=function(){var n,t,e;for(e=this.e.i,n=BB(this.e.g,119);this.c<e;){if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},MWn.ql=function(){var n,t;for(n=BB(this.e.g,119);--this.c>=0;)if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},vX(y9n,"BasicFeatureMap/FeatureEIterator",410),wAn(662,410,cVn,xO),MWn.Lk=function(){return!0},vX(y9n,"BasicFeatureMap/ResolvingFeatureEIterator",662),wAn(955,486,q9n,z$),MWn.Gi=function(){return this},vX(y9n,"EContentsEList/1",955),wAn(956,486,q9n,DO),MWn.Lk=function(){return!1},vX(y9n,"EContentsEList/2",956),wAn(954,279,G9n,U$),MWn.Nk=function(n){},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},vX(y9n,"EContentsEList/FeatureIteratorImpl/1",954),wAn(825,585,R9n,KL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EDataTypeEList/Unsettable",825),wAn(1849,585,R9n,_L),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList",1849),wAn(1850,825,R9n,FL),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList/Unsettable",1850),wAn(139,85,R9n,NL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Resolving",139),wAn(1163,545,R9n,xL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Unsettable/Resolving",1163),wAn(748,16,R9n,iK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectContainmentWithInverseEList/Unsettable",748),wAn(1173,748,R9n,rK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),wAn(743,496,R9n,DL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectEList/Unsettable",743),wAn(328,496,R9n,RL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList",328),wAn(1641,743,R9n,BL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList/Unsettable",1641),wAn(1381,1,{},Ns),vX(y9n,"EObjectValidator",1381),wAn(546,496,R9n,iU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.bj=function(){return!0},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectWithInverseEList",546),wAn(1176,546,R9n,cK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/ManyInverse",1176),wAn(625,546,R9n,aK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectWithInverseEList/Unsettable",625),wAn(1175,625,R9n,oK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),wAn(749,546,R9n,uK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList",749),wAn(31,749,R9n,hK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/ManyInverse",31),wAn(750,625,R9n,sK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable",750),wAn(1174,750,R9n,fK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),wAn(1164,622,R9n),MWn.ai=function(){return 0==(1792&this.b)},MWn.ci=function(){this.b|=1},MWn.Bk=function(){return 0!=(4&this.b)},MWn.bj=function(){return 0!=(40&this.b)},MWn.Ck=function(){return 0!=(16&this.b)},MWn.Dk=function(){return 0!=(8&this.b)},MWn.Ek=function(){return 0!=(this.b&M9n)},MWn.rk=function(){return 0!=(32&this.b)},MWn.Fk=function(){return 0!=(this.b&k6n)},MWn.wj=function(n){return this.d?x3(this.d,n):this.ak().Yj().wj(n)},MWn.fj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},MWn.hi=function(){return 0!=(128&this.b)},MWn.Xj=function(){var n;sqn(this),0!=(2&this.b)&&(mA(this.e)?(n=0!=(1&this.b),this.b&=-2,Lv(this,new t6(this.e,2,Awn(this.e.Tg(),this.ak()),n,!1))):this.b&=-2)},MWn.ni=function(){return 0==(1536&this.b)},MWn.b=0,vX(y9n,"EcoreEList/Generic",1164),wAn(1165,1164,R9n,zQ),MWn.ak=function(){return this.a},vX(y9n,"EcoreEList/Dynamic",1165),wAn(747,63,h8n,Cp),MWn.ri=function(n){return Den(this.a.a,n)},vX(y9n,"EcoreEMap/1",747),wAn(746,85,R9n,Zz),MWn.bi=function(n,t){Cvn(this.b,BB(t,133))},MWn.di=function(n,t){aan(this.b)},MWn.ei=function(n,t,e){var i;++(i=this.b,BB(t,133),i).e},MWn.fi=function(n,t){Oln(this.b,BB(t,133))},MWn.gi=function(n,t,e){Oln(this.b,BB(e,133)),GC(e)===GC(t)&&BB(e,133).Th(c$(BB(t,133).cd())),Cvn(this.b,BB(t,133))},vX(y9n,"EcoreEMap/DelegateEObjectContainmentEList",746),wAn(1171,151,j9n,yin),vX(y9n,"EcoreEMap/Unsettable",1171),wAn(1172,746,R9n,lK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),wAn(1168,228,tYn,lX),MWn.a=!1,MWn.b=!1,vX(y9n,"EcoreUtil/Copier",1168),wAn(745,1,QWn,F2),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return udn(this)},MWn.Pb=function(){var n;return udn(this),n=this.b,this.b=null,n},MWn.Qb=function(){this.a.Qb()},vX(y9n,"EcoreUtil/ProperContentIterator",745),wAn(1382,1381,{},Ff),vX(y9n,"EcoreValidator",1382),bq(y9n,"FeatureMapUtil/Validator"),wAn(1260,1,{1942:1},xs),MWn.rl=function(n){return!0},vX(y9n,"FeatureMapUtil/1",1260),wAn(757,1,{1942:1},cUn),MWn.rl=function(n){var t;return this.c==n||(null==(t=TD(RX(this.a,n)))?xRn(this,n)?(r6(this.a,n,(hN(),vtt)),!0):(r6(this.a,n,(hN(),ptt)),!1):t==(hN(),vtt))},MWn.e=!1,vX(y9n,"FeatureMapUtil/BasicValidator",757),wAn(758,43,tYn,X$),vX(y9n,"FeatureMapUtil/BasicValidator/Cache",758),wAn(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},xC),MWn.Vc=function(n,t){Axn(this.c,this.b,n,t)},MWn.Fc=function(n){return xKn(this.c,this.b,n)},MWn.Wc=function(n,t){return jHn(this.c,this.b,n,t)},MWn.Gc=function(n){return Z$(this,n)},MWn.Xh=function(n,t){htn(this.c,this.b,n,t)},MWn.lk=function(n,t){return PRn(this.c,this.b,n,t)},MWn.pi=function(n){return iHn(this.c,this.b,n,!1)},MWn.Zh=function(){return jA(this.c,this.b)},MWn.$h=function(){return EA(this.c,this.b)},MWn._h=function(n){return $8(this.c,this.b,n)},MWn.mk=function(n,t){return tR(this,n,t)},MWn.$b=function(){Nv(this)},MWn.Hc=function(n){return G3(this.c,this.b,n)},MWn.Ic=function(n){return Mcn(this.c,this.b,n)},MWn.Xb=function(n){return iHn(this.c,this.b,n,!0)},MWn.Wj=function(n){return this},MWn.Xc=function(n){return z3(this.c,this.b,n)},MWn.dc=function(){return HC(this)},MWn.fj=function(){return!adn(this.c,this.b)},MWn.Kc=function(){return cnn(this.c,this.b)},MWn.Yc=function(){return ann(this.c,this.b)},MWn.Zc=function(n){return lln(this.c,this.b,n)},MWn.ii=function(n,t){return mFn(this.c,this.b,n,t)},MWn.ji=function(n,t){Q6(this.c,this.b,n,t)},MWn.$c=function(n){return aPn(this.c,this.b,n)},MWn.Mc=function(n){return IKn(this.c,this.b,n)},MWn._c=function(n,t){return XFn(this.c,this.b,n,t)},MWn.Wb=function(n){AOn(this.c,this.b),Z$(this,BB(n,15))},MWn.gc=function(){return Kln(this.c,this.b)},MWn.Pc=function(){return G1(this.c,this.b)},MWn.Qc=function(n){return U3(this.c,this.b,n)},MWn.Ib=function(){var n,t;for((t=new Sk).a+="[",n=jA(this.c,this.b);Ksn(n);)cO(t,kN(cvn(n))),Ksn(n)&&(t.a+=FWn);return t.a+="]",t.a},MWn.Xj=function(){AOn(this.c,this.b)},vX(y9n,"FeatureMapUtil/FeatureEList",501),wAn(627,36,t9n,b4),MWn.yi=function(n){return eln(this,n)},MWn.Di=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0;break;case 3:if(3===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=5,f9(t=new gtn(2),this.g),f9(t,n.zi()),this.g=t,!0;break;case 5:if(3===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return BB(this.g,14).Fc(n.zi()),!0;break;case 4:switch(n.xi()){case 3:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=1,this.g=n.zi(),!0;break;case 4:if(GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return this.d=6,f9(r=new gtn(2),this.n),f9(r,n.Bi()),this.n=r,i=Pun(Gk(ANt,1),hQn,25,15,[this.o,n.Ci()]),this.g=i,!0}break;case 6:if(4===n.xi()&&GC(n.Ai())===GC(this.c)&&eln(this,null)==n.yi(null))return BB(this.n,14).Fc(n.Bi()),aHn(i=BB(this.g,48),0,e=x8(ANt,hQn,25,i.length+1,15,1),0,i.length),e[i.length]=n.Ci(),this.g=e,!0}return!1},vX(y9n,"FeatureMapUtil/FeatureENotificationImpl",627),wAn(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},lq),MWn.dl=function(n,t){return xKn(this.c,n,t)},MWn.el=function(n,t,e){return PRn(this.c,n,t,e)},MWn.fl=function(n,t,e){return ZBn(this.c,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this.c,n,t)},MWn.il=function(n){return BB(iHn(this.c,this.b,n,!1),72).ak()},MWn.jl=function(n){return BB(iHn(this.c,this.b,n,!1),72).dd()},MWn.kl=function(){return this.a},MWn.ll=function(n){return!adn(this.c,n)},MWn.ml=function(n,t){MHn(this.c,n,t)},MWn.nl=function(n){return zin(this.c,n)},MWn.ol=function(n){Kmn(this.c,n)},vX(y9n,"FeatureMapUtil/FeatureFeatureMap",552),wAn(1259,1,k9n,KC),MWn.Wj=function(n){return iHn(this.b,this.a,-1,n)},MWn.fj=function(){return!adn(this.b,this.a)},MWn.Wb=function(n){MHn(this.b,this.a,n)},MWn.Xj=function(){AOn(this.b,this.a)},vX(y9n,"FeatureMapUtil/FeatureValue",1259);var sLt,hLt,fLt,lLt,bLt,wLt=bq(O7n,"AnyType");wAn(666,60,BVn,ik),vX(O7n,"InvalidDatatypeValueException",666);var dLt,gLt,pLt,vLt,mLt,yLt,kLt,jLt,ELt,TLt,MLt,SLt,PLt,ILt,CLt,OLt,ALt,$Lt,LLt,NLt,xLt,DLt,RLt,KLt,_Lt,FLt,BLt,HLt,qLt,GLt,zLt=bq(O7n,A7n),ULt=bq(O7n,$7n),XLt=bq(O7n,L7n);wAn(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Rm),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b)}return U9(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new Ecn(this,0)),TKn(this.c,n,e);case 1:return(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),69)).mk(n,e);case 2:return!this.b&&(this.b=new Ecn(this,2)),TKn(this.b,n,e)}return BB(itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i}return O3(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t)}Lbn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),pLt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b)}qfn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.c),n.a+=", anyAttribute: ",rO(n,this.b),n.a+=")",n.a)},vX(N7n,"AnyTypeImpl",830),wAn(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},Rs),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return U9(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return O3(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return void kb(this,SD(t));case 1:return void jb(this,SD(t))}Lbn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),OLt},MWn.Bh=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}qfn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (data: ",cO(n,this.a),n.a+=", target: ",cO(n,this.b),n.a+=")",n.a)},MWn.a=null,MWn.b=null,vX(N7n,"ProcessingInstructionImpl",667),wAn(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_m),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return this.a}return U9(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new Ecn(this,0)),null!=SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return null!=gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return!!this.a}return O3(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t);case 3:return void F0(this,SD(t));case 4:return void F0(this,pK(this.a,t));case 5:return void Eb(this,BB(t,148))}Lbn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),$Lt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),void MHn(this.c,(Uqn(),LLt),null);case 4:return void F0(this,pK(this.a,null));case 5:return void(this.a=null)}qfn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},vX(N7n,"SimpleAnyTypeImpl",668),wAn(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Km),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new Ecn(this,0)),this.a):(!this.a&&(this.a=new Ecn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),this.b):(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),A8(this.b));case 2:return e?(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),this.c):(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),A8(this.c));case 3:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),DLt));case 4:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),RLt));case 5:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),_Lt));case 6:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),FLt))}return U9(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new Ecn(this,0)),TKn(this.a,n,e);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),BK(this.b,n,e);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),BK(this.c,n,e);case 5:return!this.a&&(this.a=new Ecn(this,0)),tR(n1(this.a,(Uqn(),_Lt)),n,e)}return BB(itn(0==(2&this.j)?(Uqn(),xLt):(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX((Uqn(),xLt)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),!HC(n1(this.a,(Uqn(),FLt)))}return O3(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void tX(this.a,t);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void tan(this.b,t);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void tan(this.c,t);case 3:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),DLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,DLt),BB(t,14));case 4:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),RLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,RLt),BB(t,14));case 5:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),_Lt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,_Lt),BB(t,14));case 6:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),FLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,FLt),BB(t,14))}Lbn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),xLt},MWn.Bh=function(n){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void sqn(this.a);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),FLt)))}qfn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.a),n.a+=")",n.a)},vX(N7n,"XMLTypeDocumentRootImpl",669),wAn(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Ds),MWn.Ih=function(n,t){switch(n.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:Bbn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return SD(t);case 6:return mD(BB(t,190));case 12:case 47:case 49:case 11:return qGn(this,n,t);case 13:return null==t?null:GBn(BB(t,240));case 15:case 14:return null==t?null:RU(Gy(MD(t)));case 17:return EEn((Uqn(),t));case 18:return EEn(t);case 21:case 20:return null==t?null:KU(BB(t,155).a);case 27:return yD(BB(t,190));case 30:return _mn((Uqn(),BB(t,15)));case 31:return _mn(BB(t,15));case 40:return jD((Uqn(),t));case 42:return TEn((Uqn(),t));case 43:return TEn(t);case 59:case 48:return kD((Uqn(),t));default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Rm;case 1:return new Rs;case 2:return new _m;case 3:return new Km;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;switch(n.yj()){case 5:case 52:case 4:return t;case 6:return ypn(t);case 8:case 7:return null==t?null:_En(t);case 9:return null==t?null:Pnn(l_n((i=FBn(t,!0)).length>0&&(b1(0,i.length),43==i.charCodeAt(0))?i.substr(1):i,-128,127)<<24>>24);case 10:return null==t?null:Pnn(l_n((r=FBn(t,!0)).length>0&&(b1(0,r.length),43==r.charCodeAt(0))?r.substr(1):r,-128,127)<<24>>24);case 11:return SD(xXn(this,(Uqn(),kLt),t));case 12:return SD(xXn(this,(Uqn(),jLt),t));case 13:return null==t?null:new wE(FBn(t,!0));case 15:case 14:return gLn(t);case 16:return SD(xXn(this,(Uqn(),ELt),t));case 17:return Hdn((Uqn(),t));case 18:return Hdn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return FBn(t,!0);case 21:case 20:return CLn(t);case 22:return SD(xXn(this,(Uqn(),TLt),t));case 23:return SD(xXn(this,(Uqn(),MLt),t));case 24:return SD(xXn(this,(Uqn(),SLt),t));case 25:return SD(xXn(this,(Uqn(),PLt),t));case 26:return SD(xXn(this,(Uqn(),ILt),t));case 27:return Zgn(t);case 30:return qdn((Uqn(),t));case 31:return qdn(t);case 32:return null==t?null:iln(l_n((h=FBn(t,!0)).length>0&&(b1(0,h.length),43==h.charCodeAt(0))?h.substr(1):h,_Vn,DWn));case 33:return null==t?null:new $A((f=FBn(t,!0)).length>0&&(b1(0,f.length),43==f.charCodeAt(0))?f.substr(1):f);case 34:return null==t?null:iln(l_n((l=FBn(t,!0)).length>0&&(b1(0,l.length),43==l.charCodeAt(0))?l.substr(1):l,_Vn,DWn));case 36:return null==t?null:jgn(rUn((b=FBn(t,!0)).length>0&&(b1(0,b.length),43==b.charCodeAt(0))?b.substr(1):b));case 37:return null==t?null:jgn(rUn((w=FBn(t,!0)).length>0&&(b1(0,w.length),43==w.charCodeAt(0))?w.substr(1):w));case 40:return Vwn((Uqn(),t));case 42:return Gdn((Uqn(),t));case 43:return Gdn(t);case 44:return null==t?null:new $A((d=FBn(t,!0)).length>0&&(b1(0,d.length),43==d.charCodeAt(0))?d.substr(1):d);case 45:return null==t?null:new $A((g=FBn(t,!0)).length>0&&(b1(0,g.length),43==g.charCodeAt(0))?g.substr(1):g);case 46:return FBn(t,!1);case 47:return SD(xXn(this,(Uqn(),CLt),t));case 59:case 48:return Wwn((Uqn(),t));case 49:return SD(xXn(this,(Uqn(),ALt),t));case 50:return null==t?null:rln(l_n((p=FBn(t,!0)).length>0&&(b1(0,p.length),43==p.charCodeAt(0))?p.substr(1):p,Q9n,32767)<<16>>16);case 51:return null==t?null:rln(l_n((c=FBn(t,!0)).length>0&&(b1(0,c.length),43==c.charCodeAt(0))?c.substr(1):c,Q9n,32767)<<16>>16);case 53:return SD(xXn(this,(Uqn(),NLt),t));case 55:return null==t?null:rln(l_n((a=FBn(t,!0)).length>0&&(b1(0,a.length),43==a.charCodeAt(0))?a.substr(1):a,Q9n,32767)<<16>>16);case 56:return null==t?null:rln(l_n((u=FBn(t,!0)).length>0&&(b1(0,u.length),43==u.charCodeAt(0))?u.substr(1):u,Q9n,32767)<<16>>16);case 57:return null==t?null:jgn(rUn((o=FBn(t,!0)).length>0&&(b1(0,o.length),43==o.charCodeAt(0))?o.substr(1):o));case 58:return null==t?null:jgn(rUn((s=FBn(t,!0)).length>0&&(b1(0,s.length),43==s.charCodeAt(0))?s.substr(1):s));case 60:return null==t?null:iln(l_n((e=FBn(t,!0)).length>0&&(b1(0,e.length),43==e.charCodeAt(0))?e.substr(1):e,_Vn,DWn));case 61:return null==t?null:iln(l_n(FBn(t,!0),_Vn,DWn));default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(N7n,"XMLTypeFactoryImpl",1919),wAn(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},zW),MWn.N=!1,MWn.O=!1;var WLt,VLt,QLt,YLt,JLt,ZLt=!1;vX(N7n,"XMLTypePackageImpl",586),wAn(1852,1,{837:1},Ks),MWn._j=function(){return fFn(),TNt},vX(N7n,"XMLTypePackageImpl/1",1852),wAn(1861,1,s7n,_s),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/10",1861),wAn(1862,1,s7n,Fs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/11",1862),wAn(1863,1,s7n,Bs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/12",1863),wAn(1864,1,s7n,Hs),MWn.wj=function(n){return UC(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(N7n,"XMLTypePackageImpl/13",1864),wAn(1865,1,s7n,qs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/14",1865),wAn(1866,1,s7n,Gs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/15",1866),wAn(1867,1,s7n,zs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/16",1867),wAn(1868,1,s7n,Us),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/17",1868),wAn(1869,1,s7n,Xs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Itt,sVn,155,n,0,1)},vX(N7n,"XMLTypePackageImpl/18",1869),wAn(1870,1,s7n,Ws),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/19",1870),wAn(1853,1,s7n,Vs),MWn.wj=function(n){return cL(n,843)},MWn.xj=function(n){return x8(wLt,HWn,843,n,0,1)},vX(N7n,"XMLTypePackageImpl/2",1853),wAn(1871,1,s7n,Qs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/20",1871),wAn(1872,1,s7n,Ys),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/21",1872),wAn(1873,1,s7n,Js),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/22",1873),wAn(1874,1,s7n,Zs),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/23",1874),wAn(1875,1,s7n,nh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/24",1875),wAn(1876,1,s7n,th),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/25",1876),wAn(1877,1,s7n,eh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/26",1877),wAn(1878,1,s7n,ih),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/27",1878),wAn(1879,1,s7n,rh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/28",1879),wAn(1880,1,s7n,ch),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/29",1880),wAn(1854,1,s7n,ah),MWn.wj=function(n){return cL(n,667)},MWn.xj=function(n){return x8(zLt,HWn,2021,n,0,1)},vX(N7n,"XMLTypePackageImpl/3",1854),wAn(1881,1,s7n,uh),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/30",1881),wAn(1882,1,s7n,oh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/31",1882),wAn(1883,1,s7n,sh),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/32",1883),wAn(1884,1,s7n,hh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/33",1884),wAn(1885,1,s7n,fh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/34",1885),wAn(1886,1,s7n,lh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/35",1886),wAn(1887,1,s7n,bh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/36",1887),wAn(1888,1,s7n,wh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/37",1888),wAn(1889,1,s7n,dh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/38",1889),wAn(1890,1,s7n,gh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/39",1890),wAn(1855,1,s7n,ph),MWn.wj=function(n){return cL(n,668)},MWn.xj=function(n){return x8(ULt,HWn,2022,n,0,1)},vX(N7n,"XMLTypePackageImpl/4",1855),wAn(1891,1,s7n,vh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/40",1891),wAn(1892,1,s7n,mh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/41",1892),wAn(1893,1,s7n,yh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/42",1893),wAn(1894,1,s7n,kh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/43",1894),wAn(1895,1,s7n,jh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/44",1895),wAn(1896,1,s7n,Eh),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/45",1896),wAn(1897,1,s7n,Th),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/46",1897),wAn(1898,1,s7n,Mh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/47",1898),wAn(1899,1,s7n,Sh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/48",1899),wAn(sQn,1,s7n,Ph),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/49",sQn),wAn(1856,1,s7n,Ih),MWn.wj=function(n){return cL(n,669)},MWn.xj=function(n){return x8(XLt,HWn,2023,n,0,1)},vX(N7n,"XMLTypePackageImpl/5",1856),wAn(1901,1,s7n,Ch),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/50",1901),wAn(1902,1,s7n,Oh),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/51",1902),wAn(1903,1,s7n,Ah),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/52",1903),wAn(1857,1,s7n,$h),MWn.wj=function(n){return XC(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/6",1857),wAn(1858,1,s7n,Lh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/7",1858),wAn(1859,1,s7n,Nh),MWn.wj=function(n){return zC(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(N7n,"XMLTypePackageImpl/8",1859),wAn(1860,1,s7n,xh),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(N7n,"XMLTypePackageImpl/9",1860),wAn(50,60,BVn,ak),vX(ant,"RegEx/ParseException",50),wAn(820,1,{},Dh),MWn.sl=function(n){return n<this.j&&63==fV(this.i,n)},MWn.tl=function(){var n,t,e,i,r;if(10!=this.c)throw Hp(new ak(kWn((u$(),g8n))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if(123==this.a){for(r=0,e=0;;){if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if((r=Gvn(this.a))<0)break;if(e>16*e)throw Hp(new ak(kWn((u$(),H8n))));e=16*e+r}if(125!=this.a)throw Hp(new ak(kWn((u$(),q8n))));if(e>unt)throw Hp(new ak(kWn((u$(),G8n))));n=e}else{if(r=0,0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(e=r,QXn(this),0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=e=16*e+r}break;case 117:if(i=0,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=t=16*t+i;break;case 118:if(QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if((t=16*t+i)>unt)throw Hp(new ak(kWn((u$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw Hp(new ak(kWn((u$(),z8n))))}return n},MWn.ul=function(n){var t;switch(n){case 100:t=32==(32&this.e)?ZUn("Nd",!0):(wWn(),uNt);break;case 68:t=32==(32&this.e)?ZUn("Nd",!1):(wWn(),lNt);break;case 119:t=32==(32&this.e)?ZUn("IsWord",!0):(wWn(),kNt);break;case 87:t=32==(32&this.e)?ZUn("IsWord",!1):(wWn(),wNt);break;case 115:t=32==(32&this.e)?ZUn("IsSpace",!0):(wWn(),gNt);break;case 83:t=32==(32&this.e)?ZUn("IsSpace",!1):(wWn(),bNt);break;default:throw Hp(new dy(ont+n.toString(16)))}return t},MWn.vl=function(n){var t,e,i,r,c,a,u,o,s,h,f;for(this.b=1,QXn(this),t=null,0==this.c&&94==this.a?(QXn(this),n?(wWn(),wWn(),s=new M0(5)):(wWn(),wWn(),Yxn(t=new M0(4),0,unt),s=new M0(4))):(wWn(),wWn(),s=new M0(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(s,this.ul(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.Ll(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=DCn(this,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(s,h),i=!0;break;default:e=this.tl()}else if(20==f){if((c=lx(this.i,58,this.d))<0)throw Hp(new ak(kWn((u$(),A8n))));if(a=!0,94==fV(this.i,this.d)&&(++this.d,a=!1),!(u=b9(fx(this.i,this.d,c),a,512==(512&this.e))))throw Hp(new ak(kWn((u$(),L8n))));if(sHn(s,u),i=!0,c+1>=this.j||93!=fV(this.i,c+1))throw Hp(new ak(kWn((u$(),A8n))));this.d=c+2}if(QXn(this),!i)if(0!=this.c||45!=this.a)Yxn(s,e,e);else{if(QXn(this),1==(f=this.c))throw Hp(new ak(kWn((u$(),$8n))));0==f&&93==this.a?(Yxn(s,e,e),Yxn(s,45,45)):(o=this.a,10==f&&(o=this.tl()),QXn(this),Yxn(s,e,o))}(this.e&k6n)==k6n&&0==this.c&&44==this.a&&QXn(this)}if(1==this.c)throw Hp(new ak(kWn((u$(),$8n))));return t&&(WGn(t,s),s=t),T$n(s),qHn(s),this.b=0,QXn(this),s},MWn.wl=function(){var n,t,e,i;for(e=this.vl(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw Hp(new ak(kWn((u$(),_8n))));if(QXn(this),9!=this.c)throw Hp(new ak(kWn((u$(),K8n))));if(t=this.vl(!1),4==i)sHn(e,t);else if(45==n)WGn(e,t);else{if(38!=n)throw Hp(new dy("ASSERT"));kGn(e,t)}}return QXn(this),e},MWn.xl=function(){var n,t;return n=this.a-48,wWn(),wWn(),t=new vJ(12,null,n),!this.g&&(this.g=new _v),Iv(this.g,new Op(n)),QXn(this),t},MWn.yl=function(){return QXn(this),wWn(),pNt},MWn.zl=function(){return QXn(this),wWn(),dNt},MWn.Al=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Bl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Cl=function(){return QXn(this),fsn()},MWn.Dl=function(){return QXn(this),wWn(),mNt},MWn.El=function(){return QXn(this),wWn(),jNt},MWn.Fl=function(){var n;if(this.d>=this.j||64!=(65504&(n=fV(this.i,this.d++))))throw Hp(new ak(kWn((u$(),S8n))));return QXn(this),wWn(),wWn(),new oG(0,n-64)},MWn.Gl=function(){return QXn(this),RFn()},MWn.Hl=function(){return QXn(this),wWn(),ENt},MWn.Il=function(){var n;return wWn(),wWn(),n=new oG(0,105),QXn(this),n},MWn.Jl=function(){return QXn(this),wWn(),yNt},MWn.Kl=function(){return QXn(this),wWn(),vNt},MWn.Ll=function(n,t){return this.tl()},MWn.Ml=function(){return QXn(this),wWn(),hNt},MWn.Nl=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw Hp(new ak(kWn((u$(),E8n))));if(i=-1,t=null,49<=(n=fV(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new _v),Iv(this.g,new Op(i)),++this.d,41!=fV(this.i,this.d))throw Hp(new ak(kWn((u$(),y8n))));++this.d}else switch(63==n&&--this.d,QXn(this),(t=OXn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));break;default:throw Hp(new ak(kWn((u$(),T8n))))}if(QXn(this),e=null,2==(r=Vdn(this)).e){if(2!=r.em())throw Hp(new ak(kWn((u$(),M8n))));e=r.am(1),r=r.am(0)}if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),wWn(),wWn(),new jnn(i,t,r,e)},MWn.Ol=function(){return QXn(this),wWn(),fNt},MWn.Pl=function(){var n;if(QXn(this),n=uU(24,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ql=function(){var n;if(QXn(this),n=uU(20,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Rl=function(){var n;if(QXn(this),n=uU(22,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Sl=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))))}if(58==t){if(++this.d,QXn(this),i=AX(Vdn(this),n,e),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));QXn(this)}else{if(41!=t)throw Hp(new ak(kWn((u$(),j8n))));++this.d,QXn(this),i=AX(Vdn(this),n,e)}return i},MWn.Tl=function(){var n;if(QXn(this),n=uU(21,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ul=function(){var n;if(QXn(this),n=uU(23,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Vl=function(){var n,t;if(QXn(this),n=this.f++,t=oU(Vdn(this),n),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),t},MWn.Wl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Xl=function(n){return QXn(this),5==this.c?(QXn(this),gG(n,(wWn(),wWn(),new h4(9,n)))):gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),t=new r$(2),5==this.c?(QXn(this),tqn(t,sNt),tqn(t,n)):(tqn(t,n),tqn(t,sNt)),t},MWn.Zl=function(n){return QXn(this),5==this.c?(QXn(this),wWn(),wWn(),new h4(9,n)):(wWn(),wWn(),new h4(3,n))},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=1,MWn.g=null,MWn.j=0,vX(ant,"RegEx/RegexParser",820),wAn(1824,820,{},Fm),MWn.sl=function(n){return!1},MWn.tl=function(){return qDn(this)},MWn.ul=function(n){return d_n(n)},MWn.vl=function(n){return ZXn(this)},MWn.wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.xl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.yl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.zl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Al=function(){return QXn(this),d_n(67)},MWn.Bl=function(){return QXn(this),d_n(73)},MWn.Cl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Dl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.El=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Fl=function(){return QXn(this),d_n(99)},MWn.Gl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Hl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Il=function(){return QXn(this),d_n(105)},MWn.Jl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Kl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ll=function(n,t){return sHn(n,d_n(t)),-1},MWn.Ml=function(){return QXn(this),wWn(),wWn(),new oG(0,94)},MWn.Nl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ol=function(){return QXn(this),wWn(),wWn(),new oG(0,36)},MWn.Pl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ql=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Rl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Sl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Tl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ul=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Vl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Xl=function(n){return QXn(this),gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),tqn(t=new r$(2),n),tqn(t,sNt),t},MWn.Zl=function(n){return QXn(this),wWn(),wWn(),new h4(3,n)};var nNt=null,tNt=null;vX(ant,"RegEx/ParserForXMLSchema",1824),wAn(117,1,ynt,Ap),MWn.$l=function(n){throw Hp(new dy("Not supported."))},MWn._l=function(){return-1},MWn.am=function(n){return null},MWn.bm=function(){return null},MWn.cm=function(n){},MWn.dm=function(n){},MWn.em=function(){return 0},MWn.Ib=function(){return this.fm(0)},MWn.fm=function(n){return 11==this.e?".":""},MWn.e=0;var eNt,iNt,rNt,cNt,aNt,uNt,oNt,sNt,hNt,fNt,lNt,bNt,wNt,dNt,gNt,pNt,vNt,mNt,yNt,kNt,jNt,ENt,TNt,MNt,SNt=null,PNt=null,INt=null,CNt=vX(ant,"RegEx/Token",117);wAn(136,117,{3:1,136:1,117:1},M0),MWn.fm=function(n){var t,e,i;if(4==this.e)if(this==oNt)e=".";else if(this==uNt)e="\\d";else if(this==kNt)e="\\w";else if(this==gNt)e="\\s";else{for((i=new Sk).a+="[",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}else if(this==lNt)e="\\D";else if(this==wNt)e="\\W";else if(this==bNt)e="\\S";else{for((i=new Sk).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}return e},MWn.a=!1,MWn.c=!1,vX(ant,"RegEx/RangeToken",136),wAn(584,1,{584:1},Op),MWn.a=0,vX(ant,"RegEx/RegexParser/ReferencePosition",584),wAn(583,1,{3:1,583:1},XE),MWn.Fb=function(n){var t;return null!=n&&!!cL(n,583)&&(t=BB(n,583),mK(this.b,t.b)&&this.a==t.a)},MWn.Hb=function(){return vvn(this.b+"/"+txn(this.a))},MWn.Ib=function(){return this.c.fm(this.a)},MWn.a=0,vX(ant,"RegEx/RegularExpression",583),wAn(223,117,ynt,oG),MWn._l=function(){return this.a},MWn.fm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+PR(this.a&QVn);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=BQn?"\\v"+fx(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+PR(this.a&QVn)}break;case 8:e=this==hNt||this==fNt?""+PR(this.a&QVn):"\\"+PR(this.a&QVn);break;default:e=null}return e},MWn.a=0,vX(ant,"RegEx/Token/CharToken",223),wAn(309,117,ynt,h4),MWn.am=function(n){return this.a},MWn.cm=function(n){this.b=n},MWn.dm=function(n){this.c=n},MWn.em=function(){return 1},MWn.fm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.fm(n)+"*";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): CLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.fm(n)+"*?";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): NONGREEDYCLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}?"}return t},MWn.b=0,MWn.c=0,vX(ant,"RegEx/Token/ClosureToken",309),wAn(821,117,ynt,UU),MWn.am=function(n){return 0==n?this.a:this.b},MWn.em=function(){return 2},MWn.fm=function(n){return 3==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+":9==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+?":this.a.fm(n)+""+this.b.fm(n)},vX(ant,"RegEx/Token/ConcatToken",821),wAn(1822,117,ynt,jnn),MWn.am=function(n){if(0==n)return this.d;if(1==n)return this.b;throw Hp(new dy("Internal Error: "+n))},MWn.em=function(){return this.b?2:1},MWn.fm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},MWn.c=0,vX(ant,"RegEx/Token/ConditionToken",1822),wAn(1823,117,ynt,T0),MWn.am=function(n){return this.b},MWn.em=function(){return 1},MWn.fm=function(n){return"(?"+(0==this.a?"":txn(this.a))+(0==this.c?"":txn(this.c))+":"+this.b.fm(n)+")"},MWn.a=0,MWn.c=0,vX(ant,"RegEx/Token/ModifierToken",1823),wAn(822,117,ynt,cW),MWn.am=function(n){return this.a},MWn.em=function(){return 1},MWn.fm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.fm(n)+")":"("+this.a.fm(n)+")";break;case 20:t="(?="+this.a.fm(n)+")";break;case 21:t="(?!"+this.a.fm(n)+")";break;case 22:t="(?<="+this.a.fm(n)+")";break;case 23:t="(?<!"+this.a.fm(n)+")";break;case 24:t="(?>"+this.a.fm(n)+")"}return t},MWn.b=0,vX(ant,"RegEx/Token/ParenToken",822),wAn(521,117,{3:1,117:1,521:1},vJ),MWn.bm=function(){return this.b},MWn.fm=function(n){return 12==this.e?"\\"+this.a:iAn(this.b)},MWn.a=0,vX(ant,"RegEx/Token/StringToken",521),wAn(465,117,ynt,r$),MWn.$l=function(n){tqn(this,n)},MWn.am=function(n){return BB(bW(this.a,n),117)},MWn.em=function(){return this.a?this.a.a.c.length:0},MWn.fm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=BB(bW(this.a,0),117),r=3==(e=BB(bW(this.a,1),117)).e&&e.am(0)==t?t.fm(n)+"+":9==e.e&&e.am(0)==t?t.fm(n)+"+?":t.fm(n)+""+e.fm(n);else{for(c=new Sk,i=0;i<this.a.a.c.length;i++)cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==BB(bW(this.a,1),117).e)r=BB(bW(this.a,0),117).fm(n)+"?";else if(2==this.a.a.c.length&&7==BB(bW(this.a,0),117).e)r=BB(bW(this.a,1),117).fm(n)+"??";else{for(cO(c=new Sk,BB(bW(this.a,0),117).fm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r},vX(ant,"RegEx/Token/UnionToken",465),wAn(518,1,{592:1},UE),MWn.Ib=function(){return this.a.b},vX(knt,"XMLTypeUtil/PatternMatcherImpl",518),wAn(1622,1381,{},Rh),vX(knt,"XMLTypeValidator",1622),wAn(264,1,pVn,hz),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return(this.b-this.a)*this.c<0?MNt:new XL(this)},MWn.a=0,MWn.b=0,MWn.c=0,vX(Ent,"ExclusiveRange",264),wAn(1068,1,cVn,Kh),MWn.Rb=function(n){BB(n,19),l$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return GE()},MWn.Ub=function(){return zE()},MWn.Wb=function(n){BB(n,19),w$()},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Tb=function(){return-1},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new tk(Snt))},vX(Ent,"ExclusiveRange/1",1068),wAn(254,1,cVn,XL),MWn.Rb=function(n){BB(n,19),b$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return Fhn(this)},MWn.Ub=function(){return O9(this)},MWn.Wb=function(n){BB(n,19),d$()},MWn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Vb=function(){return this.b-1},MWn.Qb=function(){throw Hp(new tk(Snt))},MWn.a=0,MWn.b=0,vX(Ent,"ExclusiveRange/RangeIterator",254);var ONt=RW(P9n,"C"),ANt=RW(O9n,"I"),$Nt=RW($Wn,"Z"),LNt=RW(A9n,"J"),NNt=RW(S9n,"B"),xNt=RW(I9n,"D"),DNt=RW(C9n,"F"),RNt=RW($9n,"S"),KNt=bq("org.eclipse.elk.core.labels","ILabelManager"),_Nt=bq(B6n,"DiagnosticChain"),FNt=bq(f7n,"ResourceSet"),BNt=vX(B6n,"InvocationTargetException",null),HNt=(Dk(),f5),qNt=qNt=hEn;Zen(Qp),scn("permProps",[[[Pnt,Int],[Cnt,"gecko1_8"]],[[Pnt,Int],[Cnt,"ie10"]],[[Pnt,Int],[Cnt,"ie8"]],[[Pnt,Int],[Cnt,"ie9"]],[[Pnt,Int],[Cnt,"safari"]]]),qNt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var u=n("web-worker");c.workerFactory=function(n){return new u(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var o=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new o(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},35453:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>k});var i=e(64627),r=e(63294),c=e(40577),a=e(99854),u=e(26746);e(27693),e(7608),e(31699);const o=new u;let s={};const h={};let f={};const l=(n,t,e)=>{const i={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return i.TD=i.TB,a.l.info("abc88",e,t,n),i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort abc88",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),i},w=function(n,t,e,i){a.l.info("abc78 edges = ",n);const u=i.insert("g").attr("class","edgeLabels");let o,s,l={},w=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,a.k)(n.defaultStyle);o=t.style,s=t.labelStyle}return n.forEach((function(t){const i="L-"+t.start+"-"+t.end;void 0===l[i]?(l[i]=0,a.l.info("abc78 new entry",i,l[i])):(l[i]++,a.l.info("abc78 new entry",i,l[i]));let d=i+"-"+l[i];a.l.info("abc78 new link id to be used is",i,d,l[i]);const g="LS-"+t.start,p="LE-"+t.end,v={style:"",labelStyle:""};switch(v.minlen=t.length||1,"arrow_open"===t.type?v.arrowhead="none":v.arrowhead="normal",v.arrowTypeStart="arrow_open",v.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":v.arrowTypeStart="arrow_cross";case"arrow_cross":v.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":v.arrowTypeStart="arrow_point";case"arrow_point":v.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":v.arrowTypeStart="arrow_circle";case"arrow_circle":v.arrowTypeEnd="arrow_circle"}let m="",y="";switch(t.stroke){case"normal":m="fill:none;",void 0!==o&&(m=o),void 0!==s&&(y=s),v.thickness="normal",v.pattern="solid";break;case"dotted":v.thickness="normal",v.pattern="dotted",v.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":v.thickness="thick",v.pattern="solid",v.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,a.k)(t.style);m=n.style,y=n.labelStyle}v.style=v.style+=m,v.labelStyle=v.labelStyle+=y,void 0!==t.interpolate?v.curve=(0,a.o)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?v.curve=(0,a.o)(n.defaultInterpolate,r.c_6):v.curve=(0,a.o)(h.curve,r.c_6),void 0===t.text?void 0!==t.style&&(v.arrowheadStyle="fill: #333"):(v.arrowheadStyle="fill: #333",v.labelpos="c"),v.labelType=t.labelType,v.label=t.text.replace(a.e.lineBreakRegex,"\n"),void 0===t.style&&(v.style=v.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),v.labelStyle=v.labelStyle.replace("color:","fill:"),v.id=d,v.classes="flowchart-link "+g+" "+p;const k=(0,c.f)(u,v),{source:j,target:E,sourceId:T,targetId:M}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=f[e],u=f[i];return a&&u?("diamond"===a.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===u.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,w);a.l.debug("abc78 source and target",j,E),e.edges.push({id:"e"+t.start+t.end,sources:[j],targets:[E],sourceId:T,targetId:M,labelEl:k,labels:[{width:v.width,height:v.height,orgWidth:v.width,orgHeight:v.height,text:v.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:v})})),e},d=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,c){const a=d(t.sourceId,t.targetId,c),u=t.sections[0].startPoint,o=t.sections[0].endPoint,s=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+a.x,n.y+a.y])),h=[[u.x+a.x,u.y+a.y],...s,[o.x+a.x,o.y+a.y]],f=(0,r.jvg)().curve(r.c_6),l=n.insert("path").attr("d",f(h)).attr("class","path "+e.classes).attr("fill","none"),b=n.insert("g").attr("class","edgeLabel"),w=(0,r.Ys)(b.node().appendChild(t.labelEl)),g=w.node().firstChild.getBoundingClientRect();w.attr("width",g.width),w.attr("height",g.height),b.attr("transform",`translate(${t.labels[0].x+a.x}, ${t.labels[0].y+a.y})`),function(n,t,e,i){let r="";switch(i&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.arrowTypeStart){case"arrow_cross":n.attr("marker-start","url("+r+"#"+e+"-crossStart)");break;case"arrow_point":n.attr("marker-start","url("+r+"#"+e+"-pointStart)");break;case"arrow_barb":n.attr("marker-start","url("+r+"#"+e+"-barbStart)");break;case"arrow_circle":n.attr("marker-start","url("+r+"#"+e+"-circleStart)");break;case"aggregation":n.attr("marker-start","url("+r+"#"+e+"-aggregationStart)");break;case"extension":n.attr("marker-start","url("+r+"#"+e+"-extensionStart)");break;case"composition":n.attr("marker-start","url("+r+"#"+e+"-compositionStart)");break;case"dependency":n.attr("marker-start","url("+r+"#"+e+"-dependencyStart)");break;case"lollipop":n.attr("marker-start","url("+r+"#"+e+"-lollipopStart)")}switch(t.arrowTypeEnd){case"arrow_cross":n.attr("marker-end","url("+r+"#"+e+"-crossEnd)");break;case"arrow_point":n.attr("marker-end","url("+r+"#"+e+"-pointEnd)");break;case"arrow_barb":n.attr("marker-end","url("+r+"#"+e+"-barbEnd)");break;case"arrow_circle":n.attr("marker-end","url("+r+"#"+e+"-circleEnd)");break;case"aggregation":n.attr("marker-end","url("+r+"#"+e+"-aggregationEnd)");break;case"extension":n.attr("marker-end","url("+r+"#"+e+"-extensionEnd)");break;case"composition":n.attr("marker-end","url("+r+"#"+e+"-compositionEnd)");break;case"dependency":n.attr("marker-end","url("+r+"#"+e+"-dependencyEnd)");break;case"lollipop":n.attr("marker-end","url("+r+"#"+e+"-lollipopEnd)")}}(l,e,i.type,i.arrowMarkerAbsolute)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},v=(n,t,e,i,r,c,u)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:u,width:e.width,height:e.height},"group"===e.type){const i=r.insert("g").attr("class","subgraph");i.insert("rect").attr("class","subgraph subgraph-lvl-"+u%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const c=i.insert("g").attr("class","label"),o=(0,a.c)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+o}, ${e.labels[0].y+t+e.y+3})`),c.node().appendChild(e.labelData.labelNode),a.l.info("Id (UGH)= ",e.type,e.labels)}else a.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&v(n+e.x,t+e.y,e.children,i,r,c,u+1)}))},m={getClasses:function(n,t){return a.l.info("Extracting classes"),t.db.getClasses()},draw:async function(n,t,e,i){var u;f={},s={};const h=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let l={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(a.l.info("Drawing flowchart using v3 renderer",o),i.db.getDirection()){case"BT":l.layoutOptions["elk.direction"]="UP";break;case"TB":l.layoutOptions["elk.direction"]="DOWN";break;case"LR":l.layoutOptions["elk.direction"]="RIGHT";break;case"RL":l.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:b,flowchart:d}=(0,a.c)();let m;"sandbox"===b&&(m=(0,r.Ys)("#i"+t));const y="sandbox"===b?(0,r.Ys)(m.nodes()[0].contentDocument.body):(0,r.Ys)("body"),k="sandbox"===b?m.nodes()[0].contentDocument:document,j=y.select(`[id="${t}"]`);(0,c.a)(j,["point","circle","cross"],i.type,i.arrowMarkerAbsolute);const E=i.db.getVertices();let T;const M=i.db.getSubGraphs();a.l.info("Subgraphs - ",M);for(let r=M.length-1;r>=0;r--)T=M[r],i.db.addVertex(T.id,{text:T.title,type:T.labelType},"group",void 0,T.classes,T.dir);const S=j.insert("g").attr("class","subgraphs"),P=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return a.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(i.db);l=await async function(n,t,e,i,r,u,o){const s=e.select(`[id="${t}"]`).insert("g").attr("class","nodes"),h=Object.keys(n);return await Promise.all(h.map((async function(t){const e=n[t];let o="default";e.classes.length>0&&(o=e.classes.join(" ")),o+=" flowchart-label";const h=(0,a.k)(e.styles);let l=void 0!==e.text?e.text:e.id;const b={width:0,height:0},w=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let d=0,g="",p={};switch(e.type){case"round":d=5,g="rect";break;case"square":case"group":default:g="rect";break;case"diamond":g="question",p={portConstraints:"FIXED_SIDE"};break;case"hexagon":g="hexagon";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"doublecircle":g="doublecircle"}const v={labelStyle:h.labelStyle,shape:g,labelText:l,labelType:e.labelType,rx:d,ry:d,class:o,style:h.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:r.db.getTooltip(e.id)||"",domId:r.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,a.c)().flowchart.padding};let m,y;if("group"!==v.type)y=await(0,c.e)(s,v,e.dir),m=y.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=await(0,c.l)(s,v,void 0,!0);b.width=t.width,b.wrappingWidth=(0,a.c)().flowchart.wrappingWidth,b.height=t.height,b.labelNode=n.node(),v.labelData=b}const k={id:e.id,ports:"diamond"===e.type?w:[],layoutOptions:p,labelText:l,labelData:b,domId:r.db.lookUpDomId(e.id),width:null==m?void 0:m.width,height:null==m?void 0:m.height,type:e.type,el:y,parent:u.parentById[e.id]};f[v.id]=k}))),o}(E,t,y,k,i,P,l);const I=j.insert("g").attr("class","edges edgePath"),C=i.db.getEdges();l=w(C,i,l,j);Object.keys(f).forEach((n=>{const t=f[n];t.parent||l.children.push(t),void 0!==P.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),p(l.children,P),a.l.info("after layout",JSON.stringify(l,null,2));const O=await o.layout(l);v(0,0,O.children,j,S,i,0),a.l.info("after layout",O),null==(u=O.edges)||u.map((n=>{g(I,n,n.edgeData,i,P)})),(0,a.p)({},j,d.diagramPadding,d.useMaxWidth),h.remove()}},y=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,k={db:i.d,renderer:m,parser:i.p,styles:y}}}]); \ No newline at end of file diff --git a/assets/js/35511.9ef27c5c.js b/assets/js/35511.9ef27c5c.js new file mode 100644 index 0000000000..998c223745 --- /dev/null +++ b/assets/js/35511.9ef27c5c.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35511],{79580:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(r)}}}()},69746:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,r={},a=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=r[t];return e&&(e.indexOf?e:e.s.concat(e.f))},d=function(t,e){var n,i=r.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[s,function(t){this.afternoon=d(t,!1)}],a:[s,function(t){this.afternoon=d(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[s,function(t){var e=r.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[s,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[s,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=a(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function h(n){var i,s;i=n,s=r&&r.formats;for(var a=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=a.length,c=0;c<o;c+=1){var l=a[c],d=u[l],h=d&&d[0],f=d&&d[1];a[c]=f?{regex:h,parser:f}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var s=a[n];if("string"==typeof s)i+=s.length;else{var r=s.regex,c=s.parser,l=t.slice(i),d=r.exec(l)[0];c.call(e,d),t=t.replace(d,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(a=t.parseTwoDigitYear);var i=e.prototype,s=i.parse;i.parse=function(t){var e=t.date,i=t.utc,a=t.args;this.$u=i;var o=a[1];if("string"==typeof o){var c=!0===a[2],l=!0===a[3],d=c||l,u=a[2];l&&(u=a[2]),r=this.$locale(),!c&&u&&(r=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=h(e)(t),s=i.year,r=i.month,a=i.day,o=i.hours,c=i.minutes,l=i.seconds,d=i.milliseconds,u=i.zone,f=new Date,y=a||(s||r?1:f.getDate()),m=s||f.getFullYear(),k=0;s&&!r||(k=r>0?r-1:f.getMonth());var p=o||0,g=c||0,b=l||0,v=d||0;return u?new Date(Date.UTC(m,k,y,p,g,b,v+60*u.offset*1e3)):n?new Date(Date.UTC(m,k,y,p,g,b,v)):new Date(m,k,y,p,g,b,v)}catch(t){return new Date("")}}(e,o,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),d&&e!=this.format(o)&&(this.$d=new Date("")),r={}}else if(o instanceof Array)for(var f=o.length,y=1;y<=f;y+=1){a[1]=o[y-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}y===f&&(this.$d=new Date(""))}else s.call(this,t)}}}()},57635:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},35511:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>X});var i=n(7608),s=n(27693),r=n(57635),a=n(69746),o=n(79580),c=n(99854),l=n(63294),d=(n(31699),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,3],n=[1,5],i=[7,9,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,36,43,48],s=[1,32],r=[1,33],a=[1,34],o=[1,35],c=[1,36],l=[1,37],d=[1,38],u=[1,15],h=[1,16],f=[1,17],y=[1,18],m=[1,19],k=[1,20],p=[1,21],g=[1,22],b=[1,24],v=[1,25],x=[1,26],T=[1,27],_=[1,28],w=[1,30],$=[1,39],D=[1,42],S=[5,7,9,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,36,43,48],C={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,weekday:12,weekday_monday:13,weekday_tuesday:14,weekday_wednesday:15,weekday_thursday:16,weekday_friday:17,weekday_saturday:18,weekday_sunday:19,dateFormat:20,inclusiveEndDates:21,topAxis:22,axisFormat:23,tickInterval:24,excludes:25,includes:26,todayMarker:27,title:28,acc_title:29,acc_title_value:30,acc_descr:31,acc_descr_value:32,acc_descr_multiline_value:33,section:34,clickStatement:35,taskTxt:36,taskData:37,openDirective:38,typeDirective:39,closeDirective:40,":":41,argDirective:42,click:43,callbackname:44,callbackargs:45,href:46,clickStatementDebug:47,open_directive:48,type_directive:49,arg_directive:50,close_directive:51,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",13:"weekday_monday",14:"weekday_tuesday",15:"weekday_wednesday",16:"weekday_thursday",17:"weekday_friday",18:"weekday_saturday",19:"weekday_sunday",20:"dateFormat",21:"inclusiveEndDates",22:"topAxis",23:"axisFormat",24:"tickInterval",25:"excludes",26:"includes",27:"todayMarker",28:"title",29:"acc_title",30:"acc_title_value",31:"acc_descr",32:"acc_descr_value",33:"acc_descr_multiline_value",34:"section",36:"taskTxt",37:"taskData",41:":",43:"click",44:"callbackname",45:"callbackargs",46:"href",48:"open_directive",49:"type_directive",50:"arg_directive",51:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[35,2],[35,3],[35,3],[35,4],[35,3],[35,4],[35,2],[47,2],[47,3],[47,3],[47,4],[47,3],[47,4],[47,2],[38,1],[39,1],[42,1],[40,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 2:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 9:i.setWeekday("monday");break;case 10:i.setWeekday("tuesday");break;case 11:i.setWeekday("wednesday");break;case 12:i.setWeekday("thursday");break;case 13:i.setWeekday("friday");break;case 14:i.setWeekday("saturday");break;case 15:i.setWeekday("sunday");break;case 16:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 17:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 18:i.TopAxis(),this.$=r[o].substr(8);break;case 19:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 20:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 21:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 22:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 23:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 25:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 26:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 27:case 28:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 29:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 31:i.addTask(r[o-1],r[o]),this.$="task";break;case 35:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 36:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 37:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 38:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 39:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 40:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 41:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 42:case 48:this.$=r[o-1]+" "+r[o];break;case 43:case 44:case 46:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 45:case 47:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+r[o];break;case 49:i.parseDirective("%%{","open_directive");break;case 50:i.parseDirective(r[o],"type_directive");break;case 51:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 52:i.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,38:4,48:n},{1:[3]},{3:6,4:2,5:e,38:4,48:n},t(i,[2,3],{6:7}),{39:8,49:[1,9]},{49:[2,49]},{1:[2,1]},{4:31,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:23,13:s,14:r,15:a,16:o,17:c,18:l,19:d,20:u,21:h,22:f,23:y,24:m,25:k,26:p,27:g,28:b,29:v,31:x,33:T,34:_,35:29,36:w,38:4,43:$,48:n},{40:40,41:[1,41],51:D},t([41,51],[2,50]),t(i,[2,8],{1:[2,2]}),t(i,[2,4]),{4:31,10:43,12:23,13:s,14:r,15:a,16:o,17:c,18:l,19:d,20:u,21:h,22:f,23:y,24:m,25:k,26:p,27:g,28:b,29:v,31:x,33:T,34:_,35:29,36:w,38:4,43:$,48:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),t(i,[2,21]),t(i,[2,22]),t(i,[2,23]),t(i,[2,24]),t(i,[2,25]),{30:[1,44]},{32:[1,45]},t(i,[2,28]),t(i,[2,29]),t(i,[2,30]),{37:[1,46]},t(i,[2,32]),t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),t(i,[2,12]),t(i,[2,13]),t(i,[2,14]),t(i,[2,15]),{44:[1,47],46:[1,48]},{11:[1,49]},{42:50,50:[1,51]},{11:[2,52]},t(i,[2,5]),t(i,[2,26]),t(i,[2,27]),t(i,[2,31]),t(i,[2,35],{45:[1,52],46:[1,53]}),t(i,[2,41],{44:[1,54]}),t(S,[2,33]),{40:55,51:D},{51:[2,51]},t(i,[2,36],{46:[1,56]}),t(i,[2,37]),t(i,[2,39],{45:[1,57]}),{11:[1,58]},t(i,[2,38]),t(i,[2,40]),t(S,[2,34])],defaultActions:{5:[2,49],6:[2,1],42:[2,52],51:[2,51]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,d=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);u.setInput(t,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var m=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var k,p,g,b,v,x,T,_,w,$={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==k&&(w=void 0,"number"!=typeof(w=i.pop()||u.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),k=w),g=a[p]&&a[p][k]),void 0===g||!g.length||!g[0]){var D="";for(v in _=[],a[p])this.terminals_[v]&&v>2&&_.push("'"+this.terminals_[v]+"'");D=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(D,{text:u.match,token:this.terminals_[k]||k,line:u.yylineno,loc:y,expected:_})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+k);switch(g[0]){case 1:n.push(k),s.push(u.yytext),r.push(u.yylloc),n.push(g[1]),k=null,l=u.yyleng,o=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(x=this.productions_[g[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},m&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,h.yy,g[1],s,r].concat(d))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[g[1]][0]),s.push($.$),r.push($._$),T=a[n[n.length-2]][n[n.length-1]],n.push(T);break;case 3:return!0}}return!0}},E={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),48;case 1:return this.begin("type_directive"),49;case 2:return this.popState(),this.begin("arg_directive"),41;case 3:return this.popState(),this.popState(),51;case 4:return 50;case 5:return this.begin("acc_title"),29;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),31;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 46;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 44;case 27:return 45;case 28:this.begin("click");break;case 30:return 43;case 31:return 5;case 32:return 20;case 33:return 21;case 34:return 22;case 35:return 23;case 36:return 24;case 37:return 26;case 38:return 25;case 39:return 27;case 40:return 13;case 41:return 14;case 42:return 15;case 43:return 16;case 44:return 17;case 45:return 18;case 46:return 19;case 47:return"date";case 48:return 28;case 49:return"accDescription";case 50:return 34;case 51:return 36;case 52:return 37;case 53:return 41;case 54:return 7;case 55:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};function M(){this.yy={}}return C.lexer=E,M.prototype=C,C.Parser=M,new M}());d.parser=d;const u=d;s.extend(r),s.extend(a),s.extend(o);let h,f="",y="",m="",k=[],p=[],g={},b=[],v=[],x="",T="";const _=["active","done","crit","milestone"];let w=[],$=!1,D=!1,S="sunday",C=0;const E=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},M=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,a;r=t.startTime instanceof Date?s(t.startTime):s(t.startTime,e,!0),r=r.add(1,"d"),a=t.endTime instanceof Date?s(t.endTime):s(t.endTime,e,!0);const[o,c]=Y(r,a,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},Y=function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=E(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},A=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==i){let t=null;if(i[1].split(" ").forEach((function(e){let n=N(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let r=s(n,e.trim(),!0);if(r.isValid())return r.toDate();{c.l.debug("Invalid date:"+n),c.l.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime())||t.getFullYear()<-1e4||t.getFullYear()>1e4)throw new Error("Invalid date:"+n);return t}},L=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},F=function(t,e,n,i=!1){n=n.trim();let r=s(n,e.trim(),!0);if(r.isValid())return i&&(r=r.add(1,"d")),r.toDate();let a=s(t);const[o,c]=L(n);if(!Number.isNaN(o)){const t=a.add(o,c);t.isValid()&&(a=t)}return a.toDate()};let I=0;const O=function(t){return void 0===t?(I+=1,"task"+I):t};let W,z,B=[];const P={},N=function(t){const e=P[t];return B[e]},H=function(){const t=function(t){const e=B[t];let n="";switch(B[t].raw.startTime.type){case"prevTaskEnd":{const t=N(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=A(0,f,B[t].raw.startTime.startData),n&&(B[t].startTime=n)}return B[t].startTime&&(B[t].endTime=F(B[t].startTime,f,B[t].raw.endTime.data,$),B[t].endTime&&(B[t].processed=!0,B[t].manualEndTime=s(B[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),M(B[t],f,p,k))),B[t].processed};let e=!0;for(const[n,i]of B.entries())t(n),e=e&&i.processed;return e},j=function(t,e){t.split(",").forEach((function(t){let n=N(t);void 0!==n&&n.classes.push(e)}))},Z=function(t,e){w.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},G={parseDirective:function(t,e,n){c.m.parseDirective(this,t,e,n)},getConfig:()=>(0,c.c)().gantt,clear:function(){b=[],v=[],x="",w=[],I=0,W=void 0,z=void 0,B=[],f="",y="",T="",h=void 0,m="",k=[],p=[],$=!1,D=!1,C=0,g={},(0,c.v)(),S="sunday"},setDateFormat:function(t){f=t},getDateFormat:function(){return f},enableInclusiveEndDates:function(){$=!0},endDatesAreInclusive:function(){return $},enableTopAxis:function(){D=!0},topAxisEnabled:function(){return D},setAxisFormat:function(t){y=t},getAxisFormat:function(){return y},setTickInterval:function(t){h=t},getTickInterval:function(){return h},setTodayMarker:function(t){m=t},getTodayMarker:function(){return m},setAccTitle:c.s,getAccTitle:c.g,setDiagramTitle:c.r,getDiagramTitle:c.t,setDisplayMode:function(t){T=t},getDisplayMode:function(){return T},setAccDescription:c.b,getAccDescription:c.a,addSection:function(t){x=t,b.push(t)},getSections:function(){return b},getTasks:function(){let t=H();let e=0;for(;!t&&e<10;)t=H(),e++;return v=B,v},addTask:function(t,e){const n={section:x,type:x,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),s={};V(i,s,_);for(let r=0;r<i.length;r++)i[r]=i[r].trim();switch(i.length){case 1:s.id=O(),s.startTime={type:"prevTaskEnd",id:t},s.endTime={data:i[0]};break;case 2:s.id=O(),s.startTime={type:"getStartDate",startData:i[0]},s.endTime={data:i[1]};break;case 3:s.id=O(i[0]),s.startTime={type:"getStartDate",startData:i[1]},s.endTime={data:i[2]}}return s}(z,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=z,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=C,C++;const s=B.push(n);z=n.id,P[n.id]=s-1},findTaskById:N,addTaskOrg:function(t,e){const n={section:x,type:x,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};V(i,r,_);for(let s=0;s<i.length;s++)i[s]=i[s].trim();let a="";switch(i.length){case 1:r.id=O(),r.startTime=t.endTime,a=i[0];break;case 2:r.id=O(),r.startTime=A(0,f,i[0]),a=i[1];break;case 3:r.id=O(i[0]),r.startTime=A(0,f,i[1]),a=i[2]}return a&&(r.endTime=F(r.startTime,f,a,$),r.manualEndTime=s(a,"YYYY-MM-DD",!0).isValid(),M(r,f,p,k)),r}(W,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,W=n,v.push(n)},setIncludes:function(t){k=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return k},setExcludes:function(t){p=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return p},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==(0,c.c)().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==N(t)&&Z(t,(()=>{c.u.runFunc(e,...i)}))}(t,e,n)})),j(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==(0,c.c)().securityLevel&&(n=(0,i.Nm)(e)),t.split(",").forEach((function(t){void 0!==N(t)&&(Z(t,(()=>{window.open(n,"_self")})),g[t]=n)})),j(t,"clickable")},getLinks:function(){return g},bindFunctions:function(t){w.forEach((function(e){e(t)}))},parseDuration:L,isInvalidDate:E,setWeekday:function(t){S=t},getWeekday:function(){return S}};function V(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)}))}const R={monday:l.Ox9,tuesday:l.YDX,wednesday:l.EFj,thursday:l.Igq,friday:l.y2j,saturday:l.LqH,sunday:l.Zyz},q=(t,e)=>{let n=[...t].map((()=>-1/0)),i=[...t].sort(((t,e)=>t.startTime-e.startTime||t.order-e.order)),s=0;for(const r of i)for(let t=0;t<n.length;t++)if(r.startTime>=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s};let U;const X={parser:u,db:G,renderer:{setConf:function(){c.l.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=(0,c.c)().gantt,a=(0,c.c)().securityLevel;let o;"sandbox"===a&&(o=(0,l.Ys)("#i"+e));const d="sandbox"===a?(0,l.Ys)(o.nodes()[0].contentDocument.body):(0,l.Ys)("body"),u="sandbox"===a?o.nodes()[0].contentDocument:document,h=u.getElementById(e);U=h.parentElement.offsetWidth,void 0===U&&(U=1200),void 0!==r.useWidth&&(U=r.useWidth);const f=i.db.getTasks();let y=[];for(const s of f)y.push(s.type);y=function(t){const e={},n=[];for(let i=0,s=t.length;i<s;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(y);const m={};let k=2*r.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===r.displayMode){const t={};for(const n of f)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=q(t[n],e)+1;e+=i,k+=i*(r.barHeight+r.barGap),m[n]=i}}else{k+=f.length*(r.barHeight+r.barGap);for(const t of y)m[t]=f.filter((e=>e.type===t)).length}h.setAttribute("viewBox","0 0 "+U+" "+k);const p=d.select(`[id="${e}"]`),g=(0,l.Xf)().domain([(0,l.VV$)(f,(function(t){return t.startTime})),(0,l.Fp7)(f,(function(t){return t.endTime}))]).rangeRound([0,U-r.leftPadding-r.rightPadding]);f.sort((function(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:n<i&&(s=-1),s})),function(t,n,a){const o=r.barHeight,d=o+r.barGap,h=r.topPadding,f=r.leftPadding;(0,l.BYU)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(l.JHv);(function(t,e,n,a,o,c,l,d){const u=c.reduce(((t,{startTime:e})=>t?Math.min(t,e):e),0),h=c.reduce(((t,{endTime:e})=>t?Math.max(t,e):e),0),f=i.db.getDateFormat();if(!u||!h)return;const y=[];let m=null,k=s(u);for(;k.valueOf()<=h;)i.db.isInvalidDate(k,f,l,d)?m?m.end=k:m={start:k,end:k}:m&&(y.push(m),m=null),k=k.add(1,"d");p.append("g").selectAll("rect").data(y).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(d,h,f,0,a,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,s){let a=(0,l.LLu)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const o=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==o){const t=o[1],e=o[2],n=i.db.getWeekday()||r.weekday;switch(e){case"minute":a.ticks(l.Z_i.every(t));break;case"hour":a.ticks(l.WQD.every(t));break;case"day":a.ticks(l.rr1.every(t));break;case"week":a.ticks(R[n].every(t));break;case"month":a.ticks(l.F0B.every(t))}}if(p.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,l.F5q)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==o){const t=o[1],e=o[2],s=i.db.getWeekday()||r.weekday;switch(e){case"minute":n.ticks(l.Z_i.every(t));break;case"hour":n.ticks(l.WQD.every(t));break;case"day":n.ticks(l.rr1.every(t));break;case"week":n.ticks(R[s].every(t));break;case"month":n.ticks(l.F0B.every(t))}}p.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(f,h,0,a),function(t,n,s,a,o,d,u){const h=[...new Set(t.map((t=>t.order)))].map((e=>t.find((t=>t.order===e))));p.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+s-2})).attr("width",(function(){return u-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const f=p.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))-.5*o:g(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+s})).attr("width",(function(t){return t.milestone?o:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",o).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+s+.5*o).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[a,o]of y.entries())t.type===o&&(i=a%r.numberSectionStyles);let s="";return t.active?t.crit?s+=" activeCrit":s=" active":t.done?s=t.crit?" doneCrit":" done":t.crit&&(s+=" crit"),0===s.length&&(s=" task"),t.milestone&&(s=" milestone "+s),s+=i,s+=" "+n,e+s})),f.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*o),t.milestone&&(n=e+o);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+s})).attr("text-height",o).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+o);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let a=0;for(const[o,l]of y.entries())t.type===l&&(a=o%r.numberSectionStyles);let c="";return t.active&&(c=t.crit?"activeCritText"+a:"activeText"+a),t.done?c=t.crit?c+" doneCritText"+a:c+" doneText"+a:t.crit&&(c=c+" critText"+a),t.milestone&&(c+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>u?s+" taskTextOutsideLeft taskTextOutside"+a+" "+c:s+" taskTextOutsideRight taskTextOutside"+a+" "+c+" width-"+i:s+" taskText taskText"+a+" "+c+" width-"+i}));if("sandbox"===(0,c.c)().securityLevel){let t;t=(0,l.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter((function(t){return void 0!==m[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m[t.id]),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)}))}}(t,d,h,f,o,0,n),function(t,e){let n=0;const i=Object.keys(m).map((t=>[t,m[t]]));p.append("g").selectAll("text").data(i).enter().append((function(t){const e=t[0].split(c.e.lineBreakRegex),n=-(e.length-1)/2,i=u.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=u.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a<r;a++)return n+=i[r-1][1],s[1]*t/2+n*t+e})).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(d,h),function(t,e,n,s){const a=i.db.getTodayMarker();if("off"===a)return;const o=p.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",r.titleTopMargin).attr("y2",s-r.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}(f,0,0,a)}(f,U,k),(0,c.i)(p,k,U,r.useMaxWidth),p.append("text").text(i.db.getDiagramTitle()).attr("x",U/2).attr("y",r.titleTopMargin).attr("class","titleText")}},styles:t=>`\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${t.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${t.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/3653b226.149cc470.js b/assets/js/3653b226.149cc470.js new file mode 100644 index 0000000000..cb626b8216 --- /dev/null +++ b/assets/js/3653b226.149cc470.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4627],{82037:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>h,contentTitle:()=>o,default:()=>r,frontMatter:()=>n,metadata:()=>m,toc:()=>g});var i=t(24246),s=t(71670);const n={mdx:{format:"md"},date:"2022-07-08T20:00",authors:["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},o="2.0.0-beta.22",m={permalink:"/changelog/2.0.0-beta.22",source:"@site/changelog/source/2.0.0-beta.22.md",title:"2.0.0-beta.22",description:"Breaking Change",date:"2022-07-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Fl\xe1vio Silva",alias:"201flaviosilva",url:"https://github.com/201flaviosilva",imageURL:"https://github.com/201flaviosilva.png",key:"201flaviosilva"},{name:"7Wate",alias:"7Wate",url:"https://github.com/7Wate",imageURL:"https://github.com/7Wate.png",key:"7Wate"},{name:"\u8d64\u57ce\u7ed3\u8863",alias:"AkagiYui",url:"https://github.com/AkagiYui",imageURL:"https://github.com/AkagiYui.png",key:"AkagiYui"},{name:"alewolf",alias:"alewolf",url:"https://github.com/alewolf",imageURL:"https://github.com/alewolf.png",key:"alewolf"},{name:"Alexander Nestorov",alias:"alexandernst",url:"https://github.com/alexandernst",imageURL:"https://github.com/alexandernst.png",key:"alexandernst"},{name:"Ahmed Altomy",alias:"Altomy",url:"https://github.com/Altomy",imageURL:"https://github.com/Altomy.png",key:"Altomy"},{name:"Sunghyun Cho",alias:"anaclumos",url:"https://github.com/anaclumos",imageURL:"https://github.com/anaclumos.png",key:"anaclumos"},{name:"Benjamin Cabanes",alias:"bcabanes",url:"https://github.com/bcabanes",imageURL:"https://github.com/bcabanes.png",key:"bcabanes"},{name:"Ben Myers",alias:"BenDMyers",url:"https://github.com/BenDMyers",imageURL:"https://github.com/BenDMyers.png",key:"BenDMyers"},{name:"Boulet",alias:"Boulet-",url:"https://github.com/Boulet-",imageURL:"https://github.com/Boulet-.png",key:"Boulet-"},{name:"Charles Ancheta",alias:"cbebe",url:"https://github.com/cbebe",imageURL:"https://github.com/cbebe.png",key:"cbebe"},{name:"Clemie McCartney",alias:"clemiee",url:"https://github.com/clemiee",imageURL:"https://github.com/clemiee.png",key:"clemiee"},{name:"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t",alias:"datlechin",url:"https://github.com/datlechin",imageURL:"https://github.com/datlechin.png",key:"datlechin"},{name:"Dharsan B",alias:"DharsanB",url:"https://github.com/DharsanB",imageURL:"https://github.com/DharsanB.png",key:"DharsanB"},{name:"dht",alias:"dht",url:"https://github.com/dht",imageURL:"https://github.com/dht.png",key:"dht"},{name:"Diego Fran\xe7a",alias:"difranca",url:"https://github.com/difranca",imageURL:"https://github.com/difranca.png",key:"difranca"},{name:"dpang314",alias:"dpang314",url:"https://github.com/dpang314",imageURL:"https://github.com/dpang314.png",key:"dpang314"},{name:"emattia",alias:"emattia",url:"https://github.com/emattia",imageURL:"https://github.com/emattia.png",key:"emattia"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"\u51f1\u6069 Kane",alias:"Gary50613",url:"https://github.com/Gary50613",imageURL:"https://github.com/Gary50613.png",key:"Gary50613"},{name:"Wes McNamee",alias:"ghostsquad",url:"https://github.com/ghostsquad",imageURL:"https://github.com/ghostsquad.png",key:"ghostsquad"},{name:"Hyunseung Lee",alias:"HyunseungLee-Travis",url:"https://github.com/HyunseungLee-Travis",imageURL:"https://github.com/HyunseungLee-Travis.png",key:"HyunseungLee-Travis"},{name:"DOLLE",alias:"JeremyDolle",url:"https://github.com/JeremyDolle",imageURL:"https://github.com/JeremyDolle.png",key:"JeremyDolle"},{name:"Johnie Hjelm",alias:"johnie",url:"https://github.com/johnie",imageURL:"https://github.com/johnie.png",key:"johnie"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"JP",alias:"jpdriver",url:"https://github.com/jpdriver",imageURL:"https://github.com/jpdriver.png",key:"jpdriver"},{name:"Joshua Schmitt",alias:"jqshuv",url:"https://github.com/jqshuv",imageURL:"https://github.com/jqshuv.png",key:"jqshuv"},{name:"K\xfcr\u015fat \u015eim\u015fek",alias:"kursatsmsek",url:"https://github.com/kursatsmsek",imageURL:"https://github.com/kursatsmsek.png",key:"kursatsmsek"},{name:"Lane Goolsby",alias:"lanegoolsby",url:"https://github.com/lanegoolsby",imageURL:"https://github.com/lanegoolsby.png",key:"lanegoolsby"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Matthias Koch",alias:"matkoch",url:"https://github.com/matkoch",imageURL:"https://github.com/matkoch.png",key:"matkoch"},{name:"\u674e\u5c0f\u96e8",alias:"metal-young",url:"https://github.com/metal-young",imageURL:"https://github.com/metal-young.png",key:"metal-young"},{name:"Tom Mrazauskas",alias:"mrazauskas",url:"https://github.com/mrazauskas",imageURL:"https://github.com/mrazauskas.png",key:"mrazauskas"},{name:"pincman",alias:"pincman",url:"https://github.com/pincman",imageURL:"https://github.com/pincman.png",key:"pincman"},{name:"Redcamel",alias:"redcamel",url:"https://github.com/redcamel",imageURL:"https://github.com/redcamel.png",key:"redcamel"},{name:"Rein van Haaren",alias:"reinvanhaaren",url:"https://github.com/reinvanhaaren",imageURL:"https://github.com/reinvanhaaren.png",key:"reinvanhaaren"},{name:"Rudra Sen",alias:"RudraSen2",url:"https://github.com/RudraSen2",imageURL:"https://github.com/RudraSen2.png",key:"RudraSen2"},{name:"sado",alias:"sado0823",url:"https://github.com/sado0823",imageURL:"https://github.com/sado0823.png",key:"sado0823"},{name:"Dzung Do",alias:"saosangmo",url:"https://github.com/saosangmo",imageURL:"https://github.com/saosangmo.png",key:"saosangmo"},{name:"Dima Grossman",alias:"scopsy",url:"https://github.com/scopsy",imageURL:"https://github.com/scopsy.png",key:"scopsy"},{name:"SheetJSDev",alias:"SheetJSDev",url:"https://github.com/SheetJSDev",imageURL:"https://github.com/SheetJSDev.png",key:"SheetJSDev"},{name:"Joe Harrison",alias:"sigwinch28",url:"https://github.com/sigwinch28",imageURL:"https://github.com/sigwinch28.png",key:"sigwinch28"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Huy Nguyen",alias:"Smilefounder",url:"https://github.com/Smilefounder",imageURL:"https://github.com/Smilefounder.png",key:"Smilefounder"},{name:"Steven Serrata",alias:"sserrata",url:"https://github.com/sserrata",imageURL:"https://github.com/sserrata.png",key:"sserrata"},{name:"Szil\xe1rd D\xf3r\xf3",alias:"szilarddoro",url:"https://github.com/szilarddoro",imageURL:"https://github.com/szilarddoro.png",key:"szilarddoro"},{name:"Le Thi Van",alias:"vannyle",url:"https://github.com/vannyle",imageURL:"https://github.com/vannyle.png",key:"vannyle"},{name:"Webber Takken",alias:"webbertakken",url:"https://github.com/webbertakken",imageURL:"https://github.com/webbertakken.png",key:"webbertakken"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Paul O\u2019Shannessy",alias:"zpao",url:"https://github.com/zpao",imageURL:"https://github.com/zpao.png",key:"zpao"}],frontMatter:{mdx:{format:"md"},date:"2022-07-08T20:00",authors:["201flaviosilva","7Wate","AkagiYui","alewolf","alexandernst","Altomy","anaclumos","bcabanes","BenDMyers","Boulet-","cbebe","clemiee","datlechin","DharsanB","dht","difranca","dpang314","emattia","forresst","Gary50613","ghostsquad","HyunseungLee-Travis","JeremyDolle","johnie","johnnyreilly","Josh-Cena","jpdriver","jqshuv","kursatsmsek","lanegoolsby","lex111","matkoch","metal-young","mrazauskas","pincman","redcamel","reinvanhaaren","RudraSen2","sado0823","saosangmo","scopsy","SheetJSDev","sigwinch28","slorber","Smilefounder","sserrata","szilarddoro","vannyle","webbertakken","yangshun","zpao"]},unlisted:!1,prevItem:{title:"2.0.0-rc.1",permalink:"/changelog/2.0.0-rc.1"},nextItem:{title:"2.0.0-beta.21",permalink:"/changelog/2.0.0-beta.21"},listPageLink:"/changelog/"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},g=[];function l(a){return(0,i.jsx)(i.Fragment,{})}function r(a={}){const{wrapper:e}={...(0,s.a)(),...a.components};return e?(0,i.jsx)(e,{...a,children:(0,i.jsx)(l,{...a})}):l()}},71670:(a,e,t)=>{t.d(e,{Z:()=>m,a:()=>o});var i=t(27378);const s={},n=i.createContext(s);function o(a){const e=i.useContext(n);return i.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function m(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(s):a.components||s:o(a.components),i.createElement(n.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/3695c081.99591518.js b/assets/js/3695c081.99591518.js new file mode 100644 index 0000000000..e8443cf7ee --- /dev/null +++ b/assets/js/3695c081.99591518.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43898],{30710:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Another category with index","slug":"/category/another-category-with-index","permalink":"/tests/docs/category/another-category-with-index","sidebar":"sidebar","navigation":{"previous":{"title":"Sidebar item description tests","permalink":"/tests/docs/category/sidebar-item-description-tests"},"next":{"title":"Another test page","permalink":"/tests/docs/more-test"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/36994c47.fbc70ebd.js b/assets/js/36994c47.fbc70ebd.js new file mode 100644 index 0000000000..40a77ede14 --- /dev/null +++ b/assets/js/36994c47.fbc70ebd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59208],{94468:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/3716f59c.418249d4.js b/assets/js/3716f59c.418249d4.js new file mode 100644 index 0000000000..191da81d97 --- /dev/null +++ b/assets/js/3716f59c.418249d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59904],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),l=n(44479),a=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function j(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=a?a:d;return h({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var m=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=l.indexOf(t),c=i[r].value;c!==n&&(a(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[l.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>l.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=j(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},e,t)),(0,r.jsx)(k,w({},e,t))]})}function E(e){const t=(0,m.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,r.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,r.jsx)(a,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:l})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),l=n(61132),a=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),l=n(32711),a=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,m({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(m({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){I(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",B(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:c},c,r);var A,_,V=n(89583),$=n(6324),q=n.n($);function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const R=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),G=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},H=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},W),F=null!=(F={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?F:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(F)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(F)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(F,e))})),z);var z,F;const X=Object.keys(W);function U(e,t){const n=e.map((e=>{const{start:n,end:r}=H[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&G.test(c)){const e=c.match(G).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=q()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return U(["js","jsBlock"],t);case"jsx":case"tsx":return U(["js","jsBlock","jsx"],t);case"html":return U(["js","jsBlock","html"],t);case"python":case"py":case"bash":return U(["bash"],t);case"markdown":case"md":return U(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return U(["tex"],t);case"lua":case"haskell":case"sql":return U(["lua"],t);case"wasm":return U(["wasm"],t);case"vb":case"vba":case"visual-basic":return U(["vb","rem"],t);case"vbnet":return U(["vbnet","rem"],t);case"batch":return U(["rem"],t);case"basic":return U(["rem","f90"],t);case"fsharp":return U(["js","ml"],t);case"ocaml":case"sml":return U(["ml"],t);case"fortran":return U(["f90"],t);case"cobol":return U(["cobol"],t);default:return U(X,t)}}(r,o),i=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:p[t]&&(l[p[t]].range+=`${l[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(l).forEach((([e,{range:t}])=>{q()(t).forEach((t=>{var n;null!==(n=(A=d)[_=t])&&void 0!==n||(A[_]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Y(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,Q.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(me,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:a),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(R))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:j,code:m}=J(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:m,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:m})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const Te=(Le=function(e){var{children:t}=e,n=Ie(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:re;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Be({scope:Z},e)):(0,o.jsx)(Le,Be({},e))});var Le;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},59610:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>a,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),l=n(82064);const a={sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},u="\ud83d\udce6 plugin-google-gtag",p={id:"api/plugins/plugin-google-gtag",title:"\ud83d\udce6 plugin-google-gtag",description:"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.",source:"@site/docs/api/plugins/plugin-google-gtag.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-gtag.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,sidebarPosition:7,frontMatter:{sidebar_position:7,slug:"/api/plugins/@docusaurus/plugin-google-gtag"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"},next:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-plugin-google-gtag",children:"\ud83d\udce6 plugin-google-gtag"}),"\n","\n",(0,r.jsxs)(t.p,{children:["The default ",(0,r.jsx)(t.a,{href:"https://developers.google.com/analytics/devguides/collection/gtagjs/",children:"Global Site Tag (gtag.js)"})," plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if your gtag is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-gtag\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-gtag\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"trackingID"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)("code",{children:"string | string[]"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsx)(t.td,{children:"The tracking ID of your gtag service. It is possible to provide multiple ids."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"anonymizeIP"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"boolean"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"false"})}),(0,r.jsx)(t.td,{children:"Whether the IP should be anonymized when sending requests."})]})]})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(l.Z,{pluginName:"@docusaurus/plugin-google-gtag",presetOptionName:"gtag",code:"{\n trackingID: 'G-999X9XX9XX',\n anonymizeIP: true,\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.73329cc1.js b/assets/js/3720c009.73329cc1.js new file mode 100644 index 0000000000..af79b91fdc --- /dev/null +++ b/assets/js/3720c009.73329cc1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13751],{28211:(e,t,r)=>{r.r(t),r.d(t,{default:()=>d});var n=r(24246),a=(r(27378),r(40624)),s=r(44008),c=r(89583),l=r(19816),o=r(7711),i=r(10057),u=r(52615);function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function f(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function p({title:e}){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.d,{title:e}),(0,n.jsx)(i.Z,{tag:"doc_tags_list"})]})}function j({tags:e,title:t}){return(0,n.jsx)(s.FG,{className:(0,a.Z)(c.k.page.docsTagsListPage),children:(0,n.jsx)("div",{className:"container margin-vert--lg",children:(0,n.jsx)("div",{className:"row",children:(0,n.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,n.jsx)(u.Z,{as:"h1",children:t}),(0,n.jsx)(o.Z,{tags:e})]})})})})}function d(e){const t=(0,l.M)();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(p,b(f({},e),{title:t})),(0,n.jsx)(j,b(f({},e),{title:t}))]})}},52977:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),a=(r(27378),r(40624)),s=r(41428);const c={tag:"tag_Nd8t",tagRegular:"tagRegular_TiLs",tagWithCount:"tagWithCount_AQg7"};function l({permalink:e,label:t,count:r}){return(0,n.jsxs)(s.Z,{href:e,className:(0,a.Z)(c.tag,r?c.tagWithCount:c.tagRegular),children:[t,r&&(0,n.jsx)("span",{children:r})]})}},7711:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(24246),a=(r(27378),r(19816)),s=r(52977),c=r(52615);const l={tag:"tag_SyQ5"};function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}function u({letterEntry:e}){return(0,n.jsxs)("article",{children:[(0,n.jsx)(c.Z,{as:"h2",id:e.letter,children:e.letter}),(0,n.jsx)("ul",{className:"padding--none",children:e.tags.map((e=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(s.Z,i({},e))},e.permalink)))}),(0,n.jsx)("hr",{})]})}function g({tags:e}){const t=(0,a.P)(e);return(0,n.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,n.jsx)(u,{letterEntry:e},e.letter)))})}},19816:(e,t,r)=>{r.d(t,{M:()=>c,P:()=>l});var n,a,s=r(36712);const c=()=>(0,s.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function l(e){const t={};return Object.values(e).forEach((e=>{const r=function(e){return e[0].toUpperCase()}(e.label);var s;null!==(s=(n=t)[a=r])&&void 0!==s||(n[a]=[]),t[r].push(e)})),Object.entries(t).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>({letter:e,tags:t.sort(((e,t)=>e.label.localeCompare(t.label)))})))}}}]); \ No newline at end of file diff --git a/assets/js/37bd3c63.ced06f8e.js b/assets/js/37bd3c63.ced06f8e.js new file mode 100644 index 0000000000..67ec4f6af9 --- /dev/null +++ b/assets/js/37bd3c63.ced06f8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69530],{42618:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>h,toc:()=>l});var i=r(24246),t=r(71670);const n={mdx:{format:"md"},date:"2021-07-28T20:00",authors:["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},o="2.0.0-beta.4",h={permalink:"/changelog/2.0.0-beta.4",source:"@site/changelog/source/2.0.0-beta.4.md",title:"2.0.0-beta.4",description:"New Feature",date:"2021-07-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"antonvasilev52",alias:"antonvasilev52",url:"https://github.com/antonvasilev52",imageURL:"https://github.com/antonvasilev52.png",key:"antonvasilev52"},{name:"Arnaud Jeannin",alias:"arnaudjnn",url:"https://github.com/arnaudjnn",imageURL:"https://github.com/arnaudjnn.png",key:"arnaudjnn"},{name:"Christian Flach",alias:"cmfcmf",url:"https://github.com/cmfcmf",imageURL:"https://github.com/cmfcmf.png",key:"cmfcmf"},{name:"Arijit Kundu",alias:"covalentbond",url:"https://github.com/covalentbond",imageURL:"https://github.com/covalentbond.png",key:"covalentbond"},{name:"David Zhao",alias:"davidzhao",url:"https://github.com/davidzhao",imageURL:"https://github.com/davidzhao.png",key:"davidzhao"},{name:"David Barrat",alias:"dbrrt",url:"https://github.com/dbrrt",imageURL:"https://github.com/dbrrt.png",key:"dbrrt"},{name:"Dan Gebhardt",alias:"dgeb",url:"https://github.com/dgeb",imageURL:"https://github.com/dgeb.png",key:"dgeb"},{name:"Fran\xe7ois Massot",alias:"fmassot",url:"https://github.com/fmassot",imageURL:"https://github.com/fmassot.png",key:"fmassot"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Lennart Koopmann",alias:"lennartkoopmann",url:"https://github.com/lennartkoopmann",imageURL:"https://github.com/lennartkoopmann.png",key:"lennartkoopmann"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lukas Bach",alias:"lukasbach",url:"https://github.com/lukasbach",imageURL:"https://github.com/lukasbach.png",key:"lukasbach"},{name:"Mar\xe7al Junior",alias:"marssaljr",url:"https://github.com/marssaljr",imageURL:"https://github.com/marssaljr.png",key:"marssaljr"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Michel Weststrate",alias:"mweststrate",url:"https://github.com/mweststrate",imageURL:"https://github.com/mweststrate.png",key:"mweststrate"},{name:"Nazar",alias:"NazarStreletskyi",url:"https://github.com/NazarStreletskyi",imageURL:"https://github.com/NazarStreletskyi.png",key:"NazarStreletskyi"},{name:"nirtamir2",alias:"nirtamir2",url:"https://github.com/nirtamir2",imageURL:"https://github.com/nirtamir2.png",key:"nirtamir2"},{name:"Przemys\u0142aw Chojecki",alias:"pcho",url:"https://github.com/pcho",imageURL:"https://github.com/pcho.png",key:"pcho"},{name:"Philipp Muens",alias:"pmuens",url:"https://github.com/pmuens",imageURL:"https://github.com/pmuens.png",key:"pmuens"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Raz Luvaton",alias:"rluvaton",url:"https://github.com/rluvaton",imageURL:"https://github.com/rluvaton.png",key:"rluvaton"},{name:"Sergio Moreno",alias:"semoal",url:"https://github.com/semoal",imageURL:"https://github.com/semoal.png",key:"semoal"},{name:"Cl\xe9ment Vannicatte",alias:"shortcuts",url:"https://github.com/shortcuts",imageURL:"https://github.com/shortcuts.png",key:"shortcuts"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Taylor Reece",alias:"taylorreece",url:"https://github.com/taylorreece",imageURL:"https://github.com/taylorreece.png",key:"taylorreece"},{name:"tohid nateghi",alias:"tohidnateghi",url:"https://github.com/tohidnateghi",imageURL:"https://github.com/tohidnateghi.png",key:"tohidnateghi"},{name:"\u9648\u6768\u6587",alias:"wenerme",url:"https://github.com/wenerme",imageURL:"https://github.com/wenerme.png",key:"wenerme"}],frontMatter:{mdx:{format:"md"},date:"2021-07-28T20:00",authors:["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},unlisted:!1,prevItem:{title:"2.0.0-beta.5",permalink:"/changelog/2.0.0-beta.5"},nextItem:{title:"2.0.0-beta.3",permalink:"/changelog/2.0.0-beta.3"},listPageLink:"/changelog/page/2"},c={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 28",id:"committers-28",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4912",children:"#4912"})," feat(v2): add back to top button (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5235",children:"#5235"})," feat: docusaurus.new + improve StackBlitz playground integration (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5203",children:"#5203"})," feat: docs plugin options sidebarCollapsible + sidebarCollapsed (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5207",children:"#5207"})," feat: multiple playground choices (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4273",children:"#4273"})," feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5203",children:"#5203"})," feat: docs plugin options sidebarCollapsible + sidebarCollapsed (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5173",children:"#5173"})," feat(v2): generalize usage of _ prefix convention to exclude content files/folders (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4273",children:"#4273"})," feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5232",children:"#5232"})," fix(v2): blog should parse frontMatter.date even when time is present (",(0,i.jsx)(s.a,{href:"https://github.com/wenerme",children:"@wenerme"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5230",children:"#5230"})," fix(v2): remove top margin from first element inside doc article (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5229",children:"#5229"})," fix(v2): keep mobile TOC after hydration (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5179",children:"#5179"})," fix(v2): wrap dropdown item to missing li element + remove extra attributes (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5183",children:"#5183"})," fix(v2): pass all props to CodeBlock component (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5176",children:"#5176"})," fix(v2): Fix type for navlink label (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5172",children:"#5172"})," fix(v2): hide mobile collapsible doc toc if no headings (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5161",children:"#5161"})," fix(v2): disable default behavior when click on collapsible item (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5151",children:"#5151"})," fix(v2): add missing french translations for mobile (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5104",children:"#5104"})," fix(v2): fix SkipToContent programmatic focus when updating querystring (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5214",children:"#5214"})," fix: upgrade Docsearch to avoid layout shift (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5135",children:"#5135"})," chore(v2): update @docsearch/react (",(0,i.jsx)(s.a,{href:"https://github.com/shortcuts",children:"@shortcuts"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5204",children:"#5204"})," fix: cli upgrade helper fail when no ",(0,i.jsx)(s.code,{children:"package.dependencies"})," (",(0,i.jsx)(s.a,{href:"https://github.com/mweststrate",children:"@mweststrate"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5164",children:"#5164"})," fix(v2): revert webpack.resolve.symlinks = false (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5126",children:"#5126"})," fix(v2): remove webpackConfig.resolve.symlinks: true (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5110",children:"#5110"})," fix(v2): Fix update-notifier not run at first and not notifying consistently (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5199",children:"#5199"})," fix(v2): Fix MDX docs being considered as partials when siteDir match the _ prefix convention (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5185",children:"#5185"})," fix(v2): add base URL to content attribute of head tags PWA (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5169",children:"#5169"})," refactor(v2): automatically add base URL to PWA head tags (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5173",children:"#5173"})," feat(v2): generalize usage of _ prefix convention to exclude content files/folders (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5159",children:"#5159"})," fix(v2): Fix Collapsible hydration layout shift (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5146",children:"#5146"})," fix(v2): improve work of useCollapsible hook with multiple clicks (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5129",children:"#5129"})," fix(v2): fix d.ts lint error (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5116",children:"#5116"})," fix(v2): introduce useCollapsible to fix collapsible animation perf issues (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5102",children:"#5102"})," fix(v2): fix redirect plugin when trailingSlash=false for .html extension (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5228",children:"#5228"})," refactor(v2): fix small typo in Russian translation (",(0,i.jsx)(s.a,{href:"https://github.com/antonvasilev52",children:"@antonvasilev52"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5222",children:"#5222"})," chore(v2): update Infima to alpha 28 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5224",children:"#5224"})," refactor(v2): update Russian translation (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5217",children:"#5217"})," refactor(v2): improved Farsi default translations (",(0,i.jsx)(s.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5171",children:"#5171"})," refactor(v2): increase content area if blog sidebar is off (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5154",children:"#5154"})," refactor(v2): Hindi translation for semantic doc sidebar (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5145",children:"#5145"})," refactor(v2): use Collapsible for mobile nav items (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5138",children:"#5138"})," refactor(v2): Update Hebrew translations (",(0,i.jsx)(s.a,{href:"https://github.com/nirtamir2",children:"@nirtamir2"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5140",children:"#5140"})," refactor(v2): bn translation improvements for semantic doc sidebar (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5139",children:"#5139"})," feat(v2): complete Chinese code translations (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5118",children:"#5118"})," refactor(v2): pt-BR translations improve semantic doc sidebar and tags (",(0,i.jsx)(s.a,{href:"https://github.com/marssaljr",children:"@marssaljr"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5215",children:"#5215"})," refactor: make code block shadows consistent with new admonitions (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5193",children:"#5193"})," refactor: redesign admonitions/callouts/quotes (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5168",children:"#5168"})," refactor(v2): mobile dropdown navbar: expand when subitem become active (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5236",children:"#5236"})," docs: add Verdaccio.org to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/semoal",children:"@semoal"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5218",children:"#5218"})," docs(v2): remove vector.dev from showcase (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5212",children:"#5212"})," docs: mention Link can be used for external links (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5210",children:"#5210"})," docs(v2): Elaboration of raw-loader in markdown react component (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5191",children:"#5191"})," docs: user should restart docusaurus after adding prism additionalLanguage (",(0,i.jsx)(s.a,{href:"https://github.com/tohidnateghi",children:"@tohidnateghi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5175",children:"#5175"})," docs: update API docs on navbar behavior (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5189",children:"#5189"})," docs(v2): Add orbitjs site to showcase page (",(0,i.jsx)(s.a,{href:"https://github.com/dgeb",children:"@dgeb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5177",children:"#5177"})," docs(v2): add easyjwt to users (",(0,i.jsx)(s.a,{href:"https://github.com/dbrrt",children:"@dbrrt"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5187",children:"#5187"})," docs(v2): Add quickwit to user.js and png. (",(0,i.jsx)(s.a,{href:"https://github.com/fmassot",children:"@fmassot"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5184",children:"#5184"})," docs(v2): Add react-complex-tree to users.js (",(0,i.jsx)(s.a,{href:"https://github.com/lukasbach",children:"@lukasbach"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5178",children:"#5178"})," docs(v2): Update tutorial link (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5158",children:"#5158"})," docs(v2): Update deploy with Qovery docs for V2 (",(0,i.jsx)(s.a,{href:"https://github.com/arnaudjnn",children:"@arnaudjnn"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5152",children:"#5152"})," docs(v2): Indent code example to improve readability (",(0,i.jsx)(s.a,{href:"https://github.com/rluvaton",children:"@rluvaton"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5133",children:"#5133"})," docs(v2): GIF format is not suported (",(0,i.jsx)(s.a,{href:"https://github.com/NazarStreletskyi",children:"@NazarStreletskyi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5117",children:"#5117"})," docs(v2): Add Prismatic docs page to showcase. (",(0,i.jsx)(s.a,{href:"https://github.com/taylorreece",children:"@taylorreece"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5115",children:"#5115"})," docs(v2): Add LiveKit to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/davidzhao",children:"@davidzhao"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5114",children:"#5114"})," docs(v2): add Blink Shell Documentation to Showcase (",(0,i.jsx)(s.a,{href:"https://github.com/pcho",children:"@pcho"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5112",children:"#5112"})," docs(v2): clarify how to disable edit links entirely (",(0,i.jsx)(s.a,{href:"https://github.com/lennartkoopmann",children:"@lennartkoopmann"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5113",children:"#5113"})," docs(v2): Add CryptoDevHub to Showcase (",(0,i.jsx)(s.a,{href:"https://github.com/pmuens",children:"@pmuens"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5234",children:"#5234"})," chore: Upgrade infima 29 (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5130",children:"#5130"})," test(v2): dogfooding: add huge sidebar for testing purposes (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5223",children:"#5223"})," chore: fix iframe background color in dark mode (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5206",children:"#5206"})," misc: add script to keep starters branch/repos up-to-date (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5167",children:"#5167"})," fix(v2): fix website PWA icon hrefs (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5166",children:"#5166"})," fix(v2): fix yarn clear command (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5137",children:"#5137"})," chore: upgrade crowdin (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5111",children:"#5111"})," misc: monitor site global data with build size bot (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5136",children:"#5136"})," perf(v2): lazy sidebar categories / collapsibles, reduce html output / build times (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5130",children:"#5130"})," test(v2): dogfooding: add huge sidebar for testing purposes (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-28",children:"Committers: 28"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Arijit Kundu (",(0,i.jsx)(s.a,{href:"https://github.com/covalentbond",children:"@covalentbond"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Arnaud Jeannin (",(0,i.jsx)(s.a,{href:"https://github.com/arnaudjnn",children:"@arnaudjnn"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Christian Flach (",(0,i.jsx)(s.a,{href:"https://github.com/cmfcmf",children:"@cmfcmf"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Cl\xe9ment Vannicatte (",(0,i.jsx)(s.a,{href:"https://github.com/shortcuts",children:"@shortcuts"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dan Gebhardt (",(0,i.jsx)(s.a,{href:"https://github.com/dgeb",children:"@dgeb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["David Barrat (",(0,i.jsx)(s.a,{href:"https://github.com/dbrrt",children:"@dbrrt"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["David Zhao (",(0,i.jsx)(s.a,{href:"https://github.com/davidzhao",children:"@davidzhao"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Forresst (",(0,i.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Fran\xe7ois Massot (",(0,i.jsx)(s.a,{href:"https://github.com/fmassot",children:"@fmassot"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Lennart Koopmann (",(0,i.jsx)(s.a,{href:"https://github.com/lennartkoopmann",children:"@lennartkoopmann"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Lukas Bach (",(0,i.jsx)(s.a,{href:"https://github.com/lukasbach",children:"@lukasbach"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Mar\xe7al Junior (",(0,i.jsx)(s.a,{href:"https://github.com/marssaljr",children:"@marssaljr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Massoud Maboudi (",(0,i.jsx)(s.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Michel Weststrate (",(0,i.jsx)(s.a,{href:"https://github.com/mweststrate",children:"@mweststrate"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Nazar (",(0,i.jsx)(s.a,{href:"https://github.com/NazarStreletskyi",children:"@NazarStreletskyi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Philipp Muens (",(0,i.jsx)(s.a,{href:"https://github.com/pmuens",children:"@pmuens"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Pranab Das (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Przemys\u0142aw Chojecki (",(0,i.jsx)(s.a,{href:"https://github.com/pcho",children:"@pcho"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Raz Luvaton (",(0,i.jsx)(s.a,{href:"https://github.com/rluvaton",children:"@rluvaton"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sergio Moreno (",(0,i.jsx)(s.a,{href:"https://github.com/semoal",children:"@semoal"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Taylor Reece (",(0,i.jsx)(s.a,{href:"https://github.com/taylorreece",children:"@taylorreece"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/antonvasilev52",children:"@antonvasilev52"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/nirtamir2",children:"@nirtamir2"})}),"\n",(0,i.jsxs)(s.li,{children:["tohid nateghi (",(0,i.jsx)(s.a,{href:"https://github.com/tohidnateghi",children:"@tohidnateghi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["\u9648\u6768\u6587 (",(0,i.jsx)(s.a,{href:"https://github.com/wenerme",children:"@wenerme"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>h,a:()=>o});var i=r(27378);const t={},n=i.createContext(t);function o(e){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/37de9ece.5975a542.js b/assets/js/37de9ece.5975a542.js new file mode 100644 index 0000000000..fc00ee30be --- /dev/null +++ b/assets/js/37de9ece.5975a542.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5304],{12915:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var a=o(24246),i=o(71670);const n={mdx:{format:"md"},date:"2021-09-02T20:00",authors:["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},r="2.0.0-beta.6",s={permalink:"/changelog/2.0.0-beta.6",source:"@site/changelog/source/2.0.0-beta.6.md",title:"2.0.0-beta.6",description:"New Feature",date:"2021-09-02T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ali Saki",alias:"3alisaki",url:"https://github.com/3alisaki",imageURL:"https://github.com/3alisaki.png",key:"3alisaki"},{name:"Antony Messerli",alias:"antonym",url:"https://github.com/antonym",imageURL:"https://github.com/antonym.png",key:"antonym"},{name:"farshid",alias:"farshidinanloo",url:"https://github.com/farshidinanloo",imageURL:"https://github.com/farshidinanloo.png",key:"farshidinanloo"},{name:"Gabriel Csapo",alias:"gabrielcsapo",url:"https://github.com/gabrielcsapo",imageURL:"https://github.com/gabrielcsapo.png",key:"gabrielcsapo"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Daniel Costrasel",alias:"ohkimur",url:"https://github.com/ohkimur",imageURL:"https://github.com/ohkimur.png",key:"ohkimur"},{name:"Oscar Lorentzon",alias:"oscarlorentzon",url:"https://github.com/oscarlorentzon",imageURL:"https://github.com/oscarlorentzon.png",key:"oscarlorentzon"},{name:"Rohit Gohri",alias:"rohit-gohri",url:"https://github.com/rohit-gohri",imageURL:"https://github.com/rohit-gohri.png",key:"rohit-gohri"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2021-09-02T20:00",authors:["3alisaki","antonym","farshidinanloo","gabrielcsapo","Josh-Cena","lex111","ohkimur","oscarlorentzon","rohit-gohri","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-beta.7",permalink:"/changelog/2.0.0-beta.7"},nextItem:{title:"2.0.0-beta.5",permalink:"/changelog/2.0.0-beta.5"},listPageLink:"/changelog/page/2"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function m(t){return(0,a.jsx)(a.Fragment,{})}function c(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,a.jsx)(e,{...t,children:(0,a.jsx)(m,{...t})}):m()}},71670:(t,e,o)=>{o.d(e,{Z:()=>s,a:()=>r});var a=o(27378);const i={},n=a.createContext(i);function r(t){const e=a.useContext(n);return a.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:r(t.components),a.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3813dac9.47052133.js b/assets/js/3813dac9.47052133.js new file mode 100644 index 0000000000..80bb8edf9f --- /dev/null +++ b/assets/js/3813dac9.47052133.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84348],{32546:(e,t,n)=>{n.r(t),n.d(t,{default:()=>l});var a=n(24246),s=n(27378),c=n(40624),i=n(78844),o=n(88613);const r=function(){!function(e,t,n,a){function s(){if(!t.getElementById("canny-jssdk")){let e=t.getElementsByTagName(a)[0],n=t.createElement(a);n.type="text/javascript",n.async=!0,n.src="https://canny.io/sdk.js",e.parentNode.insertBefore(n,e)}}if("function"!=typeof e.Canny){var c=function(){c.q.push(arguments)};c.q=[],e.Canny=c,"complete"===t.readyState?s():e.attachEvent?e.attachEvent("onload",s):e.addEventListener("load",s,!1)}}(window,document,0,"script")},d={main:"main_LiBd"},u="054e0e53-d951-b14c-7e74-9eb8f9ed2f91";function f({basePath:e}){(0,s.useEffect)((()=>{r()}),[]);const t=function(){const{colorMode:e}=(0,i.I)();return"light"===e?"light":"dark"}();return(0,s.useEffect)((()=>{const{Canny:n}=window;n("render",{boardToken:u,basePath:e,theme:t})}),[e,t]),(0,a.jsx)("main",{className:(0,c.Z)("container","margin-vert--lg",d.main),"data-canny":!0},t)}function l({basePath:e}){return(0,a.jsx)(o.Z,{title:"Feedback",description:"Docusaurus 2 Feature Requests page",children:(0,a.jsx)(f,{basePath:e})})}}}]); \ No newline at end of file diff --git a/assets/js/381bbac3.b5ee7575.js b/assets/js/381bbac3.b5ee7575.js new file mode 100644 index 0000000000..c5dacfebe9 --- /dev/null +++ b/assets/js/381bbac3.b5ee7575.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2574],{36071:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>f});var n=o(24246),s=o(71670);const a={title:"First post with footnote to test posts with same footnote reference."},r=void 0,i={permalink:"/tests/blog/2022/04/20/dup-footnote",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx",source:"@site/_dogfooding/_blog tests/2022-04-20-dup-footnote.mdx",title:"First post with footnote to test posts with same footnote reference.",description:"foo",date:"2022-04-20T00:00:00.000Z",tags:[],readingTime:1.8,hasTruncateMarker:!1,authors:[],frontMatter:{title:"First post with footnote to test posts with same footnote reference."},unlisted:!1,prevItem:{title:"A post with html slug",permalink:"/tests/blog/x/y/z.html"},nextItem:{title:"Second post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/22/dup-footnote"}},c={authorsImageUrls:[]},f=[];function l(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["foo",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-1-ba6e3a",id:"user-content-fnref-1-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),"\n",(0,n.jsxs)(t.p,{children:["bar",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-2-ba6e3a",id:"user-content-fnref-2-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})]}),"\n",(0,n.jsxs)(t.p,{children:["baz",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-3-ba6e3a",id:"user-content-fnref-3-ba6e3a","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})]}),"\n","\n",(0,n.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,n.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{id:"user-content-fn-1-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["foo ",(0,n.jsx)(t.a,{href:"#user-content-fnref-1-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-2-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["bar ",(0,n.jsx)(t.a,{href:"#user-content-fnref-2-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-3-ba6e3a",children:["\n",(0,n.jsxs)(t.p,{children:["baz ",(0,n.jsx)(t.a,{href:"#user-content-fnref-3-ba6e3a","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>r});var n=o(27378);const s={},a=n.createContext(s);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38295533.c1854b79.js b/assets/js/38295533.c1854b79.js new file mode 100644 index 0000000000..87b5fae5a6 --- /dev/null +++ b/assets/js/38295533.c1854b79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72285],{98639:t=>{t.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Getting Started","slug":"/category/getting-started","permalink":"/docs/category/getting-started","sidebar":"docs","navigation":{"previous":{"title":"Introduction","permalink":"/docs/"},"next":{"title":"Installation","permalink":"/docs/installation"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/38caefbe.d9988014.js b/assets/js/38caefbe.d9988014.js new file mode 100644 index 0000000000..bea673df56 --- /dev/null +++ b/assets/js/38caefbe.d9988014.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63423],{94544:(e,s,n)=>{n.d(s,{Z:()=>r});var l=n(24246),a=(n(27378),n(29088));function r({children:e,fallback:s}){return(0,a.Z)()?(0,l.jsx)(l.Fragment,{children:null==e?void 0:e()}):null!=s?s:null}},95637:(e,s,n)=>{n.r(s),n.d(s,{default:()=>i});var l=n(24246),a=n(27378),r=n(94544),c=n(88613),h=n(52615);const u=a.lazy((()=>n.e(93940).then(n.bind(n,28109))));function i(){return(0,l.jsx)(c.Z,{children:(0,l.jsxs)("main",{style:{padding:30},children:[(0,l.jsx)(h.Z,{as:"h1",children:"React 18 tests"}),(0,l.jsx)("hr",{}),(0,l.jsx)(h.Z,{as:"h2",children:"Suspense > HeavyComponent"}),(0,l.jsx)(a.Suspense,{fallback:"[Suspense fallback] - Suspense > HeavyComponent",children:(0,l.jsx)(u,{})}),(0,l.jsx)("hr",{}),(0,l.jsx)(h.Z,{as:"h2",children:"BrowserOnly > Suspense > HeavyComponent"}),(0,l.jsx)(r.Z,{children:()=>(0,l.jsx)(a.Suspense,{fallback:"[Suspense fallback] - BrowserOnly > Suspense > HeavyComponent",children:(0,l.jsx)(u,{})})}),(0,l.jsx)("hr",{}),(0,l.jsx)(h.Z,{as:"h2",children:"Suspense > BrowserOnly > HeavyComponent"}),(0,l.jsx)(a.Suspense,{fallback:"[Suspense fallback] - Suspense > BrowserOnly > HeavyComponent",children:(0,l.jsx)(r.Z,{children:()=>(0,l.jsx)(u,{})})})]})})}}}]); \ No newline at end of file diff --git a/assets/js/38dd9662.a14fe98b.js b/assets/js/38dd9662.a14fe98b.js new file mode 100644 index 0000000000..8826a6f1fd --- /dev/null +++ b/assets/js/38dd9662.a14fe98b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39391],{80282:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},61132:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(24246),s=(t(27378),t(40624));const a={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(a.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),s=t(27378),a=t(40624),o=t(75527),i=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,u.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function m({queryString:e=!1,groupId:n}){const t=(0,i.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,c._X)(r),o=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[a,o]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=b(e),[o,i]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[c,u]=m({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:a})?e:null})();(0,l.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),p(e)}),[u,p,a]),tabValues:a}}var x=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){w(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),u=e=>{const n=e.currentTarget,r=l.indexOf(n),a=i[r].value;a!==t&&(c(n),s(a))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},s),{className:(0,a.Z)("tabs__item",y.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function I(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,r.jsx)(k,v({},e,n)),(0,r.jsx)(P,v({},e,n))]})}function S(e){const n=(0,x.Z)();return(0,r.jsx)(I,O(v({},e),{children:g(e.children)}),String(n))}},6698:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(24246),s=(t(27378),t(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){o(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function c({children:e,minHeight:n,url:t="http://localhost:3000",style:o,bodyStyle:c}){return(0,r.jsxs)("div",{className:a.browserWindow,style:l(i({},o),{minHeight:n}),children:[(0,r.jsxs)("div",{className:a.browserWindowHeader,children:[(0,r.jsxs)("div",{className:a.buttons,children:[(0,r.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(a.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar}),(0,r.jsx)("span",{className:a.bar})]})})]}),(0,r.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},36759:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},32537:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>u,toc:()=>h});var r=t(24246),s=t(71670),a=t(6698),o=t(97555),i=t(61132);const l={title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-01-27T00:00:00.000Z")},c=void 0,u={permalink:"/blog/releases/2.3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.3/index.mdx",source:"@site/blog/releases/2.3/index.mdx",title:"Docusaurus 2.3",description:"We are happy to announce Docusaurus 2.3.",date:"2023-01-27T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:2.89,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.3",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-01-27T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1694767701e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"},nextItem:{title:"Docusaurus 2.2",permalink:"/blog/releases/2.2"}},d={image:t(80282).Z,authorsImageUrls:[void 0]},h=[{value:"Highlights",id:"highlights",level:2},{value:"Google Tag Manager plugin",id:"google-tag-manager-plugin",level:3},{value:"Tabs Query String Support",id:"tabs-query-string-support",level:3},{value:"Nested admonitions",id:"nested-admonitions",level:3},{value:"Blog <code>createFeedItems</code>",id:"blog-createfeeditems",level:3},{value:"Translations",id:"translations",level:3},{value:"Other changes",id:"other-changes",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["We are happy to announce ",(0,r.jsx)(n.strong,{children:"Docusaurus 2.3"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The upgrade should be easy: as explained in our ",(0,r.jsx)(n.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,r.jsx)(n.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Docusaurus 2.2 social card",src:t(36759).Z+"",width:"1200",height:"600"})}),"\n",(0,r.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsx)(n.h3,{id:"google-tag-manager-plugin",children:"Google Tag Manager plugin"}),"\n",(0,r.jsx)(n.p,{children:"Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags."}),"\n",(0,r.jsxs)(n.p,{children:["We now have a ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:(0,r.jsx)(n.code,{children:"@docusaurus/plugin-google-tag-manager"})})," package that you can use alongside or as an alternative to the existing ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"})," (refer to ",(0,r.jsx)(n.a,{href:"https://support.google.com/tagmanager/answer/7582054",children:"this doc"})," to understand when to use which solution)."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Google is sunsetting Universal Analytics",type:"warning",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://blog.google/products/marketingplatform/analytics/prepare-for-future-with-google-analytics-4/",children:"Google will sunset its Universal Analytics"})," on ",(0,r.jsx)(n.strong,{children:"July 1, 2023"}),", and ask users to migrate to ",(0,r.jsx)(n.strong,{children:"Google Analytics 4"}),"."]}),(0,r.jsxs)(n.p,{children:["Therefore, we are also ",(0,r.jsxs)(n.strong,{children:["deprecating our existing ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-analytics",children:(0,r.jsx)(n.code,{children:"@docusaurus/plugin-google-analytics"})})]})," package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag/",children:"gtag.js plugin"}),", or the ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager/",children:"Google Tag Manager plugin"}),". Refer to the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/7221",children:"dedicated Docusaurus issue"})," for details and questions."]})]}),"\n",(0,r.jsx)(n.h3,{id:"tabs-query-string-support",children:"Tabs Query String Support"}),"\n",(0,r.jsxs)(n.p,{children:["It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ",(0,r.jsx)(n.code,{children:"?qs-param=tab-value"})," search parameter."]}),"\n",(0,r.jsx)(n.p,{children:"This feature allows deep-linking to a specific documentation tab that will pre-selected on page load."}),"\n",(0,r.jsxs)(n.p,{children:["When used alongside the ",(0,r.jsx)(n.code,{children:"groupId"})," prop, the query string tab value takes precedence over the ",(0,r.jsx)(n.code,{children:"localStorage"})," value."]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure to check the ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/tabs#query-string",children:"documentation"})," and the demo below to understand how it works:"]}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",children:'<Tabs groupId="current-os" queryString>\n <TabItem value="android" label="Android">\n Android\n </TabItem>\n <TabItem value="ios" label="iOS">\n iOS\n </TabItem>\n</Tabs>\n'})}),"\n",(0,r.jsx)(a.Z,{children:(0,r.jsxs)(o.Z,{groupId:"current-os",queryString:!0,children:[(0,r.jsx)(i.Z,{value:"android",label:"Android",children:(0,r.jsx)(n.p,{children:"Android"})}),(0,r.jsx)(i.Z,{value:"ios",label:"iOS",children:(0,r.jsx)(n.p,{children:"iOS"})})]})}),"\n",(0,r.jsx)(n.h3,{id:"nested-admonitions",children:"Nested admonitions"}),"\n",(0,r.jsx)(n.p,{children:"It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"::::tip[nested admonitions]\n\nYou can now nest one admonition within another!\n\n:::danger\n\nUse this sparingly when it makes sense.\n\n:::\n\n::::\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"nested admonitions",type:"tip",children:[(0,r.jsx)(n.p,{children:"You can now nest one admonition within another!"}),(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsx)(n.p,{children:"Use this sparingly when it makes sense."})})]}),"\n",(0,r.jsxs)(n.h3,{id:"blog-createfeeditems",children:["Blog ",(0,r.jsx)(n.code,{children:"createFeedItems"})]}),"\n",(0,r.jsxs)(n.p,{children:["A new blog plugin option ",(0,r.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog/#CreateFeedItemsFn",children:(0,r.jsx)(n.code,{children:"feedOptions.createFeedItems"})})," gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-tsx",metastring:'title="docusaurus.config.js"',children:"[\n '@docusaurus/preset-classic',\n {\n blog: {\n feedOptions: {\n // highlight-start\n createFeedItems: async (params) => {\n const {blogPosts, defaultCreateFeedItems, ...rest} = params;\n return defaultCreateFeedItems({\n // keep only the 10 most recent blog posts in the feed\n blogPosts: blogPosts.filter((item, index) => index < 10),\n ...rest,\n });\n },\n // highlight-end\n },\n },\n },\n];\n"})}),"\n",(0,r.jsx)(n.h3,{id:"translations",children:"Translations"}),"\n",(0,r.jsx)(n.p,{children:"We added or completed the default theme translation support for multiple languages:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddf8\ud83c\uddee ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8541",children:"#8541"})," Slovenian"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddf9\ud83c\uddf7 ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8289",children:"#8289"})," Turkish"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddee\ud83c\uddf7 ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8406",children:"#8406"})," Farsi"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddf5\ud83c\uddf1 ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8525",children:"#8525"})," Polish"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\udde8\ud83c\uddf3 ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8423",children:"#8423"})," Chinese"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddf8\ud83c\uddea ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8312",children:"#8312"})," Swedish"]}),"\n",(0,r.jsxs)(n.li,{children:["\ud83c\uddfb\ud83c\uddf3 ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8450",children:"#8450"})," Vietnamese"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Completing theme translations is an ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"ongoing effort"})," and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3526",children:"need new translations"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"other-changes",children:"Other changes"}),"\n",(0,r.jsx)(n.p,{children:"Other notable changes include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8463",children:"#8463"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8328",children:"#8328"}),": fix some annoying Docusaurus layout issues"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8539",children:"#8539"}),": Algolia plugin ",(0,r.jsx)(n.code,{children:"options.searchPagePath"})," should be correctly applied to search modal footer"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8462",children:"#8462"}),": Algolia plugin now makes it easier to transform displayed search results with custom logic"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8397",children:"#8397"}),": the ",(0,r.jsx)(n.code,{children:"deploy"})," CLI now understands git url ",(0,r.jsx)(n.code,{children:"insteadOf"})," config"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Check the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/changelog/2.3.0",children:"2.3.0 changelog entry"})})," for an exhaustive list of changes."]})]})}function g(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>o});var r=t(27378);const s={},a=r.createContext(s);function o(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/393be207.73c28ce2.js b/assets/js/393be207.73c28ce2.js deleted file mode 100644 index 2fdec9cf11..0000000000 --- a/assets/js/393be207.73c28ce2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[4134],{6602:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>i,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(4848),a=t(8453);const r={title:"Markdown page example"},s="Markdown page example",p={type:"mdx",permalink:"/markdown-page",source:"@site/src/pages/markdown-page.md",title:"Markdown page example",description:"You don't need React to write simple standalone pages.",frontMatter:{title:"Markdown page example"},unlisted:!1},c={},d=[];function u(e){const n={h1:"h1",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"markdown-page-example",children:"Markdown page example"}),"\n",(0,o.jsx)(n.p,{children:"You don't need React to write simple standalone pages."})]})}function i(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>p});var o=t(6540);const a={},r=o.createContext(a);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/39485f13.82d44d0e.js b/assets/js/39485f13.82d44d0e.js new file mode 100644 index 0000000000..14f79a596c --- /dev/null +++ b/assets/js/39485f13.82d44d0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41219],{9009:(e,t,a)=>{a.d(t,{Z:()=>s});const s=a.p+"assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg"},28950:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var s=a(24246),r=a(71670);const o={title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},n=void 0,i={permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",source:"@site/blog/2018/12-14-Happy-First-Birthday-Slash.mdx",title:"Happy 1st Birthday Slash!",description:"Docusaurus makes 1 year! Happy Birthday Slash!",date:"2018-12-14T00:00:00.000Z",tags:[{label:"birth",permalink:"/blog/tags/birth"}],readingTime:.615,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Co-creator of Docusaurus",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Happy 1st Birthday Slash!",authors:[{key:"JMarcey",title:"Co-creator of Docusaurus"}],tags:["birth"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"},nextItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"}},c={authorsImageUrls:[void 0]},u=[];function h(e){const t={a:"a",blockquote:"blockquote",img:"img",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Docusaurus makes 1 year! Happy Birthday Slash!",src:a(9009).Z+"",width:"1805",height:"741"})}),"\n",(0,s.jsxs)(t.p,{children:["Docusaurus ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus",children:"went live"})," on December 14, 2017. At the time, we had ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/blog/2017/12/14/introducing-docusaurus#acknowledgements",children:"8 early adopters"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["We now have nearly ",(0,s.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users",children:"60 known users of Docusaurus"}),", and probably more that we don't know about. We have ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"9K GitHub stars"})," and an active community, particularly ",(0,s.jsx)(t.a,{href:"https://twitter.com/yangshunz",children:"Yangshun Tay"})," and ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Endilie Yacop Sucipto"}),", both of whom are the lead maintainers helping keep this project ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"moving forward"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year."}),"\n",(0,s.jsxs)(t.blockquote,{children:["\n",(0,s.jsxs)(t.p,{children:["Special thanks to ",(0,s.jsx)(t.a,{href:"https://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!"]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>n});var s=a(27378);const r={},o=s.createContext(r);function n(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/39509.af821c12.js b/assets/js/39509.af821c12.js new file mode 100644 index 0000000000..439bafe49c --- /dev/null +++ b/assets/js/39509.af821c12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39509],{39509:(t,i,e)=>{e.d(i,{diagram:()=>d});var a=e(99854),n=e(63294),r=(e(27693),e(7608),e(31699),function(){var t=function(t,i,e,a){for(e=e||{},a=t.length;a--;e[t[a]]=i);return e},i=[1,3],e=[1,5],a=[1,6],n=[1,7],r=[1,8],s=[1,10],l=[1,5,14,16,18,20,21,26,28,29,30,31,32,38,39,40,41,47,48,50,51,52,53,54,55,56,57,58,59,60],o=[1,5,7,14,16,18,20,21,26,28,29,30,31,32,38,39,40,41,47,48,50,51,52,53,54,55,56,57,58,59,60],h=[38,39,40],c=[2,8],d=[1,19],u=[1,23],x=[1,24],g=[1,25],f=[1,26],y=[1,27],p=[1,29],q=[1,30],T=[1,31],_=[1,32],m=[1,33],A=[1,34],b=[1,37],S=[1,38],v=[1,39],k=[1,40],F=[1,41],P=[1,42],C=[1,43],L=[1,44],D=[1,45],z=[1,46],E=[1,47],I=[1,48],w=[1,49],B=[1,52],R=[1,67],W=[1,68],N=[5,23,27,38,39,40,50,51,52,53,54,55,56,57,58,59,60,61],U=[5,7,38,39,40,41],Q={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,directive:6,QUADRANT:7,document:8,line:9,statement:10,axisDetails:11,quadrantDetails:12,points:13,title:14,title_value:15,acc_title:16,acc_title_value:17,acc_descr:18,acc_descr_value:19,acc_descr_multiline_value:20,section:21,text:22,point_start:23,point_x:24,point_y:25,"X-AXIS":26,"AXIS-TEXT-DELIMITER":27,"Y-AXIS":28,QUADRANT_1:29,QUADRANT_2:30,QUADRANT_3:31,QUADRANT_4:32,openDirective:33,typeDirective:34,closeDirective:35,":":36,argDirective:37,NEWLINE:38,SEMI:39,EOF:40,open_directive:41,type_directive:42,arg_directive:43,close_directive:44,alphaNumToken:45,textNoTagsToken:46,STR:47,MD_STR:48,alphaNum:49,PUNCTUATION:50,AMP:51,NUM:52,ALPHA:53,COMMA:54,PLUS:55,EQUALS:56,MULT:57,DOT:58,BRKT:59,UNDERSCORE:60,MINUS:61,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",7:"QUADRANT",14:"title",15:"title_value",16:"acc_title",17:"acc_title_value",18:"acc_descr",19:"acc_descr_value",20:"acc_descr_multiline_value",21:"section",23:"point_start",24:"point_x",25:"point_y",26:"X-AXIS",27:"AXIS-TEXT-DELIMITER",28:"Y-AXIS",29:"QUADRANT_1",30:"QUADRANT_2",31:"QUADRANT_3",32:"QUADRANT_4",36:":",38:"NEWLINE",39:"SEMI",40:"EOF",41:"open_directive",42:"type_directive",43:"arg_directive",44:"close_directive",47:"STR",48:"MD_STR",50:"PUNCTUATION",51:"AMP",52:"NUM",53:"ALPHA",54:"COMMA",55:"PLUS",56:"EQUALS",57:"MULT",58:"DOT",59:"BRKT",60:"UNDERSCORE",61:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[10,0],[10,2],[10,1],[10,1],[10,1],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[13,4],[11,4],[11,3],[11,2],[11,4],[11,3],[11,2],[12,2],[12,2],[12,2],[12,2],[6,3],[6,5],[4,1],[4,1],[4,1],[33,1],[34,1],[37,1],[35,1],[22,1],[22,2],[22,1],[22,1],[49,1],[49,2],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[46,1],[46,1],[46,1]],performAction:function(t,i,e,a,n,r,s){var l=r.length-1;switch(n){case 13:this.$=r[l].trim(),a.setDiagramTitle(this.$);break;case 14:this.$=r[l].trim(),a.setAccTitle(this.$);break;case 15:case 16:this.$=r[l].trim(),a.setAccDescription(this.$);break;case 17:a.addSection(r[l].substr(8)),this.$=r[l].substr(8);break;case 19:a.addPoint(r[l-3],r[l-1],r[l]);break;case 20:a.setXAxisLeftText(r[l-2]),a.setXAxisRightText(r[l]);break;case 21:r[l-1].text+=" \u27f6 ",a.setXAxisLeftText(r[l-1]);break;case 22:a.setXAxisLeftText(r[l]);break;case 23:a.setYAxisBottomText(r[l-2]),a.setYAxisTopText(r[l]);break;case 24:r[l-1].text+=" \u27f6 ",a.setYAxisBottomText(r[l-1]);break;case 25:a.setYAxisBottomText(r[l]);break;case 26:a.setQuadrant1Text(r[l]);break;case 27:a.setQuadrant2Text(r[l]);break;case 28:a.setQuadrant3Text(r[l]);break;case 29:a.setQuadrant4Text(r[l]);break;case 35:a.parseDirective("%%{","open_directive");break;case 36:a.parseDirective(r[l],"type_directive");break;case 37:r[l]=r[l].trim().replace(/'/g,'"'),a.parseDirective(r[l],"arg_directive");break;case 38:a.parseDirective("}%%","close_directive","quadrantChart");break;case 39:case 41:this.$={text:r[l],type:"text"};break;case 40:this.$={text:r[l-1].text+""+r[l],type:r[l-1].type};break;case 42:this.$={text:r[l],type:"markdown"};break;case 43:this.$=r[l];break;case 44:this.$=r[l-1]+""+r[l]}},table:[{3:1,4:2,5:i,6:4,7:e,33:9,38:a,39:n,40:r,41:s},{1:[3]},{3:11,4:2,5:i,6:4,7:e,33:9,38:a,39:n,40:r,41:s},{3:12,4:2,5:i,6:4,7:e,33:9,38:a,39:n,40:r,41:s},{3:13,4:2,5:i,6:4,7:e,33:9,38:a,39:n,40:r,41:s},t(l,[2,5],{8:14}),t(o,[2,32]),t(o,[2,33]),t(o,[2,34]),{34:15,42:[1,16]},{42:[2,35]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(h,c,{33:9,9:17,10:18,11:20,12:21,13:22,6:28,22:35,45:36,1:[2,4],5:d,14:u,16:x,18:g,20:f,21:y,26:p,28:q,29:T,30:_,31:m,32:A,41:s,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w}),{35:50,36:[1,51],44:B},t([36,44],[2,36]),t(l,[2,6]),{4:53,38:a,39:n,40:r},t(h,c,{33:9,11:20,12:21,13:22,6:28,22:35,45:36,10:54,5:d,14:u,16:x,18:g,20:f,21:y,26:p,28:q,29:T,30:_,31:m,32:A,41:s,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w}),t(h,[2,10]),t(h,[2,11]),t(h,[2,12]),{15:[1,55]},{17:[1,56]},{19:[1,57]},t(h,[2,16]),t(h,[2,17]),t(h,[2,18]),{22:58,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{22:59,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{22:60,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{22:61,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{22:62,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{22:63,45:36,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w},{5:R,23:[1,64],45:66,46:65,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W},t(N,[2,39]),t(N,[2,41]),t(N,[2,42]),t(N,[2,45]),t(N,[2,46]),t(N,[2,47]),t(N,[2,48]),t(N,[2,49]),t(N,[2,50]),t(N,[2,51]),t(N,[2,52]),t(N,[2,53]),t(N,[2,54]),t(N,[2,55]),t(U,[2,30]),{37:69,43:[1,70]},t(U,[2,38]),t(l,[2,7]),t(h,[2,9]),t(h,[2,13]),t(h,[2,14]),t(h,[2,15]),t(h,[2,22],{46:65,45:66,5:R,27:[1,71],50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,25],{46:65,45:66,5:R,27:[1,72],50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,26],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,27],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,28],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,29],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),{24:[1,73]},t(N,[2,40]),t(N,[2,56]),t(N,[2,57]),t(N,[2,58]),{35:74,44:B},{44:[2,37]},t(h,[2,21],{45:36,22:75,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w}),t(h,[2,24],{45:36,22:76,47:b,48:S,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w}),{25:[1,77]},t(U,[2,31]),t(h,[2,20],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,23],{46:65,45:66,5:R,50:v,51:k,52:F,53:P,54:C,55:L,56:D,57:z,58:E,59:I,60:w,61:W}),t(h,[2,19])],defaultActions:{10:[2,35],11:[2,1],12:[2,2],13:[2,3],70:[2,37]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],a=[],n=[null],r=[],s=this.table,l="",o=0,h=0,c=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var g=d.yylloc;r.push(g);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,p,q,T,_,m,A,b,S,v={};;){if(p=e[e.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null==y&&(S=void 0,"number"!=typeof(S=a.pop()||d.lex()||1)&&(S instanceof Array&&(S=(a=S).pop()),S=i.symbols_[S]||S),y=S),q=s[p]&&s[p][y]),void 0===q||!q.length||!q[0]){var k="";for(_ in b=[],s[p])this.terminals_[_]&&_>2&&b.push("'"+this.terminals_[_]+"'");k=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(k,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:g,expected:b})}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+y);switch(q[0]){case 1:e.push(y),n.push(d.yytext),r.push(d.yylloc),e.push(q[1]),y=null,h=d.yyleng,l=d.yytext,o=d.yylineno,g=d.yylloc;break;case 2:if(m=this.productions_[q[1]][1],v.$=n[n.length-m],v._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},f&&(v._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(T=this.performAction.apply(v,[l,h,o,u.yy,q[1],n,r].concat(c))))return T;m&&(e=e.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),e.push(this.productions_[q[1]][0]),n.push(v.$),r.push(v._$),A=s[e[e.length-2]][e[e.length-1]],e.push(A);break;case 3:return!0}}return!0}},H={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===a.length?this.yylloc.first_column:0)+a[a.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,a,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((e=this._input.match(this.rules[n[r]]))&&(!i||e[0].length>i[0].length)){if(i=e,a=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,a){switch(e){case 0:return this.begin("open_directive"),41;case 1:return this.begin("type_directive"),42;case 2:return this.popState(),this.begin("arg_directive"),36;case 3:return this.popState(),this.popState(),44;case 4:return 43;case 5:case 6:case 8:break;case 7:return 38;case 9:return this.begin("title"),14;case 10:return this.popState(),"title_value";case 11:return this.begin("acc_title"),16;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),18;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 27:case 29:case 33:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 26;case 19:return 28;case 20:return 27;case 21:return 29;case 22:return 30;case 23:return 31;case 24:return 32;case 25:this.begin("md_string");break;case 26:return"MD_STR";case 28:this.begin("string");break;case 30:return"STR";case 31:return this.begin("point_start"),23;case 32:return this.begin("point_x"),24;case 34:this.popState(),this.begin("point_y");break;case 35:return this.popState(),25;case 36:return 7;case 37:return 53;case 38:return"COLON";case 39:return 55;case 40:return 54;case 41:case 42:return 56;case 43:return 57;case 44:return 59;case 45:return 60;case 46:return 58;case 47:return 51;case 48:return 61;case 49:return 52;case 50:return 5;case 51:return 39;case 52:return 50;case 53:return 40}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[35],inclusive:!1},point_x:{rules:[34],inclusive:!1},point_start:{rules:[32,33],inclusive:!1},acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[10],inclusive:!1},md_string:{rules:[26,27],inclusive:!1},string:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,11,13,15,18,19,20,21,22,23,24,25,28,31,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],inclusive:!0}}};function $(){this.yy={}}return Q.lexer=H,$.prototype=Q,Q.Parser=$,new $}());r.parser=r;const s=r,l=(0,a.G)();const o=(0,a.c)();function h(t){return(0,a.d)(t.trim(),o)}const c=new class{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var t,i,e,n,r,s,l,o,h,c,d,u,x,g,f,y,p,q;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:(null==(t=a.C.quadrantChart)?void 0:t.chartWidth)||500,chartWidth:(null==(i=a.C.quadrantChart)?void 0:i.chartHeight)||500,titlePadding:(null==(e=a.C.quadrantChart)?void 0:e.titlePadding)||10,titleFontSize:(null==(n=a.C.quadrantChart)?void 0:n.titleFontSize)||20,quadrantPadding:(null==(r=a.C.quadrantChart)?void 0:r.quadrantPadding)||5,xAxisLabelPadding:(null==(s=a.C.quadrantChart)?void 0:s.xAxisLabelPadding)||5,yAxisLabelPadding:(null==(l=a.C.quadrantChart)?void 0:l.yAxisLabelPadding)||5,xAxisLabelFontSize:(null==(o=a.C.quadrantChart)?void 0:o.xAxisLabelFontSize)||16,yAxisLabelFontSize:(null==(h=a.C.quadrantChart)?void 0:h.yAxisLabelFontSize)||16,quadrantLabelFontSize:(null==(c=a.C.quadrantChart)?void 0:c.quadrantLabelFontSize)||16,quadrantTextTopPadding:(null==(d=a.C.quadrantChart)?void 0:d.quadrantTextTopPadding)||5,pointTextPadding:(null==(u=a.C.quadrantChart)?void 0:u.pointTextPadding)||5,pointLabelFontSize:(null==(x=a.C.quadrantChart)?void 0:x.pointLabelFontSize)||12,pointRadius:(null==(g=a.C.quadrantChart)?void 0:g.pointRadius)||5,xAxisPosition:(null==(f=a.C.quadrantChart)?void 0:f.xAxisPosition)||"top",yAxisPosition:(null==(y=a.C.quadrantChart)?void 0:y.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:(null==(p=a.C.quadrantChart)?void 0:p.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:(null==(q=a.C.quadrantChart)?void 0:q.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:l.quadrant1Fill,quadrant2Fill:l.quadrant2Fill,quadrant3Fill:l.quadrant3Fill,quadrant4Fill:l.quadrant4Fill,quadrant1TextFill:l.quadrant1TextFill,quadrant2TextFill:l.quadrant2TextFill,quadrant3TextFill:l.quadrant3TextFill,quadrant4TextFill:l.quadrant4TextFill,quadrantPointFill:l.quadrantPointFill,quadrantPointTextFill:l.quadrantPointTextFill,quadrantXAxisTextFill:l.quadrantXAxisTextFill,quadrantYAxisTextFill:l.quadrantYAxisTextFill,quadrantTitleFill:l.quadrantTitleFill,quadrantInternalBorderStrokeFill:l.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:l.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),a.l.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}setConfig(t){a.l.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){a.l.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,i,e,a){const n=2*this.config.xAxisLabelPadding+this.config.xAxisLabelFontSize,r={top:"top"===t&&i?n:0,bottom:"bottom"===t&&i?n:0},s=2*this.config.yAxisLabelPadding+this.config.yAxisLabelFontSize,l={left:"left"===this.config.yAxisPosition&&e?s:0,right:"right"===this.config.yAxisPosition&&e?s:0},o=this.config.titleFontSize+2*this.config.titlePadding,h={top:a?o:0},c=this.config.quadrantPadding+l.left,d=this.config.quadrantPadding+r.top+h.top,u=this.config.chartWidth-2*this.config.quadrantPadding-l.left-l.right,x=this.config.chartHeight-2*this.config.quadrantPadding-r.top-r.bottom-h.top;return{xAxisSpace:r,yAxisSpace:l,titleSpace:h,quadrantSpace:{quadrantLeft:c,quadrantTop:d,quadrantWidth:u,quadrantHalfWidth:u/2,quadrantHeight:x,quadrantHalfHeight:x/2}}}getAxisLabels(t,i,e,a){const{quadrantSpace:n,titleSpace:r}=a,{quadrantHalfHeight:s,quadrantHeight:l,quadrantLeft:o,quadrantHalfWidth:h,quadrantTop:c,quadrantWidth:d}=n,u=0===this.data.points.length,x=[];return this.data.xAxisLeftText&&i&&x.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&i&&x.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+h+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&e&&x.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+l-(u?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&e&&x.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+s-(u?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:-90}),x}getQuadrants(t){const{quadrantSpace:i}=t,{quadrantHalfHeight:e,quadrantLeft:a,quadrantHalfWidth:n,quadrantTop:r}=i,s=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r,width:n,height:e,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r,width:n,height:e,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant4Fill}];for(const l of s)l.text.x=l.x+l.width/2,0===this.data.points.length?(l.text.y=l.y+l.height/2,l.text.horizontalPos="middle"):(l.text.y=l.y+this.config.quadrantTextTopPadding,l.text.horizontalPos="top");return s}getQuadrantPoints(t){const{quadrantSpace:i}=t,{quadrantHeight:e,quadrantLeft:a,quadrantTop:r,quadrantWidth:s}=i,l=(0,n.BYU)().domain([0,1]).range([a,s+a]),o=(0,n.BYU)().domain([0,1]).range([e+r,r]);return this.data.points.map((t=>({x:l(t.x),y:o(t.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:t.text,fill:this.themeConfig.quadrantPointTextFill,x:l(t.x),y:o(t.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}})))}getBorders(t){const i=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:e}=t,{quadrantHalfHeight:a,quadrantHeight:n,quadrantLeft:r,quadrantHalfWidth:s,quadrantTop:l,quadrantWidth:o}=e;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l,x2:r+o+i,y2:l},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r+o,y1:l+i,x2:r+o,y2:l+n-i},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l+n,x2:r+o+i,y2:l+n},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r,y1:l+i,x2:r,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+s,y1:l+i,x2:r+s,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+i,y1:l+a,x2:r+o-i,y2:l+a}]}getTitle(t){if(t)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const t=this.config.showXAxis&&!(!this.data.xAxisLeftText&&!this.data.xAxisRightText),i=this.config.showYAxis&&!(!this.data.yAxisTopText&&!this.data.yAxisBottomText),e=this.config.showTitle&&!!this.data.titleText,a=this.data.points.length>0?"bottom":this.config.xAxisPosition,n=this.calculateSpace(a,t,i,e);return{points:this.getQuadrantPoints(n),quadrants:this.getQuadrants(n),axisLabels:this.getAxisLabels(a,t,i,n),borderLines:this.getBorders(n),title:this.getTitle(e)}}};const d={parser:s,db:{setWidth:function(t){c.setConfig({chartWidth:t})},setHeight:function(t){c.setConfig({chartHeight:t})},setQuadrant1Text:function(t){c.setData({quadrant1Text:h(t.text)})},setQuadrant2Text:function(t){c.setData({quadrant2Text:h(t.text)})},setQuadrant3Text:function(t){c.setData({quadrant3Text:h(t.text)})},setQuadrant4Text:function(t){c.setData({quadrant4Text:h(t.text)})},setXAxisLeftText:function(t){c.setData({xAxisLeftText:h(t.text)})},setXAxisRightText:function(t){c.setData({xAxisRightText:h(t.text)})},setYAxisTopText:function(t){c.setData({yAxisTopText:h(t.text)})},setYAxisBottomText:function(t){c.setData({yAxisBottomText:h(t.text)})},addPoint:function(t,i,e){c.addPoints([{x:i,y:e,text:h(t.text)}])},getQuadrantData:function(){const t=(0,a.c)(),{themeVariables:i,quadrantChart:e}=t;return e&&c.setConfig(e),c.setThemeConfig({quadrant1Fill:i.quadrant1Fill,quadrant2Fill:i.quadrant2Fill,quadrant3Fill:i.quadrant3Fill,quadrant4Fill:i.quadrant4Fill,quadrant1TextFill:i.quadrant1TextFill,quadrant2TextFill:i.quadrant2TextFill,quadrant3TextFill:i.quadrant3TextFill,quadrant4TextFill:i.quadrant4TextFill,quadrantPointFill:i.quadrantPointFill,quadrantPointTextFill:i.quadrantPointTextFill,quadrantXAxisTextFill:i.quadrantXAxisTextFill,quadrantYAxisTextFill:i.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:i.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:i.quadrantInternalBorderStrokeFill,quadrantTitleFill:i.quadrantTitleFill}),c.setData({titleText:(0,a.t)()}),c.build()},parseDirective:function(t,i,e){a.m.parseDirective(this,t,i,e)},clear:function(){c.clear(),(0,a.v)()},setAccTitle:a.s,getAccTitle:a.g,setDiagramTitle:a.r,getDiagramTitle:a.t,getAccDescription:a.a,setAccDescription:a.b},renderer:{draw:(t,i,e,r)=>{var s,l,o;function h(t){return"top"===t?"hanging":"middle"}function c(t){return"left"===t?"start":"middle"}function d(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}const u=(0,a.c)();a.l.debug("Rendering quadrant chart\n"+t);const x=u.securityLevel;let g;"sandbox"===x&&(g=(0,n.Ys)("#i"+i));const f=("sandbox"===x?(0,n.Ys)(g.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id="${i}"]`),y=f.append("g").attr("class","main"),p=(null==(s=u.quadrantChart)?void 0:s.chartWidth)||500,q=(null==(l=u.quadrantChart)?void 0:l.chartHeight)||500;(0,a.i)(f,q,p,(null==(o=u.quadrantChart)?void 0:o.useMaxWidth)||!0),f.attr("viewBox","0 0 "+p+" "+q),r.db.setHeight(q),r.db.setWidth(p);const T=r.db.getQuadrantData(),_=y.append("g").attr("class","quadrants"),m=y.append("g").attr("class","border"),A=y.append("g").attr("class","data-points"),b=y.append("g").attr("class","labels"),S=y.append("g").attr("class","title");T.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",T.title.fill).attr("font-size",T.title.fontSize).attr("dominant-baseline",h(T.title.horizontalPos)).attr("text-anchor",c(T.title.verticalPos)).attr("transform",d(T.title)).text(T.title.text),T.borderLines&&m.selectAll("line").data(T.borderLines).enter().append("line").attr("x1",(t=>t.x1)).attr("y1",(t=>t.y1)).attr("x2",(t=>t.x2)).attr("y2",(t=>t.y2)).style("stroke",(t=>t.strokeFill)).style("stroke-width",(t=>t.strokeWidth));const v=_.selectAll("g.quadrant").data(T.quadrants).enter().append("g").attr("class","quadrant");v.append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)),v.append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text))).text((t=>t.text.text));b.selectAll("g.label").data(T.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text((t=>t.text)).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>h(t.horizontalPos))).attr("text-anchor",(t=>c(t.verticalPos))).attr("transform",(t=>d(t)));const k=A.selectAll("g.data-point").data(T.points).enter().append("g").attr("class","data-point");k.append("circle").attr("cx",(t=>t.x)).attr("cy",(t=>t.y)).attr("r",(t=>t.radius)).attr("fill",(t=>t.fill)),k.append("text").attr("x",0).attr("y",0).text((t=>t.text.text)).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text)))}},styles:()=>""}}}]); \ No newline at end of file diff --git a/assets/js/3955af78.f41b45ad.js b/assets/js/3955af78.f41b45ad.js new file mode 100644 index 0000000000..9073a2f95e --- /dev/null +++ b/assets/js/3955af78.f41b45ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1418],{57948:(t,s,o)=>{o.r(s),o.d(s,{assets:()=>u,contentTitle:()=>c,default:()=>a,frontMatter:()=>r,metadata:()=>p,toc:()=>i});var e=o(24246),n=o(71670);const r={},c="Doc Without Custom Props",p={id:"tests/custom-props/doc-without-custom-props",title:"Doc Without Custom Props",description:"This doc doesn't have custom props.",source:"@site/_dogfooding/_docs tests/tests/custom-props/doc-without-custom-props.mdx",sourceDirName:"tests/custom-props",slug:"/tests/custom-props/doc-without-custom-props",permalink:"/tests/docs/tests/custom-props/doc-without-custom-props",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Doc with Custom Props",permalink:"/tests/docs/tests/custom-props/doc-with-custom-props"},next:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"}},u={},i=[];function d(t){const s={h1:"h1",p:"p",...(0,n.a)(),...t.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(s.h1,{id:"doc-without-custom-props",children:"Doc Without Custom Props"}),"\n",(0,e.jsx)(s.p,{children:"This doc doesn't have custom props."})]})}function a(t={}){const{wrapper:s}={...(0,n.a)(),...t.components};return s?(0,e.jsx)(s,{...t,children:(0,e.jsx)(d,{...t})}):d(t)}},71670:(t,s,o)=>{o.d(s,{Z:()=>p,a:()=>c});var e=o(27378);const n={},r=e.createContext(n);function c(t){const s=e.useContext(r);return e.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function p(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:c(t.components),e.createElement(r.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/39646.823936ff.js b/assets/js/39646.823936ff.js new file mode 100644 index 0000000000..79f44cda56 --- /dev/null +++ b/assets/js/39646.823936ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39646],{39646:(t,e,a)=>{a.d(e,{diagram:()=>b});var i=a(33426),n=a(63294),d=a(9500),r=a(88472),s=a(99854);a(27693),a(7608),a(31699);const o={},c=(t,e)=>{o[t]=e},g=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+1.3*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.c)().state.padding).attr("y",i+.4*(0,s.c)().state.padding+(0,s.c)().state.dividerMargin+(0,s.c)().state.textHeight).attr("class","state-description");let d=!0,r=!0;e.descriptions.forEach((function(t){d||(!function(t,e,a){const i=t.append("tspan").attr("x",2*(0,s.c)().state.padding).text(e);a||i.attr("dy",(0,s.c)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.c)().state.padding).attr("y1",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("y2",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("class","descr-divider"),c=n.node().getBBox(),g=Math.max(c.width,a.width);return o.attr("x2",g+3*(0,s.c)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",g+2*(0,s.c)().state.padding).attr("height",c.height+i+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius),t},p=(t,e,a)=>{const i=(0,s.c)().state.padding,n=2*(0,s.c)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,c=t.append("text").attr("x",0).attr("y",(0,s.c)().state.titleShift).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),g=c.node().getBBox().width+n;let p,h=Math.max(g,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,g>r&&(p=(r-h)/2+i),Math.abs(o-l.x)<i&&g>r&&(p=o-(g-r)/2);const x=1-(0,s.c)().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",x).attr("class",a?"alt-composit":"composit").attr("width",h).attr("height",l.height+(0,s.c)().state.textHeight+(0,s.c)().state.titleShift+1).attr("rx","0"),c.attr("x",p+i),g<=r&&c.attr("x",o+(h-n)/2-g/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",3*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t},h=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.c)().state.padding),i=e.append("g"),{textWidth:n,textHeight:d}=((t,e,a,i)=>{let n=0;const d=i.append("text");d.style("text-anchor","start"),d.attr("class","noteText");let r=t.replace(/\r\n/g,"<br/>");r=r.replace(/\n/g,"<br/>");const o=r.split(s.e.lineBreakRegex);let c=1.25*(0,s.c)().state.noteMargin;for(const g of o){const t=g.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),n+=c,i.attr("x",e+(0,s.c)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.c)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.c)().state.noteMargin),a.attr("width",n+2*(0,s.c)().state.noteMargin),a},l=function(t,e){const a=e.id,i={id:a,label:e.id,width:0,height:0},n=t.append("g").attr("id",a).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.c)().state.forkWidth,i=(0,s.c)().state.forkHeight;if(e.parentId){let t=a;a=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",a).attr("height",i).attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding)})(n,e),"note"===e.type&&h(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.c)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.c)().state.textHeight).attr("y1",0).attr("y2",0)})(n),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+2*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",i.width+2*(0,s.c)().state.padding).attr("height",i.height+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&g(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.c)().state.padding,i.height=d.height+2*(0,s.c)().state.padding,c(a,i),i};let x=0;let u;const f={},y=(t,e,a,o,c,g,h)=>{const w=new r.k({compound:!0,multigraph:!0});let b,B=!0;for(b=0;b<t.length;b++)if("relation"===t[b].stmt){B=!1;break}a?w.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:B?1:u.edgeLengthFactor,nodeSep:B?1:50,isMultiGraph:!0}):w.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:B?1:u.edgeLengthFactor,nodeSep:B?1:50,ranker:"tight-tree",isMultiGraph:!0}),w.setDefaultEdgeLabel((function(){return{}})),h.db.extract(t);const m=h.db.getStates(),k=h.db.getRelations(),N=Object.keys(m);for(const i of N){const t=m[i];let n;if(a&&(t.parentId=a),t.doc){let a=e.append("g").attr("id",t.id).attr("class","stateGroup");n=y(t.doc,a,t.id,!o,c,g,h);{a=p(a,t,o);let e=a.node().getBBox();n.width=e.width,n.height=e.height+u.padding/2,f[t.id]={y:u.compositTitleSize}}}else n=l(e,t);if(t.note){const a={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},i=l(e,a);"left of"===t.note.position?(w.setNode(n.id+"-note",i),w.setNode(n.id,n)):(w.setNode(n.id,n),w.setNode(n.id+"-note",i)),w.setParent(n.id,n.id+"-group"),w.setParent(n.id+"-note",n.id+"-group")}else w.setNode(n.id,n)}s.l.debug("Count=",w.nodeCount(),w);let E=0;k.forEach((function(t){var e;E++,s.l.debug("Setting edge",t),w.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*u.fontSizeFactor:1),height:u.labelHeight*s.e.getRows(t.title).length,labelpos:"c"},"id"+E)})),(0,d.bK)(w),s.l.debug("Graph after layout",w.nodes());const M=e.node();w.nodes().forEach((function(t){if(void 0!==t&&void 0!==w.node(t)){s.l.warn("Node "+t+": "+JSON.stringify(w.node(t))),c.select("#"+M.id+" #"+t).attr("transform","translate("+(w.node(t).x-w.node(t).width/2)+","+(w.node(t).y+(f[t]?f[t].y:0)-w.node(t).height/2)+" )"),c.select("#"+M.id+" #"+t).attr("data-x-shift",w.node(t).x-w.node(t).width/2);g.querySelectorAll("#"+M.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let a=0,i=0;e&&(e.parentElement&&(a=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",a-i-8)}))}else s.l.debug("No Node "+t+": "+JSON.stringify(w.node(t)))}));let v=M.getBBox();w.edges().forEach((function(t){void 0!==t&&void 0!==w.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(w.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),o=t.append("path").attr("d",r(d)).attr("id","edge"+x).attr("class","transition");let c="";if((0,s.c)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),o.attr("marker-end","url("+c+"#"+function(t){switch(t){case i.d.relationType.AGGREGATION:return"aggregation";case i.d.relationType.EXTENSION:return"extension";case i.d.relationType.COMPOSITION:return"composition";case i.d.relationType.DEPENDENCY:return"dependency"}}(i.d.relationType.DEPENDENCY)+"End)"),void 0!==a.title){const i=t.append("g").attr("class","stateLabel"),{x:n,y:d}=s.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let o=0;const c=[];let g=0,p=0;for(let t=0;t<=r.length;t++){const e=i.append("text").attr("text-anchor","middle").text(r[t]).attr("x",n).attr("y",d+o),a=e.node().getBBox();if(g=Math.max(g,a.width),p=Math.min(p,a.x),s.l.info(a.x,n,d+o),0===o){const t=e.node().getBBox();o=t.height,s.l.info("Title height",o,d)}c.push(e)}let h=o*r.length;if(r.length>1){const t=(r.length-1)*o*.5;c.forEach(((e,a)=>e.attr("y",d+a*o-t))),h=o*r.length}const l=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-g/2-(0,s.c)().state.padding/2).attr("y",d-h/2-(0,s.c)().state.padding/2-3.5).attr("width",g+(0,s.c)().state.padding).attr("height",h+(0,s.c)().state.padding),s.l.info(l)}x++}(e,w.edge(t),w.edge(t).relation))})),v=M.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=v.width+2*u.padding,S.height=v.height+2*u.padding,s.l.debug("Doc rendered",S,w),S},w={setConf:function(){},draw:function(t,e,a,i){u=(0,s.c)().state;const d=(0,s.c)().securityLevel;let r;"sandbox"===d&&(r=(0,n.Ys)("#i"+e));const o="sandbox"===d?(0,n.Ys)(r.nodes()[0].contentDocument.body):(0,n.Ys)("body"),c="sandbox"===d?r.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const g=o.select(`[id='${e}']`);g.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");const p=i.db.getRootDoc();y(p,g,void 0,!1,o,c,i);const h=u.padding,l=g.node().getBBox(),x=l.width+2*h,f=l.height+2*h,w=1.75*x;(0,s.i)(g,f,w,u.useMaxWidth),g.attr("viewBox",`${l.x-u.padding} ${l.y-u.padding} `+x+" "+f)}},b={parser:i.p,db:i.d,renderer:w,styles:i.s,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,i.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/39be8897.83ec08dd.js b/assets/js/39be8897.83ec08dd.js new file mode 100644 index 0000000000..7d7c7e764a --- /dev/null +++ b/assets/js/39be8897.83ec08dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83708],{63685:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>s,default:()=>g,frontMatter:()=>n,metadata:()=>r,toc:()=>m});var o=a(24246),h=a(71670);const n={mdx:{format:"md"},date:"2021-12-21T20:00",authors:["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},s="2.0.0-beta.14",r={permalink:"/changelog/2.0.0-beta.14",source:"@site/changelog/source/2.0.0-beta.14.md",title:"2.0.0-beta.14",description:"New Feature",date:"2021-12-21T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"6543",alias:"6543",url:"https://github.com/6543",imageURL:"https://github.com/6543.png",key:"6543"},{name:"Christopher Klint",alias:"christopherklint97",url:"https://github.com/christopherklint97",imageURL:"https://github.com/christopherklint97.png",key:"christopherklint97"},{name:"colton",alias:"cmpadden",url:"https://github.com/cmpadden",imageURL:"https://github.com/cmpadden.png",key:"cmpadden"},{name:"Drylozu",alias:"Drylozu",url:"https://github.com/Drylozu",imageURL:"https://github.com/Drylozu.png",key:"Drylozu"},{name:"Jeroen Claassens",alias:"favna",url:"https://github.com/favna",imageURL:"https://github.com/favna.png",key:"favna"},{name:"Harsh Mishra",alias:"HarshCasper",url:"https://github.com/HarshCasper",imageURL:"https://github.com/HarshCasper.png",key:"HarshCasper"},{name:"Himanshu",alias:"himanshu007-creator",url:"https://github.com/himanshu007-creator",imageURL:"https://github.com/himanshu007-creator.png",key:"himanshu007-creator"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Kristoffer K.",alias:"merceyz",url:"https://github.com/merceyz",imageURL:"https://github.com/merceyz.png",key:"merceyz"},{name:"Yaroslav Serhieiev",alias:"noomorph",url:"https://github.com/noomorph",imageURL:"https://github.com/noomorph.png",key:"noomorph"},{name:"\u4e0d\u90d1",alias:"notzheng",url:"https://github.com/notzheng",imageURL:"https://github.com/notzheng.png",key:"notzheng"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Ziv",alias:"wewoor",url:"https://github.com/wewoor",imageURL:"https://github.com/wewoor.png",key:"wewoor"},{name:"Shubhendra Singh Chauhan",alias:"withshubh",url:"https://github.com/withshubh",imageURL:"https://github.com/withshubh.png",key:"withshubh"},{name:"Wout Vandesompele",alias:"wowtvds",url:"https://github.com/wowtvds",imageURL:"https://github.com/wowtvds.png",key:"wowtvds"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2021-12-21T20:00",authors:["6543","christopherklint97","cmpadden","Drylozu","favna","HarshCasper","himanshu007-creator","Josh-Cena","lex111","merceyz","noomorph","notzheng","slorber","wewoor","withshubh","wowtvds","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-beta.15",permalink:"/changelog/2.0.0-beta.15"},nextItem:{title:"2.0.0-beta.13",permalink:"/changelog/2.0.0-beta.13"},listPageLink:"/changelog/page/2"},i={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function u(t){return(0,o.jsx)(o.Fragment,{})}function g(t={}){const{wrapper:e}={...(0,h.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u()}},71670:(t,e,a)=>{a.d(e,{Z:()=>r,a:()=>s});var o=a(27378);const h={},n=o.createContext(h);function s(t){const e=o.useContext(n);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(h):t.components||h:s(t.components),o.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/39cc8d92.3400d38b.js b/assets/js/39cc8d92.3400d38b.js new file mode 100644 index 0000000000..659cc57ae3 --- /dev/null +++ b/assets/js/39cc8d92.3400d38b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91404],{53745:(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r(24246),s=(r(27378),r(41428)),i=r(88613);function c(){return(0,n.jsxs)("span",{children:["Built using the ",(0,n.jsx)(s.Z,{to:"https://www.electronjs.org/",children:"Electron"})," , based on ",(0,n.jsx)(s.Z,{to:"https://www.chromium.org/",children:"Chromium"}),", and written using ",(0,n.jsx)(s.Z,{to:"https://www.typescriptlang.org/",children:"TypeScript"})," , Xplorer promises you an unprecedented experience."]})}function o(){return(0,n.jsx)(i.Z,{children:(0,n.jsx)(c,{})})}}}]); \ No newline at end of file diff --git a/assets/js/3a22feb1.45e7baaf.js b/assets/js/3a22feb1.45e7baaf.js new file mode 100644 index 0000000000..953791c010 --- /dev/null +++ b/assets/js/3a22feb1.45e7baaf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22166],{27185:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>h,contentTitle:()=>s,default:()=>p,frontMatter:()=>m,metadata:()=>i,toc:()=>r});var o=t(24246),n=t(71670);const m={mdx:{format:"md"},date:"2020-05-28T20:00",authors:["jknoxville","jmcshane","kasperp","lex111","mrmuhammadali","piotros","s-pace","SamChou19815"]},s="2.0.0-alpha.56",i={permalink:"/changelog/2.0.0-alpha.56",source:"@site/changelog/source/2.0.0-alpha.56.md",title:"2.0.0-alpha.56",description:"Breaking Change",date:"2020-05-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"John Knox",alias:"jknoxville",url:"https://github.com/jknoxville",imageURL:"https://github.com/jknoxville.png",key:"jknoxville"},{name:"James McShane",alias:"jmcshane",url:"https://github.com/jmcshane",imageURL:"https://github.com/jmcshane.png",key:"jmcshane"},{name:"Kasper B\xf8gebjerg Pedersen",alias:"kasperp",url:"https://github.com/kasperp",imageURL:"https://github.com/kasperp.png",key:"kasperp"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Muhammad Ali",alias:"mrmuhammadali",url:"https://github.com/mrmuhammadali",imageURL:"https://github.com/mrmuhammadali.png",key:"mrmuhammadali"},{name:"Piotr Baran",alias:"piotros",url:"https://github.com/piotros",imageURL:"https://github.com/piotros.png",key:"piotros"},{name:"Sylvain Pace",alias:"s-pace",url:"https://github.com/s-pace",imageURL:"https://github.com/s-pace.png",key:"s-pace"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"}],frontMatter:{mdx:{format:"md"},date:"2020-05-28T20:00",authors:["jknoxville","jmcshane","kasperp","lex111","mrmuhammadali","piotros","s-pace","SamChou19815"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.57",permalink:"/changelog/2.0.0-alpha.57"},nextItem:{title:"2.0.0-alpha.55",permalink:"/changelog/2.0.0-alpha.55"},listPageLink:"/changelog/page/3"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},r=[];function l(a){return(0,o.jsx)(o.Fragment,{})}function p(a={}){const{wrapper:e}={...(0,n.a)(),...a.components};return e?(0,o.jsx)(e,{...a,children:(0,o.jsx)(l,{...a})}):l()}},71670:(a,e,t)=>{t.d(e,{Z:()=>i,a:()=>s});var o=t(27378);const n={},m=o.createContext(n);function s(a){const e=o.useContext(m);return o.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function i(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(n):a.components||n:s(a.components),o.createElement(m.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/3a317cf7.bf8ac0a6.js b/assets/js/3a317cf7.bf8ac0a6.js new file mode 100644 index 0000000000..09faa0b226 --- /dev/null +++ b/assets/js/3a317cf7.bf8ac0a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4888],{28376:s=>{s.exports=JSON.parse('{"tag":{"label":"c","permalink":"/tests/docs/tags/c","allTagsPath":"/tests/docs/tags","count":1,"items":[{"id":"index","title":"Docs tests","description":"This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don\'t really cover.","permalink":"/tests/docs/"}],"unlisted":true}}')}}]); \ No newline at end of file diff --git a/assets/js/3b2c7f61.f6644ccd.js b/assets/js/3b2c7f61.f6644ccd.js new file mode 100644 index 0000000000..1f55ca1c2e --- /dev/null +++ b/assets/js/3b2c7f61.f6644ccd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[41757],{89560:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var r=n(24246),o=n(71670);const a={mdx:{format:"md"},date:"2022-08-01T20:00",authors:["slorber"]},s="2.0.1",c={permalink:"/changelog/2.0.1",source:"@site/changelog/source/2.0.1.md",title:"2.0.1",description:"Fix bad npm publish of 2.0.0",date:"2022-08-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-08-01T20:00",authors:["slorber"]},unlisted:!1,prevItem:{title:"2.1.0",permalink:"/changelog/2.1.0"},nextItem:{title:"2.0.0",permalink:"/changelog/2.0.0"},listPageLink:"/changelog/"},i={authorsImageUrls:[void 0]},l=[];function u(e){return(0,r.jsx)(r.Fragment,{})}function m(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var r=n(27378);const o={},a=r.createContext(o);function s(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3bc24440.53a7738a.js b/assets/js/3bc24440.53a7738a.js new file mode 100644 index 0000000000..761280fe55 --- /dev/null +++ b/assets/js/3bc24440.53a7738a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30990],{56959:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var t=s(24246),o=s(71670);const r={mdx:{format:"md"},date:"2022-08-01T19:00",authors:["Josh-Cena","slorber"]},a="2.0.0",i={permalink:"/changelog/2.0.0",source:"@site/changelog/source/2.0.0.md",title:"2.0.0",description:"Bad npm publish, please use 2.0.1",date:"2022-08-01T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-08-01T19:00",authors:["Josh-Cena","slorber"]},unlisted:!1,prevItem:{title:"2.0.1",permalink:"/changelog/2.0.1"},nextItem:{title:"2.0.0-rc.1",permalink:"/changelog/2.0.0-rc.1"},listPageLink:"/changelog/"},l={authorsImageUrls:[void 0,void 0]},c=[{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"Committers: 2",id:"committers-2",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Bad npm publish, please use 2.0.1"}),"\n",(0,t.jsx)(n.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"docusaurus"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7781",children:"#7781"})," refactor(core): log Docusaurus & Node version before exiting (",(0,t.jsx)(n.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"committers-2",children:"Committers: 2"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Joshua Chen (",(0,t.jsx)(n.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["S\xe9bastien Lorber (",(0,t.jsx)(n.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>a});var t=s(27378);const o={},r=t.createContext(o);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c03c7ff.b32fbf54.js b/assets/js/3c03c7ff.b32fbf54.js new file mode 100644 index 0000000000..b6814f6ab1 --- /dev/null +++ b/assets/js/3c03c7ff.b32fbf54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87834],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>_});var r=t(24246),o=t(27378),s=t(40624),i=t(75527),a=t(3620),l=t(44479),c=t(62821),d=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,c._X)(r),i=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(p(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,i]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=f(e),[i,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,d]=j({queryString:t,groupId:r}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=c?c:h;return b({value:e,tabValues:s})?e:null})();(0,l.Z)((()=>{g&&a(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);a(e),d(e),p(e)}),[d,p,s]),tabValues:s}}var w=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:a}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),s=a[r].value;s!==t&&(c(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",O(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:u,onClick:d},o),{className:(0,s.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function C(e){const n=m(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,v({},e,n)),(0,r.jsx)(P,v({},e,n))]})}function _(e){const n=(0,w.Z)();return(0,r.jsx)(C,O(v({},e),{children:g(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(29088));function s({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},38112:(e,n,t)=>{t.d(n,{Z:()=>Ze});var r={};t.r(r),t.d(r,{ButtonExample:()=>T});var o=t(24246),s=t(27378),i=t(40624),a=t(29088),l=t(32711),c=t(36712),d=t(4423),u=t(94544),h=t(30691),p=t(78844),g=t(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:n}=(0,p.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){m(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function y(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function O(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(u.Z,{fallback:(0,o.jsx)(O,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(h.Ac,w({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function C(){const e=(0,a.Z)();return(0,o.jsx)(l.uz,{className:j.playgroundEditor},String(e))}function _(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(c.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(C,{})]})}const D=e=>`${e};`;function S(e){var n,{children:t,transformCode:r}=e,s=y(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,d.Z)(),{liveCodeBlock:{playgroundPosition:a}}=i,c=f();var u;const h=null!==(u=null===(n=s.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==u&&u;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(l.nu,x(w({code:null==t?void 0:t.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:D,theme:c},s),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(_,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(_,{}),(0,o.jsx)(P,{})]})}))})}function N(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function I(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){N(e,n,t[n])}))}return e}function E(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function T(e){return(0,o.jsx)("button",E(I({type:"button"},e),{style:I({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const B=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:s},s,r);var Z,M,A=t(89583),U=t(6324),R=t.n(U);function W(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},$=(z=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){W(e,n,t[n])}))}return e}({},H),G=null!=(G={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?G:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(G)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(G)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(G,e))})),z);var z,G;const F=Object.keys(H);function X(e,n){const t=e.map((e=>{const{start:t,end:r}=$[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function J(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=n;if(s&&V.test(s)){const e=s.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const i=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],n);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],n);case"html":return X(["js","jsBlock","html"],n);case"python":case"py":case"bash":return X(["bash"],n);case"markdown":case"md":return X(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return X(["tex"],n);case"lua":case"haskell":case"sql":return X(["lua"],n);case"wasm":return X(["wasm"],n);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],n);case"vbnet":return X(["vbnet","rem"],n);case"batch":return X(["rem"],n);case"basic":return X(["rem","f90"],n);case"fsharp":return X(["js","ml"],n);case"ocaml":case"sml":return X(["ml"],n);case"fortran":return X(["f90"],n);case"cobol":return X(["cobol"],n);default:return X(F,n)}}(r,o),a=t.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),c=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let p=0;p<a.length;){const e=a[p].match(i);if(!e){p+=1;continue}const n=e.slice(1).find((e=>void 0!==e));c[n]?l[c[n]].range+=`${p},`:d[n]?l[d[n]].start=p:u[n]&&(l[u[n]].range+=`${l[u[n]].start}-${p-1},`),a.splice(p,1)}t=a.join("\n");const h={};return Object.entries(l).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(Z=h)[M=n])&&void 0!==t||(Z[M]=[]),h[n].push(e)}))})),{lineClassNames:h,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function K(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Q(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,Q(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){K(e,n,t[n])}))}return e}({},t),{style:r,className:(0,i.Z)(t.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,i.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,n){const[t,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,n,t=se){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,s.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=t(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function de(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ce(e,n,t[n])}))}return e}function ue(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function he({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=r({line:e,className:(0,i.Z)(n,t&&le.codeLine)}),l=e.map(((e,n)=>(0,o.jsx)("span",de({},s({token:e,key:n})),n)));return(0,o.jsxs)("span",ue(de({},a),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var pe=t(34370);function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function me(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function we(e){return(0,o.jsx)("svg",me(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){je(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ye({code:e,className:n}){const[t,r]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),l=(0,s.useCallback)((()=>{(0,pe.Z)(e),r(!0),a.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,c.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,c.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,c.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(we,{className:xe.copyButtonSuccessIcon})]})})}function ve(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Oe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",Oe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ve(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Ce({className:e,onClick:n,isEnabled:t}){const r=(0,c.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function _e({children:e,className:n="",metastring:t,title:r,showLineNumbers:a,language:l}){const{prism:{defaultLanguage:c,magicComments:d}}=(0,g.L)();var u;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(u=null!=l?l:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==u?u:c),p=f(),b=function(){const[e,n]=(0,s.useState)(!1),[t,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),a=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return ie(o,a),(0,s.useEffect)((()=>{a()}),[e,a]),(0,s.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:i}}(),j=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(q))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:m,code:w}=J(e,{metastring:t,language:h,magicComments:d}),x=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:p,code:w,language:null!=h?h:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,i.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,i.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:m[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(Ce,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(ye,{className:te.codeButton,code:w})]})]})]})}function De(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Se(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Ne(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ie(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ee(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ie(e,n,t[n])}))}return e}const Te=(Le=function(e){var{children:n}=e,t=Ne(e,["children"]);const r=(0,a.Z)(),i=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),l="string"==typeof i?_e:re;return(0,o.jsx)(l,Se(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){De(e,n,t[n])}))}return e}({},t),{children:i}),String(r))},function(e){return e.live?(0,o.jsx)(S,Ee({scope:B},e)):(0,o.jsx)(Le,Ee({},e))});var Le;function Be(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ze(e){return(0,o.jsx)(Te,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Be(e,n,t[n])}))}return e}({},e))}},49702:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png"},41023:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png"},17636:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png"},99347:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png"},45272:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png"},89704:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png"},75746:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png"},95683:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png"},29792:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png"},89595:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png"},30855:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=t(24246),o=t(71670),s=t(97555),i=t(61132);const a='#\n# Your Crowdin credentials\n#\nproject_id: \'428890\'\napi_token_env: CROWDIN_PERSONAL_TOKEN\n# base_path: \'.\'\n# base_url: https://api.crowdin.com\n\n#\n# Choose file structure in Crowdin\n# e.g. true or false\n#\npreserve_hierarchy: true\n\n# We generally want to use the "two-letters-code" of a locale (ie the language)\n# But not for all locales!\n# "pt-BR" may be better to remain as "pt-BR" instead of being transformed to "pt"\n# Note: &/* is Yaml anchor syntax: https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/\nlanguages_mapping: &languages_mapping\n two_letters_code:\n pt-BR: pt-BR\n\n#\n# Files configuration\n#\nfiles:\n - source: /website/i18n/en/**/*\n translation: /website/i18n/%two_letters_code%/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/community/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs-community/current/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/versioned_docs/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/blog/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n languages_mapping: *languages_mapping\n - source: /website/src/pages/**/*\n translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-pages/**/%original_file_name%\n ignore: [/**/*.js, /**/*.jsx, /**/*.ts, /**/*.tsx, /**/*.css]\n languages_mapping: *languages_mapping\n#\n# Source files filter\n# e.g. "/resources/en/*.json"\n#\n#"source" : "/website/docs/**/*.md",\n#\n# Where translations will be placed\n# e.g. "/resources/docs/%two_letters_code%/%original_file_name%"\n#\n#"translation" : "/website/i18n/%language%/docs/current/%original_file_name%",\n#\n# Files or directories for ignore\n# e.g. ["/**/?.txt", "/**/[0-9].txt", "/**/*\\?*.txt"]\n#\n#"ignore" : [],\n#\n# The dest allows you to specify a file name in Crowdin\n# e.g. "/messages.json"\n#\n#"dest" : "",\n#\n# File type\n# e.g. "json"\n#\n#"type" : "",\n#\n# The parameter "update_option" is optional. If it is not set, after the files update the translations for changed strings will be removed. Use to fix typos and for minor changes in the source strings\n# e.g. "update_as_unapproved" or "update_without_changes"\n#\n#"update_option" : "",\n#\n# Start block (for XML only)\n#\n#\n# Defines whether to translate tags attributes.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_attributes" : 1,\n#\n# Defines whether to translate texts placed inside the tags.\n# e.g. 0 or 1 (Default is 1)\n#\n# "translate_content" : 1,\n#\n# This is an array of strings, where each item is the XPaths to DOM element that should be imported\n# e.g. ["/content/text", "/content/text[@value]"]\n#\n# "translatable_elements" : [],\n#\n# Defines whether to split long texts into smaller text segments\n# e.g. 0 or 1 (Default is 1)\n#\n# "content_segmentation" : 1,\n#\n# End block (for XML only)\n#\n#\n# Start .properties block\n#\n#\n# Defines whether single quote should be escaped by another single quote or backslash in exported translations\n# e.g. 0 or 1 or 2 or 3 (Default is 3)\n# 0 - do not escape single quote;\n# 1 - escape single quote by another single quote;\n# 2 - escape single quote by backslash;\n# 3 - escape single quote by another single quote only in strings containing variables ( {0} ).\n#\n# "escape_quotes" : 3,\n#\n# Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations.\n# e.g. 0 or 1 (Default is 0)\n# 0 - do not escape special characters\n# 1 - escape special characters by a backslash\n#\n# "escape_special_characters": 0\n#\n#\n# End .properties block\n#\n#\n# Often software projects have custom names for the directories where translations are placed. crowdin-cli allows you to map your own languages to be understandable by Crowdin.\n#\n#"languages_mapping" : {\n# "two_letters_code" : {\n# "crowdin_language_code" : "local_name"\n# }\n#},\n#\n# Does the first line contain header?\n# e.g. true or false\n#\n#"first_line_contains_header" : true,\n#\n# for spreadsheets\n# e.g. "identifier,source_phrase,context,uk,ru,fr"\n#\n# "scheme" : "",\n';var l=t(38112);const c={id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},d="i18n - Using Crowdin",u={id:"i18n/crowdin",title:"i18n - Using Crowdin",description:"The i18n system of Docusaurus is decoupled from any translation software.",source:"@site/docs/i18n/i18n-crowdin.mdx",sourceDirName:"i18n",slug:"/i18n/crowdin",permalink:"/docs/i18n/crowdin",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-crowdin.mdx",tags:[],version:"current",lastUpdatedBy:"domeav",lastUpdatedAt:1702076503e3,frontMatter:{id:"crowdin",slug:"/i18n/crowdin",toc_max_heading_level:4},sidebar:"docs",previous:{title:"Using Git",permalink:"/docs/i18n/git"},next:{title:"What's next?",permalink:"/docs/guides/whats-next"}},h={},p=[{value:"Crowdin overview",id:"crowdin-overview",level:2},{value:"Crowdin tutorial",id:"crowdin-tutorial",level:2},{value:"Prepare the Docusaurus site",id:"prepare-the-docusaurus-site",level:3},{value:"Create a Crowdin project",id:"create-a-crowdin-project",level:3},{value:"Create the Crowdin configuration",id:"create-the-crowdin-configuration",level:3},{value:"Access token",id:"access-token",level:4},{value:"Other configuration fields",id:"other-configuration-fields",level:4},{value:"Install the Crowdin CLI",id:"install-the-crowdin-cli",level:3},{value:"Upload the sources",id:"upload-the-sources",level:3},{value:"Translate the sources",id:"translate-the-sources",level:3},{value:"Download the translations",id:"download-the-translations",level:3},{value:"Automate with CI",id:"automate-with-ci",level:3},{value:"Advanced Crowdin topics",id:"advanced-crowdin-topics",level:2},{value:"MDX",id:"mdx",level:3},{value:"MDX problems",id:"mdx-problems",level:4},{value:"MDX solutions",id:"mdx-solutions",level:4},{value:"Docs versioning",id:"docs-versioning",level:3},{value:"Multi-instance plugins",id:"multi-instance-plugins",level:3},{value:"Maintaining your site",id:"maintaining-your-site",level:3},{value:"VCS (Git) integrations",id:"vcs-git-integrations",level:3},{value:"In-Context localization",id:"in-context-localization",level:3},{value:"Localize edit URLs",id:"localize-edit-urls",level:3},{value:"Example configuration",id:"example-configuration",level:3},{value:"Machine Translation (MT) issue: links/image handling",id:"machine-translation-mt-issue-linksimage-handling",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"i18n---using-crowdin",children:"i18n - Using Crowdin"}),"\n",(0,r.jsxs)(n.p,{children:["The i18n system of Docusaurus is ",(0,r.jsx)(n.strong,{children:"decoupled from any translation software"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can integrate Docusaurus with the ",(0,r.jsx)(n.strong,{children:"tools and SaaS of your choice"}),", as long as you put the ",(0,r.jsx)(n.strong,{children:"translation files at the correct location"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["We document the usage of ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", as ",(0,r.jsx)(n.strong,{children:"one"})," possible ",(0,r.jsx)(n.strong,{children:"integration example"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This is ",(0,r.jsx)(n.strong,{children:"not an endorsement of Crowdin"})," as the unique choice to translate a Docusaurus site, but it is successfully used by Facebook to translate documentation projects such as ",(0,r.jsx)(n.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,r.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),", and ",(0,r.jsx)(n.a,{href:"https://reasonml.github.io/",children:"ReasonML"}),"."]}),(0,r.jsxs)(n.p,{children:["Refer to the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"Crowdin documentation"})})," and ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"mailto:support@crowdin.com",children:"Crowdin support"})})," for help."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use this ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/4052",children:"community-driven GitHub discussion"})})," to discuss anything related to Docusaurus + Crowdin."]})}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-overview",children:"Crowdin overview"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin is a translation SaaS, offering a ",(0,r.jsx)(n.a,{href:"https://crowdin.com/page/open-source-project-setup-request",children:"free plan for open-source projects"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"We recommend the following translation workflow:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Upload sources"})," to Crowdin (untranslated files)"]}),"\n",(0,r.jsxs)(n.li,{children:["Use Crowdin to ",(0,r.jsx)(n.strong,{children:"translate the content"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Download translations"})," from Crowdin (localized translation files)"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/cli-tool/",children:"CLI"})," to ",(0,r.jsx)(n.strong,{children:"upload sources"})," and ",(0,r.jsx)(n.strong,{children:"download translations"}),", allowing you to automate the translation process."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:[(0,r.jsx)(n.code,{children:"crowdin.yml"})," configuration file"]})," is convenient for Docusaurus, and permits to ",(0,r.jsx)(n.strong,{children:"download the localized translation files at the expected location"})," (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]/.."}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Read the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/",children:"official documentation"})})," to know more about advanced features and different translation workflows."]}),"\n",(0,r.jsx)(n.h2,{id:"crowdin-tutorial",children:"Crowdin tutorial"}),"\n",(0,r.jsxs)(n.p,{children:["This is a walk-through of using Crowdin to translate a newly initialized English Docusaurus website into French, and assume you already followed the ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"i18n tutorial"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The end result can be seen at ",(0,r.jsx)(n.a,{href:"https://docusaurus-crowdin-example.netlify.app/",children:"docusaurus-crowdin-example.netlify.app"})," (",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-crowdin-example",children:"repository"}),")."]}),"\n",(0,r.jsx)(n.h3,{id:"prepare-the-docusaurus-site",children:"Prepare the Docusaurus site"}),"\n",(0,r.jsx)(n.p,{children:"Initialize a new Docusaurus site:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx create-docusaurus@latest website classic\n"})}),"\n",(0,r.jsx)(n.p,{children:"Add the site configuration for the French language:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n i18n: {\n defaultLocale: 'en',\n locales: ['en', 'fr'],\n },\n themeConfig: {\n navbar: {\n items: [\n // ...\n {\n type: 'localeDropdown',\n position: 'left',\n },\n // ...\n ],\n },\n },\n // ...\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Translate the homepage:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Translate from '@docusaurus/Translate';\nimport Layout from '@theme/Layout';\n\nexport default function Home() {\n return (\n <Layout>\n <h1 style={{margin: 20}}>\n <Translate description=\"The homepage main heading\">\n Welcome to my Docusaurus translated site!\n </Translate>\n </h1>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(n.h3,{id:"create-a-crowdin-project",children:"Create a Crowdin project"}),"\n",(0,r.jsxs)(n.p,{children:["Sign up on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"}),", and create a project."]}),"\n",(0,r.jsx)(n.p,{children:"Use English as the source language, and French as the target language."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Create a Crowdin project with english as source language, and french as target language",src:t(49702).Z+"",width:"1868",height:"1576"})}),"\n",(0,r.jsx)(n.p,{children:"Your project is created, but it is empty for now. We will upload the files to translate in the next steps."}),"\n",(0,r.jsx)(n.h3,{id:"create-the-crowdin-configuration",children:"Create the Crowdin configuration"}),"\n",(0,r.jsxs)(n.p,{children:["This configuration (",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/configuration-file/",children:"doc"}),") provides a mapping for the Crowdin CLI to understand:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Where to find the source files to upload (JSON and Markdown)"}),"\n",(0,r.jsxs)(n.li,{children:["Where to download the files after translation (in ",(0,r.jsx)(n.code,{children:"i18n/[locale]"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Create ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," in ",(0,r.jsx)(n.code,{children:"website"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="crowdin.yml"',children:"project_id: '123456'\napi_token_env: CROWDIN_PERSONAL_TOKEN\npreserve_hierarchy: true\nfiles:\n # JSON translation files\n - source: /i18n/en/**/*\n translation: /i18n/%two_letters_code%/**/%original_file_name%\n # Docs Markdown files\n - source: /docs/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%\n # Blog Markdown files\n - source: /blog/**/*\n translation: /i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%\n"})}),"\n",(0,r.jsx)(n.p,{children:"Crowdin has its own syntax for declaring source/translation paths:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/*"}),": everything in a subfolder"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"%two_letters_code%"}),": the 2-letters variant of Crowdin target languages (",(0,r.jsx)(n.code,{children:"fr"})," in our case)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"**/%original_file_name%"}),": the translations will preserve the original folder/file hierarchy"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsx)(n.p,{children:"The Crowdin CLI warnings are not always easy to understand."}),(0,r.jsx)(n.p,{children:"We advise to:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"change one thing at a time"}),"\n",(0,r.jsx)(n.li,{children:"re-upload sources after any configuration change"}),"\n",(0,r.jsxs)(n.li,{children:["use paths starting with ",(0,r.jsx)(n.code,{children:"/"})," (",(0,r.jsx)(n.code,{children:"./"})," does not work)"]}),"\n",(0,r.jsxs)(n.li,{children:["avoid fancy globbing patterns like ",(0,r.jsx)(n.code,{children:"/docs/**/*.(md|mdx)"})," (does not work)"]}),"\n"]})]}),"\n",(0,r.jsx)(n.h4,{id:"access-token",children:"Access token"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"api_token_env"})," attribute defines the ",(0,r.jsx)(n.strong,{children:"env variable name"})," read by the Crowdin CLI."]}),"\n",(0,r.jsxs)(n.p,{children:["You can obtain a ",(0,r.jsx)(n.code,{children:"Personal Access Token"})," on ",(0,r.jsx)(n.a,{href:"https://crowdin.com/settings#api-key",children:"your personal profile page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can keep the default value ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"}),", and set this environment variable and on your computer and on the CI server to the generated access token."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["A Personal Access Tokens grant ",(0,r.jsx)(n.strong,{children:"read-write access to all your Crowdin projects"}),"."]}),(0,r.jsxs)(n.p,{children:["You should ",(0,r.jsx)(n.strong,{children:"not commit"})," it, and it may be a good idea to create a dedicated ",(0,r.jsx)(n.strong,{children:"Crowdin profile for your company"})," instead of using a personal account."]})]}),"\n",(0,r.jsx)(n.h4,{id:"other-configuration-fields",children:"Other configuration fields"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"project_id"}),": can be hardcoded, and is found on ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#api"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"preserve_hierarchy"}),": preserve the folder's hierarchy of your docs on Crowdin UI instead of flattening everything"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"install-the-crowdin-cli",children:"Install the Crowdin CLI"}),"\n",(0,r.jsxs)(n.p,{children:["This tutorial uses the CLI version ",(0,r.jsx)(n.code,{children:"3.5.2"}),", but we expect ",(0,r.jsx)(n.code,{children:"3.x"})," releases to keep working."]}),"\n",(0,r.jsx)(n.p,{children:"Install the Crowdin CLI as an npm package to your Docusaurus site:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @crowdin/cli@3\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @crowdin/cli@3\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"crowdin"})," script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n // ...\n "write-translations": "docusaurus write-translations",\n "crowdin": "crowdin"\n }\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Test that you can run the Crowdin CLI:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin -- --version\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin --version\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin --version\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your computer, to allow the CLI to authenticate with the Crowdin API."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Temporarily, you can hardcode your personal token in ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," with ",(0,r.jsx)(n.code,{children:"api_token: 'MY-TOKEN'"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"upload-the-sources",children:"Upload the sources"}),"\n",(0,r.jsxs)(n.p,{children:["Generate the JSON translation files for the default language in ",(0,r.jsx)(n.code,{children:"website/i18n/en"}),":"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn write-translations\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run write-translations\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Upload all the JSON and Markdown translation files:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin upload\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin upload\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI uploading Docusaurus source files",src:t(89595).Z+"",width:"1156",height:"682"})}),"\n",(0,r.jsxs)(n.p,{children:["Your source files are now visible on the Crowdin interface: ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>/settings#files"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing Docusaurus source files",src:t(75746).Z+"",width:"2462",height:"1048"})}),"\n",(0,r.jsx)(n.h3,{id:"translate-the-sources",children:"Translate the sources"}),"\n",(0,r.jsxs)(n.p,{children:["On ",(0,r.jsx)(n.code,{children:"https://crowdin.com/project/<MY_PROJECT_NAME>"}),", click on the French target language."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI showing French translation files",src:t(99347).Z+"",width:"2430",height:"1736"})}),"\n",(0,r.jsx)(n.p,{children:"Translate some Markdown files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a Markdown file",src:t(29792).Z+"",width:"3044",height:"1586"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"Hide String"})," to make sure translators ",(0,r.jsx)(n.strong,{children:"don't translate things that should not be"}),":"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Front matter: ",(0,r.jsx)(n.code,{children:"id"}),", ",(0,r.jsx)(n.code,{children:"slug"}),", ",(0,r.jsx)(n.code,{children:"tags"})," ..."]}),"\n",(0,r.jsxs)(n.li,{children:["Admonitions: ",(0,r.jsx)(n.code,{children:":::"}),", ",(0,r.jsx)(n.code,{children:":::note"}),", ",(0,r.jsx)(n.code,{children:":::tip"})," ..."]}),"\n"]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI hide string",src:t(45272).Z+"",width:"1518",height:"698"})})]}),"\n",(0,r.jsx)(n.p,{children:"Translate some JSON files."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI to translate a JSON file",src:t(95683).Z+"",width:"2868",height:"1490"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"description"})," attribute of JSON translation files is visible on Crowdin to help translate the strings."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://support.crowdin.com/pre-translation-via-machine/",children:"Pre-translate"})})," your site, and ",(0,r.jsx)(n.strong,{children:"fix pre-translation mistakes manually"})," (enable the Global Translation Memory in settings first)."]}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"Hide String"})," feature first, as Crowdin is pre-translating things too optimistically."]})]}),"\n",(0,r.jsx)(n.h3,{id:"download-the-translations",children:"Download the translations"}),"\n",(0,r.jsx)(n.p,{children:"Use the Crowdin CLI to download the translated JSON and Markdown files."}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn crowdin download\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run crowdin download\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The translated content should be downloaded in ",(0,r.jsx)(n.code,{children:"i18n/fr"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Start your site on the French locale:"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(i.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run start -- --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn run start --locale fr\n"})})}),(0,r.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm run start --locale fr\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Make sure that your website is now translated in French at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/fr/",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/fr/"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"automate-with-ci",children:"Automate with CI"}),"\n",(0,r.jsxs)(n.p,{children:["We will configure the CI to ",(0,r.jsx)(n.strong,{children:"download the Crowdin translations at build time"})," and keep them outside of Git."]}),"\n",(0,r.jsxs)(n.p,{children:["Add ",(0,r.jsx)(n.code,{children:"website/i18n"})," to ",(0,r.jsx)(n.code,{children:".gitignore"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Set the ",(0,r.jsx)(n.code,{children:"CROWDIN_PERSONAL_TOKEN"})," env variable on your CI."]}),"\n",(0,r.jsxs)(n.p,{children:["Create an npm script to ",(0,r.jsx)(n.code,{children:"sync"})," Crowdin (extract sources, upload sources, download translations):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "scripts": {\n "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download"\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Call the ",(0,r.jsx)(n.code,{children:"npm run crowdin:sync"})," script in your CI, just before building the Docusaurus site."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Keep your deploy-previews fast: don't download translations, and use ",(0,r.jsx)(n.code,{children:"npm run build -- --locale en"})," for feature branches."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Crowdin does not support well multiple concurrent uploads/downloads: it is preferable to only include translations to your production deployment, and keep deploy previews untranslated."})}),"\n",(0,r.jsx)(n.h2,{id:"advanced-crowdin-topics",children:"Advanced Crowdin topics"}),"\n",(0,r.jsx)(n.h3,{id:"mdx",children:"MDX"}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"Pay special attention to the JSX fragments in MDX documents!"})}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin ",(0,r.jsx)(n.strong,{children:"does not support officially MDX"}),", but they added ",(0,r.jsxs)(n.strong,{children:["support for the ",(0,r.jsx)(n.code,{children:".mdx"})," extension"]}),", and interpret such files as Markdown (instead of plain text)."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-problems",children:"MDX problems"}),"\n",(0,r.jsx)(n.p,{children:"Crowdin thinks that the JSX syntax is embedded HTML and can mess up with the JSX markup when you download the translations, leading to a site that fails to build due to invalid JSX."}),"\n",(0,r.jsxs)(n.p,{children:["Simple JSX fragments using simple string props like ",(0,r.jsx)(n.code,{children:'<Username name="Sebastien"/>'})," will work fine; more complex JSX fragments using object/array props like ",(0,r.jsx)(n.code,{children:'<User person={{name: "Sebastien"}}/>'})," are more likely to fail due to a syntax that does not look like HTML."]}),"\n",(0,r.jsx)(n.h4,{id:"mdx-solutions",children:"MDX solutions"}),"\n",(0,r.jsxs)(n.p,{children:["We recommend extracting the complex embedded JSX code as separate standalone components. We also added an ",(0,r.jsx)(n.code,{children:"mdx-code-block"})," escape hatch syntax:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:'# How to deploy Docusaurus\n\nTo deploy Docusaurus, run the following command:\n\n````mdx-code-block\xa0\n\nimport Tabs from \'@theme/Tabs\';\n\nimport TabItem from \'@theme/TabItem\';\n\n<Tabs>\n <TabItem value="bash" label="Bash">\n\n ```bash\n GIT_USER=<GITHUB_USERNAME> yarn deploy\n ```\n\n </TabItem>\n <TabItem value="windows" label="Windows">\n\n ```batch\n cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"\n ```\n\n </TabItem>\n</Tabs>\n````\n'})}),"\n",(0,r.jsx)(n.p,{children:"This will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"be interpreted by Crowdin as code blocks (and not mess-up with the markup on download)"}),"\n",(0,r.jsx)(n.li,{children:"be interpreted by Docusaurus as regular JSX (as if it was not wrapped by any code block)"}),"\n",(0,r.jsx)(n.li,{children:"unfortunately opt-out of MDX tooling (IDE syntax highlighting, Prettier...)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"docs-versioning",children:"Docs versioning"}),"\n",(0,r.jsxs)(n.p,{children:["Configure translation files for the ",(0,r.jsx)(n.code,{children:"website/versioned_docs"})," folder."]}),"\n",(0,r.jsxs)(n.p,{children:["When creating a new version, the source strings will generally be quite similar to the current version (",(0,r.jsx)(n.code,{children:"website/docs"}),"), and you don't want to translate the new version docs again and again."]}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin provides a ",(0,r.jsx)(n.code,{children:"Duplicate Strings"})," setting."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin Duplicate Strings option setting",src:t(89704).Z+"",width:"1422",height:"368"})}),"\n",(0,r.jsxs)(n.p,{children:["We recommend using ",(0,r.jsx)(n.code,{children:"Hide"}),", but the ideal setting depends on how much your versions are different."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Not using ",(0,r.jsx)(n.code,{children:"Hide"})," leads to a much larger amount of ",(0,r.jsx)(n.code,{children:"source strings"})," in quotas, and will affect the pricing."]})}),"\n",(0,r.jsx)(n.h3,{id:"multi-instance-plugins",children:"Multi-instance plugins"}),"\n",(0,r.jsx)(n.p,{children:"You need to configure translation files for each plugin instance."}),"\n",(0,r.jsxs)(n.p,{children:["If you have a docs plugin instance with ",(0,r.jsx)(n.code,{children:"id=ios"}),", you will need to configure those source files as well"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"website/ios"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"website/ios_versioned_docs"})," (if versioned)"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"maintaining-your-site",children:"Maintaining your site"}),"\n",(0,r.jsxs)(n.p,{children:["Sometimes, you will ",(0,r.jsx)(n.strong,{children:"remove or rename a source file"})," on Git, and Crowdin will display CLI warnings:"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin CLI: download translation warning",src:t(41023).Z+"",width:"2268",height:"886"})}),"\n",(0,r.jsxs)(n.p,{children:["When your sources are refactored, you should use the Crowdin UI to ",(0,r.jsx)(n.strong,{children:"update your Crowdin files manually"}),":"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Crowdin UI: renaming a file",src:t(17636).Z+"",width:"2472",height:"1186"})}),"\n",(0,r.jsx)(n.h3,{id:"vcs-git-integrations",children:"VCS (Git) integrations"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has multiple VCS integrations for ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/github-integration/",children:"GitHub"}),", GitLab, Bitbucket."]}),"\n",(0,r.jsx)(n.admonition,{title:"TL;DR",type:"warning",children:(0,r.jsx)(n.p,{children:"We recommend avoiding them."})}),"\n",(0,r.jsxs)(n.p,{children:["It could have been helpful to be able to edit the translations in both Git and Crowdin, and have a ",(0,r.jsx)(n.strong,{children:"bi-directional sync"})," between the 2 systems."]}),"\n",(0,r.jsxs)(n.p,{children:["In practice, ",(0,r.jsx)(n.strong,{children:"it didn't work very reliably"})," for a few reasons:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"The Crowdin -> Git sync works fine (with a pull request)"}),"\n",(0,r.jsx)(n.li,{children:"The Git -> Crowdin sync is manual (you have to press a button)"}),"\n",(0,r.jsx)(n.li,{children:"The heuristics used by Crowdin to match existing Markdown translations to existing Markdown sources are not 100% reliable, and you have to verify the result on Crowdin UI after any sync from Git"}),"\n",(0,r.jsx)(n.li,{children:"2 users concurrently editing on Git and Crowdin can lead to a translation loss"}),"\n",(0,r.jsxs)(n.li,{children:["It requires the ",(0,r.jsx)(n.code,{children:"crowdin.yml"})," file to be at the root of the repository"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"in-context-localization",children:"In-Context localization"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin has an ",(0,r.jsx)(n.a,{href:"https://support.crowdin.com/in-context-localization/",children:"In-Context localization"})," feature."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"Unfortunately, it does not work yet for technical reasons, but we have good hope it can be solved."}),(0,r.jsxs)(n.p,{children:["Crowdin replaces Markdown strings with technical IDs such as ",(0,r.jsx)(n.code,{children:"crowdin:id12345"}),", but it does so too aggressively, including hidden strings, and messes up with front matter, admonitions, JSX..."]})]}),"\n",(0,r.jsx)(n.h3,{id:"localize-edit-urls",children:"Localize edit URLs"}),"\n",(0,r.jsxs)(n.p,{children:["When the user is browsing a page at ",(0,r.jsx)(n.code,{children:"/fr/doc1"}),", the edit button will link by default to the unlocalized doc at ",(0,r.jsx)(n.code,{children:"website/docs/doc1.md"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You may prefer the edit button to link to the Crowdin interface instead by using the ",(0,r.jsx)(n.code,{children:"editUrl"})," function to customize the edit URLs on a per-locale basis."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const DefaultLocale = 'en';\n\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n editUrl: ({locale, versionDocsDirPath, docPath}) => {\n // Link to Crowdin for French docs\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n // Link to GitHub for English docs\n return `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`;\n },\n // highlight-end\n },\n blog: {\n // highlight-start\n editUrl: ({locale, blogDirPath, blogPath}) => {\n if (locale !== DefaultLocale) {\n return `https://crowdin.com/project/docusaurus-v2/${locale}`;\n }\n return `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`;\n },\n // highlight-start\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["It is currently ",(0,r.jsx)(n.strong,{children:"not possible to link to a specific file"})," in Crowdin."]})}),"\n",(0,r.jsx)(n.h3,{id:"example-configuration",children:"Example configuration"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Docusaurus configuration file"})," is a good example of using versioning and multi-instance:"]}),"\n","\n",(0,r.jsx)(l.Z,{className:"language-yaml",title:"crowdin.yml",children:a.split("\n").map((e=>!e.startsWith("#")&&e)).filter(Boolean).join("\n")}),"\n",(0,r.jsx)(n.h3,{id:"machine-translation-mt-issue-linksimage-handling",children:"Machine Translation (MT) issue: links/image handling"}),"\n",(0,r.jsxs)(n.p,{children:["Crowdin recently rolled out some major changes to the markdown file format and now the links are treated differently than they were before. Before they were considered as tags, but now they appear as plain text. Because of these changes the plain text links are passed to the MT engine which attempts to translate the target, thus breaking the translation (for instance: this string ",(0,r.jsx)(n.code,{children:"Allez voir [ma merveilleuse page](/ma-merveilleuse-page)"})," is translated ",(0,r.jsx)(n.code,{children:"Check out [my wonderful page](/my-wonderful-page)"}),", and this breaks docusaurus i18n workflow as the page name should not be translated)."]}),"\n",(0,r.jsx)(n.p,{children:"As of 2023 Dec.7, they are not planning to change the logic of how links are treated, so you should have this in mind if you plan to use Crowdin with MT."})]})}function f(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/3c616b11.d778628f.js b/assets/js/3c616b11.d778628f.js new file mode 100644 index 0000000000..19defbb22a --- /dev/null +++ b/assets/js/3c616b11.d778628f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59167],{12996:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var o=s(24246),n=s(71670);const i={},r=void 0,c={id:"tests/ascii/folder/\xe6\xf8\xe5",title:"\xe6\xf8\xe5",description:"Dogfood test for https://github.com/facebook/docusaurus/pull/8137",source:"@site/_dogfooding/_docs tests/tests/ascii/folder/\xe6\xf8\xe5.mdx",sourceDirName:"tests/ascii/folder",slug:"/tests/ascii/folder/\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Admonitions tests",permalink:"/tests/docs/tests/admonitions"},next:{title:"index",permalink:"/tests/docs/tests/ascii/\xe6\xf8\xe5/"}},a={},d=[];function u(t){const e={a:"a",p:"p",...(0,n.a)(),...t.components};return(0,o.jsxs)(e.p,{children:["Dogfood test for ",(0,o.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/8137",children:"https://github.com/facebook/docusaurus/pull/8137"})]})}function l(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>r});var o=s(27378);const n={},i=o.createContext(n);function r(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:r(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ca89387.f1f54b0f.js b/assets/js/3ca89387.f1f54b0f.js new file mode 100644 index 0000000000..d2b2ba5be5 --- /dev/null +++ b/assets/js/3ca89387.f1f54b0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[12792],{6493:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(24246),o=n(71670);const s={mdx:{format:"md"},date:"2022-08-01T20:00",authors:["slorber"]},a="2.0.1",i={permalink:"/changelog/2.0.1",source:"@site/changelog/source/2.0.1.md",title:"2.0.1",description:"Fix bad npm publish of 2.0.0",date:"2022-08-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-08-01T20:00",authors:["slorber"]},unlisted:!1,prevItem:{title:"2.1.0",permalink:"/changelog/2.1.0"},nextItem:{title:"2.0.0",permalink:"/changelog/2.0.0"},listPageLink:"/changelog/"},l={authorsImageUrls:[void 0]},c=[{value:"Committers: 1",id:"committers-1",level:2}];function m(e){const t={a:"a",h2:"h2",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Fix bad npm publish of 2.0.0"}),"\n",(0,r.jsx)(t.h2,{id:"committers-1",children:"Committers: 1"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(t.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>a});var r=n(27378);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ce9624a.b19647d0.js b/assets/js/3ce9624a.b19647d0.js new file mode 100644 index 0000000000..1e66c02161 --- /dev/null +++ b/assets/js/3ce9624a.b19647d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85341],{63761:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>n,default:()=>h,frontMatter:()=>t,metadata:()=>u,toc:()=>a});var o=r(24246),i=r(71670);const t={},n="Awesome Resources",u={id:"resources",title:"Awesome Resources",description:"A curated list of interesting Docusaurus community projects.",source:"@site/community/2-resources.mdx",sourceDirName:".",slug:"/resources",permalink:"/community/resources",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/2-resources.mdx",tags:[],version:"current",lastUpdatedBy:"Daniel Li",lastUpdatedAt:1712835926e3,sidebarPosition:2,frontMatter:{},sidebar:"community",previous:{title:"Team",permalink:"/community/team"},next:{title:"Contributing",permalink:"/community/contributing"}},c={},a=[{value:"Community documentation",id:"community-documentation",level:2},{value:"Videos",id:"videos",level:2},{value:"Articles",id:"articles",level:2},{value:"Showcase",id:"showcase",level:2},{value:"Community plugins",id:"community-plugins",level:2},{value:"Search",id:"search",level:3},{value:"Integrations",id:"integrations",level:3},{value:"Features",id:"features",level:3},{value:"Enterprise usage",id:"enterprise-usage",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"awesome-resources",children:"Awesome Resources"}),"\n",(0,o.jsx)(s.p,{children:"A curated list of interesting Docusaurus community projects."}),"\n",(0,o.jsx)(s.h2,{id:"community-documentation",children:"Community documentation"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.a,{href:"https://docusaurus.community",children:"Docusaurus.community"})})," site extends the ",(0,o.jsx)(s.a,{href:"/docs",children:"official docs"})," with more complex examples and full articles that recommend best practices and provide solutions to common problems."]}),"\n",(0,o.jsx)(s.p,{children:"It is also a full Docusaurus application just like our main site, so customization and experimentation examples are perfectly suited to be hosted there."}),"\n",(0,o.jsxs)(s.admonition,{type:"info",children:[(0,o.jsx)(s.p,{children:"We might allow direct links to be added in our official documentation that point to the community documentation, on a case-by-case basis, if the community finds such links to articles useful."}),(0,o.jsx)(s.p,{children:"We are also contemplating further integration into the official documentation at some point in the future."})]}),"\n",(0,o.jsx)(s.h2,{id:"videos",children:"Videos"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"F8 2019: Using Docusaurus to Create Open Source Websites"})}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"articles",children:"Articles"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/webbertakken/awesome-docusaurus#readme",children:"Awesome Docusaurus"})," - Community curated list of Docusaurus resources."]}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://dev.to/mrmuhammadali/live-code-editing-in-docusaurus-ux-at-its-best-2hj1",children:"Live code editing in Docusaurus"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://blog.johnnyreilly.com/definitive-guide-to-migrating-from-blogger-to-docusaurus",children:"The definitive guide to migrating from Blogger to Docusaurus"})}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"showcase",children:"Showcase"}),"\n",(0,o.jsxs)(s.p,{children:["See the ",(0,o.jsx)("a",{href:r(66448).Z("showcase"),children:"showcase"}),"."]}),"\n",(0,o.jsx)(s.h2,{id:"community-plugins",children:"Community plugins"}),"\n",(0,o.jsx)(s.h3,{id:"search",children:"Search"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/daldridge/docusaurus-plugin-lunr",children:"docusaurus-plugin-lunr"})," - Docusaurus plugin to create a local search index for use with Lunr.js"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/lelouch77/docusaurus-lunr-search",children:"docusaurus-lunr-search"})," - Offline Search for Docusaurus"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/cmfcmf/docusaurus-search-local",children:"docusaurus-search-local"})," - Offline/local search for Docusaurus"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"@easyops-cn/docusaurus-search-local"})," - Offline/local search for Docusaurus (language of zh supported)"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/typesense/docusaurus-theme-search-typesense",children:"docusaurus-theme-search-typesense"})," - Docusaurus plugin for ",(0,o.jsx)(s.a,{href:"https://typesense.org/docs/latest/guide/docsearch.html",children:"Typesense DocSearch"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/motifland/markprompt-js/tree/main/packages/docusaurus-theme-search",children:"@markprompt/docusaurus-theme-search"})," - Docusaurus plugin to add generative AI / LLM-powered docs search, powered by ",(0,o.jsx)(s.a,{href:"https://markprompt.com",children:"Markprompt"}),"."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/tauri-apps/meilisearch-docsearch",children:"meilisearch-docsearch"})," - Docusaurus plugin for ",(0,o.jsx)(s.a,{href:"https://www.meilisearch.com",children:"Meilisearch"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus",children:"@orama/plugin-docusaurus"})," - ",(0,o.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v2"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/askorama/orama/tree/main/packages/plugin-docusaurus-v3",children:"@orama/plugin-docusaurus-v3"})," - ",(0,o.jsx)(s.a,{href:"https://askorama.ai/",children:"Orama"})," plugin for Docusaurus v3"]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"integrations",children:"Integrations"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/jonnynabors/docusaurus2-dotenv",children:"docusaurus2-dotenv"})," - A Docusaurus plugin that supports dotenv and other environment variables"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/PostHog/posthog-docusaurus",children:"posthog-docusaurus"})," - Integrate ",(0,o.jsx)(s.a,{href:"https://posthog.com/",children:"PostHog"})," product analytics with Docusaurus"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/Moesif/docusaurus-plugin-moesif",children:"docusaurus-plugin-moesif"})," - Adds ",(0,o.jsx)(s.a,{href:"https://www.moesif.com/",children:"Moesif API Analytics"})," to track user behavior and pinpoint where developers drop off in your activation funnel."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/sgromkov/docusaurus-plugin-yandex-metrica",children:"docusaurus-plugin-yandex-metrica"})," - Adds ",(0,o.jsx)(s.a,{href:"https://metrika.yandex.ru/",children:"Yandex Metrika"})," counter for evaluating site traffic and analyzing user behavior."]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"features",children:"Features"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/saucelabs/docusaurus-theme-github-codeblock",children:"docusaurus-theme-github-codeblock"}),". A Docusaurus plugin that supports referencing code examples from public GitHub repositories"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/jean-humann/docs-to-pdf",children:"docs-to-pdf"})," - Generate documentation into PDF format"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:"docusaurus-plugin-sass"})," - Sass/SCSS stylesheets support"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/rdilweb/docusaurus-plugin-remote-content",children:"docusaurus-plugin-remote-content"})," - A Docusaurus plugin that allows you to fetch content from remote sources"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/graphql-markdown/graphql-markdown",children:"@graphql-markdown/docusaurus"})," - A Docusaurus plugin for generating documentation from GraphQL schemas"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen-typescript",children:"docusaurus-plugin-react-docgen-typescript"})," - A Docusaurus plugin for loading type annotations from ",(0,o.jsx)(s.code,{children:"react-docgen-typescript"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-react-docgen",children:"docusaurus-plugin-react-docgen"})," - A Docusaurus plugin for loading type annotations from ",(0,o.jsx)(s.code,{children:"react-docgen"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/atomicpages/docusaurus-plugin-module-alias",children:"docusaurus-plugin-module-alias"})," - A Docusaurus plugin for quickly aliasing local modules"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/protobuffet/docusaurus-protobuffet",children:"docusaurus-protobuffet"})," - Docusaurus toolset for Protobuf contract documentation"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/signcl/docusaurus-prince-pdf",children:"docusaurus-prince-pdf"})," - Generate PDF with PrinceXML for better font subsetting and ToC features. Support Docusaurus sites"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"})," - A Docusaurus preset for integrating OpenAPI documentation into your docs with ",(0,o.jsx)(s.a,{href:"https://github.com/redocly/redoc",children:"Redoc"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/flexanalytics/plugin-image-zoom",children:"plugin-image-zoom"})," - An Image Zoom plugin for Docusaurus"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/packages/docusaurus-plugin-typedoc",children:"docusaurus-plugin-typedoc"})," - A Docusaurus plugin to build documentation with ",(0,o.jsx)(s.a,{href:"https://typedoc.org/",children:"TypeDoc"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/PaloAltoNetworks/docusaurus-openapi-docs",children:"docusaurus-openapi-docs"})," - A Docusaurus plugin and theme for generating interactive OpenAPI docs"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/moojing/docusaurus-post-generator",children:"docusaurus-post-generator"})," - A command line tool for user to add a blog/doc file quickly by command like ",(0,o.jsx)(s.code,{children:"yarn gen-post new [template] [post_name]"}),"."]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"enterprise-usage",children:"Enterprise usage"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Facebook"}),"\n",(0,o.jsx)(s.li,{children:"Google"}),"\n",(0,o.jsx)(s.li,{children:"Stripe"}),"\n",(0,o.jsx)(s.li,{children:"Algolia"}),"\n",(0,o.jsx)(s.li,{children:"Callstack"}),"\n",(0,o.jsx)(s.li,{children:"Sauce Labs"}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>u,a:()=>n});var o=r(27378);const i={},t=o.createContext(i);function n(e){const s=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function u(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),o.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3d73fe52.cbd7dad2.js b/assets/js/3d73fe52.cbd7dad2.js new file mode 100644 index 0000000000..cb518839f5 --- /dev/null +++ b/assets/js/3d73fe52.cbd7dad2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86599],{9384:(e,s,i)=>{i.r(s),i.d(s,{default:()=>d});var n=i(24246),t=(i(27378),i(88613));function d(){return(0,n.jsx)(t.Z,{children:(0,n.jsx)("p",{id:"z-index-test",children:"This should have a z-index of 100"})})}}}]); \ No newline at end of file diff --git a/assets/js/3dd2dc02.0ed98ee1.js b/assets/js/3dd2dc02.0ed98ee1.js new file mode 100644 index 0000000000..adb57863d4 --- /dev/null +++ b/assets/js/3dd2dc02.0ed98ee1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2176],{1743:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>r});var s=t(24246),o=t(71670);const i={description:"How the Docusaurus client is structured"},l="Client architecture",c={id:"advanced/client",title:"Client architecture",description:"How the Docusaurus client is structured",source:"@site/docs/advanced/client.mdx",sourceDirName:"advanced",slug:"/advanced/client",permalink:"/docs/advanced/client",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/advanced/client.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,frontMatter:{description:"How the Docusaurus client is structured"},sidebar:"docs",previous:{title:"Static site generation",permalink:"/docs/advanced/ssg"},next:{title:"Upgrading Docusaurus",permalink:"/docs/migration"}},a={},r=[{value:"Theme aliases",id:"theme-aliases",level:2},{value:"Client modules",id:"client-modules",level:2},{value:"Client module lifecycles",id:"client-module-lifecycles",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"client-architecture",children:"Client architecture"}),"\n",(0,s.jsx)(n.h2,{id:"theme-aliases",children:"Theme aliases"}),"\n",(0,s.jsxs)(n.p,{children:["A theme works by exporting a set of components, e.g. ",(0,s.jsx)(n.code,{children:"Navbar"}),", ",(0,s.jsx)(n.code,{children:"Layout"}),", ",(0,s.jsx)(n.code,{children:"Footer"}),", to render the data passed down from plugins. Docusaurus and users use these components by importing them using the ",(0,s.jsx)(n.code,{children:"@theme"})," webpack alias:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import Navbar from '@theme/Navbar';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The alias ",(0,s.jsx)(n.code,{children:"@theme"})," can refer to a few directories, in the following priority:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["A user's ",(0,s.jsx)(n.code,{children:"website/src/theme"})," directory, which is a special directory that has the higher precedence."]}),"\n",(0,s.jsxs)(n.li,{children:["A Docusaurus theme package's ",(0,s.jsx)(n.code,{children:"theme"})," directory."]}),"\n",(0,s.jsx)(n.li,{children:"Fallback components provided by Docusaurus core (usually not needed)."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This is called a ",(0,s.jsx)(n.em,{children:"layered architecture"}),": a higher-priority layer providing the component would shadow a lower-priority layer, making swizzling possible. Given the following structure:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"website\n\u251c\u2500\u2500 node_modules\n\u2502 \u2514\u2500\u2500 @docusaurus/theme-classic\n\u2502 \u2514\u2500\u2500 theme\n\u2502 \u2514\u2500\u2500 Navbar.js\n\u2514\u2500\u2500 src\n \u2514\u2500\u2500 theme\n \u2514\u2500\u2500 Navbar.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"website/src/theme/Navbar.js"})," takes precedence whenever ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is imported. This behavior is called component swizzling. If you are familiar with Objective C where a function's implementation can be swapped during runtime, it's the exact same concept here with changing the target ",(0,s.jsx)(n.code,{children:"@theme/Navbar"})," is pointing to!"]}),"\n",(0,s.jsxs)(n.p,{children:['We already talked about how the "userland theme" in ',(0,s.jsx)(n.code,{children:"src/theme"})," can re-use a theme component through the ",(0,s.jsx)(n.a,{href:"/docs/swizzling#wrapping",children:(0,s.jsx)(n.code,{children:"@theme-original"})})," alias. One theme package can also wrap a component from another theme, by importing the component from the initial theme, using the ",(0,s.jsx)(n.code,{children:"@theme-init"})," import."]}),"\n",(0,s.jsxs)(n.p,{children:["Here's an example of using this feature to enhance the default theme ",(0,s.jsx)(n.code,{children:"CodeBlock"})," component with a ",(0,s.jsx)(n.code,{children:"react-live"})," playground feature."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"import InitialCodeBlock from '@theme-init/CodeBlock';\nimport React from 'react';\n\nexport default function CodeBlock(props) {\n return props.live ? (\n <ReactLivePlayground {...props} />\n ) : (\n <InitialCodeBlock {...props} />\n );\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Check the code of ",(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," for details."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:['Unless you want to publish a re-usable "theme enhancer" (like ',(0,s.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"}),"), you likely don't need ",(0,s.jsx)(n.code,{children:"@theme-init"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:'It can be quite hard to wrap your mind around these aliases. Let\'s imagine the following case with a super convoluted setup with three themes/plugins and the site itself all trying to define the same component. Internally, Docusaurus loads these themes as a "stack".'}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"+-------------------------------------------------+\n| `website/src/theme/CodeBlock.js` | <-- `@theme/CodeBlock` always points to the top\n+-------------------------------------------------+\n| `theme-live-codeblock/theme/CodeBlock/index.js` | <-- `@theme-original/CodeBlock` points to the topmost non-swizzled component\n+-------------------------------------------------+\n| `plugin-awesome-codeblock/theme/CodeBlock.js` |\n+-------------------------------------------------+\n| `theme-classic/theme/CodeBlock/index.js` | <-- `@theme-init/CodeBlock` always points to the bottom\n+-------------------------------------------------+\n"})}),"\n",(0,s.jsxs)(n.p,{children:['The components in this "stack" are pushed in the order of ',(0,s.jsx)(n.code,{children:"preset plugins > preset themes > plugins > themes > site"}),", so the swizzled component in ",(0,s.jsx)(n.code,{children:"website/src/theme"})," always comes out on top because it's loaded last."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme/*"})," always points to the topmost component\u2014when ",(0,s.jsx)(n.code,{children:"CodeBlock"})," is swizzled, all other components requesting ",(0,s.jsx)(n.code,{children:"@theme/CodeBlock"})," receive the swizzled version."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-original/*"})," always points to the topmost non-swizzled component. That's why you can import ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),' in the swizzled component\u2014it points to the next one in the "component stack", a theme-provided one. Plugin authors should not try to use this because your component could be the topmost component and cause a self-import.']}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"@theme-init/*"})," always points to the bottommost component\u2014usually, this comes from the theme or plugin that first provides this component. Individual plugins / themes trying to enhance code block can safely use ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," to get its basic version. Site creators should generally not use this because you likely want to enhance the ",(0,s.jsx)(n.em,{children:"topmost"})," instead of the ",(0,s.jsx)(n.em,{children:"bottommost"})," component. It's also possible that the ",(0,s.jsx)(n.code,{children:"@theme-init/CodeBlock"})," alias does not exist at all\u2014Docusaurus only creates it when it points to a different one from ",(0,s.jsx)(n.code,{children:"@theme-original/CodeBlock"}),", i.e. when it's provided by more than one theme. We don't waste aliases!"]}),"\n",(0,s.jsx)(n.h2,{id:"client-modules",children:"Client modules"}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are part of your site's bundle, just like theme components. However, they are usually side-effect-ful. Client modules are anything that can be ",(0,s.jsx)(n.code,{children:"import"}),"ed by Webpack\u2014CSS, JS, etc. JS scripts usually work on the global context, like registering event listeners, creating global variables..."]}),"\n",(0,s.jsx)(n.p,{children:"These modules are imported globally before React even renders the initial UI."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="@docusaurus/core/App.tsx"',children:"// How it works under the hood\nimport '@generated/client-modules';\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Plugins and sites can both declare client modules, through ",(0,s.jsx)(n.a,{href:"/docs/api/plugin-methods/lifecycle-apis#getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules"})})," and ",(0,s.jsx)(n.a,{href:"/docs/api/docusaurus-config#clientModules",children:(0,s.jsx)(n.code,{children:"siteConfig.clientModules"})}),", respectively."]}),"\n",(0,s.jsxs)(n.p,{children:["Client modules are called during server-side rendering as well, so remember to check the ",(0,s.jsx)(n.a,{href:"/docs/advanced/ssg#escape-hatches",children:"execution environment"})," before accessing client-side globals."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="mySiteGlobalJs.js"',children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n // As soon as the site loads in the browser, register a global event listener\n window.addEventListener('keydown', (e) => {\n if (e.code === 'Period') {\n location.assign(location.href.replace('.com', '.dev'));\n }\n });\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["CSS stylesheets imported as client modules are ",(0,s.jsx)(n.a,{href:"/docs/styling-layout#global-styles",children:"global"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-css",metastring:'title="mySiteGlobalCss.css"',children:"/* This stylesheet is global. */\n.globalSelector {\n color: red;\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"client-module-lifecycles",children:"Client module lifecycles"}),"\n",(0,s.jsxs)(n.p,{children:["Besides introducing side-effects, client modules can optionally export two lifecycle functions: ",(0,s.jsx)(n.code,{children:"onRouteUpdate"})," and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Because Docusaurus builds a single-page application, ",(0,s.jsx)(n.code,{children:"script"})," tags will only be executed the first time the page loads, but will not re-execute on page transitions. These lifecycles are useful if you have some imperative JS logic that should execute every time a new page has loaded, e.g., to manipulate DOM elements, to send analytics data, etc."]}),"\n",(0,s.jsx)(n.p,{children:"For every route transition, there will be several important timings:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The user clicks a link, which causes the router to change its current location."}),"\n",(0,s.jsx)(n.li,{children:"Docusaurus preloads the next route's assets, while keeping displaying the current page's content."}),"\n",(0,s.jsx)(n.li,{children:"The next route's assets have loaded."}),"\n",(0,s.jsx)(n.li,{children:"The new location's route component gets rendered to DOM."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"})," will be called at event (2), and ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"})," will be called at (4). They both receive the current location and the previous location (which can be ",(0,s.jsx)(n.code,{children:"null"}),", if this is the first screen)."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"onRouteUpdate"}),' can optionally return a "cleanup" callback, which will be called at (3). For example, if you want to display a progress bar, you can start a timeout in ',(0,s.jsx)(n.code,{children:"onRouteUpdate"}),", and clear the timeout in the callback. (The classic theme already provides an ",(0,s.jsx)(n.code,{children:"nprogress"})," integration this way.)"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the new page's DOM is only available during event (4). If you need to manipulate the new page's DOM, you'll likely want to use ",(0,s.jsx)(n.code,{children:"onRouteDidUpdate"}),", which will be fired as soon as the DOM on the new page has mounted."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="myClientModule.js"',children:"export function onRouteDidUpdate({location, previousLocation}) {\n // Don't execute if we are still on the same page; the lifecycle may be fired\n // because the hash changes (e.g. when navigating between headings)\n if (location.pathname !== previousLocation?.pathname) {\n const title = document.getElementsByTagName('h1')[0];\n if (title) {\n title.innerText += '\u2764\ufe0f';\n }\n }\n}\n\nexport function onRouteUpdate({location, previousLocation}) {\n if (location.pathname !== previousLocation?.pathname) {\n const progressBarTimeout = window.setTimeout(() => {\n nprogress.start();\n }, delay);\n return () => window.clearTimeout(progressBarTimeout);\n }\n return undefined;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Or, if you are using TypeScript and you want to leverage contextual typing:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",metastring:'title="myClientModule.ts"',children:"import type {ClientModule} from '@docusaurus/types';\n\nconst module: ClientModule = {\n onRouteUpdate({location, previousLocation}) {\n // ...\n },\n onRouteDidUpdate({location, previousLocation}) {\n // ...\n },\n};\nexport default module;\n"})}),"\n",(0,s.jsx)(n.p,{children:"Both lifecycles will fire on first render, but they will not fire on server-side, so you can safely access browser globals in them."}),"\n",(0,s.jsx)(n.admonition,{title:"Prefer using React",type:"tip",children:(0,s.jsxs)(n.p,{children:["Client module lifecycles are purely imperative, and you can't use React hooks or access React contexts within them. If your operations are state-driven or involve complicated DOM manipulations, you should consider ",(0,s.jsx)(n.a,{href:"/docs/swizzling",children:"swizzling components"})," instead."]})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>l});var s=t(27378);const o={},i=s.createContext(o);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e206144.0de76f70.js b/assets/js/3e206144.0de76f70.js new file mode 100644 index 0000000000..524b3c0831 --- /dev/null +++ b/assets/js/3e206144.0de76f70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83230],{26371:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var r=t(24246),o=t(71670);const n={},i="Support",a={id:"support",title:"Support",description:"Docusaurus has a community of thousands of developers.",source:"@site/community/0-support.mdx",sourceDirName:".",slug:"/support",permalink:"/community/support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/0-support.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,sidebarPosition:0,frontMatter:{},sidebar:"community",next:{title:"Team",permalink:"/community/team"}},u={},c=[{value:"Stack Overflow",id:"stack-overflow",level:2},{value:"Discussion forums",id:"discussion-forums",level:2},{value:"Feature requests",id:"feature-requests",level:2},{value:"News",id:"news",level:2}];function l(e){const s={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"support",children:"Support"}),"\n",(0,r.jsx)(s.p,{children:"Docusaurus has a community of thousands of developers."}),"\n",(0,r.jsx)(s.p,{children:"On this page we've listed some Docusaurus-related communities that you can be a part of; see the other pages in this section for additional online and in-person learning materials."}),"\n",(0,r.jsxs)(s.p,{children:["Before participating in Docusaurus' communities, ",(0,r.jsx)(s.a,{href:"https://engineering.fb.com/codeofconduct/",children:"please read our Code of Conduct"}),". We have adopted the ",(0,r.jsx)(s.a,{href:"https://www.contributor-covenant.org/",children:"Contributor Covenant"})," and we expect that all community members adhere to the guidelines within."]}),"\n",(0,r.jsx)(s.h2,{id:"stack-overflow",children:"Stack Overflow"}),"\n",(0,r.jsxs)(s.p,{children:["Stack Overflow is a popular forum to ask code-level questions or if you're stuck with a specific error. Read through the ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/tagged/docusaurus",children:"existing questions"})," tagged with ",(0,r.jsx)(s.strong,{children:"docusaurus"})," or ",(0,r.jsx)(s.a,{href:"https://stackoverflow.com/questions/ask?tags=docusaurus",children:"ask your own"}),"!"]}),"\n",(0,r.jsx)(s.h2,{id:"discussion-forums",children:"Discussion forums"}),"\n",(0,r.jsx)(s.p,{children:"There are many online forums for discussion about best practices and application architecture as well as the future of Docusaurus. If you have an answerable code-level question, Stack Overflow is usually a better fit."}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Docusaurus online chat"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/fwbcrQ3dHR",children:"#help-and-questions"})," for user help"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://discord.gg/6g6ASPA",children:"#contributors"})," for contributing help"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://www.reddit.com/r/docusaurus/",children:"Reddit's Docusaurus community"})}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"feature-requests",children:"Feature requests"}),"\n",(0,r.jsxs)(s.p,{children:["For new feature requests, you can create a post on our ",(0,r.jsx)(s.a,{href:"/feature-requests",children:"feature requests board (Canny)"}),", which is a handy tool for road-mapping and allows for sorting by upvotes, which gives the core team a better indicator of what features are in high demand, as compared to GitHub issues which are harder to triage. Refrain from making a Pull Request for new features (especially large ones) as someone might already be working on it or will be part of our roadmap. Talk to us first!"]}),"\n",(0,r.jsx)(s.h2,{id:"news",children:"News"}),"\n",(0,r.jsxs)(s.p,{children:["For the latest news about Docusaurus, ",(0,r.jsxs)(s.a,{href:"https://twitter.com/docusaurus",children:["follow ",(0,r.jsx)(s.strong,{children:"@docusaurus"})," on Twitter"]})," and the ",(0,r.jsx)(s.a,{href:"/blog",children:"official Docusaurus blog"})," on this website."]})]})}function d(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>a,a:()=>i});var r=t(27378);const o={},n=r.createContext(o);function i(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3ef80f0b.e4a604eb.js b/assets/js/3ef80f0b.e4a604eb.js new file mode 100644 index 0000000000..3ffb122756 --- /dev/null +++ b/assets/js/3ef80f0b.e4a604eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52865],{92082:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var r=n(24246),o=n(71670);const t={description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},i="Browser support",a={id:"browser-support",title:"Browser support",description:"How to keep a reasonable bundle size while ensuring sufficient browser support.",source:"@site/docs/browser-support.mdx",sourceDirName:".",slug:"/browser-support",permalink:"/docs/browser-support",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/browser-support.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,frontMatter:{description:"How to keep a reasonable bundle size while ensuring sufficient browser support."},sidebar:"docs",previous:{title:"Search",permalink:"/docs/search"},next:{title:"SEO",permalink:"/docs/seo"}},l={},d=[{value:"Purpose",id:"purpose",level:2},{value:"Default values",id:"default-values",level:2},{value:"Read more",id:"read-more",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"browser-support",children:"Browser support"}),"\n",(0,r.jsxs)(s.p,{children:["Docusaurus allows sites to define the list of supported browsers through a ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist",children:"browserslist configuration"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"purpose",children:"Purpose"}),"\n",(0,r.jsx)(s.p,{children:"Websites need to balance between backward compatibility and bundle size. As old browsers do not support modern APIs or syntax, more code is needed to implement the same functionality."}),"\n",(0,r.jsxs)(s.p,{children:["For example, you may use the ",(0,r.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining",children:"optional chaining syntax"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"const value = obj?.prop?.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"...which unfortunately is only recognized by browser versions released after 2020. To be compatible with earlier browser versions, when building your site for production, our JS loader will transpile your code to a more verbose syntax:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-js",children:"var _obj, _obj$prop;\n\nconst value =\n (_obj = obj) === null || _obj === void 0\n ? void 0\n : (_obj$prop = _obj.prop) === null || _obj$prop === void 0\n ? void 0\n : _obj$prop.val;\n"})}),"\n",(0,r.jsx)(s.p,{children:"However, this penalizes all other users with increased site load time because the 29-character line now becomes 168 characters\u2014a 6-fold increase! (In practice, it will be better because the names used will be shorter.) As a tradeoff, the JS loader only transpiles the syntax to the degree that's supported by all browser versions defined in the browser list."}),"\n",(0,r.jsxs)(s.p,{children:["The browser list by default is provided through the ",(0,r.jsx)(s.code,{children:"package.json"})," file as a root ",(0,r.jsx)(s.code,{children:"browserslist"})," field."]}),"\n",(0,r.jsx)(s.admonition,{type:"warning",children:(0,r.jsx)(s.p,{children:"On old browsers, the compiled output will use unsupported (too recent) JS syntax, causing React to fail to initialize and end up with a static website with only HTML/CSS and no JS."})}),"\n",(0,r.jsx)(s.h2,{id:"default-values",children:"Default values"}),"\n",(0,r.jsxs)(s.p,{children:["Websites initialized with the default classic template has the following in ",(0,r.jsx)(s.code,{children:"package.json"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-json",metastring:'title="package.json"',children:'{\n "name": "docusaurus",\n // ...\n // highlight-start\n "browserslist": {\n "production": [">0.5%", "not dead", "not op_mini all"],\n "development": [\n "last 1 chrome version",\n "last 1 firefox version",\n "last 1 safari version"\n ]\n }\n // highlight-end\n // ...\n}\n'})}),"\n",(0,r.jsx)(s.p,{children:"Explained in natural language, the browsers supported in production are those:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["With more than 0.5% of market share; ",(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsxs)(s.li,{children:['Has official support or updates in the past 24 months (the opposite of "dead"); ',(0,r.jsx)(s.em,{children:"and"})]}),"\n",(0,r.jsx)(s.li,{children:"Is not Opera Mini."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"And browsers used in development are:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["The latest version of Chrome ",(0,r.jsx)(s.em,{children:"or"})," Firefox ",(0,r.jsx)(s.em,{children:"or"})," Safari."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:['You can "evaluate" any config with the ',(0,r.jsx)(s.code,{children:"browserslist"})," CLI to obtain the actual list:"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'npx browserslist --env="production"\n'})}),"\n",(0,r.jsx)(s.p,{children:"The output is all browsers supported in production. Below is the output in January 2022:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-text",children:"and_chr 96\nand_uc 12.12\nchrome 96\nchrome 95\nchrome 94\nedge 96\nfirefox 95\nfirefox 94\nie 11\nios_saf 15.2\nios_saf 15.0-15.1\nios_saf 14.5-14.8\nios_saf 14.0-14.4\nios_saf 12.2-12.5\nopera 82\nopera 81\nsafari 15.1\nsafari 14.1\nsafari 13.1\n"})}),"\n",(0,r.jsx)(s.h2,{id:"read-more",children:"Read more"}),"\n",(0,r.jsxs)(s.p,{children:["You may wish to visit the ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md",children:"browserslist documentation"})," for more specifications, especially the accepted ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#queries",children:"query values"})," and ",(0,r.jsx)(s.a,{href:"https://github.com/browserslist/browserslist/blob/main/README.md#best-practices",children:"best practices"}),"."]})]})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var r=n(27378);const o={},t=r.createContext(o);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f37e3c4.cab24fd8.js b/assets/js/3f37e3c4.cab24fd8.js new file mode 100644 index 0000000000..e184b33155 --- /dev/null +++ b/assets/js/3f37e3c4.cab24fd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16292],{37888:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>h,default:()=>u,frontMatter:()=>t,metadata:()=>n,toc:()=>c});var i=r(24246),l=r(71670);const t={mdx:{format:"md"},date:"2021-06-30T20:00",authors:["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},h="2.0.0-beta.3",n={permalink:"/changelog/2.0.0-beta.3",source:"@site/changelog/source/2.0.0-beta.3.md",title:"2.0.0-beta.3",description:"New Feature",date:"2021-06-30T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Adam Uhl\xed\u0159",alias:"AuHau",url:"https://github.com/AuHau",imageURL:"https://github.com/AuHau.png",key:"AuHau"},{name:"bperlmutter",alias:"bperlmutter",url:"https://github.com/bperlmutter",imageURL:"https://github.com/bperlmutter.png",key:"bperlmutter"},{name:"dirslashls",alias:"dirslashls",url:"https://github.com/dirslashls",imageURL:"https://github.com/dirslashls.png",key:"dirslashls"},{name:"Ayush das",alias:"iamayushdas",url:"https://github.com/iamayushdas",imageURL:"https://github.com/iamayushdas.png",key:"iamayushdas"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jules Sam. Randolph",alias:"jsamr",url:"https://github.com/jsamr",imageURL:"https://github.com/jsamr.png",key:"jsamr"},{name:"Danny Lin",alias:"kdrag0n",url:"https://github.com/kdrag0n",imageURL:"https://github.com/kdrag0n.png",key:"kdrag0n"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Rami Yushuvaev",alias:"ramiy",url:"https://github.com/ramiy",imageURL:"https://github.com/ramiy.png",key:"ramiy"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Taylor Reece",alias:"taylorreece",url:"https://github.com/taylorreece",imageURL:"https://github.com/taylorreece.png",key:"taylorreece"}],frontMatter:{mdx:{format:"md"},date:"2021-06-30T20:00",authors:["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},unlisted:!1,prevItem:{title:"2.0.0-beta.4",permalink:"/changelog/2.0.0-beta.4"},nextItem:{title:"2.0.0-beta.2",permalink:"/changelog/2.0.0-beta.2"},listPageLink:"/changelog/page/2"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},c=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 11",id:"committers-11",level:2}];function o(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5092",children:"#5092"})," feat(v2): add icon to external footer links (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5080",children:"#5080"})," fix(v2): classic theme - semantic correct anchors links (",(0,i.jsx)(s.a,{href:"https://github.com/AuHau",children:"@AuHau"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5081",children:"#5081"})," fix(v2): restore previous scroll position on back button click (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5063",children:"#5063"})," fix(v2): restore responsive menu (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5094",children:"#5094"})," fix(v2): fix typos in swizzle command (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5095",children:"#5095"})," fix(v2): fix swizzle readComponent (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5059",children:"#5059"})," fix(v2): fix webpack SSG plugin error thrown due to new URL() / __filename (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5097",children:"#5097"})," fix(v2): fix useEffect infinite loop in blogOnly mode (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5074",children:"#5074"})," fix(v2): allow negative sidebar positions (",(0,i.jsx)(s.a,{href:"https://github.com/kdrag0n",children:"@kdrag0n"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5093",children:"#5093"})," fix(v2): redirect from should work with trailingSlash: true (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5085",children:"#5085"})," fix(v2): redirect plugin should emit redirect files with lower precedence than redirect target (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5082",children:"#5082"})," fix(v2): never remove trailing slash from site root like '/baseUrl/' (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5068",children:"#5068"})," fix(v2): sitemap should respect the global trailingSlash config option. (",(0,i.jsx)(s.a,{href:"https://github.com/taylorreece",children:"@taylorreece"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5058",children:"#5058"})," fix(v2): fix bad @docusaurus/types Plugin type generics (",(0,i.jsx)(s.a,{href:"https://github.com/jsamr",children:"@jsamr"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5064",children:"#5064"})," docs(v2): Rewrite markdown images section (",(0,i.jsx)(s.a,{href:"https://github.com/ramiy",children:"@ramiy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5086",children:"#5086"})," docs(v2): Add SQL Frames to the showcase (",(0,i.jsx)(s.a,{href:"https://github.com/dirslashls",children:"@dirslashls"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5073",children:"#5073"})," docs(v2): update installation docs (",(0,i.jsx)(s.a,{href:"https://github.com/iamayushdas",children:"@iamayushdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5061",children:"#5061"})," docs(v2:) Divide ",(0,i.jsx)(s.code,{children:"markdown-features/code-blocks"})," to smaller sections (",(0,i.jsx)(s.a,{href:"https://github.com/ramiy",children:"@ramiy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5066",children:"#5066"})," docs(v2): correct typo (",(0,i.jsx)(s.a,{href:"https://github.com/bperlmutter",children:"@bperlmutter"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5067",children:"#5067"})," chore: unstable yarn.lock (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5057",children:"#5057"})," chore(v2): upgrade examples to beta.2 (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-11",children:"Committers: 11"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Adam Uhl\xed\u0159 (",(0,i.jsx)(s.a,{href:"https://github.com/AuHau",children:"@AuHau"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ayush das (",(0,i.jsx)(s.a,{href:"https://github.com/iamayushdas",children:"@iamayushdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Danny Lin (",(0,i.jsx)(s.a,{href:"https://github.com/kdrag0n",children:"@kdrag0n"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jules Sam. Randolph (",(0,i.jsx)(s.a,{href:"https://github.com/jsamr",children:"@jsamr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Rami Yushuvaev (",(0,i.jsx)(s.a,{href:"https://github.com/ramiy",children:"@ramiy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Taylor Reece (",(0,i.jsx)(s.a,{href:"https://github.com/taylorreece",children:"@taylorreece"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/bperlmutter",children:"@bperlmutter"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/dirslashls",children:"@dirslashls"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>n,a:()=>h});var i=r(27378);const l={},t=i.createContext(l);function h(e){const s=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function n(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:h(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/403cfca1.187868f4.js b/assets/js/403cfca1.187868f4.js new file mode 100644 index 0000000000..244a363927 --- /dev/null +++ b/assets/js/403cfca1.187868f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92396],{13567:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog","page":1,"postsPerPage":3,"totalPages":6,"totalCount":16,"nextPage":"/tests/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/404e42f6.ad0a8f53.js b/assets/js/404e42f6.ad0a8f53.js new file mode 100644 index 0000000000..7cf5fbaae2 --- /dev/null +++ b/assets/js/404e42f6.ad0a8f53.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46104],{97610:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4052c491.d130a907.js b/assets/js/4052c491.d130a907.js new file mode 100644 index 0000000000..fd695df77d --- /dev/null +++ b/assets/js/4052c491.d130a907.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98905],{7658:(e,t,i)=>{i.d(t,{Z:()=>s});const s=i.p+"assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg"},3838:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(24246),a=i(71670);const o={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},n=void 0,r={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{label:"endi",permalink:"/blog/tags/endi"},{label:"tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function h(e){const t={a:"a",img:"img",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,s.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]}),"\n",(0,s.jsx)(t.p,{children:"It is impossible to overstate Endi's impact on this project:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Docusaurus' top contributor, ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"by far"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2",children:"Lead developer"})," on the nearly complete ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap",children:"version 2 of Docusaurus"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Overall passionate advocate of the project on ",(0,s.jsx)(t.a,{href:"https://twitter.com/endiliey",children:"Twitter"}),", ",(0,s.jsx)(t.a,{href:"https://discord.gg/docusaurus",children:"Discord"})," and other social media"]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health."}),"\n",(0,s.jsxs)(t.p,{children:["We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or ",(0,s.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"tweet"})," if you have a suggestion."]}),"\n",(0,s.jsx)(t.p,{children:"The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. \ud83d\ude14"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"A photo from behind Endi's back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.",src:i(7658).Z+"",width:"1080",height:"1080"})})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>r,a:()=>n});var s=i(27378);const a={},o=s.createContext(a);function n(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/40577.2f5f2730.js b/assets/js/40577.2f5f2730.js new file mode 100644 index 0000000000..930a14a9d5 --- /dev/null +++ b/assets/js/40577.2f5f2730.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40577],{40577:(t,e,a)=>{a.d(e,{a:()=>d,b:()=>M,c:()=>o,d:()=>N,e:()=>T,f:()=>Y,g:()=>I,h:()=>H,i:()=>x,l:()=>c,p:()=>E,s:()=>B,u:()=>h});var r=a(99854),n=a(63294),i=a(76742),s=a(97312);const l={extension:(t,e,a)=>{r.l.trace("Making markers for ",a),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},d=(t,e,a,r)=>{e.forEach((e=>{l[e](t,a,r)}))};const o=(t,e,a,i)=>{let s=t||"";if("object"==typeof s&&(s=s[0]),(0,r.n)((0,r.c)().flowchart.htmlLabels)){s=s.replace(/\\n|\n/g,"<br />"),r.l.info("vertexText"+s);let t=function(t){const e=(0,n.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var s,l;return a.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),s=a,(l=t.labelStyle)&&s.attr("style",l),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:(0,r.L)(s).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let r=[];r="string"==typeof s?s.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(s)?s:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),a?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},c=async(t,e,a,s)=>{let l;const d=e.useHtmlLabels||(0,r.n)((0,r.c)().flowchart.htmlLabels);l=a||"node default";const c=t.insert("g").attr("class",l).attr("id",e.domId||e.id),h=c.insert("g").attr("class","label").attr("style",e.labelStyle);let p;p=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const g=h.node();let y;y="markdown"===e.labelType?(0,i.c)(h,(0,r.d)((0,r.L)(p),(0,r.c)()),{useHtmlLabels:d,width:e.width||(0,r.c)().flowchart.wrappingWidth,classes:"markdown-node-label"}):g.appendChild(o((0,r.d)((0,r.L)(p),(0,r.c)()),e.labelStyle,!1,s));let f=y.getBBox();const x=e.padding/2;if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=y.children[0],e=(0,n.Ys)(y),a=t.getElementsByTagName("img");if(a){const t=""===p.replace(/<img[^>]*>/g,"").trim();await Promise.all([...a].map((e=>new Promise((a=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,r.c)().fontSize?(0,r.c)().fontSize:window.getComputedStyle(document.body).fontSize,a=5;e.style.width=parseInt(t,10)*a+"px"}else e.style.width="100%";a(e)}setTimeout((()=>{e.complete&&n()})),e.addEventListener("error",n),e.addEventListener("load",n)})))))}f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}return d?h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):h.attr("transform","translate(0, "+-f.height/2+")"),e.centerLabel&&h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),h.insert("rect",":first-child"),{shapeSvg:c,bbox:f,halfPadding:x,label:h}},h=(t,e)=>{const a=e.node().getBBox();t.width=a.width,t.height=a.height};function p(t,e,a,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+a/2+")")}function g(t,e,a,r){var n=t.x,i=t.y,s=n-r.x,l=i-r.y,d=Math.sqrt(e*e*l*l+a*a*s*s),o=Math.abs(e*a*s/d);r.x<n&&(o=-o);var c=Math.abs(e*a*l/d);return r.y<i&&(c=-c),{x:n+o,y:i+c}}function y(t,e,a,r){var n,i,s,l,d,o,c,h,p,g,y,x,u;if(n=e.y-t.y,s=t.x-e.x,d=e.x*t.y-t.x*e.y,p=n*a.x+s*a.y+d,g=n*r.x+s*r.y+d,!(0!==p&&0!==g&&f(p,g)||(i=r.y-a.y,l=a.x-r.x,o=r.x*a.y-a.x*r.y,c=i*t.x+l*t.y+o,h=i*e.x+l*e.y+o,0!==c&&0!==h&&f(c,h)||0==(y=n*l-i*s))))return x=Math.abs(y/2),{x:(u=s*o-l*d)<0?(u-x)/y:(u+x)/y,y:(u=i*d-n*o)<0?(u-x)/y:(u+x)/y}}function f(t,e){return t*e>0}const x=(t,e)=>{var a,r,n=t.x,i=t.y,s=e.x-n,l=e.y-i,d=t.width/2,o=t.height/2;return Math.abs(l)*d>Math.abs(s)*o?(l<0&&(o=-o),a=0===l?0:o*s/l,r=o):(s<0&&(d=-d),a=d,r=0===s?0:d*l/s),{x:n+a,y:i+r}},u={node:function(t,e){return t.intersect(e)},circle:function(t,e,a){return g(t,e,e,a)},ellipse:g,polygon:function(t,e,a){var r=t.x,n=t.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),l=Math.min(l,t.y)})):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var d=r-t.width/2-s,o=n-t.height/2-l,c=0;c<e.length;c++){var h=e[c],p=e[c<e.length-1?c+1:0],g=y(t,a,{x:d+h.x,y:o+h.y},{x:d+p.x,y:o+p.y});g&&i.push(g)}return i.length?(i.length>1&&i.sort((function(t,e){var r=t.x-a.x,n=t.y-a.y,i=Math.sqrt(r*r+n*n),s=e.x-a.x,l=e.y-a.y,d=Math.sqrt(s*s+l*l);return i<d?-1:i===d?0:1})),i[0]):t},rect:x},b=t=>t?" "+t:"",w=(t,e)=>`${e||"node default"}${b(t.classes)} ${b(t.class)}`,m=async(t,e)=>{const{shapeSvg:a,bbox:n}=await c(t,e,w(e,void 0),!0),i=n.width+e.padding+(n.height+e.padding),s=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];r.l.info("Question main (Circle)");const l=p(a,i,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return r.l.warn("Intersect called"),u.polygon(e,s,t)},a};function k(t,e,a,n){const i=[],s=t=>{i.push(t,0)},l=t=>{i.push(0,t)};e.includes("t")?(r.l.debug("add top border"),s(a)):l(a),e.includes("r")?(r.l.debug("add right border"),s(n)):l(n),e.includes("b")?(r.l.debug("add bottom border"),s(a)):l(a),e.includes("l")?(r.l.debug("add left border"),s(n)):l(n),t.attr("stroke-dasharray",i.join(" "))}const L=(t,e,a)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let n=70,i=10;"LR"===a&&(n=10,i=70);const s=r.append("rect").attr("x",-1*n/2).attr("y",-1*i/2).attr("width",n).attr("height",i).attr("class","fork-join");return h(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return u.rect(e,t)},r},v={rhombus:m,question:m,rect:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await c(t,e,"node "+e.classes+" "+e.class,!0),s=a.insert("rect",":first-child"),l=n.width+e.padding,d=n.height+e.padding;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",l).attr("height",d),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,d),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return u.rect(e,t)},a},labelRect:async(t,e)=>{const{shapeSvg:a}=await c(t,e,"label",!0);r.l.trace("Classes = ",e.class);const n=a.insert("rect",":first-child");if(n.attr("width",0).attr("height",0),a.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(n,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,n),e.intersect=function(t){return u.rect(e,t)},a},rectWithTitle:(t,e)=>{let a;a=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",a).attr("id",e.domId||e.id),s=i.insert("rect",":first-child"),l=i.insert("line"),d=i.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let p="";p="object"==typeof c?c[0]:c,r.l.info("Label text abc79",p,c,"object"==typeof c);const g=d.node().appendChild(o(p,e.labelStyle,!0,!0));let y={width:0,height:0};if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=g.children[0],e=(0,n.Ys)(g);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}r.l.info("Text 2",c);const f=c.slice(1,c.length);let x=g.getBBox();const b=d.node().appendChild(o(f.join?f.join("<br/>"):f,e.labelStyle,!0,!0));if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=b.children[0],e=(0,n.Ys)(b);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}const w=e.padding/2;return(0,n.Ys)(b).attr("transform","translate( "+(y.width>x.width?0:(x.width-y.width)/2)+", "+(x.height+w+5)+")"),(0,n.Ys)(g).attr("transform","translate( "+(y.width<x.width?0:-(x.width-y.width)/2)+", 0)"),y=d.node().getBBox(),d.attr("transform","translate("+-y.width/2+", "+(-y.height/2-w+3)+")"),s.attr("class","outer title-state").attr("x",-y.width/2-w).attr("y",-y.height/2-w).attr("width",y.width+e.padding).attr("height",y.height+e.padding),l.attr("class","divider").attr("x1",-y.width/2-w).attr("x2",y.width/2+w).attr("y1",-y.height/2-w+x.height+w).attr("y2",-y.height/2-w+x.height+w),h(e,s),e.intersect=function(t){return u.rect(e,t)},i},choice:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return a.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return u.circle(e,14,t)},a},circle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await c(t,e,w(e,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("Circle main"),h(e,s),e.intersect=function(t){return r.l.info("Circle intersect",e,n.width/2+i,t),u.circle(e,n.width/2+i,t)},a},doublecircle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await c(t,e,w(e,void 0),!0),s=a.insert("g",":first-child"),l=s.insert("circle"),d=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+5).attr("width",n.width+e.padding+10).attr("height",n.height+e.padding+10),d.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("DoubleCircle main"),h(e,l),e.intersect=function(t){return r.l.info("DoubleCircle intersect",e,n.width/2+i+5,t),u.circle(e,n.width/2+i+5,t)},a},stadium:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.height+e.padding,i=r.width+n/4+e.padding,s=a.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return h(e,s),e.intersect=function(t){return u.rect(e,t)},a},hexagon:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.height+e.padding,i=n/4,s=r.width+2*i+e.padding,l=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}],d=p(a,s,n,l);return d.attr("style",e.style),h(e,d),e.intersect=function(t){return u.polygon(e,l,t)},a},rect_left_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return p(a,n,i,s).attr("style",e.style),e.width=n+i,e.height=i,e.intersect=function(t){return u.polygon(e,s,t)},a},lean_right:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},lean_left:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},inv_trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},rect_right_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},cylinder:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=n/2,s=i/(2.5+n/50),l=r.height+s+e.padding,d="M 0,"+s+" a "+i+","+s+" 0,0,0 "+n+" 0 a "+i+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,o=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",d).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return h(e,o),e.intersect=function(t){const a=u.rect(e,t),r=a.x-e.x;if(0!=i&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(a.y-e.y)>e.height/2-s)){let n=s*s*(1-r*r/(i*i));0!=n&&(n=Math.sqrt(n)),n=s-n,t.y-e.y>0&&(n=-n),a.y+=n}return a},a},start:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),h(e,r),e.intersect=function(t){return u.circle(e,7,t)},a},end:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child"),n=a.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),h(e,n),e.intersect=function(t){return u.circle(e,7,t)},a},note:async(t,e)=>{e.useHtmlLabels||(0,r.c)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:a,bbox:n,halfPadding:i}=await c(t,e,"node "+e.classes,!0);r.l.info("Classes = ",e.classes);const s=a.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),h(e,s),e.intersect=function(t){return u.rect(e,t)},a},subroutine:async(t,e)=>{const{shapeSvg:a,bbox:r}=await c(t,e,w(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=p(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return u.polygon(e,s,t)},a},fork:L,join:L,class_box:(t,e)=>{const a=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const l=t.insert("g").attr("class",i).attr("id",e.domId||e.id),d=l.insert("rect",":first-child"),c=l.insert("line"),p=l.insert("line");let g=0,y=4;const f=l.insert("g").attr("class","label");let x=0;const b=e.classData.annotations&&e.classData.annotations[0],w=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",m=f.node().appendChild(o(w,e.labelStyle,!0,!0));let k=m.getBBox();if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=m.children[0],e=(0,n.Ys)(m);k=t.getBoundingClientRect(),e.attr("width",k.width),e.attr("height",k.height)}e.classData.annotations[0]&&(y+=k.height+4,g+=k.width);let L=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,r.c)().flowchart.htmlLabels?L+="<"+e.classData.type+">":L+="<"+e.classData.type+">");const v=f.node().appendChild(o(L,e.labelStyle,!0,!0));(0,n.Ys)(v).attr("class","classTitle");let S=v.getBBox();if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=v.children[0],e=(0,n.Ys)(v);S=t.getBoundingClientRect(),e.attr("width",S.width),e.attr("height",S.height)}y+=S.height+4,S.width>g&&(g=S.width);const T=[];e.classData.members.forEach((t=>{const a=(0,s.p)(t);let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const l=f.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let d=l.getBBox();if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=l.children[0],e=(0,n.Ys)(l);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}d.width>g&&(g=d.width),y+=d.height+4,T.push(l)})),y+=8;const B=[];if(e.classData.methods.forEach((t=>{const a=(0,s.p)(t);let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const l=f.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let d=l.getBBox();if((0,r.n)((0,r.c)().flowchart.htmlLabels)){const t=l.children[0],e=(0,n.Ys)(l);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}d.width>g&&(g=d.width),y+=d.height+4,B.push(l)})),y+=8,b){let t=(g-k.width)/2;(0,n.Ys)(m).attr("transform","translate( "+(-1*g/2+t)+", "+-1*y/2+")"),x=k.height+4}let M=(g-S.width)/2;return(0,n.Ys)(v).attr("transform","translate( "+(-1*g/2+M)+", "+(-1*y/2+x)+")"),x+=S.height+4,c.attr("class","divider").attr("x1",-g/2-a).attr("x2",g/2+a).attr("y1",-y/2-a+8+x).attr("y2",-y/2-a+8+x),x+=8,T.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-g/2+", "+(-1*y/2+x+4)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),x+=8,p.attr("class","divider").attr("x1",-g/2-a).attr("x2",g/2+a).attr("y1",-y/2-a+8+x).attr("y2",-y/2-a+8+x),x+=8,B.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-g/2+", "+(-1*y/2+x)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),d.attr("class","outer title-state").attr("x",-g/2-a).attr("y",-y/2-a).attr("width",g+e.padding).attr("height",y+e.padding),h(e,d),e.intersect=function(t){return u.rect(e,t)},l}};let S={};const T=async(t,e,a)=>{let n,i;if(e.link){let s;"sandbox"===(0,r.c)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),i=await v[e.shape](n,e,a)}else i=await v[e.shape](t,e,a),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),S[e.id]=n,e.haveCallback&&S[e.id].attr("class",S[e.id].attr("class")+" clickable"),n},B=(t,e)=>{S[e.id]=t},M=()=>{S={}},E=t=>{const e=S[t.id];r.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const a=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+a-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),a};let C={},P={};const N=()=>{C={},P={}},Y=(t,e)=>{const a=(0,r.n)((0,r.c)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,i.c)(t,e.label,{style:e.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):o(e.label,e.labelStyle);r.l.info("abc82",e,e.labelType);const l=t.insert("g").attr("class","edgeLabel"),d=l.insert("g").attr("class","label");d.node().appendChild(s);let c,h=s.getBBox();if(a){const t=s.children[0],e=(0,n.Ys)(s);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}if(d.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),C[e.id]=l,e.width=h.width,e.height=h.height,e.startLabelLeft){const a=o(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),P[e.id]||(P[e.id]={}),P[e.id].startLeft=r,_(c,e.startLabelLeft)}if(e.startLabelRight){const a=o(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=r.node().appendChild(a),n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),P[e.id]||(P[e.id]={}),P[e.id].startRight=r,_(c,e.startLabelRight)}if(e.endLabelLeft){const a=o(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),P[e.id]||(P[e.id]={}),P[e.id].endLeft=r,_(c,e.endLabelLeft)}if(e.endLabelRight){const a=o(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),P[e.id]||(P[e.id]={}),P[e.id].endRight=r,_(c,e.endLabelRight)}return s};function _(t,e){(0,r.c)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const H=(t,e)=>{r.l.info("Moving label abc78 ",t.id,t.label,C[t.id]);let a=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const n=C[t.id];let i=t.x,s=t.y;if(a){const n=r.u.calcLabelPosition(a);r.l.info("Moving label "+t.label+" from (",i,",",s,") to (",n.x,",",n.y,") abc78"),e.updatedPath&&(i=n.x,s=n.y)}n.attr("transform","translate("+i+", "+s+")")}if(t.startLabelLeft){const e=P[t.id].startLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.startLabelRight){const e=P[t.id].startRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.endLabelLeft){const e=P[t.id].endLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.endLabelRight){const e=P[t.id].endRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}},R=(t,e)=>{r.l.warn("abc88 cutPathAtIntersect",t,e);let a=[],n=t[0],i=!1;return t.forEach((t=>{if(r.l.info("abc88 checking point",t,e),((t,e)=>{const a=t.x,r=t.y,n=Math.abs(e.x-a),i=Math.abs(e.y-r),s=t.width/2,l=t.height/2;return n>=s||i>=l})(e,t)||i)r.l.warn("abc88 outside",t,n),n=t,i||a.push(t);else{const s=((t,e,a)=>{r.l.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(a)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,s=Math.abs(n-a.x),l=t.width/2;let d=a.x<e.x?l-s:l+s;const o=t.height/2,c=Math.abs(e.y-a.y),h=Math.abs(e.x-a.x);if(Math.abs(i-e.y)*l>Math.abs(n-e.x)*o){let t=a.y<e.y?e.y-o-i:i-o-e.y;d=h*t/c;const n={x:a.x<e.x?a.x+d:a.x-h+d,y:a.y<e.y?a.y+c-t:a.y-c+t};return 0===d&&(n.x=e.x,n.y=e.y),0===h&&(n.x=e.x),0===c&&(n.y=e.y),r.l.warn(`abc89 topp/bott calc, Q ${c}, q ${t}, R ${h}, r ${d}`,n),n}{d=a.x<e.x?e.x-l-n:n-l-e.x;let t=c*d/h,i=a.x<e.x?a.x+h-d:a.x-h+d,s=a.y<e.y?a.y+t:a.y-t;return r.l.warn(`sides calc abc89, Q ${c}, q ${t}, R ${h}, r ${d}`,{_x:i,_y:s}),0===d&&(i=e.x,s=e.y),0===h&&(i=e.x),0===c&&(s=e.y),{x:i,y:s}}})(e,n,t);r.l.warn("abc88 inside",t,n,s),r.l.warn("abc88 intersection",s);let l=!1;a.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),a.some((t=>t.x===s.x&&t.y===s.y))?r.l.warn("abc88 no intersect",s,a):a.push(s),i=!0}})),r.l.warn("abc88 returning points",a),a},I=function(t,e,a,i,s,l){let d=a.points,o=!1;const c=l.node(e.v);var h=l.node(e.w);r.l.info("abc88 InsertEdge: ",a),h.intersect&&c.intersect&&(d=d.slice(1,a.points.length-1),d.unshift(c.intersect(d[0])),r.l.info("Last point",d[d.length-1],h,h.intersect(d[d.length-1])),d.push(h.intersect(d[d.length-1]))),a.toCluster&&(r.l.info("to cluster abc88",i[a.toCluster]),d=R(a.points,i[a.toCluster].node),o=!0),a.fromCluster&&(r.l.info("from cluster abc88",i[a.fromCluster]),d=R(d.reverse(),i[a.fromCluster].node).reverse(),o=!0);const p=d.filter((t=>!Number.isNaN(t.y)));let g;g=("graph"===s||"flowchart"===s)&&a.curve||n.$0Z;const y=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(g);let f;switch(a.thickness){case"normal":f="edge-thickness-normal";break;case"thick":case"invisible":f="edge-thickness-thick";break;default:f=""}switch(a.pattern){case"solid":f+=" edge-pattern-solid";break;case"dotted":f+=" edge-pattern-dotted";break;case"dashed":f+=" edge-pattern-dashed"}const x=t.append("path").attr("d",y(p)).attr("id",a.id).attr("class"," "+f+(a.classes?" "+a.classes:"")).attr("style",a.style);let u="";switch(((0,r.c)().flowchart.arrowMarkerAbsolute||(0,r.c)().state.arrowMarkerAbsolute)&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),r.l.info("arrowTypeStart",a.arrowTypeStart),r.l.info("arrowTypeEnd",a.arrowTypeEnd),a.arrowTypeStart){case"arrow_cross":x.attr("marker-start","url("+u+"#"+s+"-crossStart)");break;case"arrow_point":x.attr("marker-start","url("+u+"#"+s+"-pointStart)");break;case"arrow_barb":x.attr("marker-start","url("+u+"#"+s+"-barbStart)");break;case"arrow_circle":x.attr("marker-start","url("+u+"#"+s+"-circleStart)");break;case"aggregation":x.attr("marker-start","url("+u+"#"+s+"-aggregationStart)");break;case"extension":x.attr("marker-start","url("+u+"#"+s+"-extensionStart)");break;case"composition":x.attr("marker-start","url("+u+"#"+s+"-compositionStart)");break;case"dependency":x.attr("marker-start","url("+u+"#"+s+"-dependencyStart)");break;case"lollipop":x.attr("marker-start","url("+u+"#"+s+"-lollipopStart)")}switch(a.arrowTypeEnd){case"arrow_cross":x.attr("marker-end","url("+u+"#"+s+"-crossEnd)");break;case"arrow_point":x.attr("marker-end","url("+u+"#"+s+"-pointEnd)");break;case"arrow_barb":x.attr("marker-end","url("+u+"#"+s+"-barbEnd)");break;case"arrow_circle":x.attr("marker-end","url("+u+"#"+s+"-circleEnd)");break;case"aggregation":x.attr("marker-end","url("+u+"#"+s+"-aggregationEnd)");break;case"extension":x.attr("marker-end","url("+u+"#"+s+"-extensionEnd)");break;case"composition":x.attr("marker-end","url("+u+"#"+s+"-compositionEnd)");break;case"dependency":x.attr("marker-end","url("+u+"#"+s+"-dependencyEnd)");break;case"lollipop":x.attr("marker-end","url("+u+"#"+s+"-lollipopEnd)")}let b={};return o&&(b.updatedPath=d),b.originalPath=a.points,b}},97312:(t,e,a)=>{a.d(e,{p:()=>l,s:()=>c});var r=a(63294),n=a(99854);let i=0;const s=function(t){let e=t.id;return t.type&&(e+="<"+t.type+">"),e},l=function(t){let e="",a="",r="",i="",s=t.substring(0,1),l=t.substring(t.length-1,t.length);s.match(/[#+~-]/)&&(i=s);let d=/[\s\w)~]/;l.match(d)||(a=o(l));const c=""===i?0:1;let h=""===a?t.length:t.length-1;const p=(t=t.substring(c,h)).indexOf("("),g=t.indexOf(")");if(p>1&&g>p&&g<=t.length){let s=t.substring(0,p).trim();const l=t.substring(p+1,g);if(e=i+s+"("+(0,n.x)(l.trim())+")",g<t.length){let i=t.substring(g+1,g+2);""!==a||i.match(d)?r=t.substring(g+1).trim():(a=o(i),r=t.substring(g+2).trim()),""!==r&&(":"===r.charAt(0)&&(r=r.substring(1).trim()),r=" : "+(0,n.x)(r),e+=r)}}else e=i+(0,n.x)(t);return{displayText:e,cssStyle:a}},d=function(t,e,a,r){let n=l(e);const i=t.append("tspan").attr("x",r.padding).text(n.displayText);""!==n.cssStyle&&i.attr("style",n.cssStyle),a||i.attr("dy",r.textHeight)},o=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},c={getClassTitleString:s,drawClass:function(t,e,a,r){n.l.debug("Rendering class ",e,a);const i=e.id,l={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let c;c=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):o.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let h=!0;e.annotations.forEach((function(t){const e=c.append("tspan").text("\xab"+t+"\xbb");h||e.attr("dy",a.textHeight),h=!1}));let p=s(e);const g=c.append("tspan").text(p).attr("class","title");h||g.attr("dy",a.textHeight);const y=c.node().getBBox().height,f=o.append("line").attr("x1",0).attr("y1",a.padding+y+a.dividerMargin/2).attr("y2",a.padding+y+a.dividerMargin/2),x=o.append("text").attr("x",a.padding).attr("y",y+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");h=!0,e.members.forEach((function(t){d(x,t,h,a),h=!1}));const u=x.node().getBBox(),b=o.append("line").attr("x1",0).attr("y1",a.padding+y+a.dividerMargin+u.height).attr("y2",a.padding+y+a.dividerMargin+u.height),w=o.append("text").attr("x",a.padding).attr("y",y+2*a.dividerMargin+u.height+a.textHeight).attr("fill","white").attr("class","classText");h=!0,e.methods.forEach((function(t){d(w,t,h,a),h=!1}));const m=o.node().getBBox();var k=" ";e.cssClasses.length>0&&(k+=e.cssClasses.join(" "));const L=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*a.padding).attr("height",m.height+a.padding+.5*a.dividerMargin).attr("class",k).node().getBBox().width;return c.node().childNodes.forEach((function(t){t.setAttribute("x",(L-t.getBBox().width)/2)})),e.tooltip&&c.insert("title").text(e.tooltip),f.attr("x2",L),b.attr("x2",L),l.width=L,l.height=m.height+a.padding+.5*a.dividerMargin,l},drawEdge:function(t,e,a,s,l){const d=function(t){switch(t){case l.db.relationType.AGGREGATION:return"aggregation";case l.db.relationType.EXTENSION:return"extension";case l.db.relationType.COMPOSITION:return"composition";case l.db.relationType.DEPENDENCY:return"dependency";case l.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const o=e.points,c=(0,r.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(r.$0Z),h=t.append("path").attr("d",c(o)).attr("id","edge"+i).attr("class","relation");let p,g,y="";s.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),1==a.relation.lineType&&h.attr("class","relation dashed-line"),10==a.relation.lineType&&h.attr("class","relation dotted-line"),"none"!==a.relation.type1&&h.attr("marker-start","url("+y+"#"+d(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&h.attr("marker-end","url("+y+"#"+d(a.relation.type2)+"End)");const f=e.points.length;let x,u,b,w,m=n.u.calcLabelPosition(e.points);if(p=m.x,g=m.y,f%2!=0&&f>1){let t=n.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=n.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[f-1]);n.l.debug("cardinality_1_point "+JSON.stringify(t)),n.l.debug("cardinality_2_point "+JSON.stringify(r)),x=t.x,u=t.y,b=r.x,w=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),r=e.append("text").attr("class","label").attr("x",p).attr("y",g).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=r;const n=r.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",n.x-s.padding/2).attr("y",n.y-s.padding/2).attr("width",n.width+s.padding).attr("height",n.height+s.padding)}if(n.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",x).attr("y",u).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",w).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}i++},drawNote:function(t,e,a,r){n.l.debug("Rendering note ",e,a);const i=e.id,s={id:i,text:e.text,width:0,height:0},l=t.append("g").attr("id",i).attr("class","classGroup");let d=l.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const o=JSON.parse(`"${e.text}"`).split("\n");o.forEach((function(t){n.l.debug(`Adding line: ${t}`),d.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const c=l.node().getBBox(),h=l.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",c.width+2*a.padding).attr("height",c.height+o.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return d.node().childNodes.forEach((function(t){t.setAttribute("x",(h-t.getBBox().width)/2)})),s.width=h,s.height=c.height+o.length*a.textHeight+a.padding+.5*a.dividerMargin,s},parseMember:l}}}]); \ No newline at end of file diff --git a/assets/js/409b40b6.1d27ef3b.js b/assets/js/409b40b6.1d27ef3b.js new file mode 100644 index 0000000000..dfbd7aad64 --- /dev/null +++ b/assets/js/409b40b6.1d27ef3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81850],{50735:e=>{e.exports=JSON.parse('{"name":"feature-requests-plugin","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/40b17095.6249225f.js b/assets/js/40b17095.6249225f.js new file mode 100644 index 0000000000..bdd345875b --- /dev/null +++ b/assets/js/40b17095.6249225f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86763],{24093:(a,t,i)=>{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>h,toc:()=>m});var n=i(24246),e=i(71670);const o={mdx:{format:"md"},date:"2020-08-28T20:00",authors:["adinaja","ajifrank75","Ako92","amy-lei","anshulrgoyal","arcvats","arthur-flam","BogdanDor","boosh511","Danon","Drewbi","dschaller","fanny","FocalChord","francoischalifour","govardhan-srinivas","hsluoyz","imskr","JeanMarcSaad","JohnnyCrazy","Jonathannsegal","lebogangolifant","leoigel","mecm1993","MirzayevFarid","nebrelbug","olawanlejoel","orta","SamChou19815","shalinikumari50","slorber","Souravdey777","teikjun","thehanimo","tolunayakbulut","vandreleal","Vinnl","yangshun","ylemkimon"]},l="2.0.0-alpha.62",h={permalink:"/changelog/2.0.0-alpha.62",source:"@site/changelog/source/2.0.0-alpha.62.md",title:"2.0.0-alpha.62",description:"New Feature",date:"2020-08-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"adinaja",alias:"adinaja",url:"https://github.com/adinaja",imageURL:"https://github.com/adinaja.png",key:"adinaja"},{name:"Franklyn Chisom",alias:"ajifrank75",url:"https://github.com/ajifrank75",imageURL:"https://github.com/ajifrank75.png",key:"ajifrank75"},{name:"Ali Hosseini",alias:"Ako92",url:"https://github.com/Ako92",imageURL:"https://github.com/Ako92.png",key:"Ako92"},{name:"Amy Lei",alias:"amy-lei",url:"https://github.com/amy-lei",imageURL:"https://github.com/amy-lei.png",key:"amy-lei"},{name:"Anshul Goyal",alias:"anshulrgoyal",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png",key:"anshulrgoyal"},{name:"Archit",alias:"arcvats",url:"https://github.com/arcvats",imageURL:"https://github.com/arcvats.png",key:"arcvats"},{name:"Arthur Flam",alias:"arthur-flam",url:"https://github.com/arthur-flam",imageURL:"https://github.com/arthur-flam.png",key:"arthur-flam"},{name:"Bogdan Doroschenko",alias:"BogdanDor",url:"https://github.com/BogdanDor",imageURL:"https://github.com/BogdanDor.png",key:"BogdanDor"},{name:"alex busnelli",alias:"boosh511",url:"https://github.com/boosh511",imageURL:"https://github.com/boosh511.png",key:"boosh511"},{name:"Daniel Wilkowski",alias:"Danon",url:"https://github.com/Danon",imageURL:"https://github.com/Danon.png",key:"Danon"},{name:"Drew Alexander",alias:"Drewbi",url:"https://github.com/Drewbi",imageURL:"https://github.com/Drewbi.png",key:"Drewbi"},{name:"Derek",alias:"dschaller",url:"https://github.com/dschaller",imageURL:"https://github.com/dschaller.png",key:"dschaller"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"Nisarag",alias:"FocalChord",url:"https://github.com/FocalChord",imageURL:"https://github.com/FocalChord.png",key:"FocalChord"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"Govardhan Srinivas",alias:"govardhan-srinivas",url:"https://github.com/govardhan-srinivas",imageURL:"https://github.com/govardhan-srinivas.png",key:"govardhan-srinivas"},{name:"Yang Luo",alias:"hsluoyz",url:"https://github.com/hsluoyz",imageURL:"https://github.com/hsluoyz.png",key:"hsluoyz"},{name:"Shubham Kumar",alias:"imskr",url:"https://github.com/imskr",imageURL:"https://github.com/imskr.png",key:"imskr"},{name:"Jean-Marc Saad",alias:"JeanMarcSaad",url:"https://github.com/JeanMarcSaad",imageURL:"https://github.com/JeanMarcSaad.png",key:"JeanMarcSaad"},{name:"Jonas Dellinger",alias:"JohnnyCrazy",url:"https://github.com/JohnnyCrazy",imageURL:"https://github.com/JohnnyCrazy.png",key:"JohnnyCrazy"},{name:"Jonathan",alias:"Jonathannsegal",url:"https://github.com/Jonathannsegal",imageURL:"https://github.com/Jonathannsegal.png",key:"Jonathannsegal"},{name:"lebogang Olifant",alias:"lebogangolifant",url:"https://github.com/lebogangolifant",imageURL:"https://github.com/lebogangolifant.png",key:"lebogangolifant"},{name:"leoigel",alias:"leoigel",url:"https://github.com/leoigel",imageURL:"https://github.com/leoigel.png",key:"leoigel"},{name:"Manuel Cepeda",alias:"mecm1993",url:"https://github.com/mecm1993",imageURL:"https://github.com/mecm1993.png",key:"mecm1993"},{name:"Mirzayev Farid",alias:"MirzayevFarid",url:"https://github.com/MirzayevFarid",imageURL:"https://github.com/MirzayevFarid.png",key:"MirzayevFarid"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"Olawanle Joel",alias:"olawanlejoel",url:"https://github.com/olawanlejoel",imageURL:"https://github.com/olawanlejoel.png",key:"olawanlejoel"},{name:"Orta Therox",alias:"orta",url:"https://github.com/orta",imageURL:"https://github.com/orta.png",key:"orta"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"shalinikumari50",alias:"shalinikumari50",url:"https://github.com/shalinikumari50",imageURL:"https://github.com/shalinikumari50.png",key:"shalinikumari50"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Sourav Dey",alias:"Souravdey777",url:"https://github.com/Souravdey777",imageURL:"https://github.com/Souravdey777.png",key:"Souravdey777"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Hani Mohammed",alias:"thehanimo",url:"https://github.com/thehanimo",imageURL:"https://github.com/thehanimo.png",key:"thehanimo"},{name:"Tolunay Akbulut",alias:"tolunayakbulut",url:"https://github.com/tolunayakbulut",imageURL:"https://github.com/tolunayakbulut.png",key:"tolunayakbulut"},{name:"Vandr\xe9 Leal",alias:"vandreleal",url:"https://github.com/vandreleal",imageURL:"https://github.com/vandreleal.png",key:"vandreleal"},{name:"Vincent",alias:"Vinnl",url:"https://github.com/Vinnl",imageURL:"https://github.com/Vinnl.png",key:"Vinnl"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"ylemkimon",alias:"ylemkimon",url:"https://github.com/ylemkimon",imageURL:"https://github.com/ylemkimon.png",key:"ylemkimon"}],frontMatter:{mdx:{format:"md"},date:"2020-08-28T20:00",authors:["adinaja","ajifrank75","Ako92","amy-lei","anshulrgoyal","arcvats","arthur-flam","BogdanDor","boosh511","Danon","Drewbi","dschaller","fanny","FocalChord","francoischalifour","govardhan-srinivas","hsluoyz","imskr","JeanMarcSaad","JohnnyCrazy","Jonathannsegal","lebogangolifant","leoigel","mecm1993","MirzayevFarid","nebrelbug","olawanlejoel","orta","SamChou19815","shalinikumari50","slorber","Souravdey777","teikjun","thehanimo","tolunayakbulut","vandreleal","Vinnl","yangshun","ylemkimon"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.63",permalink:"/changelog/2.0.0-alpha.63"},nextItem:{title:"2.0.0-alpha.61",permalink:"/changelog/2.0.0-alpha.61"},listPageLink:"/changelog/page/3"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function s(a){return(0,n.jsx)(n.Fragment,{})}function u(a={}){const{wrapper:t}={...(0,e.a)(),...a.components};return t?(0,n.jsx)(t,{...a,children:(0,n.jsx)(s,{...a})}):s()}},71670:(a,t,i)=>{i.d(t,{Z:()=>h,a:()=>l});var n=i(27378);const e={},o=n.createContext(e);function l(a){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof a?a(t):{...t,...a}}),[t,a])}function h(a){let t;return t=a.disableParentContext?"function"==typeof a.components?a.components(e):a.components||e:l(a.components),n.createElement(o.Provider,{value:t},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/41756ce8.deeb6e73.js b/assets/js/41756ce8.deeb6e73.js new file mode 100644 index 0000000000..937437efc2 --- /dev/null +++ b/assets/js/41756ce8.deeb6e73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30744],{88871:l=>{l.exports=JSON.parse('{"tags":[{"label":"release","permalink":"/blog/tags/release","count":11},{"label":"maintenance","permalink":"/blog/tags/maintenance","count":1},{"label":"recap","permalink":"/blog/tags/recap","count":3},{"label":"search","permalink":"/blog/tags/search","count":1},{"label":"beta","permalink":"/blog/tags/beta","count":1},{"label":"i18n","permalink":"/blog/tags/i-18-n","count":1},{"label":"endi","permalink":"/blog/tags/endi","count":1},{"label":"tribute","permalink":"/blog/tags/tribute","count":1},{"label":"birth","permalink":"/blog/tags/birth","count":1},{"label":"new","permalink":"/blog/tags/new","count":1},{"label":"adoption","permalink":"/blog/tags/adoption","count":2},{"label":"profilo","permalink":"/blog/tags/profilo","count":1},{"label":"documentation","permalink":"/blog/tags/documentation","count":1},{"label":"blog","permalink":"/blog/tags/blog","count":1},{"label":"docusaurus","permalink":"/blog/tags/docusaurus","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/41db61f9.ec3bce72.js b/assets/js/41db61f9.ec3bce72.js new file mode 100644 index 0000000000..c2043cdf03 --- /dev/null +++ b/assets/js/41db61f9.ec3bce72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26319],{95382:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-07-21T20:00"},s="2.0.0-alpha.23",c={permalink:"/changelog/2.0.0-alpha.23",source:"@site/changelog/source/2.0.0-alpha.23.md",title:"2.0.0-alpha.23",description:"- Fix docusaurus route config generation for certain edge case",date:"2019-07-21T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-21T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.24",permalink:"/changelog/2.0.0-alpha.24"},nextItem:{title:"2.0.0-alpha.22",permalink:"/changelog/2.0.0-alpha.22"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/41f89139.338fa519.js b/assets/js/41f89139.338fa519.js new file mode 100644 index 0000000000..e78b4fc071 --- /dev/null +++ b/assets/js/41f89139.338fa519.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96824],{7801:(e,t,s)=>{"use strict";s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>c,frontMatter:()=>g,metadata:()=>a,toc:()=>u});var o=s(24246),n=s(71670),l=s(66448);const g={title:"Blog post MDX require Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"]},r=void 0,a={permalink:"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx",source:"@site/_dogfooding/_blog tests/2021-10-08-blog-post-mdx-require-feed-tests.mdx",title:"Blog post MDX require Feed tests",description:"Some MDX tests, mostly to test how the RSS feed render those",date:"2021-10-08T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"},{label:"blog",permalink:"/tests/blog/tags/blog"},{label:"docusaurus",permalink:"/tests/blog/tags/docusaurus"},{label:"long-long",permalink:"/tests/blog/tags/long-long"},{label:"long-long-long",permalink:"/tests/blog/tags/long-long-long"},{label:"long-long-long-long",permalink:"/tests/blog/tags/long-long-long-long"}],readingTime:6.6,hasTruncateMarker:!0,authors:[{name:"Sebastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",twitter:"sebastienlorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Blog post MDX require Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"]},unlisted:!1,prevItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/11/13/dup-title"},nextItem:{title:"Blog post MDX Feed tests",permalink:"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"}},i={authorsImageUrls:[void 0]},u=[];function d(e){const t={p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Some MDX tests, mostly to test how the RSS feed render those"}),"\n","\n",(0,o.jsx)(t.p,{children:"Test MDX with require calls"}),"\n","\n",(0,o.jsx)("img",{src:(0,l.Z)("/img/docusaurus.png")}),"\n",(0,o.jsx)("img",{src:s(3915).default}),"\n",(0,o.jsx)("img",{src:s(3915).default})]})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},3915:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/docusaurus.6fe439e.200.png 200w",images:[{path:s.p+"assets/ideal-img/docusaurus.6fe439e.200.png",width:200,height:200}],src:s.p+"assets/ideal-img/docusaurus.6fe439e.200.png",toString:function(){return s.p+"assets/ideal-img/docusaurus.6fe439e.200.png"},placeholder:void 0,width:200,height:200},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAABlUlEQVR4nGNgAAKLY6GcHm9yZfzvxwvU/2dgCv2/ivn///8wzAhSwxB6JZTN7lTcFqsDUT9sTsQ+sjsbf9bidPR545Nh5wwOBF7R3ue3Xv2IFS+Dy8NsKaDkB70Z7v8tdoX/c7ie/D/yRun/nJvN/0pudf6vfzD5T8uTWQZAa+Ok7U7Hv3O4mPTf9lTsX9szcX9X3t/59/ztO3/O3Lr97/KtBz/vPX6pz2B1NkkKKPne/lzCf/sz8f+sTsf/j72S+H/i4+R/c15m/V/4vPDPvKelRgz2J6JlwArPJ/wHmvwPiP8HXY39P+9Z0P+3T5z+fvnj/b/5edRUsIl2Z+LfgUy0PR3/1/ls/L81z0L/bT/v9u/EYdt/j597/7/0P8KVwe5skqXdmbh39hcS/9sCrXY4G/8/+lbc/4gbMf83nHT+++ad9/+WN7FTGGxPJ6y0Ows27TcQ/wFhq0sJf3zuJP4599z314uv/v+TH8QvZLC5FCVoeyzByP5kvAEIuwKx1fl4g1lPogz+//cz3P0zSpdhWy47ANFQ5m3xmireAAAAAElFTkSuQmCC"}},71670:(e,t,s)=>{"use strict";s.d(t,{Z:()=>r,a:()=>g});var o=s(27378);const n={},l=o.createContext(n);function g(e){const t=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:g(e.components),o.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/422.9b83fe12.js b/assets/js/422.9b83fe12.js new file mode 100644 index 0000000000..f1c65ec439 --- /dev/null +++ b/assets/js/422.9b83fe12.js @@ -0,0 +1,1353 @@ +"use strict"; +exports.id = 422; +exports.ids = [422]; +exports.modules = { + +/***/ 81422: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(47435); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 24, 26], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 24], $Va = [4, 6, 9, 11, 17, 18, 20, 22, 23, 24, 26]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "taskName": 24, "taskData": 25, "open_directive": 26, "type_directive": 27, "arg_directive": 28, "close_directive": 29, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "journey", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 24: "taskName", 25: "taskData", 26: "open_directive", 27: "type_directive", 28: "arg_directive", 29: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 16: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 18: + yy.parseDirective("%%{", "open_directive"); + break; + case 19: + yy.parseDirective($$[$0], "type_directive"); + break; + case 20: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 21: + yy.parseDirective("}%%", "close_directive", "journey"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 13: 8, 27: [1, 9] }, { 27: [2, 18] }, { 6: [1, 10], 7: 21, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, { 1: [2, 2] }, { 14: 22, 15: [1, 23], 29: $V9 }, o([15, 29], [2, 19]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 21, 10: 25, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 26] }, { 21: [1, 27] }, o($V2, [2, 14]), o($V2, [2, 15]), { 25: [1, 28] }, o($V2, [2, 17]), { 11: [1, 29] }, { 16: 30, 28: [1, 31] }, { 11: [2, 21] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 16]), o($Va, [2, 9]), { 14: 32, 29: $V9 }, { 29: [2, 20] }, { 11: [1, 33] }, o($Va, [2, 10])], + defaultActions: { 5: [2, 18], 7: [2, 2], 24: [2, 21], 31: [2, 20] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 26; + case 1: + this.begin("type_directive"); + return 27; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 29; + case 4: + return 28; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 24; + case 21: + return 25; + case 22: + return 15; + case 23: + return 6; + case 24: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23, 24], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +const sections = []; +const tasks = []; +const rawTasks = []; +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const updateActors = function() { + const tempActors = []; + tasks.forEach((task) => { + if (task.people) { + tempActors.push(...task.people); + } + }); + const unique = new Set(tempActors); + return [...unique].sort(); +}; +const addTask = function(descr, taskData) { + const pieces = taskData.substr(1).split(":"); + let score = 0; + let peeps = []; + if (pieces.length === 1) { + score = Number(pieces[0]); + peeps = []; + } else { + score = Number(pieces[0]); + peeps = pieces[1].split(","); + } + const peopleList = peeps.map((s) => s.trim()); + const rawTask = { + section: currentSection, + type: currentSection, + people: peopleList, + task: descr, + score + }; + rawTasks.push(rawTask); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const getActors = function() { + return updateActors(); +}; +const db = { + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey, + clear, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + getActors +}; +const getStyles = (options) => `.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${options.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${options.textColor} + } + + .legend { + fill: ${options.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${options.textColor} + } + + .face { + ${options.faceColor ? `fill: ${options.faceColor}` : "fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${options.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${options.fillType0 ? `fill: ${options.fillType0}` : ""}; + } + .task-type-1, .section-type-1 { + ${options.fillType0 ? `fill: ${options.fillType1}` : ""}; + } + .task-type-2, .section-type-2 { + ${options.fillType0 ? `fill: ${options.fillType2}` : ""}; + } + .task-type-3, .section-type-3 { + ${options.fillType0 ? `fill: ${options.fillType3}` : ""}; + } + .task-type-4, .section-type-4 { + ${options.fillType0 ? `fill: ${options.fillType4}` : ""}; + } + .task-type-5, .section-type-5 { + ${options.fillType0 ? `fill: ${options.fillType5}` : ""}; + } + .task-type-6, .section-type-6 { + ${options.fillType0 ? `fill: ${options.fillType6}` : ""}; + } + .task-type-7, .section-type-7 { + ${options.fillType0 ? `fill: ${options.fillType7}` : ""}; + } + + .actor-0 { + ${options.actor0 ? `fill: ${options.actor0}` : ""}; + } + .actor-1 { + ${options.actor1 ? `fill: ${options.actor1}` : ""}; + } + .actor-2 { + ${options.actor2 ? `fill: ${options.actor2}` : ""}; + } + .actor-3 { + ${options.actor3 ? `fill: ${options.actor3}` : ""}; + } + .actor-4 { + ${options.actor4 ? `fill: ${options.actor4}` : ""}; + } + .actor-5 { + ${options.actor5 ? `fill: ${options.actor5}` : ""}; + } +`; +const styles = getStyles; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + return (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.f)(elem, textData); +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width * section.taskCount + // width of the tasks + conf2.diagramMarginX * (section.taskCount - 1); + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + let xPos = task.x + 14; + task.people.forEach((person) => { + const colour = task.actors[person].color; + const circle = { + cx: xPos, + cy: task.y, + r: 7, + fill: colour, + stroke: "#000", + title: person, + pos: task.actors[person].position + }; + drawCircle(g, circle); + xPos += 10; + }); + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + initGraphics +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const actors = {}; +function drawActorLegend(diagram2) { + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let yPos = 60; + Object.keys(actors).forEach((person) => { + const colour = actors[person].color; + const circleData = { + cx: 20, + cy: yPos, + r: 7, + fill: colour, + stroke: "#000", + pos: actors[person].position + }; + svgDraw.drawCircle(diagram2, circleData); + const labelData = { + x: 40, + y: yPos + 7, + fill: "#666", + text: person, + textMargin: conf2.boxTextMargin | 5 + }; + svgDraw.drawText(diagram2, labelData); + yPos += 20; + }); +} +const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; +const LEFT_MARGIN = conf.leftMargin; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + bounds.init(); + const diagram2 = root.select("#" + id); + svgDraw.initGraphics(diagram2); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getDiagramTitle(); + const actorNames = diagObj.db.getActors(); + for (const member in actors) { + delete actors[member]; + } + let actorPos = 0; + actorNames.forEach((actorName) => { + actors[actorName] = { + color: conf2.actorColours[actorPos % conf2.actorColours.length], + position: actorPos + }; + actorPos++; + }); + drawActorLegend(diagram2); + bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); + drawTasks(diagram2, tasks2, 0); + const box = bounds.getBounds(); + if (title) { + diagram2.append("text").text(title).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); + } + const height = box.stopy - box.starty + 2 * conf2.diagramMarginY; + const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf2.useMaxWidth); + diagram2.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + const extraVertForTitle = title ? 70 : 0; + diagram2.attr("viewBox", `${box.startx} -25 ${width} ${height + extraVertForTitle}`); + diagram2.attr("preserveAspectRatio", "xMinYMin meet"); + diagram2.attr("height", height + extraVertForTitle + 25); +}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + init: function() { + this.sequenceItems = []; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = Math.min(startx, stopx); + const _stopx = Math.max(startx, stopx); + const _starty = Math.min(starty, stopy); + const _stopy = Math.max(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = this.verticalPos; + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return this.data; + } +}; +const fills = conf.sectionFills; +const textColours = conf.sectionColours; +const drawTasks = function(diagram2, tasks2, verticalPos) { + const conf2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let lastSection = ""; + const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY; + const taskPos = verticalPos + sectionVHeight; + let sectionNumber = 0; + let fill = "#CCC"; + let colour = "black"; + let num = 0; + for (const [i, task] of tasks2.entries()) { + if (lastSection !== task.section) { + fill = fills[sectionNumber % fills.length]; + num = sectionNumber % fills.length; + colour = textColours[sectionNumber % textColours.length]; + let taskInSectionCount = 0; + const currentSection2 = task.section; + for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) { + if (tasks2[taskIndex].section == currentSection2) { + taskInSectionCount = taskInSectionCount + 1; + } else { + break; + } + } + const section = { + x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN, + y: 50, + text: task.section, + fill, + num, + colour, + taskCount: taskInSectionCount + }; + svgDraw.drawSection(diagram2, section, conf2); + lastSection = task.section; + sectionNumber++; + } + const taskActors = task.people.reduce((acc, actorName) => { + if (actors[actorName]) { + acc[actorName] = actors[actorName]; + } + return acc; + }, {}); + task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN; + task.y = taskPos; + task.width = conf2.diagramMarginX; + task.height = conf2.diagramMarginY; + task.colour = colour; + task.fill = fill; + task.num = num; + task.actors = taskActors; + svgDraw.drawTask(diagram2, task, conf2); + bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30); + } +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: (cnf) => { + renderer.setConf(cnf.journey); + db.clear(); + } +}; + + + +/***/ }), + +/***/ 47435: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7608); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/4228388b.1b4f71b4.js b/assets/js/4228388b.1b4f71b4.js new file mode 100644 index 0000000000..74355f1cf2 --- /dev/null +++ b/assets/js/4228388b.1b4f71b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[21505],{909:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},67429:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png"},52545:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png"},26439:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png"},42517:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png"},17696:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png"},78234:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png"},29528:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png"},63468:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png"},62358:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png"},30419:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png"},42740:(e,s,n)=>{n.d(s,{Z:()=>t});const t=n.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},81833:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=n(24246),i=n(71670);const o={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},r=void 0,a={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{label:"recap",permalink:"/blog/tags/recap"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},l={image:n(909).Z,authorsImageUrls:[void 0]},c=[{value:"Highlights",id:"highlights",level:2},{value:"Trends",id:"trends",level:2},{value:"npm",id:"npm",level:3},{value:"GitHub",id:"github",level:3},{value:"Featured adoptions",id:"featured-adoptions",level:2},{value:"Community",id:"community",level:2},{value:"Going forward",id:"going-forward",level:2}];function h(e){const s={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,t.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,t.jsxs)(s.p,{children:["We've ",(0,t.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,t.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,t.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,t.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,t.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:n(42740).Z+"",width:"1000",height:"562"})}),"\n",(0,t.jsx)(s.h2,{id:"highlights",children:"Highlights"}),"\n",(0,t.jsxs)(s.p,{children:["Let's begin by going over a few highlights this year. Remember the ",(0,t.jsx)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta#whats-next",children:"todo-list"})," from half a year ago? Time to take it out again and see how far we've come!"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Internationalization"}),": officially released four months after its initial landing in late 2020. Seen great success in ",(0,t.jsx)(s.a,{href:"/showcase?tags=i18n",children:"many projects"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Autogenerated sidebars"}),": no need to maintain a big ",(0,t.jsx)(s.code,{children:"sidebars.js"})," anymore"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Webpack 5"}),": significantly improved build performance"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Trailing slash config"}),": seamless integration with any content hosting provider"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Redesigned mobile navigation"}),": mobile users now enjoy all navigation features as on desktop"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"UI improvements"}),": more accessible quotes, better admonitions, back-to-top button..."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Blog multi-authors"}),": credit all the amazing contributors that collaborated on one blog post!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"More blog features"}),": archive page, structured data for SEO, full post content in feeds \u2013 empowering you to ship a fully-featured blog in no time"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Asset collocation"}),": no need for a bloated static folder anymore: colocate your images with Markdown files"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Sidebar category index pages"}),": category labels can now be associated with pages, enabling better doc organization"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!"}),"\n",(0,t.jsx)(s.h2,{id:"trends",children:"Trends"}),"\n",(0,t.jsx)(s.h3,{id:"npm",children:"npm"}),"\n",(0,t.jsx)(s.p,{children:"Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.a,{href:"https://www.npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,t.jsx)(s.img,{alt:"Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There's a sharp drop from 90000 to 40000 just before the Jan 2022 line.",src:n(63468).Z+"",width:"800",height:"483"})})}),"\n",(0,t.jsx)(s.p,{children:"(Ah, the classic Christmas dip...)"}),"\n",(0,t.jsxs)(s.p,{children:["We released 18 versions, going from ",(0,t.jsx)(s.code,{children:"2.0.0-alpha.71"})," to ",(0,t.jsx)(s.code,{children:"2.0.0-beta.14"}),". That's one release every 20 days!"]}),"\n",(0,t.jsx)(s.h3,{id:"github",children:"GitHub"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Stars"}),": 20,460 \u2192 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Total contributors"}),": 512 \u2192 773 (+51.0% y/y)"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Dependents"}),": 5,039 \u2192 14,579 (+189.3% y/y) for v2, and 6,311 \u2192 7,581 (+20.1% y/y) for v1"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Commits"}),": 1,187 commits in the past year, averaging 23 commits every week"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Issues"}),": 619 issues opened, 505 of them eventually resolved"]}),"\n",(0,t.jsxs)(s.li,{children:["A ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:(0,t.jsx)(s.strong,{children:"new core team member"})})," (yep, that's me \ud83d\ude1d)"]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Our star trend is also very positive. Compared to similar projects, we are ",(0,t.jsx)(s.strong,{children:"growing at a faster rate"}),":"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.",src:n(30419).Z+"",width:"800",height:"550"})}),"\n",(0,t.jsxs)(s.p,{children:["With an 8.4k increase in stars, we are ranked number 3 in this year's ",(0,t.jsx)(s.a,{href:"https://risingstars.js.org/2021/en#section-ssg",children:"JavaScript rising stars of static site generators"}),", preceded only by Next.js and Astro."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Docusaurus placing 3rd in the "Static Sites" ranking list",src:n(62358).Z+"",width:"600",height:"412"})}),"\n",(0,t.jsx)(s.h2,{id:"featured-adoptions",children:"Featured adoptions"}),"\n",(0,t.jsxs)(s.p,{children:["Our showcase has welcomed a few new ",(0,t.jsx)(s.a,{href:"/showcase?tags=favorite",children:'"favorite" sites'})," that showcase the true potential of Docusaurus 2's pluggable architecture."]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://wiki.iota.org/",children:(0,t.jsx)(s.strong,{children:"IOTA-wiki"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Iota wiki light mode",src:n(29528).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Iota wiki dark mode",src:n(78234).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://docs.dyte.io/docs/home/introduction/",children:(0,t.jsx)(s.strong,{children:"Dyte"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Dyte light mode",src:n(26439).Z+"#gh-light-mode-only",width:"800",height:"454"}),(0,t.jsx)(s.img,{alt:"Dyte dark mode",src:n(52545).Z+"#gh-dark-mode-only",width:"800",height:"454"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://ionicframework.com/docs",children:(0,t.jsx)(s.strong,{children:"Ionic"})})}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.img,{alt:"Ionic light mode",src:n(17696).Z+"#gh-light-mode-only",width:"800",height:"456"}),(0,t.jsx)(s.img,{alt:"Ionic dark mode",src:n(42517).Z+"#gh-dark-mode-only",width:"800",height:"456"})]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"https://www.courier.com/docs/",children:(0,t.jsx)(s.strong,{children:"Courier"})})}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Courier",src:n(67429).Z+"",width:"800",height:"454"})}),"\n",(0,t.jsxs)(s.p,{children:["The creativity of Docusaurus users is beyond our imagination \ud83e\udd29 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/edit/main/website/src/data/users.tsx",children:"have it in our showcase"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"community",children:"Community"}),"\n",(0,t.jsxs)(s.p,{children:["As an active moderator on ",(0,t.jsx)(s.a,{href:"https://discord.gg/docusaurus",children:"Discord"}),", I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other \u2013 case in point, I was formerly a community contributor before becoming a maintainer."]}),"\n",(0,t.jsx)(s.p,{children:"We are constantly mentioned on Twitter with inspirational feedback:"}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"@docusaurus"})," is amazing! cant believe it's THAT simple to use."]}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsx)(s.p,{children:"No extra plugins, tooling or compilation steps. It just works out of the box."}),"\n"]}),"\n",(0,t.jsxs)(s.blockquote,{children:["\n",(0,t.jsxs)(s.p,{children:["I love ",(0,t.jsx)(s.strong,{children:"@docusaurus"}),". I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["And we keep every one of them in ",(0,t.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"our little box"})," \ud83d\ude04 If you enjoy Docusaurus yourself, keep tagging us with your comments!"]}),"\n",(0,t.jsxs)(s.p,{children:["As we approach the official release, we are interested in knowing more about what people are doing out there: ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4025",children:"plugin authors"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"creators of customized sites"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/4610",children:"all new users"})," \u2013 please keep us posted about your achievements so we can steer our development to better serve your needs."]}),"\n",(0,t.jsx)(s.h2,{id:"going-forward",children:"Going forward"}),"\n",(0,t.jsxs)(s.p,{children:["In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/15",children:"milestone"})," to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a ",(0,t.jsx)(s.strong,{children:"more robust theming workflow"}),", empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Guidelines on ",(0,t.jsx)(s.strong,{children:"component organization"}),". We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need."]}),"\n",(0,t.jsxs)(s.li,{children:["Improvements to the ",(0,t.jsx)(s.strong,{children:"swizzle CLI"}),". We want users to use it with delight and let it aid you through all possible swizzling scenarios."]}),"\n",(0,t.jsxs)(s.li,{children:["Refactoring our ",(0,t.jsx)(s.strong,{children:"theme APIs"}),". We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Docs"}),". We want our docs to be maximally accessible to everyone \u2013 from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Read more about plans for Docusaurus 2.0 in this ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"}),". 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!"]}),"\n",(0,t.jsxs)(s.p,{children:["As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/milestone/16",children:"architectural changes in 3.0"}),"!"]}),"\n",(0,t.jsx)(s.p,{children:"With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1."}),"\n",(0,t.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors?from=2021-01-01&to=2022-01-01&type=c",children:"all the contributors in 2021"}),", including:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The core team: ",(0,t.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", and ",(0,t.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus and supporting its development all along"]}),"\n",(0,t.jsxs)(s.li,{children:["The Algolia team for helping Docusaurus users ",(0,t.jsx)(s.a,{href:"/blog/2021/11/21/algolia-docsearch-migration",children:"migrate to the new DocSearch"})," and answering search-related questions"]}),"\n",(0,t.jsx)(s.li,{children:"All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"So long, 2021, and let's greet a great 2022!"})]})}function d(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>r});var t=n(27378);const i={},o=t.createContext(i);function r(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/42950.5e4d2fc0.js b/assets/js/42950.5e4d2fc0.js new file mode 100644 index 0000000000..84fc38e8b9 --- /dev/null +++ b/assets/js/42950.5e4d2fc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42950],{97683:(e,t,i)=>{i.d(t,{Z:()=>a});var n=i(24246),s=(i(27378),i(40624)),o=i(36712),r=i(52615);function a({className:e}){return(0,n.jsx)("main",{className:(0,s.Z)("container margin-vert--xl",e),children:(0,n.jsx)("div",{className:"row",children:(0,n.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,n.jsx)(r.Z,{as:"h1",className:"hero__title",children:(0,n.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,n.jsx)("p",{children:(0,n.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,n.jsx)("p",{children:(0,n.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},87834:(e,t,i)=>{i.r(t),i.d(t,{default:()=>d});var n=i(24246),s=(i(27378),i(36712)),o=i(44008),r=i(88613),a=i(97683);function d(){const e=(0,s.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.d,{title:e}),(0,n.jsx)(r.Z,{children:(0,n.jsx)(a.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/42c2afdc.547d4ece.js b/assets/js/42c2afdc.547d4ece.js new file mode 100644 index 0000000000..3ed64e7973 --- /dev/null +++ b/assets/js/42c2afdc.547d4ece.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89979],{73967:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>i});var o=s(24246),n=s(71670);const r={},c="Sample doc",a={id:"tests/category-links/with-readme-doc/sample-doc",title:"Sample doc",description:"Lorem Ipsum",source:"@site/_dogfooding/_docs tests/tests/category-links/with-readme-doc/sample-doc.mdx",sourceDirName:"tests/category-links/with-readme-doc",slug:"/tests/category-links/with-readme-doc/sample-doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/sample-doc",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category with readme.md doc",permalink:"/tests/docs/tests/category-links/with-readme-doc/"},next:{title:"Custom Props",permalink:"/tests/docs/tests/custom-props/"}},d={},i=[];function l(e){const t={h1:"h1",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"sample-doc",children:"Sample doc"}),"\n",(0,o.jsx)(t.p,{children:"Lorem Ipsum"})]})}function m(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>c});var o=s(27378);const n={},r=o.createContext(n);function c(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43b66818.606d0891.js b/assets/js/43b66818.606d0891.js new file mode 100644 index 0000000000..5d660e55ea --- /dev/null +++ b/assets/js/43b66818.606d0891.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86639],{94444:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>h,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>m});var n=t(24246),i=t(71670);const o={mdx:{format:"md"},date:"2022-10-29T20:00",authors:["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},r="2.2.0",s={permalink:"/changelog/2.2.0",source:"@site/changelog/source/2.2.0.md",title:"2.2.0",description:"New Feature",date:"2022-10-29T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Adnan Hashmi",alias:"adnanhashmi09",url:"https://github.com/adnanhashmi09",imageURL:"https://github.com/adnanhashmi09.png",key:"adnanhashmi09"},{name:"Johan Fagerberg",alias:"birjj",url:"https://github.com/birjj",imageURL:"https://github.com/birjj.png",key:"birjj"},{name:"evan",alias:"e-im",url:"https://github.com/e-im",imageURL:"https://github.com/e-im.png",key:"e-im"},{name:"forgeRW",alias:"forgeRW",url:"https://github.com/forgeRW",imageURL:"https://github.com/forgeRW.png",key:"forgeRW"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Mikey O'Toole",alias:"homotechsual",url:"https://github.com/homotechsual",imageURL:"https://github.com/homotechsual.png",key:"homotechsual"},{name:"Jeferson S. Brito",alias:"jeferson-sb",url:"https://github.com/jeferson-sb",imageURL:"https://github.com/jeferson-sb.png",key:"jeferson-sb"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jan Peer St\xf6cklmair",alias:"JPeer264",url:"https://github.com/JPeer264",imageURL:"https://github.com/JPeer264.png",key:"JPeer264"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"LittleboyHarry",alias:"LittleboyHarry",url:"https://github.com/LittleboyHarry",imageURL:"https://github.com/LittleboyHarry.png",key:"LittleboyHarry"},{name:"mturoci",alias:"mturoci",url:"https://github.com/mturoci",imageURL:"https://github.com/mturoci.png",key:"mturoci"},{name:"Nguy\u1ec5n Th\xe0nh Nam",alias:"namnguyenthanhwork",url:"https://github.com/namnguyenthanhwork",imageURL:"https://github.com/namnguyenthanhwork.png",key:"namnguyenthanhwork"},{name:"Masahiko Hara",alias:"pasora",url:"https://github.com/pasora",imageURL:"https://github.com/pasora.png",key:"pasora"},{name:"Pranav Joglekar",alias:"Pranav2612000",url:"https://github.com/Pranav2612000",imageURL:"https://github.com/Pranav2612000.png",key:"Pranav2612000"},{name:"Ramazan SANCAR",alias:"ramazansancar",url:"https://github.com/ramazansancar",imageURL:"https://github.com/ramazansancar.png",key:"ramazansancar"},{name:"Sanjaiyan Parthipan",alias:"sanjaiyan-dev",url:"https://github.com/sanjaiyan-dev",imageURL:"https://github.com/sanjaiyan-dev.png",key:"sanjaiyan-dev"},{name:"Shanmughapriyan S",alias:"shanpriyan",url:"https://github.com/shanpriyan",imageURL:"https://github.com/shanpriyan.png",key:"shanpriyan"},{name:"Sam Wall",alias:"sjwall",url:"https://github.com/sjwall",imageURL:"https://github.com/sjwall.png",key:"sjwall"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Xabier Lahuerta Vazquez",alias:"Xabilahu",url:"https://github.com/Xabilahu",imageURL:"https://github.com/Xabilahu.png",key:"Xabilahu"}],frontMatter:{mdx:{format:"md"},date:"2022-10-29T20:00",authors:["adnanhashmi09","birjj","e-im","forgeRW","forresst","homotechsual","jeferson-sb","johnnyreilly","Josh-Cena","JPeer264","lex111","LittleboyHarry","mturoci","namnguyenthanhwork","pasora","Pranav2612000","ramazansancar","sanjaiyan-dev","shanpriyan","sjwall","slorber","Xabilahu"]},unlisted:!1,prevItem:{title:"2.3.0",permalink:"/changelog/2.3.0"},nextItem:{title:"2.1.0",permalink:"/changelog/2.1.0"},listPageLink:"/changelog/"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function l(a){return(0,n.jsx)(n.Fragment,{})}function u(a={}){const{wrapper:e}={...(0,i.a)(),...a.components};return e?(0,n.jsx)(e,{...a,children:(0,n.jsx)(l,{...a})}):l()}},71670:(a,e,t)=>{t.d(e,{Z:()=>s,a:()=>r});var n=t(27378);const i={},o=n.createContext(i);function r(a){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function s(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(i):a.components||i:r(a.components),n.createElement(o.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/43cd9bda.49c4ef17.js b/assets/js/43cd9bda.49c4ef17.js new file mode 100644 index 0000000000..ab045d298a --- /dev/null +++ b/assets/js/43cd9bda.49c4ef17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65333],{70813:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>l,default:()=>a,frontMatter:()=>c,metadata:()=>o,toc:()=>t});var i=n(24246),r=n(71670);const c={mdx:{format:"md"},date:"2021-06-24T20:00",authors:["eshantri","felipecrs","Josh-Cena","jsamr","lex111","loozhengyuan","manuelmeurer","ramiy","slorber","teikjun","tomekpapiernik"]},l="2.0.0-beta.2",o={permalink:"/changelog/2.0.0-beta.2",source:"@site/changelog/source/2.0.0-beta.2.md",title:"2.0.0-beta.2",description:"New Feature",date:"2021-06-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Eshan Tripathi",alias:"eshantri",url:"https://github.com/eshantri",imageURL:"https://github.com/eshantri.png",key:"eshantri"},{name:"Felipe Santos",alias:"felipecrs",url:"https://github.com/felipecrs",imageURL:"https://github.com/felipecrs.png",key:"felipecrs"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jules Sam. Randolph",alias:"jsamr",url:"https://github.com/jsamr",imageURL:"https://github.com/jsamr.png",key:"jsamr"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"ZhengYuan Loo",alias:"loozhengyuan",url:"https://github.com/loozhengyuan",imageURL:"https://github.com/loozhengyuan.png",key:"loozhengyuan"},{name:"Manuel Meurer",alias:"manuelmeurer",url:"https://github.com/manuelmeurer",imageURL:"https://github.com/manuelmeurer.png",key:"manuelmeurer"},{name:"Rami Yushuvaev",alias:"ramiy",url:"https://github.com/ramiy",imageURL:"https://github.com/ramiy.png",key:"ramiy"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Tomasz Papiernik",alias:"tomekpapiernik",url:"https://github.com/tomekpapiernik",imageURL:"https://github.com/tomekpapiernik.png",key:"tomekpapiernik"}],frontMatter:{mdx:{format:"md"},date:"2021-06-24T20:00",authors:["eshantri","felipecrs","Josh-Cena","jsamr","lex111","loozhengyuan","manuelmeurer","ramiy","slorber","teikjun","tomekpapiernik"]},unlisted:!1,prevItem:{title:"2.0.0-beta.3",permalink:"/changelog/2.0.0-beta.3"},nextItem:{title:"2.0.0-beta.1",permalink:"/changelog/2.0.0-beta.1"},listPageLink:"/changelog/page/2"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},t=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 11",id:"committers-11",level:2}];function u(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5052",children:"#5052"})," feat(v2): docs version banner configuration option (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5037",children:"#5037"})," feat(v2): plugins injectHtmlTags + configureWebpack should receive content loaded (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5053",children:"#5053"})," refactor(v2): remove deprecated docs option excludeNextVersionDocs (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5052",children:"#5052"})," feat(v2): docs version banner configuration option (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5054",children:"#5054"})," fix(v2): allow undefined favicon (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5048",children:"#5048"})," fix(v2): read last update from inner git repositories (",(0,i.jsx)(s.a,{href:"https://github.com/felipecrs",children:"@felipecrs"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5050",children:"#5050"})," fix(v2): add shadow to skip link on focus only (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5035",children:"#5035"})," fix(v2): fix some docs container/sidebar layout issues (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5047",children:"#5047"})," fix(v2): Fix Webpack persistent caching (evict on swizzle/alias/config change) (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5040",children:"#5040"})," fix(v2): Fix announcementBar layout shifts (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5034",children:"#5034"})," fix(v2): dev css modules classnames should include filename (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5016",children:"#5016"})," fix(v2): add missing quote in build command output (",(0,i.jsx)(s.a,{href:"https://github.com/manuelmeurer",children:"@manuelmeurer"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5023",children:"#5023"})," fix(v2): ignore hash changes in useChangeRoute hook (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5032",children:"#5032"})," fix(v2): less strict blog/docs uri frontmatter validation (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5053",children:"#5053"})," refactor(v2): remove deprecated docs option excludeNextVersionDocs (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4993",children:"#4993"})," style(v2): reduce number of ESLint warnings (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5017",children:"#5017"})," chore(v2): remove badge for v1 tests (",(0,i.jsx)(s.a,{href:"https://github.com/loozhengyuan",children:"@loozhengyuan"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5049",children:"#5049"})," docs(v2): Fix Gatsby theme name for docs site - Docz (",(0,i.jsx)(s.a,{href:"https://github.com/ramiy",children:"@ramiy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5030",children:"#5030"})," docs(v2): typo in deployment.mdx (",(0,i.jsx)(s.a,{href:"https://github.com/eshantri",children:"@eshantri"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5022",children:"#5022"})," docs(v2): Add React Native Render HTML site to showcase page (",(0,i.jsx)(s.a,{href:"https://github.com/jsamr",children:"@jsamr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5027",children:"#5027"})," docs(v2): Add Buddy to deployment doc (",(0,i.jsx)(s.a,{href:"https://github.com/tomekpapiernik",children:"@tomekpapiernik"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5021",children:"#5021"})," docs(v2): fix incorrect anchor links in website (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5007",children:"#5007"})," docs(v2): wrap mdx usage in mdx-code-block (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5033",children:"#5033"})," docs(v2): GH pages: recommend using trailingSlash (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5005",children:"#5005"})," chore: add archived versions system + archive alpha.73-75 (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-11",children:"Committers: 11"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Eshan Tripathi (",(0,i.jsx)(s.a,{href:"https://github.com/eshantri",children:"@eshantri"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Felipe Santos (",(0,i.jsx)(s.a,{href:"https://github.com/felipecrs",children:"@felipecrs"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jules Sam. Randolph (",(0,i.jsx)(s.a,{href:"https://github.com/jsamr",children:"@jsamr"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Manuel Meurer (",(0,i.jsx)(s.a,{href:"https://github.com/manuelmeurer",children:"@manuelmeurer"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Rami Yushuvaev (",(0,i.jsx)(s.a,{href:"https://github.com/ramiy",children:"@ramiy"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Teik Jun (",(0,i.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tomasz Papiernik (",(0,i.jsx)(s.a,{href:"https://github.com/tomekpapiernik",children:"@tomekpapiernik"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["ZhengYuan Loo (",(0,i.jsx)(s.a,{href:"https://github.com/loozhengyuan",children:"@loozhengyuan"}),")"]}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>l});var i=n(27378);const r={},c=i.createContext(r);function l(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43e96a3f.96e28a08.js b/assets/js/43e96a3f.96e28a08.js new file mode 100644 index 0000000000..c220c91393 --- /dev/null +++ b/assets/js/43e96a3f.96e28a08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9203],{22611:t=>{t.exports=JSON.parse('{"tag":{"label":"tribute","permalink":"/blog/tags/tribute","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/tribute","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/447738d4.8486cba6.js b/assets/js/447738d4.8486cba6.js new file mode 100644 index 0000000000..2b4952bae6 --- /dev/null +++ b/assets/js/447738d4.8486cba6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90088],{61132:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),i=(t(27378),t(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>T});var r=t(24246),i=t(27378),a=t(40624),s=t(75527),o=t(3620),d=t(44479),l=t(62821),c=t(52196),u=t(53589);function h(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function m(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function g(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function p(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function f({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,l._X)(r),s=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(m(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){h(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[a,s]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=p(e),[s,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[l,c]=f({queryString:t,groupId:r}),[h,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,u.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:a})?e:null})();(0,d.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),m(e)}),[c,m,a]),tabValues:a}}var y=t(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){v(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function I({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),c=e=>{const n=e.currentTarget,r=d.indexOf(n),a=o[r].value;a!==t&&(l(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=d.indexOf(e.currentTarget)+1;var t;n=null!==(t=d[r])&&void 0!==t?t:d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;var r;n=null!==(r=d[t])&&void 0!==r?r:d[d.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",k(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>d.push(e),onKeyDown:u,onClick:c},i),{className:(0,a.Z)("tabs__item",j.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function O({lazy:e,children:n,selectedValue:t}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function N(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,r.jsx)(I,w({},e,n)),(0,r.jsx)(O,w({},e,n))]})}function T(e){const n=(0,y.Z)();return(0,r.jsx)(N,k(w({},e),{children:g(e.children)}),String(n))}},18615:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=t(24246),i=t(71670),a=t(97555),s=t(61132);const o={slug:"/sidebar/autogenerated"},d="Autogenerated",l={id:"guides/docs/sidebar/autogenerated",title:"Autogenerated",description:"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.",source:"@site/docs/guides/docs/sidebar/autogenerated.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/autogenerated",permalink:"/docs/sidebar/autogenerated",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/autogenerated.mdx",tags:[],version:"current",lastUpdatedBy:"ozaki",lastUpdatedAt:170436938e4,frontMatter:{slug:"/sidebar/autogenerated"},sidebar:"docs",previous:{title:"Sidebar items",permalink:"/docs/sidebar/items"},next:{title:"Using multiple sidebars",permalink:"/docs/sidebar/multiple-sidebars"}},c={},u=[{value:"Category index convention",id:"category-index-convention",level:2},{value:"Autogenerated sidebar metadata",id:"autogenerated-sidebar-metadata",level:2},{value:"Doc item metadata",id:"doc-item-metadata",level:3},{value:"Category item metadata",id:"category-item-metadata",level:3},{value:"Using number prefixes",id:"using-number-prefixes",level:2},{value:"Customize the sidebar items generator",id:"customize-the-sidebar-items-generator",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"autogenerated",children:"Autogenerated"}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus can ",(0,r.jsx)(n.strong,{children:"create a sidebar automatically"})," from your ",(0,r.jsx)(n.strong,{children:"filesystem structure"}),": each folder creates a sidebar category, and each file creates a doc link."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemAutogenerated = {\n type: 'autogenerated';\n dirName: string; // Source folder to generate the sidebar slice from (relative to docs)\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can generate a full sidebar from your docs folder:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myAutogeneratedSidebar: [\n // highlight-start\n {\n type: 'autogenerated',\n dirName: '.', // '.' means the current docs folder\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["An ",(0,r.jsx)(n.code,{children:"autogenerated"})," item is converted by Docusaurus to a ",(0,r.jsx)(n.strong,{children:"sidebar slice"})," (also discussed in ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-shorthand",children:"category shorthands"}),"): a list of items of type ",(0,r.jsx)(n.code,{children:"doc"})," or ",(0,r.jsx)(n.code,{children:"category"}),", so you can splice ",(0,r.jsxs)(n.strong,{children:["multiple ",(0,r.jsx)(n.code,{children:"autogenerated"})," items"]})," from multiple directories, interleaving them with regular sidebar items, in one sidebar level."]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"A real-world example"}),(0,r.jsx)(n.p,{children:"Consider this file structure:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 api\n\u2502 \u251c\u2500\u2500 product1-api\n\u2502 \u2502 \u2514\u2500\u2500 api.md\n\u2502 \u2514\u2500\u2500 product2-api\n\u2502 \u251c\u2500\u2500 basic-api.md\n\u2502 \u2514\u2500\u2500 pro-api.md\n\u251c\u2500\u2500 intro.md\n\u2514\u2500\u2500 tutorials\n \u251c\u2500\u2500 advanced\n \u2502 \u251c\u2500\u2500 advanced1.md\n \u2502 \u251c\u2500\u2500 advanced2.md\n \u2502 \u2514\u2500\u2500 read-more\n \u2502 \u251c\u2500\u2500 resource1.md\n \u2502 \u2514\u2500\u2500 resource2.md\n \u251c\u2500\u2500 easy\n \u2502 \u251c\u2500\u2500 easy1.md\n \u2502 \u2514\u2500\u2500 easy2.md\n \u251c\u2500\u2500 tutorial-end.md\n \u251c\u2500\u2500 tutorial-intro.md\n \u2514\u2500\u2500 tutorial-medium.md\n"})}),(0,r.jsx)(n.p,{children:"And assume every doc's ID is just its file name. If you define an autogenerated sidebar like this:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/easy', // Generate sidebar slice from docs/tutorials/easy\n },\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'tutorials/advanced', // Generate sidebar slice from docs/tutorials/advanced\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n {\n type: 'autogenerated',\n dirName: 'api', // Generate sidebar slice from docs/api\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"It would be resolved as:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n 'intro',\n {\n type: 'category',\n label: 'Tutorials',\n items: [\n 'tutorial-intro',\n // highlight-start\n // Two files in docs/tutorials/easy\n 'easy1',\n 'easy2',\n // highlight-end\n 'tutorial-medium',\n // highlight-start\n // Two files and a folder in docs/tutorials/advanced\n 'advanced1',\n 'advanced2',\n {\n type: 'category',\n label: 'read-more',\n items: ['resource1', 'resource2'],\n },\n // highlight-end\n 'tutorial-end',\n ],\n },\n // highlight-start\n // Two folders in docs/api\n {\n type: 'category',\n label: 'product1-api',\n items: ['api'],\n },\n {\n type: 'category',\n label: 'product2-api',\n items: ['basic-api', 'pro-api'],\n },\n // highlight-end\n {\n type: 'category',\n label: 'Community',\n items: ['team', 'chat'],\n },\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:'Note how the autogenerate source directories themselves don\'t become categories: only the items they contain do. This is what we mean by "sidebar slice".'})]}),"\n",(0,r.jsx)(n.h2,{id:"category-index-convention",children:"Category index convention"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus can automatically link a category to its index document."}),"\n",(0,r.jsx)(n.p,{children:"A category index document is a document following one of those filename conventions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"index"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/index.md"})]}),"\n",(0,r.jsxs)(n.li,{children:["Named as ",(0,r.jsx)(n.code,{children:"README"})," (case-insensitive): ",(0,r.jsx)(n.code,{children:"docs/Guides/README.mdx"})]}),"\n",(0,r.jsxs)(n.li,{children:["Same name as parent folder: ",(0,r.jsx)(n.code,{children:"docs/Guides/Guides.md"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This is equivalent to using a category with a ",(0,r.jsx)(n.a,{href:"/docs/sidebar/items#category-doc-link",children:"doc link"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n // highlight-start\n {\n type: 'category',\n label: 'Guides',\n link: {type: 'doc', id: 'Guides/index'},\n items: [],\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Naming your introductory document ",(0,r.jsx)(n.code,{children:"README.md"})," makes it show up when browsing the folder using the GitHub interface, while using ",(0,r.jsx)(n.code,{children:"index.md"})," makes the behavior more in line with how HTML files are served."]})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If a folder only has one index page, it will be turned into a link instead of a category. This is useful for ",(0,r.jsx)(n.strong,{children:"asset collocation"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"some-doc\n\u251c\u2500\u2500 index.md\n\u251c\u2500\u2500 img1.png\n\u2514\u2500\u2500 img2.png\n"})})]}),"\n",(0,r.jsxs)(t,{children:[(0,r.jsx)("summary",{children:"Customizing category index matching"}),(0,r.jsxs)(n.p,{children:["It is possible to opt out any of the category index conventions, or define even more conventions. You can inject your own ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher through the ",(0,r.jsx)(n.a,{href:"#customize-the-sidebar-items-generator",children:(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})})," callback. For example, you can also pick ",(0,r.jsx)(n.code,{children:"intro"})," as another file name eligible for automatically becoming the category index."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex(doc) {\n return (\n // Also pick intro.md in addition to the default ones\n doc.fileName.toLowerCase() === 'intro' ||\n defaultCategoryIndexMatcher(doc)\n );\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsx)(n.p,{children:"Or choose to not have any category index convention."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n async sidebarItemsGenerator({\n ...args,\n isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below\n defaultSidebarItemsGenerator,\n }) {\n return defaultSidebarItemsGenerator({\n ...args,\n // highlight-start\n isCategoryIndex() {\n // No doc will be automatically picked as category index\n return false;\n },\n // highlight-end\n });\n },\n },\n ],\n ],\n};\n"})}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"isCategoryIndex"})," matcher will be provided with three fields:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"fileName"}),", the file's name without extension and with casing preserved"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"directories"}),", the list of directory names ",(0,r.jsx)(n.em,{children:"from the lowest level to the highest level"}),", relative to the docs root directory"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extension"}),", the file's extension, with a leading dot."]}),"\n"]}),(0,r.jsxs)(n.p,{children:["For example, for a doc file at ",(0,r.jsx)(n.code,{children:"guides/sidebar/autogenerated.md"}),", the props the matcher receives are"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const props = {\n fileName: 'autogenerated',\n directories: ['sidebar', 'guides'],\n extension: '.md',\n};\n"})}),(0,r.jsx)(n.p,{children:"The default implementation is:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"function isCategoryIndex({fileName, directories}) {\n const eligibleDocIndexNames = [\n 'index',\n 'readme',\n directories[0].toLowerCase(),\n ];\n return eligibleDocIndexNames.includes(fileName.toLowerCase());\n}\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"autogenerated-sidebar-metadata",children:"Autogenerated sidebar metadata"}),"\n",(0,r.jsxs)(n.p,{children:["For handwritten sidebar definitions, you would provide metadata to sidebar items through ",(0,r.jsx)(n.code,{children:"sidebars.js"}),"; for autogenerated, Docusaurus would read them from the item's respective file. In addition, you may want to adjust the relative position of each item because, by default, items within a sidebar slice will be generated in ",(0,r.jsx)(n.strong,{children:"alphabetical order"})," (using file and folder names)."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-item-metadata",children:"Doc item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," attributes are declared in front matter as ",(0,r.jsx)(n.code,{children:"sidebar_label"}),", ",(0,r.jsx)(n.code,{children:"sidebar_class_name"}),", and ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"}),", respectively. Position can be specified in the same way, via ",(0,r.jsx)(n.code,{children:"sidebar_position"})," front matter."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/tutorials/tutorial-easy.md"',children:"---\n# highlight-start\nsidebar_position: 2\nsidebar_label: Easy\nsidebar_class_name: green\n# highlight-end\n---\n\n# Easy Tutorial\n\nThis is the easy tutorial!\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-item-metadata",children:"Category item metadata"}),"\n",(0,r.jsxs)(n.p,{children:["Add a ",(0,r.jsx)(n.code,{children:"_category_.json"})," or ",(0,r.jsx)(n.code,{children:"_category_.yml"})," file in the respective folder. You can specify any category metadata and also the ",(0,r.jsx)(n.code,{children:"position"})," metadata. ",(0,r.jsx)(n.code,{children:"label"}),", ",(0,r.jsx)(n.code,{children:"className"}),", ",(0,r.jsx)(n.code,{children:"position"}),", and ",(0,r.jsx)(n.code,{children:"customProps"})," will default to the respective values of the category's linked doc, if there is one."]}),"\n",(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(s.Z,{value:"JSON",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="docs/tutorials/_category_.json"',children:'{\n "position": 2.5,\n "label": "Tutorial",\n "collapsible": true,\n "collapsed": false,\n "className": "red",\n "link": {\n "type": "generated-index",\n "title": "Tutorial overview"\n },\n "customProps": {\n "description": "This description can be used in the swizzled DocCard"\n }\n}\n'})})}),(0,r.jsx)(s.Z,{value:"YAML",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",metastring:'title="docs/tutorials/_category_.yml"',children:"position: 2.5 # float position is supported\nlabel: 'Tutorial'\ncollapsible: true # make the category collapsible\ncollapsed: false # keep the category open by default\nclassName: red\nlink:\n type: generated-index\n title: Tutorial overview\ncustomProps:\n description: This description can be used in the swizzled DocCard\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If the ",(0,r.jsx)(n.code,{children:"link"})," is explicitly specified, Docusaurus will not apply any ",(0,r.jsx)(n.a,{href:"#category-index-convention",children:"default conventions"}),"."]}),(0,r.jsxs)(n.p,{children:["The doc links can be specified relatively, e.g. if the category is generated with the ",(0,r.jsx)(n.code,{children:"guides"})," directory, ",(0,r.jsx)(n.code,{children:'"link": {"type": "doc", "id": "intro"}'})," will be resolved to the ID ",(0,r.jsx)(n.code,{children:"guides/intro"}),", only falling back to ",(0,r.jsx)(n.code,{children:"intro"})," if a doc with the former ID doesn't exist."]}),(0,r.jsxs)(n.p,{children:["You can also use ",(0,r.jsx)(n.code,{children:"link: null"})," to opt out of default conventions and not generate any category index page."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The position metadata is only used ",(0,r.jsx)(n.strong,{children:"within a sidebar slice"}),": Docusaurus does not re-order other items of your sidebar."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-number-prefixes",children:"Using number prefixes"}),"\n",(0,r.jsx)(n.p,{children:"A simple way to order an autogenerated sidebar is to prefix docs and folders by number prefixes, which also makes them appear in the file system in the same order when sorted by file name:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docs\n\u251c\u2500\u2500 01-Intro.md\n\u251c\u2500\u2500 02-Tutorial Easy\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u2514\u2500\u2500 03-End.md\n\u251c\u2500\u2500 03-Tutorial Advanced\n\u2502 \u251c\u2500\u2500 01-First Part.md\n\u2502 \u251c\u2500\u2500 02-Second Part.md\n\u2502 \u251c\u2500\u2500 03-Third Part.md\n\u2502 \u2514\u2500\u2500 04-End.md\n\u2514\u2500\u2500 04-End.md\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make it ",(0,r.jsx)(n.strong,{children:"easier to adopt"}),", Docusaurus supports ",(0,r.jsx)(n.strong,{children:"multiple number prefix patterns"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["By default, Docusaurus will ",(0,r.jsx)(n.strong,{children:"remove the number prefix"})," from the doc id, title, label, and URL paths."]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["Prefer using ",(0,r.jsx)(n.a,{href:"#autogenerated-sidebar-metadata",children:"additional metadata"})]}),"."]}),(0,r.jsxs)(n.p,{children:["Updating a number prefix can be annoying, as it can require ",(0,r.jsx)(n.strong,{children:"updating multiple existing Markdown links"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="docs/02-Tutorial Easy/01-First Part.md"',children:"- Check the [Tutorial End](../04-End.mdx);\n+ Check the [Tutorial End](../05-End.mdx);\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"customize-the-sidebar-items-generator",children:"Customize the sidebar items generator"}),"\n",(0,r.jsxs)(n.p,{children:["You can provide a custom ",(0,r.jsx)(n.code,{children:"sidebarItemsGenerator"})," function in the docs plugin (or preset) config:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({\n defaultSidebarItemsGenerator,\n numberPrefixParser,\n item,\n version,\n docs,\n categoriesMetadata,\n isCategoryIndex,\n }) {\n // Example: return an hardcoded list of static sidebar items\n return [\n {type: 'doc', id: 'doc1'},\n {type: 'doc', id: 'doc2'},\n ];\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Re-use and enhance the default generator"})," instead of writing a generator from scratch: ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/sidebars/generator.ts",children:"the default generator we provide"})," is 250 lines long."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Add, update, filter, re-order"})," the sidebar items according to your use case:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\n// Reverse the sidebar items ordering (including nested category items)\nfunction reverseSidebarItems(items) {\n // Reverse items in categories\n const result = items.map((item) => {\n if (item.type === 'category') {\n return {...item, items: reverseSidebarItems(item.items)};\n }\n return item;\n });\n // Reverse items at current level\n result.reverse();\n return result;\n}\n// highlight-end\n\nexport default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) {\n const sidebarItems = await defaultSidebarItemsGenerator(args);\n return reverseSidebarItems(sidebarItems);\n },\n // highlight-end\n },\n ],\n ],\n};\n"})})]})]})}function m(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var r=t(27378);const i={},a=r.createContext(i);function s(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/44e06438.a3203618.js b/assets/js/44e06438.a3203618.js new file mode 100644 index 0000000000..41fa46d500 --- /dev/null +++ b/assets/js/44e06438.a3203618.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78873],{37777:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-10-22T20:00"},s="2.0.0-alpha.30",c={permalink:"/changelog/2.0.0-alpha.30",source:"@site/changelog/source/2.0.0-alpha.30.md",title:"2.0.0-alpha.30",description:"- Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug TypeError: Cannot assign to read only property 'exports' of object '#'.(#1868)",date:"2019-10-22T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-22T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.31",permalink:"/changelog/2.0.0-alpha.31"},nextItem:{title:"2.0.0-alpha.29",permalink:"/changelog/2.0.0-alpha.29"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function p(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(p,{...e})}):p()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/44f0a4a7.48111ad2.js b/assets/js/44f0a4a7.48111ad2.js new file mode 100644 index 0000000000..c08e1de99f --- /dev/null +++ b/assets/js/44f0a4a7.48111ad2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97534],{15231:(s,e,i)=>{i.r(e),i.d(e,{assets:()=>t,contentTitle:()=>l,default:()=>u,frontMatter:()=>c,metadata:()=>h,toc:()=>a});var r=i(24246),o=i(71670);const c={mdx:{format:"md"},date:"2020-12-17T20:00",authors:["aarongarciah","aeneasr","Alex1304","ArtFlag","borool","cindygu4","davidmauskop","dgilling","francoischalifour","hmil","lex111","LoicPoullain","manzinello","matijaSos","mpsq","oriooctopus","Romstar","sarthakkundra","Simek","sivaraam","slorber","Varshit07","woodrufs"]},l="2.0.0-alpha.70",h={permalink:"/changelog/2.0.0-alpha.70",source:"@site/changelog/source/2.0.0-alpha.70.md",title:"2.0.0-alpha.70",description:"New Feature",date:"2020-12-17T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Aar\xf3n Garc\xeda Herv\xe1s",alias:"aarongarciah",url:"https://github.com/aarongarciah",imageURL:"https://github.com/aarongarciah.png",key:"aarongarciah"},{name:"hackerman",alias:"aeneasr",url:"https://github.com/aeneasr",imageURL:"https://github.com/aeneasr.png",key:"aeneasr"},{name:"Alex1304",alias:"Alex1304",url:"https://github.com/Alex1304",imageURL:"https://github.com/Alex1304.png",key:"Alex1304"},{name:"Arthur",alias:"ArtFlag",url:"https://github.com/ArtFlag",imageURL:"https://github.com/ArtFlag.png",key:"ArtFlag"},{name:"borool",alias:"borool",url:"https://github.com/borool",imageURL:"https://github.com/borool.png",key:"borool"},{name:"Cindy Gu",alias:"cindygu4",url:"https://github.com/cindygu4",imageURL:"https://github.com/cindygu4.png",key:"cindygu4"},{name:"davidmauskop",alias:"davidmauskop",url:"https://github.com/davidmauskop",imageURL:"https://github.com/davidmauskop.png",key:"davidmauskop"},{name:"Derric Gilling",alias:"dgilling",url:"https://github.com/dgilling",imageURL:"https://github.com/dgilling.png",key:"dgilling"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"Hadrien Milano",alias:"hmil",url:"https://github.com/hmil",imageURL:"https://github.com/hmil.png",key:"hmil"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lo\xefc Poullain",alias:"LoicPoullain",url:"https://github.com/LoicPoullain",imageURL:"https://github.com/LoicPoullain.png",key:"LoicPoullain"},{name:"Matteo Manzinello",alias:"manzinello",url:"https://github.com/manzinello",imageURL:"https://github.com/manzinello.png",key:"manzinello"},{name:"Matija Sosic",alias:"matijaSos",url:"https://github.com/matijaSos",imageURL:"https://github.com/matijaSos.png",key:"matijaSos"},{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"Oliver Ullman",alias:"oriooctopus",url:"https://github.com/oriooctopus",imageURL:"https://github.com/oriooctopus.png",key:"oriooctopus"},{name:"Rami",alias:"Romstar",url:"https://github.com/Romstar",imageURL:"https://github.com/Romstar.png",key:"Romstar"},{name:"Sarthak kundra",alias:"sarthakkundra",url:"https://github.com/sarthakkundra",imageURL:"https://github.com/sarthakkundra.png",key:"sarthakkundra"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"Kaartic Sivaraam",alias:"sivaraam",url:"https://github.com/sivaraam",imageURL:"https://github.com/sivaraam.png",key:"sivaraam"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Varshit Shah",alias:"Varshit07",url:"https://github.com/Varshit07",imageURL:"https://github.com/Varshit07.png",key:"Varshit07"},{name:"Stephen Woodruff",alias:"woodrufs",url:"https://github.com/woodrufs",imageURL:"https://github.com/woodrufs.png",key:"woodrufs"}],frontMatter:{mdx:{format:"md"},date:"2020-12-17T20:00",authors:["aarongarciah","aeneasr","Alex1304","ArtFlag","borool","cindygu4","davidmauskop","dgilling","francoischalifour","hmil","lex111","LoicPoullain","manzinello","matijaSos","mpsq","oriooctopus","Romstar","sarthakkundra","Simek","sivaraam","slorber","Varshit07","woodrufs"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.71",permalink:"/changelog/2.0.0-alpha.71"},nextItem:{title:"2.0.0-alpha.69",permalink:"/changelog/2.0.0-alpha.69"},listPageLink:"/changelog/page/3"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 23",id:"committers-23",level:2}];function n(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,o.a)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3932",children:"#3932"})," feat(v2): Add Root theme element (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3916",children:"#3916"})," feat(v2): Add localeDropdown navbar item type + i18n localeConfigs field (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3904",children:"#3904"})," feat(v2): inline table-of-contents + refactor TOC (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3888",children:"#3888"})," feat(v2): add custom props for consumption by swizzled sidebar (",(0,r.jsx)(e.a,{href:"https://github.com/oriooctopus",children:"@oriooctopus"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3842",children:"#3842"})," feat(v2): enable feeds by default in blog plugin (",(0,r.jsx)(e.a,{href:"https://github.com/cindygu4",children:"@cindygu4"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3827",children:"#3827"})," feat(v2): add automated canary releases (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3761",children:"#3761"})," feat(v2): Added Lighthouse CI to PR checks (",(0,r.jsx)(e.a,{href:"https://github.com/sarthakkundra",children:"@sarthakkundra"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3325",children:"#3325"})," feat(v2): core v2 i18n support + Docusaurus site Crowdin integration (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3904",children:"#3904"})," feat(v2): inline table-of-contents + refactor TOC (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3842",children:"#3842"})," feat(v2): enable feeds by default in blog plugin (",(0,r.jsx)(e.a,{href:"https://github.com/cindygu4",children:"@cindygu4"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3922",children:"#3922"})," fix(v2): fix navbar items issue on Windows? (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3920",children:"#3920"})," fix(v2): i18n translation extractor should handle JSX formatting edge cases better (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3896",children:"#3896"})," fix(v2): do not treat at-rules during CSS minification (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3869",children:"#3869"})," fix(v2): load plugin commands async to fix broken plugin CLI commands ",(0,r.jsx)(e.code,{children:"docs:version"})," (",(0,r.jsx)(e.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3921",children:"#3921"})," fix(v2): remove useless console log (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3895",children:"#3895"})," fix(v2): use proper element for pagination nav label (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3882",children:"#3882"})," fix(v2): improve Footer structure, add class names, use Infima transition (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3877",children:"#3877"})," fix(v2): dynamic dark mode detection without toggle widget (",(0,r.jsx)(e.a,{href:"https://github.com/hmil",children:"@hmil"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3854",children:"#3854"})," fix(v2): refactor icons in theme-classic, fix swizzle issue (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3823",children:"#3823"})," fix(v2): support rendering of singular tabs (",(0,r.jsx)(e.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3817",children:"#3817"})," fix(v2): Allow footer logo at attribute to be empty (",(0,r.jsx)(e.a,{href:"https://github.com/aarongarciah",children:"@aarongarciah"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3900",children:"#3900"})," fix(v2): correct typo in metas generated for Twitter cards (",(0,r.jsx)(e.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3872",children:"#3872"})," chore: add missing v1 generated files to ignores (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3833",children:"#3833"})," fix(v2): temporary: disable crowdin until PR env variable permission fixed (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"stylelint-copyright"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3852",children:"#3852"})," fix(v2): to fix the canary release GH workflow (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3853",children:"#3853"})," fix(v2): fix DocSearch keyboard navigator (",(0,r.jsx)(e.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3837",children:"#3837"})," fix(v2): update SearchPage styling, fix appearance in dark mode (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3828",children:"#3828"})," fix(v2): restore Algolia search (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3819",children:"#3819"})," feat(search): update DocSearch to alpha.31 (",(0,r.jsx)(e.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3839",children:"#3839"})," fix(v2): remove unnecessary backtick in output (",(0,r.jsx)(e.a,{href:"https://github.com/sivaraam",children:"@sivaraam"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3829",children:"#3829"})," fix(v2): fix search (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3824",children:"#3824"})," fix(v2): update notifier dist tag (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3880",children:"#3880"})," polish(v2): improve docusaurus deploy logs (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3931",children:"#3931"})," docs(v2): blog.md with docs: false, for blog-only mode (",(0,r.jsx)(e.a,{href:"https://github.com/Romstar",children:"@Romstar"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3924",children:"#3924"})," docs(v2): Removed unnecessary closing parenthesis (",(0,r.jsx)(e.a,{href:"https://github.com/Varshit07",children:"@Varshit07"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3928",children:"#3928"})," docs(v2): add FoalTS to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/LoicPoullain",children:"@LoicPoullain"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3899",children:"#3899"})," docs(v2): Move sidebar content to its own page (",(0,r.jsx)(e.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3856",children:"#3856"})," docs(v2): typo (",(0,r.jsx)(e.a,{href:"https://github.com/borool",children:"@borool"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3891",children:"#3891"})," docs(v2): Wrap section about custom domains in :::info (",(0,r.jsx)(e.a,{href:"https://github.com/Alex1304",children:"@Alex1304"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3871",children:"#3871"})," docs(v2): missing ",(0,r.jsx)(e.code,{children:"<ColorGenerator/>"})," mdx import (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3873",children:"#3873"})," docs(v2): From docusaurus-migrate to @docusaurus/migrate (",(0,r.jsx)(e.a,{href:"https://github.com/manzinello",children:"@manzinello"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3867",children:"#3867"})," docs(v2): Add docusaurus-plugin-moesif to community plugins (",(0,r.jsx)(e.a,{href:"https://github.com/dgilling",children:"@dgilling"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3851",children:"#3851"})," docs(v2): Fixed Typo: Hided => Hidden (",(0,r.jsx)(e.a,{href:"https://github.com/woodrufs",children:"@woodrufs"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3832",children:"#3832"})," docs(v2): Add wasp to showcase (",(0,r.jsx)(e.a,{href:"https://github.com/matijaSos",children:"@matijaSos"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3813",children:"#3813"})," docs(v2): render deployment doc (",(0,r.jsx)(e.a,{href:"https://github.com/davidmauskop",children:"@davidmauskop"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3835",children:"#3835"})," docs(v2): update Client API docs page (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3831",children:"#3831"})," docs(v2): Docs refactoring and reorganization (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3912",children:"#3912"})," chore(v2): remove docs for alpha v64 (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3907",children:"#3907"})," chore(ci): fix canary release filtering (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3902",children:"#3902"})," chore(deps): bump ini from 1.3.5 to 1.3.7 (",(0,r.jsx)(e.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3884",children:"#3884"})," chore(ci): increase Lighthouse CI max_timeout (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3883",children:"#3883"})," chore(v2): remove docs for alpha v62-63 (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3863",children:"#3863"})," chore(ci): run V1 Build and Migration CLI tests conditionally on CI (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3861",children:"#3861"})," chore(ci): reduce number of jobs, remove build from lighthouse pipeline (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3860",children:"#3860"})," chore: add Yarn v2 cache directory to ignores (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3858",children:"#3858"})," chore(v2): disable Crowdin for deploy previews (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3857",children:"#3857"})," fix(v2): fix Crowdin ci commands (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3849",children:"#3849"})," chore(ci): CI scripts cleanup, add Node 14 runs, bump checkout action (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3850",children:"#3850"})," chore(v2): i18n CI: add write-translations call (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3848",children:"#3848"})," chore(v2): fix CI typo (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3847",children:"#3847"})," chore(v2): wire production Crowdin project + setup (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3846",children:"#3846"})," chore(v2): fix PRs not able to add lighthouse/buildsize comment from works (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3865",children:"#3865"})," chore(v2): fix ignore paths and Prettier commands in themes (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-cssnano-preset"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3844",children:"#3844"})," chore(v2): fix several lint warnings, add missing types, cleanup (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3838",children:"#3838"})," refactor(v2): extract site title formatter to theme-common util (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"committers-23",children:"Committers: 23"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Aar\xf3n Garc\xeda Herv\xe1s (",(0,r.jsx)(e.a,{href:"https://github.com/aarongarciah",children:"@aarongarciah"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Alex1304 (",(0,r.jsx)(e.a,{href:"https://github.com/Alex1304",children:"@Alex1304"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Alexey Pyltsyn (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Arthur (",(0,r.jsx)(e.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Bartosz Kaszubowski (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Cindy Gu (",(0,r.jsx)(e.a,{href:"https://github.com/cindygu4",children:"@cindygu4"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Derric Gilling (",(0,r.jsx)(e.a,{href:"https://github.com/dgilling",children:"@dgilling"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Fran\xe7ois Chalifour (",(0,r.jsx)(e.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Hadrien Milano (",(0,r.jsx)(e.a,{href:"https://github.com/hmil",children:"@hmil"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Kaartic Sivaraam (",(0,r.jsx)(e.a,{href:"https://github.com/sivaraam",children:"@sivaraam"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Lo\xefc Poullain (",(0,r.jsx)(e.a,{href:"https://github.com/LoicPoullain",children:"@LoicPoullain"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Matija Sosic (",(0,r.jsx)(e.a,{href:"https://github.com/matijaSos",children:"@matijaSos"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Matteo Manzinello (",(0,r.jsx)(e.a,{href:"https://github.com/manzinello",children:"@manzinello"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["M\xe9ril (",(0,r.jsx)(e.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Oliver Ullman (",(0,r.jsx)(e.a,{href:"https://github.com/oriooctopus",children:"@oriooctopus"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Rami (",(0,r.jsx)(e.a,{href:"https://github.com/Romstar",children:"@Romstar"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Sarthak kundra (",(0,r.jsx)(e.a,{href:"https://github.com/sarthakkundra",children:"@sarthakkundra"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Stephen Woodruff (",(0,r.jsx)(e.a,{href:"https://github.com/woodrufs",children:"@woodrufs"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Varshit Shah (",(0,r.jsx)(e.a,{href:"https://github.com/Varshit07",children:"@Varshit07"}),")"]}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/borool",children:"@borool"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/davidmauskop",children:"@davidmauskop"})}),"\n",(0,r.jsxs)(e.li,{children:["hackerman (",(0,r.jsx)(e.a,{href:"https://github.com/aeneasr",children:"@aeneasr"}),")"]}),"\n"]})]})}function u(s={}){const{wrapper:e}={...(0,o.a)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(n,{...s})}):n(s)}},71670:(s,e,i)=>{i.d(e,{Z:()=>h,a:()=>l});var r=i(27378);const o={},c=r.createContext(o);function l(s){const e=r.useContext(c);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function h(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(o):s.components||o:l(s.components),r.createElement(c.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/453.64a25604.js b/assets/js/453.64a25604.js new file mode 100644 index 0000000000..d63b7f00ed --- /dev/null +++ b/assets/js/453.64a25604.js @@ -0,0 +1,23814 @@ +exports.id = 453; +exports.ids = [453]; +exports.modules = { + +/***/ 26746: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/******************************************************************************* + * Copyright (c) 2017 Kiel University and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = function () { + function ELK() { + var _this = this; + + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function $g(){} +function _p(){} +function yq(){} +function Sq(){} +function Es(){} +function Jw(){} +function Vw(){} +function VA(){} +function dA(){} +function MA(){} +function PA(){} +function PB(){} +function bx(){} +function cx(){} +function vy(){} +function Nz(){} +function Yz(){} +function Ylb(){} +function Ymb(){} +function xmb(){} +function Fmb(){} +function Qmb(){} +function gcb(){} +function ccb(){} +function jcb(){} +function jtb(){} +function otb(){} +function qtb(){} +function _fb(){} +function bpb(){} +function kpb(){} +function ppb(){} +function Gpb(){} +function drb(){} +function dzb(){} +function fzb(){} +function fxb(){} +function Vxb(){} +function Ovb(){} +function byb(){} +function zyb(){} +function Zyb(){} +function _yb(){} +function hzb(){} +function jzb(){} +function lzb(){} +function nzb(){} +function rzb(){} +function zzb(){} +function Czb(){} +function Ezb(){} +function Gzb(){} +function Izb(){} +function Mzb(){} +function bBb(){} +function NBb(){} +function PBb(){} +function RBb(){} +function iCb(){} +function OCb(){} +function SCb(){} +function GDb(){} +function JDb(){} +function fEb(){} +function xEb(){} +function CEb(){} +function GEb(){} +function yFb(){} +function KGb(){} +function tIb(){} +function vIb(){} +function xIb(){} +function zIb(){} +function OIb(){} +function SIb(){} +function TJb(){} +function VJb(){} +function XJb(){} +function XKb(){} +function fKb(){} +function VKb(){} +function VLb(){} +function jLb(){} +function nLb(){} +function GLb(){} +function KLb(){} +function MLb(){} +function OLb(){} +function RLb(){} +function YLb(){} +function bMb(){} +function gMb(){} +function lMb(){} +function pMb(){} +function wMb(){} +function zMb(){} +function CMb(){} +function FMb(){} +function LMb(){} +function zNb(){} +function PNb(){} +function kOb(){} +function pOb(){} +function tOb(){} +function yOb(){} +function FOb(){} +function GPb(){} +function aQb(){} +function cQb(){} +function eQb(){} +function gQb(){} +function iQb(){} +function CQb(){} +function MQb(){} +function OQb(){} +function ASb(){} +function fTb(){} +function kTb(){} +function STb(){} +function fUb(){} +function DUb(){} +function VUb(){} +function YUb(){} +function _Ub(){} +function _Wb(){} +function QWb(){} +function XWb(){} +function jVb(){} +function DVb(){} +function VVb(){} +function $Vb(){} +function dXb(){} +function hXb(){} +function lXb(){} +function gYb(){} +function HYb(){} +function SYb(){} +function VYb(){} +function dZb(){} +function P$b(){} +function T$b(){} +function h1b(){} +function m1b(){} +function q1b(){} +function u1b(){} +function y1b(){} +function C1b(){} +function e2b(){} +function g2b(){} +function m2b(){} +function q2b(){} +function u2b(){} +function S2b(){} +function U2b(){} +function W2b(){} +function _2b(){} +function e3b(){} +function h3b(){} +function p3b(){} +function t3b(){} +function w3b(){} +function y3b(){} +function A3b(){} +function M3b(){} +function Q3b(){} +function U3b(){} +function Y3b(){} +function l4b(){} +function q4b(){} +function s4b(){} +function u4b(){} +function w4b(){} +function y4b(){} +function L4b(){} +function N4b(){} +function P4b(){} +function R4b(){} +function T4b(){} +function X4b(){} +function I5b(){} +function Q5b(){} +function T5b(){} +function Z5b(){} +function l6b(){} +function o6b(){} +function t6b(){} +function z6b(){} +function L6b(){} +function M6b(){} +function P6b(){} +function X6b(){} +function $6b(){} +function a7b(){} +function c7b(){} +function g7b(){} +function j7b(){} +function m7b(){} +function r7b(){} +function x7b(){} +function D7b(){} +function D9b(){} +function b9b(){} +function h9b(){} +function j9b(){} +function l9b(){} +function w9b(){} +function F9b(){} +function hac(){} +function jac(){} +function pac(){} +function uac(){} +function Iac(){} +function Kac(){} +function Sac(){} +function obc(){} +function rbc(){} +function vbc(){} +function Fbc(){} +function Jbc(){} +function Xbc(){} +function ccc(){} +function fcc(){} +function lcc(){} +function occ(){} +function tcc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ecc(){} +function Gcc(){} +function Zcc(){} +function _cc(){} +function bdc(){} +function fdc(){} +function jdc(){} +function pdc(){} +function sdc(){} +function ydc(){} +function Adc(){} +function Cdc(){} +function Edc(){} +function Idc(){} +function Ndc(){} +function Qdc(){} +function Sdc(){} +function Udc(){} +function Wdc(){} +function Ydc(){} +function aec(){} +function hec(){} +function jec(){} +function lec(){} +function nec(){} +function uec(){} +function wec(){} +function yec(){} +function Aec(){} +function Fec(){} +function Jec(){} +function Lec(){} +function Nec(){} +function Rec(){} +function Uec(){} +function Zec(){} +function Zfc(){} +function lfc(){} +function tfc(){} +function xfc(){} +function zfc(){} +function Ffc(){} +function Jfc(){} +function Nfc(){} +function Pfc(){} +function Vfc(){} +function _fc(){} +function fgc(){} +function jgc(){} +function lgc(){} +function Bgc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function khc(){} +function mhc(){} +function ohc(){} +function qhc(){} +function yhc(){} +function Ahc(){} +function Ghc(){} +function Ihc(){} +function Khc(){} +function Mhc(){} +function Shc(){} +function Uhc(){} +function Whc(){} +function dic(){} +function dlc(){} +function blc(){} +function flc(){} +function hlc(){} +function jlc(){} +function Glc(){} +function Ilc(){} +function Klc(){} +function Mlc(){} +function Mjc(){} +function Qjc(){} +function Qlc(){} +function Ulc(){} +function Ylc(){} +function Lkc(){} +function Nkc(){} +function Pkc(){} +function Rkc(){} +function Xkc(){} +function _kc(){} +function gmc(){} +function kmc(){} +function zmc(){} +function Fmc(){} +function Wmc(){} +function $mc(){} +function anc(){} +function mnc(){} +function wnc(){} +function Hnc(){} +function Jnc(){} +function Lnc(){} +function Nnc(){} +function Pnc(){} +function Ync(){} +function eoc(){} +function Aoc(){} +function Coc(){} +function Eoc(){} +function Joc(){} +function Loc(){} +function Zoc(){} +function _oc(){} +function bpc(){} +function hpc(){} +function kpc(){} +function ppc(){} +function pFc(){} +function Ryc(){} +function QCc(){} +function PDc(){} +function xGc(){} +function HGc(){} +function JGc(){} +function NGc(){} +function GIc(){} +function iKc(){} +function mKc(){} +function wKc(){} +function yKc(){} +function AKc(){} +function EKc(){} +function KKc(){} +function OKc(){} +function QKc(){} +function SKc(){} +function UKc(){} +function YKc(){} +function aLc(){} +function fLc(){} +function hLc(){} +function nLc(){} +function pLc(){} +function tLc(){} +function vLc(){} +function zLc(){} +function BLc(){} +function DLc(){} +function FLc(){} +function sMc(){} +function JMc(){} +function hNc(){} +function RNc(){} +function ZNc(){} +function _Nc(){} +function bOc(){} +function dOc(){} +function fOc(){} +function hOc(){} +function hRc(){} +function jRc(){} +function KRc(){} +function NRc(){} +function NQc(){} +function LQc(){} +function _Qc(){} +function cPc(){} +function iPc(){} +function kPc(){} +function mPc(){} +function xPc(){} +function zPc(){} +function zSc(){} +function BSc(){} +function GSc(){} +function ISc(){} +function NSc(){} +function TSc(){} +function NTc(){} +function NVc(){} +function oVc(){} +function SVc(){} +function VVc(){} +function XVc(){} +function ZVc(){} +function bWc(){} +function bXc(){} +function CXc(){} +function FXc(){} +function IXc(){} +function MXc(){} +function UXc(){} +function bYc(){} +function fYc(){} +function oYc(){} +function qYc(){} +function uYc(){} +function pZc(){} +function G$c(){} +function h0c(){} +function N0c(){} +function k1c(){} +function I1c(){} +function Q1c(){} +function f2c(){} +function i2c(){} +function k2c(){} +function w2c(){} +function O2c(){} +function S2c(){} +function Z2c(){} +function v3c(){} +function x3c(){} +function R3c(){} +function U3c(){} +function e4c(){} +function w4c(){} +function x4c(){} +function z4c(){} +function B4c(){} +function D4c(){} +function F4c(){} +function H4c(){} +function J4c(){} +function L4c(){} +function N4c(){} +function P4c(){} +function R4c(){} +function T4c(){} +function V4c(){} +function X4c(){} +function Z4c(){} +function _4c(){} +function _7c(){} +function b5c(){} +function d5c(){} +function f5c(){} +function h5c(){} +function H5c(){} +function Hfd(){} +function Zfd(){} +function Zed(){} +function ged(){} +function Jed(){} +function Ned(){} +function Red(){} +function Ved(){} +function bbd(){} +function mdd(){} +function _fd(){} +function fgd(){} +function kgd(){} +function Mgd(){} +function Ahd(){} +function Ald(){} +function Tld(){} +function xkd(){} +function rmd(){} +function knd(){} +function Jod(){} +function JCd(){} +function Bpd(){} +function BFd(){} +function oFd(){} +function bqd(){} +function bvd(){} +function jvd(){} +function yud(){} +function Hxd(){} +function EBd(){} +function aDd(){} +function MGd(){} +function vHd(){} +function RHd(){} +function wNd(){} +function zNd(){} +function CNd(){} +function KNd(){} +function XNd(){} +function $Nd(){} +function HPd(){} +function lUd(){} +function XUd(){} +function DWd(){} +function GWd(){} +function JWd(){} +function MWd(){} +function PWd(){} +function SWd(){} +function VWd(){} +function YWd(){} +function _Wd(){} +function xYd(){} +function BYd(){} +function mZd(){} +function EZd(){} +function GZd(){} +function JZd(){} +function MZd(){} +function PZd(){} +function SZd(){} +function VZd(){} +function YZd(){} +function _Zd(){} +function c$d(){} +function f$d(){} +function i$d(){} +function l$d(){} +function o$d(){} +function r$d(){} +function u$d(){} +function x$d(){} +function A$d(){} +function D$d(){} +function G$d(){} +function J$d(){} +function M$d(){} +function P$d(){} +function S$d(){} +function V$d(){} +function Y$d(){} +function _$d(){} +function c_d(){} +function f_d(){} +function i_d(){} +function l_d(){} +function o_d(){} +function r_d(){} +function u_d(){} +function x_d(){} +function A_d(){} +function D_d(){} +function G_d(){} +function J_d(){} +function M_d(){} +function P_d(){} +function S_d(){} +function V_d(){} +function Y_d(){} +function h5d(){} +function U6d(){} +function U9d(){} +function _8d(){} +function fae(){} +function hae(){} +function kae(){} +function nae(){} +function qae(){} +function tae(){} +function wae(){} +function zae(){} +function Cae(){} +function Fae(){} +function Iae(){} +function Lae(){} +function Oae(){} +function Rae(){} +function Uae(){} +function Xae(){} +function $ae(){} +function bbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function ude(){} +function Vge(){} +function dhe(){} +function s_b(a){} +function jSd(a){} +function ol(){wb()} +function oPb(){nPb()} +function EPb(){CPb()} +function gFb(){fFb()} +function TRb(){SRb()} +function ySb(){wSb()} +function PSb(){OSb()} +function dTb(){bTb()} +function i4b(){b4b()} +function D2b(){x2b()} +function J6b(){D6b()} +function u9b(){q9b()} +function $9b(){I9b()} +function Umc(){Imc()} +function abc(){Vac()} +function ZCc(){VCc()} +function kCc(){hCc()} +function rCc(){oCc()} +function Tcc(){Occ()} +function xkc(){gkc()} +function xDc(){rDc()} +function iDc(){cDc()} +function kwc(){jwc()} +function tJc(){jJc()} +function dJc(){aJc()} +function Pyc(){Nyc()} +function VBc(){SBc()} +function CFc(){yFc()} +function CUc(){wUc()} +function lUc(){fUc()} +function sUc(){pUc()} +function IUc(){GUc()} +function IWc(){HWc()} +function _Wc(){ZWc()} +function fHc(){dHc()} +function f0c(){d0c()} +function B0c(){A0c()} +function L0c(){J0c()} +function LTc(){JTc()} +function sTc(){rTc()} +function KLc(){ILc()} +function wNc(){tNc()} +function PYc(){OYc()} +function nZc(){lZc()} +function q3c(){p3c()} +function Z7c(){X7c()} +function Z9c(){Y9c()} +function _ad(){Zad()} +function kdd(){idd()} +function $md(){Smd()} +function HGd(){tGd()} +function hLd(){NKd()} +function J6d(){Uge()} +function Mvb(a){uCb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function cj(a){this.a=a} +function ij(a){this.a=a} +function Dj(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function ah(a){this.a=a} +function lh(a){this.a=a} +function th(a){this.a=a} +function Ph(a){this.a=a} +function vi(a){this.a=a} +function Ci(a){this.a=a} +function Fk(a){this.a=a} +function Ln(a){this.a=a} +function ap(a){this.a=a} +function zp(a){this.a=a} +function Yp(a){this.a=a} +function qq(a){this.a=a} +function Dq(a){this.a=a} +function wr(a){this.a=a} +function Ir(a){this.b=a} +function sj(a){this.c=a} +function sw(a){this.a=a} +function fw(a){this.a=a} +function xw(a){this.a=a} +function Cw(a){this.a=a} +function Qw(a){this.a=a} +function Rw(a){this.a=a} +function Xw(a){this.a=a} +function Xv(a){this.a=a} +function Sv(a){this.a=a} +function eu(a){this.a=a} +function Zx(a){this.a=a} +function _x(a){this.a=a} +function xy(a){this.a=a} +function xB(a){this.a=a} +function HB(a){this.a=a} +function TB(a){this.a=a} +function fC(a){this.a=a} +function wB(){this.a=[]} +function MBb(a,b){a.a=b} +function w_b(a,b){a.a=b} +function x_b(a,b){a.b=b} +function YOb(a,b){a.b=b} +function $Ob(a,b){a.b=b} +function ZGb(a,b){a.j=b} +function qNb(a,b){a.g=b} +function rNb(a,b){a.i=b} +function dRb(a,b){a.c=b} +function eRb(a,b){a.d=b} +function z_b(a,b){a.d=b} +function y_b(a,b){a.c=b} +function __b(a,b){a.k=b} +function E0b(a,b){a.c=b} +function njc(a,b){a.c=b} +function mjc(a,b){a.a=b} +function dFc(a,b){a.a=b} +function eFc(a,b){a.f=b} +function nOc(a,b){a.a=b} +function oOc(a,b){a.b=b} +function pOc(a,b){a.d=b} +function qOc(a,b){a.i=b} +function rOc(a,b){a.o=b} +function sOc(a,b){a.r=b} +function $Pc(a,b){a.a=b} +function _Pc(a,b){a.b=b} +function DVc(a,b){a.e=b} +function EVc(a,b){a.f=b} +function FVc(a,b){a.g=b} +function SZc(a,b){a.e=b} +function TZc(a,b){a.f=b} +function c$c(a,b){a.f=b} +function bJd(a,b){a.n=b} +function A1d(a,b){a.a=b} +function J1d(a,b){a.a=b} +function B1d(a,b){a.c=b} +function K1d(a,b){a.c=b} +function L1d(a,b){a.d=b} +function M1d(a,b){a.e=b} +function N1d(a,b){a.g=b} +function d2d(a,b){a.a=b} +function e2d(a,b){a.c=b} +function f2d(a,b){a.d=b} +function g2d(a,b){a.e=b} +function h2d(a,b){a.f=b} +function i2d(a,b){a.j=b} +function Z8d(a,b){a.a=b} +function $8d(a,b){a.b=b} +function g9d(a,b){a.a=b} +function Cic(a){a.b=a.a} +function Dg(a){a.c=a.d.d} +function vib(a){this.d=a} +function eib(a){this.a=a} +function Pib(a){this.a=a} +function Vib(a){this.a=a} +function $ib(a){this.a=a} +function mcb(a){this.a=a} +function Mcb(a){this.a=a} +function Xcb(a){this.a=a} +function Ndb(a){this.a=a} +function _db(a){this.a=a} +function teb(a){this.a=a} +function Qeb(a){this.a=a} +function djb(a){this.a=a} +function Gjb(a){this.a=a} +function Njb(a){this.a=a} +function Bjb(a){this.b=a} +function lnb(a){this.b=a} +function Dnb(a){this.b=a} +function anb(a){this.a=a} +function Mob(a){this.a=a} +function Rob(a){this.a=a} +function iob(a){this.c=a} +function olb(a){this.c=a} +function qub(a){this.c=a} +function Tub(a){this.a=a} +function Vub(a){this.a=a} +function Xub(a){this.a=a} +function Zub(a){this.a=a} +function tpb(a){this.a=a} +function _pb(a){this.a=a} +function Wqb(a){this.a=a} +function nsb(a){this.a=a} +function Rxb(a){this.a=a} +function Txb(a){this.a=a} +function Xxb(a){this.a=a} +function bzb(a){this.a=a} +function tzb(a){this.a=a} +function vzb(a){this.a=a} +function xzb(a){this.a=a} +function Kzb(a){this.a=a} +function Ozb(a){this.a=a} +function iAb(a){this.a=a} +function kAb(a){this.a=a} +function mAb(a){this.a=a} +function BAb(a){this.a=a} +function hBb(a){this.a=a} +function jBb(a){this.a=a} +function nBb(a){this.a=a} +function TBb(a){this.a=a} +function XBb(a){this.a=a} +function QCb(a){this.a=a} +function WCb(a){this.a=a} +function _Cb(a){this.a=a} +function dEb(a){this.a=a} +function QGb(a){this.a=a} +function YGb(a){this.a=a} +function tKb(a){this.a=a} +function CLb(a){this.a=a} +function JMb(a){this.a=a} +function RNb(a){this.a=a} +function kQb(a){this.a=a} +function mQb(a){this.a=a} +function FQb(a){this.a=a} +function ETb(a){this.a=a} +function UTb(a){this.a=a} +function dUb(a){this.a=a} +function hUb(a){this.a=a} +function EZb(a){this.a=a} +function j$b(a){this.a=a} +function v$b(a){this.e=a} +function J0b(a){this.a=a} +function M0b(a){this.a=a} +function R0b(a){this.a=a} +function U0b(a){this.a=a} +function i2b(a){this.a=a} +function k2b(a){this.a=a} +function o2b(a){this.a=a} +function s2b(a){this.a=a} +function G2b(a){this.a=a} +function I2b(a){this.a=a} +function K2b(a){this.a=a} +function M2b(a){this.a=a} +function W3b(a){this.a=a} +function $3b(a){this.a=a} +function V4b(a){this.a=a} +function u5b(a){this.a=a} +function A7b(a){this.a=a} +function G7b(a){this.a=a} +function J7b(a){this.a=a} +function M7b(a){this.a=a} +function Mbc(a){this.a=a} +function Pbc(a){this.a=a} +function lac(a){this.a=a} +function nac(a){this.a=a} +function qcc(a){this.a=a} +function Gdc(a){this.a=a} +function $dc(a){this.a=a} +function cec(a){this.a=a} +function _ec(a){this.a=a} +function pfc(a){this.a=a} +function Bfc(a){this.a=a} +function Lfc(a){this.a=a} +function ygc(a){this.a=a} +function Dgc(a){this.a=a} +function shc(a){this.a=a} +function uhc(a){this.a=a} +function whc(a){this.a=a} +function Chc(a){this.a=a} +function Ehc(a){this.a=a} +function Ohc(a){this.a=a} +function Yhc(a){this.a=a} +function Tkc(a){this.a=a} +function Vkc(a){this.a=a} +function Olc(a){this.a=a} +function pnc(a){this.a=a} +function rnc(a){this.a=a} +function dpc(a){this.a=a} +function fpc(a){this.a=a} +function GCc(a){this.a=a} +function KCc(a){this.a=a} +function mDc(a){this.a=a} +function jEc(a){this.a=a} +function HEc(a){this.a=a} +function FEc(a){this.c=a} +function qoc(a){this.b=a} +function bFc(a){this.a=a} +function GFc(a){this.a=a} +function iGc(a){this.a=a} +function kGc(a){this.a=a} +function mGc(a){this.a=a} +function $Gc(a){this.a=a} +function hIc(a){this.a=a} +function lIc(a){this.a=a} +function pIc(a){this.a=a} +function tIc(a){this.a=a} +function xIc(a){this.a=a} +function zIc(a){this.a=a} +function CIc(a){this.a=a} +function LIc(a){this.a=a} +function CKc(a){this.a=a} +function IKc(a){this.a=a} +function MKc(a){this.a=a} +function $Kc(a){this.a=a} +function cLc(a){this.a=a} +function jLc(a){this.a=a} +function rLc(a){this.a=a} +function xLc(a){this.a=a} +function OMc(a){this.a=a} +function ZOc(a){this.a=a} +function ZRc(a){this.a=a} +function aSc(a){this.a=a} +function I$c(a){this.a=a} +function K$c(a){this.a=a} +function M$c(a){this.a=a} +function O$c(a){this.a=a} +function U$c(a){this.a=a} +function n1c(a){this.a=a} +function z1c(a){this.a=a} +function B1c(a){this.a=a} +function Q2c(a){this.a=a} +function U2c(a){this.a=a} +function z3c(a){this.a=a} +function med(a){this.a=a} +function Xed(a){this.a=a} +function _ed(a){this.a=a} +function Qfd(a){this.a=a} +function Bgd(a){this.a=a} +function $gd(a){this.a=a} +function lrd(a){this.a=a} +function urd(a){this.a=a} +function vrd(a){this.a=a} +function wrd(a){this.a=a} +function xrd(a){this.a=a} +function yrd(a){this.a=a} +function zrd(a){this.a=a} +function Ard(a){this.a=a} +function Brd(a){this.a=a} +function Crd(a){this.a=a} +function Ird(a){this.a=a} +function Krd(a){this.a=a} +function Lrd(a){this.a=a} +function Mrd(a){this.a=a} +function Nrd(a){this.a=a} +function Prd(a){this.a=a} +function Srd(a){this.a=a} +function Yrd(a){this.a=a} +function Zrd(a){this.a=a} +function _rd(a){this.a=a} +function asd(a){this.a=a} +function bsd(a){this.a=a} +function csd(a){this.a=a} +function dsd(a){this.a=a} +function msd(a){this.a=a} +function osd(a){this.a=a} +function qsd(a){this.a=a} +function ssd(a){this.a=a} +function Wsd(a){this.a=a} +function Lsd(a){this.b=a} +function thd(a){this.f=a} +function qtd(a){this.a=a} +function yBd(a){this.a=a} +function GBd(a){this.a=a} +function MBd(a){this.a=a} +function SBd(a){this.a=a} +function iCd(a){this.a=a} +function YMd(a){this.a=a} +function GNd(a){this.a=a} +function EPd(a){this.a=a} +function EQd(a){this.a=a} +function NTd(a){this.a=a} +function qOd(a){this.b=a} +function lVd(a){this.c=a} +function VVd(a){this.e=a} +function iYd(a){this.a=a} +function RYd(a){this.a=a} +function ZYd(a){this.a=a} +function z0d(a){this.a=a} +function O0d(a){this.a=a} +function s0d(a){this.d=a} +function W5d(a){this.a=a} +function cge(a){this.a=a} +function xfe(a){this.e=a} +function Tfd(){this.a=0} +function jkb(){Vjb(this)} +function Rkb(){Ckb(this)} +function Lqb(){Uhb(this)} +function lEb(){kEb(this)} +function A_b(){s_b(this)} +function UQd(){this.c=FQd} +function v6d(a,b){b.Wb(a)} +function moc(a,b){a.b+=b} +function yXb(a){a.b=new Ji} +function vbb(a){return a.e} +function DB(a){return a.a} +function LB(a){return a.a} +function ZB(a){return a.a} +function lC(a){return a.a} +function EC(a){return a.a} +function wC(){return null} +function SB(){return null} +function hcb(){mvd();ovd()} +function zJb(a){a.b.tf(a.e)} +function j5b(a,b){a.b=b-a.b} +function g5b(a,b){a.a=b-a.a} +function PXc(a,b){b.ad(a.a)} +function plc(a,b){G0b(b,a)} +function hp(a,b,c){a.Od(c,b)} +function As(a,b){a.e=b;b.b=a} +function Zl(a){Ql();this.a=a} +function jq(a){Ql();this.a=a} +function sq(a){Ql();this.a=a} +function Fq(a){im();this.a=a} +function Sz(a){Rz();Qz.be(a)} +function gz(){Xy.call(this)} +function xcb(){Xy.call(this)} +function pcb(){gz.call(this)} +function tcb(){gz.call(this)} +function Bdb(){gz.call(this)} +function Vdb(){gz.call(this)} +function Ydb(){gz.call(this)} +function Geb(){gz.call(this)} +function bgb(){gz.call(this)} +function Apb(){gz.call(this)} +function Jpb(){gz.call(this)} +function utb(){gz.call(this)} +function x2c(){gz.call(this)} +function rQd(){this.a=this} +function MPd(){this.Bb|=256} +function tTb(){this.b=new mt} +function fA(){fA=ccb;new Lqb} +function rcb(){pcb.call(this)} +function dCb(a,b){a.length=b} +function Tvb(a,b){Ekb(a.a,b)} +function sKb(a,b){UHb(a.c,b)} +function SMc(a,b){Qqb(a.b,b)} +function vBd(a,b){uAd(a.a,b)} +function wBd(a,b){vAd(a.a,b)} +function GLd(a,b){Uhd(a.e,b)} +function d7d(a){D2d(a.c,a.b)} +function mj(a,b){a.kc().Nb(b)} +function Odb(a){this.a=Tdb(a)} +function Tqb(){this.a=new Lqb} +function gyb(){this.a=new Lqb} +function Wvb(){this.a=new Rkb} +function KFb(){this.a=new Rkb} +function PFb(){this.a=new Rkb} +function FFb(){this.a=new yFb} +function pGb(){this.a=new MFb} +function ZQb(){this.a=new MQb} +function Gxb(){this.a=new Pwb} +function jUb(){this.a=new PTb} +function sDb(){this.a=new oDb} +function zDb(){this.a=new tDb} +function CWb(){this.a=new Rkb} +function HXb(){this.a=new Rkb} +function nYb(){this.a=new Rkb} +function BYb(){this.a=new Rkb} +function fLb(){this.d=new Rkb} +function vYb(){this.a=new Tqb} +function a2b(){this.a=new Lqb} +function wZb(){this.b=new Lqb} +function TCc(){this.b=new Rkb} +function zJc(){this.e=new Rkb} +function uMc(){this.d=new Rkb} +function wdc(){this.a=new xkc} +function vKc(){Rkb.call(this)} +function twb(){Wvb.call(this)} +function oHb(){$Gb.call(this)} +function LXb(){HXb.call(this)} +function L_b(){H_b.call(this)} +function H_b(){A_b.call(this)} +function p0b(){A_b.call(this)} +function s0b(){p0b.call(this)} +function WMc(){VMc.call(this)} +function bNc(){VMc.call(this)} +function EPc(){CPc.call(this)} +function JPc(){CPc.call(this)} +function OPc(){CPc.call(this)} +function w1c(){s1c.call(this)} +function s7c(){Psb.call(this)} +function apd(){Ald.call(this)} +function ppd(){Ald.call(this)} +function lDd(){YCd.call(this)} +function NDd(){YCd.call(this)} +function mFd(){Lqb.call(this)} +function vFd(){Lqb.call(this)} +function GFd(){Lqb.call(this)} +function KPd(){Tqb.call(this)} +function OJd(){hJd.call(this)} +function aQd(){MPd.call(this)} +function SSd(){FId.call(this)} +function rUd(){FId.call(this)} +function oUd(){Lqb.call(this)} +function NYd(){Lqb.call(this)} +function cZd(){Lqb.call(this)} +function R8d(){MGd.call(this)} +function o9d(){MGd.call(this)} +function i9d(){R8d.call(this)} +function hee(){ude.call(this)} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function ph(a){lh.call(this,a)} +function Sh(a){Wc.call(this,a)} +function oi(a){Sh.call(this,a)} +function Ii(a){Wc.call(this,a)} +function Zdd(){this.a=new Psb} +function CPc(){this.a=new Tqb} +function s1c(){this.a=new Lqb} +function QSc(){this.a=new Rkb} +function D2c(){this.j=new Rkb} +function QXc(){this.a=new UXc} +function e_c(){this.a=new d_c} +function YCd(){this.a=new aDd} +function _k(){_k=ccb;$k=new al} +function Lk(){Lk=ccb;Kk=new Mk} +function wb(){wb=ccb;vb=new xb} +function hs(){hs=ccb;gs=new is} +function rs(a){Sh.call(this,a)} +function Gp(a){Sh.call(this,a)} +function xp(a){Lo.call(this,a)} +function Ep(a){Lo.call(this,a)} +function Tp(a){Wn.call(this,a)} +function wx(a){un.call(this,a)} +function ov(a){dv.call(this,a)} +function Mv(a){Br.call(this,a)} +function Ov(a){Br.call(this,a)} +function Lw(a){Br.call(this,a)} +function hz(a){Yy.call(this,a)} +function MB(a){hz.call(this,a)} +function eC(){fC.call(this,{})} +function Ftb(a){Atb();this.a=a} +function zwb(a){a.b=null;a.c=0} +function Vy(a,b){a.e=b;Sy(a,b)} +function LVb(a,b){a.a=b;NVb(a)} +function lIb(a,b,c){a.a[b.g]=c} +function vfd(a,b,c){Dfd(c,a,b)} +function Odc(a,b){rjc(b.i,a.n)} +function Wyc(a,b){Xyc(a).td(b)} +function ERb(a,b){return a*a/b} +function Xr(a,b){return a.g-b.g} +function tC(a){return new TB(a)} +function vC(a){return new yC(a)} +function ocb(a){hz.call(this,a)} +function qcb(a){hz.call(this,a)} +function ucb(a){hz.call(this,a)} +function vcb(a){Yy.call(this,a)} +function fGc(a){LFc();this.a=a} +function c0d(a){kzd();this.a=a} +function bhd(a){Rgd();this.f=a} +function dhd(a){Rgd();this.f=a} +function Cdb(a){hz.call(this,a)} +function Wdb(a){hz.call(this,a)} +function Zdb(a){hz.call(this,a)} +function Feb(a){hz.call(this,a)} +function Heb(a){hz.call(this,a)} +function Ccb(a){return uCb(a),a} +function Edb(a){return uCb(a),a} +function Gdb(a){return uCb(a),a} +function jfb(a){return uCb(a),a} +function tfb(a){return uCb(a),a} +function akb(a){return a.b==a.c} +function Hwb(a){return !!a&&a.b} +function pIb(a){return !!a&&a.k} +function qIb(a){return !!a&&a.j} +function amb(a){uCb(a);this.a=a} +function wVb(a){qVb(a);return a} +function Blb(a){Glb(a,a.length)} +function cgb(a){hz.call(this,a)} +function cqd(a){hz.call(this,a)} +function n8d(a){hz.call(this,a)} +function y2c(a){hz.call(this,a)} +function z2c(a){hz.call(this,a)} +function mde(a){hz.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ji(){Ki.call(this,12,3)} +function Kz(){Kz=ccb;Jz=new Nz} +function jz(){jz=ccb;iz=new nb} +function KA(){KA=ccb;JA=new MA} +function OB(){OB=ccb;NB=new PB} +function jc(){throw vbb(new bgb)} +function zh(){throw vbb(new bgb)} +function Pi(){throw vbb(new bgb)} +function Pj(){throw vbb(new bgb)} +function Qj(){throw vbb(new bgb)} +function Ym(){throw vbb(new bgb)} +function Gb(){this.a=GD(Qb(She))} +function oy(a){Ql();this.a=Qb(a)} +function Bs(a,b){a.Td(b);b.Sd(a)} +function iw(a,b){a.a.ec().Mc(b)} +function CYb(a,b,c){a.c.lf(b,c)} +function scb(a){qcb.call(this,a)} +function Oeb(a){Wdb.call(this,a)} +function Hfb(){mcb.call(this,'')} +function Ifb(){mcb.call(this,'')} +function Ufb(){mcb.call(this,'')} +function Vfb(){mcb.call(this,'')} +function Xfb(a){qcb.call(this,a)} +function zob(a){lnb.call(this,a)} +function Yob(a){Inb.call(this,a)} +function Gob(a){zob.call(this,a)} +function Mk(){Fk.call(this,null)} +function al(){Fk.call(this,null)} +function Az(){Az=ccb;!!(Rz(),Qz)} +function wrb(){wrb=ccb;vrb=yrb()} +function Mtb(a){return a.a?a.b:0} +function Vtb(a){return a.a?a.b:0} +function Lcb(a,b){return a.a-b.a} +function Wcb(a,b){return a.a-b.a} +function Peb(a,b){return a.a-b.a} +function eCb(a,b){return PC(a,b)} +function GC(a,b){return rdb(a,b)} +function _B(b,a){return a in b.a} +function _Db(a,b){a.f=b;return a} +function ZDb(a,b){a.b=b;return a} +function $Db(a,b){a.c=b;return a} +function aEb(a,b){a.g=b;return a} +function HGb(a,b){a.a=b;return a} +function IGb(a,b){a.f=b;return a} +function JGb(a,b){a.k=b;return a} +function dLb(a,b){a.a=b;return a} +function eLb(a,b){a.e=b;return a} +function zVb(a,b){a.e=b;return a} +function AVb(a,b){a.f=b;return a} +function KOb(a,b){a.b=true;a.d=b} +function DHb(a,b){a.b=new g7c(b)} +function uvb(a,b,c){b.td(a.a[c])} +function zvb(a,b,c){b.we(a.a[c])} +function wJc(a,b){return a.b-b.b} +function kOc(a,b){return a.g-b.g} +function WQc(a,b){return a.s-b.s} +function Lic(a,b){return a?0:b-1} +function SFc(a,b){return a?0:b-1} +function RFc(a,b){return a?b-1:0} +function M2c(a,b){return b.Yf(a)} +function M3c(a,b){a.b=b;return a} +function L3c(a,b){a.a=b;return a} +function N3c(a,b){a.c=b;return a} +function O3c(a,b){a.d=b;return a} +function P3c(a,b){a.e=b;return a} +function Q3c(a,b){a.f=b;return a} +function b4c(a,b){a.a=b;return a} +function c4c(a,b){a.b=b;return a} +function d4c(a,b){a.c=b;return a} +function z5c(a,b){a.c=b;return a} +function y5c(a,b){a.b=b;return a} +function A5c(a,b){a.d=b;return a} +function B5c(a,b){a.e=b;return a} +function C5c(a,b){a.f=b;return a} +function D5c(a,b){a.g=b;return a} +function E5c(a,b){a.a=b;return a} +function F5c(a,b){a.i=b;return a} +function G5c(a,b){a.j=b;return a} +function Vdd(a,b){a.k=b;return a} +function Wdd(a,b){a.j=b;return a} +function ykc(a,b){gkc();F0b(b,a)} +function T$c(a,b,c){R$c(a.a,b,c)} +function RGc(a){cEc.call(this,a)} +function iHc(a){cEc.call(this,a)} +function t7c(a){Qsb.call(this,a)} +function aPb(a){_Ob.call(this,a)} +function Ixd(a){zud.call(this,a)} +function dCd(a){ZBd.call(this,a)} +function fCd(a){ZBd.call(this,a)} +function p_b(){q_b.call(this,'')} +function d7c(){this.a=0;this.b=0} +function aPc(){this.b=0;this.a=0} +function NJd(a,b){a.b=0;DId(a,b)} +function X1d(a,b){a.c=b;a.b=true} +function Oc(a,b){return a.c._b(b)} +function gdb(a){return a.e&&a.e()} +function Vd(a){return !a?null:a.d} +function sn(a,b){return Gv(a.b,b)} +function Fv(a){return !a?null:a.g} +function Kv(a){return !a?null:a.i} +function hdb(a){fdb(a);return a.o} +function Fhd(){Fhd=ccb;Ehd=ond()} +function Hhd(){Hhd=ccb;Ghd=Cod()} +function LFd(){LFd=ccb;KFd=qZd()} +function p8d(){p8d=ccb;o8d=Y9d()} +function r8d(){r8d=ccb;q8d=dae()} +function mvd(){mvd=ccb;lvd=n4c()} +function Srb(){throw vbb(new bgb)} +function enb(){throw vbb(new bgb)} +function fnb(){throw vbb(new bgb)} +function gnb(){throw vbb(new bgb)} +function jnb(){throw vbb(new bgb)} +function Cnb(){throw vbb(new bgb)} +function Uqb(a){this.a=new Mqb(a)} +function tgb(a){lgb();ngb(this,a)} +function Hxb(a){this.a=new Qwb(a)} +function _ub(a,b){while(a.ye(b));} +function Sub(a,b){while(a.sd(b));} +function Bfb(a,b){a.a+=b;return a} +function Cfb(a,b){a.a+=b;return a} +function Ffb(a,b){a.a+=b;return a} +function Lfb(a,b){a.a+=b;return a} +function WAb(a){Tzb(a);return a.a} +function Wsb(a){return a.b!=a.d.c} +function pD(a){return a.l|a.m<<22} +function aIc(a,b){return a.d[b.p]} +function h2c(a,b){return c2c(a,b)} +function cCb(a,b,c){a.splice(b,c)} +function WHb(a){a.c?VHb(a):XHb(a)} +function jVc(a){this.a=0;this.b=a} +function ZUc(){this.a=new L2c(K$)} +function tRc(){this.b=new L2c(h$)} +function Q$c(){this.b=new L2c(J_)} +function d_c(){this.b=new L2c(J_)} +function OCd(){throw vbb(new bgb)} +function PCd(){throw vbb(new bgb)} +function QCd(){throw vbb(new bgb)} +function RCd(){throw vbb(new bgb)} +function SCd(){throw vbb(new bgb)} +function TCd(){throw vbb(new bgb)} +function UCd(){throw vbb(new bgb)} +function VCd(){throw vbb(new bgb)} +function WCd(){throw vbb(new bgb)} +function XCd(){throw vbb(new bgb)} +function ahe(){throw vbb(new utb)} +function bhe(){throw vbb(new utb)} +function Rge(a){this.a=new ege(a)} +function ege(a){dge(this,a,Vee())} +function Fhe(a){return !a||Ehe(a)} +function dde(a){return $ce[a]!=-1} +function Iz(){xz!=0&&(xz=0);zz=-1} +function Ybb(){Wbb==null&&(Wbb=[])} +function ONd(a,b){Rxd(ZKd(a.a),b)} +function TNd(a,b){Rxd(ZKd(a.a),b)} +function Yf(a,b){zf.call(this,a,b)} +function $f(a,b){Yf.call(this,a,b)} +function Hf(a,b){this.b=a;this.c=b} +function rk(a,b){this.b=a;this.a=b} +function ek(a,b){this.a=a;this.b=b} +function gk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function yk(a,b){this.a=a;this.b=b} +function Ak(a,b){this.a=a;this.b=b} +function Fj(a,b){this.a=a;this.b=b} +function _j(a,b){this.a=a;this.b=b} +function dr(a,b){this.a=a;this.b=b} +function zr(a,b){this.b=a;this.a=b} +function So(a,b){this.b=a;this.a=b} +function qp(a,b){this.b=a;this.a=b} +function $q(a,b){this.b=a;this.a=b} +function $r(a,b){this.f=a;this.g=b} +function ne(a,b){this.e=a;this.d=b} +function Wo(a,b){this.g=a;this.i=b} +function bu(a,b){this.a=a;this.b=b} +function qu(a,b){this.a=a;this.f=b} +function qv(a,b){this.b=a;this.c=b} +function ox(a,b){this.a=a;this.b=b} +function Px(a,b){this.a=a;this.b=b} +function mC(a,b){this.a=a;this.b=b} +function Wc(a){Lb(a.dc());this.c=a} +function rf(a){this.b=BD(Qb(a),83)} +function Zv(a){this.a=BD(Qb(a),83)} +function dv(a){this.a=BD(Qb(a),15)} +function $u(a){this.a=BD(Qb(a),15)} +function Br(a){this.b=BD(Qb(a),47)} +function eB(){this.q=new $wnd.Date} +function Zfb(){Zfb=ccb;Yfb=new jcb} +function Emb(){Emb=ccb;Dmb=new Fmb} +function Vhb(a){return a.f.c+a.g.c} +function hnb(a,b){return a.b.Hc(b)} +function inb(a,b){return a.b.Ic(b)} +function knb(a,b){return a.b.Qc(b)} +function Dob(a,b){return a.b.Hc(b)} +function dob(a,b){return a.c.uc(b)} +function Rqb(a,b){return a.a._b(b)} +function fob(a,b){return pb(a.c,b)} +function jt(a,b){return Mhb(a.b,b)} +function Lp(a,b){return a>b&&b<Iie} +function Ryb(a,b){return a.Gc(b),a} +function Syb(a,b){return ye(a,b),a} +function sC(a){return GB(),a?FB:EB} +function Mqb(a){Whb.call(this,a,0)} +function Pwb(){Qwb.call(this,null)} +function yAb(){Vzb.call(this,null)} +function Gqb(a){this.c=a;Dqb(this)} +function Psb(){Csb(this);Osb(this)} +function MAb(a,b){Tzb(a);a.a.Nb(b)} +function Myb(a,b){a.Gc(b);return a} +function qDb(a,b){a.a.f=b;return a} +function wDb(a,b){a.a.d=b;return a} +function xDb(a,b){a.a.g=b;return a} +function yDb(a,b){a.a.j=b;return a} +function BFb(a,b){a.a.a=b;return a} +function CFb(a,b){a.a.d=b;return a} +function DFb(a,b){a.a.e=b;return a} +function EFb(a,b){a.a.g=b;return a} +function oGb(a,b){a.a.f=b;return a} +function TGb(a){a.b=false;return a} +function Ltb(){Ltb=ccb;Ktb=new Otb} +function Utb(){Utb=ccb;Ttb=new Wtb} +function $xb(){$xb=ccb;Zxb=new byb} +function $Yb(){$Yb=ccb;ZYb=new dZb} +function cPb(){cPb=ccb;bPb=new dPb} +function EAb(){EAb=ccb;DAb=new PBb} +function a$b(){a$b=ccb;_Zb=new P$b} +function FDb(){FDb=ccb;EDb=new GDb} +function xUb(){xUb=ccb;wUb=new DUb} +function x2b(){x2b=ccb;w2b=new d7c} +function iVb(){iVb=ccb;hVb=new jVb} +function nVb(){nVb=ccb;mVb=new OVb} +function LWb(){LWb=ccb;KWb=new QWb} +function b4b(){b4b=ccb;a4b=new l4b} +function q9b(){q9b=ccb;p9b=new w9b} +function qgc(){qgc=ccb;pgc=new dic} +function Imc(){Imc=ccb;Hmc=new Wmc} +function GUc(){GUc=ccb;FUc=new j3c} +function i_c(){i_c=ccb;h_c=new k_c} +function s_c(){s_c=ccb;r_c=new t_c} +function R0c(){R0c=ccb;Q0c=new T0c} +function Vyc(){Vyc=ccb;Uyc=new Ved} +function DCc(){vCc();this.c=new Ji} +function k_c(){$r.call(this,Une,0)} +function r4c(a,b){Xrb(a.c.b,b.c,b)} +function s4c(a,b){Xrb(a.c.c,b.b,b)} +function B3c(a,b,c){Shb(a.d,b.f,c)} +function kKb(a,b,c,d){jKb(a,d,b,c)} +function E3b(a,b,c,d){J3b(d,a,b,c)} +function e9b(a,b,c,d){f9b(d,a,b,c)} +function g3c(a,b){a.a=b.g;return a} +function DQd(a,b){return qA(a.a,b)} +function nQd(a){return a.b?a.b:a.a} +function $Oc(a){return (a.c+a.a)/2} +function Pgd(){Pgd=ccb;Ogd=new Ahd} +function AFd(){AFd=ccb;zFd=new BFd} +function tFd(){tFd=ccb;sFd=new vFd} +function EFd(){EFd=ccb;DFd=new GFd} +function yFd(){yFd=ccb;xFd=new oUd} +function JFd(){JFd=ccb;IFd=new cZd} +function nRd(){nRd=ccb;mRd=new u4d} +function LRd(){LRd=ccb;KRd=new y4d} +function g5d(){g5d=ccb;f5d=new h5d} +function Q6d(){Q6d=ccb;P6d=new U6d} +function pEd(){pEd=ccb;oEd=new Lqb} +function tZd(){tZd=ccb;rZd=new Rkb} +function Xge(){Xge=ccb;Wge=new dhe} +function Hz(a){$wnd.clearTimeout(a)} +function jw(a){this.a=BD(Qb(a),224)} +function Lv(a){return BD(a,42).cd()} +function sib(a){return a.b<a.d.gc()} +function Lpb(a,b){return tqb(a.a,b)} +function Dbb(a,b){return ybb(a,b)>0} +function Gbb(a,b){return ybb(a,b)<0} +function Crb(a,b){return a.a.get(b)} +function icb(b,a){return a.split(b)} +function Vrb(a,b){return Mhb(a.e,b)} +function Nvb(a){return uCb(a),false} +function Rub(a){Kub.call(this,a,21)} +function wcb(a,b){Zy.call(this,a,b)} +function mxb(a,b){$r.call(this,a,b)} +function Gyb(a,b){$r.call(this,a,b)} +function zx(a){yx();Wn.call(this,a)} +function zlb(a,b){Dlb(a,a.length,b)} +function Alb(a,b){Flb(a,a.length,b)} +function ABb(a,b,c){b.ud(a.a.Ge(c))} +function uBb(a,b,c){b.we(a.a.Fe(c))} +function GBb(a,b,c){b.td(a.a.Kb(c))} +function Zq(a,b,c){a.Mb(c)&&b.td(c)} +function aCb(a,b,c){a.splice(b,0,c)} +function lDb(a,b){return uqb(a.e,b)} +function pjb(a,b){this.d=a;this.e=b} +function kqb(a,b){this.b=a;this.a=b} +function VBb(a,b){this.b=a;this.a=b} +function BEb(a,b){this.b=a;this.a=b} +function sBb(a,b){this.a=a;this.b=b} +function yBb(a,b){this.a=a;this.b=b} +function EBb(a,b){this.a=a;this.b=b} +function KBb(a,b){this.a=a;this.b=b} +function aDb(a,b){this.a=a;this.b=b} +function tMb(a,b){this.b=a;this.a=b} +function oOb(a,b){this.b=a;this.a=b} +function SOb(a,b){$r.call(this,a,b)} +function SMb(a,b){$r.call(this,a,b)} +function NEb(a,b){$r.call(this,a,b)} +function VEb(a,b){$r.call(this,a,b)} +function sFb(a,b){$r.call(this,a,b)} +function hHb(a,b){$r.call(this,a,b)} +function OHb(a,b){$r.call(this,a,b)} +function FIb(a,b){$r.call(this,a,b)} +function wLb(a,b){$r.call(this,a,b)} +function YRb(a,b){$r.call(this,a,b)} +function zTb(a,b){$r.call(this,a,b)} +function rUb(a,b){$r.call(this,a,b)} +function oWb(a,b){$r.call(this,a,b)} +function SXb(a,b){$r.call(this,a,b)} +function k0b(a,b){$r.call(this,a,b)} +function z5b(a,b){$r.call(this,a,b)} +function T8b(a,b){$r.call(this,a,b)} +function ibc(a,b){$r.call(this,a,b)} +function Cec(a,b){this.a=a;this.b=b} +function rfc(a,b){this.a=a;this.b=b} +function Rfc(a,b){this.a=a;this.b=b} +function Tfc(a,b){this.a=a;this.b=b} +function bgc(a,b){this.a=a;this.b=b} +function ngc(a,b){this.a=a;this.b=b} +function Qhc(a,b){this.a=a;this.b=b} +function $hc(a,b){this.a=a;this.b=b} +function Z0b(a,b){this.a=a;this.b=b} +function ZVb(a,b){this.b=a;this.a=b} +function Dfc(a,b){this.b=a;this.a=b} +function dgc(a,b){this.b=a;this.a=b} +function Bmc(a,b){this.b=a;this.a=b} +function cWb(a,b){this.c=a;this.d=b} +function I$b(a,b){this.e=a;this.d=b} +function Unc(a,b){this.a=a;this.b=b} +function Oic(a,b){this.b=b;this.c=a} +function Bjc(a,b){$r.call(this,a,b)} +function Yjc(a,b){$r.call(this,a,b)} +function Gkc(a,b){$r.call(this,a,b)} +function Bpc(a,b){$r.call(this,a,b)} +function Jpc(a,b){$r.call(this,a,b)} +function Tpc(a,b){$r.call(this,a,b)} +function cqc(a,b){$r.call(this,a,b)} +function oqc(a,b){$r.call(this,a,b)} +function yqc(a,b){$r.call(this,a,b)} +function Hqc(a,b){$r.call(this,a,b)} +function Uqc(a,b){$r.call(this,a,b)} +function arc(a,b){$r.call(this,a,b)} +function mrc(a,b){$r.call(this,a,b)} +function zrc(a,b){$r.call(this,a,b)} +function Prc(a,b){$r.call(this,a,b)} +function Yrc(a,b){$r.call(this,a,b)} +function fsc(a,b){$r.call(this,a,b)} +function nsc(a,b){$r.call(this,a,b)} +function nzc(a,b){$r.call(this,a,b)} +function zzc(a,b){$r.call(this,a,b)} +function Kzc(a,b){$r.call(this,a,b)} +function Xzc(a,b){$r.call(this,a,b)} +function Dtc(a,b){$r.call(this,a,b)} +function lAc(a,b){$r.call(this,a,b)} +function uAc(a,b){$r.call(this,a,b)} +function CAc(a,b){$r.call(this,a,b)} +function LAc(a,b){$r.call(this,a,b)} +function UAc(a,b){$r.call(this,a,b)} +function aBc(a,b){$r.call(this,a,b)} +function uBc(a,b){$r.call(this,a,b)} +function DBc(a,b){$r.call(this,a,b)} +function MBc(a,b){$r.call(this,a,b)} +function sGc(a,b){$r.call(this,a,b)} +function VIc(a,b){$r.call(this,a,b)} +function EIc(a,b){this.b=a;this.a=b} +function qKc(a,b){this.a=a;this.b=b} +function GKc(a,b){this.a=a;this.b=b} +function lLc(a,b){this.a=a;this.b=b} +function mMc(a,b){this.a=a;this.b=b} +function fMc(a,b){$r.call(this,a,b)} +function ZLc(a,b){$r.call(this,a,b)} +function ZMc(a,b){this.b=a;this.d=b} +function IOc(a,b){$r.call(this,a,b)} +function GQc(a,b){$r.call(this,a,b)} +function PQc(a,b){this.a=a;this.b=b} +function RQc(a,b){this.a=a;this.b=b} +function ARc(a,b){$r.call(this,a,b)} +function rSc(a,b){$r.call(this,a,b)} +function TTc(a,b){$r.call(this,a,b)} +function _Tc(a,b){$r.call(this,a,b)} +function RUc(a,b){$r.call(this,a,b)} +function uVc(a,b){$r.call(this,a,b)} +function hWc(a,b){$r.call(this,a,b)} +function rWc(a,b){$r.call(this,a,b)} +function kXc(a,b){$r.call(this,a,b)} +function uXc(a,b){$r.call(this,a,b)} +function AYc(a,b){$r.call(this,a,b)} +function l$c(a,b){$r.call(this,a,b)} +function Z$c(a,b){$r.call(this,a,b)} +function D_c(a,b){$r.call(this,a,b)} +function O_c(a,b){$r.call(this,a,b)} +function c1c(a,b){$r.call(this,a,b)} +function cVb(a,b){return uqb(a.c,b)} +function nnc(a,b){return uqb(b.b,a)} +function x1c(a,b){return -a.b.Je(b)} +function D3c(a,b){return uqb(a.g,b)} +function O5c(a,b){$r.call(this,a,b)} +function a6c(a,b){$r.call(this,a,b)} +function m2c(a,b){this.a=a;this.b=b} +function W2c(a,b){this.a=a;this.b=b} +function f7c(a,b){this.a=a;this.b=b} +function G7c(a,b){$r.call(this,a,b)} +function j8c(a,b){$r.call(this,a,b)} +function iad(a,b){$r.call(this,a,b)} +function rad(a,b){$r.call(this,a,b)} +function Bad(a,b){$r.call(this,a,b)} +function Nad(a,b){$r.call(this,a,b)} +function ibd(a,b){$r.call(this,a,b)} +function tbd(a,b){$r.call(this,a,b)} +function Ibd(a,b){$r.call(this,a,b)} +function Ubd(a,b){$r.call(this,a,b)} +function gcd(a,b){$r.call(this,a,b)} +function scd(a,b){$r.call(this,a,b)} +function Ycd(a,b){$r.call(this,a,b)} +function udd(a,b){$r.call(this,a,b)} +function Jdd(a,b){$r.call(this,a,b)} +function Eed(a,b){$r.call(this,a,b)} +function bfd(a,b){this.a=a;this.b=b} +function dfd(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function Kfd(a,b){this.a=a;this.b=b} +function Mfd(a,b){this.a=a;this.b=b} +function Ofd(a,b){this.a=a;this.b=b} +function vgd(a,b){this.a=a;this.b=b} +function qgd(a,b){$r.call(this,a,b)} +function jrd(a,b){this.a=a;this.b=b} +function krd(a,b){this.a=a;this.b=b} +function mrd(a,b){this.a=a;this.b=b} +function nrd(a,b){this.a=a;this.b=b} +function qrd(a,b){this.a=a;this.b=b} +function rrd(a,b){this.a=a;this.b=b} +function srd(a,b){this.b=a;this.a=b} +function trd(a,b){this.b=a;this.a=b} +function Drd(a,b){this.b=a;this.a=b} +function Frd(a,b){this.b=a;this.a=b} +function Hrd(a,b){this.a=a;this.b=b} +function Jrd(a,b){this.a=a;this.b=b} +function Ord(a,b){Xqd(a.a,BD(b,56))} +function BIc(a,b){gIc(a.a,BD(b,11))} +function fIc(a,b){FHc();return b!=a} +function Arb(){wrb();return new vrb} +function CMc(){wMc();this.b=new Tqb} +function NNc(){FNc();this.a=new Tqb} +function eCc(){ZBc();aCc.call(this)} +function Dsd(a,b){$r.call(this,a,b)} +function Urd(a,b){this.a=a;this.b=b} +function Wrd(a,b){this.a=a;this.b=b} +function kGd(a,b){this.a=a;this.b=b} +function nGd(a,b){this.a=a;this.b=b} +function bUd(a,b){this.a=a;this.b=b} +function zVd(a,b){this.a=a;this.b=b} +function C1d(a,b){this.d=a;this.b=b} +function MLd(a,b){this.d=a;this.e=b} +function Wud(a,b){this.f=a;this.c=b} +function f7d(a,b){this.b=a;this.c=b} +function _zd(a,b){this.i=a;this.g=b} +function Y1d(a,b){this.e=a;this.a=b} +function c8d(a,b){this.a=a;this.b=b} +function $Id(a,b){a.i=null;_Id(a,b)} +function ivd(a,b){!!a&&Rhb(cvd,a,b)} +function hCd(a,b){return qAd(a.a,b)} +function e7d(a){return R2d(a.c,a.b)} +function Wd(a){return !a?null:a.dd()} +function PD(a){return a==null?null:a} +function KD(a){return typeof a===Khe} +function LD(a){return typeof a===Lhe} +function ND(a){return typeof a===Mhe} +function Em(a,b){return a.Hd().Xb(b)} +function Kq(a,b){return hr(a.Kc(),b)} +function Bbb(a,b){return ybb(a,b)==0} +function Ebb(a,b){return ybb(a,b)>=0} +function Kbb(a,b){return ybb(a,b)!=0} +function Jdb(a){return ''+(uCb(a),a)} +function pfb(a,b){return a.substr(b)} +function cg(a){ag(a);return a.d.gc()} +function oVb(a){pVb(a,a.c);return a} +function RD(a){CCb(a==null);return a} +function Dfb(a,b){a.a+=''+b;return a} +function Efb(a,b){a.a+=''+b;return a} +function Nfb(a,b){a.a+=''+b;return a} +function Pfb(a,b){a.a+=''+b;return a} +function Qfb(a,b){a.a+=''+b;return a} +function Mfb(a,b){return a.a+=''+b,a} +function Esb(a,b){Gsb(a,b,a.a,a.a.a)} +function Fsb(a,b){Gsb(a,b,a.c.b,a.c)} +function Mqd(a,b,c){Rpd(b,kqd(a,c))} +function Nqd(a,b,c){Rpd(b,kqd(a,c))} +function Dhe(a,b){Hhe(new Fyd(a),b)} +function cB(a,b){a.q.setTime(Sbb(b))} +function fvb(a,b){bvb.call(this,a,b)} +function jvb(a,b){bvb.call(this,a,b)} +function nvb(a,b){bvb.call(this,a,b)} +function Nqb(a){Uhb(this);Ld(this,a)} +function wmb(a){tCb(a,0);return null} +function X6c(a){a.a=0;a.b=0;return a} +function f3c(a,b){a.a=b.g+1;return a} +function PJc(a,b){return a.j[b.p]==2} +function _Pb(a){return VPb(BD(a,79))} +function yJb(){yJb=ccb;xJb=as(wJb())} +function Y8b(){Y8b=ccb;X8b=as(W8b())} +function mt(){this.b=new Mqb(Cv(12))} +function Otb(){this.b=0;this.a=false} +function Wtb(){this.b=0;this.a=false} +function sl(a){this.a=a;ol.call(this)} +function vl(a){this.a=a;ol.call(this)} +function Nsd(a,b){Msd.call(this,a,b)} +function $zd(a,b){Cyd.call(this,a,b)} +function nNd(a,b){_zd.call(this,a,b)} +function s4d(a,b){p4d.call(this,a,b)} +function w4d(a,b){qRd.call(this,a,b)} +function rEd(a,b){pEd();Rhb(oEd,a,b)} +function lcb(a,b){return qfb(a.a,0,b)} +function ww(a,b){return a.a.a.a.cc(b)} +function mb(a,b){return PD(a)===PD(b)} +function Mdb(a,b){return Kdb(a.a,b.a)} +function $db(a,b){return beb(a.a,b.a)} +function seb(a,b){return ueb(a.a,b.a)} +function hfb(a,b){return a.indexOf(b)} +function Ny(a,b){return a==b?0:a?1:-1} +function kB(a){return a<10?'0'+a:''+a} +function Mq(a){return Qb(a),new sl(a)} +function SC(a){return TC(a.l,a.m,a.h)} +function Hdb(a){return QD((uCb(a),a))} +function Idb(a){return QD((uCb(a),a))} +function NIb(a,b){return beb(a.g,b.g)} +function Fbb(a){return typeof a===Lhe} +function mWb(a){return a==hWb||a==kWb} +function nWb(a){return a==hWb||a==iWb} +function G1b(a){return Jkb(a.b.b,a,0)} +function lrb(a){this.a=Arb();this.b=a} +function Frb(a){this.a=Arb();this.b=a} +function swb(a,b){Ekb(a.a,b);return b} +function Z1c(a,b){Ekb(a.c,b);return a} +function E2c(a,b){d3c(a.a,b);return a} +function _gc(a,b){Hgc();return b.a+=a} +function bhc(a,b){Hgc();return b.a+=a} +function ahc(a,b){Hgc();return b.c+=a} +function Nlb(a,b){Klb(a,0,a.length,b)} +function zsb(){Wqb.call(this,new $rb)} +function I_b(){B_b.call(this,0,0,0,0)} +function I6c(){J6c.call(this,0,0,0,0)} +function g7c(a){this.a=a.a;this.b=a.b} +function fad(a){return a==aad||a==bad} +function gad(a){return a==dad||a==_9c} +function Jzc(a){return a==Fzc||a==Ezc} +function fcd(a){return a!=bcd&&a!=ccd} +function oid(a){return a.Lg()&&a.Mg()} +function Gfd(a){return Kkd(BD(a,118))} +function k3c(a){return d3c(new j3c,a)} +function y2d(a,b){return new p4d(b,a)} +function z2d(a,b){return new p4d(b,a)} +function ukd(a,b,c){vkd(a,b);wkd(a,c)} +function _kd(a,b,c){cld(a,b);ald(a,c)} +function bld(a,b,c){dld(a,b);eld(a,c)} +function gmd(a,b,c){hmd(a,b);imd(a,c)} +function nmd(a,b,c){omd(a,b);pmd(a,c)} +function iKd(a,b){$Jd(a,b);_Jd(a,a.D)} +function _ud(a){Wud.call(this,a,true)} +function Xg(a,b,c){Vg.call(this,a,b,c)} +function Ygb(a){Hgb();Zgb.call(this,a)} +function rxb(){mxb.call(this,'Head',1)} +function wxb(){mxb.call(this,'Tail',3)} +function Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)} +function Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)} +function MGb(a){Hkb(a.xf(),new QGb(a))} +function xtb(a){return a!=null?tb(a):0} +function b2b(a,b){return ntd(b,mpd(a))} +function c2b(a,b){return ntd(b,mpd(a))} +function dAb(a,b){return a[a.length]=b} +function gAb(a,b){return a[a.length]=b} +function Vq(a){return lr(a.b.Kc(),a.a)} +function dqd(a,b){return _o(qo(a.d),b)} +function eqd(a,b){return _o(qo(a.g),b)} +function fqd(a,b){return _o(qo(a.j),b)} +function Osd(a,b){Msd.call(this,a.b,b)} +function q0b(a){B_b.call(this,a,a,a,a)} +function HOb(a){a.b&&LOb(a);return a.a} +function IOb(a){a.b&&LOb(a);return a.c} +function uyb(a,b){if(lyb){return}a.b=b} +function lzd(a,b,c){NC(a,b,c);return c} +function mBc(a,b,c){NC(a.c[b.g],b.g,c)} +function _Hd(a,b,c){BD(a.c,69).Xh(b,c)} +function wfd(a,b,c){bld(c,c.i+a,c.j+b)} +function UOd(a,b){wtd(VKd(a.a),XOd(b))} +function bTd(a,b){wtd(QSd(a.a),eTd(b))} +function Lge(a){wfe();xfe.call(this,a)} +function CAd(a){return a==null?0:tb(a)} +function fNc(){fNc=ccb;eNc=new Rpb(v1)} +function h0d(){h0d=ccb;new i0d;new Rkb} +function i0d(){new Lqb;new Lqb;new Lqb} +function GA(){GA=ccb;fA();FA=new Lqb} +function Iy(){Iy=ccb;$wnd.Math.log(2)} +function UVd(){UVd=ccb;TVd=(AFd(),zFd)} +function _ge(){throw vbb(new cgb(Cxe))} +function ohe(){throw vbb(new cgb(Cxe))} +function che(){throw vbb(new cgb(Dxe))} +function rhe(){throw vbb(new cgb(Dxe))} +function Mg(a){this.a=a;Gg.call(this,a)} +function up(a){this.a=a;rf.call(this,a)} +function Bp(a){this.a=a;rf.call(this,a)} +function Okb(a,b){Mlb(a.c,a.c.length,b)} +function llb(a){return a.a<a.c.c.length} +function Eqb(a){return a.a<a.c.a.length} +function Ntb(a,b){return a.a?a.b:b.De()} +function beb(a,b){return a<b?-1:a>b?1:0} +function Deb(a,b){return ybb(a,b)>0?a:b} +function TC(a,b,c){return {l:a,m:b,h:c}} +function Ctb(a,b){a.a!=null&&BIc(b,a.a)} +function Csb(a){a.a=new jtb;a.c=new jtb} +function hDb(a){this.b=a;this.a=new Rkb} +function dOb(a){this.b=new pOb;this.a=a} +function q_b(a){n_b.call(this);this.a=a} +function txb(){mxb.call(this,'Range',2)} +function bUb(){ZTb();this.a=new L2c(zP)} +function Bh(a,b){Qb(b);Ah(a).Jc(new Vw)} +function fKc(a,b){FJc();return b.n.b+=a} +function Tgc(a,b,c){return Rhb(a.g,c,b)} +function LJc(a,b,c){return Rhb(a.k,c,b)} +function r1c(a,b){return Rhb(a.a,b.a,b)} +function jBc(a,b,c){return hBc(b,c,a.c)} +function E6c(a){return new f7c(a.c,a.d)} +function F6c(a){return new f7c(a.c,a.d)} +function R6c(a){return new f7c(a.a,a.b)} +function CQd(a,b){return hA(a.a,b,null)} +function fec(a){QZb(a,null);RZb(a,null)} +function AOc(a){BOc(a,null);COc(a,null)} +function u4d(){qRd.call(this,null,null)} +function y4d(){RRd.call(this,null,null)} +function a7d(a){this.a=a;Lqb.call(this)} +function Pp(a){this.b=(mmb(),new iob(a))} +function Py(a){a.j=KC(VI,nie,310,0,0,1)} +function oAd(a,b,c){a.c.Vc(b,BD(c,133))} +function GAd(a,b,c){a.c.ji(b,BD(c,133))} +function JLd(a,b){Uxd(a);a.Gc(BD(b,15))} +function b7d(a,b){return t2d(a.c,a.b,b)} +function Bv(a,b){return new Qv(a.Kc(),b)} +function Lq(a,b){return rr(a.Kc(),b)!=-1} +function Sqb(a,b){return a.a.Bc(b)!=null} +function pr(a){return a.Ob()?a.Pb():null} +function yfb(a){return zfb(a,0,a.length)} +function JD(a,b){return a!=null&&AD(a,b)} +function $A(a,b){a.q.setHours(b);YA(a,b)} +function Yrb(a,b){if(a.c){jsb(b);isb(b)}} +function nk(a,b,c){BD(a.Kb(c),164).Nb(b)} +function RJc(a,b,c){SJc(a,b,c);return c} +function Eub(a,b,c){a.a=b^1502;a.b=c^kke} +function xHb(a,b,c){return a.a[b.g][c.g]} +function REc(a,b){return a.a[b.c.p][b.p]} +function aEc(a,b){return a.e[b.c.p][b.p]} +function tEc(a,b){return a.c[b.c.p][b.p]} +function OJc(a,b){return a.j[b.p]=aKc(b)} +function k5c(a,b){return cfb(a.f,b.tg())} +function Isd(a,b){return cfb(a.b,b.tg())} +function Sfd(a,b){return a.a<Kcb(b)?-1:1} +function ZDc(a,b,c){return c?b!=0:b!=a-1} +function _6c(a,b,c){a.a=b;a.b=c;return a} +function Y6c(a,b){a.a*=b;a.b*=b;return a} +function mud(a,b,c){NC(a.g,b,c);return c} +function CHb(a,b,c,d){NC(a.a[b.g],c.g,d)} +function EQb(a,b){O6c(b,a.a.a.a,a.a.a.b)} +function Ozd(a){a.a=BD(Ajd(a.b.a,4),126)} +function Wzd(a){a.a=BD(Ajd(a.b.a,4),126)} +function otd(a){ytb(a,hue);Rld(a,gtd(a))} +function Atb(){Atb=ccb;ztb=new Ftb(null)} +function Ivb(){Ivb=ccb;Ivb();Hvb=new Ovb} +function FId(){this.Bb|=256;this.Bb|=512} +function Fyd(a){this.i=a;this.f=this.i.j} +function xMd(a,b,c){pMd.call(this,a,b,c)} +function BMd(a,b,c){xMd.call(this,a,b,c)} +function K4d(a,b,c){xMd.call(this,a,b,c)} +function N4d(a,b,c){BMd.call(this,a,b,c)} +function X4d(a,b,c){pMd.call(this,a,b,c)} +function _4d(a,b,c){pMd.call(this,a,b,c)} +function C4d(a,b,c){k2d.call(this,a,b,c)} +function G4d(a,b,c){k2d.call(this,a,b,c)} +function I4d(a,b,c){C4d.call(this,a,b,c)} +function c5d(a,b,c){X4d.call(this,a,b,c)} +function zf(a,b){this.a=a;rf.call(this,b)} +function aj(a,b){this.a=a;pc.call(this,b)} +function kj(a,b){this.a=a;pc.call(this,b)} +function Jj(a,b){this.a=a;pc.call(this,b)} +function Rj(a){this.a=a;sj.call(this,a.d)} +function she(a){this.c=a;this.a=this.c.a} +function xl(a,b){this.a=b;pc.call(this,a)} +function Qo(a,b){this.a=b;Lo.call(this,a)} +function op(a,b){this.a=a;Lo.call(this,b)} +function rj(a,b){return Rl(Xm(a.c)).Xb(b)} +function Eb(a,b){return Db(a,new Ufb,b).a} +function ur(a,b){Qb(b);return new Gr(a,b)} +function Gr(a,b){this.a=b;Br.call(this,a)} +function Hs(a){this.b=a;this.a=this.b.a.e} +function Eg(a){a.b.Qb();--a.d.f.d;bg(a.d)} +function Uk(a){Fk.call(this,BD(Qb(a),35))} +function il(a){Fk.call(this,BD(Qb(a),35))} +function is(){$r.call(this,'INSTANCE',0)} +function Lb(a){if(!a){throw vbb(new Vdb)}} +function Ub(a){if(!a){throw vbb(new Ydb)}} +function ot(a){if(!a){throw vbb(new utb)}} +function I6d(){I6d=ccb;g5d();H6d=new J6d} +function Bcb(){Bcb=ccb;zcb=false;Acb=true} +function Jfb(a){mcb.call(this,(uCb(a),a))} +function Wfb(a){mcb.call(this,(uCb(a),a))} +function Inb(a){lnb.call(this,a);this.a=a} +function Xnb(a){Dnb.call(this,a);this.a=a} +function Zob(a){zob.call(this,a);this.a=a} +function Xy(){Py(this);Ry(this);this._d()} +function Qv(a,b){this.a=b;Br.call(this,a)} +function au(a,b){return new xu(a.a,a.b,b)} +function kfb(a,b){return a.lastIndexOf(b)} +function ifb(a,b,c){return a.indexOf(b,c)} +function xfb(a){return a==null?Xhe:fcb(a)} +function nz(a){return a==null?null:a.name} +function Etb(a){return a.a!=null?a.a:null} +function or(a){return Wsb(a.a)?nr(a):null} +function Fxb(a,b){return Jwb(a.a,b)!=null} +function uqb(a,b){return !!b&&a.b[b.g]==b} +function FCb(a){return a.$H||(a.$H=++ECb)} +function aD(a){return a.l+a.m*Hje+a.h*Ije} +function pDb(a,b){Ekb(b.a,a.a);return a.a} +function vDb(a,b){Ekb(b.b,a.a);return a.a} +function nGb(a,b){Ekb(b.a,a.a);return a.a} +function Btb(a){sCb(a.a!=null);return a.a} +function Asb(a){Wqb.call(this,new _rb(a))} +function GUb(a,b){HUb.call(this,a,b,null)} +function cxb(a){this.a=a;Bjb.call(this,a)} +function CKb(){CKb=ccb;BKb=new Msd(tle,0)} +function NFb(a,b){++a.b;return Ekb(a.a,b)} +function OFb(a,b){++a.b;return Lkb(a.a,b)} +function n6b(a,b){return Kdb(a.n.a,b.n.a)} +function WKb(a,b){return Kdb(a.c.d,b.c.d)} +function gLb(a,b){return Kdb(a.c.c,b.c.c)} +function zXb(a,b){return BD(Qc(a.b,b),15)} +function s7b(a,b){return a.n.b=(uCb(b),b)} +function t7b(a,b){return a.n.b=(uCb(b),b)} +function a1b(a){return llb(a.a)||llb(a.b)} +function fBc(a,b,c){return gBc(a,b,c,a.b)} +function iBc(a,b,c){return gBc(a,b,c,a.c)} +function i3c(a,b,c){BD(B2c(a,b),21).Fc(c)} +function xBd(a,b,c){vAd(a.a,c);uAd(a.a,b)} +function qRd(a,b){nRd();this.a=a;this.b=b} +function RRd(a,b){LRd();this.b=a;this.c=b} +function hhd(a,b){Rgd();this.f=b;this.d=a} +function qc(a,b){Sb(b,a);this.d=a;this.c=b} +function n5b(a){var b;b=a.a;a.a=a.b;a.b=b} +function chc(a){Hgc();return !!a&&!a.dc()} +function Afe(a){++vfe;return new lge(3,a)} +function jm(a,b){return new Vp(a,a.gc(),b)} +function ns(a){hs();return es((qs(),ps),a)} +function Oyd(a){this.d=a;Fyd.call(this,a)} +function $yd(a){this.c=a;Fyd.call(this,a)} +function bzd(a){this.c=a;Oyd.call(this,a)} +function sgc(){qgc();this.b=new ygc(this)} +function Pu(a){Xj(a,Jie);return new Skb(a)} +function Vz(a){Rz();return parseInt(a)||-1} +function qfb(a,b,c){return a.substr(b,c-b)} +function gfb(a,b,c){return ifb(a,wfb(b),c)} +function Pkb(a){return ZBb(a.c,a.c.length)} +function Yr(a){return a.f!=null?a.f:''+a.g} +function Zr(a){return a.f!=null?a.f:''+a.g} +function Hsb(a){sCb(a.b!=0);return a.a.a.c} +function Isb(a){sCb(a.b!=0);return a.c.b.c} +function Cmd(a){JD(a,150)&&BD(a,150).Gh()} +function Wwb(a){return a.b=BD(tib(a.a),42)} +function Ptb(a){Ltb();this.b=a;this.a=true} +function Xtb(a){Utb();this.b=a;this.a=true} +function Trb(a){a.d=new ksb(a);a.e=new Lqb} +function mkb(a){if(!a){throw vbb(new Apb)}} +function lCb(a){if(!a){throw vbb(new Vdb)}} +function yCb(a){if(!a){throw vbb(new Ydb)}} +function qCb(a){if(!a){throw vbb(new tcb)}} +function sCb(a){if(!a){throw vbb(new utb)}} +function ksb(a){lsb.call(this,a,null,null)} +function dPb(){$r.call(this,'POLYOMINO',0)} +function Cg(a,b,c,d){qg.call(this,a,b,c,d)} +function zkc(a,b){gkc();return Rc(a,b.e,b)} +function azc(a,b,c){Vyc();return c.qg(a,b)} +function wNb(a,b){return !!a.q&&Mhb(a.q,b)} +function JRb(a,b){return a>0?b*b/a:b*b*100} +function CRb(a,b){return a>0?b/(a*a):b*100} +function G2c(a,b,c){return Ekb(b,I2c(a,c))} +function t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)} +function St(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function O6c(a,b,c){a.a+=b;a.b+=c;return a} +function Z6c(a,b,c){a.a*=b;a.b*=c;return a} +function b7c(a,b,c){a.a-=b;a.b-=c;return a} +function a7c(a,b){a.a=b.a;a.b=b.b;return a} +function V6c(a){a.a=-a.a;a.b=-a.b;return a} +function Dic(a){this.c=a;this.a=1;this.b=1} +function xed(a){this.c=a;dld(a,0);eld(a,0)} +function u7c(a){Psb.call(this);n7c(this,a)} +function AXb(a){xXb();yXb(this);this.mf(a)} +function GRd(a,b){nRd();qRd.call(this,a,b)} +function dSd(a,b){LRd();RRd.call(this,a,b)} +function hSd(a,b){LRd();RRd.call(this,a,b)} +function fSd(a,b){LRd();dSd.call(this,a,b)} +function sId(a,b,c){dId.call(this,a,b,c,2)} +function zXd(a,b){UVd();nXd.call(this,a,b)} +function BXd(a,b){UVd();zXd.call(this,a,b)} +function DXd(a,b){UVd();zXd.call(this,a,b)} +function FXd(a,b){UVd();DXd.call(this,a,b)} +function PXd(a,b){UVd();nXd.call(this,a,b)} +function RXd(a,b){UVd();PXd.call(this,a,b)} +function XXd(a,b){UVd();nXd.call(this,a,b)} +function pAd(a,b){return a.c.Fc(BD(b,133))} +function w1d(a,b,c){return V1d(p1d(a,b),c)} +function N2d(a,b,c){return b.Qk(a.e,a.c,c)} +function P2d(a,b,c){return b.Rk(a.e,a.c,c)} +function a3d(a,b){return xid(a.e,BD(b,49))} +function aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))} +function TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))} +function ypb(a,b){b.$modCount=a.$modCount} +function MUc(){MUc=ccb;LUc=new Lsd('root')} +function LCd(){LCd=ccb;KCd=new lDd;new NDd} +function KVc(){this.a=new Hp;this.b=new Hp} +function FUd(){hJd.call(this);this.Bb|=Tje} +function t_c(){$r.call(this,'GROW_TREE',0)} +function C9d(a){return a==null?null:cde(a)} +function G9d(a){return a==null?null:jde(a)} +function J9d(a){return a==null?null:fcb(a)} +function K9d(a){return a==null?null:fcb(a)} +function fdb(a){if(a.o!=null){return}vdb(a)} +function DD(a){CCb(a==null||KD(a));return a} +function ED(a){CCb(a==null||LD(a));return a} +function GD(a){CCb(a==null||ND(a));return a} +function gB(a){this.q=new $wnd.Date(Sbb(a))} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Sf(a,b){this.a=a;Mf.call(this,a,b)} +function Hg(a,b){this.d=a;Dg(this);this.b=b} +function bAb(a,b){Vzb.call(this,a);this.a=b} +function vAb(a,b){Vzb.call(this,a);this.a=b} +function sNb(a){pNb.call(this,0,0);this.f=a} +function Vg(a,b,c){dg.call(this,a,b,c,null)} +function Yg(a,b,c){dg.call(this,a,b,c,null)} +function Pxb(a,b,c){return a.ue(b,c)<=0?c:b} +function Qxb(a,b,c){return a.ue(b,c)<=0?b:c} +function g4c(a,b){return BD(Wrb(a.b,b),149)} +function i4c(a,b){return BD(Wrb(a.c,b),229)} +function wic(a){return BD(Ikb(a.a,a.b),287)} +function B6c(a){return new f7c(a.c,a.d+a.a)} +function eLc(a){return FJc(),Jzc(BD(a,197))} +function $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))} +function fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)} +function qyb(a,b){if(lyb){return}Ekb(a.a,b)} +function F2b(a,b){x2b();return f_b(b.d.i,a)} +function _9b(a,b){I9b();return new gac(b,a)} +function _Hb(a,b){ytb(b,lle);a.f=b;return a} +function Kld(a,b,c){c=_hd(a,b,3,c);return c} +function bmd(a,b,c){c=_hd(a,b,6,c);return c} +function kpd(a,b,c){c=_hd(a,b,9,c);return c} +function Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)} +function Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))} +function bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)} +function c7d(a,b,c){return C2d(a.c,a.b,b,c)} +function DAd(a,b){return (b&Ohe)%a.d.length} +function Msd(a,b){Lsd.call(this,a);this.a=b} +function uVd(a,b){lVd.call(this,a);this.a=b} +function sYd(a,b){lVd.call(this,a);this.a=b} +function zyd(a,b){this.c=a;zud.call(this,b)} +function YOd(a,b){this.a=a;qOd.call(this,b)} +function fTd(a,b){this.a=a;qOd.call(this,b)} +function Xp(a){this.a=(Xj(a,Jie),new Skb(a))} +function cq(a){this.a=(Xj(a,Jie),new Skb(a))} +function LA(a){!a.a&&(a.a=new VA);return a.a} +function XMb(a){if(a>8){return 0}return a+1} +function Ecb(a,b){Bcb();return a==b?0:a?1:-1} +function Opb(a,b,c){return Npb(a,BD(b,22),c)} +function Bz(a,b,c){return a.apply(b,c);var d} +function Sfb(a,b,c){a.a+=zfb(b,0,c);return a} +function ijb(a,b){var c;c=a.e;a.e=b;return c} +function trb(a,b){var c;c=a[hke];c.call(a,b)} +function urb(a,b){var c;c=a[hke];c.call(a,b)} +function Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1} +function Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d} +function _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)} +function _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))} +function Bxb(a,b){return Vd(Cwb(a.a,b,true))} +function Cxb(a,b){return Vd(Dwb(a.a,b,true))} +function _Bb(a,b){return eCb(new Array(b),a)} +function HD(a){return String.fromCharCode(a)} +function mz(a){return a==null?null:a.message} +function gRb(){this.a=new Rkb;this.b=new Rkb} +function iTb(){this.a=new MQb;this.b=new tTb} +function tDb(){this.b=new d7c;this.c=new Rkb} +function _Qb(){this.d=new d7c;this.e=new d7c} +function n_b(){this.n=new d7c;this.o=new d7c} +function $Gb(){this.n=new p0b;this.i=new I6c} +function sec(){this.a=new Umc;this.b=new mnc} +function NIc(){this.a=new Rkb;this.d=new Rkb} +function LDc(){this.b=new Tqb;this.a=new Tqb} +function hSc(){this.b=new Lqb;this.a=new Lqb} +function HRc(){this.b=new tRc;this.a=new hRc} +function aHb(){$Gb.call(this);this.a=new d7c} +function Ywb(a){Zwb.call(this,a,(lxb(),hxb))} +function J_b(a,b,c,d){B_b.call(this,a,b,c,d)} +function sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))} +function tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))} +function Tod(a,b,c){c=_hd(a,b,11,c);return c} +function P6c(a,b){a.a+=b.a;a.b+=b.b;return a} +function c7c(a,b){a.a-=b.a;a.b-=b.b;return a} +function u7b(a,b){return a.n.a=(uCb(b),b)+10} +function v7b(a,b){return a.n.a=(uCb(b),b)+10} +function dLd(a,b){return b==a||pud(UKd(b),a)} +function PYd(a,b){return Rhb(a.a,b,'')==null} +function E2b(a,b){x2b();return !f_b(b.d.i,a)} +function rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)} +function h1d(a,b){var c;c=b.Hh(a.a);return c} +function Cyd(a,b){qcb.call(this,gve+a+mue+b)} +function gUd(a,b,c,d){cUd.call(this,a,b,c,d)} +function Q4d(a,b,c,d){cUd.call(this,a,b,c,d)} +function U4d(a,b,c,d){Q4d.call(this,a,b,c,d)} +function n5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function p5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function v5d(a,b,c,d){i5d.call(this,a,b,c,d)} +function t5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function A5d(a,b,c,d){p5d.call(this,a,b,c,d)} +function y5d(a,b,c,d){v5d.call(this,a,b,c,d)} +function D5d(a,b,c,d){A5d.call(this,a,b,c,d)} +function d6d(a,b,c,d){Y5d.call(this,a,b,c,d)} +function Vp(a,b,c){this.a=a;qc.call(this,b,c)} +function tk(a,b,c){this.c=b;this.b=c;this.a=a} +function ik(a,b,c){return a.d=BD(b.Kb(c),164)} +function j6d(a,b){return a.Aj().Nh().Kh(a,b)} +function h6d(a,b){return a.Aj().Nh().Ih(a,b)} +function Fdb(a,b){return uCb(a),PD(a)===PD(b)} +function dfb(a,b){return uCb(a),PD(a)===PD(b)} +function Dxb(a,b){return Vd(Cwb(a.a,b,false))} +function Exb(a,b){return Vd(Dwb(a.a,b,false))} +function vBb(a,b){return a.b.sd(new yBb(a,b))} +function BBb(a,b){return a.b.sd(new EBb(a,b))} +function HBb(a,b){return a.b.sd(new KBb(a,b))} +function lfb(a,b,c){return a.lastIndexOf(b,c)} +function uTb(a,b,c){return Kdb(a[b.b],a[c.b])} +function RTb(a,b){return yNb(b,(Nyc(),Cwc),a)} +function fmc(a,b){return beb(b.a.d.p,a.a.d.p)} +function emc(a,b){return beb(a.a.d.p,b.a.d.p)} +function _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)} +function S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)} +function Vxd(a){return a<100?null:new Ixd(a)} +function ecd(a){return a==Zbd||a==_bd||a==$bd} +function zAd(a,b){return JD(b,15)&&Btd(a.c,b)} +function vyb(a,b){if(lyb){return}!!b&&(a.d=b)} +function ujb(a,b){var c;c=b;return !!Awb(a,c)} +function czd(a,b){this.c=a;Pyd.call(this,a,b)} +function fBb(a){this.c=a;nvb.call(this,rie,0)} +function Avb(a,b){Bvb.call(this,a,a.length,b)} +function aId(a,b,c){return BD(a.c,69).lk(b,c)} +function bId(a,b,c){return BD(a.c,69).mk(b,c)} +function O2d(a,b,c){return N2d(a,BD(b,332),c)} +function Q2d(a,b,c){return P2d(a,BD(b,332),c)} +function i3d(a,b,c){return h3d(a,BD(b,332),c)} +function k3d(a,b,c){return j3d(a,BD(b,332),c)} +function tn(a,b){return b==null?null:Hv(a.b,b)} +function Kcb(a){return LD(a)?(uCb(a),a):a.ke()} +function Ldb(a){return !isNaN(a)&&!isFinite(a)} +function Wn(a){Ql();this.a=(mmb(),new zob(a))} +function dIc(a){FHc();this.d=a;this.a=new jkb} +function xqb(a,b,c){this.a=a;this.b=b;this.c=c} +function Nrb(a,b,c){this.a=a;this.b=b;this.c=c} +function $sb(a,b,c){this.d=a;this.b=c;this.a=b} +function Qsb(a){Csb(this);Osb(this);ye(this,a)} +function Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())} +function Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null} +function iyb(a){this.a=a;Zfb();Cbb(Date.now())} +function JCb(){JCb=ccb;GCb=new nb;ICb=new nb} +function ntb(){ntb=ccb;ltb=new otb;mtb=new qtb} +function kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)} +function tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)} +function $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)} +function Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))} +function pxb(a){lxb();return es((zxb(),yxb),a)} +function Hyb(a){Fyb();return es((Kyb(),Jyb),a)} +function OEb(a){MEb();return es((REb(),QEb),a)} +function WEb(a){UEb();return es((ZEb(),YEb),a)} +function tFb(a){rFb();return es((wFb(),vFb),a)} +function iHb(a){gHb();return es((lHb(),kHb),a)} +function PHb(a){NHb();return es((SHb(),RHb),a)} +function GIb(a){EIb();return es((JIb(),IIb),a)} +function vJb(a){qJb();return es((yJb(),xJb),a)} +function xLb(a){vLb();return es((ALb(),zLb),a)} +function TMb(a){RMb();return es((WMb(),VMb),a)} +function TOb(a){ROb();return es((WOb(),VOb),a)} +function ePb(a){cPb();return es((hPb(),gPb),a)} +function ZRb(a){XRb();return es((aSb(),_Rb),a)} +function ATb(a){yTb();return es((DTb(),CTb),a)} +function sUb(a){qUb();return es((vUb(),uUb),a)} +function rWb(a){lWb();return es((uWb(),tWb),a)} +function TXb(a){RXb();return es((WXb(),VXb),a)} +function Mb(a,b){if(!a){throw vbb(new Wdb(b))}} +function l0b(a){j0b();return es((o0b(),n0b),a)} +function r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)} +function mKb(a,b,c){this.b=a;this.c=b;this.a=c} +function BZb(a,b,c){this.b=a;this.a=b;this.c=c} +function TNb(a,b,c){this.a=a;this.b=b;this.c=c} +function uOb(a,b,c){this.a=a;this.b=b;this.c=c} +function S3b(a,b,c){this.a=a;this.b=b;this.c=c} +function Z6b(a,b,c){this.a=a;this.b=b;this.c=c} +function n9b(a,b,c){this.b=a;this.a=b;this.c=c} +function x$b(a,b,c){this.e=b;this.b=a;this.d=c} +function $Ab(a,b,c){EAb();a.a.Od(b,c);return b} +function LGb(a){var b;b=new KGb;b.e=a;return b} +function iLb(a){var b;b=new fLb;b.b=a;return b} +function D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b} +function Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc} +function jbc(a){gbc();return es((mbc(),lbc),a)} +function Cjc(a){Ajc();return es((Fjc(),Ejc),a)} +function Clc(a){Alc();return es((Flc(),Elc),a)} +function Cpc(a){Apc();return es((Fpc(),Epc),a)} +function Kpc(a){Ipc();return es((Npc(),Mpc),a)} +function Wpc(a){Rpc();return es((Zpc(),Ypc),a)} +function $jc(a){Xjc();return es((bkc(),akc),a)} +function Hkc(a){Fkc();return es((Kkc(),Jkc),a)} +function dqc(a){bqc();return es((gqc(),fqc),a)} +function rqc(a){mqc();return es((uqc(),tqc),a)} +function zqc(a){xqc();return es((Cqc(),Bqc),a)} +function Iqc(a){Gqc();return es((Lqc(),Kqc),a)} +function Vqc(a){Sqc();return es((Yqc(),Xqc),a)} +function brc(a){_qc();return es((erc(),drc),a)} +function nrc(a){lrc();return es((qrc(),prc),a)} +function Arc(a){yrc();return es((Drc(),Crc),a)} +function Qrc(a){Orc();return es((Trc(),Src),a)} +function Zrc(a){Xrc();return es((asc(),_rc),a)} +function gsc(a){esc();return es((jsc(),isc),a)} +function osc(a){msc();return es((rsc(),qsc),a)} +function Etc(a){Ctc();return es((Htc(),Gtc),a)} +function qzc(a){lzc();return es((tzc(),szc),a)} +function Azc(a){xzc();return es((Dzc(),Czc),a)} +function Mzc(a){Izc();return es((Pzc(),Ozc),a)} +function MAc(a){KAc();return es((PAc(),OAc),a)} +function mAc(a){kAc();return es((pAc(),oAc),a)} +function vAc(a){tAc();return es((yAc(),xAc),a)} +function DAc(a){BAc();return es((GAc(),FAc),a)} +function VAc(a){TAc();return es((YAc(),XAc),a)} +function $zc(a){Vzc();return es((bAc(),aAc),a)} +function bBc(a){_Ac();return es((eBc(),dBc),a)} +function vBc(a){tBc();return es((yBc(),xBc),a)} +function EBc(a){CBc();return es((HBc(),GBc),a)} +function NBc(a){LBc();return es((QBc(),PBc),a)} +function tGc(a){rGc();return es((wGc(),vGc),a)} +function WIc(a){UIc();return es((ZIc(),YIc),a)} +function $Lc(a){YLc();return es((bMc(),aMc),a)} +function gMc(a){eMc();return es((jMc(),iMc),a)} +function JOc(a){HOc();return es((MOc(),LOc),a)} +function HQc(a){FQc();return es((KQc(),JQc),a)} +function DRc(a){yRc();return es((GRc(),FRc),a)} +function tSc(a){qSc();return es((wSc(),vSc),a)} +function UTc(a){STc();return es((XTc(),WTc),a)} +function UUc(a){PUc();return es((XUc(),WUc),a)} +function aUc(a){$Tc();return es((dUc(),cUc),a)} +function wVc(a){tVc();return es((zVc(),yVc),a)} +function iWc(a){fWc();return es((lWc(),kWc),a)} +function sWc(a){pWc();return es((vWc(),uWc),a)} +function lXc(a){iXc();return es((oXc(),nXc),a)} +function vXc(a){sXc();return es((yXc(),xXc),a)} +function BYc(a){zYc();return es((EYc(),DYc),a)} +function m$c(a){k$c();return es((p$c(),o$c),a)} +function $$c(a){Y$c();return es((b_c(),a_c),a)} +function n_c(a){i_c();return es((q_c(),p_c),a)} +function w_c(a){s_c();return es((z_c(),y_c),a)} +function E_c(a){C_c();return es((H_c(),G_c),a)} +function P_c(a){N_c();return es((S_c(),R_c),a)} +function W0c(a){R0c();return es((Z0c(),Y0c),a)} +function f1c(a){a1c();return es((i1c(),h1c),a)} +function P5c(a){N5c();return es((S5c(),R5c),a)} +function b6c(a){_5c();return es((e6c(),d6c),a)} +function H7c(a){F7c();return es((K7c(),J7c),a)} +function k8c(a){i8c();return es((n8c(),m8c),a)} +function V8b(a){S8b();return es((Y8b(),X8b),a)} +function A5b(a){y5b();return es((D5b(),C5b),a)} +function jad(a){ead();return es((mad(),lad),a)} +function sad(a){qad();return es((vad(),uad),a)} +function Cad(a){Aad();return es((Fad(),Ead),a)} +function Oad(a){Mad();return es((Rad(),Qad),a)} +function jbd(a){hbd();return es((mbd(),lbd),a)} +function ubd(a){rbd();return es((xbd(),wbd),a)} +function Kbd(a){Hbd();return es((Nbd(),Mbd),a)} +function Vbd(a){Tbd();return es((Ybd(),Xbd),a)} +function hcd(a){dcd();return es((kcd(),jcd),a)} +function vcd(a){rcd();return es((ycd(),xcd),a)} +function vdd(a){tdd();return es((ydd(),xdd),a)} +function Kdd(a){Idd();return es((Ndd(),Mdd),a)} +function $cd(a){Ucd();return es((cdd(),bdd),a)} +function Fed(a){Ded();return es((Ied(),Hed),a)} +function rgd(a){pgd();return es((ugd(),tgd),a)} +function Esd(a){Csd();return es((Hsd(),Gsd),a)} +function Yoc(a,b){return (uCb(a),a)+(uCb(b),b)} +function NNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function SNd(a,b){Zfb();return wtd(ZKd(a.a),b)} +function bPc(a,b){this.c=a;this.a=b;this.b=b-a} +function nYc(a,b,c){this.a=a;this.b=b;this.c=c} +function L1c(a,b,c){this.a=a;this.b=b;this.c=c} +function T1c(a,b,c){this.a=a;this.b=b;this.c=c} +function Rrd(a,b,c){this.a=a;this.b=b;this.c=c} +function zCd(a,b,c){this.a=a;this.b=b;this.c=c} +function IVd(a,b,c){this.e=a;this.a=b;this.c=c} +function kWd(a,b,c){UVd();cWd.call(this,a,b,c)} +function HXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function TXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function ZXd(a,b,c){UVd();oXd.call(this,a,b,c)} +function JXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function LXd(a,b,c){UVd();HXd.call(this,a,b,c)} +function NXd(a,b,c){UVd();LXd.call(this,a,b,c)} +function VXd(a,b,c){UVd();TXd.call(this,a,b,c)} +function _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)} +function $j(a,b){Qb(a);Qb(b);return new _j(a,b)} +function Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)} +function Rq(a,b){Qb(a);Qb(b);return new ar(a,b)} +function lr(a,b){Qb(a);Qb(b);return new zr(a,b)} +function BD(a,b){CCb(a==null||AD(a,b));return a} +function Nu(a){var b;b=new Rkb;fr(b,a);return b} +function Ex(a){var b;b=new Tqb;fr(b,a);return b} +function Hx(a){var b;b=new Gxb;Jq(b,a);return b} +function Ru(a){var b;b=new Psb;Jq(b,a);return b} +function YEc(a){!a.e&&(a.e=new Rkb);return a.e} +function SMd(a){!a.c&&(a.c=new xYd);return a.c} +function Ekb(a,b){a.c[a.c.length]=b;return true} +function WA(a,b){this.c=a;this.b=b;this.a=false} +function Gg(a){this.d=a;Dg(this);this.b=ed(a.d)} +function pzb(){this.a=';,;';this.b='';this.c=''} +function Bvb(a,b,c){qvb.call(this,b,c);this.a=a} +function fAb(a,b,c){this.b=a;fvb.call(this,b,c)} +function lsb(a,b,c){this.c=a;pjb.call(this,b,c)} +function bCb(a,b,c){$Bb(c,0,a,b,c.length,false)} +function HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}} +function v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))} +function rlc(a,b){return beb(D0b(a.d),D0b(b.d))} +function uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d} +function FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd} +function DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))} +function aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)} +function C6c(a){return new f7c(a.c+a.b,a.d+a.a)} +function Vmc(a,b){Imc();return beb(a.d.p,b.d.p)} +function Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)} +function Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)} +function rCb(a,b){if(!a){throw vbb(new ucb(b))}} +function mCb(a,b){if(!a){throw vbb(new Wdb(b))}} +function dWb(a,b,c){cWb.call(this,a,b);this.b=c} +function pMd(a,b,c){MLd.call(this,a,b);this.c=c} +function Dnc(a,b,c){Cnc.call(this,b,c);this.d=a} +function _Gd(a){$Gd();MGd.call(this);this.th(a)} +function PNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function UNd(a,b,c){this.a=a;nNd.call(this,b,c)} +function k2d(a,b,c){MLd.call(this,a,b);this.c=c} +function y1d(){T0d();z1d.call(this,(yFd(),xFd))} +function gFd(a){return a!=null&&!OEd(a,CEd,DEd)} +function dFd(a,b){return (jFd(a)<<4|jFd(b))&aje} +function ln(a,b){return Vm(),Wj(a,b),new iy(a,b)} +function Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}} +function Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)} +function WUd(a,b){var c;c=a.c;VUd(a,b);return c} +function Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a} +function G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true} +function jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()} +function Wq(a,b){this.b=a;this.a=b;ol.call(this)} +function ar(a,b){this.a=a;this.b=b;ol.call(this)} +function vvb(a,b){qvb.call(this,b,1040);this.a=a} +function Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function WPb(a){QPb();return jtd(a)==Xod(ltd(a))} +function XPb(a){QPb();return ltd(a)==Xod(jtd(a))} +function iYb(a,b){return hYb(a,new cWb(b.a,b.b))} +function NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c} +function _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function YHb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function zfe(a){wfe();++vfe;return new ige(0,a)} +function o_b(a){if(a.a){return a.a}return JZb(a)} +function CCb(a){if(!a){throw vbb(new Cdb(null))}} +function X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))} +function ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))} +function oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)} +function d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)} +function sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} +function xfd(a,b){return Ekb(a,new f7c(b.a,b.b))} +function Bic(a,b){return a.c<b.c?-1:a.c==b.c?0:1} +function B0b(a){return a.e.c.length+a.g.c.length} +function D0b(a){return a.e.c.length-a.g.c.length} +function Ojc(a){return a.b.c.length-a.e.c.length} +function dKc(a){FJc();return (Ucd(),Ecd).Hc(a.j)} +function lHd(a){$Gd();_Gd.call(this,a);this.a=-1} +function R7d(a,b){f7d.call(this,a,b);this.a=this} +function odb(a,b){var c;c=ldb(a,b);c.i=2;return c} +function Evd(a,b){var c;++a.j;c=a.Ti(b);return c} +function e3c(a,b,c){a.a=-1;i3c(a,b.g,c);return a} +function Qrd(a,b,c){Kqd(a.a,a.b,a.c,BD(b,202),c)} +function OHd(a,b){PHd(a,b==null?null:(uCb(b),b))} +function SUd(a,b){UUd(a,b==null?null:(uCb(b),b))} +function TUd(a,b){UUd(a,b==null?null:(uCb(b),b))} +function Zj(a,b,c){return new tk(oAb(a).Ie(),c,b)} +function IC(a,b,c,d,e,f){return JC(a,b,c,d,e,0,f)} +function Ucb(){Ucb=ccb;Tcb=KC(xI,nie,217,256,0,1)} +function Ceb(){Ceb=ccb;Beb=KC(MI,nie,162,256,0,1)} +function Yeb(){Yeb=ccb;Xeb=KC(UI,nie,184,256,0,1)} +function ddb(){ddb=ccb;cdb=KC(yI,nie,172,128,0,1)} +function IVb(){HVb(this,false,false,false,false)} +function my(a){im();this.a=(mmb(),new anb(Qb(a)))} +function ir(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} +function Tw(a){a.a.cd();BD(a.a.dd(),14).gc();zh()} +function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} +function fqb(a){this.c=a;this.a=new Gqb(this.c.a)} +function Vqb(a){this.a=new Mqb(a.gc());ye(this,a)} +function Bsb(a){Wqb.call(this,new $rb);ye(this,a)} +function Rfb(a,b){a.a+=zfb(b,0,b.length);return a} +function Ikb(a,b){tCb(b,a.c.length);return a.c[b]} +function $lb(a,b){tCb(b,a.a.length);return a.a[b]} +function YAb(a,b){EAb();Vzb.call(this,a);this.a=b} +function Qyb(a,b){return Aeb(wbb(Aeb(a.a).a,b.a))} +function jpb(a,b){return uCb(a),Fcb(a,(uCb(b),b))} +function opb(a,b){return uCb(b),Fcb(b,(uCb(a),a))} +function Oyb(a,b){return NC(b,0,Bzb(b[0],Aeb(1)))} +function Bzb(a,b){return Qyb(BD(a,162),BD(b,162))} +function vic(a){return a.c-BD(Ikb(a.a,a.b),287).b} +function uNb(a){return !a.q?(mmb(),mmb(),kmb):a.q} +function Xi(a){return a.e.Hd().gc()*a.c.Hd().gc()} +function onc(a,b,c){return beb(b.d[a.g],c.d[a.g])} +function YHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function ZHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function $Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function _Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} +function q$c(a,b,c){return $wnd.Math.min(c/a,1/b)} +function sEc(a,b){return a?0:$wnd.Math.max(0,b-1)} +function Elb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} +function bVc(a){var b;b=hVc(a);return !b?a:bVc(b)} +function Voc(a,b){a.a==null&&Toc(a);return a.a[b]} +function qed(a){if(a.c){return a.c.f}return a.e.b} +function red(a){if(a.c){return a.c.g}return a.e.a} +function pFd(a){zud.call(this,a.gc());ytd(this,a)} +function nXd(a,b){UVd();VVd.call(this,b);this.a=a} +function KYd(a,b,c){this.a=a;xMd.call(this,b,c,2)} +function B_b(a,b,c,d){s_b(this);v_b(this,a,b,c,d)} +function ige(a,b){wfe();xfe.call(this,a);this.a=b} +function jgd(a){this.b=new Psb;this.a=a;this.c=-1} +function MOb(){this.d=new f7c(0,0);this.e=new Tqb} +function Nr(a){qc.call(this,0,0);this.a=a;this.b=0} +function ejc(a){this.a=a;this.c=new Lqb;$ic(this)} +function ju(a){if(a.e.c!=a.b){throw vbb(new Apb)}} +function bt(a){if(a.c.e!=a.a){throw vbb(new Apb)}} +function Tbb(a){if(Fbb(a)){return a|0}return pD(a)} +function Bfe(a,b){wfe();++vfe;return new rge(a,b)} +function SEd(a,b){return a==null?b==null:dfb(a,b)} +function TEd(a,b){return a==null?b==null:efb(a,b)} +function Npb(a,b,c){rqb(a.a,b);return Qpb(a,b.g,c)} +function Mlb(a,b,c){oCb(0,b,a.length);Klb(a,0,b,c)} +function Dkb(a,b,c){wCb(b,a.c.length);aCb(a.c,b,c)} +function Dlb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} +function qqb(a,b){var c;c=pqb(a);nmb(c,b);return c} +function Oz(a,b){!a&&(a=[]);a[a.length]=b;return a} +function Brb(a,b){return !(a.a.get(b)===undefined)} +function Wyb(a,b){return Nyb(new rzb,new bzb(a),b)} +function Itb(a){return a==null?ztb:new Ftb(uCb(a))} +function tqb(a,b){return JD(b,22)&&uqb(a,BD(b,22))} +function vqb(a,b){return JD(b,22)&&wqb(a,BD(b,22))} +function Aub(a){return Cub(a,26)*ike+Cub(a,27)*jke} +function MC(a){return Array.isArray(a)&&a.im===gcb} +function bg(a){a.b?bg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} +function $Nb(a,b){P6c(a.c,b);a.b.c+=b.a;a.b.d+=b.b} +function ZNb(a,b){$Nb(a,c7c(new f7c(b.a,b.b),a.c))} +function BLb(a,b){this.b=new Psb;this.a=a;this.c=b} +function OVb(){this.b=new $Vb;this.c=new SVb(this)} +function oEb(){this.d=new CEb;this.e=new uEb(this)} +function aCc(){ZBc();this.f=new Psb;this.e=new Psb} +function $Jc(){FJc();this.k=new Lqb;this.d=new Tqb} +function Rgd(){Rgd=ccb;Qgd=new Osd((Y9c(),s9c),0)} +function Mr(){Mr=ccb;Lr=new Nr(KC(SI,Uhe,1,0,5,1))} +function gfc(a,b,c){bfc(c,a,1);Ekb(b,new Tfc(c,a))} +function hfc(a,b,c){cfc(c,a,1);Ekb(b,new dgc(c,a))} +function R$c(a,b,c){return Qqb(a,new aDb(b.a,c.a))} +function ACc(a,b,c){return -beb(a.f[b.p],a.f[c.p])} +function mHb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} +function nHb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} +function c3c(a,b,c){a.a=-1;i3c(a,b.g+1,c);return a} +function Dod(a,b,c){c=_hd(a,BD(b,49),7,c);return c} +function JHd(a,b,c){c=_hd(a,BD(b,49),3,c);return c} +function JMd(a,b,c){this.a=a;BMd.call(this,b,c,22)} +function UTd(a,b,c){this.a=a;BMd.call(this,b,c,14)} +function eXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} +function lXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} +function FNd(a,b){(b.Bb&ote)!=0&&!a.a.o&&(a.a.o=b)} +function MD(a){return a!=null&&OD(a)&&!(a.im===gcb)} +function ID(a){return !Array.isArray(a)&&a.im===gcb} +function ed(a){return JD(a,15)?BD(a,15).Yc():a.Kc()} +function De(a){return a.Qc(KC(SI,Uhe,1,a.gc(),5,1))} +function u1d(a,b){return W1d(p1d(a,b))?b.Qh():null} +function uvd(a){a?Ty(a,(Zfb(),Yfb),''):(Zfb(),Yfb)} +function Sr(a){this.a=(Mr(),Lr);this.d=BD(Qb(a),47)} +function qg(a,b,c,d){this.a=a;dg.call(this,a,b,c,d)} +function Yge(a){Xge();this.a=0;this.b=a-1;this.c=1} +function Yy(a){Py(this);this.g=a;Ry(this);this._d()} +function Wm(a){if(a.c){return a.c}return a.c=a.Id()} +function Xm(a){if(a.d){return a.d}return a.d=a.Jd()} +function Rl(a){var b;b=a.c;return !b?(a.c=a.Dd()):b} +function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} +function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} +function Ffe(a){wfe();++vfe;return new Hge(10,a,0)} +function Ubb(a){if(Fbb(a)){return ''+a}return qD(a)} +function a4d(a){if(a.e.j!=a.d){throw vbb(new Apb)}} +function Nbb(a,b){return zbb(kD(Fbb(a)?Rbb(a):a,b))} +function Obb(a,b){return zbb(lD(Fbb(a)?Rbb(a):a,b))} +function Pbb(a,b){return zbb(mD(Fbb(a)?Rbb(a):a,b))} +function Dcb(a,b){return Ecb((uCb(a),a),(uCb(b),b))} +function Ddb(a,b){return Kdb((uCb(a),a),(uCb(b),b))} +function fx(a,b){return Qb(b),a.a.Ad(b)&&!a.b.Ad(b)} +function dD(a,b){return TC(a.l&b.l,a.m&b.m,a.h&b.h)} +function jD(a,b){return TC(a.l|b.l,a.m|b.m,a.h|b.h)} +function rD(a,b){return TC(a.l^b.l,a.m^b.m,a.h^b.h)} +function QAb(a,b){return TAb(a,(uCb(b),new Rxb(b)))} +function RAb(a,b){return TAb(a,(uCb(b),new Txb(b)))} +function g1b(a){return z0b(),BD(a,11).e.c.length!=0} +function l1b(a){return z0b(),BD(a,11).g.c.length!=0} +function bac(a,b){I9b();return Kdb(b.a.o.a,a.a.o.a)} +function Rnc(a,b,c){return Snc(a,BD(b,11),BD(c,11))} +function koc(a){if(a.e){return poc(a.e)}return null} +function Iub(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} +function pBb(a,b,c){if(a.a.Mb(c)){a.b=true;b.td(c)}} +function _vb(a,b){if(a<0||a>=b){throw vbb(new rcb)}} +function Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b} +function _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)} +function n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)} +function tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)} +function D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)} +function oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b} +function bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b} +function qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie} +function gub(a){this.b=new Skb(11);this.a=(ipb(),a)} +function Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)} +function nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)} +function Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)} +function Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)} +function jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)} +function Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)} +function nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)} +function DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)} +function cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d} +function i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d} +function x0d(a){Wud.call(this,a,false);this.a=false} +function Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b} +function px(a,b){im();ox.call(this,a,Dm(new amb(b)))} +function Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)} +function Efe(a,b){wfe();++vfe;return new Dge(6,a,b)} +function nfb(a,b){return dfb(a.substr(0,b.length),b)} +function Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)} +function Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}} +function Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c} +function amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function xJc(a){var b;b=a;while(b.f){b=b.f}return b} +function fkb(a){var b;b=bkb(a);sCb(b!=null);return b} +function gkb(a){var b;b=ckb(a);sCb(b!=null);return b} +function cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Glb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} +function Clb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} +function ylb(a,b,c,d){oCb(b,c,a.length);Clb(a,b,c,d)} +function Vvb(a,b,c){_vb(c,a.a.c.length);Nkb(a.a,c,b)} +function Lyb(a,b,c){this.c=a;this.a=b;mmb();this.b=c} +function Qpb(a,b,c){var d;d=a.b[b];a.b[b]=c;return d} +function Qqb(a,b){var c;c=a.a.zc(b,a);return c==null} +function zjb(a){if(!a){throw vbb(new utb)}return a.d} +function vCb(a,b){if(a==null){throw vbb(new Heb(b))}} +function Goc(a,b){if(!b){return false}return ye(a,b)} +function K2c(a,b,c){C2c(a,b.g,c);rqb(a.c,b);return a} +function vVb(a){tVb(a,(ead(),aad));a.d=true;return a} +function c2d(a){!a.j&&i2d(a,d1d(a.g,a.b));return a.j} +function nlb(a){yCb(a.b!=-1);Kkb(a.c,a.a=a.b);a.b=-1} +function Uhb(a){a.f=new lrb(a);a.g=new Frb(a);zpb(a)} +function Plb(a){return new YAb(null,Olb(a,a.length))} +function ul(a){return new Sr(new xl(a.a.length,a.a))} +function iD(a){return TC(~a.l&Eje,~a.m&Eje,~a.h&Fje)} +function OD(a){return typeof a===Jhe||typeof a===Nhe} +function D9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} +function F9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} +function yRb(a,b){return a>0?$wnd.Math.log(a/b):-100} +function ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0} +function HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))} +function iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()} +function Olb(a,b){return avb(b,a.length),new vvb(a,b)} +function Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b} +function Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie} +function rge(a,b){xfe.call(this,1);this.a=a;this.b=b} +function Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a} +function uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d} +function ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)} +function Flb(a,b,c){var d;for(d=0;d<b;++d){NC(a,d,c)}} +function ffb(a,b,c,d,e){while(b<c){d[e++]=bfb(a,b++)}} +function hLb(a,b){return Kdb(a.c.c+a.c.b,b.c.c+b.c.b)} +function Axb(a,b){return Iwb(a.a,b,(Bcb(),zcb))==null} +function Vsb(a,b){Gsb(a.d,b,a.b.b,a.b);++a.a;a.c=null} +function d3d(a,b){JLd(a,JD(b,153)?b:BD(b,1937).gl())} +function hkc(a,b){MAb(NAb(a.Oc(),new Rkc),new Tkc(b))} +function kkc(a,b,c,d,e){jkc(a,BD(Qc(b.k,c),15),c,d,e)} +function lOc(a){a.s=NaN;a.c=NaN;mOc(a,a.e);mOc(a,a.j)} +function it(a){a.a=null;a.e=null;Uhb(a.b);a.d=0;++a.c} +function gKc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} +function MAd(a,b,c){return BD(a.c._c(b,BD(c,133)),42)} +function os(){hs();return OC(GC(yG,1),Kie,538,0,[gs])} +function VPb(a){QPb();return Xod(jtd(a))==Xod(ltd(a))} +function aRb(a){_Qb.call(this);this.a=a;Ekb(a.a,this)} +function tPc(a,b){this.d=DPc(a);this.c=b;this.a=0.5*b} +function A6d(){$rb.call(this);this.a=true;this.b=true} +function aLd(a){return (a.i==null&&TKd(a),a.i).length} +function oRd(a){return JD(a,99)&&(BD(a,18).Bb&ote)!=0} +function w2d(a,b){++a.j;t3d(a,a.i,b);v2d(a,BD(b,332))} +function vId(a,b){b=a.nk(null,b);return uId(a,null,b)} +function ytd(a,b){a.hi()&&(b=Dtd(a,b));return a.Wh(b)} +function mdb(a,b,c){var d;d=ldb(a,b);zdb(c,d);return d} +function ldb(a,b){var c;c=new jdb;c.j=a;c.d=b;return c} +function Qb(a){if(a==null){throw vbb(new Geb)}return a} +function Fc(a){var b;b=a.j;return !b?(a.j=new Cw(a)):b} +function Vi(a){var b;b=a.f;return !b?(a.f=new Rj(a)):b} +function ci(a){var b;return b=a.k,!b?(a.k=new th(a)):b} +function Uc(a){var b;return b=a.k,!b?(a.k=new th(a)):b} +function Pc(a){var b;return b=a.g,!b?(a.g=new lh(a)):b} +function Yi(a){var b;return b=a.i,!b?(a.i=new Ci(a)):b} +function qo(a){var b;b=a.d;return !b?(a.d=new ap(a)):b} +function Fb(a){Qb(a);return JD(a,475)?BD(a,475):fcb(a)} +function Ix(a){if(JD(a,607)){return a}return new by(a)} +function qj(a,b){Pb(b,a.c.b.c.gc());return new Fj(a,b)} +function Dfe(a,b,c){wfe();++vfe;return new zge(a,b,c)} +function NC(a,b,c){qCb(c==null||FC(a,c));return a[b]=c} +function bv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} +function Afb(a,b){a.a+=String.fromCharCode(b);return a} +function Kfb(a,b){a.a+=String.fromCharCode(b);return a} +function ovb(a,b){uCb(b);while(a.c<a.d){a.ze(b,a.c++)}} +function Ohb(a,b){return ND(b)?Phb(a,b):Wd(irb(a.f,b))} +function ZPb(a,b){QPb();return a==jtd(b)?ltd(b):jtd(b)} +function isd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} +function ksd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} +function dVb(a){this.b=new Rkb;this.a=new Rkb;this.c=a} +function H1b(a){this.c=new d7c;this.a=new Rkb;this.b=a} +function pRb(a){_Qb.call(this);this.a=new d7c;this.c=a} +function yC(a){if(a==null){throw vbb(new Geb)}this.a=a} +function HA(a){fA();this.b=new Rkb;this.a=a;sA(this,a)} +function v4c(a){this.c=a;this.a=new Psb;this.b=new Psb} +function GB(){GB=ccb;EB=new HB(false);FB=new HB(true)} +function im(){im=ccb;Ql();hm=new ux((mmb(),mmb(),jmb))} +function yx(){yx=ccb;Ql();xx=new zx((mmb(),mmb(),lmb))} +function NFd(){NFd=ccb;MFd=BZd();!!(jGd(),PFd)&&DZd()} +function aac(a,b){I9b();return BD(Mpb(a,b.d),15).Fc(b)} +function pTb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} +function NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)} +function Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)} +function gCb(a,b){var c;c=console[a];c.call(console,b)} +function Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))} +function E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))} +function oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c} +function Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c} +function dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c} +function f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)} +function z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd} +function ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)} +function uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1} +function U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)} +function Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function oAb(a){if(0>=a){return new yAb}return pAb(a-1)} +function Nfe(a){if(!bfe)return false;return Qhb(bfe,a)} +function Ehe(a){if(a)return a.dc();return !a.Kc().Ob()} +function Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a} +function LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d} +function uCb(a){if(a==null){throw vbb(new Geb)}return a} +function Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}} +function Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}} +function Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)} +function qlc(a,b){return beb(b.j.c.length,a.j.c.length)} +function igd(a,b){a.c<0||a.b.b<a.c?Fsb(a.b,b):a.a._e(b)} +function Did(a,b){var c;c=a.Yg(b);c>=0?a.Bh(c):vid(a,b)} +function WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e} +function Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e} +function Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f} +function fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k} +function cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j} +function dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j} +function AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b} +function $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c} +function pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c} +function MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))} +function Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)} +function Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)} +function Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)} +function Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d} +function $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d} +function iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b} +function cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)} +function AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)} +function T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)} +function vfb(a){return String.fromCharCode.apply(null,a)} +function Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)} +function tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()} +function d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))} +function ix(a,b){ex();return new gx(new il(a),new Uk(b))} +function Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))} +function Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))} +function hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d} +function eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a} +function gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b} +function keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} +function Gbc(a,b){return Bcb(),BD(b.b,19).a<a?true:false} +function Hbc(a,b){return Bcb(),BD(b.a,19).a<a?true:false} +function Mpb(a,b){return tqb(a.a,b)?a.b[BD(b,22).g]:null} +function kcb(a,b,c,d){a.a=qfb(a.a,0,b)+(''+d)+pfb(a.a,c)} +function OJb(a,b){a.u.Hc((rcd(),ncd))&&MJb(a,b);QJb(a,b)} +function bfb(a,b){BCb(b,a.length);return a.charCodeAt(b)} +function vtb(){hz.call(this,'There is no more element.')} +function xkb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} +function kEb(a){a.b=false;a.c=false;a.d=false;a.a=false} +function Znd(a,b,c,d){Ynd(a,b,c,false);LPd(a,d);return a} +function h3c(a){a.j.c=KC(SI,Uhe,1,0,5,1);a.a=-1;return a} +function Old(a){!a.c&&(a.c=new y5d(z2,a,5,8));return a.c} +function Nld(a){!a.b&&(a.b=new y5d(z2,a,4,7));return a.b} +function Kkd(a){!a.n&&(a.n=new cUd(D2,a,1,7));return a.n} +function Yod(a){!a.c&&(a.c=new cUd(F2,a,9,9));return a.c} +function a2d(a){a.e==Gwe&&g2d(a,a1d(a.g,a.b));return a.e} +function b2d(a){a.f==Gwe&&h2d(a,b1d(a.g,a.b));return a.f} +function Ah(a){var b;b=a.b;!b&&(a.b=b=new Ph(a));return b} +function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} +function Fg(a){ag(a.d);if(a.d.d!=a.c){throw vbb(new Apb)}} +function Xx(a,b){this.b=a;this.c=b;this.a=new Gqb(this.b)} +function Zeb(a,b,c){this.a=Zie;this.d=a;this.b=b;this.c=c} +function Mub(a,b){this.d=(uCb(a),a);this.a=16449;this.c=b} +function nqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} +function Aqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} +function JAb(a,b){Uzb(a);return new YAb(a,new qBb(b,a.a))} +function NAb(a,b){Uzb(a);return new YAb(a,new IBb(b,a.a))} +function OAb(a,b){Uzb(a);return new bAb(a,new wBb(b,a.a))} +function PAb(a,b){Uzb(a);return new vAb(a,new CBb(b,a.a))} +function Cy(a,b){return new Ay(BD(Qb(a),62),BD(Qb(b),62))} +function PWb(a,b){LWb();return Kdb((uCb(a),a),(uCb(b),b))} +function fPb(){cPb();return OC(GC(GO,1),Kie,481,0,[bPb])} +function o_c(){i_c();return OC(GC(N_,1),Kie,482,0,[h_c])} +function x_c(){s_c();return OC(GC(O_,1),Kie,551,0,[r_c])} +function X0c(){R0c();return OC(GC(W_,1),Kie,530,0,[Q0c])} +function cEc(a){this.a=new Rkb;this.e=KC(WD,nie,48,a,0,2)} +function l$b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} +function QIc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} +function rKc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} +function WKc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} +function J6c(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} +function gPc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} +function Blc(a,b,c,d){$r.call(this,a,b);this.a=c;this.b=d} +function Ggd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function pec(a,b,c){Pmc(a.a,c);dmc(c);enc(a.b,c);xmc(b,c)} +function Pid(a,b,c){var d,e;d=QEd(a);e=b.Kh(c,d);return e} +function KPb(a,b){var c,d;c=a/b;d=QD(c);c>d&&++d;return d} +function Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c} +function Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c} +function hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null} +function JZb(a){var b;b=P2b(a);if(b){return b}return null} +function Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b} +function YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())} +function ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} +function wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)} +function prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} +function Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))} +function ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)} +function lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)} +function tib(a){sCb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} +function Osb(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} +function u_b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} +function Ry(a){if(a.n){a.e!==Sie&&a._d();a.j=null}return a} +function FD(a){CCb(a==null||OD(a)&&!(a.im===gcb));return a} +function p4b(a){this.b=new Rkb;Gkb(this.b,this.b);this.a=a} +function QPb(){QPb=ccb;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb} +function mmb(){mmb=ccb;jmb=new xmb;kmb=new Qmb;lmb=new Ymb} +function ipb(){ipb=ccb;fpb=new kpb;gpb=new kpb;hpb=new ppb} +function ODb(){ODb=ccb;LDb=new JDb;NDb=new oEb;MDb=new fEb} +function MCb(){if(HCb==256){GCb=ICb;ICb=new nb;HCb=0}++HCb} +function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} +function d2b(a){return Qld(a)&&Ccb(DD(hkd(a,(Nyc(),gxc))))} +function mcc(a,b){return Rc(a,BD(vNb(b,(Nyc(),Nxc)),19),b)} +function POc(a,b){return vPc(a.j,b.s,b.c)+vPc(b.e,a.s,a.c)} +function ooc(a,b){if(!!a.e&&!a.e.a){moc(a.e,b);ooc(a.e,b)}} +function noc(a,b){if(!!a.d&&!a.d.a){moc(a.d,b);noc(a.d,b)}} +function hed(a,b){return -Kdb(red(a)*qed(a),red(b)*qed(b))} +function cgd(a){return BD(a.cd(),146).tg()+':'+fcb(a.dd())} +function Zgc(a){Hgc();var b;b=BD(a.g,10);b.n.a=a.d.c+b.d.b} +function wgc(a,b,c){qgc();return iEb(BD(Ohb(a.e,b),522),c)} +function Y2c(a,b){rb(a);rb(b);return Xr(BD(a,22),BD(b,22))} +function oic(a,b,c){a.i=0;a.e=0;if(b==c){return}kic(a,b,c)} +function pic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c)} +function Spd(a,b,c){var d,e;d=Kcb(c);e=new TB(d);cC(a,b,e)} +function FSd(a,b,c,d,e,f){ESd.call(this,a,b,c,d,e,f?-2:-1)} +function U5d(a,b,c,d){MLd.call(this,b,c);this.b=a;this.a=d} +function QRc(a,b){new Psb;this.a=new s7c;this.b=a;this.c=b} +function Hec(a,b){BD(vNb(a,(wtc(),Qsc)),15).Fc(b);return b} +function Rb(a,b){if(a==null){throw vbb(new Heb(b))}return a} +function WKd(a){!a.q&&(a.q=new cUd(n5,a,11,10));return a.q} +function ZKd(a){!a.s&&(a.s=new cUd(t5,a,21,17));return a.s} +function Vod(a){!a.a&&(a.a=new cUd(E2,a,10,11));return a.a} +function Dx(a){return JD(a,14)?new Vqb(BD(a,14)):Ex(a.Kc())} +function Ni(a){return new aj(a,a.e.Hd().gc()*a.c.Hd().gc())} +function Zi(a){return new kj(a,a.e.Hd().gc()*a.c.Hd().gc())} +function rz(a){return !!a&&!!a.hashCode?a.hashCode():FCb(a)} +function Qhb(a,b){return b==null?!!irb(a.f,null):Brb(a.g,b)} +function Oq(a){Qb(a);return mr(new Sr(ur(a.a.Kc(),new Sq)))} +function vmb(a){mmb();return JD(a,54)?new Yob(a):new Inb(a)} +function VDb(a,b,c){if(a.f){return a.f.Ne(b,c)}return false} +function Gfb(a,b){a.a=qfb(a.a,0,b)+''+pfb(a.a,b+1);return a} +function fVb(a,b){var c;c=Sqb(a.a,b);c&&(b.d=null);return c} +function zpb(a){var b,c;c=a;b=c.$modCount|0;c.$modCount=b+1} +function pu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} +function hOb(a){this.b=a;this.a=new Hxb(BD(Qb(new kOb),62))} +function uEb(a){this.c=a;this.b=new Hxb(BD(Qb(new xEb),62))} +function SVb(a){this.c=a;this.b=new Hxb(BD(Qb(new VVb),62))} +function FYb(){this.a=new HXb;this.b=new LXb;this.d=new SYb} +function UZb(){this.a=new s7c;this.b=(Xj(3,Jie),new Skb(3))} +function VMc(){this.b=new Tqb;this.d=new Psb;this.e=new twb} +function K6c(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} +function Ay(a,b){oi.call(this,new Qwb(a));this.a=a;this.b=b} +function eod(){bod(this,new $md);this.wb=(NFd(),MFd);LFd()} +function eHc(a){Odd(a,'No crossing minimization',1);Qdd(a)} +function Gz(a){Az();$wnd.setTimeout(function(){throw a},0)} +function _Kd(a){if(!a.u){$Kd(a);a.u=new YOd(a,a)}return a.u} +function wjd(a){var b;b=BD(Ajd(a,16),26);return !b?a.zh():b} +function Jsd(a,b){return JD(b,146)&&dfb(a.b,BD(b,146).tg())} +function t0d(a,b){return a.a?b.Wg().Kc():BD(b.Wg(),69).Zh()} +function u3b(a){return a.k==(j0b(),h0b)&&wNb(a,(wtc(),Csc))} +function ux(a){this.a=(mmb(),JD(a,54)?new Yob(a):new Inb(a))} +function Rz(){Rz=ccb;var a,b;b=!Xz();a=new dA;Qz=b?new Yz:a} +function Wy(a,b){var c;c=hdb(a.gm);return b==null?c:c+': '+b} +function Eob(a,b){var c;c=a.b.Qc(b);Fob(c,a.b.gc());return c} +function ytb(a,b){if(a==null){throw vbb(new Heb(b))}return a} +function irb(a,b){return grb(a,b,hrb(a,b==null?0:a.b.se(b)))} +function ofb(a,b,c){return c>=0&&dfb(a.substr(c,b.length),b)} +function H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)} +function Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} +function $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])} +function KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b} +function cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b} +function kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)} +function nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)} +function cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])} +function crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])} +function Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])} +function Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])} +function psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])} +function EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])} +function XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])} +function KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])} +function _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])} +function hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])} +function IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])} +function bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])} +function VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])} +function VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])} +function jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])} +function g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])} +function F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])} +function PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])} +function XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])} +function $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])} +function B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])} +function lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)} +function hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)} +function Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)} +function exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)} +function pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a} +function by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))} +function bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))} +function FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)} +function YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)} +function Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2} +function Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c} +function cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c} +function aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true} +function isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)} +function iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))} +function tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)} +function YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))} +function Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)} +function Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))} +function QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0} +function uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c} +function Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)} +function QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)} +function Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d} +function NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)} +function zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)} +function hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)} +function g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c} +function VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c} +function b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c} +function Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()} +function ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)} +function no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}} +function Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b} +function ecb(a){function b(){} +;b.prototype=a||{};return new b} +function dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false} +function aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)} +function tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]} +function Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)} +function mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)} +function fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)} +function Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)} +function Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)} +function Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)} +function nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)} +function Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)} +function Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()} +function t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0} +function oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0} +function BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)} +function RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)} +function eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)} +function STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)} +function evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)} +function Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)} +function _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)} +function MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)} +function ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)} +function WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)} +function rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))} +function hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c} +function aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)} +function Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)} +function FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)} +function Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a} +function bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a} +function uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)} +function QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)} +function $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)} +function F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)} +function jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} +function aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)} +function IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))} +function wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}} +function Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null} +function WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false} +function qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))} +function SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} +function aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} +function fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))} +function DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)} +function W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a} +function e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)} +function COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)} +function D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b} +function BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)} +function cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)} +function lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)} +function T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)} +function jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))} +function XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} +function yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c} +function Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()} +function UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)} +function nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b} +function Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)} +function Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))} +function tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}} +function BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}} +function Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b} +function kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)} +function A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))} +function Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])} +function jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])} +function QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])} +function HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])} +function UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])} +function BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])} +function Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])} +function Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])} +function eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])} +function Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])} +function Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])} +function hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])} +function $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])} +function NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])} +function wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])} +function WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])} +function OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])} +function wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])} +function FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])} +function uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])} +function xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])} +function tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])} +function CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])} +function wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])} +function _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])} +function kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])} +function tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])} +function o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c} +function tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)} +function fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)} +function av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)} +function cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)} +function Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje} +function bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje} +function Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a} +function _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d} +function mlb(a){sCb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} +function hEb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} +function xbb(a,b){return zbb(dD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Mbb(a,b){return zbb(jD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Vbb(a,b){return zbb(rD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Dub(a){return wbb(Nbb(Cbb(Cub(a,32)),32),Cbb(Cub(a,32)))} +function Mu(a){Qb(a);return JD(a,14)?new Tkb(BD(a,14)):Nu(a.Kc())} +function EWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(a.c,b.c)} +function FWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(a.c,b.c)} +function HWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(b.c,a.c)} +function GWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(b.c,a.c)} +function WGb(a,b){var c;c=Edb(ED(a.a.We((Y9c(),Q9c))));XGb(a,b,c)} +function Rgc(a,b){var c;c=BD(Ohb(a.g,b),57);Hkb(b.d,new Qhc(a,c))} +function GYb(a,b){var c,d;c=d_b(a);d=d_b(b);return c<d?-1:c>d?1:0} +function bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a} +function iSc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} +function WRc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} +function oRb(a){return a.c==null||a.c.length==0?'n_'+a.b:'n_'+a.c} +function qz(a,b){return !!a&&!!a.equals?a.equals(b):PD(a)===PD(b)} +function dkd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return mid(a,b)} +function Tdd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new kgd;Ekb(a.e,d)}} +function cIc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} +function kxd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} +function lxd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} +function zge(a,b,c){xfe.call(this,25);this.b=a;this.a=b;this.c=c} +function $fe(a){wfe();xfe.call(this,a);this.c=false;this.a=false} +function sSd(a,b,c,d,e,f){rSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function uSd(a,b,c,d,e,f){tSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function wSd(a,b,c,d,e,f){vSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function ySd(a,b,c,d,e,f){xSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function ASd(a,b,c,d,e,f){zSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function CSd(a,b,c,d,e,f){BSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function HSd(a,b,c,d,e,f){GSd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function JSd(a,b,c,d,e,f){ISd.call(this,a,b,c,d,e);f&&(this.o=-2)} +function nWd(a,b,c,d){VVd.call(this,c);this.b=a;this.c=b;this.d=d} +function x$c(a,b){this.a=new Rkb;this.d=new Rkb;this.f=a;this.c=b} +function PTb(){this.c=new bUb;this.a=new FYb;this.b=new wZb;$Yb()} +function b2c(){Y1c();this.b=new Lqb;this.a=new Lqb;this.c=new Rkb} +function j2d(a,b){this.g=a;this.d=(T0d(),S0d);this.a=S0d;this.b=b} +function O1d(a,b){this.f=a;this.a=(T0d(),R0d);this.c=R0d;this.b=b} +function h9d(a,b){!a.c&&(a.c=new u3d(a,0));f3d(a.c,(Q8d(),I8d),b)} +function $Tc(){$Tc=ccb;ZTc=new _Tc('DFS',0);YTc=new _Tc('BFS',1)} +function Cc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Hc(c)} +function Gc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Mc(c)} +function Ofb(a,b,c,d){a.a+=''+qfb(b==null?Xhe:fcb(b),c,d);return a} +function Xnd(a,b,c,d,e,f){Ynd(a,b,c,f);eLd(a,d);fLd(a,e);return a} +function Ysb(a){sCb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} +function Jgb(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))} +function cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))} +function $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))} +function XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))} +function k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)} +function l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)} +function cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)} +function kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))} +function rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))} +function Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)} +function YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)} +function o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)} +function p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)} +function i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d} +function vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b} +function H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a} +function tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null} +function Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true} +function _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a} +function Tb(a,b,c){if(a<0||b<a||b>c){throw vbb(new qcb(Kb(a,b,c)))}} +function eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a} +function xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}} +function $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} +function qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false} +function Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)} +function tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b} +function Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b} +function Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b} +function orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array} +function Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))} +function Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))} +function m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)} +function sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)} +function SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)} +function a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))} +function _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))} +function Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d} +function Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d} +function $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d} +function _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d} +function Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b} +function Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}} +function C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()} +function j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1} +function mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} +function uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c} +function msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)} +function cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))} +function z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))} +function q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))} +function Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))} +function hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))} +function yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])} +function qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])} +function UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])} +function UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])} +function sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])} +function kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])} +function Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)} +function Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])} +function okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))} +function Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)} +function Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} +function _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)} +function Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()} +function ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null} +function Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0} +function Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)} +function Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)} +function A2c(a,b){var c;for(c=a.j.c.length;c<b;c++){Ekb(a.j,a.rg())}} +function gBc(a,b,c,d){var e;e=d[b.g][c.g];return Edb(ED(vNb(a.a,e)))} +function goc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} +function DZc(a,b,c,d,e){this.a=a;this.e=b;this.f=c;this.b=d;this.g=e} +function Fz(a){a&&Mz((Kz(),Jz));--xz;if(a){if(zz!=-1){Hz(zz);zz=-1}}} +function Nzc(){Izc();return OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])} +function ERc(){yRc();return OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])} +function mXc(){iXc();return OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])} +function wdd(){tdd();return OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])} +function vbd(){rbd();return OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])} +function Dad(){Aad();return OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])} +function Ged(){Ded();return OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])} +function sgd(){pgd();return OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])} +function gvd(a){evd();return Mhb(dvd,a)?BD(Ohb(dvd,a),331).ug():null} +function cid(a,b,c){return b<0?tid(a,c):BD(c,66).Nj().Sj(a,a.yh(),b)} +function Sqd(a,b,c){var d;d=Wpd(c);ro(a.d,d,b);Rhb(a.e,b,c);return b} +function Uqd(a,b,c){var d;d=Wpd(c);ro(a.j,d,b);Rhb(a.k,b,c);return b} +function dtd(a){var b,c;b=(Fhd(),c=new Tld,c);!!a&&Rld(b,a);return b} +function wud(a){var b;b=a.ri(a.i);a.i>0&&$fb(a.g,0,b,0,a.i);return b} +function qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)} +function Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24} +function axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24} +function gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16} +function Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16} +function sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)} +function nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a} +function Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))} +function VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))} +function E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} +function JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32} +function Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)} +function kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)} +function Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b} +function Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a} +function kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c} +function R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)} +function TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)} +function mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)} +function dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)} +function dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}} +function vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b} +function pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}} +function VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n} +function Fqb(a){sCb(a.a<a.c.a.length);a.b=a.a;Dqb(a);return a.c.b[a.b]} +function Yjb(a){if(a.b==a.c){return}a.a=KC(SI,Uhe,1,8,5,1);a.b=0;a.c=0} +function AQb(a){this.b=new Lqb;this.c=new Lqb;this.d=new Lqb;this.a=a} +function lge(a,b){wfe();xfe.call(this,a);this.a=b;this.c=-1;this.b=-1} +function lSd(a,b,c,d){kxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} +function mSd(a,b,c,d){lxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} +function O7d(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);this.c=a;this.a=c} +function LVd(a,b,c){this.e=a;this.a=SI;this.b=R5d(b);this.c=b;this.d=c} +function Lo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} +function nYd(a){this.c=a;this.a=BD(wId(a),148);this.b=this.a.Aj().Nh()} +function Irb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} +function $rb(){Lqb.call(this);Trb(this);this.d.b=this.d;this.d.a=this.d} +function mRb(a,b){_Qb.call(this);this.a=a;this.b=b;Ekb(this.a.b,this)} +function uFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} +function FFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} +function Fob(a,b){var c;for(c=0;c<b;++c){NC(a,c,new Rob(BD(a[c],42)))}} +function Lgb(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} +function Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb} +function Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b} +function GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))} +function Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))} +function REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))} +function ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))} +function aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))} +function D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))} +function Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))} +function erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))} +function eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))} +function GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))} +function Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))} +function rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))} +function MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))} +function ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))} +function bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))} +function jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))} +function KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))} +function dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))} +function XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))} +function XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))} +function lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))} +function i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))} +function H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))} +function UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)} +function Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} +function Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d} +function zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a} +function reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}} +function me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))} +function Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)} +function fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)} +function FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)} +function tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])} +function _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])} +function Dz(b){Az();return function(){return Ez(b,this,arguments);var a}} +function sz(){if(Date.now){return Date.now()}return (new Date).getTime()} +function OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()} +function ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g} +function ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)} +function PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)} +function jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)} +function rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c} +function wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb} +function oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false} +function C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false} +function zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} +function j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)} +function Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} +function $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t} +function kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])} +function Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])} +function Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])} +function Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])} +function _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])} +function sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])} +function n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])} +function _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])} +function Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])} +function T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)} +function yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)} +function uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qzb(b)}} +function Tc(a,b){var c,d;c=BD(Iv(a.c,b),14);if(c){d=c.gc();c.$b();a.d-=d}} +function tjb(a,b){var c,d;c=b.cd();d=Awb(a,c);return !!d&&wtb(d.e,b.dd())} +function Qgb(a,b){if(b==0||a.e==0){return a}return b>0?ihb(a,b):lhb(a,-b)} +function Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)} +function Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}} +function Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b} +function kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b} +function hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)} +function uHb(a,b,c,d){var e;for(e=0;e<rHb;e++){nHb(a.a[b.g][e],c,d[b.g])}} +function vHb(a,b,c,d){var e;for(e=0;e<sHb;e++){mHb(a.a[e][b.g],c,d[b.g])}} +function vSd(a,b,c,d,e){kxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function zSd(a,b,c,d,e){lxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function ISd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} +function qSd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.b=c} +function mWd(a,b,c){VVd.call(this,c);this.b=a;this.c=b;this.d=(CWd(),AWd)} +function oxd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} +function _6d(a,b,c){var d;d=new a7d(a.a);Ld(d,a.a.a);jrb(d.f,b,c);a.a.a=d} +function lud(a,b){a.qi(a.i+1);mud(a,a.i,a.oi(a.i,b));a.bi(a.i++,b);a.ci()} +function oud(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.di(c,b);a.ci()} +function Ou(a){var b,c;Qb(a);b=Iu(a.length);c=new Skb(b);nmb(c,a);return c} +function km(a){var b;b=(Qb(a),a?new Tkb(a):Nu(a.Kc()));smb(b);return Dm(b)} +function Kkb(a,b){var c;c=(tCb(b,a.c.length),a.c[b]);cCb(a.c,b,1);return c} +function Qc(a,b){var c;c=BD(a.c.xc(b),14);!c&&(c=a.ic(b));return a.pc(b,c)} +function cfb(a,b){var c,d;c=(uCb(a),a);d=(uCb(b),b);return c==d?0:c<d?-1:1} +function Fpb(a){var b;b=a.e+a.f;if(isNaN(b)&&Ldb(a.d)){return a.d}return b} +function uwb(a,b){!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Nfb(a.a,b);return a} +function Sb(a,b){if(a<0||a>b){throw vbb(new qcb(Jb(a,b,'index')))}return a} +function zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e} +function _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)} +function A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))} +function Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)} +function b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)} +function kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb} +function MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb} +function Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)} +function wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} +function BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)} +function SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb} +function g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')} +function Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))} +function HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)} +function _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)} +function C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)} +function PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)} +function KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()} +function JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a} +function poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null} +function ODc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} +function pvb(a,b){uCb(b);if(a.c<a.d){a.ze(b,a.c++);return true}return false} +function QYd(a,b){if(Mhb(a.a,b)){Thb(a.a,b);return true}else{return false}} +function fd(a){var b,c;b=a.cd();c=BD(a.dd(),14);return $j(c.Nc(),new ah(b))} +function sqb(a){var b;b=BD(ZBb(a.b,a.b.length),9);return new xqb(a.a,b,a.c)} +function _zb(a){var b;Uzb(a);b=new fAb(a,a.a.e,a.a.d|4);return new bAb(a,b)} +function HAb(a){var b;Tzb(a);b=0;while(a.a.sd(new RBb)){b=wbb(b,1)}return b} +function UDc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.$f(b[e],d,c)}} +function QJb(a,b){var c;if(a.C){c=BD(Mpb(a.b,b),124).n;c.d=a.C.d;c.a=a.C.a}} +function Mi(a,b,c){Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());return a.a[b][c]} +function Ugb(a,b){Hgb();this.e=a;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b])} +function dg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} +function o5b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} +function Y2d(a,b,c,d){X2d(a,b,c,M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0))} +function tac(a,b){Odd(b,'Label management',1);RD(vNb(a,(g6c(),f6c)));Qdd(b)} +function Skb(a){Ckb(this);mCb(a>=0,'Initial capacity must not be negative')} +function lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))} +function SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))} +function JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))} +function Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))} +function DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))} +function WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))} +function Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))} +function gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))} +function Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))} +function Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))} +function jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))} +function asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))} +function Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))} +function YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))} +function yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))} +function PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))} +function QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))} +function yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))} +function HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))} +function wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))} +function zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))} +function vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))} +function EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))} +function yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))} +function b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))} +function mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))} +function vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))} +function icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])} +function ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)} +function NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d} +function yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a} +function EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b} +function FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c} +function A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} +function Atd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.fi(d,e)}}} +function uhb(a,b,c,d){var e;e=KC(WD,oje,25,b+1,15,1);vhb(e,a,b,c,d);return e} +function KC(a,b,c,d,e,f){var g;g=LC(e,d);e!=10&&OC(GC(a,f),b,c,e,g);return g} +function bYd(a,b,c,d){!!c&&(d=c.gh(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} +function cYd(a,b,c,d){!!c&&(d=c.ih(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} +function KNb(a,b,c){BD(a.b,65);BD(a.b,65);BD(a.b,65);Hkb(a.a,new TNb(c,b,a))} +function ACb(a,b,c){if(a<0||b>c||b<a){throw vbb(new Xfb(xke+a+zke+b+oke+c))}} +function zCb(a){if(!a){throw vbb(new Zdb('Unable to add element to queue'))}} +function Vzb(a){if(!a){this.c=null;this.b=new Rkb}else{this.c=a;this.b=null}} +function exb(a,b){pjb.call(this,a,b);this.a=KC(dL,zie,436,2,0,1);this.b=true} +function _rb(a){Whb.call(this,a,0);Trb(this);this.d.b=this.d;this.d.a=this.d} +function VRc(a){var b;b=a.b;if(b.b==0){return null}return BD(Ut(b,0),188).b} +function Kwb(a,b){var c;c=new fxb;c.c=true;c.d=b.dd();return Lwb(a,b.cd(),c)} +function bB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);YA(a,c)} +function zGc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} +function S6c(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} +function Ipc(){Ipc=ccb;Gpc=new Jpc('QUADRATIC',0);Hpc=new Jpc('SCANLINE',1)} +function hCc(){hCc=ccb;gCc=c3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),pUb,J8b)} +function l8c(){i8c();return OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])} +function I7c(){F7c();return OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])} +function Dpc(){Apc();return OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])} +function Brc(){yrc();return OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])} +function orc(){lrc();return OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])} +function rzc(){lzc();return OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])} +function Wqc(){Sqc();return OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])} +function uSc(){qSc();return OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])} +function wcd(){rcd();return OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])} +function Pad(){Mad();return OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])} +function m0b(){j0b();return OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])} +function mib(a){yCb(!!a.c);xpb(a.e,a);a.c.Qb();a.c=null;a.b=kib(a);ypb(a.e,a)} +function tsb(a){xpb(a.c.a.e,a);sCb(a.b!=a.c.a.d);a.a=a.b;a.b=a.b.a;return a.a} +function kSd(a){var b;if(!a.a&&a.b!=-1){b=a.c.Tg();a.a=XKd(b,a.b)}return a.a} +function wtd(a,b){if(a.hi()&&a.Hc(b)){return false}else{a.Yh(b);return true}} +function $Hb(a,b){ytb(b,'Horizontal alignment cannot be null');a.b=b;return a} +function Lfe(a,b,c){wfe();var d;d=Kfe(a,b);c&&!!d&&Nfe(a)&&(d=null);return d} +function vXb(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);uXb(d,b,c)}} +function tXb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),37);sXb(a,c,0,0)}} +function ojc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} +function KZc(a,b){var c,d,e;e=a.r;d=a.d;c=MZc(a,b,true);return c.b!=e||c.a!=d} +function Jjc(a,b){Vrb(a.e,b)||Xrb(a.e,b,new Pjc(b));return BD(Wrb(a.e,b),113)} +function Byb(a,b,c,d){uCb(a);uCb(b);uCb(c);uCb(d);return new Lyb(a,b,new Vxb)} +function dId(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=new Y5d(this,b,c,d)} +function oSd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.b=c} +function ESd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.a=c} +function Bqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} +function Cqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} +function v1d(a,b,c){var d,e;e=(d=nUd(a.b,b),d);return !e?null:V1d(p1d(a,e),c)} +function gid(a,b){var c;return c=a.Yg(b),c>=0?a._g(c,true,true):sid(a,b,true)} +function s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))} +function pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)} +function IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)} +function qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)} +function ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b} +function dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true} +function vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)} +function r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)} +function p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)} +function fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)} +function UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)} +function yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0} +function MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}} +function nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]} +function pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)} +function Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c} +function Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)} +function bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)} +function hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} +function nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b} +function Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)} +function NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)} +function lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb} +function zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))} +function uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))} +function ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))} +function WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))} +function WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))} +function GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))} +function mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))} +function oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))} +function Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))} +function Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))} +function ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))} +function xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))} +function Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))} +function Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))} +function ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))} +function A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)} +function _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)} +function eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} +function PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a} +function Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true} +function Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null} +function Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))} +function Jkb(a,b,c){for(;c<a.c.length;++c){if(wtb(b,a.c[c])){return c}}return -1} +function SAb(a,b,c){var d;Tzb(a);d=new NBb;d.a=b;a.a.Nb(new VBb(d,c));return d.a} +function aAb(a){var b;Tzb(a);b=KC(UD,Vje,25,0,15,1);_ub(a.a,new kAb(b));return b} +function ajc(a){var b,c;c=BD(Ikb(a.j,0),11);b=BD(vNb(c,(wtc(),$sc)),11);return b} +function yc(a){var b;if(!xc(a)){throw vbb(new utb)}a.e=1;b=a.d;a.d=null;return b} +function wu(a,b){var c;this.f=a;this.b=b;c=BD(Ohb(a.b,b),283);this.c=!c?null:c.b} +function Ygc(){Hgc();this.b=new Lqb;this.f=new Lqb;this.g=new Lqb;this.e=new Lqb} +function Tnc(a,b){this.a=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.a);this.b=b} +function zoc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--BD(Ikb(a.c.a,b),10).p}} +function Rwd(a){var b;b=a.Ai();b!=null&&a.d!=-1&&BD(b,92).Ng(a);!!a.i&&a.i.Fi()} +function rFd(a){Py(this);this.g=!a?null:Wy(a,a.$d());this.f=a;Ry(this);this._d()} +function pSd(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);jSd(this);this.c=a;this.b=c} +function Ayb(a,b,c,d,e){uCb(a);uCb(b);uCb(c);uCb(d);uCb(e);return new Lyb(a,b,d)} +function B2c(a,b){if(b<0){throw vbb(new qcb(ese+b))}A2c(a,b+1);return Ikb(a.j,b)} +function Ob(a,b,c,d){if(!a){throw vbb(new Wdb(hc(b,OC(GC(SI,1),Uhe,1,5,[c,d]))))}} +function dDb(a,b){return wtb(b,Ikb(a.f,0))||wtb(b,Ikb(a.f,1))||wtb(b,Ikb(a.f,2))} +function ghd(a,b){ecd(BD(BD(a.f,33).We((Y9c(),t9c)),98))&&NCd(Yod(BD(a.f,33)),b)} +function p1d(a,b){var c,d;c=BD(b,675);d=c.Oh();!d&&c.Rh(d=new Y1d(a,b));return d} +function q1d(a,b){var c,d;c=BD(b,677);d=c.pk();!d&&c.tk(d=new j2d(a,b));return d} +function QSd(a){if(!a.b){a.b=new UTd(a,j5,a);!a.a&&(a.a=new fTd(a,a))}return a.b} +function yTb(){yTb=ccb;wTb=new zTb('XY',0);vTb=new zTb('X',1);xTb=new zTb('Y',2)} +function EIb(){EIb=ccb;DIb=new FIb('TOP',0);CIb=new FIb(gle,1);BIb=new FIb(mle,2)} +function esc(){esc=ccb;csc=new fsc(ane,0);dsc=new fsc('TOP',1);bsc=new fsc(mle,2)} +function BAc(){BAc=ccb;zAc=new CAc('INPUT_ORDER',0);AAc=new CAc('PORT_DEGREE',1)} +function wD(){wD=ccb;sD=TC(Eje,Eje,524287);tD=TC(0,0,Gje);uD=RC(1);RC(2);vD=RC(0)} +function WDc(a,b,c){a.a.c=KC(SI,Uhe,1,0,5,1);$Dc(a,b,c);a.a.c.length==0||TDc(a,b)} +function rfb(a){var b,c;c=a.length;b=KC(TD,$ie,25,c,15,1);ffb(a,0,c,b,0);return b} +function Aid(a){var b;if(!a.dh()){b=aLd(a.Tg())-a.Ah();a.ph().bk(b)}return a.Pg()} +function xjd(a){var b;b=CD(Ajd(a,32));if(b==null){yjd(a);b=CD(Ajd(a,32))}return b} +function iid(a,b){var c;c=bLd(a.d,b);return c>=0?fid(a,c,true,true):sid(a,b,true)} +function vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)} +function Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} +function agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)} +function S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} +function INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)} +function uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d} +function Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}} +function YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e} +function fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null} +function UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)} +function tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)} +function yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}} +function oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije} +function HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b} +function uA(a,b){while(b[0]<a.length&&hfb(' \t\r\n',wfb(bfb(a,b[0])))>=0){++b[0]}} +function sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))} +function vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function EA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} +function Hhe(a,b){var c;c=0;while(a.e!=a.i.gc()){Qrd(b,Dyd(a),meb(c));c!=Ohe&&++c}} +function xHc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} +function Qgc(a,b){var c,d,e;e=b.c.i;c=BD(Ohb(a.f,e),57);d=c.d.c-c.e.c;p7c(b.a,d,0)} +function Scb(a){var b,c;b=a+128;c=(Ucb(),Tcb)[b];!c&&(c=Tcb[b]=new Mcb(a));return c} +function es(a,b){var c;uCb(b);c=a[':'+b];nCb(!!c,OC(GC(SI,1),Uhe,1,5,[b]));return c} +function Mz(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=Pz(b,c)}while(a.b);a.b=c}} +function Lz(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=Pz(b,c)}while(a.a);a.a=c}} +function Dqb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} +function S9b(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} +function fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c} +function Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)} +function nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}} +function AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb} +function UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)} +function XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)} +function xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)} +function uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))} +function bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))} +function bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))} +function Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))} +function S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))} +function S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))} +function p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))} +function vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))} +function mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))} +function Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))} +function cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))} +function _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c} +function hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false} +function ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false} +function Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false} +function Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)} +function Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a<Iie){return QD(a/0.75+1)}return Ohe} +function XKd(a,b){var c;c=(a.i==null&&TKd(a),a.i);return b>=0&&b<c.length?c[b]:null} +function cC(a,b,c){var d;if(b==null){throw vbb(new Geb)}d=aC(a,b);dC(a,b,c);return d} +function Emc(a){a.a>=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a} +function sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()} +function idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)} +function Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)} +function Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)} +function u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))} +function VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a} +function Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b} +function bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)} +function zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)} +function avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}} +function Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b} +function Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)} +function ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)} +function xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}} +function t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b} +function ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))} +function NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))} +function iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))} +function Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c} +function ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false} +function Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e<c;e++){a.td(d)}} +function Hkb(a,b){var c,d,e,f;uCb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.td(c)}} +function Nsb(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} +function wqb(a,b){if(!!b&&a.b[b.g]==b){NC(a.b,b.g,null);--a.c;return true}return false} +function lo(a,b){return !!vo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15))))} +function w$b(a,b){ecd(BD(vNb(BD(a.e,10),(Nyc(),Vxc)),98))&&(mmb(),Okb(BD(a.e,10).j,b))} +function THb(a){a.b=(NHb(),KHb);a.f=(EIb(),CIb);a.d=(Xj(2,Jie),new Skb(2));a.e=new d7c} +function gHb(){gHb=ccb;dHb=new hHb('BEGIN',0);eHb=new hHb(gle,1);fHb=new hHb('END',2)} +function qad(){qad=ccb;nad=new rad(gle,0);oad=new rad('HEAD',1);pad=new rad('TAIL',2)} +function Fsd(){Csd();return OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])} +function c6c(){_5c();return OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])} +function Dlc(){Alc();return OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])} +function nAc(){kAc();return OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])} +function kcd(){kcd=ccb;jcd=as((dcd(),OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])))} +function tHb(){tHb=ccb;sHb=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length;rHb=sHb} +function wed(a){this.b=(Qb(a),new Tkb(a));this.a=new Rkb;this.d=new Rkb;this.e=new d7c} +function W6c(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} +function bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}} +function gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}} +function qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])} +function Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)} +function Jmc(a){var b;for(b=0;b<a.c.length;b++){(tCb(b,a.c.length),BD(a.c[b],11)).p=b}} +function bEc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} +function ZEc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];REc(a.g,c).a=b}} +function q7c(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);P6c(c,b)}return a} +function zUb(a,b){var c;c=c7c(R6c(BD(Ohb(a.g,b),8)),E6c(BD(Ohb(a.f,b),460).b));return c} +function lib(a){var b;xpb(a.e,a);sCb(a.b);a.c=a.a;b=BD(a.a.Pb(),42);a.b=kib(a);return b} +function CD(a){var b;CCb(a==null||Array.isArray(a)&&(b=HC(a),!(b>=14&&b<=16)));return a} +function dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()} +function ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} +function Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))} +function n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))} +function K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))} +function Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))} +function Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))} +function qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))} +function tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))} +function Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))} +function wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))} +function ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))} +function Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))} +function Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])} +function vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))} +function wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))} +function hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))} +function ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))} +function cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))} +function dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))} +function eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))} +function omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))} +function imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))} +function pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))} +function qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))} +function AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))} +function DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))} +function _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))} +function izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)} +function Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null} +function ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c} +function LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} +function Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a} +function ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];nDb(a.a,c)}return a} +function pl(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new vl(a)} +function Uz(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||Xie} +function zdb(a,b){var c;if(!a){return}b.n=a;var d=tdb(b);if(!d){_bb[a]=[b];return}d.gm=b} +function vlb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);$Bb(a,0,b,0,d,true);return b} +function RPb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),79);Qqb(a,BD(c.Kb(d),33))}} +function Xbb(){Ybb();var a=Wbb;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} +function n7c(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Gsb(a,c,a.c.b,a.c)}} +function s$c(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function wkb(a){yCb(a.c>=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e} +function My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a} +function n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c} +function KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)} +function bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)} +function rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)} +function ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)} +function JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}} +function $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a} +function Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a} +function Bt(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(wtb(b,a.Xb(c))){return c}}return -1} +function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=BD(c.Pb(),14);b.$b()}a.c.$b();a.d=0} +function Ri(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Flb(b,b.length,null)}} +function ieb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} +function NGb(a){var b,c;for(c=new olb(ahd(a));c.a<c.c.c.length;){b=BD(mlb(c),680);b.Gf()}} +function CUb(a){xUb();this.g=new Lqb;this.f=new Lqb;this.b=new Lqb;this.c=new Hp;this.i=a} +function XZb(){this.f=new d7c;this.d=new s0b;this.c=new d7c;this.a=new Rkb;this.b=new Rkb} +function c6d(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=null;this.c=new d6d(this,b,c,d)} +function nxd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} +function hJd(){FId.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=zte} +function Ldd(){Idd();return OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])} +function uFb(){rFb();return OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])} +function qeb(){qeb=ccb;peb=OC(GC(WD,1),oje,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} +function vCc(){vCc=ccb;uCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function VCc(){VCc=ccb;UCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function rDc(){rDc=ccb;qDc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} +function yFc(){yFc=ccb;xFc=c3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb,y8b)} +function Rpc(){Rpc=ccb;Ppc=new Tpc('LAYER_SWEEP',0);Opc=new Tpc(Tne,1);Qpc=new Tpc(ane,2)} +function RLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return BD(Ikb(c.a,d-1),10)}return null} +function Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))} +function kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))} +function lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))} +function Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))} +function zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} +function VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} +function pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))} +function PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))} +function jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))} +function Rdd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}} +function dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)} +function g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)} +function _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} +function Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))} +function pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)} +function umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)} +function aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} +function P2b(a){var b;b=vNb(a,(wtc(),$sc));if(JD(b,160)){return O2b(BD(b,160))}return null} +function Kp(a){var b;a=$wnd.Math.max(a,2);b=geb(a);if(a>b){b<<=1;return b>0?b:Iie}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d} +function IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}} +function N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))} +function DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))} +function jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))} +function _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))} +function $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){NC(b,d,a.a[e])}} +function rqb(a,b){var c;uCb(b);c=b.g;if(!a.b[c]){NC(a.b,c,b);++a.c;return true}return false} +function eub(a,b){var c;c=b==null?-1:Jkb(a.b,b,0);if(c<0){return false}fub(a,c);return true} +function fub(a,b){var c;c=Kkb(a.b,a.b.c.length-1);if(b<a.b.c.length){Nkb(a.b,b,c);bub(a,b)}} +function eyb(a,b){((oyb(),lyb)?null:b.c).length==0&&qyb(b,new zyb);Shb(a.a,lyb?null:b.c,b)} +function M5b(a,b){Odd(b,'Hierarchical port constraint processing',1);N5b(a);P5b(a);Qdd(b)} +function GOb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),266);a.b=true;Qqb(a.e,c);c.b=a}} +function Owb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} +function Gec(a,b){var c,d;c=BD(vNb(a,(Nyc(),ayc)),8);d=BD(vNb(b,ayc),8);return Kdb(c.b,d.b)} +function jfc(a){oEb.call(this);this.b=Edb(ED(vNb(a,(Nyc(),lyc))));this.a=BD(vNb(a,Swc),218)} +function XGc(a,b,c){uEc.call(this,a,b,c);this.a=new Lqb;this.b=new Lqb;this.d=new $Gc(this)} +function ku(a){this.e=a;this.d=new Uqb(Cv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} +function BHc(a){this.b=a;this.a=KC(WD,oje,25,a+1,15,1);this.c=KC(WD,oje,25,a,15,1);this.d=0} +function THc(a,b,c){var d;d=new Rkb;UHc(a,b,d,c,true,true);a.b=new BHc(d.c.length);return d} +function nMc(a,b){var c;c=BD(Ohb(a.c,b),458);if(!c){c=new uMc;c.c=b;Rhb(a.c,c.c,c)}return c} +function $B(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} +function pRd(a){var b;if(a.b==null){return LRd(),LRd(),KRd}b=a.Lk()?a.Kk():a.Jk();return b} +function r$c(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),33);dld(b,0);eld(b,0)}} +function HSb(){HSb=ccb;FSb=new Lsd(Ime);GSb=new Lsd(Jme);ESb=new Lsd(Kme);DSb=new Lsd(Lme)} +function y5b(){y5b=ccb;x5b=new z5b('TO_INTERNAL_LTR',0);w5b=new z5b('TO_INPUT_DIRECTION',1)} +function PUc(){PUc=ccb;NUc=new RUc('P1_NODE_PLACEMENT',0);OUc=new RUc('P2_EDGE_ROUTING',1)} +function Fkc(){Fkc=ccb;Ekc=new Gkc('START',0);Dkc=new Gkc('MIDDLE',1);Ckc=new Gkc('END',2)} +function I9b(){I9b=ccb;H9b=new Msd('edgelabelcenterednessanalysis.includelabel',(Bcb(),zcb))} +function Zyc(a,b){MAb(JAb(new YAb(null,new Kub(new Pib(a.b),1)),new bfd(a,b)),new ffd(a,b))} +function $Xc(){this.c=new jVc(0);this.b=new jVc(Tqe);this.d=new jVc(Sqe);this.a=new jVc(cme)} +function $Fc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);eFc(b,new oHc(b.e))}} +function ZFc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);dFc(b,new nHc(b.f))}} +function pnd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.zb))} +function cod(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,c,a.xb))} +function dod(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.yb))} +function Knd(a,b){var c,d;c=(d=new OJd,d);c.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),c)} +function Qnd(a,b){var c,d;d=(c=new FUd,c);d.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),d)} +function ktb(a,b){var c,d;c=a.Pc();Klb(c,0,c.length,b);for(d=0;d<c.length;d++){a._c(d,c[d])}} +function ye(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} +function Bx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} +function SA(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+UA(a)} +function Jq(a,b){var c;if(JD(b,14)){c=BD(b,14);return a.Gc(c)}return fr(a,BD(Qb(b),20).Kc())} +function Bnc(a,b,c){Cnc.call(this,b,c);this.d=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.d)} +function IMc(a){a.a=null;a.e=null;a.b.c=KC(SI,Uhe,1,0,5,1);a.f.c=KC(SI,Uhe,1,0,5,1);a.c=null} +function gKd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} +function Poc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new fpc(a)),b))))} +function Soc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new dpc(a)),b))))} +function Q2b(a,b){Odd(b,zne,1);MAb(LAb(new YAb(null,new Kub(a.b,16)),new U2b),new W2b);Qdd(b)} +function SXc(a,b){var c,d;c=BD(hkd(a,(ZWc(),SWc)),19);d=BD(hkd(b,SWc),19);return beb(c.a,d.a)} +function p7c(a,b,c){var d,e;for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);d.a+=b;d.b+=c}return a} +function uo(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} +function vo(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} +function khb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} +function rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c<a;++c){d.c[d.c.length]=b}return new Yob(d)} +function Zzb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.b)} +function $zb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.c)} +function uAb(a){var b;b=tAb(a);if(Bbb(b.a,0)){return Utb(),Utb(),Ttb}return Utb(),new Xtb(b.b)} +function zZb(a){if(a.b.c.i.k==(j0b(),e0b)){return BD(vNb(a.b.c.i,(wtc(),$sc)),11)}return a.b.c} +function AZb(a){if(a.b.d.i.k==(j0b(),e0b)){return BD(vNb(a.b.d.i,(wtc(),$sc)),11)}return a.b.d} +function Vnd(a,b,c,d,e,f,g,h,i,j,k,l,m){aod(a,b,c,d,e,f,g,h,i,j,k,l,m);MJd(a,false);return a} +function tJb(a,b,c,d,e,f,g){$r.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=Ou(g)} +function $bb(a,b){typeof window===Jhe&&typeof window['$gwt']===Jhe&&(window['$gwt'][a]=b)} +function pWb(a,b){lWb();return a==hWb&&b==kWb||a==kWb&&b==hWb||a==jWb&&b==iWb||a==iWb&&b==jWb} +function qWb(a,b){lWb();return a==hWb&&b==iWb||a==hWb&&b==jWb||a==kWb&&b==jWb||a==kWb&&b==iWb} +function IJb(a,b){return Iy(),My(ple),$wnd.Math.abs(0-b)<=ple||0==b||isNaN(0)&&isNaN(b)?0:a/b} +function Rrc(){Orc();return OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])} +function NKd(){NKd=ccb;KKd=new KPd;MKd=OC(GC(t5,1),Mve,170,0,[]);LKd=OC(GC(n5,1),Nve,59,0,[])} +function CBc(){CBc=ccb;BBc=new DBc('NO',0);zBc=new DBc('GREEDY',1);ABc=new DBc('LOOK_BACK',2)} +function z0b(){z0b=ccb;w0b=new m1b;u0b=new h1b;v0b=new q1b;t0b=new u1b;x0b=new y1b;y0b=new C1b} +function J9b(a){var b,c,d;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d;++d}} +function nfd(a,b){var c;c=sfd(a);return mfd(new f7c(c.c,c.d),new f7c(c.b,c.a),a.rf(),b,a.Hf())} +function Udd(a,b){var c;if(a.b){return null}else{c=Pdd(a,a.g);Dsb(a.a,c);c.i=a;a.d=b;return c}} +function kUc(a,b,c){Odd(c,'DFS Treeifying phase',1);jUc(a,b);hUc(a,b);a.a=null;a.b=null;Qdd(c)} +function zic(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new Rkb;xic(this);mmb();Okb(this.a,null)} +function Aud(a){this.i=a.gc();if(this.i>0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))} +function Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}} +function G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true} +function sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e} +function tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e} +function Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}} +function $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}} +function nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)} +function oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)} +function l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)} +function Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)} +function WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} +function m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} +function Ynd(a,b,c,d){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,c);!!b&&hKd(a,b);d&&a.xk(true)} +function Yqd(a,b){var c;c=BD(b,183);Spd(c,'x',a.i);Spd(c,'y',a.j);Spd(c,Gte,a.g);Spd(c,Fte,a.f)} +function LFc(){LFc=ccb;KFc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} +function dHc(){dHc=ccb;cHc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} +function sXc(){sXc=ccb;qXc=new uXc(ane,0);rXc=new uXc('POLAR_COORDINATE',1);pXc=new uXc('ID',2)} +function TAc(){TAc=ccb;QAc=new UAc('EQUALLY',0);RAc=new UAc(xle,1);SAc=new UAc('NORTH_SOUTH',2)} +function pAc(){pAc=ccb;oAc=as((kAc(),OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])))} +function Flc(){Flc=ccb;Elc=as((Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])))} +function e6c(){e6c=ccb;d6c=as((_5c(),OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])))} +function Hsd(){Hsd=ccb;Gsd=as((Csd(),OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])))} +function XNb(){XNb=ccb;VNb=new Msd('debugSVG',(Bcb(),false));WNb=new Msd('overlapsExisted',true)} +function Xyb(a,b){return Ayb(new tzb(a),new vzb(b),new xzb(b),new zzb,OC(GC(xL,1),Kie,132,0,[]))} +function hyb(){var a;if(!dyb){dyb=new gyb;a=new wyb('');uyb(a,($xb(),Zxb));eyb(dyb,a)}return dyb} +function hr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!QNc(BD(c,10))){return false}}return true} +function T3c(a,b){var c;c=h4c(n4c(),a);if(c){jkd(b,(Y9c(),F9c),c);return true}else{return false}} +function d3c(a,b){var c;for(c=0;c<b.j.c.length;c++){BD(B2c(a,c),21).Gc(BD(B2c(b,c),14))}return a} +function M9b(a,b){var c,d;for(d=new olb(b.b);d.a<d.c.c.length;){c=BD(mlb(d),29);a.a[c.p]=_$b(c)}} +function stb(a,b){var c,d;uCb(b);for(d=a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);b.Od(c.cd(),c.dd())}} +function cId(a,b){var c;if(JD(b,83)){BD(a.c,76).Xj();c=BD(b,83);IAd(a,c)}else{BD(a.c,76).Wb(b)}} +function Su(a){return JD(a,152)?km(BD(a,152)):JD(a,131)?BD(a,131).a:JD(a,54)?new ov(a):new dv(a)} +function fac(a,b){return b<a.b.gc()?BD(a.b.Xb(b),10):b==a.b.gc()?a.a:BD(Ikb(a.e,b-a.b.gc()-1),10)} +function crb(a,b){a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=wbb(a.d,b)} +function n3b(a,b){var c;Odd(b,'Edge and layer constraint edge reversal',1);c=m3b(a);l3b(c);Qdd(b)} +function tAd(a){var b;if(a.d==null){++a.e;a.f=0;sAd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;sAd(b)}} +function zbb(a){var b;b=a.h;if(b==0){return a.l+a.m*Hje}if(b==Fje){return a.l+a.m*Hje-Ije}return a} +function aKb(a){$Jb();if(a.A.Hc((tdd(),pdd))){if(!a.B.Hc((Idd(),Ddd))){return _Jb(a)}}return null} +function Zgb(a){uCb(a);if(a.length==0){throw vbb(new Oeb('Zero length BigInteger'))}dhb(this,a)} +function Vb(a){if(!a){throw vbb(new Zdb('no calls to next() since the last call to remove()'))}} +function Cbb(a){if(Kje<a&&a<Ije){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return zbb(fD(a))} +function Yyb(a,b){var c,d,e;c=a.c.Ee();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Od(c,d)}return a.b.Kb(c)} +function Uhd(a,b){var c,d,e;c=a.Jg();if(c!=null&&a.Mg()){for(d=0,e=c.length;d<e;++d){c[d].ui(b)}}} +function f_b(a,b){var c,d;c=a;d=Q_b(c).e;while(d){c=d;if(c==b){return true}d=Q_b(c).e}return false} +function lDc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} +function Si(a,b,c){var d,e;e=BD(tn(a.d,b),19);d=BD(tn(a.b,c),19);return !e||!d?null:Mi(a,e.a,d.a)} +function cYc(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),33);bld(c,c.i+b.b,c.j+b.d)}} +function qjc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),70);Ekb(a.d,c);ujc(a,c)}} +function pQc(a,b){var c,d;d=new Rkb;c=b;do{d.c[d.c.length]=c;c=BD(Ohb(a.k,c),17)}while(c);return d} +function Ajd(a,b){var c;if((a.Db&b)!=0){c=zjd(a,b);return c==-1?a.Eb:CD(a.Eb)[c]}else{return null}} +function Lnd(a,b){var c,d;c=(d=new hLd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} +function Mnd(a,b){var c,d;c=(d=new MPd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} +function Hkd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return dkd(a,b)} +function gNc(a){switch(a.a.g){case 1:return new NNc;case 3:return new vQc;default:return new wNc;}} +function MRd(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}} +function kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)} +function Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)} +function Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a<c.c.a.length;){b=Fqb(c);a.b.Hc(b)&&++d}return d} +function Ku(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} +function Zwb(a,b){var c;this.c=a;c=new Rkb;Ewb(a,c,b,a.b,null,false,null,false);this.a=new Bib(c,0)} +function p4d(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(Q6d(),BD(a,66).Oj());this.k=S6d(b.e.Tg(),a)} +function xwb(a,b,c){this.b=(uCb(a),a);this.d=(uCb(b),b);this.e=(uCb(c),c);this.c=this.d+(''+this.e)} +function xRb(){this.a=BD(Ksd((wSb(),eSb)),19).a;this.c=Edb(ED(Ksd(uSb)));this.b=Edb(ED(Ksd(qSb)))} +function Nbd(){Nbd=ccb;Mbd=as((Hbd(),OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])))} +function wFb(){wFb=ccb;vFb=as((rFb(),OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])))} +function vLb(){vLb=ccb;uLb=new wLb('UP',0);rLb=new wLb(vle,1);sLb=new wLb(jle,2);tLb=new wLb(kle,3)} +function rTc(){rTc=ccb;qTc=(STc(),QTc);pTc=new Nsd(Zqe,qTc);oTc=($Tc(),ZTc);nTc=new Nsd($qe,oTc)} +function Xrc(){Xrc=ccb;Vrc=new Yrc('ONE_SIDED',0);Wrc=new Yrc('TWO_SIDED',1);Urc=new Yrc('OFF',2)} +function TQc(a){a.r=new Tqb;a.w=new Tqb;a.t=new Rkb;a.i=new Rkb;a.d=new Tqb;a.a=new I6c;a.c=new Lqb} +function uOc(a){this.n=new Rkb;this.e=new Psb;this.j=new Psb;this.k=new Rkb;this.f=new Rkb;this.p=a} +function PEc(a,b){if(a.c){QEc(a,b,true);MAb(new YAb(null,new Kub(b,16)),new bFc(a))}QEc(a,b,false)} +function wFc(a,b,c){return a==(rGc(),qGc)?new pFc:Cub(b,1)!=0?new iHc(c.length):new RGc(c.length)} +function tNb(a,b){var c;if(!b){return a}c=b.Ve();c.dc()||(!a.q?(a.q=new Nqb(c)):Ld(a.q,c));return a} +function Erb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{urb(a.a,b);--a.c;zpb(a.b)}return c} +function UYb(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Kdb(d,e)}return c} +function XLb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} +function KZb(a){if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}return JZb(a)} +function Pq(a){var b;if(a){b=a;if(b.dc()){throw vbb(new utb)}return b.Xb(b.gc()-1)}return nr(a.Kc())} +function vgb(a){var b;ybb(a,0)<0&&(a=Lbb(a));return b=Tbb(Obb(a,32)),64-(b!=0?heb(b):heb(Tbb(a))+32)} +function QNc(a){var b;b=BD(vNb(a,(wtc(),Hsc)),61);return a.k==(j0b(),e0b)&&(b==(Ucd(),Tcd)||b==zcd)} +function bZb(a,b,c){var d,e;e=BD(vNb(a,(Nyc(),jxc)),74);if(e){d=new s7c;o7c(d,0,e);q7c(d,c);ye(b,d)}} +function M_b(a,b,c){var d,e,f,g;g=Q_b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} +function dcc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(Ucd(),Acd)?a.p-b.p:b.p-a.p} +function dmc(a){var b,c;bmc(a);for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),101);!!b.i&&cmc(b)}} +function lBc(a,b,c,d,e){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d);NC(a.b[b.g],c.g,e);NC(a.b[c.g],b.g,e)} +function G1c(a,b,c,d){BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);BD(d.b,65);Hkb(d.a,new L1c(a,b,d))} +function WDb(a,b){a.d==(ead(),aad)||a.d==dad?BD(b.a,57).c.Fc(BD(b.b,57)):BD(b.b,57).c.Fc(BD(b.a,57))} +function Gkd(a,b,c,d){if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Txd(a.n,b,d)}return ckd(a,b,c,d)} +function Gnd(a,b){var c,d;d=(c=new BYd,c);pnd(d,b);wtd((!a.A&&(a.A=new K4d(u5,a,7)),a.A),d);return d} +function Zqd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,Jte);d=new jrd(a,c);f=(lqd(d.a,d.b,e),e);return f} +function KJd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.kh()){b=wId(a);JD(b,148)&&(a.a=BD(b,148))}return a.a} +function Be(a,b){var c,d;uCb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} +function cD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} +function bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)} +function ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b} +function btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}} +function Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false} +function kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()} +function Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true} +function Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a} +function yac(a,b){var c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);yNb(c,(wtc(),Ssc),b)}} +function FZc(a,b,c){var d,e;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),33);bld(d,d.i+b,d.j+c)}} +function Nb(a,b){if(!a){throw vbb(new Wdb(hc('value already present: %s',OC(GC(SI,1),Uhe,1,5,[b]))))}} +function mEb(a,b){if(!a||!b||a==b){return false}return CDb(a.d.c,b.d.c+b.d.b)&&CDb(b.d.c,a.d.c+a.d.b)} +function xyb(){oyb();if(lyb){return new wyb(null)}return fyb(hyb(),'com.google.common.base.Strings')} +function J2c(a,b){var c;c=Pu(b.a.gc());MAb(VAb(new YAb(null,new Kub(b,1)),a.i),new W2c(a,c));return c} +function Hnd(a){var b,c;c=(b=new BYd,b);pnd(c,'T');wtd((!a.d&&(a.d=new K4d(u5,a,11)),a.d),c);return c} +function Etd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.ki(c);b=31*b+(d==null?0:tb(d))}return b} +function Wi(a,b,c,d){var e;Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());e=a.a[b][c];NC(a.a[b],c,d);return e} +function OC(a,b,c,d,e){e.gm=a;e.hm=b;e.im=gcb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function p6c(a,b,c,d,e){i6c();return $wnd.Math.min(A6c(a,b,c,d,e),A6c(c,d,a,b,V6c(new f7c(e.a,e.b))))} +function gbc(){gbc=ccb;fbc=new ibc(ane,0);dbc=new ibc(Gne,1);ebc=new ibc(Hne,2);cbc=new ibc('BOTH',3)} +function Ajc(){Ajc=ccb;wjc=new Bjc(gle,0);xjc=new Bjc(jle,1);yjc=new Bjc(kle,2);zjc=new Bjc('TOP',3)} +function lWb(){lWb=ccb;hWb=new oWb('Q1',0);kWb=new oWb('Q4',1);iWb=new oWb('Q2',2);jWb=new oWb('Q3',3)} +function LBc(){LBc=ccb;JBc=new MBc('OFF',0);KBc=new MBc('SINGLE_EDGE',1);IBc=new MBc('MULTI_EDGE',2)} +function a1c(){a1c=ccb;_0c=new c1c('MINIMUM_SPANNING_TREE',0);$0c=new c1c('MAXIMUM_SPANNING_TREE',1)} +function Y1c(){Y1c=ccb;new Lsd('org.eclipse.elk.addLayoutConfig');W1c=new k2c;V1c=new f2c;X1c=new i2c} +function URc(a){var b,c,d;b=new Psb;for(d=Jsb(a.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Dsb(b,c.c)}return b} +function dVc(a){var b,c,d,e;e=new Rkb;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),33);b=gVc(c);Gkb(e,b)}return e} +function xcc(a){var b;PZb(a,true);b=_ie;wNb(a,(Nyc(),cyc))&&(b+=BD(vNb(a,cyc),19).a);yNb(a,cyc,meb(b))} +function q1c(a,b,c){var d;Uhb(a.a);Hkb(c.i,new B1c(a));d=new hDb(BD(Ohb(a.a,b.b),65));p1c(a,d,b);c.f=d} +function QLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return BD(Ikb(c.a,d+1),10)}return null} +function rr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} +function ZEd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Mbb(d,Nbb(1,c))}}return d} +function pmb(a){mmb();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} +function etd(a){var b,c;c=(Fhd(),b=new rmd,b);!!a&&wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c);return c} +function TA(a){var b;b=new PA;b.a=a;b.b=RA(a);b.c=KC(ZI,nie,2,2,6,1);b.c[0]=SA(a);b.c[1]=SA(a);return b} +function fkd(a,b){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));a.o.c.$b();return;}Cid(a,b)} +function jEb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} +function sbd(a){switch(a.g){case 1:return obd;case 2:return nbd;case 3:return pbd;default:return qbd;}} +function Zac(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 2:case 4:return true;default:return false;}} +function Trc(){Trc=ccb;Src=as((Orc(),OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])))} +function Ndd(){Ndd=ccb;Mdd=as((Idd(),OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])))} +function wUc(){wUc=ccb;vUc=e3c(b3c(b3c(g3c(e3c(new j3c,(yRc(),vRc),(qSc(),pSc)),wRc),mSc),nSc),xRc,oSc)} +function Gqc(){Gqc=ccb;Eqc=new Hqc(ane,0);Dqc=new Hqc('INCOMING_ONLY',1);Fqc=new Hqc('OUTGOING_ONLY',2)} +function rC(){rC=ccb;qC={'boolean':sC,'number':tC,'string':vC,'object':uC,'function':uC,'undefined':wC}} +function Whb(a,b){mCb(a>=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)} +function _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)} +function bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0} +function I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];djc(a,b,(Ucd(),Rcd));djc(a,b,Acd)}} +function Uy(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(Rz(),e=Qz.ce(a),Tz(e))),a.j),c=0,d=b.length;c<d;++c);} +function hD(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;return TC(b,c,d)} +function C$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return _Nb(c,d)} +function xtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)} +function xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a} +function yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a} +function TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c} +function j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c} +function Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|Nic(a,b,f,e)}return c} +function nNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){YMb(a,f,g)||aNb(a,f,g,true,false)}}} +function rNd(a,b){this.b=a;nNd.call(this,(BD(qud(ZKd((NFd(),MFd).o),10),18),b.i),b.g);this.a=(NKd(),MKd)} +function hj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Hd().gc()|0;this.a=this.d%this.c.c.Hd().gc()} +function jdb(){++edb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} +function fB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+nje,b,c);this.q.setHours(0,0,0,0);YA(this,0)} +function tAc(){tAc=ccb;rAc=new uAc(ane,0);qAc=new uAc('NODES_AND_EDGES',1);sAc=new uAc('PREFER_EDGES',2)} +function RA(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+UA(a)} +function geb(a){var b;if(a<0){return Rie}else if(a==0){return 0}else{for(b=Iie;(b&a)==0;b>>=1);return b}} +function $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}} +function bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}} +function xVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=-b.g.c-b.g.b}sVb(a)} +function XDb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=-b.d.c-b.d.b}RDb(a)} +function AUd(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=wId(a);JD(b,88)&&(a.c=BD(b,26))}return a.c} +function ZC(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;a.l=b;a.m=c;a.h=d} +function l7c(a){var b,c,d,e,f;b=new d7c;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} +function nmb(a,b){mmb();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} +function w6c(a){i6c();var b,c;c=-1.7976931348623157E308;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} +function SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d} +function crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f} +function j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} +function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!BD($lb(a.a,c),169).Lb(b)){return false}}return true} +function Cb(a,b,c){Qb(b);if(c.Ob()){Mfb(b,Fb(c.Pb()));while(c.Ob()){Mfb(b,a.a);Mfb(b,Fb(c.Pb()))}}return b} +function qmb(a){mmb();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} +function WC(a,b,c,d,e){var f;f=lD(a,b);c&&ZC(f);if(e){a=YC(a,b);d?(QC=hD(a)):(QC=TC(a.l,a.m,a.h))}return f} +function Xzb(b,c){var d;try{c.Vd()}catch(a){a=ubb(a);if(JD(a,78)){d=a;b.c[b.c.length]=d}else throw vbb(a)}} +function jRb(a,b,c){var d,e;if(JD(b,144)&&!!c){d=BD(b,144);e=c;return a.a[d.b][e.b]+a.a[e.b][d.b]}return 0} +function xld(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return Ykd(a,b)} +function YQb(a,b){switch(b.g){case 0:JD(a.b,631)||(a.b=new xRb);break;case 1:JD(a.b,632)||(a.b=new DRb);}} +function Ghe(a,b){while(a.g==null&&!a.c?Uud(a):a.g==null||a.i!=0&&BD(a.g[a.i-1],47).Ob()){Ord(b,Vud(a))}} +function kic(a,b,c){a.g=qic(a,b,(Ucd(),zcd),a.b);a.d=qic(a,c,zcd,a.b);if(a.g.c==0||a.d.c==0){return}nic(a)} +function lic(a,b,c){a.g=qic(a,b,(Ucd(),Tcd),a.j);a.d=qic(a,c,Tcd,a.j);if(a.g.c==0||a.d.c==0){return}nic(a)} +function $yc(a,b,c){return !WAb(JAb(new YAb(null,new Kub(a.c,16)),new Xxb(new dfd(b,c)))).sd((EAb(),DAb))} +function KAb(a){var b;Tzb(a);b=new NBb;if(a.a.sd(b)){return Atb(),new Ftb(uCb(b.a))}return Atb(),Atb(),ztb} +function nA(a){var b;if(a.b<=0){return false}b=hfb('MLydhHmsSDkK',wfb(bfb(a.c,0)));return b>1||b>=0&&a.b<3} +function w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b} +function qVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b()}LVb(a.b,a);rVb(a)} +function tb(a){return ND(a)?LCb(a):LD(a)?Hdb(a):KD(a)?(uCb(a),a)?1231:1237:ID(a)?a.Hb():MC(a)?FCb(a):rz(a)} +function rb(a){return ND(a)?ZI:LD(a)?BI:KD(a)?wI:ID(a)?a.gm:MC(a)?a.gm:a.gm||Array.isArray(a)&&GC(PH,1)||PH} +function j_c(a){switch(a.g){case 0:return new Q1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function S0c(a){switch(a.g){case 0:return new k1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function ekd(a,b,c){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));cId(a.o,c);return;}yid(a,b,c)} +function XRc(a,b,c){this.g=a;this.e=new d7c;this.f=new d7c;this.d=new Psb;this.b=new Psb;this.a=b;this.c=c} +function PZc(a,b,c,d){this.b=new Rkb;this.n=new Rkb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} +function nib(a){this.e=a;this.d=new Irb(this.e.g);this.a=this.d;this.b=kib(this);this.$modCount=a.$modCount} +function Pr(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!akb(a.b)){a.d=BD(fkb(a.b),47)}else{return null}}return a.d} +function Xyc(a){Ekb(a.c,(Y1c(),W1c));if(Ky(a.a,Edb(ED(Ksd((dzc(),bzc)))))){return new Zed}return new _ed(a)} +function bRc(a){switch(a.g){case 1:return Sqe;default:case 2:return 0;case 3:return cme;case 4:return Tqe;}} +function Ife(){wfe();var a;if(dfe)return dfe;a=Afe(Kfe('M',true));a=Bfe(Kfe('M',false),a);dfe=a;return dfe} +function Awb(a,b){var c,d,e;e=a.b;while(e){c=a.a.ue(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} +function Tyb(a,b,c){var d,e;d=(Bcb(),_Pb(c)?true:false);e=BD(b.xc(d),15);if(!e){e=new Rkb;b.zc(d,e)}e.Fc(c)} +function dYc(a,b){var c,d;c=BD(hkd(a,(lZc(),UYc)),19).a;d=BD(hkd(b,UYc),19).a;return c==d?-1:c<d?-1:c>d?1:0} +function NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}} +function d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}} +function syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)} +function mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))} +function Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e} +function Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} +function l4c(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new v4c(a);c.Qe(g);q4c(g)}Uhb(a.f)} +function hw(a,b){var c;if(b===a){return true}if(JD(b,224)){c=BD(b,224);return pb(a.Zb(),c.Zb())}return false} +function aub(a,b){var c;if(b*2+1>=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c<a.b.c.length&&aub(a,c);bub(a,b)} +function Ss(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Kp(c);d=KC(BG,Gie,330,e,0,1);this.b=d} +function whb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1} +function UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}} +function nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c} +function JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false} +function oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false} +function Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false} +function Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false} +function Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb("The 'no null' constraint is violated"))}return b} +function $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)} +function XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a} +function b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}} +function c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}} +function Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)} +function pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)} +function pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)} +function Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)} +function nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)} +function Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)} +function tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)} +function Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c} +function o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)} +function r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d} +function $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null} +function Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))} +function Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)} +function le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} +function rwb(a){var b;b=a.a.c.length;if(b>0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}} +function C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(b<a.j.c.length){Nkb(a.j,b,c)}else{A2c(a,b);Ekb(a.j,c)}} +function oCb(a,b,c){if(a>b){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}} +function j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}} +function vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.ri(a.i);$fb(b,0,a.g,0,a.i)}} +function hkb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.c,null)} +function ikb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.b,null);a.b=a.b+1&c} +function Fkb(a,b,c){var d,e;wCb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}bCb(a.c,b,d);return true} +function VEd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return a[b]}return null} +function grb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.re(b,d.cd())){return d}}return null} +function Hlb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} +function as(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} +function gr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&Qr(a);b++){Rr(a)}return b} +function eDc(a){var b,c,d;d=0;for(c=new Sr(ur(a.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||++d}return d} +function HZb(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw vbb(new Vdb)}c=Q_b(d);++e}while(true)} +function w$c(a,b){var c,d,e;e=b-a.f;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),443);_Zc(c,c.e,c.f+e)}a.f=b} +function aRc(a,b,c){if($wnd.Math.abs(b-a)<Rqe||$wnd.Math.abs(c-a)<Rqe){return true}return b-a>Rqe?a-c>Rqe:c-a>Rqe} +function pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()} +function qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()} +function fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)} +function xC(a){rC();throw vbb(new MB("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''} +function F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)} +function ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)} +function xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)} +function LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))} +function VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b} +function DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}} +function yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()} +function VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)} +function wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=ZZc(b.q,a.b);if(b.q.d>e){$Zc(b.q,e);d=c!=b.q.d}}return d} +function PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d} +function Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function j7c(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} +function E_b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} +function hFd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return false}return true} +function Ngb(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} +function vkb(a){var b;sCb(a.a!=a.b);b=a.d.a[a.a];mkb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} +function phe(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)} +function BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f} +function Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false} +function JDc(a){var b,c;for(c=new olb(a.r);c.a<c.c.c.length;){b=BD(mlb(c),10);if(a.n[b.p]<=0){return b}}return null} +function cVc(a){var b,c,d,e;e=new Tqb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);b=fVc(c);ye(e,b)}return e} +function zFc(a){var b;b=k3c(xFc);BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Krc))&&e3c(b,(qUb(),nUb),(S8b(),H8b));return b} +function qKb(a,b,c){var d;d=new AJb(a,b);Rc(a.r,b.Hf(),d);if(c&&!tcd(a.u)){d.c=new aIb(a.d);Hkb(b.wf(),new tKb(d))}} +function ybb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(!isNaN(c)){return c}}return eD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b)} +function bFd(a,b){return b<a.length&&(BCb(b,a.length),a.charCodeAt(b)!=63)&&(BCb(b,a.length),a.charCodeAt(b)!=35)} +function Kic(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new Iic(a.c,a.a,c,f),new jjc(c,a.a,e,a.e,a.b,a.c==(rGc(),pGc)))} +function Tmd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,1,e,b);!c?(c=d):c.Ei(d)}return c} +function GQd(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,3,e,b);!c?(c=d):c.Ei(d)}return c} +function IQd(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,0,e,b);!c?(c=d):c.Ei(d)}return c} +function xid(a,b){var c,d,e,f;f=(e=a?jid(a):null,q6d((d=b,e?e.Xk():null,d)));if(f==b){c=jid(a);!!c&&c.Xk()}return f} +function x6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function sAd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){BD(b.g,367);e=b.i;for(d=0;d<e;++d);}}}} +function YZc(a){var b,c,d;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);d=$wnd.Math.max(d,b.g)}return d} +function eGc(a){var b,c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),214);b=c.c.Rf()?c.f:c.a;!!b&&mHc(b,c.j)}} +function hbd(){hbd=ccb;fbd=new ibd('INHERIT',0);ebd=new ibd('INCLUDE_CHILDREN',1);gbd=new ibd('SEPARATE_CHILDREN',2)} +function Jkd(a,b){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);return;case 2:Lkd(a,null);return;}fkd(a,b)} +function Dm(a){var b;switch(a.gc()){case 0:return hm;case 1:return new my(Qb(a.Xb(0)));default:b=a;return new ux(b);}} +function Vn(a){Ql();switch(a.gc()){case 0:return yx(),xx;case 1:return new oy(a.Kc().Pb());default:return new zx(a);}} +function Up(a){Ql();switch(a.c){case 0:return yx(),xx;case 1:return new oy(qr(new Gqb(a)));default:return new Tp(a);}} +function Hv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} +function Iv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} +function Ck(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function Dk(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function Gv(b,c){Qb(b);try{return b._b(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} +function KXb(a,b){var c;if(a.a.c.length>0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))} +function $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))} +function gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a} +function u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b} +function qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a} +function Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c} +function _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c} +function vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d} +function RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c} +function o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d} +function kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()} +function vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a} +function __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.jm()}}} +function TAb(a,b){var c;c=new NBb;if(!a.a.sd(c)){Tzb(a);return Atb(),Atb(),ztb}return Atb(),new Ftb(uCb(SAb(a,c.a,b)))} +function CHc(a,b){switch(b.g){case 2:case 1:return V_b(a,b);case 3:case 4:return Su(V_b(a,b));}return mmb(),mmb(),jmb} +function pb(a,b){return ND(a)?dfb(a,b):LD(a)?Fdb(a,b):KD(a)?(uCb(a),PD(a)===PD(b)):ID(a)?a.Fb(b):MC(a)?mb(a,b):qz(a,b)} +function r6d(a){return !a?null:(a.i&1)!=0?a==sbb?wI:a==WD?JI:a==VD?FI:a==UD?BI:a==XD?MI:a==rbb?UI:a==SD?xI:yI:a} +function Fhb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Hhb(e,c,d,a[0])):d==1?(e[b]=Hhb(e,a,b,c[0])):Ghb(a,c,e,b,d)} +function c6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new o6b);_5b(c,b)} +function i6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new t6b);_5b(c,b)} +function Ekd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new cUd(D2,a,1,7)),a.n;case 2:return a.k;}return bkd(a,b,c,d)} +function ead(){ead=ccb;cad=new iad(ole,0);bad=new iad(kle,1);aad=new iad(jle,2);_9c=new iad(vle,3);dad=new iad('UP',4)} +function RXb(){RXb=ccb;QXb=new SXb(ane,0);PXb=new SXb('INSIDE_PORT_SIDE_GROUPS',1);OXb=new SXb('FORCE_MODEL_ORDER',2)} +function xCb(a,b,c){if(a<0||b>c){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}} +function eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}} +function Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.ue(a[b],a[i])<=0?NC(e,f++,a[b++]):NC(e,f++,a[i++])}} +function yZb(a,b,c,d,e,f){this.e=new Rkb;this.f=(KAc(),JAc);Ekb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} +function VOd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),26);if(PD(b)===PD(c)){return true}}return false} +function uJb(a){qJb();var b,c,d,e;for(c=wJb(),d=0,e=c.length;d<e;++d){b=c[d];if(Jkb(b.a,a,0)!=-1){return b}}return pJb} +function jFd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a} +function OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c} +function BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))} +function eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} +function CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))} +function fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))} +function N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)} +function meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)} +function Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)} +function L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false} +function i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null} +function l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null} +function cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false} +function vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)} +function iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null} +function $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+"' is not a valid attribute"))} +function V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} +function ede(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} +function lYb(a){var b,c,d;b=new Rkb;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),594);Gkb(b,BD(c.jf(),14))}return b} +function SSc(a){var b,c,d;b=BD(vNb(a,(mTc(),gTc)),15);for(d=b.Kc();d.Ob();){c=BD(d.Pb(),188);Dsb(c.b.d,c);Dsb(c.c.b,c)}} +function b5b(a){switch(BD(vNb(a,(wtc(),Osc)),303).g){case 1:yNb(a,Osc,(esc(),bsc));break;case 2:yNb(a,Osc,(esc(),dsc));}} +function _Fc(a){var b;if(a.g){b=a.c.Rf()?a.f:a.a;bGc(b.a,a.o,true);bGc(b.a,a.o,false);yNb(a.o,(Nyc(),Vxc),(dcd(),Zbd))}} +function loc(a){var b;if(!a.a){throw vbb(new Zdb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;noc(a,b);ooc(a,b)} +function ckb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;NC(a.a,a.c,null);return b} +function zGb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=BD(c.Pb(),213);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} +function bLb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new J6c(b.d,0,b.a,b.b);default:return null;}} +function had(a){switch(a.g){case 2:return bad;case 1:return aad;case 4:return _9c;case 3:return dad;default:return cad;}} +function Vcd(a){switch(a.g){case 1:return Tcd;case 2:return Acd;case 3:return zcd;case 4:return Rcd;default:return Scd;}} +function Wcd(a){switch(a.g){case 1:return Rcd;case 2:return Tcd;case 3:return Acd;case 4:return zcd;default:return Scd;}} +function Xcd(a){switch(a.g){case 1:return zcd;case 2:return Rcd;case 3:return Tcd;case 4:return Acd;default:return Scd;}} +function DPc(a){switch(a){case 0:return new OPc;case 1:return new EPc;case 2:return new JPc;default:throw vbb(new Vdb);}} +function Kdb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)} +function Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}} +function vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}} +function ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))} +function dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))} +function eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))} +function fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))} +function jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)} +function jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null} +function k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null} +function n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];g.rl(d.ak())&&++f}return f} +function Vsd(a,b,c){var d,e;d=BD(b.We(a.a),35);e=BD(c.We(a.a),35);return d!=null&&e!=null?Fcb(d,e):d!=null?-1:e!=null?1:0} +function ved(a,b,c){var d,e;if(a.c){Efd(a.c,b,c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ved(d,b,c)}}} +function RUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Lkb(a.b.b,c.b);fVb(BD(c.a,189),BD(c.b,81))}} +function tr(a){var b,c;c=Kfb(new Ufb,91);b=true;while(a.Ob()){b||(c.a+=She,c);b=false;Pfb(c,a.Pb())}return (c.a+=']',c).a} +function aJd(a,b){var c;c=(a.Bb&oie)!=0;b?(a.Bb|=oie):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,16,c,b))} +function MJd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} +function CUd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} +function EUd(a,b){var c;c=(a.Bb&Tje)!=0;b?(a.Bb|=Tje):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,20,c,b))} +function Tee(a){var b;b=KC(TD,$ie,25,2,15,1);a-=Tje;b[0]=(a>>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)} +function a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c} +function rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}} +function Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb("Stream already terminated, can't be modified or used"))}} +function Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a} +function ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d} +function ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f} +function pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c} +function hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c} +function Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje<c&&c<Ije){return c}}return zbb(nD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function wbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a+b;if(Kje<c&&c<Ije){return c}}return zbb(cD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function Ibb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a*b;if(Kje<c&&c<Ije){return c}}return zbb(gD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} +function V_b(a,b){var c;a.i||N_b(a);c=BD(Mpb(a.g,b),46);return !c?(mmb(),mmb(),jmb):new Jib(a.j,BD(c.a,19).a,BD(c.b,19).a)} +function Drb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;zpb(a.b)}else{++a.d}return d} +function kNb(a,b,c){a.n=IC(XD,[nie,Sje],[364,25],14,[c,QD($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} +function Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke} +function O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.b)}return Qb(b),new sl(b)} +function R_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.e)}return Qb(b),new sl(b)} +function U_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.g)}return Qb(b),new sl(b)} +function n6d(a){var b,c;for(c=o6d(bKd(WId(a))).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b))return FFd((EFd(),DFd),b)}return null} +function wm(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw vbb(new Heb('at index '+c))}}b=a;return new amb(b)} +function wid(a,b){var c;c=YKd(a.Tg(),b);if(JD(c,99)){return BD(c,18)}throw vbb(new Wdb(ite+b+"' is not a valid reference"))} +function Tdb(a){var b;b=Hcb(a);if(b>3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b} +function aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)} +function Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e} +function EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)} +function LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e} +function efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))} +function Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)} +function Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)} +function zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)} +function Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)} +function tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)} +function Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b))} +function yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)} +function t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];Xrb(a.c.e,d,b)}}} +function Ilb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}} +function did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}} +function xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}} +function iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)} +function Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)} +function MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)} +function fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)} +function _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),14);b=new MOb;GOb(b,c);Qqb(this.a,b)}} +function cKb(a){$Jb();var b,c,d,e;b=a.o.b;for(d=BD(BD(Qc(a.r,(Ucd(),Rcd)),21),84).Kc();d.Ob();){c=BD(d.Pb(),111);e=c.e;e.b+=b}} +function ag(a){var b;if(a.b){ag(a.b);if(a.b.d!=a.c){throw vbb(new Apb)}}else if(a.d.dc()){b=BD(a.f.c.xc(a.e),14);!!b&&(a.d=b)}} +function fFd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)} +function OEd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(_Ed((BCb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} +function JOb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);if(t6c(b,c.d)||o6c(b,c.d)){return true}}return false} +function Q9b(a,b){var c,d,e;d=N9b(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} +function NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c<d.length;c++){f=MCd(a,d[c],c);c!=f&&Wxd(a,c,f)}} +function EHb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b<c;){Efb(d,xfb(a.ki(b)));++b<c&&(d.a+=She,d)}d.a+=']';return d.a} +function fsd(a){var b,c,d,e,f;f=hsd(a);c=Fhe(a.c);d=!c;if(d){e=new wB;cC(f,'knownLayouters',e);b=new qsd(e);reb(a.c,b)}return f} +function Ce(a,b){var c,d,e;uCb(b);c=false;for(d=new olb(a);d.a<d.c.c.length;){e=mlb(d);if(ze(b,e,false)){nlb(d);c=true}}return c} +function UGb(a){var b,c,d;d=Edb(ED(a.a.We((Y9c(),Q9c))));for(c=new olb(a.a.xf());c.a<c.c.c.length;){b=BD(mlb(c),680);XGb(a,b,d)}} +function MUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Ekb(a.b.b,BD(c.b,81));eVb(BD(c.a,189),BD(c.b,81))}} +function XCc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Dkb(e,0,new H1b(a.a))}$_b(b,BD(Ikb(e,e.c.length-c),29));a.b[b.p]=c} +function JTb(a,b,c){var d;d=c;!d&&(d=Ydd(new Zdd,0));Odd(d,Vme,2);qZb(a.b,b,Udd(d,1));LTb(a,b,Udd(d,1));_Yb(b,Udd(d,1));Qdd(d)} +function eKc(a,b,c,d,e){FJc();AFb(DFb(CFb(BFb(EFb(new FFb,0),e.d.e-a),b),e.d));AFb(DFb(CFb(BFb(EFb(new FFb,0),c-e.a.e),e.a),d))} +function e$c(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&q$c(this.c,this.b,this.a)} +function ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))} +function I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}} +function Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false} +function Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}} +function Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)} +function gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}} +function b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} +function qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb} +function hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b} +function bhb(a){var b,c,d;if(a<Fgb.length){return Fgb[a]}c=a>>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<<b;return new Vgb(1,c+1,d)} +function O2b(a){var b,c,d;c=a.zg();if(c){b=a.Ug();if(JD(b,160)){d=O2b(BD(b,160));if(d!=null){return d+'.'+c}}return c}return null} +function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(PD(b)===PD(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} +function zvd(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.Hi(b,a.oi(b,d));++b}return true}} +function yA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false} +function s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}} +function Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=BD(a.g[c],366);if(d.Di(b)){return false}}return wtd(a,b)}} +function pvd(a){var b,c,d,e;b=new wB;for(e=new Dnb(a.b.Kc());e.b.Ob();){d=BD(e.b.Pb(),686);c=lsd(d);uB(b,b.a.length,c)}return b.a} +function cLb(a){var b;!a.c&&(a.c=new VKb);Okb(a.d,new jLb);_Kb(a);b=UKb(a);MAb(new YAb(null,new Kub(a.d,16)),new CLb(a));return b} +function mKd(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (instanceClassName: ';Efb(b,a.D);b.a+=')';return b.a} +function Pqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new bsd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new csd(a);imd(d.a,(uCb(f),f))}} +function Eqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new Yrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new _rd(a);pmd(d.a,(uCb(f),f))}} +function bLd(a,b){var c,d,e;c=(a.i==null&&TKd(a),a.i);d=b.aj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} +function tNd(a){var b,c,d,e,f;c=BD(a.g,674);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(uNd(a,b,f)){tud(a,d);break}}}} +function jCb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} +return c&&(c.stack||d(b[Yie]))} +function nm(a){im();var b;b=a.Pc();switch(b.length){case 0:return hm;case 1:return new my(Qb(b[0]));default:return new ux(wm(b));}} +function W_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),u0b));case 2:return Nq(a.j,(z0b(),w0b));default:return mmb(),mmb(),jmb;}} +function $kd(a,b){switch(b){case 3:ald(a,0);return;case 4:cld(a,0);return;case 5:dld(a,0);return;case 6:eld(a,0);return;}Jkd(a,b)} +function dzc(){dzc=ccb;Vyc();bzc=(Nyc(),vyc);czc=Ou(OC(GC(Q3,1),zqe,146,0,[kyc,lyc,nyc,oyc,ryc,syc,tyc,uyc,xyc,zyc,myc,pyc,wyc]))} +function Y9b(a){var b,c;b=a.d==(Apc(),vpc);c=U9b(a);b&&!c||!b&&c?yNb(a.a,(Nyc(),mwc),(F7c(),D7c)):yNb(a.a,(Nyc(),mwc),(F7c(),C7c))} +function XAb(a,b){var c;c=BD(GAb(a,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);return c.Qc(aBb(c.gc()))} +function Ded(){Ded=ccb;Ced=new Eed('SIMPLE',0);zed=new Eed('GROUP_DEC',1);Bed=new Eed('GROUP_MIXED',2);Aed=new Eed('GROUP_INC',3)} +function CWd(){CWd=ccb;AWd=new DWd;tWd=new GWd;uWd=new JWd;vWd=new MWd;wWd=new PWd;xWd=new SWd;yWd=new VWd;zWd=new YWd;BWd=new _Wd} +function FHb(a,b,c){tHb();oHb.call(this);this.a=IC(oN,[nie,ile],[595,212],0,[sHb,rHb],2);this.c=new I6c;this.g=a;this.f=b;this.d=c} +function pNb(a,b){this.n=IC(XD,[nie,Sje],[364,25],14,[b,QD($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} +function r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)} +function NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e<b;e++){d=wbb(d,xbb(a[e],Yje));a[e]=Tbb(d);d=Obb(d,32)}return Tbb(d)} +function $Ed(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b<64&&(e=Mbb(e,Nbb(1,b)))}return e} +function S9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} +function xud(a,b){var c;if(a.i>0){if(b.length<a.i){c=izd(rb(b).c,a.i);b=c}$fb(a.g,0,b,0,a.i)}b.length>a.i&&NC(b,a.i,null);return b} +function Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c} +function HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} +function _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b} +function pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d} +function Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false} +function qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}} +function AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null} +function R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(f.rl(d.ak())){return false}}return true} +function B6d(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!BD(a.b,49).Zg()){return true}}a.b=null;return false}else{return true}} +function Myd(b,c){b.mj();try{b.d.Vc(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function IA(a,b){GA();var c,d;c=LA((KA(),KA(),JA));d=null;b==c&&(d=BD(Phb(FA,a),615));if(!d){d=new HA(a);b==c&&Shb(FA,a,d)}return d} +function Epb(a,b){var c,d;a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} +function ogb(a,b){var c;a.c=b;a.a=hhb(b);a.a<54&&(a.f=(c=b.d>1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))} +function Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje<c&&c<Ije){return c}}return zbb((UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,true),QC))} +function p5b(a,b){var c;m5b(b);c=BD(vNb(a,(Nyc(),Rwc)),276);!!c&&yNb(a,Rwc,Tqc(c));n5b(a.c);n5b(a.f);o5b(a.d);o5b(BD(vNb(a,wxc),207))} +function rHc(a){this.e=KC(WD,oje,25,a.length,15,1);this.c=KC(sbb,dle,25,a.length,16,1);this.b=KC(sbb,dle,25,a.length,16,1);this.f=0} +function BDc(a){var b,c;a.j=KC(UD,Vje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.j[b.p]=b.o.b/a.i}} +function yic(a){var b;if(a.c==0){return}b=BD(Ikb(a.a,a.b),287);b.b==1?(++a.b,a.b<a.a.c.length&&Cic(BD(Ikb(a.a,a.b),287))):--b.b;--a.c} +function eac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(U_b(b).a.Kc(),new Sq))),17).d.i;b.k==(j0b(),g0b)&&Ekb(a.e,b)}while(b.k==(j0b(),g0b))} +function idd(){idd=ccb;fdd=new q0b(15);edd=new Osd((Y9c(),f9c),fdd);hdd=new Osd(T9c,15);gdd=new Osd(E9c,meb(0));ddd=new Osd(r8c,tme)} +function tdd(){tdd=ccb;rdd=new udd('PORTS',0);sdd=new udd('PORT_LABELS',1);qdd=new udd('NODE_LABELS',2);pdd=new udd('MINIMUM_SIZE',3)} +function Ree(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)Ufe(a,(BCb(c,b.length),b.charCodeAt(c)),(BCb(c+1,b.length),b.charCodeAt(c+1)))} +function _Zc(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),187);OZc(d,d.s+f,d.t+g)}a.e=b;a.f=c} +function jUc(a,b){var c,d,e,f;f=b.b.b;a.a=new Psb;a.b=KC(WD,oje,25,f,15,1);c=0;for(e=Jsb(b.b,0);e.b!=e.d.c;){d=BD(Xsb(e),86);d.g=c++}} +function ihb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f} +function Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}} +function Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g} +function hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))} +function zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),200);w$c(f,f.f+d*e);t$c(f,b,d);++e}} +function hnc(a,b,c){var d,e,f,g;e=BD(Ohb(a.b,c),177);d=0;for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),113);e[f.d.p]&&++d}return d} +function mzd(a){var b,c;b=BD(Ajd(a.a,4),126);if(b!=null){c=KC($3,hve,415,b.length,0,1);$fb(b,0,c,0,b.length);return c}else{return jzd}} +function Cz(){var a;if(xz!=0){a=sz();if(a-yz>2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false} +function wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true} +function Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false} +function Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))>0} +function DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<0} +function CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<=0} +function ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} +function zfb(a,b,c){var d,e,f,g;f=b+c;ACb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=vfb(a.slice(e,d));e=d}return g} +function N9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function Q9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function R9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} +function ted(a,b){var c,d,e;if(a.c){cld(a.c,b)}else{c=b-red(a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),157);ted(d,red(d)+c)}}} +function sed(a,b){var c,d,e;if(a.c){ald(a.c,b)}else{c=b-qed(a);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),157);sed(d,qed(d)+c)}}} +function t6d(a,b){var c,d,e,f;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=s6d(a,BD(c,56));!!f&&(e.c[e.c.length]=f,true)}return e} +function LAd(a,b){var c,d,e;a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){JAd(a,c);return c.dd()}else{return null}} +function rde(a){var b,c;c=sde(a);b=null;while(a.c==2){nde(a);if(!b){b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,c);c=b}c.$l(sde(a))}return c} +function Wpd(a){var b,c,d;d=null;b=Vte in a.a;c=!b;if(c){throw vbb(new cqd('Every element must have an id.'))}d=Vpd(aC(a,Vte));return d} +function jid(a){var b,c,d;d=a.Zg();if(!d){b=0;for(c=a.eh();c;c=c.eh()){if(++b>Wje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d} +function fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null} +function fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}} +function uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))} +function Igb(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*whb(a.a,b.a,a.d)} +function Zcb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c<e);if(c>=f){hkb(a,b);return -1}else{ikb(a,b);return 1}} +function lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BCb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} +function sJb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} +function bC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(rC(),qC)[typeof c];var e=d?d(c):xC(typeof c);return e} +function b3c(a,b){if(a.a<0){throw vbb(new Zdb('Did not call before(...) or after(...) before calling add(...).'))}i3c(a,a.a,b);return a} +function VOc(a,b,c,d){var e,f;if(b.c.length==0){return}e=ROc(c,d);f=QOc(b);MAb(VAb(new YAb(null,new Kub(f,1)),new cPc),new gPc(a,c,e,d))} +function Cjd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Bjd(a,b)}else{d=zjd(a,b);d==-1?(a.Eb=c):NC(CD(a.Eb),d,c)}}else c!=null&&vjd(a,b,c)} +function yjd(a){var b,c;if((a.Db&32)==0){c=(b=BD(Ajd(a,16),26),aLd(!b?a.zh():b)-aLd(a.zh()));c!=0&&Cjd(a,32,KC(SI,Uhe,1,c,5,1))}return a} +function W1d(a){var b;a.b||X1d(a,(b=h1d(a.e,a.a),!b||!dfb(lse,AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'qualified'))));return a.c} +function dTd(a,b,c){var d,e,f;d=BD(qud(QSd(a.a),b),87);f=(e=d.c,e?e:(jGd(),YFd));(f.kh()?xid(a.b,BD(f,49)):f)==c?KQd(d):NQd(d,c);return f} +function fCb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} +function NNb(a,b,c,d){d==a?(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b):(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b);KNb(d,b,a)} +function EOb(a){var b,c,d;b=0;for(c=new olb(a.g);c.a<c.c.c.length;){BD(mlb(c),562);++b}d=new ENb(a.g,Edb(a.a),a.c);ELb(d);a.g=d.b;a.d=d.a} +function ymc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} +function MIc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} +function efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())} +function x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.il(d);if(JD(c,99)&&(BD(c,18).Bb&ote)!=0){f=b.jl(d);f!=null&&s6d(a,BD(f,56))}}} +function p1c(a,b,c){var d,e,f;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),221);d=new hDb(BD(Ohb(a.a,e.b),65));Ekb(b.a,d);p1c(a,d,e)}} +function Aeb(a){var b,c;if(ybb(a,-129)>0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)} +function _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} +function FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null} +function HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c} +function gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);eVb(this,b)}} +function Xgb(a){Hgb();if(a.length==0){this.e=0;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Jgb(this)}} +function mIb(a,b,c){oHb.call(this);this.a=KC(oN,ile,212,(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length,0,1);this.b=a;this.d=b;this.c=c} +function Kjc(a){this.d=new Rkb;this.e=new $rb;this.c=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=a} +function Vbc(a){var b,c,d,e,f,g;g=BD(vNb(a,(wtc(),$sc)),11);yNb(g,qtc,a.i.n.b);b=k_b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];RZb(c,g)}} +function Wbc(a){var b,c,d,e,f,g;c=BD(vNb(a,(wtc(),$sc)),11);yNb(c,qtc,a.i.n.b);b=k_b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];QZb(d,c)}} +function vcc(a){var b,c;if(wNb(a.d.i,(Nyc(),Nxc))){b=BD(vNb(a.c.i,Nxc),19);c=BD(vNb(a.d.i,Nxc),19);return beb(b.a,c.a)>0}else{return false}} +function q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}} +function ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}} +function OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}} +function TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}} +function tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)} +function xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))} +function b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))} +function dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)} +function _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}} +function HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a<e.c.c.length;){d=BD(mlb(e),213);f=xFb(d,b);HFb(a,f,c)}} +function umc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new f7c(0,d);case 2:case 4:return new f7c(d,0);default:return null;}} +function r2c(b,c,d){var e,f;f=BD(hgd(c.f),209);try{f.Ze(b,d);igd(c.f,f)}catch(a){a=ubb(a);if(JD(a,102)){e=a;throw vbb(e)}else throw vbb(a)}} +function Vqd(a,b,c){var d,e,f,g,h,i;d=null;h=k4c(n4c(),b);f=null;if(h){e=null;i=o5c(h,c);g=null;i!=null&&(g=a.Ye(h,i));e=g;f=e}d=f;return d} +function TTd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,13,(g=b.c,g?g:(jGd(),YFd)),(f=c.c,f?f:(jGd(),YFd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function UEd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(_Ed((BCb(b,a.length),a.charCodeAt(b)),c,d))break}return b} +function Qkb(a,b){var c,d;d=a.c.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.c[c])}b.length>d&&NC(b,d,null);return b} +function _lb(a,b){var c,d;d=a.a.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.a[c])}b.length>d&&NC(b,d,null);return b} +function Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}} +function P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid hexBinary value: '"+a+"'"))}return b} +function ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)} +function wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])} +function vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))} +function Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))} +function N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)} +function Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)} +function UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad} +function kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}} +function Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new $sb(a,b,d)} +function MEb(){MEb=ccb;LEb=new NEb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);KEb=new NEb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} +function h4b(a){var b,c,d,e;d=c4b(a);Okb(d,a4b);e=a.d;e.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),456);Gkb(e,b.b)}} +function gkd(a){var b,c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),42);b.dd()}return FAd(d)} +function N5b(a){var b;if(!ecd(BD(vNb(a,(Nyc(),Vxc)),98))){return}b=a.b;O5b((tCb(0,b.c.length),BD(b.c[0],29)));O5b(BD(Ikb(b,b.c.length-1),29))} +function Roc(a,b){var c,d,e,f;c=0;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} +function XEd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e} +function c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d} +function oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))} +function mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)} +function Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}} +function L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid base64Binary value: '"+a+"'"))}return b} +function Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} +function CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb} +function NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}} +function ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ued(d,b,c)}}} +function KEd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!dfb(a.j[c],b.j[c]))return false}return true} +function gA(a,b,c){var d;if(b.a.length>0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0<d?(b.a=b.a.substr(0,0)):0>d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}} +function JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}} +function S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c<d?-1:1} +function B$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return S6c(b.a,b.b)-S6c(b.a,E6c(c.b))-S6c(b.b,E6c(d.b))} +function aZb(a,b){var c;c=BD(vNb(a,(Nyc(),jxc)),74);if(Lq(b,ZYb)){if(!c){c=new s7c;yNb(a,jxc,c)}else{Osb(c)}}else !!c&&yNb(a,jxc,null);return c} +function a0b(a){var b;b=new Ufb;b.a+='n';a.k!=(j0b(),h0b)&&Qfb(Qfb((b.a+='(',b),Zr(a.k).toLowerCase()),')');Qfb((b.a+='_',b),P_b(a));return b.a} +function Kdc(a,b){Odd(b,'Self-Loop post-processing',1);MAb(JAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new Qdc),new Sdc),new Udc),new Wdc);Qdd(b)} +function kid(a,b,c,d){var e;if(c>=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}} +function zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)} +function Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't get element "+c))}else throw vbb(a)}} +function Tgb(a,b){this.e=a;if(b<Zje){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b|0])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[b%Zje|0,b/Zje|0])}} +function omb(a,b){mmb();var c,d,e,f;c=a;f=b;if(JD(a,21)&&!JD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} +function Txd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=tud(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{tud(a,d)}}return c} +function uwd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=Evd(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{Evd(a,d)}}return c} +function PJb(a,b){var c;c=BD(Mpb(a.b,b),124).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true} +function ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true} +function dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)} +function CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),10);b.p=GDc(b).a}mmb();Okb(a.p,new PDc)} +function eVc(a){var b,c,d,e;d=0;e=gVc(a);if(e.c.length==0){return 1}else{for(c=new olb(e);c.a<c.c.c.length;){b=BD(mlb(c),33);d+=eVc(b)}}return d} +function JJb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.b+c.b.rf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} +function RKb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.d+c.b.rf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} +function SOc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} +function AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false} +function jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a} +function jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)} +function fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)} +function u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}} +function H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}} +function kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}} +function Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b<c.length;b++){c[b]=BD(ulb(a[b],a[b].length),193)}return c} +function d4d(a){var b;if(b4d(a)){a4d(a);if(a.Lk()){b=b3d(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw vbb(new utb)}} +function fMb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} +function HLd(a,b){var c,d,e;e=rud(a,b);if(e>=0)return e;if(a.Fk()){for(d=0;d<a.i;++d){c=a.Gk(BD(a.g[d],56));if(PD(c)===PD(b)){return d}}}return -1} +function Gtd(a,b,c){var d,e;e=a.gc();if(b>=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)} +function gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}} +function mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);this.a=this.a|b.k==(j0b(),h0b)}} +function GFb(a,b){var c,d,e;c=nGb(new pGb,a);for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),121);AFb(DFb(CFb(EFb(BFb(new FFb,0),0),c),d))}return c} +function Nac(a,b,c){var d,e,f;for(e=new Sr(ur((b?R_b(a):U_b(a)).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);f=b?d.c.i:d.d.i;f.k==(j0b(),f0b)&&$_b(f,c)}} +function Izc(){Izc=ccb;Gzc=new Kzc(ane,0);Hzc=new Kzc('PORT_POSITION',1);Fzc=new Kzc('NODE_SIZE_WHERE_SPACE_PERMITS',2);Ezc=new Kzc('NODE_SIZE',3)} +function F7c(){F7c=ccb;z7c=new G7c('AUTOMATIC',0);C7c=new G7c(jle,1);D7c=new G7c(kle,2);E7c=new G7c('TOP',3);A7c=new G7c(mle,4);B7c=new G7c(gle,5)} +function Hhb(a,b,c,d){Dhb();var e,f;e=0;for(f=0;f<c;f++){e=wbb(Ibb(xbb(b[f],Yje),xbb(d,Yje)),xbb(Tbb(e),Yje));a[f]=Tbb(e);e=Pbb(e,32)}return Tbb(e)} +function zHb(a,b,c){var d,e;e=0;for(d=0;d<rHb;d++){e=$wnd.Math.max(e,pHb(a.a[b.g][d],c))}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} +function Bub(a,b){var c,d;lCb(b>0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)} +function LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b} +function qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)} +function X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} +function tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a<e.c.c.length;){d=BD(mlb(e),211);SZc(d,d.e+b-a.s);TZc(d,d.f+c-a.t)}a.s=b;a.t=c} +function JFb(a){var b,c,d,e,f;c=0;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.d=c++}b=IFb(a);f=null;b.c.length>1&&(f=GFb(a,b));return f} +function dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f} +function emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i} +function zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b} +function uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}} +function m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null} +function wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a} +function Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)} +function Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)} +function XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}} +function HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false} +function FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} +function FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a<d.c.c.length;){c=BD(mlb(d),10);b+=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)))}return b/a.c.a.c.length} +function UPc(a){var b,c;a.c||XPc(a);c=new s7c;b=new olb(a.a);mlb(b);while(b.a<b.c.c.length){Dsb(c,BD(mlb(b),407).a)}sCb(c.b!=0);Nsb(c,c.c.b);return c} +function J0c(){J0c=ccb;I0c=(A0c(),z0c);G0c=new q0b(8);new Osd((Y9c(),f9c),G0c);new Osd(T9c,8);H0c=x0c;E0c=n0c;F0c=o0c;D0c=new Osd(y8c,(Bcb(),false))} +function uld(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),a.e;case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),a.d;}return Xkd(a,b,c,d)} +function JQd(a){var b;if(!!a.a&&a.a.kh()){b=BD(a.a,49);a.a=BD(xid(a,b),138);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,5,b,a.a))}return a.a} +function yde(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}} +function kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)} +function iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}} +function V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e} +function IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.a<g.c.c.length;){f=BD(mlb(g),211);RZc(f,h,d,e);++e}} +function tEb(a){var b,c,d;zwb(a.b.a);a.a=KC(PM,Uhe,57,a.c.c.a.b.c.length,0,1);b=0;for(d=new olb(a.c.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);c.f=b++}} +function RVb(a){var b,c,d;zwb(a.b.a);a.a=KC(IP,Uhe,81,a.c.a.a.b.c.length,0,1);b=0;for(d=new olb(a.c.a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);c.i=b++}} +function P1c(a,b,c){var d;Odd(c,'Shrinking tree compaction',1);if(Ccb(DD(vNb(b,(XNb(),VNb))))){N1c(a,b.f);INb(b.f,(d=b.c,d))}else{INb(b.f,b.c)}Qdd(c)} +function mr(a){var b;b=gr(a);if(!Qr(a)){throw vbb(new qcb('position (0) must be less than the number of elements that remained ('+b+')'))}return Rr(a)} +function hNb(b,c,d){var e;try{return YMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function iNb(b,c,d){var e;try{return ZMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function jNb(b,c,d){var e;try{return $Mb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function s5b(a){switch(a.g){case 1:return Ucd(),Tcd;case 4:return Ucd(),Acd;case 3:return Ucd(),zcd;case 2:return Ucd(),Rcd;default:return Ucd(),Scd;}} +function cjc(a,b,c){if(b.k==(j0b(),h0b)&&c.k==g0b){a.d=_ic(b,(Ucd(),Rcd));a.b=_ic(b,Acd)}if(c.k==h0b&&b.k==g0b){a.d=_ic(c,(Ucd(),Acd));a.b=_ic(c,Rcd)}} +function gjc(a,b){var c,d,e;e=V_b(a,b);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),11);if(vNb(c,(wtc(),gtc))!=null||a1b(new b1b(c.b))){return true}}return false} +function QZc(a,b){dld(b,a.e+a.d+(a.c.c.length==0?0:a.b));eld(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Ekb(a.c,b);return true} +function XZc(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),187);OZc(e,e.s,e.t+g*d);IZc(e,a.d-e.r+b,d);++g}} +function H4b(a){var b,c,d,e,f;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);b=0;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=b++}}} +function r6c(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=k6c(e,d)*x6c(1-a,e-d)*x6c(a,d);g+=f.a*c;h+=f.b*c}return new f7c(g,h)} +function jud(a,b){var c,d,e,f,g;c=b.gc();a.qi(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();mud(a,d,a.oi(d,e));a.bi(d,e);a.ci()}return c!=0} +function twd(a,b,c){var d,e,f;if(a.ej()){d=a.Vi();f=a.fj();++a.j;a.Hi(d,a.oi(d,b));e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{Avd(a,a.Vi(),b)}return c} +function WOd(a,b,c){var d,e,f;d=BD(qud(VKd(a.a),b),87);f=(e=d.c,JD(e,88)?BD(e,26):(jGd(),_Fd));((f.Db&64)!=0?xid(a.b,f):f)==c?KQd(d):NQd(d,c);return f} +function Ewb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Ewb(a,b,c,i,e,f,g,h);Fwb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Ewb(a,b,c,j,e,f,g,h)} +function eAb(a,b){var c;if(!a.a){c=KC(UD,Vje,25,0,15,1);_ub(a.b.a,new iAb(c));c.sort(dcb(Ylb.prototype.te,Ylb,[]));a.a=new Avb(c,a.d)}return pvb(a.a,b)} +function YMb(b,c,d){try{return Bbb(_Mb(b,c,d),1)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function ZMb(b,c,d){try{return Bbb(_Mb(b,c,d),0)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function $Mb(b,c,d){try{return Bbb(_Mb(b,c,d),2)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function Nyd(b,c){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.d._c(b.g,c);b.f=b.d.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function rJc(a,b,c){Odd(c,'Linear segments node placement',1);a.b=BD(vNb(b,(wtc(),otc)),304);sJc(a,b);nJc(a,b);kJc(a,b);qJc(a);a.a=null;a.b=null;Qdd(c)} +function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=eCb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){NC(e,c,d.Pb())}b.length>f&&NC(b,f,null);return b} +function Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} +function Jd(a,b){var c,d,e;c=b.cd();e=b.dd();d=a.xc(c);if(!(PD(e)===PD(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} +function YC(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return TC(c,d,e)} +function yKb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} +function aLb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} +function ZOb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;YOb(this,new f7c(-e.c,-e.d));P6c(this.b,c);f=d/2;b.a?b7c(this.b,0,f):b7c(this.b,f,0);Ekb(a.c,this)} +function iXc(){iXc=ccb;hXc=new kXc(ane,0);fXc=new kXc(Vne,1);gXc=new kXc('EDGE_LENGTH_BY_POSITION',2);eXc=new kXc('CROSSING_MINIMIZATION_BY_POSITION',3)} +function Wqd(a,b){var c,d;c=BD(oo(a.g,b),33);if(c){return c}d=BD(oo(a.j,b),118);if(d){return d}throw vbb(new cqd('Referenced shape does not exist: '+b))} +function rTb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw vbb(new Wdb("Node 'one' must be either source or target of edge 'edge'."))}} +function TMc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw vbb(new Wdb('Node '+b+' is neither source nor target of edge '+a))}} +function _lc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);amc(a,b,(Ajc(),zjc),c);break;case 1:case 3:amc(a,b,(Ajc(),wjc),null);}} +function smc(a,b,c,d,e,f){var g,h,i,j,k;g=qmc(b,c,f);h=c==(Ucd(),Acd)||c==Tcd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b<d;b++){c=BD(Ikb(a.c.b,b),29);a.n[b]=Roc(a,c);a.d[b]=Qoc(a,c)}} +function zjd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} +function s3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=null;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(g.rl(d.ak())){!f&&(f=new yud);wtd(f,d)}}!!f&&Yxd(a,f)} +function H9d(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Hfb;for(c=a.Kc();c.Ob();){b=c.Pb();Efb(d,GD(b));d.a+=' '}return lcb(d,d.a.length-1)} +function Ty(a,b,c){var d,e,f,g,h;Uy(a);for(e=(a.k==null&&(a.k=KC(_I,nie,78,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];Ty(d,b,'\t'+c)}h=a.f;!!h&&Ty(h,b,c)} +function LC(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} +function PDb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}fad(a.d)?(d=a.a.c):(d=a.a.d);Hkb(d,new dEb(a));a.c.Me(a);QDb(a)} +function sRb(a){var b,c,d,e;for(c=new olb(a.e.c);c.a<c.c.c.length;){b=BD(mlb(c),282);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),447);lRb(d)}cRb(b)}} +function a$c(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} +function BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),200);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?a.g:0);++c}a.c=e;a.d=d} +function AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} +function d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}} +function e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}} +function udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)} +function ikc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tCb(e,a.c.length),BD(a.c[e],11));if(c.Mb(f)){d.c[d.c.length]=f}else{return e}}return a.c.length} +function Kmc(a,b,c,d){var e,f,g,h;a.a==null&&Nmc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} +function ehd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,33).Ag().i);for(c=new Fyd(BD(a.f,33).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function fhd(a){var b,c;if(!a.e){a.e=Qu(Yod(BD(a.f,33)).i);for(c=new Fyd(Yod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),118);Ekb(a.e,new thd(b))}}return a.e} +function ahd(a){var b,c;if(!a.a){a.a=Qu(Vod(BD(a.f,33)).i);for(c=new Fyd(Vod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),33);Ekb(a.a,new hhd(a,b))}}return a.a} +function dKd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=eKd(b);if(c){b.yk(c)}else{try{b.yk(null)}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}}return b.C} +function GJb(a){switch(a.q.g){case 5:DJb(a,(Ucd(),Acd));DJb(a,Rcd);break;case 4:EJb(a,(Ucd(),Acd));EJb(a,Rcd);break;default:FJb(a,(Ucd(),Acd));FJb(a,Rcd);}} +function PKb(a){switch(a.q.g){case 5:MKb(a,(Ucd(),zcd));MKb(a,Tcd);break;case 4:NKb(a,(Ucd(),zcd));NKb(a,Tcd);break;default:OKb(a,(Ucd(),zcd));OKb(a,Tcd);}} +function EXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} +function GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);wNb(b,(wtc(),Zsc))&&(d=$wnd.Math.min(d,BD(vNb(b,Zsc),19).a))}return d} +function pHc(a,b){var c,d;if(b.length==0){return 0}c=NHc(a.a,b[0],(Ucd(),Tcd));c+=NHc(a.a,b[b.length-1],zcd);for(d=0;d<b.length;d++){c+=qHc(a,d,b)}return c} +function vQc(){hQc();this.c=new Rkb;this.i=new Rkb;this.e=new zsb;this.f=new zsb;this.g=new zsb;this.j=new Rkb;this.a=new Rkb;this.b=new Lqb;this.k=new Lqb} +function aKd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d} +function DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b} +function P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))} +function C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))} +function Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=BD(a.Xb(c),128);if(c==a.gc()-1||!d.o){return new vgd(meb(c),d)}}return null} +function uoc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=BD(Ikb(f.a,e),10);if(!(g.k==(j0b(),d0b)||voc(g))){return false}}return true} +function u$c(a){var b,c,d,e,f;f=0;e=Qje;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} +function Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}} +function bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)} +function Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){Cmd(qud(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){Cmd(qud(a.vb,b))}}u1d((O6d(),M6d),a);a.Bb|=1} +function _nd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){aod(a,b,d,null,e,f,g,h,i,j,m,true,n);CUd(a,k);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2);!!c&&DUd(a,c);EUd(a,l);return a} +function jZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} +function kZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} +function bD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true} +function Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true} +function Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0} +function Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}} +function End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d} +function tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c} +function UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),679);b.Ke(d)}}} +function pXb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),369);b.Ke(d)}}} +function AGb(a){var b,c,d,e,f;e=Ohe;f=null;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} +function OSb(){OSb=ccb;MSb=new Nsd(Mme,(Bcb(),false));ISb=new Nsd(Nme,100);KSb=(yTb(),wTb);JSb=new Nsd(Ome,KSb);LSb=new Nsd(Pme,qme);NSb=new Nsd(Qme,meb(Ohe))} +function ric(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=CHc(d,c);for(i=k.Kc();i.Ob();){h=BD(i.Pb(),11);Rhb(a.f,h,meb(j++))}}} +function uqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} +function vqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} +function Bkc(a){gkc();var b;b=BD(Ee(Ec(a.k),KC(F1,bne,61,2,0,1)),122);Klb(b,0,b.length,null);if(b[0]==(Ucd(),Acd)&&b[1]==Tcd){NC(b,0,Tcd);NC(b,1,Acd)}return b} +function JHc(a,b,c){var d,e,f;e=HHc(a,b,c);f=KHc(a,e);yHc(a.b);cIc(a,b,c);mmb();Okb(e,new hIc(a));d=KHc(a,e);yHc(a.b);cIc(a,c,b);return new vgd(meb(f),meb(d))} +function jJc(){jJc=ccb;gJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b));hJc=new Msd('linearSegments.inputPrio',meb(0));iJc=new Msd('linearSegments.outputPrio',meb(0))} +function yRc(){yRc=ccb;uRc=new ARc('P1_TREEIFICATION',0);vRc=new ARc('P2_NODE_ORDERING',1);wRc=new ARc('P3_NODE_PLACEMENT',2);xRc=new ARc('P4_EDGE_ROUTING',3)} +function ZWc(){ZWc=ccb;UWc=(Y9c(),C9c);XWc=T9c;NWc=Y8c;OWc=_8c;PWc=b9c;MWc=W8c;QWc=e9c;TWc=x9c;KWc=(HWc(),wWc);LWc=xWc;RWc=zWc;SWc=BWc;VWc=CWc;WWc=DWc;YWc=FWc} +function rbd(){rbd=ccb;qbd=new tbd('UNKNOWN',0);nbd=new tbd('ABOVE',1);obd=new tbd('BELOW',2);pbd=new tbd('INLINE',3);new Msd('org.eclipse.elk.labelSide',qbd)} +function rud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return c}}}return -1} +function DZb(a,b,c){var d,e;if(b.c==(KAc(),IAc)&&c.c==HAc){return -1}else if(b.c==HAc&&c.c==IAc){return 1}d=HZb(b.a,a.a);e=HZb(c.a,a.a);return b.c==IAc?e-d:d-e} +function Z_b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)} +function p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)} +function $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function bgd(a,b){var c,d;d=null;if(a.Xe((Y9c(),O9c))){c=BD(a.We(O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!a.yf()&&(d=a.yf().We(b));d==null&&(d=Ksd(b));return d} +function Vt(b,c){var d,e;d=b.Zc(c);try{e=d.Pb();d.Qb();return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't remove element "+c))}else throw vbb(a)}} +function qA(a,b){var c,d,e;d=new eB;e=new fB(d.q.getFullYear()-nje,d.q.getMonth(),d.q.getDate());c=pA(a,b,e);if(c==0||c<b.length){throw vbb(new Wdb(b))}return e} +function _tb(a,b){var c,d,e;uCb(b);lCb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Ekb(a.b,uCb(c))}if(e!=a.b.c.length){aub(a,0);return true}return false} +function bTb(){bTb=ccb;VSb=(Y9c(),O8c);new Osd(B8c,(Bcb(),true));YSb=Y8c;ZSb=_8c;$Sb=b9c;XSb=W8c;_Sb=e9c;aTb=x9c;USb=(OSb(),MSb);SSb=JSb;TSb=LSb;WSb=NSb;RSb=ISb} +function MZb(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw vbb(new Wdb("'port' must be either the source port or target port of the edge."))}} +function C3b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} +function H6b(a,b,c,d){var e,f,g,h;$_b(b,BD(d.Xb(0),29));h=d.bd(1,d.gc());for(f=BD(c.Kb(b),20).Kc();f.Ob();){e=BD(f.Pb(),17);g=e.c.i==b?e.d.i:e.c.i;H6b(a,g,c,h)}} +function Xec(a){var b;b=new Lqb;if(wNb(a,(wtc(),ttc))){return BD(vNb(a,ttc),83)}MAb(JAb(new YAb(null,new Kub(a.j,16)),new Zec),new _ec(b));yNb(a,ttc,b);return b} +function cmd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb} +function MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=qud(a,e);if(b==null){if(d==null){return e}}else if(PD(b)===PD(d)||pb(b,d)){return e}}return -1} +function b1d(a,b){var c,d;c=b.Hh(a.a);if(!c){return null}else{d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Awe));return dfb(Bwe,d)?u1d(a,bKd(b.Hj())):d}} +function p6d(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=BD(b,49).eh();!!d&&d!=b;d=d.eh()){if(++c>Wje){return p6d(a,d)}if(d==a){return true}}}return false} +function HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}} +function LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}} +function XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}} +function V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}} +function v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);e=$wnd.Math.max(e,c.d)}a.b=e} +function Lld(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} +function wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r} +function yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d<c;d++){K9b(a,(tCb(d,e.c.length),BD(e.c[d],286)),R9b(a,e,d))}} +function qkc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Sjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);for(c=Ec(d.k).Kc();c.Ob();){b=BD(c.Pb(),61);kkc(a,d,b,(Fkc(),Dkc),1)}}} +function voc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&a.c==LZb(b,a).c){return true}}}return false} +function JNc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&b.c.i.c==b.d.i.c){return true}}}return false} +function HUc(a,b){var c,d,e,f;Odd(b,'Dull edge routing',1);for(f=Jsb(a.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);for(d=Jsb(e.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Osb(c.a)}}} +function xqd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new Yge(e);for(g=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);g.Ob();){f=BD(g.Pb(),19);d=Zpd(b,f.a);!!d&&ard(a,d)}}} +function DZd(){tZd();var a,b;xZd((NFd(),MFd));wZd(MFd);Tnd(MFd);FQd=(jGd(),YFd);for(b=new olb(rZd);b.a<b.c.c.length;){a=BD(mlb(b),241);QQd(a,YFd,null)}return true} +function eD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))} +function cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} +function AZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b.d);g.a<g.c.c.length;){f=BD(mlb(g),443);a$c(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.g:0);++c}b.b=d;b.e=e} +function to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}} +function cNb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;YMb(b,e,g)?jNb(a,f,h)||lNb(a,f,h):$Mb(b,e,g)&&(hNb(a,f,h)||mNb(a,f,h))}}} +function Ooc(a,b,c){var d;d=b.c.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} +function l6c(a,b,c){i6c();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a} +function ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd} +function Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d} +function qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd} +function HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c} +function nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie} +function qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)} +function s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)} +function qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f<e){d=c;e=f}}}zXc(a,a.d,0,0,dre,d)} +function E$c(a,b){var c,d,e,f;f=new Lqb;b.e=null;b.f=null;for(d=new olb(b.i);d.a<d.c.c.length;){c=BD(mlb(d),65);e=BD(Ohb(a.g,c.a),46);c.a=D6c(c.b);Rhb(f,c.a,e)}a.g=f} +function t$c(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new olb(a.d);i.a<i.c.c.length;){h=BD(mlb(i),443);d=a.b-h.b+c;_Zc(h,h.e+g*f,h.f);XZc(h,f,d);++g}} +function YBd(a){var b;a.f.qj();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} +function j0d(a,b){var c,d,e;e=b.c.length;c=l0d(a,e==0?'':(tCb(0,b.c.length),GD(b.c[0])));for(d=1;d<e&&!!c;++d){c=BD(c,49).oh((tCb(d,b.c.length),GD(b.c[d])))}return c} +function rEc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),10);a.c[c.c.p][c.p].a=Aub(a.i);a.c[c.c.p][c.p].d=Edb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} +function _dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),157);f+=$wnd.Math.pow(red(c)*qed(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function LHc(a,b,c,d){var e,f,g;f=GHc(a,b,c,d);g=MHc(a,f);bIc(a,b,c,d);yHc(a.b);mmb();Okb(f,new lIc(a));e=MHc(a,f);bIc(a,c,b,d);yHc(a.b);return new vgd(meb(g),meb(e))} +function cJc(a,b,c){var d,e;Odd(c,'Interactive node placement',1);a.a=BD(vNb(b,(wtc(),otc)),304);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);bJc(a,d)}Qdd(c)} +function MVc(a,b){var c;Odd(b,'General Compactor',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=qWc(BD(hkd(a,(ZWc(),LWc)),380));c.hg(a);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function Dfd(a,b,c){var d,e;nmd(a,a.j+b,a.k+c);for(e=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),469);ukd(d,d.a+b,d.b+c)}gmd(a,a.b+b,a.c+c)} +function vld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Sxd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Sxd(a.d,b,d);}return Fkd(a,b,c,d)} +function wld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Txd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Txd(a.d,b,d);}return Gkd(a,b,c,d)} +function lqd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&drd(a,e,b)}}} +function HAd(a,b,c){var d,e,f,g,h;a.qj();f=b==null?0:tb(b);if(a.f>0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null} +function t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e<f;++e){d=BD(qud(c,e),34);if($1d(q1d(a,d))==5){return d}}break}}return null} +function Qs(a){var b,c,d,e,f;if(Lp(a.f,a.b.length)){d=KC(BG,Gie,330,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c.Rd()){f=BD(c,330);b=f.d&e;f.a=d[b];d[b]=f}}} +function DJb(a,b){var c,d,e,f;f=0;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);f=$wnd.Math.max(f,d.e.a+d.b.rf().a)}c=BD(Mpb(a.b,b),124);c.n.b=0;c.a.a=f} +function MKb(a,b){var c,d,e,f;c=0;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);c=$wnd.Math.max(c,e.e.b+e.b.rf().b)}d=BD(Mpb(a.b,b),124);d.n.d=0;d.a.b=c} +function INc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(zNc);c.Hc((Orc(),Lrc))&&d3c(b,CNc);c.Hc(Nrc)&&d3c(b,ENc);c.Hc(Erc)&&d3c(b,ANc);c.Hc(Grc)&&d3c(b,BNc);return b} +function j1c(a,b){var c;Odd(b,'Delaunay triangulation',1);c=new Rkb;Hkb(a.i,new n1c(c));Ccb(DD(vNb(a,(XNb(),VNb))))&&'null10bw';!a.e?(a.e=NCb(c)):ye(a.e,NCb(c));Qdd(b)} +function q6c(a){if(a<0){throw vbb(new Wdb('The input must be positive'))}else return a<h6c.length?Sbb(h6c[a]):$wnd.Math.sqrt(dre*a)*(y6c(a,a)/x6c(2.718281828459045,a))} +function pud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return true}}}return false} +function jr(a,b){if(b==null){while(a.a.Ob()){if(BD(a.a.Pb(),42).dd()==null){return true}}}else{while(a.a.Ob()){if(pb(b,BD(a.a.Pb(),42).dd())){return true}}}return false} +function zy(a,b){var c,d,e;if(b===a){return true}else if(JD(b,664)){e=BD(b,1947);return Ue((d=a.g,!d?(a.g=new vi(a)):d),(c=e.g,!c?(e.g=new vi(e)):c))}else{return false}} +function Tz(a){var b,c,d,e;b='Sz';c='ez';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje<c&&c<Ije){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return zbb(UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,false))} +function LZb(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw vbb(new Wdb("'node' must either be the source node or target node of the edge."))}} +function C2b(a){var b,c,d,e;e=BD(vNb(a,(wtc(),xsc)),37);if(e){d=new d7c;b=Q_b(a.c.i);while(b!=e){c=b.e;b=Q_b(c);O6c(P6c(P6c(d,c.n),b.c),b.d.b,b.d.d)}return d}return w2b} +function Ldc(a){var b;b=BD(vNb(a,(wtc(),ntc)),403);MAb(LAb(new YAb(null,new Kub(b.d,16)),new Ydc),new $dc(a));MAb(JAb(new YAb(null,new Kub(b.d,16)),new aec),new cec(a))} +function woc(a,b){var c,d,e,f;e=b?U_b(a):R_b(a);for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);f=LZb(c,a);if(f.k==(j0b(),g0b)&&f.c!=a.c){return f}}return null} +function HDc(a){var b,c,d;for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);if(b.k!=(j0b(),h0b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} +function oEc(a,b,c){var d,e,f;for(f=new olb(b);f.a<f.c.c.length;){d=BD(mlb(f),10);a.c[d.c.p][d.p].e=false}for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);nEc(a,d,c)}} +function WOc(a,b,c){var d,e;d=vPc(b.j,c.s,c.c)+vPc(c.e,b.s,b.c);e=vPc(c.j,b.s,b.c)+vPc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}} +function IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} +function T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}} +function lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)} +function FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} +function Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)} +function Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)} +function Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)} +function mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}} +function Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)} +function JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=JC(a,b,c,d,e,f,g)}}return l} +function Eyd(b){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.i.$c(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} +function hYb(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return a.c[a.c.length]=b,true} +function nZb(a){var b,c,d,e;e=-1;d=0;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),243);if(b.c==(KAc(),HAc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} +function UZc(a){var b,c,d,e;e=0;b=0;for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),33);dld(c,a.e+e);eld(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} +function bEb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}RDb(a)} +function BVb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}sVb(a)} +function Lmc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=Scd&&!f.Hc(b)){return b}}return null} +function znc(a,b){var c,d;d=BD(Etb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Pnc))),11);if(d){c=BD(Ikb(d.e,0),17);if(c){return BD(vNb(c,(wtc(),Zsc)),19).a}}return yzc(a.b)} +function CCc(a,b){var c,d,e,f;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);Blb(a.d);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);zCc(a,e,c.d.i)}}} +function NZc(a,b){var c,d;Lkb(a.b,b);for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);if(Jkb(c.c,b,0)!=-1){Lkb(c.c,b);UZc(c);c.c.c.length==0&&Lkb(a.n,c);break}}HZc(a)} +function $Zc(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);OZc(c,a.e,g);KZc(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} +function hVc(a){var b,c;c=$sd(a);if(Qq(c)){return null}else{b=(Qb(c),BD(mr(new Sr(ur(c.a.Kc(),new Sq))),79));return atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82))}} +function XId(a){var b;if(!a.o){b=a.Lj();b?(a.o=new dYd(a,a,null)):a.rk()?(a.o=new uVd(a,null)):$1d(q1d((O6d(),M6d),a))==1?(a.o=new nYd(a)):(a.o=new sYd(a,null))}return a.o} +function w6d(a,b,c,d){var e,f,g,h,i;if(c.mh(b)){e=(g=b,!g?null:BD(d,49).xh(g));if(e){i=c.ah(b);h=b.t;if(h>1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}} +function Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} +if(b){try{Ihe(g)()}catch(a){b(c,a)}}else{Ihe(g)()}} +function Kgc(a){var b,c,d,e,f;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);b=BD(c.cd(),10);f=BD(BD(c.dd(),46).a,10);e=BD(BD(c.dd(),46).b,8);P6c(X6c(b.n),P6c(R6c(f.n),e))}} +function llc(a){switch(BD(vNb(a.b,(Nyc(),Vwc)),375).g){case 1:MAb(NAb(LAb(new YAb(null,new Kub(a.d,16)),new Glc),new Ilc),new Klc);break;case 2:nlc(a);break;case 0:mlc(a);}} +function KXc(a,b,c){var d;Odd(c,'Straight Line Edge Routing',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);LXc(a,d);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function i8c(){i8c=ccb;h8c=new j8c('V_TOP',0);g8c=new j8c('V_CENTER',1);f8c=new j8c('V_BOTTOM',2);d8c=new j8c('H_LEFT',3);c8c=new j8c('H_CENTER',4);e8c=new j8c('H_RIGHT',5)} +function gLd(a){var b;if((a.Db&64)!=0)return mKd(a);b=new Jfb(mKd(a));b.a+=' (abstract: ';Ffb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ffb(b,(a.Bb&512)!=0);b.a+=')';return b.a} +function l3d(a,b,c,d){var e,f,g,h;if(oid(a.e)){e=b.ak();h=b.dd();f=c.dd();g=H2d(a,1,e,h,f,e.$j()?M2d(a,e,f,JD(e,99)&&(BD(e,18).Bb&Tje)!=0):-1,true);d?d.Ei(g):(d=g)}return d} +function kz(a){var b;if(a.c==null){b=PD(a.b)===PD(iz)?null:a.b;a.d=b==null?Xhe:MD(b)?nz(FD(b)):ND(b)?Vie:hdb(rb(b));a.a=a.a+': '+(MD(b)?mz(FD(b)):b+'');a.c='('+a.d+') '+a.a}} +function Wgb(a,b){this.e=a;if(Bbb(xbb(b,-4294967296),0)){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b)])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b),Tbb(Obb(b,32))])}} +function yrb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} +if(typeof Map===Nhe&&Map.prototype.entries&&b()){return Map}else{return zrb()}} +function VPc(a,b){var c,d,e,f;f=new Bib(a.e,0);c=0;while(f.b<f.d.gc()){d=Edb((sCb(f.b<f.d.gc()),ED(f.d.Xb(f.c=f.b++))));e=d-b;if(e>Oqe){return c}else e>-1.0E-6&&++c}return c} +function PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))} +function E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} +function qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}} +function Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}} +function eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false} +function h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c} +function Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b} +function mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f} +function U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))} +function Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)} +function jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)} +function KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(d=new Sr(ur(R_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=c.c.i.p;a.n[g]=a.n[g]-1}}} +function cnc(a,b){var c,d,e,f,g;for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);g=BD(Ohb(a.c,e),112).o;for(d=new Gqb(e.b);d.a<d.c.a.length;){c=BD(Fqb(d),61);ojc(e,c,g)}}} +function HJc(a){var b,c;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);YJc(a,b)}MAb(JAb(LAb(LAb(new YAb(null,new Kub(a.e.b,16)),new YKc),new tLc),new vLc),new xLc(a))} +function Qwd(a,b){if(!b){return false}else{if(a.Di(b)){return false}if(!a.i){if(JD(b,143)){a.i=BD(b,143);return true}else{a.i=new Hxd;return a.i.Ei(b)}}else{return a.i.Ei(b)}}} +function B9d(a){a=Qge(a,true);if(dfb(kse,a)||dfb('1',a)){return Bcb(),Acb}else if(dfb(lse,a)||dfb('0',a)){return Bcb(),zcb}throw vbb(new n8d("Invalid boolean value: '"+a+"'"))} +function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=BD(e.Pb(),42);f=d.cd();if(PD(b)===PD(f)||b!=null&&pb(b,f)){if(c){d=new pjb(d.cd(),d.dd());e.Qb()}return d}}return null} +function dKb(a){$Jb();var b,c,d;if(!a.B.Hc((Idd(),Add))){return}d=a.f.i;b=new K6c(a.a.c);c=new p0b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.Ff(c)} +function LNb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,ONb(BD(a.b,65),b,c,d));for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),221);e!=b&&(g=$wnd.Math.min(g,LNb(e,b,g,d)))}return g} +function WZb(a){var b,c,d,e;e=KC(OQ,nie,193,a.b.c.length,0,2);d=new Bib(a.b,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),29));c=d.b-1;e[c]=l_b(b.a)}return e} +function K3b(a,b,c,d,e){var f,g,h,i;g=eLb(dLb(iLb(H3b(c)),d),C3b(a,c,e));for(i=Y_b(a,c).Kc();i.Ob();){h=BD(i.Pb(),11);if(b[h.p]){f=b[h.p].i;Ekb(g.d,new BLb(f,bLb(g,f)))}}cLb(g)} +function sic(a,b){this.f=new Lqb;this.b=new Lqb;this.j=new Lqb;this.a=a;this.c=b;this.c>0&&ric(this,this.c-1,(Ucd(),zcd));this.c<this.a.length-1&&ric(this,this.c+1,(Ucd(),Tcd))} +function SEc(a){a.length>0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss} +function tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)} +function rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b} +function HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),33);e+=HXc(a,c)}return $wnd.Math.max(e,g)} +function dcd(){dcd=ccb;ccd=new gcd(ole,0);bcd=new gcd('FREE',1);acd=new gcd('FIXED_SIDE',2);Zbd=new gcd('FIXED_ORDER',3);_bd=new gcd('FIXED_RATIO',4);$bd=new gcd('FIXED_POS',5)} +function c1d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Cwe));for(d=1;d<(O6d(),N6d).length;++d){if(dfb(N6d[d],e)){return d}}}return 0} +function Qlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Wlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Md(a){var b,c,d;d=new xwb(She,'{','}');for(c=a.vc().Kc();c.Ob();){b=BD(c.Pb(),42);uwb(d,Nd(a,b.cd())+'='+Nd(a,b.dd()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function EGb(a){var b,c,d,e;while(!akb(a.o)){c=BD(fkb(a.o),46);d=BD(c.a,121);b=BD(c.b,213);e=xFb(b,d);if(b.e==d){NFb(e.g,b);d.e=e.e+b.a}else{NFb(e.b,b);d.e=e.e-b.a}Ekb(a.e.a,d)}} +function F6b(a,b){var c,d,e;c=null;for(e=BD(b.Kb(a),20).Kc();e.Ob();){d=BD(e.Pb(),17);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} +function uPc(a,b){var c,d,e,f,g;c=WNc(a,false,b);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),129);d.d==0?(BOc(d,null),COc(d,null)):(f=d.a,g=d.b,BOc(d,g),COc(d,f),undefined)}} +function qQc(a){var b,c;b=new j3c;d3c(b,cQc);c=BD(vNb(a,(wtc(),Ksc)),21);c.Hc((Orc(),Nrc))&&d3c(b,gQc);c.Hc(Erc)&&d3c(b,dQc);c.Hc(Lrc)&&d3c(b,fQc);c.Hc(Grc)&&d3c(b,eQc);return b} +function Xac(a){var b,c,d,e;Wac(a);for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);d=b.c.i==a;e=d?b.d:b.c;d?RZb(b,null):QZb(b,null);yNb(b,(wtc(),ctc),e);_ac(a,e.i)}} +function wmc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} +function aVc(a){var b,c,d;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);d=$sd(b);if(!Qr(new Sr(ur(d.a.Kc(),new Sq)))){return b}}return null} +function Cod(){var a;if(yod)return BD(nUd((yFd(),xFd),yte),2016);a=BD(JD(Phb((yFd(),xFd),yte),555)?Phb(xFd,yte):new Bod,555);yod=true;zod(a);Aod(a);Tnd(a);Shb(xFd,yte,a);return a} +function t3d(a,b,c){var d,e;if(a.j==0)return c;e=BD(LLd(a,b,c),72);d=c.ak();if(!d.Ij()||!a.a.rl(d)){throw vbb(new hz("Invalid entry feature '"+d.Hj().zb+'.'+d.ne()+"'"))}return e} +function Qi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(PD(b)===PD(c)||b!=null&&pb(b,c)){return true}}}return false} +function qhb(a){var b,c,d;if(ybb(a,0)>=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))} +function oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b} +function pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)} +function yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b<d.d.gc()){e=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),10));e.p=c;Ekb(f.e,e);uib(d)}return f} +function sYc(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} +function tYc(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} +function mA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(nA(BD(Ikb(a.b,c),434))){if(!b&&c+1<d&&nA(BD(Ikb(a.b,c+1),434))){b=true;BD(Ikb(a.b,c),434).a=true}}else{b=false}}} +function Ahb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=wbb(f,Qbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}} +function Jhb(a,b){Dhb();var c,d;d=(Hgb(),Cgb);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d} +function zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}} +function S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false} +function kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}} +function rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(Xcd(d)==f){return 0}else if(Vcd(d)==f){return 1}else{b=a.b;return uqb(b.b,Xcd(d))?0:1}} +function lzc(){lzc=ccb;jzc=new nzc(Aqe,0);hzc=new nzc('LONGEST_PATH',1);fzc=new nzc('COFFMAN_GRAHAM',2);gzc=new nzc(Tne,3);kzc=new nzc('STRETCH_WIDTH',4);izc=new nzc('MIN_WIDTH',5)} +function E3c(a){var b;this.d=new Lqb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new jgd(a.e);this.a=a.a;!a.f?(this.g=(b=BD(gdb(O3),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.g=a.f)} +function grd(a,b){var c,d,e,f,g,h;e=a;g=$pd(e,'layoutOptions');!g&&(g=$pd(e,Dte));if(g){h=g;d=null;!!h&&(d=(f=$B(h,KC(ZI,nie,2,0,6,1)),new mC(h,f)));if(d){c=new Drd(h,b);reb(d,c)}}} +function atd(a){if(JD(a,239)){return BD(a,33)}else if(JD(a,186)){return mpd(BD(a,118))}else if(!a){throw vbb(new Heb(gue))}else{throw vbb(new cgb('Only support nodes and ports.'))}} +function CA(a,b,c,d){if(b>=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)} +function tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;e.a=f;a.i==(Ucd(),Acd)?(e.b=g+a.j.b-c.o.b):(e.b=g);P6c(e,b);f+=c.o.a+a.e}} +function Odd(a,b,c){if(a.b){throw vbb(new Zdb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(Zfb(),Ibb(Cbb(Date.now()),_ie)));return true}} +function hsd(a){var b,c,d,e,f,g,h;h=new eC;c=a.tg();e=c!=null;e&&Upd(h,Vte,a.tg());d=a.ne();f=d!=null;f&&Upd(h,fue,a.ne());b=a.sg();g=b!=null;g&&Upd(h,'description',a.sg());return h} +function uId(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new nSd(a,1,9,f,b);!c?(c=e):c.Ei(e)}if(!b){!!a.r&&(c=a.nk(null,c))}else{d=b.c;d!=a.r&&(c=a.nk(d,c))}return c} +function IYd(a,b,c){var d,e,f,g,h;c=(h=b,kid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} +function JYd(a,b,c){var d,e,f,g,h;c=(h=b,lid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} +function jhb(a,b,c,d){var e,f,g;if(d==0){$fb(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} +function LJb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.b=b;d.d.c=c}} +function TKb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.d=c;d.d.a=b}} +function rpc(a,b){var c,d,e,f;f=new Rkb;e=0;d=b.Kc();while(d.Ob()){c=meb(BD(d.Pb(),19).a+e);while(c.a<a.f&&!Voc(a,c.a)){c=meb(c.a+1);++e}if(c.a>=a.f){break}f.c[f.c.length]=c}return f} +function sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a<e.c.c.length;){d=BD(mlb(e),181);c=new J6c(d.qf().a,d.qf().b,d.rf().a,d.rf().b);!b?(b=c):H6c(b,c)}!b&&(b=new I6c);return b} +function Fkd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Sxd(a.n,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Qj(a,yjd(a),c-aLd(a.zh()),b,d)} +function iud(a,b,c){var d,e,f,g,h;d=c.gc();a.qi(a.i+d);h=a.i-b;h>0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();mud(a,b,a.oi(b,f));a.bi(b,f);a.ci();++b}return d!=0} +function xId(a,b,c){var d;if(b!=a.q){!!a.q&&(c=lid(a.q,a,-10,c));!!b&&(c=kid(b,a,-10,c));c=uId(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,9,b,b);!c?(c=d):c.Ei(d)}return c} +function Yj(a,b,c,d){Mb((c&oie)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new jk(a,c,d,b)} +function Qy(a,b){vCb(b,'Cannot suppress a null exception.');mCb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=OC(GC(_I,1),nie,78,0,[b])):(a.k[a.k.length]=b)} +function oA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=sfb(a.substr(b),(ntb(),ltb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0} +function iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);a.a[b.c.b][b.d.b]+=BD(vNb(b,(wSb(),oSb)),19).a}} +function H1c(a,b,c){Odd(c,'Grow Tree',1);a.b=b.f;if(Ccb(DD(vNb(b,(XNb(),VNb))))){a.c=new tOb;D1c(a,null)}else{a.c=new tOb}a.a=false;F1c(a,b.f);yNb(b,WNb,(Bcb(),a.a?true:false));Qdd(c)} +function Umd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=KC(TD,$ie,25,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}} +function j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c} +function wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}} +function bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}} +function Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)} +function kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true} +function BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<sHb;f++){e=$wnd.Math.max(e,qHb(a.a[f][b.g],d))}}else{e=qHb(a.a[c.g][b.g],d)}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} +function knc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(Ucd(),zcd)||e.i==(Ucd(),Tcd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} +function Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}} +function W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0} +function X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} +function bYb(a){var b,c;c=R6c(l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} +function P9b(a){var b;b=(I9b(),BD(Rr(new Sr(ur(R_b(a).a.Kc(),new Sq))),17).c.i);while(b.k==(j0b(),g0b)){yNb(b,(wtc(),Tsc),(Bcb(),true));b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i}} +function bIc(a,b,c,d){var e,f,g,h;h=CHc(b,d);for(g=h.Kc();g.Ob();){e=BD(g.Pb(),11);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=CHc(c,d);for(f=h.Kc();f.Ob();){e=BD(f.Pb(),11);a.d[e.p]=a.d[e.p]-a.c[b.p]}} +function Efd(a,b,c){var d,e;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);bld(d,d.i+b,d.j+c)}reb((!a.b&&(a.b=new cUd(B2,a,12,3)),a.b),new Kfd(b,c))} +function Mwb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.ue(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true} +function fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}} +function lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<Pmd.length;++d){try{return DQd(Pmd[d],b)}catch(a){a=ubb(a);if(JD(a,32)){e=a;c=e}else throw vbb(a)}}throw vbb(new rFd(c))} +function Dpb(){Dpb=ccb;Bpb=OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Cpb=OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} +function yyb(a){var b,c,d;b=dfb(typeof(b),uke)?null:new iCb;if(!b){return}$xb();c=(d=900,d>=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)} +function vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c} +function qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)} +function SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}} +function IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}} +function y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)} +function RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);e=hVc(c);if(BVc(a,c,e)){return true}if(PVc(a,c)-a.g<=a.a){return true}}return false} +function d0c(){d0c=ccb;c0c=(A0c(),z0c);__c=v0c;$_c=t0c;Y_c=p0c;Z_c=r0c;X_c=new q0b(8);W_c=new Osd((Y9c(),f9c),X_c);a0c=new Osd(T9c,8);b0c=x0c;T_c=k0c;U_c=m0c;V_c=new Osd(y8c,(Bcb(),false))} +function X7c(){X7c=ccb;U7c=new q0b(15);T7c=new Osd((Y9c(),f9c),U7c);W7c=new Osd(T9c,15);V7c=new Osd(D9c,meb(0));O7c=I8c;Q7c=Y8c;S7c=b9c;L7c=new Osd(r8c,pse);P7c=O8c;R7c=_8c;M7c=t8c;N7c=w8c} +function jtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} +function ktd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} +function mtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} +function ltd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} +function Dvd(a,b,c){var d,e,f;++a.j;e=a.Vi();if(b>=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d} +function m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(c+1),33))):(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(0),33)))}return d} +function Ymd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=BD(a.a,49).ih(a,4,o5,c));!!b&&(c=BD(b,49).gh(a,4,o5,c));c=Tmd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,b,b))} +function RQd(a,b){var c;if(b!=a.e){!!a.e&&QYd(AYd(a.e),a);!!b&&(!b.b&&(b.b=new RYd(new NYd)),PYd(b.b,a));c=HQd(a,b,null);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function ufb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BCb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?a.substr(d,b-d):a} +function ujc(a,b){var c;c=b.o;if(fad(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])} +function omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}} +function oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new Rkb;Ekb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Ekb(f,new Tkb(g.j))}}} +function qHc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=KIc(a.d,d,e);f+=NHc(a.a,d,(Ucd(),zcd));f+=NHc(a.a,e,Tcd)}else{f=IHc(a.a,d,e)}}a.c[b]&&(f+=PHc(a.a,d));return f} +function jZb(a,b,c,d,e){var f,g,h,i;i=null;for(h=new olb(d);h.a<h.c.c.length;){g=BD(mlb(h),441);if(g!=c&&Jkb(g.e,e,0)!=-1){i=g;break}}f=kZb(e);QZb(f,c.b);RZb(f,i.b);Rc(a.a,e,new BZb(f,b,c.f))} +function nic(a){while(a.g.c!=0&&a.d.c!=0){if(wic(a.g).c>wic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}} +function XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),112);if(d!=f&&d!=b&&d!=g){pPc(a.a,d,b);pPc(a.a,d,g)}}} +function XQc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=Qqe*a.b+0.9*b;a.f=Qqe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=Qqe*a.b+0.9*d;a.f=Qqe*a.b+0.9*b}} +function acb(){_bb={};!Array.isArray&&(Array.isArray=function(a){return Object.prototype.toString.call(a)==='[object Array]'});function b(){return (new Date).getTime()} +!Date.now&&(Date.now=b)} +function $Tb(a,b){var c,d;d=BD(vNb(b,(Nyc(),Vxc)),98);yNb(b,(wtc(),dtc),d);c=b.e;!!c&&(MAb(new YAb(null,new Kub(c.a,16)),new dUb(a)),MAb(LAb(new YAb(null,new Kub(c.b,16)),new fUb),new hUb(a)))} +function _$b(a){var b,c,d,e;if(gad(BD(vNb(a.b,(Nyc(),Lwc)),103))){return 0}b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} +function c5b(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 1:yNb(a,mxc,(Ctc(),ztc));break;case 2:yNb(a,mxc,(Ctc(),Atc));break;case 3:yNb(a,mxc,(Ctc(),xtc));break;case 4:yNb(a,mxc,(Ctc(),ytc));}} +function yrc(){yrc=ccb;wrc=new zrc(ane,0);trc=new zrc(jle,1);xrc=new zrc(kle,2);vrc=new zrc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);urc=new zrc('LEFT_RIGHT_CONNECTION_LOCKING',4);rrc=new zrc(Vne,5)} +function qRc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g} +function t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false} +function ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)} +function bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} +function yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}} +function wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}} +function pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f<h;++f){yyb(b)}i=!lyb&&a.e?lyb?null:a.d:null;while(i){for(c=syb(i),e=0,g=c.length;e<g;++e){yyb(b)}i=!lyb&&i.e?lyb?null:i.d:null}} +function j0b(){j0b=ccb;h0b=new k0b('NORMAL',0);g0b=new k0b('LONG_EDGE',1);e0b=new k0b('EXTERNAL_PORT',2);i0b=new k0b('NORTH_SOUTH_PORT',3);f0b=new k0b('LABEL',4);d0b=new k0b('BREAKING_POINT',5)} +function g4b(a){var b,c,d,e;b=false;if(wNb(a,(wtc(),Csc))){c=BD(vNb(a,Csc),83);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(e4b(d)){if(!b){d4b(Q_b(a));b=true}h4b(BD(c.xc(d),306))}}}} +function qec(a,b,c){var d;Odd(c,'Self-Loop routing',1);d=rec(b);RD(vNb(b,(g6c(),f6c)));MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new uec),new wec),new yec),new Aec),new Cec(a,d));Qdd(c)} +function gsd(a){var b,c,d,e,f,g,h,i,j;j=hsd(a);c=a.e;f=c!=null;f&&Upd(j,eue,a.e);h=a.k;g=!!h;g&&Upd(j,'type',Zr(a.k));d=Fhe(a.j);e=!d;if(e){i=new wB;cC(j,Mte,i);b=new ssd(i);reb(a.j,b)}return j} +function Jv(a){var b,c,d,e;e=Kfb((Xj(a.gc(),'size'),new Vfb),123);d=true;for(c=Wm(a).Kc();c.Ob();){b=BD(c.Pb(),42);d||(e.a+=She,e);d=false;Pfb(Kfb(Pfb(e,b.cd()),61),b.dd())}return (e.a+='}',e).a} +function kD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return TC(c&Eje,d&Eje,e&Fje)} +function Hcb(a){Gcb==null&&(Gcb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Gcb.test(a)){throw vbb(new Oeb(Oje+a+'"'))}return parseFloat(a)} +function IFb(a){var b,c,d,e;b=new Rkb;c=KC(sbb,dle,25,a.a.c.length,16,1);Glb(c,c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);if(!c[d.d]){b.c[b.c.length]=d;HFb(a,d,c)}}return b} +function Nmc(a,b){var c,d,e,f;f=b.b.j;a.a=KC(WD,oje,25,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tCb(d,f.c.length),BD(f.c[d],11));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} +function Sqc(){Sqc=ccb;Nqc=new Uqc('ALWAYS_UP',0);Mqc=new Uqc('ALWAYS_DOWN',1);Pqc=new Uqc('DIRECTION_UP',2);Oqc=new Uqc('DIRECTION_DOWN',3);Rqc=new Uqc('SMART_UP',4);Qqc=new Uqc('SMART_DOWN',5)} +function k6c(a,b){if(a<0||b<0){throw vbb(new Wdb('k and n must be positive'))}else if(b>a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))} +function jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e<b.length;e++){b[e].og(d)}}}} +function fld(a){var b;if((a.Db&64)!=0)return Mkd(a);b=new Jfb(Mkd(a));b.a+=' (height: ';Bfb(b,a.f);b.a+=', width: ';Bfb(b,a.g);b.a+=', x: ';Bfb(b,a.i);b.a+=', y: ';Bfb(b,a.j);b.a+=')';return b.a} +function un(a){var b,c,d,e,f,g,h;b=new $rb;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.cd());h=Xrb(b,g,Qb(c.dd()));if(h!=null){throw vbb(new Wdb('duplicate key: '+g))}}this.b=(mmb(),new iob(b))} +function Rlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function SRb(){SRb=ccb;MRb=(XRb(),WRb);LRb=new Nsd(mme,MRb);meb(1);KRb=new Nsd(nme,meb(300));meb(0);PRb=new Nsd(ome,meb(0));new Tfd;QRb=new Nsd(pme,qme);new Tfd;NRb=new Nsd(rme,5);RRb=WRb;ORb=VRb} +function NUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Ekb(a.b.b,BD(f.b,81));Ekb(a.b.a,BD(f.b,81).d)}}} +function kVd(a,b){var c;if(b!=null&&!a.c.Yj().wj(b)){c=JD(b,56)?BD(b,56).Tg().zb:hdb(rb(b));throw vbb(new Cdb(ite+a.c.ne()+"'s type '"+a.c.Yj().ne()+"' does not permit a value of type '"+c+"'"))}} +function cZb(a,b,c){var d,e;e=new Bib(a.b,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));if(PD(vNb(d,(wtc(),btc)))!==PD(b)){continue}Y$b(d.n,Q_b(a.c.i),c);uib(e);Ekb(b.b,d)}} +function vdc(a,b){if(b.a){switch(BD(vNb(b.b,(wtc(),dtc)),98).g){case 0:case 1:llc(b);case 2:MAb(new YAb(null,new Kub(b.d,16)),new Idc);wkc(a.a,b);}}else{MAb(new YAb(null,new Kub(b.d,16)),new Idc)}} +function Znc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=Soc(a,new bpc)),Edb(a.k)/(a.b*(a.g==null&&(a.g=Poc(a,new _oc)),Edb(a.g)))));b=Tbb(Cbb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} +function H0b(){z0b();n_b.call(this);this.j=(Ucd(),Scd);this.a=new d7c;new L_b;this.f=(Xj(2,Jie),new Skb(2));this.e=(Xj(4,Jie),new Skb(4));this.g=(Xj(4,Jie),new Skb(4));this.b=new Z0b(this.e,this.g)} +function j3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.c.i;if(a==(Ctc(),xtc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==ytc){return false}return true} +function k3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.d.i;if(a==(Ctc(),ztc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==Atc){return false}return true} +function L3b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new J6c(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&H6c(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} +function N_c(){N_c=ccb;I_c=new O_c('CENTER_DISTANCE',0);J_c=new O_c('CIRCLE_UNDERLAP',1);M_c=new O_c('RECTANGLE_UNDERLAP',2);K_c=new O_c('INVERTED_OVERLAP',3);L_c=new O_c('MINIMUM_ROOT_DISTANCE',4)} +function jde(a){hde();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=KC(TD,$ie,25,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=gde[f>>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)} +function fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}} +function ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.e){d=f.e;Wjb(b,d);Wjb(c,d)}}}return b} +function Y_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),v0b));case 2:return Nq(a.j,(z0b(),t0b));case 3:return Nq(a.j,(z0b(),x0b));case 4:return Nq(a.j,(z0b(),y0b));default:return mmb(),mmb(),jmb;}} +function tic(a,b){var c,d,e;c=uic(b,a.e);d=BD(Ohb(a.g.f,c),19).a;e=a.a.c.length-1;if(a.a.c.length!=0&&BD(Ikb(a.a,e),287).c==d){++BD(Ikb(a.a,e),287).a;++BD(Ikb(a.a,e),287).b}else{Ekb(a.a,new Dic(d))}} +function VGc(a,b,c){var d,e;d=UGc(a,b,c);if(d!=0){return d}if(wNb(b,(wtc(),Zsc))&&wNb(c,Zsc)){e=beb(BD(vNb(b,Zsc),19).a,BD(vNb(c,Zsc),19).a);e<0?WGc(a,b,c):e>0&&WGc(a,c,b);return e}return TGc(a,b,c)} +function MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}} +function JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=MZc(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} +function t2c(a,b,c){var d;d=o2c(a,b,true);Odd(c,'Recursive Graph Layout',d);jfd(b,OC(GC(g2,1),Uhe,527,0,[new q3c]));ikd(b,(Y9c(),F9c))||jfd(b,OC(GC(g2,1),Uhe,527,0,[new U3c]));u2c(a,b,null,c);Qdd(c)} +function Qdd(a){var b;if(a.p==null){throw vbb(new Zdb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(Zfb(),Ibb(Cbb(Date.now()),_ie));a.q=Sbb(Qbb(b,a.o))*1.0E-9}a.c<a.r&&Rdd(a,a.r-a.c);a.b=true}} +function ofd(a){var b,c,d;d=new s7c;Dsb(d,new f7c(a.j,a.k));for(c=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);Dsb(d,new f7c(b.a,b.b))}Dsb(d,new f7c(a.b,a.c));return d} +function qqd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new Yge(i);for(k=(f.b-f.a)*f.c<0?(Xge(),Wge):new she(f);k.Ob();){j=BD(k.Pb(),19);h=Zpd(e,j.a);g=new prd(a,b,c,d);rqd(g.a,g.b,g.c,g.d,h)}}} +function Ax(b,c){var d;if(PD(b)===PD(c)){return true}if(JD(c,21)){d=BD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=ubb(a);if(JD(a,173)||JD(a,205)){return false}else throw vbb(a)}}return false} +function UHb(a,b){var c;Ekb(a.d,b);c=b.rf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function Q6c(a,b,c,d,e){if(d<b||e<c){throw vbb(new Wdb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} +function lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}} +function mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){$fb(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} +function zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)} +function Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)} +function ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Zjc(Ec(a.k))} +function UQc(a,b){var c,d,e;Qqb(a.d,b);c=new _Qc;Rhb(a.c,b,c);c.f=VQc(b.c);c.a=VQc(b.d);c.d=(hQc(),e=b.c.i.k,e==(j0b(),h0b)||e==d0b);c.e=(d=b.d.i.k,d==h0b||d==d0b);c.b=b.c.j==(Ucd(),Tcd);c.c=b.d.j==zcd} +function BGb(a){var b,c,d,e,f;f=Ohe;e=Ohe;for(d=new olb(LFb(a));d.a<d.c.c.length;){c=BD(mlb(d),213);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==Ohe&&(e=-1);f==Ohe&&(f=-1);return new vgd(meb(e),meb(f))} +function zQb(a,b){var c,d,e;e=dme;d=(ROb(),OOb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=POb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=QOb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=NOb}return d} +function L9b(a,b){var c,d,e,f;c=b.a.o.a;f=new Jib(Q_b(b.a).b,b.c,b.f+1);for(e=new vib(f);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),29));if(d.c.a>=c){K9b(a,b,d.p);return true}}return false} +function Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' "',b),a.a),'"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.rl(f.ak())){if(d==c){Xxd(a,g);return Q6d(),BD(b,66).Oj()?f:f.dd()}++d}}throw vbb(new qcb(gve+c+mue+d))} +function sde(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return wfe(),wfe(),ffe}else{d=qde(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(wfe(),wfe(),++vfe,new Lge(1));Kge(c,d);d=c}Kge(c,qde(a))}return d}} +function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))} +function Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].jm()&&(c=Oz(c,g)):g[0].jm()}catch(a){a=ubb(a);if(JD(a,78)){d=a;Az();Gz(JD(d,477)?BD(d,477).ae():d)}else throw vbb(a)}}return c} +function K9b(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&Z9b(b.a,fac(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=BD(vNb(b.a,(wtc(),ktc)),15).Kc();e.Ob();){d=BD(e.Pb(),70);yNb(d,H9b,(Bcb(),true))}} +function Wec(a,b){var c,d,e;e=Vec(b);yNb(b,(wtc(),Xsc),e);if(e){d=Ohe;!!irb(a.f,e)&&(d=BD(Wd(irb(a.f,e)),19).a);c=BD(Ikb(b.g,0),17);Ccb(DD(vNb(c,ltc)))||Rhb(a,e,meb($wnd.Math.min(BD(vNb(c,Zsc),19).a,d)))}} +function iCc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=W_b(b,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);for(e=new olb(g.g);e.a<e.c.c.length;){d=BD(mlb(e),17);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&iCc(a,f,c))}}b.p=0} +function p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} +function Rcc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tCb(b+d,a.c.length),BD(a.c[b+d],11));Nkb(a,b+d,(tCb(c-d-1,a.c.length),BD(a.c[c-d-1],11)));tCb(c-d-1,a.c.length);a.c[c-d-1]=f}} +function hjc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new dIc(i);g=a.d.o.c.p;d=g>0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:KC(OQ,kne,10,0,0,1);k=b==c-1;k?RHc(a.g,e,j):RHc(a.g,d,e)} +function pjc(a){var b;this.j=new Rkb;this.f=new Tqb;this.b=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.d=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.g=a} +function QVc(a,b){var c,d,e;if(b.c.length!=0){c=RVc(a,b);e=false;while(!c){AVc(a,b,true);e=true;c=RVc(a,b)}e&&AVc(a,b,false);d=dVc(b);!!a.b&&a.b.lg(d);a.a=PVc(a,(tCb(0,b.c.length),BD(b.c[0],33)));QVc(a,d)}} +function Cid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();if(c<0){if(!d){throw vbb(new Wdb(mte+b+nte))}else if(d.Ij()){e=a.Yg(d);e>=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}} +function aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c} +function ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw vbb(new qcb(gve+c+mue+d))}} +function d9b(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new I6c;for(d=new olb(a.f);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} +function QJc(a,b,c){var d,e,f;for(e=new Sr(ur(O_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!(!OZb(d)&&!(!OZb(d)&&d.c.i.c==d.d.i.c))){continue}f=IJc(a,d,c,new vKc);f.c.length>1&&(b.c[b.c.length]=f,true)}} +function TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}} +function _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)} +function H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}G6c(a,d,f,e-d,g-f)} +function O6d(){O6d=ccb;L6d=OC(GC(ZI,1),nie,2,6,[swe,twe,uwe,vwe,wwe,xwe,eue]);K6d=OC(GC(ZI,1),nie,2,6,[swe,'empty',twe,Qve,'elementOnly']);N6d=OC(GC(ZI,1),nie,2,6,[swe,'preserve','replace',ywe]);M6d=new y1d} +function Y$b(a,b,c){var d,e,f;if(b==c){return}d=b;do{P6c(a,d.c);e=d.e;if(e){f=d.d;O6c(a,f.b,f.d);P6c(a,e.n);d=Q_b(e)}}while(e);d=c;do{c7c(a,d.c);e=d.e;if(e){f=d.d;b7c(a,f.b,f.d);c7c(a,e.n);d=Q_b(e)}}while(e)} +function qic(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.g.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Rhb(d,f,new zic(a,f,c))}}e=BD(Wd(irb(d.f,b)),663);e.b=0;e.c=e.f;e.c==0||Cic(BD(Ikb(e.a,e.b),287));return e} +function Apc(){Apc=ccb;wpc=new Bpc('MEDIAN_LAYER',0);ypc=new Bpc('TAIL_LAYER',1);vpc=new Bpc('HEAD_LAYER',2);xpc=new Bpc('SPACE_EFFICIENT_LAYER',3);zpc=new Bpc('WIDEST_LAYER',4);upc=new Bpc('CENTER_LAYER',5)} +function rJb(a){switch(a.g){case 0:case 1:case 2:return Ucd(),Acd;case 3:case 4:case 5:return Ucd(),Rcd;case 6:case 7:case 8:return Ucd(),Tcd;case 9:case 10:case 11:return Ucd(),zcd;default:return Ucd(),Scd;}} +function sKc(a,b){var c;if(a.c.length==0){return false}c=Lzc((tCb(0,a.c.length),BD(a.c[0],17)).c.i);FJc();if(c==(Izc(),Fzc)||c==Ezc){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new AKc),new CKc(b))} +function cRc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new SRc);Dsb(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=BD(f.Pb(),188);e.b!=b&&cRc(a,e.b,d);e.c!=b&&cRc(a,e.c,d);Dsb(d.a,e)}return d}return null} +function qSc(){qSc=ccb;pSc=new rSc('ROOT_PROC',0);lSc=new rSc('FAN_PROC',1);nSc=new rSc('NEIGHBORS_PROC',2);mSc=new rSc('LEVEL_HEIGHT',3);oSc=new rSc('NODE_POSITION_PROC',4);kSc=new rSc('DETREEIFYING_PROC',5)} +function kqd(a,b){if(JD(b,239)){return eqd(a,BD(b,33))}else if(JD(b,186)){return fqd(a,BD(b,118))}else if(JD(b,439)){return dqd(a,BD(b,202))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function xu(a,b,c){var d,e;this.f=a;d=BD(Ohb(a.b,b),283);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){vu(this)}}else{this.c=!d?null:d.b;while(c-->0){uu(this)}}this.b=b;this.a=null} +function rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)} +function FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d} +function OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d} +function cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),65);Ekb(f,new oOb(c,true));Ekb(f,new oOb(c,false))}e=new hOb(a);zwb(e.a.a);kDb(f,a.b,new amb(OC(GC(JM,1),Uhe,679,0,[e])))} +function rQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new f7c(h,m)} +function TBc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}e=c.d.i;a.a[e.p]?Ekb(a.b,c):TBc(a,e)}a.a[b.p]=false} +function pCc(a,b,c){var d;d=0;switch(BD(vNb(b,(Nyc(),mxc)),163).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}wNb(b,(wtc(),Zsc))&&(d+=BD(vNb(b,Zsc),19).a);return d} +function jOc(a,b,c){var d,e,f;c.zc(b,a);Ekb(a.n,b);f=a.p.eg(b);b.j==a.p.fg()?yOc(a.e,f):yOc(a.j,f);lOc(a);for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(e);){d=BD(Rr(e),11);c._b(d)||jOc(a,d,c)}} +function rfd(a){var b,c,d;c=BD(hkd(a,(Y9c(),Y8c)),21);if(c.Hc((tdd(),pdd))){d=BD(hkd(a,b9c),21);b=new g7c(BD(hkd(a,_8c),8));if(d.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new d7c}} +function PKd(a){var b,c,d;if(!a.b){d=new $Nd;for(c=new $yd(SKd(a));c.e!=c.i.gc();){b=BD(Zyd(c),18);(b.Bb&ote)!=0&&wtd(d,b)}vud(d);a.b=new nNd((BD(qud(ZKd((NFd(),MFd).o),8),18),d.i),d.g);$Kd(a).b&=-9}return a.b} +function Rmc(a,b){var c,d,e,f,g,h,i,j;i=BD(Ee(Ec(b.k),KC(F1,bne,61,2,0,1)),122);j=b.g;c=Tmc(b,i[0]);e=Smc(b,i[1]);d=Kmc(a,j,c,e);f=Tmc(b,i[1]);h=Smc(b,i[0]);g=Kmc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} +function ESc(a,b,c){var d,e,f;Odd(c,'Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&FSc(a,new ZRc(e),c);Qdd(c)} +function PEd(a){IEd();var b,c,d,e;d=hfb(a,wfb(35));b=d==-1?a:a.substr(0,d);c=d==-1?null:a.substr(d+1);e=kFd(HEd,b);if(!e){e=aFd(b);lFd(HEd,b,e);c!=null&&(e=JEd(e,c))}else c!=null&&(e=JEd(e,(uCb(c),c)));return e} +function smb(a){var h;mmb();var b,c,d,e,f,g;if(JD(a,54)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a._c(e,a.Xb(d));a._c(d,h)}}else{b=a.Yc();f=a.Zc(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} +function I3b(a,b){var c,d,e;Odd(b,'End label pre-processing',1);c=Edb(ED(vNb(a,(Nyc(),nyc))));d=Edb(ED(vNb(a,ryc)));e=gad(BD(vNb(a,Lwc),103));MAb(LAb(new YAb(null,new Kub(a.b,16)),new Q3b),new S3b(c,d,e));Qdd(b)} +function NFc(a,b){var c,d,e,f,g,h;h=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){g=BD(fkb(f),214);h+=pHc(g.d,g.e);for(e=new olb(g.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(h+=NFc(a,c))}}return h} +function YQc(a,b,c){var d,e;TQc(this);b==(FQc(),DQc)?Qqb(this.r,a.c):Qqb(this.w,a.c);c==DQc?Qqb(this.r,a.d):Qqb(this.w,a.d);UQc(this,a);d=VQc(a.c);e=VQc(a.d);XQc(this,d,e,e);this.o=(hQc(),$wnd.Math.abs(d-e)<0.2)} +function a0d(a,b,c){var d,e,f,g,h,i;h=BD(Ajd(a.a,8),1936);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.jm()}}d=c;if((a.a.Db&1)==0){i=new f0d(a,c,b);d.ui(i)}JD(d,672)?BD(d,672).wi(a.a):d.ti()==a.a&&d.vi(null)} +function dae(){var a;if(Z9d)return BD(nUd((yFd(),xFd),Ewe),1945);eae();a=BD(JD(Phb((yFd(),xFd),Ewe),586)?Phb(xFd,Ewe):new cae,586);Z9d=true;aae(a);bae(a);Rhb((JFd(),IFd),a,new fae);Tnd(a);Shb(xFd,Ewe,a);return a} +function xA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function AA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function NVb(a){var b,c,d;KVb(a);d=new Rkb;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);Ekb(d,new ZVb(b,true));Ekb(d,new ZVb(b,false))}RVb(a.c);rXb(d,a.b,new amb(OC(GC(bQ,1),Uhe,369,0,[a.c])));MVb(a)} +function c4b(a){var b,c,d,e;c=new Lqb;for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);b=BD(d.We((wtc(),Dsc)),17);!!irb(c.f,b)||Rhb(c,b,new p4b(b));Ekb(BD(Wd(irb(c.f,b)),456).b,d)}return new Tkb(new $ib(c))} +function Gac(a,b){var c,d,e,f,g;d=new kkb(a.j.c.length);c=null;for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);if(e.j!=c){d.b==d.c||Hac(d,c,b);Yjb(d);c=e.j}g=N3b(e);!!g&&(Xjb(d,g),true)}d.b==d.c||Hac(d,c,b)} +function wbc(a,b){var c,d,e;d=new Bib(a.b,0);while(d.b<d.d.gc()){c=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),70));e=BD(vNb(c,(Nyc(),Qwc)),272);if(e==(qad(),oad)){uib(d);Ekb(b.b,c);wNb(c,(wtc(),Dsc))||yNb(c,Dsc,a)}}} +function GDc(a){var b,c,d,e,f;b=sr(new Sr(ur(U_b(a).a.Kc(),new Sq)));for(e=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);c=d.c.i;f=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)));b=$wnd.Math.max(b,f)}return meb(b)} +function rUc(a,b,c){var d,e,f,g;Odd(c,'Processor arrange node',1);e=null;f=new Psb;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){g=BD(Xsb(d),86);Ccb(DD(vNb(g,(mTc(),jTc))))&&(e=g)}Gsb(f,e,f.c.b,f.c);qUc(a,f,Udd(c,1));Qdd(c)} +function Ffd(a,b,c){var d,e,f;d=BD(hkd(a,(Y9c(),w8c)),21);e=0;f=0;b.a>c.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)} +function aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))} +function PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}} +function Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c<d){NC(b,c++,a[i++])}return}Jlb(a,i,j,h,b,c,d,f)} +function nEb(a,b){var c,d,e;e=new Rkb;for(d=new olb(a.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);if(b.Lb(c)){Ekb(e,new BEb(c,true));Ekb(e,new BEb(c,false))}}tEb(a.e);kDb(e,a.d,new amb(OC(GC(JM,1),Uhe,679,0,[a.e])))} +function gnc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new olb(i);h.a<h.c.c.length;){g=BD(mlb(h),101);f=KC(sbb,dle,25,e.c.length,16,1);Rhb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} +function tOc(a,b){a.r=new uOc(a.p);sOc(a.r,a);ye(a.r.j,a.j);Osb(a.j);Dsb(a.j,b);Dsb(a.r.e,b);lOc(a);lOc(a.r);while(a.f.c.length!=0){AOc(BD(Ikb(a.f,0),129))}while(a.k.c.length!=0){AOc(BD(Ikb(a.k,0),129))}return a.r} +function yid(a,b,c){var d,e,f;e=XKd(a.Tg(),b);d=b-a.Ah();if(d<0){if(!e){throw vbb(new Wdb(mte+b+nte))}else if(e.Ij()){f=a.Yg(e);f>=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}} +function q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b} +function jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null} +function YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c} +function uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}} +function RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)} +function SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)} +function Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=Ogc(b,c);if(f){d=BD(f.a,19).a;g=BD(f.b,128);Igc(a,e,g,c,d,b);c=d+1;e=g}}}} +function mlc(a){var b,c,d,e,f,g;g=new Tkb(a.d);Okb(g,new Qlc);b=(Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc]));c=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),101);d=b[c%b.length];olc(e,d);++c}} +function o6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(!(m6c(a,d)&&m6c(a,e))){return false}d=e}if(!(m6c(a,d)&&m6c(a,c))){return false}return true} +function hrd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=Xpd(l,'x');c=new Krd(b);Gqd(c.a,g);h=Xpd(l,'y');d=new Lrd(b);Hqd(d.a,h);i=Xpd(l,Gte);e=new Mrd(b);Iqd(e.a,i);j=Xpd(l,Fte);f=new Nrd(b);k=(Jqd(f.a,j),j);return k} +function XMd(a,b){TMd(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} +function l0d(b,c){var d,e,f;f=0;if(c.length>0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f<d.i&&f>=0?BD(qud(d,f),56):null} +function Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}} +function Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Tlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Ulb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Xlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function bub(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Ikb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.ue(Ikb(a.b,g),Ikb(a.b,f))<0&&(h=g),h);if(a.a.ue(e,Ikb(a.b,d))<0){break}Nkb(a.b,b,Ikb(a.b,d));b=d}Nkb(a.b,b,e)} +function $Bb(a,b,c,d,e,f){var g,h,i,j,k;if(PD(a)===PD(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} +function xGb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} +function cRb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),559);b.d.a=f.a;b.d.b=f.b;P6c(f,e)}}} +function YNb(a,b,c){var d,e,f,g,h,i;i=Pje;for(f=new olb(wOb(a.b));f.a<f.c.c.length;){e=BD(mlb(f),168);for(h=new olb(wOb(b.b));h.a<h.c.c.length;){g=BD(mlb(h),168);d=p6c(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} +function G0b(a,b){if(!b){throw vbb(new Geb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} +function dfc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} +function ffc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} +function xic(a){var b,c,d,e,f,g;g=CHc(a.d,a.e);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);d=a.e==(Ucd(),Tcd)?e.e:e.g;for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),17);if(!OZb(b)&&b.c.i.c!=b.d.i.c){tic(a,b);++a.f;++a.c}}}} +function tpc(a,b){var c,d;if(b.dc()){return mmb(),mmb(),jmb}d=new Rkb;Ekb(d,meb(Rie));for(c=1;c<a.f;++c){a.a==null&&Toc(a);a.a[c]&&Ekb(d,meb(c))}if(d.c.length==1){return mmb(),mmb(),jmb}Ekb(d,meb(Ohe));return spc(b,d)} +function MJc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(j0b(),h0b);i=g?b.d:b.c;c=MZb(b,i).i;e=BD(Ohb(a.k,i),121);d=a.i[c.p].a;if(S_b(i.i)<(!c.c?-1:Jkb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}AFb(DFb(CFb(EFb(BFb(new FFb,0),4),f),h))} +function oqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.b&&(b.b=new y5d(z2,b,4,7)),b.b);wtd(f,i)}}}} +function pqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.c&&(b.c=new y5d(z2,b,5,8)),b.c);wtd(f,i)}}}} +function po(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} +function qr(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Pfb(Qfb(new Ufb,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Pfb((d.a+=She,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw vbb(new Wdb(d.a))} +function lt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=BD(Thb(a.b,b.a),283);c.a=0;++a.c}else{c=BD(Ohb(a.b,b.a),283);--c.a;!b.e?(c.b=b.c):(b.e.c=b.c);!b.c?(c.c=b.e):(b.c.e=b.e)}--a.d} +function OA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[3]=b[3]+(c%60/10|0)&aje;b[4]=b[4]+c%10&aje;return zfb(b,0,b.length)} +function uRb(a,b,c){var d,e;d=b.d;e=c.d;while(d.a-e.a==0&&d.b-e.b==0){d.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;d.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5}} +function N_b(a){var b,c,d,e;a.g=new Rpb(BD(Qb(F1),290));d=0;c=(Ucd(),Acd);b=0;for(;b<a.j.c.length;b++){e=BD(Ikb(a.j,b),11);if(e.j!=c){d!=b&&Npb(a.g,c,new vgd(meb(d),meb(b)));c=e.j;d=b}}Npb(a.g,c,new vgd(meb(d),meb(b)))} +function d4b(a){var b,c,d,e,f,g,h;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=d++;for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);g.p=d++}}}} +function qPc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);for(j=X_b(g,(KAc(),IAc),c).Kc();j.Ob();){i=BD(j.Pb(),11);f=BD(Wd(irb(e.f,i)),112);if(!f){f=new uOc(a.d);d.c[d.c.length]=f;jOc(f,i,e)}}}}} +function vid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))} +function QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),129);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d} +function Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new b1b(f.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);e=uDc(f,c).i;a.c[e.p]||tDc(a,e)}}} +function _Uc(a){var b,c,d,e,f,g,h;g=0;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=_Uc(b);g=$wnd.Math.max(f,g)}return g} +function rcd(){rcd=ccb;pcd=new scd('OUTSIDE',0);ncd=new scd('INSIDE',1);ocd=new scd('NEXT_TO_PORT_IF_POSSIBLE',2);mcd=new scd('ALWAYS_SAME_SIDE',3);lcd=new scd('ALWAYS_OTHER_SAME_SIDE',4);qcd=new scd('SPACE_EFFICIENT',5)} +function drd(a,b,c){var d,e,f,h,i,j;d=Tqd(a,(e=(Fhd(),f=new apd,f),!!c&&$od(e,c),e),b);Lkd(d,_pd(b,Vte));grd(b,d);brd(b,d);hrd(b,d);g=null;h=b;i=Ypd(h,'ports');j=new Jrd(a,d);Fqd(j.a,j.b,i);crd(a,b,d);Zqd(a,b,d);return d} +function NA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[4]=b[4]+(c%60/10|0)&aje;b[5]=b[5]+c%10&aje;return zfb(b,0,b.length)} +function QA(a){var b;b=OC(GC(TD,1),$ie,25,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&aje;b[5]=b[5]+(a/60|0)%10&aje;b[7]=b[7]+(a%60/10|0)&aje;b[8]=b[8]+a%10&aje;return zfb(b,0,b.length)} +function Vlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+Ubb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function DGb(a,b){var c,d,e;e=Ohe;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,DGb(a,xFb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} +function EKb(a,b){var c,d,e;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.b=(c=d.b,c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Acd)?-c.rf().b-Edb(ED(c.We(s9c))):Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Acd)?-c.rf().b:0)}} +function LPb(a){var b,c,d,e,f,g,h;c=IOb(a.e);f=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){JOb(a.e,new J6c(d,e,a.a,a.b))&&aNb(a,g,h,false,true);d+=a.a}e+=a.b}} +function s2c(a){var b,c,d;if(Ccb(DD(hkd(a,(Y9c(),M8c))))){d=new Rkb;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);Qld(b)&&Ccb(DD(hkd(b,N8c)))&&(d.c[d.c.length]=b,true)}return d}else{return mmb(),mmb(),jmb}} +function Vpd(a){var b,c;c=false;if(JD(a,204)){c=true;return BD(a,204).a}if(!c){if(JD(a,258)){b=BD(a,258).a%1==0;if(b){c=true;return meb(Idb(BD(a,258).a))}}}throw vbb(new cqd("Id must be a string or an integer: '"+a+"'."))} +function k0d(a,b){var c,d,e,f,g,h;f=null;for(e=new x0d((!a.a&&(a.a=new z0d(a)),a.a));u0d(e);){c=BD(Vud(e),56);d=(g=c.Tg(),h=(OKd(g),g.o),!h||!c.mh(h)?null:h6d(KJd(h),c.ah(h)));if(d!=null){if(dfb(d,b)){f=c;break}}}return f} +function Bw(a,b,c){var d,e,f,g,h;Xj(c,'occurrences');if(c==0){return h=BD(Hv(nd(a.a),b),14),!h?0:h.gc()}g=BD(Hv(nd(a.a),b),14);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} +function ax(a,b,c){var d,e,f,g;Xj(c,'oldCount');Xj(0,'newCount');d=BD(Hv(nd(a.a),b),14);if((!d?0:d.gc())==c){Xj(0,'count');e=(f=BD(Hv(nd(a.a),b),14),!f?0:f.gc());g=-e;g>0?zh():g<0&&Bw(a,b,-g);return true}else{return false}} +function fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0} +function gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c} +function TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a} +function zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}} +function LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 2:case 3:{!f&&(f=new Rkb);f.c[f.c.length]=c}}}return !f?(mmb(),mmb(),jmb):f} +function tde(a,b){var c,d,e,f;nde(a);if(a.c!=0||a.a!=123)throw vbb(new mde(tvd((h0d(),Fue))));f=b==112;d=a.d;c=gfb(a.i,125,d);if(c<0)throw vbb(new mde(tvd((h0d(),Gue))));e=qfb(a.i,d,c);a.d=c+1;return Lfe(e,f,(a.e&512)==512)} +function QTb(a){var b;b=BD(vNb(a,(Nyc(),Iwc)),314);if(b==(Rpc(),Ppc)){throw vbb(new z2c('The hierarchy aware processor '+b+' in child node '+a+' is only allowed if the root node specifies the same hierarchical processor.'))}} +function dhc(a,b){Hgc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=BD(g.Pb(),128);if(f.o){continue}d=F6c(f.a);e=C6c(f.a);h=new hic(d,e,null,BD(f.d.a.ec().Kc().Pb(),17));Ekb(h.c,f.a);a.c[a.c.length]=h;!!c&&Ekb(c.d,h);c=h}} +function hKd(a,b){var c,d,e;if(!b){jKd(a,null);_Jd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=jfb((fdb(c),c.o+d));jKd(a,e);_Jd(a,e);break}d+='[]'}}else{e=jfb((fdb(b),b.o));jKd(a,e);_Jd(a,e)}a.yk(b)} +function b3d(a,b,c,d,e){var f,g,h,i;i=a3d(a,BD(e,56));if(PD(i)!==PD(e)){h=BD(a.g[c],72);f=R6d(b,i);mud(a,c,t3d(a,c,f));if(oid(a.e)){g=H2d(a,9,f.ak(),e,i,d,false);Qwd(g,new pSd(a.e,9,a.c,h,f,d,false));Rwd(g)}return i}return e} +function xCc(a,b,c){var d,e,f,g,h,i;d=BD(Qc(a.c,b),15);e=BD(Qc(a.c,c),15);f=d.Zc(d.gc());g=e.Zc(e.gc());while(f.Sb()&&g.Sb()){h=BD(f.Ub(),19);i=BD(g.Ub(),19);if(h!=i){return beb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} +function m5c(c,d){var e,f,g;try{g=fs(c.a,d);return g}catch(b){b=ubb(b);if(JD(b,32)){try{f=Icb(d,Rie,Ohe);e=gdb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=ubb(a);if(!JD(a,127))throw vbb(a)}return null}else throw vbb(b)}} +function tid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a} +function v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}} +function rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))} +function fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!ZMb(b,e,g)&&hNb(a,f,h)||YMb(b,e,g)&&!iNb(a,f,h))){return true}}}return false} +function LNc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=l7c(OC(GC(m1,1),nie,8,0,[g.i.n,g.n,g.a])).b;e=(f+l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(Ucd(),zcd)?(d=new f7c(b+g.i.c.c.a+c,e)):(d=new f7c(b-c,e));St(a.a,0,d)} +function Qld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=e}else if(b!=e){return false}}return true} +function sud(a,b,c){var d;++a.j;if(b>=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b<c?$fb(a.g,b,a.g,b+1,c-b):$fb(a.g,c+1,a.g,c,b-c);NC(a.g,b,d);a.ei(b,d,c);a.ci()}return d} +function Rc(a,b,c){var d;d=BD(a.c.xc(b),14);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw vbb(new ycb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} +function heb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb} +function BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}} +function _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} +function D$c(a,b){var c,d,e,f,g,h;d=BD(BD(Ohb(a.g,b.a),46).a,65);e=BD(BD(Ohb(a.g,b.b),46).a,65);f=d.b;g=e.b;c=z6c(f,g);if(c>=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h} +function ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)} +function sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} +function wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return g}}}else{for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return g}}}}return null} +function Pgb(a,b){var c;if(b<0){throw vbb(new ocb('Negative exponent'))}if(b==0){return Cgb}else if(b==1||Kgb(a,Cgb)||Kgb(a,Ggb)){return a}if(!Sgb(a,0)){c=1;while(!Sgb(a,c)){++c}return Ogb(bhb(c*b),Pgb(Rgb(a,c),b))}return Jhb(a,b)} +function xlb(a,b){var c,d,e;if(PD(a)===PD(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(PD(d)===PD(e)||d!=null&&pb(d,e))){return false}}return true} +function CVb(a){nVb();var b,c,d;this.b=mVb;this.c=(ead(),cad);this.f=(iVb(),hVb);this.a=a;zVb(this,new DVb);sVb(this);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);if(!c.d){b=new gVb(OC(GC(IP,1),Uhe,81,0,[c]));Ekb(a.a,b)}}} +function D3b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new cIb(b,!c);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),70);UHb(f,(a$b(),new v$b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} +function O5b(a){var b,c,d,e,f,g,h;h=l_b(a.a);Nlb(h,new T5b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(j0b(),e0b)){break}b=BD(vNb(d,(wtc(),Hsc)),61);if(b!=(Ucd(),Tcd)&&b!=zcd){continue}!!c&&BD(vNb(c,Qsc),15).Fc(d);c=d}} +function YOc(a,b,c){var d,e,f,g,h,i,j;i=(tCb(b,a.c.length),BD(a.c[b],329));Kkb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}} +function u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}} +function KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)} +function qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}} +function oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}} +function NRd(a){var b,c;if(a.f){while(a.n<a.o){b=BD(!a.j?a.k.Xb(a.n):a.j.pi(a.n),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} +function _i(a,b){var c;this.e=(im(),Qb(a),im(),nm(a));this.c=(Qb(b),nm(b));Lb(this.e.Hd().dc()==this.c.Hd().dc());this.d=Ev(this.e);this.b=Ev(this.c);c=IC(SI,[nie,Uhe],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2);this.a=c;Ri(this)} +function vz(b){var c=(!tz&&(tz=wz()),tz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return uz(a,c)});return '"'+d+'"'} +function cEb(a){ODb();var b,c;this.b=LDb;this.c=NDb;this.g=(FDb(),EDb);this.d=(ead(),cad);this.a=a;RDb(this);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);!b.a&&pDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),a);b.e=new K6c(b.d)}} +function HQb(a){var b,c,d,e,f,g;e=a.e.c.length;d=KC(yK,eme,15,e,0,1);for(g=new olb(a.e);g.a<g.c.c.length;){f=BD(mlb(g),144);d[f.b]=new Psb}for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);d[b.c.b].Fc(b);d[b.d.b].Fc(b)}return d} +function fDc(a){var b,c,d,e,f,g,h;h=Pu(a.c.length);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),10);g=new Tqb;f=U_b(d);for(c=new Sr(ur(f.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||Qqb(g,b.d.i)}h.c[h.c.length]=g}return h} +function ozd(a,b){var c,d,e,f,g;c=BD(Ajd(a.a,4),126);g=c==null?0:c.length;if(b>=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e} +function m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))} +function AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)} +function IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}} +function Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)} +function olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tCb(d,g.c.length),BD(g.c[d],113));f.c&&G0b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tCb(c,g.c.length),BD(g.c[c],113));f.c&&G0b(f.d,b.b)}} +function TGc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Ddb(d.a,e.a);f<0?WGc(a,b,c):f>0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0} +function swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))} +function Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;b<Chb.length;b++){Bhb[b]=Ogb(Bhb[b-1],Bhb[1]);Chb[b]=Ogb(Chb[b-1],(Hgb(),Egb))}} +function K4b(a,b){var c,d,e,f,g;if(a.a==(yrc(),wrc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)} +function DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);h=a.g[f.p];b=BD(Wrb(c,h),15);if(!b){b=new Rkb;Xrb(c,h,b)}b.Fc(f)}}return c} +function dRc(a,b){var c,d,e,f,g;e=b.b.b;a.a=KC(yK,eme,15,e,0,1);a.b=KC(sbb,dle,25,e,16,1);for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);a.a[f.g]=new Psb}for(d=Jsb(b.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} +function qmd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (startX: ';Bfb(b,a.j);b.a+=', startY: ';Bfb(b,a.k);b.a+=', endX: ';Bfb(b,a.b);b.a+=', endY: ';Bfb(b,a.c);b.a+=', identifier: ';Efb(b,a.d);b.a+=')';return b.a} +function EId(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (ordered: ';Ffb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ffb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Cfb(b,a.s);b.a+=', upperBound: ';Cfb(b,a.t);b.a+=')';return b.a} +function Wnd(a,b,c,d,e,f,g,h){var i;JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=d;dJd(a,e);fJd(a,f);ZId(a,g);eJd(a,false);CId(a,true);aJd(a,h);BId(a,true);AId(a,0);a.b=0;DId(a,1);i=xId(a,b,null);!!i&&i.Fi();MJd(a,false);return a} +function fyb(a,b){var c,d,e,f;c=BD(Phb(a.a,b),512);if(!c){d=new wyb(b);e=(oyb(),lyb)?null:d.c;f=qfb(e,0,$wnd.Math.max(0,kfb(e,wfb(46))));vyb(d,fyb(a,f));(lyb?null:d.c).length==0&&qyb(d,new zyb);Shb(a.a,lyb?null:d.c,d);return d}return c} +function BOb(a,b){var c;a.b=b;a.g=new Rkb;c=COb(a.b);a.e=c;a.f=c;a.c=Ccb(DD(vNb(a.b,(fFb(),$Eb))));a.a=ED(vNb(a.b,(Y9c(),r8c)));a.a==null&&(a.a=1);Edb(a.a)>1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)} +function Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a<f.c.c.length;){e=BD(mlb(f),10);yNb(e,(Nyc(),mwc),(F7c(),B7c));e.o.a=d;for(h=Y_b(e,(Ucd(),zcd)).Kc();h.Ob();){g=BD(h.Pb(),11);g.n.a=d}d+=i}} +function Qxd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();kud(a,b,c);d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);a.ij()&&(e=a.jj(c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{kud(a,b,c);if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} +function ILd(a,b,c){var d,e,f,g,h,i;h=a.Gk(c);if(h!=c){g=a.g[b];i=h;mud(a,b,a.oi(b,i));f=g;a.gi(b,i,f);if(a.rk()){d=c;e=a.dj(d,null);!BD(h,49).eh()&&(e=a.cj(i,e));!!e&&e.Fi()}oid(a.e)&&GLd(a,a.Zi(9,c,h,b,false));return h}else{return c}} +function pVb(a,b){var c,d,e,f;for(d=new olb(a.a.a);d.a<d.c.c.length;){c=BD(mlb(d),189);c.g=true}for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.k=Ccb(DD(a.e.Kb(new vgd(e,b))));e.d.g=e.d.g&Ccb(DD(a.e.Kb(new vgd(e,b))))}return a} +function pkc(a){var b,c,d,e,f;c=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));f=BD(vNb(a,(wtc(),gtc)),10);if(f){for(e=new olb(f.j);e.a<e.c.c.length;){d=BD(mlb(e),11);PD(vNb(d,$sc))===PD(a)&&a1b(new b1b(d.b))&&rqb(c,d.j)}}return c} +function zCc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);h=d.d.i;for(g=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);f.c.i==b&&(a.a[f.p]=true)}zCc(a,b,h)}a.d[c.p]=true} +function Bjd(a,b){var c,d,e,f,g,h,i;d=aeb(a.Db&254);if(d==1){a.Eb=null}else{f=CD(a.Eb);if(d==2){e=zjd(a,b);a.Eb=f[e==0?1:0]}else{g=KC(SI,Uhe,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} +function n1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 4:case 5:case 6:{!f&&(f=new Rkb);f.c[f.c.length]=c;break}}}return !f?(mmb(),mmb(),jmb):f} +function Uee(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=zte;}return b} +function Ghb(a,b,c,d,e){var f,g,h,i;if(PD(a)===PD(b)&&d==e){Lhb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=wbb(wbb(Ibb(xbb(f,Yje),xbb(b[i],Yje)),xbb(c[h+i],Yje)),xbb(Tbb(g),Yje));c[h+i]=Tbb(g);g=Pbb(g,32)}c[h+e]=Tbb(g)}} +function COb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),561);b=(c.b&&LOb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} +function mOc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Edb((sCb(b.b!=0),ED(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Edb((sCb(b.b!=0),ED(b.a.a.c)))));isNaN(a.c)?(a.c=Edb((sCb(b.b!=0),ED(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Edb((sCb(b.b!=0),ED(b.c.b.c)))))}} +function Pld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=Xod(e)}else if(b!=Xod(e)){return true}}return false} +function Rxd(a,b){var c,d,e,f;if(a.ej()){c=a.i;f=a.fj();lud(a,b);d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);a.ij()&&(e=a.jj(b,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{lud(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} +function rwd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();++a.j;a.Hi(b,a.oi(b,c));d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{++a.j;a.Hi(b,a.oi(b,c));if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} +function Wee(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BCb(d,a.length),a.charCodeAt(d));if(hfb('.*+?{[()|\\^$',wfb(c))>=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a} +function l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb("Couldn't create new instance of property '"+a.f+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)} +function aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f} +function nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tCb(d,f.c.length),BD(f.c[d],144));for(e=d+1;e<f.c.length;++e){i=(tCb(e,f.c.length),BD(f.c[e],144));c=S6c(h.d,i.d);b=c-a.a[h.b][i.b];g+=a.i[h.b][i.b]*b*b}}return g} +function _ac(a,b){var c;if(wNb(b,(Nyc(),mxc))){return}c=hbc(BD(vNb(b,Uac),360),BD(vNb(a,mxc),163));yNb(b,Uac,c);if(Qr(new Sr(ur(O_b(b).a.Kc(),new Sq)))){return}switch(c.g){case 1:yNb(b,mxc,(Ctc(),xtc));break;case 2:yNb(b,mxc,(Ctc(),ztc));}} +function wkc(a,b){var c;mkc(a);a.a=(c=new Ji,MAb(new YAb(null,new Kub(b.d,16)),new Vkc(c)),c);rkc(a,BD(vNb(b.b,(Nyc(),Wwc)),376));tkc(a);skc(a);qkc(a);ukc(a);vkc(a,b);MAb(LAb(new YAb(null,$i(Yi(a.b).a)),new Lkc),new Nkc);b.a=false;a.a=null} +function Bod(){fod.call(this,yte,(Fhd(),Ehd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} +function Csd(){Csd=ccb;Bsd=new Dsd(Wne,0);ysd=new Dsd('INSIDE_SELF_LOOPS',1);zsd=new Dsd('MULTI_EDGES',2);xsd=new Dsd('EDGE_LABELS',3);Asd=new Dsd('PORTS',4);vsd=new Dsd('COMPOUND',5);usd=new Dsd('CLUSTERS',6);wsd=new Dsd('DISCONNECTED',7)} +function Sgb(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw vbb(new ocb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} +function O1c(a,b,c,d){var e;BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);e=c7c(R6c(BD(c.b,65).c),BD(d.b,65).c);$6c(e,YNb(BD(c.b,65),BD(d.b,65),e));BD(d.b,65);BD(d.b,65);BD(d.b,65).c.a+e.a;BD(d.b,65).c.b+e.b;BD(d.b,65);Hkb(d.a,new T1c(a,b,d))} +function vNd(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=aid(f);d=BD(a.g,674);for(g=0;g<a.i;++g){i=d[g];if(JQd(i)==c){e=(!i.d&&(i.d=new xMd(j5,i,1)),i.d);h=BD(c.ah(Nid(f,f.Cb,f.Db>>16)),15).Xc(f);if(h<e.i){return vNd(a,BD(qud(e,h),87))}}}}return b} +function bcb(a,b,c){var d=_bb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=_bb[b]),ecb(h));_.hm=c;!b&&(_.im=gcb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.gm=f)} +function Qr(a){var b;while(!BD(Qb(a.a),47).Ob()){a.d=Pr(a);if(!a.d){return false}a.a=BD(a.d.Pb(),47);if(JD(a.a,39)){b=BD(a.a,39);a.a=b.a;!a.b&&(a.b=new jkb);Wjb(a.b,a.d);if(b.b){while(!akb(b.b)){Wjb(a.b,BD(gkb(b.b),47))}}a.d=b.d}}return true} +function krb(a,b){var c,d,e,f,g;f=b==null?0:a.b.se(b);d=(c=a.a.get(f),c==null?new Array:c);for(g=0;g<d.length;g++){e=d[g];if(a.b.re(b,e.cd())){if(d.length==1){d.length=0;trb(a.a,f)}else{d.splice(g,1)}--a.c;zpb(a.b);return e.dd()}}return null} +function GGb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(!a.c[c.c]){a.c[c.c]=true;f=xFb(c,b);if(c.f){e+=GGb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Qqb(a.p,c);e+=GGb(a,f)}}}return e} +function MVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a<d.c.c.length;){c=BD(mlb(d),11);PD(vNb(c,$sc))===PD(a)&&(f=$wnd.Math.max(f,O3b(c,e)))}}e.c.length==0||yNb(a,Ysc,f);return f!=-1?e:null} +function a9b(a,b,c){var d,e,f,g,h,i;f=BD(Ikb(b.e,0),17).c;d=f.i;e=d.k;i=BD(Ikb(c.g,0),17).d;g=i.i;h=g.k;e==(j0b(),g0b)?yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11)):yNb(a,(wtc(),Vsc),f);h==g0b?yNb(a,(wtc(),Wsc),BD(vNb(g,Wsc),11)):yNb(a,(wtc(),Wsc),i)} +function Rs(a,b){var c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Bs(d.c,d.f);As(d.b,d.e);--a.f;++a.e;return true}}return false} +function lD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&Gje)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)} +function XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)} +function Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);g.k==(j0b(),f0b)&&zac(g,b);for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);yac(c,b)}}}} +function Xoc(a){var b,c,d;this.c=a;d=BD(vNb(a,(Nyc(),Lwc)),103);b=Edb(ED(vNb(a,owc)));c=Edb(ED(vNb(a,Dyc)));d==(ead(),aad)||d==bad||d==cad?(this.b=b*c):(this.b=1/(b*c));this.j=Edb(ED(vNb(a,wyc)));this.e=Edb(ED(vNb(a,vyc)));this.f=a.b.c.length} +function ADc(a){var b,c;a.e=KC(WD,oje,25,a.p.c.length,15,1);a.k=KC(WD,oje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.e[b.p]=sr(new Sr(ur(R_b(b).a.Kc(),new Sq)));a.k[b.p]=sr(new Sr(ur(U_b(b).a.Kc(),new Sq)))}} +function DDc(a){var b,c,d,e,f,g;e=0;a.q=new Rkb;b=new Tqb;for(g=new olb(a.p);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=e;for(d=new Sr(ur(U_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);Qqb(b,c.d.i)}b.a.Bc(f)!=null;Ekb(a.q,new Vqb(b));b.a.$b();++e}} +function JTc(){JTc=ccb;CTc=new q0b(20);BTc=new Osd((Y9c(),f9c),CTc);HTc=new Osd(T9c,20);uTc=new Osd(r8c,tme);ETc=new Osd(D9c,meb(1));GTc=new Osd(H9c,(Bcb(),true));vTc=y8c;xTc=Y8c;yTc=_8c;zTc=b9c;wTc=W8c;ATc=e9c;DTc=x9c;ITc=(rTc(),pTc);FTc=nTc} +function RBd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Sh()==f&&e.Fb(j)){RBd(a,j);return true}}}}return false} +function skc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Ujc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=(b=Ec(d.k),b.Hc((Ucd(),Acd))?b.Hc(zcd)?b.Hc(Rcd)?b.Hc(Tcd)?null:dkc:fkc:ekc:ckc);kkc(a,d,c[0],(Fkc(),Ckc),0);kkc(a,d,c[1],Dkc,1);kkc(a,d,c[2],Ekc,1)}} +function enc(a,b){var c,d;c=fnc(b);inc(a,b,c);uPc(a.a,BD(vNb(Q_b(b.b),(wtc(),jtc)),230));dnc(a);cnc(a,b);d=KC(WD,oje,25,b.b.j.c.length,15,1);lnc(a,b,(Ucd(),Acd),d,c);lnc(a,b,zcd,d,c);lnc(a,b,Rcd,d,c);lnc(a,b,Tcd,d,c);a.a=null;a.c=null;a.b=null} +function OYc(){OYc=ccb;LYc=(zYc(),yYc);KYc=new Nsd(Bre,LYc);IYc=new Nsd(Cre,(Bcb(),true));meb(-1);FYc=new Nsd(Dre,meb(-1));meb(-1);GYc=new Nsd(Ere,meb(-1));JYc=new Nsd(Fre,false);MYc=new Nsd(Gre,true);HYc=new Nsd(Hre,false);NYc=new Nsd(Ire,-1)} +function yld(a,b,c){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);!a.e&&(a.e=new y5d(B2,a,7,4));ytd(a.e,BD(c,14));return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);!a.d&&(a.d=new y5d(B2,a,8,5));ytd(a.d,BD(c,14));return;}Zkd(a,b,c)} +function At(a,b){var c,d,e,f,g;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}g=BD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(PD(c)===PD(e)||c!=null&&pb(c,e))){return false}}return true} +function U6b(a,b){var c,d,e,f;f=BD(GAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new $6b),new a7b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);f.Jc(new c7b);c=0;for(e=f.Kc();e.Ob();){d=BD(e.Pb(),11);d.p==-1&&T6b(a,d,c++)}} +function Wzc(a){switch(a.g){case 0:return new KLc;case 1:return new dJc;case 2:return new tJc;case 3:return new CMc;case 4:return new $Jc;default:throw vbb(new Wdb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} +function nqc(a){switch(a.g){case 0:return new aCc;case 1:return new VBc;case 2:return new kCc;case 3:return new rCc;case 4:return new eCc;default:throw vbb(new Wdb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} +function HWc(){HWc=ccb;BWc=new Nsd(lre,meb(0));CWc=new Nsd(mre,0);yWc=(pWc(),mWc);xWc=new Nsd(nre,yWc);meb(0);wWc=new Nsd(ore,meb(1));EWc=(sXc(),qXc);DWc=new Nsd(pre,EWc);GWc=(fWc(),eWc);FWc=new Nsd(qre,GWc);AWc=(iXc(),hXc);zWc=new Nsd(rre,AWc)} +function XXb(a,b,c){var d;d=null;!!b&&(d=b.d);hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} +function T6b(a,b,c){var d,e,f;b.p=c;for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(f);){d=BD(Rr(f),11);d.p==-1&&T6b(a,d,c)}if(b.i.k==(j0b(),g0b)){for(e=new olb(b.i.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d!=b&&d.p==-1&&T6b(a,d,c)}}} +function rPc(a){var b,c,d,e,f;e=BD(GAb(IAb(UAb(a)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=dme;if(e.gc()>=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d} +function gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)} +function Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return kr(a.Kc(),d.Kc())}} +function Aac(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){zac((tCb(0,a.c.length),BD(a.c[0],10)),(rbd(),nbd));zac((tCb(1,a.c.length),BD(a.c[1],10)),obd)}else{for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);zac(c,b)}}a.c=KC(SI,Uhe,1,0,5,1)}} +function uKc(a){var b,c;if(a.c.length!=2){throw vbb(new Zdb('Order only allowed for two paths.'))}b=(tCb(0,a.c.length),BD(a.c[0],17));c=(tCb(1,a.c.length),BD(a.c[1],17));if(b.d.i!=c.c.i){a.c=KC(SI,Uhe,1,0,5,1);a.c[a.c.length]=c;a.c[a.c.length]=b}} +function EMc(a,b){var c,d,e,f,g,h;d=new $rb;g=Gx(new amb(a.g));for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),10);if(!e){Sdd(b,'There are no classes in a balanced layout.');break}h=a.j[e.p];c=BD(Wrb(d,h),15);if(!c){c=new Rkb;Xrb(d,h,c)}c.Fc(e)}return d} +function Dqd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Zpd(c,g.a);if(i){j=ftd(_pd(i,Ite),b);Rhb(a.f,j,i);e=Vte in i.a;e&&Lkd(j,_pd(i,Vte));grd(i,j);hrd(i,j)}}}} +function ndc(a,b){var c,d,e,f,g;Odd(b,'Port side processing',1);for(g=new olb(a.a);g.a<g.c.c.length;){e=BD(mlb(g),10);odc(e)}for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);odc(e)}}Qdd(b)} +function bfc(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=BD(a.a.a.ec().Kc().Pb(),57));cfc(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=BD(g.Pb(),57);if(f!=e){h=ugc(f);if(h.f.d){f.d.d+=d+ple;f.d.a-=d+ple}else h.f.a&&(f.d.a-=d+ple)}}} +function tQb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+cme;j=f-cme;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return Ou(OC(GC(m1,1),nie,8,0,[new f7c(k,m),new f7c(l,n)]))} +function OLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])-f.d.d);i=RLc(f,d);if(i){g=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} +function PLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])+f.o.b+f.d.a);i=QLc(f,d);if(i){h=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} +function hkd(a,b){var c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),AAd(a.o,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c)),a);return c} +function Hbd(){Hbd=ccb;zbd=new Ibd('H_LEFT',0);ybd=new Ibd('H_CENTER',1);Bbd=new Ibd('H_RIGHT',2);Gbd=new Ibd('V_TOP',3);Fbd=new Ibd('V_CENTER',4);Ebd=new Ibd('V_BOTTOM',5);Cbd=new Ibd('INSIDE',6);Dbd=new Ibd('OUTSIDE',7);Abd=new Ibd('H_PRIORITY',8)} +function o6d(a){var b,c,d,e,f,g,h;b=a.Hh(_ve);if(b){h=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'settingDelegates'));if(h!=null){c=new Rkb;for(e=mfb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];c.c[c.c.length]=d}return c}}return mmb(),mmb(),jmb} +function sGb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw vbb(new Wdb('The input edge is not a tree edge.'))}f=null;e=Ohe;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);h=c.d;i=c.e;if(xGb(a,h,b)&&!xGb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} +function qTb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=nTb(a);c=Pje;do{b>0&&(e=c);for(g=new olb(a.f.e);g.a<g.c.c.length;){f=BD(mlb(g),144);if(Ccb(DD(vNb(f,(bTb(),USb))))){continue}d=mTb(a,f);P6c(X6c(f.d),d)}c=nTb(a)}while(!pTb(a,b++,e,c))} +function $ac(a,b){var c,d,e;Odd(b,'Layer constraint preprocessing',1);c=new Rkb;e=new Bib(a.a,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),10));if(Zac(d)){Xac(d);c.c[c.c.length]=d;uib(e)}}c.c.length==0||yNb(a,(wtc(),Lsc),c);Qdd(b)} +function sjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;a.a==(Ajc(),xjc)||a.i==(Ucd(),zcd)?(e.a=f):a.a==yjc||a.i==(Ucd(),Tcd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;P6c(e,b);g+=c.o.b+a.e}} +function LSc(a,b,c){var d,e,f,g;Odd(c,'Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;f=null;d=Jsb(b.b,0);while(!f&&d.b!=d.d.c){g=BD(Xsb(d),86);if(Ccb(DD(vNb(g,(mTc(),jTc))))){f=g;e=g.e;e.a=BD(vNb(g,kTc),19).a;e.b=0}}MSc(a,URc(f),Udd(c,1));Qdd(c)} +function xSc(a,b,c){var d,e,f;Odd(c,'Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&ySc(a,Ou(OC(GC(q$,1),fme,86,0,[e])),c);Qdd(c)} +function brd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=$pd(j,'individualSpacings');if(i){d=ikd(b,(Y9c(),O9c));g=!d;if(g){e=new _fd;jkd(b,O9c,e)}h=BD(hkd(b,O9c),373);l=i;f=null;!!l&&(f=(k=$B(l,KC(ZI,nie,2,0,6,1)),new mC(l,k)));if(f){c=new Frd(l,h);reb(f,c)}}} +function frd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(cue in l.a||due in l.a||Ote in l.a){j=null;m=etd(b);g=$pd(l,cue);c=new Ird(m);Eqd(c.a,g);h=$pd(l,due);d=new asd(m);Pqd(d.a,h);f=Ypd(l,Ote);e=new dsd(m);j=(Qqd(e.a,f),f);k=j}i=k;return i} +function $w(a,b){var c,d,e;if(b===a){return true}if(JD(b,543)){e=BD(b,835);if(a.a.d!=e.a.d||Ah(a).gc()!=Ah(e).gc()){return false}for(d=Ah(e).Kc();d.Ob();){c=BD(d.Pb(),416);if(Aw(a,c.a.cd())!=BD(c.a.dd(),14).gc()){return false}}return true}return false} +function BMb(a){var b,c,d,e;d=BD(a.a,19).a;e=BD(a.b,19).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))} +function PIc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0} +function aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e<dme){c=OLc(a.a,d.i,e,a.c);TLc(a.a,d.i,-c);return c>0}else if(e<0&&-e<dme){c=PLc(a.a,d.i,-e,a.c);TLc(a.a,d.i,c);return c>0}return false} +function RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a<l.c.c.length;){k=BD(mlb(l),33);j=k.g;i=k.f;dld(k,k.i+f*e);eld(k,k.j+d*c);cld(k,k.g+e);ald(k,a.a);++f;h=k.g;g=k.f;Ffd(k,new f7c(h,g),new f7c(j,i))}} +function Xmd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=KC(SD,wte,25,e,15,1);h%2!=0&&(g[--e]=jnd((BCb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=jnd(bfb(a,d++));f=jnd(bfb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} +function vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]} +function qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=BGb(e);for(c=e.e-BD(g.a,19).a+1;c<e.e+BD(g.b,19).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} +function SLc(a){var b,c,d,e,f,g,h,i;e=Pje;d=Qje;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);i=Edb(a.p[f.p]);h=i+Edb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} +function r1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=f1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function s1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=g1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function p3d(a,b,c){var d,e,f,g,h,i;g=new yud;h=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];h.rl(e.ak())&&wtd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){i=e.dd();wtd(g,c?b3d(a,b,f,g.i,i):i)}}}return wud(g)} +function T9b(a,b){var c,d,e,f,g;c=new Rpb(EW);for(e=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),f=0,g=e.length;f<g;++f){d=e[f];Opb(c,d,new Rkb)}MAb(NAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new hac),new jac),new lac(b)),new nac(c));return c} +function AVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=BD(f.Pb(),33);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}dld(e,k-e.g/2);eld(e,m-e.f/2)}} +function Yfe(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new Dnc(j==-1?a[0]:a[j],b,(xzc(),wzc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){wNb(f[d],(wtc(),Zsc))&&wNb(f[e],Zsc)&&ync(c,f[d],f[e])>0&&++k}}++j}return k} +function Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a} +function TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.g=b.i}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.i=Qje}a.b.Le(a);return a} +function TPc(a,b){var c,d,e,f,g;if(b<2*a.b){throw vbb(new Wdb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Ekb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Ekb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Ekb(a.e,1)}}} +function ard(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=BD(_o(qo(a.i),j),33);if(!k){e=_pd(j,Vte);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw vbb(new cqd(i))}f=Ypd(j,'edges');c=new krd(a,k);mqd(c.a,c.b,f);g=Ypd(j,Jte);d=new vrd(a);xqd(d.a,g)} +function xAd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return h}}}}return -1} +function nUd(a,b){var c,d,e;c=b==null?Wd(irb(a.f,null)):Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e}else if(JD(c,498)){d=BD(c,1938);e=d.a;!!e&&(e.yb==null?undefined:b==null?jrb(a.f,null,e):Drb(a.g,b,e));return e}else{return null}} +function ide(a){hde();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=rfb(a);f=e/2|0;c=KC(SD,wte,25,f,15,1);for(d=0;d<f;d++){g=fde[b[d*2]];if(g==-1)return null;h=fde[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} +function lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e} +function r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];i.rl(f.ak())&&wtd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){j=f.dd();wtd(h,d?b3d(a,b,g,h.i,j):j)}}}return xud(h,c)} +function YCc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new olb(b.j);h.a<h.c.c.length;){g=BD(mlb(h),11);for(d=new olb(g.g);d.a<d.c.c.length;){c=BD(mlb(d),17);j=c.d.i;if(b!=j){i=YCc(a,j);f=$wnd.Math.max(f,i+1)}}}XCc(a,b,f);return f}} +function YGc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tCb(d,a.c.length),BD(a.c[d],10));e=d;while(e>0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb} +function n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(ufb(e).length==0){continue}j=m5c(a,e);if(j==null){return null}else{rqb(k,BD(j,22))}}return k} +function KVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}} +function htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g} +function Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*xub[b]);d=e+g;d>=2147483648&&(d-=Zje);return d}} +function Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}} +function l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];h.c[h.c.length]=c}return h}}}return mmb(),mmb(),jmb} +function FKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=c*Edb(ED(e.b.We(BKb)));e.e.b=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Acd)?-d.rf().b-Edb(ED(d.We(s9c))):Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Acd)?-d.rf().b:0)}} +function Woc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(d=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} +function OOc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tCb(g,b.c.length),BD(b.c[g],329));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i} +function lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc} +function Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i<c.length;i+=2){HAd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new cUd(a5,a,0,3)),a.Ab);for(h=0;h<0;++h){e=LHd(BD(qud(d,d.i-1),590));d=e}wtd(d,g)} +function MPb(a,b,c){var d,e,f;sNb.call(this,new Rkb);this.a=b;this.b=c;this.e=a;d=(a.b&&LOb(a),a.a);this.d=KPb(d.a,this.a);this.c=KPb(d.b,this.b);kNb(this,this.d,this.c);LPb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=BD(f.Pb(),266);e.c.c.length>0&&JPb(this,e)}} +function IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null} +function e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a<e.c.c.length;){d=BD(mlb(e),17);c=FAb(new YAb(null,new Kub(d.b,16)),new w4b);c&&++b}for(g=new olb(a.g);g.a<g.c.c.length;){f=BD(mlb(g),17);h=FAb(new YAb(null,new Kub(f.b,16)),new y4b);h&&++b}return b>=2} +function gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(Ljc(c)){e=(f=new Kjc(c),yNb(c,(wtc(),ntc),f),Hjc(f),f);MAb(NAb(LAb(new YAb(null,new Kub(e.d,16)),new jec),new lec),new nec);eec(e)}}Qdd(b)} +function vnc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=BD(Ut(c,0),8);for(k=1;k<c.b;k++){j=BD(Ut(c,k),8);Gsb(d,g,d.c.b,d.c);h=Y6c(P6c(new g7c(g),j),0.5);i=Y6c(new e7c(bRc(f)),e);P6c(h,i);Gsb(d,h,d.c.b,d.c);g=j;f=b==0?Xcd(f):Vcd(f)}Dsb(d,(sCb(c.b!=0),BD(c.c.b.c,8)))} +function Jbd(a){Hbd();var b,c,d;c=qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Dbd]));if(Ox(Cx(c,a))>1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true} +function U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null} +function ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}} +function mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a<f.c.c.length;){d=BD(mlb(f),268);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a<e.c.c.length;){d=BD(mlb(e),268);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}} +function Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e} +function r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f<a.i;++f){g=c[f];if(h.rl(g.ak())){if(pb(g,d)){return false}else{BD(Gtd(a,f,b),72);return true}}}}return wtd(a,b)} +function r9b(a,b,c,d){var e,f,g,h;e=new b0b(a);__b(e,(j0b(),f0b));yNb(e,(wtc(),$sc),b);yNb(e,ktc,d);yNb(e,(Nyc(),Vxc),(dcd(),$bd));yNb(e,Vsc,b.c);yNb(e,Wsc,b.d);zbc(b,e);h=$wnd.Math.floor(c/2);for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);f.n.b=h}return e} +function wac(a,b){var c,d,e,f,g,h,i,j,k;i=Pu(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new xkb(a);f.a!=f.b;){e=BD(vkb(f),10);c=(h=BD(vNb(e,(wtc(),Vsc)),11),!h?null:h.i);d=(g=BD(vNb(e,Wsc),11),!g?null:g.i);if(j!=c||k!=d){Aac(i,b);j=c;k=d}i.c[i.c.length]=e}Aac(i,b)} +function HNc(a){var b,c,d,e,f,g,h;b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);for(f=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a==e.d.i.c&&e.c.j==(Ucd(),Tcd)){g=A0b(e.c).b;h=A0b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} +function aWc(a,b,c){var d,e,f;Odd(c,'Remove overlaps',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);a.f=d;a.a=tXc(BD(hkd(b,(ZWc(),WWc)),293));e=ED(hkd(b,(Y9c(),T9c)));FVc(a,(uCb(e),e));f=gVc(d);_Vc(a,b,f,c);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function aYb(a,b,c){switch(c.g){case 1:return new f7c(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new f7c($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new f7c(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new f7c($wnd.Math.min(b.a,a.d.a),b.b);}return new f7c(b.a,b.b)} +function mFc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(Ucd(),Tcd):(Ucd(),zcd);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(ecd(BD(vNb(h,(Nyc(),Vxc)),98))){continue}g=h.e;m=!V_b(h,l).dc()&&!!g;if(m){f=WZb(g);a.b=new sic(f,d?0:f.length-1)}e=e|nFc(a,h,l,m)}return e} +function $sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.d&&(c.d=new y5d(B2,c,8,5)),c.d))}return Qb(b),new sl(b)} +function _sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.e&&(c.e=new y5d(B2,c,7,4)),c.e))}return Qb(b),new sl(b)} +function M9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return x9d}else if(b==45){return w9d}}else if(c==3){return x9d}}return Hcb(d)}} +function aKc(a){var b,c,d,e;b=0;c=0;for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);b=Tbb(wbb(b,HAb(JAb(new YAb(null,new Kub(d.e,16)),new nLc))));c=Tbb(wbb(c,HAb(JAb(new YAb(null,new Kub(d.g,16)),new pLc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} +function WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)} +function yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=c++}}soc(a);toc(a,true);toc(a,false)}Qdd(b)} +function $1c(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(mmb(),mmb(),kmb):c.q).vc().Kc();g.Ob();){f=BD(g.Pb(),42);d=!WAb(JAb(new YAb(null,new Kub(h,16)),new Xxb(new m2c(b,f)))).sd((EAb(),DAb));if(d){i=f.dd();if(JD(i,4)){e=fvd(i);e!=null&&(i=e)}b.Ye(BD(f.cd(),146),i)}}} +function MQd(a,b){var c,d,e,f,g;if(!b){return null}else{f=JD(a.Cb,88)||JD(a.Cb,99);g=!f&&JD(a.Cb,322);for(d=new Fyd((!b.a&&(b.a=new KYd(b,j5,b)),b.a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);if(f?JD(e,88):g?JD(e,148):!!e){return e}}return f?(jGd(),_Fd):(jGd(),YFd)}} +function g3b(a,b){var c,d,e,f,g,h;Odd(b,'Constraints Postprocessor',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=0;for(d=new olb(e.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){yNb(c,(Nyc(),nxc),meb(g));yNb(c,Gwc,meb(h));++h}}++g}Qdd(b)} +function eRc(a,b,c,d){var e,f,g,h,i,j,k;i=new f7c(c,d);c7c(i,BD(vNb(b,(mTc(),WSc)),8));for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);P6c(j.e,i);Dsb(a.b,j)}for(h=Jsb(b.a,0);h.b!=h.d.c;){g=BD(Xsb(h),188);for(f=Jsb(g.a,0);f.b!=f.d.c;){e=BD(Xsb(f),8);P6c(e,i)}Dsb(a.a,g)}} +function uid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();if(!BD(f,66).Oj()){f=_1d(q1d(M6d,f));if(!f){throw vbb(new Wdb(ite+b.ne()+jte))}}e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} +function ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c} +function AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} +function Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}} +function UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j} +function O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}} +function _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1} +function qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=new Bib(d.a,0);while(g.b<g.d.gc()){f=(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),10));if(f.k==(j0b(),g0b)){sbc(f,c);uib(g)}}}Qdd(b)} +function c_c(a,b,c){var d,e;H2c(a.b);K2c(a.b,(Y$c(),V$c),(R0c(),Q0c));K2c(a.b,W$c,b.g);K2c(a.b,X$c,b.a);a.a=F2c(a.b,b);Odd(c,'Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),51);d.pf(b,Udd(c,1))}}Qdd(c)} +function mo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} +function eNb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=Ohe;e=Rie;h=Ohe;f=Rie;for(j=0;j<c;++j){for(k=0;k<b;++k){if(YMb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new Ggd(meb(g),meb(h),meb(i),meb(d))} +function DWb(a,b){var c,d,e,f;f=new Bib(a,0);c=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));while(f.b<f.d.gc()){d=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));e=new dWb(d.c,c.d,b);sCb(f.b>0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} +function Y2b(a){var b,c,d,e,f,g;e=BD(vNb(a,(wtc(),vsc)),11);for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new olb(f.g);d.a<d.c.c.length;){b=BD(mlb(d),17);RZb(b,e);return f}for(c=new olb(f.e);c.a<c.c.c.length;){b=BD(mlb(c),17);QZb(b,e);return f}}return null} +function iA(a,b,c){var d,e;d=Cbb(c.q.getTime());if(ybb(d,0)<0){e=_ie-Tbb(Hbb(Jbb(d),_ie));e==_ie&&(e=0)}else{e=Tbb(Hbb(d,_ie))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Kfb(a,48+e&aje)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);EA(a,e,2)}else{EA(a,e,3);b>3&&EA(a,0,b-3)}} +function cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)} +function lkc(a){var b,c;c=0;for(;c<a.c.length;c++){if(Ojc((tCb(c,a.c.length),BD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(Ojc((tCb(b,a.c.length),BD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} +function mmd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))} +function npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))} +function Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null} +function wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b} +function IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d} +function vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}} +function jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}} +function jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(e<f){new DOc((HOc(),GOc),g,h,f-e)}else if(f<e){new DOc((HOc(),GOc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new DOc((HOc(),GOc),g,h,0);new DOc(GOc,h,g,0)}} +function Qoc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new Sr(ur(R_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.c.i.k==(j0b(),i0b)){i=c.c.i;h=BD(vNb(i,(wtc(),$sc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} +function WNc(a,b,c){var d,e,f,g,h,i,j;f=new Rkb;j=new Psb;g=new Psb;XNc(a,j,g,b);VNc(a,j,g,b,c);for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),112);for(e=new olb(h.k);e.a<e.c.c.length;){d=BD(mlb(e),129);(!b||d.c==(HOc(),FOc))&&h.g>d.b.g&&(f.c[f.c.length]=d,true)}}return f} +function k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)} +function Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} +function aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.b.a.c.length==0&&(Gsb(f,d,f.c.b,f.c),true)}if(f.b>1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}} +function $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))} +function uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}} +function G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new olb(a.c.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);g+=h.g.c.length}}else{g=1}e=QD(Eeb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} +function Zjc(a){Xjc();var b,c;if(a.Hc((Ucd(),Scd))){throw vbb(new Wdb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return Tjc;case 2:b=a.Hc(zcd)&&a.Hc(Tcd);c=a.Hc(Acd)&&a.Hc(Rcd);return b||c?Wjc:Vjc;case 3:return Ujc;case 4:return Sjc;default:return null;}} +function Hoc(a,b,c){var d,e,f,g,h;Odd(c,'Breaking Point Removing',1);a.a=BD(vNb(b,(Nyc(),Swc)),218);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(Mu(e.a));h.a<h.c.c.length;){g=BD(mlb(h),10);if(hoc(g)){d=BD(vNb(g,(wtc(),usc)),305);!d.d&&Ioc(a,d)}}}Qdd(c)} +function s6c(a,b,c){i6c();if(m6c(a,b)&&m6c(a,c)){return false}return u6c(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d),b,c)||u6c(new f7c(a.c+a.b,a.d),new f7c(a.c+a.b,a.d+a.a),b,c)||u6c(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a),b,c)||u6c(new f7c(a.c,a.d+a.a),new f7c(a.c,a.d),b,c)} +function x1d(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=GD(a.Xb(c));if(f==null?b==null:dfb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!dfb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!dfb(Ewe,b):dfb(f,Fwe)&&!dfb(Ewe,b)||dfb(f,b)){return true}}}return false} +function J3b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=KC(tN,ile,306,g,0,1);for(h=0;h<g;h++){f=BD(Ikb(a.j,h),11);f.p=h;i[h]=D3b(N3b(f),c,d)}F3b(a,i,c,b,d);j=new Lqb;for(e=0;e<i.length;e++){!!i[e]&&Rhb(j,BD(Ikb(a.j,e),11),i[e])}if(j.f.c+j.g.c!=0){yNb(a,(wtc(),Csc),j);L3b(a,i)}} +function Lgc(a,b,c){var d,e,f;for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);f=tgc(d);if(f){if(f.k==(j0b(),e0b)){switch(BD(vNb(f,(wtc(),Hsc)),61).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} +function kAc(){kAc=ccb;iAc=new lAc(ane,0);dAc=new lAc('NIKOLOV',1);gAc=new lAc('NIKOLOV_PIXEL',2);eAc=new lAc('NIKOLOV_IMPROVED',3);fAc=new lAc('NIKOLOV_IMPROVED_PIXEL',4);cAc=new lAc('DUMMYNODE_PERCENTAGE',5);hAc=new lAc('NODECOUNT_PERCENTAGE',6);jAc=new lAc('NO_BOUNDARY',7)} +function led(a,b,c){var d,e,f,g,h;e=BD(hkd(b,(X7c(),V7c)),19);!e&&(e=meb(0));f=BD(hkd(c,V7c),19);!f&&(f=meb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Kdb(b.j,c.j);if(d!=0){return d}d=Kdb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Kdb(g,h)}} +function BAd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=BD(d[h],133);g=DAd(a,e.Sh());c=a.d[g];!c&&(c=a.d[g]=a.uj());c.Fc(e)}}}return true}else{return false}} +function o2d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,b,c)} +function OYb(a,b){var c,d,e,f,g,h;c=BD(vNb(b,(wtc(),Esc)),21);g=BD(Qc((xXb(),wXb),c),21);h=BD(Qc(LYb,c),21);for(f=g.Kc();f.Ob();){d=BD(f.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=BD(e.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}return true} +function scc(a,b){var c,d,e,f,g,h;Odd(b,'Partition postprocessing',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);h=new olb(e.j);while(h.a<h.c.c.length){g=BD(mlb(h),11);Ccb(DD(vNb(g,(wtc(),ftc))))&&nlb(h)}}}Qdd(b)} +function ZZc(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return JZc(BD(Ikb(a.a,0),187),b)}g=YZc(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);i+=(e=MZc(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} +function fD(a){var b,c,d,e,f;if(isNaN(a)){return wD(),vD}if(a<-9223372036854775808){return wD(),tD}if(a>=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f} +function rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a<e.c.c.length;){d=BD(mlb(e),838);if(d.Hf()==(Ucd(),Scd)){throw vbb(new Wdb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.vf(f++);qKb(a,d,c)}} +function V0d(a,b){var c,d,e,f,g;e=b.Hh(a.a);if(e){d=(!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b);c=GD(AAd(d,cwe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?w1d(a,b.Aj(),c):f==0?v1d(a,null,c.substr(1)):v1d(a,c.substr(0,f),c.substr(f+1));if(JD(g,148)){return BD(g,148)}}}return null} +function Z0d(a,b){var c,d,e,f,g;d=b.Hh(a.a);if(d){c=(!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b);f=GD(AAd(c,zwe));if(f!=null){e=f.lastIndexOf('#');g=e==-1?w1d(a,b.Aj(),f):e==0?v1d(a,null,f.substr(1)):v1d(a,f.substr(0,e),f.substr(e+1));if(JD(g,148)){return BD(g,148)}}}return null} +function RDb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),57);X6c(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} +function sVb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),81);X6c(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),81);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} +function EMb(a){var b,c,d;c=BD(a.a,19).a;d=BD(a.b,19).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new vgd(meb(c+1),meb(d))}if(c==b&&d<b){return new vgd(meb(c),meb(d+1))}if(c>=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))} +function W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])} +function Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)} +function esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l} +function ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(Uzb(g),false);e=(Tzb(g),g.a);Ekb(f.a,Qb(e));b&=e.qd();c=Ly(c,e.rd())}return BD(BD(Rzb(new YAb(null,Yj(new Kub((im(),nm(f.a)),16),new vy,b,c)),new xy(a)),670),833)} +function UWb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||qWb(a.e.b,b.b))){Ekb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}nWb(b.b)?(a.c=b):(a.b=b);if(b.b==(lWb(),hWb)&&!b.a||b.b==iWb&&b.a||b.b==jWb&&b.a||b.b==kWb&&!b.a){if(!!a.c&&!!a.b){c=new J6c(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} +function L2c(a){var b;D2c.call(this);this.i=new Z2c;this.g=a;this.f=BD(a.e&&a.e(),9).length;if(this.f==0){throw vbb(new Wdb('There must be at least one phase in the phase enumeration.'))}this.c=(b=BD(gdb(this.g),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.a=new j3c;this.b=new Lqb} +function God(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))} +function NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} +function Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)} +function aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d<b.length){throw vbb(new Zdb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} +function Und(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new jUd(a,d5,a)),a.rb);h=new Mqb(f.i);for(e=new Fyd(f);e.e!=e.i.gc();){d=BD(Dyd(e),138);g=d.ne();c=BD(g==null?jrb(h.f,null,d):Drb(h.g,g,d),138);!!c&&(g==null?jrb(h.f,null,c):Drb(h.g,g,c))}a.tb=h}return BD(Phb(a.tb,b),138)} +function YKd(a,b){var c,d,e,f,g;(a.i==null&&TKd(a),a.i).length;if(!a.p){g=new Mqb((3*a.g.i/2|0)+1);for(e=new $yd(a.g);e.e!=e.i.gc();){d=BD(Zyd(e),170);f=d.ne();c=BD(f==null?jrb(g.f,null,d):Drb(g.g,f,d),170);!!c&&(f==null?jrb(g.f,null,c):Drb(g.g,f,c))}a.p=g}return BD(Phb(a.p,b),170)} +function hCb(a,b,c,d,e){var f,g,h,i,j;fCb(d+Wy(c,c.$d()),e);gCb(b,jCb(c));f=c.f;!!f&&hCb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=KC(_I,nie,78,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];hCb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} +function dGc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q._f(i,c?0:h-1,c);e=i[c?0:h-1];g=g|cGc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g} +function o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(KAc(),HAc)||c==JAc){i=k_b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];k3b(b,d)&&PZb(d,true)}}if(c==IAc||c==JAc){h=k_b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];j3b(b,d)&&PZb(d,true)}}}} +function Qmc(a){var b,c;b=null;c=null;switch(Lmc(a).g){case 1:b=(Ucd(),zcd);c=Tcd;break;case 2:b=(Ucd(),Rcd);c=Acd;break;case 3:b=(Ucd(),Tcd);c=zcd;break;case 4:b=(Ucd(),Acd);c=Rcd;}mjc(a,BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113));njc(a,BD(Btb(QAb(BD(Qc(a.k,c),15).Oc(),Hmc)),113))} +function a6b(a){var b,c,d,e,f,g;e=BD(Ikb(a.j,0),11);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(e),new R0b(e)])));Qr(d);){c=BD(Rr(d),11);g+=c.i.n.a+c.n.a+c.a.a}b=BD(vNb(a,(Nyc(),Txc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} +function F1c(a,b){var c,d,e;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),221);$Nb(BD(c.b,65),c7c(R6c(BD(b.b,65).c),BD(b.b,65).a));e=xOb(BD(b.b,65).b,BD(c.b,65).b);e>1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}} +function rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.e=0;d.d.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),189);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),81);for(h=b.f.Kc();h.Ob();){g=BD(h.Pb(),81);if(g.d!=d){Qqb(d.d,g);++g.d.e}}}}} +function bcc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)} +function Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c} +function Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tCb(f-1,h.c.length),BD(h.c[f-1],113));e=(tCb(f,h.c.length),BD(h.c[f],113));d=Kmc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} +function sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} +function AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a} +function HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];Iwb(j.a,f,(Bcb(),zcb))==null;for(e=new b1b(f.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);d.c==d.d||Axb(j,f==d.c?d.d:d.c)}}return Qb(j),new Tkb(j)} +function oPc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Jsb(b,0);g=Jsb(c,0);h=Edb(ED(Xsb(f)));i=Edb(ED(Xsb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Edb(ED(Xsb(f)))):i<=h&&g.b!=g.d.c?(i=Edb(ED(Xsb(g)))):(e=false)}while(e)}return d} +function F3b(a,b,c,d,e){var f,g,h,i;i=(f=BD(gdb(F1),9),new xqb(f,BD(_Bb(f,f.length),9),0));for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);if(b[g.p]){G3b(g,b[g.p],d);rqb(i,g.j)}}if(e){K3b(a,b,(Ucd(),zcd),2*c,d);K3b(a,b,Tcd,2*c,d)}else{K3b(a,b,(Ucd(),Acd),2*c,d);K3b(a,b,Rcd,2*c,d)}} +function Szb(a){var b,c,d,e,f;f=new Rkb;Hkb(a.b,new XBb(f));a.b.c=KC(SI,Uhe,1,0,5,1);if(f.c.length!=0){b=(tCb(0,f.c.length),BD(f.c[0],78));for(c=1,d=f.c.length;c<d;++c){e=(tCb(c,f.c.length),BD(f.c[c],78));e!=b&&Qy(b,e)}if(JD(b,60)){throw vbb(BD(b,60))}if(JD(b,289)){throw vbb(BD(b,289))}}} +function DCb(a,b){var c,d,e,f;a=a==null?Xhe:(uCb(a),a);c=new Vfb;f=0;d=0;while(d<b.length){e=a.indexOf('%s',f);if(e==-1){break}Qfb(c,a.substr(f,e-f));Pfb(c,b[d++]);f=e+2}Qfb(c,a.substr(f));if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} +function KCb(a){var b,c,d,e;b=0;d=a.length;e=d-4;c=0;while(c<e){b=(BCb(c+3,a.length),a.charCodeAt(c+3)+(BCb(c+2,a.length),31*(a.charCodeAt(c+2)+(BCb(c+1,a.length),31*(a.charCodeAt(c+1)+(BCb(c,a.length),31*(a.charCodeAt(c)+31*b)))))));b=b|0;c+=4}while(c<d){b=b*31+bfb(a,c++)}b=b|0;return b} +function Rac(a){var b,c;for(c=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.d.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} +function jQc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);h=0;for(f=new Sr(ur(R_b(j).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);l=A0b(e.c).b;m=A0b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} +function See(a){var b;b=new Ifb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&zte)!=0&&(b.a+=',',b);return jfb(b.a)} +function F5b(a,b){var c,d,e,f;Odd(b,'Resize child graph to fit parent.',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);Gkb(a.a,c.a);c.a.c=KC(SI,Uhe,1,0,5,1)}for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),10);$_b(e,null)}a.b.c=KC(SI,Uhe,1,0,5,1);G5b(a);!!a.e&&E5b(a.e,a);Qdd(b)} +function eec(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=ecd(BD(vNb(d,(Nyc(),Vxc)),98));c=!!f&&BD(vNb(f,(wtc(),Ksc)),21).Hc((Orc(),Hrc));if(g||c){return}for(j=(h=(new $ib(a.e)).a.vc().Kc(),new djb(h));j.a.Ob();){i=(b=BD(j.a.Pb(),42),BD(b.dd(),113));if(i.a){e=i.d;F0b(e,null);i.c=true;a.a=true}}} +function QFc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new Unc(m==-1?a[0]:a[m],Xec(e));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){Rnc(b,BD(Ikb(e.j,c),11),BD(Ikb(e.j,d),11))>0&&++n}}}++m}return n} +function hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)} +function S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}} +function Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];RZb(d,i);Fsb(d.a,new f7c(j,k));if(b){h=BD(vNb(d,(Nyc(),jxc)),74);if(!h){h=new s7c;yNb(d,jxc,h)}Dsb(h,new f7c(j,k))}}} +function Ubc(a,b){var c,d,e,f,g,h,i,j,k;e=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=k_b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];QZb(f,e);Esb(f.a,new f7c(j,k));if(b){d=BD(vNb(f,(Nyc(),jxc)),74);if(!d){d=new s7c;yNb(f,jxc,d)}Dsb(d,new f7c(j,k))}}} +function TFc(a,b){var c,d,e,f,g,h;a.b=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);a.e=Dub(a.d);f=new Psb;e=Ou(OC(GC(KQ,1),cne,37,0,[b]));g=0;while(g<e.c.length){d=(tCb(g,e.c.length),BD(e.c[g],37));d.p=g++;c=new fFc(d,a.a,a.b);Gkb(e,c.b);Ekb(a.b,c);c.s&&(h=Jsb(f,0),Vsb(h,c))}a.c=new Tqb;return f} +function HJb(a,b){var c,d,e,f,g,h;for(g=BD(BD(Qc(a.r,b),21),84).Kc();g.Ob();){f=BD(g.Pb(),111);c=f.c?ZHb(f.c):0;if(c>0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}} +function Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);f=TAb(VAb(JAb(JAb(new YAb(null,new Kub(d.a,16)),new Jec),new Lec),new Nec),new Rec);c=c|f.a!=null}c&&yNb(a,(wtc(),Rsc),(Bcb(),true));Qdd(b)} +function sRc(a,b,c){var d,e,f,g,h;e=c;!e&&(e=new Zdd);Odd(e,'Layout',a.a.c.length);if(Ccb(DD(vNb(b,(JTc(),vTc))))){Zfb();for(d=0;d<a.a.c.length;d++){h=(d<10?'0':'')+d++;' Slot '+h+': '+hdb(rb(BD(Ikb(a.a,d),51)))}}for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(b,Udd(e,1))}Qdd(e)} +function yMb(a){var b,c;b=BD(a.a,19).a;c=BD(a.b,19).a;if(b>=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))} +function q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}} +function FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}} +function Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} +function vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),167);c&&rMb(f);Ekb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)} +function Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=BD(f.Xb(m),128);r=g.a.b;g.a.c=o-r/2;o+=h}} +function UHc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=KC(WD,oje,25,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}} +function aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))<a.e.a.c.length){b=AGb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new olb(a.e.a);d.a<d.c.c.length;){c=BD(mlb(d),121);c.j&&(c.e+=e)}Blb(a.c)}Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)}} +function rkc(a,b){var c,d,e,f,g;for(e=BD(Qc(a.a,(Xjc(),Tjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=BD(Ikb(d.j,0),113).d.j;f=new Tkb(d.j);Okb(f,new Xkc);switch(b.g){case 1:jkc(a,f,c,(Fkc(),Dkc),1);break;case 0:g=lkc(f);jkc(a,new Jib(f,0,g),c,(Fkc(),Dkc),0);jkc(a,new Jib(f,g,f.c.length),c,Dkc,1);}}} +function c2c(a,b){Y1c();var c,d;c=j4c(n4c(),b.tg());if(c){d=c.j;if(JD(a,239)){return Zod(BD(a,33))?uqb(d,(N5c(),K5c))||uqb(d,L5c):uqb(d,(N5c(),K5c))}else if(JD(a,352)){return uqb(d,(N5c(),I5c))}else if(JD(a,186)){return uqb(d,(N5c(),M5c))}else if(JD(a,354)){return uqb(d,(N5c(),J5c))}}return true} +function c3d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())&&g!=b){throw vbb(new Wdb(Hwe))}}}return BD(Gtd(a,b,c),72)} +function Sy(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.Zd();return a&&a.Xd()}},suppressed:{get:function(){return c.Yd()}}})}catch(a){}}} +function lhb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new Vgb(a.e,f,e);Jgb(g);return g} +function UPb(a){var b,c,d,e;e=mpd(a);c=new kQb(e);d=new mQb(e);b=new Rkb;Gkb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));Gkb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));return BD(GAb(NAb(JAb(new YAb(null,new Kub(b,16)),c),d),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21)} +function p2d(a,b,c,d){var e,f,g,h,i;h=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){throw vbb(new Wdb(kue))}}else{i=S6d(a.e.Tg(),b);e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,I2d(a,b,c),h?BD(d,72):R6d(b,d))} +function T6d(a,b){Q6d();var c,d,e;if(b.$j()){return true}else if(b.Zj()==-2){if(b==(m8d(),k8d)||b==h8d||b==i8d||b==j8d){return true}else{e=a.Tg();if(bLd(e,b)>=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}} +function R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)} +function bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e<i.c.length;e++){h=(tCb(e,i.c.length),BD(i.c[e],11));if((c?h.j==(Ucd(),zcd):h.j==(Ucd(),Tcd))&&Ccb(DD(vNb(h,(wtc(),Nsc))))){Nkb(i,e,BD(vNb(g[f],(wtc(),$sc)),11));f+=c?1:-1}}} +function rQc(a,b){var c,d,e,f,g;g=new Rkb;c=b;do{f=BD(Ohb(a.b,c),128);f.B=c.c;f.D=c.d;g.c[g.c.length]=f;c=BD(Ohb(a.k,c),17)}while(c);d=(tCb(0,g.c.length),BD(g.c[0],128));d.j=true;d.A=BD(d.d.a.ec().Kc().Pb(),17).c.i;e=BD(Ikb(g,g.c.length-1),128);e.q=true;e.C=BD(e.d.a.ec().Kc().Pb(),17).d.i;return g} +function $wd(a){if(a.g==null){switch(a.p){case 0:a.g=Swd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.g=Scb(Twd(a));break;case 2:a.g=bdb(Uwd(a));break;case 3:a.g=Vwd(a);break;case 4:a.g=new Ndb(Wwd(a));break;case 6:a.g=Aeb(Ywd(a));break;case 5:a.g=meb(Xwd(a));break;case 7:a.g=Web(Zwd(a));}}return a.g} +function hxd(a){if(a.n==null){switch(a.p){case 0:a.n=_wd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.n=Scb(axd(a));break;case 2:a.n=bdb(bxd(a));break;case 3:a.n=cxd(a);break;case 4:a.n=new Ndb(dxd(a));break;case 6:a.n=Aeb(fxd(a));break;case 5:a.n=meb(exd(a));break;case 7:a.n=Web(gxd(a));}}return a.n} +function QDb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),307);d.g=0;d.i=0;d.e.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),307);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),57);for(h=b.c.Kc();h.Ob();){g=BD(h.Pb(),57);if(g.a!=d){Qqb(d.e,g);++g.a.g;++g.a.i}}}}} +function gOb(a,b){var c,d,e,f,g,h;h=Axb(a.a,b.b);if(!h){throw vbb(new Zdb('Invalid hitboxes for scanline overlap calculation.'))}g=false;for(f=(d=new Ywb((new cxb((new Gjb(a.a.a)).a)).b),new Njb(d));sib(f.a.a);){e=(c=Wwb(f.a),BD(c.cd(),65));if(bOb(b.b,e)){T$c(a.b.a,b.b,e);g=true}else{if(g){break}}}} +function G5b(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}H5b(a,c,b)} +function toc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new Coc:new Eoc;f=false;do{f=false;j=b?Su(a.b):a.b;for(i=j.Kc();i.Ob();){h=BD(i.Pb(),29);m=Mu(h.a);b||new ov(m);for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),10);if(e.Mb(k)){d=k;c=BD(vNb(k,(wtc(),usc)),305);g=b?c.b:c.k;f=roc(d,g,b,false)}}}}while(f)} +function WCc(a,b,c){var d,e,f,g,h;Odd(c,'Longest path layering',1);a.a=b;h=a.a.a;a.b=KC(WD,oje,25,h.c.length,15,1);d=0;for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),10);YCc(a,e)}h.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;Qdd(c)} +function QVb(a,b){var c,d,e;b.a?(Axb(a.b,b.b),a.a[b.b.i]=BD(Exb(a.b,b.b),81),c=BD(Dxb(a.b,b.b),81),!!c&&(a.a[c.i]=b.b),undefined):(d=BD(Exb(a.b,b.b),81),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=BD(Dxb(a.b,b.b),81),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),Fxb(a.b,b.b),undefined)} +function zbc(a,b){var c,d,e,f,g,h;f=a.d;h=Edb(ED(vNb(a,(Nyc(),Zwc))));if(h<0){h=0;yNb(a,Zwc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new H0b;G0b(d,(Ucd(),Tcd));F0b(d,b);d.n.b=g;e=new H0b;G0b(e,zcd);F0b(e,b);e.n.b=g;RZb(a,d);c=new UZb;tNb(c,a);yNb(c,jxc,null);QZb(c,e);RZb(c,f);ybc(b,a,c);wbc(a,c);return c} +function uNc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=new j3c;if(c.Hc((Orc(),Irc))){d3c(b,oNc);d3c(b,qNc)}if(c.Hc(Krc)||Ccb(DD(vNb(a,(Nyc(),$wc))))){d3c(b,qNc);c.Hc(Lrc)&&d3c(b,rNc)}c.Hc(Hrc)&&d3c(b,nNc);c.Hc(Nrc)&&d3c(b,sNc);c.Hc(Jrc)&&d3c(b,pNc);c.Hc(Erc)&&d3c(b,lNc);c.Hc(Grc)&&d3c(b,mNc);return b} +function Ihb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ibb(xbb(a.a[0],Yje),xbb(b.a[0],Yje));m=Tbb(k);l=Tbb(Pbb(k,32));return l==0?new Ugb(i,m):new Vgb(i,2,OC(GC(WD,1),oje,25,15,[m,l]))}c=a.a;e=b.a;g=KC(WD,oje,25,h,15,1);Fhb(c,d,e,f,g);j=new Vgb(i,h,g);Jgb(j);return j} +function Gwb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.ue(c.d,b.d);if(e==0){d.d=ijb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Gwb(a,b.a[f],c,d);if(Hwb(b.a[f])){if(Hwb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Hwb(b.a[f].a[f])?(b=Owb(b,1-f)):Hwb(b.a[f].a[1-f])&&(b=Nwb(b,1-f))}}}return b} +function wHb(a,b,c){var d,e,f,g;e=a.i;d=a.n;vHb(a,(gHb(),dHb),e.c+d.b,c);vHb(a,fHb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)} +function Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}} +function inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a<h.c.c.length;){g=BD(mlb(h),101);f=new uOc(null);Ekb(a.a,f);Rhb(a.c,g,f)}a.b=new Lqb;gnc(a,b);for(d=0;d<j.c.length-1;d++){i=BD(Ikb(b.d,d),101);for(e=d+1;e<j.c.length;e++){jnc(a,i,BD(Ikb(b.d,e),101),c)}}} +function ySc(a,b,c){var d,e,f,g,h,i;if(!Qq(b)){i=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(i,Xqe,1);h=new BSc;g=0;for(f=b.Kc();f.Ob();){d=BD(f.Pb(),86);h=pl(OC(GC(KI,1),Uhe,20,0,[h,new ZRc(d)]));g<d.f.b&&(g=d.f.b)}for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);yNb(d,(mTc(),bTc),g)}Qdd(i);ySc(a,h,c)}} +function bJc(a,b){var c,d,e,f,g,h,i;c=Qje;h=(j0b(),h0b);for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.k;if(f!=h0b){g=ED(vNb(d,(wtc(),atc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+iBc(a.a,f,h)}else{d.n.b=(uCb(g),g)}}i=iBc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} +function uQb(a,b,c){var d,e,f,g,h,i,j,k,l;f=itd(b,false,false);j=ofd(f);l=Edb(ED(hkd(b,(CPb(),vPb))));e=sQb(j,l+a.a);k=new XOb(e);tNb(k,b);Rhb(a.b,b,k);c.c[c.c.length]=k;i=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(h=new Fyd(i);h.e!=h.i.gc();){g=BD(Dyd(h),137);d=wQb(a,g,true,0,0);c.c[c.c.length]=d}return k} +function JVc(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.lg(e);f=BD(e.Xb(0),33);if(HVc(a,c,f,false)){return true}g=BD(e.Xb(e.gc()-1),33);if(HVc(a,d,g,true)){return true}if(CVc(a,e)){return true}for(k=e.Kc();k.Ob();){j=BD(k.Pb(),33);for(i=b.Kc();i.Ob();){h=BD(i.Pb(),33);if(BVc(a,j,h)){return true}}}return false} +function qid(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Yg(c),BD(j>=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k<m;++k){g=(tCb(k,b.c.length),BD(b.c[k],72));i=g.dd();h=g.ak();d=e.bh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} +function V6b(a,b,c,d){var e,f,g,h;e=BD(Y_b(b,(Ucd(),Tcd)).Kc().Pb(),11);f=BD(Y_b(b,zcd).Kc().Pb(),11);for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);while(g.e.c.length!=0){RZb(BD(Ikb(g.e,0),17),e)}while(g.g.c.length!=0){QZb(BD(Ikb(g.g,0),17),f)}}c||yNb(b,(wtc(),Vsc),null);d||yNb(b,(wtc(),Wsc),null)} +function itd(a,b,c){var d,e;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){return etd(a)}else{d=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);if(b){Uxd((!d.a&&(d.a=new xMd(y2,d,5)),d.a));omd(d,0);pmd(d,0);hmd(d,0);imd(d,0)}if(c){e=(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a);while(e.i>1){Xxd(e,e.i-1)}}return d}} +function Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);d=new Rkb;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);i=BD(vNb(g,(wtc(),vtc)),15);c=BD(vNb(g,tsc),15);if(!!i||!!c){$2b(g,i,c);!!i&&Gkb(d,i);!!c&&Gkb(d,c)}}Gkb(e.a,d)}Qdd(b)} +function Eac(a,b){var c,d,e,f,g,h,i;c=new jkb;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i=true;d=0;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);switch(g.k.g){case 4:++d;case 1:Xjb(c,g);break;case 0:Gac(g,b);default:c.b==c.c||Fac(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Fac(c,d,i,true,b)}} +function Ebc(a,b){var c,d,e,f,g,h,i;e=new Rkb;for(c=0;c<=a.i;c++){d=new H1b(b);d.p=a.i-c;e.c[e.c.length]=d}for(h=new olb(a.o);h.a<h.c.c.length;){g=BD(mlb(h),10);$_b(g,BD(Ikb(e,a.i-a.f[g.p]),29))}f=new olb(e);while(f.a<f.c.c.length){i=BD(mlb(f),29);i.a.c.length==0&&nlb(f)}b.b.c=KC(SI,Uhe,1,0,5,1);Gkb(b.b,e)} +function KHc(a,b){var c,d,e,f,g,h;c=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);for(e=new b1b(g.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);f=aIc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f} +function Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}} +function UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),222);k=0;ktb(c.b,new XKb);for(g=Jsb(c.b,0);g.b!=g.d.c;){f=BD(Xsb(g),222);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)} +function gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e} +function fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} +function L1b(a,b){var c,d,e,f,g;if(!Xod(a)){return}g=BD(vNb(b,(Nyc(),Fxc)),174);PD(hkd(a,Vxc))===PD((dcd(),ccd))&&jkd(a,Vxc,bcd);d=(Pgd(),new bhd(Xod(a)));f=new hhd(!Xod(a)?null:new bhd(Xod(a)),a);e=PGb(d,f,false,true);rqb(g,(tdd(),pdd));c=BD(vNb(b,Hxc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} +function Pac(a,b,c){var d,e,f,g,h,i;for(g=BD(vNb(a,(wtc(),Lsc)),15).Kc();g.Ob();){f=BD(g.Pb(),10);switch(BD(vNb(f,(Nyc(),mxc)),163).g){case 2:$_b(f,b);break;case 4:$_b(f,c);}for(e=new Sr(ur(O_b(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!!d.c&&!!d.d){continue}h=!d.d;i=BD(vNb(d,ctc),11);h?RZb(d,i):QZb(d,i)}}} +function Alc(){Alc=ccb;tlc=new Blc(xle,0,(Ucd(),Acd),Acd);wlc=new Blc(zle,1,Rcd,Rcd);slc=new Blc(yle,2,zcd,zcd);zlc=new Blc(Ale,3,Tcd,Tcd);vlc=new Blc('NORTH_WEST_CORNER',4,Tcd,Acd);ulc=new Blc('NORTH_EAST_CORNER',5,Acd,zcd);ylc=new Blc('SOUTH_WEST_CORNER',6,Rcd,Tcd);xlc=new Blc('SOUTH_EAST_CORNER',7,zcd,Rcd)} +function i6c(){i6c=ccb;h6c=OC(GC(XD,1),Sje,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} +function Pcc(a,b){var c,d,e,f,g;if(a.c.length==0){return new vgd(meb(0),meb(0))}c=(tCb(0,a.c.length),BD(a.c[0],11)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}return new vgd(meb(g),meb(e))} +function R9b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tCb(c,b.c.length),BD(b.c[c],286));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tCb(e,b.c.length),BD(b.c[e],286));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=BD(Uvb(a.g,d),584);if(a.f<=e.a)throw vbb(new mde(tvd((h0d(),tue))))}a.g.a.c=KC(SI,Uhe,1,0,5,1)}return f} +function _Pd(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);if(dfb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} +function KIb(a,b){var c;c=null;switch(b.g){case 1:a.e.Xe((Y9c(),o9c))&&(c=BD(a.e.We(o9c),249));break;case 3:a.e.Xe((Y9c(),p9c))&&(c=BD(a.e.We(p9c),249));break;case 2:a.e.Xe((Y9c(),n9c))&&(c=BD(a.e.We(n9c),249));break;case 4:a.e.Xe((Y9c(),q9c))&&(c=BD(a.e.We(q9c),249));}!c&&(c=BD(a.e.We((Y9c(),l9c)),249));return c} +function OCc(a,b,c){var d,e,f,g,h,i,j,k,l;b.p=1;f=b.c;for(l=W_b(b,(KAc(),IAc)).Kc();l.Ob();){k=BD(l.Pb(),11);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);j=d.d.i;if(b!=j){g=j.c;if(g.p<=f.p){h=f.p+1;if(h==c.b.c.length){i=new H1b(c);i.p=h;Ekb(c.b,i);$_b(j,i)}else{i=BD(Ikb(c.b,h),29);$_b(j,i)}OCc(a,j,c)}}}}} +function ZXc(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);jkd(g,(ZWc(),SWc),meb(e++));i=gVc(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dre:0;d<0.7853981633974483||d>vre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e} +function Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a<Fgb.length;a++){Fgb[a]=ghb(Nbb(1,a))}} +function B9b(a,b,c,d,e,f){var g,h,i,j;h=!WAb(JAb(a.Oc(),new Xxb(new F9b))).sd((EAb(),DAb));g=a;f==(ead(),dad)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));for(j=g.Kc();j.Ob();){i=BD(j.Pb(),70);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} +function UOc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Osb(b.j);Dsb(b.j,e);Osb(c.e);Dsb(c.e,e);j=new aPc;for(h=new olb(a.f);h.a<h.c.c.length;){f=BD(mlb(h),129);i=f.a;WOc(j,b,i);WOc(j,c,i)}for(g=new olb(a.k);g.a<g.c.c.length;){f=BD(mlb(g),129);i=f.b;WOc(j,b,i);WOc(j,c,i)}j.b+=2;j.a+=POc(b,a.q);j.a+=POc(a.q,c);return j} +function FSc(a,b,c){var d,e,f,g,h;if(!Qq(b)){h=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(h,Xqe,1);g=new ISc;f=null;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);g=pl(OC(GC(KI,1),Uhe,20,0,[g,new ZRc(d)]));if(f){yNb(f,(mTc(),hTc),d);yNb(d,_Sc,f);if(VRc(d)==VRc(f)){yNb(f,iTc,d);yNb(d,aTc,f)}}f=d}Qdd(h);FSc(a,g,c)}} +function VHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(EIb(),CIb)?(h+=(c.a-a.e.b)/2):a.f==BIb&&(h+=c.a-a.e.b);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.tf(f)}} +function XHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(NHb(),KHb)?(h+=(c.b-a.e.a)/2):a.b==MHb&&(h+=c.b-a.e.a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.tf(f)}} +function D4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;i=new f7c(k,n);l=new f7c(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)} +function hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje} +function BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} +function NTb(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Ccb(DD(vNb(a,Gxc)))||OTb(a,c,b)} +function NJc(a,b){var c,d,e,f;for(f=V_b(b,(Ucd(),Rcd)).Kc();f.Ob();){d=BD(f.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=V_b(b,Acd).Kc();e.Ob();){d=BD(e.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} +function QKd(a){var b,c,d,e,f,g;if(!a.c){g=new wNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(VKd(a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);JD(e,88)&&ytd(g,QKd(BD(e,26)));wtd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}tNd(g);vud(g);a.c=new nNd((BD(qud(ZKd((NFd(),MFd).o),15),18),g.i),g.g);$Kd(a).b&=-33}return a.c} +function eee(a){var b;if(a.c!=10)throw vbb(new mde(tvd((h0d(),uue))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw vbb(new mde(tvd((h0d(),Yue))));}return b} +function qD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==Gje&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a<e.c.c.length;){d=BD(mlb(e),29);d.p=c++;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);!b&&!Qq(O_b(f))&&(b=true)}}h=qqb((ead(),cad),OC(GC(t1,1),Kie,103,0,[aad,bad]));if(!b){rqb(h,dad);rqb(h,_9c)}a.a=new mDb(h);Uhb(a.f);Uhb(a.b);Uhb(a.e);Uhb(a.g)} +function _Xb(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=A0b(b.c);i=A0b(b.d);if(d==b.c){h=aYb(a,h,e);i=bYb(b.d)}else{h=bYb(b.c);i=aYb(a,i,e)}j=new t7c(b.a);Gsb(j,h,j.a,j.a.a);Gsb(j,i,j.c.b,j.c);g=b.c==d;l=new BYb;for(f=0;f<j.b-1;++f){k=new vgd(BD(Ut(j,f),8),BD(Ut(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Ekb(l.a,k)}return l} +function O$b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=BD(vNb(a,(Nyc(),Wxc)),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function G6b(a,b,c,d){var e,f,g,h,i;if(sr((D6b(),new Sr(ur(O_b(b).a.Kc(),new Sq))))>=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(PD(e)!==PD(f)){return false}}}return true} +function rAd(a,b){var c,d,e,f,g,h;if(a.f>0){a.qj();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.dd())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(PD(b)===PD(e.dd())){return true}}}}}}return false} +function e6b(a,b,c){var d,e,f,g;Odd(c,'Orthogonally routing hierarchical port edges',1);a.a=0;d=h6b(b);k6b(b,d);j6b(a,b,d);f6b(b);e=BD(vNb(b,(Nyc(),Vxc)),98);f=b.b;d6b((tCb(0,f.c.length),BD(f.c[0],29)),e,b);d6b(BD(Ikb(f,f.c.length-1),29),e,b);g=b.b;b6b((tCb(0,g.c.length),BD(g.c[0],29)));b6b(BD(Ikb(g,g.c.length-1),29));Qdd(c)} +function jnd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}} +function AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)} +function rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)} +function roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e} +function VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a<h.c.c.length;){g=BD(mlb(h),11);PD(vNb(g,(wtc(),$sc)))===PD(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(Ucd(),Acd)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(Ucd(),Acd)?0:b/2);return i} +function NEd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=LCb(b.toLowerCase()));c!=null&&(i^=LCb(c));d!=null&&(i^=LCb(d));g!=null&&(i^=LCb(g));h!=null&&(i^=LCb(h));for(j=0,k=f.length;j<k;j++){i^=LCb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uCb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} +function X_b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(z0b(),u0b);break;case 2:e=(z0b(),w0b);}d=null;switch(c.g){case 1:d=(z0b(),v0b);break;case 2:d=(z0b(),t0b);break;case 3:d=(z0b(),x0b);break;case 4:d=(z0b(),y0b);}return !!e&&!!d?Nq(a.j,new Yb(new amb(OC(GC(_D,1),Uhe,169,0,[BD(Qb(e),169),BD(Qb(d),169)])))):(mmb(),mmb(),jmb)} +function t5b(a){var b,c,d;b=BD(vNb(a,(Nyc(),Hxc)),8);yNb(a,Hxc,new f7c(b.b,b.a));switch(BD(vNb(a,mwc),248).g){case 1:yNb(a,mwc,(F7c(),E7c));break;case 2:yNb(a,mwc,(F7c(),A7c));break;case 3:yNb(a,mwc,(F7c(),C7c));break;case 4:yNb(a,mwc,(F7c(),D7c));}if((!a.q?(mmb(),mmb(),kmb):a.q)._b(ayc)){c=BD(vNb(a,ayc),8);d=c.a;c.a=c.b;c.b=d}} +function jjc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)} +function hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}} +function Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))} +function a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c} +function wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb} +function ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){continue}XXb(i,g,new d7c);for(f=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i.k==e0b||e.d.i.k==e0b){continue}for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);b=c;hYb(i,new cWb(b.a,b.b))}}}return i} +function A0c(){A0c=ccb;z0c=new Lsd(Qre);y0c=(R0c(),Q0c);x0c=new Nsd(Vre,y0c);w0c=(a1c(),_0c);v0c=new Nsd(Rre,w0c);u0c=(N_c(),J_c);t0c=new Nsd(Sre,u0c);p0c=new Nsd(Tre,null);s0c=(C_c(),A_c);r0c=new Nsd(Ure,s0c);l0c=(i_c(),h_c);k0c=new Nsd(Wre,l0c);m0c=new Nsd(Xre,(Bcb(),false));n0c=new Nsd(Yre,meb(64));o0c=new Nsd(Zre,true);q0c=B_c} +function Toc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=KC(sbb,dle,25,a.c.b.c.length,16,1);a.a[0]=false;if(wNb(a.c,(Nyc(),Lyc))){d=BD(vNb(a.c,Lyc),15);for(c=d.Kc();c.Ob();){b=BD(c.Pb(),19).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new olb(a.c.b);g.a<g.c.c.length&&mlb(g);e=1;while(g.a<g.c.c.length){f=BD(mlb(g),29);a.a[e++]=Woc(f)}}} +function TMd(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new Fyd(a.c);d.e!=d.i.gc();){f=BD(Dyd(d),473);c=$Kd(f);XMd(c,b)}}} +function cGc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Ccb((Bcb(),f.e?true:false))&&!BD(Ikb(a.b,f.e.p),214).s&&(e=e|(j=f.e,k=BD(Ikb(a.b,j.p),214),l=k.e,m=SFc(c,l.length),n=l[m][0],n.k==(j0b(),e0b)?(l[m]=aGc(f,l[m],c?(Ucd(),Tcd):(Ucd(),zcd))):k.c.Tf(l,c),o=dGc(a,k,c,d),bGc(k.e,k.o,c),o))}return e} +function p2c(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(PD(hkd(d,(Y9c(),J8c)))!==PD((hbd(),gbd))){g=BD(hkd(b,F9c),149);c=BD(hkd(d,F9c),149);(g==c||!!g&&C3c(g,c))&&(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i!=0&&(f+=p2c(a,d))}}return f} +function nlc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new olb(a.d);g.a<g.c.c.length;){f=BD(mlb(g),101);e=BD(GAb(JAb(new YAb(null,new Kub(f.j,16)),new Ylc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);c=null;if(d<=h){c=(Ucd(),Acd);d+=e.gc()}else if(h<d){c=(Ucd(),Rcd);h+=e.gc()}b=c;MAb(NAb(e.Oc(),new Mlc),new Olc(b))}} +function mkc(a){var b,c,d,e,f,g,h,i;a.b=new _i(new amb((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]))),new amb((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]))));for(g=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]),d=0,e=c.length;d<e;++d){b=c[d];Ui(a.b,f,b,new Rkb)}}} +function KJb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);j=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));k=!c&&!d&&(j||g.gc()==2);HJb(a,b);e=null;i=null;if(h){f=g.Kc();e=BD(f.Pb(),111);i=e;while(f.Ob()){i=BD(f.Pb(),111)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){LJb(g);if(h){e.d.b=0;i.d.c=0}}} +function SKb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);i=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));j=!c&&!d&&(i||g.gc()==2);QKb(a,b);k=null;e=null;if(h){f=g.Kc();k=BD(f.Pb(),111);e=k;while(f.Ob()){e=BD(f.Pb(),111)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){TKb(g);if(h){k.d.d=0;e.d.a=0}}} +function oJc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(k=(d=new olb((new R0b(f)).a.g),new U0b(d));llb(k.a);){j=BD(mlb(k.a),17).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==g0b||i==i0b){if(oJc(a,h,c)){return true}}}}}}return true} +function gJd(a){var b;if((a.Db&64)!=0)return EId(a);b=new Jfb(EId(a));b.a+=' (changeable: ';Ffb(b,(a.Bb&zte)!=0);b.a+=', volatile: ';Ffb(b,(a.Bb&Dve)!=0);b.a+=', transient: ';Ffb(b,(a.Bb&Rje)!=0);b.a+=', defaultValueLiteral: ';Efb(b,a.j);b.a+=', unsettable: ';Ffb(b,(a.Bb&Cve)!=0);b.a+=', derived: ';Ffb(b,(a.Bb&oie)!=0);b.a+=')';return b.a} +function AOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=eNb(a.d);g=BD(vNb(a.b,(CPb(),wPb)),116);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;$Ob(a.b,new f7c(k,j));for(m=new olb(a.g);m.a<m.c.c.length;){l=BD(mlb(m),562);b=l.g-e.a.a;c=l.i-e.c.a;d=P6c(Z6c(new f7c(b,c),l.a,l.b),Y6c(b7c(R6c(HOb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=IOb(l.e);KOb(l.e,c7c(d,f))}} +function tmc(a,b,c,d){var e,f,g,h,i;i=KC(UD,nie,104,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,0,2);for(f=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=KC(UD,Vje,25,a.c[e.g],15,1)}vmc(i,a,Acd);vmc(i,a,Rcd);smc(i,a,Acd,b,c,d);smc(i,a,zcd,b,c,d);smc(i,a,Rcd,b,c,d);smc(i,a,Tcd,b,c,d);return i} +function UGc(a,b,c){if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.b,b)){if(Rqb(BD(Ohb(a.b,b),53),c)){return -1}}else{Rhb(a.b,b,new Tqb)}if(Mhb(a.b,c)){if(Rqb(BD(Ohb(a.b,c),53),b)){return 1}}else{Rhb(a.b,c,new Tqb)}return 0} +function x2d(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=BD(a.g,119);for(h=0;h<a.i;++h){g=e[h];if(g.ak()==b){return Txd(a,g,d)}}}f=(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c));if(oid(a.e)){j=!R2d(a,b);d=Sxd(a,f,d);i=b.$j()?H2d(a,3,b,null,c,M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0),j):H2d(a,1,b,b.zj(),c,-1,j);d?d.Ei(i):(d=i)}else{d=Sxd(a,f,d)}return d} +function CJb(a){var b,c,d,e,f,g;if(a.q==(dcd(),_bd)||a.q==$bd){return}e=a.f.n.d+_Gb(BD(Mpb(a.b,(Ucd(),Acd)),124))+a.c;b=a.f.n.a+_Gb(BD(Mpb(a.b,Rcd),124))+a.c;d=BD(Mpb(a.b,zcd),124);g=BD(Mpb(a.b,Tcd),124);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} +function rdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;Odd(b,'Restoring reversed edges',1);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);for(k=new olb(h.a);k.a<k.c.c.length;){j=BD(mlb(k),10);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);g=k_b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Ccb(DD(vNb(c,(wtc(),ltc))))&&PZb(c,false)}}}}Qdd(b)} +function m4c(){this.b=new $rb;this.d=new $rb;this.e=new $rb;this.c=new $rb;this.a=new Lqb;this.f=new Lqb;hvd(m1,new x4c,new z4c);hvd(l1,new V4c,new X4c);hvd(i1,new Z4c,new _4c);hvd(j1,new b5c,new d5c);hvd(i2,new f5c,new h5c);hvd(DJ,new B4c,new D4c);hvd(xK,new F4c,new H4c);hvd(jK,new J4c,new L4c);hvd(uK,new N4c,new P4c);hvd(kL,new R4c,new T4c)} +function R5d(a){var b,c,d,e,f,g;f=0;b=wId(a);!!b.Bj()&&(f|=4);(a.Bb&Cve)!=0&&(f|=2);if(JD(a,99)){c=BD(a,18);e=zUd(c);(c.Bb&ote)!=0&&(f|=32);if(e){aLd(WId(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new Vfb;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+qfb(a==null?Xhe:(uCb(a),a),g,f);Pfb(c,b[d++]);g=f+2}Ofb(c,a,g,a.length);if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} +function m3b(a){var b,c,d,e,f;f=new Skb(a.a.c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),10);c=BD(vNb(d,(Nyc(),mxc)),163);b=null;switch(c.g){case 1:case 2:b=(Gqc(),Fqc);break;case 3:case 4:b=(Gqc(),Dqc);}if(b){yNb(d,(wtc(),Bsc),(Gqc(),Fqc));b==Dqc?o3b(d,c,(KAc(),HAc)):b==Fqc&&o3b(d,c,(KAc(),IAc))}else{f.c[f.c.length]=d}}return f} +function MHc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),11);AHc(a.b,a.d[h.p]);g=0;for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);if(WHc(d)){f=aIc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false} +function iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:Ny(isNaN(e),isNaN(f))} +function YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),57);b.i=Qje;for(g=b.c.Kc();g.Ob();){f=BD(g.Pb(),57);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b();b.c=BD(Wd(irb(h.f,b)),15)}QDb(a)} +function yVb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),81);b.o=Qje;for(g=b.f.Kc();g.Ob();){f=BD(g.Pb(),81);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b();b.f=BD(Wd(irb(h.f,b)),15)}rVb(a)} +function dNb(a,b,c,d){var e,f;cNb(a,b,c,d);qNb(b,a.j-b.j+c);rNb(b,a.k-b.k+d);for(f=new olb(b.f);f.a<f.c.c.length;){e=BD(mlb(f),324);switch(e.a.g){case 0:nNb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:nNb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:nNb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:nNb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} +function aNb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} +function BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}} +function N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} +function GHc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new Hxb(new pIc(a));for(h=OC(GC(OQ,1),kne,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=CHc(g,d).Kc();l.Ob();){k=BD(l.Pb(),11);for(f=new b1b(k.b);llb(f.a)||llb(f.b);){e=BD(llb(f.a)?mlb(f.a):mlb(f.b),17);if(!OZb(e)){Iwb(m.a,k,(Bcb(),zcb))==null;WHc(e)&&Axb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new Tkb(m)} +function zhd(a,b){var c,d,e,f;f=BD(hkd(a,(Y9c(),A9c)),61).g-BD(hkd(b,A9c),61).g;if(f!=0){return f}c=BD(hkd(a,v9c),19);d=BD(hkd(b,v9c),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(BD(hkd(a,A9c),61).g){case 1:return Kdb(a.i,b.i);case 2:return Kdb(a.j,b.j);case 3:return Kdb(b.i,a.i);case 4:return Kdb(b.j,a.j);default:throw vbb(new Zdb(ine));}} +function _od(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(ete);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e} +function QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} +function r5b(a){var b,c,d;if(!wNb(a,(Nyc(),xxc))){return}d=BD(vNb(a,xxc),21);if(d.dc()){return}c=(b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));d.Hc((Hbd(),Cbd))?rqb(c,Cbd):rqb(c,Dbd);d.Hc(Abd)||rqb(c,Abd);d.Hc(zbd)?rqb(c,Gbd):d.Hc(ybd)?rqb(c,Fbd):d.Hc(Bbd)&&rqb(c,Ebd);d.Hc(Gbd)?rqb(c,zbd):d.Hc(Fbd)?rqb(c,ybd):d.Hc(Ebd)&&rqb(c,Bbd);yNb(a,xxc,c)} +function kHc(a){var b,c,d,e,f,g,h;e=BD(vNb(a,(wtc(),Psc)),10);d=a.j;c=(tCb(0,d.c.length),BD(d.c[0],11));for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(PD(f)===PD(vNb(c,$sc))){if(f.j==(Ucd(),Acd)&&a.p>e.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new uOc(a.p),o=new uOc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,lOc(n),ye(o.j,a.j),o.r=n,lOc(o),new vgd(n,o));l=BD(m.a,112);k=BD(m.b,112);e=(tCb(f,b.c.length),BD(b.c[f],329));g=UOc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tCb(j,b.c.length),BD(b.c[j],329));i=UOc(a,l,k,h);if(SOc(h,i,e,g)){e=h;g=i}}}return f} +function wQb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(JD(b,239)||JD(b,354)||JD(b,186))){throw vbb(new Wdb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new s7c;Dsb(f,new f7c(i,k));Dsb(f,new f7c(i,l));Dsb(f,new f7c(j,l));Dsb(f,new f7c(j,k));h=new XOb(f);tNb(h,b);c&&Rhb(a.b,b,h);return h} +function uXb(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} +function g_b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} +function N1b(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0){throw vbb(new z2c('Edges must have a source.'))}else if((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==0){throw vbb(new z2c('Edges must have a target.'))}else{!a.b&&(a.b=new y5d(z2,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1))){throw vbb(new z2c('Hyperedges are not supported.'))}}} +function OFc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){i=BD(fkb(f),214);j=0;k=BD(vNb(b.j,(Nyc(),ywc)),339);g=Edb(ED(vNb(b.j,uwc)));h=Edb(ED(vNb(b.j,vwc)));if(k!=(tAc(),rAc)){j+=g*PFc(i.e,k);j+=h*QFc(i.e)}l+=pHc(i.d,i.e)+j;for(e=new olb(i.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(l+=NFc(a,c))}}return l} +function dhb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BCb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(phb(),ohb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=KC(WD,oje,25,e,15,1);c=nhb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Icb(b.substr(p,o-p),Rie,Ohe);j=(Dhb(),Hhb(h,h,g,c));j+=xhb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Jgb(a)} +function SGb(a,b,c,d,e,f,g){a.c=d.qf().a;a.d=d.qf().b;if(e){a.c+=e.qf().a;a.d+=e.qf().b}a.b=b.rf().a;a.a=b.rf().b;if(!e){c?(a.c-=g+b.rf().a):(a.c+=d.rf().a+g)}else{switch(e.Hf().g){case 0:case 2:a.c+=e.rf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.rf().a;break;case 1:a.c+=e.rf().a+g;a.d-=g+f.b+g+b.rf().b;break;case 3:a.c+=e.rf().a+g;a.d+=e.rf().b+g+f.b+g;}}} +function gac(a,b){var c,d;this.b=new Rkb;this.e=new Rkb;this.a=a;this.d=b;dac(this);eac(this);this.b.dc()?(this.c=a.c.p):(this.c=BD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=BD(Ikb(this.e,this.e.c.length-1),10).c.p);for(d=BD(vNb(a,(wtc(),ktc)),15).Kc();d.Ob();){c=BD(d.Pb(),70);if(wNb(c,(Nyc(),Owc))){this.d=BD(vNb(c,Owc),227);break}}} +function Anc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.e,b),53);g=BD(Ohb(a.e,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.e,j),53),b);ye(BD(Ohb(a.e,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} +function WGc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.b,b),53);g=BD(Ohb(a.b,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.b,j),53),b);ye(BD(Ohb(a.b,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} +function doc(a,b){var c,d,e;Odd(b,'Breaking Point Insertion',1);d=new Xoc(a);switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:e=new hpc;case 0:e=new Ync;break;default:e=new kpc;}c=e.Vf(a,d);Ccb(DD(vNb(a,Iyc)))&&(c=coc(a,c));if(!e.Wf()&&wNb(a,Myc)){switch(BD(vNb(a,Myc),338).g){case 2:c=tpc(d,c);break;case 1:c=rpc(d,c);}}if(c.dc()){Qdd(b);return}aoc(a,c);Qdd(b)} +function $qd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=Rqd(a,dtd(c),m);Lkd(l,_pd(m,Vte));g=Ypd(m,Lte);d=new mrd(a,l);oqd(d.a,d.b,g);h=Ypd(m,Mte);e=new nrd(a,l);pqd(e.a,e.b,h);if((!l.b&&(l.b=new y5d(z2,l,4,7)),l.b).i==0||(!l.c&&(l.c=new y5d(z2,l,5,8)),l.c).i==0){f=_pd(m,Vte);i=Zte+f;j=i+$te;throw vbb(new cqd(j))}grd(m,l);_qd(a,m,l);k=crd(a,m,l);return k} +function yGb(a,b){var c,d,e,f,g,h,i;e=KC(WD,oje,25,a.e.a.c.length,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);e[f.d]+=f.b.a.c.length}h=Ru(b);while(h.b!=0){f=BD(h.b==0?null:(sCb(h.b!=0),Nsb(h,h.a.a)),121);for(d=vr(new olb(f.g.a));d.Ob();){c=BD(d.Pb(),213);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Gsb(h,i,h.c.b,h.c),true)}}} +function CGb(a){var b,c,d,e,f,g,h,i,j,k,l;c=Rie;e=Ohe;for(h=new olb(a.e.a);h.a<h.c.c.length;){f=BD(mlb(h),121);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=KC(WD,oje,25,c-e+1,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} +function ixd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return BD(hxd(a),19).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Bbb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} +function $ad(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Qse),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new bbd)));p4c(a,Qse,ame,Xad);p4c(a,Qse,uqe,Ksd(Yad));p4c(a,Qse,use,Ksd(Sad));p4c(a,Qse,Fme,Ksd(Tad));p4c(a,Qse,Tme,Ksd(Vad));p4c(a,Qse,bqe,Ksd(Uad))} +function ro(a,b,c){var d,e,f,g,h;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));h=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));f=uo(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=vo(a,c,h);if(g){throw vbb(new Wdb('value already present: '+c))}e=new $o(b,d,c,h);if(f){mo(a,f);po(a,e,f);f.e=null;f.c=null;return f.i}else{po(a,e,null);to(a);return null}} +function E4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;f.b?(i=new f7c(g,n)):(i=new f7c(k,n));f.c?(l=new f7c(k,o)):(l=new f7c(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} +function Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h<i;++h){if(PD(g.jl(h))===PD(a)){e=g.il(h);if(JD(e,99)){f=BD(e,18);if((f.Bb&ote)!=0){return f}}}}throw vbb(new Zdb('The containment feature could not be located'))}}else{return zUd(BD(XKd(a.Tg(),c),18))}}} +function Xee(a){var b,c,d,e,f;d=a.length;b=new Ifb;f=0;while(f<d){c=bfb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=bfb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BCb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Afb(b,e&aje);++f}else{b.a+='\\';Afb(b,e&aje);++f}}else Afb(b,c&aje)}return b.a} +function GVc(a,b){var c,d,e;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);Rc(a.a,c,c);Rc(a.b,c,c);e=gVc(c);if(e.c.length!=0){!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33));while(dVc(e).c.length!=0){e=dVc(e);!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33))}}}} +function fnc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);!!g.i&&(g.i.c=c++)}b=IC(sbb,[nie,dle],[177,25],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tCb(e,k.c.length),BD(k.c[e],101));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tCb(f,k.c.length),BD(k.c[f],101));if(j.i){d=knc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} +function ht(a,b,c,d){var e,f,g;g=new qu(b,c);if(!a.a){a.a=a.e=g;Rhb(a.b,b,new pu(g));++a.c}else if(!d){a.e.b=g;g.d=a.e;a.e=g;e=BD(Ohb(a.b,b),283);if(!e){Rhb(a.b,b,e=new pu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=BD(Ohb(a.b,b),283);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(BD(Ohb(a.b,b),283).b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} +function mfb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=KC(ZI,nie,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=j.substr(0,g);j=qfb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=j.substr(0,1);j=j.substr(1)}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} +function f1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;e=false;for(h=0,k=VKd(l.a).i;h<k;++h){g=BD(nOd(l,h,(f=BD(qud(VKd(l.a),h),87),i=f.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=f1d(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new pFd(j)}j.Gc(c)}}}d=k1d(a,b);if(d.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return d}else{e||(j=new pFd(j));j.Gc(d);return j}}} +function g1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;d=false;for(h=0,k=VKd(l.a).i;h<k;++h){f=BD(nOd(l,h,(e=BD(qud(VKd(l.a),h),87),i=e.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=g1d(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new pFd(j)}j.Gc(c)}}}g=n1d(a,b);if(g.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return g}else{d||(j=new pFd(j));j.Gc(g);return j}}} +function B2d(a,b,c){var d,e,f,g,h,i;if(JD(b,72)){return Txd(a,b,c)}else{h=null;f=null;d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.dd())){f=e.ak();if(JD(f,99)&&(BD(f,18).Bb&ote)!=0){h=e;break}}}if(h){if(oid(a.e)){i=f.$j()?H2d(a,4,f,b,null,M2d(a,f,b,JD(f,99)&&(BD(f,18).Bb&Tje)!=0),true):H2d(a,f.Kj()?2:1,f,b,f.zj(),-1,true);c?c.Ei(i):(c=i)}c=B2d(a,h,c)}return c}} +function pKb(a){var b,c,d,e;d=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){e=d.a}else{e=gIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,(Ucd(),Acd)),244)));e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,Rcd),244)))}b=aKb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;hIb(a.f)} +function $0d(a,b){var c,d,e,f,g,h,i,j,k;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'memberTypes'));if(i!=null){j=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?w1d(a,b.Aj(),e):d==0?v1d(a,null,e.substr(1)):v1d(a,e.substr(0,d),e.substr(d+1));JD(k,148)&&Ekb(j,BD(k,148))}return j}}return mmb(),mmb(),jmb} +function tRb(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,kme,1);a.bf(b);f=0;while(a.df(f)){for(k=new olb(b.e);k.a<k.c.c.length;){i=BD(mlb(k),144);for(h=ul(pl(OC(GC(KI,1),Uhe,20,0,[b.e,b.d,b.b])));Qr(h);){g=BD(Rr(h),357);if(g!=i){e=a.af(g,i);!!e&&P6c(i.a,e)}}}for(j=new olb(b.e);j.a<j.c.c.length;){i=BD(mlb(j),144);d=i.a;Q6c(d,-a.d,-a.d,a.d,a.d);P6c(i.d,d);X6c(d)}a.cf();++f}Qdd(c)} +function $2d(a,b,c){var d,e,f,g;g=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(e,c)){Xxd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(c,e.dd())){Xxd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(e.dd()==null){Xxd(a,f);return true}}}}return false} +function sDc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=KC(sbb,dle,25,b.c.length,16,1)):Blb(a.c);a.a=new Rkb;d=0;for(g=new olb(b);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d++}c=new Psb;for(f=new olb(b);f.a<f.c.c.length;){e=BD(mlb(f),10);if(!a.c[e.p]){tDc(a,e);c.b==0||(sCb(c.b!=0),BD(c.a.a.c,15)).gc()<a.a.c.length?Esb(c,a.a):Fsb(c,a.a);a.a=new Rkb}}return c} +function jYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=BD(qud(b,0),33);dld(g,0);eld(g,0);m=new Rkb;m.c[m.c.length]=g;h=g;f=new d$c(a.a,g.g,g.f,(k$c(),j$c));for(n=1;n<b.i;n++){o=BD(qud(b,n),33);i=kYc(a,g$c,o,h,f,m,c);j=kYc(a,f$c,o,h,f,m,c);k=kYc(a,i$c,o,h,f,m,c);l=kYc(a,h$c,o,h,f,m,c);e=mYc(a,i,j,k,l,o,h,d);dld(o,e.d);eld(o,e.e);c$c(e,j$c);f=e;h=o;m.c[m.c.length]=o}return f} +function K0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,ase),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new N0c)));p4c(a,ase,Qre,Ksd(I0c));p4c(a,ase,ame,G0c);p4c(a,ase,wme,8);p4c(a,ase,Vre,Ksd(H0c));p4c(a,ase,Yre,Ksd(E0c));p4c(a,ase,Zre,Ksd(F0c));p4c(a,ase,Zpe,(Bcb(),false))} +function sXb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=O6c(b.c,c,d);for(l=new olb(b.a);l.a<l.c.c.length;){k=BD(mlb(l),10);P6c(k.n,g);for(n=new olb(k.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(f=new olb(m.g);f.a<f.c.c.length;){e=BD(mlb(f),17);q7c(e.a,g);h=BD(vNb(e,(Nyc(),jxc)),74);!!h&&q7c(h,g);for(j=new olb(e.b);j.a<j.c.c.length;){i=BD(mlb(j),70);P6c(i.n,g)}}}Ekb(a.a,k);k.a=a}} +function g9b(a,b){var c,d,e,f,g;Odd(b,'Node and Port Label Placement and Node Sizing',1);MGb((a$b(),new l$b(a,true,true,new j9b)));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){f=BD(vNb(a,(Nyc(),Yxc)),21);e=f.Hc((rcd(),ocd));g=Ccb(DD(vNb(a,Zxc)));for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);MAb(JAb(new YAb(null,new Kub(c.a,16)),new l9b),new n9b(f,e,g))}}Qdd(b)} +function Y0d(a,b){var c,d,e,f,g,h;c=b.Hh(a.a);if(c){h=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),eue));if(h!=null){e=kfb(h,wfb(35));d=b.Hj();if(e==-1){g=u1d(a,bKd(d));f=h}else if(e==0){g=null;f=h.substr(1)}else{g=h.substr(0,e);f=h.substr(e+1)}switch($1d(q1d(a,b))){case 2:case 3:{return j1d(a,d,g,f)}case 0:case 4:case 5:case 6:{return m1d(a,d,g,f)}}}}return null} +function q2d(a,b,c){var d,e,f,g,h;g=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){return false}}else{h=S6d(a.e.Tg(),b);d=BD(a.g,119);for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){if(g?pb(e,c):c==null?e.dd()==null:pb(c,e.dd())){return false}else{BD(Gtd(a,f,g?BD(c,72):R6d(b,c)),72);return true}}}}return wtd(a,g?BD(c,72):R6d(b,c))} +function uVb(a){var b,c,d,e,f,g,h,i;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}a.c==(ead(),cad)&&tVb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.e=0}for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),81);f.o=Qje;for(e=f.f.Kc();e.Ob();){d=BD(e.Pb(),81);++d.d.e}}JVb(a);for(i=new olb(a.a.b);i.a<i.c.c.length;){h=BD(mlb(i),81);h.k=true}return a} +function Ijc(a,b){var c,d,e,f,g,h,i,j;h=new pjc(a);c=new Psb;Gsb(c,b,c.c.b,c.c);while(c.b!=0){d=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),113);d.d.p=1;for(g=new olb(d.e);g.a<g.c.c.length;){e=BD(mlb(g),409);kjc(h,e);j=e.d;j.d.p==0&&(Gsb(c,j,c.c.b,c.c),true)}for(f=new olb(d.b);f.a<f.c.c.length;){e=BD(mlb(f),409);kjc(h,e);i=e.c;i.d.p==0&&(Gsb(c,i,c.c.b,c.c),true)}}return h} +function hfd(a){var b,c,d,e,f;d=Edb(ED(hkd(a,(Y9c(),G9c))));if(d==1){return}_kd(a,d*a.g,d*a.f);c=Mq(Rq((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),new Hfd));for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.n&&(a.n=new cUd(D2,a,1,7)),a.n),(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),c])));Qr(f);){e=BD(Rr(f),470);e.Gg(d*e.Dg(),d*e.Eg());e.Fg(d*e.Cg(),d*e.Bg());b=BD(e.We(r9c),8);if(b){b.a*=d;b.b*=d}}} +function Mac(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);m=l_b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(BD(vNb(i,(Nyc(),mxc)),163).g){case 1:Qac(i);$_b(i,b);Nac(i,true,d);break;case 3:Rac(i);$_b(i,c);Nac(i,false,e);}}}h=new Bib(a.b,0);while(h.b<h.d.gc()){(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)).a.c.length==0&&uib(h)}} +function d1d(a,b){var c,d,e,f,g,h,i;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Dwe));if(i!=null){d=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];dfb(e,'##other')?Ekb(d,'!##'+u1d(a,bKd(b.Hj()))):dfb(e,'##local')?(d.c[d.c.length]=null,true):dfb(e,Bwe)?Ekb(d,u1d(a,bKd(b.Hj()))):(d.c[d.c.length]=e,true)}return d}}return mmb(),mmb(),jmb} +function kMb(a,b){var c,d,e,f;c=new pMb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} +function hZb(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Ccb(DD(vNb(h,(Nyc(),fxc))));k=0;d=0;for(j=new olb(a.g);j.a<j.c.c.length;){i=BD(mlb(j),17);g=OZb(i);f=g&&e&&Ccb(DD(vNb(i,gxc)));m=i.d.i;g&&f?++d:g&&!f?++k:Q_b(m).e==h?++d:++k}for(c=new olb(a.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=OZb(b);f=g&&e&&Ccb(DD(vNb(b,gxc)));l=b.c.i;g&&f?++k:g&&!f?++d:Q_b(l).e==h?++k:++d}return k-d} +function ULc(a,b,c,d){this.e=a;this.k=BD(vNb(a,(wtc(),otc)),304);this.g=KC(OQ,kne,10,b,0,1);this.b=KC(BI,nie,333,b,7,1);this.a=KC(OQ,kne,10,b,0,1);this.d=KC(BI,nie,333,b,7,1);this.j=KC(OQ,kne,10,b,0,1);this.i=KC(BI,nie,333,b,7,1);this.p=KC(BI,nie,333,b,7,1);this.n=KC(wI,nie,476,b,8,1);Alb(this.n,(Bcb(),false));this.f=KC(wI,nie,476,b,8,1);Alb(this.f,true);this.o=c;this.c=d} +function X9b(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(BD(b.Xb(0),286).d==(Apc(),xpc)){O9b(a,b)}else{for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);switch(c.d.g){case 5:K9b(a,c,Q9b(a,c));break;case 0:K9b(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:K9b(a,c,S9b(a,c));break;case 2:Y9b(c);K9b(a,c,(f=U9b(c),f?c.c:c.f));break;case 1:Y9b(c);K9b(a,c,(e=U9b(c),e?c.f:c.c));}P9b(c.a)}}} +function C4b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=BD(d.Pb(),17);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new f7c(g+(h-g)/2,b.b);Dsb(BD(b.d.a.ec().Kc().Pb(),17).a,i);continue}e=BD(Ohb(b.c,c),459);if(e.b||e.c){E4b(a,c,b);continue}f=a.d==(tBc(),sBc)&&(e.d||e.e)&&K4b(a,b)&&b.d.a.gc()<=1;f?F4b(c,b):D4b(a,c,b)}b.k&&reb(b.d,new X4b)} +function zXc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;dld(b,s);eld(b,t);l=a.a.jg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=gVc(b);if(a.e){a.e.kg(a.d);a.e.lg(o)}for(j=new olb(o);j.a<j.c.c.length;){i=BD(mlb(j),33);k=a.a.jg(i);zXc(a,i,c+a.c,g,g+n*k,f);g+=n*k}} +function jA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[d]);break;case 3:Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:EA(a,d+1,b);}} +function uGb(a,b){var c,d,e,f,g;Odd(b,'Network simplex',1);if(a.e.a.c.length<1){Qdd(b);return}for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);e.e=0}g=a.e.a.c.length>=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d<a.f){tGb(a,c,sGb(a,c));c=zGb(a);++d}g&&EGb(a);a.a?qGb(a,CGb(a)):CGb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;Qdd(b)} +function JQb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new f7c(c,d);c7c(i,BD(vNb(b,(HSb(),ESb)),8));for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),144);P6c(l.d,i);Ekb(a.e,l)}for(h=new olb(b.c);h.a<h.c.c.length;){g=BD(mlb(h),282);for(f=new olb(g.a);f.a<f.c.c.length;){e=BD(mlb(f),559);P6c(e.d,i)}Ekb(a.c,g)}for(k=new olb(b.d);k.a<k.c.c.length;){j=BD(mlb(k),447);P6c(j.d,i);Ekb(a.d,j)}} +function _Bc(a,b){var c,d,e,f,g,h,i,j;for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=BD(vNb(d,(Nyc(),cyc)),19).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}} +function _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),222);j=b.c.c;while(h.a.c!=0){i=BD(zjb(Bwb(h.a)),222);if(i.c.c+i.c.b<j){Jwb(h.a,i)!=null}else{break}}for(g=(e=new Ywb((new cxb((new Gjb(h.a)).a)).b),new Njb(e));sib(g.a.a);){f=(d=Wwb(g.a),BD(d.cd(),222));Dsb(f.b,b);Dsb(b.b,f)}Iwb(h.a,b,(Bcb(),zcb))==null}} +function QEc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new Skb(b.c.length);for(j=new olb(b);j.a<j.c.c.length;){g=BD(mlb(j),10);Ekb(f,a.b[g.c.p][g.p])}LEc(a,f,c);l=null;while(l=MEc(f)){NEc(a,BD(l.a,233),BD(l.b,233),f)}b.c=KC(SI,Uhe,1,0,5,1);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),233);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];b.c[b.c.length]=g;a.a[g.c.p][g.p].a=REc(d.g,d.d[0]).a}}} +function JRc(a,b){var c,d,e,f;if(0<(JD(a,14)?BD(a,14).gc():sr(a.Kc()))){e=b;if(1<e){--e;f=new KRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}return JRc(f,e)}if(e<0){f=new NRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}if(0<(JD(f,14)?BD(f,14).gc():sr(f.Kc()))){return JRc(f,e)}}}return BD(pr(a.Kc()),86)} +function Idd(){Idd=ccb;Bdd=new Jdd('DEFAULT_MINIMUM_SIZE',0);Ddd=new Jdd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Add=new Jdd('COMPUTE_PADDING',2);Edd=new Jdd('OUTSIDE_NODE_LABELS_OVERHANG',3);Fdd=new Jdd('PORTS_OVERHANG',4);Hdd=new Jdd('UNIFORM_PORT_SPACING',5);Gdd=new Jdd('SPACE_EFFICIENT_PORT_LABELS',6);Cdd=new Jdd('FORCE_TABULAR_NODE_LABELS',7);zdd=new Jdd('ASYMMETRICAL',8)} +function s6d(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Tg(),!f?null:bKd(f).Nh().Jh(f));if(c){Xrb(a,b,c);e=b.Tg();for(i=0,j=(e.i==null&&TKd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&TKd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.Ij()&&!h.Jj()){if(JD(h,322)){u6d(a,BD(h,34),b,c)}else{g=BD(h,18);(g.Bb&ote)!=0&&w6d(a,g,b,c)}}}b.kh()&&BD(c,49).vh(BD(b,49).qh())}return c}} +function tGb(a,b,c){var d,e,f;if(!b.f){throw vbb(new Wdb('Given leave edge is no tree edge.'))}if(c.f){throw vbb(new Wdb('Given enter edge is a tree edge already.'))}b.f=false;Sqb(a.p,b);c.f=true;Qqb(a.p,c);d=c.e.e-c.d.e-c.a;xGb(a,c.e,b)||(d=-d);for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);xGb(a,e,b)||(e.e+=d)}a.j=1;Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)} +function x6b(a,b){var c,d,e,f,g,h;h=BD(vNb(b,(Nyc(),Vxc)),98);if(!(h==(dcd(),_bd)||h==$bd)){return}e=(new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),e0b)){continue}c=BD(vNb(f,(wtc(),Hsc)),61);if(c!=(Ucd(),zcd)&&c!=Tcd){continue}d=Edb(ED(vNb(f,htc)));h==_bd&&(d*=e);f.n.b=d-BD(vNb(f,Txc),8).b;M_b(f,false,true)}} +function YDc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;bEc(a,b,c);f=b[c];n=d?(Ucd(),Tcd):(Ucd(),zcd);if(ZDc(b.length,c,d)){e=b[d?c-1:c+1];UDc(a,e,d?(KAc(),IAc):(KAc(),HAc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];XDc(a,g,n)}UDc(a,f,d?(KAc(),HAc):(KAc(),IAc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||XDc(a,g,Wcd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];XDc(a,g,n)}}return false} +function nFc(a,b,c,d){var e,f,g,h,i,j,k;i=V_b(b,c);(c==(Ucd(),Rcd)||c==Tcd)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=BD(i.Xb(f),11);h=BD(i.Xb(f+1),11);if(oFc(a,j,h,d)){g=true;cIc(a.a,BD(i.Xb(f),11),BD(i.Xb(f+1),11));k=BD(i.Xb(f+1),11);i._c(f+1,BD(i.Xb(f),11));i._c(f,k);e=true}}}while(e);return g} +function W2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(oid(a.e)){if(b!=c){e=BD(a.g,119);n=e[c];g=n.ak();if(T6d(a.e,g)){o=S6d(a.e.Tg(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)} +function Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);g=BD(vNb(e,Vxc),98);h=e.j;if(g==(dcd(),Zbd)||g==_bd||g==$bd){mmb();Okb(h,Icc)}else if(g!=bcd&&g!=ccd){mmb();Okb(h,Lcc);Scc(h);i==(BAc(),AAc)&&Okb(h,Kcc)}e.i=true;N_b(e)}}Qdd(b)} +function vDc(a){var b,c,d,e,f,g,h,i;i=new Lqb;b=new KFb;for(g=a.Kc();g.Ob();){e=BD(g.Pb(),10);h=nGb(oGb(new pGb,e),b);jrb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=BD(f.Pb(),10);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}AFb(DFb(CFb(BFb(EFb(new FFb,$wnd.Math.max(1,BD(vNb(c,(Nyc(),dyc)),19).a)),1),BD(Ohb(i,c.c.i),121)),BD(Ohb(i,c.d.i),121)))}}return b} +function tNc(){tNc=ccb;oNc=e3c(new j3c,(qUb(),oUb),(S8b(),k8b));qNc=e3c(new j3c,nUb,o8b);rNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);nNc=c3c(e3c(e3c(new j3c,nUb,e8b),oUb,f8b),pUb,g8b);sNc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);pNc=c3c(new j3c,pUb,l8b);lNc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);mNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} +function XC(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=$C(b)-$C(a);g=kD(b,j);i=TC(0,0,0);while(j>=0){h=bD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i} +function TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),11);l=0;f=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(g),new R0b(g)])));Qr(e);){d=BD(Rr(e),11);if(d.i.c==b.c){l+=aEc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(Ucd(),zcd)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==Tcd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} +function Icb(a,b,c){var d,e,f,g,h;if(a==null){throw vbb(new Oeb(Xhe))}f=a.length;g=f>0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(Zcb((BCb(d,a.length),a.charCodeAt(d)))==-1){throw vbb(new Oeb(Oje+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw vbb(new Oeb(Oje+a+'"'))}else if(e||h>c){throw vbb(new Oeb(Oje+a+'"'))}return h} +function dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);if(e.i==0){e.o=0;Gsb(g,e,g.c.b,g.c)}}while(g.b!=0){e=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),112);d=e.o+1;for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);h=b.a;rOc(h,$wnd.Math.max(h.o,d));qOc(h,h.i-1);h.i==0&&(Gsb(g,h,g.c.b,g.c),true)}}} +function v2c(a){var b,c,d,e,f,g,h,i;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),79);d=atd(BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));h=d.i;i=d.j;e=BD(qud((!f.a&&(f.a=new cUd(A2,f,6,6)),f.a),0),202);nmd(e,e.j+h,e.k+i);gmd(e,e.b+h,e.c+i);for(c=new Fyd((!e.a&&(e.a=new xMd(y2,e,5)),e.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);ukd(b,b.a+h,b.b+i)}p7c(BD(hkd(f,(Y9c(),Q8c)),74),h,i)}} +function fee(a){var b;switch(a){case 100:return kee(nxe,true);case 68:return kee(nxe,false);case 119:return kee(oxe,true);case 87:return kee(oxe,false);case 115:return kee(pxe,true);case 83:return kee(pxe,false);case 99:return kee(qxe,true);case 67:return kee(qxe,false);case 105:return kee(rxe,true);case 73:return kee(rxe,false);default:throw vbb(new hz((b=a,mxe+b.toString(16))));}} +function $Xb(a){var b,c,d,e,f;e=BD(Ikb(a.a,0),10);b=new b0b(a);Ekb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(BD(vNb(e,(wtc(),Hsc)),61).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new H0b;F0b(d,b);c=new UZb;f=BD(Ikb(e.j,0),11);QZb(c,f);RZb(c,d);P6c(X6c(d.n),f.n);P6c(X6c(d.a),f.a);return b} +function Fac(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)} +function pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}} +function B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))} +function tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&bfb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} +function Hjc(a){var b,c,d,e,f,g,h,i,j;g=new Rkb;for(d=new Sr(ur(U_b(a.b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);OZb(c)&&Ekb(g,new Gjc(c,Jjc(a,c.c),Jjc(a,c.d)))}for(j=(f=(new $ib(a.e)).a.vc().Kc(),new djb(f));j.a.Ob();){h=(b=BD(j.a.Pb(),42),BD(b.dd(),113));h.d.p=0}for(i=(e=(new $ib(a.e)).a.vc().Kc(),new djb(e));i.a.Ob();){h=(b=BD(i.a.Pb(),42),BD(b.dd(),113));h.d.p==0&&Ekb(a.d,Ijc(a,h))}} +function W1b(a){var b,c,d,e,f,g,h;f=mpd(a);for(e=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));e.e!=e.i.gc();){d=BD(Dyd(e),79);h=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));if(!ntd(h,f)){return true}}for(c=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));c.e!=c.i.gc();){b=BD(Dyd(c),79);g=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));if(!ntd(g,f)){return true}}return false} +function Dmc(a){var b,c,d,e,f,g,h,i;i=new s7c;b=Jsb(a,0);h=null;c=BD(Xsb(b),8);e=BD(Xsb(b),8);while(b.b!=b.d.c){h=c;c=e;e=BD(Xsb(b),8);f=Emc(c7c(new f7c(h.a,h.b),c));g=Emc(c7c(new f7c(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Eeb(f.a)*d;f.b=Eeb(f.b)*d;g.a=Eeb(g.a)*d;g.b=Eeb(g.b)*d;Dsb(i,P6c(f,c));Dsb(i,P6c(g,c))}return i} +function _hd(a,b,c,d){var e,f,g,h,i;g=a.eh();i=a.Zg();e=null;if(i){if(!!b&&(Nid(a,b,c).Bb&Tje)==0){d=Txd(i.Vk(),a,d);a.uh(null);e=b.fh()}else{i=null}}else{!!g&&(i=g.fh());!!b&&(e=b.fh())}i!=e&&!!i&&i.Zk(a);h=a.Vg();a.Rg(b,c);i!=e&&!!e&&e.Yk(a);if(a.Lg()&&a.Mg()){if(!!g&&h>=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d} +function LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Efb(d,a.j[b])}if(a.g!=null){d.a+='?';Efb(d,a.g)}}else{Efb(d,a.a)}if(a.e!=null){d.a+='#';Efb(d,a.e)}a.b=d.a}return a.b} +function E5b(a,b){var c,d,e,f,g,h;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=vNb(d,(wtc(),$sc));if(JD(f,11)){g=BD(f,11);h=b_b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;G0b(g,BD(vNb(d,Hsc),61))}}c=new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){yNb(a,(Nyc(),Vxc),(dcd(),$bd));BD(vNb(Q_b(a),Ksc),21).Fc(Krc);j_b(a,c,false)}else{j_b(a,c,true)}} +function YFc(a,b,c){var d,e,f,g,h,i;Odd(c,'Minimize Crossings '+a.a,1);d=b.b.c.length==0||!WAb(JAb(new YAb(null,new Kub(b.b,16)),new Xxb(new xGc))).sd((EAb(),DAb));i=b.b.c.length==1&&BD(Ikb(b.b,0),29).a.c.length==1;f=PD(vNb(b,(Nyc(),axc)))===PD((hbd(),ebd));if(d||i&&!f){Qdd(c);return}e=TFc(a,b);g=(h=BD(Ut(e,0),214),h.c.Rf()?h.c.Lf()?new kGc(a):new mGc(a):new iGc(a));UFc(e,g);eGc(a);Qdd(c)} +function so(a,b,c,d){var e,f,g,h,i;i=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));e=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));h=vo(a,b,i);g=uo(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw vbb(new Wdb('key already present: '+c))}!!h&&mo(a,h);!!g&&mo(a,g);f=new $o(c,e,b,i);po(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}to(a);return !h?null:h.g} +function Lhb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=wbb(wbb(Ibb(xbb(a[f],Yje),xbb(a[h],Yje)),xbb(c[f+h],Yje)),xbb(Tbb(d),Yje));c[f+h]=Tbb(d);d=Pbb(d,32)}c[f+b]=Tbb(d)}khb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=wbb(wbb(Ibb(xbb(a[e],Yje),xbb(a[e],Yje)),xbb(c[g],Yje)),xbb(Tbb(d),Yje));c[g]=Tbb(d);d=Pbb(d,32);++g;d=wbb(d,xbb(c[g],Yje));c[g]=Tbb(d);d=Pbb(d,32)}return c} +function ZJc(a,b,c){var d,e,f,g,h,i,j,k;if(Qq(b)){return}i=Edb(ED(pBc(c.c,(Nyc(),zyc))));j=BD(pBc(c.c,yyc),142);!j&&(j=new H_b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),11);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=nGb(oGb(new pGb,g),a.f);Rhb(a.k,g,f);AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(k))),d),f));e=g;d=f}AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} +function uZc(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=MZc(c,m,false),j.a);if(d.g+h>m){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n} +function kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)} +function DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(k=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(h),new R0b(h)])));Qr(k);){j=BD(Rr(k),11);DYb(a,j.i,g)}}return g}return null} +function Dmd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(dfb(b,c.d)){return c}}}}}else{if(b==null){for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(c.d==null){return c}}}else{for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(dfb(b,c.d)){return c}}}}}return null} +function gRc(a,b){var c,d,e,f,g,h,i,j;j=DD(vNb(b,(JTc(),GTc)));if(j==null||(uCb(j),j)){dRc(a,b);e=new Rkb;for(i=Jsb(b.b,0);i.b!=i.d.c;){g=BD(Xsb(i),86);c=cRc(a,g,null);if(c){tNb(c,b);e.c[e.c.length]=c}}a.a=null;a.b=null;if(e.c.length>1){for(d=new olb(e);d.a<d.c.c.length;){c=BD(mlb(d),135);f=0;for(h=Jsb(c.b,0);h.b!=h.d.c;){g=BD(Xsb(h),86);g.g=f++}}}return e}return Ou(OC(GC(n$,1),fme,135,0,[b]))} +function rqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=Sqd(a,etd(b),e);jmd(n,_pd(e,Vte));o=null;p=e;q=$pd(p,Yte);r=new urd(n);wqd(r.a,q);s=$pd(p,'endPoint');t=new yrd(n);yqd(t.a,s);u=Ypd(p,Ote);v=new Brd(n);zqd(v.a,u);l=_pd(e,Qte);f=new qrd(a,n);sqd(f.a,f.b,l);m=_pd(e,Pte);g=new rrd(a,n);tqd(g.a,g.b,m);j=Ypd(e,Ste);h=new srd(c,n);uqd(h.b,h.a,j);k=Ypd(e,Rte);i=new trd(d,n);vqd(i.b,i.a,k)} +function i_b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(Ccb(DD(vNb(d,(wtc(),Msc))))){return d}}h=new H0b;yNb(h,(wtc(),Msc),(Bcb(),true));break;case 2:for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(Ccb(DD(vNb(f,(wtc(),etc))))){return f}}h=new H0b;yNb(h,(wtc(),etc),(Bcb(),true));}if(h){F0b(h,a);G0b(h,c);X$b(h.n,a.o,c)}return h} +function O3b(a,b){var c,d,e,f,g,h;h=-1;g=new Psb;for(d=new b1b(a.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);h=$wnd.Math.max(h,Edb(ED(vNb(c,(Nyc(),Zwc)))));c.c==a?MAb(JAb(new YAb(null,new Kub(c.b,16)),new U3b),new W3b(g)):MAb(JAb(new YAb(null,new Kub(c.b,16)),new Y3b),new $3b(g));for(f=Jsb(g,0);f.b!=f.d.c;){e=BD(Xsb(f),70);wNb(e,(wtc(),Dsc))||yNb(e,Dsc,c)}Gkb(b,g);Osb(g)}return h} +function _bc(a,b,c,d,e){var f,g,h,i;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));yNb(f,(wtc(),$sc),b.c.i);g=new H0b;yNb(g,$sc,b.c);G0b(g,e);F0b(g,f);yNb(b.c,gtc,f);h=new b0b(a);__b(h,i0b);yNb(h,Vxc,$bd);yNb(h,$sc,b.d.i);i=new H0b;yNb(i,$sc,b.d);G0b(i,e);F0b(i,h);yNb(b.d,gtc,h);QZb(b,g);RZb(b,i);wCb(0,c.c.length);aCb(c.c,0,f);d.c[d.c.length]=h;yNb(f,ysc,meb(1));yNb(h,ysc,meb(1))} +function BPc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Rqb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Edb(ED(Hsb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Hsb(c.j))))<qme);i=i|($wnd.Math.abs(h-Edb(ED(Isb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Isb(c.j))))<qme)}if(j||i){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(d);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}} +function gNb(a,b,c,d){var e,f,g,h,i,j,k;if(fNb(a,b,c,d)){return true}else{for(g=new olb(b.f);g.a<g.c.c.length;){f=BD(mlb(g),324);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=oNb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=oNb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=oNb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=oNb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} +function LMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(R_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}} +function MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(U_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}} +function Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))} +function W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=new olb(d.a);f=BD(mlb(j),10);l=xJc(a.a[f.p]);while(j.a<j.c.c.length){h=BD(mlb(j),10);m=xJc(a.a[h.p]);if(l!=m){n=jBc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),pad))){SGb(m,k,false,d,e,f,g);H6c(a,m)}}}for(i=c.Kc();i.Ob();){h=BD(i.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),oad))){SGb(m,k,true,d,e,f,g);H6c(a,m)}}}} +function oRc(a,b,c){var d,e,f,g,h,i,j;for(g=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);for(e=new Sr(ur(_sd(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!Pld(d)&&!Pld(d)&&!Qld(d)){i=BD(Wd(irb(c.f,f)),86);j=BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),86);if(!!i&&!!j){h=new QRc(i,j);yNb(h,(mTc(),dTc),d);tNb(h,d);Dsb(i.d,h);Dsb(j.b,h);Dsb(b.a,h)}}}}} +function QKb(a,b){var c,d,e,f,g,h,i,j;for(i=BD(BD(Qc(a.r,b),21),84).Kc();i.Ob();){h=BD(i.Pb(),111);e=h.c?YHb(h.c):0;if(e>0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}} +function FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}} +function xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=fhb(a.f)),a.c);g=(!b.c&&(b.c=fhb(b.f)),b.c);d<0?(f=Ogb(f,Khb(-d))):d>0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e<h?-1:1} +function mTb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new olb(a.f.e);e.a<e.c.c.length;){d=BD(mlb(e),144);if(b==d){continue}g=a.i[b.b][d.b];f+=g;c=S6c(b.d,d.d);c>0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}} +function Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} +function tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b<g.c.length-1){d=(tCb(b-1,g.c.length),BD(g.c[b-1],8));e=(tCb(b,g.c.length),BD(g.c[b],8));f=(tCb(b+1,g.c.length),BD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Kkb(g,b):++b}return g} +function Xgc(a,b){var c,d,e,f,g,h,i;c=vDb(yDb(wDb(xDb(new zDb,b),new K6c(b.e)),Ggc),a.a);b.j.c.length==0||nDb(BD(Ikb(b.j,0),57).a,c);i=new lEb;Rhb(a.e,c,i);g=new Tqb;h=new Tqb;for(f=new olb(b.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Qqb(g,e.c);Qqb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){jEb(i,true,(ead(),aad));jEb(i,false,bad)}else if(d>0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)} +function Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}} +function pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b} +function _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),157));if(l.c.length!=0&&red(g)*qed(g)>f*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l} +function qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){j=a.Oi(e);h=a.cj(j,h);h=h}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{zvd(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){h=a.cj(a.Oi(e),h)}!!h&&h.Fi()}}return true}} +function wwd(a,b,c){var d,e,f,g,h;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,h=(g=a.Ui(b,a.oi(b,c)),g),c,b,f);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){!!h&&(e=a.dj(h,e));e=a.cj(c,e);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return h}else{h=(g=a.Ui(b,a.oi(b,c)),g);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){e=null;!!h&&(e=a.dj(h,null));e=a.cj(c,e);!!e&&e.Fi()}return h}} +function rRb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=BD(vNb(b,(HSb(),GSb)),230);iRb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Ccb(DD(vNb(b,(wSb(),dSb))))){k=a.e.e.c.length;for(i=new olb(b.e);i.a<i.c.c.length;){h=BD(mlb(i),144);j=h.d;j.a=Aub(a.f)*k;j.b=Aub(a.f)*k}}c=b.b;for(f=new olb(b.c);f.a<f.c.c.length;){e=BD(mlb(f),282);d=BD(vNb(e,rSb),19).a;if(d>0){for(g=0;g<d;g++){Ekb(c,new aRb(e))}cRb(e)}}} +function zac(a,b){var c,d,e,f,g,h;if(a.k==(j0b(),f0b)){c=WAb(JAb(BD(vNb(a,(wtc(),ktc)),15).Oc(),new Xxb(new Kac))).sd((EAb(),DAb))?b:(rbd(),pbd);yNb(a,Ssc,c);if(c!=(rbd(),obd)){d=BD(vNb(a,$sc),17);h=Edb(ED(vNb(d,(Nyc(),Zwc))));g=0;if(c==nbd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==pbd){a.o.b-=Edb(ED(vNb(Q_b(a),nyc)));g=(a.o.b-$wnd.Math.ceil(h))/2}for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);e.n.b=g}}}} +function Uge(){Uge=ccb;g5d();Tge=new Vge;OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Xwe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Zwe)]),OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);new Ygb('-1');OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge('\\c+')])]);new Ygb('0');new Ygb('0');new Ygb('1');new Ygb('0');new Ygb(hxe)} +function KQd(a){var b,c;if(!!a.c&&a.c.kh()){c=BD(a.c,49);a.c=BD(xid(a,c),138);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,2,c,a.c));if(JD(a.Cb,399)){a.Db>>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c} +function f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(h=new olb(d.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(Ccb(DD(vNb(g,(Nyc(),exc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new olb(g.j);j.a<j.c.c.length;){i=BD(mlb(j),11);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&e7b(a,g,f<=k)}}}Qdd(b)} +function i7b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Layer constraint edge reversal',1);for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);k=-1;c=new Rkb;j=l_b(f.a);for(e=0;e<j.length;e++){d=BD(vNb(j[e],(wtc(),Osc)),303);if(k==-1){d!=(esc(),dsc)&&(k=e)}else{if(d==(esc(),dsc)){$_b(j[e],null);Z_b(j[e],k++,f)}}d==(esc(),bsc)&&Ekb(c,j[e])}for(i=new olb(c);i.a<i.c.c.length;){h=BD(mlb(i),10);$_b(h,null);$_b(h,f)}}Qdd(b)} +function W6b(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Hyperedge merging',1);U6b(a,b);i=new Bib(b.b,0);while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tCb(j,k.c.length),BD(k.c[j],10));e=d.k;if(e==(j0b(),g0b)&&g==g0b){l=S6b(d,f);if(l.a){V6b(d,f,l.b,l.c);tCb(j,k.c.length);cCb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}Qdd(c)} +function WFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=OFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=OFc(a,b)}while(e>c);return e} +function XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e} +function uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=BD(qud(g,j),87);l=BD(qud(m,j),87);if(!uNd(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} +function X2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(T6d(a.e,b)){l=S6d(a.e.Tg(),b);f=BD(a.g,119);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.rl(g.ak())){e==c&&(i=j);if(e==d){h=j;k=g.dd()}++e}}if(i==-1){throw vbb(new qcb(lue+c+mue+e))}if(h==-1){throw vbb(new qcb(nue+d+mue+e))}Wxd(a,i,h);oid(a.e)&&GLd(a,H2d(a,7,b,meb(d),k,c,true));return k}else{throw vbb(new Wdb('The feature must be many-valued to support move'))}} +function b_b(a,b,c,d){var e,f,g,h,i;i=new g7c(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Edb(ED(vNb(b,(Nyc(),Uxc))));f=a.f;g=a.d;e=a.c;switch(BD(vNb(b,(wtc(),Hsc)),61).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} +function P1b(a){var b,c,d,e,f,g;d=new XZb;tNb(d,a);PD(vNb(d,(Nyc(),Lwc)))===PD((ead(),cad))&&yNb(d,Lwc,a_b(d));if(vNb(d,(g6c(),f6c))==null){g=BD(m6d(a),160);yNb(d,f6c,RD(g.We(f6c)))}yNb(d,(wtc(),$sc),a);yNb(d,Ksc,(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));e=OGb((!Xod(a)?null:(Pgd(),new bhd(Xod(a))),Pgd(),new hhd(!Xod(a)?null:new bhd(Xod(a)),a)),bad);f=BD(vNb(d,Kxc),116);c=d.d;t_b(c,f);t_b(c,e);return d} +function ybc(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,DD(vNb(d,Usc)))}else if(d.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,(Bcb(),true))}else if(e.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(e,Vsc),11));yNb(a,Wsc,BD(vNb(e,Wsc),11));yNb(a,Usc,(Bcb(),true))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} +function FGb(a){var b,c,d,e,f,g,h;a.o=new jkb;d=new Psb;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);LFb(f).c.length==1&&(Gsb(d,f,d.c.b,d.c),true)}while(d.b!=0){f=BD(d.b==0?null:(sCb(d.b!=0),Nsb(d,d.a.a)),121);if(LFb(f).c.length==0){continue}b=BD(Ikb(LFb(f),0),213);c=f.g.a.c.length>0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}} +function _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),128));e=new Bib(a.i,d.b);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),128));kQc(b,c)}}wQc(a.i,BD(vNb(a.d,(wtc(),jtc)),230));zQc(a.i)} +function fKd(a,b){var c,d;if(b!=null){d=dKd(a);if(d){if((d.i&1)!=0){if(d==sbb){return KD(b)}else if(d==WD){return JD(b,19)}else if(d==VD){return JD(b,155)}else if(d==SD){return JD(b,217)}else if(d==TD){return JD(b,172)}else if(d==UD){return LD(b)}else if(d==rbb){return JD(b,184)}else if(d==XD){return JD(b,162)}}else{return pEd(),c=BD(Ohb(oEd,d),55),!c||c.wj(b)}}else if(JD(b,56)){return a.uk(BD(b,56))}}return false} +function ade(){ade=ccb;var a,b,c,d,e,f,g,h,i;$ce=KC(SD,wte,25,255,15,1);_ce=KC(TD,$ie,25,64,15,1);for(b=0;b<255;b++){$ce[b]=-1}for(c=90;c>=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47} +function FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)} +function mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),17);i=f.c;if(c.a._b(i)){j=(FQc(),DQc)}else if(d.a._b(i)){j=(FQc(),EQc)}else{throw vbb(new Wdb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(FQc(),DQc)}else if(d.a._b(k)){l=(FQc(),EQc)}else{throw vbb(new Wdb('Target port must be in one of the port sets.'))}h=new YQc(f,j,l);Rhb(a.b,f,h);e.c[e.c.length]=h}} +function lfd(a,b){var c,d,e,f,g,h,i;if(!mpd(a)){throw vbb(new Zdb(Sse))}d=mpd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return Ucd(),Scd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return Ucd(),Tcd}else if(h+a.g>f){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)} +function vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g<e;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}else{for(g=1;g<c;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<e;g++){f=wbb(f,xbb(d[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}ybb(f,0)!=0&&(a[g]=Tbb(f))} +function _fe(a){wfe();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw vbb(new Wdb('Token#complementRanges(): must be RANGE: '+a.e));f=a;Yfe(f);Vfe(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==lxe&&(d-=2);e=(++vfe,new $fe(4));e.b=KC(WD,oje,25,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=lxe){e.b[g++]=c+1;e.b[g]=lxe}e.a=true;return e} +function Pxd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.ej()){j=a.fj();iud(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,j):a.Zi(5,null,c,b,j);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.cj(k,h);h=a.jj(k,h)}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{iud(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.cj(i,h)}!!h&&h.Fi()}}return true}} +function YNc(a,b,c,d){var e,f,g,h,i;for(g=new olb(a.k);g.a<g.c.c.length;){e=BD(mlb(g),129);if(!d||e.c==(HOc(),FOc)){i=e.b;if(i.g<0&&e.d>0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a<f.c.c.length;){e=BD(mlb(f),129);if(!d||e.c==(HOc(),FOc)){h=e.a;if(h.g<0&&e.d>0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}} +function gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)} +function WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i<b;i++){Aib(e,c);n=new Rkb;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));for(k=m+i;k<a.b;k++){h=o;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));Ekb(n,new aQc(h,o,c))}for(l=m+i;l<a.b;l++){sCb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a<g.c.c.length;){f=BD(mlb(g),407);Aib(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sCb(d.b>0);d.a.Xb(d.c=--d.b)}}}} +function Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe} +function S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb("Layout algorithm '"),b),"' not found for ");yfd(a,c);throw vbb(new y2c(c.a))}}} +function hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];mHb(e,n,m)}}else{d=kIb(a,false);mHb(a.a[0],c.c+b.b,d[0]);mHb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Te()}} +function KMc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new JMc;l.d=0;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);l.d+=f.a.c.length}d=0;e=0;l.a=KC(WD,oje,25,a.b.c.length,15,1);j=0;k=0;l.e=KC(WD,oje,25,l.d,15,1);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d++;l.a[b.p]=e++;k=0;for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new OMc(l);l.b=Pu(l.d);LMc(l,a);l.f=Pu(l.d);MMc(l,a);return l} +function GZc(a,b){var c,d,e,f;f=BD(Ikb(a.n,a.n.c.length-1),211).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} +function LQb(a,b){var c,d,e,f,g,h,i,j,k,l;k=DD(vNb(b,(wSb(),sSb)));if(k==null||(uCb(k),k)){l=KC(sbb,dle,25,b.e.c.length,16,1);g=HQb(b);e=new Psb;for(j=new olb(b.e);j.a<j.c.c.length;){h=BD(mlb(j),144);c=IQb(a,h,null,null,l,g);if(c){tNb(c,b);Gsb(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a<i.c.c.length;){h=BD(mlb(i),144);h.b=f++}}}return e}return Ou(OC(GC($O,1),fme,231,0,[b]))} +function TKd(a){var b,c,d,e,f,g,h;if(!a.g){h=new zNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,TKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));f.e!=f.i.gc();++e){bJd(BD(Dyd(f),449),e)}ytd(h,(!a.s&&(a.s=new cUd(t5,a,21,17)),a.s));vud(h);a.g=new rNd(a,h);a.i=BD(h.g,247);a.i==null&&(a.i=MKd);a.p=null;$Kd(a).b&=-5}return a.g} +function iIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=jIb(a,false);nHb(a.a[0],d.d+c.d,b[0]);nHb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];nHb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Ue()}} +function boc(a){var b,c,d,e,f,g,h,i,j,k;k=KC(WD,oje,25,a.b.c.length+1,15,1);j=new Tqb;d=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);k[d++]=j.a.gc();for(i=new olb(e.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(c=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.zc(b,j)}}for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);for(c=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.Bc(b)!=null}}}return k} +function F2d(a,b,c,d){var e,f,g,h,i;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.rl(f.ak())&&pb(c,f.dd())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&PD(c)===PD(a3d(a,BD(f.dd(),56)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&f.dd()==null){return false}}}return false} +function e3d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);g=BD(a.g,119);if(T6d(a.e,b)){if(b.hi()){f=M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0);if(f>=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){if(e==c){return BD(Gtd(a,i,(Q6d(),BD(b,66).Oj()?BD(d,72):R6d(b,d))),72)}++e}}throw vbb(new qcb(gve+c+mue+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){return Q6d(),BD(b,66).Oj()?h:h.dd()}}return null}} +function ONb(a,b,c,d){var e,f,g,h;h=c;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),221);e=BD(f.b,65);if(Jy(a.b.c,e.b.c+e.b.b)<=0&&Jy(e.b.c,a.b.c+a.b.b)<=0&&Jy(a.b.d,e.b.d+e.b.a)<=0&&Jy(e.b.d,a.b.d+a.b.a)<=0){if(Jy(e.b.c,a.b.c+a.b.b)==0&&d.a<0||Jy(e.b.c+e.b.b,a.b.c)==0&&d.a>0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h} +function ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.a<a.b-1){h=BD(Xsb(g),8);if(i.e!=i.i.gc()){c=BD(Dyd(i),469)}else{c=(Fhd(),d=new xkd,d);Myd(i,c)}ukd(c,h.a,h.b)}while(i.e!=i.i.gc()){Dyd(i);Eyd(i)}f=(sCb(a.b!=0),BD(a.c.b.c,8));gmd(b,f.a,f.b)} +function $lc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new olb((tCb(0,a.c.length),BD(a.c[0],101)).g.b.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d.p=c++}b==(Ucd(),Acd)?Okb(a,new gmc):Okb(a,new kmc);h=0;k=a.c.length-1;while(h<k){g=(tCb(h,a.c.length),BD(a.c[h],101));j=(tCb(k,a.c.length),BD(a.c[k],101));f=b==Acd?g.c:g.a;i=b==Acd?j.a:j.c;amc(g,b,(Ajc(),yjc),f);amc(j,b,xjc,i);++h;--k}h==k&&amc((tCb(h,a.c.length),BD(a.c[h],101)),b,(Ajc(),wjc),null)} +function UVc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new f7c(o,q);j=BD(hkd(b,(Y9c(),C9c)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new f7c(p,r);k=BD(hkd(c,C9c),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} +function gqd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=BD(Ohb(a.c,b),183);if(!m){throw vbb(new cqd('Edge did not exist in input.'))}j=Wpd(m);f=Fhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a));h=!f;if(h){n=new wB;c=new Rrd(a,j,n);Dhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),c);cC(m,Nte,n)}e=ikd(b,(Y9c(),Q8c));if(e){k=BD(hkd(b,Q8c),74);g=!k||Ehe(k);i=!g;if(i){l=new wB;d=new Zrd(l);reb(k,d);cC(m,'junctionPoints',l)}}Upd(m,'container',Mld(b).k);return null} +function eDb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=Ou(OC(GC(GM,1),Uhe,168,0,[new aDb(a,b),new aDb(b,c),new aDb(c,a)]));this.f=Ou(OC(GC(m1,1),nie,8,0,[a,b,c]));this.d=(d=c7c(R6c(this.b),this.a),e=c7c(R6c(this.c),this.a),f=c7c(R6c(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new f7c(j,k))} +function nvd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new yC(a.p);cC(b,fue,m);if(c&&!(!a.f?null:vmb(a.f)).a.dc()){k=new wB;cC(b,'logs',k);h=0;for(o=new Dnb((!a.f?null:vmb(a.f)).b.Kc());o.b.Ob();){n=GD(o.b.Pb());l=new yC(n);tB(k,h);vB(k,h,l);++h}}if(d){j=new TB(a.q);cC(b,'executionTime',j)}if(!vmb(a.a).a.dc()){g=new wB;cC(b,Jte,g);h=0;for(f=new Dnb(vmb(a.a).b.Kc());f.b.Ob();){e=BD(f.b.Pb(),1949);i=new eC;tB(g,h);vB(g,h,i);nvd(e,i,c,d);++h}}} +function PZb(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;QZb(a,null);RZb(a,null);b&&Ccb(DD(vNb(g,(wtc(),Msc))))?QZb(a,i_b(g.i,(KAc(),IAc),(Ucd(),zcd))):QZb(a,g);b&&Ccb(DD(vNb(f,(wtc(),etc))))?RZb(a,i_b(f.i,(KAc(),HAc),(Ucd(),Tcd))):RZb(a,f);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);e=BD(vNb(c,(Nyc(),Qwc)),272);e==(qad(),pad)?yNb(c,Qwc,oad):e==oad&&yNb(c,Qwc,pad)}h=Ccb(DD(vNb(a,(wtc(),ltc))));yNb(a,ltc,(Bcb(),h?false:true));a.a=w7c(a.a)} +function VQb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));f.e!=f.i.gc();){e=BD(Dyd(f),33);g='';(!e.n&&(e.n=new cUd(D2,e,1,7)),e.n).i==0||(g=BD(qud((!e.n&&(e.n=new cUd(D2,e,1,7)),e.n),0),137).a);h=new pRb(g);tNb(h,e);yNb(h,(HSb(),FSb),e);h.b=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Ekb(b.e,h);jrb(c.f,e,h);i=BD(hkd(e,(wSb(),mSb)),98);i==(dcd(),ccd)&&(i=bcd)}} +function XJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=nGb(new pGb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=QD($wnd.Math.max(0,h-l));g=QD($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,BD(vNb(b,(Nyc(),eyc)),19).a),q=JJc(b.c.i.k,b.d.i.k),p*q);e=AFb(DFb(CFb(BFb(EFb(new FFb,o),g),c),BD(Ohb(a.k,b.c),121)));f=AFb(DFb(CFb(BFb(EFb(new FFb,o),k),c),BD(Ohb(a.k,b.d),121)));d=new qKc(e,f);a.c[b.p]=d} +function NEc(a,b,c,d){var e,f,g,h,i,j;g=new _Ec(a,b,c);i=new Bib(d,0);e=false;while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),233));if(h==b||h==c){uib(i)}else if(!e&&Edb(REc(h.g,h.d[0]).a)>Edb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} +function odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);b.j==(Ucd(),Scd)&&(d=BD(vNb(b,(wtc(),gtc)),10),d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,zcd):G0b(b,Tcd))}}else{for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);d=BD(vNb(b,(wtc(),gtc)),10);d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,(Ucd(),zcd)):G0b(b,(Ucd(),Tcd))}yNb(a,Vxc,(dcd(),acd))}} +function age(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d} +function yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j} +function YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b<this.b-1;b++){Ekb(g,ED(mlb(f)))}for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);Ekb(g,ED(mlb(f)));Ekb(this.a,new bQc(d,g));tCb(0,g.c.length);g.c.splice(0,1)}}} +function Bac(a,b){var c,d,e,f,g,h,i,j,k;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),f0b)){i=(j=BD(Rr(new Sr(ur(R_b(g).a.Kc(),new Sq))),17),k=BD(Rr(new Sr(ur(U_b(g).a.Kc(),new Sq))),17),!Ccb(DD(vNb(j,(wtc(),ltc))))||!Ccb(DD(vNb(k,ltc))))?b:sbd(b);zac(g,i)}for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);i=Ccb(DD(vNb(c,(wtc(),ltc))))?sbd(b):b;yac(c,i)}}}} +function yZc(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false} +function Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}} +function YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)} +function MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=WFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}else{c=Ohe;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=XFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}} +function spc(a,b){var c,d,e,f,g,h,i,j;g=new Rkb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=BD(a.Xb(c),19).a+i;while((tCb(h+1,b.c.length),BD(b.c[h+1],19)).a<d){++h}j=0;f=d-(tCb(h,b.c.length),BD(b.c[h],19)).a;e=(tCb(h+1,b.c.length),BD(b.c[h+1],19)).a-d;f>e&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c<a.gc()&&BD(a.Xb(c),19).a+i<=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a){++c}h+=1+j}return g} +function RKd(a){var b,c,d,e,f,g,h;if(!a.d){h=new XNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,RKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new cUd(n5,a,11,10)),new Fyd(a.q));e.e!=e.i.gc();++g){BD(Dyd(e),399)}ytd(h,(!a.q&&(a.q=new cUd(n5,a,11,10)),a.q));vud(h);a.d=new nNd((BD(qud(ZKd((NFd(),MFd).o),9),18),h.i),h.g);a.e=BD(h.g,673);a.e==null&&(a.e=LKd);$Kd(a).b&=-17}return a.d} +function M2d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);i=0;e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.rl(f.ak())){if(pb(c,f.dd())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(PD(c)===PD(a3d(a,BD(f.dd(),56)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(f.dd()==null){return i}++i}}}return -1} +function aed(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;mmb();Okb(a,new Jed);g=Ru(a);n=new Rkb;m=new Rkb;h=null;i=0;while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),157);if(!h||red(h)*qed(h)/2<red(f)*qed(f)){h=f;n.c[n.c.length]=f}else{i+=red(f)*qed(f);m.c[m.c.length]=f;if(m.c.length>1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n} +function y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}} +function E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c} +function Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a<Chb.length){return Chb[b]}else if(a<=50){return Pgb((Hgb(),Egb),b)}else if(a<=_ie){return Qgb(Pgb(Bhb[1],b),b)}if(a>1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e} +function X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i.c=KC(SI,Uhe,1,0,5,1);k.c=KC(SI,Uhe,1,0,5,1);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){j=BD(vNb(g,(wtc(),Hsc)),61);j==(Ucd(),Acd)?(i.c[i.c.length]=g,true):j==Rcd&&(k.c[k.c.length]=g,true)}}Y5b(i,true,c);Y5b(k,false,c)}Qdd(b)} +function Oac(a,b){var c,d,e,f,g,h,i;Odd(b,'Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tCb(0,i.c.length),BD(i.c[0],29));g=BD(Ikb(i,i.c.length-1),29);c=new H1b(a);f=new H1b(a);Mac(a,d,g,c,f);c.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,c));f.a.c.length==0||(i.c[i.c.length]=f,true)}if(wNb(a,(wtc(),Lsc))){e=new H1b(a);h=new H1b(a);Pac(a,e,h);e.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,e));h.a.c.length==0||(i.c[i.c.length]=h,true)}Qdd(b)} +function b6b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}e=BD(vNb(h,(wtc(),Hsc)),61);if(e==(Ucd(),zcd)||e==Tcd){for(d=new Sr(ur(O_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sCb(b.b!=0),BD(b.a.a.c,8));f.b=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sCb(b.b!=0),BD(b.c.b.c,8));g.b=l7c(OC(GC(m1,1),nie,8,0,[k.i.n,k.n,k.a])).b}}}}} +function Tec(a,b){var c,d,e,f,g,h,i;Odd(b,'Sort By Input Model '+vNb(a,(Nyc(),ywc)),1);e=0;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);i=e==0?0:e-1;h=BD(Ikb(a.b,i),29);for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(PD(vNb(f,Vxc))!==PD((dcd(),Zbd))&&PD(vNb(f,Vxc))!==PD($bd)){mmb();Okb(f.j,new Tnc(h,Xec(f)));Sdd(b,'Node '+f+' ports: '+f.j)}}mmb();Okb(c.a,new Bnc(h,BD(vNb(a,ywc),339),BD(vNb(a,wwc),378)));Sdd(b,'Layer '+e+': '+c);++e}Qdd(b)} +function U1b(a,b){var c,d,e,f;f=P1b(b);MAb(new YAb(null,(!b.c&&(b.c=new cUd(F2,b,9,9)),new Kub(b.c,16))),new i2b(f));e=BD(vNb(f,(wtc(),Ksc)),21);O1b(b,e);if(e.Hc((Orc(),Hrc))){for(d=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Y1b(a,b,f,c)}}BD(hkd(b,(Nyc(),Fxc)),174).gc()!=0&&L1b(b,f);Ccb(DD(vNb(f,Mxc)))&&e.Fc(Mrc);wNb(f,hyc)&&Wyc(new ezc(Edb(ED(vNb(f,hyc)))),f);PD(hkd(b,axc))===PD((hbd(),ebd))?V1b(a,b,f):T1b(a,b,f);return f} +function hic(a,b,c,d){var e,f,g;this.j=new Rkb;this.k=new Rkb;this.b=new Rkb;this.c=new Rkb;this.e=new I6c;this.i=new s7c;this.f=new lEb;this.d=new Rkb;this.g=new Rkb;Ekb(this.b,a);Ekb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=BD(vNb(d,(Nyc(),jxc)),74);if(e){for(g=Jsb(e,0);g.b!=g.d.c;){f=BD(Xsb(g),8);ADb(f.a,a.a)&&Dsb(this.i,f)}}!!c&&Ekb(this.j,c);Ekb(this.k,d)} +function oTb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new gub(new ETb(c));h=KC(sbb,dle,25,a.f.e.c.length,16,1);Glb(h,h.length);c[b.b]=0;for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);i.b!=b.b&&(c[i.b]=Ohe);zCb(cub(k,i))}while(k.b.c.length!=0){l=BD(dub(k),144);h[l.b]=true;for(f=au(new bu(a.b,l),0);f.c;){e=BD(uu(f),282);m=rTb(e,l);if(h[m.b]){continue}wNb(e,(bTb(),RSb))?(g=Edb(ED(vNb(e,RSb)))):(g=a.c);d=c[l.b]+g;if(d<c[m.b]){c[m.b]=d;eub(k,m);zCb(cub(k,m))}}}} +function xMc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);j=Qje;k=null;for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);l=Edb(b.p[h.p])+Edb(b.d[h.p])-h.d.d;d=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e} +function XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a<k.c.c.length;){j=BD(mlb(k),112);j.g=h--;e=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.f,16)),new ZNc),new _Nc)).d);f=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.k,16)),new bOc),new dOc)).d);g=e;i=f;if(!d){g=Tbb(tAb(PAb(new YAb(null,new Kub(j.f,16)),new fOc)).d);i=Tbb(tAb(PAb(new YAb(null,new Kub(j.k,16)),new hOc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Gsb(c,j,c.c.b,c.c),true):g==0&&(Gsb(b,j,b.c.b,b.c),true)}} +function $8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);k=c.d;RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,k);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),oad))){yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}a9b(e,g,h)} +function Z8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,b);a9b(e,g,h);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));k=BD(vNb(i,Qwc),272);if(k==(qad(),oad)){wNb(i,Dsc)||yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}} +function dDc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new Rkb;r=Gx(d);q=b*a.a;l=0;o=0;f=new Tqb;g=new Tqb;h=new Rkb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=hDc(r,e,g);if(i){r.a.Bc(i)!=null;h.c[h.c.length]=i;f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)} +function q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)} +function qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)} +function pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=BD(Ikb(a.b,i),434);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]} +function SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f} +function rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!YMb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!YMb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&aNb(a,i,m,false,true)}}} +function lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];lde();if(d<=32&&(kde[d]&2)!=0){if(h){!c&&(c=new Jfb(a));Gfb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Jfb(a));kcb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return a.substr(0,f-1)}else{f=c.a.length;return f>0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))} +function Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];RZb(i,g)}yNb(b,gtc,f);++e}if(c){h=new H0b;yNb(f,(wtc(),$sc),c.i);yNb(h,$sc,c);G0b(h,(Ucd(),zcd));F0b(h,f);m=k_b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];QZb(i,h)}yNb(c,gtc,f);++e}yNb(f,(wtc(),ysc),meb(e));d.c[d.c.length]=f;return f} +function Smd(){Smd=ccb;Qmd=OC(GC(TD,1),$ie,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);Rmd=new RegExp('[ \t\n\r\f]+');try{Pmd=OC(GC(c6,1),Uhe,2015,0,[new EQd((GA(),IA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",LA((KA(),KA(),JA))))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm",LA((null,JA)))),new EQd(IA('yyyy-MM-dd',LA((null,JA))))])}catch(a){a=ubb(a);if(!JD(a,78))throw vbb(a)}} +function qgb(a){var b,c,d,e;d=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=pgb(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(QD(a.e)),new Vfb);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a} +function v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new f7c(a.a,a.b)}if(g<=h){return P6c(new f7c(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}} +function OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){e=BD(vNb(g,Hsc),61);e==(Ucd(),zcd)?(g.n.a+=c.a-b.a):e==Rcd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} +function H5b(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k==(j0b(),e0b)){e=BD(vNb(f,Hsc),61);e==(Ucd(),zcd)?(f.n.a+=c.a-b.a):e==Rcd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} +function kMc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=DMc(a);for(k=(h=(new Pib(b)).a.vc().Kc(),new Vib(h));k.a.Ob();){j=(e=BD(k.a.Pb(),42),BD(e.cd(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=FMc(c,f);i=0;a.c==(YLc(),WLc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Edb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Edb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} +function LOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=Pje;i=Qje;m=Pje;j=Qje;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new olb(c.c);g.a<g.c.c.length;){f=BD(mlb(g),395);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new f7c(i-l,j-m);a.c=new f7c(l+a.d.a,m+a.d.b)} +function xZc(a,b,c){var d,e,f,g,h,i,j,k,l;l=new Rkb;k=new x$c(0,c);f=0;s$c(k,new PZc(0,0,k,c));e=0;for(j=new Fyd(a);j.e!=j.i.gc();){i=BD(Dyd(j),33);d=BD(Ikb(k.a,k.a.c.length-1),187);h=e+i.g+(BD(Ikb(k.a,0),187).b.c.length==0?0:c);if(h>b){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l} +function OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a} +function vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m<d.g){return false}j=f==a.c.length-1&&m>=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l} +function C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(c,g.dd())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(g.dd()==null){i=g;break}++e}}}if(i){if(oid(a.e)){j=b.$j()?new O7d(a.e,4,b,c,null,e,true):H2d(a,b.Kj()?2:1,b,c,b.zj(),-1,true);d?d.Ei(j):(d=j)}d=B2d(a,i,d)}return d} +function kYc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=tYc(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=sYc(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw vbb(new Wdb('IllegalPlacementOption.'));}l=new e$c(a.a,m,j,b,o,p);return l} +function R2b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=BD(vNb(a,(wtc(),vtc)),15);b=BD(vNb(a,tsc),15);if(!l&&!b){return}f=Edb(ED(pBc(a,(Nyc(),iyc))));g=Edb(ED(pBc(a,jyc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b<d.d.gc();){c=(sCb(d.b<d.d.gc()),GD(d.d.Xb(d.c=d.b++)));g=k4c(lvd,c);if(g){b=aC(a,c);b.je()?(h=b.je().a):b.ge()?(h=''+b.ge().a):b.he()?(h=''+b.he().a):(h=b.Ib());i=o5c(g,h);if(i!=null){(uqb(g.j,(N5c(),K5c))||uqb(g.j,L5c))&&xNb(_1c(f,E2),g,i);uqb(g.j,I5c)&&xNb(_1c(f,B2),g,i);uqb(g.j,M5c)&&xNb(_1c(f,F2),g,i);uqb(g.j,J5c)&&xNb(_1c(f,D2),g,i)}}}return f} +function J2d(a,b,c,d){var e,f,g,h,i,j;i=S6d(a.e.Tg(),b);f=BD(a.g,119);if(T6d(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){if(e==c){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}}throw vbb(new qcb(gve+c+mue+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}return b.zj()}} +function K2d(a,b,c){var d,e,f,g,h,i,j,k;e=BD(a.g,119);if(T6d(a.e,b)){return Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a)}else{j=S6d(a.e.Tg(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.ak();if(j.rl(g)){Q6d();if(BD(b,66).Oj()){return f}else if(g==(m8d(),k8d)||g==h8d){i=new Wfb(fcb(f.dd()));while(++h<a.i){f=e[h];g=f.ak();(g==k8d||g==h8d)&&Qfb(i,fcb(f.dd()))}return j6d(BD(b.Yj(),148),i.a)}else{k=f.dd();k!=null&&c&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(k=b3d(a,b,h,d,k));return k}}++d}return b.zj()}} +function MZc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c=KC(SI,Uhe,1,0,5,1);Ekb(a.n,new VZc(a.s,a.t,a.i))}h=0;for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),33);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)} +function $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,"Array types don't match");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&b<d){b+=e;for(h=d+e;h-->d;){NC(f,h,k[--b])}}else{for(h=d+e;d<h;){NC(f,d++,k[b++])}}}else e>0&&$Bb(a,b,c,d,e,true)} +function phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} +function soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(Mu(d.a));g.a<g.c.c.length;){f=BD(mlb(g),10);if(ioc(f)){c=BD(vNb(f,(wtc(),usc)),305);if(!c.g&&!!c.d){b=c;i=c.d;while(i){roc(i.i,i.k,false,true);zoc(b.a);zoc(i.i);zoc(i.k);zoc(i.b);RZb(i.c,b.c.d);RZb(b.c,null);$_b(b.a,null);$_b(i.i,null);$_b(i.k,null);$_b(i.b,null);h=new goc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;yNb(b.i,usc,h);yNb(i.a,usc,h);i=i.d;b=h}}}}}} +function Xfe(a,b){var c,d,e,f,g;g=BD(b,136);Yfe(a);Yfe(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=KC(WD,oje,25,g.b.length,15,1);$fb(g.b,0,a.b,0,g.b.length);return}f=KC(WD,oje,25,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} +function S6b(a,b){var c,d,e,f,g,h,i,j,k,l;c=Ccb(DD(vNb(a,(wtc(),Usc))));h=Ccb(DD(vNb(b,Usc)));d=BD(vNb(a,Vsc),11);i=BD(vNb(b,Vsc),11);e=BD(vNb(a,Wsc),11);j=BD(vNb(b,Wsc),11);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new Z6b(BD(mlb(new olb(a.j)),11).p==BD(mlb(new olb(b.j)),11).p,k,l)}f=(!Ccb(DD(vNb(a,Usc)))||Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||Ccb(DD(vNb(b,Tsc))));g=(!Ccb(DD(vNb(a,Usc)))||!Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||!Ccb(DD(vNb(b,Tsc))));return new Z6b(k&&f||l&&g,k,l)} +function HZc(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Psb;b=0;for(h=new olb(a.n);h.a<h.c.c.length;){g=BD(mlb(h),211);if(g.c.c.length==0){Gsb(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),33);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} +function Sld(a){var b,c,d,e;if((a.Db&64)!=0)return Mkd(a);b=new Wfb(_se);d=a.k;if(!d){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' "',b),e),'"')}}else{Qfb(Qfb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a} +function TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];RZb(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];QZb(e,C)}Z_b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];RZb(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];QZb(e,D)}} +function $$b(a,b,c,d){var e,f,g,h,i,j,k;f=a_b(d);h=Ccb(DD(vNb(d,(Nyc(),uxc))));if((h||Ccb(DD(vNb(a,exc))))&&!fcd(BD(vNb(a,Vxc),98))){e=Zcd(f);i=i_b(a,c,c==(KAc(),IAc)?e:Wcd(e))}else{i=new H0b;F0b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;Q6c(k,0,0,a.o.a,a.o.b);G0b(i,W$b(i,f))}else{e=Zcd(f);G0b(i,c==(KAc(),IAc)?e:Wcd(e))}g=BD(vNb(d,(wtc(),Ksc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(Ucd(),Acd)||j==Rcd)&&g.Fc((Orc(),Lrc));break;case 4:case 3:(j==(Ucd(),zcd)||j==Tcd)&&g.Fc((Orc(),Lrc));}}return i} +function pPc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<qme||$wnd.Math.abs(c.s-c.c)<qme){return 0}d=oPc(a,b.j,c.e);e=oPc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new DOc((HOc(),FOc),c,b,1);++g}if(e==-1){new DOc((HOc(),FOc),b,c,1);++g}}else{h=vPc(b.j,c.s,c.c);h+=vPc(c.e,b.s,b.c);i=vPc(c.j,b.s,b.c);i+=vPc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new DOc((HOc(),GOc),b,c,k-j)}else if(j>k){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g} +function TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new olb(k.e);g.a<g.c.c.length;){e=BD(mlb(g),10);d=G1b(e.c);++h[d];o=Edb(ED(vNb(b,(Nyc(),lyc))));h[d]>0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a<f.c.c.length;){e=BD(mlb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Jkb(c.b.b,c,0)]=e.k;i[Jkb(c.b.b,c,0)]=e}}} +function LXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new Sr(ur(_sd(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){i=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));if(!Pld(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new d7c;m.a=k-g;m.b=l-h;f=new f7c(m.a,m.b);l6c(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new f7c(m.a,m.b);l6c(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=itd(c,true,true);omd(e,g);pmd(e,h);hmd(e,k);imd(e,l);LXc(a,i)}}}} +function e0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Pre),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new h0c)));p4c(a,Pre,Qre,Ksd(c0c));p4c(a,Pre,Rre,Ksd(__c));p4c(a,Pre,Sre,Ksd($_c));p4c(a,Pre,Tre,Ksd(Y_c));p4c(a,Pre,Ure,Ksd(Z_c));p4c(a,Pre,ame,X_c);p4c(a,Pre,wme,8);p4c(a,Pre,Vre,Ksd(b0c));p4c(a,Pre,Wre,Ksd(T_c));p4c(a,Pre,Xre,Ksd(U_c));p4c(a,Pre,Zpe,(Bcb(),false))} +function JLc(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Simple node placement',1);l=BD(vNb(a,(wtc(),otc)),304);h=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);g=d.c;g.b=0;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(g.b+=hBc(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=d.c;k=(h-g.b)/2;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(k+=hBc(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}Qdd(b)} +function s2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(Q6d(),BD(b,66).Oj());g=i?d:new zud(d.gc());if(T6d(a.e,b)){if(b.hi()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!F2d(a,b,j,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){f=R6d(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=R6d(b,j);g.Fc(f)}}}else{l=S6d(a.e.Tg(),b);e=BD(a.g,119);for(h=0;h<a.i;++h){f=e[h];if(l.rl(f.ak())){throw vbb(new Wdb(Hwe))}}if(d.gc()>1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)} +function Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);switch(e.e.g){case 0:c=BD(Ikb(e.j,0),113).d.j;mjc(e,BD(Btb(RAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));break;case 1:d=Bkc(e);mjc(e,BD(Btb(RAb(BD(Qc(e.k,d[0]),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,d[1]),15).Oc(),Hmc)),113));break;case 2:Rmc(a,e);break;case 3:Qmc(e);break;case 4:Omc(a,e);}Mmc(e)}a.a=null} +function $Mc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(eMc(),dMc)?Pje:Qje;h=_Mc(a,new ZMc(b,c));if(!h.a&&h.c){Dsb(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(YLc(),XLc)?i:e;f=a.a.c==XLc?e:i;g=a.a.g[f.i.p];k=Edb(a.a.p[g.p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(YLc(),WLc)?i:e;f=a.a.c==WLc?e:i;k=Edb(a.a.p[a.a.g[f.i.p].p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Bcb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} +function f3d(a,b,c){var d,e,f,g,h,i,j,k;if(T6d(a.e,b)){i=(Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a));D2d(i.c,i.b);b7d(i,BD(c,14))}else{k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];f=e.ak();if(k.rl(f)){if(f==(m8d(),k8d)||f==h8d){j=m3d(a,b,c);h=g;j?Xxd(a,g):++g;while(g<a.i){e=d[g];f=e.ak();f==k8d||f==h8d?Xxd(a,g):++g}j||BD(Gtd(a,h,R6d(b,c)),72)}else m3d(a,b,c)?Xxd(a,g):BD(Gtd(a,g,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c))),72);return}}m3d(a,b,c)||wtd(a,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c)))}} +function IMb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new LMb;g=BD(GAb(NAb(new YAb(null,new Kub(c.f,16)),f),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((RMb(),OMb));d=g.Hc(PMb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(NMb);d=g.Hc(QMb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=BD(a.a.Ce(b,c),46);i=BD(k.a,19).a;j=BD(k.b,19).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?IMb(a,k,c):k} +function oKb(a){var b,c,d,e;e=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){b=e.b}else{b=fIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,(Ucd(),zcd)),244)));b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,Tcd),244)))}c=aKb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(rdd)){if(a.q==(dcd(),_bd)||a.q==$bd){b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,(Ucd(),zcd)),124)));b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,Tcd),124)))}}}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;iIb(a.f)} +function $Ic(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=BD(h.Pb(),225);f.Of(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=BD(i.Pb(),225);f.Pf(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=BD(j.Pb(),225);f.Qf(l,m,n,b)}o=(tCb(n,p.c.length),BD(p.c[n],11));c=0;for(e=new b1b(o.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);for(k=a.Kc();k.Ob();){f=BD(k.Pb(),225);f.Nf(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=BD(g.Pb(),225);f.Mf()}} +function J4b(a,b){var c,d,e,f,g,h,i;a.b=Edb(ED(vNb(b,(Nyc(),myc))));a.c=Edb(ED(vNb(b,pyc)));a.d=BD(vNb(b,Xwc),336);a.a=BD(vNb(b,swc),275);H4b(b);h=BD(GAb(JAb(JAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new N4b),new P4b),new R4b),new T4b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);for(e=h.Kc();e.Ob();){c=BD(e.Pb(),17);g=BD(vNb(c,(wtc(),rtc)),15);g.Jc(new V4b(a));yNb(c,rtc,null)}for(d=h.Kc();d.Ob();){c=BD(d.Pb(),17);i=BD(vNb(c,(wtc(),stc)),17);f=BD(vNb(c,ptc),15);B4b(a,f,i);yNb(c,ptc,null)}} +function uZd(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} +function bKc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(j0b(),h0b)){return false}if(a.j.c.length<=1){return false}f=BD(vNb(a,(Nyc(),Vxc)),98);if(f==(dcd(),$bd)){return false}e=(Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(d=BD(vNb(a,Cxc),197)):(d=BD(vNb(Q_b(a),Dxc),197)),d);if(e==Gzc){return false}if(!(e==Fzc||e==Ezc)){g=Edb(ED(pBc(a,zyc)));b=BD(vNb(a,yyc),142);!b&&(b=new J_b(g,g,g,g));j=V_b(a,(Ucd(),Tcd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j} +function oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j} +function V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h<l;++h){d=BD(qud(f,h),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}if(i.f.c+i.g.c!=l){for(g=0;g<j;++g){d=BD(qud(f,g),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}}a.d=i}k=BD(Phb(a.d,b),138)}return k} +function lZb(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(KAc(),HAc)?f.c:f.d;i=a_b(b);if(j.i==c){g=BD(Ohb(a.b,j),10);if(!g){g=Z$b(j,BD(vNb(c,(Nyc(),Vxc)),98),e,hZb(j),null,j.n,j.o,i,b);yNb(g,(wtc(),$sc),j);Rhb(a.b,j,g)}}else{g=Z$b((k=new zNb,l=Edb(ED(vNb(b,(Nyc(),lyc))))/2,xNb(k,Uxc,l),k),BD(vNb(c,Vxc),98),e,d==HAc?-1:1,null,new d7c,new f7c(0,0),i,b);h=mZb(g,c,d);yNb(g,(wtc(),$sc),h);Rhb(a.b,h,g)}BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc));fcd(BD(vNb(b,(Nyc(),Vxc)),98))?yNb(b,Vxc,(dcd(),acd)):yNb(b,Vxc,(dcd(),bcd));return g} +function vNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(b,'Orthogonal edge routing',1);j=Edb(ED(vNb(a,(Nyc(),wyc))));c=Edb(ED(vNb(a,myc)));d=Edb(ED(vNb(a,pyc)));m=new tPc(0,c);q=0;g=new Bib(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)):null;l=!k?null:k.a;if(h){h_b(h,q);q+=h.c.a}p=!h?q:q+d;o=sPc(m,a,i,l,p);e=!h||Kq(i,(FNc(),DNc));f=!k||Kq(l,(FNc(),DNc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;Qdd(b)} +function IEd(){IEd=ccb;var a;HEd=new mFd;BEd=KC(ZI,nie,2,0,6,1);uEd=Mbb(ZEd(33,58),ZEd(1,26));vEd=Mbb(ZEd(97,122),ZEd(65,90));wEd=ZEd(48,57);sEd=Mbb(uEd,0);tEd=Mbb(vEd,wEd);xEd=Mbb(Mbb(0,ZEd(1,6)),ZEd(33,38));yEd=Mbb(Mbb(wEd,ZEd(65,70)),ZEd(97,102));EEd=Mbb(sEd,XEd("-_.!~*'()"));FEd=Mbb(tEd,$Ed("-_.!~*'()"));XEd(lve);$Ed(lve);Mbb(EEd,XEd(';:@&=+$,'));Mbb(FEd,$Ed(';:@&=+$,'));zEd=XEd(':/?#');AEd=$Ed(':/?#');CEd=XEd('/?#');DEd=$Ed('/?#');a=new Tqb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);GEd=(mmb(),new zob(a))} +function yUc(a,b){var c,d,e,f,g,h,i,j,k,l;yNb(b,(mTc(),cTc),0);i=BD(vNb(b,aTc),86);if(b.d.b==0){if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k)}else{yNb(b,fTc,0)}}else{for(d=(f=Jsb((new ZRc(b)).a.d,0),new aSc(f));Wsb(d.a);){c=BD(Xsb(d.a),188).c;yUc(a,c)}h=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);l=BD(or((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86);j=(Edb(ED(vNb(l,fTc)))+Edb(ED(vNb(h,fTc))))/2;if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k);yNb(b,cTc,Edb(ED(vNb(b,fTc)))-j);xUc(a,b)}else{yNb(b,fTc,j)}}} +function Dbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=tlb(a.f,a.f.length);f=a.d;g=a.i;d=a.a;e=a.b;do{n=0;for(k=new olb(a.p);k.a<k.c.c.length;){j=BD(mlb(k),10);m=Cbc(a,j);c=true;(a.q==(kAc(),dAc)||a.q==gAc)&&(c=Ccb(DD(m.b)));if(BD(m.a,19).a<0&&c){++n;i=tlb(a.f,a.f.length);a.d=a.d+BD(m.a,19).a;o+=f-a.d;f=a.d+BD(m.a,19).a;g=a.i;d=Mu(a.a);e=Mu(a.b)}else{a.f=tlb(i,i.length);a.d=f;a.a=(Qb(d),d?new Tkb(d):Nu(new olb(d)));a.b=(Qb(e),e?new Tkb(e):Nu(new olb(e)));a.i=g}}++h;l=n!=0&&Ccb(DD(b.Kb(new vgd(meb(o),meb(h)))))}while(l)} +function lYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(k$c(),f$c)||g==h$c;n=m==f$c||m==h$c;i=g==g$c||g==i$c;o=m==g$c||m==i$c;j=g==g$c||g==f$c;p=m==g$c||m==f$c;if(h&&n){return a.f==h$c?a:b}else if(i&&o){return a.f==i$c?a:b}else if(j&&p){if(g==g$c){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==g$c?a:b:a.f==f$c?a:b}return a} +function wGb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.j=false}a.i=KC(WD,oje,25,k,15,1);a.g=KC(WD,oje,25,k,15,1);a.n=new Rkb;e=0;l=new Rkb;for(i=new olb(a.e.a);i.a<i.c.c.length;){h=BD(mlb(i),121);h.d=e++;h.b.a.c.length==0&&Ekb(a.n,h);Gkb(l,h.g)}b=0;for(d=new olb(l);d.a<d.c.c.length;){c=BD(mlb(d),213);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=KC(UD,Vje,25,j,15,1);a.c=KC(sbb,dle,25,j,16,1)}else{Blb(a.c)}a.d=l;a.p=new Asb(Cv(a.d.c.length));a.j=1} +function sTb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=BD(vNb(a.f,(bTb(),SSb)),379);a.g=BD(vNb(a.f,WSb),19).a;a.e=Edb(ED(vNb(a.f,TSb)));a.c=Edb(ED(vNb(a.f,RSb)));it(a.b);for(e=new olb(a.f.c);e.a<e.c.c.length;){d=BD(mlb(e),282);ht(a.b,d.c,d,null);ht(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);oTb(a,i,a.a[i.b])}a.i=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} +function Vfe(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw vbb(new hz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=KC(WD,oje,25,b,15,1);$fb(a.b,0,d,0,b);a.b=d}a.a=true} +function pZb(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=BD(g.Pb(),17);if(f.b.c.length>0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));h=-1;switch(BD(vNb(c,(Nyc(),Qwc)),272).g){case 1:h=d.c.length-1;break;case 0:h=nZb(d);break;case 2:h=0;}if(h!=-1){i=(tCb(h,d.c.length),BD(d.c[h],243));Ekb(i.b.b,c);BD(vNb(Q_b(i.b.c.i),(wtc(),Ksc)),21).Fc((Orc(),Grc));BD(vNb(Q_b(i.b.c.i),Ksc),21).Fc(Erc);uib(e);yNb(c,btc,f)}}}QZb(f,null);RZb(f,null)}} +function FLb(a,b){var c,d,e,f;c=new KLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();e=e==2?1:0;e==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new MLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(e=0);d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();f=f==2?1:0;f==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new OLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} +function h6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new Rkb;if(!wNb(a,(wtc(),Fsc))){return j}for(d=BD(vNb(a,Fsc),15).Kc();d.Ob();){b=BD(d.Pb(),10);g6b(b,a);j.c[j.c.length]=b}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k!=(j0b(),e0b)){continue}i=BD(vNb(g,Gsc),10);!!i&&(k=new H0b,F0b(k,g),l=BD(vNb(g,Hsc),61),G0b(k,l),m=BD(Ikb(i.j,0),11),n=new UZb,QZb(n,k),RZb(n,m),undefined)}}for(c=new olb(j);c.a<c.c.c.length;){b=BD(mlb(c),10);$_b(b,BD(Ikb(a.b,a.b.c.length-1),29))}return j} +function M1b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=mpd(a);f=Ccb(DD(hkd(b,(Nyc(),fxc))));k=0;e=0;for(j=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));j.e!=j.i.gc();){i=BD(Dyd(j),79);h=Qld(i);g=h&&f&&Ccb(DD(hkd(i,gxc)));m=atd(BD(qud((!i.c&&(i.c=new y5d(z2,i,5,8)),i.c),0),82));h&&g?++e:h&&!g?++k:Xod(m)==b||m==b?++e:++k}for(d=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));d.e!=d.i.gc();){c=BD(Dyd(d),79);h=Qld(c);g=h&&f&&Ccb(DD(hkd(c,gxc)));l=atd(BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));h&&g?++k:h&&!g?++e:Xod(l)==b||l==b?++k:++e}return k-e} +function ubc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;Odd(b,'Edge splitting',1);if(a.b.c.length<=2){Qdd(b);return}f=new Bib(a.b,0);g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));while(f.b<f.d.gc()){e=g;g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));for(i=new olb(e.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(k=new olb(h.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(d=new olb(j.g);d.a<d.c.c.length;){c=BD(mlb(d),17);m=c.d;l=m.i.c;l!=e&&l!=g&&zbc(c,(n=new b0b(a),__b(n,(j0b(),g0b)),yNb(n,(wtc(),$sc),c),yNb(n,(Nyc(),Vxc),(dcd(),$bd)),$_b(n,g),n))}}}}Qdd(b)} +function MTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.p!=null&&!b.b;h||Odd(b,kme,1);c=BD(vNb(a,(wtc(),itc)),15);g=1/c.gc();if(b.n){Sdd(b,'ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=BD(m.Pb(),51);d=(n<10?'0':'')+n++;Sdd(b,' Slot '+d+': '+hdb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=BD(l.Pb(),51);k.pf(a,Udd(b,g));++o}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(a.a,e.a);e.a.c=KC(SI,Uhe,1,0,5,1)}for(j=new olb(a.a);j.a<j.c.c.length;){i=BD(mlb(j),10);$_b(i,null)}a.b.c=KC(SI,Uhe,1,0,5,1);h||Qdd(b)} +function kJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Edb(ED(vNb(b,(Nyc(),Bxc))));v=BD(vNb(b,Ayc),19).a;m=4;e=3;w=20/v;n=false;i=0;g=Ohe;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;lJc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=pJc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=xJc(o).a;if(c!=0){for(k=new olb(o.e);k.a<k.c.c.length;){j=BD(mlb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} +function UCb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Lqb;for(f=a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),168);Rhb(o,d,c.Je(d))}g=(Qb(a),a?new Tkb(a):Nu(a.a.ec().Kc()));Okb(g,new WCb(o));h=Gx(g);i=new hDb(b);n=new Lqb;jrb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=BD(e.Pb(),168);if(Edb(ED(Wd(irb(o.f,d))))<=Pje){if(Mhb(n,d.a)&&!Mhb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Mhb(n,d.b)){if(!Mhb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new hDb(k);Ekb(BD(Wd(irb(n.f,l)),221).a,m);jrb(n.f,k,m);h.a.Bc(j)!=null}return i} +function UBc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;Odd(c,'Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new Rkb;a.d=KC(sbb,dle,25,k,16,1);a.a=KC(sbb,dle,25,k,16,1);a.b=new Rkb;g=0;for(j=new olb(l);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=g;Qq(R_b(i))&&Ekb(a.c,i);++g}for(n=new olb(a.c);n.a<n.c.c.length;){m=BD(mlb(n),10);TBc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tCb(f,l.c.length),BD(l.c[f],10));TBc(a,h)}}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;Qdd(c)} +function PSc(a,b){var c,d,e,f,g,h,i;a.a.c=KC(SI,Uhe,1,0,5,1);for(d=Jsb(b.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);if(c.b.b==0){yNb(c,(mTc(),jTc),(Bcb(),true));Ekb(a.a,c)}}switch(a.a.c.length){case 0:e=new XRc(0,b,'DUMMY_ROOT');yNb(e,(mTc(),jTc),(Bcb(),true));yNb(e,YSc,true);Dsb(b.b,e);break;case 1:break;default:f=new XRc(0,b,'SUPER_ROOT');for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),86);i=new QRc(f,g);yNb(i,(mTc(),YSc),(Bcb(),true));Dsb(f.a.a,i);Dsb(f.d,i);Dsb(g.b,i);yNb(g,jTc,false)}yNb(f,(mTc(),jTc),(Bcb(),true));yNb(f,YSc,true);Dsb(b.b,f);}} +function z6c(a,b){i6c();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Iy();My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e<b.em();e++)Kge(a,b.am(e));return}h=a.a.a.c.length;if(h==0){Tvb(a.a,b);return}g=BD(Uvb(a.a,h-1),117);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){Tvb(a.a,b);return}f=b.e==0?2:b.bm().length;if(g.e==0){c=new Ifb;d=g._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a} +function rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g} +function npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=BD(d.Pb(),19).a):(o=b.f+1)}if(h!=m){q=BD(Ikb(a.b,h),29);n=BD(Ikb(a.b,m),29);p=Mu(q.a);for(l=new olb(p);l.a<l.c.c.length;){k=BD(mlb(l),10);Z_b(k,n.a.c.length,n);if(m==0){g=Mu(R_b(k));for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));Noc(a,e,1)}}}}++m;++h}i=new Bib(a.b,0);while(i.b<i.d.gc()){j=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));j.a.c.length==0&&uib(i)}} +function xmc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Edb(ED(c_b(g,(Nyc(),lyc))));e=Edb(ED(c_b(g,nyc)));j=Edb(ED(c_b(g,xyc)));h=new L_b;v_b(h,i.d,i.c,i.a,i.b);m=tmc(b,d,e,j);for(r=new olb(b.d);r.a<r.c.c.length;){q=BD(mlb(r),101);for(o=q.f.a.ec().Kc();o.Ob();){n=BD(o.Pb(),409);f=n.a;l=rmc(n);c=(s=new s7c,pmc(n,n.c,m,s),omc(n,l,m,s),pmc(n,n.d,m,s),s);c=a.Uf(n,l,c);Osb(f.a);ye(f.a,c);MAb(new YAb(null,new Kub(c,16)),new Bmc(k,h))}p=q.i;if(p){wmc(q,p,m,e);t=new g7c(p.g);ymc(k,h,t);P6c(t,p.j);ymc(k,h,t)}}v_b(i,h.d,h.c,h.a,h.b)} +function rgc(a,b,c){var d,e,f;e=BD(vNb(b,(Nyc(),swc)),275);if(e==(yrc(),wrc)){return}Odd(c,'Horizontal Compaction',1);a.a=b;f=new Ygc;d=new cEb((f.d=b,f.c=BD(vNb(f.d,Swc),218),Pgc(f),Wgc(f),Vgc(f),f.a));aEb(d,a.b);switch(BD(vNb(b,rwc),422).g){case 1:$Db(d,new jfc(a.a));break;default:$Db(d,(ODb(),MDb));}switch(e.g){case 1:TDb(d);break;case 2:TDb(SDb(d,(ead(),bad)));break;case 3:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Bgc));break;case 4:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Dgc(f)));break;case 5:TDb(ZDb(d,pgc));}SDb(d,(ead(),aad));d.e=true;Mgc(f);Qdd(c)} +function mYc(a,b,c,d,e,f,g,h){var i,j,k,l;i=Ou(OC(GC(z_,1),Uhe,220,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=Ou(OC(GC(o_,1),Uhe,526,0,[new uYc,new oYc,new qYc]));break;case 0:l=Ou(OC(GC(o_,1),Uhe,526,0,[new qYc,new oYc,new uYc]));break;case 2:l=Ou(OC(GC(o_,1),Uhe,526,0,[new oYc,new uYc,new qYc]));}for(k=new olb(l);k.a<k.c.c.length;){j=BD(mlb(k),526);i.c.length>1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null} +function JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),221);d=c7c(R6c(BD(a.b,65).c),BD(b.b,65).c);if(FNb){g=BD(a.b,65).b;f=BD(b.b,65).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&$6c(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&$6c(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{$6c(d,_Nb(BD(a.b,65),BD(b.b,65)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=LNb(GNb,b,e,d);$6c(d,e);$Nb(BD(b.b,65),d);Hkb(b.a,new RNb(d));BD(GNb.b,65);KNb(GNb,HNb,b)}} +function VJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new KFb;j=0;e=0;for(g=new olb(a.e.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;for(d=new Sr(ur(U_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);c.p=e++}b=bKc(h);for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Sbb(Cbb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Sbb(Cbb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=KC(xY,Uhe,401,j,0,1);a.c=KC(wY,Uhe,649,e,0,1);a.d.a.$b()} +function Uxd(a){var b,c,d,e,f,g,h,i,j;if(a.ej()){i=a.fj();if(a.i>0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d<a.i;++d){g=a.g[d];f=a.kj(g,f)}}oud(a);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new $yd(b);d.e!=d.i.gc();){f=a.dj(Zyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{oud(a);a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){if(a.i>0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{oud(a)}}else{oud(a)}} +function ZQc(a,b,c){var d,e,f,g,h,i,j,k,l,m;TQc(this);c==(FQc(),DQc)?Qqb(this.r,a):Qqb(this.w,a);k=Pje;j=Qje;for(g=b.a.ec().Kc();g.Ob();){e=BD(g.Pb(),46);h=BD(e.a,455);d=BD(e.b,17);i=d.c;i==a&&(i=d.d);h==DQc?Qqb(this.r,i):Qqb(this.w,i);m=(Ucd(),Lcd).Hc(i.j)?Edb(ED(vNb(i,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b;XQc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),46);UQc(this,BD(e.b,17))}this.o=false} +function gD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)} +function o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.d.i;d=BD(vNb(g,(Nyc(),txc)),142);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=Qje;for(c=new olb(h.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.c.i;d=BD(vNb(g,(Nyc(),txc)),142);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} +function ELd(a,b){var c,d,e,f,g,h,i;if(a.Fk()){if(a.i>4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f<a.i;++f){c=a.Gk(BD(a.g[f],56));if(PD(c)===PD(b)){return true}}}return i}else if(a.Dk()&&!a.Ck()){g=BD(b,56).ah(zUd(BD(a.ak(),18)));if(PD(g)===PD(a.e)){return true}else if(g==null||!BD(g,56).kh()){return false}}}else{return false}}h=pud(a,b);if(a.Ek()&&!h){for(f=0;f<a.i;++f){e=a.Gk(BD(a.g[f],56));if(PD(e)===PD(b)){return true}}}return h}else{return pud(a,b)}} +function mHc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new Rkb;m=new Tqb;g=b.b;for(e=0;e<g.c.length;e++){j=(tCb(e,g.c.length),BD(g.c[e],29)).a;k.c=KC(SI,Uhe,1,0,5,1);for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(j0b(),i0b)&&(k.c[k.c.length]=h,true);Nkb(BD(Ikb(b.b,e),29).a,f,h);h.j.c=KC(SI,Uhe,1,0,5,1);Gkb(h.j,BD(BD(Ikb(a.b,e),15).Xb(f),14));ecd(BD(vNb(h,(Nyc(),Vxc)),98))||yNb(h,Vxc,(dcd(),Zbd))}for(d=new olb(k);d.a<d.c.c.length;){c=BD(mlb(d),10);l=kHc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);mmb();Okb(h.j,(Occ(),Icc));h.i=true;N_b(h)}} +function g6b(a,b){var c,d,e,f,g,h,i,j,k,l;k=BD(vNb(a,(wtc(),Hsc)),61);d=BD(Ikb(a.j,0),11);k==(Ucd(),Acd)?G0b(d,Rcd):k==Rcd&&G0b(d,Acd);if(BD(vNb(b,(Nyc(),Fxc)),174).Hc((tdd(),sdd))){i=Edb(ED(vNb(a,tyc)));j=Edb(ED(vNb(a,uyc)));g=Edb(ED(vNb(a,ryc)));h=BD(vNb(b,Yxc),21);if(h.Hc((rcd(),ncd))){c=j;l=a.o.a/2-d.n.a;for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(pcd)){for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.a=i+a.o.a-d.n.a}}WGb(new YGb((a$b(),new l$b(b,false,false,new T$b))),new x$b(null,a,false))}} +function Ugc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}mmb();Mlb(b.c,b.c.length,null);e=new olb(b);d=BD(mlb(e),145);while(e.a<e.c.c.length){c=BD(mlb(e),145);if(ADb(d.e.c,c.e.c)&&!(DDb(B6c(d.e).b,c.e.d)||DDb(B6c(c.e).b,d.e.d))){d=(Gkb(d.k,c.k),Gkb(d.b,c.b),Gkb(d.c,c.c),ye(d.i,c.i),Gkb(d.d,c.d),Gkb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,G6c(d.e,f,g,i,k),hEb(d.f,c.f),!d.a&&(d.a=c.a),Gkb(d.g,c.g),Ekb(d.g,c),d)}else{Xgc(a,d);d=c}}Xgc(a,d)} +function e_b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(Ucd(),Scd)&&b!=(dcd(),bcd)&&b!=(dcd(),ccd)){h=W$b(a,c);G0b(a,h);!(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Uxc))&&h!=Scd&&(a.n.a!=0||a.n.b!=0)&&yNb(a,Uxc,V$b(a,h))}if(b==(dcd(),_bd)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{Cvd(a,a.Vi(),a.Wi())}}else{Cvd(a,a.Vi(),a.Wi())}} +function LEc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new olb(b);h.a<h.c.c.length;){f=BD(mlb(h),233);f.e=null;f.c=0}i=null;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),233);l=f.d[0];if(c&&l.k!=(j0b(),h0b)){continue}for(n=BD(vNb(l,(wtc(),Qsc)),15).Kc();n.Ob();){m=BD(n.Pb(),10);if(!c||m.k==(j0b(),h0b)){(!f.e&&(f.e=new Rkb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(j0b(),h0b)){if(i){for(k=BD(Qc(a.d,i),21).Kc();k.Ob();){j=BD(k.Pb(),10);for(e=BD(Qc(a.d,l),21).Kc();e.Ob();){d=BD(e.Pb(),10);YEc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} +function OHc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new Rkb;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);k.c=KC(SI,Uhe,1,0,5,1);switch(g.i.k.g){case 0:d=BD(vNb(g,(wtc(),gtc)),10);Hkb(d.j,new xIc(k));break;case 1:Ctb(KAb(JAb(new YAb(null,new Kub(g.i.j,16)),new zIc(g))),new CIc(k));break;case 3:e=BD(vNb(g,(wtc(),$sc)),11);Ekb(k,new vgd(e,meb(g.e.c.length+g.g.c.length)));}for(j=new olb(k);j.a<j.c.c.length;){i=BD(mlb(j),46);f=aIc(a,BD(i.a,11));if(f>a.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} +function eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)} +function vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)} +function nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a<h.c.c.length;){g=BD(mlb(h),29);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=BD(Ikb(g.a,0),10);p=d.n.b-d.d.d;d.k==(j0b(),e0b)&&(p-=BD(vNb(a,(Nyc(),yyc)),142).d);f=BD(Ikb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==e0b&&(c+=BD(vNb(a,(Nyc(),yyc)),142).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;Qdd(b)} +function h_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);c=BD(vNb(h,(Nyc(),mwc)),248);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(f<p.c.length-1&&red(g)*qed(g)/2>h[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p} +function Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);l=new Bib(h.a,0);while(l.b<l.d.gc()){k=(sCb(l.b<l.d.gc()),BD(l.d.Xb(l.c=l.b++),10));if(k.k==(j0b(),f0b)){m=BD(vNb(k,(wtc(),$sc)),17);o=Edb(ED(vNb(m,Zwc)));g=PD(vNb(k,Ssc))===PD((rbd(),obd));c=new g7c(k.n);g&&(c.b+=o+d);f=new f7c(k.o.a,k.o.b-o-d);n=BD(vNb(k,ktc),15);j==(ead(),dad)||j==_9c?B9b(n,c,e,f,g,j):A9b(n,c,e,f);Gkb(m.b,n);sbc(k,PD(vNb(a,Swc))===PD((Aad(),xad)));uib(l)}}}Qdd(b)} +function tZb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new Rkb;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);k=null;for(t=k_b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!f_b(s.d.i,c)){r=oZb(a,b,c,s,s.c,(KAc(),IAc),k);r!=k&&(i.c[i.c.length]=r,true);r.c&&(k=r)}}j=null;for(o=k_b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!f_b(n.c.i,c)){r=oZb(a,b,c,n,n.d,(KAc(),HAc),j);r!=j&&(i.c[i.c.length]=r,true);r.c&&(j=r)}}}}for(m=new olb(i);m.a<m.c.c.length;){l=BD(mlb(m),441);Jkb(b.a,l.a,0)!=-1||Ekb(b.a,l.a);l.c&&(d.c[d.c.length]=l,true)}} +function jCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Interactive cycle breaking',1);l=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){m=BD(mlb(n),10);m.p=1;o=T_b(m).a;for(k=W_b(m,(KAc(),IAc)).Kc();k.Ob();){j=BD(k.Pb(),11);for(f=new olb(j.g);f.a<f.c.c.length;){d=BD(mlb(f),17);p=d.d.i;if(p!=m){q=T_b(p).a;q<o&&(l.c[l.c.length]=d,true)}}}}for(g=new olb(l);g.a<g.c.c.length;){d=BD(mlb(g),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p>0&&iCc(a,h,l)}for(e=new olb(l);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function _z(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.de(Zie,Xie,-1,-1)}k=ufb(b);dfb(k.substr(0,3),'at ')&&(k=k.substr(3));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=ufb(k.substr(g+1));k=ufb(k.substr(0,g))}}else{c=k.indexOf(')',g);j=k.substr(g+1,c-(g+1));k=ufb(k.substr(0,g))}g=hfb(k,wfb(46));g!=-1&&(k=k.substr(g+1));(k.length==0||dfb(k,'Anonymous function'))&&(k=Xie);h=kfb(j,wfb(58));e=lfb(j,wfb(58),h-1);i=-1;d=-1;f=Zie;if(h!=-1&&e!=-1){f=j.substr(0,e);i=Vz(j.substr(e+1,h-(e+1)));d=Vz(j.substr(h+1))}return a.de(f,k,i,d)} +function UC(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw vbb(new ocb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(QC=TC(0,0,0));return TC(0,0,0)}if(b.h==Gje&&b.m==0&&b.l==0){return VC(a,c)}i=false;if(b.h>>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)} +function F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw vbb(new Zdb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=BD(gdb(a.g),9);n=Pu(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=BD(B2c(a,d.g),246);l?Ekb(n,BD(I2c(a,l),123)):(n.c[n.c.length]=null,true)}o=new j3c;MAb(JAb(NAb(JAb(new YAb(null,new Kub(n,16)),new O2c),new Q2c(b)),new S2c),new U2c(o));d3c(o,a.a);c=new Rkb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Gkb(c,J2c(a,Dx(BD(B2c(o,d.g),20))));m=BD(Ikb(n,d.g),123);!!m&&(c.c[c.c.length]=m,true)}Gkb(c,J2c(a,Dx(BD(B2c(o,k[k.length-1].g+1),20))));return c} +function qCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Model order cycle breaking',1);a.a=0;a.b=0;n=new Rkb;k=b.a.c.length;for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);wNb(i,(wtc(),Zsc))&&(k=$wnd.Math.max(k,BD(vNb(i,Zsc),19).a+1))}for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);g=pCc(a,o,k);for(m=W_b(o,(KAc(),IAc)).Kc();m.Ob();){l=BD(m.Pb(),11);for(f=new olb(l.g);f.a<f.c.c.length;){d=BD(mlb(f),17);q=d.d.i;h=pCc(a,q,k);h<g&&(n.c[n.c.length]=d,true)}}}for(e=new olb(n);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}n.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function kQc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new BQc(a,b,d-c)}else if(d<c){new BQc(b,a,c-d)}else{new BQc(b,a,0);new BQc(a,b,0)}} +function JPb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=IOb(a.e);l=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),395);m=h.b;n=c+m.a;q=d+m.b;o=QD(n/a.a);r=QD(q/a.b);f=h.a;switch(f.g){case 0:k=(RMb(),OMb);break;case 1:k=(RMb(),NMb);break;case 2:k=(RMb(),PMb);break;default:k=(RMb(),QMb);}if(f.a){s=QD((q+h.c)/a.b);Ekb(a.f,new uOb(k,meb(r),meb(s)));f==(ROb(),QOb)?nNb(a,0,r,o,s):nNb(a,o,r,a.d-1,s)}else{p=QD((n+h.c)/a.a);Ekb(a.f,new uOb(k,meb(o),meb(p)));f==(ROb(),OOb)?nNb(a,o,0,p,r):nNb(a,o,r,p,a.c-1)}}} +function coc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new Rkb;e=new Rkb;p=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),19);f=new qoc(g.a);e.c[e.c.length]=f;if(p){f.d=p;p.e=f}p=f}t=boc(a);for(k=0;k<e.c.length;++k){n=null;q=poc((tCb(0,e.c.length),BD(e.c[0],652)));c=null;d=Pje;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Edb(ED(vNb(a,(Nyc(),Hyc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=koc(q)}}if(c){Ekb(m,meb(c.c));c.a=true;loc(c)}}mmb();Mlb(m.c,m.c.length,null);return m} +function qNd(a){var b,c,d,e,f,g,h,i,j,k;b=new zNd;c=new zNd;j=dfb(Qve,(e=Dmd(a.b,Rve),!e?null:GD(AAd((!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b),Sve))));for(i=0;i<a.i;++i){h=BD(a.g[i],170);if(JD(h,99)){g=BD(h,18);(g.Bb&ote)!=0?((g.Bb&oie)==0||!j&&(f=Dmd(g,Rve),(!f?null:GD(AAd((!f.b&&(f.b=new sId((jGd(),fGd),x6,f)),f.b),eue)))==null))&&wtd(b,g):(k=zUd(g),!!k&&(k.Bb&ote)!=0||((g.Bb&oie)==0||!j&&(d=Dmd(g,Rve),(!d?null:GD(AAd((!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b),eue)))==null))&&wtd(c,g))}else{Q6d();if(BD(h,66).Oj()){if(!h.Jj()){wtd(b,h);wtd(c,h)}}}}vud(b);vud(c);a.a=BD(b.g,247);BD(c.g,247)} +function LTb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=ITb(b);q=BD(vNb(b,(Nyc(),Iwc)),314);q!=(Rpc(),Ppc)&&reb(j,new STb);r=BD(vNb(b,Cwc),292);reb(j,new UTb(r));p=0;k=new Rkb;for(f=new xkb(j);f.a!=f.b;){e=BD(vkb(f),37);aUb(a.c,e);m=BD(vNb(e,(wtc(),itc)),15);p+=m.gc();d=m.Kc();Ekb(k,new vgd(e,d))}Odd(c,'Recursive hierarchical layout',p);o=0;n=BD(BD(Ikb(k,k.c.length-1),46).b,47);while(n.Ob()){for(i=new olb(k);i.a<i.c.c.length;){h=BD(mlb(i),46);m=BD(h.b,47);g=BD(h.a,37);while(m.Ob()){l=BD(m.Pb(),51);if(JD(l,507)){if(!g.e){l.pf(g,Udd(c,1));++o;break}else{break}}else{l.pf(g,Udd(c,1));++o}}}}Qdd(c)} +function rid(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BCb(j,c.length),c.charCodeAt(j));if(i==93){h=hfb(c,wfb(91));if(h>=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k<e.gc()){m=e.Xb(k);JD(m,72)&&(m=BD(m,72).dd());return BD(m,56)}}}if(d<0){return BD(hid(b,Bid(b,c.substr(1)),false),56)}}return null} +function e1d(a,b,c){var d,e,f,g,h,i,j,k,l;if(bLd(b,c)>=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g<l;++g){k=BD(e.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}return null}case 4:{if(dfb('',o1d(a,c.Hj()).ne())){for(d=c;d;d=Z1d(q1d(a,d))){j=b2d(q1d(a,d));h=a2d(q1d(a,d));k=s1d(a,b,j,h);if(k){return k}}i=b2d(q1d(a,c));if(dfb(Ewe,i)){return t1d(a,b)}else{f=g1d(a,b);for(g=0,l=f.gc();g<l;++g){k=BD(f.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}}return null}default:{return null}}} +function t2d(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(Q6d(),BD(b,66).Oj());f=h?c:new zud(c.gc());if(T6d(a.e,b)){if(b.hi()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!F2d(a,b,i,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){e=R6d(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=R6d(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(k.rl(e.ak())){if(c.Hc(h?e:e.dd())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();BD(Gtd(a,g,h?BD(i,72):R6d(b,i)),72)}return true}}}if(!h){e=R6d(b,c.Kc().Pb());f.Fc(e)}}return ytd(a,f)} +function qMc(a,b){var c,d,e,f,g,h,i,j,k;k=new Psb;for(h=(j=(new $ib(a.c)).a.vc().Kc(),new djb(j));h.a.Ob();){f=(e=BD(h.a.Pb(),42),BD(e.dd(),458));f.b==0&&(Gsb(k,f,k.c.b,k.c),true)}while(k.b!=0){f=BD(k.b==0?null:(sCb(k.b!=0),Nsb(k,k.a.a)),458);f.a==null&&(f.a=0);for(d=new olb(f.d);d.a<d.c.c.length;){c=BD(mlb(d),654);c.b.a==null?(c.b.a=Edb(f.a)+c.a):b.o==(eMc(),cMc)?(c.b.a=$wnd.Math.min(Edb(c.b.a),Edb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Edb(c.b.a),Edb(f.a)+c.a));--c.b.b;c.b.b==0&&Dsb(k,c.b)}}for(g=(i=(new $ib(a.c)).a.vc().Kc(),new djb(i));g.a.Ob();){f=(e=BD(g.a.Pb(),42),BD(e.dd(),458));b.i[f.c.p]=f.a}} +function mTc(){mTc=ccb;dTc=new Lsd(Ime);new Lsd(Jme);new Msd('DEPTH',meb(0));ZSc=new Msd('FAN',meb(0));XSc=new Msd(Yqe,meb(0));jTc=new Msd('ROOT',(Bcb(),false));_Sc=new Msd('LEFTNEIGHBOR',null);hTc=new Msd('RIGHTNEIGHBOR',null);aTc=new Msd('LEFTSIBLING',null);iTc=new Msd('RIGHTSIBLING',null);YSc=new Msd('DUMMY',false);new Msd('LEVEL',meb(0));gTc=new Msd('REMOVABLE_EDGES',new Psb);kTc=new Msd('XCOOR',meb(0));lTc=new Msd('YCOOR',meb(0));bTc=new Msd('LEVELHEIGHT',0);$Sc=new Msd('ID','');eTc=new Msd('POSITION',meb(0));fTc=new Msd('PRELIM',0);cTc=new Msd('MODIFIER',0);WSc=new Lsd(Kme);VSc=new Lsd(Lme)} +function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new olb(b.j);n.a<n.c.c.length;){m=BD(mlb(n),11);e=l7c(OC(GC(m1,1),nie,8,0,[m.i.n,m.n,m.a]));if(b.k==(j0b(),i0b)){h=BD(vNb(m,(wtc(),$sc)),11);e.a=l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new f7c(0,e.b);if(m.j==(Ucd(),zcd)){g.a=k}else if(m.j==Tcd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!JNc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}} +function XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;c<a.b;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));while(a.f-b>Oqe){f=b;g=0;while($wnd.Math.abs(b-f)<Oqe){++g;b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));sCb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sCb(e.b>0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sCb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}a.d=true;a.c=true} +function Q8d(){Q8d=ccb;s8d=(r8d(),q8d).b;v8d=BD(qud(ZKd(q8d.b),0),34);t8d=BD(qud(ZKd(q8d.b),1),34);u8d=BD(qud(ZKd(q8d.b),2),34);F8d=q8d.bb;BD(qud(ZKd(q8d.bb),0),34);BD(qud(ZKd(q8d.bb),1),34);H8d=q8d.fb;I8d=BD(qud(ZKd(q8d.fb),0),34);BD(qud(ZKd(q8d.fb),1),34);BD(qud(ZKd(q8d.fb),2),18);K8d=q8d.qb;N8d=BD(qud(ZKd(q8d.qb),0),34);BD(qud(ZKd(q8d.qb),1),18);BD(qud(ZKd(q8d.qb),2),18);L8d=BD(qud(ZKd(q8d.qb),3),34);M8d=BD(qud(ZKd(q8d.qb),4),34);P8d=BD(qud(ZKd(q8d.qb),6),34);O8d=BD(qud(ZKd(q8d.qb),5),18);w8d=q8d.j;x8d=q8d.k;y8d=q8d.q;z8d=q8d.w;A8d=q8d.B;B8d=q8d.A;C8d=q8d.C;D8d=q8d.D;E8d=q8d._;G8d=q8d.cb;J8d=q8d.hb} +function $Dc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=BD(l.Pb(),11);h=k.j==(Ucd(),Acd)||k.j==Rcd;n=0;if(h){m=BD(vNb(k,(wtc(),gtc)),10);if(!m){continue}n+=VDc(a,d,k,m)}else{for(j=new olb(k.g);j.a<j.c.c.length;){i=BD(mlb(j),17);e=i.d;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new olb(k.e);g.a<g.c.c.length;){f=BD(mlb(g),17);e=f.c;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(g,e.a)}d=BD(vNb(b,(Nyc(),Mwc)),419);if(d==(xqc(),vqc)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);break;case 3:p5b(b,g);break;case 4:if(a.a==(y5b(),x5b)){p5b(b,g);a5b(b,g)}else{a5b(b,g);p5b(b,g)}}}else{if(a.a==(y5b(),x5b)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:p5b(b,g);_4b(b,g);break;case 4:_4b(b,g);p5b(b,g);}}else{switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:_4b(b,g);p5b(b,g);break;case 4:p5b(b,g);_4b(b,g);}}}Qdd(c)} +function j6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new zsb;k=new zsb;o=new zsb;p=new zsb;i=Edb(ED(vNb(b,(Nyc(),vyc))));f=Edb(ED(vNb(b,lyc)));for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),10);l=BD(vNb(g,(wtc(),Hsc)),61);if(l==(Ucd(),Acd)){k.a.zc(g,k);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(j,d.c.i)}}else if(l==Rcd){p.a.zc(g,p);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(o,d.c.i)}}}if(j.a.gc()!=0){m=new tPc(2,f);n=sPc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))} +function AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.a<k.c.c.length;){j=BD(mlb(k),29);n[l++]=j.a.c.length}m=new Bib(b.b,2);for(d=1;d<p-1;d++){c=(sCb(m.b<m.d.gc()),BD(m.d.Xb(m.c=m.b++),29));o=new olb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=BD(mlb(o),10);if(i==n[d+1]-1||zMc(a,t,d+1,d)){g=n[d]-1;zMc(a,t,d+1,d)&&(g=a.c.e[BD(BD(BD(Ikb(a.c.b,t.p),15).Xb(0),46).a,10).p]);while(h<=i){s=BD(Ikb(c.a,h),10);if(!zMc(a,s,d+1,d)){for(r=BD(Ikb(a.c.b,s.p),15).Kc();r.Ob();){q=BD(r.Pb(),46);e=a.c.e[BD(q.a,10).p];(e<f||e>g)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}} +function o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}} +function JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),140);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h} +function jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c} +function Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e} +function sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a<m.c.c.length;){l=BD(mlb(m),70);r.c[r.c.length]=l}q=BD(vNb(p,(Nyc(),jxc)),74);g=BD(vNb(e,jxc),74);if(g){if(!q){q=new s7c;yNb(p,jxc,q)}for(k=Jsb(g,0);k.b!=k.d.c;){j=BD(Xsb(k),8);Dsb(q,new g7c(j))}}}} +function EJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((rcd(),ncd));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=BD(h.Pb(),111);e=Edb(ED(d.b.We((CKb(),BKb))));f=d.b.rf().a;a.A.Hc((tdd(),sdd))&&KJb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=Ru(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=BD(e.Pb(),233);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=Ru(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)} +function BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),841);h=new gVb(OC(GC(IP,1),Uhe,81,0,[]));Ekb(a.a.a,h);for(j=new olb(c.d);j.a<j.c.c.length;){i=BD(mlb(j),110);k=new GUb(a,i);AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(!Mhb(a.g,c)){Rhb(a.g,c,new f7c(i.c,i.d));Rhb(a.f,c,k)}Ekb(a.a.b,k);eVb(h,k)}for(g=new olb(c.b);g.a<g.c.c.length;){f=BD(mlb(g),594);k=new GUb(a,f.kf());Rhb(a.b,f,new vgd(h,k));AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(f.hf()){l=new HUb(a,f.hf(),1);AUb(l,BD(vNb(c.c,Esc),21));e=new gVb(OC(GC(IP,1),Uhe,81,0,[]));eVb(e,l);Rc(a.c,f.gf(),new vgd(h,l))}}}return a.a} +function oBc(a){var b;this.a=a;b=(j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])).length;this.b=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);this.c=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);nBc(this,h0b,(Nyc(),vyc),wyc);lBc(this,h0b,g0b,oyc,pyc);kBc(this,h0b,i0b,oyc);kBc(this,h0b,e0b,oyc);lBc(this,h0b,f0b,vyc,wyc);nBc(this,g0b,lyc,myc);kBc(this,g0b,i0b,lyc);kBc(this,g0b,e0b,lyc);lBc(this,g0b,f0b,oyc,pyc);mBc(this,i0b,lyc);kBc(this,i0b,e0b,lyc);kBc(this,i0b,f0b,syc);mBc(this,e0b,zyc);lBc(this,e0b,f0b,uyc,tyc);nBc(this,f0b,lyc,lyc);nBc(this,d0b,lyc,myc);lBc(this,d0b,h0b,oyc,pyc);lBc(this,d0b,f0b,oyc,pyc);lBc(this,d0b,g0b,oyc,pyc)} +function _2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.ak();if(JD(g,99)&&(BD(g,18).Bb&Tje)!=0){m=BD(c.dd(),49);p=xid(a.e,m);if(p!=m){k=R6d(g,p);mud(a,b,t3d(a,b,k));l=null;if(oid(a.e)){d=e1d((O6d(),M6d),a.e.Tg(),g);if(d!=XKd(a.e.Tg(),a.c)){q=S6d(a.e.Tg(),g);h=0;f=BD(a.g,119);for(i=0;i<b;++i){e=f[i];q.rl(e.ak())&&++h}l=new O7d(a.e,9,d,m,p,h,false);l.Ei(new pSd(a.e,9,a.c,c,k,b,false))}}o=BD(g,18);n=zUd(o);if(n){l=m.ih(a.e,bLd(m.Tg(),n),null,l);l=BD(p,49).gh(a.e,bLd(p.Tg(),n),null,l)}else if((o.Bb&ote)!=0){j=-1-bLd(a.e.Tg(),o);l=m.ih(a.e,j,null,null);!BD(p,49).eh()&&(l=BD(p,49).gh(a.e,j,null,l))}!!l&&l.Fi();return k}}return c} +function yUb(a){var b,c,d,e,f,g,h,i;for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.b.c=e.g.c;e.b.d=e.g.d}i=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=BD(h.Pb(),46);c=BD(g.b,81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=V6c(new f7c(i.a,i.b));a.e=c7c(new f7c(b.a,b.b),i);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1)} +function svd(a){var b,c,d;l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new Z9c]));c=new xB(a);for(d=0;d<c.a.length;++d){b=tB(c,d).je().a;dfb(b,'layered')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new kwc])):dfb(b,'force')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new TRb])):dfb(b,'stress')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PSb])):dfb(b,'mrtree')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new sTc])):dfb(b,'radial')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new IWc])):dfb(b,'disco')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new gFb,new oPb])):dfb(b,'sporeOverlap')||dfb(b,'sporeCompaction')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new B0c])):dfb(b,'rectpacking')&&l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PYc]))}} +function j_b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new g7c(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=PD(vNb(a,(Nyc(),Vxc)))===PD((dcd(),$bd));for(o=new olb(a.j);o.a<o.c.c.length;){n=BD(mlb(o),11);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))} +function iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}} +function nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} +function rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a<g.c.c.length;){e=BD(mlb(g),121);k=0;e.k.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);if(b.f){Ekb(e.k,b);++k}}k==1&&(d.c[d.c.length]=e,true)}for(f=new olb(d);f.a<f.c.c.length;){e=BD(mlb(f),121);while(e.k.c.length==1){j=BD(mlb(new olb(e.k)),213);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Lkb(h.k,j);Lkb(i.k,j);h==e?(e=j.e):(e=j.d)}}} +function k4c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=BD(Phb(a.f,b),23);if(!f){for(e=(n=(new $ib(a.d)).a.vc().Kc(),new djb(n));e.a.Ob();){c=(g=BD(e.a.Pb(),42),BD(g.dd(),23));h=c.f;o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new $ib(a.d)).a.vc().Kc(),new djb(m));d.a.Ob();){c=(g=BD(d.a.Pb(),42),BD(g.dd(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&Shb(a.f,b,f)}return f} +function sA(a,b){var c,d,e,f,g;c=new Vfb;g=false;for(f=0;f<b.length;f++){d=(BCb(f,b.length),b.charCodeAt(f));if(d==32){gA(a,c,0);c.a+=' ';gA(a,c,0);while(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(hfb('GyMLdkHmsSEcDahKzZv',wfb(d))>0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}gA(a,c,0);mA(a)} +function wDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Network simplex layering',1);a.b=b;r=BD(vNb(b,(Nyc(),Ayc)),19).a*4;q=a.b.a;if(q.c.length<1){Qdd(c);return}f=sDc(a,q);p=null;for(e=Jsb(f,0);e.b!=e.d.c;){d=BD(Xsb(e),15);h=r*QD($wnd.Math.sqrt(d.gc()));g=vDc(d);uGb(HGb(JGb(IGb(LGb(g),h),p),true),Udd(c,1));m=a.b.b;for(o=new olb(g.a);o.a<o.c.c.length;){n=BD(mlb(o),121);while(m.c.length<=n.e){Dkb(m,m.c.length,new H1b(a.b))}k=BD(n.f,10);$_b(k,BD(Ikb(m,n.e),29))}if(f.b>1){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a<j.c.c.length;){i=BD(mlb(j),29);p[l++]=i.a.c.length}}}q.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;a.c=null;Qdd(c)} +function OUb(a){var b,c,d,e,f,g,h;b=0;for(f=new olb(a.b.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.b=0;d.c=0}NUb(a,0);MUb(a,a.g);sVb(a.c);wVb(a.c);c=(ead(),aad);uVb(oVb(tVb(uVb(oVb(tVb(uVb(tVb(a.c,c)),had(c)))),c)));tVb(a.c,aad);RUb(a,a.g);SUb(a,0);TUb(a,0);UUb(a,1);NUb(a,1);MUb(a,a.d);sVb(a.c);for(g=new olb(a.b.a);g.a<g.c.c.length;){d=BD(mlb(g),189);b+=$wnd.Math.abs(d.c)}for(h=new olb(a.b.a);h.a<h.c.c.length;){d=BD(mlb(h),189);d.b=0;d.c=0}c=dad;uVb(oVb(tVb(uVb(oVb(tVb(uVb(wVb(tVb(a.c,c))),had(c)))),c)));tVb(a.c,aad);RUb(a,a.d);SUb(a,1);TUb(a,1);UUb(a,0);wVb(a.c);for(e=new olb(a.b.a);e.a<e.c.c.length;){d=BD(mlb(e),189);b+=$wnd.Math.abs(d.c)}return b} +function Wfe(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw vbb(new hz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} +function PUb(a){var b,c,d,e,f,g,h;b=new Rkb;a.g=new Rkb;a.d=new Rkb;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);Ekb(b,BD(BD(f.dd(),46).b,81));fad(BD(f.cd(),594).gf())?Ekb(a.d,BD(f.dd(),46)):Ekb(a.g,BD(f.dd(),46))}MUb(a,a.d);MUb(a,a.g);a.c=new CVb(a.b);AVb(a.c,(xUb(),wUb));RUb(a,a.d);RUb(a,a.g);Gkb(b,a.c.a.b);a.e=new f7c(Pje,Pje);a.a=new f7c(Qje,Qje);for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),81);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}zVb(a.c,new YUb);h=0;do{e=OUb(a);++h}while((h<2||e>Qie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)} +function sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a<h.c.c.length;){g=BD(mlb(h),11);m=k_b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Ccb(DD(vNb(i,gxc)));if(e){o=i.c;n=BD(Ohb(a.b,o),10);if(!n){n=Z$b(o,(dcd(),bcd),o.j,-1,null,null,o.o,BD(vNb(b,Lwc),103),b);yNb(n,(wtc(),$sc),o);Rhb(a.b,o,n);Ekb(b.a,n)}q=i.d;p=BD(Ohb(a.b,q),10);if(!p){p=Z$b(q,(dcd(),bcd),q.j,1,null,null,q.o,BD(vNb(b,Lwc),103),b);yNb(p,(wtc(),$sc),q);Rhb(a.b,q,p);Ekb(b.a,p)}d=kZb(i);QZb(d,BD(Ikb(n.j,0),11));RZb(d,BD(Ikb(p.j,0),11));Rc(a.a,i,new BZb(d,b,(KAc(),IAc)));BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc))}}}} +function W9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;Odd(c,'Label dummy switching',1);d=BD(vNb(b,(Nyc(),Owc)),227);J9b(b);e=T9b(b,d);a.a=KC(UD,Vje,25,b.b.c.length,15,1);for(h=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==zpc||f==upc||f==xpc)&&!BD(uqb(e.a,f)?e.b[f.g]:null,15).dc()){M9b(a,b);break}}for(i=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),l=0,o=i.length;l<o;++l){f=i[l];f==zpc||f==upc||f==xpc||X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}for(g=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),j=0,m=g.length;j<m;++j){f=g[j];(f==zpc||f==upc||f==xpc)&&X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}a.a=null;Qdd(c)} +function AFc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=BD(vNb(a,(wtc(),$sc)),17);c=BD(vNb(d,_sc),74);!c?(c=new s7c):Ccb(DD(vNb(d,ltc)))&&(c=w7c(c));j=BD(vNb(a,Vsc),11);if(j){k=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Gsb(c,k,c.a,c.a.a)}l=BD(vNb(a,Wsc),11);if(l){m=l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Gsb(c,m,c.c.b,c.c)}if(c.b>=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=BD(Xsb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=BD(vNb(BD(Ikb(a.j,0),11),(wtc(),$sc)),11);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return T_b(a).b} +function Wgc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new olb(a.d.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){if(!Qq(O_b(h))){d=BD(Oq(O_b(h)),17);k=d.c.i;k==h&&(k=d.d.i);l=new vgd(k,c7c(R6c(h.n),k.n));Rhb(a.b,h,l);continue}}e=new J6c(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=vDb(yDb(wDb(xDb(new zDb,h),e),Fgc),a.a);pDb(qDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),b),a.a);j=new lEb;Rhb(a.e,b,j);c=sr(new Sr(ur(R_b(h).a.Kc(),new Sq)))-sr(new Sr(ur(U_b(h).a.Kc(),new Sq)));c<0?jEb(j,true,(ead(),aad)):c>0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}} +function Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),19);i=$wnd.Math.max(i,g.a)}if(i>a.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=ED(mlb(e));j=$wnd.Math.max(j,(uCb(d),d))}if(j>a.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)} +function fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)} +function xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=VRc(c);d=VRc(d);u+=Edb(ED(vNb(c,(mTc(),cTc))));i+=Edb(ED(vNb(d,cTc)))}t=Edb(ED(vNb(o,(mTc(),fTc))));s=Edb(ED(vNb(l,fTc)));m=zUc(l,o);n=t+i+a.a+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=BD(vNb(j,aTc),86)}if(j){r=n/k;j=b;while(j!=d){q=Edb(ED(vNb(j,fTc)))+n;yNb(j,fTc,q);p=Edb(ED(vNb(j,cTc)))+n;yNb(j,cTc,p);n-=r;j=BD(vNb(j,aTc),86)}}else{return}}++e;l.d.b==0?(l=JRc(new ZRc(b),e)):(l=BD(pr((f=Jsb((new ZRc(l)).a.d,0),new aSc(f))),86));o=l?BD(vNb(l,_Sc),86):null}} +function Cbc(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.f[b.p];k=b.o.b+a.n;c=a.c[b.p][2];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a-1+c));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))-k+c*a.e);++j;if(j>=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))} +function sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tCb(h,g.c.length),BD(g.c[h],112));for(o=h+1;o<g.c.length;o++){f+=pPc(a,i,(tCb(o,g.c.length),BD(g.c[o],112)))}}m=BD(vNb(b,(wtc(),jtc)),230);f>=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.a<k.c.c.length;){j=BD(mlb(k),112);if($wnd.Math.abs(j.s-j.c)<qme){continue}n=$wnd.Math.max(n,j.o);a.d.dg(j,e,a.c)}a.d.a.a.$b();return n+1} +function aUb(a,b){var c,d,e,f,g;c=Edb(ED(vNb(b,(Nyc(),lyc))));c<2&&yNb(b,lyc,2);d=BD(vNb(b,Lwc),103);d==(ead(),cad)&&yNb(b,Lwc,a_b(b));e=BD(vNb(b,fyc),19);e.a==0?yNb(b,(wtc(),jtc),new Gub):yNb(b,(wtc(),jtc),new Hub(e.a));f=DD(vNb(b,Axc));f==null&&yNb(b,Axc,(Bcb(),PD(vNb(b,Swc))===PD((Aad(),wad))?true:false));MAb(new YAb(null,new Kub(b.a,16)),new dUb(a));MAb(LAb(new YAb(null,new Kub(b.b,16)),new fUb),new hUb(a));g=new oBc(b);yNb(b,(wtc(),otc),g);H2c(a.a);K2c(a.a,(qUb(),lUb),BD(vNb(b,Jwc),246));K2c(a.a,mUb,BD(vNb(b,sxc),246));K2c(a.a,nUb,BD(vNb(b,Iwc),246));K2c(a.a,oUb,BD(vNb(b,Exc),246));K2c(a.a,pUb,kNc(BD(vNb(b,Swc),218)));E2c(a.a,_Tb(b));yNb(b,itc,F2c(a.a,b))} +function fjc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=BD(vNb(m,(wtc(),Qsc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(j0b(),g0b)&&n.k!=g0b,q=BD(vNb(m,Psc),10),r=BD(vNb(n,Psc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=gjc(m,(Ucd(),Acd)),v=gjc(n,Rcd),t=t|(gjc(m,Rcd)||gjc(n,Acd)),w=t&&s||u||v,p&&w)||m.k==(j0b(),i0b)&&n.k==h0b||n.k==(j0b(),i0b)&&m.k==h0b){return false}k=a.c[b];f=a.c[c];e=LHc(a.e,k,f,(Ucd(),Tcd));i=LHc(a.i,k,f,zcd);Yic(a.f,k,f);j=Hic(a.b,k,f)+BD(e.a,19).a+BD(i.a,19).a+a.f.d;h=Hic(a.b,f,k)+BD(e.b,19).a+BD(i.b,19).a+a.f.b;if(a.a){l=BD(vNb(k,$sc),11);g=BD(vNb(f,$sc),11);d=JHc(a.g,l,g);j+=BD(d.a,19).a;h+=BD(d.b,19).a}return j>h} +function k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);switch(c.g){case 1:case 2:case 3:a6b(d);break;case 4:m=BD(vNb(d,Txc),8);n=!m?0:m.a;d.n.a=h*Edb(ED(vNb(d,(wtc(),htc))))-n;M_b(d,true,false);break;case 5:o=BD(vNb(d,Txc),8);p=!o?0:o.a;d.n.a=Edb(ED(vNb(d,(wtc(),htc))))-p;M_b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(BD(vNb(d,(wtc(),Hsc)),61).g){case 1:d.n.b=i;j.c[j.c.length]=d;break;case 3:d.n.b=k;l.c[l.c.length]=d;}}switch(c.g){case 1:case 2:c6b(j,a);c6b(l,a);break;case 3:i6b(j,a);i6b(l,a);}} +function VHc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new Rkb;l=new jkb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];XHc(f,c)&&(e=QHc(a,l,k,EHc,e));wNb(c,(wtc(),Psc))&&(f=BD(vNb(c,Psc),10));switch(c.k.g){case 0:for(i=Vq(Nq(V_b(c,(Ucd(),Acd)),new GIc));xc(i);){g=BD(yc(i),11);a.d[g.p]=e++;k.c[k.c.length]=g}e=QHc(a,l,k,EHc,e);for(j=Vq(Nq(V_b(c,Rcd),new GIc));xc(j);){g=BD(yc(j),11);a.d[g.p]=e++;k.c[k.c.length]=g}break;case 3:if(!V_b(c,DHc).dc()){g=BD(V_b(c,DHc).Xb(0),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,EHc).dc()||Wjb(l,c);break;case 1:for(h=V_b(c,(Ucd(),Tcd)).Kc();h.Ob();){g=BD(h.Pb(),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,zcd).Jc(new EIc(l,c));}}QHc(a,l,k,EHc,e);return k} +function y$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=Pje;k=Pje;h=Qje;i=Qje;for(m=new olb(b.i);m.a<m.c.c.length;){l=BD(mlb(m),65);e=BD(BD(Ohb(a.g,l.a),46).b,33);bld(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=BD(hkd(a.c,(d0c(),W_c)),116);Afd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Efd(a.c,-j+n.b,-k+n.d);for(d=new Fyd(Wod(a.c));d.e!=d.i.gc();){c=BD(Dyd(d),79);g=itd(c,true,true);o=jtd(c);q=ltd(c);p=new f7c(o.i+o.g/2,o.j+o.f/2);f=new f7c(q.i+q.g/2,q.j+q.f/2);r=c7c(new f7c(f.a,f.b),p);l6c(r,o.g,o.f);P6c(p,r);s=c7c(new f7c(p.a,p.b),f);l6c(s,q.g,q.f);P6c(f,s);nmd(g,p.a,p.b);gmd(g,f.a,f.b)}} +function EYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.d;o=DD(vNb(b,(Nyc(),gyc)));n=o==null||(uCb(o),o);f=BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc));e=BD(vNb(b,Vxc),98);c=!(e==(dcd(),Zbd)||e==_bd||e==$bd);if(n&&(c||!f)){for(l=new olb(b.a);l.a<l.c.c.length;){j=BD(mlb(l),10);j.p=0}m=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){j=BD(mlb(k),10);d=DYb(a,j,null);if(d){i=new XZb;tNb(i,b);yNb(i,Esc,BD(d.b,21));u_b(i.d,b.d);yNb(i,Hxc,null);for(h=BD(d.a,15).Kc();h.Ob();){g=BD(h.Pb(),10);Ekb(i.a,g);g.a=i}m.Fc(i)}}f&&(PD(vNb(b,twc))===PD((RXb(),OXb))?(a.c=a.b):(a.c=a.a))}else{m=new amb(OC(GC(KQ,1),cne,37,0,[b]))}PD(vNb(b,twc))!==PD((RXb(),QXb))&&(mmb(),m.ad(new HYb));return m} +function KTc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,are),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new NTc),bre),pqb((Csd(),wsd)))));p4c(a,are,ame,CTc);p4c(a,are,wme,20);p4c(a,are,_le,tme);p4c(a,are,vme,meb(1));p4c(a,are,zme,(Bcb(),true));p4c(a,are,Zpe,Ksd(vTc));p4c(a,are,Fme,Ksd(xTc));p4c(a,are,Tme,Ksd(yTc));p4c(a,are,Eme,Ksd(zTc));p4c(a,are,Gme,Ksd(wTc));p4c(a,are,Dme,Ksd(ATc));p4c(a,are,Hme,Ksd(DTc));p4c(a,are,Zqe,Ksd(ITc));p4c(a,are,$qe,Ksd(FTc))} +function zod(a){if(a.q)return;a.q=true;a.p=Lnd(a,0);a.a=Lnd(a,1);Qnd(a.a,0);a.f=Lnd(a,2);Qnd(a.f,1);Knd(a.f,2);a.n=Lnd(a,3);Knd(a.n,3);Knd(a.n,4);Knd(a.n,5);Knd(a.n,6);a.g=Lnd(a,4);Qnd(a.g,7);Knd(a.g,8);a.c=Lnd(a,5);Qnd(a.c,7);Qnd(a.c,8);a.i=Lnd(a,6);Qnd(a.i,9);Qnd(a.i,10);Qnd(a.i,11);Qnd(a.i,12);Knd(a.i,13);a.j=Lnd(a,7);Qnd(a.j,9);a.d=Lnd(a,8);Qnd(a.d,3);Qnd(a.d,4);Qnd(a.d,5);Qnd(a.d,6);Knd(a.d,7);Knd(a.d,8);Knd(a.d,9);Knd(a.d,10);a.b=Lnd(a,9);Knd(a.b,0);Knd(a.b,1);a.e=Lnd(a,10);Knd(a.e,1);Knd(a.e,2);Knd(a.e,3);Knd(a.e,4);Qnd(a.e,5);Qnd(a.e,6);Qnd(a.e,7);Qnd(a.e,8);Qnd(a.e,9);Qnd(a.e,10);Knd(a.e,11);a.k=Lnd(a,11);Knd(a.k,0);Knd(a.k,1);a.o=Mnd(a,12);a.s=Mnd(a,13)} +function AUb(a,b){b.dc()&&HVb(a.j,true,true,true,true);pb(b,(Ucd(),Gcd))&&HVb(a.j,true,true,true,false);pb(b,Bcd)&&HVb(a.j,false,true,true,true);pb(b,Ocd)&&HVb(a.j,true,true,false,true);pb(b,Qcd)&&HVb(a.j,true,false,true,true);pb(b,Hcd)&&HVb(a.j,false,true,true,false);pb(b,Ccd)&&HVb(a.j,false,true,false,true);pb(b,Pcd)&&HVb(a.j,true,false,false,true);pb(b,Ncd)&&HVb(a.j,true,false,true,false);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Ecd)&&HVb(a.j,true,true,true,true);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Dcd)&&HVb(a.j,true,true,true,true);pb(b,Mcd)&&HVb(a.j,true,true,true,true);pb(b,Kcd)&&HVb(a.j,true,true,true,true);pb(b,Jcd)&&HVb(a.j,true,true,true,true)} +function rZb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new Rkb;for(j=new olb(d);j.a<j.c.c.length;){h=BD(mlb(j),441);g=null;if(h.f==(KAc(),IAc)){for(o=new olb(h.e);o.a<o.c.c.length;){n=BD(mlb(o),17);q=n.d.i;if(Q_b(q)==b){iZb(a,b,h,n,h.b,n.d)}else if(!c||f_b(q,c)){jZb(a,b,h,d,n)}else{m=oZb(a,b,c,n,h.b,IAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}else{for(l=new olb(h.e);l.a<l.c.c.length;){k=BD(mlb(l),17);p=k.c.i;if(Q_b(p)==b){iZb(a,b,h,k,k.c,h.b)}else if(!c||f_b(p,c)){continue}else{m=oZb(a,b,c,k,h.b,HAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}}for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),441);Jkb(b.a,h.a,0)!=-1||Ekb(b.a,h.a);h.c&&(e.c[e.c.length]=h,true)}} +function SJc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new Rkb;for(i=new olb(b.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(m=V_b(g,(Ucd(),zcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.d.i.c!=c){continue}j.c[j.c.length]=d}}}for(h=Su(c.a).Kc();h.Ob();){g=BD(h.Pb(),10);for(m=V_b(g,(Ucd(),Tcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.e);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.c.i.c!=b){continue}k=new Bib(j,j.c.length);f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}} +function Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb("Invalid value: '"+d+"' for datatype :"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)} +function zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a<f.c.c.length;){d=BD(mlb(f),128);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Gsb(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Gsb(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=BD(Vt(j,0),128);for(c=new olb(d.t);c.a<c.c.c.length;){b=BD(mlb(c),268);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Gsb(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a<c.c.c.length;){b=BD(mlb(c),268);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Gsb(h,i,h.c.b,h.c),true)}}}} +function A6c(a,b,c,d,e){var f,g,h,i;i=Pje;g=false;h=v6c(a,c7c(new f7c(b.a,b.b),a),P6c(new f7c(c.a,c.b),e),c7c(new f7c(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse||$wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse);h=v6c(a,c7c(new f7c(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f?(i=$wnd.Math.min(i,U6c(c7c(h,c)))):(g=true));h=v6c(a,c7c(new f7c(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f)&&(i=$wnd.Math.min(i,U6c(c7c(h,d))));return i} +function cTb(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,Rme),Sme),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new fTb),ume)));p4c(a,Rme,Ame,Ksd(VSb));p4c(a,Rme,Cme,(Bcb(),true));p4c(a,Rme,Fme,Ksd(YSb));p4c(a,Rme,Tme,Ksd(ZSb));p4c(a,Rme,Eme,Ksd($Sb));p4c(a,Rme,Gme,Ksd(XSb));p4c(a,Rme,Dme,Ksd(_Sb));p4c(a,Rme,Hme,Ksd(aTb));p4c(a,Rme,Mme,Ksd(USb));p4c(a,Rme,Ome,Ksd(SSb));p4c(a,Rme,Pme,Ksd(TSb));p4c(a,Rme,Qme,Ksd(WSb));p4c(a,Rme,Nme,Ksd(RSb))} +function BFc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Interactive crossing minimization',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);d.p=g++}m=WZb(a);q=new iHc(m.length);$Ic(new amb(OC(GC(qY,1),Uhe,225,0,[q])),m);p=0;g=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;l=0;for(k=new olb(d.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a<o.c.c.length;){n=BD(mlb(o),11);n.p=p++}}l>0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=h++;r[i.p]=AFc(i,c);i.k==(j0b(),g0b)&&yNb(i,(wtc(),atc),r[i.p])}mmb();Okb(d.a,new GFc(r));YDc(q,m,g,true);++g}Qdd(b)} +function Zfe(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){Wfe(a,b);return}j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw vbb(new hz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} +function BJb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((tdd(),rdd))){BD(Mpb(a.b,(Ucd(),Acd)),124).k=true;BD(Mpb(a.b,Rcd),124).k=true;b=a.q!=(dcd(),_bd)&&a.q!=$bd;ZGb(BD(Mpb(a.b,zcd),124),b);ZGb(BD(Mpb(a.b,Tcd),124),b);ZGb(a.g,b);if(a.A.Hc(sdd)){BD(Mpb(a.b,Acd),124).j=true;BD(Mpb(a.b,Rcd),124).j=true;BD(Mpb(a.b,zcd),124).k=true;BD(Mpb(a.b,Tcd),124).k=true;a.g.k=true}}if(a.A.Hc(qdd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((Idd(),Edd));for(e=wJb(),f=0,g=e.length;f<g;++f){d=e[f];c=BD(Mpb(a.i,d),306);if(c){if(sJb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(pdd)&&a.B.Hc((Idd(),Ddd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} +function GJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new olb(a.e.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=bKc(e);m=(Izc(),(!e.q?(mmb(),mmb(),kmb):e.q)._b((Nyc(),Cxc))?(l=BD(vNb(e,Cxc),197)):(l=BD(vNb(Q_b(e),Dxc),197)),l);b&&(m==Fzc||m==Ezc)&&(e.o.b+=r);if(b&&(m==Hzc||m==Fzc||m==Ezc)){for(p=new olb(e.j);p.a<p.c.c.length;){o=BD(mlb(p),11);if((Ucd(),Ecd).Hc(o.j)){k=BD(Ohb(a.k,o),121);o.n.b=k.e-j}}for(h=new olb(e.b);h.a<h.c.c.length;){g=BD(mlb(h),70);q=BD(vNb(e,xxc),21);q.Hc((Hbd(),Ebd))?(g.n.b+=r):q.Hc(Fbd)&&(g.n.b+=r/2)}(m==Fzc||m==Ezc)&&V_b(e,(Ucd(),Rcd)).Jc(new $Kc(r))}}}} +function Lwb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new exb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.ue(b,l.d);e=d<0?0:1;d==0&&(!c.c||wtb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Hwb(l.a[e])){if(Hwb(l.a[1-e])){m=m.a[j]=Owb(l,e)}else if(!Hwb(l.a[1-e])){n=m.a[1-j];if(n){if(!Hwb(n.a[1-j])&&!Hwb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Hwb(n.a[j])?(h.a[f]=Nwb(m,j)):Hwb(n.a[1-j])&&(h.a[f]=Owb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new exb(l.d,l.e);Mwb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} +function cic(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(i=d.c.Kc();i.Ob();){h=BD(i.Pb(),57);if(d.a==h.a){continue}fad(a.a.d)?(l=a.a.g.Oe(d,h)):(l=a.a.g.Pe(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(vgc(d,h)){g=nGb(new pGb,a.d);j=QD($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=ugc(d).a;c=d;if(!k){k=ugc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(JD(d.g,145)&&JD(h.g,10)||JD(h.g,145)&&JD(d.g,10))&&(m=2);AFb(DFb(CFb(EFb(BFb(new FFb,QD(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} +function pEc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Bib(b,0);while(k.b<k.d.gc()){h=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Bib(b,k.b);while(f.b<f.d.gc()){m=tEc(a,(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uCb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uCb(l),l);a.c[h.c.p][h.p].b=1}d=(uCb(l),l)}}else{e=0;for(j=new olb(b);j.a<j.c.c.length;){h=BD(mlb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Edb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),10);if(a.c[h.c.p][h.p].a==null){l=Cub(a.i,24)*lke*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} +function CZd(){rEd(b5,new i$d);rEd(a5,new P$d);rEd(c5,new u_d);rEd(d5,new M_d);rEd(f5,new P_d);rEd(h5,new S_d);rEd(g5,new V_d);rEd(i5,new Y_d);rEd(k5,new GZd);rEd(l5,new JZd);rEd(m5,new MZd);rEd(n5,new PZd);rEd(o5,new SZd);rEd(p5,new VZd);rEd(q5,new YZd);rEd(t5,new _Zd);rEd(v5,new c$d);rEd(x6,new f$d);rEd(j5,new l$d);rEd(u5,new o$d);rEd(wI,new r$d);rEd(GC(SD,1),new u$d);rEd(xI,new x$d);rEd(yI,new A$d);rEd($J,new D$d);rEd(O4,new G$d);rEd(BI,new J$d);rEd(T4,new M$d);rEd(U4,new S$d);rEd(O9,new V$d);rEd(E9,new Y$d);rEd(FI,new _$d);rEd(JI,new c_d);rEd(AI,new f_d);rEd(MI,new i_d);rEd(DK,new l_d);rEd(v8,new o_d);rEd(u8,new r_d);rEd(UI,new x_d);rEd(ZI,new A_d);rEd(X4,new D_d);rEd(V4,new G_d)} +function hA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=TA(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new gB(wbb(Cbb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f<j;){d=bfb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&bfb(a.a,g)==d;++g);vA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&bfb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&bfb(a.a,g)!=39){++g}if(g>=j){throw vbb(new Wdb("Missing trailing '"))}g+1<j&&bfb(a.a,g+1)==39?++g:(l=true);Qfb(k,qfb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} +function MEc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),233);Edb(REc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.a<f.c.c.length;){e=BD(mlb(f),233);if(Gdb(REc(e.g,e.d[0]).a)==Gdb(REc(c.g,c.d[0]).a)){if(Jkb(a,e,0)>Jkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} +function wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=HC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}} +function wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a<g.c.c.length;){e=BD(mlb(g),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);e.d==0&&(j.c[j.c.length]=e,true);e.i==0&&e.e.b==0&&(h.c[h.c.length]=e,true)}d=-1;while(j.c.length!=0){e=BD(Kkb(j,0),112);for(c=new olb(e.k);c.a<c.c.c.length;){b=BD(mlb(c),129);k=b.b;rOc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);pOc(k,k.d-1);k.d==0&&(j.c[j.c.length]=k,true)}}if(d>-1){for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),112);e.o=d}while(h.c.length!=0){e=BD(Kkb(h,0),112);for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);i=b.a;if(i.e.b>0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}} +function QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c} +function O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))} +function zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)} +function lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==Ohe){for(g=0;g<s.gc();g++){ojc(BD(s.Xb(g),101),c,g)}}else{t=KC(WD,oje,25,e.length,15,1);Elb(t,t.length);for(r=s.Kc();r.Ob();){q=BD(r.Pb(),101);f=BD(Ohb(a.b,q),177);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new Tqb;for(m=0;m<e.length;m++){e[n][m]&&Qqb(u,meb(t[m]))}while(Rqb(u,meb(j))){++j}}ojc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} +function YJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),10);bKc(c)?(f=(h=nGb(oGb(new pGb,c),a.f),i=nGb(oGb(new pGb,c),a.f),j=new rKc(c,true,h,i),k=c.o.b,l=(Izc(),(!c.q?(mmb(),mmb(),kmb):c.q)._b((Nyc(),Cxc))?(m=BD(vNb(c,Cxc),197)):(m=BD(vNb(Q_b(c),Dxc),197)),m),n=10000,l==Ezc&&(n=1),o=AFb(DFb(CFb(BFb(EFb(new FFb,n),QD($wnd.Math.ceil(k))),h),i)),l==Fzc&&Qqb(a.d,o),ZJc(a,Su(V_b(c,(Ucd(),Tcd))),j),ZJc(a,V_b(c,zcd),j),j)):(f=(p=nGb(oGb(new pGb,c),a.f),MAb(JAb(new YAb(null,new Kub(c.j,16)),new EKc),new GKc(a,p)),new rKc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+jBc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);AFb(DFb(CFb(EFb(BFb(new FFb,QD($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} +function s9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Label dummy insertions',1);l=new Rkb;g=Edb(ED(vNb(a,(Nyc(),nyc))));j=Edb(ED(vNb(a,ryc)));k=BD(vNb(a,Lwc),103);for(n=new olb(a.a);n.a<n.c.c.length;){m=BD(mlb(n),10);for(f=new Sr(ur(U_b(m).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i!=e.d.i&&Lq(e.b,p9b)){p=t9b(e);o=Pu(e.b.c.length);c=r9b(a,e,p,o);l.c[l.c.length]=c;d=c.o;h=new Bib(e.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),nad))){if(k==(ead(),dad)||k==_9c){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}o.c[o.c.length]=i;uib(h)}}if(k==(ead(),dad)||k==_9c){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Gkb(a.a,l);Qdd(b)} +function eYb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new qYb(b);l=_Xb(a,b,f);n=$wnd.Math.max(Edb(ED(vNb(b,(Nyc(),Zwc)))),1);for(k=new olb(l.a);k.a<k.c.c.length;){j=BD(mlb(k),46);i=dYb(BD(j.a,8),BD(j.b,8),n);o=true;o=o&iYb(c,new f7c(i.c,i.d));o=o&iYb(c,O6c(new f7c(i.c,i.d),i.b,0));o=o&iYb(c,O6c(new f7c(i.c,i.d),0,i.a));o&iYb(c,O6c(new f7c(i.c,i.d),i.b,i.a))}m=f.d;h=dYb(BD(l.b.a,8),BD(l.b.b,8),n);if(m==(Ucd(),Tcd)||m==zcd){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=Qje;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} +function eKd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=hfb(d,wfb(91));if(c!=-1){e=d.substr(0,c);f=new Hfb;do f.a+='[';while((c=gfb(d,91,++c))!=-1);if(dfb(e,Khe))f.a+='Z';else if(dfb(e,Eve))f.a+='B';else if(dfb(e,Fve))f.a+='C';else if(dfb(e,Gve))f.a+='D';else if(dfb(e,Hve))f.a+='F';else if(dfb(e,Ive))f.a+='I';else if(dfb(e,Jve))f.a+='J';else if(dfb(e,Kve))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}else if(hfb(d,wfb(46))==-1){if(dfb(d,Khe))return sbb;else if(dfb(d,Eve))return SD;else if(dfb(d,Fve))return TD;else if(dfb(d,Gve))return UD;else if(dfb(d,Hve))return VD;else if(dfb(d,Ive))return WD;else if(dfb(d,Jve))return XD;else if(dfb(d,Kve))return rbb}return null} +function $1b(a,b,c){var d,e,f,g,h,i,j,k;j=new b0b(c);tNb(j,b);yNb(j,(wtc(),$sc),b);j.o.a=b.g;j.o.b=b.f;j.n.a=b.i;j.n.b=b.j;Ekb(c.a,j);Rhb(a.a,b,j);((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0||Ccb(DD(hkd(b,(Nyc(),fxc)))))&&yNb(j,wsc,(Bcb(),true));i=BD(vNb(c,Ksc),21);k=BD(vNb(j,(Nyc(),Vxc)),98);k==(dcd(),ccd)?yNb(j,Vxc,bcd):k!=bcd&&i.Fc((Orc(),Krc));d=BD(vNb(c,Lwc),103);for(h=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));h.e!=h.i.gc();){g=BD(Dyd(h),118);Ccb(DD(hkd(g,Jxc)))||_1b(a,g,j,i,d,k)}for(f=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));f.e!=f.i.gc();){e=BD(Dyd(f),137);!Ccb(DD(hkd(e,Jxc)))&&!!e.a&&Ekb(j.b,Z1b(e))}Ccb(DD(vNb(j,pwc)))&&i.Fc((Orc(),Frc));if(Ccb(DD(vNb(j,exc)))){i.Fc((Orc(),Jrc));i.Fc(Irc);yNb(j,Vxc,bcd)}return j} +function F4b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=BD(Ohb(b.c,a),459);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new f7c(s,C);t=new f7c(i,D);e=(s+i)/2;q=new f7c(e,C);u=new f7c(e,D);f=G4b(a,C,D);w=A0b(b.B);A=new f7c(e,f);B=A0b(b.D);c=j6c(OC(GC(m1,1),nie,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=BD(Ikb(v.c.a,m),10);d=I4b(l);o=!(s6c(d,c[0],B)||n6c(d,c[0],B))}else{o=true}}n&&o&&Dsb(a.a,A);n||n7c(a.a,OC(GC(m1,1),nie,8,0,[p,q]));o||n7c(a.a,OC(GC(m1,1),nie,8,0,[u,t]))} +function yfd(a,b){var c,d,e,f,g,h,i,j;if(JD(a.Ug(),160)){yfd(BD(a.Ug(),160),b);b.a+=' > '}else{b.a+='Root '}c=a.Tg().zb;dfb(c.substr(0,3),'Elk')?Qfb(b,c.substr(3)):(b.a+=''+c,b);e=a.zg();if(e){Qfb((b.a+=' ',b),e);return}if(JD(a,354)){j=BD(a,137).a;if(j){Qfb((b.a+=' ',b),j);return}}for(g=new Fyd(a.Ag());g.e!=g.i.gc();){f=BD(Dyd(g),137);j=f.a;if(j){Qfb((b.a+=' ',b),j);return}}if(JD(a,352)){d=BD(a,79);!d.b&&(d.b=new y5d(z2,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i!=0)){b.a+=' (';h=new Oyd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}} +function y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),70);h=BD(vNb(j,$sc),137);cld(h,j.o.a);ald(h,j.o.b);bld(h,j.n.a+e.a,j.n.b+e.b);jkd(h,(I9b(),H9b),DD(vNb(j,H9b)))}i=BD(vNb(a,(Nyc(),jxc)),74);if(i){q7c(i,e);jkd(f,jxc,i)}else{jkd(f,jxc,null)}b==(Aad(),yad)?jkd(f,Swc,yad):jkd(f,Swc,null)} +function mJc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new olb(a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);r=k.a;if(r.c.length==0){continue}q=new olb(r);j=0;s=null;e=BD(mlb(q),10);f=null;while(e){f=BD(Ikb(b,e.p),257);if(f.c>=0){i=null;h=new Bib(k.a,j+1);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),10));i=BD(Ikb(b,g.p),257);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){Nkb(d,e.p,meb(BD(Ikb(d,e.p),19).a-1));BD(Ikb(c,s.p),15).Mc(f)}f=yJc(f,e,n++);b.c[b.c.length]=f;Ekb(c,new Rkb);if(s){BD(Ikb(c,s.p),15).Fc(f);Ekb(d,meb(1))}else{Ekb(d,meb(0))}}}o=null;if(q.a<q.c.c.length){o=BD(mlb(q),10);p=BD(Ikb(b,o.p),257);BD(Ikb(c,e.p),15).Fc(p);Nkb(d,o.p,meb(BD(Ikb(d,o.p),19).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} +function u6c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=c7c(new f7c(b.a,b.b),a);j=c;l=c7c(new f7c(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Iy();My(Jqe);if($wnd.Math.abs(0-e)<=Jqe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,My(Jqe),($wnd.Math.abs(0-g)<=Jqe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f} +function z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&TKd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.Ij()&&!j.Jj()){if(JD(j,99)){i=BD(j,18);(i.Bb&ote)==0&&(w=zUd(i),!(!!w&&(w.Bb&ote)!=0))&&y6d(a,i,h,b)}else{Q6d();if(BD(j,66).Oj()){c=(v=j,BD(!v?null:BD(b,49).xh(v),153));if(c){n=BD(h.ah(j),153);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.il(q);if(JD(m,99)){t=n.jl(q);e=Wrb(a,t);if(e==null&&t!=null){s=BD(m,18);if(!a.b||(s.Bb&ote)!=0||!!zUd(s)){continue}e=t}if(!c.dl(m,e)){for(r=0;r<d;++r){if(c.il(r)==m&&PD(c.jl(r))===PD(e)){c.ii(c.gc()-1,r);--d;break}}}}else{c.dl(n.il(q),n.jl(q))}}}}}}}}} +function CZc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;r=xZc(b,c,a.g);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));if(a.b){for(q=0;q<r.c.length;q++){l=(tCb(q,r.c.length),BD(r.c[q],200));if(q!=0){n=(tCb(q-1,r.c.length),BD(r.c[q-1],200));w$c(l,n.f+n.b+a.g)}tZc(q,r,c,a.g);AZc(a,l);e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd))}}else{for(p=new olb(r);p.a<p.c.c.length;){o=BD(mlb(p),200);for(k=new olb(o.a);k.a<k.c.c.length;){j=BD(mlb(k),187);s=new b$c(j.s,j.t,a.g);WZc(s,j);Ekb(o.d,s)}}}BZc(a,r);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));t=$wnd.Math.max(a.d,d.a-(g.b+g.c));m=$wnd.Math.max(a.c,d.b-(g.d+g.a));h=m-a.c;if(a.e&&a.f){i=t/m;i<a.a?(t=m*a.a):(h+=t/a.a-m)}a.e&&zZc(r,t,h);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));return new d$c(a.a,t,a.c+h,(k$c(),j$c))} +function UJc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=KC(WD,oje,25,a.g,15,1);a.o=new Rkb;MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new aLc),new cLc(a));a.a=KC(sbb,dle,25,a.b,16,1);TAb(new YAb(null,new Kub(a.e.b,16)),new rLc(a));d=(l=new Rkb,MAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new hLc),new jLc(a)),new lLc(a,l)),l);for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),508);if(h.c.length<=1){continue}if(h.c.length==2){uKc(h);bKc((tCb(0,h.c.length),BD(h.c[0],17)).d.i)||Ekb(a.o,h);continue}if(tKc(h)||sKc(h,new fLc)){continue}j=new olb(h);e=null;while(j.a<j.c.c.length){b=BD(mlb(j),17);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),112);n.g<h&&(n.g=n.g+s)}} +function SDb(a,b){var c;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}if(!lDb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:PDb(a);break;case 1:XDb(a);PDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 2:switch(b.g){case 1:XDb(a);YDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 1:switch(b.g){case 2:XDb(a);YDb(a);break;case 4:XDb(a);bEb(a);PDb(a);break;case 3:XDb(a);bEb(a);XDb(a);PDb(a);}break;case 4:switch(b.g){case 2:bEb(a);PDb(a);break;case 1:bEb(a);XDb(a);PDb(a);break;case 3:XDb(a);YDb(a);}break;case 3:switch(b.g){case 2:XDb(a);bEb(a);PDb(a);break;case 1:XDb(a);bEb(a);XDb(a);PDb(a);break;case 4:XDb(a);YDb(a);}}return a} +function tVb(a,b){var c;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}if(!cVb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:qVb(a);break;case 1:xVb(a);qVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 2:switch(b.g){case 1:xVb(a);yVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 1:switch(b.g){case 2:xVb(a);yVb(a);break;case 4:xVb(a);BVb(a);qVb(a);break;case 3:xVb(a);BVb(a);xVb(a);qVb(a);}break;case 4:switch(b.g){case 2:BVb(a);qVb(a);break;case 1:BVb(a);xVb(a);qVb(a);break;case 3:xVb(a);yVb(a);}break;case 3:switch(b.g){case 2:xVb(a);BVb(a);qVb(a);break;case 1:xVb(a);BVb(a);xVb(a);qVb(a);break;case 4:xVb(a);yVb(a);}}return a} +function UQb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));i.e!=i.i.gc();){h=BD(Dyd(i),33);for(e=new Sr(ur(_sd(h).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);!d.b&&(d.b=new y5d(z2,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i<=1))){throw vbb(new z2c('Graph must not contain hyperedges.'))}if(!Pld(d)&&h!=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))){j=new gRb;tNb(j,d);yNb(j,(HSb(),FSb),d);dRb(j,BD(Wd(irb(c.f,h)),144));eRb(j,BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),144));Ekb(b.c,j);for(g=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=new mRb(j,f.a);tNb(k,f);yNb(k,FSb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);lRb(k);Ekb(b.d,k)}}}}} +function OGb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new LIb(a);iKb(l,!(b==(ead(),dad)||b==_9c));k=l.a;m=new p0b;for(e=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),g=0,i=e.length;g<i;++g){c=e[g];j=xHb(k,dHb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.Re()))}for(d=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),f=0,h=d.length;f<h;++f){c=d[f];j=xHb(k,fHb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.Re()))}for(p=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),r=0,t=p.length;r<t;++r){n=p[r];j=xHb(k,n,dHb);!!j&&(m.b=$wnd.Math.max(m.b,j.Se()))}for(o=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),q=0,s=o.length;q<s;++q){n=o[q];j=xHb(k,n,fHb);!!j&&(m.c=$wnd.Math.max(m.c,j.Se()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);e=BD(vNb(h,Isc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(dcd(),_bd)){n=Edb(ED(vNb(h,htc)));k.b=f.b*n-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}else if(b==$bd){k.b=Edb(ED(vNb(h,htc)))-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} +function nRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;e=BD(vNb(a,(mTc(),dTc)),33);j=Ohe;k=Ohe;h=Rie;i=Rie;for(w=Jsb(a.b,0);w.b!=w.d.c;){u=BD(Xsb(w),86);p=u.e;q=u.f;j=$wnd.Math.min(j,p.a-q.a/2);k=$wnd.Math.min(k,p.b-q.b/2);h=$wnd.Math.max(h,p.a+q.a/2);i=$wnd.Math.max(i,p.b+q.b/2)}o=BD(hkd(e,(JTc(),BTc)),116);n=new f7c(o.b-j,o.d-k);for(v=Jsb(a.b,0);v.b!=v.d.c;){u=BD(Xsb(v),86);m=vNb(u,dTc);if(JD(m,239)){f=BD(m,33);l=P6c(u.e,n);bld(f,l.a-f.g/2,l.b-f.f/2)}}for(t=Jsb(a.a,0);t.b!=t.d.c;){s=BD(Xsb(t),188);d=BD(vNb(s,dTc),79);if(d){b=s.a;r=new g7c(s.b.e);Gsb(b,r,b.a,b.a.a);A=new g7c(s.c.e);Gsb(b,A,b.c.b,b.c);qRc(r,BD(Ut(b,1),8),s.b.f);qRc(A,BD(Ut(b,b.b-2),8),s.c.f);c=itd(d,true,true);ifd(b,c)}}B=h-j+(o.b+o.c);g=i-k+(o.d+o.a);Afd(e,B,g,false,false)} +function xoc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Bib(l,0);Aib(k,new H1b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),29));p=(tCb(g,l.c.length),BD(l.c[g],29));q=Mu(j.a);r=q.c.length;for(o=new olb(q);o.a<o.c.c.length;){m=BD(mlb(o),10);$_b(m,p)}if(s){for(n=av(new ov(q),0);n.c.Sb();){m=BD(pv(n),10);for(f=new olb(Mu(R_b(m)));f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));d=Noc(a,e,r);c=BD(vNb(m,usc),305);t=BD(Ikb(d,d.c.length-1),17);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tCb(0,q.c.length),BD(q.c[0],10));if(b.k==(j0b(),d0b)){s=true;g=-1}}}++g}h=new Bib(a.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));i.a.c.length==0&&uib(h)}} +function wKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=BD(BD(Qc(a.r,b),21),84);if(k.gc()<=2||b==(Ucd(),zcd)||b==(Ucd(),Tcd)){AKb(a,b);return}p=a.u.Hc((rcd(),qcd));c=b==(Ucd(),Acd)?(vLb(),uLb):(vLb(),rLb);r=b==Acd?(EIb(),BIb):(EIb(),DIb);d=dLb(iLb(c),a.s);q=b==Acd?Pje:Qje;for(j=k.Kc();j.Ob();){h=BD(j.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.rf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}ytb(r,lle);l.f=r;$Hb(l,(NHb(),MHb));Ekb(d.d,new BLb(m,bLb(d,m)));q=b==Acd?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.rf().b)}q+=b==Acd?-a.t:a.t;cLb((d.e=q,d));for(i=k.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} +function IDc(a,b,c){var d;Odd(c,'StretchWidth layering',1);if(b.a.c.length==0){Qdd(c);return}a.c=b;a.t=0;a.u=0;a.i=Pje;a.g=Qje;a.d=Edb(ED(vNb(b,(Nyc(),lyc))));CDc(a);DDc(a);ADc(a);HDc(a);BDc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=FDc(a);d=new H1b(a.c);Ekb(a.c.b,d);a.r=Mu(a.p);a.n=tlb(a.k,a.k.length);while(a.r.c.length!=0){a.o=JDc(a);if(!a.o||EDc(a)&&a.b.a.gc()!=0){KDc(a,d);d=new H1b(a.c);Ekb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(EDc(a)){a.c.b.c=KC(SI,Uhe,1,0,5,1);d=new H1b(a.c);Ekb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=Mu(a.p);a.n=tlb(a.k,a.k.length)}else{$_b(a.o,d);Lkb(a.r,a.o);Qqb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c=KC(SI,Uhe,1,0,5,1);smb(b.b);Qdd(c)} +function Mgc(a){var b,c,d,e;MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new khc),new mhc);Kgc(a);MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new ohc),new qhc);if(a.c==(Aad(),yad)){MAb(JAb(LAb(new YAb(null,new Kub(new Pib(a.f),1)),new yhc),new Ahc),new Chc(a));MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Ghc),new Ihc),new Khc),new Mhc),new Ohc(a))}e=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}P6c(X6c(a.d.c),V6c(new f7c(e.a,e.b)));P6c(X6c(a.d.f),c7c(new f7c(b.a,b.b),e));Lgc(a,e,b);Uhb(a.f);Uhb(a.b);Uhb(a.g);Uhb(a.e);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.d=null} +function vZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new Rkb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);n=o.e;if(n){d=vZb(a,n,o);Gkb(e,d);sZb(a,n,o);if(BD(vNb(n,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){s=BD(vNb(o,(Nyc(),Vxc)),98);m=BD(vNb(o,Yxc),174).Hc((rcd(),ncd));for(r=new olb(o.j);r.a<r.c.c.length;){q=BD(mlb(r),11);f=BD(Ohb(a.b,q),10);if(!f){f=Z$b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new d7c,q.o,BD(vNb(n,Lwc),103),n);yNb(f,$sc,q);Rhb(a.b,q,f);Ekb(n.a,f)}g=BD(Ikb(f.j,0),11);for(k=new olb(q.f);k.a<k.c.c.length;){j=BD(mlb(k),70);h=new p_b;h.o.a=j.o.a;h.o.b=j.o.b;Ekb(g.f,h);if(!m){t=q.j;l=0;tcd(BD(vNb(o,Yxc),21))&&(l=mfd(j.n,j.o,q.o,0,t));s==(dcd(),bcd)||(Ucd(),Ecd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new Rkb;rZb(a,b,c,e,i);!!c&&tZb(a,b,c,i);return i} +function nEc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new olb(b.j);k.a<k.c.c.length;){j=BD(mlb(k),11);l=c?new J0b(j):new R0b(j);for(i=l.Kc();i.Ob();){h=BD(i.Pb(),11);g=h.i;if(g.c==b.c){if(g!=b){nEc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=BD(vNb(b,(wtc(),ssc)),15);if(f){for(e=f.Kc();e.Ob();){d=BD(e.Pb(),10);if(b.c==d.c){nEc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),10);n5b(n.n);n5b(n.o);o5b(n.f);r5b(n);t5b(n);for(q=new olb(n.j);q.a<q.c.c.length;){p=BD(mlb(q),11);n5b(p.n);n5b(p.a);n5b(p.o);G0b(p,s5b(p.j));f=BD(vNb(p,(Nyc(),Wxc)),19);!!f&&yNb(p,Wxc,meb(-f.a));for(e=new olb(p.g);e.a<e.c.c.length;){d=BD(mlb(e),17);for(c=Jsb(d.a,0);c.b!=c.d.c;){b=BD(Xsb(c),8);n5b(b)}i=BD(vNb(d,jxc),74);if(i){for(h=Jsb(i,0);h.b!=h.d.c;){g=BD(Xsb(h),8);n5b(g)}}for(l=new olb(d.b);l.a<l.c.c.length;){j=BD(mlb(l),70);n5b(j.n);n5b(j.o)}}for(m=new olb(p.f);m.a<m.c.c.length;){j=BD(mlb(m),70);n5b(j.n);n5b(j.o)}}if(n.k==(j0b(),e0b)){yNb(n,(wtc(),Hsc),s5b(BD(vNb(n,Hsc),61)));q5b(n)}for(k=new olb(n.b);k.a<k.c.c.length;){j=BD(mlb(k),70);r5b(j);n5b(j.o);n5b(j.n)}}} +function yQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=$Pb(b);w=new Rkb;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),15);A=new Rkb;w.c[w.c.length]=A;i=new Tqb;for(o=c.Kc();o.Ob();){n=BD(o.Pb(),33);f=wQb(a,n,true,0,0);A.c[A.c.length]=f;p=n.i;q=n.j;new f7c(p,q);m=(!n.n&&(n.n=new cUd(D2,n,1,7)),n.n);for(l=new Fyd(m);l.e!=l.i.gc();){j=BD(Dyd(l),137);e=wQb(a,j,false,p,q);A.c[A.c.length]=e}v=(!n.c&&(n.c=new cUd(F2,n,9,9)),n.c);for(s=new Fyd(v);s.e!=s.i.gc();){r=BD(Dyd(s),118);g=wQb(a,r,false,p,q);A.c[A.c.length]=g;t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new cUd(D2,r,1,7)),r.n);for(k=new Fyd(m);k.e!=k.i.gc();){j=BD(Dyd(k),137);e=wQb(a,j,false,t,u);A.c[A.c.length]=e}}ye(i,Dx(pl(OC(GC(KI,1),Uhe,20,0,[_sd(n),$sd(n)]))))}vQb(a,i,A)}a.f=new aPb(w);tNb(a.f,b);return a.f} +function Kqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Ohb(a.e,d);if(D==null){D=new eC;n=BD(D,183);s=b+'_s';t=s+e;m=new yC(t);cC(n,Vte,m)}C=BD(D,183);Qpd(c,C);G=new eC;Spd(G,'x',d.j);Spd(G,'y',d.k);cC(C,Yte,G);A=new eC;Spd(A,'x',d.b);Spd(A,'y',d.c);cC(C,'endPoint',A);l=Fhe((!d.a&&(d.a=new xMd(y2,d,5)),d.a));o=!l;if(o){w=new wB;f=new Srd(w);reb((!d.a&&(d.a=new xMd(y2,d,5)),d.a),f);cC(C,Ote,w)}i=dmd(d);u=!!i;u&&Tpd(a.a,C,Qte,kqd(a,dmd(d)));r=emd(d);v=!!r;v&&Tpd(a.a,C,Pte,kqd(a,emd(d)));j=(!d.e&&(d.e=new y5d(A2,d,10,9)),d.e).i==0;p=!j;if(p){B=new wB;g=new Urd(a,B);reb((!d.e&&(d.e=new y5d(A2,d,10,9)),d.e),g);cC(C,Ste,B)}k=(!d.g&&(d.g=new y5d(A2,d,9,10)),d.g).i==0;q=!k;if(q){F=new wB;h=new Wrd(a,F);reb((!d.g&&(d.g=new y5d(A2,d,9,10)),d.g),h);cC(C,Rte,F)}} +function eKb(a){$Jb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ci(a.r).a.nc();g.Ob();){f=BD(g.Pb(),111);e=0;if(f.b.Xe((Y9c(),s9c))){e=Edb(ED(f.b.We(s9c)));if(e<0){switch(f.b.Hf().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(tcd(a.u)){b=nfd(f.b,e);h=!BD(a.e.We(b9c),174).Hc((Idd(),zdd));c=false;switch(f.b.Hf().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a<j.c.c.length;){i=BD(mlb(j),10);g=BD(vNb(i,(Nyc(),mxc)),163);f=null;switch(g.g){case 1:case 2:f=(Gqc(),Fqc);break;case 3:case 4:f=(Gqc(),Dqc);}if(f){yNb(i,(wtc(),Bsc),(Gqc(),Fqc));f==Dqc?o3b(i,g,(KAc(),HAc)):f==Fqc&&o3b(i,g,(KAc(),IAc))}else{if(fcd(BD(vNb(i,Vxc),98))&&i.j.c.length!=0){b=true;for(l=new olb(i.j);l.a<l.c.c.length;){k=BD(mlb(l),11);if(!(k.j==(Ucd(),zcd)&&k.e.c.length-k.g.c.length>0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a<e.c.c.length;){c=BD(mlb(e),17);h=BD(vNb(c.d.i,mxc),163);if(h==(Ctc(),ztc)||h==Atc){b=false;break}}for(d=new olb(k.e);d.a<d.c.c.length;){c=BD(mlb(d),17);h=BD(vNb(c.c.i,mxc),163);if(h==(Ctc(),xtc)||h==ytc){b=false;break}}}b&&o3b(i,g,(KAc(),JAc))}}}} +function lJc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new olb(b.e);l.a<l.c.c.length;){k=BD(mlb(l),10);m=0;h=0;i=c?BD(vNb(k,hJc),19).a:Rie;r=d?BD(vNb(k,iJc),19).a:Rie;j=$wnd.Math.max(i,r);for(t=new olb(k.j);t.a<t.c.c.length;){s=BD(mlb(t),11);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new olb(s.g);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.a<e.c.c.length;){c=BD(mlb(e),29);for(i=new olb(c.a);i.a<i.c.c.length;){h=BD(mlb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(eMc(),dMc)?Qje:Pje}}Uhb(a.c);g=a.a.b;b.c==(YLc(),WLc)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));UMc(a.e,b,a.b);Alb(b.p,null);for(f=g.Kc();f.Ob();){c=BD(f.Pb(),29);j=c.a;b.o==(eMc(),dMc)&&(j=JD(j,152)?km(BD(j,152)):JD(j,131)?BD(j,131).a:JD(j,54)?new ov(j):new dv(j));for(m=j.Kc();m.Ob();){l=BD(m.Pb(),10);b.g[l.p]==l&&pMc(a,l,b)}}qMc(a,b);for(d=g.Kc();d.Ob();){c=BD(d.Pb(),29);for(m=new olb(c.a);m.a<m.c.c.length;){l=BD(mlb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Edb(b.i[b.j[l.p].p]);(b.o==(eMc(),dMc)&&k>Qje||b.o==cMc&&k<Pje)&&(b.p[l.p]=Edb(b.p[l.p])+k)}}}a.e.cg()} +function PGb(a,b,c,d){var e,f,g,h,i;h=new LIb(b);rKb(h,d);e=true;if(!!a&&a.Xe((Y9c(),z8c))){f=BD(a.We((Y9c(),z8c)),103);e=f==(ead(),cad)||f==aad||f==bad}hKb(h,false);Hkb(h.e.wf(),new mKb(h,false,e));NJb(h,h.f,(gHb(),dHb),(Ucd(),Acd));NJb(h,h.f,fHb,Rcd);NJb(h,h.g,dHb,Tcd);NJb(h,h.g,fHb,zcd);PJb(h,Acd);PJb(h,Rcd);OJb(h,zcd);OJb(h,Tcd);$Jb();g=h.A.Hc((tdd(),pdd))&&h.B.Hc((Idd(),Ddd))?_Jb(h):null;!!g&&DHb(h.a,g);eKb(h);GJb(h);PKb(h);BJb(h);pKb(h);HKb(h);xKb(h,Acd);xKb(h,Rcd);CJb(h);oKb(h);if(!c){return h.o}cKb(h);LKb(h);xKb(h,zcd);xKb(h,Tcd);i=h.B.Hc((Idd(),Edd));RJb(h,i,Acd);RJb(h,i,Rcd);SJb(h,i,zcd);SJb(h,i,Tcd);MAb(new YAb(null,new Kub(new $ib(h.i),0)),new TJb);MAb(JAb(new YAb(null,ci(h.r).a.oc()),new VJb),new XJb);dKb(h);h.e.uf(h.o);MAb(new YAb(null,ci(h.r).a.oc()),new fKb);return h.o} +function JVb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),189);f.i=j;f.e==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),189);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),81);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(ead(),bad)||a.c==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),81);for(i=k.f.Kc();i.Ob();){h=BD(i.Pb(),81);fad(a.c)?(o=a.f.ef(k,h)):(o=a.f.ff(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Dsb(n,h.d)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=b.o}} +function ELb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(BD(vNb(a,(fFb(),bFb)),427).g){case 0:Okb(h,new tpb(new bMb));break;case 1:default:Okb(h,new tpb(new gMb));}switch(BD(vNb(a,_Eb),428).g){case 1:Okb(h,new YLb);Okb(h,new lMb);Okb(h,new GLb);break;case 0:default:Okb(h,new YLb);Okb(h,new RLb);}switch(BD(vNb(a,dFb),250).g){case 0:i=new FMb;break;case 1:i=new zMb;break;case 2:i=new CMb;break;case 3:i=new wMb;break;case 5:i=new JMb(new CMb);break;case 4:i=new JMb(new zMb);break;case 7:i=new tMb(new JMb(new zMb),new JMb(new CMb));break;case 8:i=new tMb(new JMb(new wMb),new JMb(new CMb));break;case 6:default:i=new JMb(new wMb);}for(g=new olb(h);g.a<g.c.c.length;){f=BD(mlb(g),167);d=0;e=0;c=new vgd(meb(d),meb(e));while(gNb(b,f,d,e)){c=BD(i.Ce(c,f),46);d=BD(c.a,19).a;e=BD(c.b,19).a}dNb(b,f,d,e)}} +function qQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;_kd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new Fyd(Kkd(a.e));j.e!=j.i.gc();){i=BD(Dyd(j),137);dld(i,i.i*w);eld(i,i.j*A)}for(s=new Fyd(Yod(a.e));s.e!=s.i.gc();){r=BD(Dyd(s),118);u=r.i;v=r.j;u>0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}} +function _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a<n.c.c.length;){m=BD(mlb(n),33);Ekb(o,new f7c(m.i,m.j))}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));while(CVc(a,c)){AVc(a,c,false)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));h=0;i=0;e=null;if(c.c.length!=0){e=(tCb(0,c.c.length),BD(c.c[0],33));h=e.i-(tCb(0,o.c.length),BD(o.c[0],8)).a;i=e.j-(tCb(0,o.c.length),BD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=cVc(c);f=1;while(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=BD(k.Pb(),33);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;dld(j,j.i+A*g);eld(j,j.j+B*g)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));l=cVc(new Tkb(l));++f}!!a.a&&a.a.lg(new Tkb(l));d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));_Vc(a,b,new Tkb(l),d)}} +function $2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Edb(ED(pBc(a,(Nyc(),iyc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;F0b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;F0b(o,a)}e+=d}}} +function q7b(a,b){var c,d,e,f,g,h;if(!BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){return}for(h=new olb(b.a);h.a<h.c.c.length;){f=BD(mlb(h),10);if(f.k==(j0b(),h0b)){e=BD(vNb(f,(Nyc(),txc)),142);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),h0b)){switch(f.k.g){case 2:d=BD(vNb(f,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){f.n.a=a.c-10;p7b(f,new x7b).Jb(new A7b(f));break}if(d==Atc){f.n.a=a.a+10;p7b(f,new D7b).Jb(new G7b(f));break}c=BD(vNb(f,Osc),303);if(c==(esc(),dsc)){o7b(f).Jb(new J7b(f));f.n.b=a.d-10;break}if(c==bsc){o7b(f).Jb(new M7b(f));f.n.b=a.b+10;break}break;default:throw vbb(new Wdb('The node type '+f.k+' is not supported by the '+zS));}}}} +function Y1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new f7c(d.i+d.g/2,d.j+d.f/2);n=M1b(d);o=BD(hkd(b,(Nyc(),Vxc)),98);q=BD(hkd(d,$xc),61);if(!hCd(gkd(d),Uxc)){d.i==0&&d.j==0?(p=0):(p=kfd(d,q));jkd(d,Uxc,p)}j=new f7c(b.g,b.f);e=Z$b(d,o,q,n,j,i,new f7c(d.g,d.f),BD(vNb(c,Lwc),103),c);yNb(e,(wtc(),$sc),d);f=BD(Ikb(e.j,0),11);E0b(f,W1b(d));yNb(e,Yxc,(rcd(),pqb(pcd)));l=BD(hkd(b,Yxc),174).Hc(ncd);for(h=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));h.e!=h.i.gc();){g=BD(Dyd(h),137);if(!Ccb(DD(hkd(g,Jxc)))&&!!g.a){m=Z1b(g);Ekb(f.f,m);if(!l){k=0;tcd(BD(hkd(b,Yxc),21))&&(k=mfd(new f7c(g.i,g.j),new f7c(g.g,g.f),new f7c(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}yNb(e,tyc,ED(hkd(Xod(b),tyc)));yNb(e,uyc,ED(hkd(Xod(b),uyc)));yNb(e,ryc,ED(hkd(Xod(b),ryc)));Ekb(c.a,e);Rhb(a.a,d,e)} +function qUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Processor arrange level',1);k=0;mmb();ktb(b,new Wsd((mTc(),ZSc)));f=b.b;h=Jsb(b,b.b);j=true;while(j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);BD(vNb(r,ZSc),19).a==0?--f:(j=false)}v=new Jib(b,0,f);g=new Qsb(v);v=new Jib(b,f,b.b);i=new Qsb(v);if(g.b==0){for(o=Jsb(i,0);o.b!=o.d.c;){n=BD(Xsb(o),86);yNb(n,eTc,meb(k++))}}else{l=g.b;for(u=Jsb(g,0);u.b!=u.d.c;){t=BD(Xsb(u),86);yNb(t,eTc,meb(k++));d=URc(t);qUc(a,d,Udd(c,1/l|0));ktb(d,tmb(new Wsd(eTc)));m=new Psb;for(s=Jsb(d,0);s.b!=s.d.c;){r=BD(Xsb(s),86);for(q=Jsb(t.d,0);q.b!=q.d.c;){p=BD(Xsb(q),188);p.c==r&&(Gsb(m,p,m.c.b,m.c),true)}}Osb(t.d);ye(t.d,m);h=Jsb(i,i.b);e=t.d.b;j=true;while(0<e&&j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);if(BD(vNb(r,ZSc),19).a==0){yNb(r,eTc,meb(k++));--e;Zsb(h)}else{j=false}}}}Qdd(c)} +function _8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;Odd(b,'Inverted port preprocessing',1);k=a.b;j=new Bib(k,0);c=null;t=new Rkb;while(j.b<j.d.gc()){s=c;c=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),29));for(n=new olb(t);n.a<n.c.c.length;){l=BD(mlb(n),10);$_b(l,s)}t.c=KC(SI,Uhe,1,0,5,1);for(o=new olb(c.a);o.a<o.c.c.length;){l=BD(mlb(o),10);if(l.k!=(j0b(),h0b)){continue}if(!fcd(BD(vNb(l,(Nyc(),Vxc)),98))){continue}for(r=X_b(l,(KAc(),HAc),(Ucd(),zcd)).Kc();r.Ob();){p=BD(r.Pb(),11);i=p.e;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];Z8b(a,p,d,t)}}for(q=X_b(l,IAc,Tcd).Kc();q.Ob();){p=BD(q.Pb(),11);i=p.g;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];$8b(a,p,d,t)}}}}for(m=new olb(t);m.a<m.c.c.length;){l=BD(mlb(m),10);$_b(l,c)}Qdd(b)} +function _1b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new H0b;tNb(j,b);G0b(j,BD(hkd(b,(Nyc(),$xc)),61));yNb(j,(wtc(),$sc),b);F0b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Rhb(a.a,b,j);g=FAb(NAb(LAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new m2b),new e2b),new o2b(b));g||(g=FAb(NAb(LAb(new YAb(null,(!b.d&&(b.d=new y5d(B2,b,8,5)),new Kub(b.d,16))),new q2b),new g2b),new s2b(b)));g||(g=FAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new u2b));yNb(j,Nsc,(Bcb(),g?true:false));e_b(j,f,e,BD(hkd(b,Txc),8));for(i=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);!Ccb(DD(hkd(h,Jxc)))&&!!h.a&&Ekb(j.f,Z1b(h))}switch(e.g){case 2:case 1:(j.j==(Ucd(),Acd)||j.j==Rcd)&&d.Fc((Orc(),Lrc));break;case 4:case 3:(j.j==(Ucd(),zcd)||j.j==Tcd)&&d.Fc((Orc(),Lrc));}return j} +function nQc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(FQc(),DQc)?(m=b):d==EQc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=BD(p.Pb(),11);q=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;t=new Tqb;h=new Tqb;for(j=new b1b(o.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);if(Ccb(DD(vNb(i,(wtc(),ltc))))!=e){continue}if(Jkb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=l7c(OC(GC(m1,1),nie,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Qqb(t,new vgd(DQc,i)):Qqb(t,new vgd(EQc,i)):b.a._b(r)?Qqb(h,new vgd(DQc,i)):Qqb(h,new vgd(EQc,i))}}if(t.a.gc()>1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}} +function $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))} +function LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)} +function Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)} +function Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'"'))}for(e=0;e<f;e++){if(Zcb((BCb(e,a.length),a.charCodeAt(e)))==-1){throw vbb(new Oeb(Oje+j+'"'))}}l=0;g=Jeb[10];k=Keb[10];h=Jbb(Meb[10]);c=true;d=f%g;if(d>0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'"'))}}return l} +function Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&TKd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=_1d(q1d(M6d,d));f;f=_1d(q1d(M6d,f))){f==b&&this.d.Fc(d)}}}else if($1d(q1d(M6d,b))==1&&!!h){this.f=null;this.d=(m8d(),l8d)}else{this.f=null;this.e=true;this.d=(mmb(),new anb(b))}}}else{this.e=$1d(q1d(M6d,b))==5;this.f.Fb(W6d)&&(this.f=W6d)}} +function zKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=yKb(a,b);m=a.s;n=a.t;for(j=BD(BD(Qc(a.r,b),21),84).Kc();j.Ob();){i=BD(j.Pb(),111);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.rf();h=i.b.Xe((Y9c(),s9c))?Edb(ED(i.b.We(s9c))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),DIb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),BIb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),MHb));_Hb(k,(EIb(),CIb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),LHb));_Hb(k,(EIb(),CIb));}(b==(Ucd(),Acd)||b==Rcd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(BD(Mpb(a.b,b),124).a.b=c)} +function b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a<i.c.c.length){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){++c;e=0;d=null;j=null;for(o=new olb(h.j);o.a<o.c.c.length;){m=BD(mlb(o),11);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=BD(Ikb(m.e,0),17);j=d.c}if(m.g.c.length==1){d=BD(Ikb(m.g,0),17);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Ccb(DD(vNb(j.i,pwc)))){c3b(h,d,j,j.i);nlb(i)}else{r=new Rkb;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(l=new olb(m.g);l.a<l.c.c.length;){k=BD(mlb(l),17);k.d.g.c.length==0||(r.c[r.c.length]=k,true)}for(g=new olb(m.e);g.a<g.c.c.length;){f=BD(mlb(g),17);f.c.e.c.length==0||(r.c[r.c.length]=f,true)}}for(q=new olb(r);q.a<q.c.c.length;){p=BD(mlb(q),17);PZb(p,true)}}}}b.n&&Sdd(b,'Found '+c+' comment boxes');Qdd(b)} +function f9b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Edb(ED(vNb(a,(Nyc(),tyc))));n=Edb(ED(vNb(a,uyc)));l=Edb(ED(vNb(a,ryc)));h=a.o;f=BD(Ikb(a.j,0),11);g=f.n;p=d9b(f,l);if(!p){return}if(b.Hc((rcd(),ncd))){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(pcd)){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new olb(f.f);j.a<j.c.c.length;){i=BD(mlb(j),70);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} +function eae(){rEd(Q9,new Lae);rEd(S9,new qbe);rEd(T9,new Xbe);rEd(U9,new Cce);rEd(ZI,new Oce);rEd(GC(SD,1),new Rce);rEd(wI,new Uce);rEd(xI,new Xce);rEd(ZI,new hae);rEd(ZI,new kae);rEd(ZI,new nae);rEd(BI,new qae);rEd(ZI,new tae);rEd(yK,new wae);rEd(yK,new zae);rEd(ZI,new Cae);rEd(FI,new Fae);rEd(ZI,new Iae);rEd(ZI,new Oae);rEd(ZI,new Rae);rEd(ZI,new Uae);rEd(ZI,new Xae);rEd(GC(SD,1),new $ae);rEd(ZI,new bbe);rEd(ZI,new ebe);rEd(yK,new hbe);rEd(yK,new kbe);rEd(ZI,new nbe);rEd(JI,new tbe);rEd(ZI,new wbe);rEd(MI,new zbe);rEd(ZI,new Cbe);rEd(ZI,new Fbe);rEd(ZI,new Ibe);rEd(ZI,new Lbe);rEd(yK,new Obe);rEd(yK,new Rbe);rEd(ZI,new Ube);rEd(ZI,new $be);rEd(ZI,new bce);rEd(ZI,new ece);rEd(ZI,new hce);rEd(ZI,new kce);rEd(UI,new nce);rEd(ZI,new qce);rEd(ZI,new tce);rEd(ZI,new wce);rEd(UI,new zce);rEd(MI,new Fce);rEd(ZI,new Ice);rEd(JI,new Lce)} +function Bmd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)} +function f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a<o.c.c.length;){n=BD(mlb(o),29);for(r=new olb(n.a);r.a<r.c.c.length;){p=BD(mlb(r),10);if(p.k!=(j0b(),e0b)){continue}if(!wNb(p,(wtc(),Gsc))){continue}s=null;u=null;t=null;for(C=new olb(p.j);C.a<C.c.c.length;){B=BD(mlb(C),11);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=BD(Ikb(t.g,0),17);k=new t7c(v.a);j=new g7c(t.n);P6c(j,p.n);l=Jsb(k,0);Vsb(l,j);A=w7c(v.a);m=new g7c(t.n);P6c(m,p.n);Gsb(A,m,A.c.b,A.c);D=BD(vNb(p,Gsc),10);F=BD(Ikb(D.j,0),11);i=BD(Qkb(s.e,KC(AQ,jne,17,0,0,1)),474);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];RZb(b,F);o7c(b.a,b.a.b,k)}i=k_b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];QZb(b,F);o7c(b.a,0,A)}QZb(v,null);RZb(v,null);w.c[w.c.length]=p}}for(q=new olb(w);q.a<q.c.c.length;){p=BD(mlb(q),10);$_b(p,null)}} +function lgb(){lgb=ccb;var a,b,c;new sgb(1,0);new sgb(10,0);new sgb(0,0);dgb=KC(bJ,nie,240,11,0,1);egb=KC(TD,$ie,25,100,15,1);fgb=OC(GC(UD,1),Vje,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);ggb=KC(WD,oje,25,fgb.length,15,1);hgb=OC(GC(UD,1),Vje,25,15,[1,10,100,_ie,10000,Wje,1000000,10000000,100000000,Jje,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);igb=KC(WD,oje,25,hgb.length,15,1);jgb=KC(bJ,nie,240,11,0,1);a=0;for(;a<jgb.length;a++){dgb[a]=new sgb(a,0);jgb[a]=new sgb(0,a);egb[a]=48}for(;a<egb.length;a++){egb[a]=48}for(c=0;c<ggb.length;c++){ggb[c]=ugb(fgb[c])}for(b=0;b<igb.length;b++){igb[b]=ugb(hgb[b])}Dhb()} +function zrb(){function e(){this.obj=this.createObject()} +;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[hke]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)} +function mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true} +function z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(JD(vNb(i,$sc),239)){A2b(i,m)}else if(JD(vNb(i,$sc),186)&&!p){d=BD(vNb(i,$sc),118);s=b_b(b,i,d.g,d.f);bld(d,s.a,s.b)}for(r=new olb(i.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new G2b(i)),new I2b(c))}}if(p){for(r=new olb(p.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new K2b(p)),new M2b(c))}}t=BD(hkd(o,Swc),218);for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),17);y2b(g,t,m)}B2b(b);for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);l=i.e;!!l&&z2b(a,l)}} +function xSb(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,ume),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new ASb),ume),qqb((Csd(),zsd),OC(GC(O3,1),Kie,237,0,[xsd])))));p4c(a,ume,vme,meb(1));p4c(a,ume,wme,80);p4c(a,ume,xme,5);p4c(a,ume,_le,tme);p4c(a,ume,yme,meb(1));p4c(a,ume,zme,(Bcb(),true));p4c(a,ume,ame,lSb);p4c(a,ume,Ame,Ksd(dSb));p4c(a,ume,Bme,Ksd(mSb));p4c(a,ume,Cme,false);p4c(a,ume,Dme,Ksd(jSb));p4c(a,ume,Eme,Ksd(iSb));p4c(a,ume,Fme,Ksd(hSb));p4c(a,ume,Gme,Ksd(gSb));p4c(a,ume,Hme,Ksd(nSb));p4c(a,ume,mme,Ksd(fSb));p4c(a,ume,pme,Ksd(vSb));p4c(a,ume,nme,Ksd(eSb));p4c(a,ume,rme,Ksd(qSb));p4c(a,ume,ome,Ksd(rSb))} +function GKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;k=KIb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(Tbd(),Qbd)||k==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=k==Qbd?e-2*a.w:e;k=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(k==Qbd){n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=n}else{n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=k==Qbd?e-2*a.w:e;k=Pbd}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=BD(BD(Qc(a.r,b),21),84).Kc();m.Ob();){l=BD(m.Pb(),111);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.Xe((Y9c(),s9c))?j.Hf()==(Ucd(),Acd)?-j.rf().b-Edb(ED(j.We(s9c))):Edb(ED(j.We(s9c))):j.Hf()==(Ucd(),Acd)?-j.rf().b:0);f+=l.d.b+l.b.rf().a+l.d.c+n}} +function KKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;l=KIb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(Tbd(),Qbd)||l==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=l==Qbd?e-2*a.w:e;l=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(l==Qbd){o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=o}else{o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=l==Qbd?e-2*a.w:e;l=Pbd}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=BD(BD(Qc(a.r,b),21),84).Kc();n.Ob();){m=BD(n.Pb(),111);m.e.a=(k=m.b,k.Xe((Y9c(),s9c))?k.Hf()==(Ucd(),Tcd)?-k.rf().a-Edb(ED(k.We(s9c))):j+Edb(ED(k.We(s9c))):k.Hf()==(Ucd(),Tcd)?-k.rf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.rf().b+m.d.a+o}} +function Abc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.n=Edb(ED(vNb(a.g,(Nyc(),vyc))));a.e=Edb(ED(vNb(a.g,pyc)));a.i=a.g.b.c.length;h=a.i-1;m=0;a.j=0;a.k=0;a.a=Ou(KC(JI,nie,19,a.i,0,1));a.b=Ou(KC(BI,nie,333,a.i,7,1));for(g=new olb(a.g.b);g.a<g.c.c.length;){e=BD(mlb(g),29);e.p=h;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);k.p=m;++m}--h}a.f=KC(WD,oje,25,m,15,1);a.c=IC(WD,[nie,oje],[48,25],15,[m,3],2);a.o=new Rkb;a.p=new Rkb;b=0;a.d=0;for(f=new olb(a.g.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);m=k.p;a.f[m]=k.c.p;j+=k.o.b+a.n;c=sr(new Sr(ur(R_b(k).a.Kc(),new Sq)));o=sr(new Sr(ur(U_b(k).a.Kc(),new Sq)));a.c[m][0]=o-c;a.c[m][1]=c;a.c[m][2]=o;d+=c;p+=o;c>0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} +function Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))} +function fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g<h.length-d;g++){for(s=Jsb(b,0);s.b!=s.d.c;){r=BD(Xsb(s),86);j=qfb(GD(vNb(r,(mTc(),$Sc))),0,g+1);c=(j==null?Wd(irb(m.f,null)):Crb(m.g,j))!=null?BD(j==null?Wd(irb(m.f,null)):Crb(m.g,j),19).a+1:1;Shb(m,j,meb(c))}}for(l=new nib((new eib(m)).a);l.b;){k=lib(l);f=meb(Ohb(a.a,k.cd())!=null?BD(Ohb(a.a,k.cd()),19).a:0);Shb(a.a,GD(k.cd()),meb(BD(k.dd(),19).a+f.a));f=BD(Ohb(a.b,k.cd()),19);(!f||f.a<BD(k.dd(),19).a)&&Shb(a.b,GD(k.cd()),BD(k.dd(),19))}fSc(a,n)}} +function PCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Interactive node layering',1);d=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){l=BD(mlb(n),10);j=l.n.a;i=j+l.o.a;i=$wnd.Math.max(j+1,i);r=new Bib(d,0);e=null;while(r.b<r.d.gc()){p=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),569));if(p.c>=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.a<q.c.c.length;){p=BD(mlb(q),569);f=new H1b(b);f.p=k++;h.c[h.c.length]=f;for(o=new olb(p.b);o.a<o.c.c.length;){l=BD(mlb(o),10);$_b(l,f);l.p=0}}for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p==0&&OCc(a,l,b)}g=new Bib(h,0);while(g.b<g.d.gc()){(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)).a.c.length==0&&uib(g)}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function Snc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(b.e.c.length!=0&&c.e.c.length!=0){d=BD(Ikb(b.e,0),17).c.i;g=BD(Ikb(c.e,0),17).c.i;if(d==g){return beb(BD(vNb(BD(Ikb(b.e,0),17),(wtc(),Zsc)),19).a,BD(vNb(BD(Ikb(c.e,0),17),Zsc),19).a)}for(k=a.a,l=0,m=k.length;l<m;++l){j=k[l];if(j==d){return 1}else if(j==g){return -1}}}if(b.g.c.length!=0&&c.g.c.length!=0){f=BD(vNb(b,(wtc(),Xsc)),10);i=BD(vNb(c,Xsc),10);e=0;h=0;wNb(BD(Ikb(b.g,0),17),Zsc)&&(e=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);wNb(BD(Ikb(c.g,0),17),Zsc)&&(h=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);if(!!f&&f==i){if(Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&!Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return 1}else if(!Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return -1}return e<h?-1:e>h?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return e<h?-1:e>h?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1} +function acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),29);r=-1;o=l_b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(j0b(),h0b)&&fcd(BD(vNb(k,(Nyc(),Vxc)),98)))){continue}ecd(BD(vNb(k,(Nyc(),Vxc)),98))||bcc(k);yNb(k,(wtc(),Psc),k);p.c=KC(SI,Uhe,1,0,5,1);w.c=KC(SI,Uhe,1,0,5,1);c=new Rkb;u=new Psb;Jq(u,Y_b(k,(Ucd(),Acd)));$bc(a,u,p,w,c);h=r;A=k;for(f=new olb(p);f.a<f.c.c.length;){d=BD(mlb(f),10);Z_b(d,h,i);++r;yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(d,Qsc),15).Fc(A)}Osb(u);for(t=Y_b(k,Rcd).Kc();t.Ob();){s=BD(t.Pb(),11);Gsb(u,s,u.a,u.a.a)}$bc(a,u,w,null,c);v=k;for(e=new olb(w);e.a<e.c.c.length;){d=BD(mlb(e),10);Z_b(d,++r,i);yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(v,Qsc),15).Fc(d)}c.c.length==0||yNb(k,ssc,c)}}Qdd(b)} +function SQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;l=BD(vNb(a,(HSb(),FSb)),33);r=Ohe;s=Ohe;p=Rie;q=Rie;for(u=new olb(a.e);u.a<u.c.c.length;){t=BD(mlb(u),144);C=t.d;D=t.e;r=$wnd.Math.min(r,C.a-D.a/2);s=$wnd.Math.min(s,C.b-D.b/2);p=$wnd.Math.max(p,C.a+D.a/2);q=$wnd.Math.max(q,C.b+D.b/2)}B=BD(hkd(l,(wSb(),kSb)),116);A=new f7c(B.b-r,B.d-s);for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);w=vNb(g,FSb);if(JD(w,239)){n=BD(w,33);v=P6c(g.d,A);bld(n,v.a-n.g/2,v.b-n.f/2)}}for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),282);j=BD(vNb(c,FSb),79);k=itd(j,true,true);F=(H=c7c(R6c(c.d.d),c.c.d),l6c(H,c.c.e.a,c.c.e.b),P6c(H,c.c.d));nmd(k,F.a,F.b);b=(I=c7c(R6c(c.c.d),c.d.d),l6c(I,c.d.e.a,c.d.e.b),P6c(I,c.d.d));gmd(k,b.a,b.b)}for(f=new olb(a.d);f.a<f.c.c.length;){e=BD(mlb(f),447);m=BD(vNb(e,FSb),137);o=P6c(e.d,A);bld(m,o.a,o.b)}G=p-r+(B.b+B.c);i=q-s+(B.d+B.a);Afd(l,G,i,false,true)} +function bmc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=BD(vNb(a.b,(Nyc(),Wwc)),376);if(e==(_Ac(),ZAc)){c=new Rkb;i=new Rkb}for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=BD(Fqb(new Gqb(g.b)),61);e==ZAc&&b==(Ucd(),Acd)?(c.c[c.c.length]=g,true):e==ZAc&&b==(Ucd(),Rcd)?(i.c[i.c.length]=g,true):_lc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(Ucd(),Acd)?amc(g,Acd,(Ajc(),xjc),g.a):k==Acd?amc(g,Acd,(Ajc(),yjc),g.c):j==Rcd?amc(g,Rcd,(Ajc(),yjc),g.a):k==Rcd&&amc(g,Rcd,(Ajc(),xjc),g.c);break;case 2:case 3:d=g.b;uqb(d,(Ucd(),Acd))?uqb(d,Rcd)?uqb(d,Tcd)?uqb(d,zcd)||amc(g,Acd,(Ajc(),yjc),g.c):amc(g,Acd,(Ajc(),xjc),g.a):amc(g,Acd,(Ajc(),wjc),null):amc(g,Rcd,(Ajc(),wjc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(Ucd(),Acd)||m==Acd?amc(g,Rcd,(Ajc(),wjc),null):amc(g,Acd,(Ajc(),wjc),null);}}if(c){c.c.length==0||$lc(c,(Ucd(),Acd));i.c.length==0||$lc(i,(Ucd(),Rcd))}} +function A2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=BD(vNb(a,(wtc(),$sc)),33);o=BD(vNb(a,(Nyc(),Gwc)),19).a;f=BD(vNb(a,nxc),19).a;jkd(d,Gwc,meb(o));jkd(d,nxc,meb(f));dld(d,a.n.a+b.a);eld(d,a.n.b+b.b);if(BD(hkd(d,Fxc),174).gc()!=0||!!a.e||PD(vNb(Q_b(a),Exc))===PD((Vzc(),Tzc))&&Jzc((Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(m=BD(vNb(a,Cxc),197)):(m=BD(vNb(Q_b(a),Dxc),197)),m))){cld(d,a.o.a);ald(d,a.o.b)}for(l=new olb(a.j);l.a<l.c.c.length;){j=BD(mlb(l),11);p=vNb(j,$sc);if(JD(p,186)){e=BD(p,118);bld(e,j.n.a,j.n.b);jkd(e,$xc,j.j)}}n=BD(vNb(a,xxc),174).gc()!=0;for(i=new olb(a.b);i.a<i.c.c.length;){g=BD(mlb(i),70);if(n||BD(vNb(g,xxc),174).gc()!=0){c=BD(vNb(g,$sc),137);_kd(c,g.o.a,g.o.b);bld(c,g.n.a,g.n.b)}}if(!tcd(BD(vNb(a,Yxc),21))){for(k=new olb(a.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(h=new olb(j.f);h.a<h.c.c.length;){g=BD(mlb(h),70);c=BD(vNb(g,$sc),137);cld(c,g.o.a);ald(c,g.o.b);bld(c,g.n.a,g.n.b)}}}} +function gtd(a){var b,c,d,e,f;ytb(a,hue);switch((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i+(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i){case 0:throw vbb(new Wdb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0?Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))):Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));}if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==1){e=atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82));f=atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82));if(Xod(e)==Xod(f)){return Xod(e)}else if(e==Xod(f)){return e}else if(f==Xod(e)){return f}}d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));b=atd(BD(Rr(d),82));while(Qr(d)){c=atd(BD(Rr(d),82));if(c!=b&&!ntd(c,b)){if(Xod(c)==Xod(b)){b=Xod(c)}else{b=htd(b,c);if(!b){return null}}}}return b} +function KNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;Odd(c,'Polyline edge routing',1);q=Edb(ED(vNb(b,(Nyc(),Uwc))));n=Edb(ED(vNb(b,wyc)));e=Edb(ED(vNb(b,myc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=HNc(BD(Ikb(b.b,0),29));t=0.4*d*u}h=new Bib(b.b,0);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));f=Kq(g,DNc);f&&t>0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);j=0;for(p=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(p);){o=BD(Rr(p),17);r=A0b(o.c).b;s=A0b(o.d).b;if(g==o.d.i.c&&!OZb(o)){LNc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(Ucd(),Tcd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:MNc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=HNc((sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)));k=$wnd.Math.max(k,u);sCb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;Qdd(c)} +function bic(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Lqb;i=new Hp;for(d=new olb(a.a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=tgc(b);if(j){jrb(k.f,j,b)}else{s=ugc(b);if(s){for(f=new olb(s.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Rc(i,e,b)}}}}for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);j=tgc(b);if(j){for(h=new Sr(ur(U_b(j).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(OZb(g)){continue}o=g.c;r=g.d;if((Ucd(),Lcd).Hc(g.c.j)&&Lcd.Hc(g.d.j)){continue}p=BD(Ohb(k,g.d.i),57);AFb(DFb(CFb(EFb(BFb(new FFb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==Tcd&&l1b((z0b(),w0b,o))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}if(r.j==zcd&&g1b((z0b(),u0b,r))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}} +function QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BCb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;Kfb(i,(BCb(e,a.length),a.charCodeAt(e)))}}return i.a}} +function wA(a,b,c,d,e){var f,g,h;uA(a,b);g=b[0];f=bfb(c.c,0);h=-1;if(nA(c)){if(d>0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BCb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return CA(a,g,b,e);default:return false;}} +function vKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=BD(BD(Qc(a.r,b),21),84);if(b==(Ucd(),zcd)||b==Tcd){zKb(a,b);return}f=b==Acd?(vLb(),rLb):(vLb(),uLb);u=b==Acd?(EIb(),DIb):(EIb(),BIb);c=BD(Mpb(a.b,b),124);d=c.i;e=d.c+w6c(OC(GC(UD,1),Vje,25,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-w6c(OC(GC(UD,1),Vje,25,15,[c.n.c,a.C.c,a.k]));g=dLb(iLb(f),a.t);s=b==Acd?Qje:Pje;for(l=m.Kc();l.Ob();){j=BD(l.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.rf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);ytb(u,lle);n.f=u;$Hb(n,(NHb(),MHb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}} +function rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a} +function iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(l=Y_b(f,(Ucd(),zcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.e,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}if(c){for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(j=new olb(f.j);j.a<j.c.c.length;){i=BD(mlb(j),11);for(e=new olb(i.g);e.a<e.c.c.length;){d=BD(mlb(e),17);OZb(d)&&Qqb(a.g,d)}}for(l=Y_b(f,(Ucd(),Tcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.f,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}} +function Afd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new f7c(a.g,a.f);p=rfd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!Xod(a)?BD(hkd(a,(Y9c(),z8c)),103):BD(hkd(Xod(a),(Y9c(),z8c)),103);h=PD(hkd(a,(Y9c(),t9c)))===PD((dcd(),$bd));for(s=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));s.e!=s.i.gc();){r=BD(Dyd(s),118);t=BD(hkd(r,A9c),61);if(t==(Ucd(),Scd)){t=lfd(r,g);jkd(r,A9c,t)}switch(t.g){case 1:h||dld(r,r.i*w);break;case 2:dld(r,r.i+u);h||eld(r,r.j*k);break;case 3:h||dld(r,r.i*w);eld(r,r.j+i);break;case 4:h||eld(r,r.j*k);}}}_kd(a,p.a,p.b);if(e){for(m=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)} +function Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;h<t;h++){p[h]=Ohe;o[h]=Rie}for(i=0;i<t;i++){d=(tCb(i,b.c.length),BD(b.c[i],180));B[i]=SLc(d);B[q]>B[i]&&(q=i);for(l=new olb(a.a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);for(s=new olb(k.a);s.a<s.c.c.length;){r=BD(mlb(s),10);w=Edb(d.p[r.p])+Edb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=KC(UD,Vje,25,t,15,1);for(j=0;j<t;j++){(tCb(j,b.c.length),BD(b.c[j],180)).o==(eMc(),cMc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=KC(UD,Vje,25,t,15,1);for(n=new olb(a.a.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);for(g=0;g<t;g++){f[g]=Edb((tCb(g,b.c.length),BD(b.c[g],180)).p[u.p])+Edb((tCb(g,b.c.length),BD(b.c[g],180)).d[u.p])+A[g]}f.sort(dcb(Ylb.prototype.te,Ylb,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} +function G3b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=l7c(OC(GC(m1,1),nie,8,0,[h,a.a]));switch(a.j.g){case 1:_Hb(b,(EIb(),BIb));d.d=-e.d-c-d.a;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 2:$Hb(b,(NHb(),LHb));d.c=f.a+e.c+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}break;case 3:_Hb(b,(EIb(),DIb));d.d=f.b+e.a+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 4:$Hb(b,(NHb(),MHb));d.c=-e.b-c-d.b;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}}} +function ded(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),33);zfd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=$dd(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;j=new Bib(a,0);while(j.b<j.d.gc()){h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));G=h.g;l=h.f;if(H+G>n){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Bib(a,0);Fsb(B,meb(a.c.length));A=Jsb(B,0);r=BD(Xsb(A),19).a;Fsb(w,m);v=Jsb(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Edb(ED(Xsb(v)));r=BD(Xsb(A),19).a}h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));s=h.f;ald(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;cld(h,q);Ffd(h,new f7c(q,p),new f7c(t,s))}H+=h.g+b}}return new f7c(k,F)} +function _Yb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;Odd(b,'Compound graph postprocessor',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));h=BD(vNb(a,(wtc(),zsc)),224);k=new Tqb;for(r=h.ec().Kc();r.Ob();){q=BD(r.Pb(),17);g=new Tkb(h.cc(q));mmb();Okb(g,new EZb(a));v=zZb((tCb(0,g.c.length),BD(g.c[0],243)));A=AZb(BD(Ikb(g,g.c.length-1),243));t=v.i;f_b(A.i,t)?(s=t.e):(s=Q_b(t));l=aZb(q,g);Osb(q.a);m=null;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),243);p=new d7c;Y$b(p,e.a,s);n=e.b;d=new s7c;o7c(d,0,n.a);q7c(d,p);u=new g7c(A0b(n.c));w=new g7c(A0b(n.d));P6c(u,p);P6c(w,p);if(m){d.b==0?(o=w):(o=(sCb(d.b!=0),BD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>qme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)} +function KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.a<n.c.c.length;){m=BD(mlb(n),144);o+=BD(vNb(m,(wSb(),oSb)),19).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}yNb(c,(wSb(),oSb),meb(o));yNb(c,(HSb(),ESb),new f7c(k,l));yNb(c,DSb,new f7c(i,j))}mmb();a.ad(new OQb);p=new kRb;tNb(p,BD(a.Xb(0),94));h=0;s=0;for(f=a.Kc();f.Ob();){c=BD(f.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Edb(ED(vNb(p,(wSb(),bSb)))));r=Edb(ED(vNb(p,uSb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));if(t+q.a>h){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)} +function bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n<p-1;n++){if(!dde(g=f[k++])||!dde(h=f[k++])||!dde(i=f[k++])||!dde(j=f[k++]))return null;b=$ce[g];c=$ce[h];d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=l_b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(j0b(),i0b)){continue}if(o==(Aad(),yad)){for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Vbc(k);k.g.c.length==0||Wbc(k)}}else if(JD(vNb(f,(wtc(),$sc)),17)){q=BD(vNb(f,$sc),17);r=BD(Y_b(f,(Ucd(),Tcd)).Kc().Pb(),11);s=BD(Y_b(f,zcd).Kc().Pb(),11);t=BD(vNb(r,$sc),11);u=BD(vNb(s,$sc),11);QZb(q,u);RZb(q,t);v=new g7c(s.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[u.i.n,u.n,u.a])).a;Dsb(q.a,v);v=new g7c(r.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[t.i.n,t.n,t.a])).a;Dsb(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a<m.c.c.length){n=c;c=BD(mlb(m),11);if(!pb(vNb(n,$sc),vNb(c,$sc))){p=false;break}}}else{p=false}for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Tbc(k,p);k.g.c.length==0||Ubc(k,p)}}$_b(f,null)}}Qdd(b)} +function KJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tCb(0,b.c.length),BD(b.c[0],17)).p];A=a.c[(tCb(1,b.c.length),BD(b.c[1],17)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!JD(r,10)){return false}q=BD(r,10);v=a.i[q.p];w=!q.c?-1:Jkb(q.c.a,q,0);f=Pje;if(w>0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w<q.c.a.c.length-1){i=BD(Ikb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(jBc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Iy(),My(Jqe),$wnd.Math.abs(f-j)<=Jqe||f==j||isNaN(f)&&isNaN(j))){return true}d=gKc(t.a);h=-gKc(t.b);l=-gKc(A.a);s=gKc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+b.qf().a;e.d=f.qf().b+b.qf().b;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}for(j=new olb(b.Cf());j.a<j.c.c.length;){i=BD(mlb(j),838);k=i.qf().a+b.qf().a;l=i.qf().b+b.qf().b;if(a.e){e.c=k;e.d=l;e.b=i.rf().a;e.a=i.rf().b;H6c(d,e)}if(a.d){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+k;e.d=f.qf().b+l;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}if(a.b){m=new f7c(-c,-c);if(BD(b.We((Y9c(),x9c)),174).Hc((rcd(),pcd))){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);m.a+=f.rf().a+c;m.b+=f.rf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);VGb(d,i.Bf(),i.zf(),b,i,m,c)}}a.b&&VGb(d,b.Bf(),b.zf(),b,null,null,c);h=new K_b(b.Af());h.d=$wnd.Math.max(0,b.qf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.qf().b+b.rf().b));h.b=$wnd.Math.max(0,b.qf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.qf().a+b.rf().a));b.Ef(h)} +function wz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} +function pid(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new Rkb;l=b.length;g=AUd(c);for(j=0;j<l;++j){k=ifb(b,wfb(61),j);d=$hd(g,b.substr(j,k-j));e=KJd(d);f=e.Aj().Nh();switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 91:{m=new Rkb;Ekb(i,new kGd(d,m));n:for(;;){switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c[m.c.length]=null}else{throw vbb(new hz(kte))}k+=3;break}}if(k<l){switch(BCb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw vbb(new hz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Ekb(i,new kGd(d,null))}else{throw vbb(new hz(kte))}j=k+3;break}}if(j<l){BCb(j,b.length);if(b.charCodeAt(j)!=44){throw vbb(new hz('Expecting ,'))}}else{break}}return qid(a,i,c)} +function AKb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=BD(BD(Qc(a.r,b),21),84);g=bKb(a,b);c=a.u.Hc((rcd(),lcd));for(i=j.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.rf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=-l.a-a.t;_Hb(k,(EIb(),BIb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=m.b+a.t;_Hb(k,(EIb(),DIb));break;case 2:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=m.a+a.s;$Hb(k,(NHb(),LHb));break;case 4:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=-l.b-a.s;$Hb(k,(NHb(),MHb));}g=false}} +function Kfe(a,b){wfe();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(Vhb(Zee)==0){l=KC(lbb,nie,117,_ee.length,0,1);for(g=0;g<l.length;g++){l[g]=(++vfe,new $fe(4))}d=new Ifb;for(f=0;f<Yee.length;f++){k=(++vfe,new $fe(4));if(f<84){h=f*2;n=(BCb(h,wxe.length),wxe.charCodeAt(h));m=(BCb(h+1,wxe.length),wxe.charCodeAt(h+1));Ufe(k,n,m)}else{h=(f-84)*2;Ufe(k,afe[h],afe[h+1])}i=Yee[f];dfb(i,'Specials')&&Ufe(k,65520,65533);if(dfb(i,uxe)){Ufe(k,983040,1048573);Ufe(k,1048576,1114109)}Shb(Zee,i,k);Shb($ee,i,_fe(k));j=d.a.length;0<j?(d.a=d.a.substr(0,0)):0>j&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e<i.length;e++){BCb(e,i.length);i.charCodeAt(e)!=32&&Afb(d,(BCb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}Ofe(d.a,i,true)}Ofe(vxe,'Cn',false);Ofe(xxe,'Cn',true);c=(++vfe,new $fe(4));Ufe(c,0,lxe);Shb(Zee,'ALL',c);Shb($ee,'ALL',_fe(c));!bfe&&(bfe=new Lqb);Shb(bfe,vxe,vxe);!bfe&&(bfe=new Lqb);Shb(bfe,xxe,xxe);!bfe&&(bfe=new Lqb);Shb(bfe,'ALL','ALL')}o=b?BD(Phb(Zee,a),136):BD(Phb($ee,a),136);return o} +function c3b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(fcd(BD(vNb(d,(Nyc(),Vxc)),98))){g=false;h=false;t:for(o=new olb(d.j);o.a<o.c.c.length;){n=BD(mlb(o),11);for(q=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(n),new R0b(n)])));Qr(q);){p=BD(Rr(q),11);if(!Ccb(DD(vNb(p.i,pwc)))){if(n.j==(Ucd(),Acd)){g=true;break t}if(n.j==Rcd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new olb(d.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)} +function aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b<s.d.gc()){r=(sCb(s.b<s.d.gc()),BD(s.d.Xb(s.c=s.b++),29));for(u=new olb(r.a);u.a<u.c.c.length;){t=BD(mlb(u),10);for(n=new Sr(ur(U_b(t).a.Kc(),new Sq));Qr(n);){l=BD(Rr(n),17);A.a.zc(l,A)}for(m=new Sr(ur(R_b(t).a.Kc(),new Sq));Qr(m);){l=BD(Rr(m),17);A.a.Bc(l)!=null}}if(o+1==j){e=new H1b(a);Aib(s,e);f=new H1b(a);Aib(s,f);for(C=A.a.ec().Kc();C.Ob();){B=BD(C.Pb(),17);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new b0b(a);yNb(g,(Nyc(),Vxc),(dcd(),acd));$_b(g,e);__b(g,(j0b(),d0b));p=new H0b;F0b(p,g);G0b(p,(Ucd(),Tcd));D=new H0b;F0b(D,g);G0b(D,zcd);d=new b0b(a);yNb(d,Vxc,acd);$_b(d,f);__b(d,d0b);q=new H0b;F0b(q,d);G0b(q,Tcd);F=new H0b;F0b(F,d);G0b(F,zcd);w=new UZb;QZb(w,B.c);RZb(w,p);H=new UZb;QZb(H,D);RZb(H,q);QZb(B,F);h=new goc(g,d,w,H,B);yNb(g,(wtc(),usc),h);yNb(d,usc,h);G=w.c.i;if(G.k==d0b){i=BD(vNb(G,usc),305);i.d=h;h.g=i}}if(k.Ob()){j=BD(k.Pb(),19).a}else{break}}++o}return meb(v)} +function T1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;l=0;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(!Ccb(DD(hkd(d,(Nyc(),Jxc))))){if((PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(d,xwc)))){jkd(d,(wtc(),Zsc),meb(l));++l}$1b(a,d,c)}}l=0;for(j=new Fyd((!b.b&&(b.b=new cUd(B2,b,12,3)),b.b));j.e!=j.i.gc();){h=BD(Dyd(j),79);if(PD(hkd(b,(Nyc(),ywc)))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb))){jkd(h,(wtc(),Zsc),meb(l));++l}o=jtd(h);p=ltd(h);k=Ccb(DD(hkd(o,fxc)));n=!Ccb(DD(hkd(h,Jxc)));m=k&&Qld(h)&&Ccb(DD(hkd(h,gxc)));f=Xod(o)==b&&Xod(o)==Xod(p);g=(Xod(o)==b&&p==b)^(Xod(p)==b&&o==b);n&&!m&&(g||f)&&X1b(a,h,b,c)}if(Xod(b)){for(i=new Fyd(Wod(Xod(b)));i.e!=i.i.gc();){h=BD(Dyd(i),79);o=jtd(h);if(o==b&&Qld(h)){m=Ccb(DD(hkd(o,(Nyc(),fxc))))&&Ccb(DD(hkd(h,gxc)));m&&X1b(a,h,b,c)}}}} +function gDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;Odd(c,'MinWidth layering',1);n=b.b;A=b.a;I=BD(vNb(b,(Nyc(),oxc)),19).a;h=BD(vNb(b,pxc),19).a;a.b=Edb(ED(vNb(b,lyc)));a.d=Pje;for(u=new olb(A);u.a<u.c.c.length;){s=BD(mlb(u),10);if(s.k!=(j0b(),h0b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=KC(WD,oje,25,B,15,1);a.f=KC(WD,oje,25,B,15,1);a.e=KC(UD,Vje,25,B,15,1);j=0;a.a=0;for(v=new olb(A);v.a<v.c.c.length;){s=BD(mlb(v),10);s.p=j++;a.c[s.p]=eDc(R_b(s));a.f[s.p]=eDc(U_b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=fDc(A);Okb(A,tmb(new mDc(a)));p=Pje;o=Ohe;g=null;H=I;G=I;f=h;e=h;if(I<0){H=BD(bDc.a.zd(),19).a;G=BD(bDc.b.zd(),19).a}if(h<0){f=BD(aDc.a.zd(),19).a;e=BD(aDc.b.zd(),19).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=dDc(a,F,d,A,w);r=Edb(ED(C.a));m=BD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=BD(l.Pb(),15);i=new H1b(b);for(t=k.Kc();t.Ob();){s=BD(t.Pb(),10);$_b(s,i)}n.c[n.c.length]=i}smb(n);A.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function I6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=BD(vNb(b,(Nyc(),bxc)),19).a;a.c=BD(vNb(b,dxc),19).a;a.c==0&&(a.c=Ohe);q=new Bib(b.b,0);while(q.b<q.d.gc()){p=(sCb(q.b<q.d.gc()),BD(q.d.Xb(q.c=q.b++),29));h=new Rkb;k=-1;u=-1;for(t=new olb(p.a);t.a<t.c.c.length;){s=BD(mlb(t),10);if(sr((D6b(),new Sr(ur(O_b(s).a.Kc(),new Sq))))>=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j<k;++j){Dkb(B,0,(sCb(q.b>0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),46);n=BD(e.b,571).a;if(!n){continue}for(m=new olb(n);m.a<m.c.c.length;){l=BD(mlb(m),10);H6b(a,l,B6b,B)}}c=new Rkb;for(i=0;i<u;++i){Ekb(c,(D=new H1b(a.b),Aib(q,D),D))}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),46);A=BD(e.b,571).c;if(!A){continue}for(w=new olb(A);w.a<w.c.c.length;){v=BD(mlb(w),10);H6b(a,v,C6b,c)}}}r=new Bib(b.b,0);while(r.b<r.d.gc()){o=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),29));o.a.c.length==0&&uib(r)}} +function uQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;Odd(c,'Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;Qdd(c);return}s=Edb(ED(vNb(b,(Nyc(),wyc))));h=Edb(ED(vNb(b,pyc)));g=Edb(ED(vNb(b,myc)));r=BD(vNb(b,Xwc),336);B=r==(tBc(),sBc);A=Edb(ED(vNb(b,Ywc)));a.d=b;a.j.c=KC(SI,Uhe,1,0,5,1);a.a.c=KC(SI,Uhe,1,0,5,1);Uhb(a.k);i=BD(Ikb(b.b,0),29);k=Kq(i.a,(FNc(),DNc));o=BD(Ikb(b.b,b.b.c.length-1),29);l=Kq(o.a,DNc);p=new olb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?BD(mlb(p),29):null;iQc(a,q,t);lQc(a);C=Vtb(uAb(PAb(JAb(new YAb(null,new Kub(a.i,16)),new LQc),new NQc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&h_b(t,u);for(w=new olb(a.i);w.a<w.c.c.length;){v=BD(mlb(w),128);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Gkb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),17);f=pQc(a,d);yNb(d,(wtc(),ptc),f);D=rQc(a,d);yNb(d,rtc,D)}b.f.a=G;a.d=null;Qdd(c)} +function Yxd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(oid(a.e)){k=b.gc();if(k>0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=k3d(a,BD(n,72),m)}for(g=d;--g>=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}} +function fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);for(e=new Sr(ur(U_b(o).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(d.c.i.k==(j0b(),e0b)||d.d.i.k==e0b){k=eYb(a,d,j,q);Rc(i,cYb(k.d),k.a)}}}g=new Rkb;for(t=BD(vNb(c.c,(wtc(),Esc)),21).Kc();t.Ob();){s=BD(t.Pb(),61);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new J6c(a.d.a,n,j.b.a-a.d.a,m-n);r=new J6c(a.d.a,n,h,m-n);iYb(j,new f7c(f.c+f.b,f.d));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 2:f=new J6c(j.a.a,n,a.c.a-j.a.a,m-n);r=new J6c(a.c.a-h,n,h,m-n);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c,f.d+f.a));break;case 1:f=new J6c(n,a.d.b,m-n,j.b.b-a.d.b);r=new J6c(n,a.d.b,m-n,h);iYb(j,new f7c(f.c,f.d+f.a));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 3:f=new J6c(n,j.a.b,m-n,a.c.b-j.a.b);r=new J6c(n,a.c.b-h,m-n,h);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c+f.b,f.d));}if(f){l=new vYb;l.d=s;l.b=f;l.c=r;l.a=Dx(BD(Qc(i,cYb(s)),21));g.c[g.c.length]=l}}Gkb(c.b,g);c.d=BWb(JWb(j));return c} +function pMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(eMc(),cMc)?Qje:Pje;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==cMc&&e>0||c.o==dMc&&e<f-1){i=null;j=null;c.o==dMc?(i=BD(Ikb(g.c.a,e+1),10)):(i=BD(Ikb(g.c.a,e-1),10));j=c.g[i.p];pMc(a,j,c);p=a.e.bg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=jBc(a.d,g,i);if(c.o==dMc){d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Edb(ED(vNb(a.a,(Nyc(),vyc))));n=nMc(a,c.j[b.p]);k=nMc(a,c.j[j.p]);if(c.o==dMc){m=Edb(c.p[b.p])+Edb(c.d[g.p])+g.o.b+g.d.a+o-(Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d);tMc(n,k,m)}else{m=Edb(c.p[b.p])+Edb(c.d[g.p])-g.d.d-Edb(c.p[j.p])-Edb(c.d[i.p])-i.o.b-i.d.a-o;tMc(n,k,m)}}}else{p=a.e.bg(p,b,g)}g=c.a[g.p]}while(g!=b);SMc(a.e,b)} +function _qd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Hp;u=new Hp;k=Ypd(t,Nte);d=new ord(a,c,s,u);qqd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=BD(C.Pb(),202);e=BD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=BD(oo(a.d,o),202);if(v){h=(!B.e&&(B.e=new y5d(A2,B,10,9)),B.e);wtd(h,v)}else{g=_pd(t,Vte);m=_te+o+aue+g;n=m+$te;throw vbb(new cqd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=BD(F.Pb(),202);f=BD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=BD(oo(a.d,q),202);if(v){l=(!D.g&&(D.g=new y5d(A2,D,9,10)),D.g);wtd(l,v)}else{g=_pd(t,Vte);m=_te+q+aue+g;n=m+$te;throw vbb(new cqd(n))}}}!c.b&&(c.b=new y5d(z2,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new y5d(z2,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new cUd(A2,c,6,6)),c.a).i==1){G=BD(qud((!c.a&&(c.a=new cUd(A2,c,6,6)),c.a),0),202);if(!dmd(G)&&!emd(G)){kmd(G,BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));lmd(G,BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82))}}} +function qJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=Ohe;k=Ohe;for(o=new olb(s.e);o.a<o.c.c.length;){m=BD(mlb(o),10);g=!m.c?-1:Jkb(m.c.a,m,0);if(g>0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=BD(Ikb(m.c.a,g+1),10);B=jBc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=Ohe;f=false;e=BD(Ikb(s.e,0),10);for(D=new olb(e.j);D.a<D.c.c.length;){C=BD(mlb(D),11);p=e.n.b+C.n.b+C.a.b;for(d=new olb(C.e);d.a<d.c.c.length;){c=BD(mlb(d),17);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=BD(Ikb(s.e,s.e.c.length-1),10);for(A=new olb(h.j);A.a<A.c.c.length;){w=BD(mlb(A),11);p=h.n.b+w.n.b+w.a.b;for(d=new olb(w.g);d.a<d.c.c.length;){c=BD(mlb(d),17);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new olb(s.e);n.a<n.c.c.length;){m=BD(mlb(n),10);m.n.b+=i}}}} +function ync(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.e,b)){if(Rqb(BD(Ohb(a.e,b),53),c)){return -1}}else{Rhb(a.e,b,new Tqb)}if(Mhb(a.e,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return 1}}else{Rhb(a.e,c,new Tqb)}if(a.c==(tAc(),sAc)||!wNb(b,(wtc(),Zsc))||!wNb(c,(wtc(),Zsc))){i=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Hnc)),new Jnc)),11);k=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(c.j,16)),new Lnc)),new Nnc)),11);if(!!i&&!!k){h=i.i;j=k.i;if(!!h&&h==j){for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(l==i){Anc(a,c,b);return -1}else if(l==k){Anc(a,b,c);return 1}}return beb(znc(a,b),znc(a,c))}for(o=a.d,p=0,q=o.length;p<q;++p){n=o[p];if(n==h){Anc(a,c,b);return -1}else if(n==j){Anc(a,b,c);return 1}}}if(!wNb(b,(wtc(),Zsc))||!wNb(c,Zsc)){e=znc(a,b);g=znc(a,c);e>g?Anc(a,b,c):Anc(a,c,b);return e<g?-1:e>g?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return d<f?-1:d>f?1:0} +function u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a<q.c.c.length;){p=BD(mlb(q),79);jkd(p,d9c,(Bcb(),true))}r2c(b,e,Udd(d,n));v2c(i);return k&&s?l:(mmb(),mmb(),jmb)}else{return mmb(),mmb(),jmb}} +function Z$b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new b0b(i);__b(k,(j0b(),e0b));yNb(k,(wtc(),Isc),g);yNb(k,(Nyc(),Vxc),(dcd(),$bd));p=Edb(ED(a.We(Uxc)));yNb(k,Uxc,p);l=new H0b;F0b(l,k);if(!(b!=bcd&&b!=ccd)){d>=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k} +function AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(j0b(),i0b)){t.c[t.c.length]=l;continue}d=a.b[l.c.p][l.p];if(l.k==e0b){d.b=1;BD(vNb(l,(wtc(),$sc)),11).j==(Ucd(),zcd)&&(u+=d.a)}else{C=V_b(l,(Ucd(),Tcd));C.dc()||!Lq(C,new NGc)?(d.c=1):(e=V_b(l,zcd),(e.dc()||!Lq(e,new JGc))&&(v+=d.a))}for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}r=pl(OC(GC(KI,1),Uhe,20,0,[V_b(l,(Ucd(),Acd)),V_b(l,Rcd)]));for(A=new Sr(new xl(r.a.length,r.a));Qr(A);){w=BD(Rr(A),11);s=BD(vNb(w,(wtc(),gtc)),10);if(s){v+=d.c;u+=d.b;zGc(a,d,s)}}}for(o=new olb(t);o.a<o.c.c.length;){l=BD(mlb(o),10);d=a.b[l.c.p][l.p];for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}}t.c=KC(SI,Uhe,1,0,5,1)}b=v+u;q=b==0?Pje:(v-u)/b;return q>=c} +function ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)} +function f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);g5b(o.n,s-o.o.a);h5b(o.f);d5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&g5b(BD(vNb(o,ayc),8),s-o.o.a);switch(BD(vNb(o,mwc),248).g){case 1:yNb(o,mwc,(F7c(),D7c));break;case 2:yNb(o,mwc,(F7c(),C7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);g5b(t.n,r.a-t.o.a);g5b(t.a,t.o.a);G0b(t,Z4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.a=s-c.a}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.a=s-h.a}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);g5b(k.n,s-k.o.a)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);g5b(k.n,t.o.a-k.o.a)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),Z4b(BD(vNb(o,Hsc),61)));c5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);d5b(k);g5b(k.n,r.a-k.o.a)}}} +function i5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);j5b(o.n,s-o.o.b);k5b(o.f);e5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&j5b(BD(vNb(o,ayc),8),s-o.o.b);switch(BD(vNb(o,mwc),248).g){case 3:yNb(o,mwc,(F7c(),A7c));break;case 4:yNb(o,mwc,(F7c(),E7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);j5b(t.n,r.b-t.o.b);j5b(t.a,t.o.b);G0b(t,$4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.b=s-c.b}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.b=s-h.b}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);j5b(k.n,s-k.o.b)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);j5b(k.n,t.o.b-k.o.b)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),$4b(BD(vNb(o,Hsc),61)));b5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);e5b(k);j5b(k.n,r.b-k.o.b)}}} +function tZc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;l=false;j=a+1;k=(tCb(a,b.c.length),BD(b.c[a],200));g=k.a;h=null;for(f=0;f<k.a.c.length;f++){e=(tCb(f,g.c.length),BD(g.c[f],187));if(e.c){continue}if(e.b.c.length==0){Zfb();v$c(k,e);--f;l=true;continue}if(!e.k){!!h&&a$c(h);h=new b$c(!h?0:h.e+h.d+d,k.f,d);OZc(e,h.e+h.d,k.f);Ekb(k.d,h);WZc(h,e);e.k=true}i=null;i=(n=null,f<k.a.c.length-1?(n=BD(Ikb(k.a,f+1),187)):j<b.c.length&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length!=0&&(n=BD(Ikb((tCb(j,b.c.length),BD(b.c[j],200)).a,0),187)),n);m=false;!!i&&(m=!pb(i.j,k));if(i){if(i.b.c.length==0){v$c(k,i);break}else{KZc(e,c-e.s);a$c(e.q);l=l|sZc(k,e,i,c,d)}if(i.b.c.length==0){v$c((tCb(j,b.c.length),BD(b.c[j],200)),i);i=null;while(b.c.length>j&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l} +function fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),157);!!i.c&&zfd(i.c);p=$wnd.Math.max(p,red(i));D+=red(i)*qed(i)}q=D/a.b.c.length;C=_dd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;k=new Bib(a.b,0);o=null;h=new Rkb;while(k.b<k.d.gc()){i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));G=red(i);m=qed(i);if(H+G>p){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Bib(a.b,0);Fsb(B,meb(a.b.c.length));A=Jsb(B,0);s=BD(Xsb(A),19).a;Fsb(w,n);v=Jsb(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Edb(ED(Xsb(v)));s=BD(Xsb(A),19).a}i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));sed(i,u);if(k.b==s){r=l-H-c.c;t=red(i);ted(i,r);ved(i,(r-t)/2,0)}H+=red(i)+b}}return new f7c(l,F)} +function pde(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Vl();case 13:return a.Wl();case 23:return a.Nl();case 22:return a.Sl();case 18:return a.Pl();case 8:nde(a);f=(wfe(),efe);break;case 9:return a.vl(true);case 19:return a.wl();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.ul(a.a);nde(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.tl();c<Tje?(f=(wfe(),wfe(),++vfe,new ige(0,c))):(f=Ffe(Tee(c)))}break;case 99:return a.Fl();case 67:return a.Al();case 105:return a.Il();case 73:return a.Bl();case 103:return a.Gl();case 88:return a.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.xl();case 80:case 112:f=tde(a,a.a);if(!f)throw vbb(new mde(tvd((h0d(),Iue))));break;default:f=zfe(a.a);}nde(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw vbb(new mde(tvd((h0d(),Hue))));f=zfe(a.a);d=a.a;nde(a);if((d&64512)==Uje&&a.c==0&&(a.a&64512)==56320){e=KC(TD,$ie,25,2,15,1);e[0]=d&aje;e[1]=a.a&aje;f=Efe(Ffe(zfb(e,0,e.length)),0);nde(a)}break;default:throw vbb(new mde(tvd((h0d(),Hue))));}return f} +function e7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;e=Ohe;f=Ohe;g=Ohe;if(c){e=a.f.a;for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.g);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){k=BD(Hsb(h.a),8);if(k.a<e){f=e-k.a;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=k.a}if(k.a<=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.e);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){m=BD(Isb(h.a),8);if(m.a>e){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),17);if(c){j=BD(Lsb(h.a),8);q=h.a.b==0?A0b(h.d):BD(Hsb(h.a),8);q.b>=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o="An edge must have a source node (edge id: '"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s="An edge must have a target node (edge id: '"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.a<m.c.c.length;){l=BD(mlb(m),29);for(o=new olb(l.a);o.a<o.c.c.length;){n=BD(mlb(o),10);e=BD(Ohb(a.f,n),57);for(i=new Sr(ur(U_b(n).a.Kc(),new Sq));Qr(i);){g=BD(Rr(i),17);d=Jsb(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=BD(Xsb(d),8);c=null;if(g.c.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;p.c[p.c.length]=q}if(g.c.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;p.c[p.c.length]=q}while(d.b!=d.d.c){c=BD(Xsb(d),8);if(!ADb(b.b,c.b)){k=new hic(b,c,null,g);p.c[p.c.length]=k;if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} +function WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)} +function lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a<h.c.c.length;){f=BD(mlb(h),29);for(t=new olb(f.a);t.a<t.c.c.length;){s=BD(mlb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(YLc(),WLc)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));for(g=i.Kc();g.Ob();){f=BD(g.Pb(),29);n=-1;m=f.a;if(b.o==(eMc(),dMc)){n=Ohe;m=JD(m,152)?km(BD(m,152)):JD(m,131)?BD(m,131).a:JD(m,54)?new ov(m):new dv(m)}for(v=m.Kc();v.Ob();){u=BD(v.Pb(),10);l=null;b.c==WLc?(l=BD(Ikb(a.b.f,u.p),15)):(l=BD(Ikb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[q.p]}}}}}}}} +function Thd(){Thd=ccb;Hhd();Shd=Ghd.a;BD(qud(ZKd(Ghd.a),0),18);Mhd=Ghd.f;BD(qud(ZKd(Ghd.f),0),18);BD(qud(ZKd(Ghd.f),1),34);Rhd=Ghd.n;BD(qud(ZKd(Ghd.n),0),34);BD(qud(ZKd(Ghd.n),1),34);BD(qud(ZKd(Ghd.n),2),34);BD(qud(ZKd(Ghd.n),3),34);Nhd=Ghd.g;BD(qud(ZKd(Ghd.g),0),18);BD(qud(ZKd(Ghd.g),1),34);Jhd=Ghd.c;BD(qud(ZKd(Ghd.c),0),18);BD(qud(ZKd(Ghd.c),1),18);Ohd=Ghd.i;BD(qud(ZKd(Ghd.i),0),18);BD(qud(ZKd(Ghd.i),1),18);BD(qud(ZKd(Ghd.i),2),18);BD(qud(ZKd(Ghd.i),3),18);BD(qud(ZKd(Ghd.i),4),34);Phd=Ghd.j;BD(qud(ZKd(Ghd.j),0),18);Khd=Ghd.d;BD(qud(ZKd(Ghd.d),0),18);BD(qud(ZKd(Ghd.d),1),18);BD(qud(ZKd(Ghd.d),2),18);BD(qud(ZKd(Ghd.d),3),18);BD(qud(ZKd(Ghd.d),4),34);BD(qud(ZKd(Ghd.d),5),34);BD(qud(ZKd(Ghd.d),6),34);BD(qud(ZKd(Ghd.d),7),34);Ihd=Ghd.b;BD(qud(ZKd(Ghd.b),0),34);BD(qud(ZKd(Ghd.b),1),34);Lhd=Ghd.e;BD(qud(ZKd(Ghd.e),0),34);BD(qud(ZKd(Ghd.e),1),34);BD(qud(ZKd(Ghd.e),2),34);BD(qud(ZKd(Ghd.e),3),34);BD(qud(ZKd(Ghd.e),4),18);BD(qud(ZKd(Ghd.e),5),18);BD(qud(ZKd(Ghd.e),6),18);BD(qud(ZKd(Ghd.e),7),18);BD(qud(ZKd(Ghd.e),8),18);BD(qud(ZKd(Ghd.e),9),18);BD(qud(ZKd(Ghd.e),10),34);Qhd=Ghd.k;BD(qud(ZKd(Ghd.k),0),34);BD(qud(ZKd(Ghd.k),1),34)} +function wQc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Psb;w=new Psb;q=-1;for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),128);g.s=q--;k=0;t=0;for(f=new olb(g.t);f.a<f.c.c.length;){d=BD(mlb(f),268);t+=d.c}for(e=new olb(g.i);e.a<e.c.c.length;){d=BD(mlb(e),268);k+=d.c}g.n=k;g.u=t;t==0?(Gsb(w,g,w.c.b,w.c),true):k==0&&(Gsb(C,g,C.c.b,C.c),true)}F=Gx(a);l=a.c.length;p=l+1;r=l-1;n=new Rkb;while(F.a.gc()!=0){while(w.b!=0){v=(sCb(w.b!=0),BD(Nsb(w,w.a.a),128));F.a.Bc(v)!=null;v.s=r--;AQc(v,C,w)}while(C.b!=0){A=(sCb(C.b!=0),BD(Nsb(C,C.a.a),128));F.a.Bc(A)!=null;A.s=p++;AQc(A,C,w)}o=Rie;for(j=F.a.ec().Kc();j.Ob();){g=BD(j.Pb(),128);s=g.u-g.n;if(s>=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),128);g.s<l&&(g.s+=u)}for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),128);c=new Bib(A.t,0);while(c.b<c.d.gc()){d=(sCb(c.b<c.d.gc()),BD(c.d.Xb(c.c=c.b++),268));D=d.b;if(A.s>D.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}} +function qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=bfb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f} +function $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a<h.c.c.length;){f=BD(mlb(h),17);if(f.c.i==f.d.i){if(v.j==f.d.j){B.c[B.c.length]=f;continue}else if(v.j==(Ucd(),Acd)&&f.d.j==Rcd){q.c[q.c.length]=f;continue}}}}for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),17);_bc(a,f,c,d,(Ucd(),zcd))}for(g=new olb(B);g.a<g.c.c.length;){f=BD(mlb(g),17);C=new b0b(a);__b(C,(j0b(),i0b));yNb(C,(Nyc(),Vxc),(dcd(),$bd));yNb(C,(wtc(),$sc),f);D=new H0b;yNb(D,$sc,f.d);G0b(D,(Ucd(),Tcd));F0b(D,C);F=new H0b;yNb(F,$sc,f.c);G0b(F,zcd);F0b(F,C);yNb(f.c,gtc,C);yNb(f.d,gtc,C);QZb(f,null);RZb(f,null);c.c[c.c.length]=C;yNb(C,ysc,meb(2))}for(w=Jsb(b,0);w.b!=w.d.c;){v=BD(Xsb(w),11);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a<o.c.c.length;){n=BD(mlb(o),11);Ekb(e,Zbc(a,n,null,c))}for(t=new olb(u);t.a<t.c.c.length;){s=BD(mlb(t),11);Ekb(e,Zbc(a,null,s,c))}for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),11);Ekb(e,Zbc(a,k,k,c))}} +function NCb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new f7c(b.a-s.a,b.b-s.b);j=new f7c(s.a-50,s.b-m.a-50);k=new f7c(s.a-50,b.b+m.a+50);l=new f7c(b.a+m.b/2+50,s.b+m.b/2);n=new eDb(j,k,l);w=new Tqb;f=new Rkb;c=new Rkb;w.a.zc(n,w);for(D=new olb(a);D.a<D.c.c.length;){C=BD(mlb(D),8);f.c=KC(SI,Uhe,1,0,5,1);for(v=w.a.ec().Kc();v.Ob();){t=BD(v.Pb(),308);d=t.d;S6c(d,t.a);Jy(S6c(t.d,C),S6c(t.d,t.a))<0&&(f.c[f.c.length]=t,true)}c.c=KC(SI,Uhe,1,0,5,1);for(u=new olb(f);u.a<u.c.c.length;){t=BD(mlb(u),308);for(q=new olb(t.e);q.a<q.c.c.length;){o=BD(mlb(q),168);g=true;for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),308);h!=t&&(wtb(o,Ikb(h.e,0))||wtb(o,Ikb(h.e,1))||wtb(o,Ikb(h.e,2)))&&(g=false)}g&&(c.c[c.c.length]=o,true)}}Ve(w,f);reb(w,new OCb);for(p=new olb(c);p.a<p.c.c.length;){o=BD(mlb(p),168);Qqb(w,new eDb(C,o.a,o.b))}}r=new Tqb;reb(w,new QCb(r));e=r.a.ec().Kc();while(e.Ob()){o=BD(e.Pb(),168);(dDb(n,o.a)||dDb(n,o.b))&&e.Qb()}reb(r,new SCb);return r} +function _Tb(a){var b,c,d,e,f;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(WTb);e=BD(vNb(a,(Nyc(),axc)),334);e==(hbd(),ebd)&&d3c(b,XTb);Ccb(DD(vNb(a,$wc)))?e3c(b,(qUb(),lUb),(S8b(),I8b)):e3c(b,(qUb(),nUb),(S8b(),I8b));vNb(a,(g6c(),f6c))!=null&&d3c(b,YTb);(Ccb(DD(vNb(a,hxc)))||Ccb(DD(vNb(a,_wc))))&&c3c(b,(qUb(),pUb),(S8b(),W7b));switch(BD(vNb(a,Lwc),103).g){case 2:case 3:case 4:c3c(e3c(b,(qUb(),lUb),(S8b(),Y7b)),pUb,X7b);}c.Hc((Orc(),Frc))&&c3c(e3c(e3c(b,(qUb(),lUb),(S8b(),V7b)),oUb,T7b),pUb,U7b);PD(vNb(a,rxc))!==PD((kAc(),iAc))&&e3c(b,(qUb(),nUb),(S8b(),A8b));if(c.Hc(Mrc)){e3c(b,(qUb(),lUb),(S8b(),G8b));e3c(b,mUb,E8b);e3c(b,nUb,F8b)}PD(vNb(a,swc))!==PD((yrc(),wrc))&&PD(vNb(a,Swc))!==PD((Aad(),xad))&&c3c(b,(qUb(),pUb),(S8b(),j8b));Ccb(DD(vNb(a,cxc)))&&e3c(b,(qUb(),nUb),(S8b(),i8b));Ccb(DD(vNb(a,Hwc)))&&e3c(b,(qUb(),nUb),(S8b(),O8b));if(cUb(a)){PD(vNb(a,axc))===PD(ebd)?(d=BD(vNb(a,Cwc),292)):(d=BD(vNb(a,Dwc),292));f=d==(Xrc(),Vrc)?(S8b(),D8b):(S8b(),R8b);e3c(b,(qUb(),oUb),f)}switch(BD(vNb(a,Kyc),377).g){case 1:e3c(b,(qUb(),oUb),(S8b(),P8b));break;case 2:c3c(e3c(e3c(b,(qUb(),nUb),(S8b(),P7b)),oUb,Q7b),pUb,R7b);}PD(vNb(a,ywc))!==PD((tAc(),rAc))&&e3c(b,(qUb(),nUb),(S8b(),Q8b));return b} +function mZc(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Kre),'ELK Rectangle Packing'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces.'),new pZc)));p4c(a,Kre,_le,1.3);p4c(a,Kre,Jre,Ksd(VYc));p4c(a,Kre,ame,gZc);p4c(a,Kre,wme,15);p4c(a,Kre,lqe,Ksd(SYc));p4c(a,Kre,Fme,Ksd(_Yc));p4c(a,Kre,Tme,Ksd(aZc));p4c(a,Kre,Eme,Ksd(bZc));p4c(a,Kre,Gme,Ksd($Yc));p4c(a,Kre,Dme,Ksd(cZc));p4c(a,Kre,Hme,Ksd(hZc));p4c(a,Kre,Bre,Ksd(eZc));p4c(a,Kre,Cre,Ksd(ZYc));p4c(a,Kre,Fre,Ksd(dZc));p4c(a,Kre,Gre,Ksd(iZc));p4c(a,Kre,Hre,Ksd(WYc));p4c(a,Kre,Ame,Ksd(XYc));p4c(a,Kre,xqe,Ksd(YYc));p4c(a,Kre,Ere,Ksd(UYc));p4c(a,Kre,Dre,Ksd(TYc));p4c(a,Kre,Ire,Ksd(kZc))} +function Wmd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}if(JD(c,457)){r=_Pd(BD(c,671),d);if(!r){throw vbb(new Wdb(vte+d+"' is not a valid enumerator of '"+c.ne()+"'"))}return r}switch(o1d((O6d(),M6d),c).cl()){case 2:{d=Qge(d,false);break}case 3:{d=Qge(d,true);break}}e=o1d(M6d,c).$k();if(e){return e.Aj().Nh().Kh(e,d)}n=o1d(M6d,c).al();if(n){r=new Rkb;for(k=Zmd(d),l=0,m=k.length;l<m;++l){j=k[l];Ekb(r,n.Aj().Nh().Kh(n,j))}return r}q=o1d(M6d,c).bl();if(!q.dc()){for(p=q.Kc();p.Ob();){o=BD(p.Pb(),148);try{r=o.Aj().Nh().Kh(o,d);if(r!=null){return r}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' does not match any member types of the union datatype '"+c.ne()+"'"))}BD(c,834).Fj();f=r6d(c.Bj());if(!f)return null;if(f==yI){h=0;try{h=Icb(d,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){g=rfb(d);h=g[0]}else throw vbb(a)}return bdb(h)}if(f==$J){for(i=0;i<Pmd.length;++i){try{return DQd(Pmd[i],d)}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw vbb(new Wdb(vte+d+"' is invalid. "))} +function ngb(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new Vfb;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43||(BCb(g,b.length),b.charCodeAt(g)==45))){throw vbb(new Oeb(Oje+b+'"'))}}while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=46)&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g);if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g)}else{a.e=0}if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==101||(BCb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BCb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=b.substr(c,f-c);a.e=a.e-Icb(h,Rie,Ohe);if(a.e!=QD(a.e)){throw vbb(new Oeb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(kgb==null&&(kgb=new RegExp('^[+-]?\\d*$','i')),kgb.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw vbb(new Oeb(Oje+b+'"'))}a.a=ugb(a.f)}else{ogb(a,new Ygb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=bfb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} +function xXb(){xXb=ccb;wXb=new Hp;Rc(wXb,(Ucd(),Fcd),Jcd);Rc(wXb,Qcd,Jcd);Rc(wXb,Qcd,Mcd);Rc(wXb,Bcd,Icd);Rc(wXb,Bcd,Jcd);Rc(wXb,Gcd,Jcd);Rc(wXb,Gcd,Kcd);Rc(wXb,Ocd,Dcd);Rc(wXb,Ocd,Jcd);Rc(wXb,Lcd,Ecd);Rc(wXb,Lcd,Jcd);Rc(wXb,Lcd,Kcd);Rc(wXb,Lcd,Dcd);Rc(wXb,Ecd,Lcd);Rc(wXb,Ecd,Mcd);Rc(wXb,Ecd,Icd);Rc(wXb,Ecd,Jcd);Rc(wXb,Ncd,Ncd);Rc(wXb,Ncd,Kcd);Rc(wXb,Ncd,Mcd);Rc(wXb,Hcd,Hcd);Rc(wXb,Hcd,Kcd);Rc(wXb,Hcd,Icd);Rc(wXb,Pcd,Pcd);Rc(wXb,Pcd,Dcd);Rc(wXb,Pcd,Mcd);Rc(wXb,Ccd,Ccd);Rc(wXb,Ccd,Dcd);Rc(wXb,Ccd,Icd);Rc(wXb,Kcd,Gcd);Rc(wXb,Kcd,Lcd);Rc(wXb,Kcd,Ncd);Rc(wXb,Kcd,Hcd);Rc(wXb,Kcd,Jcd);Rc(wXb,Kcd,Kcd);Rc(wXb,Kcd,Mcd);Rc(wXb,Kcd,Icd);Rc(wXb,Dcd,Ocd);Rc(wXb,Dcd,Lcd);Rc(wXb,Dcd,Pcd);Rc(wXb,Dcd,Ccd);Rc(wXb,Dcd,Dcd);Rc(wXb,Dcd,Mcd);Rc(wXb,Dcd,Icd);Rc(wXb,Dcd,Jcd);Rc(wXb,Mcd,Qcd);Rc(wXb,Mcd,Ecd);Rc(wXb,Mcd,Ncd);Rc(wXb,Mcd,Pcd);Rc(wXb,Mcd,Kcd);Rc(wXb,Mcd,Dcd);Rc(wXb,Mcd,Mcd);Rc(wXb,Mcd,Jcd);Rc(wXb,Icd,Bcd);Rc(wXb,Icd,Ecd);Rc(wXb,Icd,Hcd);Rc(wXb,Icd,Ccd);Rc(wXb,Icd,Kcd);Rc(wXb,Icd,Dcd);Rc(wXb,Icd,Icd);Rc(wXb,Icd,Jcd);Rc(wXb,Jcd,Fcd);Rc(wXb,Jcd,Qcd);Rc(wXb,Jcd,Bcd);Rc(wXb,Jcd,Gcd);Rc(wXb,Jcd,Ocd);Rc(wXb,Jcd,Lcd);Rc(wXb,Jcd,Ecd);Rc(wXb,Jcd,Kcd);Rc(wXb,Jcd,Dcd);Rc(wXb,Jcd,Mcd);Rc(wXb,Jcd,Icd);Rc(wXb,Jcd,Jcd)} +function YXb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new f7c(Pje,Pje);a.c=new f7c(Qje,Qje);for(m=b.Kc();m.Ob();){k=BD(m.Pb(),37);for(t=new olb(k.a);t.a<t.c.c.length;){s=BD(mlb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new nYb;for(l=b.Kc();l.Ob();){k=BD(l.Pb(),37);d=fYb(a,k);Ekb(h.a,d);d.a=d.a|!BD(vNb(d.c,(wtc(),Esc)),21).dc()}a.b=(LUb(),B=new VUb,B.f=new CUb(c),B.b=BUb(B.f,h),B);PUb((o=a.b,new Zdd,o));a.e=new d7c;a.a=a.b.f.e;for(g=new olb(h.a);g.a<g.c.c.length;){e=BD(mlb(g),841);u=QUb(a.b,e);g_b(e.c,u.a,u.b);for(q=new olb(e.c.a);q.a<q.c.c.length;){p=BD(mlb(q),10);if(p.k==(j0b(),e0b)){r=aYb(a,p.n,BD(vNb(p,(wtc(),Hsc)),61));P6c(X6c(p.n),r)}}}for(f=new olb(h.a);f.a<f.c.c.length;){e=BD(mlb(f),841);for(j=new olb(lYb(e));j.a<j.c.c.length;){i=BD(mlb(j),17);A=new t7c(i.a);St(A,0,A0b(i.c));Dsb(A,A0b(i.d));n=null;for(w=Jsb(A,0);w.b!=w.d.c;){v=BD(Xsb(w),8);if(!n){n=v;continue}if(Ky(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(Ky(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}V6c(a.e);P6c(a.a,a.e)} +function wZd(a){Bnd(a.b,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentTransient']));Bnd(a.a,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedSourceURI']));Bnd(a.o,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));Bnd(a.p,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));Bnd(a.v,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));Bnd(a.R,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedName']));Bnd(a.T,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));Bnd(a.U,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));Bnd(a.W,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));Bnd(a.bb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidDefaultValueLiteral']));Bnd(a.eb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));Bnd(a.H,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentType ConsistentBounds ConsistentArguments']))} +function B4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new s7c;h=c?c:BD(b.Xb(0),17);o=h.c;hQc();m=o.i.k;if(!(m==(j0b(),h0b)||m==i0b||m==e0b||m==d0b)){throw vbb(new Wdb('The target node of the edge must be a normal node or a northSouthPort.'))}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])));if((Ucd(),Lcd).Hc(o.j)){q=Edb(ED(vNb(o,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a,q);Gsb(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=BD(i.Pb(),17);f=g.a;if(f.b!=0){if(d){j=Y6c(P6c(k,(sCb(f.b!=0),BD(f.a.a.c,8))),0.5);Gsb(e,j,e.c.b,e.c);d=false}else{d=true}k=R6c((sCb(f.b!=0),BD(f.c.b.c,8)));ye(e,f);Osb(f)}}p=h.d;if(Lcd.Hc(p.j)){q=Edb(ED(vNb(p,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])).a,q);Gsb(e,l,e.c.b,e.c)}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])));a.d==(tBc(),qBc)&&(r=(sCb(e.b!=0),BD(e.a.a.c,8)),s=BD(Ut(e,1),8),t=new e7c(bRc(o.j)),t.a*=5,t.b*=5,u=c7c(new f7c(s.a,s.b),r),v=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(v,r),w=Jsb(e,1),Vsb(w,v),A=(sCb(e.b!=0),BD(e.c.b.c,8)),B=BD(Ut(e,e.b-2),8),t=new e7c(bRc(p.j)),t.a*=5,t.b*=5,u=c7c(new f7c(B.a,B.b),A),C=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(C,A),St(e,e.b-1,C),undefined);n=new YPc(e);ye(h.a,UPc(n))} +function Kgd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);v=t.Dg();w=t.Eg();u=t.Cg()/2;p=t.Bg()/2;if(JD(t,186)){s=BD(t,118);v+=mpd(s).i;v+=mpd(s).i}v+=u;w+=p;F=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);H=F.Dg();I=F.Eg();G=F.Cg()/2;A=F.Bg()/2;if(JD(F,186)){D=BD(F,118);H+=mpd(D).i;H+=mpd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){h=(Fhd(),j=new rmd,j);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);omd(g,q);pmd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);hmd(g,B);imd(g,C);Uxd((!g.a&&(g.a=new xMd(y2,g,5)),g.a));f=Bub(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Cub(b,24)*lke*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}} +function Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc} +function shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a<s.c.c.length;){q=BD(mlb(s),65);o=BD(BD(Ohb(a.g,q.a),46).b,33).zg();o!=null&&dfb(o,t)&&(a.d.d=q)}}break;case 1:e=new f7c(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;O6c(e,a.c.i,a.c.j);f=Pje;for(r=new olb(a.d.i);r.a<r.c.c.length;){q=BD(mlb(r),65);j=S6c(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw vbb(new Wdb(Mre+(u.f!=null?u.f:''+u.g)));}return a.d} +function qfd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);k=new s7c;u=new Lqb;w=tfd(v);jrb(u.f,v,w);m=new Lqb;d=new Psb;for(o=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!b.d&&(b.d=new y5d(B2,b,8,5)),b.d),(!b.e&&(b.e=new y5d(B2,b,7,4)),b.e)])));Qr(o);){n=BD(Rr(o),79);if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}if(n!=a){q=BD(qud((!n.a&&(n.a=new cUd(A2,n,6,6)),n.a),0),202);Gsb(d,q,d.c.b,d.c);p=BD(Wd(irb(u.f,q)),12);if(!p){p=tfd(q);jrb(u.f,q,p)}l=c?c7c(new g7c(BD(Ikb(w,w.c.length-1),8)),BD(Ikb(p,p.c.length-1),8)):c7c(new g7c((tCb(0,w.c.length),BD(w.c[0],8))),(tCb(0,p.c.length),BD(p.c[0],8)));jrb(m.f,q,l)}}if(d.b!=0){r=BD(Ikb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=BD(Ikb(w,c?w.c.length-1-j:j),8);e=Jsb(d,0);while(e.b!=e.d.c){q=BD(Xsb(e),202);p=BD(Wd(irb(u.f,q)),12);if(p.c.length<=j){Zsb(e)}else{t=P6c(new g7c(BD(Ikb(p,c?p.c.length-1-j:j),8)),BD(Wd(irb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Gsb(k,s,k.c.b,k.c),true):j>1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k} +function $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a<r.c.c.length;){p=BD(mlb(r),10);p.p=j;for(C=new olb(p.j);C.a<C.c.c.length;){w=BD(mlb(C),11);for(h=new olb(w.e);h.a<h.c.c.length;){d=BD(mlb(h),17);if(d.c.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.a[j]+=G>0?G+1:1}for(g=new olb(w.g);g.a<g.c.c.length;){d=BD(mlb(g),17);if(d.d.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a<s.c.c.length;){p=BD(mlb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new olb(t);q.a<q.c.c.length;){p=BD(mlb(q),10);F=m_b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=k_b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)} +function sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=BD(a.Xb(j),8);o=tQb(e.a,e.b,p.a,p.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)))}o=tQb(r.a,r.b,e.a,e.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));c=new s7c;g=new Rkb;Dsb(c,(tCb(0,d.c.length),BD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tCb(k,d.c.length),BD(d.c[k],8));m=rQb((tCb(k-1,d.c.length),BD(d.c[k-1],8)),f,(tCb(k+1,d.c.length),BD(d.c[k+1],8)),(tCb(k+2,d.c.length),BD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Gsb(c,f,c.c.b,c.c),true):(Gsb(c,m,c.c.b,c.c),true)}Dsb(c,BD(Ikb(d,d.c.length-1),8));Ekb(g,(tCb(0,h.c.length),BD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tCb(l,h.c.length),BD(h.c[l],8));m=rQb((tCb(l-1,h.c.length),BD(h.c[l-1],8)),f,(tCb(l+1,h.c.length),BD(h.c[l+1],8)),(tCb(l+2,h.c.length),BD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(g.c[g.c.length]=f,true):(g.c[g.c.length]=m,true)}Ekb(g,BD(Ikb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c} +function aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i<a.length&&(BCb(i,a.length),a.charCodeAt(i)==58)){l=a.substr(h,i-h);h=i+1}c=l!=null&&hnb(GEd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw vbb(new Wdb('no archive separator'))}g=true;d=qfb(a,h,++i);h=i}else if(h>=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){i=UEd(a,h+1,CEd,DEd);k=a.substr(h+1,i-(h+1));if(k.length>0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){m=new Rkb;while(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){i=UEd(a,h,CEd,DEd);Ekb(m,a.substr(h,i-h));h=i;h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)&&(bFd(a,++h)||(m.c[m.c.length]='',true))}n=KC(ZI,nie,2,m.c.length,6,1);Qkb(m,n)}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==63)){i=gfb(a,35,++h);i==-1&&(i=a.length);j=a.substr(h,i-h);h=i}h<a.length&&(f=pfb(a,++h));iFd(g,l,d,e,n,j);return new NEd(g,l,d,e,b,n,j,f)} +function sJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new Rkb;for(o=new olb(b.b);o.a<o.c.c.length;){m=BD(mlb(o),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=-1;l=Rie;B=Rie;for(D=new olb(u.j);D.a<D.c.c.length;){C=BD(mlb(D),11);for(e=new olb(C.e);e.a<e.c.c.length;){c=BD(mlb(e),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;l=$wnd.Math.max(l,F)}for(d=new olb(C.g);d.a<d.c.c.length;){c=BD(mlb(d),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;B=$wnd.Math.max(B,F)}}yNb(u,hJc,meb(l));yNb(u,iJc,meb(B))}}r=0;for(n=new olb(b.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);if(u.p<0){H=new zJc;H.b=r++;oJc(a,u,H);I.c[I.c.length]=H}}}A=Pu(I.c.length);k=Pu(I.c.length);for(g=0;g<I.c.length;g++){Ekb(A,new Rkb);Ekb(k,meb(0))}mJc(b,I,A,k);J=BD(Qkb(I,KC(sY,Iqe,257,I.c.length,0,1)),840);w=BD(Qkb(A,KC(yK,eme,15,A.c.length,0,1)),192);j=KC(WD,oje,25,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tCb(h,k.c.length),BD(k.c[h],19)).a}s=0;t=new Rkb;for(i=0;i<J.length;i++){j[i]==0&&Ekb(t,J[i])}q=KC(WD,oje,25,J.length,15,1);while(t.c.length!=0){H=BD(Kkb(t,0),257);q[H.b]=s++;while(!w[H.b].dc()){K=BD(w[H.b].$c(0),257);--j[K.b];j[K.b]==0&&(t.c[t.c.length]=K,true)}}a.a=KC(sY,Iqe,257,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new olb(p.e);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=G}}return a.a} +function nde(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&bfb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&bfb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==Uje&&a.d<a.j){c=bfb(a.i,a.d);if((c&64512)==56320){a.a=Tje+(b-Uje<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d<a.j){b=bfb(a.i,a.d++);if(b==41)break}if(b!=41)throw vbb(new mde(tvd((h0d(),xue))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw vbb(new mde(tvd((h0d(),vue))));}break;case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d} +function P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b<n;b++){c=(tCb(b,o.c.length),BD(o.c[b],29));B=(tCb(b,k.c.length),BD(k.c[b],83));q=new Lqb;k.c[k.c.length]=q;D=(tCb(b,p.c.length),BD(p.c[b],15));s=new Rkb;p.c[p.c.length]=s;for(e=new olb(c.a);e.a<e.c.c.length;){d=BD(mlb(e),10);if(L5b(d)){w.c[w.c.length]=d;continue}for(j=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(j);){h=BD(Rr(j),17);F=h.c.i;if(!L5b(F)){continue}C=BD(B.xc(vNb(F,(wtc(),$sc))),10);if(!C){C=K5b(a,F);B.zc(vNb(F,$sc),C);D.Fc(C)}QZb(h,BD(Ikb(C.j,1),11))}for(i=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(i);){h=BD(Rr(i),17);G=h.d.i;if(!L5b(G)){continue}r=BD(Ohb(q,vNb(G,(wtc(),$sc))),10);if(!r){r=K5b(a,G);Rhb(q,vNb(G,$sc),r);s.c[s.c.length]=r}RZb(h,BD(Ikb(r.j,0),11))}}}for(l=0;l<p.c.length;l++){t=(tCb(l,p.c.length),BD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new H1b(a);wCb(0,o.c.length);aCb(o.c,0,m)}else if(l==k.c.length-1){m=new H1b(a);o.c[o.c.length]=m}else{m=(tCb(l-1,o.c.length),BD(o.c[l-1],29))}for(g=t.Kc();g.Ob();){f=BD(g.Pb(),10);$_b(f,m)}}for(v=new olb(w);v.a<v.c.c.length;){u=BD(mlb(v),10);$_b(u,null)}yNb(a,(wtc(),Fsc),w)} +function BCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Coffman-Graham Layering',1);if(b.a.c.length==0){Qdd(c);return}v=BD(vNb(b,(Nyc(),kxc)),19).a;i=0;g=0;for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p=i++;for(f=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);e.p=g++}}a.d=KC(sbb,dle,25,i,16,1);a.a=KC(sbb,dle,25,g,16,1);a.b=KC(WD,oje,25,i,15,1);a.e=KC(WD,oje,25,i,15,1);a.f=KC(WD,oje,25,i,15,1);Nc(a.c);CCc(a,b);o=new gub(new GCc(a));for(u=new olb(b.a);u.a<u.c.c.length;){s=BD(mlb(u),10);for(f=new Sr(ur(R_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zCb(cub(o,s)),true)}h=0;while(o.b.c.length!=0){s=BD(dub(o),10);a.f[s.p]=h++;for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,meb(a.f[s.p]));a.b[q.p]==0&&(zCb(cub(o,q)),true)}}n=new gub(new KCc(a));for(t=new olb(b.a);t.a<t.c.c.length;){s=BD(mlb(t),10);for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zCb(cub(n,s)),true)}k=new Rkb;d=yCc(b,k);while(n.b.c.length!=0){r=BD(dub(n),10);(d.a.c.length>=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} +function gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h} +function xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))} +function fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),135);s=0;o=Ohe;p=Ohe;m=Rie;n=Rie;for(r=Jsb(g.b,0);r.b!=r.d.c;){q=BD(Xsb(r),86);s+=BD(vNb(q,(JTc(),ETc)),19).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}yNb(g,(JTc(),ETc),meb(s));yNb(g,(mTc(),WSc),new f7c(o,p));yNb(g,VSc,new f7c(m,n))}mmb();Okb(a,new jRc);v=new SRc;tNb(v,(tCb(0,a.c.length),BD(a.c[0],94)));l=0;D=0;for(j=new olb(a);j.a<j.c.c.length;){g=BD(mlb(j),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Edb(ED(vNb(v,(JTc(),uTc)))));A=Edb(ED(vNb(v,HTc)));F=0;G=0;k=0;b=A;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));if(F+w.a>l){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.a<C.c.c.length;){B=BD(mlb(C),135);d=Ccb(DD(vNb(B,(Y9c(),y8c))));t=!B.q?(null,kmb):B.q;for(f=t.vc().Kc();f.Ob();){e=BD(f.Pb(),42);if(Mhb(u,e.cd())){if(PD(BD(e.cd(),146).wg())!==PD(e.dd())){if(d&&Mhb(c,e.cd())){Zfb();'Found different values for property '+BD(e.cd(),146).tg()+' in components.'}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd());d&&Rhb(c,BD(e.cd(),146),e.dd())}}}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd())}}}return v} +function MYb(){MYb=ccb;xXb();LYb=new Hp;Rc(LYb,(Ucd(),Gcd),Fcd);Rc(LYb,Qcd,Fcd);Rc(LYb,Hcd,Fcd);Rc(LYb,Ncd,Fcd);Rc(LYb,Mcd,Fcd);Rc(LYb,Kcd,Fcd);Rc(LYb,Ncd,Gcd);Rc(LYb,Fcd,Bcd);Rc(LYb,Gcd,Bcd);Rc(LYb,Qcd,Bcd);Rc(LYb,Hcd,Bcd);Rc(LYb,Lcd,Bcd);Rc(LYb,Ncd,Bcd);Rc(LYb,Mcd,Bcd);Rc(LYb,Kcd,Bcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Fcd,Ocd);Rc(LYb,Gcd,Ocd);Rc(LYb,Bcd,Ocd);Rc(LYb,Qcd,Ocd);Rc(LYb,Hcd,Ocd);Rc(LYb,Lcd,Ocd);Rc(LYb,Ncd,Ocd);Rc(LYb,Ecd,Ocd);Rc(LYb,Pcd,Ocd);Rc(LYb,Mcd,Ocd);Rc(LYb,Icd,Ocd);Rc(LYb,Kcd,Ocd);Rc(LYb,Gcd,Qcd);Rc(LYb,Hcd,Qcd);Rc(LYb,Ncd,Qcd);Rc(LYb,Kcd,Qcd);Rc(LYb,Gcd,Hcd);Rc(LYb,Qcd,Hcd);Rc(LYb,Ncd,Hcd);Rc(LYb,Hcd,Hcd);Rc(LYb,Mcd,Hcd);Rc(LYb,Fcd,Ccd);Rc(LYb,Gcd,Ccd);Rc(LYb,Bcd,Ccd);Rc(LYb,Ocd,Ccd);Rc(LYb,Qcd,Ccd);Rc(LYb,Hcd,Ccd);Rc(LYb,Lcd,Ccd);Rc(LYb,Ncd,Ccd);Rc(LYb,Pcd,Ccd);Rc(LYb,Ecd,Ccd);Rc(LYb,Kcd,Ccd);Rc(LYb,Mcd,Ccd);Rc(LYb,Jcd,Ccd);Rc(LYb,Fcd,Pcd);Rc(LYb,Gcd,Pcd);Rc(LYb,Bcd,Pcd);Rc(LYb,Qcd,Pcd);Rc(LYb,Hcd,Pcd);Rc(LYb,Lcd,Pcd);Rc(LYb,Ncd,Pcd);Rc(LYb,Ecd,Pcd);Rc(LYb,Kcd,Pcd);Rc(LYb,Icd,Pcd);Rc(LYb,Jcd,Pcd);Rc(LYb,Gcd,Ecd);Rc(LYb,Qcd,Ecd);Rc(LYb,Hcd,Ecd);Rc(LYb,Ncd,Ecd);Rc(LYb,Pcd,Ecd);Rc(LYb,Kcd,Ecd);Rc(LYb,Mcd,Ecd);Rc(LYb,Fcd,Dcd);Rc(LYb,Gcd,Dcd);Rc(LYb,Bcd,Dcd);Rc(LYb,Qcd,Dcd);Rc(LYb,Hcd,Dcd);Rc(LYb,Lcd,Dcd);Rc(LYb,Ncd,Dcd);Rc(LYb,Ecd,Dcd);Rc(LYb,Kcd,Dcd);Rc(LYb,Gcd,Mcd);Rc(LYb,Bcd,Mcd);Rc(LYb,Ocd,Mcd);Rc(LYb,Hcd,Mcd);Rc(LYb,Fcd,Icd);Rc(LYb,Gcd,Icd);Rc(LYb,Ocd,Icd);Rc(LYb,Qcd,Icd);Rc(LYb,Hcd,Icd);Rc(LYb,Lcd,Icd);Rc(LYb,Ncd,Icd);Rc(LYb,Ncd,Jcd);Rc(LYb,Hcd,Jcd);Rc(LYb,Ecd,Fcd);Rc(LYb,Ecd,Qcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Lcd,Fcd);Rc(LYb,Lcd,Gcd);Rc(LYb,Lcd,Ocd)} +function HVd(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new U5d(a.b,a.a,b,a.c);case 1:return new BMd(a.a,b,bLd(b.Tg(),a.c));case 43:return new N4d(a.a,b,bLd(b.Tg(),a.c));case 3:return new xMd(a.a,b,bLd(b.Tg(),a.c));case 45:return new K4d(a.a,b,bLd(b.Tg(),a.c));case 41:return new dId(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 50:return new c6d(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 5:return new Q4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 47:return new U4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 7:return new cUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 49:return new gUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 9:return new I4d(a.a,b,bLd(b.Tg(),a.c));case 11:return new G4d(a.a,b,bLd(b.Tg(),a.c));case 13:return new C4d(a.a,b,bLd(b.Tg(),a.c));case 15:return new k2d(a.a,b,bLd(b.Tg(),a.c));case 17:return new c5d(a.a,b,bLd(b.Tg(),a.c));case 19:return new _4d(a.a,b,bLd(b.Tg(),a.c));case 21:return new X4d(a.a,b,bLd(b.Tg(),a.c));case 23:return new pMd(a.a,b,bLd(b.Tg(),a.c));case 25:return new D5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 27:return new y5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 29:return new t5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 31:return new n5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 33:return new A5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 35:return new v5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 37:return new p5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 39:return new i5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 40:return new u3d(b,bLd(b.Tg(),a.c));default:throw vbb(new hz('Unknown feature style: '+a.e));}} +function BMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;Odd(c,'Brandes & Koepf node placement',1);a.a=b;a.c=KMc(b);d=BD(vNb(b,(Nyc(),zxc)),274);n=Ccb(DD(vNb(b,Axc)));a.d=d==(lrc(),irc)&&!n||d==frc;AMc(a,b);v=null;w=null;r=null;s=null;q=(Xj(4,Jie),new Skb(4));switch(BD(vNb(b,zxc),274).g){case 3:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));q.c[q.c.length]=r;break;case 1:s=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),WLc));q.c[q.c.length]=s;break;case 4:v=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),XLc));q.c[q.c.length]=v;break;case 2:w=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),XLc));q.c[q.c.length]=w;break;default:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));s=new ULc(b,a.c.d,dMc,WLc);v=new ULc(b,a.c.d,cMc,XLc);w=new ULc(b,a.c.d,dMc,XLc);q.c[q.c.length]=v;q.c[q.c.length]=w;q.c[q.c.length]=r;q.c[q.c.length]=s;}e=new mMc(b,a.c);for(h=new olb(q);h.a<h.c.c.length;){f=BD(mlb(h),180);lMc(e,f,a.b);kMc(f)}m=new rMc(b,a.c);for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),180);oMc(m,f)}if(c.n){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);Sdd(c,f+' size is '+SLc(f))}}l=null;if(a.d){k=yMc(a,q,a.c.d);xMc(b,k,c)&&(l=k)}if(!l){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);xMc(b,f,c)&&(!l||SLc(l)>SLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a<p.c.c.length;){o=BD(mlb(p),29);for(u=new olb(o.a);u.a<u.c.c.length;){t=BD(mlb(u),10);t.n.b=Edb(l.p[t.p])+Edb(l.d[t.p])}}if(c.n){Sdd(c,'Chosen node placement: '+l);Sdd(c,'Blocks: '+DMc(l));Sdd(c,'Classes: '+EMc(l,c));Sdd(c,'Marked edges: '+a.b)}for(g=new olb(q);g.a<g.c.c.length;){f=BD(mlb(g),180);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}IMc(a.c);a.b.a.$b();Qdd(c)} +function V1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;g=new Psb;v=BD(vNb(c,(Nyc(),Lwc)),103);o=0;ye(g,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(g.b!=0){j=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(j,xwc)))&&jkd(j,(wtc(),Zsc),meb(o++));q=!Ccb(DD(hkd(j,Jxc)));if(q){l=(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a).i!=0;n=S1b(j);m=PD(hkd(j,axc))===PD((hbd(),ebd));F=!ikd(j,(Y9c(),o8c))||dfb(GD(hkd(j,o8c)),sne);t=null;if(F&&m&&(l||n)){t=P1b(j);yNb(t,Lwc,v);wNb(t,hyc)&&Wyc(new ezc(Edb(ED(vNb(t,hyc)))),t);if(BD(hkd(j,Fxc),174).gc()!=0){k=t;MAb(new YAb(null,(!j.c&&(j.c=new cUd(F2,j,9,9)),new Kub(j.c,16))),new k2b(k));L1b(j,t)}}w=c;A=BD(Ohb(a.a,Xod(j)),10);!!A&&(w=A.e);s=$1b(a,j,w);if(t){s.e=t;t.e=s;ye(g,(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a))}}}o=0;Gsb(g,b,g.c.b,g.c);while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);for(i=new Fyd((!f.b&&(f.b=new cUd(B2,f,12,3)),f.b));i.e!=i.i.gc();){h=BD(Dyd(i),79);N1b(h);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&jkd(h,(wtc(),Zsc),meb(o++));C=atd(BD(qud((!h.b&&(h.b=new y5d(z2,h,4,7)),h.b),0),82));D=atd(BD(qud((!h.c&&(h.c=new y5d(z2,h,5,8)),h.c),0),82));if(Ccb(DD(hkd(h,Jxc)))||Ccb(DD(hkd(C,Jxc)))||Ccb(DD(hkd(D,Jxc)))){continue}p=Qld(h)&&Ccb(DD(hkd(C,fxc)))&&Ccb(DD(hkd(h,gxc)));u=f;p||ntd(D,C)?(u=C):ntd(C,D)&&(u=D);w=c;A=BD(Ohb(a.a,u),10);!!A&&(w=A.e);r=X1b(a,h,u,w);yNb(r,(wtc(),xsc),R1b(a,h,b,c))}m=PD(hkd(f,axc))===PD((hbd(),ebd));if(m){for(e=new Fyd((!f.a&&(f.a=new cUd(E2,f,10,11)),f.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);F=!ikd(d,(Y9c(),o8c))||dfb(GD(hkd(d,o8c)),sne);B=PD(hkd(d,axc))===PD(ebd);F&&B&&(Gsb(g,d,g.c.b,g.c),true)}}}} +function vA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-nje>=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true} +function X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p} +function yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)} +function Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true} +function wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')} +function jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc} +function S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)} +function KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);X=0;for(h=new olb(U.g);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);if(U.j==(Ucd(),Acd)){for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Bib(F.j,F.j.c.length);while(Y.b>0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new olb(F.j);fb.a<fb.c.c.length;){eb=BD(mlb(fb),11);for(h=new olb(eb.g);h.a<h.c.c.length;){g=BD(mlb(h),17);jb=g.d;if(F.c!=jb.i.c){db=BD(Wd(irb(W.f,eb)),467);ib=BD(Wd(irb(W.f,jb)),467);if(!db&&!ib){n=new NIc;o.a.zc(n,o);Ekb(n.a,g);Ekb(n.d,eb);jrb(W.f,eb,n);Ekb(n.d,jb);jrb(W.f,jb,n)}else if(!db){Ekb(ib.a,g);Ekb(ib.d,eb);jrb(W.f,eb,ib)}else if(!ib){Ekb(db.a,g);Ekb(db.d,jb);jrb(W.f,jb,db)}else if(db==ib){Ekb(db.a,g)}else{Ekb(db.a,g);for(T=new olb(ib.d);T.a<T.c.c.length;){S=BD(mlb(T),11);jrb(W.f,S,db)}Gkb(db.a,ib.a);Gkb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=BD(Ee(o,KC(oY,{3:1,4:1,5:1,1946:1},467,o.a.gc(),0,1)),1946);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new olb(j.d);V.a<V.c.c.length;){U=BD(mlb(V),11);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=KC(WD,oje,25,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new QIc(p[u],p[u].e,p[u].b,(UIc(),TIc));C[2*u+1]=new QIc(p[u],p[u].b,p[u].e,SIc)}Klb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=KC(nY,Uhe,362,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new QIc(p[w],p[w].f,p[w].c,(UIc(),TIc));ab[2*w+1]=new QIc(p[w],p[w].c,p[w].f,SIc)}Klb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} +function wfe(){wfe=ccb;ffe=new xfe(7);hfe=(++vfe,new ige(8,94));++vfe;new ige(8,64);ife=(++vfe,new ige(8,36));ofe=(++vfe,new ige(8,65));pfe=(++vfe,new ige(8,122));qfe=(++vfe,new ige(8,90));tfe=(++vfe,new ige(8,98));mfe=(++vfe,new ige(8,66));rfe=(++vfe,new ige(8,60));ufe=(++vfe,new ige(8,62));efe=new xfe(11);cfe=(++vfe,new $fe(4));Ufe(cfe,48,57);sfe=(++vfe,new $fe(4));Ufe(sfe,48,57);Ufe(sfe,65,90);Ufe(sfe,95,95);Ufe(sfe,97,122);nfe=(++vfe,new $fe(4));Ufe(nfe,9,9);Ufe(nfe,10,10);Ufe(nfe,12,12);Ufe(nfe,13,13);Ufe(nfe,32,32);jfe=_fe(cfe);lfe=_fe(sfe);kfe=_fe(nfe);Zee=new Lqb;$ee=new Lqb;_ee=OC(GC(ZI,1),nie,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);Yee=OC(GC(ZI,1),nie,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',uxe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);afe=OC(GC(WD,1),oje,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} +function qJb(){qJb=ccb;nJb=new tJb('OUT_T_L',0,(NHb(),LHb),(EIb(),BIb),(gHb(),dHb),dHb,OC(GC(LK,1),Uhe,21,0,[qqb((Hbd(),Dbd),OC(GC(B1,1),Kie,93,0,[Gbd,zbd]))]));mJb=new tJb('OUT_T_C',1,KHb,BIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));oJb=new tJb('OUT_T_R',2,MHb,BIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd]))]));eJb=new tJb('OUT_B_L',3,LHb,DIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd]))]));dJb=new tJb('OUT_B_C',4,KHb,DIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));fJb=new tJb('OUT_B_R',5,MHb,DIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd]))]));iJb=new tJb('OUT_L_T',6,MHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Gbd,Abd]))]));hJb=new tJb('OUT_L_C',7,MHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd,Abd]))]));gJb=new tJb('OUT_L_B',8,MHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Ebd,Abd]))]));lJb=new tJb('OUT_R_T',9,LHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Gbd,Abd]))]));kJb=new tJb('OUT_R_C',10,LHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd,Abd]))]));jJb=new tJb('OUT_R_B',11,LHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Ebd,Abd]))]));bJb=new tJb('IN_T_L',12,LHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd,Abd]))]));aJb=new tJb('IN_T_C',13,KHb,DIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));cJb=new tJb('IN_T_R',14,MHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd,Abd]))]));$Ib=new tJb('IN_C_L',15,LHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd,Abd]))]));ZIb=new tJb('IN_C_C',16,KHb,CIb,eHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd,Abd]))]));_Ib=new tJb('IN_C_R',17,MHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd,Abd]))]));XIb=new tJb('IN_B_L',18,LHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd,Abd]))]));WIb=new tJb('IN_B_C',19,KHb,BIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));YIb=new tJb('IN_B_R',20,MHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd,Abd]))]));pJb=new tJb(ole,21,null,null,null,null,OC(GC(LK,1),Uhe,21,0,[]))} +function jGd(){jGd=ccb;PFd=(NFd(),MFd).b;BD(qud(ZKd(MFd.b),0),34);BD(qud(ZKd(MFd.b),1),18);OFd=MFd.a;BD(qud(ZKd(MFd.a),0),34);BD(qud(ZKd(MFd.a),1),18);BD(qud(ZKd(MFd.a),2),18);BD(qud(ZKd(MFd.a),3),18);BD(qud(ZKd(MFd.a),4),18);QFd=MFd.o;BD(qud(ZKd(MFd.o),0),34);BD(qud(ZKd(MFd.o),1),34);SFd=BD(qud(ZKd(MFd.o),2),18);BD(qud(ZKd(MFd.o),3),18);BD(qud(ZKd(MFd.o),4),18);BD(qud(ZKd(MFd.o),5),18);BD(qud(ZKd(MFd.o),6),18);BD(qud(ZKd(MFd.o),7),18);BD(qud(ZKd(MFd.o),8),18);BD(qud(ZKd(MFd.o),9),18);BD(qud(ZKd(MFd.o),10),18);BD(qud(ZKd(MFd.o),11),18);BD(qud(ZKd(MFd.o),12),18);BD(qud(ZKd(MFd.o),13),18);BD(qud(ZKd(MFd.o),14),18);BD(qud(ZKd(MFd.o),15),18);BD(qud(WKd(MFd.o),0),59);BD(qud(WKd(MFd.o),1),59);BD(qud(WKd(MFd.o),2),59);BD(qud(WKd(MFd.o),3),59);BD(qud(WKd(MFd.o),4),59);BD(qud(WKd(MFd.o),5),59);BD(qud(WKd(MFd.o),6),59);BD(qud(WKd(MFd.o),7),59);BD(qud(WKd(MFd.o),8),59);BD(qud(WKd(MFd.o),9),59);RFd=MFd.p;BD(qud(ZKd(MFd.p),0),34);BD(qud(ZKd(MFd.p),1),34);BD(qud(ZKd(MFd.p),2),34);BD(qud(ZKd(MFd.p),3),34);BD(qud(ZKd(MFd.p),4),18);BD(qud(ZKd(MFd.p),5),18);BD(qud(WKd(MFd.p),0),59);BD(qud(WKd(MFd.p),1),59);TFd=MFd.q;BD(qud(ZKd(MFd.q),0),34);UFd=MFd.v;BD(qud(ZKd(MFd.v),0),18);BD(qud(WKd(MFd.v),0),59);BD(qud(WKd(MFd.v),1),59);BD(qud(WKd(MFd.v),2),59);VFd=MFd.w;BD(qud(ZKd(MFd.w),0),34);BD(qud(ZKd(MFd.w),1),34);BD(qud(ZKd(MFd.w),2),34);BD(qud(ZKd(MFd.w),3),18);WFd=MFd.B;BD(qud(ZKd(MFd.B),0),18);BD(qud(WKd(MFd.B),0),59);BD(qud(WKd(MFd.B),1),59);BD(qud(WKd(MFd.B),2),59);ZFd=MFd.Q;BD(qud(ZKd(MFd.Q),0),18);BD(qud(WKd(MFd.Q),0),59);$Fd=MFd.R;BD(qud(ZKd(MFd.R),0),34);_Fd=MFd.S;BD(qud(WKd(MFd.S),0),59);BD(qud(WKd(MFd.S),1),59);BD(qud(WKd(MFd.S),2),59);BD(qud(WKd(MFd.S),3),59);BD(qud(WKd(MFd.S),4),59);BD(qud(WKd(MFd.S),5),59);BD(qud(WKd(MFd.S),6),59);BD(qud(WKd(MFd.S),7),59);BD(qud(WKd(MFd.S),8),59);BD(qud(WKd(MFd.S),9),59);BD(qud(WKd(MFd.S),10),59);BD(qud(WKd(MFd.S),11),59);BD(qud(WKd(MFd.S),12),59);BD(qud(WKd(MFd.S),13),59);BD(qud(WKd(MFd.S),14),59);aGd=MFd.T;BD(qud(ZKd(MFd.T),0),18);BD(qud(ZKd(MFd.T),2),18);bGd=BD(qud(ZKd(MFd.T),3),18);BD(qud(ZKd(MFd.T),4),18);BD(qud(WKd(MFd.T),0),59);BD(qud(WKd(MFd.T),1),59);BD(qud(ZKd(MFd.T),1),18);cGd=MFd.U;BD(qud(ZKd(MFd.U),0),34);BD(qud(ZKd(MFd.U),1),34);BD(qud(ZKd(MFd.U),2),18);BD(qud(ZKd(MFd.U),3),18);BD(qud(ZKd(MFd.U),4),18);BD(qud(ZKd(MFd.U),5),18);BD(qud(WKd(MFd.U),0),59);dGd=MFd.V;BD(qud(ZKd(MFd.V),0),18);eGd=MFd.W;BD(qud(ZKd(MFd.W),0),34);BD(qud(ZKd(MFd.W),1),34);BD(qud(ZKd(MFd.W),2),34);BD(qud(ZKd(MFd.W),3),18);BD(qud(ZKd(MFd.W),4),18);BD(qud(ZKd(MFd.W),5),18);gGd=MFd.bb;BD(qud(ZKd(MFd.bb),0),34);BD(qud(ZKd(MFd.bb),1),34);BD(qud(ZKd(MFd.bb),2),34);BD(qud(ZKd(MFd.bb),3),34);BD(qud(ZKd(MFd.bb),4),34);BD(qud(ZKd(MFd.bb),5),34);BD(qud(ZKd(MFd.bb),6),34);BD(qud(ZKd(MFd.bb),7),18);BD(qud(WKd(MFd.bb),0),59);BD(qud(WKd(MFd.bb),1),59);hGd=MFd.eb;BD(qud(ZKd(MFd.eb),0),34);BD(qud(ZKd(MFd.eb),1),34);BD(qud(ZKd(MFd.eb),2),34);BD(qud(ZKd(MFd.eb),3),34);BD(qud(ZKd(MFd.eb),4),34);BD(qud(ZKd(MFd.eb),5),34);BD(qud(ZKd(MFd.eb),6),18);BD(qud(ZKd(MFd.eb),7),18);fGd=MFd.ab;BD(qud(ZKd(MFd.ab),0),34);BD(qud(ZKd(MFd.ab),1),34);XFd=MFd.H;BD(qud(ZKd(MFd.H),0),18);BD(qud(ZKd(MFd.H),1),18);BD(qud(ZKd(MFd.H),2),18);BD(qud(ZKd(MFd.H),3),18);BD(qud(ZKd(MFd.H),4),18);BD(qud(ZKd(MFd.H),5),18);BD(qud(WKd(MFd.H),0),59);iGd=MFd.db;BD(qud(ZKd(MFd.db),0),18);YFd=MFd.M} +function bae(a){var b;if(a.O)return;a.O=true;pnd(a,'type');cod(a,'ecore.xml.type');dod(a,Ewe);b=BD(nUd((yFd(),xFd),Ewe),1945);wtd(_Kd(a.fb),a.b);Xnd(a.b,Q9,'AnyType',false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.D,Qve,null,0,-1,Q9,false,false,true,false,false,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.D,'any',null,0,-1,Q9,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.b),2),34),a.wb.D,'anyAttribute',null,0,-1,Q9,false,false,true,false,false,false);Xnd(a.bb,S9,Jwe,false,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.gb,'data',null,0,1,S9,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.gb,bue,null,1,1,S9,false,false,true,false,true,false);Xnd(a.fb,T9,Kwe,false,false,true);Vnd(BD(qud(ZKd(a.fb),0),34),b.gb,'rawValue',null,0,1,T9,true,true,true,false,true,true);Vnd(BD(qud(ZKd(a.fb),1),34),b.a,Bte,null,0,1,T9,true,true,true,false,true,true);_nd(BD(qud(ZKd(a.fb),2),18),a.wb.q,null,'instanceType',1,1,T9,false,false,true,false,false,false,false);Xnd(a.qb,U9,Lwe,false,false,true);Vnd(BD(qud(ZKd(a.qb),0),34),a.wb.D,Qve,null,0,-1,null,false,false,true,false,false,false);_nd(BD(qud(ZKd(a.qb),1),18),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.qb),2),18),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.qb),3),34),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),4),34),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);_nd(BD(qud(ZKd(a.qb),5),18),a.bb,null,jxe,0,-2,null,true,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),6),34),a.gb,Ite,null,0,-2,null,true,true,true,false,false,true);Znd(a.a,SI,'AnySimpleType',true);Znd(a.c,ZI,'AnyURI',true);Znd(a.d,GC(SD,1),'Base64Binary',true);Znd(a.e,sbb,'Boolean',true);Znd(a.f,wI,'BooleanObject',true);Znd(a.g,SD,'Byte',true);Znd(a.i,xI,'ByteObject',true);Znd(a.j,ZI,'Date',true);Znd(a.k,ZI,'DateTime',true);Znd(a.n,bJ,'Decimal',true);Znd(a.o,UD,'Double',true);Znd(a.p,BI,'DoubleObject',true);Znd(a.q,ZI,'Duration',true);Znd(a.s,yK,'ENTITIES',true);Znd(a.r,yK,'ENTITIESBase',true);Znd(a.t,ZI,Rwe,true);Znd(a.u,VD,'Float',true);Znd(a.v,FI,'FloatObject',true);Znd(a.w,ZI,'GDay',true);Znd(a.B,ZI,'GMonth',true);Znd(a.A,ZI,'GMonthDay',true);Znd(a.C,ZI,'GYear',true);Znd(a.D,ZI,'GYearMonth',true);Znd(a.F,GC(SD,1),'HexBinary',true);Znd(a.G,ZI,'ID',true);Znd(a.H,ZI,'IDREF',true);Znd(a.J,yK,'IDREFS',true);Znd(a.I,yK,'IDREFSBase',true);Znd(a.K,WD,'Int',true);Znd(a.M,cJ,'Integer',true);Znd(a.L,JI,'IntObject',true);Znd(a.P,ZI,'Language',true);Znd(a.Q,XD,'Long',true);Znd(a.R,MI,'LongObject',true);Znd(a.S,ZI,'Name',true);Znd(a.T,ZI,Swe,true);Znd(a.U,cJ,'NegativeInteger',true);Znd(a.V,ZI,axe,true);Znd(a.X,yK,'NMTOKENS',true);Znd(a.W,yK,'NMTOKENSBase',true);Znd(a.Y,cJ,'NonNegativeInteger',true);Znd(a.Z,cJ,'NonPositiveInteger',true);Znd(a.$,ZI,'NormalizedString',true);Znd(a._,ZI,'NOTATION',true);Znd(a.ab,ZI,'PositiveInteger',true);Znd(a.cb,ZI,'QName',true);Znd(a.db,rbb,'Short',true);Znd(a.eb,UI,'ShortObject',true);Znd(a.gb,ZI,Vie,true);Znd(a.hb,ZI,'Time',true);Znd(a.ib,ZI,'Token',true);Znd(a.jb,rbb,'UnsignedByte',true);Znd(a.kb,UI,'UnsignedByteObject',true);Znd(a.lb,XD,'UnsignedInt',true);Znd(a.mb,MI,'UnsignedIntObject',true);Znd(a.nb,cJ,'UnsignedLong',true);Znd(a.ob,WD,'UnsignedShort',true);Znd(a.pb,JI,'UnsignedShortObject',true);Rnd(a,Ewe);_9d(a)} +function Oyc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,sne),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new Ryc),sne),qqb((Csd(),Bsd),OC(GC(O3,1),Kie,237,0,[ysd,zsd,xsd,Asd,vsd,usd])))));p4c(a,sne,Lpe,Ksd(iyc));p4c(a,sne,Mpe,Ksd(jyc));p4c(a,sne,Zle,Ksd(kyc));p4c(a,sne,Npe,Ksd(lyc));p4c(a,sne,xme,Ksd(nyc));p4c(a,sne,Ope,Ksd(oyc));p4c(a,sne,Ppe,Ksd(ryc));p4c(a,sne,Qpe,Ksd(tyc));p4c(a,sne,Rpe,Ksd(uyc));p4c(a,sne,Spe,Ksd(syc));p4c(a,sne,wme,Ksd(vyc));p4c(a,sne,Tpe,Ksd(xyc));p4c(a,sne,Upe,Ksd(zyc));p4c(a,sne,Vpe,Ksd(qyc));p4c(a,sne,Loe,Ksd(hyc));p4c(a,sne,Noe,Ksd(myc));p4c(a,sne,Moe,Ksd(pyc));p4c(a,sne,Ooe,Ksd(wyc));p4c(a,sne,vme,meb(0));p4c(a,sne,Poe,Ksd(cyc));p4c(a,sne,Qoe,Ksd(dyc));p4c(a,sne,Roe,Ksd(eyc));p4c(a,sne,Yoe,Ksd(Kyc));p4c(a,sne,Zoe,Ksd(Cyc));p4c(a,sne,$oe,Ksd(Dyc));p4c(a,sne,_oe,Ksd(Gyc));p4c(a,sne,ape,Ksd(Eyc));p4c(a,sne,bpe,Ksd(Fyc));p4c(a,sne,cpe,Ksd(Myc));p4c(a,sne,dpe,Ksd(Lyc));p4c(a,sne,epe,Ksd(Iyc));p4c(a,sne,fpe,Ksd(Hyc));p4c(a,sne,gpe,Ksd(Jyc));p4c(a,sne,Eoe,Ksd(Cxc));p4c(a,sne,Foe,Ksd(Dxc));p4c(a,sne,Ioe,Ksd(Xwc));p4c(a,sne,Joe,Ksd(Ywc));p4c(a,sne,ame,Lxc);p4c(a,sne,ype,Twc);p4c(a,sne,Wpe,0);p4c(a,sne,yme,meb(1));p4c(a,sne,_le,tme);p4c(a,sne,Xpe,Ksd(Jxc));p4c(a,sne,Bme,Ksd(Vxc));p4c(a,sne,Ype,Ksd($xc));p4c(a,sne,Zpe,Ksd(Kwc));p4c(a,sne,$pe,Ksd(mwc));p4c(a,sne,tpe,Ksd(axc));p4c(a,sne,zme,(Bcb(),true));p4c(a,sne,_pe,Ksd(fxc));p4c(a,sne,aqe,Ksd(gxc));p4c(a,sne,Fme,Ksd(Fxc));p4c(a,sne,Eme,Ksd(Ixc));p4c(a,sne,bqe,Ksd(Gxc));p4c(a,sne,cqe,Nwc);p4c(a,sne,Gme,Ksd(xxc));p4c(a,sne,dqe,Ksd(wxc));p4c(a,sne,Hme,Ksd(Yxc));p4c(a,sne,eqe,Ksd(Xxc));p4c(a,sne,fqe,Ksd(Zxc));p4c(a,sne,gqe,Oxc);p4c(a,sne,hqe,Ksd(Qxc));p4c(a,sne,iqe,Ksd(Rxc));p4c(a,sne,jqe,Ksd(Sxc));p4c(a,sne,kqe,Ksd(Pxc));p4c(a,sne,eoe,Ksd(Byc));p4c(a,sne,hoe,Ksd(sxc));p4c(a,sne,noe,Ksd(rxc));p4c(a,sne,doe,Ksd(Ayc));p4c(a,sne,ioe,Ksd(mxc));p4c(a,sne,goe,Ksd(Jwc));p4c(a,sne,qoe,Ksd(Iwc));p4c(a,sne,roe,Ksd(Awc));p4c(a,sne,woe,Ksd(Bwc));p4c(a,sne,xoe,Ksd(Dwc));p4c(a,sne,yoe,Ksd(Cwc));p4c(a,sne,toe,Ksd(Hwc));p4c(a,sne,_ne,Ksd(uxc));p4c(a,sne,aoe,Ksd(vxc));p4c(a,sne,$ne,Ksd(ixc));p4c(a,sne,zoe,Ksd(Exc));p4c(a,sne,Coe,Ksd(zxc));p4c(a,sne,Zne,Ksd($wc));p4c(a,sne,Doe,Ksd(Bxc));p4c(a,sne,Goe,Ksd(Vwc));p4c(a,sne,Hoe,Ksd(Wwc));p4c(a,sne,lqe,Ksd(zwc));p4c(a,sne,Boe,Ksd(yxc));p4c(a,sne,Toe,Ksd(swc));p4c(a,sne,Uoe,Ksd(rwc));p4c(a,sne,Soe,Ksd(qwc));p4c(a,sne,Voe,Ksd(cxc));p4c(a,sne,Woe,Ksd(bxc));p4c(a,sne,Xoe,Ksd(dxc));p4c(a,sne,Tme,Ksd(Hxc));p4c(a,sne,mqe,Ksd(jxc));p4c(a,sne,$le,Ksd(Zwc));p4c(a,sne,nqe,Ksd(Qwc));p4c(a,sne,Cme,Ksd(Pwc));p4c(a,sne,soe,Ksd(Ewc));p4c(a,sne,oqe,Ksd(Wxc));p4c(a,sne,pqe,Ksd(pwc));p4c(a,sne,qqe,Ksd(exc));p4c(a,sne,rqe,Ksd(Txc));p4c(a,sne,sqe,Ksd(Mxc));p4c(a,sne,tqe,Ksd(Nxc));p4c(a,sne,loe,Ksd(oxc));p4c(a,sne,moe,Ksd(pxc));p4c(a,sne,uqe,Ksd(ayc));p4c(a,sne,boe,Ksd(nwc));p4c(a,sne,ooe,Ksd(qxc));p4c(a,sne,hpe,Ksd(Rwc));p4c(a,sne,ipe,Ksd(Owc));p4c(a,sne,vqe,Ksd(txc));p4c(a,sne,poe,Ksd(kxc));p4c(a,sne,Aoe,Ksd(Axc));p4c(a,sne,wqe,Ksd(yyc));p4c(a,sne,Yne,Ksd(Mwc));p4c(a,sne,coe,Ksd(_xc));p4c(a,sne,Koe,Ksd(Uwc));p4c(a,sne,joe,Ksd(lxc));p4c(a,sne,uoe,Ksd(Fwc));p4c(a,sne,xqe,Ksd(hxc));p4c(a,sne,koe,Ksd(nxc));p4c(a,sne,voe,Ksd(Gwc));p4c(a,sne,jpe,Ksd(ywc));p4c(a,sne,mpe,Ksd(wwc));p4c(a,sne,npe,Ksd(uwc));p4c(a,sne,ope,Ksd(vwc));p4c(a,sne,kpe,Ksd(xwc));p4c(a,sne,lpe,Ksd(twc));p4c(a,sne,foe,Ksd(_wc))} +function kee(a,b){var c,d;if(!cee){cee=new Lqb;dee=new Lqb;d=(wfe(),wfe(),++vfe,new $fe(4));Ree(d,'\t\n\r\r ');Shb(cee,pxe,d);Shb(dee,pxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Xfe(d,BD(Phb(cee,nxe),117));Shb(cee,oxe,d);Shb(dee,oxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');Shb(cee,qxe,d);Shb(dee,qxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Ufe(d,95,95);Ufe(d,58,58);Shb(cee,rxe,d);Shb(dee,rxe,_fe(d))}c=b?BD(Phb(cee,a),136):BD(Phb(dee,a),136);return c} +function _9d(a){Bnd(a.a,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anySimpleType']));Bnd(a.b,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyType',Sve,Qve]));Bnd(BD(qud(ZKd(a.b),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.b),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,Dwe,Fwe,fue,':1',Owe,'lax']));Bnd(BD(qud(ZKd(a.b),2),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,vwe,Dwe,Fwe,fue,':2',Owe,'lax']));Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyURI',Cwe,ywe]));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[fue,'base64Binary',Cwe,ywe]));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[fue,Khe,Cwe,ywe]));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[fue,'boolean:Object',cwe,Khe]));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[fue,Eve]));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[fue,'byte:Object',cwe,Eve]));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[fue,'date',Cwe,ywe]));Bnd(a.k,Rve,OC(GC(ZI,1),nie,2,6,[fue,'dateTime',Cwe,ywe]));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[fue,'decimal',Cwe,ywe]));Bnd(a.o,Rve,OC(GC(ZI,1),nie,2,6,[fue,Gve,Cwe,ywe]));Bnd(a.p,Rve,OC(GC(ZI,1),nie,2,6,[fue,'double:Object',cwe,Gve]));Bnd(a.q,Rve,OC(GC(ZI,1),nie,2,6,[fue,'duration',Cwe,ywe]));Bnd(a.s,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ENTITIES',cwe,Pwe,Qwe,'1']));Bnd(a.r,Rve,OC(GC(ZI,1),nie,2,6,[fue,Pwe,zwe,Rwe]));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[fue,Rwe,cwe,Swe]));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[fue,Hve,Cwe,ywe]));Bnd(a.v,Rve,OC(GC(ZI,1),nie,2,6,[fue,'float:Object',cwe,Hve]));Bnd(a.w,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gDay',Cwe,ywe]));Bnd(a.B,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonth',Cwe,ywe]));Bnd(a.A,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonthDay',Cwe,ywe]));Bnd(a.C,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYear',Cwe,ywe]));Bnd(a.D,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYearMonth',Cwe,ywe]));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[fue,'hexBinary',Cwe,ywe]));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ID',cwe,Swe]));Bnd(a.H,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREF',cwe,Swe]));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREFS',cwe,Twe,Qwe,'1']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[fue,Twe,zwe,'IDREF']));Bnd(a.K,Rve,OC(GC(ZI,1),nie,2,6,[fue,Ive]));Bnd(a.M,Rve,OC(GC(ZI,1),nie,2,6,[fue,Uwe]));Bnd(a.L,Rve,OC(GC(ZI,1),nie,2,6,[fue,'int:Object',cwe,Ive]));Bnd(a.P,Rve,OC(GC(ZI,1),nie,2,6,[fue,'language',cwe,Vwe,Wwe,Xwe]));Bnd(a.Q,Rve,OC(GC(ZI,1),nie,2,6,[fue,Jve]));Bnd(a.R,Rve,OC(GC(ZI,1),nie,2,6,[fue,'long:Object',cwe,Jve]));Bnd(a.S,Rve,OC(GC(ZI,1),nie,2,6,[fue,'Name',cwe,Vwe,Wwe,Ywe]));Bnd(a.T,Rve,OC(GC(ZI,1),nie,2,6,[fue,Swe,cwe,'Name',Wwe,Zwe]));Bnd(a.U,Rve,OC(GC(ZI,1),nie,2,6,[fue,'negativeInteger',cwe,$we,_we,'-1']));Bnd(a.V,Rve,OC(GC(ZI,1),nie,2,6,[fue,axe,cwe,Vwe,Wwe,'\\c+']));Bnd(a.X,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NMTOKENS',cwe,bxe,Qwe,'1']));Bnd(a.W,Rve,OC(GC(ZI,1),nie,2,6,[fue,bxe,zwe,axe]));Bnd(a.Y,Rve,OC(GC(ZI,1),nie,2,6,[fue,cxe,cwe,Uwe,dxe,'0']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[fue,$we,cwe,Uwe,_we,'0']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[fue,exe,cwe,Mhe,Cwe,'replace']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NOTATION',Cwe,ywe]));Bnd(a.ab,Rve,OC(GC(ZI,1),nie,2,6,[fue,'positiveInteger',cwe,cxe,dxe,'1']));Bnd(a.bb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'processingInstruction_._type',Sve,'empty']));Bnd(BD(qud(ZKd(a.bb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'data']));Bnd(BD(qud(ZKd(a.bb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,bue]));Bnd(a.cb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'QName',Cwe,ywe]));Bnd(a.db,Rve,OC(GC(ZI,1),nie,2,6,[fue,Kve]));Bnd(a.eb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'short:Object',cwe,Kve]));Bnd(a.fb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'simpleAnyType',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':3',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':4',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[fue,':5',Sve,twe]));Bnd(a.gb,Rve,OC(GC(ZI,1),nie,2,6,[fue,Mhe,Cwe,'preserve']));Bnd(a.hb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'time',Cwe,ywe]));Bnd(a.ib,Rve,OC(GC(ZI,1),nie,2,6,[fue,Vwe,cwe,exe,Cwe,ywe]));Bnd(a.jb,Rve,OC(GC(ZI,1),nie,2,6,[fue,fxe,_we,'255',dxe,'0']));Bnd(a.kb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedByte:Object',cwe,fxe]));Bnd(a.lb,Rve,OC(GC(ZI,1),nie,2,6,[fue,gxe,_we,'4294967295',dxe,'0']));Bnd(a.mb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedInt:Object',cwe,gxe]));Bnd(a.nb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedLong',cwe,cxe,_we,hxe,dxe,'0']));Bnd(a.ob,Rve,OC(GC(ZI,1),nie,2,6,[fue,ixe,_we,'65535',dxe,'0']));Bnd(a.pb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedShort:Object',cwe,ixe]));Bnd(a.qb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'',Sve,Qve]));Bnd(BD(qud(ZKd(a.qb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.qb),1),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xmlns:prefix']));Bnd(BD(qud(ZKd(a.qb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xsi:schemaLocation']));Bnd(BD(qud(ZKd(a.qb),3),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'cDATA',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),4),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'comment',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),5),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,jxe,Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),6),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,Ite,Awe,Bwe]))} +function tvd(a){return dfb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':dfb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':dfb(sue,a)?'Wrong character.':dfb(tue,a)?'Invalid reference number.':dfb(uue,a)?'A character is required after \\.':dfb(vue,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":dfb(wue,a)?"'(?<' or '(?<!' is expected.":dfb(xue,a)?'A comment is not terminated.':dfb(yue,a)?"')' is expected.":dfb(zue,a)?'Unexpected end of the pattern in a modifier group.':dfb(Aue,a)?"':' is expected.":dfb(Bue,a)?'Unexpected end of the pattern in a conditional group.':dfb(Cue,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':dfb(Due,a)?'There are more than three choices in a conditional group.':dfb(Eue,a)?'A character in U+0040-U+005f must follow \\c.':dfb(Fue,a)?"A '{' is required before a character category.":dfb(Gue,a)?"A property name is not closed by '}'.":dfb(Hue,a)?'Unexpected meta character.':dfb(Iue,a)?'Unknown property.':dfb(Jue,a)?"A POSIX character class must be closed by ':]'.":dfb(Kue,a)?'Unexpected end of the pattern in a character class.':dfb(Lue,a)?'Unknown name for a POSIX character class.':dfb('parser.cc.4',a)?"'-' is invalid here.":dfb(Mue,a)?"']' is expected.":dfb(Nue,a)?"'[' is invalid in a character class. Write '\\['.":dfb(Oue,a)?"']' is invalid in a character class. Write '\\]'.":dfb(Pue,a)?"'-' is an invalid character range. Write '\\-'.":dfb(Que,a)?"'[' is expected.":dfb(Rue,a)?"')' or '-[' or '+[' or '&[' is expected.":dfb(Sue,a)?'The range end code point is less than the start code point.':dfb(Tue,a)?'Invalid Unicode hex notation.':dfb(Uue,a)?'Overflow in a hex notation.':dfb(Vue,a)?"'\\x{' must be closed by '}'.":dfb(Wue,a)?'Invalid Unicode code point.':dfb(Xue,a)?'An anchor must not be here.':dfb(Yue,a)?'This expression is not supported in the current option setting.':dfb(Zue,a)?'Invalid quantifier. A digit is expected.':dfb($ue,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":dfb(_ue,a)?"Invalid quantifier. A digit or '}' is expected.":dfb(ave,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':dfb(bve,a)?'Invalid quantifier. A quantity value overflow.':dfb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':dfb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':dfb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':dfb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':dfb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':dfb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':dfb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':dfb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':dfb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':dfb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':dfb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':dfb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':dfb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':dfb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':dfb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":dfb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':dfb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":dfb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':dfb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':dfb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':dfb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':dfb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':dfb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':dfb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":dfb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':dfb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':dfb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':dfb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':dfb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':dfb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':dfb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} +function Aod(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;pnd(a,'graph');cod(a,'graph');dod(a,yte);Gnd(a.o,'T');wtd(_Kd(a.a),a.p);wtd(_Kd(a.f),a.a);wtd(_Kd(a.n),a.f);wtd(_Kd(a.g),a.n);wtd(_Kd(a.c),a.n);wtd(_Kd(a.i),a.c);wtd(_Kd(a.j),a.c);wtd(_Kd(a.d),a.f);wtd(_Kd(a.e),a.a);Xnd(a.p,P3,Ile,true,true,false);o=Dnd(a.p,a.p,'setProperty');p=Hnd(o);j=Nnd(a.o);k=(c=(d=new UQd,d),c);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=Ond(p);PQd(k,l);Fnd(o,j,Ate);j=Ond(p);Fnd(o,j,Bte);o=Dnd(a.p,null,'getProperty');p=Hnd(o);j=Nnd(a.o);k=Ond(p);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);j=Ond(p);n=xId(o,j,null);!!n&&n.Fi();o=Dnd(a.p,a.wb.e,'hasProperty');j=Nnd(a.o);k=(e=(f=new UQd,f),e);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);o=Dnd(a.p,a.p,'copyProperties');End(o,a.p,Cte);o=Dnd(a.p,null,'getAllProperties');j=Nnd(a.wb.P);k=Nnd(a.o);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=(g=(h=new UQd,h),g);wtd((!k.d&&(k.d=new xMd(j5,k,1)),k.d),l);k=Nnd(a.wb.M);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);m=xId(o,j,null);!!m&&m.Fi();Xnd(a.a,x2,Xse,true,false,true);_nd(BD(qud(ZKd(a.a),0),18),a.k,null,Dte,0,-1,x2,false,false,true,true,false,false,false);Xnd(a.f,C2,Zse,true,false,true);_nd(BD(qud(ZKd(a.f),0),18),a.g,BD(qud(ZKd(a.g),0),18),'labels',0,-1,C2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.f),1),34),a.wb._,Ete,null,0,1,C2,false,false,true,false,true,false);Xnd(a.n,G2,'ElkShape',true,false,true);Vnd(BD(qud(ZKd(a.n),0),34),a.wb.t,Fte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),1),34),a.wb.t,Gte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),2),34),a.wb.t,'x',$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),3),34),a.wb.t,'y',$je,1,1,G2,false,false,true,false,true,false);o=Dnd(a.n,null,'setDimensions');End(o,a.wb.t,Gte);End(o,a.wb.t,Fte);o=Dnd(a.n,null,'setLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.g,D2,dte,false,false,true);_nd(BD(qud(ZKd(a.g),0),18),a.f,BD(qud(ZKd(a.f),0),18),Hte,0,1,D2,false,false,true,false,false,false,false);Vnd(BD(qud(ZKd(a.g),1),34),a.wb._,Ite,'',0,1,D2,false,false,true,false,true,false);Xnd(a.c,z2,$se,true,false,true);_nd(BD(qud(ZKd(a.c),0),18),a.d,BD(qud(ZKd(a.d),1),18),'outgoingEdges',0,-1,z2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.c),1),18),a.d,BD(qud(ZKd(a.d),2),18),'incomingEdges',0,-1,z2,false,false,true,false,true,false,false);Xnd(a.i,E2,ete,false,false,true);_nd(BD(qud(ZKd(a.i),0),18),a.j,BD(qud(ZKd(a.j),0),18),'ports',0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),1),18),a.i,BD(qud(ZKd(a.i),2),18),Jte,0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),2),18),a.i,BD(qud(ZKd(a.i),1),18),Hte,0,1,E2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.i),3),18),a.d,BD(qud(ZKd(a.d),0),18),'containedEdges',0,-1,E2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.i),4),34),a.wb.e,Kte,null,0,1,E2,true,true,false,false,true,true);Xnd(a.j,F2,fte,false,false,true);_nd(BD(qud(ZKd(a.j),0),18),a.i,BD(qud(ZKd(a.i),0),18),Hte,0,1,F2,false,false,true,false,false,false,false);Xnd(a.d,B2,_se,false,false,true);_nd(BD(qud(ZKd(a.d),0),18),a.i,BD(qud(ZKd(a.i),3),18),'containingNode',0,1,B2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.d),1),18),a.c,BD(qud(ZKd(a.c),0),18),Lte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),2),18),a.c,BD(qud(ZKd(a.c),1),18),Mte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),3),18),a.e,BD(qud(ZKd(a.e),5),18),Nte,0,-1,B2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.d),4),34),a.wb.e,'hyperedge',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),5),34),a.wb.e,Kte,null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),6),34),a.wb.e,'selfloop',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),7),34),a.wb.e,'connected',null,0,1,B2,true,true,false,false,true,true);Xnd(a.b,y2,Yse,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.t,'x',$je,1,1,y2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.t,'y',$je,1,1,y2,false,false,true,false,true,false);o=Dnd(a.b,null,'set');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.e,A2,ate,false,false,true);Vnd(BD(qud(ZKd(a.e),0),34),a.wb.t,'startX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),1),34),a.wb.t,'startY',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),2),34),a.wb.t,'endX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),3),34),a.wb.t,'endY',null,0,1,A2,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.e),4),18),a.b,null,Ote,0,-1,A2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.e),5),18),a.d,BD(qud(ZKd(a.d),3),18),Hte,0,1,A2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.e),6),18),a.c,null,Pte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),7),18),a.c,null,Qte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),8),18),a.e,BD(qud(ZKd(a.e),9),18),Rte,0,-1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),9),18),a.e,BD(qud(ZKd(a.e),8),18),Ste,0,-1,A2,false,false,true,false,true,false,false);Vnd(BD(qud(ZKd(a.e),10),34),a.wb._,Ete,null,0,1,A2,false,false,true,false,true,false);o=Dnd(a.e,null,'setStartLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');o=Dnd(a.e,null,'setEndLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.k,CK,'ElkPropertyToValueMapEntry',false,false,false);j=Nnd(a.o);k=(i=(b=new UQd,b),i);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Wnd(BD(qud(ZKd(a.k),0),34),j,'key',CK,false,false,true,false);Vnd(BD(qud(ZKd(a.k),1),34),a.s,Bte,null,0,1,CK,false,false,true,false,true,false);Znd(a.o,Q3,'IProperty',true);Znd(a.s,SI,'PropertyValue',true);Rnd(a,yte)} +function lde(){lde=ccb;kde=KC(SD,wte,25,Tje,15,1);kde[9]=35;kde[10]=19;kde[13]=19;kde[32]=51;kde[33]=49;kde[34]=33;ylb(kde,35,38,49);kde[38]=1;ylb(kde,39,45,49);ylb(kde,45,47,-71);kde[47]=49;ylb(kde,48,58,-71);kde[58]=61;kde[59]=49;kde[60]=1;kde[61]=49;kde[62]=33;ylb(kde,63,65,49);ylb(kde,65,91,-3);ylb(kde,91,93,33);kde[93]=1;kde[94]=33;kde[95]=-3;kde[96]=33;ylb(kde,97,123,-3);ylb(kde,123,183,33);kde[183]=-87;ylb(kde,184,192,33);ylb(kde,192,215,-19);kde[215]=33;ylb(kde,216,247,-19);kde[247]=33;ylb(kde,248,306,-19);ylb(kde,306,308,33);ylb(kde,308,319,-19);ylb(kde,319,321,33);ylb(kde,321,329,-19);kde[329]=33;ylb(kde,330,383,-19);kde[383]=33;ylb(kde,384,452,-19);ylb(kde,452,461,33);ylb(kde,461,497,-19);ylb(kde,497,500,33);ylb(kde,500,502,-19);ylb(kde,502,506,33);ylb(kde,506,536,-19);ylb(kde,536,592,33);ylb(kde,592,681,-19);ylb(kde,681,699,33);ylb(kde,699,706,-19);ylb(kde,706,720,33);ylb(kde,720,722,-87);ylb(kde,722,768,33);ylb(kde,768,838,-87);ylb(kde,838,864,33);ylb(kde,864,866,-87);ylb(kde,866,902,33);kde[902]=-19;kde[903]=-87;ylb(kde,904,907,-19);kde[907]=33;kde[908]=-19;kde[909]=33;ylb(kde,910,930,-19);kde[930]=33;ylb(kde,931,975,-19);kde[975]=33;ylb(kde,976,983,-19);ylb(kde,983,986,33);kde[986]=-19;kde[987]=33;kde[988]=-19;kde[989]=33;kde[990]=-19;kde[991]=33;kde[992]=-19;kde[993]=33;ylb(kde,994,1012,-19);ylb(kde,1012,1025,33);ylb(kde,1025,1037,-19);kde[1037]=33;ylb(kde,1038,1104,-19);kde[1104]=33;ylb(kde,1105,1117,-19);kde[1117]=33;ylb(kde,1118,1154,-19);kde[1154]=33;ylb(kde,1155,1159,-87);ylb(kde,1159,1168,33);ylb(kde,1168,1221,-19);ylb(kde,1221,1223,33);ylb(kde,1223,1225,-19);ylb(kde,1225,1227,33);ylb(kde,1227,1229,-19);ylb(kde,1229,1232,33);ylb(kde,1232,1260,-19);ylb(kde,1260,1262,33);ylb(kde,1262,1270,-19);ylb(kde,1270,1272,33);ylb(kde,1272,1274,-19);ylb(kde,1274,1329,33);ylb(kde,1329,1367,-19);ylb(kde,1367,1369,33);kde[1369]=-19;ylb(kde,1370,1377,33);ylb(kde,1377,1415,-19);ylb(kde,1415,1425,33);ylb(kde,1425,1442,-87);kde[1442]=33;ylb(kde,1443,1466,-87);kde[1466]=33;ylb(kde,1467,1470,-87);kde[1470]=33;kde[1471]=-87;kde[1472]=33;ylb(kde,1473,1475,-87);kde[1475]=33;kde[1476]=-87;ylb(kde,1477,1488,33);ylb(kde,1488,1515,-19);ylb(kde,1515,1520,33);ylb(kde,1520,1523,-19);ylb(kde,1523,1569,33);ylb(kde,1569,1595,-19);ylb(kde,1595,1600,33);kde[1600]=-87;ylb(kde,1601,1611,-19);ylb(kde,1611,1619,-87);ylb(kde,1619,1632,33);ylb(kde,1632,1642,-87);ylb(kde,1642,1648,33);kde[1648]=-87;ylb(kde,1649,1720,-19);ylb(kde,1720,1722,33);ylb(kde,1722,1727,-19);kde[1727]=33;ylb(kde,1728,1743,-19);kde[1743]=33;ylb(kde,1744,1748,-19);kde[1748]=33;kde[1749]=-19;ylb(kde,1750,1765,-87);ylb(kde,1765,1767,-19);ylb(kde,1767,1769,-87);kde[1769]=33;ylb(kde,1770,1774,-87);ylb(kde,1774,1776,33);ylb(kde,1776,1786,-87);ylb(kde,1786,2305,33);ylb(kde,2305,2308,-87);kde[2308]=33;ylb(kde,2309,2362,-19);ylb(kde,2362,2364,33);kde[2364]=-87;kde[2365]=-19;ylb(kde,2366,2382,-87);ylb(kde,2382,2385,33);ylb(kde,2385,2389,-87);ylb(kde,2389,2392,33);ylb(kde,2392,2402,-19);ylb(kde,2402,2404,-87);ylb(kde,2404,2406,33);ylb(kde,2406,2416,-87);ylb(kde,2416,2433,33);ylb(kde,2433,2436,-87);kde[2436]=33;ylb(kde,2437,2445,-19);ylb(kde,2445,2447,33);ylb(kde,2447,2449,-19);ylb(kde,2449,2451,33);ylb(kde,2451,2473,-19);kde[2473]=33;ylb(kde,2474,2481,-19);kde[2481]=33;kde[2482]=-19;ylb(kde,2483,2486,33);ylb(kde,2486,2490,-19);ylb(kde,2490,2492,33);kde[2492]=-87;kde[2493]=33;ylb(kde,2494,2501,-87);ylb(kde,2501,2503,33);ylb(kde,2503,2505,-87);ylb(kde,2505,2507,33);ylb(kde,2507,2510,-87);ylb(kde,2510,2519,33);kde[2519]=-87;ylb(kde,2520,2524,33);ylb(kde,2524,2526,-19);kde[2526]=33;ylb(kde,2527,2530,-19);ylb(kde,2530,2532,-87);ylb(kde,2532,2534,33);ylb(kde,2534,2544,-87);ylb(kde,2544,2546,-19);ylb(kde,2546,2562,33);kde[2562]=-87;ylb(kde,2563,2565,33);ylb(kde,2565,2571,-19);ylb(kde,2571,2575,33);ylb(kde,2575,2577,-19);ylb(kde,2577,2579,33);ylb(kde,2579,2601,-19);kde[2601]=33;ylb(kde,2602,2609,-19);kde[2609]=33;ylb(kde,2610,2612,-19);kde[2612]=33;ylb(kde,2613,2615,-19);kde[2615]=33;ylb(kde,2616,2618,-19);ylb(kde,2618,2620,33);kde[2620]=-87;kde[2621]=33;ylb(kde,2622,2627,-87);ylb(kde,2627,2631,33);ylb(kde,2631,2633,-87);ylb(kde,2633,2635,33);ylb(kde,2635,2638,-87);ylb(kde,2638,2649,33);ylb(kde,2649,2653,-19);kde[2653]=33;kde[2654]=-19;ylb(kde,2655,2662,33);ylb(kde,2662,2674,-87);ylb(kde,2674,2677,-19);ylb(kde,2677,2689,33);ylb(kde,2689,2692,-87);kde[2692]=33;ylb(kde,2693,2700,-19);kde[2700]=33;kde[2701]=-19;kde[2702]=33;ylb(kde,2703,2706,-19);kde[2706]=33;ylb(kde,2707,2729,-19);kde[2729]=33;ylb(kde,2730,2737,-19);kde[2737]=33;ylb(kde,2738,2740,-19);kde[2740]=33;ylb(kde,2741,2746,-19);ylb(kde,2746,2748,33);kde[2748]=-87;kde[2749]=-19;ylb(kde,2750,2758,-87);kde[2758]=33;ylb(kde,2759,2762,-87);kde[2762]=33;ylb(kde,2763,2766,-87);ylb(kde,2766,2784,33);kde[2784]=-19;ylb(kde,2785,2790,33);ylb(kde,2790,2800,-87);ylb(kde,2800,2817,33);ylb(kde,2817,2820,-87);kde[2820]=33;ylb(kde,2821,2829,-19);ylb(kde,2829,2831,33);ylb(kde,2831,2833,-19);ylb(kde,2833,2835,33);ylb(kde,2835,2857,-19);kde[2857]=33;ylb(kde,2858,2865,-19);kde[2865]=33;ylb(kde,2866,2868,-19);ylb(kde,2868,2870,33);ylb(kde,2870,2874,-19);ylb(kde,2874,2876,33);kde[2876]=-87;kde[2877]=-19;ylb(kde,2878,2884,-87);ylb(kde,2884,2887,33);ylb(kde,2887,2889,-87);ylb(kde,2889,2891,33);ylb(kde,2891,2894,-87);ylb(kde,2894,2902,33);ylb(kde,2902,2904,-87);ylb(kde,2904,2908,33);ylb(kde,2908,2910,-19);kde[2910]=33;ylb(kde,2911,2914,-19);ylb(kde,2914,2918,33);ylb(kde,2918,2928,-87);ylb(kde,2928,2946,33);ylb(kde,2946,2948,-87);kde[2948]=33;ylb(kde,2949,2955,-19);ylb(kde,2955,2958,33);ylb(kde,2958,2961,-19);kde[2961]=33;ylb(kde,2962,2966,-19);ylb(kde,2966,2969,33);ylb(kde,2969,2971,-19);kde[2971]=33;kde[2972]=-19;kde[2973]=33;ylb(kde,2974,2976,-19);ylb(kde,2976,2979,33);ylb(kde,2979,2981,-19);ylb(kde,2981,2984,33);ylb(kde,2984,2987,-19);ylb(kde,2987,2990,33);ylb(kde,2990,2998,-19);kde[2998]=33;ylb(kde,2999,3002,-19);ylb(kde,3002,3006,33);ylb(kde,3006,3011,-87);ylb(kde,3011,3014,33);ylb(kde,3014,3017,-87);kde[3017]=33;ylb(kde,3018,3022,-87);ylb(kde,3022,3031,33);kde[3031]=-87;ylb(kde,3032,3047,33);ylb(kde,3047,3056,-87);ylb(kde,3056,3073,33);ylb(kde,3073,3076,-87);kde[3076]=33;ylb(kde,3077,3085,-19);kde[3085]=33;ylb(kde,3086,3089,-19);kde[3089]=33;ylb(kde,3090,3113,-19);kde[3113]=33;ylb(kde,3114,3124,-19);kde[3124]=33;ylb(kde,3125,3130,-19);ylb(kde,3130,3134,33);ylb(kde,3134,3141,-87);kde[3141]=33;ylb(kde,3142,3145,-87);kde[3145]=33;ylb(kde,3146,3150,-87);ylb(kde,3150,3157,33);ylb(kde,3157,3159,-87);ylb(kde,3159,3168,33);ylb(kde,3168,3170,-19);ylb(kde,3170,3174,33);ylb(kde,3174,3184,-87);ylb(kde,3184,3202,33);ylb(kde,3202,3204,-87);kde[3204]=33;ylb(kde,3205,3213,-19);kde[3213]=33;ylb(kde,3214,3217,-19);kde[3217]=33;ylb(kde,3218,3241,-19);kde[3241]=33;ylb(kde,3242,3252,-19);kde[3252]=33;ylb(kde,3253,3258,-19);ylb(kde,3258,3262,33);ylb(kde,3262,3269,-87);kde[3269]=33;ylb(kde,3270,3273,-87);kde[3273]=33;ylb(kde,3274,3278,-87);ylb(kde,3278,3285,33);ylb(kde,3285,3287,-87);ylb(kde,3287,3294,33);kde[3294]=-19;kde[3295]=33;ylb(kde,3296,3298,-19);ylb(kde,3298,3302,33);ylb(kde,3302,3312,-87);ylb(kde,3312,3330,33);ylb(kde,3330,3332,-87);kde[3332]=33;ylb(kde,3333,3341,-19);kde[3341]=33;ylb(kde,3342,3345,-19);kde[3345]=33;ylb(kde,3346,3369,-19);kde[3369]=33;ylb(kde,3370,3386,-19);ylb(kde,3386,3390,33);ylb(kde,3390,3396,-87);ylb(kde,3396,3398,33);ylb(kde,3398,3401,-87);kde[3401]=33;ylb(kde,3402,3406,-87);ylb(kde,3406,3415,33);kde[3415]=-87;ylb(kde,3416,3424,33);ylb(kde,3424,3426,-19);ylb(kde,3426,3430,33);ylb(kde,3430,3440,-87);ylb(kde,3440,3585,33);ylb(kde,3585,3631,-19);kde[3631]=33;kde[3632]=-19;kde[3633]=-87;ylb(kde,3634,3636,-19);ylb(kde,3636,3643,-87);ylb(kde,3643,3648,33);ylb(kde,3648,3654,-19);ylb(kde,3654,3663,-87);kde[3663]=33;ylb(kde,3664,3674,-87);ylb(kde,3674,3713,33);ylb(kde,3713,3715,-19);kde[3715]=33;kde[3716]=-19;ylb(kde,3717,3719,33);ylb(kde,3719,3721,-19);kde[3721]=33;kde[3722]=-19;ylb(kde,3723,3725,33);kde[3725]=-19;ylb(kde,3726,3732,33);ylb(kde,3732,3736,-19);kde[3736]=33;ylb(kde,3737,3744,-19);kde[3744]=33;ylb(kde,3745,3748,-19);kde[3748]=33;kde[3749]=-19;kde[3750]=33;kde[3751]=-19;ylb(kde,3752,3754,33);ylb(kde,3754,3756,-19);kde[3756]=33;ylb(kde,3757,3759,-19);kde[3759]=33;kde[3760]=-19;kde[3761]=-87;ylb(kde,3762,3764,-19);ylb(kde,3764,3770,-87);kde[3770]=33;ylb(kde,3771,3773,-87);kde[3773]=-19;ylb(kde,3774,3776,33);ylb(kde,3776,3781,-19);kde[3781]=33;kde[3782]=-87;kde[3783]=33;ylb(kde,3784,3790,-87);ylb(kde,3790,3792,33);ylb(kde,3792,3802,-87);ylb(kde,3802,3864,33);ylb(kde,3864,3866,-87);ylb(kde,3866,3872,33);ylb(kde,3872,3882,-87);ylb(kde,3882,3893,33);kde[3893]=-87;kde[3894]=33;kde[3895]=-87;kde[3896]=33;kde[3897]=-87;ylb(kde,3898,3902,33);ylb(kde,3902,3904,-87);ylb(kde,3904,3912,-19);kde[3912]=33;ylb(kde,3913,3946,-19);ylb(kde,3946,3953,33);ylb(kde,3953,3973,-87);kde[3973]=33;ylb(kde,3974,3980,-87);ylb(kde,3980,3984,33);ylb(kde,3984,3990,-87);kde[3990]=33;kde[3991]=-87;kde[3992]=33;ylb(kde,3993,4014,-87);ylb(kde,4014,4017,33);ylb(kde,4017,4024,-87);kde[4024]=33;kde[4025]=-87;ylb(kde,4026,4256,33);ylb(kde,4256,4294,-19);ylb(kde,4294,4304,33);ylb(kde,4304,4343,-19);ylb(kde,4343,4352,33);kde[4352]=-19;kde[4353]=33;ylb(kde,4354,4356,-19);kde[4356]=33;ylb(kde,4357,4360,-19);kde[4360]=33;kde[4361]=-19;kde[4362]=33;ylb(kde,4363,4365,-19);kde[4365]=33;ylb(kde,4366,4371,-19);ylb(kde,4371,4412,33);kde[4412]=-19;kde[4413]=33;kde[4414]=-19;kde[4415]=33;kde[4416]=-19;ylb(kde,4417,4428,33);kde[4428]=-19;kde[4429]=33;kde[4430]=-19;kde[4431]=33;kde[4432]=-19;ylb(kde,4433,4436,33);ylb(kde,4436,4438,-19);ylb(kde,4438,4441,33);kde[4441]=-19;ylb(kde,4442,4447,33);ylb(kde,4447,4450,-19);kde[4450]=33;kde[4451]=-19;kde[4452]=33;kde[4453]=-19;kde[4454]=33;kde[4455]=-19;kde[4456]=33;kde[4457]=-19;ylb(kde,4458,4461,33);ylb(kde,4461,4463,-19);ylb(kde,4463,4466,33);ylb(kde,4466,4468,-19);kde[4468]=33;kde[4469]=-19;ylb(kde,4470,4510,33);kde[4510]=-19;ylb(kde,4511,4520,33);kde[4520]=-19;ylb(kde,4521,4523,33);kde[4523]=-19;ylb(kde,4524,4526,33);ylb(kde,4526,4528,-19);ylb(kde,4528,4535,33);ylb(kde,4535,4537,-19);kde[4537]=33;kde[4538]=-19;kde[4539]=33;ylb(kde,4540,4547,-19);ylb(kde,4547,4587,33);kde[4587]=-19;ylb(kde,4588,4592,33);kde[4592]=-19;ylb(kde,4593,4601,33);kde[4601]=-19;ylb(kde,4602,7680,33);ylb(kde,7680,7836,-19);ylb(kde,7836,7840,33);ylb(kde,7840,7930,-19);ylb(kde,7930,7936,33);ylb(kde,7936,7958,-19);ylb(kde,7958,7960,33);ylb(kde,7960,7966,-19);ylb(kde,7966,7968,33);ylb(kde,7968,8006,-19);ylb(kde,8006,8008,33);ylb(kde,8008,8014,-19);ylb(kde,8014,8016,33);ylb(kde,8016,8024,-19);kde[8024]=33;kde[8025]=-19;kde[8026]=33;kde[8027]=-19;kde[8028]=33;kde[8029]=-19;kde[8030]=33;ylb(kde,8031,8062,-19);ylb(kde,8062,8064,33);ylb(kde,8064,8117,-19);kde[8117]=33;ylb(kde,8118,8125,-19);kde[8125]=33;kde[8126]=-19;ylb(kde,8127,8130,33);ylb(kde,8130,8133,-19);kde[8133]=33;ylb(kde,8134,8141,-19);ylb(kde,8141,8144,33);ylb(kde,8144,8148,-19);ylb(kde,8148,8150,33);ylb(kde,8150,8156,-19);ylb(kde,8156,8160,33);ylb(kde,8160,8173,-19);ylb(kde,8173,8178,33);ylb(kde,8178,8181,-19);kde[8181]=33;ylb(kde,8182,8189,-19);ylb(kde,8189,8400,33);ylb(kde,8400,8413,-87);ylb(kde,8413,8417,33);kde[8417]=-87;ylb(kde,8418,8486,33);kde[8486]=-19;ylb(kde,8487,8490,33);ylb(kde,8490,8492,-19);ylb(kde,8492,8494,33);kde[8494]=-19;ylb(kde,8495,8576,33);ylb(kde,8576,8579,-19);ylb(kde,8579,12293,33);kde[12293]=-87;kde[12294]=33;kde[12295]=-19;ylb(kde,12296,12321,33);ylb(kde,12321,12330,-19);ylb(kde,12330,12336,-87);kde[12336]=33;ylb(kde,12337,12342,-87);ylb(kde,12342,12353,33);ylb(kde,12353,12437,-19);ylb(kde,12437,12441,33);ylb(kde,12441,12443,-87);ylb(kde,12443,12445,33);ylb(kde,12445,12447,-87);ylb(kde,12447,12449,33);ylb(kde,12449,12539,-19);kde[12539]=33;ylb(kde,12540,12543,-87);ylb(kde,12543,12549,33);ylb(kde,12549,12589,-19);ylb(kde,12589,19968,33);ylb(kde,19968,40870,-19);ylb(kde,40870,44032,33);ylb(kde,44032,55204,-19);ylb(kde,55204,Uje,33);ylb(kde,57344,65534,33)} +function zZd(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;pnd(a,'ecore');cod(a,'ecore');dod(a,_ve);Gnd(a.fb,'E');Gnd(a.L,'T');Gnd(a.P,'K');Gnd(a.P,'V');Gnd(a.cb,'E');wtd(_Kd(a.b),a.bb);wtd(_Kd(a.a),a.Q);wtd(_Kd(a.o),a.p);wtd(_Kd(a.p),a.R);wtd(_Kd(a.q),a.p);wtd(_Kd(a.v),a.q);wtd(_Kd(a.w),a.R);wtd(_Kd(a.B),a.Q);wtd(_Kd(a.R),a.Q);wtd(_Kd(a.T),a.eb);wtd(_Kd(a.U),a.R);wtd(_Kd(a.V),a.eb);wtd(_Kd(a.W),a.bb);wtd(_Kd(a.bb),a.eb);wtd(_Kd(a.eb),a.R);wtd(_Kd(a.db),a.R);Xnd(a.b,b5,qve,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.e,'iD',null,0,1,b5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.b),1),18),a.q,null,'eAttributeType',1,1,b5,true,true,false,false,true,false,true);Xnd(a.a,a5,nve,false,false,true);Vnd(BD(qud(ZKd(a.a),0),34),a._,Cte,null,0,1,a5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.a),1),18),a.ab,null,'details',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),2),18),a.Q,BD(qud(ZKd(a.Q),0),18),'eModelElement',0,1,a5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.a),3),18),a.S,null,'contents',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),4),18),a.S,null,'references',0,-1,a5,false,false,true,false,true,false,false);Xnd(a.o,c5,'EClass',false,false,true);Vnd(BD(qud(ZKd(a.o),0),34),a.e,'abstract',null,0,1,c5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.o),1),34),a.e,'interface',null,0,1,c5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.o),2),18),a.o,null,'eSuperTypes',0,-1,c5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.o),3),18),a.T,BD(qud(ZKd(a.T),0),18),'eOperations',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),4),18),a.b,null,'eAllAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),5),18),a.W,null,'eAllReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),6),18),a.W,null,'eReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),7),18),a.b,null,'eAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),8),18),a.W,null,'eAllContainments',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),9),18),a.T,null,'eAllOperations',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),10),18),a.bb,null,'eAllStructuralFeatures',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),11),18),a.o,null,'eAllSuperTypes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),12),18),a.b,null,'eIDAttribute',0,1,c5,true,true,false,false,false,false,true);_nd(BD(qud(ZKd(a.o),13),18),a.bb,BD(qud(ZKd(a.bb),7),18),'eStructuralFeatures',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),14),18),a.H,null,'eGenericSuperTypes',0,-1,c5,false,false,true,true,false,true,false);_nd(BD(qud(ZKd(a.o),15),18),a.H,null,'eAllGenericSuperTypes',0,-1,c5,true,true,false,false,true,false,true);h=$nd(BD(qud(WKd(a.o),0),59),a.e,'isSuperTypeOf');End(h,a.o,'someClass');$nd(BD(qud(WKd(a.o),1),59),a.I,'getFeatureCount');h=$nd(BD(qud(WKd(a.o),2),59),a.bb,dwe);End(h,a.I,'featureID');h=$nd(BD(qud(WKd(a.o),3),59),a.I,ewe);End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.o),4),59),a.bb,dwe);End(h,a._,'featureName');$nd(BD(qud(WKd(a.o),5),59),a.I,'getOperationCount');h=$nd(BD(qud(WKd(a.o),6),59),a.T,'getEOperation');End(h,a.I,'operationID');h=$nd(BD(qud(WKd(a.o),7),59),a.I,gwe);End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),8),59),a.T,'getOverride');End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),9),59),a.H,'getFeatureType');End(h,a.bb,fwe);Xnd(a.p,d5,rve,true,false,true);Vnd(BD(qud(ZKd(a.p),0),34),a._,'instanceClassName',null,0,1,d5,false,true,true,true,true,false);b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Wnd(BD(qud(ZKd(a.p),1),34),b,'instanceClass',d5,true,true,false,true);Vnd(BD(qud(ZKd(a.p),2),34),a.M,iwe,null,0,1,d5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.p),3),34),a._,'instanceTypeName',null,0,1,d5,false,true,true,true,true,false);_nd(BD(qud(ZKd(a.p),4),18),a.U,BD(qud(ZKd(a.U),3),18),'ePackage',0,1,d5,true,false,false,false,true,false,false);_nd(BD(qud(ZKd(a.p),5),18),a.db,null,jwe,0,-1,d5,false,false,true,true,true,false,false);h=$nd(BD(qud(WKd(a.p),0),59),a.e,kwe);End(h,a.M,Jhe);$nd(BD(qud(WKd(a.p),1),59),a.I,'getClassifierID');Xnd(a.q,f5,'EDataType',false,false,true);Vnd(BD(qud(ZKd(a.q),0),34),a.e,'serializable',kse,0,1,f5,false,false,true,false,true,false);Xnd(a.v,h5,'EEnum',false,false,true);_nd(BD(qud(ZKd(a.v),0),18),a.w,BD(qud(ZKd(a.w),3),18),'eLiterals',0,-1,h5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.v),0),59),a.w,lwe);End(h,a._,fue);h=$nd(BD(qud(WKd(a.v),1),59),a.w,lwe);End(h,a.I,Bte);h=$nd(BD(qud(WKd(a.v),2),59),a.w,'getEEnumLiteralByLiteral');End(h,a._,'literal');Xnd(a.w,g5,sve,false,false,true);Vnd(BD(qud(ZKd(a.w),0),34),a.I,Bte,null,0,1,g5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),1),34),a.A,'instance',null,0,1,g5,true,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),2),34),a._,'literal',null,0,1,g5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.w),3),18),a.v,BD(qud(ZKd(a.v),0),18),'eEnum',0,1,g5,true,false,false,false,false,false,false);Xnd(a.B,i5,'EFactory',false,false,true);_nd(BD(qud(ZKd(a.B),0),18),a.U,BD(qud(ZKd(a.U),2),18),'ePackage',1,1,i5,true,false,true,false,false,false,false);h=$nd(BD(qud(WKd(a.B),0),59),a.S,'create');End(h,a.o,'eClass');h=$nd(BD(qud(WKd(a.B),1),59),a.M,'createFromString');End(h,a.q,'eDataType');End(h,a._,'literalValue');h=$nd(BD(qud(WKd(a.B),2),59),a._,'convertToString');End(h,a.q,'eDataType');End(h,a.M,'instanceValue');Xnd(a.Q,k5,bte,true,false,true);_nd(BD(qud(ZKd(a.Q),0),18),a.a,BD(qud(ZKd(a.a),2),18),'eAnnotations',0,-1,k5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.Q),0),59),a.a,'getEAnnotation');End(h,a._,Cte);Xnd(a.R,l5,cte,true,false,true);Vnd(BD(qud(ZKd(a.R),0),34),a._,fue,null,0,1,l5,false,false,true,false,true,false);Xnd(a.S,m5,'EObject',false,false,true);$nd(BD(qud(WKd(a.S),0),59),a.o,'eClass');$nd(BD(qud(WKd(a.S),1),59),a.e,'eIsProxy');$nd(BD(qud(WKd(a.S),2),59),a.X,'eResource');$nd(BD(qud(WKd(a.S),3),59),a.S,'eContainer');$nd(BD(qud(WKd(a.S),4),59),a.bb,'eContainingFeature');$nd(BD(qud(WKd(a.S),5),59),a.W,'eContainmentFeature');h=$nd(BD(qud(WKd(a.S),6),59),null,'eContents');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);e=xId(h,b,null);!!e&&e.Fi();h=$nd(BD(qud(WKd(a.S),7),59),null,'eAllContents');b=Nnd(a.cb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);f=xId(h,b,null);!!f&&f.Fi();h=$nd(BD(qud(WKd(a.S),8),59),null,'eCrossReferences');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);g=xId(h,b,null);!!g&&g.Fi();h=$nd(BD(qud(WKd(a.S),9),59),a.M,'eGet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),10),59),a.M,'eGet');End(h,a.bb,fwe);End(h,a.e,'resolve');h=$nd(BD(qud(WKd(a.S),11),59),null,'eSet');End(h,a.bb,fwe);End(h,a.M,'newValue');h=$nd(BD(qud(WKd(a.S),12),59),a.e,'eIsSet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),13),59),null,'eUnset');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),14),59),a.M,'eInvoke');End(h,a.T,hwe);b=Nnd(a.fb);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Fnd(h,b,'arguments');Cnd(h,a.K);Xnd(a.T,n5,uve,false,false,true);_nd(BD(qud(ZKd(a.T),0),18),a.o,BD(qud(ZKd(a.o),3),18),mwe,0,1,n5,true,false,false,false,false,false,false);_nd(BD(qud(ZKd(a.T),1),18),a.db,null,jwe,0,-1,n5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.T),2),18),a.V,BD(qud(ZKd(a.V),0),18),'eParameters',0,-1,n5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.T),3),18),a.p,null,'eExceptions',0,-1,n5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.T),4),18),a.H,null,'eGenericExceptions',0,-1,n5,false,false,true,true,false,true,false);$nd(BD(qud(WKd(a.T),0),59),a.I,gwe);h=$nd(BD(qud(WKd(a.T),1),59),a.e,'isOverrideOf');End(h,a.T,'someOperation');Xnd(a.U,o5,'EPackage',false,false,true);Vnd(BD(qud(ZKd(a.U),0),34),a._,'nsURI',null,0,1,o5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.U),1),34),a._,'nsPrefix',null,0,1,o5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.U),2),18),a.B,BD(qud(ZKd(a.B),0),18),'eFactoryInstance',1,1,o5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.U),3),18),a.p,BD(qud(ZKd(a.p),4),18),'eClassifiers',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),4),18),a.U,BD(qud(ZKd(a.U),5),18),'eSubpackages',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),5),18),a.U,BD(qud(ZKd(a.U),4),18),'eSuperPackage',0,1,o5,true,false,false,false,true,false,false);h=$nd(BD(qud(WKd(a.U),0),59),a.p,'getEClassifier');End(h,a._,fue);Xnd(a.V,p5,vve,false,false,true);_nd(BD(qud(ZKd(a.V),0),18),a.T,BD(qud(ZKd(a.T),2),18),'eOperation',0,1,p5,true,false,false,false,false,false,false);Xnd(a.W,q5,wve,false,false,true);Vnd(BD(qud(ZKd(a.W),0),34),a.e,'containment',null,0,1,q5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.W),1),34),a.e,'container',null,0,1,q5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.W),2),34),a.e,'resolveProxies',kse,0,1,q5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.W),3),18),a.W,null,'eOpposite',0,1,q5,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.W),4),18),a.o,null,'eReferenceType',1,1,q5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.W),5),18),a.b,null,'eKeys',0,-1,q5,false,false,true,false,true,false,false);Xnd(a.bb,t5,pve,true,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.e,'changeable',kse,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.e,'volatile',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),2),34),a.e,'transient',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),3),34),a._,'defaultValueLiteral',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),4),34),a.M,iwe,null,0,1,t5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.bb),5),34),a.e,'unsettable',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),6),34),a.e,'derived',null,0,1,t5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.bb),7),18),a.o,BD(qud(ZKd(a.o),13),18),mwe,0,1,t5,true,false,false,false,false,false,false);$nd(BD(qud(WKd(a.bb),0),59),a.I,ewe);h=$nd(BD(qud(WKd(a.bb),1),59),null,'getContainerClass');b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);d=xId(h,b,null);!!d&&d.Fi();Xnd(a.eb,v5,ove,true,false,true);Vnd(BD(qud(ZKd(a.eb),0),34),a.e,'ordered',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),1),34),a.e,'unique',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),2),34),a.I,'lowerBound',null,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),3),34),a.I,'upperBound','1',0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),4),34),a.e,'many',null,0,1,v5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.eb),5),34),a.e,'required',null,0,1,v5,true,true,false,false,true,true);_nd(BD(qud(ZKd(a.eb),6),18),a.p,null,'eType',0,1,v5,false,true,true,false,true,true,false);_nd(BD(qud(ZKd(a.eb),7),18),a.H,null,'eGenericType',0,1,v5,false,true,true,true,false,true,false);Xnd(a.ab,CK,'EStringToStringMapEntry',false,false,false);Vnd(BD(qud(ZKd(a.ab),0),34),a._,'key',null,0,1,CK,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.ab),1),34),a._,Bte,null,0,1,CK,false,false,true,false,true,false);Xnd(a.H,j5,tve,false,false,true);_nd(BD(qud(ZKd(a.H),0),18),a.H,null,'eUpperBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),1),18),a.H,null,'eTypeArguments',0,-1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),2),18),a.p,null,'eRawType',1,1,j5,true,false,false,false,true,false,true);_nd(BD(qud(ZKd(a.H),3),18),a.H,null,'eLowerBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),4),18),a.db,null,'eTypeParameter',0,1,j5,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.H),5),18),a.p,null,'eClassifier',0,1,j5,false,false,true,false,true,false,false);h=$nd(BD(qud(WKd(a.H),0),59),a.e,kwe);End(h,a.M,Jhe);Xnd(a.db,u5,xve,false,false,true);_nd(BD(qud(ZKd(a.db),0),18),a.H,null,'eBounds',0,-1,u5,false,false,true,true,false,false,false);Znd(a.c,bJ,'EBigDecimal',true);Znd(a.d,cJ,'EBigInteger',true);Znd(a.e,sbb,'EBoolean',true);Znd(a.f,wI,'EBooleanObject',true);Znd(a.i,SD,'EByte',true);Znd(a.g,GC(SD,1),'EByteArray',true);Znd(a.j,xI,'EByteObject',true);Znd(a.k,TD,'EChar',true);Znd(a.n,yI,'ECharacterObject',true);Znd(a.r,$J,'EDate',true);Znd(a.s,O4,'EDiagnosticChain',false);Znd(a.t,UD,'EDouble',true);Znd(a.u,BI,'EDoubleObject',true);Znd(a.fb,T4,'EEList',false);Znd(a.A,U4,'EEnumerator',false);Znd(a.C,O9,'EFeatureMap',false);Znd(a.D,E9,'EFeatureMapEntry',false);Znd(a.F,VD,'EFloat',true);Znd(a.G,FI,'EFloatObject',true);Znd(a.I,WD,'EInt',true);Znd(a.J,JI,'EIntegerObject',true);Znd(a.L,AI,'EJavaClass',true);Znd(a.M,SI,'EJavaObject',true);Znd(a.N,XD,'ELong',true);Znd(a.O,MI,'ELongObject',true);Znd(a.P,DK,'EMap',false);Znd(a.X,v8,'EResource',false);Znd(a.Y,u8,'EResourceSet',false);Znd(a.Z,rbb,'EShort',true);Znd(a.$,UI,'EShortObject',true);Znd(a._,ZI,'EString',true);Znd(a.cb,X4,'ETreeIterator',false);Znd(a.K,V4,'EInvocationTargetException',false);Rnd(a,_ve)} +var Jhe='object',Khe='boolean',Lhe='number',Mhe='string',Nhe='function',Ohe=2147483647,Phe='java.lang',Qhe={3:1},Rhe='com.google.common.base',She=', ',The='%s (%s) must not be negative',Uhe={3:1,4:1,5:1},Vhe='negative size: ',Whe='Optional.of(',Xhe='null',Yhe={198:1,47:1},Zhe='com.google.common.collect',$he={198:1,47:1,125:1},_he={224:1,3:1},aie={47:1},bie='java.util',cie={83:1},die={20:1,28:1,14:1},eie=1965,fie={20:1,28:1,14:1,21:1},gie={83:1,171:1,161:1},hie={20:1,28:1,14:1,21:1,84:1},iie={20:1,28:1,14:1,271:1,21:1,84:1},jie={47:1,125:1},kie={345:1,42:1},lie='AbstractMapEntry',mie='expectedValuesPerKey',nie={3:1,6:1,4:1,5:1},oie=16384,pie={164:1},qie={38:1},rie={l:4194303,m:4194303,h:524287},sie={196:1},tie={245:1,3:1,35:1},uie='range unbounded on this side',vie={20:1},wie={20:1,14:1},xie={3:1,20:1,28:1,14:1},yie={152:1,3:1,20:1,28:1,14:1,15:1,54:1},zie={3:1,4:1,5:1,165:1},Aie={3:1,83:1},Bie={20:1,14:1,21:1},Cie={3:1,20:1,28:1,14:1,21:1},Die={20:1,14:1,21:1,84:1},Eie=461845907,Fie=-862048943,Gie={3:1,6:1,4:1,5:1,165:1},Hie='expectedSize',Iie=1073741824,Jie='initialArraySize',Kie={3:1,6:1,4:1,9:1,5:1},Lie={20:1,28:1,52:1,14:1,15:1},Mie='arraySize',Nie={20:1,28:1,52:1,14:1,15:1,54:1},Oie={45:1},Pie={365:1},Qie=1.0E-4,Rie=-2147483648,Sie='__noinit__',Tie={3:1,102:1,60:1,78:1},Uie='com.google.gwt.core.client.impl',Vie='String',Wie='com.google.gwt.core.client',Xie='anonymous',Yie='fnStack',Zie='Unknown',$ie={195:1,3:1,4:1},_ie=1000,aje=65535,bje='January',cje='February',dje='March',eje='April',fje='May',gje='June',hje='July',ije='August',jje='September',kje='October',lje='November',mje='December',nje=1900,oje={48:1,3:1,4:1},pje='Before Christ',qje='Anno Domini',rje='Sunday',sje='Monday',tje='Tuesday',uje='Wednesday',vje='Thursday',wje='Friday',xje='Saturday',yje='com.google.gwt.i18n.shared',zje='DateTimeFormat',Aje='com.google.gwt.i18n.client',Bje='DefaultDateTimeFormatInfo',Cje={3:1,4:1,35:1,199:1},Dje='com.google.gwt.json.client',Eje=4194303,Fje=1048575,Gje=524288,Hje=4194304,Ije=17592186044416,Jje=1000000000,Kje=-17592186044416,Lje='java.io',Mje={3:1,102:1,73:1,60:1,78:1},Nje={3:1,289:1,78:1},Oje='For input string: "',Pje=Infinity,Qje=-Infinity,Rje=4096,Sje={3:1,4:1,364:1},Tje=65536,Uje=55296,Vje={104:1,3:1,4:1},Wje=100000,Xje=0.3010299956639812,Yje=4294967295,Zje=4294967296,$je='0.0',_je={42:1},ake={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},bke={3:1,20:1,28:1,52:1,14:1,15:1,54:1},cke={20:1,14:1,15:1},dke={3:1,62:1},eke={182:1},fke={3:1,4:1,83:1},gke={3:1,4:1,20:1,28:1,14:1,53:1,21:1},hke='delete',ike=1.4901161193847656E-8,jke=1.1102230246251565E-16,kke=15525485,lke=5.9604644775390625E-8,mke=16777216,nke=16777215,oke=', length: ',pke={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},qke={3:1,35:1,22:1,297:1},rke='java.util.function',ske='java.util.logging',tke={3:1,4:1,5:1,842:1},uke='undefined',vke='java.util.stream',wke={525:1,670:1},xke='fromIndex: ',yke=' > toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{"\' \t\r\n',nne=')]}"\' \t\r\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne="Node '",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse="Couldn't clone property '",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite="The feature '",jte="' is not a valid changeable feature",kte='Expecting null',lte="' is not a valid feature",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte="The datatype '",ute="' is not a valid classifier",vte="The value '",wte={190:1,3:1,4:1},xte="The class '",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte="An edge must have at least one source and one target (edge id: '",$te="').",_te='Referenced edge section does not exist: ',aue=" (edge id: '",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue="Passed edge is not 'simple'.",jue='org.eclipse.elk.graph.util',kue="The 'no duplicates' constraint is violated",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve="The value of type '",Zve="' must be of type '",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\i\\c*',Zwe='[\\i-[:]][\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',txe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',uxe='Private Use',vxe='ASSIGNED',wxe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()<b.length&&NC(b,eob(this.a.b).b.gc(),null);return b};var yF=mdb(Zhe,'ForwardingImmutableMap/1',1069);bcb(1981,1980,Cie);_.Kc=function Tn(){return this.Ed()};_.Nc=function Un(){return new Kub(this,1)};_.Fb=function Rn(a){return Ax(this,a)};_.Hb=function Sn(){return Bx(this)};var jG=mdb(Zhe,'ImmutableSet',1981);bcb(703,1981,Cie);_.Kc=function ao(){return vr(new Dnb(this.a.b.Kc()))};_.Hc=function Xn(a){return a!=null&&hnb(this.a,a)};_.Ic=function Yn(a){return inb(this.a,a)};_.Hb=function Zn(){return tb(this.a.b)};_.dc=function $n(){return this.a.b.dc()};_.Ed=function _n(){return vr(new Dnb(this.a.b.Kc()))};_.gc=function bo(){return this.a.b.gc()};_.Pc=function co(){return this.a.b.Pc()};_.Qc=function eo(a){return knb(this.a,a)};_.Ib=function fo(){return fcb(this.a.b)};var AF=mdb(Zhe,'ForwardingImmutableSet',703);bcb(1975,1974,Die);_.Bd=function go(){return this.b};_.Cd=function ho(){return this.b};_.Md=function io(){return this.b};_.Nc=function jo(){return new Rub(this)};var DF=mdb(Zhe,'ForwardingSortedSet',1975);bcb(533,1979,Aie,wo);_.Ac=function Fo(a){Ld(this,a)};_.Cc=function Io(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.$b=function xo(){ko(this)};_._b=function yo(a){return !!uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))))};_.uc=function zo(a){return lo(this,a)};_.kc=function Ao(){return new Qo(this,this)};_.wc=function Bo(a){no(this,a)};_.xc=function Co(a){return oo(this,a)};_.ec=function Do(){return new Bp(this)};_.zc=function Eo(a,b){return ro(this,a,b)};_.Bc=function Go(a){var b;b=uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function Ho(){return this.i};_.pd=function Jo(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.f=0;_.g=0;_.i=0;var QF=mdb(Zhe,'HashBiMap',533);bcb(534,1,aie);_.Nb=function Mo(a){Rrb(this,a)};_.Ob=function No(){return Ko(this)};_.Pb=function Oo(){var a;if(!Ko(this)){throw vbb(new utb)}a=this.c;this.c=a.c;this.f=a;--this.d;return this.Nd(a)};_.Qb=function Po(){if(this.e.g!=this.b){throw vbb(new Apb)}Vb(!!this.f);mo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var NF=mdb(Zhe,'HashBiMap/Itr',534);bcb(1011,534,aie,Qo);_.Nd=function Ro(a){return new So(this,a)};var FF=mdb(Zhe,'HashBiMap/1',1011);bcb(1012,345,kie,So);_.cd=function To(){return this.a.g};_.dd=function Uo(){return this.a.i};_.ed=function Vo(a){var b,c,d;c=this.a.i;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(d==this.a.f&&(PD(a)===PD(c)||a!=null&&pb(a,c))){return a}Nb(!vo(this.b.a,a,d),a);mo(this.b.a,this.a);b=new $o(this.a.g,this.a.a,a,d);po(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var EF=mdb(Zhe,'HashBiMap/1/MapEntry',1012);bcb(238,345,{345:1,238:1,3:1,42:1},Wo);_.cd=function Xo(){return this.g};_.dd=function Yo(){return this.i};_.ed=function Zo(a){throw vbb(new bgb)};var XF=mdb(Zhe,'ImmutableEntry',238);bcb(317,238,{345:1,317:1,238:1,3:1,42:1},$o);_.a=0;_.f=0;var GF=mdb(Zhe,'HashBiMap/BiEntry',317);bcb(610,1979,Aie,ap);_.Ac=function jp(a){Ld(this,a)};_.Cc=function mp(){return new Bp(this.a)};_.$b=function bp(){ko(this.a)};_._b=function cp(a){return lo(this.a,a)};_.kc=function dp(){return new op(this,this.a)};_.wc=function ep(a){Qb(a);no(this.a,new zp(a))};_.xc=function fp(a){return _o(this,a)};_.ec=function gp(){return new up(this)};_.zc=function ip(a,b){return so(this.a,a,b,false)};_.Bc=function kp(a){var b;b=vo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function lp(){return this.a.i};_.pd=function np(){return new Bp(this.a)};var MF=mdb(Zhe,'HashBiMap/Inverse',610);bcb(1008,534,aie,op);_.Nd=function pp(a){return new qp(this,a)};var IF=mdb(Zhe,'HashBiMap/Inverse/1',1008);bcb(1009,345,kie,qp);_.cd=function rp(){return this.a.i};_.dd=function sp(){return this.a.g};_.ed=function tp(a){var b,c,d;d=this.a.g;b=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(b==this.a.a&&(PD(a)===PD(d)||a!=null&&pb(a,d))){return a}Nb(!uo(this.b.a.a,a,b),a);mo(this.b.a.a,this.a);c=new $o(a,b,this.a.i,this.a.f);this.a=c;po(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var HF=mdb(Zhe,'HashBiMap/Inverse/1/InverseEntry',1009);bcb(611,532,fie,up);_.Kc=function vp(){return new xp(this.a.a)};_.Mc=function wp(a){var b;b=vo(this.a.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a.a,b);return true}};var KF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet',611);bcb(1007,534,aie,xp);_.Nd=function yp(a){return a.i};var JF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet/1',1007);bcb(1010,1,{},zp);_.Od=function Ap(a,b){hp(this.a,a,b)};var LF=mdb(Zhe,'HashBiMap/Inverse/lambda$0$Type',1010);bcb(609,532,fie,Bp);_.Kc=function Cp(){return new Ep(this.a)};_.Mc=function Dp(a){var b;b=uo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a,b);b.e=null;b.c=null;return true}};var PF=mdb(Zhe,'HashBiMap/KeySet',609);bcb(1006,534,aie,Ep);_.Nd=function Fp(a){return a.g};var OF=mdb(Zhe,'HashBiMap/KeySet/1',1006);bcb(1093,619,_he);var RF=mdb(Zhe,'HashMultimapGwtSerializationDependencies',1093);bcb(265,1093,_he,Hp);_.hc=function Ip(){return new Uqb(Cv(this.a))};_.gd=function Jp(){return new Uqb(Cv(this.a))};_.a=2;var SF=mdb(Zhe,'HashMultimap',265);bcb(1999,152,yie);_.Hc=function Mp(a){return this.Pd().Hc(a)};_.dc=function Np(){return this.Pd().dc()};_.gc=function Op(){return this.Pd().gc()};var TF=mdb(Zhe,'ImmutableAsList',1999);bcb(1931,715,Aie);_.Ld=function Qp(){return Ql(),new oy(this.a)};_.Cc=function Rp(){return Ql(),new oy(this.a)};_.pd=function Sp(){return Ql(),new oy(this.a)};var UF=mdb(Zhe,'ImmutableBiMap',1931);bcb(1977,1,{});var VF=mdb(Zhe,'ImmutableCollection/Builder',1977);bcb(1022,703,Cie,Tp);var YF=mdb(Zhe,'ImmutableEnumSet',1022);bcb(969,386,$he,Vp);_.Xb=function Wp(a){return this.a.Xb(a)};var ZF=mdb(Zhe,'ImmutableList/1',969);bcb(968,1977,{},Xp);var $F=mdb(Zhe,'ImmutableList/Builder',968);bcb(614,198,Yhe,Yp);_.Ob=function Zp(){return this.a.Ob()};_.Pb=function $p(){return BD(this.a.Pb(),42).cd()};var aG=mdb(Zhe,'ImmutableMap/1',614);bcb(1041,1,{},_p);_.Kb=function aq(a){return BD(a,42).cd()};var bG=mdb(Zhe,'ImmutableMap/2methodref$getKey$Type',1041);bcb(1040,1,{},cq);var cG=mdb(Zhe,'ImmutableMap/Builder',1040);bcb(2000,1981,Cie);_.Kc=function gq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Dd=function dq(){return new Fq(this)};_.Jc=function eq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.td(BD(Rl(Wm(this.a)).Xb(b),42).cd())}};_.Ed=function fq(){var a;return (a=this.c,!a?(this.c=new Fq(this)):a).Ed()};_.Nc=function hq(){return Zj(this.gc(),1296,new Dq(this))};var mG=mdb(Zhe,'IndexedImmutableSet',2000);bcb(1180,2000,Cie,jq);_.Kc=function nq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Hc=function kq(a){return this.a._b(a)};_.Jc=function lq(a){Qb(a);stb(this.a,new qq(a))};_.Ed=function mq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.gc=function oq(){return this.a.gc()};_.Nc=function pq(){return $j(Wm(this.a).Nc(),new _p)};var eG=mdb(Zhe,'ImmutableMapKeySet',1180);bcb(1181,1,{},qq);_.Od=function rq(a,b){Ql();this.a.td(a)};var dG=mdb(Zhe,'ImmutableMapKeySet/lambda$0$Type',1181);bcb(1178,1980,xie,sq);_.Kc=function vq(){return new Aq(this)};_.Hc=function tq(a){return a!=null&&jr(new Aq(this),a)};_.Ed=function uq(){return new Aq(this)};_.gc=function wq(){return this.a.gc()};_.Nc=function xq(){return $j(Wm(this.a).Nc(),new yq)};var hG=mdb(Zhe,'ImmutableMapValues',1178);bcb(1179,1,{},yq);_.Kb=function zq(a){return BD(a,42).dd()};var fG=mdb(Zhe,'ImmutableMapValues/0methodref$getValue$Type',1179);bcb(626,198,Yhe,Aq);_.Ob=function Bq(){return this.a.Ob()};_.Pb=function Cq(){return BD(this.a.Pb(),42).dd()};var gG=mdb(Zhe,'ImmutableMapValues/1',626);bcb(1182,1,{},Dq);_.ld=function Eq(a){return iq(this.a,a)};var kG=mdb(Zhe,'IndexedImmutableSet/0methodref$get$Type',1182);bcb(752,1999,yie,Fq);_.Pd=function Gq(){return this.a};_.Xb=function Hq(a){return iq(this.a,a)};_.gc=function Iq(){return this.a.a.gc()};var lG=mdb(Zhe,'IndexedImmutableSet/1',752);bcb(44,1,{},Sq);_.Kb=function Tq(a){return BD(a,20).Kc()};_.Fb=function Uq(a){return this===a};var nG=mdb(Zhe,'Iterables/10',44);bcb(1042,537,vie,Wq);_.Jc=function Xq(a){Qb(a);this.b.Jc(new $q(this.a,a))};_.Kc=function Yq(){return Vq(this)};var pG=mdb(Zhe,'Iterables/4',1042);bcb(1043,1,qie,$q);_.td=function _q(a){Zq(this.b,this.a,a)};var oG=mdb(Zhe,'Iterables/4/lambda$0$Type',1043);bcb(1044,537,vie,ar);_.Jc=function br(a){Qb(a);reb(this.a,new dr(a,this.b))};_.Kc=function cr(){return ur(new Fyd(this.a),this.b)};var rG=mdb(Zhe,'Iterables/5',1044);bcb(1045,1,qie,dr);_.td=function er(a){this.a.td(Gfd(a))};var qG=mdb(Zhe,'Iterables/5/lambda$0$Type',1045);bcb(1071,198,Yhe,wr);_.Ob=function xr(){return this.a.Ob()};_.Pb=function yr(){return this.a.Pb()};var sG=mdb(Zhe,'Iterators/1',1071);bcb(1072,699,Yhe,zr);_.Yb=function Ar(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var tG=mdb(Zhe,'Iterators/5',1072);bcb(487,1,aie);_.Nb=function Cr(a){Rrb(this,a)};_.Ob=function Dr(){return this.b.Ob()};_.Pb=function Er(){return this.Qd(this.b.Pb())};_.Qb=function Fr(){this.b.Qb()};var KH=mdb(Zhe,'TransformedIterator',487);bcb(1073,487,aie,Gr);_.Qd=function Hr(a){return this.a.Kb(a)};var uG=mdb(Zhe,'Iterators/6',1073);bcb(717,198,Yhe,Ir);_.Ob=function Jr(){return !this.a};_.Pb=function Kr(){if(this.a){throw vbb(new utb)}this.a=true;return this.b};_.a=false;var vG=mdb(Zhe,'Iterators/9',717);bcb(1070,386,$he,Nr);_.Xb=function Or(a){return this.a[this.b+a]};_.b=0;var Lr;var wG=mdb(Zhe,'Iterators/ArrayItr',1070);bcb(39,1,{39:1,47:1},Sr);_.Nb=function Tr(a){Rrb(this,a)};_.Ob=function Ur(){return Qr(this)};_.Pb=function Vr(){return Rr(this)};_.Qb=function Wr(){Vb(!!this.c);this.c.Qb();this.c=null};var xG=mdb(Zhe,'Iterators/ConcatenatedIterator',39);bcb(22,1,{3:1,35:1,22:1});_.wd=function _r(a){return Xr(this,BD(a,22))};_.Fb=function bs(a){return this===a};_.Hb=function cs(){return FCb(this)};_.Ib=function ds(){return Zr(this)};_.g=0;var CI=mdb(Phe,'Enum',22);bcb(538,22,{538:1,3:1,35:1,22:1,47:1},is);_.Nb=function js(a){Rrb(this,a)};_.Ob=function ks(){return false};_.Pb=function ls(){throw vbb(new utb)};_.Qb=function ms(){Vb(false)};var gs;var yG=ndb(Zhe,'Iterators/EmptyModifiableIterator',538,CI,os,ns);var ps;bcb(1834,619,_he);var EG=mdb(Zhe,'LinkedHashMultimapGwtSerializationDependencies',1834);bcb(1835,1834,_he,ss);_.hc=function us(){return new Asb(Cv(this.b))};_.$b=function ts(){Nc(this);As(this.a,this.a)};_.gd=function vs(){return new Asb(Cv(this.b))};_.ic=function ws(a){return new Ss(this,a,this.b)};_.kc=function xs(){return new Hs(this)};_.lc=function ys(){var a;return new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17)};_.ec=function zs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Cs(){return new Ov(new Hs(this))};_.oc=function Ds(){var a;return $j(new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17),new Es)};_.b=2;var FG=mdb(Zhe,'LinkedHashMultimap',1835);bcb(1838,1,{},Es);_.Kb=function Fs(a){return BD(a,42).dd()};var zG=mdb(Zhe,'LinkedHashMultimap/0methodref$getValue$Type',1838);bcb(824,1,aie,Hs);_.Nb=function Is(a){Rrb(this,a)};_.Pb=function Ks(){return Gs(this)};_.Ob=function Js(){return this.a!=this.b.a};_.Qb=function Ls(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var AG=mdb(Zhe,'LinkedHashMultimap/1',824);bcb(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},Ms);_.Rd=function Ns(){return this.f};_.Sd=function Os(a){this.c=a};_.Td=function Ps(a){this.f=a};_.d=0;var BG=mdb(Zhe,'LinkedHashMultimap/ValueEntry',330);bcb(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Ss);_.Fc=function Ts(a){var b,c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new Ms(this.c,a,f,e);Bs(this.d,d);d.f=this;this.d=d;As(this.g.a.b,d);As(d,this.g.a);this.b[b]=d;++this.f;++this.e;Qs(this);return true};_.$b=function Us(){var a,b;Alb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a.Rd()){b=BD(a,330);As(b.b,b.e)}this.a=this;this.d=this;++this.e};_.Hc=function Vs(a){var b,c;c=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function Ws(a){var b;Qb(a);for(b=this.a;b!=this;b=b.Rd()){a.td(BD(b,330).i)}};_.Rd=function Xs(){return this.a};_.Kc=function Ys(){return new ct(this)};_.Mc=function Zs(a){return Rs(this,a)};_.Sd=function $s(a){this.d=a};_.Td=function _s(a){this.a=a};_.gc=function at(){return this.f};_.e=0;_.f=0;var DG=mdb(Zhe,'LinkedHashMultimap/ValueSet',1836);bcb(1837,1,aie,ct);_.Nb=function dt(a){Rrb(this,a)};_.Ob=function et(){return bt(this),this.b!=this.c};_.Pb=function ft(){var a,b;bt(this);if(this.b==this.c){throw vbb(new utb)}a=BD(this.b,330);b=a.i;this.d=a;this.b=a.f;return b};_.Qb=function gt(){bt(this);Vb(!!this.d);Rs(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var CG=mdb(Zhe,'LinkedHashMultimap/ValueSet/1',1837);bcb(766,1986,_he,mt);_.Zb=function nt(){var a;return a=this.f,!a?(this.f=new jw(this)):a};_.Fb=function tt(a){return hw(this,a)};_.cc=function ut(a){return new bu(this,a)};_.fc=function xt(a){return kt(this,a)};_.$b=function pt(){it(this)};_._b=function qt(a){return jt(this,a)};_.ac=function rt(){return new jw(this)};_.bc=function st(){return new eu(this)};_.qc=function vt(a){return new bu(this,a)};_.dc=function wt(){return !this.a};_.rc=function yt(a){return kt(this,a)};_.gc=function zt(){return this.d};_.c=0;_.d=0;var MG=mdb(Zhe,'LinkedListMultimap',766);bcb(52,28,Lie);_.ad=function Pt(a){ktb(this,a)};_.Nc=function Qt(){return new Kub(this,16)};_.Vc=function Ct(a,b){throw vbb(new cgb('Add not supported on this list'))};_.Fc=function Dt(a){this.Vc(this.gc(),a);return true};_.Wc=function Et(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.Vc(a++,d);c=true}return c};_.$b=function Ft(){this.Ud(0,this.gc())};_.Fb=function Gt(a){return At(this,a)};_.Hb=function Ht(){return qmb(this)};_.Xc=function It(a){return Bt(this,a)};_.Kc=function Jt(){return new vib(this)};_.Yc=function Kt(){return this.Zc(0)};_.Zc=function Lt(a){return new Bib(this,a)};_.$c=function Mt(a){throw vbb(new cgb('Remove not supported on this list'))};_.Ud=function Nt(a,b){var c,d;d=this.Zc(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_._c=function Ot(a,b){throw vbb(new cgb('Set not supported on this list'))};_.bd=function Rt(a,b){return new Jib(this,a,b)};_.j=0;var kJ=mdb(bie,'AbstractList',52);bcb(1964,52,Lie);_.Vc=function Wt(a,b){St(this,a,b)};_.Wc=function Xt(a,b){return Tt(this,a,b)};_.Xb=function Yt(a){return Ut(this,a)};_.Kc=function Zt(){return this.Zc(0)};_.$c=function $t(a){return Vt(this,a)};_._c=function _t(b,c){var d,e;d=this.Zc(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't set element "+b))}else throw vbb(a)}};var yJ=mdb(bie,'AbstractSequentialList',1964);bcb(636,1964,Lie,bu);_.Zc=function cu(a){return au(this,a)};_.gc=function du(){var a;a=BD(Ohb(this.a.b,this.b),283);return !a?0:a.a};var HG=mdb(Zhe,'LinkedListMultimap/1',636);bcb(1297,1970,fie,eu);_.Hc=function fu(a){return jt(this.a,a)};_.Kc=function gu(){return new ku(this.a)};_.Mc=function hu(a){return !kt(this.a,a).a.dc()};_.gc=function iu(){return Vhb(this.a.b)};var GG=mdb(Zhe,'LinkedListMultimap/1KeySetImpl',1297);bcb(1296,1,aie,ku);_.Nb=function lu(a){Rrb(this,a)};_.Ob=function mu(){ju(this);return !!this.c};_.Pb=function nu(){ju(this);ot(this.c);this.a=this.c;Qqb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Qqb(this.d,this.c.a));return this.a.a};_.Qb=function ou(){ju(this);Vb(!!this.a);ir(new wu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var IG=mdb(Zhe,'LinkedListMultimap/DistinctKeyIterator',1296);bcb(283,1,{283:1},pu);_.a=0;var JG=mdb(Zhe,'LinkedListMultimap/KeyList',283);bcb(1295,345,kie,qu);_.cd=function ru(){return this.a};_.dd=function su(){return this.f};_.ed=function tu(a){var b;b=this.f;this.f=a;return b};var KG=mdb(Zhe,'LinkedListMultimap/Node',1295);bcb(560,1,jie,wu,xu);_.Nb=function zu(a){Rrb(this,a)};_.Rb=function yu(a){this.e=ht(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Au(){return !!this.c};_.Sb=function Bu(){return !!this.e};_.Pb=function Cu(){return uu(this)};_.Tb=function Du(){return this.d};_.Ub=function Eu(){return vu(this)};_.Vb=function Fu(){return this.d-1};_.Qb=function Gu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}lt(this.f,this.a);this.a=null};_.Wb=function Hu(a){Ub(!!this.a);this.a.f=a};_.d=0;var LG=mdb(Zhe,'LinkedListMultimap/ValueForKeyIterator',560);bcb(1018,52,Lie);_.Vc=function Tu(a,b){this.a.Vc(a,b)};_.Wc=function Uu(a,b){return this.a.Wc(a,b)};_.Hc=function Vu(a){return this.a.Hc(a)};_.Xb=function Wu(a){return this.a.Xb(a)};_.$c=function Xu(a){return this.a.$c(a)};_._c=function Yu(a,b){return this.a._c(a,b)};_.gc=function Zu(){return this.a.gc()};var OG=mdb(Zhe,'Lists/AbstractListWrapper',1018);bcb(1019,1018,Nie);var PG=mdb(Zhe,'Lists/RandomAccessListWrapper',1019);bcb(1021,1019,Nie,$u);_.Zc=function _u(a){return this.a.Zc(a)};var NG=mdb(Zhe,'Lists/1',1021);bcb(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},dv);_.Vc=function ev(a,b){this.a.Vc(cv(this,a),b)};_.$b=function fv(){this.a.$b()};_.Xb=function gv(a){return this.a.Xb(bv(this,a))};_.Kc=function hv(){return av(this,0)};_.Zc=function iv(a){return av(this,a)};_.$c=function jv(a){return this.a.$c(bv(this,a))};_.Ud=function kv(a,b){(Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))).$b()};_._c=function lv(a,b){return this.a._c(bv(this,a),b)};_.gc=function mv(){return this.a.gc()};_.bd=function nv(a,b){return Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))};var SG=mdb(Zhe,'Lists/ReverseList',131);bcb(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},ov);var QG=mdb(Zhe,'Lists/RandomAccessReverseList',280);bcb(1020,1,jie,qv);_.Nb=function sv(a){Rrb(this,a)};_.Rb=function rv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function tv(){return this.c.Sb()};_.Sb=function uv(){return this.c.Ob()};_.Pb=function vv(){return pv(this)};_.Tb=function wv(){return cv(this.b,this.c.Tb())};_.Ub=function xv(){if(!this.c.Ob()){throw vbb(new utb)}this.a=true;return this.c.Pb()};_.Vb=function yv(){return cv(this.b,this.c.Tb())-1};_.Qb=function zv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Av(a){Ub(this.a);this.c.Wb(a)};_.a=false;var RG=mdb(Zhe,'Lists/ReverseList/1',1020);bcb(432,487,aie,Mv);_.Qd=function Nv(a){return Lv(a)};var TG=mdb(Zhe,'Maps/1',432);bcb(698,487,aie,Ov);_.Qd=function Pv(a){return BD(a,42).dd()};var UG=mdb(Zhe,'Maps/2',698);bcb(962,487,aie,Qv);_.Qd=function Rv(a){return new Wo(a,ww(this.a,a))};var VG=mdb(Zhe,'Maps/3',962);bcb(959,1971,fie,Sv);_.Jc=function Tv(a){mj(this.a,a)};_.Kc=function Uv(){return this.a.kc()};_.Rc=function Vv(){return this.a};_.Nc=function Wv(){return this.a.lc()};var XG=mdb(Zhe,'Maps/IteratorBasedAbstractMap/1',959);bcb(960,1,{},Xv);_.Od=function Yv(a,b){this.a.td(a)};var ZG=mdb(Zhe,'Maps/KeySet/lambda$0$Type',960);bcb(958,28,die,Zv);_.$b=function $v(){this.a.$b()};_.Hc=function _v(a){return this.a.uc(a)};_.Jc=function aw(a){Qb(a);this.a.wc(new fw(a))};_.dc=function bw(){return this.a.dc()};_.Kc=function cw(){return new Ov(this.a.vc().Kc())};_.Mc=function dw(b){var c,d;try{return ze(this,b,true)}catch(a){a=ubb(a);if(JD(a,41)){for(d=this.a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);if(Hb(b,c.dd())){this.a.Bc(c.cd());return true}}return false}else throw vbb(a)}};_.gc=function ew(){return this.a.gc()};var aH=mdb(Zhe,'Maps/Values',958);bcb(961,1,{},fw);_.Od=function gw(a,b){this.a.td(b)};var _G=mdb(Zhe,'Maps/Values/lambda$0$Type',961);bcb(736,1987,cie,jw);_.xc=function nw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function qw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function kw(){this.a.$b()};_._b=function lw(a){return this.a._b(a)};_.Ec=function mw(){return new sw(this)};_.Dc=function(){return this.Ec()};_.dc=function ow(){return this.a.dc()};_.ec=function pw(){return this.a.ec()};_.gc=function rw(){return this.a.ec().gc()};var eH=mdb(Zhe,'Multimaps/AsMap',736);bcb(1104,1971,fie,sw);_.Kc=function tw(){return Bv(this.a.a.ec(),new xw(this))};_.Rc=function uw(){return this.a};_.Mc=function vw(a){var b;if(!Ze(this,a)){return false}b=BD(a,42);iw(this.a,b.cd());return true};var dH=mdb(Zhe,'Multimaps/AsMap/EntrySet',1104);bcb(1108,1,{},xw);_.Kb=function yw(a){return ww(this,a)};_.Fb=function zw(a){return this===a};var cH=mdb(Zhe,'Multimaps/AsMap/EntrySet/1',1108);bcb(543,1989,{543:1,835:1,20:1,28:1,14:1},Cw);_.$b=function Dw(){Nc(this.a)};_.Hc=function Ew(a){return Oc(this.a,a)};_.Jc=function Fw(a){Qb(a);reb(Pc(this.a),new Rw(a))};_.Kc=function Gw(){return new Mv(Pc(this.a).a.kc())};_.gc=function Hw(){return this.a.d};_.Nc=function Iw(){return $j(Pc(this.a).Nc(),new Jw)};var kH=mdb(Zhe,'Multimaps/Keys',543);bcb(1106,1,{},Jw);_.Kb=function Kw(a){return BD(a,42).cd()};var gH=mdb(Zhe,'Multimaps/Keys/0methodref$getKey$Type',1106);bcb(1105,487,aie,Lw);_.Qd=function Mw(a){return new Qw(BD(a,42))};var iH=mdb(Zhe,'Multimaps/Keys/1',1105);bcb(1990,1,{416:1});_.Fb=function Nw(a){var b;if(JD(a,492)){b=BD(a,416);return BD(this.a.dd(),14).gc()==BD(b.a.dd(),14).gc()&&Hb(this.a.cd(),b.a.cd())}return false};_.Hb=function Ow(){var a;a=this.a.cd();return (a==null?0:tb(a))^BD(this.a.dd(),14).gc()};_.Ib=function Pw(){var a,b;b=xfb(this.a.cd());a=BD(this.a.dd(),14).gc();return a==1?b:b+' x '+a};var oH=mdb(Zhe,'Multisets/AbstractEntry',1990);bcb(492,1990,{492:1,416:1},Qw);var hH=mdb(Zhe,'Multimaps/Keys/1/1',492);bcb(1107,1,qie,Rw);_.td=function Sw(a){this.a.td(BD(a,42).cd())};var jH=mdb(Zhe,'Multimaps/Keys/lambda$1$Type',1107);bcb(1110,1,qie,Vw);_.td=function Ww(a){Tw(BD(a,416))};var lH=mdb(Zhe,'Multiset/lambda$0$Type',1110);bcb(737,1,qie,Xw);_.td=function Yw(a){Uw(this.a,BD(a,416))};var mH=mdb(Zhe,'Multiset/lambda$1$Type',737);bcb(1111,1,{},bx);var nH=mdb(Zhe,'Multisets/0methodref$add$Type',1111);bcb(738,1,{},cx);_.Kb=function dx(a){return _w(BD(a,416))};var qH=mdb(Zhe,'Multisets/lambda$3$Type',738);bcb(2008,1,Qhe);var rH=mdb(Zhe,'RangeGwtSerializationDependencies',2008);bcb(514,2008,{169:1,514:1,3:1,45:1},gx);_.Lb=function hx(a){return fx(this,BD(a,35))};_.Mb=function lx(a){return fx(this,BD(a,35))};_.Fb=function jx(a){var b;if(JD(a,514)){b=BD(a,514);return Ek(this.a,b.a)&&Ek(this.b,b.b)}return false};_.Hb=function kx(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function mx(){return nx(this.a,this.b)};var sH=mdb(Zhe,'Range',514);bcb(778,1999,yie,px);_.Zc=function tx(a){return jm(this.b,a)};_.Pd=function qx(){return this.a};_.Xb=function rx(a){return Em(this.b,a)};_.Fd=function sx(a){return jm(this.b,a)};var tH=mdb(Zhe,'RegularImmutableAsList',778);bcb(646,2006,yie,ux);_.Hd=function vx(){return this.a};var uH=mdb(Zhe,'RegularImmutableList',646);bcb(616,715,Aie,wx);var vH=mdb(Zhe,'RegularImmutableMap',616);bcb(716,703,Cie,zx);var xx;var wH=mdb(Zhe,'RegularImmutableSet',716);bcb(1976,eie,fie);_.Kc=function Mx(){return new Xx(this.a,this.b)};_.Fc=function Jx(a){throw vbb(new bgb)};_.Gc=function Kx(a){throw vbb(new bgb)};_.$b=function Lx(){throw vbb(new bgb)};_.Mc=function Nx(a){throw vbb(new bgb)};var CH=mdb(Zhe,'Sets/SetView',1976);bcb(963,1976,fie,Px);_.Kc=function Tx(){return new Xx(this.a,this.b)};_.Hc=function Qx(a){return tqb(this.a,a)&&this.b.Hc(a)};_.Ic=function Rx(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function Sx(){return omb(this.b,this.a)};_.Lc=function Ux(){return JAb(new YAb(null,new Kub(this.a,1)),new _x(this.b))};_.gc=function Vx(){return Ox(this)};_.Oc=function Wx(){return JAb(new YAb(null,new Kub(this.a,1)),new Zx(this.b))};var AH=mdb(Zhe,'Sets/2',963);bcb(700,699,Yhe,Xx);_.Yb=function Yx(){var a;while(Eqb(this.a)){a=Fqb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var xH=mdb(Zhe,'Sets/2/1',700);bcb(964,1,Oie,Zx);_.Mb=function $x(a){return this.a.Hc(a)};var yH=mdb(Zhe,'Sets/2/4methodref$contains$Type',964);bcb(965,1,Oie,_x);_.Mb=function ay(a){return this.a.Hc(a)};var zH=mdb(Zhe,'Sets/2/5methodref$contains$Type',965);bcb(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},by);_.Bd=function cy(){return this.b};_.Cd=function dy(){return this.b};_.Md=function ey(){return this.b};_.Jc=function fy(a){this.a.Jc(a)};_.Lc=function gy(){return this.a.Lc()};_.Oc=function hy(){return this.a.Oc()};var DH=mdb(Zhe,'Sets/UnmodifiableNavigableSet',607);bcb(1932,1931,Aie,iy);_.Ld=function jy(){return Ql(),new oy(this.a)};_.Cc=function ky(){return Ql(),new oy(this.a)};_.pd=function ly(){return Ql(),new oy(this.a)};var EH=mdb(Zhe,'SingletonImmutableBiMap',1932);bcb(647,2006,yie,my);_.Hd=function ny(){return this.a};var FH=mdb(Zhe,'SingletonImmutableList',647);bcb(350,1981,Cie,oy);_.Kc=function ry(){return new Ir(this.a)};_.Hc=function py(a){return pb(this.a,a)};_.Ed=function qy(){return new Ir(this.a)};_.gc=function sy(){return 1};var GH=mdb(Zhe,'SingletonImmutableSet',350);bcb(1115,1,{},vy);_.Kb=function wy(a){return BD(a,164)};var HH=mdb(Zhe,'Streams/lambda$0$Type',1115);bcb(1116,1,Pie,xy);_.Vd=function yy(){uy(this.a)};var IH=mdb(Zhe,'Streams/lambda$1$Type',1116);bcb(1659,1658,_he,Ay);_.Zb=function By(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.hc=function Ey(){return new Hxb(this.b)};_.gd=function Fy(){return new Hxb(this.b)};_.ec=function Hy(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.ac=function Dy(){return JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)};_.ic=function Gy(a){a==null&&this.a.ue(a,a);return new Hxb(this.b)};var LH=mdb(Zhe,'TreeMultimap',1659);bcb(78,1,{3:1,78:1});_.Wd=function $y(a){return new Error(a)};_.Xd=function az(){return this.e};_.Yd=function bz(){return XAb(NAb(Plb((this.k==null&&(this.k=KC(_I,nie,78,0,0,1)),this.k)),new _fb),new bBb)};_.Zd=function cz(){return this.f};_.$d=function dz(){return this.g};_._d=function ez(){Vy(this,_y(this.Wd(Wy(this,this.g))));Sz(this)};_.Ib=function fz(){return Wy(this,this.$d())};_.e=Sie;_.i=false;_.n=true;var _I=mdb(Phe,'Throwable',78);bcb(102,78,{3:1,102:1,78:1});var EI=mdb(Phe,'Exception',102);bcb(60,102,Tie,gz,hz);var TI=mdb(Phe,'RuntimeException',60);bcb(598,60,Tie);var LI=mdb(Phe,'JsException',598);bcb(863,598,Tie);var RH=mdb(Uie,'JavaScriptExceptionBase',863);bcb(477,863,{477:1,3:1,102:1,60:1,78:1},lz);_.$d=function oz(){kz(this);return this.c};_.ae=function pz(){return PD(this.b)===PD(iz)?null:this.b};var iz;var OH=mdb(Wie,'JavaScriptException',477);var PH=mdb(Wie,'JavaScriptObject$',0);var tz;bcb(1948,1,{});var QH=mdb(Wie,'Scheduler',1948);var xz=0,yz=0,zz=-1;bcb(890,1948,{},Nz);var Jz;var SH=mdb(Uie,'SchedulerImpl',890);var Qz;bcb(1960,1,{});var WH=mdb(Uie,'StackTraceCreator/Collector',1960);bcb(864,1960,{},Yz);_.be=function Zz(a){var b={},j;var c=[];a[Yie]=c;var d=arguments.callee.caller;while(d){var e=(Rz(),d.name||(d.name=Uz(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.ce=function $z(a){var b,c,d,e;d=(Rz(),a&&a[Yie]?a[Yie]:[]);c=d.length;e=KC(VI,nie,310,c,0,1);for(b=0;b<c;b++){e[b]=new Zeb(d[b],null,-1)}return e};var TH=mdb(Uie,'StackTraceCreator/CollectorLegacy',864);bcb(1961,1960,{});_.be=function aA(a){};_.de=function bA(a,b,c,d){return new Zeb(b,a+'@'+d,c<0?-1:c)};_.ce=function cA(a){var b,c,d,e,f,g;e=Wz(a);f=KC(VI,nie,310,0,0,1);b=0;d=e.length;if(d==0){return f}g=_z(this,e[0]);dfb(g.d,Xie)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=_z(this,e[c])}return f};var VH=mdb(Uie,'StackTraceCreator/CollectorModern',1961);bcb(865,1961,{},dA);_.de=function eA(a,b,c,d){return new Zeb(b,a,-1)};var UH=mdb(Uie,'StackTraceCreator/CollectorModernNoSourceMap',865);bcb(1050,1,{});var cI=mdb(yje,zje,1050);bcb(615,1050,{615:1},HA);var FA;var XH=mdb(Aje,zje,615);bcb(2001,1,{});var dI=mdb(yje,Bje,2001);bcb(2002,2001,{});var YH=mdb(Aje,Bje,2002);bcb(1090,1,{},MA);var JA;var ZH=mdb(Aje,'LocaleInfo',1090);bcb(1918,1,{},PA);_.a=0;var _H=mdb(Aje,'TimeZone',1918);bcb(1258,2002,{},VA);var aI=mdb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1258);bcb(434,1,{434:1},WA);_.a=false;_.b=0;var bI=mdb(yje,'DateTimeFormat/PatternPart',434);bcb(199,1,Cje,eB,fB,gB);_.wd=function hB(a){return XA(this,BD(a,199))};_.Fb=function iB(a){return JD(a,199)&&Bbb(Cbb(this.q.getTime()),Cbb(BD(a,199).q.getTime()))};_.Hb=function jB(){var a;a=Cbb(this.q.getTime());return Tbb(Vbb(a,Pbb(a,32)))};_.Ib=function lB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=She,g);Qfb(g,vz(b));g.a+=':';Pfb(g,aC(this,b))}g.a+='}';return g.a};var lI=mdb(Dje,'JSONObject',183);bcb(596,eie,fie,mC);_.Hc=function nC(a){return ND(a)&&_B(this.a,GD(a))};_.Kc=function oC(){return new vib(new amb(this.b))};_.gc=function pC(){return this.b.length};var kI=mdb(Dje,'JSONObject/1',596);var qC;bcb(204,1966,{204:1},yC);_.Fb=function zC(a){if(!JD(a,204)){return false}return dfb(this.a,BD(a,204).a)};_.ee=function AC(){return EC};_.Hb=function BC(){return LCb(this.a)};_.je=function CC(){return this};_.Ib=function DC(){return vz(this.a)};var mI=mdb(Dje,'JSONString',204);var QC;var sD,tD,uD,vD;bcb(1962,1,{525:1});var pI=mdb(Lje,'OutputStream',1962);bcb(1963,1962,{525:1});var oI=mdb(Lje,'FilterOutputStream',1963);bcb(866,1963,{525:1},jcb);var qI=mdb(Lje,'PrintStream',866);bcb(418,1,{475:1});_.Ib=function ncb(){return this.a};var rI=mdb(Phe,'AbstractStringBuilder',418);bcb(529,60,Tie,ocb);var sI=mdb(Phe,'ArithmeticException',529);bcb(73,60,Mje,pcb,qcb);var II=mdb(Phe,'IndexOutOfBoundsException',73);bcb(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},rcb,scb);var tI=mdb(Phe,'ArrayIndexOutOfBoundsException',320);bcb(528,60,Tie,tcb,ucb);var uI=mdb(Phe,'ArrayStoreException',528);bcb(289,78,Nje,vcb);var DI=mdb(Phe,'Error',289);bcb(194,289,Nje,xcb,ycb);var vI=mdb(Phe,'AssertionError',194);xD={3:1,476:1,35:1};var zcb,Acb;var wI=mdb(Phe,'Boolean',476);bcb(236,1,{3:1,236:1});var Gcb;var RI=mdb(Phe,'Number',236);bcb(217,236,{3:1,217:1,35:1,236:1},Mcb);_.wd=function Ncb(a){return Lcb(this,BD(a,217))};_.ke=function Ocb(){return this.a};_.Fb=function Pcb(a){return JD(a,217)&&BD(a,217).a==this.a};_.Hb=function Qcb(){return this.a};_.Ib=function Rcb(){return ''+this.a};_.a=0;var xI=mdb(Phe,'Byte',217);var Tcb;bcb(172,1,{3:1,172:1,35:1},Xcb);_.wd=function Ycb(a){return Wcb(this,BD(a,172))};_.Fb=function $cb(a){return JD(a,172)&&BD(a,172).a==this.a};_.Hb=function _cb(){return this.a};_.Ib=function adb(){return String.fromCharCode(this.a)};_.a=0;var Vcb;var yI=mdb(Phe,'Character',172);var cdb;bcb(205,60,{3:1,205:1,102:1,60:1,78:1},Bdb,Cdb);var zI=mdb(Phe,'ClassCastException',205);yD={3:1,35:1,333:1,236:1};var BI=mdb(Phe,'Double',333);bcb(155,236,{3:1,35:1,155:1,236:1},Ndb,Odb);_.wd=function Pdb(a){return Mdb(this,BD(a,155))};_.ke=function Qdb(){return this.a};_.Fb=function Rdb(a){return JD(a,155)&&Fdb(this.a,BD(a,155).a)};_.Hb=function Sdb(){return QD(this.a)};_.Ib=function Udb(){return ''+this.a};_.a=0;var FI=mdb(Phe,'Float',155);bcb(32,60,{3:1,102:1,32:1,60:1,78:1},Vdb,Wdb,Xdb);var GI=mdb(Phe,'IllegalArgumentException',32);bcb(71,60,Tie,Ydb,Zdb);var HI=mdb(Phe,'IllegalStateException',71);bcb(19,236,{3:1,35:1,19:1,236:1},_db);_.wd=function ceb(a){return $db(this,BD(a,19))};_.ke=function deb(){return this.a};_.Fb=function eeb(a){return JD(a,19)&&BD(a,19).a==this.a};_.Hb=function feb(){return this.a};_.Ib=function leb(){return ''+this.a};_.a=0;var JI=mdb(Phe,'Integer',19);var neb;var peb;bcb(162,236,{3:1,35:1,162:1,236:1},teb);_.wd=function veb(a){return seb(this,BD(a,162))};_.ke=function web(){return Sbb(this.a)};_.Fb=function xeb(a){return JD(a,162)&&Bbb(BD(a,162).a,this.a)};_.Hb=function yeb(){return Tbb(this.a)};_.Ib=function zeb(){return ''+Ubb(this.a)};_.a=0;var MI=mdb(Phe,'Long',162);var Beb;bcb(2039,1,{});bcb(1831,60,Tie,Feb);var NI=mdb(Phe,'NegativeArraySizeException',1831);bcb(173,598,{3:1,102:1,173:1,60:1,78:1},Geb,Heb);_.Wd=function Ieb(a){return new TypeError(a)};var OI=mdb(Phe,'NullPointerException',173);var Jeb,Keb,Leb,Meb;bcb(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Oeb);var QI=mdb(Phe,'NumberFormatException',127);bcb(184,236,{3:1,35:1,236:1,184:1},Qeb);_.wd=function Reb(a){return Peb(this,BD(a,184))};_.ke=function Seb(){return this.a};_.Fb=function Teb(a){return JD(a,184)&&BD(a,184).a==this.a};_.Hb=function Ueb(){return this.a};_.Ib=function Veb(){return ''+this.a};_.a=0;var UI=mdb(Phe,'Short',184);var Xeb;bcb(310,1,{3:1,310:1},Zeb);_.Fb=function $eb(a){var b;if(JD(a,310)){b=BD(a,310);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function _eb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[meb(this.c),this.a,this.d,this.b]))};_.Ib=function afb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=eCb(new Array(b),a));$jb(this,a,b);a.length>b&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.td(b)}};_.Xb=function dmb(a){return $lb(this,a)};_._c=function emb(a,b){var c;c=(tCb(a,this.a.length),this.a[a]);NC(this.a,a,b);return c};_.gc=function fmb(){return this.a.length};_.ad=function gmb(a){Mlb(this.a,this.a.length,a)};_.Pc=function hmb(){return _lb(this,KC(SI,Uhe,1,this.a.length,5,1))};_.Qc=function imb(a){return _lb(this,a)};var EJ=mdb(bie,'Arrays/ArrayList',154);var jmb,kmb,lmb;bcb(940,52,bke,xmb);_.Hc=function ymb(a){return false};_.Xb=function zmb(a){return wmb(a)};_.Kc=function Amb(){return mmb(),Emb(),Dmb};_.Yc=function Bmb(){return mmb(),Emb(),Dmb};_.gc=function Cmb(){return 0};var GJ=mdb(bie,'Collections/EmptyList',940);bcb(941,1,jie,Fmb);_.Nb=function Hmb(a){Rrb(this,a)};_.Rb=function Gmb(a){throw vbb(new bgb)};_.Ob=function Imb(){return false};_.Sb=function Jmb(){return false};_.Pb=function Kmb(){throw vbb(new utb)};_.Tb=function Lmb(){return 0};_.Ub=function Mmb(){throw vbb(new utb)};_.Vb=function Nmb(){return -1};_.Qb=function Omb(){throw vbb(new Ydb)};_.Wb=function Pmb(a){throw vbb(new Ydb)};var Dmb;var FJ=mdb(bie,'Collections/EmptyListIterator',941);bcb(943,1967,Aie,Qmb);_._b=function Rmb(a){return false};_.uc=function Smb(a){return false};_.vc=function Tmb(){return mmb(),lmb};_.xc=function Umb(a){return null};_.ec=function Vmb(){return mmb(),lmb};_.gc=function Wmb(){return 0};_.Cc=function Xmb(){return mmb(),jmb};var HJ=mdb(bie,'Collections/EmptyMap',943);bcb(942,eie,Cie,Ymb);_.Hc=function Zmb(a){return false};_.Kc=function $mb(){return mmb(),Emb(),Dmb};_.gc=function _mb(){return 0};var IJ=mdb(bie,'Collections/EmptySet',942);bcb(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},anb);_.Hc=function bnb(a){return wtb(this.a,a)};_.Xb=function cnb(a){tCb(a,1);return this.a};_.gc=function dnb(){return 1};var JJ=mdb(bie,'Collections/SingletonList',599);bcb(372,1,wie,lnb);_.Jc=function rnb(a){reb(this,a)};_.Lc=function unb(){return new YAb(null,this.Nc())};_.Nc=function xnb(){return new Kub(this,0)};_.Oc=function ynb(){return new YAb(null,this.Nc())};_.Fc=function mnb(a){return enb()};_.Gc=function nnb(a){return fnb()};_.$b=function onb(){gnb()};_.Hc=function pnb(a){return hnb(this,a)};_.Ic=function qnb(a){return inb(this,a)};_.dc=function snb(){return this.b.dc()};_.Kc=function tnb(){return new Dnb(this.b.Kc())};_.Mc=function vnb(a){return jnb()};_.gc=function wnb(){return this.b.gc()};_.Pc=function znb(){return this.b.Pc()};_.Qc=function Anb(a){return knb(this,a)};_.Ib=function Bnb(){return fcb(this.b)};var LJ=mdb(bie,'Collections/UnmodifiableCollection',372);bcb(371,1,aie,Dnb);_.Nb=function Enb(a){Rrb(this,a)};_.Ob=function Fnb(){return this.b.Ob()};_.Pb=function Gnb(){return this.b.Pb()};_.Qb=function Hnb(){Cnb()};var KJ=mdb(bie,'Collections/UnmodifiableCollectionIterator',371);bcb(531,372,cke,Inb);_.Nc=function Vnb(){return new Kub(this,16)};_.Vc=function Jnb(a,b){throw vbb(new bgb)};_.Wc=function Knb(a,b){throw vbb(new bgb)};_.Fb=function Lnb(a){return pb(this.a,a)};_.Xb=function Mnb(a){return this.a.Xb(a)};_.Hb=function Nnb(){return tb(this.a)};_.Xc=function Onb(a){return this.a.Xc(a)};_.dc=function Pnb(){return this.a.dc()};_.Yc=function Qnb(){return new Xnb(this.a.Zc(0))};_.Zc=function Rnb(a){return new Xnb(this.a.Zc(a))};_.$c=function Snb(a){throw vbb(new bgb)};_._c=function Tnb(a,b){throw vbb(new bgb)};_.ad=function Unb(a){throw vbb(new bgb)};_.bd=function Wnb(a,b){return new Inb(this.a.bd(a,b))};var NJ=mdb(bie,'Collections/UnmodifiableList',531);bcb(690,371,jie,Xnb);_.Qb=function bob(){Cnb()};_.Rb=function Ynb(a){throw vbb(new bgb)};_.Sb=function Znb(){return this.a.Sb()};_.Tb=function $nb(){return this.a.Tb()};_.Ub=function _nb(){return this.a.Ub()};_.Vb=function aob(){return this.a.Vb()};_.Wb=function cob(a){throw vbb(new bgb)};var MJ=mdb(bie,'Collections/UnmodifiableListIterator',690);bcb(600,1,cie,iob);_.wc=function oob(a){stb(this,a)};_.yc=function tob(a,b,c){return ttb(this,a,b,c)};_.$b=function job(){throw vbb(new bgb)};_._b=function kob(a){return this.c._b(a)};_.uc=function lob(a){return dob(this,a)};_.vc=function mob(){return eob(this)};_.Fb=function nob(a){return fob(this,a)};_.xc=function pob(a){return this.c.xc(a)};_.Hb=function qob(){return tb(this.c)};_.dc=function rob(){return this.c.dc()};_.ec=function sob(){return gob(this)};_.zc=function uob(a,b){throw vbb(new bgb)};_.Bc=function vob(a){throw vbb(new bgb)};_.gc=function wob(){return this.c.gc()};_.Ib=function xob(){return fcb(this.c)};_.Cc=function yob(){return hob(this)};var RJ=mdb(bie,'Collections/UnmodifiableMap',600);bcb(382,372,Bie,zob);_.Nc=function Cob(){return new Kub(this,1)};_.Fb=function Aob(a){return pb(this.b,a)};_.Hb=function Bob(){return tb(this.b)};var TJ=mdb(bie,'Collections/UnmodifiableSet',382);bcb(944,382,Bie,Gob);_.Hc=function Hob(a){return Dob(this,a)};_.Ic=function Iob(a){return this.b.Ic(a)};_.Kc=function Job(){var a;a=this.b.Kc();return new Mob(a)};_.Pc=function Kob(){var a;a=this.b.Pc();Fob(a,a.length);return a};_.Qc=function Lob(a){return Eob(this,a)};var QJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet',944);bcb(945,1,aie,Mob);_.Nb=function Nob(a){Rrb(this,a)};_.Pb=function Pob(){return new Rob(BD(this.a.Pb(),42))};_.Ob=function Oob(){return this.a.Ob()};_.Qb=function Qob(){throw vbb(new bgb)};var OJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',945);bcb(688,1,_je,Rob);_.Fb=function Sob(a){return this.a.Fb(a)};_.cd=function Tob(){return this.a.cd()};_.dd=function Uob(){return this.a.dd()};_.Hb=function Vob(){return this.a.Hb()};_.ed=function Wob(a){throw vbb(new bgb)};_.Ib=function Xob(){return fcb(this.a)};var PJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',688);bcb(601,531,{20:1,14:1,15:1,54:1},Yob);var SJ=mdb(bie,'Collections/UnmodifiableRandomAccessList',601);bcb(689,382,Die,Zob);_.Nc=function apb(){return new Rub(this)};_.Fb=function $ob(a){return pb(this.a,a)};_.Hb=function _ob(){return tb(this.a)};var UJ=mdb(bie,'Collections/UnmodifiableSortedSet',689);bcb(847,1,dke,bpb);_.ue=function cpb(a,b){var c;return c=Ucc(BD(a,11),BD(b,11)),c!=0?c:Wcc(BD(a,11),BD(b,11))};_.Fb=function dpb(a){return this===a};_.ve=function epb(){return new tpb(this)};var VJ=mdb(bie,'Comparator/lambda$0$Type',847);var fpb,gpb,hpb;bcb(751,1,dke,kpb);_.ue=function lpb(a,b){return jpb(BD(a,35),BD(b,35))};_.Fb=function mpb(a){return this===a};_.ve=function npb(){return ipb(),hpb};var WJ=mdb(bie,'Comparators/NaturalOrderComparator',751);bcb(1177,1,dke,ppb);_.ue=function qpb(a,b){return opb(BD(a,35),BD(b,35))};_.Fb=function rpb(a){return this===a};_.ve=function spb(){return ipb(),gpb};var XJ=mdb(bie,'Comparators/ReverseNaturalOrderComparator',1177);bcb(64,1,dke,tpb);_.Fb=function vpb(a){return this===a};_.ue=function upb(a,b){return this.a.ue(b,a)};_.ve=function wpb(){return this.a};var YJ=mdb(bie,'Comparators/ReversedComparator',64);bcb(166,60,Tie,Apb);var ZJ=mdb(bie,'ConcurrentModificationException',166);var Bpb,Cpb;bcb(1904,1,eke,Gpb);_.we=function Hpb(a){Epb(this,a)};_.Ib=function Ipb(){return 'DoubleSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Fpb(this)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Fpb(this)+']'};_.a=0;_.b=Qje;_.c=Pje;_.d=0;_.e=0;_.f=0;var _J=mdb(bie,'DoubleSummaryStatistics',1904);bcb(1805,60,Tie,Jpb);var aK=mdb(bie,'EmptyStackException',1805);bcb(451,1967,cie,Rpb);_.zc=function Xpb(a,b){return Opb(this,a,b)};_.$b=function Spb(){Kpb(this)};_._b=function Tpb(a){return Lpb(this,a)};_.uc=function Upb(a){var b,c;for(c=new Gqb(this.a);c.a<c.c.a.length;){b=Fqb(c);if(wtb(a,this.b[b.g])){return true}}return false};_.vc=function Vpb(){return new _pb(this)};_.xc=function Wpb(a){return Mpb(this,a)};_.Bc=function Ypb(a){return Ppb(this,a)};_.gc=function Zpb(){return this.a.c};var eK=mdb(bie,'EnumMap',451);bcb(1352,eie,fie,_pb);_.$b=function aqb(){Kpb(this.a)};_.Hc=function bqb(a){return $pb(this,a)};_.Kc=function cqb(){return new fqb(this.a)};_.Mc=function dqb(a){var b;if($pb(this,a)){b=BD(a,42).cd();Ppb(this.a,b);return true}return false};_.gc=function eqb(){return this.a.a.c};var cK=mdb(bie,'EnumMap/EntrySet',1352);bcb(1353,1,aie,fqb);_.Nb=function gqb(a){Rrb(this,a)};_.Pb=function iqb(){return this.b=Fqb(this.a),new kqb(this.c,this.b)};_.Ob=function hqb(){return Eqb(this.a)};_.Qb=function jqb(){yCb(!!this.b);Ppb(this.c,this.b);this.b=null};var bK=mdb(bie,'EnumMap/EntrySetIterator',1353);bcb(1354,1984,_je,kqb);_.cd=function lqb(){return this.a};_.dd=function mqb(){return this.b.b[this.a.g]};_.ed=function nqb(a){return Qpb(this.b,this.a.g,a)};var dK=mdb(bie,'EnumMap/MapEntry',1354);bcb(174,eie,{20:1,28:1,14:1,174:1,21:1});var hK=mdb(bie,'EnumSet',174);bcb(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},xqb);_.Fc=function yqb(a){return rqb(this,BD(a,22))};_.Hc=function zqb(a){return tqb(this,a)};_.Kc=function Aqb(){return new Gqb(this)};_.Mc=function Bqb(a){return vqb(this,a)};_.gc=function Cqb(){return this.c};_.c=0;var gK=mdb(bie,'EnumSet/EnumSetImpl',156);bcb(343,1,aie,Gqb);_.Nb=function Hqb(a){Rrb(this,a)};_.Pb=function Jqb(){return Fqb(this)};_.Ob=function Iqb(){return Eqb(this)};_.Qb=function Kqb(){yCb(this.b!=-1);NC(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var fK=mdb(bie,'EnumSet/EnumSetImpl/IteratorImpl',343);bcb(43,488,fke,Lqb,Mqb,Nqb);_.re=function Oqb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)};_.se=function Pqb(a){var b;b=tb(a);return b|0};var iK=mdb(bie,'HashMap',43);bcb(53,eie,gke,Tqb,Uqb,Vqb);_.Fc=function Xqb(a){return Qqb(this,a)};_.$b=function Yqb(){this.a.$b()};_.Hc=function Zqb(a){return Rqb(this,a)};_.dc=function $qb(){return this.a.gc()==0};_.Kc=function _qb(){return this.a.ec().Kc()};_.Mc=function arb(a){return Sqb(this,a)};_.gc=function brb(){return this.a.gc()};var jK=mdb(bie,'HashSet',53);bcb(1781,1,sie,drb);_.ud=function erb(a){crb(this,a)};_.Ib=function frb(){return 'IntSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Sbb(this.d)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Ubb(this.d)+']'};_.a=0;_.b=Rie;_.c=Ohe;_.d=0;var kK=mdb(bie,'IntSummaryStatistics',1781);bcb(1049,1,vie,lrb);_.Jc=function mrb(a){reb(this,a)};_.Kc=function nrb(){return new orb(this)};_.c=0;var mK=mdb(bie,'InternalHashCodeMap',1049);bcb(711,1,aie,orb);_.Nb=function prb(a){Rrb(this,a)};_.Pb=function rrb(){return this.d=this.a[this.c++],this.d};_.Ob=function qrb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function srb(){krb(this.e,this.d.cd());this.c!=0&&--this.c};_.c=0;_.d=null;var lK=mdb(bie,'InternalHashCodeMap/1',711);var vrb;bcb(1047,1,vie,Frb);_.Jc=function Grb(a){reb(this,a)};_.Kc=function Hrb(){return new Irb(this)};_.c=0;_.d=0;var pK=mdb(bie,'InternalStringMap',1047);bcb(710,1,aie,Irb);_.Nb=function Jrb(a){Rrb(this,a)};_.Pb=function Lrb(){return this.c=this.a,this.a=this.b.next(),new Nrb(this.d,this.c,this.d.d)};_.Ob=function Krb(){return !this.a.done};_.Qb=function Mrb(){Erb(this.d,this.c.value[0])};var nK=mdb(bie,'InternalStringMap/1',710);bcb(1048,1984,_je,Nrb);_.cd=function Orb(){return this.b.value[0]};_.dd=function Prb(){if(this.a.d!=this.c){return Crb(this.a,this.b.value[0])}return this.b.value[1]};_.ed=function Qrb(a){return Drb(this.a,this.b.value[0],a)};_.c=0;var oK=mdb(bie,'InternalStringMap/2',1048);bcb(228,43,fke,$rb,_rb);_.$b=function asb(){Urb(this)};_._b=function bsb(a){return Vrb(this,a)};_.uc=function csb(a){var b;b=this.d.a;while(b!=this.d){if(wtb(b.e,a)){return true}b=b.a}return false};_.vc=function dsb(){return new nsb(this)};_.xc=function esb(a){return Wrb(this,a)};_.zc=function fsb(a,b){return Xrb(this,a,b)};_.Bc=function gsb(a){return Zrb(this,a)};_.gc=function hsb(){return Vhb(this.e)};_.c=false;var tK=mdb(bie,'LinkedHashMap',228);bcb(387,383,{484:1,383:1,387:1,42:1},ksb,lsb);var qK=mdb(bie,'LinkedHashMap/ChainEntry',387);bcb(701,eie,fie,nsb);_.$b=function osb(){Urb(this.a)};_.Hc=function psb(a){return msb(this,a)};_.Kc=function qsb(){return new usb(this)};_.Mc=function rsb(a){var b;if(msb(this,a)){b=BD(a,42).cd();Zrb(this.a,b);return true}return false};_.gc=function ssb(){return Vhb(this.a.e)};var sK=mdb(bie,'LinkedHashMap/EntrySet',701);bcb(702,1,aie,usb);_.Nb=function vsb(a){Rrb(this,a)};_.Pb=function xsb(){return tsb(this)};_.Ob=function wsb(){return this.b!=this.c.a.d};_.Qb=function ysb(){yCb(!!this.a);xpb(this.c.a.e,this);jsb(this.a);Thb(this.c.a.e,this.a.d);ypb(this.c.a.e,this);this.a=null};var rK=mdb(bie,'LinkedHashMap/EntrySet/EntryIterator',702);bcb(178,53,gke,zsb,Asb,Bsb);var uK=mdb(bie,'LinkedHashSet',178);bcb(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},Psb,Qsb);_.Fc=function Rsb(a){return Dsb(this,a)};_.$b=function Ssb(){Osb(this)};_.Zc=function Tsb(a){return Jsb(this,a)};_.gc=function Usb(){return this.b};_.b=0;var xK=mdb(bie,'LinkedList',68);bcb(970,1,jie,$sb);_.Nb=function atb(a){Rrb(this,a)};_.Rb=function _sb(a){Vsb(this,a)};_.Ob=function btb(){return Wsb(this)};_.Sb=function ctb(){return this.b.b!=this.d.a};_.Pb=function dtb(){return Xsb(this)};_.Tb=function etb(){return this.a};_.Ub=function ftb(){return Ysb(this)};_.Vb=function gtb(){return this.a-1};_.Qb=function htb(){Zsb(this)};_.Wb=function itb(a){yCb(!!this.c);this.c.c=a};_.a=0;_.c=null;var vK=mdb(bie,'LinkedList/ListIteratorImpl',970);bcb(608,1,{},jtb);var wK=mdb(bie,'LinkedList/Node',608);bcb(1959,1,{});var ltb,mtb;var BK=mdb(bie,'Locale',1959);bcb(861,1959,{},otb);_.Ib=function ptb(){return ''};var zK=mdb(bie,'Locale/1',861);bcb(862,1959,{},qtb);_.Ib=function rtb(){return 'unknown'};var AK=mdb(bie,'Locale/4',862);bcb(109,60,{3:1,102:1,60:1,78:1,109:1},utb,vtb);var EK=mdb(bie,'NoSuchElementException',109);bcb(404,1,{404:1},Ftb);_.Fb=function Gtb(a){var b;if(a===this){return true}if(!JD(a,404)){return false}b=BD(a,404);return wtb(this.a,b.a)};_.Hb=function Htb(){return xtb(this.a)};_.Ib=function Jtb(){return this.a!=null?Whe+xfb(this.a)+')':'Optional.empty()'};var ztb;var HK=mdb(bie,'Optional',404);bcb(463,1,{463:1},Otb,Ptb);_.Fb=function Qtb(a){var b;if(a===this){return true}if(!JD(a,463)){return false}b=BD(a,463);return this.a==b.a&&Kdb(this.b,b.b)==0};_.Hb=function Rtb(){return this.a?QD(this.b):0};_.Ib=function Stb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Ktb;var FK=mdb(bie,'OptionalDouble',463);bcb(517,1,{517:1},Wtb,Xtb);_.Fb=function Ytb(a){var b;if(a===this){return true}if(!JD(a,517)){return false}b=BD(a,517);return this.a==b.a&&beb(this.b,b.b)==0};_.Hb=function Ztb(){return this.a?this.b:0};_.Ib=function $tb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var Ttb;var GK=mdb(bie,'OptionalInt',517);bcb(503,2004,die,gub);_.Gc=function hub(a){return _tb(this,a)};_.$b=function iub(){this.b.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function jub(a){return (a==null?-1:Jkb(this.b,a,0))!=-1};_.Kc=function kub(){return new qub(this)};_.Mc=function lub(a){return eub(this,a)};_.gc=function mub(){return this.b.c.length};_.Nc=function nub(){return new Kub(this,256)};_.Pc=function oub(){return Pkb(this.b)};_.Qc=function pub(a){return Qkb(this.b,a)};var JK=mdb(bie,'PriorityQueue',503);bcb(1277,1,aie,qub);_.Nb=function rub(a){Rrb(this,a)};_.Ob=function tub(){return this.a<this.c.b.c.length};_.Pb=function uub(){sCb(this.a<this.c.b.c.length);this.b=this.a++;return Ikb(this.c.b,this.b)};_.Qb=function vub(){yCb(this.b!=-1);fub(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var IK=mdb(bie,'PriorityQueue/1',1277);bcb(230,1,{230:1},Gub,Hub);_.a=0;_.b=0;var wub,xub,yub=0;var KK=mdb(bie,'Random',230);bcb(27,1,pie,Kub,Lub,Mub);_.qd=function Nub(){return this.a};_.rd=function Oub(){Iub(this);return this.c};_.Nb=function Pub(a){Iub(this);this.d.Nb(a)};_.sd=function Qub(a){return Jub(this,a)};_.a=0;_.c=0;var $K=mdb(bie,'Spliterators/IteratorSpliterator',27);bcb(485,27,pie,Rub);var MK=mdb(bie,'SortedSet/1',485);bcb(602,1,eke,Tub);_.we=function Uub(a){this.a.td(a)};var NK=mdb(bie,'Spliterator/OfDouble/0methodref$accept$Type',602);bcb(603,1,eke,Vub);_.we=function Wub(a){this.a.td(a)};var OK=mdb(bie,'Spliterator/OfDouble/1methodref$accept$Type',603);bcb(604,1,sie,Xub);_.ud=function Yub(a){this.a.td(meb(a))};var PK=mdb(bie,'Spliterator/OfInt/2methodref$accept$Type',604);bcb(605,1,sie,Zub);_.ud=function $ub(a){this.a.td(meb(a))};var QK=mdb(bie,'Spliterator/OfInt/3methodref$accept$Type',605);bcb(617,1,pie);_.Nb=function evb(a){Sub(this,a)};_.qd=function cvb(){return this.d};_.rd=function dvb(){return this.e};_.d=0;_.e=0;var WK=mdb(bie,'Spliterators/BaseSpliterator',617);bcb(721,617,pie);_.xe=function gvb(a){_ub(this,a)};_.Nb=function hvb(a){JD(a,182)?_ub(this,BD(a,182)):_ub(this,new Vub(a))};_.sd=function ivb(a){return JD(a,182)?this.ye(BD(a,182)):this.ye(new Tub(a))};var RK=mdb(bie,'Spliterators/AbstractDoubleSpliterator',721);bcb(720,617,pie);_.xe=function kvb(a){_ub(this,a)};_.Nb=function lvb(a){JD(a,196)?_ub(this,BD(a,196)):_ub(this,new Zub(a))};_.sd=function mvb(a){return JD(a,196)?this.ye(BD(a,196)):this.ye(new Xub(a))};var SK=mdb(bie,'Spliterators/AbstractIntSpliterator',720);bcb(540,617,pie);var TK=mdb(bie,'Spliterators/AbstractSpliterator',540);bcb(692,1,pie);_.Nb=function tvb(a){Sub(this,a)};_.qd=function rvb(){return this.b};_.rd=function svb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var VK=mdb(bie,'Spliterators/BaseArraySpliterator',692);bcb(947,692,pie,vvb);_.ze=function wvb(a,b){uvb(this,BD(a,38),b)};_.Nb=function xvb(a){ovb(this,a)};_.sd=function yvb(a){return pvb(this,a)};var UK=mdb(bie,'Spliterators/ArraySpliterator',947);bcb(693,692,pie,Avb);_.ze=function Cvb(a,b){zvb(this,BD(a,182),b)};_.xe=function Dvb(a){ovb(this,a)};_.Nb=function Evb(a){JD(a,182)?ovb(this,BD(a,182)):ovb(this,new Vub(a))};_.ye=function Fvb(a){return pvb(this,a)};_.sd=function Gvb(a){return JD(a,182)?pvb(this,BD(a,182)):pvb(this,new Tub(a))};var XK=mdb(bie,'Spliterators/DoubleArraySpliterator',693);bcb(1968,1,pie);_.Nb=function Lvb(a){Sub(this,a)};_.qd=function Jvb(){return 16448};_.rd=function Kvb(){return 0};var Hvb;var ZK=mdb(bie,'Spliterators/EmptySpliterator',1968);bcb(946,1968,pie,Ovb);_.xe=function Pvb(a){Mvb(a)};_.Nb=function Qvb(a){JD(a,196)?Mvb(BD(a,196)):Mvb(new Zub(a))};_.ye=function Rvb(a){return Nvb(a)};_.sd=function Svb(a){return JD(a,196)?Nvb(BD(a,196)):Nvb(new Xub(a))};var YK=mdb(bie,'Spliterators/EmptySpliterator/OfInt',946);bcb(580,52,pke,Wvb);_.Vc=function Xvb(a,b){_vb(a,this.a.c.length+1);Dkb(this.a,a,b)};_.Fc=function Yvb(a){return Ekb(this.a,a)};_.Wc=function Zvb(a,b){_vb(a,this.a.c.length+1);return Fkb(this.a,a,b)};_.Gc=function $vb(a){return Gkb(this.a,a)};_.$b=function awb(){this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function bwb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function cwb(a){return Be(this.a,a)};_.Jc=function dwb(a){Hkb(this.a,a)};_.Xb=function ewb(a){return _vb(a,this.a.c.length),Ikb(this.a,a)};_.Xc=function fwb(a){return Jkb(this.a,a,0)};_.dc=function gwb(){return this.a.c.length==0};_.Kc=function hwb(){return new olb(this.a)};_.$c=function iwb(a){return _vb(a,this.a.c.length),Kkb(this.a,a)};_.Ud=function jwb(a,b){Mkb(this.a,a,b)};_._c=function kwb(a,b){return _vb(a,this.a.c.length),Nkb(this.a,a,b)};_.gc=function lwb(){return this.a.c.length};_.ad=function mwb(a){Okb(this.a,a)};_.bd=function nwb(a,b){return new Jib(this.a,a,b)};_.Pc=function owb(){return Pkb(this.a)};_.Qc=function pwb(a){return Qkb(this.a,a)};_.Ib=function qwb(){return Fe(this.a)};var lL=mdb(bie,'Vector',580);bcb(809,580,pke,twb);var _K=mdb(bie,'Stack',809);bcb(206,1,{206:1},xwb);_.Ib=function ywb(){return wwb(this)};var aL=mdb(bie,'StringJoiner',206);bcb(544,1992,{3:1,83:1,171:1,161:1},Pwb,Qwb);_.$b=function Rwb(){zwb(this)};_.vc=function Swb(){return new cxb(this)};_.zc=function Twb(a,b){return Iwb(this,a,b)};_.Bc=function Uwb(a){return Jwb(this,a)};_.gc=function Vwb(){return this.c};_.c=0;var jL=mdb(bie,'TreeMap',544);bcb(390,1,aie,Ywb);_.Nb=function $wb(a){Rrb(this,a)};_.Pb=function axb(){return Wwb(this)};_.Ob=function _wb(){return sib(this.a)};_.Qb=function bxb(){Xwb(this)};var bL=mdb(bie,'TreeMap/EntryIterator',390);bcb(435,739,fie,cxb);_.$b=function dxb(){zwb(this.a)};var cL=mdb(bie,'TreeMap/EntrySet',435);bcb(436,383,{484:1,383:1,42:1,436:1},exb);_.b=false;var dL=mdb(bie,'TreeMap/Node',436);bcb(621,1,{},fxb);_.Ib=function gxb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var eL=mdb(bie,'TreeMap/State',621);bcb(297,22,qke,mxb);_.Ae=function nxb(){return false};_.Be=function oxb(){return false};var hxb,ixb,jxb,kxb;var iL=ndb(bie,'TreeMap/SubMapType',297,CI,qxb,pxb);bcb(1112,297,qke,rxb);_.Be=function sxb(){return true};var fL=ndb(bie,'TreeMap/SubMapType/1',1112,iL,null,null);bcb(1113,297,qke,txb);_.Ae=function uxb(){return true};_.Be=function vxb(){return true};var gL=ndb(bie,'TreeMap/SubMapType/2',1113,iL,null,null);bcb(1114,297,qke,wxb);_.Ae=function xxb(){return true};var hL=ndb(bie,'TreeMap/SubMapType/3',1114,iL,null,null);var yxb;bcb(208,eie,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},Gxb,Hxb);_.Nc=function Oxb(){return new Rub(this)};_.Fc=function Ixb(a){return Axb(this,a)};_.$b=function Jxb(){zwb(this.a)};_.Hc=function Kxb(a){return ujb(this.a,a)};_.Kc=function Lxb(){var a;return a=new Ywb((new cxb((new Gjb(this.a)).a)).b),new Njb(a)};_.Mc=function Mxb(a){return Fxb(this,a)};_.gc=function Nxb(){return this.a.c};var kL=mdb(bie,'TreeSet',208);bcb(966,1,{},Rxb);_.Ce=function Sxb(a,b){return Pxb(this.a,a,b)};var mL=mdb(rke,'BinaryOperator/lambda$0$Type',966);bcb(967,1,{},Txb);_.Ce=function Uxb(a,b){return Qxb(this.a,a,b)};var nL=mdb(rke,'BinaryOperator/lambda$1$Type',967);bcb(846,1,{},Vxb);_.Kb=function Wxb(a){return a};var oL=mdb(rke,'Function/lambda$0$Type',846);bcb(431,1,Oie,Xxb);_.Mb=function Yxb(a){return !this.a.Mb(a)};var pL=mdb(rke,'Predicate/lambda$2$Type',431);bcb(572,1,{572:1});var qL=mdb(ske,'Handler',572);bcb(2007,1,Qhe);_.ne=function _xb(){return 'DUMMY'};_.Ib=function ayb(){return this.ne()};var Zxb;var sL=mdb(ske,'Level',2007);bcb(1621,2007,Qhe,byb);_.ne=function cyb(){return 'INFO'};var rL=mdb(ske,'Level/LevelInfo',1621);bcb(1640,1,{},gyb);var dyb;var tL=mdb(ske,'LogManager',1640);bcb(1780,1,Qhe,iyb);_.b=null;var uL=mdb(ske,'LogRecord',1780);bcb(512,1,{512:1},wyb);_.e=false;var jyb=false,kyb=false,lyb=false,myb=false,nyb=false;var vL=mdb(ske,'Logger',512);bcb(819,572,{572:1},zyb);var wL=mdb(ske,'SimpleConsoleLogHandler',819);bcb(132,22,{3:1,35:1,22:1,132:1},Gyb);var Cyb,Dyb,Eyb;var xL=ndb(vke,'Collector/Characteristics',132,CI,Iyb,Hyb);var Jyb;bcb(744,1,{},Lyb);var yL=mdb(vke,'CollectorImpl',744);bcb(1060,1,{},Zyb);_.Ce=function $yb(a,b){return vwb(BD(a,206),BD(b,206))};var zL=mdb(vke,'Collectors/10methodref$merge$Type',1060);bcb(1061,1,{},_yb);_.Kb=function azb(a){return wwb(BD(a,206))};var AL=mdb(vke,'Collectors/11methodref$toString$Type',1061);bcb(1062,1,{},bzb);_.Kb=function czb(a){return Bcb(),_Pb(a)?true:false};var BL=mdb(vke,'Collectors/12methodref$test$Type',1062);bcb(251,1,{},dzb);_.Od=function ezb(a,b){BD(a,14).Fc(b)};var CL=mdb(vke,'Collectors/20methodref$add$Type',251);bcb(253,1,{},fzb);_.Ee=function gzb(){return new Rkb};var DL=mdb(vke,'Collectors/21methodref$ctor$Type',253);bcb(346,1,{},hzb);_.Ee=function izb(){return new Tqb};var EL=mdb(vke,'Collectors/23methodref$ctor$Type',346);bcb(347,1,{},jzb);_.Od=function kzb(a,b){Qqb(BD(a,53),b)};var FL=mdb(vke,'Collectors/24methodref$add$Type',347);bcb(1055,1,{},lzb);_.Ce=function mzb(a,b){return Myb(BD(a,15),BD(b,14))};var GL=mdb(vke,'Collectors/4methodref$addAll$Type',1055);bcb(1059,1,{},nzb);_.Od=function ozb(a,b){uwb(BD(a,206),BD(b,475))};var HL=mdb(vke,'Collectors/9methodref$add$Type',1059);bcb(1058,1,{},pzb);_.Ee=function qzb(){return new xwb(this.a,this.b,this.c)};var IL=mdb(vke,'Collectors/lambda$15$Type',1058);bcb(1063,1,{},rzb);_.Ee=function szb(){var a;return a=new $rb,Xrb(a,(Bcb(),false),new Rkb),Xrb(a,true,new Rkb),a};var JL=mdb(vke,'Collectors/lambda$22$Type',1063);bcb(1064,1,{},tzb);_.Ee=function uzb(){return OC(GC(SI,1),Uhe,1,5,[this.a])};var KL=mdb(vke,'Collectors/lambda$25$Type',1064);bcb(1065,1,{},vzb);_.Od=function wzb(a,b){Oyb(this.a,CD(a))};var LL=mdb(vke,'Collectors/lambda$26$Type',1065);bcb(1066,1,{},xzb);_.Ce=function yzb(a,b){return Pyb(this.a,CD(a),CD(b))};var ML=mdb(vke,'Collectors/lambda$27$Type',1066);bcb(1067,1,{},zzb);_.Kb=function Azb(a){return CD(a)[0]};var NL=mdb(vke,'Collectors/lambda$28$Type',1067);bcb(713,1,{},Czb);_.Ce=function Dzb(a,b){return Bzb(a,b)};var OL=mdb(vke,'Collectors/lambda$4$Type',713);bcb(252,1,{},Ezb);_.Ce=function Fzb(a,b){return Ryb(BD(a,14),BD(b,14))};var PL=mdb(vke,'Collectors/lambda$42$Type',252);bcb(348,1,{},Gzb);_.Ce=function Hzb(a,b){return Syb(BD(a,53),BD(b,53))};var QL=mdb(vke,'Collectors/lambda$50$Type',348);bcb(349,1,{},Izb);_.Kb=function Jzb(a){return BD(a,53)};var RL=mdb(vke,'Collectors/lambda$51$Type',349);bcb(1054,1,{},Kzb);_.Od=function Lzb(a,b){Tyb(this.a,BD(a,83),b)};var SL=mdb(vke,'Collectors/lambda$7$Type',1054);bcb(1056,1,{},Mzb);_.Ce=function Nzb(a,b){return Vyb(BD(a,83),BD(b,83),new lzb)};var TL=mdb(vke,'Collectors/lambda$8$Type',1056);bcb(1057,1,{},Ozb);_.Kb=function Pzb(a){return Uyb(this.a,BD(a,83))};var UL=mdb(vke,'Collectors/lambda$9$Type',1057);bcb(539,1,{});_.He=function Wzb(){Qzb(this)};_.d=false;var zM=mdb(vke,'TerminatableStream',539);bcb(812,539,wke,bAb);_.He=function cAb(){Qzb(this)};var ZL=mdb(vke,'DoubleStreamImpl',812);bcb(1784,721,pie,fAb);_.ye=function hAb(a){return eAb(this,BD(a,182))};_.a=null;var WL=mdb(vke,'DoubleStreamImpl/2',1784);bcb(1785,1,eke,iAb);_.we=function jAb(a){gAb(this.a,a)};var VL=mdb(vke,'DoubleStreamImpl/2/lambda$0$Type',1785);bcb(1782,1,eke,kAb);_.we=function lAb(a){dAb(this.a,a)};var XL=mdb(vke,'DoubleStreamImpl/lambda$0$Type',1782);bcb(1783,1,eke,mAb);_.we=function nAb(a){Epb(this.a,a)};var YL=mdb(vke,'DoubleStreamImpl/lambda$2$Type',1783);bcb(1358,720,pie,rAb);_.ye=function sAb(a){return qAb(this,BD(a,196))};_.a=0;_.b=0;_.c=0;var $L=mdb(vke,'IntStream/5',1358);bcb(787,539,wke,vAb);_.He=function wAb(){Qzb(this)};_.Ie=function xAb(){return Tzb(this),this.a};var bM=mdb(vke,'IntStreamImpl',787);bcb(788,539,wke,yAb);_.He=function zAb(){Qzb(this)};_.Ie=function AAb(){return Tzb(this),Ivb(),Hvb};var _L=mdb(vke,'IntStreamImpl/Empty',788);bcb(1463,1,sie,BAb);_.ud=function CAb(a){crb(this.a,a)};var aM=mdb(vke,'IntStreamImpl/lambda$4$Type',1463);var xM=odb(vke,'Stream');bcb(30,539,{525:1,670:1,833:1},YAb);_.He=function ZAb(){Qzb(this)};var DAb;var wM=mdb(vke,'StreamImpl',30);bcb(845,1,{},bBb);_.ld=function cBb(a){return aBb(a)};var cM=mdb(vke,'StreamImpl/0methodref$lambda$2$Type',845);bcb(1084,540,pie,fBb);_.sd=function gBb(a){while(dBb(this)){if(this.a.sd(a)){return true}else{Qzb(this.b);this.b=null;this.a=null}}return false};var eM=mdb(vke,'StreamImpl/1',1084);bcb(1085,1,qie,hBb);_.td=function iBb(a){eBb(this.a,BD(a,833))};var dM=mdb(vke,'StreamImpl/1/lambda$0$Type',1085);bcb(1086,1,Oie,jBb);_.Mb=function kBb(a){return Qqb(this.a,a)};var fM=mdb(vke,'StreamImpl/1methodref$add$Type',1086);bcb(1087,540,pie,lBb);_.sd=function mBb(a){var b;if(!this.a){b=new Rkb;this.b.a.Nb(new nBb(b));mmb();Okb(b,this.c);this.a=new Kub(b,16)}return Jub(this.a,a)};_.a=null;var hM=mdb(vke,'StreamImpl/5',1087);bcb(1088,1,qie,nBb);_.td=function oBb(a){Ekb(this.a,a)};var gM=mdb(vke,'StreamImpl/5/2methodref$add$Type',1088);bcb(722,540,pie,qBb);_.sd=function rBb(a){this.b=false;while(!this.b&&this.c.sd(new sBb(this,a)));return this.b};_.b=false;var jM=mdb(vke,'StreamImpl/FilterSpliterator',722);bcb(1079,1,qie,sBb);_.td=function tBb(a){pBb(this.a,this.b,a)};var iM=mdb(vke,'StreamImpl/FilterSpliterator/lambda$0$Type',1079);bcb(1075,721,pie,wBb);_.ye=function xBb(a){return vBb(this,BD(a,182))};var lM=mdb(vke,'StreamImpl/MapToDoubleSpliterator',1075);bcb(1078,1,qie,yBb);_.td=function zBb(a){uBb(this.a,this.b,a)};var kM=mdb(vke,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1078);bcb(1074,720,pie,CBb);_.ye=function DBb(a){return BBb(this,BD(a,196))};var nM=mdb(vke,'StreamImpl/MapToIntSpliterator',1074);bcb(1077,1,qie,EBb);_.td=function FBb(a){ABb(this.a,this.b,a)};var mM=mdb(vke,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1077);bcb(719,540,pie,IBb);_.sd=function JBb(a){return HBb(this,a)};var pM=mdb(vke,'StreamImpl/MapToObjSpliterator',719);bcb(1076,1,qie,KBb);_.td=function LBb(a){GBb(this.a,this.b,a)};var oM=mdb(vke,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1076);bcb(618,1,qie,NBb);_.td=function OBb(a){MBb(this,a)};var qM=mdb(vke,'StreamImpl/ValueConsumer',618);bcb(1080,1,qie,PBb);_.td=function QBb(a){EAb()};var rM=mdb(vke,'StreamImpl/lambda$0$Type',1080);bcb(1081,1,qie,RBb);_.td=function SBb(a){EAb()};var sM=mdb(vke,'StreamImpl/lambda$1$Type',1081);bcb(1082,1,{},TBb);_.Ce=function UBb(a,b){return $Ab(this.a,a,b)};var uM=mdb(vke,'StreamImpl/lambda$4$Type',1082);bcb(1083,1,qie,VBb);_.td=function WBb(a){_Ab(this.b,this.a,a)};var vM=mdb(vke,'StreamImpl/lambda$5$Type',1083);bcb(1089,1,qie,XBb);_.td=function YBb(a){Xzb(this.a,BD(a,365))};var yM=mdb(vke,'TerminatableStream/lambda$0$Type',1089);bcb(2041,1,{});bcb(1914,1,{},iCb);var AM=mdb('javaemul.internal','ConsoleLogger',1914);bcb(2038,1,{});var ECb=0;var GCb,HCb=0,ICb;bcb(1768,1,qie,OCb);_.td=function PCb(a){BD(a,308)};var BM=mdb(Cke,'BowyerWatsonTriangulation/lambda$0$Type',1768);bcb(1769,1,qie,QCb);_.td=function RCb(a){ye(this.a,BD(a,308).e)};var CM=mdb(Cke,'BowyerWatsonTriangulation/lambda$1$Type',1769);bcb(1770,1,qie,SCb);_.td=function TCb(a){BD(a,168)};var DM=mdb(Cke,'BowyerWatsonTriangulation/lambda$2$Type',1770);bcb(1765,1,Dke,WCb);_.ue=function XCb(a,b){return VCb(this.a,BD(a,168),BD(b,168))};_.Fb=function YCb(a){return this===a};_.ve=function ZCb(){return new tpb(this)};var EM=mdb(Cke,'NaiveMinST/lambda$0$Type',1765);bcb(499,1,{},_Cb);var FM=mdb(Cke,'NodeMicroLayout',499);bcb(168,1,{168:1},aDb);_.Fb=function bDb(a){var b;if(JD(a,168)){b=BD(a,168);return wtb(this.a,b.a)&&wtb(this.b,b.b)||wtb(this.a,b.b)&&wtb(this.b,b.a)}else{return false}};_.Hb=function cDb(){return xtb(this.a)+xtb(this.b)};var GM=mdb(Cke,'TEdge',168);bcb(308,1,{308:1},eDb);_.Fb=function fDb(a){var b;if(JD(a,308)){b=BD(a,308);return dDb(this,b.a)&&dDb(this,b.b)&&dDb(this,b.c)}else{return false}};_.Hb=function gDb(){return xtb(this.a)+xtb(this.b)+xtb(this.c)};var HM=mdb(Cke,'TTriangle',308);bcb(221,1,{221:1},hDb);var IM=mdb(Cke,'Tree',221);bcb(1254,1,{},jDb);var KM=mdb(Eke,'Scanline',1254);var JM=odb(Eke,Fke);bcb(1692,1,{},mDb);var LM=mdb(Gke,'CGraph',1692);bcb(307,1,{307:1},oDb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=Qje;var NM=mdb(Gke,'CGroup',307);bcb(815,1,{},sDb);var MM=mdb(Gke,'CGroup/CGroupBuilder',815);bcb(57,1,{57:1},tDb);_.Ib=function uDb(){var a;if(this.j){return GD(this.j.Kb(this))}return fdb(PM),PM.o+'@'+(a=FCb(this)>>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),307);f.k=j;f.g==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),307);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),57);p=f.k+k.b.a;!UDb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(ead(),bad)||a.d==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),57);for(i=k.c.Kc();i.Ob();){h=BD(i.Pb(),57);fad(a.d)?(o=a.g.Oe(k,h)):(o=a.g.Pe(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);VDb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Dsb(n,h.a)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=b.i}};var RM=mdb(Gke,'LongestPathCompaction',1790);bcb(1690,1,{},cEb);_.e=false;var LDb,MDb,NDb;var TM=mdb(Gke,Nke,1690);bcb(1691,1,qie,dEb);_.td=function eEb(a){WDb(this.a,BD(a,46))};var SM=mdb(Gke,Oke,1691);bcb(1791,1,{},fEb);_.Me=function gEb(a){var b,c,d,e,f,g,h;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),57);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}fad(a.d)?(h=a.g.Pe(d,f)):(h=a.g.Oe(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&BDb(f.d.d+f.d.a+h,d.d.d)&&DDb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var UM=mdb(Gke,'QuadraticConstraintCalculation',1791);bcb(522,1,{522:1},lEb);_.a=false;_.b=false;_.c=false;_.d=false;var VM=mdb(Gke,Pke,522);bcb(803,1,{},oEb);_.Me=function pEb(a){this.c=a;nEb(this,new GEb)};var _M=mdb(Gke,Qke,803);bcb(1718,1,{679:1},uEb);_.Ke=function vEb(a){rEb(this,BD(a,464))};var XM=mdb(Gke,Rke,1718);bcb(1719,1,Dke,xEb);_.ue=function yEb(a,b){return wEb(BD(a,57),BD(b,57))};_.Fb=function zEb(a){return this===a};_.ve=function AEb(){return new tpb(this)};var WM=mdb(Gke,Ske,1719);bcb(464,1,{464:1},BEb);_.a=false;var YM=mdb(Gke,Tke,464);bcb(1720,1,Dke,CEb);_.ue=function DEb(a,b){return qEb(BD(a,464),BD(b,464))};_.Fb=function EEb(a){return this===a};_.ve=function FEb(){return new tpb(this)};var ZM=mdb(Gke,Uke,1720);bcb(1721,1,Vke,GEb);_.Lb=function HEb(a){return BD(a,57),true};_.Fb=function IEb(a){return this===a};_.Mb=function JEb(a){return BD(a,57),true};var $M=mdb(Gke,'ScanlineConstraintCalculator/lambda$1$Type',1721);bcb(428,22,{3:1,35:1,22:1,428:1},NEb);var KEb,LEb;var aN=ndb(Wke,'HighLevelSortingCriterion',428,CI,PEb,OEb);var QEb;bcb(427,22,{3:1,35:1,22:1,427:1},VEb);var SEb,TEb;var bN=ndb(Wke,'LowLevelSortingCriterion',427,CI,XEb,WEb);var YEb;var C0=odb(Xke,'ILayoutMetaDataProvider');bcb(853,1,ale,gFb);_.Qe=function hFb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yke),ble),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),eFb),(_5c(),V5c)),dN),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zke),ble),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),cFb),V5c),bN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ke),ble),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),aFb),V5c),aN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ke),ble),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Bcb(),true)),T5c),wI),pqb(L5c))))};var $Eb,_Eb,aFb,bFb,cFb,dFb,eFb;var cN=mdb(Wke,'PolyominoOptions',853);bcb(250,22,{3:1,35:1,22:1,250:1},sFb);var iFb,jFb,kFb,lFb,mFb,nFb,oFb,pFb,qFb;var dN=ndb(Wke,'TraversalStrategy',250,CI,uFb,tFb);var vFb;bcb(213,1,{213:1},yFb);_.Ib=function zFb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var fN=mdb(cle,'NEdge',213);bcb(176,1,{},FFb);var eN=mdb(cle,'NEdge/NEdgeBuilder',176);bcb(653,1,{},KFb);var gN=mdb(cle,'NGraph',653);bcb(121,1,{121:1},MFb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var jN=mdb(cle,'NNode',121);bcb(795,1,cke,PFb);_.Jc=function XFb(a){reb(this,a)};_.Lc=function cGb(){return new YAb(null,new Kub(this,16))};_.ad=function hGb(a){ktb(this,a)};_.Nc=function iGb(){return new Kub(this,16)};_.Oc=function jGb(){return new YAb(null,new Kub(this,16))};_.Vc=function QFb(a,b){++this.b;Dkb(this.a,a,b)};_.Fc=function RFb(a){return NFb(this,a)};_.Wc=function SFb(a,b){++this.b;return Fkb(this.a,a,b)};_.Gc=function TFb(a){++this.b;return Gkb(this.a,a)};_.$b=function UFb(){++this.b;this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function VFb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function WFb(a){return Be(this.a,a)};_.Xb=function YFb(a){return Ikb(this.a,a)};_.Xc=function ZFb(a){return Jkb(this.a,a,0)};_.dc=function $Fb(){return this.a.c.length==0};_.Kc=function _Fb(){return vr(new olb(this.a))};_.Yc=function aGb(){throw vbb(new bgb)};_.Zc=function bGb(a){throw vbb(new bgb)};_.$c=function dGb(a){++this.b;return Kkb(this.a,a)};_.Mc=function eGb(a){return OFb(this,a)};_._c=function fGb(a,b){++this.b;return Nkb(this.a,a,b)};_.gc=function gGb(){return this.a.c.length};_.bd=function kGb(a,b){return new Jib(this.a,a,b)};_.Pc=function lGb(){return Pkb(this.a)};_.Qc=function mGb(a){return Qkb(this.a,a)};_.b=0;var hN=mdb(cle,'NNode/ChangeAwareArrayList',795);bcb(269,1,{},pGb);var iN=mdb(cle,'NNode/NNodeBuilder',269);bcb(1630,1,{},KGb);_.a=false;_.f=Ohe;_.j=0;var kN=mdb(cle,'NetworkSimplex',1630);bcb(1294,1,qie,QGb);_.td=function RGb(a){PGb(this.a,BD(a,680),true,false)};var lN=mdb(ele,'NodeLabelAndSizeCalculator/lambda$0$Type',1294);bcb(558,1,{},YGb);_.b=true;_.c=true;_.d=true;_.e=true;var mN=mdb(ele,'NodeMarginCalculator',558);bcb(212,1,{212:1});_.j=false;_.k=false;var oN=mdb(fle,'Cell',212);bcb(124,212,{124:1,212:1},aHb);_.Re=function bHb(){return _Gb(this)};_.Se=function cHb(){var a;a=this.n;return this.a.a+a.b+a.c};var nN=mdb(fle,'AtomicCell',124);bcb(232,22,{3:1,35:1,22:1,232:1},hHb);var dHb,eHb,fHb;var pN=ndb(fle,'ContainerArea',232,CI,jHb,iHb);var kHb;bcb(326,212,hle);var qN=mdb(fle,'ContainerCell',326);bcb(1473,326,hle,FHb);_.Re=function GHb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].Re()):(a=EHb(this,AHb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,EHb(this,yHb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];wHb(this,b,a)}}else{for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];a=yHb(this,b,false);wHb(this,b,a)}}};_.Ue=function JHb(){var a,b,c,d;b=this.i;a=this.n;d=AHb(this,false);uHb(this,(gHb(),dHb),b.d+a.d,d);uHb(this,fHb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=meb(XMb(a.a))}c+='\n';a=meb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=meb(XMb(a.a));for(d=0;d<this.o;d++){b=_Mb(this,d,f);ybb(b,0)==0?(c+='_'):ybb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return qfb(c,0,c.length-1)};_.o=0;_.p=0;var nO=mdb(Ble,'TwoBitGrid',1298);bcb(321,1298,{321:1},pNb);_.j=0;_.k=0;var kO=mdb(Ble,'PlanarGrid',321);bcb(167,321,{321:1,167:1});_.g=0;_.i=0;var lO=mdb(Ble,'Polyomino',167);var P3=odb(Hle,Ile);bcb(134,1,Jle,zNb);_.Ye=function DNb(a,b){return xNb(this,a,b)};_.Ve=function ANb(){return uNb(this)};_.We=function BNb(a){return vNb(this,a)};_.Xe=function CNb(a){return wNb(this,a)};var R3=mdb(Hle,'MapPropertyHolder',134);bcb(1299,134,Jle,ENb);var mO=mdb(Ble,'Polyominoes',1299);var FNb=false,GNb,HNb;bcb(1766,1,qie,PNb);_.td=function QNb(a){JNb(BD(a,221))};var oO=mdb(Kle,'DepthFirstCompaction/0methodref$compactTree$Type',1766);bcb(810,1,qie,RNb);_.td=function SNb(a){MNb(this.a,BD(a,221))};var pO=mdb(Kle,'DepthFirstCompaction/lambda$1$Type',810);bcb(1767,1,qie,TNb);_.td=function UNb(a){NNb(this.a,this.b,this.c,BD(a,221))};var qO=mdb(Kle,'DepthFirstCompaction/lambda$2$Type',1767);var VNb,WNb;bcb(65,1,{65:1},aOb);var rO=mdb(Kle,'Node',65);bcb(1250,1,{},dOb);var wO=mdb(Kle,'ScanlineOverlapCheck',1250);bcb(1251,1,{679:1},hOb);_.Ke=function iOb(a){fOb(this,BD(a,440))};var tO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler',1251);bcb(1252,1,Dke,kOb);_.ue=function lOb(a,b){return jOb(BD(a,65),BD(b,65))};_.Fb=function mOb(a){return this===a};_.ve=function nOb(){return new tpb(this)};var sO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1252);bcb(440,1,{440:1},oOb);_.a=false;var uO=mdb(Kle,'ScanlineOverlapCheck/Timestamp',440);bcb(1253,1,Dke,pOb);_.ue=function qOb(a,b){return eOb(BD(a,440),BD(b,440))};_.Fb=function rOb(a){return this===a};_.ve=function sOb(){return new tpb(this)};var vO=mdb(Kle,'ScanlineOverlapCheck/lambda$0$Type',1253);bcb(550,1,{},tOb);var xO=mdb(Lle,'SVGImage',550);bcb(324,1,{324:1},uOb);_.Ib=function vOb(){return '('+this.a+She+this.b+She+this.c+')'};var yO=mdb(Lle,'UniqueTriple',324);bcb(209,1,Mle);var g0=mdb(Nle,'AbstractLayoutProvider',209);bcb(1132,209,Mle,yOb);_.Ze=function zOb(a,b){var c,d,e,f;Odd(b,Ole,1);this.a=Edb(ED(hkd(a,(CPb(),BPb))));if(ikd(a,rPb)){e=GD(hkd(a,rPb));c=h4c(n4c(),e);if(c){d=BD(hgd(c.f),209);d.Ze(a,Udd(b,1))}}f=new AQb(this.a);this.b=yQb(f,a);switch(BD(hkd(a,(nPb(),jPb)),481).g){case 0:BOb(new FOb,this.b);jkd(a,uPb,vNb(this.b,uPb));break;default:Zfb();}qQb(f);jkd(a,tPb,this.b);Qdd(b)};_.a=0;var zO=mdb(Ple,'DisCoLayoutProvider',1132);bcb(1244,1,{},FOb);_.c=false;_.e=0;_.f=0;var AO=mdb(Ple,'DisCoPolyominoCompactor',1244);bcb(561,1,{561:1},MOb);_.b=true;var BO=mdb(Qle,'DCComponent',561);bcb(394,22,{3:1,35:1,22:1,394:1},SOb);_.a=false;var NOb,OOb,POb,QOb;var CO=ndb(Qle,'DCDirection',394,CI,UOb,TOb);var VOb;bcb(266,134,{3:1,266:1,94:1,134:1},XOb);var DO=mdb(Qle,'DCElement',266);bcb(395,1,{395:1},ZOb);_.c=0;var EO=mdb(Qle,'DCExtension',395);bcb(755,134,Jle,aPb);var FO=mdb(Qle,'DCGraph',755);bcb(481,22,{3:1,35:1,22:1,481:1},dPb);var bPb;var GO=ndb(Rle,Sle,481,CI,fPb,ePb);var gPb;bcb(854,1,ale,oPb);_.Qe=function pPb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tle),Xle),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),kPb),(_5c(),V5c)),GO),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Ule),Xle),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),Z5c),ZI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vle),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),Y5c),SI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wle),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),Y5c),SI),pqb(L5c))));DPb((new EPb,a))};var iPb,jPb,kPb,lPb,mPb;var HO=mdb(Rle,'DisCoMetaDataProvider',854);bcb(998,1,ale,EPb);_.Qe=function FPb(a){DPb(a)};var qPb,rPb,sPb,tPb,uPb,vPb,wPb,xPb,yPb,zPb,APb,BPb;var JO=mdb(Rle,'DisCoOptions',998);bcb(999,1,{},GPb);_.$e=function HPb(){var a;return a=new yOb,a};_._e=function IPb(a){};var IO=mdb(Rle,'DisCoOptions/DiscoFactory',999);bcb(562,167,{321:1,167:1,562:1},MPb);_.a=0;_.b=0;_.c=0;_.d=0;var KO=mdb('org.eclipse.elk.alg.disco.structures','DCPolyomino',562);var NPb,OPb,PPb;bcb(1268,1,Oie,aQb);_.Mb=function bQb(a){return _Pb(a)};var LO=mdb(bme,'ElkGraphComponentsProcessor/lambda$0$Type',1268);bcb(1269,1,{},cQb);_.Kb=function dQb(a){return QPb(),jtd(BD(a,79))};var MO=mdb(bme,'ElkGraphComponentsProcessor/lambda$1$Type',1269);bcb(1270,1,Oie,eQb);_.Mb=function fQb(a){return WPb(BD(a,79))};var NO=mdb(bme,'ElkGraphComponentsProcessor/lambda$2$Type',1270);bcb(1271,1,{},gQb);_.Kb=function hQb(a){return QPb(),ltd(BD(a,79))};var OO=mdb(bme,'ElkGraphComponentsProcessor/lambda$3$Type',1271);bcb(1272,1,Oie,iQb);_.Mb=function jQb(a){return XPb(BD(a,79))};var PO=mdb(bme,'ElkGraphComponentsProcessor/lambda$4$Type',1272);bcb(1273,1,Oie,kQb);_.Mb=function lQb(a){return YPb(this.a,BD(a,79))};var QO=mdb(bme,'ElkGraphComponentsProcessor/lambda$5$Type',1273);bcb(1274,1,{},mQb);_.Kb=function nQb(a){return ZPb(this.a,BD(a,79))};var RO=mdb(bme,'ElkGraphComponentsProcessor/lambda$6$Type',1274);bcb(1241,1,{},AQb);_.a=0;var UO=mdb(bme,'ElkGraphTransformer',1241);bcb(1242,1,{},CQb);_.Od=function DQb(a,b){BQb(this,BD(a,160),BD(b,266))};var TO=mdb(bme,'ElkGraphTransformer/OffsetApplier',1242);bcb(1243,1,qie,FQb);_.td=function GQb(a){EQb(this,BD(a,8))};var SO=mdb(bme,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1243);bcb(753,1,{},MQb);var WO=mdb(gme,hme,753);bcb(1232,1,Dke,OQb);_.ue=function PQb(a,b){return NQb(BD(a,231),BD(b,231))};_.Fb=function QQb(a){return this===a};_.ve=function RQb(){return new tpb(this)};var VO=mdb(gme,ime,1232);bcb(740,209,Mle,ZQb);_.Ze=function $Qb(a,b){WQb(this,a,b)};var XO=mdb(gme,'ForceLayoutProvider',740);bcb(357,134,{3:1,357:1,94:1,134:1});var bP=mdb(jme,'FParticle',357);bcb(559,357,{3:1,559:1,357:1,94:1,134:1},aRb);_.Ib=function bRb(){var a;if(this.a){a=Jkb(this.a.a,this,0);return a>=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var dP=mdb(lme,'EadesModel',631);bcb(632,2003,{632:1},DRb);_.af=function FRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);f=JRb(d,this.a)*BD(vNb(a,(wSb(),oSb)),19).a;c=jRb(this.e,a,b);c>0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);f+=g.e.a;e+=g.e.b}b=f*e;c=Edb(ED(vNb(a,uSb)))*ple;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.cf=function HRb(){sRb(this);this.b-=this.c};_.df=function IRb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.a<c.c.c.length;){b=BD(mlb(c),325);if(b.mf(a)){return}}Ekb(this.a,new AXb(a))};_.lf=function JXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);this.of(d)}o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);k=DXb(h,f);vXb(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var eQ=mdb(_me,'ComponentGroupGraphPlacer',765);bcb(1293,765,{},LXb);_.of=function MXb(a){KXb(this,a)};_.lf=function NXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);KXb(this,d)}t=new d7c;s=new d7c;p=new d7c;o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);if(fad(BD(vNb(b,(Y9c(),z8c)),103))){p.a=t.a;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Acd))){p.a=s.a;break}}}else if(gad(BD(vNb(b,z8c),103))){p.b=t.b;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Tcd))){p.b=s.b;break}}}k=DXb(BD(h,570),f);vXb(Uc(h.b),p.a,p.b);if(fad(BD(vNb(b,z8c),103))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Rcd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(gad(BD(vNb(b,z8c),103))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),zcd))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var fQ=mdb(_me,'ComponentGroupModelOrderGraphPlacer',1293);bcb(423,22,{3:1,35:1,22:1,423:1},SXb);var OXb,PXb,QXb;var hQ=ndb(_me,'ComponentOrderingStrategy',423,CI,UXb,TXb);var VXb;bcb(650,1,{},gYb);var pQ=mdb(_me,'ComponentsCompactor',650);bcb(1468,12,ake,jYb);_.Fc=function kYb(a){return hYb(this,BD(a,140))};var iQ=mdb(_me,'ComponentsCompactor/Hullpoints',1468);bcb(1465,1,{841:1},mYb);_.a=false;var jQ=mdb(_me,'ComponentsCompactor/InternalComponent',1465);bcb(1464,1,vie,nYb);_.Jc=function oYb(a){reb(this,a)};_.Kc=function pYb(){return new olb(this.a)};var kQ=mdb(_me,'ComponentsCompactor/InternalConnectedComponents',1464);bcb(1467,1,{594:1},qYb);_.hf=function sYb(){return null};_.jf=function tYb(){return this.a};_.gf=function rYb(){return cYb(this.d)};_.kf=function uYb(){return this.b};var lQ=mdb(_me,'ComponentsCompactor/InternalExternalExtension',1467);bcb(1466,1,{594:1},vYb);_.jf=function yYb(){return this.a};_.gf=function wYb(){return cYb(this.d)};_.hf=function xYb(){return this.c};_.kf=function zYb(){return this.b};var mQ=mdb(_me,'ComponentsCompactor/InternalUnionExternalExtension',1466);bcb(1470,1,{},AYb);var nQ=mdb(_me,'ComponentsCompactor/OuterSegments',1470);bcb(1469,1,{},BYb);var oQ=mdb(_me,'ComponentsCompactor/Segments',1469);bcb(1264,1,{},FYb);var rQ=mdb(_me,hme,1264);bcb(1265,1,Dke,HYb);_.ue=function IYb(a,b){return GYb(BD(a,37),BD(b,37))};_.Fb=function JYb(a){return this===a};_.ve=function KYb(){return new tpb(this)};var qQ=mdb(_me,'ComponentsProcessor/lambda$0$Type',1265);bcb(570,325,{325:1,570:1},PYb);_.mf=function QYb(a){return NYb(this,a)};_.nf=function RYb(a){return OYb(this,a)};var LYb;var sQ=mdb(_me,'ModelOrderComponentGroup',570);bcb(1291,2005,{},SYb);_.lf=function TYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(a.gc()==1){t=BD(a.Xb(0),37);if(t!=b){b.a.c=KC(SI,Uhe,1,0,5,1);sXb(b,t,0,0);tNb(b,t);u_b(b.d,t.d);b.f.a=t.f.a;b.f.b=t.f.b}return}else if(a.dc()){b.a.c=KC(SI,Uhe,1,0,5,1);b.f.a=0;b.f.b=0;return}if(PD(vNb(b,(Nyc(),twc)))===PD((RXb(),QXb))){for(i=a.Kc();i.Ob();){g=BD(i.Pb(),37);r=0;for(p=new olb(g.a);p.a<p.c.c.length;){o=BD(mlb(p),10);r+=BD(vNb(o,byc),19).a}g.p=r}mmb();a.ad(new VYb)}f=BD(a.Xb(0),37);b.a.c=KC(SI,Uhe,1,0,5,1);tNb(b,f);n=0;u=0;for(j=a.Kc();j.Ob();){g=BD(j.Pb(),37);s=g.f;n=$wnd.Math.max(n,s.a);u+=s.a*s.b}n=$wnd.Math.max(n,$wnd.Math.sqrt(u)*Edb(ED(vNb(b,owc))));e=Edb(ED(vNb(b,kyc)));v=0;w=0;m=0;c=e;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);s=g.f;if(v+s.a>n){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.b=null;var CQ=mdb(fne,'LGraphAdapters/LEdgeAdapter',577);bcb(656,1,{},l$b);_.xf=function m$b(){var a,b,c,d,e,f;if(!this.b){this.b=new Rkb;for(d=new olb(this.a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);if(this.c.Mb(e)){Ekb(this.b,new x$b(this,e,this.e));if(this.d){if(wNb(e,(wtc(),vtc))){for(b=BD(vNb(e,vtc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}if(wNb(e,tsc)){for(b=BD(vNb(e,tsc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}}}}}}return this.b};_.qf=function n$b(){throw vbb(new cgb(hne))};_.We=function o$b(a){return vNb(this.a,a)};_.rf=function p$b(){return this.a.f};_.sf=function q$b(){return this.a.p};_.Xe=function r$b(a){return wNb(this.a,a)};_.tf=function s$b(a){throw vbb(new cgb(hne))};_.uf=function t$b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.vf=function u$b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var DQ=mdb(fne,'LGraphAdapters/LGraphAdapter',656);bcb(576,657,{181:1},v$b);var EQ=mdb(fne,'LGraphAdapters/LLabelAdapter',576);bcb(575,657,{680:1},x$b);_.yf=function y$b(){return this.b};_.zf=function z$b(){return mmb(),mmb(),jmb};_.wf=function A$b(){var a,b;if(!this.a){this.a=Pu(BD(this.e,10).b.c.length);for(b=new olb(BD(this.e,10).b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.a,new v$b(a))}}return this.a};_.Af=function B$b(){var a;a=BD(this.e,10).d;return new J_b(a.d,a.c,a.a,a.b)};_.Bf=function C$b(){return mmb(),mmb(),jmb};_.Cf=function D$b(){var a,b;if(!this.c){this.c=Pu(BD(this.e,10).j.c.length);for(b=new olb(BD(this.e,10).j);b.a<b.c.c.length;){a=BD(mlb(b),11);Ekb(this.c,new I$b(a,this.d))}}return this.c};_.Df=function E$b(){return Ccb(DD(vNb(BD(this.e,10),(wtc(),wsc))))};_.Ef=function F$b(a){BD(this.e,10).d.b=a.b;BD(this.e,10).d.d=a.d;BD(this.e,10).d.c=a.c;BD(this.e,10).d.a=a.a};_.Ff=function G$b(a){BD(this.e,10).f.b=a.b;BD(this.e,10).f.d=a.d;BD(this.e,10).f.c=a.c;BD(this.e,10).f.a=a.a};_.Gf=function H$b(){w$b(this,(a$b(),_Zb))};_.a=null;_.b=null;_.c=null;_.d=false;var FQ=mdb(fne,'LGraphAdapters/LNodeAdapter',575);bcb(1722,657,{838:1},I$b);_.zf=function J$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.a){this.a=new Rkb;for(c=new olb(BD(this.e,11).e);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.a,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.a,new j$b(a))}}}}return this.a};_.wf=function K$b(){var a,b;if(!this.b){this.b=Pu(BD(this.e,11).f.c.length);for(b=new olb(BD(this.e,11).f);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.Bf=function L$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.c){this.c=new Rkb;for(c=new olb(BD(this.e,11).g);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.c,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.c,new j$b(a))}}}}return this.c};_.Hf=function M$b(){return BD(this.e,11).j};_.If=function N$b(){return Ccb(DD(vNb(BD(this.e,11),(wtc(),Nsc))))};_.a=null;_.b=null;_.c=null;_.d=false;var GQ=mdb(fne,'LGraphAdapters/LPortAdapter',1722);bcb(1723,1,Dke,P$b);_.ue=function Q$b(a,b){return O$b(BD(a,11),BD(b,11))};_.Fb=function R$b(a){return this===a};_.ve=function S$b(){return new tpb(this)};var HQ=mdb(fne,'LGraphAdapters/PortComparator',1723);bcb(804,1,Oie,T$b);_.Mb=function U$b(a){return BD(a,10),a$b(),true};var IQ=mdb(fne,'LGraphAdapters/lambda$0$Type',804);bcb(392,299,{3:1,299:1,392:1,94:1,134:1});var bR=mdb(fne,'LShape',392);bcb(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},p_b,q_b);_.Ib=function r_b(){var a;a=o_b(this);return a==null?'label':'l_'+a};var LQ=mdb(fne,'LLabel',70);bcb(207,1,{3:1,4:1,207:1,414:1});_.Fb=function C_b(a){var b;if(JD(a,207)){b=BD(a,207);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function D_b(){var a,b;a=Hdb(this.b)<<16;a|=Hdb(this.a)&aje;b=Hdb(this.c)<<16;b|=Hdb(this.d)&aje;return a^b};_.Jf=function F_b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&E_b((BCb(g,b.length),b.charCodeAt(g)),mne)){++g}c=b.length;while(c>0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g<c){l=mfb(b.substr(g,c-g),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=mfb(h,'=');if(f.length!=2){throw vbb(new Wdb('Expecting a list of key-value pairs.'))}e=ufb(f[0]);m=Hcb(ufb(f[1]));dfb(e,'top')?(this.d=m):dfb(e,'left')?(this.b=m):dfb(e,'bottom')?(this.a=m):dfb(e,'right')&&(this.c=m)}}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}}};_.Ib=function G_b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var n1=mdb(pne,'Spacing',207);bcb(142,207,qne,H_b,I_b,J_b,K_b);var i1=mdb(pne,'ElkMargin',142);bcb(651,142,qne,L_b);var MQ=mdb(fne,'LMargin',651);bcb(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},b0b);_.Ib=function c0b(){return a0b(this)};_.i=false;var OQ=mdb(fne,'LNode',10);bcb(267,22,{3:1,35:1,22:1,267:1},k0b);var d0b,e0b,f0b,g0b,h0b,i0b;var NQ=ndb(fne,'LNode/NodeType',267,CI,m0b,l0b);var n0b;bcb(116,207,rne,p0b,q0b,r0b);var j1=mdb(pne,'ElkPadding',116);bcb(764,116,rne,s0b);var PQ=mdb(fne,'LPadding',764);bcb(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},H0b);_.Ib=function I0b(){var a,b,c;a=new Ufb;Qfb((a.a+='p_',a),C0b(this));!!this.i&&Qfb(Pfb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&BD(Ikb(this.e,0),17).c!=this){b=BD(Ikb(this.e,0),17).c;Qfb((a.a+=' << ',a),C0b(b));Qfb(Pfb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&BD(Ikb(this.g,0),17).d!=this){c=BD(Ikb(this.g,0),17).d;Qfb((a.a+=' >> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.d=this.b;f=nGb(oGb(new pGb,b),this.d);this.c[this.b]=f;++this.b}cic(this);bic(this);aic(this);uGb(LGb(this.d),new Zdd);for(e=new olb(this.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var dV=mdb(Jne,'NetworkSimplexCompaction',1663);bcb(145,1,{35:1,145:1},hic);_.wd=function iic(a){return fic(this,BD(a,145))};_.Ib=function jic(){return gic(this)};var eV=mdb(Jne,'VerticalSegment',145);bcb(827,1,{},sic);_.c=0;_.e=0;_.i=0;var hV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter',827);bcb(663,1,{663:1},zic);_.Ib=function Aic(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var gV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',663);bcb(287,1,{35:1,287:1},Dic);_.wd=function Eic(a){return Bic(this,BD(a,287))};_.Ib=function Fic(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var fV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',287);bcb(1929,1,{},Iic);_.b=0;_.e=false;var iV=mdb(Kne,'CrossingMatrixFiller',1929);var qY=odb(Lne,'IInitializable');bcb(1804,1,Mne,Oic);_.Nf=function Ric(a,b,c,d,e,f){};_.Pf=function Tic(a,b,c){};_.Lf=function Pic(){return this.c!=(rGc(),pGc)};_.Mf=function Qic(){this.e=KC(WD,oje,25,this.d,15,1)};_.Of=function Sic(a,b){b[a][0].c.p=a};_.Qf=function Uic(a,b,c,d){++this.d};_.Rf=function Vic(){return true};_.Sf=function Wic(a,b,c,d){Kic(this,a,b,c);return Jic(this,b)};_.Tf=function Xic(a,b){var c;c=Lic(b,a.length);Kic(this,a,c,b);return Mic(this,c)};_.d=0;var jV=mdb(Kne,'GreedySwitchHeuristic',1804);bcb(1930,1,{},ejc);_.b=0;_.d=0;var kV=mdb(Kne,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',1930);bcb(1917,1,{},jjc);_.a=false;var lV=mdb(Kne,'SwitchDecider',1917);bcb(101,1,{101:1},pjc);_.a=null;_.c=null;_.i=null;var oV=mdb(Nne,'SelfHyperLoop',101);bcb(1916,1,{},vjc);_.c=0;_.e=0;var nV=mdb(Nne,'SelfHyperLoopLabels',1916);bcb(411,22,{3:1,35:1,22:1,411:1},Bjc);var wjc,xjc,yjc,zjc;var mV=ndb(Nne,'SelfHyperLoopLabels/Alignment',411,CI,Djc,Cjc);var Ejc;bcb(409,1,{409:1},Gjc);var pV=mdb(Nne,'SelfLoopEdge',409);bcb(403,1,{403:1},Kjc);_.a=false;var rV=mdb(Nne,'SelfLoopHolder',403);bcb(1724,1,Oie,Mjc);_.Mb=function Njc(a){return OZb(BD(a,17))};var qV=mdb(Nne,'SelfLoopHolder/lambda$0$Type',1724);bcb(113,1,{113:1},Pjc);_.a=false;_.c=false;var tV=mdb(Nne,'SelfLoopPort',113);bcb(1792,1,Oie,Qjc);_.Mb=function Rjc(a){return OZb(BD(a,17))};var sV=mdb(Nne,'SelfLoopPort/lambda$0$Type',1792);bcb(363,22,{3:1,35:1,22:1,363:1},Yjc);var Sjc,Tjc,Ujc,Vjc,Wjc;var uV=ndb(Nne,'SelfLoopType',363,CI,_jc,$jc);var akc;bcb(1732,1,{},xkc);var ckc,dkc,ekc,fkc;var JV=mdb(One,'PortRestorer',1732);bcb(361,22,{3:1,35:1,22:1,361:1},Gkc);var Ckc,Dkc,Ekc;var vV=ndb(One,'PortRestorer/PortSideArea',361,CI,Ikc,Hkc);var Jkc;bcb(1733,1,{},Lkc);_.Kb=function Mkc(a){return gkc(),BD(a,15).Oc()};var wV=mdb(One,'PortRestorer/lambda$0$Type',1733);bcb(1734,1,qie,Nkc);_.td=function Okc(a){gkc();BD(a,113).c=false};var xV=mdb(One,'PortRestorer/lambda$1$Type',1734);bcb(1743,1,Oie,Pkc);_.Mb=function Qkc(a){return gkc(),BD(a,11).j==(Ucd(),Tcd)};var yV=mdb(One,'PortRestorer/lambda$10$Type',1743);bcb(1744,1,{},Rkc);_.Kb=function Skc(a){return gkc(),BD(a,113).d};var zV=mdb(One,'PortRestorer/lambda$11$Type',1744);bcb(1745,1,qie,Tkc);_.td=function Ukc(a){ykc(this.a,BD(a,11))};var AV=mdb(One,'PortRestorer/lambda$12$Type',1745);bcb(1735,1,qie,Vkc);_.td=function Wkc(a){zkc(this.a,BD(a,101))};var BV=mdb(One,'PortRestorer/lambda$2$Type',1735);bcb(1736,1,Dke,Xkc);_.ue=function Ykc(a,b){return Akc(BD(a,113),BD(b,113))};_.Fb=function Zkc(a){return this===a};_.ve=function $kc(){return new tpb(this)};var CV=mdb(One,'PortRestorer/lambda$3$Type',1736);bcb(1737,1,Oie,_kc);_.Mb=function alc(a){return gkc(),BD(a,113).c};var DV=mdb(One,'PortRestorer/lambda$4$Type',1737);bcb(1738,1,Oie,blc);_.Mb=function clc(a){return nkc(BD(a,11))};var EV=mdb(One,'PortRestorer/lambda$5$Type',1738);bcb(1739,1,Oie,dlc);_.Mb=function elc(a){return gkc(),BD(a,11).j==(Ucd(),Acd)};var FV=mdb(One,'PortRestorer/lambda$6$Type',1739);bcb(1740,1,Oie,flc);_.Mb=function glc(a){return gkc(),BD(a,11).j==(Ucd(),zcd)};var GV=mdb(One,'PortRestorer/lambda$7$Type',1740);bcb(1741,1,Oie,hlc);_.Mb=function ilc(a){return okc(BD(a,11))};var HV=mdb(One,'PortRestorer/lambda$8$Type',1741);bcb(1742,1,Oie,jlc);_.Mb=function klc(a){return gkc(),BD(a,11).j==(Ucd(),Rcd)};var IV=mdb(One,'PortRestorer/lambda$9$Type',1742);bcb(270,22,{3:1,35:1,22:1,270:1},Blc);var slc,tlc,ulc,vlc,wlc,xlc,ylc,zlc;var KV=ndb(One,'PortSideAssigner/Target',270,CI,Dlc,Clc);var Elc;bcb(1725,1,{},Glc);_.Kb=function Hlc(a){return JAb(new YAb(null,new Kub(BD(a,101).j,16)),new Ylc)};var LV=mdb(One,'PortSideAssigner/lambda$1$Type',1725);bcb(1726,1,{},Ilc);_.Kb=function Jlc(a){return BD(a,113).d};var MV=mdb(One,'PortSideAssigner/lambda$2$Type',1726);bcb(1727,1,qie,Klc);_.td=function Llc(a){G0b(BD(a,11),(Ucd(),Acd))};var NV=mdb(One,'PortSideAssigner/lambda$3$Type',1727);bcb(1728,1,{},Mlc);_.Kb=function Nlc(a){return BD(a,113).d};var OV=mdb(One,'PortSideAssigner/lambda$4$Type',1728);bcb(1729,1,qie,Olc);_.td=function Plc(a){plc(this.a,BD(a,11))};var PV=mdb(One,'PortSideAssigner/lambda$5$Type',1729);bcb(1730,1,Dke,Qlc);_.ue=function Rlc(a,b){return qlc(BD(a,101),BD(b,101))};_.Fb=function Slc(a){return this===a};_.ve=function Tlc(){return new tpb(this)};var QV=mdb(One,'PortSideAssigner/lambda$6$Type',1730);bcb(1731,1,Dke,Ulc);_.ue=function Vlc(a,b){return rlc(BD(a,113),BD(b,113))};_.Fb=function Wlc(a){return this===a};_.ve=function Xlc(){return new tpb(this)};var RV=mdb(One,'PortSideAssigner/lambda$7$Type',1731);bcb(805,1,Oie,Ylc);_.Mb=function Zlc(a){return BD(a,113).c};var SV=mdb(One,'PortSideAssigner/lambda$8$Type',805);bcb(2009,1,{});var TV=mdb(Pne,'AbstractSelfLoopRouter',2009);bcb(1750,1,Dke,gmc);_.ue=function hmc(a,b){return emc(BD(a,101),BD(b,101))};_.Fb=function imc(a){return this===a};_.ve=function jmc(){return new tpb(this)};var UV=mdb(Pne,rle,1750);bcb(1751,1,Dke,kmc);_.ue=function lmc(a,b){return fmc(BD(a,101),BD(b,101))};_.Fb=function mmc(a){return this===a};_.ve=function nmc(){return new tpb(this)};var VV=mdb(Pne,sle,1751);bcb(1793,2009,{},zmc);_.Uf=function Amc(a,b,c){return c};var XV=mdb(Pne,'OrthogonalSelfLoopRouter',1793);bcb(1795,1,qie,Bmc);_.td=function Cmc(a){ymc(this.b,this.a,BD(a,8))};var WV=mdb(Pne,'OrthogonalSelfLoopRouter/lambda$0$Type',1795);bcb(1794,1793,{},Fmc);_.Uf=function Gmc(a,b,c){var d,e;d=a.c.d;St(c,0,P6c(R6c(d.n),d.a));e=a.d.d;Dsb(c,P6c(R6c(e.n),e.a));return Dmc(c)};var YV=mdb(Pne,'PolylineSelfLoopRouter',1794);bcb(1746,1,{},Umc);_.a=null;var Hmc;var aW=mdb(Pne,'RoutingDirector',1746);bcb(1747,1,Dke,Wmc);_.ue=function Xmc(a,b){return Vmc(BD(a,113),BD(b,113))};_.Fb=function Ymc(a){return this===a};_.ve=function Zmc(){return new tpb(this)};var ZV=mdb(Pne,'RoutingDirector/lambda$0$Type',1747);bcb(1748,1,{},$mc);_.Kb=function _mc(a){return Imc(),BD(a,101).j};var $V=mdb(Pne,'RoutingDirector/lambda$1$Type',1748);bcb(1749,1,qie,anc);_.td=function bnc(a){Imc();BD(a,15).ad(Hmc)};var _V=mdb(Pne,'RoutingDirector/lambda$2$Type',1749);bcb(1752,1,{},mnc);var dW=mdb(Pne,'RoutingSlotAssigner',1752);bcb(1753,1,Oie,pnc);_.Mb=function qnc(a){return nnc(this.a,BD(a,101))};var bW=mdb(Pne,'RoutingSlotAssigner/lambda$0$Type',1753);bcb(1754,1,Dke,rnc);_.ue=function snc(a,b){return onc(this.a,BD(a,101),BD(b,101))};_.Fb=function tnc(a){return this===a};_.ve=function unc(){return new tpb(this)};var cW=mdb(Pne,'RoutingSlotAssigner/lambda$1$Type',1754);bcb(1796,1793,{},wnc);_.Uf=function xnc(a,b,c){var d,e,f,g;d=Edb(ED(c_b(a.b.g.b,(Nyc(),nyc))));g=new u7c(OC(GC(m1,1),nie,8,0,[(f=a.c.d,P6c(new g7c(f.n),f.a))]));vnc(a,b,c,g,d);Dsb(g,(e=a.d.d,P6c(new g7c(e.n),e.a)));return UPc(new YPc(g))};var eW=mdb(Pne,'SplineSelfLoopRouter',1796);bcb(578,1,Dke,Bnc,Dnc);_.ue=function Enc(a,b){return ync(this,BD(a,10),BD(b,10))};_.Fb=function Fnc(a){return this===a};_.ve=function Gnc(){return new tpb(this)};var kW=mdb(Qne,'ModelOrderNodeComparator',578);bcb(1755,1,Oie,Hnc);_.Mb=function Inc(a){return BD(a,11).e.c.length!=0};var fW=mdb(Qne,'ModelOrderNodeComparator/lambda$0$Type',1755);bcb(1756,1,{},Jnc);_.Kb=function Knc(a){return BD(Ikb(BD(a,11).e,0),17).c};var gW=mdb(Qne,'ModelOrderNodeComparator/lambda$1$Type',1756);bcb(1757,1,Oie,Lnc);_.Mb=function Mnc(a){return BD(a,11).e.c.length!=0};var hW=mdb(Qne,'ModelOrderNodeComparator/lambda$2$Type',1757);bcb(1758,1,{},Nnc);_.Kb=function Onc(a){return BD(Ikb(BD(a,11).e,0),17).c};var iW=mdb(Qne,'ModelOrderNodeComparator/lambda$3$Type',1758);bcb(1759,1,Oie,Pnc);_.Mb=function Qnc(a){return BD(a,11).e.c.length!=0};var jW=mdb(Qne,'ModelOrderNodeComparator/lambda$4$Type',1759);bcb(806,1,Dke,Tnc,Unc);_.ue=function Vnc(a,b){return Rnc(this,a,b)};_.Fb=function Wnc(a){return this===a};_.ve=function Xnc(){return new tpb(this)};var lW=mdb(Qne,'ModelOrderPortComparator',806);bcb(801,1,{},Ync);_.Vf=function $nc(a,b){var c,d,e,f;e=Znc(b);c=new Rkb;f=b.f/e;for(d=1;d<e;++d){Ekb(c,meb(Tbb(Cbb($wnd.Math.round(d*f)))))}return c};_.Wf=function _nc(){return false};var mW=mdb(Rne,'ARDCutIndexHeuristic',801);bcb(1479,1,ene,eoc);_.pf=function foc(a,b){doc(BD(a,37),b)};var pW=mdb(Rne,'BreakingPointInserter',1479);bcb(305,1,{305:1},goc);_.Ib=function joc(){var a;a=new Ufb;a.a+='BPInfo[';a.a+='\n\tstart=';Pfb(a,this.i);a.a+='\n\tend=';Pfb(a,this.a);a.a+='\n\tnodeStartEdge=';Pfb(a,this.e);a.a+='\n\tstartEndEdge=';Pfb(a,this.j);a.a+='\n\toriginalEdge=';Pfb(a,this.f);a.a+='\n\tstartInLayerDummy=';Pfb(a,this.k);a.a+='\n\tstartInLayerEdge=';Pfb(a,this.n);a.a+='\n\tendInLayerDummy=';Pfb(a,this.b);a.a+='\n\tendInLayerEdge=';Pfb(a,this.c);return a.a};var nW=mdb(Rne,'BreakingPointInserter/BPInfo',305);bcb(652,1,{652:1},qoc);_.a=false;_.b=0;_.c=0;var oW=mdb(Rne,'BreakingPointInserter/Cut',652);bcb(1480,1,ene,Aoc);_.pf=function Boc(a,b){yoc(BD(a,37),b)};var sW=mdb(Rne,'BreakingPointProcessor',1480);bcb(1481,1,Oie,Coc);_.Mb=function Doc(a){return hoc(BD(a,10))};var qW=mdb(Rne,'BreakingPointProcessor/0methodref$isEnd$Type',1481);bcb(1482,1,Oie,Eoc);_.Mb=function Foc(a){return ioc(BD(a,10))};var rW=mdb(Rne,'BreakingPointProcessor/1methodref$isStart$Type',1482);bcb(1483,1,ene,Joc);_.pf=function Koc(a,b){Hoc(this,BD(a,37),b)};var uW=mdb(Rne,'BreakingPointRemover',1483);bcb(1484,1,qie,Loc);_.td=function Moc(a){BD(a,128).k=true};var tW=mdb(Rne,'BreakingPointRemover/lambda$0$Type',1484);bcb(797,1,{},Xoc);_.b=0;_.e=0;_.f=0;_.j=0;var AW=mdb(Rne,'GraphStats',797);bcb(798,1,{},Zoc);_.Ce=function $oc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var vW=mdb(Rne,'GraphStats/0methodref$max$Type',798);bcb(799,1,{},_oc);_.Ce=function apc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var wW=mdb(Rne,'GraphStats/2methodref$max$Type',799);bcb(1660,1,{},bpc);_.Ce=function cpc(a,b){return Yoc(ED(a),ED(b))};var xW=mdb(Rne,'GraphStats/lambda$1$Type',1660);bcb(1661,1,{},dpc);_.Kb=function epc(a){return Roc(this.a,BD(a,29))};var yW=mdb(Rne,'GraphStats/lambda$2$Type',1661);bcb(1662,1,{},fpc);_.Kb=function gpc(a){return Qoc(this.a,BD(a,29))};var zW=mdb(Rne,'GraphStats/lambda$6$Type',1662);bcb(800,1,{},hpc);_.Vf=function ipc(a,b){var c;c=BD(vNb(a,(Nyc(),Eyc)),15);return c?c:(mmb(),mmb(),jmb)};_.Wf=function jpc(){return false};var BW=mdb(Rne,'ICutIndexCalculator/ManualCutIndexCalculator',800);bcb(802,1,{},kpc);_.Vf=function lpc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&Uoc(b),b.n);i=(b.d==null&&Uoc(b),b.d);t=KC(UD,Vje,25,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Znc(b)-1;g=BD(vNb(a,(Nyc(),Fyc)),19).a;d=Qje;c=new Rkb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new Rkb;s=Qje;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=Poc(b,new _oc)),Edb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(wNb(c,(wtc(),Zsc))&&BD(vNb(c,Zsc),19).a<b){b=BD(vNb(c,Zsc),19).a;e=c}}if(!e){return BD(Ikb(a,Bub(this.d,a.c.length)),10)}return e};var mX=mdb(Cqe,'GreedyModelOrderCycleBreaker',1386);bcb(1384,1,Bqe,kCc);_.Yf=function lCc(a){return BD(a,37),gCc};_.pf=function mCc(a,b){jCc(this,BD(a,37),b)};var gCc;var nX=mdb(Cqe,'InteractiveCycleBreaker',1384);bcb(1385,1,Bqe,rCc);_.Yf=function sCc(a){return BD(a,37),nCc};_.pf=function tCc(a,b){qCc(this,BD(a,37),b)};_.a=0;_.b=0;var nCc;var oX=mdb(Cqe,'ModelOrderCycleBreaker',1385);bcb(1389,1,Bqe,DCc);_.Yf=function ECc(a){return BD(a,37),uCc};_.pf=function FCc(a,b){BCc(this,BD(a,37),b)};var uCc;var rX=mdb(Dqe,'CoffmanGrahamLayerer',1389);bcb(1390,1,Dke,GCc);_.ue=function HCc(a,b){return xCc(this.a,BD(a,10),BD(b,10))};_.Fb=function ICc(a){return this===a};_.ve=function JCc(){return new tpb(this)};var pX=mdb(Dqe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1390);bcb(1391,1,Dke,KCc);_.ue=function LCc(a,b){return ACc(this.a,BD(a,10),BD(b,10))};_.Fb=function MCc(a){return this===a};_.ve=function NCc(){return new tpb(this)};var qX=mdb(Dqe,'CoffmanGrahamLayerer/lambda$1$Type',1391);bcb(1392,1,Bqe,QCc);_.Yf=function RCc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),mUb,w8b),nUb,v8b)};_.pf=function SCc(a,b){PCc(this,BD(a,37),b)};var tX=mdb(Dqe,'InteractiveLayerer',1392);bcb(569,1,{569:1},TCc);_.a=0;_.c=0;var sX=mdb(Dqe,'InteractiveLayerer/LayerSpan',569);bcb(1388,1,Bqe,ZCc);_.Yf=function $Cc(a){return BD(a,37),UCc};_.pf=function _Cc(a,b){WCc(this,BD(a,37),b)};var UCc;var uX=mdb(Dqe,'LongestPathLayerer',1388);bcb(1395,1,Bqe,iDc);_.Yf=function jDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function kDc(a,b){gDc(this,BD(a,37),b)};_.a=0;_.b=0;_.d=0;var aDc,bDc;var wX=mdb(Dqe,'MinWidthLayerer',1395);bcb(1396,1,Dke,mDc);_.ue=function nDc(a,b){return lDc(this,BD(a,10),BD(b,10))};_.Fb=function oDc(a){return this===a};_.ve=function pDc(){return new tpb(this)};var vX=mdb(Dqe,'MinWidthLayerer/MinOutgoingEdgesComparator',1396);bcb(1387,1,Bqe,xDc);_.Yf=function yDc(a){return BD(a,37),qDc};_.pf=function zDc(a,b){wDc(this,BD(a,37),b)};var qDc;var xX=mdb(Dqe,'NetworkSimplexLayerer',1387);bcb(1393,1,Bqe,LDc);_.Yf=function MDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function NDc(a,b){IDc(this,BD(a,37),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var zX=mdb(Dqe,'StretchWidthLayerer',1393);bcb(1394,1,Dke,PDc);_.ue=function QDc(a,b){return ODc(BD(a,10),BD(b,10))};_.Fb=function RDc(a){return this===a};_.ve=function SDc(){return new tpb(this)};var yX=mdb(Dqe,'StretchWidthLayerer/1',1394);bcb(402,1,Eqe);_.Nf=function fEc(a,b,c,d,e,f){};_._f=function dEc(a,b,c){return YDc(this,a,b,c)};_.Mf=function eEc(){this.g=KC(VD,Fqe,25,this.d,15,1);this.f=KC(VD,Fqe,25,this.d,15,1)};_.Of=function gEc(a,b){this.e[a]=KC(WD,oje,25,b[a].length,15,1)};_.Pf=function hEc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.Qf=function iEc(a,b,c,d){BD(Ikb(d[a][b].j,c),11).p=this.d++};_.b=0;_.c=0;_.d=0;var BX=mdb(Gqe,'AbstractBarycenterPortDistributor',402);bcb(1633,1,Dke,jEc);_.ue=function kEc(a,b){return _Dc(this.a,BD(a,11),BD(b,11))};_.Fb=function lEc(a){return this===a};_.ve=function mEc(){return new tpb(this)};var AX=mdb(Gqe,'AbstractBarycenterPortDistributor/lambda$0$Type',1633);bcb(817,1,Mne,uEc);_.Nf=function xEc(a,b,c,d,e,f){};_.Pf=function zEc(a,b,c){};_.Qf=function AEc(a,b,c,d){};_.Lf=function vEc(){return false};_.Mf=function wEc(){this.c=this.e.a;this.g=this.f.g};_.Of=function yEc(a,b){b[a][0].c.p=a};_.Rf=function BEc(){return false};_.ag=function CEc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),10);a[b][g++]=h}return false};_.Tf=function EEc(a,b){var c,d,e,f,g;g=sEc(b,a.length);f=Ou(a[g]);this.ag(f,false,true,b);c=0;for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),10);a[g][c++]=d}return false};var EX=mdb(Gqe,'BarycenterHeuristic',817);bcb(658,1,{658:1},FEc);_.Ib=function GEc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var CX=mdb(Gqe,'BarycenterHeuristic/BarycenterState',658);bcb(1802,1,Dke,HEc);_.ue=function IEc(a,b){return qEc(this.a,BD(a,10),BD(b,10))};_.Fb=function JEc(a){return this===a};_.ve=function KEc(){return new tpb(this)};var DX=mdb(Gqe,'BarycenterHeuristic/lambda$0$Type',1802);bcb(816,1,Mne,SEc);_.Mf=function TEc(){};_.Nf=function UEc(a,b,c,d,e,f){};_.Qf=function XEc(a,b,c,d){};_.Of=function VEc(a,b){this.a[a]=KC(CX,{3:1,4:1,5:1,2018:1},658,b[a].length,0,1);this.b[a]=KC(FX,{3:1,4:1,5:1,2019:1},233,b[a].length,0,1)};_.Pf=function WEc(a,b,c){OEc(this,c[a][b],true)};_.c=false;var HX=mdb(Gqe,'ForsterConstraintResolver',816);bcb(233,1,{233:1},$Ec,_Ec);_.Ib=function aFc(){var a,b;b=new Ufb;b.a+='[';for(a=0;a<this.d.length;a++){Qfb(b,a0b(this.d[a]));REc(this.g,this.d[0]).a!=null&&Qfb(Qfb((b.a+='<',b),Jdb(REc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=She,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var FX=mdb(Gqe,'ForsterConstraintResolver/ConstraintGroup',233);bcb(1797,1,qie,bFc);_.td=function cFc(a){OEc(this.a,BD(a,10),false)};var GX=mdb(Gqe,'ForsterConstraintResolver/lambda$0$Type',1797);bcb(214,1,{214:1,225:1},fFc);_.Nf=function hFc(a,b,c,d,e,f){};_.Of=function iFc(a,b){};_.Mf=function gFc(){this.r=KC(WD,oje,25,this.n,15,1)};_.Pf=function jFc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Ekb(this.b,d)};_.Qf=function kFc(a,b,c,d){++this.n};_.Ib=function lFc(){return wlb(this.e,new Tqb)};_.g=false;_.i=false;_.n=0;_.s=false;var IX=mdb(Gqe,'GraphInfoHolder',214);bcb(1832,1,Mne,pFc);_.Nf=function sFc(a,b,c,d,e,f){};_.Of=function tFc(a,b){};_.Qf=function vFc(a,b,c,d){};_._f=function qFc(a,b,c){c&&b>0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(RHc(this.a,a[b],a[b+1]),undefined):THc(this.a,a[b],c?(Ucd(),Tcd):(Ucd(),zcd));return mFc(this,a,b,c)};_.Mf=function rFc(){this.d=KC(WD,oje,25,this.c,15,1);this.a=new dIc(this.d)};_.Pf=function uFc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var JX=mdb(Gqe,'GreedyPortDistributor',1832);bcb(1401,1,Bqe,CFc);_.Yf=function DFc(a){return zFc(BD(a,37))};_.pf=function EFc(a,b){BFc(BD(a,37),b)};var xFc;var LX=mdb(Gqe,'InteractiveCrossingMinimizer',1401);bcb(1402,1,Dke,GFc);_.ue=function HFc(a,b){return FFc(this,BD(a,10),BD(b,10))};_.Fb=function IFc(a){return this===a};_.ve=function JFc(){return new tpb(this)};var KX=mdb(Gqe,'InteractiveCrossingMinimizer/1',1402);bcb(507,1,{507:1,123:1,51:1},fGc);_.Yf=function gGc(a){var b;return BD(a,37),b=k3c(KFc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hGc(a,b){YFc(this,BD(a,37),b)};_.e=0;var KFc;var RX=mdb(Gqe,'LayerSweepCrossingMinimizer',507);bcb(1398,1,qie,iGc);_.td=function jGc(a){MFc(this.a,BD(a,214))};var MX=mdb(Gqe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1398);bcb(1399,1,qie,kGc);_.td=function lGc(a){VFc(this.a,BD(a,214))};var NX=mdb(Gqe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1399);bcb(1400,1,qie,mGc);_.td=function nGc(a){XFc(this.a,BD(a,214))};var OX=mdb(Gqe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1400);bcb(454,22,{3:1,35:1,22:1,454:1},sGc);var oGc,pGc,qGc;var PX=ndb(Gqe,'LayerSweepCrossingMinimizer/CrossMinType',454,CI,uGc,tGc);var vGc;bcb(1397,1,Oie,xGc);_.Mb=function yGc(a){return LFc(),BD(a,29).a.c.length==0};var QX=mdb(Gqe,'LayerSweepCrossingMinimizer/lambda$0$Type',1397);bcb(1799,1,Mne,BGc);_.Mf=function CGc(){};_.Nf=function DGc(a,b,c,d,e,f){};_.Qf=function GGc(a,b,c,d){};_.Of=function EGc(a,b){b[a][0].c.p=a;this.b[a]=KC(SX,{3:1,4:1,5:1,1944:1},659,b[a].length,0,1)};_.Pf=function FGc(a,b,c){var d;d=c[a][b];d.p=b;NC(this.b[a],b,new HGc)};var VX=mdb(Gqe,'LayerSweepTypeDecider',1799);bcb(659,1,{659:1},HGc);_.Ib=function IGc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var SX=mdb(Gqe,'LayerSweepTypeDecider/NodeInfo',659);bcb(1800,1,Vke,JGc);_.Lb=function KGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function LGc(a){return this===a};_.Mb=function MGc(a){return a1b(new b1b(BD(a,11).b))};var TX=mdb(Gqe,'LayerSweepTypeDecider/lambda$0$Type',1800);bcb(1801,1,Vke,NGc);_.Lb=function OGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function PGc(a){return this===a};_.Mb=function QGc(a){return a1b(new b1b(BD(a,11).b))};var UX=mdb(Gqe,'LayerSweepTypeDecider/lambda$1$Type',1801);bcb(1833,402,Eqe,RGc);_.$f=function SGc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new olb(a.j);i.a<i.c.c.length;){g=BD(mlb(i),11);if(g.e.c.length!=0){++d;g.j==(Ucd(),Acd)&&++e}}f=b+e;l=b+d;for(h=W_b(a,(KAc(),HAc)).Kc();h.Ob();){g=BD(h.Pb(),11);if(g.j==(Ucd(),Acd)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=W_b(a,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);++k;j[g.p]=b+k}return k}default:throw vbb(new Vdb);}};var WX=mdb(Gqe,'LayerTotalPortDistributor',1833);bcb(660,817,{660:1,225:1},XGc);_.ag=function ZGc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);if(i.e.c.length!=0){++e;i.j==(Ucd(),Acd)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=W_b(a,(KAc(),HAc)).Kc();j.Ob();){i=BD(j.Pb(),11);if(i.j==(Ucd(),Acd)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=W_b(a,(KAc(),IAc)).Kc();j.Ob();){i=BD(j.Pb(),11);l[i.p]=m;m+=d}break}default:throw vbb(new Wdb('Port type is undefined'));}return 1};var $X=mdb(Gqe,'NodeRelativePortDistributor',796);bcb(807,1,{},nHc,oHc);var _X=mdb(Gqe,'SweepCopy',807);bcb(1798,1,Mne,rHc);_.Of=function uHc(a,b){};_.Mf=function sHc(){var a;a=KC(WD,oje,25,this.f,15,1);this.d=new LIc(a);this.a=new dIc(a)};_.Nf=function tHc(a,b,c,d,e,f){var g;g=BD(Ikb(f[a][b].j,c),11);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.Pf=function vHc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(j0b(),i0b)};_.Qf=function wHc(a,b,c,d){var e;e=BD(Ikb(d[a][b].j,c),11);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a<d.c.c.length){c=BD(mlb(d),11);b=P_b(c.i);b==null&&(b='n'+S_b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var NZ=mdb(Mqe,'HyperEdgeSegment',112);bcb(129,1,{129:1},DOc);_.Ib=function EOc(){return this.a+'->'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),135);rRc(this.b,d,Udd(b,1/f.c.length))}g=fRc(f);nRc(g)};var i$=mdb(Uqe,'TreeLayoutProvider',1130);bcb(1847,1,vie,KRc);_.Jc=function LRc(a){reb(this,a)};_.Kc=function MRc(){return mmb(),Emb(),Dmb};var j$=mdb(Uqe,'TreeUtil/1',1847);bcb(1848,1,vie,NRc);_.Jc=function ORc(a){reb(this,a)};_.Kc=function PRc(){return mmb(),Emb(),Dmb};var k$=mdb(Uqe,'TreeUtil/2',1848);bcb(502,134,{3:1,502:1,94:1,134:1});_.g=0;var m$=mdb(Vqe,'TGraphElement',502);bcb(188,502,{3:1,188:1,502:1,94:1,134:1},QRc);_.Ib=function RRc(){return !!this.b&&!!this.c?WRc(this.b)+'->'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(a,Udd(b,1))}Qdd(b)};var L$=mdb(cre,'RadialLayoutProvider',1131);bcb(549,1,Dke,jVc);_.ue=function kVc(a,b){return iVc(this.a,this.b,BD(a,33),BD(b,33))};_.Fb=function lVc(a){return this===a};_.ve=function mVc(){return new tpb(this)};_.a=0;_.b=0;var M$=mdb(cre,'RadialUtil/lambda$0$Type',549);bcb(1375,1,ene,oVc);_.pf=function pVc(a,b){nVc(BD(a,33),b)};var N$=mdb(fre,'CalculateGraphSize',1375);bcb(442,22,{3:1,35:1,22:1,442:1,234:1},uVc);_.Kf=function vVc(){switch(this.g){case 0:return new bWc;case 1:return new NVc;case 2:return new oVc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var qVc,rVc,sVc;var O$=ndb(fre,Ene,442,CI,xVc,wVc);var yVc;bcb(645,1,{});_.e=1;_.g=0;var P$=mdb(gre,'AbstractRadiusExtensionCompaction',645);bcb(1772,645,{},KVc);_.hg=function LVc(a){var b,c,d,e,f,g,h,i,j;this.c=BD(hkd(a,(MUc(),LUc)),33);EVc(this,this.c);this.d=tXc(BD(hkd(a,(ZWc(),WWc)),293));i=BD(hkd(a,KWc),19);!!i&&DVc(this,i.a);h=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(h),h));j=gVc(this.c);!!this.d&&this.d.lg(j);GVc(this,j);g=new amb(OC(GC(E2,1),hre,33,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new amb(OC(GC(E2,1),hre,33,0,[(tCb(b,j.c.length),BD(j.c[b],33))]));f=b<j.c.length-1?(tCb(b+1,j.c.length),BD(j.c[b+1],33)):(tCb(0,j.c.length),BD(j.c[0],33));d=b==0?BD(Ikb(j,j.c.length-1),33):(tCb(b-1,j.c.length),BD(j.c[b-1],33));IVc(this,(tCb(b,j.c.length),BD(j.c[b],33),g),d,f,e)}}};var Q$=mdb(gre,'AnnulusWedgeCompaction',1772);bcb(1374,1,ene,NVc);_.pf=function OVc(a,b){MVc(BD(a,33),b)};var R$=mdb(gre,'GeneralCompactor',1374);bcb(1771,645,{},SVc);_.hg=function TVc(a){var b,c,d,e;c=BD(hkd(a,(MUc(),LUc)),33);this.f=c;this.b=tXc(BD(hkd(a,(ZWc(),WWc)),293));e=BD(hkd(a,KWc),19);!!e&&DVc(this,e.a);d=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(d),d));b=gVc(c);!!this.b&&this.b.lg(b);QVc(this,b)};_.a=0;var S$=mdb(gre,'RadialCompaction',1771);bcb(1779,1,{},VVc);_.ig=function WVc(a){var b,c,d,e,f,g;this.a=a;b=0;g=gVc(a);d=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),33);++d;for(c=d;c<g.c.length;c++){UVc(this,e,(tCb(c,g.c.length),BD(g.c[c],33)))&&(b+=1)}}return b};var T$=mdb(ire,'CrossingMinimizationPosition',1779);bcb(1777,1,{},XVc);_.ig=function YVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new d7c;l.a=j-e;l.b=k-f;g=new f7c(l.a,l.b);l6c(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new f7c(l.a,l.b);l6c(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var U$=mdb(ire,'EdgeLengthOptimization',1777);bcb(1778,1,{},ZVc);_.ig=function $Vc(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));i=h.i+h.g/2;j=h.j+h.f/2;e=BD(hkd(h,(Y9c(),C9c)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var V$=mdb(ire,'EdgeLengthPositionOptimization',1778);bcb(1373,645,ene,bWc);_.pf=function cWc(a,b){aWc(this,BD(a,33),b)};var W$=mdb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1373);bcb(426,22,{3:1,35:1,22:1,426:1},hWc);var dWc,eWc;var X$=ndb(kre,'AnnulusWedgeCriteria',426,CI,jWc,iWc);var kWc;bcb(380,22,{3:1,35:1,22:1,380:1},rWc);var mWc,nWc,oWc;var Y$=ndb(kre,Sle,380,CI,tWc,sWc);var uWc;bcb(852,1,ale,IWc);_.Qe=function JWc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lre),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),meb(0)),(_5c(),X5c)),JI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mre),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nre),''),'Compaction'),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),yWc),V5c),Y$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ore),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),meb(1)),X5c),JI),pqb(L5c))));o4c(a,ore,nre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pre),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),EWc),V5c),b_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qre),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),GWc),V5c),X$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rre),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),AWc),V5c),a_),pqb(L5c))));$Wc((new _Wc,a))};var wWc,xWc,yWc,zWc,AWc,BWc,CWc,DWc,EWc,FWc,GWc;var Z$=mdb(kre,'RadialMetaDataProvider',852);bcb(996,1,ale,_Wc);_.Qe=function aXc(a){$Wc(a)};var KWc,LWc,MWc,NWc,OWc,PWc,QWc,RWc,SWc,TWc,UWc,VWc,WWc,XWc,YWc;var _$=mdb(kre,'RadialOptions',996);bcb(997,1,{},bXc);_.$e=function cXc(){var a;return a=new ZUc,a};_._e=function dXc(a){};var $$=mdb(kre,'RadialOptions/RadialFactory',997);bcb(340,22,{3:1,35:1,22:1,340:1},kXc);var eXc,fXc,gXc,hXc;var a_=ndb(kre,'RadialTranslationStrategy',340,CI,mXc,lXc);var nXc;bcb(293,22,{3:1,35:1,22:1,293:1},uXc);var pXc,qXc,rXc;var b_=ndb(kre,'SortingStrategy',293,CI,wXc,vXc);var xXc;bcb(1449,1,Bqe,CXc);_.Yf=function DXc(a){return BD(a,33),null};_.pf=function EXc(a,b){AXc(this,BD(a,33),b)};_.c=0;var c_=mdb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1449);bcb(1775,1,{},FXc);_.jg=function GXc(a){return eVc(a)};var d_=mdb(tre,'AnnulusWedgeByLeafs',1775);bcb(1776,1,{},IXc);_.jg=function JXc(a){return HXc(this,a)};var e_=mdb(tre,'AnnulusWedgeByNodeSpace',1776);bcb(1450,1,Bqe,MXc);_.Yf=function NXc(a){return BD(a,33),null};_.pf=function OXc(a,b){KXc(this,BD(a,33),b)};var f_=mdb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1450);bcb(811,1,{},QXc);_.kg=function RXc(a){};_.lg=function TXc(a){PXc(this,a)};var h_=mdb(ure,'IDSorter',811);bcb(1774,1,Dke,UXc);_.ue=function VXc(a,b){return SXc(BD(a,33),BD(b,33))};_.Fb=function WXc(a){return this===a};_.ve=function XXc(){return new tpb(this)};var g_=mdb(ure,'IDSorter/lambda$0$Type',1774);bcb(1773,1,{},$Xc);_.kg=function _Xc(a){YXc(this,a)};_.lg=function aYc(a){var b;if(!a.dc()){if(!this.e){b=bVc(BD(a.Xb(0),33));YXc(this,b)}PXc(this.e,a)}};var i_=mdb(ure,'PolarCoordinateSorter',1773);bcb(1136,209,Mle,bYc);_.Ze=function eYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;Odd(b,'Rectangle Packing',1);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=Edb(ED(hkd(a,(lZc(),RYc))));p=BD(hkd(a,eZc),381);s=Ccb(DD(hkd(a,ZYc)));w=Ccb(DD(hkd(a,dZc)));l=Ccb(DD(hkd(a,VYc)));A=BD(hkd(a,fZc),116);v=Edb(ED(hkd(a,jZc)));e=Ccb(DD(hkd(a,iZc)));m=Ccb(DD(hkd(a,WYc)));r=Ccb(DD(hkd(a,XYc)));F=Edb(ED(hkd(a,kZc)));C=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);r$c(C);if(r){o=new Rkb;for(i=new Fyd(C);i.e!=i.i.gc();){g=BD(Dyd(i),33);ikd(g,UYc)&&(o.c[o.c.length]=g,true)}for(j=new olb(o);j.a<j.c.c.length;){g=BD(mlb(j),33);Ftd(C,g)}mmb();Okb(o,new fYc);for(k=new olb(o);k.a<k.c.c.length;){g=BD(mlb(k),33);B=BD(hkd(g,UYc),19).a;B=$wnd.Math.min(B,C.i);vtd(C,B,g)}q=0;for(h=new Fyd(C);h.e!=h.i.gc();){g=BD(Dyd(h),33);jkd(g,TYc,meb(q));++q}}u=rfd(a);u.a-=A.b+A.c;u.b-=A.d+A.a;t=u.a;if(F<0||F<u.a){n=new nYc(c,p,s);f=jYc(n,C,v,A);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))}else{f=new d$c(c,F,0,(k$c(),j$c))}u.a+=A.b+A.c;u.b+=A.d+A.a;if(!w){r$c(C);D=new DZc(c,l,m,e,v);t=$wnd.Math.max(u.a,f.c);f=CZc(D,C,t,u,b,a,A)}cYc(C,A);Afd(a,f.c+(A.b+A.c),f.b+(A.d+A.a),false,true);Ccb(DD(hkd(a,cZc)))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));Qdd(b)};var k_=mdb(yre,'RectPackingLayoutProvider',1136);bcb(1137,1,Dke,fYc);_.ue=function gYc(a,b){return dYc(BD(a,33),BD(b,33))};_.Fb=function hYc(a){return this===a};_.ve=function iYc(){return new tpb(this)};var j_=mdb(yre,'RectPackingLayoutProvider/lambda$0$Type',1137);bcb(1256,1,{},nYc);_.a=0;_.c=false;var l_=mdb(zre,'AreaApproximation',1256);var o_=odb(zre,'BestCandidateFilter');bcb(638,1,{526:1},oYc);_.mg=function pYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Pje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(i.c[i.c.length]=d,true)}return i};var m_=mdb(zre,'AreaFilter',638);bcb(639,1,{526:1},qYc);_.mg=function rYc(a,b,c){var d,e,f,g,h,i;h=new Rkb;i=Pje;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),220);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(h.c[h.c.length]=d,true)}return h};var n_=mdb(zre,'AspectRatioFilter',639);bcb(637,1,{526:1},uYc);_.mg=function vYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Qje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.max(f,q$c(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);q$c(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(i.c[i.c.length]=d,true)}return i};var p_=mdb(zre,'ScaleMeasureFilter',637);bcb(381,22,{3:1,35:1,22:1,381:1},AYc);var wYc,xYc,yYc;var q_=ndb(Are,'OptimizationGoal',381,CI,CYc,BYc);var DYc;bcb(856,1,ale,PYc);_.Qe=function QYc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bre),''),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),LYc),(_5c(),V5c)),q_),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cre),''),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),(Bcb(),true)),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dre),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ere),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fre),''),'Only Area Approximation'),'If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gre),''),'Compact Rows'),'Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hre),''),'Fit Aspect Ratio'),'Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion.'),false),T5c),wI),pqb(K5c))));o4c(a,Hre,Jre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ire),''),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),U5c),BI),pqb(K5c))));mZc((new nZc,a))};var FYc,GYc,HYc,IYc,JYc,KYc,LYc,MYc,NYc;var r_=mdb(Are,'RectPackingMetaDataProvider',856);bcb(1004,1,ale,nZc);_.Qe=function oZc(a){mZc(a)};var RYc,SYc,TYc,UYc,VYc,WYc,XYc,YYc,ZYc,$Yc,_Yc,aZc,bZc,cZc,dZc,eZc,fZc,gZc,hZc,iZc,jZc,kZc;var t_=mdb(Are,'RectPackingOptions',1004);bcb(1005,1,{},pZc);_.$e=function qZc(){var a;return a=new bYc,a};_._e=function rZc(a){};var s_=mdb(Are,'RectPackingOptions/RectpackingFactory',1005);bcb(1257,1,{},DZc);_.a=0;_.b=false;_.c=0;_.d=0;_.e=false;_.f=false;_.g=0;var u_=mdb('org.eclipse.elk.alg.rectpacking.seconditeration','RowFillingAndCompaction',1257);bcb(187,1,{187:1},PZc);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=Pje;_.p=Pje;_.r=0;_.s=0;_.t=0;var x_=mdb(Lre,'Block',187);bcb(211,1,{211:1},VZc);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var v_=mdb(Lre,'BlockRow',211);bcb(443,1,{443:1},b$c);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var w_=mdb(Lre,'BlockStack',443);bcb(220,1,{220:1},d$c,e$c);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;var z_=mdb(Lre,'DrawingData',220);bcb(355,22,{3:1,35:1,22:1,355:1},l$c);var f$c,g$c,h$c,i$c,j$c;var y_=ndb(Lre,'DrawingDataDescriptor',355,CI,n$c,m$c);var o$c;bcb(200,1,{200:1},x$c);_.b=0;_.c=0;_.e=0;_.f=0;var A_=mdb(Lre,'RectRow',200);bcb(756,1,{},F$c);_.j=0;var G_=mdb(Nre,une,756);bcb(1245,1,{},G$c);_.Je=function H$c(a){return S6c(a.a,a.b)};var B_=mdb(Nre,vne,1245);bcb(1246,1,{},I$c);_.Je=function J$c(a){return A$c(this.a,a)};var C_=mdb(Nre,wne,1246);bcb(1247,1,{},K$c);_.Je=function L$c(a){return B$c(this.a,a)};var D_=mdb(Nre,xne,1247);bcb(1248,1,{},M$c);_.Je=function N$c(a){return C$c(this.a,a)};var E_=mdb(Nre,'ElkGraphImporter/lambda$3$Type',1248);bcb(1249,1,{},O$c);_.Je=function P$c(a){return D$c(this.a,a)};var F_=mdb(Nre,yne,1249);bcb(1133,209,Mle,Q$c);_.Ze=function S$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(ikd(a,(d0c(),c0c))){n=GD(hkd(a,(J0c(),I0c)));f=h4c(n4c(),n);if(f){g=BD(hgd(f.f),209);g.Ze(a,Udd(b,1))}}jkd(a,Z_c,(C_c(),A_c));jkd(a,$_c,(N_c(),K_c));jkd(a,__c,(a1c(),_0c));h=BD(hkd(a,(J0c(),E0c)),19).a;Odd(b,'Overlap removal',1);Ccb(DD(hkd(a,D0c)))&&'null45scanlineOverlaps';i=new Tqb;j=new U$c(i);d=new F$c;c=z$c(d,a);k=true;e=0;while(e<h&&k){if(Ccb(DD(hkd(a,F0c)))){i.a.$b();cOb(new dOb(j),c.i);if(i.a.gc()==0){break}c.e=i}H2c(this.b);K2c(this.b,(Y$c(),V$c),(R0c(),Q0c));K2c(this.b,W$c,c.g);K2c(this.b,X$c,(s_c(),r_c));this.a=F2c(this.b,c);for(m=new olb(this.a);m.a<m.c.c.length;){l=BD(mlb(m),51);l.pf(c,Udd(b,1))}E$c(d,c);k=Ccb(DD(vNb(c,(XNb(),WNb))));++e}y$c(d,c);Qdd(b)};var I_=mdb(Nre,'OverlapRemovalLayoutProvider',1133);bcb(1134,1,{},U$c);var H_=mdb(Nre,'OverlapRemovalLayoutProvider/lambda$0$Type',1134);bcb(437,22,{3:1,35:1,22:1,437:1},Z$c);var V$c,W$c,X$c;var J_=ndb(Nre,'SPOrEPhases',437,CI,_$c,$$c);var a_c;bcb(1255,1,{},d_c);var L_=mdb(Nre,'ShrinkTree',1255);bcb(1135,209,Mle,e_c);_.Ze=function f_c(a,b){var c,d,e,f,g;if(ikd(a,(d0c(),c0c))){g=GD(hkd(a,c0c));e=h4c(n4c(),g);if(e){f=BD(hgd(e.f),209);f.Ze(a,Udd(b,1))}}d=new F$c;c=z$c(d,a);c_c(this.a,c,Udd(b,1));y$c(d,c)};var K_=mdb(Nre,'ShrinkTreeLayoutProvider',1135);bcb(300,134,{3:1,300:1,94:1,134:1},g_c);_.c=false;var M_=mdb('org.eclipse.elk.alg.spore.graph','Graph',300);bcb(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},k_c);_.Kf=function m_c(){return j_c(this)};_.Xf=function l_c(){return j_c(this)};var h_c;var N_=ndb(Ore,Sle,482,CI,o_c,n_c);var p_c;bcb(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},t_c);_.Kf=function v_c(){return new I1c};_.Xf=function u_c(){return new I1c};var r_c;var O_=ndb(Ore,'OverlapRemovalStrategy',551,CI,x_c,w_c);var y_c;bcb(430,22,{3:1,35:1,22:1,430:1},D_c);var A_c,B_c;var P_=ndb(Ore,'RootSelection',430,CI,F_c,E_c);var G_c;bcb(316,22,{3:1,35:1,22:1,316:1},O_c);var I_c,J_c,K_c,L_c,M_c;var Q_=ndb(Ore,'SpanningTreeCostFunction',316,CI,Q_c,P_c);var R_c;bcb(1002,1,ale,f0c);_.Qe=function g0c(a){e0c(a)};var T_c,U_c,V_c,W_c,X_c,Y_c,Z_c,$_c,__c,a0c,b0c,c0c;var S_=mdb(Ore,'SporeCompactionOptions',1002);bcb(1003,1,{},h0c);_.$e=function i0c(){var a;return a=new e_c,a};_._e=function j0c(a){};var R_=mdb(Ore,'SporeCompactionOptions/SporeCompactionFactory',1003);bcb(855,1,ale,B0c);_.Qe=function C0c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Qre),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Vre),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),y0c),V5c),W_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rre),$re),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),w0c),V5c),X_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Sre),$re),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),u0c),V5c),Q_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tre),$re),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),Z5c),ZI),pqb(L5c))));o4c(a,Tre,Ure,q0c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ure),$re),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),s0c),V5c),P_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Wre),Bpe),'Compaction Strategy'),'This option defines how the compaction is applied.'),l0c),V5c),N_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xre),Bpe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yre),_re),'Upper limit for iterations of overlap removal'),null),meb(64)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zre),_re),'Whether to run a supplementary scanline overlap check.'),null),true),T5c),wI),pqb(L5c))));K0c((new L0c,a));e0c((new f0c,a))};var k0c,l0c,m0c,n0c,o0c,p0c,q0c,r0c,s0c,t0c,u0c,v0c,w0c,x0c,y0c,z0c;var T_=mdb(Ore,'SporeMetaDataProvider',855);bcb(_ie,1,ale,L0c);_.Qe=function M0c(a){K0c(a)};var D0c,E0c,F0c,G0c,H0c,I0c;var V_=mdb(Ore,'SporeOverlapRemovalOptions',_ie);bcb(1001,1,{},N0c);_.$e=function O0c(){var a;return a=new Q$c,a};_._e=function P0c(a){};var U_=mdb(Ore,'SporeOverlapRemovalOptions/SporeOverlapFactory',1001);bcb(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},T0c);_.Kf=function V0c(){return S0c(this)};_.Xf=function U0c(){return S0c(this)};var Q0c;var W_=ndb(Ore,'StructureExtractionStrategy',530,CI,X0c,W0c);var Y0c;bcb(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},c1c);_.Kf=function e1c(){return b1c(this)};_.Xf=function d1c(){return b1c(this)};var $0c,_0c;var X_=ndb(Ore,'TreeConstructionStrategy',429,CI,g1c,f1c);var h1c;bcb(1443,1,Bqe,k1c);_.Yf=function l1c(a){return BD(a,300),new j3c};_.pf=function m1c(a,b){j1c(BD(a,300),b)};var Z_=mdb(bse,'DelaunayTriangulationPhase',1443);bcb(1444,1,qie,n1c);_.td=function o1c(a){Ekb(this.a,BD(a,65).a)};var Y_=mdb(bse,'DelaunayTriangulationPhase/lambda$0$Type',1444);bcb(783,1,Bqe,s1c);_.Yf=function t1c(a){return BD(a,300),new j3c};_.pf=function u1c(a,b){this.ng(BD(a,300),b)};_.ng=function v1c(a,b){var c,d,e;Odd(b,'Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=BD(Ikb(a.i,0),65).a);Ccb(DD(vNb(a,(XNb(),VNb))))?(e=UCb(a.e,d,(c=a.b,c))):(e=UCb(a.e,d,a.b));q1c(this,e,a);Qdd(b)};var b0=mdb(cse,'MinSTPhase',783);bcb(1446,783,Bqe,w1c);_.ng=function y1c(a,b){var c,d,e,f;Odd(b,'Maximum spanning tree construction',1);c=new z1c(a);a.d?(e=a.d.c):(e=BD(Ikb(a.i,0),65).c);Ccb(DD(vNb(a,(XNb(),VNb))))?(f=UCb(a.e,e,(d=c,d))):(f=UCb(a.e,e,c));q1c(this,f,a);Qdd(b)};var __=mdb(cse,'MaxSTPhase',1446);bcb(1447,1,{},z1c);_.Je=function A1c(a){return x1c(this.a,a)};var $_=mdb(cse,'MaxSTPhase/lambda$0$Type',1447);bcb(1445,1,qie,B1c);_.td=function C1c(a){r1c(this.a,BD(a,65))};var a0=mdb(cse,'MinSTPhase/lambda$0$Type',1445);bcb(785,1,Bqe,I1c);_.Yf=function J1c(a){return BD(a,300),new j3c};_.pf=function K1c(a,b){H1c(this,BD(a,300),b)};_.a=false;var d0=mdb(dse,'GrowTreePhase',785);bcb(786,1,qie,L1c);_.td=function M1c(a){G1c(this.a,this.b,this.c,BD(a,221))};var c0=mdb(dse,'GrowTreePhase/lambda$0$Type',786);bcb(1448,1,Bqe,Q1c);_.Yf=function R1c(a){return BD(a,300),new j3c};_.pf=function S1c(a,b){P1c(this,BD(a,300),b)};var f0=mdb(dse,'ShrinkTreeCompactionPhase',1448);bcb(784,1,qie,T1c);_.td=function U1c(a){O1c(this.a,this.b,this.c,BD(a,221))};var e0=mdb(dse,'ShrinkTreeCompactionPhase/lambda$0$Type',784);var g2=odb(yqe,'IGraphElementVisitor');bcb(860,1,{527:1},b2c);_.og=function e2c(a){var b;b=a2c(this,a);tNb(b,BD(Ohb(this.b,a),94));$1c(this,a,b)};var V1c,W1c,X1c;var m0=mdb(Nle,'LayoutConfigurator',860);var h0=odb(Nle,'LayoutConfigurator/IPropertyHolderOptionFilter');bcb(932,1,{1933:1},f2c);_.pg=function g2c(a,b){return Y1c(),!a.Xe(b)};var i0=mdb(Nle,'LayoutConfigurator/lambda$0$Type',932);bcb(933,1,{1933:1},i2c);_.pg=function j2c(a,b){return h2c(a,b)};var j0=mdb(Nle,'LayoutConfigurator/lambda$1$Type',933);bcb(931,1,{831:1},k2c);_.qg=function l2c(a,b){return Y1c(),!a.Xe(b)};var k0=mdb(Nle,'LayoutConfigurator/lambda$2$Type',931);bcb(934,1,Oie,m2c);_.Mb=function n2c(a){return d2c(this.a,this.b,BD(a,1933))};var l0=mdb(Nle,'LayoutConfigurator/lambda$3$Type',934);bcb(858,1,{},w2c);var n0=mdb(Nle,'RecursiveGraphLayoutEngine',858);bcb(296,60,Tie,x2c,y2c);var o0=mdb(Nle,'UnsupportedConfigurationException',296);bcb(453,60,Tie,z2c);var p0=mdb(Nle,'UnsupportedGraphException',453);bcb(754,1,{});var K1=mdb(yqe,'AbstractRandomListAccessor',754);bcb(500,754,{},L2c);_.rg=function N2c(){return null};_.d=true;_.e=true;_.f=0;var v0=mdb(fse,'AlgorithmAssembler',500);bcb(1236,1,Oie,O2c);_.Mb=function P2c(a){return !!BD(a,123)};var q0=mdb(fse,'AlgorithmAssembler/lambda$0$Type',1236);bcb(1237,1,{},Q2c);_.Kb=function R2c(a){return M2c(this.a,BD(a,123))};var r0=mdb(fse,'AlgorithmAssembler/lambda$1$Type',1237);bcb(1238,1,Oie,S2c);_.Mb=function T2c(a){return !!BD(a,80)};var s0=mdb(fse,'AlgorithmAssembler/lambda$2$Type',1238);bcb(1239,1,qie,U2c);_.td=function V2c(a){d3c(this.a,BD(a,80))};var t0=mdb(fse,'AlgorithmAssembler/lambda$3$Type',1239);bcb(1240,1,qie,W2c);_.td=function X2c(a){G2c(this.a,this.b,BD(a,234))};var u0=mdb(fse,'AlgorithmAssembler/lambda$4$Type',1240);bcb(1355,1,Dke,Z2c);_.ue=function $2c(a,b){return Y2c(BD(a,234),BD(b,234))};_.Fb=function _2c(a){return this===a};_.ve=function a3c(){return new tpb(this)};var w0=mdb(fse,'EnumBasedFactoryComparator',1355);bcb(80,754,{80:1},j3c);_.rg=function l3c(){return new Tqb};_.a=0;var x0=mdb(fse,'LayoutProcessorConfiguration',80);bcb(1013,1,{527:1},q3c);_.og=function u3c(a){stb(n3c,new z3c(a))};var m3c,n3c,o3c;var B0=mdb(Xke,'DeprecatedLayoutOptionReplacer',1013);bcb(1014,1,qie,v3c);_.td=function w3c(a){r3c(BD(a,160))};var y0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1014);bcb(1015,1,qie,x3c);_.td=function y3c(a){s3c(BD(a,160))};var z0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1015);bcb(1016,1,{},z3c);_.Od=function A3c(a,b){t3c(this.a,BD(a,146),BD(b,38))};var A0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1016);bcb(149,1,{686:1,149:1},E3c);_.Fb=function F3c(a){return C3c(this,a)};_.sg=function G3c(){return this.b};_.tg=function H3c(){return this.c};_.ne=function I3c(){return this.e};_.Hb=function J3c(){return LCb(this.c)};_.Ib=function K3c(){return 'Layout Algorithm: '+this.c};var E0=mdb(Xke,'LayoutAlgorithmData',149);bcb(263,1,{},R3c);var D0=mdb(Xke,'LayoutAlgorithmData/Builder',263);bcb(1017,1,{527:1},U3c);_.og=function V3c(a){JD(a,239)&&!Ccb(DD(a.We((Y9c(),d9c))))&&S3c(BD(a,33))};var F0=mdb(Xke,'LayoutAlgorithmResolver',1017);bcb(229,1,{686:1,229:1},W3c);_.Fb=function X3c(a){if(JD(a,229)){return dfb(this.b,BD(a,229).b)}return false};_.sg=function Y3c(){return this.a};_.tg=function Z3c(){return this.b};_.ne=function $3c(){return this.d};_.Hb=function _3c(){return LCb(this.b)};_.Ib=function a4c(){return 'Layout Type: '+this.b};var H0=mdb(Xke,'LayoutCategoryData',229);bcb(344,1,{},e4c);var G0=mdb(Xke,'LayoutCategoryData/Builder',344);bcb(867,1,{},m4c);var f4c;var c1=mdb(Xke,'LayoutMetaDataService',867);bcb(868,1,{},v4c);var J0=mdb(Xke,'LayoutMetaDataService/Registry',868);bcb(478,1,{478:1},w4c);var I0=mdb(Xke,'LayoutMetaDataService/Registry/Triple',478);bcb(869,1,gse,x4c);_.ug=function y4c(){return new d7c};var K0=mdb(Xke,'LayoutMetaDataService/lambda$0$Type',869);bcb(870,1,hse,z4c);_.vg=function A4c(a){return R6c(BD(a,8))};var L0=mdb(Xke,'LayoutMetaDataService/lambda$1$Type',870);bcb(879,1,gse,B4c);_.ug=function C4c(){return new Rkb};var M0=mdb(Xke,'LayoutMetaDataService/lambda$10$Type',879);bcb(880,1,hse,D4c);_.vg=function E4c(a){return new Tkb(BD(a,12))};var N0=mdb(Xke,'LayoutMetaDataService/lambda$11$Type',880);bcb(881,1,gse,F4c);_.ug=function G4c(){return new Psb};var O0=mdb(Xke,'LayoutMetaDataService/lambda$12$Type',881);bcb(882,1,hse,H4c);_.vg=function I4c(a){return Ru(BD(a,68))};var P0=mdb(Xke,'LayoutMetaDataService/lambda$13$Type',882);bcb(883,1,gse,J4c);_.ug=function K4c(){return new Tqb};var Q0=mdb(Xke,'LayoutMetaDataService/lambda$14$Type',883);bcb(884,1,hse,L4c);_.vg=function M4c(a){return Dx(BD(a,53))};var R0=mdb(Xke,'LayoutMetaDataService/lambda$15$Type',884);bcb(885,1,gse,N4c);_.ug=function O4c(){return new zsb};var S0=mdb(Xke,'LayoutMetaDataService/lambda$16$Type',885);bcb(886,1,hse,P4c);_.vg=function Q4c(a){return Gx(BD(a,53))};var T0=mdb(Xke,'LayoutMetaDataService/lambda$17$Type',886);bcb(887,1,gse,R4c);_.ug=function S4c(){return new Gxb};var U0=mdb(Xke,'LayoutMetaDataService/lambda$18$Type',887);bcb(888,1,hse,T4c);_.vg=function U4c(a){return Hx(BD(a,208))};var V0=mdb(Xke,'LayoutMetaDataService/lambda$19$Type',888);bcb(871,1,gse,V4c);_.ug=function W4c(){return new s7c};var W0=mdb(Xke,'LayoutMetaDataService/lambda$2$Type',871);bcb(872,1,hse,X4c);_.vg=function Y4c(a){return new t7c(BD(a,74))};var X0=mdb(Xke,'LayoutMetaDataService/lambda$3$Type',872);bcb(873,1,gse,Z4c);_.ug=function $4c(){return new H_b};var Y0=mdb(Xke,'LayoutMetaDataService/lambda$4$Type',873);bcb(874,1,hse,_4c);_.vg=function a5c(a){return new K_b(BD(a,142))};var Z0=mdb(Xke,'LayoutMetaDataService/lambda$5$Type',874);bcb(875,1,gse,b5c);_.ug=function c5c(){return new p0b};var $0=mdb(Xke,'LayoutMetaDataService/lambda$6$Type',875);bcb(876,1,hse,d5c);_.vg=function e5c(a){return new r0b(BD(a,116))};var _0=mdb(Xke,'LayoutMetaDataService/lambda$7$Type',876);bcb(877,1,gse,f5c);_.ug=function g5c(){return new _fd};var a1=mdb(Xke,'LayoutMetaDataService/lambda$8$Type',877);bcb(878,1,hse,h5c);_.vg=function i5c(a){return new agd(BD(a,373))};var b1=mdb(Xke,'LayoutMetaDataService/lambda$9$Type',878);var Q3=odb(Hle,'IProperty');bcb(23,1,{35:1,686:1,23:1,146:1},p5c);_.wd=function q5c(a){return k5c(this,BD(a,146))};_.Fb=function r5c(a){return JD(a,23)?dfb(this.f,BD(a,23).f):JD(a,146)&&dfb(this.f,BD(a,146).tg())};_.wg=function s5c(){var a;if(JD(this.b,4)){a=fvd(this.b);if(a==null){throw vbb(new Zdb(mse+this.f+"'. "+"Make sure it's type is registered with the "+(fdb(Y3),Y3.k)+jse))}return a}else{return this.b}};_.sg=function t5c(){return this.d};_.tg=function u5c(){return this.f};_.ne=function v5c(){return this.i};_.Hb=function w5c(){return LCb(this.f)};_.Ib=function x5c(){return 'Layout Option: '+this.f};var g1=mdb(Xke,'LayoutOptionData',23);bcb(24,1,{},H5c);var d1=mdb(Xke,'LayoutOptionData/Builder',24);bcb(175,22,{3:1,35:1,22:1,175:1},O5c);var I5c,J5c,K5c,L5c,M5c;var e1=ndb(Xke,'LayoutOptionData/Target',175,CI,Q5c,P5c);var R5c;bcb(277,22,{3:1,35:1,22:1,277:1},a6c);var T5c,U5c,V5c,W5c,X5c,Y5c,Z5c,$5c;var f1=ndb(Xke,'LayoutOptionData/Type',277,CI,c6c,b6c);var d6c;var f6c;var h6c;bcb(110,1,{110:1},I6c,J6c,K6c);_.Fb=function L6c(a){var b;if(a==null||!JD(a,110)){return false}b=BD(a,110);return wtb(this.c,b.c)&&wtb(this.d,b.d)&&wtb(this.b,b.b)&&wtb(this.a,b.a)};_.Hb=function M6c(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function N6c(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var k1=mdb(pne,'ElkRectangle',110);bcb(8,1,{3:1,4:1,8:1,414:1},d7c,e7c,f7c,g7c);_.Fb=function h7c(a){return T6c(this,a)};_.Hb=function i7c(){return Hdb(this.a)+jeb(Hdb(this.b))};_.Jf=function k7c(b){var c,d,e,f;e=0;while(e<b.length&&j7c((BCb(e,b.length),b.charCodeAt(e)),mne)){++e}c=b.length;while(c>0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&ufb(e[d]).length>0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=mfb(f,'\\:');e=k4c(n4c(),d[0]);if(!e){throw vbb(new Wdb('Invalid option id: '+d[0]))}k=o5c(e,d[1]);if(k==null){throw vbb(new Wdb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Lqb),Thb(this.q,e)):(!this.q&&(this.q=new Lqb),Rhb(this.q,e,k))}}catch(a){a=ubb(a);if(JD(a,102)){c=a;throw vbb(new Xdb(c))}else throw vbb(a)}};_.Ib=function egd(){var a;a=GD(GAb(NAb((!this.q?(mmb(),mmb(),kmb):this.q).vc().Oc(),new fgd),Ayb(new pzb,new nzb,new Zyb,new _yb,OC(GC(xL,1),Kie,132,0,[]))));return a};var i2=mdb(yqe,'IndividualSpacings',373);bcb(971,1,{},fgd);_.Kb=function ggd(a){return cgd(BD(a,42))};var h2=mdb(yqe,'IndividualSpacings/lambda$0$Type',971);bcb(709,1,{},jgd);_.c=0;var j2=mdb(yqe,'InstancePool',709);bcb(1275,1,{},kgd);var l2=mdb(yqe,'LoggedGraph',1275);bcb(396,22,{3:1,35:1,22:1,396:1},qgd);var lgd,mgd,ngd,ogd;var k2=ndb(yqe,'LoggedGraph/Type',396,CI,sgd,rgd);var tgd;bcb(46,1,{20:1,46:1},vgd);_.Jc=function xgd(a){reb(this,a)};_.Fb=function wgd(a){var b,c,d;if(JD(a,46)){c=BD(a,46);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function ygd(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&aje;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&aje;e=f&-65536;return a^e>>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.ri(b);d!=null&&$fb(d,0,this.g,0,this.i)}};_.Xc=function Kud(a){return rud(this,a)};_.dc=function Lud(){return this.i==0};_.ii=function Mud(a,b){return sud(this,a,b)};_.ri=function Nud(a){return KC(SI,Uhe,1,a,5,1)};_.ki=function Oud(a){return this.g[a]};_.$c=function Pud(a){return tud(this,a)};_.mi=function Qud(a,b){return uud(this,a,b)};_.gc=function Rud(){return this.i};_.Pc=function Sud(){return wud(this)};_.Qc=function Tud(a){return xud(this,a)};_.i=0;var y4=mdb(Tte,'BasicEList',63);var X4=odb(Tte,'TreeIterator');bcb(694,63,pue);_.Nb=function Xud(a){Rrb(this,a)};_.Ob=function Yud(){return this.g==null&&!this.c?Uud(this):this.g==null||this.i!=0&&BD(this.g[this.i-1],47).Ob()};_.Pb=function Zud(){return Vud(this)};_.Qb=function $ud(){if(!this.e){throw vbb(new Zdb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var q4=mdb(Tte,'AbstractTreeIterator',694);bcb(685,694,pue,_ud);_.si=function avd(a){var b;b=BD(a,56).Wg().Kc();JD(b,279)&&BD(b,279).Nk(new bvd);return b};var W3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator',685);bcb(952,1,{},bvd);var V3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',952);var cvd,dvd;var Y3=mdb(jue,'ElkReflect',null);bcb(889,1,hse,jvd);_.vg=function kvd(a){return evd(),sqb(BD(a,174))};var X3=mdb(jue,'ElkReflect/lambda$0$Type',889);var lvd;var W4=odb(Tte,'ResourceLocator');bcb(1051,1,{});var N4=mdb(Tte,'DelegatingResourceLocator',1051);bcb(1052,1051,{});var Z3=mdb('org.eclipse.emf.common','EMFPlugin',1052);var $3=odb(cve,'Adapter');var _3=odb(cve,'Notification');bcb(1153,1,dve);_.ti=function vvd(){return this.d};_.ui=function wvd(a){};_.vi=function xvd(a){this.d=a};_.wi=function yvd(a){this.d==a&&(this.d=null)};_.d=null;var a4=mdb(hte,'AdapterImpl',1153);bcb(1995,67,eve);_.Vh=function Fvd(a,b){return zvd(this,a,b)};_.Wh=function Gvd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Vi();for(d=a.Kc();d.Ob();){c=d.Pb();this.Ii(this.oi(b,c));++b}return true}};_.Xh=function Hvd(a,b){Avd(this,a,b)};_.Yh=function Ivd(a){Bvd(this,a)};_.Gi=function Jvd(){return this.Ji()};_.$b=function Kvd(){Cvd(this,this.Vi(),this.Wi())};_.Hc=function Lvd(a){return this.Li(a)};_.Ic=function Mvd(a){return this.Mi(a)};_.Hi=function Nvd(a,b){this.Si().jm()};_.Ii=function Ovd(a){this.Si().jm()};_.Ji=function Pvd(){return this.Si()};_.Ki=function Qvd(){this.Si().jm()};_.Li=function Rvd(a){return this.Si().jm()};_.Mi=function Svd(a){return this.Si().jm()};_.Ni=function Tvd(a){return this.Si().jm()};_.Oi=function Uvd(a){return this.Si().jm()};_.Pi=function Vvd(){return this.Si().jm()};_.Qi=function Wvd(a){return this.Si().jm()};_.Ri=function Xvd(){return this.Si().jm()};_.Ti=function Yvd(a){return this.Si().jm()};_.Ui=function Zvd(a,b){return this.Si().jm()};_.Vi=function $vd(){return this.Si().jm()};_.Wi=function _vd(){return this.Si().jm()};_.Xi=function awd(a){return this.Si().jm()};_.Yi=function bwd(){return this.Si().jm()};_.Fb=function cwd(a){return this.Ni(a)};_.Xb=function dwd(a){return this.li(a,this.Oi(a))};_.Hb=function ewd(){return this.Pi()};_.Xc=function fwd(a){return this.Qi(a)};_.dc=function gwd(){return this.Ri()};_.ii=function hwd(a,b){return Dvd(this,a,b)};_.ki=function iwd(a){return this.Oi(a)};_.$c=function jwd(a){return Evd(this,a)};_.Mc=function kwd(a){var b;b=this.Xc(a);if(b>=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=BD(this.n,15);c.Vc(b,a.Bi());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function Bxd(){var a,b,c,d;d=new Jfb(hdb(this.gm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=She,d)}d.a+=']'}else{Dfb(d,$wd(this))}d.a+=', isTouch: ';Ffb(d,ixd(this));d.a+=', wasSet: ';Ffb(d,jxd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var f4=mdb(hte,'NotificationImpl',143);bcb(1167,143,fve,Cxd);_._i=function Dxd(){return this.a._i()};_.yi=function Exd(a){return this.a.aj()};_.Ai=function Fxd(){return this.a.Ai()};var c4=mdb(hte,'DelegatingNotifyingListImpl/1',1167);bcb(242,63,oue,Hxd,Ixd);_.Fc=function Jxd(a){return Gxd(this,BD(a,366))};_.Ei=function Kxd(a){return Gxd(this,a)};_.Fi=function Lxd(){var a,b,c;for(a=0;a<this.i;++a){b=BD(this.g[a],366);c=b.Ai();c!=null&&b.xi()!=-1&&BD(c,92).Ng(b)}};_.ri=function Mxd(a){return KC(_3,Uhe,366,a,0,1)};var e4=mdb(hte,'NotificationChainImpl',242);bcb(1378,90,gte);_.Kg=function Nxd(){return this.e};_.Mg=function Oxd(){return (this.f&1)!=0};_.f=1;var g4=mdb(hte,'NotifierImpl',1378);bcb(1993,63,oue);_.Vh=function $xd(a,b){return Pxd(this,a,b)};_.Wh=function _xd(a){return this.Vh(this.i,a)};_.Xh=function ayd(a,b){Qxd(this,a,b)};_.Yh=function byd(a){Rxd(this,a)};_.ai=function cyd(){return !this.bj()};_.$b=function dyd(){Uxd(this)};_.Zi=function eyd(a,b,c,d,e){return new vyd(this,a,b,c,d,e)};_.$i=function fyd(a){Uhd(this.Ai(),a)};_._i=function gyd(){return null};_.aj=function hyd(){return -1};_.Ai=function iyd(){return null};_.bj=function jyd(){return false};_.ij=function kyd(){return false};_.cj=function lyd(a,b){return b};_.dj=function myd(a,b){return b};_.ej=function nyd(){return false};_.fj=function oyd(){return this.i!=0};_.ii=function pyd(a,b){return Wxd(this,a,b)};_.$c=function qyd(a){return Xxd(this,a)};_.mi=function ryd(a,b){return Zxd(this,a,b)};_.jj=function syd(a,b){return b};_.kj=function tyd(a,b){return b};_.lj=function uyd(a,b,c){return c};var i4=mdb(hte,'NotifyingListImpl',1993);bcb(1166,143,fve,vyd);_._i=function wyd(){return this.a._i()};_.yi=function xyd(a){return this.a.aj()};_.Ai=function yyd(){return this.a.Ai()};var h4=mdb(hte,'NotifyingListImpl/1',1166);bcb(953,63,oue,zyd);_.Hc=function Ayd(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;lzd(d,c,Itd(this,h))}b0d(this,d);for(f=0;f<e;++f){h=d[a];this.bi(a,h);++a}return true}else{++this.j;return false}};_.Wh=function qzd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);j=i+d;b=nzd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();lzd(b,f,Itd(this,g))}b0d(this,b);for(e=i;e<j;++e){g=b[e];this.bi(e,g)}return true}else{++this.j;return false}};_.Xh=function rzd(a,b){var c,d,e,f;d=BD(Ajd(this.a,4),126);e=d==null?0:d.length;c=nzd(this,e+1);f=Itd(this,b);a!=e&&$fb(d,a,c,a+1,e-a);NC(c,a,f);b0d(this,c);this.bi(a,b)};_.Yh=function szd(a){var b,c,d;d=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);b=nzd(this,d+1);lzd(b,d,Itd(this,a));b0d(this,b);this.bi(d,a)};_.Zh=function tzd(){return new Uzd(this)};_.$h=function uzd(){return new Xzd(this)};_._h=function vzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(PD(c)===PD(a)){return true}}}}return false};_.Xb=function yzd(a){var b,c;b=BD(Ajd(this.a,4),126);c=b==null?0:b.length;if(a>=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(PD(b[c])===PD(a)){return c}}}}return -1};_.dc=function Azd(){return BD(Ajd(this.a,4),126)==null};_.Kc=function Bzd(){return new Lzd(this)};_.Yc=function Czd(){return new Pzd(this)};_.Zc=function Dzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a<b?$fb(c,a,c,a+1,b-a):$fb(c,b+1,c,b,a-b);NC(c,a,d);b0d(this,c)}return d};_.ki=function Fzd(a){return BD(Ajd(this.a,4),126)[a]};_.$c=function Gzd(a){return ozd(this,a)};_.mi=function Hzd(a,b){var c,d;c=mzd(this);d=c[a];lzd(c,a,Itd(this,b));b0d(this,c);return d};_.gc=function Izd(){var a;return a=BD(Ajd(this.a,4),126),a==null?0:a.length};_.Pc=function Jzd(){var a,b,c;a=BD(Ajd(this.a,4),126);c=a==null?0:a.length;b=KC($3,hve,415,c,0,1);c>0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.length<d){c=izd(rb(a).c,d);a=c}$fb(b,0,a,0,d)}a.length>d&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Sh()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function VBd(){return this.a.f==0?(LCd(),KCd.a):new ZBd(this.a)};_.Mc=function WBd(a){return RBd(this,a)};_.gc=function XBd(){return this.a.f};var D4=mdb(Tte,'BasicEMap/5',1037);bcb(613,1,aie,ZBd);_.Nb=function $Bd(a){Rrb(this,a)};_.Ob=function _Bd(){return this.b!=-1};_.Pb=function aCd(){var a;if(this.f.e!=this.c){throw vbb(new Apb)}if(this.b==-1){throw vbb(new utb)}this.d=this.a;this.e=this.b;YBd(this);a=BD(this.f.d[this.d].g[this.e],133);return this.vj(a)};_.Qb=function bCd(){if(this.f.e!=this.c){throw vbb(new Apb)}if(this.e==-1){throw vbb(new Ydb)}this.f.c.Mc(qud(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.vj=function cCd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var E4=mdb(Tte,'BasicEMap/BasicEMapIterator',613);bcb(1031,613,aie,dCd);_.vj=function eCd(a){return a.cd()};var F4=mdb(Tte,'BasicEMap/BasicEMapKeyIterator',1031);bcb(1032,613,aie,fCd);_.vj=function gCd(a){return a.dd()};var G4=mdb(Tte,'BasicEMap/BasicEMapValueIterator',1032);bcb(1030,1,cie,iCd);_.wc=function oCd(a){stb(this,a)};_.yc=function tCd(a,b,c){return ttb(this,a,b,c)};_.$b=function jCd(){this.a.c.$b()};_._b=function kCd(a){return hCd(this,a)};_.uc=function lCd(a){return rAd(this.a,a)};_.vc=function mCd(){return yAd(this.a)};_.Fb=function nCd(a){return zAd(this.a,a)};_.xc=function pCd(a){return AAd(this.a,a)};_.Hb=function qCd(){return Etd(this.a.c)};_.dc=function rCd(){return this.a.f==0};_.ec=function sCd(){return EAd(this.a)};_.zc=function uCd(a,b){return HAd(this.a,a,b)};_.Bc=function vCd(a){return LAd(this.a,a)};_.gc=function wCd(){return this.a.f};_.Ib=function xCd(){return Htd(this.a.c)};_.Cc=function yCd(){return NAd(this.a)};var H4=mdb(Tte,'BasicEMap/DelegatingMap',1030);bcb(612,1,{42:1,133:1,612:1},zCd);_.Fb=function ACd(a){var b;if(JD(a,42)){b=BD(a,42);return (this.b!=null?pb(this.b,b.cd()):PD(this.b)===PD(b.cd()))&&(this.c!=null?pb(this.c,b.dd()):PD(this.c)===PD(b.dd()))}else{return false}};_.Sh=function BCd(){return this.a};_.cd=function CCd(){return this.b};_.dd=function DCd(){return this.c};_.Hb=function ECd(){return this.a^(this.c==null?0:tb(this.c))};_.Th=function FCd(a){this.a=a};_.Uh=function GCd(a){throw vbb(new gz)};_.ed=function HCd(a){var b;b=this.c;this.c=a;return b};_.Ib=function ICd(){return this.b+'->'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){Cmd(qud(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){Cmd(qud(this.q,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Ib=function sLd(){return gLd(this)};_.k=null;_.r=null;var KKd,LKd,MKd;var Y5=mdb(qte,'EClassImpl',88);bcb(1994,1993,Ove);_.Vh=function tLd(a,b){return Pxd(this,a,b)};_.Wh=function uLd(a){return Pxd(this,this.i,a)};_.Xh=function vLd(a,b){Qxd(this,a,b)};_.Yh=function wLd(a){Rxd(this,a)};_.lk=function xLd(a,b){return Sxd(this,a,b)};_.pi=function yLd(a){return nud(this,a)};_.mk=function CLd(a,b){return Txd(this,a,b)};_.mi=function DLd(a,b){return Zxd(this,a,b)};_.Zh=function zLd(){return new $yd(this)};_.$h=function ALd(){return new bzd(this)};_._h=function BLd(a){return ztd(this,a)};var P9=mdb(yve,'NotifyingInternalEListImpl',1994);bcb(622,1994,Pve);_.Hc=function NLd(a){return ELd(this,a)};_.Zi=function OLd(a,b,c,d,e){return FLd(this,a,b,c,d,e)};_.$i=function PLd(a){GLd(this,a)};_.Wj=function QLd(a){return this};_.ak=function RLd(){return XKd(this.e.Tg(),this.aj())};_._i=function SLd(){return this.ak()};_.aj=function TLd(){return bLd(this.e.Tg(),this.ak())};_.zk=function ULd(){return BD(this.ak().Yj(),26).Bj()};_.Ak=function VLd(){return zUd(BD(this.ak(),18)).n};_.Ai=function WLd(){return this.e};_.Bk=function XLd(){return true};_.Ck=function YLd(){return false};_.Dk=function ZLd(){return false};_.Ek=function $Ld(){return false};_.Xc=function _Ld(a){return HLd(this,a)};_.cj=function aMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.e,this.Ak(),this.zk(),b):c.gh(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.gh(this.e,-1-this.aj(),null,b)};_.dj=function bMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.e,this.Ak(),this.zk(),b):c.ih(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.ih(this.e,-1-this.aj(),null,b)};_.rk=function cMd(){return false};_.Fk=function dMd(){return true};_.wj=function eMd(a){return qEd(this.d,a)};_.ej=function fMd(){return oid(this.e)};_.fj=function gMd(){return this.i!=0};_.ri=function hMd(a){return izd(this.d,a)};_.li=function iMd(a,b){return this.Fk()&&this.Ek()?ILd(this,a,BD(b,56)):b};_.Gk=function jMd(a){return a.kh()?xid(this.e,BD(a,49)):a};_.Wb=function kMd(a){JLd(this,a)};_.Pc=function lMd(){return KLd(this)};_.Qc=function mMd(a){var b;if(this.Ek()){for(b=this.i-1;b>=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c<d;++c){if(PD(this.g[c])===PD(a)){return c}}}}return -1};var J5=mdb(qte,'EClassImpl/1EAllStructuralFeaturesList',1147);bcb(1141,497,oue,wNd);_.ri=function xNd(a){return KC(j5,Tve,87,a,0,1)};_.ni=function yNd(){return false};var K5=mdb(qte,'EClassImpl/1EGenericSuperTypeEList',1141);bcb(623,497,oue,zNd);_.ri=function ANd(a){return KC(t5,Mve,170,a,0,1)};_.ni=function BNd(){return false};var L5=mdb(qte,'EClassImpl/1EStructuralFeatureUniqueEList',623);bcb(741,497,oue,CNd);_.ri=function DNd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function ENd(){return false};var M5=mdb(qte,'EClassImpl/1ReferenceList',741);bcb(1142,497,oue,GNd);_.bi=function HNd(a,b){FNd(this,BD(b,34))};_.ri=function INd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function JNd(){return false};var O5=mdb(qte,'EClassImpl/2',1142);bcb(1143,497,oue,KNd);_.ri=function LNd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function MNd(){return false};var P5=mdb(qte,'EClassImpl/3',1143);bcb(1145,319,Pve,PNd);_.Fc=function QNd(a){return NNd(this,BD(a,34))};_.Yh=function RNd(a){ONd(this,BD(a,34))};var Q5=mdb(qte,'EClassImpl/4',1145);bcb(1146,319,Pve,UNd);_.Fc=function VNd(a){return SNd(this,BD(a,18))};_.Yh=function WNd(a){TNd(this,BD(a,18))};var R5=mdb(qte,'EClassImpl/5',1146);bcb(1148,497,oue,XNd);_.ri=function YNd(a){return KC(n5,Nve,59,a,0,1)};_.ni=function ZNd(){return false};var S5=mdb(qte,'EClassImpl/6',1148);bcb(1149,497,oue,$Nd);_.ri=function _Nd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function aOd(){return false};var T5=mdb(qte,'EClassImpl/7',1149);bcb(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1});_.Vh=function bOd(a,b){return qwd(this,a,b)};_.Wh=function cOd(a){return qwd(this,this.Vi(),a)};_.Xh=function dOd(a,b){rwd(this,a,b)};_.Yh=function eOd(a){swd(this,a)};_.lk=function fOd(a,b){return twd(this,a,b)};_.mk=function lOd(a,b){return uwd(this,a,b)};_.mi=function mOd(a,b){return wwd(this,a,b)};_.pi=function gOd(a){return this.Oi(a)};_.Zh=function hOd(){return new $yd(this)};_.Gi=function iOd(){return this.Ji()};_.$h=function jOd(){return new bzd(this)};_._h=function kOd(a){return ztd(this,a)};var L8=mdb(yve,'DelegatingNotifyingInternalEListImpl',1997);bcb(742,1997,Uve);_.ai=function rOd(){var a;a=XKd(wjd(this.b),this.aj()).Yj();return JD(a,148)&&!JD(a,457)&&(a.Bj().i&1)==0};_.Hc=function sOd(a){var b,c,d,e,f,g,h,i;if(this.Fk()){i=this.Vi();if(i>4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e<i;++e){b=oOd(this,this.Oi(e));if(PD(b)===PD(a)){return true}}}return h}else if(this.Dk()&&!this.Ck()){f=BD(a,56).ah(zUd(BD(XKd(wjd(this.b),this.aj()),18)));if(PD(f)===PD(this.b)){return true}else if(f==null||!BD(f,56).kh()){return false}}}else{return false}}g=this.Li(a);if(this.Ek()&&!g){for(e=0;e<i;++e){d=oOd(this,this.Oi(e));if(PD(d)===PD(a)){return true}}}return g}else{return this.Li(a)}};_.Zi=function tOd(a,b,c,d,e){return new pSd(this.b,a,this.aj(),b,c,d,e)};_.$i=function uOd(a){Uhd(this.b,a)};_.Wj=function vOd(a){return this};_._i=function wOd(){return XKd(wjd(this.b),this.aj())};_.aj=function xOd(){return bLd(wjd(this.b),XKd(wjd(this.b),this.aj()))};_.Ai=function yOd(){return this.b};_.Bk=function zOd(){return !!XKd(wjd(this.b),this.aj()).Yj().Bj()};_.bj=function AOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0||!!zUd(BD(b,18))}else{return false}};_.Ck=function BOd(){var a,b,c,d;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c<e;++c){b=oOd(this,this.Oi(c));if(PD(b)===PD(a)){return c}}}return -1};_.cj=function FOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.gh(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.gh(this.b,-1-this.aj(),null,b)};_.dj=function GOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.ih(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.ih(this.b,-1-this.aj(),null,b)};_.rk=function HOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0}else{return false}};_.Fk=function IOd(){return JD(XKd(wjd(this.b),this.aj()).Yj(),88)};_.wj=function JOd(a){return XKd(wjd(this.b),this.aj()).Yj().wj(a)};_.ej=function KOd(){return oid(this.b)};_.fj=function LOd(){return !this.Ri()};_.hi=function MOd(){return XKd(wjd(this.b),this.aj()).hi()};_.li=function NOd(a,b){return nOd(this,a,b)};_.Wb=function OOd(a){vwd(this);ytd(this,BD(a,15))};_.Pc=function POd(){var a;if(this.Ek()){for(a=this.Vi()-1;a>=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,JD(c,88)?BD(c,26):(jGd(),_Fd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function rPd(a){};_.aj=function sPd(){return 10};_.Bk=function tPd(){return true};_.bj=function uPd(){return false};_.Ck=function vPd(){return false};_.Dk=function wPd(){return false};_.Ek=function xPd(){return true};_.rk=function yPd(){return false};_.Fk=function zPd(){return true};_.wj=function APd(a){return JD(a,88)};_.fj=function BPd(){return cLd(this.a)};_.hi=function CPd(){return true};_.ni=function DPd(){return true};var V5=mdb(qte,'EClassImpl/8',1150);bcb(1151,1964,Lie,EPd);_.Zc=function FPd(a){return ztd(this.a,a)};_.gc=function GPd(){return VKd(this.a.a).i};var U5=mdb(qte,'EClassImpl/8/1',1151);bcb(1152,497,oue,HPd);_.ri=function IPd(a){return KC(d5,Uhe,138,a,0,1)};_.ni=function JPd(){return false};var W5=mdb(qte,'EClassImpl/9',1152);bcb(1139,53,gke,KPd);var X5=mdb(qte,'EClassImpl/MyHashSet',1139);bcb(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},MPd);_._g=function NPd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function OPd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function PPd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function QPd(){return jGd(),TFd};_.Bh=function RPd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function SPd(){o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Fj=function TPd(){var a,b,c;if(!this.c){a=l6d(bKd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=GD(c.Pb());!!Dmd(this,b)&&k6d(this)}}}return this.b};_.zj=function UPd(){var b;if(!this.e){b=null;try{b=dKd(this)}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==sbb?(this.d=(Bcb(),zcb)):b==WD?(this.d=meb(0)):b==VD?(this.d=new Ndb(0)):b==UD?(this.d=0):b==XD?(this.d=Aeb(0)):b==rbb?(this.d=Web(0)):b==SD?(this.d=Scb(0)):(this.d=bdb(0)));this.e=true}return this.d};_.Ej=function VPd(){return (this.Bb&256)!=0};_.Ik=function WPd(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.xk=function XPd(a){gKd(this,a);this.Ik(a)};_.yk=function YPd(a){this.C=a;this.e=false};_.Ib=function ZPd(){var a;if((this.Db&64)!=0)return mKd(this);a=new Jfb(mKd(this));a.a+=' (serializable: ';Ffb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var $5=mdb(qte,'EDataTypeImpl',566);bcb(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},aQd);_._g=function bQd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return $Pd(this);case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),this.a;}return bid(this,a-aLd((jGd(),UFd)),XKd((d=BD(Ajd(this,16),26),!d?UFd:d),a),b,c)};_.hh=function cQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){Cmd(qud(this.a,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.zj=function jQd(){return $Pd(this)};_.wj=function kQd(a){if(a!=null){return true}return false};_.Ik=function lQd(a){};var _5=mdb(qte,'EEnumImpl',457);bcb(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},rQd);_.ne=function AQd(){return this.zb};_.Qg=function sQd(a){return mQd(this,a)};_._g=function tQd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return meb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.dc=function wRd(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){f=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(f,153);for(d=0,e=b.gc();d<e;++d){if(oRd(b.il(d))&&b.jl(d)!=null){return false}}}else if(a.$j()){if(!BD(f,14).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function xRd(){return pRd(this)};_.Zc=function yRd(a){var b,c;if(this.b==null){if(a!=0){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Lk()?this.Kk():this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.ii=function zRd(a,b){throw vbb(new bgb)};_.ji=function ARd(a,b){throw vbb(new bgb)};_.Jk=function BRd(){return new RRd(this.a,this.b)};_.Kk=function CRd(){return new dSd(this.a,this.b)};_.Lk=function DRd(){return true};_.gc=function ERd(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){g=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(g,153);for(d=0,f=b.gc();d<f;++d){oRd(b.il(d))&&b.jl(d)!=null&&++e}}else a.$j()?(e+=BD(g,14).gc()):g!=null&&++e}}}return e};_.Mk=function FRd(){return true};var mRd;var R8=mdb(yve,'EContentsEList',486);bcb(1156,486,Vve,GRd);_.Jk=function HRd(){return new hSd(this.a,this.b)};_.Kk=function IRd(){return new fSd(this.a,this.b)};_.Mk=function JRd(){return false};var i6=mdb(qte,'ENamedElementImpl/1',1156);bcb(279,1,Wve,RRd);_.Nb=function URd(a){Rrb(this,a)};_.Rb=function SRd(a){throw vbb(new bgb)};_.Nk=function TRd(a){if(this.g!=0||!!this.e){throw vbb(new Zdb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function VRd(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!NRd(this):!ORd(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.Yc():this.j.$h()}if(!this.p?NRd(this):ORd(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function WRd(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!PRd(this):!QRd(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){Cmd(qud(this.c,a))}}wId(this);this.Bb|=1};var p6=mdb(qte,'EOperationImpl',399);bcb(505,742,Uve,fTd);_.Hi=function iTd(a,b){aTd(this,a,BD(b,138))};_.Ii=function jTd(a){bTd(this,BD(a,138))};_.Oi=function pTd(a){var b,c;return b=BD(qud(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ti=function uTd(a){var b,c;return b=BD(Xxd(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ui=function vTd(a,b){return dTd(this,a,BD(b,138))};_.ai=function gTd(){return false};_.Zi=function hTd(a,b,c,d,e){return null};_.Ji=function kTd(){return new NTd(this)};_.Ki=function lTd(){Uxd(QSd(this.a))};_.Li=function mTd(a){return cTd(this,a)};_.Mi=function nTd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!cTd(this,b)){return false}}return true};_.Ni=function oTd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==QSd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function qTd(){var a,b,c,d,e;c=1;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,e?e:(jGd(),YFd));c=31*c+(!d?0:tb(d))}return c};_.Qi=function rTd(a){var b,c,d,e;d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,e?e:(jGd(),YFd)))){return d}++d}return -1};_.Ri=function sTd(){return QSd(this.a).i==0};_.Si=function tTd(){return null};_.Vi=function wTd(){return QSd(this.a).i};_.Wi=function xTd(){var a,b,c,d,e,f;f=QSd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,d?d:(jGd(),YFd))}return e};_.Xi=function yTd(a){var b,c,d,e,f,g,h;h=QSd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,c?c:(jGd(),YFd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function ATd(a){};_.aj=function BTd(){return 13};_.Bk=function CTd(){return true};_.bj=function DTd(){return false};_.Ck=function ETd(){return false};_.Dk=function FTd(){return false};_.Ek=function GTd(){return true};_.rk=function HTd(){return false};_.Fk=function ITd(){return true};_.wj=function JTd(a){return JD(a,138)};_.fj=function KTd(){return RSd(this.a)};_.hi=function LTd(){return true};_.ni=function MTd(){return true};var n6=mdb(qte,'EOperationImpl/1',505);bcb(1340,1964,Lie,NTd);_.Zc=function OTd(a){return ztd(this.a,a)};_.gc=function PTd(){return QSd(this.a.a).i};var m6=mdb(qte,'EOperationImpl/1/1',1340);bcb(1341,545,Pve,UTd);_.ii=function YTd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),bGd),meb(b),(d=c.c,d?d:YFd),a)),c};_.jj=function ZTd(a,b){return RTd(this,BD(a,87),b)};_.kj=function $Td(a,b){return STd(this,BD(a,87),b)};_.lj=function _Td(a,b,c){return TTd(this,BD(a,87),BD(b,87),c)};_.Zi=function VTd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+"'"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b<d;++b){BCb(b,a.length);if(a.charCodeAt(b)==47){Ekb(f,e==b?'':a.substr(e,b-e));e=b+1}}Ekb(f,a.substr(e));return j0d(this,f)}else{BCb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=lfb(a,wfb(63),d-2);c>0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.rl(i.ak())){BD(Gtd(this,h,d),72);g=false;break}}g&&wtd(j,d)}}return xtd(this,a,j)};_.Gc=function z3d(a){var b,c,d,e,f,g,h,i,j;i=new zud(a.gc());for(d=a.Kc();d.Ob();){c=BD(d.Pb(),72);e=c.ak();if(T6d(this.e,e)){(!e.hi()||!E2d(this,e,c.dd())&&!pud(i,c))&&wtd(i,c)}else{j=S6d(this.e.Tg(),e);b=BD(this.g,119);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.rl(h.ak())){BD(Gtd(this,g,c),72);f=false;break}}f&&wtd(i,c)}}return ytd(this,i)};_.Wh=function A3d(a){this.j=-1;return Pxd(this,this.i,a)};_.el=function C3d(a,b,c){return x2d(this,a,b,c)};_.mk=function D3d(a,b){return B2d(this,a,b)};_.fl=function E3d(a,b,c){return C2d(this,a,b,c)};_.gl=function F3d(){return this};_.hl=function G3d(a,b){return K2d(this,a,b)};_.il=function H3d(a){return BD(qud(this,a),72).ak()};_.jl=function I3d(a){return BD(qud(this,a),72).dd()};_.kl=function J3d(){return this.b};_.bj=function K3d(){return true};_.ij=function L3d(){return true};_.ll=function O3d(a){return !R2d(this,a)};_.ri=function Q3d(a){return KC(D9,owe,332,a,0,1)};_.Gk=function S3d(a){return a3d(this,a)};_.Wb=function U3d(a){d3d(this,a)};_.ml=function V3d(a,b){f3d(this,a,b)};_.nl=function W3d(a){return g3d(this,a)};_.ol=function $3d(a){s3d(this,a)};var J8=mdb(yve,'BasicFeatureMap',75);bcb(1851,1,jie);_.Nb=function f4d(a){Rrb(this,a)};_.Rb=function e4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{p2d(this.e,this.b,this.a,b);this.d=this.e.j;d4d(this)}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Ob=function g4d(){return b4d(this)};_.Sb=function h4d(){return c4d(this)};_.Pb=function i4d(){return d4d(this)};_.Tb=function j4d(){return this.a};_.Ub=function k4d(){var a;if(c4d(this)){a4d(this);this.g=--this.a;if(this.Lk()){a=b3d(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw vbb(new utb)}};_.Vb=function l4d(){return this.a-1};_.Qb=function m4d(){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{Z2d(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Lk=function n4d(){return false};_.Wb=function o4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{e3d(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var G9=mdb(yve,'FeatureMapUtil/BasicFeatureEIterator',1851);bcb(410,1851,jie,p4d);_.pl=function q4d(){var a,b,c;c=this.e.i;a=BD(this.e.g,119);while(this.c<c){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_.ql=function r4d(){var a,b;a=BD(this.e.g,119);while(--this.c>=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return a<this.j&&bfb(this.i,a)==63};_.tl=function wde(){var a,b,c,d,e;if(this.c!=10)throw vbb(new mde(tvd((h0d(),uue))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if(this.a==123){e=0;c=0;do{nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if((e=yde(this.a))<0)break;if(c>c*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\d';else if(this==sfe)c='\\w';else if(this==nfe)c='\\s';else{d=new Hfb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\D';else if(this==lfe)c='\\W';else if(this==kfe)c='\\S';else{d=new Hfb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+HD(this.a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?<!'+this.a.fm(a)+')';break;case 24:b='(?>'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d<this.a.a.c.length;d++){Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e}if(this.a.a.c.length==2&&BD(Uvb(this.a,1),117).e==7){e=BD(Uvb(this.a,0),117).fm(a)+'?'}else if(this.a.a.c.length==2&&BD(Uvb(this.a,0),117).e==7){e=BD(Uvb(this.a,1),117).fm(a)+'??'}else{f=new Hfb;Efb(f,BD(Uvb(this.a,0),117).fm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e};var kbb=mdb(kxe,'RegEx/Token/UnionToken',465);bcb(518,1,{592:1},Rge);_.Ib=function Sge(){return this.a.b};var mbb=mdb(zxe,'XMLTypeUtil/PatternMatcherImpl',518);bcb(1622,1381,{},Vge);var Tge;var nbb=mdb(zxe,'XMLTypeValidator',1622);bcb(264,1,vie,Yge);_.Jc=function Zge(a){reb(this,a)};_.Kc=function $ge(){return (this.b-this.a)*this.c<0?Wge:new she(this)};_.a=0;_.b=0;_.c=0;var Wge;var qbb=mdb(Bxe,'ExclusiveRange',264);bcb(1068,1,jie,dhe);_.Rb=function ehe(a){BD(a,19);_ge()};_.Nb=function fhe(a){Rrb(this,a)};_.Pb=function ihe(){return ahe()};_.Ub=function khe(){return bhe()};_.Wb=function nhe(a){BD(a,19);che()};_.Ob=function ghe(){return false};_.Sb=function hhe(){return false};_.Tb=function jhe(){return -1};_.Vb=function lhe(){return -1};_.Qb=function mhe(){throw vbb(new cgb(Exe))};var obb=mdb(Bxe,'ExclusiveRange/1',1068);bcb(254,1,jie,she);_.Rb=function the(a){BD(a,19);ohe()};_.Nb=function uhe(a){Rrb(this,a)};_.Pb=function xhe(){return phe(this)};_.Ub=function zhe(){return qhe(this)};_.Wb=function Che(a){BD(a,19);rhe()};_.Ob=function vhe(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 40577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51568); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(97312); + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 64627: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 56], $Vf = [1, 55], $Vg = [1, 36], $Vh = [1, 37], $Vi = [1, 38], $Vj = [1, 39], $Vk = [1, 40], $Vl = [1, 51], $Vm = [1, 53], $Vn = [1, 49], $Vo = [1, 54], $Vp = [1, 50], $Vq = [1, 57], $Vr = [1, 52], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 41], $Vv = [1, 42], $Vw = [1, 43], $Vx = [1, 44], $Vy = [1, 62], $Vz = [1, 67], $VA = [1, 20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VB = [1, 71], $VC = [1, 70], $VD = [1, 72], $VE = [20, 21, 23, 84, 86], $VF = [1, 98], $VG = [1, 103], $VH = [1, 102], $VI = [1, 99], $VJ = [1, 95], $VK = [1, 101], $VL = [1, 97], $VM = [1, 104], $VN = [1, 100], $VO = [1, 105], $VP = [1, 96], $VQ = [20, 21, 22, 23, 84, 86], $VR = [20, 21, 22, 23, 55, 84, 86], $VS = [20, 21, 22, 23, 40, 53, 55, 57, 59, 61, 63, 65, 67, 69, 72, 74, 76, 77, 79, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VT = [20, 21, 23], $VU = [20, 21, 23, 53, 69, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VV = [1, 12, 20, 21, 22, 23, 24, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VW = [53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VX = [1, 134], $VY = [1, 133], $VZ = [1, 141], $V_ = [1, 155], $V$ = [1, 156], $V01 = [1, 157], $V11 = [1, 158], $V21 = [1, 143], $V31 = [1, 145], $V41 = [1, 149], $V51 = [1, 150], $V61 = [1, 151], $V71 = [1, 152], $V81 = [1, 153], $V91 = [1, 154], $Va1 = [1, 159], $Vb1 = [1, 160], $Vc1 = [1, 139], $Vd1 = [1, 140], $Ve1 = [1, 147], $Vf1 = [1, 142], $Vg1 = [1, 146], $Vh1 = [1, 144], $Vi1 = [20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $Vj1 = [1, 162], $Vk1 = [20, 21, 22, 23, 26, 53, 69, 97, 113, 114, 117, 119, 122, 123, 124], $Vl1 = [1, 182], $Vm1 = [1, 178], $Vn1 = [1, 179], $Vo1 = [1, 183], $Vp1 = [1, 180], $Vq1 = [1, 181], $Vr1 = [12, 21, 22, 24], $Vs1 = [86, 124, 127], $Vt1 = [20, 21, 22, 23, 24, 26, 38, 40, 43, 53, 69, 84, 92, 93, 94, 95, 96, 97, 98, 113, 117, 119, 122, 123, 124], $Vu1 = [22, 114], $Vv1 = [42, 58, 60, 62, 64, 66, 71, 73, 75, 76, 78, 80, 124, 125, 126], $Vw1 = [1, 250], $Vx1 = [1, 248], $Vy1 = [1, 252], $Vz1 = [1, 246], $VA1 = [1, 247], $VB1 = [1, 249], $VC1 = [1, 251], $VD1 = [1, 253], $VE1 = [1, 270], $VF1 = [20, 21, 23, 114], $VG1 = [20, 21, 22, 23, 69, 92, 113, 114, 117, 118, 119, 120]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "textNoTags": 39, "SQS": 40, "text": 41, "SQE": 42, "end": 43, "direction": 44, "acc_title": 45, "acc_title_value": 46, "acc_descr": 47, "acc_descr_value": 48, "acc_descr_multiline_value": 49, "link": 50, "node": 51, "styledVertex": 52, "AMP": 53, "vertex": 54, "STYLE_SEPARATOR": 55, "idString": 56, "DOUBLECIRCLESTART": 57, "DOUBLECIRCLEEND": 58, "PS": 59, "PE": 60, "(-": 61, "-)": 62, "STADIUMSTART": 63, "STADIUMEND": 64, "SUBROUTINESTART": 65, "SUBROUTINEEND": 66, "VERTEX_WITH_PROPS_START": 67, "NODE_STRING[field]": 68, "COLON": 69, "NODE_STRING[value]": 70, "PIPE": 71, "CYLINDERSTART": 72, "CYLINDEREND": 73, "DIAMOND_START": 74, "DIAMOND_STOP": 75, "TAGEND": 76, "TRAPSTART": 77, "TRAPEND": 78, "INVTRAPSTART": 79, "INVTRAPEND": 80, "linkStatement": 81, "arrowText": 82, "TESTSTR": 83, "START_LINK": 84, "edgeText": 85, "LINK": 86, "edgeTextToken": 87, "STR": 88, "MD_STR": 89, "textToken": 90, "keywords": 91, "STYLE": 92, "LINKSTYLE": 93, "CLASSDEF": 94, "CLASS": 95, "CLICK": 96, "DOWN": 97, "UP": 98, "textNoTagsToken": 99, "stylesOpt": 100, "idString[vertex]": 101, "idString[class]": 102, "CALLBACKNAME": 103, "CALLBACKARGS": 104, "HREF": 105, "LINK_TARGET": 106, "STR[link]": 107, "STR[tooltip]": 108, "alphaNum": 109, "DEFAULT": 110, "numList": 111, "INTERPOLATE": 112, "NUM": 113, "COMMA": 114, "style": 115, "styleComponent": 116, "NODE_STRING": 117, "UNIT": 118, "BRKT": 119, "PCT": 120, "idStringToken": 121, "MINUS": 122, "MULT": 123, "UNICODE_TEXT": 124, "TEXT": 125, "TAGSTART": 126, "EDGE_TEXT": 127, "alphaNumToken": 128, "direction_tb": 129, "direction_bt": 130, "direction_rl": 131, "direction_lr": 132, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 42: "SQE", 43: "end", 45: "acc_title", 46: "acc_title_value", 47: "acc_descr", 48: "acc_descr_value", 49: "acc_descr_multiline_value", 53: "AMP", 55: "STYLE_SEPARATOR", 57: "DOUBLECIRCLESTART", 58: "DOUBLECIRCLEEND", 59: "PS", 60: "PE", 61: "(-", 62: "-)", 63: "STADIUMSTART", 64: "STADIUMEND", 65: "SUBROUTINESTART", 66: "SUBROUTINEEND", 67: "VERTEX_WITH_PROPS_START", 68: "NODE_STRING[field]", 69: "COLON", 70: "NODE_STRING[value]", 71: "PIPE", 72: "CYLINDERSTART", 73: "CYLINDEREND", 74: "DIAMOND_START", 75: "DIAMOND_STOP", 76: "TAGEND", 77: "TRAPSTART", 78: "TRAPEND", 79: "INVTRAPSTART", 80: "INVTRAPEND", 83: "TESTSTR", 84: "START_LINK", 86: "LINK", 88: "STR", 89: "MD_STR", 92: "STYLE", 93: "LINKSTYLE", 94: "CLASSDEF", 95: "CLASS", 96: "CLICK", 97: "DOWN", 98: "UP", 101: "idString[vertex]", 102: "idString[class]", 103: "CALLBACKNAME", 104: "CALLBACKARGS", 105: "HREF", 106: "LINK_TARGET", 107: "STR[link]", 108: "STR[tooltip]", 110: "DEFAULT", 112: "INTERPOLATE", 113: "NUM", 114: "COMMA", 117: "NODE_STRING", 118: "UNIT", 119: "BRKT", 120: "PCT", 122: "MINUS", 123: "MULT", 124: "UNICODE_TEXT", 125: "TEXT", 126: "TAGSTART", 127: "EDGE_TEXT", 129: "direction_tb", 130: "direction_bt", 131: "direction_rl", 132: "direction_lr" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [51, 1], [51, 5], [52, 1], [52, 3], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 8], [54, 4], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 4], [54, 4], [54, 1], [50, 2], [50, 3], [50, 3], [50, 1], [50, 3], [85, 1], [85, 2], [85, 1], [85, 1], [81, 1], [82, 3], [41, 1], [41, 2], [41, 1], [41, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [39, 1], [39, 2], [39, 1], [39, 1], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 3], [37, 5], [37, 5], [37, 7], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [111, 1], [111, 3], [100, 1], [100, 3], [115, 1], [115, 2], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [90, 1], [90, 1], [90, 1], [90, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [87, 1], [87, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [56, 1], [56, 2], [109, 1], [109, 2], [44, 1], [44, 1], [44, 1], [44, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 184: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = $$[$0]; + break; + case 58: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 65: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 68: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 69: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 75: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 76: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 77: + case 78: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 79: + this.$ = $$[$0]; + break; + case 80: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 81: + this.$ = { text: $$[$0], type: "text" }; + break; + case 82: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 83: + this.$ = { text: $$[$0], type: "string" }; + break; + case 84: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 85: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 86: + this.$ = $$[$0 - 1]; + break; + case 87: + this.$ = { text: $$[$0], type: "text" }; + break; + case 88: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 89: + this.$ = { text: $$[$0], type: "string" }; + break; + case 90: + case 105: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 102: + this.$ = { text: $$[$0], type: "text" }; + break; + case 103: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 104: + this.$ = { text: $$[$0], type: "text" }; + break; + case 106: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 108: + case 116: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 109: + case 117: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 110: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 115: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 118: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 122: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 123: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 124: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 125: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 126: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 127: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 128: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 129: + case 131: + this.$ = [$$[$0]]; + break; + case 130: + case 132: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 134: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 182: + this.$ = $$[$0]; + break; + case 183: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 185: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 186: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 187: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 188: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 189: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 8: 60, 10: [1, 61], 15: $Vy }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 64], 21: [1, 65], 22: $Vz, 27: 63, 30: 66 }, o($VA, [2, 11]), o($VA, [2, 12]), o($VA, [2, 13]), o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), { 9: 68, 20: $VB, 21: $VC, 23: $VD, 50: 69, 81: 73, 84: [1, 74], 86: [1, 75] }, { 9: 76, 20: $VB, 21: $VC, 23: $VD }, { 9: 77, 20: $VB, 21: $VC, 23: $VD }, { 9: 78, 20: $VB, 21: $VC, 23: $VD }, { 9: 79, 20: $VB, 21: $VC, 23: $VD }, { 9: 80, 20: $VB, 21: $VC, 23: $VD }, { 9: 82, 20: $VB, 21: $VC, 22: [1, 81], 23: $VD }, o($VA, [2, 44]), { 46: [1, 83] }, { 48: [1, 84] }, o($VA, [2, 47]), o($VE, [2, 54], { 30: 85, 22: $Vz }), { 22: [1, 86] }, { 22: [1, 87] }, { 22: [1, 88] }, { 22: [1, 89] }, { 26: $VF, 53: $VG, 69: $VH, 88: [1, 93], 97: $VI, 103: [1, 90], 105: [1, 91], 109: 92, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, o($VA, [2, 186]), o($VA, [2, 187]), o($VA, [2, 188]), o($VA, [2, 189]), o($VQ, [2, 55]), o($VQ, [2, 57], { 55: [1, 106] }), o($VR, [2, 75], { 121: 119, 40: [1, 107], 53: $Ve, 57: [1, 108], 59: [1, 109], 61: [1, 110], 63: [1, 111], 65: [1, 112], 67: [1, 113], 69: $Vf, 72: [1, 114], 74: [1, 115], 76: [1, 116], 77: [1, 117], 79: [1, 118], 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VS, [2, 182]), o($VS, [2, 143]), o($VS, [2, 144]), o($VS, [2, 145]), o($VS, [2, 146]), o($VS, [2, 147]), o($VS, [2, 148]), o($VS, [2, 149]), o($VS, [2, 150]), o($VS, [2, 151]), o($VS, [2, 152]), o($VS, [2, 153]), { 9: 120, 20: $VB, 21: $VC, 23: $VD }, { 11: 121, 14: [1, 122] }, o($VT, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 123] }, o($VU, [2, 34], { 30: 124, 22: $Vz }), o($VA, [2, 35]), { 51: 125, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VV, [2, 48]), o($VV, [2, 49]), o($VV, [2, 50]), o($VW, [2, 79], { 82: 126, 71: [1, 128], 83: [1, 127] }), { 85: 129, 87: 130, 88: [1, 131], 89: [1, 132], 124: $VX, 127: $VY }, o([53, 69, 71, 83, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 85]), o($VA, [2, 36]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), { 22: $VZ, 24: $V_, 26: $V$, 38: $V01, 39: 135, 43: $V11, 53: $V21, 69: $V31, 84: $V41, 88: [1, 137], 89: [1, 138], 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 136, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vi1, $V5, { 17: 161 }), o($VA, [2, 45]), o($VA, [2, 46]), o($VE, [2, 53], { 53: $Vj1 }), { 53: $Ve, 56: 163, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 110: [1, 164], 111: 165, 113: [1, 166] }, { 53: $Ve, 56: 167, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 53: $Ve, 56: 168, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 108], { 22: [1, 169], 104: [1, 170] }), { 88: [1, 171] }, o($VT, [2, 116], { 128: 173, 22: [1, 172], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 118], { 22: [1, 174] }), o($Vk1, [2, 184]), o($Vk1, [2, 171]), o($Vk1, [2, 172]), o($Vk1, [2, 173]), o($Vk1, [2, 174]), o($Vk1, [2, 175]), o($Vk1, [2, 176]), o($Vk1, [2, 177]), o($Vk1, [2, 178]), o($Vk1, [2, 179]), o($Vk1, [2, 180]), o($Vk1, [2, 181]), { 53: $Ve, 56: 175, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 41: 176, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 184, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 186, 59: [1, 185], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 187, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 188, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 189, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 117: [1, 190] }, { 41: 191, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 192, 74: [1, 193], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 194, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 195, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 196, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VS, [2, 183]), o($Vr1, [2, 3]), { 8: 197, 15: $Vy }, { 15: [2, 7] }, o($V4, [2, 28]), o($VU, [2, 33]), o($VE, [2, 51], { 30: 198, 22: $Vz }), o($VW, [2, 76], { 22: [1, 199] }), { 22: [1, 200] }, { 41: 201, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 86: [1, 202], 87: 203, 124: $VX, 127: $VY }, o($Vs1, [2, 81]), o($Vs1, [2, 83]), o($Vs1, [2, 84]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), { 9: 205, 20: $VB, 21: $VC, 22: $VZ, 23: $VD, 24: $V_, 26: $V$, 38: $V01, 40: [1, 204], 43: $V11, 53: $V21, 69: $V31, 84: $V41, 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 206, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vt1, [2, 102]), o($Vt1, [2, 104]), o($Vt1, [2, 105]), o($Vt1, [2, 158]), o($Vt1, [2, 159]), o($Vt1, [2, 160]), o($Vt1, [2, 161]), o($Vt1, [2, 162]), o($Vt1, [2, 163]), o($Vt1, [2, 164]), o($Vt1, [2, 165]), o($Vt1, [2, 166]), o($Vt1, [2, 167]), o($Vt1, [2, 168]), o($Vt1, [2, 91]), o($Vt1, [2, 92]), o($Vt1, [2, 93]), o($Vt1, [2, 94]), o($Vt1, [2, 95]), o($Vt1, [2, 96]), o($Vt1, [2, 97]), o($Vt1, [2, 98]), o($Vt1, [2, 99]), o($Vt1, [2, 100]), o($Vt1, [2, 101]), { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 207], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vz, 30: 208 }, { 22: [1, 209], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 210] }, { 22: [1, 211], 114: [1, 212] }, o($Vu1, [2, 129]), { 22: [1, 213], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 214], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 88: [1, 215] }, o($VT, [2, 110], { 22: [1, 216] }), o($VT, [2, 112], { 22: [1, 217] }), { 88: [1, 218] }, o($Vk1, [2, 185]), { 88: [1, 219], 106: [1, 220] }, o($VQ, [2, 58], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), { 42: [1, 221], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vv1, [2, 87]), o($Vv1, [2, 89]), o($Vv1, [2, 90]), o($Vv1, [2, 154]), o($Vv1, [2, 155]), o($Vv1, [2, 156]), o($Vv1, [2, 157]), { 58: [1, 223], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 224, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 60: [1, 225], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 62: [1, 226], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 64: [1, 227], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 66: [1, 228], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 69: [1, 229] }, { 73: [1, 230], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 75: [1, 231], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 232, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 42: [1, 233], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 234], 80: [1, 235], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 237], 80: [1, 236], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 9: 238, 20: $VB, 21: $VC, 23: $VD }, o($VE, [2, 52], { 53: $Vj1 }), o($VW, [2, 78]), o($VW, [2, 77]), { 71: [1, 239], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VW, [2, 80]), o($Vs1, [2, 82]), { 41: 240, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vi1, $V5, { 17: 241 }), o($Vt1, [2, 103]), o($VA, [2, 43]), { 52: 242, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 243, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 254, 112: [1, 255], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 256, 112: [1, 257], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 113: [1, 258] }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 259, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 53: $Ve, 56: 260, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 109]), { 88: [1, 261] }, { 88: [1, 262], 106: [1, 263] }, o($VT, [2, 117]), o($VT, [2, 119], { 22: [1, 264] }), o($VT, [2, 120]), o($VR, [2, 59]), o($Vv1, [2, 88]), o($VR, [2, 60]), { 60: [1, 265], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 67]), o($VR, [2, 62]), o($VR, [2, 63]), o($VR, [2, 64]), { 117: [1, 266] }, o($VR, [2, 66]), o($VR, [2, 68]), { 75: [1, 267], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 70]), o($VR, [2, 71]), o($VR, [2, 73]), o($VR, [2, 72]), o($VR, [2, 74]), o($Vr1, [2, 4]), o([22, 53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 86]), { 42: [1, 268], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 269], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, o($VQ, [2, 56]), o($VT, [2, 122], { 114: $VE1 }), o($VF1, [2, 131], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VG1, [2, 133]), o($VG1, [2, 135]), o($VG1, [2, 136]), o($VG1, [2, 137]), o($VG1, [2, 138]), o($VG1, [2, 139]), o($VG1, [2, 140]), o($VG1, [2, 141]), o($VG1, [2, 142]), o($VT, [2, 123], { 114: $VE1 }), { 22: [1, 272] }, o($VT, [2, 124], { 114: $VE1 }), { 22: [1, 273] }, o($Vu1, [2, 130]), o($VT, [2, 106], { 114: $VE1 }), o($VT, [2, 107], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VT, [2, 111]), o($VT, [2, 113], { 22: [1, 274] }), o($VT, [2, 114]), { 106: [1, 275] }, { 60: [1, 276] }, { 71: [1, 277] }, { 75: [1, 278] }, { 9: 279, 20: $VB, 21: $VC, 23: $VD }, o($VA, [2, 42]), { 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 115: 280, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VG1, [2, 134]), { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 281, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 282, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 106: [1, 283] }, o($VT, [2, 121]), o($VR, [2, 61]), { 41: 284, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 69]), o($Vi1, $V5, { 17: 285 }), o($VF1, [2, 132], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VT, [2, 127], { 128: 173, 22: [1, 286], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 128], { 128: 173, 22: [1, 287], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 115]), { 42: [1, 288], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 289], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 290, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 291, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VR, [2, 65]), o($VA, [2, 41]), o($VT, [2, 125], { 114: $VE1 }), o($VT, [2, 126], { 114: $VE1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 122: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 45; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 47; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("callbackname"); + break; + case 13: + this.popState(); + break; + case 14: + this.popState(); + this.begin("callbackargs"); + break; + case 15: + return 103; + case 16: + this.popState(); + break; + case 17: + return 104; + case 18: + return "MD_STR"; + case 19: + this.popState(); + break; + case 20: + this.begin("md_string"); + break; + case 21: + return "STR"; + case 22: + this.popState(); + break; + case 23: + this.pushState("string"); + break; + case 24: + return 92; + case 25: + return 110; + case 26: + return 93; + case 27: + return 112; + case 28: + return 94; + case 29: + return 95; + case 30: + return 105; + case 31: + this.begin("click"); + break; + case 32: + this.popState(); + break; + case 33: + return 96; + case 34: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 35: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + return 38; + case 38: + return 43; + case 39: + return 106; + case 40: + return 106; + case 41: + return 106; + case 42: + return 106; + case 43: + this.popState(); + return 25; + case 44: + this.popState(); + return 26; + case 45: + this.popState(); + return 26; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + return 129; + case 55: + return 130; + case 56: + return 131; + case 57: + return 132; + case 58: + return 113; + case 59: + return 119; + case 60: + return 55; + case 61: + return 69; + case 62: + return 53; + case 63: + return 20; + case 64: + return 114; + case 65: + return 123; + case 66: + this.popState(); + return 86; + case 67: + this.pushState("edgeText"); + return 84; + case 68: + return 127; + case 69: + this.popState(); + return 86; + case 70: + this.pushState("thickEdgeText"); + return 84; + case 71: + return 127; + case 72: + this.popState(); + return 86; + case 73: + this.pushState("dottedEdgeText"); + return 84; + case 74: + return 127; + case 75: + return 86; + case 76: + this.popState(); + return 62; + case 77: + return "TEXT"; + case 78: + this.pushState("ellipseText"); + return 61; + case 79: + this.popState(); + return 64; + case 80: + this.pushState("text"); + return 63; + case 81: + this.popState(); + return 66; + case 82: + this.pushState("text"); + return 65; + case 83: + return 67; + case 84: + this.pushState("text"); + return 76; + case 85: + this.popState(); + return 73; + case 86: + this.pushState("text"); + return 72; + case 87: + this.popState(); + return 58; + case 88: + this.pushState("text"); + return 57; + case 89: + this.popState(); + return 78; + case 90: + this.popState(); + return 80; + case 91: + return 125; + case 92: + this.pushState("trapText"); + return 77; + case 93: + this.pushState("trapText"); + return 79; + case 94: + return 126; + case 95: + return 76; + case 96: + return 98; + case 97: + return "SEP"; + case 98: + return 97; + case 99: + return 123; + case 100: + return 119; + case 101: + return 53; + case 102: + return 117; + case 103: + return 122; + case 104: + return 124; + case 105: + this.popState(); + return 71; + case 106: + this.pushState("text"); + return 71; + case 107: + this.popState(); + return 60; + case 108: + this.pushState("text"); + return 59; + case 109: + this.popState(); + return 42; + case 110: + this.pushState("text"); + return 40; + case 111: + this.popState(); + return 75; + case 112: + this.pushState("text"); + return 74; + case 113: + return "TEXT"; + case 114: + return "QUOTE"; + case 115: + return 21; + case 116: + return 22; + case 117: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|(?!\)+))/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "arg_directive": { "rules": [3, 4, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "type_directive": { "rules": [2, 3, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "open_directive": { "rules": [1, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackargs": { "rules": [16, 17, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackname": { "rules": [13, 14, 15, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "href": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "click": { "rules": [20, 23, 32, 33, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dottedEdgeText": { "rules": [20, 23, 72, 74, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "thickEdgeText": { "rules": [20, 23, 69, 71, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "edgeText": { "rules": [20, 23, 66, 68, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "trapText": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 89, 90, 91, 92, 93, 106, 108, 110, 112], "inclusive": false }, "ellipseText": { "rules": [20, 23, 75, 76, 77, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "text": { "rules": [20, 23, 75, 78, 79, 80, 81, 82, 85, 86, 87, 88, 92, 93, 105, 106, 107, 108, 109, 110, 111, 112, 113], "inclusive": false }, "vertex": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dir": { "rules": [20, 23, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr": { "rules": [8, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_title": { "rules": [6, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "md_string": { "rules": [18, 19, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "string": { "rules": [20, 21, 22, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40, 41, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 78, 80, 82, 83, 84, 86, 88, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, 110, 112, 114, 115, 116, 117], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.t +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 35453: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(64627); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40577); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99854); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26746); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42605); + + + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__(); +let portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = async function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + await Promise.all( + keys.map(async function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + const labelData = { width: 0, height: 0 }; + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles2.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.c)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } else { + doc.createElementNS("http://www.w3.org/2000/svg", "text"); + const { shapeSvg, bbox } = await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.l)(nodes, node, void 0, true); + labelData.width = bbox.width; + labelData.wrappingWidth = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.c)().flowchart.wrappingWidth; + labelData.height = bbox.height; + labelData.labelNode = shapeSvg.node(); + node.labelData = labelData; + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + // labelStyle: styles.labelStyle, + // shape: _shape, + layoutOptions, + labelText: vertexText, + labelData, + // labels: [{ text: vertexText }], + // rx: radius, + // ry: radius, + // class: classStr, + // style: styles.style, + // link: vertex.link, + // linkTarget: vertex.linkTarget, + // tooltip: diagObj.db.getTooltip(vertex.id) || '', + domId: diagObj.db.lookUpDomId(vertex.id), + // haveCallback: vertex.haveCallback, + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + // dir: vertex.dir, + type: vertex.type, + // props: vertex.props, + // padding: getConfig().flowchart.padding, + // boundingBox, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }) + ); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + TB: { + in: { + north: "north" + }, + out: { + south: "west", + west: "east", + east: "south" + } + }, + LR: { + in: { + west: "west" + }, + out: { + east: "south", + south: "north", + north: "east" + } + }, + RL: { + in: { + east: "east" + }, + out: { + west: "north", + north: "south", + south: "west" + } + }, + BT: { + in: { + south: "south" + }, + out: { + north: "east", + east: "west", + west: "north" + } + } + }; + portPos2.TD = portPos2.TB; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc88", graphDirection, edgeDirection, position); + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const sourceId = source; + const targetId = target; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target, sourceId, targetId }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.k)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.o)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.o)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.o)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + const labelEl = (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.f)(labelsEl, edgeData); + const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + sourceId, + targetId, + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (edgeData.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edgeData.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } +}; +const getClasses = function(text, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) { + const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path " + edgeData.classes).attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + nodeDb = {}; + portPos = {}; + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + id: "root", + layoutOptions: { + "elk.hierarchyHandling": "INCLUDE_CHILDREN", + "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", + "elk.layered.spacing.edgeNodeBetweenLayers": "30", + // 'elk.layered.mergeEdges': 'true', + "elk.direction": "DOWN" + // 'elk.ports.sameLayerEdges': true, + // 'nodePlacement.strategy': 'SIMPLE', + }, + children: [], + edges: [] + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.c)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.a)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = await addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + // width: 100, + // height: 100, + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb); + }); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.p)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + const labelCentering = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.c)().flowchart.htmlLabels ? node.labelData.width / 2 : 0; + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})` + ); + label.node().appendChild(node.labelData.labelNode); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.85; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + + .flowchart-label text { + text-anchor: middle; + } + + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + parser: _flowDb_ff651a22_js__WEBPACK_IMPORTED_MODULE_7__.p, + styles +}; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/458.7fb82cee.js b/assets/js/458.7fb82cee.js new file mode 100644 index 0000000000..aa15d56efc --- /dev/null +++ b/assets/js/458.7fb82cee.js @@ -0,0 +1,1276 @@ +"use strict"; +exports.id = 458; +exports.ids = [458]; +exports.modules = { + +/***/ 90458: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75627); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(36304); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(54628); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "period_statement": 24, "event_statement": 25, "period": 26, "event": 27, "open_directive": 28, "type_directive": 29, "arg_directive": 30, "close_directive": 31, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 26: "period", 27: "event", 28: "open_directive", 29: "type_directive", 30: "arg_directive", 31: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 11: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 12: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 13: + case 14: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 15: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 20: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "timeline"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])], + defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 28; + case 1: + this.begin("type_directive"); + return 29; + case 2: + this.popState(); + this.begin("arg_directive"); + return 15; + case 3: + this.popState(); + this.popState(); + return 31; + case 4: + return 30; + case 5: + break; + case 6: + break; + case 7: + return 11; + case 8: + break; + case 9: + break; + case 10: + return 4; + case 11: + return 17; + case 12: + this.begin("acc_title"); + return 18; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 20; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + return 23; + case 20: + return 27; + case 21: + return 26; + case 22: + return 6; + case 23: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.M; +const parseDirective = (statement, context, type) => { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.D)(globalThis, statement, context, type); +}; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + //if event is defined, then add it the events array + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent, + parseDirective +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addEvent, + addSection, + addTask, + addTaskOrg, + clear, + default: timelineDb, + getCommonDb, + getSections, + getTasks, + parseDirective +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(/<br\s*\/?>/gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf) { + const center = task.x + conf.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { + const { taskFontSize, taskFontFamily } = conf; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf) { + return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "<br>") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "<br>") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const draw = function(text, id, version, diagObj) { + var _a, _b; + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const LEFT_MARGIN = conf.leftMargin ?? 50; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("timeline", diagObj.db); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const tasksForSection = tasks2.filter((task) => task.section === section); + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 200 * Math.max(tasksForSection.length, 1) - 50, + padding: 20, + maxHeight: maxSectionHeight + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.p)( + void 0, + svg, + ((_a = conf.timeline) == null ? void 0 : _a.padding) ?? 50, + ((_b = conf.timeline) == null ? void 0 : _b.useMaxWidth) ?? false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + var _a; + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); + const taskHeight = node.height; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let lineLength = maxTaskHeight; + masterY += 100; + lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf: () => { + }, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/46765cf2.b5c45c99.js b/assets/js/46765cf2.b5c45c99.js new file mode 100644 index 0000000000..bb77fe1fa5 --- /dev/null +++ b/assets/js/46765cf2.b5c45c99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36505],{32907:e=>{e.exports=JSON.parse('{"name":"changelog-plugin","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/46d67303.4b2295ec.js b/assets/js/46d67303.4b2295ec.js new file mode 100644 index 0000000000..e2bd3196c3 --- /dev/null +++ b/assets/js/46d67303.4b2295ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95740],{42031:a=>{a.exports=JSON.parse('{"tag":{"label":"adoption","permalink":"/blog/tags/adoption","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/adoption","page":1,"postsPerPage":5,"totalPages":1,"totalCount":2,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/46f5ed35.7fd6e169.js b/assets/js/46f5ed35.7fd6e169.js new file mode 100644 index 0000000000..9a3959171e --- /dev/null +++ b/assets/js/46f5ed35.7fd6e169.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6292],{21831:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png"},41363:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var i=s(24246),r=s(71670);const t={sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},o="\ud83d\udce6 logger",l={id:"api/misc/logger/logger",title:"\ud83d\udce6 logger",description:"An encapsulated logger for semantically formatting console messages.",source:"@site/docs/api/misc/logger/logger.mdx",sourceDirName:"api/misc/logger",slug:"/api/misc/@docusaurus/logger",permalink:"/docs/api/misc/@docusaurus/logger",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/misc/logger/logger.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/misc/@docusaurus/logger"},sidebar:"api",previous:{title:"string-literal-i18n-messages",permalink:"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages"}},d={},c=[{value:"APIs",id:"apis",level:2},{value:"Using the template literal tag",id:"using-the-template-literal-tag",level:3}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"-logger",children:"\ud83d\udce6 logger"}),"\n",(0,i.jsx)(n.p,{children:"An encapsulated logger for semantically formatting console messages."}),"\n",(0,i.jsx)(n.p,{children:"Authors of packages in the Docusaurus ecosystem are encouraged to use this package to provide unified log formats."}),"\n",(0,i.jsx)(n.h2,{id:"apis",children:"APIs"}),"\n",(0,i.jsxs)(n.p,{children:["It exports a single object as default export: ",(0,i.jsx)(n.code,{children:"logger"}),". ",(0,i.jsx)(n.code,{children:"logger"})," has the following properties:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Some useful colors.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"red"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"yellow"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"green"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"bold"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"dim"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Formatters. These functions all have the signature ",(0,i.jsx)(n.code,{children:"(msg: unknown) => string"}),". Note that their implementations are not guaranteed. You should only care about their semantics.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": formats a file path."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url"}),": formats a URL."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),": formats an identifier."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code"}),": formats a code snippet."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue"}),": subdues the text."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"num"}),": formats a number."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"interpolate"})," function. It is a template literal tag. The syntax can be found below."]}),"\n",(0,i.jsxs)(n.li,{children:["Logging functions. All logging functions can both be used as normal functions (similar to the ",(0,i.jsx)(n.code,{children:"console.log"})," family, but only accepts one parameter) or template literal tags.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"info"}),": prints information."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"warn"}),": prints a warning that should be paid attention to."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"error"}),": prints an error (not necessarily halting the program) that signals significant problems."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"success"}),": prints a success message."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"report"})," function. It takes a ",(0,i.jsx)(n.code,{children:"ReportingSeverity"})," value (",(0,i.jsx)(n.code,{children:"ignore"}),", ",(0,i.jsx)(n.code,{children:"log"}),", ",(0,i.jsx)(n.code,{children:"warn"}),", ",(0,i.jsx)(n.code,{children:"throw"}),") and reports a message according to the severity."]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["A word on the ",(0,i.jsx)(n.code,{children:"error"})," formatter"]}),(0,i.jsxs)(n.p,{children:["Beware that an ",(0,i.jsx)(n.code,{children:"error"})," message, even when it doesn't hang the program, is likely going to cause confusion. When users inspect logs and find an ",(0,i.jsx)(n.code,{children:"[ERROR]"}),", even when the build succeeds, they will assume something is going wrong. Use it sparingly."]}),(0,i.jsxs)(n.p,{children:["Docusaurus only uses ",(0,i.jsx)(n.code,{children:"logger.error"})," when printing messages immediately before throwing an error, or when user has set the reporting severity of ",(0,i.jsx)(n.code,{children:"onBrokenLink"}),", etc. to ",(0,i.jsx)(n.code,{children:'"error"'}),"."]}),(0,i.jsxs)(n.p,{children:["In addition, ",(0,i.jsx)(n.code,{children:"warn"})," and ",(0,i.jsx)(n.code,{children:"error"})," will color the ",(0,i.jsx)(n.strong,{children:"entire"})," message for better attention. If you are printing large blocks of help text about an error, better use ",(0,i.jsx)(n.code,{children:"logger.info"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-template-literal-tag",children:"Using the template literal tag"}),"\n",(0,i.jsxs)(n.p,{children:["The template literal tag evaluates the template and expressions embedded. ",(0,i.jsx)(n.code,{children:"interpolate"})," returns a new string, while other logging functions prints it. Below is a typical usage:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"import logger from '@docusaurus/logger';\n\nlogger.info`Hello name=${name}! You have number=${money} dollars. Here are the ${\n items.length > 1 ? 'items' : 'item'\n} on the shelf: ${items}\nTo buy anything, enter code=${'buy x'} where code=${'x'} is the item's name; to quit, press code=${'Ctrl + C'}.`;\n"})}),"\n",(0,i.jsxs)(n.p,{children:["An embedded expression is optionally preceded by a flag in the form ",(0,i.jsx)(n.code,{children:"[a-z]+="})," (a few lowercase letters, followed by an equals sign, directly preceding the embedded expression). If the expression is not preceded by any flag, it's printed out as-is. Otherwise, it's formatted with one of the formatters:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path="}),": ",(0,i.jsx)(n.code,{children:"path"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url="}),": ",(0,i.jsx)(n.code,{children:"url"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name="}),": ",(0,i.jsx)(n.code,{children:"name"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"code="}),": ",(0,i.jsx)(n.code,{children:"code"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"subdue="}),": ",(0,i.jsx)(n.code,{children:"subdue"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number="}),": ",(0,i.jsx)(n.code,{children:"num"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If the expression is an array, it's formatted by ",(0,i.jsx)(n.code,{children:"`\\n- ${array.join('\\n- ')}\\n`"})," (note it automatically gets a leading line end). Each member is formatted by itself and the bullet is not formatted. So you would see the above message printed as:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Some text output in the terminal, containing array, code, name, and number formatting",src:s(21831).Z+"",width:"1234",height:"150"})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var i=s(27378);const r={},t=i.createContext(r);function o(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/47065.59a92a95.js b/assets/js/47065.59a92a95.js new file mode 100644 index 0000000000..8d348b393b --- /dev/null +++ b/assets/js/47065.59a92a95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47065],{47065:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(99854),n=r(63294),a=(r(27693),r(7608),r(31699),function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,4],r=[1,7],i=[1,5],n=[1,9],a=[1,6],c=[2,6],s=[1,16],o=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],l=[8,14,20,22,24,25,27,29,32,37,40],h=[8,13,14,20,22,24,25,27,29,32,37,40],m=[1,26],u=[6,8,14,50,55],y=[8,14,55],p=[1,53],g=[1,52],b=[8,14,30,33,35,38,55],d=[1,67],f=[1,68],k=[1,69],$=[8,14,33,35,42,55],_={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(t,e,r,i,n,a,c){var s=a.length-1;switch(n){case 3:return a[s];case 4:return a[s-1];case 5:return i.setDirection(a[s-3]),a[s-1];case 7:i.setOptions(a[s-1]),this.$=a[s];break;case 8:a[s-1]+=a[s],this.$=a[s-1];break;case 10:this.$=[];break;case 11:a[s-1].push(a[s]),this.$=a[s-1];break;case 12:this.$=a[s-1];break;case 17:this.$=a[s].trim(),i.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),i.setAccDescription(this.$);break;case 20:i.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 22:i.checkout(a[s]);break;case 23:i.branch(a[s]);break;case 24:i.branch(a[s-2],a[s]);break;case 25:i.cherryPick(a[s],"",void 0);break;case 26:i.cherryPick(a[s-2],"",a[s]);break;case 27:case 29:i.cherryPick(a[s-2],"","");break;case 28:i.cherryPick(a[s],"",a[s-2]);break;case 30:i.merge(a[s],"","","");break;case 31:i.merge(a[s-2],a[s],"","");break;case 32:i.merge(a[s-2],"",a[s],"");break;case 33:i.merge(a[s-2],"","",a[s]);break;case 34:i.merge(a[s-4],a[s],"",a[s-2]);break;case 35:i.merge(a[s-4],"",a[s],a[s-2]);break;case 36:i.merge(a[s-4],"",a[s-2],a[s]);break;case 37:i.merge(a[s-4],a[s-2],a[s],"");break;case 38:i.merge(a[s-4],a[s-2],"",a[s]);break;case 39:i.merge(a[s-4],a[s],a[s-2],"");break;case 40:i.merge(a[s-6],a[s-4],a[s-2],a[s]);break;case 41:i.merge(a[s-6],a[s],a[s-4],a[s-2]);break;case 42:i.merge(a[s-6],a[s-4],a[s],a[s-2]);break;case 43:i.merge(a[s-6],a[s-2],a[s-4],a[s]);break;case 44:i.merge(a[s-6],a[s],a[s-2],a[s-4]);break;case 45:i.merge(a[s-6],a[s-2],a[s],a[s-4]);break;case 46:i.commit(a[s]);break;case 47:i.commit("","",i.commitType.NORMAL,a[s]);break;case 48:i.commit("","",a[s],"");break;case 49:i.commit("","",a[s],a[s-2]);break;case 50:i.commit("","",a[s-2],a[s]);break;case 51:i.commit("",a[s],i.commitType.NORMAL,"");break;case 52:i.commit("",a[s-2],i.commitType.NORMAL,a[s]);break;case 53:i.commit("",a[s],i.commitType.NORMAL,a[s-2]);break;case 54:i.commit("",a[s-2],a[s],"");break;case 55:i.commit("",a[s],a[s-2],"");break;case 56:i.commit("",a[s-4],a[s-2],a[s]);break;case 57:i.commit("",a[s-4],a[s],a[s-2]);break;case 58:i.commit("",a[s-2],a[s-4],a[s]);break;case 59:i.commit("",a[s],a[s-4],a[s-2]);break;case 60:i.commit("",a[s],a[s-2],a[s-4]);break;case 61:i.commit("",a[s-2],a[s],a[s-4]);break;case 62:i.commit(a[s],"",i.commitType.NORMAL,"");break;case 63:i.commit(a[s],"",i.commitType.NORMAL,a[s-2]);break;case 64:i.commit(a[s-2],"",i.commitType.NORMAL,a[s]);break;case 65:i.commit(a[s-2],"",a[s],"");break;case 66:i.commit(a[s],"",a[s-2],"");break;case 67:i.commit(a[s],a[s-2],i.commitType.NORMAL,"");break;case 68:i.commit(a[s-2],a[s],i.commitType.NORMAL,"");break;case 69:i.commit(a[s-4],"",a[s-2],a[s]);break;case 70:i.commit(a[s-4],"",a[s],a[s-2]);break;case 71:i.commit(a[s-2],"",a[s-4],a[s]);break;case 72:i.commit(a[s],"",a[s-4],a[s-2]);break;case 73:i.commit(a[s],"",a[s-2],a[s-4]);break;case 74:i.commit(a[s-2],"",a[s],a[s-4]);break;case 75:i.commit(a[s-4],a[s],a[s-2],"");break;case 76:i.commit(a[s-4],a[s-2],a[s],"");break;case 77:i.commit(a[s-2],a[s],a[s-4],"");break;case 78:i.commit(a[s],a[s-2],a[s-4],"");break;case 79:i.commit(a[s],a[s-4],a[s-2],"");break;case 80:i.commit(a[s-2],a[s-4],a[s],"");break;case 81:i.commit(a[s-4],a[s],i.commitType.NORMAL,a[s-2]);break;case 82:i.commit(a[s-4],a[s-2],i.commitType.NORMAL,a[s]);break;case 83:i.commit(a[s-2],a[s],i.commitType.NORMAL,a[s-4]);break;case 84:i.commit(a[s],a[s-2],i.commitType.NORMAL,a[s-4]);break;case 85:i.commit(a[s],a[s-4],i.commitType.NORMAL,a[s-2]);break;case 86:i.commit(a[s-2],a[s-4],i.commitType.NORMAL,a[s]);break;case 87:i.commit(a[s-6],a[s-4],a[s-2],a[s]);break;case 88:i.commit(a[s-6],a[s-4],a[s],a[s-2]);break;case 89:i.commit(a[s-6],a[s-2],a[s-4],a[s]);break;case 90:i.commit(a[s-6],a[s],a[s-4],a[s-2]);break;case 91:i.commit(a[s-6],a[s-2],a[s],a[s-4]);break;case 92:i.commit(a[s-6],a[s],a[s-2],a[s-4]);break;case 93:i.commit(a[s-4],a[s-6],a[s-2],a[s]);break;case 94:i.commit(a[s-4],a[s-6],a[s],a[s-2]);break;case 95:i.commit(a[s-2],a[s-6],a[s-4],a[s]);break;case 96:i.commit(a[s],a[s-6],a[s-4],a[s-2]);break;case 97:i.commit(a[s-2],a[s-6],a[s],a[s-4]);break;case 98:i.commit(a[s],a[s-6],a[s-2],a[s-4]);break;case 99:i.commit(a[s],a[s-4],a[s-2],a[s-6]);break;case 100:i.commit(a[s-2],a[s-4],a[s],a[s-6]);break;case 101:i.commit(a[s],a[s-2],a[s-4],a[s-6]);break;case 102:i.commit(a[s-2],a[s],a[s-4],a[s-6]);break;case 103:i.commit(a[s-4],a[s-2],a[s],a[s-6]);break;case 104:i.commit(a[s-4],a[s],a[s-2],a[s-6]);break;case 105:i.commit(a[s-2],a[s-4],a[s-6],a[s]);break;case 106:i.commit(a[s],a[s-4],a[s-6],a[s-2]);break;case 107:i.commit(a[s-2],a[s],a[s-6],a[s-4]);break;case 108:i.commit(a[s],a[s-2],a[s-6],a[s-4]);break;case 109:i.commit(a[s-4],a[s-2],a[s-6],a[s]);break;case 110:i.commit(a[s-4],a[s],a[s-6],a[s-2]);break;case 111:this.$="";break;case 112:this.$=a[s];break;case 113:this.$=i.commitType.NORMAL;break;case 114:this.$=i.commitType.REVERSE;break;case 115:this.$=i.commitType.HIGHLIGHT;break;case 118:i.parseDirective("%%{","open_directive");break;case 119:i.parseDirective(a[s],"type_directive");break;case 120:a[s]=a[s].trim().replace(/'/g,'"'),i.parseDirective(a[s],"arg_directive");break;case 121:i.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:e,8:r,14:i,46:8,50:n,55:a},{1:[3]},{3:10,4:2,5:3,6:e,8:r,14:i,46:8,50:n,55:a},{3:11,4:2,5:3,6:e,8:r,14:i,46:8,50:n,55:a},{7:12,8:c,9:[1,13],10:[1,14],11:15,14:s},t(o,[2,124]),t(o,[2,125]),t(o,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:c,11:15,14:s},{9:[1,21]},t(l,[2,10],{12:22,13:[1,23]}),t(h,[2,9]),{9:[1,25],48:24,53:m},t([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:c,11:15,14:s},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},t(h,[2,8]),t(u,[2,116]),{49:45,52:[1,46]},t(u,[2,121]),{1:[2,4]},{8:[1,47]},t(l,[2,11]),{4:48,8:r,14:i,55:a},t(l,[2,13]),t(y,[2,14]),t(y,[2,15]),t(y,[2,16]),{21:[1,49]},{23:[1,50]},t(y,[2,19]),t(y,[2,20]),t(y,[2,21]),{28:51,34:p,54:g},t(y,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:p,54:g},{33:[1,61],35:[1,62]},{28:63,34:p,54:g},{48:64,53:m},{53:[2,120]},{1:[2,5]},t(l,[2,12]),t(y,[2,17]),t(y,[2,18]),t(y,[2,22]),t(b,[2,122]),t(b,[2,123]),t(y,[2,46]),{34:[1,65]},{39:66,43:d,44:f,45:k},{34:[1,70]},{34:[1,71]},t(y,[2,112]),t(y,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},t(y,[2,23],{30:[1,78]}),t(u,[2,117]),t(y,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),t(y,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),t($,[2,113]),t($,[2,114]),t($,[2,115]),t(y,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),t(y,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:d,44:f,45:k},{34:[1,93]},t(y,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:d,44:f,45:k},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:d,44:f,45:k},{34:[1,106]},{34:[1,107]},{39:108,43:d,44:f,45:k},{34:[1,109]},t(y,[2,31],{35:[1,111],38:[1,110]}),t(y,[2,32],{33:[1,113],35:[1,112]}),t(y,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},t(y,[2,24]),t(y,[2,49],{33:[1,120],42:[1,121]}),t(y,[2,53],{38:[1,122],42:[1,123]}),t(y,[2,63],{33:[1,125],38:[1,124]}),t(y,[2,50],{33:[1,126],42:[1,127]}),t(y,[2,55],{35:[1,128],42:[1,129]}),t(y,[2,66],{33:[1,131],35:[1,130]}),t(y,[2,52],{38:[1,132],42:[1,133]}),t(y,[2,54],{35:[1,134],42:[1,135]}),t(y,[2,67],{35:[1,137],38:[1,136]}),t(y,[2,64],{33:[1,139],38:[1,138]}),t(y,[2,65],{33:[1,141],35:[1,140]}),t(y,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:d,44:f,45:k},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:d,44:f,45:k},t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(y,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:d,44:f,45:k},{34:[1,153]},{39:154,43:d,44:f,45:k},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:d,44:f,45:k},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:d,44:f,45:k},{34:[1,167]},{39:168,43:d,44:f,45:k},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:d,44:f,45:k},{34:[1,173]},t(y,[2,37],{35:[1,174]}),t(y,[2,38],{38:[1,175]}),t(y,[2,36],{33:[1,176]}),t(y,[2,39],{35:[1,177]}),t(y,[2,34],{38:[1,178]}),t(y,[2,35],{33:[1,179]}),t(y,[2,60],{42:[1,180]}),t(y,[2,73],{33:[1,181]}),t(y,[2,61],{42:[1,182]}),t(y,[2,84],{38:[1,183]}),t(y,[2,74],{33:[1,184]}),t(y,[2,83],{38:[1,185]}),t(y,[2,59],{42:[1,186]}),t(y,[2,72],{33:[1,187]}),t(y,[2,58],{42:[1,188]}),t(y,[2,78],{35:[1,189]}),t(y,[2,71],{33:[1,190]}),t(y,[2,77],{35:[1,191]}),t(y,[2,57],{42:[1,192]}),t(y,[2,85],{38:[1,193]}),t(y,[2,56],{42:[1,194]}),t(y,[2,79],{35:[1,195]}),t(y,[2,80],{35:[1,196]}),t(y,[2,86],{38:[1,197]}),t(y,[2,70],{33:[1,198]}),t(y,[2,81],{38:[1,199]}),t(y,[2,69],{33:[1,200]}),t(y,[2,75],{35:[1,201]}),t(y,[2,76],{35:[1,202]}),t(y,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:d,44:f,45:k},{34:[1,206]},{34:[1,207]},{39:208,43:d,44:f,45:k},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:d,44:f,45:k},{34:[1,214]},{39:215,43:d,44:f,45:k},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:d,44:f,45:k},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:d,44:f,45:k},{34:[1,228]},{39:229,43:d,44:f,45:k},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:d,44:f,45:k},t(y,[2,40]),t(y,[2,42]),t(y,[2,41]),t(y,[2,43]),t(y,[2,45]),t(y,[2,44]),t(y,[2,101]),t(y,[2,102]),t(y,[2,99]),t(y,[2,100]),t(y,[2,104]),t(y,[2,103]),t(y,[2,108]),t(y,[2,107]),t(y,[2,106]),t(y,[2,105]),t(y,[2,110]),t(y,[2,109]),t(y,[2,98]),t(y,[2,97]),t(y,[2,96]),t(y,[2,95]),t(y,[2,93]),t(y,[2,94]),t(y,[2,92]),t(y,[2,91]),t(y,[2,90]),t(y,[2,89]),t(y,[2,87]),t(y,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],n=[null],a=[],c=this.table,s="",o=0,l=0,h=a.slice.call(arguments,1),m=Object.create(this.lexer),u={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(u.yy[y]=this.yy[y]);m.setInput(t,u.yy),u.yy.lexer=m,u.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var p=m.yylloc;a.push(p);var g=m.options&&m.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,d,f,k,$,_,x,v,w,T={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==b&&(w=void 0,"number"!=typeof(w=i.pop()||m.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),b=w),f=c[d]&&c[d][b]),void 0===f||!f.length||!f[0]){var E="";for($ in v=[],c[d])this.terminals_[$]&&$>2&&v.push("'"+this.terminals_[$]+"'");E=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(E,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:p,expected:v})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+b);switch(f[0]){case 1:r.push(b),n.push(m.yytext),a.push(m.yylloc),r.push(f[1]),b=null,l=m.yyleng,s=m.yytext,o=m.yylineno,p=m.yylloc;break;case 2:if(_=this.productions_[f[1]][1],T.$=n[n.length-_],T._$={first_line:a[a.length-(_||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(_||1)].first_column,last_column:a[a.length-1].last_column},g&&(T._$.range=[a[a.length-(_||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(T,[s,l,o,u.yy,f[1],n,a].concat(h))))return k;_&&(r=r.slice(0,-1*_*2),n=n.slice(0,-1*_),a=a.slice(0,-1*_)),r.push(this.productions_[f[1]][0]),n.push(T.$),a.push(T._$),x=c[r[r.length-2]][r[r.length-1]],r.push(x);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;a<n.length;a++)if((r=this._input.match(this.rules[n[a]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,n[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 34:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}};function v(){this.yy={}}return _.lexer=x,v.prototype=_,_.Parser=v,new v}());a.parser=a;const c=a;let s=(0,i.c)().gitGraph.mainBranchName,o=(0,i.c)().gitGraph.mainBranchOrder,l={},h=null,m={};m[s]={name:s,order:o};let u={};u[s]=h;let y=s,p="LR",g=0;function b(){return(0,i.y)({length:7})}let d={};const f=function(t){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0===u[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{y=t;const e=u[y];h=l[e]}};function k(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function $(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let r="";t.forEach((function(t){r+=t===e?"\t*":"\t|"}));const n=[r,e.id,e.seq];for(let i in u)u[i]===e.id&&n.push(i);if(i.l.debug(n.join(" ")),e.parents&&2==e.parents.length){const r=l[e.parents[0]];k(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];k(t,e,r)}}$(t=function(t,e){const r=Object.create(null);return t.reduce(((t,i)=>{const n=e(i);return r[n]||(r[n]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const _=function(){const t=Object.keys(l).map((function(t){return l[t]}));return t.forEach((function(t){i.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},x={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},v={parseDirective:function(t,e,r){i.m.parseDirective(this,t,e,r)},getConfig:()=>(0,i.c)().gitGraph,setDirection:function(t){p=t},setOptions:function(t){i.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{d=JSON.parse(t)}catch(e){i.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return d},commit:function(t,e,r,n){i.l.debug("Entering commit:",t,e,r,n),e=i.e.sanitizeText(e,(0,i.c)()),t=i.e.sanitizeText(t,(0,i.c)()),n=i.e.sanitizeText(n,(0,i.c)());const a={id:e||g+"-"+b(),message:t,seq:g++,type:r||x.NORMAL,tag:n||"",parents:null==h?[]:[h.id],branch:y};h=a,l[a.id]=a,u[y]=a.id,i.l.debug("in pushCommit "+a.id)},branch:function(t,e){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0!==u[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}u[t]=null!=h?h.id:null,m[t]={name:t,order:e?parseInt(e,10):null},f(t),i.l.debug("in createBranch")},merge:function(t,e,r,n){t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)());const a=l[u[y]],c=l[u[t]];if(y===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===a||!a){let e=new Error('Incorrect usage of "merge". Current branch ('+y+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===u[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===c||!c){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(a===c){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==l[e]){let i=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw i.hash={text:"merge "+t+e+r+n,token:"merge "+t+e+r+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+n]},i}const s={id:e||g+"-"+b(),message:"merged branch "+t+" into "+y,seq:g++,parents:[null==h?null:h.id,u[t]],branch:y,type:x.MERGE,customType:r,customId:!!e,tag:n||""};h=s,l[s.id]=s,u[y]=s.id,i.l.debug(u),i.l.debug("in mergeBranch")},cherryPick:function(t,e,r){if(i.l.debug("Entering cherryPick:",t,e,r),t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)()),r=i.e.sanitizeText(r,(0,i.c)()),!t||void 0===l[t]){let r=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}let n=l[t],a=n.branch;if(n.type===x.MERGE){let r=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}if(!e||void 0===l[e]){if(a===y){let r=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const c=l[u[y]];if(void 0===c||!c){let r=new Error('Incorrect usage of "cherry-pick". Current branch ('+y+")has no commits");throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const s={id:g+"-"+b(),message:"cherry-picked "+n+" into "+y,seq:g++,parents:[null==h?null:h.id,n.id],branch:y,type:x.CHERRY_PICK,tag:r??"cherry-pick:"+n.id};h=s,l[s.id]=s,u[y]=s.id,i.l.debug(u),i.l.debug("in cherryPick")}},checkout:f,prettyPrint:function(){i.l.debug(l);$([_()[0]])},clear:function(){l={},h=null;let t=(0,i.c)().gitGraph.mainBranchName,e=(0,i.c)().gitGraph.mainBranchOrder;u={},u[t]=null,m={},m[t]={name:t,order:e},y=t,g=0,(0,i.v)()},getBranchesAsObjArray:function(){return Object.values(m).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})))},getBranches:function(){return u},getCommits:function(){return l},getCommitsArray:_,getCurrentBranch:function(){return y},getDirection:function(){return p},getHead:function(){return h},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,setDiagramTitle:i.r,getDiagramTitle:i.t,commitType:x};let w={};const T=0,E=1,L=2,M=3,A=4;let I={},R={},O=[],C=0,S="LR";const B=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];r="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const i of r){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=i.trim(),e.appendChild(t)}return e},P=(t,e,r)=>{const n=(0,i.z)().gitGraph,a=t.append("g").attr("class","commit-bullets"),c=t.append("g").attr("class","commit-labels");let s=0;"TB"===S&&(s=30);Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)).forEach((t=>{const i=e[t],o="TB"===S?s+10:I[i.branch].pos,l="TB"===S?I[i.branch].pos:s+10;if(r){let t,e=void 0!==i.customType&&""!==i.customType?i.customType:i.type;switch(e){case T:t="commit-normal";break;case E:t="commit-reverse";break;case L:t="commit-highlight";break;case M:t="commit-merge";break;case A:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===L){const e=a.append("rect");e.attr("x",l-10),e.attr("y",o-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${I[i.branch].index%8} ${t}-outer`),a.append("rect").attr("x",l-6).attr("y",o-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${I[i.branch].index%8} ${t}-inner`)}else if(e===A)a.append("circle").attr("cx",l).attr("cy",o).attr("r",10).attr("class",`commit ${i.id} ${t}`),a.append("circle").attr("cx",l-3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),a.append("circle").attr("cx",l+3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),a.append("line").attr("x1",l+3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),a.append("line").attr("x1",l-3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=a.append("circle");if(r.attr("cx",l),r.attr("cy",o),r.attr("r",i.type===M?9:10),r.attr("class",`commit ${i.id} commit${I[i.branch].index%8}`),e===M){const e=a.append("circle");e.attr("cx",l),e.attr("cy",o),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}if(e===E){a.append("path").attr("d",`M ${l-5},${o-5}L${l+5},${o+5}M${l-5},${o+5}L${l+5},${o-5}`).attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:l,y:s+10}:{x:s+10,y:o},r){const t=4,e=2;if(i.type!==A&&(i.customId&&i.type===M||i.type!==M)&&n.showCommitLabel){const r=c.append("g"),a=r.insert("rect").attr("class","commit-label-bkg"),h=r.append("text").attr("x",s).attr("y",o+25).attr("class","commit-label").text(i.id);let m=h.node().getBBox();if(a.attr("x",s+10-m.width/2-e).attr("y",o+13.5).attr("width",m.width+2*e).attr("height",m.height+2*e),"TB"===S&&(a.attr("x",l-(m.width+4*t+5)).attr("y",o-12),h.attr("x",l-(m.width+4*t)).attr("y",o+m.height-12)),"TB"!==S&&h.attr("x",s+10-m.width/2),n.rotateCommitLabel)if("TB"===S)h.attr("transform","rotate(-45, "+l+", "+o+")"),a.attr("transform","rotate(-45, "+l+", "+o+")");else{let t=-7.5-(m.width+10)/25*9.5,e=10+m.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+o+")")}}if(i.tag){const r=c.insert("polygon"),n=c.append("circle"),a=c.append("text").attr("y",o-16).attr("class","tag-label").text(i.tag);let h=a.node().getBBox();a.attr("x",s+10-h.width/2);const m=h.height/2,u=o-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-h.width/2-t/2},${u+e}\n ${s-h.width/2-t/2},${u-e}\n ${s+10-h.width/2-t},${u-m-e}\n ${s+10+h.width/2+t},${u-m-e}\n ${s+10+h.width/2+t},${u+m+e}\n ${s+10-h.width/2-t},${u+m+e}`),n.attr("cx",s-h.width/2+t/2).attr("cy",u).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${l},${s+e}\n ${l},${s-e}\n ${l+10},${s-m-e}\n ${l+10+h.width+t},${s-m-e}\n ${l+10+h.width+t},${s+m+e}\n ${l+10},${s+m+e}`).attr("transform","translate(12,12) rotate(45, "+l+","+s+")"),n.attr("cx",l+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+l+","+s+")"),a.attr("x",l+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+l+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r=0)=>{const i=t+Math.abs(t-e)/2;if(r>5)return i;if(O.every((t=>Math.abs(t-i)>=10)))return O.push(i),i;const n=Math.abs(t-e);return N(t,e-n/5,r+1)},G=(t,e,r,i)=>{const n=R[e.id],a=R[r.id],c=((t,e,r)=>Object.keys(r).filter((i=>r[i].branch===e.branch&&r[i].seq>t.seq&&r[i].seq<e.seq)).length>0)(e,r,i);let s,o="",l="",h=0,m=0,u=I[r.branch].index;if(c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10,u=I[r.branch].index;const t=n.y<a.y?N(n.y,a.y):N(a.y,n.y),e=n.x<a.x?N(n.x,a.x):N(a.x,n.x);s="TB"===S?n.x<a.x?`M ${n.x} ${n.y} L ${e-h} ${n.y} ${l} ${e} ${n.y+m} L ${e} ${a.y-h} ${o} ${e+m} ${a.y} L ${a.x} ${a.y}`:`M ${n.x} ${n.y} L ${e+h} ${n.y} ${o} ${e} ${n.y+m} L ${e} ${a.y-h} ${l} ${e-m} ${a.y} L ${a.x} ${a.y}`:n.y<a.y?`M ${n.x} ${n.y} L ${n.x} ${t-h} ${o} ${n.x+m} ${t} L ${a.x-h} ${t} ${l} ${a.x} ${t+m} L ${a.x} ${a.y}`:`M ${n.x} ${n.y} L ${n.x} ${t+h} ${l} ${n.x+m} ${t} L ${a.x-h} ${t} ${o} ${a.x} ${t-m} L ${a.x} ${a.y}`}else"TB"===S?(n.x<a.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${a.x-h} ${n.y} ${l} ${a.x} ${n.y+m} L ${a.x} ${a.y}`),n.x>a.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${l} ${n.x-m} ${a.y} L ${a.x} ${a.y}`),n.x===a.x&&(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x+h} ${n.y} ${o} ${n.x+m} ${a.y+h} L ${a.x} ${a.y}`)):(n.y<a.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${o} ${n.x+m} ${a.y} L ${a.x} ${a.y}`),n.y>a.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${a.x-h} ${n.y} ${o} ${a.x} ${n.y-m} L ${a.x} ${a.y}`),n.y===a.y&&(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${o} ${n.x+m} ${a.y} L ${a.x} ${a.y}`));t.append("path").attr("d",s).attr("class","arrow arrow"+u%8)},D={parser:c,db:v,renderer:{draw:function(t,e,r,a){I={},R={},w={},C=0,O=[],S="LR";const c=(0,i.z)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),w=a.db.getCommits();const o=a.db.getBranchesAsObjArray();S=a.db.getDirection();const l=(0,n.Ys)(`[id="${e}"]`);let h=0;o.forEach(((t,e)=>{const r=B(t.name),i=l.append("g"),n=i.insert("g").attr("class","branchLabel"),a=n.insert("g").attr("class","label branch-label");a.node().appendChild(r);let c=r.getBBox();I[t.name]={pos:h,index:e},h+=50+(s.rotateCommitLabel?40:0)+("TB"===S?c.width/2:0),a.remove(),n.remove(),i.remove()})),P(l,w,!1),s.showBranches&&((t,e)=>{const r=(0,i.z)().gitGraph,n=t.append("g");e.forEach(((t,e)=>{const i=e%8,a=I[t.name].pos,c=n.append("line");c.attr("x1",0),c.attr("y1",a),c.attr("x2",C),c.attr("y2",a),c.attr("class","branch branch"+i),"TB"===S&&(c.attr("y1",30),c.attr("x1",a),c.attr("y2",C),c.attr("x2",a)),O.push(a);let s=t.name;const o=B(s),l=n.insert("rect"),h=n.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);h.node().appendChild(o);let m=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(!0===r.rotateCommitLabel?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),h.attr("transform","translate("+(-m.width-14-(!0===r.rotateCommitLabel?30:0))+", "+(a-m.height/2-1)+")"),"TB"===S&&(l.attr("x",a-m.width/2-10).attr("y",0),h.attr("transform","translate("+(a-m.width/2-5)+", 0)")),"TB"!==S&&l.attr("transform","translate(-19, "+(a-m.height/2)+")")}))})(l,o),((t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{G(r,e[t],i,e)}))}))})(l,w),P(l,w,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,a.db.getDiagramTitle()),(0,i.A)(void 0,l,s.diagramPadding,s.useMaxWidth??c.useMaxWidth)}},styles:t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/474.1f0cc1b6.js b/assets/js/474.1f0cc1b6.js new file mode 100644 index 0000000000..167268bc63 --- /dev/null +++ b/assets/js/474.1f0cc1b6.js @@ -0,0 +1,28550 @@ +"use strict"; +exports.id = 474; +exports.ids = [474]; +exports.modules = { + +/***/ 96157: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(36715); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 36715: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22701); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(78246); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 76576: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 40577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51568); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(97312); + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 64627: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 56], $Vf = [1, 55], $Vg = [1, 36], $Vh = [1, 37], $Vi = [1, 38], $Vj = [1, 39], $Vk = [1, 40], $Vl = [1, 51], $Vm = [1, 53], $Vn = [1, 49], $Vo = [1, 54], $Vp = [1, 50], $Vq = [1, 57], $Vr = [1, 52], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 41], $Vv = [1, 42], $Vw = [1, 43], $Vx = [1, 44], $Vy = [1, 62], $Vz = [1, 67], $VA = [1, 20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VB = [1, 71], $VC = [1, 70], $VD = [1, 72], $VE = [20, 21, 23, 84, 86], $VF = [1, 98], $VG = [1, 103], $VH = [1, 102], $VI = [1, 99], $VJ = [1, 95], $VK = [1, 101], $VL = [1, 97], $VM = [1, 104], $VN = [1, 100], $VO = [1, 105], $VP = [1, 96], $VQ = [20, 21, 22, 23, 84, 86], $VR = [20, 21, 22, 23, 55, 84, 86], $VS = [20, 21, 22, 23, 40, 53, 55, 57, 59, 61, 63, 65, 67, 69, 72, 74, 76, 77, 79, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VT = [20, 21, 23], $VU = [20, 21, 23, 53, 69, 84, 86, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VV = [1, 12, 20, 21, 22, 23, 24, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $VW = [53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], $VX = [1, 134], $VY = [1, 133], $VZ = [1, 141], $V_ = [1, 155], $V$ = [1, 156], $V01 = [1, 157], $V11 = [1, 158], $V21 = [1, 143], $V31 = [1, 145], $V41 = [1, 149], $V51 = [1, 150], $V61 = [1, 151], $V71 = [1, 152], $V81 = [1, 153], $V91 = [1, 154], $Va1 = [1, 159], $Vb1 = [1, 160], $Vc1 = [1, 139], $Vd1 = [1, 140], $Ve1 = [1, 147], $Vf1 = [1, 142], $Vg1 = [1, 146], $Vh1 = [1, 144], $Vi1 = [20, 21, 22, 23, 38, 43, 45, 47, 49, 53, 69, 92, 93, 94, 95, 96, 97, 110, 113, 114, 117, 119, 122, 123, 124, 129, 130, 131, 132], $Vj1 = [1, 162], $Vk1 = [20, 21, 22, 23, 26, 53, 69, 97, 113, 114, 117, 119, 122, 123, 124], $Vl1 = [1, 182], $Vm1 = [1, 178], $Vn1 = [1, 179], $Vo1 = [1, 183], $Vp1 = [1, 180], $Vq1 = [1, 181], $Vr1 = [12, 21, 22, 24], $Vs1 = [86, 124, 127], $Vt1 = [20, 21, 22, 23, 24, 26, 38, 40, 43, 53, 69, 84, 92, 93, 94, 95, 96, 97, 98, 113, 117, 119, 122, 123, 124], $Vu1 = [22, 114], $Vv1 = [42, 58, 60, 62, 64, 66, 71, 73, 75, 76, 78, 80, 124, 125, 126], $Vw1 = [1, 250], $Vx1 = [1, 248], $Vy1 = [1, 252], $Vz1 = [1, 246], $VA1 = [1, 247], $VB1 = [1, 249], $VC1 = [1, 251], $VD1 = [1, 253], $VE1 = [1, 270], $VF1 = [20, 21, 23, 114], $VG1 = [20, 21, 22, 23, 69, 92, 113, 114, 117, 118, 119, 120]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "textNoTags": 39, "SQS": 40, "text": 41, "SQE": 42, "end": 43, "direction": 44, "acc_title": 45, "acc_title_value": 46, "acc_descr": 47, "acc_descr_value": 48, "acc_descr_multiline_value": 49, "link": 50, "node": 51, "styledVertex": 52, "AMP": 53, "vertex": 54, "STYLE_SEPARATOR": 55, "idString": 56, "DOUBLECIRCLESTART": 57, "DOUBLECIRCLEEND": 58, "PS": 59, "PE": 60, "(-": 61, "-)": 62, "STADIUMSTART": 63, "STADIUMEND": 64, "SUBROUTINESTART": 65, "SUBROUTINEEND": 66, "VERTEX_WITH_PROPS_START": 67, "NODE_STRING[field]": 68, "COLON": 69, "NODE_STRING[value]": 70, "PIPE": 71, "CYLINDERSTART": 72, "CYLINDEREND": 73, "DIAMOND_START": 74, "DIAMOND_STOP": 75, "TAGEND": 76, "TRAPSTART": 77, "TRAPEND": 78, "INVTRAPSTART": 79, "INVTRAPEND": 80, "linkStatement": 81, "arrowText": 82, "TESTSTR": 83, "START_LINK": 84, "edgeText": 85, "LINK": 86, "edgeTextToken": 87, "STR": 88, "MD_STR": 89, "textToken": 90, "keywords": 91, "STYLE": 92, "LINKSTYLE": 93, "CLASSDEF": 94, "CLASS": 95, "CLICK": 96, "DOWN": 97, "UP": 98, "textNoTagsToken": 99, "stylesOpt": 100, "idString[vertex]": 101, "idString[class]": 102, "CALLBACKNAME": 103, "CALLBACKARGS": 104, "HREF": 105, "LINK_TARGET": 106, "STR[link]": 107, "STR[tooltip]": 108, "alphaNum": 109, "DEFAULT": 110, "numList": 111, "INTERPOLATE": 112, "NUM": 113, "COMMA": 114, "style": 115, "styleComponent": 116, "NODE_STRING": 117, "UNIT": 118, "BRKT": 119, "PCT": 120, "idStringToken": 121, "MINUS": 122, "MULT": 123, "UNICODE_TEXT": 124, "TEXT": 125, "TAGSTART": 126, "EDGE_TEXT": 127, "alphaNumToken": 128, "direction_tb": 129, "direction_bt": 130, "direction_rl": 131, "direction_lr": 132, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 42: "SQE", 43: "end", 45: "acc_title", 46: "acc_title_value", 47: "acc_descr", 48: "acc_descr_value", 49: "acc_descr_multiline_value", 53: "AMP", 55: "STYLE_SEPARATOR", 57: "DOUBLECIRCLESTART", 58: "DOUBLECIRCLEEND", 59: "PS", 60: "PE", 61: "(-", 62: "-)", 63: "STADIUMSTART", 64: "STADIUMEND", 65: "SUBROUTINESTART", 66: "SUBROUTINEEND", 67: "VERTEX_WITH_PROPS_START", 68: "NODE_STRING[field]", 69: "COLON", 70: "NODE_STRING[value]", 71: "PIPE", 72: "CYLINDERSTART", 73: "CYLINDEREND", 74: "DIAMOND_START", 75: "DIAMOND_STOP", 76: "TAGEND", 77: "TRAPSTART", 78: "TRAPEND", 79: "INVTRAPSTART", 80: "INVTRAPEND", 83: "TESTSTR", 84: "START_LINK", 86: "LINK", 88: "STR", 89: "MD_STR", 92: "STYLE", 93: "LINKSTYLE", 94: "CLASSDEF", 95: "CLASS", 96: "CLICK", 97: "DOWN", 98: "UP", 101: "idString[vertex]", 102: "idString[class]", 103: "CALLBACKNAME", 104: "CALLBACKARGS", 105: "HREF", 106: "LINK_TARGET", 107: "STR[link]", 108: "STR[tooltip]", 110: "DEFAULT", 112: "INTERPOLATE", 113: "NUM", 114: "COMMA", 117: "NODE_STRING", 118: "UNIT", 119: "BRKT", 120: "PCT", 122: "MINUS", 123: "MULT", 124: "UNICODE_TEXT", 125: "TEXT", 126: "TAGSTART", 127: "EDGE_TEXT", 129: "direction_tb", 130: "direction_bt", 131: "direction_rl", 132: "direction_lr" }, + productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [51, 1], [51, 5], [52, 1], [52, 3], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 8], [54, 4], [54, 4], [54, 4], [54, 6], [54, 4], [54, 4], [54, 4], [54, 4], [54, 4], [54, 1], [50, 2], [50, 3], [50, 3], [50, 1], [50, 3], [85, 1], [85, 2], [85, 1], [85, 1], [81, 1], [82, 3], [41, 1], [41, 2], [41, 1], [41, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [39, 1], [39, 2], [39, 1], [39, 1], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 3], [37, 5], [37, 5], [37, 7], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [111, 1], [111, 3], [100, 1], [100, 3], [115, 1], [115, 2], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [121, 1], [90, 1], [90, 1], [90, 1], [90, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [99, 1], [87, 1], [87, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [56, 1], [56, 2], [109, 1], [109, 2], [44, 1], [44, 1], [44, 1], [44, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.parseDirective("%%{", "open_directive"); + break; + case 6: + yy.parseDirective($$[$0], "type_directive"); + break; + case 7: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 8: + yy.parseDirective("}%%", "close_directive", "flowchart"); + break; + case 10: + this.$ = []; + break; + case 11: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 12: + case 184: + this.$ = $$[$0]; + break; + case 19: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 20: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 35: + this.$ = $$[$0 - 1].nodes; + break; + case 36: + case 37: + case 38: + case 39: + case 40: + this.$ = []; + break; + case 41: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 42: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 43: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 45: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 46: + case 47: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 51: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 52: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 53: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 54: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 55: + this.$ = [$$[$0]]; + break; + case 56: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 57: + this.$ = $$[$0]; + break; + case 58: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 65: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 67: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 68: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 69: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 70: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 71: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 72: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 75: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 76: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 77: + case 78: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 79: + this.$ = $$[$0]; + break; + case 80: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 81: + this.$ = { text: $$[$0], type: "text" }; + break; + case 82: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 83: + this.$ = { text: $$[$0], type: "string" }; + break; + case 84: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 85: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 86: + this.$ = $$[$0 - 1]; + break; + case 87: + this.$ = { text: $$[$0], type: "text" }; + break; + case 88: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 89: + this.$ = { text: $$[$0], type: "string" }; + break; + case 90: + case 105: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 102: + this.$ = { text: $$[$0], type: "text" }; + break; + case 103: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 104: + this.$ = { text: $$[$0], type: "text" }; + break; + case 106: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 108: + case 116: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 109: + case 117: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 110: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 115: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 118: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 121: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 122: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 123: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 124: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 125: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 126: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 127: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 128: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 129: + case 131: + this.$ = [$$[$0]]; + break; + case 130: + case 132: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 134: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 182: + this.$ = $$[$0]; + break; + case 183: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 185: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 186: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 187: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 188: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 189: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 8: 60, 10: [1, 61], 15: $Vy }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 64], 21: [1, 65], 22: $Vz, 27: 63, 30: 66 }, o($VA, [2, 11]), o($VA, [2, 12]), o($VA, [2, 13]), o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), { 9: 68, 20: $VB, 21: $VC, 23: $VD, 50: 69, 81: 73, 84: [1, 74], 86: [1, 75] }, { 9: 76, 20: $VB, 21: $VC, 23: $VD }, { 9: 77, 20: $VB, 21: $VC, 23: $VD }, { 9: 78, 20: $VB, 21: $VC, 23: $VD }, { 9: 79, 20: $VB, 21: $VC, 23: $VD }, { 9: 80, 20: $VB, 21: $VC, 23: $VD }, { 9: 82, 20: $VB, 21: $VC, 22: [1, 81], 23: $VD }, o($VA, [2, 44]), { 46: [1, 83] }, { 48: [1, 84] }, o($VA, [2, 47]), o($VE, [2, 54], { 30: 85, 22: $Vz }), { 22: [1, 86] }, { 22: [1, 87] }, { 22: [1, 88] }, { 22: [1, 89] }, { 26: $VF, 53: $VG, 69: $VH, 88: [1, 93], 97: $VI, 103: [1, 90], 105: [1, 91], 109: 92, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, o($VA, [2, 186]), o($VA, [2, 187]), o($VA, [2, 188]), o($VA, [2, 189]), o($VQ, [2, 55]), o($VQ, [2, 57], { 55: [1, 106] }), o($VR, [2, 75], { 121: 119, 40: [1, 107], 53: $Ve, 57: [1, 108], 59: [1, 109], 61: [1, 110], 63: [1, 111], 65: [1, 112], 67: [1, 113], 69: $Vf, 72: [1, 114], 74: [1, 115], 76: [1, 116], 77: [1, 117], 79: [1, 118], 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VS, [2, 182]), o($VS, [2, 143]), o($VS, [2, 144]), o($VS, [2, 145]), o($VS, [2, 146]), o($VS, [2, 147]), o($VS, [2, 148]), o($VS, [2, 149]), o($VS, [2, 150]), o($VS, [2, 151]), o($VS, [2, 152]), o($VS, [2, 153]), { 9: 120, 20: $VB, 21: $VC, 23: $VD }, { 11: 121, 14: [1, 122] }, o($VT, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 123] }, o($VU, [2, 34], { 30: 124, 22: $Vz }), o($VA, [2, 35]), { 51: 125, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VV, [2, 48]), o($VV, [2, 49]), o($VV, [2, 50]), o($VW, [2, 79], { 82: 126, 71: [1, 128], 83: [1, 127] }), { 85: 129, 87: 130, 88: [1, 131], 89: [1, 132], 124: $VX, 127: $VY }, o([53, 69, 71, 83, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 85]), o($VA, [2, 36]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), { 22: $VZ, 24: $V_, 26: $V$, 38: $V01, 39: 135, 43: $V11, 53: $V21, 69: $V31, 84: $V41, 88: [1, 137], 89: [1, 138], 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 136, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vi1, $V5, { 17: 161 }), o($VA, [2, 45]), o($VA, [2, 46]), o($VE, [2, 53], { 53: $Vj1 }), { 53: $Ve, 56: 163, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 110: [1, 164], 111: 165, 113: [1, 166] }, { 53: $Ve, 56: 167, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 53: $Ve, 56: 168, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 108], { 22: [1, 169], 104: [1, 170] }), { 88: [1, 171] }, o($VT, [2, 116], { 128: 173, 22: [1, 172], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 118], { 22: [1, 174] }), o($Vk1, [2, 184]), o($Vk1, [2, 171]), o($Vk1, [2, 172]), o($Vk1, [2, 173]), o($Vk1, [2, 174]), o($Vk1, [2, 175]), o($Vk1, [2, 176]), o($Vk1, [2, 177]), o($Vk1, [2, 178]), o($Vk1, [2, 179]), o($Vk1, [2, 180]), o($Vk1, [2, 181]), { 53: $Ve, 56: 175, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 41: 176, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 184, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 186, 59: [1, 185], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 187, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 188, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 189, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 117: [1, 190] }, { 41: 191, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 192, 74: [1, 193], 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 194, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 195, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 196, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VS, [2, 183]), o($Vr1, [2, 3]), { 8: 197, 15: $Vy }, { 15: [2, 7] }, o($V4, [2, 28]), o($VU, [2, 33]), o($VE, [2, 51], { 30: 198, 22: $Vz }), o($VW, [2, 76], { 22: [1, 199] }), { 22: [1, 200] }, { 41: 201, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 86: [1, 202], 87: 203, 124: $VX, 127: $VY }, o($Vs1, [2, 81]), o($Vs1, [2, 83]), o($Vs1, [2, 84]), o($Vs1, [2, 169]), o($Vs1, [2, 170]), { 9: 205, 20: $VB, 21: $VC, 22: $VZ, 23: $VD, 24: $V_, 26: $V$, 38: $V01, 40: [1, 204], 43: $V11, 53: $V21, 69: $V31, 84: $V41, 91: 148, 92: $V51, 93: $V61, 94: $V71, 95: $V81, 96: $V91, 97: $Va1, 98: $Vb1, 99: 206, 113: $Vc1, 117: $Vd1, 119: $Ve1, 122: $Vf1, 123: $Vg1, 124: $Vh1 }, o($Vt1, [2, 102]), o($Vt1, [2, 104]), o($Vt1, [2, 105]), o($Vt1, [2, 158]), o($Vt1, [2, 159]), o($Vt1, [2, 160]), o($Vt1, [2, 161]), o($Vt1, [2, 162]), o($Vt1, [2, 163]), o($Vt1, [2, 164]), o($Vt1, [2, 165]), o($Vt1, [2, 166]), o($Vt1, [2, 167]), o($Vt1, [2, 168]), o($Vt1, [2, 91]), o($Vt1, [2, 92]), o($Vt1, [2, 93]), o($Vt1, [2, 94]), o($Vt1, [2, 95]), o($Vt1, [2, 96]), o($Vt1, [2, 97]), o($Vt1, [2, 98]), o($Vt1, [2, 99]), o($Vt1, [2, 100]), o($Vt1, [2, 101]), { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 207], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vz, 30: 208 }, { 22: [1, 209], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 210] }, { 22: [1, 211], 114: [1, 212] }, o($Vu1, [2, 129]), { 22: [1, 213], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: [1, 214], 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 119, 122: $Vr, 123: $Vs, 124: $Vt }, { 88: [1, 215] }, o($VT, [2, 110], { 22: [1, 216] }), o($VT, [2, 112], { 22: [1, 217] }), { 88: [1, 218] }, o($Vk1, [2, 185]), { 88: [1, 219], 106: [1, 220] }, o($VQ, [2, 58], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), { 42: [1, 221], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vv1, [2, 87]), o($Vv1, [2, 89]), o($Vv1, [2, 90]), o($Vv1, [2, 154]), o($Vv1, [2, 155]), o($Vv1, [2, 156]), o($Vv1, [2, 157]), { 58: [1, 223], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 224, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 60: [1, 225], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 62: [1, 226], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 64: [1, 227], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 66: [1, 228], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 69: [1, 229] }, { 73: [1, 230], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 75: [1, 231], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 41: 232, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 42: [1, 233], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 234], 80: [1, 235], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 76: $Vl1, 78: [1, 237], 80: [1, 236], 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 9: 238, 20: $VB, 21: $VC, 23: $VD }, o($VE, [2, 52], { 53: $Vj1 }), o($VW, [2, 78]), o($VW, [2, 77]), { 71: [1, 239], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VW, [2, 80]), o($Vs1, [2, 82]), { 41: 240, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($Vi1, $V5, { 17: 241 }), o($Vt1, [2, 103]), o($VA, [2, 43]), { 52: 242, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 243, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 254, 112: [1, 255], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 256, 112: [1, 257], 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 113: [1, 258] }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 259, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 53: $Ve, 56: 260, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt }, o($VT, [2, 109]), { 88: [1, 261] }, { 88: [1, 262], 106: [1, 263] }, o($VT, [2, 117]), o($VT, [2, 119], { 22: [1, 264] }), o($VT, [2, 120]), o($VR, [2, 59]), o($Vv1, [2, 88]), o($VR, [2, 60]), { 60: [1, 265], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 67]), o($VR, [2, 62]), o($VR, [2, 63]), o($VR, [2, 64]), { 117: [1, 266] }, o($VR, [2, 66]), o($VR, [2, 68]), { 75: [1, 267], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 70]), o($VR, [2, 71]), o($VR, [2, 73]), o($VR, [2, 72]), o($VR, [2, 74]), o($Vr1, [2, 4]), o([22, 53, 69, 97, 110, 113, 114, 117, 119, 122, 123, 124], [2, 86]), { 42: [1, 268], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 269], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, o($VQ, [2, 56]), o($VT, [2, 122], { 114: $VE1 }), o($VF1, [2, 131], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VG1, [2, 133]), o($VG1, [2, 135]), o($VG1, [2, 136]), o($VG1, [2, 137]), o($VG1, [2, 138]), o($VG1, [2, 139]), o($VG1, [2, 140]), o($VG1, [2, 141]), o($VG1, [2, 142]), o($VT, [2, 123], { 114: $VE1 }), { 22: [1, 272] }, o($VT, [2, 124], { 114: $VE1 }), { 22: [1, 273] }, o($Vu1, [2, 130]), o($VT, [2, 106], { 114: $VE1 }), o($VT, [2, 107], { 121: 119, 53: $Ve, 69: $Vf, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 122: $Vr, 123: $Vs, 124: $Vt }), o($VT, [2, 111]), o($VT, [2, 113], { 22: [1, 274] }), o($VT, [2, 114]), { 106: [1, 275] }, { 60: [1, 276] }, { 71: [1, 277] }, { 75: [1, 278] }, { 9: 279, 20: $VB, 21: $VC, 23: $VD }, o($VA, [2, 42]), { 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 115: 280, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VG1, [2, 134]), { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 281, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 26: $VF, 53: $VG, 69: $VH, 97: $VI, 109: 282, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP, 128: 94 }, { 106: [1, 283] }, o($VT, [2, 121]), o($VR, [2, 61]), { 41: 284, 76: $Vl1, 88: $Vm1, 89: $Vn1, 90: 177, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, o($VR, [2, 69]), o($Vi1, $V5, { 17: 285 }), o($VF1, [2, 132], { 116: 271, 22: $Vw1, 69: $Vx1, 92: $Vy1, 113: $Vz1, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }), o($VT, [2, 127], { 128: 173, 22: [1, 286], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 128], { 128: 173, 22: [1, 287], 26: $VF, 53: $VG, 69: $VH, 97: $VI, 113: $VJ, 114: $VK, 117: $VL, 119: $VM, 122: $VN, 123: $VO, 124: $VP }), o($VT, [2, 115]), { 42: [1, 288], 76: $Vl1, 90: 222, 124: $Vo1, 125: $Vp1, 126: $Vq1 }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: [1, 289], 44: 31, 45: $Vb, 47: $Vc, 49: $Vd, 51: 35, 52: 45, 53: $Ve, 54: 46, 56: 47, 69: $Vf, 92: $Vg, 93: $Vh, 94: $Vi, 95: $Vj, 96: $Vk, 97: $Vl, 110: $Vm, 113: $Vn, 114: $Vo, 117: $Vp, 119: $Vq, 121: 48, 122: $Vr, 123: $Vs, 124: $Vt, 129: $Vu, 130: $Vv, 131: $Vw, 132: $Vx }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 290, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, { 22: $Vw1, 69: $Vx1, 92: $Vy1, 100: 291, 113: $Vz1, 115: 244, 116: 245, 117: $VA1, 118: $VB1, 119: $VC1, 120: $VD1 }, o($VR, [2, 65]), o($VA, [2, 41]), o($VT, [2, 125], { 114: $VE1 }), o($VT, [2, 126], { 114: $VE1 })], + defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 122: [2, 7] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 12; + case 1: + this.begin("type_directive"); + return 13; + case 2: + this.popState(); + this.begin("arg_directive"); + return 10; + case 3: + this.popState(); + this.popState(); + return 15; + case 4: + return 14; + case 5: + this.begin("acc_title"); + return 45; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 47; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + this.begin("callbackname"); + break; + case 13: + this.popState(); + break; + case 14: + this.popState(); + this.begin("callbackargs"); + break; + case 15: + return 103; + case 16: + this.popState(); + break; + case 17: + return 104; + case 18: + return "MD_STR"; + case 19: + this.popState(); + break; + case 20: + this.begin("md_string"); + break; + case 21: + return "STR"; + case 22: + this.popState(); + break; + case 23: + this.pushState("string"); + break; + case 24: + return 92; + case 25: + return 110; + case 26: + return 93; + case 27: + return 112; + case 28: + return 94; + case 29: + return 95; + case 30: + return 105; + case 31: + this.begin("click"); + break; + case 32: + this.popState(); + break; + case 33: + return 96; + case 34: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 35: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 36: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 24; + case 37: + return 38; + case 38: + return 43; + case 39: + return 106; + case 40: + return 106; + case 41: + return 106; + case 42: + return 106; + case 43: + this.popState(); + return 25; + case 44: + this.popState(); + return 26; + case 45: + this.popState(); + return 26; + case 46: + this.popState(); + return 26; + case 47: + this.popState(); + return 26; + case 48: + this.popState(); + return 26; + case 49: + this.popState(); + return 26; + case 50: + this.popState(); + return 26; + case 51: + this.popState(); + return 26; + case 52: + this.popState(); + return 26; + case 53: + this.popState(); + return 26; + case 54: + return 129; + case 55: + return 130; + case 56: + return 131; + case 57: + return 132; + case 58: + return 113; + case 59: + return 119; + case 60: + return 55; + case 61: + return 69; + case 62: + return 53; + case 63: + return 20; + case 64: + return 114; + case 65: + return 123; + case 66: + this.popState(); + return 86; + case 67: + this.pushState("edgeText"); + return 84; + case 68: + return 127; + case 69: + this.popState(); + return 86; + case 70: + this.pushState("thickEdgeText"); + return 84; + case 71: + return 127; + case 72: + this.popState(); + return 86; + case 73: + this.pushState("dottedEdgeText"); + return 84; + case 74: + return 127; + case 75: + return 86; + case 76: + this.popState(); + return 62; + case 77: + return "TEXT"; + case 78: + this.pushState("ellipseText"); + return 61; + case 79: + this.popState(); + return 64; + case 80: + this.pushState("text"); + return 63; + case 81: + this.popState(); + return 66; + case 82: + this.pushState("text"); + return 65; + case 83: + return 67; + case 84: + this.pushState("text"); + return 76; + case 85: + this.popState(); + return 73; + case 86: + this.pushState("text"); + return 72; + case 87: + this.popState(); + return 58; + case 88: + this.pushState("text"); + return 57; + case 89: + this.popState(); + return 78; + case 90: + this.popState(); + return 80; + case 91: + return 125; + case 92: + this.pushState("trapText"); + return 77; + case 93: + this.pushState("trapText"); + return 79; + case 94: + return 126; + case 95: + return 76; + case 96: + return 98; + case 97: + return "SEP"; + case 98: + return 97; + case 99: + return 123; + case 100: + return 119; + case 101: + return 53; + case 102: + return 117; + case 103: + return 122; + case 104: + return 124; + case 105: + this.popState(); + return 71; + case 106: + this.pushState("text"); + return 71; + case 107: + this.popState(); + return 60; + case 108: + this.pushState("text"); + return 59; + case 109: + this.popState(); + return 42; + case 110: + this.pushState("text"); + return 40; + case 111: + this.popState(); + return 75; + case 112: + this.pushState("text"); + return 74; + case 113: + return "TEXT"; + case 114: + return "QUOTE"; + case 115: + return 21; + case 116: + return 22; + case 117: + return 23; + } + }, + rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|(?!\)+))/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "close_directive": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "arg_directive": { "rules": [3, 4, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "type_directive": { "rules": [2, 3, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "open_directive": { "rules": [1, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackargs": { "rules": [16, 17, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "callbackname": { "rules": [13, 14, 15, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "href": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "click": { "rules": [20, 23, 32, 33, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dottedEdgeText": { "rules": [20, 23, 72, 74, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "thickEdgeText": { "rules": [20, 23, 69, 71, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "edgeText": { "rules": [20, 23, 66, 68, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "trapText": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 89, 90, 91, 92, 93, 106, 108, 110, 112], "inclusive": false }, "ellipseText": { "rules": [20, 23, 75, 76, 77, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "text": { "rules": [20, 23, 75, 78, 79, 80, 81, 82, 85, 86, 87, 88, 92, 93, 105, 106, 107, 108, 109, 110, 111, 112, 113], "inclusive": false }, "vertex": { "rules": [20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "dir": { "rules": [20, 23, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr_multiline": { "rules": [10, 11, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_descr": { "rules": [8, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "acc_title": { "rules": [6, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "md_string": { "rules": [18, 19, 20, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "string": { "rules": [20, 21, 22, 23, 75, 78, 80, 82, 86, 88, 92, 93, 106, 108, 110, 112], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40, 41, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 78, 80, 82, 83, 84, 86, 88, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, 110, 112, 114, 115, 116, 117], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type); +}; +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + edges.push(edge); +}; +const addLink = function(_start, _end, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + parseDirective, + defaultConfig: () => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.K.flowchart, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.t +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + parseDirective, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 64474: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/flowDb-ff651a22.js +var flowDb_ff651a22 = __webpack_require__(64627); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +// EXTERNAL MODULE: ../node_modules/d3/src/index.js + 195 modules +var src = __webpack_require__(63294); +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(9500); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre-js/util.js +var util = __webpack_require__(36715); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/arrows.js + + + + +var arrows = { + normal, + vee, + undirected, +}; + +function setArrows(value) { + arrows = value; +} + +function normal(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function vee(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function undirected(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 5 L 10 5') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(96157); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js + + + + +function addSVGLabel(root, node) { + var domNode = root; + + domNode.node().appendChild(node.label); + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js + + + + +/* + * Attaches a text label to the specified root. Handles escape sequences. + */ +function addTextLabel(root, node) { + var domNode = root.append('text'); + + var lines = processEscapeSequences(node.label).split('\n'); + for (var i = 0; i < lines.length; i++) { + domNode + .append('tspan') + .attr('xml:space', 'preserve') + .attr('dy', '1em') + .attr('x', '1') + .text(lines[i]); + } + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +function processEscapeSequences(text) { + var newText = ''; + var escaped = false; + var ch; + for (var i = 0; i < text.length; ++i) { + ch = text[i]; + if (escaped) { + switch (ch) { + case 'n': + newText += '\n'; + break; + default: + newText += ch; + } + escaped = false; + } else if (ch === '\\') { + escaped = true; + } else { + newText += ch; + } + } + return newText; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-label.js + + + + + + +function addLabel(root, node, location) { + var label = node.label; + var labelSvg = root.append('g'); + + // Allow the label to be a string, a function that returns a DOM element, or + // a DOM element itself. + if (node.labelType === 'svg') { + addSVGLabel(labelSvg, node); + } else if (typeof label !== 'string' || node.labelType === 'html') { + (0,add_html_label/* addHtmlLabel */.a)(labelSvg, node); + } else { + addTextLabel(labelSvg, node); + } + + var labelBBox = labelSvg.node().getBBox(); + var y; + switch (location) { + case 'top': + y = -node.height / 2; + break; + case 'bottom': + y = node.height / 2 - labelBBox.height; + break; + default: + y = -labelBBox.height / 2; + } + labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')'); + + return labelSvg; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/create-clusters.js + + + + + + +var createClusters = function (selection, g) { + var clusters = g.nodes().filter(function (v) { + return util/* isSubgraph */.bF(g, v); + }); + var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) { + return v; + }); + + util/* applyTransition */.WR(svgClusters.exit(), g).style('opacity', 0).remove(); + + var enterSelection = svgClusters + .enter() + .append('g') + .attr('class', 'cluster') + .attr('id', function (v) { + var node = g.node(v); + return node.id; + }) + .style('opacity', 0) + .each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + src/* select */.Ys(this).append('rect'); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + addLabel(labelGroup, node, node.clusterLabelPos); + }); + + svgClusters = svgClusters.merge(enterSelection); + + svgClusters = util/* applyTransition */.WR(svgClusters, g).style('opacity', 1); + + svgClusters.selectAll('rect').each(function (c) { + var node = g.node(c); + var domCluster = src/* select */.Ys(this); + util/* applyStyle */.bg(domCluster, node.style); + }); + + return svgClusters; +}; + +function setCreateClusters(value) { + createClusters = value; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js + + + + + + + +let createEdgeLabels = function (selection, g) { + var svgEdgeLabels = selection + .selectAll('g.edgeLabel') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + svgEdgeLabels.exit().remove(); + svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0); + + svgEdgeLabels = selection.selectAll('g.edgeLabel'); + + svgEdgeLabels.each(function (e) { + var root = src/* select */.Ys(this); + root.select('.label').remove(); + var edge = g.edge(e); + var label = addLabel(root, g.edge(e), 0).classed('label', true); + var bbox = label.node().getBBox(); + + if (edge.labelId) { + label.attr('id', edge.labelId); + } + if (!has/* default */.Z(edge, 'width')) { + edge.width = bbox.width; + } + if (!has/* default */.Z(edge, 'height')) { + edge.height = bbox.height; + } + }); + + var exitSelection; + + if (svgEdgeLabels.exit) { + exitSelection = svgEdgeLabels.exit(); + } else { + exitSelection = svgEdgeLabels.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgEdgeLabels; +}; + +function setCreateEdgeLabels(value) { + createEdgeLabels = value; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js + + +function intersectNode(node, point) { + return node.intersect(point); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js + + + + + + + +var createEdgePaths = function (selection, g, arrows) { + var previousPaths = selection + .selectAll('g.edgePath') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + var newPaths = enter(previousPaths, g); + exit(previousPaths, g); + + var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths; + util/* applyTransition */.WR(svgPaths, g).style('opacity', 1); + + // Save DOM element in the path group, and set ID and class + svgPaths.each(function (e) { + var domEdge = src/* select */.Ys(this); + var edge = g.edge(e); + edge.elem = this; + + if (edge.id) { + domEdge.attr('id', edge.id); + } + + util/* applyClass */.$p( + domEdge, + edge['class'], + (domEdge.classed('update') ? 'update ' : '') + 'edgePath' + ); + }); + + svgPaths.selectAll('path.path').each(function (e) { + var edge = g.edge(e); + edge.arrowheadId = uniqueId/* default */.Z('arrowhead'); + + var domEdge = src/* select */.Ys(this) + .attr('marker-end', function () { + return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')'; + }) + .style('fill', 'none'); + + util/* applyTransition */.WR(domEdge, g).attr('d', function (e) { + return calcPoints(g, e); + }); + + util/* applyStyle */.bg(domEdge, edge.style); + }); + + svgPaths.selectAll('defs *').remove(); + svgPaths.selectAll('defs').each(function (e) { + var edge = g.edge(e); + var arrowhead = arrows[edge.arrowhead]; + arrowhead(src/* select */.Ys(this), edge.arrowheadId, edge, 'arrowhead'); + }); + + return svgPaths; +}; + +function setCreateEdgePaths(value) { + createEdgePaths = value; +} + +function makeFragmentRef(url, fragmentId) { + var baseUrl = url.split('#')[0]; + return baseUrl + '#' + fragmentId; +} + +function calcPoints(g, e) { + var edge = g.edge(e); + var tail = g.node(e.v); + var head = g.node(e.w); + var points = edge.points.slice(1, edge.points.length - 1); + points.unshift(intersectNode(tail, points[0])); + points.push(intersectNode(head, points[points.length - 1])); + + return createLine(edge, points); +} + +function createLine(edge, points) { + // @ts-expect-error + var line = (src/* line */.jvg || src/* svg */.YPS.line)() + .x(function (d) { + return d.x; + }) + .y(function (d) { + return d.y; + }); + + (line.curve || line.interpolate)(edge.curve); + + return line(points); +} + +function getCoords(elem) { + var bbox = elem.getBBox(); + var matrix = elem.ownerSVGElement + .getScreenCTM() + .inverse() + .multiply(elem.getScreenCTM()) + .translate(bbox.width / 2, bbox.height / 2); + return { x: matrix.e, y: matrix.f }; +} + +function enter(svgPaths, g) { + var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0); + svgPathsEnter + .append('path') + .attr('class', 'path') + .attr('d', function (e) { + var edge = g.edge(e); + var sourceElem = g.node(e.v).elem; + var points = range/* default */.Z(edge.points.length).map(function () { + return getCoords(sourceElem); + }); + return createLine(edge, points); + }); + svgPathsEnter.append('defs'); + return svgPathsEnter; +} + +function exit(svgPaths, g) { + var svgPathExit = svgPaths.exit(); + util/* applyTransition */.WR(svgPathExit, g).style('opacity', 0).remove(); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/create-nodes.js + + + + + + + +var createNodes = function (selection, g, shapes) { + var simpleNodes = g.nodes().filter(function (v) { + return !util/* isSubgraph */.bF(g, v); + }); + var svgNodes = selection + .selectAll('g.node') + .data(simpleNodes, function (v) { + return v; + }) + .classed('update', true); + + svgNodes.exit().remove(); + + svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0); + + svgNodes = selection.selectAll('g.node'); + + svgNodes.each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + util/* applyClass */.$p( + thisGroup, + node['class'], + (thisGroup.classed('update') ? 'update ' : '') + 'node' + ); + + thisGroup.select('g.label').remove(); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + var labelDom = addLabel(labelGroup, node); + var shape = shapes[node.shape]; + var bbox = pick/* default */.Z(labelDom.node().getBBox(), 'width', 'height'); + + node.elem = this; + + if (node.id) { + thisGroup.attr('id', node.id); + } + if (node.labelId) { + labelGroup.attr('id', node.labelId); + } + + if (has/* default */.Z(node, 'width')) { + bbox.width = node.width; + } + if (has/* default */.Z(node, 'height')) { + bbox.height = node.height; + } + + bbox.width += node.paddingLeft + node.paddingRight; + bbox.height += node.paddingTop + node.paddingBottom; + labelGroup.attr( + 'transform', + 'translate(' + + (node.paddingLeft - node.paddingRight) / 2 + + ',' + + (node.paddingTop - node.paddingBottom) / 2 + + ')' + ); + + var root = src/* select */.Ys(this); + root.select('.label-container').remove(); + var shapeSvg = shape(root, bbox, node).classed('label-container', true); + util/* applyStyle */.bg(shapeSvg, node.style); + + var shapeBBox = shapeSvg.node().getBBox(); + node.width = shapeBBox.width; + node.height = shapeBBox.height; + }); + + var exitSelection; + + if (svgNodes.exit) { + exitSelection = svgNodes.exit(); + } else { + exitSelection = svgNodes.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgNodes; +}; + +function setCreateNodes(value) { + createNodes = value; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/position-clusters.js + + + + + +function positionClusters(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); + + util/* applyTransition */.WR(created.selectAll('rect'), g) + .attr('width', function (v) { + return g.node(v).width; + }) + .attr('height', function (v) { + return g.node(v).height; + }) + .attr('x', function (v) { + var node = g.node(v); + return -node.width / 2; + }) + .attr('y', function (v) { + var node = g.node(v); + return -node.height / 2; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js + + + + + + +function positionEdgeLabels(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(e) { + var edge = g.edge(e); + return has/* default */.Z(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : ''; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/position-nodes.js + + + + + +function positionNodes(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js + + +function intersectEllipse(node, rx, ry, point) { + // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html + + var cx = node.x; + var cy = node.y; + + var px = cx - point.x; + var py = cy - point.y; + + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + + var dx = Math.abs((rx * ry * px) / det); + if (point.x < cx) { + dx = -dx; + } + var dy = Math.abs((rx * ry * py) / det); + if (point.y < cy) { + dy = -dy; + } + + return { x: cx + dx, y: cy + dy }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js + + + + +function intersectCircle(node, rx, point) { + return intersectEllipse(node, rx, rx, point); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js + + +/* + * Returns the point at which two lines, p and q, intersect or returns + * undefined if they do not intersect. + */ +function intersectLine(p1, p2, q1, q2) { + // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, + // p7 and p473. + + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + + // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + + // b1 y + c1 = 0. + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + + // Compute r3 and r4. + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + + // Check signs of r3 and r4. If both point 3 and point 4 lie on + // same side of line 1, the line segments do not intersect. + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return /*DONT_INTERSECT*/; + } + + // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + + // Compute r1 and r2 + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + + // Check signs of r1 and r2. If both point 1 and point 2 lie + // on same side of second line segment, the line segments do + // not intersect. + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return /*DONT_INTERSECT*/; + } + + // Line segments intersect: compute intersection point. + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return /*COLLINEAR*/; + } + + offset = Math.abs(denom / 2); + + // The denom/2 is to get rounding instead of truncating. It + // is added or subtracted to the numerator, depending upon the + // sign of the numerator. + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + return { x: x, y: y }; +} + +function sameSign(r1, r2) { + return r1 * r2 > 0; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + + + + +/* + * Returns the point ({x, y}) at which the point argument intersects with the + * node argument assuming that it has the shape specified by polygon. + */ +function intersectPolygon(node, polyPoints, point) { + var x1 = node.x; + var y1 = node.y; + + var intersections = []; + + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect = intersectLine( + node, + point, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect) { + intersections.push(intersect); + } + } + + if (!intersections.length) { + console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); + return node; + } + + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + var pdx = p.x - point.x; + var pdy = p.y - point.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + + var qdx = q.x - point.x; + var qdy = q.y - point.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js + + +function intersectRect(node, point) { + var x = node.x; + var y = node.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = node.width / 2; + var h = node.height / 2; + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/shapes.js + + + + + + + +var shapes = { + rect, + ellipse, + circle, + diamond, +}; + +function setShapes(value) { + shapes = value; +} + +function rect(parent, bbox, node) { + var shapeSvg = parent + .insert('rect', ':first-child') + .attr('rx', node.rx) + .attr('ry', node.ry) + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('width', bbox.width) + .attr('height', bbox.height); + + node.intersect = function (point) { + return intersectRect(node, point); + }; + + return shapeSvg; +} + +function ellipse(parent, bbox, node) { + var rx = bbox.width / 2; + var ry = bbox.height / 2; + var shapeSvg = parent + .insert('ellipse', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('rx', rx) + .attr('ry', ry); + + node.intersect = function (point) { + return intersectEllipse(node, rx, ry, point); + }; + + return shapeSvg; +} + +function circle(parent, bbox, node) { + var r = Math.max(bbox.width, bbox.height) / 2; + var shapeSvg = parent + .insert('circle', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('r', r); + + node.intersect = function (point) { + return intersectCircle(node, r, point); + }; + + return shapeSvg; +} + +// Circumscribe an ellipse for the bounding box with a diamond shape. I derived +// the function to calculate the diamond shape from: +// http://mathforum.org/kb/message.jspa?messageID=3750236 +function diamond(parent, bbox, node) { + var w = (bbox.width * Math.SQRT2) / 2; + var h = (bbox.height * Math.SQRT2) / 2; + var points = [ + { x: 0, y: -h }, + { x: -w, y: 0 }, + { x: 0, y: h }, + { x: w, y: 0 }, + ]; + var shapeSvg = parent.insert('polygon', ':first-child').attr( + 'points', + points + .map(function (p) { + return p.x + ',' + p.y; + }) + .join(' ') + ); + + node.intersect = function (p) { + return intersectPolygon(node, points, p); + }; + + return shapeSvg; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre-js/render.js + + + + + + + + + + + + + + + +// This design is based on http://bost.ocks.org/mike/chart/. +function render() { + var fn = function (svg, g) { + preProcessGraph(g); + + var outputGroup = createOrSelectGroup(svg, 'output'); + var clustersGroup = createOrSelectGroup(outputGroup, 'clusters'); + var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'); + var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g); + var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes); + + (0,dagre/* layout */.bK)(g); + + positionNodes(nodes, g); + positionEdgeLabels(edgeLabels, g); + createEdgePaths(edgePathsGroup, g, arrows); + + var clusters = createClusters(clustersGroup, g); + positionClusters(clusters, g); + + postProcessGraph(g); + }; + + fn.createNodes = function (value) { + if (!arguments.length) return createNodes; + setCreateNodes(value); + return fn; + }; + + fn.createClusters = function (value) { + if (!arguments.length) return createClusters; + setCreateClusters(value); + return fn; + }; + + fn.createEdgeLabels = function (value) { + if (!arguments.length) return createEdgeLabels; + setCreateEdgeLabels(value); + return fn; + }; + + fn.createEdgePaths = function (value) { + if (!arguments.length) return createEdgePaths; + setCreateEdgePaths(value); + return fn; + }; + + fn.shapes = function (value) { + if (!arguments.length) return shapes; + setShapes(value); + return fn; + }; + + fn.arrows = function (value) { + if (!arguments.length) return arrows; + setArrows(value); + return fn; + }; + + return fn; +} + +var NODE_DEFAULT_ATTRS = { + paddingLeft: 10, + paddingRight: 10, + paddingTop: 10, + paddingBottom: 10, + rx: 0, + ry: 0, + shape: 'rect', +}; + +var EDGE_DEFAULT_ATTRS = { + arrowhead: 'normal', + curve: src/* curveLinear */.c_6, +}; + +function preProcessGraph(g) { + g.nodes().forEach(function (v) { + var node = g.node(v); + if (!has/* default */.Z(node, 'label') && !g.children(v).length) { + node.label = v; + } + + if (has/* default */.Z(node, 'paddingX')) { + defaults/* default */.Z(node, { + paddingLeft: node.paddingX, + paddingRight: node.paddingX, + }); + } + + if (has/* default */.Z(node, 'paddingY')) { + defaults/* default */.Z(node, { + paddingTop: node.paddingY, + paddingBottom: node.paddingY, + }); + } + + if (has/* default */.Z(node, 'padding')) { + defaults/* default */.Z(node, { + paddingLeft: node.padding, + paddingRight: node.padding, + paddingTop: node.padding, + paddingBottom: node.padding, + }); + } + + defaults/* default */.Z(node, NODE_DEFAULT_ATTRS); + + forEach/* default */.Z(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { + node[k] = Number(node[k]); + }); + + // Save dimensions for restore during post-processing + if (has/* default */.Z(node, 'width')) { + node._prevWidth = node.width; + } + if (has/* default */.Z(node, 'height')) { + node._prevHeight = node.height; + } + }); + + g.edges().forEach(function (e) { + var edge = g.edge(e); + if (!has/* default */.Z(edge, 'label')) { + edge.label = ''; + } + defaults/* default */.Z(edge, EDGE_DEFAULT_ATTRS); + }); +} + +function postProcessGraph(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + + // Restore original dimensions + if (has/* default */.Z(node, '_prevWidth')) { + node.width = node._prevWidth; + } else { + delete node.width; + } + + if (has/* default */.Z(node, '_prevHeight')) { + node.height = node._prevHeight; + } else { + delete node.height; + } + + delete node._prevWidth; + delete node._prevHeight; + }); +} + +function createOrSelectGroup(root, name) { + var selection = root.select('g.' + name); + if (selection.empty()) { + selection = root.append('g').attr('class', name); + } + return selection; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/index.js + + + + + + + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/styles-1b0c237a.js + 1 modules +var styles_1b0c237a = __webpack_require__(29119); +// EXTERNAL MODULE: ../node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27693); +// EXTERNAL MODULE: ../node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(7608); +// EXTERNAL MODULE: ../node_modules/dompurify/dist/purify.es.js +var purify_es = __webpack_require__(42605); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/json.js + 1 modules +var json = __webpack_require__(76576); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/flowDiagram-d6f8fe3a.js + + + + + + + + + + + + + + + + + + + + + + + + + + +function question(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const s = (w + h) * 0.9; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, s, s, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function hexagon(parent, bbox, node) { + const f = 4; + const h = bbox.height; + const m = h / f; + const w = bbox.width + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_left_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_right(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_left(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function inv_trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_right_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function stadium(parent, bbox, node) { + const h = bbox.height; + const w = bbox.width + h / 4; + const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + node.intersect = function(point) { + return intersectRect(node, point); + }; + return shapeSvg; +} +function subroutine(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function cylinder(parent, bbox, node) { + const w = bbox.width; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + node.intersect = function(point) { + const pos = intersectRect(node, point); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +} +function addToRender(render2) { + render2.shapes().question = question; + render2.shapes().hexagon = hexagon; + render2.shapes().stadium = stadium; + render2.shapes().subroutine = subroutine; + render2.shapes().cylinder = cylinder; + render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow; + render2.shapes().lean_right = lean_right; + render2.shapes().lean_left = lean_left; + render2.shapes().trapezoid = trapezoid; + render2.shapes().inv_trapezoid = inv_trapezoid; + render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow; +} +function addToRenderV2(addShape) { + addShape({ question }); + addShape({ hexagon }); + addShape({ stadium }); + addShape({ subroutine }); + addShape({ cylinder }); + addShape({ rect_left_inv_arrow }); + addShape({ lean_right }); + addShape({ lean_left }); + addShape({ trapezoid }); + addShape({ inv_trapezoid }); + addShape({ rect_right_inv_arrow }); +} +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +const flowChartShapes = { + addToRender, + addToRenderV2 +}; +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, _doc, diagObj) { + const svg = !root ? (0,src/* select */.Ys)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); + const doc = !_doc ? document : _doc; + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles = (0,mermaid_768dc893.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + if ((0,mermaid_768dc893.n)((0,mermaid_768dc893.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(mermaid_768dc893.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + default: + _shape = "rect"; + } + mermaid_768dc893.l.warn("Adding node", vertex.id, vertex.domId); + g.setNode(diagObj.db.lookUpDomId(vertex.id), { + labelType: "svg", + labelStyle: styles.labelStyle, + shape: _shape, + label: vertexNode, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: diagObj.db.lookUpDomId(vertex.id) + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + let cnt = 0; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_768dc893.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkId = "L-" + edge.start + "-" + edge.end; + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = {}; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + let style = ""; + let labelStyle = ""; + if (edge.style !== void 0) { + const styles = (0,mermaid_768dc893.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } else { + switch (edge.stroke) { + case "normal": + style = "fill:none"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + break; + case "dotted": + style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + style = " stroke-width: 3.5px;fill:none"; + break; + } + } + edgeData.style = style; + edgeData.labelStyle = labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_768dc893.o)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if ((0,mermaid_768dc893.n)((0,mermaid_768dc893.c)().flowchart.htmlLabels)) { + edgeData.labelType = "html"; + edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${edge.text.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + )}</span>`; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(mermaid_768dc893.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + edgeData.id = linkId; + edgeData.class = linkNameStart + " " + linkNameEnd; + edgeData.minlen = edge.length || 1; + g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + mermaid_768dc893.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const draw = function(text, id, _version, diagObj) { + mermaid_768dc893.l.info("Drawing flowchart"); + const { securityLevel, flowchart: conf2 } = (0,mermaid_768dc893.c)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes); + } + const vert = diagObj.db.getVertices(); + mermaid_768dc893.l.warn("Get vertices", vert); + const edges = diagObj.db.getEdges(); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_768dc893.l.warn( + "Setting subgraph", + subG.nodes[j], + diagObj.db.lookUpDomId(subG.nodes[j]), + diagObj.db.lookUpDomId(subG.id) + ); + g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g, diagObj); + const render$1 = new render(); + flowChartShapes.addToRender(render$1); + render$1.arrows().none = function normal(parent, id2, edge, type) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z"); + (0,util/* applyStyle */.bg)(path, edge[type + "Style"]); + }; + render$1.arrows().normal = function normal(parent, id2) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + }; + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + render$1(element, g); + element.selectAll("g.node").attr("title", function() { + return diagObj.db.getTooltip(this.id); + }); + diagObj.db.indexNodes("subGraph" + i); + for (i = 0; i < subGraphs.length; i++) { + subG = subGraphs[i]; + if (subG.title !== "undefined") { + const clusterRects = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' + ); + const clusterEl = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' + ); + const xPos = clusterRects[0].x.baseVal.value; + const yPos = clusterRects[0].y.baseVal.value; + const _width = clusterRects[0].width.baseVal.value; + const cluster = (0,src/* select */.Ys)(clusterEl[0]); + const te = cluster.select(".label"); + te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`); + te.attr("id", id + "Text"); + for (let j = 0; j < subG.classes.length; j++) { + clusterEl[0].classList.add(subG.classes[j]); + } + } + } + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + (0,mermaid_768dc893.p)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = root.select("#" + id + ' [id="' + diagObj.db.lookUpDomId(key) + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRenderer = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const diagram = { + parser: flowDb_ff651a22.p, + db: flowDb_ff651a22.f, + renderer: styles_1b0c237a.f, + styles: styles_1b0c237a.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + flowRenderer.setConf(cnf.flowchart); + flowDb_ff651a22.f.clear(); + flowDb_ff651a22.f.setGen("gen-1"); + } +}; + + + +/***/ }), + +/***/ 30198: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76576); +/* harmony import */ var _edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40577); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51568); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63294); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, parentCluster) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + await recursiveRender(elem, graph, diagramtype); +}; + + + +/***/ }), + +/***/ 29119: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ flowStyles), + f: () => (/* binding */ flowRendererV2) +}); + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +// EXTERNAL MODULE: ../node_modules/d3/src/index.js + 195 modules +var src = __webpack_require__(63294); +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +// EXTERNAL MODULE: ../node_modules/mermaid/dist/index-f58d48f9.js +var index_f58d48f9 = __webpack_require__(30198); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(96157); +// EXTERNAL MODULE: ../node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(83445); +// EXTERNAL MODULE: ../node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(31739); +;// CONCATENATED MODULE: ../node_modules/khroma/dist/methods/channel.js +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return utils/* default */.Z.lang.round(dist_color/* default */.Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const methods_channel = (channel); + +// EXTERNAL MODULE: ../node_modules/khroma/dist/methods/rgba.js +var rgba = __webpack_require__(46442); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/styles-1b0c237a.js + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,mermaid_768dc893.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + mermaid_768dc893.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + mermaid_768dc893.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,mermaid_768dc893.n)((0,mermaid_768dc893.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(mermaid_768dc893.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,mermaid_768dc893.c)().flowchart.padding + }); + mermaid_768dc893.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,mermaid_768dc893.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + mermaid_768dc893.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_768dc893.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + mermaid_768dc893.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + mermaid_768dc893.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + mermaid_768dc893.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,mermaid_768dc893.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_768dc893.o)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_768dc893.o)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(mermaid_768dc893.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + mermaid_768dc893.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,mermaid_768dc893.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + mermaid_768dc893.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + mermaid_768dc893.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + mermaid_768dc893.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_768dc893.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,index_f58d48f9.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + mermaid_768dc893.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,mermaid_768dc893.p)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,src/* select */.Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const fade = (color, opacity) => { + const channel = methods_channel; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return rgba/* default */.Z(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/4794e44a.5e866ea7.js b/assets/js/4794e44a.5e866ea7.js new file mode 100644 index 0000000000..9e44e07416 --- /dev/null +++ b/assets/js/4794e44a.5e866ea7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4453],{27458:(s,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>t});var h=i(24246),r=i(71670);const o={mdx:{format:"md"},date:"2021-03-09T20:00",authors:["3alisaki","9oelM","apurvaojas","armano2","ArtFlag","asystentka-jolka","ataft","aukokyong","ayonious","B4nan","ben-qnimble","bennodev19","caglarturali","christian-bromann","dbrrt","edno","edulazaro","eric-hc","iamshadmirza","imbhargav5","iruzevic","jlin27","JoelMarcey","juancarlosjr97","juzhiyuan","kumaraditya303","lex111","limkinZero","linyuxuanlin","lisa761","LittleboyHarry","longlho","manzinello","massoudmaboudi","MatanBobi","miroiu","MisterFISHUP","moonrailgun","natac13","nicojs","NikolayS","ntbosscher","oze4","philipp985","RDIL","roydukkey","saihaj","SamChou19815","samhrncir","sammychinedu2ky","saydo17","semoal","Siemienik","Simek","sksamuel","slorber","theankurkedia","TheodoreChu","tienvx","tokarchyn","tomsfernandez","vamsi3","viglucci","wellyshen","wolf20482","yangshun","YashTotale","ykzts","ysulyma","yuval-hazaz"]},c="2.0.0-alpha.71",l={permalink:"/changelog/2.0.0-alpha.71",source:"@site/changelog/source/2.0.0-alpha.71.md",title:"2.0.0-alpha.71",description:"New Feature",date:"2021-03-09T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ali Saki",alias:"3alisaki",url:"https://github.com/3alisaki",imageURL:"https://github.com/3alisaki.png",key:"3alisaki"},{name:"Joel M",alias:"9oelM",url:"https://github.com/9oelM",imageURL:"https://github.com/9oelM.png",key:"9oelM"},{name:"Apurva Ojas",alias:"apurvaojas",url:"https://github.com/apurvaojas",imageURL:"https://github.com/apurvaojas.png",key:"apurvaojas"},{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"Arthur",alias:"ArtFlag",url:"https://github.com/ArtFlag",imageURL:"https://github.com/ArtFlag.png",key:"ArtFlag"},{name:"Jola",alias:"asystentka-jolka",url:"https://github.com/asystentka-jolka",imageURL:"https://github.com/asystentka-jolka.png",key:"asystentka-jolka"},{name:"Andrew Taft",alias:"ataft",url:"https://github.com/ataft",imageURL:"https://github.com/ataft.png",key:"ataft"},{name:"aukokyong",alias:"aukokyong",url:"https://github.com/aukokyong",imageURL:"https://github.com/aukokyong.png",key:"aukokyong"},{name:"Nahiyan Kamal",alias:"ayonious",url:"https://github.com/ayonious",imageURL:"https://github.com/ayonious.png",key:"ayonious"},{name:"Martin Ad\xe1mek",alias:"B4nan",url:"https://github.com/B4nan",imageURL:"https://github.com/B4nan.png",key:"B4nan"},{name:"Ben",alias:"ben-qnimble",url:"https://github.com/ben-qnimble",imageURL:"https://github.com/ben-qnimble.png",key:"ben-qnimble"},{name:"BennoDev",alias:"bennodev19",url:"https://github.com/bennodev19",imageURL:"https://github.com/bennodev19.png",key:"bennodev19"},{name:"\xc7a\u011flar Tural\u0131",alias:"caglarturali",url:"https://github.com/caglarturali",imageURL:"https://github.com/caglarturali.png",key:"caglarturali"},{name:"Christian Bromann",alias:"christian-bromann",url:"https://github.com/christian-bromann",imageURL:"https://github.com/christian-bromann.png",key:"christian-bromann"},{name:"David Barrat",alias:"dbrrt",url:"https://github.com/dbrrt",imageURL:"https://github.com/dbrrt.png",key:"dbrrt"},{name:"Gr\xe9gory Heitz",alias:"edno",url:"https://github.com/edno",imageURL:"https://github.com/edno.png",key:"edno"},{name:"Eduardo L\xe1zaro",alias:"edulazaro",url:"https://github.com/edulazaro",imageURL:"https://github.com/edulazaro.png",key:"edulazaro"},{name:"Eric Carboni",alias:"eric-hc",url:"https://github.com/eric-hc",imageURL:"https://github.com/eric-hc.png",key:"eric-hc"},{name:"Mohd Shad Mirza",alias:"iamshadmirza",url:"https://github.com/iamshadmirza",imageURL:"https://github.com/iamshadmirza.png",key:"iamshadmirza"},{name:"Bhargav Ponnapalli",alias:"imbhargav5",url:"https://github.com/imbhargav5",imageURL:"https://github.com/imbhargav5.png",key:"imbhargav5"},{name:"Ivan Ru\u017eevi\u0107",alias:"iruzevic",url:"https://github.com/iruzevic",imageURL:"https://github.com/iruzevic.png",key:"iruzevic"},{name:"Jessica Lin",alias:"jlin27",url:"https://github.com/jlin27",imageURL:"https://github.com/jlin27.png",key:"jlin27"},{name:"Joel Marcey",alias:"JoelMarcey",url:"https://github.com/JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JoelMarcey"},{name:"Juan Carlos Blanco Delgado",alias:"juancarlosjr97",url:"https://github.com/juancarlosjr97",imageURL:"https://github.com/juancarlosjr97.png",key:"juancarlosjr97"},{name:"\u741a\u81f4\u8fdc",alias:"juzhiyuan",url:"https://github.com/juzhiyuan",imageURL:"https://github.com/juzhiyuan.png",key:"juzhiyuan"},{name:"Kumar Aditya",alias:"kumaraditya303",url:"https://github.com/kumaraditya303",imageURL:"https://github.com/kumaraditya303.png",key:"kumaraditya303"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Pablo Vidal",alias:"limkinZero",url:"https://github.com/limkinZero",imageURL:"https://github.com/limkinZero.png",key:"limkinZero"},{name:"Power Lin",alias:"linyuxuanlin",url:"https://github.com/linyuxuanlin",imageURL:"https://github.com/linyuxuanlin.png",key:"linyuxuanlin"},{name:"Lisa Chandra",alias:"lisa761",url:"https://github.com/lisa761",imageURL:"https://github.com/lisa761.png",key:"lisa761"},{name:"LittleboyHarry",alias:"LittleboyHarry",url:"https://github.com/LittleboyHarry",imageURL:"https://github.com/LittleboyHarry.png",key:"LittleboyHarry"},{name:"Long Ho",alias:"longlho",url:"https://github.com/longlho",imageURL:"https://github.com/longlho.png",key:"longlho"},{name:"Matteo Manzinello",alias:"manzinello",url:"https://github.com/manzinello",imageURL:"https://github.com/manzinello.png",key:"manzinello"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Matan Borenkraout",alias:"MatanBobi",url:"https://github.com/MatanBobi",imageURL:"https://github.com/MatanBobi.png",key:"MatanBobi"},{name:"Miroiu Emanuel",alias:"miroiu",url:"https://github.com/miroiu",imageURL:"https://github.com/miroiu.png",key:"miroiu"},{name:"MisterFISHUP",alias:"MisterFISHUP",url:"https://github.com/MisterFISHUP",imageURL:"https://github.com/MisterFISHUP.png",key:"MisterFISHUP"},{name:"moonrailgun",alias:"moonrailgun",url:"https://github.com/moonrailgun",imageURL:"https://github.com/moonrailgun.png",key:"moonrailgun"},{name:"Sean Campbell",alias:"natac13",url:"https://github.com/natac13",imageURL:"https://github.com/natac13.png",key:"natac13"},{name:"Nico Jansen",alias:"nicojs",url:"https://github.com/nicojs",imageURL:"https://github.com/nicojs.png",key:"nicojs"},{name:"Nikolay Samokhvalov",alias:"NikolayS",url:"https://github.com/NikolayS",imageURL:"https://github.com/NikolayS.png",key:"NikolayS"},{name:"Nathan Bosscher",alias:"ntbosscher",url:"https://github.com/ntbosscher",imageURL:"https://github.com/ntbosscher.png",key:"ntbosscher"},{name:"Matt Oestreich",alias:"oze4",url:"https://github.com/oze4",imageURL:"https://github.com/oze4.png",key:"oze4"},{name:"philipp985",alias:"philipp985",url:"https://github.com/philipp985",imageURL:"https://github.com/philipp985.png",key:"philipp985"},{name:"Reece Dunham",alias:"RDIL",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png",key:"RDIL"},{name:"roydukkey",alias:"roydukkey",url:"https://github.com/roydukkey",imageURL:"https://github.com/roydukkey.png",key:"roydukkey"},{name:"Saihajpreet Singh",alias:"saihaj",url:"https://github.com/saihaj",imageURL:"https://github.com/saihaj.png",key:"saihaj"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"Sam Hrncir",alias:"samhrncir",url:"https://github.com/samhrncir",imageURL:"https://github.com/samhrncir.png",key:"samhrncir"},{name:"sammychinedu2ky",alias:"sammychinedu2ky",url:"https://github.com/sammychinedu2ky",imageURL:"https://github.com/sammychinedu2ky.png",key:"sammychinedu2ky"},{name:"saydo17",alias:"saydo17",url:"https://github.com/saydo17",imageURL:"https://github.com/saydo17.png",key:"saydo17"},{name:"Sergio Moreno",alias:"semoal",url:"https://github.com/semoal",imageURL:"https://github.com/semoal.png",key:"semoal"},{name:"Siemienik Pawel",alias:"Siemienik",url:"https://github.com/Siemienik",imageURL:"https://github.com/Siemienik.png",key:"Siemienik"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"Sam Sam",alias:"sksamuel",url:"https://github.com/sksamuel",imageURL:"https://github.com/sksamuel.png",key:"sksamuel"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Ankur Kedia",alias:"theankurkedia",url:"https://github.com/theankurkedia",imageURL:"https://github.com/theankurkedia.png",key:"theankurkedia"},{name:"Theodore Chu",alias:"TheodoreChu",url:"https://github.com/TheodoreChu",imageURL:"https://github.com/TheodoreChu.png",key:"TheodoreChu"},{name:"Tien Vo Xuan",alias:"tienvx",url:"https://github.com/tienvx",imageURL:"https://github.com/tienvx.png",key:"tienvx"},{name:"tokarchyn",alias:"tokarchyn",url:"https://github.com/tokarchyn",imageURL:"https://github.com/tokarchyn.png",key:"tokarchyn"},{name:"Tomas Fernandez",alias:"tomsfernandez",url:"https://github.com/tomsfernandez",imageURL:"https://github.com/tomsfernandez.png",key:"tomsfernandez"},{name:"Vamsi Krishna Reddy Satti",alias:"vamsi3",url:"https://github.com/vamsi3",imageURL:"https://github.com/vamsi3.png",key:"vamsi3"},{name:"Kevin Viglucci",alias:"viglucci",url:"https://github.com/viglucci",imageURL:"https://github.com/viglucci.png",key:"viglucci"},{name:"Welly",alias:"wellyshen",url:"https://github.com/wellyshen",imageURL:"https://github.com/wellyshen.png",key:"wellyshen"},{name:"wolf20482",alias:"wolf20482",url:"https://github.com/wolf20482",imageURL:"https://github.com/wolf20482.png",key:"wolf20482"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Yash Totale",alias:"YashTotale",url:"https://github.com/YashTotale",imageURL:"https://github.com/YashTotale.png",key:"YashTotale"},{name:"Yamagishi Kazutoshi",alias:"ykzts",url:"https://github.com/ykzts",imageURL:"https://github.com/ykzts.png",key:"ykzts"},{name:"Yuri Sulyma",alias:"ysulyma",url:"https://github.com/ysulyma",imageURL:"https://github.com/ysulyma.png",key:"ysulyma"},{name:"Yuval Hazaz",alias:"yuval-hazaz",url:"https://github.com/yuval-hazaz",imageURL:"https://github.com/yuval-hazaz.png",key:"yuval-hazaz"}],frontMatter:{mdx:{format:"md"},date:"2021-03-09T20:00",authors:["3alisaki","9oelM","apurvaojas","armano2","ArtFlag","asystentka-jolka","ataft","aukokyong","ayonious","B4nan","ben-qnimble","bennodev19","caglarturali","christian-bromann","dbrrt","edno","edulazaro","eric-hc","iamshadmirza","imbhargav5","iruzevic","jlin27","JoelMarcey","juancarlosjr97","juzhiyuan","kumaraditya303","lex111","limkinZero","linyuxuanlin","lisa761","LittleboyHarry","longlho","manzinello","massoudmaboudi","MatanBobi","miroiu","MisterFISHUP","moonrailgun","natac13","nicojs","NikolayS","ntbosscher","oze4","philipp985","RDIL","roydukkey","saihaj","SamChou19815","samhrncir","sammychinedu2ky","saydo17","semoal","Siemienik","Simek","sksamuel","slorber","theankurkedia","TheodoreChu","tienvx","tokarchyn","tomsfernandez","vamsi3","viglucci","wellyshen","wolf20482","yangshun","YashTotale","ykzts","ysulyma","yuval-hazaz"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.72",permalink:"/changelog/2.0.0-alpha.72"},nextItem:{title:"2.0.0-alpha.70",permalink:"/changelog/2.0.0-alpha.70"},listPageLink:"/changelog/page/3"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},t=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 70",id:"committers-70",level:2}];function n(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...s.components};return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4222",children:"#4222"})," feat(v2): add ability to set custom heading id (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4328",children:"#4328"})," feat(v2): Add playgroundPosition config for live codeblock (",(0,h.jsx)(e.a,{href:"https://github.com/tokarchyn",children:"@tokarchyn"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4209",children:"#4209"})," feat(v2): auto focus to tab if it is outside viewport (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4329",children:"#4329"})," feat(v2): add arabic translation (",(0,h.jsx)(e.a,{href:"https://github.com/3alisaki",children:"@3alisaki"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4325",children:"#4325"})," feat(v2): [theme-classic] add Polish translation (",(0,h.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4312",children:"#4312"})," feat(v2): Add Turkish translations for theme labels (",(0,h.jsx)(e.a,{href:"https://github.com/caglarturali",children:"@caglarturali"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4271",children:"#4271"})," feat(v2): add Farsi default translations (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4261",children:"#4261"})," feat(v2): add icon to generic sidebar link (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4109",children:"#4109"})," feat(v2): default canonical urls (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4308",children:"#4308"})," feat(v2): add --config option to CLI (",(0,h.jsx)(e.a,{href:"https://github.com/longlho",children:"@longlho"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4185",children:"#4185"})," feat(v2): allow extend PostCSS config (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4021",children:"#4021"})," feat(v2): Allow plugins to consume webpack stats (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4303",children:"#4303"})," feat(v2): add japanese translations (",(0,h.jsx)(e.a,{href:"https://github.com/ykzts",children:"@ykzts"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4295",children:"#4295"})," feat(v2): Add Interpolate / interpolate APIs + complete theme translations (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4278",children:"#4278"}),' feat(v2): ability to "escape" JSX in MDX files as code blocks (',(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4232",children:"#4232"})," feat(v2): editUrl functions should receive md doc permalink (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4121",children:"#4121"})," feat(v2): editUrl function for advanced use-cases (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4218",children:"#4218"})," feat(v2): support/use React v17 by default (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4215",children:"#4215"})," feat(v2): Add i18n default code translation bundles (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4140",children:"#4140"})," feat(v2): add support for RTL direction (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4199",children:"#4199"})," feat(v2): allow to change location of search bar (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3993",children:"#3993"})," feat(v2): themed logo in footer (",(0,h.jsx)(e.a,{href:"https://github.com/natac13",children:"@natac13"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4198",children:"#4198"})," feat(v2): add fonts loaders + webpack resolve.roots (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3998",children:"#3998"})," feat(v2): Cache hashed assets to dedicated folders (",(0,h.jsx)(e.a,{href:"https://github.com/kumaraditya303",children:"@kumaraditya303"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3979",children:"#3979"})," feat(v2): better error message for invalid plugin config (",(0,h.jsx)(e.a,{href:"https://github.com/9oelM",children:"@9oelM"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4168",children:"#4168"})," feat(v2): Extract/translate hardcoded labels from classic theme (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4098",children:"#4098"})," feat(v2): improve templates, use JSDoc type annotation, improve ",(0,h.jsx)(e.code,{children:"docusaurus.config.js"})," autocompletion (",(0,h.jsx)(e.a,{href:"https://github.com/LittleboyHarry",children:"@LittleboyHarry"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3986",children:"#3986"})," feat(v2): skip dependency install on docusaurus init (",(0,h.jsx)(e.a,{href:"https://github.com/kumaraditya303",children:"@kumaraditya303"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3949",children:"#3949"})," feat(v2): new docs edit options: editCurrentVersion + editLocalizedDocs (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),", ",(0,h.jsx)(e.code,{children:"lqip-loader"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4223",children:"#4223"})," chore(v2): upgrade dependencies + require Node 12 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4366",children:"#4366"})," fix(v2): align installed core-js version with babel config (",(0,h.jsx)(e.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4345",children:"#4345"})," fix(v2): always extract translations from site/src (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4342",children:"#4342"})," chore(v2): bump clean-css to 5.1.1 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4212",children:"#4212"})," fix(v2): typo in resolve.roots (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4155",children:"#4155"})," fix(v2): BaseUrl issue banner insertion should be prevented if JS can load (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4137",children:"#4137"})," fix(v2): escape apostrophes in route paths (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4136",children:"#4136"})," fix(v2): fix navigation from homepage (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4125",children:"#4125"})," fix(v2): baseUrl help banner should not be indexed by Google / SEO (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4080",children:"#4080"})," fix(v2): chokidar reloading debounced (",(0,h.jsx)(e.a,{href:"https://github.com/semoal",children:"@semoal"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3965",children:"#3965"})," fix(v2): fix svg loader for CSS files (",(0,h.jsx)(e.a,{href:"https://github.com/apurvaojas",children:"@apurvaojas"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3943",children:"#3943"})," fix(v2): disables all inlining in CleanCSS (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3941",children:"#3941"})," fix(v2): fix i18n build logging. (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4349",children:"#4349"})," fix(v2): fix update code translations script + update some translations (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4311",children:"#4311"})," fix(v2): fit footer in viewport when content area is too small (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4340",children:"#4340"})," fix(v2): prevent useless blog pages to be in search results (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4274",children:"#4274"})," fix(v2): theme classic should have lib-next prettified (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4267",children:"#4267"})," fix(v2): Allow null as valid for title of item in footer links. (",(0,h.jsx)(e.a,{href:"https://github.com/ben-qnimble",children:"@ben-qnimble"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4254",children:"#4254"})," fix(v2): fix LTR PostCSS bug on Netlify and monorepo symlinks (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4247",children:"#4247"})," fix(v2): make doc container full width when hidden sidebar (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4241",children:"#4241"})," fix(v2): avoid horizontal scrolling when long lines of code (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4200",children:"#4200"})," fix(v2): various minor bugs with location hash (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4195",children:"#4195"})," fix(v2): restore hamburger menu (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4189",children:"#4189"})," fix(v2): prevent click on item menu with children on mobiles (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4176",children:"#4176"})," fix(v2): make locale dropdown accessible from keyboard (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4163",children:"#4163"})," fix(v2): fix warning and improve styling inline TOC (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4162",children:"#4162"})," fix(v2): make more accessible skip link (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4160",children:"#4160"})," fix(v2): fix hreflang headers (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4147",children:"#4147"})," fix(v2): avoid misuse section tag in blog posts (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4146",children:"#4146"})," fix(v2): use current color for language icon (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4118",children:"#4118"})," fix(v2): navbar dropdown subitems should be translated properly (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4011",children:"#4011"})," fix(v2): fix accessibility issue with IconArrow (",(0,h.jsx)(e.a,{href:"https://github.com/natac13",children:"@natac13"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3968",children:"#3968"})," fix(v2): fix blog only contextual search (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4315",children:"#4315"})," fix(v2): make code blocks more standalone (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4277",children:"#4277"})," fix(v2): Code blocks should be LTR by default (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4318",children:"#4318"})," fix(v2): evaluate code in live editor on client only (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3954",children:"#3954"})," fix(v2): allow async/await in live code editor (",(0,h.jsx)(e.a,{href:"https://github.com/9oelM",children:"@9oelM"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4339",children:"#4339"})," fix(v2): search page results localization (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4304",children:"#4304"})," fix(v2): fix bad theme pluralization rules for some labels (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-cssnano-preset"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4240",children:"#4240"})," fix(v2): remove PostCSS plugin for combine duplicated selectors (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:["Other\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4234",children:"#4234"})," fix(v2): fix website versions page (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4233",children:"#4233"})," fix(v2): website editUrl should target upstream docs (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4067",children:"#4067"})," fix(v2): Fix blog post url/date (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3952",children:"#3952"})," docs(v2): Fix invalid json (",(0,h.jsx)(e.a,{href:"https://github.com/oze4",children:"@oze4"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4188",children:"#4188"})," fix(v2): prepend docsearch modal to body element (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4154",children:"#4154"})," fix(v2): add base url to opensearch.xml (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4166",children:"#4166"})," fix(v2): ideal image assets should be served under ./assets (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4092",children:"#4092"})," fix(v2): fix/enhance minor i18n issues reported (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3940",children:"#3940"})," fix(v2): i18n should not crash theme without footer (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4004",children:"#4004"})," fix(v2): Fix double trailingSlash in sitemap.xml (",(0,h.jsx)(e.a,{href:"https://github.com/ntbosscher",children:"@ntbosscher"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3970",children:"#3970"})," fix(v2): fix multi-instance mdx loaders not sandboxed correctly (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3903",children:"#3903"})," fix(v2): fix redirect toUrl (windows + trailing slash) (",(0,h.jsx)(e.a,{href:"https://github.com/saydo17",children:"@saydo17"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3944",children:"#3944"})," fix(v2): ignore style imports in excerpt (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4371",children:"#4371"})," refactor(v2): update Russian translation in classic theme (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4359",children:"#4359"})," polish(v2): [theme-classic] slightly improve Japanese translation (",(0,h.jsx)(e.a,{href:"https://github.com/MisterFISHUP",children:"@MisterFISHUP"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4350",children:"#4350"})," polish(v2): Updated theme label translations for Turkish (",(0,h.jsx)(e.a,{href:"https://github.com/caglarturali",children:"@caglarturali"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4351",children:"#4351"})," polish(v2): add japanese translation for #4304 (",(0,h.jsx)(e.a,{href:"https://github.com/ykzts",children:"@ykzts"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4309",children:"#4309"})," polish(v2): improved Farsi translation (",(0,h.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4279",children:"#4279"})," polish(v2): theme default translations for language de / german (",(0,h.jsx)(e.a,{href:"https://github.com/philipp985",children:"@philipp985"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4275",children:"#4275"})," polish(v2): Add more tags translations (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4246",children:"#4246"})," refactor(v2): add Russian translation for classic theme (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4242",children:"#4242"})," refactor(v2): use Link component for external links (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4244",children:"#4244"})," refactor(v2): clean-ups and fixes (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4193",children:"#4193"})," refactor(v2): update tabs to follow WAI-ARIA spec (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4194",children:"#4194"})," refactor(v2): use transform instead of top position for hideable navbar (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4167",children:"#4167"})," refactor(v2): minor styling improvements (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4169",children:"#4169"})," refactor(v2): remove delay after skip link pressed (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4086",children:"#4086"})," style(v2): add className to tab container (",(0,h.jsx)(e.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4352",children:"#4352"})," refactor(v2): format last updated date using Intl (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4243",children:"#4243"})," refactor(v2): introduce Seo component for internal using (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4344",children:"#4344"})," refactor(v2): format post date using Intl (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4257",children:"#4257"})," refactor(v2): improve notifier message (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4219",children:"#4219"})," refactor(v2): add more translatable strings (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:["Other\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4074",children:"#4074"})," polish(v2): improve codesandbox template package.json (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3953",children:"#3953"})," refactor(v2): fix debug plugin name (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3946",children:"#3946"})," refactor(v2): minor a11y tweaks (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:["Other\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4369",children:"#4369"})," docs(v2): various improvements (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4362",children:"#4362"})," docs(v2): Add stryker-mutator.io to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/nicojs",children:"@nicojs"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4354",children:"#4354"})," docs(v2): add trpgengine showcase (",(0,h.jsx)(e.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4346",children:"#4346"})," docs(v1): update phrasing for website dir relative to docs dir (",(0,h.jsx)(e.a,{href:"https://github.com/aukokyong",children:"@aukokyong"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4338",children:"#4338"})," docs(v2): update showcase instruction regarding tags + fix site tags (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4331",children:"#4331"})," docs(v2): add ocpeasy to users (",(0,h.jsx)(e.a,{href:"https://github.com/dbrrt",children:"@dbrrt"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4307",children:"#4307"})," docs(v2): Add RactivePlayer to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/ysulyma",children:"@ysulyma"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4297",children:"#4297"})," docs(v2): Fix examples by importing React (",(0,h.jsx)(e.a,{href:"https://github.com/roydukkey",children:"@roydukkey"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4296",children:"#4296"})," docs(v2): move migrated sites from v1 to v2 showcase (",(0,h.jsx)(e.a,{href:"https://github.com/lisa761",children:"@lisa761"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4293",children:"#4293"})," docs(v2): Added React Native ARIA to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/theankurkedia",children:"@theankurkedia"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4284",children:"#4284"})," docs(v2): Add AttoBot website to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/wolf20482",children:"@wolf20482"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4285",children:"#4285"})," docs(v2): escape more jsx in mdx files for Crowdin (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4283",children:"#4283"})," docs(v2): Add Postgres.ai to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/NikolayS",children:"@NikolayS"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4282",children:"#4282"})," docs: update Netlify deploy status badge (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4259",children:"#4259"})," docs(v2): improve cli docs (",(0,h.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4266",children:"#4266"})," docs(v2): update agilets banner (",(0,h.jsx)(e.a,{href:"https://github.com/bennodev19",children:"@bennodev19"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4263",children:"#4263"})," docs(v2): remove npx and use github action to configure ssh key (",(0,h.jsx)(e.a,{href:"https://github.com/MatanBobi",children:"@MatanBobi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4262",children:"#4262"})," docs(v2): Added kotest to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/sksamuel",children:"@sksamuel"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4256",children:"#4256"})," docs(v2): Add docusaurus2-graphql-doc-generator to community resources (",(0,h.jsx)(e.a,{href:"https://github.com/edno",children:"@edno"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4252",children:"#4252"})," docs(v2): Added mailgo to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/manzinello",children:"@manzinello"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4251",children:"#4251"})," docs(v2): Add Axioms to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/limkinZero",children:"@limkinZero"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4237",children:"#4237"})," docs(v2): Replace mbt-bundle by sicope-model (",(0,h.jsx)(e.a,{href:"https://github.com/tienvx",children:"@tienvx"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4236",children:"#4236"})," docs(v2): v2 migration should mention RSS feed url change (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4230",children:"#4230"})," docs(v2): fix npm/yarn command example for swizzling TypeScript theme components (",(0,h.jsx)(e.a,{href:"https://github.com/YashTotale",children:"@YashTotale"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4229",children:"#4229"})," docs(v2): Fix link to slash introduction svg (",(0,h.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4226",children:"#4226"})," docs(v2): Removing wrong parenthesis on image variable (",(0,h.jsx)(e.a,{href:"https://github.com/juancarlosjr97",children:"@juancarlosjr97"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4225",children:"#4225"})," docs(v2): added Apache APISIX (",(0,h.jsx)(e.a,{href:"https://github.com/juzhiyuan",children:"@juzhiyuan"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4224",children:"#4224"})," docs(v2): Add MikroORM site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/B4nan",children:"@B4nan"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4220",children:"#4220"})," Add WebdriverIO docs page as showcase (",(0,h.jsx)(e.a,{href:"https://github.com/christian-bromann",children:"@christian-bromann"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4210",children:"#4210"})," misc: add requirements for sites being added to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4207",children:"#4207"})," docs(v2): Added Console Table Documentation Site to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4204",children:"#4204"})," docs(v1): fixing a broken link in blog posts (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4178",children:"#4178"})," docs(v2): localize 404 page with Netlify + docs (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4177",children:"#4177"})," docs(v2): Add docusaurus-plugin-remote-content to resources list (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4172",children:"#4172"})," docs(v2): Add react-hooks.org to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/imbhargav5",children:"@imbhargav5"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4173",children:"#4173"})," docs(v2): typo fixing double colon (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4164",children:"#4164"})," docs(v2): add a note for images not rendered on dev server (",(0,h.jsx)(e.a,{href:"https://github.com/yuval-hazaz",children:"@yuval-hazaz"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4161",children:"#4161"})," docs(v2): Add docusaurus-theme-github-codeblock (",(0,h.jsx)(e.a,{href:"https://github.com/christian-bromann",children:"@christian-bromann"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4158",children:"#4158"})," docs(v2): improve bad static assets doc + remove some useless useBaseUrl usage (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4144",children:"#4144"})," docs(v2): community docs typo fix (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4143",children:"#4143"})," docs(v2): guide docs typo fix (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4141",children:"#4141"})," docs(v2): plugins docs typo fix (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4139",children:"#4139"})," docs(v2): Add Rematch site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/semoal",children:"@semoal"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4128",children:"#4128"})," docs(v2): remove duplicate link from docs about Docusaurus1 (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4129",children:"#4129"})," docs(v2): typo fix in Migration Docs (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4127",children:"#4127"})," docs(v2): remove unnecessary brace from installation doc (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4130",children:"#4130"})," docs(v2): typo in i18n docs (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4112",children:"#4112"})," docs(v2): Do not encourage using the permalink prop (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4106",children:"#4106"})," docs(v2): update broken link on resources page (",(0,h.jsx)(e.a,{href:"https://github.com/eric-hc",children:"@eric-hc"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4084",children:"#4084"})," docs(v2): Use the TOCInline component in config doc (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4020",children:"#4020"})," docs(v2): 2020 recap blog post (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4009",children:"#4009"})," docs(v2): add hideableSidebar option to config demo (",(0,h.jsx)(e.a,{href:"https://github.com/natac13",children:"@natac13"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4062",children:"#4062"})," docs(v2): Add codesandbox integration (",(0,h.jsx)(e.a,{href:"https://github.com/sammychinedu2ky",children:"@sammychinedu2ky"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4058",children:"#4058"})," docs(v2): Include new.docusaurus.io CodeSandbox in issue templates + README (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4053",children:"#4053"})," docs(v2): Add Eightshift Docs site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/iruzevic",children:"@iruzevic"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4048",children:"#4048"})," docs(v1): Docker: remind the user to use the --host flag (",(0,h.jsx)(e.a,{href:"https://github.com/tomsfernandez",children:"@tomsfernandez"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4047",children:"#4047"})," docs(v1): version page should recommend v2 (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4046",children:"#4046"})," docs(v2): add sciwp to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/edulazaro",children:"@edulazaro"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4036",children:"#4036"})," docs(v2): Add Nodify to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/miroiu",children:"@miroiu"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4038",children:"#4038"})," docs(v1): suggest to use Docusaurus 2 even for non-FB websites (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4026",children:"#4026"})," docs(v2): Add FlexIt to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/ataft",children:"@ataft"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4022",children:"#4022"})," docs: fix typo from 'dissapear' to 'disappear' (",(0,h.jsx)(e.a,{href:"https://github.com/vamsi3",children:"@vamsi3"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4002",children:"#4002"})," docs(v2): Add how to run your own DocSearch (",(0,h.jsx)(e.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3997",children:"#3997"})," docs(v2): Add Datagit site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3990",children:"#3990"})," docs(v2): Add wiki-powerto site showcase (",(0,h.jsx)(e.a,{href:"https://github.com/linyuxuanlin",children:"@linyuxuanlin"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3991",children:"#3991"})," docs(v2): add overwriting css variables for dark mode (",(0,h.jsx)(e.a,{href:"https://github.com/natac13",children:"@natac13"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3987",children:"#3987"})," docs(v2): Add AgileTs site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/bennodev19",children:"@bennodev19"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3978",children:"#3978"})," docs(v2): Add documentation for docs multi-instance support (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3977",children:"#3977"})," docs(v2): nudge users to add site to showcase (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3975",children:"#3975"})," docs(v2): Reorganize/split the guides doc / markdown sections (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3976",children:"#3976"})," docs(v2): Add AI-Speaker site to showcase page (",(0,h.jsx)(e.a,{href:"https://github.com/asystentka-jolka",children:"@asystentka-jolka"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3974",children:"#3974"})," docs(v2): doc typo on sidebar admonition (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3962",children:"#3962"})," docs(v2): Add migration info doc regarding docs folder location (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3950",children:"#3950"})," docs(v2): update GitHub entreprise deployment doc (",(0,h.jsx)(e.a,{href:"https://github.com/samhrncir",children:"@samhrncir"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3945",children:"#3945"})," docs(v2): Added information about setting ",(0,h.jsx)(e.code,{children:"/"})," in routeBasePath (",(0,h.jsx)(e.a,{href:"https://github.com/Siemienik",children:"@Siemienik"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4356",children:"#4356"})," polish(v2): [theme-classic] add Chinese translations (zh-Hant & zh-Hans) (",(0,h.jsx)(e.a,{href:"https://github.com/MisterFISHUP",children:"@MisterFISHUP"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4126",children:"#4126"})," docs(v2): do not recommend using useBaseUrl() hook in most cases (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4049",children:"#4049"})," docs(v1): version page should recommend v2 (bis) (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4014",children:"#4014"})," docs(v2): i18n doc + polish (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-cssnano-preset"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),", ",(0,h.jsx)(e.code,{children:"lqip-loader"}),", ",(0,h.jsx)(e.code,{children:"stylelint-copyright"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4034",children:"#4034"})," docs(v2): Add READMEs to v2 packages (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3881",children:"#3881"})," docs(v2): update FB OSS logo (",(0,h.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:["Other\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4372",children:"#4372"})," chore(v1): release docusaurus v1.14.7 (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4368",children:"#4368"})," chore(deps): bump elliptic from 6.5.3 to 6.5.4 (",(0,h.jsx)(e.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4365",children:"#4365"})," chore: unstable yarnlock (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4337",children:"#4337"})," misc: restore build size bot (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4289",children:"#4289"})," chore(v2): remove docs for alpha v69 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4253",children:"#4253"})," chore(v2): remove docs for alpha v68 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4248",children:"#4248"})," chore(v2): Fix build size bot (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4214",children:"#4214"})," chore(v2): setup for i18n staging deployment (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4159",children:"#4159"})," chore(v2): fix build size bot again (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4156",children:"#4156"})," chore(v2): fix build size bot monitoring of js/css assets (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4100",children:"#4100"})," chore(v2): remove docs for alpha v66 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4077",children:"#4077"})," chore(v2): fix unstable master yarn.lock (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4063",children:"#4063"}),' chore(v2): Regen codesandbox templates + add template: "docusaurus" (',(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4056",children:"#4056"})," chore(v2): update codesandbox redirect (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4041",children:"#4041"})," chore(v1): revert v1 netlify.toml (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4040",children:"#4040"})," chore(v1): upgrade v1 Crowdin cli + CI config (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4030",children:"#4030"})," chore(v2): install Crowdin cli through npm package (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4003",children:"#4003"})," chore: add DevContainer config for GitHub codespaces (",(0,h.jsx)(e.a,{href:"https://github.com/kumaraditya303",children:"@kumaraditya303"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4001",children:"#4001"})," chore(v2): Upgrade crowdin (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3995",children:"#3995"})," chore(v2): remove docs for alpha v65 (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3960",children:"#3960"})," fix(v2): remove duplicate section on Versions page (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4370",children:"#4370"})," chore(v2): update infima (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),", ",(0,h.jsx)(e.code,{children:"lqip-loader"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4361",children:"#4361"})," refactor(v2): remove duplicated lodash dependencies and import only what needed (",(0,h.jsx)(e.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4270",children:"#4270"})," chore(v2): upgrade react-dev-utils (",(0,h.jsx)(e.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4264",children:"#4264"})," chore(v2): bump/align deps in monorepo: commander, semver, fs-extra (",(0,h.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4265",children:"#4265"})," chore(v2): PostCSS peer dep fix (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4091",children:"#4091"})," refactor(v2): Switch from inquirer to prompts (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4066",children:"#4066"})," chore(v2): Update a few dependencies (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),", ",(0,h.jsx)(e.code,{children:"lqip-loader"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4148",children:"#4148"})," chore(v2): upgrade dependencies (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4120",children:"#4120"})," chore(v2): Update workbox to v6 (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4081",children:"#4081"})," chore(v2): Update webpack-related dependencies, pre-work to migrate to Webpack 5 (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4012",children:"#4012"})," chore(v2): docusaurus-init: switch from inquirer to prompts (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4005",children:"#4005"})," chore(v2): prettier fixes (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-migrate"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3988",children:"#3988"})," chore(v2): fix date-sensitive test fixture (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),", ",(0,h.jsx)(e.code,{children:"stylelint-copyright"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3959",children:"#3959"})," chore(v2): fix windows Jest tests (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.code,{children:"docusaurus-cssnano-preset"}),", ",(0,h.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,h.jsx)(e.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:[(0,h.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/4355",children:"#4355"})," perf(v2): improve blog mdx-loader and postcss loader (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(e.h2,{id:"committers-70",children:"Committers: 70"}),"\n",(0,h.jsxs)(e.ul,{children:["\n",(0,h.jsxs)(e.li,{children:["Alexey Pyltsyn (",(0,h.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Ali Saki (",(0,h.jsx)(e.a,{href:"https://github.com/3alisaki",children:"@3alisaki"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Andrew Taft (",(0,h.jsx)(e.a,{href:"https://github.com/ataft",children:"@ataft"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Ankur Kedia (",(0,h.jsx)(e.a,{href:"https://github.com/theankurkedia",children:"@theankurkedia"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Apurva Ojas (",(0,h.jsx)(e.a,{href:"https://github.com/apurvaojas",children:"@apurvaojas"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Armano (",(0,h.jsx)(e.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Arthur (",(0,h.jsx)(e.a,{href:"https://github.com/ArtFlag",children:"@ArtFlag"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Bartosz Kaszubowski (",(0,h.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Ben (",(0,h.jsx)(e.a,{href:"https://github.com/ben-qnimble",children:"@ben-qnimble"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["BennoDev (",(0,h.jsx)(e.a,{href:"https://github.com/bennodev19",children:"@bennodev19"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Bhargav Ponnapalli (",(0,h.jsx)(e.a,{href:"https://github.com/imbhargav5",children:"@imbhargav5"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Christian Bromann (",(0,h.jsx)(e.a,{href:"https://github.com/christian-bromann",children:"@christian-bromann"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["David Barrat (",(0,h.jsx)(e.a,{href:"https://github.com/dbrrt",children:"@dbrrt"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Eduardo L\xe1zaro (",(0,h.jsx)(e.a,{href:"https://github.com/edulazaro",children:"@edulazaro"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Eric Carboni (",(0,h.jsx)(e.a,{href:"https://github.com/eric-hc",children:"@eric-hc"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Gr\xe9gory Heitz (",(0,h.jsx)(e.a,{href:"https://github.com/edno",children:"@edno"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Ivan Ru\u017eevi\u0107 (",(0,h.jsx)(e.a,{href:"https://github.com/iruzevic",children:"@iruzevic"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Jessica Lin (",(0,h.jsx)(e.a,{href:"https://github.com/jlin27",children:"@jlin27"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Joel M (",(0,h.jsx)(e.a,{href:"https://github.com/9oelM",children:"@9oelM"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Joel Marcey (",(0,h.jsx)(e.a,{href:"https://github.com/JoelMarcey",children:"@JoelMarcey"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Jola (",(0,h.jsx)(e.a,{href:"https://github.com/asystentka-jolka",children:"@asystentka-jolka"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Juan Carlos Blanco Delgado (",(0,h.jsx)(e.a,{href:"https://github.com/juancarlosjr97",children:"@juancarlosjr97"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Kevin Viglucci (",(0,h.jsx)(e.a,{href:"https://github.com/viglucci",children:"@viglucci"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Kumar Aditya (",(0,h.jsx)(e.a,{href:"https://github.com/kumaraditya303",children:"@kumaraditya303"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Lisa Chandra (",(0,h.jsx)(e.a,{href:"https://github.com/lisa761",children:"@lisa761"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["LittleboyHarry (",(0,h.jsx)(e.a,{href:"https://github.com/LittleboyHarry",children:"@LittleboyHarry"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Long Ho (",(0,h.jsx)(e.a,{href:"https://github.com/longlho",children:"@longlho"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Martin Ad\xe1mek (",(0,h.jsx)(e.a,{href:"https://github.com/B4nan",children:"@B4nan"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Massoud Maboudi (",(0,h.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Matan Borenkraout (",(0,h.jsx)(e.a,{href:"https://github.com/MatanBobi",children:"@MatanBobi"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Matt Oestreich (",(0,h.jsx)(e.a,{href:"https://github.com/oze4",children:"@oze4"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Matteo Manzinello (",(0,h.jsx)(e.a,{href:"https://github.com/manzinello",children:"@manzinello"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Miroiu Emanuel (",(0,h.jsx)(e.a,{href:"https://github.com/miroiu",children:"@miroiu"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Mohd Shad Mirza (",(0,h.jsx)(e.a,{href:"https://github.com/iamshadmirza",children:"@iamshadmirza"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Nahiyan Kamal (",(0,h.jsx)(e.a,{href:"https://github.com/ayonious",children:"@ayonious"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Nathan Bosscher (",(0,h.jsx)(e.a,{href:"https://github.com/ntbosscher",children:"@ntbosscher"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Nico Jansen (",(0,h.jsx)(e.a,{href:"https://github.com/nicojs",children:"@nicojs"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Nikolay Samokhvalov (",(0,h.jsx)(e.a,{href:"https://github.com/NikolayS",children:"@NikolayS"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Pablo Vidal (",(0,h.jsx)(e.a,{href:"https://github.com/limkinZero",children:"@limkinZero"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Power Lin (",(0,h.jsx)(e.a,{href:"https://github.com/linyuxuanlin",children:"@linyuxuanlin"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Reece Dunham (",(0,h.jsx)(e.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Saihajpreet Singh (",(0,h.jsx)(e.a,{href:"https://github.com/saihaj",children:"@saihaj"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Sam Hrncir (",(0,h.jsx)(e.a,{href:"https://github.com/samhrncir",children:"@samhrncir"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Sam Sam (",(0,h.jsx)(e.a,{href:"https://github.com/sksamuel",children:"@sksamuel"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Sam Zhou (",(0,h.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Sean Campbell (",(0,h.jsx)(e.a,{href:"https://github.com/natac13",children:"@natac13"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Sergio Moreno (",(0,h.jsx)(e.a,{href:"https://github.com/semoal",children:"@semoal"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Siemienik Pawel (",(0,h.jsx)(e.a,{href:"https://github.com/Siemienik",children:"@Siemienik"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,h.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Theodore Chu (",(0,h.jsx)(e.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Tien Vo Xuan (",(0,h.jsx)(e.a,{href:"https://github.com/tienvx",children:"@tienvx"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Tomas Fernandez (",(0,h.jsx)(e.a,{href:"https://github.com/tomsfernandez",children:"@tomsfernandez"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Vamsi Krishna Reddy Satti (",(0,h.jsx)(e.a,{href:"https://github.com/vamsi3",children:"@vamsi3"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Welly (",(0,h.jsx)(e.a,{href:"https://github.com/wellyshen",children:"@wellyshen"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Yamagishi Kazutoshi (",(0,h.jsx)(e.a,{href:"https://github.com/ykzts",children:"@ykzts"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Yangshun Tay (",(0,h.jsx)(e.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Yash Totale (",(0,h.jsx)(e.a,{href:"https://github.com/YashTotale",children:"@YashTotale"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Yuri Sulyma (",(0,h.jsx)(e.a,{href:"https://github.com/ysulyma",children:"@ysulyma"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["Yuval Hazaz (",(0,h.jsx)(e.a,{href:"https://github.com/yuval-hazaz",children:"@yuval-hazaz"}),")"]}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/MisterFISHUP",children:"@MisterFISHUP"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/aukokyong",children:"@aukokyong"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/philipp985",children:"@philipp985"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/roydukkey",children:"@roydukkey"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/sammychinedu2ky",children:"@sammychinedu2ky"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/saydo17",children:"@saydo17"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/tokarchyn",children:"@tokarchyn"})}),"\n",(0,h.jsx)(e.li,{children:(0,h.jsx)(e.a,{href:"https://github.com/wolf20482",children:"@wolf20482"})}),"\n",(0,h.jsxs)(e.li,{children:["moonrailgun (",(0,h.jsx)(e.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["\xc7a\u011flar Tural\u0131 (",(0,h.jsx)(e.a,{href:"https://github.com/caglarturali",children:"@caglarturali"}),")"]}),"\n",(0,h.jsxs)(e.li,{children:["\u741a\u81f4\u8fdc (",(0,h.jsx)(e.a,{href:"https://github.com/juzhiyuan",children:"@juzhiyuan"}),")"]}),"\n"]})]})}function u(s={}){const{wrapper:e}={...(0,r.a)(),...s.components};return e?(0,h.jsx)(e,{...s,children:(0,h.jsx)(n,{...s})}):n(s)}},71670:(s,e,i)=>{i.d(e,{Z:()=>l,a:()=>c});var h=i(27378);const r={},o=h.createContext(r);function c(s){const e=h.useContext(o);return h.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(r):s.components||r:c(s.components),h.createElement(o.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/47d4c0e5.c5ec62e2.js b/assets/js/47d4c0e5.c5ec62e2.js new file mode 100644 index 0000000000..318cb3c05e --- /dev/null +++ b/assets/js/47d4c0e5.c5ec62e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72665],{58402:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var o=n(24246),a=n(71670);const r={mdx:{format:"md"},date:"2023-09-20T19:00"},s="2.4.2",c={permalink:"/changelog/2.4.2",source:"@site/changelog/source/2.4.2.md",title:"2.4.2",description:"Bad npm publish, please use 2.4.3",date:"2023-09-20T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2023-09-20T19:00"},unlisted:!1,prevItem:{title:"2.4.3",permalink:"/changelog/2.4.3"},nextItem:{title:"2.4.1",permalink:"/changelog/2.4.1"},listPageLink:"/changelog/"},i={authorsImageUrls:[]},u=[];function l(e){return(0,o.jsx)(o.Fragment,{})}function m(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var o=n(27378);const a={},r=o.createContext(a);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/48325788.2483d3d4.js b/assets/js/48325788.2483d3d4.js new file mode 100644 index 0000000000..c7e4f10a2b --- /dev/null +++ b/assets/js/48325788.2483d3d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47185],{897:(s,e,i)=>{i.r(e),i.d(e,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>n});var r=i(24246),h=i(71670);const c={mdx:{format:"md"},date:"2021-08-26T20:00",authors:["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},a="2.0.0-beta.5",l={permalink:"/changelog/2.0.0-beta.5",source:"@site/changelog/source/2.0.0-beta.5.md",title:"2.0.0-beta.5",description:"New Feature",date:"2021-08-26T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Palash Shrivastava",alias:"BattleOfPlassey",url:"https://github.com/BattleOfPlassey",imageURL:"https://github.com/BattleOfPlassey.png",key:"BattleOfPlassey"},{name:"David Seal",alias:"dbseal",url:"https://github.com/dbseal",imageURL:"https://github.com/dbseal.png",key:"dbseal"},{name:"Deepak Prabhakara",alias:"deepakprabhakara",url:"https://github.com/deepakprabhakara",imageURL:"https://github.com/deepakprabhakara.png",key:"deepakprabhakara"},{name:"Erick Zhao",alias:"erickzhao",url:"https://github.com/erickzhao",imageURL:"https://github.com/erickzhao.png",key:"erickzhao"},{name:"Federico Aloi",alias:"faloi",url:"https://github.com/faloi",imageURL:"https://github.com/faloi.png",key:"faloi"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Fouad Matin",alias:"fouad",url:"https://github.com/fouad",imageURL:"https://github.com/fouad.png",key:"fouad"},{name:"Julien Neuhart",alias:"gulien",url:"https://github.com/gulien",imageURL:"https://github.com/gulien.png",key:"gulien"},{name:"Hamza Hamidi",alias:"hamzahamidi",url:"https://github.com/hamzahamidi",imageURL:"https://github.com/hamzahamidi.png",key:"hamzahamidi"},{name:"HaochenQ",alias:"HaochenQ",url:"https://github.com/HaochenQ",imageURL:"https://github.com/HaochenQ.png",key:"HaochenQ"},{name:"Dmitry Zhifarsky",alias:"incendial",url:"https://github.com/incendial",imageURL:"https://github.com/incendial.png",key:"incendial"},{name:"Isaac Philip",alias:"isaac-philip",url:"https://github.com/isaac-philip",imageURL:"https://github.com/isaac-philip.png",key:"isaac-philip"},{name:"Yan Ivan Evdokimov",alias:"jansivans",url:"https://github.com/jansivans",imageURL:"https://github.com/jansivans.png",key:"jansivans"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Jonny Burger",alias:"JonnyBurger",url:"https://github.com/JonnyBurger",imageURL:"https://github.com/JonnyBurger.png",key:"JonnyBurger"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Marko Saric",alias:"metmarkosaric",url:"https://github.com/metmarkosaric",imageURL:"https://github.com/metmarkosaric.png",key:"metmarkosaric"},{name:"Michal S\xe4nger",alias:"michalsanger",url:"https://github.com/michalsanger",imageURL:"https://github.com/michalsanger.png",key:"michalsanger"},{name:"Garry",alias:"neaped",url:"https://github.com/neaped",imageURL:"https://github.com/neaped.png",key:"neaped"},{name:"Pierre-Gilles Leymarie",alias:"Pierre-Gilles",url:"https://github.com/Pierre-Gilles",imageURL:"https://github.com/Pierre-Gilles.png",key:"Pierre-Gilles"},{name:"Sam Wall",alias:"sjwall",url:"https://github.com/sjwall",imageURL:"https://github.com/sjwall.png",key:"sjwall"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tunghsiao Liu",alias:"sparanoid",url:"https://github.com/sparanoid",imageURL:"https://github.com/sparanoid.png",key:"sparanoid"},{name:"wan-nyan-wan",alias:"wan-nyan-wan",url:"https://github.com/wan-nyan-wan",imageURL:"https://github.com/wan-nyan-wan.png",key:"wan-nyan-wan"},{name:"Paul O\u2019Shannessy",alias:"zpao",url:"https://github.com/zpao",imageURL:"https://github.com/zpao.png",key:"zpao"}],frontMatter:{mdx:{format:"md"},date:"2021-08-26T20:00",authors:["BattleOfPlassey","dbseal","deepakprabhakara","erickzhao","faloi","forresst","fouad","gulien","hamzahamidi","HaochenQ","incendial","isaac-philip","jansivans","johnnyreilly","JonnyBurger","Josh-Cena","lex111","massoudmaboudi","metmarkosaric","michalsanger","neaped","Pierre-Gilles","sjwall","slorber","sparanoid","wan-nyan-wan","zpao"]},unlisted:!1,prevItem:{title:"2.0.0-beta.6",permalink:"/changelog/2.0.0-beta.6"},nextItem:{title:"2.0.0-beta.4",permalink:"/changelog/2.0.0-beta.4"},listPageLink:"/changelog/page/2"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},n=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 27",id:"committers-27",level:2}];function t(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5396",children:"#5396"})," feat(plugin-blog): multi-authors support + authors.yml global configuration (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5371",children:"#5371"})," feat: make blog config options and navbar versions dropdown label translatable (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5375",children:"#5375"})," feat: add metatags support for seo / blogposts #5373 (",(0,r.jsx)(e.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3646",children:"#3646"})," feat: doc tags (same as blog tags) (",(0,r.jsx)(e.a,{href:"https://github.com/isaac-philip",children:"@isaac-philip"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5354",children:"#5354"})," feat(plugin-blog): allow ",(0,r.jsx)(e.code,{children:"'ALL'"})," as ",(0,r.jsx)(e.code,{children:"postsPerPage"})," option value (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5330",children:"#5330"})," feat: Markdown page-specific head metadatas (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5322",children:"#5322"})," feat: structured data for blog posts (",(0,r.jsx)(e.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5314",children:"#5314"})," feat(v2): add cs (Czech) translations for docusaurus-theme-classic (",(0,r.jsx)(e.a,{href:"https://github.com/michalsanger",children:"@michalsanger"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5233",children:"#5233"})," feat: new init template classic-typescript (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5309",children:"#5309"})," feat: blog posts support /YYYY/MM/DD/blog-post/index.md pattern + blog frontmatter can reference relative images (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5299",children:"#5299"})," feat: mdx loader fallback, allow importing mdx docs from anywhere (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3646",children:"#3646"})," feat: doc tags (same as blog tags) (",(0,r.jsx)(e.a,{href:"https://github.com/isaac-philip",children:"@isaac-philip"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5345",children:"#5345"})," refactor: rename Git master branch to main (",(0,r.jsx)(e.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5349",children:"#5349"})," refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5264",children:"#5264"})," fix: apply proper class for active doc item on mobiles + avoid duplicated classes (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5425",children:"#5425"})," fix: toc does not highlight clicked anchor + use scroll-margin-top (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5424",children:"#5424"})," refactor: make dynamic authors layout via CSS only (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5422",children:"#5422"})," fix: make tags wrapping properly (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5419",children:"#5419"})," fix: various fixes back-to-top button (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5361",children:"#5361"})," fix: refactor TOC highlighting + handle edge cases (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5357",children:"#5357"})," fix: code blocks should scroll in RTL direction (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5346",children:"#5346"})," fix: author/image adjustments in BlogPosting schema (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5240",children:"#5240"})," fix: remove top margin only from directly first element (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5317",children:"#5317"})," fix: make proper highlighting doc link if no sidebar (",(0,r.jsx)(e.a,{href:"https://github.com/hamzahamidi",children:"@hamzahamidi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5316",children:"#5316"})," fix: avoid extra default active class on doc sidebar item (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5319",children:"#5319"})," fix: unbreak highlighting regular navbar links (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5264",children:"#5264"})," fix: apply proper class for active doc item on mobiles + avoid duplicated classes (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5275",children:"#5275"})," fix: improve spanish translation (",(0,r.jsx)(e.a,{href:"https://github.com/faloi",children:"@faloi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5262",children:"#5262"})," fix: show secondary menu if even there is no main one (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5426",children:"#5426"})," fix: Make update-notifier fail-safe if no permission to read configStore (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5398",children:"#5398"})," fix: fix write-translations warning for theme-common translations (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5381",children:"#5381"})," fix: canary releases should ignore notifier updates (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5339",children:"#5339"})," fix: add admonitions support to mdx partials loaded through the fallback mdx loader (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5311",children:"#5311"})," fix: docusaurus serve logs wrong port if 3000 is taken (",(0,r.jsx)(e.a,{href:"https://github.com/wan-nyan-wan",children:"@wan-nyan-wan"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5308",children:"#5308"})," fix: remove unexpected whitespaces in CSS bundle (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5268",children:"#5268"})," fix: fix wrong regex that removes extra letters from swizzled component names (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5399",children:"#5399"})," fix: fix site unlocalized 404 pages + aggressive Netlify /assets caching (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5249",children:"#5249"})," fix: fix Crowdin mapping for pt-BR (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5383",children:"#5383"})," fix: fix Locale Dropdown RTL icon + Webpack aliases ordering (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5370",children:"#5370"})," fix(init): fix links to feature images in classic-typescript (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5364",children:"#5364"})," fix: unbreak Details component (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5297",children:"#5297"})," fix: fix constant value import (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5334",children:"#5334"})," fix: plugin ideal-image should generate filename with a hash even in development (",(0,r.jsx)(e.a,{href:"https://github.com/Pierre-Gilles",children:"@Pierre-Gilles"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5290",children:"#5290"})," fix: make successful build if missing favicon (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5270",children:"#5270"})," fix: ability to link md files with relative paths when paths contain space (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5261",children:"#5261"})," fix: fix various TS errors (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5402",children:"#5402"})," refactor: improve styles of Details component (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5386",children:"#5386"})," refactor: various tags improvements (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5377",children:"#5377"})," refactor: make main heading font size changeable via CSS var (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5355",children:"#5355"})," refactor: add blog microdata in markup instead of use JSON-LD (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5365",children:"#5365"})," refactor(v2): improved Farsi default translations (",(0,r.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5280",children:"#5280"})," refactor(v2): improved Farsi default translations (",(0,r.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5389",children:"#5389"})," refactor: clean Canny integration + rename 'Feedback' to 'Feature Requests' + improve TS doc page (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5242",children:"#5242"})," refactor: reduce ESLint warnings / better typing (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5423",children:"#5423"})," docs: clarify using custom attributes for navbar link (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5421",children:"#5421"})," docs: add Indent to showcase (",(0,r.jsx)(e.a,{href:"https://github.com/fouad",children:"@fouad"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5405",children:"#5405"})," docs: add Gotenberg to showcase (",(0,r.jsx)(e.a,{href:"https://github.com/gulien",children:"@gulien"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5406",children:"#5406"})," docs: specify proper min Node.js version for Travis CI example (",(0,r.jsx)(e.a,{href:"https://github.com/BattleOfPlassey",children:"@BattleOfPlassey"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5390",children:"#5390"})," docs(v2): showcase BoxyHQ (",(0,r.jsx)(e.a,{href:"https://github.com/deepakprabhakara",children:"@deepakprabhakara"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5376",children:"#5376"})," docs(v2): Update Datagit site to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5372",children:"#5372"})," docs: remove docusaurus-preset-name from preset doc (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5366",children:"#5366"})," docs: Add drayman to showcase (",(0,r.jsx)(e.a,{href:"https://github.com/jansivans",children:"@jansivans"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5369",children:"#5369"})," docs(v2): Add Nocalhost website to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/neaped",children:"@neaped"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5351",children:"#5351"})," docs(website): bump announcement bar + include Twitter link + refactor site colors (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5352",children:"#5352"})," docs: update ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-sass"})," instructions (",(0,r.jsx)(e.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5332",children:"#5332"})," docs(v2): add mdx-mermaid to resources (",(0,r.jsx)(e.a,{href:"https://github.com/sjwall",children:"@sjwall"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5331",children:"#5331"})," docs: Changelog page should display TOC with releases (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5329",children:"#5329"})," docs: add Haochen to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/HaochenQ",children:"@HaochenQ"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5313",children:"#5313"})," docs: try to make plugin/preset config less confusing (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5296",children:"#5296"})," docs: update canary doc (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5219",children:"#5219"})," docs: refactor API documentation (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5271",children:"#5271"})," Add Plausible Analytics docs to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/metmarkosaric",children:"@metmarkosaric"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5283",children:"#5283"})," docs: fix broken link to syncing tab choices section (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5259",children:"#5259"})," docs(v2): update Remotion website picture in showcase (",(0,r.jsx)(e.a,{href:"https://github.com/JonnyBurger",children:"@JonnyBurger"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5260",children:"#5260"})," docs(v2): add Dart Code Metrics site to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/incendial",children:"@incendial"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5253",children:"#5253"})," docs: Fix typo ",(0,r.jsx)(e.code,{children:"2-resources.md"})," (",(0,r.jsx)(e.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5248",children:"#5248"})," docs(v2): add docusaurus-prince-pdf to resources (",(0,r.jsx)(e.a,{href:"https://github.com/sparanoid",children:"@sparanoid"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5239",children:"#5239"})," docs(v2): Add unmand site to showcase page (",(0,r.jsx)(e.a,{href:"https://github.com/dbseal",children:"@dbseal"}),")"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5397",children:"#5397"})," chore: rename docusaurus-2-website package + refactor scripts (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5342",children:"#5342"})," chore: fix e2e yarn berry tests (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5328",children:"#5328"})," refactor(website): convert website to TypeScript (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5336",children:"#5336"})," chore: bump url-parse from 1.5.1 to 1.5.3 (",(0,r.jsx)(e.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5312",children:"#5312"})," fix: fix changelog page mdx import for i18n (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5295",children:"#5295"})," fix: fix canary release versions (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5285",children:"#5285"})," fix: fix canary version names (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5269",children:"#5269"})," misc: enable pt-BR + archive older versions (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5237",children:"#5237"})," chore: enable pt-BR i18n locale on staging (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5345",children:"#5345"})," refactor: rename Git master branch to main (",(0,r.jsx)(e.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5341",children:"#5341"})," polish: bind key listener to light/dark toggle + a11y lint fixes (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5347",children:"#5347"})," chore(mdx-loader): migrate package to TypeScript (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5335",children:"#5335"})," refactor: better typing + remove unnecessary eslint-disable (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5338",children:"#5338"})," refactor(plugin-blog): style improvements in blogUtils (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5256",children:"#5256"})," chore: upgrade Infima to alpha.30 (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5315",children:"#5315"})," refactor(init): share common files between templates (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5284",children:"#5284"})," refactor: properly type docs version (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-common"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/5349",children:"#5349"})," refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"committers-27",children:"Committers: 27"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Alexey Pyltsyn (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["David Seal (",(0,r.jsx)(e.a,{href:"https://github.com/dbseal",children:"@dbseal"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Deepak Prabhakara (",(0,r.jsx)(e.a,{href:"https://github.com/deepakprabhakara",children:"@deepakprabhakara"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Dmitry Zhifarsky (",(0,r.jsx)(e.a,{href:"https://github.com/incendial",children:"@incendial"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Erick Zhao (",(0,r.jsx)(e.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Federico Aloi (",(0,r.jsx)(e.a,{href:"https://github.com/faloi",children:"@faloi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Forresst (",(0,r.jsx)(e.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Fouad Matin (",(0,r.jsx)(e.a,{href:"https://github.com/fouad",children:"@fouad"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Garry (",(0,r.jsx)(e.a,{href:"https://github.com/neaped",children:"@neaped"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Hamza Hamidi (",(0,r.jsx)(e.a,{href:"https://github.com/hamzahamidi",children:"@hamzahamidi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Isaac Philip (",(0,r.jsx)(e.a,{href:"https://github.com/isaac-philip",children:"@isaac-philip"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["John Reilly (",(0,r.jsx)(e.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Jonny Burger (",(0,r.jsx)(e.a,{href:"https://github.com/JonnyBurger",children:"@JonnyBurger"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Joshua Chen (",(0,r.jsx)(e.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Julien Neuhart (",(0,r.jsx)(e.a,{href:"https://github.com/gulien",children:"@gulien"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Marko Saric (",(0,r.jsx)(e.a,{href:"https://github.com/metmarkosaric",children:"@metmarkosaric"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Massoud Maboudi (",(0,r.jsx)(e.a,{href:"https://github.com/massoudmaboudi",children:"@massoudmaboudi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Michal S\xe4nger (",(0,r.jsx)(e.a,{href:"https://github.com/michalsanger",children:"@michalsanger"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Palash Shrivastava (",(0,r.jsx)(e.a,{href:"https://github.com/BattleOfPlassey",children:"@BattleOfPlassey"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Paul O\u2019Shannessy (",(0,r.jsx)(e.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Pierre-Gilles Leymarie (",(0,r.jsx)(e.a,{href:"https://github.com/Pierre-Gilles",children:"@Pierre-Gilles"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Sam Wall (",(0,r.jsx)(e.a,{href:"https://github.com/sjwall",children:"@sjwall"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Tunghsiao Liu (",(0,r.jsx)(e.a,{href:"https://github.com/sparanoid",children:"@sparanoid"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Yan Ivan Evdokimov (",(0,r.jsx)(e.a,{href:"https://github.com/jansivans",children:"@jansivans"}),")"]}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/HaochenQ",children:"@HaochenQ"})}),"\n",(0,r.jsxs)(e.li,{children:["wan-nyan-wan (",(0,r.jsx)(e.a,{href:"https://github.com/wan-nyan-wan",children:"@wan-nyan-wan"}),")"]}),"\n"]})]})}function u(s={}){const{wrapper:e}={...(0,h.a)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(t,{...s})}):t(s)}},71670:(s,e,i)=>{i.d(e,{Z:()=>l,a:()=>a});var r=i(27378);const h={},c=r.createContext(h);function a(s){const e=r.useContext(c);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(h):s.components||h:a(s.components),r.createElement(c.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/4833ffb5.e7626e8b.js b/assets/js/4833ffb5.e7626e8b.js new file mode 100644 index 0000000000..2a8fdc7823 --- /dev/null +++ b/assets/js/4833ffb5.e7626e8b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5159],{81033:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog/page/4","page":4,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/3","nextPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/484c5ba1.1668568a.js b/assets/js/484c5ba1.1668568a.js new file mode 100644 index 0000000000..00097e5aef --- /dev/null +++ b/assets/js/484c5ba1.1668568a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1943],{36092:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var n=a(24246),o=a(71670);const r={mdx:{format:"md"},date:"2020-06-18T19:00"},s="2.0.0-alpha.57",c={permalink:"/changelog/2.0.0-alpha.57",source:"@site/changelog/source/2.0.0-alpha.57.md",title:"2.0.0-alpha.57",description:"Bad release, check ## 2.0.0-alpha.58",date:"2020-06-18T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2020-06-18T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.58",permalink:"/changelog/2.0.0-alpha.58"},nextItem:{title:"2.0.0-alpha.56",permalink:"/changelog/2.0.0-alpha.56"},listPageLink:"/changelog/page/3"},l={authorsImageUrls:[]},i=[];function p(e){return(0,n.jsx)(n.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p()}},71670:(e,t,a)=>{a.d(t,{Z:()=>c,a:()=>s});var n=a(27378);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/487c3fae.fdccc364.js b/assets/js/487c3fae.fdccc364.js new file mode 100644 index 0000000000..bbf6d0ad6c --- /dev/null +++ b/assets/js/487c3fae.fdccc364.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5289],{10015:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>m,contentTitle:()=>h,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>r});var i=t(24246),s=t(71670);const o={mdx:{format:"md"},date:"2022-05-27T20:00",authors:["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},h="2.0.0-beta.21",n={permalink:"/changelog/2.0.0-beta.21",source:"@site/changelog/source/2.0.0-beta.21.md",title:"2.0.0-beta.21",description:"Breaking Change",date:"2022-05-27T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Benjamin Diolez",alias:"BenDz",url:"https://github.com/BenDz",imageURL:"https://github.com/BenDz.png",key:"BenDz"},{name:"Charles Korn",alias:"charleskorn",url:"https://github.com/charleskorn",imageURL:"https://github.com/charleskorn.png",key:"charleskorn"},{name:"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t",alias:"datlechin",url:"https://github.com/datlechin",imageURL:"https://github.com/datlechin.png",key:"datlechin"},{name:"Designatory",alias:"Designatory",url:"https://github.com/Designatory",imageURL:"https://github.com/Designatory.png",key:"Designatory"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"\u51f1\u6069 Kane",alias:"Gary50613",url:"https://github.com/Gary50613",imageURL:"https://github.com/Gary50613.png",key:"Gary50613"},{name:"Ggicci",alias:"ggicci",url:"https://github.com/ggicci",imageURL:"https://github.com/ggicci.png",key:"ggicci"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jan Peer St\xf6cklmair",alias:"JPeer264",url:"https://github.com/JPeer264",imageURL:"https://github.com/JPeer264.png",key:"JPeer264"},{name:"Jeremy",alias:"jrmyw92",url:"https://github.com/jrmyw92",imageURL:"https://github.com/jrmyw92.png",key:"jrmyw92"},{name:"Junjie",alias:"junjieweb",url:"https://github.com/junjieweb",imageURL:"https://github.com/junjieweb.png",key:"junjieweb"},{name:"Lane Goolsby",alias:"lanegoolsby",url:"https://github.com/lanegoolsby",imageURL:"https://github.com/lanegoolsby.png",key:"lanegoolsby"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Matthias Koch",alias:"matkoch",url:"https://github.com/matkoch",imageURL:"https://github.com/matkoch.png",key:"matkoch"},{name:"Akara",alias:"Messiahhh",url:"https://github.com/Messiahhh",imageURL:"https://github.com/Messiahhh.png",key:"Messiahhh"},{name:"Michael Hughes",alias:"mhughes2k",url:"https://github.com/mhughes2k",imageURL:"https://github.com/mhughes2k.png",key:"mhughes2k"},{name:"Nitya Narasimhan",alias:"nitya",url:"https://github.com/nitya",imageURL:"https://github.com/nitya.png",key:"nitya"},{name:"Oluwatobi Sofela",alias:"oluwatobiss",url:"https://github.com/oluwatobiss",imageURL:"https://github.com/oluwatobiss.png",key:"oluwatobiss"},{name:"Ori Shalom",alias:"ori-shalom",url:"https://github.com/ori-shalom",imageURL:"https://github.com/ori-shalom.png",key:"ori-shalom"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Rui Peres",alias:"RuiAAPeres",url:"https://github.com/RuiAAPeres",imageURL:"https://github.com/RuiAAPeres.png",key:"RuiAAPeres"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"James",alias:"Zamiell",url:"https://github.com/Zamiell",imageURL:"https://github.com/Zamiell.png",key:"Zamiell"}],frontMatter:{mdx:{format:"md"},date:"2022-05-27T20:00",authors:["BenDz","charleskorn","datlechin","Designatory","forresst","Gary50613","ggicci","Josh-Cena","JPeer264","jrmyw92","junjieweb","lanegoolsby","massoudmaboudi","matkoch","Messiahhh","mhughes2k","nitya","oluwatobiss","ori-shalom","pranabdas","RuiAAPeres","slorber","Zamiell"]},unlisted:!1,prevItem:{title:"2.0.0-beta.22",permalink:"/changelog/2.0.0-beta.22"},nextItem:{title:"2.0.0-beta.20",permalink:"/changelog/2.0.0-beta.20"},listPageLink:"/changelog/"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},r=[];function g(e){return(0,i.jsx)(i.Fragment,{})}function u(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(g,{...e})}):g()}},71670:(e,a,t)=>{t.d(a,{Z:()=>n,a:()=>h});var i=t(27378);const s={},o=i.createContext(s);function h(e){const a=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function n(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:h(e.components),i.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/487d990e.22bcddf8.js b/assets/js/487d990e.22bcddf8.js new file mode 100644 index 0000000000..1f51705884 --- /dev/null +++ b/assets/js/487d990e.22bcddf8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96725],{61439:(s,e,l)=>{l.r(e),l.d(e,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>c,metadata:()=>h,toc:()=>u});var i=l(24246),n=l(71670);const c={mdx:{format:"md"},date:"2020-07-24T20:00",authors:["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},r="2.0.0-alpha.59",h={permalink:"/changelog/2.0.0-alpha.59",source:"@site/changelog/source/2.0.0-alpha.59.md",title:"2.0.0-alpha.59",description:"New Feature",date:"2020-07-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Mahfoudh Arous",alias:"aladin002dz",url:"https://github.com/aladin002dz",imageURL:"https://github.com/aladin002dz.png",key:"aladin002dz"},{name:"Eric Dobbertin",alias:"aldeed",url:"https://github.com/aldeed",imageURL:"https://github.com/aldeed.png",key:"aldeed"},{name:"Amirul Ahmad",alias:"amirulahmad",url:"https://github.com/amirulahmad",imageURL:"https://github.com/amirulahmad.png",key:"amirulahmad"},{name:"Anshul Goyal",alias:"anshulrgoyal",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png",key:"anshulrgoyal"},{name:"Ayan Banerjee",alias:"ayan-b",url:"https://github.com/ayan-b",imageURL:"https://github.com/ayan-b.png",key:"ayan-b"},{name:"Jeremy Asuncion",alias:"codemonkey800",url:"https://github.com/codemonkey800",imageURL:"https://github.com/codemonkey800.png",key:"codemonkey800"},{name:"Daniel Hochman",alias:"danielhochman",url:"https://github.com/danielhochman",imageURL:"https://github.com/danielhochman.png",key:"danielhochman"},{name:"Deepak Giri",alias:"dpkg",url:"https://github.com/dpkg",imageURL:"https://github.com/dpkg.png",key:"dpkg"},{name:"ehsan jso",alias:"ehsanjso",url:"https://github.com/ehsanjso",imageURL:"https://github.com/ehsanjso.png",key:"ehsanjso"},{name:"Arsalan Khattak",alias:"eKhattak",url:"https://github.com/eKhattak",imageURL:"https://github.com/eKhattak.png",key:"eKhattak"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"matbub",alias:"hi-matbub",url:"https://github.com/hi-matbub",imageURL:"https://github.com/hi-matbub.png",key:"hi-matbub"},{name:"John Knox",alias:"jknoxville",url:"https://github.com/jknoxville",imageURL:"https://github.com/jknoxville.png",key:"jknoxville"},{name:"Jordan Liu",alias:"jordanliu",url:"https://github.com/jordanliu",imageURL:"https://github.com/jordanliu.png",key:"jordanliu"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"Paul Cowgill",alias:"pcowgill",url:"https://github.com/pcowgill",imageURL:"https://github.com/pcowgill.png",key:"pcowgill"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Frida Hjelm",alias:"svtfrida",url:"https://github.com/svtfrida",imageURL:"https://github.com/svtfrida.png",key:"svtfrida"},{name:"Taylor Allen",alias:"taylorallen0913",url:"https://github.com/taylorallen0913",imageURL:"https://github.com/taylorallen0913.png",key:"taylorallen0913"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Vandr\xe9 Leal",alias:"vandreleal",url:"https://github.com/vandreleal",imageURL:"https://github.com/vandreleal.png",key:"vandreleal"},{name:"Rian Finnegan",alias:"xtellurian",url:"https://github.com/xtellurian",imageURL:"https://github.com/xtellurian.png",key:"xtellurian"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-07-24T20:00",authors:["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.60",permalink:"/changelog/2.0.0-alpha.60"},nextItem:{title:"2.0.0-alpha.58",permalink:"/changelog/2.0.0-alpha.58"},listPageLink:"/changelog/page/3"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 25",id:"committers-25",level:2}];function a(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,n.a)(),...s.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3015",children:"#3015"})," feat: automate migration from v1 to v2 (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3105",children:"#3105"})," feat(v2): add docusaurus script for npm users (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2815",children:"#2815"})," feat(v2): introduce DocSearch v3 search (",(0,i.jsx)(e.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3059",children:"#3059"})," feat(v2): broken links detection (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3084",children:"#3084"})," feat(v2): absolute slugs and slug resolution system (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3069",children:"#3069"})," feat(v2): support for adding relative images and handling broken image links (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2971",children:"#2971"})," feat(v2): global data + useGlobalData + docs versions dropdown (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3080",children:"#3080"})," feat(v2): add support for serve command (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3058",children:"#3058"})," feat(v2): useDocusaurusContext().siteMetadata (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3032",children:"#3032"})," feat(v2): notify users when docusaurus version is outdated (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3033",children:"#3033"})," feat(v2): add useBaseUrlUtils() hook (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3006",children:"#3006"})," feat(v2): prompt user when default port is in use (",(0,i.jsx)(e.a,{href:"https://github.com/taylorallen0913",children:"@taylorallen0913"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3050",children:"#3050"})," feat(v2): Collect plugin versions to allow them to be inspected in debug plugin (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3038",children:"#3038"})," feat(v2): Support keywords meta in blog posts (",(0,i.jsx)(e.a,{href:"https://github.com/dpkg",children:"@dpkg"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2974",children:"#2974"})," feat(v2): Error when hooks depends on context is used outside of Layout (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2205",children:"#2205"})," feat(v2): Plugin for Offline/PWA support (",(0,i.jsx)(e.a,{href:"https://github.com/codemonkey800",children:"@codemonkey800"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2994",children:"#2994"})," feat(v2): configureWebpack merge strategy + use file-loader for common asset types (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2989",children:"#2989"})," feat(v2): add disableVersioning config to docs plugin (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2877",children:"#2877"})," feat(v2): allow skipping build docs for next version (",(0,i.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-1.x"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2955",children:"#2955"})," feat(v1): add deletedDocs config to fix unwanted versioning fallback (",(0,i.jsx)(e.a,{href:"https://github.com/aldeed",children:"@aldeed"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2943",children:"#2943"})," feat(v2): option and config validation life cycle method for official plugins (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2971",children:"#2971"})," feat(v2): global data + useGlobalData + docs versions dropdown (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3012",children:"#3012"})," fix(v2): refactor color mode system (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3107",children:"#3107"})," fix(v2): broken links detector: ignore existing folders (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3112",children:"#3112"})," fix(v2): baseUrl is wrongly appended to anchor links (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3063",children:"#3063"})," fix(v2): classify link hrefs with protocol identifier as internal (",(0,i.jsx)(e.a,{href:"https://github.com/svtfrida",children:"@svtfrida"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3106",children:"#3106"})," fix(v2): dropdown navbar item: validation too strict (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3029",children:"#3029"})," fix(v2): change description for blog post paginator (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3108",children:"#3108"})," fix(v2): fix docs instance path typo (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3025",children:"#3025"})," fix(v2):pass siteConfig as prop to pages (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3008",children:"#3008"})," chore(v2): Add E2E test for yarn v2 (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Other\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3017",children:"#3017"})," fix(v2): fix broken links on versions page (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3012",children:"#3012"})," fix(v2): refactor color mode system (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3001",children:"#3001"})," fix(v2): refactor routes.ts + add route hash for chunkNames key (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3010",children:"#3010"})," fix(v2): make client-redirect-plugin not baseUrl sensitive (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-1.x"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2993",children:"#2993"})," fix(relative path): last update date and by isn\u2019t generated if localh\u2026 (",(0,i.jsx)(e.a,{href:"https://github.com/amirulahmad",children:"@amirulahmad"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2969",children:"#2969"})," fix: fromExtensions and toExtensions translation when used with baseUrl (",(0,i.jsx)(e.a,{href:"https://github.com/jknoxville",children:"@jknoxville"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3088",children:"#3088"})," improve navbar menu (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-mdx-loader"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3087",children:"#3087"})," refactor(v2): async md image transformer + pathname protocol as an escape hatch (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2970",children:"#2970"})," feat(v2): add option validation for remaining official plugins (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2987",children:"#2987"})," chore(v2): use joi for config validation (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3026",children:"#3026"})," docs(v2): add documentation for migration command (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3094",children:"#3094"})," docs(v2): showcase user Clutch (",(0,i.jsx)(e.a,{href:"https://github.com/danielhochman",children:"@danielhochman"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3101",children:"#3101"})," docs(v2):Add azure-pipelines CI guide (",(0,i.jsx)(e.a,{href:"https://github.com/ayan-b",children:"@ayan-b"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3098",children:"#3098"})," docs: Add azure-pipelines CI guide (",(0,i.jsx)(e.a,{href:"https://github.com/ayan-b",children:"@ayan-b"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3086",children:"#3086"})," doc(v2): replace heading position (",(0,i.jsx)(e.a,{href:"https://github.com/eKhattak",children:"@eKhattak"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3082",children:"#3082"})," fixing few typos and enhancing few sentences clarity (",(0,i.jsx)(e.a,{href:"https://github.com/aladin002dz",children:"@aladin002dz"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3078",children:"#3078"})," Updated link for #docusaurus-2-dev discord (",(0,i.jsx)(e.a,{href:"https://github.com/jordanliu",children:"@jordanliu"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3076",children:"#3076"})," docs(v2): showcase Runlet (",(0,i.jsx)(e.a,{href:"https://github.com/vandreleal",children:"@vandreleal"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3040",children:"#3040"})," docs(v2): correct the documentation for docs-only mode (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3034",children:"#3034"})," docs(v2): showcase user Tasit (",(0,i.jsx)(e.a,{href:"https://github.com/pcowgill",children:"@pcowgill"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3022",children:"#3022"})," docs(v2): showcase Eta (",(0,i.jsx)(e.a,{href:"https://github.com/nebrelbug",children:"@nebrelbug"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3011",children:"#3011"})," docs(v1): external links (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2997",children:"#2997"})," docs(v2): Document TypeScript support (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2973",children:"#2973"})," docs(v2): Fix typo in markdown-features (",(0,i.jsx)(e.a,{href:"https://github.com/ehsanjso",children:"@ehsanjso"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2991",children:"#2991"})," Showcase Amphora Data (",(0,i.jsx)(e.a,{href:"https://github.com/xtellurian",children:"@xtellurian"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2983",children:"#2983"})," docs(v2): add plugin redirects production build note (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2967",children:"#2967"})," docs(v2): fix typos in plugin-content examples (",(0,i.jsx)(e.a,{href:"https://github.com/hi-matbub",children:"@hi-matbub"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2960",children:"#2960"})," doc(v2): publish doc update after alpha.58 release (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2966",children:"#2966"})," docs(v2): fix typo in plugin-content-pages example (",(0,i.jsx)(e.a,{href:"https://github.com/hi-matbub",children:"@hi-matbub"}),")"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-migrate"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3113",children:"#3113"})," chore(v2): ability to test the migration cli easily (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["Other\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3099",children:"#3099"})," fix(v2): netlify.toml shouldn't affect v1 site deployment config (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3068",children:"#3068"})," chore(deps): bump lodash from 4.17.15 to 4.17.19 (",(0,i.jsx)(e.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2958",children:"#2958"})," docs(v2): rename 2.0.0-alpha.57 to 2.0.0-alpha.58 (",(0,i.jsx)(e.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3093",children:"#3093"})," fix(v2): fix recent baseurl issues (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-mdx-loader"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3087",children:"#3087"})," refactor(v2): async md image transformer + pathname protocol as an escape hatch (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3055",children:"#3055"})," chore(v2): Adopt corejs 3 and only import at entry point (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2998",children:"#2998"})," chore(v2): refactor yarn tsc to yarn build + add theme-classic watch mode (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3008",children:"#3008"})," chore(v2): Add E2E test for yarn v2 (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3001",children:"#3001"})," fix(v2): refactor routes.ts + add route hash for chunkNames key (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3007",children:"#3007"})," fix(v2): Add two missing docusaurus core babel dependency (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2987",children:"#2987"})," chore(v2): use joi for config validation (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2950",children:"#2950"})," chore(v2): Implement a simple E2E testing mechanism for ",(0,i.jsx)(e.code,{children:"docusausus start"})," (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2970",children:"#2970"})," feat(v2): add option validation for remaining official plugins (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2996",children:"#2996"})," chore(v2): Merge devDependencies in theme-classic (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2977",children:"#2977"})," chore(v2): Remove extraneous package-lock.json (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2962",children:"#2962"})," Feat: replace yup with joi for cleaner validation (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),", ",(0,i.jsx)(e.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2976",children:"#2976"})," chore(v2): Fix more eslint errors (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(e.code,{children:"docusaurus"}),", ",(0,i.jsx)(e.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:[(0,i.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/2972",children:"#2972"})," chore(v2): Fix a lot of eslint warnings (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(e.h2,{id:"committers-25",children:"Committers: 25"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Amirul Ahmad (",(0,i.jsx)(e.a,{href:"https://github.com/amirulahmad",children:"@amirulahmad"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Anshul Goyal (",(0,i.jsx)(e.a,{href:"https://github.com/anshulrgoyal",children:"@anshulrgoyal"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Arsalan Khattak (",(0,i.jsx)(e.a,{href:"https://github.com/eKhattak",children:"@eKhattak"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Ayan Banerjee (",(0,i.jsx)(e.a,{href:"https://github.com/ayan-b",children:"@ayan-b"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Ben Gubler (",(0,i.jsx)(e.a,{href:"https://github.com/nebrelbug",children:"@nebrelbug"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Daniel Hochman (",(0,i.jsx)(e.a,{href:"https://github.com/danielhochman",children:"@danielhochman"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Deepak Giri (",(0,i.jsx)(e.a,{href:"https://github.com/dpkg",children:"@dpkg"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Eric Dobbertin (",(0,i.jsx)(e.a,{href:"https://github.com/aldeed",children:"@aldeed"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Fran\xe7ois Chalifour (",(0,i.jsx)(e.a,{href:"https://github.com/francoischalifour",children:"@francoischalifour"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Frida Hjelm (",(0,i.jsx)(e.a,{href:"https://github.com/svtfrida",children:"@svtfrida"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Jeremy Asuncion (",(0,i.jsx)(e.a,{href:"https://github.com/codemonkey800",children:"@codemonkey800"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["John Knox (",(0,i.jsx)(e.a,{href:"https://github.com/jknoxville",children:"@jknoxville"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Jordan Liu (",(0,i.jsx)(e.a,{href:"https://github.com/jordanliu",children:"@jordanliu"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Mahfoudh Arous (",(0,i.jsx)(e.a,{href:"https://github.com/aladin002dz",children:"@aladin002dz"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Paul Cowgill (",(0,i.jsx)(e.a,{href:"https://github.com/pcowgill",children:"@pcowgill"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Rian Finnegan (",(0,i.jsx)(e.a,{href:"https://github.com/xtellurian",children:"@xtellurian"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Sam Zhou (",(0,i.jsx)(e.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Taylor Allen (",(0,i.jsx)(e.a,{href:"https://github.com/taylorallen0913",children:"@taylorallen0913"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Teik Jun (",(0,i.jsx)(e.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Vandr\xe9 Leal (",(0,i.jsx)(e.a,{href:"https://github.com/vandreleal",children:"@vandreleal"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["Yangshun Tay (",(0,i.jsx)(e.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["ehsan jso (",(0,i.jsx)(e.a,{href:"https://github.com/ehsanjso",children:"@ehsanjso"}),")"]}),"\n",(0,i.jsxs)(e.li,{children:["matbub (",(0,i.jsx)(e.a,{href:"https://github.com/hi-matbub",children:"@hi-matbub"}),")"]}),"\n"]})]})}function d(s={}){const{wrapper:e}={...(0,n.a)(),...s.components};return e?(0,i.jsx)(e,{...s,children:(0,i.jsx)(a,{...s})}):a(s)}},71670:(s,e,l)=>{l.d(e,{Z:()=>h,a:()=>r});var i=l(27378);const n={},c=i.createContext(n);function r(s){const e=i.useContext(c);return i.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function h(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(n):s.components||n:r(s.components),i.createElement(c.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/492798ca.89f534d4.js b/assets/js/492798ca.89f534d4.js new file mode 100644 index 0000000000..1dafb25cd7 --- /dev/null +++ b/assets/js/492798ca.89f534d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91557],{61132:(e,n,r)=>{r.d(n,{Z:()=>l});var t=r(24246),i=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>D});var t=r(24246),i=r(27378),a=r(40624),l=r(75527),s=r(3620),o=r(44479),c=r(62821),d=r(52196),u=r(53589);function h(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function g(e){var n,r;return null!==(r=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:n,children:r}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return g(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,s.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,c._X)(t),l=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(p(function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){h(e,n,r[n])}))}return e}({},r.location),{search:n.toString()}))}),[t,r]);return[a,l]}function j(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,a=m(e),[l,s]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[c,d]=b({queryString:r,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,u.Nk)(n);return[r,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),g=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:a})?e:null})();(0,o.Z)((()=>{g&&s(g)}),[g]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),d(e),p(e)}),[d,p,a]),tabValues:a}}var x=r(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{},t=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),t.forEach((function(n){v(e,n,r[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function k({className:e,block:n,selectedValue:r,selectValue:i,tabValues:s}){const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,l.o5)(),d=e=>{const n=e.currentTarget,t=o.indexOf(n),a=s[t].value;a!==r&&(c(n),i(a))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;var r;n=null!==(r=o[t])&&void 0!==r?r:o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;var t;n=null!==(t=o[r])&&void 0!==t?t:o[o.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:s.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>o.push(e),onKeyDown:u,onClick:d},i),{className:(0,a.Z)("tabs__item",y.tabItem,null==i?void 0:i.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:r}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function P(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},e,n)),(0,t.jsx)(I,w({},e,n))]})}function D(e){const n=(0,x.Z)();return(0,t.jsx)(P,O(w({},e),{children:g(e.children)}),String(n))}},52605:(e,n,r)=>{r.d(n,{Z:()=>d});var t=r(24246),i=r(27378),a=r(80474),l=r(3620);const s={apiTable:"apiTable_e8hp"};function o({name:e,children:n},r){const s=function(e){let n=e;for(;(0,i.isValidElement)(n);)[n]=i.Children.toArray(n.props.children);if("string"!=typeof n)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return n}(n),o=e?`${e}-${s}`:s,c=`#${o}`,d=(0,l.k6)();return(0,a.Z)().collectAnchor(o),(0,t.jsx)("tr",{id:o,tabIndex:0,ref:d.location.hash===c?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||d.push(c)},onKeyDown:e=>{"Enter"===e.key&&d.push(c)},children:n.props.children})}const c=i.forwardRef(o);function d({children:e,name:n}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,a]=i.Children.toArray(e.props.children),l=(0,i.useRef)(null);(0,i.useEffect)((()=>{var e;null===(e=l.current)||void 0===e||e.focus()}),[l]);const o=i.Children.map(a.props.children,(e=>(0,t.jsx)(c,{name:n,ref:l,children:e})));return(0,t.jsxs)("table",{className:s.apiTable,children:[r,(0,t.jsx)("tbody",{children:o})]})}},42528:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var t=r(24246),i=r(71670),a=r(97555),l=r(61132),s=r(52605);const o={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},c="\ud83d\udce6 plugin-ideal-image",d={id:"api/plugins/plugin-ideal-image",title:"\ud83d\udce6 plugin-ideal-image",description:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).",source:"@site/docs/api/plugins/plugin-ideal-image.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-ideal-image.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-ideal-image"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager"},next:{title:"\ud83d\udce6 plugin-pwa",permalink:"/docs/api/plugins/@docusaurus/plugin-pwa"}},u={},h=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"-plugin-ideal-image",children:"\ud83d\udce6 plugin-ideal-image"}),"\n","\n",(0,t.jsx)(n.p,{children:"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["By default, the plugin is ",(0,t.jsx)(n.strong,{children:"inactive in development"})," so you could always view full-scale images. If you want to debug the ideal image behavior, you could set the ",(0,t.jsx)(n.a,{href:"#disableInDev",children:(0,t.jsx)(n.code,{children:"disableInDev"})})," option to ",(0,t.jsx)(n.code,{children:"false"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(l.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-ideal-image\n"})})}),(0,t.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-ideal-image\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"This plugin supports the PNG and JPG formats only."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import Image from '@theme/IdealImage';\nimport thumbnail from './path/to/img.png';\n\n// your React code\n<Image img={thumbnail} />\n\n// or\n<Image img={require('./path/to/img.png')} />\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This plugin registers a ",(0,t.jsx)(n.a,{href:"https://webpack.js.org/loaders/",children:"Webpack loader"})," that changes the type of imported/require images:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Before: ",(0,t.jsx)(n.code,{children:"string"})]}),"\n",(0,t.jsxs)(n.li,{children:["After: ",(0,t.jsx)(n.code,{children:'{preSrc: string, src: import("@theme/IdealImage").SrcImage}'})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"Accepted fields:"}),"\n",(0,t.jsx)(s.Z,{children:(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Option"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"string"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ideal-img/[name].[hash:hex:7].[width].[ext]"})}),(0,t.jsx)(n.td,{children:"Filename template for output files."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sizes"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number[]"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify all widths you want to use. If a specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"size"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"original size"})}),(0,t.jsx)(n.td,{children:"Specify one width you want to use; if the specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"min"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["As an alternative to manually specifying ",(0,t.jsx)(n.code,{children:"sizes"}),", you can specify ",(0,t.jsx)(n.code,{children:"min"}),", ",(0,t.jsx)(n.code,{children:"max"})," and ",(0,t.jsx)(n.code,{children:"steps"}),", and the sizes will be generated for you."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"max"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{}),(0,t.jsxs)(n.td,{children:["See ",(0,t.jsx)(n.code,{children:"min"})," above"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"steps"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"4"})}),(0,t.jsxs)(n.td,{children:["Configure the number of images generated between ",(0,t.jsx)(n.code,{children:"min"})," and ",(0,t.jsx)(n.code,{children:"max"})," (inclusive)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"quality"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"number"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"85"})}),(0,t.jsx)(n.td,{children:"JPEG compression quality"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"disableInDev"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"boolean"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"true"})}),(0,t.jsxs)(n.td,{children:["You can test ideal image behavior in dev mode by setting this to ",(0,t.jsx)(n.code,{children:"false"}),". ",(0,t.jsx)(n.strong,{children:"Tip"}),": use ",(0,t.jsx)(n.a,{href:"https://www.browserstack.com/guide/how-to-perform-network-throttling-in-chrome",children:"network throttling"})," in your browser to simulate slow networks."]})]})]})]})}),"\n",(0,t.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,t.jsx)(n.p,{children:"Here's an example configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-ideal-image',\n // highlight-start\n {\n quality: 70,\n max: 1030, // max resized image's size.\n min: 640, // min resized image's size. if original is lower, use that size.\n steps: 2, // the max number of images generated between min and max (inclusive)\n disableInDev: false,\n },\n // highlight-end\n ],\n ],\n};\n"})})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>l});var t=r(27378);const i={},a=t.createContext(i);function l(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4994aa22.c56eb869.js b/assets/js/4994aa22.c56eb869.js new file mode 100644 index 0000000000..071decfaff --- /dev/null +++ b/assets/js/4994aa22.c56eb869.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78717],{23266:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},3072:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/files/docusaurus-asset-example-93ea653de6d8636f7254aecab1adbcce.docx"},61132:(e,s,t)=>{t.d(s,{Z:()=>i});var n=t(24246),a=(t(27378),t(40624));const r={tabItem:"tabItem_pnkT"};function i({children:e,hidden:s,className:t}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,a.Z)(r.tabItem,t),hidden:s,children:e})}},97555:(e,s,t)=>{t.d(s,{Z:()=>E});var n=t(24246),a=t(27378),r=t(40624),i=t(75527),o=t(3620),l=t(44479),c=t(62821),u=t(52196),d=t(53589);function h(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function m(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function g(e){var s,t;return null!==(t=null===(s=a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==t?t:[]}function p(e){const{values:s,children:t}=e;return(0,a.useMemo)((()=>{const e=null!=s?s:function(e){return g(e).map((({props:{value:e,label:s,attributes:t,default:n}})=>({value:e,label:s,attributes:t,default:n})))}(t);return function(e){const s=(0,u.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,t])}function f({value:e,tabValues:s}){return s.some((s=>s.value===e))}function b({queryString:e=!1,groupId:s}){const t=(0,o.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,c._X)(n),i=(0,a.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(t.location.search);s.set(n,e),t.replace(m(function(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){h(e,s,t[s])}))}return e}({},t.location),{search:s.toString()}))}),[n,t]);return[r,i]}function x(e){const{defaultValue:s,queryString:t=!1,groupId:n}=e,r=p(e),[i,o]=(0,a.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const n=null!==(t=s.find((e=>e.default)))&&void 0!==t?t:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[c,u]=b({queryString:t,groupId:n}),[h,m]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,n]=(0,d.Nk)(s);return[t,(0,a.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),g=(()=>{const e=null!=c?c:h;return f({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var j=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function v(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){w(e,s,t[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function O({className:e,block:s,selectedValue:t,selectValue:a,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),u=e=>{const s=e.currentTarget,n=l.indexOf(s),r=o[n].value;r!==t&&(c(s),a(r))},d=e=>{let s=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;var t;s=null!==(t=l[n])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var n;s=null!==(n=l[t])&&void 0!==n?n:l[l.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:o.map((({value:e,label:s,attributes:a})=>(0,n.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},a),{className:(0,r.Z)("tabs__item",y.tabItem,null==a?void 0:a.className,{"tabs__item--active":t===e}),children:null!=s?s:e}),e)))})}function D({lazy:e,children:s,selectedValue:t}){const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===t));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,a.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function S(e){const s=x(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(O,v({},e,s)),(0,n.jsx)(D,v({},e,s))]})}function E(e){const s=(0,j.Z)();return(0,n.jsx)(S,k(v({},e),{children:g(e.children)}),String(s))}},6698:(e,s,t)=>{t.d(s,{Z:()=>c});var n=t(24246),a=(t(27378),t(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(s){i(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,n)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:i,bodyStyle:c}){return(0,n.jsxs)("div",{className:r.browserWindow,style:l(o({},i),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,a.Z)(r.browserWindowAddressBar,"text--truncate"),children:t}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:c,children:e})]})}},28662:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png"},83684:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg"},10861:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg"},14006:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>b,contentTitle:()=>p,default:()=>y,frontMatter:()=>g,metadata:()=>f,toc:()=>x});var n,a=t(24246),r=t(71670),i=t(6698),o=t(97555),l=t(61132),c=t(27378);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},u.apply(this,arguments)}const d=e=>{let{title:s,titleId:t,...a}=e;return c.createElement("svg",u({width:200,height:200,viewBox:"0 0 200 200",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":t},a),s?c.createElement("title",{id:t},s):null,n||(n=c.createElement("g",{fill:"none",fillRule:"evenodd"},c.createElement("path",{fill:"#FFF",d:"M99 52h84v34H99z"}),c.createElement("path",{d:"M23 163c-7.398 0-13.843-4.027-17.303-10A19.886 19.886 0 0 0 3 163c0 11.046 8.954 20 20 20h20v-20H23z",fill:"#3ECC5F"}),c.createElement("path",{d:"M112.98 57.376 183 53V43c0-11.046-8.954-20-20-20H73l-2.5-4.33c-1.112-1.925-3.889-1.925-5 0L63 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L53 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L43 23c-.022 0-.042.003-.065.003l-4.142-4.141c-1.57-1.571-4.252-.853-4.828 1.294l-1.369 5.104-5.192-1.392c-2.148-.575-4.111 1.389-3.535 3.536l1.39 5.193-5.102 1.367c-2.148.576-2.867 3.259-1.296 4.83l4.142 4.142c0 .021-.003.042-.003.064l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 53l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 63l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 73l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 83l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 93l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 103l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 113l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 123l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 133l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 143l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 153l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 163c0 11.046 8.954 20 20 20h120c11.046 0 20-8.954 20-20V83l-70.02-4.376A10.645 10.645 0 0 1 103 68c0-5.621 4.37-10.273 9.98-10.624",fill:"#3ECC5F"}),c.createElement("path",{fill:"#3ECC5F",d:"M143 183h30v-40h-30z"}),c.createElement("path",{d:"M193 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 190.32 148a4.96 4.96 0 0 0-3.016 1.036 26.531 26.531 0 0 0-.335-.336 4.955 4.955 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5",fill:"#44D860"}),c.createElement("path",{fill:"#3ECC5F",d:"M153 123h30v-20h-30z"}),c.createElement("path",{d:"M193 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032-.02-.075-.037-.15-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a6.653 6.653 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A9.987 9.987 0 0 0 183 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494.057-.055.113-.111.168-.168.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807c.021-.074.038-.15.058-.225.105.013.21.032.319.032",fill:"#44D860"}),c.createElement("path",{d:"M63 55.5a2.5 2.5 0 0 1-2.5-2.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5a2.5 2.5 0 1 1-5 0c0-6.893 5.607-12.5 12.5-12.5S65.5 46.107 65.5 53a2.5 2.5 0 0 1-2.5 2.5",fill:"#000"}),c.createElement("path",{d:"M103 183h60c11.046 0 20-8.954 20-20V93h-60c-11.046 0-20 8.954-20 20v70z",fill:"#FFFF50"}),c.createElement("path",{d:"M168.02 124h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0-49.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 19.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2M183 61.611c-.012 0-.022-.006-.034-.005-3.09.105-4.552 3.196-5.842 5.923-1.346 2.85-2.387 4.703-4.093 4.647-1.889-.068-2.969-2.202-4.113-4.46-1.314-2.594-2.814-5.536-5.963-5.426-3.046.104-4.513 2.794-5.807 5.167-1.377 2.528-2.314 4.065-4.121 3.994-1.927-.07-2.951-1.805-4.136-3.813-1.321-2.236-2.848-4.75-5.936-4.664-2.994.103-4.465 2.385-5.763 4.4-1.373 2.13-2.335 3.428-4.165 3.351-1.973-.07-2.992-1.51-4.171-3.177-1.324-1.873-2.816-3.993-5.895-3.89-2.928.1-4.399 1.97-5.696 3.618-1.232 1.564-2.194 2.802-4.229 2.724a1 1 0 0 0-.072 2c3.017.101 4.545-1.8 5.872-3.487 1.177-1.496 2.193-2.787 4.193-2.855 1.926-.082 2.829 1.115 4.195 3.045 1.297 1.834 2.769 3.914 5.731 4.021 3.103.104 4.596-2.215 5.918-4.267 1.182-1.834 2.202-3.417 4.15-3.484 1.793-.067 2.769 1.35 4.145 3.681 1.297 2.197 2.766 4.686 5.787 4.796 3.125.108 4.634-2.62 5.949-5.035 1.139-2.088 2.214-4.06 4.119-4.126 1.793-.042 2.728 1.595 4.111 4.33 1.292 2.553 2.757 5.445 5.825 5.556l.169.003c3.064 0 4.518-3.075 5.805-5.794 1.139-2.41 2.217-4.68 4.067-4.773v-2z",fill:"#000"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 183h40v-40H83z"}),c.createElement("path",{d:"M143 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 140.32 148a4.96 4.96 0 0 0-3.016 1.036 26.531 26.531 0 0 0-.335-.336 4.955 4.955 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5",fill:"#44D860"}),c.createElement("path",{fill:"#3ECC5F",d:"M83 123h40v-20H83z"}),c.createElement("path",{d:"M133 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032-.02-.075-.037-.15-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a6.653 6.653 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A9.987 9.987 0 0 0 123 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494.057-.055.113-.111.168-.168.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807c.021-.074.038-.15.058-.225.105.013.21.032.319.032",fill:"#44D860"}),c.createElement("path",{d:"M143 41.75c-.16 0-.33-.02-.49-.05a2.52 2.52 0 0 1-.47-.14c-.15-.06-.29-.14-.431-.23-.13-.09-.259-.2-.38-.31-.109-.12-.219-.24-.309-.38s-.17-.28-.231-.43a2.619 2.619 0 0 1-.189-.96c0-.16.02-.33.05-.49.03-.16.08-.31.139-.47.061-.15.141-.29.231-.43.09-.13.2-.26.309-.38.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23.149-.06.31-.11.47-.14.32-.07.65-.07.98 0 .159.03.32.08.47.14.149.06.29.14.43.23.13.09.259.2.38.31.11.12.22.25.31.38.09.14.17.28.23.43.06.16.11.31.14.47.029.16.05.33.05.49 0 .66-.271 1.31-.73 1.77-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.565 2.565 0 0 1-.96.19m20-1.25c-.66 0-1.3-.27-1.771-.73a3.802 3.802 0 0 1-.309-.38c-.09-.14-.17-.28-.231-.43a2.619 2.619 0 0 1-.189-.96c0-.66.27-1.3.729-1.77.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23.149-.06.31-.11.47-.14.32-.07.66-.07.98 0 .159.03.32.08.47.14.149.06.29.14.43.23.13.09.259.2.38.31.459.47.73 1.11.73 1.77 0 .16-.021.33-.05.49-.03.16-.08.32-.14.47-.07.15-.14.29-.23.43-.09.13-.2.26-.31.38-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.565 2.565 0 0 1-.96.19",fill:"#000"}))))};var h=t(66448),m=t(97360);const g={id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},p="Assets",f={id:"guides/markdown-features/assets",title:"Assets",description:"Handling assets in Docusaurus Markdown",source:"@site/docs/guides/markdown-features/markdown-features-assets.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/assets",permalink:"/docs/markdown-features/assets",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-assets.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1678982558e3,frontMatter:{id:"assets",description:"Handling assets in Docusaurus Markdown",slug:"/markdown-features/assets"},sidebar:"docs",previous:{title:"Headings and Table of contents",permalink:"/docs/markdown-features/toc"},next:{title:"Markdown links",permalink:"/docs/markdown-features/links"}},b={},x=[{value:"Images",id:"images",level:2},{value:"Files",id:"files",level:2},{value:"Inline SVGs",id:"inline-svgs",level:2},{value:"Themed Images",id:"themed-images",level:2},{value:"GitHub-style themed images",id:"github-style-themed-images",level:3},{value:"Static assets",id:"static-assets",level:2}];function j(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"assets",children:"Assets"}),"\n","\n",(0,a.jsx)(s.p,{children:"Sometimes you want to link to assets (e.g. docx files, images...) directly from Markdown files, and it is convenient to co-locate the asset next to the Markdown file using it."}),"\n",(0,a.jsx)(s.p,{children:"Let's imagine the following file structure:"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{children:"# Your doc\n/website/docs/myFeature.mdx\n\n# Some assets you want to use\n/website/docs/assets/docusaurus-asset-example-banner.png\n/website/docs/assets/docusaurus-asset-example.docx\n"})}),"\n",(0,a.jsx)(s.h2,{id:"images",children:"Images"}),"\n",(0,a.jsx)(s.p,{children:"You can display images in three different ways: Markdown syntax, CJS require, or ES imports syntax."}),"\n",(0,a.jsxs)(o.Z,{children:[(0,a.jsxs)(l.Z,{value:"Markdown syntax",children:[(0,a.jsx)(s.p,{children:"Display images using simple Markdown syntax:"}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Example banner](./assets/docusaurus-asset-example-banner.png)\n"})})]}),(0,a.jsxs)(l.Z,{value:"CommonJS require",children:[(0,a.jsxs)(s.p,{children:["Display images using inline CommonJS ",(0,a.jsx)(s.code,{children:"require"})," in JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"<img\n src={require('./assets/docusaurus-asset-example-banner.png').default}\n alt=\"Example banner\"\n/>\n"})})]}),(0,a.jsxs)(l.Z,{value:"Import statement",children:[(0,a.jsxs)(s.p,{children:["Display images using ES ",(0,a.jsx)(s.code,{children:"import"})," syntax and JSX image tag:"]}),(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import myImageUrl from './assets/docusaurus-asset-example-banner.png';\n\n<img src={myImageUrl} alt=\"Example banner\" />;\n"})})]})]}),"\n",(0,a.jsx)(s.p,{children:"All of the above result in displaying the image:"}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"My image alternative text",src:t(28662).Z+"",width:"422",height:"110"})})}),"\n",(0,a.jsx)(s.admonition,{type:"note",children:(0,a.jsxs)(s.p,{children:["If you are using ",(0,a.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-ideal-image",children:"@docusaurus/plugin-ideal-image"}),", you need to use the dedicated image component, as documented."]})}),"\n",(0,a.jsx)(s.h2,{id:"files",children:"Files"}),"\n",(0,a.jsxs)(s.p,{children:["In the same way, you can link to existing assets by ",(0,a.jsx)(s.code,{children:"require"}),"'ing them and using the returned URL in ",(0,a.jsx)(s.code,{children:"video"}),"s, ",(0,a.jsx)(s.code,{children:"a"})," anchor links, etc."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"# My Markdown page\n\n<a target=\"\\_blank\" href={require('./assets/docusaurus-asset-example.docx').default}> Download this docx </a>\n\nor\n\n[Download this docx using Markdown](./assets/docusaurus-asset-example.docx)\n"})}),"\n",(0,a.jsxs)(i.Z,{children:[(0,a.jsx)("a",{target:"_blank",href:t(23266).Z,children:"Download this docx"}),(0,a.jsx)(s.p,{children:(0,a.jsx)(s.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(3072).Z+"",children:"Download this docx using Markdown"})})]}),"\n",(0,a.jsx)(s.admonition,{title:"Markdown links are always file paths",type:"info",children:(0,a.jsxs)(s.p,{children:["If you use the Markdown image or link syntax, all asset paths will be resolved as file paths by Docusaurus and automatically converted to ",(0,a.jsx)(s.code,{children:"require()"})," calls. You don't need to use ",(0,a.jsx)(s.code,{children:"require()"})," in Markdown unless you use the JSX syntax, which you do have to handle yourself."]})}),"\n",(0,a.jsx)(s.h2,{id:"inline-svgs",children:"Inline SVGs"}),"\n",(0,a.jsx)(s.p,{children:"Docusaurus supports inlining SVGs out of the box."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg />;\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{})}),"\n",(0,a.jsx)(s.p,{children:"This can be useful if you want to alter the part of the SVG image via CSS. For example, you can change one of the SVG colors based on the current theme."}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import DocusaurusSvg from './docusaurus.svg';\n\n<DocusaurusSvg className=\"themedDocusaurus\" />;\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",children:"[data-theme='light'] .themedDocusaurus [fill='#FFFF50'] {\n fill: greenyellow;\n}\n\n[data-theme='dark'] .themedDocusaurus [fill='#FFFF50'] {\n fill: seagreen;\n}\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(d,{className:"themedDocusaurus"})}),"\n",(0,a.jsx)(s.h2,{id:"themed-images",children:"Themed Images"}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus supports themed images: the ",(0,a.jsx)(s.code,{children:"ThemedImage"})," component (included in the themes) allows you to switch the image source based on the current theme."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-jsx",children:"import ThemedImage from '@theme/ThemedImage';\n\n<ThemedImage\n alt=\"Docusaurus themed image\"\n // highlight-start\n sources={{\n light: useBaseUrl('/img/docusaurus_light.svg'),\n dark: useBaseUrl('/img/docusaurus_dark.svg'),\n }}\n // highlight-end\n/>;\n"})}),"\n","\n",(0,a.jsx)(i.Z,{children:(0,a.jsx)(m.Z,{alt:"Docusaurus themed image",sources:{light:(0,h.Z)("/img/docusaurus_keytar.svg"),dark:(0,h.Z)("/img/docusaurus_speed.svg")}})}),"\n",(0,a.jsx)(s.h3,{id:"github-style-themed-images",children:"GitHub-style themed images"}),"\n",(0,a.jsxs)(s.p,{children:["GitHub uses its own ",(0,a.jsx)(s.a,{href:"https://github.blog/changelog/2021-11-24-specify-theme-context-for-images-in-markdown/",children:"image theming approach"})," with path fragments, which you can easily implement yourself."]}),"\n",(0,a.jsxs)(s.p,{children:["To toggle the visibility of an image using the path fragment (for GitHub, it's ",(0,a.jsx)(s.code,{children:"#gh-dark-mode-only"})," and ",(0,a.jsx)(s.code,{children:"#gh-light-mode-only"}),"), add the following to your custom CSS (you can also use your own suffix if you don't want to be coupled to GitHub):"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-css",metastring:'title="src/css/custom.css"',children:"[data-theme='light'] img[src$='#gh-dark-mode-only'],\n[data-theme='dark'] img[src$='#gh-light-mode-only'] {\n display: none;\n}\n"})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![Docusaurus themed image](/img/docusaurus_keytar.svg#gh-light-mode-only)![Docusaurus themed image](/img/docusaurus_speed.svg#gh-dark-mode-only)\n"})}),"\n",(0,a.jsx)(i.Z,{children:(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(83684).Z+"#gh-light-mode-only",width:"200",height:"200"}),(0,a.jsx)(s.img,{alt:"Docusaurus themed image",src:t(10861).Z+"#gh-dark-mode-only",width:"250",height:"200"})]})}),"\n",(0,a.jsx)(s.h2,{id:"static-assets",children:"Static assets"}),"\n",(0,a.jsxs)(s.p,{children:["If a Markdown link or image has an absolute path, the path will be seen as a file path and will be resolved from the static directories. For example, if you have configured ",(0,a.jsx)(s.a,{href:"/docs/static-assets",children:"static directories"})," to be ",(0,a.jsx)(s.code,{children:"['public', 'static']"}),", then for the following image:"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",metastring:'title="my-doc.md"',children:"![An image from the static](/img/docusaurus.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Docusaurus will try to look for it in both ",(0,a.jsx)(s.code,{children:"static/img/docusaurus.png"})," and ",(0,a.jsx)(s.code,{children:"public/img/docusaurus.png"}),". The link will then be converted to a ",(0,a.jsx)(s.code,{children:"require()"})," call instead of staying as a URL. This is desirable in two regards:"]}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsx)(s.li,{children:"You don't have to worry about the base URL, which Docusaurus will take care of when serving the asset;"}),"\n",(0,a.jsx)(s.li,{children:"The image enters Webpack's build pipeline and its name will be appended by a hash, which enables browsers to aggressively cache the image and improves your site's performance."}),"\n"]}),"\n",(0,a.jsxs)(s.p,{children:["If you intend to write URLs, you can use the ",(0,a.jsx)(s.code,{children:"pathname://"})," protocol to disable automatic asset linking."]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-md",children:"![banner](pathname:///img/docusaurus-asset-example-banner.png)\n"})}),"\n",(0,a.jsxs)(s.p,{children:["This link will be generated as ",(0,a.jsx)(s.code,{children:'<img src="/img/docusaurus-asset-example-banner.png" alt="banner" />'}),", without any processing or file existence checking."]})]})}function y(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(j,{...e})}):j(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a3883fa.52057d33.js b/assets/js/4a3883fa.52057d33.js new file mode 100644 index 0000000000..c3112c5bc7 --- /dev/null +++ b/assets/js/4a3883fa.52057d33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88203],{55915:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>r});var s=n(24246),i=n(71670);const o={unlisted:!0},d="Unlisted page",a={type:"mdx",permalink:"/tests/pages/unlisted",source:"@site/_dogfooding/_pages tests/unlisted.mdx",title:"Unlisted page",description:"This unlisted page should always be directly accessible, but hidden from search engines",frontMatter:{unlisted:!0},lastUpdatedBy:"Jody Heavener",lastUpdatedAt:1667482301e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/unlisted.mdx",unlisted:!0},c={},r=[];function l(e){const t={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"unlisted-page",children:"Unlisted page"}),"\n",(0,s.jsx)(t.p,{children:"This unlisted page should always be directly accessible, but hidden from search engines"})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>d});var s=n(27378);const i={},o=s.createContext(i);function d(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a70d01c.2edc41dc.js b/assets/js/4a70d01c.2edc41dc.js new file mode 100644 index 0000000000..7bcedc901a --- /dev/null +++ b/assets/js/4a70d01c.2edc41dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59393],{83011:(e,s,l)=>{l.r(s),l.d(s,{assets:()=>a,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>h,toc:()=>o});var n=l(24246),r=l(71670);const i={mdx:{format:"md"},date:"2021-04-27T20:00",authors:["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},t="2.0.0-alpha.74",h={permalink:"/changelog/2.0.0-alpha.74",source:"@site/changelog/source/2.0.0-alpha.74.md",title:"2.0.0-alpha.74",description:"New Feature",date:"2021-04-27T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"alena-ko",alias:"alena-ko",url:"https://github.com/alena-ko",imageURL:"https://github.com/alena-ko.png",key:"alena-ko"},{name:"Arnaud Jeannin",alias:"arnaudjnn",url:"https://github.com/arnaudjnn",imageURL:"https://github.com/arnaudjnn.png",key:"arnaudjnn"},{name:"DOLLE",alias:"JeremyDolle",url:"https://github.com/JeremyDolle",imageURL:"https://github.com/JeremyDolle.png",key:"JeremyDolle"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"kazk",alias:"kazk",url:"https://github.com/kazk",imageURL:"https://github.com/kazk.png",key:"kazk"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lisa Chandra",alias:"lisa761",url:"https://github.com/lisa761",imageURL:"https://github.com/lisa761.png",key:"lisa761"},{name:"Luis Medina Huerta",alias:"luism3861",url:"https://github.com/luism3861",imageURL:"https://github.com/luism3861.png",key:"luism3861"},{name:"MisterFISHUP",alias:"MisterFISHUP",url:"https://github.com/MisterFISHUP",imageURL:"https://github.com/MisterFISHUP.png",key:"MisterFISHUP"},{name:"Tommy",alias:"react-learner",url:"https://github.com/react-learner",imageURL:"https://github.com/react-learner.png",key:"react-learner"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2021-04-27T20:00",authors:["alena-ko","arnaudjnn","JeremyDolle","johnnyreilly","kazk","lex111","lisa761","luism3861","MisterFISHUP","react-learner","SamChou19815","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.75",permalink:"/changelog/2.0.0-alpha.75"},nextItem:{title:"2.0.0-alpha.73",permalink:"/changelog/2.0.0-alpha.73"},listPageLink:"/changelog/page/3"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 12",id:"committers-12",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Other\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4515",children:"#4515"})," feat(v2): add tag filters to showcase page (",(0,n.jsx)(s.a,{href:"https://github.com/lisa761",children:"@lisa761"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4658",children:"#4658"})," feat(v2): allow user to customize/enhance the default sidebar items generator (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4655",children:"#4655"})," feat(v2): docs, make numberPrefixParser configurable, better defaults, minor breaking-changes (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,n.jsx)(s.code,{children:"docusaurus"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4688",children:"#4688"})," fix(v2): fix title logic (meta vs heading) + ignore fixed anchor id syntax (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4689",children:"#4689"})," chore(v2): update infima to alpha 23 (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4667",children:"#4667"})," fix(v2): Unbreak blog post title by handling title fallback in ",(0,n.jsx)(s.code,{children:"LayoutHead"})," (",(0,n.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4687",children:"#4687"})," fix(v2): accept empty/null custom_edit_url docs frontmatter for retrocompat (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4651",children:"#4651"})," fix(v2): sidebar autogen from subfolder should read category metadata correctly (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4629",children:"#4629"})," fix(v2): fix validation rejecting admonitions false (",(0,n.jsx)(s.a,{href:"https://github.com/kazk",children:"@kazk"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,n.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4654",children:"#4654"})," fix(v2): fix too strict markdown frontmatter validation (",(0,n.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4646",children:"#4646"})," fix(v2): ignore imports when h1 heading parsing (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4641",children:"#4641"})," fix(v2): parse headings directly after h1 properly (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4682",children:"#4682"})," refactor(v2): align external icon on right (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4496",children:"#4496"})," docs(v2): Add Qovery to deployment doc (",(0,n.jsx)(s.a,{href:"https://github.com/arnaudjnn",children:"@arnaudjnn"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4680",children:"#4680"})," docs(v2): Fix urls in deployment.md (",(0,n.jsx)(s.a,{href:"https://github.com/luism3861",children:"@luism3861"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4668",children:"#4668"})," docs(v2): Add Hostman to deployment doc (",(0,n.jsx)(s.a,{href:"https://github.com/alena-ko",children:"@alena-ko"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4676",children:"#4676"})," docs(v2): Add Daily Digest - COVID-19 IN FRANCE to showcase (",(0,n.jsx)(s.a,{href:"https://github.com/MisterFISHUP",children:"@MisterFISHUP"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4643",children:"#4643"})," docs(v2): Fix typo in installation.md (",(0,n.jsx)(s.a,{href:"https://github.com/react-learner",children:"@react-learner"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4649",children:"#4649"})," docs(v2): Add new showcase user (",(0,n.jsx)(s.a,{href:"https://github.com/JeremyDolle",children:"@JeremyDolle"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Other\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4670",children:"#4670"})," chore: add some redirects to v1.docusaurus.io (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4631",children:"#4631"})," chore(v2): update examples to use alpha73 (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"committers-12",children:"Committers: 12"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,n.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Arnaud Jeannin (",(0,n.jsx)(s.a,{href:"https://github.com/arnaudjnn",children:"@arnaudjnn"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["DOLLE (",(0,n.jsx)(s.a,{href:"https://github.com/JeremyDolle",children:"@JeremyDolle"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["John Reilly (",(0,n.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Lisa Chandra (",(0,n.jsx)(s.a,{href:"https://github.com/lisa761",children:"@lisa761"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Luis Medina Huerta (",(0,n.jsx)(s.a,{href:"https://github.com/luism3861",children:"@luism3861"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Sam Zhou (",(0,n.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,n.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Tommy (",(0,n.jsx)(s.a,{href:"https://github.com/react-learner",children:"@react-learner"}),")"]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/MisterFISHUP",children:"@MisterFISHUP"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/alena-ko",children:"@alena-ko"})}),"\n",(0,n.jsxs)(s.li,{children:["kazk (",(0,n.jsx)(s.a,{href:"https://github.com/kazk",children:"@kazk"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,l)=>{l.d(s,{Z:()=>h,a:()=>t});var n=l(27378);const r={},i=n.createContext(r);function t(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ab187ba.f430e009.js b/assets/js/4ab187ba.f430e009.js new file mode 100644 index 0000000000..8c9bc116fc --- /dev/null +++ b/assets/js/4ab187ba.f430e009.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[465],{12399:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var o=n(24246),s=n(71670);const i={},c="Introduction",r={id:"tests/category-links/custom-index-convention/intro",title:"Introduction",description:"This file is called intro.md. Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one.",source:"@site/_dogfooding/_docs tests/tests/category-links/custom-index-convention/intro.mdx",sourceDirName:"tests/category-links/custom-index-convention",slug:"/tests/category-links/custom-index-convention/intro",permalink:"/tests/docs/tests/category-links/custom-index-convention/intro",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Category Links",permalink:"/tests/docs/category-links-generated-index-slug"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/custom-index-convention/sample-doc"}},a={},d=[];function l(e){const t={code:"code",h1:"h1",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"introduction",children:"Introduction"}),"\n",(0,o.jsxs)(t.p,{children:["This file is called ",(0,o.jsx)(t.code,{children:"intro.md"}),". Typically, it won't be selected by the convention; however, it is in this case, because we have used a custom one."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>c});var o=n(27378);const s={},i=o.createContext(s);function c(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c9d8eaa.3c4b56bf.js b/assets/js/4c9d8eaa.3c4b56bf.js new file mode 100644 index 0000000000..751f6e0ef5 --- /dev/null +++ b/assets/js/4c9d8eaa.3c4b56bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83692],{17090:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>w,contentTitle:()=>f,default:()=>v,frontMatter:()=>g,metadata:()=>j,toc:()=>y});var n=i(24246),r=i(71670),a=(i(27378),i(36712)),o=i(41428),s=i(52615);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}(Object(t)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))})),e}function h({to:e,children:t}){return(0,n.jsx)(o.Z,{to:e,children:null!=t?t:(0,n.jsx)(a.Z,{id:"team.profile.websiteLinkLabel",children:"website"})})}function d({className:e,name:t,children:i,githubUrl:r,twitterUrl:a}){return(0,n.jsx)("div",{className:e,children:(0,n.jsxs)("div",{className:"card card--full-height",children:[(0,n.jsx)("div",{className:"card__header",children:(0,n.jsxs)("div",{className:"avatar avatar--vertical",children:[(0,n.jsx)("img",{className:"avatar__photo avatar__photo--xl",src:`${r}.png`,alt:`${t}'s avatar`}),(0,n.jsx)("div",{className:"avatar__intro",children:(0,n.jsx)(s.Z,{as:"h3",className:"avatar__name",children:t})})]})}),(0,n.jsx)("div",{className:"card__body",children:i}),(0,n.jsx)("div",{className:"card__footer",children:(0,n.jsxs)("div",{className:"button-group button-group--block",children:[r&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:r,children:"GitHub"}),a&&(0,n.jsx)(o.Z,{className:"button button--secondary",href:a,children:"Twitter"})]})})]})})}function u(e){return(0,n.jsx)(d,c(function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{},n=Object.keys(i);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(i).filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable})))),n.forEach((function(t){l(e,t,i[t])}))}return e}({},e),{className:"col col--6 margin-bottom--lg"}))}function m(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"S\xe9bastien Lorber",githubUrl:"https://github.com/slorber",twitterUrl:"https://twitter.com/sebastienlorber",children:(0,n.jsx)(a.Z,{id:"team.profile.Sebastien Lorber.body",values:{website:(0,n.jsx)(h,{to:"https://sebastienlorber.com/"}),devto:(0,n.jsx)(o.Z,{to:"https://dev.to/sebastienlorber",children:"Dev.to"})},children:"React lover since 2014. Freelance, helping Facebook ship Docusaurus v2. He writes regularly, on his {website} and {devto}."})}),(0,n.jsx)(u,{name:"Sida Chen",githubUrl:"https://github.com/Josh-Cena",twitterUrl:"https://twitter.com/SidaChen63",children:(0,n.jsx)(a.Z,{id:"team.profile.Sida Chen.body",children:"Student from Shanghai, China. Enthusiastic open-source project creator, but never actually works hard on those projects he created."})}),(0,n.jsx)(u,{name:"Cl\xe9ment Couriol",githubUrl:"https://github.com/ozakione",children:(0,n.jsx)(a.Z,{id:"team.profile.Clement Couriol.body",children:"Student from CPE Lyon, France. Passionate web developer who tries to become an expert web developer."})})]})}function p(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Joel Marcey",githubUrl:"https://github.com/JoelMarcey",twitterUrl:"https://twitter.com/joelmarcey",children:(0,n.jsx)(a.Z,{id:"team.profile.Joel Marcey.body",children:"Docusaurus founder and now ever grateful Docusaurus cheerleader to those who actually write code for it."})}),(0,n.jsx)(u,{name:"Alexey Pyltsyn",githubUrl:"https://github.com/lex111",children:(0,n.jsx)(a.Z,{id:"team.profile.Alexey Pyltsyn.body",children:"Obsessed open-source enthusiast \ud83d\udc4b Eternal amateur at everything \ud83e\udd37\u200d\u2642\ufe0f Maintainer of Russian docs on PHP, React, Kubernetes and much more \ud83e\uddd0"})}),(0,n.jsx)(u,{name:"Yangshun Tay",githubUrl:"https://github.com/yangshun",twitterUrl:"https://twitter.com/yangshunz",children:(0,n.jsx)(a.Z,{id:"team.profile.Yangshun Tay.body",children:"Full Front End Stack developer who likes working on the Jamstack. Working on Docusaurus made him Facebook's unofficial part-time Open Source webmaster, which is an awesome role to be in."})}),(0,n.jsx)(u,{name:"Endilie Yacop Sucipto",githubUrl:"https://github.com/endiliey",twitterUrl:"https://twitter.com/endiliey",children:(0,n.jsx)(a.Z,{id:"team.profile.Endilie Yacop Sucipto.body",children:"Maintainer @docusaurus \xb7 \ud83d\udd25\ud83d\udd25\ud83d\udd25"})}),(0,n.jsx)(u,{name:"Wei Gao",githubUrl:"https://github.com/wgao19",twitterUrl:"https://twitter.com/wgao19",children:(0,n.jsx)(a.Z,{id:"team.profile.Wei Gao.body",children:"\ud83c\udffb\u200d\ud83c\udf3e Work in progress React developer, maintains Docusaurus, writes docs and spams this world with many websites."})})]})}function b(){return(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(u,{name:"Anshul Goyal",githubUrl:"https://github.com/anshulrgoyal",twitterUrl:"https://twitter.com/ar_goyal",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://anshulgoyal.dev/",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})})},children:"Fullstack developer who loves to code and try new technologies. In his free time, he contributes to open source, writes blog posts on his {websiteLink} and watches Anime."})}),(0,n.jsx)(u,{name:"Drew Alexander",githubUrl:"https://github.com/drewbi",children:(0,n.jsx)(a.Z,{id:"team.profile.Drew Alexander.body",children:"Developer and Creative, trying to gain the skills to build whatever he can think of."})}),(0,n.jsx)(u,{name:"Fanny Vieira",githubUrl:"https://github.com/fanny",twitterUrl:"https://twitter.com/fannyvieiira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body",values:{blogLink:(0,n.jsx)(o.Z,{href:"https://dev.to/fannyvieira",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.blogLink.label",children:"her blog"})}),spotifyLink:(0,n.jsx)(o.Z,{href:"https://open.spotify.com/user/anotherfanny",children:(0,n.jsx)(a.Z,{id:"team.profile.Fanny Vieira.body.spotifyLink.label",children:"Spotify playlists"})})},children:"Fanny got started with web development in high school, building a project for the school kitchen. In her free time she loves contributing to Open Source, occasionally writing on {blogLink} about her experiences, cooking, and creating {spotifyLink}."})}),(0,n.jsx)(u,{name:"Sam Zhou",githubUrl:"https://github.com/SamChou19815",twitterUrl:"https://twitter.com/SamChou19815",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body",values:{websiteLink:(0,n.jsx)(o.Z,{href:"https://developersam.com",children:(0,n.jsx)(a.Z,{id:"team.profile.Anshul Goyal.body.websiteLink.label",children:"website"})}),samLangLink:(0,n.jsx)(o.Z,{href:"https://samlang.developersam.com/",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.samLangLink.label",children:"programming language"})}),miniReactLink:(0,n.jsx)(o.Z,{href:"https://github.com/SamChou19815/mini-react",children:(0,n.jsx)(a.Z,{id:"team.profile.Sam Zhou.body.miniReactLink.label",children:"mini React"})})},children:"Sam started programming in 2011 and built his {websiteLink} in 2015. He is interested in programming languages, dev infra and web development, and has built his own {samLangLink} and {miniReactLink}."})}),(0,n.jsx)(u,{name:"Tan Teik Jun",githubUrl:"https://github.com/teikjun",twitterUrl:"https://twitter.com/teik_jun",children:(0,n.jsx)(a.Z,{id:"team.profile.Tan Teik Jun.body",children:"Open-source enthusiast who aims to become as awesome as the other humans on this page. Working on Docusaurus brought him closer to his goal. \ud83c\udf31"})}),(0,n.jsx)(u,{name:"Nisarag Bhatt",githubUrl:"https://github.com/FocalChord",twitterUrl:"https://twitter.com/focalchord_",children:(0,n.jsx)(a.Z,{id:"team.profile.Nisarag Bhatt.body",children:"Fullstack web developer who loves learning new technologies and applying them! Loves contributing to open source as well as writing content articles and tutorials."})})]})}const g={},f="Team",j={id:"team",title:"Team",description:"Active Team",source:"@site/community/1-team.mdx",sourceDirName:".",slug:"/team",permalink:"/community/team",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/1-team.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1618496411e3,sidebarPosition:1,frontMatter:{},sidebar:"community",previous:{title:"Support",permalink:"/community/support"},next:{title:"Awesome Resources",permalink:"/community/resources"}},w={},y=[{value:"Active Team",id:"active-team",level:2},{value:"Honorary Alumni",id:"honorary-alumni",level:2},{value:"Student Fellows",id:"student-fellows",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2}];function x(e){const t={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"team",children:"Team"}),"\n","\n",(0,n.jsx)(t.h2,{id:"active-team",children:"Active Team"}),"\n",(0,n.jsx)(t.p,{children:"The Docusaurus team works on the core functionality, plugins for the classic theme, as well as the Docusaurus documentation website."}),"\n",(0,n.jsx)(t.p,{children:"Current members of the Docusaurus team are listed in alphabetical order below."}),"\n",(0,n.jsx)(m,{}),"\n",(0,n.jsx)(t.h2,{id:"honorary-alumni",children:"Honorary Alumni"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus would never be what it is today without the huge contributions from these folks who have moved on to bigger and greater things."}),"\n",(0,n.jsx)(p,{}),"\n",(0,n.jsx)(t.h2,{id:"student-fellows",children:"Student Fellows"}),"\n",(0,n.jsxs)(t.p,{children:["A handful of students have also worked on Docusaurus as part of their school term/internship and the ",(0,n.jsx)(t.a,{href:"https://fellowship.mlh.io/",children:"Major League Hacking Fellowship program"}),", contributing amazing features such as plugin options validation, migration tooling, and a Bootstrap theme."]}),"\n",(0,n.jsx)(b,{}),"\n",(0,n.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus was originally created by Joel Marcey. Today, Docusaurus has a few hundred open source contributors. We\u2019d like to recognize a few people who have made significant contributions to Docusaurus and its documentation in the past and have helped maintain them over the years:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/amyrlam",children:"Amy Lam"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/chenglou",children:"Cheng Lou"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/caabernathy",children:"Christine Abernathy"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/vjeux",children:"Christopher Chedeau"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/elviswolcott",children:"Elvis Wolcott"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/fiennyangeln",children:"Fienny Angelina"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/hramos",children:"H\xe9ctor Ramos"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rlamana",children:"Ram\xf3n Lamana"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/rickyvetter",children:"Ricky Vetter"})}),"\n"]})]})}function v(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>s,a:()=>o});var n=i(27378);const r={},a=n.createContext(r);function o(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c9e35b1.5cb3f9fe.js b/assets/js/4c9e35b1.5cb3f9fe.js deleted file mode 100644 index c441510705..0000000000 --- a/assets/js/4c9e35b1.5cb3f9fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[2161],{4722:s=>{s.exports=JSON.parse('{"permalink":"/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4e761ad8.b182b63e.js b/assets/js/4e761ad8.b182b63e.js new file mode 100644 index 0000000000..205f19e641 --- /dev/null +++ b/assets/js/4e761ad8.b182b63e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58797],{26298:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>d,toc:()=>a});var n=s(24246),i=s(71670);const o={title:"Unlisted blog post",unlisted:!0,tags:["blog","visibility","unlisted"],slug:"/unlisted-post"},l=void 0,d={permalink:"/tests/blog/unlisted-post",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx",source:"@site/_dogfooding/_blog tests/2022-08-24-post-unlisted.mdx",title:"Unlisted blog post",description:'This unlisted blog post should be "hidden" in production, but remain accessible.',date:"2022-08-24T00:00:00.000Z",tags:[{label:"blog",permalink:"/tests/blog/tags/blog"},{label:"visibility",permalink:"/tests/blog/tags/visibility"},{label:"unlisted",permalink:"/tests/blog/tags/unlisted"}],readingTime:4.2,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Unlisted blog post",unlisted:!0,tags:["blog","visibility","unlisted"],slug:"/unlisted-post"},unlisted:!0},r={authorsImageUrls:[]},a=[];function u(t){const e={p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:'This unlisted blog post should be "hidden" in production, but remain accessible.'}),"\n",(0,n.jsx)(e.p,{children:"It is filtered from the sidebar, sitemap, SEO indexation..."})]})}function c(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>d,a:()=>l});var n=s(27378);const i={},o=n.createContext(i);function l(t){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function d(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:l(t.components),n.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/4eeb5b68.4ef86135.js b/assets/js/4eeb5b68.4ef86135.js new file mode 100644 index 0000000000..fe12a41b66 --- /dev/null +++ b/assets/js/4eeb5b68.4ef86135.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[37963],{91606:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog/page/5","page":5,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/4","nextPage":"/tests/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4f8c86e0.5498614c.js b/assets/js/4f8c86e0.5498614c.js new file mode 100644 index 0000000000..d38b2b6a99 --- /dev/null +++ b/assets/js/4f8c86e0.5498614c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[13928],{9655:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>g,toc:()=>u});var n=e(24246),l=e(71670);const s={authors:["slorber",{name:"Josh-Cena",image_url:"https://avatars.githubusercontent.com/u/55398995?v=4",url:"https://joshcena.com"}],tags:["blog","docusaurus","paginated-tag","long","long-long","long-long-long","long-long-long-long","long-long-long-long-long"]},a="Multiple authors",g={permalink:"/tests/blog/2021/08/23/multiple-authors",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx",source:"@site/_dogfooding/_blog tests/2021-08-23-multiple-authors.mdx",title:"Multiple authors",description:"You can have multiple authors for one blog post!",date:"2021-08-23T00:00:00.000Z",tags:[{label:"blog",permalink:"/tests/blog/tags/blog"},{label:"docusaurus",permalink:"/tests/blog/tags/docusaurus"},{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"},{label:"long",permalink:"/tests/blog/tags/long"},{label:"long-long",permalink:"/tests/blog/tags/long-long"},{label:"long-long-long",permalink:"/tests/blog/tags/long-long-long"},{label:"long-long-long-long",permalink:"/tests/blog/tags/long-long-long-long"},{label:"long-long-long-long-long",permalink:"/tests/blog/tags/long-long-long-long-long"}],readingTime:1.8,hasTruncateMarker:!1,authors:[{name:"Sebastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",twitter:"sebastienlorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Josh-Cena",image_url:"https://avatars.githubusercontent.com/u/55398995?v=4",url:"https://joshcena.com",imageURL:"https://avatars.githubusercontent.com/u/55398995?v=4"}],frontMatter:{authors:["slorber",{name:"Josh-Cena",image_url:"https://avatars.githubusercontent.com/u/55398995?v=4",url:"https://joshcena.com",imageURL:"https://avatars.githubusercontent.com/u/55398995?v=4"}],tags:["blog","docusaurus","paginated-tag","long","long-long","long-long-long","long-long-long-long","long-long-long-long-long"]},unlisted:!1,prevItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/09/13/dup-title"},nextItem:{title:"Hmmm!",permalink:"/tests/blog/2021/08/22/no-author"}},r={authorsImageUrls:[void 0,void 0]},u=[];function i(t){const o={p:"p",...(0,l.a)(),...t.components};return(0,n.jsx)(o.p,{children:"You can have multiple authors for one blog post!"})}function c(t={}){const{wrapper:o}={...(0,l.a)(),...t.components};return o?(0,n.jsx)(o,{...t,children:(0,n.jsx)(i,{...t})}):i(t)}},71670:(t,o,e)=>{e.d(o,{Z:()=>g,a:()=>a});var n=e(27378);const l={},s=n.createContext(l);function a(t){const o=n.useContext(s);return n.useMemo((function(){return"function"==typeof t?t(o):{...o,...t}}),[o,t])}function g(t){let o;return o=t.disableParentContext?"function"==typeof t.components?t.components(l):t.components||l:a(t.components),n.createElement(s.Provider,{value:o},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/507.eee2502a.js b/assets/js/507.eee2502a.js new file mode 100644 index 0000000000..9b6dbf9261 --- /dev/null +++ b/assets/js/507.eee2502a.js @@ -0,0 +1,54404 @@ +exports.id = 507; +exports.ids = [507]; +exports.modules = { + +/***/ 43203: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(54899)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 35302: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(43203)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 14413: +/***/ (function(module) { + +/** + * Copyright (c) 2016-2023, The Cytoscape Consortium. + * + * 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. + */ + +(function (global, factory) { + true ? module.exports = factory() : + 0; +})(this, (function () { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + + function _defineProperty$1(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var window$1 = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + + var navigator = window$1 ? window$1.navigator : null; + window$1 ? window$1.document : null; + + var typeofstr = _typeof(''); + + var typeofobj = _typeof({}); + + var typeoffn = _typeof(function () {}); + + var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); + + var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; + }; + + var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; + }; + var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; + }; + var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); + }; + var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; + }; + var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; + }; + var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); + }; + var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; + }; + var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } + }; + var elementOrCollection = function elementOrCollection(obj) { + return element(obj) || collection(obj); + }; + var element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; + }; + var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; + }; + var core = function core(obj) { + return instanceStr(obj) === 'core'; + }; + var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; + }; + var event = function event(obj) { + return instanceStr(obj) === 'event'; + }; + var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got + }; + var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } + }; + var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); + }; + var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); + }; + var ms = function ms() { + return navigator && navigator.userAgent.match(/msie|trident|edge/i); + }; // probably a better way to detect this... + + var memoize$1 = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + + var args = []; + + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + + return args.join('$'); + }; + } + + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + + return ret; + }; + + memoizedFn.cache = {}; + return memoizedFn; + }; + + var camel2dash = memoize$1(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); + }); + var dash2camel = memoize$1(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); + }); + var prependCamel = memoize$1(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); + }, function (prefix, str) { + return prefix + '$' + str; + }); + var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + + return str.charAt(0).toUpperCase() + str.substring(1); + }; + + var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; + var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; + var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; + var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; + var hex3 = '\\#[0-9a-fA-F]{3}'; + var hex6 = '\\#[0-9a-fA-F]{6}'; + + var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } + }; + var descending = function descending(a, b) { + return -1 * ascending(a, b); + }; + + var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + + if (obj == null) { + continue; + } + + var keys = Object.keys(obj); + + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + + return tgt; + }; + + var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + + return [r, g, b]; + }; // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) + + var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + + var m = new RegExp('^' + hsla + '$').exec(hsl); + + if (m) { + // get hue + h = parseInt(m[1]); + + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + + + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + + + l = l / 100; // normalise on [0, 1] + + a = m[4]; + + if (a !== undefined) { + a = parseFloat(a); + + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + + } // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + + + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + + ret = [r, g, b, a]; + } + + return ret; + }; // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) + + var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + + if (m) { + ret = []; + var isPct = []; + + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + + channel = parseFloat(channel); + + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + + ret.push(Math.floor(channel)); + } + + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + + var alpha = m[4]; + + if (alpha !== undefined) { + alpha = parseFloat(alpha); + + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + + ret.push(alpha); + } + } + + return ret; + }; + var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; + }; + var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); + }; + var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + // regular colours + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] + }; + + var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } + }; // gets the value in a map even if it's not built in places + + var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + + for (var i = 0; i < l; i++) { + var key = keys[i]; + + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + + obj = obj[key]; + + if (obj == null) { + return obj; + } + } + + return obj; + }; // deletes the entry in the map + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + var isObject_1 = isObject; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + var _freeGlobal = freeGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = _freeGlobal || freeSelf || Function('return this')(); + + var _root = root; + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = function() { + return _root.Date.now(); + }; + + var now_1 = now; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + var _trimmedEndIndex = trimmedEndIndex; + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + var _baseTrim = baseTrim; + + /** Built-in value references. */ + var Symbol$1 = _root.Symbol; + + var _Symbol = Symbol$1; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$5.toString; + + /** Built-in value references. */ + var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$4.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + var _getRawTag = getRawTag; + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$4.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + var _objectToString = objectToString; + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? _getRawTag(value) + : _objectToString(value); + } + + var _baseGetTag = baseGetTag; + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + var isObjectLike_1 = isObjectLike; + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike_1(value) && _baseGetTag(value) == symbolTag); + } + + var isSymbol_1 = isSymbol; + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol_1(value)) { + return NAN; + } + if (isObject_1(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject_1(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + var toNumber_1 = toNumber; + + /** Error message constants. */ + var FUNC_ERROR_TEXT$1 = 'Expected a function'; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max, + nativeMin = Math.min; + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + wait = toNumber_1(wait) || 0; + if (isObject_1(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber_1(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now_1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now_1()); + } + + function debounced() { + var time = now_1(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + var debounce_1 = debounce; + + var performance = window$1 ? window$1.performance : null; + var pnow = performance && performance.now ? function () { + return performance.now(); + } : function () { + return Date.now(); + }; + + var raf = function () { + if (window$1) { + if (window$1.requestAnimationFrame) { + return function (fn) { + window$1.requestAnimationFrame(fn); + }; + } else if (window$1.mozRequestAnimationFrame) { + return function (fn) { + window$1.mozRequestAnimationFrame(fn); + }; + } else if (window$1.webkitRequestAnimationFrame) { + return function (fn) { + window$1.webkitRequestAnimationFrame(fn); + }; + } else if (window$1.msRequestAnimationFrame) { + return function (fn) { + window$1.msRequestAnimationFrame(fn); + }; + } + } + + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; + }(); + + var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); + }; + var performanceNow = pnow; + + var DEFAULT_HASH_SEED = 9261; + var K = 65599; // 37 also works pretty well + + var DEFAULT_HASH_SEED_ALT = 5381; + var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + + for (;;) { + entry = iterator.next(); + + if (entry.done) { + break; + } + + hash = hash * K + entry.value | 0; + } + + return hash; + }; + var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; + }; + var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; + }; + var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; + }; + var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; + }; + var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; + }; + var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + + return entry; + } + }; + return hashIterableInts(iterator, seed); + }; + var hashStrings = function hashStrings() { + return hashStringsArray(arguments); + }; + var hashStringsArray = function hashStringsArray(strs) { + var hash; + + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + + return hash; + }; + + /*global console */ + var warningsEnabled = true; + var warnSupported = console.warn != null; // eslint-disable-line no-console + + var traceSupported = console.trace != null; // eslint-disable-line no-console + + var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; + var trueify = function trueify() { + return true; + }; + var falsify = function falsify() { + return false; + }; + var zeroify = function zeroify() { + return 0; + }; + var noop$1 = function noop() {}; + var error = function error(msg) { + throw new Error(msg); + }; + var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } + }; + var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + + if (traceSupported) { + console.trace(); + } + } + }; + /* eslint-enable */ + + var clone = function clone(obj) { + return extend({}, obj); + }; // gets a shallow copy of the argument + + var copy = function copy(obj) { + if (obj == null) { + return obj; + } + + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } + }; + var copyArray$1 = function copyArray(arr) { + return arr.slice(); + }; + var uuid = function uuid(a, b + /* placeholders */ + ) { + for ( // loop :) + b = a = ''; // b - result , a - numeric letiable + a++ < 36; // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + + return b; + }; + var _staticEmptyObject = {}; + var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; + }; + var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + + return filledOpts; + }; + }; + var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + + if (oneCopy) { + break; + } + } + } + }; + var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); + }; + var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } + }; + var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; + }; + var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; + }; + + /* global Map */ + var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + + this._obj = {}; + } + + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + + return ObjectMap; + }(); + + var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap; + + /* global Set */ + var undef = "undefined" ; + + var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + + this._obj = Object.create(null); + this.size = 0; + + if (arrayOrObjectSet != null) { + var arr; + + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + + return ObjectSet; + }(); + + var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + + var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + + var group = params.group; // try to automatically infer the group if unspecified + + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } // validate group + + + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } // make the element array-like, just like a collection + + + this.length = 1; + this[0] = this; // NOTE: when something is added here, add also to ele.json() + + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + + if (_p.position.x == null) { + _p.position.x = 0; + } + + if (_p.position.y == null) { + _p.position.y = 0; + } // renderedPosition overrides if specified + + + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + + var classes = []; + + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + + if (!cls || cls === '') { + continue; + } + + _p.classes.add(cls); + } + + this.createEmitter(); + var bypass = params.style || params.css; + + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + + if (restore === undefined || restore) { + this.restore(); + } + }; + + var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; // from pseudocode on wikipedia + + return function searchFn(roots, fn, directed) { + var options; + + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; // enqueue v + + + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + + if (vi.isNode()) { + Q.unshift(vi); + + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + + id2depth[viId] = 0; + } + } + + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + + V[vId] = true; + connectedNodes.push(v); + } + + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + + if (ret === true) { + found = v; + return "break"; + } + + if (ret === false) { + return "break"; + } + + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + + while (Q.length !== 0) { + var _ret = _loop(); + + if (_ret === "continue") continue; + if (_ret === "break") break; + } + + var connectedEles = cy.collection(); + + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + + if (edge != null) { + connectedEles.push(edge); + } + + connectedEles.push(node); + } + + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; + }; // search, spanning trees, etc + + + var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) + }; // nice, short mathematical alias + + elesfn$v.bfs = elesfn$v.breadthFirstSearch; + elesfn$v.dfs = elesfn$v.depthFirstSearch; + + var heap$1 = createCommonjsModule(function (module, exports) { + // Generated by CoffeeScript 1.8.0 + (function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _len, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + { + return module.exports = factory(); + } + })(this, function() { + return Heap; + }); + + }).call(commonjsGlobal); + }); + + var heap = heap$1; + + var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + + var getDist = function getDist(node) { + return dist[node.id()]; + }; + + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + + var Q = new heap(function (a, b) { + return getDist(a) - getDist(b); + }); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + + var _weight = weightFn(edge); + + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + + if (smalletsDist === Infinity) { + continue; + } + + var neighbors = u.neighborhood().intersect(nodes); + + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + + } // while + + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + + if (target.length > 0) { + S.unshift(target); + + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + + return eles.spawn(S); + } + }; + } + }; + + var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + + if (eles.has(ele)) { + return i; + } + } + }; // start with one forest per node + + + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + + if (setUIndex !== setVIndex) { + A.merge(edge); // combine forests for u and v + + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + + return A; + } + }; + + var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false + }); + var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new heap(function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + + var cMin, cMinId; + + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); // Counter + + var steps = 0; // Main loop + + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; // If we've found our goal, then we are done + + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + + for (;;) { + path.unshift(pathNode); + + if (pathEdge != null) { + path.unshift(pathEdge); + } + + pathNode = cameFrom[pathNodeId]; + + if (pathNode == null) { + break; + } + + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } // Add cMin to processed nodes + + + closedSetIds[cMinId] = true; // Update scores for neighbors of cMin + // Take into account if graph is directed or not + + var vwEdges = cMin._private.edges; + + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; // edge must be in set of calling eles + + if (!this.hasElementWithId(e.id())) { + continue; + } // cMin must be the source of edge if directed + + + if (directed && e.data('source') !== cMinId) { + continue; + } + + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); // node must be in set of calling eles + + if (!this.hasElementWithId(wid)) { + continue; + } // if node is in closedSet, ignore it + + + if (closedSetIds[wid]) { + continue; + } // New tentative score for node w + + + var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + // w not in openSet + + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } // w already in openSet, but with greater gScore + + + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + + } // End of main loop + // If we've reached here, then we've not reached our goal + + + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } + }; // elesfn + + var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false + }); + var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + + var weightFn = weight; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var N = nodes.length; + var Nsq = N * N; + + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + + var atIndex = function atIndex(i) { + return nodes[i]; + }; // Initialize distance matrix + + + var dist = new Array(Nsq); + + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } // Initialize matrix used for path reconstruction + // Initialize distance matrix + + + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); // Process edges + + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + + if (src === tgt) { + continue; + } // exclude loops + + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + + var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes + + + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } // If undirected graph, process 'reversed' edge + + + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } // Main loop + + + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + + if (i === j) { + return fromNode.collection(); + } + + if (next[i * N + j] == null) { + return cy.collection(); + } + + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + + return path; + } + }; + return res; + } // floydWarshall + + }; // elesfn + + var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null + }); + var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + + var weightFn = weight; + var eles = this; + var cy = this.cy(); + + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + + var numNodes = nodes.length; + var infoMap = new Map$2(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + + return obj; + }; + + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + + for (;;) { + if (node == null) { + return _this.spawn(); + } + + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + + path.unshift(node[0]); + + if (node.same(thisStart) && path.length > 0) { + break; + } + + if (edge != null) { + path.unshift(edge); + } + + node = pred; + } + + return eles.spawn(path); + }; // Initializations { dist, pred, edge } + + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + + info.pred = null; + info.edge = null; + } // Edges relaxation + + + var replacedEdge = false; + + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + + var _weight = weightFn(edge); + + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); // If undirected graph, we need to take into account the 'reverse' edge + + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + + if (!replacedEdge) { + break; + } + } + + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + + var _src = _edge.source(); + + var _tgt = _edge.target(); + + var _weight2 = weightFn(_edge); + + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + + var numNegativeNodes = negativeNodes.length; + + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord + + }; // elesfn + + var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one + // Updates the remaining edge lists + // Receives as a paramater the edge which causes the collapse + + var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + // Delete all edges between partition1 and partition2 + + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } // All edges pointing to partition2 should now point to partition1 + + + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + + newEdges[_i][2] = partition1; + } + } // Move all nodes from partition2 to partition1 + + + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + + return newEdges; + }; // Contracts a graph until we reach a certain number of meta nodes + + + var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); // Collapse graph based on edge + + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + + return remainingEdges; + }; + + var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + + + var edgeIndexes = []; + + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } // We will store the best cut found here + + + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); // Initial meta node partition + + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; // Main loop + + + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } // Contract until stop point (stopSize nodes) + + + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + // Create a copy of the colapsed nodes state + + copyNodesMap(metaNodeMap, metaNodeMap2); // Run 2 iterations starting in the stop state + + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); // Is any of the 2 results the best cut so far? + + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + // Construct result + + + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); // traverse metaNodeMap for best cut + + var witnessNodePartition = minCutNodeMap[0]; + + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } // construct components corresponding to each disjoint subset of nodes + + + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } + }; // elesfn + + var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; + }; + var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; + }; + var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; + }; + var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; + }; + var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + min = Math.min(val, min); + } + } + + return min; + }; + var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + max = Math.max(val, max); + } + } + + return max; + }; + var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + + for (var i = begin; i < end; i++) { + var val = arr[i]; + + if (isFinite(val)) { + total += val; + n++; + } + } + + return total / n; + }; + var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + + if (begin > 0) { + arr.splice(0, begin); + } + } // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + + + var off = 0; // offset from non-finite values + + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } + }; + var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; + }; + var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; + }; + var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); + }; + var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } + }; + var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); + }; + var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; + }; + var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; // First, get sum of all elements + + var total = 0; + + for (var i = 0; i < length; i++) { + total += v[i]; + } // Now, divide each by the sum of all elements + + + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + + return v; + }; + + var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; + }; + var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; + }; + var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; + }; + var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); + }; // makes a full bb (x1, y1, x2, y2, w, h) from implicit params + + var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } + }; + var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; + }; + var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; + }; + var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; + }; + var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; + }; + var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; + }; + + var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; + }; + var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + + if (bb2.x1 > bb1.x2) { + return false; + } // case: one bb to left of other + + + if (bb1.x2 < bb2.x1) { + return false; + } + + if (bb2.x2 < bb1.x1) { + return false; + } // case: one bb above other + + + if (bb1.y2 < bb2.y1) { + return false; + } + + if (bb2.y2 < bb1.y1) { + return false; + } // case: one bb below other + + + if (bb1.y1 > bb2.y2) { + return false; + } + + if (bb2.y1 > bb1.y2) { + return false; + } // otherwise, must have some overlap + + + return true; + }; + var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; + }; + var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); + }; + var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); + }; + var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var cornerRadius = getRoundRectangleRadius(width, height); + var halfWidth = width / 2; + var halfHeight = height / 2; // Check intersections with straight line segments + + var straightLineIntersections; // Top segment, left to right + + { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Right segment, top to bottom + + { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Bottom segment, left to right + + { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Left segment, top to bottom + + { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } // Check intersections with arc segments + + var arcIntersections; // Top Left + + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Top Right + + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Right + + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } // Bottom Left + + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); // Ensure the intersection is on the desired quarter of the circle + + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing + }; + var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; + }; + var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; // if outside the rough bounding box for the bezier, then it can't be a hit + + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } + }; + var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + + if (r < 0) { + return []; + } + + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; + }; + var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + var epsilon = 0.00001; // avoid division by zero while keeping the overall expression close in value + + if (a === 0) { + a = epsilon; + } + + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + + result[5] = result[3] = 0; + + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; + }; + var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; // Use the cubic solving algorithm + + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + + return minDistanceSquared; + }; + var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + + if (dotProduct < 0) { + return hypSq; + } + + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + + return hypSq - adjSq; + }; + var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; // Intersect with vertical line through (x, y) + + var up = 0; // let down = 0; + + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + + if (y3 > y) { + up++; + } // if( y3 < y ){ + // down++; + // } + + } else { + continue; + } + } + + if (up % 2 === 0) { + return false; + } else { + return true; + } + }; + var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); // Gives negative angle + + var angle; + + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); // console.log("base: " + basePoints); + + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + + var points; + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + + return pointInsidePolygonPoints(x, y, points); + }; + var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { + var cutPolygonPoints = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + var squaredCornerRadius = cornerRadius * cornerRadius; + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + cutPolygonPoints[i * 4] = cp0x; + cutPolygonPoints[i * 4 + 1] = cp0y; + cutPolygonPoints[i * 4 + 2] = cp1x; + cutPolygonPoints[i * 4 + 3] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); + + if (squaredDistance <= squaredCornerRadius) { + return true; + } + } + + return pointInsidePolygonPoints(x, y, cutPolygonPoints); + }; + var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + + return vertices; + }; + var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + // Assume CCW polygon winding + + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); // Normalize + + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + + return expandedLineSet; + }; + var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + + if (newLength < 0) { + return []; + } + + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; + }; + var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; + }; // Returns intersections of increasing distance from line's start point + + var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + + if (discriminant < 0) { + return []; + } + + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + + if (inRangeParams.length === 0) { + return []; + } + + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } + }; + var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } + }; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) + + var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + + var _min = 0 - flptThreshold; + + var _max = 1 + flptThreshold; + + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } // Check start point of second line + + + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } // Endpoint of first line + + + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + + return []; + } else { + // Parallel, non-coincident + return []; + } + } + }; // math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) + // intersect a node polygon (pts transformed) + // + // math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) + // intersect the points (no transform) + + var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + + if (width == null) { + doTransform = false; + } + + var points; + + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + + var currentX, currentY, nextX, nextY; + + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + return intersections; + }; + var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + + if (i === 0) { + lines[basePoints.length - 2] = cp0x; + lines[basePoints.length - 1] = cp0y; + } else { + lines[i * 4 - 2] = cp0x; + lines[i * 4 - 1] = cp0y; + } + + lines[i * 4] = cp1x; + lines[i * 4 + 1] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); + + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + + for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { + var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); + + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i4 * 2]; + lowestIntersection[1] = intersections[_i4 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + + return lowestIntersection; + } + + return intersections; + }; + var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + + if (lenRatio < 0) { + lenRatio = 0.00001; + } + + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; + }; + var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; + }; + var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } // stretch factors + + + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + + for (var _i5 = 0; _i5 < sides; _i5++) { + x = points[2 * _i5] = points[2 * _i5] * sx; + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + if (minY < -1) { + for (var _i6 = 0; _i6 < sides; _i6++) { + y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); + } + } + + return points; + }; + var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; + }; // Set the default radius, unless half of width or height is smaller than default + + var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); + }; // Set the default radius + + var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); + }; + var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; + }; + var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; + }; // get curve width, height, and control point position offsets as a percentage of node height / width + + var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; + }; + + var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } + }); + var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + + var cy = this._private.cy; + + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; // Create null matrix + + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + + columnSum[i] = 0; + } // Now, process edges + + + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); // Don't include loops in the matrix + + if (srcId === tgtId) { + continue; + } + + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + + var _n = t * numNodes + s; // Update matrix + + + matrix[_n] += w; // Update column sum + + columnSum[s] += w; + } // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + + + var p = 1.0 / numNodes + additionalProb; // Shorthand + // Traverse matrix, column by column + + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } // Compute dominant eigenvector using power method + + + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } // Multiply matrix with previous result + + + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; // Compute difference (squared module) of both vectors + + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } // If difference is less than the desired threshold, stop iterating + + + if (diff < precision) { + break; + } + } // Construct result + + + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank + + }; // elesfn + + var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 + }); + var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; // add current node to the current options object and call degreeCentrality + + options.root = node; + var currDegree = this.degreeCentrality(options); + + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + + degrees[node.id()] = currDegree.degree; + } + + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + + var id = _node.id(); // add current node to the current options object and call degreeCentrality + + + options.root = _node; + + var _currDegree = this.degreeCentrality(options); + + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; // Now, sum edge weights + + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; // Now, sum incoming edge weights + + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } // Now, sum outgoing edge weights + + + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$n.dc = elesfn$n.degreeCentrality; + elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + + var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null + }); + var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); // Compute closeness for every node and find the maximum closeness + + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + + closenesses[node_i.id()] = currCloseness; + } + + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + + root = this.filter(root)[0]; // we need distance from this node to every other node + + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$m.cc = elesfn$m.closenessCentrality; + elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + + var defaults$d = defaults$g({ + weight: null, + directed: false + }); + var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + + var weighted = weight != null; + var cy = this.cy(); // starting + + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; // A contains the neighborhoods of every node + + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + + var P = {}; + var g = {}; + var d = {}; + var Q = new heap(function (a, b) { + return d[a] - d[b]; + }); // queue + // init dictionaries + + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + + g[sid] = 1; // sigma + + d[sid] = 0; // distance to s + + Q.push(sid); + + while (!Q.empty()) { + var _v = Q.pop(); + + S.push(_v); + + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + + var edgeWeight = weight(edge); + w = w.id(); + + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + + g[w] = 0; + P[w] = []; + } + + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + + P[_w].push(_v); + } + } + } + } + + var e = {}; + + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + + while (S.length > 0) { + var _w2 = S.pop(); + + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + + for (var s = 0; s < V.length; s++) { + _loop(s); + } + + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; // alias + + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality + + }; // elesfn + // nice, short mathematical alias + + elesfn$l.bc = elesfn$l.betweennessCentrality; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + /* eslint-disable no-unused-vars */ + + var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [// attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] + }); + /* eslint-enable */ + + var setOptions$3 = function setOptions(options) { + return defaults$c(options); + }; + /* eslint-enable */ + + + var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + + return total; + }; + + var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } + }; + + var normalize = function normalize(M, n) { + var sum; + + for (var col = 0; col < n; col++) { + sum = 0; + + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } + }; // TODO: blocked matrix multiplication? + + + var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + + return C; + }; + + var expand = function expand(M, n, expandFactor + /** power **/ + ) { + var _M = M.slice(0); + + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + + return M; + }; + + var inflate = function inflate(M, n, inflateFactor + /** r **/ + ) { + var _M = new Array(n * n); // M(i,j) ^ inflatePower + + + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + + normalize(_M, n); + return _M; + }; + + var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + + if (v1 !== v2) { + return false; + } + } + + return true; + }; + + var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var cluster = []; + + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + + return clusters; + }; + + var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + + return true; + }; + + var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + + return clusters; + }; + + var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); // Set parameters of algorithm: + + var opts = setOptions$3(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + + + var n = nodes.length, + n2 = n * n; + + var M = new Array(n2), + _M; + + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + + M[j * n + _i2] += sim; + } // Begin Markov cluster algorithm + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + + + addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M ); + + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 3: + + _M = expand(M, n, opts.expandFactor); // Step 4: + + M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached + + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + + iterations++; + } // Build clusters from matrix + + + var clusters = assign$2(M, n, nodes, cy); // Remove duplicate clusters due to symmetry of graph and M matrix + + clusters = removeDuplicates(clusters); + return clusters; + }; + + var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering + }; + + // Common distance metrics for clustering algorithms + + var identity = function identity(x) { + return x; + }; + + var absDiff = function absDiff(p, q) { + return Math.abs(q - p); + }; + + var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); + }; + + var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); + }; + + var sqrt = function sqrt(x) { + return Math.sqrt(x); + }; + + var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); + }; + + var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + + return post(ret); + }; + + var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } + }; // in case the user accidentally doesn't use camel case + + distances['squared-euclidean'] = distances['squaredEuclidean']; + distances['squaredeuclidean'] = distances['squaredEuclidean']; + function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } + } + + var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null + }); + + var setOptions$2 = function setOptions(options) { + return defaults$b(options); + }; + /* eslint-enable */ + + + var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + + var getQ = function getQ(i) { + return attributes[i](node); + }; + + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); + }; + + var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; // Find min, max values for each attribute dimension + + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } // Build k centroids, each represented as an n-dim feature vector + + + for (var c = 0; c < k; c++) { + centroid = []; + + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + + return centroids; + }; + + var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + + if (dist < min) { + min = dist; + index = i; + } + } + + return index; + }; + + var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + + return cluster; + }; + + var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; + }; + + var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + + if (diff > sensitivityThreshold) { + return false; + } + } + } + + return true; + }; + + var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + + return false; + }; + + var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + + return medoids; + }; + + var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + + return cost; + }; + + var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; // Set parameters of algorithm: # of clusters, distance metric, etc. + + var opts = setOptions$2(options); // Begin k-means algorithm + + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; // Step 1: Initialize centroid positions + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } // Step 3: For each of the k clusters, update its centroid + + + isStillMoving = false; + + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } // Update centroids by calculating avg of all nodes within the cluster. + + + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + + newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change + + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); // Begin k-medoids algorithm + + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + // Step 1: Initialize k medoids + + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; // Determine which cluster this node belongs to: node id => cluster # + + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + + isStillMoving = false; // Step 3: For each medoid m, and for each node associated with mediod m, + // select the node with the lowest configuration cost as new medoid. + + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + // Select different medoid if its configuration has the lowest cost + + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + + clusters[m] = cy.collection(cluster); + } + + iterations++; + } + + return clusters; + }; + + var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + + centroids[_c][dim] = numerator / denominator; + } + } + }; + + var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + + U[n][c] = 1 / sum; + } + } + }; + + var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + + var max; + var index; + + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; // Determine which cluster the node is most likely to belong in + + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + + clusters[index].push(nodes[n]); + } // Turn every array into a collection of nodes + + + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + + return clusters; + }; + + var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); // Begin fuzzy c-means algorithm + + var clusters; + var centroids; + var U; + + var _U; + + var weight; // Step 1: Initialize letiables. + + _U = new Array(nodes.length); + + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + + U = new Array(nodes.length); + + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + + centroids = new Array(opts.k); + + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + + weight = new Array(nodes.length); + + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } // end init FCM + + + var isStillMoving = true; + var iterations = 0; + + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; // Step 2: Calculate the centroids for each step. + + updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U. + + updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence. + + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + + iterations++; + } // Assign nodes to clusters with highest probability. + + + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; + }; + + var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions + + }); + var linkageAliases = { + 'single': 'min', + 'complete': 'max' + }; + + var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + + return opts; + }; + + var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + + if (_dist < min) { + minKey = key; + min = _dist; + } + } + + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; // Merge two closest clusters + + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; // Update distances with new merged cluster + + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } // Update cached mins + + + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + + mins[key1] = _min; + } + + clusters[_i2].index = _i2; + } // Clean up meta data used for clustering + + + c1.key = c2.key = c1.index = c2.index = null; + return true; + }; + + var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } + }; + + var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } + }; + + var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } + }; + /* eslint-enable */ + + + var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc. + + var opts = setOptions$1(options); + var attrs = opts.attributes; + + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; // Begin hierarchical algorithm + + + var clusters = []; + var dists = []; // distances between each pair of clusters + + var mins = []; // closest cluster for each cluster + + var index = []; // hash of all clusters by key + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } // Calculate the distance between each pair of clusters + + + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + + dists[i][j] = dist; + dists[j][i] = dist; + + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + + + var merged = mergeClosest(clusters, index, dists, mins, opts); + + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + + var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + + return retClusters; + }; + + var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering + }; + + // Implemented by Zoe Xi @zoexi for GSOC 2016 + var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] + }); + + var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + + var validPrefs = ['median', 'mean', 'min', 'max']; + + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + + return defaults$9(options); + }; + /* eslint-enable */ + + + var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; // nb negative because similarity should have an inverse relationship to distance + + + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); + }; + + var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + + return p; + }; + + var findExemplars = function findExemplars(n, R, A) { + var indices = []; + + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + + return indices; + }; + + var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + + if (index > 0) { + clusters.push(index); + } + } + + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + + return clusters; + }; + + var assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + + var maxI = -1; + var maxSum = -Infinity; + + for (var i = 0; i < ii.length; i++) { + var sum = 0; + + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + + exemplars[ei] = ii[maxI]; + } + + clusters = assignClusters(n, S, exemplars); + return clusters; + }; + + var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); // Map each node to its position in node array + + var id2position = {}; + + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } // Begin affinity propagation algorithm + + + var n; // number of data points + + var n2; // size of matrices + + var S; // similarity matrix (1D array) + + var p; // preference/suitability of a data point to serve as an exemplar + + var R; // responsibility matrix (1D array) + + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; // Initialize and build S similarity matrix + + S = new Array(n2); + + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } // Place preferences on the diagonal of S + + + p = getPreference(S, opts.preference); + + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } // Initialize R responsibility matrix + + + R = new Array(n2); + + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } // Initialize A availability matrix + + + A = new Array(n2); + + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + + var e = new Array(n * opts.minIterations); + + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + + var iter; + + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } // Update A availability matrix + + + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } // Check for convergence + + + var K = 0; + + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + + if (_sum === n) { + // then we have convergence + break; + } + } + } // Identify exemplars (cluster centers) + + + var exemplarsIndices = findExemplars(n, R, A); // Assign nodes to clusters + + var clusterIndices = assign(n, S, exemplarsIndices); + var clusters = {}; + + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + + var clusterIndex = clusterIndices[pos]; + + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + + var retClusters = new Array(exemplarsIndices.length); + + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + + return retClusters; + }; + + var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation + }; + + var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false + }); + var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + + if (ele.isNode()) { + var d = ele.degree(true); + + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + + subtour.unshift(adj); + subtour.unshift(currentNode); + } + + return subtour; + }; + + var trail = []; + var subtour = []; + subtour = walk(startVertex); + + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } + }; + + var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + + if (otherNodeId !== parent) { + edgeId = edge.id(); + + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; + }; + + var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected + }; + + var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + + if (nodeId === sourceNodeId) { + break; + } + } + + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; + }; + + var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected + }; + + var elesfn$j = {}; + [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); + }); + + /*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ + + /* promise states [Promises/A+ 2.1] */ + var STATE_PENDING = 0; + /* [Promises/A+ 2.1.1] */ + + var STATE_FULFILLED = 1; + /* [Promises/A+ 2.1.2] */ + + var STATE_REJECTED = 2; + /* [Promises/A+ 2.1.3] */ + + /* promise object constructor */ + + var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + /* initialize object */ + + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; + /* initial state */ + + this.fulfillValue = undefined; + /* initial value */ + + /* [Promises/A+ 1.3, 2.1.2.2] */ + + this.rejectReason = undefined; + /* initial reason */ + + /* [Promises/A+ 1.5, 2.1.3.2] */ + + this.onFulfilled = []; + /* initial handlers */ + + this.onRejected = []; + /* initial handlers */ + + /* provide optional information-hiding proxy */ + + this.proxy = { + then: this.then.bind(this) + }; + /* support optional executor function */ + + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); + }; + /* promise API methods */ + + + api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); + /* [Promises/A+ 2.2.7] */ + + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); + /* [Promises/A+ 2.2.2/2.2.6] */ + + curr.onRejected.push(resolver(onRejected, next, 'reject')); + /* [Promises/A+ 2.2.3/2.2.6] */ + + execute(curr); + return next.proxy; + /* [Promises/A+ 2.2.7, 3.3] */ + } + }; + /* deliver an action */ + + var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; + /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + + curr[name] = value; + /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + + execute(curr); + } + + return curr; + }; + /* execute all handlers */ + + + var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); + }; + /* execute particular set of handlers */ + + + var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + /* iterate over all handlers, exactly once */ + + var handlers = curr[name]; + curr[name] = []; + /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } + /* [Promises/A+ 2.2.5] */ + + }; + /* execute procedure asynchronously */ + + /* [Promises/A+ 2.2.4, 3.1] */ + + + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); + }; + /* generate a resolver function */ + + + var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') + /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); + /* [Promises/A+ 2.2.7.3, 2.2.7.4] */ + else { + var result; + + try { + result = cb(value); + } + /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ + catch (e) { + next.reject(e); + /* [Promises/A+ 2.2.7.2] */ + + return; + } + + resolve(next, result); + /* [Promises/A+ 2.2.7.1] */ + } + }; + }; + /* "Promise Resolution Procedure" */ + + /* [Promises/A+ 2.3] */ + + + var resolve = function resolve(promise, x) { + /* sanity check arguments */ + + /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + + + var then; + + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } + /* [Promises/A+ 2.3.3.1, 3.5] */ + catch (e) { + promise.reject(e); + /* [Promises/A+ 2.3.3.2] */ + + return; + } + } + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + + + if (typeof then === 'function') { + var resolved = false; + + try { + /* call retrieved "then" method */ + + /* [Promises/A+ 2.3.3.3] */ + then.call(x, + /* resolvePromise */ + + /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + if (y === x) + /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, + /* rejectPromise */ + + /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; + /* [Promises/A+ 2.3.3.3.3] */ + + promise.reject(r); + }); + } catch (e) { + if (!resolved) + /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); + /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + /* handle other values */ + + + promise.fulfill(x); + /* [Promises/A+ 2.3.4, 2.3.3.4] */ + }; // so we always have Promise.all() + + + api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); + }; + + api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); + }; + + api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); + }; + + var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + + var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } // for future timeline/animations impl + + + this.length = 1; + this[0] = this; + }; + + var anifn = Animation.prototype; + extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + + q.push(this); // add to the animation loop pool + + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + + _p.hooked = true; + } + + return this; + }, + play: function play() { + var _p = this._private; // autorewind + + if (_p.progress === 1) { + _p.progress = 0; + } + + _p.playing = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + + _p.stopped = false; + this.hook(); // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + + _p.progress = p; + _p.started = false; + + if (wasPlaying) { + this.play(); + } + } + + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + + if (wasPlaying) { + this.pause(); + } + + _p.progress = 1 - _p.progress; + _p.started = false; + + var swap = function swap(a, b) { + var _pa = _p[a]; + + if (_pa == null) { + return; + } + + _p[a] = _p[b]; + _p[b] = _pa; + }; + + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); // swap styles + + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + + if (wasPlaying) { + this.play(); + } + + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + + switch (type) { + case 'frame': + arr = _p.frames; + break; + + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } + }); + anifn.complete = anifn.completed; + anifn.run = anifn.play; + anifn.running = anifn.playing; + + var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return false; + } + + var ele = all[0]; + + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + + return this; + }; + }, + // clearQueue + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + + if (!cy.styleEnabled()) { + return this; + } + + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + + case 'fast': + properties.duration = 200; + break; + } + + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } // override pan w/ panBy if set + + + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } // override pan w/ center if set + + + var center = properties.center || properties.centre; + + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + + if (centerPan != null) { + properties.pan = centerPan; + } + } // override pan & zoom w/ fit if set + + + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } // override zoom (& potentially pan) w/ zoom obj if set + + + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + if (params) { + properties = extend({}, properties, params); + } // manually hook and run the animation + + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + + return this; // chaining + }; + }, + // animate + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var cy = this._private.cy || this; + + if (!cy.styleEnabled()) { + return this; + } + + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } // clear the queue of future animations + + + if (clearQueue) { + _p.animation.queue = []; + } + + if (!jumpToEnd) { + _p.animation.current = []; + } + } // we have to notify (the animation loop doesn't do it for us on `stop`) + + + cy.notify('draw'); + return this; + }; + } // stop + + }; // define + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + var isArray_1 = isArray; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray_1(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol_1(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + var _isKey = isKey; + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + var isFunction_1 = isFunction; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = _root['__core-js_shared__']; + + var _coreJsData = coreJsData; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + var _isMasked = isMasked; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + var _toSource = toSource; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$3 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$3).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); + } + + var _baseIsNative = baseIsNative; + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue$1(object, key) { + return object == null ? undefined : object[key]; + } + + var _getValue = getValue$1; + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; + } + + var _getNative = getNative; + + /* Built-in method references that are verified to be native. */ + var nativeCreate = _getNative(Object, 'create'); + + var _nativeCreate = nativeCreate; + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; + } + + var _hashClear = hashClear; + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + var _hashDelete = hashDelete; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED$1 ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; + } + + var _hashGet = hashGet; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$1.call(data, key); + } + + var _hashHas = hashHas; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + var _hashSet = hashSet; + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = _hashClear; + Hash.prototype['delete'] = _hashDelete; + Hash.prototype.get = _hashGet; + Hash.prototype.has = _hashHas; + Hash.prototype.set = _hashSet; + + var _Hash = Hash; + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + var _listCacheClear = listCacheClear; + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + var eq_1 = eq; + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq_1(array[length][0], key)) { + return length; + } + } + return -1; + } + + var _assocIndexOf = assocIndexOf; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + var _listCacheDelete = listCacheDelete; + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + var _listCacheGet = listCacheGet; + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; + } + + var _listCacheHas = listCacheHas; + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + var _listCacheSet = listCacheSet; + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = _listCacheClear; + ListCache.prototype['delete'] = _listCacheDelete; + ListCache.prototype.get = _listCacheGet; + ListCache.prototype.has = _listCacheHas; + ListCache.prototype.set = _listCacheSet; + + var _ListCache = ListCache; + + /* Built-in method references that are verified to be native. */ + var Map$1 = _getNative(_root, 'Map'); + + var _Map = Map$1; + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; + } + + var _mapCacheClear = mapCacheClear; + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + var _isKeyable = isKeyable; + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + var _getMapData = getMapData; + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + var _mapCacheDelete = mapCacheDelete; + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return _getMapData(this, key).get(key); + } + + var _mapCacheGet = mapCacheGet; + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return _getMapData(this, key).has(key); + } + + var _mapCacheHas = mapCacheHas; + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + var _mapCacheSet = mapCacheSet; + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = _mapCacheClear; + MapCache.prototype['delete'] = _mapCacheDelete; + MapCache.prototype.get = _mapCacheGet; + MapCache.prototype.has = _mapCacheHas; + MapCache.prototype.set = _mapCacheSet; + + var _MapCache = MapCache; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || _MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = _MapCache; + + var memoize_1 = memoize; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize_1(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + var _memoizeCapped = memoizeCapped; + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + var _stringToPath = stringToPath; + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + var _arrayMap = arrayMap; + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray_1(value)) { + // Recursively convert values (susceptible to call stack limits). + return _arrayMap(value, baseToString) + ''; + } + if (isSymbol_1(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + var _baseToString = baseToString; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString$1(value) { + return value == null ? '' : _baseToString(value); + } + + var toString_1 = toString$1; + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray_1(value)) { + return value; + } + return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); + } + + var _castPath = castPath; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol_1(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + var _toKey = toKey; + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = _castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[_toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + var _baseGet = baseGet; + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : _baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + var get_1 = get; + + var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + var _defineProperty = defineProperty; + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty) { + _defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + var _baseAssignValue = baseAssignValue; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq_1(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } + } + + var _assignValue = assignValue; + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + var _isIndex = isIndex; + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject_1(object)) { + return object; + } + path = _castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = _toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject_1(objValue) + ? objValue + : (_isIndex(path[index + 1]) ? [] : {}); + } + } + _assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + var _baseSet = baseSet; + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : _baseSet(object, path, value); + } + + var set_1 = set; + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + var _copyArray = copyArray; + + /** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ + function toPath(value) { + if (isArray_1(value)) { + return _arrayMap(value, _toKey); + } + return isSymbol_1(value) ? [value] : _copyArray(_stringToPath(toString_1(value))); + } + + var toPath_1 = toPath; + + var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...) + + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + + var path = isPathLike && toPath_1(name); // .data('foo') + + if (p.allowGetting && value === undefined) { + // get + var ret; + + if (single) { + p.beforeGet(single); // check if it's path and a field with the same name doesn't exist + + if (path && single._private[p.field][name] === undefined) { + ret = get_1(single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + + return ret; // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + + if (valid) { + var change = _defineProperty$1({}, name, value); + + p.beforeSet(self, change); + + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set_1(ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } // .data({ 'foo': 'bar' }) + + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + + var _valid = !p.immutableKeys[k]; + + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } // update mappers if asked + + + if (p.updateStyle) { + self.updateStyle(); + } // call onSet callback + + + p.onSet(self); + + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } // .data(function(){ ... }) + + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + + return _ret; + } + + return self; // maintain chainability + }; // function + }, + // data + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + + }; + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + // .removeData('foo bar') + + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + + if (emptyString(key)) { + continue; + } + + var valid = !p.immutableKeys[key]; // not valid if immutable + + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } // .removeData() + + } else if (names === undefined) { + // then delete all keys + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + + var _keys = Object.keys(_privateFields); + + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + + return self; // maintain chaining + }; // function + } // removeData + + }; // define + + var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; // this is just a wrapper alias of .on() + + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } + }; // define + + // use this module to cherry pick functions into your prototype + var define = {}; + [define$3, define$2, define$1].forEach(function (m) { + extend(define, m); + }); + + var elesfn$i = { + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop() + }; + + var elesfn$h = { + classes: function classes(_classes) { + var self = this; + + if (_classes === undefined) { + var ret = []; + + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + + var changed = []; + var classesSet = new Set$1(_classes); // check and update each ele + + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; // check if ele has all of the passed classes + + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + + if (!eleHasClass) { + changedEle = true; + break; + } + } // check if ele has classes outside of those passed + + + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + + } // for i eles + // trigger update style on those eles that had class changes + + + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } + }; + elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + + var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' + }; + tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods + + tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name + + tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number + + tokens.id = tokens.variable; // an element id (follows variable conventions) + + (function () { + var ops, op, i; // add @ variants to comparatorOp + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } // add ! variants to comparatorOp + + + ops = tokens.comparatorOp.split('|'); + + for (i = 0; i < ops.length; i++) { + op = ops[i]; + + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + + + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + + tokens.comparatorOp += '|\\!' + op; + } + })(); + + /** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ + var newQuery = function newQuery() { + return { + checks: [] + }; + }; + + /** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ + var Type = { + /** E.g. node */ + GROUP: 0, + + /** A collection of elements */ + COLLECTION: 1, + + /** A filter(ele) function */ + FILTER: 2, + + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + + /** E.g. [foo] */ + DATA_EXIST: 4, + + /** E.g. [?foo] */ + DATA_BOOL: 5, + + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + + /** E.g. :selected */ + STATE: 7, + + /** E.g. #foo */ + ID: 8, + + /** E.g. .foo */ + CLASS: 9, + + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + + /** E.g. #foo > #bar */ + CHILD: 15, + + /** E.g. #foo #bar */ + DESCENDANT: 16, + + /** E.g. $#foo > #bar */ + PARENT: 17, + + /** E.g. $#foo #bar */ + ANCESTOR: 18, + + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 + }; + + var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } + }, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } + }, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } + }, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } + }, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } + }, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } + }, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } + }, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } + }, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } + }, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } + }, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } + }, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } + }, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } + }, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } + }, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } + }, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } + }, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } + }, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } + }, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } + }, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } + }, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } + }, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } + }, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } + }, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } + }, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } + }, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } + }, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } + }, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } + }].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); + }); + + var lookup = function () { + var selToFn = {}; + var s; + + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + + return selToFn; + }(); + + var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); + }; + var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; + }).join('|') + ')'; + + // so that values get compared properly in Selector.filter() + + var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); + }; + + var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; + }; // NOTE: add new expression syntax here to have it recognised by the parser; + // - a query contains all adjacent (i.e. no separator in between) expressions; + // - the current query is stored in selector[i] + // - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward + + + var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } + }, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + + query.checks.push({ + type: Type.STATE, + value: state + }); + } + }, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } + }, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } + }, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } + }, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } + }, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } + }, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } + }, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; // go on to next query + + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } + }, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + + var _target = newQuery(); + + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } + }, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); // the query in the selector should be the edge rather than the source + + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; // we're now populating the target query with expressions that follow + + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); // the query in the selector should be the neighbourhood rather than the node + + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } + }, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; // we're now populating the child query with expressions that follow + + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _child = newQuery(); + + var _parent = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + + + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + + var _child2 = newQuery(); + + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; // the parent-child query takes the place of the query previously being populated + + _parent2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } + }, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); // the query in the selector should be the '>' itself + + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; // we're now populating the descendant query with expressions that follow + + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + + var _descendant = newQuery(); + + var _ancestor = newQuery(); // set up the root compound q + + + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); // populate the subject and replace the q at the old spot (within left) with TRUE + + subject.checks = query.checks; // take the checks from the left + + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + // set up the right q + + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + + + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + + }); + replaceLastQuery(selector, left, compound); // update the ref since we moved things around for `query` + + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + + var _descendant2 = newQuery(); + + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; // the parent-child query takes the place of the query previously being populated + + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } + }, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + + topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type + + topChk.nodes = null; + } + } + }]; + exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); + }); + + /** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ + + var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; + }; + /** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ + + + var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + + return remaining; + }; + /** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ + + + var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); // let the token populate the selector object in currentQuery + + var ret = exprInfo.expr.populate(self, currentQuery, args); + + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; // we're done when there's nothing left to parse + + if (remaining.match(/^\s*$/)) { + break; + } + } + + var lastQ = self[self.length - 1]; + + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + + for (var i = 0; i < self.length; i++) { + var q = self[i]; // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + + return true; // success + }; + /** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ + + + var toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + + var space = function space(val) { + return ' ' + val + ' '; + }; + + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + + case Type.STATE: + { + return value; + } + + case Type.ID: + { + return '#' + value; + } + + case Type.CLASS: + { + return '.' + value; + } + + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + + case Type.TRUE: + { + return ''; + } + } + }; + + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + + var str = ''; + + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + + this.toStringCache = str; + return str; + }; + var parse$1 = { + parse: parse, + toString: toString + }; + + var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + + + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + + case '=': + matches = fieldVal === value; + break; + + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + + default: + matches = false; + break; + } // apply the not op, but null vals for inequalities should always stay non-matching + + + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + + return matches; + }; + var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + + case '!': + return fieldVal ? false : true; + + case '^': + return fieldVal === undefined; + } + }; + var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; + }; + var data$1 = function data(ele, field) { + return ele.data(field); + }; + var meta = function meta(ele, field) { + return ele[field](); + }; + + /** A lookup of `match(check, ele)` functions by `Type` int */ + + var match = []; + /** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against + */ + + var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); + }; + + match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); + }; + + match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); + }; + + match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; + }; + + match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); + }; + + match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); + }; + + match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); + }; + + match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); + }; + + match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); + }; + + match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); + }; + + match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); + }; + + match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); + }; + + match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); + }; + + match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); + }; + + match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); + }; + + match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); + }; + + match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); + }; + + match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); + }; + + match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); + }; + + match[Type.TRUE] = function () { + return true; + }; + + match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); + }; + + match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); + }; + + var filter = function filter(collection) { + var self = this; // for 1 id #foo queries, just get the element + + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, element)) { + return true; + } + } + + return false; + }; + + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + + return collection.filter(selectorFunction); + }; // filter + // does selector match a single element? + + + var matches = function matches(ele) { + var self = this; + + for (var j = 0; j < self.length; j++) { + var query = self[j]; + + if (matches$1(query, ele)) { + return true; + } + } + + return false; + }; // matches + + + var matching = { + matches: matches, + filter: filter + }; + + var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } + }; + + var selfn = Selector.prototype; + [parse$1, matching].forEach(function (p) { + return extend(selfn, p); + }); + + selfn.text = function () { + return this.inputText; + }; + + selfn.size = function () { + return this.length; + }; + + selfn.eq = function (i) { + return this[i]; + }; + + selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); + }; + + selfn.addQuery = function (q) { + this[this.length++] = q; + }; + + selfn.selector = selfn.toString; + + var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (ret) { + return true; + } + } + + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + + if (!ret) { + return false; + } + } + + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; // cheap length check + + if (thisLength !== collectionLength) { + return false; + } // cheap element ref check + + + if (thisLength === 1) { + return this[0] === collection[0]; + } + + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } + }; + elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; + elesfn$g.has = elesfn$g.contains; + elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + + var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; + }; + + var elesfn$f = { + parent: function parent(selector) { + var parents = []; // optimisation for single ele call + + if (this.length === 1) { + var parent = this[0]._private.parent; + + if (parent) { + return parent; + } + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + + if (_parent) { + parents.push(_parent); + } + } + + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + + eles = eles.parent(); + } + + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + + add(this.children()); + return this.spawn(elements, true).filter(selector); + } + }; + + function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + + while (q.length > 0) { + var _ele = q.shift(); + + fn(_ele); + did.add(_ele.id()); + + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + + return eles; + } + + function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (!did.has(child.id())) { + q.push(child); + } + } + } + } // very efficient version of eles.add( eles.descendants() ).forEach() + // for internal use + + + elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); + }; + + function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + + if (!did.has(parent.id())) { + q.push(parent); + } + } + } + + elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); + }; + + function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); + } + + elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); + }; // aliases + + + elesfn$f.ancestors = elesfn$f.parents; + + var fn$5, elesfn$e; + fn$5 = elesfn$e = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + + if (ele) { + return ele._private.data.id; + } + } + }; // aliases + + fn$5.attr = fn$5.data; + fn$5.removeAttr = fn$5.removeData; + var data = elesfn$e; + + var elesfn$d = {}; + + function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + + if (includeLoops === undefined) { + includeLoops = true; + } + + if (self.length === 0) { + return; + } + + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + + if (!includeLoops && edge.isLoop()) { + continue; + } + + degree += callback(node, edge); + } + + return degree; + } else { + return; + } + }; + } + + extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) + }); + + function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + + return ret; + }; + } + + extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) + }); + extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + + return total; + } + }); + + var fn$4, elesfn$c; + + var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + + ele.dirtyBoundingBoxCache(); + } + } + }; + + var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } + }; + fn$4 = elesfn$c = { + position: define.data(positionDef), + // position but no notification to renderer + silentPosition: define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + var _pos = void 0; + + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + + cy.endBatch(); + } + + return this; // chaining + }, + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; // exclude any node that is a descendant of the calling collection + + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + + cy.endBatch(); + } + + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + + if (hasParent) { + parent = parent[0]; + } + + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + + var _parent = hasCompoundNodes ? ele.parent() : null; + + var _hasParent = _parent && _parent.length > 0; + + var _relativeToParent = _hasParent; + + if (_hasParent) { + _parent = _parent[0]; + } + + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } + }; // aliases + + fn$4.modelPosition = fn$4.point = fn$4.position; + fn$4.modelPositions = fn$4.points = fn$4.positions; + fn$4.renderedPoint = fn$4.renderedPosition; + fn$4.relativePoint = fn$4.relativePosition; + var position = elesfn$c; + + var fn$3, elesfn$b; + fn$3 = elesfn$b = {}; + + elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; + }; + + elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; + }; + + elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); // not possible to do on non-compound graphs or with the style disabled + + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } // save cycles when batching -- but bounds will be stale (or not exist yet) + + + if (!force && cy.batching()) { + return this; + } + + function update(parent) { + if (!parent.isParent()) { + return; + } + + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; // if children take up zero area then keep position and fall back on stylesheet w/h + + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + + var leftVal = min.width.left.value; + + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + + var rightVal = min.width.right.value; + + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + + var topVal = min.height.top.value; + + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + + var bottomVal = min.height.bottom.value; + + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.compoundBoundsClean || force) { + update(ele); + + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + + return this; + }; + + var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + + return x; + }; + + var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } // don't update with null dim + + + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + }; + + var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); + }; + + var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); + }; + + var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } // always store the individual arrow bounds + + + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } + }; + + var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } // shift by margin and expand by outline and border + + + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; // always store the unrotated label bounds separately + + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); // rotation point (default value for center-center) + + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + + case 'right': + xo = lx1; + break; + } + + switch (valign.value) { + case 'top': + yo = ly2; + break; + + case 'bottom': + yo = ly1; + break; + } + } + + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + + return bounds; + }; // get the bounding box of the elements (in raw model position) + + + var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + + var x, y; // node pos + + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + + var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + + var underlayOpacity = 0; + var underlayPadding = 0; + + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + + var _w = ele.outerWidth(); + + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); // take into account edge width + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { + var pts; + + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + + case 'segments': + case 'taxi': + pts = rstyle.linePts; + break; + } + + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + + } else { + // headless or style disabled + // fallback on source and target positions + ////////////////////////////////////////// + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } // take into account edge width + + + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + + } // edges + // handle edge arrow size + ///////////////////////// + + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } // ghost + //////// + + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } // always store the body bounds separately from the labels + + + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } // always store the body bounds separately from the labels + + + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + + } // if displayed + + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + + expandBoundingBox(bounds, 1); + } + + return bounds; + }; + + var getKey = function getKey(opts) { + var i = 0; + + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + return key; + }; + + var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + + var r = function r(x) { + return Math.round(x); + }; + + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } + }; + + var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } // not using def opts => need to build up bb from combination of sub bbs + + + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + + return bb; + }; + + var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + useCache: true + }; + var defBbOptsKey = getKey(defBbOpts); + var filledBbOpts = defaults$g(defBbOpts); + + elesfn$b.boundingBox = function (options) { + var bounds; // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + + this.updateCompoundBounds(!options.useCache); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; + }; + + elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + + this.emitAndNotify('bounds'); + return this; + }; // private helper to get bounding box for custom node positions + // - good for perf in certain cases but currently requires dirtying the rendered style + // - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... + // - try to use for only things like discrete layouts where the node position would change anyway + + + elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + + if (plainObject(fn)) { + var obj = fn; + + fn = function fn() { + return obj; + }; + } + + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; + }; + + fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; + fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; + var bounds = elesfn$b; + + var fn$2, elesfn$a; + fn$2 = elesfn$a = {}; + + var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + + var d = ele.pstyle(opts.name); + + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; + }; + + defineDimFns({ + name: 'width' + }); + defineDimFns({ + name: 'height' + }); + + elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + + if (ele.isParent()) { + ele.updateCompoundBounds(); + + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } + }; + + elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); + }; + + elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); + }; + + var widthHeight = elesfn$a; + + var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } + }; + + var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } + }; + + var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } + }; + + var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); + }; + + var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); + }; + + var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); + }; + + var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); + }; + + var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); + }; + + var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } + }; + + var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); + }; + + var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + + obj[name] = function () { + return ifEdge(this, spec.get); + }; + + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + + return obj; + }, {}); + + var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + + /*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + */ + var Event = function Event(src, props) { + this.recycle(src, props); + }; + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + + + Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } // Put explicitly provided properties onto the event object + + + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } // Create a timestamp if incoming event doesn't have one + + + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if preventDefault exists run it on the original event + + + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + + if (!e) { + return; + } // if stopPropagation exists run it on the original event + + + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse + }; + + var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") + + var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + + var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function + /*context, listener, eventObj*/ + eventMatches() { + return true; + }, + addEventFields: function + /*context, evt*/ + addEventFields() {}, + callbackContext: function callbackContext(context + /*, listener, eventObj*/ + ) { + return context; + }, + beforeEmit: function + /* context, listener, eventObj */ + beforeEmit() {}, + afterEmit: function + /* context, listener, eventObj */ + afterEmit() {}, + bubble: function + /*context*/ + bubble() { + return false; + }, + parent: function + /*context*/ + parent() { + return null; + }, + context: null + }; + var defaultsKeys = Object.keys(defaults$8); + var emptyOpts = {}; + + function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; + } + + var p = Emitter.prototype; + + var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + + if (ret === false) { + break; + } // allow exiting early + + } + } + }; + + var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); + }; + + var forEachEventObj = function forEachEventObj(self, handler, events) { + if (event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + + var eventList = array(events) ? events : events.split(/\s+/); + + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + + if (emptyString(evt)) { + continue; + } + + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } + }; + + p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; + }; + + p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); + }; + + p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + + if (this.emitting !== 0) { + this.listeners = copyArray$1(this.listeners); + } + + var listeners = this.listeners; + + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback + /*, conf*/ + ) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + + return this; + }; + + p.removeAllListeners = function () { + return this.removeListener('*'); + }; + + p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + + if (!array(extraParams)) { + extraParams = [extraParams]; + } + + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + + if (extraParams != null) { + push(args, extraParams); + } + + self.beforeEmit(self.context, listener, eventObj); + + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + + }; + + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; + }; + + var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener + /*, eventObj*/ + ) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } + }; + + var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + // notify renderer + + + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } + }; + define.eventAliasesOn(elesfn$9); + + var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + + if (include) { + filterEles.push(ele); + } + } + + return filterEles; + } + + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + + var elements = this.spawn(); + + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + + if (!remove) { + elements.push(element); + } + } + + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + + if (colL.has(ele)) { + elements.push(ele); + } + } + + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var elements = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (!inOther) { + elements.push(ele); + } + } + }; + + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + + if (string(other)) { + other = cy.$(other); + } + + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + + if (!toAdd) { + return this; + } + + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var elements = this.spawnSelf(); + + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + + if (add) { + elements.push(ele); + } + } + + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + + if (!toAdd) { + return this; + } + + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + + var map = _p.map; + + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + + return this; // chaining + }, + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; // remove ele + + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; // replace empty spot with last ele in collection + + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } // the collection is now 1 ele smaller + + + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + + if (!toRemove) { + return this; + } + + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + + return this; // chaining + }, + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val > max) { + max = val; + maxEle = ele; + } + } + + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + + if (val < min) { + min = val; + minEle = ele; + } + } + + return { + value: min, + ele: minEle + }; + } + }; // aliases + + var fn$1 = elesfn$8; + fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; + fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; + fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; + fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; + fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; + fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + + var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + + if (ele) { + return ele._private.group; + } + } + }; + + /** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ + + var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } // 'orphan' + + + return 0; + } + + var depthDiff = getDepth(a) - getDepth(b); + + if (depthDiff !== 0) { + return depthDiff; + } + + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } // 'manual' + + + return 0; + } + + var eleDiff = getEleDepth(a) - getEleDepth(b); + + if (eleDiff !== 0) { + return eleDiff; + } + + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + + if (zDiff !== 0) { + return zDiff; + } // compare indices in the core (order added to graph w/ last on top) + + + return a.poolIndex() - b.poolIndex(); + }; + + var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + + if (ret === false) { + break; + } // exit each early on return false + + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + + if (end == null) { + end = thisSize; + } + + if (start == null) { + start = 0; + } + + if (start < 0) { + start = thisSize + start; + } + + if (end < 0) { + end = thisSize + end; + } + + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + + if (!ele) { + return undefined; + } // let cy = ele.cy(); + + + var _p = ele._private; + var group = _p.group; + + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } + }; + elesfn$6.each = elesfn$6.forEach; + + var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty$1({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } + }; + + defineSymbolIterator(); + + var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false + }); + var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } // sanitise the dimensions for external layouts (avoid division by zero) + + + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + + var fnMem = memoize$1(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + + var bb = makeBoundingBox(); + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + + return bb; + }; + + var bb = spacingBb(); + var getFinalPos = memoize$1(function (node, i) { + var newPos = fnMem(node, i); + + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + + return newPos; + }, getMemoizeKey); + + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + + if (options.fit) { + cy.fit(options.eles, options.padding); + } + + if (options.zoom != null) { + cy.zoom(options.zoom); + } + + if (options.pan) { + cy.pan(options.pan); + } + + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + + return this; // chaining + }, + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } + }; // aliases: + + elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + + function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } + } + + function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; + } + + function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + + if (ele) { + return styleCache(key, selfFn, ele); + } + }; + } + + var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + + if (!cy.styleEnabled()) { + return this; + } + + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } // let changedEles = style.apply( updatedEles ); + + + var changedEles = updatedEles; + + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return; + } + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + + if (!cy.styleEnabled()) { + return; + } + + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + + if (!ele.cy().styleEnabled()) { + return; + } + + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var ele = this[0]; + + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + + return this; // chaining + }, + removeStyle: function removeStyle(names) { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return this; + } + + var updateTransitions = false; + var style = cy.style(); + var eles = this; + + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return 1; + } + + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + + if (!hasCompoundNodes) { + return parentOpacity; + } + + var parents = !_p.data.parent ? null : ele.parents(); + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return false; + } + + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } + }; + + function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + + if (!parentOk(parent)) { + return false; + } + } + } + + return true; + } + + function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + + if (!cy.styleEnabled()) { + return true; + } + + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + + if (ele) { + var _p = ele._private; + + if (!ok(ele)) { + return false; + } + + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; + } + + var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); + }); + elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace + })); + var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); + }); + var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); + }); + elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace + })); + + elesfn$4.noninteractive = function () { + var ele = this[0]; + + if (ele) { + return !ele.interactive(); + } + }; + + var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); + }); + var edgeVisibleViaNode = eleTakesUpSpace; + elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode + })); + + elesfn$4.hidden = function () { + var ele = this[0]; + + if (ele) { + return !ele.visible(); + } + }; + + elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); + }); + elesfn$4.bypass = elesfn$4.css = elesfn$4.style; + elesfn$4.renderedCss = elesfn$4.renderedStyle; + elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; + elesfn$4.pstyle = elesfn$4.parsedStyle; + + var elesfn$3 = {}; + + function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; // e.g. cy.nodes().select( data, handler ) + + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + + if (overrideAble !== undefined) { + able = overrideAble; + + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + + } + } + + if (able) { + ele._private[params.field] = params.value; + + if (changed) { + changedEles.push(ele); + } + } + } + + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + + changedColl.emit(params.event); + + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + + return this; + }; + } + + function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + + if (val !== undefined) { + return val; + } + } + + return ele._private[params.field]; + } + }; + + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); + } + + defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' + }); + defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' + }); + defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' + }); + defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' + }); + elesfn$3.deselect = elesfn$3.unselect; + + elesfn$3.grabbed = function () { + var ele = this[0]; + + if (ele) { + return ele._private.grabbed; + } + }; + + defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' + }); + defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' + }); + + elesfn$3.inactive = function () { + var ele = this[0]; + + if (ele) { + return !ele._private.active; + } + }; + + var elesfn$2 = {}; // DAG functions + //////////////// + + var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var disqualified = false; + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + + if (!disqualified) { + ret.push(ele); + } + } + + return this.spawn(ret, true).filter(selector); + }; + }; + + var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + var edges = ele.connectedEdges(); + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + + return this.spawn(oEles, true).filter(selector); + }; + }; + + var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + + if (next.length === 0) { + break; + } // done if none left + + + var newNext = false; + + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + + if (!newNext) { + break; + } // done if touched all outgoers already + + + eles = next; + } + + return this.spawn(sEles, true).filter(selector); + }; + }; + + elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } + }; + + extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) + }); // Neighbourhood functions + ////////////////////////// + + extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); // for each connected edge, add the edge and the other node + + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; // need check in case of loop + + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } // add connected edge + + + elements.push(edge[0]); + } + } + + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } + }); // aliases + + elesfn$2.neighbourhood = elesfn$2.neighborhood; + elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; + elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions + ///////////////// + + extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) + }); + + function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + + if (src) { + sources.push(src); + } + } + + return this.spawn(sources, true).filter(selector); + }; + } + + extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') + }); + + function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; // get elements if a selector is specified + + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + + if (!edgeConnectsThisAndOther) { + continue; + } + + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + + elements.push(edge); + } + } + + return this.spawn(elements, true); + }; + } + + extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + + if (!node.isNode()) { + continue; + } + + var edges = node._private.edges; + + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + + if (!edge.isEdge()) { + continue; + } + + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') + }); + + function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; // look at all the edges in the collection + + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; // look at edges connected to the src node of this edge + + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + + return this.spawn(elements, true).filter(selector); + }; + } // Misc functions + ///////////////// + + + extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + + if (unvisited.empty()) { + return self.spawn(); + } + + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + + do { + _loop(); + } while (unvisited.length > 0); + + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } + }); + elesfn$2.componentsOf = elesfn$2.components; + + var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + + var map = new Map$2(); + var createdElements = false; + + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { + createdElements = true; // make elements from json and restore all at once later + + var eles = []; + var elesIds = new Set$1(); + + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + + if (json.data == null) { + json.data = {}; + } + + var _data = json.data; // make sure newly created elements have valid ids + + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + + elements = eles; + } + + this.length = 0; + + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + + if (element$1 == null) { + continue; + } + + var id = element$1._private.data.id; + + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + + this[this.length] = element$1; + this.length++; + } + } + + this._private = { + eles: this, + cy: cy, + + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + + return this.lazyMap; + }, + + set map(m) { + this.lazyMap = m; + }, + + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$2(); + var eles = this.eles; + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + + if (unique) { + this._private.map = map; + } // restore the elements if we created them from json + + + if (createdElements && !removed) { + this.restore(); + } + }; // Functions + //////////////////////////////////////////////////////////////////////////////////////////////////// + // keep the prototypes in sync (an element has the same functions as a collection) + // and use elefn and elesfn as shorthands to the prototypes + + + var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); + + elesfn$1.instanceString = function () { + return 'collection'; + }; + + elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); + }; + + elesfn$1.spawnSelf = function () { + return this.spawn(this); + }; + + elesfn$1.cy = function () { + return this._private.cy; + }; + + elesfn$1.renderer = function () { + return this._private.cy.renderer(); + }; + + elesfn$1.element = function () { + return this[0]; + }; + + elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } + }; + + elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); + }; + + elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); + }; + + elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + + var entry = this._private.map.get(id); + + return entry ? entry.ele : new Collection(cy); // get ele or empty collection + }; + + elesfn$1.$id = elesfn$1.getElementById; + + elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; + }; + + elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; + }; + + elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; + }; + + elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + + if (ele == null && obj) { + return this; + } // can't set to no eles + + + if (ele == null) { + return undefined; + } // can't get from no eles + + + var p = ele._private; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + + move = true; + } + + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + + move = true; + } + + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + + if (obj.position) { + ele.position(obj.position); + } // ignore group -- immutable + + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + + if (obj.classes != null) { + ele.classes(obj.classes); + } + + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } + }; + + elesfn$1.jsons = function () { + var jsons = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + + return jsons; + }; + + elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + + return new Collection(cy, elesArr); + }; + + elesfn$1.copy = elesfn$1.clone; + + elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; // create arrays of nodes and edges, since we need to + // restore the nodes first + + var nodes = []; + var edges = []; + var elements; + + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } // keep nodes first in the array and edges after + + + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + + elements = nodes.concat(edges); + var i; + + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; // now, restore each element + + + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; // the traversal cache should start fresh when ele is added + + _ele2.clearTraversalCache(); // set id and validate + + + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); // can't create element if it has empty string as id or non-string id + + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); // can't create element if one already has that id + + removeFromElements(); + continue; + } + + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + + if (pos.y == null) { + pos.y = 0; + } + } + + if (_ele2.isEdge()) { + // extra checks for edges + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); // only one edge in node if loop + + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + + tgt._private.edges.push(edge); + } + + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + // create mock ids / indexes maps for element so it can be used like collections + + + _private.map = new Map$2(); + + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + + _private.removed = false; + + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + // do compound node sanity checks + + + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + + var parentId = _data4.parent; + var specifiedParent = parentId != null; + + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + // exit or we loop forever + + break; + } + + ancestor = ancestor.parent(); + } + + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + + node._private.parent = parent[0]; // let the core know we have a compound graph + + cy_p.hasCompoundNodes = true; + } + } // else + + } // if specified parent + + } // for each node + + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + + if (_ele3.isNode()) { + continue; + } // adding an edge invalidates the traversal caches for the parallel edges + + + _ele3.parallelEdges().clearTraversalCache(); // adding an edge invalidates the traversal cache for the connected nodes + + + _ele3.source().clearTraversalCache(); + + _ele3.target().clearTraversalCache(); + } + + var toUpdateStyle; + + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + + return self; // chainability + }; + + elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; + }; + + elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; + }; + + elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; // add connected edges + + function addConnectedEdges(node) { + var edges = node._private.edges; + + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } // add descendant nodes + + + function addChildren(node) { + var children = node._private.children; + + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); // removing an edges invalidates the traversal cache for its nodes + + node.clearTraversalCache(); + } + + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + + var alteredParents = []; + alteredParents.ids = {}; + + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + + self.dirtyCompoundBoundsCache(); + + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + + var tgt = _ele4.target()[0]; + + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + + var pllEdges = _ele4.parallelEdges(); + + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } // check to see if we have a compound graph or not + + + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + + var removedElements = new Collection(this.cy(), elesToRemove); + + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } // the parents who were modified by the removal need their style updated + + + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + + return removedElements; + }; + + elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + + var notifyRenderer = false; + var modifyPool = false; + + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + eles.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + + if (tgtExists) { + _data5.target = tgtId; + } + } + } + + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + + updated.emitAndNotify('moveout'); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + eles.emitAndNotify('move'); + } + } + + return this; + }; + + [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); + }); + + var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; // add the elements + + if (elementOrCollection(opts)) { + var eles = opts; + + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + + elements = new Collection(cy, jsons); + } + } // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + + _jsons2.push(json); + } + } + } + + elements = new Collection(cy, _jsons2); + } // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + + return collection.remove(); + } + }; + + /* global Float32Array */ + + /*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + function generateCubicBezier(mX1, mY1, mX2, mY2) { + var NEWTON_ITERATIONS = 4, + NEWTON_MIN_SLOPE = 0.001, + SUBDIVISION_PRECISION = 0.0000001, + SUBDIVISION_MAX_ITERATIONS = 10, + kSplineTableSize = 11, + kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), + float32ArraySupported = typeof Float32Array !== 'undefined'; + /* Must contain four arguments. */ + + if (arguments.length !== 4) { + return false; + } + /* Arguments must be numbers. */ + + + for (var i = 0; i < 4; ++i) { + if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { + return false; + } + } + /* X values must be in the [0, 1] range. */ + + + mX1 = Math.min(mX1, 1); + mX2 = Math.min(mX2, 1); + mX1 = Math.max(mX1, 0); + mX2 = Math.max(mX2, 0); + var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + + function A(aA1, aA2) { + return 1.0 - 3.0 * aA2 + 3.0 * aA1; + } + + function B(aA1, aA2) { + return 3.0 * aA2 - 6.0 * aA1; + } + + function C(aA1) { + return 3.0 * aA1; + } + + function calcBezier(aT, aA1, aA2) { + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; + } + + function getSlope(aT, aA1, aA2) { + return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + } + + function newtonRaphsonIterate(aX, aGuessT) { + for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + + if (currentSlope === 0.0) { + return aGuessT; + } + + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + + return aGuessT; + } + + function calcSampleValues() { + for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); + } + } + + function binarySubdivide(aX, aA, aB) { + var currentX, + currentT, + i = 0; + + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + + return currentT; + } + + function getTForX(aX) { + var intervalStart = 0.0, + currentSample = 1, + lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); + + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); + } + } + + var _precomputed = false; + + function precompute() { + _precomputed = true; + + if (mX1 !== mY1 || mX2 !== mY2) { + calcSampleValues(); + } + } + + var f = function f(aX) { + if (!_precomputed) { + precompute(); + } + + if (mX1 === mY1 && mX2 === mY2) { + return aX; + } + + if (aX === 0) { + return 0; + } + + if (aX === 1) { + return 1; + } + + return calcBezier(getTForX(aX), mY1, mY2); + }; + + f.getControlPoints = function () { + return [{ + x: mX1, + y: mY1 + }, { + x: mX2, + y: mY2 + }]; + }; + + var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; + + f.toString = function () { + return str; + }; + + return f; + } + + /*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + + /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass + then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ + var generateSpringRK4 = function () { + function springAccelerationForState(state) { + return -state.tension * state.x - state.friction * state.v; + } + + function springEvaluateStateWithDerivative(initialState, dt, derivative) { + var state = { + x: initialState.x + derivative.dx * dt, + v: initialState.v + derivative.dv * dt, + tension: initialState.tension, + friction: initialState.friction + }; + return { + dx: state.v, + dv: springAccelerationForState(state) + }; + } + + function springIntegrateState(state, dt) { + var a = { + dx: state.v, + dv: springAccelerationForState(state) + }, + b = springEvaluateStateWithDerivative(state, dt * 0.5, a), + c = springEvaluateStateWithDerivative(state, dt * 0.5, b), + d = springEvaluateStateWithDerivative(state, dt, c), + dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), + dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); + state.x = state.x + dxdt * dt; + state.v = state.v + dvdt * dt; + return state; + } + + return function springRK4Factory(tension, friction, duration) { + var initState = { + x: -1, + v: 0, + tension: null, + friction: null + }, + path = [0], + time_lapsed = 0, + tolerance = 1 / 10000, + DT = 16 / 1000, + have_duration, + dt, + last_state; + tension = parseFloat(tension) || 500; + friction = parseFloat(friction) || 20; + duration = duration || null; + initState.tension = tension; + initState.friction = friction; + have_duration = duration !== null; + /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ + + if (have_duration) { + /* Run the simulation without a duration. */ + time_lapsed = springRK4Factory(tension, friction); + /* Compute the adjusted time delta. */ + + dt = time_lapsed / duration * DT; + } else { + dt = DT; + } + + for (;;) { + /* Next/step function .*/ + last_state = springIntegrateState(last_state || initState, dt); + /* Store the position. */ + + path.push(1 + last_state.x); + time_lapsed += 16; + /* If the change threshold is reached, break. */ + + if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { + break; + } + } + /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the + computed path and returns a snapshot of the position according to a given percentComplete. */ + + + return !have_duration ? time_lapsed : function (percentComplete) { + return path[percentComplete * (path.length - 1) | 0]; + }; + }; + }(); + + var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; + }; + + var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier + }; + + function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + + if (start === end) { + return end; + } + + var val = easingFn(start, end, percent); + + if (type == null) { + return val; + } + + if (type.roundValue || type.color) { + val = Math.round(val); + } + + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + + return val; + } + + function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } + } + + function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + + return easedArr; + } + + return undefined; + } + + function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + + var name, args; + + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + + var easing = ani_p.easingImpl; + var percent; + + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + + if (ani_p.applying) { + percent = ani_p.progress; + } + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (ani_p.delay == null) { + // then update + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + + if (endPos && isEles && !self.locked()) { + var newPos = {}; + + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + + self.position(newPos); + } + + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + + self.emit('pan'); + } + + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + + self.emit('zoom'); + } + + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + + var props = ani_p.style; + + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + + self.emit('style'); + } // if + + } + + ani_p.progress = percent; + return percent; + } + + function valid(start, end) { + if (start == null || end == null) { + return false; + } + + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + + return false; + } + + function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; + } + + function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; // if nothing currently animating, get something from the queue + + if (current.length === 0) { + var next = queue.shift(); + + if (next) { + current.push(next); + } + } + + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + + _callbacks.splice(0, _callbacks.length); + }; // step and remove if done + + + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + + if (!ani_p.playing && !ani_p.applying) { + continue; + } // an apply() while playing shouldn't do anything + + + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + + step$1(ele, ani, now, isCore); + + if (ani_p.applying) { + ani_p.applying = false; + } + + callbacks(ani_p.frames); + + if (ani_p.step != null) { + ani_p.step(now); + } + + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + + ranAnis = true; + } + + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + + return ranAnis; + } // stepElement + // handle all eles + + + var ranEleAni = false; + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + + var ranCoreAni = stepOne(cy, true); // notify renderer + + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } // remove elements from list of currently animating if its queues are empty + + + eles.unmerge(doneEles); + cy.emit('step'); + } // stepAll + + var corefn$8 = { + // pull in animation functions + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + + var renderer = cy.renderer(); + + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } + }; + + var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + + if (selector != null) { + return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } + }; + + var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } + }; + + var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } + }; + define.eventAliasesOn(elesfn); + + var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } + }; + corefn$7.jpeg = corefn$7.jpg; + + var corefn$6 = { + layout: function layout(options) { + var cy = this; + + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + + var name = options.name; + var Layout = cy.extension('layout', name); + + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + + var eles; + + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } + }; + corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + + var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + + if (eventEles != null) { + eles.merge(eventEles); + } + + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + + var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528 + + if (this.destroyed() || !renderer) { + return; + } + + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + + if (_p.batchCount == null) { + _p.batchCount = 0; + } + + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + + if (_p.batchCount === 0) { + return this; + } + + _p.batchCount--; + + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + + var renderer = this.renderer(); // notify the renderer of queued eles and event types + + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } + }; + + var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false + }); + var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + + if (domEle) { + domEle._cyreg = null; + + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + + cy._private.renderer = null; // to be extra safe, remove the ref + + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } + }; + corefn$4.invalidateDimensions = corefn$4.resize; + + var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + + return new Collection(this, eles, opts.unique, opts.removed); + } + + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + + if (selector) { + return nodes.filter(selector); + } + + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + + if (selector) { + return edges.filter(selector); + } + + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } + }; // aliases + + corefn$3.elements = corefn$3.filter = corefn$3.$; + + var styfn$8 = {}; // keys for style blocks, e.g. ttfftt + + var TRUE = 't'; + var FALSE = 'f'; // (potentially expensive calculation) + // apply the style to the element based on + // - its bypass + // - what selectors match it + + styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + + if (cxtMeta.empty) { + continue; + } + + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + + var hintsDiff = self.updateStyleHints(ele); + + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + + return updatedEles; + }; + + styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + + if (cachedVal) { + return cachedVal; + } + + var diffProps = []; + var addedProp = {}; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + + var laterCxtOverrides = false; + + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + + } // if + + } // for contexts + + + cache[dualCxtKey] = diffProps; + return diffProps; + }; + + styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; // get the cxt key + + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; + }; // gets a computed ele style object based on matched contexts + + + styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; // if already computed style, returned cached copy + + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + + var style = { + _private: { + key: cxtKey + } + }; + + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + + if (!hasCxt) { + continue; + } + + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + + cxtStyles[cxtKey] = style; + return style; + }; + + styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } // save cycles when the context prop doesn't need to be applied + + + if (eleProp === cxtProp) { + continue; + } // save cycles when a mapped context prop doesn't need to be applied + + + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + + return { + diffProps: retDiffProps + }; + }; + + styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + + var oldStyleKey = _p.styleKey; + + if (ele.removed()) { + return false; + } + + var isNode = _p.group === 'nodes'; // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + + + var N = 2000000000; + + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + + if (parsedProp == null) { + continue; + } + + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } // might not be a number if it allows enums + + + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } // overall style key + // + + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + + _p.styleKey = combineHashes(hash[0], hash[1]); // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } // node + // + + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + + return oldStyleKey !== _p.styleKey; + }; + + styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; + }; // apply a property to the style (for internal use) + // returns whether application was successful + // + // now, this function flattens the property, and here's how: + // + // for parsedProp:{ bypass: true, deleteBypass: true } + // no property is generated, instead the bypass property in the + // element's style is replaced by what's pointed to by the `bypassed` + // field in the bypass property (i.e. restoring the property the + // bypass was overriding) + // + // for parsedProp:{ mapped: truthy } + // the generated flattenedProp:{ mapping: prop } + // + // for parsedProp:{ bypass: true } + // the generated flattenedProp:{ bypassed: parsedProp } + + + styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + if (prop && prop.name.substr(0, 3) === 'pie') { + warn('The pie style properties are deprecated. Create charts using background images instead.'); + } // edge sanity checks to prevent the client from making serious mistakes + + + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } // check if we need to delete the current bypass + + + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; // put the property in the style objects + + + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + + if (fieldVal == null) { + printMappingErr(); + return false; + } + + var percent; + + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } // make sure to bound percent value + + + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + // direct mapping + + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + + var _fieldVal = _p.data; + + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + + flatProp.mapping = prop; // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + + flatProp.mapping = copy(prop); // keep a reference to the mapping + + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } // if the property is a bypass property, then link the resultant property to the original one + + + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + + checkTriggers(); + return true; + }; + + styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } + }; // updates the visual style for all elements (useful for manual style modification after init) + + + styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); + }; // diffProps : { name => { prev, next } } + + + styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + + if (props.length > 0 && duration > 0) { + var style = {}; // build up the style to animate towards + + var anyPrev = false; + + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + + if (!diffProp) { + continue; + } + + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } // consider px values + + + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + + initVal = fromProp.pfValue + initDt * diff; // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + + initVal = fromProp.value + initDt * diff; // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } // the previous value is good for an animation only if it's different + + + if (diff) { + style[prop] = toProp.strValue; // to val + + this.applyBypass(ele, prop, initVal); // from val + + anyPrev = true; + } + } // end if props allow ani + // can't transition if there's nothing previous to transition from + + + if (!anyPrev) { + return; + } + + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } + }; + + styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } + }; + + styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); + }; + + styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + + if ( // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + }); + }; + + styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); + }; + + var styfn$7 = {}; // bypasses are applied to an existing style on an element, and just tacked on temporarily + // returns true iff application was successful for at least 1 specified property + + styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; // put all the properties (can specify one or many) in an array after parsing them + + if (name === '*' || name === '**') { + // apply to all property names + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } // we've failed if there are no valid properties + + + if (props.length === 0) { + return false; + } // now, apply the bypass properties on the elements + + + var ret = false; // return true if at least one succesful bypass applied + + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + + if (ret) { + this.updateStyleHints(ele); + } + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + + return ret; + }; // only useful in specific cases like animation + + + styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + + if (prop.pfValue != null) { + prop.pfValue = value; + } + + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + + this.updateStyleHints(ele); + } + + this.checkTriggers(ele, name, oldValue, value); + } + }; + + styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); + }; + + styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + + var value = ''; // empty => remove bypass + + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + + this.updateStyleHints(ele); + + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + }; + + var styfn$6 = {}; // gets what an em size corresponds to in pixels relative to a dom element + + styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } + }; // gets css property from the core container + + + styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + + if (window$1 && domElement && window$1.getComputedStyle) { + return window$1.getComputedStyle(domElement).getPropertyValue(propName); + } + }; + + var styfn$5 = {}; // gets the rendered style for an element + + styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } + }; // gets the raw style for an element + + + styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + + return rstyle; + } + }; + + styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; + }; + + styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + + if (prop.alias) { + prop = prop.pointsTo; + } + + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + + return null; + } + }; + + styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + + if (styleProp) { + rstyle[name] = styleProp; + } + } + + return rstyle; + }; + + styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + + if (style) { + var names = Object.keys(style); + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + + if (styleProp) { + rstyle.push(styleProp); + } + } + } + + return rstyle; + }; + + styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + + return hash; + }; + + styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + + var styfn$4 = {}; + + styfn$4.appendFromJson = function (json) { + var style = this; + + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; + }; // accessible cy.style() function + + + styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; + }; // get json from cy.style() api + + + styfn$4.json = function () { + var json = []; + + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + + return json; + }; + + var styfn$3 = {}; + + styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; // remove comments from the style string + + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + + if (nothingLeftToParse) { + break; + } + + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + + selAndBlockStr = selAndBlock[0]; // parse the selector + + var selectorStr = selAndBlock[1]; + + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); // skip this selector and block + + removeSelAndBlockFromRemaining(); + continue; + } + } // parse the block of properties and values + + + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + + if (_nothingLeftToParse) { + break; + } + + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + var parsedProp = style.parse(propStr, valStr); + + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); // skip this property in the block + + removePropAndValFromRem(); + continue; + } + + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } // put the parsed block in the style + + + style.selector(selectorStr); + + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + + removeSelAndBlockFromRemaining(); + } + + return style; + }; + + styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; + }; + + var styfn$2 = {}; + + (function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it + + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials', 'null'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool + }, { + name: 'text-events', + type: t.bool + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.nonNegativeInt, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; // pie backgrounds for nodes + + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } // edge arrows + + + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); // define aliases + + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; // list of property names + + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); // allow access of properties by name ( e.g. style.properties.height ) + + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } // map aliases + + + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; // add alias prop for parsing + + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } + })(); + + styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; + }; + + styfn$2.getDefaultProperties = function () { + var _p = this._private; + + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'taxi-turn': '50%', + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + + if (prop.pointsTo) { + continue; + } + + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + + _p.defaultProperties = parsedProps; + return _p.defaultProperties; + }; + + styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; + }; + + var styfn$1 = {}; // a caching layer for property parsing + + styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + + + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; + }; + + styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + + return prop; + }; // parse a property; return null on invalid; return parsed property otherwise + // fields : + // - name : the name of the property + // - value : the parsed, native-typed value of the property + // - strValue : a string value that represents the property value in valid css + // - bypass : true iff the property is a bypass property + + + styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + + if (!property) { + return null; + } // return null on property of unknown name + + + if (value === undefined) { + return null; + } // can't assign undefined + // the property may be an alias + + + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + + var valueIsString = string(value); + + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + + var type = property.type; + + if (!type) { + return null; + } // no type, no luck + // check if bypass is null or empty string (i.e. indication to delete bypass property) + + + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } // check if value is a function used as a mapper + + + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } // check if value is mapped + + + var data, mapData; + + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + + if (type.multiple) { + return false; + } // impossible to map to num + + + var _mapped = types.mapData; // we can map only if the type is a colour or a number + + if (!(type.color || type.number)) { + return false; + } + + var valueMin = this.parse(name, mapData[4]); // parse to validate + + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + + var valueMax = this.parse(name, mapData[5]); // parse to validate + + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + // check if valueMin and valueMax are the same + + + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } // several types also allow enums + + + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; + }; // check the type and return the appropriate object + + + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + + + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid + + if (isNaN(value) && type.enums === undefined) { + return null; + } // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + + + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } // check if value must be an integer + + + if (type.integer && !integer(value)) { + return null; + } // check value is within range + + + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; // normalise value in pixels + + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } // normalise value in ms + + + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } // normalise value in rad + + + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } // normalize value in % + + + if (units === '%') { + ret.pfValue = value / 100; + } + + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + + if (propsStr === 'none') ; else { + // go over each prop + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + + if (props.length === 0) { + return null; + } + } + + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + + if (!tuple) { + return null; + } + + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + + if (enumProp) { + return enumProp; + } + } + + var regexes = type.regexes ? type.regexes : [type.regex]; + + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + + var m = regex.exec(value); + + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } + }; + + var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); + }; + + var styfn = Style.prototype; + + styfn.instanceString = function () { + return 'style'; + }; // remove all contexts + + + styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining + }; + + styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; + }; // builds a style object for the 'core' selector + + + styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); + }; // create a new context from the specified selector string and switch to that context + + + styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining + }; // add one or many css rules to the current context + + + styfn.css = function () { + var self = this; + var args = arguments; + + if (args.length === 1) { + var map = args[0]; + + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } // do nothing if args are invalid + + + return this; // chaining + }; + + styfn.style = styfn.css; // add a single css rule to the current context + + styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); // add property to current context if valid + + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + + if (property.mapped) { + this[i].mappedProperties.push(property); + } // add to core style if necessary + + + var currentSelectorIsCore = !this[i].selector; + + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + + return this; // chaining + }; + + styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + + return this; + }; // static function + + + Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; + }; + + Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); + }; + + [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); + }); + Style.types = styfn.types; + Style.properties = styfn.properties; + Style.propertyGroups = styfn.propertyGroups; + Style.propertyGroupNames = styfn.propertyGroupNames; + Style.propertyGroupKeys = styfn.propertyGroupKeys; + + var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } + }; + + var defaultSelectionType = 'single'; + var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + + return this; // chaining + }, + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + + return this; // chaining + }, + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + + return this; // chaining + }, + selectionType: function selectionType(selType) { + var _p = this._private; + + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + + return this; // chaining + }, + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + + return this; // chaining + }, + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + + return this; // chaining + }, + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + + return this; // chaining + }, + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + + return this; // chaining + }, + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + switch (args.length) { + case 0: + // .pan() + return pan; + + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x = x; + } + + if (number$1(y)) { + pan.y = y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + + dim = args[0]; + val = args[1]; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + + if (!this._private.panningEnabled) { + return this; + } + + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + + if (number$1(x)) { + pan.x += x; + } + + if (number$1(y)) { + pan.y += y; + } + + this.emit('pan viewport'); + } + + break; + + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + + var bb; + + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); // crop zoom + + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + + var zoom; + var bail = false; + + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } // crop zoom + + + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params + + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + + if (vp == null || !vp.zoomed) { + return this; + } + + _p.zoom = vp.zoom; + + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + + var zoomFailed = false; + var panFailed = false; + + if (!opts) { + return this; + } + + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + + if (!plainObject(opts.pan)) { + panDefd = false; + } + + if (!zoomDefd && !panDefd) { + return this; + } + + if (zoomDefd) { + var z = opts.zoom; + + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + + if (!panFailed) { + events.push('pan'); + } + } + + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + + return this; // chaining + }, + center: function center(elements) { + var pan = this.getCenterPan(elements); + + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + + return this; // chaining + }, + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = window$1.getComputedStyle(container); + + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } + }; // aliases + + corefn$1.centre = corefn$1.center; // backwards compatibility + + corefn$1.autolockNodes = corefn$1.autolock; + corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + + var fn = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) + }; // aliases + + fn.attr = fn.data; + fn.removeAttr = fn.removeData; + + var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + + reg = reg || {}; + + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + + + reg.cy = cy; + var head = window$1 !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + + this.createEmitter(); // set selection type + + this.selectionType(options.selectionType); // init zoom bounds + + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; // start with the default stylesheet so we have something before loading an external stylesheet + + + if (_p.styleEnabled) { + cy.setStyle([]); + } // create the renderer + + + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + + cy.initRenderer(rendererOptions); + + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); // remove old elements + + var oldEles = cy.mutableElements(); + + if (oldEles.length > 0) { + oldEles.remove(); + } + + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; // init style + + if (_p.styleEnabled) { + cy.style().append(initStyle); + } // initial load + + + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; // if a ready callback is specified as an option, the bind it + + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } // bind all the ready handlers registered before creating this instance + + + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + + cy.emit('ready'); + }, options.done); + }); + }; + + var corefn = Core.prototype; // short alias + + extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + + return this; // chaining + }, + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + + return this; + }, + container: function container() { + return this._private.container || null; + }, + mount: function mount(container) { + if (container == null) { + return; + } + + var cy = this; + var _p = cy._private; + var options = _p.options; + + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + + if (plainObject(obj)) { + // set + cy.startBatch(); + + if (obj.elements) { + var idInJson = {}; + + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + + var id = '' + json.data.id; // id must be string + + var ele = cy.getElementById(id); + idInJson[id] = true; + + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + + cy.add(toAdd); + + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + + _ele.json(_json); + } + }; + + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + + if (array(elements)) { + updateEles(elements, gr); + } + } + } + + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); // so that children are not removed w/parent + + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + + if (obj.style) { + cy.style(obj.style); + } + + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + + if (obj.data) { + cy.data(obj.data); + } + + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + + if (obj[f] != null) { + cy[f](obj[f]); + } + } + + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + + if (!json.elements[group]) { + json.elements[group] = []; + } + + json.elements[group].push(ele.json()); + }); + } + + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } + }); + corefn.$id = corefn.getElementById; + [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); + }); + + /* eslint-disable no-unused-vars */ + + var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + var deprecatedOptionDefaults = { + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also + acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops + + }; + /* eslint-enable */ + + var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); + }; + + var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); + }; + + function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); + } + + BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + + var depths = []; + var foundByBfs = {}; + + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; // find the depths of the nodes + + + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); // check for nodes not found by bfs + + var orphanNodes = []; + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } // assign the nodes a depth and index + + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + + if (eInfo.depth <= maxDepth) { + if (!options.acyclic && shifted[id]) { + return null; + } + + var newDepth = maxDepth + 1; + changeDepth(ele, newDepth); + shifted[id] = newDepth; + return true; + } + + return false; + }; // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + + + if (directed && maximal) { + var Q = []; + var shifted = {}; + + var enqueue = function enqueue(n) { + return Q.push(n); + }; + + var dequeue = function dequeue() { + return Q.shift(); + }; + + nodes.forEach(function (n) { + return Q.push(n); + }); + + while (Q.length > 0) { + var _ele3 = dequeue(); + + var didShift = adjustMaximally(_ele3, shifted); + + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + // find min distance we need to leave between nodes + + var minDistance = 0; + + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } // get the weighted percent for an element based on its connectivity to other levels + + + var cachedWeightedPercent = {}; + + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + + var bf = getInfo(neighbor); + + if (bf == null) { + continue; + } + + var index = bf.index; + var depth = bf.depth; // unassigned neighbours shouldn't affect the ordering + + if (index == null || depth == null) { + continue; + } + + var nDepth = depths[depth].length; + + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + + samples = Math.max(1, samples); + percent = percent / samples; + + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; // rearrange the indices in each depth level based on connectivity + + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } // sort each level to make connected nodes closer + + + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + + assignDepthsAt(_i6); + } // assign orphan nodes to a new top-level depth + + + var orphanDepth = []; + + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining + }; + + var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function CircleLayout(options) { + this.options = extend({}, defaults$6, options); + } + + CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } // calculate the radius + + + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); + } + + ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + + var maxNodeSize = 0; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; // calculate the node value + + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); // for style mapping + + node._private.scratch.concentric = value; + } // in case we used the `concentric` in style + + + nodes.updateStyle(); // calculate max size now based on potentially updated mappers + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + + var nbb = _node.layoutDimensions(options); + + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } // sort node values in descreasing order + + + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); // put the values into levels + + var levels = [[]]; + var currentLevel = levels[0]; + + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + + currentLevel.push(val); + } // create positions from levels + + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } // find the metrics for each level + + + var r = 0; + + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); // calculate the radius + + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + + level.r = r; + r += minDist; + } + + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + + _r = 0; + + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + + if (_i5 === 0) { + _r = _level2.r; + } + + _level2.r = _r; + _r += rDeltaMax; + } + } // calculate the node positions + + + var pos = {}; // id => position + + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } // position the nodes + + + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining + }; + + /* + The CoSE layout was written by Gerardo Huck. + https://www.linkedin.com/in/gerardohuck/ + + Based on the following article: + http://dl.acm.org/citation.cfm?id=1498047 + + Modifications tracked on Github. + */ + var DEBUG; + /** + * @brief : default layout options + */ + + var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 + }; + /** + * @brief : constructor + * @arg options : object containing layout options + */ + + function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; + } + /** + * @brief : runs the layout + */ + + + CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } // Set DEBUG - Global variable + + + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } // Initialize layout info + + + var layoutInfo = createLayoutInfo(cy, layout, options); // Show LayoutInfo contents if debugging + + if (DEBUG) { + printLayoutInfo(layoutInfo); + } // If required, randomize node positions + + + if (options.randomize) { + randomizePositions(layoutInfo); + } + + var startTime = performanceNow(); + + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); // Fit the graph if necessary + + if (true === options.fit) { + cy.fit(options.padding); + } + }; + + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } // Do one step in the phisical simulation + + + step(layoutInfo, options); // Update temperature + + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + + return true; + }; + + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); // Layout has finished + + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + + var i = 0; + var loopRet = true; + + if (options.animate === true) { + var frame = function frame() { + var f = 0; + + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + + if (now - startTime >= options.animationThreshold) { + refresh(); + } + + requestAnimationFrame(frame); + } + }; + + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + + separateComponents(layoutInfo, options); + done(); + } + + return this; // chaining + }; + /** + * @brief : called on continuous layouts to stop them before they finish + */ + + + CoseLayout.prototype.stop = function () { + this.stopped = true; + + if (this.thread) { + this.thread.stop(); + } + + this.emit('layoutstop'); + return this; // chaining + }; + + CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + + return this; // chaining + }; + /** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ + + + var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: bb.w, + clientHeight: bb.h, + boundingBox: bb + }; + var components = options.eles.components(); + var id2cmptId = {}; + + for (var i = 0; i < components.length; i++) { + var component = components[i]; + + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } // Iterate over all nodes, creating layout nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); // forces + + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; // Add new node + + layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map + + layoutInfo.idToIndex[tempNode.id] = i; + } // Inline implementation of a queue, used for traversing the graph in BFS order + + + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + + var tempGraph = []; // Second pass to add child information and + // initialize queue for hierarchical traversal + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; // Check if node n has a parent node + + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } // Add root graph to graphSet + + + layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); // Add children to que queue to be visited + + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } // Create indexToGraph map + + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } // Iterate over all edges, creating Layout Edges + + + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); // Compute ideal length + + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; // Check if it's an inter graph edge + + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); // Compute sum of node depths, relative to lca graph + + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; // Source depth + + var tempNode = layoutInfo.layoutNodes[sourceIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // Target depth + + + tempNode = layoutInfo.layoutNodes[targetIx]; + + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + // Update idealLength + + + idealLength *= depth * options.nestingFactor; + } + + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } // Finally, return layoutInfo object + + + return layoutInfo; + }; + /** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ + + + var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } + }; + /** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancestors (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ + + + var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; // If both nodes belongs to graphIx + + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } // Make recursive calls for all subgraphs + + + var c = 0; + + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; // If the node has no child, skip it + + if (0 === children.length) { + continue; + } + + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + + return { + count: c, + graph: graphIx + }; + }; + /** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ + + +var printLayoutInfo; + /** + * @brief : Randomizes the position of all nodes + */ + + + var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; // No need to randomize compound nodes or locked nodes + + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } + }; + + var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; + }; + /** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); // Trigger layoutReady only on first call + + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } + }; + /** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ + // var logDebug = function(text) { + // if (DEBUG) { + // console.debug(text); + // } + // }; + + /** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ + + + var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); // Calculate edge forces + + calculateEdgeForces(layoutInfo); // Calculate gravity forces + + calculateGravityForces(layoutInfo, options); // Propagate forces from parent to child + + propagateForces(layoutInfo); // Update positions based on calculated forces + + updatePositions(layoutInfo); + }; + /** + * @brief : Computes the node repulsion forces + */ + + + var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } + }; + + var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); + }; + /** + * @brief : Compute the node repulsion forces between a pair of nodes + */ + + + var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } // Get direction of line connecting both node centers + + + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + // If both centers are the same, apply a random force + + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + + var overlap = nodesOverlap(node1, node2, directionX, directionY); + + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; // Compute the module and components of the force vector + + var distance = Math.sqrt(directionX * directionX + directionY * directionY); // s += "\nDistance: " + distance; + + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); // Use clipping points to compute distance + + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); // s += "\nDistance: " + distance; + // Compute the module and components of the force vector + + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } // Apply force + + + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + + return; + }; + /** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ + + + var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } + }; + /** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ + + + var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + + var res = {}; // Case: Vertical direction (up) + + if (0 === dX && 0 < dY) { + res.x = X; // s += "\nUp direction"; + + res.y = Y + H / 2; + return res; + } // Case: Vertical direction (down) + + + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; // s += "\nDown direction"; + + return res; + } // Case: Intersects the right border + + + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; // s += "\nRightborder"; + + return res; + } // Case: Intersects the left border + + + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; // s += "\nLeftborder"; + + return res; + } // Case: Intersects the top border + + + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; // s += "\nTop border"; + + return res; + } // Case: Intersects the bottom border + + + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; // s += "\nBottom border"; + + return res; + } // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + + + return res; + }; + /** + * @brief : Calculates all edge forces + */ + + + var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; // Get direction of line connecting both node centers + + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + + if (0 === directionX && 0 === directionY) { + continue; + } // Get clipping points for both nodes + + + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } // Add this force to target and source nodes + + + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + + } + }; + /** + * @brief : Computes gravity forces for all nodes + */ + + + var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + + var distThreshold = 1; // var s = 'calculateGravityForces'; + // logDebug(s); + + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; // s = "Set: " + graph.toString(); + // logDebug(s); + // Compute graph center + + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + // Apply force to all nodes in graph + + + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; // s += ": Applied force: " + fx + ", " + fy; + } // logDebug(s); + + } + } + }; + /** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ + + + var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + + var end = -1; // Points to the end of the queue + // logDebug('propagateForces'); + // Start by visiting the nodes in the root graph + + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; // Traverse the graph, level by level, + + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; // We only need to process the node if it's compound + + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; // Propagate offset + + childNode.offsetX += offX; + childNode.offsetY += offY; // Add children to queue to be visited + + queue[++end] = children[i]; + } // Reset parent offsets + + + node.offsetX = 0; + node.offsetY = 0; + } + } + }; + /** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ + + + var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + // Limit displacement in order to improve stability + + + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + // Update ancestry boudaries + + updateAncestryBoundaries(n, layoutInfo); + } // Update size, position of compund nodes + + + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } + }; + /** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ + + + var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + + return res; + }; + /** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ + + + var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } // Get Parent Node + + + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; // MaxX + + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } // MinX + + + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } // MaxY + + + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } // MinY + + + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } // If updated boundaries, propagate changes upward + + + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + + + return; + }; + + var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + + var totalA = 0; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + + for (var i = 0; i < components.length; i++) { + var c = components[i]; + + if (!c) { + continue; + } + + for (var j = 0; j < c.length; j++) { + var n = c[j]; + + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } + }; + + var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function GridLayout(options) { + this.options = extend({}, defaults$3, options); + } + + GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + + if (options.sort) { + nodes = nodes.sort(options.sort); + } + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values + + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } // otherwise use the automatic values and adjust accordingly + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); // reducing the small side takes away the most cells, so try it first + + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + + var _lg = large(); // try to add to larger side first (adds less in multiplication) + + + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; // to keep track of current cell position + + + var row = 0; + var col = 0; + + var moveToNextCell = function moveToNextCell() { + col++; + + if (col >= cols) { + col = 0; + row++; + } + }; // get a cache of all the manual positions + + + var id2manPos = {}; + + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + + var getPos = function getPos(element, i) { + var x, y; + + if (element.locked() || element.isParent()) { + return false; + } // see if we have a manual position set + + + var rcPos = id2manPos[element.id()]; + + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + while (used(row, col)) { + moveToNextCell(); + } + + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + + return { + x: x, + y: y + }; + }; + + nodes.layoutPositions(this, options, getPos); + } + + return this; // chaining + }; + + var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop + + }; // constructor + // options : object containing layout options + + function NullLayout(options) { + this.options = extend({}, defaults$2, options); + } // runs the layout + + + NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + + var layout = this; // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + + options.cy; + layout.emit('layoutstart'); // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); // trigger layoutready when each node has had its position set at least once + + layout.one('layoutready', options.ready); + layout.emit('layoutready'); // trigger layoutstop when the layout stops (e.g. finishes) + + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining + }; // called on continuous layouts to stop them before they finish + + + NullLayout.prototype.stop = function () { + return this; // chaining + }; + + var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function PresetLayout(options) { + this.options = extend({}, defaults$1, options); + } + + PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + + if (posIsFn) { + return options.positions(node); + } + + var pos = options.positions[node._private.data.id]; + + if (pos == null) { + return null; + } + + return pos; + } + + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + + if (node.locked() || position == null) { + return false; + } + + return position; + }); + return this; // chaining + }; + + var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts + + }; + + function RandomLayout(options) { + this.options = extend({}, defaults, options); + } + + RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining + }; + + var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout + }, { + name: 'circle', + impl: CircleLayout + }, { + name: 'concentric', + impl: ConcentricLayout + }, { + name: 'cose', + impl: CoseLayout + }, { + name: 'grid', + impl: GridLayout + }, { + name: 'null', + impl: NullLayout + }, { + name: 'preset', + impl: PresetLayout + }, { + name: 'random', + impl: RandomLayout + }]; + + function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing + } + + var noop = function noop() {}; + + var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); + }; + + NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr + }; + + var BRp$f = {}; + BRp$f.arrowShapeWidth = 0.3; + + BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + + return retPts; + }; + + var pointsToArr = function pointsToArr(pts) { + var ret = []; + + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + + return ret; + }; + + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + }; + + var BRp$e = {}; // Project mouse + + BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; + }; + + BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = window$1.getComputedStyle(container); + + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; + }; + + BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; + }; + + BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; + }; + + BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + + if (interactiveElementsOnly) { + eles = eles.interactive; + } + + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { + addEle(node, 0); + return true; + } + } + } + + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } // if we're close to the edge but didn't hit it, maybe we hit its arrows + + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + + + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + + if (!eventsEnabled || !text) { + return; + } + + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [// with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + + return near; + }; // 'Give me everything from this box' + + + BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + + return box; + }; + + var BRp$d = {}; + + BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; // Displacement gives direction for arrowhead orientation + + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + + midX = rs.midX; + midY = rs.midY; // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + + dispX = endX - startX; + dispY = endY - startY; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + var i3 = i2 + 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + + var p0 = ic - 2; // startpt + + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; // mid source + // + + dispX *= -1; + dispY *= -1; + + if (isSegments) { + var pts = rs.allpts; + + if (pts.length / 2 % 2 === 0) ; else { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); + }; + + BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + + if (cachedVal) { + return cachedVal; + } + + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; + }; + + var BRp$c = {}; + + BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; // always override as haystack in case set to different type previously + + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } + }; + + BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + var rs = edge._private.rscratch; + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var edgeDistances = edge.pstyle('edge-distances').value; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + rs.edgeType = 'segments'; + rs.segpts = []; + + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + } + }; + + BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; // increase by step size for overlapping loops, keyed on direction and sweep values + + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; + }; + + BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; // avoids cases with impossible beziers + + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; + }; + + BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + edge._private.rscratch.edgeType = 'straight'; + }; + + BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var vectorNormInverse = pairInfo.vectorNormInverse, + posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts; + var edgeDistances = edge.pstyle('edge-distances').value; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + + ctrlptWeight = ctrlptWs.value[b]; + } + + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } + }; + + BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; // take away the effective w/h from the magnitude of the delta value + + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + + var d; + + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } + }; + + BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; // can only correct beziers for now... + + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + + if (badStart || badAStart || closeStartACp) { + overlapping = true; // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); + + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + + + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + + var _radius = Math.max(srcW, srcH); + + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); + + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } + }; + + BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); // the midpt between ctrlpts as intermediate destination pts + + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; // default midpt for labels etc + + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } + } + }; + + BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } + }; + + BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + + if (!edges || edges.length === 0) { + return; + } + + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$2(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + + if (map2 == null) { + map2 = new Map$2(); + this.map.set(pairId[0], map2); + } + + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; // create a table of edge (src, tgt) => list of edges between them + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; // ignore edges who are not to be displayed + // they shouldn't take up space + + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + + tableEntry.eles.push(edge); + + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + + + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); // for each pair id, the edges should be sorted by index + + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); // make sure src/tgt distinction is consistent w.r.t. pairId + + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + + var _curveStyle = _edge.pstyle('curve-style').value; + + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order + + + var edgeIsSwapped = !src.same(_edge.source()); + + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; // pt outside src shape to calc distance/displacement from src to tgt + + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); + var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt + + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; // if node shapes overlap, then no ctrl pts to draw + + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle === 'segments') { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'taxi') { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + + _this.findEndpoints(_edge); + + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + + _this.checkForInvalidEdgeWarning(_edge); + + _this.storeAllpts(_edge); + + _this.storeEdgeProjections(_edge); + + _this.calculateArrowAngles(_edge); + + _this.recalculateEdgeLabelProjections(_edge); + + _this.calculateLabelAngles(_edge); + } // for pair edges + + }; + + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + + + this.findHaystackPoints(haystackEdges); + }; + + function getPts(pts) { + var retPts = []; + + if (pts == null) { + return; + } + + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + + return retPts; + } + + BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } + }; + + BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } + }; + + BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; + }; + + var BRp$b = {}; + + BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); + } + }; + + BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); + + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + + var ha = target.pstyle('text-halign').value; + + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); + + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + + var _lw2 = _lw / 2; + + var _lh2 = _lh / 2; + + var _va = source.pstyle('text-valign').value; + + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + + var _ha = source.pstyle('text-halign').value; + + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + + var _intSqdist = sqdist(_refPt, array2point(intersect)); + + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + + var _minSqDist = _intSqdist; + + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } + }; + + BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } + }; + + BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } + }; + + var BRp$a = {}; + + function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } + } + + BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; // clear the cached points state + + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + }; + + BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); + }; + + /* global document */ + + var BRp$9 = {}; + + BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + + if (emptyString(content)) { + return; + } + + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + + default: + // e.g. center + textX = nodePos.x; + } + + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + + default: + // e.g. middle + textY = nodePos.y; + } + + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); + }; + + var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + + return angle; + }; + + var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); + }; + + var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); + }; + + BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } // add center point to style so bounding box calculations can use it + // + + + p = { + x: rs.midX, + y: rs.midY + }; + + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + + var ctrlpts = []; // store each ctrlpt info init + + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } // update each ctrlpt with segment info + + + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + + if (!content[prefix]) { + return; + } + + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; // find the segment we're on + + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + + if (selected) { + break; + } + } + + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + + di = dist(p0, p1); + d0 = d; + d += di; + + if (d >= offset) { + break; + } + } + + var pD = offset - d0; + + var _t = pD / di; + + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); + }; + + BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } + }; + + BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); + }; + + BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; // for empty text, skip all processing + + + if (!text) { + return ''; + } + + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + + var wrapStyle = ele.pstyle('text-wrap').value; + + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); // save recalc if the label is the same as before + + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + + subline = word + wordSeparator; + } + } // if there's remaining text, put it in a wrapped line + + + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + + if (widthWithNextCh > _maxW) { + break; + } + + ellipsized += text[i]; + + if (i === text.length - 1) { + incLastCh = true; + } + } + + if (!incLastCh) { + ellipsized += ellipsis; + } + + return ellipsized; + } // if ellipsize + + + return text; + }; + + BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + + case 'right': + return 'left'; + + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } + }; + + BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + + if (existingVal != null) { + return existingVal; + } + + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; + }; + + BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } + }; + + BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } + }; + + var BRp$8 = {}; + var TOO_SMALL_CUT_RECT = 28; + var warnedCutRect = false; + + BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + + return 'rectangle'; + } + + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + + return shape; + }; + + var BRp$7 = {}; + + BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + + elesToUpdate.cleanStyle(); + + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); + }; + + BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); + }; + + BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + + var edges = []; + var nodes = []; // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + + if (this.destroyed) { + return; + } // use cache by default for perf + + + if (useCache === undefined) { + useCache = true; + } + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } // only update if dirty and in graph + + + if (useCache && rstyle.clean || ele.removed()) { + continue; + } // only update if not display: none + + + if (ele.pstyle('display').value === 'none') { + continue; + } + + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + + rstyle.clean = true; + } // update node data from projections + + + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + + var pos = _ele.position(); + + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + + this.recalculateEdgeProjections(edges); // update edge data from projections + + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; // update rstyle positions + + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } + }; + + var BRp$6 = {}; + + BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } // put the grab target nodes last so it's on top of its neighbourhood + + + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } + }; + + BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; + }; + + BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + + return eles; + }; + + var BRp$5 = {}; + [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); + }); + + var BRp$4 = {}; + + BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + + if (!isDataUri) { + // if crossorigin is 'null'(stringified), then manually set it to null + crossOrigin = crossOrigin === 'null' ? null : crossOrigin; + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } + }; + + var BRp$3 = {}; + /* global document, window, ResizeObserver, MutationObserver */ + + BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + + var b = this.binder(target); + return b.on.apply(b, args); + }; + + BRp$3.binder = function (tgt) { + var r = this; + var tgtIsDom = tgt === window || tgt === document || tgt === document.body || domElement(tgt); + + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + window.addEventListener('test', null, opts); + } catch (err) {// not supported + } + + r.supportsPassiveEvents = supportsPassive; + } + + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; + }; + + BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); + }; + + BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); + }; + + BRp$3.load = function () { + var r = this; + + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; //if any parent node in event hierarchy isn't pannable, reject passthrough + + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + + return allowPassthrough; + }; + + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + + + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + var innerNodes = node.descendants(); + + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; // adds the given nodes and its neighbourhood to the drag layer + + + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + + addDescendantsToDrag(nodes, opts); // always add to drag + // also add nodes and edges related to the topmost ancestor + + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + + var addNodeToDrag = addNodesToDrag; + + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } // just go over all elements rather than doing a bunch of (possibly expensive) traversals + + + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + + + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + + if (!node.cy().hasCompoundNodes()) { + return; + } // find top-level parent + + + var parent = node.ancestors().orphans(); // no parent node: no nodes to add to the drag layer + + if (parent.same(node)) { + return; + } + + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; // watch for when the cy container is removed from the dom + + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + + var onResize = debounce_1(function () { + r.cy.resize(); + }, 100); + + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } // auto resize + + + r.registerBinding(window, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); // stop right click menu from appearing on cy + + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + + if (!atLeastOnePosInside) { + return false; + } + + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + + tParent = tParent.parentNode; + } + + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + + return true; + }; // Primary key + + + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; // Right click button + + + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } // Element dragging + + + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + + setGrabTarget(near); + + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } // Initialize selection box coordinates + + + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(window, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + + var multSelKeyDown = isMultSelKeyDown(e); + + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; // trigger context drag if rmouse down + + + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + r.hoverData.cxtDragged = true; + + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + + r.hoverData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } // Check if we are drag panning the entire graph + + } else if (r.hoverData.dragging) { + preventDefault = true; + + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } // Needs reproject due to pan changing viewport + + + pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + + r.hoverData.last = near; + } + + if (down) { + if (isOverThresholdDrag) { + // then we can take action + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + r.redrawHint('eles', true); + } + + r.dragData.didDrag = true; // indicate that we actually did drag the node + // now, add the elements to the drag layer if not done already + + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } // prevent the dragging from triggering text selection on the page + + + preventDefault = true; + } + + select[2] = pos[0]; + select[3] = pos[1]; + + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(window, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + + if (!capture) { + return; + } + + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + + if (!r.dragData.didDrag && // didn't move a node around + !r.hoverData.dragged && // didn't pan + !r.hoverData.selecting && // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + + + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } // Single selection + + + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + } + + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + + if (box.length > 0) { + r.redrawHint('eles', true); + } + + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } // always need redraw in case eles unselectable + + + r.redraw(); + } // Cancel drag pan + + + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + + var newZoom = cy.zoom() * Math.pow(10, diff); + + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; // Functions to help with whether mouse wheel should trigger zooming + // -- + + + r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(window, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); // desktop safari pinch to zoom start + + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + + var center1, modelCenter1; // center point on start pinch to zoom + + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + + if (!eventInContainer(e)) { + return; + } + + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } // record starting points for pinch-to-zoom + + + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; // consider context tap + + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + + if (e.touches[2]) { + // ignore + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + + if (near.selected()) { + // reset drag elements, since near will be added again + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + + setGrabTarget(near); + + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + + near.emit(makeEvent('grabon')); + + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } // Tap, taphold + // ----- + + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = []; + + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + + if (!capture && !eventInContainer(e)) { + return; + } + + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + + if (capture && e.touches[0] && startGPos) { + var disp = []; + + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } // context swipe cancelling + + + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; // cancel ctx gestures if the distance b/t the fingers increases + + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } // context swipe + + + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.cxtOver = near; + + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } // box selection + + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + + r.redrawHint('select', true); + r.redraw(); // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (draggedEles) { + r.redrawHint('drag', true); + + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + + var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2 + + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + + var factor = distance2 / distance1; + + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; // delta finger 2 + + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; // now calculate the zoom + + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); // the model center point converted to the current rendered pos + + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; // remove dragged eles + + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + _start.unactivate().emit('freeon'); + + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + + draggedEles.emit('dragfree'); + } + } + + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } // Re-project + + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + + if (capture && start != null) { + e.preventDefault(); + } // dragging nodes + + + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + + r.redraw(); + } else { + // otherwise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } // touchmove + + + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + r.touchData.last = near; + } // check to cancel taphold + + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } // panning + + + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + + if (allowPassthrough) { + e.preventDefault(); + + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } // Re-project + + + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + + + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(window, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(window, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + + e.preventDefault(); + } else { + return; + } + + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + if (start) { + start.unactivate(); + } + + var ctxTapend; + + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } // no more box selection if we don't have three fingers + + + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + + if (box.nonempty()) { + r.redrawHint('eles', true); + } + + r.redraw(); + } + + if (start != null) { + start.unactivate(); + } + + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; // Tap event, roughly same as mouse click event for touch + + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + + + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + + r.redrawHint('eles', true); + } + + r.touchData.singleTouchMoved = true; + } + + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = null; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } //r.redraw(); + + }, false); // fallback compatibility layer for ms pointer events + + if (typeof TouchEvent === 'undefined') { + var pointers = []; + + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } + }; + + var BRp$2 = {}; + + BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; + }; + + BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; + }; + + BRp$2.generateRoundPolygon = function (name, points) { + // Pre-compute control points + // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute + // the unit vectors. + // For simplicity the layout will be: + // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] + var allPoints = new Array(points.length * 2); + + for (var i = 0; i < points.length / 2; i++) { + var sourceIndex = i * 2; + var destIndex = void 0; + + if (i < points.length / 2 - 1) { + destIndex = (i + 1) * 2; + } else { + destIndex = 0; + } + + allPoints[i * 4] = points[sourceIndex]; + allPoints[i * 4 + 1] = points[sourceIndex + 1]; + var xDest = points[destIndex] - points[sourceIndex]; + var yDest = points[destIndex + 1] - points[sourceIndex + 1]; + var norm = Math.sqrt(xDest * xDest + yDest * yDest); + allPoints[i * 4 + 2] = xDest / norm; + allPoints[i * 4 + 3] = yDest / norm; + } + + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: allPoints, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); + } + }; + }; + + BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = cornerRadius * 2; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // Check top left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check top right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { + var cl = this.cornerLength; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { + return true; + } + + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; + }; + + BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + // use two fixed t values for the bezier curve approximation + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; // points are in clockwise order, inner (imaginary) control pt on [4, 5] + + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; // var y1 = curvePts[ 3 ]; + + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + + if (validRoots.length > 0) { + return validRoots[0]; + } + } + + return null; + }; + + var curveRegions = Object.keys(barrelCurvePts); + + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + + if (t == null) { + continue; + } + + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + + if (cornerPts.isTop && bezY <= y) { + return true; + } + + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + + return false; + } + }; + }; + + BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + + if (topIntersections.length > 0) { + return topIntersections; + } + + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = 2 * cornerRadius; // Check hBox + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } // Check vBox + + + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } // check non-rounded top side + + + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } // Check bottom right quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } // Check bottom left quarter circle + + + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + return false; + } + }; + }; + + BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); // Outer radius is 1; inner radius of star is smaller + + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + + if (shape = this[name]) { + // got cached shape + return shape; + } // create and cache new shape + + + return renderer.generatePolygon(name, points); + }; + }; + + var BRp$1 = {}; + + BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; + }; + + BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + + r.requestedFrame = true; + r.renderOptions = options; + }; + + BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); // higher priority callbacks executed first + + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); + }; + + var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } + }; + + BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + + r.redrawCount++; + + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; // use a weighted average with a bias from the previous average so we don't spike so easily + + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + + requestAnimationFrame(renderFn); + }; + + var BaseRenderer = function BaseRenderer(options) { + this.init(options); + }; + + var BR = BaseRenderer; + var BRp = BR.prototype; + BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; + + BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); // prepend a stylesheet in the head such that + + if (window$1) { + var document = window$1.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.textContent = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = window$1.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; //--Pointer-related data + + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); + }; + + BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; // the renderer can't be notified after it's destroyed + + if (this.destroyed) { + return; + } + + if (eventName === 'init') { + r.load(); + return; + } + + if (eventName === 'destroy') { + r.destroy(); + return; + } + + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); + }; + + BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) {// ie10 issue #1014 + } + } + }; + + BRp.isHeadless = function () { + return false; + }; + + [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); + }); + + var fullFpsTime = 1000 / 60; // assume 60 frames per second + + var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + + var queueRedraw = debounce_1(function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + + var thisDeqd = opts.deq(self, pixelRatio, extent); + + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } // callbacks on dequeue + + + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } + }; + + // Uses keys so elements may share the same cache. + + var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + + _classCallCheck(this, ElementTextureCacheLookup); + + this.idsByKey = new Map$2(); + this.keyForId = new Map$2(); + this.cachesByLvl = new Map$2(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + + if (!caches) { + caches = new Map$2(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); // getting for an element may need to add to the id list b/c eles can share keys + + if (cache != null) { + this.updateKeyMappingFor(ele); + } + + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + + return ElementTextureCacheLookup; + }(); + + var minTxrH = 25; // the size of the texture cache for small height eles (special case) + + var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up + + var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used + + var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps + + var defTxrWidth = 1024; // default/minimum texture width + + var maxTxrW = 1024; // the maximum width of a texture + + var maxTxrH = 1024; // the maximum height of a texture + + var minUtility = 0.2; // if usage of texture is less than this, it is retired + + var maxFullness = 0.8; // fullness of texture after which queue removal is checked + + var maxFullnessChecks = 10; // dequeued after this many checks + + var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps + + var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + + var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' + }; + var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true + }); + + var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); + }; + + var ETCp = ElementTextureCache.prototype; + ETCp.reasons = getTxrReasons; // the list of textures in which new subtextures for elements can be placed + + ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; + }; // the list of usused textures which can be recycled (in use in texture queue) + + + ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; + }; // queue of element draw requests at different scale levels + + + ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new heap(function (a, b) { + return b.reqs - a.reqs; + }); + return q; + }; // queue of element draw requests at different scale levels (element id lookup) + + + ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; + }; + + ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + + var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric + + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + + if (eleCache) { + return eleCache; + } + + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); // first try the second last one in case it has space at the end + + var txr = txrQ[txrQ.length - 2]; + + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; // try the last one if there is no second last one + + + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } // if the last one doesn't exist, we need a first one + + + if (!txr) { + txr = addNewTxr(); + } // if there's no room in the current texture, we need a new one + + + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + + if (c) { + higherCache = c; + break; + } + } + + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; // reset ele area in texture + + + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + + if (_c) { + lowerCache = _c; + break; + } + } + } + + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + self.queueElement(ele, lvl); + return lowerCache; + } + + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; + }; + + ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } + }; + + ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + + if (cache) { + caches.push(cache); + } + } + + var noOtherElesUseCache = lookup.invalidate(ele); + + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; // remove space from the texture it belongs to + + txr.invalidatedWidth += _cache.width; // mark the cache as invalidated + + _cache.invalidated = true; // retire the texture if its utility is low + + self.checkTextureUtility(txr); + } + } // remove from queue since the old req was for the old state + + + self.removeFromQueue(ele); + }; + + ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } + }; + + ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + var self = this; + var txrQ = self.getTextureQueue(txr.height); + + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } + }; + + ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + + clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); + }; + + ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; + }; + + ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } + }; + + ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } + }; + + ETCp.dequeue = function (pxRatio + /*, extent*/ + ) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + + var cacheExists = lookup.hasCache(ele, req.level); // clear out the key to req lookup + + k2q[key] = null; // dequeueing isn't necessary with an existing cache + + if (cacheExists) { + continue; + } + + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + + return dequeued; + }; + + ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } + }; + + ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); + }; + + ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); + }; + + ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } + }); + + var defNumLayers = 1; // default number of layers to use + + var minLvl = -4; // when scaling smaller than that we don't need to re-render + + var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) + + var maxZoom = 3.99; // beyond this zoom level, layered textures are not used + + var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile + + var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates + + var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame + + var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time + + var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing + + var deqFastCost = 0.9; // % of frame time to be used when >60fps + + var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch + + var invalidThreshold = 250; // time threshold for disabling b/c of invalidations + + var maxLayerArea = 4000 * 4000; // layers can't be bigger than this + + var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) + // var log = function(){ console.log.apply( console, arguments ); }; + + var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce_1(function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + + self.layersQueue = new heap(qSort); + self.setupDequeueing(); + }; + + var LTCp = LayeredTextureCache.prototype; + var layerIdPool = 0; + var MAX_INT = Math.pow(2, 53) - 1; + + LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; // do the transform on creation to save cycles (it's the same for all eles) + + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; + }; + + LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + + checkLvls(+1); + checkLvls(-1); // remove the invalid layers; they will be replaced as needed later in this function + + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + + return bb; + }; + + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + + if (area > maxLayerArea) { + return null; + } + + var layer = self.makeLayer(bb, lvl); + + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + + return layer; + }; + + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } // log('do layers'); + + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + layer = makeLayer({ + insert: true, + after: layer + }); // if now layer can be built then we can't use layers at this level + + if (!layer) { + return null; + } // log('new layer with id %s', layer.id); + + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + + layer.eles.push(ele); + caches[lvl] = layer; + } // log('--'); + + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + + return layers; + }; // a layer may want to use an ele cache of a higher level to avoid blurriness + // so the layer level might not equal the ele level + + + LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; + }; + + LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + + { + r.setImgSmoothing(context, false); + } + + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + + { + r.setImgSmoothing(context, true); + } + }; + + LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + + if (!layers || layers.length === 0) { + return false; + } + + var numElesInLayers = 0; + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; // if there are any eles needed to be drawn yet, the level is not complete + + if (layer.reqs > 0) { + return false; + } // if the layer is invalid, the level is not complete + + + if (layer.invalid) { + return false; + } + + numElesInLayers += layer.eles.length; + } // we should have exactly the number of eles passed in to be complete + + + if (numElesInLayers !== eles.length) { + return false; + } + + return true; + }; + + LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + + if (!layers) { + return; + } // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; // find the offset + + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + + if (offset < 0) { + // then the layer has nonexistent elements and is invalid + this.invalidateLayer(layer); + continue; + } // the eles in the layer must be in the same continuous order, else the layer is invalid + + + var o = offset; + + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + this.invalidateLayer(layer); + break; + } + } + } + }; + + LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + + if (!layer) { + continue; + } // if update is a request from the ele cache, then it affects only + // the matching level + + + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + + update(layer, ele, req); + } + } + }; + + LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + + return haveLayers; + }; + + LTCp.invalidateElements = function (eles) { + var self = this; + + if (eles.length === 0) { + return; + } + + self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); + }; + + LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + this.lastInvalidationTime = performanceNow(); + + if (layer.invalid) { + return; + } // save cycles + + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + + if (layer.replacement) { + layer.replacement.invalid = true; + } + + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + + if (caches) { + caches[lvl] = null; + } + } + }; + + LTCp.refineElementTextures = function (eles) { + var self = this; // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } // log('queue replacement layer refinement', rLyr.id); + + } + }); + }; + + LTCp.enqueueElementRefinement = function (ele) { + + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); + }; + + LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; // if a layer is going to be replaced, queuing is a waste of time + + if (layer.replacement) { + return; + } + + if (ele) { + if (hasId[ele.id()]) { + return; + } + + elesQ.push(ele); + hasId[ele.id()] = true; + } + + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } + }; + + LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + + var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it + + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } // if this is a replacement layer that has been superceded, then forget it + + + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + + var ele = layer.elesQueue.shift(); + + if (ele) { + // log('dequeue layer %s', layer.id); + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } // if the layer has all its eles done, then remove from the queue + + + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; // log('dequeue of layer %s complete', layer.id); + // when a replacement layer is dequeued, it replaces the old layer in the level + + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + + self.requestRedraw(); + } + } + + return deqd; + }; + + LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + + layersInLevel[index] = layer; // replace level ref + // replace refs in eles + + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + + if (cache) { + cache[layer.level] = layer; + } + } // log('apply replacement layer %s over %s', layer.id, replaced.id); + + + self.requestRedraw(); + }; + + LTCp.requestRedraw = debounce_1(function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, 100); + LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } + }); + + var CRp$a = {}; + var impl; + + function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } + } + + function triangleBackcurve(context, points, controlPoint) { + var firstPt; + + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + + if (i === 0) { + firstPt = pt; + } + + context.lineTo(pt.x, pt.y); + } + + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); + } + + function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + + var triPts = trianglePoints; + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + + if (context.closePath) { + context.closePath(); + } + } + + function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); + } + + CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; + }; + + var CRp$9 = {}; + + CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } + }; + + CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } + }; + + CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } + }; + + CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + + if (eleCache != null) { + var opacity = getOpacity(r, ele); + + if (opacity === 0) { + return; + } + + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + + if (!smooth) { + r.setImgSmoothing(context, true); + } + + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + + var oldGlobalAlpha; + + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } + }; + + var getZeroRotation = function getZeroRotation() { + return 0; + }; + + var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); + }; + + var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); + }; + + var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); + }; + + var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); + }; + + var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); + }; + + CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + + var badLine = ele.element()._private.rscratch.badLine; + + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + + r.drawElementOverlay(context, ele); + } + }; + + CRp$9.drawElements = function (context, eles) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } + }; + + CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + + if (!ele.isNode()) { + continue; + } + + r.drawCachedElement(context, ele, pxRatio, extent); + } + }; + + CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + + if (bb.w === 0 || bb.h === 0) { + continue; + } + + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } + }; + + /* global Path2D */ + var CRp$8 = {}; + + CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + + if (shouldDrawOpacity && !edge.visible()) { + return; + } // if bezier ctrl pts can not be calculated, then die + + + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; // separate arrow opacity would require arrow-opacity property + + var effectiveArrowOpacity = opacity * lineOpacity; + + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeOverlay(context, edge); + }; + + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + + r.drawEdgeUnderlay(context, edge); + }; + + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, edge) { + if (!edge.visible()) { + return; + } + + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + + if (opacity === 0) { + return; + } + + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; + }; + + CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); + CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); + + CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(pts[0], pts[1]); + + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + + break; + + case 'straight': + case 'segments': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + + break; + } + } + + context = canvasCxt; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } // reset any line dashes + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + }; + + CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } + }; + + CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } + }; + + CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + + if (arrowShape === 'none') { + return; + } + + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var edgeOpacity = edge.pstyle('opacity').value; + + if (opacity === undefined) { + opacity = edgeOpacity; + } + + var gco = context.globalCompositeOperation; + + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, x, y, angle); + }; + + CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + + if (context.closePath) { + context.closePath(); + } + } + + context = canvasContext; + + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1); + context.lineJoin = 'miter'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } + }; + + var CRp$7 = {}; + + CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } + }; + + CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; // workaround for broken browsers like ie + + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + + var x = nodeX - nodeTW / 2; // left + + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + + var y = nodeY - nodeTH / 2; // top + + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.clip(); + } + } + + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + + context.globalAlpha = gAlpha; + + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } + }; + + var CRp$6 = {}; + + CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + + if (computedSize < minSize) { + return false; + } + + return true; + }; + + CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + + if (ele.isNode()) { + var label = ele.pstyle('label'); + + if (!label || !label.value) { + return; + } + + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + + var _label = ele.pstyle('label'); + + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + + var applyRotation = !shiftToOriginWithBb; + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + + if (cache.context === context) { + return cache; + } + } + + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; + }; // set up canvas context with font + // returns transformed text string + + + CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); + }; // TODO ensure re-used + + + function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + ctx.fill(); + } + + CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + + return theta; + }; + + CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } // use 'main' as an alias for the main label (i.e. null prefix) + + + if (prefix === 'main') { + prefix = null; + } + + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + + var text = this.getLabelText(ele, prefix); + + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + + textX += marginX; + textY += marginY; + var theta; + + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + + switch (valign) { + case 'top': + break; + + case 'center': + textY += textH / 2; + break; + + case 'bottom': + textY += textH; + break; + } + + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + + switch (halign) { + case 'left': + bgX -= textW; + break; + + case 'center': + bgX -= textW / 2; + break; + } + + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + var styleShape = ele.pstyle('text-background-shape').strValue; + + if (styleShape.indexOf('round') === 0) { + roundRect(context, bgX, bgY, bgW, bgH, 2); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + + context.fillStyle = textFill; + } + + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + + context.setLineDash([]); + break; + + case 'solid': + context.setLineDash([]); + break; + } + } + + context.strokeRect(bgX, bgY, bgW, bgH); + + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + + context.fillText(text, textX, textY); + } + + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } + }; + + /* global Path2D */ + var CRp$5 = {}; + + CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; // + // setup shift + + var bb; + + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } // + // load bg image + + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; // get image, and if not loaded then ask to redraw when later loaded + + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } // + // setup styles + + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + context.lineJoin = 'miter'; // so borders are square with the node shape + + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; // + // setup shape + + + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + + if (usePaths) { + context.translate(pos.x, pos.y); + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth); + var cachedPath = pathCache[key]; + + if (cachedPath != null) { + path = cachedPath; + pathCacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + } + + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); + } + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + + _p.backgrounding = !(totalCompleted === numImages); + + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); // redraw/restore path if steps after pie need it + + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); + } + } + } + }; + + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = 'butt'; + + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + + case 'dashed': + context.setLineDash([4, 2]); + break; + + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + context.globalCompositeOperation = gco; + } // reset in case we changed the border style + + + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + + var ghost = node.pstyle('ghost').value === 'yes'; + + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawUnderlay(); + + if (usePaths) { + context.translate(pos.x, pos.y); + } + + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + + drawText(); + drawOverlay(); // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } + }; + + var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + + if (!node.visible()) { + return; + } + + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + + if (opacity > 0) { + pos = pos || node.position(); + + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); + context.fill(); + } + }; + }; + + CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); + CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece? + + CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; + }; + + CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + + var usePaths = this.usePaths(); + + if (usePaths) { + x = 0; + y = 0; + } + + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + // percent can't push beyond 1 + + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } + }; + + var CRp$4 = {}; + var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined'; + + CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef + }; + + CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + + return cache; + }; + + CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + + var direction = ele.pstyle('background-gradient-direction').value; + + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + + return gradientStyle; + }; + + CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.fillStyle = gradientStyle; + }; + + CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } + }; + + CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } + }; + + CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + + context.strokeStyle = gradientStyle; + }; + + CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; // turn off for now, seems context does its own caching + // var cache = this.paintCache(context); + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } + }; + + CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } + }; // Resize canvas + + + CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + r.textureMult = 1; + + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; + }; + + CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); + }; + + CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + + r.prevPxRatio = pixelRatio; + } + + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + + r.mbFrames++; + + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + + + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + + + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + + if (forcedPan) { + effectivePan = forcedPan; + } // apply pixel ratio + + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + + context.setTransform(1, 0, 0, 1, 0, 0); + + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + + if (textureDraw) { + r.textureDrawLastFrame = true; + + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + + var timeToRender = r.lastRedrawTime; + + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } // motionblur: blit rendered blurry frames + + + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + + var pxr = mbPxRatio; + cxt.drawImage(txt, // img + 0, 0, // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh + 0, 0, // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + + r.prevViewport = vp; + + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + + if (!forcedContext) { + cy.emit('render'); + } + }; + + var CRp$3 = {}; // @O Polygon drawing + + CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + + context.closePath(); + }; + + CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } + + for (var _i = 0; _i < points.length / 4; _i++) { + var sourceUv = void 0, + destUv = void 0; + + if (_i === 0) { + sourceUv = points.length - 2; + } else { + sourceUv = _i * 4 - 2; + } + + destUv = _i * 4 + 2; + var px = x + halfW * points[_i * 4]; + var py = y + halfH * points[_i * 4 + 1]; + var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * points[sourceUv]; + var cp0y = py - offset * points[sourceUv + 1]; + var cp1x = px + offset * points[destUv]; + var cp1y = py + offset * points[destUv + 1]; + + if (_i === 0) { + context.moveTo(cp0x, cp0y); + } else { + context.lineTo(cp0x, cp0y); + } + + context.arcTo(px, py, cp1x, cp1y, cornerRadius); + } + + context.closePath(); + }; // Round rectangle drawing + + + CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); // Arc from middle top to right side + + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); // Arc from right side to bottom + + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); // Arc from bottom to left side + + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); // Arc from left side to topBorder + + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); // Join line + + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + + if (context.beginPath) { + context.beginPath(); + } // Start at top middle + + + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); + }; + + CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = getCutRectangleCornerLength(); + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); + }; + + CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + + if (context.beginPath) { + context.beginPath(); + } + + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); + }; + + var sin0 = Math.sin(0); + var cos0 = Math.cos(0); + var sin = {}; + var cos = {}; + var ellipseStepSize = Math.PI / 40; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); + } + + CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + + context.closePath(); + }; + + /* global atob, ArrayBuffer, Uint8Array, Blob */ + var CRp$2 = {}; + + CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; + }; + + CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); // Rasterize the layers, but only if container has nonzero size + + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + + + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + + return buffCanvas; + }; + + function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + + return new Blob([buff], { + type: mimeType + }); + } + + function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); + } + + function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + + case 'base64': + return b64UriToB64(getB64Uri()); + + case 'base64uri': + default: + return getB64Uri(); + } + } + + CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); + }; + + CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); + }; + + var CRp$1 = {}; + + CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); + + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height); + + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height); + + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); + + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } + }; + + var CR = CanvasRenderer; + var CRp = CanvasRenderer.prototype; + CRp.CANVAS_LAYERS = 3; // + + CRp.SELECT_BOX = 0; + CRp.DRAG = 1; + CRp.NODE = 2; + CRp.BUFFER_COUNT = 3; // + + CRp.TEXTURE_BUFFER = 0; + CRp.MOTIONBLUR_BUFFER_NODE = 1; + CRp.MOTIONBLUR_BUFFER_DRAG = 2; + + function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + + case 'right': + p.x = 0; + break; + } + + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + + case 'bottom': + p.y = 0; + break; + } + } + + return p; + }; + + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); // any change invalidates the layers + + lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches + + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); + } + + CRp.redrawHint = function (group, bool) { + var r = this; + + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } + }; // whether to use Path2D caching for drawing + + + var pathsImpld = typeof Path2D !== 'undefined'; + + CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + + this.pathsEnabled = on ? true : false; + }; + + CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; + }; + + CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } + }; + + CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } + }; + + CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + + canvas.width = width; + canvas.height = height; + } + + return canvas; + }; + + [CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); + }); + + var renderer = [{ + name: 'null', + impl: NullRenderer + }, { + name: 'base', + impl: BR + }, { + name: 'canvas', + impl: CR + }]; + + var incExts = [{ + type: 'layout', + extensions: layout + }, { + type: 'renderer', + extensions: renderer + }]; + + var extensions = {}; // registered modules for extensions, indexed by name + + var modules = {}; + + function setExtension(type, name, registrant) { + var ext = registrant; + + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); // make sure layout has _private for use w/ std apis like .on() + + if (!plainObject(this._private)) { + this._private = {}; + } + + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } // either .start() or .run() is defined, so autogen the other + + + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + + var regStop = registrant.prototype.stop; + + layoutProto.stop = function () { + var opts = this.options; + + if (opts && opts.animate) { + var anis = this.animations; + + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + + return this; + }; + + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + + layoutProto.cy = function () { + return this._private.cy; + }; + + var getCy = function getCy(layout) { + return layout._private.cy; + }; + + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + + var proto = Renderer.prototype; + + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + + if (existsInR) { + return overrideErr(pName); + } + + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); + } + + function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); + } + + function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); + } + + function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); + } + + var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } + }; // allows a core instance to access extensions internally + + + Core.prototype.extension = extension; // included extensions + + incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); + }); + + // (useful for init) + + var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + + this.length = 0; + }; + + var sheetfn = Stylesheet.prototype; + + sheetfn.instanceString = function () { + return 'stylesheet'; + }; // just store the selector to be parsed later + + + sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining + }; // just store the property to be parsed later + + + sheetfn.css = function (name, value) { + var i = this.length - 1; + + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + + if (mapVal == null) { + continue; + } + + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + + if (prop == null) { + continue; + } + + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + + return this; // chaining + }; + + sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet + + sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); + }; // append a dummy stylesheet object on a real style object + + + sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; + }; + + var version = "3.25.0"; + + var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } // create instance + + + if (plainObject(options)) { + return new Core(options); + } // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } + }; // e.g. cytoscape.use( require('cytoscape-foo'), bar ) + + + cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; + }; + + cytoscape.warnings = function (bool) { + return warnings(bool); + }; // replaced by build system + + + cytoscape.version = version; // expose public apis (mostly for extensions) + + cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + + return cytoscape; + +})); + + +/***/ }), + +/***/ 54899: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 30507: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(51568); +/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14413); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35302); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(75627); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(36304); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(54628); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42605); + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError2(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError2(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + return 6; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + this.begin("NSTR2"); + break; + case 22: + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 25: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 26: + this.popState(); + break; + case 27: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 32: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 33: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 34: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 35: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 36: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const mindmapParser = parser; +const sanitizeText = (text) => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.d)(text, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)()); +let nodes = []; +let cnt = 0; +let elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("addNode", level, id, descr, type); + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + const node = { + id: cnt++, + nodeId: sanitizeText(id), + level, + descr: sanitizeText(descr), + type, + children: [], + width: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().mindmap.maxNodeWidth + }; + switch (node.type) { + case nodeType.ROUNDED_RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.RECT: + node.padding = 2 * conf.mindmap.padding; + break; + case nodeType.HEXAGON: + node.padding = 2 * conf.mindmap.padding; + break; + default: + node.padding = conf.mindmap.padding; + } + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + let error = new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + elements[id] = element; +}; +const decorateNode = (decoration) => { + const node = nodes[nodes.length - 1]; + if (decoration && decoration.icon) { + node.icon = sanitizeText(decoration.icon); + } + if (decoration && decoration.class) { + node.class = sanitizeText(decoration.class); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +let parseError; +const setErrorHandler = (handler) => { + parseError = handler; +}; +const getLogger = () => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l; +const getNodeById = (id) => nodes[id]; +const getElementById = (id) => elements[id]; +const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addNode, + clear, + decorateNode, + getElementById, + getLogger, + getMindmap, + getNodeById, + getType, + nodeType, + get parseError() { + return parseError; + }, + sanitizeText, + setElementForId, + setErrorHandler, + type2Str +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(elem, node, fullSection, conf) { + const htmlLabels = conf.htmlLabels; + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const description = node.descr.replace(/(<br\/*>)/g, "\n"); + (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_7__.c)(textElem, description, { + useHtmlLabels: htmlLabels, + width: node.width, + classes: "mindmap-node-label" + }); + if (!htmlLabels) { + textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); + } + const bbox = textElem.node().getBBox(); + const fontSize = conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + if (!htmlLabels) { + const dx = node.width / 2; + const dy = node.padding / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } else { + const dx = (node.width - bbox.width) / 2; + const dy = (node.height - bbox.height) / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } + } + switch (node.type) { + case nodeType.DEFAULT: + defaultBkg(bkgElem, node, section); + break; + case nodeType.ROUNDED_RECT: + roundedRectBkg(bkgElem, node); + break; + case nodeType.RECT: + rectBkg(bkgElem, node); + break; + case nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(bkgElem, node); + break; + case nodeType.CLOUD: + cloudBkg(bkgElem, node); + break; + case nodeType.BANG: + bangBkg(bkgElem, node); + break; + case nodeType.HEXAGON: + hexagonBkg(bkgElem, node); + break; + } + setElementForId(node.id, nodeElem); + return node.height; +}; +const drawEdge = function drawEdge2(edgesElem, mindmap, parent, depth, fullSection) { + const section = fullSection % (MAX_SECTIONS - 1); + const sx = parent.x + parent.width / 2; + const sy = parent.y + parent.height / 2; + const ex = mindmap.x + mindmap.width / 2; + const ey = mindmap.y + mindmap.height / 2; + const mx = ex > sx ? sx + Math.abs(sx - ex) / 2 : sx - Math.abs(sx - ex) / 2; + const my = ey > sy ? sy + Math.abs(sy - ey) / 2 : sy - Math.abs(sy - ey) / 2; + const qx = ex > sx ? Math.abs(sx - mx) / 2 + sx : -Math.abs(sx - mx) / 2 + sx; + const qy = ey > sy ? Math.abs(sy - my) / 2 + sy : -Math.abs(sy - my) / 2 + sy; + edgesElem.append("path").attr( + "d", + parent.direction === "TB" || parent.direction === "BT" ? `M${sx},${sy} Q${sx},${qy} ${mx},${my} T${ex},${ey}` : `M${sx},${sy} Q${qx},${sy} ${mx},${my} T${ex},${ey}` + ).attr("class", "edge section-edge-" + section + " edge-depth-" + depth); +}; +const positionNode = function(node) { + const nodeElem = getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +const svgDraw = { drawNode, positionNode, drawEdge }; +cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); +function drawNodes(svg, mindmap, section, conf) { + svgDraw.drawNode(svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id, + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__({ + container: document.getElementById("cy"), + // container to render in + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + quality: "proof", + // headless: true, + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + svgDraw.positionNode(data); + const el = getElementById(data.nodeId); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, version, diagObj) => { + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + conf.htmlLabels = false; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering mindmap diagram\n" + text, diagObj.parser); + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const mm = diagObj.db.getMindmap(); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(cy); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.p)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); +}; +const mindmapRenderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`; +const mindmapStyles = getStyles; +const diagram = { + db: mindmapDb, + renderer: mindmapRenderer, + parser: mindmapParser, + styles: mindmapStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/509.81370186.js b/assets/js/509.81370186.js new file mode 100644 index 0000000000..db8085d3b2 --- /dev/null +++ b/assets/js/509.81370186.js @@ -0,0 +1,1259 @@ +"use strict"; +exports.id = 509; +exports.ids = [509]; +exports.modules = { + +/***/ 39509: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [1, 10], $V6 = [1, 5, 14, 16, 18, 20, 21, 26, 28, 29, 30, 31, 32, 38, 39, 40, 41, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], $V7 = [1, 5, 7, 14, 16, 18, 20, 21, 26, 28, 29, 30, 31, 32, 38, 39, 40, 41, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60], $V8 = [38, 39, 40], $V9 = [2, 8], $Va = [1, 19], $Vb = [1, 23], $Vc = [1, 24], $Vd = [1, 25], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 37], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 52], $VA = [1, 67], $VB = [1, 68], $VC = [5, 23, 27, 38, 39, 40, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61], $VD = [5, 7, 38, 39, 40, 41]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "SPACE": 5, "directive": 6, "QUADRANT": 7, "document": 8, "line": 9, "statement": 10, "axisDetails": 11, "quadrantDetails": 12, "points": 13, "title": 14, "title_value": 15, "acc_title": 16, "acc_title_value": 17, "acc_descr": 18, "acc_descr_value": 19, "acc_descr_multiline_value": 20, "section": 21, "text": 22, "point_start": 23, "point_x": 24, "point_y": 25, "X-AXIS": 26, "AXIS-TEXT-DELIMITER": 27, "Y-AXIS": 28, "QUADRANT_1": 29, "QUADRANT_2": 30, "QUADRANT_3": 31, "QUADRANT_4": 32, "openDirective": 33, "typeDirective": 34, "closeDirective": 35, ":": 36, "argDirective": 37, "NEWLINE": 38, "SEMI": 39, "EOF": 40, "open_directive": 41, "type_directive": 42, "arg_directive": 43, "close_directive": 44, "alphaNumToken": 45, "textNoTagsToken": 46, "STR": 47, "MD_STR": 48, "alphaNum": 49, "PUNCTUATION": 50, "AMP": 51, "NUM": 52, "ALPHA": 53, "COMMA": 54, "PLUS": 55, "EQUALS": 56, "MULT": 57, "DOT": 58, "BRKT": 59, "UNDERSCORE": 60, "MINUS": 61, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "SPACE", 7: "QUADRANT", 14: "title", 15: "title_value", 16: "acc_title", 17: "acc_title_value", 18: "acc_descr", 19: "acc_descr_value", 20: "acc_descr_multiline_value", 21: "section", 23: "point_start", 24: "point_x", 25: "point_y", 26: "X-AXIS", 27: "AXIS-TEXT-DELIMITER", 28: "Y-AXIS", 29: "QUADRANT_1", 30: "QUADRANT_2", 31: "QUADRANT_3", 32: "QUADRANT_4", 36: ":", 38: "NEWLINE", 39: "SEMI", 40: "EOF", 41: "open_directive", 42: "type_directive", 43: "arg_directive", 44: "close_directive", 47: "STR", 48: "MD_STR", 50: "PUNCTUATION", 51: "AMP", 52: "NUM", 53: "ALPHA", 54: "COMMA", 55: "PLUS", 56: "EQUALS", 57: "MULT", 58: "DOT", 59: "BRKT", 60: "UNDERSCORE", 61: "MINUS" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [10, 0], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [13, 4], [11, 4], [11, 3], [11, 2], [11, 4], [11, 3], [11, 2], [12, 2], [12, 2], [12, 2], [12, 2], [6, 3], [6, 5], [4, 1], [4, 1], [4, 1], [33, 1], [34, 1], [37, 1], [35, 1], [22, 1], [22, 2], [22, 1], [22, 1], [49, 1], [49, 2], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [45, 1], [46, 1], [46, 1], [46, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 13: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 14: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 15: + case 16: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 17: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.addPoint($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 20: + yy.setXAxisLeftText($$[$0 - 2]); + yy.setXAxisRightText($$[$0]); + break; + case 21: + $$[$0 - 1].text += " ⟶ "; + yy.setXAxisLeftText($$[$0 - 1]); + break; + case 22: + yy.setXAxisLeftText($$[$0]); + break; + case 23: + yy.setYAxisBottomText($$[$0 - 2]); + yy.setYAxisTopText($$[$0]); + break; + case 24: + $$[$0 - 1].text += " ⟶ "; + yy.setYAxisBottomText($$[$0 - 1]); + break; + case 25: + yy.setYAxisBottomText($$[$0]); + break; + case 26: + yy.setQuadrant1Text($$[$0]); + break; + case 27: + yy.setQuadrant2Text($$[$0]); + break; + case 28: + yy.setQuadrant3Text($$[$0]); + break; + case 29: + yy.setQuadrant4Text($$[$0]); + break; + case 35: + yy.parseDirective("%%{", "open_directive"); + break; + case 36: + yy.parseDirective($$[$0], "type_directive"); + break; + case 37: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 38: + yy.parseDirective("}%%", "close_directive", "quadrantChart"); + break; + case 39: + this.$ = { text: $$[$0], type: "text" }; + break; + case 40: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 41: + this.$ = { text: $$[$0], type: "text" }; + break; + case 42: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 43: + this.$ = $$[$0]; + break; + case 44: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 1: [3] }, { 3: 11, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 3: 12, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, { 3: 13, 4: 2, 5: $V0, 6: 4, 7: $V1, 33: 9, 38: $V2, 39: $V3, 40: $V4, 41: $V5 }, o($V6, [2, 5], { 8: 14 }), o($V7, [2, 32]), o($V7, [2, 33]), o($V7, [2, 34]), { 34: 15, 42: [1, 16] }, { 42: [2, 35] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($V8, $V9, { 33: 9, 9: 17, 10: 18, 11: 20, 12: 21, 13: 22, 6: 28, 22: 35, 45: 36, 1: [2, 4], 5: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 20: $Ve, 21: $Vf, 26: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 32: $Vl, 41: $V5, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), { 35: 50, 36: [1, 51], 44: $Vz }, o([36, 44], [2, 36]), o($V6, [2, 6]), { 4: 53, 38: $V2, 39: $V3, 40: $V4 }, o($V8, $V9, { 33: 9, 11: 20, 12: 21, 13: 22, 6: 28, 22: 35, 45: 36, 10: 54, 5: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 20: $Ve, 21: $Vf, 26: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 32: $Vl, 41: $V5, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 15: [1, 55] }, { 17: [1, 56] }, { 19: [1, 57] }, o($V8, [2, 16]), o($V8, [2, 17]), o($V8, [2, 18]), { 22: 58, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 59, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 60, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 61, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 62, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 22: 63, 45: 36, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }, { 5: $VA, 23: [1, 64], 45: 66, 46: 65, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }, o($VC, [2, 39]), o($VC, [2, 41]), o($VC, [2, 42]), o($VC, [2, 45]), o($VC, [2, 46]), o($VC, [2, 47]), o($VC, [2, 48]), o($VC, [2, 49]), o($VC, [2, 50]), o($VC, [2, 51]), o($VC, [2, 52]), o($VC, [2, 53]), o($VC, [2, 54]), o($VC, [2, 55]), o($VD, [2, 30]), { 37: 69, 43: [1, 70] }, o($VD, [2, 38]), o($V6, [2, 7]), o($V8, [2, 9]), o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, [2, 22], { 46: 65, 45: 66, 5: $VA, 27: [1, 71], 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 25], { 46: 65, 45: 66, 5: $VA, 27: [1, 72], 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 26], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 27], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 28], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 29], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), { 24: [1, 73] }, o($VC, [2, 40]), o($VC, [2, 56]), o($VC, [2, 57]), o($VC, [2, 58]), { 35: 74, 44: $Vz }, { 44: [2, 37] }, o($V8, [2, 21], { 45: 36, 22: 75, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), o($V8, [2, 24], { 45: 36, 22: 76, 47: $Vm, 48: $Vn, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy }), { 25: [1, 77] }, o($VD, [2, 31]), o($V8, [2, 20], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 23], { 46: 65, 45: 66, 5: $VA, 50: $Vo, 51: $Vp, 52: $Vq, 53: $Vr, 54: $Vs, 55: $Vt, 56: $Vu, 57: $Vv, 58: $Vw, 59: $Vx, 60: $Vy, 61: $VB }), o($V8, [2, 19])], + defaultActions: { 10: [2, 35], 11: [2, 1], 12: [2, 2], 13: [2, 3], 70: [2, 37] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 41; + case 1: + this.begin("type_directive"); + return 42; + case 2: + this.popState(); + this.begin("arg_directive"); + return 36; + case 3: + this.popState(); + this.popState(); + return 44; + case 4: + return 43; + case 5: + break; + case 6: + break; + case 7: + return 38; + case 8: + break; + case 9: + this.begin("title"); + return 14; + case 10: + this.popState(); + return "title_value"; + case 11: + this.begin("acc_title"); + return 16; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 18; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + return 26; + case 19: + return 28; + case 20: + return 27; + case 21: + return 29; + case 22: + return 30; + case 23: + return 31; + case 24: + return 32; + case 25: + this.begin("md_string"); + break; + case 26: + return "MD_STR"; + case 27: + this.popState(); + break; + case 28: + this.begin("string"); + break; + case 29: + this.popState(); + break; + case 30: + return "STR"; + case 31: + this.begin("point_start"); + return 23; + case 32: + this.begin("point_x"); + return 24; + case 33: + this.popState(); + break; + case 34: + this.popState(); + this.begin("point_y"); + break; + case 35: + this.popState(); + return 25; + case 36: + return 7; + case 37: + return 53; + case 38: + return "COLON"; + case 39: + return 55; + case 40: + return 54; + case 41: + return 56; + case 42: + return 56; + case 43: + return 57; + case 44: + return 59; + case 45: + return 60; + case 46: + return 58; + case 47: + return 51; + case 48: + return 61; + case 49: + return 52; + case 50: + return 5; + case 51: + return 39; + case 52: + return 50; + case 53: + return 40; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i], + conditions: { "point_y": { "rules": [35], "inclusive": false }, "point_x": { "rules": [34], "inclusive": false }, "point_start": { "rules": [32, 33], "inclusive": false }, "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "title": { "rules": [10], "inclusive": false }, "md_string": { "rules": [26, 27], "inclusive": false }, "string": { "rules": [29, 30], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 28, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const defaultThemeVariables = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.G)(); +class QuadrantBuilder { + constructor() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + } + getDefaultData() { + return { + titleText: "", + quadrant1Text: "", + quadrant2Text: "", + quadrant3Text: "", + quadrant4Text: "", + xAxisLeftText: "", + xAxisRightText: "", + yAxisBottomText: "", + yAxisTopText: "", + points: [] + }; + } + getDefaultConfig() { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; + return { + showXAxis: true, + showYAxis: true, + showTitle: true, + chartHeight: ((_a = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _a.chartWidth) || 500, + chartWidth: ((_b = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _b.chartHeight) || 500, + titlePadding: ((_c = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _c.titlePadding) || 10, + titleFontSize: ((_d = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20, + quadrantPadding: ((_e = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5, + xAxisLabelPadding: ((_f = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5, + yAxisLabelPadding: ((_g = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5, + xAxisLabelFontSize: ((_h = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16, + yAxisLabelFontSize: ((_i = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16, + quadrantLabelFontSize: ((_j = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16, + quadrantTextTopPadding: ((_k = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5, + pointTextPadding: ((_l = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5, + pointLabelFontSize: ((_m = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12, + pointRadius: ((_n = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _n.pointRadius) || 5, + xAxisPosition: ((_o = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _o.xAxisPosition) || "top", + yAxisPosition: ((_p = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _p.yAxisPosition) || "left", + quadrantInternalBorderStrokeWidth: ((_q = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1, + quadrantExternalBorderStrokeWidth: ((_r = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.quadrantChart) == null ? void 0 : _r.quadrantExternalBorderStrokeWidth) || 2 + }; + } + getDefaultThemeConfig() { + return { + quadrant1Fill: defaultThemeVariables.quadrant1Fill, + quadrant2Fill: defaultThemeVariables.quadrant2Fill, + quadrant3Fill: defaultThemeVariables.quadrant3Fill, + quadrant4Fill: defaultThemeVariables.quadrant4Fill, + quadrant1TextFill: defaultThemeVariables.quadrant1TextFill, + quadrant2TextFill: defaultThemeVariables.quadrant2TextFill, + quadrant3TextFill: defaultThemeVariables.quadrant3TextFill, + quadrant4TextFill: defaultThemeVariables.quadrant4TextFill, + quadrantPointFill: defaultThemeVariables.quadrantPointFill, + quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill, + quadrantTitleFill: defaultThemeVariables.quadrantTitleFill, + quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill, + quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill + }; + } + clear() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("clear called"); + } + setData(data) { + this.data = { ...this.data, ...data }; + } + addPoints(points) { + this.data.points = [...points, ...this.data.points]; + } + setConfig(config2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setConfig called with: ", config2); + this.config = { ...this.config, ...config2 }; + } + setThemeConfig(themeConfig) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setThemeConfig called with: ", themeConfig); + this.themeConfig = { ...this.themeConfig, ...themeConfig }; + } + calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) { + const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize; + const xAxisSpace = { + top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0, + bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0 + }; + const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize; + const yAxisSpace = { + left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0, + right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0 + }; + const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2; + const titleSpace = { + top: showTitle ? titleSpaceCalculation : 0 + }; + const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left; + const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top; + const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right; + const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top; + const quadrantHalfWidth = quadrantWidth / 2; + const quadrantHalfHeight = quadrantHeight / 2; + const quadrantSpace = { + quadrantLeft, + quadrantTop, + quadrantWidth, + quadrantHalfWidth, + quadrantHeight, + quadrantHalfHeight + }; + return { + xAxisSpace, + yAxisSpace, + titleSpace, + quadrantSpace + }; + } + getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) { + const { quadrantSpace, titleSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const drawAxisLabelInMiddle = this.data.points.length === 0; + const axisLabels = []; + if (this.data.xAxisLeftText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisLeftText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + (drawAxisLabelInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawAxisLabelInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.xAxisRightText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisRightText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + quadrantHalfWidth + (drawAxisLabelInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawAxisLabelInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.yAxisBottomText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisBottomText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHeight - (drawAxisLabelInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawAxisLabelInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + if (this.data.yAxisTopText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisTopText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHalfHeight - (drawAxisLabelInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawAxisLabelInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + return axisLabels; + } + getQuadrants(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace; + const quadrants = [ + { + text: { + text: this.data.quadrant1Text, + fill: this.themeConfig.quadrant1TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant1Fill + }, + { + text: { + text: this.data.quadrant2Text, + fill: this.themeConfig.quadrant2TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant2Fill + }, + { + text: { + text: this.data.quadrant3Text, + fill: this.themeConfig.quadrant3TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant3Fill + }, + { + text: { + text: this.data.quadrant4Text, + fill: this.themeConfig.quadrant4TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant4Fill + } + ]; + for (const quadrant of quadrants) { + quadrant.text.x = quadrant.x + quadrant.width / 2; + if (this.data.points.length === 0) { + quadrant.text.y = quadrant.y + quadrant.height / 2; + quadrant.text.horizontalPos = "middle"; + } else { + quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding; + quadrant.text.horizontalPos = "top"; + } + } + return quadrants; + } + getQuadrantPoints(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace; + const xAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); + const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]); + const points = this.data.points.map((point) => { + const props = { + x: xAxis(point.x), + y: yAxis(point.y), + fill: this.themeConfig.quadrantPointFill, + radius: this.config.pointRadius, + text: { + text: point.text, + fill: this.themeConfig.quadrantPointTextFill, + x: xAxis(point.x), + y: yAxis(point.y) + this.config.pointTextPadding, + verticalPos: "center", + horizontalPos: "top", + fontSize: this.config.pointLabelFontSize, + rotation: 0 + } + }; + return props; + }); + return points; + } + getBorders(spaceData) { + const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2; + const { quadrantSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const borderLines = [ + // top border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + }, + // right border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft + quadrantWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // bottom border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop + quadrantHeight, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + quadrantHeight + }, + // left border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // vertical inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + quadrantHalfWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantHalfWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // horizontal inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + halfExternalBorderWidth, + y1: quadrantTop + quadrantHalfHeight, + x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth, + y2: quadrantTop + quadrantHalfHeight + } + ]; + return borderLines; + } + getTitle(showTitle) { + if (showTitle) { + return { + text: this.data.titleText, + fill: this.themeConfig.quadrantTitleFill, + fontSize: this.config.titleFontSize, + horizontalPos: "top", + verticalPos: "center", + rotation: 0, + y: this.config.titlePadding, + x: this.config.chartWidth / 2 + }; + } + return; + } + build() { + const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText); + const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText); + const showTitle = this.config.showTitle && !!this.data.titleText; + const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition; + const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle); + return { + points: this.getQuadrantPoints(calculatedSpace), + quadrants: this.getQuadrants(calculatedSpace), + axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace), + borderLines: this.getBorders(calculatedSpace), + title: this.getTitle(showTitle) + }; + } +} +const config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); +function textSanitizer(text) { + return (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.trim(), config); +} +const quadrantBuilder = new QuadrantBuilder(); +function setQuadrant1Text(textObj) { + quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) }); +} +function setQuadrant2Text(textObj) { + quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) }); +} +function setQuadrant3Text(textObj) { + quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) }); +} +function setQuadrant4Text(textObj) { + quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) }); +} +function setXAxisLeftText(textObj) { + quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) }); +} +function setXAxisRightText(textObj) { + quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) }); +} +function setYAxisTopText(textObj) { + quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) }); +} +function setYAxisBottomText(textObj) { + quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) }); +} +function addPoint(textObj, x, y) { + quadrantBuilder.addPoints([{ x, y, text: textSanitizer(textObj.text) }]); +} +function setWidth(width) { + quadrantBuilder.setConfig({ chartWidth: width }); +} +function setHeight(height) { + quadrantBuilder.setConfig({ chartHeight: height }); +} +function getQuadrantData() { + const config2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const { themeVariables, quadrantChart: quadrantChartConfig } = config2; + if (quadrantChartConfig) { + quadrantBuilder.setConfig(quadrantChartConfig); + } + quadrantBuilder.setThemeConfig({ + quadrant1Fill: themeVariables.quadrant1Fill, + quadrant2Fill: themeVariables.quadrant2Fill, + quadrant3Fill: themeVariables.quadrant3Fill, + quadrant4Fill: themeVariables.quadrant4Fill, + quadrant1TextFill: themeVariables.quadrant1TextFill, + quadrant2TextFill: themeVariables.quadrant2TextFill, + quadrant3TextFill: themeVariables.quadrant3TextFill, + quadrant4TextFill: themeVariables.quadrant4TextFill, + quadrantPointFill: themeVariables.quadrantPointFill, + quadrantPointTextFill: themeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill, + quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill, + quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill, + quadrantTitleFill: themeVariables.quadrantTitleFill + }); + quadrantBuilder.setData({ titleText: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t)() }); + return quadrantBuilder.build(); +} +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const clear = function() { + quadrantBuilder.clear(); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const db = { + setWidth, + setHeight, + setQuadrant1Text, + setQuadrant2Text, + setQuadrant3Text, + setQuadrant4Text, + setXAxisLeftText, + setXAxisRightText, + setYAxisTopText, + setYAxisBottomText, + addPoint, + getQuadrantData, + parseDirective, + clear, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b +}; +const draw = (txt, id, _version, diagObj) => { + var _a, _b, _c; + function getDominantBaseLine(horizontalPos) { + return horizontalPos === "top" ? "hanging" : "middle"; + } + function getTextAnchor(verticalPos) { + return verticalPos === "left" ? "start" : "middle"; + } + function getTransformation(data) { + return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; + } + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Rendering quadrant chart\n" + txt); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const group = svg.append("g").attr("class", "main"); + const width = ((_a = conf.quadrantChart) == null ? void 0 : _a.chartWidth) || 500; + const height = ((_b = conf.quadrantChart) == null ? void 0 : _b.chartHeight) || 500; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, width, ((_c = conf.quadrantChart) == null ? void 0 : _c.useMaxWidth) || true); + svg.attr("viewBox", "0 0 " + width + " " + height); + diagObj.db.setHeight(height); + diagObj.db.setWidth(width); + const quadrantData = diagObj.db.getQuadrantData(); + const quadrantsGroup = group.append("g").attr("class", "quadrants"); + const borderGroup = group.append("g").attr("class", "border"); + const dataPointGroup = group.append("g").attr("class", "data-points"); + const labelGroup = group.append("g").attr("class", "labels"); + const titleGroup = group.append("g").attr("class", "title"); + if (quadrantData.title) { + titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text); + } + if (quadrantData.borderLines) { + borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data) => data.x1).attr("y1", (data) => data.y1).attr("x2", (data) => data.x2).attr("y2", (data) => data.y2).style("stroke", (data) => data.strokeFill).style("stroke-width", (data) => data.strokeWidth); + } + const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); + quadrants.append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill); + quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)).text((data) => data.text.text); + const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label"); + labels.append("text").attr("x", 0).attr("y", 0).text((data) => data.text).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.horizontalPos)).attr("text-anchor", (data) => getTextAnchor(data.verticalPos)).attr("transform", (data) => getTransformation(data)); + const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); + dataPoints.append("circle").attr("cx", (data) => data.x).attr("cy", (data) => data.y).attr("r", (data) => data.radius).attr("fill", (data) => data.fill); + dataPoints.append("text").attr("x", 0).attr("y", 0).text((data) => data.text.text).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles: () => "" +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/50a3e386.77f8ef7c.js b/assets/js/50a3e386.77f8ef7c.js new file mode 100644 index 0000000000..6ea7b2fa49 --- /dev/null +++ b/assets/js/50a3e386.77f8ef7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24734],{1125:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:5,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-5-5",title:"toc-5-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-5-5.mdx",sourceDirName:"toc",slug:"/toc/toc-5-5",permalink:"/tests/docs/toc/toc-5-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_min_heading_level:5,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-4-5",permalink:"/tests/docs/toc/toc-4-5"},next:{title:"toc-_-5",permalink:"/tests/docs/toc/toc-_-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/511.ce843d0f.js b/assets/js/511.ce843d0f.js new file mode 100644 index 0000000000..22ba7075f8 --- /dev/null +++ b/assets/js/511.ce843d0f.js @@ -0,0 +1,2110 @@ +exports.id = 511; +exports.ids = [511]; +exports.modules = { + +/***/ 79580: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); + +/***/ }), + +/***/ 69746: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}})); + +/***/ }), + +/***/ 57635: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); + +/***/ }), + +/***/ 35511: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7608); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57635); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69746); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(79580); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(63294); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(42605); + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [7, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 33, 34, 36, 43, 48], $V3 = [1, 32], $V4 = [1, 33], $V5 = [1, 34], $V6 = [1, 35], $V7 = [1, 36], $V8 = [1, 37], $V9 = [1, 38], $Va = [1, 15], $Vb = [1, 16], $Vc = [1, 17], $Vd = [1, 18], $Ve = [1, 19], $Vf = [1, 20], $Vg = [1, 21], $Vh = [1, 22], $Vi = [1, 24], $Vj = [1, 25], $Vk = [1, 26], $Vl = [1, 27], $Vm = [1, 28], $Vn = [1, 30], $Vo = [1, 39], $Vp = [1, 42], $Vq = [5, 7, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 33, 34, 36, 43, 48]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "directive": 4, "gantt": 5, "document": 6, "EOF": 7, "line": 8, "SPACE": 9, "statement": 10, "NL": 11, "weekday": 12, "weekday_monday": 13, "weekday_tuesday": 14, "weekday_wednesday": 15, "weekday_thursday": 16, "weekday_friday": 17, "weekday_saturday": 18, "weekday_sunday": 19, "dateFormat": 20, "inclusiveEndDates": 21, "topAxis": 22, "axisFormat": 23, "tickInterval": 24, "excludes": 25, "includes": 26, "todayMarker": 27, "title": 28, "acc_title": 29, "acc_title_value": 30, "acc_descr": 31, "acc_descr_value": 32, "acc_descr_multiline_value": 33, "section": 34, "clickStatement": 35, "taskTxt": 36, "taskData": 37, "openDirective": 38, "typeDirective": 39, "closeDirective": 40, ":": 41, "argDirective": 42, "click": 43, "callbackname": 44, "callbackargs": 45, "href": 46, "clickStatementDebug": 47, "open_directive": 48, "type_directive": 49, "arg_directive": 50, "close_directive": 51, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "gantt", 7: "EOF", 9: "SPACE", 11: "NL", 13: "weekday_monday", 14: "weekday_tuesday", 15: "weekday_wednesday", 16: "weekday_thursday", 17: "weekday_friday", 18: "weekday_saturday", 19: "weekday_sunday", 20: "dateFormat", 21: "inclusiveEndDates", 22: "topAxis", 23: "axisFormat", 24: "tickInterval", 25: "excludes", 26: "includes", 27: "todayMarker", 28: "title", 29: "acc_title", 30: "acc_title_value", 31: "acc_descr", 32: "acc_descr_value", 33: "acc_descr_multiline_value", 34: "section", 36: "taskTxt", 37: "taskData", 41: ":", 43: "click", 44: "callbackname", 45: "callbackargs", 46: "href", 48: "open_directive", 49: "type_directive", 50: "arg_directive", 51: "close_directive" }, + productions_: [0, [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [8, 1], [8, 1], [8, 1], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 1], [4, 4], [4, 6], [35, 2], [35, 3], [35, 3], [35, 4], [35, 3], [35, 4], [35, 2], [47, 2], [47, 3], [47, 3], [47, 4], [47, 3], [47, 4], [47, 2], [38, 1], [39, 1], [42, 1], [40, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + return $$[$0 - 1]; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 9: + yy.setWeekday("monday"); + break; + case 10: + yy.setWeekday("tuesday"); + break; + case 11: + yy.setWeekday("wednesday"); + break; + case 12: + yy.setWeekday("thursday"); + break; + case 13: + yy.setWeekday("friday"); + break; + case 14: + yy.setWeekday("saturday"); + break; + case 15: + yy.setWeekday("sunday"); + break; + case 16: + yy.setDateFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 17: + yy.enableInclusiveEndDates(); + this.$ = $$[$0].substr(18); + break; + case 18: + yy.TopAxis(); + this.$ = $$[$0].substr(8); + break; + case 19: + yy.setAxisFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 20: + yy.setTickInterval($$[$0].substr(13)); + this.$ = $$[$0].substr(13); + break; + case 21: + yy.setExcludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 22: + yy.setIncludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 23: + yy.setTodayMarker($$[$0].substr(12)); + this.$ = $$[$0].substr(12); + break; + case 25: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 26: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 27: + case 28: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 29: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 31: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 35: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0], null); + break; + case 36: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 37: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 38: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setLink($$[$0 - 3], $$[$0]); + break; + case 39: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0], null); + yy.setLink($$[$0 - 2], $$[$0 - 1]); + break; + case 40: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); + yy.setLink($$[$0 - 3], $$[$0 - 2]); + break; + case 41: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 42: + case 48: + this.$ = $$[$0 - 1] + " " + $$[$0]; + break; + case 43: + case 44: + case 46: + this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 45: + case 47: + this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 49: + yy.parseDirective("%%{", "open_directive"); + break; + case 50: + yy.parseDirective($$[$0], "type_directive"); + break; + case 51: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 52: + yy.parseDirective("}%%", "close_directive", "gantt"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 38: 4, 48: $V1 }, { 1: [3] }, { 3: 6, 4: 2, 5: $V0, 38: 4, 48: $V1 }, o($V2, [2, 3], { 6: 7 }), { 39: 8, 49: [1, 9] }, { 49: [2, 49] }, { 1: [2, 1] }, { 4: 31, 7: [1, 10], 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 23, 13: $V3, 14: $V4, 15: $V5, 16: $V6, 17: $V7, 18: $V8, 19: $V9, 20: $Va, 21: $Vb, 22: $Vc, 23: $Vd, 24: $Ve, 25: $Vf, 26: $Vg, 27: $Vh, 28: $Vi, 29: $Vj, 31: $Vk, 33: $Vl, 34: $Vm, 35: 29, 36: $Vn, 38: 4, 43: $Vo, 48: $V1 }, { 40: 40, 41: [1, 41], 51: $Vp }, o([41, 51], [2, 50]), o($V2, [2, 8], { 1: [2, 2] }), o($V2, [2, 4]), { 4: 31, 10: 43, 12: 23, 13: $V3, 14: $V4, 15: $V5, 16: $V6, 17: $V7, 18: $V8, 19: $V9, 20: $Va, 21: $Vb, 22: $Vc, 23: $Vd, 24: $Ve, 25: $Vf, 26: $Vg, 27: $Vh, 28: $Vi, 29: $Vj, 31: $Vk, 33: $Vl, 34: $Vm, 35: 29, 36: $Vn, 38: 4, 43: $Vo, 48: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), o($V2, [2, 21]), o($V2, [2, 22]), o($V2, [2, 23]), o($V2, [2, 24]), o($V2, [2, 25]), { 30: [1, 44] }, { 32: [1, 45] }, o($V2, [2, 28]), o($V2, [2, 29]), o($V2, [2, 30]), { 37: [1, 46] }, o($V2, [2, 32]), o($V2, [2, 9]), o($V2, [2, 10]), o($V2, [2, 11]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 14]), o($V2, [2, 15]), { 44: [1, 47], 46: [1, 48] }, { 11: [1, 49] }, { 42: 50, 50: [1, 51] }, { 11: [2, 52] }, o($V2, [2, 5]), o($V2, [2, 26]), o($V2, [2, 27]), o($V2, [2, 31]), o($V2, [2, 35], { 45: [1, 52], 46: [1, 53] }), o($V2, [2, 41], { 44: [1, 54] }), o($Vq, [2, 33]), { 40: 55, 51: $Vp }, { 51: [2, 51] }, o($V2, [2, 36], { 46: [1, 56] }), o($V2, [2, 37]), o($V2, [2, 39], { 45: [1, 57] }), { 11: [1, 58] }, o($V2, [2, 38]), o($V2, [2, 40]), o($Vq, [2, 34])], + defaultActions: { 5: [2, 49], 6: [2, 1], 42: [2, 52], 51: [2, 51] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 48; + case 1: + this.begin("type_directive"); + return 49; + case 2: + this.popState(); + this.begin("arg_directive"); + return 41; + case 3: + this.popState(); + this.popState(); + return 51; + case 4: + return 50; + case 5: + this.begin("acc_title"); + return 29; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 31; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + break; + case 13: + break; + case 14: + break; + case 15: + return 11; + case 16: + break; + case 17: + break; + case 18: + break; + case 19: + this.begin("href"); + break; + case 20: + this.popState(); + break; + case 21: + return 46; + case 22: + this.begin("callbackname"); + break; + case 23: + this.popState(); + break; + case 24: + this.popState(); + this.begin("callbackargs"); + break; + case 25: + return 44; + case 26: + this.popState(); + break; + case 27: + return 45; + case 28: + this.begin("click"); + break; + case 29: + this.popState(); + break; + case 30: + return 43; + case 31: + return 5; + case 32: + return 20; + case 33: + return 21; + case 34: + return 22; + case 35: + return 23; + case 36: + return 24; + case 37: + return 26; + case 38: + return 25; + case 39: + return 27; + case 40: + return 13; + case 41: + return 14; + case 42: + return 15; + case 43: + return 16; + case 44: + return 17; + case 45: + return 18; + case 46: + return 19; + case 47: + return "date"; + case 48: + return 28; + case 49: + return "accDescription"; + case 50: + return 34; + case 51: + return 36; + case 52: + return 37; + case 53: + return 41; + case 54: + return 7; + case 55: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [26, 27], "inclusive": false }, "callbackname": { "rules": [23, 24, 25], "inclusive": false }, "href": { "rules": [20, 21], "inclusive": false }, "click": { "rules": [29, 30], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 22, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const ganttParser = parser; +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__); +let dateFormat = ""; +let axisFormat = ""; +let tickInterval = void 0; +let todayMarker = ""; +let includes = []; +let excludes = []; +let links = {}; +let sections = []; +let tasks = []; +let currentSection = ""; +let displayMode = ""; +const tags = ["active", "done", "crit", "milestone"]; +let funs = []; +let inclusiveEndDates = false; +let topAxis = false; +let weekday = "sunday"; +let lastOrder = 0; +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.m.parseDirective(this, statement, context, type); +}; +const clear = function() { + sections = []; + tasks = []; + currentSection = ""; + funs = []; + taskCnt = 0; + lastTask = void 0; + lastTaskID = void 0; + rawTasks = []; + dateFormat = ""; + axisFormat = ""; + displayMode = ""; + tickInterval = void 0; + todayMarker = ""; + includes = []; + excludes = []; + inclusiveEndDates = false; + topAxis = false; + lastOrder = 0; + links = {}; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.v)(); + weekday = "sunday"; +}; +const setAxisFormat = function(txt) { + axisFormat = txt; +}; +const getAxisFormat = function() { + return axisFormat; +}; +const setTickInterval = function(txt) { + tickInterval = txt; +}; +const getTickInterval = function() { + return tickInterval; +}; +const setTodayMarker = function(txt) { + todayMarker = txt; +}; +const getTodayMarker = function() { + return todayMarker; +}; +const setDateFormat = function(txt) { + dateFormat = txt; +}; +const enableInclusiveEndDates = function() { + inclusiveEndDates = true; +}; +const endDatesAreInclusive = function() { + return inclusiveEndDates; +}; +const enableTopAxis = function() { + topAxis = true; +}; +const topAxisEnabled = function() { + return topAxis; +}; +const setDisplayMode = function(txt) { + displayMode = txt; +}; +const getDisplayMode = function() { + return displayMode; +}; +const getDateFormat = function() { + return dateFormat; +}; +const setIncludes = function(txt) { + includes = txt.toLowerCase().split(/[\s,]+/); +}; +const getIncludes = function() { + return includes; +}; +const setExcludes = function(txt) { + excludes = txt.toLowerCase().split(/[\s,]+/); +}; +const getExcludes = function() { + return excludes; +}; +const getLinks = function() { + return links; +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 10; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks = rawTasks; + return tasks; +}; +const isInvalidDate = function(date, dateFormat2, excludes2, includes2) { + if (includes2.includes(date.format(dateFormat2.trim()))) { + return false; + } + if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) { + return true; + } + if (excludes2.includes(date.format("dddd").toLowerCase())) { + return true; + } + return excludes2.includes(date.format(dateFormat2.trim())); +}; +const setWeekday = function(txt) { + weekday = txt; +}; +const getWeekday = function() { + return weekday; +}; +const checkTaskDates = function(task, dateFormat2, excludes2, includes2) { + if (!excludes2.length || task.manualEndTime) { + return; + } + let startTime; + if (task.startTime instanceof Date) { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime); + } else { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true); + } + startTime = startTime.add(1, "d"); + let originalEndTime; + if (task.endTime instanceof Date) { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime); + } else { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true); + } + const [fixedEndTime, renderEndTime] = fixTaskDates( + startTime, + originalEndTime, + dateFormat2, + excludes2, + includes2 + ); + task.endTime = fixedEndTime.toDate(); + task.renderEndTime = renderEndTime; +}; +const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) { + let invalid = false; + let renderEndTime = null; + while (startTime <= endTime) { + if (!invalid) { + renderEndTime = endTime.toDate(); + } + invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2); + if (invalid) { + endTime = endTime.add(1, "d"); + } + startTime = startTime.add(1, "d"); + } + return [endTime, renderEndTime]; +}; +const getStartDate = function(prevTime, dateFormat2, str) { + str = str.trim(); + const re = /^after\s+([\d\w- ]+)/; + const afterStatement = re.exec(str.trim()); + if (afterStatement !== null) { + let latestEndingTask = null; + afterStatement[1].split(" ").forEach(function(id) { + let task = findTaskById(id); + if (task !== void 0) { + if (!latestEndingTask) { + latestEndingTask = task; + } else { + if (task.endTime > latestEndingTask.endTime) { + latestEndingTask = task; + } + } + } + }); + if (!latestEndingTask) { + const dt = /* @__PURE__ */ new Date(); + dt.setHours(0, 0, 0, 0); + return dt; + } else { + return latestEndingTask.endTime; + } + } + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + return mDate.toDate(); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Invalid date:" + str); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("With date format:" + dateFormat2.trim()); + const d = new Date(str); + if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously + // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304. + // This can cause virtually infinite loops while rendering, so for the + // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as + // invalid. + d.getFullYear() < -1e4 || d.getFullYear() > 1e4) { + throw new Error("Invalid date:" + str); + } + return d; + } +}; +const parseDuration = function(str) { + const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); + if (statement !== null) { + return [Number.parseFloat(statement[1]), statement[2]]; + } + return [NaN, "ms"]; +}; +const getEndDate = function(prevTime, dateFormat2, str, inclusive = false) { + str = str.trim(); + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + if (inclusive) { + mDate = mDate.add(1, "d"); + } + return mDate.toDate(); + } + let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime); + const [durationValue, durationUnit] = parseDuration(str); + if (!Number.isNaN(durationValue)) { + const newEndTime = endTime.add(durationValue, durationUnit); + if (newEndTime.isValid()) { + endTime = newEndTime; + } + } + return endTime.toDate(); +}; +let taskCnt = 0; +const parseId = function(idStr) { + if (idStr === void 0) { + taskCnt = taskCnt + 1; + return "task" + taskCnt; + } + return idStr; +}; +const compileData = function(prevTask, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + let endTimeData = ""; + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = prevTask.endTime; + endTimeData = data[0]; + break; + case 2: + task.id = parseId(); + task.startTime = getStartDate(void 0, dateFormat, data[0]); + endTimeData = data[1]; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = getStartDate(void 0, dateFormat, data[1]); + endTimeData = data[2]; + break; + } + if (endTimeData) { + task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); + task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, "YYYY-MM-DD", true).isValid(); + checkTaskDates(task, dateFormat, excludes, includes); + } + return task; +}; +const parseData = function(prevTaskId, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = { + type: "prevTaskEnd", + id: prevTaskId + }; + task.endTime = { + data: data[0] + }; + break; + case 2: + task.id = parseId(); + task.startTime = { + type: "getStartDate", + startData: data[0] + }; + task.endTime = { + data: data[1] + }; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = { + type: "getStartDate", + startData: data[1] + }; + task.endTime = { + data: data[2] + }; + break; + } + return task; +}; +let lastTask; +let lastTaskID; +let rawTasks = []; +const taskDb = {}; +const addTask = function(descr, data) { + const rawTask = { + section: currentSection, + type: currentSection, + processed: false, + manualEndTime: false, + renderEndTime: null, + raw: { data }, + task: descr, + classes: [] + }; + const taskInfo = parseData(lastTaskID, data); + rawTask.raw.startTime = taskInfo.startTime; + rawTask.raw.endTime = taskInfo.endTime; + rawTask.id = taskInfo.id; + rawTask.prevTaskId = lastTaskID; + rawTask.active = taskInfo.active; + rawTask.done = taskInfo.done; + rawTask.crit = taskInfo.crit; + rawTask.milestone = taskInfo.milestone; + rawTask.order = lastOrder; + lastOrder++; + const pos = rawTasks.push(rawTask); + lastTaskID = rawTask.id; + taskDb[rawTask.id] = pos - 1; +}; +const findTaskById = function(id) { + const pos = taskDb[id]; + return rawTasks[pos]; +}; +const addTaskOrg = function(descr, data) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + const taskInfo = compileData(lastTask, data); + newTask.startTime = taskInfo.startTime; + newTask.endTime = taskInfo.endTime; + newTask.id = taskInfo.id; + newTask.active = taskInfo.active; + newTask.done = taskInfo.done; + newTask.crit = taskInfo.crit; + newTask.milestone = taskInfo.milestone; + lastTask = newTask; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + const task = rawTasks[pos]; + let startTime = ""; + switch (rawTasks[pos].raw.startTime.type) { + case "prevTaskEnd": { + const prevTask = findTaskById(task.prevTaskId); + task.startTime = prevTask.endTime; + break; + } + case "getStartDate": + startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); + if (startTime) { + rawTasks[pos].startTime = startTime; + } + break; + } + if (rawTasks[pos].startTime) { + rawTasks[pos].endTime = getEndDate( + rawTasks[pos].startTime, + dateFormat, + rawTasks[pos].raw.endTime.data, + inclusiveEndDates + ); + if (rawTasks[pos].endTime) { + rawTasks[pos].processed = true; + rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__( + rawTasks[pos].raw.endTime.data, + "YYYY-MM-DD", + true + ).isValid(); + checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); + } + } + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const setLink = function(ids, _linkStr) { + let linkStr = _linkStr; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { + linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(_linkStr); + } + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + window.open(linkStr, "_self"); + }); + links[id] = linkStr; + } + }); + setClass(ids, "clickable"); +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + rawTask.classes.push(className); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.u.runFunc(functionName, ...argList); + }); + } +}; +const pushFun = function(id, callbackFunction) { + funs.push( + function() { + const elem = document.querySelector(`[id="${id}"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + }, + function() { + const elem = document.querySelector(`[id="${id}-text"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + } + ); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const ganttDb = { + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt, + clear, + setDateFormat, + getDateFormat, + enableInclusiveEndDates, + endDatesAreInclusive, + enableTopAxis, + topAxisEnabled, + setAxisFormat, + getAxisFormat, + setTickInterval, + getTickInterval, + setTodayMarker, + getTodayMarker, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.g, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.t, + setDisplayMode, + getDisplayMode, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.b, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.a, + addSection, + getSections, + getTasks, + addTask, + findTaskById, + addTaskOrg, + setIncludes, + getIncludes, + setExcludes, + getExcludes, + setClickEvent, + setLink, + getLinks, + bindFunctions, + parseDuration, + isInvalidDate, + setWeekday, + getWeekday +}; +function getTaskTags(data, task, tags2) { + let matchFound = true; + while (matchFound) { + matchFound = false; + tags2.forEach(function(t) { + const pattern = "^\\s*" + t + "\\s*$"; + const regex = new RegExp(pattern); + if (data[0].match(regex)) { + task[t] = true; + data.shift(1); + matchFound = true; + } + }); + } +} +const setConf = function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Something is calling, setConf, remove the call"); +}; +const mapWeekdayToTimeFunction = { + monday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonday */ .Ox9, + tuesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeTuesday */ .YDX, + wednesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWednesday */ .EFj, + thursday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeThursday */ .Igq, + friday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFriday */ .y2j, + saturday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSaturday */ .LqH, + sunday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSunday */ .Zyz +}; +const getMaxIntersections = (tasks2, orderOffset) => { + let timeline = [...tasks2].map(() => -Infinity); + let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order); + let maxIntersections = 0; + for (const element of sorted) { + for (let j = 0; j < timeline.length; j++) { + if (element.startTime >= timeline[j]) { + timeline[j] = element.endTime; + element.order = j + orderOffset; + if (j > maxIntersections) { + maxIntersections = j; + } + break; + } + } + } + return maxIntersections; +}; +let w; +const draw = function(text, id, version, diagObj) { + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt; + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const elem = doc.getElementById(id); + w = elem.parentElement.offsetWidth; + if (w === void 0) { + w = 1200; + } + if (conf.useWidth !== void 0) { + w = conf.useWidth; + } + const taskArray = diagObj.db.getTasks(); + let categories = []; + for (const element of taskArray) { + categories.push(element.type); + } + categories = checkUnique(categories); + const categoryHeights = {}; + let h = 2 * conf.topPadding; + if (diagObj.db.getDisplayMode() === "compact" || conf.displayMode === "compact") { + const categoryElements = {}; + for (const element of taskArray) { + if (categoryElements[element.section] === void 0) { + categoryElements[element.section] = [element]; + } else { + categoryElements[element.section].push(element); + } + } + let intersections = 0; + for (const category of Object.keys(categoryElements)) { + const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; + intersections += categoryHeight; + h += categoryHeight * (conf.barHeight + conf.barGap); + categoryHeights[category] = categoryHeight; + } + } else { + h += taskArray.length * (conf.barHeight + conf.barGap); + for (const category of categories) { + categoryHeights[category] = taskArray.filter((task) => task.type === category).length; + } + } + elem.setAttribute("viewBox", "0 0 " + w + " " + h); + const svg = root.select(`[id="${id}"]`); + const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleTime */ .Xf)().domain([ + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .min */ .VV$)(taskArray, function(d) { + return d.startTime; + }), + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .max */ .Fp7)(taskArray, function(d) { + return d.endTime; + }) + ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); + function taskCompare(a, b) { + const taskA = a.startTime; + const taskB = b.startTime; + let result = 0; + if (taskA > taskB) { + result = 1; + } else if (taskA < taskB) { + result = -1; + } + return result; + } + taskArray.sort(taskCompare); + makeGant(taskArray, w, h); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, h, w, conf.useMaxWidth); + svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf.titleTopMargin).attr("class", "titleText"); + function makeGant(tasks2, pageWidth, pageHeight) { + const barHeight = conf.barHeight; + const gap = barHeight + conf.barGap; + const topPadding = conf.topPadding; + const leftPadding = conf.leftPadding; + const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleLinear */ .BYU)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__/* .interpolateHcl */ .JHv); + drawExcludeDays( + gap, + topPadding, + leftPadding, + pageWidth, + pageHeight, + tasks2, + diagObj.db.getExcludes(), + diagObj.db.getIncludes() + ); + makeGrid(leftPadding, topPadding, pageWidth, pageHeight); + drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth); + vertLabels(gap, topPadding); + drawToday(leftPadding, topPadding, pageWidth, pageHeight); + } + function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) { + const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; + const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2)); + svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad - 2; + }).attr("width", function() { + return w2 - conf.rightPadding / 2; + }).attr("height", theGap).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d.type === category) { + return "section section" + i % conf.numberSectionStyles; + } + } + return "section section0"; + }); + const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); + const links2 = diagObj.db.getLinks(); + rectangles.append("rect").attr("id", function(d) { + return d.id; + }).attr("rx", 3).attr("ry", 3).attr("x", function(d) { + if (d.milestone) { + return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + return timeScale(d.startTime) + theSidePad; + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad; + }).attr("width", function(d) { + if (d.milestone) { + return theBarHeight; + } + return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); + }).attr("height", theBarHeight).attr("transform-origin", function(d, i) { + i = d.order; + return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; + }).attr("class", function(d) { + const res = "task"; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskClass = ""; + if (d.active) { + if (d.crit) { + taskClass += " activeCrit"; + } else { + taskClass = " active"; + } + } else if (d.done) { + if (d.crit) { + taskClass = " doneCrit"; + } else { + taskClass = " done"; + } + } else { + if (d.crit) { + taskClass += " crit"; + } + } + if (taskClass.length === 0) { + taskClass = " task"; + } + if (d.milestone) { + taskClass = " milestone " + taskClass; + } + taskClass += secNum; + taskClass += " " + classStr; + return res + taskClass; + }); + rectangles.append("text").attr("id", function(d) { + return d.id + "-text"; + }).text(function(d) { + return d.task; + }).attr("font-size", conf.fontSize).attr("x", function(d) { + let startX = timeScale(d.startTime); + let endX = timeScale(d.renderEndTime || d.endTime); + if (d.milestone) { + startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return startX + theSidePad - 5; + } else { + return endX + theSidePad + 5; + } + } else { + return (endX - startX) / 2 + startX + theSidePad; + } + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; + }).attr("text-height", theBarHeight).attr("class", function(d) { + const startX = timeScale(d.startTime); + let endX = timeScale(d.endTime); + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskType = ""; + if (d.active) { + if (d.crit) { + taskType = "activeCritText" + secNum; + } else { + taskType = "activeText" + secNum; + } + } + if (d.done) { + if (d.crit) { + taskType = taskType + " doneCritText" + secNum; + } else { + taskType = taskType + " doneText" + secNum; + } + } else { + if (d.crit) { + taskType = taskType + " critText" + secNum; + } + } + if (d.milestone) { + taskType += " milestoneText"; + } + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; + } else { + return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; + } + } else { + return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; + } + }); + const securityLevel2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + if (securityLevel2 === "sandbox") { + let sandboxElement2; + sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + const doc2 = sandboxElement2.nodes()[0].contentDocument; + rectangles.filter(function(d) { + return links2[d.id] !== void 0; + }).each(function(o) { + var taskRect = doc2.querySelector("#" + o.id); + var taskText = doc2.querySelector("#" + o.id + "-text"); + const oldParent = taskRect.parentNode; + var Link = doc2.createElement("a"); + Link.setAttribute("xlink:href", links2[o.id]); + Link.setAttribute("target", "_top"); + oldParent.appendChild(Link); + Link.appendChild(taskRect); + Link.appendChild(taskText); + }); + } + } + function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) { + const minTime = tasks2.reduce( + (min2, { startTime }) => min2 ? Math.min(min2, startTime) : startTime, + 0 + ); + const maxTime = tasks2.reduce((max2, { endTime }) => max2 ? Math.max(max2, endTime) : endTime, 0); + const dateFormat2 = diagObj.db.getDateFormat(); + if (!minTime || !maxTime) { + return; + } + const excludeRanges = []; + let range = null; + let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime); + while (d.valueOf() <= maxTime) { + if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) { + if (!range) { + range = { + start: d, + end: d + }; + } else { + range.end = d; + } + } else { + if (range) { + excludeRanges.push(range); + range = null; + } + } + d = d.add(1, "d"); + } + const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); + rectangles.append("rect").attr("id", function(d2) { + return "exclude-" + d2.start.format("YYYY-MM-DD"); + }).attr("x", function(d2) { + return timeScale(d2.start) + theSidePad; + }).attr("y", conf.gridLineStartPadding).attr("width", function(d2) { + const renderEnd = d2.end.add(1, "day"); + return timeScale(renderEnd) - timeScale(d2.start); + }).attr("height", h2 - theTopPad - conf.gridLineStartPadding).attr("transform-origin", function(d2, i) { + return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px"; + }).attr("class", "exclude-range"); + } + function makeGrid(theSidePad, theTopPad, w2, h2) { + let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisBottom */ .LLu)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + const reTickInterval = /^([1-9]\d*)(minute|hour|day|week|month)$/; + const resultTickInterval = reTickInterval.exec( + diagObj.db.getTickInterval() || conf.tickInterval + ); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "minute": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); + if (diagObj.db.topAxisEnabled() || conf.topAxis) { + let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisTop */ .F5q)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "minute": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); + } + } + function vertLabels(theGap, theTopPad) { + let prevGap = 0; + const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); + svg.append("g").selectAll("text").data(numOccurances).enter().append(function(d) { + const rows = d[0].split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex); + const dy = -(rows.length - 1) / 2; + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("dy", dy + "em"); + for (const [j, row] of rows.entries()) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttribute("alignment-baseline", "central"); + tspan.setAttribute("x", "10"); + if (j > 0) { + tspan.setAttribute("dy", "1em"); + } + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + return svgLabel; + }).attr("x", 10).attr("y", function(d, i) { + if (i > 0) { + for (let j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1]; + return d[1] * theGap / 2 + prevGap * theGap + theTopPad; + } + } else { + return d[1] * theGap / 2 + theTopPad; + } + }).attr("font-size", conf.sectionFontSize).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d[0] === category) { + return "sectionTitle sectionTitle" + i % conf.numberSectionStyles; + } + } + return "sectionTitle"; + }); + } + function drawToday(theSidePad, theTopPad, w2, h2) { + const todayMarker2 = diagObj.db.getTodayMarker(); + if (todayMarker2 === "off") { + return; + } + const todayG = svg.append("g").attr("class", "today"); + const today = /* @__PURE__ */ new Date(); + const todayLine = todayG.append("line"); + todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf.titleTopMargin).attr("y2", h2 - conf.titleTopMargin).attr("class", "today"); + if (todayMarker2 !== "") { + todayLine.attr("style", todayMarker2.replace(/,/g, ";")); + } + } + function checkUnique(arr) { + const hash = {}; + const result = []; + for (let i = 0, l = arr.length; i < l; ++i) { + if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { + hash[arr[i]] = true; + result.push(arr[i]); + } + } + return result; + } +}; +const ganttRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .mermaid-main-font { + font-family: "trebuchet ms", verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + .exclude-range { + fill: ${options.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${options.sectionBkgColor}; + } + + .section2 { + fill: ${options.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${options.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${options.titleColor}; + } + + .sectionTitle1 { + fill: ${options.titleColor}; + } + + .sectionTitle2 { + fill: ${options.titleColor}; + } + + .sectionTitle3 { + fill: ${options.titleColor}; + } + + .sectionTitle { + text-anchor: start; + // font-size: ${options.ganttFontSize}; + // text-height: 14px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${options.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + text { + font-family: ${options.fontFamily}; + fill: ${options.textColor}; + } + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${options.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + + // .taskText:not([font-size]) { + // font-size: ${options.ganttFontSize}; + // } + + .taskTextOutsideRight { + fill: ${options.taskTextDarkColor}; + text-anchor: start; + // font-size: ${options.ganttFontSize}; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + + } + + .taskTextOutsideLeft { + fill: ${options.taskTextDarkColor}; + text-anchor: end; + // font-size: ${options.ganttFontSize}; + } + + /* Special case clickable */ + .task.clickable { + cursor: pointer; + } + .taskText.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${options.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${options.taskBkgColor}; + stroke: ${options.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${options.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${options.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${options.activeTaskBkgColor}; + stroke: ${options.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${options.doneTaskBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${options.critBorderColor}; + fill: ${options.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor} ; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } +`; +const ganttStyles = getStyles; +const diagram = { + parser: ganttParser, + db: ganttDb, + renderer: ganttRenderer, + styles: ganttStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/5140cc17.7c6d00d5.js b/assets/js/5140cc17.7c6d00d5.js new file mode 100644 index 0000000000..ef82cf114f --- /dev/null +++ b/assets/js/5140cc17.7c6d00d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1540],{78064:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>s,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>m});var n=a(24246),r=a(71670);const o={mdx:{format:"md"},date:"2023-05-15T20:00",authors:["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},s="2.4.1",i={permalink:"/changelog/2.4.1",source:"@site/changelog/source/2.4.1.md",title:"2.4.1",description:"Bug Fix",date:"2023-05-15T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Andrew Lyons",alias:"andrewnicols",url:"https://github.com/andrewnicols",imageURL:"https://github.com/andrewnicols.png",key:"andrewnicols"},{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"MetuMortis",alias:"LiberaTeMetuMortis",url:"https://github.com/LiberaTeMetuMortis",imageURL:"https://github.com/LiberaTeMetuMortis.png",key:"LiberaTeMetuMortis"},{name:"Aleksandr Vladykin",alias:"morsko1",url:"https://github.com/morsko1",imageURL:"https://github.com/morsko1.png",key:"morsko1"},{name:"Sachin Nanayakkara",alias:"SACHINnANYAKKARA",url:"https://github.com/SACHINnANYAKKARA",imageURL:"https://github.com/SACHINnANYAKKARA.png",key:"SACHINnANYAKKARA"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tarun Chauhan",alias:"tarunrajput",url:"https://github.com/tarunrajput",imageURL:"https://github.com/tarunrajput.png",key:"tarunrajput"}],frontMatter:{mdx:{format:"md"},date:"2023-05-15T20:00",authors:["andrewnicols","armano2","LiberaTeMetuMortis","morsko1","SACHINnANYAKKARA","slorber","tarunrajput"]},unlisted:!1,prevItem:{title:"2.4.2",permalink:"/changelog/2.4.2"},nextItem:{title:"2.4.0",permalink:"/changelog/2.4.0"},listPageLink:"/changelog/"},u={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function c(t){return(0,n.jsx)(n.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(c,{...t})}):c()}},71670:(t,e,a)=>{a.d(e,{Z:()=>i,a:()=>s});var n=a(27378);const r={},o=n.createContext(r);function s(t){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:s(t.components),n.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/514f0e36.059522c1.js b/assets/js/514f0e36.059522c1.js new file mode 100644 index 0000000000..f454b43560 --- /dev/null +++ b/assets/js/514f0e36.059522c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[11454],{23850:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>d,toc:()=>i});var n=a(24246),o=a(71670);const r={title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},s="Markdown page",d={type:"mdx",permalink:"/examples/markdownPageExample",source:"@site/src/pages/examples/markdownPageExample.mdx",title:"Markdown Page example",description:"Markdown Page example",frontMatter:{title:"Markdown Page example",description:"Markdown Page example",wrapperClassName:"docusaurus-markdown-example"},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/src/pages/examples/markdownPageExample.mdx",unlisted:!1},p={},i=[];function c(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"markdown-page",children:"Markdown page"}),"\n",(0,n.jsx)(t.p,{children:"This is a page generated from markdown to illustrate the Markdown page feature."}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Use Markdown pages when you just want to focus on content and the default layout is good enough"})})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>d,a:()=>s});var n=a(27378);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/519746e1.ef79ed94.js b/assets/js/519746e1.ef79ed94.js new file mode 100644 index 0000000000..cc8429ae64 --- /dev/null +++ b/assets/js/519746e1.ef79ed94.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98986],{46514:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},46768:(e,s,t)=>{"use strict";t.d(s,{Z:()=>h});var i=t(24246),n=(t(27378),t(66222)),a=t(36712);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c(e,s){if(null==e)return{};var t,i,n=function(e,s){if(null==e)return{};var t,i,n={},a=Object.keys(e);for(i=0;i<a.length;i++)t=a[i],s.indexOf(t)>=0||(n[t]=e[t]);return n}(e,s);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)t=a[i],s.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}function d(e,s){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,a.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=s,{size:t}=e,i=t?` (${function(e){const s=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const t=Math.floor(Math.log(e)/Math.log(1024));return 0===t?`${e} ${s[t]}`:`${(e/1024**t).toFixed(1)} ${s[t]}`}(t)})`:"";return(0,a.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:i})}case"offline":return(0,a.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=s;return 404===e?(0,a.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,a.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function h(e){const{img:s}=e,t=c(e,["img"]);return"string"==typeof s||"default"in s?(0,i.jsx)("img",o({src:"string"==typeof s?s:s.default},t)):(0,i.jsx)(n.Z,l(o({},t),{height:null!==(a=s.src.height)&&void 0!==a?a:100,width:null!==(r=s.src.width)&&void 0!==r?r:100,placeholder:{lqip:s.preSrc},src:s.src.src,srcSet:s.src.images.map((e=>l(o({},e),{src:e.path}))),getMessage:d}));var a,r}},96076:(e,s,t)=>{"use strict";t.d(s,{Gl:()=>d,qg:()=>h,cQ:()=>u});var i=t(24246),n=(t(27378),t(14088)),a=t(41428),r=t(46768);const o={carousel:"carousel_raHC",navButton:"navButton_qSul",dotGroup:"dotGroup_n_95",siteSlide:"siteSlide_AwQk",siteLink:"siteLink_IglZ"};function l({index:e,site:s}){return(0,i.jsxs)(n.Mi,{index:e,className:o.siteSlide,children:[(0,i.jsx)(r.Z,{img:s.image,alt:s.name,loading:0===e?"eager":"lazy"}),(0,i.jsxs)(a.Z,{to:s.url,className:o.siteLink,target:"_blank",children:["\ud83d\udd17 ",s.name]})]})}function c({sites:e,aspectRatio:s}){return(0,i.jsxs)(n.sj,{naturalSlideWidth:1,naturalSlideHeight:1/s,totalSlides:e.length,infinite:!0,className:o.carousel,children:[(0,i.jsx)(n.iR,{children:e.map(((e,s)=>(0,i.jsx)(l,{index:s,site:e},s)))}),(0,i.jsx)(n.P1,{className:o.navButton,style:{right:-20},children:">"}),(0,i.jsx)(n.jp,{className:o.navButton,style:{left:-20},children:"<"}),(0,i.jsx)(n.I5,{className:o.dotGroup})]})}function d(){return(0,i.jsx)(c,{aspectRatio:1072/584,sites:[{name:"Prettier",image:t(49911),url:"https://prettier.io/"},{name:"Babel",image:t(759),url:"https://babeljs.io/"},{name:"React-Native",image:t(45058),url:"https://archive.reactnative.dev/"},{name:"Katex",image:t(91551),url:"https://katex.org/docs/"},{name:"Docusaurus",image:t(92037),url:"https://v1.docusaurus.io/"}]})}function h(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Tauri",image:t(11384),url:"https://tauri.app/"},{name:"Figma",image:t(58155),url:"https://www.figma.com/plugin-docs/"},{name:"Snapchat",image:t(11937),url:"https://docs.snap.com/"},{name:"Iota",image:t(44827),url:"https://wiki.iota.org/"},{name:"SAP Cloud",image:t(42444),url:"https://sap.github.io/cloud-sdk/"},{name:"Supabase",image:t(45785),url:"https://supabase.com/docs"},{name:"StackBlitz",image:t(33339),url:"https://developer.stackblitz.com/"},{name:"Lacework",image:t(11342),url:"https://docs.lacework.com/"},{name:"React-Navigation",image:t(70054),url:"https://reactnavigation.org/"},{name:"Solana",image:t(44102),url:"https://docs.solana.com/"},{name:"Gulp",image:t(9258),url:"https://gulpjs.com/"}]})}function u(){return(0,i.jsx)(c,{aspectRatio:2148/1194,sites:[{name:"Ionic",image:t(31256),url:"https://ionicframework.com/docs/"},{name:"Outerbounds",image:t(10712),url:"https://outerbounds.com/docs/"},{name:"Courier",image:t(97814),url:"https://www.courier.com/docs/"},{name:"Quickwit",image:t(13296),url:"https://quickwit.io/docs/"},{name:"Dyte",image:t(42431),url:"https://docs.dyte.io/"},{name:"React-Native",image:t(48426),url:"https://reactnative.dev/"},{name:"Hasura",image:t(97314),url:"https://hasura.io/docs/"},{name:"Datagit",image:t(29743),url:"https://www.datagit.ir/"}]})}},6698:(e,s,t)=>{"use strict";t.d(s,{Z:()=>c});var i=t(24246),n=(t(27378),t(40624));const a={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),t.push.apply(t,i)}return t}(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))})),e}function c({children:e,minHeight:s,url:t="http://localhost:3000",style:r,bodyStyle:c}){return(0,i.jsxs)("div",{className:a.browserWindow,style:l(o({},r),{minHeight:s}),children:[(0,i.jsxs)("div",{className:a.browserWindowHeader,children:[(0,i.jsxs)("div",{className:a.buttons,children:[(0,i.jsx)("span",{className:a.dot,style:{background:"#f25f58"}}),(0,i.jsx)("span",{className:a.dot,style:{background:"#fbbe3c"}}),(0,i.jsx)("span",{className:a.dot,style:{background:"#58cb42"}})]}),(0,i.jsx)("div",{className:(0,n.Z)(a.browserWindowAddressBar,"text--truncate"),children:t}),(0,i.jsx)("div",{className:a.browserWindowMenuIcon,children:(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{className:a.bar}),(0,i.jsx)("span",{className:a.bar}),(0,i.jsx)("span",{className:a.bar})]})})]}),(0,i.jsx)("div",{className:a.browserWindowBody,style:c,children:e})]})}},80566:(e,s,t)=>{"use strict";t.d(s,{Z:()=>a});var i=t(24246),n=(t(27378),t(41428));function a({size:e=54}){return(0,i.jsx)(n.Z,{to:"https://news.ycombinator.com/item?id=32303052",style:{display:"block",width:e,height:e},children:(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:e,height:e,children:[(0,i.jsx)("path",{fill:"#FF6D00",d:"M42 42H6V6h36v36z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M8 8v32h32V8H8zm30 30H10V10h28v28z"}),(0,i.jsx)("path",{fill:"#FFF",d:"M23 32h2v-6l5.5-10h-2.1L24 24.1 19.6 16h-2.1L23 26z"})]})})}},58562:(e,s,t)=>{"use strict";t.d(s,{Z:()=>l});var i=t(24246),n=(t(27378),t(40624)),a=t(41428);function r(e,s,t){return s in e?Object.defineProperty(e,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[s]=t,e}function o(e){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),i.forEach((function(s){r(e,s,t[s])}))}return e}function l({className:e,style:s}){return(0,i.jsx)(a.Z,{to:"https://www.producthunt.com/posts/docusaurus-2-0?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-docusaurus-2-0",className:(0,n.Z)("producthunt-badge-widget",e),style:o({display:"block",width:250,height:54},s),children:(0,i.jsx)("img",{className:"producthunt-badge-widget",src:"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=353916&theme=light",alt:"Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt",style:{width:250,height:54,maxWidth:"initial"},width:250,height:54})})}},69017:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png"},10253:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png"},13702:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png"},64844:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png"},8007:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg"},18266:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},14600:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/star-history-72ae014f60d05445753e9f690e41d347.png"},64734:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},28048:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},66730:(e,s,t)=>{"use strict";t.d(s,{Z:()=>i});const i=t.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},71943:(e,s,t)=>{"use strict";t.r(s),t.d(s,{assets:()=>g,contentTitle:()=>u,default:()=>w,frontMatter:()=>h,metadata:()=>p,toc:()=>A});var i=t(24246),n=t(71670),a=t(28475),r=t(6698),o=t(58562),l=t(80566),c=t(64257),d=(t(66448),t(97360),t(96076));const h={title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},u=void 0,p={permalink:"/blog/2022/08/01/announcing-docusaurus-2.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",source:"@site/blog/2022/08-01-announcing-docusaurus-2.0/index.mdx",title:"Announcing Docusaurus 2.0",description:"Today we are extremely happy to finally announce Docusaurus 2.0! \ud83e\udd73\ufe0f",date:"2022-08-01T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:12.075,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"},{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",twitter:"yangshunz",email:"tay.yang.shun@gmail.com",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Alexey Pyltsyn",title:"Open-source enthusiast",url:"https://github.com/lex111",email:"lex@php.net",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Paul O\u2019Shannessy",title:"Engineering Manager at Meta",url:"https://twitter.com/zpao",email:"jimarcey@gmail.com",twitter:"zpao",imageURL:"https://github.com/zpao.png",key:"zpao"},{name:"Joel Marcey",title:"Co-creator of Docusaurus 1",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Announcing Docusaurus 2.0",authors:["slorber","Josh-Cena","yangshun","lex111","zpao",{key:"JMarcey",title:"Co-creator of Docusaurus 1"}],tags:["release"],image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"},nextItem:{title:"Docusaurus 2021 Recap",permalink:"/blog/2022/01/24/docusaurus-2021-recap"}},g={image:t(46514).Z,authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},A=[{value:"What is Docusaurus exactly?",id:"what-is-docusaurus-exactly",level:2},{value:"The story behind Docusaurus",id:"the-story-behind-docusaurus",level:2},{value:"Toward Docusaurus 2.0",id:"toward-docusaurus-20",level:2},{value:"Who uses Docusaurus 2.0?",id:"who-uses-docusaurus-20",level:2},{value:"What's New in 2.0?",id:"whats-new-in-20",level:2},{value:"MDX",id:"mdx",level:3},{value:"File system conventions",id:"file-system-conventions",level:3},{value:"Plugins",id:"plugins",level:3},{value:"Theming",id:"theming",level:3},{value:"Other features",id:"other-features",level:3},{value:"Why 2.0 now?",id:"why-20-now",level:2},{value:"What's Next?",id:"whats-next",level:2},{value:"Thank You",id:"thank-you",level:2}];function m(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.a)(),...e.components},{TweetQuote:h}=s;return h||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("TweetQuote",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(s.p,{children:["Today we are extremely happy to finally ",(0,i.jsx)(s.strong,{children:"announce Docusaurus 2.0"}),"! \ud83e\udd73\ufe0f"]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:(0,i.jsx)(s.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,i.jsx)(s.strong,{children:"best documentation websites"})," with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),", letting you ",(0,i.jsx)(s.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,i.jsxs)(s.p,{children:["After ",(0,i.jsxs)(s.strong,{children:["4 years of work, ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.75",children:"75 alphas"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-beta.22",children:"22 betas"})]}),", the next generation of Docusaurus is ",(0,i.jsx)(s.strong,{children:"ready for prime time"}),". From now on, we now plan to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]})," and will release ",(0,i.jsx)(s.strong,{children:"major versions more frequently"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"social-card image",src:t(18266).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Now"})," is the best time to show your love for Docusaurus!"]}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["In a hurry? Check ",(0,i.jsx)(s.a,{href:"#whats-new-in-20",children:"what's new in Docusaurus 2.0"}),"!"]})}),"\n",(0,i.jsx)(s.h2,{id:"what-is-docusaurus-exactly",children:"What is Docusaurus exactly?"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is a ",(0,i.jsx)(s.strong,{children:"static site generator"})," that helps you ship ",(0,i.jsx)(s.strong,{children:"beautiful documentation websites"})," in ",(0,i.jsx)(s.strong,{children:"no time"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Focus on your content: just write ",(0,i.jsx)(s.strong,{children:"Markdown files"}),". Docusaurus will generate an optimized ",(0,i.jsx)(s.strong,{children:"website"})," for you that's easy to ",(0,i.jsx)(s.strong,{children:"host anywhere"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus is ",(0,i.jsx)(s.strong,{children:"full-featured"})," and very ",(0,i.jsx)(s.strong,{children:"flexible"}),": we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to ",(0,i.jsx)(s.strong,{children:"adapt the UI to match your branding"})," so that it integrates nicely with your main website or documentation portal. Its usage of ",(0,i.jsx)(s.strong,{children:"React"})," enables a ",(0,i.jsx)(s.strong,{children:"modern client-side navigation"}),", and the ability to build an ",(0,i.jsx)(s.strong,{children:"interactive documentation"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Introducing Slash",src:t(28048).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The Docusaurus philosophy is akin to the ",(0,i.jsx)(s.strong,{children:"Pareto principle"}),": you can get ",(0,i.jsx)(s.strong,{children:"80% of the results"})," for ",(0,i.jsx)(s.strong,{children:"20% of the effort"}),". This enables you to compete with top-notch documentation sites with ",(0,i.jsx)(s.strong,{children:"minimal effort"}),"."]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/rachelnabors/status/1452697991039660038",handle:"rachelnabors",name:"Rachel Nabors",job:"Former ReactJS & React-Native docs manager",children:(0,i.jsx)(s.p,{children:"Unless you're spinning up a documentation team with engineering resources, you\nprobably want Docusaurus!"})}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus aims to be the ",(0,i.jsx)(s.strong,{children:"best documentation tool"}),", but you can use it for ",(0,i.jsx)(s.strong,{children:"other use-cases"})," as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/johnny_reilly/status/1551861926334025728",handle:"johnny_reilly",name:"Johnny Reilly",job:"Group Principal Engineer at Investec",children:(0,i.jsx)(s.p,{children:"Using Docusaurus for my tech blog has been a fantastic choice. It looks\ntremendous out-of-the-box and the awesome DX means I write way more"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Try Docusaurus now with our ",(0,i.jsx)(s.a,{href:"/docs/playground",children:"online playgrounds"})," and ",(0,i.jsx)(s.a,{href:"https://tutorial.docusaurus.io/",children:"5 minutes tutorial"})," \u23f1\ufe0f"]})}),"\n",(0,i.jsx)(s.h2,{id:"the-story-behind-docusaurus",children:"The story behind Docusaurus"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus was created at ",(0,i.jsx)(s.strong,{children:"Facebook Open Source"})," in ",(0,i.jsx)(s.strong,{children:"2017"})," (now ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),"). We had a lot of internal and open source projects to document. It's ",(0,i.jsx)(s.strong,{children:"complicated enough to write good documentation"}),", let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to ",(0,i.jsx)(s.strong,{children:"focus on the content"}),", and ",(0,i.jsx)(s.strong,{children:"Markdown"})," is great for that."]}),"\n",(0,i.jsxs)(s.p,{children:["At that time, our solution was to ",(0,i.jsx)(s.strong,{children:"copy/paste a Jekyll template"})," over and over again. This naturally became ",(0,i.jsx)(s.strong,{children:"hard to maintain"}),", so we created a tool to ",(0,i.jsx)(s.strong,{children:"solve our own pain"})," once for all."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsxs)(s.strong,{children:[(0,i.jsx)(s.a,{href:"/blog/2017/12/14/introducing-docusaurus",children:"Docusaurus v1 was born"}),"!"]})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Birth of Slash",src:t(64734).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as ",(0,i.jsx)(s.a,{href:"https://prettier.io/",children:"Prettier"}),", ",(0,i.jsx)(s.a,{href:"https://babeljs.io/",children:"Babel"}),", ",(0,i.jsx)(s.a,{href:"https://archive.reactnative.dev/",children:"React-Native"}),", ",(0,i.jsx)(s.a,{href:"https://katex.org/docs/",children:"KaTeX"}),", and of course ",(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:"Docusaurus v1"})," itself."]}),"\n",(0,i.jsx)(d.Gl,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"note",children:(0,i.jsx)(s.p,{children:"Notice that the sample sites above use different colors, but still look quite the same."})}),"\n",(0,i.jsx)(s.h2,{id:"toward-docusaurus-20",children:"Toward Docusaurus 2.0"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"http://v1.docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v1"})})," has been very successful, but we started to ",(0,i.jsx)(s.strong,{children:"question some architectural choices"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React was only used as a ",(0,i.jsx)(s.strong,{children:"server-side templating language"}),", and not used on the client"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming system was pretty limited"}),", and apart from changing a few colors with CSS, it was difficult to do more advanced customizations"]}),"\n",(0,i.jsxs)(s.li,{children:["The ",(0,i.jsx)(s.strong,{children:"docs versioning system was confusing"}),", since it was based on a diff algorithm"]}),"\n",(0,i.jsxs)(s.li,{children:["The codebase was ",(0,i.jsx)(s.strong,{children:"monolithic"}),", neither well-tested nor easy to extend"]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://docusaurus.io/",children:(0,i.jsx)(s.strong,{children:"Docusaurus v2"})})," was ",(0,i.jsx)(s.strong,{children:"rebuilt"})," from the ground up with a new ",(0,i.jsx)(s.strong,{children:"modular architecture"}),":"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["React is now also used on the client, enabling a ",(0,i.jsx)(s.strong,{children:"modern Single Page Application navigation"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Plugins"})," empower the community to contribute useful features as third-party packages"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Theming"})," is more ",(0,i.jsx)(s.strong,{children:"flexible"})," than ever"]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning is now based on snapshot copies, much easier to understand"}),"\n",(0,i.jsxs)(s.li,{children:["We kept ",(0,i.jsx)(s.strong,{children:"everything good from v1"}),": docs, blog, pages, versioning, i18n..."]}),"\n",(0,i.jsxs)(s.li,{children:["We implemented ",(0,i.jsx)(s.strong,{children:"several new features"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["More details in the ",(0,i.jsx)(s.a,{href:"/blog/2018/09/11/Towards-Docusaurus-2",children:"Docusaurus 2 project announcement"})," and ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/migration",children:"v1 to v2 migration guide"})]}),"\n",(0,i.jsx)(s.h2,{id:"who-uses-docusaurus-20",children:"Who uses Docusaurus 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["Despite being in pre-release, it didn't take long for ",(0,i.jsx)(s.strong,{children:"Docusaurus v2 to outgrow Docusaurus v1"})," in terms of NPM downloads:"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://npmtrends.com/docusaurus-vs-@docusaurus/core",children:(0,i.jsx)(s.img,{alt:"NPM downloads: v2 outgrows v1",src:t(69017).Z+"",width:"1200",height:"645"})})}),"\n",(0,i.jsx)(s.p,{children:"Our GitHub star trend is very positive, competing with major frameworks:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.a,{href:"https://star-history.com/#facebook/docusaurus&vercel/next.js&gatsbyjs/gatsby&hexojs/hexo&nuxt/nuxt.js&vuejs/vuepress&11ty/eleventy&gohugoio/hugo&remix-run/remix&mkdocs/mkdocs&Timeline",children:(0,i.jsx)(s.img,{alt:"GitHub stars: Docusaurus is well-positioned",src:t(14600).Z+"",width:"1200",height:"759"})})}),"\n",(0,i.jsx)(s.p,{children:"Today, Docusaurus v2 has already been a great success even before its launch:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["We received so many ",(0,i.jsx)(s.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"lovely testimonials"})]}),"\n",(0,i.jsxs)(s.li,{children:["Companies like ",(0,i.jsx)(s.a,{href:"https://blog.1password.com/docusaurus-documentation-framework/",children:"1Password"})," and ",(0,i.jsx)(s.a,{href:"https://www.courier.com/blog/how-we-built-our-documentation/",children:"Courier"})," are writing down their positive experience"]}),"\n",(0,i.jsxs)(s.li,{children:["Our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})," references hundreds of sites, and this is only the tip of the iceberg."]}),"\n"]}),"\n",(0,i.jsx)(d.qg,{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["Please add your site to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"}),"! It only takes a few seconds: just ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/discussions/7826",children:"post a comment here"}),"."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/maxlynch/status/1549415692704825346",handle:"maxlynch",name:"Max Lynch",job:"Ionic co-founder and CEO",children:(0,i.jsx)(s.p,{children:"We use Docusaurus everywhere now and love it"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/supabase/status/1328960757149671425",handle:"supabase",name:"Supabase",job:"Open Source Firebase alternative",children:(0,i.jsx)(s.p,{children:"We've been using V2 since January and it has been great"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/gabrielcsapo/status/1415061312917233665",handle:"gabrielcsapo",name:"Gabriel Csapo",job:"Staff Software Engineer at LinkedIn",children:(0,i.jsx)(s.p,{children:"Docusaurus is next level easy for literally everything you would need for\ndocumentation in your project."})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/ItWasMattGregg/status/1526682295075102721",handle:"ItWasMattGregg",name:"Matt Gregg",job:"Senior Front End Developer at Shopify",children:(0,i.jsx)(s.p,{children:"Docusaurus is awesome. We use it"})}),"\n",(0,i.jsx)(s.h2,{id:"whats-new-in-20",children:"What's New in 2.0?"}),"\n",(0,i.jsxs)(s.p,{children:["It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the ",(0,i.jsx)(s.strong,{children:"most impactful"}),"."]}),"\n",(0,i.jsx)(s.h3,{id:"mdx",children:"MDX"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://github.com/mdx-js/mdx",children:"MDX"})," allows you to ",(0,i.jsx)(s.strong,{children:"interleave React components"})," in Markdown. This enables you to build top-notch ",(0,i.jsx)(s.strong,{children:"interactive documentation experiences"})," very easily."]}),"\n",(0,i.jsx)(s.p,{children:"A demo is worth a thousand words:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-md",metastring:'title="docs/my-document.mdx"',children:"### Give it a try: press that button!\n\nimport ColorModeToggle from '@theme/ColorModeToggle';\n\n<ColorModeToggle/>\n"})}),"\n",(0,i.jsxs)(r.Z,{children:[(0,i.jsx)("h3",{children:"Give it a try: press that button!"}),(0,i.jsx)(c.Z,{})]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["MDX has its own ",(0,i.jsx)(s.a,{href:"https://mdxjs.com/docs/extending-mdx/",children:"plugin system"}),". You to customize your Markdown authoring experience, and even create your own Markdown syntax."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/HamelHusain/status/1551962275250053123",handle:"HamelHusain",name:"Hamel Husain",job:"Head Of Data Science at Outerbounds",children:(0,i.jsx)(s.p,{children:"Docusaurus + MDX is great: we were able to implement a beautiful two-pane\nlayout and give the author fine-grained control on the placement of code and\ncorresponding prose."})}),"\n",(0,i.jsx)(s.h3,{id:"file-system-conventions",children:"File system conventions"}),"\n",(0,i.jsxs)(s.p,{children:["Our goal is to make Docusaurus very ",(0,i.jsx)(s.strong,{children:"intuitive"})," to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file."]}),"\n",(0,i.jsx)(a.Z,{id:"T3S8GyFIXjo",params:"autoplay=1&autohide=1&showinfo=0&rel=0",title:"Explain Like I'm 5: Docusaurus",poster:"maxresdefault",webp:!0}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/paularmstrong/status/1552005085168865281",handle:"paularmstrong",name:"Paul Armstrong",job:"Principal Engineer at Microsoft",children:(0,i.jsx)(s.p,{children:"Using the auto-generated sidebars makes it so simple to just create a page and\nnot worry about any other configuration."})}),"\n",(0,i.jsx)(s.h3,{id:"plugins",children:"Plugins"}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus now has a ",(0,i.jsx)(s.strong,{children:"modular architecture"})," with a plugin system \u2014 our ",(0,i.jsx)(s.strong,{children:"core features"})," like docs, blog, pages, and search are all powered by individual plugins."]}),"\n",(0,i.jsxs)(s.p,{children:["More importantly, it enables our community to ",(0,i.jsx)(s.strong,{children:"enhance Docusaurus"})," with additional features."]}),"\n",(0,i.jsx)(s.p,{children:"Let's highlight some examples:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/rohit-gohri/redocusaurus",children:"redocusaurus"}),": seamless integration with ",(0,i.jsx)(s.a,{href:"https://www.openapis.org/",children:"OpenAPI"})," and ",(0,i.jsx)(s.a,{href:"https://github.com/Redocly/redoc",children:"Redoc"})]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"redocusaurus plugin example",src:t(10253).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://www.npmjs.com/package/docusaurus-preset-shiki-twoslash",children:"docusaurus-preset-shiki-twoslash"}),": use ",(0,i.jsx)(s.a,{href:"https://github.com/shikijs/shiki",children:"Shiki"})," code block syntax highlighting with ",(0,i.jsx)(s.a,{href:"https://shikijs.github.io/twoslash/",children:"TwoSlash"})," TypeScript compiler hints"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"shiki-twoslash plugin example",src:t(64844).Z+"",width:"1200",height:"667"})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/orta",handle:"orta",name:"Orta Therox",job:"Former TypeScript core team at Microsoft",children:(0,i.jsx)(s.p,{children:"The plugin API was a breeze to use, and powerful enough that I could port the\ncode sample renderer from the TypeScript website site in a couple of hours."})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/easyops-cn/docusaurus-search-local",children:"docusaurus-search-local"}),": one of the various local search alternatives to the built-in Algolia plugin"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"local search plugin example",src:t(13702).Z+"",width:"1200",height:"627"})}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["We have a curated list of outstanding plugins in our ",(0,i.jsx)(s.a,{href:"/community/resources",children:"community resources"})," page."]})}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/jodyheavener/status/1551974535452311552",handle:"jodyheavener",name:"Jody Heavener",job:"Senior Developer at 1Password",children:(0,i.jsx)(s.p,{children:"The plugin system in Docusaurus v2 has made expanding 1Password's developer\nportal so easy and fun. Super excited to show you what we've got cooking up."})}),"\n",(0,i.jsx)(s.h3,{id:"theming",children:"Theming"}),"\n",(0,i.jsxs)(s.p,{children:["Theming is one of the most important features of Docusaurus: we believe a professional documentation site should ",(0,i.jsx)(s.strong,{children:"respect your company's branding"})," and create a consistent experience."]}),"\n",(0,i.jsxs)(s.p,{children:["Docusaurus theming gives a lot of ",(0,i.jsx)(s.strong,{children:"flexibility"})," on multiple levels:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Customize CSS variables to adjust colors, fonts, and more"}),"\n",(0,i.jsx)(s.li,{children:"Provide your own CSS stylesheets"}),"\n",(0,i.jsx)(s.li,{children:"Implement your own theme from scratch"}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.strong,{children:"Override any React component"})," provided by our default theme: we call this ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/docs/swizzling",children:"swizzling"})]}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/hung_dev/status/1546918275065741312",handle:"hung_dev",name:"\nHung Viet Nguyen",job:"Creator of JestPreview",children:(0,i.jsx)(s.p,{children:"I love Docusaurus Swizzling feature. It\u2019s opinionated and flexible at the same\ntime. This is super cool since a framework usually needs to sacrifice one for\nthe other."})}),"\n",(0,i.jsxs)(s.p,{children:["This enables users willing to invest a bit more time on ",(0,i.jsx)(s.strong,{children:"customizations"})," to build sites that ",(0,i.jsx)(s.strong,{children:"look different"})," from others."]}),"\n",(0,i.jsx)(d.cQ,{}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/dabit3/status/1382855449813389315",handle:"dabit3",name:"Nader Dabit",job:"Web3 developer, Developer DAO founder",children:(0,i.jsx)(s.p,{children:"So far it\u2019s working out really nicely. It\u2019s been really easy to style up the\nway that we wanted it to look. No blockers at all."})}),"\n",(0,i.jsx)(s.h3,{id:"other-features",children:"Other features"}),"\n",(0,i.jsx)(s.p,{children:"Docusaurus 2 comes with a very long list of useful features:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Theme: dark mode, better UI and UX, flexible ",(0,i.jsx)(s.code,{children:"themeConfig"})," options..."]}),"\n",(0,i.jsx)(s.li,{children:"Docs versioning: flexible plugin options to adapt to your workflow"}),"\n",(0,i.jsx)(s.li,{children:"Docs sidebar: collapsible category, category index pages..."}),"\n",(0,i.jsx)(s.li,{children:"Blog: multiple authors, authors map, archive page..."}),"\n",(0,i.jsx)(s.li,{children:"Markdown: tabs, math equations, live code blocks, linking, flexible front matter..."}),"\n",(0,i.jsx)(s.li,{children:"Search: use the new Algolia DocSearch 3 experience"}),"\n",(0,i.jsx)(s.li,{children:"Assets: make it easy to incorporate images and other kinds of files"}),"\n",(0,i.jsx)(s.li,{children:"Internationalization: config options, default theme translations..."}),"\n",(0,i.jsx)(s.li,{children:"Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement..."}),"\n",(0,i.jsx)(s.li,{children:"SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang..."}),"\n",(0,i.jsx)(s.li,{children:"PWA: add offline support to your site, and make it installable"}),"\n",(0,i.jsx)(s.li,{children:"Fail-fast: strict config validation, detect broken links, and prevent bad production deployments"}),"\n",(0,i.jsx)(s.li,{children:"TypeScript support for config files, plugins, custom pages and theme authors"}),"\n",(0,i.jsxs)(s.li,{children:["Playgrounds: assess Docusaurus easily from your browser with ",(0,i.jsx)(s.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(s.li,{children:"Canary releases: use the @canary npm tag to use the upcoming release before anyone else"}),"\n",(0,i.jsx)(s.li,{children:"Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working"}),"\n"]}),"\n",(0,i.jsx)(h,{url:"https://twitter.com/alexbdebrie/status/1540010328335032320",handle:"alexbdebrie",name:"Alex DeBrie",job:"AWS Data Hero, author of The DynamoDB Book",children:(0,i.jsx)(s.p,{children:"Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\na good bit of configuration without being overwhelming, and the ability to\nreally customize the styling if you're braver than I am."})}),"\n",(0,i.jsx)(s.h2,{id:"why-20-now",children:"Why 2.0 now?"}),"\n",(0,i.jsxs)(s.p,{children:["Many enthusiastic followers of ours have been curious ",(0,i.jsx)(s.strong,{children:"why it took us 4 years to release Docusaurus 2.0"}),", considering the beta is already successful and ",(0,i.jsx)(s.strong,{children:"widely used in production"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["The reason is that we aim to ",(0,i.jsxs)(s.strong,{children:["respect ",(0,i.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"})]}),", which means we will be incrementing the major version number whenever we release a ",(0,i.jsx)(s.strong,{children:"breaking change"}),"."]}),"\n",(0,i.jsx)(s.p,{children:"It is important for multiple reasons:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["It ",(0,i.jsx)(s.strong,{children:"guarantees simple minor version upgrades"}),", as long as you only use the ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"})]}),"\n",(0,i.jsx)(s.li,{children:"It follows front-end ecosystem conventions"}),"\n",(0,i.jsx)(s.li,{children:"A new major version is an opportunity to thoroughly document breaking changes"}),"\n",(0,i.jsx)(s.li,{children:"A new major/minor version is an opportunity to communicate new features through a blog post"}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["The problem is that our flexible theming system inherently creates a very ",(0,i.jsx)(s.strong,{children:"implicit API surface"})," on which it is ",(0,i.jsx)(s.strong,{children:"hard to know what is a breaking change"})," in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our ",(0,i.jsx)(s.a,{href:"/community/release-process#public-api-surface",children:"public API"}),", so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["From now on, Docusaurus will ",(0,i.jsx)(s.strong,{children:"release new major versions more frequently"}),". In practice, you can expect a ",(0,i.jsx)(s.strong,{children:"new major version every 2 to 4 months"}),"."]}),(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html",children:"Major version numbers are not sacred"}),", but we still group breaking changes together and avoid releasing major versions too often."]}),(0,i.jsxs)(s.p,{children:["Check our ",(0,i.jsx)(s.a,{href:"/community/release-process",children:"release process"})," documentation for details."]})]}),"\n",(0,i.jsx)(s.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash Up and Running",src:t(66730).Z+"",width:"760",height:"160"})}),"\n",(0,i.jsxs)(s.p,{children:["The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will ",(0,i.jsx)(s.strong,{children:"backport retro-compatible changes in Docusaurus 2.x"})," minor versions to make them available as soon as possible to the community on a stable channel."]}),"\n",(0,i.jsx)(s.p,{children:"A sample of the features on our roadmap for the upcoming major versions of Docusaurus:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4029",children:"Upgrade to MDX 2.0"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4625",children:"Improve Markdown infrastructure"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6114",children:"Improve theming and swizzle"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2961",children:"TailwindCSS theme"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/7227",children:"Theme; support custom item types for navbar, doc sidebar, blog sidebar, footer"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4389",children:"Dynamic navbar: navbar item activation strategies"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/2968",children:"Custom Social Cards"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/3236",children:"CSS-in-JS support"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6520",children:"Use Node.js ES Modules"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4765",children:"Improve build time performance"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4138",children:"Extend Docusaurus plugins, CMS integration"})}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"thank-you",children:"Thank You"}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to express our gratitude to ",(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/graphs/contributors",children:"all our contributors"}),", including:"]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["The Docusaurus core team: ",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"Joshua Chen"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"S\xe9bastien Lorber"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"Yangshun Tay"})," and all our ",(0,i.jsx)(s.a,{href:"https://docusaurus.io/community/team",children:"former team members"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for creating Docusaurus 1.0 and supporting the Docusaurus 2.0 project at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/zpao",children:"Paul O\u2019Shannessy"})," for supporting the development of all the next versions of Docusaurus at Meta Open Source"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/ericnakagawa",children:"Eric Nakagawa"})," for creating our cutest mascot Slash"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," for his significant ",(0,i.jsx)(s.a,{href:"/blog/2020/01/07/tribute-to-endi",children:"initial work on Docusaurus v2"})]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/shortcuts",children:"Cl\xe9ment Vannicatte"}),", ",(0,i.jsx)(s.a,{href:"https://github.com/Shipow",children:"Kevin Granger"})," and the whole Algolia team for their support"]}),"\n",(0,i.jsxs)(s.li,{children:["All the community members for making valuable code contributions, improving our documentation, and answering questions on ",(0,i.jsx)(s.a,{href:"https://discordapp.com/invite/docusaurus",children:"Discord"})]}),"\n"]}),"\n",(0,i.jsxs)(s.p,{children:["We'd like to thank in particular all our ",(0,i.jsx)(s.strong,{children:"Docusaurus 2.0 early adopters"})," for assessing its alpha, beta and canary releases, providing a ton of ",(0,i.jsx)(s.strong,{children:"invaluable feedback"}),". We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0."]}),"\n",(0,i.jsxs)(s.p,{children:["At ",(0,i.jsx)(s.a,{href:"https://opensource.fb.com/",children:"Meta Open Source"}),", Docusaurus is one of our ",(0,i.jsx)(s.strong,{children:"most successful projects"}),". We can't wait to see all the outstanding documentation websites that you will create! Don't forget to ",(0,i.jsxs)(s.strong,{children:["submit them to our ",(0,i.jsx)(s.a,{href:"/showcase",children:"site showcase"})]}),"!"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Now, let your imagination run wild \ud83e\udd2a!"})}),"\n",(0,i.jsx)(s.p,{children:"\u2014 Slash"}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.mdxAdmonitionTitle,{children:["We are on ",(0,i.jsx)(s.a,{href:"https://www.producthunt.com/posts/docusaurus-2-0",children:"ProductHunt"})," and ",(0,i.jsx)(s.a,{href:"https://news.ycombinator.com/item?id=32303052",children:"Hacker News"}),"!"]}),(0,i.jsx)(s.p,{children:"\ud83d\ude4f Share your experience using Docusaurus with the community!"}),(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)(o.Z,{}),(0,i.jsx)(l.Z,{})]})]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Slash plushies",src:t(8007).Z+"",width:"1332",height:"1331"})})]})}function w(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},759:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/babel.d0da959.640.png 640w,"+t.p+"assets/ideal-img/babel.eb46763.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/babel.d0da959.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/babel.eb46763.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/babel.d0da959.640.png",toString:function(){return t.p+"assets/ideal-img/babel.d0da959.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AHW2yo+ptZWouJOjuZCTupCGuouDuoKCtnuGsnCOwQDJ2OD17uvk4+Hd3Nnt7Ojz9O7z9O7s7en28urD1OUA1OHq/v378vP06+zu8PHz9fX49PT3+Pj5////0dbpANjg6f/+/fj38fDt4fbz6P778P767/369f///+TH1wDa3ej4+/v19/Pv8eX2+Oz19+v1+Ov4+vX9///uwMwA1ZzJ1Jmj2JKO1YR5035y03lv1nZt23Zu23lv5mpy0pmUlPGKpNkAAAAASUVORK5CYII="}},92037:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/docusaurus.74e09a0.640.png 640w,"+t.p+"assets/ideal-img/docusaurus.6c04a2e.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/docusaurus.74e09a0.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/docusaurus.6c04a2e.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/docusaurus.74e09a0.640.png",toString:function(){return t.p+"assets/ideal-img/docusaurus.74e09a0.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AHTH0pLHxZTBxY+7w4yrxY2dxYqbxYOcxHmdvG+cxwDI3eL29vDm6+Pi59vu9eft9Obx9uft9er09+zB1+YA1uLr////9/by7+3k+fbv+/fw/vvz/fz6////0dXoAN3k7v////j49Ozq4e/u5PDu5ff06v779////+TH1wDf4+3////2+PLq69vq69zs7d7z9OP6+/T8///uwMwA157J1Zqj2ZON14Z31X5w13xw2npu23Zt23lx5mpzxQKV2C9YjUoAAAAASUVORK5CYII="}},91551:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/katex.681e845.640.png 640w,"+t.p+"assets/ideal-img/katex.68c9ce0.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/katex.681e845.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/katex.68c9ce0.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/katex.681e845.640.png",toString:function(){return t.p+"assets/ideal-img/katex.681e845.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAwElEQVR4nA3JzQqCMAAA4D1vFBaRVIdOnTpIRHToEP09QU8QEQgSEZFOKyIohgutTTedmq6+6wdU4943rJEOh1tHW9nawu7NYHduted7ZXoExg0lWYzpx317VDCacl4IkjCWkA3EwLy/ZP7lUfRycUgIC8KYx6lIpZQHEwPn37JgnCOEPr5PKQ2DIBHi308dgssN57IgIX+4GHu+R2gQC5FluZTv9Q7AiWGNl/ZAM7vNU6dmthRLLZ8blWurikr1H7J/l16e6unZAAAAAElFTkSuQmCC"}},49911:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/prettier.56bd537.640.png 640w,"+t.p+"assets/ideal-img/prettier.c38f582.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/prettier.56bd537.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/prettier.c38f582.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/prettier.56bd537.640.png",toString:function(){return t.p+"assets/ideal-img/prettier.56bd537.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAvUlEQVR4nDWJyQqCQABA539bKISECEqSItqgU4cgCLp0DAL1lKc8dImyLOnQJi24j2Y54yRCj3d48EButmxOhPaYbwy5WpevMzzLCKUKR1Wn6ZYIJOXs28blelHV/eOpOdCMNW09+rri+gbk04uQyAs+IY7IH5z0avsA+3hj5HgeDN4YoQgnhCje18UOHI73Dw4t6N91w3ShBT3nHQQhwoQY8yWQB9KmP1J6HZml5TK1LeUVOnsoZNRiTktRPxknlZhReJzeAAAAAElFTkSuQmCC"}},45058:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.efc41e0.640.png 640w,"+t.p+"assets/ideal-img/react-native.07364de.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.efc41e0.640.png",width:640,height:355},{path:t.p+"assets/ideal-img/react-native.07364de.1030.png",width:1030,height:571}],src:t.p+"assets/ideal-img/react-native.efc41e0.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.efc41e0.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxUlEQVR4nAG6AEX/AGisw32bq4aZrICSq32Drn91rX11r5eXzYCLumOBtwC9ztfn4+Ha2trLy8rQ0c/j5ODr7Oj5+vX//PS8zd8Az9zl+/n48/T14+Xo6urr7u7v7ezu9vb4////0NXoANHY4vb08vLy8ujn5+zr6/Tz8/Tz8/r5+f///+TH1wDY2+b3+/ni5+rO1dfY3N7c4ePa3+Ht8PH+///uwMwA1pzJ1pqkzIaDvGtfumVZumBWuVlRzWlh3nty5mlz7TWO83oUmccAAAAASUVORK5CYII="}},97814:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/courier.e09893c.640.png 640w,"+t.p+"assets/ideal-img/courier.129992f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/courier.e09893c.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/courier.129992f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/courier.e09893c.640.png",toString:function(){return t.p+"assets/ideal-img/courier.e09893c.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AIyt2rSXz7uc17eW2bGD269z3qhu3p1w3JJv2H192QDIyeD52+/XwdTEq8LRu8/SvdLRvNHn2On/9f/EzewAz9vo/Pn+3dzizczR1dTY2NbbxcLJxb3I5OHivb/YANPW5/jv+Pv4+//+/v39/f///8O9xT8hRy0WOoZdfgDW1eb39f3y8/ju8PPy9ff///+4t8EoFTggEziUVXkA1pvJ1Jej2JGO2IZ61n9z2oB1zGpjrkRDrUVF1lVl9EeDFNRMBPsAAAAASUVORK5CYII="}},29743:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/datagit.52152e6.640.png 640w,"+t.p+"assets/ideal-img/datagit.8ff0610.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/datagit.52152e6.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/datagit.8ff0610.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/datagit.52152e6.640.png",toString:function(){return t.p+"assets/ideal-img/datagit.52152e6.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtUlEQVR4nB2MSwtBQRzF5/NaIEUUGysrC2UhWfkIlkpdRd0QyWO8UlxN6rpkrjvP/4yhTqfTOf0Oap/o/M7WRCwvYroQ0yH3Pe55rD+mzR5BK/Ky1oJxZrkCKvUjTpQGa+UIhwgHkRuEAuk6DU6MCc6l1nq2JOh0e7rZmB/+4eadQPQW8KNtMNqg8/XhElPglEiIJYSU8f97NJigbcdft7q4Ud/Xyriax5Xcrpg5FNLHUpakcl/Tt57UbDm38AAAAABJRU5ErkJggg=="}},42431:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/dyte.73c64e7.640.png 640w,"+t.p+"assets/ideal-img/dyte.fc5d80d.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/dyte.73c64e7.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/dyte.fc5d80d.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/dyte.73c64e7.640.png",toString:function(){return t.p+"assets/ideal-img/dyte.73c64e7.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwElEQVR4nBWKPQ/BQACG7/cakA6SSsTIRGIzSCQGGzExYCEkGq3Ptj4qImh9XLWH0+pdz3mmJ+/zguz4Vp9AaYfk3Uue+krfH3Zxp+1WW89c7QLKrVmjqc/1g2WdPj6mjIYsJDRgjPU0G8hbixBqIryH7tl93/EXegR5lGdlYQLVMLnBh2M7TkA4lNA/fDwOVLA2LMpC3s7X2wXa0EUIY48fGbO7EtBKI7VYWRXyeia5TAtaSliJsU0iuhHjZkT4AbKqmp/l23uuAAAAAElFTkSuQmCC"}},97314:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/hasura.bc785e1.640.png 640w,"+t.p+"assets/ideal-img/hasura.137e254.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/hasura.bc785e1.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/hasura.137e254.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/hasura.bc785e1.640.png",toString:function(){return t.p+"assets/ideal-img/hasura.bc785e1.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFmgumOEmGyEm2R6ll9plmBbl1pWkldblU1kmlN6tQBFXm0VGiEmLTQgKCwcJCcdJygbJSUWHiARGxwsSGEASl1sGSIqJS81KzI4KDA1JCswJCwyISkvGiAiOUJZAFJgbhskKyUuNSQtNR4nLiIqMh4mLiMqMhooLk42SwBOWWkQHiUcKjQhM0EdLjwkNUIeMT4iMT4ZNEFYMUUAt36soWhzqmZjqVpPplJIqFBHqElCq0lCpkhAxUpUcrgya3rIEDYAAAAASUVORK5CYII="}},31256:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/ionic.fa7100c.640.png 640w,"+t.p+"assets/ideal-img/ionic.b257f51.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/ionic.fa7100c.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/ionic.b257f51.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/ionic.fa7100c.640.png",toString:function(){return t.p+"assets/ideal-img/ionic.fa7100c.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJbY7s7o9tXo+tPk+8HK/MbA+ci/9sLB98HM+Zi26gDK3ej//Pzy8vLt6+rn6+34+/n////x8u/w7OXD1uoA0d7p////7u/w4uPm6Ojr7e7z9PT309TW19fWub7UANTd6P///vj4+Pf4+fr6/Pr7/fb3+tre6P3//tGzxADZ3ej8///z9/n0+fn1+vr2+vrz+PvO2Of2///crLoA1pzI1Zmj2ZOP2Yh814B02Hxy13du03Bp2nlv42ZvKW6aTYAYkXMAAAAASUVORK5CYII="}},10712:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/outerbounds.1551bd2.640.png 640w,"+t.p+"assets/ideal-img/outerbounds.8f237b6.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/outerbounds.1551bd2.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/outerbounds.8f237b6.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/outerbounds.1551bd2.640.png",toString:function(){return t.p+"assets/ideal-img/outerbounds.1551bd2.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwUlEQVR4nAXBPU+DQBgA4Pu7Gk0kMbjUybWLkwmDkz/BiYQmNpVBUglqAMVobK0VA3cc930HvD4PCiqa1irbiuS9T1K5Xuo4YouIhitydbtHT98NwIRxS9o/1uNhMDDJ0XEAHRc1yj5+B2cZF9pYZZwxTnOmWA+DSh6/0HO1c0YLITHhdSO5sIJ2pCUT2M1dhqrPegTgUlHGmJTaWkJpizsNUxPeo/L6IQ9uyst5fuG/nJ8UM6/0j15PD9/Ojn8OvH/UO5wdIdW5swAAAABJRU5ErkJggg=="}},13296:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/quickwit.0d2bdce.640.png 640w,"+t.p+"assets/ideal-img/quickwit.9fe97e2.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/quickwit.0d2bdce.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/quickwit.9fe97e2.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/quickwit.0d2bdce.640.png",toString:function(){return t.p+"assets/ideal-img/quickwit.0d2bdce.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFuft2aClbfL3djp/8zP+MvA9se99L/C97yt3Zmd1ABKX2wiIie6u77w7+3t7On///v+/fr7//z/9/PGy+EAVWRzKCoyvb/C6uvr4ODi7+7w8vLz8vP1////ztToAFxmdCkrM7/Bw/Py8ufo6Ons6/T19P78/P///+TF1gBYXm0cIyu3vMDj6+rZ3t/b4ODn7O31+fr8///uvssAuYCtpGl0zYeD14l70X1w13xx13dt2XRr23lw52pzTXWFbIJJ0W4AAAAASUVORK5CYII="}},48426:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-native.a3415f1.640.png 640w,"+t.p+"assets/ideal-img/react-native.7fdb38b.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-native.a3415f1.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-native.7fdb38b.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-native.a3415f1.640.png",toString:function(){return t.p+"assets/ideal-img/react-native.a3415f1.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGapwnuXp4WWqYKSqoKErYN1rYF2rXRzqn2Jt26MwAC/0drp4uDG0dSpvsS+0dTI3d691NnR3N79+PC/0eQA0+Dp///90+rystnmt9vnud7rp8bh1Obx////ztPoANXc5vz6+vTz8+nl5O3q6vn29vv39v36+v///+PG1gDY3Ofz9/Xv8/Xq7vDz9/nz+frz+fv5/Pz8///uvssA1ZzJ05eh1Y+K04J12YJ22X502npw23Zu23lv5mpyzQSO+/+AUU4AAAAASUVORK5CYII="}},58155:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/figma.15dd2d7.640.png 640w,"+t.p+"assets/ideal-img/figma.d0ffd9c.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/figma.15dd2d7.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/figma.d0ffd9c.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/figma.15dd2d7.640.png",toString:function(){return t.p+"assets/ideal-img/figma.15dd2d7.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHCswX6aqIearIOUq36BqoF3rX93rnZ2q254pWeFuQDD09zv6ebo6Ofl5OTp6eXv8Orx8u3s7ej07+e9z+EA0t/o////+fr66Ojp9fX2+fn5+fn6/P39////0NToANbe5/37+fj4+OXk5OPj5+Tj5+vq6/z6+////+TF1gDe4ez////z9/jf4+rg5O3m6vDr8PL5/Pz9///uvssA153J1pqj2ZKO1YN40nxy1Xtw13dt3HZu23lv5mpymEqSTZvMMPsAAAAASUVORK5CYII="}},9258:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/gulp.d4c3fc5.640.png 640w,"+t.p+"assets/ideal-img/gulp.6ea1e58.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/gulp.d4c3fc5.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/gulp.6ea1e58.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/gulp.d4c3fc5.640.png",toString:function(){return t.p+"assets/ideal-img/gulp.d4c3fc5.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJK2zL6lssOmt8GiubuLs7x+s7d7srF+tKV/q4eFugDU3eb/8/D97+//8u/97un45N/76uX57en/7OPByNoA0N/o8vTz7fHx7fHx8fT1/P7/+fX29ODj////ztLmANHY4u/t6/Dv8PDu7vX19f////rv7/Xa2////+TF1QDg4+7////9/v7+///8/f319vf3+vv2+Pn4///ruscA153J1Zmi2pOP2oh714F02H5z2Xlv3HZu23lw52py3gmWbSlfuv8AAAAASUVORK5CYII="}},44827:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/iota.925442f.640.png 640w,"+t.p+"assets/ideal-img/iota.7ed609f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/iota.925442f.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/iota.7ed609f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/iota.925442f.640.png",toString:function(){return t.p+"assets/ideal-img/iota.925442f.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFKYtFV1jl11kVxzlFlilFpVlk9LjUdLi0JSik5uqQA1TGYSFy4lLUMSGTAKFywIFCgmN0koOU0FDB8mQWQAOlBoGiU7NURYHDJHEh83DBQsZJGpbJeuBQ8lSUZpAD9PZwYRJxApPRRCUgsWLR0sQUlvkkhoiw8gNFIxUAA9R2AACB4FEigCDSUEEigOHjQSJkEVJ0IAGCxJITwAtHuqnWNypmNjpVZOplJKo0tFokI7pEE8okI/xEhVe5wyRQKh1/EAAAAASUVORK5CYII="}},11342:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/lacework.c68d75b.640.png 640w,"+t.p+"assets/ideal-img/lacework.d175372.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/lacework.c68d75b.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/lacework.d175372.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/lacework.c68d75b.640.png",toString:function(){return t.p+"assets/ideal-img/lacework.c68d75b.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AI3U7rnd78Te8cLa8b7I87+69ri29ayy8qGy7oeo5gCc1eWy3OK94OTI5eXM6/K43/+bw/6BqfxjivxSgOoAt93p1/b63PX65fr83/T8zeT9vdT8rMT6nrj/hpzmAN3k7fTx8PLw8fv6+vHv8P/+/Pj39fTw7P///+TH1gDe4ezx9vbx9ff2+vvw9ff3/P3x9vjp7vLy///pu8kA153Jz5Se1ZCM2IZ60Xtv1Xtw13Zt1G5m1nRr5mpyezCTnExaW/kAAAAASUVORK5CYII="}},70054:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/react-navigation.934c9f1.640.png 640w,"+t.p+"assets/ideal-img/react-navigation.b259138.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/react-navigation.934c9f1.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/react-navigation.b259138.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/react-navigation.934c9f1.640.png",toString:function(){return t.p+"assets/ideal-img/react-navigation.934c9f1.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJna8c3n9tLl99Hh+c3Q+s3C+cnA+L+/9bfC75Wz6ADO3u728Pjw7/j19Pv19fv19vr29/vz9Pj79/jD1O4Aydfr3dzv2Nrp19fkzc7gzs7g29vmxMbjtbbfvsTiAMzU6c/O7NDR6OTk7c/O3aSluObl7bOy2ayx29W20wDJzejQ1fDR1fDb3/TZ3vHS1+za3/PQ0+/R4PnZq8cA0pjHz5Oj1I2P1YN71H501Xtz03Nu1XBt1HNu4WRx/7mSxfcad4sAAAAASUVORK5CYII="}},42444:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/sap-cloud.2ba4181.640.png 640w,"+t.p+"assets/ideal-img/sap-cloud.87fd77f.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/sap-cloud.2ba4181.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/sap-cloud.87fd77f.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/sap-cloud.2ba4181.640.png",toString:function(){return t.p+"assets/ideal-img/sap-cloud.2ba4181.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJnT3M3c1dLa1tDW187G2M6318m12MK217q50Zas1ADUrEz/pQD9pwn/qw//ty3/uS7/rw/9rQv/rADGoUsA2bNh/7Ic/bgv/7Yo9rxR9rtR/7Ur/bQv/7Mcz6JaANzk7f///8XHyN3g4f//+v///tHPyNzZzv///+TG1QDf4u7////O19vX4+T7///4/f/U3NLW2cj5///uvssA1p3Jz5Sd14+J14N1031w03ht1HNr1XFq1XRp5mlyjnGEL7XZrpAAAAAASUVORK5CYII="}},11937:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/snapchat.e815a99.640.png 640w,"+t.p+"assets/ideal-img/snapchat.ea1f1e4.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/snapchat.e815a99.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/snapchat.ea1f1e4.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/snapchat.e815a99.640.png",toString:function(){return t.p+"assets/ideal-img/snapchat.e815a99.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AHGys4iijpCilIuck4mMkIp/koV9lX9/lHJ8h2iFpADR2Ur+6wD05wP36gDw5RHy6BD67gD37AP/8ADBy0cAsLhQwbgEv7gRwbcMvbQWu7QWwLkQwLgQxbwEp6ZKAD5IY19XEFpVHBQhNywoLzM0LS8+PxsYIhgdI1E0SQBJTVw3OB84OikiLS8oLioxLSwpLismKiwdLCpbLTkAuH6po2l3q2Zlr1xPq1RJqE9Fq0tCsk1Er01Dx0pT24NMwfdnnlIAAAAASUVORK5CYII="}},44102:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/solana.11c06b5.640.png 640w,"+t.p+"assets/ideal-img/solana.59b8299.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/solana.11c06b5.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/solana.59b8299.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/solana.11c06b5.640.png",toString:function(){return t.p+"assets/ideal-img/solana.11c06b5.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AJfa783n9dXo+c/g9szP98zB98i/98C/9LjD7pe06ADS5O3//Pj7/Pr8/Pr3+/X7/vn8/fr2+/b///vG2e4A1uPs9Pf08fT19fX27PHw9vb38/T07PHy/f78zNHlAN3l7v////z+/v7///z+/f////7+/v38/f///+TG1gCcoKuWmZiVmZqWm5yXm5yVmZmWm5yXmZuRnp2qfIgAsHail1xmn1hToU9CnUc6nEE2nz81oTw0nToxv0NLGxWM/uT7PyYAAAAASUVORK5CYII="}},33339:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/stackblitz.8e72b20.640.png 640w,"+t.p+"assets/ideal-img/stackblitz.b6d2350.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/stackblitz.8e72b20.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/stackblitz.b6d2350.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/stackblitz.8e72b20.640.png",toString:function(){return t.p+"assets/ideal-img/stackblitz.8e72b20.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AGmswn6Zp4iarIOUq3+Dq35zqXpxqXJyp2l1omaEuADL2+Tx7Ons6urw7evs7Oj6+vX6+/b09fH//va+0OIA2ebv/v79+vv8+P//8/f5y8vOwcLFvL/D09fYzdLmAN3m7////fj6+fj//9bv9iEmLAUJDgYOFhwtM9W4yQDLz9ne4eDZ3d7a4OLE1ttze39mbXFmbHBqenrSpLAAv4Wyr3R+t3Fut2ZZuGBTwmhcxWRbx2JaxGJZz1Rc5p58VGKBM6kAAAAASUVORK5CYII="}},45785:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/supabase.c682b42.640.png 640w,"+t.p+"assets/ideal-img/supabase.a1c0e2c.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/supabase.c682b42.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/supabase.a1c0e2c.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/supabase.c682b42.640.png",toString:function(){return t.p+"assets/ideal-img/supabase.c682b42.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwUlEQVR4nGOImL0hoboju64/rbw3MaUnIbQ7Jrg7PLzHN6IlpHApg1t4vLggr5KigpqqsrS0uKSUCBBJy0pIiPAYuYQxBMaly8vKaGlr6+rqampqqatpaGpoaWhoycnJ2DuHM4THZcjLSutoaxsZGgBJDXV1A319Az09JVXlUHMPhrDIZBEJUWU1dQ0dXSU1dTklZTVtHVUNTVElhRhdK4ad9WsWpxeuTk1YFemzPNB1ha/TSk/7Ne52K91sj3kFAQBKoS+8hI/oXQAAAABJRU5ErkJggg=="}},11384:(e,s,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/tauri.b9dc5c1.640.png 640w,"+t.p+"assets/ideal-img/tauri.0e2fd42.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/tauri.b9dc5c1.640.png",width:640,height:356},{path:t.p+"assets/ideal-img/tauri.0e2fd42.1030.png",width:1030,height:573}],src:t.p+"assets/ideal-img/tauri.b9dc5c1.640.png",toString:function(){return t.p+"assets/ideal-img/tauri.b9dc5c1.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAIAAAB1kpiRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxUlEQVR4nAG6AEX/AFucsWR/jG+Ckmd3j2BkjWFWjV9YkltbkVBbiFV0qQBFWWITEREXGRsuLiM4NzI0NjIuKhkxNTYyMzE4SFYAQ1lmSkM2UExELTk4SkpKR0lKPzcnP0lYPUpaR0dSAEhWY0VDN0xHPR4gJDc4PDM0NyEkKCknIyUmG1w9SwBNUl0QHB8ZIycbHyExNjk2Oz0ZHiAlJycbJyJcLTkAtXypqGt1rmZirVxPpk9DqE1CrExCrUlAqEc/xUlSoFE1BbONC+UAAAAASUVORK5CYII="}}}]); \ No newline at end of file diff --git a/assets/js/519fdddf.bf29ce9b.js b/assets/js/519fdddf.bf29ce9b.js new file mode 100644 index 0000000000..305daf6420 --- /dev/null +++ b/assets/js/519fdddf.bf29ce9b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52085],{56368:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var n=s(24246),r=s(71670);const i={unlisted:!0,force_unlisted_parseFrontMatter_test:!0},o="force_unlisted_parseFrontMatter_test",c={id:"tests/visibility/force-unlisted",title:"force_unlisted_parseFrontMatter_test",description:"This doc is hidden despite unlisted: false",source:"@site/_dogfooding/_docs tests/tests/visibility/force-unlisted.mdx",sourceDirName:"tests/visibility",slug:"/tests/visibility/force-unlisted",permalink:"/tests/docs/tests/visibility/force-unlisted",draft:!1,unlisted:!0,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1702691426e3,frontMatter:{unlisted:!0,force_unlisted_parseFrontMatter_test:!0},sidebar:"sidebar"},d={},a=[];function l(t){const e={code:"code",h1:"h1",p:"p",...(0,r.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"force_unlisted_parsefrontmatter_test",children:"force_unlisted_parseFrontMatter_test"}),"\n",(0,n.jsxs)(e.p,{children:["This doc is hidden despite ",(0,n.jsx)(e.code,{children:"unlisted: false"})]}),"\n",(0,n.jsxs)(e.p,{children:["We use ",(0,n.jsx)(e.code,{children:"parseFrontMatter"})," to force it to true thanks to ",(0,n.jsx)(e.code,{children:"force_unlisted_parseFrontMatter_test: true"})]})]})}function u(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(l,{...t})}):l(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>o});var n=s(27378);const r={},i=n.createContext(r);function o(t){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),n.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/51c1a13a.ddfa6f54.js b/assets/js/51c1a13a.ddfa6f54.js new file mode 100644 index 0000000000..c8939362c3 --- /dev/null +++ b/assets/js/51c1a13a.ddfa6f54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[33817],{98402:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/changelog/page/4","page":4,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog/page/3","nextPage":"/changelog/page/5","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}')}}]); \ No newline at end of file diff --git a/assets/js/51cfc813.a0d88db1.js b/assets/js/51cfc813.a0d88db1.js new file mode 100644 index 0000000000..49e3d3be49 --- /dev/null +++ b/assets/js/51cfc813.a0d88db1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[17674],{95224:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var l=n(24246),s=n(71670);const a={mdx:{format:"md"},date:"2020-04-27T20:00",authors:["lex111"]},r="2.0.0-alpha.53",o={permalink:"/changelog/2.0.0-alpha.53",source:"@site/changelog/source/2.0.0-alpha.53.md",title:"2.0.0-alpha.53",description:"HOTFIX for 2.0.0-alpha.51.",date:"2020-04-27T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"}],frontMatter:{mdx:{format:"md"},date:"2020-04-27T20:00",authors:["lex111"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.54",permalink:"/changelog/2.0.0-alpha.54"},nextItem:{title:"2.0.0-alpha.51",permalink:"/changelog/2.0.0-alpha.51"},listPageLink:"/changelog/page/4"},i={authorsImageUrls:[void 0]},c=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"Committers: 1",id:"committers-1",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(t.p,{children:[(0,l.jsx)(t.strong,{children:"HOTFIX for 2.0.0-alpha.51"}),"."]}),"\n",(0,l.jsx)(t.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsxs)(t.li,{children:[(0,l.jsx)(t.code,{children:"docusaurus-theme-classic"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsxs)(t.li,{children:[(0,l.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/2676",children:"#2676"})," fix(v2): allow build website without custom css (",(0,l.jsx)(t.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(t.h2,{id:"committers-1",children:"Committers: 1"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsxs)(t.li,{children:["Alexey Pyltsyn (",(0,l.jsx)(t.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(h,{...e})}):h(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>r});var l=n(27378);const s={},a=l.createContext(s);function r(e){const t=l.useContext(a);return l.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),l.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/520a8178.30dd5c42.js b/assets/js/520a8178.30dd5c42.js new file mode 100644 index 0000000000..ade4efed17 --- /dev/null +++ b/assets/js/520a8178.30dd5c42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52110],{61132:(e,n,t)=>{t.d(n,{Z:()=>u});var r=t(24246),i=(t(27378),t(40624));const s={tabItem:"tabItem_pnkT"};function u({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(24246),i=t(27378),s=t(40624),u=t(75527),o=t(3620),a=t(44479),l=t(62821),c=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function g(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function h(e){var n,t;return null!==(t=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function b(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return h(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f({value:e,tabValues:n}){return n.some((n=>n.value===e))}function m({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),s=(0,l._X)(r),u=(0,i.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(g(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[s,u]}function y(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=b(e),[u,o]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,c]=m({queryString:t,groupId:r}),[p,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),h=(()=>{const e=null!=l?l:p;return f({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{h&&o(h)}),[h]);return{selectedValue:u,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),g(e)}),[c,g,s]),tabValues:s}}var j=t(29088);const v={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){x(e,n,t[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:i,tabValues:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,u.o5)(),c=e=>{const n=e.currentTarget,r=a.indexOf(n),s=o[r].value;s!==t&&(l(n),i(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:i})=>(0,r.jsx)("li",O(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:c},i),{className:(0,s.Z)("tabs__item",v.tabItem,null==i?void 0:i.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function I({lazy:e,children:n,selectedValue:t}){const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function P(e){const n=y(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",v.tabList),children:[(0,r.jsx)(k,w({},e,n)),(0,r.jsx)(I,w({},e,n))]})}function E(e){const n=(0,j.Z)();return(0,r.jsx)(P,O(w({},e),{children:h(e.children)}),String(n))}},81849:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(24246),i=t(71670),s=t(97555),u=t(61132);const o={sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},a="\ud83d\udce6 plugin-debug",l={id:"api/plugins/plugin-debug",title:"\ud83d\udce6 plugin-debug",description:"The debug plugin will display useful debug information at http3000/docusaurus/debug.",source:"@site/docs/api/plugins/plugin-debug.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-debug",permalink:"/docs/api/plugins/@docusaurus/plugin-debug",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-debug.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"/api/plugins/@docusaurus/plugin-debug"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-client-redirects",permalink:"/docs/api/plugins/@docusaurus/plugin-client-redirects"},next:{title:"\ud83d\udce6 plugin-google-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-google-analytics"}},c={},d=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-plugin-debug",children:"\ud83d\udce6 plugin-debug"}),"\n","\n",(0,r.jsxs)(n.p,{children:["The debug plugin will display useful debug information at ",(0,r.jsx)(n.a,{href:"http://localhost:3000/__docusaurus/debug",children:(0,r.jsx)(n.code,{children:"http://localhost:3000/__docusaurus/debug"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["It is mostly useful for plugin authors, that will be able to inspect more easily the content of the ",(0,r.jsx)(n.code,{children:".docusaurus"})," folder (like the creates routes), but also be able to inspect data structures that are never written to disk, like the plugin data loaded through the ",(0,r.jsx)(n.code,{children:"contentLoaded"})," lifecycle."]}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If you use the plugin via the classic preset, the preset will ",(0,r.jsx)(n.strong,{children:"enable the plugin in development and disable it in production"})," by default (",(0,r.jsx)(n.code,{children:"debug: undefined"}),") to avoid exposing potentially sensitive information. You can use ",(0,r.jsx)(n.code,{children:"debug: true"})," to always enable it or ",(0,r.jsx)(n.code,{children:"debug: false"})," to always disable it."]}),(0,r.jsx)(n.p,{children:"If you use a standalone plugin, you may need to achieve the same effect by checking the environment:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n // highlight-next-line\n process.env.NODE_ENV === 'production' && '@docusaurus/plugin-debug',\n ].filter(Boolean),\n};\n"})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsx)(n.p,{children:"If you report a bug, we will probably ask you to have this plugin turned on in the production, so that we can inspect your deployment config more easily."}),(0,r.jsxs)(n.p,{children:["If you don't have any sensitive information, you can keep it on in production ",(0,r.jsx)(n.a,{href:"/__docusaurus/debug",children:"like we do"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(u.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-debug\n"})})}),(0,r.jsx)(u.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-debug\n"})})})]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["If you use the preset ",(0,r.jsx)(n.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(n.p,{children:["You can configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"This plugin currently has no options."}),"\n",(0,r.jsx)(n.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(n.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n",(0,r.jsxs)(s.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(u.Z,{value:"preset",label:"Preset options",children:[(0,r.jsxs)(n.p,{children:["If you use a preset, configure this plugin through the ",(0,r.jsx)(n.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),":"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-next-line\n debug: true, // This will enable the plugin in production\n },\n ],\n ],\n};\n"})})]}),(0,r.jsxs)(u.Z,{value:"plugin",label:"Plugin Options",children:[(0,r.jsx)(n.p,{children:"If you are using a standalone plugin, provide options directly to the plugin:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // highlight-next-line\n plugins: ['@docusaurus/plugin-debug'],\n};\n"})})]})]})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>u});var r=t(27378);const i={},s=r.createContext(i);function u(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:u(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/522b3e8c.7da5ae1d.js b/assets/js/522b3e8c.7da5ae1d.js new file mode 100644 index 0000000000..03b1874130 --- /dev/null +++ b/assets/js/522b3e8c.7da5ae1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7929],{96126:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>i});var n=a(24246),o=a(71670);const r={mdx:{format:"md"},date:"2020-03-08T20:00",authors:["lex111"]},l="2.0.0-alpha.48",s={permalink:"/changelog/2.0.0-alpha.48",source:"@site/changelog/source/2.0.0-alpha.48.md",title:"2.0.0-alpha.48",description:"HOTFIX for 2.0.0-alpha.44.",date:"2020-03-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"}],frontMatter:{mdx:{format:"md"},date:"2020-03-08T20:00",authors:["lex111"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.49",permalink:"/changelog/2.0.0-alpha.49"},nextItem:{title:"2.0.0-alpha.44",permalink:"/changelog/2.0.0-alpha.44"},listPageLink:"/changelog/page/4"},c={authorsImageUrls:[void 0]},i=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>l});var n=a(27378);const o={},r=n.createContext(o);function l(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/533a09ca.eda84e5e.js b/assets/js/533a09ca.eda84e5e.js deleted file mode 100644 index a876173605..0000000000 --- a/assets/js/533a09ca.eda84e5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[3098],{865:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var o=s(4848),a=s(8453);const r={sidebar_position:3},n="Create a Blog Post",i={id:"tutorial-basics/create-a-blog-post",title:"Create a Blog Post",description:"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...",source:"@site/docs/tutorial-basics/create-a-blog-post.md",sourceDirName:"tutorial-basics",slug:"/tutorial-basics/create-a-blog-post",permalink:"/docs/tutorial-basics/create-a-blog-post",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/tutorial-basics/create-a-blog-post.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Create a Document",permalink:"/docs/tutorial-basics/create-a-document"},next:{title:"Markdown Features",permalink:"/docs/tutorial-basics/markdown-features"}},c={},l=[{value:"Create your first Post",id:"create-your-first-post",level:2}];function u(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"create-a-blog-post",children:"Create a Blog Post"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus creates a ",(0,o.jsx)(t.strong,{children:"page for each blog post"}),", but also a ",(0,o.jsx)(t.strong,{children:"blog index page"}),", a ",(0,o.jsx)(t.strong,{children:"tag system"}),", an ",(0,o.jsx)(t.strong,{children:"RSS"})," feed..."]}),"\n",(0,o.jsx)(t.h2,{id:"create-your-first-post",children:"Create your first Post"}),"\n",(0,o.jsxs)(t.p,{children:["Create a file at ",(0,o.jsx)(t.code,{children:"blog/2021-02-28-greetings.md"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-md",metastring:'title="blog/2021-02-28-greetings.md"',children:"---\nslug: greetings\ntitle: Greetings!\nauthors:\n - name: Joel Marcey\n title: Co-creator of Docusaurus 1\n url: https://github.com/JoelMarcey\n image_url: https://github.com/JoelMarcey.png\n - name: S\xe9bastien Lorber\n title: Docusaurus maintainer\n url: https://sebastienlorber.com\n image_url: https://github.com/slorber.png\ntags: [greetings]\n---\n\nCongratulations, you have made your first post!\n\nFeel free to play around and edit this post as much as you like.\n"})}),"\n",(0,o.jsxs)(t.p,{children:["A new blog post is now available at ",(0,o.jsx)(t.a,{href:"http://localhost:3000/blog/greetings",children:"http://localhost:3000/blog/greetings"}),"."]})]})}function d(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>n,x:()=>i});var o=s(6540);const a={},r=o.createContext(a);function n(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/53a3e6dc.b7f4b901.js b/assets/js/53a3e6dc.b7f4b901.js new file mode 100644 index 0000000000..05d5c582fc --- /dev/null +++ b/assets/js/53a3e6dc.b7f4b901.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96504],{80899:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":5,"totalPages":5,"totalCount":21,"nextPage":"/blog/page/2","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/54542266.6c5d9693.js b/assets/js/54542266.6c5d9693.js new file mode 100644 index 0000000000..c11c2c2a94 --- /dev/null +++ b/assets/js/54542266.6c5d9693.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89832],{909:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},42740:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},78152:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var n=t(24246),a=t(71670);const r={title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},o=void 0,i={permalink:"/blog/2022/01/24/docusaurus-2021-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2022/01-24-docusaurus-2021-recap/index.mdx",source:"@site/blog/2022/01-24-docusaurus-2021-recap/index.mdx",title:"Docusaurus 2021 Recap",description:"Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!",date:"2022-01-24T00:00:00.000Z",tags:[{label:"recap",permalink:"/blog/tags/recap"}],readingTime:6.01,hasTruncateMarker:!0,authors:[{name:"Joshua Chen",title:"Working hard on Docusaurus",url:"https://joshcena.com/",email:"sidachen2003@gmail.com",imageURL:"https://github.com/josh-cena.png",key:"Josh-Cena"}],frontMatter:{title:"Docusaurus 2021 Recap",authors:["Josh-Cena"],tags:["recap"],image:"./img/thumbnail.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Announcing Docusaurus 2.0",permalink:"/blog/2022/08/01/announcing-docusaurus-2.0"},nextItem:{title:"DocSearch migration",permalink:"/blog/2021/11/21/algolia-docsearch-migration"}},c={image:t(909).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed ",(0,n.jsx)(s.strong,{children:"30k stars on GitHub"}),"!"]}),"\n",(0,n.jsxs)(s.p,{children:["We've ",(0,n.jsx)(s.strong,{children:"reached full feature parity"})," with v1 after ",(0,n.jsx)(s.a,{href:"/blog/2021/03/09/releasing-docusaurus-i18n",children:"the release of internationalization"}),", ",(0,n.jsxs)(s.a,{href:"/blog/2021/05/12/announcing-docusaurus-two-beta",children:["announced our ",(0,n.jsx)(s.strong,{children:"first beta"})]}),", and welcomed ",(0,n.jsx)(s.strong,{children:"significantly more users"})," this year."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.strong,{children:"official v2 release"})," is just around the corner! Follow the ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/6113",children:"roadmap issue"})," for any latest news."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{src:t(42740).Z+"",width:"1000",height:"562"})})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var n=t(27378);const a={},r=n.createContext(a);function o(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5533.ab5a6e24.js b/assets/js/5533.ab5a6e24.js deleted file mode 100644 index 6e8241be14..0000000000 --- a/assets/js/5533.ab5a6e24.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[5533],{7293:(e,t,n)=>{"use strict";n.d(t,{A:()=>L});var s=n(6540),o=n(4848);function c(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==n)),a=n?.props.children;return{mdxAdmonitionTitle:a,rest:c.length>0?(0,o.jsx)(o.Fragment,{children:c}):null}}(e.children),c=e.title??t;return{...e,...c&&{title:c},children:n}}var a=n(4164),r=n(1312),i=n(7559);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,o.jsx)("div",{className:(0,a.A)(i.G.common.admonition,i.G.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:c,className:a}=e;return(0,o.jsxs)(d,{type:t,className:a,children:[(0,o.jsx)(u,{title:s,icon:n}),(0,o.jsx)(m,{children:c})]})}function p(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,o.jsx)(p,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function x(e){return(0,o.jsx)(h,{...f,...e,className:(0,a.A)("alert alert--secondary",e.className),children:e.children})}function b(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const g={icon:(0,o.jsx)(b,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function j(e){return(0,o.jsx)(h,{...g,...e,className:(0,a.A)("alert alert--success",e.className),children:e.children})}function v(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,o.jsx)(v,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function y(e){return(0,o.jsx)(h,{...N,...e,className:(0,a.A)("alert alert--info",e.className),children:e.children})}function k(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const B={icon:(0,o.jsx)(k,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function C(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const A={icon:(0,o.jsx)(C,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const w={icon:(0,o.jsx)(k,{}),title:(0,o.jsx)(r.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const E={...{note:x,tip:j,info:y,warning:function(e){return(0,o.jsx)(h,{...B,...e,className:(0,a.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(h,{...A,...e,className:(0,a.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,o.jsx)(x,{title:"secondary",...e}),important:e=>(0,o.jsx)(y,{title:"important",...e}),success:e=>(0,o.jsx)(j,{title:"success",...e}),caution:function(e){return(0,o.jsx)(h,{...w,...e,className:(0,a.A)("alert alert--warning",e.className),children:e.children})}}};function L(e){const t=c(e),n=(s=t.type,E[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),E.info));var s;return(0,o.jsx)(n,{...t})}},5533:(e,t,n)=>{"use strict";n.d(t,{A:()=>ie});var s=n(6540),o=n(8453),c=n(5260),a=n(2303),r=n(4164),i=n(5293),l=n(6342);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,i.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(7559),m=n(8426),h=n.n(m);const p=/title=(?<quote>["'])(?<title>.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,x={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...x,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},g=Object.keys(x);function j(e,t){const n=e.map((e=>{const{start:n,end:s}=b[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:c}=t;if(c&&f.test(c)){const e=c.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const a=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return j(["js","jsBlock"],t);case"jsx":case"tsx":return j(["js","jsBlock","jsx"],t);case"html":return j(["js","jsBlock","html"],t);case"python":case"py":case"bash":return j(["bash"],t);case"markdown":case"md":return j(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return j(["tex"],t);case"lua":case"haskell":case"sql":return j(["lua"],t);case"wasm":return j(["wasm"],t);case"vb":case"vba":case"visual-basic":return j(["vb","rem"],t);case"vbnet":return j(["vbnet","rem"],t);case"batch":return j(["rem"],t);case"basic":return j(["rem","f90"],t);case"fsharp":return j(["js","ml"],t);case"ocaml":case"sml":return j(["ml"],t);case"fortran":return j(["f90"],t);case"cobol":return j(["cobol"],t);default:return j(g,t)}}(s,o),r=n.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<r.length;){const e=r[h].match(a);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${h},`:d[t]?i[d[t]].start=h:u[t]&&(i[u[t]].range+=`${i[u[t]].start}-${h-1},`),r.splice(h,1)}n=r.join("\n");const m={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const N={codeBlockContainer:"codeBlockContainer_Ckt0"};var y=n(4848);function k(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const c=t[s];c&&"string"==typeof o&&(n[c]=o)})),n}(d());return(0,y.jsx)(t,{...n,style:s,className:(0,r.A)(n.className,N.codeBlockContainer,u.G.common.codeBlock)})}const B={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function C(e){let{children:t,className:n}=e;return(0,y.jsx)(k,{as:"pre",tabIndex:0,className:(0,r.A)(B.codeBlockStandalone,"thin-scrollbar",n),children:(0,y.jsx)("code",{className:B.codeBlockLines,children:t})})}var A=n(9532);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(e,t){const[n,o]=(0,s.useState)(),c=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{c()}),[c]),function(e,t,n){void 0===n&&(n=w);const o=(0,A._q)(t),c=(0,A.Be)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,c),()=>t.disconnect()}),[e,o,c])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var L=n(1765);const T={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function _(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:c}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const a=o({line:t,className:(0,r.A)(n,s&&T.codeLine)}),i=t.map(((e,t)=>(0,y.jsx)("span",{...c({token:e,key:t})},t)));return(0,y.jsxs)("span",{...a,children:[s?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)("span",{className:T.codeLineNumber}),(0,y.jsx)("span",{className:T.codeLineContent,children:i})]}):i,(0,y.jsx)("br",{})]})}var S=n(1312);function M(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function z(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function I(e){let{code:t,className:n}=e;const[o,c]=(0,s.useState)(!1),a=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const c=document.getSelection(),a=c.rangeCount>0&&c.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let r=!1;try{r=document.execCommand("copy")}catch{}s.remove(),a&&(c.removeAllRanges(),c.addRange(a)),o&&o.focus()}(t),c(!0),a.current=window.setTimeout((()=>{c(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,y.jsx)("button",{type:"button","aria-label":o?(0,S.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,S.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,S.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,r.A)("clean-btn",n,H.copyButton,o&&H.copyButtonCopied),onClick:i,children:(0,y.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,y.jsx)(M,{className:H.copyButtonIcon}),(0,y.jsx)(z,{className:H.copyButtonSuccessIcon})]})})}function R(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const V={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function $(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,S.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,y.jsx)("button",{type:"button",onClick:n,className:(0,r.A)("clean-btn",t,s&&V.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,y.jsx)(R,{className:V.wordWrapButtonIcon,"aria-hidden":"true"})})}function W(e){let{children:t,className:n="",metastring:o,title:c,showLineNumbers:a,language:i}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.p)(),h=function(e){return e?.toLowerCase()}(i??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),x=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),c=(0,s.useRef)(null),a=(0,s.useCallback)((()=>{const n=c.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[c,e]),r=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=c.current,n=e>t||c.current.querySelector("code").hasAttribute("style");o(n)}),[c]);return E(c,r),(0,s.useEffect)((()=>{r()}),[e,r]),(0,s.useEffect)((()=>(window.addEventListener("resize",r,{passive:!0}),()=>{window.removeEventListener("resize",r)})),[r]),{codeBlockRef:c,isEnabled:e,isCodeScrollable:n,toggle:a}}(),b=function(e){return e?.match(p)?.groups.title??""}(o)||c,{lineClassNames:g,code:j}=v(t,{metastring:o,language:h,magicComments:m}),N=a??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,y.jsxs)(k,{as:"div",className:(0,r.A)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[b&&(0,y.jsx)("div",{className:B.codeBlockTitle,children:b}),(0,y.jsxs)("div",{className:B.codeBlockContent,children:[(0,y.jsx)(L.f4,{theme:f,code:j,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:c}=e;return(0,y.jsx)("pre",{tabIndex:0,ref:x.codeBlockRef,className:(0,r.A)(t,B.codeBlock,"thin-scrollbar"),style:n,children:(0,y.jsx)("code",{className:(0,r.A)(B.codeBlockLines,N&&B.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,y.jsx)(_,{line:e,getLineProps:o,getTokenProps:c,classNames:g[t],showLineNumbers:N},t)))})})}}),(0,y.jsxs)("div",{className:B.buttonGroup,children:[(x.isEnabled||x.isCodeScrollable)&&(0,y.jsx)($,{className:B.codeButton,onClick:()=>x.toggle(),isEnabled:x.isEnabled}),(0,y.jsx)(I,{className:B.codeButton,code:j})]})]})]})}function P(e){let{children:t,...n}=e;const o=(0,a.A)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),r="string"==typeof c?W:C;return(0,y.jsx)(r,{...n,children:c},String(o))}function D(e){return(0,y.jsx)("code",{...e})}var O=n(8774);var q=n(3427),G=n(1422);const F={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function U(e){return!!e&&("SUMMARY"===e.tagName||U(e.parentElement))}function J(e,t){return!!e&&(e===t||J(e.parentElement,t))}function Y(e){let{summary:t,children:n,...o}=e;(0,q.A)().collectAnchor(o.id);const c=(0,a.A)(),i=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,G.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,y.jsx)("summary",{children:t??"Details"});return(0,y.jsxs)("details",{...o,ref:i,open:u,"data-collapsed":l,className:(0,r.A)(F.details,c&&F.isBrowser,o.className),onMouseDown:e=>{U(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;U(t)&&J(t,i.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,y.jsx)(G.N,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,y.jsx)("div",{className:F.collapsibleContent,children:n})})]})}const Z={details:"details_b_Ee"},K="alert alert--info";function Q(e){let{...t}=e;return(0,y.jsx)(Y,{...t,className:(0,r.A)(K,Z.details,t.className)})}function X(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,y.jsx)(y.Fragment,{children:t.filter((e=>e!==n))});return(0,y.jsx)(Q,{...e,summary:n,children:o})}var ee=n(1107);function te(e){return(0,y.jsx)(ee.A,{...e})}const ne={containsTaskList:"containsTaskList_mC6p"};function se(e){if(void 0!==e)return(0,r.A)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const oe={img:"img_ev3q"};var ce=n(7293),ae=n(418);const re={Head:c.A,details:X,Details:X,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,y.jsx)(D,{...e}):(0,y.jsx)(P,{...e})},a:function(e){return(0,y.jsx)(O.A,{...e})},pre:function(e){return(0,y.jsx)(y.Fragment,{children:e.children})},ul:function(e){return(0,y.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,q.A)().collectAnchor(e.id),(0,y.jsx)("li",{...e})},img:function(e){return(0,y.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,r.A)(t,oe.img))});var t},h1:e=>(0,y.jsx)(te,{as:"h1",...e}),h2:e=>(0,y.jsx)(te,{as:"h2",...e}),h3:e=>(0,y.jsx)(te,{as:"h3",...e}),h4:e=>(0,y.jsx)(te,{as:"h4",...e}),h5:e=>(0,y.jsx)(te,{as:"h5",...e}),h6:e=>(0,y.jsx)(te,{as:"h6",...e}),admonition:ce.A,mermaid:ae.A};function ie(e){let{children:t}=e;return(0,y.jsx)(o.x,{components:re,children:t})}},8426:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,c]=t;if(s&&c){s=parseInt(s),c=parseInt(c);const e=s<c?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(c+=e);for(let t=s;t!==c;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},8453:(e,t,n)=>{"use strict";n.d(t,{R:()=>a,x:()=>r});var s=n(6540);const o={},c=s.createContext(o);function a(e){const t=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/554438a9.705eaf61.js b/assets/js/554438a9.705eaf61.js new file mode 100644 index 0000000000..c55c2de7c5 --- /dev/null +++ b/assets/js/554438a9.705eaf61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51215],{28048:(e,o,t)=>{t.d(o,{Z:()=>n});const n=t.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},60932:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>u,toc:()=>c});var n=t(24246),s=t(71670);const r={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},a=void 0,u={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{label:"documentation",permalink:"/blog/tags/documentation"},{label:"blog",permalink:"/blog/tags/blog"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},i={authorsImageUrls:[void 0]},c=[];function l(e){const o={a:"a",img:"img",li:"li",ol:"ol",p:"p",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{src:t(28048).Z+"",width:"760",height:"160"})}),"\n",(0,n.jsxs)(o.p,{children:["We are very happy to introduce ",(0,n.jsx)(o.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,n.jsxs)(o.p,{children:["We created ",(0,n.jsx)(o.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,n.jsxs)(o.ol,{children:["\n",(0,n.jsx)(o.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,n.jsx)(o.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,n.jsx)(o.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,n.jsx)(o.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]})]})}function d(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,o,t)=>{t.d(o,{Z:()=>u,a:()=>a});var n=t(27378);const s={},r=n.createContext(s);function a(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function u(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55a7f034.aac52bee.js b/assets/js/55a7f034.aac52bee.js new file mode 100644 index 0000000000..7620938f3c --- /dev/null +++ b/assets/js/55a7f034.aac52bee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[59874],{50233:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=n(24246),a=n(71670);const r={},o="navbar-dropdown-tests",i={type:"mdx",permalink:"/tests/pages/navbar-dropdown-tests",source:"@site/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",title:"navbar-dropdown-tests",description:"1. Make sure that the theme switcher is placed immediately after the language switcher in the navbar.",frontMatter:{},lastUpdatedBy:"Kagan",lastUpdatedAt:1677167766e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/navbar-dropdown-tests.mdx",unlisted:!1},d={},c=[];function l(e){const t={code:"code",h1:"h1",li:"li",ol:"ol",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"navbar-dropdown-tests",children:"navbar-dropdown-tests"}),"\n",(0,s.jsx)("div",{id:"navbar-dropdown-tests",children:(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Make sure that the theme switcher is placed immediately after the language switcher in the navbar."}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to focus language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Enter"})," to open language switcher."]}),"\n",(0,s.jsxs)(t.li,{children:["Press ",(0,s.jsx)(t.code,{children:"Tab"})," several times to exit language switcher."]}),"\n",(0,s.jsx)(t.li,{children:"Check if the theme selection button is in focus immediately after the last item."}),"\n"]})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>o});var s=n(27378);const a={},r=s.createContext(a);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55e8935a.fdc94a56.js b/assets/js/55e8935a.fdc94a56.js new file mode 100644 index 0000000000..0cdb835775 --- /dev/null +++ b/assets/js/55e8935a.fdc94a56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31005],{53059:e=>{e.exports=JSON.parse('{"tag":{"label":"endi","permalink":"/blog/tags/endi","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/endi","page":1,"postsPerPage":5,"totalPages":1,"totalCount":1,"blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/56170.676ffa49.js b/assets/js/56170.676ffa49.js new file mode 100644 index 0000000000..bfb8b25be9 --- /dev/null +++ b/assets/js/56170.676ffa49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[56170],{56170:(e,t,l)=>{l.d(t,{diagram:()=>f});var n=l(16525),a=l(63294),o=l(88472),i=l(99854),s=l(30198);l(27693),l(7608),l(31699),l(9500),l(76576);const d=e=>i.e.sanitizeText(e,(0,i.c)());let r={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const c=function(e,t,l,n,a){const o=Object.keys(e);i.l.info("keys:",o),i.l.info(e),o.filter((t=>e[t].parent==a)).forEach((function(l){var o,s;const r=e[l],c=r.cssClasses.join(" "),p="",b="",f=r.label??r.id,u={labelStyle:p,shape:"class_box",labelText:d(f),classData:r,rx:0,ry:0,class:c,style:b,id:r.id,domId:r.domId,tooltip:n.db.getTooltip(r.id,a)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,u),a&&t.setParent(r.id,a),i.l.info("setNode",u)}))};function p(e){let t;switch(e){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const b={setConf:function(e){r={...r,...e}},draw:async function(e,t,l,n){i.l.info("Drawing class - ",t);const b=(0,i.c)().flowchart??(0,i.c)().class,f=(0,i.c)().securityLevel;i.l.info("config:",b);const u=(null==b?void 0:b.nodeSpacing)??50,g=(null==b?void 0:b.rankSpacing)??50,y=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:u,ranksep:g,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getNamespaces(),v=n.db.getClasses(),w=n.db.getRelations(),k=n.db.getNotes();let x;i.l.info(w),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(a){var o,s;const r=e[a],p={shape:"rect",id:r.id,domId:r.domId,labelText:d(r.id),labelStyle:"",style:"fill: none; stroke: black",padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,p),c(r.classes,t,l,n,r.id),i.l.info("setNode",p)}))}(h,y,t,n),c(v,y,t,n),function(e,t){const l=(0,i.c)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:"id"+n,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:p(e.relation.type1),arrowTypeEnd:p(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,i.o)(null==l?void 0:l.curve,a.c_6)};if(i.l.info(s,e),void 0!==e.style){const t=(0,i.k)(e.style);s.style=t.style,s.labelStyle=t.labelStyle}e.text=e.title,void 0===e.text?void 0!==e.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",s.labelpos="c",(null==(o=(0,i.c)().flowchart)?void 0:o.htmlLabels)??(0,i.c)().htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+e.text+"</span>"):(s.labelType="text",s.label=e.text.replace(i.e.lineBreakRegex,"\n"),void 0===e.style&&(s.style=s.style||"stroke: #333; stroke-width: 1.5px;fill:none"),s.labelStyle=s.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,s,n)}))}(w,y),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,c;const p=e,b="",f="",u=p.text,g={labelStyle:b,shape:"note",labelText:d(u),noteData:p,rx:0,ry:0,class:"",style:f,id:p.id,domId:p.id,tooltip:"",type:"note",padding:(null==(s=(0,i.c)().flowchart)?void 0:s.padding)??(null==(c=(0,i.c)().class)?void 0:c.padding)};if(t.setNode(p.id,g),i.l.info("setNode",g),!p.class||!(p.class in n))return;const y=l+o,h={id:`edgeNote${y}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,i.o)(r.curve,a.c_6)};t.setEdge(p.id,p.class,h,y)}))}(k,y,w.length+1,v),"sandbox"===f&&(x=(0,a.Ys)("#i"+t));const m="sandbox"===f?(0,a.Ys)(x.nodes()[0].contentDocument.body):(0,a.Ys)("body"),T=m.select(`[id="${t}"]`),S=m.select("#"+t+" g");if(await(0,s.r)(S,y,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),i.u.insertTitle(T,"classTitleText",(null==b?void 0:b.titleTopMargin)??5,n.db.getDiagramTitle()),(0,i.p)(y,T,null==b?void 0:b.diagramPadding,null==b?void 0:b.useMaxWidth),!(null==b?void 0:b.htmlLabels)){const e="sandbox"===f?x.nodes()[0].contentDocument:document,l=e.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of l){const l=t.getBBox(),n=e.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",l.width),n.setAttribute("height",l.height),t.insertBefore(n,t.firstChild)}}}},f={parser:n.p,db:n.d,renderer:b,styles:n.s,init:e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute,n.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/5651bc45.08528b6c.js b/assets/js/5651bc45.08528b6c.js new file mode 100644 index 0000000000..fff73838e9 --- /dev/null +++ b/assets/js/5651bc45.08528b6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85118],{71482:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=i(24246),s=i(71670);const a={mdx:{format:"md"},date:"2019-10-26T20:00"},o="2.0.0-alpha.31",l={permalink:"/changelog/2.0.0-alpha.31",source:"@site/changelog/source/2.0.0-alpha.31.md",title:"2.0.0-alpha.31",description:"- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.",date:"2019-10-26T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-26T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.32",permalink:"/changelog/2.0.0-alpha.32"},nextItem:{title:"2.0.0-alpha.30",permalink:"/changelog/2.0.0-alpha.30"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[]},c=[];function d(e){const t={code:"code",li:"li",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers."}),"\n",(0,n.jsx)(t.li,{children:"Footer is now also displayed in docs page for consistency."}),"\n",(0,n.jsx)(t.li,{children:"Remove empty doc sidebar container if sidebar for a particular doc page does not exist. Otherwise, it will cause an additional empty space."}),"\n",(0,n.jsx)(t.li,{children:"Default PostCSS loader now only polyfills stage 3+ features (previously it was stage 2) like Create React App. Stage 2 CSS is considered relatively unstable and subject to change while Stage 3 features will likely become a standard."}),"\n",(0,n.jsx)(t.li,{children:"Fix search bar focus bug. When you put the focus on search input, previously the focus will remain although we have clicked to other area outside of the search input."}),"\n",(0,n.jsxs)(t.li,{children:["New themeConfig option ",(0,n.jsx)(t.code,{children:"sidebarCollapsible"}),". It is on by default. If explicitly set to ",(0,n.jsx)(t.code,{children:"false"}),", all doc items in sidebar is expanded. Otherwise, it will still be a collapsible sidebar."]}),"\n",(0,n.jsx)(t.li,{children:"Disable adding hashes to the generated class names of CSS modules in dev mode. Generating unique identifiers takes some time, which can be saved since including paths to files in class names is enough to avoid collisions."}),"\n",(0,n.jsx)(t.li,{children:"Fix showing sidebar category with empty items."}),"\n",(0,n.jsxs)(t.li,{children:["Update infima from 0.2.0-alpha.2 to 0.2.0-alpha.3\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Fix pagination nav and right sidebar color contrast ratio"}),"\n",(0,n.jsx)(t.li,{children:"Fix sidebar arrow color in dark mode"}),"\n",(0,n.jsx)(t.li,{children:"Fix footer mobile issue"}),"\n",(0,n.jsx)(t.li,{children:"Increase sidebar width"}),"\n",(0,n.jsx)(t.li,{children:"etc"}),"\n"]}),"\n"]}),"\n"]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>o});var n=i(27378);const s={},a=n.createContext(s);function o(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5665a0fb.121469e2.js b/assets/js/5665a0fb.121469e2.js new file mode 100644 index 0000000000..06f7137cec --- /dev/null +++ b/assets/js/5665a0fb.121469e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72135],{6290:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var i=t(24246),s=t(71670);const l={sidebar_position:3},a="I18n lifecycles",o={id:"api/plugin-methods/i18n-lifecycles",title:"I18n lifecycles",description:"Plugins use these lifecycles to load i18n-related data.",source:"@site/docs/api/plugin-methods/i18n-lifecycles.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/i18n-lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/i18n-lifecycles.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"api",previous:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"},next:{title:"Static methods",permalink:"/docs/api/plugin-methods/static-methods"}},r={},c=[{value:"<code>getTranslationFiles({content})</code>",id:"getTranslationFiles",level:2},{value:"<code>translateContent({content,translationFiles})</code>",id:"translateContent",level:2},{value:"<code>translateThemeConfig({themeConfig,translationFiles})</code>",id:"translateThemeConfig",level:2},{value:"<code>async getDefaultCodeTranslationMessages()</code>",id:"getDefaultCodeTranslationMessages",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"i18n-lifecycles",children:"I18n lifecycles"}),"\n",(0,i.jsx)(n.p,{children:"Plugins use these lifecycles to load i18n-related data."}),"\n",(0,i.jsx)(n.h2,{id:"getTranslationFiles",children:(0,i.jsx)(n.code,{children:"getTranslationFiles({content})"})}),"\n",(0,i.jsx)(n.p,{children:"Plugins declare the JSON translation files they want to use."}),"\n",(0,i.jsxs)(n.p,{children:["Returns translation files ",(0,i.jsx)(n.code,{children:"{path: string, content: ChromeI18nJSON}"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"path"}),": relative to the plugin localized folder ",(0,i.jsx)(n.code,{children:"i18n/[locale]/[pluginName]"}),". Extension ",(0,i.jsx)(n.code,{children:".json"})," should be omitted to remain generic."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"content"}),": using the Chrome i18n JSON format."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["These files will be written by the ",(0,i.jsxs)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:[(0,i.jsx)(n.code,{children:"write-translations"})," CLI"]})," to the plugin i18n subfolder, and will be read in the appropriate locale before calling ",(0,i.jsx)(n.a,{href:"#translateContent",children:(0,i.jsx)(n.code,{children:"translateContent()"})})," and ",(0,i.jsx)(n.a,{href:"#translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig()"})})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n async getTranslationFiles({content}) {\n return [\n {\n path: 'sidebar-labels',\n content: {\n someSidebarLabel: {\n message: 'Some Sidebar Label',\n description: 'A label used in my plugin in the sidebar',\n },\n someLabelFromContent: content.myLabel,\n },\n },\n ];\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateContent",children:(0,i.jsx)(n.code,{children:"translateContent({content,translationFiles})"})}),"\n",(0,i.jsx)(n.p,{children:"Translate the plugin content, using the localized translation files."}),"\n",(0,i.jsx)(n.p,{children:"Returns the localized plugin content."}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"contentLoaded()"})," lifecycle will be called with the localized plugin content returned by ",(0,i.jsx)(n.code,{children:"translateContent()"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-plugin',\n // highlight-start\n translateContent({content, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...content,\n someContentLabel: myTranslationFile.someContentLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translateThemeConfig",children:(0,i.jsx)(n.code,{children:"translateThemeConfig({themeConfig,translationFiles})"})}),"\n",(0,i.jsxs)(n.p,{children:["Translate the site ",(0,i.jsx)(n.code,{children:"themeConfig"})," labels, using the localized translation files."]}),"\n",(0,i.jsxs)(n.p,{children:["Returns the localized ",(0,i.jsx)(n.code,{children:"themeConfig"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n translateThemeConfig({themeConfig, translationFiles}) {\n const myTranslationFile = translationFiles.find(\n (f) => f.path === 'myTranslationFile',\n );\n return {\n ...themeConfig,\n someThemeConfigLabel: myTranslationFile.someThemeConfigLabel.message,\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"getDefaultCodeTranslationMessages",children:(0,i.jsx)(n.code,{children:"async getDefaultCodeTranslationMessages()"})}),"\n",(0,i.jsxs)(n.p,{children:["Themes using the ",(0,i.jsx)(n.code,{children:"<Translate>"})," API can provide default code translation messages."]}),"\n",(0,i.jsxs)(n.p,{children:["It should return messages in ",(0,i.jsx)(n.code,{children:"Record<string, string>"}),", where keys are translation IDs and values are messages (without the description) localized using the site's current locale."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="my-plugin.js"',children:"export default function (context, options) {\n return {\n name: 'my-theme',\n // highlight-start\n async getDefaultCodeTranslationMessages() {\n return readJsonFile(`${context.i18n.currentLocale}.json`);\n },\n // highlight-end\n };\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var i=t(27378);const s={},l=i.createContext(s);function a(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5696d949.2a2302ef.js b/assets/js/5696d949.2a2302ef.js new file mode 100644 index 0000000000..aa22c5380c --- /dev/null +++ b/assets/js/5696d949.2a2302ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15097],{21638:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>i});var a=n(24246),r=n(71670);const o={mdx:{format:"md"},date:"2019-10-12T20:00"},s="2.0.0-alpha.26",c={permalink:"/changelog/2.0.0-alpha.26",source:"@site/changelog/source/2.0.0-alpha.26.md",title:"2.0.0-alpha.26",description:"- Docs, pages plugin is rewritten in TypeScript",date:"2019-10-12T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-12T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.27",permalink:"/changelog/2.0.0-alpha.27"},nextItem:{title:"2.0.0-alpha.25",permalink:"/changelog/2.0.0-alpha.25"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function p(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(p,{...e})}):p()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const r={},o=a.createContext(r);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/575718d1.f95d515c.js b/assets/js/575718d1.f95d515c.js new file mode 100644 index 0000000000..0a116f28a9 --- /dev/null +++ b/assets/js/575718d1.f95d515c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74768],{87739:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},13381:(e,n,s)=>{s.d(n,{Z:()=>i});var r=s(24246),t=(s(27378),s(6698));function i({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(t.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,n,s)=>{s.d(n,{Z:()=>d});var r=s(24246),t=(s(27378),s(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function o(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function a(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},r=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),r.forEach((function(n){o(e,n,s[n])}))}return e}function c(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,r)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function d({children:e,minHeight:n,url:s="http://localhost:3000",style:o,bodyStyle:d}){return(0,r.jsxs)("div",{className:i.browserWindow,style:c(a({},o),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,t.Z)(i.browserWindowAddressBar,"text--truncate"),children:s}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:d,children:e})]})}},78717:(e,n,s)=>{s.d(n,{Z:()=>r});const r=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},92471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=s(24246),t=s(71670),i=s(13381);const o={title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-10-31T00:00:00.000Z")},a=void 0,c={permalink:"/blog/releases/3.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx",source:"@site/blog/releases/3.0/index.mdx",title:"Announcing Docusaurus 3.0",description:"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73",date:"2023-10-31T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:10.515,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-10-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1700717294e3,lastUpdatedBy:"ozaki",prevItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"},nextItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"}},d={image:s(87739).Z,authorsImageUrls:[void 0]},l=[{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Highlights",id:"highlights",level:2},{value:"Markdown",id:"markdown",level:3},{value:"ESM and TypeScript configs",id:"esm-ts-configs",level:3},{value:"Unlisted content",id:"unlisted-content",level:3},{value:"React 18",id:"react-18",level:3},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"Debug builds",id:"debug-builds",level:3},{value:"TypeScript",id:"typescript",level:3},{value:"Code blocks",id:"code-blocks",level:3},{value:"Mermaid diagrams",id:"mermaid-diagrams",level:3},{value:"Query-string data attributes",id:"query-string-data-attributes",level:3},{value:"Other features",id:"other-features",level:3},{value:"Conclusion",id:"conclusion",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Today, we are happy to ",(0,r.jsx)(n.strong,{children:"announce Docusaurus 3.0"}),"! \ud83e\udd73"]}),"\n",(0,r.jsxs)(n.p,{children:["At ",(0,r.jsx)(n.a,{href:"https://opensource.fb.com/",children:(0,r.jsx)(n.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,r.jsx)(n.strong,{children:"best documentation websites"})," with ",(0,r.jsx)(n.strong,{children:"minimal effort"}),", letting you ",(0,r.jsx)(n.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,r.jsxs)(n.p,{children:["This is a new ",(0,r.jsx)(n.strong,{children:"major version"})," of Docusaurus, coming with ",(0,r.jsx)(n.strong,{children:"new exciting features"})," and upgraded dependencies."]}),"\n",(0,r.jsxs)(n.p,{children:["In line with the ",(0,r.jsx)(n.a,{href:"https://semver.org/",children:(0,r.jsx)(n.strong,{children:"Semantic Versioning"})})," principles, this release includes ",(0,r.jsx)(n.strong,{children:"breaking changes"})," we documented thoroughly in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3/",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),". Breaking changes can be bothersome, but they are necessary to set the ground for a ",(0,r.jsx)(n.strong,{children:"new wave of Docusaurus features"})," we plan to implement."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"v3.0 social-card image",src:s(78717).Z+"",width:"1200",height:"600"})}),"\n","\n",(0,r.jsxs)(n.p,{children:["We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, ",(0,r.jsx)(n.strong,{children:"upgrading to MDX v3"})," is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"compatibility options for MDX v1"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"Prepare your site"})," ahead of time, incrementally, while staying on Docusaurus v2"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"Set up visual regression tests"})," to catch unexpected visual changes happening during the upgrade"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"About Docusaurus v2",type:"info",children:(0,r.jsxs)(n.p,{children:["According to our ",(0,r.jsx)(n.a,{href:"/community/release-process#stable-version",children:"release process"}),", Docusaurus v2 has now entered ",(0,r.jsx)(n.strong,{children:"maintenance mode"}),". It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3."]})}),"\n","\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.p,{children:["This section only gives you a quick glance. All the breaking changes are thoroughly documented in the ",(0,r.jsx)(n.a,{href:"/docs/migration/v3",children:(0,r.jsx)(n.strong,{children:"v3 upgrade guide"})}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Node.js v16 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"React v17 \u27a1\ufe0f v18"}),"\n",(0,r.jsx)(n.li,{children:"MDX v1 \u27a1\ufe0f v3"}),"\n",(0,r.jsx)(n.li,{children:"TypeScript v4 \u27a1\ufe0f v5"}),"\n",(0,r.jsx)(n.li,{children:"prism-react-renderer v1 \u27a1\ufe0f v2"}),"\n",(0,r.jsx)(n.li,{children:"react-live v2 \u27a1\ufe0f v4"}),"\n",(0,r.jsx)(n.li,{children:"Mermaid v9 \u27a1\ufe0f v10"}),"\n",(0,r.jsx)(n.li,{children:"import-fresh v3 \u27a1\ufe0f jiti v1"}),"\n",(0,r.jsx)(n.li,{children:"remark-emoji v2 \u27a1\ufe0f v4"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["A typical ",(0,r.jsx)(n.code,{children:"package.json"})," dependency upgrade looks like:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new default blog RSS feed limit of 20 entries"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:"#9308"}),": fix and re-introduce the ",(0,r.jsx)(n.code,{children:":::warning"})," admonition, deprecate ",(0,r.jsx)(n.code,{children:":::caution"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"#9310"}),": remove the legacy versioned sidebar id prefix, used for sites versioned before ",(0,r.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"#7966"}),": refactor docs theme components, eventually requiring to you re-swizzle them"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"highlights",children:"Highlights"}),"\n",(0,r.jsxs)(n.p,{children:["Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"markdown",children:"Markdown"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 upgraded from MDX v1 to MDX v3:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8288",children:"#8288"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,r.jsx)(n.strong,{children:"MDX v2"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"migration guide"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["in ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9451",children:"#9451"}),", we upgraded to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,r.jsx)(n.strong,{children:"MDX v3"})})," (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"migration guide"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This new MDX version is ",(0,r.jsx)(n.strong,{children:"much better for content writers and plugin authors"}),", and lays the ground for implementing new exciting Markdown features."]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX v3 - the main challenge",type:"warning",children:[(0,r.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,r.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3."]}),(0,r.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,r.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3, while others might ",(0,r.jsx)(n.strong,{children:"render differently"}),"."]}),(0,r.jsxs)(n.p,{children:["Most breaking changes come from ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"}),", and ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," is a relatively small release. The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Don't be intimidated"}),". Most problems are ",(0,r.jsx)(n.strong,{children:"easy to fix"})," and often related to ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"})," characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command ",(0,r.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,r.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," to help you get an estimate of the work to be done, and we recommend to ",(0,r.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"prepare your site in advance"}),"."]}),(0,r.jsxs)(n.p,{children:["If you created custom ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/plugins",children:"MDX plugins"})," (Remark/Rehype), the AST is slightly different, and you might need to refactor them."]})]}),"\n",(0,r.jsxs)(n.p,{children:["This notably enables us to add a ",(0,r.jsx)(n.a,{href:"/docs/markdown-features#mdx-vs-commonmark",children:"CommonMark mode"})," that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and ",(0,r.jsx)(n.strong,{children:"experimental"})," and limited (",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"some Docusaurus features will not work"}),"). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret ",(0,r.jsx)(n.code,{children:".md"})," files as CommonMark in an upcoming major version, and recommend to use the ",(0,r.jsx)(n.code,{children:".mdx"})," extension for any file using JSX or ES modules."]}),"\n",(0,r.jsxs)(n.p,{children:["We also introduced a new way to ",(0,r.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"configure Markdown globally for your site"}),", and plan to add more flexible options later."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n format: 'mdx',\n mermaid: true,\n preprocessor: ({filePath, fileContent}) => {\n return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n },\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"})," plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own ",(0,r.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"custom directives"})," such as ",(0,r.jsx)(n.code,{children:":textDirective"}),", ",(0,r.jsx)(n.code,{children:"::leafDirective"})," or ",(0,r.jsx)(n.code,{children:":::containerDirective"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"esm-ts-configs",children:"ESM and TypeScript configs"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9317",children:"#9317"}),", we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets."]}),"\n",(0,r.jsx)(n.p,{children:"Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n // your site config ...\n presets: [\n [\n 'classic',\n {\n // your preset config ...\n } satisfies Preset.Options,\n ],\n ],\n themeConfig: {\n // your theme config ...\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="sidebars.ts"',children:"import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n\nconst sidebars: SidebarsConfig = {\n docs: ['introduction'],\n};\n\nexport default sidebars;\n"})}),"\n",(0,r.jsx)(n.h3,{id:"unlisted-content",children:"Unlisted content"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus already supported a ",(0,r.jsx)(n.code,{children:"draft: true"})," front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds."]}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8004",children:"#8004"}),", we introduced a new ",(0,r.jsx)(n.code,{children:"unlisted: true"}),' front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.']}),"\n",(0,r.jsx)(n.p,{children:"Unlisted content will:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["be excluded from ",(0,r.jsx)(n.code,{children:"sitemap.xml"})]}),"\n",(0,r.jsxs)(n.li,{children:["be excluded from SEO results thanks to ",(0,r.jsx)(n.code,{children:'<meta name="robots" content="noindex, nofollow" />'})]}),"\n",(0,r.jsx)(n.li,{children:"be excluded from blog RSS feeds"}),"\n",(0,r.jsx)(n.li,{children:"be excluded from Algolia DocSearch results"}),"\n",(0,r.jsx)(n.li,{children:"be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages..."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an ",(0,r.jsx)(n.a,{href:"/tests/blog/unlisted-post",children:"unlisted blog post"}),":"]}),"\n",(0,r.jsx)(i.Z,{url:"/tests/blog/unlisted-post"}),"\n",(0,r.jsx)(n.h3,{id:"react-18",children:"React 18"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8961",children:"#8961"}),", we upgraded to React 18. This is important, notably for the ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18#gradually-adopting-concurrent-features",children:"gradual adoption of Concurrent React features"}),", as well as upcoming exciting features such as ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9089",children:"build-time React Server Components"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", notably the new ",(0,r.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide#automatic-batching",children:"automatic batching"})," behavior."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,r.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"startTransition()"})}),"\n"]}),(0,r.jsxs)(n.p,{children:["Their Docusaurus support is considered as ",(0,r.jsx)(n.strong,{children:"experimental"}),". We might have to adjust the integration in the future, leading to a different runtime behavior."]})]}),"\n",(0,r.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus now uses the ",(0,r.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,r.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,r.jsx)(n.h3,{id:"debug-builds",children:"Debug builds"}),"\n",(0,r.jsx)(n.p,{children:"It is now possible to build your static site in dev mode."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docusaurus build --dev\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Debug React-related problems",type:"tip",children:[(0,r.jsxs)(n.p,{children:["Docusaurus will log more errors to the console, notably React 18 hydration errors through the new ",(0,r.jsxs)(n.a,{href:"https://react.dev/reference/react-dom/client/hydrateRoot#parameters",children:[(0,r.jsx)(n.code,{children:"onRecoverableError"})," callback"]}),"."]}),(0,r.jsxs)(n.p,{children:["This new build mode is particularly helpful for ",(0,r.jsx)(n.strong,{children:"troubleshooting React problems"}),". Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the ",(0,r.jsx)(n.a,{href:"https://reactjs.org/docs/error-decoder.html/",children:"React Error Decoder page"}),"."]})]}),"\n",(0,r.jsx)(n.h3,{id:"typescript",children:"TypeScript"}),"\n",(0,r.jsx)(n.p,{children:"Docusaurus v3 now requires a minimum version of TypeScript 5.0."}),"\n",(0,r.jsx)(n.p,{children:"We re-internalized the base recommended TypeScript config to a new official package:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new ",(0,r.jsx)(n.a,{href:"#esm-ts-configs",children:"TypeScript config files"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type {Options, ThemeConfig} from '@docusaurus/preset-classic';\nimport type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n"})}),"\n",(0,r.jsx)(n.h3,{id:"code-blocks",children:"Code blocks"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9316",children:"#9316"}),", we improved on syntax highlighting thanks to the ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:"prism-react-renderer"})," v2 upgrade. For example, a bash param ",(0,r.jsx)(n.code,{children:"--save"})," is now colored:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save some-package\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," also upgrades to ",(0,r.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:"react-live"})," v4, coming with a new ",(0,r.jsx)(n.a,{href:"https://github.com/alangpierce/sucrase",children:"sucrase"})," compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:"live",live:!0,children:"function Hello() {\n const name: string = 'World';\n return <div>Hello {name}</div>;\n}\n"})}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8982",children:"#8982"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8870",children:"#8870"}),", we also added ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#custom-magic-comments",children:"magic comments"})," support for TeX-like, Haskell-like, and WebAssembly comment syntax."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(n.h3,{id:"mermaid-diagrams",children:"Mermaid diagrams"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9305",children:"#9305"}),", we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams."]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Mindmap"}),(0,r.jsx)(n.mermaid,{value:"mindmap\n root((mindmap))\n Research\n Creative techniques\n Strategic planning\n Argument mapping\n Tools\n Pen and paper\n Mermaid"})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:"Quadrant chart"}),(0,r.jsx)(n.mermaid,{value:"quadrantChart\n title Reach and engagement of campaigns\n x-axis Low Reach --\x3e High Reach\n y-axis Low Engagement --\x3e High Engagement\n quadrant-1 We should expand\n quadrant-2 Need to promote\n quadrant-3 Re-evaluate\n quadrant-4 May be improved\n Campaign A: [0.3, 0.6]\n Campaign B: [0.45, 0.23]\n Campaign C: [0.57, 0.69]\n Campaign D: [0.78, 0.34]\n Campaign E: [0.40, 0.34]\n Campaign F: [0.35, 0.78]"})]}),"\n",(0,r.jsx)(n.h3,{id:"query-string-data-attributes",children:"Query-string data attributes"}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9028"}),", we made it possible to set custom HTML ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*",children:"data attributes"})," though ",(0,r.jsx)(n.code,{children:"docusaurus-data-x"})," query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(i.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(n.h3,{id:"other-features",children:"Other features"}),"\n",(0,r.jsx)(n.p,{children:"Other new features worth mentioning:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9189",children:"#9189"}),": new blog ",(0,r.jsx)(n.code,{children:"feedOptions.limit"})," option"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9071",children:"#9071"}),": add normalized SEO front matter support for the pages plugin"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9028",children:"#9171"}),": the client-redirects plugin now supports fully qualified urls and query-string/hash in destination url"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9171",children:"#9171"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links",children:(0,r.jsx)(n.code,{children:"no-html-links"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/8384",children:"#8384"}),": new ESLint rule ",(0,r.jsx)(n.a,{href:"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading",children:(0,r.jsx)(n.code,{children:"prefer-docusaurus-heading"})})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Read ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,r.jsx)(n.strong,{children:"Docusaurus v3.0.0 release notes"})})," for an exhaustive list of changes."]}),"\n",(0,r.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,r.jsxs)(n.p,{children:["This release comes with a few features, but more importantly ",(0,r.jsx)(n.strong,{children:"upgrades many pieces of the Docusaurus infrastructure"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"MDX upgrade"})," consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you."]}),"\n",(0,r.jsxs)(n.p,{children:["Now that we've caught up with our infrastructure, we'll be back ",(0,r.jsx)(n.strong,{children:"delivering useful documentation features"})," very soon, in upcoming minor versions."]}),"\n",(0,r.jsxs)(n.p,{children:["We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a ",(0,r.jsx)(n.strong,{children:"competitive solution"})," that stands out for its great ",(0,r.jsx)(n.strong,{children:"flexibility"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var r=s(27378);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/575b7f6e.58b5cd29.js b/assets/js/575b7f6e.58b5cd29.js new file mode 100644 index 0000000000..2c7814d9cf --- /dev/null +++ b/assets/js/575b7f6e.58b5cd29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[85433],{40847:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>c,contentTitle:()=>n,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var r=i(24246),h=i(71670);const t={mdx:{format:"md"},date:"2020-09-11T20:00",authors:["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},n="2.0.0-alpha.64",l={permalink:"/changelog/2.0.0-alpha.64",source:"@site/changelog/source/2.0.0-alpha.64.md",title:"2.0.0-alpha.64",description:"New Feature",date:"2020-09-11T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ash",alias:"ashscodes",url:"https://github.com/ashscodes",imageURL:"https://github.com/ashscodes.png",key:"ashscodes"},{name:"josephMG",alias:"josephMG",url:"https://github.com/josephMG",imageURL:"https://github.com/josephMG.png",key:"josephMG"},{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"Rutik Wankhade",alias:"rutikwankhade",url:"https://github.com/rutikwankhade",imageURL:"https://github.com/rutikwankhade.png",key:"rutikwankhade"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Thad Guidry",alias:"thadguidry",url:"https://github.com/thadguidry",imageURL:"https://github.com/thadguidry.png",key:"thadguidry"}],frontMatter:{mdx:{format:"md"},date:"2020-09-11T20:00",authors:["ashscodes","josephMG","mpsq","rutikwankhade","Simek","slorber","thadguidry"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.65",permalink:"/changelog/2.0.0-alpha.65"},nextItem:{title:"2.0.0-alpha.63",permalink:"/changelog/2.0.0-alpha.63"},listPageLink:"/changelog/page/3"},c={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 7",id:"committers-7",level:2}];function o(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3432",children:"#3432"})," feat(v2): add style property to theme-classic navbar (",(0,r.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3406",children:"#3406"})," feat(v2): ability to add/override theme html metadatas (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3426",children:"#3426"})," feat(v2): add option to add trailing slash to urls in sitemap (",(0,r.jsx)(s.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Other\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3438",children:"#3438"})," fix(v2): docusaurus 2 PWA should work under baseurl (deploy previews) (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3435",children:"#3435"})," fix(v2): fix empty link error message (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3436",children:"#3436"})," fix(v2): Correctly resolve sw.js path on windows (",(0,r.jsx)(s.a,{href:"https://github.com/ashscodes",children:"@ashscodes"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3433",children:"#3433"})," fix(v2): fix theme-classic announcement bar closeable style (",(0,r.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-1.x"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3429",children:"#3429"})," fix(v1): versioned_docs and skip-next-release relative path issue (",(0,r.jsx)(s.a,{href:"https://github.com/josephMG",children:"@josephMG"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3418",children:"#3418"})," fix(v2): reset sidebar state on sidebar changes (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-debug"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3405",children:"#3405"})," fix(v2): fix debug plugin unscoped inline code global css (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3428",children:"#3428"})," docs(v2): fix grammar (",(0,r.jsx)(s.a,{href:"https://github.com/thadguidry",children:"@thadguidry"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3425",children:"#3425"})," docs(v2): mention Eta in ssrTemplate section (",(0,r.jsx)(s.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3423",children:"#3423"})," docs(v2): minor typo fix (",(0,r.jsx)(s.a,{href:"https://github.com/rutikwankhade",children:"@rutikwankhade"}),")"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,r.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,r.jsx)(s.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3439",children:"#3439"})," chore(v2): fix serialize-javascript security issue by upgrading webpack/workbox (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["Other\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3401",children:"#3401"})," chore(deps): bump decompress from 4.2.0 to 4.2.1 (",(0,r.jsx)(s.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"committers-7",children:"Committers: 7"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["Ash (",(0,r.jsx)(s.a,{href:"https://github.com/ashscodes",children:"@ashscodes"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Bartosz Kaszubowski (",(0,r.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["M\xe9ril (",(0,r.jsx)(s.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Rutik Wankhade (",(0,r.jsx)(s.a,{href:"https://github.com/rutikwankhade",children:"@rutikwankhade"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["Thad Guidry (",(0,r.jsx)(s.a,{href:"https://github.com/thadguidry",children:"@thadguidry"}),")"]}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"https://github.com/josephMG",children:"@josephMG"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,h.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>l,a:()=>n});var r=i(27378);const h={},t=r.createContext(h);function n(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(h):e.components||h:n(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5785f4e1.e4a608b9.js b/assets/js/5785f4e1.e4a608b9.js new file mode 100644 index 0000000000..a81eb2ba70 --- /dev/null +++ b/assets/js/5785f4e1.e4a608b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1040],{61132:(e,s,a)=>{a.d(s,{Z:()=>l});var n=a(24246),t=(a(27378),a(40624));const r={tabItem:"tabItem_pnkT"};function l({children:e,hidden:s,className:a}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,a),hidden:s,children:e})}},97555:(e,s,a)=>{a.d(s,{Z:()=>M});var n=a(24246),t=a(27378),r=a(40624),l=a(75527),i=a(3620),c=a(44479),m=a(62821),o=a(52196),h=a(53589);function d(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function x(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function p(e){var s,a;return null!==(a=null===(s=t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===s?void 0:s.filter(Boolean))&&void 0!==a?a:[]}function u(e){const{values:s,children:a}=e;return(0,t.useMemo)((()=>{const e=null!=s?s:function(e){return p(e).map((({props:{value:e,label:s,attributes:a,default:n}})=>({value:e,label:s,attributes:a,default:n})))}(a);return function(e){const s=(0,o.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,a])}function j({value:e,tabValues:s}){return s.some((s=>s.value===e))}function g({queryString:e=!1,groupId:s}){const a=(0,i.k6)(),n=function({queryString:e=!1,groupId:s}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=s?s:null}({queryString:e,groupId:s}),r=(0,m._X)(n),l=(0,t.useCallback)((e=>{if(!n)return;const s=new URLSearchParams(a.location.search);s.set(n,e),a.replace(x(function(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){d(e,s,a[s])}))}return e}({},a.location),{search:s.toString()}))}),[n,a]);return[r,l]}function f(e){const{defaultValue:s,queryString:a=!1,groupId:n}=e,r=u(e),[l,i]=(0,t.useState)((()=>function({defaultValue:e,tabValues:s}){if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!j({value:e,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var a;const n=null!==(a=s.find((e=>e.default)))&&void 0!==a?a:s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[m,o]=g({queryString:a,groupId:n}),[d,x]=function({groupId:e}){const s=function(e){return e?`docusaurus.tab.${e}`:null}(e),[a,n]=(0,h.Nk)(s);return[a,(0,t.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:n}),p=(()=>{const e=null!=m?m:d;return j({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{p&&i(p)}),[p]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!j({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),o(e),x(e)}),[o,x,r]),tabValues:r}}var b=a(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function N(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function w(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){N(e,s,a[s])}))}return e}function k(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function v({className:e,block:s,selectedValue:a,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),o=e=>{const s=e.currentTarget,n=c.indexOf(s),r=i[n].value;r!==a&&(m(s),t(r))},h=e=>{let s=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var a;s=null!==(a=c[n])&&void 0!==a?a:c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;var n;s=null!==(n=c[a])&&void 0!==n?n:c[c.length-1];break}}null==s||s.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},e),children:i.map((({value:e,label:s,attributes:t})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:a===e?0:-1,"aria-selected":a===e,ref:e=>c.push(e),onKeyDown:h,onClick:o},t),{className:(0,r.Z)("tabs__item",y.tabItem,null==t?void 0:t.className,{"tabs__item--active":a===e}),children:null!=s?s:e}),e)))})}function O({lazy:e,children:s,selectedValue:a}){const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===a));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==a})))})}function R(e){const s=f(e);return(0,n.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,n.jsx)(v,w({},e,s)),(0,n.jsx)(O,w({},e,s))]})}function M(e){const s=(0,b.Z)();return(0,n.jsx)(R,k(w({},e),{children:p(e.children)}),String(s))}},6698:(e,s,a)=>{a.d(s,{Z:()=>m});var n=a(24246),t=(a(27378),a(40624));const r={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function l(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function i(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable})))),n.forEach((function(s){l(e,s,a[s])}))}return e}function c(e,s){return s=null!=s?s:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):function(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,n)}return a}(Object(s)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(s,a))})),e}function m({children:e,minHeight:s,url:a="http://localhost:3000",style:l,bodyStyle:m}){return(0,n.jsxs)("div",{className:r.browserWindow,style:c(i({},l),{minHeight:s}),children:[(0,n.jsxs)("div",{className:r.browserWindowHeader,children:[(0,n.jsxs)("div",{className:r.buttons,children:[(0,n.jsx)("span",{className:r.dot,style:{background:"#f25f58"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#fbbe3c"}}),(0,n.jsx)("span",{className:r.dot,style:{background:"#58cb42"}})]}),(0,n.jsx)("div",{className:(0,t.Z)(r.browserWindowAddressBar,"text--truncate"),children:a}),(0,n.jsx)("div",{className:r.browserWindowMenuIcon,children:(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar}),(0,n.jsx)("span",{className:r.bar})]})})]}),(0,n.jsx)("div",{className:r.browserWindowBody,style:m,children:e})]})}},11415:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>h,contentTitle:()=>m,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var n=a(24246),t=a(71670),r=a(97555),l=a(61132),i=a(6698);const c={id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},m="Math Equations",o={id:"guides/markdown-features/math-equations",title:"Math Equations",description:"Writing LaTeX Math Equations",source:"@site/docs/guides/markdown-features/markdown-features-math-equations.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/math-equations",permalink:"/docs/markdown-features/math-equations",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-math-equations.mdx",tags:[],version:"current",lastUpdatedBy:"Arthur",lastUpdatedAt:1703247325e3,frontMatter:{id:"math-equations",description:"Writing LaTeX Math Equations",slug:"/markdown-features/math-equations"},sidebar:"docs",previous:{title:"MDX Plugins",permalink:"/docs/markdown-features/plugins"},next:{title:"Diagrams",permalink:"/docs/markdown-features/diagrams"}},h={},d=[{value:"Usage",id:"usage",level:2},{value:"Inline",id:"inline",level:3},{value:"Blocks",id:"blocks",level:3},{value:"Enabling math equations",id:"configuration",level:2},{value:"Self-hosting KaTeX assets",id:"self-hosting-katex-assets",level:2}];function x(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",mspace:"mspace",msubsup:"msubsup",msup:"msup",mtext:"mtext",ol:"ol",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",...(0,t.a)(),...e.components},{Details:a}=s;return a||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"math-equations",children:"Math Equations"}),"\n","\n",(0,n.jsxs)(s.p,{children:["Mathematical equations can be rendered using ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsxs)(s.p,{children:["Please read ",(0,n.jsx)(s.a,{href:"https://katex.org",children:"KaTeX"})," documentation for more details."]}),"\n",(0,n.jsx)(s.h3,{id:"inline",children:"Inline"}),"\n",(0,n.jsxs)(s.p,{children:["Write inline math equations by wrapping LaTeX equations between ",(0,n.jsx)(s.code,{children:"$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"Let $f\\colon[a,b]\\to\\R$ be Riemann integrable. Let $F\\colon[a,b]\\to\\R$ be\n$F(x)=\\int_{a}^{x} f(t)\\,dt$. Then $F$ is continuous, and at all $x$ such that\n$f$ is continuous at $x$, $F$ is differentiable at $x$ with $F'(x)=f(x)$.\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(s.p,{children:["Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f\\colon[a,b] \\to \\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be Riemann integrable. Let ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mspace,{}),(0,n.jsx)(s.mspace,{width:"0.1111em"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0.17em"}),(0,n.jsx)(s.mtext,{children:"\u2009\u2063"}),(0,n.jsx)(s.mo,{lspace:"0em",rspace:"0em",children:":"}),(0,n.jsx)(s.mspace,{width:"0.3333em"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"["}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mo,{separator:"true",children:","}),(0,n.jsx)(s.mi,{children:"b"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"]"}),(0,n.jsx)(s.mo,{children:"\u2192"}),(0,n.jsx)(s.mi,{mathvariant:"double-struck",children:"R"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F\\colon[a,b]\\to\\R"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mspace nobreak"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1111em"}}),(0,n.jsx)(s.span,{className:"mpunct"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"-0.1667em"}}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord",children:(0,n.jsx)(s.span,{className:"mrel",children:":"})}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.3333em"}}),(0,n.jsx)(s.span,{className:"mopen",children:"["}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mpunct",children:","}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"b"}),(0,n.jsx)(s.span,{className:"mclose",children:"]"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"\u2192"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6889em"}}),(0,n.jsx)(s.span,{className:"mord mathbb",children:"R"})]})]})]})," be ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"t"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F(x)=\n\\int_{a}^{x} f(t)\\,dt"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.2151em",verticalAlign:"-0.3558em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol small-op",style:{marginRight:"0.19445em",position:"relative",top:"-0.0006em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"0.8593em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.3442em",marginLeft:"-0.1945em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"a"})})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.2579em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mathnormal mtight",children:"x"})})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.3558em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"})]})]})]}),". Then ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is continuous, and at all ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," such that ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"f"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"f"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"})]})})]})," is continuous at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]}),", ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"F"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"})]})})]})," is differentiable at ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsx)(s.mrow,{children:(0,n.jsx)(s.mi,{children:"x"})}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"x"})]})})}),(0,n.jsx)(s.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})})]})," with ",(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsxs)(s.msup,{children:[(0,n.jsx)(s.mi,{children:"F"}),(0,n.jsx)(s.mo,{mathvariant:"normal",lspace:"0em",rspace:"0em",children:"\u2032"})]}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsx)(s.mi,{children:"f"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"F'(x)=f(x)"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1.0019em",verticalAlign:"-0.25em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsx)(s.span,{className:"vlist-t",children:(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.7519em"},children:(0,n.jsxs)(s.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"\u2032"})})})]})})})})})]}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"f"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"})]})]})]}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"blocks",children:"Blocks"}),"\n",(0,n.jsxs)(s.p,{children:["For equation block or display mode, use line breaks and ",(0,n.jsx)(s.code,{children:"$$"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-latex",children:"$$\nI = \\int_0^{2\\pi} \\sin(x)\\,dx\n$$\n"})}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"I"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.msubsup,{children:[(0,n.jsx)(s.mo,{children:"\u222b"}),(0,n.jsx)(s.mn,{children:"0"}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mn,{children:"2"}),(0,n.jsx)(s.mi,{children:"\u03c0"})]})]}),(0,n.jsx)(s.mi,{children:"sin"}),(0,n.jsx)(s.mo,{children:"\u2061"}),(0,n.jsx)(s.mo,{stretchy:"false",children:"("}),(0,n.jsx)(s.mi,{children:"x"}),(0,n.jsx)(s.mo,{stretchy:"false",children:")"}),(0,n.jsx)(s.mtext,{children:"\u2009"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"x"})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"I = \\int_0^{2\\pi} \\sin(x)\\,dx"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.476em",verticalAlign:"-0.9119em"}}),(0,n.jsxs)(s.span,{className:"mop",children:[(0,n.jsx)(s.span,{className:"mop op-symbol large-op",style:{marginRight:"0.44445em",position:"relative",top:"-0.0011em"},children:"\u222b"}),(0,n.jsx)(s.span,{className:"msupsub",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.564em"},children:[(0,n.jsxs)(s.span,{style:{top:"-1.7881em",marginLeft:"-0.4445em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(s.span,{className:"mord mtight",children:"0"})})]}),(0,n.jsxs)(s.span,{style:{top:"-3.8129em",marginRight:"0.05em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(s.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(s.span,{className:"mord mtight",children:[(0,n.jsx)(s.span,{className:"mord mtight",children:"2"}),(0,n.jsx)(s.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"\u03c0"})]})})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.9119em"},children:(0,n.jsx)(s.span,{})})})]})})]}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mop",children:"sin"}),(0,n.jsx)(s.span,{className:"mopen",children:"("}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"}),(0,n.jsx)(s.span,{className:"mclose",children:")"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"x"})]})]})]})})}),"\n",(0,n.jsx)(s.h2,{id:"configuration",children:"Enabling math equations"}),"\n",(0,n.jsx)(s.p,{children:"Enable KaTeX:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Install the ",(0,n.jsx)(s.code,{children:"remark-math"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex"})," plugins:"]}),"\n",(0,n.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"npm install --save remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"yarn add remark-math@6 rehype-katex@7\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"pnpm add remark-math@6 rehype-katex@7\n"})})})]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["Make sure to use ",(0,n.jsx)(s.code,{children:"remark-math 6"})," and ",(0,n.jsx)(s.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["These 2 plugins are ",(0,n.jsx)(s.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,n.jsx)(s.strong,{children:"only available as ES Modules"})}),". We recommended to use an ",(0,n.jsx)(s.a,{href:"https://flaviocopes.com/es-modules/",children:(0,n.jsx)(s.strong,{children:"ES Modules"})})," config file:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="ES module docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\n// highlight-start\nexport default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:(0,n.jsxs)(s.p,{children:["Using a\n",(0,n.jsx)(s.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:(0,n.jsx)(s.strong,{children:"CommonJS"})}),"\nconfig file?"]})}),(0,n.jsx)(s.p,{children:"If you decide to use a CommonJS config file, it is possible to load those ES module plugins thanks to dynamic imports and an async config creator function:"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="CommonJS module docusaurus.config.js"',children:"// highlight-start\nmodule.exports = async function createConfigAsync() {\n // highlight-end\n return {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [(await import('remark-math')).default],\n rehypePlugins: [(await import('rehype-katex')).default],\n // highlight-end\n },\n },\n ],\n ],\n };\n};\n"})})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Include the KaTeX CSS in your config under ",(0,n.jsx)(s.code,{children:"stylesheets"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"export default {\n //...\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n};\n"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("summary",{children:"See a config file example"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"// highlight-start\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\n// highlight-end\n\nexport default {\n title: 'Docusaurus',\n tagline: 'Build optimized websites quickly, focus on your content',\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n path: 'docs',\n // highlight-start\n remarkPlugins: [remarkMath],\n rehypePlugins: [rehypeKatex],\n // highlight-end\n },\n },\n ],\n ],\n // highlight-start\n stylesheets: [\n {\n href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',\n type: 'text/css',\n integrity:\n 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',\n crossorigin: 'anonymous',\n },\n ],\n // highlight-end\n};\n"})})]}),"\n",(0,n.jsx)(s.h2,{id:"self-hosting-katex-assets",children:"Self-hosting KaTeX assets"}),"\n",(0,n.jsxs)(s.p,{children:["Loading stylesheets, fonts, and JavaScript libraries from CDN sources is a good practice for popular libraries and assets, since it reduces the amount of assets you have to host. In case you prefer to self-host the ",(0,n.jsx)(s.code,{children:"katex.min.css"})," (along with required KaTeX fonts), you can download the latest version from ",(0,n.jsx)(s.a,{href:"https://github.com/KaTeX/KaTeX/releases",children:"KaTeX GitHub releases"}),", extract and copy ",(0,n.jsx)(s.code,{children:"katex.min.css"})," and ",(0,n.jsx)(s.code,{children:"fonts"})," directory (only ",(0,n.jsx)(s.code,{children:".woff2"})," font types should be enough) to your site's ",(0,n.jsx)(s.code,{children:"static"})," directory, and in ",(0,n.jsx)(s.code,{children:"docusaurus.config.js"}),", replace the stylesheet's ",(0,n.jsx)(s.code,{children:"href"})," from the CDN URL to your local path (say, ",(0,n.jsx)(s.code,{children:"/katex/katex.min.css"}),")."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n stylesheets: [\n {\n href: '/katex/katex.min.css',\n type: 'text/css',\n },\n ],\n};\n"})})]})}function p(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},71670:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>l});var n=a(27378);const t={},r=n.createContext(t);function l(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/58003.0f2d76e2.js b/assets/js/58003.0f2d76e2.js new file mode 100644 index 0000000000..4fa257c06c --- /dev/null +++ b/assets/js/58003.0f2d76e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58003],{58003:(n,e,t)=>{t.r(e),t.d(e,{Workbox:()=>d,WorkboxEvent:()=>u,messageSW:()=>r});try{self["workbox:window:7.0.0"]&&_()}catch(r){}function r(n,e){return new Promise((function(t){var r=new MessageChannel;r.port1.onmessage=function(n){t(n.data)},n.postMessage(e,[r.port2])}))}function i(n,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}function o(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=new Array(e);t<e;t++)r[t]=n[t];return r}function a(n,e){var t;if("undefined"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(t=function(n,e){if(n){if("string"==typeof n)return o(n,e);var t=Object.prototype.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(n,e):void 0}}(n))||e&&n&&"number"==typeof n.length){t&&(n=t);var r=0;return function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(t=n[Symbol.iterator]()).next.bind(t)}try{self["workbox:core:7.0.0"]&&_()}catch(r){}var s=function(){var n=this;this.promise=new Promise((function(e,t){n.resolve=e,n.reject=t}))};function c(n,e){var t=location.href;return new URL(n,t).href===new URL(e,t).href}var u=function(n,e){this.type=n,Object.assign(this,e)};function f(n,e,t){return t?e?e(n):n:(n&&n.then||(n=Promise.resolve(n)),e?n.then(e):n)}function v(){}var h={type:"SKIP_WAITING"};function l(n,e){if(!e)return n&&n.then?n.then(v):Promise.resolve()}var d=function(n){var e,t;function o(e,t){var r,i;return void 0===t&&(t={}),(r=n.call(this)||this).nn={},r.tn=0,r.rn=new s,r.en=new s,r.on=new s,r.un=0,r.an=new Set,r.cn=function(){var n=r.fn,e=n.installing;r.tn>0||!c(e.scriptURL,r.sn.toString())||performance.now()>r.un+6e4?(r.vn=e,n.removeEventListener("updatefound",r.cn)):(r.hn=e,r.an.add(e),r.rn.resolve(e)),++r.tn,e.addEventListener("statechange",r.ln)},r.ln=function(n){var e=r.fn,t=n.target,i=t.state,o=t===r.vn,a={sw:t,isExternal:o,originalEvent:n};!o&&r.mn&&(a.isUpdate=!0),r.dispatchEvent(new u(i,a)),"installed"===i?r.wn=self.setTimeout((function(){"installed"===i&&e.waiting===t&&r.dispatchEvent(new u("waiting",a))}),200):"activating"===i&&(clearTimeout(r.wn),o||r.en.resolve(t))},r.dn=function(n){var e=r.hn,t=e!==navigator.serviceWorker.controller;r.dispatchEvent(new u("controlling",{isExternal:t,originalEvent:n,sw:e,isUpdate:r.mn})),t||r.on.resolve(e)},r.gn=(i=function(n){var e=n.data,t=n.ports,i=n.source;return f(r.getSW(),(function(){r.an.has(i)&&r.dispatchEvent(new u("message",{data:e,originalEvent:n,ports:t,sw:i}))}))},function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),r.sn=e,r.nn=t,navigator.serviceWorker.addEventListener("message",r.gn),r}t=n,(e=o).prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t;var a,v,d=o.prototype;return d.register=function(n){var e=(void 0===n?{}:n).immediate,t=void 0!==e&&e;try{var r=this;return function(n,e){var t=n();return t&&t.then?t.then(e):e()}((function(){if(!t&&"complete"!==document.readyState)return l(new Promise((function(n){return window.addEventListener("load",n)})))}),(function(){return r.mn=Boolean(navigator.serviceWorker.controller),r.yn=r.pn(),f(r.bn(),(function(n){r.fn=n,r.yn&&(r.hn=r.yn,r.en.resolve(r.yn),r.on.resolve(r.yn),r.yn.addEventListener("statechange",r.ln,{once:!0}));var e=r.fn.waiting;return e&&c(e.scriptURL,r.sn.toString())&&(r.hn=e,Promise.resolve().then((function(){r.dispatchEvent(new u("waiting",{sw:e,wasWaitingBeforeRegister:!0}))})).then((function(){}))),r.hn&&(r.rn.resolve(r.hn),r.an.add(r.hn)),r.fn.addEventListener("updatefound",r.cn),navigator.serviceWorker.addEventListener("controllerchange",r.dn),r.fn}))}))}catch(n){return Promise.reject(n)}},d.update=function(){try{return this.fn?l(this.fn.update()):void 0}catch(r){return Promise.reject(r)}},d.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},d.messageSW=function(n){try{return f(this.getSW(),(function(e){return r(e,n)}))}catch(r){return Promise.reject(r)}},d.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&r(this.fn.waiting,h)},d.pn=function(){var n=navigator.serviceWorker.controller;return n&&c(n.scriptURL,this.sn.toString())?n:void 0},d.bn=function(){try{var n=this;return function(n,e){try{var t=n()}catch(n){return e(n)}return t&&t.then?t.then(void 0,e):t}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(e){return n.un=performance.now(),e}))}),(function(n){throw n}))}catch(n){return Promise.reject(n)}},a=o,(v=[{key:"active",get:function(){return this.en.promise}},{key:"controlling",get:function(){return this.on.promise}}])&&i(a.prototype,v),o}(function(){function n(){this.Pn=new Map}var e=n.prototype;return e.addEventListener=function(n,e){this.Sn(n).add(e)},e.removeEventListener=function(n,e){this.Sn(n).delete(e)},e.dispatchEvent=function(n){n.target=this;for(var e,t=a(this.Sn(n.type));!(e=t()).done;)(0,e.value)(n)},e.Sn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}())}}]); \ No newline at end of file diff --git a/assets/js/5899.cc7d7195.js b/assets/js/5899.cc7d7195.js new file mode 100644 index 0000000000..2b83548e9e --- /dev/null +++ b/assets/js/5899.cc7d7195.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5899],{5899:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(99854),e=(n(27693),n(7608),n(63294),n(31699),function(){var t=function(t,i,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=i);return n},i=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,i,n,s,e,r,h){switch(r.length,e){case 1:return s;case 4:break;case 6:s.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(i,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(i,[2,3]),t(i,[2,4]),t(i,[2,5]),t(i,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,i){if(!i.recoverable){var n=new Error(t);throw n.hash=i,n}this.trace(t)},parse:function(t){var i=this,n=[0],s=[],e=[null],r=[],h=this.table,o="",l=0,c=0,a=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,m,d,k,b,x,v,w,I,S={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==_&&(I=void 0,"number"!=typeof(I=s.pop()||y.lex()||1)&&(I instanceof Array&&(I=(s=I).pop()),I=i.symbols_[I]||I),_=I),d=h[m]&&h[m][_]),void 0===d||!d.length||!d[0]){var E="";for(b in w=[],h[m])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:f,expected:w})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+_);switch(d[0]){case 1:n.push(_),e.push(y.yytext),r.push(y.yylloc),n.push(d[1]),_=null,c=y.yyleng,o=y.yytext,l=y.yylineno,f=y.yylloc;break;case 2:if(x=this.productions_[d[1]][1],S.$=e[e.length-x],S._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&(S._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(S,[o,c,l,u.yy,d[1],e,r].concat(a))))return k;x&&(n=n.slice(0,-1*x*2),e=e.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[d[1]][0]),e.push(S.$),r.push(S._$),v=h[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},s={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var n,s,e;if(this.options.backtrack_lexer&&(e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(e.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in e)this[r]=e[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),r=0;r<e.length;r++)if((n=this._input.match(this.rules[e[r]]))&&(!i||n[0].length>i[0].length)){if(i=n,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,e[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,e[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,n,s){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function e(){this.yy={}}return n.lexer=s,e.prototype=n,n.Parser=e,new e}());e.parser=e;const r=!1;let h=r;const o={parser:e,db:{clear:()=>{h=r},setInfo:t=>{h=t},getInfo:()=>h},renderer:{draw:(t,i,n)=>{s.l.debug("rendering info diagram\n"+t);const e=(0,s.B)(i);(0,s.i)(e,100,400,!0);e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${n}`)}}}}}]); \ No newline at end of file diff --git a/assets/js/59362658.3eb940a7.js b/assets/js/59362658.3eb940a7.js deleted file mode 100644 index 2e64feb35b..0000000000 --- a/assets/js/59362658.3eb940a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[9325],{1180:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>n,metadata:()=>u,toc:()=>l});var s=o(4848),r=o(8453);const n={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},a=void 0,u={permalink:"/blog/mdx-blog-post",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-01-mdx-blog-post.mdx",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},c={authorsImageUrls:[void 0]},l=[];function i(t){const e={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,r.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(e.p,{children:["Blog posts support ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,s.jsx)(e.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,s.jsxs)(e.admonition,{type:"tip",children:[(0,s.jsx)(e.p,{children:"Use the power of React to create interactive blog posts."}),(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-js",children:"<button onClick={() => alert('button clicked!')}>Click me!</button>\n"})}),(0,s.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function d(t={}){const{wrapper:e}={...(0,r.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(i,{...t})}):i(t)}},8453:(t,e,o)=>{o.d(e,{R:()=>a,x:()=>u});var s=o(6540);const r={},n=s.createContext(r);function a(t){const e=s.useContext(n);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:a(t.components),s.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/5985f86d.ead7417d.js b/assets/js/5985f86d.ead7417d.js new file mode 100644 index 0000000000..45c1e8374b --- /dev/null +++ b/assets/js/5985f86d.ead7417d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45687],{16124:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-07-14T19:00"},c="2.0.0-alpha.20",s={permalink:"/changelog/2.0.0-alpha.20",source:"@site/changelog/source/2.0.0-alpha.20.md",title:"2.0.0-alpha.20",description:"- Add copy codeblock button",date:"2019-07-14T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-14T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.21",permalink:"/changelog/2.0.0-alpha.21"},nextItem:{title:"2.0.0-alpha.19",permalink:"/changelog/2.0.0-alpha.19"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function p(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(p,{...e})}):p()}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>c});var a=n(27378);const o={},r=a.createContext(o);function c(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/59cb67ce.2533775d.js b/assets/js/59cb67ce.2533775d.js new file mode 100644 index 0000000000..6ece055987 --- /dev/null +++ b/assets/js/59cb67ce.2533775d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[17490],{97689:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>b,contentTitle:()=>x,default:()=>f,frontMatter:()=>u,metadata:()=>j,toc:()=>g});var s=n(24246),a=n(71670);const i=[{value:"Partial",id:"partial",level:2},{value:"Partial Sub Heading 1",id:"partial-sub-heading-1",level:3},{value:"Partial Sub Sub Heading 1",id:"partial-sub-sub-heading-1",level:4},{value:"Partial Sub Heading 2",id:"partial-sub-heading-2",level:3},{value:"Partial Sub Sub Heading 2",id:"partial-sub-sub-heading-2",level:4}];function r(e){const t={h2:"h2",h3:"h3",h4:"h4",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"partial",children:"Partial"}),"\n",(0,s.jsx)(t.p,{children:"Partial intro"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-1",children:"Partial Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-1",children:"Partial Sub Sub Heading 1"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 1 content"}),"\n",(0,s.jsx)(t.h3,{id:"partial-sub-heading-2",children:"Partial Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Heading 2 content"}),"\n",(0,s.jsx)(t.h4,{id:"partial-sub-sub-heading-2",children:"Partial Sub Sub Heading 2"}),"\n",(0,s.jsx)(t.p,{children:"Partial Sub Sub Heading 2 content"})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}function o(e){const t={h3:"h3",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h3,{id:"2nd-level-partial",children:"2nd level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 2 levels deep."})]})}function c(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}const d=[{value:"1st level partial",id:"1st-level-partial",level:2},{value:"2nd level partial",id:"2nd-level-partial",level:3}];function h(e){const t={h2:"h2",p:"p",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"1st-level-partial",children:"1st level partial"}),"\n",(0,s.jsx)(t.p,{children:"I'm 1 level deep."}),"\n",(0,s.jsx)(c,{})]})}function p(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}const u={},x="TOC partial test",j={id:"tests/toc-partials/index",title:"TOC partial test",description:"This page tests that MDX-imported content appears correctly in the table-of-contents",source:"@site/_dogfooding/_docs tests/tests/toc-partials/index.mdx",sourceDirName:"tests/toc-partials",slug:"/tests/toc-partials/",permalink:"/tests/docs/tests/toc-partials/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Broken Anchors tests",permalink:"/tests/docs/tests/links/broken-anchors-tests"},next:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"}},b={},g=[...i,...i,...d,...d];function m(e){const t={a:"a",h1:"h1",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"toc-partial-test",children:"TOC partial test"}),"\n",(0,s.jsx)(t.p,{children:"This page tests that MDX-imported content appears correctly in the table-of-contents"}),"\n",(0,s.jsx)(t.p,{children:"See also:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/3915",children:"https://github.com/facebook/docusaurus/issues/3915"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9684",children:"https://github.com/facebook/docusaurus/pull/9684"})}),"\n"]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"The table of contents should include headings of this partial"}),":"]}),"\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import the same partial using a different name and it still works"}),":"]}),"\n","\n",(0,s.jsx)(l,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"We can import a partial and not use it, the TOC remains unaffected"}),":"]}),"\n","\n",(0,s.jsx)(t.hr,{}),"\n","\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"It also works for partials importing other partials"})}),"\n",(0,s.jsx)(p,{}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"And we can even use the same partial twice!"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"(although it's useless and not particularly recommended because headings will have the same ids)"})}),"\n",(0,s.jsx)(p,{})]})}function f(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>r});var s=n(27378);const a={},i=s.createContext(a);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b85a2c0.190e081a.js b/assets/js/5b85a2c0.190e081a.js new file mode 100644 index 0000000000..42f820506c --- /dev/null +++ b/assets/js/5b85a2c0.190e081a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65303],{69986:(s,e,c)=>{c.r(e),c.d(e,{assets:()=>n,contentTitle:()=>i,default:()=>a,frontMatter:()=>u,metadata:()=>o,toc:()=>d});var r=c(24246),l=c(71670);const u={mdx:{format:"md"},date:"2020-09-03T20:00",authors:["mpsq","samsisle","Simek","slorber","thadguidry"]},i="2.0.0-alpha.63",o={permalink:"/changelog/2.0.0-alpha.63",source:"@site/changelog/source/2.0.0-alpha.63.md",title:"2.0.0-alpha.63",description:"New Feature",date:"2020-09-03T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"Sam Ko",alias:"samsisle",url:"https://github.com/samsisle",imageURL:"https://github.com/samsisle.png",key:"samsisle"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Thad Guidry",alias:"thadguidry",url:"https://github.com/thadguidry",imageURL:"https://github.com/thadguidry.png",key:"thadguidry"}],frontMatter:{mdx:{format:"md"},date:"2020-09-03T20:00",authors:["mpsq","samsisle","Simek","slorber","thadguidry"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.64",permalink:"/changelog/2.0.0-alpha.64"},nextItem:{title:"2.0.0-alpha.62",permalink:"/changelog/2.0.0-alpha.62"},listPageLink:"/changelog/page/3"},n={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0]},d=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 5",id:"committers-5",level:2}];function t(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3387",children:"#3387"})," feat(v2): allow users to specify a custom ssr HTML template (",(0,r.jsx)(e.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-debug"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3392",children:"#3392"})," feat(v2): officially release @docusaurus/plugin-debug (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3388",children:"#3388"})," feat(v2): add isCloseable property for theme-classic announcement bar (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3373",children:"#3373"})," feat(v2): docs options.onlyIncludeVersions (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3397",children:"#3397"})," fix(v2): DocSearch should keep working after a new release (part 2/2) (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3393",children:"#3393"})," fix(v2): DocSearch should keep working after a new release (part 1/2) (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3381",children:"#3381"})," fix(v2): alpha 62 doc fixes (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3385",children:"#3385"})," fix(v2): scripts should allow unknown values (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3382",children:"#3382"})," fix(v2): allow using classic theme/preset without the docs plugin (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3377",children:"#3377"})," fix(v2): reject routeBasePath: '' (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3390",children:"#3390"})," docs(v1, v2): Update Deploy to Vercel guide (",(0,r.jsx)(e.a,{href:"https://github.com/samsisle",children:"@samsisle"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3344",children:"#3344"})," docs(v2): Update Deploy to Vercel guide (",(0,r.jsx)(e.a,{href:"https://github.com/samsisle",children:"@samsisle"}),")"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3386",children:"#3386"})," chore(v2): pin exact dependency versions (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-1.x"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-init-1.x"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-init"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-module-type-aliases"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-debug"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-pwa"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-preset-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils-validation"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-utils"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),", ",(0,r.jsx)(e.code,{children:"lqip-loader"}),", ",(0,r.jsx)(e.code,{children:"stylelint-copyright"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3359",children:"#3359"})," chore(v2): prepare v2.0.0.alpha-62 release (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"committers-5",children:"Committers: 5"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Bartosz Kaszubowski (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["M\xe9ril (",(0,r.jsx)(e.a,{href:"https://github.com/mpsq",children:"@mpsq"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Sam Ko (",(0,r.jsx)(e.a,{href:"https://github.com/samsisle",children:"@samsisle"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Thad Guidry (",(0,r.jsx)(e.a,{href:"https://github.com/thadguidry",children:"@thadguidry"}),")"]}),"\n"]})]})}function a(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(t,{...s})}):t(s)}},71670:(s,e,c)=>{c.d(e,{Z:()=>o,a:()=>i});var r=c(27378);const l={},u=r.createContext(l);function i(s){const e=r.useContext(u);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function o(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:i(s.components),r.createElement(u.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c640cab.0c18f338.js b/assets/js/5c640cab.0c18f338.js new file mode 100644 index 0000000000..9b51b3f86a --- /dev/null +++ b/assets/js/5c640cab.0c18f338.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[97265],{21223:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=a(24246),i=a(71670);const r={title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},o=void 0,s={permalink:"/blog/2020/01/07/tribute-to-endi",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2020/01-07-tribute-to-endi.mdx",source:"@site/blog/2020/01-07-tribute-to-endi.mdx",title:"Tribute to Endi",description:"It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.",date:"2020-01-07T00:00:00.000Z",tags:[{label:"endi",permalink:"/blog/tags/endi"},{label:"tribute",permalink:"/blog/tags/tribute"}],readingTime:.895,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Tribute to Endi",authors:"JMarcey",tags:["endi","tribute"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"},nextItem:{title:"Docusaurus 2019 Recap",permalink:"/blog/2019/12/30/docusaurus-2019-recap"}},c={authorsImageUrls:[void 0]},u=[];function l(e){const t={a:"a",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(t.p,{children:["It is with great sadness to announce that our primary external Docusaurus contributor, ",(0,n.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"})," (Endi to those who knew him), ",(0,n.jsx)(t.a,{href:"https://give.asia/campaign/help_endi_beat_cancer#/updates",children:"passed away"})," over the weekend after an illness associated with his bout with cancer."]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(27378);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c7aa639.23a80e30.js b/assets/js/5c7aa639.23a80e30.js new file mode 100644 index 0000000000..185a9d0bc8 --- /dev/null +++ b/assets/js/5c7aa639.23a80e30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29289],{48960:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZGIiBkPSJNOTkgNTJoODR2MzRIOTl6Ii8+PHBhdGggZD0iTTIzIDE2M2MtNy4zOTggMC0xMy44NDMtNC4wMjctMTcuMzAzLTEwQTE5Ljg4NiAxOS44ODYgMCAwMDMgMTYzYzAgMTEuMDQ2IDguOTU0IDIwIDIwIDIwaDIwdi0yMEgyM3oiIGZpbGw9IiMzRUNDNUYiLz48cGF0aCBkPSJNMTEyLjk4IDU3LjM3NkwxODMgNTNWNDNjMC0xMS4wNDYtOC45NTQtMjAtMjAtMjBINzNsLTIuNS00LjMzYy0xLjExMi0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNjMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNTMgMjNsLTIuNS00LjMzYy0xLjExMS0xLjkyNS0zLjg4OS0xLjkyNS01IDBMNDMgMjNjLS4wMjIgMC0uMDQyLjAwMy0uMDY1LjAwM2wtNC4xNDItNC4xNDFjLTEuNTctMS41NzEtNC4yNTItLjg1My00LjgyOCAxLjI5NGwtMS4zNjkgNS4xMDQtNS4xOTItMS4zOTJjLTIuMTQ4LS41NzUtNC4xMTEgMS4zODktMy41MzUgMy41MzZsMS4zOSA1LjE5My01LjEwMiAxLjM2N2MtMi4xNDguNTc2LTIuODY3IDMuMjU5LTEuMjk2IDQuODNsNC4xNDIgNC4xNDJjMCAuMDIxLS4wMDMuMDQyLS4wMDMuMDY0bC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDYzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDczbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDgzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDkzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEwM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxMTNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTIzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDEzM2wtNC4zMyAyLjVjLTEuOTI1IDEuMTExLTEuOTI1IDMuODg5IDAgNUwyMyAxNDNsLTQuMzMgMi41Yy0xLjkyNSAxLjExMS0xLjkyNSAzLjg4OSAwIDVMMjMgMTUzbC00LjMzIDIuNWMtMS45MjUgMS4xMTEtMS45MjUgMy44ODkgMCA1TDIzIDE2M2MwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMGgxMjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWODNsLTcwLjAyLTQuMzc2QTEwLjY0NSAxMC42NDUgMCAwMTEwMyA2OGMwLTUuNjIxIDQuMzctMTAuMjczIDkuOTgtMTAuNjI0IiBmaWxsPSIjM0VDQzVGIi8+PHBhdGggZmlsbD0iIzNFQ0M1RiIgZD0iTTE0MyAxODNoMzB2LTQwaC0zMHoiLz48cGF0aCBkPSJNMTkzIDE1OGMtLjIxOSAwLS40MjguMDM3LS42MzkuMDY0LS4wMzgtLjE1LS4wNzQtLjMwMS0uMTE2LS40NTFBNSA1IDAgMDAxOTAuMzIgMTQ4YTQuOTYgNC45NiAwIDAwLTMuMDE2IDEuMDM2IDI2LjUzMSAyNi41MzEgMCAwMC0uMzM1LS4zMzYgNC45NTUgNC45NTUgMCAwMDEuMDExLTIuOTg3IDUgNSAwIDAwLTkuNTk5LTEuOTU5Yy0uMTQ4LS4wNDItLjI5Ny0uMDc3LS40NDUtLjExNS4wMjctLjIxMS4wNjQtLjQyLjA2NC0uNjM5YTUgNSAwIDAwLTUtNSA1IDUgMCAwMC01IDVjMCAuMjE5LjAzNy40MjguMDY0LjYzOS0uMTQ4LjAzOC0uMjk3LjA3My0uNDQ1LjExNWE0Ljk5OCA0Ljk5OCAwIDAwLTkuNTk5IDEuOTU5YzAgMS4xMjUuMzg0IDIuMTUxIDEuMDExIDIuOTg3LTMuNzE3IDMuNjMyLTYuMDMxIDguNjkzLTYuMDMxIDE0LjMgMCAxMS4wNDYgOC45NTQgMjAgMjAgMjAgOS4zMzkgMCAxNy4xNi02LjQxIDE5LjM2MS0xNS4wNjQuMjExLjAyNy40Mi4wNjQuNjM5LjA2NGE1IDUgMCAwMDUtNSA1IDUgMCAwMC01LTUiIGZpbGw9IiM0NEQ4NjAiLz48cGF0aCBmaWxsPSIjM0VDQzVGIiBkPSJNMTUzIDEyM2gzMHYtMjBoLTMweiIvPjxwYXRoIGQ9Ik0xOTMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDE4MyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik02MyA1NS41YTIuNSAyLjUgMCAwMS0yLjUtMi41YzAtNC4xMzYtMy4zNjQtNy41LTcuNS03LjVzLTcuNSAzLjM2NC03LjUgNy41YTIuNSAyLjUgMCAxMS01IDBjMC02Ljg5MyA1LjYwNy0xMi41IDEyLjUtMTIuNVM2NS41IDQ2LjEwNyA2NS41IDUzYTIuNSAyLjUgMCAwMS0yLjUgMi41IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEwMyAxODNoNjBjMTEuMDQ2IDAgMjAtOC45NTQgMjAtMjBWOTNoLTYwYy0xMS4wNDYgMC0yMCA4Ljk1NC0yMCAyMHY3MHoiIGZpbGw9IiNGRkZGNTAiLz48cGF0aCBkPSJNMTY4LjAyIDEyNGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMCAyMGgtNTAuMDRhMSAxIDAgMTEwLTJoNTAuMDRhMSAxIDAgMTEwIDJtMC00OS44MTRoLTUwLjA0YTEgMSAwIDExMC0yaDUwLjA0YTEgMSAwIDExMCAybTAgMTkuODE0aC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMm0wIDIwaC01MC4wNGExIDEgMCAxMTAtMmg1MC4wNGExIDEgMCAxMTAgMk0xODMgNjEuNjExYy0uMDEyIDAtLjAyMi0uMDA2LS4wMzQtLjAwNS0zLjA5LjEwNS00LjU1MiAzLjE5Ni01Ljg0MiA1LjkyMy0xLjM0NiAyLjg1LTIuMzg3IDQuNzAzLTQuMDkzIDQuNjQ3LTEuODg5LS4wNjgtMi45NjktMi4yMDItNC4xMTMtNC40Ni0xLjMxNC0yLjU5NC0yLjgxNC01LjUzNi01Ljk2My01LjQyNi0zLjA0Ni4xMDQtNC41MTMgMi43OTQtNS44MDcgNS4xNjctMS4zNzcgMi41MjgtMi4zMTQgNC4wNjUtNC4xMjEgMy45OTQtMS45MjctLjA3LTIuOTUxLTEuODA1LTQuMTM2LTMuODEzLTEuMzIxLTIuMjM2LTIuODQ4LTQuNzUtNS45MzYtNC42NjQtMi45OTQuMTAzLTQuNDY1IDIuMzg1LTUuNzYzIDQuNC0xLjM3MyAyLjEzLTIuMzM1IDMuNDI4LTQuMTY1IDMuMzUxLTEuOTczLS4wNy0yLjk5Mi0xLjUxLTQuMTcxLTMuMTc3LTEuMzI0LTEuODczLTIuODE2LTMuOTkzLTUuODk1LTMuODktMi45MjguMS00LjM5OSAxLjk3LTUuNjk2IDMuNjE4LTEuMjMyIDEuNTY0LTIuMTk0IDIuODAyLTQuMjI5IDIuNzI0YTEgMSAwIDAwLS4wNzIgMmMzLjAxNy4xMDEgNC41NDUtMS44IDUuODcyLTMuNDg3IDEuMTc3LTEuNDk2IDIuMTkzLTIuNzg3IDQuMTkzLTIuODU1IDEuOTI2LS4wODIgMi44MjkgMS4xMTUgNC4xOTUgMy4wNDUgMS4yOTcgMS44MzQgMi43NjkgMy45MTQgNS43MzEgNC4wMjEgMy4xMDMuMTA0IDQuNTk2LTIuMjE1IDUuOTE4LTQuMjY3IDEuMTgyLTEuODM0IDIuMjAyLTMuNDE3IDQuMTUtMy40ODQgMS43OTMtLjA2NyAyLjc2OSAxLjM1IDQuMTQ1IDMuNjgxIDEuMjk3IDIuMTk3IDIuNzY2IDQuNjg2IDUuNzg3IDQuNzk2IDMuMTI1LjEwOCA0LjYzNC0yLjYyIDUuOTQ5LTUuMDM1IDEuMTM5LTIuMDg4IDIuMjE0LTQuMDYgNC4xMTktNC4xMjYgMS43OTMtLjA0MiAyLjcyOCAxLjU5NSA0LjExMSA0LjMzIDEuMjkyIDIuNTUzIDIuNzU3IDUuNDQ1IDUuODI1IDUuNTU2bC4xNjkuMDAzYzMuMDY0IDAgNC41MTgtMy4wNzUgNS44MDUtNS43OTQgMS4xMzktMi40MSAyLjIxNy00LjY4IDQuMDY3LTQuNzczdi0yeiIgZmlsbD0iIzAwMCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxODNoNDB2LTQwSDgzeiIvPjxwYXRoIGQ9Ik0xNDMgMTU4Yy0uMjE5IDAtLjQyOC4wMzctLjYzOS4wNjQtLjAzOC0uMTUtLjA3NC0uMzAxLS4xMTYtLjQ1MUE1IDUgMCAwMDE0MC4zMiAxNDhhNC45NiA0Ljk2IDAgMDAtMy4wMTYgMS4wMzYgMjYuNTMxIDI2LjUzMSAwIDAwLS4zMzUtLjMzNiA0Ljk1NSA0Ljk1NSAwIDAwMS4wMTEtMi45ODcgNSA1IDAgMDAtOS41OTktMS45NTljLS4xNDgtLjA0Mi0uMjk3LS4wNzctLjQ0NS0uMTE1LjAyNy0uMjExLjA2NC0uNDIuMDY0LS42MzlhNSA1IDAgMDAtNS01IDUgNSAwIDAwLTUgNWMwIC4yMTkuMDM3LjQyOC4wNjQuNjM5LS4xNDguMDM4LS4yOTcuMDczLS40NDUuMTE1YTQuOTk4IDQuOTk4IDAgMDAtOS41OTkgMS45NTljMCAxLjEyNS4zODQgMi4xNTEgMS4wMTEgMi45ODctMy43MTcgMy42MzItNi4wMzEgOC42OTMtNi4wMzEgMTQuMyAwIDExLjA0NiA4Ljk1NCAyMCAyMCAyMCA5LjMzOSAwIDE3LjE2LTYuNDEgMTkuMzYxLTE1LjA2NC4yMTEuMDI3LjQyLjA2NC42MzkuMDY0YTUgNSAwIDAwNS01IDUgNSAwIDAwLTUtNSIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGZpbGw9IiMzRUNDNUYiIGQ9Ik04MyAxMjNoNDB2LTIwSDgzeiIvPjxwYXRoIGQ9Ik0xMzMgMTE1LjVhMi41IDIuNSAwIDEwMC01Yy0uMTA5IDAtLjIxNC4wMTktLjMxOS4wMzItLjAyLS4wNzUtLjAzNy0uMTUtLjA1OC0uMjI1YTIuNTAxIDIuNTAxIDAgMDAtLjk2My00LjgwN2MtLjU2OSAwLTEuMDg4LjE5Ny0xLjUwOC41MThhNi42NTMgNi42NTMgMCAwMC0uMTY4LS4xNjhjLjMxNC0uNDE3LjUwNi0uOTMxLjUwNi0xLjQ5NGEyLjUgMi41IDAgMDAtNC44LS45NzlBOS45ODcgOS45ODcgMCAwMDEyMyAxMDNjLTUuNTIyIDAtMTAgNC40NzgtMTAgMTBzNC40NzggMTAgMTAgMTBjLjkzNCAwIDEuODMzLS4xMzggMi42OS0uMzc3YTIuNSAyLjUgMCAwMDQuOC0uOTc5YzAtLjU2My0uMTkyLTEuMDc3LS41MDYtMS40OTQuMDU3LS4wNTUuMTEzLS4xMTEuMTY4LS4xNjguNDIuMzIxLjkzOS41MTggMS41MDguNTE4YTIuNSAyLjUgMCAwMC45NjMtNC44MDdjLjAyMS0uMDc0LjAzOC0uMTUuMDU4LS4yMjUuMTA1LjAxMy4yMS4wMzIuMzE5LjAzMiIgZmlsbD0iIzQ0RDg2MCIvPjxwYXRoIGQ9Ik0xNDMgNDEuNzVjLS4xNiAwLS4zMy0uMDItLjQ5LS4wNWEyLjUyIDIuNTIgMCAwMS0uNDctLjE0Yy0uMTUtLjA2LS4yOS0uMTQtLjQzMS0uMjMtLjEzLS4wOS0uMjU5LS4yLS4zOC0uMzEtLjEwOS0uMTItLjIxOS0uMjQtLjMwOS0uMzhzLS4xNy0uMjgtLjIzMS0uNDNhMi42MTkgMi42MTkgMCAwMS0uMTg5LS45NmMwLS4xNi4wMi0uMzMuMDUtLjQ5LjAzLS4xNi4wOC0uMzEuMTM5LS40Ny4wNjEtLjE1LjE0MS0uMjkuMjMxLS40My4wOS0uMTMuMi0uMjYuMzA5LS4zOC4xMjEtLjExLjI1LS4yMi4zOC0uMzEuMTQxLS4wOS4yODEtLjE3LjQzMS0uMjMuMTQ5LS4wNi4zMS0uMTEuNDctLjE0LjMyLS4wNy42NS0uMDcuOTggMCAuMTU5LjAzLjMyLjA4LjQ3LjE0LjE0OS4wNi4yOS4xNC40My4yMy4xMy4wOS4yNTkuMi4zOC4zMS4xMS4xMi4yMi4yNS4zMS4zOC4wOS4xNC4xNy4yOC4yMy40My4wNi4xNi4xMS4zMS4xNC40Ny4wMjkuMTYuMDUuMzMuMDUuNDkgMCAuNjYtLjI3MSAxLjMxLS43MyAxLjc3LS4xMjEuMTEtLjI1LjIyLS4zOC4zMS0uMTQuMDktLjI4MS4xNy0uNDMuMjNhMi41NjUgMi41NjUgMCAwMS0uOTYuMTltMjAtMS4yNWMtLjY2IDAtMS4zLS4yNy0xLjc3MS0uNzNhMy44MDIgMy44MDIgMCAwMS0uMzA5LS4zOGMtLjA5LS4xNC0uMTctLjI4LS4yMzEtLjQzYTIuNjE5IDIuNjE5IDAgMDEtLjE4OS0uOTZjMC0uNjYuMjctMS4zLjcyOS0xLjc3LjEyMS0uMTEuMjUtLjIyLjM4LS4zMS4xNDEtLjA5LjI4MS0uMTcuNDMxLS4yMy4xNDktLjA2LjMxLS4xMS40Ny0uMTQuMzItLjA3LjY2LS4wNy45OCAwIC4xNTkuMDMuMzIuMDguNDcuMTQuMTQ5LjA2LjI5LjE0LjQzLjIzLjEzLjA5LjI1OS4yLjM4LjMxLjQ1OS40Ny43MyAxLjExLjczIDEuNzcgMCAuMTYtLjAyMS4zMy0uMDUuNDktLjAzLjE2LS4wOC4zMi0uMTQuNDctLjA3LjE1LS4xNC4yOS0uMjMuNDMtLjA5LjEzLS4yLjI2LS4zMS4zOC0uMTIxLjExLS4yNS4yMi0uMzguMzEtLjE0LjA5LS4yODEuMTctLjQzLjIzYTIuNTY1IDIuNTY1IDAgMDEtLjk2LjE5IiBmaWxsPSIjMDAwIi8+PC9nPjwvc3ZnPgo="},64734:(e,t,s)=>{s.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvgAAACgCAIAAAD2Ao8HAAAbm0lEQVR42u3dCVhV553HcbtMp31m2uk807TTaTvtzDx52sk002xNpjZeRBY3UMANRRQXQBQXFFEWAREBt2B2Y6IhNXFp0hhj1GhMYtQY9Rwu62WVXS67F3BFWeZ/uYYgIAIiXO798nwen8v1Luec9z3v++M97zln2Nb6OgAAAIs0jE0AAAAIOgAAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAAAQdAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAgg4AAABBBwAAgKADAABA0AEAACDoAAAAEHQAAABBBwAAgKADAABA0AEAACDoAEAXNhrKwiq0q/Vn5N/NtZVsEAAEHQBD25baquCyr+blveWUFqxRZ7cZqc6Zlrk5sjKNTQSAoANgKImvr42oTF1Q+NdJuuiRiXPb55sObFQvv8L32GIACDoAzN366rylJYfcs+Ltkvy6CTedkXUAEHQAmOm0m8DSE7NzXxubsrxX4abDuE5kZTobEwBBB4AZTLupqw4tP++dt2tCelhvM83/bLV7cu+Ezs+7Z25hwwIg6AAYNJFVuoVFf5ucEWubOL9vIzfPnvUcNmzYPz7yL10N6szdZChjIwMg6AAYODE1BQEXP56R/byDdmGfj0y197v1mv99bXSX/7VS/wUbHABBB0C/8S860DlebDSUBelPeeW+Pi41sM+B5vcv2f/gNz96/K3xPX/L7NztlAgAgg6A+xKk/2JpyWF5EFJ2zpQwJO48V3cprCLRJ3+3S3q4jep1/yM3v103Yth3vnW3wZsujU1ZQekAIOgA6LWIylRJM1vqquMMJaYcMzv3tbl5O9tChm2id78cmeowI6fnL16QGRVYfCC+vpbCAkDQAXBvEhqeqzeYHo9OXiZhYnJGzNKSw+1P6u73cNNbvplr95YfKW+obmlp+ez6NUoNAEEHQI9SzrjUQPukhf5FByKrdO1Pbhr0cCO8MyN2lx8qa6hqafeTe/MmBQeAoAPg3uIMJQ/0sFTfzM8If6fsI31DZUtXPzeam/0/OvhcrYHiA0DQAdBt0LlUYibhRszLCN9VdvDijYqWbn/S09N/9+c/b67iruYACDoA7pJvXNLDRycvG528ZNDzzZyMsL+UfVhyo7zLWKPVanNzc9s/Ex0dHffeuxQiAIIOgK61nTE+mPlGF/aW/kDxjbJuBm8CAwPd3d3t7e23bt3a9qSdnV1qRQWFCICgA+Cuc5AnpIUOSr6ZrQtJ0H9QdF3fcq+f+vr6Z599Vh40NjZ6enrGxsbK4+vXrw8fPryxufklyhEAQQfA3QSUHOs+kYw45/nIZtv/Cnxa/PED1/vMN7N0wW/q9xdeL+0y0xgMBkdHx6eeemrevHkSZUxP7tmzJyYmxvS4qanJx8dnxowZzs7O27Ztk2f2X71KIQIg6ADoaEtdtdeFHd1fHefRlxy+/8sfDmv385DDb/582qNvU4yTL2d1P3gTFBS0Y8cOefD222+PGDGivLy8ubl53LhxOTk57V+mqqpWqzU9Tmy4QVECIOgA6GhR4f7uo8ljCeO+/f3vSLj50WM//fWCx/7N/b+/++O/l19//MzP+zCQc7Xpevuwkpyc7OnpOWfOnPz8/Nuni9+48cQTTzQ1NZl+PXPmzJNPPvnUU08FBAR0k42qGhspSgAEHQAdravOHpMS0E06+afHfyax5ldzH2175umPJn3vJz+QJx992aFXQefL2qQ70klV1R/+8IeTJ09+/vnnTz/9dEJCgqScqKiotkNUbQeqrl692v0g0JXGa1EViZsM5RQoAIIOgI5Hr3wL9nYZTZ75eIoEmu/+6HsdbkH1cNhwef4/ljzZ85Rjk+jV0HyzfTpZvnz5u+++a3p87dq1wMBAyT1+fn4Sd+45N/la042Uy9n7Kj5el7/NI32VfLh8xYrSzyhNAAQdAHeIr6/1yH6xy3Tyxw9cJdD8w8P/3Pm/Ht/lNOKcZ69GdG40NbQllTfeeMPW1ralxz/y3vQrue9VHFtfsH2WLnhk4pzOn++Z+wqlCYCgA+AOdxvOEcNPTP/W3337h7//Sb+cTK7UpZtSy82bN+Pi4mpqarpJNg3NN3VXLuyvPB5b+IaXLtS2q2TTwejkZZQmAIIOgDssKNjXTXp4Yo/zM4cm99ddxzscvWr/c7P5VtbVggNVn20o3Dk3Y82oxN7dSXRSimdMwYydtccpUAAEHQB3iKzS+eTvHoArBC7Mis6+WmBKNo3NjTnXig5Wndhc9Ob8jIhRifN6+2ljtLOCc2e8VzG18LpbS4uLOHN5FaUJgKAD4A6bDOUu6eEDdkFkt9RlU1KX22vn9+G9tursRVkeO0vd0y5PutXsYso3bSoaplGaAAg6AO4wN2+n+dy3vEue6TOfL57+pWHK1caO4aaDnZdzQqvO+Vx8K77+EiULgKADoC6w9MQora+5hRuX5Fnr8qcfqZ5a1eDafbhp75UK3zHZC+yzvOYVv7as7CCFC4CgA6Auvu7SspKjgx5uHLWzVubM2Fc+Le/apJ6Hm/ZO1k+RlGPilLOUkgVA0AFQt746zzF5yWDlm6mps7ZfdE+qn3yzybVv+aZNfaOrw9dBZ3S298zCLRQuAIIOYO1m524flIgzIdnzWM2U5maX+8w37S0qnNk2qDMtfz2FC4CgA1i7yMo0N906G3XuQKacGWkzKxpc+zHi3J6PXOneFnRmFG6kcAEQdAAYBelPDVjKGaOdVXrDreP54bfc9tS4NzTfO/1UVY3dt++P8+f/2t39Fx3+K/nqZFPKcciay4gOAIIOAKM1FUm2ib27tk2kOuOEMmV071POaHVWZaprS4Mxl9TcdDtaMyUk32NJwUyv/FkSUF6qmH6odlrncHP9uvMnnwxftephR8eHpk37xfbtjxUUOHR+2c1m1w9Tpi3WzXS5sJpiBUDQAaxcremB14UdvQor49VZlxS3FsWlSHHzVGf26r371anyxvpE18C0GfLryJTZbQebbg/GZHvVNhrHdZqbJ2q1IzdseMTZ+V+dnH4WF/eIqo6UJ7sb77np0qi6XkmcEl28nfIFQNABrNrpwncSqnPkwQbDxfl5uyakhfYwrBxSjGHF5KriGq7O6OEbfRSPpq/fWKW4zkz07JByxLis2XNPu0zz+JWDw0NBQQ8fOzb8+nXnuyWb2trxdzxTcvvDryR57azJbb+yr18qosQBgg4AK1KZurg0fWXbuI5/0YemODJd9ewmrCxVPdpSTps9yrSR6qx73sMhV5nU/l01itvcjFmds874dM+SqnHfxJeGO08jrx9/4MAzixf/p739Q76+v/nmvxpdWrTffHhtsndbuNlmKNWnB1LiAEEHgLXYUZNnCgRfFO6TX1eUfmaKI7Hq9Fuqy4uKe5dhxV6dXdJ60KqzRHXyhG4T0jbFvfO7DKqrd0bHcZ2AYs9bLV/PSja4tCS6NFZMOH16RETEb8eO/amr68+ff/7RjAy7jgM8+o4fXp2y6FVDqaxdcu6L8uubrcNXAAg6ACzfiaJ3TWngljo1oTrbt2CvZJG/KNNMTzYrLlFdHZB6W53WZcoxqVDcfO8yZWea6nlDce3yXXWq2wLdHVnHNXf29dbTr/LTHG6dm2hansMJf5Ksc+vWhK4PYzW5tCR38eFl6Sv2VGibWsOZrDLlDhB0AFiFYl1wWxrQpwe+WFuRnL6qfUS4pbqsUD3ahxUvdeatu6cck5uK6yZleuegc16d3M27Lquui3S3r/XnnD17x95nvLz+3WPKr+pPOd3xSn0Xp5ofOvR/xscVd/3wxq+/ukgXQrkDBB0Alu9Vg77pziNQV5K8OkeEa4qrz9cjNDbq7Iw7Z9h047Ayxb5dylmnTr/nW64orssT3e33jh5/yHnnm4+XFo9pSe/qlSXGU82PHRseFPSwg8ND7u6/SEh4whh0Uu+9VI3qpFcMZZQ+QNABYOEOlR7rYWQxqK4zWrPOCz0IK+1lq5Omtk5PdlI95UN68pZG+fdy61BNs0tL9l1fdnT7nzZseCQxsd2p5jU9XSpZcUofIOgAsHBJF17ueWQpU9z8VI9rimuvgo5x8o3iukL1OKJO7cW7tC4t9S4tBfd6WV5rGGo7hpXe089Pzn2R0gcIOgAsXFn6il5FlqZeRpz7eWNzD1+ZY8w6dXXjv/pY0/MPL09bRukDBB0AluzFuupGdVJLX7OL+Uh7b5TH9F+Wfjam52+RFZfVpw4ABB0AFmtfhWoBKee21F6/RVafOgAQdABYrJOF+ywn6PSe6QKJAAg6ACxTTma0NQed7KxY6gBA0AFgsS6lLLDmoGNI8aUOAAQdAJaqtrHbixRbvEZ10vP1BmoCQNABYIF21ORbc8ox2VGTR00ACDoALNB75WcJOrIRqAkAQQeABfqk5CBBRzYCNQEg6ACwQOfzdhB0zuXtoCYABB0AFigrK46gk5W9gZoAEHQAWKDCjDUEnSJdKDUBIOgAsECl6YEEHX16IDUBIOgAsECVqYsJOlWp/tQEgKADwAIZUnwJOrXJPtQEgKADwHzF11VtMZRuMRRtupS3sTozrjotrkobU3F+fcWZ9eUn1umPR+mPRJZ+GFHyfnjJvjXFb68pTAgtfD2k4NV6dSpB53LiNNkask1ky8j2ka0k20q2mGw32XqyDWVLyvaUrSrbVrawbGfZ2rLNqXgAQQfAXaJJ/SXpLKXX3FCti61U11eclm51belHkSV/Cy/ebQwiBa8F57+4Om9zUG5MYE7EiqzggMzlS3X+S3Te/mmzF6a6+yW7+SaN90m0n69q+uyGMpGgIxuhzxtQtr+UgpSFlIiUi5SOlJGUlJSXlJqUnZSglKOUppSplKyUr5SyMUJVnJZyl9JvTU6lUh/YKQCCDmBuYaV2i0G/qebChurUmMqz0WWfRpZ+GF6yL6wwIaRg26q8+NaMEr48c+XSjMVL0uf7p870S5ks/aJ3ot39pJN+1GT1KUfIRjCHspBaYcxMKZOlnkhtkTojNUfqj9QiqUtSo6ReSe2SOiY1Teqb1Dqpe1IDpR6yMwIEHaBHB4A2XSqMq05bX3EmSn8s8uIH4cXvhBZuX533vHQ2K7LDAjIDluh8jHkl2c1HO8ZMwsp9jeiojOi4yEYY6uUotVHqpDEh6XyklkpdbR1Mel5qr9RhqclSn6VWS92WGs5BNxB02AqwsEGX0o3VWbGVanTZibWlH4UX75HWX/5EDsyNMo616PwWpXr6Jbve5zGgIapenUDQkY1gbeUutV3qvNR8qf/GcaPcKNkjWlPRHtlHZE+R/UX2mtZjagwXgaADDJLnjAMwebGVWmmXIy8eWFO0Kzj/ZflDdnnW6tb44rFA6+St2lhhfOm5aoKO4lJtfUGnFwfUVBvZj2RvMkairNWyf8leJvua7HGteUgr++BzDBGBoAP0nmGzoTCuKnld2ecRF/eHFe1cnfdcYE5EQGbA4vR5C1Om+Ggd6YTun151JujIRqAm3PexM0fZK2XflD1U9lPZW2WflT1X9l/Zi2Vflj2aZg0EHViXLYaSDdWp0eVfGAdjChOC87dK+7g0Y+mitFkLkpwZiRkYhQQdxaWQoDMwI0NJzrJ3yz4ue7rs77LXG4eFyr+QdkBaA5pEEHQwFKNMaVx1WnTZiYiS90MLtwflxi3PXCl/8y1IdvFWbWn6zUGmOp6gIxuBmmAGSchWWgZpH6SVkLZCWgxpN6T1kDZEWhKaUxB0MFinKdVsrMmJqTwbVXoorGjX6vz4FdnhS3ULF6a6W+fc3iHnS3UcQUc2AjXB7GdPO0irIm2LtDDSzkhrI22OtDzS/kgrRFMMgg7u12ZDSWylNkp/dE3R26vy4ldkhSxJn++XNJH2d6j7UBlN0JGNQE0Y0qQtkhZJ2iVpnaSNkpZK2qvNHA4DQQedhmeqN1ZnRpefiih5P6Rg28qcdcYZM6nTGZuxYG+qDgQd2QjUBEs9i15aMGnHpDWTNs14LKz8lLRy0tbR4BN0YOE2XcqPqfgq4uL+kIJXV+ZELtX5+SW70Sxaoc2qHUFHNgI1weoGgZLdpN2T1k/aQGkJpT2UVpGugaCDoTgdWB9XpY3SHwkrTAi6sGFZZoD8fWM+9x/AoAtWRxJ0ZCNQE2C6C4e0kNJOSmspbaa0nNJ+SitKV0LQgbmc4hRbqay9eED+QAnMCV+cPt83iSmWuOepLprr1n1fT1l9b2oCuiVtqbSo0q5K6yptrLS0nAhG0MEDviJwbbn8nbG29KPQwu2BOZFLdD4LtE40RuAMc84tx4CRVlfaXmmBpR2W1ljaZGmZ6Z4IOuj9BOH62o01OdFln64pTDDODtb5LeBcJ/SrI6pVn3glq08dQL+ln6SJrVN/1kmLLe228ex3bhZG0EGHy9LEVaet1R8OLXgtMHvN4jQvznjCg/aKam/NQUdWnzqAB3rml7Tk0p5Lqy5tu7TwXPiHoGNVR6AqYiuViIv7V+e9sDxz5aJU9/lMisSAW2nd85FXstNhoI2U1l7afGn5pf2XXkD6AjpEgo5lMGyozpBEH1Lw6vKsVQuNsYYdHmahXLHSO17JilP6MAfSI0i/YJzsrD8sPQX3QCXoDJXToIrWl58IK3prZe5a//S5HISC2TpqrdN0jjJBB+Z6wEt6Dek7pAeRfkR6E7pUgo6ZDNikth6H2rwsw983idOgMGRsUEdZZ9DZwKUCMWROcXeSnkX6F+llpK9hyIegM0A3TIitTAwv+WtQbuyS9PkM2GBIX03nsvVdTecyV9DBUB7ykX5Heh/pg6Qn4qYWBJ1+mzscU3EuvPidwNwo/7TZ3qotOxsshhXexpyblsOC/laxlV5J+ibpoaSfYnYzQafnYzaXjGM2xXsCcyIXpXp4qzbsTrBUG63v6JWsMuUOC809NtJnSc8l/VfreM8lOnSCzjc21uSsLT24Km/LEp2PN0ejYE1Krencq1LOt4L15J5Ee+nRpF+T3k36OIKO1QWdLYbS6LIToQWvBWStYAYxrNk7ioP1BB1ZWUocVjuvWfo76fWk77POm3YNs5Zhm4sHgnJjFqV6UOkBE3/V5oZ1TEmW1fTnSDTQSvpB6Q2lT7SewR7LDDrx9bVxVclrinevyA7zS3alZgNdOq6OsYagI6tJWQOdSf8ovaT0ldJjWvBduoZZ0FTiqvUVZ0ILXw/IDPDVjqUGA/cUoI60+EEdWcEAbvsA3PMIl3as9J7Sh0pPKv0pQceMzpOKqTwbUrBtqW6hdyKnVAC9dtDSB3UOMpwD9Ho68yjpVaVvlR7WAs7hGjY0D0tpwwoTJHv6aLmgO3C/M3Us+OKBl5mdA9wf6Welt5U+V3reIXp4a8gEnQ3VuvDi3cuzVvsmjafmAf1ot+JoqUFHVo3yBfrvBK7x0gtLXyw9MkGnv04F10fpj6zMWceEYuABDlOrmhzVyfJSjqwU93wAHtxEZumdpY+Wnpqg02txVSmhRTuM02646wIwIEJU2wbLSjmyOiE0IMBA/KVkK/219NrSdxN0ur+xVHmU/uOVOdEM3gCDYq9qUQewZHUoU2AwhnmipTeXPp2g882l/MKKdi3VLWLwBhj0A1hpynjLSDmpyngOWgGDPczjL/27OVyWcHCCTlx1Wkjhdv+0OdQGwHwsVm306pC/AZaswmLOtALM59TOtDnS40u/bxVBJ7ZSCc57YVGqOwUPmKdg1fbKUD7bXBY+mOFhwCxJ7y8ZQJKApQWd+Pra9RWngy5sZPINMCRsVkfdGpopRxZbFp4SBMx/Ko+kAskGA3NhnmEP8uQp7er8ePINMORsVe1uDrVxHVlgWWzKDhhaiUdygqSFIRZ0NtbkhBZu5z7hwJC2RbFrGFInk8sCU2rAkD2q5SHJ4QHNXB7Wfxf3K1lTvHuJzocCAyzDJtXu+lAY15GF3MRYDmARJEVIlpBEYVZBx7BOfzwgK5DzwwHLE6bamvl5WLJ4YTQ+gGWRRCG5QtKFZIzBDDqbLuWFFGzzS3ajSABLHlJWbRKVceaZcmTBFnEmOWDJk3jcJGlI3hjgoGOI0h8LyFzuTfsCWI19iuMN1YwOY8nC7OOGnYC1DPDYSOqQ7NG3AZ5hvRrCCc5/hbOoAOu0Wh1pJpdOlsWQhaFEACs8S0tySG8HeHoUdGKrklbkhDMLB8B2xb5GmTBYEUe+WhaAUgCsfAaPZBJJJv0TdNaVfbY0YzGbFUAbX1WzS3GoHti4I18nX+rL9gfwNcknklL6GHTi66ojSt7zT53JdgTQxue8xu+sxv8rzZIvNctPaf76pcPFs04POuKUnnV697RD0EnNslPG75Vvl2WQJaE4AAjJKpJYJLf0NOg8V1sZVrRzQdJEth1gpcPCijFJSKRYcVKz6jNN6HFNxFFN1MeamMOamEMjOtt+dORXX4yuP9fPAzzygfKx8uFdfqnRYeNSybLJEspyytLKMsuSy/JTiIC1kdwi6UUyTHdBR9LQmuK3iTiA2QpRbcMfxFQ5xThMIkEh5FPN2qN3DTT39OYx208/d7zw5fiG8308P0veKG+XD5GP6tsymAKQrIWsi6yRrNd8cg9gTXFHkkyH0Z1hrffdvBRR8i5XxAHMbSrMWnXUTtXhuDomR3UyXaRYfu23kZvzmoDTmrDjEg40fU8VXYk9rHnj6Mj3j9ud+Nwx9dTYkjNOlV85156bcO3cxEbFRcgD+VWelP+SF8jL5MXyltjD/bwkrYzrKGvqzdEuwFpOznKTVCPZ5nbQWXvxwMKUaWwXYNAtUm1ilVHvKA6nlLFFilPnW4g3Ky4B/XT9qqWnNeuOPIhUYb5kfWWtqWaAlZBsIwknvr52GNsCGPxpMapmp+pQod5jmku+6txf3xhtZSnHRNa6JxtnrTrqA3V0juokcbMbqeq4vaojN6AAzHuq8iyCDmBGYtRRx9UxdXc5c3u/Orq/vogRnXsf7Fdt4lW7T5Wx7U+kb2i9XOE+xTGcfAMMEQQdwBwHeLYodqeVsVfvvOvCWnVUf37LA5ujY2b6YY5OhDpqj+oohbKAW98ABB0A/XYGgWrzsmqvqOMaFBeDMuFBfVE/nXVlLjjrCgBBBxhy85SjFdv7eftmdVQPLyvc5XV0jMe5zC0AHTYuFdfRAUDQAazRMnXkS6r9UXVMvuLUqEw8qI65/8/0Pa/xO3f7ysgBpzWBJzUrT2hWf64J/nRE6PERa45rwj/RRBzTRLZeYHDdx8YgEt1q/WFjLhGmE8hjWx8Led70AnmlvF7eJe+VT5DPkU+Tz5RPls+Xb5Hvkm+8fWXkc8YloYgBEHQAa7RQtTmtjG1uN7knW3HyZssAIOgAsBhbVbt81dl4LwV1QqA6kg0CgKADwOLijmK/SbVjOwAg6AAAABB0AAAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAACDoAAAAEHQAAAIIOAAAAQQcAAICgAwAAQNABAADW4v8BIMkHbXsCeUgAAAAASUVORK5CYII="},28048:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},66730:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},56799:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>n,default:()=>l,frontMatter:()=>u,metadata:()=>M,toc:()=>a});var o=s(24246),i=s(71670);const u={title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},n=void 0,M={permalink:"/blog/2017/12/14/introducing-docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2017/12-14-introducing-docusaurus.mdx",source:"@site/blog/2017/12-14-introducing-docusaurus.mdx",title:"Introducing Docusaurus",description:"We are very happy to introduce Docusaurus to help you manage one or many open source websites.",date:"2017-12-14T00:00:00.000Z",tags:[{label:"documentation",permalink:"/blog/tags/documentation"},{label:"blog",permalink:"/blog/tags/blog"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:8.215,hasTruncateMarker:!0,authors:[{name:"Joel Marcey",title:"Developer Advocate at Meta",url:"https://twitter.com/JoelMarcey",email:"jimarcey@gmail.com",twitter:"JoelMarcey",imageURL:"https://github.com/JoelMarcey.png",key:"JMarcey"}],frontMatter:{title:"Introducing Docusaurus",authors:"JMarcey",tags:["documentation","blog","docusaurus"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus"}},r={authorsImageUrls:[void 0]},a=[{value:"The Birth of docusaurus",id:"the-birth-of-docusaurus",level:2},{value:"Getting Up and Running",id:"getting-up-and-running",level:2},{value:"How does Docusaurus work?",id:"how-does-docusaurus-work",level:2},{value:"Community",id:"community",level:2},{value:"Acknowledgements",id:"acknowledgements",level:2},{value:"Resources",id:"resources",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(28048).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["We are very happy to introduce ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Docusaurus"})," to help you manage one or many open source websites."]}),"\n",(0,o.jsxs)(t.p,{children:["We created ",(0,o.jsx)(t.a,{href:"https://docusaurus.io",children:"Docusaurus"})," for the following reasons:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"To put the focus on writing good documentation instead of worrying about the infrastructure of a website."}),"\n",(0,o.jsx)(t.li,{children:"To provide features that many of our open source websites need like blog support, search and versioning."}),"\n",(0,o.jsx)(t.li,{children:"To make it easy to push updates, new features, and bug fixes to everyone all at once."}),"\n",(0,o.jsx)(t.li,{children:"And, finally, to provide a consistent look and feel across all of our open source projects."}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"install"})," it using ",(0,o.jsx)(t.code,{children:"npm"})," or ",(0,o.jsx)(t.code,{children:"yarn"})," via a simple initialization script that ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"creates a working example website out of the box"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus also provides core website and documentation features out-of-the-box including ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog support"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/translation.html",children:"internationalization"}),", ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/search.html",children:"search"}),", and ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/versioning.html",children:"versioning"}),". While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added."]}),"\n",(0,o.jsx)(t.h2,{id:"the-birth-of-docusaurus",children:"The Birth of docusaurus"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(64734).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsx)(t.p,{children:"When Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings."}),"\n",(0,o.jsx)(t.p,{children:"The open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well."}),"\n",(0,o.jsx)(t.p,{children:'The problem with the "copy the template to your repo" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to "copy" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.'}),"\n",(0,o.jsx)(t.p,{children:"So we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes."}),"\n",(0,o.jsx)(t.p,{children:"Docusaurus was born!"}),"\n",(0,o.jsx)(t.p,{children:"At Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don't have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation."}),"\n",(0,o.jsx)(t.h2,{id:"getting-up-and-running",children:"Getting Up and Running"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(66730).Z+"",width:"760",height:"160"})}),"\n",(0,o.jsxs)(t.p,{children:["At its core, we wanted sites running Docusaurus to be simple to use. With one ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation"})," command and some simple ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-preparation.html",children:"configuration"}),", you can actually have a default running website."]}),"\n",(0,o.jsxs)(t.p,{children:["When you run ",(0,o.jsx)(t.code,{children:"docusaurus-init"}),", you will see a structure similar to:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-repo\n\u251c\u2500\u2500 docs-examples-from-docusaurus\n\u2502 \u251c\u2500\u2500 doc1.md\n\u2502 \u251c\u2500\u2500 doc2.md\n\u2502 \u251c\u2500\u2500 doc3.md\n\u2502 \u251c\u2500\u2500 example-doc4.md\n\u2502 \u2514\u2500\u2500 example-doc5.md\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 blog-examples-from-docusaurus\n\u2502 \u2502 \u251c\u2500\u2500 2016-03-11-blog-post.md\n\u2502 \u2502 \u2514\u2500\u2500 2017-04-10-blog-post-two.md\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u2502 \u2514\u2500\u2500 Footer.js\n\u2502 \u251c\u2500\u2500 node_modules\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u251c\u2500\u2500 pages\n\u2502 \u251c\u2500\u2500 sidebars.json\n\u2502 \u251c\u2500\u2500 siteConfig.js\n\u2502 \u2514\u2500\u2500 static\n"})}),"\n",(0,o.jsxs)(t.p,{children:["With the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/blog.html",children:"blog posts"}),"; ",(0,o.jsx)(t.code,{children:"siteConfig.js"})," is where you make most of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/site-config.html",children:"customizations"})," for your site; ",(0,o.jsx)(t.code,{children:"sidebars.json"})," is where you maintain the layout and content of the ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/navigation.html",children:"sidebar"})," for your documentation; the ",(0,o.jsx)(t.code,{children:"pages"})," folder is where you add ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/custom-pages.html",children:"custom"})," pages for your site; the ",(0,o.jsx)(t.code,{children:"static"})," folder is where all of your static assets go (e.g., CSS stylesheets and images); and the ",(0,o.jsx)(t.code,{children:"core"})," folder is where you can customize core components of the site, in this case the footer."]}),"\n",(0,o.jsx)(t.h2,{id:"how-does-docusaurus-work",children:"How does Docusaurus work?"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus is written primarily in JavaScript and ",(0,o.jsx)(t.a,{href:"https://facebook.github.io/react",children:"React"}),", replacing Jekyll which we used in the old template. We use ",(0,o.jsx)(t.a,{href:"https://github.com/jonschlinkert/remarkable",children:"Remarkable"})," for our Markdown rendering and ",(0,o.jsx)(t.a,{href:"https://highlightjs.org/",children:"highlight.js"})," for our code block syntax highlighting. The core of Docusaurus' functionality is in the ",(0,o.jsx)(t.a,{href:"https://github.com/facebookexperimental/Docusaurus/tree/master/lib",children:"lib directory"})," of the ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/",children:"Docusaurus repo"}),". The general structure looks like:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"root-of-Docusaurus\n\u251c\u2500\u2500 lib\n\u2502 \u251c\u2500\u2500 core\n\u2502 \u251c\u2500\u2500 server\n\u2502 \u2502 \u251c\u2500\u2500 generate.js\n\u2502 \u2502 \u251c\u2500\u2500 server.js\n\u2502 \u2502 \u2514\u2500\u2500 ...and more files\n\u2502 \u251c\u2500\u2500 static\n\u2502 \u251c\u2500\u2500 build-files.js\n\u2502 \u251c\u2500\u2500 copy-examples.js\n\u2502 \u251c\u2500\u2500 generate-feed.js\n\u2502 \u251c\u2500\u2500 publish-gh-pages.js\n\u2502 \u251c\u2500\u2500 rename-version.js\n\u2502 \u251c\u2500\u2500 start-server.js\n\u2502 \u251c\u2500\u2500 versions.js\n\u2502 \u2514\u2500\u2500 write-translations.js\n"})}),"\n",(0,o.jsxs)(t.p,{children:["The key files here are build-files.js and start-server.js. There are many similarities between these two files: ",(0,o.jsx)(t.code,{children:"build-files.js"})," is used to build the physical artifacts for serving by an external web server. ",(0,o.jsx)(t.code,{children:"start-server.js"})," is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Process your website settings in ",(0,o.jsx)(t.code,{children:"siteConfig.js"})]}),"\n",(0,o.jsx)(t.li,{children:"Read the document metadata that exists in all the Markdown files in your docs directory."}),"\n",(0,o.jsx)(t.li,{children:"Create a table of contents for your documents based upon the IDs extracted from the metadata."}),"\n",(0,o.jsx)(t.li,{children:"Convert the Markdown to HTML, including doing link replacement."}),"\n",(0,o.jsx)(t.li,{children:"These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder."}),"\n",(0,o.jsx)(t.li,{children:"Repeat 1-3 for blog posts."}),"\n",(0,o.jsx)(t.li,{children:"The blog file will go in a build/blog directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Copy images into an build/img directory of the compiled site."}),"\n",(0,o.jsx)(t.li,{children:"Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build."}),"\n",(0,o.jsx)(t.li,{children:"Create CNAME and sitemap.xml files and add those to build."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Note that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts."}),"\n",(0,o.jsx)(t.p,{children:"The final structure of your compiled site will look similar to:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"build\n\u251c\u2500\u2500 website\n\u2502 \u251c\u2500\u2500 CNAME\n\u2502 \u251c\u2500\u2500 blog\n\u2502 \u251c\u2500\u2500 css\n\u2502 \u251c\u2500\u2500 docs\n\u2502 \u251c\u2500\u2500 en\n\u2502 \u251c\u2500\u2500 help.html # custom page\n\u2502 \u251c\u2500\u2500 img\n\u2502 \u251c\u2500\u2500 index.html # landing page\n\u2502 \u251c\u2500\u2500 sitemap.xml\n\u2502 \u2514\u2500\u2500 users.html # custom page\n"})}),"\n",(0,o.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:s(48960).Z+"",width:"200",height:"200"})}),"\n",(0,o.jsxs)(t.p,{children:["We welcome your ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contributions"})," to Docusaurus, whether you want to use it for your own site, you want to ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/blob/master/CONTRIBUTING.md",children:"contribute"})," to the Docusaurus core or just have questions. Follow us on ",(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"GitHub"})," and ",(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Twitter"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"acknowledgements",children:"Acknowledgements"}),"\n",(0,o.jsxs)(t.p,{children:["Docusaurus wouldn't exist without the work of the rest of the core Docusaurus team: ",(0,o.jsx)(t.a,{href:"http://twitter.com/ericnakagawa",children:"Eric Nakagawa"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/hectorramos",children:"Hector Ramos"}),", ",(0,o.jsx)(t.a,{href:"https://twitter.com/EricVicenti",children:"Eric Vicenti"})," and ",(0,o.jsx)(t.a,{href:"https://github.com/deltice",children:"Frank Li"})," \u2014 a former intern at Facebook who implemented the core technology and features."]}),"\n",(0,o.jsxs)(t.p,{children:["Special thanks also goes out to our earliest ",(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/en/users.html",children:"adopters"})," of Docusaurus:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://bucklescript.github.io/",children:"BuckleScript"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://fasttext.cc",children:"FastText"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://jestjs.io",children:"Jest"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"http://makeitopen.com",children:"Make It Open"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://prettier.io/",children:"Prettier"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://reasonml.github.io/reason-react/",children:"Reason-react"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/react-native/",children:"React Native"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://facebook.github.io/relay/",children:"Relay"})}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Without their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today."}),"\n",(0,o.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io",children:"Read our documentation"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://twitter.com/docusaurus",children:"Follow our Twitter feed"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"Follow us on GitHub"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://v1.docusaurus.io/about-slash.html",children:"About Slash, the Docusaurus mascot"})}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>M,a:()=>n});var o=s(27378);const i={},u=o.createContext(i);function n(e){const t=o.useContext(u);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function M(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),o.createElement(u.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c868d36.9d723cd8.js b/assets/js/5c868d36.9d723cd8.js deleted file mode 100644 index 934da54c83..0000000000 --- a/assets/js/5c868d36.9d723cd8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[1974],{5277:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var r=t(4848),s=t(8453);const n={sidebar_position:1},o="Create a Page",c={id:"tutorial-basics/create-a-page",title:"Create a Page",description:"Add Markdown or React files to src/pages to create a standalone page:",source:"@site/docs/tutorial-basics/create-a-page.md",sourceDirName:"tutorial-basics",slug:"/tutorial-basics/create-a-page",permalink:"/docs/tutorial-basics/create-a-page",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/tutorial-basics/create-a-page.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Tutorial - Basics",permalink:"/docs/category/tutorial---basics"},next:{title:"Create a Document",permalink:"/docs/tutorial-basics/create-a-document"}},i={},l=[{value:"Create your first React Page",id:"create-your-first-react-page",level:2},{value:"Create your first Markdown Page",id:"create-your-first-markdown-page",level:2}];function d(e){const a={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.h1,{id:"create-a-page",children:"Create a Page"}),"\n",(0,r.jsxs)(a.p,{children:["Add ",(0,r.jsx)(a.strong,{children:"Markdown or React"})," files to ",(0,r.jsx)(a.code,{children:"src/pages"})," to create a ",(0,r.jsx)(a.strong,{children:"standalone page"}),":"]}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.code,{children:"src/pages/index.js"})," \u2192 ",(0,r.jsx)(a.code,{children:"localhost:3000/"})]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.code,{children:"src/pages/foo.md"})," \u2192 ",(0,r.jsx)(a.code,{children:"localhost:3000/foo"})]}),"\n",(0,r.jsxs)(a.li,{children:[(0,r.jsx)(a.code,{children:"src/pages/foo/bar.js"})," \u2192 ",(0,r.jsx)(a.code,{children:"localhost:3000/foo/bar"})]}),"\n"]}),"\n",(0,r.jsx)(a.h2,{id:"create-your-first-react-page",children:"Create your first React Page"}),"\n",(0,r.jsxs)(a.p,{children:["Create a file at ",(0,r.jsx)(a.code,{children:"src/pages/my-react-page.js"}),":"]}),"\n",(0,r.jsx)(a.pre,{children:(0,r.jsx)(a.code,{className:"language-jsx",metastring:'title="src/pages/my-react-page.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\nexport default function MyReactPage() {\n return (\n <Layout>\n <h1>My React page</h1>\n <p>This is a React page</p>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsxs)(a.p,{children:["A new page is now available at ",(0,r.jsx)(a.a,{href:"http://localhost:3000/my-react-page",children:"http://localhost:3000/my-react-page"}),"."]}),"\n",(0,r.jsx)(a.h2,{id:"create-your-first-markdown-page",children:"Create your first Markdown Page"}),"\n",(0,r.jsxs)(a.p,{children:["Create a file at ",(0,r.jsx)(a.code,{children:"src/pages/my-markdown-page.md"}),":"]}),"\n",(0,r.jsx)(a.pre,{children:(0,r.jsx)(a.code,{className:"language-mdx",metastring:'title="src/pages/my-markdown-page.md"',children:"# My Markdown page\n\nThis is a Markdown page\n"})}),"\n",(0,r.jsxs)(a.p,{children:["A new page is now available at ",(0,r.jsx)(a.a,{href:"http://localhost:3000/my-markdown-page",children:"http://localhost:3000/my-markdown-page"}),"."]})]})}function p(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>c});var r=t(6540);const s={},n=r.createContext(s);function o(e){const a=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5df873bd.a91cd82d.js b/assets/js/5df873bd.a91cd82d.js new file mode 100644 index 0000000000..67ba3f95f5 --- /dev/null +++ b/assets/js/5df873bd.a91cd82d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90038],{86753:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var o=n(24246),r=n(71670);const a={mdx:{format:"md"},date:"2022-08-01T19:00",authors:["Josh-Cena","slorber"]},s="2.0.0",c={permalink:"/changelog/2.0.0",source:"@site/changelog/source/2.0.0.md",title:"2.0.0",description:"Bad npm publish, please use 2.0.1",date:"2022-08-01T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2022-08-01T19:00",authors:["Josh-Cena","slorber"]},unlisted:!1,prevItem:{title:"2.0.1",permalink:"/changelog/2.0.1"},nextItem:{title:"2.0.0-rc.1",permalink:"/changelog/2.0.0-rc.1"},listPageLink:"/changelog/"},i={authorsImageUrls:[void 0,void 0]},u=[];function l(e){return(0,o.jsx)(o.Fragment,{})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var o=n(27378);const r={},a=o.createContext(r);function s(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e335fc2.8b6775cb.js b/assets/js/5e335fc2.8b6775cb.js new file mode 100644 index 0000000000..f6b04e3b4f --- /dev/null +++ b/assets/js/5e335fc2.8b6775cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30981],{14542:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>l,frontMatter:()=>n,metadata:()=>u,toc:()=>c});var s=a(24246),r=a(71670);const n={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,u={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{label:"recap",permalink:"/blog/tags/recap"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",twitter:"yangshunz",email:"tay.yang.shun@gmail.com",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},i={authorsImageUrls:[void 0]},c=[];function p(e){const t={a:"a",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(t.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>u,a:()=>o});var s=a(27378);const r={},n=s.createContext(r);function o(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function u(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.b5fe363a.js b/assets/js/5e95c892.b5fe363a.js new file mode 100644 index 0000000000..d84929be95 --- /dev/null +++ b/assets/js/5e95c892.b5fe363a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29661],{54527:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});var t=r(24246),u=(r(27378),r(40624)),a=r(44008),c=r(89583),n=r(95473),i=r(88613);function l(e){return(0,t.jsx)(a.FG,{className:(0,u.Z)(c.k.wrapper.docsPages),children:(0,t.jsx)(i.Z,{children:(0,n.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.e01a5a4b.js b/assets/js/5e95c892.e01a5a4b.js deleted file mode 100644 index 3f5b27148c..0000000000 --- a/assets/js/5e95c892.e01a5a4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[9647],{7121:(s,e,u)=>{u.r(e),u.d(e,{default:()=>l});u(6540);var r=u(4164),a=u(1213),c=u(7559),d=u(2831),n=u(781),t=u(4848);function l(s){return(0,t.jsx)(a.e3,{className:(0,r.A)(c.G.wrapper.docsPages),children:(0,t.jsx)(n.A,{children:(0,d.v)(s.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5f30ffc4.b9b7bb79.js b/assets/js/5f30ffc4.b9b7bb79.js new file mode 100644 index 0000000000..c8a45448a3 --- /dev/null +++ b/assets/js/5f30ffc4.b9b7bb79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82273],{80553:t=>{t.exports=JSON.parse('{"tag":{"label":"long","permalink":"/tests/blog/tags/long","allTagsPath":"/tests/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/long","page":1,"postsPerPage":3,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5f9d590a.f6333f66.js b/assets/js/5f9d590a.f6333f66.js new file mode 100644 index 0000000000..c618af42cb --- /dev/null +++ b/assets/js/5f9d590a.f6333f66.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29831],{49735:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog/page/3","page":3,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/2","nextPage":"/tests/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5fb252f5.2f2f12fc.js b/assets/js/5fb252f5.2f2f12fc.js new file mode 100644 index 0000000000..b6bfed3e9c --- /dev/null +++ b/assets/js/5fb252f5.2f2f12fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22787],{65714:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>h});var t=n(24246),i=n(71670);const l={mdx:{format:"md"},date:"2023-02-03T20:00",authors:["Josh-Cena","scastiel","slorber"]},r="2.3.1",o={permalink:"/changelog/2.3.1",source:"@site/changelog/source/2.3.1.md",title:"2.3.1",description:"Bug Fix",date:"2023-02-03T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"S\xe9bastien Castiel",alias:"scastiel",url:"https://github.com/scastiel",imageURL:"https://github.com/scastiel.png",key:"scastiel"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2023-02-03T20:00",authors:["Josh-Cena","scastiel","slorber"]},unlisted:!1,prevItem:{title:"2.4.0",permalink:"/changelog/2.4.0"},nextItem:{title:"2.3.0",permalink:"/changelog/2.3.0"},listPageLink:"/changelog/"},c={authorsImageUrls:[void 0,void 0,void 0]},h=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83e\udd16 Dependencies",id:"robot-dependencies",level:2},{value:"Committers: 3",id:"committers-3",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8628",children:"#8628"})," fix(theme-common): fix issue in tab scroll position restoration on tab click (",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8619",children:"#8619"})," fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop (",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8618",children:"#8618"})," fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 (",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,t.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8593",children:"#8593"})," fix(theme-classic): allow rendering single tab item (",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8606",children:"#8606"})," fix(utils): handle CRLF when parsing MDX imports (",(0,t.jsx)(s.a,{href:"https://github.com/scastiel",children:"@scastiel"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8597",children:"#8597"})," fix(preset-classic): install the right plugin for googleTagManager (",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8614",children:"#8614"})," chore(theme-translations): complete zh translations (",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"robot-dependencies",children:"\ud83e\udd16 Dependencies"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,t.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,t.jsx)(s.code,{children:"docusaurus"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8610",children:"#8610"})," chore(deps): bump eta from 1.12.3 to 2.0.0 (",(0,t.jsx)(s.a,{href:"https://github.com/apps/dependabot",children:"@dependabot[bot]"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"committers-3",children:"Committers: 3"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Joshua Chen (",(0,t.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["S\xe9bastien Castiel (",(0,t.jsx)(s.a,{href:"https://github.com/scastiel",children:"@scastiel"}),")"]}),"\n",(0,t.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,t.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>r});var t=n(27378);const i={},l=t.createContext(i);function r(e){const s=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/608ae6a4.52b9516f.js b/assets/js/608ae6a4.52b9516f.js deleted file mode 100644 index a027305524..0000000000 --- a/assets/js/608ae6a4.52b9516f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[4722],{1557:s=>{s.exports=JSON.parse('{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/61266023.2fd2ab72.js b/assets/js/61266023.2fd2ab72.js new file mode 100644 index 0000000000..85cd51d285 --- /dev/null +++ b/assets/js/61266023.2fd2ab72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65423],{7927:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-10-26T20:00"},s="2.0.0-alpha.31",c={permalink:"/changelog/2.0.0-alpha.31",source:"@site/changelog/source/2.0.0-alpha.31.md",title:"2.0.0-alpha.31",description:"- Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.",date:"2019-10-26T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-26T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.32",permalink:"/changelog/2.0.0-alpha.32"},nextItem:{title:"2.0.0-alpha.30",permalink:"/changelog/2.0.0-alpha.30"},listPageLink:"/changelog/page/4"},i={authorsImageUrls:[]},l=[];function p(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(p,{...e})}):p()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6199064d.0ae2299b.js b/assets/js/6199064d.0ae2299b.js new file mode 100644 index 0000000000..655333fb87 --- /dev/null +++ b/assets/js/6199064d.0ae2299b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[86143],{52322:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var n=t(24246),a=t(71670);const r={title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},i=void 0,o={permalink:"/blog/2021/03/09/releasing-docusaurus-i18n",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2021/03-09-releasing-docusaurus-i18n.mdx",source:"@site/blog/2021/03-09-releasing-docusaurus-i18n.mdx",title:"Releasing Docusaurus i18n",description:"Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.",date:"2021-03-09T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"},{label:"i18n",permalink:"/blog/tags/i-18-n"}],readingTime:3.445,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Releasing Docusaurus i18n",authors:["slorber"],tags:["release","i18n"],image:"/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Announcing Docusaurus 2 Beta",permalink:"/blog/2021/05/12/announcing-docusaurus-two-beta"},nextItem:{title:"Docusaurus 2020 Recap",permalink:"/blog/2021/01/19/docusaurus-2020-recap"}},l={authorsImageUrls:[void 0]},u=[];function c(e){const s={a:"a",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["Today, we officially release ",(0,n.jsx)(s.strong,{children:(0,n.jsx)(s.a,{href:"https://docusaurus.io/docs/i18n/introduction",children:"Docusaurus 2 i18n"})})," (",(0,n.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"internationalization"}),"), as part of ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v2.0.0-alpha.71",children:"2.0.0-alpha.71"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Docusaurus 2 has now reached ",(0,n.jsx)(s.strong,{children:"full feature parity with Docusaurus 1"}),". \ud83c\udf89 And soon, after a few additional infrastructure updates and a bit more testing, the ",(0,n.jsx)(s.strong,{children:"first Docusaurus 2 beta"})," will be released."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"We went the extra mile"}),", and the new i18n support is ",(0,n.jsx)(s.strong,{children:"even better than in Docusaurus 1"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["In this post, we will present you the ",(0,n.jsx)(s.strong,{children:"translation workflow"}),", explain some ",(0,n.jsx)(s.strong,{children:"design decisions"})," and ",(0,n.jsx)(s.strong,{children:"showcase early adopter sites"})," that just went live: ",(0,n.jsx)(s.a,{href:"https://jestjs.io/",children:"Jest"}),", ",(0,n.jsx)(s.a,{href:"https://learn.redwoodjs.com/",children:"Redwood"}),", and ",(0,n.jsx)(s.a,{href:"https://datagit.ir/",children:"Datagit"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["We also ",(0,n.jsx)(s.strong,{children:"dogfood"})," the i18n support on the ",(0,n.jsx)(s.strong,{children:"Docusaurus 2 site itself"}),", and this post is already available in ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n",children:"English"})," and ",(0,n.jsx)(s.a,{href:"https://docusaurus.io/fr/blog/2021/03/09/releasing-docusaurus-i18n",children:"French"}),"!"]})]})}function d(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var n=t(27378);const a={},r=n.createContext(a);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/62906.29cb0fc3.js b/assets/js/62906.29cb0fc3.js new file mode 100644 index 0000000000..5ea63d6f5b --- /dev/null +++ b/assets/js/62906.29cb0fc3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62906],{62906:(t,e,a)=>{a.d(e,{diagram:()=>g});var r=a(16525),i=a(63294),n=a(9500),d=a(88472),s=a(99854),o=a(97312);a(27693),a(7608),a(31699);let l={};const p=function(t){const e=Object.entries(l).find((e=>e[1].label===t));if(e)return e[0]},c={draw:function(t,e,a,r){const c=(0,s.c)().class;l={},s.l.info("Rendering diagram "+t);const g=(0,s.c)().securityLevel;let h;"sandbox"===g&&(h=(0,i.Ys)("#i"+e));const f="sandbox"===g?(0,i.Ys)(h.nodes()[0].contentDocument.body):(0,i.Ys)("body"),u=f.select(`[id='${e}']`);var x;(x=u).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),x.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),x.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),x.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),x.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),x.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),x.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),x.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");const y=new d.k({multigraph:!0});y.setGraph({isMultiGraph:!0}),y.setDefaultEdgeLabel((function(){return{}}));const b=r.db.getClasses(),m=Object.keys(b);for(const i of m){const t=b[i],e=o.s.drawClass(u,t,c,r);l[e.id]=e,y.setNode(e.id,e),s.l.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){s.l.info("tjoho"+p(t.id1)+p(t.id2)+JSON.stringify(t)),y.setEdge(p(t.id1),p(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){s.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=o.s.drawNote(u,t,c,r);l[e.id]=e,y.setNode(e.id,e),t.class&&t.class in b&&y.setEdge(t.id,p(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.bK)(y),y.nodes().forEach((function(t){void 0!==t&&void 0!==y.node(t)&&(s.l.debug("Node "+t+": "+JSON.stringify(y.node(t))),f.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(y.node(t).x-y.node(t).width/2)+","+(y.node(t).y-y.node(t).height/2)+" )"))})),y.edges().forEach((function(t){void 0!==t&&void 0!==y.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(y.edge(t))),o.s.drawEdge(u,y.edge(t),y.edge(t).relation,c,r))}));const w=u.node().getBBox(),k=w.width+40,E=w.height+40;(0,s.i)(u,E,k,c.useMaxWidth);const L=`${w.x-20} ${w.y-20} ${k} ${E}`;s.l.debug(`viewBox ${L}`),u.attr("viewBox",L)}},g={parser:r.p,db:r.d,renderer:c,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}},97312:(t,e,a)=>{a.d(e,{p:()=>s,s:()=>p});var r=a(63294),i=a(99854);let n=0;const d=function(t){let e=t.id;return t.type&&(e+="<"+t.type+">"),e},s=function(t){let e="",a="",r="",n="",d=t.substring(0,1),s=t.substring(t.length-1,t.length);d.match(/[#+~-]/)&&(n=d);let o=/[\s\w)~]/;s.match(o)||(a=l(s));const p=""===n?0:1;let c=""===a?t.length:t.length-1;const g=(t=t.substring(p,c)).indexOf("("),h=t.indexOf(")");if(g>1&&h>g&&h<=t.length){let d=t.substring(0,g).trim();const s=t.substring(g+1,h);if(e=n+d+"("+(0,i.x)(s.trim())+")",h<t.length){let n=t.substring(h+1,h+2);""!==a||n.match(o)?r=t.substring(h+1).trim():(a=l(n),r=t.substring(h+2).trim()),""!==r&&(":"===r.charAt(0)&&(r=r.substring(1).trim()),r=" : "+(0,i.x)(r),e+=r)}}else e=n+(0,i.x)(t);return{displayText:e,cssStyle:a}},o=function(t,e,a,r){let i=s(e);const n=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&n.attr("style",i.cssStyle),a||n.attr("dy",r.textHeight)},l=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},p={getClassTitleString:d,drawClass:function(t,e,a,r){i.l.debug("Rendering class ",e,a);const n=e.id,s={id:n,label:e.id,width:0,height:0},l=t.append("g").attr("id",r.db.lookUpDomId(n)).attr("class","classGroup");let p;p=e.link?l.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):l.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=p.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",a.textHeight),c=!1}));let g=d(e);const h=p.append("tspan").text(g).attr("class","title");c||h.attr("dy",a.textHeight);const f=p.node().getBBox().height,u=l.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin/2).attr("y2",a.padding+f+a.dividerMargin/2),x=l.append("text").attr("x",a.padding).attr("y",f+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(t){o(x,t,c,a),c=!1}));const y=x.node().getBBox(),b=l.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin+y.height).attr("y2",a.padding+f+a.dividerMargin+y.height),m=l.append("text").attr("x",a.padding).attr("y",f+2*a.dividerMargin+y.height+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(t){o(m,t,c,a),c=!1}));const w=l.node().getBBox();var k=" ";e.cssClasses.length>0&&(k+=e.cssClasses.join(" "));const E=l.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",w.width+2*a.padding).attr("height",w.height+a.padding+.5*a.dividerMargin).attr("class",k).node().getBBox().width;return p.node().childNodes.forEach((function(t){t.setAttribute("x",(E-t.getBBox().width)/2)})),e.tooltip&&p.insert("title").text(e.tooltip),u.attr("x2",E),b.attr("x2",E),s.width=E,s.height=w.height+a.padding+.5*a.dividerMargin,s},drawEdge:function(t,e,a,d,s){const o=function(t){switch(t){case s.db.relationType.AGGREGATION:return"aggregation";case s.db.relationType.EXTENSION:return"extension";case s.db.relationType.COMPOSITION:return"composition";case s.db.relationType.DEPENDENCY:return"dependency";case s.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const l=e.points,p=(0,r.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(r.$0Z),c=t.append("path").attr("d",p(l)).attr("id","edge"+n).attr("class","relation");let g,h,f="";d.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==a.relation.lineType&&c.attr("class","relation dashed-line"),10==a.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==a.relation.type1&&c.attr("marker-start","url("+f+"#"+o(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&c.attr("marker-end","url("+f+"#"+o(a.relation.type2)+"End)");const u=e.points.length;let x,y,b,m,w=i.u.calcLabelPosition(e.points);if(g=w.x,h=w.y,u%2!=0&&u>1){let t=i.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=i.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[u-1]);i.l.debug("cardinality_1_point "+JSON.stringify(t)),i.l.debug("cardinality_2_point "+JSON.stringify(r)),x=t.x,y=t.y,b=r.x,m=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),r=e.append("text").attr("class","label").attr("x",g).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=r;const i=r.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",i.x-d.padding/2).attr("y",i.y-d.padding/2).attr("width",i.width+d.padding).attr("height",i.height+d.padding)}if(i.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",x).attr("y",y).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",m).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}n++},drawNote:function(t,e,a,r){i.l.debug("Rendering note ",e,a);const n=e.id,d={id:n,text:e.text,width:0,height:0},s=t.append("g").attr("id",n).attr("class","classGroup");let o=s.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){i.l.debug(`Adding line: ${t}`),o.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=s.node().getBBox(),c=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",p.width+2*a.padding).attr("height",p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(c-t.getBBox().width)/2)})),d.width=c,d.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,d},parseMember:s}}}]); \ No newline at end of file diff --git a/assets/js/62b37705.13f36193.js b/assets/js/62b37705.13f36193.js new file mode 100644 index 0000000000..17e885e01f --- /dev/null +++ b/assets/js/62b37705.13f36193.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8901],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),a=r(3620),i=r(44479),l=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function y(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function h({queryString:e=!1,groupId:t}){const r=(0,a.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function j(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=y(e),[s,a]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[l,u]=h({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:c})?e:null})();(0,i.Z)((()=>{f&&a(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var g=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),c=a[n].value;c!==r&&(l(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[0];break}case"ArrowLeft":{const r=i.indexOf(e.currentTarget)-1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[i.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:a.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=j(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},e,t)),(0,n.jsx)(k,w({},e,t))]})}function E(e){const t=(0,g.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},87048:(e,t,r)=>{r.d(t,{CW:()=>y,FS:()=>v,Fr:()=>m,Hc:()=>w,I1:()=>b,SR:()=>f,UM:()=>O,Zl:()=>j,mC:()=>d,mq:()=>g,rv:()=>x});var n=r(24246),o=r(27378),c=r(32054),s=r(92053),a=r(36712),i=r(41428),l=r(38112);const u=o.createContext(null);function d({children:e}){const[t,r]=(0,o.useState)(null),c=(0,o.useRef)(!0);return(0,o.useEffect)((()=>(c.current=!0,()=>{c.current=!1})),[]),(0,o.useEffect)((()=>{fetch("https://registry.npmjs.org/@docusaurus/core").then((e=>e.json())).then((e=>{if(!c.current)return;const t=Object.keys(e.versions).at(-1),n=e.time[t];r({name:t,time:n})}))}),[]),(0,n.jsx)(u.Provider,{value:t,children:e})}function p(){var e;const t=null===(e=(0,c.J)("default").preferredVersion)||void 0===e?void 0:e.name,r=(0,s.gB)("default");var n;const o=(null!==(n=r.find((e=>"current"!==e.name)))&&void 0!==n?n:r[0]).name;return t&&"current"!==t?t:o}function b(){const e=(0,o.useContext)(u);return e?(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"The hint text for the current canary version tag.",values:{canaryVersionName:(0,n.jsx)("b",{children:e.name})},children:"Current: {canaryVersionName}"})}):(0,n.jsx)("span",{children:(0,n.jsx)(a.Z,{description:"An example canary version tag when the actual version can't be fetched.",children:"Example: 0.0.0-4922"})})}function f(){const e=p();return(0,n.jsx)("span",{children:e})}function y(){return(0,n.jsx)("span",{children:3})}function m(){return(0,n.jsx)("span",{children:2})}function h({branch:e}){return(0,n.jsx)(i.Z,{to:`https://github.com/facebook/docusaurus/tree/${e}`,children:(0,n.jsx)("code",{children:e})})}function j(){return(0,n.jsx)(h,{branch:"docusaurus-v2"})}function g(){return(0,n.jsx)(h,{branch:"main"})}function O({children:e}){return(0,o.useContext)(u)?null:e}function v({children:e}){return(0,o.useContext)(u)?e:null}function w(){var e,t;const r=null!==(t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.name)&&void 0!==t?t:"0.0.0-4922",c=p();return(0,n.jsx)(l.Z,{language:"diff",children:`- "@docusaurus/core": "^${c}",\n- "@docusaurus/preset-classic": "^${c}",\n+ "@docusaurus/core": "${r}",\n+ "@docusaurus/preset-classic": "${r}",\n`})}function x(){var e;const t=null===(e=(0,o.useContext)(u))||void 0===e?void 0:e.time;return t?(0,n.jsx)(a.Z,{values:{time:(0,n.jsx)("b",{children:new Date(t).toLocaleString()})},children:"The latest canary version that's available on npm is published at {time}."}):null}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>L});var o=r(24246),c=r(27378),s=r(40624),a=r(29088),i=r(32711),l=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function y(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const h={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(h.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,g({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:h.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,a.Z)();return(0,o.jsx)(i.uz,{className:h.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const C=e=>`${e};`;function D(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:a}}=s,l=y();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:h.playgroundContainer,children:(0,o.jsx)(i.nu,O(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:C,theme:l},c),{children:"top"===a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function N(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){N(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function L(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({React:c},c,n);var _,V,A=r(89583),$=r(6324),R=r.n($);function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const M=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),F=RegExp("\\{(?<range>[\\d,-]+)\\}"),H={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(U=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},H),z=null!=(z={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?z:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(z)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(z)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(z,e))})),U);var U,z;const Y=Object.keys(H);function G(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function Q(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&F.test(c)){const e=c.match(F).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return G(["js","jsBlock"],t);case"jsx":case"tsx":return G(["js","jsBlock","jsx"],t);case"html":return G(["js","jsBlock","html"],t);case"python":case"py":case"bash":return G(["bash"],t);case"markdown":case"md":return G(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return G(["tex"],t);case"lua":case"haskell":case"sql":return G(["lua"],t);case"wasm":return G(["wasm"],t);case"vb":case"vba":case"visual-basic":return G(["vb","rem"],t);case"vbnet":return G(["vbnet","rem"],t);case"batch":return G(["rem"],t);case"basic":return G(["rem","f90"],t);case"fsharp":return G(["js","ml"],t);case"ocaml":case"sml":return G(["ml"],t);case"fortran":return G(["f90"],t);case"cobol":return G(["cobol"],t);default:return G(Y,t)}}(n,o),a=r.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<a.length;){const e=a[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),a.splice(b,1)}r=a.join("\n");const p={};return Object.entries(i).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(_=p)[V=t])&&void 0!==r||(_[V]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(y());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,X.codeBlockContainer,A.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ae=r(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){le(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,s.Z)(t,r&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},a),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ye(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",ye(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function he(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function je(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",je(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){he(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),a=(0,c.useRef)(void 0),i=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),a.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ge,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:a,language:i}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=y(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),a=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,a),(0,c.useEffect)((()=>{a()}),[e,a]),(0,c.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),h=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(M))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:j,code:g}=Q(e,{metastring:r,language:p,magicComments:u}),O=null!=a?a:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[h&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:h}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ae.y$,{theme:b,code:g,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:j[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:g})]})]})]})}function Ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function De(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ne(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Le=(Te=function(e){var{children:t}=e,r=Ne(e,["children"]);const n=(0,a.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof s?Ee:ne;return(0,o.jsx)(i,De(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ce(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(D,Ie({scope:Z},e)):(0,o.jsx)(Te,Ie({},e))});var Te;function Ze(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Le,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ze(e,t,r[t])}))}return e}({},e))}},75449:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>u,toc:()=>p});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),a=r(87048);const i={},l="Canary releases",u={id:"canary",title:"Canary releases",description:"Docusaurus has a canary releases system.",source:"@site/community/4-canary.mdx",sourceDirName:".",slug:"/canary",permalink:"/community/canary",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/community/4-canary.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,sidebarPosition:4,frontMatter:{},sidebar:"community",previous:{title:"Contributing",permalink:"/community/contributing"},next:{title:"Release process",permalink:"/community/release-process"}},d={},p=[{value:"Canary npm dist tag",id:"canary-npm-dist-tag",level:2},{value:"Using a canary release",id:"using-a-canary-release",level:2}];function b(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"canary-releases",children:"Canary releases"}),"\n","\n",(0,n.jsxs)(a.mC,{children:[(0,n.jsx)(t.p,{children:"Docusaurus has a canary releases system."}),(0,n.jsxs)(t.p,{children:["It permits you to ",(0,n.jsx)(t.strong,{children:"test new unreleased features"})," as soon as the pull requests are merged on the ",(0,n.jsx)(t.a,{href:"/community/release-process#next-version",children:"next version"})," of Docusaurus."]}),(0,n.jsxs)(t.p,{children:["It is a good way to ",(0,n.jsx)(t.strong,{children:"give feedback to maintainers"}),", ensuring the newly implemented feature works as intended."]}),(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsx)(t.p,{children:"Using a canary release in production might seem risky, but in practice, it's not."}),(0,n.jsx)(t.p,{children:"A canary release passes all automated tests and is used in production by the Docusaurus site itself."})]}),(0,n.jsx)(a.UM,{children:(0,n.jsx)(t.admonition,{type:"warning",children:(0,n.jsxs)(t.p,{children:["The canary version shown below ",(0,n.jsx)(t.strong,{children:"may not be up-to-date"}),". Please go to the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm page"})," to find the actual version name."]})})}),(0,n.jsx)(a.FS,{children:(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["The canary version shown below is directly fetched from npm and ",(0,n.jsx)(t.strong,{children:"is up-to-date"}),". You can directly use these numbers in your package.json."]})})}),(0,n.jsx)(t.h2,{id:"canary-npm-dist-tag",children:"Canary npm dist tag"}),(0,n.jsxs)(t.p,{children:["For any code-related commit on ",(0,n.jsx)(t.code,{children:"main"}),", the continuous integration will publish a canary release under the ",(0,n.jsx)(t.code,{children:"@canary"})," npm dist tag. It generally takes up to 10 minutes."]}),(0,n.jsxs)(t.p,{children:["You can see on ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"npm"})," the current dist tags:"]}),(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"latest"}),": stable releases (Current: ",(0,n.jsx)(a.SR,{}),")"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"canary"}),": canary releases (",(0,n.jsx)(a.I1,{}),")"]}),"\n"]}),(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["Make sure to use the latest canary release and check the publication date (sometimes the publish process fails). ",(0,n.jsx)(a.rv,{})]})}),(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Canary versions follow the naming convention ",(0,n.jsx)(t.code,{children:"0.0.0-commitNumber"}),"."]})}),(0,n.jsx)(t.h2,{id:"using-a-canary-release",children:"Using a canary release"}),(0,n.jsxs)(t.p,{children:["Take the latest version published under the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@docusaurus/core?activeTab=versions",children:"canary npm dist tag"})," (",(0,n.jsx)(a.I1,{}),")."]}),(0,n.jsxs)(t.p,{children:["Use it for all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," dependencies in your ",(0,n.jsx)(t.code,{children:"package.json"}),":"]}),(0,n.jsx)(a.Hc,{}),(0,n.jsx)(t.p,{children:"Then, install the dependencies again and start your site:"}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install\nnpm start\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn install\nyarn start\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm install\npnpm start\n"})})})]}),(0,n.jsxs)(t.p,{children:["You can also upgrade the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages with command line:"]}),(0,n.jsxs)(c.Z,{children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add --exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary\n"})})})]}),(0,n.jsxs)(t.admonition,{type:"warning",children:[(0,n.jsxs)(t.p,{children:["Make sure to include all the ",(0,n.jsx)(t.code,{children:"@docusaurus/*"})," packages."]}),(0,n.jsxs)(t.p,{children:["For canary releases, prefer using an exact version instead of a semver range (avoid the ",(0,n.jsx)(t.code,{children:"^"})," prefix)."]})]})]})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}}}]); \ No newline at end of file diff --git a/assets/js/63429.a9816ff4.js b/assets/js/63429.a9816ff4.js new file mode 100644 index 0000000000..6a596e9299 --- /dev/null +++ b/assets/js/63429.a9816ff4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63429],{63429:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/641734b9.c1c50df7.js b/assets/js/641734b9.c1c50df7.js new file mode 100644 index 0000000000..855e7bdec3 --- /dev/null +++ b/assets/js/641734b9.c1c50df7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5856],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",s(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,n)=>{n.d(t,{Z:()=>ie});var r=n(24246),o=n(27378);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function i(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),s=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:s.length>0?(0,r.jsx)(r.Fragment,{children:s}):null}}(e.children);var i;const a=null!==(i=e.title)&&void 0!==i?i:t;return c(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){s(e,t,n[t])}))}return e}({},e,a&&{title:a}),{children:n})}var a=n(40624),l=n(36712),u=n(89583);const d={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function p({type:e,className:t,children:n}){return(0,r.jsx)("div",{className:(0,a.Z)(u.k.common.admonition,u.k.common.admonitionType(e),d.admonition,t),children:n})}function b({icon:e,title:t}){return(0,r.jsxs)("div",{className:d.admonitionHeading,children:[(0,r.jsx)("span",{className:d.admonitionIcon,children:e}),t]})}function f({children:e}){return e?(0,r.jsx)("div",{className:d.admonitionContent,children:e}):null}function h(e){const{type:t,icon:n,title:o,children:s,className:c}=e;return(0,r.jsxs)(p,{type:t,className:c,children:[(0,r.jsx)(b,{title:o,icon:n}),(0,r.jsx)(f,{children:s})]})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){return(0,r.jsx)("svg",y(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const w={icon:(0,r.jsx)(g,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function v(e){return(0,r.jsx)(h,O(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){j(e,t,n[t])}))}return e}({},w,e),{className:(0,a.Z)("alert alert--secondary",e.className),children:e.children}))}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function S(e){return(0,r.jsx)("svg",P(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const C={icon:(0,r.jsx)(S,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function N(e){return(0,r.jsx)(h,D(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){k(e,t,n[t])}))}return e}({},C,e),{className:(0,a.Z)("alert alert--success",e.className),children:e.children}))}var E=n(35434);function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const B={icon:(0,r.jsx)(E.Z,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function Z(e){return(0,r.jsx)(h,I(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){T(e,t,n[t])}))}return e}({},B,e),{className:(0,a.Z)("alert alert--info",e.className),children:e.children}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,r.jsx)("svg",A(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const R={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function V(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function H(e){return(0,r.jsx)("svg",V(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function F(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const G={icon:(0,r.jsx)(H,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function U(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const Y={icon:(0,r.jsx)(_,{}),title:(0,r.jsx)(l.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}const X={note:v,tip:N,info:Z,warning:function(e){return(0,r.jsx)(h,z(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){M(e,t,n[t])}))}return e}({},R,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(h,F(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){$(e,t,n[t])}))}return e}({},G,e),{className:(0,a.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,r.jsx)(v,Q({title:"secondary"},e)),important:e=>(0,r.jsx)(Z,Q({title:"important"},e)),success:e=>(0,r.jsx)(N,Q({title:"success"},e)),caution:function(e){return(0,r.jsx)(h,U(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){q(e,t,n[t])}))}return e}({},Y,e),{className:(0,a.Z)("alert alert--warning",e.className),children:e.children}))}},ee=Q({},X,K);var te=n(52615);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var re,oe;const se=(re=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ne(e,t,n[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,r.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,r.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,r.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(re,Object.getOwnPropertyDescriptors(oe)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(oe)).forEach((function(e){Object.defineProperty(re,e,Object.getOwnPropertyDescriptor(oe,e))})),re);function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ie(e){const t=i(e),n=(o=t.type,se[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),se.info));var o;return(0,r.jsx)(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ce(e,t,n[t])}))}return e}({},t))}},61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>D});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),d=n(53589);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function h(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,l._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){p(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=h(e),[c,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[l,u]=y({queryString:n,groupId:r}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),f=(()=>{const e=null!=l?l:p;return m({value:e,tabValues:s})?e:null})();(0,a.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){w(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),s=i[r].value;s!==n&&(l(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function S({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function k(e){const t=g(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,v({},e,t)),(0,r.jsx)(S,v({},e,t))]})}function D(e){const t=(0,j.Z)();return(0,r.jsx)(k,x(v({},e),{children:f(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},13381:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(6698));function s({url:e}){return(0,r.jsx)("div",{style:{padding:10},children:(0,r.jsx)(o.Z,{url:e,style:{minWidth:"min(100%,45vw)",width:800,maxWidth:"100%",overflow:"hidden"},bodyStyle:{padding:0},children:(0,r.jsx)("iframe",{src:e,title:e,style:{display:"block",width:"100%",height:300}})})})}},6698:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function a(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:l}){return(0,r.jsxs)("div",{className:s.browserWindow,style:a(i({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:l,children:e})]})}},89995:(e,t,n)=>{n.d(t,{Z:()=>j});var r=n(24246),o=n(27378),s=n(40624),c=n(27124),i=n.n(c),a=n(41428),l=n(36712),u=n(78844),d=n(38112),p=n(77773),b=n(31688);const f={color:"color_mVUL",input:"input_HUC3",colorInput:"colorInput_C1YB",colorTable:"colorTable_Js7s"};function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e,t){const n=i()(e).contrast(i()(t));return n>7?"AAA \ud83c\udfc5":n>4.5?"AA \ud83d\udc4d":"Fail \ud83d\udd34"}function j(){const{colorMode:e,setColorMode:t}=(0,u.I)(),n="dark"===e,c=n?b.r$:b.Yj,h=n?b.iR:b.Nu,[j,O]=(0,o.useState)(c),[w,v]=(0,o.useState)(c),[x,P]=(0,o.useState)(h),[S,k]=(0,o.useState)(b.NT),[D,C]=(0,o.useState)(n?b.Ax:b.lP);function N(e){const t=e.target.value.replace(/^(?=[^#])/,"#");O(t);try{v(i()(t).hex())}catch(n){}}return(0,o.useEffect)((()=>{C(n?b.Ax:b.lP)}),[n]),(0,o.useEffect)((()=>{var e;const t=JSON.parse(null!==(e=D.get())&&void 0!==e?e:"{}");var n,r,o,s;O(null!==(n=t.baseColor)&&void 0!==n?n:c),v(null!==(r=t.baseColor)&&void 0!==r?r:c),P(null!==(o=t.background)&&void 0!==o?o:h),k(null!==(s=t.shades)&&void 0!==s?s:b.NT)}),[D,h,c]),(0,o.useEffect)((()=>{(0,b.i3)({baseColor:w,background:x,shades:S},n),D.set(JSON.stringify({baseColor:w,background:x,shades:S}))}),[w,x,S,D,n]),(0,r.jsxs)("div",{children:[(0,r.jsx)(p.Z,{type:"tip",children:(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body",values:{wcagLink:(0,r.jsx)(a.Z,{href:"https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast",children:(0,r.jsx)(l.Z,{id:"colorGenerator.tip.body.wcagLink.label",children:"WCAG-AA contrast ratio"})})},children:"Aim for at least {wcagLink} for the primary color to ensure readability. Use the Docusaurus website itself to preview how your color palette would look like. You can use alternative palettes in dark mode because one color doesn't usually work in both light and dark mode."})})}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"primary_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.primary.label",children:"Primary Color:"})})})," ",(0,r.jsx)("input",{id:"primary_color",type:"text",className:(0,s.Z)(f.input,"margin-right--sm"),value:j,onChange:N}),(0,r.jsx)("input",{type:"color",className:f.colorInput,value:w,onChange:N}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--primary margin-left--md",onClick:()=>t(n?"light":"dark"),children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label",values:{colorMode:n?(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.light",children:"light"}):(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.modeToggle.label.colorMode.dark",children:"dark"})},children:"Edit {colorMode} mode"})}),(0,r.jsx)("button",{type:"button",className:"clean-btn button button--secondary margin-left--md",onClick:()=>{O(c),v(c),P(h),k(b.NT)},children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.resetButton.label",children:"Reset"})})]}),(0,r.jsxs)("p",{children:[(0,r.jsx)("label",{htmlFor:"background_color",children:(0,r.jsx)("strong",{className:"margin-right--sm",children:(0,r.jsx)(l.Z,{id:"colorGenerator.inputs.background.label",children:"Background:"})})}),(0,r.jsx)("input",{id:"background_color",type:"color",className:(0,s.Z)(f.colorInput,"margin-right--sm"),value:x,onChange:e=>{P(e.target.value)}})]}),(0,r.jsx)("div",{children:(0,r.jsxs)("table",{className:f.colorTable,children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading1",children:"CSS Variable Name"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading2",description:"This column is the color's representation in hex",children:"Hex"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading3",description:"This column is the adjusted shades' adjustment values relative to the primary color",children:"Adjustment"})}),(0,r.jsx)("th",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.table.heading4",description:"This column is WCAG contrast rating: AAA, AA, Fail",children:"Contrast Rating"})})]})}),(0,r.jsx)("tbody",{children:(0,b.t8)(S,w).sort(((e,t)=>e.displayOrder-t.displayOrder)).map((e=>{const{variableName:t,adjustment:n,adjustmentInput:o,hex:s}=e;return(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{children:(0,r.jsx)("code",{children:t})}),(0,r.jsxs)("td",{children:[(0,r.jsx)("span",{className:f.color,style:{backgroundColor:s}}),(0,r.jsx)("code",{className:"margin-left--sm",children:s.toLowerCase()})]}),(0,r.jsx)("td",{children:"--ifm-color-primary"===t?0:(0,r.jsx)("input",{"aria-label":`${t} CSS variable name`,className:f.input,type:"number",value:o,onChange:e=>{const r=parseFloat(e.target.value);k(y(m({},S),{[t]:y(m({},S[t]),{adjustmentInput:e.target.value,adjustment:Number.isNaN(r)?n:r/100})}))}})}),(0,r.jsx)("td",{style:{fontSize:"medium",backgroundColor:x,color:s},children:(0,r.jsx)("b",{children:g(s,x)})})]},t)}))})]})}),(0,r.jsx)("p",{children:(0,r.jsx)(l.Z,{id:"colorGenerator.text",values:{cssPath:(0,r.jsx)("code",{children:"src/css/custom.css"})},children:"Replace the variables in {cssPath} with these new variables."})}),(0,r.jsx)(d.Z,{className:"language-css",title:"/src/css/custom.css",children:`${n?"[data-theme='dark']":":root"} {\n${(0,b.t8)(S,w).sort(((e,t)=>e.codeOrder-t.codeOrder)).map((e=>` ${e.variableName}: ${e.hex.toLowerCase()};`)).join("\n")}${x!==h?`\n --ifm-background-color: ${x};`:""}\n}`})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ae});var r={};n.r(r),n.d(r,{ButtonExample:()=>B});var o=n(24246),s=n(27378),c=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),d=n(94544),p=n(30691),b=n(78844),f=n(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){g(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function w(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function k(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(k,{})]})}const C=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,s=w(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=c,l=h();var d;const p=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:l},s),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(S,{})]})}))})}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){E(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function B(e){return(0,o.jsx)("button",I(T({type:"button"},e),{style:T({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function Z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const L=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Z(e,t,n[t])}))}return e}({React:s},s,r);var A,_,M=n(89583),z=n(6324),R=n.n(z);function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const V=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),$={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(G=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){W(e,t,n[t])}))}return e}({},$),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(G,Object.getOwnPropertyDescriptors(q)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(q)).forEach((function(e){Object.defineProperty(G,e,Object.getOwnPropertyDescriptor(q,e))})),G);var G,q;const U=Object.keys($);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function J(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&H.test(s)){const e=s.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(U,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:d[t]&&(a[d[t]].range+=`${a[d[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const p={};return Object.entries(a).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var n;null!==(n=(A=p)[_=t])&&void 0!==n||(A[_]=[]),p[t].push(e)}))})),{lineClassNames:p,code:n}}const Q={codeBlockContainer:"codeBlockContainer_jDV4"};function X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){X(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Q.codeBlockContainer,M.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function pe({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,c.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){fe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function we({code:e,className:t}){const[n,r]=(0,s.useState)(!1),i=(0,s.useRef)(void 0),a=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Se={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function ke({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Se.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:Se.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:l),b=h(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(V))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:g,code:j}=J(e,{metastring:n,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:s,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(ke,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(we,{className:ne.codeButton,code:j})]})]})]})}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Te(e,t,n[t])}))}return e}const Be=(Ze=function(e){var{children:t}=e,n=Ee(e,["children"]);const r=(0,i.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof c?De:re;return(0,o.jsx)(a,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:L},e)):(0,o.jsx)(Ze,Ie({},e))});var Ze;function Le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Le(e,t,n[t])}))}return e}({},e))}},74277:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>p,default:()=>y,frontMatter:()=>d,metadata:()=>b,toc:()=>h});var r=n(24246),o=n(71670),s=n(97555),c=n(61132),i=n(89995),a=n(13381);const l="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Please do not modify the classnames! This is a breaking change, and annoying\n// for users!\n\n/**\n * These class names are used to style page layouts in Docusaurus, meant to be\n * targeted by user-provided custom CSS selectors.\n */\nexport const ThemeClassNames = {\n page: {\n blogListPage: 'blog-list-page',\n blogPostPage: 'blog-post-page',\n blogTagsListPage: 'blog-tags-list-page',\n blogTagPostListPage: 'blog-tags-post-list-page',\n\n docsDocPage: 'docs-doc-page',\n docsTagsListPage: 'docs-tags-list-page',\n docsTagDocListPage: 'docs-tags-doc-list-page',\n\n mdxPage: 'mdx-page',\n },\n wrapper: {\n main: 'main-wrapper',\n // TODO these wrapper class names are now quite useless\n // TODO do breaking change later in 3.0\n // we already add plugin name/id class on <html>: that's enough\n blogPages: 'blog-wrapper',\n docsPages: 'docs-wrapper',\n mdxPages: 'mdx-wrapper',\n },\n common: {\n editThisPage: 'theme-edit-this-page',\n lastUpdated: 'theme-last-updated',\n backToTopButton: 'theme-back-to-top-button',\n codeBlock: 'theme-code-block',\n admonition: 'theme-admonition',\n unlistedBanner: 'theme-unlisted-banner',\n\n admonitionType: (type: string) => `theme-admonition-${type}`,\n },\n layout: {\n // TODO add other stable classNames here\n },\n\n /**\n * Follows the naming convention \"theme-{blog,doc,version,page}?-<suffix>\"\n */\n docs: {\n docVersionBanner: 'theme-doc-version-banner',\n docVersionBadge: 'theme-doc-version-badge',\n docBreadcrumbs: 'theme-doc-breadcrumbs',\n docMarkdown: 'theme-doc-markdown',\n docTocMobile: 'theme-doc-toc-mobile',\n docTocDesktop: 'theme-doc-toc-desktop',\n docFooter: 'theme-doc-footer',\n docFooterTagsRow: 'theme-doc-footer-tags-row',\n docFooterEditMetaRow: 'theme-doc-footer-edit-meta-row',\n docSidebarContainer: 'theme-doc-sidebar-container',\n docSidebarMenu: 'theme-doc-sidebar-menu',\n docSidebarItemCategory: 'theme-doc-sidebar-item-category',\n docSidebarItemLink: 'theme-doc-sidebar-item-link',\n docSidebarItemCategoryLevel: (level: number) =>\n `theme-doc-sidebar-item-category-level-${level}` as const,\n docSidebarItemLinkLevel: (level: number) =>\n `theme-doc-sidebar-item-link-level-${level}` as const,\n // TODO add other stable classNames here\n },\n blog: {\n // TODO add other stable classNames here\n blogFooterTagsRow: 'theme-blog-footer-tags-row',\n blogFooterEditMetaRow: 'theme-blog-footer-edit-meta-row',\n },\n pages: {\n pageFooterEditMetaRow: 'theme-pages-footer-edit-meta-row',\n },\n} as const;\n";var u=n(38112);const d={description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},p="Styling and Layout",b={id:"styling-layout",title:"Styling and Layout",description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.",source:"@site/docs/styling-layout.mdx",sourceDirName:".",slug:"/styling-layout",permalink:"/docs/styling-layout",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/styling-layout.mdx",tags:[],version:"current",lastUpdatedBy:"Alberto Vilches",lastUpdatedAt:1706785433e3,frontMatter:{description:"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps."},sidebar:"docs",previous:{title:"Head metadata",permalink:"/docs/markdown-features/head-metadata"},next:{title:"Swizzling",permalink:"/docs/swizzling"}},f={},h=[{value:"Global styles",id:"global-styles",level:2},{value:"Theme Class Names",id:"theme-class-names",level:3},{value:"Styling your site with Infima",id:"styling-your-site-with-infima",level:3},{value:"Dark Mode",id:"dark-mode",level:3},{value:"Data Attributes",id:"data-attributes",level:3},{value:"Mobile View",id:"mobile-view",level:3},{value:"CSS modules",id:"css-modules",level:2},{value:"CSS-in-JS",id:"css-in-js",level:2},{value:"Sass/SCSS",id:"sassscss",level:2},{value:"Global styles using Sass/SCSS",id:"global-styles-using-sassscss",level:3},{value:"Modules using Sass/SCSS",id:"modules-using-sassscss",level:3},{value:"TypeScript support",id:"typescript-support",level:4}];function m(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:n}=t;return n||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"styling-and-layout",children:"Styling and Layout"}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["This section is focused on styling through stylesheets. For more advanced customizations (DOM structure, React code...), refer to the ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling guide"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"A Docusaurus site is a single-page React application. You can style it the way you style React apps."}),"\n",(0,r.jsx)(t.p,{children:"There are a few approaches/frameworks which will work, depending on your preferences and the type of website you are trying to build. Websites that are highly interactive and behave more like web apps will benefit from more modern styling approaches that co-locate styles with the components. Component styling can also be particularly useful when you wish to customize or swizzle a component."}),"\n",(0,r.jsx)(t.h2,{id:"global-styles",children:"Global styles"}),"\n",(0,r.jsx)(t.p,{children:"This is the most traditional way of styling that most developers (including non-front-end developers) would be familiar with. It works fine for small websites that do not have much customization."}),"\n",(0,r.jsxs)(t.p,{children:["If you're using ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you can create your own CSS files (e.g. ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),") and import them globally by passing them as an option of the classic theme."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n theme: {\n customCss: ['./src/css/custom.css'],\n },\n // highlight-end\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.p,{children:"Any CSS you write within that file will be available globally and can be referenced directly using string literals."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:".purple-text {\n color: rebeccapurple;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function MyComponent() {\n return (\n <main>\n <h1 className="purple-text">Purple Heading!</h1>\n </main>\n );\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"If you want to add CSS to any element, you can open the DevTools in your browser to inspect its class names. Class names come in several kinds:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Theme class names"}),". These class names are listed exhaustively in ",(0,r.jsx)(t.a,{href:"#theme-class-names",children:"the next subsection"}),". They don't have any default properties. You should always prioritize targeting those stable class names in your custom CSS."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Infima class names"}),". These class names are found in the classic theme and usually follow the ",(0,r.jsx)(t.a,{href:"http://getbem.com/naming/",children:"BEM convention"})," of ",(0,r.jsx)(t.code,{children:"block__element--modifier"}),". They are usually stable but are still considered implementation details, so you should generally avoid targeting them. However, you can ",(0,r.jsx)(t.a,{href:"#styling-your-site-with-infima",children:"modify Infima CSS variables"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"CSS module class names"}),". These class names have a hash in production (",(0,r.jsx)(t.code,{children:"codeBlockContainer_RIuc"}),") and are appended with a long file path in development. They are considered implementation details and you should almost always avoid targeting them in your custom CSS. If you must, you can use an ",(0,r.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors",children:"attribute selector"})," (",(0,r.jsx)(t.code,{children:"[class*='codeBlockContainer']"}),") that ignores the hash."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"theme-class-names",children:"Theme Class Names"}),"\n",(0,r.jsx)(t.p,{children:"We provide some stable CSS class names for robust and maintainable global layout styling. These names are theme-agnostic and meant to be targeted by custom CSS."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["If you can't find a way to create a robust CSS selector, please ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:"report your customization use-case"})," and we will consider adding new class names."]})}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Exhaustive list of stable class names"}),(0,r.jsx)(u.Z,{className:"language-ts",children:l.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"").replace(/^ *\n/gm,"").trim()})]}),"\n",(0,r.jsx)(t.h3,{id:"styling-your-site-with-infima",children:"Styling your site with Infima"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," uses ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima"})," as the underlying styling framework. Infima provides a flexible layout and common UI components styling suitable for content-centric websites (blogs, documentation, landing pages). For more details, check out the ",(0,r.jsx)(t.a,{href:"https://infima.dev/",children:"Infima website"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["When you scaffold your Docusaurus project with ",(0,r.jsx)(t.code,{children:"create-docusaurus"}),", the website will be generated with basic Infima stylesheets and default styling. You can override Infima CSS variables globally."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:":root {\n --ifm-color-primary: #25c2a0;\n --ifm-code-font-size: 95%;\n}\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Infima uses 7 shades of each color. We recommend using ",(0,r.jsx)(t.a,{href:"https://www.colorbox.io/",children:"ColorBox"})," to find the different shades of colors for your chosen primary color."]}),"\n",(0,r.jsxs)(t.p,{children:["Alternatively, use the following tool to generate the different shades for your website and copy the variables into ",(0,r.jsx)(t.code,{children:"/src/css/custom.css"}),"."]}),"\n",(0,r.jsx)(i.Z,{}),"\n",(0,r.jsx)(t.h3,{id:"dark-mode",children:"Dark Mode"}),"\n",(0,r.jsxs)(t.p,{children:["In light mode, the ",(0,r.jsx)(t.code,{children:"<html>"})," element has a ",(0,r.jsx)(t.code,{children:'data-theme="light"'})," attribute; in dark mode, it's ",(0,r.jsx)(t.code,{children:'data-theme="dark"'}),". Therefore, you can scope your CSS to dark-mode-only by targeting ",(0,r.jsx)(t.code,{children:"html"})," with a specific attribute."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:"/* Overriding root Infima variables */\n[data-theme='dark'] {\n --ifm-color-primary: #4e89e8;\n}\n/* Styling one class specially in dark mode */\n[data-theme='dark'] .purple-text {\n color: plum;\n}\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["It is possible to initialize the Docusaurus theme directly from a ",(0,r.jsx)(t.code,{children:"docusaurus-theme"})," query string parameter."]}),(0,r.jsx)(t.p,{children:"Examples:"}),(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-theme=dark"}),(0,r.jsx)(a.Z,{url:"/docs/configuration?docusaurus-theme=light"})]}),"\n",(0,r.jsx)(t.h3,{id:"data-attributes",children:"Data Attributes"}),"\n",(0,r.jsxs)(t.p,{children:["It is possible to inject ",(0,r.jsx)(t.code,{children:"<html>"})," data attributes with query string parameters following the ",(0,r.jsx)(t.code,{children:"docusaurus-data-<key>"})," pattern. This gives you the flexibility to style a page differently based on the query string."]}),"\n",(0,r.jsx)(t.p,{children:"For example, let's render one of our pages with a red border and no navbar:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="/src/css/custom.css"',children:"html[data-navbar='false'] .navbar {\n display: none;\n}\n\nhtml[data-red-border] div#__docusaurus {\n border: red solid thick;\n}\n"})}),"\n",(0,r.jsx)(a.Z,{url:"/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border"}),"\n",(0,r.jsx)(t.admonition,{title:"Iframe Mode",type:"tip",children:(0,r.jsxs)(t.p,{children:["If you plan to embed some Docusaurus pages on another site though an iframe, it can be useful to create an alternative display mode and use iframe urls such as ",(0,r.jsx)(t.code,{children:"https://mysite.com/docs/myDoc?docusaurus-data-mode=iframe"}),". It is your responsibility to provide the additional styles and decide which UI elements you want to keep or hide."]})}),"\n",(0,r.jsx)(t.h3,{id:"mobile-view",children:"Mobile View"}),"\n",(0,r.jsxs)(t.p,{children:["Docusaurus uses ",(0,r.jsx)(t.code,{children:"996px"})," as the cutoff between mobile screen width and desktop. If you want your layout to be different in the mobile view, you can use media queries."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",children:".banner {\n padding: 4rem;\n}\n/** In mobile view, reduce the padding */\n@media screen and (max-width: 996px) {\n .heroBanner {\n padding: 2rem;\n }\n}\n"})}),"\n",(0,r.jsx)(t.admonition,{title:"Customizing the breakpoint",type:"tip",children:(0,r.jsxs)(t.p,{children:["Some React components, such as the header and the sidebar, implement different JavaScript logic when in mobile view. If you change the breakpoint value in your custom CSS, you probably also want to update the invocations of the ",(0,r.jsx)(t.code,{children:"useWindowSize"})," hook by ",(0,r.jsx)(t.a,{href:"/docs/swizzling",children:"swizzling"})," the components it's used in and passing an explicit option argument."]})}),"\n",(0,r.jsx)(t.h2,{id:"css-modules",children:"CSS modules"}),"\n",(0,r.jsxs)(t.p,{children:["To style your components using ",(0,r.jsx)(t.a,{href:"https://github.com/css-modules/css-modules",children:"CSS Modules"}),", name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.css"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.css"}),"). Webpack will load such CSS files as CSS modules and you have to reference the class names as properties of the imported CSS module (as opposed to using plain strings). This is similar to the convention used in ",(0,r.jsx)(t.a,{href:"https://facebook.github.io/create-react-app/docs/adding-a-css-modules-stylesheet",children:"Create React App"}),"."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-css",metastring:'title="styles.module.css"',children:".main {\n padding: 12px;\n}\n\n.heading {\n font-weight: bold;\n}\n\n.contents {\n color: #ccc;\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.css';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <h1 className={styles.heading}>Hello!</h1>\n <article className={styles.contents}>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.p,{children:"The class names will be processed by webpack into a globally unique class name during build."}),"\n",(0,r.jsx)(t.h2,{id:"css-in-js",children:"CSS-in-JS"}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["CSS-in-JS support is a work in progress, so libs like MUI may have display quirks. ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/1640",children:"Welcoming PRs"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"sassscss",children:"Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["To use Sass/SCSS as your CSS preprocessor, install the unofficial Docusaurus plugin ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),". This plugin works for both global styles and the CSS modules approach:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Install ",(0,r.jsx)(t.a,{href:"https://github.com/rlamana/docusaurus-plugin-sass",children:(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})}),":"]}),"\n"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add docusaurus-plugin-sass sass\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add docusaurus-plugin-sass sass\n"})})})]}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["Include the plugin in your ",(0,r.jsx)(t.code,{children:"docusaurus.config.js"})," file:"]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n // highlight-next-line\n plugins: ['docusaurus-plugin-sass'],\n // ...\n};\n"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsx)(t.li,{children:"Write and import your stylesheets in Sass/SCSS as normal."}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"global-styles-using-sassscss",children:"Global styles using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["You can now set the ",(0,r.jsx)(t.code,{children:"customCss"})," property of ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"})," to point to your Sass/SCSS file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // ...\n theme: {\n // highlight-next-line\n customCss: ['./src/css/custom.scss'],\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(t.h3,{id:"modules-using-sassscss",children:"Modules using Sass/SCSS"}),"\n",(0,r.jsxs)(t.p,{children:["Name your stylesheet files with the ",(0,r.jsx)(t.code,{children:".module.scss"})," suffix (e.g. ",(0,r.jsx)(t.code,{children:"welcome.module.scss"}),") instead of ",(0,r.jsx)(t.code,{children:".css"}),". Webpack will use ",(0,r.jsx)(t.code,{children:"sass-loader"})," to preprocess your stylesheets and load them as CSS modules."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-scss",metastring:'title="styles.module.scss"',children:".main {\n padding: 12px;\n\n article {\n color: #ccc;\n }\n}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:"import styles from './styles.module.scss';\n\nfunction MyComponent() {\n return (\n <main className={styles.main}>\n <article>Lorem Ipsum</article>\n </main>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h4,{id:"typescript-support",children:"TypeScript support"}),"\n",(0,r.jsxs)(t.p,{children:["To enable TypeScript support for Sass/SCSS modules, the TypeScript configuration should be updated to add the ",(0,r.jsx)(t.code,{children:"docusaurus-plugin-sass"})," type definitions. This can be done in the ",(0,r.jsx)(t.code,{children:"tsconfig.json"})," file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-diff",children:'{\n "extends": "@tsconfig/docusaurus/tsconfig.json",\n "compilerOptions": {\n ...\n+ "types": ["docusaurus-plugin-sass"]\n }\n}\n'})})]})}function y(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}}}]); \ No newline at end of file diff --git a/assets/js/64474.bbf12bf9.js b/assets/js/64474.bbf12bf9.js new file mode 100644 index 0000000000..2fe31c486c --- /dev/null +++ b/assets/js/64474.bbf12bf9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64474],{96157:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(36715);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},36715:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(22701),l=n(78246);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},64474:(e,t,n)=>{n.d(t,{diagram:()=>i});var r=n(64627),l=(n(88472),n(63294));n(99854),n(88103),n(65029),n(46188),n(9500),n(36715);n(96157);n(63345),n(1110);n(25541);l.c_6;var o=n(29119);n(27693),n(7608),n(31699),n(76576);const a={},s=function(e){const t=Object.keys(e);for(const n of t)a[n]=e[n]},i={parser:r.p,db:r.f,renderer:o.f,styles:o.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,s(e.flowchart),r.f.clear(),r.f.setGen("gen-1")}}},29119:(e,t,n)=>{n.d(t,{a:()=>h,f:()=>u});var r=n(88472),l=n(63294),o=n(99854),a=n(30198),s=n(96157),i=n(83445),c=n(31739);const d=(e,t)=>i.Z.lang.round(c.Z.parse(e)[t]);var p=n(46442);const b={},w=function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let c="default";r.classes.length>0&&(c=r.classes.join(" ")),c+=" flowchart-label";const d=(0,o.k)(r.styles);let p,b=void 0!==r.text?r.text:r.id;if(o.l.info("vertex",r,r.labelType),"markdown"===r.labelType)o.l.info("vertex",r,r.labelType);else if((0,o.n)((0,o.c)().flowchart.htmlLabels)){const e={label:b.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};p=(0,s.a)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",d.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(r.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}t.setNode(r.id,{labelStyle:d.labelStyle,shape:f,labelText:b,labelType:r.labelType,rx:w,ry:w,class:c,style:d.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:d.labelStyle,labelType:r.labelType,shape:f,labelText:b,rx:w,ry:w,class:c,style:d.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,o.c)().flowchart.padding})}))},f=function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}e.forEach((function(n){s++;const c="L-"+n.start+"-"+n.end;void 0===i[c]?(i[c]=0,o.l.info("abc78 new entry",c,i[c])):(i[c]++,o.l.info("abc78 new entry",c,i[c]));let d=c+"-"+i[c];o.l.info("abc78 new link id to be used is",c,d,i[c]);const p="LS-"+n.start,w="LE-"+n.end,f={style:"",labelStyle:""};switch(f.minlen=n.length||1,"arrow_open"===n.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(n.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==n.style){const e=(0,o.k)(n.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==n.interpolate?f.curve=(0,o.o)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?f.curve=(0,o.o)(e.defaultInterpolate,l.c_6):f.curve=(0,o.o)(b.curve,l.c_6),void 0===n.text?void 0!==n.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=n.labelType,f.label=n.text.replace(o.e.lineBreakRegex,"\n"),void 0===n.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=d,f.classes="flowchart-link "+p+" "+w,t.setEdge(n.start,n.end,f,s)}))},u={setConf:function(e){const t=Object.keys(e);for(const n of t)b[n]=e[n]},addVertices:w,addEdges:f,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),p=d.nodeSpacing||50,b=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ys)("#i"+t));const h="sandbox"===c?(0,l.Ys)(u.nodes()[0].contentDocument.body):(0,l.Ys)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:p,ranksep:b,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.td_)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}w(v,y,t,h,g,s),f(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.p)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},h=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=d,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return p.Z(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/646.84e8f9f8.js b/assets/js/646.84e8f9f8.js new file mode 100644 index 0000000000..9193975847 --- /dev/null +++ b/assets/js/646.84e8f9f8.js @@ -0,0 +1,10847 @@ +"use strict"; +exports.id = 646; +exports.ids = [646]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 39646: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(33426); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99854); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42605); + + + + + + + + + + + + + + +const idCache = {}; +const set = (key, val) => { + idCache[key] = val; +}; +const get = (k) => idCache[k]; +const keys = () => Object.keys(idCache); +const size = () => keys().length; +const idCache$1 = { + get, + set, + keys, + size +}; +const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cy", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit); +const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("class", "divider").attr("x2", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 2).attr("y1", 0).attr("y2", 0); +const drawSimpleState = (g, stateDef) => { + const state = g.append("text").attr("x", 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const classBox = state.node().getBBox(); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", classBox.width + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", classBox.height + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return state; +}; +const drawDescrState = (g, stateDef) => { + const addTspan = function(textEl, txt, isFirst2) { + const tSpan = textEl.append("tspan").attr("x", 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).text(txt); + if (!isFirst2) { + tSpan.attr("dy", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight); + } + }; + const title = g.append("text").attr("x", 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 1.3 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); + const titleBox = title.node().getBBox(); + const titleHeight = titleBox.height; + const description = g.append("text").attr("x", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr( + "y", + titleHeight + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding * 0.4 + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + ).attr("class", "state-description"); + let isFirst = true; + let isSecond = true; + stateDef.descriptions.forEach(function(descr) { + if (!isFirst) { + addTspan(description, descr, isSecond); + isSecond = false; + } + isFirst = false; + }); + const descrLine = g.append("line").attr("x1", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y1", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("y2", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("class", "descr-divider"); + const descrBox = description.node().getBBox(); + const width = Math.max(descrBox.width, titleBox.width); + descrLine.attr("x2", width + 3 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", width + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const addTitleAndBox = (g, stateDef, altBkg) => { + const pad = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const dblPad = 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const orgBox = g.node().getBBox(); + const orgWidth = orgBox.width; + const orgX = orgBox.x; + const title = g.append("text").attr("x", 0).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift).attr("font-size", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const titleBox = title.node().getBBox(); + const titleWidth = titleBox.width + dblPad; + let width = Math.max(titleWidth, orgWidth); + if (width === orgWidth) { + width = width + dblPad; + } + let startX; + const graphBox = g.node().getBBox(); + if (stateDef.doc) + ; + startX = orgX - pad; + if (titleWidth > orgWidth) { + startX = (orgWidth - width) / 2 + pad; + } + if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) { + startX = orgX - (titleWidth - orgWidth) / 2; + } + const lineY = 1 - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight; + g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width).attr( + "height", + graphBox.height + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift + 1 + ).attr("rx", "0"); + title.attr("x", startX + pad); + if (titleWidth <= orgWidth) { + title.attr("x", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); + } + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 3).attr("rx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("rx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const drawEndState = (g) => { + g.append("circle").attr("class", "end-state-outer").attr("r", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding).attr( + "cx", + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ).attr( + "cy", + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ); + return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2).attr("cy", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2); +}; +const drawForkJoinState = (g, stateDef) => { + let width = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkWidth; + let height = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkHeight; + if (stateDef.parentId) { + let tmp = width; + width = height; + height = tmp; + } + return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width).attr("height", height).attr("x", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); +}; +const _drawLongText = (_text, x, y, g) => { + let textHeight = 0; + const textElem = g.append("text"); + textElem.style("text-anchor", "start"); + textElem.attr("class", "noteText"); + let text = _text.replace(/\r\n/g, "<br/>"); + text = text.replace(/\n/g, "<br/>"); + const lines = text.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); + let tHeight = 1.25 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin; + for (const line2 of lines) { + const txt = line2.trim(); + if (txt.length > 0) { + const span = textElem.append("tspan"); + span.text(txt); + if (tHeight === 0) { + const textBounds = span.node().getBBox(); + tHeight += textBounds.height; + } + textHeight += tHeight; + span.attr("x", x + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + span.attr("y", y + textHeight + 1.25 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + } + } + return { textWidth: textElem.node().getBBox().width, textHeight }; +}; +const drawNote = (text, g) => { + g.attr("class", "state-note"); + const note = g.append("rect").attr("x", 0).attr("y", (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + const rectElem = g.append("g"); + const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); + note.attr("height", textHeight + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + note.attr("width", textWidth + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin * 2); + return note; +}; +const drawState = function(elem, stateDef) { + const id = stateDef.id; + const stateInfo = { + id, + label: stateDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "stateGroup"); + if (stateDef.type === "start") { + drawStartState(g); + } + if (stateDef.type === "end") { + drawEndState(g); + } + if (stateDef.type === "fork" || stateDef.type === "join") { + drawForkJoinState(g, stateDef); + } + if (stateDef.type === "note") { + drawNote(stateDef.note.text, g); + } + if (stateDef.type === "divider") { + drawDivider(g); + } + if (stateDef.type === "default" && stateDef.descriptions.length === 0) { + drawSimpleState(g, stateDef); + } + if (stateDef.type === "default" && stateDef.descriptions.length > 0) { + drawDescrState(g, stateDef); + } + const stateBox = g.node().getBBox(); + stateInfo.width = stateBox.width + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + stateInfo.height = stateBox.height + 2 * (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + idCache$1.set(id, stateInfo); + return stateInfo; +}; +let edgeCount = 0; +const drawEdge = function(elem, path, relation) { + const getRelationType = function(type) { + switch (type) { + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: + return "aggregation"; + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: + return "extension"; + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: + return "composition"; + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY: + return "dependency"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(_styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY) + "End)" + ); + if (relation.title !== void 0) { + const label = elem.append("g").attr("class", "stateLabel"); + const { x, y } = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + const rows = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title); + let titleHeight = 0; + const titleRows = []; + let maxWidth = 0; + let minX = 0; + for (let i = 0; i <= rows.length; i++) { + const title = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight); + const boundstmp = title.node().getBBox(); + maxWidth = Math.max(maxWidth, boundstmp.width); + minX = Math.min(minX, boundstmp.x); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundstmp.x, x, y + titleHeight); + if (titleHeight === 0) { + const titleBox = title.node().getBBox(); + titleHeight = titleBox.height; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Title height", titleHeight, y); + } + titleRows.push(title); + } + let boxHeight = titleHeight * rows.length; + if (rows.length > 1) { + const heightAdj = (rows.length - 1) * titleHeight * 0.5; + titleRows.forEach((title, i) => title.attr("y", y + i * titleHeight - heightAdj)); + boxHeight = titleHeight * rows.length; + } + const bounds = label.node().getBBox(); + label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", boxHeight + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info(bounds); + } + edgeCount++; +}; +let conf; +const transformationLog = {}; +const setConf = function() { +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().state; + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering diagram " + text); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const rootDoc = diagObj.db.getRootDoc(); + renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj); + const padding = conf.padding; + const bounds = diagram2.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + const svgWidth = width * 1.75; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, svgWidth, conf.useMaxWidth); + diagram2.attr( + "viewBox", + `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + " " + height + ); +}; +const getLabelWidth = (text) => { + return text ? text.length * conf.fontSizeFactor : 1; +}; +const renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => { + const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + compound: true, + multigraph: true + }); + let i; + let edgeFreeDoc = true; + for (i = 0; i < doc.length; i++) { + if (doc[i].stmt === "relation") { + edgeFreeDoc = false; + break; + } + } + if (parentId) { + graph.setGraph({ + rankdir: "LR", + multigraph: true, + compound: true, + // acyclicer: 'greedy', + ranker: "tight-tree", + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + isMultiGraph: true + // ranksep: 5, + // nodesep: 1 + }); + } else { + graph.setGraph({ + rankdir: "TB", + multigraph: true, + compound: true, + // isCompound: true, + // acyclicer: 'greedy', + // ranker: 'longest-path' + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + ranker: "tight-tree", + // ranker: 'network-simplex' + isMultiGraph: true + }); + } + graph.setDefaultEdgeLabel(function() { + return {}; + }); + diagObj.db.extract(doc); + const states = diagObj.db.getStates(); + const relations = diagObj.db.getRelations(); + const keys2 = Object.keys(states); + for (const key of keys2) { + const stateDef = states[key]; + if (parentId) { + stateDef.parentId = parentId; + } + let node; + if (stateDef.doc) { + let sub = diagram2.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); + node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); + { + sub = addTitleAndBox(sub, stateDef, altBkg); + let boxBounds = sub.node().getBBox(); + node.width = boxBounds.width; + node.height = boxBounds.height + conf.padding / 2; + transformationLog[stateDef.id] = { y: conf.compositTitleSize }; + } + } else { + node = drawState(diagram2, stateDef); + } + if (stateDef.note) { + const noteDef = { + descriptions: [], + id: stateDef.id + "-note", + note: stateDef.note, + type: "note" + }; + const note = drawState(diagram2, noteDef); + if (stateDef.note.position === "left of") { + graph.setNode(node.id + "-note", note); + graph.setNode(node.id, node); + } else { + graph.setNode(node.id, node); + graph.setNode(node.id + "-note", note); + } + graph.setParent(node.id, node.id + "-group"); + graph.setParent(node.id + "-note", node.id + "-group"); + } else { + graph.setNode(node.id, node); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); + let cnt = 0; + relations.forEach(function(relation) { + cnt++; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Setting edge", relation); + graph.setEdge( + relation.id1, + relation.id2, + { + relation, + width: getLabelWidth(relation.title), + height: conf.labelHeight * _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title).length, + labelpos: "c" + }, + "id" + cnt + ); + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Graph after layout", graph.nodes()); + const svgElem = diagram2.node(); + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.warn("Node " + v + ": " + JSON.stringify(graph.node(v))); + root.select("#" + svgElem.id + " #" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )" + ); + root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2); + const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider"); + dividers.forEach((divider) => { + const parent = divider.parentElement; + let pWidth = 0; + let pShift = 0; + if (parent) { + if (parent.parentElement) { + pWidth = parent.parentElement.getBBox().width; + } + pShift = parseInt(parent.getAttribute("data-x-shift"), 10); + if (Number.isNaN(pShift)) { + pShift = 0; + } + } + divider.setAttribute("x1", 0 - pShift + 8); + divider.setAttribute("x2", pWidth - pShift - 8); + }); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("No Node " + v + ": " + JSON.stringify(graph.node(v))); + } + }); + let stateBox = svgElem.getBBox(); + graph.edges().forEach(function(e) { + if (e !== void 0 && graph.edge(e) !== void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + drawEdge(diagram2, graph.edge(e), graph.edge(e).relation); + } + }); + stateBox = svgElem.getBBox(); + const stateInfo = { + id: parentId ? parentId : "root", + label: parentId ? parentId : "root", + width: 0, + height: 0 + }; + stateInfo.width = stateBox.width + 2 * conf.padding; + stateInfo.height = stateBox.height + 2 * conf.padding; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); + return stateInfo; +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 33426: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ S: () => (/* binding */ STMT_RELATION), +/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ b: () => (/* binding */ STMT_STATE), +/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99854); + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "classDefStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "class": 42, "CLASSENTITY_IDS": 43, "STYLECLASS": 44, "openDirective": 45, "typeDirective": 46, "closeDirective": 47, ":": 48, "argDirective": 49, "direction_tb": 50, "direction_bt": 51, "direction_rl": 52, "direction_lr": 53, "eol": 54, ";": 55, "EDGE_STATE": 56, "STYLE_SEPARATOR": 57, "left_of": 58, "right_of": 59, "open_directive": 60, "type_directive": 61, "arg_directive": 62, "close_directive": 63, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 7: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "class", 43: "CLASSENTITY_IDS", 44: "STYLECLASS", 48: ":", 50: "direction_tb", 51: "direction_bt", 52: "direction_rl", 53: "direction_lr", 55: ";", 56: "EDGE_STATE", 57: "STYLE_SEPARATOR", 58: "left_of", 59: "right_of", 60: "open_directive", 61: "type_directive", 62: "arg_directive", 63: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 5: + this.$ = []; + break; + case 6: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 7: + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = "nl"; + break; + case 12: + this.$ = $$[$0]; + break; + case 13: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 14: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 15: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 19: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 20: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 24: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 25: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 26: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 30: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 31: + case 32: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 33: + case 34: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 35: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 39: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 40: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 41: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 44: + case 45: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 46: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 47: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 50: + yy.parseDirective("%%{", "open_directive"); + break; + case 51: + yy.parseDirective($$[$0], "type_directive"); + break; + case 52: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 53: + yy.parseDirective("}%%", "close_directive", "state"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])], + defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 41; + case 1: + return 50; + case 2: + return 51; + case 3: + return 52; + case 4: + return 53; + case 5: + this.begin("open_directive"); + return 60; + case 6: + this.begin("type_directive"); + return 61; + case 7: + this.popState(); + this.begin("arg_directive"); + return 48; + case 8: + this.popState(); + this.popState(); + return 63; + case 9: + return 62; + case 10: + break; + case 11: + break; + case 12: + return 5; + case 13: + break; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + this.pushState("SCALE"); + return 17; + case 18: + return 18; + case 19: + this.popState(); + break; + case 20: + this.begin("acc_title"); + return 33; + case 21: + this.popState(); + return "acc_title_value"; + case 22: + this.begin("acc_descr"); + return 35; + case 23: + this.popState(); + return "acc_descr_value"; + case 24: + this.begin("acc_descr_multiline"); + break; + case 25: + this.popState(); + break; + case 26: + return "acc_descr_multiline_value"; + case 27: + this.pushState("CLASSDEF"); + return 38; + case 28: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 29: + this.popState(); + this.pushState("CLASSDEFID"); + return 39; + case 30: + this.popState(); + return 40; + case 31: + this.pushState("CLASS"); + return 42; + case 32: + this.popState(); + this.pushState("CLASS_STYLE"); + return 43; + case 33: + this.popState(); + return 44; + case 34: + this.pushState("SCALE"); + return 17; + case 35: + return 18; + case 36: + this.popState(); + break; + case 37: + this.pushState("STATE"); + break; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 39: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 40: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 41: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 42: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 43: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 44: + return 50; + case 45: + return 51; + case 46: + return 52; + case 47: + return 53; + case 48: + this.pushState("STATE_STRING"); + break; + case 49: + this.pushState("STATE_ID"); + return "AS"; + case 50: + this.popState(); + return "ID"; + case 51: + this.popState(); + break; + case 52: + return "STATE_DESCR"; + case 53: + return 19; + case 54: + this.popState(); + break; + case 55: + this.popState(); + this.pushState("struct"); + return 20; + case 56: + break; + case 57: + this.popState(); + return 21; + case 58: + break; + case 59: + this.begin("NOTE"); + return 29; + case 60: + this.popState(); + this.pushState("NOTE_ID"); + return 58; + case 61: + this.popState(); + this.pushState("NOTE_ID"); + return 59; + case 62: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 63: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 64: + break; + case 65: + return "NOTE_TEXT"; + case 66: + this.popState(); + return "ID"; + case 67: + this.popState(); + this.pushState("NOTE_TEXT"); + return 24; + case 68: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 31; + case 69: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 31; + case 70: + return 7; + case 71: + return 7; + case 72: + return 16; + case 73: + return 56; + case 74: + return 24; + case 75: + yy_.yytext = yy_.yytext.trim(); + return 14; + case 76: + return 15; + case 77: + return 28; + case 78: + return 57; + case 79: + return 5; + case 80: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [14, 15], "inclusive": false }, "close_directive": { "rules": [14, 15], "inclusive": false }, "arg_directive": { "rules": [8, 9, 14, 15], "inclusive": false }, "type_directive": { "rules": [7, 8, 14, 15], "inclusive": false }, "open_directive": { "rules": [6, 14, 15], "inclusive": false }, "struct": { "rules": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [66], "inclusive": false }, "FLOATING_NOTE": { "rules": [63, 64, 65], "inclusive": false }, "NOTE_TEXT": { "rules": [68, 69], "inclusive": false }, "NOTE_ID": { "rules": [67], "inclusive": false }, "NOTE": { "rules": [60, 61, 62], "inclusive": false }, "CLASS_STYLE": { "rules": [33], "inclusive": false }, "CLASS": { "rules": [32], "inclusive": false }, "CLASSDEFID": { "rules": [30], "inclusive": false }, "CLASSDEF": { "rules": [28, 29], "inclusive": false }, "acc_descr_multiline": { "rules": [25, 26], "inclusive": false }, "acc_descr": { "rules": [23], "inclusive": false }, "acc_title": { "rules": [21], "inclusive": false }, "SCALE": { "rules": [18, 19, 35, 36], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [50], "inclusive": false }, "STATE_STRING": { "rules": [51, 52], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], "inclusive": false }, "ID": { "rules": [14, 15], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.m.parseDirective(this, statement, context, type); +}; +const setRootDoc = (o) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.I)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.v)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.t +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/64627.483d0641.js b/assets/js/64627.483d0641.js new file mode 100644 index 0000000000..6b0cd5cb61 --- /dev/null +++ b/assets/js/64627.483d0641.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64627],{64627:(t,e,s)=>{s.d(e,{d:()=>ut,f:()=>st,p:()=>n});var u=s(63294),i=s(99854),r=function(){var t=function(t,e,s,u){for(s=s||{},u=t.length;u--;s[t[u]]=e);return s},e=[1,9],s=[1,7],u=[1,6],i=[1,8],r=[1,20,21,22,23,38,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],n=[2,10],a=[1,20],c=[1,21],o=[1,22],l=[1,23],h=[1,30],A=[1,32],p=[1,33],d=[1,34],y=[1,56],E=[1,55],f=[1,36],D=[1,37],k=[1,38],g=[1,39],b=[1,40],_=[1,51],F=[1,53],T=[1,49],C=[1,54],S=[1,50],B=[1,57],m=[1,52],v=[1,58],x=[1,59],L=[1,41],I=[1,42],R=[1,43],N=[1,44],$=[1,62],O=[1,67],P=[1,20,21,22,23,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],w=[1,71],U=[1,70],V=[1,72],G=[20,21,23,84,86],M=[1,98],K=[1,103],Y=[1,102],j=[1,99],X=[1,95],z=[1,101],H=[1,97],W=[1,104],Q=[1,100],q=[1,105],Z=[1,96],J=[20,21,22,23,84,86],tt=[20,21,22,23,55,84,86],et=[20,21,22,23,40,53,55,57,59,61,63,65,67,69,72,74,76,77,79,84,86,97,110,113,114,117,119,122,123,124],st=[20,21,23],ut=[20,21,23,53,69,84,86,97,110,113,114,117,119,122,123,124],it=[1,12,20,21,22,23,24,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],rt=[53,69,97,110,113,114,117,119,122,123,124],nt=[1,134],at=[1,133],ct=[1,141],ot=[1,155],lt=[1,156],ht=[1,157],At=[1,158],pt=[1,143],dt=[1,145],yt=[1,149],Et=[1,150],ft=[1,151],Dt=[1,152],kt=[1,153],gt=[1,154],bt=[1,159],_t=[1,160],Ft=[1,139],Tt=[1,140],Ct=[1,147],St=[1,142],Bt=[1,146],mt=[1,144],vt=[20,21,22,23,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],xt=[1,162],Lt=[20,21,22,23,26,53,69,97,113,114,117,119,122,123,124],It=[1,182],Rt=[1,178],Nt=[1,179],$t=[1,183],Ot=[1,180],Pt=[1,181],wt=[12,21,22,24],Ut=[86,124,127],Vt=[20,21,22,23,24,26,38,40,43,53,69,84,92,93,94,95,96,97,98,113,117,119,122,123,124],Gt=[22,114],Mt=[42,58,60,62,64,66,71,73,75,76,78,80,124,125,126],Kt=[1,250],Yt=[1,248],jt=[1,252],Xt=[1,246],zt=[1,247],Ht=[1,249],Wt=[1,251],Qt=[1,253],qt=[1,270],Zt=[20,21,23,114],Jt=[20,21,22,23,69,92,113,114,117,118,119,120],te={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,textNoTags:39,SQS:40,text:41,SQE:42,end:43,direction:44,acc_title:45,acc_title_value:46,acc_descr:47,acc_descr_value:48,acc_descr_multiline_value:49,link:50,node:51,styledVertex:52,AMP:53,vertex:54,STYLE_SEPARATOR:55,idString:56,DOUBLECIRCLESTART:57,DOUBLECIRCLEEND:58,PS:59,PE:60,"(-":61,"-)":62,STADIUMSTART:63,STADIUMEND:64,SUBROUTINESTART:65,SUBROUTINEEND:66,VERTEX_WITH_PROPS_START:67,"NODE_STRING[field]":68,COLON:69,"NODE_STRING[value]":70,PIPE:71,CYLINDERSTART:72,CYLINDEREND:73,DIAMOND_START:74,DIAMOND_STOP:75,TAGEND:76,TRAPSTART:77,TRAPEND:78,INVTRAPSTART:79,INVTRAPEND:80,linkStatement:81,arrowText:82,TESTSTR:83,START_LINK:84,edgeText:85,LINK:86,edgeTextToken:87,STR:88,MD_STR:89,textToken:90,keywords:91,STYLE:92,LINKSTYLE:93,CLASSDEF:94,CLASS:95,CLICK:96,DOWN:97,UP:98,textNoTagsToken:99,stylesOpt:100,"idString[vertex]":101,"idString[class]":102,CALLBACKNAME:103,CALLBACKARGS:104,HREF:105,LINK_TARGET:106,"STR[link]":107,"STR[tooltip]":108,alphaNum:109,DEFAULT:110,numList:111,INTERPOLATE:112,NUM:113,COMMA:114,style:115,styleComponent:116,NODE_STRING:117,UNIT:118,BRKT:119,PCT:120,idStringToken:121,MINUS:122,MULT:123,UNICODE_TEXT:124,TEXT:125,TAGSTART:126,EDGE_TEXT:127,alphaNumToken:128,direction_tb:129,direction_bt:130,direction_rl:131,direction_lr:132,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",42:"SQE",43:"end",45:"acc_title",46:"acc_title_value",47:"acc_descr",48:"acc_descr_value",49:"acc_descr_multiline_value",53:"AMP",55:"STYLE_SEPARATOR",57:"DOUBLECIRCLESTART",58:"DOUBLECIRCLEEND",59:"PS",60:"PE",61:"(-",62:"-)",63:"STADIUMSTART",64:"STADIUMEND",65:"SUBROUTINESTART",66:"SUBROUTINEEND",67:"VERTEX_WITH_PROPS_START",68:"NODE_STRING[field]",69:"COLON",70:"NODE_STRING[value]",71:"PIPE",72:"CYLINDERSTART",73:"CYLINDEREND",74:"DIAMOND_START",75:"DIAMOND_STOP",76:"TAGEND",77:"TRAPSTART",78:"TRAPEND",79:"INVTRAPSTART",80:"INVTRAPEND",83:"TESTSTR",84:"START_LINK",86:"LINK",88:"STR",89:"MD_STR",92:"STYLE",93:"LINKSTYLE",94:"CLASSDEF",95:"CLASS",96:"CLICK",97:"DOWN",98:"UP",101:"idString[vertex]",102:"idString[class]",103:"CALLBACKNAME",104:"CALLBACKARGS",105:"HREF",106:"LINK_TARGET",107:"STR[link]",108:"STR[tooltip]",110:"DEFAULT",112:"INTERPOLATE",113:"NUM",114:"COMMA",117:"NODE_STRING",118:"UNIT",119:"BRKT",120:"PCT",122:"MINUS",123:"MULT",124:"UNICODE_TEXT",125:"TEXT",126:"TAGSTART",127:"EDGE_TEXT",129:"direction_tb",130:"direction_bt",131:"direction_rl",132:"direction_lr"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[51,1],[51,5],[52,1],[52,3],[54,4],[54,4],[54,6],[54,4],[54,4],[54,4],[54,8],[54,4],[54,4],[54,4],[54,6],[54,4],[54,4],[54,4],[54,4],[54,4],[54,1],[50,2],[50,3],[50,3],[50,1],[50,3],[85,1],[85,2],[85,1],[85,1],[81,1],[82,3],[41,1],[41,2],[41,1],[41,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[39,1],[39,2],[39,1],[39,1],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,3],[37,5],[37,5],[37,7],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[111,1],[111,3],[100,1],[100,3],[115,1],[115,2],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[90,1],[90,1],[90,1],[90,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[87,1],[87,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[56,1],[56,2],[109,1],[109,2],[44,1],[44,1],[44,1],[44,1]],performAction:function(t,e,s,u,i,r,n){var a=r.length-1;switch(i){case 5:u.parseDirective("%%{","open_directive");break;case 6:u.parseDirective(r[a],"type_directive");break;case 7:r[a]=r[a].trim().replace(/'/g,'"'),u.parseDirective(r[a],"arg_directive");break;case 8:u.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:(!Array.isArray(r[a])||r[a].length>0)&&r[a-1].push(r[a]),this.$=r[a-1];break;case 12:case 184:case 57:case 79:case 182:this.$=r[a];break;case 19:u.setDirection("TB"),this.$="TB";break;case 20:u.setDirection(r[a-1]),this.$=r[a-1];break;case 35:this.$=r[a-1].nodes;break;case 41:this.$=u.addSubGraph(r[a-6],r[a-1],r[a-4]);break;case 42:this.$=u.addSubGraph(r[a-3],r[a-1],r[a-3]);break;case 43:this.$=u.addSubGraph(void 0,r[a-1],void 0);break;case 45:this.$=r[a].trim(),u.setAccTitle(this.$);break;case 46:case 47:this.$=r[a].trim(),u.setAccDescription(this.$);break;case 51:u.addLink(r[a-2].stmt,r[a],r[a-1]),this.$={stmt:r[a],nodes:r[a].concat(r[a-2].nodes)};break;case 52:u.addLink(r[a-3].stmt,r[a-1],r[a-2]),this.$={stmt:r[a-1],nodes:r[a-1].concat(r[a-3].nodes)};break;case 53:this.$={stmt:r[a-1],nodes:r[a-1]};break;case 54:this.$={stmt:r[a],nodes:r[a]};break;case 55:case 129:case 131:this.$=[r[a]];break;case 56:this.$=r[a-4].concat(r[a]);break;case 58:this.$=r[a-2],u.setClass(r[a-2],r[a]);break;case 59:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"square");break;case 60:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"doublecircle");break;case 61:this.$=r[a-5],u.addVertex(r[a-5],r[a-2],"circle");break;case 62:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"ellipse");break;case 63:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"stadium");break;case 64:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"subroutine");break;case 65:this.$=r[a-7],u.addVertex(r[a-7],r[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[r[a-5],r[a-3]]]));break;case 66:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"cylinder");break;case 67:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"round");break;case 68:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"diamond");break;case 69:this.$=r[a-5],u.addVertex(r[a-5],r[a-2],"hexagon");break;case 70:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"odd");break;case 71:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"trapezoid");break;case 72:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"inv_trapezoid");break;case 73:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"lean_right");break;case 74:this.$=r[a-3],u.addVertex(r[a-3],r[a-1],"lean_left");break;case 75:this.$=r[a],u.addVertex(r[a]);break;case 76:r[a-1].text=r[a],this.$=r[a-1];break;case 77:case 78:r[a-2].text=r[a-1],this.$=r[a-2];break;case 80:var c=u.destructLink(r[a],r[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:r[a-1]};break;case 81:case 87:case 102:case 104:this.$={text:r[a],type:"text"};break;case 82:case 88:case 103:this.$={text:r[a-1].text+""+r[a],type:r[a-1].type};break;case 83:case 89:this.$={text:r[a],type:"string"};break;case 84:case 90:case 105:this.$={text:r[a],type:"markdown"};break;case 85:c=u.destructLink(r[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 86:this.$=r[a-1];break;case 106:this.$=r[a-4],u.addClass(r[a-2],r[a]);break;case 107:this.$=r[a-4],u.setClass(r[a-2],r[a]);break;case 108:case 116:this.$=r[a-1],u.setClickEvent(r[a-1],r[a]);break;case 109:case 117:this.$=r[a-3],u.setClickEvent(r[a-3],r[a-2]),u.setTooltip(r[a-3],r[a]);break;case 110:this.$=r[a-2],u.setClickEvent(r[a-2],r[a-1],r[a]);break;case 111:this.$=r[a-4],u.setClickEvent(r[a-4],r[a-3],r[a-2]),u.setTooltip(r[a-4],r[a]);break;case 112:this.$=r[a-2],u.setLink(r[a-2],r[a]);break;case 113:this.$=r[a-4],u.setLink(r[a-4],r[a-2]),u.setTooltip(r[a-4],r[a]);break;case 114:this.$=r[a-4],u.setLink(r[a-4],r[a-2],r[a]);break;case 115:this.$=r[a-6],u.setLink(r[a-6],r[a-4],r[a]),u.setTooltip(r[a-6],r[a-2]);break;case 118:this.$=r[a-1],u.setLink(r[a-1],r[a]);break;case 119:this.$=r[a-3],u.setLink(r[a-3],r[a-2]),u.setTooltip(r[a-3],r[a]);break;case 120:this.$=r[a-3],u.setLink(r[a-3],r[a-2],r[a]);break;case 121:this.$=r[a-5],u.setLink(r[a-5],r[a-4],r[a]),u.setTooltip(r[a-5],r[a-2]);break;case 122:this.$=r[a-4],u.addVertex(r[a-2],void 0,void 0,r[a]);break;case 123:this.$=r[a-4],u.updateLink([r[a-2]],r[a]);break;case 124:this.$=r[a-4],u.updateLink(r[a-2],r[a]);break;case 125:this.$=r[a-8],u.updateLinkInterpolate([r[a-6]],r[a-2]),u.updateLink([r[a-6]],r[a]);break;case 126:this.$=r[a-8],u.updateLinkInterpolate(r[a-6],r[a-2]),u.updateLink(r[a-6],r[a]);break;case 127:this.$=r[a-6],u.updateLinkInterpolate([r[a-4]],r[a]);break;case 128:this.$=r[a-6],u.updateLinkInterpolate(r[a-4],r[a]);break;case 130:case 132:r[a-2].push(r[a]),this.$=r[a-2];break;case 134:this.$=r[a-1]+r[a];break;case 183:case 185:this.$=r[a-1]+""+r[a];break;case 186:this.$={stmt:"dir",value:"TB"};break;case 187:this.$={stmt:"dir",value:"BT"};break;case 188:this.$={stmt:"dir",value:"RL"};break;case 189:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:s,22:u,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:s,22:u,24:i},t(r,n,{17:11}),{7:12,13:[1,13]},{16:14,21:s,22:u,24:i},{16:15,21:s,22:u,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,44:31,45:A,47:p,49:d,51:35,52:45,53:y,54:46,56:47,69:E,92:f,93:D,94:k,95:g,96:b,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x,129:L,130:I,131:R,132:N},{8:60,10:[1,61],15:$},t([10,15],[2,6]),t(r,[2,17]),t(r,[2,18]),t(r,[2,19]),{20:[1,64],21:[1,65],22:O,27:63,30:66},t(P,[2,11]),t(P,[2,12]),t(P,[2,13]),t(P,[2,14]),t(P,[2,15]),t(P,[2,16]),{9:68,20:w,21:U,23:V,50:69,81:73,84:[1,74],86:[1,75]},{9:76,20:w,21:U,23:V},{9:77,20:w,21:U,23:V},{9:78,20:w,21:U,23:V},{9:79,20:w,21:U,23:V},{9:80,20:w,21:U,23:V},{9:82,20:w,21:U,22:[1,81],23:V},t(P,[2,44]),{46:[1,83]},{48:[1,84]},t(P,[2,47]),t(G,[2,54],{30:85,22:O}),{22:[1,86]},{22:[1,87]},{22:[1,88]},{22:[1,89]},{26:M,53:K,69:Y,88:[1,93],97:j,103:[1,90],105:[1,91],109:92,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z,128:94},t(P,[2,186]),t(P,[2,187]),t(P,[2,188]),t(P,[2,189]),t(J,[2,55]),t(J,[2,57],{55:[1,106]}),t(tt,[2,75],{121:119,40:[1,107],53:y,57:[1,108],59:[1,109],61:[1,110],63:[1,111],65:[1,112],67:[1,113],69:E,72:[1,114],74:[1,115],76:[1,116],77:[1,117],79:[1,118],97:_,110:F,113:T,114:C,117:S,119:B,122:m,123:v,124:x}),t(et,[2,182]),t(et,[2,143]),t(et,[2,144]),t(et,[2,145]),t(et,[2,146]),t(et,[2,147]),t(et,[2,148]),t(et,[2,149]),t(et,[2,150]),t(et,[2,151]),t(et,[2,152]),t(et,[2,153]),{9:120,20:w,21:U,23:V},{11:121,14:[1,122]},t(st,[2,8]),t(r,[2,20]),t(r,[2,26]),t(r,[2,27]),{21:[1,123]},t(ut,[2,34],{30:124,22:O}),t(P,[2,35]),{51:125,52:45,53:y,54:46,56:47,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},t(it,[2,48]),t(it,[2,49]),t(it,[2,50]),t(rt,[2,79],{82:126,71:[1,128],83:[1,127]}),{85:129,87:130,88:[1,131],89:[1,132],124:nt,127:at},t([53,69,71,83,97,110,113,114,117,119,122,123,124],[2,85]),t(P,[2,36]),t(P,[2,37]),t(P,[2,38]),t(P,[2,39]),t(P,[2,40]),{22:ct,24:ot,26:lt,38:ht,39:135,43:At,53:pt,69:dt,84:yt,88:[1,137],89:[1,138],91:148,92:Et,93:ft,94:Dt,95:kt,96:gt,97:bt,98:_t,99:136,113:Ft,117:Tt,119:Ct,122:St,123:Bt,124:mt},t(vt,n,{17:161}),t(P,[2,45]),t(P,[2,46]),t(G,[2,53],{53:xt}),{53:y,56:163,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},{110:[1,164],111:165,113:[1,166]},{53:y,56:167,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},{53:y,56:168,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},t(st,[2,108],{22:[1,169],104:[1,170]}),{88:[1,171]},t(st,[2,116],{128:173,22:[1,172],26:M,53:K,69:Y,97:j,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z}),t(st,[2,118],{22:[1,174]}),t(Lt,[2,184]),t(Lt,[2,171]),t(Lt,[2,172]),t(Lt,[2,173]),t(Lt,[2,174]),t(Lt,[2,175]),t(Lt,[2,176]),t(Lt,[2,177]),t(Lt,[2,178]),t(Lt,[2,179]),t(Lt,[2,180]),t(Lt,[2,181]),{53:y,56:175,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},{41:176,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:184,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:186,59:[1,185],76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:187,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:188,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:189,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{117:[1,190]},{41:191,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:192,74:[1,193],76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:194,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:195,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{41:196,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},t(et,[2,183]),t(wt,[2,3]),{8:197,15:$},{15:[2,7]},t(r,[2,28]),t(ut,[2,33]),t(G,[2,51],{30:198,22:O}),t(rt,[2,76],{22:[1,199]}),{22:[1,200]},{41:201,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{86:[1,202],87:203,124:nt,127:at},t(Ut,[2,81]),t(Ut,[2,83]),t(Ut,[2,84]),t(Ut,[2,169]),t(Ut,[2,170]),{9:205,20:w,21:U,22:ct,23:V,24:ot,26:lt,38:ht,40:[1,204],43:At,53:pt,69:dt,84:yt,91:148,92:Et,93:ft,94:Dt,95:kt,96:gt,97:bt,98:_t,99:206,113:Ft,117:Tt,119:Ct,122:St,123:Bt,124:mt},t(Vt,[2,102]),t(Vt,[2,104]),t(Vt,[2,105]),t(Vt,[2,158]),t(Vt,[2,159]),t(Vt,[2,160]),t(Vt,[2,161]),t(Vt,[2,162]),t(Vt,[2,163]),t(Vt,[2,164]),t(Vt,[2,165]),t(Vt,[2,166]),t(Vt,[2,167]),t(Vt,[2,168]),t(Vt,[2,91]),t(Vt,[2,92]),t(Vt,[2,93]),t(Vt,[2,94]),t(Vt,[2,95]),t(Vt,[2,96]),t(Vt,[2,97]),t(Vt,[2,98]),t(Vt,[2,99]),t(Vt,[2,100]),t(Vt,[2,101]),{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:[1,207],44:31,45:A,47:p,49:d,51:35,52:45,53:y,54:46,56:47,69:E,92:f,93:D,94:k,95:g,96:b,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x,129:L,130:I,131:R,132:N},{22:O,30:208},{22:[1,209],53:y,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:119,122:m,123:v,124:x},{22:[1,210]},{22:[1,211],114:[1,212]},t(Gt,[2,129]),{22:[1,213],53:y,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:119,122:m,123:v,124:x},{22:[1,214],53:y,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:119,122:m,123:v,124:x},{88:[1,215]},t(st,[2,110],{22:[1,216]}),t(st,[2,112],{22:[1,217]}),{88:[1,218]},t(Lt,[2,185]),{88:[1,219],106:[1,220]},t(J,[2,58],{121:119,53:y,69:E,97:_,110:F,113:T,114:C,117:S,119:B,122:m,123:v,124:x}),{42:[1,221],76:It,90:222,124:$t,125:Ot,126:Pt},t(Mt,[2,87]),t(Mt,[2,89]),t(Mt,[2,90]),t(Mt,[2,154]),t(Mt,[2,155]),t(Mt,[2,156]),t(Mt,[2,157]),{58:[1,223],76:It,90:222,124:$t,125:Ot,126:Pt},{41:224,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{60:[1,225],76:It,90:222,124:$t,125:Ot,126:Pt},{62:[1,226],76:It,90:222,124:$t,125:Ot,126:Pt},{64:[1,227],76:It,90:222,124:$t,125:Ot,126:Pt},{66:[1,228],76:It,90:222,124:$t,125:Ot,126:Pt},{69:[1,229]},{73:[1,230],76:It,90:222,124:$t,125:Ot,126:Pt},{75:[1,231],76:It,90:222,124:$t,125:Ot,126:Pt},{41:232,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},{42:[1,233],76:It,90:222,124:$t,125:Ot,126:Pt},{76:It,78:[1,234],80:[1,235],90:222,124:$t,125:Ot,126:Pt},{76:It,78:[1,237],80:[1,236],90:222,124:$t,125:Ot,126:Pt},{9:238,20:w,21:U,23:V},t(G,[2,52],{53:xt}),t(rt,[2,78]),t(rt,[2,77]),{71:[1,239],76:It,90:222,124:$t,125:Ot,126:Pt},t(rt,[2,80]),t(Ut,[2,82]),{41:240,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},t(vt,n,{17:241}),t(Vt,[2,103]),t(P,[2,43]),{52:242,53:y,54:46,56:47,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},{22:Kt,69:Yt,92:jt,100:243,113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},{22:Kt,69:Yt,92:jt,100:254,112:[1,255],113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},{22:Kt,69:Yt,92:jt,100:256,112:[1,257],113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},{113:[1,258]},{22:Kt,69:Yt,92:jt,100:259,113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},{53:y,56:260,69:E,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x},t(st,[2,109]),{88:[1,261]},{88:[1,262],106:[1,263]},t(st,[2,117]),t(st,[2,119],{22:[1,264]}),t(st,[2,120]),t(tt,[2,59]),t(Mt,[2,88]),t(tt,[2,60]),{60:[1,265],76:It,90:222,124:$t,125:Ot,126:Pt},t(tt,[2,67]),t(tt,[2,62]),t(tt,[2,63]),t(tt,[2,64]),{117:[1,266]},t(tt,[2,66]),t(tt,[2,68]),{75:[1,267],76:It,90:222,124:$t,125:Ot,126:Pt},t(tt,[2,70]),t(tt,[2,71]),t(tt,[2,73]),t(tt,[2,72]),t(tt,[2,74]),t(wt,[2,4]),t([22,53,69,97,110,113,114,117,119,122,123,124],[2,86]),{42:[1,268],76:It,90:222,124:$t,125:Ot,126:Pt},{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:[1,269],44:31,45:A,47:p,49:d,51:35,52:45,53:y,54:46,56:47,69:E,92:f,93:D,94:k,95:g,96:b,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x,129:L,130:I,131:R,132:N},t(J,[2,56]),t(st,[2,122],{114:qt}),t(Zt,[2,131],{116:271,22:Kt,69:Yt,92:jt,113:Xt,117:zt,118:Ht,119:Wt,120:Qt}),t(Jt,[2,133]),t(Jt,[2,135]),t(Jt,[2,136]),t(Jt,[2,137]),t(Jt,[2,138]),t(Jt,[2,139]),t(Jt,[2,140]),t(Jt,[2,141]),t(Jt,[2,142]),t(st,[2,123],{114:qt}),{22:[1,272]},t(st,[2,124],{114:qt}),{22:[1,273]},t(Gt,[2,130]),t(st,[2,106],{114:qt}),t(st,[2,107],{121:119,53:y,69:E,97:_,110:F,113:T,114:C,117:S,119:B,122:m,123:v,124:x}),t(st,[2,111]),t(st,[2,113],{22:[1,274]}),t(st,[2,114]),{106:[1,275]},{60:[1,276]},{71:[1,277]},{75:[1,278]},{9:279,20:w,21:U,23:V},t(P,[2,42]),{22:Kt,69:Yt,92:jt,113:Xt,115:280,116:245,117:zt,118:Ht,119:Wt,120:Qt},t(Jt,[2,134]),{26:M,53:K,69:Y,97:j,109:281,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z,128:94},{26:M,53:K,69:Y,97:j,109:282,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z,128:94},{106:[1,283]},t(st,[2,121]),t(tt,[2,61]),{41:284,76:It,88:Rt,89:Nt,90:177,124:$t,125:Ot,126:Pt},t(tt,[2,69]),t(vt,n,{17:285}),t(Zt,[2,132],{116:271,22:Kt,69:Yt,92:jt,113:Xt,117:zt,118:Ht,119:Wt,120:Qt}),t(st,[2,127],{128:173,22:[1,286],26:M,53:K,69:Y,97:j,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z}),t(st,[2,128],{128:173,22:[1,287],26:M,53:K,69:Y,97:j,113:X,114:z,117:H,119:W,122:Q,123:q,124:Z}),t(st,[2,115]),{42:[1,288],76:It,90:222,124:$t,125:Ot,126:Pt},{18:18,19:19,20:a,21:c,22:o,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:[1,289],44:31,45:A,47:p,49:d,51:35,52:45,53:y,54:46,56:47,69:E,92:f,93:D,94:k,95:g,96:b,97:_,110:F,113:T,114:C,117:S,119:B,121:48,122:m,123:v,124:x,129:L,130:I,131:R,132:N},{22:Kt,69:Yt,92:jt,100:290,113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},{22:Kt,69:Yt,92:jt,100:291,113:Xt,115:244,116:245,117:zt,118:Ht,119:Wt,120:Qt},t(tt,[2,65]),t(P,[2,41]),t(st,[2,125],{114:qt}),t(st,[2,126],{114:qt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],122:[2,7]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],u=[],i=[null],r=[],n=this.table,a="",c=0,o=0,l=r.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;r.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,f,D,k,g,b,_,F,T,C={};;){if(f=s[s.length-1],this.defaultActions[f]?D=this.defaultActions[f]:(null==E&&(T=void 0,"number"!=typeof(T=u.pop()||h.lex()||1)&&(T instanceof Array&&(T=(u=T).pop()),T=e.symbols_[T]||T),E=T),D=n[f]&&n[f][E]),void 0===D||!D.length||!D[0]){var S="";for(g in F=[],n[f])this.terminals_[g]&&g>2&&F.push("'"+this.terminals_[g]+"'");S=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+F.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:F})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+E);switch(D[0]){case 1:s.push(E),i.push(h.yytext),r.push(h.yylloc),s.push(D[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(b=this.productions_[D[1]][1],C.$=i[i.length-b],C._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},y&&(C._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(C,[a,o,c,A.yy,D[1],i,r].concat(l))))return k;b&&(s=s.slice(0,-1*b*2),i=i.slice(0,-1*b),r=r.slice(0,-1*b)),s.push(this.productions_[D[1]][0]),i.push(C.$),r.push(C._$),_=n[s[s.length-2]][s[s.length-1]],s.push(_);break;case 3:return!0}}return!0}},ee={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===u.length?this.yylloc.first_column:0)+u[u.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,u,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(u=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in i)this[r]=i[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,u;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),r=0;r<i.length;r++)if((s=this._input.match(this.rules[i[r]]))&&(!e||s[0].length>e[0].length)){if(e=s,u=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[u]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,u){switch(s){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:return this.begin("acc_title"),45;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),47;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 13:case 16:case 19:case 22:case 32:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:this.begin("callbackname");break;case 14:this.popState(),this.begin("callbackargs");break;case 15:return 103;case 17:return 104;case 18:return"MD_STR";case 20:this.begin("md_string");break;case 21:return"STR";case 23:this.pushState("string");break;case 24:return 92;case 25:return 110;case 26:return 93;case 27:return 112;case 28:return 94;case 29:return 95;case 30:return 105;case 31:this.begin("click");break;case 33:return 96;case 34:case 35:case 36:return t.lex.firstGraph()&&this.begin("dir"),24;case 37:return 38;case 38:return 43;case 39:case 40:case 41:case 42:return 106;case 43:return this.popState(),25;case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:return this.popState(),26;case 54:return 129;case 55:return 130;case 56:return 131;case 57:return 132;case 58:return 113;case 59:case 100:return 119;case 60:return 55;case 61:return 69;case 62:case 101:return 53;case 63:return 20;case 64:return 114;case 65:case 99:return 123;case 66:case 69:case 72:return this.popState(),86;case 67:return this.pushState("edgeText"),84;case 68:case 71:case 74:return 127;case 70:return this.pushState("thickEdgeText"),84;case 73:return this.pushState("dottedEdgeText"),84;case 75:return 86;case 76:return this.popState(),62;case 77:case 113:return"TEXT";case 78:return this.pushState("ellipseText"),61;case 79:return this.popState(),64;case 80:return this.pushState("text"),63;case 81:return this.popState(),66;case 82:return this.pushState("text"),65;case 83:return 67;case 84:return this.pushState("text"),76;case 85:return this.popState(),73;case 86:return this.pushState("text"),72;case 87:return this.popState(),58;case 88:return this.pushState("text"),57;case 89:return this.popState(),78;case 90:return this.popState(),80;case 91:return 125;case 92:return this.pushState("trapText"),77;case 93:return this.pushState("trapText"),79;case 94:return 126;case 95:return 76;case 96:return 98;case 97:return"SEP";case 98:return 97;case 102:return 117;case 103:return 122;case 104:return 124;case 105:return this.popState(),71;case 106:return this.pushState("text"),71;case 107:return this.popState(),60;case 108:return this.pushState("text"),59;case 109:return this.popState(),42;case 110:return this.pushState("text"),40;case 111:return this.popState(),75;case 112:return this.pushState("text"),74;case 114:return"QUOTE";case 115:return 21;case 116:return 22;case 117:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|(?!\)+))/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},arg_directive:{rules:[3,4,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},type_directive:{rules:[2,3,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},open_directive:{rules:[1,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},callbackargs:{rules:[16,17,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},callbackname:{rules:[13,14,15,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},href:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},click:{rules:[20,23,32,33,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},dottedEdgeText:{rules:[20,23,72,74,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},thickEdgeText:{rules:[20,23,69,71,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},edgeText:{rules:[20,23,66,68,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},trapText:{rules:[20,23,75,78,80,82,86,88,89,90,91,92,93,106,108,110,112],inclusive:!1},ellipseText:{rules:[20,23,75,76,77,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},text:{rules:[20,23,75,78,79,80,81,82,85,86,87,88,92,93,105,106,107,108,109,110,111,112,113],inclusive:!1},vertex:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},dir:{rules:[20,23,43,44,45,46,47,48,49,50,51,52,53,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_descr_multiline:{rules:[10,11,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_descr:{rules:[8,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_title:{rules:[6,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},md_string:{rules:[18,19,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},string:{rules:[20,21,22,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,20,23,24,25,26,27,28,29,30,31,34,35,36,37,38,39,40,41,42,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,72,73,75,78,80,82,83,84,86,88,92,93,94,95,96,97,98,99,100,101,102,103,104,106,108,110,112,114,115,116,117],inclusive:!0}}};function se(){this.yy={}}return te.lexer=ee,se.prototype=te,te.Parser=se,new se}();r.parser=r;const n=r;let a,c,o=0,l=(0,i.c)(),h={},A=[],p={},d=[],y={},E={},f=0,D=!0,k=[];const g=t=>i.e.sanitizeText(t,l),b=function(t,e,s){i.m.parseDirective(this,t,e,s)},_=function(t){const e=Object.keys(h);for(const s of e)if(h[s].id===t)return h[s].domId;return t},F=function(t,e,s,u,r,n,a={}){let c,A=t;void 0!==A&&0!==A.trim().length&&(void 0===h[A]&&(h[A]={id:A,labelType:"text",domId:"flowchart-"+A+"-"+o,styles:[],classes:[]}),o++,void 0!==e?(l=(0,i.c)(),c=g(e.text.trim()),h[A].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),h[A].text=c):void 0===h[A].text&&(h[A].text=t),void 0!==s&&(h[A].type=s),null!=u&&u.forEach((function(t){h[A].styles.push(t)})),null!=r&&r.forEach((function(t){h[A].classes.push(t)})),void 0!==n&&(h[A].dir=n),void 0===h[A].props?h[A].props=a:void 0!==a&&Object.assign(h[A].props,a))},T=function(t,e,s){const u={start:t,end:e,type:void 0,text:"",labelType:"text"};i.l.info("abc78 Got edge...",u);const r=s.text;void 0!==r&&(u.text=g(r.text.trim()),'"'===u.text[0]&&'"'===u.text[u.text.length-1]&&(u.text=u.text.substring(1,u.text.length-1)),u.labelType=r.type),void 0!==s&&(u.type=s.type,u.stroke=s.stroke,u.length=s.length),A.push(u)},C=function(t,e,s){let u,r;for(i.l.info("addLink (abc78)",t,e,s),u=0;u<t.length;u++)for(r=0;r<e.length;r++)T(t[u],e[r],s)},S=function(t,e){t.forEach((function(t){"default"===t?A.defaultInterpolate=e:A[t].interpolate=e}))},B=function(t,e){t.forEach((function(t){"default"===t?A.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),A[t].style=e)}))},m=function(t,e){t.split(",").forEach((function(t){void 0===p[t]&&(p[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const s=e.replace("fill","bgFill").replace("color","fill");p[t].textStyles.push(s)}p[t].styles.push(e)}))}))},v=function(t){a=t,a.match(/.*</)&&(a="RL"),a.match(/.*\^/)&&(a="BT"),a.match(/.*>/)&&(a="LR"),a.match(/.*v/)&&(a="TB"),"TD"===a&&(a="TB")},x=function(t,e){t.split(",").forEach((function(t){let s=t;void 0!==h[s]&&h[s].classes.push(e),void 0!==y[s]&&y[s].classes.push(e)}))},L=function(t,e,s){t.split(",").forEach((function(t){void 0!==h[t]&&(h[t].link=i.u.formatUrl(e,l),h[t].linkTarget=s)})),x(t,"clickable")},I=function(t){if(E.hasOwnProperty(t))return E[t]},R=function(t,e,s){t.split(",").forEach((function(t){!function(t,e,s){let u=_(t);if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;let r=[];if("string"==typeof s){r=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<r.length;t++){let e=r[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),r[t]=e}}0===r.length&&r.push(t),void 0!==h[t]&&(h[t].haveCallback=!0,k.push((function(){const t=document.querySelector(`[id="${u}"]`);null!==t&&t.addEventListener("click",(function(){i.u.runFunc(e,...r)}),!1)})))}(t,e,s)})),x(t,"clickable")},N=function(t){k.forEach((function(e){e(t)}))},$=function(){return a.trim()},O=function(){return h},P=function(){return A},w=function(){return p},U=function(t){let e=(0,u.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,u.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,u.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,u.Ys)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ys)(this).classed("hover",!1)}))};k.push(U);const V=function(t="gen-1"){h={},p={},A=[],k=[U],d=[],y={},f=0,E={},D=!0,c=t,(0,i.v)()},G=t=>{c=t||"gen-2"},M=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},K=function(t,e,s){let u=t.text.trim(),r=s.text;t===s&&s.text.match(/\s/)&&(u=void 0);let n=[];const{nodeList:a,dir:o}=function(t){const e={boolean:{},number:{},string:{}},s=[];let u;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(u=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!s.includes(t)&&s.push(t))})),dir:u}}(n.concat.apply(n,e));if(n=a,"gen-1"===c)for(let i=0;i<n.length;i++)n[i]=_(n[i]);u=u||"subGraph"+f,r=r||"",r=g(r),f+=1;const l={id:u,nodes:n,title:r.trim(),classes:[],dir:o,labelType:s.type};return i.l.info("Adding",l.id,l.nodes,l.dir),l.nodes=tt(l,d).nodes,d.push(l),y[u]=l,u},Y=function(t){for(const[e,s]of d.entries())if(s.id===t)return e;return-1};let j=-1;const X=[],z=function(t,e){const s=d[e].nodes;if(j+=1,j>2e3)return;if(X[j]=e,d[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u<s.length;){const e=Y(s[u]);if(e>=0){const s=z(t,e);if(s.result)return{result:!0,count:i+s.count};i+=s.count}u+=1}return{result:!1,count:i}},H=function(t){return X[t]},W=function(){j=-1,d.length>0&&z("none",d.length-1)},Q=function(){return d},q=()=>!!D&&(D=!1,!0),Z=(t,e)=>{const s=(t=>{const e=t.trim();let s=e.slice(0,-1),u="arrow_open";switch(e.slice(-1)){case"x":u="arrow_cross","x"===e[0]&&(u="double_"+u,s=s.slice(1));break;case">":u="arrow_point","<"===e[0]&&(u="double_"+u,s=s.slice(1));break;case"o":u="arrow_circle","o"===e[0]&&(u="double_"+u,s=s.slice(1))}let i="normal",r=s.length-1;"="===s[0]&&(i="thick"),"~"===s[0]&&(i="invisible");let n=((t,e)=>{const s=e.length;let u=0;for(let i=0;i<s;++i)e[i]===t&&++u;return u})(".",s);return n&&(i="dotted",r=n),{type:u,stroke:i,length:r}})(t);let u;if(e){if(u=(t=>{let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let u="normal";return e.includes("=")&&(u="thick"),e.includes(".")&&(u="dotted"),{type:s,stroke:u}})(e),u.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===u.type)u.type=s.type;else{if(u.type!==s.type)return{type:"INVALID",stroke:"INVALID"};u.type="double_"+u.type}return"double_arrow"===u.type&&(u.type="double_arrow_point"),u.length=s.length,u}return s},J=(t,e)=>{let s=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(s=!0)})),s},tt=(t,e)=>{const s=[];return t.nodes.forEach(((u,i)=>{J(e,u)||s.push(t.nodes[i])})),{nodes:s}},et={firstGraph:q},st={parseDirective:b,defaultConfig:()=>i.K.flowchart,setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,addVertex:F,lookUpDomId:_,addLink:C,updateLinkInterpolate:S,updateLink:B,addClass:m,setDirection:v,setClass:x,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(E["gen-1"===c?_(t):t]=g(e))}))},getTooltip:I,setClickEvent:R,setLink:L,bindFunctions:N,getDirection:$,getVertices:O,getEdges:P,getClasses:w,clear:V,setGen:G,defaultStyle:M,addSubGraph:K,getDepthFirstPos:H,indexNodes:W,getSubGraphs:Q,destructLink:Z,lex:et,exists:J,makeUniq:tt,setDiagramTitle:i.r,getDiagramTitle:i.t},ut=Object.freeze(Object.defineProperty({__proto__:null,addClass:m,addLink:C,addSingleLink:T,addSubGraph:K,addVertex:F,bindFunctions:N,clear:V,default:st,defaultStyle:M,destructLink:Z,firstGraph:q,getClasses:w,getDepthFirstPos:H,getDirection:$,getEdges:P,getSubGraphs:Q,getTooltip:I,getVertices:O,indexNodes:W,lex:et,lookUpDomId:_,parseDirective:b,setClass:x,setClickEvent:R,setDirection:v,setGen:G,setLink:L,updateLink:B,updateLinkInterpolate:S},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/assets/js/6466e69d.78f58c7e.js b/assets/js/6466e69d.78f58c7e.js new file mode 100644 index 0000000000..55a14033b2 --- /dev/null +++ b/assets/js/6466e69d.78f58c7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99234],{42794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var s=t(24246),o=t(71670);const i={mdx:{format:"md"},date:"2021-04-30T20:00",authors:["gempain","RDIL","slorber","tommy351"]},a="2.0.0-alpha.75",c={permalink:"/changelog/2.0.0-alpha.75",source:"@site/changelog/source/2.0.0-alpha.75.md",title:"2.0.0-alpha.75",description:"Breaking Change",date:"2021-04-30T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Geoffroy Empain",alias:"gempain",url:"https://github.com/gempain",imageURL:"https://github.com/gempain.png",key:"gempain"},{name:"Reece Dunham",alias:"RDIL",url:"https://github.com/RDIL",imageURL:"https://github.com/RDIL.png",key:"RDIL"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tommy Chen",alias:"tommy351",url:"https://github.com/tommy351",imageURL:"https://github.com/tommy351.png",key:"tommy351"}],frontMatter:{mdx:{format:"md"},date:"2021-04-30T20:00",authors:["gempain","RDIL","slorber","tommy351"]},unlisted:!1,prevItem:{title:"2.0.0-beta.0",permalink:"/changelog/2.0.0-beta.0"},nextItem:{title:"2.0.0-alpha.74",permalink:"/changelog/2.0.0-alpha.74"},listPageLink:"/changelog/page/3"},r={authorsImageUrls:[void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"Committers: 4",id:"committers-4",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"docusaurus-cssnano-preset"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-init"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-mdx-loader"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-plugin-pwa"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-theme-classic"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-theme-common"}),", ",(0,s.jsx)(n.code,{children:"docusaurus-types"}),", ",(0,s.jsx)(n.code,{children:"docusaurus"}),", ",(0,s.jsx)(n.code,{children:"lqip-loader"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/4089",children:"#4089"})," feat(v2): Webpack 5, PostCSS 8 (",(0,s.jsx)(n.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/4704",children:"#4704"})," docs(v2): showcase meli (",(0,s.jsx)(n.a,{href:"https://github.com/gempain",children:"@gempain"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/4699",children:"#4699"})," docs(v2): Add Kosko to showcase (",(0,s.jsx)(n.a,{href:"https://github.com/tommy351",children:"@tommy351"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"committers-4",children:"Committers: 4"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Geoffroy Empain (",(0,s.jsx)(n.a,{href:"https://github.com/gempain",children:"@gempain"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Reece Dunham (",(0,s.jsx)(n.a,{href:"https://github.com/RDIL",children:"@RDIL"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["S\xe9bastien Lorber (",(0,s.jsx)(n.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Tommy Chen (",(0,s.jsx)(n.a,{href:"https://github.com/tommy351",children:"@tommy351"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var s=t(27378);const o={},i=s.createContext(o);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/64aa9092.faef2607.js b/assets/js/64aa9092.faef2607.js new file mode 100644 index 0000000000..a9531b858a --- /dev/null +++ b/assets/js/64aa9092.faef2607.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74098],{76435:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>h,default:()=>u,frontMatter:()=>n,metadata:()=>l,toc:()=>m});var i=a(24246),o=a(71670);const n={mdx:{format:"md"},date:"2023-01-26T20:00",authors:["0916dhkim","3v0k4","denis-alkhelali","Djunnni","friederbluemle","johnnyreilly","Josh-Cena","JoshuaKGoldberg","lachieh","lanegoolsby","MatijaSi","mhnaeem","mturoci","SJFCS","slorber","stnor","Thomascogez"]},h="2.3.0",l={permalink:"/changelog/2.3.0",source:"@site/changelog/source/2.3.0.md",title:"2.3.0",description:"New Feature",date:"2023-01-26T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Danny Kim",alias:"0916dhkim",url:"https://github.com/0916dhkim",imageURL:"https://github.com/0916dhkim.png",key:"0916dhkim"},{name:"Riccardo",alias:"3v0k4",url:"https://github.com/3v0k4",imageURL:"https://github.com/3v0k4.png",key:"3v0k4"},{name:"Denis Al-Khelali",alias:"denis-alkhelali",url:"https://github.com/denis-alkhelali",imageURL:"https://github.com/denis-alkhelali.png",key:"denis-alkhelali"},{name:"Dongjoon Lee",alias:"Djunnni",url:"https://github.com/Djunnni",imageURL:"https://github.com/Djunnni.png",key:"Djunnni"},{name:"Frieder Bluemle",alias:"friederbluemle",url:"https://github.com/friederbluemle",imageURL:"https://github.com/friederbluemle.png",key:"friederbluemle"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Josh Goldberg",alias:"JoshuaKGoldberg",url:"https://github.com/JoshuaKGoldberg",imageURL:"https://github.com/JoshuaKGoldberg.png",key:"JoshuaKGoldberg"},{name:"Lachlan Heywood",alias:"lachieh",url:"https://github.com/lachieh",imageURL:"https://github.com/lachieh.png",key:"lachieh"},{name:"Lane Goolsby",alias:"lanegoolsby",url:"https://github.com/lanegoolsby",imageURL:"https://github.com/lanegoolsby.png",key:"lanegoolsby"},{name:"Matija Sirk",alias:"MatijaSi",url:"https://github.com/MatijaSi",imageURL:"https://github.com/MatijaSi.png",key:"MatijaSi"},{name:"Muhammad Hammad",alias:"mhnaeem",url:"https://github.com/mhnaeem",imageURL:"https://github.com/mhnaeem.png",key:"mhnaeem"},{name:"mturoci",alias:"mturoci",url:"https://github.com/mturoci",imageURL:"https://github.com/mturoci.png",key:"mturoci"},{name:"\u5b8b\u9526\u4e30",alias:"SJFCS",url:"https://github.com/SJFCS",imageURL:"https://github.com/SJFCS.png",key:"SJFCS"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Stefan Norberg",alias:"stnor",url:"https://github.com/stnor",imageURL:"https://github.com/stnor.png",key:"stnor"},{name:"Thomas.CA",alias:"Thomascogez",url:"https://github.com/Thomascogez",imageURL:"https://github.com/Thomascogez.png",key:"Thomascogez"}],frontMatter:{mdx:{format:"md"},date:"2023-01-26T20:00",authors:["0916dhkim","3v0k4","denis-alkhelali","Djunnni","friederbluemle","johnnyreilly","Josh-Cena","JoshuaKGoldberg","lachieh","lanegoolsby","MatijaSi","mhnaeem","mturoci","SJFCS","slorber","stnor","Thomascogez"]},unlisted:!1,prevItem:{title:"2.3.1",permalink:"/changelog/2.3.1"},nextItem:{title:"2.2.0",permalink:"/changelog/2.2.0"},listPageLink:"/changelog/"},s={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function r(e){return(0,i.jsx)(i.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(r,{...e})}):r()}},71670:(e,t,a)=>{a.d(t,{Z:()=>l,a:()=>h});var i=a(27378);const o={},n=i.createContext(o);function h(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:h(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/64dfb3e9.259b4f48.js b/assets/js/64dfb3e9.259b4f48.js new file mode 100644 index 0000000000..0fde8e83fe --- /dev/null +++ b/assets/js/64dfb3e9.259b4f48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[44027],{97408:(e,n,t)=>{t.d(n,{Z:()=>r});const r="/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React, {useState} from 'react';\n\nexport default function MyComponent() {\n const [bool, setBool] = useState(false);\n return (\n <div>\n <p>MyComponent rendered !</p>\n <p>bool={bool ? 'true' : 'false'}</p>\n <p>\n <button onClick={() => setBool((b) => !b)}>toggle bool</button>\n </p>\n </div>\n );\n}\n"},41124:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(4646));const i={tableOfContentsInline:"tableOfContentsInline_2sru"};function s({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,r.jsx)("div",{className:i.tableOfContentsInline,children:(0,r.jsx)(o.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:t,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,t)=>{t.d(n,{Z:()=>O});var r=t(24246),o=t(27378),i=t(73919);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){s(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function u(e){const n=e.map((e=>a(c({},e),{parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const r=t.slice(2,e.level);e.parentIndex=Math.max(...r),t[e.level]=n}));const r=[];return n.forEach((e=>{const{parentIndex:t}=e,o=l(e,["parentIndex"]);t>=0?n[t].children.push(o):r.push(o)})),r}function d({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return e.flatMap((e=>{const r=d({toc:e.children,minHeadingLevel:n,maxHeadingLevel:t});return function(e){return e.level>=n&&e.level<=t}(e)?[a(c({},e),{children:r})]:r}))}function p(e){const n=e.getBoundingClientRect();return n.top===n.bottom?p(e.parentNode):n}function h(e,{anchorTopOffset:n}){const t=e.find((e=>p(e).top>=n));if(t){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(p(t))?t:null!==(r=e[e.indexOf(t)-1])&&void 0!==r?r:null;var r}var o;return null!==(o=e[e.length-1])&&void 0!==o?o:null}function m(){const e=(0,o.useRef)(0),{navbar:{hideOnScroll:n}}=(0,i.L)();return(0,o.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function f(e){const n=(0,o.useRef)(void 0),t=m();(0,o.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:o,minHeadingLevel:i,maxHeadingLevel:s}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:n}){const t=[];for(let r=e;r<=n;r+=1)t.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(t.join()))}({minHeadingLevel:i,maxHeadingLevel:s}),a=h(c,{anchorTopOffset:t.current}),l=e.find((e=>a&&a.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(o),e.classList.add(o),n.current=e):e.classList.remove(o)}(e,e===l)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,t])}var b=t(41428);function g({toc:e,className:n,linkClassName:t,isChild:o}){return e.length?(0,r.jsx)("ul",{className:o?void 0:n,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(b.Z,{to:`#${e.id}`,className:null!=t?t:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:t})]},e.id)))}):null}const j=o.memo(g);function y(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function O(e){var{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:s="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:a,maxHeadingLevel:l}=e,p=x(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const h=(0,i.L)(),m=null!=a?a:h.tableOfContents.minHeadingLevel,b=null!=l?l:h.tableOfContents.maxHeadingLevel,g=function({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,o.useMemo)((()=>d({toc:u(e),minHeadingLevel:n,maxHeadingLevel:t})),[e,n,t])}({toc:n,minHeadingLevel:m,maxHeadingLevel:b});return f((0,o.useMemo)((()=>{if(s&&c)return{linkClassName:s,linkActiveClassName:c,minHeadingLevel:m,maxHeadingLevel:b}}),[s,c,m,b])),(0,r.jsx)(j,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){y(e,n,t[n])}))}return e}({toc:g,className:t,linkClassName:s},p))}},61132:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(24246),o=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>S});var r=t(24246),o=t(27378),i=t(40624),s=t(75527),c=t(3620),a=t(44479),l=t(62821),u=t(52196),d=t(53589);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function f(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,u.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function g({queryString:e=!1,groupId:n}){const t=(0,c.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,l._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(h(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){p(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,s]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=f(e),[s,c]=(0,o.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[l,u]=g({queryString:t,groupId:r}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,d.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),m=(()=>{const e=null!=l?l:p;return b({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{m&&c(m)}),[m]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),u(e),h(e)}),[u,h,i]),tabValues:i}}var y=t(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function w(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}function v(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function k({className:e,block:n,selectedValue:t,selectValue:o,tabValues:c}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const n=e.currentTarget,r=a.indexOf(n),i=c[r].value;i!==t&&(l(n),o(i))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var t;n=null!==(t=a[r])&&void 0!==t?t:a[0];break}case"ArrowLeft":{const t=a.indexOf(e.currentTarget)-1;var r;n=null!==(r=a[t])&&void 0!==r?r:a[a.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:c.map((({value:e,label:n,attributes:o})=>(0,r.jsx)("li",v(w({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>a.push(e),onKeyDown:d,onClick:u},o),{className:(0,i.Z)("tabs__item",x.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function D(e){const n=j(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",x.tabList),children:[(0,r.jsx)(k,w({},e,n)),(0,r.jsx)(P,w({},e,n))]})}function S(e){const n=(0,y.Z)();return(0,r.jsx)(D,v(w({},e),{children:m(e.children)}),String(n))}},94544:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),o=(t(27378),t(29088));function i({children:e,fallback:n}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=n?n:null}},6698:(e,n,t)=>{t.d(n,{Z:()=>l});var r=t(24246),o=(t(27378),t(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){s(e,n,t[n])}))}return e}function a(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function l({children:e,minHeight:n,url:t="http://localhost:3000",style:s,bodyStyle:l}){return(0,r.jsxs)("div",{className:i.browserWindow,style:a(c({},s),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(i.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:l,children:e})]})}},38112:(e,n,t)=>{t.d(n,{Z:()=>Te});var r={};t.r(r),t.d(r,{ButtonExample:()=>B});var o=t(24246),i=t(27378),s=t(40624),c=t(29088),a=t(32711),l=t(36712),u=t(4423),d=t(94544),p=t(30691),h=t(78844),m=t(73919);function f(){const{prism:e}=(0,m.L)(),{colorMode:n}=(0,h.I)(),t=e.theme,r=e.darkTheme||t;return"dark"===n?r:t}var b=t(88941);const g={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}function x(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(g.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(b.Z,{fallback:e=>(0,o.jsx)(p.Ac,y({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function P(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:g.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function D(){const e=(0,c.Z)();return(0,o.jsx)(a.uz,{className:g.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(D,{})]})}const C=e=>`${e};`;function N(e){var n,{children:t,transformCode:r}=e,i=O(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:c}}=s,l=f();var d;const p=null!==(d=null===(n=i.metastring)||void 0===n?void 0:n.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:g.playgroundContainer,children:(0,o.jsx)(a.nu,x(y({code:null==t?void 0:t.replace(/\n$/,""),noInline:p,transformCode:null!=r?r:C,theme:l},i),{children:"top"===c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(P,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(P,{})]})}))})}function M(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){M(e,n,t[n])}))}return e}function I(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function B(e){return(0,o.jsx)("button",I(E({type:"button"},e),{style:E({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const H=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){L(e,n,t[n])}))}return e}({React:i},i,r);var T,X,_=t(89583),Z=t(6324),R=t.n(Z);function A(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const W=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),V=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},z=($=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){A(e,n,t[n])}))}return e}({},F),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties($,Object.getOwnPropertyDescriptors(q)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(q)).forEach((function(e){Object.defineProperty($,e,Object.getOwnPropertyDescriptor(q,e))})),$);var $,q;const U=Object.keys(F);function J(e,n){const t=e.map((e=>{const{start:t,end:r}=z[e];return`(?:${t}\\s*(${n.flatMap((e=>{var n,t;return[e.line,null===(n=e.block)||void 0===n?void 0:n.start,null===(t=e.block)||void 0===t?void 0:t.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${t})\\s*$`)}function Q(e,n){let t=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:i}=n;if(i&&V.test(i)){const e=i.match(V).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const n=o[0].className,r=R()(e).filter((e=>e>0)).map((e=>[e-1,[n]]));return{lineClassNames:Object.fromEntries(r),code:t}}if(void 0===r)return{lineClassNames:{},code:t};const s=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return J(["js","jsBlock"],n);case"jsx":case"tsx":return J(["js","jsBlock","jsx"],n);case"html":return J(["js","jsBlock","html"],n);case"python":case"py":case"bash":return J(["bash"],n);case"markdown":case"md":return J(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return J(["tex"],n);case"lua":case"haskell":case"sql":return J(["lua"],n);case"wasm":return J(["wasm"],n);case"vb":case"vba":case"visual-basic":return J(["vb","rem"],n);case"vbnet":return J(["vbnet","rem"],n);case"batch":return J(["rem"],n);case"basic":return J(["rem","f90"],n);case"fsharp":return J(["js","ml"],n);case"ocaml":case"sml":return J(["ml"],n);case"fortran":return J(["f90"],n);case"cobol":return J(["cobol"],n);default:return J(U,n)}}(r,o),c=t.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:n})=>[n,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:n})=>[n.end,e])));for(let h=0;h<c.length;){const e=c[h].match(s);if(!e){h+=1;continue}const n=e.slice(1).find((e=>void 0!==e));l[n]?a[l[n]].range+=`${h},`:u[n]?a[u[n]].start=h:d[n]&&(a[d[n]].range+=`${a[d[n]].start}-${h-1},`),c.splice(h,1)}t=c.join("\n");const p={};return Object.entries(a).forEach((([e,{range:n}])=>{R()(n).forEach((n=>{var t;null!==(t=(T=p)[X=n])&&void 0!==t||(T[X]=[]),p[n].push(e)}))})),{lineClassNames:p,code:t}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function G(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function K(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ee(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function ne(e){var{as:n}=e,t=ee(e,["as"]);const r=function(e){const n={color:"--prism-color",backgroundColor:"--prism-background-color"},t={};return Object.entries(e.plain).forEach((([e,r])=>{const o=n[e];o&&"string"==typeof r&&(t[o]=r)})),t}(f());return(0,o.jsx)(n,K(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){G(e,n,t[n])}))}return e}({},t),{style:r,className:(0,s.Z)(t.className,Y.codeBlockContainer,_.k.common.codeBlock)}))}const te={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:n}){return(0,o.jsx)(ne,{as:"pre",tabIndex:0,className:(0,s.Z)(te.codeBlockStandalone,"thin-scrollbar",n),children:(0,o.jsx)("code",{className:te.codeBlockLines,children:e})})}var oe=t(51114);const ie={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,n){const[t,r]=(0,i.useState)(),o=(0,i.useCallback)((()=>{var n;r(null===(n=e.current)||void 0===n?void 0:n.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,i.useEffect)((()=>{o()}),[o]),function(e,n,t=ie){const r=(0,oe.zX)(n),o=(0,oe.Ql)(t);(0,i.useEffect)((()=>{const n=new MutationObserver(r);return e&&n.observe(e,o),()=>n.disconnect()}),[e,r,o])}(t,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(n(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ce=t(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ue(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){le(e,n,t[n])}))}return e}function de(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function pe({line:e,classNames:n,showLineNumbers:t,getLineProps:r,getTokenProps:i}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const c=r({line:e,className:(0,s.Z)(n,t&&ae.codeLine)}),a=e.map(((e,n)=>(0,o.jsx)("span",ue({},i({token:e,key:n})),n)));return(0,o.jsxs)("span",de(ue({},c),{children:[t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var he=t(34370);function me(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function fe(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function be(e){return(0,o.jsx)("svg",fe(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){me(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ge(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function je(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ye(e){return(0,o.jsx)("svg",je(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){ge(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const xe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Oe({code:e,className:n}){const[t,r]=(0,i.useState)(!1),c=(0,i.useRef)(void 0),a=(0,i.useCallback)((()=>{(0,he.Z)(e),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,i.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":t?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",n,xe.copyButton,t&&xe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:xe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(be,{className:xe.copyButtonIcon}),(0,o.jsx)(ye,{className:xe.copyButtonSuccessIcon})]})})}function we(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ve(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function ke(e){return(0,o.jsx)("svg",ve(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){we(e,n,t[n])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Pe={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function De({className:e,onClick:n,isEnabled:t}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:n,className:(0,s.Z)("clean-btn",e,t&&Pe.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Pe.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:n="",metastring:t,title:r,showLineNumbers:c,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,m.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=a?a:function(e){const n=e.split(" ").find((e=>e.startsWith("language-")));return null==n?void 0:n.replace(/language-/,"")}(n))&&void 0!==d?d:l),h=f(),b=function(){const[e,n]=(0,i.useState)(!1),[t,r]=(0,i.useState)(!1),o=(0,i.useRef)(null),s=(0,i.useCallback)((()=>{const t=o.current.querySelector("code");e?t.removeAttribute("style"):(t.style.whiteSpace="pre-wrap",t.style.overflowWrap="anywhere"),n((e=>!e))}),[o,e]),c=(0,i.useCallback)((()=>{const{scrollWidth:e,clientWidth:n}=o.current,t=e>n||o.current.querySelector("code").hasAttribute("style");r(t)}),[o]);return se(o,c),(0,i.useEffect)((()=>{c()}),[e,c]),(0,i.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:t,toggle:s}}(),g=function(e){var n,t;return null!==(t=null===(n=null==e?void 0:e.match(W))||void 0===n?void 0:n.groups.title)&&void 0!==t?t:""}(t)||r,{lineClassNames:j,code:y}=Q(e,{metastring:t,language:p,magicComments:u}),x=null!=c?c:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(t);return(0,o.jsxs)(ne,{as:"div",className:(0,s.Z)(n,p&&!n.includes(`language-${p}`)&&`language-${p}`),children:[g&&(0,o.jsx)("div",{className:te.codeBlockTitle,children:g}),(0,o.jsxs)("div",{className:te.codeBlockContent,children:[(0,o.jsx)(ce.y$,{theme:h,code:y,language:null!=p?p:"text",children:({className:e,style:n,tokens:t,getLineProps:r,getTokenProps:i})=>(0,o.jsx)("pre",{tabIndex:0,ref:b.codeBlockRef,className:(0,s.Z)(e,te.codeBlock,"thin-scrollbar"),style:n,children:(0,o.jsx)("code",{className:(0,s.Z)(te.codeBlockLines,x&&te.codeBlockLinesWithNumbering),children:t.map(((e,n)=>(0,o.jsx)(pe,{line:e,getLineProps:r,getTokenProps:i,classNames:j[n],showLineNumbers:x},n)))})})}),(0,o.jsxs)("div",{className:te.buttonGroup,children:[(b.isEnabled||b.isCodeScrollable)&&(0,o.jsx)(De,{className:te.codeButton,onClick:()=>b.toggle(),isEnabled:b.isEnabled}),(0,o.jsx)(Oe,{className:te.codeButton,code:y})]})]})]})}function Ce(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ne(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function Me(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Ee(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Ie(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ee(e,n,t[n])}))}return e}const Be=(Le=function(e){var{children:n}=e,t=Me(e,["children"]);const r=(0,c.Z)(),s=function(e){return i.Children.toArray(e).some((e=>(0,i.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(n),a="string"==typeof s?Se:re;return(0,o.jsx)(a,Ne(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){Ce(e,n,t[n])}))}return e}({},t),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:H},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function He(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Te(e){return(0,o.jsx)(Be,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){He(e,n,t[n])}))}return e}({},e))}},36760:(e,n,t)=>{t.r(n),t.d(n,{Highlight:()=>b,assets:()=>f,contentTitle:()=>h,default:()=>y,frontMatter:()=>p,metadata:()=>m,toc:()=>g});var r=t(24246),o=t(71670),i=t(6698),s=t(97555),c=t(61132);var a=t(38112),l=t(97408);function u(e){const n={code:"code",p:"p",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("span",{children:["Hello ",e.name]}),"\n",(0,r.jsxs)(n.p,{children:["This is text some content from ",(0,r.jsx)(n.code,{children:"_markdown-partial-example.md"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}t(41124);const p={id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},h="MDX and React",m={id:"guides/markdown-features/react",title:"MDX and React",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",source:"@site/docs/guides/markdown-features/markdown-features-react.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features/react",permalink:"/docs/markdown-features/react",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-react.mdx",tags:[],version:"current",lastUpdatedBy:"Tatsunori Uchino",lastUpdatedAt:1700764684e3,frontMatter:{id:"react",description:"Using the power of React in Docusaurus Markdown documents, thanks to MDX",slug:"/markdown-features/react"},sidebar:"docs",previous:{title:"Markdown Features",permalink:"/docs/markdown-features"},next:{title:"Tabs",permalink:"/docs/markdown-features/tabs"}},f={},b=({children:e,color:n})=>{const t={span:"span",...(0,o.a)()};return(0,r.jsx)(t.span,{style:{backgroundColor:n,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},g=[{value:"Exporting components",id:"exporting-components",level:3},{value:"Importing components",id:"importing-components",level:3},{value:"MDX component scope",id:"mdx-component-scope",level:3},{value:"Markdown and JSX interoperability",id:"markdown-and-jsx-interoperability",level:3},{value:"Importing code snippets",id:"importing-code-snippets",level:2},{value:"Importing Markdown",id:"importing-markdown",level:2},{value:"Available exports",id:"available-exports",level:2}];function j(e){const n={a:"a",admonition:"admonition",b:"b",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"mdx-and-react",children:"MDX and React"}),"\n","\n",(0,r.jsxs)(n.p,{children:["Docusaurus has built-in support for ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX"}),", which allows you to write JSX within your Markdown files and render them as React components."]}),"\n",(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/",children:"MDX docs"})," to see what fancy stuff you can do with MDX."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Debugging MDX",type:"tip",children:[(0,r.jsx)(n.p,{children:"The MDX format is quite strict, and you may get compilation errors."}),(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," to debug them and make sure your syntax is valid."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Prettier, the most popular formatter, ",(0,r.jsx)(n.a,{href:"https://github.com/prettier/prettier/issues/12209",children:"supports only the legacy MDX v1"}),". If you get an unintentional formatting result, you may want to add ",(0,r.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the problematic area, or add ",(0,r.jsx)(n.code,{children:"*.mdx"})," to your ",(0,r.jsx)(n.code,{children:".prettierignore"}),", until Prettier has proper support for MDX v3. ",(0,r.jsxs)(n.a,{href:"https://github.com/orgs/mdx-js/discussions/2067",children:["One of the main authors of MDX recommends ",(0,r.jsx)(n.code,{children:"remark-cli"})," with ",(0,r.jsx)(n.code,{children:"remark-mdx"})]}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"exporting-components",children:"Exporting components"}),"\n",(0,r.jsxs)(n.p,{children:["To define any custom component within an MDX file, you have to export it: only paragraphs that start with ",(0,r.jsx)(n.code,{children:"export"})," will be parsed as components instead of prose."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"export const Highlight = ({children, color}) => (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n);\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight> and <Highlight color=\"#1877F2\">Facebook blue</Highlight> are my favorite colors.\n\nI can write **Markdown** alongside my _JSX_!\n"})}),"\n",(0,r.jsx)(n.p,{children:"Notice how it renders both the markup from your React component and the Markdown syntax:"}),"\n","\n",(0,r.jsxs)(i.Z,{minHeight:240,children:[(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"}),"\n"," ","and ",(0,r.jsx)(b,{color:"#1877F2",children:"Facebook blue"})," are my favorite colors."]}),(0,r.jsxs)(n.p,{children:["I can write ",(0,r.jsx)(n.strong,{children:"Markdown"})," alongside my ",(0,r.jsx)(n.em,{children:"JSX"}),"!"]})]}),"\n",(0,r.jsxs)(n.admonition,{title:"MDX is JSX",type:"warning",children:[(0,r.jsx)(n.p,{children:"Since all doc files are parsed using MDX, anything that looks like HTML is actually JSX. Therefore, if you need to inline-style a component, follow JSX flavor and provide style objects."}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"/* Instead of this: */\n<span style=\"background-color: red\">Foo</span>\n/* Use this: */\n<span style={{backgroundColor: 'red'}}>Foo</span>\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"importing-components",children:"Importing components"}),"\n",(0,r.jsx)(n.p,{children:"You can also import your own components defined in other files or third-party components installed via npm."}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"\x3c!-- Docusaurus theme component --\x3e\nimport TOCInline from '@theme/TOCInline';\n\x3c!-- External component --\x3e\nimport Button from '@mui/material/Button';\n\x3c!-- Custom component --\x3e\nimport BrowserWindow from '@site/src/components/BrowserWindow';\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"@site"})," alias points to your website's directory, usually where the ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"})," file is. Using an alias instead of relative paths (",(0,r.jsx)(n.code,{children:"'../../src/components/BrowserWindow'"}),") saves you from updating import paths when moving files around, or when ",(0,r.jsx)(n.a,{href:"/docs/versioning",children:"versioning docs"})," and ",(0,r.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"translating"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["While declaring components within Markdown is very convenient for simple cases, it becomes hard to maintain because of limited editor support, risks of parsing errors, and low reusability. Use a separate ",(0,r.jsx)(n.code,{children:".js"})," file when your component involves complex JS logic:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/components/Highlight.js"',children:"import React from 'react';\n\nexport default function Highlight({children, color}) {\n return (\n <span\n style={{\n backgroundColor: color,\n borderRadius: '2px',\n color: '#fff',\n padding: '0.2rem',\n }}>\n {children}\n </span>\n );\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="markdown-file.mdx"',children:"import Highlight from '@site/src/components/Highlight';\n\n<Highlight color=\"#25c2a0\">Docusaurus green</Highlight>\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["If you use the same component across a lot of files, you don't need to import it everywhere\u2014consider adding it to the global scope. ",(0,r.jsx)(n.a,{href:"#mdx-component-scope",children:"See below"})]})}),"\n",(0,r.jsx)(n.h3,{id:"mdx-component-scope",children:"MDX component scope"}),"\n",(0,r.jsxs)(n.p,{children:["Apart from ",(0,r.jsx)(n.a,{href:"#importing-components",children:"importing a component"})," and ",(0,r.jsx)(n.a,{href:"#exporting-components",children:"exporting a component"}),", a third way to use a component in MDX is to ",(0,r.jsx)(n.strong,{children:"register it to the global scope"}),", which will make it automatically available in every MDX file, without any import statements."]}),"\n",(0,r.jsx)(n.p,{children:"For example, given this MDX file:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:"- a\n- list!\n\nAnd some <Highlight>custom markup</Highlight>...\n"})}),"\n",(0,r.jsxs)(n.p,{children:["It will be compiled to a React component containing ",(0,r.jsx)(n.code,{children:"ul"}),", ",(0,r.jsx)(n.code,{children:"li"}),", ",(0,r.jsx)(n.code,{children:"p"}),", and ",(0,r.jsx)(n.code,{children:"Highlight"})," elements. ",(0,r.jsx)(n.code,{children:"Highlight"})," is not a native html element: you need to provide your own React component implementation for it."]}),"\n",(0,r.jsxs)(n.p,{children:["In Docusaurus, the MDX component scope is provided by the ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})," file. It's not a React component, ",(0,r.jsx)(n.em,{children:"per se"}),", unlike most other exports under the ",(0,r.jsx)(n.code,{children:"@theme/"})," alias: it is a record from tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," to their React component implementations."]}),"\n",(0,r.jsxs)(n.p,{children:["If you ",(0,r.jsx)(n.a,{href:"/docs/swizzling",children:"swizzle"})," this component, you will find all tags that have been implemented, and you can further customize our implementation by swizzling the respective sub-component, like ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents/Code"})," (which is used to render ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks",children:"Markdown code blocks"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to register extra tag names (like the ",(0,r.jsx)(n.code,{children:"<Highlight>"})," tag above), you should consider ",(0,r.jsxs)(n.a,{href:"/docs/swizzling#wrapping",children:["wrapping ",(0,r.jsx)(n.code,{children:"@theme/MDXComponents"})]}),", so you don't have to maintain all the existing mappings. Since the swizzle CLI doesn't allow wrapping non-component files yet, you should manually create the wrapper:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/MDXComponents.js"',children:"import React from 'react';\n// Import the original mapper\nimport MDXComponents from '@theme-original/MDXComponents';\n// highlight-next-line\nimport Highlight from '@site/src/components/Highlight';\n\nexport default {\n // Re-use the default mapping\n ...MDXComponents,\n // Map the \"<Highlight>\" tag to our Highlight component\n // `Highlight` will receive all props that were passed to `<Highlight>` in MDX\n // highlight-next-line\n Highlight,\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["And now, you can freely use ",(0,r.jsx)(n.code,{children:"<Highlight>"})," in every page, without writing the import statement:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",children:'I can conveniently use <Highlight color="#25c2a0">Docusaurus green</Highlight> everywhere!\n'})}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(n.p,{children:["I can conveniently use ",(0,r.jsx)(b,{color:"#25c2a0",children:"Docusaurus green"})," everywhere!"]})}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["We use ",(0,r.jsx)(n.strong,{children:"upper-case"})," tag names like ",(0,r.jsx)(n.code,{children:"Highlight"})," on purpose."]}),(0,r.jsx)(n.p,{children:"From MDX v3+ onward (Docusaurus v3+), lower-case tag names are always rendered as native html elements, and will not use any component mapping you provide."})]}),"\n",(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsxs)(n.p,{children:["This feature is powered by ",(0,r.jsxs)(n.a,{href:"https://mdxjs.com/docs/using-mdx/#mdx-provider",children:["an ",(0,r.jsx)(n.code,{children:"MDXProvider"})]}),". If you are importing Markdown in a React page, you have to supply this provider yourself through the ",(0,r.jsx)(n.code,{children:"MDXContent"})," theme component."]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport FeatureDisplay from './_featureDisplay.mdx';\n// highlight-next-line\nimport MDXContent from '@theme/MDXContent';\n\nexport default function LandingPage() {\n return (\n <div>\n {/* highlight-start */}\n <MDXContent>\n <FeatureDisplay />\n </MDXContent>\n {/* highlight-end */}\n </div>\n );\n}\n"})}),(0,r.jsxs)(n.p,{children:["If you don't wrap your imported MDX with ",(0,r.jsx)(n.code,{children:"MDXContent"}),", the global scope will not be available."]})]}),"\n",(0,r.jsx)(n.h3,{id:"markdown-and-jsx-interoperability",children:"Markdown and JSX interoperability"}),"\n",(0,r.jsxs)(n.p,{children:["Docusaurus v3 is using ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#mdx-syntax",children:"MDX syntax"})," is mostly compatible with ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", but is much stricter because your ",(0,r.jsx)(n.code,{children:".mdx"})," files can use JSX and are compiled into real React components (check the ",(0,r.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"playground"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Some valid CommonMark features won't work with MDX (",(0,r.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#markdown",children:"more info"}),"), notably:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Indented code blocks: use triple backticks instead"}),"\n",(0,r.jsxs)(n.li,{children:["Autolinks (",(0,r.jsx)(n.code,{children:"<http://localhost:3000>"}),"): use regular link syntax instead (",(0,r.jsx)(n.code,{children:"[http://localhost:3000](http://localhost:3000)"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["HTML syntax (",(0,r.jsx)(n.code,{children:'<p style="color: red;">'}),"): use JSX instead (",(0,r.jsx)(n.code,{children:"<p style={{color: 'red'}}>"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Unescaped ",(0,r.jsx)(n.code,{children:"{"})," and ",(0,r.jsx)(n.code,{children:"<"}),": escape them with ",(0,r.jsx)(n.code,{children:"\\"})," instead (",(0,r.jsx)(n.code,{children:"\\{"})," and ",(0,r.jsx)(n.code,{children:"\\<"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"Experimental CommonMark support",type:"danger",children:[(0,r.jsxs)(n.p,{children:["Docusaurus v3 makes it possible to opt-in for a less strict, standard ",(0,r.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"})," support with the following options:"]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:"format: md"})," front matter"]}),"\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:".md"})," file extension combined with the ",(0,r.jsx)(n.code,{children:'siteConfig.markdown.format: "detect"'})," configuration"]}),"\n"]}),(0,r.jsxs)(n.p,{children:["This feature is ",(0,r.jsx)(n.strong,{children:"experimental"})," and currently has a few ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"importing-code-snippets",children:"Importing code snippets"}),"\n",(0,r.jsxs)(n.p,{children:["You can not only import a file containing a component definition, but also import any code file as raw text, and then insert it in a code block, thanks to ",(0,r.jsx)(n.a,{href:"https://webpack.js.org/loaders/raw-loader/",children:"Webpack raw-loader"}),". In order to use ",(0,r.jsx)(n.code,{children:"raw-loader"}),", you first need to install it in your project:"]}),"\n",(0,r.jsxs)(s.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(c.Z,{value:"npm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm install --save raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"yarn add raw-loader\n"})})}),(0,r.jsx)(c.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pnpm add raw-loader\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"Now you can import code snippets from another file as it is:"}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="myMarkdownFile.mdx"',children:"import CodeBlock from '@theme/CodeBlock';\nimport MyComponentSource from '!!raw-loader!./myComponent';\n\n<CodeBlock language=\"jsx\">{MyComponentSource}</CodeBlock>\n"})}),"\n","\n",(0,r.jsx)(i.Z,{children:(0,r.jsx)(a.Z,{language:"jsx",children:l.Z})}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/code-blocks#usage-in-jsx",children:"using code blocks in JSX"})," for more details of the ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," component."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You have to use ",(0,r.jsx)(n.code,{children:"<CodeBlock>"})," rather than the Markdown triple-backtick ",(0,r.jsx)(n.code,{children:"```"}),", because the latter will ship out any of its content as-is, but you want to interpolate the imported text here."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"This feature is experimental and might be subject to breaking API changes in the future."})}),"\n",(0,r.jsx)(n.h2,{id:"importing-markdown",children:"Importing Markdown"}),"\n",(0,r.jsx)(n.p,{children:"You can use Markdown files as components and import them elsewhere, either in Markdown files or in React pages."}),"\n",(0,r.jsxs)(n.p,{children:["By convention, using the ",(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"_"})," filename prefix"]})," will not create any doc page and means the Markdown file is a ",(0,r.jsx)(n.strong,{children:'"partial"'}),", to be imported by other files."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="_markdown-partial-example.mdx"',children:"<span>Hello {props.name}</span>\n\nThis is text some content from `_markdown-partial-example.mdx`.\n"})}),"\n","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",metastring:'title="someOtherDoc.mdx"',children:"import PartialExample from './_markdown-partial-example.mdx';\n\n<PartialExample name=\"Sebastien\" />\n"})}),"\n","\n",(0,r.jsx)(i.Z,{children:(0,r.jsx)(d,{name:"Sebastien"})}),"\n",(0,r.jsx)(n.p,{children:"This way, you can reuse content among multiple pages and avoid duplicating materials."}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Currently, the table of contents does not contain the imported Markdown headings. This is a technical limitation that we are trying to solve (",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3915",children:"issue"}),")."]})}),"\n",(0,r.jsx)(n.h2,{id:"available-exports",children:"Available exports"}),"\n",(0,r.jsx)(n.p,{children:"Within the MDX page, the following variables are available as globals:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"frontMatter"}),": the front matter as a record of string keys and values;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"toc"}),": the table of contents, as a tree of headings. See also ",(0,r.jsx)(n.a,{href:"/docs/markdown-features/toc#inline-table-of-contents",children:"Inline TOC"})," for a more concrete use-case."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"contentTitle"}),": the Markdown title, which is the first ",(0,r.jsx)(n.code,{children:"h1"})," heading in the Markdown text. It's ",(0,r.jsx)(n.code,{children:"undefined"})," if there isn't one (e.g. title specified in the front matter)."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-jsx",children:"import TOCInline from '@theme/TOCInline';\nimport CodeBlock from '@theme/CodeBlock';\n\nThe table of contents for this page, serialized:\n\n<CodeBlock className=\"language-json\">{JSON.stringify(toc, null, 2)}</CodeBlock>\n\nThe front matter of this page:\n\n<ul>\n {Object.entries(frontMatter).map(([key, value]) => <li key={key}><b>{key}</b>: {value}</li>)}\n</ul>\n\n<p>The title of this page is: <b>{contentTitle}</b></p>\n"})}),"\n","\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(n.p,{children:"The table of contents for this page, serialized:"}),(0,r.jsx)(a.Z,{className:"language-json",children:JSON.stringify(g,null,2)}),(0,r.jsx)(n.p,{children:"The front matter of this page:"}),(0,r.jsx)("ul",{children:Object.entries(p).map((([e,t])=>(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.b,{children:e}),": ",t]},e)))}),(0,r.jsxs)("p",{children:["The title of this page is: ",(0,r.jsx)("b",{children:h})]})]})]})}function y(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}}}]); \ No newline at end of file diff --git a/assets/js/65.8b2cf217.js b/assets/js/65.8b2cf217.js new file mode 100644 index 0000000000..8cb20eaee0 --- /dev/null +++ b/assets/js/65.8b2cf217.js @@ -0,0 +1,1791 @@ +"use strict"; +exports.id = 65; +exports.ids = [65]; +exports.modules = { + +/***/ 47065: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 7], $V2 = [1, 5], $V3 = [1, 9], $V4 = [1, 6], $V5 = [2, 6], $V6 = [1, 16], $V7 = [6, 8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40, 50, 55], $V8 = [8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $V9 = [8, 13, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $Va = [1, 26], $Vb = [6, 8, 14, 50, 55], $Vc = [8, 14, 55], $Vd = [1, 53], $Ve = [1, 52], $Vf = [8, 14, 30, 33, 35, 38, 55], $Vg = [1, 67], $Vh = [1, 68], $Vi = [1, 69], $Vj = [8, 14, 33, 35, 42, 55]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "GG": 6, "document": 7, "EOF": 8, ":": 9, "DIR": 10, "options": 11, "body": 12, "OPT": 13, "NL": 14, "line": 15, "statement": 16, "commitStatement": 17, "mergeStatement": 18, "cherryPickStatement": 19, "acc_title": 20, "acc_title_value": 21, "acc_descr": 22, "acc_descr_value": 23, "acc_descr_multiline_value": 24, "section": 25, "branchStatement": 26, "CHECKOUT": 27, "ref": 28, "BRANCH": 29, "ORDER": 30, "NUM": 31, "CHERRY_PICK": 32, "COMMIT_ID": 33, "STR": 34, "COMMIT_TAG": 35, "EMPTYSTR": 36, "MERGE": 37, "COMMIT_TYPE": 38, "commitType": 39, "COMMIT": 40, "commit_arg": 41, "COMMIT_MSG": 42, "NORMAL": 43, "REVERSE": 44, "HIGHLIGHT": 45, "openDirective": 46, "typeDirective": 47, "closeDirective": 48, "argDirective": 49, "open_directive": 50, "type_directive": 51, "arg_directive": 52, "close_directive": 53, "ID": 54, ";": 55, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "GG", 8: "EOF", 9: ":", 10: "DIR", 13: "OPT", 14: "NL", 20: "acc_title", 21: "acc_title_value", 22: "acc_descr", 23: "acc_descr_value", 24: "acc_descr_multiline_value", 25: "section", 27: "CHECKOUT", 29: "BRANCH", 30: "ORDER", 31: "NUM", 32: "CHERRY_PICK", 33: "COMMIT_ID", 34: "STR", 35: "COMMIT_TAG", 36: "EMPTYSTR", 37: "MERGE", 38: "COMMIT_TYPE", 40: "COMMIT", 42: "COMMIT_MSG", 43: "NORMAL", 44: "REVERSE", 45: "HIGHLIGHT", 50: "open_directive", 51: "type_directive", 52: "arg_directive", 53: "close_directive", 54: "ID", 55: ";" }, + productions_: [0, [3, 2], [3, 2], [3, 3], [3, 4], [3, 5], [7, 0], [7, 2], [11, 2], [11, 1], [12, 0], [12, 2], [15, 2], [15, 1], [16, 1], [16, 1], [16, 1], [16, 2], [16, 2], [16, 1], [16, 1], [16, 1], [16, 2], [26, 2], [26, 4], [19, 3], [19, 5], [19, 5], [19, 5], [19, 5], [18, 2], [18, 4], [18, 4], [18, 4], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [17, 2], [17, 3], [17, 3], [17, 5], [17, 5], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [5, 3], [5, 5], [46, 1], [47, 1], [49, 1], [48, 1], [28, 1], [28, 1], [4, 1], [4, 1], [4, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + return $$[$0]; + case 4: + return $$[$0 - 1]; + case 5: + yy.setDirection($$[$0 - 3]); + return $$[$0 - 1]; + case 7: + yy.setOptions($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 8: + $$[$0 - 1] += $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 10: + this.$ = []; + break; + case 11: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 12: + this.$ = $$[$0 - 1]; + break; + case 17: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 18: + case 19: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 20: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 22: + yy.checkout($$[$0]); + break; + case 23: + yy.branch($$[$0]); + break; + case 24: + yy.branch($$[$0 - 2], $$[$0]); + break; + case 25: + yy.cherryPick($$[$0], "", void 0); + break; + case 26: + yy.cherryPick($$[$0 - 2], "", $$[$0]); + break; + case 27: + case 29: + yy.cherryPick($$[$0 - 2], "", ""); + break; + case 28: + yy.cherryPick($$[$0], "", $$[$0 - 2]); + break; + case 30: + yy.merge($$[$0], "", "", ""); + break; + case 31: + yy.merge($$[$0 - 2], $$[$0], "", ""); + break; + case 32: + yy.merge($$[$0 - 2], "", $$[$0], ""); + break; + case 33: + yy.merge($$[$0 - 2], "", "", $$[$0]); + break; + case 34: + yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]); + break; + case 35: + yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 36: + yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 37: + yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 38: + yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]); + break; + case 39: + yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 40: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 41: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 42: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 43: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 44: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 45: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 46: + yy.commit($$[$0]); + break; + case 47: + yy.commit("", "", yy.commitType.NORMAL, $$[$0]); + break; + case 48: + yy.commit("", "", $$[$0], ""); + break; + case 49: + yy.commit("", "", $$[$0], $$[$0 - 2]); + break; + case 50: + yy.commit("", "", $$[$0 - 2], $$[$0]); + break; + case 51: + yy.commit("", $$[$0], yy.commitType.NORMAL, ""); + break; + case 52: + yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 53: + yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 54: + yy.commit("", $$[$0 - 2], $$[$0], ""); + break; + case 55: + yy.commit("", $$[$0], $$[$0 - 2], ""); + break; + case 56: + yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 57: + yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 58: + yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 59: + yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 60: + yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 61: + yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 62: + yy.commit($$[$0], "", yy.commitType.NORMAL, ""); + break; + case 63: + yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 64: + yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]); + break; + case 65: + yy.commit($$[$0 - 2], "", $$[$0], ""); + break; + case 66: + yy.commit($$[$0], "", $$[$0 - 2], ""); + break; + case 67: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, ""); + break; + case 68: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, ""); + break; + case 69: + yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 70: + yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 71: + yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 72: + yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]); + break; + case 73: + yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]); + break; + case 74: + yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]); + break; + case 75: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 76: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 77: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], ""); + break; + case 78: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], ""); + break; + case 79: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], ""); + break; + case 80: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], ""); + break; + case 81: + yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 82: + yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 83: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 84: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 85: + yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 86: + yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]); + break; + case 87: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 88: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 89: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 90: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 91: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 92: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 93: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]); + break; + case 94: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]); + break; + case 95: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]); + break; + case 96: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]); + break; + case 97: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]); + break; + case 98: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]); + break; + case 99: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]); + break; + case 100: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]); + break; + case 101: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]); + break; + case 102: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]); + break; + case 103: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]); + break; + case 104: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]); + break; + case 105: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]); + break; + case 106: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]); + break; + case 107: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]); + break; + case 108: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]); + break; + case 109: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]); + break; + case 110: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]); + break; + case 111: + this.$ = ""; + break; + case 112: + this.$ = $$[$0]; + break; + case 113: + this.$ = yy.commitType.NORMAL; + break; + case 114: + this.$ = yy.commitType.REVERSE; + break; + case 115: + this.$ = yy.commitType.HIGHLIGHT; + break; + case 118: + yy.parseDirective("%%{", "open_directive"); + break; + case 119: + yy.parseDirective($$[$0], "type_directive"); + break; + case 120: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 121: + yy.parseDirective("}%%", "close_directive", "gitGraph"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 7: 12, 8: $V5, 9: [1, 13], 10: [1, 14], 11: 15, 14: $V6 }, o($V7, [2, 124]), o($V7, [2, 125]), o($V7, [2, 126]), { 47: 17, 51: [1, 18] }, { 51: [2, 118] }, { 1: [2, 1] }, { 1: [2, 2] }, { 8: [1, 19] }, { 7: 20, 8: $V5, 11: 15, 14: $V6 }, { 9: [1, 21] }, o($V8, [2, 10], { 12: 22, 13: [1, 23] }), o($V9, [2, 9]), { 9: [1, 25], 48: 24, 53: $Va }, o([9, 53], [2, 119]), { 1: [2, 3] }, { 8: [1, 27] }, { 7: 28, 8: $V5, 11: 15, 14: $V6 }, { 8: [2, 7], 14: [1, 31], 15: 29, 16: 30, 17: 32, 18: 33, 19: 34, 20: [1, 35], 22: [1, 36], 24: [1, 37], 25: [1, 38], 26: 39, 27: [1, 40], 29: [1, 44], 32: [1, 43], 37: [1, 42], 40: [1, 41] }, o($V9, [2, 8]), o($Vb, [2, 116]), { 49: 45, 52: [1, 46] }, o($Vb, [2, 121]), { 1: [2, 4] }, { 8: [1, 47] }, o($V8, [2, 11]), { 4: 48, 8: $V1, 14: $V2, 55: $V4 }, o($V8, [2, 13]), o($Vc, [2, 14]), o($Vc, [2, 15]), o($Vc, [2, 16]), { 21: [1, 49] }, { 23: [1, 50] }, o($Vc, [2, 19]), o($Vc, [2, 20]), o($Vc, [2, 21]), { 28: 51, 34: $Vd, 54: $Ve }, o($Vc, [2, 111], { 41: 54, 33: [1, 57], 34: [1, 59], 35: [1, 55], 38: [1, 56], 42: [1, 58] }), { 28: 60, 34: $Vd, 54: $Ve }, { 33: [1, 61], 35: [1, 62] }, { 28: 63, 34: $Vd, 54: $Ve }, { 48: 64, 53: $Va }, { 53: [2, 120] }, { 1: [2, 5] }, o($V8, [2, 12]), o($Vc, [2, 17]), o($Vc, [2, 18]), o($Vc, [2, 22]), o($Vf, [2, 122]), o($Vf, [2, 123]), o($Vc, [2, 46]), { 34: [1, 65] }, { 39: 66, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 70] }, { 34: [1, 71] }, o($Vc, [2, 112]), o($Vc, [2, 30], { 33: [1, 72], 35: [1, 74], 38: [1, 73] }), { 34: [1, 75] }, { 34: [1, 76], 36: [1, 77] }, o($Vc, [2, 23], { 30: [1, 78] }), o($Vb, [2, 117]), o($Vc, [2, 47], { 33: [1, 80], 38: [1, 79], 42: [1, 81] }), o($Vc, [2, 48], { 33: [1, 83], 35: [1, 82], 42: [1, 84] }), o($Vj, [2, 113]), o($Vj, [2, 114]), o($Vj, [2, 115]), o($Vc, [2, 51], { 35: [1, 85], 38: [1, 86], 42: [1, 87] }), o($Vc, [2, 62], { 33: [1, 90], 35: [1, 88], 38: [1, 89] }), { 34: [1, 91] }, { 39: 92, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 93] }, o($Vc, [2, 25], { 35: [1, 94] }), { 33: [1, 95] }, { 33: [1, 96] }, { 31: [1, 97] }, { 39: 98, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 99] }, { 34: [1, 100] }, { 34: [1, 101] }, { 34: [1, 102] }, { 34: [1, 103] }, { 34: [1, 104] }, { 39: 105, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 106] }, { 34: [1, 107] }, { 39: 108, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 109] }, o($Vc, [2, 31], { 35: [1, 111], 38: [1, 110] }), o($Vc, [2, 32], { 33: [1, 113], 35: [1, 112] }), o($Vc, [2, 33], { 33: [1, 114], 38: [1, 115] }), { 34: [1, 116], 36: [1, 117] }, { 34: [1, 118] }, { 34: [1, 119] }, o($Vc, [2, 24]), o($Vc, [2, 49], { 33: [1, 120], 42: [1, 121] }), o($Vc, [2, 53], { 38: [1, 122], 42: [1, 123] }), o($Vc, [2, 63], { 33: [1, 125], 38: [1, 124] }), o($Vc, [2, 50], { 33: [1, 126], 42: [1, 127] }), o($Vc, [2, 55], { 35: [1, 128], 42: [1, 129] }), o($Vc, [2, 66], { 33: [1, 131], 35: [1, 130] }), o($Vc, [2, 52], { 38: [1, 132], 42: [1, 133] }), o($Vc, [2, 54], { 35: [1, 134], 42: [1, 135] }), o($Vc, [2, 67], { 35: [1, 137], 38: [1, 136] }), o($Vc, [2, 64], { 33: [1, 139], 38: [1, 138] }), o($Vc, [2, 65], { 33: [1, 141], 35: [1, 140] }), o($Vc, [2, 68], { 35: [1, 143], 38: [1, 142] }), { 39: 144, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 145] }, { 34: [1, 146] }, { 34: [1, 147] }, { 34: [1, 148] }, { 39: 149, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 26]), o($Vc, [2, 27]), o($Vc, [2, 28]), o($Vc, [2, 29]), { 34: [1, 150] }, { 34: [1, 151] }, { 39: 152, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 153] }, { 39: 154, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 155] }, { 34: [1, 156] }, { 34: [1, 157] }, { 34: [1, 158] }, { 34: [1, 159] }, { 34: [1, 160] }, { 34: [1, 161] }, { 39: 162, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 163] }, { 34: [1, 164] }, { 34: [1, 165] }, { 39: 166, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 167] }, { 39: 168, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 169] }, { 34: [1, 170] }, { 34: [1, 171] }, { 39: 172, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 173] }, o($Vc, [2, 37], { 35: [1, 174] }), o($Vc, [2, 38], { 38: [1, 175] }), o($Vc, [2, 36], { 33: [1, 176] }), o($Vc, [2, 39], { 35: [1, 177] }), o($Vc, [2, 34], { 38: [1, 178] }), o($Vc, [2, 35], { 33: [1, 179] }), o($Vc, [2, 60], { 42: [1, 180] }), o($Vc, [2, 73], { 33: [1, 181] }), o($Vc, [2, 61], { 42: [1, 182] }), o($Vc, [2, 84], { 38: [1, 183] }), o($Vc, [2, 74], { 33: [1, 184] }), o($Vc, [2, 83], { 38: [1, 185] }), o($Vc, [2, 59], { 42: [1, 186] }), o($Vc, [2, 72], { 33: [1, 187] }), o($Vc, [2, 58], { 42: [1, 188] }), o($Vc, [2, 78], { 35: [1, 189] }), o($Vc, [2, 71], { 33: [1, 190] }), o($Vc, [2, 77], { 35: [1, 191] }), o($Vc, [2, 57], { 42: [1, 192] }), o($Vc, [2, 85], { 38: [1, 193] }), o($Vc, [2, 56], { 42: [1, 194] }), o($Vc, [2, 79], { 35: [1, 195] }), o($Vc, [2, 80], { 35: [1, 196] }), o($Vc, [2, 86], { 38: [1, 197] }), o($Vc, [2, 70], { 33: [1, 198] }), o($Vc, [2, 81], { 38: [1, 199] }), o($Vc, [2, 69], { 33: [1, 200] }), o($Vc, [2, 75], { 35: [1, 201] }), o($Vc, [2, 76], { 35: [1, 202] }), o($Vc, [2, 82], { 38: [1, 203] }), { 34: [1, 204] }, { 39: 205, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 206] }, { 34: [1, 207] }, { 39: 208, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 209] }, { 34: [1, 210] }, { 34: [1, 211] }, { 34: [1, 212] }, { 39: 213, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 214] }, { 39: 215, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 216] }, { 34: [1, 217] }, { 34: [1, 218] }, { 34: [1, 219] }, { 34: [1, 220] }, { 34: [1, 221] }, { 34: [1, 222] }, { 39: 223, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 224] }, { 34: [1, 225] }, { 34: [1, 226] }, { 39: 227, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 228] }, { 39: 229, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 230] }, { 34: [1, 231] }, { 34: [1, 232] }, { 39: 233, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 40]), o($Vc, [2, 42]), o($Vc, [2, 41]), o($Vc, [2, 43]), o($Vc, [2, 45]), o($Vc, [2, 44]), o($Vc, [2, 101]), o($Vc, [2, 102]), o($Vc, [2, 99]), o($Vc, [2, 100]), o($Vc, [2, 104]), o($Vc, [2, 103]), o($Vc, [2, 108]), o($Vc, [2, 107]), o($Vc, [2, 106]), o($Vc, [2, 105]), o($Vc, [2, 110]), o($Vc, [2, 109]), o($Vc, [2, 98]), o($Vc, [2, 97]), o($Vc, [2, 96]), o($Vc, [2, 95]), o($Vc, [2, 93]), o($Vc, [2, 94]), o($Vc, [2, 92]), o($Vc, [2, 91]), o($Vc, [2, 90]), o($Vc, [2, 89]), o($Vc, [2, 87]), o($Vc, [2, 88])], + defaultActions: { 9: [2, 118], 10: [2, 1], 11: [2, 2], 19: [2, 3], 27: [2, 4], 46: [2, 120], 47: [2, 5] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 50; + case 1: + this.begin("type_directive"); + return 51; + case 2: + this.popState(); + this.begin("arg_directive"); + return 9; + case 3: + this.popState(); + this.popState(); + return 53; + case 4: + return 52; + case 5: + this.begin("acc_title"); + return 20; + case 6: + this.popState(); + return "acc_title_value"; + case 7: + this.begin("acc_descr"); + return 22; + case 8: + this.popState(); + return "acc_descr_value"; + case 9: + this.begin("acc_descr_multiline"); + break; + case 10: + this.popState(); + break; + case 11: + return "acc_descr_multiline_value"; + case 12: + return 14; + case 13: + break; + case 14: + break; + case 15: + return 6; + case 16: + return 40; + case 17: + return 33; + case 18: + return 38; + case 19: + return 42; + case 20: + return 43; + case 21: + return 44; + case 22: + return 45; + case 23: + return 35; + case 24: + return 29; + case 25: + return 30; + case 26: + return 37; + case 27: + return 32; + case 28: + return 27; + case 29: + return 10; + case 30: + return 10; + case 31: + return 9; + case 32: + return "CARET"; + case 33: + this.begin("options"); + break; + case 34: + this.popState(); + break; + case 35: + return 13; + case 36: + return 36; + case 37: + this.begin("string"); + break; + case 38: + this.popState(); + break; + case 39: + return 34; + case 40: + return 31; + case 41: + return 54; + case 42: + return 8; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit(?=\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\b)/i, /^(?:REVERSE\b)/i, /^(?:HIGHLIGHT\b)/i, /^(?:tag:)/i, /^(?:branch(?=\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\s|$))/i, /^(?:cherry-pick(?=\s|$))/i, /^(?:checkout(?=\s|$))/i, /^(?:LR\b)/i, /^(?:TB\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:[ \r\n\t]+end\b)/i, /^(?:[\s\S]+(?=[ \r\n\t]+end))/i, /^(?:["]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[0-9]+(?=\s|$))/i, /^(?:\w([-\./\w]*[-\w])?)/i, /^(?:$)/i, /^(?:\s+)/i], + conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "options": { "rules": [34, 35], "inclusive": false }, "string": { "rules": [38, 39], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 40, 41, 42, 43], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const gitGraphParser = parser; +let mainBranchName = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; +let mainBranchOrder = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; +let commits = {}; +let head = null; +let branchesConfig = {}; +branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; +let branches = {}; +branches[mainBranchName] = head; +let curBranch = mainBranchName; +let direction = "LR"; +let seq = 0; +function getId() { + return (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.y)({ length: 7 }); +} +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +function uniqBy(list, fn) { + const recordMap = /* @__PURE__ */ Object.create(null); + return list.reduce((out, item) => { + const key = fn(item); + if (!recordMap[key]) { + recordMap[key] = true; + out.push(item); + } + return out; + }, []); +} +const setDirection = function(dir2) { + direction = dir2; +}; +let options = {}; +const setOptions = function(rawOptString) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("options str", rawOptString); + rawOptString = rawOptString && rawOptString.trim(); + rawOptString = rawOptString || "{}"; + try { + options = JSON.parse(rawOptString); + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing gitGraph options", e.message); + } +}; +const getOptions = function() { + return options; +}; +const commit = function(msg, id, type, tag) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering commit:", msg, id, type, tag); + id = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(id, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + msg = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(msg, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const commit2 = { + id: id ? id : seq + "-" + getId(), + message: msg, + seq: seq++, + type: type ? type : commitType$1.NORMAL, + tag: tag ? tag : "", + parents: head == null ? [] : [head.id], + branch: curBranch + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in pushCommit " + commit2.id); +}; +const branch = function(name, order) { + name = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(name, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[name] === void 0) { + branches[name] = head != null ? head.id : null; + branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; + checkout(name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in createBranch"); + } else { + let error = new Error( + 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } +}; +const merge = function(otherBranch, custom_id, override_type, custom_tag) { + otherBranch = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(otherBranch, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + custom_id = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(custom_id, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const currentCommit = commits[branches[curBranch]]; + const otherCommit = commits[branches[otherBranch]]; + if (curBranch === otherBranch) { + let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["commit"] + }; + throw error; + } else if (branches[otherBranch] === void 0) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch " + otherBranch] + }; + throw error; + } else if (otherCommit === void 0 || !otherCommit) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"commit"'] + }; + throw error; + } else if (currentCommit === otherCommit) { + let error = new Error('Incorrect usage of "merge". Both branches have same head'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (custom_id && commits[custom_id] !== void 0) { + let error = new Error( + 'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id" + ); + error.hash = { + text: "merge " + otherBranch + custom_id + override_type + custom_tag, + token: "merge " + otherBranch + custom_id + override_type + custom_tag, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: [ + "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag + ] + }; + throw error; + } + const commit2 = { + id: custom_id ? custom_id : seq + "-" + getId(), + message: "merged branch " + otherBranch + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, branches[otherBranch]], + branch: curBranch, + type: commitType$1.MERGE, + customType: override_type, + customId: custom_id ? true : false, + tag: custom_tag ? custom_tag : "" + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in mergeBranch"); +}; +const cherryPick = function(sourceId, targetId, tag) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering cherryPick:", sourceId, targetId, tag); + sourceId = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(sourceId, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + targetId = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(targetId, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (!sourceId || commits[sourceId] === void 0) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit id should exist and provided' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + let sourceCommit = commits[sourceId]; + let sourceCommitBranch = sourceCommit.branch; + if (sourceCommit.type === commitType$1.MERGE) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit should not be a merge commit' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + if (!targetId || commits[targetId] === void 0) { + if (sourceCommitBranch === curBranch) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit is already on current branch' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const currentCommit = commits[branches[curBranch]]; + if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const commit2 = { + id: seq + "-" + getId(), + message: "cherry-picked " + sourceCommit + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, sourceCommit.id], + branch: curBranch, + type: commitType$1.CHERRY_PICK, + tag: tag ?? "cherry-pick:" + sourceCommit.id + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in cherryPick"); + } +}; +const checkout = function(branch2) { + branch2 = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(branch2, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[branch2] === void 0) { + let error = new Error( + 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")' + ); + error.hash = { + text: "checkout " + branch2, + token: "checkout " + branch2, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"branch ' + branch2 + '"'] + }; + throw error; + } else { + curBranch = branch2; + const id = branches[curBranch]; + head = commits[id]; + } +}; +function upsert(arr, key, newVal) { + const index = arr.indexOf(key); + if (index === -1) { + arr.push(newVal); + } else { + arr.splice(index, 1, newVal); + } +} +function prettyPrintCommitHistory(commitArr) { + const commit2 = commitArr.reduce((out, commit3) => { + if (out.seq > commit3.seq) { + return out; + } + return commit3; + }, commitArr[0]); + let line = ""; + commitArr.forEach(function(c) { + if (c === commit2) { + line += " *"; + } else { + line += " |"; + } + }); + const label = [line, commit2.id, commit2.seq]; + for (let branch2 in branches) { + if (branches[branch2] === commit2.id) { + label.push(branch2); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(label.join(" ")); + if (commit2.parents && commit2.parents.length == 2) { + const newCommit = commits[commit2.parents[0]]; + upsert(commitArr, commit2, newCommit); + commitArr.push(commits[commit2.parents[1]]); + } else if (commit2.parents.length == 0) { + return; + } else { + const nextCommit = commits[commit2.parents]; + upsert(commitArr, commit2, nextCommit); + } + commitArr = uniqBy(commitArr, (c) => c.id); + prettyPrintCommitHistory(commitArr); +} +const prettyPrint = function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(commits); + const node = getCommitsArray()[0]; + prettyPrintCommitHistory([node]); +}; +const clear$1 = function() { + commits = {}; + head = null; + let mainBranch = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; + let mainBranchOrder2 = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; + branches = {}; + branches[mainBranch] = null; + branchesConfig = {}; + branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 }; + curBranch = mainBranch; + seq = 0; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const getBranchesAsObjArray = function() { + const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => { + if (branchConfig.order !== null) { + return branchConfig; + } + return { + ...branchConfig, + order: parseFloat(`0.${i}`, 10) + }; + }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name })); + return branchesArray; +}; +const getBranches = function() { + return branches; +}; +const getCommits = function() { + return commits; +}; +const getCommitsArray = function() { + const commitArr = Object.keys(commits).map(function(key) { + return commits[key]; + }); + commitArr.forEach(function(o) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(o.id); + }); + commitArr.sort((a, b) => a.seq - b.seq); + return commitArr; +}; +const getCurrentBranch = function() { + return curBranch; +}; +const getDirection = function() { + return direction; +}; +const getHead = function() { + return head; +}; +const commitType$1 = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const gitGraphDb = { + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph, + setDirection, + setOptions, + getOptions, + commit, + branch, + merge, + cherryPick, + checkout, + //reset, + prettyPrint, + clear: clear$1, + getBranchesAsObjArray, + getBranches, + getCommits, + getCommitsArray, + getCurrentBranch, + getDirection, + getHead, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t, + commitType: commitType$1 +}; +let allCommitsDict = {}; +const commitType = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const THEME_COLOR_LIMIT = 8; +let branchPos = {}; +let commitPos = {}; +let lanes = []; +let maxPos = 0; +let dir = "LR"; +const clear = () => { + branchPos = {}; + commitPos = {}; + allCommitsDict = {}; + maxPos = 0; + lanes = []; + dir = "LR"; +}; +const drawText = (txt) => { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + let rows = []; + if (typeof txt === "string") { + rows = txt.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(txt)) { + rows = txt; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + tspan.setAttribute("class", "row"); + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; +}; +const drawCommits = (svg, commits2, modifyGraph) => { + const gitGraphConfig = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.z)().gitGraph; + const gBullets = svg.append("g").attr("class", "commit-bullets"); + const gLabels = svg.append("g").attr("class", "commit-labels"); + let pos = 0; + if (dir === "TB") { + pos = 30; + } + const keys = Object.keys(commits2); + const sortedKeys = keys.sort((a, b) => { + return commits2[a].seq - commits2[b].seq; + }); + sortedKeys.forEach((key) => { + const commit2 = commits2[key]; + const y = dir === "TB" ? pos + 10 : branchPos[commit2.branch].pos; + const x = dir === "TB" ? branchPos[commit2.branch].pos : pos + 10; + if (modifyGraph) { + let typeClass; + let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type; + switch (commitSymbolType) { + case commitType.NORMAL: + typeClass = "commit-normal"; + break; + case commitType.REVERSE: + typeClass = "commit-reverse"; + break; + case commitType.HIGHLIGHT: + typeClass = "commit-highlight"; + break; + case commitType.MERGE: + typeClass = "commit-merge"; + break; + case commitType.CHERRY_PICK: + typeClass = "commit-cherry-pick"; + break; + default: + typeClass = "commit-normal"; + } + if (commitSymbolType === commitType.HIGHLIGHT) { + const circle = gBullets.append("rect"); + circle.attr("x", x - 10); + circle.attr("y", y - 10); + circle.attr("height", 20); + circle.attr("width", 20); + circle.attr( + "class", + `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer` + ); + gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner` + ); + } else if (commitSymbolType === commitType.CHERRY_PICK) { + gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + } else { + const circle = gBullets.append("circle"); + circle.attr("cx", x); + circle.attr("cy", y); + circle.attr("r", commit2.type === commitType.MERGE ? 9 : 10); + circle.attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + if (commitSymbolType === commitType.MERGE) { + const circle2 = gBullets.append("circle"); + circle2.attr("cx", x); + circle2.attr("cy", y); + circle2.attr("r", 6); + circle2.attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + if (commitSymbolType === commitType.REVERSE) { + const cross = gBullets.append("path"); + cross.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + } + } + if (dir === "TB") { + commitPos[commit2.id] = { x, y: pos + 10 }; + } else { + commitPos[commit2.id] = { x: pos + 10, y }; + } + if (modifyGraph) { + const px = 4; + const py = 2; + if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) { + const wrapper = gLabels.append("g"); + const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); + const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id); + let bbox = text.node().getBBox(); + labelBkg.attr("x", pos + 10 - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py); + if (dir === "TB") { + labelBkg.attr("x", x - (bbox.width + 4 * px + 5)).attr("y", y - 12); + text.attr("x", x - (bbox.width + 4 * px)).attr("y", y + bbox.height - 12); + } + if (dir !== "TB") { + text.attr("x", pos + 10 - bbox.width / 2); + } + if (gitGraphConfig.rotateCommitLabel) { + if (dir === "TB") { + text.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + labelBkg.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + } else { + let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; + let r_y = 10 + bbox.width / 25 * 8.5; + wrapper.attr( + "transform", + "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + y + ")" + ); + } + } + } + if (commit2.tag) { + const rect = gLabels.insert("polygon"); + const hole = gLabels.append("circle"); + const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag); + let tagBbox = tag.node().getBBox(); + tag.attr("x", pos + 10 - tagBbox.width / 2); + const h2 = tagBbox.height / 2; + const ly = y - 19.2; + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${pos - tagBbox.width / 2 - px / 2},${ly + py} + ${pos - tagBbox.width / 2 - px / 2},${ly - py} + ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py} + ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}` + ); + hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole"); + if (dir === "TB") { + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${x},${pos + py} + ${x},${pos - py} + ${x + 10},${pos - h2 - py} + ${x + 10 + tagBbox.width + px},${pos - h2 - py} + ${x + 10 + tagBbox.width + px},${pos + h2 + py} + ${x + 10},${pos + h2 + py}` + ).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + hole.attr("cx", x + px / 2).attr("cy", pos).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + tag.attr("x", x + 5).attr("y", pos + 3).attr("transform", "translate(14,14) rotate(45, " + x + "," + pos + ")"); + } + } + } + pos += 50; + if (pos > maxPos) { + maxPos = pos; + } + }); +}; +const hasOverlappingCommits = (commit1, commit2, allCommits) => { + const keys = Object.keys(allCommits); + const overlappingComits = keys.filter((key) => { + return allCommits[key].branch === commit2.branch && allCommits[key].seq > commit1.seq && allCommits[key].seq < commit2.seq; + }); + return overlappingComits.length > 0; +}; +const findLane = (y1, y2, depth = 0) => { + const candidate = y1 + Math.abs(y1 - y2) / 2; + if (depth > 5) { + return candidate; + } + let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); + if (ok) { + lanes.push(candidate); + return candidate; + } + const diff = Math.abs(y1 - y2); + return findLane(y1, y2 - diff / 5, depth + 1); +}; +const drawArrow = (svg, commit1, commit2, allCommits) => { + const p1 = commitPos[commit1.id]; + const p2 = commitPos[commit2.id]; + const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits); + let arc = ""; + let arc2 = ""; + let radius = 0; + let offset = 0; + let colorClassNum = branchPos[commit2.branch].index; + let lineDef; + if (overlappingCommits) { + arc = "A 10 10, 0, 0, 0,"; + arc2 = "A 10 10, 0, 0, 1,"; + radius = 10; + offset = 10; + colorClassNum = branchPos[commit2.branch].index; + const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); + const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x); + if (dir === "TB") { + if (p1.x < p2.x) { + lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } else { + lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; + } else { + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; + } + } + } else { + if (dir === "TB") { + if (p1.x < p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit2.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; + } + if (p1.x > p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.x === p2.x) { + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x + radius} ${p1.y} ${arc} ${p1.x + offset} ${p2.y + radius} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit2.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.y > p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`; + } + if (p1.y === p2.y) { + colorClassNum = branchPos[commit1.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } + } + svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); +}; +const drawArrows = (svg, commits2) => { + const gArrows = svg.append("g").attr("class", "commit-arrows"); + Object.keys(commits2).forEach((key) => { + const commit2 = commits2[key]; + if (commit2.parents && commit2.parents.length > 0) { + commit2.parents.forEach((parent) => { + drawArrow(gArrows, commits2[parent], commit2, commits2); + }); + } + }); +}; +const drawBranches = (svg, branches2) => { + const gitGraphConfig = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.z)().gitGraph; + const g = svg.append("g"); + branches2.forEach((branch2, index) => { + const adjustIndexForTheme = index % THEME_COLOR_LIMIT; + const pos = branchPos[branch2.name].pos; + const line = g.append("line"); + line.attr("x1", 0); + line.attr("y1", pos); + line.attr("x2", maxPos); + line.attr("y2", pos); + line.attr("class", "branch branch" + adjustIndexForTheme); + if (dir === "TB") { + line.attr("y1", 30); + line.attr("x1", pos); + line.attr("y2", maxPos); + line.attr("x2", pos); + } + lanes.push(pos); + let name = branch2.name; + const labelElement = drawText(name); + const bkg = g.insert("rect"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); + label.attr( + "transform", + "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" + ); + if (dir === "TB") { + bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); + label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); + } + if (dir !== "TB") { + bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 2) + ")"); + } + }); +}; +const draw = function(txt, id, ver, diagObj) { + clear(); + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.z)(); + const gitGraphConfig = conf.gitGraph; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in gitgraph renderer", txt + "\n", "id:", id, ver); + allCommitsDict = diagObj.db.getCommits(); + const branches2 = diagObj.db.getBranchesAsObjArray(); + dir = diagObj.db.getDirection(); + const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + let pos = 0; + branches2.forEach((branch2, index) => { + const labelElement = drawText(branch2.name); + const g = diagram2.append("g"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + branchPos[branch2.name] = { pos, index }; + pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0) + (dir === "TB" ? bbox.width / 2 : 0); + label.remove(); + branchLabel.remove(); + g.remove(); + }); + drawCommits(diagram2, allCommitsDict, false); + if (gitGraphConfig.showBranches) { + drawBranches(diagram2, branches2); + } + drawArrows(diagram2, allCommitsDict); + drawCommits(diagram2, allCommitsDict, true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.insertTitle( + diagram2, + "gitTitleText", + gitGraphConfig.titleTopMargin, + diagObj.db.getDiagramTitle() + ); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.A)( + void 0, + diagram2, + gitGraphConfig.diagramPadding, + gitGraphConfig.useMaxWidth ?? conf.useMaxWidth + ); +}; +const gitGraphRenderer = { + draw +}; +const getStyles = (options2) => ` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0, 1, 2, 3, 4, 5, 6, 7].map( + (i) => ` + .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; } + .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; } + .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; } + .label${i} { fill: ${options2["git" + i]}; } + .arrow${i} { stroke: ${options2["git" + i]}; } + ` +).join("\n")} + + .branch { + stroke-width: 1; + stroke: ${options2.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} + .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} + .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } + .tag-hole { fill: ${options2.textColor}; } + + .commit-merge { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + .commit-reverse { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options2.textColor}; + } +`; +const gitGraphStyles = getStyles; +const diagram = { + parser: gitGraphParser, + db: gitGraphDb, + renderer: gitGraphRenderer, + styles: gitGraphStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/6608e8cd.e11b7647.js b/assets/js/6608e8cd.e11b7647.js new file mode 100644 index 0000000000..611f877b45 --- /dev/null +++ b/assets/js/6608e8cd.e11b7647.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65180],{90224:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Ensure heading anchor slugs respect GitHub emoji behavior","permalink":"/tests/blog/2023/08/05/","unlisted":false},{"title":"Test if href in feed resolved correctly","permalink":"/tests/blog/2023/07/19/a","unlisted":false},{"title":"Test Relative Path","permalink":"/tests/blog/2023/07/19/b","unlisted":false},{"title":"A post with html slug","permalink":"/tests/blog/x/y/z.html","unlisted":false},{"title":"Unlisted blog post","permalink":"/tests/blog/unlisted-post","unlisted":true}]}')}}]); \ No newline at end of file diff --git a/assets/js/66222.4426cbe9.js b/assets/js/66222.4426cbe9.js new file mode 100644 index 0000000000..26667329b0 --- /dev/null +++ b/assets/js/66222.4426cbe9.js @@ -0,0 +1,2 @@ +/*! For license information please see 66222.4426cbe9.js.LICENSE.txt */ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66222],{12806:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(27378)),o=i(n(5625));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"}))};t.default=s},90418:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(27378)),o=i(n(5625));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M6,2V8H6V8L10,12L6,16V16H6V22H18V16H18V16L14,12L18,8V8H18V2H6M16,16.5V20H8V16.5L12,12.5L16,16.5M12,11.5L8,7.5V4H16V7.5L12,11.5Z"}))};t.default=s},59349:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(27378)),o=i(n(5625));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73z"}))};t.default=s},57949:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(27378)),o=i(n(5625));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}))};t.default=s},5625:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(27378)),o=i(n(23615));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){var t=e.size,n=void 0===t?24:t,o=e.fill,i=void 0===o?"#000":o,a=e.className,s=e.path;return r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",className:a},r.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),r.default.createElement("path",{fill:i,d:s}))};a.propTypes={size:o.default.number,fill:o.default.string,className:o.default.string,path:o.default.string.isRequired};var s=a;t.default=s},34013:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=f(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}r.default=e,n&&n.set(e,r);return r}(n(27378)),o=u(n(23615)),i=n(2814),a=u(n(75210)),s=n(37206),l=n(9376),c=n(48795);function u(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(f=function(e){return e?n:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d.apply(this,arguments)}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w(e,t){return w=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},w(e,t)}function g(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=s.loadStates.initial,m=s.loadStates.loading,y=s.loadStates.loaded,O=s.loadStates.error,S=function(e){var t,n;function o(t){var n;return g(v(n=e.call(this,t)||this),"onClick",(function(){var e=n.state,t=e.loadState,r=e.onLine,o=e.overThreshold;if(r)switch(t){case m:return void(o&&n.cancel(!0));case y:return;case b:case O:return void n.load(!0);default:throw new Error("Wrong state: "+t)}})),g(v(n),"load",(function(e){var t=n.state,r=t.loadState,o=t.url;if(!c.ssr&&y!==r&&m!==r){n.loadStateChange(m,e);var i=n.props.threshold,a="xhr"===n.props.loader?(0,l.xhrLoader)(o):(0,l.imageLoader)(o);if(a.then((function(){n.clear(),n.loadStateChange(y,!1)})).catch((function(e){n.clear(),404===e.status?n.loadStateChange(O,!1,404):n.loadStateChange(O,!1)})),i){var s=(0,l.timeout)(i);s.then((function(){n.loader&&(window.document.dispatchEvent(new CustomEvent("possiblySlowNetwork",{detail:{possiblySlowNetwork:!0}})),n.setState({overThreshold:!0}),n.state.userTriggered||n.cancel(!0))})),n.loader=(0,l.combineCancel)(a,s)}else n.loader=a}})),g(v(n),"onEnter",(function(){if(!n.state.inViewport){n.setState({inViewport:!0});var e=(0,c.selectSrc)({srcSet:n.props.srcSet,maxImageWidth:n.props.srcSet.length>1?(0,c.guessMaxImageWidth)(n.state.dimensions):0,supportsWebp:c.supportsWebp}),t=n.props.getUrl,r=t?t(e):e.src,o=n.props.shouldAutoDownload(h(h({},n.state),{},{size:e.size}));n.setState({pickedSrc:e,shouldAutoDownload:o,url:r},(function(){o&&n.load(!1)}))}})),g(v(n),"onLeave",(function(){n.state.loadState!==m||n.state.userTriggered||(n.setState({inViewport:!1}),n.cancel(!1))})),n.state={loadState:b,connection:c.nativeConnection?{downlink:navigator.connection.downlink,rtt:navigator.connection.rtt,effectiveType:navigator.connection.effectiveType}:null,onLine:!0,overThreshold:!1,inViewport:!1,userTriggered:!1,possiblySlowNetwork:!1},n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,w(t,n);var s=o.prototype;return s.componentDidMount=function(){var e=this;c.nativeConnection?(this.updateConnection=function(){navigator.onLine&&e.state.loadState===b&&e.setState({connection:{effectiveType:navigator.connection.effectiveType,downlink:navigator.connection.downlink,rtt:navigator.connection.rtt}})},navigator.connection.addEventListener("onchange",this.updateConnection)):this.props.threshold&&(this.possiblySlowNetworkListener=function(t){if(e.state.loadState===b){var n=t.detail.possiblySlowNetwork;!e.state.possiblySlowNetwork&&n&&e.setState({possiblySlowNetwork:n})}},window.document.addEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener)),this.updateOnlineStatus=function(){return e.setState({onLine:navigator.onLine})},this.updateOnlineStatus(),window.addEventListener("online",this.updateOnlineStatus),window.addEventListener("offline",this.updateOnlineStatus)},s.componentWillUnmount=function(){this.clear(),c.nativeConnection?navigator.connection.removeEventListener("onchange",this.updateConnection):this.props.threshold&&window.document.removeEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener),window.removeEventListener("online",this.updateOnlineStatus),window.removeEventListener("offline",this.updateOnlineStatus)},s.clear=function(){this.loader&&(this.loader.cancel(),this.loader=void 0)},s.cancel=function(e){m===this.state.loadState&&(this.clear(),this.loadStateChange(b,e))},s.loadStateChange=function(e,t,n){void 0===n&&(n=null),this.setState({loadState:e,overThreshold:!1,userTriggered:!!t,loadInfo:n})},s.render=function(){var e=this,t=this.props.getIcon(this.state),n=this.props.getMessage(t,this.state);return r.default.createElement(i.Waypoint,{onEnter:this.onEnter,onLeave:this.onLeave},r.default.createElement(a.default,d({},this.props,(0,c.fallbackParams)(this.props),{onClick:this.onClick,icon:t,src:this.state.url||"",onDimensions:function(t){return e.setState({dimensions:t})},message:n})))},o}(r.Component);t.default=S,g(S,"propTypes",{threshold:o.default.number,getUrl:o.default.func,srcSet:o.default.arrayOf(o.default.shape({width:o.default.number.isRequired,src:o.default.string,size:o.default.number,format:o.default.oneOf(["jpeg","jpg","webp","png","gif"])})).isRequired,shouldAutoDownload:o.default.func,getMessage:o.default.func,getIcon:o.default.func,loader:o.default.oneOf(["image","xhr"]),width:o.default.number.isRequired,height:o.default.number.isRequired,placeholder:o.default.oneOfType([o.default.shape({color:o.default.string.isRequired}),o.default.shape({lqip:o.default.string.isRequired})]).isRequired,icons:o.default.object.isRequired,theme:o.default.object.isRequired}),g(S,"defaultProps",{shouldAutoDownload:function(e){var t=e.connection,n=e.size,r=e.threshold;if(e.possiblySlowNetwork)return!1;if(!t)return!0;var o=t.downlink,i=t.rtt;switch(t.effectiveType){case"slow-2g":case"2g":return!1;case"3g":return!!(o&&n&&r)&&8*n/(1e3*o)+i<r;default:return!0}},getMessage:function(e,t){switch(e){case s.icons.noicon:case s.icons.loaded:return null;case s.icons.loading:return"Loading...";case s.icons.load:var n=t.pickedSrc.size;return n?["Click to load (",r.default.createElement("nobr",{key:"nb"},(0,c.bytesToSize)(n)),")"]:"Click to load";case s.icons.offline:return"Your browser is offline. Image not loaded";case s.icons.error:return 404===t.loadInfo?"404. Image not found":"Error. Click to reload";default:throw new Error("Wrong icon: "+e)}},getIcon:function(e){var t=e.loadState,n=e.onLine,r=e.overThreshold,o=e.userTriggered;if(c.ssr)return s.icons.noicon;switch(t){case y:return s.icons.loaded;case m:return r?s.icons.loading:s.icons.noicon;case b:if(n){var i=e.shouldAutoDownload;return void 0===i?s.icons.noicon:o||!i?s.icons.load:s.icons.noicon}return s.icons.offline;case O:return n?s.icons.error:s.icons.offline;default:throw new Error("Wrong state: "+t)}},loader:"xhr"})},54650:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=s(n(27378)),o=s(n(34013)),i=s(n(35126)),a=s(n(36832));function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=function(e){return r.default.createElement(o.default,e)};f.defaultProps=c(c({},o.default.defaultProps),{},{icons:i.default,theme:a.default}),f.propTypes=o.default.propTypes;var d=f;t.default=d},75210:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}r.default=e,n&&n.set(e,r);return r}(n(27378)),o=s(n(23615)),i=s(n(51202)),a=n(37206);function s(e){return e&&e.__esModule?e:{default:e}}function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(this,arguments)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function f(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=a.icons.load,p=a.icons.loading,h=a.icons.loaded,v=a.icons.error,w=a.icons.noicon,g=a.icons.offline,b=function(e){var t,n;function o(t){var n;return(n=e.call(this,t)||this).state={isMounted:!1},n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n);var a=o.prototype;return a.componentDidMount=function(){this.setState({isMounted:!0}),this.props.onDimensions&&this.dimensionElement&&this.props.onDimensions({width:this.dimensionElement.clientWidth||this.dimensionElement.parentNode.clientWidth,height:this.dimensionElement.clientHeight||this.dimensionElement.parentNode.clientHeight})},a.renderIcon=function(e){var t=e.icon,n=e.icons,o=e.iconColor,a=e.iconSize,s=e.theme,l=n[t];if(!l)return null;var c=(0,i.default)({width:a+100,height:a,color:o},s.icon);return r.default.createElement("div",c,[r.default.createElement(l,{fill:o,size:a,key:"icon"}),r.default.createElement("br",{key:"br"}),this.props.message])},a.renderImage=function(e){var t=this;return e.icon===h?r.default.createElement("img",c({},(0,i.default)(e.theme.img),{src:e.src,alt:e.alt,width:e.width,height:e.height})):r.default.createElement("svg",c({},(0,i.default)(e.theme.img),{width:e.width,height:e.height,ref:function(e){return t.dimensionElement=e}}))},a.renderNoscript=function(e){return this.state.isMounted?null:r.default.createElement("noscript",null,r.default.createElement("img",c({},(0,i.default)(e.theme.img,e.theme.noscript),{src:e.nsSrc,srcSet:e.nsSrcSet,alt:e.alt,width:e.width,height:e.height})))},a.render=function(){var e,t=this.props,n=t.placeholder,o=t.theme;return e=t.icon===h?{}:n.lqip?{backgroundImage:'url("'+n.lqip+'")'}:{backgroundColor:n.color},r.default.createElement("div",c({},(0,i.default)(o.placeholder,e,t.style,t.className),{onClick:this.props.onClick,onKeyPress:this.props.onClick,ref:this.props.innerRef}),this.renderImage(t),this.renderNoscript(t),this.renderIcon(t))},o}(r.PureComponent);t.default=b,f(b,"propTypes",{src:o.default.string.isRequired,width:o.default.number.isRequired,height:o.default.number.isRequired,placeholder:o.default.oneOfType([o.default.shape({color:o.default.string.isRequired}),o.default.shape({lqip:o.default.string.isRequired})]).isRequired,icon:o.default.oneOf([d,p,h,v,w,g]).isRequired,icons:o.default.object.isRequired,theme:o.default.object.isRequired,alt:o.default.string,iconColor:o.default.string,iconSize:o.default.number,style:o.default.object,className:o.default.string,onClick:o.default.func,onDimensions:o.default.func,message:o.default.node,innerRef:o.default.func,nsSrc:o.default.string,nsSrcSet:o.default.string}),f(b,"defaultProps",{iconColor:"#fff",iconSize:64})},51202:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(){for(var e,t=[],n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];for(var i=0,a=r;i<a.length;i++){var s=a[i];if(s instanceof Object)Object.assign(e||(e={}),s);else if(void 0===s||!1===s);else{if("string"!=typeof s)throw new Error("Unexpected value "+s);t.push(s)}}return{className:t.length>1?t.join(" "):t[0],style:e}}},37206:(e,t)=>{t.__esModule=!0,t.loadStates=t.icons=void 0;var n="loading",r="loaded",o="error",i={load:"load",loading:n,loaded:r,error:o,noicon:"noicon",offline:"offline"};t.icons=i;var a={initial:"initial",loading:n,loaded:r,error:o};t.loadStates=a},48795:(e,t)=>{t.__esModule=!0,t.supportsWebp=t.ssr=t.selectSrc=t.nativeConnection=t.guessMaxImageWidth=t.fallbackParams=t.bytesToSize=void 0;var n="undefined"==typeof window||"ReactSnap"===window.navigator.userAgent;t.ssr=n;var r=!n&&!!window.navigator.connection;t.nativeConnection=r;t.guessMaxImageWidth=function(e,t){if(n)return 0;t||(t=window);var r,o=e.width,i=t.screen,a=i.width,s=i.height,l=document.documentElement,c=t.innerWidth||l.clientWidth,u=t.innerHeight||l.clientHeight,f=t.devicePixelRatio||1;if(a>c){var d=document.getElementsByTagName("body")[0],p=c-o;r=(d.clientHeight>u||d.clientHeight>s)&&p<=15?a-p:o/c*a}else r=o;return r*f};t.bytesToSize=function(e){var t=["Bytes","KB","MB","GB","TB"];if(0===e)return"n/a";var n=parseInt(Math.floor(Math.log(e)/Math.log(1024)),10);return 0===n?e+" "+t[n]:(e/Math.pow(1024,n)).toFixed(1)+" "+t[n]};var o=function(){if(n)return!1;var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))&&0===e.toDataURL("image/webp").indexOf("data:image/webp")}();t.supportsWebp=o;var i=function(e){return"webp"===e.format||e.src&&e.src.match(/\.webp($|\?.*)/i)};t.selectSrc=function(e){var t,n,r=e.srcSet,o=e.maxImageWidth,a=e.supportsWebp;if(0===r.length)throw new Error("Need at least one item in srcSet");if(a)0===(t=r.filter(i)).length&&(t=r);else if(0===(t=r.filter((function(e){return!i(e)}))).length)throw new Error("Need at least one supported format item in srcSet");var s=t.filter((function(e){return e.width>=o}));return 0===s.length?(s=t,n=Math.max.apply(null,s.map((function(e){return e.width})))):n=Math.min.apply(null,s.map((function(e){return e.width}))),t.filter((function(e){return e.width===n}))[0]};t.fallbackParams=function(e){var t=e.srcSet,r=e.getUrl;if(!n)return{};var o=t.filter((function(e){return!i(e)})),a=o[0];return{nsSrcSet:o.map((function(e){return(r?r(e):e.src)+" "+e.width+"w"})).join(","),nsSrc:r?r(a):a.src,ssr:n}}},35126:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r,o=c(n(12806)),i=c(n(59349)),a=c(n(57949)),s=c(n(90418)),l=n(37206);function c(e){return e&&e.__esModule?e:{default:e}}var u=l.icons.load,f=l.icons.loading,d=l.icons.loaded,p=l.icons.error,h=l.icons.noicon,v=l.icons.offline,w=((r={})[u]=o.default,r[f]=s.default,r[d]=null,r[p]=a.default,r[h]=null,r[v]=i.default,r);t.default=w},9376:(e,t,n)=>{t.__esModule=!0,t.xhrLoader=t.timeout=t.imageLoader=t.combineCancel=void 0;var r=n(12025);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.combineCancel=function(e,t){if(!t)return e;var n=e.then((function(e){return e}),(function(e){return e}));return n.cancel=function(){e.cancel(),t.cancel()},n};t.timeout=function(e){var t,n=new Promise((function(n){t=setTimeout(n,e)}));return n.cancel=function(){clearTimeout(t),t=void 0},n};var s=function(e){var t=new Image,n=new Promise((function(n,r){t.onload=n,t.onabort=t.onerror=function(){return r({})},t.src=e}));return n.cancel=function(){if(!t)throw new Error("Already canceled");t.onload=t.onabort=t.onerror=void 0,t.src="",t=void 0},n};t.imageLoader=s;t.xhrLoader=function(e,t){var n=new r.UnfetchAbortController,o=n.signal,a=new Promise((function(n,a){return(0,r.unfetch)(e,i(i({},t),{},{signal:o})).then((function(t){t.ok?t.blob().then((function(){return s(e)})).then(n):a({status:t.status})}),a)}));return a.cancel=function(){if(!n)throw new Error("Already canceled");n.abort(),n=void 0},a}},36832:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default={placeholder:{backgroundSize:"cover",backgroundRepeat:"no-repeat",position:"relative"},img:{width:"100%",height:"auto",maxWidth:"100%",marginBottom:"-4px"},icon:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"},noscript:{position:"absolute",top:0,left:0}}},12025:(e,t)=>{t.__esModule=!0,t.unfetch=t.UnfetchAbortController=void 0;t.UnfetchAbortController=function(){var e=this;this.signal={onabort:function(){}},this.abort=function(){return e.signal.onabort()}};t.unfetch=function(e,t){return t=t||{},new Promise((function(n,r){var o=new XMLHttpRequest;for(var i in o.open(t.method||"get",e,!0),t.headers)o.setRequestHeader(i,t.headers[i]);function a(){var e,t=[],n=[],r={};return o.getAllResponseHeaders().replace(/^(.*?):\s*?([\s\S]*?)$/gm,(function(o,i,a){t.push(i=i.toLowerCase()),n.push([i,a]),e=r[i],r[i]=e?e+","+a:a})),{ok:2==(o.status/100|0),status:o.status,statusText:o.statusText,url:o.responseURL,clone:a,text:function(){return Promise.resolve(o.responseText)},json:function(){return Promise.resolve(o.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([o.response]))},headers:{keys:function(){return t},entries:function(){return n},get:function(e){return r[e.toLowerCase()]},has:function(e){return e.toLowerCase()in r}}}}o.withCredentials="include"===t.credentials,o.onload=function(){n(a())},o.onerror=r,t.signal&&(t.signal.onabort=function(){o.onerror=o.onload=void 0,o.abort()}),o.send(t.body)}))}},66222:(e,t,n)=>{var r;t.Z=void 0;var o=((r=n(54650))&&r.__esModule?r:{default:r}).default;t.Z=o},58702:(e,t)=>{var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),w=Symbol.for("react.offscreen");function g(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case i:case s:case a:case d:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case f:case v:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.isForwardRef=function(e){return g(e)===f}},19185:(e,t,n)=>{e.exports=n(58702)},2814:(e,t,n)=>{n.r(t),n.d(t,{Waypoint:()=>j});var r=n(40351),o=!("undefined"==typeof window||!window.document||!window.document.createElement);var i=void 0;function a(){return void 0===i&&(i=function(){if(!o)return!1;if(!window.addEventListener||!window.removeEventListener||!Object.defineProperty)return!1;var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t)}catch(r){}return e}()),i}function s(e){e.handlers===e.nextHandlers&&(e.nextHandlers=e.handlers.slice())}function l(e){this.target=e,this.events={}}l.prototype.getEventHandlers=function(e,t){var n,r=String(e)+" "+String((n=t)?!0===n?100:(n.capture<<0)+(n.passive<<1)+(n.once<<2):0);return this.events[r]||(this.events[r]={handlers:[],handleEvent:void 0},this.events[r].nextHandlers=this.events[r].handlers),this.events[r]},l.prototype.handleEvent=function(e,t,n){var r=this.getEventHandlers(e,t);r.handlers=r.nextHandlers,r.handlers.forEach((function(e){e&&e(n)}))},l.prototype.add=function(e,t,n){var r=this,o=this.getEventHandlers(e,n);s(o),0===o.nextHandlers.length&&(o.handleEvent=this.handleEvent.bind(this,e,n),this.target.addEventListener(e,o.handleEvent,n)),o.nextHandlers.push(t);var i=!0;return function(){if(i){i=!1,s(o);var a=o.nextHandlers.indexOf(t);o.nextHandlers.splice(a,1),0===o.nextHandlers.length&&(r.target&&r.target.removeEventListener(e,o.handleEvent,n),o.handleEvent=void 0)}}};var c="__consolidated_events_handlers__";function u(e,t,n,r){e[c]||(e[c]=new l(e));var o=function(e){if(e)return a()?e:!!e.capture}(r);return e[c].add(t,n,o)}var f=n(27378),d=n(19185);function p(e,t){var n,r=(n=e,!isNaN(parseFloat(n))&&isFinite(n)?parseFloat(n):"px"===n.slice(-2)?parseFloat(n.slice(0,-2)):void 0);if("number"==typeof r)return r;var o=function(e){if("%"===e.slice(-1))return parseFloat(e.slice(0,-1))/100}(e);return"number"==typeof o?o*t:void 0}var h="above",v="inside",w="below",g="invisible";function b(e){return"string"==typeof e.type}var m;var y=[];function O(e){y.push(e),m||(m=setTimeout((function(){var e;for(m=null;e=y.shift();)e()}),0));var t=!0;return function(){if(t){t=!1;var n=y.indexOf(e);-1!==n&&(y.splice(n,1),!y.length&&m&&(clearTimeout(m),m=null))}}}var S="undefined"!=typeof window,E={debug:!1,scrollableAncestor:void 0,children:void 0,topOffset:"0px",bottomOffset:"0px",horizontal:!1,onEnter:function(){},onLeave:function(){},onPositionChange:function(){},fireOnRapidScroll:!0},j=function(e){function t(t){var n;return(n=e.call(this,t)||this).refElement=function(e){n._ref=e},n}(0,r.Z)(t,e);var o=t.prototype;return o.componentDidMount=function(){var e=this;S&&(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null;var t=e.props,n=t.children;t.debug;!function(e,t){if(e&&!b(e)&&!t)throw new Error("<Waypoint> needs a DOM element to compute boundaries. The child you passed is neither a DOM element (e.g. <div>) nor does it use the innerRef prop.\n\nSee https://goo.gl/LrBNgw for more info.")}(n,e._ref),e._handleScroll=e._handleScroll.bind(e),e.scrollableAncestor=e._findScrollableAncestor(),e.scrollEventListenerUnsubscribe=u(e.scrollableAncestor,"scroll",e._handleScroll,{passive:!0}),e.resizeEventListenerUnsubscribe=u(window,"resize",e._handleScroll,{passive:!0}),e._handleScroll(null)})))},o.componentDidUpdate=function(){var e=this;S&&this.scrollableAncestor&&(this.cancelOnNextTick||(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null,e._handleScroll(null)}))))},o.componentWillUnmount=function(){S&&(this.scrollEventListenerUnsubscribe&&this.scrollEventListenerUnsubscribe(),this.resizeEventListenerUnsubscribe&&this.resizeEventListenerUnsubscribe(),this.cancelOnNextTick&&this.cancelOnNextTick())},o._findScrollableAncestor=function(){var e=this.props,t=e.horizontal,r=e.scrollableAncestor;if(r)return function(e){return"window"===e?n.g.window:e}(r);for(var o=this._ref;o.parentNode;){if((o=o.parentNode)===document.body)return window;var i=window.getComputedStyle(o),a=(t?i.getPropertyValue("overflow-x"):i.getPropertyValue("overflow-y"))||i.getPropertyValue("overflow");if("auto"===a||"scroll"===a||"overlay"===a)return o}return window},o._handleScroll=function(e){if(this._ref){var t=this._getBounds(),n=function(e){return e.viewportBottom-e.viewportTop==0?g:e.viewportTop<=e.waypointTop&&e.waypointTop<=e.viewportBottom||e.viewportTop<=e.waypointBottom&&e.waypointBottom<=e.viewportBottom||e.waypointTop<=e.viewportTop&&e.viewportBottom<=e.waypointBottom?v:e.viewportBottom<e.waypointTop?w:e.waypointTop<e.viewportTop?h:g}(t),r=this._previousPosition,o=this.props,i=(o.debug,o.onPositionChange),a=o.onEnter,s=o.onLeave,l=o.fireOnRapidScroll;if(this._previousPosition=n,r!==n){var c={currentPosition:n,previousPosition:r,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom};i.call(this,c),n===v?a.call(this,c):r===v&&s.call(this,c),l&&(r===w&&n===h||r===h&&n===w)&&(a.call(this,{currentPosition:v,previousPosition:r,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}),s.call(this,{currentPosition:n,previousPosition:v,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}))}}},o._getBounds=function(){var e,t,n=this.props,r=n.horizontal,o=(n.debug,this._ref.getBoundingClientRect()),i=o.left,a=o.top,s=o.right,l=o.bottom,c=r?i:a,u=r?s:l;this.scrollableAncestor===window?(e=r?window.innerWidth:window.innerHeight,t=0):(e=r?this.scrollableAncestor.offsetWidth:this.scrollableAncestor.offsetHeight,t=r?this.scrollableAncestor.getBoundingClientRect().left:this.scrollableAncestor.getBoundingClientRect().top);var f=this.props,d=f.bottomOffset;return{waypointTop:c,waypointBottom:u,viewportTop:t+p(f.topOffset,e),viewportBottom:t+e-p(d,e)}},o.render=function(){var e=this,t=this.props.children;if(!t)return f.createElement("span",{ref:this.refElement,style:{fontSize:0}});if(b(t)||(0,d.isForwardRef)(t)){return f.cloneElement(t,{ref:function(n){e.refElement(n),t.ref&&("function"==typeof t.ref?t.ref(n):t.ref.current=n)}})}return f.cloneElement(t,{innerRef:this.refElement})},t}(f.PureComponent);j.above=h,j.below=w,j.inside=v,j.invisible=g,j.defaultProps=E,j.displayName="Waypoint"}}]); \ No newline at end of file diff --git a/assets/js/66222.4426cbe9.js.LICENSE.txt b/assets/js/66222.4426cbe9.js.LICENSE.txt new file mode 100644 index 0000000000..53dcf70ce5 --- /dev/null +++ b/assets/js/66222.4426cbe9.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/66406991.d57c65e2.js b/assets/js/66406991.d57c65e2.js deleted file mode 100644 index ec7800522a..0000000000 --- a/assets/js/66406991.d57c65e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[4374],{576:s=>{s.exports=JSON.parse('{"permalink":"/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66664890.75612012.js b/assets/js/66664890.75612012.js new file mode 100644 index 0000000000..4f27ddb836 --- /dev/null +++ b/assets/js/66664890.75612012.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[98294],{76393:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var a=n(24246),o=n(71670);const s={mdx:{format:"md"},date:"2021-12-10T20:00"},r="2.0.0-beta.13",c={permalink:"/changelog/2.0.0-beta.13",source:"@site/changelog/source/2.0.0-beta.13.md",title:"2.0.0-beta.13",description:"Good npm publish, same code as beta.11",date:"2021-12-10T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2021-12-10T20:00"},unlisted:!1,prevItem:{title:"2.0.0-beta.14",permalink:"/changelog/2.0.0-beta.14"},nextItem:{title:"2.0.0-beta.12",permalink:"/changelog/2.0.0-beta.12"},listPageLink:"/changelog/page/2"},i={authorsImageUrls:[]},u=[];function l(e){const t={p:"p",...(0,o.a)(),...e.components};return(0,a.jsx)(t.p,{children:"Good npm publish, same code as beta.11"})}function m(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var a=n(27378);const o={},s=a.createContext(o);function r(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/666c1406.959d8656.js b/assets/js/666c1406.959d8656.js new file mode 100644 index 0000000000..2576e43c0b --- /dev/null +++ b/assets/js/666c1406.959d8656.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36610],{19581:(a,t,i)=>{i.r(t),i.d(t,{assets:()=>m,contentTitle:()=>h,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>o});var n=i(24246),e=i(71670);const r={mdx:{format:"md"},date:"2020-10-19T20:00",authors:["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},h="2.0.0-alpha.66",s={permalink:"/changelog/2.0.0-alpha.66",source:"@site/changelog/source/2.0.0-alpha.66.md",title:"2.0.0-alpha.66",description:"New Feature",date:"2020-10-19T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"aakhtar3",alias:"aakhtar3",url:"https://github.com/aakhtar3",imageURL:"https://github.com/aakhtar3.png",key:"aakhtar3"},{name:"Abhishek Tiwari",alias:"abhishektiwari",url:"https://github.com/abhishektiwari",imageURL:"https://github.com/abhishektiwari.png",key:"abhishektiwari"},{name:"Christian Bromann",alias:"christian-bromann",url:"https://github.com/christian-bromann",imageURL:"https://github.com/christian-bromann.png",key:"christian-bromann"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"Hamza Hamidi",alias:"hamzahamidi",url:"https://github.com/hamzahamidi",imageURL:"https://github.com/hamzahamidi.png",key:"hamzahamidi"},{name:"honlyHuang",alias:"honlyHuang",url:"https://github.com/honlyHuang",imageURL:"https://github.com/honlyHuang.png",key:"honlyHuang"},{name:"Shubham Kumar",alias:"imskr",url:"https://github.com/imskr",imageURL:"https://github.com/imskr.png",key:"imskr"},{name:"John Gracey",alias:"jagracey",url:"https://github.com/jagracey",imageURL:"https://github.com/jagracey.png",key:"jagracey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Matan Borenkraout",alias:"MatanBobi",url:"https://github.com/MatanBobi",imageURL:"https://github.com/MatanBobi.png",key:"MatanBobi"},{name:"Russ Taylor",alias:"russtaylor",url:"https://github.com/russtaylor",imageURL:"https://github.com/russtaylor.png",key:"russtaylor"},{name:"SaintMalik",alias:"saintmalik",url:"https://github.com/saintmalik",imageURL:"https://github.com/saintmalik.png",key:"saintmalik"},{name:"Shubham Zanwar",alias:"shubhamzanwar",url:"https://github.com/shubhamzanwar",imageURL:"https://github.com/shubhamzanwar.png",key:"shubhamzanwar"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Umair Kamran",alias:"UmairKamran",url:"https://github.com/UmairKamran",imageURL:"https://github.com/UmairKamran.png",key:"UmairKamran"},{name:"Utkarsh Goel",alias:"utkarsh867",url:"https://github.com/utkarsh867",imageURL:"https://github.com/utkarsh867.png",key:"utkarsh867"}],frontMatter:{mdx:{format:"md"},date:"2020-10-19T20:00",authors:["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.67",permalink:"/changelog/2.0.0-alpha.67"},nextItem:{title:"2.0.0-alpha.65",permalink:"/changelog/2.0.0-alpha.65"},listPageLink:"/changelog/page/3"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[];function u(a){return(0,n.jsx)(n.Fragment,{})}function l(a={}){const{wrapper:t}={...(0,e.a)(),...a.components};return t?(0,n.jsx)(t,{...a,children:(0,n.jsx)(u,{...a})}):u()}},71670:(a,t,i)=>{i.d(t,{Z:()=>s,a:()=>h});var n=i(27378);const e={},r=n.createContext(e);function h(a){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof a?a(t):{...t,...a}}),[t,a])}function s(a){let t;return t=a.disableParentContext?"function"==typeof a.components?a.components(e):a.components||e:h(a.components),n.createElement(r.Provider,{value:t},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/66850.b413fb56.js b/assets/js/66850.b413fb56.js new file mode 100644 index 0000000000..8d50cde767 --- /dev/null +++ b/assets/js/66850.b413fb56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66850],{66850:(t,n,e)=>{e.d(n,{diagram:()=>H});var i=e(99854),s=e(63294);function r(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function o(t){return t.target.depth}function l(t,n){return t.sourceLinks.length?t.depth:n-1}function c(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e<i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e<s||void 0===e&&s>=s)&&(e=s)}return e}function a(t){return function(){return t}}function u(t,n){return y(t.source,n.source)||t.index-n.index}function f(t,n){return y(t.target,n.target)||t.index-n.index}function y(t,n){return t.y0-n.y0}function d(t){return t.value}function p(t){return t.index}function g(t){return t.nodes}function _(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function k({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function m(){let t,n,e,i=0,s=0,o=1,m=1,v=24,b=8,w=p,E=l,L=g,A=_,S=6;function M(){const l={nodes:L.apply(null,arguments),links:A.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map(((n,e)=>[w(n,e,t),n])));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(l),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(c(n.sourceLinks,d),c(n.targetLinks,d)):n.fixedValue}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function(e){const l=function({nodes:t}){const e=h(t,(t=>t.depth))+1,s=(o-i-v)/(e-1),r=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(E.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,r[t]?r[t].push(n):r[t]=[n]}if(n)for(const i of r)i.sort(n);return r}(e);t=Math.min(b,(m-s)/(h(l,(t=>t.length))-1)),function(n){const e=r(n,(n=>(m-s-(n.length-1)*t)/c(n,d)));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(m-n+t)/(i.length+1);for(let t=0;t<i.length;++t){const e=i[t];e.y0+=n*(t+1),e.y1+=n*(t+1)}N(i)}}(l);for(let t=0;t<S;++t){const n=Math.pow(.99,t),e=Math.max(1-n,(t+1)/S);T(l,n,e),I(l,n,e)}}(l),k(l),l}function I(t,e,i){for(let s=1,r=t.length;s<r;++s){const r=t[s];for(const t of r){let n=0,i=0;for(const{source:e,value:r}of t.targetLinks){let s=r*(t.layer-e.layer);n+=$(e,t)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function T(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=j(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function O(n,e){const i=n.length>>1,r=n[i];C(n,r.y0-t,i-1,e),P(n,r.y1+t,i+1,e),C(n,m,n.length-1,e),P(n,s,0,e)}function P(n,e,i,s){for(;i<n.length;++i){const r=n[i],o=(e-r.y0)*s;o>1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function C(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function D({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(f);for(const{target:{targetLinks:n}}of t)n.sort(u)}}function N(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(f),e.sort(u)}function $(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function j(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return M.update=function(t){return k(t),t},M.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:a(t),M):w},M.nodeAlign=function(t){return arguments.length?(E="function"==typeof t?t:a(t),M):E},M.nodeSort=function(t){return arguments.length?(n=t,M):n},M.nodeWidth=function(t){return arguments.length?(v=+t,M):v},M.nodePadding=function(n){return arguments.length?(b=t=+n,M):b},M.nodes=function(t){return arguments.length?(L="function"==typeof t?t:a(t),M):L},M.links=function(t){return arguments.length?(A="function"==typeof t?t:a(t),M):A},M.linkSort=function(t){return arguments.length?(e=t,M):e},M.size=function(t){return arguments.length?(i=s=0,o=+t[0],m=+t[1],M):[o-i,m-s]},M.extent=function(t){return arguments.length?(i=+t[0][0],o=+t[1][0],s=+t[0][1],m=+t[1][1],M):[[i,s],[o,m]]},M.iterations=function(t){return arguments.length?(S=+t,M):S},M}var v=Math.PI,b=2*v,w=1e-6,E=b-w;function L(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A(){return new L}L.prototype=A.prototype={constructor:L,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,l=e-t,c=i-n,h=r-t,a=o-n,u=h*h+a*a;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>w)if(Math.abs(a*l-c*h)>w&&s){var f=e-r,y=i-o,d=l*l+c*c,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),x=s*Math.tan((v-Math.acos((d+u-p)/(2*g*_)))/2),k=x/_,m=x/g;Math.abs(k-1)>w&&(this._+="L"+(t+k*h)+","+(n+k*a)),this._+="A"+s+","+s+",0,0,"+ +(a*f>h*y)+","+(this._x1=t+m*l)+","+(this._y1=n+m*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),l=e*Math.sin(i),c=t+o,h=n+l,a=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+h:(Math.abs(this._x1-c)>w||Math.abs(this._y1-h)>w)&&(this._+="L"+c+","+h),e&&(u<0&&(u=u%b+b),u>E?this._+="A"+e+","+e+",0,1,"+a+","+(t-o)+","+(n-l)+"A"+e+","+e+",0,1,"+a+","+(this._x1=c)+","+(this._y1=h):u>w&&(this._+="A"+e+","+e+",0,"+ +(u>=v)+","+a+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const S=A;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function O(t){return t[1]}function P(t){return t.source}function C(t){return t.target}function D(t){var n=P,e=C,i=T,s=O,r=null;function o(){var o,l=M.call(arguments),c=n.apply(this,l),h=e.apply(this,l);if(r||(r=o=S()),t(r,+i.apply(this,(l[0]=c,l)),+s.apply(this,l),+i.apply(this,(l[0]=h,l)),+s.apply(this,l)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function N(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return D(N).source($).target(j)}e(27693),e(7608),e(31699);var Y=function(){var t=function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},n=[1,9],e=[1,10],i=[1,5,10,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(t,n,e,i,s,r,o){var l=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[l-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[l-2].trim().replaceAll('""','"')),e=parseFloat(r[l].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[l];break;case 10:this.$=r[l-1]}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},parse:function(t){var n=this,e=[0],i=[],s=[null],r=[],o=this.table,l="",c=0,h=0,a=r.slice.call(arguments,1),u=Object.create(this.lexer),f={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(f.yy[y]=this.yy[y]);u.setInput(t,f.yy),f.yy.lexer=u,f.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var p=u.options&&u.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,k,m,v,b,w,E,L={};;){if(_=e[e.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(E=void 0,"number"!=typeof(E=i.pop()||u.lex()||1)&&(E instanceof Array&&(E=(i=E).pop()),E=n.symbols_[E]||E),g=E),x=o[_]&&o[_][g]),void 0===x||!x.length||!x[0]){var A="";for(m in w=[],o[_])this.terminals_[m]&&m>2&&w.push("'"+this.terminals_[m]+"'");A=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:w})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+g);switch(x[0]){case 1:e.push(g),s.push(u.yytext),r.push(u.yylloc),e.push(x[1]),g=null,h=u.yyleng,l=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(v=this.productions_[x[1]][1],L.$=s[s.length-v],L._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},p&&(L._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(L,[l,h,c,f.yy,x[1],s,r].concat(a))))return k;v&&(e=e.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),e.push(this.productions_[x[1]][0]),s.push(L.$),r.push(L._$),b=o[e[e.length-2]][e[e.length-1]],e.push(b);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},setInput:function(t,n){return this.yy=n||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},test_match:function(t,n){var e,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((e=this._input.match(this.rules[s[r]]))&&(!n||e[0].length>n[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(t,n,e,i){switch(e){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function o(){this.yy={}}return s.lexer=r,o.prototype=s,s.Parser=o,new o}();Y.parser=Y;const F=Y;let U=[],W=[],K={};class G{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}}class V{constructor(t){this.ID=t}}const X={nodesMap:K,getConfig:()=>(0,i.c)().sankey,getNodes:()=>W,getLinks:()=>U,getGraph:()=>({nodes:W.map((t=>({id:t.ID}))),links:U.map((t=>({source:t.source.ID,target:t.target.ID,value:t.value})))}),addLink:(t,n,e)=>{U.push(new G(t,n,e))},findOrCreateNode:t=>(t=i.e.sanitizeText(t,(0,i.c)()),K[t]||(K[t]=new V(t),W.push(K[t])),K[t]),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,getDiagramTitle:i.t,setDiagramTitle:i.r,clear:()=>{U=[],W=[],K={},(0,i.v)()}},q=class{static next(t){return new q(t+ ++q.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}};let Q=q;Q.count=0;const B={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?r(t.sourceLinks,o)-1:0},justify:l},R={draw:function(t,n,e,r){const{securityLevel:o,sankey:l}=(0,i.c)(),c=i.K.sankey;let h;"sandbox"===o&&(h=(0,s.Ys)("#i"+n));const a="sandbox"===o?(0,s.Ys)(h.nodes()[0].contentDocument.body):(0,s.Ys)("body"),u="sandbox"===o?a.select(`[id="${n}"]`):(0,s.Ys)(`[id="${n}"]`),f=(null==l?void 0:l.width)??c.width,y=(null==l?void 0:l.height)??c.width,d=(null==l?void 0:l.useMaxWidth)??c.useMaxWidth,p=(null==l?void 0:l.nodeAlignment)??c.nodeAlignment,g=(null==l?void 0:l.prefix)??c.prefix,_=(null==l?void 0:l.suffix)??c.suffix,x=(null==l?void 0:l.showValues)??c.showValues;(0,i.i)(u,y,f,d);const k=r.db.getGraph(),v=B[p];m().nodeId((t=>t.id)).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(v).extent([[0,0],[f,y]])(k);const b=(0,s.PKp)(s.K2I);u.append("g").attr("class","nodes").selectAll(".node").data(k.nodes).join("g").attr("class","node").attr("id",(t=>(t.uid=Q.next("node-")).id)).attr("transform",(function(t){return"translate("+t.x0+","+t.y0+")"})).attr("x",(t=>t.x0)).attr("y",(t=>t.y0)).append("rect").attr("height",(t=>t.y1-t.y0)).attr("width",(t=>t.x1-t.x0)).attr("fill",(t=>b(t.id)));u.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(k.nodes).join("text").attr("x",(t=>t.x0<f/2?t.x1+6:t.x0-6)).attr("y",(t=>(t.y1+t.y0)/2)).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",(t=>t.x0<f/2?"start":"end")).text((({id:t,value:n})=>x?`${t}\n${g}${Math.round(100*n)/100}${_}`:t));const w=u.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(k.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),E=(null==l?void 0:l.linkColor)||"gradient";if("gradient"===E){const t=w.append("linearGradient").attr("id",(t=>(t.uid=Q.next("linearGradient-")).id)).attr("gradientUnits","userSpaceOnUse").attr("x1",(t=>t.source.x1)).attr("x2",(t=>t.target.x0));t.append("stop").attr("offset","0%").attr("stop-color",(t=>b(t.source.id))),t.append("stop").attr("offset","100%").attr("stop-color",(t=>b(t.target.id)))}let L;switch(E){case"gradient":L=t=>t.uid;break;case"source":L=t=>b(t.source.id);break;case"target":L=t=>b(t.target.id);break;default:L=E}w.append("path").attr("d",z()).attr("stroke",L).attr("stroke-width",(t=>Math.max(1,t.width)))}},Z=F.parse.bind(F);F.parse=t=>Z((t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim())(t));const H={parser:F,db:X,renderer:R}}}]); \ No newline at end of file diff --git a/assets/js/66e08b1e.3e187d76.js b/assets/js/66e08b1e.3e187d76.js new file mode 100644 index 0000000000..873f911805 --- /dev/null +++ b/assets/js/66e08b1e.3e187d76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34660],{15829:(t,a,e)=>{e.r(a),e.d(a,{assets:()=>m,contentTitle:()=>i,default:()=>l,frontMatter:()=>n,metadata:()=>r,toc:()=>h});var s=e(24246),o=e(71670);const n={mdx:{format:"md"},date:"2021-07-28T20:00",authors:["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},i="2.0.0-beta.4",r={permalink:"/changelog/2.0.0-beta.4",source:"@site/changelog/source/2.0.0-beta.4.md",title:"2.0.0-beta.4",description:"New Feature",date:"2021-07-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"antonvasilev52",alias:"antonvasilev52",url:"https://github.com/antonvasilev52",imageURL:"https://github.com/antonvasilev52.png",key:"antonvasilev52"},{name:"Arnaud Jeannin",alias:"arnaudjnn",url:"https://github.com/arnaudjnn",imageURL:"https://github.com/arnaudjnn.png",key:"arnaudjnn"},{name:"Christian Flach",alias:"cmfcmf",url:"https://github.com/cmfcmf",imageURL:"https://github.com/cmfcmf.png",key:"cmfcmf"},{name:"Arijit Kundu",alias:"covalentbond",url:"https://github.com/covalentbond",imageURL:"https://github.com/covalentbond.png",key:"covalentbond"},{name:"David Zhao",alias:"davidzhao",url:"https://github.com/davidzhao",imageURL:"https://github.com/davidzhao.png",key:"davidzhao"},{name:"David Barrat",alias:"dbrrt",url:"https://github.com/dbrrt",imageURL:"https://github.com/dbrrt.png",key:"dbrrt"},{name:"Dan Gebhardt",alias:"dgeb",url:"https://github.com/dgeb",imageURL:"https://github.com/dgeb.png",key:"dgeb"},{name:"Fran\xe7ois Massot",alias:"fmassot",url:"https://github.com/fmassot",imageURL:"https://github.com/fmassot.png",key:"fmassot"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Lennart Koopmann",alias:"lennartkoopmann",url:"https://github.com/lennartkoopmann",imageURL:"https://github.com/lennartkoopmann.png",key:"lennartkoopmann"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Lukas Bach",alias:"lukasbach",url:"https://github.com/lukasbach",imageURL:"https://github.com/lukasbach.png",key:"lukasbach"},{name:"Mar\xe7al Junior",alias:"marssaljr",url:"https://github.com/marssaljr",imageURL:"https://github.com/marssaljr.png",key:"marssaljr"},{name:"Massoud Maboudi",alias:"massoudmaboudi",url:"https://github.com/massoudmaboudi",imageURL:"https://github.com/massoudmaboudi.png",key:"massoudmaboudi"},{name:"Michel Weststrate",alias:"mweststrate",url:"https://github.com/mweststrate",imageURL:"https://github.com/mweststrate.png",key:"mweststrate"},{name:"Nazar",alias:"NazarStreletskyi",url:"https://github.com/NazarStreletskyi",imageURL:"https://github.com/NazarStreletskyi.png",key:"NazarStreletskyi"},{name:"nirtamir2",alias:"nirtamir2",url:"https://github.com/nirtamir2",imageURL:"https://github.com/nirtamir2.png",key:"nirtamir2"},{name:"Przemys\u0142aw Chojecki",alias:"pcho",url:"https://github.com/pcho",imageURL:"https://github.com/pcho.png",key:"pcho"},{name:"Philipp Muens",alias:"pmuens",url:"https://github.com/pmuens",imageURL:"https://github.com/pmuens.png",key:"pmuens"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Raz Luvaton",alias:"rluvaton",url:"https://github.com/rluvaton",imageURL:"https://github.com/rluvaton.png",key:"rluvaton"},{name:"Sergio Moreno",alias:"semoal",url:"https://github.com/semoal",imageURL:"https://github.com/semoal.png",key:"semoal"},{name:"Cl\xe9ment Vannicatte",alias:"shortcuts",url:"https://github.com/shortcuts",imageURL:"https://github.com/shortcuts.png",key:"shortcuts"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Taylor Reece",alias:"taylorreece",url:"https://github.com/taylorreece",imageURL:"https://github.com/taylorreece.png",key:"taylorreece"},{name:"tohid nateghi",alias:"tohidnateghi",url:"https://github.com/tohidnateghi",imageURL:"https://github.com/tohidnateghi.png",key:"tohidnateghi"},{name:"\u9648\u6768\u6587",alias:"wenerme",url:"https://github.com/wenerme",imageURL:"https://github.com/wenerme.png",key:"wenerme"}],frontMatter:{mdx:{format:"md"},date:"2021-07-28T20:00",authors:["antonvasilev52","arnaudjnn","cmfcmf","covalentbond","davidzhao","dbrrt","dgeb","fmassot","forresst","Josh-Cena","lennartkoopmann","lex111","lukasbach","marssaljr","massoudmaboudi","mweststrate","NazarStreletskyi","nirtamir2","pcho","pmuens","pranabdas","rluvaton","semoal","shortcuts","slorber","taylorreece","tohidnateghi","wenerme"]},unlisted:!1,prevItem:{title:"2.0.0-beta.5",permalink:"/changelog/2.0.0-beta.5"},nextItem:{title:"2.0.0-beta.3",permalink:"/changelog/2.0.0-beta.3"},listPageLink:"/changelog/page/2"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},h=[];function u(t){return(0,s.jsx)(s.Fragment,{})}function l(t={}){const{wrapper:a}={...(0,o.a)(),...t.components};return a?(0,s.jsx)(a,{...t,children:(0,s.jsx)(u,{...t})}):u()}},71670:(t,a,e)=>{e.d(a,{Z:()=>r,a:()=>i});var s=e(27378);const o={},n=s.createContext(o);function i(t){const a=s.useContext(n);return s.useMemo((function(){return"function"==typeof t?t(a):{...a,...t}}),[a,t])}function r(t){let a;return a=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:i(t.components),s.createElement(n.Provider,{value:a},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/67445aac.49f9b675.js b/assets/js/67445aac.49f9b675.js new file mode 100644 index 0000000000..173324fac2 --- /dev/null +++ b/assets/js/67445aac.49f9b675.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78141],{70278:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>h,default:()=>o,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var i=s(24246),l=s(71670);const t={mdx:{format:"md"},date:"2019-11-22T20:00",authors:["endiliey","lex111","yangshun"]},h="2.0.0-alpha.36",c={permalink:"/changelog/2.0.0-alpha.36",source:"@site/changelog/source/2.0.0-alpha.36.md",title:"2.0.0-alpha.36",description:"Breaking Change",date:"2019-11-22T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2019-11-22T20:00",authors:["endiliey","lex111","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.37",permalink:"/changelog/2.0.0-alpha.37"},nextItem:{title:"2.0.0-alpha.35",permalink:"/changelog/2.0.0-alpha.35"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[void 0,void 0,void 0]},a=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"Committers: 3",id:"committers-3",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus-init"}),", ",(0,i.jsx)(n.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/1989",children:"#1989"})," misc(v2): change blog front matter to snake_case (",(0,i.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2012",children:"#2012"})," feat(v2): allow hiding docs table of contents (",(0,i.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2007",children:"#2007"})," feat(v2): only create one css file to avoid code-split css loading problem (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2005",children:"#2005"})," fix(v2): adjust first-level heading offset (",(0,i.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2013",children:"#2013"})," refactor(v2): split out dark mode toggle so it is easily swizzle-able (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2017",children:"#2017"})," feat(v2): style right sidebar scrollbar when overflow (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2003",children:"#2003"})," refactor(v2): improve semantic markup of blog (",(0,i.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2024",children:"#2024"})," test(v2): babel exclude transpilation logic to prevent regression (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2014",children:"#2014"})," feat(v2): add meta generator docusaurus (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(n.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2015",children:"#2015"})," chore(v2): bump & remove unused deps (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Other\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2009",children:"#2009"})," misc(v2): branding update (",(0,i.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2010",children:"#2010"})," docs(v2): misc updates (",(0,i.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"committers-3",children:"Committers: 3"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Endi (",(0,i.jsx)(n.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Yangshun Tay (",(0,i.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]})]})}function o(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>h});var i=s(27378);const l={},t=i.createContext(l);function h(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:h(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6794d4cd.101e96ef.js b/assets/js/6794d4cd.101e96ef.js new file mode 100644 index 0000000000..7cebd801d4 --- /dev/null +++ b/assets/js/6794d4cd.101e96ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63102],{93127:(e,s,n)=>{n.d(s,{Z:()=>r});var t=n(24246),a=(n(27378),n(97134)),i=n(41428);const c={container:"container_tECh",nav:"nav_sWk6",navlink:"navlink__gTJ",active:"active_Uuwz"};function l({to:e,children:s}){return(0,t.jsx)(i.Z,{className:c.navlink,isNavLink:!0,to:e,exact:!0,activeStyle:{backgroundColor:"#363739"},children:s})}function r({children:e}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(a.Z,{children:[(0,t.jsx)("html",{lang:"en"}),(0,t.jsx)("title",{children:"Docusaurus debug panel"}),(0,t.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("nav",{className:c.nav,children:[(0,t.jsx)(l,{to:"/__docusaurus/debug",children:"Config"}),(0,t.jsx)(l,{to:"/__docusaurus/debug/metadata",children:"Metadata"}),(0,t.jsx)(l,{to:"/__docusaurus/debug/registry",children:"Registry"}),(0,t.jsx)(l,{to:"/__docusaurus/debug/routes",children:"Routes"}),(0,t.jsx)(l,{to:"/__docusaurus/debug/content",children:"Content"}),(0,t.jsx)(l,{to:"/__docusaurus/debug/globalData",children:"Global data"})]}),(0,t.jsx)("main",{className:c.container,children:e})]})]})}},81324:(e,s,n)=>{n.r(s),n.d(s,{default:()=>l});var t=n(24246),a=(n(27378),n(66696)),i=n(93127);const c={listItem:"listItem_lSSi"};function l(){return(0,t.jsxs)(i.Z,{children:[(0,t.jsx)("h2",{children:"Registry"}),(0,t.jsx)("ul",{className:"clean-list",children:Object.values(a.Z).map((([,e,s])=>(0,t.jsxs)("li",{className:c.listItem,children:[(0,t.jsxs)("div",{style:{marginBottom:"10px"},children:["Aliased Path: ",(0,t.jsx)("code",{children:e})]}),(0,t.jsxs)("div",{children:["Resolved Path: ",(0,t.jsx)("code",{children:s})]})]},e)))})]})}}}]); \ No newline at end of file diff --git a/assets/js/67bff682.ac28689d.js b/assets/js/67bff682.ac28689d.js new file mode 100644 index 0000000000..75576dbd66 --- /dev/null +++ b/assets/js/67bff682.ac28689d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76759],{57409:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>h,contentTitle:()=>r,default:()=>u,frontMatter:()=>c,metadata:()=>t,toc:()=>o});var s=n(24246),l=n(71670);const c={mdx:{format:"md"},date:"2019-11-17T20:00",authors:["endiliey","ericcarboni","jamiedavenport","kenning","lex111","vinnytheviking"]},r="2.0.0-alpha.35",t={permalink:"/changelog/2.0.0-alpha.35",source:"@site/changelog/source/2.0.0-alpha.35.md",title:"2.0.0-alpha.35",description:"New Feature",date:"2019-11-17T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"Eric Carboni",alias:"ericcarboni",url:"https://github.com/ericcarboni",imageURL:"https://github.com/ericcarboni.png",key:"ericcarboni"},{name:"Jamie Davenport",alias:"jamiedavenport",url:"https://github.com/jamiedavenport",imageURL:"https://github.com/jamiedavenport.png",key:"jamiedavenport"},{name:"Nick McCormick",alias:"kenning",url:"https://github.com/kenning",imageURL:"https://github.com/kenning.png",key:"kenning"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Vincent van der Walt",alias:"vinnytheviking",url:"https://github.com/vinnytheviking",imageURL:"https://github.com/vinnytheviking.png",key:"vinnytheviking"}],frontMatter:{mdx:{format:"md"},date:"2019-11-17T20:00",authors:["endiliey","ericcarboni","jamiedavenport","kenning","lex111","vinnytheviking"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.36",permalink:"/changelog/2.0.0-alpha.36"},nextItem:{title:"2.0.0-alpha.34",permalink:"/changelog/2.0.0-alpha.34"},listPageLink:"/changelog/page/4"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 6",id:"committers-6",level:2}];function a(e){const i={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1965",children:"#1965"})," feat(v2): add ability specify link in footer logo (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-mdx-loader"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1992",children:"#1992"})," fix(v2): static phrasing content should be rendered correctly in TOC (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1999",children:"#1999"})," fix(v2): remove hashbang when click on category (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1962",children:"#1962"})," fix(v2): make not clickable post title on post item page (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1980",children:"#1980"})," fix(v2): remove invalid label attribute of footer links (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1978",children:"#1978"})," fix(v2): use regular div instead of main tag for wrapper layout page (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1975",children:"#1975"})," fix(v2): move header inside article tag in doc page (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1974",children:"#1974"})," fix(v2): remove invalid attributes of nav links (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1963",children:"#1963"})," fix(v2): remove empty containers when no data in blog pages (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1966",children:"#1966"})," fix(v2): remove duplicate meta tags (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1994",children:"#1994"})," fix(v2): throw error if first level item of a sidebar is not category (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2001",children:"#2001"})," fix(v2): improve UI of search (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1991",children:"#1991"})," fix(v2): remove accessible anchors via keyboard (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1987",children:"#1987"})," refactor(v2): replace h1 tag with h2 in blog list pages (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1981",children:"#1981"})," fix(v2): use tag time for showing last update of doc item (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1977",children:"#1977"})," feat(v2): add aria-label to read more links for a11y (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1964",children:"#1964"})," fix(v2): use tag time for showing post item date (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1994",children:"#1994"})," fix(v2): throw error if first level item of a sidebar is not category (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Other\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1986",children:"#1986"})," fix(v2): remove obsolete iframe attributes (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-init"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1982",children:"#1982"})," feat(v2): add FB link to footer (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1968",children:"#1968"})," refactor(v2): simplify blog truncate function (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Other\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1988",children:"#1988"})," docs(v2): fix syntax highlighting for YML code blocks (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1976",children:"#1976"})," docs(v2): Add section to blog document about feed location (",(0,s.jsx)(i.a,{href:"https://github.com/vinnytheviking",children:"@vinnytheviking"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1970",children:"#1970"})," docs(v2): update configureWebpack utility functions (",(0,s.jsx)(i.a,{href:"https://github.com/jamiedavenport",children:"@jamiedavenport"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-1.x"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1961",children:"#1961"})," docs(v1): remove exclusive language (",(0,s.jsx)(i.a,{href:"https://github.com/ericcarboni",children:"@ericcarboni"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Other\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/2002",children:"#2002"})," fix(v2): fix browser window menu icon on smaller screen (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1986",children:"#1986"})," fix(v2): remove obsolete iframe attributes (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-init"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1982",children:"#1982"})," feat(v2): add FB link to footer (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus-1.x"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-init-1.x"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-init"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,s.jsx)(i.code,{children:"docusaurus-types"}),", ",(0,s.jsx)(i.code,{children:"docusaurus"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1985",children:"#1985"})," chore(v2): update dependencies (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"docusaurus"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/facebook/docusaurus/pull/1979",children:"#1979"})," perf(v2): reduce main bundle size by using es5 if possible (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"committers-6",children:"Committers: 6"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Alexey Pyltsyn (",(0,s.jsx)(i.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Endi (",(0,s.jsx)(i.a,{href:"https://github.com/endiliey",children:"@endiliey"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Eric Carboni (",(0,s.jsx)(i.a,{href:"https://github.com/ericcarboni",children:"@ericcarboni"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Jamie Davenport (",(0,s.jsx)(i.a,{href:"https://github.com/jamiedavenport",children:"@jamiedavenport"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Nick McCormick (",(0,s.jsx)(i.a,{href:"https://github.com/kenning",children:"@kenning"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Vincent van der Walt (",(0,s.jsx)(i.a,{href:"https://github.com/vinnytheviking",children:"@vinnytheviking"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},71670:(e,i,n)=>{n.d(i,{Z:()=>t,a:()=>r});var s=n(27378);const l={},c=s.createContext(l);function r(e){const i=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function t(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(c.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67cff4f8.02ec542b.js b/assets/js/67cff4f8.02ec542b.js new file mode 100644 index 0000000000..04209b1f55 --- /dev/null +++ b/assets/js/67cff4f8.02ec542b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76219],{13645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>d,toc:()=>c});var s=n(24246),o=n(71670);const a={tags:["b",{label:"d",permalink:"d-custom-permalink"}]},r="Standalone doc",d={id:"standalone",title:"Standalone doc",description:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar",source:"@site/_dogfooding/_docs tests/standalone.mdx",sourceDirName:".",slug:"/standalone",permalink:"/tests/docs/standalone",draft:!1,unlisted:!1,tags:[{label:"b",permalink:"/tests/docs/tags/b"},{label:"d",permalink:"/tests/docs/tags/d-custom-permalink"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{tags:["b",{label:"d",permalink:"d-custom-permalink"}]}},i={},c=[];function l(e){const t={h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"standalone-doc",children:"Standalone doc"}),"\n",(0,s.jsx)(t.p,{children:"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar"})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>r});var s=n(27378);const o={},a=s.createContext(o);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67e98d06.4b6323eb.js b/assets/js/67e98d06.4b6323eb.js new file mode 100644 index 0000000000..b8b046d3e6 --- /dev/null +++ b/assets/js/67e98d06.4b6323eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31952],{65833:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/changelog/page/5","page":5,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog/page/4","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.284884b9.js b/assets/js/6875c492.284884b9.js new file mode 100644 index 0000000000..d0403b28f0 --- /dev/null +++ b/assets/js/6875c492.284884b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48610],{35434:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246);r(27378);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function i(e){return(0,n.jsx)("svg",c(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}},77773:(e,t,r)=>{r.d(t,{Z:()=>le});var n=r(24246),o=r(27378);function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function l(e){const{mdxAdmonitionTitle:t,rest:r}=function(e){const t=o.Children.toArray(e),r=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==r));return{mdxAdmonitionTitle:null==r?void 0:r.props.children,rest:c.length>0?(0,n.jsx)(n.Fragment,{children:c}):null}}(e.children);var l;const s=null!==(l=e.title)&&void 0!==l?l:t;return i(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){c(e,t,r[t])}))}return e}({},e,s&&{title:s}),{children:r})}var s=r(40624),a=r(36712),u=r(89583);const b={admonition:"admonition_o5H7",admonitionHeading:"admonitionHeading_FzoX",admonitionIcon:"admonitionIcon_rXq6",admonitionContent:"admonitionContent_Knsx"};function f({type:e,className:t,children:r}){return(0,n.jsx)("div",{className:(0,s.Z)(u.k.common.admonition,u.k.common.admonitionType(e),b.admonition,t),children:r})}function p({icon:e,title:t}){return(0,n.jsxs)("div",{className:b.admonitionHeading,children:[(0,n.jsx)("span",{className:b.admonitionIcon,children:e}),t]})}function d({children:e}){return e?(0,n.jsx)("div",{className:b.admonitionContent,children:e}):null}function O(e){const{type:t,icon:r,title:o,children:c,className:i}=e;return(0,n.jsxs)(f,{type:t,className:i,children:[(0,n.jsx)(p,{title:o,icon:r}),(0,n.jsx)(d,{children:c})]})}function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){return(0,n.jsx)("svg",j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({viewBox:"0 0 14 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const P={icon:(0,n.jsx)(m,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function w(e){return(0,n.jsx)(O,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},P,e),{className:(0,s.Z)("alert alert--secondary",e.className),children:e.children}))}function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function k(e){return(0,n.jsx)("svg",x(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}function S(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function D(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const N={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function E(e){return(0,n.jsx)(O,D(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){S(e,t,r[t])}))}return e}({},N,e),{className:(0,s.Z)("alert alert--success",e.className),children:e.children}))}var Z=r(35434);function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const B={icon:(0,n.jsx)(Z.Z,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function T(e){return(0,n.jsx)(O,_(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}({},B,e),{className:(0,s.Z)("alert alert--info",e.className),children:e.children}))}function L(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function A(e){return(0,n.jsx)("svg",I(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){L(e,t,r[t])}))}return e}({viewBox:"0 0 16 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function U(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const R={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function z(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function H(e){return(0,n.jsx)("svg",z(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){F(e,t,r[t])}))}return e}({viewBox:"0 0 12 16"},e),{children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}function $(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const V={icon:(0,n.jsx)(H,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};function q(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function G(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const Q={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};function X(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){X(e,t,r[t])}))}return e}const Y={note:w,tip:E,info:T,warning:function(e){return(0,n.jsx)(O,U(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){M(e,t,r[t])}))}return e}({},R,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,n.jsx)(O,W(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){$(e,t,r[t])}))}return e}({},V,e),{className:(0,s.Z)("alert alert--danger",e.className),children:e.children}))}},K={secondary:e=>(0,n.jsx)(w,J({title:"secondary"},e)),important:e=>(0,n.jsx)(T,J({title:"important"},e)),success:e=>(0,n.jsx)(E,J({title:"success"},e)),caution:function(e){return(0,n.jsx)(O,G(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){q(e,t,r[t])}))}return e}({},Q,e),{className:(0,s.Z)("alert alert--warning",e.className),children:e.children}))}},ee=J({},Y,K);var te=r(52615);function re(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ne,oe;const ce=(ne=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){re(e,t,r[t])}))}return e}({},ee),oe=null!=(oe={"my-custom-admonition":function(e){return(0,n.jsxs)("div",{style:{border:"solid red",padding:10},children:[(0,n.jsx)(te.Z,{as:"h5",style:{color:"blue",fontSize:30},children:e.title}),(0,n.jsx)("div",{children:e.children})]})}})?oe:{},Object.getOwnPropertyDescriptors?Object.defineProperties(ne,Object.getOwnPropertyDescriptors(oe)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(oe)).forEach((function(e){Object.defineProperty(ne,e,Object.getOwnPropertyDescriptor(oe,e))})),ne);function ie(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function le(e){const t=l(e),r=(o=t.type,ce[o]||(console.warn(`No admonition component found for admonition type "${o}". Using Info as fallback.`),ce.info));var o;return(0,n.jsx)(r,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ie(e,t,r[t])}))}return e}({},t))}},85799:(e,t,r)=>{r.d(t,{Z:()=>w});var n=r(24246),o=r(27378),c=r(40624),i=r(88613),l=r(60029),s=r(41428),a=r(36712),u=r(3620),b=r(39779);function f(e){const{pathname:t}=(0,u.TH)();return(0,o.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,b.Mg)(e.permalink,t))}(e,t)))),[e,t])}const p={sidebar:"sidebar_P3nc",sidebarItemTitle:"sidebarItemTitle_VrjY",sidebarItemList:"sidebarItemList_OSkG",sidebarItem:"sidebarItem_WJ0y",sidebarItemLink:"sidebarItemLink_Qrfg",sidebarItemLinkActive:"sidebarItemLinkActive_nUeK"};function d({sidebar:e}){const t=f(e.items);return(0,n.jsx)("aside",{className:"col col--3",children:(0,n.jsxs)("nav",{className:(0,c.Z)(p.sidebar,"thin-scrollbar"),"aria-label":(0,a.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,n.jsx)("div",{className:(0,c.Z)(p.sidebarItemTitle,"margin-bottom--md"),children:e.title}),(0,n.jsx)("ul",{className:(0,c.Z)(p.sidebarItemList,"clean-list"),children:t.map((e=>(0,n.jsx)("li",{className:p.sidebarItem,children:(0,n.jsx)(s.Z,{isNavLink:!0,to:e.permalink,className:p.sidebarItemLink,activeClassName:p.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var O=r(35612);function y({sidebar:e}){const t=f(e.items);return(0,n.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,n.jsx)("li",{className:"menu__list-item",children:(0,n.jsx)(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,n.jsx)(O.Zo,{component:y,props:e})}function m({sidebar:e}){const t=(0,l.i)();return(null==e?void 0:e.items.length)?"mobile"===t?(0,n.jsx)(j,{sidebar:e}):(0,n.jsx)(d,{sidebar:e}):null}function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w(e){const{sidebar:t,toc:r,children:o}=e,l=P(e,["sidebar","toc","children"]),s=t&&t.items.length>0;return(0,n.jsx)(i.Z,h(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}({},l),{children:(0,n.jsx)("div",{className:"container margin-vert--lg",children:(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)(m,{sidebar:t}),(0,n.jsx)("main",{className:(0,c.Z)("col",{"col--7":s,"col--9 col--offset-1":!s}),children:o}),r&&(0,n.jsx)("div",{className:"col col--2",children:r})]})})}))}},41069:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(36712)),c=r(6649);function i(e){const{metadata:t}=e,{previousPage:r,nextPage:i}=t;return(0,n.jsxs)("nav",{className:"pagination-nav","aria-label":(0,o.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[r&&(0,n.jsx)(c.Z,{permalink:r,title:(0,n.jsx)(o.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),i&&(0,n.jsx)(c.Z,{permalink:i,title:(0,n.jsx)(o.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},53543:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(24246);r(27378);function o({children:e,className:t}){return(0,n.jsx)("article",{className:t,children:e})}},53635:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(86632),i=r(88305),l=r(23387);function s({children:e,className:t}){const{isBlogPostPage:r}=(0,i.C)();return(0,n.jsx)("div",{id:r?c.blogPostContainerID:void 0,className:(0,o.Z)("markdown",t),children:(0,n.jsx)(l.Z,{children:e})})}},71422:(e,t,r)=>{r.d(t,{Z:()=>p});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(7812),l=r(88305),s=r(54461);const a={container:"container_x5Un"};function u({readingTime:e}){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>{const r=Math.ceil(t);return e(r,(0,c.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:r}))}}();return(0,n.jsx)(n.Fragment,{children:t(e)})}function b({date:e,formattedDate:t}){return(0,n.jsx)("time",{dateTime:e,children:t})}function f(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function p({className:e}){const{metadata:t}=(0,l.C)(),{date:r,readingTime:c}=t,i=(0,s.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,o.Z)(a.container,"margin-vert--md",e),children:[(0,n.jsx)(b,{date:r,formattedDate:(p=r,i.format(new Date(p)))}),void 0!==c&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(f,{}),(0,n.jsx)(u,{readingTime:c})]})]});var p}},35253:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(41428),i=r(88305);const l={title:"title_UBNu"};function s({className:e}){const{metadata:t,isBlogPostPage:r}=(0,i.C)(),{permalink:s,title:a}=t,u=r?"h1":"h2";return(0,n.jsx)(u,{className:(0,o.Z)(l.title,e),children:r?a:(0,n.jsx)(c.Z,{to:s,children:a})})}},38495:(e,t,r)=>{r.d(t,{Z:()=>Z});var n=r(24246),o=(r(27378),r(40624)),c=r(88305),i=r(53543),l=r(35253),s=r(71422),a=r(41428);function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){return e.href?(0,n.jsx)(a.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},e)):(0,n.jsx)(n.Fragment,{children:e.children})}function f({author:e,className:t}){const{name:r,title:c,url:i,imageURL:l,email:s}=e,a=i||s&&`mailto:${s}`||void 0;return(0,n.jsxs)("div",{className:(0,o.Z)("avatar margin-bottom--sm",t),children:[l&&(0,n.jsx)(b,{href:a,className:"avatar__photo-link",children:(0,n.jsx)("img",{className:"avatar__photo",src:l,alt:r})}),r&&(0,n.jsxs)("div",{className:"avatar__intro",children:[(0,n.jsx)("div",{className:"avatar__name",children:(0,n.jsx)(b,{href:a,children:(0,n.jsx)("span",{children:r})})}),c&&(0,n.jsx)("small",{className:"avatar__subtitle",children:c})]})]})}const p={authorCol:"authorCol_bvyx",imageOnlyAuthorRow:"imageOnlyAuthorRow_L2DM",imageOnlyAuthorCol:"imageOnlyAuthorCol_oyze"};function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function O(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){d(e,t,r[t])}))}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function j({className:e}){const{metadata:{authors:t},assets:r}=(0,c.C)();if(0===t.length)return null;const i=t.every((({name:e})=>!e));var l;return(0,n.jsx)("div",{className:(0,o.Z)("margin-top--md margin-bottom--sm",i?p.imageOnlyAuthorRow:"row",e),children:t.map(((e,t)=>(0,n.jsx)("div",{className:(0,o.Z)(!i&&"col col--6",i?p.imageOnlyAuthorCol:p.authorCol),children:(0,n.jsx)(f,{author:y(O({},e),{imageURL:null!==(l=r.authorsImageUrls[t])&&void 0!==l?l:e.imageURL})})},t)))})}function m(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(l.Z,{}),(0,n.jsx)(s.Z,{}),(0,n.jsx)(j,{})]})}var g=r(53635),h=r(89583),P=r(71628),w=r(62804),v=r(36712);function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function D(){return(0,n.jsx)("b",{children:(0,n.jsx)(v.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function N(e){const{blogPostTitle:t}=e,r=S(e,["blogPostTitle"]);return(0,n.jsx)(a.Z,k(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({"aria-label":(0,v.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},r),{children:(0,n.jsx)(D,{})}))}function E(){const{metadata:e,isBlogPostPage:t}=(0,c.C)(),{tags:r,title:i,editUrl:l,hasTruncateMarker:s,lastUpdatedBy:a,lastUpdatedAt:u}=e,b=!t&&s,f=r.length>0;if(!(f||b||l))return null;if(t){const e=!!(l||u||a);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[f&&(0,n.jsx)("div",{className:(0,o.Z)("row","margin-top--sm",h.k.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(w.Z,{tags:r})})}),e&&(0,n.jsx)(P.Z,{className:(0,o.Z)("margin-top--sm",h.k.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:u,lastUpdatedBy:a})]})}return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[f&&(0,n.jsx)("div",{className:(0,o.Z)("col",{"col--9":b}),children:(0,n.jsx)(w.Z,{tags:r})}),b&&(0,n.jsx)("div",{className:(0,o.Z)("col text--right",{"col--3":f}),children:(0,n.jsx)(N,{blogPostTitle:i,to:e.permalink})})]})}function Z({children:e,className:t}){const r=function(){const{isBlogPostPage:e}=(0,c.C)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(i.Z,{className:(0,o.Z)(r,t),children:[(0,n.jsx)(m,{}),(0,n.jsx)(g.Z,{children:e}),(0,n.jsx)(E,{})]})}},17277:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(88305)),c=r(38495);function i({items:e,component:t=c.Z}){return(0,n.jsx)(n.Fragment,{children:e.map((({content:e})=>(0,n.jsx)(o.n,{content:e,children:(0,n.jsx)(t,{children:(0,n.jsx)(e,{})})},e.metadata.permalink)))})}},7935:(e,t,r)=>{r.r(t),r.d(t,{default:()=>P});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(7812),l=r(44008),s=r(89583),a=r(41428),u=r(85799),b=r(41069),f=r(10057),p=r(17277),d=r(99272),O=r(52615);function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}function m(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,c.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,c.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function g({tag:e}){const t=m(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.d,{title:t}),(0,n.jsx)(f.Z,{tag:"blog_tags_posts"})]})}function h({tag:e,items:t,sidebar:r,listMetadata:o}){const i=m(e);return(0,n.jsxs)(u.Z,{sidebar:r,children:[e.unlisted&&(0,n.jsx)(d.Z,{}),(0,n.jsxs)("header",{className:"margin-bottom--xl",children:[(0,n.jsx)(O.Z,{as:"h1",children:i}),(0,n.jsx)(a.Z,{href:e.allTagsPath,children:(0,n.jsx)(c.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,n.jsx)(p.Z,{items:t}),(0,n.jsx)(b.Z,{metadata:o})]})}function P(e){return(0,n.jsxs)(l.FG,{className:(0,o.Z)(s.k.wrapper.blogPages,s.k.page.blogTagPostListPage),children:[(0,n.jsx)(g,j({},e)),(0,n.jsx)(h,j({},e))]})}},5254:(e,t,r)=>{r.d(t,{Z:()=>P});var n=r(24246),o=r(27378),c=r(40624),i=r(80474),l=r(29088),s=r(14929);const a={details:"details_Nokh",isBrowser:"isBrowser_QrB5",collapsibleContent:"collapsibleContent_EoA1"};function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e){return!!e&&("SUMMARY"===e.tagName||p(e.parentElement))}function d(e,t){return!!e&&(e===t||d(e.parentElement,t))}function O(e){var{summary:t,children:r}=e,O=f(e,["summary","children"]);(0,i.Z)().collectAnchor(O.id);const y=(0,l.Z)(),j=(0,o.useRef)(null),{collapsed:m,setCollapsed:g}=(0,s.u)({initialState:!O.open}),[h,P]=(0,o.useState)(O.open),w=o.isValidElement(t)?t:(0,n.jsx)("summary",{children:null!=t?t:"Details"});return(0,n.jsxs)("details",b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}({},O),{ref:j,open:h,"data-collapsed":m,className:(0,c.Z)(a.details,y&&a.isBrowser,O.className),onMouseDown:e=>{p(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;p(t)&&d(t,j.current)&&(e.preventDefault(),m?(g(!1),P(!0)):g(!0))},children:[w,(0,n.jsx)(s.z,{lazy:!1,collapsed:m,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{g(e),P(!e)},children:(0,n.jsx)("div",{className:a.collapsibleContent,children:r})})]}))}const y={details:"details_Cn_P"};function j(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},m.apply(this,arguments)}function g(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const h="alert alert--info";function P(e){var t=m({},e);return(0,n.jsx)(O,g(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){j(e,t,r[t])}))}return e}({},t),{className:(0,c.Z)(h,y.details,t.className)}))}},71628:(e,t,r)=>{r.d(t,{Z:()=>g});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(89583),l=r(41428);const s={iconEdit:"iconEdit_IMw_"};function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function b(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function f(e){var{className:t}=e,r=b(e,["className"]);return(0,n.jsx)("svg",u(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,o.Z)(s.iconEdit,t),"aria-hidden":"true"},r),{children:(0,n.jsx)("g",{children:(0,n.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function p({editUrl:e}){return(0,n.jsxs)(l.Z,{to:e,className:i.k.common.editThisPage,children:[(0,n.jsx)(f,{}),(0,n.jsx)(c.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var d=r(54461);function O({lastUpdatedAt:e}){const t=new Date(e),r=(0,d.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,n.jsx)("b",{children:(0,n.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function y({lastUpdatedBy:e}){return(0,n.jsx)(c.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,n.jsx)("b",{children:e})},children:" by {user}"})}function j({lastUpdatedAt:e,lastUpdatedBy:t}){return(0,n.jsxs)("span",{className:i.k.common.lastUpdated,children:[(0,n.jsx)(c.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,n.jsx)(O,{lastUpdatedAt:e}):"",byUser:t?(0,n.jsx)(y,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_OHCJ"};function g({className:e,editUrl:t,lastUpdatedAt:r,lastUpdatedBy:c}){return(0,n.jsxs)("div",{className:(0,o.Z)("row",e),children:[(0,n.jsx)("div",{className:"col",children:t&&(0,n.jsx)(p,{editUrl:t})}),(0,n.jsx)("div",{className:(0,o.Z)("col",m.lastUpdated),children:(r||c)&&(0,n.jsx)(j,{lastUpdatedAt:r,lastUpdatedBy:c})})]})}},23387:(e,t,r)=>{r.d(t,{Z:()=>ne});var n=r(24246),o=r(27378),c=r(71670),i=r(97134),l=r(38112);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){return(0,n.jsx)("code",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){s(e,t,r[t])}))}return e}({},e))}function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){u(e,t,r[t])}))}return e}function f(e){return function(e){return void 0!==e.children&&o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,n.jsx)(a,b({},e)):(0,n.jsx)(l.Z,b({},e))}var p=r(41428);function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var O=r(5254);function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function m(e){const t=o.Children.toArray(e.children),r=t.find((e=>o.isValidElement(e)&&"summary"===e.type)),c=(0,n.jsx)(n.Fragment,{children:t.filter((e=>e!==r))});return(0,n.jsx)(O.Z,j(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){y(e,t,r[t])}))}return e}({},e),{summary:r,children:c}))}var g=r(52615);function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P(e){return(0,n.jsx)(g.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){h(e,t,r[t])}))}return e}({},e))}var w=r(40624);const v={containsTaskList:"containsTaskList_k9gM"};function x(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function S(e){if(void 0!==e)return(0,w.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&v.containsTaskList)}var D=r(80474);function N(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const E={img:"img_vXGZ"};function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}var _=r(77773),B=r(88941),T=r(30691),L=r(73919),I=r(78844),A=r(99854);function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function U(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}const R="docusaurus-mermaid-container";function F(){const{colorMode:e}=(0,I.I)(),t=(0,L.L)().mermaid,r=t.theme[e],{options:n}=t;return(0,o.useMemo)((()=>U(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){M(e,t,r[t])}))}return e}({startOnLoad:!1},n),{theme:r})),[r,n])}function z({text:e,config:t}){const[r,n]=(0,o.useState)(null),c=(0,o.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,i=F(),l=null!=t?t:i;return(0,o.useEffect)((()=>{(async function({id:e,text:t,config:r}){A.N.mermaidAPI.initialize(r);try{return await A.N.render(e,t)}catch(o){var n;throw null===(n=document.querySelector(`#d${e}`))||void 0===n||n.remove(),o}})({id:c,text:e,config:l}).then(n).catch((e=>{n((()=>{throw e}))}))}),[c,e,l]),r}const H={container:"container_RUsj"};function $(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){$(e,t,r[t])}))}return e}function V({renderResult:e}){const t=(0,o.useRef)(null);return(0,o.useEffect)((()=>{var r;const n=t.current;null===(r=e.bindFunctions)||void 0===r||r.call(e,n)}),[e]),(0,n.jsx)("div",{ref:t,className:`${R} ${H.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function q({value:e}){const t=z({text:e});return null===t?null:(0,n.jsx)(V,{renderResult:t})}function G(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){G(e,t,r[t])}))}return e}const X={Head:i.Z,details:m,Details:m,code:f,a:function(e){return(0,n.jsx)(p.Z,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){d(e,t,r[t])}))}return e}({},e))},pre:function(e){return(0,n.jsx)(n.Fragment,{children:e.children})},ul:function(e){return(0,n.jsx)("ul",k(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){x(e,t,r[t])}))}return e}({},e),{className:S(e.className)}))},li:function(e){return(0,D.Z)().collectAnchor(e.id),(0,n.jsx)("li",function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){N(e,t,r[t])}))}return e}({},e))},img:function(e){return(0,n.jsx)("img",C(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}({decoding:"async",loading:"lazy"},e),{className:(t=e.className,(0,w.Z)(t,E.img))}));var t},h1:e=>(0,n.jsx)(P,Q({as:"h1"},e)),h2:e=>(0,n.jsx)(P,Q({as:"h2"},e)),h3:e=>(0,n.jsx)(P,Q({as:"h3"},e)),h4:e=>(0,n.jsx)(P,Q({as:"h4"},e)),h5:e=>(0,n.jsx)(P,Q({as:"h5"},e)),h6:e=>(0,n.jsx)(P,Q({as:"h6"},e)),admonition:_.Z,mermaid:function(e){return(0,n.jsx)(B.Z,{fallback:e=>(0,n.jsx)(T.Ac,W({},e)),children:(0,n.jsx)(q,W({},e))})}};const J="tweetQuote_h8Rz",Y="avatarImg_b51M";function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const ee=(te=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){K(e,t,r[t])}))}return e}({},X),re=null!=(re={Code:f,Highlight:function({children:e,color:t}){return(0,n.jsx)("span",{style:{backgroundColor:t,borderRadius:"2px",color:"#fff",padding:"0.2rem"},children:e})},TweetQuote:function({url:e,handle:t,name:r,job:o,children:c}){const i=`https://unavatar.io/twitter/${t}`,l=`https://twitter.com/${t}`;return(0,n.jsxs)("figure",{className:J,children:[(0,n.jsx)("blockquote",{children:(0,n.jsx)(p.Z,{to:e,children:c})}),(0,n.jsx)("figcaption",{children:(0,n.jsx)(p.Z,{to:l,rel:"nofollow",children:(0,n.jsxs)("div",{className:"avatar",children:[(0,n.jsx)("img",{alt:r,className:(0,w.Z)("avatar__photo",Y),src:i}),(0,n.jsxs)("div",{className:(0,w.Z)("avatar__intro"),children:[(0,n.jsx)("strong",{className:"avatar__name",children:(0,n.jsx)("cite",{children:r})}),(0,n.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:o})]})]})})})]})}})?re:{},Object.getOwnPropertyDescriptors?Object.defineProperties(te,Object.getOwnPropertyDescriptors(re)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(re)).forEach((function(e){Object.defineProperty(te,e,Object.getOwnPropertyDescriptor(re,e))})),te);var te,re;function ne({children:e}){return(0,n.jsx)(c.Z,{components:ee,children:e})}},6649:(e,t,r)=>{r.d(t,{Z:()=>i});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);function i(e){const{permalink:t,title:r,subLabel:i,isNext:l}=e;return(0,n.jsxs)(c.Z,{className:(0,o.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[i&&(0,n.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,n.jsx)("div",{className:"pagination-nav__label",children:r})]})}},52977:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624)),c=r(41428);const i={tag:"tag_Nd8t",tagRegular:"tagRegular_TiLs",tagWithCount:"tagWithCount_AQg7"};function l({permalink:e,label:t,count:r}){return(0,n.jsxs)(c.Z,{href:e,className:(0,o.Z)(i.tag,r?i.tagWithCount:i.tagRegular),children:[t,r&&(0,n.jsx)("span",{children:r})]})}},62804:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(52977);const l={tags:"tags_rTaS",tag:"tag_l5va"};function s({tags:e}){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("b",{children:(0,n.jsx)(c.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,n.jsx)("ul",{className:(0,o.Z)(l.tags,"padding--none","margin-left--sm"),children:e.map((({label:e,permalink:t})=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,{label:e,permalink:t})},t)))})]})}},99272:(e,t,r)=>{r.d(t,{Z:()=>O});var n=r(24246),o=(r(27378),r(40624)),c=r(36712),i=r(97134);function l(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function s(){return(0,n.jsx)(c.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function a(){return(0,n.jsx)(i.Z,{children:(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var u=r(89583),b=r(77773);function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){f(e,t,r[t])}))}return e}function d({className:e}){return(0,n.jsx)(b.Z,{type:"caution",title:(0,n.jsx)(l,{}),className:(0,o.Z)(e,u.k.common.unlistedBanner),children:(0,n.jsx)(s,{})})}function O(e){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a,{}),(0,n.jsx)(d,p({},e))]})}},88305:(e,t,r)=>{r.d(t,{C:()=>s,n:()=>l});var n=r(24246),o=r(27378),c=r(51114);const i=o.createContext(null);function l({children:e,content:t,isBlogPostPage:r=!1}){const c=function({content:e,isBlogPostPage:t}){return(0,o.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,toc:e.toc,isBlogPostPage:t})),[e,t])}({content:t,isBlogPostPage:r});return(0,n.jsx)(i.Provider,{value:c,children:e})}function s(){const e=(0,o.useContext)(i);if(null===e)throw new c.i6("BlogPostProvider");return e}},54461:(e,t,r)=>{r.d(t,{P:()=>c});var n=r(4423);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e={}){const{i18n:{currentLocale:t}}=(0,n.Z)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,n.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){o(e,t,r[t])}))}return e}({calendar:r},e))}},7812:(e,t,r)=>{r.d(t,{c:()=>a});var n=r(27378),o=r(4423);const c=["zero","one","two","few","many","other"];function i(e){return c.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:i(["one","other"]),select:e=>1===e?"one":"other"};function s(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:i(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function a(){const e=s();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const o=r.select(t),c=r.pluralForms.indexOf(o);return n[Math.min(c,n.length-1)]}(r,t,e)}}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},38112:(e,t,r)=>{r.d(t,{Z:()=>Ie});var n={};r.r(n),r.d(n,{ButtonExample:()=>B});var o=r(24246),c=r(27378),i=r(40624),l=r(29088),s=r(32711),a=r(36712),u=r(4423),b=r(94544),f=r(30691),p=r(78844),d=r(73919);function O(){const{prism:e}=(0,d.L)(),{colorMode:t}=(0,p.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var y=r(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){m(e,t,r[t])}))}return e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,i.Z)(j.playgroundHeader),children:e})}function v(){return(0,o.jsx)("div",{children:"Loading..."})}function x(){return(0,o.jsx)(b.Z,{fallback:(0,o.jsx)(v,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(y.Z,{fallback:e=>(0,o.jsx)(f.Ac,g({},e)),children:(0,o.jsx)(s.i5,{})}),(0,o.jsx)(s.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(x,{})})]})}function S(){const e=(0,l.Z)();return(0,o.jsx)(s.uz,{className:j.playgroundEditor},String(e))}function D(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const N=e=>`${e};`;function E(e){var t,{children:r,transformCode:n}=e,c=P(e,["children","transformCode"]);const{siteConfig:{themeConfig:i}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=i,a=O();var b;const f=null!==(b=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==b&&b;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(s.nu,h(g({code:null==r?void 0:r.replace(/\n$/,""),noInline:f,transformCode:null!=n?n:N,theme:a},c),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(D,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(D,{}),(0,o.jsx)(k,{})]})}))})}function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Z(e,t,r[t])}))}return e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function B(e){return(0,o.jsx)("button",_(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function T(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const L=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){T(e,t,r[t])}))}return e}({React:c},c,n);var I,A,M=r(89583),U=r(6324),R=r.n(U);function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const z=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),$={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},W=(V=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){F(e,t,r[t])}))}return e}({},$),q=null!=(q={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?q:{},Object.getOwnPropertyDescriptors?Object.defineProperties(V,Object.getOwnPropertyDescriptors(q)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(q)).forEach((function(e){Object.defineProperty(V,e,Object.getOwnPropertyDescriptor(q,e))})),V);var V,q;const G=Object.keys($);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=W[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),l=r.split("\n"),s=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),b=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let p=0;p<l.length;){const e=l[p].match(i);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?s[a[t]].range+=`${p},`:u[t]?s[u[t]].start=p:b[t]&&(s[b[t]].range+=`${s[b[t]].start}-${p-1},`),l.splice(p,1)}r=l.join("\n");const f={};return Object.entries(s).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(I=f)[A=t])&&void 0!==r||(I[A]=[]),f[t].push(e)}))})),{lineClassNames:f,code:r}}const J={codeBlockContainer:"codeBlockContainer_jDV4"};function Y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(O());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Y(e,t,r[t])}))}return e}({},r),{style:n,className:(0,i.Z)(r.className,J.codeBlockContainer,M.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,i.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ie(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=r(26101);const se={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function be(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function fe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=n({line:e,className:(0,i.Z)(t,r&&se.codeLine)}),s=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",be(ue({},l),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:se.codeLineNumber}),(0,o.jsx)("span",{className:se.codeLineContent,children:s})]}):s,(0,o.jsx)("br",{})]}))}var pe=r(34370);function de(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Oe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ye(e){return(0,o.jsx)("svg",Oe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){de(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ge(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){je(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const he={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function Pe({code:e,className:t}){const[r,n]=(0,c.useState)(!1),l=(0,c.useRef)(void 0),s=(0,c.useCallback)((()=>{(0,pe.Z)(e),n(!0),l.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",t,he.copyButton,r&&he.copyButtonCopied),onClick:s,children:(0,o.jsxs)("span",{className:he.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(ye,{className:he.copyButtonIcon}),(0,o.jsx)(ge,{className:he.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ve(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function xe(e){return(0,o.jsx)("svg",ve(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,i.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(xe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function De({children:e,className:t="",metastring:r,title:n,showLineNumbers:l,language:s}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,d.L)();var b;const f=function(e){return null==e?void 0:e.toLowerCase()}(null!==(b=null!=s?s:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==b?b:a),p=O(),y=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),i=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return ie(o,l),(0,c.useEffect)((()=>{l()}),[e,l]),(0,c.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:i}}(),j=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(z))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:m,code:g}=X(e,{metastring:r,language:f,magicComments:u}),h=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,i.Z)(t,f&&!t.includes(`language-${f}`)&&`language-${f}`),children:[j&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:p,code:g,language:null!=f?f:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,i.Z)(re.codeBlockLines,h&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(fe,{line:e,getLineProps:n,getTokenProps:c,classNames:m[t],showLineNumbers:h},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(y.isEnabled||y.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),(0,o.jsx)(Pe,{className:re.codeButton,code:g})]})]})]})}function Ne(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ze(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ce(e,t,r[t])}))}return e}const Be=(Te=function(e){var{children:t}=e,r=Ze(e,["children"]);const n=(0,l.Z)(),i=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),s="string"==typeof i?De:ne;return(0,o.jsx)(s,Ee(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Ne(e,t,r[t])}))}return e}({},r),{children:i}),String(n))},function(e){return e.live?(0,o.jsx)(E,_e({scope:L},e)):(0,o.jsx)(Te,_e({},e))});var Te;function Le(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){return(0,o.jsx)(Be,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Le(e,t,r[t])}))}return e}({},e))}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.6a02fe39.js b/assets/js/6875c492.6a02fe39.js deleted file mode 100644 index b0e92a32fe..0000000000 --- a/assets/js/6875c492.6a02fe39.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[4813],{7713:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var s=n(1312),a=n(9022),i=n(4848);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.A,{permalink:n,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,i.jsx)(a.A,{permalink:r,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},3892:(e,t,n)=>{n.d(t,{A:()=>r});n(6540);var s=n(7131),a=n(4651),i=n(4848);function r(e){let{items:t,component:n=a.A}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.i,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},3069:(e,t,n)=>{n.r(t),n.d(t,{default:()=>A});n(6540);var s=n(4164),a=n(1312),i=n(5846),r=n(1213),l=n(7559),o=n(8774),c=n(6535),d=n(7713),g=n(1463),u=n(3892),h=n(996),p=n(1107),m=n(4848);function x(e){const t=function(){const{selectMessage:e}=(0,i.W)();return t=>e(t,(0,a.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r.be,{title:n}),(0,m.jsx)(g.A,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=x(t);return(0,m.jsxs)(c.A,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.A,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.A,{as:"h1",children:r}),(0,m.jsx)(o.A,{href:t.allTagsPath,children:(0,m.jsx)(a.A,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.A,{items:n}),(0,m.jsx)(d.A,{metadata:i})]})}function A(e){return(0,m.jsxs)(r.e3,{className:(0,s.A)(l.G.wrapper.blogPages,l.G.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},996:(e,t,n)=>{n.d(t,{A:()=>h});n(6540);var s=n(4164),a=n(1312),i=n(5260),r=n(4848);function l(){return(0,r.jsx)(a.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,r.jsx)(a.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(i.A,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(7559),g=n(7293);function u(e){let{className:t}=e;return(0,r.jsx)(g.A,{type:"caution",title:(0,r.jsx)(l,{}),className:(0,s.A)(t,d.G.common.unlistedBanner),children:(0,r.jsx)(o,{})})}function h(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/688c67ec.d179912b.js b/assets/js/688c67ec.d179912b.js new file mode 100644 index 0000000000..08d7a3ebd2 --- /dev/null +++ b/assets/js/688c67ec.d179912b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15209],{86160:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>n,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var o=s(24246),h=s(71670);const i={mdx:{format:"md"},date:"2023-09-20T20:00",authors:["homotechsual","ori-shalom","slorber","TheCatLady"]},a="2.4.3",r={permalink:"/changelog/2.4.3",source:"@site/changelog/source/2.4.3.md",title:"2.4.3",description:"Bug Fix",date:"2023-09-20T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Mikey O'Toole",alias:"homotechsual",url:"https://github.com/homotechsual",imageURL:"https://github.com/homotechsual.png",key:"homotechsual"},{name:"Ori Shalom",alias:"ori-shalom",url:"https://github.com/ori-shalom",imageURL:"https://github.com/ori-shalom.png",key:"ori-shalom"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"TheCatLady",alias:"TheCatLady",url:"https://github.com/TheCatLady",imageURL:"https://github.com/TheCatLady.png",key:"TheCatLady"}],frontMatter:{mdx:{format:"md"},date:"2023-09-20T20:00",authors:["homotechsual","ori-shalom","slorber","TheCatLady"]},unlisted:!1,prevItem:{title:"3.0.0",permalink:"/changelog/3.0.0"},nextItem:{title:"2.4.2",permalink:"/changelog/2.4.2"},listPageLink:"/changelog/"},n={authorsImageUrls:[void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"Committers: 4",id:"committers-4",level:2}];function c(e){const t={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9107",children:"#9107"})," fix(content-docs): sidebar generator should return customProps for doc items (",(0,o.jsx)(t.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9108",children:"#9108"})," feat(theme-classic): add description & keywords microdata to blog posts (",(0,o.jsx)(t.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"}),")"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9099",children:"#9099"})," fix(theme): only set classname on ul elements if they have an existing class (",(0,o.jsx)(t.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9243",children:"#9243"})," fix(theme-common): ThemedComponent should display something when JS is disabled (",(0,o.jsx)(t.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"docusaurus-theme-classic"}),", ",(0,o.jsx)(t.code,{children:"docusaurus-theme-common"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9130",children:"#9130"})," fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash (",(0,o.jsx)(t.a,{href:"https://github.com/ori-shalom",children:"@ori-shalom"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"committers-4",children:"Committers: 4"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Mikey O'Toole (",(0,o.jsx)(t.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,o.jsxs)(t.li,{children:["Ori Shalom (",(0,o.jsx)(t.a,{href:"https://github.com/ori-shalom",children:"@ori-shalom"}),")"]}),"\n",(0,o.jsxs)(t.li,{children:["S\xe9bastien Lorber (",(0,o.jsx)(t.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"})}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,h.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>a});var o=s(27378);const h={},i=o.createContext(h);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(h):e.components||h:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/68c81175.219c43a4.js b/assets/js/68c81175.219c43a4.js new file mode 100644 index 0000000000..91864aa398 --- /dev/null +++ b/assets/js/68c81175.219c43a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3913],{5590:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var n=a(24246),o=a(71670);const r={mdx:{format:"md"},date:"2019-10-14T20:00"},s="2.0.0-alpha.27",c={permalink:"/changelog/2.0.0-alpha.27",source:"@site/changelog/source/2.0.0-alpha.27.md",title:"2.0.0-alpha.27",description:"- Add @theme/Tabs which can be used to implement multi-language code tabs.",date:"2019-10-14T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-14T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.28",permalink:"/changelog/2.0.0-alpha.28"},nextItem:{title:"2.0.0-alpha.26",permalink:"/changelog/2.0.0-alpha.26"},listPageLink:"/changelog/page/5"},l={authorsImageUrls:[]},i=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},71670:(e,t,a)=>{a.d(t,{Z:()=>c,a:()=>s});var n=a(27378);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/68df2081.29615bda.js b/assets/js/68df2081.29615bda.js deleted file mode 100644 index 1d039d04a5..0000000000 --- a/assets/js/68df2081.29615bda.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[1360],{1966:u=>{u.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/68e633d4.4a5ecbb8.js b/assets/js/68e633d4.4a5ecbb8.js new file mode 100644 index 0000000000..e7d6a64376 --- /dev/null +++ b/assets/js/68e633d4.4a5ecbb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81843],{93127:(e,s,n)=>{n.d(s,{Z:()=>l});var i=n(24246),a=(n(27378),n(97134)),t=n(41428);const c={container:"container_tECh",nav:"nav_sWk6",navlink:"navlink__gTJ",active:"active_Uuwz"};function r({to:e,children:s}){return(0,i.jsx)(t.Z,{className:c.navlink,isNavLink:!0,to:e,exact:!0,activeStyle:{backgroundColor:"#363739"},children:s})}function l({children:e}){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.Z,{children:[(0,i.jsx)("html",{lang:"en"}),(0,i.jsx)("title",{children:"Docusaurus debug panel"}),(0,i.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,i.jsxs)("div",{children:[(0,i.jsxs)("nav",{className:c.nav,children:[(0,i.jsx)(r,{to:"/__docusaurus/debug",children:"Config"}),(0,i.jsx)(r,{to:"/__docusaurus/debug/metadata",children:"Metadata"}),(0,i.jsx)(r,{to:"/__docusaurus/debug/registry",children:"Registry"}),(0,i.jsx)(r,{to:"/__docusaurus/debug/routes",children:"Routes"}),(0,i.jsx)(r,{to:"/__docusaurus/debug/content",children:"Content"}),(0,i.jsx)(r,{to:"/__docusaurus/debug/globalData",children:"Global data"})]}),(0,i.jsx)("main",{className:c.container,children:e})]})]})}},58932:(e,s,n)=>{n.r(s),n.d(s,{default:()=>r});var i=n(24246),a=(n(27378),n(4423)),t=n(93127);const c={sectionTitle:"sectionTitle_T1wU",listItem:"listItem_Bobk",version:"version_gVgE",name:"name_C0v7"};function r(){const{siteMetadata:e}=(0,a.Z)();var s;return(0,i.jsxs)(t.Z,{children:[(0,i.jsx)("h2",{children:"Site Metadata"}),(0,i.jsxs)("div",{children:["Docusaurus Version: ",(0,i.jsx)("code",{children:e.docusaurusVersion})]}),(0,i.jsxs)("div",{children:["Site Version:"," ",(0,i.jsx)("code",{children:null!==(s=e.siteVersion)&&void 0!==s?s:"No version specified"})]}),(0,i.jsx)("h3",{className:c.sectionTitle,children:"Plugins and themes"}),(0,i.jsx)("ul",{className:"clean-list",children:Object.entries(e.pluginVersions).map((([e,s])=>(0,i.jsxs)("li",{className:c.listItem,children:["package"===s.type&&s.version&&(0,i.jsx)("div",{className:c.version,children:(0,i.jsx)("code",{children:s.version})}),(0,i.jsx)("div",{className:c.name,children:e}),(0,i.jsxs)("div",{children:["Type: ",s.type]})]},e)))})]})}}}]); \ No newline at end of file diff --git a/assets/js/6967621f.829d5498.js b/assets/js/6967621f.829d5498.js new file mode 100644 index 0000000000..69b2402e5c --- /dev/null +++ b/assets/js/6967621f.829d5498.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82370],{40198:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:4,toc_max_heading_level:5},l=void 0,d={id:"toc/toc-4-5",title:"toc-4-5",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-4-5.mdx",sourceDirName:"toc",slug:"/toc/toc-4-5",permalink:"/tests/docs/toc/toc-4-5",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_min_heading_level:4,toc_max_heading_level:5},sidebar:"sidebar",previous:{title:"toc-3-_",permalink:"/tests/docs/toc/toc-3-_"},next:{title:"toc-5-5",permalink:"/tests/docs/toc/toc-5-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/69d00ea1.d63339e8.js b/assets/js/69d00ea1.d63339e8.js new file mode 100644 index 0000000000..17b484530c --- /dev/null +++ b/assets/js/69d00ea1.d63339e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82674],{47677:(s,e,i)=>{i.r(e),i.d(e,{assets:()=>t,contentTitle:()=>n,default:()=>u,frontMatter:()=>h,metadata:()=>l,toc:()=>c});var r=i(24246),a=i(71670);const h={mdx:{format:"md"},date:"2020-10-19T20:00",authors:["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},n="2.0.0-alpha.66",l={permalink:"/changelog/2.0.0-alpha.66",source:"@site/changelog/source/2.0.0-alpha.66.md",title:"2.0.0-alpha.66",description:"New Feature",date:"2020-10-19T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"aakhtar3",alias:"aakhtar3",url:"https://github.com/aakhtar3",imageURL:"https://github.com/aakhtar3.png",key:"aakhtar3"},{name:"Abhishek Tiwari",alias:"abhishektiwari",url:"https://github.com/abhishektiwari",imageURL:"https://github.com/abhishektiwari.png",key:"abhishektiwari"},{name:"Christian Bromann",alias:"christian-bromann",url:"https://github.com/christian-bromann",imageURL:"https://github.com/christian-bromann.png",key:"christian-bromann"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"Hamza Hamidi",alias:"hamzahamidi",url:"https://github.com/hamzahamidi",imageURL:"https://github.com/hamzahamidi.png",key:"hamzahamidi"},{name:"honlyHuang",alias:"honlyHuang",url:"https://github.com/honlyHuang",imageURL:"https://github.com/honlyHuang.png",key:"honlyHuang"},{name:"Shubham Kumar",alias:"imskr",url:"https://github.com/imskr",imageURL:"https://github.com/imskr.png",key:"imskr"},{name:"John Gracey",alias:"jagracey",url:"https://github.com/jagracey",imageURL:"https://github.com/jagracey.png",key:"jagracey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Matan Borenkraout",alias:"MatanBobi",url:"https://github.com/MatanBobi",imageURL:"https://github.com/MatanBobi.png",key:"MatanBobi"},{name:"Russ Taylor",alias:"russtaylor",url:"https://github.com/russtaylor",imageURL:"https://github.com/russtaylor.png",key:"russtaylor"},{name:"SaintMalik",alias:"saintmalik",url:"https://github.com/saintmalik",imageURL:"https://github.com/saintmalik.png",key:"saintmalik"},{name:"Shubham Zanwar",alias:"shubhamzanwar",url:"https://github.com/shubhamzanwar",imageURL:"https://github.com/shubhamzanwar.png",key:"shubhamzanwar"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Umair Kamran",alias:"UmairKamran",url:"https://github.com/UmairKamran",imageURL:"https://github.com/UmairKamran.png",key:"UmairKamran"},{name:"Utkarsh Goel",alias:"utkarsh867",url:"https://github.com/utkarsh867",imageURL:"https://github.com/utkarsh867.png",key:"utkarsh867"}],frontMatter:{mdx:{format:"md"},date:"2020-10-19T20:00",authors:["aakhtar3","abhishektiwari","christian-bromann","fanny","hamzahamidi","honlyHuang","imskr","jagracey","lex111","MatanBobi","russtaylor","saintmalik","shubhamzanwar","Simek","slorber","UmairKamran","utkarsh867"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.67",permalink:"/changelog/2.0.0-alpha.67"},nextItem:{title:"2.0.0-alpha.65",permalink:"/changelog/2.0.0-alpha.65"},listPageLink:"/changelog/page/3"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},c=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 17",id:"committers-17",level:2}];function o(s){const e={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,a.a)(),...s.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3593",children:"#3593"})," feat(v2): blog sidebar (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-mdx-loader"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-remark-plugin-npm2yarn"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3469",children:"#3469"})," feat(v2): Extract npm2yarn plugin (",(0,r.jsx)(e.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3550",children:"#3550"})," feat(v2): contextual search, dynamic Algolia facetFilters (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3580",children:"#3580"})," feat(v2): allow to define custom CSS class for Tabs component (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3553",children:"#3553"})," feat(v2): make dropdown menu collapsible on mobiles (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-migrate"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3573",children:"#3573"})," feat(v2): Add themeConfig.noIndex option #3528 (",(0,r.jsx)(e.a,{href:"https://github.com/hamzahamidi",children:"@hamzahamidi"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3543",children:"#3543"})," feat(v2): persist docs preferred version (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3548",children:"#3548"}),' feat(v2): version dropdown before/after items + move site "All Versions" link (',(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3545",children:"#3545"})," feat(v2): site client modules (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3539",children:"#3539"})," feat(v2): doc navbar item type (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3550",children:"#3550"})," feat(v2): contextual search, dynamic Algolia facetFilters (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3607",children:"#3607"})," fix(v2): fix error with required href attr of link in mobiles (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3602",children:"#3602"})," fix(v2): make dropdown button clickable with mouse (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3601",children:"#3601"})," fix(v2): fix table-of-content scroll highlighting issues (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3599",children:"#3599"})," fix(v2): remove event listeners on Tabs component unmount (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-types"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3531",children:"#3531"})," fix(v2): Fixes serve cli --port option (",(0,r.jsx)(e.a,{href:"https://github.com/UmairKamran",children:"@UmairKamran"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3585",children:"#3585"})," refactor(v2): various dropdown improvements (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3588",children:"#3588"})," refactor(v2): make accessible copy code button from keyboard (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3578",children:"#3578"})," refactor(v2): apply common behavior to dropdowns (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3546",children:"#3546"})," docs: various fixes and improvements (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),", ",(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3587",children:"#3587"})," refactor(v2): various fixes (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3569",children:"#3569"})," refactor(v2): improve broken links error message (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3576",children:"#3576"}),' docs(v2): removed obsolete "you" identifier (',(0,r.jsx)(e.a,{href:"https://github.com/christian-bromann",children:"@christian-bromann"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3589",children:"#3589"})," docs(v2): add taro to users (",(0,r.jsx)(e.a,{href:"https://github.com/honlyHuang",children:"@honlyHuang"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3565",children:"#3565"})," docs(v2): deployment, add required GitHub token scope infos (",(0,r.jsx)(e.a,{href:"https://github.com/russtaylor",children:"@russtaylor"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3574",children:"#3574"})," docs(v2): adding vue-nodegui to users (",(0,r.jsx)(e.a,{href:"https://github.com/shubhamzanwar",children:"@shubhamzanwar"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3556",children:"#3556"})," Added Axioms to users (",(0,r.jsx)(e.a,{href:"https://github.com/abhishektiwari",children:"@abhishektiwari"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3558",children:"#3558"})," docs(v2): embedding real source code in MDX as a code block (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3555",children:"#3555"}),' docs(v2): add "Wisdom" dev docs website to showcase. (',(0,r.jsx)(e.a,{href:"https://github.com/jagracey",children:"@jagracey"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3532",children:"#3532"})," docs(v2): change package name in example script (",(0,r.jsx)(e.a,{href:"https://github.com/MatanBobi",children:"@MatanBobi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3538",children:"#3538"})," docs(v1): added drone for 1.0 #3491 (",(0,r.jsx)(e.a,{href:"https://github.com/aakhtar3",children:"@aakhtar3"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3533",children:"#3533"})," docs(v1): Fix broken link in the documentation (",(0,r.jsx)(e.a,{href:"https://github.com/saintmalik",children:"@saintmalik"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3534",children:"#3534"})," docs(v2): Fix url bugs in v2 docs (",(0,r.jsx)(e.a,{href:"https://github.com/saintmalik",children:"@saintmalik"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3546",children:"#3546"})," docs: various fixes and improvements (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3591",children:"#3591"})," chore(v2): enable new contextual search feature (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["Other\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3586",children:"#3586"})," chore(v2): fix/upgrade react types (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3577",children:"#3577"})," refactor(v2): clarify versions page (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3560",children:"#3560"})," feat(v2): prevent using remote image urls in showcase (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3554",children:"#3554"})," fix(v2): use absolute path to manifest file (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"docusaurus-theme-classic"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/pull/3394",children:"#3394"})," refactor(v2): add useThemeConfig hook + cleanup useless theme default values (",(0,r.jsx)(e.a,{href:"https://github.com/imskr",children:"@imskr"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"committers-17",children:"Committers: 17"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["Abhishek Tiwari (",(0,r.jsx)(e.a,{href:"https://github.com/abhishektiwari",children:"@abhishektiwari"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Alexey Pyltsyn (",(0,r.jsx)(e.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Bartosz Kaszubowski (",(0,r.jsx)(e.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Christian Bromann (",(0,r.jsx)(e.a,{href:"https://github.com/christian-bromann",children:"@christian-bromann"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Fanny (",(0,r.jsx)(e.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Hamza Hamidi (",(0,r.jsx)(e.a,{href:"https://github.com/hamzahamidi",children:"@hamzahamidi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["John Gracey (",(0,r.jsx)(e.a,{href:"https://github.com/jagracey",children:"@jagracey"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Matan Borenkraout (",(0,r.jsx)(e.a,{href:"https://github.com/MatanBobi",children:"@MatanBobi"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Russ Taylor (",(0,r.jsx)(e.a,{href:"https://github.com/russtaylor",children:"@russtaylor"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["SaintMalik (",(0,r.jsx)(e.a,{href:"https://github.com/saintmalik",children:"@saintmalik"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Shubham Kumar (",(0,r.jsx)(e.a,{href:"https://github.com/imskr",children:"@imskr"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Shubham Zanwar (",(0,r.jsx)(e.a,{href:"https://github.com/shubhamzanwar",children:"@shubhamzanwar"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["S\xe9bastien Lorber (",(0,r.jsx)(e.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Umair Kamran (",(0,r.jsx)(e.a,{href:"https://github.com/UmairKamran",children:"@UmairKamran"}),")"]}),"\n",(0,r.jsxs)(e.li,{children:["Utkarsh Goel (",(0,r.jsx)(e.a,{href:"https://github.com/utkarsh867",children:"@utkarsh867"}),")"]}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/aakhtar3",children:"@aakhtar3"})}),"\n",(0,r.jsxs)(e.li,{children:["honlyHuang (",(0,r.jsx)(e.a,{href:"https://github.com/honlyHuang",children:"@honlyHuang"}),")"]}),"\n"]})]})}function u(s={}){const{wrapper:e}={...(0,a.a)(),...s.components};return e?(0,r.jsx)(e,{...s,children:(0,r.jsx)(o,{...s})}):o(s)}},71670:(s,e,i)=>{i.d(e,{Z:()=>l,a:()=>n});var r=i(27378);const a={},h=r.createContext(a);function n(s){const e=r.useContext(h);return r.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(a):s.components||a:n(s.components),r.createElement(h.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/6a2ff064.310eb372.js b/assets/js/6a2ff064.310eb372.js new file mode 100644 index 0000000000..4a19a6c368 --- /dev/null +++ b/assets/js/6a2ff064.310eb372.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29413],{96645:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:2,toc_max_heading_level:2},l=void 0,d={id:"toc/toc-2-2",title:"toc-2-2",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-2.mdx",sourceDirName:"toc",slug:"/toc/toc-2-2",permalink:"/tests/docs/toc/toc-2-2",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:2},sidebar:"sidebar",previous:{title:"Another test page",permalink:"/tests/docs/more-test"},next:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ab75597.0f67f301.js b/assets/js/6ab75597.0f67f301.js new file mode 100644 index 0000000000..355ec784a8 --- /dev/null +++ b/assets/js/6ab75597.0f67f301.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24925],{55605:(e,s,c)=>{c.r(s),c.d(s,{assets:()=>l,contentTitle:()=>n,default:()=>u,frontMatter:()=>h,metadata:()=>r,toc:()=>a});var i=c(24246),o=c(71670);const h={mdx:{format:"md"},date:"2022-02-25T20:00",authors:["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},n="2.0.0-beta.16",r={permalink:"/changelog/2.0.0-beta.16",source:"@site/changelog/source/2.0.0-beta.16.md",title:"2.0.0-beta.16",description:"New Feature",date:"2022-02-25T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Gaurish",alias:"apidev234",url:"https://github.com/apidev234",imageURL:"https://github.com/apidev234.png",key:"apidev234"},{name:"Artem Kovalov",alias:"artemkovalyov",url:"https://github.com/artemkovalyov",imageURL:"https://github.com/artemkovalyov.png",key:"artemkovalyov"},{name:"BigDataWriter",alias:"BigDataWriter",url:"https://github.com/BigDataWriter",imageURL:"https://github.com/BigDataWriter.png",key:"BigDataWriter"},{name:"Clement Demonchy",alias:"cdemonchy-pro",url:"https://github.com/cdemonchy-pro",imageURL:"https://github.com/cdemonchy-pro.png",key:"cdemonchy-pro"},{name:"CodeDoctor",alias:"CodeDoctorDE",url:"https://github.com/CodeDoctorDE",imageURL:"https://github.com/CodeDoctorDE.png",key:"CodeDoctorDE"},{name:"CookieJarApps",alias:"CookieJarApps",url:"https://github.com/CookieJarApps",imageURL:"https://github.com/CookieJarApps.png",key:"CookieJarApps"},{name:"Dmitry Vinnik",alias:"dmitryvinn",url:"https://github.com/dmitryvinn",imageURL:"https://github.com/dmitryvinn.png",key:"dmitryvinn"},{name:"Dmitry Vinnik | Meta",alias:"dmitryvinn-fb",url:"https://github.com/dmitryvinn-fb",imageURL:"https://github.com/dmitryvinn-fb.png",key:"dmitryvinn-fb"},{name:"Everardo J. Barojas M.",alias:"ebarojas",url:"https://github.com/ebarojas",imageURL:"https://github.com/ebarojas.png",key:"ebarojas"},{name:"Erick Zhao",alias:"erickzhao",url:"https://github.com/erickzhao",imageURL:"https://github.com/erickzhao.png",key:"erickzhao"},{name:"Felipe Santos",alias:"felipecrs",url:"https://github.com/felipecrs",imageURL:"https://github.com/felipecrs.png",key:"felipecrs"},{name:"Mikey O'Toole",alias:"homotechsual",url:"https://github.com/homotechsual",imageURL:"https://github.com/homotechsual.png",key:"homotechsual"},{name:"Jody Heavener",alias:"jodyheavener",url:"https://github.com/jodyheavener",imageURL:"https://github.com/jodyheavener.png",key:"jodyheavener"},{name:"John Reilly",alias:"johnnyreilly",url:"https://github.com/johnnyreilly",imageURL:"https://github.com/johnnyreilly.png",key:"johnnyreilly"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Daniel Kalevski",alias:"kalevski",url:"https://github.com/kalevski",imageURL:"https://github.com/kalevski.png",key:"kalevski"},{name:"Kishan Gajera",alias:"kgajera",url:"https://github.com/kgajera",imageURL:"https://github.com/kgajera.png",key:"kgajera"},{name:"Konstantin Tarkus",alias:"koistya",url:"https://github.com/koistya",imageURL:"https://github.com/koistya.png",key:"koistya"},{name:"Balthasar Hofer",alias:"lebalz",url:"https://github.com/lebalz",imageURL:"https://github.com/lebalz.png",key:"lebalz"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Miles Johnson",alias:"milesj",url:"https://github.com/milesj",imageURL:"https://github.com/milesj.png",key:"milesj"},{name:"Matheus Ricardo Brunelli",alias:"mrbrunelli",url:"https://github.com/mrbrunelli",imageURL:"https://github.com/mrbrunelli.png",key:"mrbrunelli"},{name:"Naseel Niyas",alias:"NaseelNiyas",url:"https://github.com/NaseelNiyas",imageURL:"https://github.com/NaseelNiyas.png",key:"NaseelNiyas"},{name:"nick-verida",alias:"nick-verida",url:"https://github.com/nick-verida",imageURL:"https://github.com/nick-verida.png",key:"nick-verida"},{name:"Nick Schonning",alias:"nschonni",url:"https://github.com/nschonni",imageURL:"https://github.com/nschonni.png",key:"nschonni"},{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"Muhammad Redho Ayassa",alias:"redhoyasa",url:"https://github.com/redhoyasa",imageURL:"https://github.com/redhoyasa.png",key:"redhoyasa"},{name:"Yongmin Hong",alias:"revi",url:"https://github.com/revi",imageURL:"https://github.com/revi.png",key:"revi"},{name:"Ruben Arushanyan",alias:"Ruben-Arushanyan",url:"https://github.com/Ruben-Arushanyan",imageURL:"https://github.com/Ruben-Arushanyan.png",key:"Ruben-Arushanyan"},{name:"seyoon20087",alias:"seyoon20087",url:"https://github.com/seyoon20087",imageURL:"https://github.com/seyoon20087.png",key:"seyoon20087"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tamal Web",alias:"tamalweb",url:"https://github.com/tamalweb",imageURL:"https://github.com/tamalweb.png",key:"tamalweb"},{name:"TheCatLady",alias:"TheCatLady",url:"https://github.com/TheCatLady",imageURL:"https://github.com/TheCatLady.png",key:"TheCatLady"},{name:"Daniel Hanke",alias:"thedanielhanke",url:"https://github.com/thedanielhanke",imageURL:"https://github.com/thedanielhanke.png",key:"thedanielhanke"},{name:"toto6038",alias:"toto6038",url:"https://github.com/toto6038",imageURL:"https://github.com/toto6038.png",key:"toto6038"},{name:"Matthew Ailes",alias:"vidarc",url:"https://github.com/vidarc",imageURL:"https://github.com/vidarc.png",key:"vidarc"},{name:"\uc774\uc815\ud658",alias:"winterlood",url:"https://github.com/winterlood",imageURL:"https://github.com/winterlood.png",key:"winterlood"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2022-02-25T20:00",authors:["apidev234","artemkovalyov","BigDataWriter","cdemonchy-pro","CodeDoctorDE","CookieJarApps","dmitryvinn","dmitryvinn-fb","ebarojas","erickzhao","felipecrs","homotechsual","jodyheavener","johnnyreilly","Josh-Cena","kalevski","kgajera","koistya","lebalz","lex111","milesj","mrbrunelli","NaseelNiyas","nick-verida","nschonni","pranabdas","redhoyasa","revi","Ruben-Arushanyan","seyoon20087","slorber","tamalweb","TheCatLady","thedanielhanke","toto6038","vidarc","winterlood","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-beta.17",permalink:"/changelog/2.0.0-beta.17"},nextItem:{title:"2.0.0-beta.15",permalink:"/changelog/2.0.0-beta.15"},listPageLink:"/changelog/page/2"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:":running: Performance",id:"running-performance",level:2},{value:"Committers: 38",id:"committers-38",level:2}];function t(e){const s={a:"a",code:"code",h2:"h2",li:"li",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6243",children:"#6243"})," feat(core): brand new swizzle CLI experience (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6750",children:"#6750"})," feat(create): new --package-manager option; interactive package manager selection (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6610",children:"#6610"})," feat(create): allow specifying a git clone strategy (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6723",children:"#6723"})," feat: sync color mode between browser tabs (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6692",children:"#6692"})," feat(search-algolia): allow disabling search page and configuring path (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6517",children:"#6517"})," feat(docs,theme-classic): docs breadcrumbs (",(0,i.jsx)(s.a,{href:"https://github.com/jodyheavener",children:"@jodyheavener"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6519",children:"#6519"}),' feat(content-docs): sidebar item type "html" for rendering pure markup (',(0,i.jsx)(s.a,{href:"https://github.com/jodyheavener",children:"@jodyheavener"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6593",children:"#6593"})," feat(content-blog): infer blog post date from git history (",(0,i.jsx)(s.a,{href:"https://github.com/felipecrs",children:"@felipecrs"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6619",children:"#6619"})," feat(content-docs): add custom props front matter (",(0,i.jsx)(s.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6452",children:"#6452"})," feat(content-docs): allow explicitly disabling index page for generated category (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6603",children:"#6603"})," feat(content-blog): allow customizing blog archive component through option (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6221",children:"#6221"})," feat(content-blog): Allow pagination for BlogTagsPostsPage (",(0,i.jsx)(s.a,{href:"https://github.com/redhoyasa",children:"@redhoyasa"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6752",children:"#6752"})," chore: upgrade docsearch-react to v3 stable, bump dependencies (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6729",children:"#6729"})," refactor: make MDX export a flat TOC list instead of tree (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6740",children:"#6740"})," refactor: remove deprecated Webpack utils & validation escape hatch (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6707",children:"#6707"})," refactor(theme-classic): bias again search metadata toward Algolia DocSearch (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6651",children:"#6651"})," refactor: reduce exported members of docusaurus router (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6758",children:"#6758"})," fix(theme-common): isSamePath should be case-insensitive (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6748",children:"#6748"})," fix(theme-classic): temporarily disable toc heading autoscrolling (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6696",children:"#6696"})," fix(theme-common): do not run useLocationChange when hot reloading (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6490",children:"#6490"})," fix(theme-classic): do not switch color modes when printing (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6749",children:"#6749"})," fix(theme-classic): fix breadcrumb home link bug with new useHomePageRoute() hook (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6720",children:"#6720"})," fix(content-docs): create assets for frontmatter images (",(0,i.jsx)(s.a,{href:"https://github.com/lebalz",children:"@lebalz"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6592",children:"#6592"})," fix(content-docs): read last update from inner git repositories (",(0,i.jsx)(s.a,{href:"https://github.com/felipecrs",children:"@felipecrs"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6477",children:"#6477"})," fix(content-docs): export versioning utils (",(0,i.jsx)(s.a,{href:"https://github.com/milesj",children:"@milesj"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6712",children:"#6712"})," fix(mdx-loader): make headings containing links properly formatted in ToC (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6701",children:"#6701"})," fix(cli): disable directory listing in serve (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6607",children:"#6607"})," fix(cli): log error itself on unhandled rejection (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6500",children:"#6500"})," fix(cli): allow passing a list of file names to write-heading-ids (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6496",children:"#6496"})," fix(core): configValidation should allow inline theme functions (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6652",children:"#6652"})," fix(theme-classic): minor BTT button fixes (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6612",children:"#6612"})," fix(theme-classic): make Prism additional languages properly server-side rendered (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6599",children:"#6599"})," fix(theme-classic): add docSidebar as allowed item in dropdown (",(0,i.jsx)(s.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6531",children:"#6531"})," fix(theme-classic): highlight active collapsible doc category properly (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6515",children:"#6515"})," fix(theme-classic): add key prop for SimpleLinks map (",(0,i.jsx)(s.a,{href:"https://github.com/kgajera",children:"@kgajera"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6508",children:"#6508"})," fix(theme-classic): apply width/height for footer logos without href (",(0,i.jsx)(s.a,{href:"https://github.com/kgajera",children:"@kgajera"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6617",children:"#6617"})," fix(utils): convert Markdown links in reference-style links with multiple spaces (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6489",children:"#6489"})," fix(utils): do not resolve Markdown paths with @site prefix (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6478",children:"#6478"})," fix(utils): Markdown linkification match local paths beginning with http (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6495",children:"#6495"})," fix(content-docs): render category with no subitems as a normal link (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6755",children:"#6755"})," refactor: unify error handling behavior (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6679",children:"#6679"})," feat(create): better detection of package manager preference (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6481",children:"#6481"})," refactor(init): promote good practices; use site alias (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6745",children:"#6745"})," fix(content-docs): improve sidebar shorthand normalization error message (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6602",children:"#6602"})," feat(content-docs): allow omitting enclosing array consistently for category shorthand (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6596",children:"#6596"})," refactor(content-docs): clean up sidebars logic; validate generator returns (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6586",children:"#6586"})," refactor(content-docs): read category metadata files before autogenerating (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6730",children:"#6730"})," refactor: declare all props as interfaces (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6711",children:"#6711"})," chore(theme-translations): complete Korean translations (",(0,i.jsx)(s.a,{href:"https://github.com/revi",children:"@revi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6686",children:"#6686"})," fix(theme-translations): improve Korean translations (",(0,i.jsx)(s.a,{href:"https://github.com/winterlood",children:"@winterlood"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6635",children:"#6635"})," refactor(theme-translation): improve Traditional Chinese translation quality (",(0,i.jsx)(s.a,{href:"https://github.com/toto6038",children:"@toto6038"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6674",children:"#6674"})," fix(theme-classic): improve aria label of color mode toggle (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6668",children:"#6668"})," refactor: recommend using data-theme without html element selector (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6622",children:"#6622"})," refactor(theme-classic): clean up CSS of doc sidebar item (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6644",children:"#6644"})," fix(core): forward ref to Link's anchor element (",(0,i.jsx)(s.a,{href:"https://github.com/koistya",children:"@koistya"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6646",children:"#6646"})," fix(cli): make docusaurus clear also remove .yarn/.cache folder (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6306",children:"#6306"})," feat(core): use react-helmet-async (",(0,i.jsx)(s.a,{href:"https://github.com/seyoon20087",children:"@seyoon20087"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6656",children:"#6656"})," feat: allow numbers in plugin ID (",(0,i.jsx)(s.a,{href:"https://github.com/cdemonchy-pro",children:"@cdemonchy-pro"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6650",children:"#6650"})," refactor(utils): replace hash with contenthash for file loader (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6615",children:"#6615"})," fix: remove more peer dependency warnings (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6598",children:"#6598"})," feat: make Markdown images lazy loaded (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6505",children:"#6505"})," fix(theme-classic): make focused link outlined with JS disabled (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6507",children:"#6507"})," refactor: improve internal typing (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6498",children:"#6498"})," fix: updating peerDependency fields for yarn berry (",(0,i.jsx)(s.a,{href:"https://github.com/vidarc",children:"@vidarc"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6482",children:"#6482"})," feat: mark some text labels as translatable (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6727",children:"#6727"})," docs: add Blog Matheus Brunelli site to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/mrbrunelli",children:"@mrbrunelli"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6721",children:"#6721"})," docs: add Butterfly Documentation to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/CodeDoctorDE",children:"@CodeDoctorDE"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6710",children:"#6710"})," docs(website): Add techharvesting to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/NaseelNiyas",children:"@NaseelNiyas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6708",children:"#6708"})," docs: add doc for generated-index keyword/image metadata (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6709",children:"#6709"})," docs(website): fix video responsiveness (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6687",children:"#6687"})," docs: add deep dive video for Docusaurus (",(0,i.jsx)(s.a,{href:"https://github.com/dmitryvinn",children:"@dmitryvinn"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6704",children:"#6704"})," docs(website): search doc typo searchParameters (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6682",children:"#6682"})," docs: add redux-cool site to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/Ruben-Arushanyan",children:"@Ruben-Arushanyan"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6677",children:"#6677"})," docs: add Rivalis to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/kalevski",children:"@kalevski"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6676",children:"#6676"})," docs: add SmartCookieWeb site to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/CookieJarApps",children:"@CookieJarApps"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6675",children:"#6675"})," docs: mention that all official themes are TypeScript-covered (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6673",children:"#6673"})," docs: mention about blog date in front matter (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6672",children:"#6672"})," refactor(website): extract homepage data from UI; feature text updates (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6670",children:"#6670"})," docs: add CyberDrain Improved Partner Portal (CIPP) to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6667",children:"#6667"})," fix(website): make YT iframe responsive (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6659",children:"#6659"})," docs: add eli5 video to home page (",(0,i.jsx)(s.a,{href:"https://github.com/dmitryvinn-fb",children:"@dmitryvinn-fb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6633",children:"#6633"})," docs: improve wording of using Markdown file paths (",(0,i.jsx)(s.a,{href:"https://github.com/BigDataWriter",children:"@BigDataWriter"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6624",children:"#6624"})," docs: add Resoto & Some Engineering Inc. to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6611",children:"#6611"})," docs: fix bad anchor link syntax (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6591",children:"#6591"})," docs: improve GitHub Actions example jobs (",(0,i.jsx)(s.a,{href:"https://github.com/ebarojas",children:"@ebarojas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6426",children:"#6426"})," feat(website): add Tweets section (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6532",children:"#6532"})," docs: add SAP Cloud SDK to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/artemkovalyov",children:"@artemkovalyov"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6513",children:"#6513"})," docs: clean up CONTRIBUTING (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6501",children:"#6501"})," docs: add Cloudflare pages deployment guide (",(0,i.jsx)(s.a,{href:"https://github.com/apidev234",children:"@apidev234"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6499",children:"#6499"})," docs: mention how env vars can be read (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6492",children:"#6492"})," docs: mention where to find the sitemap (",(0,i.jsx)(s.a,{href:"https://github.com/tamalweb",children:"@tamalweb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6491",children:"#6491"})," docs: add developers.verida to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/nick-verida",children:"@nick-verida"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6414",children:"#6414"})," feat(website): new plugin to load CHANGELOG and render as blog (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6404",children:"#6404"})," docs: elaborate on Markdown asset linking; document pathname:// protocol (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6484",children:"#6484"})," docs: remove mention that CDN resources are cached cross-domain (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6429",children:"#6429"})," refactor: self-host KaTeX assets (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6483",children:"#6483"})," docs: mark a lot of website texts as translatable (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6627",children:"#6627"})," docs: fix presets documentation link (",(0,i.jsx)(s.a,{href:"https://github.com/thedanielhanke",children:"@thedanielhanke"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6759",children:"#6759"})," refactor(theme-classic): merge CSS files for Heading (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6584",children:"#6584"})," misc: enable jsx-key eslint rule (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6756",children:"#6756"})," test: sort migration test FS mock calls (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6609",children:"#6609"})," refactor(migrate): change internal methods' parameter style (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6476",children:"#6476"})," chore: fix Stylelint globs for editor support (",(0,i.jsx)(s.a,{href:"https://github.com/nschonni",children:"@nschonni"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6744",children:"#6744"})," fix(content-docs): properly display collocated social card image (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6742",children:"#6742"})," refactor: improve client modules types (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6741",children:"#6741"})," chore(module-type-aliases): add react as peer dependency (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6658",children:"#6658"})," refactor(module-aliases): remove react-helmet dependency (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6726",children:"#6726"})," misc: improve bug report template (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6512",children:"#6512"})," misc: configure linguist behavior to show better language stats (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6487",children:"#6487"})," chore: fix codesandbox example link + mention npm publish recovery (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6486",children:"#6486"})," chore: update examples for beta.15 (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6485",children:"#6485"})," fix(website): bad translate tags without default translation (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6716",children:"#6716"})," refactor: ensure lodash is default-imported (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6661",children:"#6661"})," refactor: convert CLI entry points to ESM; migrate create-docusaurus to ESM (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6651",children:"#6651"})," refactor: reduce exported members of docusaurus router (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6629",children:"#6629"})," refactor: move module declarations for non-route components to theme-classic (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6614",children:"#6614"})," refactor: remove Babel plugins that are included in preset-env (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6605",children:"#6605"})," chore: fix ESLint warnings, restrict export all syntax (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6583",children:"#6583"})," refactor(live-codeblock): migrate theme to TS (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6524",children:"#6524"})," refactor: enforce named capture groups; clean up regexes (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6521",children:"#6521"})," refactor: mark all functions that import external modules as async (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-logger"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),", ",(0,i.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6514",children:"#6514"})," chore: clean up ESLint config, enable a few rules (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6511",children:"#6511"})," refactor(core): convert theme-fallback to TS (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6506",children:"#6506"})," test: add test for readOutputHTMLFile (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6502",children:"#6502"})," refactor: fix all eslint warnings (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6474",children:"#6474"})," test: rename 'fixtures' to '",(0,i.jsx)(s.strong,{children:"fixtures"}),"' (",(0,i.jsx)(s.a,{href:"https://github.com/nschonni",children:"@nschonni"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"running-performance",children:":running: Performance"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/6725",children:"#6725"})," refactor: convert all fs methods to async (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-38",children:"Committers: 38"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Artem Kovalov (",(0,i.jsx)(s.a,{href:"https://github.com/artemkovalyov",children:"@artemkovalyov"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Balthasar Hofer (",(0,i.jsx)(s.a,{href:"https://github.com/lebalz",children:"@lebalz"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Clement Demonchy (",(0,i.jsx)(s.a,{href:"https://github.com/cdemonchy-pro",children:"@cdemonchy-pro"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["CodeDoctor (",(0,i.jsx)(s.a,{href:"https://github.com/CodeDoctorDE",children:"@CodeDoctorDE"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Daniel Hanke (",(0,i.jsx)(s.a,{href:"https://github.com/thedanielhanke",children:"@thedanielhanke"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Daniel Kalevski (",(0,i.jsx)(s.a,{href:"https://github.com/kalevski",children:"@kalevski"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dmitry Vinnik (",(0,i.jsx)(s.a,{href:"https://github.com/dmitryvinn",children:"@dmitryvinn"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Dmitry Vinnik | Meta (",(0,i.jsx)(s.a,{href:"https://github.com/dmitryvinn-fb",children:"@dmitryvinn-fb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Erick Zhao (",(0,i.jsx)(s.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Everardo J. Barojas M. (",(0,i.jsx)(s.a,{href:"https://github.com/ebarojas",children:"@ebarojas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Felipe Santos (",(0,i.jsx)(s.a,{href:"https://github.com/felipecrs",children:"@felipecrs"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Gaurish (",(0,i.jsx)(s.a,{href:"https://github.com/apidev234",children:"@apidev234"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Hong Yongmin (",(0,i.jsx)(s.a,{href:"https://github.com/revi",children:"@revi"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jody Heavener (",(0,i.jsx)(s.a,{href:"https://github.com/jodyheavener",children:"@jodyheavener"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["John Reilly (",(0,i.jsx)(s.a,{href:"https://github.com/johnnyreilly",children:"@johnnyreilly"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Kishan Gajera (",(0,i.jsx)(s.a,{href:"https://github.com/kgajera",children:"@kgajera"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Konstantin Tarkus (",(0,i.jsx)(s.a,{href:"https://github.com/koistya",children:"@koistya"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Matheus Ricardo Brunelli (",(0,i.jsx)(s.a,{href:"https://github.com/mrbrunelli",children:"@mrbrunelli"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Matthew Ailes (",(0,i.jsx)(s.a,{href:"https://github.com/vidarc",children:"@vidarc"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Mikey O'Toole (",(0,i.jsx)(s.a,{href:"https://github.com/homotechsual",children:"@homotechsual"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Miles Johnson (",(0,i.jsx)(s.a,{href:"https://github.com/milesj",children:"@milesj"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Muhammad Redho Ayassa (",(0,i.jsx)(s.a,{href:"https://github.com/redhoyasa",children:"@redhoyasa"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Naseel Niyas (",(0,i.jsx)(s.a,{href:"https://github.com/NaseelNiyas",children:"@NaseelNiyas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Nick Schonning (",(0,i.jsx)(s.a,{href:"https://github.com/nschonni",children:"@nschonni"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Pranab Das (",(0,i.jsx)(s.a,{href:"https://github.com/pranabdas",children:"@pranabdas"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ruben Arushanyan (",(0,i.jsx)(s.a,{href:"https://github.com/Ruben-Arushanyan",children:"@Ruben-Arushanyan"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tamal Web (",(0,i.jsx)(s.a,{href:"https://github.com/tamalweb",children:"@tamalweb"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Yangshun Tay (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/BigDataWriter",children:"@BigDataWriter"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/CookieJarApps",children:"@CookieJarApps"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/TheCatLady",children:"@TheCatLady"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/nick-verida",children:"@nick-verida"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/seyoon20087",children:"@seyoon20087"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/toto6038",children:"@toto6038"})}),"\n",(0,i.jsxs)(s.li,{children:["\uc774\uc815\ud658 (",(0,i.jsx)(s.a,{href:"https://github.com/winterlood",children:"@winterlood"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(t,{...e})}):t(e)}},71670:(e,s,c)=>{c.d(s,{Z:()=>r,a:()=>n});var i=c(27378);const o={},h=i.createContext(o);function n(e){const s=i.useContext(h);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:n(e.components),i.createElement(h.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c055727.037a184c.js b/assets/js/6c055727.037a184c.js new file mode 100644 index 0000000000..8b60f24151 --- /dev/null +++ b/assets/js/6c055727.037a184c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34653],{55769:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>n,default:()=>u,frontMatter:()=>t,metadata:()=>h,toc:()=>l});var o=r(24246),i=r(71670);const t={mdx:{format:"md"},date:"2021-05-12T20:00",authors:["ChrisOwen101","DigiPie","forresst","gianu","joelhans","Josh-Cena","KostyaTretyak","nam-hle","rodmoreno","slorber","yiliansource"]},n="2.0.0-beta.0",h={permalink:"/changelog/2.0.0-beta.0",source:"@site/changelog/source/2.0.0-beta.0.md",title:"2.0.0-beta.0",description:"Read the 2.0.0 beta blog post!",date:"2021-05-12T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Chris Owen",alias:"ChrisOwen101",url:"https://github.com/ChrisOwen101",imageURL:"https://github.com/ChrisOwen101.png",key:"ChrisOwen101"},{name:"Evan",alias:"DigiPie",url:"https://github.com/DigiPie",imageURL:"https://github.com/DigiPie.png",key:"DigiPie"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Sergio Rafael Gianazza",alias:"gianu",url:"https://github.com/gianu",imageURL:"https://github.com/gianu.png",key:"gianu"},{name:"Joel Hans",alias:"joelhans",url:"https://github.com/joelhans",imageURL:"https://github.com/joelhans.png",key:"joelhans"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a",alias:"KostyaTretyak",url:"https://github.com/KostyaTretyak",imageURL:"https://github.com/KostyaTretyak.png",key:"KostyaTretyak"},{name:"Nam Hoang Le",alias:"nam-hle",url:"https://github.com/nam-hle",imageURL:"https://github.com/nam-hle.png",key:"nam-hle"},{name:"Rodrigo Moreno",alias:"rodmoreno",url:"https://github.com/rodmoreno",imageURL:"https://github.com/rodmoreno.png",key:"rodmoreno"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Ian Hornik",alias:"yiliansource",url:"https://github.com/yiliansource",imageURL:"https://github.com/yiliansource.png",key:"yiliansource"}],frontMatter:{mdx:{format:"md"},date:"2021-05-12T20:00",authors:["ChrisOwen101","DigiPie","forresst","gianu","joelhans","Josh-Cena","KostyaTretyak","nam-hle","rodmoreno","slorber","yiliansource"]},unlisted:!1,prevItem:{title:"2.0.0-beta.1",permalink:"/changelog/2.0.0-beta.1"},nextItem:{title:"2.0.0-alpha.75",permalink:"/changelog/2.0.0-alpha.75"},listPageLink:"/changelog/page/2"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 11",id:"committers-11",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(s.p,{children:["Read the ",(0,o.jsx)(s.a,{href:"https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta",children:"2.0.0 beta blog post"}),"!"]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Note"}),": this first beta release does not contain any new major feature. We are removing the alpha label, as we are confident Docusaurus 2 is stable enough."]}),"\n",(0,o.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4762",children:"#4762"})," feat(v2): add es translations for docusaurus-theme-classic (",(0,o.jsx)(s.a,{href:"https://github.com/rodmoreno",children:"@rodmoreno"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4750",children:"#4750"})," fix(v2): improve french translation for theme-classic (",(0,o.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,o.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4736",children:"#4736"})," fix(v2): fix encoding of markdown image/file inline file-loaders (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4735",children:"#4735"})," fix(v2): markdown title parser should ignore all forms of MDX import statements (",(0,o.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4729",children:"#4729"})," fix(v2): optimize markdown parser regex (Closes ",(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/issues/4726",children:"#4726"}),") (",(0,o.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4770",children:"#4770"})," docs(v2): Improve intro doc (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4773",children:"#4773"})," docs(v2): fix i18n doc: bad i18n page plugin path in code sample (",(0,o.jsx)(s.a,{href:"https://github.com/KostyaTretyak",children:"@KostyaTretyak"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4758",children:"#4758"})," docs(v2): add browsers support documentation (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4757",children:"#4757"})," docs(v2): Add Netdata to showcase (",(0,o.jsx)(s.a,{href:"https://github.com/joelhans",children:"@joelhans"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4754",children:"#4754"})," docs(v2): fix Jest showcase screenshot (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4747",children:"#4747"})," docs(v2): Update showcase page (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4734",children:"#4734"})," docs(v2): Added MediaMachine.io to showcase (",(0,o.jsx)(s.a,{href:"https://github.com/gianu",children:"@gianu"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4731",children:"#4731"})," docs(v2): add CodeYourFuture to showcase (",(0,o.jsx)(s.a,{href:"https://github.com/ChrisOwen101",children:"@ChrisOwen101"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4703",children:"#4703"})," docs(v2): specify google-analytics and gtag plugins (",(0,o.jsx)(s.a,{href:"https://github.com/yiliansource",children:"@yiliansource"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4727",children:"#4727"})," docs(v2): fix doc lint (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4725",children:"#4725"})," docs(v2): emphasize subset of markdown supported languages (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4711",children:"#4711"})," docs(v2): showcase personal site evantay (",(0,o.jsx)(s.a,{href:"https://github.com/DigiPie",children:"@DigiPie"}),")"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4746",children:"#4746"})," chore(v2): attempt to fix crowdin dl again (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4743",children:"#4743"})," chore(v2): fix prod deployment due to bad image path (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4740",children:"#4740"})," chore(v2): delay i18n-staging deployment to avoid Crowdin 409 errors (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4739",children:"#4739"})," chore(v2): Fix Crowdin 409 issues in CI (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"committers-11",children:"Committers: 11"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Chris Owen (",(0,o.jsx)(s.a,{href:"https://github.com/ChrisOwen101",children:"@ChrisOwen101"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Evan (",(0,o.jsx)(s.a,{href:"https://github.com/DigiPie",children:"@DigiPie"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Forresst (",(0,o.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Ian Hornik (",(0,o.jsx)(s.a,{href:"https://github.com/yiliansource",children:"@yiliansource"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Joel Hans (",(0,o.jsx)(s.a,{href:"https://github.com/joelhans",children:"@joelhans"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Joshua Chen (",(0,o.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Nam Hoang Le (",(0,o.jsx)(s.a,{href:"https://github.com/nam-hle",children:"@nam-hle"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Rodrigo Moreno (",(0,o.jsx)(s.a,{href:"https://github.com/rodmoreno",children:"@rodmoreno"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["Sergio Rafael Gianazza (",(0,o.jsx)(s.a,{href:"https://github.com/gianu",children:"@gianu"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,o.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,o.jsxs)(s.li,{children:["\u041a\u043e\u0441\u0442\u044f \u0422\u0440\u0435\u0442\u044f\u043a (",(0,o.jsx)(s.a,{href:"https://github.com/KostyaTretyak",children:"@KostyaTretyak"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>h,a:()=>n});var o=r(27378);const i={},t=o.createContext(i);function n(e){const s=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),o.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c065aab.a2e047ba.js b/assets/js/6c065aab.a2e047ba.js new file mode 100644 index 0000000000..197bb1d494 --- /dev/null +++ b/assets/js/6c065aab.a2e047ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[22888],{61132:(e,t,r)=>{r.d(t,{Z:()=>s});var n=r(24246),o=(r(27378),r(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>E});var n=r(24246),o=r(27378),c=r(40624),s=r(75527),i=r(3620),l=r(44479),a=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function f(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function h(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return f(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const r=(0,i.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,a._X)(n),s=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[c,s]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,c=h(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:c}))),[a,u]=y({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),f=(()=>{const e=null!=a?a:p;return m({value:e,tabValues:c})?e:null})();(0,l.Z)((()=>{f&&i(f)}),[f]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=r(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){v(e,t,r[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function P({className:e,block:t,selectedValue:r,selectValue:o,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,s.o5)(),u=e=>{const t=e.currentTarget,n=l.indexOf(t),c=i[n].value;c!==r&&(a(t),o(c))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;var r;t=null!==(r=l[n])&&void 0!==r?r:l[0];break}case"ArrowLeft":{const r=l.indexOf(e.currentTarget)-1;var n;t=null!==(n=l[r])&&void 0!==n?n:l[l.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",x(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>l.push(e),onKeyDown:d,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:r}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function S(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,n.jsx)(P,w({},e,t)),(0,n.jsx)(k,w({},e,t))]})}function E(e){const t=(0,j.Z)();return(0,n.jsx)(S,x(w({},e),{children:f(e.children)}),String(t))}},94544:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(24246),o=(r(27378),r(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,n.jsx)(n.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,r)=>{r.d(t,{Z:()=>u});var n=r(24246),o=r(27378),c=r(80474),s=r(3620);const i={apiTable:"apiTable_e8hp"};function l({name:e,children:t},r){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),l=e?`${e}-${i}`:i,a=`#${l}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(l),(0,n.jsx)("tr",{id:l,tabIndex:0,ref:u.location.hash===a?r:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(a)},onKeyDown:e=>{"Enter"===e.key&&u.push(a)},children:t.props.children})}const a=o.forwardRef(l);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[r,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const l=o.Children.map(c.props.children,(e=>(0,n.jsx)(a,{name:t,ref:s,children:e})));return(0,n.jsxs)("table",{className:i.apiTable,children:[r,(0,n.jsx)("tbody",{children:l})]})}},82064:(e,t,r)=>{r.d(t,{Z:()=>d});var n=r(24246),o=(r(27378),r(41428)),c=r(92053),s=r(36712),i=r(97555),l=r(61132),a=r(38112);const u=void 0;function d({code:e,pluginName:t,presetOptionName:r}){const d=(0,c.zu)(u).path;return(0,n.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,n.jsxs)(l.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,n.jsx)(o.Z,{to:`${d}/using-plugins#docusauruspreset-classic`,children:(0,n.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,n.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${r}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,n.jsxs)(l.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,n.jsx)("p",{children:(0,n.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,n.jsx)(a.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,r)=>{r.d(t,{Z:()=>_e});var n={};r.r(n),r.d(n,{ButtonExample:()=>Z});var o=r(24246),c=r(27378),s=r(40624),i=r(29088),l=r(32711),a=r(36712),u=r(4423),d=r(94544),p=r(30691),b=r(78844),f=r(73919);function h(){const{prism:e}=(0,f.L)(),{colorMode:t}=(0,b.I)(),r=e.theme,n=e.darkTheme||r;return"dark"===t?n:r}var m=r(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function g(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){g(e,t,r[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function v(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(p.Ac,j({},e)),children:(0,o.jsx)(l.i5,{})}),(0,o.jsx)(l.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(l.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:r,transformCode:n}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,a=h();var d;const p=null!==(d=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(l.nu,O(j({code:null==r?void 0:r.replace(/\n$/,""),noInline:p,transformCode:null!=n?n:D,theme:a},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){C(e,t,r[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Z(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const T=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){L(e,t,r[t])}))}return e}({React:c},c,n);var _,A,V=r(89583),$=r(6324),R=r.n($);function M(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(z=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){M(e,t,r[t])}))}return e}({},W),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(W);function Q(e,t){const r=e.map((e=>{const{start:r,end:n}=F[e];return`(?:${r}\\s*(${t.flatMap((e=>{var t,r;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(r=e.block)||void 0===r?void 0:r.end].filter(Boolean)})).join("|")})\\s*${n})`})).join("|");return new RegExp(`^\\s*(?:${r})\\s*$`)}function X(e,t){let r=e.replace(/\n$/,"");const{language:n,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,n=R()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(n),code:r}}if(void 0===n)return{lineClassNames:{},code:r};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Q(["js","jsBlock"],t);case"jsx":case"tsx":return Q(["js","jsBlock","jsx"],t);case"html":return Q(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Q(["bash"],t);case"markdown":case"md":return Q(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Q(["tex"],t);case"lua":case"haskell":case"sql":return Q(["lua"],t);case"wasm":return Q(["wasm"],t);case"vb":case"vba":case"visual-basic":return Q(["vb","rem"],t);case"vbnet":return Q(["vbnet","rem"],t);case"batch":return Q(["rem"],t);case"basic":return Q(["rem","f90"],t);case"fsharp":return Q(["js","ml"],t);case"ocaml":case"sml":return Q(["ml"],t);case"fortran":return Q(["f90"],t);case"cobol":return Q(["cobol"],t);default:return Q(G,t)}}(n,o),i=r.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?l[a[t]].range+=`${b},`:u[t]?l[u[t]].start=b:d[t]&&(l[d[t]].range+=`${l[d[t]].start}-${b-1},`),i.splice(b,1)}r=i.join("\n");const p={};return Object.entries(l).forEach((([e,{range:t}])=>{R()(t).forEach((t=>{var r;null!==(r=(_=p)[A=t])&&void 0!==r||(_[A]=[]),p[t].push(e)}))})),{lineClassNames:p,code:r}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function ee(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function te(e){var{as:t}=e,r=ee(e,["as"]);const n=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},r={};return Object.entries(e.plain).forEach((([e,n])=>{const o=t[e];o&&"string"==typeof n&&(r[o]=n)})),r}(h());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){J(e,t,r[t])}))}return e}({},r),{style:n,className:(0,s.Z)(r.className,Y.codeBlockContainer,V.k.common.codeBlock)}))}const re={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function ne({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(re.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:re.codeBlockLines,children:e})})}var oe=r(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[r,n]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;n(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,n]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,r=ce){const n=(0,oe.zX)(t),o=(0,oe.Ql)(r);(0,c.useEffect)((()=>{const t=new MutationObserver(n);return e&&t.observe(e,o),()=>t.disconnect()}),[e,n,o])}(r,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=r(26101);const le={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ae(e,t,r[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function pe({line:e,classNames:t,showLineNumbers:r,getLineProps:n,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=n({line:e,className:(0,s.Z)(t,r&&le.codeLine)}),l=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},i),{children:[r?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:le.codeLineNumber}),(0,o.jsx)("span",{className:le.codeLineContent,children:l})]}):l,(0,o.jsx)("br",{})]}))}var be=r(34370);function fe(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function he(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function me(e){return(0,o.jsx)("svg",he(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){fe(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function je(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){ye(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[r,n]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),l=(0,c.useCallback)((()=>{(0,be.Z)(e),n(!0),i.current=window.setTimeout((()=>{n(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":r?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,r&&Oe.copyButtonCopied),onClick:l,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){we(e,t,r[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:r}){const n=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,r&&ke.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:r,title:n,showLineNumbers:i,language:l}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,f.L)();var d;const p=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=l?l:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=h(),m=function(){const[e,t]=(0,c.useState)(!1),[r,n]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const r=o.current.querySelector("code");e?r.removeAttribute("style"):(r.style.whiteSpace="pre-wrap",r.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,r=e>t||o.current.querySelector("code").hasAttribute("style");n(r)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:r,toggle:s}}(),y=function(e){var t,r;return null!==(r=null===(t=null==e?void 0:e.match(q))||void 0===t?void 0:t.groups.title)&&void 0!==r?r:""}(r)||n,{lineClassNames:g,code:j}=X(e,{metastring:r,language:p,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,p&&!t.includes(`language-${p}`)&&`language-${p}`),children:[y&&(0,o.jsx)("div",{className:re.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:re.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=p?p:"text",children:({className:e,style:t,tokens:r,getLineProps:n,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,re.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(re.codeBlockLines,O&&re.codeBlockLinesWithNumbering),children:r.map(((e,t)=>(0,o.jsx)(pe,{line:e,getLineProps:n,getTokenProps:c,classNames:g[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:re.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Se,{className:re.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(ve,{className:re.codeButton,code:j})]})]})]})}function De(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function Ce(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},c=Object.keys(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n<c.length;n++)r=c[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Be(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ie(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Be(e,t,r[t])}))}return e}const Ze=(Le=function(e){var{children:t}=e,r=Ce(e,["children"]);const n=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof s?Ee:ne;return(0,o.jsx)(l,Ne(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){De(e,t,r[t])}))}return e}({},r),{children:s}),String(n))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:T},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function Te(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _e(e){return(0,o.jsx)(Ze,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){Te(e,t,r[t])}))}return e}({},e))}},21827:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var n=r(24246),o=r(71670),c=r(97555),s=r(61132),i=r(52605),l=r(82064);const a={sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},u="\ud83d\udce6 theme-classic",d={id:"api/themes/theme-classic",title:"\ud83d\udce6 theme-classic",description:"The classic theme for Docusaurus.",source:"@site/docs/api/themes/theme-classic.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-classic.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:2,frontMatter:{sidebar_position:2,slug:"/api/themes/@docusaurus/theme-classic"},sidebar:"api",previous:{title:"Configuration",permalink:"/docs/api/themes/configuration"},next:{title:"\ud83d\udce6 theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock"}},p={},b=[{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function f(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"-theme-classic",children:"\ud83d\udce6 theme-classic"}),"\n","\n",(0,n.jsx)(t.p,{children:"The classic theme for Docusaurus."}),"\n",(0,n.jsxs)(t.p,{children:["You can refer to the ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration page"})," for more details on the configuration."]}),"\n",(0,n.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(s.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-classic\n"})})}),(0,n.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-classic\n"})})})]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you have installed ",(0,n.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install it as a dependency."]})}),"\n",(0,n.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,n.jsx)(i.Z,{children:(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Option"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Default"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"customCss"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)("code",{children:"string[] | string"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"[]"})}),(0,n.jsxs)(t.td,{children:["Stylesheets to be imported globally as ",(0,n.jsx)(t.a,{href:"/docs/advanced/client#client-modules",children:"client modules"}),". Relative paths are resolved against the site directory."]})]})})]})}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["Most configuration for the theme is done in ",(0,n.jsx)(t.code,{children:"themeConfig"}),", which can be found in ",(0,n.jsx)(t.a,{href:"/docs/api/themes/configuration",children:"theme configuration"}),"."]})}),"\n",(0,n.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,n.jsx)(t.p,{children:"You can configure this theme through preset options or plugin options."}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,n.jsx)(l.Z,{pluginName:"@docusaurus/theme-classic",presetOptionName:"theme",code:"{\n customCss: './src/css/custom.css',\n}"})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(f,{...e})}):f(e)}}}]); \ No newline at end of file diff --git a/assets/js/6c1df059.5b29fae5.js b/assets/js/6c1df059.5b29fae5.js new file mode 100644 index 0000000000..f2a155df77 --- /dev/null +++ b/assets/js/6c1df059.5b29fae5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76532],{605:(o,t,e)=>{e.r(t),e.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var a=e(24246),n=e(71670);const r={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",author:"Christine Abernathy",authorURL:"http://twitter.com/abernathyca",authorImageURL:"https://github.com/caabernathy.png",authorTwitter:"abernathyca",tags:["profilo","adoption"]},i=void 0,s={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{label:"profilo",permalink:"/blog/tags/profilo"},{label:"adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://twitter.com/abernathyca",imageURL:"https://github.com/caabernathy.png"}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",author:"Christine Abernathy",authorURL:"http://twitter.com/abernathyca",authorImageURL:"https://github.com/caabernathy.png",authorTwitter:"abernathyca",tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},u={authorsImageUrls:[void 0]},c=[];function d(o){const t={a:"a",blockquote:"blockquote",em:"em",p:"p",...(0,n.a)(),...o.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t.blockquote,{children:["\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["This is the story of the rather short journey it took to create the ",(0,a.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,a.jsxs)(t.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,a.jsx)(t.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,a.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,a.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]})]})}function h(o={}){const{wrapper:t}={...(0,n.a)(),...o.components};return t?(0,a.jsx)(t,{...o,children:(0,a.jsx)(d,{...o})}):d(o)}},71670:(o,t,e)=>{e.d(t,{Z:()=>s,a:()=>i});var a=e(27378);const n={},r=a.createContext(n);function i(o){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function s(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:i(o.components),a.createElement(r.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ca75a11.99479b9d.js b/assets/js/6ca75a11.99479b9d.js new file mode 100644 index 0000000000..7361b543f0 --- /dev/null +++ b/assets/js/6ca75a11.99479b9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32165],{99866:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});var o=s(24246),i=s(71670);const r={slug:"/migration/v2/versioned-sites"},d="Versioned sites",t={id:"migration/v2/migration-versioned-sites",title:"Versioned sites",description:"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1's approach.",source:"@site/docs/migration/v2/migration-versioned-sites.mdx",sourceDirName:"migration/v2",slug:"/migration/v2/versioned-sites",permalink:"/docs/migration/v2/versioned-sites",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v2/migration-versioned-sites.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1697737112e3,frontMatter:{slug:"/migration/v2/versioned-sites"},sidebar:"docs",previous:{title:"Manual migration",permalink:"/docs/migration/v2/manual"},next:{title:"Translated sites",permalink:"/docs/migration/v2/translated-sites"}},l={},a=[{value:"Migrate your <code>versioned_docs</code> front matter",id:"migrate-your-versioned_docs-front-matter",level:2},{value:"Migrate your <code>versioned_sidebars</code>",id:"migrate-your-versioned_sidebars",level:2},{value:"Populate your <code>versioned_sidebars</code> and <code>versioned_docs</code>",id:"populate-your-versioned_sidebars-and-versioned_docs",level:2},{value:"Convert style attributes to style objects in MDX",id:"convert-style-attributes-to-style-objects-in-mdx",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"versioned-sites",children:"Versioned sites"}),"\n",(0,o.jsxs)(n.p,{children:["Read up ",(0,o.jsx)(n.a,{href:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning",children:"https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning"})," first for problems in v1's approach."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["The versioned docs should normally be migrated correctly by the ",(0,o.jsx)(n.a,{href:"/docs/migration/v2/automated",children:"migration CLI"})]})}),"\n",(0,o.jsxs)(n.h2,{id:"migrate-your-versioned_docs-front-matter",children:["Migrate your ",(0,o.jsx)(n.code,{children:"versioned_docs"})," front matter"]}),"\n",(0,o.jsxs)(n.p,{children:["Unlike v1, The Markdown header for each versioned doc is no longer altered by using ",(0,o.jsx)(n.code,{children:"version-${version}-${original_id}"})," as the value for the actual ID field. See scenario below for better explanation."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if you have a ",(0,o.jsx)(n.code,{children:"docs/hello.md"}),"."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["When you cut a new version 1.0.0, in Docusaurus v1, ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["In comparison, Docusaurus 2 ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})," looks like this (exactly same as original)"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: hello\ntitle: Hello, World !\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Since we're going for snapshot and allow people to move (and edit) docs easily inside version. The ",(0,o.jsx)(n.code,{children:"id"})," front matter is no longer altered and will remain the same. Internally, it is set as ",(0,o.jsx)(n.code,{children:"version-${version}/${id}"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Essentially, here are the necessary changes in each versioned_docs file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",metastring:"{2-3,5}",children:"---\n- id: version-1.0.0-hello\n+ id: hello\ntitle: Hello, World !\n- original_id: hello\n---\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.h2,{id:"migrate-your-versioned_sidebars",children:["Migrate your ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Refer to ",(0,o.jsx)(n.code,{children:"versioned_docs"})," ID as ",(0,o.jsx)(n.code,{children:"version-${version}/${id}"})," (v2) instead of ",(0,o.jsx)(n.code,{children:"version-${version}-${original_id}"})," (v1)."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Because in v1 there is a good chance someone created a new file with front matter ID ",(0,o.jsx)(n.code,{children:'"version-${version}-${id}"'})," that can conflict with ",(0,o.jsx)(n.code,{children:"versioned_docs"})," ID."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, Docusaurus 1 can't differentiate ",(0,o.jsx)(n.code,{children:"docs/xxx.md"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\n---\n\nAnother content\n"})}),"\n",(0,o.jsxs)(n.p,{children:["vs ",(0,o.jsx)(n.code,{children:"website/versioned_docs/version-1.0.0/hello.md"})]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-md",children:"---\nid: version-1.0.0-hello\ntitle: Hello, World !\noriginal_id: hello\n---\n\nHi, Endilie here :)\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Since we don't allow ",(0,o.jsx)(n.code,{children:"/"})," in v1 & v2 for front matter, conflicts are less likely to occur."]}),"\n",(0,o.jsx)(n.p,{children:"So v1 users need to migrate their versioned_sidebars file"}),"\n",(0,o.jsxs)(n.p,{children:["Example ",(0,o.jsx)(n.code,{children:"versioned_sidebars/version-1.0.0-sidebars.json"}),":"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",metastring:'{2-3,5-6,9-10} title="versioned_sidebars/version-1.0.0-sidebars.json"',children:'{\n+ "version-1.0.0/docs": {\n- "version-1.0.0-docs": {\n "Test": [\n+ "version-1.0.0/foo/bar",\n- "version-1.0.0-foo/bar",\n ],\n "Guides": [\n+ "version-1.0.0/hello",\n- "version-1.0.0-hello"\n ]\n }\n}\n'})}),"\n",(0,o.jsxs)(n.h2,{id:"populate-your-versioned_sidebars-and-versioned_docs",children:["Populate your ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})," and ",(0,o.jsx)(n.code,{children:"versioned_docs"})]}),"\n",(0,o.jsxs)(n.p,{children:["In v2, we use snapshot approach for documentation versioning. ",(0,o.jsx)(n.strong,{children:"Every versioned docs does not depends on other version"}),". It is possible to have ",(0,o.jsx)(n.code,{children:"foo.md"})," in ",(0,o.jsx)(n.code,{children:"version-1.0.0"})," but it doesn't exist in ",(0,o.jsx)(n.code,{children:"version-1.2.0"}),". This is not possible in previous version due to Docusaurus v1 fallback functionality (",(0,o.jsx)(n.a,{href:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality",children:"https://v1.docusaurus.io/docs/en/versioning#fallback-functionality"}),")."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if your ",(0,o.jsx)(n.code,{children:"versions.json"})," looks like this in v1"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",metastring:'title="versions.json"',children:'["1.1.0", "1.0.0"]\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Docusaurus v1 creates versioned docs ",(0,o.jsx)(n.strong,{children:"if and only if the doc content is different"}),". Your docs structure might look like this if the only doc changed from v1.0.0 to v1.1.0 is ",(0,o.jsx)(n.code,{children:"hello.md"}),"."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,o.jsxs)(n.p,{children:["In v2, you have to populate the missing ",(0,o.jsx)(n.code,{children:"versioned_docs"})," and ",(0,o.jsx)(n.code,{children:"versioned_sidebars"})," (with the right front matter and ID reference too)."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:"{3-5,12}",children:"website\n\u251c\u2500\u2500 versioned_docs\n\u2502 \u251c\u2500\u2500 version-1.1.0\n\u2502 \u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2502 \u2514\u2500\u2500 hello.md\n\u2502 \u2514\u2500\u2500 version-1.0.0\n\u2502 \u251c\u2500\u2500 foo\n\u2502 \u2502 \u2514\u2500\u2500 bar.md\n\u2502 \u2514\u2500\u2500 hello.md\n\u251c\u2500\u2500 versioned_sidebars\n\u2502 \u251c\u2500\u2500 version-1.1.0-sidebars.json\n\u2502 \u2514\u2500\u2500 version-1.0.0-sidebars.json\n"})}),"\n",(0,o.jsx)(n.h2,{id:"convert-style-attributes-to-style-objects-in-mdx",children:"Convert style attributes to style objects in MDX"}),"\n",(0,o.jsx)(n.p,{children:"Docusaurus 2 uses JSX for doc files. If you have any style attributes in your Docusaurus 1 docs, convert them to style objects, like this:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",children:"---\nid: demo\ntitle: Demo\n---\n\n## Section\n\nhello world\n\n- pre style=\"background: black\">zzz</pre>\n+ pre style={{background: 'black'}}>zzz</pre>\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>d});var o=s(27378);const i={},r=o.createContext(i);function d(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e08c139.c0589b06.js b/assets/js/6e08c139.c0589b06.js new file mode 100644 index 0000000000..bbd3fa4990 --- /dev/null +++ b/assets/js/6e08c139.c0589b06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89177],{36367:(e,r,s)=>{s.d(r,{Z:()=>t});const t=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},37358:(e,r,s)=>{s.d(r,{Z:()=>t});const t=s.p+"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},15691:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var t=s(24246),n=s(71670);const i={title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},a=void 0,o={permalink:"/blog/preparing-your-site-for-docusaurus-v3",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",source:"@site/blog/2023/09-29-preparing-your-site-for-docusaurus-v3/index.mdx",title:"Preparing your site for Docusaurus v3",description:"Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.",date:"2023-09-29T00:00:00.000Z",tags:[{label:"maintenance",permalink:"/blog/tags/maintenance"}],readingTime:13.745,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Preparing your site for Docusaurus v3",authors:["slorber"],tags:["maintenance"],slug:"/preparing-your-site-for-docusaurus-v3",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Announcing Docusaurus 3.0",permalink:"/blog/releases/3.0"},nextItem:{title:"Upgrading frontend dependencies with confidence",permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing"}},c={image:s(36367).Z,authorsImageUrls:[void 0]},u=[];function d(e){const r={a:"a",img:"img",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.strong,{children:"Docusaurus v3"})," is now ",(0,t.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:(0,t.jsx)(r.strong,{children:"in beta"})})," and the official release is around the corner. This is the perfect time to start ",(0,t.jsx)(r.strong,{children:"preparing your site"})," for this new major version."]}),"\n",(0,t.jsxs)(r.p,{children:["Docusaurus v3 comes with a few ",(0,t.jsx)(r.strong,{children:"breaking changes"}),", many of which can be ",(0,t.jsx)(r.strong,{children:"handled today under Docusaurus v2"}),". Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3."]}),"\n",(0,t.jsxs)(r.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,t.jsx)(r.a,{href:"https://mdxjs.com/blog/v2/",children:(0,t.jsx)(r.strong,{children:"MDX v2"})})," and ",(0,t.jsx)(r.a,{href:"https://mdxjs.com/blog/v3/",children:(0,t.jsx)(r.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,t.jsx)(r.strong,{children:"more strictly"})," and with ",(0,t.jsx)(r.strong,{children:"subtle differences"}),"."]}),"\n",(0,t.jsx)(r.p,{children:"This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today."}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Preparing your site for Docusaurus v3 - social card",src:s(37358).Z+"",width:"1040",height:"546"})})]})}function l(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},71670:(e,r,s)=>{s.d(r,{Z:()=>o,a:()=>a});var t=s(27378);const n={},i=t.createContext(n);function a(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e7f3c19.f985a095.js b/assets/js/6e7f3c19.f985a095.js new file mode 100644 index 0000000000..545b6ccef9 --- /dev/null +++ b/assets/js/6e7f3c19.f985a095.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78645],{61132:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(40624));const c={tabItem:"tabItem_pnkT"};function s({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(c.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>E});var r=n(24246),o=n(27378),c=n(40624),s=n(75527),i=n(3620),a=n(44479),l=n(62821),u=n(52196),p=n(53589);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function g(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return g(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h({value:e,tabValues:t}){return t.some((t=>t.value===e))}function y({queryString:e=!1,groupId:t}){const n=(0,i.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),c=(0,l._X)(r),s=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[c,s]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,c=f(e),[s,i]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!h({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:c}))),[l,u]=y({queryString:n,groupId:r}),[d,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,p.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),g=(()=>{const e=null!=l?l:d;return h({value:e,tabValues:c})?e:null})();(0,a.Z)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!h({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),b(e)}),[u,b,c]),tabValues:c}}var j=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){v(e,t,n[t])}))}return e}function x(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function P({className:e,block:t,selectedValue:n,selectValue:o,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.o5)(),u=e=>{const t=e.currentTarget,r=a.indexOf(t),c=i[r].value;c!==n&&(l(t),o(c))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=a.indexOf(e.currentTarget)+1;var n;t=null!==(n=a[r])&&void 0!==n?n:a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;var r;t=null!==(r=a[n])&&void 0!==r?r:a[a.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,c.Z)("tabs",{"tabs--block":t},e),children:i.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",x(w({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>a.push(e),onKeyDown:p,onClick:u},o),{className:(0,c.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function k({lazy:e,children:t,selectedValue:n}){const c=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=c.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:c.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function S(e){const t=m(e);return(0,r.jsxs)("div",{className:(0,c.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(P,w({},e,t)),(0,r.jsx)(k,w({},e,t))]})}function E(e){const t=(0,j.Z)();return(0,r.jsx)(S,x(w({},e),{children:g(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(29088));function c({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},52605:(e,t,n)=>{n.d(t,{Z:()=>u});var r=n(24246),o=n(27378),c=n(80474),s=n(3620);const i={apiTable:"apiTable_e8hp"};function a({name:e,children:t},n){const i=function(e){let t=e;for(;(0,o.isValidElement)(t);)[t]=o.Children.toArray(t.props.children);if("string"!=typeof t)throw new Error(`Could not extract APITable row name from JSX tree:\n${JSON.stringify(e,null,2)}`);return t}(t),a=e?`${e}-${i}`:i,l=`#${a}`,u=(0,s.k6)();return(0,c.Z)().collectAnchor(a),(0,r.jsx)("tr",{id:a,tabIndex:0,ref:u.location.hash===l?n:void 0,onClick:e=>{"A"===e.target.tagName.toUpperCase()||u.push(l)},onKeyDown:e=>{"Enter"===e.key&&u.push(l)},children:t.props.children})}const l=o.forwardRef(a);function u({children:e,name:t}){if("table"!==e.type)throw new Error("Bad usage of APITable component.\nIt is probably that your Markdown table is malformed.\nMake sure to double-check you have the appropriate number of columns for each table row.");const[n,c]=o.Children.toArray(e.props.children),s=(0,o.useRef)(null);(0,o.useEffect)((()=>{var e;null===(e=s.current)||void 0===e||e.focus()}),[s]);const a=o.Children.map(c.props.children,(e=>(0,r.jsx)(l,{name:t,ref:s,children:e})));return(0,r.jsxs)("table",{className:i.apiTable,children:[n,(0,r.jsx)("tbody",{children:a})]})}},82064:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(24246),o=(n(27378),n(41428)),c=n(92053),s=n(36712),i=n(97555),a=n(61132),l=n(38112);const u=void 0;function p({code:e,pluginName:t,presetOptionName:n}){const p=(0,c.zu)(u).path;return(0,r.jsxs)(i.Z,{groupId:"api-config-ex",children:[(0,r.jsxs)(a.Z,{value:"preset",label:(0,s.I)({message:"Preset options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"apiDocs.configTabs.presetOptions.description",values:{presetLink:(0,r.jsx)(o.Z,{to:`${p}/using-plugins#docusauruspreset-classic`,children:(0,r.jsx)(s.Z,{children:"preset options"})})},children:"If you use a preset, configure this plugin through the {presetLink}:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n // highlight-start\n ${n}: ${e.replace(/\n/g,"\n ")},\n // highlight-end\n },\n ],\n ],\n};`})]}),(0,r.jsxs)(a.Z,{value:"plugin",label:(0,s.I)({message:"Plugin options"}),children:[(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{children:"If you are using a standalone plugin, provide options directly to the plugin:"})}),(0,r.jsx)(l.Z,{language:"js",title:"docusaurus.config.js",children:`module.exports = {\n plugins: [\n [\n '${t}',\n // highlight-start\n ${e.replace(/\n/g,"\n ")},\n // highlight-end\n ],\n ],\n};`})]})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>_e});var r={};n.r(r),n.d(r,{ButtonExample:()=>T});var o=n(24246),c=n(27378),s=n(40624),i=n(29088),a=n(32711),l=n(36712),u=n(4423),p=n(94544),d=n(30691),b=n(78844),g=n(73919);function f(){const{prism:e}=(0,g.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var h=n(88941);const y={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){m(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w({children:e}){return(0,o.jsx)("div",{className:(0,s.Z)(y.playgroundHeader),children:e})}function x(){return(0,o.jsx)("div",{children:"Loading..."})}function P(){return(0,o.jsx)(p.Z,{fallback:(0,o.jsx)(x,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(h.Z,{fallback:e=>(0,o.jsx)(d.Ac,j({},e)),children:(0,o.jsx)(a.i5,{})}),(0,o.jsx)(a.IF,{})]})})}function k(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:y.playgroundPreview,children:(0,o.jsx)(P,{})})]})}function S(){const e=(0,i.Z)();return(0,o.jsx)(a.uz,{className:y.playgroundEditor},String(e))}function E(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(w,{children:(0,o.jsx)(l.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(S,{})]})}const D=e=>`${e};`;function N(e){var t,{children:n,transformCode:r}=e,c=v(e,["children","transformCode"]);const{siteConfig:{themeConfig:s}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:i}}=s,l=f();var p;const d=null!==(p=null===(t=c.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==p&&p;return(0,o.jsx)("div",{className:y.playgroundContainer,children:(0,o.jsx)(a.nu,O(j({code:null==n?void 0:n.replace(/\n$/,""),noInline:d,transformCode:null!=r?r:D,theme:l},c),{children:"top"===i?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(k,{}),(0,o.jsx)(E,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(E,{}),(0,o.jsx)(k,{})]})}))})}function C(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){C(e,t,n[t])}))}return e}function I(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function T(e){return(0,o.jsx)("button",I(B({type:"button"},e),{style:B({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:c},c,r);var _,A,V=n(89583),$=n(6324),M=n.n($);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const q=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),H=RegExp("\\{(?<range>[\\d,-]+)\\}"),W={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},F=(G=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},W),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(G,Object.getOwnPropertyDescriptors(U)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(U)).forEach((function(e){Object.defineProperty(G,e,Object.getOwnPropertyDescriptor(U,e))})),G);var G,U;const z=Object.keys(W);function Y(e,t){const n=e.map((e=>{const{start:n,end:r}=F[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:c}=t;if(c&&H.test(c)){const e=c.match(H).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=M()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return Y(["js","jsBlock"],t);case"jsx":case"tsx":return Y(["js","jsBlock","jsx"],t);case"html":return Y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return Y(["bash"],t);case"markdown":case"md":return Y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return Y(["tex"],t);case"lua":case"haskell":case"sql":return Y(["lua"],t);case"wasm":return Y(["wasm"],t);case"vb":case"vba":case"visual-basic":return Y(["vb","rem"],t);case"vbnet":return Y(["vbnet","rem"],t);case"batch":return Y(["rem"],t);case"basic":return Y(["rem","f90"],t);case"fsharp":return Y(["js","ml"],t);case"ocaml":case"sml":return Y(["ml"],t);case"fortran":return Y(["f90"],t);case"cobol":return Y(["cobol"],t);default:return Y(z,t)}}(r,o),i=n.split("\n"),a=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),p=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<i.length;){const e=i[b].match(s);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?a[l[t]].range+=`${b},`:u[t]?a[u[t]].start=b:p[t]&&(a[p[t]].range+=`${a[p[t]].start}-${b-1},`),i.splice(b,1)}n=i.join("\n");const d={};return Object.entries(a).forEach((([e,{range:t}])=>{M()(t).forEach((t=>{var n;null!==(n=(_=d)[A=t])&&void 0!==n||(_[A]=[]),d[t].push(e)}))})),{lineClassNames:d,code:n}}const X={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(f());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,s.Z)(n.className,X.codeBlockContainer,V.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,s.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const ce={attributes:!0,characterData:!0,childList:!0,subtree:!0};function se(e,t){const[n,r]=(0,c.useState)(),o=(0,c.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,c.useEffect)((()=>{o()}),[o]),function(e,t,n=ce){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,c.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var ie=n(26101);const ae={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function le(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){le(e,t,n[t])}))}return e}function pe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function de({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:c}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const i=r({line:e,className:(0,s.Z)(t,n&&ae.codeLine)}),a=e.map(((e,t)=>(0,o.jsx)("span",ue({},c({token:e,key:t})),t)));return(0,o.jsxs)("span",pe(ue({},i),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ae.codeLineNumber}),(0,o.jsx)("span",{className:ae.codeLineContent,children:a})]}):a,(0,o.jsx)("br",{})]}))}var be=n(34370);function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ge(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function je(e){return(0,o.jsx)("svg",me(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ye(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function ve({code:e,className:t}){const[n,r]=(0,c.useState)(!1),i=(0,c.useRef)(void 0),a=(0,c.useCallback)((()=>{(0,be.Z)(e),r(!0),i.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,c.useEffect)((()=>()=>window.clearTimeout(i.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,l.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,l.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,l.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:a,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(he,{className:Oe.copyButtonIcon}),(0,o.jsx)(je,{className:Oe.copyButtonSuccessIcon})]})})}function we(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Pe(e){return(0,o.jsx)("svg",xe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){we(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ke={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Se({className:e,onClick:t,isEnabled:n}){const r=(0,l.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,s.Z)("clean-btn",e,n&&ke.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(Pe,{className:ke.wordWrapButtonIcon,"aria-hidden":"true"})})}function Ee({children:e,className:t="",metastring:n,title:r,showLineNumbers:i,language:a}){const{prism:{defaultLanguage:l,magicComments:u}}=(0,g.L)();var p;const d=function(e){return null==e?void 0:e.toLowerCase()}(null!==(p=null!=a?a:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==p?p:l),b=f(),h=function(){const[e,t]=(0,c.useState)(!1),[n,r]=(0,c.useState)(!1),o=(0,c.useRef)(null),s=(0,c.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,c.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return se(o,i),(0,c.useEffect)((()=>{i()}),[e,i]),(0,c.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:s}}(),y=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(q))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:m,code:j}=Q(e,{metastring:n,language:d,magicComments:u}),O=null!=i?i:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,s.Z)(t,d&&!t.includes(`language-${d}`)&&`language-${d}`),children:[y&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:y}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(ie.y$,{theme:b,code:j,language:null!=d?d:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:c})=>(0,o.jsx)("pre",{tabIndex:0,ref:h.codeBlockRef,className:(0,s.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,s.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(de,{line:e,getLineProps:r,getTokenProps:c,classNames:m[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(h.isEnabled||h.isCodeScrollable)&&(0,o.jsx)(Se,{className:ne.codeButton,onClick:()=>h.toggle(),isEnabled:h.isEnabled}),(0,o.jsx)(ve,{className:ne.codeButton,code:j})]})]})]})}function De(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function Ce(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Be(e,t,n[t])}))}return e}const Te=(Le=function(e){var{children:t}=e,n=Ce(e,["children"]);const r=(0,i.Z)(),s=function(e){return c.Children.toArray(e).some((e=>(0,c.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),a="string"==typeof s?Ee:re;return(0,o.jsx)(a,Ne(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){De(e,t,n[t])}))}return e}({},n),{children:s}),String(r))},function(e){return e.live?(0,o.jsx)(N,Ie({scope:Z},e)):(0,o.jsx)(Le,Ie({},e))});var Le;function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _e(e){return(0,o.jsx)(Te,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ze(e,t,n[t])}))}return e}({},e))}},19531:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>l,metadata:()=>p,toc:()=>b});var r=n(24246),o=n(71670),c=n(97555),s=n(61132),i=n(52605),a=n(82064);const l={sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},u="\ud83d\udce6 plugin-google-tag-manager",p={id:"api/plugins/plugin-google-tag-manager",title:"\ud83d\udce6 plugin-google-tag-manager",description:"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.",source:"@site/docs/api/plugins/plugin-google-tag-manager.mdx",sourceDirName:"api/plugins",slug:"/api/plugins/@docusaurus/plugin-google-tag-manager",permalink:"/docs/api/plugins/@docusaurus/plugin-google-tag-manager",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugins/plugin-google-tag-manager.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,sidebarPosition:8,frontMatter:{sidebar_position:8,slug:"/api/plugins/@docusaurus/plugin-google-tag-manager"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-google-gtag",permalink:"/docs/api/plugins/@docusaurus/plugin-google-gtag"},next:{title:"\ud83d\udce6 plugin-ideal-image",permalink:"/docs/api/plugins/@docusaurus/plugin-ideal-image"}},d={},b=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example configuration",id:"ex-config",level:3}];function g(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-plugin-google-tag-manager",children:"\ud83d\udce6 plugin-google-tag-manager"}),"\n","\n",(0,r.jsxs)(t.p,{children:["A plugin for adding ",(0,r.jsx)(t.a,{href:"https://developers.google.com/tag-platform/tag-manager",children:"Google Tag Manager (gtm.js)"})," to a Docusaurus site. Use this plugin in conjunction with the standard ",(0,r.jsx)(t.a,{href:"/docs/api/plugins/@docusaurus/plugin-google-gtag",children:"gtag plugin"})," for in-depth analysis of how users are using your site."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can use ",(0,r.jsx)(t.a,{href:"https://tagassistant.google.com/",children:"Google's Tag Assistant"})," tool to check if tag manager is set up correctly!"]})}),"\n",(0,r.jsx)(t.admonition,{title:"production only",type:"warning",children:(0,r.jsxs)(t.p,{children:["This plugin is always inactive in development and ",(0,r.jsx)(t.strong,{children:"only active in production"})," to avoid polluting the analytics statistics."]})}),"\n",(0,r.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(c.Z,{groupId:"npm2yarn",children:[(0,r.jsx)(s.Z,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/plugin-google-tag-manager\n"})})}),(0,r.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/plugin-google-tag-manager\n"})})})]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["If you use the preset ",(0,r.jsx)(t.code,{children:"@docusaurus/preset-classic"}),", you don't need to install this plugin as a dependency."]}),(0,r.jsxs)(t.p,{children:["You can configure this plugin through the ",(0,r.jsx)(t.a,{href:"/docs/using-plugins#docusauruspreset-classic",children:"preset options"}),"."]})]}),"\n",(0,r.jsx)(t.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(t.p,{children:"Accepted fields:"}),"\n",(0,r.jsx)(i.Z,{children:(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Default"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"containerId"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"string"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Required"})}),(0,r.jsxs)(t.td,{children:["Your Tag Manager container Id (usually starts with ",(0,r.jsx)(t.code,{children:"GTM-"}),")."]})]})})]})}),"\n",(0,r.jsx)(t.h3,{id:"ex-config",children:"Example configuration"}),"\n",(0,r.jsx)(t.p,{children:"You can configure this plugin through preset options or plugin options."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"Most Docusaurus users configure this plugin through the preset options."})}),"\n","\n",(0,r.jsx)(a.Z,{pluginName:"@docusaurus/plugin-google-tag-manager",presetOptionName:"googleTagManager",code:"{\n containerId: 'GTM-12345',\n}"})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(g,{...e})}):g(e)}}}]); \ No newline at end of file diff --git a/assets/js/6e8cf259.47295472.js b/assets/js/6e8cf259.47295472.js new file mode 100644 index 0000000000..045a0767f0 --- /dev/null +++ b/assets/js/6e8cf259.47295472.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[92206],{70573:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=a(24246),o=a(71670);const s={},r=void 0,d={type:"mdx",permalink:"/tests/pages/head-metadata",source:"@site/_dogfooding/_pages tests/head-metadata.mdx",description:"Head Metadata tests",frontMatter:{},lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/head-metadata.mdx",unlisted:!1},i={},c=[{value:"Head Metadata tests",id:"head-metadata-tests",level:2}];function m(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components},{Head:a}=t;return a||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"head-metadata-tests",children:"Head Metadata tests"}),"\n",(0,n.jsx)(t.p,{children:"This page declares the following custom head metadata:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:'<head>\n <meta name="generator" value="custom generator name!" />\n <meta name="viewport" content="initial-scale=1, viewport-fit=cover" />\n <meta name="robots" content="noindex, nofollow, my-extra-directive" />\n</head>\n'})}),"\n",(0,n.jsxs)(a,{children:[(0,n.jsx)("meta",{name:"generator",value:"custom generator name!"}),(0,n.jsx)("meta",{name:"viewport",content:"initial-scale=1, viewport-fit=cover"}),(0,n.jsx)("meta",{name:"robots",content:"noindex, nofollow, my-extra-directive"})]})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},71670:(e,t,a)=>{a.d(t,{Z:()=>d,a:()=>r});var n=a(27378);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6f742216.551853eb.js b/assets/js/6f742216.551853eb.js new file mode 100644 index 0000000000..a4feb35497 --- /dev/null +++ b/assets/js/6f742216.551853eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[57262],{8975:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>i,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=s(24246),o=s(71670);const a={tags:["a","e","some-tag","some_tag"]},r="Another test page",c={id:"more-test",title:"Another test page",description:"Test link",source:"@site/_dogfooding/_docs tests/more-test.mdx",sourceDirName:".",slug:"/more-test",permalink:"/tests/docs/more-test",draft:!1,unlisted:!1,tags:[{label:"a",permalink:"/tests/docs/tags/a"},{label:"e",permalink:"/tests/docs/tags/e"},{label:"some-tag",permalink:"/tests/docs/tags/some-tag"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{tags:["a","e","some-tag","some_tag"]},sidebar:"sidebar",previous:{title:"Another category with index",permalink:"/tests/docs/category/another-category-with-index"},next:{title:"toc-2-2",permalink:"/tests/docs/toc/toc-2-2"}},i={},d=[];function l(t){const e={a:"a",h1:"h1",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"another-test-page",children:"Another test page"}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"/tests/docs/folder%20with%20space/doc%201",children:"Test link"})})]})}function p(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(l,{...t})}):l(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>r});var n=s(27378);const o={},a=n.createContext(o);function r(t){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:r(t.components),n.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/6f86cacb.27551759.js b/assets/js/6f86cacb.27551759.js new file mode 100644 index 0000000000..cb7ef54337 --- /dev/null +++ b/assets/js/6f86cacb.27551759.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[88367],{35795:e=>{e.exports=JSON.parse('{"tag":{"label":"a","permalink":"/tests/docs/tags/a","allTagsPath":"/tests/docs/tags","count":1,"items":[{"id":"more-test","title":"Another test page","description":"Test link","permalink":"/tests/docs/more-test"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/6fc50b01.674bfd0e.js b/assets/js/6fc50b01.674bfd0e.js new file mode 100644 index 0000000000..ba4eb29fca --- /dev/null +++ b/assets/js/6fc50b01.674bfd0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29313],{73772:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=s(24246),o=s(71670);const r={title:"Test if href in feed resolved correctly"},i=void 0,a={permalink:"/tests/blog/2023/07/19/a",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2023-07-19-a.mdx",source:"@site/_dogfooding/_blog tests/2023-07-19-a.mdx",title:"Test if href in feed resolved correctly",description:"absolute full url",date:"2023-07-19T00:00:00.000Z",tags:[],readingTime:2.2,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Test if href in feed resolved correctly"},unlisted:!1,prevItem:{title:"Ensure heading anchor slugs respect GitHub emoji behavior",permalink:"/tests/blog/2023/08/05/"},nextItem:{title:"Test Relative Path",permalink:"/tests/blog/2023/07/19/b"}},l={authorsImageUrls:[]},c=[];function u(e){const t={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://github.com/facebook/docusaurus",children:"absolute full url"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/tests/blog/2023/07/19/b",children:"absolute url with implicit domain name"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/tests/blog/2023/07/19/b",children:"relative url"})})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>i});var n=s(27378);const o={},r=n.createContext(o);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/701b6ec8.c3c3b264.js b/assets/js/701b6ec8.c3c3b264.js new file mode 100644 index 0000000000..550d48516c --- /dev/null +++ b/assets/js/701b6ec8.c3c3b264.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24212],{18766:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>r,frontMatter:()=>h,metadata:()=>n,toc:()=>m});var o=t(24246),i=t(71670);const h={mdx:{format:"md"},date:"2020-03-08T19:00",authors:["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},s="2.0.0-alpha.44",n={permalink:"/changelog/2.0.0-alpha.44",source:"@site/changelog/source/2.0.0-alpha.44.md",title:"2.0.0-alpha.44",description:"New Feature",date:"2020-03-08T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Amila Welihinda",alias:"amilajack",url:"https://github.com/amilajack",imageURL:"https://github.com/amilajack.png",key:"amilajack"},{name:"Paulus Schoutsen",alias:"balloob",url:"https://github.com/balloob",imageURL:"https://github.com/balloob.png",key:"balloob"},{name:"Robert",alias:"deniaz",url:"https://github.com/deniaz",imageURL:"https://github.com/deniaz.png",key:"deniaz"},{name:"Hassan Farid",alias:"hassanfarid",url:"https://github.com/hassanfarid",imageURL:"https://github.com/hassanfarid.png",key:"hassanfarid"},{name:"jartuso",alias:"jartuso",url:"https://github.com/jartuso",imageURL:"https://github.com/jartuso.png",key:"jartuso"},{name:"JavaScript Joe",alias:"jsjoeio",url:"https://github.com/jsjoeio",imageURL:"https://github.com/jsjoeio.png",key:"jsjoeio"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Mohamed Abdel Nasser",alias:"mohamedsgap",url:"https://github.com/mohamedsgap",imageURL:"https://github.com/mohamedsgap.png",key:"mohamedsgap"},{name:"Noah Silvera",alias:"Noah-Silvera",url:"https://github.com/Noah-Silvera",imageURL:"https://github.com/Noah-Silvera.png",key:"Noah-Silvera"},{name:"Linus L\xe5ngberg",alias:"phoqe",url:"https://github.com/phoqe",imageURL:"https://github.com/phoqe.png",key:"phoqe"},{name:"Ram\xf3n Lamana",alias:"rlamana",url:"https://github.com/rlamana",imageURL:"https://github.com/rlamana.png",key:"rlamana"},{name:"Sylvain Pace",alias:"s-pace",url:"https://github.com/s-pace",imageURL:"https://github.com/s-pace.png",key:"s-pace"},{name:"Scott Lee",alias:"scottilee",url:"https://github.com/scottilee",imageURL:"https://github.com/scottilee.png",key:"scottilee"},{name:"Theodore Chu",alias:"TheodoreChu",url:"https://github.com/TheodoreChu",imageURL:"https://github.com/TheodoreChu.png",key:"TheodoreChu"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Zhenchao Cai",alias:"Zhencha0Cai",url:"https://github.com/Zhencha0Cai",imageURL:"https://github.com/Zhencha0Cai.png",key:"Zhencha0Cai"}],frontMatter:{mdx:{format:"md"},date:"2020-03-08T19:00",authors:["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.48",permalink:"/changelog/2.0.0-alpha.48"},nextItem:{title:"2.0.0-alpha.43",permalink:"/changelog/2.0.0-alpha.43"},listPageLink:"/changelog/page/4"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function u(a){return(0,o.jsx)(o.Fragment,{})}function r(a={}){const{wrapper:e}={...(0,i.a)(),...a.components};return e?(0,o.jsx)(e,{...a,children:(0,o.jsx)(u,{...a})}):u()}},71670:(a,e,t)=>{t.d(e,{Z:()=>n,a:()=>s});var o=t(27378);const i={},h=o.createContext(i);function s(a){const e=o.useContext(h);return o.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function n(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(i):a.components||i:s(a.components),o.createElement(h.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/7033176a.91984814.js b/assets/js/7033176a.91984814.js new file mode 100644 index 0000000000..91971aacf4 --- /dev/null +++ b/assets/js/7033176a.91984814.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91971],{79442:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-07-21T20:00"},c="2.0.0-alpha.23",s={permalink:"/changelog/2.0.0-alpha.23",source:"@site/changelog/source/2.0.0-alpha.23.md",title:"2.0.0-alpha.23",description:"- Fix docusaurus route config generation for certain edge case",date:"2019-07-21T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-21T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.24",permalink:"/changelog/2.0.0-alpha.24"},nextItem:{title:"2.0.0-alpha.22",permalink:"/changelog/2.0.0-alpha.22"},listPageLink:"/changelog/page/5"},i={authorsImageUrls:[]},l=[];function u(e){const t={li:"li",ul:"ul",...(0,o.a)(),...e.components};return(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Fix docusaurus route config generation for certain edge case"}),"\n"]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>c});var a=n(27378);const o={},r=a.createContext(o);function c(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/704bae10.f7e68b3c.js b/assets/js/704bae10.f7e68b3c.js new file mode 100644 index 0000000000..5dee96edb5 --- /dev/null +++ b/assets/js/704bae10.f7e68b3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[46119],{48732:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>o,default:()=>r,frontMatter:()=>l,metadata:()=>h,toc:()=>m});var i=t(24246),n=t(71670);const l={mdx:{format:"md"},date:"2020-07-24T20:00",authors:["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},o="2.0.0-alpha.59",h={permalink:"/changelog/2.0.0-alpha.59",source:"@site/changelog/source/2.0.0-alpha.59.md",title:"2.0.0-alpha.59",description:"New Feature",date:"2020-07-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Mahfoudh Arous",alias:"aladin002dz",url:"https://github.com/aladin002dz",imageURL:"https://github.com/aladin002dz.png",key:"aladin002dz"},{name:"Eric Dobbertin",alias:"aldeed",url:"https://github.com/aldeed",imageURL:"https://github.com/aldeed.png",key:"aldeed"},{name:"Amirul Ahmad",alias:"amirulahmad",url:"https://github.com/amirulahmad",imageURL:"https://github.com/amirulahmad.png",key:"amirulahmad"},{name:"Anshul Goyal",alias:"anshulrgoyal",url:"https://github.com/anshulrgoyal",imageURL:"https://github.com/anshulrgoyal.png",key:"anshulrgoyal"},{name:"Ayan Banerjee",alias:"ayan-b",url:"https://github.com/ayan-b",imageURL:"https://github.com/ayan-b.png",key:"ayan-b"},{name:"Jeremy Asuncion",alias:"codemonkey800",url:"https://github.com/codemonkey800",imageURL:"https://github.com/codemonkey800.png",key:"codemonkey800"},{name:"Daniel Hochman",alias:"danielhochman",url:"https://github.com/danielhochman",imageURL:"https://github.com/danielhochman.png",key:"danielhochman"},{name:"Deepak Giri",alias:"dpkg",url:"https://github.com/dpkg",imageURL:"https://github.com/dpkg.png",key:"dpkg"},{name:"ehsan jso",alias:"ehsanjso",url:"https://github.com/ehsanjso",imageURL:"https://github.com/ehsanjso.png",key:"ehsanjso"},{name:"Arsalan Khattak",alias:"eKhattak",url:"https://github.com/eKhattak",imageURL:"https://github.com/eKhattak.png",key:"eKhattak"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"matbub",alias:"hi-matbub",url:"https://github.com/hi-matbub",imageURL:"https://github.com/hi-matbub.png",key:"hi-matbub"},{name:"John Knox",alias:"jknoxville",url:"https://github.com/jknoxville",imageURL:"https://github.com/jknoxville.png",key:"jknoxville"},{name:"Jordan Liu",alias:"jordanliu",url:"https://github.com/jordanliu",imageURL:"https://github.com/jordanliu.png",key:"jordanliu"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"Paul Cowgill",alias:"pcowgill",url:"https://github.com/pcowgill",imageURL:"https://github.com/pcowgill.png",key:"pcowgill"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Frida Hjelm",alias:"svtfrida",url:"https://github.com/svtfrida",imageURL:"https://github.com/svtfrida.png",key:"svtfrida"},{name:"Taylor Allen",alias:"taylorallen0913",url:"https://github.com/taylorallen0913",imageURL:"https://github.com/taylorallen0913.png",key:"taylorallen0913"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Vandr\xe9 Leal",alias:"vandreleal",url:"https://github.com/vandreleal",imageURL:"https://github.com/vandreleal.png",key:"vandreleal"},{name:"Rian Finnegan",alias:"xtellurian",url:"https://github.com/xtellurian",imageURL:"https://github.com/xtellurian.png",key:"xtellurian"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-07-24T20:00",authors:["aladin002dz","aldeed","amirulahmad","anshulrgoyal","ayan-b","codemonkey800","danielhochman","dpkg","ehsanjso","eKhattak","francoischalifour","hi-matbub","jknoxville","jordanliu","lex111","nebrelbug","pcowgill","SamChou19815","slorber","svtfrida","taylorallen0913","teikjun","vandreleal","xtellurian","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.60",permalink:"/changelog/2.0.0-alpha.60"},nextItem:{title:"2.0.0-alpha.58",permalink:"/changelog/2.0.0-alpha.58"},listPageLink:"/changelog/page/3"},u={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},m=[];function s(a){return(0,i.jsx)(i.Fragment,{})}function r(a={}){const{wrapper:e}={...(0,n.a)(),...a.components};return e?(0,i.jsx)(e,{...a,children:(0,i.jsx)(s,{...a})}):s()}},71670:(a,e,t)=>{t.d(e,{Z:()=>h,a:()=>o});var i=t(27378);const n={},l=i.createContext(n);function o(a){const e=i.useContext(l);return i.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function h(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(n):a.components||n:o(a.components),i.createElement(l.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/706279d4.4b5ea275.js b/assets/js/706279d4.4b5ea275.js new file mode 100644 index 0000000000..d2593956c3 --- /dev/null +++ b/assets/js/706279d4.4b5ea275.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35718],{24239:(e,n,t)=>{t.d(n,{Z:()=>y});var r=t(24246),s=(t(27378),t(40624)),i=t(41876),a=t(41428),o=t(7812),l=t(64149),c=t(36712),d=t(52615);const h={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function u({href:e,children:n}){return(0,r.jsx)(a.Z,{href:e,className:(0,s.Z)("card padding--lg",h.cardContainer),children:n})}function g({href:e,icon:n,title:t,description:i}){return(0,r.jsxs)(u,{href:e,children:[(0,r.jsxs)(d.Z,{as:"h2",className:(0,s.Z)("text--truncate",h.cardTitle),title:t,children:[n," ",t]}),i&&(0,r.jsx)("p",{className:(0,s.Z)("text--truncate",h.cardDescription),title:i,children:i})]})}function p({item:e}){const n=(0,i.LM)(e),t=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,c.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n}))}();return n?(0,r.jsx)(g,{href:n,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(s=e.description)&&void 0!==s?s:t(e.items.length)}):null;var s}function m({item:e}){const n=(0,l.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var t;const s=(0,i.xz)(null!==(t=e.docId)&&void 0!==t?t:void 0);var a;return(0,r.jsx)(g,{href:e.href,icon:n,title:e.label,description:null!==(a=e.description)&&void 0!==a?a:null==s?void 0:s.description})}function b({item:e}){switch(e.type){case"link":return(0,r.jsx)(m,{item:e});case"category":return(0,r.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function j(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function x({className:e}){const n=(0,i.jA)();return(0,r.jsx)(y,{items:n.items,className:e})}function y(e){const{items:n,className:t}=e;if(!n)return(0,r.jsx)(x,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){j(e,n,t[n])}))}return e}({},e));const a=(0,i.MN)(n);return(0,r.jsx)("section",{className:(0,s.Z)("row",t),children:a.map(((e,n)=>(0,r.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,r.jsx)(b,{item:e})},n)))})}},61132:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),s=(t(27378),t(40624));const i={tabItem:"tabItem_pnkT"};function a({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.Z)(i.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>D});var r=t(24246),s=t(27378),i=t(40624),a=t(75527),o=t(3620),l=t(44479),c=t(62821),d=t(52196),h=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function g(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function p(e){var n,t;return null!==(t=null===(n=s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function m(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=null!=n?n:function(e){return p(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const t=(0,o.k6)(),r=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),i=(0,c._X)(r),a=(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(t.location.search);n.set(r,e),t.replace(g(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){u(e,n,t[n])}))}return e}({},t.location),{search:n.toString()}))}),[r,t]);return[i,a]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,i=m(e),[a,o]=(0,s.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const r=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[c,d]=j({queryString:t,groupId:r}),[u,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,r]=(0,h.Nk)(n);return[t,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:r}),p=(()=>{const e=null!=c?c:u;return b({value:e,tabValues:i})?e:null})();(0,l.Z)((()=>{p&&o(p)}),[p]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!b({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),g(e)}),[d,g,i]),tabValues:i}}var y=t(29088);const f={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function w(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function v(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){w(e,n,t[n])}))}return e}function k(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function O({className:e,block:n,selectedValue:t,selectValue:s,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.o5)(),d=e=>{const n=e.currentTarget,r=l.indexOf(n),i=o[r].value;i!==t&&(c(n),s(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const r=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[r])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var r;n=null!==(r=l[t])&&void 0!==r?r:l[l.length-1];break}}null==n||n.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},e),children:o.map((({value:e,label:n,attributes:s})=>(0,r.jsx)("li",k(v({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:h,onClick:d},s),{className:(0,i.Z)("tabs__item",f.tabItem,null==s?void 0:s.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function N({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function S(e){const n=x(e);return(0,r.jsxs)("div",{className:(0,i.Z)("tabs-container",f.tabList),children:[(0,r.jsx)(O,v({},e,n)),(0,r.jsx)(N,v({},e,n))]})}function D(e){const n=(0,y.Z)();return(0,r.jsx)(S,k(v({},e),{children:p(e.children)}),String(n))}},7812:(e,n,t)=>{t.d(n,{c:()=>c});var r=t(27378),s=t(4423);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((n=>e.includes(n)))}const o={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function l(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,r.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:a(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),o}}),[e])}function c(){const e=l();return{selectMessage:(n,t)=>function(e,n,t){const r=e.split("|");if(1===r.length)return r[0];r.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const s=t.select(n),i=t.pluralForms.indexOf(s);return r[Math.min(i,r.length-1)]}(t,n,e)}}},6698:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(24246),s=(t(27378),t(40624));const i={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){a(e,n,t[n])}))}return e}function l(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function c({children:e,minHeight:n,url:t="http://localhost:3000",style:a,bodyStyle:c}){return(0,r.jsxs)("div",{className:i.browserWindow,style:l(o({},a),{minHeight:n}),children:[(0,r.jsxs)("div",{className:i.browserWindowHeader,children:[(0,r.jsxs)("div",{className:i.buttons,children:[(0,r.jsx)("span",{className:i.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:i.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,s.Z)(i.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:i.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar}),(0,r.jsx)("span",{className:i.bar})]})})]}),(0,r.jsx)("div",{className:i.browserWindowBody,style:c,children:e})]})}},70946:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>g});var r=t(24246),s=t(71670),i=t(97555),a=t(61132),o=t(6698),l=t(24239);const c={toc_max_heading_level:4,slug:"/sidebar/items"},d="Sidebar items",h={id:"guides/docs/sidebar/items",title:"Sidebar items",description:"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.",source:"@site/docs/guides/docs/sidebar/items.mdx",sourceDirName:"guides/docs/sidebar",slug:"/sidebar/items",permalink:"/docs/sidebar/items",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/sidebar/items.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,frontMatter:{toc_max_heading_level:4,slug:"/sidebar/items"},sidebar:"docs",previous:{title:"Sidebar",permalink:"/docs/sidebar"},next:{title:"Autogenerated",permalink:"/docs/sidebar/autogenerated"}},u={},g=[{value:"Doc: link to a doc",id:"sidebar-item-doc",level:2},{value:"Link: link to any page",id:"sidebar-item-link",level:2},{value:"HTML: render custom markup",id:"sidebar-item-html",level:2},{value:"Category: create a hierarchy",id:"sidebar-item-category",level:2},{value:"Category links",id:"category-link",level:3},{value:"Generated index page",id:"generated-index-page",level:4},{value:"Doc link",id:"category-doc-link",level:4},{value:"Embedding generated index in doc page",id:"embedding-generated-index-in-doc-page",level:4},{value:"Collapsible categories",id:"collapsible-categories",level:3},{value:"Expanded categories by default",id:"expanded-categories-by-default",level:3},{value:"Using shorthands",id:"using-shorthands",level:2},{value:"Doc shorthand",id:"doc-shorthand",level:3},{value:"Category shorthand",id:"category-shorthand",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"sidebar-items",children:"Sidebar items"}),"\n","\n",(0,r.jsxs)(n.p,{children:["We have introduced three types of item types in the example in the previous section: ",(0,r.jsx)(n.code,{children:"doc"}),", ",(0,r.jsx)(n.code,{children:"category"}),", and ",(0,r.jsx)(n.code,{children:"link"}),", whose usages are fairly intuitive. We will formally introduce their APIs. There's also a fourth type: ",(0,r.jsx)(n.code,{children:"autogenerated"}),", which we will explain in detail later."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-doc",children:"Doc"})}),": link to a doc page, associating it with the sidebar"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-link",children:"Link"})}),": link to any internal or external page"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-category",children:"Category"})}),": creates a dropdown of sidebar items"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"Autogenerated"})}),": generate a sidebar slice automatically"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"#sidebar-item-html",children:"HTML"})}),": renders pure HTML in the item's position"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-item-ref",children:"*Ref"})}),": link to a doc page, without making the item take part in navigation generation"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-doc",children:"Doc: link to a doc"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"doc"})," type to link to a doc page and assign that doc to a sidebar:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemDoc =\n // Normal syntax\n | {\n type: 'doc';\n id: string;\n label: string; // Sidebar label text\n className?: string; // Class name for sidebar label\n customProps?: Record<string, unknown>; // Custom props\n }\n\n // Shorthand syntax\n | string; // docId shortcut\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // Normal syntax:\n // highlight-start\n {\n type: 'doc',\n id: 'doc1', // document ID\n label: 'Getting started', // sidebar label\n },\n // highlight-end\n\n // Shorthand syntax:\n // highlight-start\n 'doc2', // document ID\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["If you use the doc shorthand or ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated"})," sidebar, you would lose the ability to customize the sidebar label through item definition. You can, however, use the ",(0,r.jsx)(n.code,{children:"sidebar_label"})," Markdown front matter within that doc, which has higher precedence over the ",(0,r.jsx)(n.code,{children:"label"})," key in the sidebar item. Similarly, you can use ",(0,r.jsx)(n.code,{children:"sidebar_custom_props"})," to declare custom metadata for a doc page."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.code,{children:"doc"})," item sets an ",(0,r.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars#sidebar-association",children:"implicit sidebar association"}),". Don't assign the same doc to multiple sidebars: change the type to ",(0,r.jsx)(n.code,{children:"ref"})," instead."]})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Sidebar custom props is a useful way to propagate arbitrary doc metadata to the client side, so you can get additional information when using any doc-related hook that fetches a doc object."})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-link",children:"Link: link to any page"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"link"})," type to link to any page (internal or external) that is not a doc."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemLink = {\n type: 'link';\n label: string;\n href: string;\n className?: string;\n description?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myLinksSidebar: [\n // highlight-start\n // External link\n {\n type: 'link',\n label: 'Facebook', // The link label\n href: 'https://facebook.com', // The external URL\n },\n // highlight-end\n\n // highlight-start\n // Internal link\n {\n type: 'link',\n label: 'Home', // The link label\n href: '/', // The internal path\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-html",children:"HTML: render custom markup"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"html"})," type to render custom HTML within the item's ",(0,r.jsx)(n.code,{children:"<li>"})," tag."]}),"\n",(0,r.jsx)(n.p,{children:"This can be useful for inserting custom items such as dividers, section titles, ads, and images."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemHtml = {\n type: 'html';\n value: string;\n defaultStyle?: boolean; // Use default menu item styles\n className?: string;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n // highlight-start\n {\n type: 'html',\n value: '<img src=\"sponsor.png\" alt=\"Sponsor\" />', // The HTML to be rendered\n defaultStyle: true, // Use the default menu item styling\n },\n // highlight-end\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["The menu item is already wrapped in an ",(0,r.jsx)(n.code,{children:"<li>"})," tag, so if your custom item is simple, such as a title, just supply a string as the value and use the ",(0,r.jsx)(n.code,{children:"className"})," property to style it:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n myHtmlSidebar: [\n {\n type: 'html',\n value: 'Core concepts',\n className: 'sidebar-title',\n },\n ],\n};\n"})})]}),"\n",(0,r.jsx)(n.h2,{id:"sidebar-item-category",children:"Category: create a hierarchy"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"category"})," type to create a hierarchy of sidebar items."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"type SidebarItemCategory = {\n type: 'category';\n label: string; // Sidebar label text.\n items: SidebarItem[]; // Array of sidebar items.\n className?: string;\n description?: string;\n\n // Category options:\n collapsible: boolean; // Set the category to be collapsible\n collapsed: boolean; // Set the category to be initially collapsed or open by default\n link: SidebarItemCategoryLinkDoc | SidebarItemCategoryLinkGeneratedIndex;\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n collapsible: true,\n collapsed: false,\n items: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"shorthand syntax"})})," when you don't need customizations:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n Docs: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n};\n"})})]}),"\n",(0,r.jsx)(n.h3,{id:"category-link",children:"Category links"}),"\n",(0,r.jsx)(n.p,{children:"With category links, clicking on a category can navigate you to another page."}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"Use category links to introduce a category of documents."}),(0,r.jsxs)(n.p,{children:["Autogenerated categories can use the ",(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated#category-item-metadata",children:(0,r.jsx)(n.code,{children:"_category_.yml"})})," file to declare the link."]})]}),"\n",(0,r.jsx)(n.h4,{id:"generated-index-page",children:"Generated index page"}),"\n",(0,r.jsxs)(n.p,{children:["You can auto-generate an index page that displays all the direct children of this category. The ",(0,r.jsx)(n.code,{children:"slug"})," allows you to customize the generated page's route, which defaults to ",(0,r.jsx)(n.code,{children:"/category/[categoryName]"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {\n type: 'generated-index',\n title: 'Docusaurus Guides',\n description: 'Learn about the most important Docusaurus concepts!',\n slug: '/category/docusaurus-guides',\n keywords: ['guides'],\n image: '/img/docusaurus.png',\n },\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/category/guides",children:"Docusaurus Guides page"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"generated-index"})," links as a quick way to get an introductory document."]})}),"\n",(0,r.jsx)(n.h4,{id:"category-doc-link",children:"Doc link"}),"\n",(0,r.jsx)(n.p,{children:"A category can link to an existing document."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n // highlight-start\n link: {type: 'doc', id: 'introduction'},\n // highlight-end\n items: ['pages', 'docs', 'blog', 'search'],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See it in action on the ",(0,r.jsx)(n.a,{href:"/docs/i18n/introduction",children:"i18n introduction page"}),"."]}),"\n",(0,r.jsx)(n.h4,{id:"embedding-generated-index-in-doc-page",children:"Embedding generated index in doc page"}),"\n",(0,r.jsxs)(n.p,{children:["You can embed the generated cards list in a normal doc page as well with the ",(0,r.jsx)(n.code,{children:"DocCardList"})," component. It will display all the sidebar items of the parent category of the current document."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-md",metastring:'title="docs/sidebar/index.md"',children:"import DocCardList from '@theme/DocCardList';\n\n<DocCardList />\n"})}),"\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(l.Z,{})}),"\n",(0,r.jsx)(n.h3,{id:"collapsible-categories",children:"Collapsible categories"}),"\n",(0,r.jsxs)(n.p,{children:["We support the option to expand/collapse categories. Categories are collapsible by default, but you can disable collapsing with ",(0,r.jsx)(n.code,{children:"collapsible: false"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: [\n {\n type: 'category',\n label: 'Guides',\n items: [\n 'creating-pages',\n {\n type: 'category',\n // highlight-next-line\n collapsible: false,\n label: 'Docs',\n items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],\n },\n ],\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To make all categories non-collapsible by default, set the ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," option in ",(0,r.jsx)(n.code,{children:"plugin-content-docs"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsible: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The option in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," takes precedence over plugin configuration, so it is possible to make certain categories collapsible when ",(0,r.jsx)(n.code,{children:"sidebarCollapsible"})," is set to ",(0,r.jsx)(n.code,{children:"false"})," globally."]})}),"\n",(0,r.jsx)(n.h3,{id:"expanded-categories-by-default",children:"Expanded categories by default"}),"\n",(0,r.jsxs)(n.p,{children:["Collapsible categories are collapsed by default. If you want them to be expanded on the first render, you can set ",(0,r.jsx)(n.code,{children:"collapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n docs: {\n Guides: [\n 'creating-pages',\n {\n type: 'category',\n label: 'Docs',\n // highlight-next-line\n collapsed: false,\n items: ['markdown-features', 'sidebar', 'versioning'],\n },\n ],\n },\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Similar to ",(0,r.jsx)(n.code,{children:"collapsible"}),", you can also set the global configuration ",(0,r.jsx)(n.code,{children:"options.sidebarCollapsed"})," to ",(0,r.jsx)(n.code,{children:"false"}),". Individual ",(0,r.jsx)(n.code,{children:"collapsed"})," options in ",(0,r.jsx)(n.code,{children:"sidebars.js"})," will still take precedence over this configuration."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n sidebarCollapsed: false,\n },\n },\n ],\n ],\n};\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["When a category has ",(0,r.jsx)(n.code,{children:"collapsed: true"})," but ",(0,r.jsx)(n.code,{children:"collapsible: false"})," (either through ",(0,r.jsx)(n.code,{children:"sidebars.js"})," or through plugin configuration), the latter takes precedence and the category is still rendered as expanded."]})}),"\n",(0,r.jsx)(n.h2,{id:"using-shorthands",children:"Using shorthands"}),"\n",(0,r.jsxs)(n.p,{children:["You can express typical sidebar items without much customization more concisely with ",(0,r.jsx)(n.strong,{children:"shorthand syntaxes"}),". There are two parts to this: ",(0,r.jsx)(n.a,{href:"#doc-shorthand",children:(0,r.jsx)(n.strong,{children:"doc shorthand"})})," and ",(0,r.jsx)(n.a,{href:"#category-shorthand",children:(0,r.jsx)(n.strong,{children:"category shorthand"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"doc-shorthand",children:"Doc shorthand"}),"\n",(0,r.jsxs)(n.p,{children:["An item with type ",(0,r.jsx)(n.code,{children:"doc"})," can be simply a string representing its ID:"]}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'doc',\n id: 'myDoc',\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n 'myDoc',\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"So it's possible to simplify the example above to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n {\n type: 'category',\n label: 'Getting Started',\n items: [\n // highlight-next-line\n 'doc1',\n ],\n },\n {\n type: 'category',\n label: 'Docusaurus',\n items: [\n // highlight-start\n 'doc2',\n 'doc3',\n // highlight-end\n ],\n },\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.h3,{id:"category-shorthand",children:"Category shorthand"}),"\n",(0,r.jsx)(n.p,{children:"A category item can be represented by an object whose key is its label, and the value is an array of subitems."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Longhand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n type: 'category',\n label: 'Getting started',\n items: ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"Shorthand",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1', 'doc2'],\n },\n // highlight-end\n ],\n};\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"This permits us to simplify that example to:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n },\n {\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsx)(n.p,{children:"Each shorthand object after this transformation will contain exactly one entry. Now consider the further simplified example below:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n mySidebar: [\n // highlight-start\n {\n 'Getting started': ['doc1'],\n Docusaurus: ['doc2', 'doc3'],\n },\n // highlight-end\n {\n type: 'link',\n label: 'Learn more',\n href: 'https://example.com',\n },\n ],\n};\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Note how the two consecutive category shorthands are compressed into one object with two entries. This syntax generates a ",(0,r.jsx)(n.strong,{children:"sidebar slice"}),': you shouldn\'t see that object as one bulk item\u2014this object is unwrapped, with each entry becoming a separate item, and they spliced together with the rest of the items (in this case, the "Learn more" link) to form the final sidebar level. Sidebar slices are also important when discussing ',(0,r.jsx)(n.a,{href:"/docs/sidebar/autogenerated",children:"autogenerated sidebars"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Wherever you have an array of items that is reduced to one category shorthand, you can omit that enclosing array as well."}),"\n",(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(a.Z,{value:"Before",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: [\n {\n 'Getting started': ['doc1'],\n Docusaurus: [\n {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n ],\n },\n ],\n};\n"})})}),(0,r.jsx)(a.Z,{value:"After",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="sidebars.js"',children:"export default {\n sidebar: {\n 'Getting started': ['doc1'],\n Docusaurus: {\n 'Basic guides': ['doc2', 'doc3'],\n 'Advanced guides': ['doc4', 'doc5'],\n },\n },\n};\n"})})})]})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var r=t(27378);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/70e09343.a887d63b.js b/assets/js/70e09343.a887d63b.js new file mode 100644 index 0000000000..0905eaed7e --- /dev/null +++ b/assets/js/70e09343.a887d63b.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35870],{46768:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(24246),s=(n(27378),n(66222)),o=n(36712);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){i(e,t,n[t])}))}return e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function l(e,t){if(null==e)return{};var n,r,s=function(e,t){if(null==e)return{};var n,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}function d(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,o.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,r=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,o.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:r})}case"offline":return(0,o.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,o.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,o.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function u(e){const{img:t}=e,n=l(e,["img"]);return"string"==typeof t||"default"in t?(0,r.jsx)("img",a({src:"string"==typeof t?t:t.default},n)):(0,r.jsx)(s.Z,c(a({},n),{height:null!==(o=t.src.height)&&void 0!==o?o:100,width:null!==(i=t.src.width)&&void 0!==i?i:100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>c(a({},e),{src:e.path}))),getMessage:d}));var o,i}},36129:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>f,contentTitle:()=>m,default:()=>j,frontMatter:()=>h,metadata:()=>b,toc:()=>y});var r=n(24246),s=n(71670),o=(n(27378),n(40624)),i=n(36712),a=n(41428),c=n(46768),l=n(52615);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const u=[{name:"\ud83d\udce6 CodeSandbox",image:n(43376),url:"https://docusaurus.new/codesandbox",urlTS:"https://docusaurus.new/codesandbox-ts",description:(0,r.jsx)(i.Z,{id:"playground.codesandbox.description",children:"CodeSandbox is an online code editor and development environment that allows developers to create, share and collaborate on web development projects in a browser-based environment"})},{name:"\u26a1 StackBlitz \ud83c\udd95",image:n(14046),url:"https://docusaurus.new/stackblitz",urlTS:"https://docusaurus.new/stackblitz-ts",description:(0,r.jsx)(i.Z,{id:"playground.stackblitz.description",values:{webContainersLink:(0,r.jsx)(a.Z,{href:"https://blog.stackblitz.com/posts/introducing-webcontainers/",children:"WebContainers"})},children:"StackBlitz uses a novel {webContainersLink} technology to run Docusaurus directly in your browser."})}];function p({name:e,image:t,url:n,urlTS:s,description:d}){return(0,r.jsx)("div",{className:"col col--6 margin-bottom--lg",children:(0,r.jsxs)("div",{className:(0,o.Z)("card"),children:[(0,r.jsx)("div",{className:(0,o.Z)("card__image"),children:(0,r.jsx)(a.Z,{to:n,children:(0,r.jsx)(c.Z,{img:t,alt:`${e}'s image`})})}),(0,r.jsxs)("div",{className:"card__body",children:[(0,r.jsx)(l.Z,{as:"h3",children:e}),(0,r.jsx)("p",{children:d})]}),(0,r.jsxs)("div",{className:"card__footer",children:[(0,r.jsx)("div",{style:{textAlign:"center"},children:(0,r.jsx)("b",{children:(0,r.jsx)(i.Z,{id:"playground.tryItButton",children:"Try it now!"})})}),(0,r.jsxs)("div",{className:"button-group button-group--block",children:[(0,r.jsx)(a.Z,{className:"button button--secondary",to:n,children:"JavaScript"}),(0,r.jsx)(a.Z,{className:"button button--secondary",to:s,children:"TypeScript"})]})]})]})})}function g(){return(0,r.jsx)("div",{className:"row",children:u.map((e=>(0,r.jsx)(p,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){d(e,t,n[t])}))}return e}({},e),e.name)))})}const h={},m="Playground",b={id:"playground",title:"Playground",description:"Playgrounds allow you to run Docusaurus in your browser, without installing anything!",source:"@site/docs/playground.mdx",sourceDirName:".",slug:"/playground",permalink:"/docs/playground",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/playground.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1627493278e3,frontMatter:{},sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/configuration"},next:{title:"TypeScript Support",permalink:"/docs/typescript-support"}},f={},y=[];function A(e){const t={a:"a",admonition:"admonition",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"playground",children:"Playground"}),"\n",(0,r.jsxs)(t.p,{children:["Playgrounds allow you to run Docusaurus ",(0,r.jsx)(t.strong,{children:"in your browser, without installing anything"}),"!"]}),"\n",(0,r.jsx)(t.p,{children:"They are mostly useful for:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Testing Docusaurus"}),"\n",(0,r.jsx)(t.li,{children:"Reporting bugs"}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Use ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})," as an easy-to-remember shortcut."]}),"\n",(0,r.jsx)(t.p,{children:"Choose one of the available options below."}),"\n","\n",(0,r.jsx)(g,{}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["For convenience, we'll remember your choice next time you visit ",(0,r.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"}),"."]})})]})}function j(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(A,{...e})}):A(e)}},43376:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/codesandbox.b8068ce.640.png 640w,"+n.p+"assets/ideal-img/codesandbox.74163c2.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/codesandbox.b8068ce.640.png",width:640,height:355},{path:n.p+"assets/ideal-img/codesandbox.74163c2.1030.png",width:1030,height:571}],src:n.p+"assets/ideal-img/codesandbox.b8068ce.640.png",toString:function(){return n.p+"assets/ideal-img/codesandbox.b8068ce.640.png"},placeholder:void 0,width:640,height:355},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA8UlEQVR4nBXOv0tCUQDF8Tu/6ZV5f7z79L0nj9IysYYKRAKT0qWx0YJMCPoDoqClQSpKSpzqD6hWXZsamqI/oy1agrZvt+FMB87niPJChZXVOrNzRfJRQlJIMTZHJqvIGoMOLCbIIaKoQJRPSNMUay1SKZarS7Q2Nmk2GrSbW6zX6gitlSslxdI8cRIzMzVN63CHk/Ed/fE9Z5MR3cExIgxDpJSOjRwRIP0MarvK2mCP3YdT2qMjdK+GiOPYkYFbLFFerGCU4fz2gm9+ef145/Pni8nbC8L3ff6jtEa5f57n0ese8Pz4RKezz/BmyPXlFX+szWu3DFFPGQAAAABJRU5ErkJggg=="}},14046:(e,t,n)=>{e.exports={src:{srcSet:n.p+"assets/ideal-img/stackblitz.5098698.640.png 640w,"+n.p+"assets/ideal-img/stackblitz.7e33583.1030.png 1030w",images:[{path:n.p+"assets/ideal-img/stackblitz.5098698.640.png",width:640,height:356},{path:n.p+"assets/ideal-img/stackblitz.7e33583.1030.png",width:1030,height:572}],src:n.p+"assets/ideal-img/stackblitz.5098698.640.png",toString:function(){return n.p+"assets/ideal-img/stackblitz.5098698.640.png"},placeholder:void 0,width:640,height:356},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA3ElEQVR4nB2Ny0rDQABF5wNEW6tN08wkmSRN0lhLFAS/UoXiqlT8Bx8I7u2+uNNIE9JVcZeVDRyTXjjczblckSQJl1fXTKYp2h/hesEeSzkoW+O4PnaDUG6I448xpYdlB/RNhzCe8vr+xsdyyWr1ydPzC2LQCt4EQ0UYlk/3xGIUp+TrnHKzoa5r8jxHDFWAHZwjdYxyI3oDTZhckGU/lGXJ327HV/bdXOsIHZwhnRCzGR2fSqJxynb7S1VVtCmKAtHpGrQcdfr7PjjsMZQus9k98/mCh8Ujtzd3/AMUjnu6NIHUkAAAAABJRU5ErkJggg=="}},71670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,a:()=>i});var r=n(27378);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/72810b49.3c5f5eb2.js b/assets/js/72810b49.3c5f5eb2.js new file mode 100644 index 0000000000..4dca0d0bff --- /dev/null +++ b/assets/js/72810b49.3c5f5eb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9924],{41858:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=n(24246),i=n(71670);const o={mdx:{format:"md"},date:"2019-10-12T20:00"},l="2.0.0-alpha.26",a={permalink:"/changelog/2.0.0-alpha.26",source:"@site/changelog/source/2.0.0-alpha.26.md",title:"2.0.0-alpha.26",description:"- Docs, pages plugin is rewritten in TypeScript",date:"2019-10-12T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-10-12T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.27",permalink:"/changelog/2.0.0-alpha.27"},nextItem:{title:"2.0.0-alpha.25",permalink:"/changelog/2.0.0-alpha.25"},listPageLink:"/changelog/page/5"},r={authorsImageUrls:[]},c=[];function d(e){const t={a:"a",code:"code",li:"li",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Docs, pages plugin is rewritten in TypeScript"}),"\n",(0,s.jsxs)(t.li,{children:["Docs improvements and tweaks\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Improved metadata which results in smaller bundle size."}),"\n",(0,s.jsx)(t.li,{children:"Docs sidebar can now be more than one level deep, theoretically up to infinity"}),"\n",(0,s.jsx)(t.li,{children:"Collapsible docs sidebar!"}),"\n",(0,s.jsx)(t.li,{children:"Make doc page title larger"}),"\n",(0,s.jsxs)(t.li,{children:["Add ",(0,s.jsx)(t.code,{children:"editUrl"}),' option (URL for editing) to docs plugin. If this field is set, there will be an "Edit this page" link for each doc page. Example: \'',(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/edit/master/docs",children:"https://github.com/facebook/docusaurus/edit/master/docs"}),"'"]}),"\n",(0,s.jsxs)(t.li,{children:["Add ",(0,s.jsx)(t.code,{children:"showLastUpdateTime"})," and ",(0,s.jsx)(t.code,{children:"showLastUpdateAuthor"})," options to docs plugin to further achieve v1 parity of showing last update data for a particular doc"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.li,{children:"Slight tweaks to the Blog components - blog title is larger now"}),"\n",(0,s.jsxs)(t.li,{children:["Code Blocks\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Change default theme from Night Owl to Palenight"}),"\n",(0,s.jsx)(t.li,{children:"Slight tweaks to playground/preview components"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["Add ",(0,s.jsx)(t.code,{children:"scripts"})," and ",(0,s.jsx)(t.code,{children:"stylesheets"})," field to ",(0,s.jsx)(t.code,{children:"docusaurus.config.js"})]}),"\n",(0,s.jsx)(t.li,{children:"More documentation..."}),"\n"]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>l});var s=n(27378);const i={},o=s.createContext(i);function l(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/728bdbb9.b2a62668.js b/assets/js/728bdbb9.b2a62668.js new file mode 100644 index 0000000000..27b6c794af --- /dev/null +++ b/assets/js/728bdbb9.b2a62668.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[61074],{13412:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>u});var n=o(24246),s=o(71670);const a={tags:["paginated-tag"]},i="Post with duplicate title",r={permalink:"/tests/blog/2021/11/13/dup-title",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-11-13-dup-title.mdx",source:"@site/_dogfooding/_blog tests/2021-11-13-dup-title.mdx",title:"Post with duplicate title",description:"I hope I'm still here",date:"2021-11-13T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:1,hasTruncateMarker:!1,authors:[],frontMatter:{tags:["paginated-tag"]},unlisted:!1,prevItem:{title:"Image-only authors",permalink:"/tests/blog/2022/01/20/image-only-authors"},nextItem:{title:"Blog post MDX require Feed tests",permalink:"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"}},l={authorsImageUrls:[]},u=[];function c(t){const e={p:"p",...(0,s.a)(),...t.components};return(0,n.jsx)(e.p,{children:"I hope I'm still here"})}function d(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(c,{...t})}):c(t)}},71670:(t,e,o)=>{o.d(e,{Z:()=>r,a:()=>i});var n=o(27378);const s={},a=n.createContext(s);function i(t){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),n.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/728fd2f1.59e9c5c0.js b/assets/js/728fd2f1.59e9c5c0.js new file mode 100644 index 0000000000..11593abcc2 --- /dev/null +++ b/assets/js/728fd2f1.59e9c5c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[57774],{34895:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>n,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var o=a(24246),r=a(71670);const i={mdx:{format:"md"},date:"2022-07-14T20:00",authors:["anaclumos","DigiPie","Gary50613","ghostsquad","jeffreyaven","Josh-Cena","LichLord91","recallwei","RoiArthurB","slorber","treoden"]},n="2.0.0-rc.1",s={permalink:"/changelog/2.0.0-rc.1",source:"@site/changelog/source/2.0.0-rc.1.md",title:"2.0.0-rc.1",description:"Bug Fix",date:"2022-07-14T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Sunghyun Cho",alias:"anaclumos",url:"https://github.com/anaclumos",imageURL:"https://github.com/anaclumos.png",key:"anaclumos"},{name:"Evan",alias:"DigiPie",url:"https://github.com/DigiPie",imageURL:"https://github.com/DigiPie.png",key:"DigiPie"},{name:"\u51f1\u6069 Kane",alias:"Gary50613",url:"https://github.com/Gary50613",imageURL:"https://github.com/Gary50613.png",key:"Gary50613"},{name:"Wes McNamee",alias:"ghostsquad",url:"https://github.com/ghostsquad",imageURL:"https://github.com/ghostsquad.png",key:"ghostsquad"},{name:"Jeffrey Aven",alias:"jeffreyaven",url:"https://github.com/jeffreyaven",imageURL:"https://github.com/jeffreyaven.png",key:"jeffreyaven"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"LichLord91",alias:"LichLord91",url:"https://github.com/LichLord91",imageURL:"https://github.com/LichLord91.png",key:"LichLord91"},{name:"Bruce Song",alias:"recallwei",url:"https://github.com/recallwei",imageURL:"https://github.com/recallwei.png",key:"recallwei"},{name:"Arthur Brugi\xe8re",alias:"RoiArthurB",url:"https://github.com/RoiArthurB",imageURL:"https://github.com/RoiArthurB.png",key:"RoiArthurB"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"The Nguyen",alias:"treoden",url:"https://github.com/treoden",imageURL:"https://github.com/treoden.png",key:"treoden"}],frontMatter:{mdx:{format:"md"},date:"2022-07-14T20:00",authors:["anaclumos","DigiPie","Gary50613","ghostsquad","jeffreyaven","Josh-Cena","LichLord91","recallwei","RoiArthurB","slorber","treoden"]},unlisted:!1,prevItem:{title:"2.0.0",permalink:"/changelog/2.0.0"},nextItem:{title:"2.0.0-beta.22",permalink:"/changelog/2.0.0-beta.22"},listPageLink:"/changelog/"},h={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[];function c(e){return(0,o.jsx)(o.Fragment,{})}function g(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c()}},71670:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>n});var o=a(27378);const r={},i=o.createContext(r);function n(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/73004b36.c9f3685b.js b/assets/js/73004b36.c9f3685b.js new file mode 100644 index 0000000000..7657060691 --- /dev/null +++ b/assets/js/73004b36.c9f3685b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[48625],{94188:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var s=o(24246),n=o(71670);const a={mdx:{format:"md"},date:"2020-04-28T20:00",authors:["jsjoeio","lex111","SamChou19815"]},i="2.0.0-alpha.54",l={permalink:"/changelog/2.0.0-alpha.54",source:"@site/changelog/source/2.0.0-alpha.54.md",title:"2.0.0-alpha.54",description:"HOTFIX for 2.0.0-alpha.53.",date:"2020-04-28T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"JavaScript Joe",alias:"jsjoeio",url:"https://github.com/jsjoeio",imageURL:"https://github.com/jsjoeio.png",key:"jsjoeio"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"}],frontMatter:{mdx:{format:"md"},date:"2020-04-28T20:00",authors:["jsjoeio","lex111","SamChou19815"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.55",permalink:"/changelog/2.0.0-alpha.55"},nextItem:{title:"2.0.0-alpha.53",permalink:"/changelog/2.0.0-alpha.53"},listPageLink:"/changelog/page/4"},h={authorsImageUrls:[void 0,void 0,void 0]},c=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"Committers: 3",id:"committers-3",level:2}];function r(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"HOTFIX for 2.0.0-alpha.53"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/2688",children:"#2688"})," fix(v2): add default value for options in theme classic (",(0,s.jsx)(t.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"docusaurus-module-type-aliases"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/2687",children:"#2687"})," fix(v2): Add all webpack module aliases to type declaration file (",(0,s.jsx)(t.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/2680",children:"#2680"})," docs(v2): add swizzle example (",(0,s.jsx)(t.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"committers-3",children:"Committers: 3"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Alexey Pyltsyn (",(0,s.jsx)(t.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Joe Previte (",(0,s.jsx)(t.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Sam Zhou (",(0,s.jsx)(t.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>l,a:()=>i});var s=o(27378);const n={},a=s.createContext(n);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/73664a40.1eb1d454.js b/assets/js/73664a40.1eb1d454.js deleted file mode 100644 index 26f471f019..0000000000 --- a/assets/js/73664a40.1eb1d454.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[1972],{9581:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>m,contentTitle:()=>n,default:()=>a,frontMatter:()=>u,metadata:()=>r,toc:()=>l});var t=i(4848),o=i(8453);const u={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},n=void 0,r={permalink:"/blog/long-blog-post",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2019-05-29-long-blog-post.md",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},m={authorsImageUrls:[void 0]},l=[];function c(e){const s={code:"code",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,t.jsxs)(s.p,{children:["Use a ",(0,t.jsx)(s.code,{children:"\x3c!--"})," ",(0,t.jsx)(s.code,{children:"truncate"})," ",(0,t.jsx)(s.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})]})}function a(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,s,i)=>{i.d(s,{R:()=>n,x:()=>r});var t=i(6540);const o={},u=t.createContext(o);function n(e){const s=t.useContext(u);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:n(e.components),t.createElement(u.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/745d094c.4b42db8e.js b/assets/js/745d094c.4b42db8e.js new file mode 100644 index 0000000000..81ab25d7cd --- /dev/null +++ b/assets/js/745d094c.4b42db8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7849],{20294:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var o=n(24246),r=n(71670);const a={mdx:{format:"md"},date:"2024-04-04T20:00",authors:["OzakIOne","slorber"]},s="3.2.1",i={permalink:"/changelog/3.2.1",source:"@site/changelog/source/3.2.1.md",title:"3.2.1",description:"Bug Fix",date:"2024-04-04T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"ozaki",alias:"OzakIOne",url:"https://github.com/OzakIOne",imageURL:"https://github.com/OzakIOne.png",key:"OzakIOne"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2024-04-04T20:00",authors:["OzakIOne","slorber"]},unlisted:!1,nextItem:{title:"3.2.0",permalink:"/changelog/3.2.0"},listPageLink:"/changelog/"},c={authorsImageUrls:[void 0,void 0]},u=[];function l(e){return(0,o.jsx)(o.Fragment,{})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l()}},71670:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var o=n(27378);const r={},a=o.createContext(r);function s(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/748308c5.6aa139b3.js b/assets/js/748308c5.6aa139b3.js new file mode 100644 index 0000000000..ea4da1f8ba --- /dev/null +++ b/assets/js/748308c5.6aa139b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[72113],{21678:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>h,toc:()=>c});var i=n(24246),r=n(71670);const o={mdx:{format:"md"},date:"2021-03-16T20:00",authors:["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},l="2.0.0-alpha.72",h={permalink:"/changelog/2.0.0-alpha.72",source:"@site/changelog/source/2.0.0-alpha.72.md",title:"2.0.0-alpha.72",description:"Breaking Change",date:"2021-03-16T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"Harvtronix",alias:"Harvtronix",url:"https://github.com/Harvtronix",imageURL:"https://github.com/Harvtronix.png",key:"Harvtronix"},{name:"Joon-Ha Lee",alias:"koko8829",url:"https://github.com/koko8829",imageURL:"https://github.com/koko8829.png",key:"koko8829"},{name:"Leandro Oriente",alias:"leandrooriente",url:"https://github.com/leandrooriente",imageURL:"https://github.com/leandrooriente.png",key:"leandrooriente"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Long Ho",alias:"longlho",url:"https://github.com/longlho",imageURL:"https://github.com/longlho.png",key:"longlho"},{name:"Lowen",alias:"lowenhere",url:"https://github.com/lowenhere",imageURL:"https://github.com/lowenhere.png",key:"lowenhere"},{name:"Pierre-Gilles Leymarie",alias:"Pierre-Gilles",url:"https://github.com/Pierre-Gilles",imageURL:"https://github.com/Pierre-Gilles.png",key:"Pierre-Gilles"},{name:"Quan",alias:"quanengineering",url:"https://github.com/quanengineering",imageURL:"https://github.com/quanengineering.png",key:"quanengineering"},{name:"Rhodanthe1116",alias:"Rhodanthe1116",url:"https://github.com/Rhodanthe1116",imageURL:"https://github.com/Rhodanthe1116.png",key:"Rhodanthe1116"},{name:"Steven Hansel",alias:"ShinteiMai",url:"https://github.com/ShinteiMai",imageURL:"https://github.com/ShinteiMai.png",key:"ShinteiMai"},{name:"Simen Bekkhus",alias:"SimenB",url:"https://github.com/SimenB",imageURL:"https://github.com/SimenB.png",key:"SimenB"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Zoltan Kochan",alias:"zkochan",url:"https://github.com/zkochan",imageURL:"https://github.com/zkochan.png",key:"zkochan"}],frontMatter:{mdx:{format:"md"},date:"2021-03-16T20:00",authors:["armano2","Harvtronix","koko8829","leandrooriente","lex111","longlho","lowenhere","Pierre-Gilles","quanengineering","Rhodanthe1116","ShinteiMai","SimenB","slorber","zkochan"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.73",permalink:"/changelog/2.0.0-alpha.73"},nextItem:{title:"2.0.0-alpha.71",permalink:"/changelog/2.0.0-alpha.71"},listPageLink:"/changelog/page/3"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},c=[{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 14",id:"committers-14",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,i.jsxs)(s.p,{children:["Starting with this release for a proper work of i18n functionality, you need to either use Node v14+ or in case of using earlier version of Node.js install ",(0,i.jsxs)(s.a,{href:"https://www.npmjs.com/package/full-icu",children:[(0,i.jsx)(s.code,{children:"full-icu"})," package"]})," and set ",(0,i.jsx)(s.code,{children:"NODE_ICU_DATA"})," environment variable in your npm scripts, for example:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-json",children:'"scripts": {\n "start": "cross-env NODE_ICU_DATA=node_modules/full-icu docusaurus start"\n}\n'})}),"\n",(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4302",children:"#4302"})," feat(v2): Improve the initial templates (",(0,i.jsx)(s.a,{href:"https://github.com/ShinteiMai",children:"@ShinteiMai"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4390",children:"#4390"})," feat(v2): Add korean default translations (",(0,i.jsx)(s.a,{href:"https://github.com/koko8829",children:"@koko8829"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4429",children:"#4429"})," chore(v2): upgrade Infima to v0.2.0-alpha.21 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4428",children:"#4428"})," fix(v2): allow using pre tag in Markdown directly (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4381",children:"#4381"})," fix(v2): specify proper TS path in classic theme (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4383",children:"#4383"})," fix(v2): set theme color mode for SSR (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4424",children:"#4424"})," fix(v2): add missing peer dep on @babel/core (",(0,i.jsx)(s.a,{href:"https://github.com/SimenB",children:"@SimenB"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4377",children:"#4377"})," fix(v2): PWA issues + improve docs (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4407",children:"#4407"})," fix(v2): broken link checker should not report false positives when using encoded chars (",(0,i.jsx)(s.a,{href:"https://github.com/Harvtronix",children:"@Harvtronix"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4410",children:"#4410"})," fix(v1): Fix v1 site deployment with Crowdin again... (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4396",children:"#4396"})," fix(v1): Temp fix v1 site deployment: fail-safe on Crowdin upload translations error (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4395",children:"#4395"})," fix(v1): fix v1 site deploy issues (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4418",children:"#4418"})," refactor(v2): correct plugin types (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4405",children:"#4405"})," refactor(v2): i18n cleanups / refactors (",(0,i.jsx)(s.a,{href:"https://github.com/longlho",children:"@longlho"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4387",children:"#4387"})," refactor(v2): add ExecutionEnvironment, BrowserOnly, isInternalUrl to type aliases (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4402",children:"#4402"})," refactor(v2): merge linkify function used in blog and docs and align properties (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4382",children:"#4382"})," refactor(v2): correct some of type errors reported by eslint (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4385",children:"#4385"})," refactor(v2): add missing theme-classic types (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4416",children:"#4416"})," docs(v2): add Realtime Web Applications Workshop to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/lowenhere",children:"@lowenhere"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4408",children:"#4408"})," docs(v2): add gladysassistant.com to showcase (",(0,i.jsx)(s.a,{href:"https://github.com/Pierre-Gilles",children:"@Pierre-Gilles"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4386",children:"#4386"})," docs(v2): Showcase the pnpm docs (",(0,i.jsx)(s.a,{href:"https://github.com/zkochan",children:"@zkochan"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4367",children:"#4367"})," docs(v2): releasing i18n blog post (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-1.x"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4401",children:"#4401"})," chore(v1): fix CircleCI v1 site deploy (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4399",children:"#4399"})," chore(v2): upgrade example projects (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4398",children:"#4398"})," chore(v1): trigger v1 site deploy through CI (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4384",children:"#4384"})," chore(v2): avoid bad publish of intl-locales-supported (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-14",children:"Committers: 14"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Armano (",(0,i.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Harvtronix (",(0,i.jsx)(s.a,{href:"https://github.com/Harvtronix",children:"@Harvtronix"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joon-Ha Lee (",(0,i.jsx)(s.a,{href:"https://github.com/koko8829",children:"@koko8829"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Leandro Oriente (",(0,i.jsx)(s.a,{href:"https://github.com/leandrooriente",children:"@leandrooriente"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Long Ho (",(0,i.jsx)(s.a,{href:"https://github.com/longlho",children:"@longlho"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Lowen (",(0,i.jsx)(s.a,{href:"https://github.com/lowenhere",children:"@lowenhere"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Pierre-Gilles Leymarie (",(0,i.jsx)(s.a,{href:"https://github.com/Pierre-Gilles",children:"@Pierre-Gilles"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Quan (",(0,i.jsx)(s.a,{href:"https://github.com/quanengineering",children:"@quanengineering"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Simen Bekkhus (",(0,i.jsx)(s.a,{href:"https://github.com/SimenB",children:"@SimenB"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Steven Hansel (",(0,i.jsx)(s.a,{href:"https://github.com/ShinteiMai",children:"@ShinteiMai"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Zoltan Kochan (",(0,i.jsx)(s.a,{href:"https://github.com/zkochan",children:"@zkochan"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/Rhodanthe1116",children:"@Rhodanthe1116"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>h,a:()=>l});var i=n(27378);const r={},o=i.createContext(r);function l(e){const s=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/74884079.c44aa732.js b/assets/js/74884079.c44aa732.js new file mode 100644 index 0000000000..16445bd7da --- /dev/null +++ b/assets/js/74884079.c44aa732.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19189],{28615:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"docs-tests"}')}}]); \ No newline at end of file diff --git a/assets/js/748cd346.f9d99af5.js b/assets/js/748cd346.f9d99af5.js new file mode 100644 index 0000000000..dd16bc7671 --- /dev/null +++ b/assets/js/748cd346.f9d99af5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24013],{81836:e=>{e.exports="/feature-requests"}}]); \ No newline at end of file diff --git a/assets/js/74911.bc7191fa.js b/assets/js/74911.bc7191fa.js new file mode 100644 index 0000000000..119b7c819f --- /dev/null +++ b/assets/js/74911.bc7191fa.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74911],{32998:function(e,t,n){!function(e,t,n,o){"use strict";const s=0,r=1,i=2,a=3,c=4,l=-1;let u;e.addSegment=void 0,e.addMapping=void 0,e.maybeAddSegment=void 0,e.maybeAddMapping=void 0,e.setSourceContent=void 0,e.toDecodedMap=void 0,e.toEncodedMap=void 0,e.fromMap=void 0,e.allMappings=void 0;class h{constructor({file:e,sourceRoot:n}={}){this._names=new t.SetArray,this._sources=new t.SetArray,this._sourcesContent=[],this._mappings=[],this.file=e,this.sourceRoot=n}}function p(e,t){for(let n=e.length;n<=t;n++)e[n]=[];return e[t]}function d(e,t){let n=e.length;for(let o=n-1;o>=0&&!(t>=e[o][s]);n=o--);return n}function f(e,t,n){for(let o=e.length;o>t;o--)e[o]=e[o-1];e[t]=n}function m(e){const{length:t}=e;let n=t;for(let o=n-1;o>=0&&!(e[o].length>0);n=o,o--);n<t&&(e.length=n)}function k(e,n){for(let o=0;o<n.length;o++)t.put(e,n[o])}function g(e,t){return 0===t||1===e[t-1].length}function _(e,t,n,o,s,u){if(0===t)return!1;const h=e[t-1];return 1!==h.length&&n===h[r]&&o===h[i]&&s===h[a]&&u===(5===h.length?h[c]:l)}function y(e,t,n){const{generated:o,source:s,original:r,name:i,content:a}=n;if(!s)return u(e,t,o.line-1,o.column,null,null,null,null,null);const c=s;return u(e,t,o.line-1,o.column,c,r.line-1,r.column,i,a)}e.addSegment=(e,t,n,o,s,r,i,a)=>u(!1,e,t,n,o,s,r,i,a),e.maybeAddSegment=(e,t,n,o,s,r,i,a)=>u(!0,e,t,n,o,s,r,i,a),e.addMapping=(e,t)=>y(!1,e,t),e.maybeAddMapping=(e,t)=>y(!0,e,t),e.setSourceContent=(e,n,o)=>{const{_sources:s,_sourcesContent:r}=e;r[t.put(s,n)]=o},e.toDecodedMap=e=>{const{file:t,sourceRoot:n,_mappings:o,_sources:s,_sourcesContent:r,_names:i}=e;return m(o),{version:3,file:t||void 0,names:i.array,sourceRoot:n||void 0,sources:s.array,sourcesContent:r,mappings:o}},e.toEncodedMap=t=>{const o=e.toDecodedMap(t);return Object.assign(Object.assign({},o),{mappings:n.encode(o.mappings)})},e.allMappings=e=>{const t=[],{_mappings:n,_sources:o,_names:l}=e;for(let u=0;u<n.length;u++){const e=n[u];for(let n=0;n<e.length;n++){const h=e[n],p={line:u+1,column:h[s]};let d,f,m;1!==h.length&&(d=o.array[h[r]],f={line:h[i]+1,column:h[a]},5===h.length&&(m=l.array[h[c]])),t.push({generated:p,source:d,original:f,name:m})}}return t},e.fromMap=e=>{const t=new o.TraceMap(e),n=new h({file:t.file,sourceRoot:t.sourceRoot});return k(n._names,t.names),k(n._sources,t.sources),n._sourcesContent=t.sourcesContent||t.sources.map((()=>null)),n._mappings=o.decodedMappings(t),n},u=(e,n,o,s,r,i,a,c,u)=>{const{_mappings:h,_sources:m,_sourcesContent:k,_names:y}=n,x=p(h,o),T=d(x,s);if(!r){if(e&&g(x,T))return;return f(x,T,[s])}const b=t.put(m,r),v=c?t.put(y,c):l;if(b===k.length&&(k[b]=null!=u?u:null),!e||!_(x,T,b,i,a,v))return f(x,T,c?[s,b,i,a,v]:[s,b,i,a])},e.GenMapping=h,Object.defineProperty(e,"__esModule",{value:!0})}(t,n(72412),n(10934),n(43725))},10934:function(e,t){!function(e){"use strict";const t=",".charCodeAt(0),n=";".charCodeAt(0),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(64),r=new Uint8Array(128);for(let m=0;m<o.length;m++){const e=o.charCodeAt(m);s[m]=e,r[e]=m}const i="undefined"!=typeof TextDecoder?new TextDecoder:"undefined"!=typeof Buffer?{decode:e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString()}:{decode(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}};function a(e){const t=new Int32Array(5),n=[];let o=0;do{const s=c(e,o),r=[];let i=!0,a=0;t[0]=0;for(let n=o;n<s;n++){let o;n=l(e,n,t,0);const c=t[0];c<a&&(i=!1),a=c,u(e,n,s)?(n=l(e,n,t,1),n=l(e,n,t,2),n=l(e,n,t,3),u(e,n,s)?(n=l(e,n,t,4),o=[c,t[1],t[2],t[3],t[4]]):o=[c,t[1],t[2],t[3]]):o=[c],r.push(o)}i||h(r),n.push(r),o=s+1}while(o<=e.length);return n}function c(e,t){const n=e.indexOf(";",t);return-1===n?e.length:n}function l(e,t,n,o){let s=0,i=0,a=0;do{const n=e.charCodeAt(t++);a=r[n],s|=(31&a)<<i,i+=5}while(32&a);const c=1&s;return s>>>=1,c&&(s=-2147483648|-s),n[o]+=s,t}function u(e,n,o){return!(n>=o)&&e.charCodeAt(n)!==t}function h(e){e.sort(p)}function p(e,t){return e[0]-t[0]}function d(e){const o=new Int32Array(5),s=16384,r=s-36,a=new Uint8Array(s),c=a.subarray(0,r);let l=0,u="";for(let h=0;h<e.length;h++){const p=e[h];if(h>0&&(l===s&&(u+=i.decode(a),l=0),a[l++]=n),0!==p.length){o[0]=0;for(let e=0;e<p.length;e++){const n=p[e];l>r&&(u+=i.decode(c),a.copyWithin(0,r,l),l-=r),e>0&&(a[l++]=t),l=f(a,l,o,n,0),1!==n.length&&(l=f(a,l,o,n,1),l=f(a,l,o,n,2),l=f(a,l,o,n,3),4!==n.length&&(l=f(a,l,o,n,4)))}}}return u+i.decode(a.subarray(0,l))}function f(e,t,n,o,r){const i=o[r];let a=i-n[r];n[r]=i,a=a<0?-a<<1|1:a<<1;do{let n=31&a;a>>>=5,a>0&&(n|=32),e[t++]=s[n]}while(a>0);return t}e.decode=a,e.encode=d,Object.defineProperty(e,"__esModule",{value:!0})}(t)},51138:function(e){e.exports=function(){"use strict";const e=/^[\w+.-]+:\/\//,t=/^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/,n=/^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;var o;function s(t){return e.test(t)}function r(e){return e.startsWith("//")}function i(e){return e.startsWith("/")}function a(e){return e.startsWith("file:")}function c(e){return/^[.?#]/.test(e)}function l(e){const n=t.exec(e);return h(n[1],n[2]||"",n[3],n[4]||"",n[5]||"/",n[6]||"",n[7]||"")}function u(e){const t=n.exec(e),o=t[2];return h("file:","",t[1]||"","",i(o)?o:"/"+o,t[3]||"",t[4]||"")}function h(e,t,n,s,r,i,a){return{scheme:e,user:t,host:n,port:s,path:r,query:i,hash:a,type:o.Absolute}}function p(e){if(r(e)){const t=l("http:"+e);return t.scheme="",t.type=o.SchemeRelative,t}if(i(e)){const t=l("http://foo.com"+e);return t.scheme="",t.host="",t.type=o.AbsolutePath,t}if(a(e))return u(e);if(s(e))return l(e);const t=l("http://foo.com/"+e);return t.scheme="",t.host="",t.type=e?e.startsWith("?")?o.Query:e.startsWith("#")?o.Hash:o.RelativePath:o.Empty,t}function d(e){if(e.endsWith("/.."))return e;const t=e.lastIndexOf("/");return e.slice(0,t+1)}function f(e,t){m(t,t.type),"/"===e.path?e.path=t.path:e.path=d(t.path)+e.path}function m(e,t){const n=t<=o.RelativePath,s=e.path.split("/");let r=1,i=0,a=!1;for(let o=1;o<s.length;o++){const e=s[o];e?(a=!1,"."!==e&&(".."!==e?(s[r++]=e,i++):i?(a=!0,i--,r--):n&&(s[r++]=e))):a=!0}let c="";for(let o=1;o<r;o++)c+="/"+s[o];(!c||a&&!c.endsWith("/.."))&&(c+="/"),e.path=c}function k(e,t){if(!e&&!t)return"";const n=p(e);let s=n.type;if(t&&s!==o.Absolute){const e=p(t),r=e.type;switch(s){case o.Empty:n.hash=e.hash;case o.Hash:n.query=e.query;case o.Query:case o.RelativePath:f(n,e);case o.AbsolutePath:n.user=e.user,n.host=e.host,n.port=e.port;case o.SchemeRelative:n.scheme=e.scheme}r>s&&(s=r)}m(n,s);const r=n.query+n.hash;switch(s){case o.Hash:case o.Query:return r;case o.RelativePath:{const o=n.path.slice(1);return o?c(t||e)&&!c(o)?"./"+o+r:o+r:r||"."}case o.AbsolutePath:return n.path+r;default:return n.scheme+"//"+n.user+n.host+n.port+n.path+r}}return function(e){e[e.Empty=1]="Empty",e[e.Hash=2]="Hash",e[e.Query=3]="Query",e[e.RelativePath=4]="RelativePath",e[e.AbsolutePath=5]="AbsolutePath",e[e.SchemeRelative=6]="SchemeRelative",e[e.Absolute=7]="Absolute"}(o||(o={})),k}()},72412:function(e,t){!function(e){"use strict";e.get=void 0,e.put=void 0,e.pop=void 0;class t{constructor(){this._indexes={__proto__:null},this.array=[]}}e.get=(e,t)=>e._indexes[t],e.put=(t,n)=>{const o=e.get(t,n);if(void 0!==o)return o;const{array:s,_indexes:r}=t;return r[n]=s.push(n)-1},e.pop=e=>{const{array:t,_indexes:n}=e;0!==t.length&&(n[t.pop()]=void 0)},e.SetArray=t,Object.defineProperty(e,"__esModule",{value:!0})}(t)},62538:function(e,t){!function(e){"use strict";const t=",".charCodeAt(0),n=";".charCodeAt(0),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(64),r=new Uint8Array(128);for(let m=0;m<o.length;m++){const e=o.charCodeAt(m);s[m]=e,r[e]=m}const i="undefined"!=typeof TextDecoder?new TextDecoder:"undefined"!=typeof Buffer?{decode:e=>Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString()}:{decode(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}};function a(e){const t=new Int32Array(5),n=[];let o=0;do{const s=c(e,o),r=[];let i=!0,a=0;t[0]=0;for(let n=o;n<s;n++){let o;n=l(e,n,t,0);const c=t[0];c<a&&(i=!1),a=c,u(e,n,s)?(n=l(e,n,t,1),n=l(e,n,t,2),n=l(e,n,t,3),u(e,n,s)?(n=l(e,n,t,4),o=[c,t[1],t[2],t[3],t[4]]):o=[c,t[1],t[2],t[3]]):o=[c],r.push(o)}i||h(r),n.push(r),o=s+1}while(o<=e.length);return n}function c(e,t){const n=e.indexOf(";",t);return-1===n?e.length:n}function l(e,t,n,o){let s=0,i=0,a=0;do{const n=e.charCodeAt(t++);a=r[n],s|=(31&a)<<i,i+=5}while(32&a);const c=1&s;return s>>>=1,c&&(s=-2147483648|-s),n[o]+=s,t}function u(e,n,o){return!(n>=o)&&e.charCodeAt(n)!==t}function h(e){e.sort(p)}function p(e,t){return e[0]-t[0]}function d(e){const o=new Int32Array(5),s=16384,r=s-36,a=new Uint8Array(s),c=a.subarray(0,r);let l=0,u="";for(let h=0;h<e.length;h++){const p=e[h];if(h>0&&(l===s&&(u+=i.decode(a),l=0),a[l++]=n),0!==p.length){o[0]=0;for(let e=0;e<p.length;e++){const n=p[e];l>r&&(u+=i.decode(c),a.copyWithin(0,r,l),l-=r),e>0&&(a[l++]=t),l=f(a,l,o,n,0),1!==n.length&&(l=f(a,l,o,n,1),l=f(a,l,o,n,2),l=f(a,l,o,n,3),4!==n.length&&(l=f(a,l,o,n,4)))}}}return u+i.decode(a.subarray(0,l))}function f(e,t,n,o,r){const i=o[r];let a=i-n[r];n[r]=i,a=a<0?-a<<1|1:a<<1;do{let n=31&a;a>>>=5,a>0&&(n|=32),e[t++]=s[n]}while(a>0);return t}e.decode=a,e.encode=d,Object.defineProperty(e,"__esModule",{value:!0})}(t)},43725:function(e,t,n){!function(e,t,n){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(n);function r(e,t){return t&&!t.endsWith("/")&&(t+="/"),s.default(e,t)}function i(e){if(!e)return"";const t=e.lastIndexOf("/");return e.slice(0,t+1)}const a=0,c=1,l=2,u=3,h=4,p=1,d=2;function f(e,t){const n=m(e,0);if(n===e.length)return e;t||(e=e.slice());for(let o=n;o<e.length;o=m(e,o+1))e[o]=g(e[o],t);return e}function m(e,t){for(let n=t;n<e.length;n++)if(!k(e[n]))return n;return e.length}function k(e){for(let t=1;t<e.length;t++)if(e[t][a]<e[t-1][a])return!1;return!0}function g(e,t){return t||(e=e.slice()),e.sort(_)}function _(e,t){return e[a]-t[a]}let y=!1;function x(e,t,n,o){for(;n<=o;){const s=n+(o-n>>1),r=e[s][a]-t;if(0===r)return y=!0,s;r<0?n=s+1:o=s-1}return y=!1,n-1}function T(e,t,n){for(let o=n+1;o<e.length&&e[o][a]===t;n=o++);return n}function b(e,t,n){for(let o=n-1;o>=0&&e[o][a]===t;n=o--);return n}function v(){return{lastKey:-1,lastNeedle:-1,lastIndex:-1}}function I(e,t,n,o){const{lastKey:s,lastNeedle:r,lastIndex:i}=n;let c=0,l=e.length-1;if(o===s){if(t===r)return y=-1!==i&&e[i][a]===t,i;t>=r?c=-1===i?0:i:l=i}return n.lastKey=o,n.lastNeedle=t,n.lastIndex=x(e,t,c,l)}function w(e,t){const n=t.map(E);for(let o=0;o<e.length;o++){const s=e[o];for(let e=0;e<s.length;e++){const r=s[e];if(1===r.length)continue;const i=r[c],h=r[l],p=r[u],d=n[i],f=d[h]||(d[h]=[]),m=t[i],k=T(f,p,I(f,p,m,h));C(f,m.lastIndex=k+1,[p,o,r[a]])}}return n}function C(e,t,n){for(let o=e.length;o>t;o--)e[o]=e[o-1];e[t]=n}function E(){return{__proto__:null}}const A=function(t,n){const o="string"==typeof t?JSON.parse(t):t;if(!("sections"in o))return new M(o,n);const s=[],r=[],i=[],a=[];S(o,n,s,r,i,a,0,0,1/0,1/0);const c={version:3,file:o.file,names:a,sources:r,sourcesContent:i,mappings:s};return e.presortedDecodedMap(c)};function S(e,t,n,o,s,r,i,a,c,l){const{sections:u}=e;for(let h=0;h<u.length;h++){const{map:e,offset:p}=u[h];let d=c,f=l;if(h+1<u.length){const e=u[h+1].offset;d=Math.min(c,i+e.line),d===c?f=Math.min(l,a+e.column):d<c&&(f=a+e.column)}N(e,t,n,o,s,r,i+p.line,a+p.column,d,f)}}function N(t,n,o,s,r,i,p,d,f,m){if("sections"in t)return S(...arguments);const k=new M(t,n),g=s.length,_=i.length,y=e.decodedMappings(k),{resolvedSources:x,sourcesContent:T}=k;if(R(s,x),R(i,k.names),T)R(r,T);else for(let e=0;e<x.length;e++)r.push(null);for(let e=0;e<y.length;e++){const t=p+e;if(t>f)return;const n=L(o,t),s=0===e?d:0,r=y[e];for(let e=0;e<r.length;e++){const o=r[e],i=s+o[a];if(t===f&&i>=m)return;if(1===o.length){n.push([i]);continue}const p=g+o[c],d=o[l],k=o[u];n.push(4===o.length?[i,p,d,k]:[i,p,d,k,_+o[h]])}}}function R(e,t){for(let n=0;n<t.length;n++)e.push(t[n])}function L(e,t){for(let n=e.length;n<=t;n++)e[n]=[];return e[t]}const j="`line` must be greater than 0 (lines start at line 1)",O="`column` must be greater than or equal to 0 (columns start at column 0)",D=-1,P=1;e.encodedMappings=void 0,e.decodedMappings=void 0,e.traceSegment=void 0,e.originalPositionFor=void 0,e.generatedPositionFor=void 0,e.allGeneratedPositionsFor=void 0,e.eachMapping=void 0,e.sourceContentFor=void 0,e.presortedDecodedMap=void 0,e.decodedMap=void 0,e.encodedMap=void 0;class M{constructor(e,t){const n="string"==typeof e;if(!n&&e._decodedMemo)return e;const o=n?JSON.parse(e):e,{version:s,file:a,names:c,sourceRoot:l,sources:u,sourcesContent:h}=o;this.version=s,this.file=a,this.names=c,this.sourceRoot=l,this.sources=u,this.sourcesContent=h;const p=r(l||"",i(t));this.resolvedSources=u.map((e=>r(e||"",p)));const{mappings:d}=o;"string"==typeof d?(this._encoded=d,this._decoded=void 0):(this._encoded=void 0,this._decoded=f(d,n)),this._decodedMemo=v(),this._bySources=void 0,this._bySourceMemos=void 0}}function F(e,t){return{version:e.version,file:e.file,names:e.names,sourceRoot:e.sourceRoot,sources:e.sources,sourcesContent:e.sourcesContent,mappings:t}}function q(e,t,n,o){return{source:e,line:t,column:n,name:o}}function $(e,t){return{line:e,column:t}}function B(e,t,n,o,s){let r=I(e,o,t,n);return y?r=(s===D?T:b)(e,o,r):s===D&&r++,-1===r||r===e.length?-1:r}function K(e,t,n,o,s){let r=B(e,t,n,o,P);if(y||s!==D||r++,-1===r||r===e.length)return[];const i=y?o:e[r][a];y||(r=b(e,i,r));const c=T(e,i,r),l=[];for(;r<=c;r++){const t=e[r];l.push($(t[p]+1,t[d]))}return l}(()=>{function n(t,n,o,s,r,i){if(--o<0)throw new Error(j);if(s<0)throw new Error(O);const{sources:a,resolvedSources:c}=t;let l=a.indexOf(n);if(-1===l&&(l=c.indexOf(n)),-1===l)return i?[]:$(null,null);const u=(t._bySources||(t._bySources=w(e.decodedMappings(t),t._bySourceMemos=a.map(v))))[l][o];if(null==u)return i?[]:$(null,null);const h=t._bySourceMemos[l];if(i)return K(u,h,o,s,r);const f=B(u,h,o,s,r);if(-1===f)return $(null,null);const m=u[f];return $(m[p]+1,m[d])}e.encodedMappings=e=>{var n;return null!==(n=e._encoded)&&void 0!==n?n:e._encoded=t.encode(e._decoded)},e.decodedMappings=e=>e._decoded||(e._decoded=t.decode(e._encoded)),e.traceSegment=(t,n,o)=>{const s=e.decodedMappings(t);if(n>=s.length)return null;const r=s[n],i=B(r,t._decodedMemo,n,o,P);return-1===i?null:r[i]},e.originalPositionFor=(t,{line:n,column:o,bias:s})=>{if(--n<0)throw new Error(j);if(o<0)throw new Error(O);const r=e.decodedMappings(t);if(n>=r.length)return q(null,null,null,null);const i=r[n],a=B(i,t._decodedMemo,n,o,s||P);if(-1===a)return q(null,null,null,null);const p=i[a];if(1===p.length)return q(null,null,null,null);const{names:d,resolvedSources:f}=t;return q(f[p[c]],p[l]+1,p[u],5===p.length?d[p[h]]:null)},e.allGeneratedPositionsFor=(e,{source:t,line:o,column:s,bias:r})=>n(e,t,o,s,r||D,!0),e.generatedPositionFor=(e,{source:t,line:o,column:s,bias:r})=>n(e,t,o,s,r||P,!1),e.eachMapping=(t,n)=>{const o=e.decodedMappings(t),{names:s,resolvedSources:r}=t;for(let e=0;e<o.length;e++){const t=o[e];for(let o=0;o<t.length;o++){const i=t[o],a=e+1,c=i[0];let l=null,u=null,h=null,p=null;1!==i.length&&(l=r[i[1]],u=i[2]+1,h=i[3]),5===i.length&&(p=s[i[4]]),n({generatedLine:a,generatedColumn:c,source:l,originalLine:u,originalColumn:h,name:p})}}},e.sourceContentFor=(e,t)=>{const{sources:n,resolvedSources:o,sourcesContent:s}=e;if(null==s)return null;let r=n.indexOf(t);return-1===r&&(r=o.indexOf(t)),-1===r?null:s[r]},e.presortedDecodedMap=(e,t)=>{const n=new M(F(e,[]),t);return n._decoded=e.mappings,n},e.decodedMap=t=>F(t,e.decodedMappings(t)),e.encodedMap=t=>F(t,e.encodedMappings(t))})(),e.AnyMap=A,e.GREATEST_LOWER_BOUND=P,e.LEAST_UPPER_BOUND=D,e.TraceMap=M,Object.defineProperty(e,"__esModule",{value:!0})}(t,n(62538),n(51138))},30577:(e,t)=>{"use strict";var n="\n",o=function(){function e(e){this.string=e;for(var t=[0],o=0;o<e.length;)switch(e[o]){case n:o+=1,t.push(o);break;case"\r":e[o+=1]===n&&(o+=1),t.push(o);break;default:o++}this.offsets=t}return e.prototype.locationForIndex=function(e){if(e<0||e>this.string.length)return null;for(var t=0,n=this.offsets;n[t+1]<=e;)t++;return{line:t,column:e-n[t]}},e.prototype.indexForLocation=function(e){var t=e.line,n=e.column;return t<0||t>=this.offsets.length||n<0||n>this.lengthOfLine(t)?null:this.offsets[t]+n},e.prototype.lengthOfLine=function(e){var t=this.offsets[e];return(e===this.offsets.length-1?this.string.length:this.offsets[e+1])-t},e}()},6324:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,s,r]=t;if(o&&r){o=parseInt(o),r=parseInt(r);const e=o<r?1:-1;"-"!==s&&".."!==s&&"\u2025"!==s||(r+=e);for(let t=o;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},89043:function(e,t,n){"use strict";var o=this&&this.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var o=Array(e),s=0;for(t=0;t<n;t++)for(var r=arguments[t],i=0,a=r.length;i<a;i++,s++)o[s]=r[i];return o};Object.defineProperty(t,"__esModule",{value:!0}),t.Checker=t.createCheckers=void 0;var s=n(43198),r=n(95096),i=n(43198);Object.defineProperty(t,"TArray",{enumerable:!0,get:function(){return i.TArray}}),Object.defineProperty(t,"TEnumType",{enumerable:!0,get:function(){return i.TEnumType}}),Object.defineProperty(t,"TEnumLiteral",{enumerable:!0,get:function(){return i.TEnumLiteral}}),Object.defineProperty(t,"TFunc",{enumerable:!0,get:function(){return i.TFunc}}),Object.defineProperty(t,"TIface",{enumerable:!0,get:function(){return i.TIface}}),Object.defineProperty(t,"TLiteral",{enumerable:!0,get:function(){return i.TLiteral}}),Object.defineProperty(t,"TName",{enumerable:!0,get:function(){return i.TName}}),Object.defineProperty(t,"TOptional",{enumerable:!0,get:function(){return i.TOptional}}),Object.defineProperty(t,"TParam",{enumerable:!0,get:function(){return i.TParam}}),Object.defineProperty(t,"TParamList",{enumerable:!0,get:function(){return i.TParamList}}),Object.defineProperty(t,"TProp",{enumerable:!0,get:function(){return i.TProp}}),Object.defineProperty(t,"TTuple",{enumerable:!0,get:function(){return i.TTuple}}),Object.defineProperty(t,"TType",{enumerable:!0,get:function(){return i.TType}}),Object.defineProperty(t,"TUnion",{enumerable:!0,get:function(){return i.TUnion}}),Object.defineProperty(t,"TIntersection",{enumerable:!0,get:function(){return i.TIntersection}}),Object.defineProperty(t,"array",{enumerable:!0,get:function(){return i.array}}),Object.defineProperty(t,"enumlit",{enumerable:!0,get:function(){return i.enumlit}}),Object.defineProperty(t,"enumtype",{enumerable:!0,get:function(){return i.enumtype}}),Object.defineProperty(t,"func",{enumerable:!0,get:function(){return i.func}}),Object.defineProperty(t,"iface",{enumerable:!0,get:function(){return i.iface}}),Object.defineProperty(t,"lit",{enumerable:!0,get:function(){return i.lit}}),Object.defineProperty(t,"name",{enumerable:!0,get:function(){return i.name}}),Object.defineProperty(t,"opt",{enumerable:!0,get:function(){return i.opt}}),Object.defineProperty(t,"param",{enumerable:!0,get:function(){return i.param}}),Object.defineProperty(t,"tuple",{enumerable:!0,get:function(){return i.tuple}}),Object.defineProperty(t,"union",{enumerable:!0,get:function(){return i.union}}),Object.defineProperty(t,"intersection",{enumerable:!0,get:function(){return i.intersection}}),Object.defineProperty(t,"BasicType",{enumerable:!0,get:function(){return i.BasicType}});var a=n(95096);Object.defineProperty(t,"VError",{enumerable:!0,get:function(){return a.VError}}),t.createCheckers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=Object.assign.apply(Object,o([{},s.basicTypes],e)),r={},i=0,a=e;i<a.length;i++)for(var l=a[i],u=0,h=Object.keys(l);u<h.length;u++){var p=h[u];r[p]=new c(n,l[p])}return r};var c=function(){function e(e,t,n){if(void 0===n&&(n="value"),this.suite=e,this.ttype=t,this._path=n,this.props=new Map,t instanceof s.TIface)for(var o=0,r=t.props;o<r.length;o++){var i=r[o];this.props.set(i.name,i.ttype)}this.checkerPlain=this.ttype.getChecker(e,!1),this.checkerStrict=this.ttype.getChecker(e,!0)}return e.prototype.setReportedPath=function(e){this._path=e},e.prototype.check=function(e){return this._doCheck(this.checkerPlain,e)},e.prototype.test=function(e){return this.checkerPlain(e,new r.NoopContext)},e.prototype.validate=function(e){return this._doValidate(this.checkerPlain,e)},e.prototype.strictCheck=function(e){return this._doCheck(this.checkerStrict,e)},e.prototype.strictTest=function(e){return this.checkerStrict(e,new r.NoopContext)},e.prototype.strictValidate=function(e){return this._doValidate(this.checkerStrict,e)},e.prototype.getProp=function(t){var n=this.props.get(t);if(!n)throw new Error("Type has no property "+t);return new e(this.suite,n,this._path+"."+t)},e.prototype.methodArgs=function(t){var n=this._getMethod(t);return new e(this.suite,n.paramList)},e.prototype.methodResult=function(t){var n=this._getMethod(t);return new e(this.suite,n.result)},e.prototype.getArgs=function(){if(!(this.ttype instanceof s.TFunc))throw new Error("getArgs() applied to non-function");return new e(this.suite,this.ttype.paramList)},e.prototype.getResult=function(){if(!(this.ttype instanceof s.TFunc))throw new Error("getResult() applied to non-function");return new e(this.suite,this.ttype.result)},e.prototype.getType=function(){return this.ttype},e.prototype._doCheck=function(e,t){if(!e(t,new r.NoopContext)){var n=new r.DetailContext;throw e(t,n),n.getError(this._path)}},e.prototype._doValidate=function(e,t){if(e(t,new r.NoopContext))return null;var n=new r.DetailContext;return e(t,n),n.getErrorDetail(this._path)},e.prototype._getMethod=function(e){var t=this.props.get(e);if(!t)throw new Error("Type has no property "+e);if(!(t instanceof s.TFunc))throw new Error("Property "+e+" is not a method");return t},e}();t.Checker=c},43198:function(e,t,n){"use strict";var o,s=this&&this.__extends||(o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},o(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.basicTypes=t.BasicType=t.TParamList=t.TParam=t.param=t.TFunc=t.func=t.TProp=t.TOptional=t.opt=t.TIface=t.iface=t.TEnumLiteral=t.enumlit=t.TEnumType=t.enumtype=t.TIntersection=t.intersection=t.TUnion=t.union=t.TTuple=t.tuple=t.TArray=t.array=t.TLiteral=t.lit=t.TName=t.name=t.TType=void 0;var r=n(95096),i=function(){};function a(e){return"string"==typeof e?l(e):e}function c(e,t){var n=e[t];if(!n)throw new Error("Unknown type "+t);return n}function l(e){return new u(e)}t.TType=i,t.name=l;var u=function(e){function t(t){var n=e.call(this)||this;return n.name=t,n._failMsg="is not a "+t,n}return s(t,e),t.prototype.getChecker=function(e,n,o){var s=this,r=c(e,this.name),i=r.getChecker(e,n,o);return r instanceof w||r instanceof t?i:function(e,t){return!!i(e,t)||t.fail(null,s._failMsg,0)}},t}(i);t.TName=u,t.lit=function(e){return new h(e)};var h=function(e){function t(t){var n=e.call(this)||this;return n.value=t,n.name=JSON.stringify(t),n._failMsg="is not "+n.name,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return e===n.value||t.fail(null,n._failMsg,-1)}},t}(i);t.TLiteral=h,t.array=function(e){return new p(a(e))};var p=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var o=0;o<e.length;o++){if(!n(e[o],t))return t.fail(o,null,1)}return!0}},t}(i);t.TArray=p,t.tuple=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new d(e.map((function(e){return a(e)})))};var d=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttypes.map((function(n){return n.getChecker(e,t)})),o=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var o=0;o<n.length;o++){if(!n[o](e[o],t))return t.fail(o,null,1)}return!0};return t?function(e,t){return!!o(e,t)&&(e.length<=n.length||t.fail(n.length,"is extraneous",2))}:o},t}(i);t.TTuple=d,t.union=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new f(e.map((function(e){return a(e)})))};var f=function(e){function t(t){var n=e.call(this)||this;n.ttypes=t;var o=t.map((function(e){return e instanceof u||e instanceof h?e.name:null})).filter((function(e){return e})),s=t.length-o.length;return o.length?(s>0&&o.push(s+" more"),n._failMsg="is none of "+o.join(", ")):n._failMsg="is none of "+s+" types",n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,o=this.ttypes.map((function(n){return n.getChecker(e,t)}));return function(e,t){for(var s=t.unionResolver(),r=0;r<o.length;r++){if(o[r](e,s.createContext()))return!0}return t.resolveUnion(s),t.fail(null,n._failMsg,0)}},t}(i);t.TUnion=f,t.intersection=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new m(e.map((function(e){return a(e)})))};var m=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=new Set,o=this.ttypes.map((function(o){return o.getChecker(e,t,n)}));return function(e,t){return!!o.every((function(n){return n(e,t)}))||t.fail(null,null,0)}},t}(i);t.TIntersection=m,t.enumtype=function(e){return new k(e)};var k=function(e){function t(t){var n=e.call(this)||this;return n.members=t,n.validValues=new Set,n._failMsg="is not a valid enum value",n.validValues=new Set(Object.keys(t).map((function(e){return t[e]}))),n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validValues.has(e)||t.fail(null,n._failMsg,0)}},t}(i);t.TEnumType=k,t.enumlit=function(e,t){return new g(e,t)};var g=function(e){function t(t,n){var o=e.call(this)||this;return o.enumName=t,o.prop=n,o._failMsg="is not "+t+"."+n,o}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,o=c(e,this.enumName);if(!(o instanceof k))throw new Error("Type "+this.enumName+" used in enumlit is not an enum type");var s=o.members[this.prop];if(!o.members.hasOwnProperty(this.prop))throw new Error("Unknown value "+this.enumName+"."+this.prop+" used in enumlit");return function(e,t){return e===s||t.fail(null,n._failMsg,-1)}},t}(i);function _(e){return Object.keys(e).map((function(t){return function(e,t){return t instanceof x?new T(e,t.ttype,!0):new T(e,a(t),!1)}(t,e[t])}))}t.TEnumLiteral=g,t.iface=function(e,t){return new y(e,_(t))};var y=function(e){function t(t,n){var o=e.call(this)||this;return o.bases=t,o.props=n,o.propSet=new Set(n.map((function(e){return e.name}))),o}return s(t,e),t.prototype.getChecker=function(e,t,n){var o=this,s=this.bases.map((function(n){return c(e,n).getChecker(e,t)})),i=this.props.map((function(n){return n.ttype.getChecker(e,t)})),a=new r.NoopContext,l=this.props.map((function(e,t){return!e.isOpt&&!i[t](void 0,a)})),u=function(e,t){if("object"!=typeof e||null===e)return t.fail(null,"is not an object",0);for(var n=0;n<s.length;n++)if(!s[n](e,t))return!1;for(n=0;n<i.length;n++){var r=o.props[n].name,a=e[r];if(void 0===a){if(l[n])return t.fail(r,"is missing",1)}else if(!i[n](a,t))return t.fail(r,null,1)}return!0};if(!t)return u;var h=this.propSet;return n&&(this.propSet.forEach((function(e){return n.add(e)})),h=n),function(e,t){if(!u(e,t))return!1;for(var n in e)if(!h.has(n))return t.fail(n,"is extraneous",2);return!0}},t}(i);t.TIface=y,t.opt=function(e){return new x(a(e))};var x=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){return void 0===e||n(e,t)}},t}(i);t.TOptional=x;var T=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TProp=T,t.func=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return new b(new I(t),a(e))};var b=function(e){function t(t,n){var o=e.call(this)||this;return o.paramList=t,o.result=n,o}return s(t,e),t.prototype.getChecker=function(e,t){return function(e,t){return"function"==typeof e||t.fail(null,"is not a function",0)}},t}(i);t.TFunc=b,t.param=function(e,t,n){return new v(e,a(t),Boolean(n))};var v=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TParam=v;var I=function(e){function t(t){var n=e.call(this)||this;return n.params=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,o=this.params.map((function(n){return n.ttype.getChecker(e,t)})),s=new r.NoopContext,i=this.params.map((function(e,t){return!e.isOpt&&!o[t](void 0,s)})),a=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var s=0;s<o.length;s++){var r=n.params[s];if(void 0===e[s]){if(i[s])return t.fail(r.name,"is missing",1)}else if(!o[s](e[s],t))return t.fail(r.name,null,1)}return!0};return t?function(e,t){return!!a(e,t)&&(e.length<=o.length||t.fail(o.length,"is extraneous",2))}:a},t}(i);t.TParamList=I;var w=function(e){function t(t,n){var o=e.call(this)||this;return o.validator=t,o.message=n,o}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validator(e)||t.fail(null,n.message,0)}},t}(i);t.BasicType=w,t.basicTypes={any:new w((function(e){return!0}),"is invalid"),number:new w((function(e){return"number"==typeof e}),"is not a number"),object:new w((function(e){return"object"==typeof e&&e}),"is not an object"),boolean:new w((function(e){return"boolean"==typeof e}),"is not a boolean"),string:new w((function(e){return"string"==typeof e}),"is not a string"),symbol:new w((function(e){return"symbol"==typeof e}),"is not a symbol"),void:new w((function(e){return null==e}),"is not void"),undefined:new w((function(e){return void 0===e}),"is not undefined"),null:new w((function(e){return null===e}),"is not null"),never:new w((function(e){return!1}),"is unexpected"),Date:new w(E("[object Date]"),"is not a Date"),RegExp:new w(E("[object RegExp]"),"is not a RegExp")};var C=Object.prototype.toString;function E(e){return function(t){return"object"==typeof t&&t&&C.call(t)===e}}"undefined"!=typeof Buffer&&(t.basicTypes.Buffer=new w((function(e){return Buffer.isBuffer(e)}),"is not a Buffer"));for(var A=function(e){t.basicTypes[e.name]=new w((function(t){return t instanceof e}),"is not a "+e.name)},S=0,N=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,ArrayBuffer];S<N.length;S++){A(N[S])}},95096:function(e,t){"use strict";var n,o=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},n(e,t)},function(e,t){function o(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,"__esModule",{value:!0}),t.DetailContext=t.NoopContext=t.VError=void 0;var s=function(e){function t(n,o){var s=e.call(this,o)||this;return s.path=n,Object.setPrototypeOf(s,t.prototype),s}return o(t,e),t}(Error);t.VError=s;var r=function(){function e(){}return e.prototype.fail=function(e,t,n){return!1},e.prototype.unionResolver=function(){return this},e.prototype.createContext=function(){return this},e.prototype.resolveUnion=function(e){},e}();t.NoopContext=r;var i=function(){function e(){this._propNames=[""],this._messages=[null],this._score=0}return e.prototype.fail=function(e,t,n){return this._propNames.push(e),this._messages.push(t),this._score+=n,!1},e.prototype.unionResolver=function(){return new a},e.prototype.resolveUnion=function(e){for(var t,n,o=null,s=0,r=e.contexts;s<r.length;s++){var i=r[s];(!o||i._score>=o._score)&&(o=i)}o&&o._score>0&&((t=this._propNames).push.apply(t,o._propNames),(n=this._messages).push.apply(n,o._messages))},e.prototype.getError=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var o=this._propNames[n];e+="number"==typeof o?"["+o+"]":o?"."+o:"";var r=this._messages[n];r&&t.push(e+" "+r)}return new s(e,t.join("; "))},e.prototype.getErrorDetail=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var o=this._propNames[n];e+="number"==typeof o?"["+o+"]":o?"."+o:"";var s=this._messages[n];s&&t.push({path:e,message:s})}var r=null;for(n=t.length-1;n>=0;n--)r&&(t[n].nested=[r]),r=t[n];return r},e}();t.DetailContext=i;var a=function(){function e(){this.contexts=[]}return e.prototype.createContext=function(){var e=new i;return this.contexts.push(e),e},e}()},71670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,a:()=>i});var o=n(27378);const s={},r=o.createContext(s);function i(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:t},e.children)}},32711:(e,t,n)=>{"use strict";n.d(t,{uz:()=>Zs,IF:()=>er,i5:()=>tr,nu:()=>Ys});var o=n(26101),s=n(27378),r={characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0};function i(e){var t=window.getSelection();t.empty(),t.addRange(e)}function a(e){return(e.metaKey||e.ctrlKey)&&!e.altKey&&"KeyZ"===e.code}function c(e){e=[e.firstChild];for(var t,n="";t=e.pop();)t.nodeType===Node.TEXT_NODE?n+=t.textContent:t.nodeType===Node.ELEMENT_NODE&&"BR"===t.nodeName&&(n+="\n"),t.nextSibling&&e.push(t.nextSibling),t.firstChild&&e.push(t.firstChild);return"\n"!==n[n.length-1]&&(n+="\n"),n}function l(e){var t=window.getSelection().getRangeAt(0),n=t.collapsed?0:t.toString().length,o=document.createRange();return o.setStart(e,0),o.setEnd(t.startContainer,t.startOffset),{position:e=(o=o.toString()).length,extent:n,content:o=(o=o.split("\n"))[t=o.length-1],line:t}}function u(e,t,n){0>=t&&(t=0),(!n||0>n)&&(n=t);var o=document.createRange();e=[e.firstChild];for(var s,r=0,i=t;s=e[e.length-1];){if(s.nodeType===Node.TEXT_NODE){if(r+s.textContent.length>=i){var a=i-r;if(i===t){if(i=o,a<s.textContent.length?i.setStart(s,a):i.setStartAfter(s),n!==t){i=n;continue}break}t=o,a<(n=s).textContent.length?t.setEnd(n,a):t.setEndAfter(n);break}r+=s.textContent.length}else if(s.nodeType===Node.ELEMENT_NODE&&"BR"===s.nodeName){if(r+1>=i){if(i===t){if(a=o,0<s.textContent.length?a.setStart(s,0):a.setStartAfter(s),n!==t){i=n;continue}break}t=o,0<(n=s).textContent.length?t.setEnd(n,0):t.setEndAfter(n);break}r++}e.pop(),s.nextSibling&&e.push(s.nextSibling),s.firstChild&&e.push(s.firstChild)}return o}var h,p,d,f=n(24246);!function(e){e[e.NONE=0]="NONE";e[e._abstract=1]="_abstract";e[e._accessor=2]="_accessor";e[e._as=3]="_as";e[e._assert=4]="_assert";e[e._asserts=5]="_asserts";e[e._async=6]="_async";e[e._await=7]="_await";e[e._checks=8]="_checks";e[e._constructor=9]="_constructor";e[e._declare=10]="_declare";e[e._enum=11]="_enum";e[e._exports=12]="_exports";e[e._from=13]="_from";e[e._get=14]="_get";e[e._global=15]="_global";e[e._implements=16]="_implements";e[e._infer=17]="_infer";e[e._interface=18]="_interface";e[e._is=19]="_is";e[e._keyof=20]="_keyof";e[e._mixins=21]="_mixins";e[e._module=22]="_module";e[e._namespace=23]="_namespace";e[e._of=24]="_of";e[e._opaque=25]="_opaque";e[e._out=26]="_out";e[e._override=27]="_override";e[e._private=28]="_private";e[e._protected=29]="_protected";e[e._proto=30]="_proto";e[e._public=31]="_public";e[e._readonly=32]="_readonly";e[e._require=33]="_require";e[e._satisfies=34]="_satisfies";e[e._set=35]="_set";e[e._static=36]="_static";e[e._symbol=37]="_symbol";e[e._type=38]="_type";e[e._unique=39]="_unique";e[e._using=40]="_using"}(h||(h={})),function(e){e[e.PRECEDENCE_MASK=15]="PRECEDENCE_MASK";e[e.IS_KEYWORD=16]="IS_KEYWORD";e[e.IS_ASSIGN=32]="IS_ASSIGN";e[e.IS_RIGHT_ASSOCIATIVE=64]="IS_RIGHT_ASSOCIATIVE";e[e.IS_PREFIX=128]="IS_PREFIX";e[e.IS_POSTFIX=256]="IS_POSTFIX";e[e.IS_EXPRESSION_START=512]="IS_EXPRESSION_START";e[e.num=512]="num";e[e.bigint=1536]="bigint";e[e.decimal=2560]="decimal";e[e.regexp=3584]="regexp";e[e.string=4608]="string";e[e.name=5632]="name";e[e.eof=6144]="eof";e[e.bracketL=7680]="bracketL";e[e.bracketR=8192]="bracketR";e[e.braceL=9728]="braceL";e[e.braceBarL=10752]="braceBarL";e[e.braceR=11264]="braceR";e[e.braceBarR=12288]="braceBarR";e[e.parenL=13824]="parenL";e[e.parenR=14336]="parenR";e[e.comma=15360]="comma";e[e.semi=16384]="semi";e[e.colon=17408]="colon";e[e.doubleColon=18432]="doubleColon";e[e.dot=19456]="dot";e[e.question=20480]="question";e[e.questionDot=21504]="questionDot";e[e.arrow=22528]="arrow";e[e.template=23552]="template";e[e.ellipsis=24576]="ellipsis";e[e.backQuote=25600]="backQuote";e[e.dollarBraceL=27136]="dollarBraceL";e[e.at=27648]="at";e[e.hash=29184]="hash";e[e.eq=29728]="eq";e[e.assign=30752]="assign";e[e.preIncDec=32640]="preIncDec";e[e.postIncDec=33664]="postIncDec";e[e.bang=34432]="bang";e[e.tilde=35456]="tilde";e[e.pipeline=35841]="pipeline";e[e.nullishCoalescing=36866]="nullishCoalescing";e[e.logicalOR=37890]="logicalOR";e[e.logicalAND=38915]="logicalAND";e[e.bitwiseOR=39940]="bitwiseOR";e[e.bitwiseXOR=40965]="bitwiseXOR";e[e.bitwiseAND=41990]="bitwiseAND";e[e.equality=43015]="equality";e[e.lessThan=44040]="lessThan";e[e.greaterThan=45064]="greaterThan";e[e.relationalOrEqual=46088]="relationalOrEqual";e[e.bitShiftL=47113]="bitShiftL";e[e.bitShiftR=48137]="bitShiftR";e[e.plus=49802]="plus";e[e.minus=50826]="minus";e[e.modulo=51723]="modulo";e[e.star=52235]="star";e[e.slash=53259]="slash";e[e.exponent=54348]="exponent";e[e.jsxName=55296]="jsxName";e[e.jsxText=56320]="jsxText";e[e.jsxEmptyText=57344]="jsxEmptyText";e[e.jsxTagStart=58880]="jsxTagStart";e[e.jsxTagEnd=59392]="jsxTagEnd";e[e.typeParameterStart=60928]="typeParameterStart";e[e.nonNullAssertion=61440]="nonNullAssertion";e[e._break=62480]="_break";e[e._case=63504]="_case";e[e._catch=64528]="_catch";e[e._continue=65552]="_continue";e[e._debugger=66576]="_debugger";e[e._default=67600]="_default";e[e._do=68624]="_do";e[e._else=69648]="_else";e[e._finally=70672]="_finally";e[e._for=71696]="_for";e[e._function=73232]="_function";e[e._if=73744]="_if";e[e._return=74768]="_return";e[e._switch=75792]="_switch";e[e._throw=77456]="_throw";e[e._try=77840]="_try";e[e._var=78864]="_var";e[e._let=79888]="_let";e[e._const=80912]="_const";e[e._while=81936]="_while";e[e._with=82960]="_with";e[e._new=84496]="_new";e[e._this=85520]="_this";e[e._super=86544]="_super";e[e._class=87568]="_class";e[e._extends=88080]="_extends";e[e._export=89104]="_export";e[e._import=90640]="_import";e[e._yield=91664]="_yield";e[e._null=92688]="_null";e[e._true=93712]="_true";e[e._false=94736]="_false";e[e._in=95256]="_in";e[e._instanceof=96280]="_instanceof";e[e._typeof=97936]="_typeof";e[e._void=98960]="_void";e[e._delete=99984]="_delete";e[e._async=100880]="_async";e[e._get=101904]="_get";e[e._set=102928]="_set";e[e._declare=103952]="_declare";e[e._readonly=104976]="_readonly";e[e._abstract=106e3]="_abstract";e[e._static=107024]="_static";e[e._public=107536]="_public";e[e._private=108560]="_private";e[e._protected=109584]="_protected";e[e._override=110608]="_override";e[e._as=112144]="_as";e[e._enum=113168]="_enum";e[e._type=114192]="_type";e[e._implements=115216]="_implements"}(p||(p={}));class m{constructor(e,t,n){this.startTokenIndex=e,this.endTokenIndex=t,this.isFunctionScope=n}}class k{constructor(e,t,n,o,s,r,i,a,c,l,u,h,p){this.potentialArrowAt=e,this.noAnonFunctionType=t,this.inDisallowConditionalTypesContext=n,this.tokensLength=o,this.scopesLength=s,this.pos=r,this.type=i,this.contextualKeyword=a,this.start=c,this.end=l,this.isType=u,this.scopeDepth=h,this.error=p}}class g{constructor(){g.prototype.__init.call(this),g.prototype.__init2.call(this),g.prototype.__init3.call(this),g.prototype.__init4.call(this),g.prototype.__init5.call(this),g.prototype.__init6.call(this),g.prototype.__init7.call(this),g.prototype.__init8.call(this),g.prototype.__init9.call(this),g.prototype.__init10.call(this),g.prototype.__init11.call(this),g.prototype.__init12.call(this),g.prototype.__init13.call(this)}__init(){this.potentialArrowAt=-1}__init2(){this.noAnonFunctionType=!1}__init3(){this.inDisallowConditionalTypesContext=!1}__init4(){this.tokens=[]}__init5(){this.scopes=[]}__init6(){this.pos=0}__init7(){this.type=p.eof}__init8(){this.contextualKeyword=h.NONE}__init9(){this.start=0}__init10(){this.end=0}__init11(){this.isType=!1}__init12(){this.scopeDepth=0}__init13(){this.error=null}snapshot(){return new k(this.potentialArrowAt,this.noAnonFunctionType,this.inDisallowConditionalTypesContext,this.tokens.length,this.scopes.length,this.pos,this.type,this.contextualKeyword,this.start,this.end,this.isType,this.scopeDepth,this.error)}restoreFromSnapshot(e){this.potentialArrowAt=e.potentialArrowAt,this.noAnonFunctionType=e.noAnonFunctionType,this.inDisallowConditionalTypesContext=e.inDisallowConditionalTypesContext,this.tokens.length=e.tokensLength,this.scopes.length=e.scopesLength,this.pos=e.pos,this.type=e.type,this.contextualKeyword=e.contextualKeyword,this.start=e.start,this.end=e.end,this.isType=e.isType,this.scopeDepth=e.scopeDepth,this.error=e.error}}let _,y,x,T,b,v;function I(){return v++}function w(e){if("pos"in e){const t=function(e){let t=1,n=1;for(let o=0;o<e;o++)b.charCodeAt(o)===d.lineFeed?(t++,n=1):n++;return new C(t,n)}(e.pos);e.message+=` (${t.line}:${t.column})`,e.loc=t}return e}!function(e){e[e.backSpace=8]="backSpace";e[e.lineFeed=10]="lineFeed";e[e.tab=9]="tab";e[e.carriageReturn=13]="carriageReturn";e[e.shiftOut=14]="shiftOut";e[e.space=32]="space";e[e.exclamationMark=33]="exclamationMark";e[e.quotationMark=34]="quotationMark";e[e.numberSign=35]="numberSign";e[e.dollarSign=36]="dollarSign";e[e.percentSign=37]="percentSign";e[e.ampersand=38]="ampersand";e[e.apostrophe=39]="apostrophe";e[e.leftParenthesis=40]="leftParenthesis";e[e.rightParenthesis=41]="rightParenthesis";e[e.asterisk=42]="asterisk";e[e.plusSign=43]="plusSign";e[e.comma=44]="comma";e[e.dash=45]="dash";e[e.dot=46]="dot";e[e.slash=47]="slash";e[e.digit0=48]="digit0";e[e.digit1=49]="digit1";e[e.digit2=50]="digit2";e[e.digit3=51]="digit3";e[e.digit4=52]="digit4";e[e.digit5=53]="digit5";e[e.digit6=54]="digit6";e[e.digit7=55]="digit7";e[e.digit8=56]="digit8";e[e.digit9=57]="digit9";e[e.colon=58]="colon";e[e.semicolon=59]="semicolon";e[e.lessThan=60]="lessThan";e[e.equalsTo=61]="equalsTo";e[e.greaterThan=62]="greaterThan";e[e.questionMark=63]="questionMark";e[e.atSign=64]="atSign";e[e.uppercaseA=65]="uppercaseA";e[e.uppercaseB=66]="uppercaseB";e[e.uppercaseC=67]="uppercaseC";e[e.uppercaseD=68]="uppercaseD";e[e.uppercaseE=69]="uppercaseE";e[e.uppercaseF=70]="uppercaseF";e[e.uppercaseG=71]="uppercaseG";e[e.uppercaseH=72]="uppercaseH";e[e.uppercaseI=73]="uppercaseI";e[e.uppercaseJ=74]="uppercaseJ";e[e.uppercaseK=75]="uppercaseK";e[e.uppercaseL=76]="uppercaseL";e[e.uppercaseM=77]="uppercaseM";e[e.uppercaseN=78]="uppercaseN";e[e.uppercaseO=79]="uppercaseO";e[e.uppercaseP=80]="uppercaseP";e[e.uppercaseQ=81]="uppercaseQ";e[e.uppercaseR=82]="uppercaseR";e[e.uppercaseS=83]="uppercaseS";e[e.uppercaseT=84]="uppercaseT";e[e.uppercaseU=85]="uppercaseU";e[e.uppercaseV=86]="uppercaseV";e[e.uppercaseW=87]="uppercaseW";e[e.uppercaseX=88]="uppercaseX";e[e.uppercaseY=89]="uppercaseY";e[e.uppercaseZ=90]="uppercaseZ";e[e.leftSquareBracket=91]="leftSquareBracket";e[e.backslash=92]="backslash";e[e.rightSquareBracket=93]="rightSquareBracket";e[e.caret=94]="caret";e[e.underscore=95]="underscore";e[e.graveAccent=96]="graveAccent";e[e.lowercaseA=97]="lowercaseA";e[e.lowercaseB=98]="lowercaseB";e[e.lowercaseC=99]="lowercaseC";e[e.lowercaseD=100]="lowercaseD";e[e.lowercaseE=101]="lowercaseE";e[e.lowercaseF=102]="lowercaseF";e[e.lowercaseG=103]="lowercaseG";e[e.lowercaseH=104]="lowercaseH";e[e.lowercaseI=105]="lowercaseI";e[e.lowercaseJ=106]="lowercaseJ";e[e.lowercaseK=107]="lowercaseK";e[e.lowercaseL=108]="lowercaseL";e[e.lowercaseM=109]="lowercaseM";e[e.lowercaseN=110]="lowercaseN";e[e.lowercaseO=111]="lowercaseO";e[e.lowercaseP=112]="lowercaseP";e[e.lowercaseQ=113]="lowercaseQ";e[e.lowercaseR=114]="lowercaseR";e[e.lowercaseS=115]="lowercaseS";e[e.lowercaseT=116]="lowercaseT";e[e.lowercaseU=117]="lowercaseU";e[e.lowercaseV=118]="lowercaseV";e[e.lowercaseW=119]="lowercaseW";e[e.lowercaseX=120]="lowercaseX";e[e.lowercaseY=121]="lowercaseY";e[e.lowercaseZ=122]="lowercaseZ";e[e.leftCurlyBrace=123]="leftCurlyBrace";e[e.verticalBar=124]="verticalBar";e[e.rightCurlyBrace=125]="rightCurlyBrace";e[e.tilde=126]="tilde";e[e.nonBreakingSpace=160]="nonBreakingSpace";e[e.oghamSpaceMark=5760]="oghamSpaceMark";e[e.lineSeparator=8232]="lineSeparator";e[e.paragraphSeparator=8233]="paragraphSeparator"}(d||(d={}));class C{constructor(e,t){this.line=e,this.column=t}}function E(e,t,n,o){b=e,T=new g,v=1,_=t,y=n,x=o}function A(e){return T.contextualKeyword===e}function S(e){const t=he();return t.type===p.name&&t.contextualKeyword===e}function N(e){return T.contextualKeyword===e&&ie(p.name)}function R(e){N(e)||F()}function L(){return ce(p.eof)||ce(p.braceR)||j()}function j(){const e=T.tokens[T.tokens.length-1];for(let t=e?e.end:0;t<T.start;t++){const e=b.charCodeAt(t);if(e===d.lineFeed||e===d.carriageReturn||8232===e||8233===e)return!0}return!1}function O(){const e=pe();for(let t=T.end;t<e;t++){const e=b.charCodeAt(t);if(e===d.lineFeed||e===d.carriageReturn||8232===e||8233===e)return!0}return!1}function D(){return ie(p.semi)||L()}function P(){D()||F('Unexpected token, expected ";"')}function M(e){ie(e)||F(`Unexpected token, expected "${function(e){switch(e){case p.num:return"num";case p.bigint:return"bigint";case p.decimal:return"decimal";case p.regexp:return"regexp";case p.string:return"string";case p.name:return"name";case p.eof:return"eof";case p.bracketL:return"[";case p.bracketR:return"]";case p.braceL:return"{";case p.braceBarL:return"{|";case p.braceR:return"}";case p.braceBarR:return"|}";case p.parenL:return"(";case p.parenR:return")";case p.comma:return",";case p.semi:return";";case p.colon:return":";case p.doubleColon:return"::";case p.dot:return".";case p.question:return"?";case p.questionDot:return"?.";case p.arrow:return"=>";case p.template:return"template";case p.ellipsis:return"...";case p.backQuote:return"`";case p.dollarBraceL:return"${";case p.at:return"@";case p.hash:return"#";case p.eq:return"=";case p.assign:return"_=";case p.preIncDec:case p.postIncDec:return"++/--";case p.bang:return"!";case p.tilde:return"~";case p.pipeline:return"|>";case p.nullishCoalescing:return"??";case p.logicalOR:return"||";case p.logicalAND:return"&&";case p.bitwiseOR:return"|";case p.bitwiseXOR:return"^";case p.bitwiseAND:return"&";case p.equality:return"==/!=";case p.lessThan:return"<";case p.greaterThan:return">";case p.relationalOrEqual:return"<=/>=";case p.bitShiftL:return"<<";case p.bitShiftR:return">>/>>>";case p.plus:return"+";case p.minus:return"-";case p.modulo:return"%";case p.star:return"*";case p.slash:return"/";case p.exponent:return"**";case p.jsxName:return"jsxName";case p.jsxText:return"jsxText";case p.jsxEmptyText:return"jsxEmptyText";case p.jsxTagStart:return"jsxTagStart";case p.jsxTagEnd:return"jsxTagEnd";case p.typeParameterStart:return"typeParameterStart";case p.nonNullAssertion:return"nonNullAssertion";case p._break:return"break";case p._case:return"case";case p._catch:return"catch";case p._continue:return"continue";case p._debugger:return"debugger";case p._default:return"default";case p._do:return"do";case p._else:return"else";case p._finally:return"finally";case p._for:return"for";case p._function:return"function";case p._if:return"if";case p._return:return"return";case p._switch:return"switch";case p._throw:return"throw";case p._try:return"try";case p._var:return"var";case p._let:return"let";case p._const:return"const";case p._while:return"while";case p._with:return"with";case p._new:return"new";case p._this:return"this";case p._super:return"super";case p._class:return"class";case p._extends:return"extends";case p._export:return"export";case p._import:return"import";case p._yield:return"yield";case p._null:return"null";case p._true:return"true";case p._false:return"false";case p._in:return"in";case p._instanceof:return"instanceof";case p._typeof:return"typeof";case p._void:return"void";case p._delete:return"delete";case p._async:return"async";case p._get:return"get";case p._set:return"set";case p._declare:return"declare";case p._readonly:return"readonly";case p._abstract:return"abstract";case p._static:return"static";case p._public:return"public";case p._private:return"private";case p._protected:return"protected";case p._override:return"override";case p._as:return"as";case p._enum:return"enum";case p._type:return"type";case p._implements:return"implements";default:return""}}(e)}"`)}function F(e="Unexpected token",t=T.start){if(T.error)return;const n=new SyntaxError(e);n.pos=t,T.error=n,T.pos=b.length,ye(p.eof)}const q=[9,11,12,d.space,d.nonBreakingSpace,d.oghamSpaceMark,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],$=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g,B=new Uint8Array(65536);for(const nr of q)B[nr]=1;function K(e){if(e<48)return 36===e;if(e<58)return!0;if(e<65)return!1;if(e<91)return!0;if(e<97)return 95===e;if(e<123)return!0;if(e<128)return!1;throw new Error("Should not be called with non-ASCII char code.")}const U=new Uint8Array(65536);for(let nr=0;nr<128;nr++)U[nr]=K(nr)?1:0;for(let nr=128;nr<65536;nr++)U[nr]=1;for(const nr of q)U[nr]=0;U[8232]=0,U[8233]=0;const V=U.slice();for(let nr=d.digit0;nr<=d.digit9;nr++)V[nr]=0;const W=new Int32Array([-1,27,783,918,1755,2376,2862,3483,-1,3699,-1,4617,4752,4833,5130,5508,5940,-1,6480,6939,7749,8181,8451,8613,-1,8829,-1,-1,-1,54,243,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,432,-1,-1,-1,675,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,108,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,216,-1,-1,-1,-1,-1,-1,h._abstract<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,405,-1,-1,-1,-1,-1,-1,-1,-1,h._accessor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._as<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,459,-1,-1,-1,-1,-1,594,-1,-1,-1,-1,-1,-1,486,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,513,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,540,-1,-1,-1,-1,-1,-1,h._assert<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,567,-1,-1,-1,-1,-1,-1,-1,h._asserts<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,621,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,648,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._async<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,702,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,729,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,756,-1,-1,-1,-1,-1,-1,h._await<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,810,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,837,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,864,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._break<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,945,-1,-1,-1,-1,-1,-1,1107,-1,-1,-1,1242,-1,-1,1350,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,972,1026,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,999,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._case<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1053,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1080,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._catch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1134,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1161,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1215,-1,-1,-1,-1,-1,-1,-1,h._checks<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1269,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1296,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1323,-1,-1,-1,-1,-1,-1,-1,1+(p._class<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1404,1620,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1431,-1,-1,-1,-1,-1,-1,1+(p._const<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1458,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1485,-1,-1,-1,-1,-1,-1,-1,-1,1512,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1539,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1566,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1593,-1,-1,-1,-1,-1,-1,-1,-1,h._constructor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1647,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1674,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1701,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1728,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._continue<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1782,-1,-1,-1,-1,-1,-1,-1,-1,-1,2349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1809,1971,-1,-1,2106,-1,-1,-1,-1,-1,2241,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1836,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1863,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1890,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1917,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1944,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._debugger<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1998,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2025,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2052,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2079,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._declare<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2133,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2160,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2187,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2214,-1,-1,-1,-1,-1,-1,1+(p._default<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2268,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2295,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2322,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._delete<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._do<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2403,-1,2484,-1,-1,-1,-1,-1,-1,-1,-1,-1,2565,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2430,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2457,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._else<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2511,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2538,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._enum<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2592,-1,-1,-1,2727,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2619,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2646,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2673,-1,-1,-1,-1,-1,-1,1+(p._export<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,-1,-1,-1,-1,-1,-1,-1,h._exports<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2754,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2808,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2835,-1,-1,-1,-1,-1,-1,-1,1+(p._extends<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2889,-1,-1,-1,-1,-1,-1,-1,2997,-1,-1,-1,-1,-1,3159,-1,-1,3213,-1,-1,3294,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2916,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2943,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2970,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._false<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3024,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3051,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3078,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3105,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3132,-1,1+(p._finally<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3186,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._for<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._from<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3321,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3348,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3375,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3429,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3456,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._function<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3510,-1,-1,-1,-1,-1,-1,3564,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3537,-1,-1,-1,-1,-1,-1,h._get<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3591,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3618,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3645,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3672,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._global<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3726,-1,-1,-1,-1,-1,-1,3753,4077,-1,-1,-1,-1,4590,-1,-1,-1,-1,-1,-1,-1,1+(p._if<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3780,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3807,-1,-1,3996,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3834,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3861,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3888,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3915,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3942,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3969,-1,-1,-1,-1,-1,-1,-1,h._implements<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4023,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4050,-1,-1,-1,-1,-1,-1,1+(p._import<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._in<<1),-1,-1,-1,-1,-1,4104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4185,4401,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4131,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4158,-1,-1,-1,-1,-1,-1,-1,-1,h._infer<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4212,-1,-1,-1,-1,-1,-1,-1,4239,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4293,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4320,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4374,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._instanceof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4428,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4455,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4482,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4509,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4563,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._interface<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._is<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4644,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4671,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4725,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._keyof<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4779,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4806,-1,-1,-1,-1,-1,-1,1+(p._let<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4860,-1,-1,-1,-1,-1,4995,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4887,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4914,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4941,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4968,-1,-1,-1,-1,-1,-1,-1,h._mixins<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5022,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5049,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._module<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5157,-1,-1,-1,5373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5427,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5211,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5238,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5265,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5292,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5346,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._namespace<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5400,-1,-1,-1,1+(p._new<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5454,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5481,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._null<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5535,-1,-1,-1,-1,-1,-1,-1,-1,-1,5562,-1,-1,-1,-1,5697,5751,-1,-1,-1,-1,h._of<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5589,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5616,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5643,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5670,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._opaque<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5724,-1,-1,-1,-1,-1,-1,h._out<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5778,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5805,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5832,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5886,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5913,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._override<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5967,-1,-1,6345,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5994,-1,-1,-1,-1,-1,6129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6021,-1,-1,-1,-1,-1,6048,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6075,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6102,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._private<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6156,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6183,-1,-1,-1,-1,-1,-1,-1,-1,-1,6318,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6237,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6264,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._protected<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._proto<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6372,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6399,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6426,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6453,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._public<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6507,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6534,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6696,-1,-1,6831,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6561,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6588,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6615,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6642,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6669,-1,h._readonly<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6723,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6750,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6777,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6804,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._require<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6885,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6912,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._return<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6966,-1,-1,-1,7182,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7236,7371,-1,7479,-1,7614,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6993,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7020,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7047,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7074,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7128,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7155,-1,-1,-1,-1,-1,-1,-1,h._satisfies<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7209,-1,-1,-1,-1,-1,-1,h._set<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7263,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7290,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7317,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7344,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._static<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7398,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7425,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7452,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._super<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7506,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7533,-1,-1,-1,-1,-1,-1,-1,-1,-1,7560,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7587,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._switch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7641,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7668,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7695,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7722,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._symbol<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7776,-1,-1,-1,-1,-1,-1,-1,-1,-1,7938,-1,-1,-1,-1,-1,-1,8046,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7803,-1,-1,-1,-1,-1,-1,-1,-1,7857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7830,-1,-1,-1,-1,-1,-1,-1,1+(p._this<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7884,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7911,-1,-1,-1,1+(p._throw<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7965,-1,-1,-1,8019,-1,-1,-1,-1,-1,-1,7992,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._true<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._try<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8073,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._type<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8127,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8154,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._typeof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8208,-1,-1,-1,-1,8343,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8235,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8262,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8289,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8316,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._unique<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8370,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8397,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8424,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,h._using<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8478,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8532,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8505,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._var<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8559,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8586,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._void<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8640,8748,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8667,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8694,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8721,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._while<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8775,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8802,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._with<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8856,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8883,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8910,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8937,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(p._yield<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);var H,X;function z(e){const t=e.identifierRole;return t===H.TopLevelDeclaration||t===H.FunctionScopedDeclaration||t===H.BlockScopedDeclaration||t===H.ObjectShorthandTopLevelDeclaration||t===H.ObjectShorthandFunctionScopedDeclaration||t===H.ObjectShorthandBlockScopedDeclaration}function G(e){const t=e.identifierRole;return t===H.FunctionScopedDeclaration||t===H.BlockScopedDeclaration||t===H.ObjectShorthandFunctionScopedDeclaration||t===H.ObjectShorthandBlockScopedDeclaration}function J(e){const t=e.identifierRole;return t===H.TopLevelDeclaration||t===H.ObjectShorthandTopLevelDeclaration||t===H.ImportDeclaration}function Q(e){const t=e.identifierRole;return t===H.TopLevelDeclaration||t===H.BlockScopedDeclaration||t===H.ObjectShorthandTopLevelDeclaration||t===H.ObjectShorthandBlockScopedDeclaration}function Y(e){const t=e.identifierRole;return t===H.FunctionScopedDeclaration||t===H.ObjectShorthandFunctionScopedDeclaration}function Z(e){return e.identifierRole===H.ObjectShorthandTopLevelDeclaration||e.identifierRole===H.ObjectShorthandBlockScopedDeclaration||e.identifierRole===H.ObjectShorthandFunctionScopedDeclaration}!function(e){e[e.Access=0]="Access";e[e.ExportAccess=1]="ExportAccess";e[e.TopLevelDeclaration=2]="TopLevelDeclaration";e[e.FunctionScopedDeclaration=3]="FunctionScopedDeclaration";e[e.BlockScopedDeclaration=4]="BlockScopedDeclaration";e[e.ObjectShorthandTopLevelDeclaration=5]="ObjectShorthandTopLevelDeclaration";e[e.ObjectShorthandFunctionScopedDeclaration=6]="ObjectShorthandFunctionScopedDeclaration";e[e.ObjectShorthandBlockScopedDeclaration=7]="ObjectShorthandBlockScopedDeclaration";e[e.ObjectShorthand=8]="ObjectShorthand";e[e.ImportDeclaration=9]="ImportDeclaration";e[e.ObjectKey=10]="ObjectKey";e[e.ImportAccess=11]="ImportAccess"}(H||(H={})),function(e){e[e.NoChildren=0]="NoChildren";e[e.OneChild=1]="OneChild";e[e.StaticChildren=2]="StaticChildren";e[e.KeyAfterPropSpread=3]="KeyAfterPropSpread"}(X||(X={}));class ee{constructor(){this.type=T.type,this.contextualKeyword=T.contextualKeyword,this.start=T.start,this.end=T.end,this.scopeDepth=T.scopeDepth,this.isType=T.isType,this.identifierRole=null,this.jsxRole=null,this.shadowsGlobal=!1,this.isAsyncOperation=!1,this.contextId=null,this.rhsEndIndex=null,this.isExpression=!1,this.numNullishCoalesceStarts=0,this.numNullishCoalesceEnds=0,this.isOptionalChainStart=!1,this.isOptionalChainEnd=!1,this.subscriptStartIndex=null,this.nullishStartIndex=null}}function te(){T.tokens.push(new ee),me()}function ne(){T.tokens.push(new ee),T.start=T.pos,function(){for(;;){if(T.pos>=b.length)return void F("Unterminated template");const e=b.charCodeAt(T.pos);if(e===d.graveAccent||e===d.dollarSign&&b.charCodeAt(T.pos+1)===d.leftCurlyBrace)return T.pos===T.start&&ce(p.template)?e===d.dollarSign?(T.pos+=2,void ye(p.dollarBraceL)):(++T.pos,void ye(p.backQuote)):void ye(p.template);e===d.backslash&&T.pos++,T.pos++}}()}function oe(){T.type===p.assign&&--T.pos,function(){const e=T.pos;let t=!1,n=!1;for(;;){if(T.pos>=b.length)return void F("Unterminated regular expression",e);const o=b.charCodeAt(T.pos);if(t)t=!1;else{if(o===d.leftSquareBracket)n=!0;else if(o===d.rightSquareBracket&&n)n=!1;else if(o===d.slash&&!n)break;t=o===d.backslash}++T.pos}++T.pos,function(){for(;T.pos<b.length;){const e=b.charCodeAt(T.pos);if(U[e])T.pos++;else{if(e!==d.backslash)break;if(T.pos+=2,b.charCodeAt(T.pos)===d.leftCurlyBrace){for(;T.pos<b.length&&b.charCodeAt(T.pos)!==d.rightCurlyBrace;)T.pos++;T.pos++}}}}(),ye(p.regexp)}()}function se(e){for(let n=T.tokens.length-e;n<T.tokens.length;n++)T.tokens[n].isType=!0;const t=T.isType;return T.isType=!0,t}function re(e){T.isType=e}function ie(e){return!!ce(e)&&(te(),!0)}function ae(e){const t=T.isType;T.isType=!0,ie(e),T.isType=t}function ce(e){return T.type===e}function le(){const e=T.snapshot();te();const t=T.type;return T.restoreFromSnapshot(e),t}class ue{constructor(e,t){this.type=e,this.contextualKeyword=t}}function he(){const e=T.snapshot();te();const t=T.type,n=T.contextualKeyword;return T.restoreFromSnapshot(e),new ue(t,n)}function pe(){return de(T.pos)}function de(e){$.lastIndex=e;return e+$.exec(b)[0].length}function fe(){return b.charCodeAt(pe())}function me(){if(_e(),T.start=T.pos,T.pos>=b.length){const e=T.tokens;return e.length>=2&&e[e.length-1].start>=b.length&&e[e.length-2].start>=b.length&&F("Unexpectedly reached the end of input."),void ye(p.eof)}var e;e=b.charCodeAt(T.pos),V[e]||e===d.backslash||e===d.atSign&&b.charCodeAt(T.pos+1)===d.atSign?function(){let e=0,t=0,n=T.pos;for(;n<b.length&&(t=b.charCodeAt(n),!(t<d.lowercaseA||t>d.lowercaseZ));){const o=W[e+(t-d.lowercaseA)+1];if(-1===o)break;e=o,n++}const o=W[e];if(o>-1&&!U[t])return T.pos=n,void(1&o?ye(o>>>1):ye(p.name,o>>>1));for(;n<b.length;){const e=b.charCodeAt(n);if(U[e])n++;else if(e===d.backslash){if(n+=2,b.charCodeAt(n)===d.leftCurlyBrace){for(;n<b.length&&b.charCodeAt(n)!==d.rightCurlyBrace;)n++;n++}}else{if(e!==d.atSign||b.charCodeAt(n+1)!==d.atSign)break;n+=2}}T.pos=n,ye(p.name)}():be(e)}function ke(){for(;b.charCodeAt(T.pos)!==d.asterisk||b.charCodeAt(T.pos+1)!==d.slash;)if(T.pos++,T.pos>b.length)return void F("Unterminated comment",T.pos-2);T.pos+=2}function ge(e){let t=b.charCodeAt(T.pos+=e);if(T.pos<b.length)for(;t!==d.lineFeed&&t!==d.carriageReturn&&t!==d.lineSeparator&&t!==d.paragraphSeparator&&++T.pos<b.length;)t=b.charCodeAt(T.pos)}function _e(){for(;T.pos<b.length;){const e=b.charCodeAt(T.pos);switch(e){case d.carriageReturn:b.charCodeAt(T.pos+1)===d.lineFeed&&++T.pos;case d.lineFeed:case d.lineSeparator:case d.paragraphSeparator:++T.pos;break;case d.slash:switch(b.charCodeAt(T.pos+1)){case d.asterisk:T.pos+=2,ke();break;case d.slash:ge(2);break;default:return}break;default:if(!B[e])return;++T.pos}}}function ye(e,t=h.NONE){T.end=T.pos,T.type=e,T.contextualKeyword=t}function xe(){if(T.isType)return void ve(p.greaterThan,1);const e=b.charCodeAt(T.pos+1);if(e===d.greaterThan){const e=b.charCodeAt(T.pos+2)===d.greaterThan?3:2;return b.charCodeAt(T.pos+e)===d.equalsTo?void ve(p.assign,e+1):void ve(p.bitShiftR,e)}e===d.equalsTo?ve(p.relationalOrEqual,2):ve(p.greaterThan,1)}function Te(){T.type===p.greaterThan&&(T.pos-=1,xe())}function be(e){switch(e){case d.numberSign:return++T.pos,void ye(p.hash);case d.dot:return void function(){const e=b.charCodeAt(T.pos+1);e>=d.digit0&&e<=d.digit9?we(!0):e===d.dot&&b.charCodeAt(T.pos+2)===d.dot?(T.pos+=3,ye(p.ellipsis)):(++T.pos,ye(p.dot))}();case d.leftParenthesis:return++T.pos,void ye(p.parenL);case d.rightParenthesis:return++T.pos,void ye(p.parenR);case d.semicolon:return++T.pos,void ye(p.semi);case d.comma:return++T.pos,void ye(p.comma);case d.leftSquareBracket:return++T.pos,void ye(p.bracketL);case d.rightSquareBracket:return++T.pos,void ye(p.bracketR);case d.leftCurlyBrace:return void(x&&b.charCodeAt(T.pos+1)===d.verticalBar?ve(p.braceBarL,2):(++T.pos,ye(p.braceL)));case d.rightCurlyBrace:return++T.pos,void ye(p.braceR);case d.colon:return void(b.charCodeAt(T.pos+1)===d.colon?ve(p.doubleColon,2):(++T.pos,ye(p.colon)));case d.questionMark:return void function(){const e=b.charCodeAt(T.pos+1),t=b.charCodeAt(T.pos+2);e!==d.questionMark||x&&T.isType?e!==d.dot||t>=d.digit0&&t<=d.digit9?(++T.pos,ye(p.question)):(T.pos+=2,ye(p.questionDot)):t===d.equalsTo?ve(p.assign,3):ve(p.nullishCoalescing,2)}();case d.atSign:return++T.pos,void ye(p.at);case d.graveAccent:return++T.pos,void ye(p.backQuote);case d.digit0:{const e=b.charCodeAt(T.pos+1);if(e===d.lowercaseX||e===d.uppercaseX||e===d.lowercaseO||e===d.uppercaseO||e===d.lowercaseB||e===d.uppercaseB)return void function(){T.pos+=2;for(;;){const e=b.charCodeAt(T.pos);if(!(e>=d.digit0&&e<=d.digit9||e>=d.lowercaseA&&e<=d.lowercaseF||e>=d.uppercaseA&&e<=d.uppercaseF||e===d.underscore))break;T.pos++}const e=b.charCodeAt(T.pos);e===d.lowercaseN?(++T.pos,ye(p.bigint)):ye(p.num)}()}case d.digit1:case d.digit2:case d.digit3:case d.digit4:case d.digit5:case d.digit6:case d.digit7:case d.digit8:case d.digit9:return void we(!1);case d.quotationMark:case d.apostrophe:return void function(e){for(T.pos++;;){if(T.pos>=b.length)return void F("Unterminated string constant");const t=b.charCodeAt(T.pos);if(t===d.backslash)T.pos++;else if(t===e)break;T.pos++}T.pos++,ye(p.string)}(e);case d.slash:return void(b.charCodeAt(T.pos+1)===d.equalsTo?ve(p.assign,2):ve(p.slash,1));case d.percentSign:case d.asterisk:return void function(e){let t=e===d.asterisk?p.star:p.modulo,n=1,o=b.charCodeAt(T.pos+1);e===d.asterisk&&o===d.asterisk&&(n++,o=b.charCodeAt(T.pos+2),t=p.exponent),o===d.equalsTo&&b.charCodeAt(T.pos+2)!==d.greaterThan&&(n++,t=p.assign),ve(t,n)}(e);case d.verticalBar:case d.ampersand:return void function(e){const t=b.charCodeAt(T.pos+1);if(t!==e){if(e===d.verticalBar){if(t===d.greaterThan)return void ve(p.pipeline,2);if(t===d.rightCurlyBrace&&x)return void ve(p.braceBarR,2)}t!==d.equalsTo?ve(e===d.verticalBar?p.bitwiseOR:p.bitwiseAND,1):ve(p.assign,2)}else b.charCodeAt(T.pos+2)===d.equalsTo?ve(p.assign,3):ve(e===d.verticalBar?p.logicalOR:p.logicalAND,2)}(e);case d.caret:return void(b.charCodeAt(T.pos+1)===d.equalsTo?ve(p.assign,2):ve(p.bitwiseXOR,1));case d.plusSign:case d.dash:return void function(e){const t=b.charCodeAt(T.pos+1);t!==e?t===d.equalsTo?ve(p.assign,2):e===d.plusSign?ve(p.plus,1):ve(p.minus,1):ve(p.preIncDec,2)}(e);case d.lessThan:return void function(){const e=b.charCodeAt(T.pos+1);if(e===d.lessThan)return b.charCodeAt(T.pos+2)===d.equalsTo?void ve(p.assign,3):void(T.isType?ve(p.lessThan,1):ve(p.bitShiftL,2));e===d.equalsTo?ve(p.relationalOrEqual,2):ve(p.lessThan,1)}();case d.greaterThan:return void xe();case d.equalsTo:case d.exclamationMark:return void function(e){const t=b.charCodeAt(T.pos+1);if(t!==d.equalsTo)return e===d.equalsTo&&t===d.greaterThan?(T.pos+=2,void ye(p.arrow)):void ve(e===d.equalsTo?p.eq:p.bang,1);ve(p.equality,b.charCodeAt(T.pos+2)===d.equalsTo?3:2)}(e);case d.tilde:return void ve(p.tilde,1)}F(`Unexpected character '${String.fromCharCode(e)}'`,T.pos)}function ve(e,t){T.pos+=t,ye(e)}function Ie(){for(;;){const e=b.charCodeAt(T.pos);if(!(e>=d.digit0&&e<=d.digit9||e===d.underscore))break;T.pos++}}function we(e){let t=!1,n=!1;e||Ie();let o=b.charCodeAt(T.pos);o===d.dot&&(++T.pos,Ie(),o=b.charCodeAt(T.pos)),o!==d.uppercaseE&&o!==d.lowercaseE||(o=b.charCodeAt(++T.pos),o!==d.plusSign&&o!==d.dash||++T.pos,Ie(),o=b.charCodeAt(T.pos)),o===d.lowercaseN?(++T.pos,t=!0):o===d.lowercaseM&&(++T.pos,n=!0),ye(t?p.bigint:n?p.decimal:p.num)}function Ce(e,t=e.currentIndex()){let n=t+1;if(Ee(e,n)){const o=e.identifierNameAtIndex(t);return{isType:!1,leftName:o,rightName:o,endIndex:n}}if(n++,Ee(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};if(n++,Ee(e,n))return{isType:!1,leftName:e.identifierNameAtIndex(t),rightName:e.identifierNameAtIndex(t+2),endIndex:n};if(n++,Ee(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};throw new Error(`Unexpected import/export specifier at ${t}`)}function Ee(e,t){const n=e.tokens[t];return n.type===p.braceR||n.type===p.comma}const Ae=new Map([["quot",'"'],["amp","&"],["apos","'"],["lt","<"],["gt",">"],["nbsp","\xa0"],["iexcl","\xa1"],["cent","\xa2"],["pound","\xa3"],["curren","\xa4"],["yen","\xa5"],["brvbar","\xa6"],["sect","\xa7"],["uml","\xa8"],["copy","\xa9"],["ordf","\xaa"],["laquo","\xab"],["not","\xac"],["shy","\xad"],["reg","\xae"],["macr","\xaf"],["deg","\xb0"],["plusmn","\xb1"],["sup2","\xb2"],["sup3","\xb3"],["acute","\xb4"],["micro","\xb5"],["para","\xb6"],["middot","\xb7"],["cedil","\xb8"],["sup1","\xb9"],["ordm","\xba"],["raquo","\xbb"],["frac14","\xbc"],["frac12","\xbd"],["frac34","\xbe"],["iquest","\xbf"],["Agrave","\xc0"],["Aacute","\xc1"],["Acirc","\xc2"],["Atilde","\xc3"],["Auml","\xc4"],["Aring","\xc5"],["AElig","\xc6"],["Ccedil","\xc7"],["Egrave","\xc8"],["Eacute","\xc9"],["Ecirc","\xca"],["Euml","\xcb"],["Igrave","\xcc"],["Iacute","\xcd"],["Icirc","\xce"],["Iuml","\xcf"],["ETH","\xd0"],["Ntilde","\xd1"],["Ograve","\xd2"],["Oacute","\xd3"],["Ocirc","\xd4"],["Otilde","\xd5"],["Ouml","\xd6"],["times","\xd7"],["Oslash","\xd8"],["Ugrave","\xd9"],["Uacute","\xda"],["Ucirc","\xdb"],["Uuml","\xdc"],["Yacute","\xdd"],["THORN","\xde"],["szlig","\xdf"],["agrave","\xe0"],["aacute","\xe1"],["acirc","\xe2"],["atilde","\xe3"],["auml","\xe4"],["aring","\xe5"],["aelig","\xe6"],["ccedil","\xe7"],["egrave","\xe8"],["eacute","\xe9"],["ecirc","\xea"],["euml","\xeb"],["igrave","\xec"],["iacute","\xed"],["icirc","\xee"],["iuml","\xef"],["eth","\xf0"],["ntilde","\xf1"],["ograve","\xf2"],["oacute","\xf3"],["ocirc","\xf4"],["otilde","\xf5"],["ouml","\xf6"],["divide","\xf7"],["oslash","\xf8"],["ugrave","\xf9"],["uacute","\xfa"],["ucirc","\xfb"],["uuml","\xfc"],["yacute","\xfd"],["thorn","\xfe"],["yuml","\xff"],["OElig","\u0152"],["oelig","\u0153"],["Scaron","\u0160"],["scaron","\u0161"],["Yuml","\u0178"],["fnof","\u0192"],["circ","\u02c6"],["tilde","\u02dc"],["Alpha","\u0391"],["Beta","\u0392"],["Gamma","\u0393"],["Delta","\u0394"],["Epsilon","\u0395"],["Zeta","\u0396"],["Eta","\u0397"],["Theta","\u0398"],["Iota","\u0399"],["Kappa","\u039a"],["Lambda","\u039b"],["Mu","\u039c"],["Nu","\u039d"],["Xi","\u039e"],["Omicron","\u039f"],["Pi","\u03a0"],["Rho","\u03a1"],["Sigma","\u03a3"],["Tau","\u03a4"],["Upsilon","\u03a5"],["Phi","\u03a6"],["Chi","\u03a7"],["Psi","\u03a8"],["Omega","\u03a9"],["alpha","\u03b1"],["beta","\u03b2"],["gamma","\u03b3"],["delta","\u03b4"],["epsilon","\u03b5"],["zeta","\u03b6"],["eta","\u03b7"],["theta","\u03b8"],["iota","\u03b9"],["kappa","\u03ba"],["lambda","\u03bb"],["mu","\u03bc"],["nu","\u03bd"],["xi","\u03be"],["omicron","\u03bf"],["pi","\u03c0"],["rho","\u03c1"],["sigmaf","\u03c2"],["sigma","\u03c3"],["tau","\u03c4"],["upsilon","\u03c5"],["phi","\u03c6"],["chi","\u03c7"],["psi","\u03c8"],["omega","\u03c9"],["thetasym","\u03d1"],["upsih","\u03d2"],["piv","\u03d6"],["ensp","\u2002"],["emsp","\u2003"],["thinsp","\u2009"],["zwnj","\u200c"],["zwj","\u200d"],["lrm","\u200e"],["rlm","\u200f"],["ndash","\u2013"],["mdash","\u2014"],["lsquo","\u2018"],["rsquo","\u2019"],["sbquo","\u201a"],["ldquo","\u201c"],["rdquo","\u201d"],["bdquo","\u201e"],["dagger","\u2020"],["Dagger","\u2021"],["bull","\u2022"],["hellip","\u2026"],["permil","\u2030"],["prime","\u2032"],["Prime","\u2033"],["lsaquo","\u2039"],["rsaquo","\u203a"],["oline","\u203e"],["frasl","\u2044"],["euro","\u20ac"],["image","\u2111"],["weierp","\u2118"],["real","\u211c"],["trade","\u2122"],["alefsym","\u2135"],["larr","\u2190"],["uarr","\u2191"],["rarr","\u2192"],["darr","\u2193"],["harr","\u2194"],["crarr","\u21b5"],["lArr","\u21d0"],["uArr","\u21d1"],["rArr","\u21d2"],["dArr","\u21d3"],["hArr","\u21d4"],["forall","\u2200"],["part","\u2202"],["exist","\u2203"],["empty","\u2205"],["nabla","\u2207"],["isin","\u2208"],["notin","\u2209"],["ni","\u220b"],["prod","\u220f"],["sum","\u2211"],["minus","\u2212"],["lowast","\u2217"],["radic","\u221a"],["prop","\u221d"],["infin","\u221e"],["ang","\u2220"],["and","\u2227"],["or","\u2228"],["cap","\u2229"],["cup","\u222a"],["int","\u222b"],["there4","\u2234"],["sim","\u223c"],["cong","\u2245"],["asymp","\u2248"],["ne","\u2260"],["equiv","\u2261"],["le","\u2264"],["ge","\u2265"],["sub","\u2282"],["sup","\u2283"],["nsub","\u2284"],["sube","\u2286"],["supe","\u2287"],["oplus","\u2295"],["otimes","\u2297"],["perp","\u22a5"],["sdot","\u22c5"],["lceil","\u2308"],["rceil","\u2309"],["lfloor","\u230a"],["rfloor","\u230b"],["lang","\u2329"],["rang","\u232a"],["loz","\u25ca"],["spades","\u2660"],["clubs","\u2663"],["hearts","\u2665"],["diams","\u2666"]]);function Se(e){const[t,n]=Ne(e.jsxPragma||"React.createElement"),[o,s]=Ne(e.jsxFragmentPragma||"React.Fragment");return{base:t,suffix:n,fragmentBase:o,fragmentSuffix:s}}function Ne(e){let t=e.indexOf(".");return-1===t&&(t=e.length),[e.slice(0,t),e.slice(t)]}class Re{getPrefixCode(){return""}getHoistedCode(){return""}getSuffixCode(){return""}}class Le extends Re{__init(){this.lastLineNumber=1}__init2(){this.lastIndex=0}__init3(){this.filenameVarName=null}__init4(){this.esmAutomaticImportNameResolutions={}}__init5(){this.cjsAutomaticModuleNameResolutions={}}constructor(e,t,n,o,s){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=o,this.options=s,Le.prototype.__init.call(this),Le.prototype.__init2.call(this),Le.prototype.__init3.call(this),Le.prototype.__init4.call(this),Le.prototype.__init5.call(this),this.jsxPragmaInfo=Se(s),this.isAutomaticRuntime="automatic"===s.jsxRuntime,this.jsxImportSource=s.jsxImportSource||"react"}process(){return!!this.tokens.matches1(p.jsxTagStart)&&(this.processJSXTag(),!0)}getPrefixCode(){let e="";if(this.filenameVarName&&(e+=`const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath||"")};`),this.isAutomaticRuntime)if(this.importProcessor)for(const[t,n]of Object.entries(this.cjsAutomaticModuleNameResolutions))e+=`var ${n} = require("${t}");`;else{const{createElement:t,...n}=this.esmAutomaticImportNameResolutions;t&&(e+=`import {createElement as ${t}} from "${this.jsxImportSource}";`);const o=Object.entries(n).map((([e,t])=>`${e} as ${t}`)).join(", ");if(o){e+=`import {${o}} from "${this.jsxImportSource+(this.options.production?"/jsx-runtime":"/jsx-dev-runtime")}";`}}return e}processJSXTag(){const{jsxRole:e,start:t}=this.tokens.currentToken(),n=this.options.production?null:this.getElementLocationCode(t);this.isAutomaticRuntime&&e!==X.KeyAfterPropSpread?this.transformTagToJSXFunc(n,e):this.transformTagToCreateElement(n)}getElementLocationCode(e){return`lineNumber: ${this.getLineNumberForIndex(e)}`}getLineNumberForIndex(e){const t=this.tokens.code;for(;this.lastIndex<e&&this.lastIndex<t.length;)"\n"===t[this.lastIndex]&&this.lastLineNumber++,this.lastIndex++;return this.lastLineNumber}transformTagToJSXFunc(e,t){const n=t===X.StaticChildren;this.tokens.replaceToken(this.getJSXFuncInvocationCode(n));let o=null;if(this.tokens.matches1(p.jsxTagEnd))this.tokens.replaceToken(`${this.getFragmentCode()}, {`),this.processAutomaticChildrenAndEndProps(t);else{if(this.processTagIntro(),this.tokens.appendCode(", {"),o=this.processProps(!0),this.tokens.matches2(p.slash,p.jsxTagEnd))this.tokens.appendCode("}");else{if(!this.tokens.matches1(p.jsxTagEnd))throw new Error("Expected either /> or > at the end of the tag.");this.tokens.removeToken(),this.processAutomaticChildrenAndEndProps(t)}o&&this.tokens.appendCode(`, ${o}`)}for(this.options.production||(null===o&&this.tokens.appendCode(", void 0"),this.tokens.appendCode(`, ${n}, ${this.getDevSource(e)}, this`)),this.tokens.removeInitialToken();!this.tokens.matches1(p.jsxTagEnd);)this.tokens.removeToken();this.tokens.replaceToken(")")}transformTagToCreateElement(e){if(this.tokens.replaceToken(this.getCreateElementInvocationCode()),this.tokens.matches1(p.jsxTagEnd))this.tokens.replaceToken(`${this.getFragmentCode()}, null`),this.processChildren(!0);else if(this.processTagIntro(),this.processPropsObjectWithDevInfo(e),this.tokens.matches2(p.slash,p.jsxTagEnd));else{if(!this.tokens.matches1(p.jsxTagEnd))throw new Error("Expected either /> or > at the end of the tag.");this.tokens.removeToken(),this.processChildren(!0)}for(this.tokens.removeInitialToken();!this.tokens.matches1(p.jsxTagEnd);)this.tokens.removeToken();this.tokens.replaceToken(")")}getJSXFuncInvocationCode(e){return this.options.production?e?this.claimAutoImportedFuncInvocation("jsxs","/jsx-runtime"):this.claimAutoImportedFuncInvocation("jsx","/jsx-runtime"):this.claimAutoImportedFuncInvocation("jsxDEV","/jsx-dev-runtime")}getCreateElementInvocationCode(){if(this.isAutomaticRuntime)return this.claimAutoImportedFuncInvocation("createElement","");{const{jsxPragmaInfo:e}=this;return`${this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.base)||e.base}${e.suffix}(`}}getFragmentCode(){if(this.isAutomaticRuntime)return this.claimAutoImportedName("Fragment",this.options.production?"/jsx-runtime":"/jsx-dev-runtime");{const{jsxPragmaInfo:e}=this;return(this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.fragmentBase)||e.fragmentBase)+e.fragmentSuffix}}claimAutoImportedFuncInvocation(e,t){const n=this.claimAutoImportedName(e,t);return this.importProcessor?`${n}.call(void 0, `:`${n}(`}claimAutoImportedName(e,t){if(this.importProcessor){const n=this.jsxImportSource+t;return this.cjsAutomaticModuleNameResolutions[n]||(this.cjsAutomaticModuleNameResolutions[n]=this.importProcessor.getFreeIdentifierForPath(n)),`${this.cjsAutomaticModuleNameResolutions[n]}.${e}`}return this.esmAutomaticImportNameResolutions[e]||(this.esmAutomaticImportNameResolutions[e]=this.nameManager.claimFreeName(`_${e}`)),this.esmAutomaticImportNameResolutions[e]}processTagIntro(){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType||!this.tokens.matches2AtIndex(e-1,p.jsxName,p.jsxName)&&!this.tokens.matches2AtIndex(e-1,p.greaterThan,p.jsxName)&&!this.tokens.matches1AtIndex(e,p.braceL)&&!this.tokens.matches1AtIndex(e,p.jsxTagEnd)&&!this.tokens.matches2AtIndex(e,p.slash,p.jsxTagEnd);)e++;if(e===this.tokens.currentIndex()+1){const e=this.tokens.identifierName();je(e)&&this.tokens.replaceToken(`'${e}'`)}for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}processPropsObjectWithDevInfo(e){const t=this.options.production?"":`__self: this, __source: ${this.getDevSource(e)}`;this.tokens.matches1(p.jsxName)||this.tokens.matches1(p.braceL)?(this.tokens.appendCode(", {"),this.processProps(!1),t?this.tokens.appendCode(` ${t}}`):this.tokens.appendCode("}")):t?this.tokens.appendCode(`, {${t}}`):this.tokens.appendCode(", null")}processProps(e){let t=null;for(;;){if(this.tokens.matches2(p.jsxName,p.eq)){const n=this.tokens.identifierName();if(e&&"key"===n){null!==t&&this.tokens.appendCode(t.replace(/[^\n]/g,"")),this.tokens.removeToken(),this.tokens.removeToken();const e=this.tokens.snapshot();this.processPropValue(),t=this.tokens.dangerouslyGetAndRemoveCodeSinceSnapshot(e);continue}this.processPropName(n),this.tokens.replaceToken(": "),this.processPropValue()}else if(this.tokens.matches1(p.jsxName)){const e=this.tokens.identifierName();this.processPropName(e),this.tokens.appendCode(": true")}else{if(!this.tokens.matches1(p.braceL))break;this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")}this.tokens.appendCode(",")}return t}processPropName(e){e.includes("-")?this.tokens.replaceToken(`'${e}'`):this.tokens.copyToken()}processPropValue(){this.tokens.matches1(p.braceL)?(this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")):this.tokens.matches1(p.jsxTagStart)?this.processJSXTag():this.processStringPropValue()}processStringPropValue(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start+1,e.end-1),n=Oe(t),o=function(e){let t="";for(let n=0;n<e.length;n++){const o=e[n];if("\n"===o)if(/\s/.test(e[n+1]))for(t+=" ";n<e.length&&/\s/.test(e[n+1]);)n++;else t+="\n";else if("&"===o){const{entity:o,newI:s}=De(e,n+1);t+=o,n=s-1}else t+=o}return JSON.stringify(t)}(t);this.tokens.replaceToken(o+n)}processAutomaticChildrenAndEndProps(e){e===X.StaticChildren?(this.tokens.appendCode(" children: ["),this.processChildren(!1),this.tokens.appendCode("]}")):(e===X.OneChild&&this.tokens.appendCode(" children: "),this.processChildren(!1),this.tokens.appendCode("}"))}processChildren(e){let t=e;for(;;){if(this.tokens.matches2(p.jsxTagStart,p.slash))return;let e=!1;if(this.tokens.matches1(p.braceL))this.tokens.matches2(p.braceL,p.braceR)?(this.tokens.replaceToken(""),this.tokens.replaceToken("")):(this.tokens.replaceToken(t?", ":""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken(""),e=!0);else if(this.tokens.matches1(p.jsxTagStart))this.tokens.appendCode(t?", ":""),this.processJSXTag(),e=!0;else{if(!this.tokens.matches1(p.jsxText)&&!this.tokens.matches1(p.jsxEmptyText))throw new Error("Unexpected token when processing JSX children.");e=this.processChildTextElement(t)}e&&(t=!0)}}processChildTextElement(e){const t=this.tokens.currentToken(),n=this.tokens.code.slice(t.start,t.end),o=Oe(n),s=function(e){let t="",n="",o=!1,s=!1;for(let r=0;r<e.length;r++){const i=e[r];if(" "===i||"\t"===i||"\r"===i)o||(n+=i);else if("\n"===i)n="",o=!0;else{if(s&&o&&(t+=" "),t+=n,n="","&"===i){const{entity:n,newI:o}=De(e,r+1);r=o-1,t+=n}else t+=i;s=!0,o=!1}}o||(t+=n);return JSON.stringify(t)}(n);return'""'===s?(this.tokens.replaceToken(o),!1):(this.tokens.replaceToken(`${e?", ":""}${s}${o}`),!0)}getDevSource(e){return`{fileName: ${this.getFilenameVarName()}, ${e}}`}getFilenameVarName(){return this.filenameVarName||(this.filenameVarName=this.nameManager.claimFreeName("_jsxFileName")),this.filenameVarName}}function je(e){const t=e.charCodeAt(0);return t>=d.lowercaseA&&t<=d.lowercaseZ}function Oe(e){let t=0,n=0;for(const o of e)"\n"===o?(t++,n=0):" "===o&&n++;return"\n".repeat(t)+" ".repeat(n)}function De(e,t){let n,o="",s=0,r=t;if("#"===e[r]){let t,o=10;if(r++,"x"===e[r])for(o=16,r++,t=r;r<e.length&&((i=e.charCodeAt(r))>=d.digit0&&i<=d.digit9||i>=d.lowercaseA&&i<=d.lowercaseF||i>=d.uppercaseA&&i<=d.uppercaseF);)r++;else for(t=r;r<e.length&&Pe(e.charCodeAt(r));)r++;if(";"===e[r]){const s=e.slice(t,r);s&&(r++,n=String.fromCodePoint(parseInt(s,o)))}}else for(;r<e.length&&s++<10;){const t=e[r];if(r++,";"===t){n=Ae.get(o);break}o+=t}var i;return n?{entity:n,newI:r}:{entity:"&",newI:t}}function Pe(e){return e>=d.digit0&&e<=d.digit9}function Me(e,t){const n=Se(t),o=new Set;for(let s=0;s<e.tokens.length;s++){const t=e.tokens[s];if(t.type!==p.name||t.isType||t.identifierRole!==H.Access&&t.identifierRole!==H.ObjectShorthand&&t.identifierRole!==H.ExportAccess||t.shadowsGlobal||o.add(e.identifierNameForToken(t)),t.type===p.jsxTagStart&&o.add(n.base),t.type===p.jsxTagStart&&s+1<e.tokens.length&&e.tokens[s+1].type===p.jsxTagEnd&&(o.add(n.base),o.add(n.fragmentBase)),t.type===p.jsxName&&t.identifierRole===H.Access){je(e.identifierNameForToken(t))&&e.tokens[s+1].type!==p.dot||o.add(e.identifierNameForToken(t))}}return o}class Fe{__init(){this.nonTypeIdentifiers=new Set}__init2(){this.importInfoByPath=new Map}__init3(){this.importsToReplace=new Map}__init4(){this.identifierReplacements=new Map}__init5(){this.exportBindingsByLocalName=new Map}constructor(e,t,n,o,s,r,i){this.nameManager=e,this.tokens=t,this.enableLegacyTypeScriptModuleInterop=n,this.options=o,this.isTypeScriptTransformEnabled=s,this.keepUnusedImports=r,this.helperManager=i,Fe.prototype.__init.call(this),Fe.prototype.__init2.call(this),Fe.prototype.__init3.call(this),Fe.prototype.__init4.call(this),Fe.prototype.__init5.call(this)}preprocessTokens(){for(let e=0;e<this.tokens.tokens.length;e++)this.tokens.matches1AtIndex(e,p._import)&&!this.tokens.matches3AtIndex(e,p._import,p.name,p.eq)&&this.preprocessImportAtIndex(e),this.tokens.matches1AtIndex(e,p._export)&&!this.tokens.matches2AtIndex(e,p._export,p.eq)&&this.preprocessExportAtIndex(e);this.generateImportReplacements()}pruneTypeOnlyImports(){this.nonTypeIdentifiers=Me(this.tokens,this.options);for(const[e,t]of this.importInfoByPath.entries()){if(t.hasBareImport||t.hasStarExport||t.exportStarNames.length>0||t.namedExports.length>0)continue;[...t.defaultNames,...t.wildcardNames,...t.namedImports.map((({localName:e})=>e))].every((e=>this.shouldAutomaticallyElideImportedName(e)))&&this.importsToReplace.set(e,"")}}shouldAutomaticallyElideImportedName(e){return this.isTypeScriptTransformEnabled&&!this.keepUnusedImports&&!this.nonTypeIdentifiers.has(e)}generateImportReplacements(){for(const[e,t]of this.importInfoByPath.entries()){const{defaultNames:n,wildcardNames:o,namedImports:s,namedExports:r,exportStarNames:i,hasStarExport:a}=t;if(0===n.length&&0===o.length&&0===s.length&&0===r.length&&0===i.length&&!a){this.importsToReplace.set(e,`require('${e}');`);continue}const c=this.getFreeIdentifierForPath(e);let l;l=this.enableLegacyTypeScriptModuleInterop?c:o.length>0?o[0]:this.getFreeIdentifierForPath(e);let u=`var ${c} = require('${e}');`;if(o.length>0)for(const e of o){u+=` var ${e} = ${this.enableLegacyTypeScriptModuleInterop?c:`${this.helperManager.getHelperName("interopRequireWildcard")}(${c})`};`}else i.length>0&&l!==c?u+=` var ${l} = ${this.helperManager.getHelperName("interopRequireWildcard")}(${c});`:n.length>0&&l!==c&&(u+=` var ${l} = ${this.helperManager.getHelperName("interopRequireDefault")}(${c});`);for(const{importedName:e,localName:t}of r)u+=` ${this.helperManager.getHelperName("createNamedExportFrom")}(${c}, '${t}', '${e}');`;for(const e of i)u+=` exports.${e} = ${l};`;a&&(u+=` ${this.helperManager.getHelperName("createStarExport")}(${c});`),this.importsToReplace.set(e,u);for(const e of n)this.identifierReplacements.set(e,`${l}.default`);for(const{importedName:e,localName:t}of s)this.identifierReplacements.set(t,`${c}.${e}`)}}getFreeIdentifierForPath(e){const t=e.split("/"),n=t[t.length-1].replace(/\W/g,"");return this.nameManager.claimFreeName(`_${n}`)}preprocessImportAtIndex(e){const t=[],n=[],o=[];if(e++,(this.tokens.matchesContextualAtIndex(e,h._type)||this.tokens.matches1AtIndex(e,p._typeof))&&!this.tokens.matches1AtIndex(e+1,p.comma)&&!this.tokens.matchesContextualAtIndex(e+1,h._from))return;if(this.tokens.matches1AtIndex(e,p.parenL))return;if(this.tokens.matches1AtIndex(e,p.name)&&(t.push(this.tokens.identifierNameAtIndex(e)),e++,this.tokens.matches1AtIndex(e,p.comma)&&e++),this.tokens.matches1AtIndex(e,p.star)&&(e+=2,n.push(this.tokens.identifierNameAtIndex(e)),e++),this.tokens.matches1AtIndex(e,p.braceL)){const n=this.getNamedImports(e+1);e=n.newIndex;for(const e of n.namedImports)"default"===e.importedName?t.push(e.localName):o.push(e)}if(this.tokens.matchesContextualAtIndex(e,h._from)&&e++,!this.tokens.matches1AtIndex(e,p.string))throw new Error("Expected string token at the end of import statement.");const s=this.tokens.stringValueAtIndex(e),r=this.getImportInfo(s);r.defaultNames.push(...t),r.wildcardNames.push(...n),r.namedImports.push(...o),0===t.length&&0===n.length&&0===o.length&&(r.hasBareImport=!0)}preprocessExportAtIndex(e){if(this.tokens.matches2AtIndex(e,p._export,p._var)||this.tokens.matches2AtIndex(e,p._export,p._let)||this.tokens.matches2AtIndex(e,p._export,p._const))this.preprocessVarExportAtIndex(e);else if(this.tokens.matches2AtIndex(e,p._export,p._function)||this.tokens.matches2AtIndex(e,p._export,p._class)){const t=this.tokens.identifierNameAtIndex(e+2);this.addExportBinding(t,t)}else if(this.tokens.matches3AtIndex(e,p._export,p.name,p._function)){const t=this.tokens.identifierNameAtIndex(e+3);this.addExportBinding(t,t)}else this.tokens.matches2AtIndex(e,p._export,p.braceL)?this.preprocessNamedExportAtIndex(e):this.tokens.matches2AtIndex(e,p._export,p.star)&&this.preprocessExportStarAtIndex(e)}preprocessVarExportAtIndex(e){let t=0;for(let n=e+2;;n++)if(this.tokens.matches1AtIndex(n,p.braceL)||this.tokens.matches1AtIndex(n,p.dollarBraceL)||this.tokens.matches1AtIndex(n,p.bracketL))t++;else if(this.tokens.matches1AtIndex(n,p.braceR)||this.tokens.matches1AtIndex(n,p.bracketR))t--;else{if(0===t&&!this.tokens.matches1AtIndex(n,p.name))break;if(this.tokens.matches1AtIndex(1,p.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");n=e-1}else{if(z(this.tokens.tokens[n])){const e=this.tokens.identifierNameAtIndex(n);this.identifierReplacements.set(e,`exports.${e}`)}}}}preprocessNamedExportAtIndex(e){e+=2;const{newIndex:t,namedImports:n}=this.getNamedImports(e);if(e=t,!this.tokens.matchesContextualAtIndex(e,h._from)){for(const{importedName:e,localName:t}of n)this.addExportBinding(e,t);return}if(e++,!this.tokens.matches1AtIndex(e,p.string))throw new Error("Expected string token at the end of import statement.");const o=this.tokens.stringValueAtIndex(e);this.getImportInfo(o).namedExports.push(...n)}preprocessExportStarAtIndex(e){let t=null;if(this.tokens.matches3AtIndex(e,p._export,p.star,p._as)?(e+=3,t=this.tokens.identifierNameAtIndex(e),e+=2):e+=3,!this.tokens.matches1AtIndex(e,p.string))throw new Error("Expected string token at the end of star export statement.");const n=this.tokens.stringValueAtIndex(e),o=this.getImportInfo(n);null!==t?o.exportStarNames.push(t):o.hasStarExport=!0}getNamedImports(e){const t=[];for(;;){if(this.tokens.matches1AtIndex(e,p.braceR)){e++;break}const n=Ce(this.tokens,e);if(e=n.endIndex,n.isType||t.push({importedName:n.leftName,localName:n.rightName}),this.tokens.matches2AtIndex(e,p.comma,p.braceR)){e+=2;break}if(this.tokens.matches1AtIndex(e,p.braceR)){e++;break}if(!this.tokens.matches1AtIndex(e,p.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[e])}`);e++}return{newIndex:e,namedImports:t}}getImportInfo(e){const t=this.importInfoByPath.get(e);if(t)return t;const n={defaultNames:[],wildcardNames:[],namedImports:[],namedExports:[],hasBareImport:!1,exportStarNames:[],hasStarExport:!1};return this.importInfoByPath.set(e,n),n}addExportBinding(e,t){this.exportBindingsByLocalName.has(e)||this.exportBindingsByLocalName.set(e,[]),this.exportBindingsByLocalName.get(e).push(t)}claimImportCode(e){const t=this.importsToReplace.get(e);return this.importsToReplace.set(e,""),t||""}getIdentifierReplacement(e){return this.identifierReplacements.get(e)||null}resolveExportBinding(e){const t=this.exportBindingsByLocalName.get(e);return t&&0!==t.length?t.map((e=>`exports.${e}`)).join(" = "):null}getGlobalNames(){return new Set([...this.identifierReplacements.keys(),...this.exportBindingsByLocalName.keys()])}}var qe=n(32998);function $e({code:e,mappings:t},n,o,s,r){const i=function(e,t){const n=new Array(t.length);let o=0,s=t[o].start,r=0;for(let i=0;i<e.length;i++)i===s&&(n[o]=s-r,o++,s=t[o].start),e.charCodeAt(i)===d.lineFeed&&(r=i+1);return n}(s,r),a=new qe.GenMapping({file:o.compiledFilename});let c=0,l=t[0];for(;void 0===l&&c<t.length-1;)c++,l=t[c];let u=0,h=0;l!==h&&(0,qe.maybeAddSegment)(a,u,0,n,u,0);for(let k=0;k<e.length;k++){if(k===l){const e=l-h,o=i[c];for((0,qe.maybeAddSegment)(a,u,e,n,u,o);(l===k||void 0===l)&&c<t.length-1;)c++,l=t[c]}e.charCodeAt(k)===d.lineFeed&&(u++,h=k+1,l!==h&&(0,qe.maybeAddSegment)(a,u,0,n,u,0))}const{sourceRoot:p,sourcesContent:f,...m}=(0,qe.toEncodedMap)(a);return m}const Be={require:'\n import {createRequire as CREATE_REQUIRE_NAME} from "module";\n const require = CREATE_REQUIRE_NAME(import.meta.url);\n ',interopRequireWildcard:"\n function interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n return newObj;\n }\n }\n ",interopRequireDefault:"\n function interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n ",createNamedExportFrom:"\n function createNamedExportFrom(obj, localName, importedName) {\n Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]});\n }\n ",createStarExport:'\n function createStarExport(obj) {\n Object.keys(obj)\n .filter((key) => key !== "default" && key !== "__esModule")\n .forEach((key) => {\n if (exports.hasOwnProperty(key)) {\n return;\n }\n Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]});\n });\n }\n ',nullishCoalesce:"\n function nullishCoalesce(lhs, rhsFn) {\n if (lhs != null) {\n return lhs;\n } else {\n return rhsFn();\n }\n }\n ",asyncNullishCoalesce:"\n async function asyncNullishCoalesce(lhs, rhsFn) {\n if (lhs != null) {\n return lhs;\n } else {\n return await rhsFn();\n }\n }\n ",optionalChain:"\n function optionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i];\n const fn = ops[i + 1];\n i += 2;\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n return undefined;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args) => value.call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n }\n ",asyncOptionalChain:"\n async function asyncOptionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i];\n const fn = ops[i + 1];\n i += 2;\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n return undefined;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = await fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = await fn((...args) => value.call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n }\n ",optionalChainDelete:"\n function optionalChainDelete(ops) {\n const result = OPTIONAL_CHAIN_NAME(ops);\n return result == null ? true : result;\n }\n ",asyncOptionalChainDelete:"\n async function asyncOptionalChainDelete(ops) {\n const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n return result == null ? true : result;\n }\n "};class Ke{__init(){this.helperNames={}}__init2(){this.createRequireName=null}constructor(e){this.nameManager=e,Ke.prototype.__init.call(this),Ke.prototype.__init2.call(this)}getHelperName(e){let t=this.helperNames[e];return t||(t=this.nameManager.claimFreeName(`_${e}`),this.helperNames[e]=t,t)}emitHelpers(){let e="";this.helperNames.optionalChainDelete&&this.getHelperName("optionalChain"),this.helperNames.asyncOptionalChainDelete&&this.getHelperName("asyncOptionalChain");for(const[t,n]of Object.entries(Be)){const o=this.helperNames[t];let s=n;"optionalChainDelete"===t?s=s.replace("OPTIONAL_CHAIN_NAME",this.helperNames.optionalChain):"asyncOptionalChainDelete"===t?s=s.replace("ASYNC_OPTIONAL_CHAIN_NAME",this.helperNames.asyncOptionalChain):"require"===t&&(null===this.createRequireName&&(this.createRequireName=this.nameManager.claimFreeName("_createRequire")),s=s.replace(/CREATE_REQUIRE_NAME/g,this.createRequireName)),o&&(e+=" ",e+=s.replace(t,o).replace(/\s+/g," ").trim())}return e}}function Ue(e,t,n){(function(e,t){for(const n of e.tokens)if(n.type===p.name&&!n.isType&&G(n)&&t.has(e.identifierNameForToken(n)))return!0;return!1})(e,n)&&function(e,t,n){const o=[];let s=t.length-1;for(let r=e.tokens.length-1;;r--){for(;o.length>0&&o[o.length-1].startTokenIndex===r+1;)o.pop();for(;s>=0&&t[s].endTokenIndex===r+1;)o.push(t[s]),s--;if(r<0)break;const i=e.tokens[r],a=e.identifierNameForToken(i);if(o.length>1&&!i.isType&&i.type===p.name&&n.has(a))if(Q(i))Ve(o[o.length-1],e,a);else if(Y(i)){let t=o.length-1;for(;t>0&&!o[t].isFunctionScope;)t--;if(t<0)throw new Error("Did not find parent function scope.");Ve(o[t],e,a)}}if(o.length>0)throw new Error("Expected empty scope stack after processing file.")}(e,t,n)}function Ve(e,t,n){for(let o=e.startTokenIndex;o<e.endTokenIndex;o++){const e=t.tokens[o];e.type!==p.name&&e.type!==p.jsxName||t.identifierNameForToken(e)!==n||(e.shadowsGlobal=!0)}}class We{__init(){this.usedNames=new Set}constructor(e,t){We.prototype.__init.call(this),this.usedNames=new Set(function(e,t){const n=[];for(const o of t)o.type===p.name&&n.push(e.slice(o.start,o.end));return n}(e,t))}claimFreeName(e){const t=this.findFreeName(e);return this.usedNames.add(t),t}findFreeName(e){if(!this.usedNames.has(e))return e;let t=2;for(;this.usedNames.has(e+String(t));)t++;return e+String(t)}}var He=n(89043);const Xe={Transform:He.union(He.lit("jsx"),He.lit("typescript"),He.lit("flow"),He.lit("imports"),He.lit("react-hot-loader"),He.lit("jest")),SourceMapOptions:He.iface([],{compiledFilename:"string"}),Options:He.iface([],{transforms:He.array("Transform"),disableESTransforms:He.opt("boolean"),jsxRuntime:He.opt(He.union(He.lit("classic"),He.lit("automatic"),He.lit("preserve"))),production:He.opt("boolean"),jsxImportSource:He.opt("string"),jsxPragma:He.opt("string"),jsxFragmentPragma:He.opt("string"),keepUnusedImports:He.opt("boolean"),preserveDynamicImport:He.opt("boolean"),injectCreateRequireForImportRequire:He.opt("boolean"),enableLegacyTypeScriptModuleInterop:He.opt("boolean"),enableLegacyBabel5ModuleInterop:He.opt("boolean"),sourceMapOptions:He.opt("SourceMapOptions"),filePath:He.opt("string")})},{Options:ze}=(0,He.createCheckers)(Xe);function Ge(){te(),un(!1)}function Je(e){te(),et(e)}function Qe(e){Bn(),Ze(e)}function Ye(){Bn(),T.tokens[T.tokens.length-1].identifierRole=H.ImportDeclaration}function Ze(e){let t;t=0===T.scopeDepth?H.TopLevelDeclaration:e?H.BlockScopedDeclaration:H.FunctionScopedDeclaration,T.tokens[T.tokens.length-1].identifierRole=t}function et(e){switch(T.type){case p._this:{const e=se(0);return te(),void re(e)}case p._yield:case p.name:return T.type=p.name,void Qe(e);case p.bracketL:return te(),void tt(p.bracketR,e,!0);case p.braceL:return void Rn(!0,e);default:F()}}function tt(e,t,n=!1,o=!1,s=0){let r=!0,i=!1;const a=T.tokens.length;for(;!ie(e)&&!T.error;)if(r?r=!1:(M(p.comma),T.tokens[T.tokens.length-1].contextId=s,!i&&T.tokens[a].isType&&(T.tokens[T.tokens.length-1].isType=!0,i=!0)),n&&ce(p.comma));else{if(ie(e))break;if(ce(p.ellipsis)){Je(t),ot(),ie(p.comma),M(e);break}nt(o,t)}}function nt(e,t){e&&at([h._public,h._protected,h._private,h._readonly,h._override]),st(t),ot(),st(t,!0)}function ot(){x?function(){const e=se(0);ie(p.question),ce(p.colon)&&fo();re(e)}():y&&function(){const e=se(0);ie(p.question),Rt(),re(e)}()}function st(e,t=!1){if(t||et(e),!ie(p.eq))return;const n=T.tokens.length-1;un(),T.tokens[n].rhsEndIndex=T.tokens.length}function rt(){return ce(p.name)}function it(){const e=T.snapshot();te();return!!((ce(p.bracketL)||ce(p.braceL)||ce(p.star)||ce(p.ellipsis)||ce(p.hash)||ce(p.name)||Boolean(T.type&p.IS_KEYWORD)||ce(p.string)||ce(p.num)||ce(p.bigint)||ce(p.decimal))&&!j())||(T.restoreFromSnapshot(e),!1)}function at(e){for(;;){if(null===ct(e))break}}function ct(e){if(!ce(p.name))return null;const t=T.contextualKeyword;if(-1!==e.indexOf(t)&&it()){switch(t){case h._readonly:T.tokens[T.tokens.length-1].type=p._readonly;break;case h._abstract:T.tokens[T.tokens.length-1].type=p._abstract;break;case h._static:T.tokens[T.tokens.length-1].type=p._static;break;case h._public:T.tokens[T.tokens.length-1].type=p._public;break;case h._private:T.tokens[T.tokens.length-1].type=p._private;break;case h._protected:T.tokens[T.tokens.length-1].type=p._protected;break;case h._override:T.tokens[T.tokens.length-1].type=p._override;break;case h._declare:T.tokens[T.tokens.length-1].type=p._declare}return t}return null}function lt(){for(Bn();ie(p.dot);)Bn()}function ut(){M(p._import),M(p.parenL),M(p.string),M(p.parenR),ie(p.dot)&<(),ce(p.lessThan)&&Gt()}function ht(){ie(p._const);const e=ie(p._in),t=N(h._out);ie(p._const),!e&&!t||ce(p.name)?Bn():T.tokens[T.tokens.length-1].type=p.name,ie(p._extends)&&jt(),ie(p.eq)&&jt()}function pt(){ce(p.lessThan)&&dt()}function dt(){const e=se(0);for(ce(p.lessThan)||ce(p.typeParameterStart)?te():F();!ie(p.greaterThan)&&!T.error;)ht(),ie(p.comma);re(e)}function ft(e){const t=e===p.arrow;var n;pt(),M(p.parenL),T.scopeDepth++,n=!1,tt(p.parenR,n),T.scopeDepth--,(t||ce(e))&&Nt(e)}function mt(){ie(p.comma)||P()}function kt(){ft(p.colon),mt()}function gt(){if(!ce(p.bracketL)||!function(){const e=T.snapshot();te();const t=ie(p.name)&&ce(p.colon);return T.restoreFromSnapshot(e),t}())return!1;const e=se(0);return M(p.bracketL),Bn(),Lt(),M(p.bracketR),Rt(),mt(),re(e),!0}function _t(e){ie(p.question),e||!ce(p.parenL)&&!ce(p.lessThan)?(Rt(),mt()):(ft(p.colon),mt())}function yt(){if(ce(p.parenL)||ce(p.lessThan))return void kt();if(ce(p._new))return te(),void(ce(p.parenL)||ce(p.lessThan)?kt():_t(!1));const e=!!ct([h._readonly]);gt()||((A(h._get)||A(h._set))&&it(),On(-1),_t(e))}function xt(){for(M(p.braceL);!ie(p.braceR)&&!T.error;)yt()}function Tt(){const e=T.snapshot(),t=function(){if(te(),ie(p.plus)||ie(p.minus))return A(h._readonly);A(h._readonly)&&te();if(!ce(p.bracketL))return!1;if(te(),!rt())return!1;return te(),ce(p._in)}();return T.restoreFromSnapshot(e),t}function bt(){M(p.braceL),ce(p.plus)||ce(p.minus)?(te(),R(h._readonly)):N(h._readonly),M(p.bracketL),Bn(),M(p._in),jt(),N(h._as)&&jt(),M(p.bracketR),ce(p.plus)||ce(p.minus)?(te(),M(p.question)):ie(p.question),ie(p.colon)&&jt(),P(),M(p.braceR)}function vt(){ie(p.ellipsis)?jt():(jt(),ie(p.question)),ie(p.colon)&&jt()}var It;function wt(e){e===It.TSAbstractConstructorType&&R(h._abstract),e!==It.TSConstructorType&&e!==It.TSAbstractConstructorType||M(p._new);const t=T.inDisallowConditionalTypesContext;T.inDisallowConditionalTypesContext=!1,ft(p.arrow),T.inDisallowConditionalTypesContext=t}function Ct(){switch(T.type){case p.name:return lt(),void(!j()&&ce(p.lessThan)&&Gt());case p._void:case p._null:return void te();case p.string:case p.num:case p.bigint:case p.decimal:case p._true:case p._false:return void wn();case p.minus:return te(),void wn();case p._this:return te(),void(A(h._is)&&!j()&&(te(),Lt()));case p._typeof:return M(p._typeof),ce(p._import)?ut():lt(),void(!j()&&ce(p.lessThan)&&Gt());case p._import:return void ut();case p.braceL:return void(Tt()?bt():xt());case p.bracketL:return void function(){for(M(p.bracketL);!ie(p.bracketR)&&!T.error;)vt(),ie(p.comma)}();case p.parenL:return M(p.parenL),jt(),void M(p.parenR);case p.backQuote:return void function(){for(ne(),ne();!ce(p.backQuote)&&!T.error;)M(p.dollarBraceL),jt(),ne(),ne();te()}();default:if(T.type&p.IS_KEYWORD)return te(),void(T.tokens[T.tokens.length-1].type=p.name)}F()}function Et(){if(A(h._keyof)||A(h._unique)||A(h._readonly))te(),Et();else if(A(h._infer))!function(){if(R(h._infer),Bn(),ce(p._extends)){const e=T.snapshot();M(p._extends);const t=T.inDisallowConditionalTypesContext;T.inDisallowConditionalTypesContext=!0,jt(),T.inDisallowConditionalTypesContext=t,(T.error||!T.inDisallowConditionalTypesContext&&ce(p.question))&&T.restoreFromSnapshot(e)}}();else{const e=T.inDisallowConditionalTypesContext;T.inDisallowConditionalTypesContext=!1,function(){for(Ct();!j()&&ie(p.bracketL);)ie(p.bracketR)||(jt(),M(p.bracketR))}(),T.inDisallowConditionalTypesContext=e}}function At(){if(ie(p.bitwiseAND),Et(),ce(p.bitwiseAND))for(;ie(p.bitwiseAND);)Et()}function St(){return!!ce(p.lessThan)||ce(p.parenL)&&function(){const e=T.snapshot(),t=function(){if(te(),ce(p.parenR)||ce(p.ellipsis))return!0;if(function(){if(ce(p.name)||ce(p._this))return te(),!0;if(ce(p.braceL)||ce(p.bracketL)){let e=1;for(te();e>0&&!T.error;)ce(p.braceL)||ce(p.bracketL)?e++:(ce(p.braceR)||ce(p.bracketR))&&e--,te();return!0}return!1}()){if(ce(p.colon)||ce(p.comma)||ce(p.question)||ce(p.eq))return!0;if(ce(p.parenR)&&(te(),ce(p.arrow)))return!0}return!1}();return T.restoreFromSnapshot(e),t}()}function Nt(e){const t=se(0);M(e);(function(){const e=T.snapshot();if(A(h._asserts))return te(),N(h._is)?(jt(),!0):rt()||ce(p._this)?(te(),N(h._is)&&jt(),!0):(T.restoreFromSnapshot(e),!1);if(rt()||ce(p._this))return te(),A(h._is)&&!j()?(te(),jt(),!0):(T.restoreFromSnapshot(e),!1);return!1})()||jt(),re(t)}function Rt(){ce(p.colon)&&Lt()}function Lt(){const e=se(0);M(p.colon),jt(),re(e)}function jt(){if(Ot(),T.inDisallowConditionalTypesContext||j()||!ie(p._extends))return;const e=T.inDisallowConditionalTypesContext;T.inDisallowConditionalTypesContext=!0,Ot(),T.inDisallowConditionalTypesContext=e,M(p.question),jt(),M(p.colon),jt()}function Ot(){St()?wt(It.TSFunctionType):ce(p._new)?wt(It.TSConstructorType):A(h._abstract)&&le()===p._new?wt(It.TSAbstractConstructorType):function(){if(ie(p.bitwiseOR),At(),ce(p.bitwiseOR))for(;ie(p.bitwiseOR);)At()}()}function Dt(){for(;!ce(p.braceL)&&!T.error;)Pt(),ie(p.comma)}function Pt(){lt(),ce(p.lessThan)&&Gt()}function Mt(){if(ce(p.string)?wn():Bn(),ie(p.eq)){const e=T.tokens.length-1;un(),T.tokens[e].rhsEndIndex=T.tokens.length}}function Ft(){for(Qe(!1),M(p.braceL);!ie(p.braceR)&&!T.error;)Mt(),ie(p.comma)}function qt(){M(p.braceL),Eo(p.braceR)}function $t(){Qe(!1),ie(p.dot)?$t():qt()}function Bt(){A(h._global)?Bn():ce(p.string)?vn():F(),ce(p.braceL)?qt():P()}function Kt(){Ye(),M(p.eq),A(h._require)&&le()===p.parenL?(R(h._require),M(p.parenL),ce(p.string)||F(),wn(),M(p.parenR)):lt(),P()}function Ut(){return Wt(T.contextualKeyword,!0)}function Vt(e){switch(e){case h._declare:{const e=T.tokens.length-1,t=function(){if(D())return!1;switch(T.type){case p._function:{const e=se(1);return te(),Lo(T.start,!0),re(e),!0}case p._class:{const e=se(1);return Oo(!0,!1),re(e),!0}case p._const:if(ce(p._const)&&S(h._enum)){const e=se(1);return M(p._const),R(h._enum),T.tokens[T.tokens.length-1].type=p._enum,Ft(),re(e),!0}case p._var:case p._let:{const e=se(1);return wo(T.type!==p._var),re(e),!0}case p.name:{const e=se(1),t=T.contextualKeyword;let n=!1;return t===h._global?(Bt(),n=!0):n=Wt(t,!0),re(e),n}default:return!1}}();if(t)return T.tokens[e].type=p._declare,!0;break}case h._global:if(ce(p.braceL))return qt(),!0;break;default:return Wt(e,!1)}return!1}function Wt(e,t){switch(e){case h._abstract:if(Ht(t)&&ce(p._class))return T.tokens[T.tokens.length-1].type=p._abstract,Oo(!0,!1),!0;break;case h._enum:if(Ht(t)&&ce(p.name))return T.tokens[T.tokens.length-1].type=p._enum,Ft(),!0;break;case h._interface:if(Ht(t)&&ce(p.name)){const e=se(t?2:1);return Qe(!1),pt(),ie(p._extends)&&Dt(),xt(),re(e),!0}break;case h._module:if(Ht(t)){if(ce(p.string)){const e=se(t?2:1);return Bt(),re(e),!0}if(ce(p.name)){const e=se(t?2:1);return $t(),re(e),!0}}break;case h._namespace:if(Ht(t)&&ce(p.name)){const e=se(t?2:1);return $t(),re(e),!0}break;case h._type:if(Ht(t)&&ce(p.name)){const e=se(t?2:1);return Qe(!1),pt(),M(p.eq),jt(),P(),re(e),!0}}return!1}function Ht(e){return e?(te(),!0):!D()}function Xt(){const e=T.snapshot();return dt(),jo(),ce(p.colon)&&Nt(p.colon),M(p.arrow),T.error?(T.restoreFromSnapshot(e),!1):(Fn(!0),!0)}function zt(){T.type===p.bitShiftL&&(T.pos-=1,ye(p.lessThan)),Gt()}function Gt(){const e=se(0);for(M(p.lessThan);!ce(p.greaterThan)&&!T.error;)jt(),ie(p.comma);e?(M(p.greaterThan),re(e)):(re(e),Te(),M(p.greaterThan),T.tokens[T.tokens.length-1].isType=!0)}function Jt(){if(ce(p.name))switch(T.contextualKeyword){case h._abstract:case h._declare:case h._enum:case h._interface:case h._module:case h._namespace:case h._type:return!0}return!1}function Qt(e,t){return _?function(e,t){if(!ce(p.lessThan))return hn(e,t);const n=T.snapshot();let o=hn(e,t);if(!T.error)return o;T.restoreFromSnapshot(n);T.type=p.typeParameterStart,dt(),o=hn(e,t),o||F();return o}(e,t):function(e,t){if(!ce(p.lessThan))return hn(e,t);const n=T.snapshot();dt();const o=hn(e,t);o||F();if(!T.error)return o;T.restoreFromSnapshot(n);return hn(e,t)}(e,t)}function Yt(){rn()}function Zt(e){Yt(),ie(p.colon)?Yt():T.tokens[T.tokens.length-1].identifierRole=e}function en(){const e=T.tokens.length;Zt(H.Access);let t=!1;for(;ce(p.dot);)t=!0,rn(),Yt();if(!t){const t=T.tokens[e],n=b.charCodeAt(t.start);n>=d.lowercaseA&&n<=d.lowercaseZ&&(t.identifierRole=null)}}function tn(){switch(T.type){case p.braceL:return te(),ln(),void rn();case p.jsxTagStart:return sn(),void rn();case p.string:return void rn();default:F("JSX value should be either an expression or a quoted JSX text")}}function nn(e){if(ce(p.jsxTagEnd))return!1;en(),y&&function(){if(ie(p.jsxTagStart)){T.tokens[T.tokens.length-1].type=p.typeParameterStart;const e=se(1);for(;!ce(p.greaterThan)&&!T.error;)jt(),ie(p.comma);rn(),re(e)}}();let t=!1;for(;!ce(p.slash)&&!ce(p.jsxTagEnd)&&!T.error;)ie(p.braceL)?(t=!0,M(p.ellipsis),un(),rn()):(t&&T.end-T.start==3&&b.charCodeAt(T.start)===d.lowercaseK&&b.charCodeAt(T.start+1)===d.lowercaseE&&b.charCodeAt(T.start+2)===d.lowercaseY&&(T.tokens[e].jsxRole=X.KeyAfterPropSpread),Zt(H.ObjectKey),ce(p.eq)&&(rn(),tn()));const n=ce(p.slash);return n&&rn(),n}function on(){const e=T.tokens.length-1;T.tokens[e].jsxRole=X.NoChildren;let t=0;if(!nn(e))for(an();;)switch(T.type){case p.jsxTagStart:if(rn(),ce(p.slash))return rn(),ce(p.jsxTagEnd)||en(),void(T.tokens[e].jsxRole!==X.KeyAfterPropSpread&&(1===t?T.tokens[e].jsxRole=X.OneChild:t>1&&(T.tokens[e].jsxRole=X.StaticChildren)));t++,on(),an();break;case p.jsxText:t++,an();break;case p.jsxEmptyText:an();break;case p.braceL:te(),ce(p.ellipsis)?(M(p.ellipsis),ln(),an(),t+=2):(ce(p.braceR)||(t++,ln()),an());break;default:return void F()}}function sn(){rn(),on()}function rn(){T.tokens.push(new ee),_e(),T.start=T.pos;const e=b.charCodeAt(T.pos);if(V[e])!function(){let e;do{if(T.pos>b.length)return void F("Unexpectedly reached the end of input.");e=b.charCodeAt(++T.pos)}while(U[e]||e===d.dash);ye(p.jsxName)}();else if(e===d.quotationMark||e===d.apostrophe)!function(e){for(T.pos++;;){if(T.pos>=b.length)return void F("Unterminated string constant");if(b.charCodeAt(T.pos)===e){T.pos++;break}T.pos++}ye(p.string)}(e);else switch(++T.pos,e){case d.greaterThan:ye(p.jsxTagEnd);break;case d.lessThan:ye(p.jsxTagStart);break;case d.slash:ye(p.slash);break;case d.equalsTo:ye(p.eq);break;case d.leftCurlyBrace:ye(p.braceL);break;case d.dot:ye(p.dot);break;case d.colon:ye(p.colon);break;default:F()}}function an(){T.tokens.push(new ee),T.start=T.pos,function(){let e=!1,t=!1;for(;;){if(T.pos>=b.length)return void F("Unterminated JSX contents");const n=b.charCodeAt(T.pos);if(n===d.lessThan||n===d.leftCurlyBrace)return T.pos===T.start?n===d.lessThan?(T.pos++,void ye(p.jsxTagStart)):void be(n):void ye(e&&!t?p.jsxEmptyText:p.jsxText);n===d.lineFeed?e=!0:n!==d.space&&n!==d.carriageReturn&&n!==d.tab&&(t=!0),T.pos++}}()}!function(e){e[e.TSFunctionType=0]="TSFunctionType";e[e.TSConstructorType=1]="TSConstructorType";e[e.TSAbstractConstructorType=2]="TSAbstractConstructorType"}(It||(It={}));class cn{constructor(e){this.stop=e}}function ln(e=!1){if(un(e),ce(p.comma))for(;ie(p.comma);)un(e)}function un(e=!1,t=!1){return y?Qt(e,t):x?function(e,t){if(ce(p.lessThan)){const n=T.snapshot();let o=hn(e,t);if(!T.error)return o;T.restoreFromSnapshot(n),T.type=p.typeParameterStart;const s=se(0);if(Yn(),re(s),o=hn(e,t),o)return!0;F()}return hn(e,t)}(e,t):hn(e,t)}function hn(e,t){if(ce(p._yield))return te(),ce(p.semi)||L()||(ie(p.star),un()),!1;(ce(p.parenL)||ce(p.name)||ce(p._yield))&&(T.potentialArrowAt=T.start);const n=function(e){const t=function(e){const t=T.tokens.length,n=fn();if(n)return!0;return dn(t,-1,e),!1}(e);if(t)return!0;return function(e){y||x?function(e){if(ce(p.question)){const e=le();if(e===p.colon||e===p.comma||e===p.parenR)return}pn(e)}(e):pn(e)}(e),!1}(e);return t&&Sn(),T.type&p.IS_ASSIGN?(te(),un(e),!1):n}function pn(e){ie(p.question)&&(un(),M(p.colon),un(e))}function dn(e,t,n){if(y&&(p._in&p.PRECEDENCE_MASK)>t&&!j()&&(N(h._as)||N(h._satisfies))){const o=se(1);return jt(),re(o),Te(),void dn(e,t,n)}const o=T.type&p.PRECEDENCE_MASK;if(o>0&&(!n||!ce(p._in))&&o>t){const s=T.type;te(),s===p.nullishCoalescing&&(T.tokens[T.tokens.length-1].nullishStartIndex=e);const r=T.tokens.length;fn(),dn(r,s&p.IS_RIGHT_ASSOCIATIVE?o-1:o,n),s===p.nullishCoalescing&&(T.tokens[e].numNullishCoalesceStarts++,T.tokens[T.tokens.length-1].numNullishCoalesceEnds++),dn(e,t,n)}}function fn(){if(y&&!_&&ie(p.lessThan))return function(){const e=se(1);jt(),M(p.greaterThan),re(e),fn()}(),!1;if(A(h._module)&&fe()===d.leftCurlyBrace&&!O())return R(h._module),M(p.braceL),Eo(p.braceR),!1;if(T.type&p.IS_PREFIX)return te(),fn(),!1;if(mn())return!0;for(;T.type&p.IS_POSTFIX&&!L();)T.type===p.preIncDec&&(T.type=p.postIncDec),te();return!1}function mn(){const e=T.tokens.length;return!!vn()||(kn(e),T.tokens.length>e&&T.tokens[e].isOptionalChainStart&&(T.tokens[T.tokens.length-1].isOptionalChainEnd=!0),!1)}function kn(e,t=!1){x?function(e,t=!1){if(T.tokens[T.tokens.length-1].contextualKeyword===h._async&&ce(p.lessThan)){const e=T.snapshot(),t=function(){T.scopeDepth++;const e=T.tokens.length;if(jo(),!An())return!1;return Pn(e),!0}();if(t&&!T.error)return;T.restoreFromSnapshot(e)}gn(e,t)}(e,t):gn(e,t)}function gn(e,t=!1){const n=new cn(!1);do{_n(e,t,n)}while(!n.stop&&!T.error)}function _n(e,t,n){y?function(e,t,n){if(j()||!ie(p.bang)){if(ce(p.lessThan)||ce(p.bitShiftL)){const n=T.snapshot();if(!t&&xn()&&Xt())return;if(zt(),!t&&ie(p.parenL)?(T.tokens[T.tokens.length-1].subscriptStartIndex=e,Tn()):ce(p.backQuote)?Nn():(T.type===p.greaterThan||T.type!==p.parenL&&Boolean(T.type&p.IS_EXPRESSION_START)&&!j())&&F(),!T.error)return;T.restoreFromSnapshot(n)}else!t&&ce(p.questionDot)&&le()===p.lessThan&&(te(),T.tokens[e].isOptionalChainStart=!0,T.tokens[T.tokens.length-1].subscriptStartIndex=e,Gt(),M(p.parenL),Tn());yn(e,t,n)}else T.tokens[T.tokens.length-1].type=p.nonNullAssertion}(e,t,n):x?function(e,t,n){if(ce(p.questionDot)&&le()===p.lessThan)return t?void(n.stop=!0):(te(),Zn(),M(p.parenL),void Tn());if(!t&&ce(p.lessThan)){const e=T.snapshot();if(Zn(),M(p.parenL),Tn(),!T.error)return;T.restoreFromSnapshot(e)}yn(e,t,n)}(e,t,n):yn(e,t,n)}function yn(e,t,n){if(!t&&ie(p.doubleColon))bn(),n.stop=!0,kn(e,t);else if(ce(p.questionDot)){if(T.tokens[e].isOptionalChainStart=!0,t&&le()===p.parenL)return void(n.stop=!0);te(),T.tokens[T.tokens.length-1].subscriptStartIndex=e,ie(p.bracketL)?(ln(),M(p.bracketR)):ie(p.parenL)?Tn():In()}else if(ie(p.dot))T.tokens[T.tokens.length-1].subscriptStartIndex=e,In();else if(ie(p.bracketL))T.tokens[T.tokens.length-1].subscriptStartIndex=e,ln(),M(p.bracketR);else if(!t&&ce(p.parenL))if(xn()){const t=T.snapshot(),o=T.tokens.length;te(),T.tokens[T.tokens.length-1].subscriptStartIndex=e;const s=I();T.tokens[T.tokens.length-1].contextId=s,Tn(),T.tokens[T.tokens.length-1].contextId=s,(ce(p.colon)||ce(p.arrow))&&(T.restoreFromSnapshot(t),n.stop=!0,T.scopeDepth++,jo(),function(e){y?ce(p.colon)&&Lt():x&&function(){if(ce(p.colon)){const e=T.noAnonFunctionType;T.noAnonFunctionType=!0,fo(),T.noAnonFunctionType=e}}();M(p.arrow),Pn(e)}(o))}else{te(),T.tokens[T.tokens.length-1].subscriptStartIndex=e;const t=I();T.tokens[T.tokens.length-1].contextId=t,Tn(),T.tokens[T.tokens.length-1].contextId=t}else ce(p.backQuote)?Nn():n.stop=!0}function xn(){return T.tokens[T.tokens.length-1].contextualKeyword===h._async&&!L()}function Tn(){let e=!0;for(;!ie(p.parenR)&&!T.error;){if(e)e=!1;else if(M(p.comma),ie(p.parenR))break;$n(!1)}}function bn(){const e=T.tokens.length;vn(),kn(e,!0)}function vn(){if(ie(p.modulo))return Bn(),!1;if(ce(p.jsxText)||ce(p.jsxEmptyText))return wn(),!1;if(ce(p.lessThan)&&_)return T.type=p.jsxTagStart,sn(),te(),!1;const e=T.potentialArrowAt===T.start;switch(T.type){case p.slash:case p.assign:oe();case p._super:case p._this:case p.regexp:case p.num:case p.bigint:case p.decimal:case p.string:case p._null:case p._true:case p._false:return te(),!1;case p._import:return te(),ce(p.dot)&&(T.tokens[T.tokens.length-1].type=p.name,te(),Bn()),!1;case p.name:{const t=T.tokens.length,n=T.start,o=T.contextualKeyword;return Bn(),o===h._await?(fn(),!1):o===h._async&&ce(p._function)&&!L()?(te(),Lo(n,!1),!1):e&&o===h._async&&!L()&&ce(p.name)?(T.scopeDepth++,Qe(!1),M(p.arrow),Pn(t),!0):ce(p._do)&&!L()?(te(),Co(),!1):e&&!L()&&ce(p.arrow)?(T.scopeDepth++,Ze(!1),M(p.arrow),Pn(t),!0):(T.tokens[T.tokens.length-1].identifierRole=H.Access,!1)}case p._do:return te(),Co(),!1;case p.parenL:return En(e);case p.bracketL:return te(),qn(p.bracketR,!0),!1;case p.braceL:return Rn(!1,!1),!1;case p._function:return function(){const e=T.start;Bn(),ie(p.dot)&&Bn();Lo(e,!1)}(),!1;case p.at:bo();case p._class:return Oo(!1),!1;case p._new:return function(){if(M(p._new),ie(p.dot))return void Bn();bn(),void ie(p.questionDot),x&&function(){if(ce(p.lessThan)){const e=T.snapshot();Zn(),T.error&&T.restoreFromSnapshot(e)}}();ie(p.parenL)&&qn(p.parenR)}(),!1;case p.backQuote:return Nn(),!1;case p.doubleColon:return te(),bn(),!1;case p.hash:{const e=fe();return V[e]||e===d.backslash?In():te(),!1}default:return F(),!1}}function In(){ie(p.hash),Bn()}function wn(){te()}function Cn(){M(p.parenL),ln(),M(p.parenR)}function En(e){const t=T.snapshot(),n=T.tokens.length;M(p.parenL);let o=!0;for(;!ce(p.parenR)&&!T.error;){if(o)o=!1;else if(M(p.comma),ce(p.parenR))break;if(ce(p.ellipsis)){Je(!1),Sn();break}un(!1,!0)}if(M(p.parenR),e&&(ce(p.colon)||!L())){if(An())return T.restoreFromSnapshot(t),T.scopeDepth++,jo(),An(),Pn(n),!T.error||(T.restoreFromSnapshot(t),En(!1),!1)}return!1}function An(){return y?function(){if(ce(p.colon)){const e=T.snapshot();Nt(p.colon),L()&&F(),ce(p.arrow)||F(),T.error&&T.restoreFromSnapshot(e)}return ie(p.arrow)}():x?function(){if(ce(p.colon)){const e=se(0),t=T.snapshot(),n=T.noAnonFunctionType;T.noAnonFunctionType=!0,Vn(),T.noAnonFunctionType=n,L()&&F(),ce(p.arrow)||F(),T.error&&T.restoreFromSnapshot(t),re(e)}return ie(p.arrow)}():ie(p.arrow)}function Sn(){(y||x)&&(ae(p.question),ce(p.colon)&&(y?Lt():x&&fo()))}function Nn(){for(ne(),ne();!ce(p.backQuote)&&!T.error;)M(p.dollarBraceL),ln(),ne(),ne();te()}function Rn(e,t){const n=I();let o=!0;for(te(),T.tokens[T.tokens.length-1].contextId=n;!ie(p.braceR)&&!T.error;){if(o)o=!1;else if(M(p.comma),ie(p.braceR))break;let s=!1;if(ce(p.ellipsis)){const n=T.tokens.length;if(Ge(),e&&(T.tokens.length===n+2&&Ze(t),ie(p.braceR)))break}else e||(s=ie(p.star)),!e&&A(h._async)?(s&&F(),Bn(),ce(p.colon)||ce(p.parenL)||ce(p.braceR)||ce(p.eq)||ce(p.comma)||(ce(p.star)&&(te(),s=!0),On(n))):On(n),jn(e,t,n)}T.tokens[T.tokens.length-1].contextId=n}function Ln(e,t){const n=T.start;return ce(p.parenL)?(e&&F(),Dn(n,!1),!0):!!function(e){return!e&&(ce(p.string)||ce(p.num)||ce(p.bracketL)||ce(p.name)||!!(T.type&p.IS_KEYWORD))}(e)&&(On(t),Dn(n,!1),!0)}function jn(e,t,n){y?pt():x&&ce(p.lessThan)&&(Yn(),ce(p.parenL)||F());Ln(e,n)||function(e,t){if(ie(p.colon))return void(e?st(t):un(!1));let n;n=e?0===T.scopeDepth?H.ObjectShorthandTopLevelDeclaration:t?H.ObjectShorthandBlockScopedDeclaration:H.ObjectShorthandFunctionScopedDeclaration:H.ObjectShorthand,T.tokens[T.tokens.length-1].identifierRole=n,st(t,!0)}(e,t)}function On(e){x&&ko(),ie(p.bracketL)?(T.tokens[T.tokens.length-1].contextId=e,un(),M(p.bracketR),T.tokens[T.tokens.length-1].contextId=e):(ce(p.num)||ce(p.string)||ce(p.bigint)||ce(p.decimal)?vn():In(),T.tokens[T.tokens.length-1].identifierRole=H.ObjectKey,T.tokens[T.tokens.length-1].contextId=e)}function Dn(e,t){const n=I();T.scopeDepth++;const o=T.tokens.length;jo(t,n),Mn(e,n);const s=T.tokens.length;T.scopes.push(new m(o,s,!0)),T.scopeDepth--}function Pn(e){Fn(!0);const t=T.tokens.length;T.scopes.push(new m(e,t,!0)),T.scopeDepth--}function Mn(e,t=0){y?function(e,t){if(ce(p.colon)&&Nt(p.colon),ce(p.braceL)||!D())Fn(!1,t);else{let t=T.tokens.length-1;for(;t>=0&&(T.tokens[t].start>=e||T.tokens[t].type===p._default||T.tokens[t].type===p._export);)T.tokens[t].isType=!0,t--}}(e,t):x?function(e){ce(p.colon)&&Vn();Fn(!1,e)}(t):Fn(!1,t)}function Fn(e,t=0){e&&!ce(p.braceL)?un():Co(!0,t)}function qn(e,t=!1){let n=!0;for(;!ie(e)&&!T.error;){if(n)n=!1;else if(M(p.comma),ie(e))break;$n(t)}}function $n(e){e&&ce(p.comma)||(ce(p.ellipsis)?(Ge(),Sn()):ce(p.question)?te():un(!1,!0))}function Bn(){te(),T.tokens[T.tokens.length-1].type=p.name}function Kn(e){const t=se(0);M(e||p.colon),po(),re(t)}function Un(){M(p.modulo),R(h._checks),ie(p.parenL)&&(ln(),M(p.parenR))}function Vn(){const e=se(0);M(p.colon),ce(p.modulo)?Un():(po(),ce(p.modulo)&&Un()),re(e)}function Wn(){ce(p._class)?(te(),Hn(!0)):ce(p._function)?(te(),Bn(),ce(p.lessThan)&&Yn(),M(p.parenL),ao(),M(p.parenR),Vn(),P()):ce(p._var)?(te(),mo(),P()):N(h._module)?ie(p.dot)?(R(h._exports),fo(),P()):function(){ce(p.string)?vn():Bn();M(p.braceL);for(;!ce(p.braceR)&&!T.error;)ce(p._import)?(te(),Go()):F();M(p.braceR)}():A(h._type)?(te(),Jn()):A(h._opaque)?(te(),Qn(!0)):A(h._interface)?(te(),Hn()):ce(p._export)?(M(p._export),ie(p._default)?ce(p._function)||ce(p._class)?Wn():(po(),P()):ce(p._var)||ce(p._function)||ce(p._class)||A(h._opaque)?Wn():ce(p.star)||ce(p.braceL)||A(h._interface)||A(h._type)||A(h._opaque)?Ko():F()):F()}function Hn(e=!1){if(Gn(),ce(p.lessThan)&&Yn(),ie(p._extends))do{Xn()}while(!e&&ie(p.comma));if(A(h._mixins)){te();do{Xn()}while(ie(p.comma))}if(A(h._implements)){te();do{Xn()}while(ie(p.comma))}no(e,!1,e)}function Xn(){ro(!1),ce(p.lessThan)&&Zn()}function zn(){Hn()}function Gn(){Bn()}function Jn(){Gn(),ce(p.lessThan)&&Yn(),Kn(p.eq),P()}function Qn(e){R(h._type),Gn(),ce(p.lessThan)&&Yn(),ce(p.colon)&&Kn(p.colon),e||Kn(p.eq),P()}function Yn(){const e=se(0);ce(p.lessThan)||ce(p.typeParameterStart)?te():F();do{ko(),mo(),ie(p.eq)&&po(),ce(p.greaterThan)||M(p.comma)}while(!ce(p.greaterThan)&&!T.error);M(p.greaterThan),re(e)}function Zn(){const e=se(0);for(M(p.lessThan);!ce(p.greaterThan)&&!T.error;)po(),ce(p.greaterThan)||M(p.comma);M(p.greaterThan),re(e)}function eo(){ce(p.num)||ce(p.string)?vn():Bn()}function to(){for(ce(p.lessThan)&&Yn(),M(p.parenL);!ce(p.parenR)&&!ce(p.ellipsis)&&!T.error;)io(),ce(p.parenR)||M(p.comma);ie(p.ellipsis)&&io(),M(p.parenR),Kn()}function no(e,t,n){let o;for(t&&ce(p.braceBarL)?(M(p.braceBarL),o=p.braceBarR):(M(p.braceL),o=p.braceR);!ce(o)&&!T.error;){if(n&&A(h._proto)){const t=le();t!==p.colon&&t!==p.question&&(te(),e=!1)}if(e&&A(h._static)){const e=le();e!==p.colon&&e!==p.question&&te()}if(ko(),ie(p.bracketL))ie(p.bracketL)?(eo(),M(p.bracketR),M(p.bracketR),ce(p.lessThan)||ce(p.parenL)?to():(ie(p.question),Kn())):(le()===p.colon?(eo(),Kn()):po(),M(p.bracketR),Kn());else if(ce(p.parenL)||ce(p.lessThan))to();else{if(A(h._get)||A(h._set)){const e=le();e!==p.name&&e!==p.string&&e!==p.num||te()}oo()}so()}M(o)}function oo(){if(ce(p.ellipsis)){if(M(p.ellipsis),ie(p.comma)||ie(p.semi),ce(p.braceR))return;po()}else eo(),ce(p.lessThan)||ce(p.parenL)?to():(ie(p.question),Kn())}function so(){ie(p.semi)||ie(p.comma)||ce(p.braceR)||ce(p.braceBarR)||F()}function ro(e){for(e||Bn();ie(p.dot);)Bn()}function io(){const e=le();e===p.colon||e===p.question?(Bn(),ie(p.question),Kn()):po()}function ao(){for(;!ce(p.parenR)&&!ce(p.ellipsis)&&!T.error;)io(),ce(p.parenR)||M(p.comma);ie(p.ellipsis)&&io()}function co(){let e=!1;const t=T.noAnonFunctionType;switch(T.type){case p.name:return A(h._interface)?void function(){if(R(h._interface),ie(p._extends))do{Xn()}while(ie(p.comma));no(!1,!1,!1)}():(Bn(),ro(!0),void(ce(p.lessThan)&&Zn()));case p.braceL:return void no(!1,!1,!1);case p.braceBarL:return void no(!1,!0,!1);case p.bracketL:return void function(){for(M(p.bracketL);T.pos<b.length&&!ce(p.bracketR)&&(po(),!ce(p.bracketR));)M(p.comma);M(p.bracketR)}();case p.lessThan:return Yn(),M(p.parenL),ao(),M(p.parenR),M(p.arrow),void po();case p.parenL:if(te(),!ce(p.parenR)&&!ce(p.ellipsis))if(ce(p.name)){const t=le();e=t!==p.question&&t!==p.colon}else e=!0;if(e){if(T.noAnonFunctionType=!1,po(),T.noAnonFunctionType=t,T.noAnonFunctionType||!(ce(p.comma)||ce(p.parenR)&&le()===p.arrow))return void M(p.parenR);ie(p.comma)}return ao(),M(p.parenR),M(p.arrow),void po();case p.minus:return te(),void wn();case p.string:case p.num:case p._true:case p._false:case p._null:case p._this:case p._void:case p.star:return void te();default:if(T.type===p._typeof)return M(p._typeof),void co();if(T.type&p.IS_KEYWORD)return te(),void(T.tokens[T.tokens.length-1].type=p.name)}F()}function lo(){ie(p.question)?lo():function(){for(co();!L()&&(ce(p.bracketL)||ce(p.questionDot));)ie(p.questionDot),M(p.bracketL),ie(p.bracketR)||(po(),M(p.bracketR))}()}function uo(){lo(),!T.noAnonFunctionType&&ie(p.arrow)&&po()}function ho(){for(ie(p.bitwiseAND),uo();ie(p.bitwiseAND);)uo()}function po(){!function(){for(ie(p.bitwiseOR),ho();ie(p.bitwiseOR);)ho()}()}function fo(){Kn()}function mo(){Bn(),ce(p.colon)&&fo()}function ko(){(ce(p.plus)||ce(p.minus))&&(te(),T.tokens[T.tokens.length-1].isType=!0)}function go(){if(ce(p._typeof)||A(h._type)){const t=he();(((e=t).type===p.name||e.type&p.IS_KEYWORD)&&e.contextualKeyword!==h._from||t.type===p.braceL||t.type===p.star)&&te()}var e}function _o(){R(h._enum),T.tokens[T.tokens.length-1].type=p._enum,Bn(),function(){N(h._of)&&te();M(p.braceL),function(){for(;!ce(p.braceR)&&!T.error&&!ie(p.ellipsis);)yo(),ce(p.braceR)||M(p.comma)}(),M(p.braceR)}()}function yo(){Bn(),ie(p.eq)&&te()}function xo(e){x&&function(){if(ce(p.name)&&T.contextualKeyword===h._interface){const e=se(0);return te(),zn(),re(e),!0}return!!A(h._enum)&&(_o(),!0)}()||(ce(p.at)&&bo(),function(e){if(y&&function(){if(T.type===p._const){const e=he();if(e.type===p.name&&e.contextualKeyword===h._enum)return M(p._const),R(h._enum),T.tokens[T.tokens.length-1].type=p._enum,Ft(),!0}return!1}())return;const t=T.type;switch(t){case p._break:case p._continue:return te(),void(D()||(Bn(),P()));case p._debugger:return te(),void P();case p._do:return te(),xo(!1),M(p._while),Cn(),void ie(p.semi);case p._for:return void function(){T.scopeDepth++;const e=T.tokens.length;!function(){te();let e=!1;A(h._await)&&(e=!0,te());if(M(p.parenL),ce(p.semi))return e&&F(),void Ao();const t=To();if(t||ce(p._var)||ce(p._let)||ce(p._const)||function(){if(!A(h._using))return!1;if(S(h._of))return!1;return!0}())return t&&R(h._await),te(),No(!0,T.type!==p._var),ce(p._in)||A(h._of)?void So(e):void Ao();if(ln(!0),ce(p._in)||A(h._of))return void So(e);e&&F();Ao()}();const t=T.tokens.length;T.scopes.push(new m(e,t,!1)),T.scopeDepth--}();case p._function:if(le()===p.dot)break;return e||F(),void function(){const e=T.start;te(),Lo(e,!0)}();case p._class:return e||F(),void Oo(!0);case p._if:return te(),Cn(),xo(!1),void(ie(p._else)&&xo(!1));case p._return:return te(),void(D()||(ln(),P()));case p._switch:return void function(){te(),Cn(),T.scopeDepth++;const e=T.tokens.length;M(p.braceL);for(;!ce(p.braceR)&&!T.error;)if(ce(p._case)||ce(p._default)){const e=ce(p._case);te(),e&&ln(),M(p.colon)}else xo(!0);te();const t=T.tokens.length;T.scopes.push(new m(e,t,!1)),T.scopeDepth--}();case p._throw:return te(),ln(),void P();case p._try:return void function(){if(te(),Co(),ce(p._catch)){te();let e=null;if(ce(p.parenL)&&(T.scopeDepth++,e=T.tokens.length,M(p.parenL),et(!0),y&&Rt(),M(p.parenR)),Co(),null!=e){const t=T.tokens.length;T.scopes.push(new m(e,t,!1)),T.scopeDepth--}}ie(p._finally)&&Co()}();case p._let:case p._const:e||F();case p._var:return void wo(t!==p._var);case p._while:return te(),Cn(),void xo(!1);case p.braceL:return void Co();case p.semi:return void te();case p._export:case p._import:{const e=le();if(e===p.parenL||e===p.dot)break;return te(),void(t===p._import?Go():Ko())}case p.name:if(T.contextualKeyword===h._async){const e=T.start,t=T.snapshot();if(te(),ce(p._function)&&!L())return M(p._function),void Lo(e,!0);T.restoreFromSnapshot(t)}else{if(T.contextualKeyword===h._using&&!O()&&le()===p.name)return void wo(!0);if(To())return R(h._await),void wo(!0)}}const n=T.tokens.length;ln();let o=null;if(T.tokens.length===n+1){const e=T.tokens[T.tokens.length-1];e.type===p.name&&(o=e.contextualKeyword)}if(null==o)return void P();ie(p.colon)?xo(!0):(s=o,y?function(e){Vt(e)||P()}(s):x?function(e){if(e===h._declare){if(ce(p._class)||ce(p.name)||ce(p._function)||ce(p._var)||ce(p._export)){const e=se(1);Wn(),re(e)}}else if(ce(p.name))if(e===h._interface){const e=se(1);zn(),re(e)}else if(e===h._type){const e=se(1);Jn(),re(e)}else if(e===h._opaque){const e=se(1);Qn(!1),re(e)}P()}(s):P());var s}(e))}function To(){if(!A(h._await))return!1;const e=T.snapshot();return te(),!A(h._using)||j()?(T.restoreFromSnapshot(e),!1):(te(),!ce(p.name)||j()?(T.restoreFromSnapshot(e),!1):(T.restoreFromSnapshot(e),!0))}function bo(){for(;ce(p.at);)vo()}function vo(){if(te(),ie(p.parenL))ln(),M(p.parenR);else{for(Bn();ie(p.dot);)Bn();y?((ce(p.lessThan)||ce(p.bitShiftL))&&zt(),Io()):Io()}}function Io(){ie(p.parenL)&&Tn()}function wo(e){te(),No(!1,e),P()}function Co(e=!1,t=0){const n=T.tokens.length;T.scopeDepth++,M(p.braceL),t&&(T.tokens[T.tokens.length-1].contextId=t),Eo(p.braceR),t&&(T.tokens[T.tokens.length-1].contextId=t);const o=T.tokens.length;T.scopes.push(new m(n,o,e)),T.scopeDepth--}function Eo(e){for(;!ie(e)&&!T.error;)xo(!0)}function Ao(){M(p.semi),ce(p.semi)||ln(),M(p.semi),ce(p.parenR)||ln(),M(p.parenR),xo(!1)}function So(e){e?N(h._of):te(),ln(),M(p.parenR),xo(!1)}function No(e,t){for(;;){if(Ro(t),ie(p.eq)){const t=T.tokens.length-1;un(e),T.tokens[t].rhsEndIndex=T.tokens.length}if(!ie(p.comma))break}}function Ro(e){et(e),y?function(){const e=se(0);j()||ie(p.bang),Rt(),re(e)}():x&&ce(p.colon)&&fo()}function Lo(e,t,n=!1){ce(p.star)&&te(),!t||n||ce(p.name)||ce(p._yield)||F();let o=null;ce(p.name)&&(t||(o=T.tokens.length,T.scopeDepth++),Qe(!1));const s=T.tokens.length;T.scopeDepth++,jo(),Mn(e);const r=T.tokens.length;T.scopes.push(new m(s,r,!0)),T.scopeDepth--,null!==o&&(T.scopes.push(new m(o,r,!0)),T.scopeDepth--)}function jo(e=!1,t=0){y?pt():x&&function(){if(ce(p.lessThan)){const e=se(0);Yn(),re(e)}}(),M(p.parenL),t&&(T.tokens[T.tokens.length-1].contextId=t),tt(p.parenR,!1,!1,e,t),t&&(T.tokens[T.tokens.length-1].contextId=t)}function Oo(e,t=!1){const n=I();te(),T.tokens[T.tokens.length-1].contextId=n,T.tokens[T.tokens.length-1].isExpression=!e;let o=null;e||(o=T.tokens.length,T.scopeDepth++),function(e,t=!1){if(y&&(!e||t)&&A(h._implements))return;ce(p.name)&&Qe(!0);y?pt():x&&ce(p.lessThan)&&Yn()}(e,t),function(){let e=!1;ie(p._extends)?(mn(),e=!0):e=!1;y?function(e){if(e&&(ce(p.lessThan)||ce(p.bitShiftL))&&zt(),N(h._implements)){T.tokens[T.tokens.length-1].type=p._implements;const e=se(1);Dt(),re(e)}}(e):x&&function(e){if(e&&ce(p.lessThan)&&Zn(),A(h._implements)){const e=se(0);te(),T.tokens[T.tokens.length-1].type=p._implements;do{Gn(),ce(p.lessThan)&&Zn()}while(ie(p.comma));re(e)}}(e)}();const s=T.tokens.length;if(function(e){M(p.braceL);for(;!ie(p.braceR)&&!T.error;){if(ie(p.semi))continue;if(ce(p.at)){vo();continue}Mo(T.start,e)}}(n),!T.error&&(T.tokens[s].contextId=n,T.tokens[T.tokens.length-1].contextId=n,null!==o)){const e=T.tokens.length;T.scopes.push(new m(o,e,!1)),T.scopeDepth--}}function Do(){return ce(p.eq)||ce(p.semi)||ce(p.braceR)||ce(p.bang)||ce(p.colon)}function Po(){return ce(p.parenL)||ce(p.lessThan)}function Mo(e,t){y&&at([h._declare,h._public,h._protected,h._private,h._override]);let n=!1;if(ce(p.name)&&T.contextualKeyword===h._static){if(Bn(),Po())return void Fo(e,!1);if(Do())return void Bo();if(T.tokens[T.tokens.length-1].type=p._static,n=!0,ce(p.braceL))return T.tokens[T.tokens.length-1].contextId=t,void Co()}!function(e,t,n){if(y&&function(e){const t=T.tokens.length;at([h._abstract,h._readonly,h._declare,h._static,h._override]);const n=T.tokens.length;if(gt()){for(let o=e?t-1:t;o<n;o++)T.tokens[o].isType=!0;return!0}return!1}(t))return;if(ie(p.star))return qo(n),void Fo(e,!1);qo(n);let o=!1;const s=T.tokens[T.tokens.length-1];s.contextualKeyword===h._constructor&&(o=!0);if($o(),Po())Fo(e,o);else if(Do())Bo();else if(s.contextualKeyword!==h._async||D())s.contextualKeyword!==h._get&&s.contextualKeyword!==h._set||D()&&ce(p.star)?s.contextualKeyword!==h._accessor||D()?D()?Bo():F():(qo(n),Bo()):(s.contextualKeyword===h._get?T.tokens[T.tokens.length-1].type=p._get:T.tokens[T.tokens.length-1].type=p._set,qo(n),Fo(e,!1));else{T.tokens[T.tokens.length-1].type=p._async;ce(p.star)&&te(),qo(n),$o(),Fo(e,!1)}}(e,n,t)}function Fo(e,t){y?pt():x&&ce(p.lessThan)&&Yn(),Dn(e,t)}function qo(e){On(e)}function $o(){if(y){const e=se(0);ie(p.question),re(e)}}function Bo(){if(y?(ae(p.bang),Rt()):x&&ce(p.colon)&&fo(),ce(p.eq)){const e=T.tokens.length;te(),un(),T.tokens[e].rhsEndIndex=T.tokens.length}P()}function Ko(){const e=T.tokens.length-1;y&&function(){if(ie(p._import))return A(h._type)&&le()!==p.eq&&R(h._type),Kt(),!0;if(ie(p.eq))return ln(),P(),!0;if(N(h._as))return R(h._namespace),Bn(),P(),!0;if(A(h._type)){const e=le();e!==p.braceL&&e!==p.star||te()}return!1}()||((x?ce(p.star)||A(h._type)&&le()===p.star:ce(p.star))?x?function(){if(N(h._type)){const e=se(2);Wo(),re(e)}else Wo()}():Wo():function(){if(y&&Jt())return!1;if(x&&ce(p.name)&&(T.contextualKeyword===h._type||T.contextualKeyword===h._interface||T.contextualKeyword===h._opaque||T.contextualKeyword===h._enum))return!1;if(ce(p.name))return T.contextualKeyword!==h._async;if(!ce(p._default))return!1;const e=pe(),t=he(),n=t.type===p.name&&t.contextualKeyword===h._from;if(t.type===p.comma)return!0;if(n){const t=b.charCodeAt(de(e+4));return t===d.quotationMark||t===d.apostrophe}return!1}()?(Bn(),ce(p.comma)&&le()===p.star?(M(p.comma),M(p.star),R(h._as),Bn()):Uo(),Vo()):ie(p._default)?function(){if(y&&function(){if(A(h._abstract)&&le()===p._class)return T.type=p._abstract,te(),Oo(!0,!0),!0;if(A(h._interface)){const e=se(2);return Wt(h._interface,!0),re(e),!0}return!1}())return;if(x&&A(h._enum)&&(_o(),1))return;const e=T.start;ie(p._function)?Lo(e,!0,!0):A(h._async)&&le()===p._function?(N(h._async),ie(p._function),Lo(e,!0,!0)):ce(p._class)?Oo(!0,!0):ce(p.at)?(bo(),Oo(!0,!0)):(un(),P())}():y&&Jt()||x&&(A(h._type)||A(h._interface)||A(h._opaque)||A(h._enum))||T.type===p._var||T.type===p._const||T.type===p._let||T.type===p._function||T.type===p._class||A(h._async)||ce(p.at)?y?function(){const e=N(h._declare);e&&(T.tokens[T.tokens.length-1].type=p._declare);let t=!1;if(ce(p.name))if(e){const e=se(2);t=Ut(),re(e)}else t=Ut();if(!t)if(e){const e=se(2);xo(!0),re(e)}else xo(!0)}():x?function(){if(A(h._type)){const e=se(1);te(),ce(p.braceL)?(Ho(),Vo()):Jn(),re(e)}else if(A(h._opaque)){const e=se(1);te(),Qn(!1),re(e)}else if(A(h._interface)){const e=se(1);te(),zn(),re(e)}else xo(!0)}():xo(!0):(Ho(),Vo()),T.tokens[e].rhsEndIndex=T.tokens.length)}function Uo(){ie(p.comma)&&Ho()}function Vo(){N(h._from)&&(vn(),Yo()),P()}function Wo(){M(p.star),A(h._as)?(te(),T.tokens[T.tokens.length-1].type=p._as,Bn(),Uo(),Vo()):Vo()}function Ho(){let e=!0;for(M(p.braceL);!ie(p.braceR)&&!T.error;){if(e)e=!1;else if(M(p.comma),ie(p.braceR))break;Xo()}}function Xo(){y?function(){if(Bn(),ce(p.comma)||ce(p.braceR))T.tokens[T.tokens.length-1].identifierRole=H.ExportAccess;else{if(Bn(),ce(p.comma)||ce(p.braceR))return T.tokens[T.tokens.length-1].identifierRole=H.ExportAccess,T.tokens[T.tokens.length-2].isType=!0,void(T.tokens[T.tokens.length-1].isType=!0);Bn(),ce(p.comma)||ce(p.braceR)?T.tokens[T.tokens.length-3].identifierRole=H.ExportAccess:(Bn(),T.tokens[T.tokens.length-3].identifierRole=H.ExportAccess,T.tokens[T.tokens.length-4].isType=!0,T.tokens[T.tokens.length-3].isType=!0,T.tokens[T.tokens.length-2].isType=!0,T.tokens[T.tokens.length-1].isType=!0)}}():(Bn(),T.tokens[T.tokens.length-1].identifierRole=H.ExportAccess,N(h._as)&&Bn())}function zo(){A(h._module)&&function(){const e=T.snapshot();return R(h._module),N(h._from)?A(h._from)?(T.restoreFromSnapshot(e),!0):(T.restoreFromSnapshot(e),!1):ce(p.comma)?(T.restoreFromSnapshot(e),!1):(T.restoreFromSnapshot(e),!0)}()&&te()}function Go(){if(y&&ce(p.name)&&le()===p.eq)Kt();else{if(y&&A(h._type)){const e=he();if(e.type===p.name&&e.contextualKeyword!==h._from){if(R(h._type),le()===p.eq)return void Kt()}else e.type!==p.star&&e.type!==p.braceL||R(h._type)}ce(p.string)||(zo(),function(){x&&go();let e=!0;if(ce(p.name)&&(Jo(),!ie(p.comma)))return;if(ce(p.star))return te(),R(h._as),void Jo();M(p.braceL);for(;!ie(p.braceR)&&!T.error;){if(e)e=!1;else if(ie(p.colon)&&F("ES2015 named imports do not destructure. Use another statement for destructuring after the import."),M(p.comma),ie(p.braceR))break;Qo()}}(),R(h._from)),vn(),Yo(),P()}}function Jo(){Ye()}function Qo(){y?function(){if(Bn(),ce(p.comma)||ce(p.braceR))T.tokens[T.tokens.length-1].identifierRole=H.ImportDeclaration;else{if(Bn(),ce(p.comma)||ce(p.braceR))return T.tokens[T.tokens.length-1].identifierRole=H.ImportDeclaration,T.tokens[T.tokens.length-2].isType=!0,void(T.tokens[T.tokens.length-1].isType=!0);if(Bn(),ce(p.comma)||ce(p.braceR))return T.tokens[T.tokens.length-3].identifierRole=H.ImportAccess,void(T.tokens[T.tokens.length-1].identifierRole=H.ImportDeclaration);Bn(),T.tokens[T.tokens.length-3].identifierRole=H.ImportAccess,T.tokens[T.tokens.length-1].identifierRole=H.ImportDeclaration,T.tokens[T.tokens.length-4].isType=!0,T.tokens[T.tokens.length-3].isType=!0,T.tokens[T.tokens.length-2].isType=!0,T.tokens[T.tokens.length-1].isType=!0}}():x?function(){const e=T.contextualKeyword===h._type||T.type===p._typeof;e?te():Bn(),A(h._as)&&!S(h._as)?(Bn(),(!e||ce(p.name)||T.type&p.IS_KEYWORD)&&Bn()):(e&&(ce(p.name)||T.type&p.IS_KEYWORD)&&Bn(),N(h._as)&&Bn())}():(Ye(),A(h._as)&&(T.tokens[T.tokens.length-1].identifierRole=H.ImportAccess,te(),Ye()))}function Yo(){(ce(p._with)||A(h._assert)&&!j())&&(te(),Rn(!1,!1))}function Zo(){return 0===T.pos&&b.charCodeAt(0)===d.numberSign&&b.charCodeAt(1)===d.exclamationMark&&ge(2),me(),function(){if(Eo(p.eof),T.scopes.push(new m(0,T.tokens.length,!0)),0!==T.scopeDepth)throw new Error(`Invalid scope depth at end of file: ${T.scopeDepth}`);return new es(T.tokens,T.scopes)}()}class es{constructor(e,t){this.tokens=e,this.scopes=t}}class ts{__init(){this.resultCode=""}__init2(){this.resultMappings=new Array(this.tokens.length)}__init3(){this.tokenIndex=0}constructor(e,t,n,o,s){this.code=e,this.tokens=t,this.isFlowEnabled=n,this.disableESTransforms=o,this.helperManager=s,ts.prototype.__init.call(this),ts.prototype.__init2.call(this),ts.prototype.__init3.call(this)}snapshot(){return{resultCode:this.resultCode,tokenIndex:this.tokenIndex}}restoreToSnapshot(e){this.resultCode=e.resultCode,this.tokenIndex=e.tokenIndex}dangerouslyGetAndRemoveCodeSinceSnapshot(e){const t=this.resultCode.slice(e.resultCode.length);return this.resultCode=e.resultCode,t}reset(){this.resultCode="",this.resultMappings=new Array(this.tokens.length),this.tokenIndex=0}matchesContextualAtIndex(e,t){return this.matches1AtIndex(e,p.name)&&this.tokens[e].contextualKeyword===t}identifierNameAtIndex(e){return this.identifierNameForToken(this.tokens[e])}identifierNameAtRelativeIndex(e){return this.identifierNameForToken(this.tokenAtRelativeIndex(e))}identifierName(){return this.identifierNameForToken(this.currentToken())}identifierNameForToken(e){return this.code.slice(e.start,e.end)}rawCodeForToken(e){return this.code.slice(e.start,e.end)}stringValueAtIndex(e){return this.stringValueForToken(this.tokens[e])}stringValue(){return this.stringValueForToken(this.currentToken())}stringValueForToken(e){return this.code.slice(e.start+1,e.end-1)}matches1AtIndex(e,t){return this.tokens[e].type===t}matches2AtIndex(e,t,n){return this.tokens[e].type===t&&this.tokens[e+1].type===n}matches3AtIndex(e,t,n,o){return this.tokens[e].type===t&&this.tokens[e+1].type===n&&this.tokens[e+2].type===o}matches1(e){return this.tokens[this.tokenIndex].type===e}matches2(e,t){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t}matches3(e,t,n){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n}matches4(e,t,n,o){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===o}matches5(e,t,n,o,s){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===o&&this.tokens[this.tokenIndex+4].type===s}matchesContextual(e){return this.matchesContextualAtIndex(this.tokenIndex,e)}matchesContextIdAndLabel(e,t){return this.matches1(e)&&this.currentToken().contextId===t}previousWhitespaceAndComments(){let e=this.code.slice(this.tokenIndex>0?this.tokens[this.tokenIndex-1].end:0,this.tokenIndex<this.tokens.length?this.tokens[this.tokenIndex].start:this.code.length);return this.isFlowEnabled&&(e=e.replace(/@flow/g,"")),e}replaceToken(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultMappings[this.tokenIndex]=this.resultCode.length,this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}replaceTokenTrimmingLeftWhitespace(e){this.resultCode+=this.previousWhitespaceAndComments().replace(/[^\r\n]/g,""),this.appendTokenPrefix(),this.resultMappings[this.tokenIndex]=this.resultCode.length,this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}removeInitialToken(){this.replaceToken("")}removeToken(){this.replaceTokenTrimmingLeftWhitespace("")}removeBalancedCode(){let e=0;for(;!this.isAtEnd();){if(this.matches1(p.braceL))e++;else if(this.matches1(p.braceR)){if(0===e)return;e--}this.removeToken()}}copyExpectedToken(e){if(this.tokens[this.tokenIndex].type!==e)throw new Error(`Expected token ${e}`);this.copyToken()}copyToken(){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultMappings[this.tokenIndex]=this.resultCode.length,this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}copyTokenWithPrefix(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.resultMappings[this.tokenIndex]=this.resultCode.length,this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}appendTokenPrefix(){const e=this.currentToken();if((e.numNullishCoalesceStarts||e.isOptionalChainStart)&&(e.isAsyncOperation=function(e){let t=e.currentIndex(),n=0;const o=e.currentToken();do{const s=e.tokens[t];if(s.isOptionalChainStart&&n++,s.isOptionalChainEnd&&n--,n+=s.numNullishCoalesceStarts,n-=s.numNullishCoalesceEnds,s.contextualKeyword===h._await&&null==s.identifierRole&&s.scopeDepth===o.scopeDepth)return!0;t+=1}while(n>0&&t<e.tokens.length);return!1}(this)),!this.disableESTransforms){if(e.numNullishCoalesceStarts)for(let t=0;t<e.numNullishCoalesceStarts;t++)e.isAsyncOperation?(this.resultCode+="await ",this.resultCode+=this.helperManager.getHelperName("asyncNullishCoalesce")):this.resultCode+=this.helperManager.getHelperName("nullishCoalesce"),this.resultCode+="(";e.isOptionalChainStart&&(e.isAsyncOperation&&(this.resultCode+="await "),this.tokenIndex>0&&this.tokenAtRelativeIndex(-1).type===p._delete?e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChainDelete"):this.resultCode+=this.helperManager.getHelperName("optionalChainDelete"):e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChain"):this.resultCode+=this.helperManager.getHelperName("optionalChain"),this.resultCode+="([")}}appendTokenSuffix(){const e=this.currentToken();if(e.isOptionalChainEnd&&!this.disableESTransforms&&(this.resultCode+="])"),e.numNullishCoalesceEnds&&!this.disableESTransforms)for(let t=0;t<e.numNullishCoalesceEnds;t++)this.resultCode+="))"}appendCode(e){this.resultCode+=e}currentToken(){return this.tokens[this.tokenIndex]}currentTokenCode(){const e=this.currentToken();return this.code.slice(e.start,e.end)}tokenAtRelativeIndex(e){return this.tokens[this.tokenIndex+e]}currentIndex(){return this.tokenIndex}nextToken(){if(this.tokenIndex===this.tokens.length)throw new Error("Unexpectedly reached end of input.");this.tokenIndex++}previousToken(){this.tokenIndex--}finish(){if(this.tokenIndex!==this.tokens.length)throw new Error("Tried to finish processing tokens before reaching the end.");return this.resultCode+=this.previousWhitespaceAndComments(),{code:this.resultCode,mappings:this.resultMappings}}isAtEnd(){return this.tokenIndex===this.tokens.length}}function ns(e,t,n,o){const s=t.snapshot(),r=function(e){const t=e.currentToken(),n=t.contextId;if(null==n)throw new Error("Expected context ID on class token.");const o=t.isExpression;if(null==o)throw new Error("Expected isExpression on class token.");let s=null,r=!1;e.nextToken(),e.matches1(p.name)&&(s=e.identifierName());for(;!e.matchesContextIdAndLabel(p.braceL,n);)e.matches1(p._extends)&&!e.currentToken().isType&&(r=!0),e.nextToken();return{isExpression:o,className:s,hasSuperclass:r}}(t);let i=[];const a=[],c=[];let l=null;const u=[],d=[],f=t.currentToken().contextId;if(null==f)throw new Error("Expected non-null class context ID on class open-brace.");for(t.nextToken();!t.matchesContextIdAndLabel(p.braceR,f);)if(t.matchesContextual(h._constructor)&&!t.currentToken().isType)({constructorInitializerStatements:i,constructorInsertPos:l}=ss(t));else if(t.matches1(p.semi))o||d.push({start:t.currentIndex(),end:t.currentIndex()+1}),t.nextToken();else if(t.currentToken().isType)t.nextToken();else{const s=t.currentIndex();let r=!1,m=!1,k=!1;for(;rs(t.currentToken());)t.matches1(p._static)&&(r=!0),t.matches1(p.hash)&&(m=!0),(t.matches1(p._declare)||t.matches1(p._abstract))&&(k=!0),t.nextToken();if(r&&t.matches1(p.braceL)){os(t,f);continue}if(m){os(t,f);continue}if(t.matchesContextual(h._constructor)&&!t.currentToken().isType){({constructorInitializerStatements:i,constructorInsertPos:l}=ss(t));continue}const g=t.currentIndex();if(is(t),t.matches1(p.lessThan)||t.matches1(p.parenL)){os(t,f);continue}for(;t.currentToken().isType;)t.nextToken();if(t.matches1(p.eq)){const o=t.currentIndex(),s=t.currentToken().rhsEndIndex;if(null==s)throw new Error("Expected rhsEndIndex on class field assignment.");for(t.nextToken();t.currentIndex()<s;)e.processToken();let i;r?(i=n.claimFreeName("__initStatic"),c.push(i)):(i=n.claimFreeName("__init"),a.push(i)),u.push({initializerName:i,equalsIndex:o,start:g,end:t.currentIndex()})}else o&&!k||d.push({start:s,end:t.currentIndex()})}return t.restoreToSnapshot(s),o?{headerInfo:r,constructorInitializerStatements:i,instanceInitializerNames:[],staticInitializerNames:[],constructorInsertPos:l,fields:[],rangesToRemove:d}:{headerInfo:r,constructorInitializerStatements:i,instanceInitializerNames:a,staticInitializerNames:c,constructorInsertPos:l,fields:u,rangesToRemove:d}}function os(e,t){for(e.nextToken();e.currentToken().contextId!==t;)e.nextToken();for(;rs(e.tokenAtRelativeIndex(-1));)e.previousToken()}function ss(e){const t=[];e.nextToken();const n=e.currentToken().contextId;if(null==n)throw new Error("Expected context ID on open-paren starting constructor params.");for(;!e.matchesContextIdAndLabel(p.parenR,n);)if(e.currentToken().contextId===n){if(e.nextToken(),rs(e.currentToken())){for(e.nextToken();rs(e.currentToken());)e.nextToken();const n=e.currentToken();if(n.type!==p.name)throw new Error("Expected identifier after access modifiers in constructor arg.");const o=e.identifierNameForToken(n);t.push(`this.${o} = ${o}`)}}else e.nextToken();for(e.nextToken();e.currentToken().isType;)e.nextToken();let o=e.currentIndex(),s=!1;for(;!e.matchesContextIdAndLabel(p.braceR,n);){if(!s&&e.matches2(p._super,p.parenL)){e.nextToken();const t=e.currentToken().contextId;if(null==t)throw new Error("Expected a context ID on the super call");for(;!e.matchesContextIdAndLabel(p.parenR,t);)e.nextToken();o=e.currentIndex(),s=!0}e.nextToken()}return e.nextToken(),{constructorInitializerStatements:t,constructorInsertPos:o}}function rs(e){return[p._async,p._get,p._set,p.plus,p.minus,p._readonly,p._static,p._public,p._private,p._protected,p._override,p._abstract,p.star,p._declare,p.hash].includes(e.type)}function is(e){if(e.matches1(p.bracketL)){const t=e.currentToken().contextId;if(null==t)throw new Error("Expected class context ID on computed name open bracket.");for(;!e.matchesContextIdAndLabel(p.bracketR,t);)e.nextToken();e.nextToken()}else e.nextToken()}function as(e){if(e.removeInitialToken(),e.removeToken(),e.removeToken(),e.removeToken(),e.matches1(p.parenL))e.removeToken(),e.removeToken(),e.removeToken();else for(;e.matches1(p.dot);)e.removeToken(),e.removeToken()}const cs={typeDeclarations:new Set,valueDeclarations:new Set};function ls(e){const t=new Set,n=new Set;for(let o=0;o<e.tokens.length;o++){const s=e.tokens[o];s.type===p.name&&J(s)&&(s.isType?t.add(e.identifierNameForToken(s)):n.add(e.identifierNameForToken(s)))}return{typeDeclarations:t,valueDeclarations:n}}function us(e){let t=e.currentIndex();for(;!e.matches1AtIndex(t,p.braceR);)t++;return e.matchesContextualAtIndex(t+1,h._from)&&e.matches1AtIndex(t+2,p.string)}function hs(e){(e.matches2(p._with,p.braceL)||e.matches2(p.name,p.braceL)&&e.matchesContextual(h._assert))&&(e.removeToken(),e.removeToken(),e.removeBalancedCode(),e.removeToken())}function ps(e,t,n,o){if(!e||t)return!1;const s=n.currentToken();if(null==s.rhsEndIndex)throw new Error("Expected non-null rhsEndIndex on export token.");const r=s.rhsEndIndex-n.currentIndex();if(3!==r&&(4!==r||!n.matches1AtIndex(s.rhsEndIndex-1,p.semi)))return!1;const i=n.tokenAtRelativeIndex(2);if(i.type!==p.name)return!1;const a=n.identifierNameForToken(i);return o.typeDeclarations.has(a)&&!o.valueDeclarations.has(a)}class ds extends Re{__init(){this.hadExport=!1}__init2(){this.hadNamedExport=!1}__init3(){this.hadDefaultExport=!1}constructor(e,t,n,o,s,r,i,a,c,l,u,h){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=o,this.helperManager=s,this.reactHotLoaderTransformer=r,this.enableLegacyBabel5ModuleInterop=i,this.enableLegacyTypeScriptModuleInterop=a,this.isTypeScriptTransformEnabled=c,this.isFlowTransformEnabled=l,this.preserveDynamicImport=u,this.keepUnusedImports=h,ds.prototype.__init.call(this),ds.prototype.__init2.call(this),ds.prototype.__init3.call(this),this.declarationInfo=c?ls(t):cs}getPrefixCode(){let e="";return this.hadExport&&(e+='Object.defineProperty(exports, "__esModule", {value: true});'),e}getSuffixCode(){return this.enableLegacyBabel5ModuleInterop&&this.hadDefaultExport&&!this.hadNamedExport?"\nmodule.exports = exports.default;\n":""}process(){return this.tokens.matches3(p._import,p.name,p.eq)?this.processImportEquals():this.tokens.matches1(p._import)?(this.processImport(),!0):this.tokens.matches2(p._export,p.eq)?(this.tokens.replaceToken("module.exports"),!0):this.tokens.matches1(p._export)&&!this.tokens.currentToken().isType?(this.hadExport=!0,this.processExport()):!(!this.tokens.matches2(p.name,p.postIncDec)||!this.processPostIncDec())||(this.tokens.matches1(p.name)||this.tokens.matches1(p.jsxName)?this.processIdentifier():this.tokens.matches1(p.eq)?this.processAssignment():this.tokens.matches1(p.assign)?this.processComplexAssignment():!!this.tokens.matches1(p.preIncDec)&&this.processPreIncDec())}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.importProcessor.shouldAutomaticallyElideImportedName(e)?as(this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(p._import,p.parenL)){if(this.preserveDynamicImport)return void this.tokens.copyToken();const e=this.enableLegacyTypeScriptModuleInterop?"":`${this.helperManager.getHelperName("interopRequireWildcard")}(`;this.tokens.replaceToken(`Promise.resolve().then(() => ${e}require`);const t=this.tokens.currentToken().contextId;if(null==t)throw new Error("Expected context ID on dynamic import invocation.");for(this.tokens.copyToken();!this.tokens.matchesContextIdAndLabel(p.parenR,t);)this.rootTransformer.processToken();return void this.tokens.replaceToken(e?")))":"))")}if(this.removeImportAndDetectIfShouldElide())this.tokens.removeToken();else{const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.appendCode(this.importProcessor.claimImportCode(e))}hs(this.tokens),this.tokens.matches1(p.semi)&&this.tokens.removeToken()}removeImportAndDetectIfShouldElide(){if(this.tokens.removeInitialToken(),this.tokens.matchesContextual(h._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,p.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,h._from))return this.removeRemainingImport(),!0;if(this.tokens.matches1(p.name)||this.tokens.matches1(p.star))return this.removeRemainingImport(),!1;if(this.tokens.matches1(p.string))return!1;let e=!1,t=!1;for(;!this.tokens.matches1(p.string);)(!e&&this.tokens.matches1(p.braceL)||this.tokens.matches1(p.comma))&&(this.tokens.removeToken(),this.tokens.matches1(p.braceR)||(t=!0),(this.tokens.matches2(p.name,p.comma)||this.tokens.matches2(p.name,p.braceR)||this.tokens.matches4(p.name,p.name,p.name,p.comma)||this.tokens.matches4(p.name,p.name,p.name,p.braceR))&&(e=!0)),this.tokens.removeToken();return!this.keepUnusedImports&&(this.isTypeScriptTransformEnabled?!e:!!this.isFlowTransformEnabled&&(t&&!e))}removeRemainingImport(){for(;!this.tokens.matches1(p.string);)this.tokens.removeToken()}processIdentifier(){const e=this.tokens.currentToken();if(e.shadowsGlobal)return!1;if(e.identifierRole===H.ObjectShorthand)return this.processObjectShorthand();if(e.identifierRole!==H.Access)return!1;const t=this.importProcessor.getIdentifierReplacement(this.tokens.identifierNameForToken(e));if(!t)return!1;let n=this.tokens.currentIndex()+1;for(;n<this.tokens.tokens.length&&this.tokens.tokens[n].type===p.parenR;)n++;return this.tokens.tokens[n].type===p.parenL?this.tokens.tokenAtRelativeIndex(1).type===p.parenL&&this.tokens.tokenAtRelativeIndex(-1).type!==p._new?(this.tokens.replaceToken(`${t}.call(void 0, `),this.tokens.removeToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR)):this.tokens.replaceToken(`(0, ${t})`):this.tokens.replaceToken(t),!0}processObjectShorthand(){const e=this.tokens.identifierName(),t=this.importProcessor.getIdentifierReplacement(e);return!!t&&(this.tokens.replaceToken(`${e}: ${t}`),!0)}processExport(){if(this.tokens.matches2(p._export,p._enum)||this.tokens.matches3(p._export,p._const,p._enum))return this.hadNamedExport=!0,!1;if(this.tokens.matches2(p._export,p._default))return this.tokens.matches3(p._export,p._default,p._enum)?(this.hadDefaultExport=!0,!1):(this.processExportDefault(),!0);if(this.tokens.matches2(p._export,p.braceL))return this.processExportBindings(),!0;if(this.tokens.matches2(p._export,p.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,h._type)){if(this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(p.braceL)){for(;!this.tokens.matches1(p.braceR);)this.tokens.removeToken();this.tokens.removeToken()}else this.tokens.removeToken(),this.tokens.matches1(p._as)&&(this.tokens.removeToken(),this.tokens.removeToken());return this.tokens.matchesContextual(h._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,p.string)&&(this.tokens.removeToken(),this.tokens.removeToken(),hs(this.tokens)),!0}if(this.hadNamedExport=!0,this.tokens.matches2(p._export,p._var)||this.tokens.matches2(p._export,p._let)||this.tokens.matches2(p._export,p._const))return this.processExportVar(),!0;if(this.tokens.matches2(p._export,p._function)||this.tokens.matches3(p._export,p.name,p._function))return this.processExportFunction(),!0;if(this.tokens.matches2(p._export,p._class)||this.tokens.matches3(p._export,p._abstract,p._class)||this.tokens.matches2(p._export,p.at))return this.processExportClass(),!0;if(this.tokens.matches2(p._export,p.star))return this.processExportStar(),!0;throw new Error("Unrecognized export syntax.")}processAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.isType||t.type!==p.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,p.dot))return!1;if(e>=2&&[p._var,p._let,p._const].includes(this.tokens.tokens[e-2].type))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.copyToken(),this.tokens.appendCode(` ${n} =`),!0)}processComplexAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.type!==p.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,p.dot))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.appendCode(` = ${n}`),this.tokens.copyToken(),!0)}processPreIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e+1];if(t.type!==p.name)return!1;if(t.shadowsGlobal)return!1;if(e+2<this.tokens.tokens.length&&(this.tokens.matches1AtIndex(e+2,p.dot)||this.tokens.matches1AtIndex(e+2,p.bracketL)||this.tokens.matches1AtIndex(e+2,p.parenL)))return!1;const n=this.tokens.identifierNameForToken(t),o=this.importProcessor.resolveExportBinding(n);return!!o&&(this.tokens.appendCode(`${o} = `),this.tokens.copyToken(),!0)}processPostIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e],n=this.tokens.tokens[e+1];if(t.type!==p.name)return!1;if(t.shadowsGlobal)return!1;if(e>=1&&this.tokens.matches1AtIndex(e-1,p.dot))return!1;const o=this.tokens.identifierNameForToken(t),s=this.importProcessor.resolveExportBinding(o);if(!s)return!1;const r=this.tokens.rawCodeForToken(n),i=this.importProcessor.getIdentifierReplacement(o)||o;if("++"===r)this.tokens.replaceToken(`(${i} = ${s} = ${i} + 1, ${i} - 1)`);else{if("--"!==r)throw new Error(`Unexpected operator: ${r}`);this.tokens.replaceToken(`(${i} = ${s} = ${i} - 1, ${i} + 1)`)}return this.tokens.removeToken(),!0}processExportDefault(){let e=!0;if(this.tokens.matches4(p._export,p._default,p._function,p.name)||this.tokens.matches5(p._export,p._default,p.name,p._function,p.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,h._async)){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.processNamedFunction();this.tokens.appendCode(` exports.default = ${e};`)}else if(this.tokens.matches4(p._export,p._default,p._class,p.name)||this.tokens.matches5(p._export,p._default,p._abstract,p._class,p.name)||this.tokens.matches3(p._export,p._default,p.at)){this.tokens.removeInitialToken(),this.tokens.removeToken(),this.copyDecorators(),this.tokens.matches1(p._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.default = ${e};`)}else if(ps(this.isTypeScriptTransformEnabled,this.keepUnusedImports,this.tokens,this.declarationInfo))e=!1,this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken();else if(this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");this.tokens.replaceToken(`let ${e}; exports.`),this.tokens.copyToken(),this.tokens.appendCode(` = ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e)}else this.tokens.replaceToken("exports."),this.tokens.copyToken(),this.tokens.appendCode(" =");e&&(this.hadDefaultExport=!0)}copyDecorators(){for(;this.tokens.matches1(p.at);)if(this.tokens.copyToken(),this.tokens.matches1(p.parenL))this.tokens.copyExpectedToken(p.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR);else{for(this.tokens.copyExpectedToken(p.name);this.tokens.matches1(p.dot);)this.tokens.copyExpectedToken(p.dot),this.tokens.copyExpectedToken(p.name);this.tokens.matches1(p.parenL)&&(this.tokens.copyExpectedToken(p.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR))}}processExportVar(){this.isSimpleExportVar()?this.processSimpleExportVar():this.processComplexExportVar()}isSimpleExportVar(){let e=this.tokens.currentIndex();if(e++,e++,!this.tokens.matches1AtIndex(e,p.name))return!1;for(e++;e<this.tokens.tokens.length&&this.tokens.tokens[e].isType;)e++;return!!this.tokens.matches1AtIndex(e,p.eq)}processSimpleExportVar(){this.tokens.removeInitialToken(),this.tokens.copyToken();const e=this.tokens.identifierName();for(;!this.tokens.matches1(p.eq);)this.rootTransformer.processToken();const t=this.tokens.currentToken().rhsEndIndex;if(null==t)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<t;)this.rootTransformer.processToken();this.tokens.appendCode(`; exports.${e} = ${e}`)}processComplexExportVar(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.matches1(p.braceL);e&&this.tokens.appendCode("(");let t=0;for(;;)if(this.tokens.matches1(p.braceL)||this.tokens.matches1(p.dollarBraceL)||this.tokens.matches1(p.bracketL))t++,this.tokens.copyToken();else if(this.tokens.matches1(p.braceR)||this.tokens.matches1(p.bracketR))t--,this.tokens.copyToken();else{if(0===t&&!this.tokens.matches1(p.name)&&!this.tokens.currentToken().isType)break;if(this.tokens.matches1(p.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}else{const e=this.tokens.currentToken();if(z(e)){const t=this.tokens.identifierName();let n=this.importProcessor.getIdentifierReplacement(t);if(null===n)throw new Error(`Expected a replacement for ${t} in \`export var\` syntax.`);Z(e)&&(n=`${t}: ${n}`),this.tokens.replaceToken(n)}else this.rootTransformer.processToken()}}if(e){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken();this.tokens.appendCode(")")}}processExportFunction(){this.tokens.replaceToken("");const e=this.processNamedFunction();this.tokens.appendCode(` exports.${e} = ${e};`)}processNamedFunction(){if(this.tokens.matches1(p._function))this.tokens.copyToken();else if(this.tokens.matches2(p.name,p._function)){if(!this.tokens.matchesContextual(h._async))throw new Error("Expected async keyword in function export.");this.tokens.copyToken(),this.tokens.copyToken()}if(this.tokens.matches1(p.star)&&this.tokens.copyToken(),!this.tokens.matches1(p.name))throw new Error("Expected identifier for exported function name.");const e=this.tokens.identifierName();if(this.tokens.copyToken(),this.tokens.currentToken().isType)for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return this.tokens.copyExpectedToken(p.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR),this.rootTransformer.processPossibleTypeRange(),this.tokens.copyExpectedToken(p.braceL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.braceR),e}processExportClass(){this.tokens.removeInitialToken(),this.copyDecorators(),this.tokens.matches1(p._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.${e} = ${e};`)}processExportBindings(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=us(this.tokens),t=[];for(;;){if(this.tokens.matches1(p.braceR)){this.tokens.removeToken();break}const n=Ce(this.tokens);for(;this.tokens.currentIndex()<n.endIndex;)this.tokens.removeToken();if(!(n.isType||!e&&this.shouldElideExportedIdentifier(n.leftName))){const e=n.rightName;"default"===e?this.hadDefaultExport=!0:this.hadNamedExport=!0;const o=n.leftName,s=this.importProcessor.getIdentifierReplacement(o);t.push(`exports.${e} = ${s||o};`)}if(this.tokens.matches1(p.braceR)){this.tokens.removeToken();break}if(this.tokens.matches2(p.comma,p.braceR)){this.tokens.removeToken(),this.tokens.removeToken();break}if(!this.tokens.matches1(p.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`);this.tokens.removeToken()}if(this.tokens.matchesContextual(h._from)){this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),hs(this.tokens)}else this.tokens.appendCode(t.join(" "));this.tokens.matches1(p.semi)&&this.tokens.removeToken()}processExportStar(){for(this.tokens.removeInitialToken();!this.tokens.matches1(p.string);)this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),hs(this.tokens),this.tokens.matches1(p.semi)&&this.tokens.removeToken()}shouldElideExportedIdentifier(e){return this.isTypeScriptTransformEnabled&&!this.keepUnusedImports&&!this.declarationInfo.valueDeclarations.has(e)}}class fs extends Re{constructor(e,t,n,o,s,r,i,a){super(),this.tokens=e,this.nameManager=t,this.helperManager=n,this.reactHotLoaderTransformer=o,this.isTypeScriptTransformEnabled=s,this.isFlowTransformEnabled=r,this.keepUnusedImports=i,this.nonTypeIdentifiers=s&&!i?Me(e,a):new Set,this.declarationInfo=s&&!i?ls(e):cs,this.injectCreateRequireForImportRequire=Boolean(a.injectCreateRequireForImportRequire)}process(){if(this.tokens.matches3(p._import,p.name,p.eq))return this.processImportEquals();if(this.tokens.matches4(p._import,p.name,p.name,p.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,h._type)){this.tokens.removeInitialToken();for(let e=0;e<7;e++)this.tokens.removeToken();return!0}if(this.tokens.matches2(p._export,p.eq))return this.tokens.replaceToken("module.exports"),!0;if(this.tokens.matches5(p._export,p._import,p.name,p.name,p.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,h._type)){this.tokens.removeInitialToken();for(let e=0;e<8;e++)this.tokens.removeToken();return!0}if(this.tokens.matches1(p._import))return this.processImport();if(this.tokens.matches2(p._export,p._default))return this.processExportDefault();if(this.tokens.matches2(p._export,p.braceL))return this.processNamedExports();if(this.tokens.matches2(p._export,p.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,h._type)){if(this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(p.braceL)){for(;!this.tokens.matches1(p.braceR);)this.tokens.removeToken();this.tokens.removeToken()}else this.tokens.removeToken(),this.tokens.matches1(p._as)&&(this.tokens.removeToken(),this.tokens.removeToken());return this.tokens.matchesContextual(h._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,p.string)&&(this.tokens.removeToken(),this.tokens.removeToken(),hs(this.tokens)),!0}return!1}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.shouldAutomaticallyElideImportedName(e)?as(this.tokens):this.injectCreateRequireForImportRequire?(this.tokens.replaceToken("const"),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.replaceToken(this.helperManager.getHelperName("require"))):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(p._import,p.parenL))return!1;const e=this.tokens.snapshot();if(this.removeImportTypeBindings()){for(this.tokens.restoreToSnapshot(e);!this.tokens.matches1(p.string);)this.tokens.removeToken();this.tokens.removeToken(),hs(this.tokens),this.tokens.matches1(p.semi)&&this.tokens.removeToken()}return!0}removeImportTypeBindings(){if(this.tokens.copyExpectedToken(p._import),this.tokens.matchesContextual(h._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,p.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,h._from))return!0;if(this.tokens.matches1(p.string))return this.tokens.copyToken(),!1;this.tokens.matchesContextual(h._module)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,h._from)&&this.tokens.copyToken();let e=!1,t=!1,n=!1;if(this.tokens.matches1(p.name)&&(this.shouldAutomaticallyElideImportedName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(p.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(p.comma)&&(n=!0,this.tokens.removeToken()))),this.tokens.matches1(p.star))this.shouldAutomaticallyElideImportedName(this.tokens.identifierNameAtRelativeIndex(2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken()):(n&&this.tokens.appendCode(","),e=!0,this.tokens.copyExpectedToken(p.star),this.tokens.copyExpectedToken(p.name),this.tokens.copyExpectedToken(p.name));else if(this.tokens.matches1(p.braceL)){for(n&&this.tokens.appendCode(","),this.tokens.copyToken();!this.tokens.matches1(p.braceR);){t=!0;const n=Ce(this.tokens);if(n.isType||this.shouldAutomaticallyElideImportedName(n.rightName)){for(;this.tokens.currentIndex()<n.endIndex;)this.tokens.removeToken();this.tokens.matches1(p.comma)&&this.tokens.removeToken()}else{for(e=!0;this.tokens.currentIndex()<n.endIndex;)this.tokens.copyToken();this.tokens.matches1(p.comma)&&this.tokens.copyToken()}}this.tokens.copyExpectedToken(p.braceR)}return!this.keepUnusedImports&&(this.isTypeScriptTransformEnabled?!e:!!this.isFlowTransformEnabled&&(t&&!e))}shouldAutomaticallyElideImportedName(e){return this.isTypeScriptTransformEnabled&&!this.keepUnusedImports&&!this.nonTypeIdentifiers.has(e)}processExportDefault(){if(ps(this.isTypeScriptTransformEnabled,this.keepUnusedImports,this.tokens,this.declarationInfo))return this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken(),!0;if(!(this.tokens.matches4(p._export,p._default,p._function,p.name)||this.tokens.matches5(p._export,p._default,p.name,p._function,p.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,h._async)||this.tokens.matches4(p._export,p._default,p._class,p.name)||this.tokens.matches5(p._export,p._default,p._abstract,p._class,p.name))&&this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");return this.tokens.replaceToken(`let ${e}; export`),this.tokens.copyToken(),this.tokens.appendCode(` ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e),!0}return!1}processNamedExports(){if(!this.isTypeScriptTransformEnabled)return!1;this.tokens.copyExpectedToken(p._export),this.tokens.copyExpectedToken(p.braceL);const e=us(this.tokens);let t=!1;for(;!this.tokens.matches1(p.braceR);){const n=Ce(this.tokens);if(n.isType||!e&&this.shouldElideExportedName(n.leftName)){for(;this.tokens.currentIndex()<n.endIndex;)this.tokens.removeToken();this.tokens.matches1(p.comma)&&this.tokens.removeToken()}else{for(t=!0;this.tokens.currentIndex()<n.endIndex;)this.tokens.copyToken();this.tokens.matches1(p.comma)&&this.tokens.copyToken()}}return this.tokens.copyExpectedToken(p.braceR),this.keepUnusedImports||!e||t||(this.tokens.removeToken(),this.tokens.removeToken(),hs(this.tokens)),!0}shouldElideExportedName(e){return this.isTypeScriptTransformEnabled&&!this.keepUnusedImports&&this.declarationInfo.typeDeclarations.has(e)&&!this.declarationInfo.valueDeclarations.has(e)}}class ms extends Re{constructor(e,t,n){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=n}process(){return!!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())||(this.tokens.matches1(p._enum)?(this.processEnum(),!0):this.tokens.matches2(p._export,p._enum)?(this.processNamedExportEnum(),!0):!!this.tokens.matches3(p._export,p._default,p._enum)&&(this.processDefaultExportEnum(),!0))}processNamedExportEnum(){if(this.isImportsTransformEnabled){this.tokens.removeInitialToken();const e=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.tokens.appendCode(` exports.${e} = ${e};`)}else this.tokens.copyToken(),this.processEnum()}processDefaultExportEnum(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.isImportsTransformEnabled?this.tokens.appendCode(` exports.default = ${e};`):this.tokens.appendCode(` export default ${e};`)}processEnum(){this.tokens.replaceToken("const"),this.tokens.copyExpectedToken(p.name);let e=!1;this.tokens.matchesContextual(h._of)&&(this.tokens.removeToken(),e=this.tokens.matchesContextual(h._symbol),this.tokens.removeToken());const t=this.tokens.matches3(p.braceL,p.name,p.eq);this.tokens.appendCode(' = require("flow-enums-runtime")');const n=!e&&!t;for(this.tokens.replaceTokenTrimmingLeftWhitespace(n?".Mirrored([":"({");!this.tokens.matches1(p.braceR);){if(this.tokens.matches1(p.ellipsis)){this.tokens.removeToken();break}this.processEnumElement(e,t),this.tokens.matches1(p.comma)&&this.tokens.copyToken()}this.tokens.replaceToken(n?"]);":"});")}processEnumElement(e,t){if(e){const e=this.tokens.identifierName();this.tokens.copyToken(),this.tokens.appendCode(`: Symbol("${e}")`)}else t?(this.tokens.copyToken(),this.tokens.replaceTokenTrimmingLeftWhitespace(":"),this.tokens.copyToken()):this.tokens.replaceToken(`"${this.tokens.identifierName()}"`)}}const ks="jest",gs=["mock","unmock","enableAutomock","disableAutomock"];class _s extends Re{__init(){this.hoistedFunctionNames=[]}constructor(e,t,n,o){super(),this.rootTransformer=e,this.tokens=t,this.nameManager=n,this.importProcessor=o,_s.prototype.__init.call(this)}process(){return!(0!==this.tokens.currentToken().scopeDepth||!this.tokens.matches4(p.name,p.dot,p.name,p.parenL)||this.tokens.identifierName()!==ks)&&(!function(e){let t,n=e[0],o=1;for(;o<e.length;){const s=e[o],r=e[o+1];if(o+=2,("optionalAccess"===s||"optionalCall"===s)&&null==n)return;"access"===s||"optionalAccess"===s?(t=n,n=r(n)):"call"!==s&&"optionalCall"!==s||(n=r(((...e)=>n.call(t,...e))),t=void 0)}return n}([this,"access",e=>e.importProcessor,"optionalAccess",e=>e.getGlobalNames,"call",e=>e(),"optionalAccess",e=>e.has,"call",e=>e(ks)])&&this.extractHoistedCalls())}getHoistedCode(){return this.hoistedFunctionNames.length>0?this.hoistedFunctionNames.map((e=>`${e}();`)).join(""):""}extractHoistedCalls(){this.tokens.removeToken();let e=!1;for(;this.tokens.matches3(p.dot,p.name,p.parenL);){const t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);if(gs.includes(t)){const t=this.nameManager.claimFreeName("__jestHoist");this.hoistedFunctionNames.push(t),this.tokens.replaceToken(`function ${t}(){${ks}.`),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR),this.tokens.appendCode(";}"),e=!1}else e?this.tokens.copyToken():this.tokens.replaceToken(`${ks}.`),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.parenR),e=!0}return!0}}class ys extends Re{constructor(e){super(),this.tokens=e}process(){if(this.tokens.matches1(p.num)){const e=this.tokens.currentTokenCode();if(e.includes("_"))return this.tokens.replaceToken(e.replace(/_/g,"")),!0}return!1}}class xs extends Re{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){return!!this.tokens.matches2(p._catch,p.braceL)&&(this.tokens.copyToken(),this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`),!0)}}class Ts extends Re{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){if(this.tokens.matches1(p.nullishCoalescing)){const e=this.tokens.currentToken();return this.tokens.tokens[e.nullishStartIndex].isAsyncOperation?this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("):this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("),!0}if(this.tokens.matches1(p._delete)){if(this.tokens.tokenAtRelativeIndex(1).isOptionalChainStart)return this.tokens.removeInitialToken(),!0}const e=this.tokens.currentToken().subscriptStartIndex;if(null!=e&&this.tokens.tokens[e].isOptionalChainStart&&this.tokens.tokenAtRelativeIndex(-1).type!==p._super){const t=this.nameManager.claimFreeName("_");let n;if(n=e>0&&this.tokens.matches1AtIndex(e-1,p._delete)&&this.isLastSubscriptInChain()?`${t} => delete ${t}`:`${t} => ${t}`,this.tokens.tokens[e].isAsyncOperation&&(n=`async ${n}`),this.tokens.matches2(p.questionDot,p.parenL)||this.tokens.matches2(p.questionDot,p.lessThan))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${n}`);else if(this.tokens.matches2(p.questionDot,p.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${n}`);else if(this.tokens.matches1(p.questionDot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${n}.`);else if(this.tokens.matches1(p.dot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}.`);else if(this.tokens.matches1(p.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}[`);else{if(!this.tokens.matches1(p.parenL))throw new Error("Unexpected subscript operator in optional chain.");this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${n}(`)}return!0}return!1}isLastSubscriptInChain(){let e=0;for(let t=this.tokens.currentIndex()+1;;t++){if(t>=this.tokens.tokens.length)throw new Error("Reached the end of the code while finding the end of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e++:this.tokens.tokens[t].isOptionalChainEnd&&e--,e<0)return!0;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return!1}}justSkippedSuper(){let e=0,t=this.tokens.currentIndex()-1;for(;;){if(t<0)throw new Error("Reached the start of the code while finding the start of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e--:this.tokens.tokens[t].isOptionalChainEnd&&e++,e<0)return!1;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return this.tokens.tokens[t-1].type===p._super;t--}}}class bs extends Re{constructor(e,t,n,o){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.options=o}process(){const e=this.tokens.currentIndex();if("createReactClass"===this.tokens.identifierName()){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("createReactClass");return t?this.tokens.replaceToken(`(0, ${t})`):this.tokens.copyToken(),this.tryProcessCreateClassCall(e),!0}if(this.tokens.matches3(p.name,p.dot,p.name)&&"React"===this.tokens.identifierName()&&"createClass"===this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("React")||"React";return t?(this.tokens.replaceToken(t),this.tokens.copyToken(),this.tokens.copyToken()):(this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken()),this.tryProcessCreateClassCall(e),!0}return!1}tryProcessCreateClassCall(e){const t=this.findDisplayName(e);t&&this.classNeedsDisplayName()&&(this.tokens.copyExpectedToken(p.parenL),this.tokens.copyExpectedToken(p.braceL),this.tokens.appendCode(`displayName: '${t}',`),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(p.braceR),this.tokens.copyExpectedToken(p.parenR))}findDisplayName(e){return e<2?null:this.tokens.matches2AtIndex(e-2,p.name,p.eq)||e>=2&&this.tokens.tokens[e-2].identifierRole===H.ObjectKey?this.tokens.identifierNameAtIndex(e-2):this.tokens.matches2AtIndex(e-2,p._export,p._default)?this.getDisplayNameFromFilename():null}getDisplayNameFromFilename(){const e=(this.options.filePath||"unknown").split("/"),t=e[e.length-1],n=t.lastIndexOf("."),o=-1===n?t:t.slice(0,n);return"index"===o&&e[e.length-2]?e[e.length-2]:o}classNeedsDisplayName(){let e=this.tokens.currentIndex();if(!this.tokens.matches2(p.parenL,p.braceL))return!1;const t=e+1,n=this.tokens.tokens[t].contextId;if(null==n)throw new Error("Expected non-null context ID on object open-brace.");for(;e<this.tokens.tokens.length;e++){const t=this.tokens.tokens[e];if(t.type===p.braceR&&t.contextId===n){e++;break}if("displayName"===this.tokens.identifierNameAtIndex(e)&&this.tokens.tokens[e].identifierRole===H.ObjectKey&&t.contextId===n)return!1}if(e===this.tokens.tokens.length)throw new Error("Unexpected end of input when processing React class.");return this.tokens.matches1AtIndex(e,p.parenR)||this.tokens.matches2AtIndex(e,p.comma,p.parenR)}}class vs extends Re{__init(){this.extractedDefaultExportName=null}constructor(e,t){super(),this.tokens=e,this.filePath=t,vs.prototype.__init.call(this)}setExtractedDefaultExportName(e){this.extractedDefaultExportName=e}getPrefixCode(){return"\n (function () {\n var enterModule = require('react-hot-loader').enterModule;\n enterModule && enterModule(module);\n })();".replace(/\s+/g," ").trim()}getSuffixCode(){const e=new Set;for(const n of this.tokens.tokens)!n.isType&&J(n)&&n.identifierRole!==H.ImportDeclaration&&e.add(this.tokens.identifierNameForToken(n));const t=Array.from(e).map((e=>({variableName:e,uniqueLocalName:e})));return this.extractedDefaultExportName&&t.push({variableName:this.extractedDefaultExportName,uniqueLocalName:"default"}),`\n;(function () {\n var reactHotLoader = require('react-hot-loader').default;\n var leaveModule = require('react-hot-loader').leaveModule;\n if (!reactHotLoader) {\n return;\n }\n${t.map((({variableName:e,uniqueLocalName:t})=>` reactHotLoader.register(${e}, "${t}", ${JSON.stringify(this.filePath||"")});`)).join("\n")}\n leaveModule(module);\n})();`}process(){return!1}}const Is=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await","false","null","true"]);function ws(e){if(0===e.length)return!1;if(!V[e.charCodeAt(0)])return!1;for(let t=1;t<e.length;t++)if(!U[e.charCodeAt(t)])return!1;return!Is.has(e)}class Cs extends Re{constructor(e,t,n){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=n}process(){return!!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())||(this.tokens.matches1(p._public)||this.tokens.matches1(p._protected)||this.tokens.matches1(p._private)||this.tokens.matches1(p._abstract)||this.tokens.matches1(p._readonly)||this.tokens.matches1(p._override)||this.tokens.matches1(p.nonNullAssertion)?(this.tokens.removeInitialToken(),!0):this.tokens.matches1(p._enum)||this.tokens.matches2(p._const,p._enum)?(this.processEnum(),!0):!(!this.tokens.matches2(p._export,p._enum)&&!this.tokens.matches3(p._export,p._const,p._enum))&&(this.processEnum(!0),!0))}processEnum(e=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(p._const)||this.tokens.matches1(p._enum);)this.tokens.removeToken();const t=this.tokens.identifierName();this.tokens.removeToken(),e&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${t}; (function (${t})`),this.tokens.copyExpectedToken(p.braceL),this.processEnumBody(t),this.tokens.copyExpectedToken(p.braceR),e&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${t} || (exports.${t} = ${t} = {}));`):this.tokens.appendCode(`)(${t} || (${t} = {}));`)}processEnumBody(e){let t=null;for(;!this.tokens.matches1(p.braceR);){const{nameStringCode:n,variableName:o}=this.extractEnumKeyInfo(this.tokens.currentToken());this.tokens.removeInitialToken(),this.tokens.matches3(p.eq,p.string,p.comma)||this.tokens.matches3(p.eq,p.string,p.braceR)?this.processStringLiteralEnumMember(e,n,o):this.tokens.matches1(p.eq)?this.processExplicitValueEnumMember(e,n,o):this.processImplicitValueEnumMember(e,n,o,t),this.tokens.matches1(p.comma)&&this.tokens.removeToken(),t=null!=o?o:`${e}[${n}]`}}extractEnumKeyInfo(e){if(e.type===p.name){const t=this.tokens.identifierNameForToken(e);return{nameStringCode:`"${t}"`,variableName:ws(t)?t:null}}if(e.type===p.string){const t=this.tokens.stringValueForToken(e);return{nameStringCode:this.tokens.code.slice(e.start,e.end),variableName:ws(t)?t:null}}throw new Error("Expected name or string at beginning of enum element.")}processStringLiteralEnumMember(e,t,n){null!=n?(this.tokens.appendCode(`const ${n}`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(`; ${e}[${t}] = ${n};`)):(this.tokens.appendCode(`${e}[${t}]`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(";"))}processExplicitValueEnumMember(e,t,n){const o=this.tokens.currentToken().rhsEndIndex;if(null==o)throw new Error("Expected rhsEndIndex on enum assign.");if(null!=n){for(this.tokens.appendCode(`const ${n}`),this.tokens.copyToken();this.tokens.currentIndex()<o;)this.rootTransformer.processToken();this.tokens.appendCode(`; ${e}[${e}[${t}] = ${n}] = ${t};`)}else{for(this.tokens.appendCode(`${e}[${e}[${t}]`),this.tokens.copyToken();this.tokens.currentIndex()<o;)this.rootTransformer.processToken();this.tokens.appendCode(`] = ${t};`)}}processImplicitValueEnumMember(e,t,n,o){let s=null!=o?`${o} + 1`:"0";null!=n&&(this.tokens.appendCode(`const ${n} = ${s}; `),s=n),this.tokens.appendCode(`${e}[${e}[${t}] = ${s}] = ${t};`)}}class Es{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(e,t,n,o){Es.prototype.__init.call(this),Es.prototype.__init2.call(this),this.nameManager=e.nameManager,this.helperManager=e.helperManager;const{tokenProcessor:s,importProcessor:r}=e;this.tokens=s,this.isImportsTransformEnabled=t.includes("imports"),this.isReactHotLoaderTransformEnabled=t.includes("react-hot-loader"),this.disableESTransforms=Boolean(o.disableESTransforms),o.disableESTransforms||(this.transformers.push(new Ts(s,this.nameManager)),this.transformers.push(new ys(s)),this.transformers.push(new xs(s,this.nameManager))),t.includes("jsx")&&("preserve"!==o.jsxRuntime&&this.transformers.push(new Le(this,s,r,this.nameManager,o)),this.transformers.push(new bs(this,s,r,o)));let i=null;if(t.includes("react-hot-loader")){if(!o.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");i=new vs(s,o.filePath),this.transformers.push(i)}if(t.includes("imports")){if(null===r)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new ds(this,s,r,this.nameManager,this.helperManager,i,n,Boolean(o.enableLegacyTypeScriptModuleInterop),t.includes("typescript"),t.includes("flow"),Boolean(o.preserveDynamicImport),Boolean(o.keepUnusedImports)))}else this.transformers.push(new fs(s,this.nameManager,this.helperManager,i,t.includes("typescript"),t.includes("flow"),Boolean(o.keepUnusedImports),o));t.includes("flow")&&this.transformers.push(new ms(this,s,t.includes("imports"))),t.includes("typescript")&&this.transformers.push(new Cs(this,s,t.includes("imports"))),t.includes("jest")&&this.transformers.push(new _s(this,s,this.nameManager,r))}transform(){this.tokens.reset(),this.processBalancedCode();let e=this.isImportsTransformEnabled?'"use strict";':"";for(const s of this.transformers)e+=s.getPrefixCode();e+=this.helperManager.emitHelpers(),e+=this.generatedVariables.map((e=>` var ${e};`)).join("");for(const s of this.transformers)e+=s.getHoistedCode();let t="";for(const s of this.transformers)t+=s.getSuffixCode();const n=this.tokens.finish();let{code:o}=n;if(o.startsWith("#!")){let s=o.indexOf("\n");return-1===s&&(s=o.length,o+="\n"),{code:o.slice(0,s+1)+e+o.slice(s+1)+t,mappings:this.shiftMappings(n.mappings,e.length)}}return{code:e+o+t,mappings:this.shiftMappings(n.mappings,e.length)}}processBalancedCode(){let e=0,t=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(p.braceL)||this.tokens.matches1(p.dollarBraceL))e++;else if(this.tokens.matches1(p.braceR)){if(0===e)return;e--}if(this.tokens.matches1(p.parenL))t++;else if(this.tokens.matches1(p.parenR)){if(0===t)return;t--}this.processToken()}}processToken(){if(this.tokens.matches1(p._class))this.processClass();else{for(const e of this.transformers){if(e.process())return}this.tokens.copyToken()}}processNamedClass(){if(!this.tokens.matches2(p._class,p.name))throw new Error("Expected identifier for exported class name.");const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),e}processClass(){const e=ns(this,this.tokens,this.nameManager,this.disableESTransforms),t=(e.headerInfo.isExpression||!e.headerInfo.className)&&e.staticInitializerNames.length+e.instanceInitializerNames.length>0;let n=e.headerInfo.className;t&&(n=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(n),this.tokens.appendCode(` (${n} =`));const o=this.tokens.currentToken().contextId;if(null==o)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(p._class);!this.tokens.matchesContextIdAndLabel(p.braceL,o);)this.processToken();this.processClassBody(e,n);const s=e.staticInitializerNames.map((e=>`${n}.${e}()`));t?this.tokens.appendCode(`, ${s.map((e=>`${e}, `)).join("")}${n})`):e.staticInitializerNames.length>0&&this.tokens.appendCode(` ${s.map((e=>`${e};`)).join(" ")}`)}processClassBody(e,t){const{headerInfo:n,constructorInsertPos:o,constructorInitializerStatements:s,fields:r,instanceInitializerNames:i,rangesToRemove:a}=e;let c=0,l=0;const u=this.tokens.currentToken().contextId;if(null==u)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(p.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");const h=s.length+i.length>0;if(null===o&&h){const e=this.makeConstructorInitCode(s,i,t);if(n.hasSuperclass){const t=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${t}) { super(...${t}); ${e}; }`)}else this.tokens.appendCode(`constructor() { ${e}; }`)}for(;!this.tokens.matchesContextIdAndLabel(p.braceR,u);)if(c<r.length&&this.tokens.currentIndex()===r[c].start){let e=!1;for(this.tokens.matches1(p.bracketL)?this.tokens.copyTokenWithPrefix(`${r[c].initializerName}() {this`):this.tokens.matches1(p.string)||this.tokens.matches1(p.num)?(this.tokens.copyTokenWithPrefix(`${r[c].initializerName}() {this[`),e=!0):this.tokens.copyTokenWithPrefix(`${r[c].initializerName}() {this.`);this.tokens.currentIndex()<r[c].end;)e&&this.tokens.currentIndex()===r[c].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),c++}else if(l<a.length&&this.tokens.currentIndex()>=a[l].start){for(this.tokens.currentIndex()<a[l].end&&this.tokens.removeInitialToken();this.tokens.currentIndex()<a[l].end;)this.tokens.removeToken();l++}else this.tokens.currentIndex()===o?(this.tokens.copyToken(),h&&this.tokens.appendCode(`;${this.makeConstructorInitCode(s,i,t)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(p.braceR)}makeConstructorInitCode(e,t,n){return[...e,...t.map((e=>`${n}.prototype.${e}.call(this)`))].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(p.parenR,p.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType;)e++;if(this.tokens.matches1AtIndex(e,p.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<e;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(h._async)&&!this.tokens.matches1(p._async))return!1;const e=this.tokens.tokenAtRelativeIndex(1);if(e.type!==p.lessThan||!e.isType)return!1;let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,p.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<t;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}shiftMappings(e,t){for(let n=0;n<e.length;n++){const o=e[n];void 0!==o&&(e[n]=o+t)}return e}}n(30577);function As(e,t,n){t++,e.matches1AtIndex(t,p.parenL)||(e.matches1AtIndex(t,p.name)&&(n.add(e.identifierNameAtIndex(t)),t++,e.matches1AtIndex(t,p.comma)&&t++),e.matches1AtIndex(t,p.star)&&(t+=2,n.add(e.identifierNameAtIndex(t)),t++),e.matches1AtIndex(t,p.braceL)&&function(e,t,n){for(;;){if(e.matches1AtIndex(t,p.braceR))return;const o=Ce(e,t);if(t=o.endIndex,o.isType||n.add(o.rightName),e.matches2AtIndex(t,p.comma,p.braceR))return;if(e.matches1AtIndex(t,p.braceR))return;if(!e.matches1AtIndex(t,p.comma))throw new Error(`Unexpected token: ${JSON.stringify(e.tokens[t])}`);t++}}(e,++t,n))}function Ss(e,t){!function(e){ze.strictCheck(e)}(t);try{const n=Ns(e,t),o=new Es(n,t.transforms,Boolean(t.enableLegacyBabel5ModuleInterop),t).transform();let s={code:o.code};if(t.sourceMapOptions){if(!t.filePath)throw new Error("filePath must be specified when generating a source map.");s={...s,sourceMap:$e(o,t.filePath,t.sourceMapOptions,e,n.tokenProcessor.tokens)}}return s}catch(n){throw t.filePath&&(n.message=`Error transforming ${t.filePath}: ${n.message}`),n}}function Ns(e,t){const n=t.transforms.includes("jsx"),o=t.transforms.includes("typescript"),s=t.transforms.includes("flow"),r=!0===t.disableESTransforms,i=function(e,t,n,o){if(o&&n)throw new Error("Cannot combine flow and typescript plugins.");E(e,t,n,o);const s=Zo();if(T.error)throw w(T.error);return s}(e,n,o,s),a=i.tokens,c=i.scopes,l=new We(e,a),u=new Ke(l),h=new ts(e,a,s,r,u),d=Boolean(t.enableLegacyTypeScriptModuleInterop);let f=null;return t.transforms.includes("imports")?(f=new Fe(l,h,d,t,t.transforms.includes("typescript"),Boolean(t.keepUnusedImports),u),f.preprocessTokens(),Ue(h,c,f.getGlobalNames()),t.transforms.includes("typescript")&&!t.keepUnusedImports&&f.pruneTypeOnlyImports()):t.transforms.includes("typescript")&&!t.keepUnusedImports&&Ue(h,c,function(e){const t=new Set;for(let n=0;n<e.tokens.length;n++)e.matches1AtIndex(n,p._import)&&!e.matches3AtIndex(n,p._import,p.name,p.eq)&&As(e,n,t);return t}(h)),{tokenProcessor:h,scopes:c,nameManager:l,importProcessor:f,helperManager:u}}var Rs=Object.defineProperty,Ls=Object.defineProperties,js=Object.getOwnPropertyDescriptors,Os=Object.getOwnPropertySymbols,Ds=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable,Ms=(e,t,n)=>t in e?Rs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Fs=(e,t)=>{for(var n in t||(t={}))Ds.call(t,n)&&Ms(e,n,t[n]);if(Os)for(var n of Os(t))Ps.call(t,n)&&Ms(e,n,t[n]);return e},qs=(e,t)=>Ls(e,js(t)),$s=e=>{const t=(0,s.useRef)(null),[n,h]=(0,s.useState)(e.code||""),{theme:p}=e;return(0,s.useEffect)((()=>{h(e.code)}),[e.code]),function(e,t,n){function o(t){var n=e.current;if(n){var o=l(n);n=c(n),o.position+=t.length-n.length,k.position=o,k.onChange(t,o)}}function h(t,n){var o=e.current;if(o){var s=window.getSelection().getRangeAt(0);s.deleteContents(),s.collapse();var r=n||0;(s=u(o,n=(s=l(o)).position+(0>r?r:0),s.position+(0<r?r:0))).deleteContents(),t&&s.insertNode(document.createTextNode(t)),i(u(o,n+t.length))}}function p(t){var n=e.current;if(n){n.focus();var o=0;if("number"==typeof t)o=t;else{var s=c(n).split("\n").slice(0,t.row);t.row&&(o+=s.join("\n").length+1),o+=t.column}i(u(n,o))}}function d(){var t=e.current;return{text:c(t),position:t=l(t)}}function f(){k.observer.disconnect()}n||(n={});var m=(0,s.useState)([])[1],k=(0,s.useState)((function(){var e={observer:null,disconnected:!1,onChange:t,queue:[],history:[],historyAt:-1,position:null};return"undefined"!=typeof MutationObserver&&(e.observer=new MutationObserver((function(t){var n;(n=e.queue).push.apply(n,t)}))),e}))[0],g=(0,s.useMemo)((function(){return{update:o,insert:h,move:p,getState:d}}),[]);"object"!=typeof navigator||((0,s.useLayoutEffect)((function(){if(k.onChange=t,e.current&&!n.disabled){if(k.disconnected=!1,k.observer.observe(e.current,r),k.position){var o=k.position,s=o.position;i(u(e.current,s,s+o.extent))}return f}})),(0,s.useLayoutEffect)((function(){if(e.current&&!n.disabled){var t=e.current;if(k.position){t.focus();var o=k.position,s=o.position;i(u(t,s,s+o.extent))}var r=t.style.whiteSpace,h=t.contentEditable,p=!0;try{t.contentEditable="plaintext-only"}catch(w){t.contentEditable="true",p=!1}"pre"!==r&&(t.style.whiteSpace="pre-wrap"),n.indentation&&(t.style.tabSize=t.style.MozTabSize=""+n.indentation),o=""+" ".repeat(n.indentation||0);var d,f=new RegExp("^(?:"+o+")"),_=new RegExp("^(?:"+o+")*("+o+")$"),y=function(n){if(e.current&&k.position){var o=c(t),s=l(t),r=(new Date).valueOf(),i=k.history[k.historyAt];!n&&500>r-d||i&&i[1]===o?d=r:(n=++k.historyAt,k.history[n]=[s,o],k.history.splice(n+1),500<n&&(k.historyAt--,k.history.shift()))}},x=function(){var e;if((e=k.queue).push.apply(e,k.observer.takeRecords()),e=l(t),k.queue.length){k.observer.disconnect(),k.disconnected=!0;var n,o,s=c(t);for(k.position=e;n=k.queue.pop();){for(null!==n.oldValue&&(n.target.textContent=n.oldValue),o=n.removedNodes.length-1;0<=o;o--)n.target.insertBefore(n.removedNodes[o],n.nextSibling);for(o=n.addedNodes.length-1;0<=o;o--)n.addedNodes[o].parentNode&&n.target.removeChild(n.addedNodes[o])}k.onChange(s,e)}},T=function(e){if(!e.defaultPrevented&&e.target===t){if(k.disconnected)return e.preventDefault(),m([]);if(a(e))e.preventDefault(),e.shiftKey?(e=++k.historyAt,(e=k.history[e])||(k.historyAt=k.history.length-1)):(e=--k.historyAt,(e=k.history[e])||(k.historyAt=0)),e&&(k.observer.disconnect(),k.disconnected=!0,k.position=e[0],k.onChange(e[1],e[0]));else{if(y(),"Enter"===e.key){e.preventDefault();var o=l(t),s=/\S/g.exec(o.content);o="\n"+o.content.slice(0,s?s.index:o.content.length),g.insert(o)}else if(p&&!n.indentation||"Backspace"!==e.key){if(n.indentation&&"Tab"===e.key){e.preventDefault(),s=(o=l(t)).position-o.content.length;var r=c(t);o=e.shiftKey?r.slice(0,s)+o.content.replace(f,"")+r.slice(s+o.content.length):r.slice(0,s)+(n.indentation?" ".repeat(n.indentation):"\t")+r.slice(s),g.update(o)}}else e.preventDefault(),window.getSelection().getRangeAt(0).collapsed?(o=l(t),o=_.exec(o.content),g.insert("",o?-o[1].length:-1)):g.insert("",0);e.repeat&&x()}}},b=function(e){e.defaultPrevented||e.isComposing||(a(e)||y(),x(),t.focus())},v=function(e){k.position=window.getSelection().rangeCount&&e.target===t?l(t):null},I=function(e){e.preventDefault(),y(!0),g.insert(e.clipboardData.getData("text/plain")),y(!0),x()};return document.addEventListener("selectstart",v),window.addEventListener("keydown",T),t.addEventListener("paste",I),t.addEventListener("keyup",b),function(){document.removeEventListener("selectstart",v),window.removeEventListener("keydown",T),t.removeEventListener("paste",I),t.removeEventListener("keyup",b),t.style.whiteSpace=r,t.contentEditable=h}}k.history.length=0,k.historyAt=-1}),[e.current,n.disabled,n.indentation]))}(t,(e=>h(e.slice(0,-1))),{disabled:e.disabled,indentation:"indentation"===e.tabMode?2:void 0}),(0,s.useEffect)((()=>{e.onChange&&e.onChange(n)}),[n]),(0,f.jsx)("div",{className:e.className,style:e.style,children:(0,f.jsx)(o.y$,{code:n,theme:e.theme||o.np.nightOwl,language:e.language,children:({className:e,tokens:n,getLineProps:o,getTokenProps:s,style:r})=>(0,f.jsx)("pre",{className:e,style:Fs(Fs({margin:0,outline:"none",padding:10,fontFamily:"inherit"},p&&"object"==typeof p.plain?p.plain:{}),r),ref:t,spellCheck:"false",children:n.map(((e,t)=>(0,f.jsxs)("span",qs(Fs({},o({line:e})),{children:[e.filter((e=>!e.empty)).map(((e,t)=>(0,f.jsx)("span",Fs({},s({token:e})),`token-${t}`))),"\n"]}),`line-${t}`)))})})})};$s.defaultProps={tabMode:"indentation"};var Bs=$s,Ks=(0,s.createContext)({}),Us=["jsx","imports"];function Vs(e={}){const t=Array.isArray(e.transforms)?e.transforms.filter(Boolean):Us;return e=>Ss(e,{transforms:t}).code}var Ws=(e,t)=>class extends s.Component{componentDidCatch(e){t(e)}render(){return"function"==typeof e?(0,f.jsx)(e,{}):s.isValidElement(e)?e:null}},Hs=(e,t)=>{const n=Object.keys(t),o=n.map((e=>t[e]));return new Function(...n,e)(...o)};var Xs='const _jsxFileName = "";',zs=e=>e.trim().replace(/;$/,""),Gs=e=>e.replace(Xs,"").trim(),Js=e=>Xs+e,Qs=e=>`return (${e})`;var Ys=function({children:e,code:t="",language:n="tsx",theme:o,enableTypeScript:r=!0,disabled:i=!1,scope:a,transformCode:c,noInline:l=!1}){const[u,h]=(0,s.useState)({error:void 0,element:void 0});function p(e){return t=this,n=null,o=function*(){const t=e=>{h({error:e.toString(),element:void 0})};try{const o=c?c(e):e;try{const e=yield Promise.resolve(o),n=e=>h({error:void 0,element:e});if("string"!=typeof e)throw new Error("Code failed to transform");const i={code:e,scope:a,enableTypeScript:r};l?(h({error:void 0,element:null}),(({code:e="",scope:t={},enableTypeScript:n=!0},o,r)=>{if(!/render\s*\(/.test(e))return r(new SyntaxError("No-Inline evaluations must call `render`."));const i=["jsx","imports"];n&&i.splice(1,0,"typescript"),Hs(Vs({transforms:i})(e),qs(Fs({React:s},t),{render:e=>{void 0===e?r(new SyntaxError("`render` must be called with valid JSX.")):o(Ws(e,r))}}))})(i,n,t)):n((({code:e="",scope:t={},enableTypeScript:n=!0},o)=>{const r=["jsx"];n&&r.push("typescript");const i=function(...e){return e.reduce(((e,t)=>(...n)=>e(t(...n))))}(Js,Vs({transforms:["imports"]}),Qs,Gs,zs,Vs({transforms:r}),zs)(e);return Ws(Hs(i,Fs({React:s},t)),o)})(i,t))}catch(n){return t(n)}}catch(o){return t(o),Promise.resolve()}},new Promise(((e,s)=>{var r=e=>{try{a(o.next(e))}catch(t){s(t)}},i=e=>{try{a(o.throw(e))}catch(t){s(t)}},a=t=>t.done?e(t.value):Promise.resolve(t.value).then(r,i);a((o=o.apply(t,n)).next())}));var t,n,o}const d=e=>h({error:e.toString()});return(0,s.useEffect)((()=>{p(t).catch(d)}),[t,a,l,c]),(0,f.jsx)(Ks.Provider,{value:qs(Fs({},u),{code:t,language:n,theme:o,disabled:i,onError:d,onChange:e=>{p(e).catch(d)}}),children:e})};function Zs(e){const{code:t,language:n,theme:o,disabled:r,onChange:i}=(0,s.useContext)(Ks);return(0,f.jsx)(Bs,Fs({theme:o,code:t,language:n,disabled:r,onChange:i},e))}function er(e){const{error:t}=(0,s.useContext)(Ks);return t?(0,f.jsx)("pre",qs(Fs({},e),{children:t})):null}var tr=function(e){var t=e,{Component:n="div"}=t,o=((e,t)=>{var n={};for(var o in e)Ds.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&Os)for(var o of Os(e))t.indexOf(o)<0&&Ps.call(e,o)&&(n[o]=e[o]);return n})(t,["Component"]);const{element:r}=(0,s.useContext)(Ks);return(0,f.jsx)(n,qs(Fs({},o),{children:r?(0,f.jsx)(r,{}):null}))}},34370:(e,t,n)=>{"use strict";function o(e,{target:t=document.body}={}){if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const n=document.createElement("textarea"),o=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const s=document.getSelection(),r=s.rangeCount>0&&s.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch(a){}return n.remove(),r&&(s.removeAllRanges(),s.addRange(r)),o&&o.focus(),i}n.d(t,{Z:()=>o})}}]); \ No newline at end of file diff --git a/assets/js/74efa390.16eca5b4.js b/assets/js/74efa390.16eca5b4.js new file mode 100644 index 0000000000..c564b580cb --- /dev/null +++ b/assets/js/74efa390.16eca5b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15049],{78444:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var n=s(24246),o=s(71670),a=s(88405);const i={title:"A post with html slug",tags:["paginated-tag"],slug:"/x/y/z.html"},l="Hmmm!",r={permalink:"/tests/blog/x/y/z.html",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-10-02-html-slug.mdx",source:"@site/_dogfooding/_blog tests/2022-10-02-html-slug.mdx",title:"A post with html slug",description:"This is a blog post with an html slug!",date:"2022-10-02T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:3.4,hasTruncateMarker:!1,authors:[],frontMatter:{title:"A post with html slug",tags:["paginated-tag"],slug:"/x/y/z.html"},unlisted:!1,prevItem:{title:"Test Relative Path",permalink:"/tests/blog/2023/07/19/b"},nextItem:{title:"First post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/04/20/dup-footnote"}},c={authorsImageUrls:[]},p=[...a.d$];function u(t){const e={p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"This is a blog post with an html slug!"}),"\n","\n",(0,n.jsx)(a.ZP,{})]})}function g(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},88405:(t,e,s)=>{s.d(e,{ZP:()=>l,d$:()=>a});var n=s(24246),o=s(71670);const a=[];function i(t){const e={p:"p",...(0,o.a)(),...t.components};return(0,n.jsx)(e.p,{children:"This is a blog partial"})}function l(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(i,{...t})}):i(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>l,a:()=>i});var n=s(27378);const o={},a=n.createContext(o);function i(t){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function l(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:i(t.components),n.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/758e69f6.fa0da0d0.js b/assets/js/758e69f6.fa0da0d0.js new file mode 100644 index 0000000000..af6b5afe26 --- /dev/null +++ b/assets/js/758e69f6.fa0da0d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[32194],{77569:(t,s,e)=>{e.r(s),e.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>l});var i=e(24246),r=e(71670);const n={tags:["visibility","listed"]},o="Some Drafts - Listed 1",a={id:"tests/visibility/some-drafts/draft-subcategory/listed1",title:"Some Drafts - Listed 1",description:"Regular doc",source:"@site/_dogfooding/_docs tests/tests/visibility/some-drafts/draft-subcategory/listed1.mdx",sourceDirName:"tests/visibility/some-drafts/draft-subcategory",slug:"/tests/visibility/some-drafts/draft-subcategory/listed1",permalink:"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1",draft:!1,unlisted:!1,tags:[{label:"visibility",permalink:"/tests/docs/tags/visibility"},{label:"listed",permalink:"/tests/docs/tags/listed"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{tags:["visibility","listed"]},sidebar:"sidebar",previous:{title:"Visibility",permalink:"/tests/docs/tests/visibility/"},next:{title:"Some Unlisteds - Listed 1",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}},d={},l=[];function c(t){const s={h1:"h1",p:"p",...(0,r.a)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"some-drafts---listed-1",children:"Some Drafts - Listed 1"}),"\n",(0,i.jsx)(s.p,{children:"Regular doc"})]})}function u(t={}){const{wrapper:s}={...(0,r.a)(),...t.components};return s?(0,i.jsx)(s,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}},71670:(t,s,e)=>{e.d(s,{Z:()=>a,a:()=>o});var i=e(27378);const r={},n=i.createContext(r);function o(t){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof t?t(s):{...s,...t}}),[s,t])}function a(t){let s;return s=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:o(t.components),i.createElement(n.Provider,{value:s},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/75d8497c.9d3da975.js b/assets/js/75d8497c.9d3da975.js new file mode 100644 index 0000000000..1df4ef1384 --- /dev/null +++ b/assets/js/75d8497c.9d3da975.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24358],{49194:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>t,contentTitle:()=>n,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>o});var h=i(24246),a=i(71670);const l={mdx:{format:"md"},date:"2020-03-08T19:00",authors:["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},n="2.0.0-alpha.44",c={permalink:"/changelog/2.0.0-alpha.44",source:"@site/changelog/source/2.0.0-alpha.44.md",title:"2.0.0-alpha.44",description:"New Feature",date:"2020-03-08T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Amila Welihinda",alias:"amilajack",url:"https://github.com/amilajack",imageURL:"https://github.com/amilajack.png",key:"amilajack"},{name:"Paulus Schoutsen",alias:"balloob",url:"https://github.com/balloob",imageURL:"https://github.com/balloob.png",key:"balloob"},{name:"Robert",alias:"deniaz",url:"https://github.com/deniaz",imageURL:"https://github.com/deniaz.png",key:"deniaz"},{name:"Hassan Farid",alias:"hassanfarid",url:"https://github.com/hassanfarid",imageURL:"https://github.com/hassanfarid.png",key:"hassanfarid"},{name:"jartuso",alias:"jartuso",url:"https://github.com/jartuso",imageURL:"https://github.com/jartuso.png",key:"jartuso"},{name:"JavaScript Joe",alias:"jsjoeio",url:"https://github.com/jsjoeio",imageURL:"https://github.com/jsjoeio.png",key:"jsjoeio"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Mohamed Abdel Nasser",alias:"mohamedsgap",url:"https://github.com/mohamedsgap",imageURL:"https://github.com/mohamedsgap.png",key:"mohamedsgap"},{name:"Noah Silvera",alias:"Noah-Silvera",url:"https://github.com/Noah-Silvera",imageURL:"https://github.com/Noah-Silvera.png",key:"Noah-Silvera"},{name:"Linus L\xe5ngberg",alias:"phoqe",url:"https://github.com/phoqe",imageURL:"https://github.com/phoqe.png",key:"phoqe"},{name:"Ram\xf3n Lamana",alias:"rlamana",url:"https://github.com/rlamana",imageURL:"https://github.com/rlamana.png",key:"rlamana"},{name:"Sylvain Pace",alias:"s-pace",url:"https://github.com/s-pace",imageURL:"https://github.com/s-pace.png",key:"s-pace"},{name:"Scott Lee",alias:"scottilee",url:"https://github.com/scottilee",imageURL:"https://github.com/scottilee.png",key:"scottilee"},{name:"Theodore Chu",alias:"TheodoreChu",url:"https://github.com/TheodoreChu",imageURL:"https://github.com/TheodoreChu.png",key:"TheodoreChu"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Zhenchao Cai",alias:"Zhencha0Cai",url:"https://github.com/Zhencha0Cai",imageURL:"https://github.com/Zhencha0Cai.png",key:"Zhencha0Cai"}],frontMatter:{mdx:{format:"md"},date:"2020-03-08T19:00",authors:["amilajack","balloob","deniaz","hassanfarid","jartuso","jsjoeio","lex111","mohamedsgap","Noah-Silvera","phoqe","rlamana","s-pace","scottilee","TheodoreChu","yangshun","Zhencha0Cai"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.48",permalink:"/changelog/2.0.0-alpha.48"},nextItem:{title:"2.0.0-alpha.43",permalink:"/changelog/2.0.0-alpha.43"},listPageLink:"/changelog/page/4"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 16",id:"committers-16",level:2}];function r(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,a.a)(),...e.components};return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2250",children:"#2250"})," feat(v2): add support specify new languages for Prism (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2344",children:"#2344"})," feat(v2): allow specifying custom target for logo link (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2327",children:"#2327"})," feat(v2): add ability to use HTML in footer copyright (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2335",children:"#2335"})," feat(v2): add draft feature to blog posts (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2303",children:"#2303"})," docs(v2): Nav links activeBasePath (",(0,h.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,h.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,h.jsx)(s.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2296",children:"#2296"})," feat(v2): add ExecutionEnvironment API (",(0,h.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2345",children:"#2345"})," fix(v2): force terminate building if client bundle failed (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2310",children:"#2310"})," fix(v2): add @babel/preset-typescript to babel-loader (",(0,h.jsx)(s.a,{href:"https://github.com/deniaz",children:"@deniaz"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2371",children:"#2371"})," fix(v2): remove line break from end of code blocks (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2326",children:"#2326"})," fix(v2): linkify blog posts (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2324",children:"#2324"})," fix(v2): properly set dark mode logo on build-time prerendering (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2325",children:"#2325"})," fix(v2): switch a toggle when system theme changed (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,h.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2334",children:"#2334"})," fix(v2): make proper path to pages in TS (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:["Other\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2316",children:"#2316"})," fix(v2): properly scale logo on IE 11 (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2376",children:"#2376"})," refactor(v2): clean up and improve Algolia styles (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,h.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2372",children:"#2372"})," chore(v2): upgrade Infima and remark-admonitions (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2367",children:"#2367"})," refactor(v2): increase CSS specificity on application container (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,h.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2363",children:"#2363"})," fix(v2): improve stylelint copyright header rule (",(0,h.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,h.jsx)(s.code,{children:"docusaurus"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2342",children:"#2342"})," chore(v2): mark tagline field as optional (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2378",children:"#2378"})," docs(v2): add section for docs-only mode (",(0,h.jsx)(s.a,{href:"https://github.com/phoqe",children:"@phoqe"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2357",children:"#2357"})," docs(v2): fix getPathsToWatch() example syntax in lifecycle APIs (",(0,h.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2351",children:"#2351"})," docs(v2): add examples to plugin usage doc (",(0,h.jsx)(s.a,{href:"https://github.com/Noah-Silvera",children:"@Noah-Silvera"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2343",children:"#2343"})," docs(v2): fix typo in remark-admonitions example (",(0,h.jsx)(s.a,{href:"https://github.com/hassanfarid",children:"@hassanfarid"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2340",children:"#2340"})," docs(v2): mention about disabling Jekyll when using GitHub pages (",(0,h.jsx)(s.a,{href:"https://github.com/amilajack",children:"@amilajack"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2338",children:"#2338"})," docs(v2): guide on upgrading Docusaurus within a project (",(0,h.jsx)(s.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2313",children:"#2313"})," docs(v2): move the quotes to remark admonitions (",(0,h.jsx)(s.a,{href:"https://github.com/Zhencha0Cai",children:"@Zhencha0Cai"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2307",children:"#2307"})," docs(v1): fix Windows instructions for GitHub Pages publishing (",(0,h.jsx)(s.a,{href:"https://github.com/jartuso",children:"@jartuso"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2300",children:"#2300"})," docs(v2): make blog plugin config example valid (",(0,h.jsx)(s.a,{href:"https://github.com/balloob",children:"@balloob"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2289",children:"#2289"})," docs(v2): add instructions on Travis CI deployment (",(0,h.jsx)(s.a,{href:"https://github.com/mohamedsgap",children:"@mohamedsgap"}),")"]}),"\n"]}),"\n",(0,h.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:["Other\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2369",children:"#2369"})," misc: mention about v2 in README file (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2368",children:"#2368"})," misc: add note about edits in versioned docs (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2333",children:"#2333"})," docs: update use of npm/yarn in contributing.md (",(0,h.jsx)(s.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2328",children:"#2328"})," docs(v2): remove unwanted black line from DocSearch showcase image (",(0,h.jsx)(s.a,{href:"https://github.com/s-pace",children:"@s-pace"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2319",children:"#2319"})," docs(v2): showcase user Algolia (",(0,h.jsx)(s.a,{href:"https://github.com/scottilee",children:"@scottilee"}),")"]}),"\n"]}),"\n"]}),"\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:[(0,h.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2322",children:"#2322"})," docs(v2): fix misc styling (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,h.jsx)(s.h2,{id:"committers-16",children:"Committers: 16"}),"\n",(0,h.jsxs)(s.ul,{children:["\n",(0,h.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,h.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Amila Welihinda (",(0,h.jsx)(s.a,{href:"https://github.com/amilajack",children:"@amilajack"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Hassan Farid (",(0,h.jsx)(s.a,{href:"https://github.com/hassanfarid",children:"@hassanfarid"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Joe Previte (",(0,h.jsx)(s.a,{href:"https://github.com/jsjoeio",children:"@jsjoeio"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Linus L\xe5ngberg (",(0,h.jsx)(s.a,{href:"https://github.com/phoqe",children:"@phoqe"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Mohamed Abdel Nasser (",(0,h.jsx)(s.a,{href:"https://github.com/mohamedsgap",children:"@mohamedsgap"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Noah Silvera (",(0,h.jsx)(s.a,{href:"https://github.com/Noah-Silvera",children:"@Noah-Silvera"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Paulus Schoutsen (",(0,h.jsx)(s.a,{href:"https://github.com/balloob",children:"@balloob"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Ram\xf3n Lamana (",(0,h.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Robert (",(0,h.jsx)(s.a,{href:"https://github.com/deniaz",children:"@deniaz"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Scott Lee (",(0,h.jsx)(s.a,{href:"https://github.com/scottilee",children:"@scottilee"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Sylvain Pace (",(0,h.jsx)(s.a,{href:"https://github.com/s-pace",children:"@s-pace"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Theodore Chu (",(0,h.jsx)(s.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Yangshun Tay (",(0,h.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,h.jsxs)(s.li,{children:["Zhenchao Cai (",(0,h.jsx)(s.a,{href:"https://github.com/Zhencha0Cai",children:"@Zhencha0Cai"}),")"]}),"\n",(0,h.jsx)(s.li,{children:(0,h.jsx)(s.a,{href:"https://github.com/jartuso",children:"@jartuso"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,h.jsx)(s,{...e,children:(0,h.jsx)(r,{...e})}):r(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>c,a:()=>n});var h=i(27378);const a={},l=h.createContext(a);function n(e){const s=h.useContext(l);return h.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),h.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/75efc17f.fa8b11a7.js b/assets/js/75efc17f.fa8b11a7.js new file mode 100644 index 0000000000..bd63d15333 --- /dev/null +++ b/assets/js/75efc17f.fa8b11a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[43597],{63843:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var n=a(24246),o=a(71670);const r={mdx:{format:"md"},date:"2020-11-18T19:00"},s="2.0.0-alpha.67",c={permalink:"/changelog/2.0.0-alpha.67",source:"@site/changelog/source/2.0.0-alpha.67.md",title:"2.0.0-alpha.67",description:"Failed release",date:"2020-11-18T19:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2020-11-18T19:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.68",permalink:"/changelog/2.0.0-alpha.68"},nextItem:{title:"2.0.0-alpha.66",permalink:"/changelog/2.0.0-alpha.66"},listPageLink:"/changelog/page/3"},l={authorsImageUrls:[]},i=[];function p(e){return(0,n.jsx)(n.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p()}},71670:(e,t,a)=>{a.d(t,{Z:()=>c,a:()=>s});var n=a(27378);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/76134b9e.69c990e9.js b/assets/js/76134b9e.69c990e9.js new file mode 100644 index 0000000000..88adf9ea2a --- /dev/null +++ b/assets/js/76134b9e.69c990e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[58335],{43056:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>c,toc:()=>a});var s=t(24246),r=t(71670);const o={},i="Beginner's guide",c={id:"beginner's guide",title:"Beginner's guide",description:"#9160",source:"@site/_dogfooding/_docs tests/beginner's guide.mdx",sourceDirName:".",slug:"/beginner's guide",permalink:"/tests/docs/beginner's guide",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Joshua Chen",lastUpdatedAt:168994537e4,frontMatter:{}},u={},a=[];function d(e){const n={a:"a",h1:"h1",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"beginners-guide",children:"Beginner's guide"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9160",children:"#9160"})})]})}function g(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>i});var s=t(27378);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7661071f.7db6ddf9.js b/assets/js/7661071f.7db6ddf9.js deleted file mode 100644 index 1244d14b63..0000000000 --- a/assets/js/7661071f.7db6ddf9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[8737],{4137:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var t=s(4848),n=s(8453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,a={permalink:"/blog/welcome",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2021-08-26-welcome/index.md",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,t.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,t.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,t.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,t.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(3355).A+"",width:"1500",height:"500"})}),"\n",(0,t.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,t.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,n.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},3355:(e,o,s)=>{s.d(o,{A:()=>t});const t=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},8453:(e,o,s)=>{s.d(o,{R:()=>l,x:()=>a});var t=s(6540);const n={},r=t.createContext(n);function l(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/767.3a1996e6.js b/assets/js/767.3a1996e6.js new file mode 100644 index 0000000000..90fbf46193 --- /dev/null +++ b/assets/js/767.3a1996e6.js @@ -0,0 +1,10339 @@ +"use strict"; +exports.id = 767; +exports.ids = [767]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 35767: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +// EXTERNAL MODULE: ../node_modules/d3/src/index.js + 195 modules +var src = __webpack_require__(63294); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(9500); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify))); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/validate.js + + +function validate_validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate_validate); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// EXTERNAL MODULE: external "crypto" +var external_crypto_ = __webpack_require__(6113); +var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// EXTERNAL MODULE: ../node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27693); +// EXTERNAL MODULE: ../node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(7608); +// EXTERNAL MODULE: ../node_modules/dompurify/dist/purify.es.js +var purify_es = __webpack_require__(42605); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/erDiagram-dedf2781.js + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [1, 34], $Vf = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 48, 52], $Vg = [1, 46], $Vh = [30, 31, 49, 50], $Vi = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 52], $Vj = [44, 45, 46, 47, 48], $Vk = [22, 37], $Vl = [1, 66], $Vm = [1, 65], $Vn = [22, 37, 39, 41]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "entityName": 17, "relSpec": 18, "role": 19, "BLOCK_START": 20, "attributes": 21, "BLOCK_STOP": 22, "title": 23, "title_value": 24, "acc_title": 25, "acc_title_value": 26, "acc_descr": 27, "acc_descr_value": 28, "acc_descr_multiline_value": 29, "ALPHANUM": 30, "ENTITY_NAME": 31, "attribute": 32, "attributeType": 33, "attributeName": 34, "attributeKeyTypeList": 35, "attributeComment": 36, "ATTRIBUTE_WORD": 37, "attributeKeyType": 38, "COMMA": 39, "ATTRIBUTE_KEY": 40, "COMMENT": 41, "cardinality": 42, "relType": 43, "ZERO_OR_ONE": 44, "ZERO_OR_MORE": 45, "ONE_OR_MORE": 46, "ONLY_ONE": 47, "MD_PARENT": 48, "NON_IDENTIFYING": 49, "IDENTIFYING": 50, "WORD": 51, "open_directive": 52, "type_directive": 53, "arg_directive": 54, "close_directive": 55, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 20: "BLOCK_START", 22: "BLOCK_STOP", 23: "title", 24: "title_value", 25: "acc_title", 26: "acc_title_value", 27: "acc_descr", 28: "acc_descr_value", 29: "acc_descr_multiline_value", 30: "ALPHANUM", 31: "ENTITY_NAME", 37: "ATTRIBUTE_WORD", 39: "COMMA", 40: "ATTRIBUTE_KEY", 41: "COMMENT", 44: "ZERO_OR_ONE", 45: "ZERO_OR_MORE", 46: "ONE_OR_MORE", 47: "ONLY_ONE", 48: "MD_PARENT", 49: "NON_IDENTIFYING", 50: "IDENTIFYING", 51: "WORD", 52: "open_directive", 53: "type_directive", 54: "arg_directive", 55: "close_directive" }, + productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + break; + case 3: + this.$ = []; + break; + case 4: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 5: + case 6: + this.$ = $$[$0]; + break; + case 7: + case 8: + this.$ = []; + break; + case 12: + yy.addEntity($$[$0 - 4]); + yy.addEntity($$[$0 - 2]); + yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); + break; + case 13: + yy.addEntity($$[$0 - 3]); + yy.addAttributes($$[$0 - 3], $$[$0 - 1]); + break; + case 14: + yy.addEntity($$[$0 - 2]); + break; + case 15: + yy.addEntity($$[$0]); + break; + case 16: + case 17: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 18: + case 19: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 20: + case 44: + this.$ = $$[$0]; + break; + case 21: + case 42: + case 43: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 22: + case 30: + this.$ = [$$[$0]]; + break; + case 23: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 24: + this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; + break; + case 25: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; + break; + case 26: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 27: + this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 28: + case 29: + case 32: + this.$ = $$[$0]; + break; + case 31: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 33: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 34: + this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; + break; + case 35: + this.$ = yy.Cardinality.ZERO_OR_ONE; + break; + case 36: + this.$ = yy.Cardinality.ZERO_OR_MORE; + break; + case 37: + this.$ = yy.Cardinality.ONE_OR_MORE; + break; + case 38: + this.$ = yy.Cardinality.ONLY_ONE; + break; + case 39: + this.$ = yy.Cardinality.MD_PARENT; + break; + case 40: + this.$ = yy.Identification.NON_IDENTIFYING; + break; + case 41: + this.$ = yy.Identification.IDENTIFYING; + break; + case 45: + yy.parseDirective("%%{", "open_directive"); + break; + case 46: + yy.parseDirective($$[$0], "type_directive"); + break; + case 47: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 48: + yy.parseDirective("}%%", "close_directive", "er"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 52: $V1 }, { 13: 8, 53: [1, 9] }, { 53: [2, 45] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 55: $V9 }, o([15, 55], [2, 46]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 52: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }), { 24: [1, 35] }, { 26: [1, 36] }, { 28: [1, 37] }, o($V2, [2, 19]), o($Vf, [2, 20]), o($Vf, [2, 21]), { 11: [1, 38] }, { 16: 39, 54: [1, 40] }, { 11: [2, 48] }, o($V2, [2, 5]), { 17: 41, 30: $V7, 31: $V8 }, { 21: 42, 22: [1, 43], 32: 44, 33: 45, 37: $Vg }, { 43: 47, 49: [1, 48], 50: [1, 49] }, o($Vh, [2, 35]), o($Vh, [2, 36]), o($Vh, [2, 37]), o($Vh, [2, 38]), o($Vh, [2, 39]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vi, [2, 9]), { 14: 50, 55: $V9 }, { 55: [2, 47] }, { 15: [1, 51] }, { 22: [1, 52] }, o($V2, [2, 14]), { 21: 53, 22: [2, 22], 32: 44, 33: 45, 37: $Vg }, { 34: 54, 37: [1, 55] }, { 37: [2, 28] }, { 42: 56, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd, 48: $Ve }, o($Vj, [2, 40]), o($Vj, [2, 41]), { 11: [1, 57] }, { 19: 58, 30: [1, 61], 31: [1, 60], 51: [1, 59] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vk, [2, 24], { 35: 62, 36: 63, 38: 64, 40: $Vl, 41: $Vm }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vi, [2, 10]), o($V2, [2, 12]), o($V2, [2, 42]), o($V2, [2, 43]), o($V2, [2, 44]), o($Vk, [2, 25], { 36: 67, 39: [1, 68], 41: $Vm }), o($Vk, [2, 26]), o($Vn, [2, 30]), o($Vk, [2, 33]), o($Vn, [2, 32]), o($Vk, [2, 27]), { 38: 69, 40: $Vl }, o($Vn, [2, 31])], + defaultActions: { 5: [2, 45], 7: [2, 2], 25: [2, 48], 40: [2, 47], 46: [2, 28], 53: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 25; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 27; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("open_directive"); + return 52; + case 8: + this.begin("type_directive"); + return 53; + case 9: + this.popState(); + this.begin("arg_directive"); + return 15; + case 10: + this.popState(); + this.popState(); + return 55; + case 11: + return 54; + case 12: + return 11; + case 13: + break; + case 14: + return 9; + case 15: + return 31; + case 16: + return 51; + case 17: + return 4; + case 18: + this.begin("block"); + return 20; + case 19: + return 39; + case 20: + break; + case 21: + return 40; + case 22: + return 37; + case 23: + return 37; + case 24: + return 41; + case 25: + break; + case 26: + this.popState(); + return 22; + case 27: + return yy_.yytext[0]; + case 28: + return 44; + case 29: + return 46; + case 30: + return 46; + case 31: + return 46; + case 32: + return 44; + case 33: + return 44; + case 34: + return 45; + case 35: + return 45; + case 36: + return 45; + case 37: + return 45; + case 38: + return 45; + case 39: + return 46; + case 40: + return 45; + case 41: + return 46; + case 42: + return 47; + case 43: + return 47; + case 44: + return 47; + case 45: + return 47; + case 46: + return 44; + case 47: + return 45; + case 48: + return 46; + case 49: + return 48; + case 50: + return 49; + case 51: + return 50; + case 52: + return 50; + case 53: + return 49; + case 54: + return 49; + case 55: + return 49; + case 56: + return 30; + case 57: + return yy_.yytext[0]; + case 58: + return 6; + } + }, + rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\s*u\b)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "open_directive": { "rules": [8], "inclusive": false }, "type_directive": { "rules": [9, 10], "inclusive": false }, "arg_directive": { "rules": [10, 11], "inclusive": false }, "block": { "rules": [19, 20, 21, 22, 23, 24, 25, 26, 27], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const erParser = parser; +let entities = {}; +let relationships = []; +const Cardinality = { + ZERO_OR_ONE: "ZERO_OR_ONE", + ZERO_OR_MORE: "ZERO_OR_MORE", + ONE_OR_MORE: "ONE_OR_MORE", + ONLY_ONE: "ONLY_ONE", + MD_PARENT: "MD_PARENT" +}; +const Identification = { + NON_IDENTIFYING: "NON_IDENTIFYING", + IDENTIFYING: "IDENTIFYING" +}; +const parseDirective = function(statement, context, type) { + mermaid_768dc893.m.parseDirective(this, statement, context, type); +}; +const addEntity = function(name) { + if (entities[name] === void 0) { + entities[name] = { attributes: [] }; + mermaid_768dc893.l.info("Added new entity :", name); + } + return entities[name]; +}; +const getEntities = () => entities; +const addAttributes = function(entityName, attribs) { + let entity = addEntity(entityName); + let i; + for (i = attribs.length - 1; i >= 0; i--) { + entity.attributes.push(attribs[i]); + mermaid_768dc893.l.debug("Added attribute ", attribs[i].attributeName); + } +}; +const addRelationship = function(entA, rolA, entB, rSpec) { + let rel = { + entityA: entA, + roleA: rolA, + entityB: entB, + relSpec: rSpec + }; + relationships.push(rel); + mermaid_768dc893.l.debug("Added new relationship :", rel); +}; +const getRelationships = () => relationships; +const clear = function() { + entities = {}; + relationships = []; + (0,mermaid_768dc893.v)(); +}; +const erDb = { + Cardinality, + Identification, + parseDirective, + getConfig: () => (0,mermaid_768dc893.c)().er, + addEntity, + addAttributes, + getEntities, + addRelationship, + getRelationships, + clear, + setAccTitle: mermaid_768dc893.s, + getAccTitle: mermaid_768dc893.g, + setAccDescription: mermaid_768dc893.b, + getAccDescription: mermaid_768dc893.a, + setDiagramTitle: mermaid_768dc893.r, + getDiagramTitle: mermaid_768dc893.t +}; +const ERMarkers = { + ONLY_ONE_START: "ONLY_ONE_START", + ONLY_ONE_END: "ONLY_ONE_END", + ZERO_OR_ONE_START: "ZERO_OR_ONE_START", + ZERO_OR_ONE_END: "ZERO_OR_ONE_END", + ONE_OR_MORE_START: "ONE_OR_MORE_START", + ONE_OR_MORE_END: "ONE_OR_MORE_END", + ZERO_OR_MORE_START: "ZERO_OR_MORE_START", + ZERO_OR_MORE_END: "ZERO_OR_MORE_END", + MD_PARENT_END: "MD_PARENT_END", + MD_PARENT_START: "MD_PARENT_START" +}; +const insertMarkers = function(elem, conf2) { + let marker; + elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_START).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_END).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); + return; +}; +const erMarkers = { + ERMarkers, + insertMarkers +}; +const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; +let conf = {}; +let entityNameIds = /* @__PURE__ */ new Map(); +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const drawAttributes = (groupNode, entityTextNode, attributes) => { + const heightPadding = conf.entityPadding / 3; + const widthPadding = conf.entityPadding / 3; + const attrFontSize = conf.fontSize * 0.85; + const labelBBox = entityTextNode.node().getBBox(); + const attributeNodes = []; + let hasKeyType = false; + let hasComment = false; + let maxTypeWidth = 0; + let maxNameWidth = 0; + let maxKeyWidth = 0; + let maxCommentWidth = 0; + let cumulativeHeight = labelBBox.height + heightPadding * 2; + let attrNum = 1; + attributes.forEach((item) => { + if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { + hasKeyType = true; + } + if (item.attributeComment !== void 0) { + hasComment = true; + } + }); + attributes.forEach((item) => { + const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; + let nodeHeight = 0; + const attributeType = (0,mermaid_768dc893.x)(item.attributeType); + const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); + const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); + const attributeNode = {}; + attributeNode.tn = typeNode; + attributeNode.nn = nameNode; + const typeBBox = typeNode.node().getBBox(); + const nameBBox = nameNode.node().getBBox(); + maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); + maxNameWidth = Math.max(maxNameWidth, nameBBox.width); + nodeHeight = Math.max(typeBBox.height, nameBBox.height); + if (hasKeyType) { + const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; + const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); + attributeNode.kn = keyTypeNode; + const keyTypeBBox = keyTypeNode.node().getBBox(); + maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); + nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); + } + if (hasComment) { + const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); + attributeNode.cn = commentNode; + const commentNodeBBox = commentNode.node().getBBox(); + maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); + nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); + } + attributeNode.height = nodeHeight; + attributeNodes.push(attributeNode); + cumulativeHeight += nodeHeight + heightPadding * 2; + attrNum += 1; + }); + let widthPaddingFactor = 4; + if (hasKeyType) { + widthPaddingFactor += 2; + } + if (hasComment) { + widthPaddingFactor += 2; + } + const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; + const bBox = { + width: Math.max( + conf.minEntityWidth, + Math.max( + labelBBox.width + conf.entityPadding * 2, + maxWidth + widthPadding * widthPaddingFactor + ) + ), + height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2) + }; + if (attributes.length > 0) { + const spareColumnWidth = Math.max( + 0, + (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) + ); + entityTextNode.attr( + "transform", + "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" + ); + let heightOffset = labelBBox.height + heightPadding * 2; + let attribStyle = "attributeBoxOdd"; + attributeNodes.forEach((attributeNode) => { + const alignY = heightOffset + heightPadding + attributeNode.height / 2; + attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); + const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); + attributeNode.nn.attr( + "transform", + "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" + ); + const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); + if (hasKeyType) { + attributeNode.kn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); + } + if (hasComment) { + attributeNode.cn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + } + heightOffset += attributeNode.height + heightPadding * 2; + attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; + }); + } else { + bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); + entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); + } + return bBox; +}; +const drawEntities = function(svgNode, entities2, graph) { + const keys = Object.keys(entities2); + let firstOne; + keys.forEach(function(entityName) { + const entityId = generateId(entityName, "entity"); + entityNameIds.set(entityName, entityId); + const groupNode = svgNode.append("g").attr("id", entityId); + firstOne = firstOne === void 0 ? entityId : firstOne; + const textId = "text-" + entityId; + const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", conf.fontSize + "px").text(entityName); + const { width: entityWidth, height: entityHeight } = drawAttributes( + groupNode, + textNode, + entities2[entityName].attributes + ); + const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(entityId, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: entityId + }); + }); + return firstOne; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); +}; +const getEdgeName = function(rel) { + return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ""); +}; +const addRelationships = function(relationships2, g) { + relationships2.forEach(function(r) { + g.setEdge( + entityNameIds.get(r.entityA), + entityNameIds.get(r.entityB), + { relationship: r }, + getEdgeName(r) + ); + }); + return relationships2; +}; +let relCnt = 0; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + relCnt++; + const edge = g.edge( + entityNameIds.get(rel.entityA), + entityNameIds.get(rel.entityB), + getEdgeName(rel) + ); + const lineFunction = (0,src/* line */.jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(src/* curveBasis */.$0Z); + const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf.stroke).style("fill", "none"); + if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { + svgPath.attr("stroke-dasharray", "8,8"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (rel.relSpec.cardA) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")"); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_END + ")"); + break; + } + switch (rel.relSpec.cardB) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")" + ); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_START + ")"); + break; + } + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", (0,mermaid_768dc893.c)().fontFamily).style("font-size", conf.fontSize + "px").text(rel.roleA); + const labelBBox = labelNode.node().getBBox(); + svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,mermaid_768dc893.c)().er; + mermaid_768dc893.l.info("Drawing ER diagram"); + const securityLevel = (0,mermaid_768dc893.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = root.select(`[id='${id}']`); + erMarkers.insertMarkers(svg, conf); + let g; + g = new graphlib/* Graph */.k({ + multigraph: true, + directed: true, + compound: false + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); + const relationships2 = addRelationships(diagObj.db.getRelationships(), g); + (0,dagre/* layout */.bK)(g); + adjustEntities(svg, g); + relationships2.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); + }); + const padding = conf.diagramPadding; + mermaid_768dc893.u.insertTitle(svg, "entityTitleText", conf.titleTopMargin, diagObj.db.getDiagramTitle()); + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,mermaid_768dc893.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; +function generateId(str = "", prefix = "") { + const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ""); + return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5( + str, + MERMAID_ERDIAGRAM_UUID + )}`; +} +function strWithHyphen(str = "") { + return str.length > 0 ? `${str}-` : ""; +} +const erRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .entityBox { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${options.attributeBackgroundColorOdd}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxEven { + fill: ${options.attributeBackgroundColorEven}; + stroke: ${options.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${options.tertiaryColor}; + opacity: 0.7; + background-color: ${options.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${options.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + +`; +const erStyles = getStyles; +const diagram = { + parser: erParser, + db: erDb, + renderer: erRenderer, + styles: erStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/76742.003d8ae5.js b/assets/js/76742.003d8ae5.js new file mode 100644 index 0000000000..87029ee9d7 --- /dev/null +++ b/assets/js/76742.003d8ae5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76742],{76742:(e,n,t)=>{t.d(n,{c:()=>sn});var r={};t.r(r),t.d(r,{attentionMarkers:()=>Me,contentInitial:()=>Te,disable:()=>Pe,document:()=>Ce,flow:()=>De,flowInitial:()=>ze,insideSpan:()=>Le,string:()=>Be,text:()=>_e});var i=t(99854);const u={};function o(e,n,t){if(function(e){return Boolean(e&&"object"==typeof e)}(e)){if("value"in e)return"html"!==e.type||t?e.value:"";if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return c(e.children,n,t)}return Array.isArray(e)?c(e,n,t):""}function c(e,n,t){const r=[];let i=-1;for(;++i<e.length;)r[i]=o(e[i],n,t);return r.join("")}function s(e,n,t,r){const i=e.length;let u,o=0;if(n=n<0?-n>i?0:i+n:n>i?i:n,t=t>0?t:0,r.length<1e4)u=Array.from(r),u.unshift(n,t),e.splice(...u);else for(t&&e.splice(n,t);o<r.length;)u=r.slice(o,o+1e4),u.unshift(n,0),e.splice(...u),o+=1e4,n+=1e4}function l(e,n){return e.length>0?(s(e,e.length,0,n),e):n}const a={}.hasOwnProperty;function f(e,n){let t;for(t in n){const r=(a.call(e,t)?e[t]:void 0)||(e[t]={}),i=n[t];let u;if(i)for(u in i){a.call(r,u)||(r[u]=[]);const e=i[u];d(r[u],Array.isArray(e)?e:e?[e]:[])}}}function d(e,n){let t=-1;const r=[];for(;++t<n.length;)("after"===n[t].add?e:r).push(n[t]);s(e,0,0,r)}const h=A(/[A-Za-z]/),p=A(/[\dA-Za-z]/),m=A(/[#-'*+\--9=?A-Z^-~]/);function g(e){return null!==e&&(e<32||127===e)}const x=A(/\d/),k=A(/[\dA-Fa-f]/),y=A(/[!-/:-@[-`{-~]/);function F(e){return null!==e&&e<-2}function b(e){return null!==e&&(e<0||32===e)}function v(e){return-2===e||-1===e||32===e}const S=A(/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/),E=A(/\s/);function A(e){return function(n){return null!==n&&e.test(String.fromCharCode(n))}}function w(e,n,t,r){const i=r?r-1:Number.POSITIVE_INFINITY;let u=0;return function(r){if(v(r))return e.enter(t),o(r);return n(r)};function o(r){return v(r)&&u++<i?(e.consume(r),o):(e.exit(t),n(r))}}const I={tokenize:function(e){const n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),w(e,n,"linePrefix")}),(function(n){return e.enter("paragraph"),r(n)}));let t;return n;function r(n){const r=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=r),t=r,i(n)}function i(n){return null===n?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(n)):F(n)?(e.consume(n),e.exit("chunkText"),r):(e.consume(n),i)}}};const C={tokenize:function(e){const n=this,t=[];let r,i,u,o=0;return c;function c(r){if(o<t.length){const i=t[o];return n.containerState=i[1],e.attempt(i[0].continuation,l,a)(r)}return a(r)}function l(e){if(o++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const t=n.events.length;let i,u=t;for(;u--;)if("exit"===n.events[u][0]&&"chunkFlow"===n.events[u][1].type){i=n.events[u][1].end;break}k(o);let c=t;for(;c<n.events.length;)n.events[c][1].end=Object.assign({},i),c++;return s(n.events,u+1,0,n.events.slice(t)),n.events.length=c,a(e)}return c(e)}function a(i){if(o===t.length){if(!r)return h(i);if(r.currentConstruct&&r.currentConstruct.concrete)return m(i);n.interrupt=Boolean(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(T,f,d)(i)}function f(e){return r&&y(),k(o),h(e)}function d(e){return n.parser.lazy[n.now().line]=o!==t.length,u=n.now().offset,m(e)}function h(t){return n.containerState={},e.attempt(T,p,m)(t)}function p(e){return o++,t.push([n.currentConstruct,n.containerState]),h(e)}function m(t){return null===t?(r&&y(),k(0),void e.consume(t)):(r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{contentType:"flow",previous:i,_tokenizer:r}),g(t))}function g(t){return null===t?(x(e.exit("chunkFlow"),!0),k(0),void e.consume(t)):F(t)?(e.consume(t),x(e.exit("chunkFlow")),o=0,n.interrupt=void 0,c):(e.consume(t),g)}function x(e,t){const c=n.sliceStream(e);if(t&&c.push(null),e.previous=i,i&&(i.next=e),i=e,r.defineSkip(e.start),r.write(c),n.parser.lazy[e.start.line]){let e=r.events.length;for(;e--;)if(r.events[e][1].start.offset<u&&(!r.events[e][1].end||r.events[e][1].end.offset>u))return;const t=n.events.length;let i,c,l=t;for(;l--;)if("exit"===n.events[l][0]&&"chunkFlow"===n.events[l][1].type){if(i){c=n.events[l][1].end;break}i=!0}for(k(o),e=t;e<n.events.length;)n.events[e][1].end=Object.assign({},c),e++;s(n.events,l+1,0,n.events.slice(t)),n.events.length=e}}function k(r){let i=t.length;for(;i-- >r;){const r=t[i];n.containerState=r[1],r[0].exit.call(n,e)}t.length=r}function y(){r.write([null]),i=void 0,r=void 0,n.containerState._closeFlow=void 0}}},T={tokenize:function(e,n,t){return w(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}};const z={tokenize:function(e,n,t){return function(n){return v(n)?w(e,r,"linePrefix")(n):r(n)};function r(e){return null===e||F(e)?n(e):t(e)}},partial:!0};function D(e,n,t,r){const i=e.length;let u,o=0;if(n=n<0?-n>i?0:i+n:n>i?i:n,t=t>0?t:0,r.length<1e4)u=Array.from(r),u.unshift(n,t),e.splice(...u);else for(t&&e.splice(n,t);o<r.length;)u=r.slice(o,o+1e4),u.unshift(n,0),e.splice(...u),o+=1e4,n+=1e4}function B(e){const n={};let t,r,i,u,o,c,s,l=-1;for(;++l<e.length;){for(;l in n;)l=n[l];if(t=e[l],l&&"chunkFlow"===t[1].type&&"listItemPrefix"===e[l-1][1].type&&(c=t[1]._tokenizer.events,i=0,i<c.length&&"lineEndingBlank"===c[i][1].type&&(i+=2),i<c.length&&"content"===c[i][1].type))for(;++i<c.length&&"content"!==c[i][1].type;)"chunkText"===c[i][1].type&&(c[i][1]._isInFirstContentOfListItem=!0,i++);if("enter"===t[0])t[1].contentType&&(Object.assign(n,_(e,l)),l=n[l],s=!0);else if(t[1]._container){for(i=l,r=void 0;i--&&(u=e[i],"lineEnding"===u[1].type||"lineEndingBlank"===u[1].type);)"enter"===u[0]&&(r&&(e[r][1].type="lineEndingBlank"),u[1].type="lineEnding",r=i);r&&(t[1].end=Object.assign({},e[r][1].start),o=e.slice(r,l),o.unshift(t),D(e,r,l-r+1,o))}}return!s}function _(e,n){const t=e[n][1],r=e[n][2];let i=n-1;const u=[],o=t._tokenizer||r.parser[t.contentType](t.start),c=o.events,s=[],l={};let a,f,d=-1,h=t,p=0,m=0;const g=[m];for(;h;){for(;e[++i][1]!==h;);u.push(i),h._tokenizer||(a=r.sliceStream(h),h.next||a.push(null),f&&o.defineSkip(h.start),h._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(a),h._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),f=h,h=h.next}for(h=t;++d<c.length;)"exit"===c[d][0]&&"enter"===c[d-1][0]&&c[d][1].type===c[d-1][1].type&&c[d][1].start.line!==c[d][1].end.line&&(m=d+1,g.push(m),h._tokenizer=void 0,h.previous=void 0,h=h.next);for(o.events=[],h?(h._tokenizer=void 0,h.previous=void 0):g.pop(),d=g.length;d--;){const n=c.slice(g[d],g[d+1]),t=u.pop();s.unshift([t,t+n.length-1]),D(e,t,2,n)}for(d=-1;++d<s.length;)l[p+s[d][0]]=p+s[d][1],p+=s[d][1]-s[d][0]-1;return l}const L={tokenize:function(e,n){let t;return function(n){return e.enter("content"),t=e.enter("chunkContent",{contentType:"content"}),r(n)};function r(n){return null===n?i(n):F(n)?e.check(M,u,i)(n):(e.consume(n),r)}function i(t){return e.exit("chunkContent"),e.exit("content"),n(t)}function u(n){return e.consume(n),e.exit("chunkContent"),t.next=e.enter("chunkContent",{contentType:"content",previous:t}),t=t.next,r}},resolve:function(e){return B(e),e}},M={tokenize:function(e,n,t){const r=this;return function(n){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),w(e,i,"linePrefix")};function i(i){if(null===i||F(i))return t(i);const u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(i):e.interrupt(r.parser.constructs.flow,t,n)(i)}},partial:!0};const P={tokenize:function(e){const n=this,t=e.attempt(z,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}),e.attempt(this.parser.constructs.flowInitial,r,w(e,e.attempt(this.parser.constructs.flow,r,e.attempt(L,r)),"linePrefix")));return t;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n.currentConstruct=void 0,t;e.consume(r)}}};const O={resolveAll:q()},j=R("string"),H=R("text");function R(e){return{tokenize:function(n){const t=this,r=this.parser.constructs[e],i=n.attempt(r,u,o);return u;function u(e){return s(e)?i(e):o(e)}function o(e){if(null!==e)return n.enter("data"),n.consume(e),c;n.consume(e)}function c(e){return s(e)?(n.exit("data"),i(e)):(n.consume(e),c)}function s(e){if(null===e)return!0;const n=r[e];let i=-1;if(n)for(;++i<n.length;){const e=n[i];if(!e.previous||e.previous.call(t,t.previous))return!0}return!1}},resolveAll:q("text"===e?V:void 0)}}function q(e){return function(n,t){let r,i=-1;for(;++i<=n.length;)void 0===r?n[i]&&"data"===n[i][1].type&&(r=i,i++):n[i]&&"data"===n[i][1].type||(i!==r+2&&(n[r][1].end=n[i-1][1].end,n.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(n,t):n}}function V(e,n){let t=0;for(;++t<=e.length;)if((t===e.length||"lineEnding"===e[t][1].type)&&"data"===e[t-1][1].type){const r=e[t-1][1],i=n.sliceStream(r);let u,o=i.length,c=-1,s=0;for(;o--;){const e=i[o];if("string"==typeof e){for(c=e.length;32===e.charCodeAt(c-1);)s++,c--;if(c)break;c=-1}else if(-2===e)u=!0,s++;else if(-1!==e){o++;break}}if(s){const i={type:t===e.length||u||s<2?"lineSuffix":"hardBreakTrailing",start:{line:r.end.line,column:r.end.column-s,offset:r.end.offset-s,_index:r.start._index+o,_bufferIndex:o?c:r.start._bufferIndex+c},end:Object.assign({},r.end)};r.end=Object.assign({},i.start),r.start.offset===r.end.offset?Object.assign(r,i):(e.splice(t,0,["enter",i,n],["exit",i,n]),t+=2)}t++}return e}function Q(e,n,t){const r=[];let i=-1;for(;++i<e.length;){const u=e[i].resolveAll;u&&!r.includes(u)&&(n=u(n,t),r.push(u))}return n}function N(e,n,t){let r=Object.assign(t?Object.assign({},t):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const i={},u=[];let o=[],c=[],a=!0;const f={consume:function(e){F(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,S()):-1!==e&&(r.column++,r.offset++);r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++));d.previous=e,a=!0},enter:function(e,n){const t=n||{};return t.type=e,t.start=g(),d.events.push(["enter",t,d]),c.push(t),t},exit:function(e){const n=c.pop();return n.end=g(),d.events.push(["exit",n,d]),n},attempt:b((function(e,n){v(e,n.from)})),check:b(y),interrupt:b(y,{interrupt:!0})},d={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:m,sliceSerialize:function(e,n){return function(e,n){let t=-1;const r=[];let i;for(;++t<e.length;){const u=e[t];let o;if("string"==typeof u)o=u;else switch(u){case-5:o="\r";break;case-4:o="\n";break;case-3:o="\r\n";break;case-2:o=n?" ":"\t";break;case-1:if(!n&&i)continue;o=" ";break;default:o=String.fromCharCode(u)}i=-2===u,r.push(o)}return r.join("")}(m(e),n)},now:g,defineSkip:function(e){i[e.line]=e.column,S()},write:function(e){if(o=l(o,e),x(),null!==o[o.length-1])return[];return v(n,0),d.events=Q(u,d.events,d),d.events}};let h,p=n.tokenize.call(d,f);return n.resolveAll&&u.push(n),d;function m(e){return function(e,n){const t=n.start._index,r=n.start._bufferIndex,i=n.end._index,u=n.end._bufferIndex;let o;if(t===i)o=[e[t].slice(r,u)];else{if(o=e.slice(t,i),r>-1){const e=o[0];"string"==typeof e?o[0]=e.slice(r):o.shift()}u>0&&o.push(e[i].slice(0,u))}return o}(o,e)}function g(){const{line:e,column:n,offset:t,_index:i,_bufferIndex:u}=r;return{line:e,column:n,offset:t,_index:i,_bufferIndex:u}}function x(){let e;for(;r._index<o.length;){const n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;)k(n.charCodeAt(r._bufferIndex));else k(n)}}function k(e){a=void 0,h=e,p=p(e)}function y(e,n){n.restore()}function b(e,n){return function(t,i,u){let o,s,l,h;return Array.isArray(t)?p(t):"tokenize"in t?p([t]):function(e){return n;function n(n){const t=null!==n&&e[n],r=null!==n&&e.null;return p([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(r)?r:r?[r]:[]])(n)}}(t);function p(e){return o=e,s=0,0===e.length?u:m(e[s])}function m(e){return function(t){h=function(){const e=g(),n=d.previous,t=d.currentConstruct,i=d.events.length,u=Array.from(c);return{restore:o,from:i};function o(){r=e,d.previous=n,d.currentConstruct=t,d.events.length=i,c=u,S()}}(),l=e,e.partial||(d.currentConstruct=e);if(e.name&&d.parser.constructs.disable.null.includes(e.name))return k(t);return e.tokenize.call(n?Object.assign(Object.create(d),n):d,f,x,k)(t)}}function x(n){return a=!0,e(l,h),i}function k(e){return a=!0,h.restore(),++s<o.length?m(o[s]):u}}}function v(e,n){e.resolveAll&&!u.includes(e)&&u.push(e),e.resolve&&s(d.events,n,d.events.length-n,e.resolve(d.events.slice(n),d)),e.resolveTo&&(d.events=e.resolveTo(d.events,d))}function S(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}const U={name:"thematicBreak",tokenize:function(e,n,t){let r,i=0;return function(n){return e.enter("thematicBreak"),function(e){return r=e,u(e)}(n)};function u(u){return u===r?(e.enter("thematicBreakSequence"),o(u)):i>=3&&(null===u||F(u))?(e.exit("thematicBreak"),n(u)):t(u)}function o(n){return n===r?(e.consume(n),i++,o):(e.exit("thematicBreakSequence"),v(n)?w(e,u,"whitespace")(n):u(n))}}};const $={name:"list",tokenize:function(e,n,t){const r=this,i=r.events[r.events.length-1];let u=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(n){const i=r.containerState.type||(42===n||43===n||45===n?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||n===r.containerState.marker:x(n)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===n||45===n?e.check(U,t,s)(n):s(n);if(!r.interrupt||49===n)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(n)}return t(n)};function c(n){return x(n)&&++o<10?(e.consume(n),c):(!r.interrupt||o<2)&&(r.containerState.marker?n===r.containerState.marker:41===n||46===n)?(e.exit("listItemValue"),s(n)):t(n)}function s(n){return e.enter("listItemMarker"),e.consume(n),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||n,e.check(z,r.interrupt?t:l,e.attempt(W,f,a))}function l(e){return r.containerState.initialBlankLine=!0,u++,f(e)}function a(n){return v(n)?(e.enter("listItemPrefixWhitespace"),e.consume(n),e.exit("listItemPrefixWhitespace"),f):t(n)}function f(t){return r.containerState.size=u+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(t)}},continuation:{tokenize:function(e,n,t){const r=this;return r.containerState._closeFlow=void 0,e.check(z,(function(t){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,w(e,n,"listItemIndent",r.containerState.size+1)(t)}),(function(t){if(r.containerState.furtherBlankLines||!v(t))return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(t);return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(Z,n,i)(t)}));function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,w(e,e.attempt($,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)}},W={tokenize:function(e,n,t){const r=this;return w(e,(function(e){const i=r.events[r.events.length-1];return!v(e)&&i&&"listItemPrefixWhitespace"===i[1].type?n(e):t(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)},partial:!0},Z={tokenize:function(e,n,t){const r=this;return w(e,(function(e){const i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?n(e):t(e)}),"listItemIndent",r.containerState.size+1)},partial:!0};const Y={name:"blockQuote",tokenize:function(e,n,t){const r=this;return function(n){if(62===n){const t=r.containerState;return t.open||(e.enter("blockQuote",{_container:!0}),t.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(n),e.exit("blockQuoteMarker"),i}return t(n)};function i(t){return v(t)?(e.enter("blockQuotePrefixWhitespace"),e.consume(t),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(t))}},continuation:{tokenize:function(e,n,t){const r=this;return function(n){if(v(n))return w(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n);return i(n)};function i(r){return e.attempt(Y,n,t)(r)}}},exit:function(e){e.exit("blockQuote")}};function G(e,n,t,r,i,u,o,c,s){const l=s||Number.POSITIVE_INFINITY;let a=0;return function(n){if(60===n)return e.enter(r),e.enter(i),e.enter(u),e.consume(n),e.exit(u),f;if(null===n||32===n||41===n||g(n))return t(n);return e.enter(r),e.enter(o),e.enter(c),e.enter("chunkString",{contentType:"string"}),p(n)};function f(t){return 62===t?(e.enter(u),e.consume(t),e.exit(u),e.exit(i),e.exit(r),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),d(t))}function d(n){return 62===n?(e.exit("chunkString"),e.exit(c),f(n)):null===n||60===n||F(n)?t(n):(e.consume(n),92===n?h:d)}function h(n){return 60===n||62===n||92===n?(e.consume(n),d):d(n)}function p(i){return a||null!==i&&41!==i&&!b(i)?a<l&&40===i?(e.consume(i),a++,p):41===i?(e.consume(i),a--,p):null===i||32===i||40===i||g(i)?t(i):(e.consume(i),92===i?m:p):(e.exit("chunkString"),e.exit(c),e.exit(o),e.exit(r),n(i))}function m(n){return 40===n||41===n||92===n?(e.consume(n),p):p(n)}}function J(e,n,t,r,i,u){const o=this;let c,s=0;return function(n){return e.enter(r),e.enter(i),e.consume(n),e.exit(i),e.enter(u),l};function l(f){return s>999||null===f||91===f||93===f&&!c||94===f&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?t(f):93===f?(e.exit(u),e.enter(i),e.consume(f),e.exit(i),e.exit(r),n):F(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),l):(e.enter("chunkString",{contentType:"string"}),a(f))}function a(n){return null===n||91===n||93===n||F(n)||s++>999?(e.exit("chunkString"),l(n)):(e.consume(n),c||(c=!v(n)),92===n?f:a)}function f(n){return 91===n||92===n||93===n?(e.consume(n),s++,a):a(n)}}function K(e,n,t,r,i,u){let o;return function(n){if(34===n||39===n||40===n)return e.enter(r),e.enter(i),e.consume(n),e.exit(i),o=40===n?41:n,c;return t(n)};function c(t){return t===o?(e.enter(i),e.consume(t),e.exit(i),e.exit(r),n):(e.enter(u),s(t))}function s(n){return n===o?(e.exit(u),c(o)):null===n?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),w(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),l(n))}function l(n){return n===o||null===n||F(n)?(e.exit("chunkString"),s(n)):(e.consume(n),92===n?a:l)}function a(n){return n===o||92===n?(e.consume(n),l):l(n)}}function X(e,n){let t;return function r(i){if(F(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r;if(v(i))return w(e,r,t?"linePrefix":"lineSuffix")(i);return n(i)}}function ee(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ne={name:"definition",tokenize:function(e,n,t){const r=this;let i;return function(n){return e.enter("definition"),function(n){return J.call(r,e,u,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(n)}(n)};function u(n){return i=ee(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===n?(e.enter("definitionMarker"),e.consume(n),e.exit("definitionMarker"),o):t(n)}function o(n){return b(n)?X(e,c)(n):c(n)}function c(n){return G(e,s,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(n)}function s(n){return e.attempt(te,l,l)(n)}function l(n){return v(n)?w(e,a,"whitespace")(n):a(n)}function a(u){return null===u||F(u)?(e.exit("definition"),r.parser.defined.push(i),n(u)):t(u)}}},te={tokenize:function(e,n,t){return function(n){return b(n)?X(e,r)(n):t(n)};function r(n){return K(e,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(n)}function i(n){return v(n)?w(e,u,"whitespace")(n):u(n)}function u(e){return null===e||F(e)?n(e):t(e)}},partial:!0};const re={name:"codeIndented",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("codeIndented"),w(e,i,"linePrefix",5)(n)};function i(e){const n=r.events[r.events.length-1];return n&&"linePrefix"===n[1].type&&n[2].sliceSerialize(n[1],!0).length>=4?u(e):t(e)}function u(n){return null===n?c(n):F(n)?e.attempt(ie,u,c)(n):(e.enter("codeFlowValue"),o(n))}function o(n){return null===n||F(n)?(e.exit("codeFlowValue"),u(n)):(e.consume(n),o)}function c(t){return e.exit("codeIndented"),n(t)}}},ie={tokenize:function(e,n,t){const r=this;return i;function i(n){return r.parser.lazy[r.now().line]?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i):w(e,u,"linePrefix",5)(n)}function u(e){const u=r.events[r.events.length-1];return u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(e):F(e)?i(e):t(e)}},partial:!0};const ue={name:"headingAtx",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("atxHeading"),function(n){return e.enter("atxHeadingSequence"),i(n)}(n)};function i(n){return 35===n&&r++<6?(e.consume(n),i):null===n||b(n)?(e.exit("atxHeadingSequence"),u(n)):t(n)}function u(t){return 35===t?(e.enter("atxHeadingSequence"),o(t)):null===t||F(t)?(e.exit("atxHeading"),n(t)):v(t)?w(e,u,"whitespace")(t):(e.enter("atxHeadingText"),c(t))}function o(n){return 35===n?(e.consume(n),o):(e.exit("atxHeadingSequence"),u(n))}function c(n){return null===n||35===n||b(n)?(e.exit("atxHeadingText"),u(n)):(e.consume(n),c)}},resolve:function(e,n){let t,r,i=e.length-2,u=3;"whitespace"===e[u][1].type&&(u+=2);i-2>u&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(u===i-1||i-4>u&&"whitespace"===e[i-2][1].type)&&(i-=u+1===i?2:4);i>u&&(t={type:"atxHeadingText",start:e[u][1].start,end:e[i][1].end},r={type:"chunkText",start:e[u][1].start,end:e[i][1].end,contentType:"text"},s(e,u,i-u+1,[["enter",t,n],["enter",r,n],["exit",r,n],["exit",t,n]]));return e}};const oe={name:"setextUnderline",tokenize:function(e,n,t){const r=this;let i;return function(n){let o,c=r.events.length;for(;c--;)if("lineEnding"!==r.events[c][1].type&&"linePrefix"!==r.events[c][1].type&&"content"!==r.events[c][1].type){o="paragraph"===r.events[c][1].type;break}if(!r.parser.lazy[r.now().line]&&(r.interrupt||o))return e.enter("setextHeadingLine"),i=n,function(n){return e.enter("setextHeadingLineSequence"),u(n)}(n);return t(n)};function u(n){return n===i?(e.consume(n),u):(e.exit("setextHeadingLineSequence"),v(n)?w(e,o,"lineSuffix")(n):o(n))}function o(r){return null===r||F(r)?(e.exit("setextHeadingLine"),n(r)):t(r)}},resolveTo:function(e,n){let t,r,i,u=e.length;for(;u--;)if("enter"===e[u][0]){if("content"===e[u][1].type){t=u;break}"paragraph"===e[u][1].type&&(r=u)}else"content"===e[u][1].type&&e.splice(u,1),i||"definition"!==e[u][1].type||(i=u);const o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,n]),e.splice(i+1,0,["exit",e[t][1],n]),e[t][1].end=Object.assign({},e[i][1].end)):e[t][1]=o;return e.push(["exit",o,n]),e}};const ce=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],se=["pre","script","style","textarea"],le={name:"htmlFlow",tokenize:function(e,n,t){const r=this;let i,u,o,c,s;return function(n){return function(n){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),l}(n)};function l(c){return 33===c?(e.consume(c),a):47===c?(e.consume(c),u=!0,m):63===c?(e.consume(c),i=3,r.interrupt?n:H):h(c)?(e.consume(c),o=String.fromCharCode(c),g):t(c)}function a(u){return 45===u?(e.consume(u),i=2,f):91===u?(e.consume(u),i=5,c=0,d):h(u)?(e.consume(u),i=4,r.interrupt?n:H):t(u)}function f(i){return 45===i?(e.consume(i),r.interrupt?n:H):t(i)}function d(i){const u="CDATA[";return i===u.charCodeAt(c++)?(e.consume(i),6===c?r.interrupt?n:D:d):t(i)}function m(n){return h(n)?(e.consume(n),o=String.fromCharCode(n),g):t(n)}function g(c){if(null===c||47===c||62===c||b(c)){const s=47===c,l=o.toLowerCase();return s||u||!se.includes(l)?ce.includes(o.toLowerCase())?(i=6,s?(e.consume(c),x):r.interrupt?n(c):D(c)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(c):u?k(c):y(c)):(i=1,r.interrupt?n(c):D(c))}return 45===c||p(c)?(e.consume(c),o+=String.fromCharCode(c),g):t(c)}function x(i){return 62===i?(e.consume(i),r.interrupt?n:D):t(i)}function k(n){return v(n)?(e.consume(n),k):T(n)}function y(n){return 47===n?(e.consume(n),T):58===n||95===n||h(n)?(e.consume(n),S):v(n)?(e.consume(n),y):T(n)}function S(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),S):E(n)}function E(n){return 61===n?(e.consume(n),A):v(n)?(e.consume(n),E):y(n)}function A(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),s=n,w):v(n)?(e.consume(n),A):I(n)}function w(n){return n===s?(e.consume(n),s=null,C):null===n||F(n)?t(n):(e.consume(n),w)}function I(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||b(n)?E(n):(e.consume(n),I)}function C(e){return 47===e||62===e||v(e)?y(e):t(e)}function T(n){return 62===n?(e.consume(n),z):t(n)}function z(n){return null===n||F(n)?D(n):v(n)?(e.consume(n),z):t(n)}function D(n){return 45===n&&2===i?(e.consume(n),M):60===n&&1===i?(e.consume(n),P):62===n&&4===i?(e.consume(n),R):63===n&&3===i?(e.consume(n),H):93===n&&5===i?(e.consume(n),j):!F(n)||6!==i&&7!==i?null===n||F(n)?(e.exit("htmlFlowData"),B(n)):(e.consume(n),D):(e.exit("htmlFlowData"),e.check(ae,q,B)(n))}function B(n){return e.check(fe,_,q)(n)}function _(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),L}function L(n){return null===n||F(n)?B(n):(e.enter("htmlFlowData"),D(n))}function M(n){return 45===n?(e.consume(n),H):D(n)}function P(n){return 47===n?(e.consume(n),o="",O):D(n)}function O(n){if(62===n){const t=o.toLowerCase();return se.includes(t)?(e.consume(n),R):D(n)}return h(n)&&o.length<8?(e.consume(n),o+=String.fromCharCode(n),O):D(n)}function j(n){return 93===n?(e.consume(n),H):D(n)}function H(n){return 62===n?(e.consume(n),R):45===n&&2===i?(e.consume(n),H):D(n)}function R(n){return null===n||F(n)?(e.exit("htmlFlowData"),q(n)):(e.consume(n),R)}function q(t){return e.exit("htmlFlow"),n(t)}},resolveTo:function(e){let n=e.length;for(;n--&&("enter"!==e[n][0]||"htmlFlow"!==e[n][1].type););n>1&&"linePrefix"===e[n-2][1].type&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2));return e},concrete:!0},ae={tokenize:function(e,n,t){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(z,n,t)}},partial:!0},fe={tokenize:function(e,n,t){const r=this;return function(n){if(F(n))return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i;return t(n)};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0};const de={tokenize:function(e,n,t){const r=this;return function(n){if(null===n)return t(n);return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0},he={name:"codeFenced",tokenize:function(e,n,t){const r=this,i={tokenize:function(e,n,t){let i=0;return o;function o(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),s}function s(n){return e.enter("codeFencedFence"),v(n)?w(e,l,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):l(n)}function l(n){return n===u?(e.enter("codeFencedFenceSequence"),a(n)):t(n)}function a(n){return n===u?(i++,e.consume(n),a):i>=c?(e.exit("codeFencedFenceSequence"),v(n)?w(e,f,"whitespace")(n):f(n)):t(n)}function f(r){return null===r||F(r)?(e.exit("codeFencedFence"),n(r)):t(r)}},partial:!0};let u,o=0,c=0;return function(n){return function(n){const t=r.events[r.events.length-1];return o=t&&"linePrefix"===t[1].type?t[2].sliceSerialize(t[1],!0).length:0,u=n,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(n)}(n)};function s(n){return n===u?(c++,e.consume(n),s):c<3?t(n):(e.exit("codeFencedFenceSequence"),v(n)?w(e,l,"whitespace")(n):l(n))}function l(t){return null===t||F(t)?(e.exit("codeFencedFence"),r.interrupt?n(t):e.check(de,h,k)(t)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),a(t))}function a(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(n)):v(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),w(e,f,"whitespace")(n)):96===n&&n===u?t(n):(e.consume(n),a)}function f(n){return null===n||F(n)?l(n):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),d(n))}function d(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(n)):96===n&&n===u?t(n):(e.consume(n),d)}function h(n){return e.attempt(i,k,p)(n)}function p(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),m}function m(n){return o>0&&v(n)?w(e,g,"linePrefix",o+1)(n):g(n)}function g(n){return null===n||F(n)?e.check(de,h,k)(n):(e.enter("codeFlowValue"),x(n))}function x(n){return null===n||F(n)?(e.exit("codeFlowValue"),g(n)):(e.consume(n),x)}function k(t){return e.exit("codeFenced"),n(t)}},concrete:!0};const pe=document.createElement("i");function me(e){const n="&"+e+";";pe.innerHTML=n;const t=pe.textContent;return(59!==t.charCodeAt(t.length-1)||"semi"===e)&&(t!==n&&t)}const ge={name:"characterReference",tokenize:function(e,n,t){const r=this;let i,u,o=0;return function(n){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(n),e.exit("characterReferenceMarker"),c};function c(n){return 35===n?(e.enter("characterReferenceMarkerNumeric"),e.consume(n),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),i=31,u=p,l(n))}function s(n){return 88===n||120===n?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(n),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,u=k,l):(e.enter("characterReferenceValue"),i=7,u=x,l(n))}function l(c){if(59===c&&o){const i=e.exit("characterReferenceValue");return u!==p||me(r.sliceSerialize(i))?(e.enter("characterReferenceMarker"),e.consume(c),e.exit("characterReferenceMarker"),e.exit("characterReference"),n):t(c)}return u(c)&&o++<i?(e.consume(c),l):t(c)}}};const xe={name:"characterEscape",tokenize:function(e,n,t){return function(n){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(n),e.exit("escapeMarker"),r};function r(r){return y(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):t(r)}}};const ke={name:"lineEnding",tokenize:function(e,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),w(e,n,"linePrefix")}}};const ye={name:"labelEnd",tokenize:function(e,n,t){const r=this;let i,u,o=r.events.length;for(;o--;)if(("labelImage"===r.events[o][1].type||"labelLink"===r.events[o][1].type)&&!r.events[o][1]._balanced){i=r.events[o][1];break}return function(n){if(!i)return t(n);if(i._inactive)return a(n);return u=r.parser.defined.includes(ee(r.sliceSerialize({start:i.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelEnd"),c};function c(n){return 40===n?e.attempt(Fe,l,u?l:a)(n):91===n?e.attempt(be,l,u?s:a)(n):u?l(n):a(n)}function s(n){return e.attempt(ve,l,a)(n)}function l(e){return n(e)}function a(e){return i._balanced=!0,t(e)}},resolveTo:function(e,n){let t,r,i,u,o=e.length,c=0;for(;o--;)if(t=e[o][1],r){if("link"===t.type||"labelLink"===t.type&&t._inactive)break;"enter"===e[o][0]&&"labelLink"===t.type&&(t._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===t.type||"labelLink"===t.type)&&!t._balanced&&(r=o,"labelLink"!==t.type)){c=2;break}}else"labelEnd"===t.type&&(i=o);const a={type:"labelLink"===e[r][1].type?"link":"image",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)},f={type:"label",start:Object.assign({},e[r][1].start),end:Object.assign({},e[i][1].end)},d={type:"labelText",start:Object.assign({},e[r+c+2][1].end),end:Object.assign({},e[i-2][1].start)};return u=[["enter",a,n],["enter",f,n]],u=l(u,e.slice(r+1,r+c+3)),u=l(u,[["enter",d,n]]),u=l(u,Q(n.parser.constructs.insideSpan.null,e.slice(r+c+4,i-3),n)),u=l(u,[["exit",d,n],e[i-2],e[i-1],["exit",f,n]]),u=l(u,e.slice(i+1)),u=l(u,[["exit",a,n]]),s(e,r,e.length,u),e},resolveAll:function(e){let n=-1;for(;++n<e.length;){const t=e[n][1];"labelImage"!==t.type&&"labelLink"!==t.type&&"labelEnd"!==t.type||(e.splice(n+1,"labelImage"===t.type?4:2),t.type="data",n++)}return e}},Fe={tokenize:function(e,n,t){return function(n){return e.enter("resource"),e.enter("resourceMarker"),e.consume(n),e.exit("resourceMarker"),r};function r(n){return b(n)?X(e,i)(n):i(n)}function i(n){return 41===n?l(n):G(e,u,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(n)}function u(n){return b(n)?X(e,c)(n):l(n)}function o(e){return t(e)}function c(n){return 34===n||39===n||40===n?K(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(n):l(n)}function s(n){return b(n)?X(e,l)(n):l(n)}function l(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),n):t(r)}}},be={tokenize:function(e,n,t){const r=this;return function(n){return J.call(r,e,i,u,"reference","referenceMarker","referenceString")(n)};function i(e){return r.parser.defined.includes(ee(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(e):t(e)}function u(e){return t(e)}}},ve={tokenize:function(e,n,t){return function(n){return e.enter("reference"),e.enter("referenceMarker"),e.consume(n),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),n):t(r)}}};function Se(e){return null===e||b(e)||E(e)?1:S(e)?2:void 0}const Ee={name:"attention",tokenize:function(e,n){const t=this.parser.constructs.attentionMarkers.null,r=this.previous,i=Se(r);let u;return function(n){return u=n,e.enter("attentionSequence"),o(n)};function o(c){if(c===u)return e.consume(c),o;const s=e.exit("attentionSequence"),l=Se(c),a=!l||2===l&&i||t.includes(c),f=!i||2===i&&l||t.includes(r);return s._open=Boolean(42===u?a:a&&(i||!f)),s._close=Boolean(42===u?f:f&&(l||!a)),n(c)}},resolveAll:function(e,n){let t,r,i,u,o,c,a,f,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close)for(t=d;t--;)if("exit"===e[t][0]&&"attentionSequence"===e[t][1].type&&e[t][1]._open&&n.sliceSerialize(e[t][1]).charCodeAt(0)===n.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[t][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[t][1].end.offset-e[t][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;c=e[t][1].end.offset-e[t][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;const h=Object.assign({},e[t][1].end),p=Object.assign({},e[d][1].start);Ae(h,-c),Ae(p,c),u={type:c>1?"strongSequence":"emphasisSequence",start:h,end:Object.assign({},e[t][1].end)},o={type:c>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[d][1].start),end:p},i={type:c>1?"strongText":"emphasisText",start:Object.assign({},e[t][1].end),end:Object.assign({},e[d][1].start)},r={type:c>1?"strong":"emphasis",start:Object.assign({},u.start),end:Object.assign({},o.end)},e[t][1].end=Object.assign({},u.start),e[d][1].start=Object.assign({},o.end),a=[],e[t][1].end.offset-e[t][1].start.offset&&(a=l(a,[["enter",e[t][1],n],["exit",e[t][1],n]])),a=l(a,[["enter",r,n],["enter",u,n],["exit",u,n],["enter",i,n]]),a=l(a,Q(n.parser.constructs.insideSpan.null,e.slice(t+1,d),n)),a=l(a,[["exit",i,n],["enter",o,n],["exit",o,n],["exit",r,n]]),e[d][1].end.offset-e[d][1].start.offset?(f=2,a=l(a,[["enter",e[d][1],n],["exit",e[d][1],n]])):f=0,s(e,t-1,d-t+3,a),d=t+a.length-f-2;break}d=-1;for(;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e}};function Ae(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const we={name:"htmlText",tokenize:function(e,n,t){const r=this;let i,u,o;return function(n){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(n),c};function c(n){return 33===n?(e.consume(n),s):47===n?(e.consume(n),A):63===n?(e.consume(n),S):h(n)?(e.consume(n),T):t(n)}function s(n){return 45===n?(e.consume(n),l):91===n?(e.consume(n),u=0,m):h(n)?(e.consume(n),y):t(n)}function l(n){return 45===n?(e.consume(n),d):t(n)}function a(n){return null===n?t(n):45===n?(e.consume(n),f):F(n)?(o=a,j(n)):(e.consume(n),a)}function f(n){return 45===n?(e.consume(n),d):a(n)}function d(e){return 62===e?O(e):45===e?f(e):a(e)}function m(n){const r="CDATA[";return n===r.charCodeAt(u++)?(e.consume(n),6===u?g:m):t(n)}function g(n){return null===n?t(n):93===n?(e.consume(n),x):F(n)?(o=g,j(n)):(e.consume(n),g)}function x(n){return 93===n?(e.consume(n),k):g(n)}function k(n){return 62===n?O(n):93===n?(e.consume(n),k):g(n)}function y(n){return null===n||62===n?O(n):F(n)?(o=y,j(n)):(e.consume(n),y)}function S(n){return null===n?t(n):63===n?(e.consume(n),E):F(n)?(o=S,j(n)):(e.consume(n),S)}function E(e){return 62===e?O(e):S(e)}function A(n){return h(n)?(e.consume(n),I):t(n)}function I(n){return 45===n||p(n)?(e.consume(n),I):C(n)}function C(n){return F(n)?(o=C,j(n)):v(n)?(e.consume(n),C):O(n)}function T(n){return 45===n||p(n)?(e.consume(n),T):47===n||62===n||b(n)?z(n):t(n)}function z(n){return 47===n?(e.consume(n),O):58===n||95===n||h(n)?(e.consume(n),D):F(n)?(o=z,j(n)):v(n)?(e.consume(n),z):O(n)}function D(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),D):B(n)}function B(n){return 61===n?(e.consume(n),_):F(n)?(o=B,j(n)):v(n)?(e.consume(n),B):z(n)}function _(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),i=n,L):F(n)?(o=_,j(n)):v(n)?(e.consume(n),_):(e.consume(n),M)}function L(n){return n===i?(e.consume(n),i=void 0,P):null===n?t(n):F(n)?(o=L,j(n)):(e.consume(n),L)}function M(n){return null===n||34===n||39===n||60===n||61===n||96===n?t(n):47===n||62===n||b(n)?z(n):(e.consume(n),M)}function P(e){return 47===e||62===e||b(e)?z(e):t(e)}function O(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),n):t(r)}function j(n){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),H}function H(n){return v(n)?w(e,R,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):R(n)}function R(n){return e.enter("htmlTextData"),o(n)}}};const Ie={name:"codeText",tokenize:function(e,n,t){let r,i,u=0;return function(n){return e.enter("codeText"),e.enter("codeTextSequence"),o(n)};function o(n){return 96===n?(e.consume(n),u++,o):(e.exit("codeTextSequence"),c(n))}function c(n){return null===n?t(n):32===n?(e.enter("space"),e.consume(n),e.exit("space"),c):96===n?(i=e.enter("codeTextSequence"),r=0,l(n)):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),c):(e.enter("codeTextData"),s(n))}function s(n){return null===n||32===n||96===n||F(n)?(e.exit("codeTextData"),c(n)):(e.consume(n),s)}function l(t){return 96===t?(e.consume(t),r++,l):r===u?(e.exit("codeTextSequence"),e.exit("codeText"),n(t)):(i.type="codeTextData",s(t))}},resolve:function(e){let n,t,r=e.length-4,i=3;if(!("lineEnding"!==e[i][1].type&&"space"!==e[i][1].type||"lineEnding"!==e[r][1].type&&"space"!==e[r][1].type))for(n=i;++n<r;)if("codeTextData"===e[n][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}n=i-1,r++;for(;++n<=r;)void 0===t?n!==r&&"lineEnding"!==e[n][1].type&&(t=n):n!==r&&"lineEnding"!==e[n][1].type||(e[t][1].type="codeTextData",n!==t+2&&(e[t][1].end=e[n-1][1].end,e.splice(t+2,n-t-2),r-=n-t-2,n=t+2),t=void 0);return e},previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type}};const Ce={42:$,43:$,45:$,48:$,49:$,50:$,51:$,52:$,53:$,54:$,55:$,56:$,57:$,62:Y},Te={91:ne},ze={[-2]:re,[-1]:re,32:re},De={35:ue,42:U,45:[oe,U],60:le,61:oe,95:U,96:he,126:he},Be={38:ge,92:xe},_e={[-5]:ke,[-4]:ke,[-3]:ke,33:{name:"labelStartImage",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(n),e.exit("labelImageMarker"),i};function i(n){return 91===n?(e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelImage"),u):t(n)}function u(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ye.resolveAll},38:ge,42:Ee,60:[{name:"autolink",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(n),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(n){return h(n)?(e.consume(n),u):s(n)}function u(e){return 43===e||45===e||46===e||p(e)?(r=1,o(e)):s(e)}function o(n){return 58===n?(e.consume(n),r=0,c):(43===n||45===n||46===n||p(n))&&r++<32?(e.consume(n),o):(r=0,s(n))}function c(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),n):null===r||32===r||60===r||g(r)?t(r):(e.consume(r),c)}function s(n){return 64===n?(e.consume(n),l):m(n)?(e.consume(n),s):t(n)}function l(e){return p(e)?a(e):t(e)}function a(t){return 46===t?(e.consume(t),r=0,l):62===t?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.exit("autolink"),n):f(t)}function f(n){if((45===n||p(n))&&r++<63){const t=45===n?f:a;return e.consume(n),t}return t(n)}}},we],91:{name:"labelStartLink",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ye.resolveAll},92:[{name:"hardBreakEscape",tokenize:function(e,n,t){return function(n){return e.enter("hardBreakEscape"),e.consume(n),r};function r(r){return F(r)?(e.exit("hardBreakEscape"),n(r)):t(r)}}},xe],93:ye,95:Ee,96:Ie},Le={null:[Ee,O]},Me={null:[42,95]},Pe={null:[]};function Oe(e){const n=function(e){const n={};let t=-1;for(;++t<e.length;)f(n,e[t]);return n}([r,...(e||{}).extensions||[]]),t={defined:[],lazy:{},constructs:n,content:i(I),document:i(C),flow:i(P),string:i(j),text:i(H)};return t;function i(e){return function(n){return N(t,e,n)}}}const je=/[\0\t\n\r]/g;function He(e,n){const t=Number.parseInt(e,n);return t<9||11===t||t>13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||65535==(65535&t)||65534==(65535&t)||t>1114111?"\ufffd":String.fromCharCode(t)}const Re=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function qe(e,n,t){if(n)return n;if(35===t.charCodeAt(0)){const e=t.charCodeAt(1),n=120===e||88===e;return He(t.slice(n?2:1),n?16:10)}return me(t)||e}function Ve(e){return e&&"object"==typeof e?"position"in e||"type"in e?Ne(e.position):"start"in e||"end"in e?Ne(e):"line"in e||"column"in e?Qe(e):"":""}function Qe(e){return Ue(e&&e.line)+":"+Ue(e&&e.column)}function Ne(e){return Qe(e&&e.start)+"-"+Qe(e&&e.end)}function Ue(e){return e&&"number"==typeof e?e:1}const $e={}.hasOwnProperty,We=function(e,n,t){return"string"!=typeof n&&(t=n,n=void 0),function(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:l(ue),autolinkProtocol:T,autolinkEmail:T,atxHeading:l(ne),blockQuote:l(Y),characterEscape:T,characterReference:T,codeFenced:l(G),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:l(G,a),codeText:l(J,a),codeTextData:T,data:T,codeFlowValue:T,definition:l(K),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:l(X),hardBreakEscape:l(te),hardBreakTrailing:l(te),htmlFlow:l(re,a),htmlFlowData:T,htmlText:l(re,a),htmlTextData:T,image:l(ie),label:a,link:l(ue),listItem:l(ce),listItemValue:g,listOrdered:l(oe,m),listUnordered:l(oe),paragraph:l(se),reference:Q,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:l(ne),strong:l(le),thematicBreak:l(fe)},exit:{atxHeading:d(),atxHeadingSequence:A,autolink:d(),autolinkEmail:Z,autolinkProtocol:W,blockQuote:d(),characterEscapeValue:z,characterReferenceMarkerHexadecimal:U,characterReferenceMarkerNumeric:U,characterReferenceValue:$,codeFenced:d(F),codeFencedFence:y,codeFencedFenceInfo:x,codeFencedFenceMeta:k,codeFlowValue:z,codeIndented:d(b),codeText:d(M),codeTextData:z,data:z,definition:d(),definitionDestinationString:E,definitionLabelString:v,definitionTitleString:S,emphasis:d(),hardBreakEscape:d(B),hardBreakTrailing:d(B),htmlFlow:d(_),htmlFlowData:z,htmlText:d(L),htmlTextData:z,image:d(O),label:H,labelText:j,lineEnding:D,link:d(P),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:N,resourceDestinationString:R,resourceTitleString:q,resource:V,setextHeading:d(C),setextHeadingLineSequence:I,setextHeadingText:w,strong:d(),thematicBreak:d()}};Ye(n,(e||{}).mdastExtensions||[]);const t={};return r;function r(e){let t={type:"root",children:[]};const r={stack:[t],tokenStack:[],config:n,enter:f,exit:h,buffer:a,resume:p,setData:c,getData:s},u=[];let o=-1;for(;++o<e.length;)if("listOrdered"===e[o][1].type||"listUnordered"===e[o][1].type)if("enter"===e[o][0])u.push(o);else{o=i(e,u.pop(),o)}for(o=-1;++o<e.length;){const t=n[e[o][0]];$e.call(t,e[o][1].type)&&t[e[o][1].type].call(Object.assign({sliceSerialize:e[o][2].sliceSerialize},r),e[o][1])}if(r.tokenStack.length>0){const e=r.tokenStack[r.tokenStack.length-1];(e[1]||Je).call(r,void 0,e[0])}for(t.position={start:Ze(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:Ze(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},o=-1;++o<n.transforms.length;)t=n.transforms[o](t)||t;return t}function i(e,n,t){let r,i,u,o,c=n-1,s=-1,l=!1;for(;++c<=t;){const n=e[c];if("listUnordered"===n[1].type||"listOrdered"===n[1].type||"blockQuote"===n[1].type?("enter"===n[0]?s++:s--,o=void 0):"lineEndingBlank"===n[1].type?"enter"===n[0]&&(!r||o||s||u||(u=c),o=void 0):"linePrefix"===n[1].type||"listItemValue"===n[1].type||"listItemMarker"===n[1].type||"listItemPrefix"===n[1].type||"listItemPrefixWhitespace"===n[1].type||(o=void 0),!s&&"enter"===n[0]&&"listItemPrefix"===n[1].type||-1===s&&"exit"===n[0]&&("listUnordered"===n[1].type||"listOrdered"===n[1].type)){if(r){let o=c;for(i=void 0;o--;){const n=e[o];if("lineEnding"===n[1].type||"lineEndingBlank"===n[1].type){if("exit"===n[0])continue;i&&(e[i][1].type="lineEndingBlank",l=!0),n[1].type="lineEnding",i=o}else if("linePrefix"!==n[1].type&&"blockQuotePrefix"!==n[1].type&&"blockQuotePrefixWhitespace"!==n[1].type&&"blockQuoteMarker"!==n[1].type&&"listItemIndent"!==n[1].type)break}u&&(!i||u<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:n[1].end),e.splice(i||c,0,["exit",r,n[2]]),c++,t++}"listItemPrefix"===n[1].type&&(r={type:"listItem",_spread:!1,start:Object.assign({},n[1].start),end:void 0},e.splice(c,0,["enter",r,n[2]]),c++,t++,u=void 0,o=!0)}}return e[n][1]._spread=l,t}function c(e,n){t[e]=n}function s(e){return t[e]}function l(e,n){return t;function t(t){f.call(this,e(t),t),n&&n.call(this,t)}}function a(){this.stack.push({type:"fragment",children:[]})}function f(e,n,t){return this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([n,t]),e.position={start:Ze(n.start)},e}function d(e){return n;function n(n){e&&e.call(this,n),h.call(this,n)}}function h(e,n){const t=this.stack.pop(),r=this.tokenStack.pop();if(!r)throw new Error("Cannot close `"+e.type+"` ("+Ve({start:e.start,end:e.end})+"): it\u2019s not open");if(r[0].type!==e.type)if(n)n.call(this,e,r[0]);else{(r[1]||Je).call(this,e,r[0])}return t.position.end=Ze(e.end),t}function p(){return function(e,n){const t=n||u;return o(e,"boolean"!=typeof t.includeImageAlt||t.includeImageAlt,"boolean"!=typeof t.includeHtml||t.includeHtml)}(this.stack.pop())}function m(){c("expectingFirstListItemValue",!0)}function g(e){if(s("expectingFirstListItemValue")){this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),c("expectingFirstListItemValue")}}function x(){const e=this.resume();this.stack[this.stack.length-1].lang=e}function k(){const e=this.resume();this.stack[this.stack.length-1].meta=e}function y(){s("flowCodeInside")||(this.buffer(),c("flowCodeInside",!0))}function F(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),c("flowCodeInside")}function b(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}function v(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=ee(this.sliceSerialize(e)).toLowerCase()}function S(){const e=this.resume();this.stack[this.stack.length-1].title=e}function E(){const e=this.resume();this.stack[this.stack.length-1].url=e}function A(e){const n=this.stack[this.stack.length-1];if(!n.depth){const t=this.sliceSerialize(e).length;n.depth=t}}function w(){c("setextHeadingSlurpLineEnding",!0)}function I(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).charCodeAt(0)?1:2}function C(){c("setextHeadingSlurpLineEnding")}function T(e){const n=this.stack[this.stack.length-1];let t=n.children[n.children.length-1];t&&"text"===t.type||(t=ae(),t.position={start:Ze(e.start)},n.children.push(t)),this.stack.push(t)}function z(e){const n=this.stack.pop();n.value+=this.sliceSerialize(e),n.position.end=Ze(e.end)}function D(e){const t=this.stack[this.stack.length-1];if(s("atHardBreak")){return t.children[t.children.length-1].position.end=Ze(e.end),void c("atHardBreak")}!s("setextHeadingSlurpLineEnding")&&n.canContainEols.includes(t.type)&&(T.call(this,e),z.call(this,e))}function B(){c("atHardBreak",!0)}function _(){const e=this.resume();this.stack[this.stack.length-1].value=e}function L(){const e=this.resume();this.stack[this.stack.length-1].value=e}function M(){const e=this.resume();this.stack[this.stack.length-1].value=e}function P(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function O(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function j(e){const n=this.sliceSerialize(e),t=this.stack[this.stack.length-2];t.label=function(e){return e.replace(Re,qe)}(n),t.identifier=ee(n).toLowerCase()}function H(){const e=this.stack[this.stack.length-1],n=this.resume(),t=this.stack[this.stack.length-1];if(c("inReference",!0),"link"===t.type){const n=e.children;t.children=n}else t.alt=n}function R(){const e=this.resume();this.stack[this.stack.length-1].url=e}function q(){const e=this.resume();this.stack[this.stack.length-1].title=e}function V(){c("inReference")}function Q(){c("referenceType","collapsed")}function N(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=ee(this.sliceSerialize(e)).toLowerCase(),c("referenceType","full")}function U(e){c("characterReferenceType",e.type)}function $(e){const n=this.sliceSerialize(e),t=s("characterReferenceType");let r;if(t)r=He(n,"characterReferenceMarkerNumeric"===t?10:16),c("characterReferenceType");else{r=me(n)}const i=this.stack.pop();i.value+=r,i.position.end=Ze(e.end)}function W(e){z.call(this,e);this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function Z(e){z.call(this,e);this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function Y(){return{type:"blockquote",children:[]}}function G(){return{type:"code",lang:null,meta:null,value:""}}function J(){return{type:"inlineCode",value:""}}function K(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function X(){return{type:"emphasis",children:[]}}function ne(){return{type:"heading",depth:void 0,children:[]}}function te(){return{type:"break"}}function re(){return{type:"html",value:""}}function ie(){return{type:"image",title:null,url:"",alt:null}}function ue(){return{type:"link",title:null,url:"",children:[]}}function oe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function ce(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function se(){return{type:"paragraph",children:[]}}function le(){return{type:"strong",children:[]}}function ae(){return{type:"text",value:""}}function fe(){return{type:"thematicBreak"}}}(t)(function(e){for(;!B(e););return e}(Oe(t).document().write(function(){let e,n=1,t="",r=!0;return function(i,u,o){const c=[];let s,l,a,f,d;for(i=t+i.toString(u),a=0,t="",r&&(65279===i.charCodeAt(0)&&a++,r=void 0);a<i.length;){if(je.lastIndex=a,s=je.exec(i),f=s&&void 0!==s.index?s.index:i.length,d=i.charCodeAt(f),!s){t=i.slice(a);break}if(10===d&&a===f&&e)c.push(-3),e=void 0;else switch(e&&(c.push(-5),e=void 0),a<f&&(c.push(i.slice(a,f)),n+=f-a),d){case 0:c.push(65533),n++;break;case 9:for(l=4*Math.ceil(n/4),c.push(-2);n++<l;)c.push(-1);break;case 10:c.push(-4),n=1;break;default:e=!0,n=1}a=f+1}return o&&(e&&c.push(-5),t&&c.push(t),c.push(null)),c}}()(e,n,!0))))};function Ze(e){return{line:e.line,column:e.column,offset:e.offset}}function Ye(e,n){let t=-1;for(;++t<n.length;){const r=n[t];Array.isArray(r)?Ye(e,r):Ge(e,r)}}function Ge(e,n){let t;for(t in n)if($e.call(n,t))if("canContainEols"===t){const r=n[t];r&&e[t].push(...r)}else if("transforms"===t){const r=n[t];r&&e[t].push(...r)}else if("enter"===t||"exit"===t){const r=n[t];r&&Object.assign(e[t],r)}}function Je(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+Ve({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+Ve({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+Ve({start:n.start,end:n.end})+") is still open")}var Ke=t(11464);function Xe(e){const n=function(e){const n=e.replace(/\n{2,}/g,"\n");return(0,Ke.Z)(n)}(e),{children:t}=We(n),r=[[]];let i=0;function u(e,n="normal"){if("text"===e.type){e.value.split("\n").forEach(((e,t)=>{0!==t&&(i++,r.push([])),e.split(" ").forEach((e=>{e&&r[i].push({content:e,type:n})}))}))}else"strong"!==e.type&&"emphasis"!==e.type||e.children.forEach((n=>{u(n,e.type)}))}return t.forEach((e=>{"paragraph"===e.type&&e.children.forEach((e=>{u(e)}))})),r}function en(e,n){var t;return nn(e,[],(t=n.content,Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map((e=>e.segment)):[...t]),n.type)}function nn(e,n,t,r){if(0===t.length)return[{content:n.join(""),type:r},{content:"",type:r}];const[i,...u]=t,o=[...n,i];return e([{content:o.join(""),type:r}])?nn(e,o,u,r):(0===n.length&&i&&(n.push(i),t.shift()),[{content:n.join(""),type:r},{content:t.join(""),type:r}])}function tn(e,n){if(e.some((({content:e})=>e.includes("\n"))))throw new Error("splitLineToFitWidth does not support newlines in the line");return rn(e,n)}function rn(e,n,t=[],r=[]){if(0===e.length)return r.length>0&&t.push(r),t.length>0?t:[];let i="";" "===e[0].content&&(i=" ",e.shift());const u=e.shift()??{content:" ",type:"normal"},o=[...r];if(""!==i&&o.push({content:i,type:"normal"}),o.push(u),n(o))return rn(e,n,t,o);if(r.length>0)t.push(r),e.unshift(u);else if(u.content){const[r,i]=en(n,u);t.push([r]),i.content&&e.unshift(i)}return rn(e,n,t)}function un(e,n,t){return e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",n*t-.1+"em").attr("dy",t+"em")}function on(e,n,t){const r=e.append("text"),i=un(r,1,n);cn(i,t);const u=i.node().getComputedTextLength();return r.remove(),u}function cn(e,n){e.text(""),n.forEach(((n,t)=>{const r=e.append("tspan").attr("font-style","emphasis"===n.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===n.type?"bold":"normal");0===t?r.text(n.content):r.text(" "+n.content)}))}const sn=(e,n="",{style:t="",isTitle:r=!1,classes:u="",useHtmlLabels:o=!0,isNode:c=!0,width:s=200,addSvgBackground:l=!1}={})=>{if(i.l.info("createText",n,t,r,u,o,c,l),o){const r=function(e){const{children:n}=We(e);return n.map((function e(n){return"text"===n.type?n.value.replace(/\n/g,"<br/>"):"strong"===n.type?`<strong>${n.children.map(e).join("")}</strong>`:"emphasis"===n.type?`<em>${n.children.map(e).join("")}</em>`:"paragraph"===n.type?`<p>${n.children.map(e).join("")}</p>`:`Unsupported markdown: ${n.type}`})).join("")}(n),o=function(e,n,t,r,i=!1){const u=e.append("foreignObject"),o=u.append("xhtml:div"),c=n.label,s=n.isNode?"nodeLabel":"edgeLabel";var l,a;o.html(`\n <span class="${s} ${r}" `+(n.labelStyle?'style="'+n.labelStyle+'"':"")+">"+c+"</span>"),l=o,(a=n.labelStyle)&&l.attr("style",a),o.style("display","table-cell"),o.style("white-space","nowrap"),o.style("max-width",t+"px"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&o.attr("class","labelBkg");let f=o.node().getBoundingClientRect();return f.width===t&&(o.style("display","table"),o.style("white-space","break-spaces"),o.style("width",t+"px"),f=o.node().getBoundingClientRect()),u.style("width",f.width),u.style("height",f.height),u.node()}(e,{isNode:c,label:(0,i.L)(r).replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`)),labelStyle:t.replace("fill:","color:")},s,u,l);return o}{const t=function(e,n,t,r=!1){const i=n.append("g"),u=i.insert("rect").attr("class","background"),o=i.append("text").attr("y","-10.1");let c=0;for(const s of t){const n=n=>on(i,1.1,n)<=e,t=n(s)?[s]:tn(s,n);for(const e of t)cn(un(o,c,1.1),e),c++}if(r){const e=o.node().getBBox(),n=2;return u.attr("x",-n).attr("y",-n).attr("width",e.width+2*n).attr("height",e.height+2*n),i.node()}return o.node()}(s,e,Xe(n),l);return t}}}}]); \ No newline at end of file diff --git a/assets/js/771ca8b2.feadc34a.js b/assets/js/771ca8b2.feadc34a.js new file mode 100644 index 0000000000..d832001a21 --- /dev/null +++ b/assets/js/771ca8b2.feadc34a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[65147],{98208:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>r});var n=t(24246),i=t(71670),c=t(58464);const o={toc_min_heading_level:2,toc_max_heading_level:4},l=void 0,d={id:"toc/toc-2-4",title:"toc-2-4",description:"",source:"@site/_dogfooding/_docs tests/toc/toc-2-4.mdx",sourceDirName:"toc",slug:"/toc/toc-2-4",permalink:"/tests/docs/toc/toc-2-4",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Anatoly Kopyl",lastUpdatedAt:1705687091e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:4},sidebar:"sidebar",previous:{title:"toc-2-3",permalink:"/tests/docs/toc/toc-2-3"},next:{title:"toc-2-5",permalink:"/tests/docs/toc/toc-2-5"}},u={},r=[...c.d$];function h(e){return(0,n.jsx)(c.ZP,{})}function x(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h()}},58464:(e,s,t)=>{t.d(s,{ZP:()=>l,d$:()=>c});var n=t(24246),i=t(71670);const c=[{value:"section 1",id:"section-1",level:2},{value:"subsection 1-1",id:"subsection-1-1",level:3},{value:"subsection 1-1-1",id:"subsection-1-1-1",level:4},{value:"subsection 1-1-1-1",id:"subsection-1-1-1-1",level:5},{value:"subsection 1-1-1-1-1",id:"subsection-1-1-1-1-1",level:6},{value:"subsection 1-1-1-1-2",id:"subsection-1-1-1-1-2",level:6},{value:"subsection 1-1-1-2",id:"subsection-1-1-1-2",level:5},{value:"subsection 1-1-2",id:"subsection-1-1-2",level:4},{value:"subsection 1-2",id:"subsection-1-2",level:3},{value:"subsection 1-3",id:"subsection-1-3",level:3},{value:"section 2",id:"section-2",level:2},{value:"subsection 2-1",id:"subsection-2-1",level:3},{value:"subsection 2-1",id:"subsection-2-1-1",level:3},{value:"section 3",id:"section-3",level:2},{value:"subsection 3-1",id:"subsection-3-1",level:3},{value:"subsection 3-2",id:"subsection-3-2",level:3}];function o(e){const s={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"title",children:"title"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-1",children:"section 1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-1",children:"subsection 1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-1",children:"subsection 1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-1",children:"subsection 1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-1",children:"subsection 1-1-1-1-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h6,{id:"subsection-1-1-1-1-2",children:"subsection 1-1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h5,{id:"subsection-1-1-1-2",children:"subsection 1-1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h4,{id:"subsection-1-1-2",children:"subsection 1-1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-2",children:"subsection 1-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-1-3",children:"subsection 1-3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-2",children:"section 2"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-2-1-1",children:"subsection 2-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h2,{id:"section-3",children:"section 3"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-1",children:"subsection 3-1"}),"\n",(0,n.jsx)(s.p,{children:"some text"}),"\n",(0,n.jsx)(s.h3,{id:"subsection-3-2",children:"subsection 3-2"}),"\n",(0,n.jsx)(s.p,{children:"some text"})]})}function l(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>o});var n=t(27378);const i={},c=n.createContext(i);function o(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/772c972a.b2fca90c.js b/assets/js/772c972a.b2fca90c.js new file mode 100644 index 0000000000..dd925973d9 --- /dev/null +++ b/assets/js/772c972a.b2fca90c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[63067],{39461:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var t=n(24246),s=n(71670);const i={id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},r="Docs Introduction",d={id:"guides/docs/introduction",title:"Docs Introduction",description:"The docs feature provides users with a way to organize Markdown files in a hierarchical format.",source:"@site/docs/guides/docs/docs-introduction.mdx",sourceDirName:"guides/docs",slug:"/docs-introduction",permalink:"/docs/docs-introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1697737112e3,frontMatter:{id:"introduction",sidebar_label:"Introduction",slug:"/docs-introduction"},sidebar:"docs",previous:{title:"Pages",permalink:"/docs/creating-pages"},next:{title:"Create a doc",permalink:"/docs/create-doc"}},c={},l=[{value:"Docs-only mode",id:"docs-only-mode",level:2}];function a(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"docs-introduction",children:"Docs Introduction"}),"\n",(0,t.jsx)(o.p,{children:"The docs feature provides users with a way to organize Markdown files in a hierarchical format."}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsxs)(o.p,{children:["Check the ",(0,t.jsx)(o.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"Docs Plugin API Reference documentation"})," for an exhaustive list of options."]})}),"\n",(0,t.jsx)(o.p,{children:"Your site's documentation is organized by four levels, from lowest to highest:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:"Individual pages."}),"\n",(0,t.jsx)(o.li,{children:"Sidebars."}),"\n",(0,t.jsx)(o.li,{children:"Versions."}),"\n",(0,t.jsx)(o.li,{children:"Plugin instances."}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["The guide will introduce them in that order: starting from ",(0,t.jsx)(o.a,{href:"/docs/create-doc",children:"how individual pages can be configured"}),", to ",(0,t.jsx)(o.a,{href:"/docs/sidebar",children:"how to create a sidebar or multiple ones"}),", to ",(0,t.jsx)(o.a,{href:"/docs/versioning",children:"how to create and manage versions"}),", to ",(0,t.jsx)(o.a,{href:"/docs/docs-multi-instance",children:"how to use multiple docs plugin instances"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"docs-only-mode",children:"Docs-only mode"}),"\n",(0,t.jsx)(o.p,{children:"A freshly initialized Docusaurus site has the following structure:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `src/pages/index.js`\n\nexample.com/docs/intro -> generated from `docs/intro.md`\nexample.com/docs/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n\nexample.com/blog/2021/08/26/welcome -> generated from `blog/2021-08-26-welcome/index.md`\nexample.com/blog/2021/08/01/mdx-blog-post -> generated from `blog/2021-08-01-mdx-blog-post.mdx`\n...\n"})}),"\n",(0,t.jsxs)(o.p,{children:["All docs will be served under the subroute ",(0,t.jsx)(o.code,{children:"docs/"}),". But what if ",(0,t.jsx)(o.strong,{children:"your site only has docs"}),", or you want to prioritize your docs by putting them at the root?"]}),"\n",(0,t.jsx)(o.p,{children:"Assume that you have the following in your configuration:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n /* docs plugin options */\n },\n blog: {\n /* blog plugin options */\n },\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(o.p,{children:"To enter docs-only mode, change it to like this:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n // ...\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-next-line\n routeBasePath: '/', // Serve the docs at the site's root\n /* other docs plugin options */\n },\n // highlight-next-line\n blog: false, // Optional: disable the blog plugin\n // ...\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Note that you ",(0,t.jsx)(o.strong,{children:"don't necessarily have to give up on using the blog"})," or other plugins; all that ",(0,t.jsx)(o.code,{children:"routeBasePath: '/'"})," does is that instead of serving the docs through ",(0,t.jsx)(o.code,{children:"https://example.com/docs/some-doc"}),", they are now at the site root: ",(0,t.jsx)(o.code,{children:"https://example.com/some-doc"}),". The blog, if enabled, can still be accessed through the ",(0,t.jsx)(o.code,{children:"blog/"})," subroute."]}),"\n",(0,t.jsxs)(o.p,{children:["Don't forget to put some page at the root (",(0,t.jsx)(o.code,{children:"https://example.com/"}),") through adding the front matter:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-md",metastring:'title="docs/intro.md"',children:"---\n# highlight-next-line\nslug: /\n---\n\nThis page will be the home page when users visit https://example.com/.\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"warning",children:(0,t.jsxs)(o.p,{children:["If you added ",(0,t.jsx)(o.code,{children:"slug: /"})," to a doc to make it the homepage, you should delete the existing homepage at ",(0,t.jsx)(o.code,{children:"./src/pages/index.js"}),", or else there will be two files mapping to the same route!"]})}),"\n",(0,t.jsx)(o.p,{children:"Now, the site's structure will be like the following:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{children:"example.com/ -> generated from `docs/intro.md`\nexample.com/tutorial-basics/... -> generated from `docs/tutorial-basics/...`\n...\n"})}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:['There\'s also a "blog-only mode" for those who only want to use the blog feature of Docusaurus. You can use the same method detailed above. Follow the setup instructions on ',(0,t.jsx)(o.a,{href:"/docs/blog#blog-only-mode",children:"Blog-only mode"}),"."]})})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},71670:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>r});var t=n(27378);const s={},i=t.createContext(s);function r(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/775.fba2ebb6.js b/assets/js/775.fba2ebb6.js new file mode 100644 index 0000000000..8f0af084b7 --- /dev/null +++ b/assets/js/775.fba2ebb6.js @@ -0,0 +1,2631 @@ +"use strict"; +exports.id = 775; +exports.ids = [775]; +exports.modules = { + +/***/ 12775: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(47435); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7608); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27693); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 6], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 16], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 13], $V8 = [1, 14], $V9 = [1, 15], $Va = [1, 27], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 72], $Vh = [1, 73], $Vi = [1, 74], $Vj = [1, 75], $Vk = [1, 76], $Vl = [1, 77], $Vm = [1, 78], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 50], $VA = [1, 51], $VB = [1, 52], $VC = [1, 53], $VD = [1, 54], $VE = [1, 55], $VF = [1, 56], $VG = [1, 57], $VH = [1, 59], $VI = [1, 60], $VJ = [1, 61], $VK = [1, 62], $VL = [1, 63], $VM = [1, 64], $VN = [1, 65], $VO = [1, 66], $VP = [1, 67], $VQ = [1, 68], $VR = [1, 69], $VS = [24, 52], $VT = [24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VU = [15, 24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VV = [1, 94], $VW = [1, 95], $VX = [1, 96], $VY = [1, 97], $VZ = [15, 24, 52], $V_ = [7, 8, 9, 10, 18, 22, 25, 26, 27, 28], $V$ = [15, 24, 43, 52], $V01 = [15, 24, 43, 52, 86, 87, 89, 90], $V11 = [15, 43], $V21 = [44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "directive": 6, "direction_tb": 7, "direction_bt": 8, "direction_rl": 9, "direction_lr": 10, "graphConfig": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, "NEWLINE": 15, ":": 16, "argDirective": 17, "open_directive": 18, "type_directive": 19, "arg_directive": 20, "close_directive": 21, "C4_CONTEXT": 22, "statements": 23, "EOF": 24, "C4_CONTAINER": 25, "C4_COMPONENT": 26, "C4_DYNAMIC": 27, "C4_DEPLOYMENT": 28, "otherStatements": 29, "diagramStatements": 30, "otherStatement": 31, "title": 32, "accDescription": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "boundaryStatement": 39, "boundaryStartStatement": 40, "boundaryStopStatement": 41, "boundaryStart": 42, "LBRACE": 43, "ENTERPRISE_BOUNDARY": 44, "attributes": 45, "SYSTEM_BOUNDARY": 46, "BOUNDARY": 47, "CONTAINER_BOUNDARY": 48, "NODE": 49, "NODE_L": 50, "NODE_R": 51, "RBRACE": 52, "diagramStatement": 53, "PERSON": 54, "PERSON_EXT": 55, "SYSTEM": 56, "SYSTEM_DB": 57, "SYSTEM_QUEUE": 58, "SYSTEM_EXT": 59, "SYSTEM_EXT_DB": 60, "SYSTEM_EXT_QUEUE": 61, "CONTAINER": 62, "CONTAINER_DB": 63, "CONTAINER_QUEUE": 64, "CONTAINER_EXT": 65, "CONTAINER_EXT_DB": 66, "CONTAINER_EXT_QUEUE": 67, "COMPONENT": 68, "COMPONENT_DB": 69, "COMPONENT_QUEUE": 70, "COMPONENT_EXT": 71, "COMPONENT_EXT_DB": 72, "COMPONENT_EXT_QUEUE": 73, "REL": 74, "BIREL": 75, "REL_U": 76, "REL_D": 77, "REL_L": 78, "REL_R": 79, "REL_B": 80, "REL_INDEX": 81, "UPDATE_EL_STYLE": 82, "UPDATE_REL_STYLE": 83, "UPDATE_LAYOUT_CONFIG": 84, "attribute": 85, "STR": 86, "STR_KEY": 87, "STR_VALUE": 88, "ATTRIBUTE": 89, "ATTRIBUTE_EMPTY": 90, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 7: "direction_tb", 8: "direction_bt", 9: "direction_rl", 10: "direction_lr", 15: "NEWLINE", 16: ":", 18: "open_directive", 19: "type_directive", 20: "arg_directive", 21: "close_directive", 22: "C4_CONTEXT", 24: "EOF", 25: "C4_CONTAINER", 26: "C4_COMPONENT", 27: "C4_DYNAMIC", 28: "C4_DEPLOYMENT", 32: "title", 33: "accDescription", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 43: "LBRACE", 44: "ENTERPRISE_BOUNDARY", 46: "SYSTEM_BOUNDARY", 47: "BOUNDARY", 48: "CONTAINER_BOUNDARY", 49: "NODE", 50: "NODE_L", 51: "NODE_R", 52: "RBRACE", 54: "PERSON", 55: "PERSON_EXT", 56: "SYSTEM", 57: "SYSTEM_DB", 58: "SYSTEM_QUEUE", 59: "SYSTEM_EXT", 60: "SYSTEM_EXT_DB", 61: "SYSTEM_EXT_QUEUE", 62: "CONTAINER", 63: "CONTAINER_DB", 64: "CONTAINER_QUEUE", 65: "CONTAINER_EXT", 66: "CONTAINER_EXT_DB", 67: "CONTAINER_EXT_QUEUE", 68: "COMPONENT", 69: "COMPONENT_DB", 70: "COMPONENT_QUEUE", 71: "COMPONENT_EXT", 72: "COMPONENT_EXT_DB", 73: "COMPONENT_EXT_QUEUE", 74: "REL", 75: "BIREL", 76: "REL_U", 77: "REL_D", 78: "REL_L", 79: "REL_R", 80: "REL_B", 81: "REL_INDEX", 82: "UPDATE_EL_STYLE", 83: "UPDATE_REL_STYLE", 84: "UPDATE_LAYOUT_CONFIG", 86: "STR", 87: "STR_KEY", 88: "STR_VALUE", 89: "ATTRIBUTE", 90: "ATTRIBUTE_EMPTY" }, + productions_: [0, [3, 1], [3, 1], [3, 2], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [6, 4], [6, 6], [12, 1], [13, 1], [17, 1], [14, 1], [11, 4], [11, 4], [11, 4], [11, 4], [11, 4], [23, 1], [23, 1], [23, 2], [29, 1], [29, 2], [29, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 1], [39, 3], [40, 3], [40, 3], [40, 4], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [41, 1], [30, 1], [30, 2], [30, 3], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 1], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [45, 1], [45, 2], [85, 1], [85, 2], [85, 1], [85, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setDirection("TB"); + break; + case 5: + yy.setDirection("BT"); + break; + case 6: + yy.setDirection("RL"); + break; + case 7: + yy.setDirection("LR"); + break; + case 11: + yy.parseDirective("%%{", "open_directive"); + break; + case 12: + break; + case 13: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 14: + yy.parseDirective("}%%", "close_directive", "c4Context"); + break; + case 15: + case 16: + case 17: + case 18: + case 19: + yy.setC4Type($$[$0 - 3]); + break; + case 26: + yy.setTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 27: + yy.setAccDescription($$[$0].substring(15)); + this.$ = $$[$0].substring(15); + break; + case 28: + this.$ = $$[$0].trim(); + yy.setTitle(this.$); + break; + case 29: + case 30: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 35: + case 36: + $$[$0].splice(2, 0, "ENTERPRISE"); + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 37: + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 38: + $$[$0].splice(2, 0, "CONTAINER"); + yy.addContainerBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 39: + yy.addDeploymentNode("node", ...$$[$0]); + this.$ = $$[$0]; + break; + case 40: + yy.addDeploymentNode("nodeL", ...$$[$0]); + this.$ = $$[$0]; + break; + case 41: + yy.addDeploymentNode("nodeR", ...$$[$0]); + this.$ = $$[$0]; + break; + case 42: + yy.popBoundaryParseStack(); + break; + case 46: + yy.addPersonOrSystem("person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 47: + yy.addPersonOrSystem("external_person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 48: + yy.addPersonOrSystem("system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 49: + yy.addPersonOrSystem("system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 50: + yy.addPersonOrSystem("system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 51: + yy.addPersonOrSystem("external_system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 52: + yy.addPersonOrSystem("external_system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 53: + yy.addPersonOrSystem("external_system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 54: + yy.addContainer("container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 55: + yy.addContainer("container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 56: + yy.addContainer("container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 57: + yy.addContainer("external_container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 58: + yy.addContainer("external_container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 59: + yy.addContainer("external_container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 60: + yy.addComponent("component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 61: + yy.addComponent("component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 62: + yy.addComponent("component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 63: + yy.addComponent("external_component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 64: + yy.addComponent("external_component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 65: + yy.addComponent("external_component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 67: + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 68: + yy.addRel("birel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 69: + yy.addRel("rel_u", ...$$[$0]); + this.$ = $$[$0]; + break; + case 70: + yy.addRel("rel_d", ...$$[$0]); + this.$ = $$[$0]; + break; + case 71: + yy.addRel("rel_l", ...$$[$0]); + this.$ = $$[$0]; + break; + case 72: + yy.addRel("rel_r", ...$$[$0]); + this.$ = $$[$0]; + break; + case 73: + yy.addRel("rel_b", ...$$[$0]); + this.$ = $$[$0]; + break; + case 74: + $$[$0].splice(0, 1); + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 75: + yy.updateElStyle("update_el_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 76: + yy.updateRelStyle("update_rel_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 77: + yy.updateLayoutConfig("update_layout_config", ...$$[$0]); + this.$ = $$[$0]; + break; + case 78: + this.$ = [$$[$0]]; + break; + case 79: + $$[$0].unshift($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 80: + case 82: + this.$ = $$[$0].trim(); + break; + case 81: + let kv = {}; + kv[$$[$0 - 1].trim()] = $$[$0].trim(); + this.$ = kv; + break; + case 83: + this.$ = ""; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 3: 17, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [2, 8] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 1: [2, 7] }, { 13: 18, 19: [1, 19] }, { 15: [1, 20] }, { 15: [1, 21] }, { 15: [1, 22] }, { 15: [1, 23] }, { 15: [1, 24] }, { 19: [2, 11] }, { 1: [2, 3] }, { 14: 25, 16: [1, 26], 21: $Va }, o([16, 21], [2, 12]), { 23: 28, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 79, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 80, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 81, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 82, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 83] }, { 17: 84, 20: [1, 85] }, { 15: [2, 14] }, { 24: [1, 86] }, o($VS, [2, 20], { 53: 32, 39: 58, 40: 70, 42: 71, 30: 87, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VS, [2, 21]), o($VT, [2, 23], { 15: [1, 88] }), o($VS, [2, 43], { 15: [1, 89] }), o($VU, [2, 26]), o($VU, [2, 27]), { 35: [1, 90] }, { 37: [1, 91] }, o($VU, [2, 30]), { 45: 92, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 98, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 99, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 100, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 101, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 102, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 103, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 104, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 105, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 106, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 107, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 108, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 109, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 110, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 111, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 112, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 113, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 114, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 115, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 116, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, o($VZ, [2, 66]), { 45: 117, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 118, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 119, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 120, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 121, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 122, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 123, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 124, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 125, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 126, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 127, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 30: 128, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 130], 43: [1, 129] }, { 45: 131, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 132, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 133, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 134, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 135, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 136, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 137, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 24: [1, 138] }, { 24: [1, 139] }, { 24: [1, 140] }, { 24: [1, 141] }, o($V_, [2, 9]), { 14: 142, 21: $Va }, { 21: [2, 13] }, { 1: [2, 15] }, o($VS, [2, 22]), o($VT, [2, 24], { 31: 31, 29: 143, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf }), o($VS, [2, 44], { 29: 29, 30: 30, 31: 31, 53: 32, 39: 58, 40: 70, 42: 71, 23: 144, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VU, [2, 28]), o($VU, [2, 29]), o($VZ, [2, 46]), o($V$, [2, 78], { 85: 93, 45: 145, 86: $VV, 87: $VW, 89: $VX, 90: $VY }), o($V01, [2, 80]), { 88: [1, 146] }, o($V01, [2, 82]), o($V01, [2, 83]), o($VZ, [2, 47]), o($VZ, [2, 48]), o($VZ, [2, 49]), o($VZ, [2, 50]), o($VZ, [2, 51]), o($VZ, [2, 52]), o($VZ, [2, 53]), o($VZ, [2, 54]), o($VZ, [2, 55]), o($VZ, [2, 56]), o($VZ, [2, 57]), o($VZ, [2, 58]), o($VZ, [2, 59]), o($VZ, [2, 60]), o($VZ, [2, 61]), o($VZ, [2, 62]), o($VZ, [2, 63]), o($VZ, [2, 64]), o($VZ, [2, 65]), o($VZ, [2, 67]), o($VZ, [2, 68]), o($VZ, [2, 69]), o($VZ, [2, 70]), o($VZ, [2, 71]), o($VZ, [2, 72]), o($VZ, [2, 73]), o($VZ, [2, 74]), o($VZ, [2, 75]), o($VZ, [2, 76]), o($VZ, [2, 77]), { 41: 147, 52: [1, 148] }, { 15: [1, 149] }, { 43: [1, 150] }, o($V11, [2, 35]), o($V11, [2, 36]), o($V11, [2, 37]), o($V11, [2, 38]), o($V11, [2, 39]), o($V11, [2, 40]), o($V11, [2, 41]), { 1: [2, 16] }, { 1: [2, 17] }, { 1: [2, 18] }, { 1: [2, 19] }, { 15: [1, 151] }, o($VT, [2, 25]), o($VS, [2, 45]), o($V$, [2, 79]), o($V01, [2, 81]), o($VZ, [2, 31]), o($VZ, [2, 42]), o($V21, [2, 32]), o($V21, [2, 33], { 15: [1, 152] }), o($V_, [2, 10]), o($V21, [2, 34])], + defaultActions: { 2: [2, 1], 3: [2, 2], 5: [2, 8], 6: [2, 4], 7: [2, 5], 8: [2, 6], 9: [2, 7], 16: [2, 11], 17: [2, 3], 27: [2, 14], 85: [2, 13], 86: [2, 15], 138: [2, 16], 139: [2, 17], 140: [2, 18], 141: [2, 19] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c2 = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c2 + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 18; + case 1: + return 7; + case 2: + return 8; + case 3: + return 9; + case 4: + return 10; + case 5: + this.begin("type_directive"); + return 19; + case 6: + this.popState(); + this.begin("arg_directive"); + return 16; + case 7: + this.popState(); + this.popState(); + return 21; + case 8: + return 20; + case 9: + return 32; + case 10: + return 33; + case 11: + this.begin("acc_title"); + return 34; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 36; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + break; + case 19: + c; + break; + case 20: + return 15; + case 21: + break; + case 22: + return 22; + case 23: + return 25; + case 24: + return 26; + case 25: + return 27; + case 26: + return 28; + case 27: + this.begin("person_ext"); + return 55; + case 28: + this.begin("person"); + return 54; + case 29: + this.begin("system_ext_queue"); + return 61; + case 30: + this.begin("system_ext_db"); + return 60; + case 31: + this.begin("system_ext"); + return 59; + case 32: + this.begin("system_queue"); + return 58; + case 33: + this.begin("system_db"); + return 57; + case 34: + this.begin("system"); + return 56; + case 35: + this.begin("boundary"); + return 47; + case 36: + this.begin("enterprise_boundary"); + return 44; + case 37: + this.begin("system_boundary"); + return 46; + case 38: + this.begin("container_ext_queue"); + return 67; + case 39: + this.begin("container_ext_db"); + return 66; + case 40: + this.begin("container_ext"); + return 65; + case 41: + this.begin("container_queue"); + return 64; + case 42: + this.begin("container_db"); + return 63; + case 43: + this.begin("container"); + return 62; + case 44: + this.begin("container_boundary"); + return 48; + case 45: + this.begin("component_ext_queue"); + return 73; + case 46: + this.begin("component_ext_db"); + return 72; + case 47: + this.begin("component_ext"); + return 71; + case 48: + this.begin("component_queue"); + return 70; + case 49: + this.begin("component_db"); + return 69; + case 50: + this.begin("component"); + return 68; + case 51: + this.begin("node"); + return 49; + case 52: + this.begin("node"); + return 49; + case 53: + this.begin("node_l"); + return 50; + case 54: + this.begin("node_r"); + return 51; + case 55: + this.begin("rel"); + return 74; + case 56: + this.begin("birel"); + return 75; + case 57: + this.begin("rel_u"); + return 76; + case 58: + this.begin("rel_u"); + return 76; + case 59: + this.begin("rel_d"); + return 77; + case 60: + this.begin("rel_d"); + return 77; + case 61: + this.begin("rel_l"); + return 78; + case 62: + this.begin("rel_l"); + return 78; + case 63: + this.begin("rel_r"); + return 79; + case 64: + this.begin("rel_r"); + return 79; + case 65: + this.begin("rel_b"); + return 80; + case 66: + this.begin("rel_index"); + return 81; + case 67: + this.begin("update_el_style"); + return 82; + case 68: + this.begin("update_rel_style"); + return 83; + case 69: + this.begin("update_layout_config"); + return 84; + case 70: + return "EOF_IN_STRUCT"; + case 71: + this.begin("attribute"); + return "ATTRIBUTE_EMPTY"; + case 72: + this.begin("attribute"); + break; + case 73: + this.popState(); + this.popState(); + break; + case 74: + return 90; + case 75: + break; + case 76: + return 90; + case 77: + this.begin("string"); + break; + case 78: + this.popState(); + break; + case 79: + return "STR"; + case 80: + this.begin("string_kv"); + break; + case 81: + this.begin("string_kv_key"); + return "STR_KEY"; + case 82: + this.popState(); + this.begin("string_kv_value"); + break; + case 83: + return "STR_VALUE"; + case 84: + this.popState(); + this.popState(); + break; + case 85: + return "STR"; + case 86: + return "LBRACE"; + case 87: + return "RBRACE"; + case 88: + return "SPACE"; + case 89: + return "EOL"; + case 90: + return 24; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/], + conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "string_kv_value": { "rules": [83, 84], "inclusive": false }, "string_kv_key": { "rules": [82], "inclusive": false }, "string_kv": { "rules": [81], "inclusive": false }, "string": { "rules": [78, 79], "inclusive": false }, "attribute": { "rules": [73, 74, 75, 76, 77, 80, 85], "inclusive": false }, "update_layout_config": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_rel_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_el_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_b": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_d": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_u": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "node": { "rules": [70, 71, 72, 73], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container": { "rules": [70, 71, 72, 73], "inclusive": false }, "birel": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "enterprise_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system": { "rules": [70, 71, 72, 73], "inclusive": false }, "person_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "person": { "rules": [70, 71, 72, 73], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 88, 89, 90], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const c4Parser = parser; +let c4ShapeArray = []; +let boundaryParseStack = [""]; +let currentBoundaryParse = "global"; +let parentBoundaryParse = ""; +let boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } +]; +let rels = []; +let title = ""; +let wrapEnabled = false; +let c4ShapeInRow$1 = 4; +let c4BoundaryInRow$1 = 2; +var c4Type; +const getC4Type = function() { + return c4Type; +}; +const setC4Type = function(c4TypeParam) { + let sanitizedText = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(c4TypeParam, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + c4Type = sanitizedText; +}; +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const addRel = function(type, from, to, label, techn, descr, sprite, tags, link) { + if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) { + return; + } + let rel = {}; + const old = rels.find((rel2) => rel2.from === from && rel2.to === to); + if (old) { + rel = old; + } else { + rels.push(rel); + } + rel.type = type; + rel.from = from; + rel.to = to; + rel.label = { text: label }; + if (techn === void 0 || techn === null) { + rel.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + rel[key] = { text: value }; + } else { + rel.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + rel.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + rel[key] = { text: value }; + } else { + rel.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + rel[key] = value; + } else { + rel.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + rel[key] = value; + } else { + rel.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + rel[key] = value; + } else { + rel.link = link; + } + rel.wrap = autoWrap(); +}; +const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let personOrSystem = {}; + const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias); + if (old && alias === old.alias) { + personOrSystem = old; + } else { + personOrSystem.alias = alias; + c4ShapeArray.push(personOrSystem); + } + if (label === void 0 || label === null) { + personOrSystem.label = { text: "" }; + } else { + personOrSystem.label = { text: label }; + } + if (descr === void 0 || descr === null) { + personOrSystem.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + personOrSystem[key] = { text: value }; + } else { + personOrSystem.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.link = link; + } + personOrSystem.typeC4Shape = { text: typeC4Shape }; + personOrSystem.parentBoundary = currentBoundaryParse; + personOrSystem.wrap = autoWrap(); +}; +const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let container = {}; + const old = c4ShapeArray.find((container2) => container2.alias === alias); + if (old && alias === old.alias) { + container = old; + } else { + container.alias = alias; + c4ShapeArray.push(container); + } + if (label === void 0 || label === null) { + container.label = { text: "" }; + } else { + container.label = { text: label }; + } + if (techn === void 0 || techn === null) { + container.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + container[key] = { text: value }; + } else { + container.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + container.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + container[key] = { text: value }; + } else { + container.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + container[key] = value; + } else { + container.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + container[key] = value; + } else { + container.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + container[key] = value; + } else { + container.link = link; + } + container.wrap = autoWrap(); + container.typeC4Shape = { text: typeC4Shape }; + container.parentBoundary = currentBoundaryParse; +}; +const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let component = {}; + const old = c4ShapeArray.find((component2) => component2.alias === alias); + if (old && alias === old.alias) { + component = old; + } else { + component.alias = alias; + c4ShapeArray.push(component); + } + if (label === void 0 || label === null) { + component.label = { text: "" }; + } else { + component.label = { text: label }; + } + if (techn === void 0 || techn === null) { + component.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + component[key] = { text: value }; + } else { + component.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + component.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + component[key] = { text: value }; + } else { + component.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + component[key] = value; + } else { + component.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + component[key] = value; + } else { + component.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + component[key] = value; + } else { + component.link = link; + } + component.wrap = autoWrap(); + component.typeC4Shape = { text: typeC4Shape }; + component.parentBoundary = currentBoundaryParse; +}; +const addPersonOrSystemBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "system" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addContainerBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "container" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "node" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (descr === void 0 || descr === null) { + boundary.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + boundary[key] = { text: value }; + } else { + boundary.descr = { text: descr }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.nodeType = nodeType; + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const popBoundaryParseStack = function() { + currentBoundaryParse = parentBoundaryParse; + boundaryParseStack.pop(); + parentBoundaryParse = boundaryParseStack.pop(); + boundaryParseStack.push(parentBoundaryParse); +}; +const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) { + let old = c4ShapeArray.find((element) => element.alias === elementName); + if (old === void 0) { + old = boundarys.find((element) => element.alias === elementName); + if (old === void 0) { + return; + } + } + if (bgColor !== void 0 && bgColor !== null) { + if (typeof bgColor === "object") { + let [key, value] = Object.entries(bgColor)[0]; + old[key] = value; + } else { + old.bgColor = bgColor; + } + } + if (fontColor !== void 0 && fontColor !== null) { + if (typeof fontColor === "object") { + let [key, value] = Object.entries(fontColor)[0]; + old[key] = value; + } else { + old.fontColor = fontColor; + } + } + if (borderColor !== void 0 && borderColor !== null) { + if (typeof borderColor === "object") { + let [key, value] = Object.entries(borderColor)[0]; + old[key] = value; + } else { + old.borderColor = borderColor; + } + } + if (shadowing !== void 0 && shadowing !== null) { + if (typeof shadowing === "object") { + let [key, value] = Object.entries(shadowing)[0]; + old[key] = value; + } else { + old.shadowing = shadowing; + } + } + if (shape !== void 0 && shape !== null) { + if (typeof shape === "object") { + let [key, value] = Object.entries(shape)[0]; + old[key] = value; + } else { + old.shape = shape; + } + } + if (sprite !== void 0 && sprite !== null) { + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + old[key] = value; + } else { + old.sprite = sprite; + } + } + if (techn !== void 0 && techn !== null) { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + old[key] = value; + } else { + old.techn = techn; + } + } + if (legendText !== void 0 && legendText !== null) { + if (typeof legendText === "object") { + let [key, value] = Object.entries(legendText)[0]; + old[key] = value; + } else { + old.legendText = legendText; + } + } + if (legendSprite !== void 0 && legendSprite !== null) { + if (typeof legendSprite === "object") { + let [key, value] = Object.entries(legendSprite)[0]; + old[key] = value; + } else { + old.legendSprite = legendSprite; + } + } +}; +const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) { + const old = rels.find((rel) => rel.from === from && rel.to === to); + if (old === void 0) { + return; + } + if (textColor !== void 0 && textColor !== null) { + if (typeof textColor === "object") { + let [key, value] = Object.entries(textColor)[0]; + old[key] = value; + } else { + old.textColor = textColor; + } + } + if (lineColor !== void 0 && lineColor !== null) { + if (typeof lineColor === "object") { + let [key, value] = Object.entries(lineColor)[0]; + old[key] = value; + } else { + old.lineColor = lineColor; + } + } + if (offsetX !== void 0 && offsetX !== null) { + if (typeof offsetX === "object") { + let [key, value] = Object.entries(offsetX)[0]; + old[key] = parseInt(value); + } else { + old.offsetX = parseInt(offsetX); + } + } + if (offsetY !== void 0 && offsetY !== null) { + if (typeof offsetY === "object") { + let [key, value] = Object.entries(offsetY)[0]; + old[key] = parseInt(value); + } else { + old.offsetY = parseInt(offsetY); + } + } +}; +const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { + let c4ShapeInRowValue = c4ShapeInRow$1; + let c4BoundaryInRowValue = c4BoundaryInRow$1; + if (typeof c4ShapeInRowParam === "object") { + const value = Object.values(c4ShapeInRowParam)[0]; + c4ShapeInRowValue = parseInt(value); + } else { + c4ShapeInRowValue = parseInt(c4ShapeInRowParam); + } + if (typeof c4BoundaryInRowParam === "object") { + const value = Object.values(c4BoundaryInRowParam)[0]; + c4BoundaryInRowValue = parseInt(value); + } else { + c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); + } + if (c4ShapeInRowValue >= 1) { + c4ShapeInRow$1 = c4ShapeInRowValue; + } + if (c4BoundaryInRowValue >= 1) { + c4BoundaryInRow$1 = c4BoundaryInRowValue; + } +}; +const getC4ShapeInRow = function() { + return c4ShapeInRow$1; +}; +const getC4BoundaryInRow = function() { + return c4BoundaryInRow$1; +}; +const getCurrentBoundaryParse = function() { + return currentBoundaryParse; +}; +const getParentBoundaryParse = function() { + return parentBoundaryParse; +}; +const getC4ShapeArray = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return c4ShapeArray; + } else { + return c4ShapeArray.filter((personOrSystem) => { + return personOrSystem.parentBoundary === parentBoundary; + }); + } +}; +const getC4Shape = function(alias) { + return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); +}; +const getC4ShapeKeys = function(parentBoundary) { + return Object.keys(getC4ShapeArray(parentBoundary)); +}; +const getBoundarys = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return boundarys; + } else { + return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); + } +}; +const getRels = function() { + return rels; +}; +const getTitle = function() { + return title; +}; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = function() { + return wrapEnabled; +}; +const clear = function() { + c4ShapeArray = []; + boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } + ]; + parentBoundaryParse = ""; + currentBoundaryParse = "global"; + boundaryParseStack = [""]; + rels = []; + boundaryParseStack = [""]; + title = ""; + wrapEnabled = false; + c4ShapeInRow$1 = 4; + c4BoundaryInRow$1 = 2; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const setTitle = function(txt) { + let sanitizedText = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(txt, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + title = sanitizedText; +}; +const c4Db = { + addPersonOrSystem, + addPersonOrSystemBoundary, + addContainer, + addContainerBoundary, + addComponent, + addDeploymentNode, + popBoundaryParseStack, + addRel, + updateElStyle, + updateRelStyle, + updateLayoutConfig, + autoWrap, + setWrap, + getC4ShapeArray, + getC4Shape, + getC4ShapeKeys, + getBoundarys, + getCurrentBoundaryParse, + getParentBoundaryParse, + getRels, + getTitle, + getC4Type, + getC4ShapeInRow, + getC4BoundaryInRow, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b, + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4, + clear, + LINETYPE, + ARROWTYPE, + PLACEMENT, + setTitle, + setC4Type + // apply, +}; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawImage = function(elem, width, height, x, y, link) { + const imageElem = elem.append("image"); + imageElem.attr("width", width); + imageElem.attr("height", height); + imageElem.attr("x", x); + imageElem.attr("y", y); + let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(link); + imageElem.attr("xlink:href", sanitizedLink); +}; +const drawRels$1 = (elem, rels2, conf2) => { + const relsElem = elem.append("g"); + let i = 0; + for (let rel of rels2) { + let textColor = rel.textColor ? rel.textColor : "#444444"; + let strokeColor = rel.lineColor ? rel.lineColor : "#444444"; + let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; + let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; + let url = ""; + if (i === 0) { + let line = relsElem.append("line"); + line.attr("x1", rel.startPoint.x); + line.attr("y1", rel.startPoint.y); + line.attr("x2", rel.endPoint.x); + line.attr("y2", rel.endPoint.y); + line.attr("stroke-width", "1"); + line.attr("stroke", strokeColor); + line.style("fill", "none"); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + i = -1; + } else { + let line = relsElem.append("path"); + line.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr( + "d", + "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll( + "controlx", + rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 + ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y) + ); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + } + let messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + rel.label.text, + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, + rel.label.width, + rel.label.height, + { fill: textColor }, + messageConf + ); + if (rel.techn && rel.techn.text !== "") { + messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + "[" + rel.techn.text + "]", + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY, + Math.max(rel.label.width, rel.techn.width), + rel.techn.height, + { fill: textColor, "font-style": "italic" }, + messageConf + ); + } + } +}; +const drawBoundary$1 = function(elem, boundary, conf2) { + const boundaryElem = elem.append("g"); + let fillColor = boundary.bgColor ? boundary.bgColor : "none"; + let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444"; + let fontColor = boundary.fontColor ? boundary.fontColor : "black"; + let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" }; + if (boundary.nodeType) { + attrsValue = { "stroke-width": 1 }; + } + let rectData = { + x: boundary.x, + y: boundary.y, + fill: fillColor, + stroke: strokeColor, + width: boundary.width, + height: boundary.height, + rx: 2.5, + ry: 2.5, + attrs: attrsValue + }; + drawRect(boundaryElem, rectData); + let boundaryConf = conf2.boundaryFont(); + boundaryConf.fontWeight = "bold"; + boundaryConf.fontSize = boundaryConf.fontSize + 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.label.text, + boundaryElem, + boundary.x, + boundary.y + boundary.label.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + if (boundary.type && boundary.type.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.type.text, + boundaryElem, + boundary.x, + boundary.y + boundary.type.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } + if (boundary.descr && boundary.descr.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontSize = boundaryConf.fontSize - 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.descr.text, + boundaryElem, + boundary.x, + boundary.y + boundary.descr.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } +}; +const drawC4Shape = function(elem, c4Shape, conf2) { + var _a; + let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"]; + let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"]; + let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF"; + let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + switch (c4Shape.typeC4Shape.text) { + case "person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + break; + case "external_person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="; + break; + } + const c4ShapeElem = elem.append("g"); + c4ShapeElem.attr("class", "person-man"); + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + case "system": + case "external_system": + case "container": + case "external_container": + case "component": + case "external_component": + rect.x = c4Shape.x; + rect.y = c4Shape.y; + rect.fill = fillColor; + rect.width = c4Shape.width; + rect.height = c4Shape.height; + rect.stroke = strokeColor; + rect.rx = 2.5; + rect.ry = 2.5; + rect.attrs = { "stroke-width": 0.5 }; + drawRect(c4ShapeElem, rect); + break; + case "system_db": + case "external_system_db": + case "container_db": + case "external_container_db": + case "component_db": + case "external_component_db": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2) + ); + break; + case "system_queue": + case "external_system_queue": + case "container_queue": + case "external_container_queue": + case "component_queue": + case "external_component_queue": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2) + ); + break; + } + let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text); + c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>"); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + drawImage( + c4ShapeElem, + 48, + 48, + c4Shape.x + c4Shape.width / 2 - 24, + c4Shape.y + c4Shape.image.Y, + personImg + ); + break; + } + let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontWeight = "bold"; + textFontConf.fontSize = textFontConf.fontSize + 2; + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.label.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.label.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontColor = fontColor; + if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.techn.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.techn.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } else if (c4Shape.type && c4Shape.type.text !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.type.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.type.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } + if (c4Shape.descr && c4Shape.descr.text !== "") { + textFontConf = conf2.personFont(); + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.descr.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.descr.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + } + return c4Shape.height; +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowEnd = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertDynamicNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4); + marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z"); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7"); +}; +const getC4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { fontSize, fontFamily, fontWeight } = conf2; + const lines = content.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * fontSize - fontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); + text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawBoundary: drawBoundary$1, + drawC4Shape, + drawRels: drawRels$1, + drawImage, + insertArrowHead, + insertArrowEnd, + insertArrowFilledHead, + insertDynamicNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon +}; +let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; +let c4ShapeInRow = 4; +let c4BoundaryInRow = 2; +parser.yy = c4Db; +let conf = {}; +class Bounds { + constructor(diagObj) { + this.name = ""; + this.data = {}; + this.data.startx = void 0; + this.data.stopx = void 0; + this.data.starty = void 0; + this.data.stopy = void 0; + this.data.widthLimit = void 0; + this.nextData = {}; + this.nextData.startx = void 0; + this.nextData.stopx = void 0; + this.nextData.starty = void 0; + this.nextData.stopy = void 0; + this.nextData.cnt = 0; + setConf(diagObj.db.getConfig()); + } + setData(startx, stopx, starty, stopy) { + this.nextData.startx = this.data.startx = startx; + this.nextData.stopx = this.data.stopx = stopx; + this.nextData.starty = this.data.starty = starty; + this.nextData.stopy = this.data.stopy = stopy; + } + updateVal(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + } + insert(c4Shape) { + this.nextData.cnt = this.nextData.cnt + 1; + let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; + let _stopx = _startx + c4Shape.width; + let _starty = this.nextData.starty + c4Shape.margin * 2; + let _stopy = _starty + c4Shape.height; + if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) { + _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; + _starty = this.nextData.stopy + c4Shape.margin * 2; + this.nextData.stopx = _stopx = _startx + c4Shape.width; + this.nextData.starty = this.nextData.stopy; + this.nextData.stopy = _stopy = _starty + c4Shape.height; + this.nextData.cnt = 1; + } + c4Shape.x = _startx; + c4Shape.y = _starty; + this.updateVal(this.data, "startx", _startx, Math.min); + this.updateVal(this.data, "starty", _starty, Math.min); + this.updateVal(this.data, "stopx", _stopx, Math.max); + this.updateVal(this.data, "stopy", _stopy, Math.max); + this.updateVal(this.nextData, "startx", _startx, Math.min); + this.updateVal(this.nextData, "starty", _starty, Math.min); + this.updateVal(this.nextData, "stopx", _stopx, Math.max); + this.updateVal(this.nextData, "stopy", _stopy, Math.max); + } + init(diagObj) { + this.name = ""; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + widthLimit: void 0 + }; + this.nextData = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + cnt: 0 + }; + setConf(diagObj.db.getConfig()); + } + bumpLastMargin(margin) { + this.data.stopx += margin; + this.data.stopy += margin; + } +} +const setConf = function(cnf) { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const c4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const boundaryFont = (cnf) => { + return { + fontFamily: cnf.boundaryFontFamily, + fontSize: cnf.boundaryFontSize, + fontWeight: cnf.boundaryFontWeight + }; +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { + if (!c4Shape[textType].width) { + if (c4ShapeTextWrap) { + c4Shape[textType].text = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.w)(c4Shape[textType].text, textLimitWidth, textConf); + c4Shape[textType].textLines = c4Shape[textType].text.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex).length; + c4Shape[textType].width = textLimitWidth; + c4Shape[textType].height = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.j)(c4Shape[textType].text, textConf); + } else { + let lines = c4Shape[textType].text.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + c4Shape[textType].textLines = lines.length; + let lineHeight = 0; + c4Shape[textType].height = 0; + c4Shape[textType].width = 0; + for (const line of lines) { + c4Shape[textType].width = Math.max( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)(line, textConf), + c4Shape[textType].width + ); + lineHeight = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.j)(line, textConf); + c4Shape[textType].height = c4Shape[textType].height + lineHeight; + } + } + } +} +const drawBoundary = function(diagram2, boundary, bounds) { + boundary.x = bounds.data.startx; + boundary.y = bounds.data.starty; + boundary.width = bounds.data.stopx - bounds.data.startx; + boundary.height = bounds.data.stopy - bounds.data.starty; + boundary.label.y = conf.c4ShapeMargin - 35; + let boundaryTextWrap = boundary.wrap && conf.wrap; + let boundaryLabelConf = boundaryFont(conf); + boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; + boundaryLabelConf.fontWeight = "bold"; + let textLimitWidth = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)(boundary.label.text, boundaryLabelConf); + calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); + svgDraw.drawBoundary(diagram2, boundary, conf); +}; +const drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) { + let Y = 0; + for (const c4ShapeKey of c4ShapeKeys) { + Y = 0; + const c4Shape = c4ShapeArray2[c4ShapeKey]; + let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; + c4Shape.typeC4Shape.width = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)( + "«" + c4Shape.typeC4Shape.text + "»", + c4ShapeTypeConf + ); + c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; + c4Shape.typeC4Shape.Y = conf.c4ShapePadding; + Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; + c4Shape.image = { width: 0, height: 0, Y: 0 }; + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + break; + } + if (c4Shape.sprite) { + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + } + let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; + let textLimitWidth = conf.width - conf.c4ShapePadding * 2; + let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; + c4ShapeLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); + c4Shape["label"].Y = Y + 8; + Y = c4Shape["label"].Y + c4Shape["label"].height; + if (c4Shape.type && c4Shape.type.text !== "") { + c4Shape.type.text = "[" + c4Shape.type.text + "]"; + let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth); + c4Shape["type"].Y = Y + 5; + Y = c4Shape["type"].Y + c4Shape["type"].height; + } else if (c4Shape.techn && c4Shape.techn.text !== "") { + c4Shape.techn.text = "[" + c4Shape.techn.text + "]"; + let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); + calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); + c4Shape["techn"].Y = Y + 5; + Y = c4Shape["techn"].Y + c4Shape["techn"].height; + } + let rectHeight = Y; + let rectWidth = c4Shape.label.width; + if (c4Shape.descr && c4Shape.descr.text !== "") { + let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); + c4Shape["descr"].Y = Y + 20; + Y = c4Shape["descr"].Y + c4Shape["descr"].height; + rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); + rectHeight = Y - c4Shape["descr"].textLines * 5; + } + rectWidth = rectWidth + conf.c4ShapePadding; + c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); + c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); + c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; + currentBounds.insert(c4Shape); + svgDraw.drawC4Shape(diagram2, c4Shape, conf); + } + currentBounds.bumpLastMargin(conf.c4ShapeMargin); +}; +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } +} +let getIntersectPoint = function(fromNode, endPoint) { + let x1 = fromNode.x; + let y1 = fromNode.y; + let x2 = endPoint.x; + let y2 = endPoint.y; + let fromCenterX = x1 + fromNode.width / 2; + let fromCenterY = y1 + fromNode.height / 2; + let dx = Math.abs(x1 - x2); + let dy = Math.abs(y1 - y2); + let tanDYX = dy / dx; + let fromDYX = fromNode.height / fromNode.width; + let returnPoint = null; + if (y1 == y2 && x1 < x2) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY); + } else if (y1 == y2 && x1 > x2) { + returnPoint = new Point(x1, fromCenterY); + } else if (x1 == x2 && y1 < y2) { + returnPoint = new Point(fromCenterX, y1 + fromNode.height); + } else if (x1 == x2 && y1 > y2) { + returnPoint = new Point(fromCenterX, y1); + } + if (x1 > x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX - dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX + dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1); + } + } else if (x1 > x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX); + } else { + returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1); + } + } + return returnPoint; +}; +let getIntersectPoints = function(fromNode, endNode) { + let endIntersectPoint = { x: 0, y: 0 }; + endIntersectPoint.x = endNode.x + endNode.width / 2; + endIntersectPoint.y = endNode.y + endNode.height / 2; + let startPoint = getIntersectPoint(fromNode, endIntersectPoint); + endIntersectPoint.x = fromNode.x + fromNode.width / 2; + endIntersectPoint.y = fromNode.y + fromNode.height / 2; + let endPoint = getIntersectPoint(endNode, endIntersectPoint); + return { startPoint, endPoint }; +}; +const drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) { + let i = 0; + for (let rel of rels2) { + i = i + 1; + let relTextWrap = rel.wrap && conf.wrap; + let relConf = messageFont(conf); + let diagramType = diagObj.db.getC4Type(); + if (diagramType === "C4Dynamic") { + rel.label.text = i + ": " + rel.label.text; + } + let textLimitWidth = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.label.text, relConf); + calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth); + if (rel.techn && rel.techn.text !== "") { + textLimitWidth = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.techn.text, relConf); + calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth); + } + if (rel.descr && rel.descr.text !== "") { + textLimitWidth = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.descr.text, relConf); + calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth); + } + let fromNode = getC4ShapeObj(rel.from); + let endNode = getC4ShapeObj(rel.to); + let points = getIntersectPoints(fromNode, endNode); + rel.startPoint = points.startPoint; + rel.endPoint = points.endPoint; + } + svgDraw.drawRels(diagram2, rels2, conf); +}; +function drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) { + let currentBounds = new Bounds(diagObj); + currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length); + for (let [i, currentBoundary] of currentBoundaries.entries()) { + let Y = 0; + currentBoundary.image = { width: 0, height: 0, Y: 0 }; + if (currentBoundary.sprite) { + currentBoundary.image.width = 48; + currentBoundary.image.height = 48; + currentBoundary.image.Y = Y; + Y = currentBoundary.image.Y + currentBoundary.image.height; + } + let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; + let currentBoundaryLabelConf = boundaryFont(conf); + currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; + currentBoundaryLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH( + "label", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryLabelConf, + currentBounds.data.widthLimit + ); + currentBoundary["label"].Y = Y + 8; + Y = currentBoundary["label"].Y + currentBoundary["label"].height; + if (currentBoundary.type && currentBoundary.type.text !== "") { + currentBoundary.type.text = "[" + currentBoundary.type.text + "]"; + let currentBoundaryTypeConf = boundaryFont(conf); + calcC4ShapeTextWH( + "type", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryTypeConf, + currentBounds.data.widthLimit + ); + currentBoundary["type"].Y = Y + 5; + Y = currentBoundary["type"].Y + currentBoundary["type"].height; + } + if (currentBoundary.descr && currentBoundary.descr.text !== "") { + let currentBoundaryDescrConf = boundaryFont(conf); + currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; + calcC4ShapeTextWH( + "descr", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryDescrConf, + currentBounds.data.widthLimit + ); + currentBoundary["descr"].Y = Y + 20; + Y = currentBoundary["descr"].Y + currentBoundary["descr"].height; + } + if (i == 0 || i % c4BoundaryInRow === 0) { + let _x = parentBounds.data.startx + conf.diagramMarginX; + let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; + currentBounds.setData(_x, _x, _y, _y); + } else { + let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; + let _y = currentBounds.data.starty; + currentBounds.setData(_x, _x, _y, _y); + } + currentBounds.name = currentBoundary.alias; + let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); + let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); + if (currentPersonOrSystemKeys.length > 0) { + drawC4ShapeArray( + currentBounds, + diagram2, + currentPersonOrSystemArray, + currentPersonOrSystemKeys + ); + } + parentBoundaryAlias = currentBoundary.alias; + let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); + if (nextCurrentBoundarys.length > 0) { + drawInsideBoundary( + diagram2, + parentBoundaryAlias, + currentBounds, + nextCurrentBoundarys, + diagObj + ); + } + if (currentBoundary.alias !== "global") { + drawBoundary(diagram2, currentBoundary, currentBounds); + } + parentBounds.data.stopy = Math.max( + currentBounds.data.stopy + conf.c4ShapeMargin, + parentBounds.data.stopy + ); + parentBounds.data.stopx = Math.max( + currentBounds.data.stopx + conf.c4ShapeMargin, + parentBounds.data.stopx + ); + globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); + globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); + } +} +const draw = function(_text, id, _version, diagObj) { + conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4; + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + let db = diagObj.db; + diagObj.db.setWrap(conf.wrap); + c4ShapeInRow = db.getC4ShapeInRow(); + c4BoundaryInRow = db.getC4BoundaryInRow(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`C:${JSON.stringify(conf, null, 2)}`); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + let screenBounds = new Bounds(diagObj); + screenBounds.setData( + conf.diagramMarginX, + conf.diagramMarginX, + conf.diagramMarginY, + conf.diagramMarginY + ); + screenBounds.data.widthLimit = screen.availWidth; + globalBoundaryMaxX = conf.diagramMarginX; + globalBoundaryMaxY = conf.diagramMarginY; + const title2 = diagObj.db.getTitle(); + let currentBoundaries = diagObj.db.getBoundarys(""); + drawInsideBoundary(diagram2, "", screenBounds, currentBoundaries, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowEnd(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); + screenBounds.data.stopx = globalBoundaryMaxX; + screenBounds.data.stopy = globalBoundaryMaxY; + const box = screenBounds.data; + let boxHeight = box.stopy - box.starty; + let height = boxHeight + 2 * conf.diagramMarginY; + let boxWidth = box.stopx - box.startx; + const width = boxWidth + 2 * conf.diagramMarginX; + if (title2) { + diagram2.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); + } + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title2 ? 60 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, box); +}; +const c4Renderer = { + drawPersonOrSystemArray: drawC4ShapeArray, + drawBoundary, + setConf, + draw +}; +const getStyles = (options) => `.person { + stroke: ${options.personBorder}; + fill: ${options.personBkg}; + } +`; +const c4Styles = getStyles; +const diagram = { + parser: c4Parser, + db: c4Db, + renderer: c4Renderer, + styles: c4Styles, + init: (cnf) => { + c4Renderer.setConf(cnf.c4); + } +}; + + + +/***/ }), + +/***/ 47435: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7608); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/77542238.7e9bbbc5.js b/assets/js/77542238.7e9bbbc5.js new file mode 100644 index 0000000000..3221a52b94 --- /dev/null +++ b/assets/js/77542238.7e9bbbc5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[23091],{79818:(e,s,t)=>{t.r(s),t.d(s,{default:()=>r});var u=t(24246),n=(t(27378),t(88613));function r(){return(0,u.jsx)(n.Z,{})}}}]); \ No newline at end of file diff --git a/assets/js/77da816e.f7fbc837.js b/assets/js/77da816e.f7fbc837.js new file mode 100644 index 0000000000..0a7b6b4c86 --- /dev/null +++ b/assets/js/77da816e.f7fbc837.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[39797],{40805:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},65495:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},38098:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>u});var a=t(24246),r=t(71670);const n={title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2022-10-29T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/2.2",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/2.2/index.mdx",source:"@site/blog/releases/2.2/index.mdx",title:"Docusaurus 2.2",description:"We are happy to announce Docusaurus 2.2.",date:"2022-10-29T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:2.2,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Docusaurus 2.2",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2022-10-29T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1682099337e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Docusaurus 2.3",permalink:"/blog/releases/2.3"},nextItem:{title:"Docusaurus 2.1",permalink:"/blog/2022/09/01/docusaurus-2.1"}},c={image:t(40805).Z,authorsImageUrls:[void 0]},u=[];function l(e){const s={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(s.p,{children:["We are happy to announce ",(0,a.jsx)(s.strong,{children:"Docusaurus 2.2"}),"."]}),"\n",(0,a.jsxs)(s.p,{children:["The upgrade should be easy: as explained in our ",(0,a.jsx)(s.a,{href:"/community/release-process",children:"release process documentation"}),", minor versions respect ",(0,a.jsx)(s.a,{href:"https://semver.org/",children:"Semantic Versioning"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Docusaurus 2.2 social card",src:t(65495).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},71670:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var a=t(27378);const r={},n=a.createContext(r);function o(e){const s=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/77eb9b8f.3b8c2657.js b/assets/js/77eb9b8f.3b8c2657.js new file mode 100644 index 0000000000..319f8612e0 --- /dev/null +++ b/assets/js/77eb9b8f.3b8c2657.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[54724],{51144:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=t(24246),i=t(71670);const o={sidebar_position:1,toc_max_heading_level:4},r="Lifecycle APIs",a={id:"api/plugin-methods/lifecycle-apis",title:"Lifecycle APIs",description:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.",source:"@site/docs/api/plugin-methods/lifecycle-apis.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/lifecycle-apis",permalink:"/docs/api/plugin-methods/lifecycle-apis",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/lifecycle-apis.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1710931664e3,sidebarPosition:1,frontMatter:{sidebar_position:1,toc_max_heading_level:4},sidebar:"api",previous:{title:"Plugin Method References",permalink:"/docs/api/plugin-methods/"},next:{title:"Extending infrastructure",permalink:"/docs/api/plugin-methods/extend-infrastructure"}},d={},c=[{value:"<code>async loadContent()</code>",id:"loadContent",level:2},{value:"<code>async contentLoaded({content, actions})</code>",id:"contentLoaded",level:2},{value:"<code>content</code>",id:"content",level:3},{value:"<code>actions</code>",id:"actions",level:3},{value:"<code>addRoute(config: RouteConfig): void</code>",id:"addRoute",level:4},{value:"<code>createData(name: string, data: any): Promise<string></code>",id:"createData",level:4},{value:"<code>setGlobalData(data: any): void</code>",id:"setGlobalData",level:4},{value:"<code>configureWebpack(config, isServer, utils, content)</code>",id:"configureWebpack",level:2},{value:"<code>config</code>",id:"config",level:3},{value:"<code>isServer</code>",id:"isServer",level:3},{value:"<code>utils</code>",id:"utils",level:3},{value:"<code>content</code>",id:"content-1",level:3},{value:"Merge strategy",id:"merge-strategy",level:3},{value:"Configuring dev server",id:"configuring-dev-server",level:3},{value:"<code>configurePostCss(options)</code>",id:"configurePostCss",level:2},{value:"<code>postBuild(props)</code>",id:"postBuild",level:2},{value:"<code>injectHtmlTags({content})</code>",id:"injectHtmlTags",level:2},{value:"<code>getClientModules()</code>",id:"getClientModules",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"lifecycle-apis",children:"Lifecycle APIs"}),"\n",(0,s.jsx)(n.p,{children:"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files."}),"\n",(0,s.jsx)(n.h2,{id:"loadContent",children:(0,s.jsx)(n.code,{children:"async loadContent()"})}),"\n",(0,s.jsx)(n.p,{children:"Plugins should use this lifecycle to fetch from data sources (filesystem, remote API, headless CMS, etc.) or do some server processing. The return value is the content it needs."}),"\n",(0,s.jsx)(n.p,{children:"For example, this plugin below returns a random integer between 1 and 10 as content."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async loadContent() {\n return 1 + Math.floor(Math.random() * 10);\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"contentLoaded",children:(0,s.jsx)(n.code,{children:"async contentLoaded({content, actions})"})}),"\n",(0,s.jsxs)(n.p,{children:["The data that was loaded in ",(0,s.jsx)(n.code,{children:"loadContent"})," will be consumed in ",(0,s.jsx)(n.code,{children:"contentLoaded"}),". It can be rendered to routes, registered as global data, etc."]}),"\n",(0,s.jsx)(n.h3,{id:"content",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"contentLoaded"})," will be called ",(0,s.jsx)(n.em,{children:"after"})," ",(0,s.jsx)(n.code,{children:"loadContent"})," is done. The return value of ",(0,s.jsx)(n.code,{children:"loadContent()"})," will be passed to ",(0,s.jsx)(n.code,{children:"contentLoaded"})," as ",(0,s.jsx)(n.code,{children:"content"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"actions",children:(0,s.jsx)(n.code,{children:"actions"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"actions"})," contain three functions:"]}),"\n",(0,s.jsx)(n.h4,{id:"addRoute",children:(0,s.jsx)(n.code,{children:"addRoute(config: RouteConfig): void"})}),"\n",(0,s.jsx)(n.p,{children:"Create a route to add to the website."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:'export type RouteConfig = {\n /**\n * With leading slash. Trailing slash will be normalized by config.\n */\n path: string;\n /**\n * Component used to render this route, a path that the bundler can `require`.\n */\n component: string;\n /**\n * Props. Each entry should be `[propName]: pathToPropModule` (created with\n * `createData`)\n */\n modules?: RouteModules;\n /**\n * The route context will wrap the `component`. Use `useRouteContext` to\n * retrieve what\'s declared here. Note that all custom route context declared\n * here will be namespaced under {@link RouteContext.data}.\n */\n context?: RouteModules;\n /**\n * Nested routes config, useful for "layout routes" having subroutes.\n */\n routes?: RouteConfig[];\n /**\n * React router config option: `exact` routes would not match subroutes.\n */\n exact?: boolean;\n /**\n * React router config option: `strict` routes are sensitive to the presence\n * of a trailing slash.\n */\n strict?: boolean;\n /**\n * Used to sort routes.\n * Higher-priority routes will be matched first.\n */\n priority?: number;\n /**\n * Optional route metadata\n */\n metadata?: RouteMetadata;\n /**\n * Extra props; will be available on the client side.\n */\n [propName: string]: unknown;\n};\n\n/**\n * Plugin authors can assign extra metadata to the created routes\n * It is only available on the Node.js side, and not sent to the browser\n * Optional: plugin authors are encouraged but not required to provide it\n *\n * Some plugins might use this data to provide additional features.\n * This is the case of the sitemap plugin to provide support for "lastmod".\n * See also: https://github.com/facebook/docusaurus/pull/9954\n */\nexport type RouteMetadata = {\n /**\n * The source code file path that led to the creation of the current route\n * In official content plugins, this is usually a Markdown or React file\n * This path is expected to be relative to the site directory\n */\n sourceFilePath?: string;\n /**\n * The last updated date of this route\n * This is generally read from the Git history of the sourceFilePath\n * but can also be provided through other means (usually front matter)\n *\n * This has notably been introduced for adding "lastmod" support to the\n * sitemap plugin, see https://github.com/facebook/docusaurus/pull/9954\n */\n lastUpdatedAt?: number;\n};\n\ntype RouteModules = {\n [module: string]: Module | RouteModules | RouteModules[];\n};\n\ntype Module =\n | {\n path: string;\n __import?: boolean;\n query?: ParsedUrlQueryInput;\n }\n | string;\n'})}),"\n",(0,s.jsx)(n.h4,{id:"createData",children:(0,s.jsx)(n.code,{children:"createData(name: string, data: any): Promise<string>"})}),"\n",(0,s.jsx)(n.p,{children:"A declarative callback to create static data (generally JSON or string) which can later be provided to your routes as props. Takes the file name and data to be stored, and returns the actual data file's path."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\n\nexport default function FriendsComponent({friends}) {\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {createData, addRoute} = actions;\n // Create friends.json\n const friends = ['Yangshun', 'Sebastien'];\n const friendsJsonPath = await createData(\n 'friends.json',\n JSON.stringify(friends),\n );\n\n // Add the '/friends' routes, and ensure it receives the friends props\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n modules: {\n // propName -> JSON file path\n friends: friendsJsonPath,\n },\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h4,{id:"setGlobalData",children:(0,s.jsx)(n.code,{children:"setGlobalData(data: any): void"})}),"\n",(0,s.jsx)(n.p,{children:"This function permits one to create some global plugin data that can be read from any page, including the pages created by other plugins, and your theme layout."}),"\n",(0,s.jsxs)(n.p,{children:["This data becomes accessible to your client-side/theme code through the ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#useGlobalData",children:(0,s.jsx)(n.code,{children:"useGlobalData"})})," and ",(0,s.jsx)(n.a,{href:"/docs/docusaurus-core#usePluginData",children:(0,s.jsx)(n.code,{children:"usePluginData"})})," hooks."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Global data is... global: its size affects the loading time of all pages of your site, so try to keep it small. Prefer ",(0,s.jsx)(n.code,{children:"createData"})," and page-specific data whenever possible."]})}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below creates a ",(0,s.jsx)(n.code,{children:"/friends"})," page which displays ",(0,s.jsx)(n.code,{children:"Your friends are: Yangshun, Sebastien"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="website/src/components/Friends.js"',children:"import React from 'react';\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nexport default function FriendsComponent() {\n const {friends} = usePluginData('docusaurus-friends-plugin');\n return <div>Your friends are {friends.join(',')}</div>;\n}\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-friends-plugin/src/index.js"',children:"export default function friendsPlugin(context, options) {\n return {\n name: 'docusaurus-friends-plugin',\n // highlight-start\n async contentLoaded({content, actions}) {\n const {setGlobalData, addRoute} = actions;\n // Create friends global data\n setGlobalData({friends: ['Yangshun', 'Sebastien']});\n\n // Add the '/friends' routes\n addRoute({\n path: '/friends',\n component: '@site/src/components/Friends.js',\n exact: true,\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configureWebpack",children:(0,s.jsx)(n.code,{children:"configureWebpack(config, isServer, utils, content)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies the internal webpack config. If the return value is a JavaScript object, it will be merged into the final config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:(0,s.jsx)(n.code,{children:"webpack-merge"})}),". If it is a function, it will be called and receive ",(0,s.jsx)(n.code,{children:"config"})," as the first argument and an ",(0,s.jsx)(n.code,{children:"isServer"})," flag as the second argument."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["The API of ",(0,s.jsx)(n.code,{children:"configureWebpack"})," will be modified in the future to accept an object (",(0,s.jsx)(n.code,{children:"configureWebpack({config, isServer, utils, content})"}),")"]})}),"\n",(0,s.jsx)(n.h3,{id:"config",children:(0,s.jsx)(n.code,{children:"config"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," is called with ",(0,s.jsx)(n.code,{children:"config"})," generated according to client/server build. You may treat this as the base config to be merged with."]}),"\n",(0,s.jsx)(n.h3,{id:"isServer",children:(0,s.jsx)(n.code,{children:"isServer"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both in server build and in client build. The server build receives ",(0,s.jsx)(n.code,{children:"true"})," and the client build receives ",(0,s.jsx)(n.code,{children:"false"})," as ",(0,s.jsx)(n.code,{children:"isServer"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"utils",children:(0,s.jsx)(n.code,{children:"utils"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," also receives an util object:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getStyleLoaders(isServer: boolean, cssOptions: {[key: string]: any}): Loader[]"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"getJSLoader(isServer: boolean, cacheOptions?: {}): Loader | null"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You may use them to return your webpack configuration conditionally."}),"\n",(0,s.jsxs)(n.p,{children:["For example, this plugin below modify the webpack config to transpile ",(0,s.jsx)(n.code,{children:".foo"})," files."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n // highlight-start\n configureWebpack(config, isServer, utils) {\n const {getJSLoader} = utils;\n return {\n module: {\n rules: [\n {\n test: /\\.foo$/,\n use: [getJSLoader(isServer), 'my-custom-webpack-loader'],\n },\n ],\n },\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"content-1",children:(0,s.jsx)(n.code,{children:"content"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"configureWebpack"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.h3,{id:"merge-strategy",children:"Merge strategy"}),"\n",(0,s.jsxs)(n.p,{children:["We merge the Webpack configuration parts of plugins into the global Webpack config using ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge",children:"webpack-merge"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"It is possible to specify the merge strategy. For example, if you want a webpack rule to be prepended instead of appended:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n mergeStrategy: {'module.rules': 'prepend'},\n module: {rules: [myRuleToPrepend]},\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Read the ",(0,s.jsx)(n.a,{href:"https://github.com/survivejs/webpack-merge#merging-with-strategies",children:"webpack-merge strategy doc"})," for more details."]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-dev-server",children:"Configuring dev server"}),"\n",(0,s.jsxs)(n.p,{children:["The dev server can be configured through returning a ",(0,s.jsx)(n.code,{children:"devServer"})," field."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'custom-docusaurus-plugin',\n configureWebpack(config, isServer, utils) {\n return {\n // highlight-start\n devServer: {\n open: '/docs', // Opens localhost:3000/docs instead of localhost:3000/\n },\n // highlight-end\n };\n },\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"configurePostCss",children:(0,s.jsx)(n.code,{children:"configurePostCss(options)"})}),"\n",(0,s.jsxs)(n.p,{children:["Modifies ",(0,s.jsxs)(n.a,{href:"https://webpack.js.org/loaders/postcss-loader/#postcssoptions",children:[(0,s.jsx)(n.code,{children:"postcssOptions"})," of ",(0,s.jsx)(n.code,{children:"postcss-loader"})]})," during the generation of the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["Should return the mutated ",(0,s.jsx)(n.code,{children:"postcssOptions"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["By default, ",(0,s.jsx)(n.code,{children:"postcssOptions"})," looks like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"const postcssOptions = {\n ident: 'postcss',\n plugins: [require('autoprefixer')],\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n configurePostCss(postcssOptions) {\n // Appends new PostCSS plugin.\n postcssOptions.plugins.push(require('postcss-import'));\n return postcssOptions;\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"postBuild",children:(0,s.jsx)(n.code,{children:"postBuild(props)"})}),"\n",(0,s.jsx)(n.p,{children:"Called when a (production) build finishes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"interface Props {\n siteDir: string;\n generatedFilesDir: string;\n siteConfig: DocusaurusConfig;\n outDir: string;\n baseUrl: string;\n headTags: string;\n preBodyTags: string;\n postBodyTags: string;\n routesPaths: string[];\n plugins: Plugin<any>[];\n content: Content;\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n // highlight-start\n async postBuild({siteConfig = {}, routesPaths = [], outDir}) {\n // Print out to console all the rendered routes.\n routesPaths.map((route) => {\n console.log(route);\n });\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"injectHtmlTags",children:(0,s.jsx)(n.code,{children:"injectHtmlTags({content})"})}),"\n",(0,s.jsx)(n.p,{children:"Inject head and/or body HTML tags to Docusaurus generated HTML."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"injectHtmlTags"})," will be called both with the content loaded by the plugin."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"function injectHtmlTags(): {\n headTags?: HtmlTags;\n preBodyTags?: HtmlTags;\n postBodyTags?: HtmlTags;\n};\n\ntype HtmlTags = string | HtmlTagObject | (string | HtmlTagObject)[];\n\ntype HtmlTagObject = {\n /**\n * Attributes of the HTML tag\n * E.g. `{'disabled': true, 'value': 'demo', 'rel': 'preconnect'}`\n */\n attributes?: {\n [attributeName: string]: string | boolean;\n };\n /**\n * The tag name e.g. `div`, `script`, `link`, `meta`\n */\n tagName: string;\n /**\n * The inner HTML\n */\n innerHTML?: string;\n};\n"})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus-plugin/src/index.js"',children:"export default function (context, options) {\n return {\n name: 'docusaurus-plugin',\n loadContent: async () => {\n return {remoteHeadTags: await fetchHeadTagsFromAPI()};\n },\n // highlight-start\n injectHtmlTags({content}) {\n return {\n headTags: [\n {\n tagName: 'link',\n attributes: {\n rel: 'preconnect',\n href: 'https://www.github.com',\n },\n },\n ...content.remoteHeadTags,\n ],\n preBodyTags: [\n {\n tagName: 'script',\n attributes: {\n charset: 'utf-8',\n src: '/noflash.js',\n },\n },\n ],\n postBodyTags: [`<div> This is post body </div>`],\n };\n },\n // highlight-end\n };\n}\n"})}),"\n",(0,s.jsx)(n.p,{children:"Tags will be added as follows:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"headTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</head>"})," tag after scripts added by config."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"preBodyTags"})," will be inserted after the opening ",(0,s.jsx)(n.code,{children:"<body>"})," tag before any child elements."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"postBodyTags"})," will be inserted before the closing ",(0,s.jsx)(n.code,{children:"</body>"})," tag after all child elements."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"getClientModules",children:(0,s.jsx)(n.code,{children:"getClientModules()"})}),"\n",(0,s.jsxs)(n.p,{children:["Returns an array of paths to the ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#client-modules",children:"client modules"})," that are to be imported into the client bundle."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, to make your theme load a ",(0,s.jsx)(n.code,{children:"customCss"})," or ",(0,s.jsx)(n.code,{children:"customJs"})," file path from ",(0,s.jsx)(n.code,{children:"options"})," passed in by the user:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function (context, options) {\n const {customCss, customJs} = options || {};\n return {\n name: 'name-of-my-theme',\n // highlight-start\n getClientModules() {\n return [customCss, customJs];\n },\n // highlight-end\n };\n}\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var s=t(27378);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/78526.38a573b7.js b/assets/js/78526.38a573b7.js new file mode 100644 index 0000000000..91bb5e2c4b --- /dev/null +++ b/assets/js/78526.38a573b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78526],{71670:(t,e,o)=>{o.d(e,{Z:()=>s,a:()=>r});var i=o(27378);const n={},a=i.createContext(n);function r(t){const e=i.useContext(a);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:r(t.components),i.createElement(a.Provider,{value:e},t.children)}},47257:(t,e,o)=>{o.d(e,{Z:()=>L});var i=o(27378),n=o(31542);const a=(t,e)=>t===e?.tagName?.toUpperCase?.(),r=t=>a("DIV",t)||a("SPAN",t),s=t=>a("IMG",t),h=t=>t.complete&&0!==t.naturalHeight,l=t=>a("SVG",t),d=({height:t,offset:e,width:o})=>Math.min((window.innerWidth-2*e)/o,(window.innerHeight-2*e)/t),c=({containerHeight:t,containerWidth:e,hasScalableSrc:o,offset:i,targetHeight:n,targetWidth:a})=>t&&e?!o&&n&&a?(({containerHeight:t,containerWidth:e,offset:o,targetHeight:i,targetWidth:n})=>{const a=d({height:i,offset:o,width:n}),r=n>i?n/e:i/t;return a>1?r:a*r})({containerHeight:t,containerWidth:e,offset:i,targetHeight:n,targetWidth:a}):d({height:t,offset:i,width:e}):1,m=/url(?:\(['"]?)(.*?)(?:['"]?\))/,g=t=>{if(t){if(s(t))return t.currentSrc;if(r(t)){const e=window.getComputedStyle(t).backgroundImage;if(e)return m.exec(e)?.[1]}}},u=({position:t,relativeNum:e})=>{const o=parseFloat(t);return t.endsWith("%")?e*o/100:o},f=/\.svg$/i,v=({hasZoomImg:t,imgSrc:e,isSvg:o,isZoomed:i,loadedImgEl:n,offset:a,shouldRefresh:s,targetEl:h})=>{const l=o||"data:image/svg+xml"===e?.slice?.(0,18)||t||!(!e||!f.test(e)),d=h.getBoundingClientRect(),m=window.getComputedStyle(h),g=null!=n&&r(h),v=null!=n&&!g,p=(({containerHeight:t,containerLeft:e,containerTop:o,containerWidth:i,hasScalableSrc:n,offset:a,targetHeight:r,targetWidth:s})=>{const h=c({containerHeight:t,containerWidth:i,hasScalableSrc:n,offset:a,targetHeight:r,targetWidth:s});return{top:o,left:e,width:i*h,height:t*h,transform:`translate(0,0) scale(${1/h})`}})({containerHeight:d.height,containerLeft:d.left,containerTop:d.top,containerWidth:d.width,hasScalableSrc:l,offset:a,targetHeight:n?.naturalHeight??d.height,targetWidth:n?.naturalWidth??d.width}),w=v?(({containerHeight:t,containerLeft:e,containerTop:o,containerWidth:i,hasScalableSrc:n,objectFit:a,objectPosition:r,offset:s,targetHeight:h,targetWidth:l})=>{if("scale-down"===a&&(a=l<=i&&h<=t?"none":"contain"),"cover"===a||"contain"===a){const d=i/l,m=t/h,g="cover"===a?Math.max(d,m):Math.min(d,m),[f="50%",v="50%"]=r.split(" "),p=u({position:f,relativeNum:i-l*g}),w=u({position:v,relativeNum:t-h*g}),E=c({containerHeight:h*g,containerWidth:l*g,hasScalableSrc:n,offset:s,targetHeight:h,targetWidth:l});return{top:o+w,left:e+p,width:l*g*E,height:h*g*E,transform:`translate(0,0) scale(${1/E})`}}if("none"===a){const[a="50%",d="50%"]=r.split(" "),m=u({position:a,relativeNum:i-l}),g=u({position:d,relativeNum:t-h}),f=c({containerHeight:h,containerWidth:l,hasScalableSrc:n,offset:s,targetHeight:h,targetWidth:l});return{top:o+g,left:e+m,width:l*f,height:h*f,transform:`translate(0,0) scale(${1/f})`}}if("fill"===a){const e=i/l,o=t/h,a=Math.max(e,o),r=c({containerHeight:h*a,containerWidth:l*a,hasScalableSrc:n,offset:s,targetHeight:h,targetWidth:l});return{width:i*r,height:t*r,transform:`translate(0,0) scale(${1/r})`}}return{}})({containerHeight:d.height,containerLeft:d.left,containerTop:d.top,containerWidth:d.width,hasScalableSrc:l,objectFit:m.objectFit,objectPosition:m.objectPosition,offset:a,targetHeight:n.naturalHeight,targetWidth:n.naturalWidth}):void 0,E=g?(({backgroundPosition:t,backgroundSize:e,containerHeight:o,containerLeft:i,containerTop:n,containerWidth:a,hasScalableSrc:r,offset:s,targetHeight:h,targetWidth:l})=>{if("cover"===e||"contain"===e){const d=a/l,m=o/h,g="cover"===e?Math.max(d,m):Math.min(d,m),[f="50%",v="50%"]=t.split(" "),p=u({position:f,relativeNum:a-l*g}),w=u({position:v,relativeNum:o-h*g}),E=c({containerHeight:h*g,containerWidth:l*g,hasScalableSrc:r,offset:s,targetHeight:h,targetWidth:l});return{top:n+w,left:i+p,width:l*g*E,height:h*g*E,transform:`translate(0,0) scale(${1/E})`}}if("auto"===e){const[e="50%",d="50%"]=t.split(" "),m=u({position:e,relativeNum:a-l}),g=u({position:d,relativeNum:o-h}),f=c({containerHeight:h,containerWidth:l,hasScalableSrc:r,offset:s,targetHeight:h,targetWidth:l});return{top:n+g,left:i+m,width:l*f,height:h*f,transform:`translate(0,0) scale(${1/f})`}}{const[d="50%",m="50%"]=e.split(" "),g=u({position:d,relativeNum:a})/l,f=u({position:m,relativeNum:o})/h,v=Math.min(g,f),[p="50%",w="50%"]=t.split(" "),E=u({position:p,relativeNum:a-l*v}),S=u({position:w,relativeNum:o-h*v}),b=c({containerHeight:h*v,containerWidth:l*v,hasScalableSrc:r,offset:s,targetHeight:h,targetWidth:l});return{top:n+S,left:i+E,width:l*v*b,height:h*v*b,transform:`translate(0,0) scale(${1/b})`}}})({backgroundPosition:m.backgroundPosition,backgroundSize:m.backgroundSize,containerHeight:d.height,containerLeft:d.left,containerTop:d.top,containerWidth:d.width,hasScalableSrc:l,offset:a,targetHeight:n.naturalHeight,targetWidth:n.naturalWidth}):void 0,S=Object.assign({},p,w,E);if(i){const t=window.innerWidth/2,e=window.innerHeight/2,o=t-(parseFloat(String(S.left||0))+parseFloat(String(S.width||0))/2),i=e-(parseFloat(String(S.top||0))+parseFloat(String(S.height||0))/2);s&&(S.transitionDuration="0.01ms"),S.transform=`translate(${o}px,${i}px) scale(1)`}return S};let p;"undefined"!=typeof document&&(p=document.createElement("div"),p.setAttribute("data-rmiz-portal",""),document.body.appendChild(p));const w=["img","svg",'[role="img"]',"[data-zoom]"].map((t=>`${t}:not([aria-hidden="true"])`)).join(","),E={overflow:"",width:""};function S(t){return i.createElement(b,{...t})}class b extends i.Component{constructor(){super(...arguments),this.state={id:"",isZoomImgLoaded:!1,loadedImgEl:void 0,modalState:"UNLOADED",shouldRefresh:!1},this.refContent=(0,i.createRef)(),this.refDialog=(0,i.createRef)(),this.refModalContent=(0,i.createRef)(),this.refModalImg=(0,i.createRef)(),this.refWrap=(0,i.createRef)(),this.imgEl=null,this.prevBodyAttrs=E,this.styleModalImg={},this.setId=()=>{const t=()=>Math.random().toString(16).slice(-4);this.setState({id:t()+t()+t()})},this.setAndTrackImg=()=>{const t=this.refContent.current;t&&(this.imgEl=t.querySelector(w),this.imgEl?(this.changeObserver?.disconnect?.(),this.imgEl?.addEventListener?.("load",this.handleImgLoad),this.imgEl?.addEventListener?.("click",this.handleZoom),this.state.loadedImgEl||this.handleImgLoad(),this.imgElObserver=new ResizeObserver((t=>{const e=t[0];e?.target&&(this.imgEl=e.target,this.setState({}))})),this.imgElObserver.observe(this.imgEl)):this.changeObserver||(this.changeObserver=new MutationObserver(this.setAndTrackImg),this.changeObserver.observe(t,{childList:!0,subtree:!0})))},this.handleIfZoomChanged=t=>{const{isZoomed:e}=this.props;!t&&e?this.zoom():t&&!e&&this.unzoom()},this.handleImgLoad=()=>{const{imgEl:t}=this,e=g(t);if(!e)return;const o=new Image;s(t)&&(o.sizes=t.sizes,o.srcset=t.srcset),o.src=e;const i=()=>{this.setState({loadedImgEl:o})};o.decode().then(i).catch((()=>{h(o)?i():o.onload=i}))},this.handleZoom=()=>{this.props.onZoomChange?.(!0)},this.handleUnzoom=()=>{this.props.onZoomChange?.(!1)},this.handleDialogCancel=t=>{t.preventDefault()},this.handleDialogClick=t=>{t.target!==this.refModalContent.current&&t.target!==this.refModalImg.current||this.handleUnzoom()},this.handleDialogKeyDown=t=>{"Escape"!==t.key&&27!==t.keyCode||(t.preventDefault(),t.stopPropagation(),this.handleUnzoom())},this.handleWheel=t=>{t.stopPropagation(),queueMicrotask((()=>{this.handleUnzoom()}))},this.handleTouchStart=t=>{1===t.changedTouches.length&&t.changedTouches[0]&&(this.touchYStart=t.changedTouches[0].screenY)},this.handleTouchMove=t=>{if(null!=this.touchYStart&&t.changedTouches[0]){this.touchYEnd=t.changedTouches[0].screenY;const e=Math.max(this.touchYStart,this.touchYEnd),o=Math.min(this.touchYStart,this.touchYEnd);Math.abs(e-o)>10&&(this.touchYStart=void 0,this.touchYEnd=void 0,this.handleUnzoom())}},this.handleTouchCancel=()=>{this.touchYStart=void 0,this.touchYEnd=void 0},this.handleResize=()=>{this.setState({shouldRefresh:!0})},this.zoom=()=>{this.bodyScrollDisable(),this.refDialog.current?.showModal?.(),this.setState({modalState:"LOADING"}),this.loadZoomImg(),window.addEventListener("wheel",this.handleWheel,{passive:!0}),window.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),window.addEventListener("touchend",this.handleTouchMove,{passive:!0}),window.addEventListener("touchcancel",this.handleTouchCancel,{passive:!0}),this.refModalImg.current?.addEventListener?.("transitionend",this.handleZoomEnd,{once:!0})},this.handleZoomEnd=()=>{setTimeout((()=>{this.setState({modalState:"LOADED"}),window.addEventListener("resize",this.handleResize,{passive:!0})}),0)},this.unzoom=()=>{this.setState({modalState:"UNLOADING"}),window.removeEventListener("wheel",this.handleWheel),window.removeEventListener("touchstart",this.handleTouchStart),window.removeEventListener("touchend",this.handleTouchMove),window.removeEventListener("touchcancel",this.handleTouchCancel),this.refModalImg.current?.addEventListener?.("transitionend",this.handleUnzoomEnd,{once:!0})},this.handleUnzoomEnd=()=>{setTimeout((()=>{window.removeEventListener("resize",this.handleResize),this.setState({shouldRefresh:!1,modalState:"UNLOADED"}),this.refDialog.current?.close?.(),this.bodyScrollEnable()}),0)},this.bodyScrollDisable=()=>{this.prevBodyAttrs={overflow:document.body.style.overflow,width:document.body.style.width};const t=document.body.clientWidth;document.body.style.overflow="hidden",document.body.style.width=`${t}px`},this.bodyScrollEnable=()=>{document.body.style.width=this.prevBodyAttrs.width,document.body.style.overflow=this.prevBodyAttrs.overflow,this.prevBodyAttrs=E},this.loadZoomImg=()=>{const{props:{zoomImg:t}}=this,e=t?.src;if(e){const o=new Image;o.sizes=t?.sizes??"",o.srcset=t?.srcSet??"",o.src=e;const i=()=>{this.setState({isZoomImgLoaded:!0})};o.decode().then(i).catch((()=>{h(o)?i():o.onload=i}))}},this.UNSAFE_handleSvg=()=>{const{imgEl:t,refModalImg:e,styleModalImg:o}=this;if(l(t)){const i=document.createElement("div");i.innerHTML=t.outerHTML;const n=i.firstChild;n.style.width=`${o.width||0}px`,n.style.height=`${o.height||0}px`,n.addEventListener("click",this.handleUnzoom),e.current?.firstChild?.remove?.(),e.current?.appendChild?.(n)}}}render(){const{handleDialogCancel:t,handleDialogClick:e,handleDialogKeyDown:o,handleUnzoom:a,handleZoom:h,imgEl:d,props:{a11yNameButtonUnzoom:c,a11yNameButtonZoom:m,children:u,classDialog:f,IconUnzoom:w,IconZoom:E,isZoomed:S,wrapElement:b,ZoomContent:L,zoomImg:z,zoomMargin:y},refContent:I,refDialog:M,refModalContent:W,refModalImg:C,refWrap:D,state:{id:H,isZoomImgLoaded:Z,loadedImgEl:N,modalState:T,shouldRefresh:U}}=this,A=`rmiz-modal-${H}`,k=`rmiz-modal-img-${H}`,O=r(d),x=s(d),R=l(d),$=(t=>{if(t)return s(t)?t.alt??void 0:t.getAttribute("aria-label")??void 0})(d),B=g(d),P=x?d.sizes:void 0,Y=x?d.srcset:void 0,F=!!z?.src,j=d&&(N||R)&&"none"!==window.getComputedStyle(d).display,G=$?`${m}: ${$}`:m,K="LOADING"===T||"LOADED"===T,_=j?"found":"not-found",q="UNLOADED"===T||"UNLOADING"===T?"hidden":"visible",V={visibility:"UNLOADED"===T?"visible":"hidden"},J=(t=>{if(!t)return{};if(l(t)){const e=t.parentElement,o=t.getBoundingClientRect();if(e){const t=e.getBoundingClientRect();return{height:o.height,left:t.left-o.left,top:t.top-o.top,width:o.width}}return{height:o.height,left:o.left,width:o.width,top:o.top}}return{height:t.offsetHeight,left:t.offsetLeft,width:t.offsetWidth,top:t.offsetTop}})(d);this.styleModalImg=j?v({hasZoomImg:F,imgSrc:B,isSvg:R,isZoomed:S&&K,loadedImgEl:N,offset:y,shouldRefresh:U,targetEl:d}):{};let Q=null;if(j){const t=x||O?i.createElement("img",{alt:$,sizes:P,src:B,srcSet:Y,...Z&&"LOADED"===T?z:{},"data-rmiz-modal-img":"",height:this.styleModalImg.height||void 0,id:k,ref:C,style:this.styleModalImg,width:this.styleModalImg.width||void 0}):R?i.createElement("div",{"data-rmiz-modal-img":!0,ref:C,style:this.styleModalImg}):null,e=i.createElement("button",{"aria-label":c,"data-rmiz-btn-unzoom":"",onClick:a,type:"button"},i.createElement(w,null));Q=L?i.createElement(L,{buttonUnzoom:e,modalState:T,img:t,onUnzoom:a}):i.createElement(i.Fragment,null,t,e)}return i.createElement(b,{"aria-owns":A,"data-rmiz":"",ref:D},i.createElement(b,{"data-rmiz-content":_,ref:I,style:V},u),j&&i.createElement(b,{"data-rmiz-ghost":"",style:J},i.createElement("button",{"aria-label":G,"data-rmiz-btn-zoom":"",onClick:h,type:"button"},i.createElement(E,null))),j&&null!=p&&(0,n.createPortal)(i.createElement("dialog",{"aria-labelledby":k,"aria-modal":"true",className:f,"data-rmiz-modal":"",id:A,onClick:e,onClose:a,onCancel:t,onKeyDown:o,ref:M,role:"dialog"},i.createElement("div",{"data-rmiz-modal-overlay":q}),i.createElement("div",{"data-rmiz-modal-content":"",ref:W},Q)),p))}componentDidMount(){this.setId(),this.setAndTrackImg(),this.handleImgLoad(),this.UNSAFE_handleSvg()}componentWillUnmount(){"UNLOADED"!==this.state.modalState&&this.bodyScrollEnable(),this.changeObserver?.disconnect?.(),this.imgElObserver?.disconnect?.(),this.imgEl?.removeEventListener?.("load",this.handleImgLoad),this.imgEl?.removeEventListener?.("click",this.handleZoom),this.refModalImg.current?.removeEventListener?.("transitionend",this.handleZoomEnd),this.refModalImg.current?.removeEventListener?.("transitionend",this.handleUnzoomEnd),window.removeEventListener("wheel",this.handleWheel),window.removeEventListener("touchstart",this.handleTouchStart),window.removeEventListener("touchend",this.handleTouchMove),window.removeEventListener("touchcancel",this.handleTouchCancel),window.removeEventListener("resize",this.handleResize)}componentDidUpdate(t){this.UNSAFE_handleSvg(),this.handleIfZoomChanged(t.isZoomed)}}function L(t){const[e,o]=(0,i.useState)(!1);return i.createElement(S,{...t,isZoomed:e,onZoomChange:o})}b.defaultProps={a11yNameButtonUnzoom:"Minimize image",a11yNameButtonZoom:"Expand image",IconUnzoom:function(){return i.createElement("svg",{"aria-hidden":"true","data-rmiz-btn-unzoom-icon":!0,fill:"currentColor",focusable:"false",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},i.createElement("path",{d:"M 14.144531 1.148438 L 9 6.292969 L 9 3 L 8 3 L 8 8 L 13 8 L 13 7 L 9.707031 7 L 14.855469 1.851563 Z M 8 8 L 3 8 L 3 9 L 6.292969 9 L 1.148438 14.144531 L 1.851563 14.855469 L 7 9.707031 L 7 13 L 8 13 Z"}))},IconZoom:function(){return i.createElement("svg",{"aria-hidden":"true","data-rmiz-btn-zoom-icon":!0,fill:"currentColor",focusable:"false",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},i.createElement("path",{d:"M 9 1 L 9 2 L 12.292969 2 L 2 12.292969 L 2 9 L 1 9 L 1 14 L 6 14 L 6 13 L 2.707031 13 L 13 2.707031 L 13 6 L 14 6 L 14 1 Z"}))},wrapElement:"div",zoomMargin:0}}}]); \ No newline at end of file diff --git a/assets/js/797b79df.51be12da.js b/assets/js/797b79df.51be12da.js new file mode 100644 index 0000000000..6ddcb0ae11 --- /dev/null +++ b/assets/js/797b79df.51be12da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24017],{12164:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>h});var a=r(24246),i=r(71670);const n={mdx:{format:"md"},date:"2023-11-30T20:00",authors:["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},o="3.0.1",s={permalink:"/changelog/3.0.1",source:"@site/changelog/source/3.0.1.md",title:"3.0.1",description:"Bug Fix",date:"2023-11-30T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Chongyi Zheng",alias:"harryzcy",url:"https://github.com/harryzcy",imageURL:"https://github.com/harryzcy.png",key:"harryzcy"},{name:"MCR Studio",alias:"mcrstudio",url:"https://github.com/mcrstudio",imageURL:"https://github.com/mcrstudio.png",key:"mcrstudio"},{name:"Nick Gerleman",alias:"NickGerleman",url:"https://github.com/NickGerleman",imageURL:"https://github.com/NickGerleman.png",key:"NickGerleman"},{name:"reece-white",alias:"reece-white",url:"https://github.com/reece-white",imageURL:"https://github.com/reece-white.png",key:"reece-white"},{name:"Shreesh Nautiyal",alias:"Shreesh09",url:"https://github.com/Shreesh09",imageURL:"https://github.com/Shreesh09.png",key:"Shreesh09"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2023-11-30T20:00",authors:["harryzcy","mcrstudio","NickGerleman","reece-white","Shreesh09","slorber"]},unlisted:!1,prevItem:{title:"3.1.0",permalink:"/changelog/3.1.0"},nextItem:{title:"3.0.0",permalink:"/changelog/3.0.0"},listPageLink:"/changelog/"},c={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},h=[];function m(e){return(0,a.jsx)(a.Fragment,{})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(m,{...e})}):m()}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>o});var a=r(27378);const i={},n=a.createContext(i);function o(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/799b9126.33a8a6fa.js b/assets/js/799b9126.33a8a6fa.js new file mode 100644 index 0000000000..5da53367aa --- /dev/null +++ b/assets/js/799b9126.33a8a6fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[28109],{50888:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>a});var i=s(24246),o=s(71670);const t={mdx:{format:"md"},date:"2019-06-07T20:00"},l="2.0.0-alpha.19",r={permalink:"/changelog/2.0.0-alpha.19",source:"@site/changelog/source/2.0.0-alpha.19.md",title:"2.0.0-alpha.19",description:"- Add a sensible default for browserslist config.",date:"2019-06-07T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-06-07T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.20",permalink:"/changelog/2.0.0-alpha.20"},nextItem:{title:"V2 Changelog",permalink:"/changelog/V2 Changelog"},listPageLink:"/changelog/page/5"},c={authorsImageUrls:[]},a=[];function d(e){const n={code:"code",li:"li",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Add a sensible default for browserslist config."}),"\n",(0,i.jsxs)(n.li,{children:["UI\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Add sun and moon emoji to the dark mode toggle."}),"\n",(0,i.jsx)(n.li,{children:"Mobile responsive menu."}),"\n",(0,i.jsx)(n.li,{children:"Right table of contents for docs is now sticky."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Plugins\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Change plugin definitions from classes to functions. Refer to the new plugin docs."}),"\n",(0,i.jsx)(n.li,{children:"Implement Clients module API."}),"\n",(0,i.jsxs)(n.li,{children:["Change format within ",(0,i.jsx)(n.code,{children:"docusaurus.config.js"})," to be like presets."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Deps\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Infima CSS is now locked down to specific versions and not relying upon the CDN which reads from trunk."}),"\n",(0,i.jsx)(n.li,{children:"Update dependencies to latest"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Customize/ Override infima CSS variables by passing options into the classic preset."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"presets: [\n [\n '@docusaurus/preset-classic',\n {\n theme: {\n customCss: require.resolve('./css/custom.css'),\n },\n ...\n },\n ],\n],\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Allow passing remark and rehype plugins to mdx-loader for docs and blog plugin"}),"\n",(0,i.jsx)(n.li,{children:"Move themes component of docs and blog to be part of theme-classic"}),"\n",(0,i.jsx)(n.li,{children:"Use composition style for prism syntax highlighting instead of doing it via rehype plugin"}),"\n",(0,i.jsxs)(n.li,{children:["Pass MDXProvider to docs and blog. To change the provided MDX components, run ",(0,i.jsx)(n.code,{children:"docusaurus swizzle @docusaurus/theme-classic MDXComponents"})]}),"\n",(0,i.jsx)(n.li,{children:"Add @docusaurus/theme-livecodeblock plugin"}),"\n",(0,i.jsx)(n.li,{children:"Better run-time code generation & webpack splitchunks optimization"}),"\n",(0,i.jsx)(n.li,{children:"Minify css for production build"}),"\n",(0,i.jsxs)(n.li,{children:["Fix weird scrolling problem when navigating to a route with a ",(0,i.jsx)(n.code,{children:"hash"})," location"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var i=s(27378);const o={},t=i.createContext(o);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a272146.16d1b1dc.js b/assets/js/7a272146.16d1b1dc.js new file mode 100644 index 0000000000..aa06f59501 --- /dev/null +++ b/assets/js/7a272146.16d1b1dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8496],{52431:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>c});var t=n(24246),o=n(71670);const a={sidebar_position:4},s="Static methods",d={id:"api/plugin-methods/static-methods",title:"Static methods",description:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.",source:"@site/docs/api/plugin-methods/static-methods.mdx",sourceDirName:"api/plugin-methods",slug:"/api/plugin-methods/static-methods",permalink:"/docs/api/plugin-methods/static-methods",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/plugin-methods/static-methods.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"api",previous:{title:"I18n lifecycles",permalink:"/docs/api/plugin-methods/i18n-lifecycles"},next:{title:"Plugins overview",permalink:"/docs/api/plugins"}},l={},c=[{value:"<code>validateOptions({options, validate})</code>",id:"validateOptions",level:2},{value:"<code>options</code>",id:"options",level:3},{value:"<code>validate</code>",id:"validate",level:3},{value:"<code>validateThemeConfig({themeConfig, validate})</code>",id:"validateThemeConfig",level:2},{value:"<code>themeConfig</code>",id:"themeConfig",level:3},{value:"<code>validate</code>",id:"validate-1",level:3}];function r(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"static-methods",children:"Static methods"}),"\n",(0,t.jsx)(i.p,{children:"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance."}),"\n",(0,t.jsx)(i.h2,{id:"validateOptions",children:(0,t.jsx)(i.code,{children:"validateOptions({options, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Returns validated and normalized options for the plugin. This method is called before the plugin is initialized. You must return the options since they will be passed to the plugin during initialization."}),"\n",(0,t.jsx)(i.h3,{id:"options",children:(0,t.jsx)(i.code,{children:"options"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"options"})," passed to plugin for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateOptions"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and options as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of options."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options and return options in case of success."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-plugin/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateOptions({options, validate}) {\n const validatedOptions = validate(myValidationSchema, options);\n return validatedOptions;\n}\n// highlight-end\n"})}),"\n",(0,t.jsx)(i.h2,{id:"validateThemeConfig",children:(0,t.jsx)(i.code,{children:"validateThemeConfig({themeConfig, validate})"})}),"\n",(0,t.jsx)(i.p,{children:"Return validated and normalized configuration for the theme."}),"\n",(0,t.jsx)(i.h3,{id:"themeConfig",children:(0,t.jsx)(i.code,{children:"themeConfig"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"themeConfig"})," provided in ",(0,t.jsx)(i.code,{children:"docusaurus.config.js"})," for validation and normalization."]}),"\n",(0,t.jsx)(i.h3,{id:"validate-1",children:(0,t.jsx)(i.code,{children:"validate"})}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"validateThemeConfig"})," is called with ",(0,t.jsx)(i.code,{children:"validate"})," function which takes a ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," schema and ",(0,t.jsx)(i.code,{children:"themeConfig"})," as the arguments, returns validated and normalized options. ",(0,t.jsx)(i.code,{children:"validate"})," will automatically handle error and validation config."]}),"\n",(0,t.jsxs)(i.admonition,{type:"tip",children:[(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})," is recommended for validation and normalization of theme config."]}),(0,t.jsxs)(i.p,{children:["To avoid mixing Joi versions, use ",(0,t.jsx)(i.code,{children:"import {Joi} from '@docusaurus/utils-validation'"})]})]}),"\n",(0,t.jsxs)(i.p,{children:["If you don't use ",(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.a,{href:"https://www.npmjs.com/package/joi",children:"Joi"})})," for validation you can throw an Error in case of invalid options."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-js",metastring:'title="my-theme/src/index.js"',children:"export default function myPlugin(context, options) {\n return {\n name: 'docusaurus-plugin',\n // rest of methods\n };\n}\n\n// highlight-start\nexport function validateThemeConfig({themeConfig, validate}) {\n const validatedThemeConfig = validate(myValidationSchema, options);\n return validatedThemeConfig;\n}\n// highlight-end\n"})})]})}function h(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},71670:(e,i,n)=>{n.d(i,{Z:()=>d,a:()=>s});var t=n(27378);const o={},a=t.createContext(o);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a65db62.fb2150d6.js b/assets/js/7a65db62.fb2150d6.js new file mode 100644 index 0000000000..1f061e1305 --- /dev/null +++ b/assets/js/7a65db62.fb2150d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[16488],{66402:t=>{t.exports=JSON.parse('{"tag":{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag","allTagsPath":"/tests/blog/tags","count":10,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/paginated-tag/page/3","page":3,"postsPerPage":3,"totalPages":4,"totalCount":10,"previousPage":"/tests/blog/tags/paginated-tag/page/2","nextPage":"/tests/blog/tags/paginated-tag/page/4","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7a71cb25.8a33d68c.js b/assets/js/7a71cb25.8a33d68c.js new file mode 100644 index 0000000000..673dc35823 --- /dev/null +++ b/assets/js/7a71cb25.8a33d68c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68751],{5757:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>m,contentTitle:()=>h,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var o=t(24246),n=t(71670);const i={mdx:{format:"md"},date:"2020-04-01T20:00",authors:["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},h="2.0.0-alpha.49",s={permalink:"/changelog/2.0.0-alpha.49",source:"@site/changelog/source/2.0.0-alpha.49.md",title:"2.0.0-alpha.49",description:"New Feature",date:"2020-04-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"38elements",alias:"38elements",url:"https://github.com/38elements",imageURL:"https://github.com/38elements.png",key:"38elements"},{name:"R\xe9mi Doreau",alias:"ayshiff",url:"https://github.com/ayshiff",imageURL:"https://github.com/ayshiff.png",key:"ayshiff"},{name:"bravo-kernel",alias:"bravo-kernel",url:"https://github.com/bravo-kernel",imageURL:"https://github.com/bravo-kernel.png",key:"bravo-kernel"},{name:"Elvis Wolcott",alias:"elviswolcott",url:"https://github.com/elviswolcott",imageURL:"https://github.com/elviswolcott.png",key:"elviswolcott"},{name:"Favour Kelvin",alias:"fakela",url:"https://github.com/fakela",imageURL:"https://github.com/fakela.png",key:"fakela"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"GermaVinsmoke",alias:"GermaVinsmoke",url:"https://github.com/GermaVinsmoke",imageURL:"https://github.com/GermaVinsmoke.png",key:"GermaVinsmoke"},{name:"iamkun",alias:"iamkun",url:"https://github.com/iamkun",imageURL:"https://github.com/iamkun.png",key:"iamkun"},{name:"Jefferson Licet",alias:"jeffersonlicet",url:"https://github.com/jeffersonlicet",imageURL:"https://github.com/jeffersonlicet.png",key:"jeffersonlicet"},{name:"KohheePeace",alias:"KohheePeace",url:"https://github.com/KohheePeace",imageURL:"https://github.com/KohheePeace.png",key:"KohheePeace"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Luke Collier",alias:"lukecollier",url:"https://github.com/lukecollier",imageURL:"https://github.com/lukecollier.png",key:"lukecollier"},{name:"mohrash92",alias:"mohrash92",url:"https://github.com/mohrash92",imageURL:"https://github.com/mohrash92.png",key:"mohrash92"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"Nisar Hassan Naqvi",alias:"nisarhassan12",url:"https://github.com/nisarhassan12",imageURL:"https://github.com/nisarhassan12.png",key:"nisarhassan12"},{name:"Paul Armstrong",alias:"paularmstrong",url:"https://github.com/paularmstrong",imageURL:"https://github.com/paularmstrong.png",key:"paularmstrong"},{name:"Linus L\xe5ngberg",alias:"phoqe",url:"https://github.com/phoqe",imageURL:"https://github.com/phoqe.png",key:"phoqe"},{name:"Ram\xf3n Lamana",alias:"rlamana",url:"https://github.com/rlamana",imageURL:"https://github.com/rlamana.png",key:"rlamana"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Theodore Chu",alias:"TheodoreChu",url:"https://github.com/TheodoreChu",imageURL:"https://github.com/TheodoreChu.png",key:"TheodoreChu"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"ZachJW34",alias:"ZachJW34",url:"https://github.com/ZachJW34",imageURL:"https://github.com/ZachJW34.png",key:"ZachJW34"}],frontMatter:{mdx:{format:"md"},date:"2020-04-01T20:00",authors:["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.50",permalink:"/changelog/2.0.0-alpha.50"},nextItem:{title:"2.0.0-alpha.48",permalink:"/changelog/2.0.0-alpha.48"},listPageLink:"/changelog/page/4"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function r(e){return(0,o.jsx)(o.Fragment,{})}function u(e={}){const{wrapper:a}={...(0,n.a)(),...e.components};return a?(0,o.jsx)(a,{...e,children:(0,o.jsx)(r,{...e})}):r()}},71670:(e,a,t)=>{t.d(a,{Z:()=>s,a:()=>h});var o=t(27378);const n={},i=o.createContext(n);function h(e){const a=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function s(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:h(e.components),o.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ada4fa6.bed4dd11.js b/assets/js/7ada4fa6.bed4dd11.js new file mode 100644 index 0000000000..a66612bc1b --- /dev/null +++ b/assets/js/7ada4fa6.bed4dd11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[42606],{6698:(e,r,n)=>{n.d(r,{Z:()=>c});var s=n(24246),t=(n(27378),n(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(r){a(e,r,n[r])}))}return e}function d(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);r&&(s=s.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,s)}return n}(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})),e}function c({children:e,minHeight:r,url:n="http://localhost:3000",style:a,bodyStyle:c}){return(0,s.jsxs)("div",{className:o.browserWindow,style:d(i({},a),{minHeight:r}),children:[(0,s.jsxs)("div",{className:o.browserWindowHeader,children:[(0,s.jsxs)("div",{className:o.buttons,children:[(0,s.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,s.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,s.jsx)("div",{className:(0,t.Z)(o.browserWindowAddressBar,"text--truncate"),children:n}),(0,s.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar}),(0,s.jsx)("span",{className:o.bar})]})})]}),(0,s.jsx)("div",{className:o.browserWindowBody,style:c,children:e})]})}},79649:(e,r,n)=>{n.d(r,{Z:()=>s});const s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAT3UlEQVR42u1dCVQVV5pWXNt2N0czykl33KImZ7IgKgqIghq3KCDK+qowCek2c2K0Mx3idBxakzYxJnZiq3Gf6Bg7UdN2R51MxnTSia3gew9Rwccm7oqiiIK4sPxTt1hEHo9XvPVW1fed852Dr+67UNb/1f3/+9/731atAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8i2CxGjDUJXzMGmcSZnmoHAF7B6GMJvYPNwq5gk1AmMS/YJMbaahtkNsRLbeghmoU4d7cDAO+NCEbhQCMjrZbe5q81bhdyVOwuXbtqZdDSZ+yau9oBgNcgGeIvmzDQJkUy1ix8ZKMtsWvuagcAXsNYs/iyLSNlIgk2GebLQjKJQ6R/32+mbcWYI8KTrm6HJwR4170yCV80Y6T1I4kklH122lFNG9e2wxMC3Ao/U1KnQLPgF2SK/xeri5TiIxlikX1DBXVANpoXSy/DzGCjYfdYs2FRiFkcxWxEu/GF0RAm3fT1Bv8JJyV+LLlV08ccnNuFCQeGAdrheWkkXxaSGueruZFDurlrzfn4QSbDGRgAqJD3JK4NMcU8oo3RIz1hOB4q6AZeCzKK0aoXCIs58DBBt9Esfip5Ke3UPkN1Eg8TdB8N+5grr+JRxPAJHiLoTgaZhf97MiuqvVqTgNPxEEEPcK0qBTIyNa6rnWw1CLooJjHMUZc6KMWnNs9xDg8Q9ACLQtMMvbhfeFi7tuoLZMhBz1NczaUw2H4OFizhAYFe5l0uM+61m53wgMAWM+C7aBr425Ey2c8umPpdxmO+oxQPWz8cvnOmTGf7Gf1DDHXs25lYxMrIfmafOdnvOe4WONZsk4XhaD7nkJpAPQN96w2a/cw+c7S/QYsC6vuq46D/CHD+7zQaRvDmYsXVbG6CEWmZQ5YGWRk0+8zR/phb1bg/9pkLgvVk/twso+EViETbfPw1PyuDHrDQ36n4o6GL1eHRn7skDhlrEnZyuvbKMN/TIglKM9AzmyfLbzL2sBjZz89sniJfg2G7Nvbwad+m3qB9OrQh/z0RTschzK1yXZAu8zi/CxQ9NJL4fT6d+kwdQG27drB6q9WxXbcO1GfaAPL78wswcBfx6Y2T6ZHxv5DJfuY1acj5Kl55JHHPtOCBaOozZQC18mltUxhWlNoyobjwDQVyng/hVhyBaYbBrEKhW0aNL2Y85LO2lB37daHhX86AAemAPC4z6R5sEt9j6nWXONr8vJ3D4qhj287tIRIIxMP7PmrKd151p1vV3MjRtmt7eiT0F+QbN4z6xQ6T/eO2XdrbbP8z3y5wtyAQT+VAxAh336wcczQVhPfsKM+ANJWsYp+xRFS7Hh2b/C6LSWBIEIgnsuh73T1b1VRA3ql/dxq5d5bd74/4OlJu21TgjtktCMT9uwbdFJDXjx5TBzQ5cigRR71I/hZJ7bpbTwf3mT4QxgSBuHtbrSHcnUlAlstwxXqdgcmjmsyTIJkIgag2SGcZ8qYCckcWyAUdTpBnsBr398yWKTAoCESd07xD3rFeHMdmqxztj81uNe5v6B+CYVAQiAeD9qPiIOkP/NIVN9l//nArg/ZNeNLh/nzjn7Tqr//rw2FQEIg6M+lN7RcY/LvR3PQHupdh6S9R+LH5ZMh8i17NfoeS81bSO6fX0cfn/ps2X/wL7bzyv/TNtYP0z5KjdLw0hwrKL1DR/Rt0r+q+Plys0d/HyMtDGib4nNlx5ur+QPcZuLPQTSa9bjk0oyuM2dX9adm4Zx57jeIzk+lXliX0Ru4KSjm1hlac/S/69MKXtP3yXvrr1b/Td8WplHbzOGWV5dPZO5fo+v0Slxi4ZgTiiUw66BoD/32BPQO/zI2Ba0cgbs6kg9aMPfFbWn5mM/258H80a+CaEYi7M+ngA7JR4ERpHgFqEogbM+lgDSelv0LfFx+B1SNIBxtzWsarlH27ABavZoF4YsOUHhliEuX4AlCOwsJC2rVrF7+JwjHGuU8Em4X9MHDn+afzOzRtzGVlZbR69WqKjY2lqKgoev/996m4uNihvqqrqyklJYU6dKhf3Kq/Pel6izuKK246bYQXLlygvXv30ldffUWZmZlO9cX6CAwMpI4dO1Lbtm3pueeeo61btzrUV1ZWFj3++ONWKxseffRRMpvNLe7vzTffrClF5ONDEydOhIuldb53ZqNTxpyfn08RERFWBsiM2mQytbi/+fPn29zCnJSU1KK+ioqKyNe3poTpU089RRs3bqTt27dTQEBAvUiuXr2quL8ff/xRFgYT7e7duxGk64E/FBsdFsfhw4epR48eNTsvO3WioKAgmjRpEvXu3Vv+rHPnzvTTTz8p7u/dd9+tqXwouS/Lly+nS5cuUUlJCa1fv17ui11j7pFSTJs2Tf4O+7tu3bpV//ndu3fr3v40Y8YMRX1VVFTQkCFD5O8sW7YMmXS98MLdQofEYbFYqFu3brLBsBGEBa11KC0tpcTERPkaa8NGGXs4ePCg/HZu06YN7du3z+r6/v3769/e6enpdvvbs2dPTeHrnj1l968xLl68SN2712yR/vbbb+3299lnn8ltn3jiCbp37x4y6XphedWdFouDBbiDBw+WDWb27NlUWVlp1aaqqooiIyPlNsOHD3/IqBrj9u3bNGjQILnt4sWLbbZbuHCh3Mbf37/J31kH9rvq+mPBuS2w0Yi18fPzk4NvW2C/iwmDtd22bRsy6RAINWvM48aNq48z2L9tgblH/fv3l9suWLDAZrt58+bJbZ5++ulmhcRGpscee8yu4a9YsUJuM2zYMNk1soXy8nLq16+f3Hbnzp0227EJAtZm4MCBVv0hkw4XS8aNGzdkV4S9bZmxMMM6f/683e+lpaVR+/Y1W5A//PBDq+vr1q2Tr7E2GRkZil2nrl27Um5ubpOTBuwaa/PNN9/Y7a/u97MRgsUmjcE+Y8JgbbZs2YJMut6oZGnJ6NGjHz5bQzKYggLlWXf2BmbxA/suC+LZbNKOHTsoLi6OWrduLXPz5s2K+2P5DNYXC5rz8h6sGbt8+bI8qrFrrI3S4JuNNOw7ycnJVtfffvvtZkcjTPNqnMtOb7BrRGPGjJFnlpiRfPDBB826VbbABNGrVy/rii/t2tGqVata7OY9++yz8ve7dOkiC41NAdfNng0dOlR2x5TCaDTKfwf77tKlS2UhsJiEuXFs0oCJ+9ChQ+pYauKOPel65sT0JJckCpXmJVhgzLLZM2fOpEWLFj00ArR0oqCp/AuLj9hI0lIwkbKRrG7mqy42YVyyZIl61mJhqYnruercdtUuI2HTzZs2baK1a9fSkSPOrURm8U1droOxb9++tGHDBixWxGJFkVJLjmEFYoMcCYuxmpsBQ5Cuu+Xu8+hk2SmoQ63L3ZFJ90w8cuD6YVi9KgWCTLrHuDB3uVwep5qqoQC1CASZdM8z+sQb9P6ZTbSjcD+KNnAvEGTSUfYHAkGQDoGhcBymeUGUHkUmHdS6wG5VlmFPOgjq/gAdEMQRbCCoZYEgkw5CIMikgxAIMukgBIJMOgiBIEgHIRBM84KgegSCTDoIgSCTzvcWXbNAv7bE0/oL0fSPG1F0+k4k3aoMp4rqmUSkL8LFAus563gCbb88h4ruR+hOCKoQCIJ07/CFDAP9rWg23a+GILgVCDLp3uGSghi6WREOMXAvEGTSPcrxUpzxtTRqQAQqEQgCck9WNzFQasksCEBVAkEm3WMjB8SBIB20QbhVmOYFbXBpQazLDYjlR25XhetGIJOyXuw5JntuF2TSNVd61EAlLpytqpa4sjCWJmSLMtdcidG2QKhV67CcxHVh2WJVLVcik65zjmVZ9QyRxmcKFHpSJMkoaGqOSHGnDPTGuXj53w1pLIvSnECk+yoPzRZPh2Un/r3x/YZZEifBxdLrcpOMB6JQyt3Fc7QokOb4OoJ0vdEs0LgTLRNGHQ/cnE07JZEcLo2SXTCtC2RCdmJ8aI64MNSSOI25YMik64COiqMxPy6M0cMI0oDCGmTSdeBWuUIcYbWBe6kGZrdacM/VIafF7sikazggb2nMYU8gJZURehJIVUhO0iPIpGt29HCdOBj/qDMXS3ohfIogXctLUDJd516xaeCvb8yhMv24WGekQP2VsFNJ3TDNq1G60r2qY4IkFLWLpIX3fMojIkEm3QsV0LMFlwuEcfS/P0N+ft29ypdf/qWnBEJhFiEJmXQIRDH7RQ2uP5fcW+zbt6PHBDIhJ/EluFhwsRRxzsl4OmgeTyZTiFdZXDzVUwLJd6uLhSBdO0H63huzdRWkM9fKreJAJl07SULGjy7H6iuTbhHXI5Ou8URhGBKFHCcKEZB7fxQ5iqUm/C41QSadk8WKrhHJJ4X6crFCLeKfkEnXiavl7HL31LJZutgPUrfcPSxXmIoNU3rcMGURsGGKpw1TyKTzKZTxmWJtnkT6OSOBxhyYRX6fPW9lML0C+3k9KdgUR47s4dSWW4kF3Gy5RSbdtXTUMEaM6NG84bVuRUNSAiThSCNNlkCDk/25FAfjqFE9XVO0IVtcW1uwoTLMInyEsj86FohSllaGU7mOyv5MPR7bIyRrXmcUjoNAQFR3h0BAVHeHQEBUdwchEFR3ByEQVHdHkA6BQCCY5oVAIBBk0tUrEH//Htwm/jyZSedWIMikc55JVxFdkkmHiwWBgAjSIRAQmXQQAkEmHYRAkEkHeRDIP0ujaOG5eJqWK8j8jfQzOyQHAkEmXfcC2XA12uaOuk1F0RAIgnRtC4Qd4XyifBZZ7kRaHefMRg5722wbjySsD9YX61MLx0OH5cwNnJwX1xXTvDoTyF3JeD8pjKHncx4Y+xTp51VXYuRrrM3CJk6ybUx22u2D/mLlPuquTc4RavqrVv2e9LthOcKqgPNRP0MmXQcCqZAMdsFZ28b/unTNf1QvGpceZ1cg48xx5NPOh4Z/PsVmG79tz1Prtj5q3ZPekD/4mZLaIZOu9dpXx+1XKBl3XFlFk9BMAw1+a4Tddo8Zhqkyk95EQbz5cLG0Xsk9S3TLUQfN8ddnErRS9seMIF3rZ4FYPC+QF3IFrQjkFjLpOAvE5UwsMGhFIBZk0rV+FsgJweMC+Vilp95a34uwBpl0rdffNXtWIKzS+9Hbs2hlYSwZThnkqWA2onx+LZr7KeDGFdxDsw3jwnIS18mnSWWLd9iIEmpJfMvtU8DIpHtwBMny/Ahii/8mBe88JxRb8BJIc3tCEUG6Nt0re/zgcozqBVLrfm3GNK+aC1Ef408cjBM5Po2qhfdS6dZTppBJd2/cEWoRuRQIY8/RfdWQSbfP3LlhSoPuxSGpcb7IpMO1UsIe/n1UkUm3OxrmCsF2jTs09aU+0kO5zQwcLhYHTBe5Fgdb1HirMlwLLtbdSVkv9lSS01ha93CCzMpP4UGQzve5g+7iHzk+z7CF97JWadIvr8EDqmJZcmTSvUSzd5aWKOX8swn1y+tVLpCD001JnezHHkdE/yYe1B17IkEm3U3BeTq/o8faK9Hy0nvVn3JrET5SvAxeeii/sfGwqqSY5DVk0j3sXh3jd/Rgm7V43+Ou8F7uSyyT+P1EizjdnkC+sDPk7x+TPrcvMukemr3K5DtA532PuyP3EZojvtvc9G6mggd3LcgoLAg49PD6FQTp7li5K6hGIE3tcVejQGSRWBKn2RpBLrXgAbK2vws0zu2PaV7t7P1whnV73NUuEHZstC2B3HFwtuVIkEn8cKxRiJFGkn8NyZgbGGw07IaROzmCZKtLIGyPu6oz6fY2VkkP5R4MEwJxlCGmOG4y6ferw525l5u2BHIdhsmRQOBiOUy2gNLhGCRb/M6ZIB3U8PZaZ5haNosbgRTcjXT8XnKFqbZGkK9gmDxtjlKPOLZwNs37j1uzHbwXYWlzOwMXwTCRKFSaKJyeK8huFU8jh5K6xNaJQqGUuVU2R476aVqzOAqGiaUmSnjmXiTXy0xePZOgLN7ISxymfL06pfhID+YcjJMTgXAah7xymu9CclfuR8jFJhTcy1EHSvgYlsE41VVq1NPccX0O1wJhFVcU3UuOmNzyfeWpcb7Ih/C1YYqnfAirsnijkt8l7iz/EZ1vUJQMnJif0NvRQnBrYZw8bZriRyDbrvE9euwpnqOs1E+OsNjhogsBh17sKT2YIhgnLxunRC7WZc3OF6ic4w1SN6WRLTJP0ehxOSRrXmfn6lwZxWgYJ8r+NKywmMbhdG5DLrkYp+ReqsbnGCa7qij1pzBOVDdh3HqN7zMN/3pjttLA/D9dVt8q6suoNmNNwl9gnPreRPV76c1czbE4WKJyUo6il8euFErxcWkROD9TUqdgk2EfjJOf3IgnRfLepViqrOY37mCbtKbmKhLH1pDvU9q6pVIi29SOmS19zWxNqC3MUM25W6Vg5KhmhRlaUavWHjgoxzAHs1scBe4ZclUOl4sjJt9AxrIoboVRUhmuNCA/F2ZJnOTRs0BC0wy9gk3iamyr5ad2lquCd1alZM2VGG6PNGBJQJbnCM+ze7+sSslKr56RPj7D0K92WQrWbnEiFLYsxZG1W2zEYMszeC0herUiQv77FGTIz7EDcRSVEPUYKMUnyGgYIY0qyVIAuVN6WMdrdyZiuYqXgvixRwX5KOjxmTWLHdnORLZchfnrEdLb9+XTCZKLEiv78GfvRXA0QsykmxXhlF8eST8UR9G6i9H0q7x4Cm10H2HZQoUkhmsSj0/IFnZOyBFeDctNGNoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsI3/BxVeQNnL1kBuAAAAAElFTkSuQmCC"},98583:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>l});var s=n(24246),t=n(71670),o=n(6698);const a={id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},i="Markdown Features",d={id:"guides/markdown-features/introduction",title:"Markdown Features",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",source:"@site/docs/guides/markdown-features/markdown-features-intro.mdx",sourceDirName:"guides/markdown-features",slug:"/markdown-features",permalink:"/docs/markdown-features",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/markdown-features/markdown-features-intro.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1702691426e3,frontMatter:{id:"introduction",description:"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.",slug:"/markdown-features"},sidebar:"docs",previous:{title:"Blog",permalink:"/docs/blog"},next:{title:"MDX and React",permalink:"/docs/markdown-features/react"}},c={},l=[{value:"MDX vs. CommonMark",id:"mdx-vs-commonmark",level:2},{value:"Standard features",id:"standard-features",level:2},{value:"Front matter",id:"front-matter",level:2},{value:"Quotes",id:"quotes",level:2},{value:"Details",id:"details",level:2}];function u(e){const r={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:a}=r;return a||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"markdown-features",children:"Markdown Features"}),"\n","\n",(0,s.jsxs)(r.p,{children:["Docusaurus uses ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://commonmark.org/",children:"Markdown"})})," as its main content authoring format."]}),"\n",(0,s.jsx)(r.admonition,{title:"Learn Markdown",type:"tip",children:(0,s.jsxs)(r.p,{children:["You can ",(0,s.jsx)(r.a,{href:"https://commonmark.org/help/",children:"learn Markdown in 10 minutes"}),"."]})}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus uses modern tooling to help you create ",(0,s.jsx)(r.strong,{children:"interactive documentation"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://mdxjs.com/",children:"MDX"})})," compiler transforms ",(0,s.jsx)(r.strong,{children:"Markdown files to React components"}),", and allows you to use JSX in your Markdown content. This enables you to easily interleave React components within your content, and create delightful learning experiences."]}),"\n",(0,s.jsxs)(r.admonition,{title:"Use the MDX Playground",type:"tip",children:[(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.strong,{children:(0,s.jsx)(r.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"})})," is your new best friend!"]}),(0,s.jsx)(r.p,{children:"It is a very helpful debugging tool that shows how the MDX compiler transforms Markdown to React."}),(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Options"}),": select the right format (MDX or CommonMark) and the following plugins Docusaurus uses: ",(0,s.jsx)(r.code,{children:"remark-gfm"}),", ",(0,s.jsx)(r.code,{children:"remark-directive"}),", ",(0,s.jsx)(r.code,{children:"rehype-raw"}),"."]})]}),"\n",(0,s.jsx)(r.h2,{id:"mdx-vs-commonmark",children:"MDX vs. CommonMark"}),"\n",(0,s.jsxs)(r.p,{children:["Docusaurus compiles both ",(0,s.jsx)(r.code,{children:".md"})," and ",(0,s.jsx)(r.code,{children:".mdx"})," files to React components using the MDX compiler, but ",(0,s.jsx)(r.strong,{children:"the syntax can be interpreted differently"})," depending on your settings."]}),"\n",(0,s.jsxs)(r.p,{children:["The MDX compiler supports ",(0,s.jsx)(r.a,{href:"https://mdxjs.com/packages/mdx/#optionsformat",children:"2 formats"}),":"]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["The ",(0,s.jsx)(r.a,{href:"https://mdxjs.com/docs/what-is-mdx/",children:"MDX format"}),": a powerful parser allowing the usage of JSX"]}),"\n",(0,s.jsxs)(r.li,{children:["The ",(0,s.jsx)(r.a,{href:"https://commonmark.org/",children:"CommonMark format"}),": a standard-compliant Markdown parser that does not allow the usage of JSX"]}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["By default, ",(0,s.jsx)(r.strong,{children:"Docusaurus v3 uses the MDX format for all files"})," (including ",(0,s.jsx)(r.code,{children:".md"})," files) for historical reasons."]}),"\n",(0,s.jsxs)(r.p,{children:["It is possible to ",(0,s.jsx)(r.strong,{children:"opt-in for CommonMark"})," using the ",(0,s.jsx)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(r.code,{children:"siteConfig.markdown.format"})})," setting or the ",(0,s.jsx)(r.code,{children:"format: md"})," front matter."]}),"\n",(0,s.jsxs)(r.admonition,{title:"how to use CommonMark",type:"tip",children:[(0,s.jsxs)(r.p,{children:["If you plan to use CommonMark, we recommend the ",(0,s.jsx)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:(0,s.jsx)(r.code,{children:"siteConfig.markdown.format: 'detect'"})})," setting. The appropriate format will be selected automatically, based on file extensions:"]}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:".md"})," files will use the CommonMark format"]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:".mdx"})," files will use the MDX format"]}),"\n"]})]}),"\n",(0,s.jsx)(r.admonition,{title:"Experimental CommonMark support",type:"danger",children:(0,s.jsxs)(r.p,{children:["The CommonMark support is ",(0,s.jsx)(r.strong,{children:"experimental"})," and currently has a few ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/docusaurus/issues/9092",children:"limitations"}),"."]})}),"\n",(0,s.jsx)(r.h2,{id:"standard-features",children:"Standard features"}),"\n",(0,s.jsx)(r.p,{children:"Markdown is a syntax that enables you to write formatted content in a readable syntax."}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-md",children:"### My Doc Section\n\nHello world message with some **bold** text, some _italic_ text, and a [link](/)\n\n![img alt](/img/docusaurus.png)\n"})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"My Doc Section"}),(0,s.jsxs)(r.p,{children:["Hello world message with some ",(0,s.jsx)(r.strong,{children:"bold"})," text, some ",(0,s.jsx)(r.em,{children:"italic"})," text and a ",(0,s.jsx)(r.a,{href:"/",children:"link"})]}),(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"img alt",src:n(79649).Z+"",width:"200",height:"200"})})]}),"\n",(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Markdown is declarative"}),(0,s.jsxs)(r.p,{children:["Some may assume a 1-1 correlation between Markdown and HTML, e.g., ",(0,s.jsx)(r.code,{children:"![Preview](/img/docusaurus.png)"})," will always become ",(0,s.jsx)(r.code,{children:'<img src="/img/docusaurus.png" alt="Preview" />'}),", as-is. However, ",(0,s.jsx)(r.em,{children:"that is not the case"}),"."]}),(0,s.jsxs)(r.p,{children:["The Markdown syntax ",(0,s.jsx)(r.code,{children:"![message](url)"})," only declaratively tells Docusaurus that an image needs to be inserted here, but we may do other things like transforming a ",(0,s.jsx)(r.a,{href:"/docs/markdown-features/assets#images",children:"file path to URL path"}),", so the generated markup may differ from the output of other Markdown renderers, or a na\xefve hand-transcription to the equivalent JSX/HTML code."]}),(0,s.jsxs)(r.p,{children:["In general, you should only assume the ",(0,s.jsx)(r.em,{children:"semantics"})," of the markup (",(0,s.jsx)(r.code,{children:"```"})," fences become ",(0,s.jsx)(r.a,{href:"/docs/markdown-features/code-blocks",children:"code blocks"}),"; ",(0,s.jsx)(r.code,{children:">"})," becomes ",(0,s.jsx)(r.a,{href:"#quotes",children:"quotes"}),", etc.), but not the actual compiled output."]})]}),"\n",(0,s.jsx)(r.h2,{id:"front-matter",children:"Front matter"}),"\n",(0,s.jsx)(r.p,{children:"Front matter is used to add metadata to your Markdown file. All content plugins have their own front matter schema, and use the front matter to enrich the default metadata inferred from the content or other configuration."}),"\n",(0,s.jsxs)(r.p,{children:["Front matter is provided at the very top of the file, enclosed by three dashes ",(0,s.jsx)(r.code,{children:"---"}),". The content is parsed as ",(0,s.jsx)(r.a,{href:"https://yaml.org/spec/1.2.2/",children:"YAML"}),"."]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-md",children:"---\ntitle: My Doc Title\nmore_data:\n - Can be provided\n - as: objects\n or: arrays\n---\n"})}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsx)(r.p,{children:"The API documentation of each official plugin lists the supported attributes:"}),(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter",children:"Docs front matter"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#markdown-front-matter",children:"Blog front matter"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#markdown-front-matter",children:"Pages front matter"})}),"\n"]})]}),"\n",(0,s.jsxs)(r.admonition,{title:"enhance your front matter",type:"tip",children:[(0,s.jsxs)(r.p,{children:["Use the ",(0,s.jsxs)(r.a,{href:"/docs/api/docusaurus-config#markdown",children:["Markdown config ",(0,s.jsx)(r.code,{children:"parseFrontMatter"})," function"]})," to provide your own front matter parser, or to enhance the default parser."]}),(0,s.jsx)(r.p,{children:"It is possible to reuse the default parser to wrap it with your own custom proprietary logic. This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support."}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n // highlight-start\n parseFrontMatter: async (params) => {\n // Reuse the default parser\n const result = await params.defaultParseFrontMatter(params);\n\n // Process front matter description placeholders\n result.frontMatter.description =\n result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');\n\n // Create your own front matter shortcut\n if (result.frontMatter.i_do_not_want_docs_pagination) {\n result.frontMatter.pagination_prev = null;\n result.frontMatter.pagination_next = null;\n }\n\n // Rename an unsupported front matter coming from another system\n if (result.frontMatter.cms_seo_summary) {\n result.frontMatter.description = result.frontMatter.cms_seo_summary;\n delete result.frontMatter.cms_seo_summary;\n }\n\n return result;\n },\n // highlight-end\n },\n};\n"})})]}),"\n",(0,s.jsx)(r.h2,{id:"quotes",children:"Quotes"}),"\n",(0,s.jsx)(r.p,{children:"Markdown quotes are beautifully styled:"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-md",children:"> Easy to maintain open source documentation websites.\n>\n> \u2014 Docusaurus\n"})}),"\n",(0,s.jsx)(o.Z,{children:(0,s.jsxs)(r.blockquote,{children:["\n",(0,s.jsx)(r.p,{children:"Easy to maintain open source documentation websites."}),"\n",(0,s.jsx)(r.p,{children:"\u2014 Docusaurus"}),"\n"]})}),"\n",(0,s.jsx)(r.h2,{id:"details",children:"Details"}),"\n",(0,s.jsxs)(r.p,{children:["Markdown can embed HTML elements, and ",(0,s.jsx)(r.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details",children:(0,s.jsx)(r.code,{children:"details"})})," HTML elements are beautifully styled:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-md",children:"### Details element example\n\n<details>\n <summary>Toggle me!</summary>\n <div>\n <div>This is the detailed content</div>\n <br/>\n <details>\n <summary>\n Nested toggle! Some surprise inside...\n </summary>\n <div>\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32</div>\n </details>\n </div>\n</details>\n"})}),"\n",(0,s.jsxs)(o.Z,{children:[(0,s.jsx)("h3",{children:"Details element example"}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:"Toggle me!"}),(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{children:"This is the detailed content"}),(0,s.jsx)("br",{}),(0,s.jsxs)(a,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)(r.p,{children:"Nested toggle! Some surprise inside..."})}),(0,s.jsx)("div",{children:"\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32\ud83d\ude32"})]})]})]})]})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>a});var s=n(27378);const t={},o=s.createContext(t);function a(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7c110bd0.d1844b70.js b/assets/js/7c110bd0.d1844b70.js new file mode 100644 index 0000000000..9499683454 --- /dev/null +++ b/assets/js/7c110bd0.d1844b70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[24583],{90919:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Canary \ud83d\udea7","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Introduction","href":"/docs/","docId":"introduction","unlisted":false},{"type":"category","label":"Getting Started","collapsed":false,"items":[{"type":"link","label":"Installation","href":"/docs/installation","docId":"installation","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/configuration","docId":"configuration","unlisted":false},{"type":"link","label":"Playground","href":"/docs/playground","docId":"playground","unlisted":false},{"type":"link","label":"TypeScript Support","href":"/docs/typescript-support","docId":"typescript-support","unlisted":false}],"collapsible":true,"href":"/docs/category/getting-started"},{"type":"category","label":"Guides","items":[{"type":"link","label":"Pages","href":"/docs/creating-pages","docId":"guides/creating-pages","unlisted":false},{"type":"category","label":"Docs","items":[{"type":"link","label":"Create a doc","href":"/docs/create-doc","docId":"guides/docs/create-doc","unlisted":false},{"type":"category","label":"Sidebar","items":[{"type":"link","label":"Sidebar items","href":"/docs/sidebar/items","docId":"guides/docs/sidebar/items","unlisted":false},{"type":"link","label":"Autogenerated","href":"/docs/sidebar/autogenerated","docId":"guides/docs/sidebar/autogenerated","unlisted":false},{"type":"link","label":"Using multiple sidebars","href":"/docs/sidebar/multiple-sidebars","docId":"guides/docs/sidebar/multiple-sidebars","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/sidebar"},{"type":"link","label":"Versioning","href":"/docs/versioning","docId":"guides/docs/versioning","unlisted":false},{"type":"link","label":"Docs Multi-instance","href":"/docs/docs-multi-instance","docId":"guides/docs/multi-instance","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/docs-introduction"},{"type":"link","label":"Blog","href":"/docs/blog","docId":"blog","unlisted":false},{"type":"category","label":"Markdown Features","items":[{"type":"link","label":"MDX and React","href":"/docs/markdown-features/react","docId":"guides/markdown-features/react","unlisted":false},{"type":"link","label":"Tabs","href":"/docs/markdown-features/tabs","docId":"guides/markdown-features/tabs","unlisted":false},{"type":"link","label":"Code blocks","href":"/docs/markdown-features/code-blocks","docId":"guides/markdown-features/code-blocks","unlisted":false},{"type":"link","label":"Admonitions","href":"/docs/markdown-features/admonitions","docId":"guides/markdown-features/admonitions","unlisted":false},{"type":"link","label":"Headings and Table of contents","href":"/docs/markdown-features/toc","docId":"guides/markdown-features/toc","unlisted":false},{"type":"link","label":"Assets","href":"/docs/markdown-features/assets","docId":"guides/markdown-features/assets","unlisted":false},{"type":"link","label":"Markdown links","href":"/docs/markdown-features/links","docId":"guides/markdown-features/links","unlisted":false},{"type":"link","label":"MDX Plugins","href":"/docs/markdown-features/plugins","docId":"guides/markdown-features/plugins","unlisted":false},{"type":"link","label":"Math Equations","href":"/docs/markdown-features/math-equations","docId":"guides/markdown-features/math-equations","unlisted":false},{"type":"link","label":"Diagrams","href":"/docs/markdown-features/diagrams","docId":"guides/markdown-features/diagrams","unlisted":false},{"type":"link","label":"Head metadata","href":"/docs/markdown-features/head-metadata","docId":"guides/markdown-features/head-metadata","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/markdown-features"},{"type":"link","label":"Styling and Layout","href":"/docs/styling-layout","docId":"styling-layout","unlisted":false},{"type":"link","label":"Swizzling","href":"/docs/swizzling","docId":"swizzling","unlisted":false},{"type":"link","label":"Static Assets","href":"/docs/static-assets","docId":"static-assets","unlisted":false},{"type":"link","label":"Search","href":"/docs/search","docId":"search","unlisted":false},{"type":"link","label":"Browser support","href":"/docs/browser-support","docId":"browser-support","unlisted":false},{"type":"link","label":"SEO","href":"/docs/seo","docId":"seo","unlisted":false},{"type":"link","label":"Using Plugins","href":"/docs/using-plugins","docId":"using-plugins","unlisted":false},{"type":"link","label":"Deployment","href":"/docs/deployment","docId":"deployment","unlisted":false},{"type":"category","label":"Internationalization","items":[{"type":"link","label":"Tutorial","href":"/docs/i18n/tutorial","docId":"i18n/tutorial","unlisted":false},{"type":"link","label":"Using Git","href":"/docs/i18n/git","docId":"i18n/git","unlisted":false},{"type":"link","label":"Using Crowdin","href":"/docs/i18n/crowdin","docId":"i18n/crowdin","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/i18n/introduction"},{"type":"link","label":"What\'s next?","href":"/docs/guides/whats-next","docId":"guides/whats-next","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/guides"},{"type":"category","label":"Advanced Guides","items":[{"type":"link","label":"Architecture","href":"/docs/advanced/architecture","docId":"advanced/architecture","unlisted":false},{"type":"link","label":"Plugins","href":"/docs/advanced/plugins","docId":"advanced/plugins","unlisted":false},{"type":"link","label":"Routing","href":"/docs/advanced/routing","docId":"advanced/routing","unlisted":false},{"type":"link","label":"Static site generation","href":"/docs/advanced/ssg","docId":"advanced/ssg","unlisted":false},{"type":"link","label":"Client architecture","href":"/docs/advanced/client","docId":"advanced/client","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/advanced/"},{"type":"category","label":"Upgrading","items":[{"type":"link","label":"To Docusaurus v3","href":"/docs/migration/v3","docId":"migration/v3","unlisted":false},{"type":"category","label":"To Docusaurus v2","items":[{"type":"link","label":"Overview","href":"/docs/migration/v2","docId":"migration/v2/migration-overview","unlisted":false},{"type":"link","label":"Automated migration","href":"/docs/migration/v2/automated","docId":"migration/v2/migration-automated","unlisted":false},{"type":"link","label":"Manual migration","href":"/docs/migration/v2/manual","docId":"migration/v2/migration-manual","unlisted":false},{"type":"link","label":"Versioned sites","href":"/docs/migration/v2/versioned-sites","docId":"migration/v2/migration-versioned-sites","unlisted":false},{"type":"link","label":"Translated sites","href":"/docs/migration/v2/translated-sites","docId":"migration/v2/migration-translated-sites","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true,"href":"/docs/migration"}],"api":[{"type":"link","label":"CLI","href":"/docs/cli","docId":"cli","unlisted":false},{"type":"link","label":"Client API","href":"/docs/docusaurus-core","docId":"docusaurus-core","unlisted":false},{"type":"link","label":"docusaurus.config.js","href":"/docs/api/docusaurus-config","docId":"api/docusaurus.config.js","unlisted":false},{"type":"category","label":"Plugin method references","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Lifecycle APIs","href":"/docs/api/plugin-methods/lifecycle-apis","docId":"api/plugin-methods/lifecycle-apis","unlisted":false},{"type":"link","label":"Extending infrastructure","href":"/docs/api/plugin-methods/extend-infrastructure","docId":"api/plugin-methods/extend-infrastructure","unlisted":false},{"type":"link","label":"I18n lifecycles","href":"/docs/api/plugin-methods/i18n-lifecycles","docId":"api/plugin-methods/i18n-lifecycles","unlisted":false},{"type":"link","label":"Static methods","href":"/docs/api/plugin-methods/static-methods","docId":"api/plugin-methods/static-methods","unlisted":false}],"href":"/docs/api/plugin-methods/"},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udce6 plugin-content-docs","href":"/docs/api/plugins/@docusaurus/plugin-content-docs","docId":"api/plugins/plugin-content-docs","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-content-blog","href":"/docs/api/plugins/@docusaurus/plugin-content-blog","docId":"api/plugins/plugin-content-blog","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-content-pages","href":"/docs/api/plugins/@docusaurus/plugin-content-pages","docId":"api/plugins/plugin-content-pages","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-client-redirects","href":"/docs/api/plugins/@docusaurus/plugin-client-redirects","docId":"api/plugins/plugin-client-redirects","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-debug","href":"/docs/api/plugins/@docusaurus/plugin-debug","docId":"api/plugins/plugin-debug","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-google-analytics","href":"/docs/api/plugins/@docusaurus/plugin-google-analytics","docId":"api/plugins/plugin-google-analytics","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-google-gtag","href":"/docs/api/plugins/@docusaurus/plugin-google-gtag","docId":"api/plugins/plugin-google-gtag","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-google-tag-manager","href":"/docs/api/plugins/@docusaurus/plugin-google-tag-manager","docId":"api/plugins/plugin-google-tag-manager","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-ideal-image","href":"/docs/api/plugins/@docusaurus/plugin-ideal-image","docId":"api/plugins/plugin-ideal-image","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-pwa","href":"/docs/api/plugins/@docusaurus/plugin-pwa","docId":"api/plugins/plugin-pwa","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-sitemap","href":"/docs/api/plugins/@docusaurus/plugin-sitemap","docId":"api/plugins/plugin-sitemap","unlisted":false},{"type":"link","label":"\ud83d\udce6 plugin-vercel-analytics","href":"/docs/api/plugins/@docusaurus/plugin-vercel-analytics","docId":"api/plugins/plugin-vercel-analytics","unlisted":false}],"href":"/docs/api/plugins"},{"type":"category","label":"Themes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/api/themes/configuration","docId":"api/themes/theme-configuration","unlisted":false},{"type":"link","label":"\ud83d\udce6 theme-classic","href":"/docs/api/themes/@docusaurus/theme-classic","docId":"api/themes/theme-classic","unlisted":false},{"type":"link","label":"\ud83d\udce6 theme-live-codeblock","href":"/docs/api/themes/@docusaurus/theme-live-codeblock","docId":"api/themes/theme-live-codeblock","unlisted":false},{"type":"link","label":"\ud83d\udce6 theme-search-algolia","href":"/docs/api/themes/@docusaurus/theme-search-algolia","docId":"api/themes/theme-search-algolia","unlisted":false},{"type":"link","label":"\ud83d\udce6 theme-mermaid","href":"/docs/api/themes/@docusaurus/theme-mermaid","docId":"api/themes/theme-mermaid","unlisted":false}],"href":"/docs/api/themes"},{"type":"category","label":"Miscellaneous","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udce6 create-docusaurus","href":"/docs/api/misc/create-docusaurus","docId":"api/misc/create-docusaurus","unlisted":false},{"type":"category","label":"\ud83d\udce6 eslint-plugin","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"no-html-links","href":"/docs/api/misc/@docusaurus/eslint-plugin/no-html-links","docId":"api/misc/eslint-plugin/no-html-links","unlisted":false},{"type":"link","label":"no-untranslated-text","href":"/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text","docId":"api/misc/eslint-plugin/no-untranslated-text","unlisted":false},{"type":"link","label":"prefer-docusaurus-heading","href":"/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading","docId":"api/misc/eslint-plugin/prefer-docusaurus-heading","unlisted":false},{"type":"link","label":"string-literal-i18n-messages","href":"/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages","docId":"api/misc/eslint-plugin/string-literal-i18n-messages","unlisted":false}],"href":"/docs/api/misc/@docusaurus/eslint-plugin"},{"type":"link","label":"\ud83d\udce6 logger","href":"/docs/api/misc/@docusaurus/logger","docId":"api/misc/logger/logger","unlisted":false}]}]},"docs":{"advanced/architecture":{"id":"advanced/architecture","title":"Architecture","description":"How Docusaurus works to build your app","sidebar":"docs"},"advanced/client":{"id":"advanced/client","title":"Client architecture","description":"How the Docusaurus client is structured","sidebar":"docs"},"advanced/index":{"id":"advanced/index","title":"Advanced Tutorials","description":"This section is not going to be very structured, but we will cover the following topics:","sidebar":"docs"},"advanced/plugins":{"id":"advanced/plugins","title":"Plugins","description":"Plugins are the building blocks of features in a Docusaurus site. Each plugin handles its own individual feature. Plugins may work and be distributed as part of a bundle via presets.","sidebar":"docs"},"advanced/routing":{"id":"advanced/routing","title":"Routing","description":"Docusaurus\' routing system follows single-page application conventions: one route, one component.","sidebar":"docs"},"advanced/ssg":{"id":"advanced/ssg","title":"Static site generation (SSG)","description":"Docusaurus statically renders your React code into HTML, allowing faster load speed and better SEO.","sidebar":"docs"},"api/docusaurus.config.js":{"id":"api/docusaurus.config.js","title":"docusaurus.config.js","description":"API reference for Docusaurus configuration file.","sidebar":"api"},"api/misc/create-docusaurus":{"id":"api/misc/create-docusaurus","title":"\ud83d\udce6 create-docusaurus","description":"A scaffolding utility to help you instantly set up a functional Docusaurus app.","sidebar":"api"},"api/misc/eslint-plugin/no-html-links":{"id":"api/misc/eslint-plugin/no-html-links","title":"no-html-links","description":"Ensure that the Docusaurus ` component is used instead of ` tags.","sidebar":"api"},"api/misc/eslint-plugin/no-untranslated-text":{"id":"api/misc/eslint-plugin/no-untranslated-text","title":"no-untranslated-text","description":"Enforce text labels in JSX to be wrapped by translate calls.","sidebar":"api"},"api/misc/eslint-plugin/prefer-docusaurus-heading":{"id":"api/misc/eslint-plugin/prefer-docusaurus-heading","title":"prefer-docusaurus-heading","description":"Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of `` tags for headings.","sidebar":"api"},"api/misc/eslint-plugin/README":{"id":"api/misc/eslint-plugin/README","title":"\ud83d\udce6 eslint-plugin","description":"ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.","sidebar":"api"},"api/misc/eslint-plugin/string-literal-i18n-messages":{"id":"api/misc/eslint-plugin/string-literal-i18n-messages","title":"string-literal-i18n-messages","description":"Enforce translate APIs to be called on plain text labels.","sidebar":"api"},"api/misc/logger/logger":{"id":"api/misc/logger/logger","title":"\ud83d\udce6 logger","description":"An encapsulated logger for semantically formatting console messages.","sidebar":"api"},"api/plugin-methods/extend-infrastructure":{"id":"api/plugin-methods/extend-infrastructure","title":"Extending infrastructure","description":"Docusaurus has some infrastructure like hot reloading, CLI, and swizzling, that can be extended by external plugins.","sidebar":"api"},"api/plugin-methods/i18n-lifecycles":{"id":"api/plugin-methods/i18n-lifecycles","title":"I18n lifecycles","description":"Plugins use these lifecycles to load i18n-related data.","sidebar":"api"},"api/plugin-methods/lifecycle-apis":{"id":"api/plugin-methods/lifecycle-apis","title":"Lifecycle APIs","description":"During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.","sidebar":"api"},"api/plugin-methods/README":{"id":"api/plugin-methods/README","title":"Plugin Method References","description":"This section is a work in progress. Anchor links or even URLs are not guaranteed to be stable.","sidebar":"api"},"api/plugin-methods/static-methods":{"id":"api/plugin-methods/static-methods","title":"Static methods","description":"Static methods are not part of the plugin instance\u2014they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.","sidebar":"api"},"api/plugins/plugin-client-redirects":{"id":"api/plugins/plugin-client-redirects","title":"\ud83d\udce6 plugin-client-redirects","description":"Docusaurus Plugin to generate client-side redirects.","sidebar":"api"},"api/plugins/plugin-content-blog":{"id":"api/plugins/plugin-content-blog","title":"\ud83d\udce6 plugin-content-blog","description":"Provides the Blog feature and is the default blog plugin for Docusaurus.","sidebar":"api"},"api/plugins/plugin-content-docs":{"id":"api/plugins/plugin-content-docs","title":"\ud83d\udce6 plugin-content-docs","description":"Provides the Docs functionality and is the default docs plugin for Docusaurus.","sidebar":"api"},"api/plugins/plugin-content-pages":{"id":"api/plugins/plugin-content-pages","title":"\ud83d\udce6 plugin-content-pages","description":"The default pages plugin for Docusaurus. The classic template ships with this plugin with default configurations. This plugin provides creating pages functionality.","sidebar":"api"},"api/plugins/plugin-debug":{"id":"api/plugins/plugin-debug","title":"\ud83d\udce6 plugin-debug","description":"The debug plugin will display useful debug information at http3000/docusaurus/debug.","sidebar":"api"},"api/plugins/plugin-google-analytics":{"id":"api/plugins/plugin-google-analytics","title":"\ud83d\udce6 plugin-google-analytics","description":"The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.","sidebar":"api"},"api/plugins/plugin-google-gtag":{"id":"api/plugins/plugin-google-gtag","title":"\ud83d\udce6 plugin-google-gtag","description":"The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.","sidebar":"api"},"api/plugins/plugin-google-tag-manager":{"id":"api/plugins/plugin-google-tag-manager","title":"\ud83d\udce6 plugin-google-tag-manager","description":"A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.","sidebar":"api"},"api/plugins/plugin-ideal-image":{"id":"api/plugins/plugin-ideal-image","title":"\ud83d\udce6 plugin-ideal-image","description":"Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).","sidebar":"api"},"api/plugins/plugin-pwa":{"id":"api/plugins/plugin-pwa","title":"\ud83d\udce6 plugin-pwa","description":"Docusaurus Plugin to add PWA support using Workbox. This plugin generates a Service Worker in production build only, and allows you to create fully PWA-compliant documentation site with offline and installation support.","sidebar":"api"},"api/plugins/plugin-sitemap":{"id":"api/plugins/plugin-sitemap","title":"\ud83d\udce6 plugin-sitemap","description":"This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.","sidebar":"api"},"api/plugins/plugin-vercel-analytics":{"id":"api/plugins/plugin-vercel-analytics","title":"\ud83d\udce6 plugin-vercel-analytics","description":"Vercel Analytics provides comprehensive insights into your website\'s visitors, tracking top pages, referrers, and demographics like location, operating systems, and browser info.","sidebar":"api"},"api/plugins/plugins-overview":{"id":"api/plugins/plugins-overview","title":"Docusaurus plugins","description":"We provide official Docusaurus plugins.","sidebar":"api"},"api/themes/theme-classic":{"id":"api/themes/theme-classic","title":"\ud83d\udce6 theme-classic","description":"The classic theme for Docusaurus.","sidebar":"api"},"api/themes/theme-configuration":{"id":"api/themes/theme-configuration","title":"Theme configuration","description":"This configuration applies to all main themes.","sidebar":"api"},"api/themes/theme-live-codeblock":{"id":"api/themes/theme-live-codeblock","title":"\ud83d\udce6 theme-live-codeblock","description":"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.","sidebar":"api"},"api/themes/theme-mermaid":{"id":"api/themes/theme-mermaid","title":"\ud83d\udce6 theme-mermaid","description":"This theme provides a @theme/Mermaid component that is powered by mermaid. You can read more on diagrams documentation.","sidebar":"api"},"api/themes/theme-search-algolia":{"id":"api/themes/theme-search-algolia","title":"\ud83d\udce6 theme-search-algolia","description":"This theme provides a @theme/SearchBar component that integrates with Algolia DocSearch easily. Combined with @docusaurus/theme-classic, it provides a very easy search integration. You can read more on search documentation.","sidebar":"api"},"api/themes/themes-overview":{"id":"api/themes/themes-overview","title":"Docusaurus themes","description":"We provide official Docusaurus themes.","sidebar":"api"},"blog":{"id":"blog","title":"Blog","description":"Deploy a full-featured blog in no time with Docusaurus.","sidebar":"docs"},"browser-support":{"id":"browser-support","title":"Browser support","description":"How to keep a reasonable bundle size while ensuring sufficient browser support.","sidebar":"docs"},"cli":{"id":"cli","title":"CLI","description":"Docusaurus provides a set of scripts to help you generate, serve, and deploy your website.","sidebar":"api"},"configuration":{"id":"configuration","title":"Configuration","description":"Configuring your site\'s behavior through docusaurus.config.js and more.","sidebar":"docs"},"deployment":{"id":"deployment","title":"Deployment","description":"Deploy your Docusaurus app for production on a range of static site hosting services.","sidebar":"docs"},"docusaurus-core":{"id":"docusaurus-core","title":"Docusaurus Client API","description":"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.","sidebar":"api"},"guides/creating-pages":{"id":"guides/creating-pages","title":"Creating Pages","description":"In this section, we will learn about creating pages in Docusaurus.","sidebar":"docs"},"guides/docs/create-doc":{"id":"guides/docs/create-doc","title":"Create a doc","description":"Create a Markdown Document","sidebar":"docs"},"guides/docs/introduction":{"id":"guides/docs/introduction","title":"Docs Introduction","description":"The docs feature provides users with a way to organize Markdown files in a hierarchical format.","sidebar":"docs"},"guides/docs/multi-instance":{"id":"guides/docs/multi-instance","title":"Docs Multi-instance","description":"Use multiple docs plugin instances on a single Docusaurus site.","sidebar":"docs"},"guides/docs/sidebar/autogenerated":{"id":"guides/docs/sidebar/autogenerated","title":"Autogenerated","description":"Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.","sidebar":"docs"},"guides/docs/sidebar/index":{"id":"guides/docs/sidebar/index","title":"Sidebar","description":"Creating a sidebar is useful to:","sidebar":"docs"},"guides/docs/sidebar/items":{"id":"guides/docs/sidebar/items","title":"Sidebar items","description":"We have introduced three types of item types in the example in the previous section autogenerated, which we will explain in detail later.","sidebar":"docs"},"guides/docs/sidebar/multiple-sidebars":{"id":"guides/docs/sidebar/multiple-sidebars","title":"Using multiple sidebars","description":"You can create a sidebar for each set of Markdown files that you want to group together.","sidebar":"docs"},"guides/docs/versioning":{"id":"guides/docs/versioning","title":"Versioning","description":"You can use the versioning CLI to create a new documentation version based on the latest content in the docs directory. That specific set of documentation will then be preserved and accessible even as the documentation in the docs directory continues to evolve.","sidebar":"docs"},"guides/markdown-features/admonitions":{"id":"guides/markdown-features/admonitions","title":"Admonitions","description":"Handling admonitions/callouts in Docusaurus Markdown","sidebar":"docs"},"guides/markdown-features/assets":{"id":"guides/markdown-features/assets","title":"Assets","description":"Handling assets in Docusaurus Markdown","sidebar":"docs"},"guides/markdown-features/code-blocks":{"id":"guides/markdown-features/code-blocks","title":"Code blocks","description":"Handling code blocks in Docusaurus Markdown","sidebar":"docs"},"guides/markdown-features/diagrams":{"id":"guides/markdown-features/diagrams","title":"Diagrams","description":"Writing diagrams with Mermaid","sidebar":"docs"},"guides/markdown-features/head-metadata":{"id":"guides/markdown-features/head-metadata","title":"Head metadata","description":"Declaring page-specific head metadata through MDX","sidebar":"docs"},"guides/markdown-features/introduction":{"id":"guides/markdown-features/introduction","title":"Markdown Features","description":"Docusaurus uses MDX. Find out more about Docusaurus-specific features when writing Markdown.","sidebar":"docs"},"guides/markdown-features/links":{"id":"guides/markdown-features/links","title":"Markdown links","description":"Links to other pages in Markdown","sidebar":"docs"},"guides/markdown-features/math-equations":{"id":"guides/markdown-features/math-equations","title":"Math Equations","description":"Writing LaTeX Math Equations","sidebar":"docs"},"guides/markdown-features/plugins":{"id":"guides/markdown-features/plugins","title":"MDX Plugins","description":"Using MDX plugins to expand Docusaurus Markdown functionalities","sidebar":"docs"},"guides/markdown-features/react":{"id":"guides/markdown-features/react","title":"MDX and React","description":"Using the power of React in Docusaurus Markdown documents, thanks to MDX","sidebar":"docs"},"guides/markdown-features/tabs":{"id":"guides/markdown-features/tabs","title":"Tabs","description":"Using tabs inside Docusaurus Markdown","sidebar":"docs"},"guides/markdown-features/toc":{"id":"guides/markdown-features/toc","title":"Headings and Table of contents","description":"Customizing headings and table-of-contents in Markdown","sidebar":"docs"},"guides/whats-next":{"id":"guides/whats-next","title":"What\'s next?","description":"Congratulations! You have understood most core features of Docusaurus now. You have:","sidebar":"docs"},"i18n/crowdin":{"id":"i18n/crowdin","title":"i18n - Using Crowdin","description":"The i18n system of Docusaurus is decoupled from any translation software.","sidebar":"docs"},"i18n/git":{"id":"i18n/git","title":"i18n - Using git","description":"A possible translation strategy is to version control the translation files with Git (or any other VCS).","sidebar":"docs"},"i18n/introduction":{"id":"i18n/introduction","title":"i18n - Introduction","description":"It is easy to translate a Docusaurus website with its internationalization (i18n) support.","sidebar":"docs"},"i18n/tutorial":{"id":"i18n/tutorial","title":"i18n - Tutorial","description":"This tutorial will walk you through the basics of the Docusaurus i18n system.","sidebar":"docs"},"installation":{"id":"installation","title":"Installation","description":"How to install Docusaurus locally, and start a Docusaurus site in no time.","sidebar":"docs"},"introduction":{"id":"introduction","title":"Introduction","description":"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.","sidebar":"docs"},"migration/index":{"id":"migration/index","title":"Upgrading Docusaurus","description":"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.","sidebar":"docs"},"migration/v2/migration-automated":{"id":"migration/v2/migration-automated","title":"Automated migration","description":"The migration CLI automatically migrates your v1 website to a v2 website.","sidebar":"docs"},"migration/v2/migration-manual":{"id":"migration/v2/migration-manual","title":"Manual migration","description":"This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.","sidebar":"docs"},"migration/v2/migration-overview":{"id":"migration/v2/migration-overview","title":"Overview","description":"This doc guides you through migrating an existing Docusaurus 1 site to Docusaurus 2.","sidebar":"docs"},"migration/v2/migration-translated-sites":{"id":"migration/v2/migration-translated-sites","title":"Translated sites","description":"This page explains how migrate a translated Docusaurus v1 site to Docusaurus v2.","sidebar":"docs"},"migration/v2/migration-versioned-sites":{"id":"migration/v2/migration-versioned-sites","title":"Versioned sites","description":"Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1\'s approach.","sidebar":"docs"},"migration/v3":{"id":"migration/v3","title":"Upgrading to Docusaurus v3","description":"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.","sidebar":"docs"},"playground":{"id":"playground","title":"Playground","description":"Playgrounds allow you to run Docusaurus in your browser, without installing anything!","sidebar":"docs"},"search":{"id":"search","title":"Search","description":"There are a few options you can use to add search to your website:","sidebar":"docs"},"seo":{"id":"seo","title":"Search engine optimization (SEO)","description":"How to make your Docusaurus site maximally search-engine-friendly.","sidebar":"docs"},"static-assets":{"id":"static-assets","title":"Static Assets","description":"Static assets are the non-code files that are directly copied to the build output. Learn about how they are handled and what the best practices of using static assets are.","sidebar":"docs"},"styling-layout":{"id":"styling-layout","title":"Styling and Layout","description":"A Docusaurus site is a pre-rendered single-page React application. You can style it the way you style React apps.","sidebar":"docs"},"swizzling":{"id":"swizzling","title":"Swizzling","description":"Customize your site\'s appearance through creating your own theme components","sidebar":"docs"},"typescript-support":{"id":"typescript-support","title":"TypeScript Support","description":"Docusaurus is written in TypeScript and provides first-class TypeScript support.","sidebar":"docs"},"using-plugins":{"id":"using-plugins","title":"Using Plugins","description":"The Docusaurus core doesn\'t provide any feature of its own. All features are delegated to individual plugins: the docs feature provided by the docs plugin; the blog feature provided by the blog plugin; or individual pages provided by the pages plugin. If there are no plugins installed, the site won\'t contain any routes.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/7c3d1b8c.c3c70b6b.js b/assets/js/7c3d1b8c.c3c70b6b.js new file mode 100644 index 0000000000..dfabfdf77e --- /dev/null +++ b/assets/js/7c3d1b8c.c3c70b6b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[70365],{90368:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>n,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=r(24246),t=r(71670);const l={mdx:{format:"md"},date:"2020-11-24T20:00",authors:["arcanis","camiluc","lex111","Simek","slorber"]},n="2.0.0-alpha.69",c={permalink:"/changelog/2.0.0-alpha.69",source:"@site/changelog/source/2.0.0-alpha.69.md",title:"2.0.0-alpha.69",description:"New Feature",date:"2020-11-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Ma\xebl Nison",alias:"arcanis",url:"https://github.com/arcanis",imageURL:"https://github.com/arcanis.png",key:"arcanis"},{name:"camiluc",alias:"camiluc",url:"https://github.com/camiluc",imageURL:"https://github.com/camiluc.png",key:"camiluc"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2020-11-24T20:00",authors:["arcanis","camiluc","lex111","Simek","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.70",permalink:"/changelog/2.0.0-alpha.70"},nextItem:{title:"2.0.0-alpha.68",permalink:"/changelog/2.0.0-alpha.68"},listPageLink:"/changelog/page/3"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0]},h=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 5",id:"committers-5",level:2}];function o(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3802",children:"#3802"})," feat(v2): add baseUrlIssueBanner configuration to disable banner (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3807",children:"#3807"})," chore(v2): upgrade Infima to v0.2.0-alpha.18 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3806",children:"#3806"})," fix(v2): remove aria-hidden attr from anchor link of heading (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3784",children:"#3784"})," fix(v2): fix missing logo in dark theme when darkSrc was not set (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3804",children:"#3804"})," fix(v2): Algolia: allow contextualSearch + facetFilters (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3796",children:"#3796"})," Adds createRequire for preset resolution (",(0,i.jsx)(s.a,{href:"https://github.com/arcanis",children:"@arcanis"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3803",children:"#3803"})," docs(v2): fix docusaurus init issue when not using @latest (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3785",children:"#3785"})," docs(v2): recommend Docusaurus 2 usage (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3783",children:"#3783"})," docs(v2): remove @next tags needed to install v2 packages (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3781",children:"#3781"})," docs(v2): rename zeit to vercel (",(0,i.jsx)(s.a,{href:"https://github.com/camiluc",children:"@camiluc"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3800",children:"#3800"})," chore(v2): remove useless stylelint-copyright peerDependency (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3786",children:"#3786"})," chore(v2): ensure publishConfig.access presence with tests (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-5",children:"Committers: 5"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Bartosz Kaszubowski (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ma\xebl Nison (",(0,i.jsx)(s.a,{href:"https://github.com/arcanis",children:"@arcanis"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/camiluc",children:"@camiluc"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>c,a:()=>n});var i=r(27378);const t={},l=i.createContext(t);function n(e){const s=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:n(e.components),i.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7caecc0e.7f40c4d6.js b/assets/js/7caecc0e.7f40c4d6.js new file mode 100644 index 0000000000..9f47a6a5fd --- /dev/null +++ b/assets/js/7caecc0e.7f40c4d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[45193],{41005:t=>{t.exports=JSON.parse('{"tag":{"label":"paginated-tag","permalink":"/tests/blog/tags/paginated-tag","allTagsPath":"/tests/blog/tags","count":10,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/paginated-tag","page":1,"postsPerPage":3,"totalPages":4,"totalCount":10,"nextPage":"/tests/blog/tags/paginated-tag/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7d1ac6e6.7fc63624.js b/assets/js/7d1ac6e6.7fc63624.js new file mode 100644 index 0000000000..052fb379a0 --- /dev/null +++ b/assets/js/7d1ac6e6.7fc63624.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76062],{26468:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=r(24246),n=r(71670);const a={title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},o=void 0,i={permalink:"/blog/2019/12/30/docusaurus-2019-recap",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2019/12-30-docusaurus-2019-recap.mdx",source:"@site/blog/2019/12-30-docusaurus-2019-recap.mdx",title:"Docusaurus 2019 Recap",description:"2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)",date:"2019-12-30T00:00:00.000Z",tags:[{label:"recap",permalink:"/blog/tags/recap"}],readingTime:2.72,hasTruncateMarker:!0,authors:[{name:"Yangshun Tay",title:"Front End Engineer at Meta",url:"https://github.com/yangshun",twitter:"yangshunz",email:"tay.yang.shun@gmail.com",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{title:"Docusaurus 2019 Recap",authors:"yangshun",tags:["recap"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Tribute to Endi",permalink:"/blog/2020/01/07/tribute-to-endi"},nextItem:{title:"Happy 1st Birthday Slash!",permalink:"/blog/2018/12/14/Happy-First-Birthday-Slash"}},u={authorsImageUrls:[void 0]},c=[{value:"Docusaurus 2 (D2)",id:"docusaurus-2-d2",level:2},{value:"GitHub Activity",id:"github-activity",level:2},{value:"Notable Users",id:"notable-users",level:2},{value:"Media",id:"media",level:2},{value:"Community",id:"community",level:2},{value:"Looking Ahead",id:"looking-ahead",level:2}];function l(e){const t={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["2019 was a great year for Docusaurus - we've made tremendous progress on ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus 2"}),". Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/docs/migration",children:"migrate"})," to it! Otherwise we will work with you to make that happen in 2020 :)"]}),"\n",(0,s.jsx)(t.h2,{id:"docusaurus-2-d2",children:"Docusaurus 2 (D2)"}),"\n",(0,s.jsxs)(t.p,{children:["In 2018, we proposed to rebuild ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/789",children:"Docusaurus from the ground up"}),". It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"@endilie"}),", our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over."]}),"\n",(0,s.jsxs)(t.p,{children:["D2's killer features are ",(0,s.jsx)(t.strong,{children:"Dark Mode"})," and its ",(0,s.jsx)(t.strong,{children:"superb performance"}),". D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc."]}),"\n",(0,s.jsxs)(t.p,{children:["Last but not least, we implemented a plugins architecture and turned the repo into a ",(0,s.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages",children:"Lerna monorepo"}),". We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases."]}),"\n",(0,s.jsx)(t.h2,{id:"github-activity",children:"GitHub Activity"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Stars: 10050 \u2192 14632 (+45.6% y/y)"}),"\n",(0,s.jsx)(t.li,{children:"Total Contributors: 182 \u2192 303 (+66.4% y/y). Most of which are non-Facebook contributors"}),"\n",(0,s.jsx)(t.li,{children:"Daily npm Downloads: 728 \u2192 2320 (+218.7% y/y). The peak was in November"}),"\n",(0,s.jsx)(t.li,{children:"D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub"}),"\n",(0,s.jsx)(t.li,{children:"We now have 4 active core contributors! (+100% y/y)"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"notable-users",children:"Notable Users"}),"\n",(0,s.jsx)(t.p,{children:"A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://create-react-app.dev/",children:"Create React App"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://redux.js.org/",children:"Redux"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://draftjs.org/",children:"Draft.js"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"http://facebook.github.io/flux/",children:"Flux"})}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"And welcomed more projects to Docusaurus 1:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://developers.libra.org/",children:"Libra"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://mobx.js.org/",children:"MobX"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://immerjs.github.io/immer/",children:"Immer"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://sorbet.org/",children:"Sorbet"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"media",children:"Media"}),"\n",(0,s.jsxs)(t.p,{children:["Yangshun gave a classroom session during F8 about ",(0,s.jsx)(t.a,{href:"https://www.youtube.com/watch?v=QcGJsf6mgZE",children:"Using Docusaurus to Create Open Source Websites"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"community",children:"Community"}),"\n",(0,s.jsx)(t.p,{children:"A few third-party hosting/development services also has first-class integration with a Docusaurus setup:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/vercel/vercel/tree/main/examples/docusaurus",children:"Vercel deployment"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://codesandbox.io/s/docusaurus-template-x3vg9",children:"CodeSandbox"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://render.com/docs/deploy-docusaurus",children:"Render"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"looking-ahead",children:"Looking Ahead"}),"\n",(0,s.jsxs)(t.p,{children:["D2 has gained some traction among the ",(0,s.jsx)(t.a,{href:"https://docusaurus.io/showcase",children:"developer community"}),". In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!"]}),"\n",(0,s.jsxs)(t.p,{children:["Huge thanks to the community for their contributions, especially the core team - ",(0,s.jsx)(t.a,{href:"https://github.com/endiliey",children:"Endilie Yacop Sucipto"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/lex111",children:"Alexey Pyltsyn"}),", ",(0,s.jsx)(t.a,{href:"https://github.com/wgao19",children:"Wei Gao"}),". Lastly, thank you ",(0,s.jsx)(t.a,{href:"https://github.com/JoelMarcey",children:"Joel Marcey"})," for starting Docusaurus and supporting the project all this time."]}),"\n",(0,s.jsx)(t.p,{children:"Cheers to a great 2020! \ud83c\udf89"})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>i,a:()=>o});var s=r(27378);const n={},a=s.createContext(n);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d66b20e.55934461.js b/assets/js/7d66b20e.55934461.js new file mode 100644 index 0000000000..1ffce9f5ef --- /dev/null +++ b/assets/js/7d66b20e.55934461.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[25783],{27427:t=>{t.exports=JSON.parse('{"tag":{"label":"blog","permalink":"/tests/blog/tags/blog","allTagsPath":"/tests/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/tests/blog/tags/blog/page/2","page":2,"postsPerPage":3,"totalPages":2,"totalCount":4,"previousPage":"/tests/blog/tags/blog","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7dfb83d7.877f3157.js b/assets/js/7dfb83d7.877f3157.js new file mode 100644 index 0000000000..39660e6e75 --- /dev/null +++ b/assets/js/7dfb83d7.877f3157.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91874],{46768:(e,t,s)=>{"use strict";s.d(t,{Z:()=>c});var i=s(24246),A=(s(27378),s(66222)),a=s(36712);function r(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function o(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},i=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),i.forEach((function(t){r(e,t,s[t])}))}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}(Object(t)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(t,s))})),e}function n(e,t){if(null==e)return{};var s,i,A=function(e,t){if(null==e)return{};var s,i,A={},a=Object.keys(e);for(i=0;i<a.length;i++)s=a[i],t.indexOf(s)>=0||(A[s]=e[s]);return A}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)s=a[i],t.indexOf(s)>=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(A[s]=e[s])}return A}function g(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,a.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:s}=e,i=s?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const s=Math.floor(Math.log(e)/Math.log(1024));return 0===s?`${e} ${t[s]}`:`${(e/1024**s).toFixed(1)} ${t[s]}`}(s)})`:"";return(0,a.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:i})}case"offline":return(0,a.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,a.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,a.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function c(e){const{img:t}=e,s=n(e,["img"]);return"string"==typeof t||"default"in t?(0,i.jsx)("img",o({src:"string"==typeof t?t:t.default},s)):(0,i.jsx)(A.Z,p(o({},s),{height:null!==(a=t.src.height)&&void 0!==a?a:100,width:null!==(r=t.src.width)&&void 0!==r?r:100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>p(o({},e),{src:e.path}))),getMessage:g}));var a,r}},7812:(e,t,s)=>{"use strict";s.d(t,{c:()=>n});var i=s(27378),A=s(4423);const a=["zero","one","two","few","many","other"];function r(e){return a.filter((t=>e.includes(t)))}const o={locale:"en",pluralForms:r(["one","other"]),select:e=>1===e?"one":"other"};function p(){const{i18n:{currentLocale:e}}=(0,A.Z)();return(0,i.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:r(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),o}}),[e])}function n(){const e=p();return{selectMessage:(t,s)=>function(e,t,s){const i=e.split("|");if(1===i.length)return i[0];i.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const A=s.select(t),a=s.pluralForms.indexOf(A);return i[Math.min(a,i.length-1)]}(s,t,e)}}},12099:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>ge});var i=s(24246),A=s(36712),a=s(41428),r=s(88613),o=s(52615),p=s(27378),n=s(62821),g=s(7812);function c(e,t){const s=[...e];return s.sort(((e,s)=>t(e)>t(s)?1:t(s)>t(e)?-1:0)),s}const d=[{title:"AgileTs",description:"Global State and Logic Framework for reactive Applications",preview:s(93082),website:"https://agile-ts.org/",source:"https://github.com/agile-ts/documentation",tags:["opensource","design"]},{title:"AI-Speaker",description:"Local, reliable, fast and private Audio and IoT gate.",preview:s(88486),website:"https://ai-speaker.com/",source:"https://github.com/sviete/AIS-WWW",tags:["opensource"]},{title:"Aide Jeune",description:"French Discord server that helps young people who have been bullied or feel bad about themselves",preview:s(31674),website:"https://aidejeune.fr",source:null,tags:[]},{title:"Akara's blog",description:"Personal frontend blog for learning",preview:s(37673),website:"https://messiahhh.github.io/blog/",source:"https://github.com/messiahhh/blog",tags:["opensource","personal"]},{title:"Algolia DocSearch",description:"The best search experience for docs, integrates in minutes, for free",preview:s(90335),website:"https://docsearch.algolia.com/",source:"https://github.com/algolia/docsearch/tree/main/packages/website",tags:["favorite","opensource","product"]},{title:"Apache APISIX",description:"A Dynamic, Real-Time, High-Performance Cloud-Native API Gateway",preview:s(33765),website:"https://apisix.apache.org/",source:"https://github.com/apache/apisix-website",tags:["opensource","i18n","large"]},{title:"Apex FP",description:"Functional programming library for Salesforce Apex",preview:s(71241),website:"https://www.apexfp.org",source:"https://github.com/ipavlic/apex-fp/tree/master/website",tags:["opensource"]},{title:"Astronomer",description:"Enterprise-grade framework for Apache Airflow. Production-ready Airflow environments with just a few clicks",preview:s(49086),website:"https://docs.astronomer.io",source:"https://github.com/astronomer/docs",tags:["product","versioning","opensource"]},{title:"AttoBot",description:"A multi-purpose Discord bot with many features and API integrations that will enhance your Discord experience.",preview:s(38459),website:"https://attobot.xyz",source:"https://github.com/attobot-discord/website",tags:["opensource"]},{title:"Avana Wallet",description:"Solana blockchain non-custodial wallet that connects you to Web3 dapps, DeFi, GameFi and NFT marketplaces.",preview:s(79962),website:"https://docs.avanawallet.com/",source:null,tags:["product"]},{title:"AvN Gateway",description:"The AvN Gateway API is the fastest way to interact with the Aventus Network Blockchain.",preview:s(84867),website:"https://aventus-network-services.github.io/avn-gateway-docs/",source:null,tags:["versioning","product"]},{title:"Awe framework",description:"Awe framework, Build light-weight and functional websites quickly",preview:s(7757),website:"https://docs.aweframework.com/",source:"https://gitlab.com/aweframework/awe/-/tree/develop/website",tags:["opensource","i18n","versioning"]},{title:"Axioms",description:"Axioms Developer Hub and Documentation Portal",preview:s(28106),website:"https://axioms.io/",source:"https://github.com/axioms-io/developer",tags:["opensource","product"]},{title:"Bandwidth",description:"Add powerful communications capabilities to your app from the only API platform with it\u2019s own tier-1 carrier network.",preview:s(65511),website:"https://dev.bandwidth.com/",source:"https://github.com/Bandwidth/api-docs",tags:["opensource","large","product"]},{title:"Benthos",description:"A stream processor for mundane tasks",preview:s(91456),website:"https://benthos.dev/",source:"https://github.com/Jeffail/benthos/tree/main/website",tags:["opensource","large"]},{title:"Blink Shell",description:"A professional, desktop grade terminal for iOS",preview:s(4794),website:"https://docs.blink.sh/",source:"https://github.com/blinksh/docs",tags:["opensource","design","product"]},{title:"johnnyreilly.com",description:"The blog of John Reilly \u2764\ufe0f\ud83c\udf3b",preview:s(15755),website:"https://johnnyreilly.com/",source:"https://github.com/johnnyreilly/blog.johnnyreilly.com",tags:["opensource","personal","large"]},{title:"Blog Matheus Brunelli",description:"Desenvolvimento de software, carreira, dicas de livros e muito JavaScript!",preview:s(6211),website:"https://mrbrunelli.github.io/blog/",source:"https://github.com/mrbrunelli/blog",tags:["opensource","personal"]},{title:"Blogasaurus",description:"A blog written using Docasaurus.",preview:s(41640),website:"https://blog.palashsh.me/",source:"https://github.com/BattleOfPlassey/blogasaurus",tags:["personal","opensource"]},{title:"Botonic",description:"Build Chatbots and Conversational Apps Using React",preview:s(94875),website:"https://botonic.io/",source:"https://github.com/hubtype/botonic/tree/master/docs/website",tags:["opensource"]},{title:"BoxyHQ",description:"Enterprise Readiness made simple",preview:s(39146),website:"https://boxyhq.com/",source:"https://github.com/boxyhq/website",tags:["opensource"]},{title:"Brainboard IDE",description:"The new way to operate & manage your Cloud:\xa0visually.",preview:s(30225),website:"https://docs.brainboard.co/start/cloud-use-cases",source:null,tags:["product","design"]},{title:"Bruce's Wiki",description:"A personal wiki by Bruce Song",preview:s(25158),website:"https://wiki.brucesong.xyz/",source:"https://github.com/recallwei/wiki",tags:["opensource","design","personal"]},{title:"Build Tracker",description:"Track performance budgets & prevent unexpected bloat in your app",preview:s(65525),website:"https://buildtracker.dev",source:"https://github.com/paularmstrong/build-tracker/tree/main/docs",tags:["opensource"]},{title:"Butterfly",description:"The note taking app Linwood Butterfly",preview:s(35342),website:"https://docs.butterfly.linwood.dev",source:"https://github.com/LinwoodCloud/Butterfly/tree/develop/docs",tags:["opensource","i18n","versioning"]},{title:"Chaos Mesh",description:"A Powerful Chaos Engineering Platform for Kubernetes.",preview:s(37693),website:"https://chaos-mesh.org",source:"https://github.com/chaos-mesh/website",tags:["opensource","product","i18n"]},{title:"Charles Ancheta",description:"Charles Ancheta's Blog and Portfolio Website",preview:s(54275),website:"https://charlesancheta.com",source:"https://github.com/cbebe/my-website",tags:["opensource","personal"]},{title:"ChatKitty",description:"A full suite of developer tools for any chat use-case.",preview:s(78049),website:"https://chatkitty.com",source:null,tags:["product"]},{title:"ClarityChallenge",description:"Documentation for the Clarity machine learning challenges for improving hearing aid signal processing",preview:s(858),website:"https://claritychallenge.github.io/clarity_CEC1_doc",source:"https://github.com/claritychallenge/clarity_CEC1_doc",tags:["opensource"]},{title:"Clutch",description:"An extensible API and UI platform for infrastructure tooling",preview:s(20919),website:"https://clutch.sh/",source:"https://github.com/lyft/clutch/tree/main/docs/_website",tags:["opensource"]},{title:"CodeSweetly",description:"The Home of Simplified Web Development Tutorials",preview:s(27674),website:"https://codesweetly.com/",source:null,tags:["personal"]},{title:"CodeYourFuture",description:"The syllabus for CodeYourFuture - a free code school for refugees, asylum seekers and disadvantaged people",preview:s(28599),website:"https://syllabus.codeyourfuture.io/",source:"https://github.com/CodeYourFuture/syllabus",tags:["opensource","product"]},{title:"Comp Labs",description:"Tech-based Blog, Enterprise-Grade Solutions and more...",preview:s(21239),website:"https://complabs.in/",source:"https://github.com/Comp-Labs/comp-labs-website",tags:["opensource"]},{title:"Component Kit",description:"A declarative UI framework for iOS",preview:s(60806),website:"https://componentkit.org",source:null,tags:["meta"]},{title:"ConfigCat Feature Flags",description:"A feature flag and remote configuration service.",preview:s(24981),website:"https://configcat.com/docs/",source:"https://github.com/configcat/docs",tags:["opensource","product"]},{title:"Console Table",description:"Printing Pretty Tables on your console.",preview:s(86361),website:"https://console-table.netlify.app/",source:"https://github.com/ayonious/console-table-docu",tags:["opensource"]},{title:"Country State City API",description:"Get simplified countries, states & cities data without bloating up your database.",preview:s(38597),website:"https://countrystatecity.in/",source:"https://github.com/dr5hn/csc-website",tags:["opensource","product"]},{title:"Create React App",description:"Set up a modern web app by running one command",preview:s(32170),website:"https://facebook.github.io/create-react-app/",source:"https://github.com/facebook/create-react-app/tree/main/docusaurus/website",tags:["opensource","meta"]},{title:"CryptoDevHub",description:"The place where Blockchain- and Crypto developers learn, meet and grow.",preview:s(39034),website:"https://cryptodevhub.io",source:"https://github.com/cryptodevhub/site",tags:["opensource"]},{title:"CyberDrain Improved Partner Portal (CIPP)",description:"Free and open-source multi-tenant management for Microsoft 365.",preview:s(31051),website:"https://cipp.app",source:"https://github.com/KelvinTegelaar/CIPP/tree/website",tags:["opensource"]},{title:"Daily Digest - COVID-19 IN FRANCE",description:"A website that presents daily COVID-19 statistics and news in France in the form of a daily digest.",preview:s(18246),website:"https://covid-fr.misterfishup.com/en/",source:"https://github.com/MisterFISHUP/covid-19-in-france",tags:["opensource","i18n","large"]},{title:"Darklang",description:"A new way of building serverless backends, with no infra, framework or deployment nightmares.",preview:s(31168),website:"https://docs.darklang.com/",source:"https://github.com/darklang/docs",tags:["product","opensource"]},{title:"Dart Code Metrics",description:"Static analysis tool that helps analyse and improve Dart code quality.",preview:s(1338),website:"https://dartcodemetrics.dev/",source:"https://github.com/dart-code-checker/dart-code-metrics",tags:["opensource"]},{title:"Datagit",description:"A persian tutorial website strive to make quality education for everyone.",preview:s(96280),website:"https://datagit.ir/",source:"https://github.com/ghaseminya/datagit_v2.docusaurus",tags:["opensource","favorite","rtl"]},{title:"DevSpace",description:"Deploy & Develop Kubernetes Apps",preview:s(83335),website:"https://devspace.sh/cli/docs/",source:"https://github.com/loft-sh/devspace/tree/master/docs",tags:["opensource"]},{title:"difranca | Tech-Notes",description:"This documentation aims to comprise my learning notes on various tech subjects.",preview:s(91992),website:"https://difranca.github.io/",source:"https://github.com/difranca/difranca.github.io",tags:["opensource","personal"]},{title:"Dime.Scheduler",description:"The resource and project planning solution for the Microsoft Dynamics product suite. Stop puzzling and start planning.",preview:s(25917),website:"https://sdk.dimescheduler.com",source:"https://github.com/dime-scheduler/sdk-dotnet/tree/master/docs",tags:["product","opensource"]},{title:"Digital Support Services Notes",description:"Open source documented notes for Digital Support Services.",preview:s(71564),website:"https://notes.nayanpatel.net",source:"https://github.com/PatelN123/Digital-Support-Notes",tags:["opensource","design","personal"]},{title:"Discord Resources",description:"All Discord resources in one place",preview:s(80810),website:"https://discordresources.com/",source:"https://github.com/Discord-Resources-Wiki/Discord-Resources-Wiki",tags:["opensource"]},{title:"Divine Web Service Framework",description:"A divine collection of awesome web-related Node.js modules",preview:s(18182),website:"https://divine-software.github.io/WSF/",source:"https://github.com/Divine-Software/WSF/tree/master/website",tags:["opensource"]},{title:"Djamaile Rahamat",description:"Djamaile Rahamat Blog on making cool stuff",preview:s(96770),website:"https://djamaile.dev/",source:"https://github.com/djamaile/portfolio",tags:["opensource","personal"]},{title:"Draft.js",description:"Rich Text Editor Framework for React",preview:s(38411),website:"https://draftjs.org/",source:"https://github.com/facebook/draft-js/tree/main/website",tags:["opensource","meta"]},{title:"Drayman",description:"Server-side component framework",preview:s(39200),website:"https://drayman.io/",source:"https://github.com/Claviz/drayman/tree/main/docs",tags:["opensource"]},{title:"Dyte",description:"The most developer friendly live video SDK",preview:s(54077),website:"https://docs.dyte.io",source:"https://github.com/dyte-in/docs",tags:["favorite","product","design","versioning","large","opensource"]},{title:"easy-dates",description:"JavaScript dates library",preview:s(97888),website:"https://easy-dates.dev",source:"https://github.com/sandypockets/easy-dates/tree/main/docs",tags:["opensource"]},{title:"Easyjwt",description:"JWT creation and validation library",preview:s(12948),website:"https://www.easyjwt.org",source:"https://github.com/authdog/easyjwt/tree/master/docs",tags:["opensource","i18n"]},{title:"Easypanel",description:"Server control panel based on Docker",preview:s(44823),website:"https://easypanel.io",source:null,tags:["product"]},{title:"EduLinks",description:"Catalog of free educational resources. STEM, ESL and more.",preview:s(1754),website:"https://edulinks.app",source:null,tags:["product"]},{title:"Eightshift",description:"All the tools you need to start building a modern WordPress project, using all the latest development tools.",preview:s(54589),website:"https://infinum.github.io/eightshift-docs/",source:"https://github.com/infinum/eightshift-docs",tags:["opensource","favorite","design"]},{title:"Enarx",description:"Open source framework for running applications in TEEs (Trusted Execution Environments) based on WebAssembly.",preview:s(24530),website:"https://enarx.dev/",source:"https://github.com/enarx/enarx.github.io",tags:["opensource"]},{title:"Eric JiuRan",description:"Front-end developer blog",preview:s(4083),website:"https://www.siyuanwa.cn/",source:"https://github.com/1084350607/blog",tags:["opensource","personal","i18n"]},{title:"Erxes",description:"Combine all your business tools into one streamlined and integrated open-source framework",preview:s(75936),website:"https://docs.erxes.io/",source:"https://github.com/erxes/erxes/tree/master/docs",tags:["opensource"]},{title:"Eta",description:"Faster embedded JS template engine in TypeScript",preview:s(82408),website:"https://eta.js.org/",source:"https://github.com/eta-dev/eta-docs",tags:["opensource"]},{title:"EverShop",description:"An open-source e-commerce platform with Node and React",preview:s(42518),website:"https://evershop.io/",source:"https://github.com/evershopcommerce/docs",tags:["opensource","product"]},{title:"FAST",description:"The adaptive interface system for modern web experiences.",preview:s(74630),website:"https://www.fast.design/docs/introduction/",source:"https://github.com/microsoft/fast/tree/master/sites/website",tags:["opensource","product"]},{title:"FBT",description:"An internationalization framework",preview:s(48356),website:"https://facebookincubator.github.io/fbt/",source:"https://github.com/facebook/fbt/tree/main/website",tags:["opensource","meta"]},{title:"Fenghua Frontend Developer",description:"Blogs and videos about frontend development",preview:s(93726),website:"https://zxuqian.cn",source:null,tags:["personal","design"]},{title:"Files Gallery",description:"Single-file PHP app that can be dropped into any folder, instantly creating a gallery of files and folders.",preview:s(27139),website:"https://www.files.gallery/",source:null,tags:["product","design"]},{title:"FireCMS",description:"Firebase/Firestore based headless CMS",preview:s(51639),website:"https://firecms.co",source:"https://github.com/Camberi/firecms/tree/master/website",tags:["opensource","design"]},{title:"FirelordJS",description:"TypeScript Wrapper for Firestore",preview:s(91945),website:"https://firelordjs.com",source:"https://github.com/tylim88/FirelordJSDoc",tags:["opensource"]},{title:"Flagsmith",description:"Open Source Feature Flag and Remote Config Service",preview:s(70746),website:"https://docs.flagsmith.com",source:"https://github.com/Flagsmith/flagsmith-docs",tags:["opensource"]},{title:"Flarum",description:"Forums made simple. Modern, fast, and free!",preview:s(45094),website:"https://docs.flarum.org",source:"https://github.com/flarum/docs",tags:["opensource"]},{title:"FlatifyCSS",description:"Modern flat design framework for the web \u2014 inspired by Duolingo design system.",preview:s(32237),website:"https://flatifycss.com",source:"https://github.com/amir2mi/flatifycss/tree/master/website",tags:["opensource","design"]},{title:"FlexIt Analytics",description:"Business Intelligence and Data Analytics platform",preview:s(1374),website:"https://learn.flexitanalytics.com/",source:"https://github.com/ataft/flexit-docs",tags:["opensource","product"]},{title:"Flipper",description:"Extensible mobile app debugger",preview:s(26079),website:"https://fbflipper.com",source:"https://github.com/facebook/flipper/tree/main/website",tags:["opensource","design","meta"]},{title:"Flux",description:"Application architecture for building user interfaces",preview:s(92793),website:"https://facebook.github.io/flux/",source:"https://github.com/facebook/flux/tree/main/website",tags:["opensource","meta"]},{title:"FoalTS",description:"Node.JS framework for building web applications",preview:s(78585),website:"https://foalts.org/",source:"https://github.com/FoalTS/foal/tree/master/docs",tags:["opensource","design","versioning","i18n"]},{title:"FormatJS",description:"Internationalize your web apps on the client & server.",preview:s(94735),website:"https://formatjs.io/",source:"https://github.com/formatjs/formatjs/tree/main/website",tags:["opensource"]},{title:"Froggit",description:"French software factory based entirely on Free Software.",preview:s(13609),website:"https://www.froggit.fr/",source:"https://lab.frogg.it/froggit/www/froggit.fr",tags:["opensource","product"]},{title:"Full Stack Chronicles",description:"A blog only Docusaurus site showcasing cloud, data and full stack design patterns and tutorials",preview:s(12137),website:"https://fullstackchronicles.io/",source:"https://github.com/stackql/fullstackchronicles.io",tags:["opensource","personal"]},{title:"GeekyWeb",description:"Learn to code yourself by exploring documentations, try GeekyWeb once",preview:s(50551),website:"https://geekyweb.eu.org/",source:"https://github.com/Designatory/GeekyWeb",tags:["opensource","design"]},{title:"Ghostly",description:"A divine template/print formatter engine",preview:s(51399),website:"https://divine-software.github.io/ghostly/",source:"https://github.com/Divine-Software/ghostly/tree/master/website",tags:["opensource"]},{title:"Gladys Assistant",description:"A privacy-first, open-source home assistant",preview:s(67663),website:"https://gladysassistant.com/",source:"https://github.com/GladysAssistant/v4-website",tags:["opensource","i18n"]},{title:"Gotenberg",description:"A Docker-powered stateless API for PDF files",preview:s(33117),website:"https://gotenberg.dev/",source:"https://github.com/gotenberg/gotenberg.dev",tags:["opensource","versioning"]},{title:"GTFS-to-HTML",description:"Generate human-readable HTML timetables from GTFS",preview:s(38582),website:"https://gtfstohtml.com",source:"https://github.com/BlinkTagInc/gtfs-to-html/tree/master/www",tags:["opensource"]},{title:"Gulp",description:"A toolkit to automate & enhance your workflow",preview:s(23785),website:"https://gulpjs.com",source:"https://github.com/gulpjs/gulpjs.github.io",tags:["opensource","large"]},{title:"Haochen",description:"My personal website with a blog section to record all tech-related issues I encountered.",preview:s(69537),website:"https://haochenqi.com/",source:"https://github.com/HaochenQ/Haochen-Blog",tags:["personal","opensource"]},{title:"Hashnode Support",description:"A help portal for Hashnode users",preview:s(79008),website:"https://support.hashnode.com/",source:"https://github.com/Hashnode/support",tags:["opensource"]},{title:"Hasura",description:"The fastest way to create a GraphQL API from your data with authorization, real-time subscriptions, and more for free.",preview:s(32423),website:"https://hasura.io/docs/",source:"https://github.com/hasura/graphql-engine/tree/master/docs",tags:["favorite","opensource","product","large"]},{title:"hCaptcha",description:"hCaptcha.com anti-bot service docs",preview:s(40256),website:"https://docs.hcaptcha.com/",source:null,tags:["product"]},{title:"Hermes",description:"JavaScript engine optimized for React Native",preview:s(16923),website:"https://hermesengine.dev",source:"https://github.com/facebook/hermes/tree/main/website",tags:["opensource","meta"]},{title:"Home Assistant",description:"All you need to start developing",preview:s(80101),website:"https://developers.home-assistant.io/",source:"https://github.com/home-assistant/developers.home-assistant",tags:["opensource"]},{title:"httpin",description:"Decode an HTTP request into a custom struct in Go",preview:s(70305),website:"https://ggicci.github.io/httpin/",source:"https://github.com/ggicci/httpin/tree/documentation/docs",tags:["opensource"]},{title:"I am Massoud",description:"The portfolio of Massoud Maboudi, Full Stack Developer",preview:s(74234),website:"https://iammassoud.ir/",source:null,tags:["personal","rtl"]},{title:"icodex",description:"Front end engineer personal website",preview:s(90497),website:"https://icodex.me/",source:"https://github.com/wood3n/icodex-next",tags:["opensource","personal"]},{title:"Idb",description:"iOS Development Bridge",preview:s(22713),website:"https://www.fbidb.io/",source:"https://github.com/facebook/idb/tree/main/website",tags:["opensource","meta"]},{title:"Indent",description:"Indent provides on-demand access control for cloud apps and infrastructure.",preview:s(8531),website:"https://indent.com/developers",source:null,tags:["product","design"]},{title:"IntelAGENT Billing",description:"OHIP Billing Agent",preview:s(48775),website:"https://www.intelagent.ca/",source:"https://github.com/intelagentbilling/docs",tags:["opensource","product"]},{title:"KayaFolio",description:"A Software Engineer's blog, documentation and project portfolio.",preview:s(89075),website:"https://evantay.com/",source:"https://github.com/DigiPie/kaya-folio",tags:["opensource","personal"]},{title:"Kuizuo's Personal Website",description:"A Software Enthusiast's blog, Sharing and Learning",preview:s(83375),website:"https://kuizuo.cn",source:"https://github.com/kuizuo/blog",tags:["personal","opensource","design"]},{title:"Ionic",description:"An open source UI toolkit for building performant, high-quality mobile and desktop apps using web technologies.",preview:s(18391),website:"https://ionicframework.com/docs",source:"https://github.com/ionic-team/ionic-docs",tags:["favorite","opensource","product","design","i18n","versioning","large"]},{title:"IOTA-Wiki",description:"Documentation and wiki for the IOTA project",preview:s(28962),website:"https://wiki.iota.org",source:"https://github.com/iota-community/iota-wiki",tags:["favorite","opensource"]},{title:"Jest",description:"A delightful JavaScript Testing Framework with a focus on simplicity.",preview:s(80775),website:"https://jestjs.io/",source:"https://github.com/facebook/jest/tree/master/website",tags:["favorite","opensource","design","i18n","versioning"]},{title:"Joel PO",description:"A minimalist personal website",preview:s(47338),website:"https://joelpo.github.io",source:"https://github.com/Joelpo/joelpo.github.io",tags:["personal","opensource"]},{title:"Junjie",description:"A personal website",preview:s(99532),website:"https://junjieweb.github.io",source:"https://github.com/junjieweb/junjieweb.github.io",tags:["personal","opensource"]},{title:"K3ai",description:"A lightweight tool to get an AI Infrastructure Stack up in minutes not days.",preview:s(15949),website:"https://k3ai.in/",source:"https://github.com/k3ai/k3ai.github.io",tags:["opensource","product"]},{title:"KaustubhK24",description:"KaustubhK24 blog + Portfolio website",preview:s(87362),website:"https://www.kaustubhk24.com",source:null,tags:["personal"]},{title:"Khyron Realm",description:"Free-to-Play social MMO game that stimulates strategic thinking for achieving goals.",preview:s(64828),website:"https://khyron-realm.com",source:"https://github.com/khyron-realm/khyron-realm-website",tags:["opensource"]},{title:"Kosko",description:"Organize Kubernetes manifests in JavaScript",preview:s(9284),website:"https://kosko.dev",source:"https://github.com/tommy351/kosko/tree/master/website",tags:["opensource"]},{title:"Kotest",description:"Kotlin test framework",preview:s(98124),website:"https://kotest.io",source:"https://github.com/kotest/kotest/tree/master/documentation",tags:["opensource"]},{title:"kube-green",description:"A kubernetes (k8s) operator to suspend your pods when no-one using them to save energy",preview:s(7448),website:"https://kube-green.dev",source:"https://github.com/kube-green/kube-green.github.io",tags:["opensource","product"]},{title:"KubeVela",description:"A modern application engine that adapts to your application's needs, not the other way around.",preview:s(32098),website:"https://kubevela.io/",source:"https://github.com/oam-dev/kubevela.io",tags:["opensource","versioning","i18n"]},{title:"kwatch",description:"monitor & detect crashes in your Kubernetes(K8s) cluster instantly",preview:s(15600),website:"https://kwatch.dev",source:"https://github.com/abahmed/kwatch.dev",tags:["opensource","product"]},{title:"LabVIEW \u7f16\u7a0b\u7ecf\u9a8c",description:"A book for LabVIEW Programming",preview:s(28594),website:"https://lv.qizhen.xyz",source:"https://github.com/ruanqizhen/labview_book",tags:["opensource","i18n"]},{title:"Leedom",description:"A handbook about coding",preview:s(6417),website:"https://dinosaur.leedom.me",source:"https://github.com/leedom92/dinosaur",tags:["opensource","personal"]},{title:"Leon",description:"Your open-source personal assistant.",preview:s(41128),website:"https://docs.getleon.ai",source:"https://github.com/leon-ai/docs.getleon.ai",tags:["opensource","versioning","i18n"]},{title:"Lerna",description:"A fast modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository.",preview:s(63945),website:"https://lerna.js.org",source:"https://github.com/lerna/lerna/tree/main/website",tags:["opensource"]},{title:"Liqvid",description:"Interactive videos in React",preview:s(50543),website:"https://liqvidjs.org/",source:"https://github.com/liqvidjs/liqvidjs.org",tags:["opensource"]},{title:"LiveKit",description:"Open source, scalable, real-time audio and video rooms over WebRTC",preview:s(19019),website:"https://docs.livekit.io",source:"https://github.com/livekit/livekit-docs",tags:["opensource","product","design"]},{title:"Lux Algo",description:"Creation of technical trading tools",preview:s(19559),website:"https://docs.luxalgo.com",source:null,tags:["design","i18n","product"]},{title:"Mailgo",description:"A new concept of mailto and tel links",preview:s(22717),website:"https://mailgo.dev/",source:"https://github.com/manzinello/mailgo.dev",tags:["opensource"]},{title:"MapillaryJS",description:"Interactive, extendable street imagery map experiences",preview:s(63474),website:"https://mapillary.github.io/mapillary-js/",source:"https://github.com/mapillary/mapillary-js/tree/main/doc",tags:["opensource","meta"]},{title:"Matej Jellus",description:"IT enthusiast that loves to write code, try new things and share knowledge.",preview:s(38227),website:"https://juffalow.com/",source:null,tags:["personal"]},{title:"MediaMachine",description:"Infrastructure for User-Generated Video content",preview:s(89534),website:"https://mediamachine.io/",source:null,tags:["product"]},{title:"Meli",description:"Platform to deploy static sites, frontend applications and hosted forms",preview:s(1610),website:"https://docs.meli.sh/",source:"https://github.com/getmeli/meli-docs",tags:["opensource"]},{title:"Memgraph",description:"Memgraph is the platform for graph computation on streaming data",preview:s(7629),website:"https://docs.memgraph.com/",source:"https://github.com/memgraph/docs",tags:["design","large","opensource","product","versioning"]},{title:"Meoo",description:"Personal website with blogs and notes, recording my study and life",preview:s(69702),website:"https://meoo.space",source:"https://github.com/cxOrz/meoo.space",tags:["opensource","personal"]},{title:"Metalyoung Blog",description:"A personal blog to record open source community contributions and open source projects",preview:s(6557),website:"https://www.metalyoung.com",source:null,tags:["personal"]},{title:"Metro",description:"The JavaScript bundler for React Native",preview:s(77701),website:"https://facebook.github.io/metro/",source:"https://github.com/facebook/metro/tree/main/website",tags:["opensource","meta"]},{title:"Mia-Platform",description:"The simplest way to develop and operate modern applications on Kubernetes.",preview:s(75794),website:"https://docs.mia-platform.eu/",source:null,tags:["product","large","versioning"]},{title:"MikroORM",description:"TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns.",preview:s(24871),website:"https://mikro-orm.io",source:"https://github.com/mikro-orm/mikro-orm/tree/master/docs",tags:["opensource","large","versioning"]},{title:"Mint Metrics",description:"Conversion optimisation and web analytics agency from Melbourne, Australia.",preview:s(17802),website:"https://mintmetrics.io/",source:null,tags:["design"]},{title:"Mixcore CMS",description:"Fully Open Source ASP.Net Core / Dotnet Core CMS UI Toolkit",preview:s(14722),website:"https://docs.mixcore.org/",source:"https://github.com/mixcore/docs/tree/master/website",tags:["opensource"]},{title:"moja global",description:"A non-profit project to accurately and affordably estimate greenhouse gas emissions and removals from the AFOLU sector",preview:s(5670),website:"https://community.moja.global/",source:"https://github.com/moja-global/community-website",tags:["opensource","large","i18n","design"]},{title:"Molecule",description:"A lightweight Web IDE UI framework built with React.js and inspired by VS Code.",preview:s(22460),website:"https://dtstack.github.io/molecule/",source:"https://github.com/DTStack/molecule/tree/main/website",tags:["opensource","i18n"]},{title:"Motion Layout",description:"Create beautiful immersive React.js animations using shared components",preview:s(78700),website:"https://motion-layout.azurewebsites.net",source:"https://github.com/jeffersonlicet/react-motion-layout/tree/master/website",tags:["opensource"]},{title:"nanos world",description:"The next-generation multiplayer open world sandbox game.",preview:s(11632),website:"https://docs.nanos.world/",source:"https://github.com/nanos-world/docs",tags:["opensource","versioning","i18n","product"]},{title:"netboot.xyz",description:"Your favorite operating systems in one place!",preview:s(76601),website:"https://netboot.xyz",source:"https://github.com/netbootxyz/netboot.xyz-docs/",tags:["opensource"]},{title:"Netdata Learn",description:"An educational site for monitoring and troubleshooting systems",preview:s(56945),website:"https://learn.netdata.cloud",source:"https://github.com/netdata/netdata-learn-docusaurus",tags:["opensource","product","large"]},{title:"Neutron JS",description:"An open source CLI to work with Redux + Redux Saga",preview:s(3559),website:"https://www.neutronjs.com/",source:"https://github.com/neutronjs/neutron/tree/master/website",tags:["opensource","versioning"]},{title:"NextAuth.js",description:"An open source serverless authentication library for next.js",preview:s(27436),website:"https://next-auth.js.org/",source:"https://github.com/nextauthjs/next-auth/tree/main/docs",tags:["opensource","design"]},{title:"Nhost",description:"The Open Source Firebase Alternative with GraphQL",preview:s(71783),website:"https://docs.nhost.io",source:"https://github.com/nhost/nhost/tree/main/docs",tags:["opensource","product","design"]},{title:"Novu",description:"The open-source notification infrastructure for developers",preview:s(64109),website:"https://docs.novu.co/",source:"https://github.com/novuhq/novu",tags:["opensource","product","design"]},{title:"Nocalhost",description:"An open-source toolsets help to build cloud-native applications easier and faster.",preview:s(75073),website:"https://nocalhost.dev/",source:"https://github.com/nocalhost/nocalhost.github.io",tags:["opensource","i18n"]},{title:"Node SerialPort",description:"Talk to your Serial devices",preview:s(47663),website:"https://serialport.io",source:"https://github.com/serialport/website",tags:["opensource","versioning"]},{title:"Nodify",description:"High-performance WPF node editor component designed for MVVM.",preview:s(89115),website:"https://miroiu.github.io/nodify/",source:"https://github.com/miroiu/nodify/tree/docs",tags:["opensource","design"]},{title:"Orbit.js",description:"The Universal Data Layer",preview:s(24429),website:"https://orbitjs.com",source:"https://github.com/orbitjs/orbit/tree/main/website",tags:["opensource","versioning"]},{title:"Orca",description:"Modern, open-source community platform.",preview:s(18394),website:"https://getorca.org",source:"https://github.com/elevensymbols/getorca.org",tags:["opensource","design","product"]},{title:"Ory",description:"Authentication, authorization, access control, and delegation (OAuth2 & OpenID Connect) services and APIs",preview:s(13992),website:"https://www.ory.sh/docs",source:"https://github.com/ory/docs/",tags:["opensource"]},{title:"OSS Insight",description:"OSS Insight provides open source software insight and compares projects and tools",preview:s(82683),website:"https://ossinsight.io",source:"https://github.com/pingcap/ossinsight",tags:["opensource","design"]},{title:"Outerbounds",description:"Resources for data scientists and engineers, authored in jupyter notebooks using nbdoc and docusaurus.",preview:s(33946),website:"https://outerbounds.com",source:null,tags:["favorite","product","design"]},{title:"Oxidizer",description:"A Rust ORM based on tokio-postgres and refinery",preview:s(1152),website:"https://oxidizer-rs.github.io",source:"https://github.com/oxidizer-rs/website",tags:["opensource"]},{title:"Patrik M\xe4siar",description:"Projects showcase and documentation of software developer",preview:s(48261),website:"https://projects.patrikmasiar.com/",source:"https://github.com/patrikmasiar/patrikmasiar-projects-docusaurus",tags:["personal","opensource"]},{title:"Paubox",description:"Paubox API Documentation",preview:s(95379),website:"https://docs.paubox.com/",source:null,tags:["product"]},{title:"PcapPlusPlus",description:"A multi-platform C++ library for capturing, parsing and crafting of network packets",preview:s(59460),website:"https://pcapplusplus.github.io/",source:"https://github.com/PcapPlusPlus/pcapplusplus.github.io",tags:["opensource","versioning"]},{title:"PCC Archive",description:"A wiki and web posts archive about Purrnelope's Country Club project.",preview:s(78422),website:"https://pcc-archive.org/",source:"https://github.com/CuratorCat/pcc-archive.org",tags:["opensource","design"]},{title:"pdfme",description:"Free and Open source PDF generator library fully written in TypeScript coming with a React based UI template editor",preview:s(1680),website:"https://pdfme.com/",source:"https://github.com/pdfme/pdfme/tree/main/website",tags:["opensource","design","product"]},{title:"Pearl UI",description:"A design-system-driven UI framework that helps developer build beautiful and accessible mobile apps right out of the box",preview:s(26797),website:"https://docs.pearl-ui.dev/",source:"https://github.com/agrawal-rohit/pearl-ui/tree/main/documentationwebsite",tags:["opensource","design","product"]},{title:"Peradaban",description:"Peradaban is a Discord Server Bots made with NAFF designed only for Warung International Discord Server",preview:s(74906),website:"https://docs.warunginternational.eu.org/",source:"https://github.com/warung-international/docs",tags:["opensource"]},{title:"Pglet",description:"Build internal web apps quickly in the language you already know",preview:s(9090),website:"https://pglet.io",source:"https://github.com/pglet/website",tags:["opensource"]},{title:"Piano Analytics",description:"Piano Analytics SDKs documentation for developers",preview:s(6463),website:"https://developers.atinternet-solutions.com/piano-analytics/",source:null,tags:["favorite","product","design"]},{title:"pincman's website",description:"A very good full stack development teaching website",preview:s(53338),website:"https://pincman.com/",source:"https://github.com/rowfishjs/rowfish",tags:["opensource","design","personal"]},{title:"Pipeline UI",description:"Pipeline UI Documentation",preview:s(57742),website:"https://www.pipeline-ui.com/",source:"https://github.com/headline-design/pipeline-ui/tree/main/design-site",tags:["opensource"]},{title:"Plausible Analytics",description:"A simple, open source, lightweight (< 1 KB) and privacy-friendly alternative to Google Analytics",preview:s(63842),website:"https://plausible.io/docs",source:"https://github.com/plausible/docs",tags:["opensource","product"]},{title:"pnpm",description:"Fast, disk space efficient package manager",preview:s(48557),website:"https://pnpm.js.org/",source:"https://github.com/pnpm/pnpm.github.io/",tags:["opensource","i18n"]},{title:"Postgres.ai \u2013 Database Lab",description:"Deploy with confidence. Been stung by a poorly tested database migration? We won't let it happen again.",preview:s(75816),website:"https://postgres.ai/",source:"https://gitlab.com/postgres-ai/docs",tags:["opensource","product"]},{title:"Power's Wiki",description:"An example of personal wiki ",preview:s(17466),website:"https://wiki-power.com/",source:"https://github.com/linyuxuanlin/Wiki_Docusaurus",tags:["opensource","large","personal"]},{title:"PptxGenJS",description:"PowerPoint JavaScript Library",preview:s(43713),website:"https://gitbrent.github.io/PptxGenJS/",source:"https://github.com/gitbrent/PptxGenJS/tree/gh-pages",tags:["opensource","design"]},{title:"PREFS",description:"PREFS Python library website and documentation",preview:s(9489),website:"https://patitotective.github.io/PREFS/",source:"https://github.com/Patitotective/PREFS/tree/main/website",tags:["opensource","versioning"]},{title:"Prismatic",description:"An Integration Platform for B2B Software Companies",preview:s(61764),website:"https://prismatic.io/docs/",source:null,tags:["product"]},{title:"Profilo",description:"An Android performance library",preview:s(23206),website:"https://facebookincubator.github.io/profilo/",source:"https://github.com/facebookincubator/profilo/tree/main/website",tags:["opensource","meta"]},{title:"Pyre",description:"A performant type-checker for Python 3",preview:s(96299),website:"https://pyre-check.org",source:"https://github.com/facebook/pyre-check/tree/main/documentation/website",tags:["opensource","meta"]},{title:"QA-Board",description:"An open source run-tracker for algorithm and performance engineering with rich visualizations",preview:s(56177),website:"https://samsung.github.io/qaboard/",source:"https://github.com/Samsung/qaboard/tree/master/website",tags:["opensource"]},{title:"QuantCDN",description:"An all-in-one Static Web solution and global Content Delivery Network",preview:s(68767),website:"https://docs.quantcdn.io",source:"https://github.com/quantcdn/docs",tags:["opensource","product"]},{title:"Quickwit",description:"The open source search engine on object storage with subsecond latency",preview:s(30399),website:"https://quickwit.io",source:null,tags:["favorite","design"]},{title:"Rainbond",description:"A cloud native multi cloud application management platform",preview:s(31714),website:"https://www.rainbond.com",source:"https://github.com/goodrain/rainbond-docs",tags:["opensource","product"]},{title:"RaspiSuite",description:"A suite of mobile apps to leverage the full potential of your Raspberry Pi effortlessly.",preview:s(58829),website:"https://raspisuite.com",source:null,tags:["design","product"]},{title:"Rivalis",description:"An open source framework for developing servers for real-time applications and games",preview:s(44165),website:"https://rivalis.io",source:"https://github.com/rivalis/rivalis.github.io",tags:["opensource","design","product"]},{title:"react-chat-elements",description:"Chat UI package for React",preview:s(57591),website:"https://detaysoft.github.io/docs-react-chat-elements/",source:"https://github.com/Detaysoft/react-chat-elements",tags:["opensource"]},{title:"React Complex Tree",description:"Unopinionated Accessible React Tree Component with Multi-Select and Drag-And-Drop",preview:s(33129),website:"https://rct.lukasbach.com/",source:"https://github.com/lukasbach/react-complex-tree/tree/main/packages/docs",tags:["opensource"]},{title:"React-Leaflet",description:"React components for Leaflet maps",preview:s(52346),website:"https://react-leaflet.js.org/",source:"https://github.com/PaulLeCam/react-leaflet/tree/master/packages/website",tags:["opensource"]},{title:"React Native",description:"A framework for building native apps using React",preview:s(77319),website:"https://reactnative.dev",source:"https://github.com/facebook/react-native-website",tags:["opensource","meta","large","favorite","design","versioning"]},{title:"React Native ARIA",description:"A library that provides accessible UI primitives for React Native apps.",preview:s(43757),website:"https://react-native-aria.geekyants.com",source:"https://github.com/GeekyAnts/react-native-aria-website",tags:["opensource"]},{title:"React Native Boilerplate",description:"A template for building solid applications with separation of concerns between UI, state management, and business logic.",preview:s(83729),website:"https://thecodingmachine.github.io/react-native-boilerplate/",source:"https://github.com/thecodingmachine/react-native-boilerplate/tree/master/documentation",tags:["opensource"]},{title:"React Native Elements",description:"Cross Platform React Native UI Toolkit",preview:s(87868),website:"https://react-native-training.github.io/react-native-elements/",source:"https://github.com/react-native-elements/react-native-elements/tree/next/website",tags:["opensource"]},{title:"React Native iOS Kit",description:"The missing React Native UI Kit for iOS.",preview:s(31678),website:"https://callstack.github.io/react-native-ios-kit",source:"https://github.com/callstack/react-native-ios-kit/tree/master/website",tags:["opensource"]},{title:"React Native Reanimated",description:"React Native's Animated library reimplemented",preview:s(36661),website:"https://docs.swmansion.com/react-native-reanimated/",source:"https://github.com/software-mansion/react-native-reanimated/tree/master/docs",tags:["opensource","design","versioning"]},{title:"React Native Render HTML",description:"The hackable, full-featured Open Source HTML rendering solution for React Native.",preview:s(20336),website:"https://meliorence.github.io/react-native-render-html",source:"https://github.com/meliorence/react-native-render-html/tree/master/apps/website",tags:["opensource","design"]},{title:"React Native Testing Library",description:"Helps you to write better tests with less effort.",preview:s(10281),website:"https://callstack.github.io/react-native-testing-library/",source:"https://github.com/callstack/react-native-testing-library/tree/main/website",tags:["opensource"]},{title:"React Navigation",description:"Routing and navigation for your React Native apps",preview:s(95654),website:"https://reactnavigation.org/",source:"https://github.com/react-navigation/react-navigation.github.io",tags:["opensource","design","versioning"]},{title:"React Redux",description:"Official React bindings for Redux",preview:s(39166),website:"https://react-redux.js.org",source:"https://github.com/reduxjs/react-redux/tree/master/website",tags:["opensource"]},{title:"Reactive Button",description:"3D animated react button component with progress bar",preview:s(67539),website:"https://arifszn.github.io/reactive-button",source:null,tags:["design"]},{title:"Realtime Web Applications Workshop",description:"A workshop about building realtime web applications with WebSockets and WebRTC.",preview:s(75849),website:"https://realtime-apps-iap.github.io",source:"https://github.com/realtime-apps-iap/realtime-apps-iap.github.io",tags:["opensource"]},{title:"Reddit Image Fetcher",description:"A JavaScript package for fetching reddit images, memes, wallpapers and more",preview:s(36611),website:"https://arifszn.github.io/reddit-image-fetcher",source:null,tags:[]},{title:"RedGradient",description:"CSS Gradient Editor",preview:s(88760),website:"https://doc.red-gradient.com/",source:"https://github.com/redcamel/RedGradientDoc",tags:["opensource"]},{title:"Redis Labs Developer Site",description:"The Home of Redis Developers",preview:s(44709),website:"https://developer.redislabs.com",source:"https://github.com/redis-developer/redis-developer.github.io",tags:["opensource","product","design","favorite"]},{title:"Redux",description:"A Predictable State Container for JS Apps",preview:s(67970),website:"https://redux.js.org/",source:"https://github.com/reduxjs/redux/tree/master/website",tags:["opensource"]},{title:"Redux Cool",description:"Build redux logic, without getting nervous \ud83d\ude2c",preview:s(87652),website:"https://redux-cool.js.org/",source:"https://github.com/Ruben-Arushanyan/redux-cool/tree/master/website",tags:["opensource"]},{title:"Refine",description:"A React-based framework for building data-intensive applications in no time!",preview:s(74580),website:"https://refine.dev",source:"https://github.com/pankod/refine/tree/master/documentation",tags:["favorite","opensource","product","design","versioning","large"]},{title:"Relay",description:"The GraphQL client that scales with you",preview:s(52972),website:"https://relay.dev/",source:"https://github.com/facebook/relay/tree/main/website",tags:["opensource","favorite","design","versioning"]},{title:"Rematch",description:"Redux best practices without the boilerplate in less than 2kb",preview:s(99003),website:"https://rematchjs.org",source:"https://github.com/rematch/rematch/tree/main/website",tags:["opensource","design"]},{title:"Remirror",description:"The editor that makes ProseMirror fun to use for React developers",preview:s(5089),website:"https://remirror.io/",source:"https://github.com/remirror/remirror/tree/main/website",tags:["opensource","design","large"]},{title:"Remotion",description:"Write videos programmatically in React",preview:s(14330),website:"https://www.remotion.dev/",source:"https://github.com/JonnyBurger/remotion/tree/main/packages/docs",tags:["opensource","product"]},{title:"Repeater.js",description:"The missing constructor for creating safe async iterators",preview:s(52762),website:"https://repeater.js.org/",source:"https://github.com/repeaterjs/repeater/tree/master/website",tags:["opensource"]},{title:"replicad",description:"The library to build browser based 3D models with code.",preview:s(7487),website:"https://replicad.xyz/",source:"https://github.com/sgenoud/replicad/tree/main/packages/replicad-docs",tags:["opensource"]},{title:"Resoto",description:"Open-source cloud infrastructure management tool\u2014find leaky resources, manage quota limits, detect drift, and clean up!",preview:null,website:"https://resoto.com",source:"https://github.com/someengineering/resoto.com",tags:["opensource","product","design"]},{title:"Rooks",description:"Supercharge your components with this collection of React hooks.",preview:s(73899),website:"https://react-hooks.org/",source:"https://github.com/imbhargav5/rooks",tags:["opensource","versioning"]},{title:"RSocket",description:"Application protocol providing Reactive Streams semantics.",preview:s(32104),website:"https://rsocket.io/",source:"https://github.com/rsocket/rsocket-website",tags:["opensource"]},{title:"Runlet",description:"A cloud-based job manager that integrates your devices",preview:s(22552),website:"https://runlet.app",source:"https://github.com/runletapp/website",tags:["opensource"]},{title:"Runiac",description:"Run IaC Anywhere with Ease",preview:s(10805),website:"https://runiac.io",source:"https://github.com/runiac/website",tags:["opensource"]},{title:"Saleor",description:"Saleor Documentation",preview:s(20627),website:"https://docs.getsaleor.com/",source:"https://github.com/mirumee/saleor-docs",tags:["opensource","product","versioning"]},{title:"SAP Cloud SDK",description:"The one-stop shop for developing and extending SAP applications in the cloud.",preview:s(29742),website:"https://sap.github.io/cloud-sdk/",source:"https://github.com/SAP/cloud-sdk",tags:["opensource","product","large"]},{title:"Sapphire",description:"A next-gen object-oriented Discord.js bot framework.",preview:s(57675),website:"https://www.sapphirejs.dev",source:"https://github.com/sapphiredev/website",tags:["opensource","large"]},{title:"Sass Fairy",description:"Enhances built-in Sass modules with additional functions and adds modules for handling breakpoints and exceptions.",preview:s(41113),website:"https://sass-fairy.com/",source:"https://github.com/roydukkey/sass-fairy/tree/master/website",tags:["opensource"]},{title:"SCI WP Framework",description:"A PHP framework to create MVC plugins for WordPress",preview:s(48769),website:"https://sciwp.com/",source:"https://github.com/sciwp/docs",tags:["opensource"]},{title:"Seaography - \ud83e\udded A GraphQL framework and code generator for SeaORM",description:"Seaography is a GraphQL framework for building GraphQL resolvers using SeaORM entities.",preview:s(45454),website:"https://www.sea-ql.org/Seaography/",source:"https://github.com/SeaQL/seaql.github.io/tree/master/Seaography",tags:["opensource"]},{title:"SeaORM - \ud83d\udc1a An async & dynamic ORM for Rust",description:"A relational ORM to help you build web services in Rust with the familiarity of dynamic languages.",preview:s(33873),website:"https://www.sea-ql.org/SeaORM/",source:"https://github.com/SeaQL/seaql.github.io/tree/master/SeaORM",tags:["opensource","versioning"]},{title:"SeaQL - Building data intensive applications in Rust",description:"We help developers in building data intensive applications in Rust, such as web services, command line tools or apps.",preview:s(96460),website:"https://www.sea-ql.org/blog/",source:"https://github.com/SeaQL/seaql.github.io/tree/master/Blog",tags:["opensource"]},{title:"Sequence",description:"Automation toolkit for creating repeatable, predictable, and defensible end-to-end forensic and ediscovery workflows.",preview:s(58468),website:"https://sequence.sh/",source:"https://gitlab.com/reductech/sequence/sequence-docs",tags:["large","opensource","versioning"]},{title:"Seven-innovation-base official website",description:"About seven-innovation-base",preview:s(27598),website:"https://\u4e03\u9662\u521b\u65b0\u57fa\u5730.cn",source:"https://github.com/seven-innovation-base/official-website",tags:["opensource","personal"]},{title:"SICOPE Model",description:"An open source model-based testing tool for web applications",preview:s(21192),website:"https://sicope-model.github.io/",source:"https://github.com/sicope-model/sicope-model-website",tags:["opensource"]},{title:"SigNoz",description:"Open source Application Performance Monitoring (APM), observability, and troubleshooting tool",preview:s(40358),website:"https://signoz.io/",source:null,tags:["product","design"]},{title:"Single SPA",description:"A javascript router for front-end microservices",preview:s(72883),website:"https://single-spa.js.org/",source:"https://github.com/single-spa/single-spa.js.org/tree/master/website",tags:["opensource","large","versioning","i18n"]},{title:"Shabad OS",description:"Browse the latest docs, including tutorial guides, sample code, product articles, and API references",preview:s(11301),website:"https://docs.shabados.com",source:"https://github.com/shabados/docs",tags:["opensource","design"]},{title:"Shotstack",description:"The cloud video editing API",preview:s(21481),website:"https://shotstack.io/docs/guide/",source:"https://github.com/shotstack/documentation",tags:["product","design","opensource"]},{title:"smash.gg",description:"Turning passions into careers",preview:s(5623),website:"https://developer.smash.gg",source:"https://github.com/smashgg/developer-portal/tree/master/website",tags:["opensource","product"]},{title:"Smart Docs",description:"A smart contract documentation visualizer for Solidity ABI interfaces.",preview:s(49557),website:"https://smart-docs.vercel.app/",source:"https://github.com/wowtvds/smart-docs",tags:["opensource","product","design"]},{title:"SmartCookieWeb",description:"Webpage for an open source, telemetry-free Android web browser",preview:s(52445),website:"https://smartcookieweb.com/",source:null,tags:["product","i18n"]},{title:"social-embed",description:"Drop-in replacement for embed-friendly websites (and \xe0 la carte APIs for detecting and parsing them)",preview:s(66987),website:"https://social-embed.git-pull.com/",source:"https://github.com/social-embed/social-embed/tree/master/packages/site",tags:["opensource"]},{title:"SODA for SPARC",description:"Simplifying data curation for researchers funded by the NIH SPARC initiative",preview:s(10154),website:"https://docs.sodaforsparc.io/",source:"https://github.com/fairdataihub/SODA-for-SPARC-Docs",tags:["opensource","versioning"]},{title:"Some Engineering Inc.",description:"Startup developing open-source tools to make cloud infrastructure searchable and accessible.",preview:s(94186),website:"https://some.engineering",source:"https://github.com/someengineering/some.engineering",tags:["opensource","design"]},{title:"Spicetify",description:"Powerful CLI tool to take control of the Spotify client.",preview:s(98977),website:"https://spicetify.app/",source:"https://github.com/spicetify/spicetify-docs",tags:["opensource"]},{title:"SpotifyAPI-NET",description:"A Client for the Spotify Web API, written in C#/.NET",preview:s(4243),website:"https://johnnycrazy.github.io/SpotifyAPI-NET/",source:"https://github.com/JohnnyCrazy/SpotifyAPI-NET",tags:["opensource","versioning"]},{title:"SQL Frames",description:"DataFrames meet SQL, in the browser",preview:s(71329),website:"https://sqlframes.com/",source:null,tags:["product"]},{title:"StackQL",description:"A data centric approach to provision, querying, and management of cloud infra and SaaS across multiple clouds.",preview:s(88851),website:"https://stackql.io/",source:null,tags:["product"]},{title:"StackQL Provider Registry",description:"Cloud infra and SaaS provider documentation for StackQL providers.",preview:s(14357),website:"https://registry.stackql.io/",source:"https://github.com/stackql/registry.stackql.io",tags:["opensource","product","large"]},{title:"StarfishQL - \u2734\ufe0f A graph database and query engine",description:"StarfishQL is experimental graph database and query engine to enable graph analysis and visualization on the web.",preview:s(42321),website:"https://www.sea-ql.org/StarfishQL/",source:"https://github.com/SeaQL/seaql.github.io/tree/master/StarfishQL",tags:["opensource"]},{title:"Stryker Mutator",description:"Mutation testing for JavaScript, .NET and JVM",preview:s(24933),website:"https://stryker-mutator.io",source:"https://github.com/stryker-mutator/stryker-mutator.github.io",tags:["opensource"]},{title:"Stylable",description:"A CSS preprocessor made for components",preview:s(29534),website:"https://stylable.io",source:"https://github.com/wixplosives/stylable.io",tags:["opensource"]},{title:"Svix",description:"Webhooks as a Service",preview:s(71789),website:"https://docs.svix.com/",source:"https://github.com/svix/svix-docs",tags:["opensource","product"]},{title:"SweetCode",description:"SweetCode company website and documentation for the Pixel Manager for WooCommerce",preview:s(4715),website:"https://sweetcode.com/",source:null,tags:["product"]},{title:"Synergies",description:"A performant and distributed state library for creating reusable React state logic by synergyzing atomar context pieces",preview:s(25179),website:"https://synergies.js.org",source:"https://github.com/lukasbach/synergies/tree/main/packages/docs",tags:["opensource","design"]},{title:"Sado0823",description:"Sado0823's Blog and Portfolio Website",preview:s(20440),website:"https://sado0823.github.io",source:"https://github.com/sado0823/sado0823.github.io",tags:["opensource","personal"]},{title:"T-Regx",description:"Programmer-oriented Regular Expressions library for PHP",preview:s(57161),website:"https://t-regx.com/",source:"https://github.com/T-Regx/T-Regx.github.io",tags:["opensource"]},{title:"TalentBrick",description:"Learning made easy without ADS and trackers, Clear concepts at a glance, and Get access to quality study materials.",preview:s(86651),website:"https://www.talentbrick.com/",source:"https://gitlab.com/talentbrick/talentbrick",tags:["opensource","design"]},{title:"TamalWeb",description:"A web developers personal blog and portfolio helping other developers with tips",preview:s(24863),website:"https://tamalweb.com/",source:"https://github.com/tamalchowdhury/tamalwebsite",tags:["personal","opensource"]},{title:"Taro",description:"An open cross-end and cross-frame solution",preview:s(52919),website:"https://docs.taro.zone/",source:"https://github.com/NervJS/taro/tree/docs",tags:["opensource","versioning","large","i18n"]},{title:"Tasit",description:"A JavaScript SDK for building native mobile Ethereum dapps with React Native",preview:s(97552),website:"https://docs.tasit.io/",source:"https://github.com/tasitlabs/tasit-sdk/tree/develop/packages/docs",tags:["opensource"]},{title:"Tauri",description:"Build an optimized, secure, and frontend-independent application for multi-platform deployment.",preview:s(35721),website:"https://tauri.app/",source:"https://github.com/tauri-apps/tauri-docs",tags:["opensource","i18n","product","design"]},{title:"TechHarvesting",description:"Learn full stack web development from tutorials and blog posts",preview:s(40917),website:"https://techharvesting.in",source:"https://github.com/techharvesting/techharvesting.github.io",tags:["opensource","personal"]},{title:"Testing Library",description:"Simple and complete testing utilities that encourage good testing practices",preview:s(6934),website:"https://testing-library.com/",source:"https://github.com/testing-library/testing-library-docs",tags:["opensource"]},{title:"The Diff Podcast",description:"A Podcast from Facebook Open Source",preview:s(28003),website:"https://thediffpodcast.com",source:null,tags:["meta"]},{title:"30 Days Of SWA",description:"A 30-Day Developer Guide to Azure Static Web Apps",preview:s(14691),website:"https://www.azurestaticwebapps.dev",source:"https://github.com/staticwebdev/30DaysOfSWA/tree/main/www",tags:["opensource","product"]},{title:"TiDB Community Books",description:"A website for co-created books by TiDB Community users.",preview:s(50183),website:"https://tidb.net/book/",source:"https://github.com/pingcap/book.tidb.net/tree/main/website",tags:["opensource"]},{title:"Tina\xebl Devresse",description:"Personal website of Tina\xebl Devresse, a blog about anything that crosses my mind which I think could interest y'all.",preview:s(21764),website:"https://tinaeldevresse.eu/",source:"https://github.com/hunteroi/tinaeldevresse.eu",tags:["personal","opensource","i18n"]},{title:"ToolJet",description:"Open-source low-code platform to build & deploy internal tools with minimal engineering effort.",preview:s(71708),website:"https://docs.tooljet.com/docs/",source:"https://github.com/ToolJet/ToolJet/tree/develop/docs",tags:["opensource","design","large","product"]},{title:"Tremor",description:"Tremor Event Processing Engine",preview:s(28467),website:"https://www.tremor.rs/",source:"https://github.com/tremor-rs/tremor-www",tags:["opensource","versioning","large"]},{title:"TRPG Engine",description:"IM Application which build for TRPG, like slack and discord",preview:s(2328),website:"https://trpgdoc.moonrailgun.com/",source:"https://github.com/TRPGEngine/Server/tree/master/services/Website",tags:["opensource"]},{title:"Tuist",description:"A tool to maintain and interact with Xcode projects at scale",preview:s(31263),website:"https://docs.tuist.io/",source:"https://github.com/tuist/tuist/tree/main/projects/docs",tags:["opensource"]},{title:"uniforms",description:"A set of React libraries for building forms",preview:s(73627),website:"https://uniforms.tools/",source:"https://github.com/vazco/uniforms/tree/master/website",tags:["opensource"]},{title:"Unleash",description:"A feature management solution.",preview:s(67168),website:"https://docs.getunleash.io/",source:"https://github.com/Unleash/unleash/tree/main/website",tags:["opensource","product"]},{title:"Unmand",description:"A business automation platform that liberates users from repetitive tasks.",preview:s(36283),website:"https://unmand.com",source:null,tags:["product","design"]},{title:"Verdaccio",description:"A lightweight open source private npm proxy registry",preview:s(12839),website:"https://verdaccio.org",source:"https://github.com/verdaccio/verdaccio/tree/master/website",tags:["favorite","opensource","large","i18n","design"]},{title:"Verida",description:"A web3 data storage and sharing API",preview:s(57449),website:"https://developers.verida.io/",source:"https://github.com/verida/documentation",tags:["opensource","product"]},{title:"Virtual Photography Kit",description:"A toolkit for virtual photography in Unreal Engine.",preview:s(58272),website:"https://docs.antonpalmqvist.com/",source:null,tags:["product"]},{title:"Vital",description:"Wearables and Lab test API for digital health companies.",preview:s(56175),website:"https://docs.tryvital.io",source:"https://github.com/tryVital/vital-docs-new",tags:["opensource","product","design"]},{title:"Vue NodeGui",description:"A cross-platform native desktop app library",preview:s(18840),website:"https://vue.nodegui.org/",source:"https://github.com/nodegui/vue-nodegui/tree/master/website",tags:["opensource"]},{title:"Warrant",description:"APIs and devtools for implementing authorization and access control.",preview:s(55530),website:"https://docs.warrant.dev/",source:null,tags:["product"]},{title:"Wasp",description:"A DSL for building full-stack web apps with less boilerplate.",preview:s(80340),website:"https://wasp-lang.dev/",source:"https://github.com/wasp-lang/wasp/tree/main/web",tags:["opensource"]},{title:"WebdriverIO",description:"Next-gen browser and mobile automation test framework for Node.js",preview:s(90829),website:"https://webdriver.io/",source:"https://github.com/webdriverio/webdriverio/tree/main/website",tags:["opensource","design","large","favorite"]},{title:"Webiny",description:"Serverless application framework and CMS for building full-stack applications, GraphQL APIs, websites & microservices.",preview:s(37769),website:"https://www.webiny.com/docs/",source:"https://github.com/webiny/docs.webiny.com",tags:["opensource","product"]},{title:"Whirl",description:"Whirl's Personal Website and Blog",preview:s(90592),website:"https://whirl.codes",source:"https://github.com/whirl21/website",tags:["opensource","personal"]},{title:"WoodpeckerCI",description:"A simple CI engine with great extensibility.",preview:s(63178),website:"https://woodpecker-ci.org/",source:"https://github.com/woodpecker-ci/woodpecker/tree/master/docs",tags:["opensource"]},{title:"Yeecord",description:"A fully Chinese Discord bot with epic features that makes Discord more than just chatting platform.",website:"https://yeecord.com/",preview:s(53114),tags:["product","personal","opensource"],source:"https://github.com/yeecord/docs"},{title:"Zowe",description:"Open source framework for leveraging data and applications in z/OS",preview:s(59027),website:"https://docs.zowe.org",source:"https://github.com/zowe/docs-site",tags:["opensource","product","large","design","versioning"]},{title:"404Lab.Wiki",description:"Docs and blogs about development and study",preview:s(58084),website:"https://wiki.404lab.top",source:"https://github.com/HiChen404/MyWikiSite",tags:["opensource","personal"]},{title:"7Wate's Wiki",description:"Developer Wiki and Blog",preview:s(19035),website:"https://wiki.7wate.com/",source:"https://github.com/7Wate/wiki",tags:["opensource","personal"]},{title:"Discord API Types",description:"Discord API Types",preview:null,website:"https://discord-api-types.dev/",source:"https://github.com/discordjs/discord-api-types/tree/main/website",tags:["opensource","versioning","large"]},{title:"Hanabi",description:"A list of Hanabi card game strategies",preview:null,website:"https://hanabi.github.io/",source:"https://github.com/hanabi/hanabi.github.io",tags:["opensource"]},{title:"IsaacScript",description:"Write Binding of Isaac: Repentance mods with TypeScript",preview:null,website:"https://isaacscript.github.io/",source:"https://github.com/IsaacScript/isaacscript/tree/main/packages/docs",tags:["opensource"]},{title:"Jest Preview",description:"Debug your Jest tests. Effortlessly.",preview:null,website:"https://www.jest-preview.com/",source:"https://github.com/nvh95/jest-preview/tree/main/website",tags:["opensource"]},{title:"Pawe\u0142 Kosiec",description:"Personal website and blog of Pawe\u0142 Kosiec, Full-stack Cloud Developer.",preview:null,website:"https://kosiec.dev/",source:"https://github.com/pkosiec/website",tags:["opensource","personal"]},{title:"Homarr",description:"Homarr is a simple and lightweight homepage for your server.",preview:null,website:"https://homarr.dev/",source:"https://github.com/ajnart/homarr-docs",tags:["opensource"]},{title:"Wings",description:"Wings is a modern website-as-service for progressive campaigns",preview:null,website:"https://wings.dev/",source:null,tags:["product","i18n"]},{title:"Kishan Gajera",description:"Personal portfolio and blog of Kishan Gajera",preview:null,website:"https://www.kgajera.com/",source:"https://github.com/kgajera/blog",tags:["opensource","personal"]},{title:"Harvest CLI",description:"A CLI for Harvest's time tracking software",preview:null,website:"https://kgajera.github.io/hrvst-cli/",source:"https://github.com/kgajera/hrvst-cli/tree/main/website",tags:["opensource"]},{title:"TSEI.JP",description:"TSEI.JP personal website, articles and docs",preview:null,website:"https://tsei.jp/",source:null,tags:["personal"]},{title:"Brobot",description:"Testable state-based GUI automation.",preview:null,website:"https://jspinak.github.io/brobot/",source:"https://github.com/jspinak/brobot/tree/main/docs",tags:["opensource"]},{title:"Fathym Blog",description:"Fathym deploys, hosts and integrates your favorite tech stacks.",preview:null,website:"https://www.fathym.com/blog",source:"https://github.com/lowcodeunit/public-web-blog",tags:["opensource"]},{title:"Tech Interview Handbook",description:"Free curated tech interview preparation materials for busy software engineers.",preview:null,website:"https://www.techinterviewhandbook.org/",source:"https://github.com/yangshun/tech-interview-handbook",tags:["opensource","personal"]},{title:"Front End Interview Handbook",description:"Free curated tech interview preparation materials for busy software engineers",preview:null,website:"https://www.frontendinterviewhandbook.com/",source:"https://github.com/yangshun/front-end-interview-handbook",tags:["opensource","personal"]},{title:"WIZnet",description:"Documentation for various WIZnet products",preview:null,website:"https://docs.wiznet.io/",source:"https://github.com/Wiznet/document_framework",tags:["opensource","product"]},{title:"Xiaohai's Mind Palace",description:"A place for organizing notes, writing blogs, and showcasing projects.",preview:null,website:"https://xiaohai.wiki/",source:"https://github.com/xiaohai-huang/learning-notes",tags:["opensource","personal"]},{title:"Extracranial",description:"Sunghyun Cho's Second Brain on the Web.",preview:null,website:"https://cho.sh/",source:"https://github.com/anaclumos/extracranial",tags:["opensource","personal","i18n"]},{title:"i18n-tools",description:"CLI to make common operations around i18n files simpler",preview:null,website:"https://jy95.github.io/i18n-tools/",source:"https://github.com/jy95/i18n-tools/tree/master/website",tags:["opensource"]},{title:"Pure.css",description:"A set of small, responsive CSS modules that you can use in every web project.",preview:null,website:"https://purecss.io/",source:"https://github.com/pure-css/pure",tags:["opensource","design"]},{title:"Moodle Developer Resources",description:"Moodle - the world's open source learning platform",preview:null,website:"https://moodledev.io/",source:"https://github.com/moodle/devdocs",tags:["opensource","product","large"]},{title:"Toggle",description:"Open Source real-time feature flags deployment without need of a server with SDK",preview:null,website:"https://www.togglee.com/",source:"https://github.com/togglee/togglee-web",tags:["opensource","product"]},{title:"Barklarm",description:"Open Source multiplatform alarm and build status monitoring application",preview:null,website:"https://www.barklarm.com/",source:"https://github.com/kanekotic/barklarm-website",tags:["opensource","product"]},{title:"Nikita's Everything I Know Wiki",description:"Digital wiki with notes/links.",preview:null,website:"https://wiki.nikiv.dev/",source:"https://github.com/nikitavoloboev/knowledge",tags:["opensource","personal","large"]},{title:"Infinity Works Company Handbook",description:"An online company handbook, acting as a one-stop shop for all relevant information needed for colleagues.",preview:null,website:"https://handbook.infinityworks.com/",source:null,tags:["design"]},{title:"Neo Blockchain Developer Portal",description:"A collection of tools and resources to help you build outstanding applications on Neo",preview:null,website:"https://developers.neo.org/",source:"https://github.com/neo-project/neo-dev-portal",tags:["opensource"]},{title:"Yew",description:"Documentation of Yew web framework",preview:null,website:"https://yew.rs/",source:"https://github.com/yewstack/yew/tree/master/website",tags:["opensource","versioning","i18n","large"]},{title:"Sensory Percussion help",description:"On-line manual for Sensory Percussion, a music production tool for electronic drums.",preview:null,website:"https://help.sunhou.se/",source:null,tags:["product"]},{title:"The Fundraising Lore",description:"A guide to help founders successfully raise early-stage VC financing",preview:null,website:"https://www.lore.vc/",source:"https://github.com/dvitanov/lorevc",tags:["opensource","personal"]},{title:"LifeOmic PHC Documentation",description:"Help and information for LifeOmic PHC",preview:null,website:"https://phc.docs.lifeomic.com/",source:null,tags:["product"]},{title:"Kanekotic's Page",description:"List of open-source projects and blog",preview:null,website:"https://www.kanekotic.com/",source:"https://github.com/kanekotic/kanekotic-page",tags:["opensource","personal"]},{title:"DevTomek",description:"A Polish blog about programming, electronics and IoT",preview:null,website:"https://devtomek.pl/",source:null,tags:["personal"]},{title:"Vantevo Analytics",description:"The most complete and secure Google Analytics alternative.",preview:null,website:"https://vantevo.io/docs/",source:null,tags:["product","i18n"]},{title:"lsfusion platform documentation",description:"A declarative open-source language-based platform for information systems development",preview:null,website:"https://docs.lsfusion.org/",source:"https://github.com/lsfusion/docusaurus",tags:["opensource","i18n","versioning"]},{title:"Rokt Docs",description:"Rokt's product documentation",preview:null,website:"https://docs.rokt.com/",source:null,tags:["product"]},{title:"Harmonoid",description:"A beautiful material-design cross platform music player",preview:null,website:"https://harmonoid.com/",source:null,tags:["product","design"]},{title:"Mentorship Guide",description:"Making mentorship accessible to all, for mentors and mentees.",preview:null,website:"https://mentorship.guide/",source:"https://github.com/mentorship-sponsorship/mentorship-guide-docs",tags:["opensource","design"]},{title:"Vishal Gandhi",description:"The Data Column - Blog by Vishal Gandhi",preview:null,website:"https://vishalgandhi.in/",source:null,tags:["personal"]},{title:"daily.dev",description:"Official product documentation for daily.dev",preview:null,website:"https://docs.daily.dev/",source:"https://github.com/dailydotdev/docs",tags:["opensource","product","design"]},{title:"Formiz",description:"React forms with ease! Composable, headless & with built-in multi steps",preview:null,website:"https://formiz-react.com/",source:"https://github.com/ivan-dalmet/formiz/tree/master/documentation",tags:["opensource"]},{title:"Wener Live & Life",description:"Notes, Stories, Awesomes",preview:null,website:"https://wener.me/",source:"https://github.com/wenerme/wener/tree/master/site",tags:["opensource","personal"]},{title:"Modrinth Documentation",description:"The documentation for Modrinth, an open source Minecraft modding platform",preview:null,website:"https://docs.modrinth.com/",source:"https://github.com/modrinth/docs",tags:["opensource"]},{title:"Codiga Documentation",description:"Documentation for Codiga, your Code Analysis & Coding Assistant",preview:null,website:"https://doc.codiga.io/",source:"https://github.com/codiga/doc.codiga.io/tree/main/website",tags:["opensource","product"]},{title:"Takken.io",description:"Webber's personal website",preview:null,website:"https://takken.io/",source:"https://github.com/webbertakken/takken.io",tags:["opensource","personal"]},{title:"GameCI",description:"Open source continuous integration for games",preview:null,website:"https://game.ci/",source:"https://github.com/game-ci/documentation",tags:["opensource","product","versioning"]},{title:"Batect",description:"The fast, consistent way to run your development and testing tasks everywhere.",preview:null,website:"https://batect.dev/",source:"https://github.com/batect/batect.dev",tags:["opensource"]},{title:"Boyka-Framework",description:"Ultimate test automation for testing any application on any platform",preview:null,website:"https://wasiqbhamla.github.io/boyka-framework/",source:"https://github.com/WasiqBhamla/boyka-framework/tree/main/website",tags:["opensource"]},{title:"Nango",description:"Open-source infrastructure for native integrations in SaaS products",preview:null,website:"https://docs.nango.dev/",source:"https://github.com/NangoHQ/nango/tree/main/docs",tags:["opensource","product"]},{title:"YepCode Docs",description:"Docs for the all-in-one platform that connects your services and APIs",preview:null,website:"https://docs.yepcode.io/",source:null,tags:["product"]},{title:"YepCode Recipes",description:"Recipes for the all-in-one platform that connects your services and APIs",preview:null,website:"https://yepcode.io/recipes/",source:null,tags:["product","large"]},{title:"Appcircle Docs",description:"Appcircle is an easy-to-setup mobile CI/CD platform.",preview:null,website:"https://docs.appcircle.io/",source:"https://github.com/appcircleio/appcircle-docusaurus/tree/master/",tags:["opensource","product"]},{title:"Rowy Docs",description:"Open-source low-code platform for Firebase, Cloud Functions and GCP",preview:null,website:"https://docs.rowy.io/",source:"https://github.com/rowyio/docs",tags:["opensource","product","design"]},{title:"Keebio Documentation",description:"Mechanical keyboard build guides and keyboard reprogramming info",preview:null,website:"https://docs.keeb.io/",source:"https://github.com/keebio/keebio-docs",tags:["opensource","product"]},{title:"SR50 Finance",description:"Reference handbook for personal finance",preview:null,website:"https://sr50.finance/",source:"https://github.com/tpascarella/sr50",tags:["opensource"]},{title:"\u524d\u7aef\u5927\u5218",description:"Record and share to make progress every day!",preview:null,website:"https://lzwdot.com/",source:"https://github.com/lzwdot/lzwdot.github.io",tags:["opensource","personal"]},{title:"DipScope",description:"Open source tools to develop high quality software",preview:null,website:"https://dipscope.com/",source:null,tags:["versioning"]},{title:"MutableSecurity",description:"Platform for automating the lifecycle of cybersecurity solutions",preview:null,website:"https://www.mutablesecurity.io/",source:"https://github.com/MutableSecurity/website",tags:["opensource","product"]},{title:"Atlas",description:"Atlas CLI helps developers manage their database schemas by applying DevOps principles.",preview:null,website:"https://atlasgo.io/",source:"https://github.com/ariga/atlas",tags:["opensource","product"]},{title:"Ent",description:"An entity framework for Go",preview:null,website:"https://entgo.io/",source:"https://github.com/ent/ent/tree/master/doc/website",tags:["opensource","i18n"]},{title:"NAYAtel ",description:"Documentation for TAC Department",preview:null,website:"https://nayatel.shoaibsajid.com/",source:null,tags:[]},{title:"WPShop",description:"Docs site for the ShopWP WordPress plugin",preview:null,website:"https://docs.wpshop.io/",source:null,tags:["product"]},{title:"Polkadot Wiki",description:"The central source of truth for Polkadot Network",preview:null,website:"https://wiki.polkadot.network/",source:"https://github.com/w3f/polkadot-wiki/tree/master/polkadot-wiki",tags:["opensource"]},{title:"CodingHabits",description:"An interactive learning environment for developers",preview:null,website:"https://www.codinghabits.online/",source:null,tags:["product"]},{title:"Crawlee",description:"Scalable web crawling, scraping and automation library for JS/Node.js",preview:null,website:"https://crawlee.dev/",source:"https://github.com/apify/crawlee/tree/master/website",tags:["opensource","versioning"]},{title:"codehooks",description:"Fast Serverless Backend made Easy",preview:null,website:"https://codehooks.io/",source:null,tags:["product"]},{title:"HiCA",description:"Free SSL Certificate Provider, supports ACME",preview:null,website:"https://www1.hi.cn/",source:null,tags:["product"]},{title:"Ouch1978",description:"Personal site of @Ouch1978",preview:null,website:"https://ouch1978.github.io/",source:"https://github.com/Ouch1978/ouch1978.github.io",tags:["opensource","personal"]},{title:"Dojo Documentation",description:"Take faster card payments with Dojo.",preview:null,website:"https://docs.dojo.tech/",source:null,tags:["product"]},{title:"Computer Science Turkish Resource",description:"A Computer Science portal for enthusiasts.",preview:null,website:"https://bb-tr-kaynak.netlify.app/",source:"https://github.com/Fire-Oceann/bb-tr-kaynak/",tags:["opensource"]},{title:"OKP4",description:"Documentation portal for the OKP4 blockchain",preview:null,website:"https://docs.okp4.network/",source:"https://github.com/okp4/docs",tags:["opensource","product","design"]},{title:"Konkatsu Strategy Guide",description:"Support konkatsu (marriage hunting) in Japan",preview:null,website:"https://hikonkatsu.com/",source:null,tags:["personal"]},{title:"Zondax Documentation",description:"Building back-end tech solutions for the Web3 Space.",preview:null,website:"https://docs.zondax.ch/",source:null,tags:["product","design"]},{title:"Embedded IDE",description:"A c/c++ development environment for microcontrollers",preview:null,website:"https://em-ide.com/",source:"https://github.com/github0null/eide-docs",tags:["opensource","i18n"]},{title:"ShellHub Documentation",description:"A centralized SSH server for the the edge and cloud computing",preview:null,website:"https://docs.shellhub.io/",source:"https://github.com/shellhub-io/docs",tags:["opensource","product"]},{title:"Dynamoose",description:"A modeling tool for Amazon's DynamoDB",preview:null,website:"https://dynamoosejs.com/",source:"https://github.com/dynamoose/dynamoose/tree/main/docs",tags:["opensource"]}],l={favorite:{label:(0,A.I)({message:"Favorite"}),description:(0,A.I)({message:"Our favorite Docusaurus sites that you must absolutely check out!",id:"showcase.tag.favorite.description"}),color:"#e9669e"},opensource:{label:(0,A.I)({message:"Open-Source"}),description:(0,A.I)({message:"Open-Source Docusaurus sites can be useful for inspiration!",id:"showcase.tag.opensource.description"}),color:"#39ca30"},product:{label:(0,A.I)({message:"Product"}),description:(0,A.I)({message:"Docusaurus sites associated to a commercial product!",id:"showcase.tag.product.description"}),color:"#dfd545"},design:{label:(0,A.I)({message:"Design"}),description:(0,A.I)({message:"Beautiful Docusaurus sites, polished and standing out from the initial template!",id:"showcase.tag.design.description"}),color:"#a44fb7"},i18n:{label:(0,A.I)({message:"I18n"}),description:(0,A.I)({message:"Translated Docusaurus sites using the internationalization support with more than 1 locale.",id:"showcase.tag.i18n.description"}),color:"#127f82"},versioning:{label:(0,A.I)({message:"Versioning"}),description:(0,A.I)({message:"Docusaurus sites using the versioning feature of the docs plugin to manage multiple versions.",id:"showcase.tag.versioning.description"}),color:"#fe6829"},large:{label:(0,A.I)({message:"Large"}),description:(0,A.I)({message:"Very large Docusaurus sites, including many more pages than the average!",id:"showcase.tag.large.description"}),color:"#8c2f00"},meta:{label:(0,A.I)({message:"Meta"}),description:(0,A.I)({message:"Docusaurus sites of Meta (formerly Facebook) projects",id:"showcase.tag.meta.description"}),color:"#4267b2"},personal:{label:(0,A.I)({message:"Personal"}),description:(0,A.I)({message:"Personal websites, blogs and digital gardens built with Docusaurus",id:"showcase.tag.personal.description"}),color:"#14cfc3"},rtl:{label:(0,A.I)({message:"RTL Direction"}),description:(0,A.I)({message:"Docusaurus sites using the right-to-left reading direction support.",id:"showcase.tag.rtl.description"}),color:"#ffcfc3"}},h=Object.keys(l);const m=function(){let e=d;return e=c(e,(e=>e.title.toLowerCase())),e=c(e,(e=>!e.tags.includes("favorite"))),e}();function u(){return(0,n.Nc)("name")}function w(){return(0,n.H)("tags")}function b(){const[e,t]=(0,n.Nc)("operator"),s="AND"===e?"AND":"OR",i=(0,p.useCallback)((()=>{t("OR"===s?"AND":null)}),[s,t]);return[s,i]}function f(){const[e]=w(),[t]=u(),[s]=b();return(0,p.useMemo)((()=>function({users:e,tags:t,operator:s,searchName:i}){return i&&(e=e.filter((e=>e.title.toLowerCase().includes(i.toLowerCase())))),0===t.length?e:e.filter((e=>0!==e.tags.length&&("AND"===s?t.every((t=>e.tags.includes(t))):t.some((t=>e.tags.includes(t))))))}({users:m,tags:e,operator:s,searchName:t})),[e,s,t])}const S={searchBar:"searchBar_E3wW"};function v(){const[e,t]=u();return(0,i.jsx)("div",{className:S.searchBar,children:(0,i.jsx)("input",{placeholder:(0,A.I)({message:"Search for site name...",id:"showcase.searchBar.placeholder"}),value:e,onInput:e=>{t(e.currentTarget.value)}})})}var E=s(40624);const B={svg:"svg_d33c",small:"small_xkoK",medium:"medium_J4if",large:"large_G4cM"};function C({size:e,className:t,style:s}){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",className:(0,E.Z)(B.svg,B[e],t),style:s,children:(0,i.jsx)("path",{d:"M12,21.35L10.55,20.03C5.4,15.36 2,12.27 2,8.5C2,5.41 4.42,3 7.5,3C9.24,3 10.91,3.81 12,5.08C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.41 22,8.5C22,12.27 18.6,15.36 13.45,20.03L12,21.35Z"})})}var I=s(46768);const k={showcaseCardImage:"showcaseCardImage_wjKy",showcaseCardHeader:"showcaseCardHeader_H8b9",showcaseCardTitle:"showcaseCardTitle_ZxTI",showcaseCardSrcBtn:"showcaseCardSrcBtn_F6t0",showcaseCardBody:"showcaseCardBody_bvOP",cardFooter:"cardFooter_Xq1d",tag:"tag_jo6t",textLabel:"textLabel_lQex",colorLabel:"colorLabel_D_Fl"};function R(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function U(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},i=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),i.forEach((function(t){R(e,t,s[t])}))}return e}function y({label:e,description:t,color:s}){return(0,i.jsxs)("li",{className:k.tag,title:t,children:[(0,i.jsx)("span",{className:k.textLabel,children:e.toLowerCase()}),(0,i.jsx)("span",{className:k.colorLabel,style:{backgroundColor:s}})]})}function V({tags:e}){const t=c(e.map((e=>U({tag:e},l[e]))),(e=>h.indexOf(e.tag)));return(0,i.jsx)(i.Fragment,{children:t.map(((e,t)=>(0,i.jsx)(y,U({},e),t)))})}function x({user:e}){const t=function(e){var t;return null!==(t=e.preview)&&void 0!==t?t:`https://slorber-api-screenshot.netlify.app/${encodeURIComponent(e.website)}/showcase`}(e);return(0,i.jsxs)("li",{className:"card shadow--md",children:[(0,i.jsx)("div",{className:(0,E.Z)("card__image",k.showcaseCardImage),children:(0,i.jsx)(I.Z,{img:t,alt:e.title})}),(0,i.jsxs)("div",{className:"card__body",children:[(0,i.jsxs)("div",{className:(0,E.Z)(k.showcaseCardHeader),children:[(0,i.jsx)(o.Z,{as:"h4",className:k.showcaseCardTitle,children:(0,i.jsx)(a.Z,{href:e.website,className:k.showcaseCardLink,children:e.title})}),e.tags.includes("favorite")&&(0,i.jsx)(C,{size:"medium",style:{marginRight:"0.25rem"}}),e.source&&(0,i.jsx)(a.Z,{href:e.source,className:(0,E.Z)("button button--secondary button--sm",k.showcaseCardSrcBtn),children:(0,i.jsx)(A.Z,{id:"showcase.card.sourceLink",children:"source"})})]}),(0,i.jsx)("p",{className:k.showcaseCardBody,children:e.description})]}),(0,i.jsx)("ul",{className:(0,E.Z)("card__footer",k.cardFooter),children:(0,i.jsx)(V,{tags:e.tags})})]},e.title)}const Q=p.memo(x),X={cardList:"cardList_kMxr",showcaseFavorite:"showcaseFavorite_LFys",headingFavorites:"headingFavorites_LTro"},M=m.filter((e=>e.tags.includes("favorite"))),T=m.filter((e=>!e.tags.includes("favorite")));function D(){return(0,i.jsx)(o.Z,{as:"h2",children:(0,i.jsx)(A.Z,{id:"showcase.usersList.noResult",children:"No result"})})}function z(){return(0,i.jsxs)(o.Z,{as:"h2",className:X.headingFavorites,children:[(0,i.jsx)(A.Z,{id:"showcase.favoritesList.title",children:"Our favorites"}),(0,i.jsx)(C,{size:"large",style:{marginLeft:"1rem"}})]})}function O(){return(0,i.jsx)(o.Z,{as:"h2",children:(0,i.jsx)(A.Z,{id:"showcase.usersList.allUsers",children:"All sites"})})}function F({heading:e,items:t}){return(0,i.jsxs)("div",{className:"container",children:[e,(0,i.jsx)("ul",{className:(0,E.Z)("clean-list",X.cardList),children:t.map((e=>(0,i.jsx)(Q,{user:e},e.title)))})]})}function G(){return(0,i.jsx)("section",{className:"margin-top--lg margin-bottom--xl",children:(0,i.jsx)("div",{className:"container padding-vert--md text--center",children:(0,i.jsx)(D,{})})})}function K(){const e=f();return 0===e.length?(0,i.jsx)(G,{}):(0,i.jsx)("section",{className:"margin-top--lg margin-bottom--xl",children:e.length===m.length?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{className:X.showcaseFavorite,children:(0,i.jsx)(F,{heading:(0,i.jsx)(z,{}),items:M})}),(0,i.jsx)("div",{className:"margin-top--lg",children:(0,i.jsx)(F,{heading:(0,i.jsx)(O,{}),items:T})})]}):(0,i.jsx)(F,{items:e})})}const L={checkboxLabel:"checkboxLabel_vxMa"};function N(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function W(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},i=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),i.forEach((function(t){N(e,t,s[t])}))}return e}function Y(e,t){if(null==e)return{};var s,i,A=function(e,t){if(null==e)return{};var s,i,A={},a=Object.keys(e);for(i=0;i<a.length;i++)s=a[i],t.indexOf(s)>=0||(A[s]=e[s]);return A}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)s=a[i],t.indexOf(s)>=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(A[s]=e[s])}return A}function P(e){var{icon:t,label:s,description:A,tag:a}=e,r=Y(e,["icon","label","description","tag"]);const o=(0,p.useId)(),[n,g]=function(e){const[t,s]=w();return[t.includes(e),(0,p.useCallback)((()=>{s((t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e]))}),[e,s])]}(a);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("input",W({type:"checkbox",id:o,checked:n,onChange:g,className:"screen-reader-only",onKeyDown:e=>{"Enter"===e.key&&g()}},r)),(0,i.jsxs)("label",{htmlFor:o,className:L.checkboxLabel,title:A,children:[s,t]})]})}const j={checkboxLabel:"checkboxLabel_DiOL"};function J(){const e=(0,p.useId)(),[t,s]=b();return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("input",{id:e,type:"checkbox",className:"screen-reader-only","aria-label":"Toggle between or and and for the tags you selected",checked:"AND"===t,onChange:s,onKeyDown:e=>{"Enter"===e.key&&s()}}),(0,i.jsxs)("label",{htmlFor:e,className:(0,E.Z)(j.checkboxLabel,"shadow--md"),children:[(0,i.jsx)("span",{className:j.checkboxLabelOr,children:"OR"}),(0,i.jsx)("span",{className:j.checkboxLabelAnd,children:"AND"})]})]})}function q(){const e=(0,n.eH)();return(0,i.jsx)("button",{className:"button button--outline button--primary",type:"button",onClick:()=>e(),children:"Clear All"})}const H={headingRow:"headingRow_DGKw",headingText:"headingText_iR0x",headingButtons:"headingButtons_DX79",tagList:"tagList_Ku_M",tagListItem:"tagListItem_aQcS"};function Z(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function _(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},i=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),i.forEach((function(t){Z(e,t,s[t])}))}return e}function $({color:e,style:t}){return(0,i.jsx)("span",{style:_({backgroundColor:e,width:10,height:10,borderRadius:"50%"},t)})}function ee({tag:e}){const{label:t,description:s,color:A}=l[e];return(0,i.jsx)("li",{className:H.tagListItem,children:(0,i.jsx)(P,{tag:e,label:t,description:s,icon:"favorite"===e?(0,i.jsx)(C,{size:"small",style:{marginLeft:8}}):(0,i.jsx)($,{color:A,style:{backgroundColor:A,marginLeft:8}})})})}function te(){return(0,i.jsx)("ul",{className:(0,E.Z)("clean-list",H.tagList),children:h.map((e=>(0,i.jsx)(ee,{tag:e},e)))})}function se(){const e=f(),t=function(){const{selectMessage:e}=(0,g.c)();return t=>e(t,(0,A.I)({id:"showcase.filters.resultCount",description:'Pluralized label for the number of sites found on the showcase. Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"1 site|{sitesCount} sites"},{sitesCount:t}))}();return(0,i.jsxs)("div",{className:H.headingText,children:[(0,i.jsx)(o.Z,{as:"h2",children:(0,i.jsx)(A.Z,{id:"showcase.filters.title",children:"Filters"})}),(0,i.jsx)("span",{children:t(e.length)})]})}function ie(){return(0,i.jsxs)("div",{className:H.headingButtons,style:{alignItems:"center"},children:[(0,i.jsx)(J,{}),(0,i.jsx)(q,{})]})}function Ae(){return(0,i.jsxs)("div",{className:(0,E.Z)("margin-bottom--sm",H.headingRow),children:[(0,i.jsx)(se,{}),(0,i.jsx)(ie,{})]})}function ae(){return(0,i.jsxs)("section",{className:"container margin-top--l margin-bottom--lg",children:[(0,i.jsx)(Ae,{}),(0,i.jsx)(te,{})]})}const re=(0,A.I)({message:"Docusaurus Site Showcase"}),oe=(0,A.I)({message:"List of websites people are building with Docusaurus"}),pe="https://github.com/facebook/docusaurus/discussions/7826";function ne(){return(0,i.jsxs)("section",{className:"margin-top--lg margin-bottom--lg text--center",children:[(0,i.jsx)(o.Z,{as:"h1",children:re}),(0,i.jsx)("p",{children:oe}),(0,i.jsx)(a.Z,{className:"button button--primary",to:pe,children:(0,i.jsx)(A.Z,{id:"showcase.header.button",children:"\ud83d\ude4f Please add your site"})})]})}function ge(){return(0,i.jsx)(r.Z,{title:re,description:oe,children:(0,i.jsxs)("main",{className:"margin-vert--lg",children:[(0,i.jsx)(ne,{}),(0,i.jsx)(ae,{}),(0,i.jsx)("div",{style:{display:"flex",marginLeft:"auto"},className:"container",children:(0,i.jsx)(v,{})}),(0,i.jsx)(K,{})]})})}},14691:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/30-days-swa.74d6151.640.png 640w",images:[{path:s.p+"assets/ideal-img/30-days-swa.74d6151.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/30-days-swa.74d6151.640.png",toString:function(){return s.p+"assets/ideal-img/30-days-swa.74d6151.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AJJ8urKnz7Op0L2x1sG018K227+x2rapz7SmzpmEwABWMpmppdWNn7OlpqmroqyeoJygnY6WkZqkn6tZNJwAYkCjw724rKWuurm6uLq6t7q0ubu2t73As7i/ZUKiAGE9oaSruJ+sn7OzuKqjn7+ztLi0prCyk6aftV89owBkQKOfoKmPlpShoaWcm5qrpqegoJ6koZ6noqtgPqCUDV8An0V1IwAAAABJRU5ErkJggg=="}},58084:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/404lab-wiki.91eec49.640.png 640w",images:[{path:s.p+"assets/ideal-img/404lab-wiki.91eec49.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/404lab-wiki.91eec49.640.png",toString:function(){return s.p+"assets/ideal-img/404lab-wiki.91eec49.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYklEQVR4nFWMSwqAMAwFe/8rihvRRavYDyahJU1shaLO4iVkeDEuxlyK3S0QsHBhrqJVpB2RwLQhVeZlWt125esEyIWloR3zpHofALAtMtCvJsSUEhL1Z8O9ejmOQNTb+uMGDbKSUf/LDV0AAAAASUVORK5CYII="}},19035:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/7wate-wiki.147bf12.640.png 640w",images:[{path:s.p+"assets/ideal-img/7wate-wiki.147bf12.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/7wate-wiki.147bf12.640.png",toString:function(){return s.p+"assets/ideal-img/7wate-wiki.147bf12.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nA3Muw6CMBhA4T6p7+MTODs5K9FB46ABpgLGxGAv1MKgIUVpf2jFxhg54zccBEZ3AJ9h8N6DMR0Y1bS61aOAAdQoFUdRlqalLG3fN7U+YnEtHiKXqlbIaF3JkhFGKXHW4hPeB7vNOliuFi/1RB/n7uPOaf8efl+fXXg4n+LZJIm30FnEmcgJI3xMcF7cRHVOkiw8FExSyv56DoKZGySV9wAAAABJRU5ErkJggg=="}},31051:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/CIPP.ec28ed3.640.png 640w",images:[{path:s.p+"assets/ideal-img/CIPP.ec28ed3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/CIPP.ec28ed3.640.png",toString:function(){return s.p+"assets/ideal-img/CIPP.ec28ed3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA0ElEQVR4nGOoitD8VxKu878gROt/dZTO/8pow//lUXr/80O0/xeHqP8Hyv+vDlf/z/C/ieHf1zqm/9dLOP/fL2P7f66A+//ZAp7/V4u5/n+tZ/r/v5kBjBmAxL9fjYz/b5dx/r9VyvH/QTn7//tA/KeJ4f+zKtb/PxoYIQpnx0n9mxwt878tVO7/nHj5/6syFP6vzpD/PytB/n9pgMr/CVGy/+fGS/1nkNW3+2doafc/0tviv5yR038re4f/lkAsY+DwP8LT/L+uue1/WQO7/wCGCWkeXHJksQAAAABJRU5ErkJggg=="}},33873:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/SeaORM.851248f.640.png 640w",images:[{path:s.p+"assets/ideal-img/SeaORM.851248f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/SeaORM.851248f.640.png",toString:function(){return s.p+"assets/ideal-img/SeaORM.851248f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVR4nDXJSw6CMBRAUfa/IBfggIEDE6MmhFiKEIqkTaWUfl8/1kRnN/dU1rkQY4jZhZRzLh1T8h6s0da6qiwiAlmhoR5xOA9w6kxPYdlioS+j2WFiJw4N0Z61eF6PD8t1+PEiQt2aGwGm4si2w32vBz+JP/PdXxG/dG/0kk+mRioxlcpAoQ8YNoz/mBGYTwAAAABJRU5ErkJggg=="}},96460:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/SeaQL-blog.8f81fe4.640.png 640w",images:[{path:s.p+"assets/ideal-img/SeaQL-blog.8f81fe4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/SeaQL-blog.8f81fe4.640.png",toString:function(){return s.p+"assets/ideal-img/SeaQL-blog.8f81fe4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdElEQVR4nDWNWQ4DIQxDuf85K5UwgQECTFgKtSrV8kekZ8cmS+m9j7WdrKssyis/n3POnFO1GxGJMZbSXhSkDbg+A9p7IwRcYkxd9W0tETlH1tqUEhgSptQaQlBVZg73jZu9R+ePwVvDN+cuZo8etrC4f/oCcNePOqZ6ei8AAAAASUVORK5CYII="}},45454:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/Seaography.20333af.640.png 640w,"+s.p+"assets/ideal-img/Seaography.2b13efe.1030.png 1030w",images:[{path:s.p+"assets/ideal-img/Seaography.20333af.640.png",width:640,height:358},{path:s.p+"assets/ideal-img/Seaography.2b13efe.1030.png",width:1030,height:575}],src:s.p+"assets/ideal-img/Seaography.20333af.640.png",toString:function(){return s.p+"assets/ideal-img/Seaography.20333af.640.png"},placeholder:void 0,width:640,height:358},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAlklEQVR4nHWOvQ/BUBTF7/8/M0k1jZeqAQmJTWI2vCiJGHSwMPiIapXnfRxXkKBxlpuc88u5h/JzAa01/skYA6UU6G0497yjZYHhPP/yHiqBg8UFffkCP5rJMWGtxY3rt8cMk1WKaXLAbp/yyytnnDND+NHm5LDOyltpLGNU6gJBqws/aiPs9CCaEbxAwG+EqNY8yHiGOwh54ZJPut7lAAAAAElFTkSuQmCC"}},42321:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/StarfishQL.352ce0a.640.png 640w",images:[{path:s.p+"assets/ideal-img/StarfishQL.352ce0a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/StarfishQL.352ce0a.640.png",toString:function(){return s.p+"assets/ideal-img/StarfishQL.352ce0a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAd0lEQVR4nCWNwQ6DMAxD+/8/xXES0i7ThOA6bd2BFiSooE7bhLS8k+1YjjnOk4hyzswiQiJJhdoIRJDRjJlLKSoe71f3nFSU1lUMN5L2E/pxGcYPZ6Q6VqlnbQGYZ2ft72+/znu196ppPwCibQ9+XZ1f9hAi4c4v5FmQaf8KiL8AAAAASUVORK5CYII="}},93082:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/agilets.998d04b.640.png 640w",images:[{path:s.p+"assets/ideal-img/agilets.998d04b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/agilets.998d04b.640.png",toString:function(){return s.p+"assets/ideal-img/agilets.998d04b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAl0lEQVR4nGMwMbWzsnYxN7cHIlNTWwMDCyDD2sbF0MjG3MKRQURUVFRcDEgKCgkLi4gCoaSUFA8fL1AEiBikZWSsbWzs7B0srWylZWTV1bWbGjqioxNERMWkpGQYJKWktbQNNbX0VFTVJSSlFJVUmpo6ly5bIyouISUNkpbR13dQVdOXkZWXkJQGmi8mLmFkYiYlLQuUBgD32RnY+R0mCAAAAABJRU5ErkJggg=="}},31674:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/aide_jeune.08049be.640.png 640w",images:[{path:s.p+"assets/ideal-img/aide_jeune.08049be.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/aide_jeune.08049be.640.png",toString:function(){return s.p+"assets/ideal-img/aide_jeune.08049be.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR4nGNonni1Y+qtjmm3e2bemzT//qR594GM7pl3u2bcaZ10jSG79ioQZdVczai6VNJ6uaT1Umb1payaK0AEFGf4/fsfBH3+8n3z7gfrtj/8/OUbXJDhPwL8m7rg0qT5N5BE/jP8A1Nfvnz5/fvPj58g8PvPn6/fvoGU//8PAIwXernH+AbuAAAAAElFTkSuQmCC"}},88486:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/aispeaker.0538c7c.640.png 640w",images:[{path:s.p+"assets/ideal-img/aispeaker.0538c7c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/aispeaker.0538c7c.640.png",toString:function(){return s.p+"assets/ideal-img/aispeaker.0538c7c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nGN4uiXr0YbkpxtTX27LerYx+cXmFCB6sjHl6Y7Sl8enMvz79+////+3Hz47dvrSkxdvgey/v378enDl/7+/QDbDn9+/gNSla1dmzJh+++6t/////fn57ffrh0D637+/UN1A8Of3373rduzp7fnx+SuIDxaGSgPJ3z9/Pzxz++rBg79//YJo+PvqOQAOaYQaj4eJKwAAAABJRU5ErkJggg=="}},37673:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/akara-blog.990b5c8.640.png 640w",images:[{path:s.p+"assets/ideal-img/akara-blog.990b5c8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/akara-blog.990b5c8.640.png",toString:function(){return s.p+"assets/ideal-img/akara-blog.990b5c8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAXUlEQVR4nGP4+vXrfxh4/uLFi5cvgIw/f/7+/v37z58/DBCJf//+Acl5E4u7mrLhXCBAkb59/cyVSyewSAONApI/fv7+8es3nAuVBqr9/uMHyEqg8O9fIHVgLhAAADZ9kCzy1QyiAAAAAElFTkSuQmCC"}},90335:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/algolia.05175a2.640.png 640w",images:[{path:s.p+"assets/ideal-img/algolia.05175a2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/algolia.05175a2.640.png",toString:function(){return s.p+"assets/ideal-img/algolia.05175a2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeklEQVR4nC3Lyw7CIBCFYd7/5TRx5bZpoqUyOI0ww1ygGN2cxf/lhBgBAEWMWWplIpImRA3gjUcJTZzZiRSxLku83tbtVRob0TxYUDNVU/O5THq5+5p8uMs3Wujdx+giDXLKOdUCB4KqzDjpzxkaIu375/EskErc+McndO2P2L8D0nsAAAAASUVORK5CYII="}},33765:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/apache-apisix.7582932.640.png 640w",images:[{path:s.p+"assets/ideal-img/apache-apisix.7582932.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/apache-apisix.7582932.640.png",toString:function(){return s.p+"assets/ideal-img/apache-apisix.7582932.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/APXx8fj5+f38/P///+3t7XNzc2xsbG9ubmtsbHBwcQDy8/Ps7Ozs7e309vbj5OQODg4AAAACBAQFAgIaCxIA3d3dtbW2zL296tHR5dnYHyEhEhISHhYXJRMVJRwgAOvr6svKytDMzOvl5eTi4RwdHSINECgRGRMQERgaGQDe3t/Z2dr3+Pj5+/vk5OQvGyMdDREVExMREREaGRnNpk5bmgK5+wAAAABJRU5ErkJggg=="}},71241:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/apexfp.effe720.640.png 640w",images:[{path:s.p+"assets/ideal-img/apexfp.effe720.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/apexfp.effe720.640.png",toString:function(){return s.p+"assets/ideal-img/apexfp.effe720.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYElEQVR4nF3NSw6EMAwDUO5/T8RoqGAGQdPEbkPEb4GzsfIW7oqau+ei/edLIHprDjIKic6PiGIYJzMDG2uLO/8X11qn+fdf1k1KFvU7F5MM3bLElhreDCClJCKqGhMP73P7ku/pB71/AAAAAElFTkSuQmCC"}},49086:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/astronomer.5bc3316.640.png 640w",images:[{path:s.p+"assets/ideal-img/astronomer.5bc3316.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/astronomer.5bc3316.640.png",toString:function(){return s.p+"assets/ideal-img/astronomer.5bc3316.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiUlEQVR4nDWLQQ6CMBREe/8DKAKJxoCQGN14Axcu3HoFcIFpaWgrv7/9rY3oyyQzi3msqtv6cCyLfbba5VlVbppi3Wzz0+V8vd8ejEKIISitwAJ57xyiQyIfvzBj3mhxGF5d1/f9MyWNcZREgYjY8hJCTJOy1gLAPAMi/uylOOdSSq21MSZJ8c8HpAOHemQptx0AAAAASUVORK5CYII="}},38459:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/attobot.ed5b5b2.640.png 640w",images:[{path:s.p+"assets/ideal-img/attobot.ed5b5b2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/attobot.ed5b5b2.640.png",toString:function(){return s.p+"assets/ideal-img/attobot.ed5b5b2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AGPPumrSvGvVvWzWvnbYwnfZw2zVvWzVvmbQuWjRuwAdwJwbv5skwaIlwqIkwKAlv50kwqIjwqIcwJwcv5wA0PDo2vTyo+C3peLA2e3S1e3TtOXNsuLF1vPv0fHpAP7//v///+Ty3Ob24//99f///PL57fL66////////wB6gIl6gIiAg5B+gI11fId4f4h8gIt9gY15gIh6gIn63WhLnhmzngAAAABJRU5ErkJggg=="}},79962:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/avana-wallet.a19cb66.640.png 640w",images:[{path:s.p+"assets/ideal-img/avana-wallet.a19cb66.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/avana-wallet.a19cb66.640.png",toString:function(){return s.p+"assets/ideal-img/avana-wallet.a19cb66.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR4nB1MuwrCQBC8r7idzd7dJuj5ABFMoxhRCwULrUSQgJ1oJ2Ll57sRBoZ5ujwaJy1j0hhSuWt0vwkhmTSz18/OEwhMHqQ6eDzn7UdC5YnMtMihELAAXWm6vNbNzTMDDC4MriNbRw31WhYHbE8yW0EimP+xrYl8nlTtNx3v8fzOlxdVQ3uz1x9dUxX18T9nowAAAABJRU5ErkJggg=="}},84867:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/aventus.9bbf725.640.png 640w",images:[{path:s.p+"assets/ideal-img/aventus.9bbf725.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/aventus.9bbf725.640.png",toString:function(){return s.p+"assets/ideal-img/aventus.9bbf725.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVR4nGPoj/s1MfHv5OT/U1L+zy0EISBjUtK//vjfExL+MMSJ/I8VBqEYof/FZr+BCMgAiYiAEMPbZ//egdHbp/8+vPr74eVfIAPEBSOG/3gBQ1F5Y3lNW0lFU0llc3l1K4RbVNEEZAARALzias4NkUneAAAAAElFTkSuQmCC"}},7757:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/awe-framework.bebaed4.640.png 640w",images:[{path:s.p+"assets/ideal-img/awe-framework.bebaed4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/awe-framework.bebaed4.640.png",toString:function(){return s.p+"assets/ideal-img/awe-framework.bebaed4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkklEQVR4nB3L0Q6CIBSAYd5CFNoUV8qJwxAME83qrlaLl+iq667q5WNt/9W3/QQ6r0zvj2c5zZ0POE7SLxBOyu5adAS6Aez+cI82xuH1HK83XB7bSwSbfCR1o1NrMGB8E+YSTN2iqOXfkWS0YHz1/n6MdRJQW5flbNPI5DRnhNKi4Nz1fVkJqRAUVkIo1OnJaP4DFpsbb2CIRgIAAAAASUVORK5CYII="}},28106:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/axioms.9cc2f96.640.png 640w",images:[{path:s.p+"assets/ideal-img/axioms.9cc2f96.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/axioms.9cc2f96.640.png",toString:function(){return s.p+"assets/ideal-img/axioms.9cc2f96.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR4nD2LzwsBcRDFv///WSklLmpzEBdKSq1clIOLg4uTMIOvXbsz39/MKl7v1Wfe9FQ22/Qn69541c4WrcFc3Bkuu6N8mu+2+6N6/8RUGyYylbH0L1UI0X8dYmK2r7qIKXkfpBdo1s75sqwELufr7XQQ0PqJ96JZSwBAbiJCRGvdQ2sAJGJ5fQDNWIkxngRPhAAAAABJRU5ErkJggg=="}},65511:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/bandwidth.a9a038a.640.png 640w",images:[{path:s.p+"assets/ideal-img/bandwidth.a9a038a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/bandwidth.a9a038a.640.png",toString:function(){return s.p+"assets/ideal-img/bandwidth.a9a038a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nB3JOw6CMACA4V7DEAduoqczoiKVXQe9hQs+UgMJgycgutlQKpQ+aVMfyT99P4gQX13b6EwT1KWF+JVzWIjlhc5PDQjiegxpsCZh2kx3eLLFISSjuA7+CDa5mB1xgtgiY4ey399ZdGMpYjDDsJDAe0+qhzWqfXJNjfSKDJ3X0r+q7wKDdb2QxrqOcSGVVkZKra1793xw7gM4MXftqDRaWwAAAABJRU5ErkJggg=="}},91456:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/benthos.1a77a28.640.png 640w",images:[{path:s.p+"assets/ideal-img/benthos.1a77a28.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/benthos.1a77a28.640.png",toString:function(){return s.p+"assets/ideal-img/benthos.1a77a28.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfklEQVR4nB1NOQ7CMBD0/7/BW0CCJiAqjiLpEiHZjq9Z72YRG6ab29WUSq0xhJxz/wPaM1oMPpfiWMSkcZoezxcqFfKn4TDeLiLEzG6PoxUzWheWNa338/F9HUCwprOFeVnQsIm56pt0/bIqumyqDsRxfwdITPlk+Ghbds9Gf7yDjevpUTm7AAAAAElFTkSuQmCC"}},4794:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/blinkshell.5e655e6.640.png 640w",images:[{path:s.p+"assets/ideal-img/blinkshell.5e655e6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/blinkshell.5e655e6.640.png",toString:function(){return s.p+"assets/ideal-img/blinkshell.5e655e6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAh0lEQVR4nA3MWQ6EIBAAURKN4w6i2Oog0LTglsz9jzd8v0oxvtsS1sH50XlpMZdTrqA2yOPTOc+a9ZsNo/KUrIa1UPBRkAk5IwltWK9NMc1itwpptCiN49qUCpZwwhFZu+nEA0UezgaPBql2vjI4IXWbZimv5kWES76/Lt79+fTX2x5RUUjLPzNFDqoQU3GYAAAAAElFTkSuQmCC"}},41640:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/blogasaurus.bf69b17.640.png 640w",images:[{path:s.p+"assets/ideal-img/blogasaurus.bf69b17.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/blogasaurus.bf69b17.640.png",toString:function(){return s.p+"assets/ideal-img/blogasaurus.bf69b17.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfklEQVR4nC2M0Q7CIAwA+QizrgVxtRRYAZ2b/v+vOROTe7lccm57H31/SslLElbhnFhTH4NFQ7w7syaiC0d+CNkNxMPdX6YJAJHIba/dxtjMPse+9l6LlbLmXJH8iTs/kjQuXFtbW69mp4rqP5MPM1KIEa8BCOdAgASBZv/LX3T/FCeaPfd5AAAAAElFTkSuQmCC"}},6211:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png 640w",images:[{path:s.p+"assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png",toString:function(){return s.p+"assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeElEQVR4nEXKMQ7CMAwF0J69MysbZ2CmKwdBVaEDQq3TNoodJ7abSAUsfenrPzc5CzOnlFbvZ4AFiURUShQxNGZWGGN0z/41PKC7wrnFsRczValcSn1yM0yf7X6Dyym+x7rKwfXWzYNbPCf5Lqr65xACEWXmzPHHOwfljzpVOnliAAAAAElFTkSuQmCC"}},94875:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/botonic.f085f1c.640.png 640w",images:[{path:s.p+"assets/ideal-img/botonic.f085f1c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/botonic.f085f1c.640.png",toString:function(){return s.p+"assets/ideal-img/botonic.f085f1c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nB2NSxLCIBQEuf/9dGGMSUwoJGX8EBAe7yc61YupnsUYYmZStw+pvnIkBCLWcU2fQrWKQaS8Q4LQX6fuYs+jHeblEZKIIopRlVB5izC5+8n67rb2zkOBZ/bIaFikMhckQjzM7+MSEGoMGTi339/cEBVV3RI2WpF/mv8CL5uPb9BKuswAAAAASUVORK5CYII="}},39146:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/boxyhq.3cb689e.640.png 640w",images:[{path:s.p+"assets/ideal-img/boxyhq.3cb689e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/boxyhq.3cb689e.640.png",toString:function(){return s.p+"assets/ideal-img/boxyhq.3cb689e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIPXxYvfzI7fzZXh0ZLgz5Dgz5Xh0I3fzYrezIfbyQAKu5ULupUTvZgZv5s0xKUzxKUZv5sTvZgLu5UKu5UAqufaqujapubYqejbquLXquPYqenbouPVqufaqufaAP/////+//n19/////Hs7/Dr7v/+//ft8f37/P///wD8/v77/f3v9PP6/fzx9fXz9fX5+/vp7u35/Pv9/v5/RHbVRdDDdQAAAABJRU5ErkJggg=="}},30225:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/brainboard.77a456b.640.png 640w",images:[{path:s.p+"assets/ideal-img/brainboard.77a456b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/brainboard.77a456b.640.png",toString:function(){return s.p+"assets/ideal-img/brainboard.77a456b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nFXMvQrCMBSG4bPkfjsIdq6X4GIUMeogKPgHKYJThQ56A86CN+BJ0pCcpnrEyW98H/hATY7LqZ7Jw3i4U6Nyvaj2q1u5uZ+3j4t+AhF1qYsxWOuJ2vf/AF8meDaHaGJMWp+yrFfXVzaKLSBaPmhDY9By6uc5AEgpv0wEzjUpJW8dH3AqBoUQQqn5jz+XHnv1FoUhwQAAAABJRU5ErkJggg=="}},25158:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/bruce-wiki.46cdfb8.640.png 640w",images:[{path:s.p+"assets/ideal-img/bruce-wiki.46cdfb8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/bruce-wiki.46cdfb8.640.png",toString:function(){return s.p+"assets/ideal-img/bruce-wiki.46cdfb8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AF28zF++z1++z1++zmC/z1+/z16+zl++z12+z1y7zACk1c2d0cuf1c+l3taZu7mevrmq3tWg1c6s1sqs1soApcGu3ubDu7qcmZyCm5qDqp+CqaF/uL2gps+/UJ2iABhldkers1KPhj1rZnSRjIObh0VyYiiFjBCRqAJbcQAUVmYPZ4IGhJUykp2Cv8ST0chOr7YEepIRZ3wVVWX4fFbOf+nEawAAAABJRU5ErkJggg=="}},65525:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/build-tracker.228399d.640.png 640w",images:[{path:s.p+"assets/ideal-img/build-tracker.228399d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/build-tracker.228399d.640.png",toString:function(){return s.p+"assets/ideal-img/build-tracker.228399d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AG+DpHaIqIGPrX+TsX+SsH+SsIGTsXiKqnKGpnWIqQAAFlgJJmMYKGEaO3IdPHMbPHIfNWsEG1sAF1gBGFkAhpazgZSygJW0hpe0hpe0g5WzhJKvioyqh5m2hZWzAP///+7u8s3W4f///9fV29rd5f///rKzwfH2+P///wD6+/zm5+jh4eXs7e7e4OPq6+7u8PHJ1Nzr7vH9/v7k51/vOCM++gAAAABJRU5ErkJggg=="}},37693:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/chaos-mesh.7499da5.640.png 640w",images:[{path:s.p+"assets/ideal-img/chaos-mesh.7499da5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/chaos-mesh.7499da5.640.png",toString:function(){return s.p+"assets/ideal-img/chaos-mesh.7499da5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaklEQVR4nE2J2wqAIAxA+/+PM1AKsmH11oUuVFjq0taF6DDGdk5krXU3IQTnDsSDDkTc980YE4Ub7z3tppvqdvxe4s0PWutlXf/myvO8AChVVJkEKUEVZQ6K5Jv7fmCMC5FykTwTM06S0gkJno4DChrkhQAAAABJRU5ErkJggg=="}},54275:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/charles-ancheta.e031e5e.640.png 640w",images:[{path:s.p+"assets/ideal-img/charles-ancheta.e031e5e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/charles-ancheta.e031e5e.640.png",toString:function(){return s.p+"assets/ideal-img/charles-ancheta.e031e5e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaklEQVR4nD3M3QrDMAiGYW+jmhitSZMRRn8O2u3+b2yugcLDh7wHwrJUy+XPCrNETpwkiTrRGaaJEIOvyNxar/Xlx4gOQmBHFLOVfT+27fA3iJHIIwMiDYSUTVXtKQ7a+xz6+unr997riT/HWhQ/e13fPgAAAABJRU5ErkJggg=="}},78049:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/chatkitty.76eb8a9.640.png 640w",images:[{path:s.p+"assets/ideal-img/chatkitty.76eb8a9.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/chatkitty.76eb8a9.640.png",toString:function(){return s.p+"assets/ideal-img/chatkitty.76eb8a9.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR4nCWM3QrCMAyF+w7iT5euadyGTERtu6pDd+MG7m5e+v5P4oHCdyB8OYk67Hurfbm70uaMQShw4cV0lb0xeQXlKA799zP+js2rlVDbBAm4CAoBz266xxlHrQyP04Jn2WONln+n1HCg7QVKKGYJlNYlWK0NETtXM1fGcJbgDxwIFkkDjTHAAAAAAElFTkSuQmCC"}},858:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/claritychallenge.2c7a880.640.png 640w",images:[{path:s.p+"assets/ideal-img/claritychallenge.2c7a880.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/claritychallenge.2c7a880.640.png",toString:function(){return s.p+"assets/ideal-img/claritychallenge.2c7a880.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AMFqm8V6oMl/ps2Dqcx+psx+ps2BqM6Eqsh9pMBwmACQAD+VBUibClGeD1eiHWGhHGCdDlWdDlaWBUmQAD8AoBJboRNcohNdnw1YsUl/skuBnw5ZohNcoBJboBNbAPzz+Ozh5+fb4v73+u/g6OnR3vv0+O3h6PTq8Pry9gD////y7vDr5ej////z8/Th3OH////h3eH5+fn///+yYmBQPE0hbAAAAABJRU5ErkJggg=="}},20919:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/clutch.10095e3.640.png 640w",images:[{path:s.p+"assets/ideal-img/clutch.10095e3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/clutch.10095e3.640.png",toString:function(){return s.p+"assets/ideal-img/clutch.10095e3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiUlEQVR4nE2NuQ7CMBBE/ff8RTp6SioairREKVIghchYBHOEGJ+7eBcsRMF0bzR6Iyxm4vd/mJmIAAARhYHX3rjBgfKoQyLmGXLVyubqylQo61e9Wg/tVnWTj6Wq5bTYSf1Vis74qh+Xh3pzbgqXoyLI/PsTJxvngI9A95CPz1hwdEm7dPHpFuADxFaMeJhZyC4AAAAASUVORK5CYII="}},27674:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/codesweetly.60a18df.640.png 640w",images:[{path:s.p+"assets/ideal-img/codesweetly.60a18df.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/codesweetly.60a18df.640.png",toString:function(){return s.p+"assets/ideal-img/codesweetly.60a18df.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGMoLq+vrO+sbuyqb+uvb5sIRA1tEyrrO8pq2kpr2hlM7f1NnUNMXcIsnAI9fSM9fCIsnIJMHcJN7UNN7f0Yfv3///X6uc8nd////2/D5Rdbbr75//ff51c7f3w8+/PPf4b///9/u3Dk4/51QMbCs8+XXXkDZHx6vurnx6NABsO/f/++ff/29eu3v3///vzx4/v372ARIOMHkAEAlLxqixMFMAcAAAAASUVORK5CYII="}},28599:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/codeyourfuture.606a295.640.png 640w",images:[{path:s.p+"assets/ideal-img/codeyourfuture.606a295.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/codeyourfuture.606a295.640.png",toString:function(){return s.p+"assets/ideal-img/codeyourfuture.606a295.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjElEQVR4nG2IOw6CMABAe52WA8Baz4QSYCMp11OCLpKQfkioYVFqaYUWxN2Xlzc80MRxm6ZtltGiEIR0ZdkRQvP8fjo2SQKqILggVEFYh+H1gG8Y11F0hvA3EQKm75+UKS7ejI2M774oHbmwUs7DABbnlDGL99s/wMfah5RaKTNNk9Z7/Txvzm3ruvsFmod0hkdblL0AAAAASUVORK5CYII="}},21239:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/comp-labs.822720f.640.png 640w",images:[{path:s.p+"assets/ideal-img/comp-labs.822720f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/comp-labs.822720f.640.png",toString:function(){return s.p+"assets/ideal-img/comp-labs.822720f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGPIKyrNKyrLrWjJK2/KLy7Nyivu7O9ZumpGflFFTmEpg6K6nqK6gbyRp6KRq7KRs6SSSVJZ4vpz3Zo6xnKq2gzahmbaRlYqjqmGzpH2PtHGzuHGTiF2nv46hubahuYMxpZ2QGTkm2frn+zmG2Lt6m9g7mBiZgURZ3jx4uXz5y/u3H38/OWr+/cf3L1z7+mLl8dvvnj+/CVQCgAIsT8YIF5LEwAAAABJRU5ErkJggg=="}},60806:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/componentkit.9b54e22.640.png 640w",images:[{path:s.p+"assets/ideal-img/componentkit.9b54e22.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/componentkit.9b54e22.640.png",toString:function(){return s.p+"assets/ideal-img/componentkit.9b54e22.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AAyouwKluQSluQSluQGkuACitgakuAejtwmhswGgtAAAo7gDpbkxtMQ+uMgWqr1Bvs2+7/Q6vc0AorcEp7oAAKS4BaW5PLbFJa/ACae6G6W5VbrMF6K4AJ+0AaC1AAChtgSluC+zwxSqvQqovAuitxGVrCapvDm5yUe9ywCv4um85+3D6u/W8PTm9vjv+fr1/Pz7///+/v7///8+K1gzwt7BawAAAABJRU5ErkJggg=="}},24981:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/configcat.0680ead.640.png 640w",images:[{path:s.p+"assets/ideal-img/configcat.0680ead.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/configcat.0680ead.640.png",toString:function(){return s.p+"assets/ideal-img/configcat.0680ead.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAqElEQVR4nDWJPQrCQBgF90pRYqWld/AIRrATxKQQxUrydwyTFKI2KQQv4BU8gIVosrvfbrR47gbyYOAxw/hxCXEJwM++IQBd9/jeQuhyg6Zcm+ajPq3AZNRHByUueDpElY4gYxcidEDWG5iI3FbKeACdOLhvJ3jsxmiSXutstzBVzEC5B5F5oGyKZ77A6zBvvzTYbmEwaxRB1m8okvhpAeIfaK0geIVufy1kmwEm8v8KAAAAAElFTkSuQmCC"}},86361:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/console-table.5471752.640.png 640w",images:[{path:s.p+"assets/ideal-img/console-table.5471752.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/console-table.5471752.640.png",toString:function(){return s.p+"assets/ideal-img/console-table.5471752.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAo0lEQVR4nGMwMbc2NLVS1jJS0TZR1zXRMzAyMDbVNTBW0zE0MrViMLKwCwiL94rIdglMNvXKsPdPcQ1N9/PwSw2NtbD2YNAyMNM1MjM2M7d29LB29tEwslPTtzAyt4uMiDW1smeQU1BU0jJR1LGRlVdQVNFQUlGXV1SSVVAWk5aXVVBiEBUVUtaz0XeI4GRjzCtvyy5p4GBn1jAN0DcPFRUVBgAtah/6urrIZwAAAABJRU5ErkJggg=="}},38597:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/countrystatecity.86819b3.640.png 640w",images:[{path:s.p+"assets/ideal-img/countrystatecity.86819b3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/countrystatecity.86819b3.640.png",toString:function(){return s.p+"assets/ideal-img/countrystatecity.86819b3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVR4nCXLzQrCMBAE4DyG0mw2stkVD4rxJFhQGhFpD1K1P1pa8f1fwgVhLvMxY7rP+TWlfiraoWjfed3k9/6otRvT8E0GgKwj8JzNYHd7rKoR5mCRLQSNCSK8lCAcYzyV11RdtjEq/t0EFgrMIg6pfu6b7gBIxKyuMRacDsAhetzEtcOFQ6+HzILiD+btHGkNW5uTAAAAAElFTkSuQmCC"}},32170:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/create-react-app.04f5848.640.png 640w",images:[{path:s.p+"assets/ideal-img/create-react-app.04f5848.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/create-react-app.04f5848.640.png",toString:function(){return s.p+"assets/ideal-img/create-react-app.04f5848.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR4nGMoqmysqG2rrGuvrGkrae4EIiCjora9uKKxuKKJQV7dXE7dTFbdTFHdXNvBW9vRW1HDXFbNTF7DQl7DnCEoIgWCwmIyopJyo5Nyw2LSg6NSIYIMv37//vnr18uXr96/f//k6dMXr169fAVkfwCKAxHDPzD48ePHz58/geSvX7++ggFEHABz8VhtY4Rc/QAAAABJRU5ErkJggg=="}},39034:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/cryptodevhub.473746b.640.png 640w",images:[{path:s.p+"assets/ideal-img/cryptodevhub.473746b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/cryptodevhub.473746b.640.png",toString:function(){return s.p+"assets/ideal-img/cryptodevhub.473746b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVR4nCXJSw6CMBAG4N6nJhzCxB2J8SoQLkAQLZ7EKCZ4IzcgnZlWCy4oJY4x+Rb/Q1wKvO5tXdpGuUYN7F6Nt9Kec10frEgkJhJSCVmE+ZpYFkG6Yr9dFBtix9hUWzrtkHFQsfnv4vNa3ugdsbl7GOYoDCZwHe0i5uB73QFq7yeEFqCdOJDu4cnXF5nWb6aCfT/rAAAAAElFTkSuQmCC"}},18246:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png 640w",images:[{path:s.p+"assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png",toString:function(){return s.p+"assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlUlEQVR4nA3MOw5BQRQA0NmDhMznDm/unTvf19CI4PkUEgk70NmETqu1A7uyFZ2pT3JEKn2Kqda+lFpKz4R5eZxfbhxiSlkgUrP1drfaDMP+QGBOj/fr+8NYyTnhPXsOGDKid45mRi2u9/PzE2ImImGMAYCpnVprc8q5VCsnMB5p3cQIKaUF6LrOt4e5ORJyjFprpdQf2/gaoN8ibzgAAAAASUVORK5CYII="}},31168:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/darklang.db998be.640.png 640w",images:[{path:s.p+"assets/ideal-img/darklang.db998be.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/darklang.db998be.640.png",toString:function(){return s.p+"assets/ideal-img/darklang.db998be.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAe0lEQVR4nFWOSw7DIAxEuRwSR2HFWRBnYM1l2hUbDoBQKiWYOuZTN1UXedJs5o0si2M/xhg551IKEb0vELG1hniKCjDn3LZXrbDW6r0DNN6tC8GOK++9c85aG0LgZv0RnJNIa62UklIaY3h902POGOPjyzOlxJf5m5/+AEY6hVJ7/KXCAAAAAElFTkSuQmCC"}},1338:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/dart-code-metrics.acf78cc.640.png 640w",images:[{path:s.p+"assets/ideal-img/dart-code-metrics.acf78cc.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/dart-code-metrics.acf78cc.640.png",toString:function(){return s.p+"assets/ideal-img/dart-code-metrics.acf78cc.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeklEQVR4nC2LWxLCMAhFs0Z36Upcga8fPxx1aseYEE0DFIhJKx9w5x6Om5BNVayeAxWe8zd57xEJsSCRs9oHSDfb0+4aD5fHO8ZZZKmrW097msQSyhCLLca6O2a1MVMLH9bM3TsCZdY/Bkj3YWTmVwAfoorsb08foaEfbX6PwssdWlsAAAAASUVORK5CYII="}},96280:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/datagit.4382cac.640.png 640w",images:[{path:s.p+"assets/ideal-img/datagit.4382cac.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/datagit.4382cac.640.png",toString:function(){return s.p+"assets/ideal-img/datagit.4382cac.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhklEQVR4nB2NLQ9CMQxF9+NBkjxNgsKAwUMwkGARGCaeGFkgEAzires+2tLtqNt7mlxTaxUiTihMTIU7RKQ9xGhEpAZ8ni/zxYDhq6fqUnKMk+am3/5332xX690ESRrsPVirmg2RnI63YbbcH64pJ+amETlAWzEpl9G97Ojc4wNad/Sjj/AfbZ+Lrc4NBT8AAAAASUVORK5CYII="}},83335:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/devspace.b33de3f.640.png 640w",images:[{path:s.p+"assets/ideal-img/devspace.b33de3f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/devspace.b33de3f.640.png",toString:function(){return s.p+"assets/ideal-img/devspace.b33de3f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAh0lEQVR4nB2KsQ7CMAxE8+l8ER/AyMKG1AUYKEtbREKbSjROHNtJMNxwp7t7Zg4IiREx5ywirTUuTRetzGKcs0x5XpbL9TYMo3IihbioK2qm6RkAIEYlUoqEEVMq5ffV2oz3noi2EF7u7VfoHQx+A8ztLwMxaRwfdnfo9md76j/30YWIOq5Uv2ftjdaO8/xoAAAAAElFTkSuQmCC"}},91992:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/difranca-technotes.344b6c1.640.png 640w",images:[{path:s.p+"assets/ideal-img/difranca-technotes.344b6c1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/difranca-technotes.344b6c1.640.png",toString:function(){return s.p+"assets/ideal-img/difranca-technotes.344b6c1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbUlEQVR4nD2NyQ6DMAxE/f8/yIEjqEgFRIjwFjuhViJ1Dh6Nnxe47qylqCoS1VrfrtaaqJpXEJXIKaVlXXLO7m5mgUuvQITREhZmMXMRISJmHmcgZsO++z7N02fbxur/C0QIe/A5zgMJA3vXwD8VC5Gk6TpyugAAAABJRU5ErkJggg=="}},71564:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/digitalsupportservices.b7d40b3.640.png 640w",images:[{path:s.p+"assets/ideal-img/digitalsupportservices.b7d40b3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/digitalsupportservices.b7d40b3.640.png",toString:function(){return s.p+"assets/ideal-img/digitalsupportservices.b7d40b3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeElEQVR4nEWLUQ6CMBBEe/8beQ1NQCNfUMpSaixIty1xu6wadT5mkvcyqoPUmtABagj9uOphlgaXW7P2NqtSCjPfva/PdXUdquZ2aey8oEAxol/zJNoyOpftRJiIiD9c8TcnTYdjhMmniD/410ska3x+hCLfdxBxB8CYjvdWVS7mAAAAAElFTkSuQmCC"}},25917:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/dimeschedulersdk.ea0d02a.640.png 640w",images:[{path:s.p+"assets/ideal-img/dimeschedulersdk.ea0d02a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/dimeschedulersdk.ea0d02a.640.png",toString:function(){return s.p+"assets/ideal-img/dimeschedulersdk.ea0d02a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AJ2Uyp+YzaKaz6Sb0Kuj06qj06Oaz6Kaz6Kc0ZuUyABmWrJmWbFkWbFkW7JvZ7hwaLtmXLVlW7NlWbFmW7MAcWa3alyzkJDB1+DtyM/nwsze2N3joZnIaFuzcma3AHBktmZZspeVvf//+drQ1dCzuPbp6KueyGRYsXBktgBvZLVoW7SLibHh5dnj1uLNvdDa1t2jmsllWbFwZLZUDl+EErF/IgAAAABJRU5ErkJggg=="}},80810:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/discordresources.2b0a897.640.png 640w",images:[{path:s.p+"assets/ideal-img/discordresources.2b0a897.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/discordresources.2b0a897.640.png",toString:function(){return s.p+"assets/ideal-img/discordresources.2b0a897.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeklEQVR4nE2Nyw7DIAwE+f8/7AVRVWmT8EowYAwBF6WX7nFXMyuCg9aaMUZK+VnXXWtELKVAmP0lMiIzO2eVegJATpmo9jG8P0ohcZ5ARDGidyFAfJut9z54pJxvOuHVmvVp260+3MMq/osoRLfcL69lno7OtdYp+M1fJwWPf+WiIw4AAAAASUVORK5CYII="}},18182:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/divine-wsf.a2512d2.640.png 640w",images:[{path:s.p+"assets/ideal-img/divine-wsf.a2512d2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/divine-wsf.a2512d2.640.png",toString:function(){return s.p+"assets/ideal-img/divine-wsf.a2512d2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AKFCoaRGpKdKp69br7JhsrFfsbBbsKhLqKRFpKNHowCOE46NEo2NEo2PFo+cNpycN52PF4+MEoyMEYyOFo4A/Pn89vP25+Xo8Ozw7uvv5+To7Ojt7eru9/T3+/j7AP////3+/fX29fz9/P39/fHz8fb39v39/P7+/v///wDY2dzT1NfJys7LzdDJys7P0NPQ0dTLzM/T1NfY2dx5+m7BISBdpgAAAABJRU5ErkJggg=="}},96770:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/djamaile.32177b7.640.png 640w",images:[{path:s.p+"assets/ideal-img/djamaile.32177b7.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/djamaile.32177b7.640.png",toString:function(){return s.p+"assets/ideal-img/djamaile.32177b7.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhElEQVR4nCWLWwrCMBREs4XiTx7UtLmPpGmKG4jonxZ8FLsYoav3SmGYj3NmVD5NacgBSZpjopg4pUAERGOZVEAUFwBFPN/LZ10pRiGiRSlklgxjIY6P13K7z0icS9m56gNI5Nz6Tjvnu/5PAHautDHG2qY51Mv1u221nmXRHr11TmvzA2o3GCkDh6M5AAAAAElFTkSuQmCC"}},35342:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/docs-butterfly.38310eb.640.png 640w",images:[{path:s.p+"assets/ideal-img/docs-butterfly.38310eb.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/docs-butterfly.38310eb.640.png",toString:function(){return s.p+"assets/ideal-img/docs-butterfly.38310eb.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhElEQVR4nCWJSw6CMBRFuwU1UaBQTOjrj1oZlzWgI2LihPVh2qg79BpezuCe85hzztg/nVTBG++1JA21ridlWCcJ4Lig59Qv94ELBUWUpBgpDbD8JcyPebxF4y2R3joT7RnUjeC8DtfhqIsTLxvRbp0VZbXbH2Ic3ynldf288jdlKCJeP6YkHUj+4W2XAAAAAElFTkSuQmCC"}},52919:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/docs-taro-zone.2c1034b.640.png 640w",images:[{path:s.p+"assets/ideal-img/docs-taro-zone.2c1034b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/docs-taro-zone.2c1034b.640.png",toString:function(){return s.p+"assets/ideal-img/docs-taro-zone.2c1034b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAg0lEQVR4nC2LSxKCMBQEc/8txQYK5AJcRI9glRsMQUPC35QvyRtR7GVPjyhPMsuaJLmm6S3Pu6JQVaXKUtV1c74YQfQC8zw/nTPAGyAgAhzZAxDr6rznttVSPu6y09oaMw7Dsm0uhCjww9rdzdNEznkiCiEw8/d9zH0/LsueI8bD//kAvhuJx3ZPdZYAAAAASUVORK5CYII="}},38411:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/draftjs.654d7be.640.png 640w",images:[{path:s.p+"assets/ideal-img/draftjs.654d7be.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/draftjs.654d7be.640.png",toString:function(){return s.p+"assets/ideal-img/draftjs.654d7be.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGO4ffjwvRMn7h47dufY0VuHDt09fvzh+fOPzp27feTozcNHGGqUlGtV1Sb7+DZqaVcpKOyfNu3ptatH580HigMRw9nVq8+uWXtq/YYTK1YcXbzk4tZtl3bsuLh1K0h89WqG//////v///vv37///fvx9y+Q/Prz568/f/6DAcPfP3/+gjk/vn//+uXL71+//v39+//fP4g4AAP9dRINiqDzAAAAAElFTkSuQmCC"}},39200:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/drayman.d6b4620.640.png 640w",images:[{path:s.p+"assets/ideal-img/drayman.d6b4620.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/drayman.d6b4620.640.png",toString:function(){return s.p+"assets/ideal-img/drayman.d6b4620.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoklEQVR4nGPo85Pq8hLr8BDp8BBuchVqdhXq8BQBom4fsQnB8gz/ixn+l4DQ72LGhxnMz7JZ/pQy/S9nAKIfRUwML3OYX2QzvchgeNBkcn1C6MUu/5sV2vdiGe4kMN5MYGIIMhS31pS115a00pRyNtVat2DK4U1LDq2be3jj4mOL2xh05MWEJRTFpGR5BYS0tPW+fv32////f3//AslvT64CABItQmemozrPAAAAAElFTkSuQmCC"}},54077:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/dyte.81c1b82.640.png 640w",images:[{path:s.p+"assets/ideal-img/dyte.81c1b82.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/dyte.81c1b82.640.png",toString:function(){return s.p+"assets/ideal-img/dyte.81c1b82.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nFWLuw3CMBBAPSY1EzAAiBmyAV0KJEpoGQCaFDQIhEB8kkBsQs65O8d3gKh45Xt65uG4xZjfXWXr2rPHGNsQEMoKNwc18BU6W2T9QTJO1/1htp0sm+mIvBUVw0Sq6ubpLundLvtT0aF9RXcViVHUIKKIhPJMx1VHjf5jACAw5/bpPBOTh+IzhMC//AaYM4kVoKY1HAAAAABJRU5ErkJggg=="}},97888:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/easy-dates.f146f6f.640.png 640w",images:[{path:s.p+"assets/ideal-img/easy-dates.f146f6f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/easy-dates.f146f6f.640.png",toString:function(){return s.p+"assets/ideal-img/easy-dates.f146f6f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfklEQVR4nCWNUQ7DIAxDuUQp7YAQChTCULf9V/uqdv8bzdqkF8myI1vVJoHjzTrrvPXkKPgfMGNMCvF5vsF1fcY4pmk2y4r7oyiwvI7+fJTRQ04r02Kt1kbPBn8q8FZE0GmJtlz2Js5TygUSi4rjVqugA2PS72WvzLFJh4b5BUdtFLPvCheqAAAAAElFTkSuQmCC"}},12948:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/easyjwt.59f3f81.640.png 640w",images:[{path:s.p+"assets/ideal-img/easyjwt.59f3f81.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/easyjwt.59f3f81.640.png",toString:function(){return s.p+"assets/ideal-img/easyjwt.59f3f81.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AH174IF94YeC5YeB5YyF54yG5YyF5Y+H5oyF4oiA3AARCtUSC9QTC9QdE9JORtRLQ9IiFM8dD9AhE9IkFtQAiYXriYXrjIrukY/sqKXpqabpkIrohX3njofqj4nqAP////7+/e7u7f///+/v9vv7+v39/9LQ8eno6f///wD+/v/y8vTl5ej7+/3q6u3u7vD7+/3p6ezo6Ov+/v8boGuIAQDUXgAAAABJRU5ErkJggg=="}},44823:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/easypanel.b290e0d.640.png 640w",images:[{path:s.p+"assets/ideal-img/easypanel.b290e0d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/easypanel.b290e0d.640.png",toString:function(){return s.p+"assets/ideal-img/easypanel.b290e0d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nDWM3QqCMBhAv+nmvvmXE7YVlVsuougilAoySCihq+j93yYpOpzbcwDThDFGggAIgT+EEEopihiKUjrvq6rSWgdhaJa1mjmlrZl7keTgrBvuj667SinHbNNeTsO7GV7N+VnqBTBr8sM65vh7qulq3/bbY79rbnmhIMpSPsk4x+grx1GBKLgQEeIHcAYMG7V9ZpUAAAAASUVORK5CYII="}},1754:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/edulinks.db6aea1.640.png 640w",images:[{path:s.p+"assets/ideal-img/edulinks.db6aea1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/edulinks.db6aea1.640.png",toString:function(){return s.p+"assets/ideal-img/edulinks.db6aea1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeElEQVR4nCVN2w6DIBTj/39wjwYys4GoILdzARzMpGnaNG3FYuwZnLFavaVaVYIIXLDCA7G7I2HOGH10LrhQQsJEDbkR8Ix3oBIxS7PVm6+SrD9X/X0tEjrNdqE8Nj+b5k6jekUfcrDu4I5iPD1nVPHPU3DD2mjYHwEjjvfkNP9JAAAAAElFTkSuQmCC"}},54589:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/eightshift-docs.47e2289.640.png 640w",images:[{path:s.p+"assets/ideal-img/eightshift-docs.47e2289.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/eightshift-docs.47e2289.640.png",toString:function(){return s.p+"assets/ideal-img/eightshift-docs.47e2289.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AOXm4/Hw7ff28/X08fb18vTz8PDv7PL09e7v9unl7gD39vPx8O7u7evw8Ozt7eru7uz4+PXz5MPBpbaTeeAA+PfzwcfFoauqtLy6sLi1wMnI6ODM6bBG77ZDq4y9APn39L/Gw7K6uMbLycbNxqKfxJ6DdNihRNWhaaKAuwD39vPT19XZ3Nn49vT09O7g2O+3oNmsktKolOHFuevT23qoCnjt6gAAAABJRU5ErkJggg=="}},24530:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/enarx.4022acc.640.png 640w",images:[{path:s.p+"assets/ideal-img/enarx.4022acc.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/enarx.4022acc.640.png",toString:function(){return s.p+"assets/ideal-img/enarx.4022acc.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAg0lEQVR4nEWJOxLCIBRFadTN+F2a+TxeooRoE5M9OLo0MxRILTBQ4RsKPXOLM+eysoaaYwW8rKAGBI7YtBybY1EAtuzHYrlab/eb3YHkX/vLVXTyJLrhNt4fT9owTmchhezpYimlEEKMkeSTySVSJGHee621McY5985Ya5VSr3l2zn8B3GpX2ntmHVwAAAAASUVORK5CYII="}},4083:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/eric.823d61a.640.png 640w",images:[{path:s.p+"assets/ideal-img/eric.823d61a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/eric.823d61a.640.png",toString:function(){return s.p+"assets/ideal-img/eric.823d61a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAd0lEQVR4nF1PQQ6EQAib///GL+wHPHj1soc9mYyriQ4wA11QYzY26QFoCySpFaoKmOEf5nVrDewkKkghiKZdw6cBhQA1JCJCzhnTd8c8LxDhYx5bgp/xjbLtnng1m7tU7RYx88Gue3nAegqfiBNCLCLo+wHV//gByxnDtJJu+MgAAAAASUVORK5CYII="}},75936:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/erxes.2c541e2.640.png 640w",images:[{path:s.p+"assets/ideal-img/erxes.2c541e2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/erxes.2c541e2.640.png",toString:function(){return s.p+"assets/ideal-img/erxes.2c541e2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nB2NzQrCMBCE8/6P1UNBPIlKTaki3kzBLOZnNruhunQYGPiGYZxKr8AnUoxUCgD+pkxEOSXV7rbtVzLOl9nflnE8DsNhmhbvHwatcq31WltrElY8X/QO0ZZGALHKWVSIab7X07WGtRDZm+4W11jNYFVLRs5gFmblnf8BbNyNQMkBhhEAAAAASUVORK5CYII="}},82408:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/eta.bdd7514.640.png 640w",images:[{path:s.p+"assets/ideal-img/eta.bdd7514.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/eta.bdd7514.640.png",toString:function(){return s.p+"assets/ideal-img/eta.bdd7514.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAf0lEQVR4nC2NWwqDMBREsy8FcSslbqzpfz9aqPuxBA3xgWlyQ7yJXk3naziHYVjY/kHE/Qp17z2AQ4wso3U1/TAQjTF23TeEkC5+6pSScw4ASOc1kTxj1JRS0zRba435Pd8vIR53IT5tS+pcKz1KKbXW87LcOK/quihL3jR0dABdjYYDy36wiwAAAABJRU5ErkJggg=="}},89075:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/evantay.4c64461.640.png 640w",images:[{path:s.p+"assets/ideal-img/evantay.4c64461.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/evantay.4c64461.640.png",toString:function(){return s.p+"assets/ideal-img/evantay.4c64461.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZElEQVR4nE2O4QqAIBCDfYXcnXqdplIURND7v12KFO3fvg02E2NQVeccAHoVQofee0Mga61vQOaRgfDJEBNN4C3xXXFlKuIaYh5V0+sWUmI987qXRUVF2tYvBkKal2OVHIf9TjwJvw19xr2hwgAAAABJRU5ErkJggg=="}},42518:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/evershop.1549b8c.640.png 640w",images:[{path:s.p+"assets/ideal-img/evershop.1549b8c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/evershop.1549b8c.640.png",toString:function(){return s.p+"assets/ideal-img/evershop.1549b8c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdElEQVR4nE2OwQ6DIAyGef8Hm1d3MGaImuihiIGJmhQYqJ3ssO/290vbn60rxpiOm/MmhOC9R3TOBUZZaz0pBSCFaJtGSDmpeTbGkGK0g4jW2n4cqlfNOQcAijT86nzwE+OjLYvu+V7stu0ppfzrpzP/DTIXH/aPJGc541AAAAAASUVORK5CYII="}},74630:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/fast.e23f1f6.640.png 640w",images:[{path:s.p+"assets/ideal-img/fast.e23f1f6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/fast.e23f1f6.640.png",toString:function(){return s.p+"assets/ideal-img/fast.e23f1f6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZklEQVR4nF2NwRKAIAhE/f/v1DqYA0I1SpCR3XocmNlll8BQTY2qD90TVe2970xdJDDvZra9FFdbazoRkTFGuC71RM45xlhKQawe8LsxCd9yI6W0rCsiEtHfBkAvJ2YAOI7T3336A70BkG99yQPGAAAAAElFTkSuQmCC"}},48356:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/fbt.0038828.640.png 640w",images:[{path:s.p+"assets/ideal-img/fbt.0038828.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/fbt.0038828.640.png",toString:function(){return s.p+"assets/ideal-img/fbt.0038828.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIqkz5Gm0ZCm0ZGn0pCm0JCl0ZCq042u1oidx4qhzAAnUqcjTqUxWKlPcLMsVqonTaUoYrAvhMQrU6onU6cAmq7Wn7Pbo7fctsbjlqrSl6vTkqXOgJS+i5/ImK7VAP7+/p+bnXx4e5SRlWxnaWNfYrm2tsG9vM3Lyv///wD6+/uurrKXlpyjoqh1c3tranPY2tz////6/Pz7/PxStWAPlEbkHQAAAABJRU5ErkJggg=="}},27139:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/files-gallery.660f153.640.png 640w",images:[{path:s.p+"assets/ideal-img/files-gallery.660f153.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/files-gallery.660f153.640.png",toString:function(){return s.p+"assets/ideal-img/files-gallery.660f153.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoklEQVR4nGNQ0NKVUdZQ0TZQ0tSTVtaQUdEEInk1bWUtfUUNXQZZFS1JBXVjW0dbD18tEytdc1s1fTN5DT05FW0ZZU0GOXUdIFIyMVE3NlE3sFDXM1bUNpBW0xFTVJdT02FQN7ZQ1DXQMraMa+wMjk9xTitMKq4rLW9ubZmgbWbNYGjnqqxjZObotmHn8rmLVk3bfmLD0rnzOvumTphv5OgBALTqJvAc1qoPAAAAAElFTkSuQmCC"}},51639:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/firecms.8f9e7bd.640.png 640w",images:[{path:s.p+"assets/ideal-img/firecms.8f9e7bd.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/firecms.8f9e7bd.640.png",toString:function(){return s.p+"assets/ideal-img/firecms.8f9e7bd.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAm0lEQVR4nAXBWwqCQBQA0NlD4SsbvaPXKfEtaqKpmKZCBZE/UfbTEto/dA5xwUQwDN2CLdINWuiZ6DGT03jEqCK2Dpxquqp7XnZsJscNLeQqZVniD31DDkV9fzzH0/C9zK/bGxEBIM/Lviq7uiairLBd4DrFHM119uPcZgyW5XM9t1NbEklWBFGQZHml7ddOB8yklPphkMdJlaZ/XoccXaXL8zQAAAAASUVORK5CYII="}},91945:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/firelordjs.2fea679.640.png 640w",images:[{path:s.p+"assets/ideal-img/firelordjs.2fea679.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/firelordjs.2fea679.640.png",toString:function(){return s.p+"assets/ideal-img/firelordjs.2fea679.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR4nD2MWw7CIBRE2QImch+AVlOkDQ20UK2PxH65/y2JmpicTObMxwgk/qGQvDtUavmPAhABCJGkogE2QUm5xarwRbDdm51lw23n12V8PZduCMSkrTXWiqZP45ymSyzXPN3nvN7Oj5JKjDn1wQuo16Sb5uic/9CealZl1groDX1ZE7ZwoyWjAAAAAElFTkSuQmCC"}},70746:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flagsmith.dc4da77.640.png 640w",images:[{path:s.p+"assets/ideal-img/flagsmith.dc4da77.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flagsmith.dc4da77.640.png",toString:function(){return s.p+"assets/ideal-img/flagsmith.dc4da77.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nBWMvQrCMBgA8xS2ab6/pH+xaVEaEXTWtbi6i5tUiosIPrsRbjq4UyFEtjKO+108+nYzDDHGQwhbZKnqRlVNvcr0+TQt8+e1fO+35/x4X6ar2LIwoFxZGUBkV7edX/dEDtEaw0icvEoHIhFXStsUwhoQAA1AluuEsu4/6ULvfcfiUkQsgJTrIvEDdNkYqKppU/wAAAAASUVORK5CYII="}},45094:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flarum.f170a82.640.png 640w",images:[{path:s.p+"assets/ideal-img/flarum.f170a82.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flarum.f170a82.640.png",toString:function(){return s.p+"assets/ideal-img/flarum.f170a82.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZ0lEQVR4nD3K0Q4CIQxEUf7/QzFrjMtCC+2Ugo1xvZm3M2k8s4qcpZxX7X3E5K4zJWae7u/jUY4cEt6IAexvqRFhutElryyia+9lttx/zL27uwKqqK0ZMAz259oIZswElQmN17wt+gDH6ZF/9v4BSAAAAABJRU5ErkJggg=="}},32237:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flatifycss.0e31d6b.640.png 640w",images:[{path:s.p+"assets/ideal-img/flatifycss.0e31d6b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flatifycss.0e31d6b.640.png",toString:function(){return s.p+"assets/ideal-img/flatifycss.0e31d6b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcUlEQVR4nD2K2xJEMBBE8///xS+s8LCkKFUplxVMkMtoS5nqh+5zRlgXvtNeGl+trB3rgxUxJiCUCDGqv5YdJbJOZfPRCyYglGBms/mit0jWjrL95R2hA0Jd+v6oZ6dGUgM1szO7v/mjcSFE66+gvPAEzReO7DqYISoAAAAASUVORK5CYII="}},1374:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flexit.3f9bb99.640.png 640w",images:[{path:s.p+"assets/ideal-img/flexit.3f9bb99.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flexit.3f9bb99.640.png",toString:function(){return s.p+"assets/ideal-img/flexit.3f9bb99.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nGOI3/U4ec+zjP0viw6/zDrwMufgy8LDL9P3v0je/TRx1xMGhvarDG1XGDuuMUy8qbTgrvKCu4wTbjB1ggRBUv0X3gFRz5mXzcefzrjyfvbVDy2n33aefTvhIkic4T8YfHrz9O2z+3///QOyn3z58+LbHyADyGH48+//91+/H7/59ObT119//n758fvtp6/ffvz4/fcfEAEAGkVzqJeBZr4AAAAASUVORK5CYII="}},26079:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flipper.1c689c8.640.png 640w",images:[{path:s.p+"assets/ideal-img/flipper.1c689c8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flipper.1c689c8.640.png",toString:function(){return s.p+"assets/ideal-img/flipper.1c689c8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGMQF1EX5FcQFlSWEFOTFlOWllCXltISF1EVE1E10LdjEBPRkBDTEhZQFhHTFtH1F1e2A7IF+FWA4kICKgySEgbCglpJaTWLlm2Zs3jDgiUb1qzZXFTcICykLSVpyKCl7Swnb7l23c7///9//PDhy5evQMbmLXsUlaw0tZwYXr9+B0Rfv3778f3Hu3fvP3z4+OPHTyD31au3QHEA6NVBEyTT1KYAAAAASUVORK5CYII="}},92793:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/flux.3858b11.640.png 640w",images:[{path:s.p+"assets/ideal-img/flux.3858b11.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/flux.3858b11.640.png",toString:function(){return s.p+"assets/ideal-img/flux.3858b11.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGNo39bevrWja0cPGHV37ujq2glid+/sad7QzCBaJClWJClRLCNeLGXRam3RaiNeJAVkixZKAMUZpuybOmHPpO7t3VP2Tll8bNni40sn7Z3St2vCxL1TJu+dyvD///9P3z+dvnry/9+/rz59ByKgyLkbl7///AFkMPz+++ftu7fvP3749OXT81cvP3z69O79u8dPn3z/8f3vv78AVKRkfKP7Il0AAAAASUVORK5CYII="}},78585:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/foal.1cdd073.640.png 640w",images:[{path:s.p+"assets/ideal-img/foal.1cdd073.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/foal.1cdd073.640.png",toString:function(){return s.p+"assets/ideal-img/foal.1cdd073.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/ADiD3zqG4jiD4DSB3TeC3TWC4DiF5DmE3ziB2zZ91AAzftk0gNxBhtpEiuI7hOBEiNxFit9BhdkzftozguIALn7gLIHpKYLwSovWbJS7OYPcM4XpL4PrLX7hLXvZABFy5x9ryCVksShhpjdqpSVlsSJgrSNfqRtjvBZz5gCSxP9jeJIrJh4rLC4mKCshIB8jIyIZFA5Wa4eVxv8xTUaTfkrZuwAAAABJRU5ErkJggg=="}},94735:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/formatjs.913a9c1.640.png 640w",images:[{path:s.p+"assets/ideal-img/formatjs.913a9c1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/formatjs.913a9c1.640.png",toString:function(){return s.p+"assets/ideal-img/formatjs.913a9c1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AJ6CrKCFr6GGsaWKtaqRuKiPtaGGrp+CrJh7pJJ1nwBeM3ZgNnlmOnxnPH5uRYVrRIJeNHdZLnJUKm1PJmgAXDh0WzZ1WzZ5Xjh4b0yDbUyCXzp0WTVyVDFuUi9rAPDv9cy6x5tyiLCbrNnf6dXT1szCiefg2ezp8urm7AD////z8e7g29Hr6uPw8/P3+PXr6eHx7+/+/v////+k9VubYGfpqQAAAABJRU5ErkJggg=="}},13609:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/froggit.f573421.640.png 640w",images:[{path:s.p+"assets/ideal-img/froggit.f573421.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/froggit.f573421.640.png",toString:function(){return s.p+"assets/ideal-img/froggit.f573421.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AI2hTo6jT4+jT4yhT42iUZCkUZCkUZClUY6jUI6iUQCMoUqLoEmInkeElkCAkTx5jjt8kjyEm0CGnEGHnkMAmKtdorJoo7Vxt7twvsB3qbiDtMGQw86hytSrz9i0APf5973T6/b4+v///+rs9fLy9f////3+/vHy+P7+/gD9/f7p7/j6+/3////v8PPy8vH+//75+vju8O/6+vnlrmowCoOprAAAAABJRU5ErkJggg=="}},12137:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/fullstackchronicles.a6691ab.640.png 640w",images:[{path:s.p+"assets/ideal-img/fullstackchronicles.a6691ab.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/fullstackchronicles.a6691ab.640.png",toString:function(){return s.p+"assets/ideal-img/fullstackchronicles.a6691ab.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVR4nGPYf/7unjO3dpy4vmDHmWkbjs/afHLpnvNbjl3ffeb2xTvPGP7////n9+8/v3/+AIGff//9+48EGIDcb9++f/ny9dGjJzdv3bn/4NG9ew++fvv+999/oFKQ7l+/fgHJ5pYqTU1pQ0N1PV2ls2dPA0X+/v0Lkv737y+QXLBgoq+vY2Cgf0CAz9WrVyDSAI0JeqaeZkGCAAAAAElFTkSuQmCC"}},50551:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/geekyweb.fc837d8.640.png 640w",images:[{path:s.p+"assets/ideal-img/geekyweb.fc837d8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/geekyweb.fc837d8.640.png",toString:function(){return s.p+"assets/ideal-img/geekyweb.fc837d8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVR4nDXJWwuCMBiAYe+KmDKdczpRv82tPKeQnSZEJfX//1FSdPNevI8Vyt7jOzfUhBcOgZXN1068wQkOcpdJi+ctjlR5nQszs2rEeefqHssWUUB+ZiE/tSnI5sSgYVAFUNOs9uLt8r9MUodJOD+leevplYz35PiIustifw6EOtzEYMQwQb/U+Gr/4w9oNxMG3VrSigAAAABJRU5ErkJggg=="}},18394:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/getorca.org-dark.401ed3e.640.png 640w",images:[{path:s.p+"assets/ideal-img/getorca.org-dark.401ed3e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/getorca.org-dark.401ed3e.640.png",toString:function(){return s.p+"assets/ideal-img/getorca.org-dark.401ed3e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGNQVFKWlZNXVFLS1NLW0tIGkdo6QEF5BUVlFVUGKXkFMTFxoKi1ja2VtQ0Q2Ts4aGpqAQUl5eQZFHR1hYVF+AWF+PgFePn4fXx9gYZx8/CKScsoGRoyKJoYGRgaeXp5u7l7uHt4BAUFe3l5+/gFWLm5qdnZMohravT3T/z////bd+8/f/n6/fuPz1++/Pz5c87SZYr2tgA4Myp/ZLuITwAAAABJRU5ErkJggg=="}},51399:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/ghostly.707ead8.640.png 640w",images:[{path:s.p+"assets/ideal-img/ghostly.707ead8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/ghostly.707ead8.640.png",toString:function(){return s.p+"assets/ideal-img/ghostly.707ead8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AFWm4Vmo4Vyp4lyr5Wmx5mmx5lyr5WCt5lqp4lim4QAskt4tkt4nkd4rkt4zld4zld0rkt4mkN0sk94sk94A+Pv8+fz9grrj3ez3rs/prdHr3+34iL3l+Pv++Pv9AP////z7+9zl6/X2+Obq7ubr7/Hy89ni6f38/P///wB5f4h/hY2FiI9/hIx7f4h+gop6f4eAhIt4fod6gIlR3WlvtarX2wAAAABJRU5ErkJggg=="}},67663:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/gladys-assistant.4b7d76e.640.png 640w",images:[{path:s.p+"assets/ideal-img/gladys-assistant.4b7d76e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/gladys-assistant.4b7d76e.640.png",toString:function(){return s.p+"assets/ideal-img/gladys-assistant.4b7d76e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVR4nGPQ0tbR1dXV1tVT19RUVlFVUlZWUlYBIiBXW0eHwdDU3N7Vw8bWVl1DU9/QaNuOPXv2HTx67PiChYuU1dQZ1A3NdG1cgHJyCopARfsPn7hx+97///+vXbuupqHJADJNSVFFVV1eUcnEzHzd+o07du09dOTEkmUrgeYzKCirgJCSMgQpAtmKSvKKihA2AKMILaQUdgdzAAAAAElFTkSuQmCC"}},33117:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/gotenberg.81978c3.640.png 640w",images:[{path:s.p+"assets/ideal-img/gotenberg.81978c3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/gotenberg.81978c3.640.png",toString:function(){return s.p+"assets/ideal-img/gotenberg.81978c3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nBXNMQvCMBCG4fx/8C+o4O7g4CDujiqlYl1TS61Q0uTu0lxyqfHZXr7hU8aYyVpfEAEAIuYsfg7kPQKolFLfddfb/fFsiCjFeDoe6qpCcByjyolfH3OuW91/y2YdrHb79WY7dO8kopjDOMEwGnAuMuPMl0Zr3SIRMysRKWfLspSw1hKicMiF/P0A5E+LSGRGvo4AAAAASUVORK5CYII="}},38582:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/gtfs-to-html.e90b7b0.640.png 640w",images:[{path:s.p+"assets/ideal-img/gtfs-to-html.e90b7b0.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/gtfs-to-html.e90b7b0.640.png",toString:function(){return s.p+"assets/ideal-img/gtfs-to-html.e90b7b0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApElEQVR4nGOorm9v7ZjYN3FmY1tfS8eEnv5pfRNmdPdObWztralvZxCR0baydA30ChGU0pJVNtTQtTK281DRtpBU0JdSNGCob+qqbeisq+8EMqrrO2rqO5o7+xuau+obOoAiDP/////86cfv33///fv78uW7V6/eA0VePnvz9f0XIIPh589fHz9+/P7925cvXz58+Pjt23cg4+HDx2/fvf/79x8AwnleSVE7nQQAAAAASUVORK5CYII="}},23785:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/gulp.166db42.640.png 640w",images:[{path:s.p+"assets/ideal-img/gulp.166db42.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/gulp.166db42.640.png",toString:function(){return s.p+"assets/ideal-img/gulp.166db42.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfUlEQVR4nFWMzQ6CMBCE+/4vxIFIlZDARR/ChN9SpLHAtt0tbr0Y5/BlDvONMHWzVtVaN6/rTRdS5fki5XwplrJ8Zpk4/4MxxW8bkyKJcRj6tu27TitFiOS9M+Z9f4C10bmf/dVisBYB/HHgvnMRWrM2T5MCgHQeAg8TiZgfam6MbcsG9aUAAAAASUVORK5CYII="}},69537:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/haochen.aadb05f.640.png 640w",images:[{path:s.p+"assets/ideal-img/haochen.aadb05f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/haochen.aadb05f.640.png",toString:function(){return s.p+"assets/ideal-img/haochen.aadb05f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nB2Nuw6CMBRA+5n6C3yAizqZOPshOsFi2HRyNHEwEIwxJDyESiktt73prejJmc9hcpD+B006ok5TI50AXwqXFZIhIhgAi8oSOvoozwfb9vDimDXIul5UVd20PH93CjB5PMPjKU3ymsuksExrPWptDIyjmh73NJ0Hm1mw3UdxITwzxk5l+uPIny/XQxgt1qvlLr7l/gtu34ZwoUSlSQAAAABJRU5ErkJggg=="}},79008:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/hashnode.32e3d9c.640.png 640w",images:[{path:s.p+"assets/ideal-img/hashnode.32e3d9c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/hashnode.32e3d9c.640.png",toString:function(){return s.p+"assets/ideal-img/hashnode.32e3d9c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaklEQVR4nD2L2wqDMBBE8/+f2DzWhwgWNDV7i7vpVNSBhWHnnLTVJsLjTKiGGYqZEeGvadxprCXnkl8ketERCYfm7sxMzHtrKOF+zX+PBPPhQSRH76KdWR97TPO+Vqj9Xb6APqvMSwUP4gc77ZHbbKqcTQAAAABJRU5ErkJggg=="}},32423:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/hasura.f2e12c4.640.png 640w",images:[{path:s.p+"assets/ideal-img/hasura.f2e12c4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/hasura.f2e12c4.640.png",toString:function(){return s.p+"assets/ideal-img/hasura.f2e12c4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAf0lEQVR4nCXLSw6DIBRAUfYgIiqIT/4CBW2Tkk466P731FqSOzu5KNSPTE9/f5lSYT9lfKy+jOCYzfPxRjpXpuJiggzll7Bhlq7n0E2iG9nF3NwIOAJ+AIcXRVTCXGIGmG//W0eq4mQzlTsRhurUN2aAhD+ZTgNYsppr4luD1he7xxScaES9MAAAAABJRU5ErkJggg=="}},40256:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/hcaptcha.d81b005.640.png 640w",images:[{path:s.p+"assets/ideal-img/hcaptcha.d81b005.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/hcaptcha.d81b005.640.png",toString:function(){return s.p+"assets/ideal-img/hcaptcha.d81b005.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nB1OSRKDIBDkFVEjBFBAWa2UW/7/sc6Ml+mq6VWk44SeZviwoNSGXCucDxilwuQcFvqFNUGkXPAe1UPe9w/neaESyUZtLGbn0Q8DxL4fsHaC0gY6BMjZwRBaQqk+WNZIQRKCT9cPsORsNCNuX+S2IZcKQwEs5BmCRa+uf6q4OsYEQ5WWdnMi/xn/pNVHhXnngg4AAAAASUVORK5CYII="}},16923:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/hermes.6ae4708.640.png 640w",images:[{path:s.p+"assets/ideal-img/hermes.6ae4708.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/hermes.6ae4708.640.png",toString:function(){return s.p+"assets/ideal-img/hermes.6ae4708.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nGOoObes4+r6djBquwZC7VDuhoazyxgE1ibwrYnnW5MguDbRfkcdEAmtTQQK8q9J4F+bwDDhxta+61u6r26cdGv7glv759/eP/HW9tbL63qvbQZKMfz////Nt4+3Xj8GMu69evrowysg4+zTu1+//QAyGP78+/v05fOX7958/fbtxevXH798fvPu3dMXz3/8+gmUAgBICm3QRPCzaQAAAABJRU5ErkJggg=="}},80101:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/home-assistant.49e0a60.640.png 640w",images:[{path:s.p+"assets/ideal-img/home-assistant.49e0a60.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/home-assistant.49e0a60.640.png",toString:function(){return s.p+"assets/ideal-img/home-assistant.49e0a60.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAo0lEQVR4nGMIOPjF/8Dn3NNfc05/DTv2I/fsj4zTP4CMkCPfAg58YmBc+Jlh/pe007+STvxkmPuZa/VX1hVfGBZ9ZVjwmWHhF4bpt3/2Xf08/cr76de/9F371nXpc8+VL21n3ky58X3arR8M//////f3z79f3/79+//vPxj9+/vrx4//YMCwdvPOVRu3r1i7ec2mnUD2ui27123ZtW7z7rVgLgBjxHAkpPfTNAAAAABJRU5ErkJggg=="}},70305:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/httpin.a8bdf87.640.png 640w",images:[{path:s.p+"assets/ideal-img/httpin.a8bdf87.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/httpin.a8bdf87.640.png",toString:function(){return s.p+"assets/ideal-img/httpin.a8bdf87.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYUlEQVR4nE2N7QqAIAxFff/nDIlMCHXM9lXTChrcH2eHuwVsICIppZwzi1xzzEyYmSh4nI9tjzE2AFV99Dn3AXt3ogK1NpnuPwFmo9RC7LdlxNns1UTktMalIyqPj+7sa984f5KCBfrOswAAAABJRU5ErkJggg=="}},74234:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/iammassoud.a25a8f3.640.png 640w",images:[{path:s.p+"assets/ideal-img/iammassoud.a25a8f3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/iammassoud.a25a8f3.640.png",toString:function(){return s.p+"assets/ideal-img/iammassoud.a25a8f3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjElEQVR4nGP4Bwb/YQDI+vfn27+/v3/+/AkUZ/jy5ctLIHj16vfv30Dpj59/Pr13Dqji1+8/f//8YXj//v2DBw8fPnr06tVLoPTRXfPurq759Onr1y8fgQoYgCb8+fMXCP78Aek+tG9NkLN2YETsmnlln97eZ0DYCnbAm3efDpy6ePjYkSPbJr19/RgAcKuHPsTaj+cAAAAASUVORK5CYII="}},90497:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/icodex.3a80b26.640.png 640w",images:[{path:s.p+"assets/ideal-img/icodex.3a80b26.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/icodex.3a80b26.640.png",toString:function(){return s.p+"assets/ideal-img/icodex.3a80b26.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjElEQVR4nGP4+fXbz1+/fsDAPyD4/+/Pv39///779vULA5CbWVhu4exl6+Hr4B1w9/7D////f/369devX0AGw7+//yIS05T1TDVMrHUs7G/fvff7z+/3799DpYH4w8dPr968/fb549tXz798/gwU+fv3738wAEn//QdinXr67dijH4/evfr04/1/GAAAnaaAPTEyTjoAAAAASUVORK5CYII="}},22713:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/idb.5dbdf9f.640.png 640w",images:[{path:s.p+"assets/ideal-img/idb.5dbdf9f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/idb.5dbdf9f.640.png",toString:function(){return s.p+"assets/ideal-img/idb.5dbdf9f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nGP49+/ffxj4AwR///778/fzm09Axo8fPxiAoh8/frx+8/btu/fPXbp+6eqNq9fuXLx0F6IBJD19+nQGBgYubh52Dg4ePl7fhJLpzf0I6cmTJwOlWZiZgSQDK/MyI49nBV0/gRL//iGkWVlYGJmYgEqSLYLnbTgElARKAQCp22HMpv2NVgAAAABJRU5ErkJggg=="}},8531:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/indent.f5f3516.640.png 640w",images:[{path:s.p+"assets/ideal-img/indent.f5f3516.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/indent.f5f3516.640.png",toString:function(){return s.p+"assets/ideal-img/indent.f5f3516.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nE3JQQ7CIBBAUe5/LTeadGM0RmuoJJRiqVZKAAVmOrLTl/zVZ/oZHvYtxtCq0HB/lPGsy92icdANL+YTDRaVRW7gOuJelm2XN23a8dwIYDGBnKLQThq/+A8RUm2lAlSQWC7oQo5uBkh1rBX9sIuGk4JDj7cJ+hlyoX9fTz+NwTj89xoAAAAASUVORK5CYII="}},48775:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/intelagent.cf9c5e4.640.png 640w",images:[{path:s.p+"assets/ideal-img/intelagent.cf9c5e4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/intelagent.cf9c5e4.640.png",toString:function(){return s.p+"assets/ideal-img/intelagent.cf9c5e4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfElEQVR4nDWM3QrCMAyF+/5PI3i9N1DxpogyvHEypwiSjDZNmtTM4YHA+QlfaK0RsYi4qbWWUugn994EP9+Y2czaXyKVqKhqMNX+fDnFiIgrw19TSjnnZVaz+Bj6aZwBvf3AfH++mYr7Ba7NdvC6Jlixt2HcbLv94YiAHr8IKI9edeLUfQAAAABJRU5ErkJggg=="}},18391:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/ionic.3b8b190.640.png 640w",images:[{path:s.p+"assets/ideal-img/ionic.3b8b190.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/ionic.3b8b190.640.png",toString:function(){return s.p+"assets/ideal-img/ionic.3b8b190.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfElEQVR4nC2MTQ8CIQxE+f//Tb17MVkTDbC7VSgfpS3Yg6d5mZcZB1/UucbgzSOkMlXmnKVUIjJwrY+11mAOwfsQE3aAz+V627an9a60biGqWFsnZlk+QoSaUrJL1zuZVtXWDEmFTb/2itn0+Gtmzogs9iIn5PvjfeyHbX6IPY/Bn8gJYAAAAABJRU5ErkJggg=="}},28962:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/iota-wiki.7df3488.640.png 640w",images:[{path:s.p+"assets/ideal-img/iota-wiki.7df3488.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/iota-wiki.7df3488.640.png",toString:function(){return s.p+"assets/ideal-img/iota-wiki.7df3488.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGMQU7QQljURkjURlDERAiNeMV1uIQ0+SQMxeXMGYTkzc4dQE+sASXkLQRkzHhFdj4SK9O5ForKm3JJGDALSxvJajjKmnmLG7vxSRlzC2v6lfYVL9/FKG+somDPwSOhzS+jzG7kIWvuwC2rKatl5ZPXYpfXrOUdKieowcIlogZCAOiefqoCUvrCskYCcKZ+sqZCsEZugOgD35xo4w2bsZgAAAABJRU5ErkJggg=="}},80775:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/jest.8037160.640.png 640w",images:[{path:s.p+"assets/ideal-img/jest.8037160.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/jest.8037160.640.png",toString:function(){return s.p+"assets/ideal-img/jest.8037160.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nA3JOw6CQBRA0VkEjgzz4H1mEPGT4BcLG020MLgsbUhMXIELwM7GZVho4TZcgTS3OFdBllgDBuxusz3V5/p6qQ5HGRT5uLAASmvT6YYa4N7cfp/X7/t+PhoTx0GgdWgUEiVI4tN1uazm5X4yWy2mKK51RFLCQsg+S3uj3A37lHn0TMTM0i5lTISYsDA7auudIyTvHUAcRfYPDT0e72naU4wAAAAASUVORK5CYII="}},47338:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/joelpo.88e8281.640.png 640w",images:[{path:s.p+"assets/ideal-img/joelpo.88e8281.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/joelpo.88e8281.640.png",toString:function(){return s.p+"assets/ideal-img/joelpo.88e8281.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAVUlEQVR4nF2LSw7AIAgFvf85686FBD8BBUq0tklnReYxgYjMbM7pxziIqMsxONiCmVNKtdbWWu9dVLd/Zi8AALEgoj/pb/Y6A7iVhR2++ooxZ3i7zQ175JL6k/fWgAAAAABJRU5ErkJggg=="}},15755:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/johnnyreilly.ecc5d44.640.png 640w",images:[{path:s.p+"assets/ideal-img/johnnyreilly.ecc5d44.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/johnnyreilly.ecc5d44.640.png",toString:function(){return s.p+"assets/ideal-img/johnnyreilly.ecc5d44.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nC3JMQrCMBiG4ZxJ0UV3Bxc9hxQXZwdxERw9g4cQ2kVxc9G1oKBYbJom+ZNUk7SJEfx4pvdDr7wAAPE2t1zficW8rp0z1mpjVKUQCIExLkGlT5mVRlv3mw98gFRVcQDK2CPDhImipDnhFGTjXIBs3Xjvz1feiZJWFPdnSXcaD+d79bGh/+/DhfQ268FqO1qcxstje7Jj0oT+BZxmgQ0TnwOPAAAAAElFTkSuQmCC"}},38227:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/juffalow.7c45de5.640.png 640w",images:[{path:s.p+"assets/ideal-img/juffalow.7c45de5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/juffalow.7c45de5.640.png",toString:function(){return s.p+"assets/ideal-img/juffalow.7c45de5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnElEQVR4nGNQU9PQ0zOQkZUXEZMUk5AGIxlpWXk5eQUVVVUGKSkgW8HKwigm3CvYz9nPy8HLzUxPV0VCUkZcQpJBWkaGk4s3My3+yI7FM7vK5vXXTKpPdrE3ERQWk5KWZgBiPiGxYDfTrvK0opQkfwfrtJDg0OAIPgEBKWkZBklJKTFJGXUZ/uQgz7q8TF9Tqdwwa0crY6BuSSlpACNTIIgrPJwqAAAAAElFTkSuQmCC"}},99532:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/junjie.63b7a2f.640.png 640w",images:[{path:s.p+"assets/ideal-img/junjie.63b7a2f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/junjie.63b7a2f.640.png",toString:function(){return s.p+"assets/ideal-img/junjie.63b7a2f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AJOenJWfoJKgoJWjo5Ofn5WiopmlpZuop5mjpJujpAAgIysrNjszSUodNDQeOTogOzwdLjE7ckQoNDAwMzwAJykwKENDK19aMltnNkhKKTc6KC41KzU1JSwwOT9EALi5vLe9vbW/v7S9v6musqutsLC0tri4u7e4u77AwgD//////f3z5+Pe49bi7fH46One3+vx7/T////9/v5TRVEoLyUbnQAAAABJRU5ErkJggg=="}},15949:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/k3ai.a05af97.640.png 640w",images:[{path:s.p+"assets/ideal-img/k3ai.a05af97.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/k3ai.a05af97.640.png",toString:function(){return s.p+"assets/ideal-img/k3ai.a05af97.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmUlEQVR4nBWJsQ6CMBRF+6nGDxCdjWKc+BxDTOrgwuRuoksRkEhtaUItFLQptj6TM5x7LpL1rm0ObYO7Btc0Zo+4kxgm8BJ7RG9zmgYVCXi+OCXT5DgBqcgMIoB4seZFyO8bmi3Ta0Qu0TNfiXL7j0WIrGHmTbXK3Mj7rlKytJ9SsLM1HC7kvXfOaT2A6H5QrR7Hr5TKOQj+B9Q8fw36uHGmAAAAAElFTkSuQmCC"}},87362:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kaustubhk24.a89b443.640.png 640w",images:[{path:s.p+"assets/ideal-img/kaustubhk24.a89b443.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kaustubhk24.a89b443.640.png",toString:function(){return s.p+"assets/ideal-img/kaustubhk24.a89b443.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcklEQVR4nE2JOw6DMBAFff8rpaJJGhoOgCIogkBEDjjx2t5f1ggpmeJpnsa99h1SigCqihkzlCpIIQQs5JDIPnHd7treLo2JiBCzidODTFiQh+HR9yOxlqOdWVTH1d+X57R95i3Ob/AJf9l6gMhSsdU/vsDokRlQpHlEAAAAAElFTkSuQmCC"}},64828:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/khyron_realm.2659294.640.png 640w",images:[{path:s.p+"assets/ideal-img/khyron_realm.2659294.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/khyron_realm.2659294.640.png",toString:function(){return s.p+"assets/ideal-img/khyron_realm.2659294.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGNQEHaU5rWS5rGS5rNUlLJXkHYQ4zWX5rWW47eTE7RlEGFwEmFwFWRw5mO2E+RzFBBw5GG1E2J0Bos7M0gzuCvwuuoqeMkw+Nh6hli7BvAwWCoJByjy+4ow2DNYsCQ4yyUGWiRYKJdnTTmc3nJUjCs+zLot2rKfl8GSwZI9wYkrI9Vkb4Tz9/qS66vWrZrSvyMmvcdSJVOYwQEAsY8icyPEQY4AAAAASUVORK5CYII="}},9284:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kosko.4c715d5.640.png 640w",images:[{path:s.p+"assets/ideal-img/kosko.4c715d5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kosko.4c715d5.640.png",toString:function(){return s.p+"assets/ideal-img/kosko.4c715d5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlUlEQVR4nGP4/v37128//v388v/vrx8g8PPf7+///vz69u3b9+8/GT49u3nz/IGLz168e/Xk3v37r169+vnxxc8v7/78/QcEDL9/fv376/O//9gBw+mz53v7J8+eNXfmrLnzFy5dsmzloiXLFi1ePmv2/EuXrzIA+bqGltZ2bmaWjp6+wZa2LgbG1qbm9kqqenPnLQIAmblzOyZhprIAAAAASUVORK5CYII="}},98124:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kotest.bf00e76.640.png 640w",images:[{path:s.p+"assets/ideal-img/kotest.bf00e76.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kotest.bf00e76.640.png",toString:function(){return s.p+"assets/ideal-img/kotest.bf00e76.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGMoLKsoraipb2mra2qtbWwub62p6qivb2srr6orKC5jEJVWFJNWVjTSVnXUM/S003O0MrG109AzEpECiisxtHf1NrW0ZxSU51bWLZ0zc3J/Z0lVRXVTV3tXT1tnD8O/f//+//9/4fK1ly/f3rh19cyVc99//ACygYJAKZD0r1+/3r57++3bt5dvXn/49PHd23dAABT/+/cvAIhJW4cmDklHAAAAAElFTkSuQmCC"}},7448:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kube-green.0076719.640.png 640w",images:[{path:s.p+"assets/ideal-img/kube-green.0076719.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kube-green.0076719.640.png",toString:function(){return s.p+"assets/ideal-img/kube-green.0076719.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGOQ9jGV9jKV8TaT9jSRD7FUCLEEcX3MZH3MJdyNGIRjrHjCjBl9NJl9tJTTXZXT3Bg81Rm8NbjDjIVjrRkE1OTsQrxaZk0o729tntLbMWNS29zJnfOn2oV4C6jJMnCyc+Vm5/z//3/x8o1XL1978/r1fzDIzcnlYudiEBETMzIxSUlLi01ICIuIiIyOzsjMSsvIMDQ2BkoBAIyfM/I5IkW+AAAAAElFTkSuQmCC"}},32098:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kubevela.abc3ad9.640.png 640w",images:[{path:s.p+"assets/ideal-img/kubevela.abc3ad9.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kubevela.abc3ad9.640.png",toString:function(){return s.p+"assets/ideal-img/kubevela.abc3ad9.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVR4nE2MCQrAMAgE8/+vBloqVJJNVmsu6CC4OmICYGY+KaDWkWPRgt7TcusgX0++ZYy+SSSnHhS0KP+x9fuqiEQGqqqi9a3PcyONswXH+gfBJJPlR+tFPAAAAABJRU5ErkJggg=="}},83375:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kuizuo.ee23145.640.png 640w",images:[{path:s.p+"assets/ideal-img/kuizuo.ee23145.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kuizuo.ee23145.640.png",toString:function(){return s.p+"assets/ideal-img/kuizuo.ee23145.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGP48fPXfxD49//fPyD15cvX16/ffPr0+enTZ99//GT48fPn0xev7j778vsPSNXC+auXLll/9syl3q6ZQC7D56/fHj1/8/jll/efvn/48PHL919nzlzq6ZnZ0jkLJP37z7+fv/79/vPn77+/r1693bHzQGpiQXByVdr8w8dPXWQAWQu19//nz19v374fE53p4RFx6uzlZ89fAQBqsX+twfqR+QAAAABJRU5ErkJggg=="}},15600:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/kwatch.9e8062e.640.png 640w",images:[{path:s.p+"assets/ideal-img/kwatch.9e8062e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/kwatch.9e8062e.640.png",toString:function(){return s.p+"assets/ideal-img/kwatch.9e8062e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIy2vYy2vY65wJC6w5S9x5W9x4+6wpC6wo23voavtgAydewxdOszdus2d+tJhOxKhew2eOwzdusxdOsydu0ANHbhNXfhNnjhMnbjZJTeY5PfMXXhNXfgNHfgM3bgAN3r/tbj+s7b8tDf9trn/N7r/9fl/NXj+dzp/uDu/wC0tLaura+qqqyrq62xsbO3t7iysbOxsbOysbSzs7XZg2Rc1/bIEwAAAABJRU5ErkJggg=="}},28594:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/labviewbook.402bfc2.640.png 640w",images:[{path:s.p+"assets/ideal-img/labviewbook.402bfc2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/labviewbook.402bfc2.640.png",toString:function(){return s.p+"assets/ideal-img/labviewbook.402bfc2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nGPQNzDS1NI2MDRSUFSSlpGVkZUFkkAkr6CiqqrGoKSsKiUtY25haWpmrqikIiOrqKikrKCoCBQUFZNgAGoF6ps+Y8a5c+erauuFRcRlZOWAuiUkpYCIQUtbB6j84OEj////nzp3Ib+AgKSUtLiEJFRaQ1MLqHbr3v03nr6saW4TFhEFSkPkgAgADzYiRZce2Y0AAAAASUVORK5CYII="}},6417:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/leedom.20f512e.640.png 640w",images:[{path:s.p+"assets/ideal-img/leedom.20f512e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/leedom.20f512e.640.png",toString:function(){return s.p+"assets/ideal-img/leedom.20f512e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGMoKCmvqm0Eouq6xoqmtormNiCjsqahtLKmpLKWQVBCnl9URkBMlltIUsvaQcvKgVtQQkBcDigiKCbLMGf+wtnzFs6cu3DWnPkrV61bsWrtrLkLps2aByTnzFvI8P///1///3/59w/I+PD795tfQN7/J58+//j9G8hg+PL5y5s3b588ffr+w4dnz188f/4CyHj89NnrN2+BUgD/A12KDxGD5AAAAABJRU5ErkJggg=="}},41128:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/leon.0ea5093.640.png 640w",images:[{path:s.p+"assets/ideal-img/leon.0ea5093.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/leon.0ea5093.640.png",toString:function(){return s.p+"assets/ideal-img/leon.0ea5093.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcklEQVR4nD3KQRLDIAhAURBBqBIzSSvTTXMA73+/2slM3/Z/8GNktTlnRMCCmCiLCIuYKTR3BLw+13gNJk6Y1kNEZva7a62YsB3bHqc/d90exY0KIyLcEqX+Ptk1t5KbgBEWgr81xoi+dS3F1Ly5MN/pC7K+BNiuDVOXAAAAAElFTkSuQmCC"}},63945:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/lerna.55ca7ad.640.png 640w",images:[{path:s.p+"assets/ideal-img/lerna.55ca7ad.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/lerna.55ca7ad.640.png",toString:function(){return s.p+"assets/ideal-img/lerna.55ca7ad.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVR4nCWMzQrCMBCE8/7v4GPovTexwR7syYOhYCmisTVmsz/ZFFOEYfiYGcZ8IkbkRFoFmGMSIEm8eQA2xOU9wxLjFxNmyWuRrAkK0QamZpfT2DbONsPV+pfLgLI/TO3Z16lBzEMHzoJ/oH9CmHkB2h07e5tU11rr2NO9JwCp56yFRAPTH367BIxQ7FYRZQAAAABJRU5ErkJggg=="}},50543:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/liqvid.b36c48c.640.png 640w",images:[{path:s.p+"assets/ideal-img/liqvid.b36c48c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/liqvid.b36c48c.640.png",toString:function(){return s.p+"assets/ideal-img/liqvid.b36c48c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAm0lEQVR4nGNQ1rVWNnWV1TKXVdaQV9OQVlKVUFQRk1EGImlFdQZ9MxtnT38jCzsNTTVtbSVtLWVVVQV5eVkFIFKQZ1DVMVYxc1M2tFfRUFXTUFTXUFJSUZSXkwcCBUUlBil5NXFNKwl1Uw1FJTU1FRWgbnkpCQlJEJCSZohNTItNSIqOT+orae5om9zU3zuhurK8srq6uqaishoAdXMfp8QgziYAAAAASUVORK5CYII="}},19019:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/livekit.d765dc5.640.png 640w",images:[{path:s.p+"assets/ideal-img/livekit.d765dc5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/livekit.d765dc5.640.png",toString:function(){return s.p+"assets/ideal-img/livekit.d765dc5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVR4nDWNSxIDIQgF+ShqYJTRyWayyv0vGVImvaAo+tUDjudb9JpzqT4Akf6ISEoJpDRiWWuZWSml1hozRM4ZgtYqEbr7GG7WI8DMRAybiCOi2eF+9j5Uvx2R+Ol4E/q+X+ecse/auGz7AWHSBCN4XtIvAAAAAElFTkSuQmCC"}},19559:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/lux-algo.f6b681c.640.png 640w",images:[{path:s.p+"assets/ideal-img/lux-algo.f6b681c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/lux-algo.f6b681c.640.png",toString:function(){return s.p+"assets/ideal-img/lux-algo.f6b681c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR4nE3MvQ7CIBRAYd7/QTSxppFFJ+Pm4OCmDjYmLiZCm1Lgwv1BtKMn33zUoulWzXO9fGzb117bQzsctTtpf97Ey84pH8dShQhY4PsXfTKXrN69m0IOITnnjaV+YMwoXIKHmRqn6AGZizDeOrjeUYRrrSklAFB2cAEwxmiMZcZSWETmeUqZiH6pvIqhcJtWpQAAAABJRU5ErkJggg=="}},22717:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mailgo.68c3215.640.png 640w",images:[{path:s.p+"assets/ideal-img/mailgo.68c3215.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mailgo.68c3215.640.png",toString:function(){return s.p+"assets/ideal-img/mailgo.68c3215.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR4nC1OWw7CIBDkFspSpMLyVBOo1bTWalHj/Y/kRs1MMq+fYSntvA8xJmtdzqWUDtGSDyFa65ml8M3ULvVR6xPROeepIbKfaI3G4G0m3LU2W9X+ZxASOO/HiQs5Le/+PMJGna4vAAGiYSsOTSNzd1SqjYcc0p6eDJeZtjWHD0ymF5yjPQpHAAAAAElFTkSuQmCC"}},63474:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mapillaryjs.5ab6a6e.640.png 640w",images:[{path:s.p+"assets/ideal-img/mapillaryjs.5ab6a6e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mapillaryjs.5ab6a6e.640.png",toString:function(){return s.p+"assets/ideal-img/mapillaryjs.5ab6a6e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGMQnhYoMMkPhCb7C/T6CPT5ABnCUwNFpwfzT/RnYL6SxnItg/1GFsv1TKbdUUy7IpmvZwAFQehqOgPrqWSWo3EM2wNYjsRy7I1l3xPDeiKR5UQC68kkIGLgs1fTi3Nt2jRTNcxWMchSI8qR30Fdxs9M1E1PyFmLQZhb0NrYsretW01OxdnG0cHSXoxf1FDXRFZMRkJADACKHy4vCzk+KQAAAABJRU5ErkJggg=="}},89534:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mediamachine.62dfa0e.640.png 640w",images:[{path:s.p+"assets/ideal-img/mediamachine.62dfa0e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mediamachine.62dfa0e.640.png",toString:function(){return s.p+"assets/ideal-img/mediamachine.62dfa0e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nC2NXQuCMBiFdx+ltrUvx6A2psulK4IoEysKhKiL/P//pTfo9jznOQcZf+B6g0XBdVjkFZGe5mvMSyxKSNCMWKZC1491fHBVZ9xNiE3oas6LjDkEHhhCR6JCKgtM3ec67Jr3lCxhAEGFqeoyjLf25WUEqdu2xp4TauHih+Hs2D9P+7sTTfofN8Cg+gUe4hS2LA82uAAAAABJRU5ErkJggg=="}},1610:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/meli.305f7f3.640.png 640w",images:[{path:s.p+"assets/ideal-img/meli.305f7f3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/meli.305f7f3.640.png",toString:function(){return s.p+"assets/ideal-img/meli.305f7f3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAW0lEQVR4nFVNWw7AIAzy/pdVZx+2vsZ0WTI+aCmkhJjzWusqD+acYwxILG7mrQUwNIvElJjZ3XvvsNdGOBsxkQjihUi1Nm+vfYbgZoaoqoLx4GejoprPDdR/9g1jsJMa4mviPgAAAABJRU5ErkJggg=="}},7629:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/memgraph.41afca3.640.png 640w",images:[{path:s.p+"assets/ideal-img/memgraph.41afca3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/memgraph.41afca3.640.png",toString:function(){return s.p+"assets/ideal-img/memgraph.41afca3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApElEQVR4nGP4fCDh3dqk1wvyn3VnPyrPvF2af7Go5HhG9d7Yto0RExje9Eo8yZN6lGF/09nomKzcHAGVJYZOK10S+tnCO7jyGJ4Ua92LNnzYVHa3ovpqecPhks6TndOvLNvRK1nRJNrJ8OvZvZ+P73/78fPXnz/ff/788+/ft6/ff37/+fbu25c33zL8B4MfX7/8+vHj2+fP379+BTJ+//4FEQcA/eVoKuaWdloAAAAASUVORK5CYII="}},69702:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/meoo.69f3a2d.640.png 640w",images:[{path:s.p+"assets/ideal-img/meoo.69f3a2d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/meoo.69f3a2d.640.png",toString:function(){return s.p+"assets/ideal-img/meoo.69f3a2d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhUlEQVR4nFWLMQ7CMBAE/Xc+AQ+ggCoSLQWSEVQp6BGSg0QRnEB8xvh83BknVEyxzewoGJ6YKMbIzHlCpg0hgPcq//ORzAzE+DupEt0AHs6Z5kqYeqFqtz5uqvYdsvCoz6axXd/ebUpk4mul69l8eYFhrLMIIgL4VKSICe60Pyy2Wne26C9o+4xGjQc3JQAAAABJRU5ErkJggg=="}},6557:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/metalyoung.4712df7.640.png 640w",images:[{path:s.p+"assets/ideal-img/metalyoung.4712df7.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/metalyoung.4712df7.640.png",toString:function(){return s.p+"assets/ideal-img/metalyoung.4712df7.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVR4nE2NwQqCQBCG99E7+RaeuvQCHTUTPBRYitpBwUqKwPbSgu4os7v9BEIfDMw/38AvXr0iomEY3YL9MRFprYX7x9rj7ZG1XVE29zJnaDx+1EzEsIZ5G8fBPkyi4rSrnGPBbOpWvqWCpmn215uV56VJdT0/cRFLncFgU7I/ROGlqdGO+AWC4YpMKx9VVQAAAABJRU5ErkJggg=="}},77701:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/metro.b32a126.640.png 640w",images:[{path:s.p+"assets/ideal-img/metro.b32a126.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/metro.b32a126.640.png",toString:function(){return s.p+"assets/ideal-img/metro.b32a126.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaUlEQVR4nD2LCQqEQAwE5/Eq7ojiAfo2/YA+wAFzb9TBIoROmgoMwCKmamZ6HLLvdidFxAsg2MtTp21L6/qdTuAbcQgxnclhROFMtpnIa9NHI1KAbP/aOXZLUQ9F3VfNVMXJdxlH//v8AZ2NhfxFb8J1AAAAAElFTkSuQmCC"}},75794:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mia-platform.e8bb2d0.640.png 640w",images:[{path:s.p+"assets/ideal-img/mia-platform.e8bb2d0.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mia-platform.e8bb2d0.640.png",toString:function(){return s.p+"assets/ideal-img/mia-platform.e8bb2d0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nGPw8vbx8PL29PDy8vIODgzy9vZ1c3N3c3X39PLx8w9kEBAUFhIWFRKTEpGU0TO1MDSzFpWWFxKXEhQW5RcQYpCSkpaWVzIpbjdrnWfWOsewebZm01yNiknSCspAKQZxCSlpGTn3gHDXoEj34GiXwEjviATXwAhJaVkJCSmQtJS0rKObl6u7r4u7j7Orl7uXv6OLJ1AQKAUAeZ4iF7d8WEMAAAAASUVORK5CYII="}},24871:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mikro-orm.d077b7d.640.png 640w",images:[{path:s.p+"assets/ideal-img/mikro-orm.d077b7d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mikro-orm.d077b7d.640.png",toString:function(){return s.p+"assets/ideal-img/mikro-orm.d077b7d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AFOBqGCSsmydtG6js2ynsGmjpWyhnWOck1yjkGOxlgALVo8eaJE/hJ01gJMSdoASVlkkMjUeMzUNdlgJj1sAE16NFWWJPIOYOYSQHYKDGmhjJEZDI0tGEn9ZEJZcALTN2rfR2465u6/S06q3u6e+va3Uy5e9sbff0LLdyQD////////U4t7z+vj15+v38PL49/fl4eH////+/v7WFFbTwY7LSQAAAABJRU5ErkJggg=="}},17802:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mintmetrics.3258d8a.640.png 640w",images:[{path:s.p+"assets/ideal-img/mintmetrics.3258d8a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mintmetrics.3258d8a.640.png",toString:function(){return s.p+"assets/ideal-img/mintmetrics.3258d8a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGPQj4hT8w5W9ghU8QwCkkoeAeo+Idr+4ar+IQbV+QyGITFemQVuGXlO6dmeWQW+OUVuaTkOiRkuydmaHsEMxqGxfrkl5mnpBumpFkV5wcUVbpl5JpEJxmFxmv5hDOoBYZrR0UbR8WqBYQYRcYbeEWqewSZh8br+EUBbGLQ3t+hsa9He2KizvFZrWqlme55WU45md4HW9DLtBVUANJExnLPdV24AAAAASUVORK5CYII="}},14722:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mixcore.45f9b80.640.png 640w",images:[{path:s.p+"assets/ideal-img/mixcore.45f9b80.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mixcore.45f9b80.640.png",toString:function(){return s.p+"assets/ideal-img/mixcore.45f9b80.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcklEQVR4nE2KwQ4CIQxE+f8v3Hg1ZqluAaktpV2C6EUnk0zy3gRM+WWaqMaE1IRaYzNxK42pa2CROWfc98u2AUDJeZVoKV08uNmahMfjduVaVdXdtWvv/aPnN4smgOeBuRRmXo8xxk9Lk4iAeD9Pn395A03xj/5wlLXvAAAAAElFTkSuQmCC"}},5670:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/mojaglobal.df38ad6.640.png 640w",images:[{path:s.p+"assets/ideal-img/mojaglobal.df38ad6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/mojaglobal.df38ad6.640.png",toString:function(){return s.p+"assets/ideal-img/mojaglobal.df38ad6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/ADZTRy1GOixEOCtBNyxDNyg9MypCNixFOzhSQTZNPQAcKywXHyASFxcSFhgTGBkPFBQYJSYiP0EyWlNDcFsALEQ/NUA/MTk3LTQzKDAwERkZL0pGUH9/VKybY9ihACMyLSYyLiEtKx8sKhciISQ4MDxval2clHuwpILdqgArOS0iMykmNionOS0pQTctRjlAZ2l0taWBuqm6wscx8yhHFgtglwAAAABJRU5ErkJggg=="}},22460:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/molecule-home.76dd46a.640.png 640w",images:[{path:s.p+"assets/ideal-img/molecule-home.76dd46a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/molecule-home.76dd46a.640.png",toString:function(){return s.p+"assets/ideal-img/molecule-home.76dd46a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nA3IMQrCMBQA0A+9h5N3Ey2kDhacOngCUZx0EHfRVRQcWqiCoCLeojRp2uSn+ZGa7fFg+MXwg+FLszdFT8cexO40vhFL7eAkALYIa4SVCRa6v5O9TR3MFEw1TDRECHFO4dWNLi5JaZm388wmZ2LHH9u7+GCh6zpeoayNh2yMVOghpCp44wFoqSjLkguFhgvhobHlovKFLf0BCEd0mlZ19WcAAAAASUVORK5CYII="}},78700:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/motion-layout.94fe97e.640.png 640w",images:[{path:s.p+"assets/ideal-img/motion-layout.94fe97e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/motion-layout.94fe97e.640.png",toString:function(){return s.p+"assets/ideal-img/motion-layout.94fe97e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhklEQVR4nCXKyw6CQAxA0fn/n3LLxujOhQgmIihjaefVznRIkGhyd/eYQByzplyT6K/KnHPRojVxMQDRPvFjPTgBZArFWhTRbdu0rmaeaBoXCwEoWYyB663vz6fm2ByubWfmzsLbUczoBT27pK9xeHSX4d4ieYOpYPg/WRzvgrzsKMjqYv4Ct5mMVTMU2HIAAAAASUVORK5CYII="}},11632:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/nanos-world.2f4a504.640.png 640w",images:[{path:s.p+"assets/ideal-img/nanos-world.2f4a504.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/nanos-world.2f4a504.640.png",toString:function(){return s.p+"assets/ideal-img/nanos-world.2f4a504.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGPQ0tVVUVHTN9A3MTGRV1BQUlJUUlJSU1dXUlJWUVFlUFNTlZeX19ZUMzIwVJBXlJOVl5ORlpeWkpWTk5WVYVDXUFeSVlALMtRaEqM8uVSmu5W/dZ2sW6ycuLCcggKDqrqqnIisbpaJ9ZMsw2NdGjsX82+/JRBToSDCB5ZWVZGXlVMzUTcIN9cPttf2c1Hy8JbVM5STlpKTlwMAfagewhqgXygAAAAASUVORK5CYII="}},76601:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/netbootxyz.92afdf4.640.png 640w",images:[{path:s.p+"assets/ideal-img/netbootxyz.92afdf4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/netbootxyz.92afdf4.640.png",toString:function(){return s.p+"assets/ideal-img/netbootxyz.92afdf4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AGiy8miy8mq19W+493i9+He9+G+492y29m2392u19QALiPMMifMMifQIh/I6nfE6nPAJh/IQjfgNivUKh/IAv+D8u9z4ttbzv+H+vtv0v9v0wOL/n8DbrM3pweL+AP////n49e/r5/////Hu6vLw7P///dDKxfHu6////wD8/v/y9PXv8PL09vfr7e7r7e7z9fbt7/Dw8fL8/v+mVnb3comEiQAAAABJRU5ErkJggg=="}},56945:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/netdata.1813d37.640.png 640w",images:[{path:s.p+"assets/ideal-img/netdata.1813d37.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/netdata.1813d37.640.png",toString:function(){return s.p+"assets/ideal-img/netdata.1813d37.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAl0lEQVR4nB2KQQuCMBhA9/8vHYsgUyGDsoOH/keHOhQEiYa6Nvdp3+b83CDpnR6Px6J9ugp26zCJkmOYnOI4DLabxTKIDlmanVnD1fX2vD/yupYSjMNKlRe0fnTeTMSEhI9Qsu24UNB9taXeEKIRfV+iYESTAhgGS0Sotf0zj3Px3jNrx7woGs5Rm1detK2apXxXAJ1z7geWgIPcTfWfJwAAAABJRU5ErkJggg=="}},3559:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/neutronjs.6fa73e0.640.png 640w",images:[{path:s.p+"assets/ideal-img/neutronjs.6fa73e0.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/neutronjs.6fa73e0.640.png",toString:function(){return s.p+"assets/ideal-img/neutronjs.6fa73e0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAg0lEQVR4nC2NsQ7CMAxEvcPUIqA0cdrQOk4IVaSmYqCAWGDg//8HiyK95Z7ubGiboBUJqBecIFHV/dGewCAb9Od4mfJ9yo8hz3G8upgNBtQeGhMErWTE7BJRQvSIvHio9u1uaxwNfRf/x3+/xAuwKQ/rVfF+fW7zs1bUUbJWeiy+LKovgWgVE/Zm8sMAAAAASUVORK5CYII="}},27436:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/nextauthjs.4bb10f2.640.png 640w",images:[{path:s.p+"assets/ideal-img/nextauthjs.4bb10f2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/nextauthjs.4bb10f2.640.png",toString:function(){return s.p+"assets/ideal-img/nextauthjs.4bb10f2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nCWMwQrCMBBE8/+fJN6LFLTq1YNIxYBCkzS7m2SzqRt9zGEYZsaskXJKmFPkTsqFuQJABFBnmMsm8iHaD4/TeJzGw/V8QSKtllKMFpEwrrDMy/Nldzd7t2/UMXZMUoj0R1rlWj03dU1Ep3pgth/ee9flYgjeuRDCP/8C5h+OcH7x5ucAAAAASUVORK5CYII="}},71783:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/nhost.78e048b.640.png 640w",images:[{path:s.p+"assets/ideal-img/nhost.78e048b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/nhost.78e048b.640.png",toString:function(){return s.p+"assets/ideal-img/nhost.78e048b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcElEQVR4nB2M2RHDMAhE6b+2NJAC/KXIti5zCSmbMDsM7GOh8x4PS6ktpZzPCzIzET4Sv96D+hjuziwApTQI13D23qpCyJq7quFB66hRW1dVYPdJ8CIC6fTJIoLPWGMtYHRi5jmnqtf+wMe8/uyHI75rVpCwKMHlPgAAAABJRU5ErkJggg=="}},75073:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/nocalhost.fb8f48f.640.png 640w",images:[{path:s.p+"assets/ideal-img/nocalhost.fb8f48f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/nocalhost.fb8f48f.640.png",toString:function(){return s.p+"assets/ideal-img/nocalhost.fb8f48f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGNg5tJm4zHgEjJl5dZl5dHn4DPkEjBi59Vj4dZh4dZnYOXSYuTUkOTV1FV30lJ1ktG3VDBxYRUzYuLSBKpgYGGXZ2ST5WST4eFR4VfyUVcL4BZUY+SQY2KTYeZQYmAXsWITdWAVdWAWtmWS8OAW92YVcWATtWcTseFUjGGQsOwSMu7gMWrVtJqk5zxJ2rFL2ALE5TVq5TNpBwDmmBUBLwreKgAAAABJRU5ErkJggg=="}},47663:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/node-serialport.8887301.640.png 640w",images:[{path:s.p+"assets/ideal-img/node-serialport.8887301.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/node-serialport.8887301.640.png",toString:function(){return s.p+"assets/ideal-img/node-serialport.8887301.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApElEQVR4nGNIv7A168q+3NuH8u8fqX10qvbR6bz7R4DczMt7Mi7tYZDeP0fm8Dz+rjK2pCj+7CTerCSmhAjejhKZw/Ol981m0Dq4QOf0CsGkOAZxTUYVQ0ZlQwYJTcGEGJ3Ty7UOLmRQ3D9X+eRi3rQ4BkU9Fj1LIAIyeFPjlE4sVjwwl8Ht9Dr3s+sdt8yzWDQhcMXsoBWzgQyHLfPczq4HSgEALyxB/sdaiMQAAAAASUVORK5CYII="}},89115:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/nodify.3e4f251.640.png 640w",images:[{path:s.p+"assets/ideal-img/nodify.3e4f251.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/nodify.3e4f251.640.png",toString:function(){return s.p+"assets/ideal-img/nodify.3e4f251.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nA3L3QqCMBgA0L1FEEHsD7dPN101EbaVUUgQWBYpdCE9QVAW9fgF5/YgznKtQqZDzGdGe6m85C5NVkIWlFk0nkAo6767nZyvyn2U+WvcN/F5NAWMDSJkocA7W4ViR3CO8RzYEpin1DKaowbeRzHU0aM139Z8OjVc5P0gng28/hAlVgqfpRshnDHbJA4KglZrzor//gGxqyD6+zYCQAAAAABJRU5ErkJggg=="}},64109:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/novu-docs.fff2573.640.png 640w",images:[{path:s.p+"assets/ideal-img/novu-docs.fff2573.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/novu-docs.fff2573.640.png",toString:function(){return s.p+"assets/ideal-img/novu-docs.fff2573.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVR4nD2NSw6DMAxEOUD8S+JQOalUtZRd7n89BkE7G9t6o+elqGUzUem9uzszE5GZtdawLKqKI+ccEZhEnFKiX26MzDm37fV5P/fvXr1epROXUkSkRzzW5l6hNdMbA6AB+RgDDhbB+7//AFO6CtkOa2fsAAAAAElFTkSuQmCC"}},24429:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/orbitjs.4eb95c8.640.png 640w",images:[{path:s.p+"assets/ideal-img/orbitjs.4eb95c8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/orbitjs.4eb95c8.640.png",toString:function(){return s.p+"assets/ideal-img/orbitjs.4eb95c8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AH1/hIuOkqKkqq6ts6Kgo5qanpiaoIeIjH19f3Z1dgAJCxITGCFraHKgjo0+NjYdGx1MSE49PkgBAgUEBQsAFBMVGBsfX15me29uVEpIaFtXs5+bi4aPHB0iGhshAA0MDhAPEh4hKEFFToKBhYqHimpob0lKVBwfJRwgKADCwcG9u7rCwcGsrrCAgYV0dXilpqjIxsPDxcXFxsho9jzSd+6owAAAAABJRU5ErkJggg=="}},13992:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/ory.10fbb60.640.png 640w",images:[{path:s.p+"assets/ideal-img/ory.10fbb60.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/ory.10fbb60.640.png",toString:function(){return s.p+"assets/ideal-img/ory.10fbb60.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZUlEQVR4nC2NSw6AIAxEuf8p2dmkMVD+UBFH9K0mfZmpCVLnnCJyEKWUxqa91FKqiTGttZyLzCf0telgDNSM86KXlqKtdVWdP/eHQUSbma21eIGBnDMEjq9eG+89EUEjhBC/DvQDzmaQ37vYUscAAAAASUVORK5CYII="}},82683:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/ossinsight.522e11d.640.png 640w",images:[{path:s.p+"assets/ideal-img/ossinsight.522e11d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/ossinsight.522e11d.640.png",toString:function(){return s.p+"assets/ideal-img/ossinsight.522e11d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsElEQVR4nCWOy06DQABF+Y5GSh2YGQo0pHR4gxs3BjCxTdOm/Y1q8B/c6vcep7o4m/vKdbIsJY435KagKCvyNKOuGnZ5QZIkKKWQUuF4K4GxYtf3ZDtDU5VMwzNbY9iXSz5eFrSpwJG2IfyA0/nC7X1m/pz5+f7iej0RhZI63xCtNU5gZ/1A0nZPjNMrwzhxeDvStj1SayJ7S4fhf/COt3rkwXVxlx6eRQgfqfQfd/8X1pdRPRUSUKEAAAAASUVORK5CYII="}},33946:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/outerbounds.54e33ed.640.png 640w",images:[{path:s.p+"assets/ideal-img/outerbounds.54e33ed.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/outerbounds.54e33ed.640.png",toString:function(){return s.p+"assets/ideal-img/outerbounds.54e33ed.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiUlEQVR4nCWOSQ7CMBRDc/8rwYITUCFADGqqDEqKmgJtk5+pQfAjds+2bJnA/E5gs4c1+pLCGiAHQKgcPSnRZ++U4Eow0dFpNCh7ybXkEWyNsd21d3q7MtpGtwxa7Tbby/kY3ELqmndaCnTNQ8+v8ZPC6dAMSn5LxjYE6/ZNPz3/JxzGOG40Q/gBWgKLDkol1McAAAAASUVORK5CYII="}},1152:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/oxidizer.4fecd68.640.png 640w",images:[{path:s.p+"assets/ideal-img/oxidizer.4fecd68.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/oxidizer.4fecd68.640.png",toString:function(){return s.p+"assets/ideal-img/oxidizer.4fecd68.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdElEQVR4nCWMwQ7DIAxD+f8vnLrtuE7dqpYmEAgBssAsH/ws2e6ACFTMmOv+3T/bhrkZHhBOTA5IDK7IsejzvjyWmwXD2YsbOyohlSB6vla/vqMozj+z672ramG+ACQTBxxBRPuQ0ynO2Xtfa02JELG19u9/QfyP8iSIjf0AAAAASUVORK5CYII="}},48261:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/patrikmasiar.ee91a0d.640.png 640w",images:[{path:s.p+"assets/ideal-img/patrikmasiar.ee91a0d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/patrikmasiar.ee91a0d.640.png",toString:function(){return s.p+"assets/ideal-img/patrikmasiar.ee91a0d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcUlEQVR4nEXOSxKEIAwEUO5/TBdWIY4EMV8hDI6LyaI33fUqIQEQMwDEGNO+u/v4HasiXuFEbK1lKPVCFmm9iyozz5zTYGbdfd0yVEa5T5IlpnX7vEx4IHcocOSCrBX1QKlk418PF1N6RCFSlInr+8EXsIWQ5ZKDFncAAAAASUVORK5CYII="}},95379:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/paubox.282e9e9.640.png 640w",images:[{path:s.p+"assets/ideal-img/paubox.282e9e9.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/paubox.282e9e9.640.png",toString:function(){return s.p+"assets/ideal-img/paubox.282e9e9.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeklEQVR4nFWMOwuDQBCE7///CxurCFpZSBpjbW0pgWAgLznX21V3b3MqCfgxA8M+xmRVn1yGoCi/R3kXF4+ktKfSpuembt5G1esGM4c8M1+fTn8Y8cqy6tNbO4Cjpb29YEQWL6Lmf4iOENcp0iJhs38H+62eaAIAPfIFUfiNYWQKkwcAAAAASUVORK5CYII="}},59460:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pcapplusplus.208a267.640.png 640w",images:[{path:s.p+"assets/ideal-img/pcapplusplus.208a267.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pcapplusplus.208a267.640.png",toString:function(){return s.p+"assets/ideal-img/pcapplusplus.208a267.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AH96g4KEiYaJjIKEiIKFiYSIi46FkIN6hHp6fn2BhQAcJCkqMjdKUlY9RUkhKC4eJCtbL1diL1oWJScgJSwAKTA2Njg+TUVNSUJLLzs+TzFIqDNzUzNNJTE0LDE4ADM7QEU9RmlBUWA/TjI7P048THE8Wi88Pjc7QTY7QQDz8vTn6enP19bR1dbm4+bh5eTN2NPn5ufy8vPx8fJx2UAAc/CrQgAAAABJRU5ErkJggg=="}},78422:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pcc-archive.2cea823.640.png 640w",images:[{path:s.p+"assets/ideal-img/pcc-archive.2cea823.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pcc-archive.2cea823.640.png",toString:function(){return s.p+"assets/ideal-img/pcc-archive.2cea823.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApElEQVR4nGNQkJFWkRDRkJfVVVd2MTW0tnQwtrI21zOz0lBVV5Rk0BQWibO3y4uNCfNwnt5QMqdrQu+Emetmz57bWBzsZMmgo6MYF+MbGxwU5eXbnZPVmpxakpg4o7S9oabCxsqIQUCES1FRUlyET1lOQlFKUk1cUkVKXE1WWl6En4ebiUFa2lqAV0pORF9CyJCPR1pMTE9MzERUQEVaSFtcWBcA65winky66ScAAAAASUVORK5CYII="}},1680:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pdfme.d70a7e9.640.png 640w",images:[{path:s.p+"assets/ideal-img/pdfme.d70a7e9.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pdfme.d70a7e9.640.png",toString:function(){return s.p+"assets/ideal-img/pdfme.d70a7e9.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/ACmKdSSFcSWKdSWJdCWIcyaIcyuJdS6OeyuNeCiLdgAkv54isZQkvZwkwZ0kxaIqy6d51rl90rcryaYjyaUAJcKdILKII7SUJ7qeJ8GgH8ikVcKns6+jO8GnI8ijACGWcxqOVSKWfCyVjiWagiSagCOZfyiYgCWZgCOYfwAeHiEuLzUhISMdIB8mJykjIyUfHyEnKSsmKCkZGRtFGzvkpzIl5AAAAABJRU5ErkJggg=="}},26797:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pearl-ui.96174ea.640.png 640w",images:[{path:s.p+"assets/ideal-img/pearl-ui.96174ea.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pearl-ui.96174ea.640.png",toString:function(){return s.p+"assets/ideal-img/pearl-ui.96174ea.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdUlEQVR4nEWMyw7CMAwE+/9fRkqjXnoBFQ5UooeoSHnIieM0xpQI5mJpZ71dxl0opSAiEWWSCzFC8D6m1NW6M/NzXVU/nIdRne6jfhjjJayVRX+Qb+fc5Xqb5yV4GeRv3rSAKU/avowlwl/419KPmyWAY7bxBixaj6gEo7txAAAAAElFTkSuQmCC"}},74906:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/peradaban.3b83703.640.png 640w",images:[{path:s.p+"assets/ideal-img/peradaban.3b83703.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/peradaban.3b83703.640.png",toString:function(){return s.p+"assets/ideal-img/peradaban.3b83703.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhElEQVR4nEVNSw7CIBTkFvwLPEqglI+6qKmxJzF6B9ONenpf4sJkZjNf0o4ngHEM0Rin1OB9sOBdCD4mbYBYB4Kry3Zd1nWaSy51ykVKrY2TaiBCKMF17Omwrf285F5TLRocdjBEkLjJqLAGbvcHYi6NUo7i38YNfH29P899L7UxJn72F89sF7vA0BjSAAAAAElFTkSuQmCC"}},9090:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pglet.612c1bf.640.png 640w",images:[{path:s.p+"assets/ideal-img/pglet.612c1bf.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pglet.612c1bf.640.png",toString:function(){return s.p+"assets/ideal-img/pglet.612c1bf.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiklEQVR4nF3NvQrCMBRA4Ty6jyBOPoLgLDiIuyCmdQg4WCdN2tBQapLm595eo6Nn+rbDpiECBsgZkf5y9s0ykDh7fuqrHU6GOt1KqUpSSgBgunOrhdqu9eXQW0O3u+AVr+tr0zwQkFmP+408LkErzDC3wpmnjSmkCJCJ4UxuDNH/zsUvSuOXCOVNHwC1iwmHKC54AAAAAElFTkSuQmCC"}},6463:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/piano-analytics.0784ab4.640.png 640w",images:[{path:s.p+"assets/ideal-img/piano-analytics.0784ab4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/piano-analytics.0784ab4.640.png",toString:function(){return s.p+"assets/ideal-img/piano-analytics.0784ab4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYUlEQVR4nDWMUQ7AIAhDvf9ZjY6CAu5nZcsIoQnta7tENsc98+SpjYi1fQps7QYovUsgUFtL3/VwNYvMRvGKb7oCsEy0gK+pkWAvg2OMOSdv753Pc99l06AwTrTKzQD4Tz9+NI+oZpFjXgAAAABJRU5ErkJggg=="}},53338:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pincman.8c017c2.640.png 640w",images:[{path:s.p+"assets/ideal-img/pincman.8c017c2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pincman.8c017c2.640.png",toString:function(){return s.p+"assets/ideal-img/pincman.8c017c2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/APj17/f13fXx1/jy1/v53vz63vv53u7x1+nr1fXz8ADr4dLbjXPThm3IkYCzoprYk3jbj3aWmZmNl5v38OUAubKidTcqbVtYYF1hW1xgaFBLbTUt5djK7OLU2dXFAGtyb4x3bY5/dpaPh5yRh5qGe5SCd9HLv9fRxIaRiwBcYmHU0MTg2Mrg18nl3M3p4dPb1cjAurHHwbVja2iyKGaQdQJkIQAAAABJRU5ErkJggg=="}},57742:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pipeline-ui.7a88b68.640.png 640w",images:[{path:s.p+"assets/ideal-img/pipeline-ui.7a88b68.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pipeline-ui.7a88b68.640.png",toString:function(){return s.p+"assets/ideal-img/pipeline-ui.7a88b68.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGPwzj4RWHDKN/ekb+5p39xTfrmn3TNOFnZdrey/4J5+lIFJvJ1DrZdZtpNBoIVBsI1ZtJ2Buc4namVj7wEWkVaG9s6e1vaemobujs7ejq4JbZ0TWls75y5ctWXL1s6uXob/YPD83e+/f//9+v3vy7e/QO7nH////gOJM6xet2XV2s1Llq9ZuWbTyrUbV67ZsGL1xqXLVwMFgVIAeQtaN84bMv8AAAAASUVORK5CYII="}},63842:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/plausible.724e7d4.640.png 640w",images:[{path:s.p+"assets/ideal-img/plausible.724e7d4.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/plausible.724e7d4.640.png",toString:function(){return s.p+"assets/ideal-img/plausible.724e7d4.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaElEQVR4nEWN4Q7CMAiE+/5v6fyzTaVrO22BQr2aqF8uAXJ3IcR49ondHyQ6F2iM4e4iGigeqh26LNd13fbbxGwmQMilIIgWEaVUUsrgb9fa3Afu1vh8Nvk8AN92zhjW7VW5sjIL+Nlv5eqRm42TSakAAAAASUVORK5CYII="}},48557:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pnpm.64ee19d.640.png 640w",images:[{path:s.p+"assets/ideal-img/pnpm.64ee19d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pnpm.64ee19d.640.png",toString:function(){return s.p+"assets/ideal-img/pnpm.64ee19d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nCWJSwrCMBRFsx9rF+LUmQrqWFyPrXPBgQV10vWIYKGkvzR596UmxIBwuRzOEbpY47Hj557jl0cuDxFw34631VhsBPKEsgT5DHmqrktzWeCc0imaObJEBD85S11dKa1aM+rPG72U1esLHZMIITjnmS3spDQN/UAEQ8Z5H5MgcBzYEpFsGtl2kQ3h739IpHxSDWMBkwAAAABJRU5ErkJggg=="}},75816:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/postgres-ai.59ec13a.640.png 640w",images:[{path:s.p+"assets/ideal-img/postgres-ai.59ec13a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/postgres-ai.59ec13a.640.png",toString:function(){return s.p+"assets/ideal-img/postgres-ai.59ec13a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR4nCWMwQ6CMBBE+///5NUbMXhU2hosUGoVMUS63bbrCpN3mLxJRmAvizf06ug95KeJrsXHPbl2NdfQK0GjIivL0CRd59uZ1CnrulhJTvMkaHYMTnbpGl8dLtXxY2Saxt0Lgu+fGCiu/Dl7V7a+e5EQASBwAGLKiBi2sOLpBxOmjLsUx2WMAAAAAElFTkSuQmCC"}},17466:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/power.db59063.640.png 640w",images:[{path:s.p+"assets/ideal-img/power.db59063.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/power.db59063.640.png",toString:function(){return s.p+"assets/ideal-img/power.db59063.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYklEQVR4nFWMuwqAMBAE8///ZyEiip1CjEW8dy5GFMFpFnaWDTmDuxNRSnsGqLWqqpkiIrEEQGzVno6uX+I483kvPoKItIhHnJYhbqtZ+eknRBWIWe+pl4b99Id7BSos78cF+tCSPSTxJpUAAAAASUVORK5CYII="}},43713:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pptxgenjs.e543e51.640.png 640w",images:[{path:s.p+"assets/ideal-img/pptxgenjs.e543e51.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pptxgenjs.e543e51.640.png",toString:function(){return s.p+"assets/ideal-img/pptxgenjs.e543e51.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AGmRqWaOp2WOp2SNpV+Jo2GKpGOLpGOLpGSMpGmQqACnxteqydisydmYwNScwdSmxdapx9esydqrydmmxtgA4+Hg0Njbx9TZn8bTuNDZzdfbwtLYx9XZz9nc4+HgAPHx8c/i6L7Y4cvh6dXo78zg57/Y4cDa49Dk6/Dw8ADv7+/Q4efA2ODB2uPR5ezN3+bA19/C2uPU5ezu7u4GL3NOTp0K7gAAAABJRU5ErkJggg=="}},9489:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/prefs.dff583d.640.png 640w",images:[{path:s.p+"assets/ideal-img/prefs.dff583d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/prefs.dff583d.640.png",toString:function(){return s.p+"assets/ideal-img/prefs.dff583d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAh0lEQVR4nGNwcnR2dHEJdvbycfdycnH18PTy9PK2d3B0dHKytXNkEBQQEpOT89Y0N9U10tLT1dfT19c3EJeQEBQSFhIWYZCQkFTR1DQwN9PSN1LV0JCXV5CRlZOUkoYgBnEJSQV5BSNNPXlZeSAbIiohKQVBIGlFRSV1FTVZWTkZWVmIKFwRADLnFr74gYCIAAAAAElFTkSuQmCC"}},61764:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/prismatic.e7ba6ef.640.png 640w",images:[{path:s.p+"assets/ideal-img/prismatic.e7ba6ef.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/prismatic.e7ba6ef.640.png",toString:function(){return s.p+"assets/ideal-img/prismatic.e7ba6ef.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AJ7C1p7G1qPK2Z7F1aLK16bU3qnf5bDo6Kfg2avj1ABamcJPl7hBkrFGlrNPm7ZPorpXtcZbx9Fo1dNr1MEAYZfJZ6HGlcXSk8DSlMLSl8PTjcHRrNvjgtXdednYAFqNy3Wkz/f69Nvp7uvw8fP3+NTi5/78+43N2XXQ2ABdidFxnNPU4fC40uTB2eXF3ua31N7O4ed9ucxvvs4fh21Kd0gRcQAAAABJRU5ErkJggg=="}},23206:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/profilo.37ac206.640.png 640w",images:[{path:s.p+"assets/ideal-img/profilo.37ac206.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/profilo.37ac206.640.png",toString:function(){return s.p+"assets/ideal-img/profilo.37ac206.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiUlEQVR4nGO4VZB1tzT/Xmn+3ZL8+9VlD2rKgNy7pQU3C7Ju5GUyXNBTPa+rck5H5YKO8mUPx0vujhd0lc/rqp7XUwFKMbw9fertqZP39+19cvDAy9OnHhw6+OLokVcnT4DET59iiMsuA6LYrNKYzJKk/Krk/CogG4gg4gxv37yFo3fv3gMRsggA8ZpeEjIi2lAAAAAASUVORK5CYII="}},96299:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/pyre.b772c23.640.png 640w",images:[{path:s.p+"assets/ideal-img/pyre.b772c23.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/pyre.b772c23.640.png",toString:function(){return s.p+"assets/ideal-img/pyre.b772c23.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbklEQVR4nD2LwQ5AMBBE+6Gti/o3ceCoJX5HJBzEblVKMCW8TCYzs1nRNbap6yhjTVXYMsfwLq0x4no5T9g8DjT1fwXi+AghEPNCHB6OfccYv733zI6ZEVbn/LYREW7xO0sSKJVSK6WlgqPqRwg3+9d4aZfCQ1EAAAAASUVORK5CYII="}},56177:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/qa-board.be6f8ca.640.png 640w",images:[{path:s.p+"assets/ideal-img/qa-board.be6f8ca.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/qa-board.be6f8ca.640.png",toString:function(){return s.p+"assets/ideal-img/qa-board.be6f8ca.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnElEQVR4nGOIbNkb13kgvutgXMeBzIlHcyYfi+88mNB1KKp1T2TLHgYGh9kM9rOBJLPrPOOMtTIRyyFcBoc5IHLrqcc7zzxdc+DOkl3XD1x8tuX4/W2nHm889nD76SdABsO//yDw+uWLx4+e/Pzx7dvXz79+/fj89TtY+D/Dn7//fv/5+/Xrt58/f3768OH7j5/fv//4/ecPUByIABrCa6EAdbs3AAAAAElFTkSuQmCC"}},68767:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/quantcdn.2059ec3.640.png 640w",images:[{path:s.p+"assets/ideal-img/quantcdn.2059ec3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/quantcdn.2059ec3.640.png",toString:function(){return s.p+"assets/ideal-img/quantcdn.2059ec3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGOQrpwlXTBZKr1HLKZFPLRO3LdCxLlAxCpL2ChFQi+OQXbPLZm1p6Xm7ZPo36DUslS+dLpwUodQSJWgaw6faSyDbG2fdHGbdE6DZGqlZFC6lFeimHeSmFOUqFWQiJE3g5igoJSYmLqysrSEuJKCvKy0tBwQycpIiIuJi4kxyCkoqKipAZGisoq6hqaikrKyiqqCoiIQySsoAgBoYCRTIt9kswAAAABJRU5ErkJggg=="}},30399:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/quickwit.6f2a5e9.640.png 640w",images:[{path:s.p+"assets/ideal-img/quickwit.6f2a5e9.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/quickwit.6f2a5e9.640.png",toString:function(){return s.p+"assets/ideal-img/quickwit.6f2a5e9.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbklEQVR4nH2MvQ5AMBSFvf+7WLwAo0gHg6kGQ6nEoFrV0J97tRJGX85y8uWc7DTGeY8P8AQBQsQ57Ics1sMYxvnIGMyLX7fLWnxJWgtByqqndKpJkxe2aVHtSYaQNAoFHY2Xp7NSa5Q7xudv/cMNX4WP4VRsECYAAAAASUVORK5CYII="}},31714:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rainbond.dd2ee85.640.png 640w",images:[{path:s.p+"assets/ideal-img/rainbond.dd2ee85.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rainbond.dd2ee85.640.png",toString:function(){return s.p+"assets/ideal-img/rainbond.dd2ee85.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVR4nCWNMQvCMBSE8/f9Bx2cxcndzS6C7uIQUJBgq42WNm2S95L3nikO93Fwx52KiR9DHiIliACQEiIW5uKJSBHl8fv+dK+maZ1zq2pXn68iJSJmVgHpqP3FeGEKEQ8n/Ww7fTPVpu6HWWXi3ssEIsKLuJDvxq63+9mHMk4JISe01jo3Lc8Ahf/qD3cRjHfhWYePAAAAAElFTkSuQmCC"}},58829:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/raspisuite.234a2cd.640.png 640w",images:[{path:s.p+"assets/ideal-img/raspisuite.234a2cd.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/raspisuite.234a2cd.640.png",toString:function(){return s.p+"assets/ideal-img/raspisuite.234a2cd.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmUlEQVR4nGNQU1CSV1CUlZMHIgVFJWkZOWkxIKGgqKwiL6/AICImbmBo5Ocf6OLmbmJqpq6hXhLun2NoLiIiJiUtwyAhKaWmruHq5u7r62dgZBwRG9ize97anQvdnF2FREQZgErEJCRlZGTVVNQUVFV1JJUivXyD05OV1NQkJaVAupWUVYBITFwCyBaVkuQXEubnEwByJaWlAVGHGq/rwlBCAAAAAElFTkSuQmCC"}},57591:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-chat-elements.2b491e1.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-chat-elements.2b491e1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-chat-elements.2b491e1.640.png",toString:function(){return s.p+"assets/ideal-img/react-chat-elements.2b491e1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAh0lEQVR4nBWLSwrCQBBE5yQS0MlIpufX3fMzEbLLXkEkuAne/w62xaOgeJRKiEgUYwzee+fAWpgmsADgUkIljhBTrrisoS+Qe7rdqbZaSmtNyZmJUmlhXrfHa3u+w7Jyn0XnnBUzV0kpc2/f4/jsO2EUwwKzGo3RehSc9+eLPg2DHv9T2pjrD07sHk7QWNw5AAAAAElFTkSuQmCC"}},33129:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-complex-tree.d3b97fb.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-complex-tree.d3b97fb.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-complex-tree.d3b97fb.640.png",toString:function(){return s.p+"assets/ideal-img/react-complex-tree.d3b97fb.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIWXsImasYmasIubsY2etY2etY2etY2ftYydtYybrwAwR2ZBVXA+VXI0TGs7UXCzvMewuse+xtB6i6EySWgANVBxQGWSbH6TZneNUWV+8/T18vP2////oq28OU9sAEFXdT1Xektge0pfeUleeXmInXiInH6NoWByi05ifQDw8vPm5ufr7O7r7O/n6ezk5+vi5ejY297m6Orz9fY5eFrcUapTTAAAAABJRU5ErkJggg=="}},52346:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-leaflet.60e6a52.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-leaflet.60e6a52.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-leaflet.60e6a52.640.png",toString:function(){return s.p+"assets/ideal-img/react-leaflet.60e6a52.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nFXISwrCMBgE4BER3CgIIt7RpNsmXSX1Bj5wYcBFS8/nIvkTk5paKAoOH8MwIB/I+5RSiPHprHXuFWPq+xERYfjmPWQbiDzlnH8nbo/uatqzaS9j35uTaaYxwWy5x2KH+RbYAOt/KxRCF1XNpWalKqTiQjOhDqVisubV8QPsKVuxvW2e/wAAAABJRU5ErkJggg=="}},87868:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-native-elements.2052eed.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-native-elements.2052eed.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-native-elements.2052eed.640.png",toString:function(){return s.p+"assets/ideal-img/react-native-elements.2052eed.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGPQNrfXMDBz9vRz8Q5Q0zPW0DdW1zfRMjTXNrZU1zdlAGIlbaMNGzetXLNaRtNM1dxTzcJV1cxRzcBM3dCcQcPQXF5D7/iJk9u2bdGw8bUKSNazsNMytVEzMFc3tABJK2kb9k+e2trRraxnqmNuq2FoCpTQ1NPX1NUDGa5uYKasYwS0QklTV05ZTV5VU1lFWdYuXtIlEwDJsiU/JX8eOQAAAABJRU5ErkJggg=="}},31678:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-native-ios-kit.6da9e1f.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-native-ios-kit.6da9e1f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-native-ios-kit.6da9e1f.640.png",toString:function(){return s.p+"assets/ideal-img/react-native-ios-kit.6da9e1f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoklEQVR4nGPQN7HU0DXUM7E1MHc0MLfXMTDTNrLVMrLW0DXSNTJj0DKy0Da2tHP19QiMcPIKsHH2ympbn1AxR1XHUMfYikFOUUVBRT00Ijo+MSUwJEJBWc3IPtDA2ltWQUleSZVBRERUUUHh0o1Hn378v3H9hoKiopiosJioiLi4BBAxiIqJKyopXb/98Nff/zdu3lRRVZNTUJKTV5SQlAIiAKRzKc22EVSzAAAAAElFTkSuQmCC"}},36661:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-native-reanimated.07e5d32.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-native-reanimated.07e5d32.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-native-reanimated.07e5d32.640.png",toString:function(){return s.p+"assets/ideal-img/react-native-reanimated.07e5d32.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAm0lEQVR4nCWJXQuCMBhG9/8vu4voJiKCIqIg6CaiD0kqoggJkULaECu3qdk7N3MNe+C5OOeg0fTcHR5qjUW9ZQ0mp974aLDZsWcr19rekNYaQDqXABNWloa0VN87YboakqrgMdh7f772XO8hZQGgKP+AUHleoPQtTG73d8vNNWIZDriPKQl4nECSCmTOE3DcMHymvFIRzV40++cf9XyFXoRpwYYAAAAASUVORK5CYII="}},10281:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-native-testing-library.2ddc3d1.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-native-testing-library.2ddc3d1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-native-testing-library.2ddc3d1.640.png",toString:function(){return s.p+"assets/ideal-img/react-native-testing-library.2ddc3d1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZElEQVR4nE2O2wqAMAxD/f8vFGHiq+CYY7eWbq0dm2KeQk5TsiBia02YRcTbM7hLDTMTUSmwyKuUstnWYzcp5y+cWM8BIMUuNaL//jiEoCWMEQH87by1ozQxVdIRgFigi2od+QMnV5IVANoxTQAAAABJRU5ErkJggg=="}},95654:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-navigation.0ff888d.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-navigation.0ff888d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-navigation.0ff888d.640.png",toString:function(){return s.p+"assets/ideal-img/react-navigation.0ff888d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nBWM3QqCMABG9/4PEF0FvUDd1XUFBaMULHR/aWwZM1cuZ4u5yPTm43AOfMDUztrWWu9957/dsG3n3K9pPsY4IKXl4pXnNefP7FL1LK6VLN4I3/sE0kwTqo8nfgjodocWSxhFDEIxGodwX4AEVavNjTKltUtTNZuvS2WCUE6mISYaUNb/NJiYOCljpDB+xIkidDDsbP8K+oRjSnfYtQAAAABJRU5ErkJggg=="}},39166:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/react-redux.55a4b3b.640.png 640w",images:[{path:s.p+"assets/ideal-img/react-redux.55a4b3b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/react-redux.55a4b3b.640.png",toString:function(){return s.p+"assets/ideal-img/react-redux.55a4b3b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nBWJQQ7BQBRA52CkvQkHoO6ACmLhBKKSsnCBdsu6hplGitRWyJiajNKZ0vqSt3h5D81s4g6o2yfzIV2O94sRdWzsdPG0E0zaAbIM74/pNyper762a6tm1WuZPhTL8NE5TGLKo831uGURvsQhO+3YAd9iwmGhsiyVzoTkQiaJuAMyFfzBIMJCxbfQOgeeMn2l7yxTSmmQXH9g/QDIfHYwE27R5gAAAABJRU5ErkJggg=="}},67539:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/reactive-button.1a55e61.640.png 640w",images:[{path:s.p+"assets/ideal-img/reactive-button.1a55e61.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/reactive-button.1a55e61.640.png",toString:function(){return s.p+"assets/ideal-img/reactive-button.1a55e61.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVR4nGP4+fPv37//gOD////fv/8Fov9g8BsE/jD8h4F///4+fvr94ZNvQOVwQYY/v/8A+X/+AIX+vnn74+Xr7///A0X+ALWCdO/bf9zbP9EnIN7NMzIsMvXh86ePX7698/j187dvPnz6zHD8xNmU9JK0zJLk1MLcgppHz5+/ePv+ycu3L9+9+/TlCwD064FMa6+xwwAAAABJRU5ErkJggg=="}},43757:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/reactnative-aria.94d39b6.640.png 640w",images:[{path:s.p+"assets/ideal-img/reactnative-aria.94d39b6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/reactnative-aria.94d39b6.640.png",toString:function(){return s.p+"assets/ideal-img/reactnative-aria.94d39b6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGPwdV/r677G23UNkOHhtMrTeXWA17oQvw1ArqfzMgYgPy9zT3nRwfysvcG+G0L9N0yffH5i71k/j3XujqsZLI2XeLmsASpysl5hY7rUxXZlQ/XRuqoj9pbLLQwXM0yddG7GlPPTJp+fOvHclAnnZky9MGvaxdkzLs6Yen7KxHMM//////XrDxD9/g0kfwNJIACSQASUAgBEkFlRKBTUkgAAAABJRU5ErkJggg=="}},77319:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/reactnative.859c331.640.png 640w",images:[{path:s.p+"assets/ideal-img/reactnative.859c331.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/reactnative.859c331.640.png",toString:function(){return s.p+"assets/ideal-img/reactnative.859c331.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGPQ1jfX1DFWUddXUdNTUdPV0DbS1DJS1zK0snH29gtl0NYz1Te1NXP0tnALsPYJ0zO2tnbxNbf31AAq0jZmkJJRUdG3cEwqMLBw0jG2kVXQMLB20TSyAYrLKWoylFfUVdQ0ZRdXRcUkZGbml1XUlZRUllXUllfWAxHD////f/36tePAoWWbtly8cuXL588vXrz4+vXrfzAAAMdIOuna+6xzAAAAAElFTkSuQmCC"}},83729:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/reactnativeboilerplate.8037a07.640.png 640w",images:[{path:s.p+"assets/ideal-img/reactnativeboilerplate.8037a07.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/reactnativeboilerplate.8037a07.640.png",toString:function(){return s.p+"assets/ideal-img/reactnativeboilerplate.8037a07.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAl0lEQVR4nAXBSwrCMBAA0NzBXWeSyaRJYxroxwasXfijFUFQsCfRvSdx4dYLeD/fE8xem4jKZ+gACEF6BXcsXsvjHHfCYmipb/Q68aDRkqSbiZ/U/dr9o76IzrptLEvDlTGsQPJw3jy/8/U9jb0JYvLh4MMik4AaACRVTTgl4jHPSSqxSs6VUWkvlZN54foayaIuiBwg/wFNPxqdhykI6gAAAABJRU5ErkJggg=="}},75849:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/realtime-apps-workshop.9960bcd.640.png 640w",images:[{path:s.p+"assets/ideal-img/realtime-apps-workshop.9960bcd.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/realtime-apps-workshop.9960bcd.640.png",toString:function(){return s.p+"assets/ideal-img/realtime-apps-workshop.9960bcd.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAo0lEQVR4nGOILZ6c1bKmbvrBriUX+1be7lt1u3vpxZrpBzKaVobnTWLomrJUM6BLPXy5df4Zr9qHnjUPrPLOaEevFLJrtgosYPj25dOlW083H7676/TL/Re/HLz0df+F9/vOPtt94s7rF/cY/oPBzx9AZW9+fP3w89uHX98//fv7FyLO8A8I/v//8vXbmzfv3r3/8P7j54+fPv/4+evvv39ABADy7nJArmWNEAAAAABJRU5ErkJggg=="}},88760:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/red-gradient.a203860.640.png 640w",images:[{path:s.p+"assets/ideal-img/red-gradient.a203860.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/red-gradient.a203860.640.png",toString:function(){return s.p+"assets/ideal-img/red-gradient.a203860.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAg0lEQVR4nC2O0QqDMAxF+xGDgW2SaltTh0tXHWP4tD344F/4/19hcIPzEHJzLjEiEntOnAFJQfQK+S71HCIb59BZGEdJiWMXiVoAshb0yFo0OilBG/IQ8tCGqCoCNY1z4P+xlDrX54fzUl7r+/uo07k/bS2/F5nybb9cZ6nbuulDP+0AMOUVeRV8yzIAAAAASUVORK5CYII="}},36611:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/reddit-image-fetcher.c1477de.640.png 640w",images:[{path:s.p+"assets/ideal-img/reddit-image-fetcher.c1477de.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/reddit-image-fetcher.c1477de.640.png",toString:function(){return s.p+"assets/ideal-img/reddit-image-fetcher.c1477de.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdElEQVR4nB2MyQ7CMBBD8//fh1C59oBowzQLZJ2tozz5YFuWXRuMyKKiqgO5E5lBnKX8EcnpgojmGPsb9g/gnLRGhmMWFkEiFny+0mNLZHcWF+7KGWL8xmjmBDggXPkHKZmscb33EIL3vtYaF6VU708rW2s3+mGP2cxACWwAAAAASUVORK5CYII="}},44709:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/redis-developer.7d9b45f.640.png 640w",images:[{path:s.p+"assets/ideal-img/redis-developer.7d9b45f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/redis-developer.7d9b45f.640.png",toString:function(){return s.p+"assets/ideal-img/redis-developer.7d9b45f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nGNQUDVT1rFV1bWTVTO3cPALjEi1dwuRUjaVUDKRVzdjEFMw0jNzM7HxNrDwEFcw4hHVEJHVl1E1k1QyEZUzYBCTM5BWNpVWMpFWNpFXM5dUNAZygSZJKhmDpIGqlLWsgUhVx0Zdz15Bw1JaxQyIgOYDpRguX71x6cp1IDp+8uzRY6cPHz11/OS5K1dvXr5y49LlGwAXoyyb8MjKTgAAAABJRU5ErkJggg=="}},87652:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/redux-cool.36add2c.640.png 640w",images:[{path:s.p+"assets/ideal-img/redux-cool.36add2c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/redux-cool.36add2c.640.png",toString:function(){return s.p+"assets/ideal-img/redux-cool.36add2c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoklEQVR4nGPIyi/Oyi/Jqq7JrqvPL6vKLy7PaurIrmvOLy7LKS5nEJFVFpFRlrKwFDc2kFfTlZJXF8otFgxLEBaRFpZTZcjML87MK47uq0trqMrMK0nPL0mta0mtrM3KLQRKMfz////f/3/nvpx69fvlv+8/vn359Of3r88f3/8HA5D079+/n7188enL5/dv3rx9/erHz1/v3r//+/fvv3//AHDeWUZkZS5uAAAAAElFTkSuQmCC"}},67970:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/redux.b480f0d.640.png 640w",images:[{path:s.p+"assets/ideal-img/redux.b480f0d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/redux.b480f0d.640.png",toString:function(){return s.p+"assets/ideal-img/redux.b480f0d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmUlEQVR4nGNY1HpxSfslCFrWdWlJx4UFzecWNJ+f13hmbuMZhiKXXcWuu4vddhc67WqNPwREhc4gLkjQdTfD2xffXzz6dPf68we3Xt28+ujpg7fP7n+4fO7u0/sf3r34wfD////v37+9fvvq0+cPHz6+f/bi2fsP7z59+fj7zy+gFMO/f/8h6M+fv1+/fnv9+s3PHz+BEhBBAA7FdzCzOktyAAAAAElFTkSuQmCC"}},74580:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/refine.415ca23.640.png 640w",images:[{path:s.p+"assets/ideal-img/refine.415ca23.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/refine.415ca23.640.png",toString:function(){return s.p+"assets/ideal-img/refine.415ca23.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGMwMi011c+zNi1yt6tytSpzNCuyMsw1NchzsisLj+hmMBGzN5VwdFTyDvcu8g0odXJMs9YNMRKxNRa1NxCyZjCR8TCV9fAwiPQxj/OzS/GyTrLXCbVR8TOUdDWUdGEwkXYzkXKxUA6wMcksjigrjS7zMAw3k3U3EHcCIgZLBW9jSWcTeR9T/VQzJX8zWQ8n7WBjKVcDMZA0AAsWJZS8xGiVAAAAAElFTkSuQmCC"}},14357:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/registry.stackql.io.dbbc33c.640.png 640w",images:[{path:s.p+"assets/ideal-img/registry.stackql.io.dbbc33c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/registry.stackql.io.dbbc33c.640.png",toString:function(){return s.p+"assets/ideal-img/registry.stackql.io.dbbc33c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfUlEQVR4nF2KyQ7CMAxEnRBDVC4ISLM0ceJCW1apN/7/z/CFCyPN05Nm4LV+xulxfa7T/Z1K8wPF0kRyHYln6Lo9ABzqEkvdbRH+Yq0V9s7Ny82HWIhc76lyGjIiglJK5uPp3PgSYqqNQwiNORcyxoBU64081C9aa6FBFPsCxhQJ78pBJa4AAAAASUVORK5CYII="}},52972:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/relay.148d170.640.png 640w",images:[{path:s.p+"assets/ideal-img/relay.148d170.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/relay.148d170.640.png",toString:function(){return s.p+"assets/ideal-img/relay.148d170.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nB2LTQqCQABG5xgRYvlTLdq3iW7SjzUW4tYWHcZtaTdwm3qNoBCs0W+GqHHjpobg8TaPR7hrg1pY90ENuOYfC06vojbbz4gK4jAVwYT7YwW8IaiJnc39EVYawbwjvIHYqkPnroGlBkfDRgfV60WXNHlcJSFLwk8WvS9HmZ9lHss0kulJZhFpv22J57W41S/cy0KZifoB1rSNSj+bql76v/BWUQAAAABJRU5ErkJggg=="}},99003:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rematch.9fb8382.640.png 640w",images:[{path:s.p+"assets/ideal-img/rematch.9fb8382.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rematch.9fb8382.640.png",toString:function(){return s.p+"assets/ideal-img/rematch.9fb8382.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nGP48vXP9x//fv78/+Xr79v3nt24/eT9++9AwY+ffnz89JPh69f/37//+/Pn/89f/++/AKEfP4Ei/79++//9x3+G//////v3D0gePHKipHFaUf3UfYeO/v/39w9Qx3+wNISVW1zLwCTMwMCTnV8J5P4E2geR/vHjB5AsqW1nEVFj4Fcoqm6B6wEAew98mrvSbNkAAAAASUVORK5CYII="}},5089:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/remirror.9b7cd02.640.png 640w",images:[{path:s.p+"assets/ideal-img/remirror.9b7cd02.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/remirror.9b7cd02.640.png",toString:function(){return s.p+"assets/ideal-img/remirror.9b7cd02.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AHpk0nlj0oh014t42Ix52H5p1Hhi0nlj0npl03xm0AB5Y9J6ZNKRftqLeNiAbNRzXdB5ZNJ+adR+adR7ZdMAeGHSfWjT083u0cnuw7nprZ/icFjPgW3UjHrXua7nAHhi0ntm072z6Ma968zF7a6g45F/2srC693Z7/Lw+QB1XtGRf9nJwOvEvOnGvejQyO7h3u7n5fD////+/v9toWa/uC/EtwAAAABJRU5ErkJggg=="}},14330:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/remotion.a09b3ae.640.png 640w",images:[{path:s.p+"assets/ideal-img/remotion.a09b3ae.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/remotion.a09b3ae.640.png",toString:function(){return s.p+"assets/ideal-img/remotion.a09b3ae.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeElEQVR4nE2MQQ6CQAxF54yiC8NxWHgtTdzY3ZwAcBLFiGwg0NLp1JEhhrdr/8szxJ55RkS/oAsigjgRkYlH/N4ArLXdp2WRNpoiyVtnACgrN8WUl3dP/4xJqbtzw4gzBw1BN/xmDVoUp2x/3B3y8+XaPJv68UrWF0/6iuQyxrdpAAAAAElFTkSuQmCC"}},52762:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/repeaterjs.e7e3584.640.png 640w",images:[{path:s.p+"assets/ideal-img/repeaterjs.e7e3584.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/repeaterjs.e7e3584.640.png",toString:function(){return s.p+"assets/ideal-img/repeaterjs.e7e3584.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAYElEQVR4nF2NyQ6AIAxE+f8flUVkM0IpLZbEgzqnSd4sqosAEHF+xcy1XkrcZozWGgAkSUTv0MLALG0agyf/NhYWdkLHgb11aOuotCJLDw4hWLenlJx13h8xRGN1TlnQDYtCkioHqLrfAAAAAElFTkSuQmCC"}},7487:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/replicad.95a8a13.640.png 640w",images:[{path:s.p+"assets/ideal-img/replicad.95a8a13.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/replicad.95a8a13.640.png",toString:function(){return s.p+"assets/ideal-img/replicad.95a8a13.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nCWNTQrCMBSEc1Tv4RU8guDetSdw404q6KJIRSpNxPa9/L+m0CTGOpsZ+OAbprSJMQJAxzkXoh8gp1ySUibvmDJ2nmdPBIjkaZomNNZ6yksYKlXYOAbr3LVpD6fqeL5V9SOln4SFEMrS2gjxXm/3q82u7bgEiHHB5biU94RSNi9xuT8/A/Yo//IvgAGLJf2fPM8AAAAASUVORK5CYII="}},44165:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rivalis.2ac0d8b.640.png 640w",images:[{path:s.p+"assets/ideal-img/rivalis.2ac0d8b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rivalis.2ac0d8b.640.png",toString:function(){return s.p+"assets/ideal-img/rivalis.2ac0d8b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGPQMTRV0dJT0dIFkqpaemoGRupGpjo6hlqGJtqGpgwaxpZ6lvZApG/loGNipeHgrOXmoento+nspmZswaBvae/hH+IZGOYZFGZi7ajh5Gxg76ITEqpj66RpZMGgqGWgoWssp6Yrpaotp66nYGunHOynZGopraINFGEIiU5w8g7MK6nMLa4IiozzCQh3j4qJrigrq64vqqgBAIcnJC2CxXhpAAAAAElFTkSuQmCC"}},20336:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rnrh.e8099b8.640.png 640w",images:[{path:s.p+"assets/ideal-img/rnrh.e8099b8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rnrh.e8099b8.640.png",toString:function(){return s.p+"assets/ideal-img/rnrh.e8099b8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAl0lEQVR4nB3IyQ6CMBRA0QdKkcFILW2gLTEWwqRoI+C0gYUbdxj//18k3pzVBcqehFyi6BrHN8b6GWX9fIR4cH6HJBmkHPb711lPWk9t++26T1W9ZTJKOQKy8cohm4DjrXA9WhSnutFZXscitRAGMBYApu24IY1cb61Uejg2eVmSkMKcYaK/pYV8ZPtcJCrLdyoLMAHD+gHUdxBIkUPI+wAAAABJRU5ErkJggg=="}},73899:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rooks.20f286b.640.png 640w",images:[{path:s.p+"assets/ideal-img/rooks.20f286b.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rooks.20f286b.640.png",toString:function(){return s.p+"assets/ideal-img/rooks.20f286b.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AH6W34GY34KZ4oGZ5Yqg5omg5n+X44CX4H+W3YCX3gBAZdg+Y9dBZdNde9Rjf9RlgNZlgtpJbNo/ZNg/ZNgAS2/eQ2PCKy0+MDA4HB8naWx17/H53uPyZILfRWnYAEpu30BevR0aGhsYFAUEAGRkYvr6+fDx8miF4UJm1wBJbd5CYcEhJTUjJjIXHChJTVnGydSxtcNVc9FGatvaSE0SGpiXTwAAAABJRU5ErkJggg=="}},32104:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/rsocket.a862456.640.png 640w",images:[{path:s.p+"assets/ideal-img/rsocket.a862456.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/rsocket.a862456.640.png",toString:function(){return s.p+"assets/ideal-img/rsocket.a862456.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoklEQVR4nGPIzy/NyivKyC7IzinKySjMySzMyinMzCnIzCnMzi1kUNO10NC3UjO0NNNxjNYJDdEN0te31TCyVtOzMLdzZ4hOyIhOSI9JzIxKyKioaiqrbAiLTomMS4uIT0vPKWL49+8/ELx+8ebj+08fX334+f3nk0fPXjx8DhT8+/cvA5D69+/f27fvvn///uHDx58/f717++7H958g8b//AEsGWN9YcpjfAAAAAElFTkSuQmCC"}},10805:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/runiac.cc2c864.640.png 640w",images:[{path:s.p+"assets/ideal-img/runiac.cc2c864.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/runiac.cc2c864.640.png",toString:function(){return s.p+"assets/ideal-img/runiac.cc2c864.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAm0lEQVR4nGPIXH8nc/1tIMrddK9l9/3m3fdyNt3L3ng3d/P9tNXXGBhyDzHkHWYoPsFQdkqg8axA4xkgg6HoBEPuYRBacuHN3FPP6tedblh7sn7NqbrVJ+tWHW9ef3reqWeLz79h+P///+2bN5TlJGTFBBQkhGVFBSSFeBUkRW7fvAmUAklfvHyFlZWVgYGBEQyADCD30pWrQCkAdKhNSb55w9AAAAAASUVORK5CYII="}},22552:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/runlet.24636e0.640.png 640w",images:[{path:s.p+"assets/ideal-img/runlet.24636e0.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/runlet.24636e0.640.png",toString:function(){return s.p+"assets/ideal-img/runlet.24636e0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhUlEQVR4nBWI2w7CIBBE+QRhd9kFKr2oFFrbJ62J8fLg//+TdHJyMjOKWYyBitaG90gtdYo4H44KgRCJyGqtc1kqRhtEC0BgUFnrmD3ZUJ3KlvIdkIkb2n+nxAV2XRxuvlmG+XGZXqfxWR27icUr17RW+lTeBzi3eZvW33j9pvkT+1lC/AOF6xEpFPw4rAAAAABJRU5ErkJggg=="}},20440:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sado0823.7516687.640.png 640w",images:[{path:s.p+"assets/ideal-img/sado0823.7516687.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sado0823.7516687.640.png",toString:function(){return s.p+"assets/ideal-img/sado0823.7516687.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVR4nGNYdnzLylM7157bu/rc7lVndq0+u2fV2V0rT+9YfnL7shPbGdQa/NUa/FTrfTVq/c1aIs1bo9RrfdUagMgPiBhMOiJNuqJM6sN0LR10zKx0jC00jMyN60NBgh2RDAo1ngp1XvLFrkLKKsIKykAkpKQC5AIFgVIM3bsXgNCuBZ2b5nRumA1Cm+YAuRBxAAFWQbs2kGUuAAAAAElFTkSuQmCC"}},20627:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/saleor.ed9adee.640.png 640w",images:[{path:s.p+"assets/ideal-img/saleor.ed9adee.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/saleor.ed9adee.640.png",toString:function(){return s.p+"assets/ideal-img/saleor.ed9adee.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAXUlEQVR4nF2MWwqAQAwDvf9dxdVd7SN9WPVDMZQQmDKTmS3LNs9tXXtrfYw9ItwDALNMmbkfsg0iFqCeLT+58EHaB9WI/OfCCicxj2D1EpT8xWVjUVFAodWwu+y5E1zDkxn7xPgBAAAAAElFTkSuQmCC"}},29742:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sapcloudsdk.7403f95.640.png 640w",images:[{path:s.p+"assets/ideal-img/sapcloudsdk.7403f95.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sapcloudsdk.7403f95.640.png",toString:function(){return s.p+"assets/ideal-img/sapcloudsdk.7403f95.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoElEQVR4nGP4ucvjz16vX3s8f+32/nsk4f+JpH8H/P8f8Pu7zwcoxfB/Bfv/5Wz/1/D83yDwa5PBz00G/9fy/1/FAxJcwc7w+8en//9/3r9z7fiRff//fP/1/cvFMzvfv773/88PoBTDfzD48uXzi1fPgIx///4/ef7g27cPYOF/DP2TZk2YMhuIJk6ZPXn6vJ4J06dMmz1h8szeiTOBUgAmq2+UZsG/ZQAAAABJRU5ErkJggg=="}},57675:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sapphire.768be39.640.png 640w",images:[{path:s.p+"assets/ideal-img/sapphire.768be39.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sapphire.768be39.640.png",toString:function(){return s.p+"assets/ideal-img/sapphire.768be39.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAd0lEQVR4nCWMXQ6DMAyDe4vBNCaImzQtHQ9IsJ+n7Rjc/yJzheQH+7OT4KV6LlETIlLd8rIBUPMyz4QBUaloLuOw/o71e9AwNqgW1NIpAfbXZ3++BZEFSasZOJwENPxoqd3RnwqXrmeXPI+T1MfS1tDbcCfv+usfGioWcK5RIZkAAAAASUVORK5CYII="}},41113:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sass-fairy.b960939.640.png 640w",images:[{path:s.p+"assets/ideal-img/sass-fairy.b960939.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sass-fairy.b960939.640.png",toString:function(){return s.p+"assets/ideal-img/sass-fairy.b960939.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR4nA2NWw6DIBREWYsVRRDkcQFBtBKNrR/tArr/hfQm83FmMpkhKb6kKmG+9vqFcHCRUaMqg4hNa4jzO5J1z3W7Yzq13cBXbdeSPnf9kcmsPQ9KFwBMN7TOVznl5O8IF2k796DW2D0vb8ZjP4SOecYDZdBQQ2gP2NAaNw8hk5yWUeF3RhjE/AeEMh6CzsM9FAAAAABJRU5ErkJggg=="}},48769:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sciwp.f550323.640.png 640w",images:[{path:s.p+"assets/ideal-img/sciwp.f550323.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sciwp.f550323.640.png",toString:function(){return s.p+"assets/ideal-img/sciwp.f550323.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nGNIzsjNyCvOzCtOyysuyi8qLihKyy3OzC9JycpPzS5gkFPXk1XTBZJSagZ+VhoB1upSaoZy6rpAQSBikFDUFFfQALJU9c2sbW1tbO01DC2AXKAgUIqhtqkNgmqa2upbOuqbO6obW+GCDP9h4M+fv1++fvvy7fvfv3/hggAYfUNx1tn76QAAAABJRU5ErkJggg=="}},58468:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sequence.cf3290e.640.png 640w",images:[{path:s.p+"assets/ideal-img/sequence.cf3290e.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sequence.cf3290e.640.png",toString:function(){return s.p+"assets/ideal-img/sequence.cf3290e.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjElEQVR4nC2MywrCMBBF8//f4lIQBEFbLFiKQivFR9EWK8UG4iaZzEAeTsC7mcs5zBWIlogMgHPOex9jhPll5UjOI5IIITDKj81iUyx3+9U2W5enor4wZPHXFvTnee/rrDrkZXvt3xNDHkua49FAV+mhPXdDc3sAYvoOQfDRclJy5oIWySZhjf4qxeUH34GLMBcBZwAAAAAASUVORK5CYII="}},27598:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/seven-innovation-base.72367e7.640.png 640w",images:[{path:s.p+"assets/ideal-img/seven-innovation-base.72367e7.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/seven-innovation-base.72367e7.640.png",toString:function(){return s.p+"assets/ideal-img/seven-innovation-base.72367e7.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcElEQVR4nD2KwQ6CMBBE93MFDnJASfQDS/kAPJF4rKCemriw261bGzt5h8mbAcRNQ0QisrMQh/gPIoJabcwchW/3xzQ7CUz6CkEnyEedET/P19stq/c+vX8BM4yZwSaMscUoUDVt4dRfu/PlUB+L+QI+aHwHa/HOuQAAAABJRU5ErkJggg=="}},11301:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/shabados.347b602.640.png 640w",images:[{path:s.p+"assets/ideal-img/shabados.347b602.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/shabados.347b602.640.png",toString:function(){return s.p+"assets/ideal-img/shabados.347b602.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/ADQPHi8OHDAPHS4MGykHFioIFysJGDAPHTcZJTQTIQAsCRkxCRozBBg5BhtIFytHFSo5Bhs0BBcvBhctCRgAQAYeVBMuf0lfhkxlkFdvj1ZuhUpjgU1jWx84PgQcAGQaOHMeQIYqT5MuV5svWpotWpUvWIouVHYiRGMaNwD48/Xx6+3g19rm3OD06u757/P47vL37vH38PP38vS7xjYU1/ySYAAAAABJRU5ErkJggg=="}},21481:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/shotstack.c48672a.640.png 640w",images:[{path:s.p+"assets/ideal-img/shotstack.c48672a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/shotstack.c48672a.640.png",toString:function(){return s.p+"assets/ideal-img/shotstack.c48672a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUUlEQVR4nG2MQQ7AIAgE+f9De1CqF4kpCJRq2njoHIBkdoEjZVHtvSOepVRTtYm7IzOISFwXc8oYujWKqL/AWmMMokesudr26Z34rlP7r965ATt0kzQs8KXrAAAAAElFTkSuQmCC"}},21192:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sicope-model.42f11e5.640.png 640w",images:[{path:s.p+"assets/ideal-img/sicope-model.42f11e5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sicope-model.42f11e5.640.png",toString:function(){return s.p+"assets/ideal-img/sicope-model.42f11e5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AHXUwH/ZxX7YxYHbyI3fzordzIPcyILbyHvUwHrVwQAIu5QHupMKvZUNu5Ygv5wgv5wPvJcHuZIHupQHupQAmuPTmOHSjdXLm+PTkNnNkdrMm+TUnOTWm+PUmuPTAP////v5/eng8f////Lr9Pbx9/78/eLU5Pz5+////wD7/v3t8O/x9PLx9PTi5eTt8PDs7+7d39/y9fT9//802XK+TUFAVgAAAABJRU5ErkJggg=="}},40358:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/signoz.77c06e6.640.png 640w",images:[{path:s.p+"assets/ideal-img/signoz.77c06e6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/signoz.77c06e6.640.png",toString:function(){return s.p+"assets/ideal-img/signoz.77c06e6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAoUlEQVR4nGOoqGqqb+lp65pU29RdVtVQUlFXVF5bUFxZVt1cUdvKoKRlaWDpYekcoKJtxczGw8TAwMEEJBgk5TXV9O0ZjO38ArxDo4KiLJwCBUUk+Xh4ZYQF2Tm5tAysLZ0CGSRkVeTlVJSVNKQVNMQl5YQlZIXEZUTEZcSlFCXl1RmyMjMyMtJLS0urKsqLCvOKi4qKi4vy8/OysrMz48IAxwMoPeXvwjcAAAAASUVORK5CYII="}},72883:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/single-spa.ea2b890.640.png 640w",images:[{path:s.p+"assets/ideal-img/single-spa.ea2b890.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/single-spa.ea2b890.640.png",toString:function(){return s.p+"assets/ideal-img/single-spa.ea2b890.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeElEQVR4nD2KsQ7CMAwF+2dIMCBg6ldTZioGaCEUhNK1ogn2s1McCfom++4KMIsIgE8eASqqRkII9hbTfyLKYGK2wuoYo8GsLX66h++7fXWrDq73nXN3Ipp1Ar/r07Apr8ttc6wHYFRNP53yMTWtrnZ+sX6dLzrDLxNrikmZZknbAAAAAElFTkSuQmCC"}},49557:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/smart-docs.b0611eb.640.png 640w",images:[{path:s.p+"assets/ideal-img/smart-docs.b0611eb.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/smart-docs.b0611eb.640.png",toString:function(){return s.p+"assets/ideal-img/smart-docs.b0611eb.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAm0lEQVR4nGNYdvXc6usXVl07v+7m5fW3rgARiHH76tobl5dePM2gOKdLYXaX/OxO/UUTzZdMBSLdhRPlZncABRXndjMUHdhafHBr0f4thQe2FO3ZVLx3U/HBbUUHthTu3wIkGX7/+vXty9d///79//8fSP79+/fb169AEsJl+Pnz5/fv3//8+QPkAMkfP3/+/vPn27dvf/7+BTIAKtFyZOFyuL0AAAAASUVORK5CYII="}},52445:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/smartcookieweb.4b9cef2.640.png 640w",images:[{path:s.p+"assets/ideal-img/smartcookieweb.4b9cef2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/smartcookieweb.4b9cef2.640.png",toString:function(){return s.p+"assets/ideal-img/smartcookieweb.4b9cef2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfElEQVR4nF2OyQ7CMAxE+///GCSWC4Q2JVujOs4wSVUOjGQfPM8eT6C07pAqaK2xFKoK7wNy3ujVjmDqjT5yiFidQyllgMZcMM8LDr8dIAia9Y2rtdBdUHnlcbvDLe4PpDYVCGP7sIPPlx3xp35g+PjxT0oJMaaxEPjOqS9Jd8OGfTM4KgAAAABJRU5ErkJggg=="}},5623:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/smashgg.38d7ad2.640.png 640w",images:[{path:s.p+"assets/ideal-img/smashgg.38d7ad2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/smashgg.38d7ad2.640.png",toString:function(){return s.p+"assets/ideal-img/smashgg.38d7ad2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcUlEQVR4nGP49u3b37///v37DwQvX756+vQ5kPn795/fv3///PmT4T8S+Pzl66fPn5FFGH7/QYB/YHOQBP4whMakh8dlxCTlhsVmRCVkh8UAyZyQmPRQMGLQNHTQMnLQMXHSMLA3sHA3sHDTMHTQhCEAu2xpkWj+5UMAAAAASUVORK5CYII="}},66987:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/social-embed.068ed98.640.png 640w",images:[{path:s.p+"assets/ideal-img/social-embed.068ed98.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/social-embed.068ed98.640.png",toString:function(){return s.p+"assets/ideal-img/social-embed.068ed98.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAn0lEQVR4nGMo6FxZ3LO6qGtVxYR1LbO3t8zaXjVxA0ike3Vl/yoG75ypXtlTfHKmBOTNiG2fHNMyxS9nhm/eVM+syVHlsxn+g8H3Hz///Pn7//8/IPr569fnz1/+/fv36+dPhl+///z4+evr169AUaA6oOjv37+/f/8Okv71i+HEibOx0ZnJKQUx8TlVNR3t3VMra9orq1vrGrpu3bkHAC33aXT7pN0+AAAAAElFTkSuQmCC"}},10154:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sodaforsparc.dbfc167.640.png 640w",images:[{path:s.p+"assets/ideal-img/sodaforsparc.dbfc167.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sodaforsparc.dbfc167.640.png",toString:function(){return s.p+"assets/ideal-img/sodaforsparc.dbfc167.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkklEQVR4nGNIXTw/fenCtKULM5YurFizsnzNyoyli9KXLAQJLlnAYNLaZNLSaN7eYtHeGjlrRtTsGeZtLRYdraZgcYb/YHDr08Nvv358/PTh/cf3f/78uXj11q/ff4DiUOkHzx99+fb13bu3QPDr54+HDx78/vMXJP3v//+///79A+F/f/8Cqb9/gBSQAPL//wcAaf104s/LaygAAAAASUVORK5CYII="}},94186:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/someengineering.0d827a8.640.png 640w",images:[{path:s.p+"assets/ideal-img/someengineering.0d827a8.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/someengineering.0d827a8.640.png",toString:function(){return s.p+"assets/ideal-img/someengineering.0d827a8.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAo0lEQVR4nGPomrOyZ/qCibMXdk6d3zVlbu/UuUDutPlLemcsaOqbxsAgosXIr8TAKSMkpy3rEiJh5cknLMXAq8zAK8fALc3AqWTJo+HEouJi6uhS1JCdV5tlZOfEouzMo+HIpWLLwCatzy6jzyVvzCZjKKKgJSyvySFnyKNowi5jwCqtz8DAJcojoSytYSyja6ls5qxq7qqgby2lacIuqgiUAgC8oSKkwXlM4AAAAABJRU5ErkJggg=="}},98977:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/spicetify.1a085f6.640.png 640w",images:[{path:s.p+"assets/ideal-img/spicetify.1a085f6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/spicetify.1a085f6.640.png",toString:function(){return s.p+"assets/ideal-img/spicetify.1a085f6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/ALuKYriJX7eKXbmPXayGVa6JVbqVWbWUV7ucWrKVUwDgoXLSm27QnGvDjmKuhl2lgVS4lFvRqGDKplrhu2YAICMuLDdGLDZEExcsGh80Hh8xGh0tJSovKSgvNDhEAMSLaMOUcciZc6N7WY93YKGFbKmBVq6NWbuXXsCdYACMbFaMa1ONbVaMblKVe2GOdlmMc1Cfh2KPelOKdk2n7kSooBk2XgAAAABJRU5ErkJggg=="}},4243:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/spotifyapi-net.d6297d3.640.png 640w",images:[{path:s.p+"assets/ideal-img/spotifyapi-net.d6297d3.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/spotifyapi-net.d6297d3.640.png",toString:function(){return s.p+"assets/ideal-img/spotifyapi-net.d6297d3.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmElEQVR4nGNQnuCl2O2u0Omm2OOhUOWsmuqgmuaolOkg3+Gq1OfBILMvFIiUN4bo7o1VafI11HfTM3LRcHKR3RUqsz+MQe5QhMyhcI1d4Xq7I1U3hCjODFaaGaQwP1j2YLjsoXAGqSQTIJJMBpHS6WbS2WYSGcaS6SYQcQYJXjEJXlElaU1tZRMNOQMlcS1FMU15YWWwuBgAMBcpELgnm0gAAAAASUVORK5CYII="}},71329:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png 640w",images:[{path:s.p+"assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png",toString:function(){return s.p+"assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AH7KwI7dy4zaypTh0KPn2KHl15Xi0YzZxorXx47czAAJvZUJu5QDuZIkv51JwqlIwqkkv54CuZIIupQHupMAe9rFd9jDe9zGid7LlNzOmODRid3LetrFfdvGe9rFAP///+Lq7MfBzP///9Hy7eLq6//9/dXc4Obm6v///wD////q6u2ys735+vvw9fTq6+z6+/vh5efn6uv///9h6XGQXHRT8gAAAABJRU5ErkJggg=="}},88851:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/stackql.c7f7614.640.png 640w",images:[{path:s.p+"assets/ideal-img/stackql.c7f7614.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/stackql.c7f7614.640.png",toString:function(){return s.p+"assets/ideal-img/stackql.c7f7614.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nGOYs/Xowh3HgGj+NiDj+JKdx5bsOrZs94klu0/O33qYgcE2Udgv3yqnQy68nME2YfaKLfcePpm8dAODVRyjYyoDg3UCf0Cxek4fp3c+k33SzOUbbt69P2HxOpC0fQrDtpOXt5y4tHr/qY1Hz687cHrT4TPrD5xavff41hOXgFIM/yHg3z90BAYA52hhLA+Ya1oAAAAASUVORK5CYII="}},24933:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/stryker-mutator.f44ee7a.640.png 640w",images:[{path:s.p+"assets/ideal-img/stryker-mutator.f44ee7a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/stryker-mutator.f44ee7a.640.png",toString:function(){return s.p+"assets/ideal-img/stryker-mutator.f44ee7a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVR4nCWJQQrCMBBFcw0RxLY2VVpImnQmrcmMsYuiiG5UvIFrvf/GFOHz+LwnAIet2UuFUrnEncZCYTK1dkUDYtXypiOJVLmZC33wzJerWyqu+lGsNUMcpjNMp86N7t7T9xYfz07aUEIUuaHMUEovwNz4t/ef6VgPIWuD/Oe00nJlOZ3GBgIqWp4zxh9sdR+vvJTaGwAAAABJRU5ErkJggg=="}},29534:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/stylable.a1dfdc7.640.png 640w",images:[{path:s.p+"assets/ideal-img/stylable.a1dfdc7.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/stylable.a1dfdc7.640.png",toString:function(){return s.p+"assets/ideal-img/stylable.a1dfdc7.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcUlEQVR4nCWMWw7DIAwEOUWDE2P8JIGoUu9/ujqttB/rGa2L+hALYmN11ejinS1Pi9PGKkfjJ8hIPMclfv66/HmBHStkUZsraWfH1g+k5JlSYd8qpLV5iziLq8WBrQKkevRrqx7xed/5INYcw4koN6m+sMQSjD/flWcAAAAASUVORK5CYII="}},71789:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/svix.55bb910.640.png 640w",images:[{path:s.p+"assets/ideal-img/svix.55bb910.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/svix.55bb910.640.png",toString:function(){return s.p+"assets/ideal-img/svix.55bb910.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAdElEQVR4nC3MWQ7DIBADUO5/y7SRAhGEdlhmYylRavnLT7IJUBAxpfz5QmttzjnmHRRlUVMR12qt27YXQIJcc0ERbb2PMQwz995jjCFc7jy998jLnotpaq2q6px77/thrfcBAIjoz7mUxakQEokIrzKv5eEfpKqQWhI4q5QAAAAASUVORK5CYII="}},4715:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/sweetcode.ef07201.640.png 640w",images:[{path:s.p+"assets/ideal-img/sweetcode.ef07201.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/sweetcode.ef07201.640.png",toString:function(){return s.p+"assets/ideal-img/sweetcode.ef07201.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVR4nB2LywrCMBBF8/v+gog7F6KLogtRKJaCbv2EUig0hpK2k9dMm4fBuzqXw2FWmxUxIHqi5b8YIyJaa2lZ2TiN36aZ2nbour7vOec+xLq8V49bBmYA5DCMALNSOSKilNL1UpxPxxgTc44AwKGzxlitsvbehxC0mv26ZO2EELl41dVhv1XaSCnzLXabz/v5A1phiYs01TkvAAAAAElFTkSuQmCC"}},25179:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/synergies.bd6e428.640.png 640w",images:[{path:s.p+"assets/ideal-img/synergies.bd6e428.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/synergies.bd6e428.640.png",toString:function(){return s.p+"assets/ideal-img/synergies.bd6e428.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjElEQVR4nB2NyQrCMABE+z2l2RfbpDarlBQVlxIP1oMHwf//AhNhGAaGN9MgblW8qPSgOgE6QW6LaB+x9GTnG8CMdqf5uJqQkHBQ1Br9HQvbtGQf5/P7teWciZw6rDA3gAwdGbFwlWY6MhX7cNXpOaaNjUuLFOCm0nVEhpL0YV3yd75/dLixwUPuysUPsIsjwk6FrQ4AAAAASUVORK5CYII="}},57161:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/t-regx.9843ba1.640.png 640w",images:[{path:s.p+"assets/ideal-img/t-regx.9843ba1.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/t-regx.9843ba1.640.png",toString:function(){return s.p+"assets/ideal-img/t-regx.9843ba1.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nGP4+uPXj5+/vv/49fvP3y/ff3/78fv9j18X33z9+ev3128/GP4jgb///gHJ97//Hnn36x9YhGHSqkOTVx+ZtPbEhDXH+1Yf7119YtL6UzM2npq05tik1UcYGEzy2UxzhUxjuQ3CufWjOfWj2PSi2HQjmUxzGSxLGQRdqiVcyvTdUrSd47Uc4tQdElRsY1VtY8VcSgXc6gDqVFyRfNYjpgAAAABJRU5ErkJggg=="}},86651:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/talentbrick.01fd671.640.png 640w",images:[{path:s.p+"assets/ideal-img/talentbrick.01fd671.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/talentbrick.01fd671.640.png",toString:function(){return s.p+"assets/ideal-img/talentbrick.01fd671.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AHu88H/B84TG94DF+H7E+X/E+YLG+YHC9H/A83q97gAEi/IHjPEGjPEvmeo9nuk3nOolluwEjPIJjfEEi/IAesH3ecH4ecH4hsX0h8PwhMLyhMX1db72db72e8L3AP///9jo8d/t9P///9Lh693n7f///9jj6tni5f///wD8/f7p7e/r7/H9/v7m7O/r7u/8/P3o6+zo6un6+/w6BXR4glOHHAAAAABJRU5ErkJggg=="}},24863:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tamalwebsite.26309ad.640.png 640w",images:[{path:s.p+"assets/ideal-img/tamalwebsite.26309ad.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tamalwebsite.26309ad.640.png",toString:function(){return s.p+"assets/ideal-img/tamalwebsite.26309ad.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAkElEQVR4nDXNSxLCIBRE0ex/WQ60XIADHVvRlISQAHmPfLiCn570pOt0I7MnzoKqEkXxsxIksewZ3TKpdEqJxlrLNE1oWjg9hEOrpZVjK5yfQjdv1DQ+eMZxRES4GOXaa9HAL1/xn6Zqrg7L9e3eYX0oV0LO+2eQc/6J3lPvYwy4YaA3L4wxOOcYC1KhdV15AwyowHua2qMBAAAAAElFTkSuQmCC"}},97552:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tasit.ca14517.640.png 640w",images:[{path:s.p+"assets/ideal-img/tasit.ca14517.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tasit.ca14517.640.png",toString:function(){return s.p+"assets/ideal-img/tasit.ca14517.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nGMoTV9YkjS3MGFWceLs/Lhp+bHTgIyihFlFCbNrshYzHJn7/8i8/0fn/T8+//+uad93Tv1+fMF/oCBQ5PDc/wyz667Prrsxq/Y6EM1tvD63Cci+Nrv+BkSQQUJSSkvdVE/LUlxCQl3FSEvdRExcXEfDTEfTTFJKmkFaVtpAz0xFSVtKRkpb20hRXl1aVkpfx1RZUUtUTBQAvB1B3Nw0xTsAAAAASUVORK5CYII="}},35721:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tauri.d6c8d2d.640.png 640w",images:[{path:s.p+"assets/ideal-img/tauri.d6c8d2d.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tauri.d6c8d2d.640.png",toString:function(){return s.p+"assets/ideal-img/tauri.d6c8d2d.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVR4nBWM0QqCQBBF9///qcSXIHoIkiIILVRICMpVd5zd2Z2by4XD5TwcszuPRTUXl7ms3PHhT3XYV1Re6XDPNAIFkAAvn3dX920DGWKSL216NaMA83N1v97apt72YttNjm8DUpgMKRbbip8kgohFYsq5LbogkgmqTtVnBWbPzPmloOKg4Q+hu4zuCikX0gAAAABJRU5ErkJggg=="}},40917:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/techharvesting.be1f17a.640.png 640w",images:[{path:s.p+"assets/ideal-img/techharvesting.be1f17a.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/techharvesting.be1f17a.640.png",toString:function(){return s.p+"assets/ideal-img/techharvesting.be1f17a.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkUlEQVR4nGOIbZ0Q1dQb0dAdVtvhV1LnX1IPZEQ09kQ0dEU39TG0nH0ARK3nHjWfvNt9+HLX4cvNJ+8Aua1nHwIRg2t8mkt8GpB0SsjIzs7Pys53SsiECAIRg4SYuKS4hLiomLSktKKkpIK4uLSklKSYOFAEiBjkFFXklVRl5JWApIKKhqyiKpAhq6giq6AMRACvODT+LxXmWgAAAABJRU5ErkJggg=="}},6934:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/testing-library.f9bd592.640.png 640w",images:[{path:s.p+"assets/ideal-img/testing-library.f9bd592.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/testing-library.f9bd592.640.png",toString:function(){return s.p+"assets/ideal-img/testing-library.f9bd592.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaElEQVR4nDWMOw7CQBBD9/43pKKDpCBSyM7i+e1gFGK5sJ4tN4NGRFXNOfUnMGfvJgKzVpdYP57rsqyzKl5bjkHYwP3l8QGt6vCAORNr3pua0yKjixx6AHry/7m77/s7Izm7b7fIOPkXOxWR4pVD834AAAAASUVORK5CYII="}},28003:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/the-diff.5192fcc.640.png 640w",images:[{path:s.p+"assets/ideal-img/the-diff.5192fcc.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/the-diff.5192fcc.640.png",toString:function(){return s.p+"assets/ideal-img/the-diff.5192fcc.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAj0lEQVR4nGNIT9+Zmro9OWVrUvLWzKztWdnbgQwgNyV1W2bWbobKyqdVVc+AqLLyWWvLk9bWx0AGTOQpg5iYpKiYpJiolICgcGRcbHl5jZyskrCwuJiYFFCKQVCQX1BQgF+QR1JYLtwiJzsuR1lVkZeXW0hIACjFICQkDEICQsKyksauwe7WrlISokCTIOIAa7Atv/BewkMAAAAASUVORK5CYII="}},50183:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tidb-community-book.05a8b18.640.png 640w",images:[{path:s.p+"assets/ideal-img/tidb-community-book.05a8b18.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tidb-community-book.05a8b18.640.png",toString:function(){return s.p+"assets/ideal-img/tidb-community-book.05a8b18.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgElEQVR4nFWOuxKDIBRE/f8/jE0c0wiDIC8dATmBxpgttrln9+5g5EoIEaM1zjnivlNr5amUM4N1npQS8/zhNY68pwndQlobjNlueNiPg6teSCkRQrA2SAjJsgi27QF266+UUph2sM5ireVoBTmXf7ArxNg2BryPnGeilIvKb+sXIVDBifj/CXMAAAAASUVORK5CYII="}},21764:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tinaeldevresse.3e1ad23.640.png 640w",images:[{path:s.p+"assets/ideal-img/tinaeldevresse.3e1ad23.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tinaeldevresse.3e1ad23.640.png",toString:function(){return s.p+"assets/ideal-img/tinaeldevresse.3e1ad23.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVR4nF2MwQ5AMBBE+/8/RiriooKf4NLoMu1au4J4p8l7yThKW1GYeRrn0A8yzOxEjhXLTdtVtZeRczF/ZwFAVA7gkW+Wg2W9sKd/FpLyNSfsHZItJgfuoAAAAABJRU5ErkJggg=="}},71708:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tooljet.5743407.640.png 640w",images:[{path:s.p+"assets/ideal-img/tooljet.5743407.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tooljet.5743407.640.png",toString:function(){return s.p+"assets/ideal-img/tooljet.5743407.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nCWJyw7CIBAA+f+fU2NiU02sF/uQ8iwsS+kuEp3MaUZc7q5/xVO33p5umMow5mYr14c9d0rsO1YmrVe5SmO1Vp8mRE/HzszCb6EUMnabF/Uel2mWWrstAHFlrgIQiShhsT4Ya40D4zCmXH+IEOJBB2CGhJgTpDzK1tJ/fwE2442daejZGgAAAABJRU5ErkJggg=="}},28467:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tremor.308b735.640.png 640w",images:[{path:s.p+"assets/ideal-img/tremor.308b735.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tremor.308b735.640.png",toString:function(){return s.p+"assets/ideal-img/tremor.308b735.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIqby4mZyImZyYiZyI6ezY+ezo6ezYSVxIqayoiXxQAmRaAqSaIsS6MwT6VFYKxFX6wvTaQrSqMpSaImRqEAQl6sRWCuR2KwRmGucYa/cYS+RWCtS2WxR2KuQl2sAPDz+ers9N/f6fT3/rO2xqyvwvv+/8HI397i7/P1+gD////v7/Ll5ev///+6usXHydX////N0eLs7vX///8DKGKHbuHrRAAAAABJRU5ErkJggg=="}},2328:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/trpgengine.28a9eb2.640.png 640w",images:[{path:s.p+"assets/ideal-img/trpgengine.28a9eb2.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/trpgengine.28a9eb2.640.png",toString:function(){return s.p+"assets/ideal-img/trpgengine.28a9eb2.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcUlEQVR4nE2Jyw5EQBBF/f+PsbIgJLRMbDA2qqvKo3V3DS3mdRY3N+dE27J4kdfFMYFGnsNzzhlj9t1Gx4dgGaFvaxH5yncGXsPW1UNVTThM8y97a3sgK5LEaZ4rIm5U+5e9L7ISkQC01jgMY9c973wC1R6PdZe44mcAAAAASUVORK5CYII="}},31263:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/tuist.c32cfcd.640.png 640w",images:[{path:s.p+"assets/ideal-img/tuist.c32cfcd.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/tuist.c32cfcd.640.png",toString:function(){return s.p+"assets/ideal-img/tuist.c32cfcd.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAb0lEQVR4nFWMQQ7DIAwE+f8rW0IiqBuTkgiMHSBWlR462j2sRlqDwJXOGA8qJ9chfCdtOedq9v0QEe89wBpxS+mjqBlfDBG11nx4PZ7WWufcMk0OEW+t7b0jRoC3PlHhQsTMfzqEMM/LisjCOsePC2sdj8K+SpvtAAAAAElFTkSuQmCC"}},73627:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/uniforms.4e46641.640.png 640w",images:[{path:s.p+"assets/ideal-img/uniforms.4e46641.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/uniforms.4e46641.640.png",toString:function(){return s.p+"assets/ideal-img/uniforms.4e46641.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AGRghWtmim1qkGtrjmppi29sjG1tjGpujmhoimNghAAYEUcgGFMjI18bKFwbHlAgIjN5fIjExtfLztt7fJwAHBNKIx9WKiJbHRJJHxhNICQxpKam////////oJ+2AEtGb1dQhGJXlE1Hc09KdElIZZult9jr+dru+Z6nwAD8/P37+/r5+vj+/v7s6vTs6PT4+/7x9/zy+P33+v0W4lLNDgN80QAAAABJRU5ErkJggg=="}},67168:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/unleash.054b153.640.png 640w",images:[{path:s.p+"assets/ideal-img/unleash.054b153.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/unleash.054b153.640.png",toString:function(){return s.p+"assets/ideal-img/unleash.054b153.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiUlEQVR4nDWMTQrCMBCFc/8jeAFtcKMbIa7EndAr+AeioCZm0mknM01ipPg2D773o15vi4jeA3hIKZVSRMZKnLMDRWWtI6LIrDdmd2hl/DUm5ZxV1yFXhEHPF40xtwusNZ7OXNOUsqq3ItIjzprVcrsfAP2zJ/6vIYRqocPjHa6PD8UoiUV4+v8CMOmLhAh0uDQAAAAASUVORK5CYII="}},36283:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/unmand.ee6e7d5.640.png 640w",images:[{path:s.p+"assets/ideal-img/unmand.ee6e7d5.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/unmand.ee6e7d5.640.png",toString:function(){return s.p+"assets/ideal-img/unmand.ee6e7d5.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVR4nC2JXQ7CMAyDeyQYEmMSl9y4Gg9DsGeQQFubrtmaNg3hx7Is258RkVJknAiRmHNKWZ/7IyEWLUYZs9yG8TpMAAszB0znfnm+6IPlKwDfX6x1s5RsfQbPv9/EmIlywAhAzs3gw7pGRA1WZKpDt2u6/fFUNe2mbnVu639RvwGhwX2DOiEqKAAAAABJRU5ErkJggg=="}},12839:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/verdaccio.449a883.640.png 640w",images:[{path:s.p+"assets/ideal-img/verdaccio.449a883.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/verdaccio.449a883.640.png",toString:function(){return s.p+"assets/ideal-img/verdaccio.449a883.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAb0lEQVR4nEXOwQ4CMQgE0P7/z+lpNVFPGg9ebHdbYVgK0ibGd5qQMJB4EhEzAwjUmEHMy/P9yjVBBPvg7sv5eDkdIjBQCB9I0t5jz6eylryVCKpqXWOc/EfN8/2aHzf1vzSLdwxCrba6jXNAPBQdX8yMkSkwvtD1AAAAAElFTkSuQmCC"}},57449:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/verida-developers.4982a04.640.png 640w",images:[{path:s.p+"assets/ideal-img/verida-developers.4982a04.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/verida-developers.4982a04.640.png",toString:function(){return s.p+"assets/ideal-img/verida-developers.4982a04.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbUlEQVR4nCWM4RLCIAyDef8nVVBhyNjaJq1jfj+SXHKXJGqqJpfdqCoMEQHQwBQ3qtJqLaXknFurJP99osfWsU8e5nL6abHvPibKG85IoJfPHF1fdW5d2pD8PL6TjyJrvh5INziw1GwFWriv8x8oHJHpdmS5wQAAAABJRU5ErkJggg=="}},58272:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/virtual-photography-kit.979093f.640.png 640w",images:[{path:s.p+"assets/ideal-img/virtual-photography-kit.979093f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/virtual-photography-kit.979093f.640.png",toString:function(){return s.p+"assets/ideal-img/virtual-photography-kit.979093f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVR4nGP49evX379//4PBv3//Hj16cufa5dunD//7///Pnz8MEInv3769fvr0x4/vW7fvXDZ72sruqr9gAJX++/v314cPgcp379g9f/LURbPn/vz1CygOlf7y5cvvv3+/fvpw8+KFk9u2nz12AiLOALQPSF0+f/7F8xf3z594dPX888dPLx8/CXEKAFNdh40PrpNSAAAAAElFTkSuQmCC"}},56175:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/vital.60553e6.640.png 640w",images:[{path:s.p+"assets/ideal-img/vital.60553e6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/vital.60553e6.640.png",toString:function(){return s.p+"assets/ideal-img/vital.60553e6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfUlEQVR4nE3MPQ7CMAwF4N7/Kux0YOEKZSoLEjRStpA6SR3/JMWVGGp58fusNwAkRCy5ELFt07afZiAiEQnhG+MaQhTV1ppzznt/MDOrKlG1JxVdPo5Zpukxz88/GwBArTXGPF6uVmJgHQdvGxr33u3IBW/jfXm9iSWlZMkPibmOtV/1YfUAAAAASUVORK5CYII="}},18840:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/vue-nodegui.43b0f4c.640.png 640w",images:[{path:s.p+"assets/ideal-img/vue-nodegui.43b0f4c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/vue-nodegui.43b0f4c.640.png",toString:function(){return s.p+"assets/ideal-img/vue-nodegui.43b0f4c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR4nGPIurCr4NoBELp+sODktpKzO/OvHci9tCfz3HYgyaB0YK7i/jnye2cpHppvsH6K7e75CgdBIhBxBr1Di/QPLzY9ucL4yBKbEyutjq8wPrzY6MgSoDgQMZz79Prwy0cLThw+9/HVwecPjrx8dPrDiw1Pb5149/zsh5cM//////nj560bt4GMp09fvHj2Asj49PHTvz9/gQwAUnNo+kywTuoAAAAASUVORK5CYII="}},55530:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/warrant.f2f7a90.640.png 640w",images:[{path:s.p+"assets/ideal-img/warrant.f2f7a90.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/warrant.f2f7a90.640.png",toString:function(){return s.p+"assets/ideal-img/warrant.f2f7a90.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbUlEQVR4nDWOUQ7DIAxDuf8921QL0DbACAmwZWvrjzjSky07onet7L1HxN7751Gt7TwPRymp6gsRAAyPMezOOUXVfpdybiIhRkS/70f5S0SuDsfcLB1CXFeAbSNKuRRmvvFlFl2WHzdsU/QZ8QWk4pAenHksvwAAAABJRU5ErkJggg=="}},80340:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/wasp.9ef300f.640.png 640w",images:[{path:s.p+"assets/ideal-img/wasp.9ef300f.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/wasp.9ef300f.640.png",toString:function(){return s.p+"assets/ideal-img/wasp.9ef300f.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/APb17vPz9ff4+Pj5+fv8+/r6++Tk5tzc39XV1+rr7QD08/Pl5Obl5ubk5ebz8/Pc3OA+QFE3OkolKTudn6cA9Pv85ero6Orr9vb4////1tbZKCo8IiY2DRIkk5WdAPz///v8/P7//v////////Lz9bS4yLK2x6aostfY2wD////w8PGmp66lpqygoqy4trH05Kjz5Kb9+u/////JyXdu+XNOdAAAAABJRU5ErkJggg=="}},90829:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/webdriverio.83ffcc6.640.png 640w",images:[{path:s.p+"assets/ideal-img/webdriverio.83ffcc6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/webdriverio.83ffcc6.640.png",toString:function(){return s.p+"assets/ideal-img/webdriverio.83ffcc6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfklEQVR4nFWM2wrCQAxE9/9/SvBRhL5b62XRUkSru7n5sO7ULrbUQMjkzCROOg9SA1GEiIBEEVmgqjAzPPseTAyHqfKnjLTbIDXVj+XZdvPyDVrKuPsG3fkATQUugovL96VGrFZot2uQ3/99dcyMsV8hgB43hOsR1J6KHtnkD4YuwO7sJzJWAAAAAElFTkSuQmCC"}},37769:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/webiny.548a1e6.640.png 640w",images:[{path:s.p+"assets/ideal-img/webiny.548a1e6.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/webiny.548a1e6.640.png",toString:function(){return s.p+"assets/ideal-img/webiny.548a1e6.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAcklEQVR4nCXNwQ4CIQxFUf7/A92ZuBmVMnGUlrZAA5aZm7Sbs3gBE2htta6jUpAKEXr+WDSISO8W3y+IKzhzVtUxRshILPLJGCFBSmnfL66tLRbVbva7347nlqkws0+I6DwLvmpm3+2BB9TKvTv0Oe3iPyCijxq3fdIDAAAAAElFTkSuQmCC"}},90592:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/whirlcodes.c9c1387.640.png 640w",images:[{path:s.p+"assets/ideal-img/whirlcodes.c9c1387.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/whirlcodes.c9c1387.640.png",toString:function(){return s.p+"assets/ideal-img/whirlcodes.c9c1387.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfElEQVR4nB2KCQ7DIAwE+QM5WnAubMCmQTnb/z+tbqXV7mo0Zg5hGKdxmj1AWY+6vwEGJfMSYsqm7fq2e2hba0O6SD62af6w1zFIKuUshVnitlGtIiWxKI6JzdM5AEAiSmlBDEQqI5L34Jw3UU6SE3nX8Hrn16WH+KDy41/dchR3qLE1HgAAAABJRU5ErkJggg=="}},63178:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/woodpecker.a024291.640.png 640w",images:[{path:s.p+"assets/ideal-img/woodpecker.a024291.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/woodpecker.a024291.640.png",toString:function(){return s.p+"assets/ideal-img/woodpecker.a024291.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlklEQVR4nGNw7fF06XZ37HCxb3W2q3JyqHV2aHUGct17PRzaXRncF3u7LfbyWRngtdgvZkFC3OIkIMNnRYDbYm+PJT4MEjLSUnIyjS3NFtZW1va2xuam5laWdY0N4lKSkjLSDGJiEtLSsmZmFsrKqvr6hto6usoqqubmlhISUuLikgwSklJAJCouIQ5mSEhBuECeNJABAB1tJT4pG494AAAAAElFTkSuQmCC"}},53114:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/yeecord.5a675fb.640.png 640w",images:[{path:s.p+"assets/ideal-img/yeecord.5a675fb.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/yeecord.5a675fb.640.png",toString:function(){return s.p+"assets/ideal-img/yeecord.5a675fb.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlUlEQVR4nA3MywqCQBQA0PmHNo5z52V6NUXHWvgovJMSUUQvCoKW/f9HJJz1YWmWt21nTCSViaLY2uUsjnGWJMjy3A10vt1f4zjR4Pt+R+SJqGk6xIzhqq8217IoXOW4MAEHAMO5BpBzyQRYrezh+Vno9O2zY1MaC9SpIBBaWxaGoKW8fH+Qusd+fdrWCeLkayGUUuYP6aYZ8D7inD0AAAAASUVORK5CYII="}},59027:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/zowe.39835e7.640.png 640w",images:[{path:s.p+"assets/ideal-img/zowe.39835e7.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/zowe.39835e7.640.png",toString:function(){return s.p+"assets/ideal-img/zowe.39835e7.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nAGbAGT/AIar64mu64it64et7Iqu642y74yx8Imu7YKn5Yas6gAdZ+MdZ+MaZeIydONQiedOiOcxdOMaZuMeaOUdaOQAfKbsfKbsfKjvlbfupcLwpsLxlrfvfKbrfabqfKbrAP78+fn5+e3z9v///O/1+vH09////83V4Kaqtd/g4wD+/v/8/P7u8PP6+vr4+fv29vj///7w8/rr7vX5+v06pHJgMRVe5AAAAABJRU5ErkJggg=="}},93726:(e,t,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/zxuqian.c98aa2c.640.png 640w",images:[{path:s.p+"assets/ideal-img/zxuqian.c98aa2c.640.png",width:640,height:320}],src:s.p+"assets/ideal-img/zxuqian.c98aa2c.640.png",toString:function(){return s.p+"assets/ideal-img/zxuqian.c98aa2c.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAIAAADzBuo/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAk0lEQVR4nBXOQQ6CMBBA0d7djafwGroxboxLTZAQFTQSDQoY29IpzbSdjvgP8PKFwegTIyUNToGTZmy/GtArsOBQUCQ/FYmZgw/WWE5J9wCRb4ejkHqon839bRzSaO2lKPOsAEdMvDwVohtS1fpGBovp3PN6/5otdg7RBVaPSpRd2l6p7P54VqtVDvMNKjNOHx9pf84Eiv+PUuPfAAAAAElFTkSuQmCC"}}}]); \ No newline at end of file diff --git a/assets/js/7f129fbe.485d7d76.js b/assets/js/7f129fbe.485d7d76.js new file mode 100644 index 0000000000..221941d653 --- /dev/null +++ b/assets/js/7f129fbe.485d7d76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96122],{2616:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>r,contentTitle:()=>g,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>i});var s=o(24246),n=o(71670);const l={title:"Blog post MDX Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],hide_reading_time:!0},g=void 0,a={permalink:"/tests/blog/2021/10/07/blog-post-mdx-feed-tests",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx",source:"@site/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx",title:"Blog post MDX Feed tests",description:"Some MDX tests, mostly to test how the RSS feed render those",date:"2021-10-07T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"},{label:"blog",permalink:"/tests/blog/tags/blog"},{label:"docusaurus",permalink:"/tests/blog/tags/docusaurus"},{label:"long-long",permalink:"/tests/blog/tags/long-long"},{label:"long-long-long",permalink:"/tests/blog/tags/long-long-long"},{label:"long-long-long-long",permalink:"/tests/blog/tags/long-long-long-long"}],hasTruncateMarker:!0,authors:[{name:"Sebastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",twitter:"sebastienlorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Blog post MDX Feed tests",authors:["slorber"],tags:["paginated-tag","blog","docusaurus","long-long","long-long-long","long-long-long-long"],hide_reading_time:!0},unlisted:!1,prevItem:{title:"Blog post MDX require Feed tests",permalink:"/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests"},nextItem:{title:"Post with duplicate title",permalink:"/tests/blog/2021/09/13/dup-title"}},r={authorsImageUrls:[void 0]},i=[];function d(t){const e={p:"p",...(0,n.a)(),...t.components};return(0,s.jsx)(e.p,{children:"Some MDX tests, mostly to test how the RSS feed render those"})}function u(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(d,{...t})}):d(t)}},71670:(t,e,o)=>{o.d(e,{Z:()=>a,a:()=>g});var s=o(27378);const n={},l=s.createContext(n);function g(t){const e=s.useContext(l);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:g(t.components),s.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f3dfa04.372e085f.js b/assets/js/7f3dfa04.372e085f.js new file mode 100644 index 0000000000..e120bbe5cf --- /dev/null +++ b/assets/js/7f3dfa04.372e085f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5136],{97158:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png"},83890:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png"},40225:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png"},67122:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png"},98579:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png"},56665:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png"},20269:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var i=o(24246),n=o(71670);const s={title:"How I Converted Profilo to Docusaurus in Under 2 Hours",author:"Christine Abernathy",authorURL:"http://twitter.com/abernathyca",authorImageURL:"https://github.com/caabernathy.png",authorTwitter:"abernathyca",tags:["profilo","adoption"]},r=void 0,a={permalink:"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",source:"@site/blog/2018/04-30-How-I-Converted-Profilo-To-Docusaurus.mdx",title:"How I Converted Profilo to Docusaurus in Under 2 Hours",description:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d",date:"2018-04-30T00:00:00.000Z",tags:[{label:"profilo",permalink:"/blog/tags/profilo"},{label:"adoption",permalink:"/blog/tags/adoption"}],readingTime:5.95,hasTruncateMarker:!0,authors:[{name:"Christine Abernathy",url:"http://twitter.com/abernathyca",imageURL:"https://github.com/caabernathy.png"}],frontMatter:{title:"How I Converted Profilo to Docusaurus in Under 2 Hours",author:"Christine Abernathy",authorURL:"http://twitter.com/abernathyca",authorImageURL:"https://github.com/caabernathy.png",authorTwitter:"abernathyca",tags:["profilo","adoption"]},unlisted:!1,lastUpdatedAt:1710954485e3,lastUpdatedBy:"Zed Spencer-Milnes",prevItem:{title:"Towards Docusaurus 2",permalink:"/blog/2018/09/11/Towards-Docusaurus-2"},nextItem:{title:"Introducing Docusaurus",permalink:"/blog/2017/12/14/introducing-docusaurus"}},h={authorsImageUrls:[void 0]},d=[{value:"Overview of Steps Taken",id:"overview-of-steps-taken",level:2},{value:"Design",id:"design",level:2},{value:"Final Thoughts",id:"final-thoughts",level:2}];function l(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u201cJoel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.\u201d"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"\u2014 Note sent to the Profilo team"})}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["This is the story of the rather short journey it took to create the ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"Profilo"})," website using Docusaurus."]}),"\n",(0,i.jsxs)(t.p,{children:["Profilo, an Android library for collecting performance traces from production, ",(0,i.jsx)(t.a,{href:"https://code.fb.com/android/profilo-understanding-app-performance-in-the-wild/",children:"was announced"})," earlier this year. The project was ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8",children:"published on GitHub"})," with a less than ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/tree/802042f90f990998a272387e371b893af52465b8/docs",children:"a handful or Markdown files"})," to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website."]}),"\n",(0,i.jsx)(t.p,{children:"In general, when creating a website with Docusaurus you do the following:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Generate a template website using Docusaurus scripts."}),"\n",(0,i.jsx)(t.li,{children:"Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links)."}),"\n",(0,i.jsxs)(t.li,{children:["Create the website content:","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Add your docs and any supporting assets."}),"\n",(0,i.jsx)(t.li,{children:"Customize the default landing page provided by Docusaurus to suit your needs."}),"\n",(0,i.jsx)(t.li,{children:"Configure the default site navigation file."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Publish the website and set up how it will be published for future changes."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus."}),"\n",(0,i.jsx)(t.h2,{id:"overview-of-steps-taken",children:"Overview of Steps Taken"}),"\n",(0,i.jsx)(t.p,{children:"Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Design and colors:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Got all the desired logo formats from designer. I had to create the ",(0,i.jsx)(t.em,{children:".favicon"})," one."]}),"\n",(0,i.jsxs)(t.li,{children:["Worked out some passable primary and secondary website colors using the ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"http://paletton.com/"})," tools - very handy!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Initial website setup:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Forked the ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/",children:"Profilo project"})," on GitHub and created a local clone of the fork to set up the website."]}),"\n",(0,i.jsxs)(t.li,{children:["Created the initial Docusaurus website using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/installation.html",children:"installation instructions"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["Deleted the ",(0,i.jsx)(t.code,{children:"docs-examples-from-docusaurus"})," and ",(0,i.jsx)(t.code,{children:"website/blog-examples-from-docusaurus"})," folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Content creation:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added metadata to the existing Markdown files found in the ",(0,i.jsx)(t.code,{children:"docs"})," folder, for example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-md",children:"---\nid: architecture\ntitle: Architecture\nsidebar_label: Architecture\n---\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Added the logo assets to the ",(0,i.jsx)(t.code,{children:"website/static/img"})," folder."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/pages/en/index.js"}),", the landing page, to highlight Profilo features."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/core/Footer.js"}),", the footer, to simplify it for Profilo."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Edited ",(0,i.jsx)(t.code,{children:"website/siteConfig.js"})," (website configuration file) to specify the previously chosen primary and secondary colors."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Modified ",(0,i.jsx)(t.code,{children:"website/sidebars.json"})," that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Tested the website locally throughout this phase. (I ran ",(0,i.jsx)(t.code,{children:"yarn start"})," from the ",(0,i.jsx)(t.code,{children:"website"})," folder to start the server.)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Feedback and review changes:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Sent a ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/6",children:"pull request"})," to the project."]}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD)."}),"\n",(0,i.jsx)(t.li,{children:"Updated the colors and updated the PR."}),"\n",(0,i.jsxs)(t.li,{children:["The PR was then accepted and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/commit/6ad033aaf5a7d54e6d842f45a5bccd051a8e45ad",children:"merged"}),". Yay!"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Website publishing:"})}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Pushed the first website version by running the Docusaurus publish script from the command line:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"USE_SSH=true \\\n GIT_USER=caabernathy \\\n CURRENT_BRANCH=master \\\n yarn run publish-gh-pages\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Configured CircleCI using the ",(0,i.jsx)(t.a,{href:"https://v1.docusaurus.io/docs/en/publishing.html#automating-deployments-using-continuous-integration",children:"provided Docusaurus instructions"}),". There were 2 PRs for this, ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/8",children:"the first"}),"for the initial config and ",(0,i.jsx)(t.a,{href:"https://github.com/facebookincubator/profilo/pull/12",children:"the second"})," to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!)."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["The final website was published on ",(0,i.jsx)(t.a,{href:"https://facebookincubator.github.io/profilo/",children:"https://facebookincubator.github.io/profilo/"}),". It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website."]}),"\n",(0,i.jsx)(t.h2,{id:"design",children:"Design"}),"\n",(0,i.jsx)(t.p,{children:"Here's what the initial website looked like when the first pull request was sent out:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar",src:o(56665).Z+"",width:"1090",height:"919"})}),"\n",(0,i.jsx)(t.p,{children:"Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade",src:o(40225).Z+"",width:"1090",height:"624"})}),"\n",(0,i.jsxs)(t.p,{children:["I then took the RGB representation of the color and set it as the baseline color on ",(0,i.jsx)(t.a,{href:"http://paletton.com/",children:"Paletton"}),". The website then gave me various color options to try on the website by editing the Docusaurus website configuration file."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Using Paletton to generate a full palette from the red shade selected. There's a color wheel showing all hues on the left, and a square showing various shades of red on the right.",src:o(83890).Z+"",width:"1012",height:"632"})}),"\n",(0,i.jsx)(t.p,{children:"The selected primary and secondary colors were a good jumping off point for designer feedback."}),"\n",(0,i.jsx)(t.p,{children:"There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features."}),"\n",(0,i.jsx)(t.p,{children:"Here's what the final website looked like:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"The website's front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.",src:o(67122).Z+"",width:"1141",height:"865"})}),"\n",(0,i.jsx)(t.p,{children:"This is an example page showing the core content, in this case the Getting Started page:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code",src:o(98579).Z+"",width:"1221",height:"733"})}),"\n",(0,i.jsxs)(t.p,{children:["This also shows the sidebar structure that was set up through editing ",(0,i.jsx)(t.code,{children:"website/sidebars.json"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.",src:o(97158).Z+"",width:"1064",height:"940"})}),"\n",(0,i.jsx)(t.h2,{id:"final-thoughts",children:"Final Thoughts"}),"\n",(0,i.jsx)(t.p,{children:"The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated."}),"\n",(0,i.jsx)(t.p,{children:"The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done."})]})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>r});var i=o(27378);const n={},s=i.createContext(n);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f6bb8ad.8e297051.js b/assets/js/7f6bb8ad.8e297051.js new file mode 100644 index 0000000000..f0463465d7 --- /dev/null +++ b/assets/js/7f6bb8ad.8e297051.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[87188],{39139:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(24246),i=n(71670);const o={mdx:{format:"md"},date:"2019-11-22T20:00",authors:["endiliey","lex111","yangshun"]},s="2.0.0-alpha.36",l={permalink:"/changelog/2.0.0-alpha.36",source:"@site/changelog/source/2.0.0-alpha.36.md",title:"2.0.0-alpha.36",description:"Breaking Change",date:"2019-11-22T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2019-11-22T20:00",authors:["endiliey","lex111","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.37",permalink:"/changelog/2.0.0-alpha.37"},nextItem:{title:"2.0.0-alpha.35",permalink:"/changelog/2.0.0-alpha.35"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[void 0,void 0,void 0]},u=[];function h(e){return(0,a.jsx)(a.Fragment,{})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h()}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(27378);const i={},o=a.createContext(i);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7fdd8ddf.90763b2e.js b/assets/js/7fdd8ddf.90763b2e.js new file mode 100644 index 0000000000..387ac252f8 --- /dev/null +++ b/assets/js/7fdd8ddf.90763b2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[76581],{61132:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246),o=(n(27378),n(40624));const s={tabItem:"tabItem_pnkT"};function c({children:e,hidden:t,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,o.Z)(s.tabItem,n),hidden:t,children:e})}},97555:(e,t,n)=>{n.d(t,{Z:()=>S});var r=n(24246),o=n(27378),s=n(40624),c=n(75527),l=n(3620),i=n(44479),a=n(62821),u=n(52196),d=n(53589);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function p(e){var t,n;return null!==(n=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==n?n:[]}function g(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return p(e).map((({props:{value:e,label:t,attributes:n,default:r}})=>({value:e,label:t,attributes:n,default:r})))}(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m({value:e,tabValues:t}){return t.some((t=>t.value===e))}function j({queryString:e=!1,groupId:t}){const n=(0,l.k6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),s=(0,a._X)(r),c=(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace(b(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){h(e,t,n[t])}))}return e}({},n.location),{search:t.toString()}))}),[r,n]);return[s,c]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,s=g(e),[c,l]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var n;const r=null!==(n=t.find((e=>e.default)))&&void 0!==n?n:t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[a,u]=j({queryString:n,groupId:r}),[h,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Nk)(t);return[n,(0,o.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:r}),p=(()=>{const e=null!=a?a:h;return m({value:e,tabValues:s})?e:null})();(0,i.Z)((()=>{p&&l(p)}),[p]);return{selectedValue:c,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,s]),tabValues:s}}var y=n(29088);const O={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){x(e,t,n[t])}))}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function k({className:e,block:t,selectedValue:n,selectValue:o,tabValues:l}){const i=[],{blockElementScrollPositionUntilNextRender:a}=(0,c.o5)(),u=e=>{const t=e.currentTarget,r=i.indexOf(t),s=l[r].value;s!==n&&(a(t),o(s))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=i.indexOf(e.currentTarget)+1;var n;t=null!==(n=i[r])&&void 0!==n?n:i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;var r;t=null!==(r=i[n])&&void 0!==r?r:i[i.length-1];break}}null==t||t.focus()};return(0,r.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":t},e),children:l.map((({value:e,label:t,attributes:o})=>(0,r.jsx)("li",w(v({role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>i.push(e),onKeyDown:d,onClick:u},o),{className:(0,s.Z)("tabs__item",O.tabItem,null==o?void 0:o.className,{"tabs__item--active":n===e}),children:null!=t?t:e}),e)))})}function T({lazy:e,children:t,selectedValue:n}){const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=s.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,r.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function P(e){const t=f(e);return(0,r.jsxs)("div",{className:(0,s.Z)("tabs-container",O.tabList),children:[(0,r.jsx)(k,v({},e,t)),(0,r.jsx)(T,v({},e,t))]})}function S(e){const t=(0,y.Z)();return(0,r.jsx)(P,w(v({},e),{children:p(e.children)}),String(t))}},94544:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(24246),o=(n(27378),n(29088));function s({children:e,fallback:t}){return(0,o.Z)()?(0,r.jsx)(r.Fragment,{children:null==e?void 0:e()}):null!=t?t:null}},6698:(e,t,n)=>{n.d(t,{Z:()=>a});var r=n(24246),o=(n(27378),n(40624));const s={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){c(e,t,n[t])}))}return e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function a({children:e,minHeight:t,url:n="http://localhost:3000",style:c,bodyStyle:a}){return(0,r.jsxs)("div",{className:s.browserWindow,style:i(l({},c),{minHeight:t}),children:[(0,r.jsxs)("div",{className:s.browserWindowHeader,children:[(0,r.jsxs)("div",{className:s.buttons,children:[(0,r.jsx)("span",{className:s.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:s.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,o.Z)(s.browserWindowAddressBar,"text--truncate"),children:n}),(0,r.jsx)("div",{className:s.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar}),(0,r.jsx)("span",{className:s.bar})]})})]}),(0,r.jsx)("div",{className:s.browserWindowBody,style:a,children:e})]})}},38112:(e,t,n)=>{n.d(t,{Z:()=>Ze});var r={};n.r(r),n.d(r,{ButtonExample:()=>_});var o=n(24246),s=n(27378),c=n(40624),l=n(29088),i=n(32711),a=n(36712),u=n(4423),d=n(94544),h=n(30691),b=n(78844),p=n(73919);function g(){const{prism:e}=(0,p.L)(),{colorMode:t}=(0,b.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(88941);const j={playgroundContainer:"playgroundContainer_6Ior",playgroundHeader:"playgroundHeader_Tvsk",playgroundEditor:"playgroundEditor_TySg",playgroundPreview:"playgroundPreview_mApW"};function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){f(e,t,n[t])}))}return e}function O(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function x(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function v({children:e}){return(0,o.jsx)("div",{className:(0,c.Z)(j.playgroundHeader),children:e})}function w(){return(0,o.jsx)("div",{children:"Loading..."})}function k(){return(0,o.jsx)(d.Z,{fallback:(0,o.jsx)(w,{}),children:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(m.Z,{fallback:e=>(0,o.jsx)(h.Ac,y({},e)),children:(0,o.jsx)(i.i5,{})}),(0,o.jsx)(i.IF,{})]})})}function T(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.result",description:"The result label of the live codeblocks",children:"Result"})}),(0,o.jsx)("div",{className:j.playgroundPreview,children:(0,o.jsx)(k,{})})]})}function P(){const e=(0,l.Z)();return(0,o.jsx)(i.uz,{className:j.playgroundEditor},String(e))}function S(){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v,{children:(0,o.jsx)(a.Z,{id:"theme.Playground.liveEditor",description:"The live editor label of the live codeblocks",children:"Live Editor"})}),(0,o.jsx)(P,{})]})}const N=e=>`${e};`;function E(e){var t,{children:n,transformCode:r}=e,s=x(e,["children","transformCode"]);const{siteConfig:{themeConfig:c}}=(0,u.Z)(),{liveCodeBlock:{playgroundPosition:l}}=c,a=g();var d;const h=null!==(d=null===(t=s.metastring)||void 0===t?void 0:t.includes("noInline"))&&void 0!==d&&d;return(0,o.jsx)("div",{className:j.playgroundContainer,children:(0,o.jsx)(i.nu,O(y({code:null==n?void 0:n.replace(/\n$/,""),noInline:h,transformCode:null!=r?r:N,theme:a},s),{children:"top"===l?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(T,{}),(0,o.jsx)(S,{})]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(S,{}),(0,o.jsx)(T,{})]})}))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){D(e,t,n[t])}))}return e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function _(e){return(0,o.jsx)("button",B(C({type:"button"},e),{style:C({backgroundColor:"white",color:"black",border:"solid red",borderRadius:20,padding:10,cursor:"pointer"},e.style)}))}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const I=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){L(e,t,n[t])}))}return e}({React:s},s,r);var Z,$,A=n(89583),H=n(6324),W=n.n(H);function R(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const V=RegExp("title=(?<quote>[\"'])(?<title>.*?)\\1"),M=RegExp("\\{(?<range>[\\d,-]+)\\}"),F={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},q=(z=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){R(e,t,n[t])}))}return e}({},F),U=null!=(U={lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}})?U:{},Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(U)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(U)).forEach((function(e){Object.defineProperty(z,e,Object.getOwnPropertyDescriptor(U,e))})),z);var z,U;const G=Object.keys(F);function X(e,t){const n=e.map((e=>{const{start:n,end:r}=q[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null===(t=e.block)||void 0===t?void 0:t.start,null===(n=e.block)||void 0===n?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Q(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:o,metastring:s}=t;if(s&&M.test(s)){const e=s.match(M).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${s}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,r=W()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return X(["js","jsBlock"],t);case"jsx":case"tsx":return X(["js","jsBlock","jsx"],t);case"html":return X(["js","jsBlock","html"],t);case"python":case"py":case"bash":return X(["bash"],t);case"markdown":case"md":return X(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return X(["tex"],t);case"lua":case"haskell":case"sql":return X(["lua"],t);case"wasm":return X(["wasm"],t);case"vb":case"vba":case"visual-basic":return X(["vb","rem"],t);case"vbnet":return X(["vbnet","rem"],t);case"batch":return X(["rem"],t);case"basic":return X(["rem","f90"],t);case"fsharp":return X(["js","ml"],t);case"ocaml":case"sml":return X(["ml"],t);case"fortran":return X(["f90"],t);case"cobol":return X(["cobol"],t);default:return X(G,t)}}(r,o),l=n.split("\n"),i=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),a=Object.fromEntries(o.filter((e=>e.line)).map((({className:e,line:t})=>[t,e]))),u=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.start,e]))),d=Object.fromEntries(o.filter((e=>e.block)).map((({className:e,block:t})=>[t.end,e])));for(let b=0;b<l.length;){const e=l[b].match(c);if(!e){b+=1;continue}const t=e.slice(1).find((e=>void 0!==e));a[t]?i[a[t]].range+=`${b},`:u[t]?i[u[t]].start=b:d[t]&&(i[d[t]].range+=`${i[d[t]].start}-${b-1},`),l.splice(b,1)}n=l.join("\n");const h={};return Object.entries(i).forEach((([e,{range:t}])=>{W()(t).forEach((t=>{var n;null!==(n=(Z=h)[$=t])&&void 0!==n||(Z[$]=[]),h[t].push(e)}))})),{lineClassNames:h,code:n}}const Y={codeBlockContainer:"codeBlockContainer_jDV4"};function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function K(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ee(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function te(e){var{as:t}=e,n=ee(e,["as"]);const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((([e,r])=>{const o=t[e];o&&"string"==typeof r&&(n[o]=r)})),n}(g());return(0,o.jsx)(t,K(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){J(e,t,n[t])}))}return e}({},n),{style:r,className:(0,c.Z)(n.className,Y.codeBlockContainer,A.k.common.codeBlock)}))}const ne={codeBlockContent:"codeBlockContent_vx7S",codeBlockTitle:"codeBlockTitle_bdru",codeBlock:"codeBlock_Gebt",codeBlockStandalone:"codeBlockStandalone_i_cY",codeBlockLines:"codeBlockLines_FJaf",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_FU9Q",buttonGroup:"buttonGroup_cUGO"};function re({children:e,className:t}){return(0,o.jsx)(te,{as:"pre",tabIndex:0,className:(0,c.Z)(ne.codeBlockStandalone,"thin-scrollbar",t),children:(0,o.jsx)("code",{className:ne.codeBlockLines,children:e})})}var oe=n(51114);const se={attributes:!0,characterData:!0,childList:!0,subtree:!0};function ce(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null===(t=e.current)||void 0===t?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n=se){const r=(0,oe.zX)(t),o=(0,oe.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var le=n(26101);const ie={codeLine:"codeLine_qRmp",codeLineNumber:"codeLineNumber_dS_J",codeLineContent:"codeLineContent_XF5l"};function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ae(e,t,n[t])}))}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function he({line:e,classNames:t,showLineNumbers:n,getLineProps:r,getTokenProps:s}){1===e.length&&"\n"===e[0].content&&(e[0].content="");const l=r({line:e,className:(0,c.Z)(t,n&&ie.codeLine)}),i=e.map(((e,t)=>(0,o.jsx)("span",ue({},s({token:e,key:t})),t)));return(0,o.jsxs)("span",de(ue({},l),{children:[n?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("span",{className:ie.codeLineNumber}),(0,o.jsx)("span",{className:ie.codeLineContent,children:i})]}):i,(0,o.jsx)("br",{})]}))}var be=n(34370);function pe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function me(e){return(0,o.jsx)("svg",ge(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){pe(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})}))}function je(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fe(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ye(e){return(0,o.jsx)("svg",fe(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){je(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})}))}const Oe={copyButtonCopied:"copyButtonCopied_OkN_",copyButtonIcons:"copyButtonIcons_OqsO",copyButtonIcon:"copyButtonIcon_PgCn",copyButtonSuccessIcon:"copyButtonSuccessIcon_bsQG"};function xe({code:e,className:t}){const[n,r]=(0,s.useState)(!1),l=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{(0,be.Z)(e),r(!0),l.current=window.setTimeout((()=>{r(!1)}),1e3)}),[e]);return(0,s.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,o.jsx)("button",{type:"button","aria-label":n?(0,a.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,a.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,a.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,c.Z)("clean-btn",t,Oe.copyButton,n&&Oe.copyButtonCopied),onClick:i,children:(0,o.jsxs)("span",{className:Oe.copyButtonIcons,"aria-hidden":"true",children:[(0,o.jsx)(me,{className:Oe.copyButtonIcon}),(0,o.jsx)(ye,{className:Oe.copyButtonSuccessIcon})]})})}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function ke(e){return(0,o.jsx)("svg",we(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){ve(e,t,n[t])}))}return e}({viewBox:"0 0 24 24"},e),{children:(0,o.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Te={wordWrapButtonIcon:"wordWrapButtonIcon_MQXS",wordWrapButtonEnabled:"wordWrapButtonEnabled_TBIH"};function Pe({className:e,onClick:t,isEnabled:n}){const r=(0,a.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,o.jsx)("button",{type:"button",onClick:t,className:(0,c.Z)("clean-btn",e,n&&Te.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,o.jsx)(ke,{className:Te.wordWrapButtonIcon,"aria-hidden":"true"})})}function Se({children:e,className:t="",metastring:n,title:r,showLineNumbers:l,language:i}){const{prism:{defaultLanguage:a,magicComments:u}}=(0,p.L)();var d;const h=function(e){return null==e?void 0:e.toLowerCase()}(null!==(d=null!=i?i:function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(t))&&void 0!==d?d:a),b=g(),m=function(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return ce(o,l),(0,s.useEffect)((()=>{l()}),[e,l]),(0,s.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),j=function(e){var t,n;return null!==(n=null===(t=null==e?void 0:e.match(V))||void 0===t?void 0:t.groups.title)&&void 0!==n?n:""}(n)||r,{lineClassNames:f,code:y}=Q(e,{metastring:n,language:h,magicComments:u}),O=null!=l?l:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(n);return(0,o.jsxs)(te,{as:"div",className:(0,c.Z)(t,h&&!t.includes(`language-${h}`)&&`language-${h}`),children:[j&&(0,o.jsx)("div",{className:ne.codeBlockTitle,children:j}),(0,o.jsxs)("div",{className:ne.codeBlockContent,children:[(0,o.jsx)(le.y$,{theme:b,code:y,language:null!=h?h:"text",children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:s})=>(0,o.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,c.Z)(e,ne.codeBlock,"thin-scrollbar"),style:t,children:(0,o.jsx)("code",{className:(0,c.Z)(ne.codeBlockLines,O&&ne.codeBlockLinesWithNumbering),children:n.map(((e,t)=>(0,o.jsx)(he,{line:e,getLineProps:r,getTokenProps:s,classNames:f[t],showLineNumbers:O},t)))})})}),(0,o.jsxs)("div",{className:ne.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,o.jsx)(Pe,{className:ne.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,o.jsx)(xe,{className:ne.codeButton,code:y})]})]})]})}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ee(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function De(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Be(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ce(e,t,n[t])}))}return e}const _e=(Le=function(e){var{children:t}=e,n=De(e,["children"]);const r=(0,l.Z)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?Se:re;return(0,o.jsx)(i,Ee(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ne(e,t,n[t])}))}return e}({},n),{children:c}),String(r))},function(e){return e.live?(0,o.jsx)(E,Be({scope:I},e)):(0,o.jsx)(Le,Be({},e))});var Le;function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(e){return(0,o.jsx)(_e,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){Ie(e,t,n[t])}))}return e}({},e))}},6208:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>u,default:()=>g,frontMatter:()=>a,metadata:()=>d,toc:()=>b});var r=n(24246),o=n(71670),s=n(38112),c=n(6698),l=n(97555),i=n(61132);const a={},u="Code block tests",d={type:"mdx",permalink:"/tests/pages/code-block-tests",source:"@site/_dogfooding/_pages tests/code-block-tests.mdx",title:"Code block tests",description:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.",frontMatter:{},lastUpdatedBy:"Tatsunori Uchino",lastUpdatedAt:1705090404e3,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_pages tests/code-block-tests.mdx",unlisted:!1},h={},b=[{value:"Code block prism language tests",id:"code-block-prism-language-tests",level:2},{value:"<code>pre</code>",id:"pre",level:2},{value:"<code>pre > string</code>",id:"pre--string",level:3},{value:"<code>pre > string[]</code>",id:"pre--string-1",level:3},{value:"<code>pre > element</code>",id:"pre--element",level:3},{value:"<code>pre > element[]</code>",id:"pre--element-1",level:3},{value:"<code>pre > code > element</code>",id:"pre--code--element",level:3},{value:"<code>code</code>",id:"code",level:2},{value:"<code>code > string</code>",id:"code--string",level:3},{value:"<code>code > string[]</code>",id:"code--string-1",level:3},{value:"<code>code > element</code>",id:"code--element",level:3},{value:"<code>code > element[]</code>",id:"code--element-1",level:3},{value:"<code>CodeBlock</code>",id:"codeblock",level:2},{value:"<code>CodeBlock > string</code>",id:"codeblock--string",level:3},{value:"<code>CodeBlock > string[]</code>",id:"codeblock--string-1",level:3},{value:"<code>CodeBlock > element</code>",id:"codeblock--element",level:3},{value:"<code>CodeBlock > element[]</code>",id:"codeblock--element-1",level:3},{value:"Code blocks with line numbering tests",id:"code-blocks-with-line-numbering-tests",level:2},{value:"Code block wrapping tests",id:"code-block-wrapping-tests",level:2},{value:"Magic comments tests",id:"magic-comments-tests",level:2},{value:"HTML - script + style highlighting",id:"html---script--style-highlighting",level:2},{value:"Empty code blocks edge cases",id:"empty-code-blocks-edge-cases",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"code-block-tests",children:"Code block tests"}),"\n",(0,r.jsx)(t.admonition,{title:"legacy test page - MDX v1",type:"danger",children:(0,r.jsx)(t.p,{children:"This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1."})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-java",children:'class HelloWorld {\n public static void main(String args[]) {\n System.out.println("Hello, World");\n }\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/1584",children:"https://github.com/facebook/docusaurus/pull/1584"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/3749",children:"https://github.com/facebook/docusaurus/pull/3749"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/6177",children:"https://github.com/facebook/docusaurus/pull/6177"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"code-block-prism-language-tests",children:"Code block prism language tests"}),"\n",(0,r.jsxs)(t.p,{children:["Code block with/without the good prism language case(lower or upper) in ",(0,r.jsx)(t.code,{children:"additionalLanguages[]"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-php",metastring:'title="php"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-PHP",metastring:'title="PHP"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-pHp",metastring:'title="pHp"',children:'<?php\n$x=15;\n$y=30;\n$z=$x+$y;\necho "Sum: ",$z;\n?>\n'})}),"\n",(0,r.jsx)(t.p,{children:"See:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/pull/9183",children:"https://github.com/facebook/docusaurus/pull/9183"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"pre",children:(0,r.jsx)(t.code,{children:"pre"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string",children:(0,r.jsx)(t.code,{children:"pre > string"})}),"\n",(0,r.jsxs)(t.p,{children:["Multi-line text inside ",(0,r.jsx)(t.code,{children:"pre"})," will turn into one-liner, but it's okay (",(0,r.jsx)(t.a,{href:"https://github.com/mdx-js/mdx/issues/1095",children:"https://github.com/mdx-js/mdx/issues/1095"}),")"]}),"\n",(0,r.jsx)("pre",{children:"1 2 3"}),"\n","\n",(0,r.jsx)("pre",{children:(0,r.jsx)(t.p,{children:"1\n2\n3"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--string-1",children:(0,r.jsx)(t.code,{children:"pre > string[]"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsxs)(t.p,{children:["1","\n","2","\n","3","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element",children:(0,r.jsx)(t.code,{children:"pre > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"pre--element-1",children:(0,r.jsx)(t.code,{children:"pre > element[]"})}),"\n",(0,r.jsxs)("pre",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"',"\n","\n",(0,r.jsx)("strong",{children:"Output: "}),"3","\n","\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab\n',(0,r.jsx)("strong",{children:"cdabcdab"}),'cd", at which time b is a substring.',"\n"]})]}),"\n",(0,r.jsx)(t.h3,{id:"pre--code--element",children:(0,r.jsx)(t.code,{children:"pre > code > element"})}),"\n",(0,r.jsx)("pre",{children:(0,r.jsx)("code",{children:(0,r.jsx)("b",{children:"Hey bro"})})}),"\n",(0,r.jsx)(t.h2,{id:"code",children:(0,r.jsx)(t.code,{children:"code"})}),"\n",(0,r.jsx)(t.h3,{id:"code--string",children:(0,r.jsx)(t.code,{children:"code > string"})}),"\n",(0,r.jsx)("code",{children:"1 2 3"}),"\n",(0,r.jsx)("code",{children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"code--string-1",children:(0,r.jsx)(t.code,{children:"code > string[]"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsxs)(t.p,{children:["link:"," \n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"code--element",children:(0,r.jsx)(t.code,{children:"code > element"})}),"\n",(0,r.jsx)("code",{children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"code--element-1",children:(0,r.jsx)(t.code,{children:"code > element[]"})}),"\n",(0,r.jsxs)("code",{children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"codeblock",children:(0,r.jsx)(t.code,{children:"CodeBlock"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string",children:(0,r.jsx)(t.code,{children:"CodeBlock > string"})}),"\n",(0,r.jsx)(s.Z,{children:"1 2 3"}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:"link:\n title: front page\n path: /docs/"}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--string-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > string[]"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsxs)(t.p,{children:["link:","\n","\n"," ","title: front page","\n","\n"," ","path: /docs/","\n"]})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element",children:(0,r.jsx)(t.code,{children:"CodeBlock > element"})}),"\n",(0,r.jsx)(s.Z,{className:"language-yaml",title:"test",children:(0,r.jsx)(c.Z,{children:"Lol bro"})}),"\n",(0,r.jsx)(t.h3,{id:"codeblock--element-1",children:(0,r.jsx)(t.code,{children:"CodeBlock > element[]"})}),"\n",(0,r.jsxs)(s.Z,{className:"language-yaml",title:"test",children:[(0,r.jsx)("a",{href:"/",children:"Front page"}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Input: "}),'a = "abcd", b = "cdabcdab"']}),(0,r.jsx)("br",{}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)("strong",{children:"Output: "}),"3",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("strong",{children:"Explanation: "}),'a after three repetitions become "ab',(0,r.jsx)("strong",{children:"\ncdabcdab\n"}),'cd", at which time b is a substring.']}),(0,r.jsx)("br",{})]}),"\n",(0,r.jsx)(t.h2,{id:"code-blocks-with-line-numbering-tests",children:"Code blocks with line numbering tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:'function PageLayout(props) {\n // highlight-next-line\n return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"{1,3,6} showLineNumbers",children:"function PageLayout(props) {\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n console.log(\n 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"code-block-wrapping-tests",children:"Code block wrapping tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'mkdir this_is_a_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_string_to_test_code_block_wrapping\necho "this is a long string made up of many separate words that should be broken between words when possible"\ncurl https://docusaurus.io/tests/pages/code-block-tests\n'})}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"short-tab-1",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "hi"\n'})})}),(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo this will test whether a long string that is initially hidden will have the option to wrap when made visible\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab-2",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"rm short_initially_hidden_string\n"})})})]}),"\n",(0,r.jsxs)(l.Z,{children:[(0,r.jsx)(i.Z,{value:"long-tab",label:"Long tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo medium_length_string_will_have_the_option_to_wrap_after_window_resized_while_it_is_hidden\n"})})}),(0,r.jsx)(i.Z,{value:"short-tab",label:"Short tab",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'echo "short_initially_hidden_string"\n'})})})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-jsx",metastring:"showLineNumbers",children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\nexport default function MyReactPage() {\n return (\n <Layout>\n <h1>My React page</h1>\n <p>\n This is a React page. Let's make this sentence bit long. Some more words\n to make sure... Some more words to make sure... Some more words to make\n sure...\n </p>\n </Layout>\n );\n}\n"})}),"\n",(0,r.jsx)(t.h2,{id:"magic-comments-tests",children:"Magic comments tests"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-lua",metastring:'title="lua_sum.lua"',children:"function sum(n)\n -- highlight-next-line\n local result = 0\n for i = 1, n do\n -- highlight-start\n result = result + i\n end\n -- highlight-end\n print(result)\nend\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-haskell",metastring:'title="haskell.hs"',children:"stringLength :: String -> Int\n-- highlight-next-line\nstringLength [] = 0\nstringLength (x:xs) = 1 + stringLength xs\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-wasm",metastring:'title="sum_webAssembly.wasm"',children:'(module\n ;; highlight-next-line\n (func $add (param $a i32) (param $b i32) (result i32)\n local.get $a\n ;; highlight-start\n local.get $b\n i32.add)\n ;; highlight-end\n (export "add" (func $add)))\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-sql",metastring:'title="sql_query.sql"',children:"-- highlight-start\nSELECT *\nFROM orders\n-- highlight-end\nWHERE customer_id IN (\n SELECT customer_id\n -- highlight-next-line\n FROM customers\n WHERE country = 'USA'\n)\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-matlab",metastring:'title="matlab.m"',children:"% highlight-start\nfunction result = times2(n)\n result = n * 2;\nend\n% highlight-end\n\nx = 10;\n% highlight-next-line\ny = times2(x);\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-latex",metastring:'title="latex.tex"',children:"\\begin{document}\n\t\\section{Triangles}\n\t% highlight-next-line\n\t\\subsection{Pythagoras' Theorem}\n\tPythagoras's theorem is:\n\t% highlight-start\n\t\\begin{equation}\n\t\tc^2 = a^2 + b^2\n\t\\end{equation}\n\t% highlight-end\n\\end{document}\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vba",metastring:'title="vba.vb"',children:"Function Factorial(ByVal n As Long) As Long\n If n < 0 Then\n Err.Raise 5 ' Invalid argument\n End If\n 'highlight-next-line\n Factorial = 1 ' return value\n Dim i As Long\n ' highlight-start\n For i = 2 To n\n Factorial = Factorial * i\n Next\n ' highlight-end\nEnd Function\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-vbnet",metastring:'title="vbnet.vb"',children:'\' highlight-next-line\nDim languages As New HashSet(Of String) From {\n "C#",\n "Visual Basic",\n _ \' highlight-start\n "F#",\n "PowerShell",\n "TypeScript"\n _\' highlight-end\n}\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-batch",metastring:'title="cmd.bat"',children:"rem highlight-start\n@echo off\nsetlocal\nRem highlight-end\nipconfig\nREM highlight-next-line\necho Docusaurus is awesome\nnetstat\n"})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fortran",metastring:'title="fortran.f90"',children:'! highlight-start\nprogram hello\n! highlight-end\n implicit none\n ! highlight-next-line\n print *, "Hello, World!"\nend program hello\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-cobol",metastring:'title="cobol.cob"',children:'*> highlight-start\nIDENTIFICATION DIVISION.\nPROGRAM-ID. HELLO.\n*> highlight-end\nPROCEDURE DIVISION.\n *> highlight-next-line\n DISPLAY "Hello, World!".\nEND PROGRAM HELLO.\n'})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-fsharp",metastring:'title="fsharp.fsx"',children:'(* highlight-start *)\n[<EntryPoint>]\n(* highlight-end *)\nlet main _ =\n // highlight-next-line\n printfn "Hello, World!"\n 0\n'})}),"\n",(0,r.jsx)(t.h2,{id:"html---script--style-highlighting",children:"HTML - script + style highlighting"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9517",children:"https://github.com/facebook/docusaurus/issues/9517"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-html",children:"<html lang=\"en\">\n <head>\n <script>\n const name = 'Formidable';\n console.log(name);\n <\/script>\n <style>\n .some-class {\n border: solid red thick;\n }\n </style>\n </head>\n</html>\n"})}),"\n",(0,r.jsx)(t.h2,{id:"empty-code-blocks-edge-cases",children:"Empty code blocks edge cases"}),"\n",(0,r.jsx)(t.p,{children:"Empty inline code block: ``"}),"\n",(0,r.jsxs)(t.p,{children:["Single space inline code block: ",(0,r.jsx)(t.code,{children:" "})]}),"\n",(0,r.jsx)(t.p,{children:"Empty code block"}),"\n","\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 1 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty 2 line code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{})}),"\n",(0,r.jsx)(t.p,{children:"Empty live code block"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",metastring:"live",live:!0})})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/7fedd5c3.ad354411.js b/assets/js/7fedd5c3.ad354411.js new file mode 100644 index 0000000000..31546e0a09 --- /dev/null +++ b/assets/js/7fedd5c3.ad354411.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27989],{45530:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>m,frontMatter:()=>s,metadata:()=>h,toc:()=>u});var a=t(24246),i=t(71670);const s={mdx:{format:"md"},date:"2019-12-06T20:00",authors:["endiliey","FeynmanDNA","qshiwu","shivangna"]},o="2.0.0-alpha.38",h={permalink:"/changelog/2.0.0-alpha.38",source:"@site/changelog/source/2.0.0-alpha.38.md",title:"2.0.0-alpha.38",description:"Breaking Change",date:"2019-12-06T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"KYY",alias:"FeynmanDNA",url:"https://github.com/FeynmanDNA",imageURL:"https://github.com/FeynmanDNA.png",key:"FeynmanDNA"},{name:"kaichu",alias:"qshiwu",url:"https://github.com/qshiwu",imageURL:"https://github.com/qshiwu.png",key:"qshiwu"},{name:"Shivangna Kaistha",alias:"shivangna",url:"https://github.com/shivangna",imageURL:"https://github.com/shivangna.png",key:"shivangna"}],frontMatter:{mdx:{format:"md"},date:"2019-12-06T20:00",authors:["endiliey","FeynmanDNA","qshiwu","shivangna"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.39",permalink:"/changelog/2.0.0-alpha.39"},nextItem:{title:"2.0.0-alpha.37",permalink:"/changelog/2.0.0-alpha.37"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[void 0,void 0,void 0,void 0]},u=[];function l(e){return(0,a.jsx)(a.Fragment,{})}function m(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l()}},71670:(e,n,t)=>{t.d(n,{Z:()=>h,a:()=>o});var a=t(27378);const i={},s=a.createContext(i);function o(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function h(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80458.a896f0fa.js b/assets/js/80458.a896f0fa.js new file mode 100644 index 0000000000..d1b4a7f782 --- /dev/null +++ b/assets/js/80458.a896f0fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[80458],{80458:(t,e,r)=>{r.d(e,{diagram:()=>I});var i=r(99854),a=r(88472),n=r(63294),s=r(9500);const o=[];for(let L=0;L<256;++L)o.push((L+256).toString(16).slice(1));function c(t,e=0){return(o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]).toLowerCase()}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const h=function(t){return"string"==typeof t&&l.test(t)};const d=function(t){if(!h(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=255&e,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=255&e,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=255&e,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=255&e,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=255&e,r};function y(t,e,r,i){switch(t){case 0:return e&r^~e&i;case 1:case 3:return e^r^i;case 2:return e&r^e&i^r&i}}function u(t,e){return t<<e|t>>>32-e}const p=function(t,e,r){function i(t,i,a,n){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r));return e}(t)),"string"==typeof i&&(i=d(i)),16!==(null===(s=i)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(i),o.set(t,i.length),o=r(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,a){n=n||0;for(let t=0;t<16;++t)a[n+t]=o[t];return a}return c(o)}try{i.name=t}catch(a){}return i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",i}("v5",80,(function(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const i=t.length/4+2,a=Math.ceil(i/16),n=new Array(a);for(let s=0;s<a;++s){const e=new Uint32Array(16);for(let r=0;r<16;++r)e[r]=t[64*s+4*r]<<24|t[64*s+4*r+1]<<16|t[64*s+4*r+2]<<8|t[64*s+4*r+3];n[s]=e}n[a-1][14]=8*(t.length-1)/Math.pow(2,32),n[a-1][14]=Math.floor(n[a-1][14]),n[a-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<a;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=n[s][e];for(let e=16;e<80;++e)t[e]=u(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let i=r[0],a=r[1],o=r[2],c=r[3],l=r[4];for(let r=0;r<80;++r){const n=Math.floor(r/20),s=u(i,5)+y(n,a,o,c)+l+e[n]+t[r]>>>0;l=c,c=o,o=u(a,30)>>>0,a=i,i=s}r[0]=r[0]+i>>>0,r[1]=r[1]+a>>>0,r[2]=r[2]+o>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+l>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));r(27693),r(7608),r(31699);var _=function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,2],r=[1,5],i=[6,9,11,23,25,27,29,30,31,52],a=[1,17],n=[1,18],s=[1,19],o=[1,20],c=[1,21],l=[1,22],h=[1,25],d=[1,30],y=[1,31],u=[1,32],p=[1,33],_=[1,34],f=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,48,52],g=[1,46],m=[30,31,49,50],E=[4,6,9,11,23,25,27,29,30,31,52],O=[44,45,46,47,48],b=[22,37],k=[1,66],R=[1,65],N=[22,37,39,41],T={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,MD_PARENT:48,NON_IDENTIFYING:49,IDENTIFYING:50,WORD:51,open_directive:52,type_directive:53,arg_directive:54,close_directive:55,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"MD_PARENT",49:"NON_IDENTIFYING",50:"IDENTIFYING",51:"WORD",52:"open_directive",53:"type_directive",54:"arg_directive",55:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,r,i,a,n,s){var o=n.length-1;switch(a){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:n[o-1].push(n[o]),this.$=n[o-1];break;case 5:case 6:case 20:case 44:case 28:case 29:case 32:this.$=n[o];break;case 12:i.addEntity(n[o-4]),i.addEntity(n[o-2]),i.addRelationship(n[o-4],n[o],n[o-2],n[o-3]);break;case 13:i.addEntity(n[o-3]),i.addAttributes(n[o-3],n[o-1]);break;case 14:i.addEntity(n[o-2]);break;case 15:i.addEntity(n[o]);break;case 16:case 17:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 18:case 19:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 21:case 42:case 43:case 33:this.$=n[o].replace(/"/g,"");break;case 22:case 30:this.$=[n[o]];break;case 23:n[o].push(n[o-1]),this.$=n[o];break;case 24:this.$={attributeType:n[o-1],attributeName:n[o]};break;case 25:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeKeyTypeList:n[o]};break;case 26:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeComment:n[o]};break;case 27:this.$={attributeType:n[o-3],attributeName:n[o-2],attributeKeyTypeList:n[o-1],attributeComment:n[o]};break;case 31:n[o-2].push(n[o]),this.$=n[o-2];break;case 34:this.$={cardA:n[o],relType:n[o-1],cardB:n[o-2]};break;case 35:this.$=i.Cardinality.ZERO_OR_ONE;break;case 36:this.$=i.Cardinality.ZERO_OR_MORE;break;case 37:this.$=i.Cardinality.ONE_OR_MORE;break;case 38:this.$=i.Cardinality.ONLY_ONE;break;case 39:this.$=i.Cardinality.MD_PARENT;break;case 40:this.$=i.Identification.NON_IDENTIFYING;break;case 41:this.$=i.Identification.IDENTIFYING;break;case 45:i.parseDirective("%%{","open_directive");break;case 46:i.parseDirective(n[o],"type_directive");break;case 47:n[o]=n[o].trim().replace(/'/g,'"'),i.parseDirective(n[o],"arg_directive");break;case 48:i.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,52:r},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,52:r},{13:8,53:[1,9]},{53:[2,45]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:a,25:n,27:s,29:o,30:c,31:l,52:r},{1:[2,2]},{14:23,15:[1,24],55:h},t([15,55],[2,46]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:15,10:26,12:4,17:16,23:a,25:n,27:s,29:o,30:c,31:l,52:r},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),t(i,[2,15],{18:27,42:29,20:[1,28],44:d,45:y,46:u,47:p,48:_}),{24:[1,35]},{26:[1,36]},{28:[1,37]},t(i,[2,19]),t(f,[2,20]),t(f,[2,21]),{11:[1,38]},{16:39,54:[1,40]},{11:[2,48]},t(i,[2,5]),{17:41,30:c,31:l},{21:42,22:[1,43],32:44,33:45,37:g},{43:47,49:[1,48],50:[1,49]},t(m,[2,35]),t(m,[2,36]),t(m,[2,37]),t(m,[2,38]),t(m,[2,39]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(E,[2,9]),{14:50,55:h},{55:[2,47]},{15:[1,51]},{22:[1,52]},t(i,[2,14]),{21:53,22:[2,22],32:44,33:45,37:g},{34:54,37:[1,55]},{37:[2,28]},{42:56,44:d,45:y,46:u,47:p,48:_},t(O,[2,40]),t(O,[2,41]),{11:[1,57]},{19:58,30:[1,61],31:[1,60],51:[1,59]},t(i,[2,13]),{22:[2,23]},t(b,[2,24],{35:62,36:63,38:64,40:k,41:R}),t([22,37,40,41],[2,29]),t([30,31],[2,34]),t(E,[2,10]),t(i,[2,12]),t(i,[2,42]),t(i,[2,43]),t(i,[2,44]),t(b,[2,25],{36:67,39:[1,68],41:R}),t(b,[2,26]),t(N,[2,30]),t(b,[2,33]),t(N,[2,32]),t(b,[2,27]),{38:69,40:k},t(N,[2,31])],defaultActions:{5:[2,45],7:[2,2],25:[2,48],40:[2,47],46:[2,28],53:[2,23]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],s=this.table,o="",c=0,l=0,h=n.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);d.setInput(t,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var p=d.yylloc;n.push(p);var _=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,g,m,E,O,b,k,R,N,T={};;){if(g=r[r.length-1],this.defaultActions[g]?m=this.defaultActions[g]:(null==f&&(N=void 0,"number"!=typeof(N=i.pop()||d.lex()||1)&&(N instanceof Array&&(N=(i=N).pop()),N=e.symbols_[N]||N),f=N),m=s[g]&&s[g][f]),void 0===m||!m.length||!m[0]){var x="";for(O in R=[],s[g])this.terminals_[O]&&O>2&&R.push("'"+this.terminals_[O]+"'");x=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:p,expected:R})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+f);switch(m[0]){case 1:r.push(f),a.push(d.yytext),n.push(d.yylloc),r.push(m[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,p=d.yylloc;break;case 2:if(b=this.productions_[m[1]][1],T.$=a[a.length-b],T._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},_&&(T._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(E=this.performAction.apply(T,[o,l,c,y.yy,m[1],a,n].concat(h))))return E;b&&(r=r.slice(0,-1*b*2),a=a.slice(0,-1*b),n=n.slice(0,-1*b)),r.push(this.productions_[m[1]][0]),a.push(T.$),n.push(T._$),k=s[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),52;case 8:return this.begin("type_directive"),53;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),55;case 11:return 54;case 12:return 11;case 13:case 20:case 25:break;case 14:return 9;case 15:return 31;case 16:return 51;case 17:return 4;case 18:return this.begin("block"),20;case 19:return 39;case 21:return 40;case 22:case 23:return 37;case 24:return 41;case 26:return this.popState(),22;case 27:case 57:return e.yytext[0];case 28:case 32:case 33:case 46:return 44;case 29:case 30:case 31:case 39:case 41:case 48:return 46;case 34:case 35:case 36:case 37:case 38:case 40:case 47:return 45;case 42:case 43:case 44:case 45:return 47;case 49:return 48;case 50:case 53:case 54:case 55:return 49;case 51:case 52:return 50;case 56:return 30;case 58:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[19,20,21,22,23,24,25,26,27],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],inclusive:!0}}};function A(){this.yy={}}return T.lexer=x,A.prototype=T,T.Parser=A,new A}();_.parser=_;const f=_;let g={},m=[];const E=function(t){return void 0===g[t]&&(g[t]={attributes:[]},i.l.info("Added new entity :",t)),g[t]},O={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,r){i.m.parseDirective(this,t,e,r)},getConfig:()=>(0,i.c)().er,addEntity:E,addAttributes:function(t,e){let r,a=E(t);for(r=e.length-1;r>=0;r--)a.attributes.push(e[r]),i.l.debug("Added attribute ",e[r].attributeName)},getEntities:()=>g,addRelationship:function(t,e,r,a){let n={entityA:t,roleA:e,entityB:r,relSpec:a};m.push(n),i.l.debug("Added new relationship :",n)},getRelationships:()=>m,clear:function(){g={},m=[],(0,i.v)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.r,getDiagramTitle:i.t},b={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},k=b,R=function(t,e){let r;t.append("defs").append("marker").attr("id",b.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},N=/[^\dA-Za-z](\W)*/g;let T={},x=new Map;const A=function(t,e,r){let a;return Object.keys(e).forEach((function(n){const s=function(t="",e=""){const r=t.replace(N,"");return`${D(e)}${D(r)}${p(t,w)}`}(n,"entity");x.set(n,s);const o=t.append("g").attr("id",s);a=void 0===a?s:a;const c="text-"+s,l=o.append("text").classed("er entityLabel",!0).attr("id",c).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(n),{width:h,height:d}=((t,e,r)=>{const a=T.entityPadding/3,n=T.entityPadding/3,s=.85*T.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*a,f=1;r.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),r.forEach((r=>{const n=`${e.node().id}-attr-${f}`;let o=0;const g=(0,i.x)(r.attributeType),m=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(g),E=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeName),O={};O.tn=m,O.nn=E;const b=m.node().getBBox(),k=E.node().getBBox();if(d=Math.max(d,b.width),y=Math.max(y,k.width),o=Math.max(b.height,k.height),l){const e=void 0!==r.attributeKeyTypeList?r.attributeKeyTypeList.join(","):"",a=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(e);O.kn=a;const c=a.node().getBBox();u=Math.max(u,c.width),o=Math.max(o,c.height)}if(h){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeComment||"");O.cn=e;const a=e.node().getBBox();p=Math.max(p,a.width),o=Math.max(o,a.height)}O.height=o,c.push(O),_+=o+2*a,f+=1}));let g=4;l&&(g+=2),h&&(g+=2);const m=d+y+u+p,E={width:Math.max(T.minEntityWidth,Math.max(o.width+2*T.entityPadding,m+n*g)),height:r.length>0?_:Math.max(T.minEntityHeight,o.height+2*T.entityPadding)};if(r.length>0){const r=Math.max(0,(E.width-m-n*g)/(g/2));e.attr("transform","translate("+E.width/2+","+(a+o.height/2)+")");let i=o.height+2*a,s="attributeBoxOdd";c.forEach((e=>{const o=i+a+e.height/2;e.tn.attr("transform","translate("+n+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",i).attr("width",d+2*n+r).attr("height",e.height+2*a),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+n)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",i).attr("width",y+2*n+r).attr("height",e.height+2*a);let g=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(g+n)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",g).attr("y",i).attr("width",u+2*n+r).attr("height",e.height+2*a);g=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(g+n)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",g).attr("y",i).attr("width",p+2*n+r).attr("height",e.height+2*a)),i+=e.height+2*a,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else E.height=Math.max(T.minEntityHeight,_),e.attr("transform","translate("+E.width/2+","+E.height/2+")");return E})(o,l,e[n].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),a},v=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let M=0;const w="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function D(t=""){return t.length>0?`${t}-`:""}const I={parser:f,db:O,renderer:{setConf:function(t){const e=Object.keys(t);for(const r of e)T[r]=t[r]},draw:function(t,e,r,o){T=(0,i.c)().er,i.l.info("Drawing ER diagram");const c=(0,i.c)().securityLevel;let l;"sandbox"===c&&(l=(0,n.Ys)("#i"+e));const h=("sandbox"===c?(0,n.Ys)(l.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:T.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const y=A(h,o.db.getEntities(),d),u=function(t,e){return t.forEach((function(t){e.setEdge(x.get(t.entityA),x.get(t.entityB),{relationship:t},v(t))})),t}(o.db.getRelationships(),d);var p,_;(0,s.bK)(d),p=h,(_=d).nodes().forEach((function(t){void 0!==t&&void 0!==_.node(t)&&p.select("#"+t).attr("transform","translate("+(_.node(t).x-_.node(t).width/2)+","+(_.node(t).y-_.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,r,a,s){M++;const o=r.edge(x.get(e.entityA),x.get(e.entityB),v(e)),c=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),l=t.insert("path","#"+a).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",T.stroke).style("fill","none");e.relSpec.relType===s.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(T.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_ONE_END+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_MORE_END+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ONE_OR_MORE_END+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+k.ONLY_ONE_END+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+h+"#"+k.MD_PARENT_END+")")}switch(e.relSpec.cardB){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_ONE_START+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_MORE_START+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ONE_OR_MORE_START+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+k.ONLY_ONE_START+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+h+"#"+k.MD_PARENT_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+M,p=t.append("text").classed("er relationshipLabel",!0).attr("id",u).attr("x",y.x).attr("y",y.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+u).classed("er relationshipLabelBox",!0).attr("x",y.x-p.width/2).attr("y",y.y-p.height/2).attr("width",p.width).attr("height",p.height)}(h,t,d,y,o)}));const f=T.diagramPadding;i.u.insertTitle(h,"entityTitleText",T.titleTopMargin,o.db.getDiagramTitle());const g=h.node().getBBox(),m=g.width+2*f,E=g.height+2*f;(0,i.i)(h,E,m,T.useMaxWidth),h.attr("viewBox",`${g.x-f} ${g.y-f} ${m} ${E}`)}},styles:t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n \n`}}}]); \ No newline at end of file diff --git a/assets/js/8050e487.d4305819.js b/assets/js/8050e487.d4305819.js new file mode 100644 index 0000000000..93f2d54fb5 --- /dev/null +++ b/assets/js/8050e487.d4305819.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[29792],{59846:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>u,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>t});var c=r(24246),l=r(71670);const o={mdx:{format:"md"},date:"2020-07-29T20:00",authors:["hobadams","Simek","slorber","teikjun"]},i="2.0.0-alpha.60",n={permalink:"/changelog/2.0.0-alpha.60",source:"@site/changelog/source/2.0.0-alpha.60.md",title:"2.0.0-alpha.60",description:"New Feature",date:"2020-07-29T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Hob Adams",alias:"hobadams",url:"https://github.com/hobadams",imageURL:"https://github.com/hobadams.png",key:"hobadams"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"}],frontMatter:{mdx:{format:"md"},date:"2020-07-29T20:00",authors:["hobadams","Simek","slorber","teikjun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.61",permalink:"/changelog/2.0.0-alpha.61"},nextItem:{title:"2.0.0-alpha.59",permalink:"/changelog/2.0.0-alpha.59"},listPageLink:"/changelog/page/3"},u={authorsImageUrls:[void 0,void 0,void 0,void 0]},t=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 4",id:"committers-4",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3134",children:"#3134"})," feat(v2): add validation escape hatch (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-1.x"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3124",children:"#3124"})," feat(v1): add 'slugPreprocessor' config option to allow users customize the hash links (",(0,c.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3133",children:"#3133"})," feat(v2): add themeConfig validation to algolia theme (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3142",children:"#3142"})," fix(v2): config validation fixes + add tests for config validation (",(0,c.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3149",children:"#3149"})," fix(v2): BrowserOnly should not return undefined (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3143",children:"#3143"})," fix(v2): absolute Links should be automatically prefixed by baseurl (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3141",children:"#3141"})," fix(v2): remove buggy routesLoaded + deprecate routesLoaded lifecycle (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3140",children:"#3140"})," fix(v2): navbar item links should allow unknown attributes (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3138",children:"#3138"})," fix(v2): add accessible label for Algolia search button (",(0,c.jsx)(s.a,{href:"https://github.com/hobadams",children:"@hobadams"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3120",children:"#3120"})," fix(v2): make config validation less strict (",(0,c.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3145",children:"#3145"})," docs(v2): add myself to /team page + add TeamProfileCard component (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3146",children:"#3146"})," docs(v2): prettier docs (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3116",children:"#3116"})," chore(v2): docs updates after release (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Other\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3130",children:"#3130"})," chore(v2): remove old versions (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-1.x"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-init-1.x"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),", ",(0,c.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/3114",children:"#3114"})," chore(v2): prepare v2.0.0.alpha-59 release (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"committers-4",children:"Committers: 4"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Bartosz Kaszubowski (",(0,c.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Hob Adams (",(0,c.jsx)(s.a,{href:"https://github.com/hobadams",children:"@hobadams"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Teik Jun (",(0,c.jsx)(s.a,{href:"https://github.com/teikjun",children:"@teikjun"}),")"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(d,{...e})}):d(e)}},71670:(e,s,r)=>{r.d(s,{Z:()=>n,a:()=>i});var c=r(27378);const l={},o=c.createContext(l);function i(e){const s=c.useContext(o);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function n(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),c.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8075f6fd.9677879e.js b/assets/js/8075f6fd.9677879e.js new file mode 100644 index 0000000000..9b5692e349 --- /dev/null +++ b/assets/js/8075f6fd.9677879e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99011],{66064:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},79402:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},50520:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670);const r={authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},o="Upgrading frontend dependencies with confidence",a={permalink:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",source:"@site/blog/2023/09-22-upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing/index.mdx",title:"Upgrading frontend dependencies with confidence",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",date:"2023-09-22T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:8.355,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{authors:["slorber"],tags:["release"],slug:"/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",description:"Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.",image:"./img/social-card.png"},unlisted:!1,lastUpdatedAt:1698328031e3,lastUpdatedBy:"S\xe9bastien Lorber",prevItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"},nextItem:{title:"Docusaurus 2.4",permalink:"/blog/releases/2.4"}},c={image:s(66064).Z,authorsImageUrls:[void 0]},d=[];function g(e){const n={a:"a",img:"img",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Frontend developers often need to ",(0,t.jsx)(n.strong,{children:"upgrade npm dependencies"}),", but those upgrades can feel scary and lead to ",(0,t.jsx)(n.strong,{children:"subtle UI side effects"})," not caught by your regular test suite."]}),"\n",(0,t.jsxs)(n.p,{children:["Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. ",(0,t.jsx)(n.strong,{children:"Docusaurus v3 is around the corner"})," (currently in ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9312",children:"beta"}),"), and we would like to help you do this upgrade with confidence."]}),"\n",(0,t.jsxs)(n.p,{children:["This article introduces a ",(0,t.jsx)(n.strong,{children:"visual regression testing"})," workflow based on ",(0,t.jsx)(n.a,{href:"https://github.com/features/actions",children:(0,t.jsx)(n.strong,{children:"GitHub Actions"})}),", ",(0,t.jsx)(n.a,{href:"https://playwright.dev/",children:(0,t.jsx)(n.strong,{children:"Playwright"})}),", and ",(0,t.jsx)(n.a,{href:"https://argos-ci.com/",children:(0,t.jsx)(n.strong,{children:"Argos"})}),". It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Upgrading frontend dependencies with confidence - social card",src:s(79402).Z+"",width:"1500",height:"785"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81422.6090eea1.js b/assets/js/81422.6090eea1.js new file mode 100644 index 0000000000..8f26060403 --- /dev/null +++ b/assets/js/81422.6090eea1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81422],{81422:(t,e,n)=>{n.d(e,{diagram:()=>D});var i=n(99854),s=n(63294),r=n(47435),a=(n(27693),n(7608),n(31699),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,24,26],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,20],h=[1,24],u=[4,6,9,11,17,18,20,22,23,24,26],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 16:i.addTask(r[o-1],r[o]),this.$="task";break;case 18:i.parseDirective("%%{","open_directive");break;case 19:i.parseDirective(r[o],"type_directive");break;case 20:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 21:i.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,26:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,26:n},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:l,26:n},{1:[2,2]},{14:22,15:[1,23],29:h},t([15,29],[2,19]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:21,10:25,12:4,17:s,18:r,20:a,22:o,23:c,24:l,26:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,26]},{21:[1,27]},t(i,[2,14]),t(i,[2,15]),{25:[1,28]},t(i,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(i,[2,16]),t(u,[2,9]),{14:32,29:h},{29:[2,20]},{11:[1,33]},t(u,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var f=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,x,m,k,_,b,v,$,w,M={};;){if(x=n[n.length-1],this.defaultActions[x]?m=this.defaultActions[x]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||u.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),m=a[x]&&a[x][g]),void 0===m||!m.length||!m[0]){var E="";for(_ in $=[],a[x])this.terminals_[_]&&_>2&&$.push("'"+this.terminals_[_]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(m[0]){case 1:n.push(g),s.push(u.yytext),r.push(u.yylloc),n.push(m[1]),g=null,l=u.yyleng,o=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(b=this.productions_[m[1]][1],M.$=s[s.length-b],M._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},f&&(M._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(M,[o,l,c,y.yy,m[1],s,r].concat(h))))return k;b&&(n=n.slice(0,-1*b*2),s=s.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[m[1]][0]),s.push(M.$),r.push(M._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},p={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};function d(){this.yy={}}return y.lexer=p,d.prototype=y,y.Parser=d,new d}());a.parser=a;const o=a;let c="";const l=[],h=[],u=[],y=function(){let t=!0;for(const[e,n]of u.entries())u[e].processed,t=t&&n.processed;return t},p={parseDirective:function(t,e,n){i.m.parseDirective(this,t,e,n)},getConfig:()=>(0,i.c)().journey,clear:function(){l.length=0,h.length=0,c="",u.length=0,(0,i.v)()},setDiagramTitle:i.r,getDiagramTitle:i.t,setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,addSection:function(t){c=t,l.push(t)},getSections:function(){return l},getTasks:function(){let t=y();let e=0;for(;!t&&e<100;)t=y(),e++;return h.push(...u),h},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map((t=>t.trim())),a={section:c,type:c,people:r,task:t,score:i};u.push(a)},addTaskOrg:function(t){const e={section:c,type:c,description:t,task:t,classes:[]};h.push(e)},getActors:function(){return function(){const t=[];return h.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},d=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,f=function(t,e){return(0,r.d)(t,e)},g=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},x=function(t,e){return(0,r.f)(t,e)};let m=-1;const k=function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:u}=c,y=t.split(/<br\s*\/?>/gi);for(let p=0;p<y.length;p++){const t=p*h-h*(y.length-1)/2,c=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",u);c.append("tspan").attr("x",n+r/2).attr("dy",t).text(y[p]),c.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,s,r,a,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,c,l),i(u,c)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),_=g,b=function(t,e,n){const i=t.append("g"),s=(0,r.g)();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,f(i,s),k(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},v=x,$=function(t,e,n){const i=e.x+n.width/2,a=t.append("g");m++;a.append("line").attr("id","task"+m).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),r=t.append("g");r.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,s.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(r):e.score<3?function(t){const i=(0,s.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(r):r.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a,{cx:i,cy:300+30*(5-e.score),score:e.score});const o=(0,r.g)();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=n.width,o.height=n.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,f(a,o);let c=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:c,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};g(a,i),c+=10})),k(n)(e.task,a,o.x,o.y,o.width,o.height,{class:"task"},n,e.colour)},w=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},M={};const E=(0,i.c)().journey,S=E.leftMargin,T={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,s){const r=(0,i.c)().journey,a=this;let o=0;var c;this.sequenceItems.forEach((function(i){o++;const l=a.sequenceItems.length-o+1;a.updateVal(i,"starty",e-l*r.boxMargin,Math.min),a.updateVal(i,"stopy",s+l*r.boxMargin,Math.max),a.updateVal(T.data,"startx",t-l*r.boxMargin,Math.min),a.updateVal(T.data,"stopx",n+l*r.boxMargin,Math.max),"activation"!==c&&(a.updateVal(i,"startx",t-l*r.boxMargin,Math.min),a.updateVal(i,"stopx",n+l*r.boxMargin,Math.max),a.updateVal(T.data,"starty",e-l*r.boxMargin,Math.min),a.updateVal(T.data,"stopy",s+l*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(T.data,"startx",s,Math.min),this.updateVal(T.data,"starty",a,Math.min),this.updateVal(T.data,"stopx",r,Math.max),this.updateVal(T.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},A=E.sectionFills,I=E.sectionColours,P=function(t,e,n){const s=(0,i.c)().journey;let r="";const a=n+(2*s.height+s.diagramMarginY);let o=0,c="#CCC",l="black",h=0;for(const[i,u]of e.entries()){if(r!==u.section){c=A[o%A.length],h=o%A.length,l=I[o%I.length];let n=0;const a=u.section;for(let t=i;t<e.length&&e[t].section==a;t++)n+=1;const y={x:i*s.taskMargin+i*s.width+S,y:50,text:u.section,fill:c,num:h,colour:l,taskCount:n};b(t,y,s),r=u.section,o++}const n=u.people.reduce(((t,e)=>(M[e]&&(t[e]=M[e]),t)),{});u.x=i*s.taskMargin+i*s.width+S,u.y=a,u.width=s.diagramMarginX,u.height=s.diagramMarginY,u.colour=l,u.fill=c,u.num=h,u.actors=n,$(t,u,s),T.insert(u.x,u.y,u.x+u.width+s.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){E[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.c)().journey,o=(0,i.c)().securityLevel;let c;"sandbox"===o&&(c=(0,s.Ys)("#i"+e));const l="sandbox"===o?(0,s.Ys)(c.nodes()[0].contentDocument.body):(0,s.Ys)("body");T.init();const h=l.select("#"+e);w(h);const u=r.db.getTasks(),y=r.db.getDiagramTitle(),p=r.db.getActors();for(const i in M)delete M[i];let d=0;p.forEach((t=>{M[t]={color:a.actorColours[d%a.actorColours.length],position:d},d++})),function(t){const e=(0,i.c)().journey;let n=60;Object.keys(M).forEach((i=>{const s=M[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:M[i].position};_(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v(t,a),n+=20}))}(h),T.insert(0,0,S,50*Object.keys(M).length),P(h,u,0);const f=T.getBounds();y&&h.append("text").text(y).attr("x",S).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*a.diagramMarginY,x=S+f.stopx+2*a.diagramMarginX;(0,i.i)(h,g,x,a.useMaxWidth),h.append("line").attr("x1",S).attr("y1",4*a.height).attr("x2",x-S-4).attr("y2",4*a.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=y?70:0;h.attr("viewBox",`${f.startx} -25 ${x} ${g+m}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",g+m+25)}},D={parser:o,db:p,renderer:C,styles:d,init:t=>{C.setConf(t.journey),p.clear()}}},47435:(t,e,n)=>{n.d(e,{a:()=>a,b:()=>l,c:()=>c,d:()=>r,e:()=>u,f:()=>o,g:()=>h});var i=n(7608),s=n(99854);const r=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return void 0!==e.class&&n.attr("class",e.class),n},a=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,n).lower()},o=(t,e)=>{const n=e.text.replace(s.J," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i},c=(t,e,n,s)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",a)},l=(t,e,n,s)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",`#${a}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),u=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/814f3328.a4cc73a5.js b/assets/js/814f3328.a4cc73a5.js deleted file mode 100644 index f72406ffe6..0000000000 --- a/assets/js/814f3328.a4cc73a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[7472],{5513:l=>{l.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome","unlisted":false},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post","unlisted":false},{"title":"Long Blog Post","permalink":"/blog/long-blog-post","unlisted":false},{"title":"First Blog Post","permalink":"/blog/first-blog-post","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.f3389328.js b/assets/js/814f3328.f3389328.js new file mode 100644 index 0000000000..8f65ea6540 --- /dev/null +++ b/assets/js/814f3328.f3389328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[52535],{45641:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Docusaurus 3.2","permalink":"/blog/releases/3.2","unlisted":false},{"title":"Docusaurus 3.1","permalink":"/blog/releases/3.1","unlisted":false},{"title":"Announcing Docusaurus 3.0","permalink":"/blog/releases/3.0","unlisted":false},{"title":"Preparing your site for Docusaurus v3","permalink":"/blog/preparing-your-site-for-docusaurus-v3","unlisted":false},{"title":"Upgrading frontend dependencies with confidence","permalink":"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing","unlisted":false},{"title":"Docusaurus 2.4","permalink":"/blog/releases/2.4","unlisted":false},{"title":"Docusaurus 2.3","permalink":"/blog/releases/2.3","unlisted":false},{"title":"Docusaurus 2.2","permalink":"/blog/releases/2.2","unlisted":false},{"title":"Docusaurus 2.1","permalink":"/blog/2022/09/01/docusaurus-2.1","unlisted":false},{"title":"Announcing Docusaurus 2.0","permalink":"/blog/2022/08/01/announcing-docusaurus-2.0","unlisted":false},{"title":"Docusaurus 2021 Recap","permalink":"/blog/2022/01/24/docusaurus-2021-recap","unlisted":false},{"title":"DocSearch migration","permalink":"/blog/2021/11/21/algolia-docsearch-migration","unlisted":false},{"title":"Announcing Docusaurus 2 Beta","permalink":"/blog/2021/05/12/announcing-docusaurus-two-beta","unlisted":false},{"title":"Releasing Docusaurus i18n","permalink":"/blog/2021/03/09/releasing-docusaurus-i18n","unlisted":false},{"title":"Docusaurus 2020 Recap","permalink":"/blog/2021/01/19/docusaurus-2020-recap","unlisted":false},{"title":"Tribute to Endi","permalink":"/blog/2020/01/07/tribute-to-endi","unlisted":false},{"title":"Docusaurus 2019 Recap","permalink":"/blog/2019/12/30/docusaurus-2019-recap","unlisted":false},{"title":"Happy 1st Birthday Slash!","permalink":"/blog/2018/12/14/Happy-First-Birthday-Slash","unlisted":false},{"title":"Towards Docusaurus 2","permalink":"/blog/2018/09/11/Towards-Docusaurus-2","unlisted":false},{"title":"How I Converted Profilo to Docusaurus in Under 2 Hours","permalink":"/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus","unlisted":false},{"title":"Introducing Docusaurus","permalink":"/blog/2017/12/14/introducing-docusaurus","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/82005.40152a17.js b/assets/js/82005.40152a17.js new file mode 100644 index 0000000000..7776814b43 --- /dev/null +++ b/assets/js/82005.40152a17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82005],{82005:(e,t,o)=>{o.r(t),o.d(t,{default:()=>r});var n=o(24246),a=o(27378),s=o(40624),l=o(36712);const i={popup:"popup_EH26",buttonContainer:"buttonContainer_Gl4a"};function r({onReload:e}){const[t,o]=(0,a.useState)(!0);return t&&(0,n.jsxs)("div",{className:(0,s.Z)("alert","alert--secondary",i.popup),children:[(0,n.jsx)("p",{children:(0,n.jsx)(l.Z,{id:"theme.PwaReloadPopup.info",description:"The text for PWA reload popup",children:"New version available"})}),(0,n.jsxs)("div",{className:i.buttonContainer,children:[(0,n.jsx)("button",{className:"button button--link",type:"button",onClick:()=>{o(!1),e()},children:(0,n.jsx)(l.Z,{id:"theme.PwaReloadPopup.refreshButtonText",description:"The text for PWA reload button",children:"Refresh"})}),(0,n.jsx)("button",{"aria-label":(0,l.I)({id:"theme.PwaReloadPopup.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of PWA reload popup"}),className:"close",type:"button",onClick:()=>o(!1),children:(0,n.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/822bd8ab.9ca5d9d6.js b/assets/js/822bd8ab.9ca5d9d6.js deleted file mode 100644 index 4263810ddb..0000000000 --- a/assets/js/822bd8ab.9ca5d9d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[2748],{9656:(s,t,e)=>{e.r(t),e.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=e(4848),o=e(8453);const i={sidebar_position:6},r="Congratulations!",a={id:"tutorial-basics/congratulations",title:"Congratulations!",description:"You have just learned the basics of Docusaurus and made some changes to the initial template.",source:"@site/docs/tutorial-basics/congratulations.md",sourceDirName:"tutorial-basics",slug:"/tutorial-basics/congratulations",permalink:"/docs/tutorial-basics/congratulations",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/tutorial-basics/congratulations.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Deploy your site",permalink:"/docs/tutorial-basics/deploy-your-site"},next:{title:"Tutorial - Extras",permalink:"/docs/category/tutorial---extras"}},c={},u=[{value:"What's next?",id:"whats-next",level:2}];function d(s){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"congratulations",children:"Congratulations!"}),"\n",(0,n.jsxs)(t.p,{children:["You have just learned the ",(0,n.jsx)(t.strong,{children:"basics of Docusaurus"})," and made some changes to the ",(0,n.jsx)(t.strong,{children:"initial template"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Docusaurus has ",(0,n.jsx)(t.strong,{children:"much more to offer"}),"!"]}),"\n",(0,n.jsxs)(t.p,{children:["Have ",(0,n.jsx)(t.strong,{children:"5 more minutes"}),"? Take a look at ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"/docs/tutorial-extras/manage-docs-versions",children:"versioning"})})," and ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"/docs/tutorial-extras/translate-your-site",children:"i18n"})}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Anything ",(0,n.jsx)(t.strong,{children:"unclear"})," or ",(0,n.jsx)(t.strong,{children:"buggy"})," in this tutorial? ",(0,n.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/discussions/4610",children:"Please report it!"})]}),"\n",(0,n.jsx)(t.h2,{id:"whats-next",children:"What's next?"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Read the ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/",children:"official documentation"})]}),"\n",(0,n.jsxs)(t.li,{children:["Modify your site configuration with ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/api/docusaurus-config",children:(0,n.jsx)(t.code,{children:"docusaurus.config.js"})})]}),"\n",(0,n.jsxs)(t.li,{children:["Add navbar and footer items with ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/api/themes/configuration",children:(0,n.jsx)(t.code,{children:"themeConfig"})})]}),"\n",(0,n.jsxs)(t.li,{children:["Add a custom ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/styling-layout",children:"Design and Layout"})]}),"\n",(0,n.jsxs)(t.li,{children:["Add a ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/search",children:"search bar"})]}),"\n",(0,n.jsxs)(t.li,{children:["Find inspirations in the ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/showcase",children:"Docusaurus showcase"})]}),"\n",(0,n.jsxs)(t.li,{children:["Get involved in the ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/community/support",children:"Docusaurus Community"})]}),"\n"]})]})}function l(s={}){const{wrapper:t}={...(0,o.R)(),...s.components};return t?(0,n.jsx)(t,{...s,children:(0,n.jsx)(d,{...s})}):d(s)}},8453:(s,t,e)=>{e.d(t,{R:()=>r,x:()=>a});var n=e(6540);const o={},i=n.createContext(o);function r(s){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(t):{...t,...s}}),[t,s])}function a(s){let t;return t=s.disableParentContext?"function"==typeof s.components?s.components(o):s.components||o:r(s.components),n.createElement(i.Provider,{value:t},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/82425aa0.9faa8f5e.js b/assets/js/82425aa0.9faa8f5e.js new file mode 100644 index 0000000000..f76e189d2c --- /dev/null +++ b/assets/js/82425aa0.9faa8f5e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[62513],{4923:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},1099:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},97369:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=s(24246),r=s(71670);const o={slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},t="Upgrading to Docusaurus v3",a={id:"migration/v3",title:"Upgrading to Docusaurus v3",description:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.",source:"@site/docs/migration/v3.mdx",sourceDirName:"migration",slug:"/migration/v3",permalink:"/docs/migration/v3",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/v3.mdx",tags:[],version:"current",lastUpdatedBy:"Zed Spencer-Milnes",lastUpdatedAt:1710954485e3,frontMatter:{slug:"/migration/v3",sidebar_label:"To Docusaurus v3"},sidebar:"docs",previous:{title:"Upgrading Docusaurus",permalink:"/docs/migration"},next:{title:"Overview",permalink:"/docs/migration/v2"}},d={},c=[{value:"Upgrading Dependencies",id:"upgrading-dependencies",level:2},{value:"Upgrading MDX",id:"upgrading-mdx",level:2},{value:"Using the MDX playground",id:"using-the-mdx-playground",level:3},{value:"Using the MDX checker CLI",id:"using-the-mdx-checker-cli",level:3},{value:"Common MDX problems",id:"common-mdx-problems",level:3},{value:"Bad usage of <code>{</code>",id:"bad-usage-of-",level:4},{value:"Bad usage of <code><</code>",id:"bad-usage-of--1",level:4},{value:"Bad usage of GFM Autolink",id:"bad-usage-of-gfm-autolink",level:4},{value:"Lower-case MDXComponent mapping",id:"lower-case-mdxcomponent-mapping",level:4},{value:"Unintended extra paragraphs",id:"unintended-extra-paragraphs",level:4},{value:"Unintended usage of directives",id:"unintended-usage-of-directives",level:4},{value:"Unsupported indented code blocks",id:"unsupported-indented-code-blocks",level:4},{value:"Other Markdown incompatibilities",id:"other-markdown-incompatibilities",level:3},{value:"Emphasis starting or ending with a space or a punctuation",id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",level:4},{value:"MDX plugins",id:"mdx-plugins",level:3},{value:"Formatters",id:"formatters",level:3},{value:"Other Breaking Changes",id:"other-breaking-changes",level:2},{value:"Node.js v18.0",id:"nodejs-v180",level:3},{value:"React v18.0+",id:"react-v180",level:3},{value:"Prism-React-Renderer v2.0+",id:"prism-react-renderer-v20",level:3},{value:"React-Live v4.0+",id:"react-live-v40",level:3},{value:"remark-emoji v4.0+",id:"remark-emoji-v40",level:3},{value:"Mermaid v10.4+",id:"mermaid-v104",level:3},{value:"TypeScript v5.0+",id:"typescript-v50",level:3},{value:"TypeScript base config",id:"typescript-base-config",level:3},{value:"New Config Loader",id:"new-config-loader",level:3},{value:"Admonition Warning",id:"admonition-warning",level:3},{value:"Versioned Sidebars",id:"versioned-sidebars",level:3},{value:"Blog Feed Limit",id:"blog-feed-limit",level:3},{value:"Docs Theme Refactoring",id:"docs-theme-refactoring",level:3},{value:"Optional Changes",id:"optional-changes",level:2},{value:"Automatic JSX runtime",id:"automatic-jsx-runtime",level:3},{value:"ESM and TypeScript Configs",id:"esm-and-typescript-configs",level:3},{value:"Using the <code>.mdx</code> extension",id:"using-the-mdx-extension",level:3},{value:"Upgrading math packages",id:"upgrading-math-packages",level:3},{value:"Turn off MDX v1 compat",id:"turn-off-mdx-v1-compat",level:3},{value:"<code>comments</code> option",id:"comments-option",level:4},{value:"<code>admonitions</code> option",id:"admonitions-option",level:4},{value:"<code>headingIds</code> option",id:"headingids-option",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}];function l(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Code:o,Details:t}=n;return o||u("Code",!0),t||u("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"upgrading-to-docusaurus-v3",children:"Upgrading to Docusaurus v3"}),"\n",(0,i.jsx)(n.p,{children:"This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3."}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 is a new ",(0,i.jsx)(n.strong,{children:"major version"}),", including ",(0,i.jsx)(n.strong,{children:"breaking changes"})," requiring you to adjust your site accordingly. We will guide to during this process, and also mention a few optional recommendations."]}),"\n",(0,i.jsx)(n.p,{children:"This is not a full rewrite, and the breaking changes are relatively easy to handle. The simplest sites will eventually upgrade by simply updating their npm dependencies."}),"\n",(0,i.jsxs)(n.p,{children:["The main breaking change is the upgrade from MDX v1 to MDX v3. Read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:(0,i.jsx)(n.strong,{children:"MDX v2"})})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:(0,i.jsx)(n.strong,{children:"MDX v3"})})," release notes for details. MDX will now compile your Markdown content ",(0,i.jsx)(n.strong,{children:"more strictly"})," and with ",(0,i.jsx)(n.strong,{children:"subtle differences"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Before upgrading",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Before upgrading, we recommend ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:(0,i.jsx)(n.strong,{children:"preparing your site for Docusaurus v3"})}),". There are changes that you can already ",(0,i.jsx)(n.strong,{children:"handle incrementally, under Docusaurus v2"}),". Doing so will help reduce the work needed to finally upgrade to Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["For complex sites, we also recommend to set up ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:(0,i.jsx)(n.strong,{children:"visual regression tests"})}),", a good way to ensure your site stays visually identical. Docusaurus v3 mainly upgrades dependencies, and is not expected to produce any visual changes."]})]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Check the release notes for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/releases/tag/v3.0.0",children:(0,i.jsx)(n.strong,{children:"Docusaurus v3.0.0"})}),", and browse the pull-requests for additional useful information and the motivation behind each change mentioned here."]})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-dependencies",children:"Upgrading Dependencies"}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading to Docusaurus v3 requires upgrading core Docusaurus dependencies (",(0,i.jsx)(n.code,{children:"@docusaurus/name"}),"), but also other related packages."]}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 now uses the following dependencies:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Node.js v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"React v18.0+"}),"\n",(0,i.jsx)(n.li,{children:"MDX v3.0+"}),"\n",(0,i.jsx)(n.li,{children:"TypeScript v5.0+"}),"\n",(0,i.jsx)(n.li,{children:"prism-react-renderer v2.0+"}),"\n",(0,i.jsx)(n.li,{children:"react-live v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"remark-emoji v4.0+"}),"\n",(0,i.jsx)(n.li,{children:"mermaid v10.4+"}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Upgrading community plugins",type:"warning",children:[(0,i.jsx)(n.p,{children:"If your site uses third-party community plugins and themes, you might need to upgrade them."}),(0,i.jsx)(n.p,{children:"Make sure those plugins are compatible with Docusaurus v3 before attempting an upgrade."})]}),"\n",(0,i.jsxs)(n.p,{children:["A typical ",(0,i.jsx)(n.code,{children:"package.json"})," dependency upgrade example:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n // upgrade to Docusaurus v3\n- "@docusaurus/core": "2.4.3",\n- "@docusaurus/preset-classic": "2.4.3",\n+ "@docusaurus/core": "3.0.0",\n+ "@docusaurus/preset-classic": "3.0.0",\n // upgrade to MDX v3\n- "@mdx-js/react": "^1.6.22",\n+ "@mdx-js/react": "^3.0.0",\n // upgrade to prism-react-renderer v2.0+\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n // upgrade to React v18.0+\n- "react": "^17.0.2",\n- "react-dom": "^17.0.2"\n+ "react": "^18.2.0",\n+ "react-dom": "^18.2.0"\n },\n "devDependencies": {\n // upgrade Docusaurus dev dependencies to v3\n- "@docusaurus/module-type-aliases": "2.4.3",\n- "@docusaurus/types": "2.4.3"\n+ "@docusaurus/module-type-aliases": "3.0.0",\n+ "@docusaurus/types": "3.0.0"\n }\n "engines": {\n // require Node.js 18.0+\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),"\n",(0,i.jsx)(n.p,{children:"For TypeScript users:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n // swap the external TypeScript config package for the new official one\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n // upgrade React types to v18.0+\n- "@types/react": "^17.0.69",\n+ "@types/react": "^18.2.29",\n // upgrade TypeScript to v5.0+\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})}),"\n",(0,i.jsx)(n.h2,{id:"upgrading-mdx",children:"Upgrading MDX"}),"\n",(0,i.jsxs)(n.p,{children:["MDX is a major dependency of Docusaurus responsible for compiling your ",(0,i.jsx)(n.code,{children:".md"})," and ",(0,i.jsx)(n.code,{children:".mdx"})," files to React components."]}),"\n",(0,i.jsxs)(n.p,{children:["The transition from MDX v1 to MDX v3 is the ",(0,i.jsx)(n.strong,{children:"main challenge"})," to the adoption of Docusaurus v3. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release."]}),"\n",(0,i.jsxs)(n.p,{children:["Some documents that compiled successfully under Docusaurus v2 might now ",(0,i.jsx)(n.strong,{children:"fail to compile"})," under Docusaurus v3."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Find problematic content ahead of time",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Run ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})," on your site to get a list of files that will now fail to compile under Docusaurus v3."]}),(0,i.jsxs)(n.p,{children:["This command is also a good way to estimate the amount of work to be done to make your content compatible. Remember most of this work can be executed ahead of the upgrade by ",(0,i.jsx)(n.a,{href:"/blog/preparing-your-site-for-docusaurus-v3",children:"preparing your content for Docusaurus v3"}),"."]})]}),"\n",(0,i.jsxs)(n.p,{children:["Other documents might also ",(0,i.jsx)(n.strong,{children:"render differently"}),"."]}),"\n",(0,i.jsx)(n.admonition,{title:"Use visual regression tests",type:"tip",children:(0,i.jsxs)(n.p,{children:["For large sites where a manual review of all pages is complicated, we recommend you to setup ",(0,i.jsx)(n.a,{href:"https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["Upgrading MDX comes with all the breaking changes documented on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/blog/v3/",children:"MDX v3"})," release blog posts. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2 migration guide"})," has a section on how to ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/#update-mdx-files",children:"update MDX files"})," that will be particularly relevant to us. Also make sure to read the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/troubleshooting-mdx/",children:"Troubleshooting MDX"})," page that can help you interpret common MDX error messages."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to also read our updated ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/react",children:(0,i.jsx)(n.strong,{children:"MDX and React"})})," documentation page."]}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-playground",children:"Using the MDX playground"}),"\n",(0,i.jsxs)(n.p,{children:["The MDX playground is your new best friend. It permits to understand how your content is ",(0,i.jsx)(n.strong,{children:"compiled to React components"}),", and troubleshoot compilation or rendering issues in isolation."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground - current version"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://mdx-git-renovate-babel-monorepo-mdx.vercel.app/playground/",children:"MDX playground - v1"})}),"\n"]}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"Configuring the MDX playground options for Docusaurus"}),(0,i.jsxs)(n.p,{children:["To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),":"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"MDX"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-gfm"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"remark-directive"})]}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the MDX playground's options panel, with only the "Use MDX", "Use remark-gfm", and "Use remark-directive" options checked",src:s(1099).Z+"",width:"1968",height:"1316"})})]}),"\n",(0,i.jsx)(n.p,{children:"Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v2."}),"\n",(0,i.jsx)(n.admonition,{title:"Making your content future-proof",type:"tip",children:(0,i.jsxs)(n.p,{children:["The goal will be to refactor your problematic content so that it ",(0,i.jsx)(n.strong,{children:"works fine with both versions of MDX"}),". This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box."]})}),"\n",(0,i.jsx)(n.h3,{id:"using-the-mdx-checker-cli",children:"Using the MDX checker CLI"}),"\n",(0,i.jsxs)(n.p,{children:["We provide a ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:"docusaurus-mdx-checker"})," CLI that permits to easily spot problematic content. Run this command on your site to obtain a list of files that will fail to compile under MDX v3."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"npx docusaurus-mdx-checker\n"})}),"\n",(0,i.jsx)(n.p,{children:"For each compilation issue, the CLI will log the file path and a line number to look at."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages",src:s(4923).Z+"",width:"1161",height:"417"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3."})}),"\n",(0,i.jsxs)(n.admonition,{type:"warning",children:[(0,i.jsxs)(n.p,{children:["This CLI is a best effort, and will ",(0,i.jsx)(n.strong,{children:"only report compilation errors"}),"."]}),(0,i.jsxs)(n.p,{children:["It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using ",(0,i.jsx)(n.a,{href:"/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing",children:"visual regression tests"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"common-mdx-problems",children:"Common MDX problems"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus cannot document exhaustively all the changes coming with MDX. That's the responsibility of the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v2/",children:"MDX v2"})," and ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/migrating/v3/",children:"MDX v3"})," migration guides."]}),"\n",(0,i.jsx)(n.p,{children:"However, by upgrading a few Docusaurus sites, we noticed that most of the issues come down to only a few cases that we have documented for you."}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of-",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"{"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#expressions",children:"JavaScript expressions"}),". MDX will now fail if what you put inside ",(0,i.jsx)(n.code,{children:"{expression}"})," is not a valid expression."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The object shape looks like {username: string, age: number}\n"})}),"\n",(0,i.jsx)(n.admonition,{title:"Error message",type:"danger",children:(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Could not parse expression with acorn: Unexpected content after expression"}),"\n"]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"{username: string, age: number}"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"{"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\{"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.h4,{id:"bad-usage-of--1",children:["Bad usage of ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"<"})," character is used for opening ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/docs/what-is-mdx/#jsx",children:"JSX tags"}),". MDX will now fail if it thinks your JSX is invalid."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:'Use Android version <5\n\nYou can use a generic type like Array<T>\n\nFollow the template "Road to <YOUR_MINOR_VERSION>"\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"5"})," (U+0035) before name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<T>"})," (1:6-1:9) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})," end-tag-mismatch mdast-util-mdx-jsx"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Expected a closing tag for ",(0,i.jsx)(n.code,{children:"<YOUR_MINOR_VERSION>"})," (134:19-134:39) before the end of ",(0,i.jsx)(n.code,{children:"paragraph"})]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Available options to fix this error:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use inline code: ",(0,i.jsx)(n.code,{children:"Array<T>"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:"<"})," or ",(0,i.jsx)(n.code,{children:"<"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\<"})]}),"\n"]})]}),"\n",(0,i.jsx)(n.h4,{id:"bad-usage-of-gfm-autolink",children:"Bad usage of GFM Autolink"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus supports ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/",children:"GitHub Flavored Markdown (GFM)"}),", but ",(0,i.jsx)(n.a,{href:"https://github.github.com/gfm/#autolinks",children:"autolink"})," using the ",(0,i.jsx)(n.code,{children:"<link>"})," syntax is not supported anymore by MDX."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<sebastien@thisweekinreact.com>\n\n<http://localhost:3000>\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Error messages",type:"danger",children:[(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"@"})," (U+0040) in name, expected a name character such as letters, digits, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"}),"; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:["Unexpected character ",(0,i.jsx)(n.code,{children:"/"})," (U+002F) before local name, expected a character that can start a name, such as a letter, ",(0,i.jsx)(n.code,{children:"$"}),", or ",(0,i.jsx)(n.code,{children:"_"})," (note: to create a link in MDX, use ",(0,i.jsx)(n.code,{children:"[text](url)"}),")"]}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Use regular Markdown links, or remove the ",(0,i.jsx)(n.code,{children:"<"})," and ",(0,i.jsx)(n.code,{children:">"}),". MDX and GFM are able to autolink literals already."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"sebastien@thisweekinreact.com\n[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)\n\nhttp://localhost:3000\n[http://localhost:3000](http://localhost:3000)\n"})})]}),"\n",(0,i.jsx)(n.h4,{id:"lower-case-mdxcomponent-mapping",children:"Lower-case MDXComponent mapping"}),"\n",(0,i.jsxs)(n.p,{children:["For users providing a ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:["custom ",(0,i.jsx)(n.code,{children:"MDXComponent"}),"mapping"]}),', components are now "sandboxed":']}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.code,{children:"MDXComponent"})," mapping for ",(0,i.jsx)(n.code,{children:"h1"})," only gets used for ",(0,i.jsx)(n.code,{children:"# hi"})," but not for ",(0,i.jsx)(n.code,{children:"<h1>hi</h1>"})]}),"\n",(0,i.jsxs)(n.li,{children:["a ",(0,i.jsx)(n.strong,{children:"lower-cased"})," custom element name will not be substituted by its respective ",(0,i.jsx)(n.code,{children:"MDXComponent"})," component anymore"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"visual difference",type:"danger",children:(0,i.jsxs)(n.p,{children:["Your ",(0,i.jsxs)(n.a,{href:"/docs/markdown-features/react#mdx-component-scope",children:[(0,i.jsx)(n.code,{children:"MDXComponent"})," component mapping"]})," might not be applied as before, and your custom components might no longer be used."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["For native Markdown elements, you can keep using ",(0,i.jsx)(n.strong,{children:"lower-case"}),": ",(0,i.jsx)(n.code,{children:"p"}),", ",(0,i.jsx)(n.code,{children:"h1"}),", ",(0,i.jsx)(n.code,{children:"img"}),", ",(0,i.jsx)(n.code,{children:"a"}),"..."]}),(0,i.jsxs)(n.p,{children:["For any other element, ",(0,i.jsx)(n.strong,{children:"use upper-case names"}),"."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/theme/MDXComponents.js"',children:' import MDXComponents from \'@theme-original/MDXComponents\';\n\n export default {\n ...MDXComponents,\n p: (props) => <p {...props} className="my-paragraph"/>\n- myElement: (props) => <div {...props} className="my-class" />,\n+ MyElement: (props) => <div {...props} className="my-class" />,\n };\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-extra-paragraphs",children:"Unintended extra paragraphs"}),"\n",(0,i.jsxs)(n.p,{children:["In MDX v3, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected ",(0,i.jsx)(n.code,{children:"<p>"})," tags."]}),"\n",(0,i.jsxs)(n.admonition,{title:"visual difference",type:"danger",children:[(0,i.jsx)(n.p,{children:"See how this content is rendered differently by MDX v1 and v3."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"<div>Some **Markdown** content</div>\n<div>\n Some **Markdown** content\n</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v1 output"',children:"<div>Some **Markdown** content</div>\n<div>Some **Markdown** content</div>\n"})}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",metastring:'title="MDX v3 output"',children:"<div>Some <strong>Markdown</strong> content</div>\n<div><p>Some <strong>Markdown</strong> content</p></div>\n"})})]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you don't want an extra ",(0,i.jsx)(n.code,{children:"<p>"})," tag, refactor content on a case by case basis to use a single-line JSX tag."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:' <figure>\n <img src="/img/myImage.png" alt="My alt" />\n- <figcaption>\n- My image caption\n- </figcaption>\n+ <figcaption>My image caption</figcaption>\n </figure>\n'})})]}),"\n",(0,i.jsx)(n.h4,{id:"unintended-usage-of-directives",children:"Unintended usage of directives"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),") as a generic way to provide support for admonitions, and other upcoming Docusaurus features."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"This is a :textDirective\n\n::leafDirective\n\n:::containerDirective\n\nContainer directive content\n\n:::\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"Visual change",type:"danger",children:[(0,i.jsx)(n.p,{children:"Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"The AWS re:Invent conf is great\n"})}),(0,i.jsxs)(n.p,{children:["Due to ",(0,i.jsx)(n.code,{children:":Invent"})," being parsed as a text directive, this will now be rendered as:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"The AWS re\nconf is great\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"How to upgrade",type:"tip",children:(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Use the HTML code: ",(0,i.jsx)(n.code,{children:":"})]}),"\n",(0,i.jsxs)(n.li,{children:["Add a space after ",(0,i.jsx)(n.code,{children:":"})," (if it makes sense): ",(0,i.jsx)(n.code,{children:": text"})]}),"\n",(0,i.jsxs)(n.li,{children:["Escape it: ",(0,i.jsx)(n.code,{children:"\\:"})]}),"\n"]})}),"\n",(0,i.jsx)(n.h4,{id:"unsupported-indented-code-blocks",children:"Unsupported indented code blocks"}),"\n",(0,i.jsx)(n.p,{children:"MDX does not transform indented text as code blocks anymore."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:' console.log("hello");\n'})}),"\n",(0,i.jsx)(n.admonition,{title:"Visual change",type:"danger",children:(0,i.jsx)(n.p,{children:"The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore."})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Use the regular code block syntax instead of indentation:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"```js\nconsole.log('hello');\n```\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"other-markdown-incompatibilities",children:"Other Markdown incompatibilities"}),"\n",(0,i.jsx)(n.h4,{id:"emphasis-starting-or-ending-with-a-space-or-a-punctuation",children:"Emphasis starting or ending with a space or a punctuation"}),"\n",(0,i.jsx)(n.p,{children:"New MDX parser now strictly complies with the CommonMark spec. CommonMark spec has introduced rules for emphasis around spaces and punctuation, which are incompatible especially with languages that do not use a space to split words, since v0.14."}),"\n",(0,i.jsx)(n.p,{children:"Japanese and Chinese are most affected by this, but there are some other languages that can be affected (e.g. Thai and Khmer), for example when you try to emphasize an inline code or a link. Languages that use a space to split words are much less affected."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"**"})," (other than ",(0,i.jsx)(n.code,{children:"`**`"}),") in the following example were parsed as intended in Docusaurus 2, but are not now in Docusaurus 3."]}),"\n","\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="example.md"',children:"**Do not end a range of emphasis with a space. **Or `**` will not work as intended.\n\n\x3c!-- Japanese --\x3e\n**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002**\u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)**\u3084**`\u30b3\u30fc\u30c9`**\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"See the detailed conditions and how to upgrade"}),(0,i.jsxs)(n.p,{children:["If ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the beginning of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The next character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word* word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The previous character is a punctuation character and the next character is a letter (not a space or punctuation character) (e.g. ",(0,i.jsx)(n.code,{children:"\u6587**\uff08\u6587\uff09"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["On the contrary, if ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"})," matches either of the following conditions, it will not work as the end of an emphasis mark anymore:"]}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The previous character is a space (e.g. ",(0,i.jsx)(n.code,{children:"word *word"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["The next character is a punctuation character and the previous character is a letter (e.g. ",(0,i.jsx)(n.code,{children:"\u6587\u3002**\u6587"}),")"]}),"\n"]}),(0,i.jsxs)(n.p,{children:["\u201cA punctuation character\u201d includes non-ASCII ones, brackets, quotation marks and some symbols including ",(0,i.jsx)(n.code,{children:"%"})," and ",(0,i.jsx)(n.code,{children:"@"}),". More strictly speaking, a character whose 2-letters Unicode category starts with ",(0,i.jsx)(n.code,{children:"P"})," is treated as a punctuation character here."]}),(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"If the offending emphasis mark is next to a space, move the space out of the range of emphasis:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="english.md"',children:"**Do not end a range of emphasis with a space.** Or `**` will not work.\n"})}),(0,i.jsx)(n.p,{children:"If the offending emphasis mark is surrounded by both a punctuation character and a letter, you can fix it without modifying the content by:"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Convert the document to MDX if it is a vanilla Markdown."}),"\n",(0,i.jsxs)(n.li,{children:["replace the offending emphasis mark with a raw HTML tag (",(0,i.jsx)(n.code,{children:"<em>"})," or ",(0,i.jsx)(n.code,{children:"<strong>"}),") instead:"]}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",metastring:'title="japanese.mdx"',children:"<strong>\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002</strong>\u307e\u305f\u3001<strong>[\u30ea\u30f3\u30af](https://docusaurus.io/)</strong>\u3084<strong>`\u30b3\u30fc\u30c9`</strong>\u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),(0,i.jsx)(n.p,{children:"While not an ideal solution, you can also either of the following without converting the document to MDX:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Move the most outside punctuation character out of the emphasis mark."}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093**\u3002\u307e\u305f\u3001[**\u30ea\u30f3\u30af**](https://docusaurus.io/)\u3084\u30fb\u30fb\u30fb\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Put a space just outside of the offending ",(0,i.jsx)(n.code,{children:"*"})," or ",(0,i.jsx)(n.code,{children:"**"}),". This solution does not force you to convert the document to MDX."]}),"\n","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",metastring:'title="japanese.md"',children:"**\u300c\u3002\u300d\u306e\u5f8c\u306b\u6587\u3092\u7d9a\u3051\u308b\u3068`**`\u304c\u610f\u56f3\u3057\u305f\u52d5\u4f5c\u3092\u3057\u307e\u305b\u3093\u3002** \u307e\u305f\u3001**[\u30ea\u30f3\u30af](https://docusaurus.io/)** \u3084 **`\u30b3\u30fc\u30c9`** \u306e\u3059\u3050\u5916\u5074\u306b`**`\u3001\u305d\u306e\u3055\u3089\u306b\u5916\u5074\u306b\u53e5\u8aad\u70b9\u4ee5\u5916\u304c\u3042\u308b\u5834\u5408\u3082\u540c\u69d8\u3067\u3059\u3002\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"mdx-plugins",children:"MDX plugins"}),"\n",(0,i.jsxs)(n.p,{children:["All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ",(0,i.jsx)(n.a,{href:"https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c",children:(0,i.jsx)(n.strong,{children:"ES Modules only"})})," and do not support ",(0,i.jsx)(n.a,{href:"https://nodejs.org/api/modules.html#modules-commonjs-modules",children:"CommonJS"})," anymore."]}),"\n",(0,i.jsxs)(n.p,{children:["In practice this means that you can't do ",(0,i.jsx)(n.code,{children:'require("remark-plugin")'})," anymore."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsxs)(n.p,{children:["Docusaurus v3 now supports ",(0,i.jsx)(n.a,{href:"https://flaviocopes.com/es-modules/",children:(0,i.jsx)(n.strong,{children:"ES Modules"})})," configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"import remarkPlugin from 'remark-plugin';\n\nexport default {\n title: 'Docusaurus',\n /* site config using remark plugins here */\n};\n"})}),(0,i.jsxs)(n.p,{children:["If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the ",(0,i.jsx)(n.a,{href:"/docs/configuration#syntax-to-declare-docusaurus-config",children:"Docusaurus config supports the usage of an async function"})," to let you do so."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"module.exports = async function () {\n const myPlugin = (await import('remark-plugin')).default;\n return {\n // site config...\n };\n};\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"For plugin authors",type:"info",children:(0,i.jsxs)(n.p,{children:["If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"dedicated support discussion"})," to help plugin authors upgrade their code."]})}),"\n",(0,i.jsx)(n.h3,{id:"formatters",children:"Formatters"}),"\n",(0,i.jsxs)(n.p,{children:["Prettier, the most common formatter, supports only the legacy MDX v1, not v3 yet as of Docusaurus v3.0.0. You can add ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," before the incompatible parts of your code to make it work with Prettier."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-mdx",children:"{/* prettier-ignore */}\n<SomeComponent>Some long text in the component</SomeComponent>\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you get tired of too many ",(0,i.jsx)(n.code,{children:"{/* prettier-ignore */}"})," insertions, you can consider disabling MDX formatting by Prettier by adding the following to your ",(0,i.jsx)(n.code,{children:".prettierignore"})," file, until it starts supporting MDX v3:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-txt",metastring:'title=".prettierignore"',children:"*.mdx\n"})}),"\n",(0,i.jsx)(n.h2,{id:"other-breaking-changes",children:"Other Breaking Changes"}),"\n",(0,i.jsx)(n.p,{children:"Apart the MDX v3 upgrade, here is an exhaustive list of breaking changes coming with Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"nodejs-v180",children:"Node.js v18.0"}),"\n",(0,i.jsxs)(n.p,{children:["Node.js 16 ",(0,i.jsx)(n.a,{href:"https://nodejs.org/en/blog/announcements/nodejs16-eol",children:"reached End-of-Life"}),", and Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"Node.js >= 18.0"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"tip",children:[(0,i.jsx)(n.p,{children:"Install Node.js 18.0+ on your computer."}),(0,i.jsx)(n.p,{children:"Eventually, configure your continuous integration, CDN or host to use this new Node.js version."}),(0,i.jsxs)(n.p,{children:["You can also update your site ",(0,i.jsx)(n.code,{children:"package.json"})," to prevent usage of an older unsupported version:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "engines": {\n- "node": ">=16.14"\n+ "node": ">=18.0"\n }\n }\n'})}),(0,i.jsx)(n.p,{children:"Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3."})]}),"\n",(0,i.jsx)(n.h3,{id:"react-v180",children:"React v18.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"React >= 18.0"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site. The official themes and plugins are compatible with React 18."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Read the official ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/29/react-v18",children:"React v18.0"})," and ",(0,i.jsx)(n.a,{href:"https://react.dev/blog/2022/03/08/react-18-upgrade-guide",children:"How to Upgrade to React 18"}),", and look at your own React code to figure out which components might be affected this upgrade."]}),(0,i.jsx)(n.p,{children:"We recommend to particularly look for:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Automatic batching for stateful components"}),"\n",(0,i.jsx)(n.li,{children:"New React hydration errors reported to the console"}),"\n"]})]}),"\n",(0,i.jsxs)(n.admonition,{title:"Experimental support for React 18 features",type:"danger",children:[(0,i.jsx)(n.p,{children:"React 18 comes with new features:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"<Suspense>"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"React.lazy()"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"startTransition"})}),"\n"]}),(0,i.jsx)(n.p,{children:"Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior."})]}),"\n",(0,i.jsx)(n.h3,{id:"prism-react-renderer-v20",children:"Prism-React-Renderer v2.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer",children:(0,i.jsx)(n.code,{children:"prism-react-renderer"})})," to v2.0+. This library is used for code block syntax highlighting."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["This is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. The ",(0,i.jsxs)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/releases/tag/prism-react-renderer%402.0.0",children:[(0,i.jsx)(n.code,{children:"prism-react-renderer"})," v2 release notes"]})," are not super exhaustive, but there are 3 major changes to be aware of for Docusaurus users."]}),(0,i.jsx)(n.p,{children:"The dependency should be upgraded:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "dependencies": {\n- "prism-react-renderer": "^1.3.5",\n+ "prism-react-renderer": "^2.1.0",\n }\n'})}),(0,i.jsx)(n.p,{children:"The API to import themes in your Docusaurus config file has been updated:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="docusaurus.config.js"',children:"- const lightTheme = require('prism-react-renderer/themes/github');\n- const darkTheme = require('prism-react-renderer/themes/dracula');\n+ const {themes} = require('prism-react-renderer');\n+ const lightTheme = themes.github;\n+ const darkTheme = themes.dracula;\n"})}),(0,i.jsxs)(n.p,{children:["Previously, ",(0,i.jsx)(n.code,{children:"react-prism-render"})," v1 ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/v1.3.5/src/vendor/prism/includeLangs.js",children:"included more languages by default"}),". From v2.0+, ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/prism-react-renderer/blob/prism-react-renderer%402.1.0/packages/generate-prism-languages/index.ts#L9",children:"less languages are included by default"}),". You may need to add extra languages to your Docusaurus config:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const siteConfig = {\n themeConfig: {\n prism: {\n // highlight-next-line\n additionalLanguages: ['bash', 'diff', 'json'],\n },\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"react-live-v40",children:"React-Live v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-live-codeblock"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live",children:(0,i.jsx)(n.code,{children:"react-live"})})," to v4.0+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing interactive code blocks should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v3.0.0",children:"v3"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/FormidableLabs/react-live/releases/tag/v4.0.0",children:"v4"})," changelogs in case of problems."]})]}),"\n",(0,i.jsx)(n.h3,{id:"remark-emoji-v40",children:"remark-emoji v4.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji",children:(0,i.jsx)(n.code,{children:"remark-emoji"})})," to v4.0+. This library is to support ",(0,i.jsx)(n.code,{children:":emoji:"})," shortcuts in Markdown."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["Most Docusaurus users have nothing to do. Users of emoji shortcodes should read the ",(0,i.jsx)(n.a,{href:"https://github.com/rhysd/remark-emoji/blob/master/CHANGELOG.md",children:"changelog"})," and double-check their emojis keep rendering as expected."]}),(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Breaking Change"})," Update ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/node-emoji",children:"node-emoji"})," from v1 to v2. This change introduces support for many new emojis and removes old emoji short codes which are no longer valid on GitHub."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h3,{id:"mermaid-v104",children:"Mermaid v10.4+"}),"\n",(0,i.jsxs)(n.p,{children:["For users of the ",(0,i.jsx)(n.code,{children:"@docusaurus/theme-mermaid"})," package, Docusaurus v3 upgrades ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid",children:(0,i.jsx)(n.code,{children:"mermaid"})})," to v10.4+."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing diagrams should keep working as before."}),(0,i.jsxs)(n.p,{children:["However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the ",(0,i.jsx)(n.a,{href:"https://github.com/mermaid-js/mermaid/releases/tag/v10.0.0",children:"v10"})," changelog in case of problem."]})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-v50",children:"TypeScript v5.0+"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now requires ",(0,i.jsx)(n.strong,{children:"TypeScript >= 5.0"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Upgrade your dependencies to use TypeScript 5+"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "typescript": "~4.7.4"\n+ "typescript": "~5.2.2"\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"typescript-base-config",children:"TypeScript base config"}),"\n",(0,i.jsxs)(n.p,{children:["The official Docusaurus TypeScript config has been re-internalized from the external package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@tsconfig/docusaurus",children:(0,i.jsx)(n.code,{children:"@tsconfig/docusaurus"})})," to our new monorepo package ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/@docusaurus/tsconfig",children:(0,i.jsx)(n.code,{children:"@docusaurus/tsconfig"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:"This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades."}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Swap the external TypeScript config package for the new official one"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="package.json"',children:' {\n "devDependencies": {\n- "@tsconfig/docusaurus": "^1.0.7",\n+ "@docusaurus/tsconfig": "3.0.0",\n }\n }\n'})}),(0,i.jsxs)(n.p,{children:["Use it in your ",(0,i.jsx)(n.code,{children:"tsconfig.json"})," file:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="tsconfig.json"',children:' {\n- "extends": "@tsconfig/docusaurus/tsconfig.json",\n+ "extends": "@docusaurus/tsconfig",\n "compilerOptions": {\n "baseUrl": "."\n }\n }\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"new-config-loader",children:"New Config Loader"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 changes its internal config loading library from ",(0,i.jsx)(n.a,{href:"https://github.com/sindresorhus/import-fresh",children:(0,i.jsx)(n.code,{children:"import-fresh"})})," to ",(0,i.jsx)(n.a,{href:"https://github.com/unjs/jiti",children:(0,i.jsx)(n.code,{children:"jiti"})}),". It is responsible for loading files such as ",(0,i.jsx)(n.code,{children:"docusaurus.config.js"})," or ",(0,i.jsx)(n.code,{children:"sidebars.js"}),", and Docusaurus plugins."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"In theory, you have nothing to do, and your existing config files should keep working as before."}),(0,i.jsx)(n.p,{children:"However, this is a major dependency swap and subtle behavior changes could occur."})]}),"\n",(0,i.jsx)(n.h3,{id:"admonition-warning",children:"Admonition Warning"}),"\n",(0,i.jsxs)(n.p,{children:["For historical reasons, we support an undocumented admonition ",(0,i.jsx)(n.code,{children:":::warning"})," that renders with a red color."]}),"\n",(0,i.jsx)(n.admonition,{title:"Warning",type:"danger",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v2 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.p,{children:["However, the color and icon have always been wrong. Docusaurus v3 re-introduces ",(0,i.jsx)(n.code,{children:":::warning"})," admonition officially, documents it, and fix the color and icon."]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["This is a Docusaurus v3 ",(0,i.jsx)(n.code,{children:":::warning"})," admonition."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:["If you previously used the undocumented ",(0,i.jsx)(n.code,{children:":::warning"})," admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use ",(0,i.jsx)(n.code,{children:":::danger"})," instead."]}),(0,i.jsxs)(n.p,{children:["Docusaurus v3 also ",(0,i.jsxs)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9308",children:["deprecated the ",(0,i.jsx)(n.code,{children:":::caution"})]})," admonition. Please refactor ",(0,i.jsx)(n.code,{children:":::caution"})," (yellow) to either ",(0,i.jsx)(n.code,{children:":::warning"})," (yellow) or ",(0,i.jsx)(n.code,{children:":::danger"})," (red)."]}),(0,i.jsxs)(n.p,{children:["If you want to keep the title \u201ccaution\u201d, you might want to refactor it to ",(0,i.jsx)(n.code,{children:":::warning[caution]"})," (yellow)."]})]}),"\n",(0,i.jsx)(n.h3,{id:"versioned-sidebars",children:"Versioned Sidebars"}),"\n",(0,i.jsxs)(n.p,{children:["This breaking change will only affect ",(0,i.jsx)(n.strong,{children:"Docusaurus v2 early adopters"})," who versioned their docs before ",(0,i.jsx)(n.code,{children:"v2.0.0-beta.10"})," (December 2021)."]}),"\n",(0,i.jsxs)(n.p,{children:["When creating version ",(0,i.jsx)(n.code,{children:"v1.0.0"}),", the sidebar file contained a prefix ",(0,i.jsx)(n.code,{children:"version-v1.0.0/"})," that ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/9310",children:"Docusaurus v3 does not support anymore"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "version-v1.0.0/docs": [\n "version-v1.0.0/introduction",\n "version-v1.0.0/prerequisites"\n ]\n}\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Remove the useless versioned prefix from your versioned sidebars."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="versioned_sidebars/version-v1.0.0-sidebars.json"',children:'{\n "docs": ["introduction", "prerequisites"]\n}\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"blog-feed-limit",children:"Blog Feed Limit"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"@docusaurus/plugin-content-blog"})," now limits the RSS feed to the last 20 entries by default. For large Docusaurus blogs, this is a more sensible default value to avoid an increasingly large RSS file."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsxs)(n.p,{children:['In case you don\'t like this new default behavior, you can revert to the former "unlimited feed" behavior with the new ',(0,i.jsx)(n.code,{children:"limit: false"})," feed option:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"const blogOptions = {\n feedOptions: {\n // highlight-next-line\n limit: false,\n },\n};\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"docs-theme-refactoring",children:"Docs Theme Refactoring"}),"\n",(0,i.jsxs)(n.p,{children:["For users that swizzled docs-related theme components (like ",(0,i.jsx)(n.code,{children:"@theme/DocPage"}),"), these components have been significantly refactor to make it easier to customize."]}),"\n",(0,i.jsxs)(n.p,{children:["Technically, ",(0,i.jsx)(n.strong,{children:"this is not a breaking change"})," because these components are ",(0,i.jsx)(n.strong,{children:"flagged as unsafe to swizzle"}),", however many Docusaurus sites ejected docs-related components, and will be interested to know their customizations might break Docusaurus."]}),"\n",(0,i.jsxs)(n.admonition,{title:"How to upgrade",type:"info",children:[(0,i.jsx)(n.p,{children:"Delete all your swizzled components, re-swizzle them, and re-apply your customizations on top of the newly updated components."}),(0,i.jsxs)(n.p,{children:["Alternatively, you can look at the ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/7966",children:"pull-request notes"})," to understand the new theme component tree structure, and eventually try to patch your swizzled components manually."]})]}),"\n",(0,i.jsx)(n.h2,{id:"optional-changes",children:"Optional Changes"}),"\n",(0,i.jsx)(n.p,{children:"Some changes are not mandatory, but remain useful to be aware of to plainly leverage Docusaurus v3."}),"\n",(0,i.jsx)(n.h3,{id:"automatic-jsx-runtime",children:"Automatic JSX runtime"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 now uses the React 18 ",(0,i.jsx)(n.a,{href:"https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html",children:'"automatic" JSX runtime'}),"."]}),"\n",(0,i.jsx)(n.p,{children:"It is not needed anymore to import React in JSX files that do not use any React API."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:'title="src/components/MyComponent.js"',children:"- import React from 'react';\n\n export default function MyComponent() {\n return <div>Hello</div>;\n }\n"})}),"\n",(0,i.jsx)(n.h3,{id:"esm-and-typescript-configs",children:"ESM and TypeScript Configs"}),"\n",(0,i.jsx)(n.p,{children:"Docusaurus v3 supports ESM and TypeScript config files, and it might be a good idea to adopt those new options."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n title: 'Docusaurus',\n url: 'https://docusaurus.io',\n // your site config ...\n};\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ts",metastring:'title="docusaurus.config.ts"',children:"import type {Config} from '@docusaurus/types';\nimport type * as Preset from '@docusaurus/preset-classic';\n\nconst config: Config = {\n title: 'My Site',\n favicon: 'img/favicon.ico',\n presets: [\n [\n 'classic',\n {\n /* Your preset config here */\n } satisfies Preset.Options,\n ],\n ],\n\n themeConfig: {\n /* Your theme config here */\n } satisfies Preset.ThemeConfig,\n};\n\nexport default config;\n"})}),"\n",(0,i.jsxs)(n.h3,{id:"using-the-mdx-extension",children:["Using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension"]}),"\n",(0,i.jsxs)(n.p,{children:["We recommend using the ",(0,i.jsx)(n.code,{children:".mdx"})," extension whenever you use JSX, ",(0,i.jsx)(n.code,{children:"import"}),", or ",(0,i.jsx)(n.code,{children:"export"})," (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.)."]}),"\n",(0,i.jsxs)(n.p,{children:["In future versions of Docusaurus, ",(0,i.jsx)(n.code,{children:".md"})," files will be parsed as standard ",(0,i.jsx)(n.a,{href:"https://commonmark.org/",children:"CommonMark"}),", which does not support these features. In Docusaurus v3, ",(0,i.jsx)(n.code,{children:".md"})," files keep being compiled as MDX files, but it will be possible to ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3018",children:"opt-in for CommonMark"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"upgrading-math-packages",children:"Upgrading math packages"}),"\n",(0,i.jsxs)(n.p,{children:["If you use Docusaurus to render ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/math-equations",children:"Math Equations"}),", you should upgrade the MDX plugins."]}),"\n",(0,i.jsxs)(n.p,{children:["Make sure to use ",(0,i.jsx)(n.code,{children:"remark-math 6"})," and ",(0,i.jsx)(n.code,{children:"rehype-katex 7"})," for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",metastring:"package.json",children:'{\n- "remark-math": "^3.0.0",\n+ "remark-math": "^6.0.0",\n- "rehype-katex": "^5.0.0"\n+ "rehype-katex": "^7.0.0"\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"turn-off-mdx-v1-compat",children:"Turn off MDX v1 compat"}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus v3 comes with ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#markdown",children:"MDX v1 compatibility options"}),", that are turned on by default."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n markdown: {\n mdx1Compat: {\n comments: true,\n admonitions: true,\n headingIds: true,\n },\n },\n};\n"})}),"\n",(0,i.jsxs)(n.h4,{id:"comments-option",children:[(0,i.jsx)(n.code,{children:"comments"})," option"]}),"\n",(0,i.jsx)(n.p,{children:"This option allows the usage of HTML comments inside MDX, while HTML comments are officially not supported anymore."}),"\n",(0,i.jsxs)(n.p,{children:["For MDX files, we recommend to progressively use MDX ",(0,i.jsx)(n.code,{children:"{/* comments */}"})," instead of HTML ",(0,i.jsx)(n.code,{children:"\x3c!-- comments --\x3e"}),", and then turn this compatibility option off."]}),"\n",(0,i.jsx)(n.admonition,{title:"Blog truncate marker",type:"info",children:(0,i.jsxs)(n.p,{children:["The default blog truncate marker now supports both ",(0,i.jsx)(n.code,{children:"\x3c!-- truncate --\x3e"})," and ",(0,i.jsx)(n.code,{children:"{/* truncate */}"}),"."]})}),"\n",(0,i.jsxs)(n.h4,{id:"admonitions-option",children:[(0,i.jsx)(n.code,{children:"admonitions"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/admonitions#specifying-title",children:"admonition title"})," syntax:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note\xa0Your Title\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Docusaurus now implements admonitions with ",(0,i.jsx)(n.a,{href:"https://talk.commonmark.org/t/generic-directives-plugins-syntax/444",children:"Markdown Directives"})," (implemented with ",(0,i.jsx)(n.a,{href:"https://github.com/remarkjs/remark-directive",children:"remark-directive"}),"), and the syntax to provide a directive label requires square brackets:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-md",children:":::note[Your Title]\n\ncontent\n\n:::\n"})}),"\n",(0,i.jsx)(n.p,{children:"We recommend to progressively use the new Markdown directive label syntax, and then turn this compatibility option off."}),"\n",(0,i.jsxs)(n.h4,{id:"headingids-option",children:[(0,i.jsx)(n.code,{children:"headingIds"})," option"]}),"\n",(0,i.jsxs)(n.p,{children:["This option allows the usage of the Docusaurus v2 ",(0,i.jsx)(n.a,{href:"/docs/markdown-features/toc#heading-ids",children:"explicit heading id"})," syntax:"]}),"\n",(0,i.jsx)(o,{language:"md",children:"### Hello World {#my-explicit-id}\n"}),"\n",(0,i.jsxs)(n.p,{children:["This syntax is now invalid MDX, and would require to escape the ",(0,i.jsx)(n.code,{children:"{"})," character: ",(0,i.jsx)(n.code,{children:"\\{#my-explicit-id}"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"We recommend to keep this compatibility option on for now, until we provide a new syntax compatible with newer versions of MDX."}),"\n",(0,i.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsx)(n.p,{children:"In case of any upgrade problem, the first things to try are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["make sure all your docs compile in the ",(0,i.jsx)(n.a,{href:"https://mdxjs.com/playground/",children:"MDX playground"}),", or using ",(0,i.jsx)(n.a,{href:"https://github.com/slorber/docusaurus-mdx-checker",children:(0,i.jsx)(n.code,{children:"npx docusaurus-mdx-checker"})})]}),"\n",(0,i.jsxs)(n.li,{children:["delete ",(0,i.jsx)(n.code,{children:"node_modules"})," and ",(0,i.jsx)(n.code,{children:"package-lock.json"}),", and then run ",(0,i.jsx)(n.code,{children:"npm install"})," again"]}),"\n",(0,i.jsxs)(n.li,{children:["run ",(0,i.jsx)(n.code,{children:"docusaurus clear"})," to clear the caches"]}),"\n",(0,i.jsx)(n.li,{children:"remove third-party plugins that might not support Docusaurus v3"}),"\n",(0,i.jsx)(n.li,{children:"delete all your swizzled components"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Once you have tried that, you can ask for support through the following support channels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9336",children:"Docusaurus v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1154771869094912090",children:"Docusaurus v3 - Discord channel #migration-v2-to-v3"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9053",children:"MDX v3 - Upgrade Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9337",children:"MDX v3 - Remark/Rehype Plugins Support"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://discord.com/channels/398180168688074762/1116724556976111616",children:"MDX v3 - Discord channel #migration-mdx-v3"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Please consider ",(0,i.jsx)(n.strong,{children:"our time is precious"}),". To ensure that your support request is not ignored, we kindly ask you to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["provide a ",(0,i.jsx)(n.strong,{children:"minimal"})," reproduction that we can easily run, ideally created with ",(0,i.jsx)(n.a,{href:"https://docusaurus.new",children:"docusaurus.new"})]}),"\n",(0,i.jsx)(n.li,{children:"provide a live deployment url showing the problem in action (if your site can build)"}),"\n",(0,i.jsx)(n.li,{children:'explain clearly the problem, much more than an ambiguous "it doesn\'t work"'}),"\n",(0,i.jsx)(n.li,{children:"include as much relevant material as possible: code snippets, repo url, git branch urls, full stack traces, screenshots and videos"}),"\n",(0,i.jsx)(n.li,{children:"present your request clearly, concisely, showing us that you have made an effort to help us help you"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively, you can look for a paid ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9281",children:"Docusaurus Service Provider"})," to execute this upgrade for you. If your site is open source, you can also ask our community for ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/9283",children:"free, benevolent help"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}function u(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(27378);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/828be2eb.c823b395.js b/assets/js/828be2eb.c823b395.js new file mode 100644 index 0000000000..2981ba92b9 --- /dev/null +++ b/assets/js/828be2eb.c823b395.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36523],{61132:(e,n,s)=>{s.d(n,{Z:()=>o});var t=s(24246),i=(s(27378),s(40624));const r={tabItem:"tabItem_pnkT"};function o({children:e,hidden:n,className:s}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,s),hidden:n,children:e})}},97555:(e,n,s)=>{s.d(n,{Z:()=>S});var t=s(24246),i=s(27378),r=s(40624),o=s(75527),a=s(3620),c=s(44479),l=s(62821),u=s(52196),d=s(53589);function h(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function m(e){var n,s;return null!==(s=null===(n=i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==s?s:[]}function g(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:s,default:t}})=>({value:e,label:n,attributes:s,default:t})))}(s);return function(e){const n=(0,u.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function b({value:e,tabValues:n}){return n.some((n=>n.value===e))}function j({queryString:e=!1,groupId:n}){const s=(0,a.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),r=(0,l._X)(t),o=(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(s.location.search);n.set(t,e),s.replace(p(function(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){h(e,n,s[n])}))}return e}({},s.location),{search:n.toString()}))}),[t,s]);return[r,o]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,r=g(e),[o,a]=(0,i.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!b({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var s;const t=null!==(s=n.find((e=>e.default)))&&void 0!==s?s:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[l,u]=j({queryString:s,groupId:t}),[h,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,d.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=l?l:h;return b({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{m&&a(m)}),[m]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var v=s(29088);const x={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function y(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function w(e){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},t=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(s).filter((function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable})))),t.forEach((function(n){y(e,n,s[n])}))}return e}function O(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}(Object(n)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(n,s))})),e}function P({className:e,block:n,selectedValue:s,selectValue:i,tabValues:a}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.o5)(),u=e=>{const n=e.currentTarget,t=c.indexOf(n),r=a[t].value;r!==s&&(l(n),i(r))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var s;n=null!==(s=c[t])&&void 0!==s?s:c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;var t;n=null!==(t=c[s])&&void 0!==t?t:c[c.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:i})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},i),{className:(0,r.Z)("tabs__item",x.tabItem,null==i?void 0:i.className,{"tabs__item--active":s===e}),children:null!=n?n:e}),e)))})}function D({lazy:e,children:n,selectedValue:s}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function I(e){const n=f(e);return(0,t.jsxs)("div",{className:(0,r.Z)("tabs-container",x.tabList),children:[(0,t.jsx)(P,w({},e,n)),(0,t.jsx)(D,w({},e,n))]})}function S(e){const n=(0,v.Z)();return(0,t.jsx)(I,O(w({},e),{children:m(e.children)}),String(n))}},92726:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var t=s(24246),i=s(71670),r=s(97555),o=s(61132);const a={id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},c="Docs Multi-instance",l={id:"guides/docs/multi-instance",title:"Docs Multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",source:"@site/docs/guides/docs/docs-multi-instance.mdx",sourceDirName:"guides/docs",slug:"/docs-multi-instance",permalink:"/docs/docs-multi-instance",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/guides/docs/docs-multi-instance.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,frontMatter:{id:"multi-instance",description:"Use multiple docs plugin instances on a single Docusaurus site.",slug:"/docs-multi-instance"},sidebar:"docs",previous:{title:"Versioning",permalink:"/docs/versioning"},next:{title:"Blog",permalink:"/docs/blog"}},u={},d=[{value:"Use-cases",id:"use-cases",level:2},{value:"Mobile SDKs documentation",id:"mobile-sdks-documentation",level:3},{value:"Versioned and unversioned doc",id:"versioned-and-unversioned-doc",level:3},{value:"Setup",id:"setup",level:2},{value:"Versioned paths",id:"versioned-paths",level:2},{value:"Tagging new versions",id:"tagging-new-versions",level:2},{value:"Docs navbar items",id:"docs-navbar-items",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"docs-multi-instance",children:"Docs Multi-instance"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"@docusaurus/plugin-content-docs"})," plugin can support ",(0,t.jsx)(n.a,{href:"/docs/using-plugins#multi-instance-plugins-and-plugin-ids",children:"multi-instance"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This feature is only useful for ",(0,t.jsx)(n.a,{href:"/docs/versioning",children:"versioned documentation"}),". It is recommended to be familiar with docs versioning before reading this page. If you just want ",(0,t.jsx)(n.a,{href:"/docs/sidebar/multiple-sidebars",children:"multiple sidebars"}),", you can do so within one plugin."]})}),"\n",(0,t.jsx)(n.h2,{id:"use-cases",children:"Use-cases"}),"\n",(0,t.jsx)(n.p,{children:"Sometimes you want a Docusaurus site to host 2 distinct sets of documentation (or more)."}),"\n",(0,t.jsx)(n.p,{children:"These documentations may even have different versioning/release lifecycles."}),"\n",(0,t.jsx)(n.h3,{id:"mobile-sdks-documentation",children:"Mobile SDKs documentation"}),"\n",(0,t.jsx)(n.p,{children:"If you build a cross-platform mobile SDK, you may have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Android SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v1.1"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["iOS SDK documentation (",(0,t.jsx)(n.code,{children:"v1.0"}),", ",(0,t.jsx)(n.code,{children:"v2.0"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you can use a distinct docs plugin instance per mobile SDK documentation."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:"If each documentation instance is very large, you should rather create 2 distinct Docusaurus sites."}),(0,t.jsx)(n.p,{children:"If someone edits the iOS documentation, is it really useful to rebuild everything, including the whole Android documentation that did not change?"})]}),"\n",(0,t.jsx)(n.h3,{id:"versioned-and-unversioned-doc",children:"Versioned and unversioned doc"}),"\n",(0,t.jsx)(n.p,{children:'Sometimes, you want some documents to be versioned, while other documents are more "global", and it feels useless to version them.'}),"\n",(0,t.jsx)(n.p,{children:"We use this pattern on the Docusaurus website itself:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/docs",children:"/docs/*"})," section is versioned"]}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.a,{href:"/community/support",children:"/community/*"})," section is unversioned"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"Setup"}),"\n",(0,t.jsx)(n.p,{children:"Suppose you have 2 documentations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Product: some versioned doc about your product"}),"\n",(0,t.jsx)(n.li,{children:"Community: some unversioned doc about the community around your product"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"In this case, you should use the same plugin twice in your site configuration."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/preset-classic"})," already includes a docs plugin instance for you!"]})}),"\n",(0,t.jsx)(n.p,{children:"When using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n presets: [\n [\n '@docusaurus/preset-classic',\n {\n docs: {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n },\n ],\n ],\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"When not using the preset:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: [\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n // id: 'product', // omitted => default instance\n // highlight-end\n path: 'product',\n routeBasePath: 'product',\n sidebarPath: './sidebarsProduct.js',\n // ... other options\n },\n ],\n [\n '@docusaurus/plugin-content-docs',\n {\n // highlight-start\n id: 'community',\n // highlight-end\n path: 'community',\n routeBasePath: 'community',\n sidebarPath: './sidebarsCommunity.js',\n // ... other options\n },\n ],\n ],\n};\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Don't forget to assign a unique ",(0,t.jsx)(n.code,{children:"id"})," attribute to plugin instances."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["We consider that the ",(0,t.jsx)(n.code,{children:"product"}),' instance is the most important one, and make it the "default" instance by not assigning any ID.']})}),"\n",(0,t.jsx)(n.h2,{id:"versioned-paths",children:"Versioned paths"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will store versioned docs in a distinct folder."}),"\n",(0,t.jsx)(n.p,{children:"The default plugin instance will use these paths:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The other plugin instances (with an ",(0,t.jsx)(n.code,{children:"id"})," attribute) will use these paths:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versions.json"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_docs"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"website/[pluginId]_versioned_sidebars"})}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can omit the ",(0,t.jsx)(n.code,{children:"id"})," attribute (defaults to ",(0,t.jsx)(n.code,{children:"default"}),") for one of the docs plugin instances."]}),(0,t.jsx)(n.p,{children:"The instance paths will be simpler, and retro-compatible with a single-instance setup."})]}),"\n",(0,t.jsx)(n.h2,{id:"tagging-new-versions",children:"Tagging new versions"}),"\n",(0,t.jsx)(n.p,{children:"Each plugin instance will have its own CLI command to tag a new version. They will be displayed if you run:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus -- --help\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus --help\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus --help\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the product/default docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.p,{children:"To version the non-default/community docs plugin instance:"}),"\n",(0,t.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(o.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn docusaurus docs:version:community 1.0.0\n"})})}),(0,t.jsx)(o.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run docusaurus docs:version:community 1.0.0\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"docs-navbar-items",children:"Docs navbar items"}),"\n",(0,t.jsxs)(n.p,{children:["Each docs-related ",(0,t.jsx)(n.a,{href:"/docs/api/themes/configuration#navbar",children:"theme navbar items"})," take an optional ",(0,t.jsx)(n.code,{children:"docsPluginId"})," attribute."]}),"\n",(0,t.jsx)(n.p,{children:"For example, if you want to have one version dropdown for each mobile SDK (iOS and Android), you could do:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n themeConfig: {\n navbar: {\n items: [\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'ios',\n // highlight-end\n },\n {\n type: 'docsVersionDropdown',\n // highlight-start\n docsPluginId: 'android',\n // highlight-end\n },\n ],\n },\n },\n};\n"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/82de272a.53c3ef22.js b/assets/js/82de272a.53c3ef22.js new file mode 100644 index 0000000000..4bdd3b8176 --- /dev/null +++ b/assets/js/82de272a.53c3ef22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[50298],{41192:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var o=s(24246),n=s(71670);const c={},r="No sub-docs",i={id:"tests/category-links/no-subdoc/index",title:"No sub-docs",description:"The only doc of this category is the index page. It should show up as a regular doc link.",source:"@site/_dogfooding/_docs tests/tests/category-links/no-subdoc/index.mdx",sourceDirName:"tests/category-links/no-subdoc",slug:"/tests/category-links/no-subdoc/",permalink:"/tests/docs/tests/category-links/no-subdoc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/no-index-doc/sample-doc"},next:{title:"Readme",permalink:"/tests/docs/tests/category-links/"}},a={},d=[];function u(e){const t={h1:"h1",p:"p",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"no-sub-docs",children:"No sub-docs"}),"\n",(0,o.jsx)(t.p,{children:"The only doc of this category is the index page. It should show up as a regular doc link."})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>r});var o=s(27378);const n={},c=o.createContext(n);function r(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/83808d4b.a00b28e8.js b/assets/js/83808d4b.a00b28e8.js new file mode 100644 index 0000000000..89a236aa41 --- /dev/null +++ b/assets/js/83808d4b.a00b28e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[74799],{41060:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>h,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>o});var s=t(24246),a=t(71670);const l={mdx:{format:"md"},date:"2020-02-18T20:00",authors:["lex111","yangshun"]},h="2.0.0-alpha.43",i={permalink:"/changelog/2.0.0-alpha.43",source:"@site/changelog/source/2.0.0-alpha.43.md",title:"2.0.0-alpha.43",description:"HOTFIX for 2.0.0-alpha.41.",date:"2020-02-18T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2020-02-18T20:00",authors:["lex111","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.44",permalink:"/changelog/2.0.0-alpha.44"},nextItem:{title:"2.0.0-alpha.41",permalink:"/changelog/2.0.0-alpha.41"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[void 0,void 0]},o=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"Committers: 2",id:"committers-2",level:2}];function c(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"HOTFIX for 2.0.0-alpha.41"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2292",children:"#2292"})," chore(v2): update Infima to 0.2.0-alpha.4 (",(0,s.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2291",children:"#2291"})," fix(v2): fix build and deps install (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"committers-2",children:"Committers: 2"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Alexey Pyltsyn (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Yangshun Tay (",(0,s.jsx)(n.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>h});var s=t(27378);const a={},l=s.createContext(a);function h(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:h(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/83893.5719dd12.js b/assets/js/83893.5719dd12.js new file mode 100644 index 0000000000..9789fcc463 --- /dev/null +++ b/assets/js/83893.5719dd12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83893],{83893:(e,t,s)=>{s.d(t,{diagram:()=>N});var o=s(33426),i=s(88472),a=s(63294),r=s(99854),n=s(30198);s(27693),s(7608),s(31699),s(9500),s(76576);const d="rect",l="rectWithTitle",c="statediagram",p=`${c}-state`,b="transition",g=`${b} note-edge`,h=`${c}-note`,u=`${c}-cluster`,y=`${c}-cluster-alt`,f="parent",w="note",x="----",$=`${x}${w}`,m=`${x}${f}`,T="fill:none",S="fill: #333",k="text",D="normal";let A={},v=0;function B(e="",t=0,s="",o=x){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const C=(e,t,s,i,a,n)=>{const c=s.id,b=null==(x=i[c])?"":x.classes?x.classes.join(" "):"";var x;if("root"!==c){let t=d;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.D&&(t=s.type),A[c]||(A[c]={id:c,shape:t,description:r.e.sanitizeText(c,(0,r.c)()),classes:`${b} ${p}`});const i=A[c];s.description&&(Array.isArray(i.description)?(i.shape=l,i.description.push(s.description)):i.description.length>0?(i.shape=l,i.description===c?i.description=[s.description]:i.description=[i.description,s.description]):(i.shape=d,i.description=s.description),i.description=r.e.sanitizeTextOrArray(i.description,(0,r.c)())),1===i.description.length&&i.shape===l&&(i.shape=d),!i.type&&s.doc&&(r.l.info("Setting cluster for ",c,R(s)),i.type="group",i.dir=R(s),i.shape=s.type===o.a?"divider":"roundedWithTitle",i.classes=i.classes+" "+u+" "+(n?y:""));const a={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:c,dir:i.dir,domId:B(c,v),type:i.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:h,style:"",id:c+$+"-"+v,domId:B(c,v,w),type:i.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:i.classes,style:"",id:c+m,domId:B(c,v,f),type:"group",padding:0};v++;const r=c+m;e.setNode(r,o),e.setNode(t.id,t),e.setNode(c,a),e.setParent(c,r),e.setParent(t.id,r);let n=c,d=t.id;"left of"===s.note.position&&(n=t.id,d=c),e.setEdge(n,d,{arrowhead:"none",arrowType:"",style:T,labelStyle:"",classes:g,arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D})}else e.setNode(c,a)}t&&"root"!==t.id&&(r.l.trace("Setting node ",c," to be child of its parent ",t.id),e.setParent(c,t.id)),s.doc&&(r.l.trace("Adding nodes children "),E(e,s,s.doc,i,a,!n))},E=(e,t,s,i,a,n)=>{r.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.b:case o.D:C(e,t,s,i,a,n);break;case o.S:{C(e,t,s.state1,i,a,n),C(e,t,s.state2,i,a,n);const o={id:"edge"+v,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:T,labelStyle:"",label:r.e.sanitizeText(s.description,(0,r.c)()),arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D,classes:b};e.setEdge(s.state1.id,s.state2.id,o,v),v++}}}))},R=(e,t=o.c)=>{let s=t;if(e.doc)for(let o=0;o<e.doc.length;o++){const t=e.doc[o];"dir"===t.stmt&&(s=t.value)}return s},V={setConf:function(e){const t=Object.keys(e);for(const s of t)e[s]},getClasses:function(e,t){return t.db.extract(t.db.getRootDocV2()),t.db.getClasses()},draw:async function(e,t,s,o){r.l.info("Drawing state diagram (v2)",t),A={},o.db.getDirection();const{securityLevel:l,state:p}=(0,r.c)(),b=p.nodeSpacing||50,g=p.rankSpacing||50;r.l.info(o.db.getRootDocV2()),o.db.extract(o.db.getRootDocV2()),r.l.info(o.db.getRootDocV2());const h=o.db.getStates(),u=new i.k({multigraph:!0,compound:!0}).setGraph({rankdir:R(o.db.getRootDocV2()),nodesep:b,ranksep:g,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let y;C(u,void 0,o.db.getRootDocV2(),h,o.db,!0),"sandbox"===l&&(y=(0,a.Ys)("#i"+t));const f="sandbox"===l?(0,a.Ys)(y.nodes()[0].contentDocument.body):(0,a.Ys)("body"),w=f.select(`[id="${t}"]`),x=f.select("#"+t+" g");await(0,n.r)(x,u,["barb"],c,t);r.u.insertTitle(w,"statediagramTitleText",p.titleTopMargin,o.db.getDiagramTitle());const $=w.node().getBBox(),m=$.width+16,T=$.height+16;w.attr("class",c);const S=w.node().getBBox();(0,r.i)(w,T,m,p.useMaxWidth);const k=`${S.x-8} ${S.y-8} ${m} ${T}`;r.l.debug(`viewBox ${k}`),w.attr("viewBox",k);const D=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const i of D){const e=i.getBBox(),t=document.createElementNS("http://www.w3.org/2000/svg",d);t.setAttribute("rx",0),t.setAttribute("ry",0),t.setAttribute("width",e.width),t.setAttribute("height",e.height),i.insertBefore(t,i.firstChild)}}},N={parser:o.p,db:o.d,renderer:V,styles:o.s,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/84103.0e3dd097.js b/assets/js/84103.0e3dd097.js new file mode 100644 index 0000000000..ef81da2b2e --- /dev/null +++ b/assets/js/84103.0e3dd097.js @@ -0,0 +1,2 @@ +/*! For license information please see 84103.0e3dd097.js.LICENSE.txt */ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84103],{42573:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var f=new Error('Uncaught, unspecified "error" event. ('+t+")");throw f.context=t,f}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(o=s.slice()).length,u=0;u<a;u++)o[u].apply(this,c);return!0},t.prototype.addListener=function(e,s){var a;if(!r(s))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(s.listener)?s.listener:s),this._events[e]?n(this._events[e])?this._events[e].push(s):this._events[e]=[this._events[e],s]:this._events[e]=s,n(this._events[e])&&!this._events[e].warned&&(a=i(this._maxListeners)?t.defaultMaxListeners:this._maxListeners)&&a>0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},24501:(e,t,r)=>{"use strict";var n=r(55510),i=r(1098),s=r(27155);function a(e,t,r){return new n(e,t,r)}a.version=r(22026),a.AlgoliaSearchHelper=n,a.SearchParameters=i,a.SearchResults=s,e.exports=a},21657:(e,t,r)=>{"use strict";var n=r(42573);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(38400)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},7978:(e,t,r)=>{"use strict";var n=r(38800),i=r(56516),s=r(41262),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return s(e)?{}:e;if("string"==typeof t)return i(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},1098:(e,t,r)=>{"use strict";var n=r(27868),i=r(38800),s=r(4501),a=r(94812),c=r(37032),u=r(56516),o=r(41262),f=r(96609),h=r(7978);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||f(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return n({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&o(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):o(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:h.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:h.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:h.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:h.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var i=c(r);if(this.isNumericRefined(e,t,i))return this;var s=n({},this.numericRefinements);return s[e]=n({},s[e]),s[e][t]?(s[e][t]=s[e][t].slice(),s[e][t].push(i)):s[e][t]=[i],this.setQueryParameters({numericRefinements:s})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,c(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return o(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return h.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:h.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return h.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:h.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return h.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:h.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return h.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:h.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return h.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:h.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return h.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:h.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:h.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:h.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:h.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),n={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?n[e]=[]:n[e]=[t.slice(0,t.lastIndexOf(r))]:n[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},n,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:i({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:i({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&h.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&h.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&h.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var i,s,u=c(r),o=void 0!==(i=this.numericRefinements[e][t],s=u,a(i,(function(e){return l(e,s)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets())},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0})))},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return a(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},70916:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var a=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[a.name]&&e.hierarchicalFacetsRefinements[a.name][0]||"",f=e._getHierarchicalFacetSeparator(a),h=e._getHierarchicalRootPath(a),l=e._getHierarchicalShowParentLevel(a),m=s(e._getHierarchicalFacetSortBy(a)),d=t.every((function(e){return e.exhaustive})),v=function(e,t,r,s,a){return function(o,f,h){var l=o;if(h>0){var m=0;for(l=o;m<h;){var d=l&&Array.isArray(l.data)?l.data:[];l=i(d,(function(e){return e.isRefined})),m++}}if(l){var v=Object.keys(f.data).map((function(e){return[e,f.data[e]]})).filter((function(e){return function(e,t,r,n,i,s){if(i&&(0!==e.indexOf(i)||i===e))return!1;return!i&&-1===e.indexOf(n)||i&&e.split(n).length-i.split(n).length==1||-1===e.indexOf(n)&&-1===r.indexOf(n)||0===r.indexOf(e)||0===e.indexOf(t+n)&&(s||0===e.indexOf(r))}(e[0],l.path||r,a,t,r,s)}));l.data=n(v.map((function(e){var r=e[0];return function(e,t,r,n,i){var s=t.split(r);return{name:s[s.length-1].trim(),path:t,escapedValue:c(t),count:e,isRefined:n===t||0===n.indexOf(t+r),exhaustive:i,data:null}}(e[1],r,t,u(a),f.exhaustive)})),e[0],e[1])}return o}}(m,f,h,l,o),p=t;return h&&(p=t.slice(h.split(f).length)),p.reduce(v,{name:e.hierarchicalFacets[r].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:d,data:null})}};var n=r(80771),i=r(94812),s=r(36034),a=r(29038),c=a.escapeFacetValue,u=a.unescapeFacetValue},27155:(e,t,r)=>{"use strict";var n=r(27868),i=r(38800),s=r(80771),a=r(24105),c=r(94812),u=r(9443),o=r(36034),f=r(29038),h=f.escapeFacetValue,l=f.unescapeFacetValue,m=r(70916);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function v(e,t,r){t&&t[r]&&(e.stats=t[r])}function p(e,t,r){var s=t[0];this._rawResults=t;var o=this;Object.keys(s).forEach((function(e){o[e]=s[e]})),Object.keys(r||{}).forEach((function(e){o[e]=r[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),h=d(e.facets),p=d(e.disjunctiveFacets),g=1,y=s.facets||{};Object.keys(y).forEach((function(t){var r,n,i=y[t],a=(r=e.hierarchicalFacets,n=t,c(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(a){var f=a.attributes.indexOf(t),l=u(e.hierarchicalFacets,(function(e){return e.name===a.name}));o.hierarchicalFacets[l][f]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=p[t],o.disjunctiveFacets[m]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},v(o.disjunctiveFacets[m],s.facets_stats,t)),g&&(m=h[t],o.facets[m]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},v(o.facets[m],s.facets_stats,t))}})),this.hierarchicalFacets=a(this.hierarchicalFacets),f.forEach((function(r){var a=t[g],c=a&&a.facets?a.facets:{},f=e.getHierarchicalFacetByName(r);Object.keys(c).forEach((function(t){var r,h=c[t];if(f){r=u(e.hierarchicalFacets,(function(e){return e.name===f.name}));var m=u(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=n({},o.hierarchicalFacets[r][m].data,h)}else{r=p[t];var d=s.facets&&s.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},h,d),exhaustive:a.exhaustiveFacetsCount},v(o.disjunctiveFacets[r],a.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(g).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var c=r[t],f=u(e.hierarchicalFacets,(function(e){return e.name===n.name})),h=u(o.hierarchicalFacets[f],(function(e){return e.attribute===t}));if(-1!==h){var l={};if(a.length>0){var m=a[0].split(s)[0];l[m]=o.hierarchicalFacets[f][h].data[m]}o.hierarchicalFacets[f][h].data=i(l,c,o.hierarchicalFacets[f][h].data)}})),g++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=h[t];o.facets[n]={name:t,data:y[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=a(this.facets),this.disjunctiveFacets=a(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=c(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=h(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=c(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=h(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=c(e.hierarchicalFacets,r);if(!s)return s;var a=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(a),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(a.rootPath)&&(o=o.replace(a.rootPath+u,""));var f=o.split(u);return f.unshift(t),y(s,f,0),s}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=c(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=c(i,(function(e){return e.name===r})),a=s&&s.data&&s.data[n]?s.data[n]:0,u=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:a,exhaustive:u}}p.prototype.getFacetByName=function(e){function t(t){return t.name===e}return c(this.facets,t)||c(this.disjunctiveFacets,t)||c(this.hierarchicalFacets,t)},p.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],p.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,a=i({},t,{sortBy:p.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),c=this;if(Array.isArray(r))n=[e];else n=c._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(a.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(c,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var a,c=t.sortRemainingBy;return"hidden"===c?r:(a="alpha"===c?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(s(n,a[0],a[1])))}(e,r)}if(Array.isArray(a.sortBy)){var n=o(a.sortBy,p.DEFAULT_SORT);return s(e,n[0],n[1])}if("function"==typeof a.sortBy)return function(e,t){return t.sort(e)}(a.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},p.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},p.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),a=r.split(s),u=c(n,(function(e){return e.name===t})),o=a.reduce((function(e,t){var r=e&&c(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),f=o&&o.count||0,h=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:f,exhaustive:h}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=p},55510:(e,t,r)=>{"use strict";var n=r(1098),i=r(27155),s=r(21657),a=r(90584),c=r(42573),u=r(38400),o=r(41262),f=r(56516),h=r(27868),l=r(22026),m=r(29038).escapeFacetValue;function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.setClient(e);var i=r||{};i.index=t,this.state=n.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function v(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function p(){return this.state.page}u(d,c),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return a._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=a._getQueries(r.index,r),s=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return s._currentNbQueries--,0===s._currentNbQueries&&s.emit("searchQueueEmpty"),{content:new i(r,e.results),state:r,_originalResponse:e}}),(function(e){throw s._currentNbQueries--,0===s._currentNbQueries&&s.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){s._currentNbQueries--,0===s._currentNbQueries&&s.emit("searchQueueEmpty"),t(null,new i(r,e.results),r)})).catch((function(e){s._currentNbQueries--,0===s._currentNbQueries&&s.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=h({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:f(a._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var c=this.client.initIndex(n.index);if("function"!=typeof c.findAnswers)throw new Error(s);return c.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,s="function"==typeof this.client.initIndex;if(!i&&!s&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=a.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,h=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):s?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return h._currentNbQueries--,0===h._currentNbQueries&&h.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=m(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw h._currentNbQueries--,0===h._currentNbQueries&&h.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=v,d.prototype.setPage=v,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:n.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new n(e),this},d.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=p,d.prototype.getPage=p,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=a._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?a._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),c=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,c));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,c)).catch(this._dispatchAlgoliaError.bind(this,c))}catch(u){this.emit("error",{error:u})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var n=r.results.slice();e.forEach((function(e){var t=e.state,r=e.queriesCount,s=e.helper,a=n.splice(0,r);t.index?(s.lastResults=new i(t,a),s.emit("result",{results:s.lastResults,state:t})):s.emit("result",{results:null,state:t})}))}},d.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},d.prototype.containsRefinement=function(e,t,r,n){return e||0!==t.length||0!==r.length||0!==n.length},d.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&this.state.disjunctiveRefinements[e].length>0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+l+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new s(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},24105:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},38800:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},29038:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},94812:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r<e.length;r++)if(t(e[r]))return e[r]}},9443:e=>{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r<e.length;r++)if(t(e[r]))return r;return-1}},36034:(e,t,r)=>{"use strict";var n=r(94812);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},38400:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4501:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},27868:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n<i;n++){var s=arguments[n];t(s)&&r(e,s)}return e}},41262:e=>{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},56516:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}},80771:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e<t||s&&r||!i)return-1}return 0}e.exports=function(e,r,n){if(!Array.isArray(e))return[];Array.isArray(n)||(n=[]);var i=e.map((function(e,t){return{criteria:r.map((function(t){return e[t]})),index:t,value:e}}));return i.sort((function(e,r){for(var i=-1;++i<e.criteria.length;){var s=t(e.criteria[i],r.criteria[i]);if(s)return i>=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},37032:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},90584:(e,t,r)=>{"use strict";var n=r(27868);function i(e){return Object.keys(e).sort((function(e,t){return e.localeCompare(t)})).reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var u=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var f=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),h=u[a-1];c.facetFilters=a>0?f.concat(h.attribute+":"+h.value):f.length>0?f:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),a.length>0&&(u.numericFilters=a),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),u=s._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var f=e.getHierarchicalFacetByName(t);return o.facets=f?s._getDisjunctiveHierarchicalFacetAttribute(e,f,r):t,c.length>0&&(o.numericFilters=c),a.length>0&&(o.facetFilters=a),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).forEach((function(e){(i[e]||[]).forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).forEach((function(e){(s[e]||[]).forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,u,o=e.getHierarchicalFacetByName(i),f=e._getHierarchicalFacetSeparator(o),h=e._getHierarchicalRootPath(o);if(t===i){if(-1===s.indexOf(f)||!h&&!0===r||h&&h.split(f).length===s.split(f).length)return;h?(u=h.split(f).length-1,s=h):(u=s.split(f).length-2,s=s.slice(0,s.lastIndexOf(f))),a=o.attributes[u]}else u=s.split(f).length-1,a=o.attributes[u];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),u))}};e.exports=s},96609:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},22026:e=>{"use strict";e.exports="3.13.3"},80934:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){e(r,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(e){var t,r="algoliasearch-client-js-".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},s=function(){return JSON.parse(n().getItem(r)||"{}")},a=function(e){n().setItem(r,JSON.stringify(e))},c=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=s(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==i(e,2)[1].timestamp})));if(a(n),t){var c=Object.fromEntries(Object.entries(n).filter((function(e){var r=i(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));a(c)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function f(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function h(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var i=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[i++])}))}var l={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},v=1,p=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===v||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,f=n.method!==F?{}:r(r({},n.data),i.data),h=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),f),i.queryParameters),l=0,m=function t(r,s){var f=r.pop();if(void 0===f)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(a)};var m={data:c,headers:u,method:o,url:_(f,n.path,h),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:f,triesLeft:r.length};return a.push(t),t},v={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(f,y(f,n.isTimedOut?g:p))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,v)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function x(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function _(e,t,r){var n=E(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function E(e){return Object.keys(e).map((function(t){return h("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var A=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,f=e.queryParameters,h={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:u,headers:e.headers,queryParameters:f,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,h.timeouts.read),n=function(){return P(h,h.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:h.queryParameters,headers:h.headers}};return h.responsesCache.get(s,(function(){return h.requestsCache.get(s,(function(){return h.requestsCache.set(s,n()).then((function(e){return Promise.all([h.requestsCache.delete(s),e])}),(function(e){return Promise.all([h.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return h.responsesCache.set(s,e)}})},write:function(e,t){return P(h,h.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,h.timeouts.write))}};return h}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return f({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},H=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},N=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return f({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},Q=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:E(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,u=n(s,["facetName","facetQuery"]);return N(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(a,c,r(r({},i),u))})))}},S=function(e){return function(t,r,n){return e.transporter.read({method:b,path:h("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:h("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:h("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,q=2,I=3;function L(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=I,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return q>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.20.0","-").concat(e)}),u()]}),userAgent:x("4.20.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return A(r(r(r({},s),n),{},{methods:{search:Q,searchForFacetValues:T,multipleQueries:Q,multipleSearchForFacetValues:T,customRequest:H,initIndex:function(e){return function(t){return N(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:S}})}}}}))}return L.version="4.20.0",L}()}}]); \ No newline at end of file diff --git a/assets/js/84103.0e3dd097.js.LICENSE.txt b/assets/js/84103.0e3dd097.js.LICENSE.txt new file mode 100644 index 0000000000..8c17e740e6 --- /dev/null +++ b/assets/js/84103.0e3dd097.js.LICENSE.txt @@ -0,0 +1 @@ +/*! algoliasearch-lite.umd.js | 4.20.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/842cd290.4a29b883.js b/assets/js/842cd290.4a29b883.js new file mode 100644 index 0000000000..7f23950670 --- /dev/null +++ b/assets/js/842cd290.4a29b883.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[71676],{38743:e=>{e.exports=JSON.parse('{"version":{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"Support","href":"/community/support","docId":"support","unlisted":false},{"type":"link","label":"Team","href":"/community/team","docId":"team","unlisted":false},{"type":"link","label":"Awesome Resources","href":"/community/resources","docId":"resources","unlisted":false},{"type":"link","label":"Contributing","href":"/community/contributing","docId":"contributing","unlisted":false},{"type":"link","label":"Canary releases","href":"/community/canary","docId":"canary","unlisted":false},{"type":"link","label":"Release process","href":"/community/release-process","docId":"release-process","unlisted":false},{"type":"link","href":"/changelog","label":"Changelog"},{"type":"link","href":"/showcase","label":"Showcase"},{"type":"link","href":"/feature-requests","label":"Feature Requests"},{"type":"link","label":"Chat with us on Discord","href":"https://discord.gg/docusaurus"}]},"docs":{"canary":{"id":"canary","title":"Canary releases","description":"Docusaurus has a canary releases system.","sidebar":"community"},"contributing":{"id":"contributing","title":"Contributing","description":"","sidebar":"community"},"release-process":{"id":"release-process","title":"Release process","description":"Let\'s see how Docusaurus handles versioning, releases and breaking changes.","sidebar":"community"},"resources":{"id":"resources","title":"Awesome Resources","description":"A curated list of interesting Docusaurus community projects.","sidebar":"community"},"support":{"id":"support","title":"Support","description":"Docusaurus has a community of thousands of developers.","sidebar":"community"},"team":{"id":"team","title":"Team","description":"Active Team","sidebar":"community"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/845bdfd1.de52e410.js b/assets/js/845bdfd1.de52e410.js new file mode 100644 index 0000000000..7cb4b4c76b --- /dev/null +++ b/assets/js/845bdfd1.de52e410.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[91907],{59536:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>h,toc:()=>o});var a=n(24246),r=n(71670);const t={mdx:{format:"md"},date:"2023-03-23T20:00",authors:["Anasqx","armano2","biplavmz","dewanshDT","dr0nn1","Josh-Cena","kagankan","Mysterious-Dev","pReya","slorber","tannerdolby","trueqap","Vishruta-Patil","ZarakiKanzaki"]},i="2.4.0",h={permalink:"/changelog/2.4.0",source:"@site/changelog/source/2.4.0.md",title:"2.4.0",description:"New Feature",date:"2023-03-23T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Anas",alias:"Anasqx",url:"https://github.com/Anasqx",imageURL:"https://github.com/Anasqx.png",key:"Anasqx"},{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"biplavmz",alias:"biplavmz",url:"https://github.com/biplavmz",imageURL:"https://github.com/biplavmz.png",key:"biplavmz"},{name:"Dewansh Thakur",alias:"dewanshDT",url:"https://github.com/dewanshDT",imageURL:"https://github.com/dewanshDT.png",key:"dewanshDT"},{name:"Petter Dr\xf8nnen",alias:"dr0nn1",url:"https://github.com/dr0nn1",imageURL:"https://github.com/dr0nn1.png",key:"dr0nn1"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Kagan",alias:"kagankan",url:"https://github.com/kagankan",imageURL:"https://github.com/kagankan.png",key:"kagankan"},{name:"Mysterious_Dev",alias:"Mysterious-Dev",url:"https://github.com/Mysterious-Dev",imageURL:"https://github.com/Mysterious-Dev.png",key:"Mysterious-Dev"},{name:"Moritz St\xfcckler",alias:"pReya",url:"https://github.com/pReya",imageURL:"https://github.com/pReya.png",key:"pReya"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tanner Dolby",alias:"tannerdolby",url:"https://github.com/tannerdolby",imageURL:"https://github.com/tannerdolby.png",key:"tannerdolby"},{name:"TrueQAP",alias:"trueqap",url:"https://github.com/trueqap",imageURL:"https://github.com/trueqap.png",key:"trueqap"},{name:"Vishruta Patil",alias:"Vishruta-Patil",url:"https://github.com/Vishruta-Patil",imageURL:"https://github.com/Vishruta-Patil.png",key:"Vishruta-Patil"},{name:"Davide Donadio",alias:"ZarakiKanzaki",url:"https://github.com/ZarakiKanzaki",imageURL:"https://github.com/ZarakiKanzaki.png",key:"ZarakiKanzaki"}],frontMatter:{mdx:{format:"md"},date:"2023-03-23T20:00",authors:["Anasqx","armano2","biplavmz","dewanshDT","dr0nn1","Josh-Cena","kagankan","Mysterious-Dev","pReya","slorber","tannerdolby","trueqap","Vishruta-Patil","ZarakiKanzaki"]},unlisted:!1,prevItem:{title:"2.4.1",permalink:"/changelog/2.4.1"},nextItem:{title:"2.3.1",permalink:"/changelog/2.3.1"},listPageLink:"/changelog/"},l={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"Committers: 14",id:"committers-14",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8236",children:"#8236"})," feat(content-docs): add support for sidebar item category/link descriptions in generated index page (",(0,a.jsx)(s.a,{href:"https://github.com/ZarakiKanzaki",children:"@ZarakiKanzaki"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8708",children:"#8708"})," feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8616",children:"#8616"})," feat(theme): add ability to translate navbar+footer logo alt text (",(0,a.jsx)(s.a,{href:"https://github.com/Mysterious-Dev",children:"@Mysterious-Dev"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8690",children:"#8690"})," feat(npm-to-yarn): add support for PnPm and custom converters (",(0,a.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8677",children:"#8677"})," feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8674",children:"#8674"})," feat(theme-classic): respect ",(0,a.jsx)(s.code,{children:"prefers-reduced-motion: reduce"})," mediaquery, bump Infima to alpha.43 (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8668",children:"#8668"})," feat(theme-translations): add Hungarian theme translations (",(0,a.jsx)(s.a,{href:"https://github.com/trueqap",children:"@trueqap"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8631",children:"#8631"})," feat(theme-translations): add Norwegian (Bokm\xe5l) theme translation (",(0,a.jsx)(s.a,{href:"https://github.com/dr0nn1",children:"@dr0nn1"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8656",children:"#8656"})," feat(theme-common): allow passing a string for details summary (",(0,a.jsx)(s.a,{href:"https://github.com/pReya",children:"@pReya"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8620",children:"#8620"})," feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8803",children:"#8803"})," fix(theme): codeblock buttons should be kept on the right when using RTL locale (",(0,a.jsx)(s.a,{href:"https://github.com/Vishruta-Patil",children:"@Vishruta-Patil"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8615",children:"#8615"})," fix(theme): improve color toggle when using dark navbar (",(0,a.jsx)(s.a,{href:"https://github.com/dewanshDT",children:"@dewanshDT"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8699",children:"#8699"})," fix(theme-classic): fix tab focus bug in dropdown (#8697) (",(0,a.jsx)(s.a,{href:"https://github.com/kagankan",children:"@kagankan"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8801",children:"#8801"})," fix(theme): allow tabs children to be falsy (",(0,a.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8757",children:"#8757"})," fix(search): search page should react to querystring changes + cleanup/refactor (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8746",children:"#8746"})," fix(core): baseUrl error banner link anchor case (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8744",children:"#8744"})," fix(theme-translations): fix wrong arabic words (tip/next) (",(0,a.jsx)(s.a,{href:"https://github.com/Anasqx",children:"@Anasqx"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8712",children:"#8712"}),' polish(create-docusaurus): the starter template should use a navbar item "docSidebar" instead of "doc" (less fragile on updates) (',(0,a.jsx)(s.a,{href:"https://github.com/biplavmz",children:"@biplavmz"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,a.jsx)(s.code,{children:"docusaurus"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8735",children:"#8735"})," polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API (",(0,a.jsx)(s.a,{href:"https://github.com/tannerdolby",children:"@tannerdolby"}),")"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,a.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,a.jsx)(s.code,{children:"docusaurus"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/8736",children:"#8736"})," polish(core): better styling for error screens (",(0,a.jsx)(s.a,{href:"https://github.com/tannerdolby",children:"@tannerdolby"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.h2,{id:"committers-14",children:"Committers: 14"}),"\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["Anas (",(0,a.jsx)(s.a,{href:"https://github.com/Anasqx",children:"@Anasqx"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Armano (",(0,a.jsx)(s.a,{href:"https://github.com/armano2",children:"@armano2"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Davide Donadio (",(0,a.jsx)(s.a,{href:"https://github.com/ZarakiKanzaki",children:"@ZarakiKanzaki"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Dewansh Thakur (",(0,a.jsx)(s.a,{href:"https://github.com/dewanshDT",children:"@dewanshDT"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Joshua Chen (",(0,a.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Kagan (",(0,a.jsx)(s.a,{href:"https://github.com/kagankan",children:"@kagankan"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Moritz St\xfcckler (",(0,a.jsx)(s.a,{href:"https://github.com/pReya",children:"@pReya"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Mysterious_Dev (",(0,a.jsx)(s.a,{href:"https://github.com/Mysterious-Dev",children:"@Mysterious-Dev"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Petter Dr\xf8nnen (",(0,a.jsx)(s.a,{href:"https://github.com/dr0nn1",children:"@dr0nn1"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,a.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Tanner Dolby (",(0,a.jsx)(s.a,{href:"https://github.com/tannerdolby",children:"@tannerdolby"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["TrueQAP (",(0,a.jsx)(s.a,{href:"https://github.com/trueqap",children:"@trueqap"}),")"]}),"\n",(0,a.jsxs)(s.li,{children:["Vishruta Patil (",(0,a.jsx)(s.a,{href:"https://github.com/Vishruta-Patil",children:"@Vishruta-Patil"}),")"]}),"\n",(0,a.jsx)(s.li,{children:(0,a.jsx)(s.a,{href:"https://github.com/biplavmz",children:"@biplavmz"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>h,a:()=>i});var a=n(27378);const r={},t=a.createContext(r);function i(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/84fd4968.cf13ed8f.js b/assets/js/84fd4968.cf13ed8f.js new file mode 100644 index 0000000000..19db644d1b --- /dev/null +++ b/assets/js/84fd4968.cf13ed8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[99657],{55881:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/tests/blog/page/6","page":6,"postsPerPage":3,"totalPages":6,"totalCount":16,"previousPage":"/tests/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/850.c2728522.js b/assets/js/850.c2728522.js new file mode 100644 index 0000000000..62c66f72de --- /dev/null +++ b/assets/js/850.c2728522.js @@ -0,0 +1,1410 @@ +"use strict"; +exports.id = 850; +exports.ids = [850]; +exports.modules = { + +/***/ 66850: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +// EXTERNAL MODULE: ../node_modules/d3/src/index.js + 195 modules +var src = __webpack_require__(63294); +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-array/src/min.js +function min(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/src/align.js + + +function targetDepth(d) { + return d.target.depth; +} + +function left(node) { + return node.depth; +} + +function right(node, n) { + return n - 1 - node.height; +} + +function justify(node, n) { + return node.sourceLinks.length ? node.depth : n - 1; +} + +function center(node) { + return node.targetLinks.length ? node.depth + : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1 + : 0; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-array/src/sum.js +function sum(values, valueof) { + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + sum += value; + } + } + } + return sum; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-array/src/max.js +function max(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/src/constant.js +function constant(x) { + return function() { + return x; + }; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/src/sankey.js + + + + +function ascendingSourceBreadth(a, b) { + return ascendingBreadth(a.source, b.source) || a.index - b.index; +} + +function ascendingTargetBreadth(a, b) { + return ascendingBreadth(a.target, b.target) || a.index - b.index; +} + +function ascendingBreadth(a, b) { + return a.y0 - b.y0; +} + +function value(d) { + return d.value; +} + +function defaultId(d) { + return d.index; +} + +function defaultNodes(graph) { + return graph.nodes; +} + +function defaultLinks(graph) { + return graph.links; +} + +function find(nodeById, id) { + const node = nodeById.get(id); + if (!node) throw new Error("missing: " + id); + return node; +} + +function computeLinkBreadths({nodes}) { + for (const node of nodes) { + let y0 = node.y0; + let y1 = y0; + for (const link of node.sourceLinks) { + link.y0 = y0 + link.width / 2; + y0 += link.width; + } + for (const link of node.targetLinks) { + link.y1 = y1 + link.width / 2; + y1 += link.width; + } + } +} + +function Sankey() { + let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent + let dx = 24; // nodeWidth + let dy = 8, py; // nodePadding + let id = defaultId; + let align = justify; + let sort; + let linkSort; + let nodes = defaultNodes; + let links = defaultLinks; + let iterations = 6; + + function sankey() { + const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)}; + computeNodeLinks(graph); + computeNodeValues(graph); + computeNodeDepths(graph); + computeNodeHeights(graph); + computeNodeBreadths(graph); + computeLinkBreadths(graph); + return graph; + } + + sankey.update = function(graph) { + computeLinkBreadths(graph); + return graph; + }; + + sankey.nodeId = function(_) { + return arguments.length ? (id = typeof _ === "function" ? _ : constant(_), sankey) : id; + }; + + sankey.nodeAlign = function(_) { + return arguments.length ? (align = typeof _ === "function" ? _ : constant(_), sankey) : align; + }; + + sankey.nodeSort = function(_) { + return arguments.length ? (sort = _, sankey) : sort; + }; + + sankey.nodeWidth = function(_) { + return arguments.length ? (dx = +_, sankey) : dx; + }; + + sankey.nodePadding = function(_) { + return arguments.length ? (dy = py = +_, sankey) : dy; + }; + + sankey.nodes = function(_) { + return arguments.length ? (nodes = typeof _ === "function" ? _ : constant(_), sankey) : nodes; + }; + + sankey.links = function(_) { + return arguments.length ? (links = typeof _ === "function" ? _ : constant(_), sankey) : links; + }; + + sankey.linkSort = function(_) { + return arguments.length ? (linkSort = _, sankey) : linkSort; + }; + + sankey.size = function(_) { + return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0]; + }; + + sankey.extent = function(_) { + return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]]; + }; + + sankey.iterations = function(_) { + return arguments.length ? (iterations = +_, sankey) : iterations; + }; + + function computeNodeLinks({nodes, links}) { + for (const [i, node] of nodes.entries()) { + node.index = i; + node.sourceLinks = []; + node.targetLinks = []; + } + const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])); + for (const [i, link] of links.entries()) { + link.index = i; + let {source, target} = link; + if (typeof source !== "object") source = link.source = find(nodeById, source); + if (typeof target !== "object") target = link.target = find(nodeById, target); + source.sourceLinks.push(link); + target.targetLinks.push(link); + } + if (linkSort != null) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(linkSort); + targetLinks.sort(linkSort); + } + } + } + + function computeNodeValues({nodes}) { + for (const node of nodes) { + node.value = node.fixedValue === undefined + ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value)) + : node.fixedValue; + } + } + + function computeNodeDepths({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.depth = x; + for (const {target} of node.sourceLinks) { + next.add(target); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeHeights({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.height = x; + for (const {source} of node.targetLinks) { + next.add(source); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeLayers({nodes}) { + const x = max(nodes, d => d.depth) + 1; + const kx = (x1 - x0 - dx) / (x - 1); + const columns = new Array(x); + for (const node of nodes) { + const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))); + node.layer = i; + node.x0 = x0 + i * kx; + node.x1 = node.x0 + dx; + if (columns[i]) columns[i].push(node); + else columns[i] = [node]; + } + if (sort) for (const column of columns) { + column.sort(sort); + } + return columns; + } + + function initializeNodeBreadths(columns) { + const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value)); + for (const nodes of columns) { + let y = y0; + for (const node of nodes) { + node.y0 = y; + node.y1 = y + node.value * ky; + y = node.y1 + py; + for (const link of node.sourceLinks) { + link.width = link.value * ky; + } + } + y = (y1 - y + py) / (nodes.length + 1); + for (let i = 0; i < nodes.length; ++i) { + const node = nodes[i]; + node.y0 += y * (i + 1); + node.y1 += y * (i + 1); + } + reorderLinks(nodes); + } + } + + function computeNodeBreadths(graph) { + const columns = computeNodeLayers(graph); + py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1)); + initializeNodeBreadths(columns); + for (let i = 0; i < iterations; ++i) { + const alpha = Math.pow(0.99, i); + const beta = Math.max(1 - alpha, (i + 1) / iterations); + relaxRightToLeft(columns, alpha, beta); + relaxLeftToRight(columns, alpha, beta); + } + } + + // Reposition each node based on its incoming (target) links. + function relaxLeftToRight(columns, alpha, beta) { + for (let i = 1, n = columns.length; i < n; ++i) { + const column = columns[i]; + for (const target of column) { + let y = 0; + let w = 0; + for (const {source, value} of target.targetLinks) { + let v = value * (target.layer - source.layer); + y += targetTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - target.y0) * alpha; + target.y0 += dy; + target.y1 += dy; + reorderNodeLinks(target); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + // Reposition each node based on its outgoing (source) links. + function relaxRightToLeft(columns, alpha, beta) { + for (let n = columns.length, i = n - 2; i >= 0; --i) { + const column = columns[i]; + for (const source of column) { + let y = 0; + let w = 0; + for (const {target, value} of source.sourceLinks) { + let v = value * (target.layer - source.layer); + y += sourceTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - source.y0) * alpha; + source.y0 += dy; + source.y1 += dy; + reorderNodeLinks(source); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + function resolveCollisions(nodes, alpha) { + const i = nodes.length >> 1; + const subject = nodes[i]; + resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha); + resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha); + resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha); + resolveCollisionsTopToBottom(nodes, y0, 0, alpha); + } + + // Push any overlapping nodes down. + function resolveCollisionsTopToBottom(nodes, y, i, alpha) { + for (; i < nodes.length; ++i) { + const node = nodes[i]; + const dy = (y - node.y0) * alpha; + if (dy > 1e-6) node.y0 += dy, node.y1 += dy; + y = node.y1 + py; + } + } + + // Push any overlapping nodes up. + function resolveCollisionsBottomToTop(nodes, y, i, alpha) { + for (; i >= 0; --i) { + const node = nodes[i]; + const dy = (node.y1 - y) * alpha; + if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy; + y = node.y0 - py; + } + } + + function reorderNodeLinks({sourceLinks, targetLinks}) { + if (linkSort === undefined) { + for (const {source: {sourceLinks}} of targetLinks) { + sourceLinks.sort(ascendingTargetBreadth); + } + for (const {target: {targetLinks}} of sourceLinks) { + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + function reorderLinks(nodes) { + if (linkSort === undefined) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(ascendingTargetBreadth); + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + // Returns the target.y0 that would produce an ideal link from source to target. + function targetTop(source, target) { + let y = source.y0 - (source.sourceLinks.length - 1) * py / 2; + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y += width + py; + } + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y -= width; + } + return y; + } + + // Returns the source.y0 that would produce an ideal link from source to target. + function sourceTop(source, target) { + let y = target.y0 - (target.targetLinks.length - 1) * py / 2; + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y += width + py; + } + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y -= width; + } + return y; + } + + return sankey; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-path/src/path.js +var pi = Math.PI, + tau = 2 * pi, + epsilon = 1e-6, + tauEpsilon = tau - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + }, + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r, ccw = !!ccw; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._ += "L" + x0 + "," + y0; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau + tau; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } + }, + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; + } +}; + +/* harmony default export */ const src_path = (path); + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-shape/src/array.js +var slice = Array.prototype.slice; + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-shape/src/constant.js +/* harmony default export */ function src_constant(x) { + return function constant() { + return x; + }; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-shape/src/point.js +function point_x(p) { + return p[0]; +} + +function point_y(p) { + return p[1]; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js + + + + + + +function linkSource(d) { + return d.source; +} + +function linkTarget(d) { + return d.target; +} + +function link_link(curve) { + var source = linkSource, + target = linkTarget, + x = point_x, + y = point_y, + context = null; + + function link() { + var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); + if (!context) context = buffer = src_path(); + curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); + if (buffer) return context = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : src_constant(+_), link) : x; + }; + + link.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : src_constant(+_), link) : y; + }; + + link.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), link) : context; + }; + + return link; +} + +function curveHorizontal(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); +} + +function curveVertical(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); +} + +function curveRadial(context, x0, y0, x1, y1) { + var p0 = pointRadial(x0, y0), + p1 = pointRadial(x0, y0 = (y0 + y1) / 2), + p2 = pointRadial(x1, y0), + p3 = pointRadial(x1, y1); + context.moveTo(p0[0], p0[1]); + context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); +} + +function linkHorizontal() { + return link_link(curveHorizontal); +} + +function linkVertical() { + return link_link(curveVertical); +} + +function linkRadial() { + var l = link_link(curveRadial); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; +} + +;// CONCATENATED MODULE: ../node_modules/d3-sankey/src/sankeyLinkHorizontal.js + + +function horizontalSource(d) { + return [d.source.x1, d.y0]; +} + +function horizontalTarget(d) { + return [d.target.x0, d.y1]; +} + +/* harmony default export */ function sankeyLinkHorizontal() { + return linkHorizontal() + .source(horizontalSource) + .target(horizontalTarget); +} + +// EXTERNAL MODULE: ../node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27693); +// EXTERNAL MODULE: ../node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(7608); +// EXTERNAL MODULE: ../node_modules/dompurify/dist/purify.es.js +var purify_es = __webpack_require__(42605); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/sankeyDiagram-a7f8e230.js + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" }, + productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 7: + const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"')); + const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"')); + const value = parseFloat($$[$0].trim()); + yy.addLink(source, target, value); + break; + case 8: + case 9: + case 11: + this.$ = $$[$0]; + break; + case 10: + this.$ = $$[$0 - 1]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o($V2, [2, 8]), o($V2, [2, 9]), { 19: [1, 16] }, o($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o($V1, [2, 3]), { 12: [1, 20] }, o($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o([1, 5, 10], [2, 7])], + defaultActions: { 11: [2, 1], 12: [2, 5] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "easy_keword_rules": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.pushState("csv"); + return 4; + case 1: + return 10; + case 2: + return 5; + case 3: + return 12; + case 4: + this.pushState("escaped_text"); + return 18; + case 5: + return 20; + case 6: + this.popState("escaped_text"); + return 18; + case 7: + return 19; + } + }, + rules: [/^(?:sankey-beta\b)/, /^(?:$)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:(\u002C))/, /^(?:(\u0022))/, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/, /^(?:(\u0022)(?!(\u0022)))/, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/], + conditions: { "csv": { "rules": [1, 2, 3, 4, 5, 6, 7], "inclusive": false }, "escaped_text": { "rules": [6, 7], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let links = []; +let nodes = []; +let nodesMap = {}; +const clear = () => { + links = []; + nodes = []; + nodesMap = {}; + (0,mermaid_768dc893.v)(); +}; +class SankeyLink { + constructor(source, target, value = 0) { + this.source = source; + this.target = target; + this.value = value; + } +} +const addLink = (source, target, value) => { + links.push(new SankeyLink(source, target, value)); +}; +class SankeyNode { + constructor(ID) { + this.ID = ID; + } +} +const findOrCreateNode = (ID) => { + ID = mermaid_768dc893.e.sanitizeText(ID, (0,mermaid_768dc893.c)()); + if (!nodesMap[ID]) { + nodesMap[ID] = new SankeyNode(ID); + nodes.push(nodesMap[ID]); + } + return nodesMap[ID]; +}; +const getNodes = () => nodes; +const getLinks = () => links; +const getGraph = () => ({ + nodes: nodes.map((node) => ({ id: node.ID })), + links: links.map((link) => ({ + source: link.source.ID, + target: link.target.ID, + value: link.value + })) +}); +const db = { + nodesMap, + getConfig: () => (0,mermaid_768dc893.c)().sankey, + getNodes, + getLinks, + getGraph, + addLink, + findOrCreateNode, + getAccTitle: mermaid_768dc893.g, + setAccTitle: mermaid_768dc893.s, + getAccDescription: mermaid_768dc893.a, + setAccDescription: mermaid_768dc893.b, + getDiagramTitle: mermaid_768dc893.t, + setDiagramTitle: mermaid_768dc893.r, + clear +}; +const _Uid = class { + static next(name) { + return new _Uid(name + ++_Uid.count); + } + constructor(id) { + this.id = id; + this.href = `#${id}`; + } + toString() { + return "url(" + this.href + ")"; + } +}; +let Uid = _Uid; +Uid.count = 0; +const alignmentsMap = { + left: left, + right: right, + center: center, + justify: justify +}; +const draw = function(text, id, _version, diagObj) { + const { securityLevel, sankey: conf } = (0,mermaid_768dc893.c)(); + const defaultSankeyConfig = mermaid_768dc893.K.sankey; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,src/* select */.Ys)(`[id="${id}"]`); + const width = (conf == null ? void 0 : conf.width) ?? defaultSankeyConfig.width; + const height = (conf == null ? void 0 : conf.height) ?? defaultSankeyConfig.width; + const useMaxWidth = (conf == null ? void 0 : conf.useMaxWidth) ?? defaultSankeyConfig.useMaxWidth; + const nodeAlignment = (conf == null ? void 0 : conf.nodeAlignment) ?? defaultSankeyConfig.nodeAlignment; + const prefix = (conf == null ? void 0 : conf.prefix) ?? defaultSankeyConfig.prefix; + const suffix = (conf == null ? void 0 : conf.suffix) ?? defaultSankeyConfig.suffix; + const showValues = (conf == null ? void 0 : conf.showValues) ?? defaultSankeyConfig.showValues; + (0,mermaid_768dc893.i)(svg, height, width, useMaxWidth); + const graph = diagObj.db.getGraph(); + const nodeAlign = alignmentsMap[nodeAlignment]; + const nodeWidth = 10; + const sankey$1 = Sankey().nodeId((d) => d.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ + [0, 0], + [width, height] + ]); + sankey$1(graph); + const colorScheme = (0,src/* scaleOrdinal */.PKp)(src/* schemeTableau10 */.K2I); + svg.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d) => (d.uid = Uid.next("node-")).id).attr("transform", function(d) { + return "translate(" + d.x0 + "," + d.y0 + ")"; + }).attr("x", (d) => d.x0).attr("y", (d) => d.y0).append("rect").attr("height", (d) => { + return d.y1 - d.y0; + }).attr("width", (d) => d.x1 - d.x0).attr("fill", (d) => colorScheme(d.id)); + const getText = ({ id: id2, value }) => { + if (!showValues) { + return id2; + } + return `${id2} +${prefix}${Math.round(value * 100) / 100}${suffix}`; + }; + svg.append("g").attr("class", "node-labels").attr("font-family", "sans-serif").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d) => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6).attr("y", (d) => (d.y1 + d.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d) => d.x0 < width / 2 ? "start" : "end").text(getText); + const link = svg.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply"); + const linkColor = (conf == null ? void 0 : conf.linkColor) || "gradient"; + if (linkColor === "gradient") { + const gradient = link.append("linearGradient").attr("id", (d) => (d.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d) => d.source.x1).attr("x2", (d) => d.target.x0); + gradient.append("stop").attr("offset", "0%").attr("stop-color", (d) => colorScheme(d.source.id)); + gradient.append("stop").attr("offset", "100%").attr("stop-color", (d) => colorScheme(d.target.id)); + } + let coloring; + switch (linkColor) { + case "gradient": + coloring = (d) => d.uid; + break; + case "source": + coloring = (d) => colorScheme(d.source.id); + break; + case "target": + coloring = (d) => colorScheme(d.target.id); + break; + default: + coloring = linkColor; + } + link.append("path").attr("d", sankeyLinkHorizontal()).attr("stroke", coloring).attr("stroke-width", (d) => Math.max(1, d.width)); +}; +const renderer = { + draw +}; +const prepareTextForParsing = (text) => { + const textToParse = text.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); + return textToParse; +}; +const originalParse = parser$1.parse.bind(parser$1); +parser$1.parse = (text) => originalParse(prepareTextForParsing(text)); +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/85d61fbd.530f4c67.js b/assets/js/85d61fbd.530f4c67.js new file mode 100644 index 0000000000..85f8d049a6 --- /dev/null +++ b/assets/js/85d61fbd.530f4c67.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[69774],{61132:(e,t,r)=>{r.d(t,{Z:()=>l});var n=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function l({children:e,hidden:t,className:r}){return(0,n.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:t,children:e})}},97555:(e,t,r)=>{r.d(t,{Z:()=>S});var n=r(24246),o=r(27378),a=r(40624),l=r(75527),s=r(3620),c=r(44479),i=r(62821),u=r(52196),d=r(53589);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function h(e){var t,r;return null!==(r=null===(t=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))||void 0===t?void 0:t.filter(Boolean))&&void 0!==r?r:[]}function m(e){const{values:t,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=t?t:function(e){return h(e).map((({props:{value:e,label:t,attributes:r,default:n}})=>({value:e,label:t,attributes:r,default:n})))}(r);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function f({value:e,tabValues:t}){return t.some((t=>t.value===e))}function v({queryString:e=!1,groupId:t}){const r=(0,s.k6)(),n=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=t?t:null}({queryString:e,groupId:t}),a=(0,i._X)(n),l=(0,o.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(r.location.search);t.set(n,e),r.replace(b(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}({},r.location),{search:t.toString()}))}),[n,r]);return[a,l]}function g(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,a=m(e),[l,s]=(0,o.useState)((()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!f({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const n=null!==(r=t.find((e=>e.default)))&&void 0!==r?r:t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[i,u]=v({queryString:r,groupId:n}),[p,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,n]=(0,d.Nk)(t);return[r,(0,o.useCallback)((e=>{t&&n.set(e)}),[t,n])]}({groupId:n}),h=(()=>{const e=null!=i?i:p;return f({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{h&&s(h)}),[h]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),b(e)}),[u,b,a]),tabValues:a}}var y=r(29088);const j={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function O(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function w(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){O(e,t,r[t])}))}return e}function k(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})),e}function x({className:e,block:t,selectedValue:r,selectValue:o,tabValues:s}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,l.o5)(),u=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==r&&(i(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;var r;t=null!==(r=c[n])&&void 0!==r?r:c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;var n;t=null!==(n=c[r])&&void 0!==n?n:c[c.length-1];break}}null==t||t.focus()};return(0,n.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":t},e),children:s.map((({value:e,label:t,attributes:o})=>(0,n.jsx)("li",k(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",j.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=t?t:e}),e)))})}function P({lazy:e,children:t,selectedValue:r}){const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,n.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function I(e){const t=g(e);return(0,n.jsxs)("div",{className:(0,a.Z)("tabs-container",j.tabList),children:[(0,n.jsx)(x,w({},e,t)),(0,n.jsx)(P,w({},e,t))]})}function S(e){const t=(0,y.Z)();return(0,n.jsx)(I,k(w({},e),{children:h(e.children)}),String(t))}},10460:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>b,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(24246),o=r(71670),a=r(97555),l=r(61132);const s={sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},c="\ud83d\udce6 theme-live-codeblock",i={id:"api/themes/theme-live-codeblock",title:"\ud83d\udce6 theme-live-codeblock",description:"This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.",source:"@site/docs/api/themes/theme-live-codeblock.mdx",sourceDirName:"api/themes",slug:"/api/themes/@docusaurus/theme-live-codeblock",permalink:"/docs/api/themes/@docusaurus/theme-live-codeblock",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/theme-live-codeblock.mdx",tags:[],version:"current",lastUpdatedBy:"Chongyi Zheng",lastUpdatedAt:1697244363e3,sidebarPosition:3,frontMatter:{sidebar_position:3,slug:"/api/themes/@docusaurus/theme-live-codeblock"},sidebar:"api",previous:{title:"\ud83d\udce6 theme-classic",permalink:"/docs/api/themes/@docusaurus/theme-classic"},next:{title:"\ud83d\udce6 theme-search-algolia",permalink:"/docs/api/themes/@docusaurus/theme-search-algolia"}},u={},d=[{value:"Configuration",id:"configuration",level:3}];function p(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"-theme-live-codeblock",children:"\ud83d\udce6 theme-live-codeblock"}),"\n",(0,n.jsxs)(t.p,{children:["This theme provides a ",(0,n.jsx)(t.code,{children:"@theme/CodeBlock"})," component that is powered by react-live. You can read more on ",(0,n.jsx)(t.a,{href:"/docs/markdown-features/code-blocks#interactive-code-editor",children:"interactive code editor"})," documentation."]}),"\n",(0,n.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,n.jsx)(l.Z,{value:"npm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install --save @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"yarn add @docusaurus/theme-live-codeblock\n"})})}),(0,n.jsx)(l.Z,{value:"pnpm",label:"pnpm",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"pnpm add @docusaurus/theme-live-codeblock\n"})})})]}),"\n",(0,n.jsx)(t.h3,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="docusaurus.config.js"',children:"export default {\n plugins: ['@docusaurus/theme-live-codeblock'],\n themeConfig: {\n liveCodeBlock: {\n /**\n * The position of the live playground, above or under the editor\n * Possible values: \"top\" | \"bottom\"\n */\n playgroundPosition: 'bottom',\n },\n },\n};\n"})})]})}function b(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},71670:(e,t,r)=>{r.d(t,{Z:()=>s,a:()=>l});var n=r(27378);const o={},a=n.createContext(o);function l(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8604db02.11d14f59.js b/assets/js/8604db02.11d14f59.js new file mode 100644 index 0000000000..5159926083 --- /dev/null +++ b/assets/js/8604db02.11d14f59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51161],{1229:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=t(24246),o=t(71670);const i={mdx:{format:"md"},date:"2020-05-19T20:00",authors:["artemkovalyov","fanny","iamrajiv","jcomack","jdeniau","jonnynabors","lex111","marcosvega91","nebrelbug","slorber","taylorreece","yangshun","ykzts"]},r="2.0.0-alpha.55",s={permalink:"/changelog/2.0.0-alpha.55",source:"@site/changelog/source/2.0.0-alpha.55.md",title:"2.0.0-alpha.55",description:"Breaking Change",date:"2020-05-19T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Artem Kovalov",alias:"artemkovalyov",url:"https://github.com/artemkovalyov",imageURL:"https://github.com/artemkovalyov.png",key:"artemkovalyov"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"Rajiv Singh",alias:"iamrajiv",url:"https://github.com/iamrajiv",imageURL:"https://github.com/iamrajiv.png",key:"iamrajiv"},{name:"Jimmy",alias:"jcomack",url:"https://github.com/jcomack",imageURL:"https://github.com/jcomack.png",key:"jcomack"},{name:"Julien Deniau",alias:"jdeniau",url:"https://github.com/jdeniau",imageURL:"https://github.com/jdeniau.png",key:"jdeniau"},{name:"Jonny Nabors",alias:"jonnynabors",url:"https://github.com/jonnynabors",imageURL:"https://github.com/jonnynabors.png",key:"jonnynabors"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Marco Moretti",alias:"marcosvega91",url:"https://github.com/marcosvega91",imageURL:"https://github.com/marcosvega91.png",key:"marcosvega91"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Taylor Reece",alias:"taylorreece",url:"https://github.com/taylorreece",imageURL:"https://github.com/taylorreece.png",key:"taylorreece"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"Yamagishi Kazutoshi",alias:"ykzts",url:"https://github.com/ykzts",imageURL:"https://github.com/ykzts.png",key:"ykzts"}],frontMatter:{mdx:{format:"md"},date:"2020-05-19T20:00",authors:["artemkovalyov","fanny","iamrajiv","jcomack","jdeniau","jonnynabors","lex111","marcosvega91","nebrelbug","slorber","taylorreece","yangshun","ykzts"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.56",permalink:"/changelog/2.0.0-alpha.56"},nextItem:{title:"2.0.0-alpha.54",permalink:"/changelog/2.0.0-alpha.54"},listPageLink:"/changelog/page/4"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function g(a){return(0,n.jsx)(n.Fragment,{})}function u(a={}){const{wrapper:e}={...(0,o.a)(),...a.components};return e?(0,n.jsx)(e,{...a,children:(0,n.jsx)(g,{...a})}):g()}},71670:(a,e,t)=>{t.d(e,{Z:()=>s,a:()=>r});var n=t(27378);const o={},i=n.createContext(o);function r(a){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function s(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(o):a.components||o:r(a.components),n.createElement(i.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/8625da58.98543d3c.js b/assets/js/8625da58.98543d3c.js new file mode 100644 index 0000000000..dc1aa2428f --- /dev/null +++ b/assets/js/8625da58.98543d3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[66530],{33858:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>h,toc:()=>r});var a=n(24246),i=n(71670);const o={mdx:{format:"md"},date:"2022-09-01T20:00",authors:["adventure-yunfei","b-ovsepian","datlechin","Josh-Cena","Kosai106","mdubus","slorber","whiteand","YoniChechik","yzhe819"]},s="2.1.0",h={permalink:"/changelog/2.1.0",source:"@site/changelog/source/2.1.0.md",title:"2.1.0",description:"New Feature",date:"2022-09-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"adventure-yunfei",alias:"adventure-yunfei",url:"https://github.com/adventure-yunfei",imageURL:"https://github.com/adventure-yunfei.png",key:"adventure-yunfei"},{name:"Bagdasar Ovsepyan",alias:"b-ovsepian",url:"https://github.com/b-ovsepian",imageURL:"https://github.com/b-ovsepian.png",key:"b-ovsepian"},{name:"Ng\xf4 Qu\u1ed1c \u0110\u1ea1t",alias:"datlechin",url:"https://github.com/datlechin",imageURL:"https://github.com/datlechin.png",key:"datlechin"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Kevin \xd8sterkilde",alias:"Kosai106",url:"https://github.com/Kosai106",imageURL:"https://github.com/Kosai106.png",key:"Kosai106"},{name:"Morgane Dubus",alias:"mdubus",url:"https://github.com/mdubus",imageURL:"https://github.com/mdubus.png",key:"mdubus"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"whiteand",alias:"whiteand",url:"https://github.com/whiteand",imageURL:"https://github.com/whiteand.png",key:"whiteand"},{name:"Yoni Chechik",alias:"YoniChechik",url:"https://github.com/YoniChechik",imageURL:"https://github.com/YoniChechik.png",key:"YoniChechik"},{name:"yzhe819",alias:"yzhe819",url:"https://github.com/yzhe819",imageURL:"https://github.com/yzhe819.png",key:"yzhe819"}],frontMatter:{mdx:{format:"md"},date:"2022-09-01T20:00",authors:["adventure-yunfei","b-ovsepian","datlechin","Josh-Cena","Kosai106","mdubus","slorber","whiteand","YoniChechik","yzhe819"]},unlisted:!1,prevItem:{title:"2.2.0",permalink:"/changelog/2.2.0"},nextItem:{title:"2.0.1",permalink:"/changelog/2.0.1"},listPageLink:"/changelog/"},u={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},r=[];function c(e){return(0,a.jsx)(a.Fragment,{})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c()}},71670:(e,t,n)=>{n.d(t,{Z:()=>h,a:()=>s});var a=n(27378);const i={},o=a.createContext(i);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function h(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/864aad98.6a35236a.js b/assets/js/864aad98.6a35236a.js new file mode 100644 index 0000000000..5b321bdda7 --- /dev/null +++ b/assets/js/864aad98.6a35236a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[82002],{31491:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>u});var a=t(24246),i=t(71670);const s={mdx:{format:"md"},date:"2019-12-25T20:00",authors:["endiliey","janko","lex111","nickmccurdy","TransmissionsDev","yangshun"]},o="2.0.0-alpha.40",c={permalink:"/changelog/2.0.0-alpha.40",source:"@site/changelog/source/2.0.0-alpha.40.md",title:"2.0.0-alpha.40",description:"New Feature",date:"2019-12-25T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Endi",alias:"endiliey",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endiliey"},{name:"Janko Marohni\u0107",alias:"janko",url:"https://github.com/janko",imageURL:"https://github.com/janko.png",key:"janko"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Nick McCurdy",alias:"nickmccurdy",url:"https://github.com/nickmccurdy",imageURL:"https://github.com/nickmccurdy.png",key:"nickmccurdy"},{name:"t11s",alias:"TransmissionsDev",url:"https://github.com/TransmissionsDev",imageURL:"https://github.com/TransmissionsDev.png",key:"TransmissionsDev"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{mdx:{format:"md"},date:"2019-12-25T20:00",authors:["endiliey","janko","lex111","nickmccurdy","TransmissionsDev","yangshun"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.41",permalink:"/changelog/2.0.0-alpha.41"},nextItem:{title:"2.0.0-alpha.39",permalink:"/changelog/2.0.0-alpha.39"},listPageLink:"/changelog/page/4"},r={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0]},u=[];function l(e){return(0,a.jsx)(a.Fragment,{})}function m(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l()}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>o});var a=t(27378);const i={},s=a.createContext(i);function o(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/869.8077aa62.js b/assets/js/869.8077aa62.js new file mode 100644 index 0000000000..0a928300ca --- /dev/null +++ b/assets/js/869.8077aa62.js @@ -0,0 +1,3447 @@ +"use strict"; +exports.id = 869; +exports.ids = [869]; +exports.modules = { + +/***/ 14869: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(47435); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7608); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27693); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 22], $Va = [1, 23], $Vb = [1, 24], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 34], $Vh = [1, 35], $Vi = [1, 36], $Vj = [1, 37], $Vk = [1, 38], $Vl = [1, 39], $Vm = [1, 40], $Vn = [1, 41], $Vo = [1, 42], $Vp = [1, 44], $Vq = [1, 45], $Vr = [1, 46], $Vs = [1, 48], $Vt = [1, 49], $Vu = [1, 50], $Vv = [1, 51], $Vw = [1, 52], $Vx = [1, 53], $Vy = [1, 56], $Vz = [1, 4, 5, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 53, 54, 55, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $VA = [4, 5, 22, 56, 58, 59], $VB = [4, 5, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $VC = [4, 5, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 55, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $VD = [4, 5, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 54, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $VE = [4, 5, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 53, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $VF = [74, 75, 76], $VG = [1, 133], $VH = [1, 4, 5, 7, 19, 20, 22, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 53, 54, 55, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "box_section": 11, "box_line": 12, "participant_statement": 13, "openDirective": 14, "typeDirective": 15, "closeDirective": 16, ":": 17, "argDirective": 18, "create": 19, "box": 20, "restOfLine": 21, "end": 22, "signal": 23, "autonumber": 24, "NUM": 25, "off": 26, "activate": 27, "actor": 28, "deactivate": 29, "note_statement": 30, "links_statement": 31, "link_statement": 32, "properties_statement": 33, "details_statement": 34, "title": 35, "legacy_title": 36, "acc_title": 37, "acc_title_value": 38, "acc_descr": 39, "acc_descr_value": 40, "acc_descr_multiline_value": 41, "loop": 42, "rect": 43, "opt": 44, "alt": 45, "else_sections": 46, "par": 47, "par_sections": 48, "par_over": 49, "critical": 50, "option_sections": 51, "break": 52, "option": 53, "and": 54, "else": 55, "participant": 56, "AS": 57, "participant_actor": 58, "destroy": 59, "note": 60, "placement": 61, "text2": 62, "over": 63, "actor_pair": 64, "links": 65, "link": 66, "properties": 67, "details": 68, "spaceList": 69, ",": 70, "left_of": 71, "right_of": 72, "signaltype": 73, "+": 74, "-": 75, "ACTOR": 76, "SOLID_OPEN_ARROW": 77, "DOTTED_OPEN_ARROW": 78, "SOLID_ARROW": 79, "DOTTED_ARROW": 80, "SOLID_CROSS": 81, "DOTTED_CROSS": 82, "SOLID_POINT": 83, "DOTTED_POINT": 84, "TXT": 85, "open_directive": 86, "type_directive": 87, "arg_directive": 88, "close_directive": 89, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 7: "SD", 17: ":", 19: "create", 20: "box", 21: "restOfLine", 22: "end", 24: "autonumber", 25: "NUM", 26: "off", 27: "activate", 29: "deactivate", 35: "title", 36: "legacy_title", 37: "acc_title", 38: "acc_title_value", 39: "acc_descr", 40: "acc_descr_value", 41: "acc_descr_multiline_value", 42: "loop", 43: "rect", 44: "opt", 45: "alt", 47: "par", 49: "par_over", 50: "critical", 52: "break", 53: "option", 54: "and", 55: "else", 56: "participant", 57: "AS", 58: "participant_actor", 59: "destroy", 60: "note", 63: "over", 65: "links", 66: "link", 67: "properties", 68: "details", 70: ",", 71: "left_of", 72: "right_of", 74: "+", 75: "-", 76: "ACTOR", 77: "SOLID_OPEN_ARROW", 78: "DOTTED_OPEN_ARROW", 79: "SOLID_ARROW", 80: "DOTTED_ARROW", 81: "SOLID_CROSS", 82: "DOTTED_CROSS", 83: "SOLID_POINT", 84: "DOTTED_POINT", 85: "TXT", 86: "open_directive", 87: "type_directive", 88: "arg_directive", 89: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [11, 0], [11, 2], [12, 2], [12, 1], [12, 1], [6, 4], [6, 6], [10, 1], [10, 2], [10, 4], [10, 2], [10, 4], [10, 3], [10, 3], [10, 2], [10, 3], [10, 3], [10, 2], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 1], [51, 1], [51, 4], [48, 1], [48, 4], [46, 1], [46, 4], [13, 5], [13, 3], [13, 5], [13, 3], [13, 3], [30, 4], [30, 4], [31, 3], [32, 3], [33, 3], [34, 3], [69, 2], [69, 1], [64, 3], [64, 1], [61, 1], [61, 1], [23, 5], [23, 5], [23, 4], [28, 1], [73, 1], [73, 1], [73, 1], [73, 1], [73, 1], [73, 1], [73, 1], [73, 1], [62, 1], [14, 1], [15, 1], [18, 1], [16, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.apply($$[$0]); + return $$[$0]; + case 5: + case 10: + this.$ = []; + break; + case 6: + case 11: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 7: + case 8: + case 12: + case 13: + this.$ = $$[$0]; + break; + case 9: + case 14: + this.$ = []; + break; + case 18: + $$[$0].type = "createParticipant"; + this.$ = $$[$0]; + break; + case 19: + $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); + $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); + this.$ = $$[$0 - 1]; + break; + case 21: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 22: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 23: + this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 24: + this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 25: + this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }; + break; + case 26: + this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] }; + break; + case 32: + yy.setDiagramTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 33: + yy.setDiagramTitle($$[$0].substring(7)); + this.$ = $$[$0].substring(7); + break; + case 34: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 35: + case 36: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 37: + $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); + $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); + this.$ = $$[$0 - 1]; + break; + case 38: + $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); + $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); + this.$ = $$[$0 - 1]; + break; + case 39: + $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); + $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); + this.$ = $$[$0 - 1]; + break; + case 40: + $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); + $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); + this.$ = $$[$0 - 1]; + break; + case 41: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 42: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 43: + $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); + $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); + this.$ = $$[$0 - 1]; + break; + case 44: + $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); + $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); + this.$ = $$[$0 - 1]; + break; + case 47: + this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); + break; + case 49: + this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); + break; + case 51: + this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); + break; + case 52: + $$[$0 - 3].draw = "participant"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 53: + $$[$0 - 1].draw = "participant"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 54: + $$[$0 - 3].draw = "actor"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 55: + $$[$0 - 1].draw = "actor"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 56: + $$[$0 - 1].type = "destroyParticipant"; + this.$ = $$[$0 - 1]; + break; + case 57: + this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 58: + $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); + $$[$0 - 2][0] = $$[$0 - 2][0].actor; + $$[$0 - 2][1] = $$[$0 - 2][1].actor; + this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; + break; + case 59: + this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 60: + this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 61: + this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 62: + this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 65: + this.$ = [$$[$0 - 2], $$[$0]]; + break; + case 66: + this.$ = $$[$0]; + break; + case 67: + this.$ = yy.PLACEMENT.LEFTOF; + break; + case 68: + this.$ = yy.PLACEMENT.RIGHTOF; + break; + case 69: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] } + ]; + break; + case 70: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] } + ]; + break; + case 71: + this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; + break; + case 72: + this.$ = { type: "addParticipant", actor: $$[$0] }; + break; + case 73: + this.$ = yy.LINETYPE.SOLID_OPEN; + break; + case 74: + this.$ = yy.LINETYPE.DOTTED_OPEN; + break; + case 75: + this.$ = yy.LINETYPE.SOLID; + break; + case 76: + this.$ = yy.LINETYPE.DOTTED; + break; + case 77: + this.$ = yy.LINETYPE.SOLID_CROSS; + break; + case 78: + this.$ = yy.LINETYPE.DOTTED_CROSS; + break; + case 79: + this.$ = yy.LINETYPE.SOLID_POINT; + break; + case 80: + this.$ = yy.LINETYPE.DOTTED_POINT; + break; + case 81: + this.$ = yy.parseMessage($$[$0].trim().substring(1)); + break; + case 82: + yy.parseDirective("%%{", "open_directive"); + break; + case 83: + yy.parseDirective($$[$0], "type_directive"); + break; + case 84: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 85: + yy.parseDirective("}%%", "close_directive", "sequence"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 86: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 86: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 86: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 86: $V3 }, o([1, 4, 5, 19, 20, 24, 27, 29, 35, 36, 37, 39, 41, 42, 43, 44, 45, 47, 49, 50, 52, 56, 58, 59, 60, 65, 66, 67, 68, 76, 86], $V4, { 8: 11 }), { 15: 12, 87: [1, 13] }, { 87: [2, 82] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 16: 54, 17: [1, 55], 89: $Vy }, o([17, 89], [2, 83]), o($Vz, [2, 6]), { 6: 43, 10: 57, 13: 18, 14: 6, 19: $V7, 20: $V8, 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, o($Vz, [2, 8]), o($Vz, [2, 9]), o($Vz, [2, 17]), { 13: 58, 56: $Vp, 58: $Vq, 59: $Vr }, { 21: [1, 59] }, { 5: [1, 60] }, { 5: [1, 63], 25: [1, 61], 26: [1, 62] }, { 28: 64, 76: $Vx }, { 28: 65, 76: $Vx }, { 5: [1, 66] }, { 5: [1, 67] }, { 5: [1, 68] }, { 5: [1, 69] }, { 5: [1, 70] }, o($Vz, [2, 32]), o($Vz, [2, 33]), { 38: [1, 71] }, { 40: [1, 72] }, o($Vz, [2, 36]), { 21: [1, 73] }, { 21: [1, 74] }, { 21: [1, 75] }, { 21: [1, 76] }, { 21: [1, 77] }, { 21: [1, 78] }, { 21: [1, 79] }, { 21: [1, 80] }, o($Vz, [2, 45]), { 28: 81, 76: $Vx }, { 28: 82, 76: $Vx }, { 28: 83, 76: $Vx }, { 73: 84, 77: [1, 85], 78: [1, 86], 79: [1, 87], 80: [1, 88], 81: [1, 89], 82: [1, 90], 83: [1, 91], 84: [1, 92] }, { 61: 93, 63: [1, 94], 71: [1, 95], 72: [1, 96] }, { 28: 97, 76: $Vx }, { 28: 98, 76: $Vx }, { 28: 99, 76: $Vx }, { 28: 100, 76: $Vx }, o([5, 57, 70, 77, 78, 79, 80, 81, 82, 83, 84, 85], [2, 72]), { 5: [1, 101] }, { 18: 102, 88: [1, 103] }, { 5: [2, 85] }, o($Vz, [2, 7]), o($Vz, [2, 18]), o($VA, [2, 10], { 11: 104 }), o($Vz, [2, 20]), { 5: [1, 106], 25: [1, 105] }, { 5: [1, 107] }, o($Vz, [2, 24]), { 5: [1, 108] }, { 5: [1, 109] }, o($Vz, [2, 27]), o($Vz, [2, 28]), o($Vz, [2, 29]), o($Vz, [2, 30]), o($Vz, [2, 31]), o($Vz, [2, 34]), o($Vz, [2, 35]), o($VB, $V4, { 8: 110 }), o($VB, $V4, { 8: 111 }), o($VB, $V4, { 8: 112 }), o($VC, $V4, { 46: 113, 8: 114 }), o($VD, $V4, { 48: 115, 8: 116 }), o($VD, $V4, { 8: 116, 48: 117 }), o($VE, $V4, { 51: 118, 8: 119 }), o($VB, $V4, { 8: 120 }), { 5: [1, 122], 57: [1, 121] }, { 5: [1, 124], 57: [1, 123] }, { 5: [1, 125] }, { 28: 128, 74: [1, 126], 75: [1, 127], 76: $Vx }, o($VF, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), o($VF, [2, 76]), o($VF, [2, 77]), o($VF, [2, 78]), o($VF, [2, 79]), o($VF, [2, 80]), { 28: 129, 76: $Vx }, { 28: 131, 64: 130, 76: $Vx }, { 76: [2, 67] }, { 76: [2, 68] }, { 62: 132, 85: $VG }, { 62: 134, 85: $VG }, { 62: 135, 85: $VG }, { 62: 136, 85: $VG }, o($VH, [2, 15]), { 16: 137, 89: $Vy }, { 89: [2, 84] }, { 4: [1, 140], 5: [1, 142], 12: 139, 13: 141, 22: [1, 138], 56: $Vp, 58: $Vq, 59: $Vr }, { 5: [1, 143] }, o($Vz, [2, 22]), o($Vz, [2, 23]), o($Vz, [2, 25]), o($Vz, [2, 26]), { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [1, 144], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [1, 145], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [1, 146], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 22: [1, 147] }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [2, 50], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 55: [1, 148], 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 22: [1, 149] }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [2, 48], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 54: [1, 150], 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 22: [1, 151] }, { 22: [1, 152] }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [2, 46], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 53: [1, 153], 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 4: $V5, 5: $V6, 6: 43, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 20: $V8, 22: [1, 154], 23: 21, 24: $V9, 27: $Va, 28: 47, 29: $Vb, 30: 25, 31: 26, 32: 27, 33: 28, 34: 29, 35: $Vc, 36: $Vd, 37: $Ve, 39: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 45: $Vk, 47: $Vl, 49: $Vm, 50: $Vn, 52: $Vo, 56: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 65: $Vt, 66: $Vu, 67: $Vv, 68: $Vw, 76: $Vx, 86: $V3 }, { 21: [1, 155] }, o($Vz, [2, 53]), { 21: [1, 156] }, o($Vz, [2, 55]), o($Vz, [2, 56]), { 28: 157, 76: $Vx }, { 28: 158, 76: $Vx }, { 62: 159, 85: $VG }, { 62: 160, 85: $VG }, { 62: 161, 85: $VG }, { 70: [1, 162], 85: [2, 66] }, { 5: [2, 59] }, { 5: [2, 81] }, { 5: [2, 60] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [1, 163] }, o($Vz, [2, 19]), o($VA, [2, 11]), { 13: 164, 56: $Vp, 58: $Vq, 59: $Vr }, o($VA, [2, 13]), o($VA, [2, 14]), o($Vz, [2, 21]), o($Vz, [2, 37]), o($Vz, [2, 38]), o($Vz, [2, 39]), o($Vz, [2, 40]), { 21: [1, 165] }, o($Vz, [2, 41]), { 21: [1, 166] }, o($Vz, [2, 42]), o($Vz, [2, 43]), { 21: [1, 167] }, o($Vz, [2, 44]), { 5: [1, 168] }, { 5: [1, 169] }, { 62: 170, 85: $VG }, { 62: 171, 85: $VG }, { 5: [2, 71] }, { 5: [2, 57] }, { 5: [2, 58] }, { 28: 172, 76: $Vx }, o($VH, [2, 16]), o($VA, [2, 12]), o($VC, $V4, { 8: 114, 46: 173 }), o($VD, $V4, { 8: 116, 48: 174 }), o($VE, $V4, { 8: 119, 51: 175 }), o($Vz, [2, 52]), o($Vz, [2, 54]), { 5: [2, 69] }, { 5: [2, 70] }, { 85: [2, 65] }, { 22: [2, 51] }, { 22: [2, 49] }, { 22: [2, 47] }], + defaultActions: { 7: [2, 82], 8: [2, 1], 9: [2, 2], 10: [2, 3], 56: [2, 85], 95: [2, 67], 96: [2, 68], 103: [2, 84], 132: [2, 59], 133: [2, 81], 134: [2, 60], 135: [2, 61], 136: [2, 62], 159: [2, 71], 160: [2, 57], 161: [2, 58], 170: [2, 69], 171: [2, 70], 172: [2, 65], 173: [2, 51], 174: [2, 49], 175: [2, 47] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 86; + case 1: + this.begin("type_directive"); + return 87; + case 2: + this.popState(); + this.begin("arg_directive"); + return 17; + case 3: + this.popState(); + this.popState(); + return 89; + case 4: + return 88; + case 5: + return 5; + case 6: + break; + case 7: + break; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + return 25; + case 12: + this.begin("LINE"); + return 20; + case 13: + this.begin("ID"); + return 56; + case 14: + this.begin("ID"); + return 58; + case 15: + return 19; + case 16: + this.begin("ID"); + return 59; + case 17: + yy_.yytext = yy_.yytext.trim(); + this.begin("ALIAS"); + return 76; + case 18: + this.popState(); + this.popState(); + this.begin("LINE"); + return 57; + case 19: + this.popState(); + this.popState(); + return 5; + case 20: + this.begin("LINE"); + return 42; + case 21: + this.begin("LINE"); + return 43; + case 22: + this.begin("LINE"); + return 44; + case 23: + this.begin("LINE"); + return 45; + case 24: + this.begin("LINE"); + return 55; + case 25: + this.begin("LINE"); + return 47; + case 26: + this.begin("LINE"); + return 49; + case 27: + this.begin("LINE"); + return 54; + case 28: + this.begin("LINE"); + return 50; + case 29: + this.begin("LINE"); + return 53; + case 30: + this.begin("LINE"); + return 52; + case 31: + this.popState(); + return 21; + case 32: + return 22; + case 33: + return 71; + case 34: + return 72; + case 35: + return 65; + case 36: + return 66; + case 37: + return 67; + case 38: + return 68; + case 39: + return 63; + case 40: + return 60; + case 41: + this.begin("ID"); + return 27; + case 42: + this.begin("ID"); + return 29; + case 43: + return 35; + case 44: + return 36; + case 45: + this.begin("acc_title"); + return 37; + case 46: + this.popState(); + return "acc_title_value"; + case 47: + this.begin("acc_descr"); + return 39; + case 48: + this.popState(); + return "acc_descr_value"; + case 49: + this.begin("acc_descr_multiline"); + break; + case 50: + this.popState(); + break; + case 51: + return "acc_descr_multiline_value"; + case 52: + return 7; + case 53: + return 24; + case 54: + return 26; + case 55: + return 70; + case 56: + return 5; + case 57: + yy_.yytext = yy_.yytext.trim(); + return 76; + case 58: + return 79; + case 59: + return 80; + case 60: + return 77; + case 61: + return 78; + case 62: + return 81; + case 63: + return 82; + case 64: + return 83; + case 65: + return 84; + case 66: + return 85; + case 67: + return 74; + case 68: + return 75; + case 69: + return 5; + case 70: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [50, 51], "inclusive": false }, "acc_descr": { "rules": [48], "inclusive": false }, "acc_title": { "rules": [46], "inclusive": false }, "open_directive": { "rules": [1, 8], "inclusive": false }, "type_directive": { "rules": [2, 3, 8], "inclusive": false }, "arg_directive": { "rules": [3, 4, 8], "inclusive": false }, "ID": { "rules": [7, 8, 17], "inclusive": false }, "ALIAS": { "rules": [7, 8, 18, 19], "inclusive": false }, "LINE": { "rules": [7, 8, 31], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 49, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let prevActor = void 0; +let actors = {}; +let createdActors = {}; +let destroyedActors = {}; +let boxes = []; +let messages = []; +let sequenceNumbersEnabled = false; +let wrapEnabled; +let currentBox = void 0; +let lastCreated = void 0; +let lastDestroyed = void 0; +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.m.parseDirective(this, statement, context, type); +}; +const addBox = function(data) { + boxes.push({ + name: data.text, + wrap: data.wrap === void 0 && autoWrap() || !!data.wrap, + fill: data.color, + actorKeys: [] + }); + currentBox = boxes.slice(-1)[0]; +}; +const addActor = function(id, name, description, type) { + let assignedBox = currentBox; + const old = actors[id]; + if (old) { + if (currentBox && old.box && currentBox !== old.box) { + throw new Error( + "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + currentBox.name + "' at the same time." + ); + } + assignedBox = old.box ? old.box : currentBox; + old.box = assignedBox; + if (old && name === old.name && description == null) { + return; + } + } + if (description == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + if (type == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + actors[id] = { + box: assignedBox, + name, + description: description.text, + wrap: description.wrap === void 0 && autoWrap() || !!description.wrap, + prevActor, + links: {}, + properties: {}, + actorCnt: null, + rectData: null, + type: type || "participant" + }; + if (prevActor && actors[prevActor]) { + actors[prevActor].nextActor = id; + } + if (currentBox) { + currentBox.actorKeys.push(id); + } + prevActor = id; +}; +const activationCount = (part) => { + let i; + let count = 0; + for (i = 0; i < messages.length; i++) { + if (messages[i].type === LINETYPE.ACTIVE_START && messages[i].from.actor === part) { + count++; + } + if (messages[i].type === LINETYPE.ACTIVE_END && messages[i].from.actor === part) { + count--; + } + } + return count; +}; +const addMessage = function(idFrom, idTo, message, answer) { + messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + answer + }); +}; +const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType) { + if (messageType === LINETYPE.ACTIVE_END) { + const cnt = activationCount(idFrom.actor); + if (cnt < 1) { + let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")"); + error.hash = { + text: "->>-", + token: "->>-", + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["'ACTIVE_PARTICIPANT'"] + }; + throw error; + } + } + messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: messageType + }); + return true; +}; +const hasAtLeastOneBox = function() { + return boxes.length > 0; +}; +const hasAtLeastOneBoxWithTitle = function() { + return boxes.some((b) => b.name); +}; +const getMessages = function() { + return messages; +}; +const getBoxes = function() { + return boxes; +}; +const getActors = function() { + return actors; +}; +const getCreatedActors = function() { + return createdActors; +}; +const getDestroyedActors = function() { + return destroyedActors; +}; +const getActor = function(id) { + return actors[id]; +}; +const getActorKeys = function() { + return Object.keys(actors); +}; +const enableSequenceNumbers = function() { + sequenceNumbersEnabled = true; +}; +const disableSequenceNumbers = function() { + sequenceNumbersEnabled = false; +}; +const showSequenceNumbers = () => sequenceNumbersEnabled; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = () => { + if (wrapEnabled !== void 0) { + return wrapEnabled; + } + return (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence.wrap; +}; +const clear = function() { + actors = {}; + createdActors = {}; + destroyedActors = {}; + boxes = []; + messages = []; + sequenceNumbersEnabled = false; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const parseMessage = function(str) { + const _str = str.trim(); + const message = { + text: _str.replace(/^:?(?:no)?wrap:/, "").trim(), + wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0 + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("parseMessage:", message); + return message; +}; +const parseBoxData = function(str) { + const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/); + let color = match != null && match[1] ? match[1].trim() : "transparent"; + let title = match != null && match[2] ? match[2].trim() : void 0; + if (window && window.CSS) { + if (!window.CSS.supports("color", color)) { + color = "transparent"; + title = str.trim(); + } + } else { + const style = new Option().style; + style.color = color; + if (style.color !== color) { + color = "transparent"; + title = str.trim(); + } + } + const boxData = { + color, + text: title !== void 0 ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : void 0, + wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0 + }; + return boxData; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25, + AUTONUMBER: 26, + CRITICAL_START: 27, + CRITICAL_OPTION: 28, + CRITICAL_END: 29, + BREAK_START: 30, + BREAK_END: 31, + PAR_OVER_START: 32 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const addNote = function(actor, placement, message) { + ({ + actor, + placement, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap + }); + const actors2 = [].concat(actor, actor); + messages.push({ + from: actors2[0], + to: actors2[1], + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: LINETYPE.NOTE, + placement + }); +}; +const addLinks = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + const links = JSON.parse(sanitizedText); + insertLinks(actor, links); + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +const addALink = function(actorId, text) { + const actor = getActor(actorId); + try { + const links = {}; + let sanitizedText = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + var sep = sanitizedText.indexOf("@"); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + var label = sanitizedText.slice(0, sep - 1).trim(); + var link = sanitizedText.slice(sep + 1).trim(); + links[label] = link; + insertLinks(actor, links); + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +function insertLinks(actor, links) { + if (actor.links == null) { + actor.links = links; + } else { + for (let key in links) { + actor.links[key] = links[key]; + } + } +} +const addProperties = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const properties = JSON.parse(sanitizedText); + insertProperties(actor, properties); + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor properties text", e); + } +}; +function insertProperties(actor, properties) { + if (actor.properties == null) { + actor.properties = properties; + } else { + for (let key in properties) { + actor.properties[key] = properties[key]; + } + } +} +function boxEnd() { + currentBox = void 0; +} +const addDetails = function(actorId, text) { + const actor = getActor(actorId); + const elem = document.getElementById(text.text); + try { + const text2 = elem.innerHTML; + const details = JSON.parse(text2); + if (details["properties"]) { + insertProperties(actor, details["properties"]); + } + if (details["links"]) { + insertLinks(actor, details["links"]); + } + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor details text", e); + } +}; +const getActorProperty = function(actor, key) { + if (actor !== void 0 && actor.properties !== void 0) { + return actor.properties[key]; + } + return void 0; +}; +const apply = function(param) { + if (Array.isArray(param)) { + param.forEach(function(item) { + apply(item); + }); + } else { + switch (param.type) { + case "sequenceIndex": + messages.push({ + from: void 0, + to: void 0, + message: { + start: param.sequenceIndex, + step: param.sequenceIndexStep, + visible: param.sequenceVisible + }, + wrap: false, + type: param.signalType + }); + break; + case "addParticipant": + addActor(param.actor, param.actor, param.description, param.draw); + break; + case "createParticipant": + if (actors[param.actor]) { + throw new Error( + "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior" + ); + } + lastCreated = param.actor; + addActor(param.actor, param.actor, param.description, param.draw); + createdActors[param.actor] = messages.length; + break; + case "destroyParticipant": + lastDestroyed = param.actor; + destroyedActors[param.actor] = messages.length; + break; + case "activeStart": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "activeEnd": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "addNote": + addNote(param.actor, param.placement, param.text); + break; + case "addLinks": + addLinks(param.actor, param.text); + break; + case "addALink": + addALink(param.actor, param.text); + break; + case "addProperties": + addProperties(param.actor, param.text); + break; + case "addDetails": + addDetails(param.actor, param.text); + break; + case "addMessage": + if (lastCreated) { + if (param.to !== lastCreated) { + throw new Error( + "The created participant " + lastCreated + " does not have an associated creating message after its declaration. Please check the sequence diagram." + ); + } else { + lastCreated = void 0; + } + } else if (lastDestroyed) { + if (param.to !== lastDestroyed && param.from !== lastDestroyed) { + throw new Error( + "The destroyed participant " + lastDestroyed + " does not have an associated destroying message after its declaration. Please check the sequence diagram." + ); + } else { + lastDestroyed = void 0; + } + } + addSignal(param.from, param.to, param.msg, param.signalType); + break; + case "boxStart": + addBox(param.boxData); + break; + case "boxEnd": + boxEnd(); + break; + case "loopStart": + addSignal(void 0, void 0, param.loopText, param.signalType); + break; + case "loopEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "rectStart": + addSignal(void 0, void 0, param.color, param.signalType); + break; + case "rectEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "optStart": + addSignal(void 0, void 0, param.optText, param.signalType); + break; + case "optEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "altStart": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "else": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "altEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "setAccTitle": + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s)(param.text); + break; + case "parStart": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "and": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "parEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "criticalStart": + addSignal(void 0, void 0, param.criticalText, param.signalType); + break; + case "option": + addSignal(void 0, void 0, param.optionText, param.signalType); + break; + case "criticalEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "breakStart": + addSignal(void 0, void 0, param.breakText, param.signalType); + break; + case "breakEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + } + } +}; +const db = { + addActor, + addMessage, + addSignal, + addLinks, + addDetails, + addProperties, + autoWrap, + setWrap, + enableSequenceNumbers, + disableSequenceNumbers, + showSequenceNumbers, + getMessages, + getActors, + getCreatedActors, + getDestroyedActors, + getActor, + getActorKeys, + getActorProperty, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + getBoxes, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.r, + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence, + clear, + parseMessage, + parseBoxData, + LINETYPE, + ARROWTYPE, + PLACEMENT, + addNote, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + apply, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + hasAtLeastOneBox, + hasAtLeastOneBoxWithTitle +}; +const getStyles = (options) => `.actor { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + + text.actor > tspan { + fill: ${options.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${options.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${options.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${options.signalColor}; + } + + #arrowhead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .sequenceNumber { + fill: ${options.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${options.signalColor}; + } + + #crosshead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .messageText { + fill: ${options.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${options.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${options.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${options.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation1 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation2 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${options.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + .actor-man circle, line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + stroke-width: 2px; + } +`; +const styles = getStyles; +const ACTOR_TYPE_WIDTH = 18 * 2; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const addPopupInteraction = (id, actorCnt2) => { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.H)(() => { + const arr = document.querySelectorAll(id); + if (arr.length === 0) { + return; + } + arr[0].addEventListener("mouseover", function() { + popupMenuUpFunc("actor" + actorCnt2 + "_popup"); + }); + arr[0].addEventListener("mouseout", function() { + popupMenuDownFunc("actor" + actorCnt2 + "_popup"); + }); + }); +}; +const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) { + if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { + return { height: 0, width: 0 }; + } + const links = actor.links; + const actorCnt2 = actor.actorCnt; + const rectData = actor.rectData; + var displayValue = "none"; + if (forceMenus) { + displayValue = "block !important"; + } + const g = elem.append("g"); + g.attr("id", "actor" + actorCnt2 + "_popup"); + g.attr("class", "actorPopupMenu"); + g.attr("display", displayValue); + addPopupInteraction("#actor" + actorCnt2 + "_popup", actorCnt2); + var actorClass = ""; + if (rectData.class !== void 0) { + actorClass = " " + rectData.class; + } + let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; + const rectElem = g.append("rect"); + rectElem.attr("class", "actorPopupMenuPanel" + actorClass); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.height); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", menuWidth); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (links != null) { + var linkY = 20; + for (let key in links) { + var linkElem = g.append("a"); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(links[key]); + linkElem.attr("xlink:href", sanitizedLink); + linkElem.attr("target", "_blank"); + _drawMenuItemTextCandidateFunc(textAttrs)( + key, + linkElem, + rectData.x + 10, + rectData.height + linkY, + menuWidth, + 20, + { class: "actor" }, + textAttrs + ); + linkY += 30; + } + } + rectElem.attr("height", linkY); + return { height: rectData.height + linkY, width: menuWidth }; +}; +const popupMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }"; +}; +const popdownMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }"; +}; +const popupMenuUpFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "block"; + } +}; +const popupMenuDownFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "none"; + } +}; +const drawText = function(elem, textData) { + let prevTextHeight = 0; + let textHeight = 0; + const lines = textData.text.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + const [_textFontSize, _textFontSizePx] = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.F)(textData.fontSize); + let textElems = []; + let dy = 0; + let yfunc = () => textData.y; + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + switch (textData.valign) { + case "top": + case "start": + yfunc = () => Math.round(textData.y + textData.textMargin); + break; + case "middle": + case "center": + yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); + break; + case "bottom": + case "end": + yfunc = () => Math.round( + textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin + ); + break; + } + } + if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { + switch (textData.anchor) { + case "left": + case "start": + textData.x = Math.round(textData.x + textData.textMargin); + textData.anchor = "start"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "middle": + case "center": + textData.x = Math.round(textData.x + textData.width / 2); + textData.anchor = "middle"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "right": + case "end": + textData.x = Math.round(textData.x + textData.width - textData.textMargin); + textData.anchor = "end"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + } + } + for (let [i, line] of lines.entries()) { + if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { + dy = i * _textFontSize; + } + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", yfunc()); + if (textData.anchor !== void 0) { + textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); + } + if (textData.fontFamily !== void 0) { + textElem.style("font-family", textData.fontFamily); + } + if (_textFontSizePx !== void 0) { + textElem.style("font-size", _textFontSizePx); + } + if (textData.fontWeight !== void 0) { + textElem.style("font-weight", textData.fontWeight); + } + if (textData.fill !== void 0) { + textElem.attr("fill", textData.fill); + } + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + if (textData.dy !== void 0) { + textElem.attr("dy", textData.dy); + } else if (dy !== 0) { + textElem.attr("dy", dy); + } + const text = line || _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.Z; + if (textData.tspan) { + const span = textElem.append("tspan"); + span.attr("x", textData.x); + if (textData.fill !== void 0) { + span.attr("fill", textData.fill); + } + span.text(text); + } else { + textElem.text(text); + } + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + textHeight += (textElem._groups || textElem)[0][0].getBBox().height; + prevTextHeight = textHeight; + } + textElems.push(textElem); + } + return textElems; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.height / 2; + drawText(elem, txtObject); + return polygon; +}; +let actorCnt = -1; +const fixLifeLineHeights = (diagram2, actors2, actorKeys, conf2) => { + if (!diagram2.select) { + return; + } + actorKeys.forEach((actorKey) => { + const actor = actors2[actorKey]; + const actorDOM = diagram2.select("#actor" + actor.actorCnt); + if (!conf2.mirrorActors && actor.stopy) { + actorDOM.attr("y2", actor.stopy + actor.height / 2); + } else if (conf2.mirrorActors) { + actorDOM.attr("y2", actor.stopy); + } + }); +}; +const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 5; + const boxpluslineGroup = elem.append("g").lower(); + var g = boxpluslineGroup; + if (!isFooter) { + actorCnt++; + g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + g = boxpluslineGroup.append("g"); + actor.actorCnt = actorCnt; + if (actor.links != null) { + g.attr("id", "root-" + actorCnt); + addPopupInteraction("#root-" + actorCnt, actorCnt); + } + } + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + var cssclass = "actor"; + if (actor.properties != null && actor.properties["class"]) { + cssclass = actor.properties["class"]; + } else { + rect.fill = "#eaeaea"; + } + rect.x = actor.x; + rect.y = actorY; + rect.width = actor.width; + rect.height = actor.height; + rect.class = cssclass; + rect.rx = 3; + rect.ry = 3; + const rectElem = drawRect(g, rect); + actor.rectData = rect; + if (actor.properties != null && actor.properties["icon"]) { + const iconSrc = actor.properties["icon"].trim(); + if (iconSrc.charAt(0) === "@") { + (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); + } else { + (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); + } + } + _drawTextCandidateFunc(conf2)( + actor.description, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + let height = actor.height; + if (rectElem.node) { + const bounds2 = rectElem.node().getBBox(); + actor.height = bounds2.height; + height = bounds2.height; + } + return height; +}; +const drawActorTypeActor = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 80; + elem.lower(); + if (!isFooter) { + actorCnt++; + elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + actor.actorCnt = actorCnt; + } + const actElem = elem.append("g"); + actElem.attr("class", "actor-man"); + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = actor.x; + rect.y = actorY; + rect.fill = "#eaeaea"; + rect.width = actor.width; + rect.height = actor.height; + rect.class = "actor"; + rect.rx = 3; + rect.ry = 3; + actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actorY + 25).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); + actElem.append("line").attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("x1", center).attr("y1", actorY + 45).attr("x2", center + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); + const circle = actElem.append("circle"); + circle.attr("cx", actor.x + actor.width / 2); + circle.attr("cy", actorY + 10); + circle.attr("r", 15); + circle.attr("width", actor.width); + circle.attr("height", actor.height); + const bounds2 = actElem.node().getBBox(); + actor.height = bounds2.height; + _drawTextCandidateFunc(conf2)( + actor.description, + actElem, + rect.x, + rect.y + 35, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + return actor.height; +}; +const drawActor = function(elem, actor, conf2, isFooter) { + switch (actor.type) { + case "actor": + return drawActorTypeActor(elem, actor, conf2, isFooter); + case "participant": + return drawActorTypeParticipant(elem, actor, conf2, isFooter); + } +}; +const drawBox = function(elem, box, conf2) { + const boxplustextGroup = elem.append("g"); + const g = boxplustextGroup; + drawBackgroundRect(g, box); + if (box.name) { + _drawTextCandidateFunc(conf2)( + box.name, + g, + box.x, + box.y + (box.textMaxHeight || 0) / 2, + box.width, + 0, + { class: "text" }, + conf2 + ); + } + g.lower(); +}; +const anchorElement = function(elem) { + return elem.append("g"); +}; +const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) { + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + const g = bounds2.anchored; + rect.x = bounds2.startx; + rect.y = bounds2.starty; + rect.class = "activation" + actorActivations2 % 3; + rect.width = bounds2.stopx - bounds2.startx; + rect.height = verticalPos - bounds2.starty; + drawRect(g, rect); +}; +const drawLoop = function(elem, loopModel, labelText, conf2) { + const { + boxMargin, + boxTextMargin, + labelBoxHeight, + labelBoxWidth, + messageFontFamily: fontFamily, + messageFontSize: fontSize, + messageFontWeight: fontWeight + } = conf2; + const g = elem.append("g"); + const drawLoopLine = function(startx, starty, stopx, stopy) { + return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); + }; + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); + drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); + if (loopModel.sections !== void 0) { + loopModel.sections.forEach(function(item) { + drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( + "stroke-dasharray", + "3, 3" + ); + }); + } + let txt = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + txt.text = labelText; + txt.x = loopModel.startx; + txt.y = loopModel.starty; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.width = labelBoxWidth || 50; + txt.height = labelBoxHeight || 20; + txt.textMargin = boxTextMargin; + txt.class = "labelText"; + drawLabel(g, txt); + txt = getTextObj(); + txt.text = loopModel.title; + txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.starty + boxMargin + boxTextMargin; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.textMargin = boxTextMargin; + txt.class = "loopText"; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = true; + let textElem = drawText(g, txt); + if (loopModel.sectionTitles !== void 0) { + loopModel.sectionTitles.forEach(function(item, idx) { + if (item.message) { + txt.text = item.message; + txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; + txt.class = "loopText"; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = loopModel.wrap; + textElem = drawText(g, txt); + let sectionHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); + } + }); + } + loopModel.height = Math.round(loopModel.stopy - loopModel.starty); + return g; +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertSequenceNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 5); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + anchor: void 0, + style: "#666", + width: void 0, + height: void 0, + textMargin: 0, + rx: 0, + ry: 0, + tspan: true, + valign: void 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + fill: "#EDF2AE", + stroke: "#666", + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.F)(actorFontSize); + const lines = content.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const _drawMenuItemTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const lines = content.split(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawText, + drawLabel, + drawActor, + drawBox, + drawPopup, + anchorElement, + drawActivation, + drawLoop, + drawBackgroundRect, + insertArrowHead, + insertArrowFilledHead, + insertSequenceNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon, + getTextObj, + getNoteRect, + popupMenu, + popdownMenu, + fixLifeLineHeights, + sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm +}; +let conf = {}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + activations: [], + models: { + getHeight: function() { + return Math.max.apply( + null, + this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) + ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)); + }, + clear: function() { + this.actors = []; + this.boxes = []; + this.loops = []; + this.messages = []; + this.notes = []; + }, + addBox: function(boxModel) { + this.boxes.push(boxModel); + }, + addActor: function(actorModel) { + this.actors.push(actorModel); + }, + addLoop: function(loopModel) { + this.loops.push(loopModel); + }, + addMessage: function(msgModel) { + this.messages.push(msgModel); + }, + addNote: function(noteModel) { + this.notes.push(noteModel); + }, + lastActor: function() { + return this.actors[this.actors.length - 1]; + }, + lastLoop: function() { + return this.loops[this.loops.length - 1]; + }, + lastMessage: function() { + return this.messages[this.messages.length - 1]; + }, + lastNote: function() { + return this.notes[this.notes.length - 1]; + }, + actors: [], + boxes: [], + loops: [], + messages: [], + notes: [] + }, + init: function() { + this.sequenceItems = []; + this.activations = []; + this.models.clear(); + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + setConf((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + this.activations.forEach(updateFn("activation")); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(startx, stopx); + const _stopx = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(startx, stopx); + const _starty = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(starty, stopy); + const _stopy = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + newActivation: function(message, diagram2, actors2) { + const actorRect = actors2[message.from.actor]; + const stackedSize = actorActivations(message.from.actor).length || 0; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + this.activations.push({ + startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: void 0, + actor: message.from.actor, + anchored: svgDraw.anchorElement(diagram2) + }); + }, + endActivation: function(message) { + const lastActorActivationIdx = this.activations.map(function(activation) { + return activation.actor; + }).lastIndexOf(message.from.actor); + return this.activations.splice(lastActorActivationIdx, 1)[0]; + }, + createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + return { + startx: void 0, + starty: this.verticalPos, + stopx: void 0, + stopy: void 0, + title: title.message, + wrap: title.wrap, + width: title.width, + height: 0, + fill + }; + }, + newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + this.sequenceItems.push(this.createLoop(title, fill)); + }, + endLoop: function() { + return this.sequenceItems.pop(); + }, + isLoopOverlap: function() { + return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false; + }, + addSectionToLoop: function(message) { + const loop = this.sequenceItems.pop(); + loop.sections = loop.sections || []; + loop.sectionTitles = loop.sectionTitles || []; + loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); + loop.sectionTitles.push(message); + this.sequenceItems.push(loop); + }, + saveVerticalPos: function() { + if (this.isLoopOverlap()) { + this.savedVerticalPos = this.verticalPos; + } + }, + resetVerticalPos: function() { + if (this.isLoopOverlap()) { + this.verticalPos = this.savedVerticalPos; + } + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(this.data.stopy, this.verticalPos); + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return { bounds: this.data, models: this.models }; + } +}; +const drawNote = function(elem, noteModel) { + bounds.bumpVerticalPos(conf.boxMargin); + noteModel.height = conf.boxMargin; + noteModel.starty = bounds.getVerticalPos(); + const rect = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = noteModel.startx; + rect.y = noteModel.starty; + rect.width = noteModel.width || conf.width; + rect.class = "note"; + const g = elem.append("g"); + const rectElem = svgDraw.drawRect(g, rect); + const textObj = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = noteModel.startx; + textObj.y = noteModel.starty; + textObj.width = rect.width; + textObj.dy = "1em"; + textObj.text = noteModel.message; + textObj.class = "noteText"; + textObj.fontFamily = conf.noteFontFamily; + textObj.fontSize = conf.noteFontSize; + textObj.fontWeight = conf.noteFontWeight; + textObj.anchor = conf.noteAlign; + textObj.textMargin = conf.noteMargin; + textObj.valign = "center"; + const textElem = drawText(g, textObj); + const textHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + rectElem.attr("height", textHeight + 2 * conf.noteMargin); + noteModel.height += textHeight + 2 * conf.noteMargin; + bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); + noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; + noteModel.stopx = noteModel.startx + rect.width; + bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); + bounds.models.addNote(noteModel); +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +const noteFont = (cnf) => { + return { + fontFamily: cnf.noteFontFamily, + fontSize: cnf.noteFontSize, + fontWeight: cnf.noteFontWeight + }; +}; +const actorFont = (cnf) => { + return { + fontFamily: cnf.actorFontFamily, + fontSize: cnf.actorFontSize, + fontWeight: cnf.actorFontWeight + }; +}; +function boundMessage(_diagram, msgModel) { + bounds.bumpVerticalPos(10); + const { startx, stopx, message } = msgModel; + const lines = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.splitBreaks(message).length; + const textDims = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + bounds.bumpVerticalPos(lineHeight); + let lineStartY; + let totalOffset = textDims.height - 10; + const textWidth = textDims.width; + if (startx === stopx) { + lineStartY = bounds.getVerticalPos() + totalOffset; + if (!conf.rightAngles) { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + } + totalOffset += 30; + const dx = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textWidth / 2, conf.width / 2); + bounds.insert( + startx - dx, + bounds.getVerticalPos() - 10 + totalOffset, + stopx + dx, + bounds.getVerticalPos() + 30 + totalOffset + ); + } else { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + bounds.insert(startx, lineStartY - 10, stopx, lineStartY); + } + bounds.bumpVerticalPos(totalOffset); + msgModel.height += totalOffset; + msgModel.stopy = msgModel.starty + msgModel.height; + bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); + return lineStartY; +} +const drawMessage = function(diagram2, msgModel, lineStartY, diagObj) { + const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; + const textDims = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const textObj = (0,_svgDrawCommon_42e92da3_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = startx; + textObj.y = starty + 10; + textObj.width = stopx - startx; + textObj.class = "messageText"; + textObj.dy = "1em"; + textObj.text = message; + textObj.fontFamily = conf.messageFontFamily; + textObj.fontSize = conf.messageFontSize; + textObj.fontWeight = conf.messageFontWeight; + textObj.anchor = conf.messageAlign; + textObj.valign = "center"; + textObj.textMargin = conf.wrapPadding; + textObj.tspan = false; + drawText(diagram2, textObj); + const textWidth = textDims.width; + let line; + if (startx === stopx) { + if (conf.rightAngles) { + line = diagram2.append("path").attr( + "d", + `M ${startx},${lineStartY} H ${startx + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` + ); + } else { + line = diagram2.append("path").attr( + "d", + "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) + ); + } + } else { + line = diagram2.append("line"); + line.attr("x1", startx); + line.attr("y1", lineStartY); + line.attr("x2", stopx); + line.attr("y2", lineStartY); + } + if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) { + line.style("stroke-dasharray", "3, 3"); + line.attr("class", "messageLine1"); + } else { + line.attr("class", "messageLine0"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + line.attr("stroke-width", 2); + line.attr("stroke", "none"); + line.style("fill", "none"); + if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { + line.attr("marker-end", "url(" + url + "#filled-head)"); + } + if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { + line.attr("marker-end", "url(" + url + "#crosshead)"); + } + if (sequenceVisible || conf.showSequenceNumbers) { + line.attr("marker-start", "url(" + url + "#sequencenumber)"); + diagram2.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); + } +}; +const addActorRenderingData = function(diagram2, actors2, createdActors2, actorKeys, verticalPos, messages2, isFooter) { + let prevWidth = 0; + let prevMargin = 0; + let prevBox = void 0; + let maxHeight = 0; + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + const box = actor.box; + if (prevBox && prevBox != box) { + if (!isFooter) { + bounds.models.addBox(prevBox); + } + prevMargin += conf.boxMargin + prevBox.margin; + } + if (box && box != prevBox) { + if (!isFooter) { + box.x = prevWidth + prevMargin; + box.y = verticalPos; + } + prevMargin += box.margin; + } + actor.width = actor.width || conf.width; + actor.height = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actor.height || conf.height, conf.height); + actor.margin = actor.margin || conf.actorMargin; + maxHeight = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + if (createdActors2[actor.name]) { + prevMargin += actor.width / 2; + } + actor.x = prevWidth + prevMargin; + actor.starty = bounds.getVerticalPos(); + bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); + prevWidth += actor.width + prevMargin; + if (actor.box) { + actor.box.width = prevWidth + box.margin - actor.box.x; + } + prevMargin = actor.margin; + prevBox = actor.box; + bounds.models.addActor(actor); + } + if (prevBox && !isFooter) { + bounds.models.addBox(prevBox); + } + bounds.bumpVerticalPos(maxHeight); +}; +const drawActors = function(diagram2, actors2, actorKeys, isFooter) { + if (!isFooter) { + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + svgDraw.drawActor(diagram2, actor, conf, false); + } + } else { + let maxHeight = 0; + bounds.bumpVerticalPos(conf.boxMargin * 2); + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + if (!actor.stopy) { + actor.stopy = bounds.getVerticalPos(); + } + const height = svgDraw.drawActor(diagram2, actor, conf, true); + maxHeight = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, height); + } + bounds.bumpVerticalPos(maxHeight + conf.boxMargin); + } +}; +const drawActorsPopup = function(diagram2, actors2, actorKeys, doc) { + let maxHeight = 0; + let maxWidth = 0; + for (const actorKey of actorKeys) { + const actor = actors2[actorKey]; + const minMenuWidth = getRequiredPopupWidth(actor); + const menuDimensions = svgDraw.drawPopup( + diagram2, + actor, + minMenuWidth, + conf, + conf.forceMenus, + doc + ); + if (menuDimensions.height > maxHeight) { + maxHeight = menuDimensions.height; + } + if (menuDimensions.width + actor.x > maxWidth) { + maxWidth = menuDimensions.width + actor.x; + } + } + return { maxHeight, maxWidth }; +}; +const setConf = function(cnf) { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const actorActivations = function(actor) { + return bounds.activations.filter(function(activation) { + return activation.actor === actor; + }); +}; +const activationBounds = function(actor, actors2) { + const actorObj = actors2[actor]; + const activations = actorActivations(actor); + const left = activations.reduce(function(acc, activation) { + return _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(acc, activation.startx); + }, actorObj.x + actorObj.width / 2); + const right = activations.reduce(function(acc, activation) { + return _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(acc, activation.stopx); + }, actorObj.x + actorObj.width / 2); + return [left, right]; +}; +function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { + bounds.bumpVerticalPos(preMargin); + let heightAdjust = postMargin; + if (msg.id && msg.message && loopWidths[msg.id]) { + const loopWidth = loopWidths[msg.id].width; + const textConf = messageFont(conf); + msg.message = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); + msg.width = loopWidth; + msg.wrap = true; + const textDims = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, textConf); + const totalOffset = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textDims.height, conf.labelBoxHeight); + heightAdjust = postMargin + totalOffset; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`${totalOffset} - ${msg.message}`); + } + addLoopFn(msg); + bounds.bumpVerticalPos(heightAdjust); +} +function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors2, createdActors2, destroyedActors2) { + function receiverAdjustment(actor, adjustment) { + if (actor.x < actors2[msg.from].x) { + bounds.insert( + msgModel.stopx - adjustment, + msgModel.starty, + msgModel.startx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx + adjustment; + } else { + bounds.insert( + msgModel.startx, + msgModel.starty, + msgModel.stopx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx - adjustment; + } + } + function senderAdjustment(actor, adjustment) { + if (actor.x < actors2[msg.to].x) { + bounds.insert( + msgModel.startx - adjustment, + msgModel.starty, + msgModel.stopx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx + adjustment; + } else { + bounds.insert( + msgModel.stopx, + msgModel.starty, + msgModel.startx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx - adjustment; + } + } + if (createdActors2[msg.to] == index) { + const actor = actors2[msg.to]; + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + actor.starty = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors2[msg.from] == index) { + const actor = actors2[msg.from]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; + senderAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors2[msg.to] == index) { + const actor = actors2[msg.to]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } +} +const draw = function(_text, id, _version, diagObj) { + const { securityLevel, sequence } = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + conf = sequence; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + bounds.init(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(diagObj.db); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + const actors2 = diagObj.db.getActors(); + const createdActors2 = diagObj.db.getCreatedActors(); + const destroyedActors2 = diagObj.db.getDestroyedActors(); + const boxes2 = diagObj.db.getBoxes(); + let actorKeys = diagObj.db.getActorKeys(); + const messages2 = diagObj.db.getMessages(); + const title = diagObj.db.getDiagramTitle(); + const hasBoxes = diagObj.db.hasAtLeastOneBox(); + const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); + const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors2, messages2, diagObj); + conf.height = calculateActorMargins(actors2, maxMessageWidthPerActor, boxes2); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + if (hasBoxTitles) { + bounds.bumpVerticalPos(boxes2[0].textMaxHeight); + } + } + if (conf.hideUnusedParticipants === true) { + const newActors = /* @__PURE__ */ new Set(); + messages2.forEach((message) => { + newActors.add(message.from); + newActors.add(message.to); + }); + actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); + } + addActorRenderingData(diagram2, actors2, createdActors2, actorKeys, 0, messages2, false); + const loopWidths = calculateLoopBounds(messages2, actors2, maxMessageWidthPerActor, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + svgDraw.insertSequenceNumber(diagram2); + function activeEnd(msg, verticalPos) { + const activationData = bounds.endActivation(msg); + if (activationData.starty + 18 > verticalPos) { + activationData.starty = verticalPos - 6; + verticalPos += 12; + } + svgDraw.drawActivation( + diagram2, + activationData, + verticalPos, + conf, + actorActivations(msg.from.actor).length + ); + bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); + } + let sequenceIndex = 1; + let sequenceIndexStep = 1; + const messagesToDraw = []; + const backgrounds = []; + messages2.forEach(function(msg, index) { + let loopModel, noteModel, msgModel; + switch (msg.type) { + case diagObj.db.LINETYPE.NOTE: + bounds.resetVerticalPos(); + noteModel = msg.noteModel; + drawNote(diagram2, noteModel); + break; + case diagObj.db.LINETYPE.ACTIVE_START: + bounds.newActivation(msg, diagram2, actors2); + break; + case diagObj.db.LINETYPE.ACTIVE_END: + activeEnd(msg, bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.LOOP_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.LOOP_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "loop", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.RECT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin, + (message) => bounds.newLoop(void 0, message.message) + ); + break; + case diagObj.db.LINETYPE.RECT_END: + loopModel = bounds.endLoop(); + backgrounds.push(loopModel); + bounds.models.addLoop(loopModel); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.OPT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.OPT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "opt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.ALT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "alt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + bounds.saveVerticalPos(); + break; + case diagObj.db.LINETYPE.PAR_AND: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "par", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.AUTONUMBER: + sequenceIndex = msg.message.start || sequenceIndex; + sequenceIndexStep = msg.message.step || sequenceIndexStep; + if (msg.message.visible) { + diagObj.db.enableSequenceNumbers(); + } else { + diagObj.db.disableSequenceNumbers(); + } + break; + case diagObj.db.LINETYPE.CRITICAL_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_OPTION: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "critical", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.BREAK_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.BREAK_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "break", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + default: + try { + msgModel = msg.msgModel; + msgModel.starty = bounds.getVerticalPos(); + msgModel.sequenceIndex = sequenceIndex; + msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + const lineStartY = boundMessage(diagram2, msgModel); + adjustCreatedDestroyedData( + msg, + msgModel, + lineStartY, + index, + actors2, + createdActors2, + destroyedActors2 + ); + messagesToDraw.push({ messageModel: msgModel, lineStartY }); + bounds.models.addMessage(msgModel); + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while drawing message", e); + } + } + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + sequenceIndex = sequenceIndex + sequenceIndexStep; + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("createdActors", createdActors2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("destroyedActors", destroyedActors2); + drawActors(diagram2, actors2, actorKeys, false); + messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj)); + if (conf.mirrorActors) { + drawActors(diagram2, actors2, actorKeys, true); + } + backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram2, e)); + fixLifeLineHeights(diagram2, actors2, actorKeys, conf); + bounds.models.boxes.forEach(function(box2) { + box2.height = bounds.getVerticalPos() - box2.y; + bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); + box2.startx = box2.x; + box2.starty = box2.y; + box2.stopx = box2.startx + box2.width; + box2.stopy = box2.starty + box2.height; + box2.stroke = "rgb(0,0,0, 0.5)"; + svgDraw.drawBox(diagram2, box2, conf); + }); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + } + const requiredBoxSize = drawActorsPopup(diagram2, actors2, actorKeys, doc); + const { bounds: box } = bounds.getBounds(); + let boxHeight = box.stopy - box.starty; + if (boxHeight < requiredBoxSize.maxHeight) { + boxHeight = requiredBoxSize.maxHeight; + } + let height = boxHeight + 2 * conf.diagramMarginY; + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj; + } + let boxWidth = box.stopx - box.startx; + if (boxWidth < requiredBoxSize.maxWidth) { + boxWidth = requiredBoxSize.maxWidth; + } + const width = boxWidth + 2 * conf.diagramMarginX; + if (title) { + diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25); + } + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title ? 40 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, bounds.models); +}; +function getMaxMessageWidthPerActor(actors2, messages2, diagObj) { + const maxMessageWidthPerActor = {}; + messages2.forEach(function(msg) { + if (actors2[msg.to] && actors2[msg.from]) { + const actor = actors2[msg.to]; + if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { + return; + } + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { + return; + } + const isNote = msg.placement !== void 0; + const isMessage = !isNote; + const textFont = isNote ? noteFont(conf) : messageFont(conf); + const wrappedMessage = msg.wrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; + const messageDimensions = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(wrappedMessage, textFont); + const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; + if (isMessage && msg.from === actor.nextActor) { + maxMessageWidthPerActor[msg.to] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth + ); + } else if (isMessage && msg.from === actor.prevActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (isMessage && msg.from === msg.to) { + maxMessageWidthPerActor[msg.from] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + maxMessageWidthPerActor[msg.to] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth / 2 + ); + } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + maxMessageWidthPerActor[msg.from] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { + if (actor.prevActor) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth / 2 + ); + } + if (actor.nextActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + } + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); + return maxMessageWidthPerActor; +} +const getRequiredPopupWidth = function(actor) { + let requiredPopupWidth = 0; + const textFont = actorFont(conf); + for (const key in actor.links) { + const labelDimensions = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(key, textFont); + const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; + if (requiredPopupWidth < labelWidth) { + requiredPopupWidth = labelWidth; + } + } + return requiredPopupWidth; +}; +function calculateActorMargins(actors2, actorToMessageWidth, boxes2) { + let maxHeight = 0; + Object.keys(actors2).forEach((prop) => { + const actor = actors2[prop]; + if (actor.wrap) { + actor.description = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + actor.description, + conf.width - 2 * conf.wrapPadding, + actorFont(conf) + ); + } + const actDims = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap ? conf.width : _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); + actor.height = actor.wrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actDims.height, conf.height) : conf.height; + maxHeight = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + }); + for (const actorKey in actorToMessageWidth) { + const actor = actors2[actorKey]; + if (!actor) { + continue; + } + const nextActor = actors2[actor.nextActor]; + if (!nextActor) { + const messageWidth2 = actorToMessageWidth[actorKey]; + const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2; + actor.margin = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth2, conf.actorMargin); + continue; + } + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; + actor.margin = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth, conf.actorMargin); + } + let maxBoxHeight = 0; + boxes2.forEach((box) => { + const textFont = messageFont(conf); + let totalWidth = box.actorKeys.reduce((total, aKey) => { + return total += actors2[aKey].width + (actors2[aKey].margin || 0); + }, 0); + totalWidth -= 2 * conf.boxTextMargin; + if (box.wrap) { + box.name = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); + } + const boxMsgDimensions = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(box.name, textFont); + maxBoxHeight = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boxMsgDimensions.height, maxBoxHeight); + const minWidth = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); + box.margin = conf.boxTextMargin; + if (totalWidth < minWidth) { + const missing = (minWidth - totalWidth) / 2; + box.margin += missing; + } + }); + boxes2.forEach((box) => box.textMaxHeight = maxBoxHeight); + return _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, conf.height); +} +const buildNoteModel = function(msg, actors2, diagObj) { + const startx = actors2[msg.from].x; + const stopx = actors2[msg.to].x; + const shouldWrap = msg.wrap && msg.message; + let textDimensions = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); + const noteModel = { + width: shouldWrap ? conf.width : _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), + height: 0, + startx: actors2[msg.from].x, + stopx: 0, + starty: 0, + stopy: 0, + message: msg.message + }; + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + noteModel.width = shouldWrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width) : _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors2[msg.from].width / 2 + actors2[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors2[msg.from].width + conf.actorMargin) / 2; + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + noteModel.width = shouldWrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors2[msg.from].width / 2 + actors2[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx - noteModel.width + (actors2[msg.from].width - conf.actorMargin) / 2; + } else if (msg.to === msg.from) { + textDimensions = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors2[msg.from].width), + noteFont(conf) + ) : msg.message, + noteFont(conf) + ); + noteModel.width = shouldWrap ? _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors2[msg.from].width) : _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors2[msg.from].width, + conf.width, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors2[msg.from].width - noteModel.width) / 2; + } else { + noteModel.width = Math.abs(startx + actors2[msg.from].width / 2 - (stopx + actors2[msg.to].width / 2)) + conf.actorMargin; + noteModel.startx = startx < stopx ? startx + actors2[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors2[msg.to].width / 2 - conf.actorMargin / 2; + } + if (shouldWrap) { + noteModel.message = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + noteModel.width - 2 * conf.wrapPadding, + noteFont(conf) + ); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` + ); + return noteModel; +}; +const buildMessageModel = function(msg, actors2, diagObj) { + let process = false; + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + process = true; + } + if (!process) { + return {}; + } + const fromBounds = activationBounds(msg.from, actors2); + const toBounds = activationBounds(msg.to, actors2); + const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; + const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; + const allBounds = [...fromBounds, ...toBounds]; + const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]); + if (msg.wrap && msg.message) { + msg.message = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), + messageFont(conf) + ); + } + const msgDims = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, messageFont(conf)); + return { + width: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, + boundedWidth + 2 * conf.wrapPadding, + conf.width + ), + height: 0, + startx: fromBounds[fromIdx], + stopx: toBounds[toIdx], + starty: 0, + stopy: 0, + message: msg.message, + type: msg.type, + wrap: msg.wrap, + fromBounds: Math.min.apply(null, allBounds), + toBounds: Math.max.apply(null, allBounds) + }; +}; +const calculateLoopBounds = function(messages2, actors2, _maxWidthPerActor, diagObj) { + const loops = {}; + const stack = []; + let current, noteModel, msgModel; + messages2.forEach(function(msg) { + msg.id = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.u.random({ length: 10 }); + switch (msg.type) { + case diagObj.db.LINETYPE.LOOP_START: + case diagObj.db.LINETYPE.ALT_START: + case diagObj.db.LINETYPE.OPT_START: + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + case diagObj.db.LINETYPE.CRITICAL_START: + case diagObj.db.LINETYPE.BREAK_START: + stack.push({ + id: msg.id, + msg: msg.message, + from: Number.MAX_SAFE_INTEGER, + to: Number.MIN_SAFE_INTEGER, + width: 0 + }); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + case diagObj.db.LINETYPE.PAR_AND: + case diagObj.db.LINETYPE.CRITICAL_OPTION: + if (msg.message) { + current = stack.pop(); + loops[current.id] = current; + loops[msg.id] = current; + stack.push(current); + } + break; + case diagObj.db.LINETYPE.LOOP_END: + case diagObj.db.LINETYPE.ALT_END: + case diagObj.db.LINETYPE.OPT_END: + case diagObj.db.LINETYPE.PAR_END: + case diagObj.db.LINETYPE.CRITICAL_END: + case diagObj.db.LINETYPE.BREAK_END: + current = stack.pop(); + loops[current.id] = current; + break; + case diagObj.db.LINETYPE.ACTIVE_START: + { + const actorRect = actors2[msg.from ? msg.from.actor : msg.to.actor]; + const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + const toAdd = { + startx: x, + stopx: x + conf.activationWidth, + actor: msg.from.actor, + enabled: true + }; + bounds.activations.push(toAdd); + } + break; + case diagObj.db.LINETYPE.ACTIVE_END: + { + const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor); + delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; + } + break; + } + const isNote = msg.placement !== void 0; + if (isNote) { + noteModel = buildNoteModel(msg, actors2, diagObj); + msg.noteModel = noteModel; + stack.forEach((stk) => { + current = stk; + current.from = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(current.from, noteModel.startx); + current.to = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.to, noteModel.startx + noteModel.width); + current.width = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; + }); + } else { + msgModel = buildMessageModel(msg, actors2, diagObj); + msg.msgModel = msgModel; + if (msgModel.startx && msgModel.stopx && stack.length > 0) { + stack.forEach((stk) => { + current = stk; + if (msgModel.startx === msgModel.stopx) { + const from = actors2[msg.from]; + const to = actors2[msg.to]; + current.from = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin( + from.x - msgModel.width / 2, + from.x - from.width / 2, + current.from + ); + current.to = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + to.x + msgModel.width / 2, + to.x + from.width / 2, + current.to + ); + current.width = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; + } else { + current.from = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(msgModel.startx, current.from); + current.to = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(msgModel.stopx, current.to); + current.width = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth; + } + }); + } + } + }); + bounds.activations = []; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Loop type widths:", loops); + return loops; +}; +const renderer = { + bounds, + drawActors, + drawActorsPopup, + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }), + +/***/ 47435: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7608); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.J, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/86e3a3d9.95e479bf.js b/assets/js/86e3a3d9.95e479bf.js new file mode 100644 index 0000000000..a8113a16dd --- /dev/null +++ b/assets/js/86e3a3d9.95e479bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15158],{24239:(e,t,n)=>{n.d(t,{Z:()=>w});var o=n(24246),r=(n(27378),n(40624)),c=n(41876),s=n(41428),a=n(7812),i=n(64149),l=n(36712),d=n(52615);const u={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,o.jsx)(s.Z,{href:e,className:(0,r.Z)("card padding--lg",u.cardContainer),children:t})}function h({href:e,icon:t,title:n,description:c}){return(0,o.jsxs)(m,{href:e,children:[(0,o.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",u.cardTitle),title:n,children:[t," ",n]}),c&&(0,o.jsx)("p",{className:(0,r.Z)("text--truncate",u.cardDescription),title:c,children:c})]})}function g({item:e}){const t=(0,c.LM)(e),n=function(){const{selectMessage:e}=(0,a.c)();return t=>e(t,(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,o.jsx)(h,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(r=e.description)&&void 0!==r?r:n(e.items.length)}):null;var r}function p({item:e}){const t=(0,i.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const r=(0,c.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var s;return(0,o.jsx)(h,{href:e.href,icon:t,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==r?void 0:r.description})}function f({item:e}){switch(e.type){case"link":return(0,o.jsx)(p,{item:e});case"category":return(0,o.jsx)(g,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x({className:e}){const t=(0,c.jA)();return(0,o.jsx)(w,{items:t.items,className:e})}function w(e){const{items:t,className:n}=e;if(!t)return(0,o.jsx)(x,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),o.forEach((function(t){y(e,t,n[t])}))}return e}({},e));const s=(0,c.MN)(t);return(0,o.jsx)("section",{className:(0,r.Z)("row",n),children:s.map(((e,t)=>(0,o.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,o.jsx)(f,{item:e})},t)))})}},7812:(e,t,n)=>{n.d(t,{c:()=>l});var o=n(27378),r=n(4423);const c=["zero","one","two","few","many","other"];function s(e){return c.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,o.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),a}}),[e])}function l(){const e=i();return{selectMessage:(t,n)=>function(e,t,n){const o=e.split("|");if(1===o.length)return o[0];o.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);const r=n.select(t),c=n.pluralForms.indexOf(r);return o[Math.min(c,o.length-1)]}(n,t,e)}}},99977:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=n(24246),r=n(71670),c=n(24239),s=n(41876);const a={},i="Category with a doc of category's name",l={id:"tests/category-links/with-category-name-doc/with-category-name-doc",title:"Category with a doc of category's name",description:"You should be able to click on the category and browse this /.md doc",source:"@site/_dogfooding/_docs tests/tests/category-links/with-category-name-doc/with-category-name-doc.mdx",sourceDirName:"tests/category-links/with-category-name-doc",slug:"/tests/category-links/with-category-name-doc/",permalink:"/tests/docs/tests/category-links/with-category-name-doc/",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/regular-category/sample-doc"},next:{title:"Sample doc",permalink:"/tests/docs/tests/category-links/with-category-name-doc/sample-doc"}},d={},u=[{value:"Intro",id:"intro",level:2},{value:"Category content",id:"category-content",level:2}];function m(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"category-with-a-doc-of-categorys-name",children:"Category with a doc of category's name"}),"\n",(0,o.jsxs)(t.p,{children:["You should be able to click on the category and browse this ",(0,o.jsx)(t.code,{children:"<categoryName>/<categoryName>.md"})," doc"]}),"\n",(0,o.jsx)(t.h2,{id:"intro",children:"Intro"}),"\n",(0,o.jsx)(t.p,{children:"Some intro text"}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"It is also possible to render the card items for that category thanks to MDX:"})}),"\n",(0,o.jsx)(t.h2,{id:"category-content",children:"Category content"}),"\n","\n",(0,o.jsx)(c.Z,{items:(0,s.jA)().items})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>s});var o=n(27378);const r={},c=o.createContext(r);function s(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8717b14a.8b55ef4a.js b/assets/js/8717b14a.8b55ef4a.js deleted file mode 100644 index 6eab41e3fe..0000000000 --- a/assets/js/8717b14a.8b55ef4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[3694],{1615:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>g,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var s=o(4848),n=o(8453);const l={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},r=void 0,i={permalink:"/blog/long-blog-post",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2019-05-29-long-blog-post.md",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},a={authorsImageUrls:[void 0]},u=[];function c(t){const e={code:"code",p:"p",...(0,n.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,s.jsxs)(e.p,{children:["Use a ",(0,s.jsx)(e.code,{children:"\x3c!--"})," ",(0,s.jsx)(e.code,{children:"truncate"})," ",(0,s.jsx)(e.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]})]})}function g(t={}){const{wrapper:e}={...(0,n.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(c,{...t})}):c(t)}},8453:(t,e,o)=>{o.d(e,{R:()=>r,x:()=>i});var s=o(6540);const n={},l=s.createContext(n);function r(t){const e=s.useContext(l);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:r(t.components),s.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/872e6514.ac4f8a6a.js b/assets/js/872e6514.ac4f8a6a.js new file mode 100644 index 0000000000..9b98cba97d --- /dev/null +++ b/assets/js/872e6514.ac4f8a6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[19090],{41130:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var o=s(24246),t=s(71670);const i={mdx:{format:"md"},date:"2019-04-10T20:00"},c="V2 Changelog",l={permalink:"/changelog/V2 Changelog",source:"@site/changelog/source/V2 Changelog.md",title:"V2 Changelog",description:"siteConfig.js changes",date:"2019-04-10T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-04-10T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.19",permalink:"/changelog/2.0.0-alpha.19"},listPageLink:"/changelog/page/5"},r={authorsImageUrls:[]},d=[{value:"<code>siteConfig.js</code> changes",id:"siteconfigjs-changes",level:3},{value:"Migration Guide",id:"migration-guide",level:3},{value:"Presets",id:"presets",level:3}];function a(e){const n={a:"a",code:"code",em:"em",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(n.h3,{id:"siteconfigjs-changes",children:[(0,o.jsx)(n.code,{children:"siteConfig.js"})," changes"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"siteConfig.js"})," renamed to ",(0,o.jsx)(n.code,{children:"docusaurus.config.js"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Remove the following config options:\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"docsUrl"}),". Use the plugin option on ",(0,o.jsx)(n.code,{children:"docusaurus-plugin-content-docs"})," instead."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"customDocsPath"}),". Use the plugin option on ",(0,o.jsx)(n.code,{children:"docusaurus-plugin-content-docs"})," instead."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"sidebars.json"})," now has to be explicitly loaded by users and passed into the plugin option on ",(0,o.jsx)(n.code,{children:"docusaurus-plugin-content-docs"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"headerLinks"})," doc, page, blog is deprecated and has been to moved into ",(0,o.jsx)(n.code,{children:"themeConfig"})," under the name ",(0,o.jsx)(n.code,{children:"navbar"}),". The syntax is now:"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-js",children:"themeConfig: {\n navbar: {\n title: 'Docusaurus',\n logo: {\n alt: 'Docusaurus Logo',\n src: 'img/docusaurus.svg',\n },\n links: [\n {to: 'docs/introduction', label: 'Docs', position: 'left'},\n {to: 'blog', label: 'Blog', position: 'left'},\n {to: 'feedback', label: 'Feedback', position: 'left'},\n {\n href: 'https://github.com/facebook/docusaurus',\n label: 'GitHub',\n position: 'right',\n },\n ],\n },\n}\n"})}),"\n",(0,o.jsx)(n.h3,{id:"migration-guide",children:"Migration Guide"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.em,{children:"Work in Progress"})}),"\n",(0,o.jsx)(n.h3,{id:"presets",children:"Presets"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Add presets for plugins that follow the ",(0,o.jsx)(n.a,{href:"https://babeljs.io/docs/en/presets",children:"Babel preset convention"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>c});var o=s(27378);const t={},i=o.createContext(t);function c(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/87e9b44c.800f3927.js b/assets/js/87e9b44c.800f3927.js new file mode 100644 index 0000000000..d754b61ba9 --- /dev/null +++ b/assets/js/87e9b44c.800f3927.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8912],{24239:(e,t,n)=>{n.d(t,{Z:()=>x});var s=n(24246),r=(n(27378),n(40624)),i=n(41876),o=n(41428),l=n(7812),c=n(64149),a=n(36712),u=n(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function m({href:e,children:t}){return(0,s.jsx)(o.Z,{href:e,className:(0,r.Z)("card padding--lg",d.cardContainer),children:t})}function f({href:e,icon:t,title:n,description:i}){return(0,s.jsxs)(m,{href:e,children:[(0,s.jsxs)(u.Z,{as:"h2",className:(0,r.Z)("text--truncate",d.cardTitle),title:n,children:[t," ",n]}),i&&(0,s.jsx)("p",{className:(0,r.Z)("text--truncate",d.cardDescription),title:i,children:i})]})}function p({item:e}){const t=(0,i.LM)(e),n=function(){const{selectMessage:e}=(0,l.c)();return t=>e(t,(0,a.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,s.jsx)(f,{href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(r=e.description)&&void 0!==r?r:n(e.items.length)}):null;var r}function h({item:e}){const t=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var n;const r=(0,i.xz)(null!==(n=e.docId)&&void 0!==n?n:void 0);var o;return(0,s.jsx)(f,{href:e.href,icon:t,title:e.label,description:null!==(o=e.description)&&void 0!==o?o:null==r?void 0:r.description})}function g({item:e}){switch(e.type){case"link":return(0,s.jsx)(h,{item:e});case"category":return(0,s.jsx)(p,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y({className:e}){const t=(0,i.jA)();return(0,s.jsx)(x,{items:t.items,className:e})}function x(e){const{items:t,className:n}=e;if(!t)return(0,s.jsx)(y,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},s=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(s=s.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),s.forEach((function(t){b(e,t,n[t])}))}return e}({},e));const o=(0,i.MN)(t);return(0,s.jsx)("section",{className:(0,r.Z)("row",n),children:o.map(((e,t)=>(0,s.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,s.jsx)(g,{item:e})},t)))})}},7812:(e,t,n)=>{n.d(t,{c:()=>a});var s=n(27378),r=n(4423);const i=["zero","one","two","few","many","other"];function o(e){return i.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function a(){const e=c();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const r=n.select(t),i=n.pluralForms.indexOf(r);return s[Math.min(i,s.length-1)]}(n,t,e)}}},74728:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var s=n(24246),r=n(71670),i=n(24239);const o={unlisted:!0,tags:["visibility","unlisted"]},l="Some Unlisteds - Subcategory index unlisted",c={id:"tests/visibility/some-unlisteds/unlisted-subcategory/index",title:"Some Unlisteds - Subcategory index unlisted",description:"Doc with unlisted front matter",source:"@site/_dogfooding/_docs tests/tests/visibility/some-unlisteds/unlisted-subcategory/index.mdx",sourceDirName:"tests/visibility/some-unlisteds/unlisted-subcategory",slug:"/tests/visibility/some-unlisteds/unlisted-subcategory/",permalink:"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/",draft:!1,unlisted:!0,tags:[{label:"visibility",permalink:"/tests/docs/tags/visibility"},{label:"unlisted",permalink:"/tests/docs/tags/unlisted"}],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{unlisted:!0,tags:["visibility","unlisted"]},sidebar:"sidebar"},a={},u=[];function d(e){const t={h1:"h1",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"some-unlisteds---subcategory-index-unlisted",children:"Some Unlisteds - Subcategory index unlisted"}),"\n",(0,s.jsx)(t.p,{children:"Doc with unlisted front matter"}),"\n","\n",(0,s.jsx)(i.Z,{})]})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var s=n(27378);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88d0be04.6f4fd6f2.js b/assets/js/88d0be04.6f4fd6f2.js new file mode 100644 index 0000000000..a1ae33479d --- /dev/null +++ b/assets/js/88d0be04.6f4fd6f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40151],{16652:(e,n,t)=>{t.d(n,{Z:()=>f});var r=t(24246),l=(t(27378),t(40624)),o=t(14929),i=t(4646),c=t(36712);const s={tocCollapsibleButton:"tocCollapsibleButton_IbtT",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_Nor3"};function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function d(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function u(e,n){if(null==e)return{};var t,r,l=function(e,n){if(null==e)return{};var t,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}function b(e){var{collapsed:n}=e,t=u(e,["collapsed"]);return(0,r.jsx)("button",d(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){a(e,n,t[n])}))}return e}({type:"button"},t),{className:(0,l.Z)("clean-btn",s.tocCollapsibleButton,!n&&s.tocCollapsibleButtonExpanded,t.className),children:(0,r.jsx)(c.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}))}const v={tocCollapsible:"tocCollapsible_BEWm",tocCollapsibleContent:"tocCollapsibleContent_FG8F",tocCollapsibleExpanded:"tocCollapsibleExpanded_FzA_"};function f({toc:e,className:n,minHeadingLevel:t,maxHeadingLevel:c}){const{collapsed:s,toggleCollapsed:a}=(0,o.u)({initialState:!0});return(0,r.jsxs)("div",{className:(0,l.Z)(v.tocCollapsible,!s&&v.tocCollapsibleExpanded,n),children:[(0,r.jsx)(b,{collapsed:s,onClick:a}),(0,r.jsx)(o.z,{lazy:!0,className:v.tocCollapsibleContent,collapsed:s,children:(0,r.jsx)(i.Z,{toc:e,minHeadingLevel:t,maxHeadingLevel:c})})]})}},41124:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(24246),l=(t(27378),t(4646));const o={tableOfContentsInline:"tableOfContentsInline_2sru"};function i({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,r.jsx)("div",{className:o.tableOfContentsInline,children:(0,r.jsx)(l.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:t,className:"table-of-contents",linkClassName:null})})}},4646:(e,n,t)=>{t.d(n,{Z:()=>y});var r=t(24246),l=t(27378),o=t(73919);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function s(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a(e,n){if(null==e)return{};var t,r,l=function(e,n){if(null==e)return{};var t,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}function d(e){const n=e.map((e=>s(c({},e),{parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const r=t.slice(2,e.level);e.parentIndex=Math.max(...r),t[e.level]=n}));const r=[];return n.forEach((e=>{const{parentIndex:t}=e,l=a(e,["parentIndex"]);t>=0?n[t].children.push(l):r.push(l)})),r}function u({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return e.flatMap((e=>{const r=u({toc:e.children,minHeadingLevel:n,maxHeadingLevel:t});return function(e){return e.level>=n&&e.level<=t}(e)?[s(c({},e),{children:r})]:r}))}function b(e){const n=e.getBoundingClientRect();return n.top===n.bottom?b(e.parentNode):n}function v(e,{anchorTopOffset:n}){const t=e.find((e=>b(e).top>=n));if(t){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(b(t))?t:null!==(r=e[e.indexOf(t)-1])&&void 0!==r?r:null;var r}var l;return null!==(l=e[e.length-1])&&void 0!==l?l:null}function f(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:n}}=(0,o.L)();return(0,l.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function p(e){const n=(0,l.useRef)(void 0),t=f();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:i}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),c=function({minHeadingLevel:e,maxHeadingLevel:n}){const t=[];for(let r=e;r<=n;r+=1)t.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(t.join()))}({minHeadingLevel:o,maxHeadingLevel:i}),s=v(c,{anchorTopOffset:t.current}),a=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(l),e.classList.add(l),n.current=e):e.classList.remove(l)}(e,e===a)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,t])}var m=t(41428);function h({toc:e,className:n,linkClassName:t,isChild:l}){return e.length?(0,r.jsx)("ul",{className:l?void 0:n,children:e.map((e=>(0,r.jsxs)("li",{children:[(0,r.jsx)(m.Z,{to:`#${e.id}`,className:null!=t?t:void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,r.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:t})]},e.id)))}):null}const g=l.memo(h);function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function j(e,n){if(null==e)return{};var t,r,l=function(e,n){if(null==e)return{};var t,r,l={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}function y(e){var{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:s,maxHeadingLevel:a}=e,b=j(e,["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"]);const v=(0,o.L)(),f=null!=s?s:v.tableOfContents.minHeadingLevel,m=null!=a?a:v.tableOfContents.maxHeadingLevel,h=function({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){return(0,l.useMemo)((()=>u({toc:d(e),minHeadingLevel:n,maxHeadingLevel:t})),[e,n,t])}({toc:n,minHeadingLevel:f,maxHeadingLevel:m});return p((0,l.useMemo)((()=>{if(i&&c)return{linkClassName:i,linkActiveClassName:c,minHeadingLevel:f,maxHeadingLevel:m}}),[i,c,f,m])),(0,r.jsx)(g,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){O(e,n,t[n])}))}return e}({toc:h,className:t,linkClassName:i},b))}},6698:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(24246),l=(t(27378),t(40624));const o={browserWindow:"browserWindow_my1Q",browserWindowHeader:"browserWindowHeader_jXSR",row:"row_KZDM",buttons:"buttons_uHc7",right:"right_oyze",browserWindowAddressBar:"browserWindowAddressBar_Pd8y",dot:"dot_giz1",browserWindowMenuIcon:"browserWindowMenuIcon_Vhuh",bar:"bar_rrRL",browserWindowBody:"browserWindowBody_Idgs"};function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),r.forEach((function(n){i(e,n,t[n])}))}return e}function s(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function a({children:e,minHeight:n,url:t="http://localhost:3000",style:i,bodyStyle:a}){return(0,r.jsxs)("div",{className:o.browserWindow,style:s(c({},i),{minHeight:n}),children:[(0,r.jsxs)("div",{className:o.browserWindowHeader,children:[(0,r.jsxs)("div",{className:o.buttons,children:[(0,r.jsx)("span",{className:o.dot,style:{background:"#f25f58"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#fbbe3c"}}),(0,r.jsx)("span",{className:o.dot,style:{background:"#58cb42"}})]}),(0,r.jsx)("div",{className:(0,l.Z)(o.browserWindowAddressBar,"text--truncate"),children:t}),(0,r.jsx)("div",{className:o.browserWindowMenuIcon,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar}),(0,r.jsx)("span",{className:o.bar})]})})]}),(0,r.jsx)("div",{className:o.browserWindowBody,style:a,children:e})]})}},38984:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>a,default:()=>f,frontMatter:()=>s,metadata:()=>d,toc:()=>b});var r=t(24246),l=t(71670),o=t(6698),i=t(41124),c=t(16652);const s={toc_min_heading_level:2,toc_max_heading_level:6},a=void 0,d={id:"toc/toc-test-good",title:"toc-test-good",description:"Test the TOC behavior of a real-world MD doc with valid headings",source:"@site/_dogfooding/_docs tests/toc/toc-test-good.mdx",sourceDirName:"toc",slug:"/toc/toc-test-good",permalink:"/tests/docs/toc/toc-test-good",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"Joshua Chen",lastUpdatedAt:1655269473e3,frontMatter:{toc_min_heading_level:2,toc_max_heading_level:6},sidebar:"sidebar",previous:{title:"toc-test-bad",permalink:"/tests/docs/toc/toc-test-bad"}},u={},b=[{value:"lvl 2",id:"lvl-2",level:2},{value:"lvl 3",id:"lvl-3",level:3},{value:"lvl 4",id:"lvl-4",level:4},{value:"lvl 5",id:"lvl-5",level:5},{value:"lvl 6",id:"lvl-6",level:6},{value:"lvl 2",id:"lvl-2-1",level:2},{value:"lvl 3",id:"lvl-3-1",level:3},{value:"lvl 4",id:"lvl-4-1",level:4},{value:"lvl 5",id:"lvl-5-1",level:5},{value:"lvl 6",id:"lvl-6-1",level:6}];function v(e){const n={h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",hr:"hr",p:"p",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Test the TOC behavior of a real-world MD doc with valid headings"}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"lvl-2",children:"lvl 2"}),"\n",(0,r.jsx)(n.h3,{id:"lvl-3",children:"lvl 3"}),"\n",(0,r.jsx)(n.h4,{id:"lvl-4",children:"lvl 4"}),"\n",(0,r.jsx)(n.h5,{id:"lvl-5",children:"lvl 5"}),"\n",(0,r.jsx)(n.h6,{id:"lvl-6",children:"lvl 6"}),"\n",(0,r.jsx)(n.h2,{id:"lvl-2-1",children:"lvl 2"}),"\n",(0,r.jsx)(n.h3,{id:"lvl-3-1",children:"lvl 3"}),"\n",(0,r.jsx)(n.h4,{id:"lvl-4-1",children:"lvl 4"}),"\n",(0,r.jsx)(n.h5,{id:"lvl-5-1",children:"lvl 5"}),"\n",(0,r.jsx)(n.h6,{id:"lvl-6-1",children:"lvl 6"}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.p,{children:"INLINE:"}),"\n","\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(i.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.p,{children:"COLLAPSIBLE:"}),"\n","\n",(0,r.jsx)(o.Z,{children:(0,r.jsx)(c.Z,{toc:b,minHeadingLevel:2,maxHeadingLevel:6})})]})}function f(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(v,{...e})}):v(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>i});var r=t(27378);const l={},o=r.createContext(l);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88d6849c.27dd96a9.js b/assets/js/88d6849c.27dd96a9.js new file mode 100644 index 0000000000..615fa7afcf --- /dev/null +++ b/assets/js/88d6849c.27dd96a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[75947],{78863:e=>{e.exports=JSON.parse('{"tag":{"label":"b","permalink":"/tests/docs/tags/b","allTagsPath":"/tests/docs/tags","count":1,"items":[{"id":"standalone","title":"Standalone doc","description":"This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar","permalink":"/tests/docs/standalone"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/89127.70da48ea.js b/assets/js/89127.70da48ea.js new file mode 100644 index 0000000000..cc934f1a15 --- /dev/null +++ b/assets/js/89127.70da48ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[89127],{89127:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/891c0dad.a96160ef.js b/assets/js/891c0dad.a96160ef.js new file mode 100644 index 0000000000..1937100cf9 --- /dev/null +++ b/assets/js/891c0dad.a96160ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[20663],{3818:(e,n,s)=>{s.d(n,{Z:()=>r});var t=s(24246),i=s(27378);function r({children:e="Boom!",message:n="Boom!\nSomething bad happened, but you can try again!",cause:s}){const[r,o]=(0,i.useState)(!1);if(r)throw new Error(n,{cause:s?new Error(s):void 0});return(0,t.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}},16319:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=s(24246),i=s(71670),r=s(3818);const o={sidebar_label:"Client API"},l="Docusaurus Client API",a={id:"docusaurus-core",title:"Docusaurus Client API",description:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site.",source:"@site/docs/docusaurus-core.mdx",sourceDirName:".",slug:"/docusaurus-core",permalink:"/docs/docusaurus-core",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/docusaurus-core.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,frontMatter:{sidebar_label:"Client API"},sidebar:"api",previous:{title:"CLI",permalink:"/docs/cli"},next:{title:"docusaurus.config.js",permalink:"/docs/api/docusaurus-config"}},c={},d=[{value:"Components",id:"components",level:2},{value:"<code><ErrorBoundary /></code>",id:"errorboundary",level:3},{value:"Props",id:"errorboundary-props",level:4},{value:"<code><Head/></code>",id:"head",level:3},{value:"<code><Link/></code>",id:"link",level:3},{value:"<code>to</code>: string",id:"to-string",level:4},{value:"<code><Redirect/></code>",id:"redirect",level:3},{value:"<code><BrowserOnly/></code>",id:"browseronly",level:3},{value:"Props",id:"browseronly-props",level:4},{value:"Example with code",id:"browseronly-example-code",level:4},{value:"Example with a library",id:"browseronly-example-library",level:4},{value:"<code><Interpolate/></code>",id:"interpolate",level:3},{value:"Props",id:"interpolate-props",level:4},{value:"<code><Translate/></code>",id:"translate",level:3},{value:"Props",id:"translate-props",level:4},{value:"Example",id:"example",level:4},{value:"Hooks",id:"hooks",level:2},{value:"<code>useDocusaurusContext</code>",id:"useDocusaurusContext",level:3},{value:"<code>useIsBrowser</code>",id:"useIsBrowser",level:3},{value:"<code>useBaseUrl</code>",id:"useBaseUrl",level:3},{value:"Options",id:"options",level:4},{value:"Example usage:",id:"example-usage",level:4},{value:"<code>useBaseUrlUtils</code>",id:"useBaseUrlUtils",level:3},{value:"<code>useGlobalData</code>",id:"useGlobalData",level:3},{value:"<code>usePluginData</code>",id:"usePluginData",level:3},{value:"<code>useAllPluginInstancesData</code>",id:"useAllPluginInstancesData",level:3},{value:"<code>useBrokenLinks</code>",id:"useBrokenLinks",level:3},{value:"Functions",id:"functions",level:2},{value:"<code>interpolate</code>",id:"interpolate-1",level:3},{value:"Signature",id:"signature",level:4},{value:"Example",id:"example-1",level:4},{value:"<code>translate</code>",id:"translate-imperative",level:3},{value:"Signature",id:"signature-1",level:4},{value:"Example",id:"example-2",level:4},{value:"Modules",id:"modules",level:2},{value:"<code>ExecutionEnvironment</code>",id:"executionenvironment",level:3},{value:"<code>constants</code>",id:"constants",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"docusaurus-client-api",children:"Docusaurus Client API"}),"\n",(0,t.jsx)(n.p,{children:"Docusaurus provides some APIs on the clients that can be helpful to you when building your site."}),"\n",(0,t.jsx)(n.h2,{id:"components",children:"Components"}),"\n",(0,t.jsx)(n.h3,{id:"errorboundary",children:(0,t.jsx)(n.code,{children:"<ErrorBoundary />"})}),"\n",(0,t.jsxs)(n.p,{children:["This component creates a ",(0,t.jsx)(n.a,{href:"https://reactjs.org/docs/error-boundaries.html",children:"React error boundary"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Use it to wrap components that might throw, and display a fallback when that happens instead of crashing the whole app."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport ErrorBoundary from '@docusaurus/ErrorBoundary';\n\nconst SafeComponent = () => (\n <ErrorBoundary\n fallback={({error, tryAgain}) => (\n <div>\n <p>This component crashed because of error: {error.message}.</p>\n <button onClick={tryAgain}>Try Again!</button>\n </div>\n )}>\n <SomeDangerousComponentThatMayThrow />\n </ErrorBoundary>\n);\n"})}),"\n","\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["To see it in action, click here: ",(0,t.jsx)(r.Z,{})]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Docusaurus uses this component to catch errors within the theme's layout, and also within the entire app."})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This component doesn't catch build-time errors and only protects against client-side render errors that can happen when using stateful React components."})}),"\n",(0,t.jsx)(n.h4,{id:"errorboundary-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"}),": an optional render callback returning a JSX element. It will receive an object with 2 attributes: ",(0,t.jsx)(n.code,{children:"error"}),", the error that was caught, and ",(0,t.jsx)(n.code,{children:"tryAgain"}),", a function (",(0,t.jsx)(n.code,{children:"() => void"}),") callback to reset the error in the component and try rendering it again. If not present, ",(0,t.jsx)(n.code,{children:"@theme/Error"})," will be rendered instead. ",(0,t.jsx)(n.code,{children:"@theme/Error"})," is used for the error boundaries wrapping the site, above the layout."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"fallback"})," prop is a callback, and ",(0,t.jsx)(n.strong,{children:"not a React functional component"}),". You can't use React hooks inside this callback."]})}),"\n",(0,t.jsx)(n.h3,{id:"head",children:(0,t.jsx)(n.code,{children:"<Head/>"})}),"\n",(0,t.jsxs)(n.p,{children:["This reusable React component will manage all of your changes to the document head. It takes plain HTML tags and outputs plain HTML tags and is beginner-friendly. It is a wrapper around ",(0,t.jsx)(n.a,{href:"https://github.com/nfl/react-helmet",children:"React Helmet"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Usage Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'import React from \'react\';\n// highlight-next-line\nimport Head from \'@docusaurus/Head\';\n\nconst MySEO = () => (\n // highlight-start\n <Head>\n <meta property="og:description" content="My custom description" />\n <meta charSet="utf-8" />\n <title>My Title\n \n \n // highlight-end\n);\n'})}),"\n",(0,t.jsx)(n.p,{children:"Nested or latter components will override duplicate usages:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n {/* highlight-start */}\n \n My Title\n \n \n {/* highlight-end */}\n \n {/* highlight-start */}\n \n Nested Title\n \n \n {/* highlight-end */}\n \n\n'})}),"\n",(0,t.jsx)(n.p,{children:"Outputs:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-html",children:'\n Nested Title\n \n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"link",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["This component enables linking to internal pages as well as a powerful performance feature called preloading. Preloading is used to prefetch resources so that the resources are fetched by the time the user navigates with this component. We use an ",(0,t.jsx)(n.code,{children:"IntersectionObserver"})," to fetch a low-priority request when the ",(0,t.jsx)(n.code,{children:""})," is in the viewport and then use an ",(0,t.jsx)(n.code,{children:"onMouseOver"})," event to trigger a high-priority request when it is likely that a user will navigate to the requested resource."]}),"\n",(0,t.jsxs)(n.p,{children:["The component is a wrapper around react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component that adds useful enhancements specific to Docusaurus. All props are passed through to react-router\u2019s ",(0,t.jsx)(n.code,{children:""})," component."]}),"\n",(0,t.jsxs)(n.p,{children:["External links also work, and automatically have these props: ",(0,t.jsx)(n.code,{children:'target="_blank" rel="noopener noreferrer"'}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport Link from '@docusaurus/Link';\n\nconst Page = () => (\n
\n

\n {/* highlight-next-line */}\n Check out my blog!\n

\n

\n {/* highlight-next-line */}\n Follow me on Twitter!\n

\n
\n);\n"})}),"\n",(0,t.jsxs)(n.h4,{id:"to-string",children:[(0,t.jsx)(n.code,{children:"to"}),": string"]}),"\n",(0,t.jsxs)(n.p,{children:["The target location to navigate to. Example: ",(0,t.jsx)(n.code,{children:"/docs/introduction"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Prefer this component to vanilla ",(0,t.jsx)(n.code,{children:""})," tags because Docusaurus does a lot of optimizations (e.g. broken path detection, prefetching, applying base URL...) if you use ",(0,t.jsx)(n.code,{children:""}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"redirect",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["Rendering a ",(0,t.jsx)(n.code,{children:""})," will navigate to a new location. The new location will override the current location in the history stack like server-side redirects (HTTP 3xx) do. You can refer to ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/api/Redirect",children:"React Router's Redirect documentation"})," for more info on available props."]}),"\n",(0,t.jsx)(n.p,{children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {Redirect} from '@docusaurus/router';\n\nconst Home = () => {\n // highlight-next-line\n return ;\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"@docusaurus/router"})," implements ",(0,t.jsx)(n.a,{href:"https://reacttraining.com/react-router/web/guides/quick-start",children:"React Router"})," and supports its features."]})}),"\n",(0,t.jsx)(n.h3,{id:"browseronly",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component permits to render React components only in the browser after the React app has hydrated."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use it for integrating with code that can't run in Node.js, because the ",(0,t.jsx)(n.code,{children:"window"})," or ",(0,t.jsx)(n.code,{children:"document"})," objects are being accessed."]})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": render function prop returning browser-only JSX. Will not be executed in Node.js"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"fallback"})," (optional): JSX to render on the server (Node.js) and until React hydration completes."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-code",children:"Example with code"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = () => {\n return (\n // highlight-start\n \n {() => page url = {window.location.href}}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"browseronly-example-library",children:"Example with a library"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"// highlight-start\nimport BrowserOnly from '@docusaurus/BrowserOnly';\n// highlight-end\n\nconst MyComponent = (props) => {\n return (\n // highlight-start\n Loading...}>\n {() => {\n const LibComponent = require('some-lib').LibComponent;\n return ;\n }}\n \n // highlight-end\n );\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"interpolate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsx)(n.p,{children:"A simple interpolation component for text containing dynamic placeholders."}),"\n",(0,t.jsx)(n.p,{children:"The placeholders will be replaced with the provided dynamic values and JSX elements of your choice (strings, links, styled elements...)."}),"\n",(0,t.jsx)(n.h4,{id:"interpolate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": text containing interpolation placeholders like ",(0,t.jsx)(n.code,{children:"{placeholderName}"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport Link from '@docusaurus/Link';\nimport Interpolate from '@docusaurus/Interpolate';\n\nexport default function VisitMyWebsiteMessage() {\n return (\n // highlight-start\n \n website\n \n ),\n }}>\n {'Hello, {firstName}! How are you? Take a look at my {website}'}\n \n // highlight-end\n );\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate",children:(0,t.jsx)(n.code,{children:""})}),"\n",(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/docs/i18n/introduction",children:"localizing your site"}),", the ",(0,t.jsx)(n.code,{children:""})," component will allow providing ",(0,t.jsx)(n.strong,{children:"translation support to React components"}),", such as your homepage. The ",(0,t.jsx)(n.code,{children:""})," component supports ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The translation strings will statically extracted from your code with the ",(0,t.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,t.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI and a ",(0,t.jsx)(n.code,{children:"code.json"})," translation file will be created in ",(0,t.jsx)(n.code,{children:"website/i18n/[locale]"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," props ",(0,t.jsx)(n.strong,{children:"must be hardcoded strings"}),"."]}),(0,t.jsxs)(n.p,{children:["Apart from the ",(0,t.jsx)(n.code,{children:"values"})," prop used for interpolation, it is ",(0,t.jsx)(n.strong,{children:"not possible to use variables"}),", or the static extraction wouldn't work."]})]}),"\n",(0,t.jsx)(n.h4,{id:"translate-props",children:"Props"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"}),": untranslated string in the default site locale (can contain ",(0,t.jsx)(n.a,{href:"#interpolate",children:"interpolation placeholders"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"id"}),": optional value to be used as the key in JSON translation files"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"description"}),": optional text to help the translator"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"values"}),": optional object containing interpolation placeholder values"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-start\nimport Translate from '@docusaurus/Translate';\n// highlight-end\n\nexport default function Home() {\n return (\n \n

\n {/* highlight-start */}\n \n Welcome to my website\n \n {/* highlight-end */}\n

\n
\n {/* highlight-start */}\n \n {'Welcome, {firstName}! How are you?'}\n \n {/* highlight-end */}\n
\n
\n );\n}\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["You can even omit the children prop and specify a translation string in your ",(0,t.jsx)(n.code,{children:"code.json"})," file manually after running the ",(0,t.jsx)(n.code,{children:"docusaurus write-translations"})," CLI command."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:'\n'})})]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:""})," component supports interpolation. You can also implement ",(0,t.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/i18n/i18n-tutorial.mdx#pluralization",children:"string pluralization"})," through some custom code and the ",(0,t.jsxs)(n.a,{href:"#translate-imperative",children:[(0,t.jsx)(n.code,{children:"translate"})," imperative API"]}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"hooks",children:"Hooks"}),"\n",(0,t.jsx)(n.h3,{id:"useDocusaurusContext",children:(0,t.jsx)(n.code,{children:"useDocusaurusContext"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to access Docusaurus Context. The context contains the ",(0,t.jsx)(n.code,{children:"siteConfig"})," object from ",(0,t.jsx)(n.a,{href:"/docs/api/docusaurus-config",children:"docusaurus.config.js"})," and some additional site metadata."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type PluginVersionInformation =\n | {readonly type: 'package'; readonly version?: string}\n | {readonly type: 'project'}\n | {readonly type: 'local'}\n | {readonly type: 'synthetic'};\n\ntype SiteMetadata = {\n readonly docusaurusVersion: string;\n readonly siteVersion?: string;\n readonly pluginVersions: Record;\n};\n\ntype I18nLocaleConfig = {\n label: string;\n direction: string;\n};\n\ntype I18n = {\n defaultLocale: string;\n locales: [string, ...string[]];\n currentLocale: string;\n localeConfigs: Record;\n};\n\ntype DocusaurusContext = {\n siteConfig: DocusaurusConfig;\n siteMetadata: SiteMetadata;\n globalData: Record;\n i18n: I18n;\n codeTranslations: Record;\n};\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\n\nconst MyComponent = () => {\n // highlight-next-line\n const {siteConfig, siteMetadata} = useDocusaurusContext();\n return (\n
\n {/* highlight-start */}\n

{siteConfig.title}

\n
{siteMetadata.siteVersion}
\n
{siteMetadata.docusaurusVersion}
\n {/* highlight-end */}\n
\n );\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"siteConfig"})," object only contains ",(0,t.jsx)(n.strong,{children:"serializable values"})," (values that are preserved after ",(0,t.jsx)(n.code,{children:"JSON.stringify()"}),"). Functions, regexes, etc. would be lost on the client side."]})}),"\n",(0,t.jsx)(n.h3,{id:"useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser"})}),"\n",(0,t.jsxs)(n.p,{children:["Returns ",(0,t.jsx)(n.code,{children:"true"})," when the React app has successfully hydrated in the browser."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["Use this hook instead of ",(0,t.jsx)(n.code,{children:"typeof windows !== 'undefined'"})," in React rendering logic."]}),(0,t.jsxs)(n.p,{children:["The first client-side render output (in the browser) ",(0,t.jsx)(n.strong,{children:"must be exactly the same"})," as the server-side render output (Node.js). Not following this rule can lead to unexpected hydration behaviors, as described in ",(0,t.jsx)(n.a,{href:"https://www.joshwcomeau.com/react/the-perils-of-rehydration/",children:"The Perils of Rehydration"}),"."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useIsBrowser from '@docusaurus/useIsBrowser';\n\nconst MyComponent = () => {\n // highlight-start\n const isBrowser = useIsBrowser();\n // highlight-end\n return
{isBrowser ? 'Client' : 'Server'}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrl",children:(0,t.jsx)(n.code,{children:"useBaseUrl"})}),"\n",(0,t.jsxs)(n.p,{children:["React hook to prepend your site ",(0,t.jsx)(n.code,{children:"baseUrl"})," to a string."]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Don't use it for regular links!"})}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"/baseUrl/"})," prefix is automatically added to all ",(0,t.jsx)(n.strong,{children:"absolute paths"})," by default:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Markdown: ",(0,t.jsx)(n.code,{children:"[link](/my/path)"})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n",(0,t.jsxs)(n.li,{children:["React: ",(0,t.jsx)(n.code,{children:'link'})," will link to ",(0,t.jsx)(n.code,{children:"/baseUrl/my/path"})]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"options",children:"Options"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"type BaseUrlOptions = {\n forcePrependBaseUrl: boolean;\n absolute: boolean;\n};\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-usage",children:"Example usage:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport useBaseUrl from '@docusaurus/useBaseUrl';\n\nconst SomeImage = () => {\n // highlight-start\n const imgSrc = useBaseUrl('/img/myImage.png');\n // highlight-end\n return ;\n};\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["In most cases, you don't need ",(0,t.jsx)(n.code,{children:"useBaseUrl"}),"."]}),(0,t.jsxs)(n.p,{children:["Prefer a ",(0,t.jsx)(n.code,{children:"require()"})," call for ",(0,t.jsx)(n.a,{href:"/docs/markdown-features/assets",children:"assets"}),":"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"useBaseUrlUtils",children:(0,t.jsx)(n.code,{children:"useBaseUrlUtils"})}),"\n",(0,t.jsxs)(n.p,{children:["Sometimes ",(0,t.jsx)(n.code,{children:"useBaseUrl"})," is not good enough. This hook return additional utils related to your site's base URL."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"withBaseUrl"}),": useful if you need to add base URLs to multiple URLs at once."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\nimport {useBaseUrlUtils} from '@docusaurus/useBaseUrl';\n\nconst Component = () => {\n const urls = ['/a', '/b'];\n // highlight-start\n const {withBaseUrl} = useBaseUrlUtils();\n const urlsWithBaseUrl = urls.map(withBaseUrl);\n // highlight-end\n return
{/* ... */}
;\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useGlobalData",children:(0,t.jsx)(n.code,{children:"useGlobalData"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access Docusaurus global data created by all the plugins."}),"\n",(0,t.jsx)(n.p,{children:"Global data is namespaced by plugin name then by plugin ID."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Plugin ID is only useful when a plugin is used multiple times on the same site. Each plugin instance is able to create its own global data."})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:'type GlobalData = Record<\n PluginName,\n Record<\n PluginId, // "default" by default\n any // plugin-specific data\n >\n>;\n'})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport useGlobalData from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const globalData = useGlobalData();\n const myPluginData = globalData['my-plugin']['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Inspect your site's global data at ",(0,t.jsx)(n.code,{children:".docusaurus/globalData.json"})]})}),"\n",(0,t.jsx)(n.h3,{id:"usePluginData",children:(0,t.jsx)(n.code,{children:"usePluginData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin instance."}),"\n",(0,t.jsx)(n.p,{children:"This is the most convenient hook to access plugin global data and should be used most of the time."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"pluginId"})," is optional if you don't use multi-instance plugins."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function usePluginData(\n pluginName: string,\n pluginId?: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {usePluginData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const myPluginData = usePluginData('my-plugin');\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useAllPluginInstancesData",children:(0,t.jsx)(n.code,{children:"useAllPluginInstancesData"})}),"\n",(0,t.jsx)(n.p,{children:"Access global data created by a specific plugin. Given a plugin name, it returns the data of all the plugins instances of that name, by plugin id."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function useAllPluginInstancesData(\n pluginName: string,\n options?: {failfast?: boolean},\n);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",children:"import React from 'react';\n// highlight-next-line\nimport {useAllPluginInstancesData} from '@docusaurus/useGlobalData';\n\nconst MyComponent = () => {\n // highlight-start\n const allPluginInstancesData = useAllPluginInstancesData('my-plugin');\n const myPluginData = allPluginInstancesData['default'];\n return
{myPluginData.someAttribute}
;\n // highlight-end\n};\n"})}),"\n",(0,t.jsx)(n.h3,{id:"useBrokenLinks",children:(0,t.jsx)(n.code,{children:"useBrokenLinks"})}),"\n",(0,t.jsx)(n.p,{children:"React hook to access the Docusaurus broken link checker APIs, exposing a way for a Docusaurus pages to report and collect their links and anchors."}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["This is an ",(0,t.jsx)(n.strong,{children:"advanced"})," API that ",(0,t.jsx)(n.strong,{children:"most Docusaurus users don't need to use directly"}),"."]}),(0,t.jsxs)(n.p,{children:["It is already ",(0,t.jsx)(n.strong,{children:"built-in"})," in existing high-level components:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.a,{href:"#link",children:(0,t.jsx)(n.code,{children:""})})," component will collect links for you"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"@theme/Heading"})," (used for Markdown headings) will collect anchors"]}),"\n"]}),(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"useBrokenLinks()"})," if you implement your own ",(0,t.jsx)(n.code,{children:""})," or ",(0,t.jsx)(n.code,{children:""})," component."]})]}),"\n",(0,t.jsx)(n.p,{children:"Usage example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyHeading.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyHeading(props) {\n useBrokenLinks().collectAnchor(props.id);\n return

;\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="MyLink.js"',children:"import useBrokenLinks from '@docusaurus/useBrokenLinks';\n\nexport default function MyLink(props) {\n useBrokenLinks().collectLink(props.href);\n return ;\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,t.jsx)(n.h3,{id:"interpolate-1",children:(0,t.jsx)(n.code,{children:"interpolate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#interpolate",children:(0,t.jsx)(n.code,{children:""})})," component."]}),"\n",(0,t.jsx)(n.h4,{id:"signature",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"// Simple string interpolation\nfunction interpolate(text: string, values: Record): string;\n\n// JSX interpolation\nfunction interpolate(\n text: string,\n values: Record,\n): ReactNode;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-1",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"// highlight-next-line\nimport {interpolate} from '@docusaurus/Interpolate';\n\nconst message = interpolate('Welcome {firstName}', {firstName: 'S\xe9bastien'});\n"})}),"\n",(0,t.jsx)(n.h3,{id:"translate-imperative",children:(0,t.jsx)(n.code,{children:"translate"})}),"\n",(0,t.jsxs)(n.p,{children:["The imperative counterpart of the ",(0,t.jsx)(n.a,{href:"#translate",children:(0,t.jsx)(n.code,{children:""})})," component. Also supporting ",(0,t.jsx)(n.a,{href:"#interpolate",children:"placeholders interpolation"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["Use the imperative API for the ",(0,t.jsx)(n.strong,{children:"rare cases"})," where a ",(0,t.jsx)(n.strong,{children:"component cannot be used"}),", such as:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["the page ",(0,t.jsx)(n.code,{children:"title"})," metadata"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"placeholder"})," props of form inputs"]}),"\n",(0,t.jsxs)(n.li,{children:["the ",(0,t.jsx)(n.code,{children:"aria-label"})," props for accessibility"]}),"\n"]})]}),"\n",(0,t.jsx)(n.h4,{id:"signature-1",children:"Signature"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ts",children:"function translate(\n translation: {message: string; id?: string; description?: string},\n values: Record,\n): string;\n"})}),"\n",(0,t.jsx)(n.h4,{id:"example-2",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-jsx",metastring:'title="src/pages/index.js"',children:"import React from 'react';\nimport Layout from '@theme/Layout';\n\n// highlight-next-line\nimport {translate} from '@docusaurus/Translate';\n\nexport default function Home() {\n return (\n \n \n \n );\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,t.jsx)(n.h3,{id:"executionenvironment",children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment"})}),"\n",(0,t.jsx)(n.p,{children:"A module that exposes a few boolean variables to check the current rendering environment."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["For React rendering logic, use ",(0,t.jsx)(n.a,{href:"#useIsBrowser",children:(0,t.jsx)(n.code,{children:"useIsBrowser()"})})," or ",(0,t.jsx)(n.a,{href:"#browseronly",children:(0,t.jsx)(n.code,{children:""})})," instead."]})}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';\n\nif (ExecutionEnvironment.canUseDOM) {\n require('lib-that-only-works-client-side');\n}\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseDOM"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client/browser, ",(0,t.jsx)(n.code,{children:"false"})," on Node.js/prerendering."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseEventListeners"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.addEventListener"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseIntersectionObserver"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"IntersectionObserver"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ExecutionEnvironment.canUseViewport"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"true"})," if on client and has ",(0,t.jsx)(n.code,{children:"window.screen"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"constants",children:(0,t.jsx)(n.code,{children:"constants"})}),"\n",(0,t.jsx)(n.p,{children:"A module exposing useful constants to client-side theme code."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"import {DEFAULT_PLUGIN_ID} from '@docusaurus/constants';\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Named export"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DEFAULT_PLUGIN_ID"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"default"})})]})})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>o});var t=s(27378);const i={},r=t.createContext(i);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/893.110a0b5c.js b/assets/js/893.110a0b5c.js new file mode 100644 index 0000000000..bc1bcf47fd --- /dev/null +++ b/assets/js/893.110a0b5c.js @@ -0,0 +1,26171 @@ +"use strict"; +exports.id = 893; +exports.ids = [893]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 76576: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/clone.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 51568: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ createText) +}); + +// NAMESPACE OBJECT: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ../node_modules/mermaid/dist/mermaid-768dc893.js + 8 modules +var mermaid_768dc893 = __webpack_require__(99854); +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * @param {Array} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function micromark_util_chunked_splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +function micromark_util_chunked_push(list, items) { + if (list.length > 0) { + micromark_util_chunked_splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + micromark_util_chunked_splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array} events + * @param {number} eventIndex + * @returns {Record} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + micromark_util_chunked_splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record} */ + const columnStart = {} + /** @type {Array} */ + const resolveAllConstructs = [] + /** @type {Array} */ + let chunks = [] + /** @type {Array} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array} chunks + * @param {Pick} token + * @returns {Array} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After ` | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After ` | &<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After ` | + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | + * ^^ + * > | + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > |
+ * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after ` | + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | + * ^ + * > | &<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > |
+ * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ../node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + *

!^a

+ *

!^a

+ * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | ab + * ^ + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | ab + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | ab + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a c + * ^ + * > | a c + * ^ + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * > | a c + * ^ + * > | a &<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after ` | a c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After ` | a &<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a &<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a &<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After ` | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array} events + * @returns {Array} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ../node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ../node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract} Parent + * + * @typedef {Omit & {type: 'fragment', children: Array}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array} transforms + * Tree transforms. + * + * @typedef {Partial} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array} stack + * Stack of nodes. + * @property {Array} tokenStack + * Stack of tokens. + * @property {(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ../node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(11464); +;// CONCATENATED MODULE: ../node_modules/mermaid/dist/createText-3b1f58a4.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "
"); + } else if (node.type === "strong") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "emphasis") { + return `${node.children.map(output).join("")}`; + } else if (node.type === "paragraph") { + return `

${node.children.map(output).join("")}

`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + " + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_768dc893.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_768dc893.L)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 40577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51568); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(97312); + + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type) => { + elem.append("marker").attr("id", type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type) => { + elem.append("marker").attr("id", type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type) => { + elem.append("marker").attr("id", type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type) => { + elem.append("defs").append("marker").attr("id", type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '" + label + "" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "
"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.L)(labelText), (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("
") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((str) => { + const parsedInfo = (0,_svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_3__.p)(str); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(//g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_2__.c)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve; + if (diagramType === "graph" || diagramType === "flowchart") { + curve = edge.curve || d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } else { + curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + } + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + switch (edge.arrowTypeStart) { + case "arrow_cross": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); + break; + case "arrow_point": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); + break; + case "arrow_barb": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); + break; + case "arrow_circle": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); + break; + case "aggregation": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); + break; + case "extension": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); + break; + case "composition": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); + break; + case "dependency": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); + break; + case "lollipop": + svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); + break; + } + switch (edge.arrowTypeEnd) { + case "arrow_cross": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); + break; + case "arrow_point": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); + break; + case "arrow_barb": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); + break; + case "arrow_circle": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); + break; + case "aggregation": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); + break; + case "extension": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); + break; + case "composition": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); + break; + case "dependency": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); + break; + case "lollipop": + svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); + break; + } + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 30198: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76576); +/* harmony import */ var _edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(40577); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51568); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63294); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = JSON.parse(JSON.stringify(edge)); + const edge2 = JSON.parse(JSON.stringify(edge)); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_3b1f58a4_js__WEBPACK_IMPORTED_MODULE_5__.c)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.n)((0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, parentCluster) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender(nodes, node.graph, diagramtype, graph.node(v)); + const newEl = o.elem; + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_0005682e_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + adjustClustersAndEdges(graph); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + await recursiveRender(elem, graph, diagramtype); +}; + + + +/***/ }), + +/***/ 83893: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(33426); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88472); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(99854); +/* harmony import */ var _index_f58d48f9_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(30198); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42605); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76576); + + + + + + + + + + + + + + + + + + + + +const SHAPE_STATE = "rect"; +const SHAPE_STATE_WITH_DESC = "rectWithTitle"; +const SHAPE_START = "start"; +const SHAPE_END = "end"; +const SHAPE_DIVIDER = "divider"; +const SHAPE_GROUP = "roundedWithTitle"; +const SHAPE_NOTE = "note"; +const SHAPE_NOTEGROUP = "noteGroup"; +const CSS_DIAGRAM = "statediagram"; +const CSS_STATE = "state"; +const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; +const CSS_EDGE = "transition"; +const CSS_NOTE = "note"; +const CSS_NOTE_EDGE = "note-edge"; +const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; +const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; +const CSS_CLUSTER = "cluster"; +const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; +const CSS_CLUSTER_ALT = "cluster-alt"; +const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; +const PARENT = "parent"; +const NOTE = "note"; +const DOMID_STATE = "state"; +const DOMID_TYPE_SPACER = "----"; +const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; +const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`; +const G_EDGE_STYLE = "fill:none"; +const G_EDGE_ARROWHEADSTYLE = "fill: #333"; +const G_EDGE_LABELPOS = "c"; +const G_EDGE_LABELTYPE = "text"; +const G_EDGE_THICKNESS = "normal"; +let nodeDb = {}; +let graphItemCount = 0; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + cnf[key]; + } +}; +const getClasses = function(text, diagramObj) { + diagramObj.db.extract(diagramObj.db.getRootDocV2()); + return diagramObj.db.getClasses(); +}; +function getClassesFromDbInfo(dbInfoItem) { + if (dbInfoItem === void 0 || dbInfoItem === null) { + return ""; + } else { + if (dbInfoItem.classes) { + return dbInfoItem.classes.join(" "); + } else { + return ""; + } + } +} +function stateDomId(itemId = "", counter = 0, type = "", typeSpacer = DOMID_TYPE_SPACER) { + const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : ""; + return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; +} +const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => { + const itemId = parsedItem.id; + const classStr = getClassesFromDbInfo(diagramStates[itemId]); + if (itemId !== "root") { + let shape = SHAPE_STATE; + if (parsedItem.start === true) { + shape = SHAPE_START; + } + if (parsedItem.start === false) { + shape = SHAPE_END; + } + if (parsedItem.type !== _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.D) { + shape = parsedItem.type; + } + if (!nodeDb[itemId]) { + nodeDb[itemId] = { + id: itemId, + shape, + description: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + classes: `${classStr} ${CSS_DIAGRAM_STATE}` + }; + } + const newNode = nodeDb[itemId]; + if (parsedItem.description) { + if (Array.isArray(newNode.description)) { + newNode.shape = SHAPE_STATE_WITH_DESC; + newNode.description.push(parsedItem.description); + } else { + if (newNode.description.length > 0) { + newNode.shape = SHAPE_STATE_WITH_DESC; + if (newNode.description === itemId) { + newNode.description = [parsedItem.description]; + } else { + newNode.description = [newNode.description, parsedItem.description]; + } + } else { + newNode.shape = SHAPE_STATE; + newNode.description = parsedItem.description; + } + } + newNode.description = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.c)()); + } + if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { + newNode.shape = SHAPE_STATE; + } + if (!newNode.type && parsedItem.doc) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Setting cluster for ", itemId, getDir(parsedItem)); + newNode.type = "group"; + newNode.dir = getDir(parsedItem); + newNode.shape = parsedItem.type === _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.a ? SHAPE_DIVIDER : SHAPE_GROUP; + newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""); + } + const nodeData = { + labelStyle: "", + shape: newNode.shape, + labelText: newNode.description, + // typeof newNode.description === 'object' + // ? newNode.description[0] + // : newNode.description, + classes: newNode.classes, + style: "", + //styles.style, + id: itemId, + dir: newNode.dir, + domId: stateDomId(itemId, graphItemCount), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + nodeData.centerLabel = true; + if (parsedItem.note) { + const noteData = { + labelStyle: "", + shape: SHAPE_NOTE, + labelText: parsedItem.note.text, + classes: CSS_DIAGRAM_NOTE, + // useHtmlLabels: false, + style: "", + // styles.style, + id: itemId + NOTE_ID + "-" + graphItemCount, + domId: stateDomId(itemId, graphItemCount, NOTE), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + const groupData = { + labelStyle: "", + shape: SHAPE_NOTEGROUP, + labelText: parsedItem.note.text, + classes: newNode.classes, + style: "", + // styles.style, + id: itemId + PARENT_ID, + domId: stateDomId(itemId, graphItemCount, PARENT), + type: "group", + padding: 0 + //getConfig().flowchart.padding + }; + graphItemCount++; + const parentNodeId = itemId + PARENT_ID; + g.setNode(parentNodeId, groupData); + g.setNode(noteData.id, noteData); + g.setNode(itemId, nodeData); + g.setParent(itemId, parentNodeId); + g.setParent(noteData.id, parentNodeId); + let from = itemId; + let to = noteData.id; + if (parsedItem.note.position === "left of") { + from = noteData.id; + to = itemId; + } + g.setEdge(from, to, { + arrowhead: "none", + arrowType: "", + style: G_EDGE_STYLE, + labelStyle: "", + classes: CSS_EDGE_NOTE_EDGE, + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS + }); + } else { + g.setNode(itemId, nodeData); + } + } + if (parent && parent.id !== "root") { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Setting node ", itemId, " to be child of its parent ", parent.id); + g.setParent(itemId, parent.id); + } + if (parsedItem.doc) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Adding nodes children "); + setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag); + } +}; +const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("items", doc); + doc.forEach((item) => { + switch (item.stmt) { + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.b: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.D: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.S: + { + setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag); + setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag); + const edgeData = { + id: "edge" + graphItemCount, + arrowhead: "normal", + arrowTypeEnd: "arrow_barb", + style: G_EDGE_STYLE, + labelStyle: "", + label: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS, + classes: CSS_EDGE + }; + g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount); + graphItemCount++; + } + break; + } + }); +}; +const getDir = (parsedItem, defaultDir = _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.c) => { + let dir = defaultDir; + if (parsedItem.doc) { + for (let i = 0; i < parsedItem.doc.length; i++) { + const parsedItemDoc = parsedItem.doc[i]; + if (parsedItemDoc.stmt === "dir") { + dir = parsedItemDoc.value; + } + } + } + return dir; +}; +const draw = async function(text, id, _version, diag) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing state diagram (v2)", id); + nodeDb = {}; + diag.db.getDirection(); + const { securityLevel, state: conf } = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.c)(); + const nodeSpacing = conf.nodeSpacing || 50; + const rankSpacing = conf.rankSpacing || 50; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + diag.db.extract(diag.db.getRootDocV2()); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + const diagramStates = diag.db.getStates(); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: getDir(diag.db.getRootDocV2()), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_f58d48f9_js__WEBPACK_IMPORTED_MODULE_9__.r)(element, g, ["barb"], CSS_DIAGRAM, id); + const padding = 8; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, "statediagramTitleText", conf.titleTopMargin, diag.db.getDiagramTitle()); + const bounds = svg.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + svg.attr("class", CSS_DIAGRAM); + const svgBounds = svg.node().getBBox(); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`); + svg.attr("viewBox", vBox); + const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } +}; +const renderer = { + setConf, + getClasses, + draw +}; +const diagram = { + parser: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_a1a6e33f_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 33426: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ S: () => (/* binding */ STMT_RELATION), +/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ b: () => (/* binding */ STMT_STATE), +/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99854); + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "classDefStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "class": 42, "CLASSENTITY_IDS": 43, "STYLECLASS": 44, "openDirective": 45, "typeDirective": 46, "closeDirective": 47, ":": 48, "argDirective": 49, "direction_tb": 50, "direction_bt": 51, "direction_rl": 52, "direction_lr": 53, "eol": 54, ";": 55, "EDGE_STATE": 56, "STYLE_SEPARATOR": 57, "left_of": 58, "right_of": 59, "open_directive": 60, "type_directive": 61, "arg_directive": 62, "close_directive": 63, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 7: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "class", 43: "CLASSENTITY_IDS", 44: "STYLECLASS", 48: ":", 50: "direction_tb", 51: "direction_bt", 52: "direction_rl", 53: "direction_lr", 55: ";", 56: "EDGE_STATE", 57: "STYLE_SEPARATOR", 58: "left_of", 59: "right_of", 60: "open_directive", 61: "type_directive", 62: "arg_directive", 63: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 5: + this.$ = []; + break; + case 6: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 7: + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = "nl"; + break; + case 12: + this.$ = $$[$0]; + break; + case 13: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 14: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 15: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 19: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 20: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 24: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 25: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 26: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 30: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 31: + case 32: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 33: + case 34: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 35: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 39: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 40: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 41: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 44: + case 45: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 46: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 47: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 50: + yy.parseDirective("%%{", "open_directive"); + break; + case 51: + yy.parseDirective($$[$0], "type_directive"); + break; + case 52: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 53: + yy.parseDirective("}%%", "close_directive", "state"); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])], + defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 41; + case 1: + return 50; + case 2: + return 51; + case 3: + return 52; + case 4: + return 53; + case 5: + this.begin("open_directive"); + return 60; + case 6: + this.begin("type_directive"); + return 61; + case 7: + this.popState(); + this.begin("arg_directive"); + return 48; + case 8: + this.popState(); + this.popState(); + return 63; + case 9: + return 62; + case 10: + break; + case 11: + break; + case 12: + return 5; + case 13: + break; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + this.pushState("SCALE"); + return 17; + case 18: + return 18; + case 19: + this.popState(); + break; + case 20: + this.begin("acc_title"); + return 33; + case 21: + this.popState(); + return "acc_title_value"; + case 22: + this.begin("acc_descr"); + return 35; + case 23: + this.popState(); + return "acc_descr_value"; + case 24: + this.begin("acc_descr_multiline"); + break; + case 25: + this.popState(); + break; + case 26: + return "acc_descr_multiline_value"; + case 27: + this.pushState("CLASSDEF"); + return 38; + case 28: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 29: + this.popState(); + this.pushState("CLASSDEFID"); + return 39; + case 30: + this.popState(); + return 40; + case 31: + this.pushState("CLASS"); + return 42; + case 32: + this.popState(); + this.pushState("CLASS_STYLE"); + return 43; + case 33: + this.popState(); + return 44; + case 34: + this.pushState("SCALE"); + return 17; + case 35: + return 18; + case 36: + this.popState(); + break; + case 37: + this.pushState("STATE"); + break; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 39: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 40: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 41: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 42: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 26; + case 43: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 27; + case 44: + return 50; + case 45: + return 51; + case 46: + return 52; + case 47: + return 53; + case 48: + this.pushState("STATE_STRING"); + break; + case 49: + this.pushState("STATE_ID"); + return "AS"; + case 50: + this.popState(); + return "ID"; + case 51: + this.popState(); + break; + case 52: + return "STATE_DESCR"; + case 53: + return 19; + case 54: + this.popState(); + break; + case 55: + this.popState(); + this.pushState("struct"); + return 20; + case 56: + break; + case 57: + this.popState(); + return 21; + case 58: + break; + case 59: + this.begin("NOTE"); + return 29; + case 60: + this.popState(); + this.pushState("NOTE_ID"); + return 58; + case 61: + this.popState(); + this.pushState("NOTE_ID"); + return 59; + case 62: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 63: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 64: + break; + case 65: + return "NOTE_TEXT"; + case 66: + this.popState(); + return "ID"; + case 67: + this.popState(); + this.pushState("NOTE_TEXT"); + return 24; + case 68: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 31; + case 69: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 31; + case 70: + return 7; + case 71: + return 7; + case 72: + return 16; + case 73: + return 56; + case 74: + return 24; + case 75: + yy_.yytext = yy_.yytext.trim(); + return 14; + case 76: + return 15; + case 77: + return 28; + case 78: + return 57; + case 79: + return 5; + case 80: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [14, 15], "inclusive": false }, "close_directive": { "rules": [14, 15], "inclusive": false }, "arg_directive": { "rules": [8, 9, 14, 15], "inclusive": false }, "type_directive": { "rules": [7, 8, 14, 15], "inclusive": false }, "open_directive": { "rules": [6, 14, 15], "inclusive": false }, "struct": { "rules": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [66], "inclusive": false }, "FLOATING_NOTE": { "rules": [63, 64, 65], "inclusive": false }, "NOTE_TEXT": { "rules": [68, 69], "inclusive": false }, "NOTE_ID": { "rules": [67], "inclusive": false }, "NOTE": { "rules": [60, 61, 62], "inclusive": false }, "CLASS_STYLE": { "rules": [33], "inclusive": false }, "CLASS": { "rules": [32], "inclusive": false }, "CLASSDEFID": { "rules": [30], "inclusive": false }, "CLASSDEF": { "rules": [28, 29], "inclusive": false }, "acc_descr_multiline": { "rules": [25, 26], "inclusive": false }, "acc_descr": { "rules": [23], "inclusive": false }, "acc_title": { "rules": [21], "inclusive": false }, "SCALE": { "rules": [18, 19, 35, 36], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [50], "inclusive": false }, "STATE_STRING": { "rules": [51, 52], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], "inclusive": false }, "ID": { "rules": [14, 15], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.m.parseDirective(this, statement, context, type); +}; +const setRootDoc = (o) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.I)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.v)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_0__.t +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/8945e4ee.973e9fa6.js b/assets/js/8945e4ee.973e9fa6.js new file mode 100644 index 0000000000..afdeede0d1 --- /dev/null +++ b/assets/js/8945e4ee.973e9fa6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[51810],{26727:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=t(24246),n=t(71670);const r={mdx:{format:"md"},date:"2020-08-01T20:00",authors:["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},o="2.0.0-alpha.61",s={permalink:"/changelog/2.0.0-alpha.61",source:"@site/changelog/source/2.0.0-alpha.61.md",title:"2.0.0-alpha.61",description:"New Feature",date:"2020-08-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Bucky Maler",alias:"BuckyMaler",url:"https://github.com/BuckyMaler",imageURL:"https://github.com/BuckyMaler.png",key:"BuckyMaler"},{name:"Drew Alexander",alias:"Drewbi",url:"https://github.com/Drewbi",imageURL:"https://github.com/Drewbi.png",key:"Drewbi"},{name:"Fran\xe7ois Chalifour",alias:"francoischalifour",url:"https://github.com/francoischalifour",imageURL:"https://github.com/francoischalifour.png",key:"francoischalifour"},{name:"Faizan",alias:"mdfaizan7",url:"https://github.com/mdfaizan7",imageURL:"https://github.com/mdfaizan7.png",key:"mdfaizan7"},{name:"M\xe9ril",alias:"mpsq",url:"https://github.com/mpsq",imageURL:"https://github.com/mpsq.png",key:"mpsq"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Teik Jun",alias:"teikjun",url:"https://github.com/teikjun",imageURL:"https://github.com/teikjun.png",key:"teikjun"},{name:"Xuqian",alias:"zxuqian",url:"https://github.com/zxuqian",imageURL:"https://github.com/zxuqian.png",key:"zxuqian"}],frontMatter:{mdx:{format:"md"},date:"2020-08-01T20:00",authors:["BuckyMaler","Drewbi","francoischalifour","mdfaizan7","mpsq","slorber","teikjun","zxuqian"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.62",permalink:"/changelog/2.0.0-alpha.62"},nextItem:{title:"2.0.0-alpha.60",permalink:"/changelog/2.0.0-alpha.60"},listPageLink:"/changelog/page/3"},u={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},l=[];function c(a){return(0,i.jsx)(i.Fragment,{})}function m(a={}){const{wrapper:e}={...(0,n.a)(),...a.components};return e?(0,i.jsx)(e,{...a,children:(0,i.jsx)(c,{...a})}):c()}},71670:(a,e,t)=>{t.d(e,{Z:()=>s,a:()=>o});var i=t(27378);const n={},r=i.createContext(n);function o(a){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof a?a(e):{...e,...a}}),[e,a])}function s(a){let e;return e=a.disableParentContext?"function"==typeof a.components?a.components(n):a.components||n:o(a.components),i.createElement(r.Provider,{value:e},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/899.3a9cf4f5.js b/assets/js/899.3a9cf4f5.js new file mode 100644 index 0000000000..0611178fd7 --- /dev/null +++ b/assets/js/899.3a9cf4f5.js @@ -0,0 +1,540 @@ +"use strict"; +exports.id = 899; +exports.ids = [899]; +exports.modules = { + +/***/ 5899: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7608); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63294); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 9, 10]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "info": 4, "document": 5, "EOF": 6, "line": 7, "statement": 8, "NL": 9, "showInfo": 10, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "info", 6: "EOF", 9: "NL", 10: "showInfo" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + $$.length - 1; + switch (yystate) { + case 1: + return yy; + case 4: + break; + case 6: + yy.setInfo(true); + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])], + defaultActions: { 4: [2, 1] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 4; + case 1: + return 9; + case 2: + return "space"; + case 3: + return 10; + case 4: + return 6; + case 5: + return "TXT"; + } + }, + rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_INFO_DB = { + info: false +}; +let info = DEFAULT_INFO_DB.info; +const setInfo = (toggle) => { + info = toggle; +}; +const getInfo = () => info; +const clear = () => { + info = DEFAULT_INFO_DB.info; +}; +const db = { + clear, + setInfo, + getInfo +}; +const draw = (text, id, version) => { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering info diagram\n" + text); + const svg = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.B)(id); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, 100, 400, true); + const group = svg.append("g"); + group.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version}`); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/8a603d1e.86c88dd8.js b/assets/js/8a603d1e.86c88dd8.js new file mode 100644 index 0000000000..7b7ad87b15 --- /dev/null +++ b/assets/js/8a603d1e.86c88dd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[68461],{26201:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>l,contentTitle:()=>c,default:()=>k,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var n=s(24246),o=s(71670),r=s(41428);const a={},c="Broken Anchors tests",i={id:"tests/links/broken-anchors-tests",title:"Broken Anchors tests",description:"Markdown link to above anchor",source:"@site/_dogfooding/_docs tests/tests/links/broken-anchors-tests.mdx",sourceDirName:"tests/links",slug:"/tests/links/broken-anchors-tests",permalink:"/tests/docs/tests/links/broken-anchors-tests",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1705072185e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Image tests",permalink:"/tests/docs/tests/img-tests"},next:{title:"TOC partial test",permalink:"/tests/docs/tests/toc-partials/"}},l={},d=[];function h(t){const e={a:"a",h1:"h1",p:"p",...(0,o.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"broken-anchors-tests",children:"Broken Anchors tests"}),"\n","\n",(0,n.jsx)(r.Z,{id:"test-link-anchor",children:"#test-link-anchor"}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#test-link-anchor",children:"Markdown link to above anchor"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.a,{href:"#",children:"Markdown link to above anchor"})})]})}function k(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(h,{...t})}):h(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>c,a:()=>a});var n=s(27378);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/8aa79af8.405d5606.js b/assets/js/8aa79af8.405d5606.js new file mode 100644 index 0000000000..318426ea84 --- /dev/null +++ b/assets/js/8aa79af8.405d5606.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90682],{31880:e=>{e.exports=JSON.parse('{"blogBasePath":"/tests/blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/8b6ce0ec.e485aaf7.js b/assets/js/8b6ce0ec.e485aaf7.js new file mode 100644 index 0000000000..2c44791a74 --- /dev/null +++ b/assets/js/8b6ce0ec.e485aaf7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[36731],{39683:(a,t,i)=>{i.r(t),i.d(t,{assets:()=>m,contentTitle:()=>h,default:()=>g,frontMatter:()=>s,metadata:()=>n,toc:()=>r});var e=i(24246),o=i(71670);const s={mdx:{format:"md"},date:"2021-12-09T20:00",authors:["afshinm","agrawal-rohit","armano2","cchaudier","cerkiewny","chimailo","dexbiobot","dsmmcken","duanwilliam","fishmandev","fsmaia","hbulens","HemantSachdeva","JararvisQ","jeffski","Josh-Cena","juffalow","juzhiyuan","KonstHardy","lex111","ludofischer","Martinsos","matthijsgroen","MisterFISHUP","molly","MorookaKotaro","oriooctopus","pal-sig","Patitotective","patrikmasiar","pbiggar","polarathene","revi","robinmetral","ronnyroeller","rootwork","rsapkf","semoal","shafy","sivapalan","skoech","slorber","sohamsshah","spyke01","StanKocken","swalahamani","swapnilmmane","wpyoga"]},h="2.0.0-beta.10",n={permalink:"/changelog/2.0.0-beta.10",source:"@site/changelog/source/2.0.0-beta.10.md",title:"2.0.0-beta.10",description:"New Feature",date:"2021-12-09T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Afshin Mehrabani",alias:"afshinm",url:"https://github.com/afshinm",imageURL:"https://github.com/afshinm.png",key:"afshinm"},{name:"Rohit Agrawal",alias:"agrawal-rohit",url:"https://github.com/agrawal-rohit",imageURL:"https://github.com/agrawal-rohit.png",key:"agrawal-rohit"},{name:"Armano",alias:"armano2",url:"https://github.com/armano2",imageURL:"https://github.com/armano2.png",key:"armano2"},{name:"Christophe Chaudier",alias:"cchaudier",url:"https://github.com/cchaudier",imageURL:"https://github.com/cchaudier.png",key:"cchaudier"},{name:"Devtato",alias:"cerkiewny",url:"https://github.com/cerkiewny",imageURL:"https://github.com/cerkiewny.png",key:"cerkiewny"},{name:"chima ilo",alias:"chimailo",url:"https://github.com/chimailo",imageURL:"https://github.com/chimailo.png",key:"chimailo"},{name:"Shoaib Sajid",alias:"dexbiobot",url:"https://github.com/dexbiobot",imageURL:"https://github.com/dexbiobot.png",key:"dexbiobot"},{name:"Don",alias:"dsmmcken",url:"https://github.com/dsmmcken",imageURL:"https://github.com/dsmmcken.png",key:"dsmmcken"},{name:"duanwilliam",alias:"duanwilliam",url:"https://github.com/duanwilliam",imageURL:"https://github.com/duanwilliam.png",key:"duanwilliam"},{name:"Dmitriy Fishman",alias:"fishmandev",url:"https://github.com/fishmandev",imageURL:"https://github.com/fishmandev.png",key:"fishmandev"},{name:"Fernando Maia",alias:"fsmaia",url:"https://github.com/fsmaia",imageURL:"https://github.com/fsmaia.png",key:"fsmaia"},{name:"Hendrik Bulens",alias:"hbulens",url:"https://github.com/hbulens",imageURL:"https://github.com/hbulens.png",key:"hbulens"},{name:"Hemant Sachdeva",alias:"HemantSachdeva",url:"https://github.com/HemantSachdeva",imageURL:"https://github.com/HemantSachdeva.png",key:"HemantSachdeva"},{name:"Jarar",alias:"JararvisQ",url:"https://github.com/JararvisQ",imageURL:"https://github.com/JararvisQ.png",key:"JararvisQ"},{name:"Jeff Shillitto",alias:"jeffski",url:"https://github.com/jeffski",imageURL:"https://github.com/jeffski.png",key:"jeffski"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Matej Jellus",alias:"juffalow",url:"https://github.com/juffalow",imageURL:"https://github.com/juffalow.png",key:"juffalow"},{name:"\u741a\u81f4\u8fdc",alias:"juzhiyuan",url:"https://github.com/juzhiyuan",imageURL:"https://github.com/juzhiyuan.png",key:"juzhiyuan"},{name:"Konstantin Popov",alias:"KonstHardy",url:"https://github.com/KonstHardy",imageURL:"https://github.com/KonstHardy.png",key:"KonstHardy"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Ludovico Fischer",alias:"ludofischer",url:"https://github.com/ludofischer",imageURL:"https://github.com/ludofischer.png",key:"ludofischer"},{name:"Martin \u0160o\u0161i\u0107",alias:"Martinsos",url:"https://github.com/Martinsos",imageURL:"https://github.com/Martinsos.png",key:"Martinsos"},{name:"Matthijs Groen",alias:"matthijsgroen",url:"https://github.com/matthijsgroen",imageURL:"https://github.com/matthijsgroen.png",key:"matthijsgroen"},{name:"MisterFISHUP",alias:"MisterFISHUP",url:"https://github.com/MisterFISHUP",imageURL:"https://github.com/MisterFISHUP.png",key:"MisterFISHUP"},{name:"Molly White",alias:"molly",url:"https://github.com/molly",imageURL:"https://github.com/molly.png",key:"molly"},{name:"Morooka Kotaro",alias:"MorookaKotaro",url:"https://github.com/MorookaKotaro",imageURL:"https://github.com/MorookaKotaro.png",key:"MorookaKotaro"},{name:"Oliver Ullman",alias:"oriooctopus",url:"https://github.com/oriooctopus",imageURL:"https://github.com/oriooctopus.png",key:"oriooctopus"},{name:"pal-sig",alias:"pal-sig",url:"https://github.com/pal-sig",imageURL:"https://github.com/pal-sig.png",key:"pal-sig"},{name:"Patitotective",alias:"Patitotective",url:"https://github.com/Patitotective",imageURL:"https://github.com/Patitotective.png",key:"Patitotective"},{name:"Patrik M\xe4siar",alias:"patrikmasiar",url:"https://github.com/patrikmasiar",imageURL:"https://github.com/patrikmasiar.png",key:"patrikmasiar"},{name:"Paul Biggar",alias:"pbiggar",url:"https://github.com/pbiggar",imageURL:"https://github.com/pbiggar.png",key:"pbiggar"},{name:"Brennan Kinney",alias:"polarathene",url:"https://github.com/polarathene",imageURL:"https://github.com/polarathene.png",key:"polarathene"},{name:"Yongmin Hong",alias:"revi",url:"https://github.com/revi",imageURL:"https://github.com/revi.png",key:"revi"},{name:"Robin M\xe9tral",alias:"robinmetral",url:"https://github.com/robinmetral",imageURL:"https://github.com/robinmetral.png",key:"robinmetral"},{name:"Ronny Roeller",alias:"ronnyroeller",url:"https://github.com/ronnyroeller",imageURL:"https://github.com/ronnyroeller.png",key:"ronnyroeller"},{name:"Ivan Boothe",alias:"rootwork",url:"https://github.com/rootwork",imageURL:"https://github.com/rootwork.png",key:"rootwork"},{name:"Rey",alias:"rsapkf",url:"https://github.com/rsapkf",imageURL:"https://github.com/rsapkf.png",key:"rsapkf"},{name:"Sergio Moreno",alias:"semoal",url:"https://github.com/semoal",imageURL:"https://github.com/semoal.png",key:"semoal"},{name:"Can Olcer",alias:"shafy",url:"https://github.com/shafy",imageURL:"https://github.com/shafy.png",key:"shafy"},{name:"Varun Sivapalan",alias:"sivapalan",url:"https://github.com/sivapalan",imageURL:"https://github.com/sivapalan.png",key:"sivapalan"},{name:"Sharon Koech",alias:"skoech",url:"https://github.com/skoech",imageURL:"https://github.com/skoech.png",key:"skoech"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Soham Shah",alias:"sohamsshah",url:"https://github.com/sohamsshah",imageURL:"https://github.com/sohamsshah.png",key:"sohamsshah"},{name:"Paden Clayton",alias:"spyke01",url:"https://github.com/spyke01",imageURL:"https://github.com/spyke01.png",key:"spyke01"},{name:"Stan Kocken",alias:"StanKocken",url:"https://github.com/StanKocken",imageURL:"https://github.com/StanKocken.png",key:"StanKocken"},{name:"Swalah Amani",alias:"swalahamani",url:"https://github.com/swalahamani",imageURL:"https://github.com/swalahamani.png",key:"swalahamani"},{name:"Swapnil M Mane",alias:"swapnilmmane",url:"https://github.com/swapnilmmane",imageURL:"https://github.com/swapnilmmane.png",key:"swapnilmmane"},{name:"William Poetra Yoga",alias:"wpyoga",url:"https://github.com/wpyoga",imageURL:"https://github.com/wpyoga.png",key:"wpyoga"}],frontMatter:{mdx:{format:"md"},date:"2021-12-09T20:00",authors:["afshinm","agrawal-rohit","armano2","cchaudier","cerkiewny","chimailo","dexbiobot","dsmmcken","duanwilliam","fishmandev","fsmaia","hbulens","HemantSachdeva","JararvisQ","jeffski","Josh-Cena","juffalow","juzhiyuan","KonstHardy","lex111","ludofischer","Martinsos","matthijsgroen","MisterFISHUP","molly","MorookaKotaro","oriooctopus","pal-sig","Patitotective","patrikmasiar","pbiggar","polarathene","revi","robinmetral","ronnyroeller","rootwork","rsapkf","semoal","shafy","sivapalan","skoech","slorber","sohamsshah","spyke01","StanKocken","swalahamani","swapnilmmane","wpyoga"]},unlisted:!1,prevItem:{title:"2.0.0-beta.11",permalink:"/changelog/2.0.0-beta.11"},nextItem:{title:"2.0.0-beta.9",permalink:"/changelog/2.0.0-beta.9"},listPageLink:"/changelog/page/2"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},r=[];function l(a){return(0,e.jsx)(e.Fragment,{})}function g(a={}){const{wrapper:t}={...(0,o.a)(),...a.components};return t?(0,e.jsx)(t,{...a,children:(0,e.jsx)(l,{...a})}):l()}},71670:(a,t,i)=>{i.d(t,{Z:()=>n,a:()=>h});var e=i(27378);const o={},s=e.createContext(o);function h(a){const t=e.useContext(s);return e.useMemo((function(){return"function"==typeof a?a(t):{...t,...a}}),[t,a])}function n(a){let t;return t=a.disableParentContext?"function"==typeof a.components?a.components(o):a.components||o:h(a.components),e.createElement(s.Provider,{value:t},a.children)}}}]); \ No newline at end of file diff --git a/assets/js/8be705a1.7c4d2e87.js b/assets/js/8be705a1.7c4d2e87.js new file mode 100644 index 0000000000..d03101da19 --- /dev/null +++ b/assets/js/8be705a1.7c4d2e87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1079],{24579:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>o,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>t});var c=i(24246),h=i(71670);const r={mdx:{format:"md"},date:"2021-10-15T20:00",authors:["akajla09","Andrewnt219","BattleOfPlassey","bmiddha","caleeli","ChrisChinchilla","djamaile","Dr-Electron","dr5hn","dsmmcken","EkaterinaMozheiko","erickzhao","forresst","gtnardy","headline-design","hughlilly","ivarconr","jasonbosco","jeffreyaven","jkhaui","Josh-Cena","kingo55","KyrietS","lex111","moonrailgun","MrTechHunter","ntucker","ohkimur","printf-ana","Shrugsy","slorber","stnor","sw-yx","vinckr","Whirl21","zpao"]},n="2.0.0-beta.7",l={permalink:"/changelog/2.0.0-beta.7",source:"@site/changelog/source/2.0.0-beta.7.md",title:"2.0.0-beta.7",description:"New Feature",date:"2021-10-15T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Aditya Kajla",alias:"akajla09",url:"https://github.com/akajla09",imageURL:"https://github.com/akajla09.png",key:"akajla09"},{name:"Andrew Nguyen",alias:"Andrewnt219",url:"https://github.com/Andrewnt219",imageURL:"https://github.com/Andrewnt219.png",key:"Andrewnt219"},{name:"Palash Shrivastava",alias:"BattleOfPlassey",url:"https://github.com/BattleOfPlassey",imageURL:"https://github.com/BattleOfPlassey.png",key:"BattleOfPlassey"},{name:"Bharat Middha",alias:"bmiddha",url:"https://github.com/bmiddha",imageURL:"https://github.com/bmiddha.png",key:"bmiddha"},{name:"David Callizaya",alias:"caleeli",url:"https://github.com/caleeli",imageURL:"https://github.com/caleeli.png",key:"caleeli"},{name:"Chris Chinchilla",alias:"ChrisChinchilla",url:"https://github.com/ChrisChinchilla",imageURL:"https://github.com/ChrisChinchilla.png",key:"ChrisChinchilla"},{name:"djamaile",alias:"djamaile",url:"https://github.com/djamaile",imageURL:"https://github.com/djamaile.png",key:"djamaile"},{name:"Dr-Electron",alias:"Dr-Electron",url:"https://github.com/Dr-Electron",imageURL:"https://github.com/Dr-Electron.png",key:"Dr-Electron"},{name:"Darshan Gada",alias:"dr5hn",url:"https://github.com/dr5hn",imageURL:"https://github.com/dr5hn.png",key:"dr5hn"},{name:"Don",alias:"dsmmcken",url:"https://github.com/dsmmcken",imageURL:"https://github.com/dsmmcken.png",key:"dsmmcken"},{name:"Ekaterina Mozheiko",alias:"EkaterinaMozheiko",url:"https://github.com/EkaterinaMozheiko",imageURL:"https://github.com/EkaterinaMozheiko.png",key:"EkaterinaMozheiko"},{name:"Erick Zhao",alias:"erickzhao",url:"https://github.com/erickzhao",imageURL:"https://github.com/erickzhao.png",key:"erickzhao"},{name:"Forresst",alias:"forresst",url:"https://github.com/forresst",imageURL:"https://github.com/forresst.png",key:"forresst"},{name:"Gabriel T. Nardy",alias:"gtnardy",url:"https://github.com/gtnardy",imageURL:"https://github.com/gtnardy.png",key:"gtnardy"},{name:"headline-design",alias:"headline-design",url:"https://github.com/headline-design",imageURL:"https://github.com/headline-design.png",key:"headline-design"},{name:"Hugh Lilly",alias:"hughlilly",url:"https://github.com/hughlilly",imageURL:"https://github.com/hughlilly.png",key:"hughlilly"},{name:"Ivar Conradi \xd8sthus",alias:"ivarconr",url:"https://github.com/ivarconr",imageURL:"https://github.com/ivarconr.png",key:"ivarconr"},{name:"Jason Bosco",alias:"jasonbosco",url:"https://github.com/jasonbosco",imageURL:"https://github.com/jasonbosco.png",key:"jasonbosco"},{name:"Jeffrey Aven",alias:"jeffreyaven",url:"https://github.com/jeffreyaven",imageURL:"https://github.com/jeffreyaven.png",key:"jeffreyaven"},{name:"Jordan Lee",alias:"jkhaui",url:"https://github.com/jkhaui",imageURL:"https://github.com/jkhaui.png",key:"jkhaui"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Robert Kingston",alias:"kingo55",url:"https://github.com/kingo55",imageURL:"https://github.com/kingo55.png",key:"kingo55"},{name:"Kyriet",alias:"KyrietS",url:"https://github.com/KyrietS",imageURL:"https://github.com/KyrietS.png",key:"KyrietS"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"moonrailgun",alias:"moonrailgun",url:"https://github.com/moonrailgun",imageURL:"https://github.com/moonrailgun.png",key:"moonrailgun"},{name:"Mahdi Hamldar",alias:"MrTechHunter",url:"https://github.com/MrTechHunter",imageURL:"https://github.com/MrTechHunter.png",key:"MrTechHunter"},{name:"Nathaniel Tucker",alias:"ntucker",url:"https://github.com/ntucker",imageURL:"https://github.com/ntucker.png",key:"ntucker"},{name:"Daniel Costrasel",alias:"ohkimur",url:"https://github.com/ohkimur",imageURL:"https://github.com/ohkimur.png",key:"ohkimur"},{name:"Ana Carolina",alias:"printf-ana",url:"https://github.com/printf-ana",imageURL:"https://github.com/printf-ana.png",key:"printf-ana"},{name:"Shrugsy",alias:"Shrugsy",url:"https://github.com/Shrugsy",imageURL:"https://github.com/Shrugsy.png",key:"Shrugsy"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Stefan Norberg",alias:"stnor",url:"https://github.com/stnor",imageURL:"https://github.com/stnor.png",key:"stnor"},{name:"swyx",alias:"sw-yx",url:"https://github.com/sw-yx",imageURL:"https://github.com/sw-yx.png",key:"sw-yx"},{name:"Vincent",alias:"vinckr",url:"https://github.com/vinckr",imageURL:"https://github.com/vinckr.png",key:"vinckr"},{name:"Whirl",alias:"Whirl21",url:"https://github.com/Whirl21",imageURL:"https://github.com/Whirl21.png",key:"Whirl21"},{name:"Paul O\u2019Shannessy",alias:"zpao",url:"https://github.com/zpao",imageURL:"https://github.com/zpao.png",key:"zpao"}],frontMatter:{mdx:{format:"md"},date:"2021-10-15T20:00",authors:["akajla09","Andrewnt219","BattleOfPlassey","bmiddha","caleeli","ChrisChinchilla","djamaile","Dr-Electron","dr5hn","dsmmcken","EkaterinaMozheiko","erickzhao","forresst","gtnardy","headline-design","hughlilly","ivarconr","jasonbosco","jeffreyaven","jkhaui","Josh-Cena","kingo55","KyrietS","lex111","moonrailgun","MrTechHunter","ntucker","ohkimur","printf-ana","Shrugsy","slorber","stnor","sw-yx","vinckr","Whirl21","zpao"]},unlisted:!1,prevItem:{title:"2.0.0-beta.8",permalink:"/changelog/2.0.0-beta.8"},nextItem:{title:"2.0.0-beta.6",permalink:"/changelog/2.0.0-beta.6"},listPageLink:"/changelog/page/2"},o={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},t=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udca5 Breaking Change",id:"boom-breaking-change",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 36",id:"committers-36",level:2}];function a(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,h.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5683",children:"#5683"})," feat: make Translate children optional (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5674",children:"#5674"})," polish(theme-classic): guard against potential definition mistakes in Tabs (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5618",children:"#5618"})," feat: maintain page position for clicked grouped tabs (",(0,c.jsx)(s.a,{href:"https://github.com/Shrugsy",children:"@Shrugsy"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/4330",children:"#4330"})," feat(content-blog): add full blog post html into RSS/Atom feeds (",(0,c.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5642",children:"#5642"})," feat(theme-classic, plugin-docs): sidebar item level-specific className + allow customization (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5635",children:"#5635"})," feat: npm init docusaurus, yarn create docusaurus (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5589",children:"#5589"})," feat: properly type-check the Docusaurus config of new sites (",(0,c.jsx)(s.a,{href:"https://github.com/bmiddha",children:"@bmiddha"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5578",children:"#5578"})," feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) (",(0,c.jsx)(s.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5498",children:"#5498"})," feat: make Webpack url-loader limit configurable (env variable) (",(0,c.jsx)(s.a,{href:"https://github.com/stnor",children:"@stnor"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5545",children:"#5545"})," feat: make tags route path configurable (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"boom-breaking-change",children:"\ud83d\udca5 Breaking Change"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5674",children:"#5674"})," polish(theme-classic): guard against potential definition mistakes in Tabs (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5618",children:"#5618"})," feat: maintain page position for clicked grouped tabs (",(0,c.jsx)(s.a,{href:"https://github.com/Shrugsy",children:"@Shrugsy"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5634",children:"#5634"})," chore: remove unused Bootstrap theme (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5578",children:"#5578"})," feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) (",(0,c.jsx)(s.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5592",children:"#5592"})," refactor: use CSS Modules for toggle styles (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5694",children:"#5694"})," fix: proper collapsing of long element (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5684",children:"#5684"})," fix: use realpath for site dir to resolve symlink (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5645",children:"#5645"})," fix: place root route at the end (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5629",children:"#5629"})," fix: text/link hydration bug (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5699",children:"#5699"})," fix: apply announcement bar class if only needed (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5667",children:"#5667"})," fix: expand tag column on truncated post (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5668",children:"#5668"})," fix: preserve line breaks when copy code in Firefox (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5647",children:"#5647"})," feat(theme-classic): make first tab the default tab (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5652",children:"#5652"})," fix: restore duplicate Tabs rendering to fix hydration issue (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5643",children:"#5643"})," fix(theme-classic): reset default style for task lists (",(0,c.jsx)(s.a,{href:"https://github.com/EkaterinaMozheiko",children:"@EkaterinaMozheiko"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5571",children:"#5571"})," fix: highlight active item in recent post list (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5481",children:"#5481"})," fix: use heading itself as anchor for better crawling (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5677",children:"#5677"})," fix: Don't ignore options.transforms for buble (",(0,c.jsx)(s.a,{href:"https://github.com/ntucker",children:"@ntucker"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5556",children:"#5556"})," fix: pin react-live due to possible mismatch React (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5690",children:"#5690"})," fix: preserve hash in asset link (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5540",children:"#5540"})," fix: do not use ideal image plugin in dev env (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5606",children:"#5606"})," fix(docs): create tags route if only tags exists (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5601",children:"#5601"})," fix(module-type-aliases): move @type packages to dependencies (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5495",children:"#5495"})," fix: ignore code block lines when creating excerpt (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5490",children:"#5490"})," fix: install deps for new project via Yarn on Windows properly (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5479",children:"#5479"})," fix: add docs tag validation to solve #5478 (",(0,c.jsx)(s.a,{href:"https://github.com/sw-yx",children:"@sw-yx"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5709",children:"#5709"})," refactor: cleanup scroll handlers (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5627",children:"#5627"})," refactor: various TOC improvements (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5469",children:"#5469"})," refactor: Adjust styling of back top top button (",(0,c.jsx)(s.a,{href:"https://github.com/dsmmcken",children:"@dsmmcken"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5708",children:"#5708"})," refactor: hide hash link from crawlers (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5649",children:"#5649"})," refactor: improve pt-BR translation for classic theme (",(0,c.jsx)(s.a,{href:"https://github.com/printf-ana",children:"@printf-ana"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5646",children:"#5646"})," refactor: complete missing and fix ES translations (",(0,c.jsx)(s.a,{href:"https://github.com/caleeli",children:"@caleeli"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5640",children:"#5640"})," style: update Persian language translations (",(0,c.jsx)(s.a,{href:"https://github.com/MrTechHunter",children:"@MrTechHunter"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5630",children:"#5630"})," refactor: standardize using media queries (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5487",children:"#5487"})," refactor: use only one close SVG icon (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5592",children:"#5592"})," refactor: use CSS Modules for toggle styles (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5485",children:"#5485"})," polish: prevent pop navigation on back if navbar sidebar is open (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5472",children:"#5472"})," polish(theme-classic): add Chinese translations (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5636",children:"#5636"})," refactor: make all Props defined as interface + readonly (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-remark-plugin-npm2yarn"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5560",children:"#5560"})," polish: remove unused eslint-disable (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5580",children:"#5580"})," refactor(core): type improvements for ",(0,c.jsx)(s.code,{children:"PendingNavigation"})," (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5496",children:"#5496"})," refactor: remove deprecated createRequireFromPath (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5681",children:"#5681"})," docs(v2): Add CountryStateCityAPI site to showcase page (",(0,c.jsx)(s.a,{href:"https://github.com/dr5hn",children:"@dr5hn"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5661",children:"#5661"})," docs: updated cloudywithachanceofbigdata.com blog showcase (",(0,c.jsx)(s.a,{href:"https://github.com/jeffreyaven",children:"@jeffreyaven"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5658",children:"#5658"})," docs: Algolia plugin must be enabled before crawling the site (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5654",children:"#5654"})," docs: Add Warrant Docs site to showcase page (",(0,c.jsx)(s.a,{href:"https://github.com/akajla09",children:"@akajla09"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5655",children:"#5655"})," docs: Added cloudywithachanceofbigdata.com showcase blog (",(0,c.jsx)(s.a,{href:"https://github.com/jeffreyaven",children:"@jeffreyaven"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5648",children:"#5648"})," docs: add ory documentation to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/vinckr",children:"@vinckr"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5644",children:"#5644"})," docs: add djamaile blog to site showcase (",(0,c.jsx)(s.a,{href:"https://github.com/djamaile",children:"@djamaile"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5641",children:"#5641"})," docs: add Lux Algo to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5638",children:"#5638"})," docs: add nanos world docs to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/gtnardy",children:"@gtnardy"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5610",children:"#5610"})," docs: Add IOTA wiki to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/Dr-Electron",children:"@Dr-Electron"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5489",children:"#5489"})," docs: add additional search options, typesense and local search (",(0,c.jsx)(s.a,{href:"https://github.com/jasonbosco",children:"@jasonbosco"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5590",children:"#5590"})," docs(website): document npm2yarn plugin + use new Tabs API everywhere (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5591",children:"#5591"})," docs: Add whirl.codes to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/Whirl21",children:"@Whirl21"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5574",children:"#5574"})," docs: add Pipeline UI to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/headline-design",children:"@headline-design"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5585",children:"#5585"})," docs: fix more references to Discord channels (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5572",children:"#5572"})," docs: add Blogasaurus to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/BattleOfPlassey",children:"@BattleOfPlassey"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5575",children:"#5575"})," docs: clarify MDX version used (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5581",children:"#5581"})," docs(website): update all Discord links (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5566",children:"#5566"})," docs: fix code example (",(0,c.jsx)(s.a,{href:"https://github.com/ChrisChinchilla",children:"@ChrisChinchilla"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5559",children:"#5559"})," docs: minor grammatical correction (",(0,c.jsx)(s.a,{href:"https://github.com/jkhaui",children:"@jkhaui"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5543",children:"#5543"})," docs: add note about files being ignored when prefixed with an unders\u2026 (",(0,c.jsx)(s.a,{href:"https://github.com/KyrietS",children:"@KyrietS"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5549",children:"#5549"})," docs: Add Mint Metrics site to the Showcase (",(0,c.jsx)(s.a,{href:"https://github.com/kingo55",children:"@kingo55"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5546",children:"#5546"})," docs: add unleash to showcase (",(0,c.jsx)(s.a,{href:"https://github.com/ivarconr",children:"@ivarconr"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5539",children:"#5539"})," docs: improve escape pipe in Markdown tables (",(0,c.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5486",children:"#5486"})," docs: mention Netlify ignore build setting (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5482",children:"#5482"})," docs: update docusaurus-plugin-relative-paths description (",(0,c.jsx)(s.a,{href:"https://github.com/ohkimur",children:"@ohkimur"}),")"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"create-docusaurus"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5678",children:"#5678"})," refactor(content-docs): refactor sidebars, Joi validation, generator rework, expose config types (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5666",children:"#5666"})," chore: upgrade Infima to alpha.34 (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5639",children:"#5639"})," misc: update base translation + remove extra char (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:["Other\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5669",children:"#5669"})," fix: allow ColorGenerator to parse colors with prefix ",(0,c.jsx)(s.code,{children:"#"})," (",(0,c.jsx)(s.a,{href:"https://github.com/Andrewnt219",children:"@Andrewnt219"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5632",children:"#5632"})," chore: prepare Algolia migration (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5628",children:"#5628"})," chore: fix warning after build (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5573",children:"#5573"})," misc: fix ungrammatical sentence about 5-min tutorial (",(0,c.jsx)(s.a,{href:"https://github.com/hughlilly",children:"@hughlilly"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5499",children:"#5499"})," chore: set up CodeQL (",(0,c.jsx)(s.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5474",children:"#5474"})," chore: remove beta.4 docs (already archived) (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5634",children:"#5634"})," chore: remove unused Bootstrap theme (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-bootstrap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5611",children:"#5611"})," chore: upgrade Prettier + regenerate lock file (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5609",children:"#5609"})," chore: upgrade Terser-related dependencies (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-cssnano-preset"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-init"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-migrate"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-client-redirects"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-debug"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-ideal-image"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-common"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils-validation"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,c.jsx)(s.code,{children:"docusaurus"}),", ",(0,c.jsx)(s.code,{children:"lqip-loader"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5608",children:"#5608"})," chore: upgrade dependencies (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5605",children:"#5605"})," refactor(core): enforce noImplicitAny (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5603",children:"#5603"})," fix(preset-classic): fix TS build issue (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-analytics"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-google-gtag"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5561",children:"#5561"})," refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-plugin-sitemap"}),", ",(0,c.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5579",children:"#5579"})," refactor(preset-classic): migrate preset-classic to TypeScript (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:[(0,c.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/5484",children:"#5484"})," chore: regenerate beta.6 examples + fix regen script (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"committers-36",children:"Committers: 36"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsxs)(s.li,{children:["Aditya Kajla (",(0,c.jsx)(s.a,{href:"https://github.com/akajla09",children:"@akajla09"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,c.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ana Carolina (",(0,c.jsx)(s.a,{href:"https://github.com/printf-ana",children:"@printf-ana"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Andrew Nguyen (",(0,c.jsx)(s.a,{href:"https://github.com/Andrewnt219",children:"@Andrewnt219"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Bharat Middha (",(0,c.jsx)(s.a,{href:"https://github.com/bmiddha",children:"@bmiddha"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Chris Chinchilla (",(0,c.jsx)(s.a,{href:"https://github.com/ChrisChinchilla",children:"@ChrisChinchilla"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Daniel Costrasel (",(0,c.jsx)(s.a,{href:"https://github.com/ohkimur",children:"@ohkimur"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Darshan Gada (",(0,c.jsx)(s.a,{href:"https://github.com/dr5hn",children:"@dr5hn"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["David Callizaya (",(0,c.jsx)(s.a,{href:"https://github.com/caleeli",children:"@caleeli"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Don (",(0,c.jsx)(s.a,{href:"https://github.com/dsmmcken",children:"@dsmmcken"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ekaterina Mozheiko (",(0,c.jsx)(s.a,{href:"https://github.com/EkaterinaMozheiko",children:"@EkaterinaMozheiko"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Erick Zhao (",(0,c.jsx)(s.a,{href:"https://github.com/erickzhao",children:"@erickzhao"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Forresst (",(0,c.jsx)(s.a,{href:"https://github.com/forresst",children:"@forresst"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Gabriel T. Nardy (",(0,c.jsx)(s.a,{href:"https://github.com/gtnardy",children:"@gtnardy"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Hugh Lilly (",(0,c.jsx)(s.a,{href:"https://github.com/hughlilly",children:"@hughlilly"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Ivar Conradi \xd8sthus (",(0,c.jsx)(s.a,{href:"https://github.com/ivarconr",children:"@ivarconr"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Jason Bosco (",(0,c.jsx)(s.a,{href:"https://github.com/jasonbosco",children:"@jasonbosco"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Jeffrey Aven (",(0,c.jsx)(s.a,{href:"https://github.com/jeffreyaven",children:"@jeffreyaven"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Jordan Lee (",(0,c.jsx)(s.a,{href:"https://github.com/jkhaui",children:"@jkhaui"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Joshua Chen (",(0,c.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Kyriet (",(0,c.jsx)(s.a,{href:"https://github.com/KyrietS",children:"@KyrietS"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Mahdi Hamldar (",(0,c.jsx)(s.a,{href:"https://github.com/MrTechHunter",children:"@MrTechHunter"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Nathaniel Tucker (",(0,c.jsx)(s.a,{href:"https://github.com/ntucker",children:"@ntucker"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Palash Shrivastava (",(0,c.jsx)(s.a,{href:"https://github.com/BattleOfPlassey",children:"@BattleOfPlassey"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Paul O\u2019Shannessy (",(0,c.jsx)(s.a,{href:"https://github.com/zpao",children:"@zpao"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Robert Kingston (",(0,c.jsx)(s.a,{href:"https://github.com/kingo55",children:"@kingo55"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Stefan Norberg (",(0,c.jsx)(s.a,{href:"https://github.com/stnor",children:"@stnor"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,c.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Vincent (",(0,c.jsx)(s.a,{href:"https://github.com/vinckr",children:"@vinckr"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["Whirl (",(0,c.jsx)(s.a,{href:"https://github.com/Whirl21",children:"@Whirl21"}),")"]}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"https://github.com/Dr-Electron",children:"@Dr-Electron"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"https://github.com/Shrugsy",children:"@Shrugsy"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"https://github.com/djamaile",children:"@djamaile"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"https://github.com/headline-design",children:"@headline-design"})}),"\n",(0,c.jsxs)(s.li,{children:["moonrailgun (",(0,c.jsx)(s.a,{href:"https://github.com/moonrailgun",children:"@moonrailgun"}),")"]}),"\n",(0,c.jsxs)(s.li,{children:["swyx (",(0,c.jsx)(s.a,{href:"https://github.com/sw-yx",children:"@sw-yx"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,h.a)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(a,{...e})}):a(e)}},71670:(e,s,i)=>{i.d(s,{Z:()=>l,a:()=>n});var c=i(27378);const h={},r=c.createContext(h);function n(e){const s=c.useContext(r);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(h):e.components||h:n(e.components),c.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8bf84dbe.813f3dab.js b/assets/js/8bf84dbe.813f3dab.js new file mode 100644 index 0000000000..7a811ec46a --- /dev/null +++ b/assets/js/8bf84dbe.813f3dab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[78326],{31911:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var s=t(24246),l=t(71670);const r={mdx:{format:"md"},date:"2020-03-08T20:00",authors:["lex111"]},i="2.0.0-alpha.48",c={permalink:"/changelog/2.0.0-alpha.48",source:"@site/changelog/source/2.0.0-alpha.48.md",title:"2.0.0-alpha.48",description:"HOTFIX for 2.0.0-alpha.44.",date:"2020-03-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"}],frontMatter:{mdx:{format:"md"},date:"2020-03-08T20:00",authors:["lex111"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.49",permalink:"/changelog/2.0.0-alpha.49"},nextItem:{title:"2.0.0-alpha.44",permalink:"/changelog/2.0.0-alpha.44"},listPageLink:"/changelog/page/4"},a={authorsImageUrls:[void 0]},o=[{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"Committers: 1",id:"committers-1",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"HOTFIX for 2.0.0-alpha.44"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Other\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2383",children:"#2383"})," fix(v2): specify proper version for stylelint-copyright (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"docusaurus"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2382",children:"#2382"})," fix(v2): add missing preset-typescript dependency (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"docusaurus-theme-classic"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/2386",children:"#2386"})," fix(v2): add missing prismjs dependency and Noop component (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"committers-1",children:"Committers: 1"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Alexey Pyltsyn (",(0,s.jsx)(n.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>i});var s=t(27378);const l={},r=s.createContext(l);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8d042c9e.15a823c9.js b/assets/js/8d042c9e.15a823c9.js new file mode 100644 index 0000000000..8a61f232aa --- /dev/null +++ b/assets/js/8d042c9e.15a823c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[77966],{31413:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/changelog/page/2","page":2,"postsPerPage":20,"totalPages":5,"totalCount":93,"previousPage":"/changelog","nextPage":"/changelog/page/3","blogDescription":"Keep yourself up-to-date about new features in every release","blogTitle":"Docusaurus changelog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8dfde3ea.f232327d.js b/assets/js/8dfde3ea.f232327d.js new file mode 100644 index 0000000000..997aa3efbd --- /dev/null +++ b/assets/js/8dfde3ea.f232327d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30135],{10932:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-11-08T20:00"},s="2.0.0-alpha.33",c={permalink:"/changelog/2.0.0-alpha.33",source:"@site/changelog/source/2.0.0-alpha.33.md",title:"2.0.0-alpha.33",description:"Features",date:"2019-11-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-11-08T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.34",permalink:"/changelog/2.0.0-alpha.34"},nextItem:{title:"2.0.0-alpha.32",permalink:"/changelog/2.0.0-alpha.32"},listPageLink:"/changelog/page/4"},l={authorsImageUrls:[]},i=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e13cf96.0e4b1d26.js b/assets/js/8e13cf96.0e4b1d26.js new file mode 100644 index 0000000000..306de7f7de --- /dev/null +++ b/assets/js/8e13cf96.0e4b1d26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[84290],{98408:s=>{s.exports=JSON.parse('{"tag":{"label":"visibility","permalink":"/tests/docs/tags/visibility","allTagsPath":"/tests/docs/tags","count":3,"items":[{"id":"tests/visibility/some-drafts/draft-subcategory/listed1","title":"Some Drafts - Listed 1","description":"Regular doc","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1","title":"Some Unlisteds - Listed 1","description":"Regular doc","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"},{"id":"tests/visibility/index","title":"Visibility","description":"A category to play with draft/unlisted front matter.","permalink":"/tests/docs/tests/visibility/"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/8ef3f86c.7e2a022b.js b/assets/js/8ef3f86c.7e2a022b.js new file mode 100644 index 0000000000..2907054690 --- /dev/null +++ b/assets/js/8ef3f86c.7e2a022b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[83489],{91098:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var i=s(24246),o=s(71670);const t={id:"introduction",slug:"/i18n/introduction"},l="i18n - Introduction",r={id:"i18n/introduction",title:"i18n - Introduction",description:"It is easy to translate a Docusaurus website with its internationalization (i18n) support.",source:"@site/docs/i18n/i18n-introduction.mdx",sourceDirName:"i18n",slug:"/i18n/introduction",permalink:"/docs/i18n/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/i18n/i18n-introduction.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672409308e3,frontMatter:{id:"introduction",slug:"/i18n/introduction"},sidebar:"docs",previous:{title:"Deployment",permalink:"/docs/deployment"},next:{title:"Tutorial",permalink:"/docs/i18n/tutorial"}},a={},d=[{value:"Goals",id:"goals",level:2},{value:"i18n goals",id:"i18n-goals",level:3},{value:"i18n non-goals",id:"i18n-non-goals",level:3},{value:"Translation workflow",id:"translation-workflow",level:2},{value:"Overview",id:"overview",level:3},{value:"Translation files",id:"translation-files",level:3},{value:"Markdown files",id:"markdown-files",level:4},{value:"JSON files",id:"json-files",level:4},{value:"Data files",id:"data-files",level:4},{value:"Translation files location",id:"translation-files-location",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"i18n---introduction",children:"i18n - Introduction"}),"\n",(0,i.jsxs)(n.p,{children:["It is ",(0,i.jsx)(n.strong,{children:"easy to translate a Docusaurus website"})," with its internationalization (",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Internationalization_and_localization",children:"i18n"}),") support."]}),"\n",(0,i.jsx)(n.h2,{id:"goals",children:"Goals"}),"\n",(0,i.jsxs)(n.p,{children:["It is important to understand the ",(0,i.jsx)(n.strong,{children:"design decisions"})," behind the Docusaurus i18n support."]}),"\n",(0,i.jsxs)(n.p,{children:["For more context, you can read the initial ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/issues/3317",children:"RFC"})," and ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/3325",children:"PR"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-goals",children:"i18n goals"}),"\n",(0,i.jsx)(n.p,{children:"The goals of the Docusaurus i18n system are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Simple"}),": just put the translated files in the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible translation workflows"}),": use Git (monorepo, forks, or submodules), SaaS software, FTP"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Flexible deployment options"}),": single, multiple domains, or hybrid"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Modular"}),": allow plugin authors to provide i18n support"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Low-overhead runtime"}),": documentation is mostly static and does not require heavy JS libraries or polyfills"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Scalable build-times"}),": allow building and deploying localized sites independently"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Localize assets"}),": an image of your site might contain text that should be translated"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"No coupling"}),": not forced to use any SaaS, yet integrations are possible"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsxs)(n.strong,{children:["Easy to use with ",(0,i.jsx)(n.a,{href:"https://crowdin.com/",children:"Crowdin"})]}),": a lot of Docusaurus v1 sites use Crowdin and should be able to migrate to v2"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Good SEO defaults"}),": we set useful SEO headers like ",(0,i.jsx)(n.a,{href:"https://developers.google.com/search/docs/advanced/crawling/localized-versions",children:(0,i.jsx)(n.code,{children:"hreflang"})})," for you"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"RTL support"}),": locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Default translations"}),": classic theme labels are translated for you in ",(0,i.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-translations/locales",children:"many languages"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"i18n-non-goals",children:"i18n non-goals"}),"\n",(0,i.jsx)(n.p,{children:"We don't provide support for:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Automatic locale detection"}),": opinionated, and best done on the ",(0,i.jsx)(n.a,{href:"/docs/deployment",children:"server (your hosting provider)"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation SaaS software"}),": you are responsible to understand the external tools of your choice"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translation of slugs"}),": technically complicated, little SEO value"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"translation-workflow",children:"Translation workflow"}),"\n",(0,i.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Overview of the workflow to create a translated Docusaurus website:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configure"}),": declare the default locale and alternative locales in ",(0,i.jsx)(n.a,{href:"/docs/api/docusaurus-config#i18n",children:(0,i.jsx)(n.code,{children:"docusaurus.config.js"})})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Translate"}),": put the translation files at the correct filesystem location"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Deploy"}),": build and deploy your site using a single or multi-domain strategy"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files",children:"Translation files"}),"\n",(0,i.jsx)(n.p,{children:"You will work with three kinds of translation files."}),"\n",(0,i.jsx)(n.h4,{id:"markdown-files",children:"Markdown files"}),"\n",(0,i.jsx)(n.p,{children:"This is the main content of your Docusaurus website."}),"\n",(0,i.jsx)(n.p,{children:"Markdown and MDX documents are translated as a whole, to fully preserve the translation context, instead of splitting each sentence as a separate string."}),"\n",(0,i.jsx)(n.h4,{id:"json-files",children:"JSON files"}),"\n",(0,i.jsx)(n.p,{children:"JSON is used to translate:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Your React code: standalone React pages in ",(0,i.jsx)(n.code,{children:"src/pages"}),", or other components"]}),"\n",(0,i.jsxs)(n.li,{children:["Layout labels provided through ",(0,i.jsx)(n.code,{children:"themeConfig"}),": navbar, footer"]}),"\n",(0,i.jsx)(n.li,{children:"Layout labels provided through plugin options: docs sidebar category labels, blog sidebar title..."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The JSON format used is called ",(0,i.jsx)(n.strong,{children:"Chrome i18n"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "myTranslationKey1": {\n "message": "Translated message 1",\n "description": "myTranslationKey1 is used on the homepage"\n },\n "myTranslationKey2": {\n "message": "Translated message 2",\n "description": "myTranslationKey2 is used on the FAQ page"\n }\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"The choice was made for 2 reasons:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Description attribute"}),": to help translators with additional context"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Widely supported"}),": ",(0,i.jsx)(n.a,{href:"https://developer.chrome.com/docs/extensions/mv2/i18n-messages/",children:"Chrome extensions"}),", ",(0,i.jsx)(n.a,{href:"https://support.crowdin.com/file-formats/chrome-json/",children:"Crowdin"}),", ",(0,i.jsx)(n.a,{href:"https://docs.transifex.com/formats/chrome-json",children:"Transifex"}),", ",(0,i.jsx)(n.a,{href:"https://help.phrase.com/help/chrome-json-messages",children:"Phrase"}),", ",(0,i.jsx)(n.a,{href:"https://www.applanga.com/docs/formats/chrome_i18n_json",children:"Applanga"}),", etc."]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"data-files",children:"Data files"}),"\n",(0,i.jsxs)(n.p,{children:["Some plugins may read from external data files that are localized as a whole. For example, the blog plugin uses an ",(0,i.jsx)(n.a,{href:"/docs/blog#global-authors",children:(0,i.jsx)(n.code,{children:"authors.yml"})})," file that can be translated by creating a copy under ",(0,i.jsx)(n.code,{children:"i18n/[locale]/docusaurus-plugin-content-blog/authors.yml"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"translation-files-location",children:"Translation files location"}),"\n",(0,i.jsx)(n.p,{children:"The translation files should be created at the correct filesystem location."}),"\n",(0,i.jsxs)(n.p,{children:["Each locale and plugin has its own ",(0,i.jsx)(n.code,{children:"i18n"})," subfolder:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]/...\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["For multi-instance plugins, the path is ",(0,i.jsx)(n.code,{children:"website/i18n/[locale]/[pluginName]-[pluginId]/..."}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"Translating a very simple Docusaurus site in French would lead to the following tree:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"website/i18n\n\u2514\u2500\u2500 fr\n \u251c\u2500\u2500 code.json # Any text label present in the React code\n \u2502 # Includes text labels from the themes' code\n \u251c\u2500\u2500 docusaurus-plugin-content-blog # translation data the blog plugin needs\n \u2502 \u2514\u2500\u2500 2020-01-01-hello.md\n \u2502\n \u251c\u2500\u2500 docusaurus-plugin-content-docs # translation data the docs plugin needs\n \u2502 \u251c\u2500\u2500 current\n \u2502 \u2502 \u251c\u2500\u2500 doc1.md\n \u2502 \u2502 \u2514\u2500\u2500 doc2.mdx\n \u2502 \u2514\u2500\u2500 current.json\n \u2502\n \u2514\u2500\u2500 docusaurus-theme-classic # translation data the classic theme needs\n \u251c\u2500\u2500 footer.json # Text labels in your footer theme config\n \u2514\u2500\u2500 navbar.json # Text labels in your navbar theme config\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The JSON files are initialized with the ",(0,i.jsx)(n.a,{href:"/docs/cli#docusaurus-write-translations-sitedir",children:(0,i.jsx)(n.code,{children:"docusaurus write-translations"})})," CLI command. Each plugin sources its own translated content under the corresponding folder, while the ",(0,i.jsx)(n.code,{children:"code.json"})," file defines all text labels used in the React code."]}),"\n",(0,i.jsxs)(n.p,{children:["Each content plugin or theme is different, and ",(0,i.jsx)(n.strong,{children:"defines its own translation files location"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs#i18n",children:"Docs i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog#i18n",children:"Blog i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages#i18n",children:"Pages i18n"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/api/themes/configuration#i18n",children:"Themes i18n"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var i=s(27378);const o={},t=i.createContext(o);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f8b968f.6f2f923f.js b/assets/js/8f8b968f.6f2f923f.js new file mode 100644 index 0000000000..3ff131378b --- /dev/null +++ b/assets/js/8f8b968f.6f2f923f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6399],{9635:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>n,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var s=a(24246),r=a(71670);const i={mdx:{format:"md"},date:"2021-06-30T20:00",authors:["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},n="2.0.0-beta.3",o={permalink:"/changelog/2.0.0-beta.3",source:"@site/changelog/source/2.0.0-beta.3.md",title:"2.0.0-beta.3",description:"New Feature",date:"2021-06-30T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Adam Uhl\xed\u0159",alias:"AuHau",url:"https://github.com/AuHau",imageURL:"https://github.com/AuHau.png",key:"AuHau"},{name:"bperlmutter",alias:"bperlmutter",url:"https://github.com/bperlmutter",imageURL:"https://github.com/bperlmutter.png",key:"bperlmutter"},{name:"dirslashls",alias:"dirslashls",url:"https://github.com/dirslashls",imageURL:"https://github.com/dirslashls.png",key:"dirslashls"},{name:"Ayush das",alias:"iamayushdas",url:"https://github.com/iamayushdas",imageURL:"https://github.com/iamayushdas.png",key:"iamayushdas"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"Jules Sam. Randolph",alias:"jsamr",url:"https://github.com/jsamr",imageURL:"https://github.com/jsamr.png",key:"jsamr"},{name:"Danny Lin",alias:"kdrag0n",url:"https://github.com/kdrag0n",imageURL:"https://github.com/kdrag0n.png",key:"kdrag0n"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Rami Yushuvaev",alias:"ramiy",url:"https://github.com/ramiy",imageURL:"https://github.com/ramiy.png",key:"ramiy"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Taylor Reece",alias:"taylorreece",url:"https://github.com/taylorreece",imageURL:"https://github.com/taylorreece.png",key:"taylorreece"}],frontMatter:{mdx:{format:"md"},date:"2021-06-30T20:00",authors:["AuHau","bperlmutter","dirslashls","iamayushdas","Josh-Cena","jsamr","kdrag0n","lex111","ramiy","slorber","taylorreece"]},unlisted:!1,prevItem:{title:"2.0.0-beta.4",permalink:"/changelog/2.0.0-beta.4"},nextItem:{title:"2.0.0-beta.2",permalink:"/changelog/2.0.0-beta.2"},listPageLink:"/changelog/page/2"},m={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},u=[];function l(e){return(0,s.jsx)(s.Fragment,{})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l()}},71670:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>n});var s=a(27378);const r={},i=s.createContext(r);function n(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90199c54.b20e984a.js b/assets/js/90199c54.b20e984a.js new file mode 100644 index 0000000000..5584e2dded --- /dev/null +++ b/assets/js/90199c54.b20e984a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[60352],{26826:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":5,"totalPages":5,"totalCount":21,"previousPage":"/blog/page/2","nextPage":"/blog/page/4","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/90458.46218da3.js b/assets/js/90458.46218da3.js new file mode 100644 index 0000000000..9731f6af74 --- /dev/null +++ b/assets/js/90458.46218da3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90458],{90458:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(99854),s=n(63294),r=n(75627),a=n(36304),o=n(54628),c=(n(27693),n(7608),n(31699),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,26,27,28],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,23],h=[1,24],d=[1,27],u=[4,6,9,11,17,18,20,22,23,26,27,28],p={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 19:i.addTask(r[o],0,""),this.$=r[o];break;case 20:i.addEvent(r[o].substr(2)),this.$=r[o];break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(r[o],"type_directive");break;case 23:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","timeline")}},table:[{3:1,4:e,7:3,12:4,28:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,28:n},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},{1:[2,2]},{14:25,15:[1,26],31:d},t([15,31],[2,22]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:22,10:28,12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,29]},{21:[1,30]},t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(u,[2,9]),{14:34,31:d},{31:[2,23]},{11:[1,35]},t(u,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,v,x,k,w,S,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(S=void 0,"number"!=typeof(S=i.pop()||d.lex()||1)&&(S instanceof Array&&(S=(i=S).pop()),S=e.symbols_[S]||S),f=S),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(v in w=[],a[m])this.terminals_[v]&&v>2&&w.push("'"+this.terminals_[v]+"'");E=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:w})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,y=d.yylloc;break;case 2:if(x=this.productions_[_[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,u.yy,_[1],s,r].concat(h))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};function g(){this.yy={}}return p.lexer=y,g.prototype=p,p.Parser=g,new g}());c.parser=c;const l=c;let h="",d=0;const u=[],p=[],y=[],g=()=>i.M,f=(t,e,n)=>{(0,i.D)(globalThis,t,e,n)},m=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.v)()},_=function(t){h=t,u.push(t)},b=function(){return u},v=function(){let t=S();let e=0;for(;!t&&e<100;)t=S(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},k=function(t){y.find((t=>t.id===d-1)).events.push(t)},w=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},S=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},$={clear:m,getCommonDb:g,addSection:_,getSections:b,getTasks:v,addTask:x,addTaskOrg:w,addEvent:k,parseDirective:f},E=Object.freeze(Object.defineProperty({__proto__:null,addEvent:k,addSection:_,addTask:x,addTaskOrg:w,clear:m,default:$,getCommonDb:g,getSections:b,getTasks:v,parseDirective:f},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
"===t)&&(r.pop(),c.text(r.join(" ").trim()),r="
"===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const D=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},T=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},C=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),l=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),D(a,e,s),e},L=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},M=function(t,e,n,s,r,a,o,c,l,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),y=C(c,e,n,o).height;if(i.l.debug("taskHeight after draw",y),c.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=A(t,p.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+l+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},A=function(t,e,n,s,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=C(c,e,n,a).height;o+=h,c.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=c,o},O={db:E,renderer:{setConf:()=>{},draw:function(t,e,n,r){var a,o;const c=(0,i.c)(),l=c.leftMargin??50;i.l.debug("timeline",r.db);const h=c.securityLevel;let d;"sandbox"===h&&(d=(0,s.Ys)("#i"+e));const u=("sandbox"===h?(0,s.Ys)(d.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),T(u);const g=r.db.getSections();i.l.debug("sections",g);let f=0,m=0,_=0,b=0,v=50+l,x=50;b=50;let k=0,w=!0;g.forEach((function(t){const e=L(u,{number:k,descr:t,section:k,width:150,padding:20,maxHeight:f},c);i.l.debug("sectionHeight before draw",e),f=Math.max(f,e+20)}));let S=0,$=0;i.l.debug("tasks.length",p.length);for(const[s,I]of p.entries()){const t={number:s,descr:I,section:I.section,width:150,padding:20,maxHeight:m},e=L(u,t,c);i.l.debug("taskHeight before draw",e),m=Math.max(m,e+20),S=Math.max(S,I.events.length);let n=0;for(let i=0;i0?g.forEach((t=>{const e=p.filter((e=>e.section===t)),n={number:k,descr:t,section:k,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:f};i.l.debug("sectionNode",n);const s=u.append("g"),r=C(s,n,k,c);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${v}, 50)`),x+=f+50,e.length>0&&M(u,e,k,v,x,m,c,S,$,f,!1),v+=200*Math.max(e.length,1),x=50,k++})):(w=!1,M(u,p,k,v,x,m,c,S,$,f,!0));const E=u.node().getBBox();i.l.debug("bounds",E),y&&u.append("text").text(y).attr("x",E.width/2-l).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),_=w?f+m+150:m+100;u.append("g").attr("class","lineWrapper").append("line").attr("x1",l).attr("y1",_).attr("x2",E.width+3*l).attr("y2",_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.p)(void 0,u,(null==(a=c.timeline)?void 0:a.padding)??50,(null==(o=c.timeline)?void 0:o.useMaxWidth)??!1)}},parser:l,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>o,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>a});var i=n(24246),r=n(71670);const c={mdx:{format:"md"},date:"2024-01-05T20:00",authors:["axmmisaka","c0h1b4","jgarrow","Josh-Cena","OzakIOne","SimenB","slorber","tats-u"]},o="3.1.0",l={permalink:"/changelog/3.1.0",source:"@site/changelog/source/3.1.0.md",title:"3.1.0",description:"New Feature",date:"2024-01-05T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"axmmisaka",alias:"axmmisaka",url:"https://github.com/axmmisaka",imageURL:"https://github.com/axmmisaka.png",key:"axmmisaka"},{name:"c0h1b4",alias:"c0h1b4",url:"https://github.com/c0h1b4",imageURL:"https://github.com/c0h1b4.png",key:"c0h1b4"},{name:"Janessa Garrow",alias:"jgarrow",url:"https://github.com/jgarrow",imageURL:"https://github.com/jgarrow.png",key:"jgarrow"},{name:"Joshua Chen",alias:"Josh-Cena",url:"https://github.com/Josh-Cena",imageURL:"https://github.com/Josh-Cena.png",key:"Josh-Cena"},{name:"ozaki",alias:"OzakIOne",url:"https://github.com/OzakIOne",imageURL:"https://github.com/OzakIOne.png",key:"OzakIOne"},{name:"Simen Bekkhus",alias:"SimenB",url:"https://github.com/SimenB",imageURL:"https://github.com/SimenB.png",key:"SimenB"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Tatsunori Uchino",alias:"tats-u",url:"https://github.com/tats-u",imageURL:"https://github.com/tats-u.png",key:"tats-u"}],frontMatter:{mdx:{format:"md"},date:"2024-01-05T20:00",authors:["axmmisaka","c0h1b4","jgarrow","Josh-Cena","OzakIOne","SimenB","slorber","tats-u"]},unlisted:!1,prevItem:{title:"3.1.1",permalink:"/changelog/3.1.1"},nextItem:{title:"3.0.1",permalink:"/changelog/3.0.1"},listPageLink:"/changelog/"},t={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},a=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udd27 Maintenance",id:"wrench-maintenance",level:2},{value:"Committers: 8",id:"committers-8",level:2}];function h(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9528",children:"#9528"})," feat(core): make broken link checker detect broken anchors - add ",(0,i.jsx)(s.code,{children:"onBrokenAnchors"})," config (",(0,i.jsx)(s.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9674",children:"#9674"})," feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9671",children:"#9671"})," feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML (",(0,i.jsx)(s.a,{href:"https://github.com/tats-u",children:"@tats-u"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-pages"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-utils"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9624",children:"#9624"})," feat: siteConfig.markdown.parseFrontMatter hook (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9610",children:"#9610"})," feat(core): enable port configuration via environment variable (",(0,i.jsx)(s.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9704",children:"#9704"})," fix(theme): allow empty code blocks and live playgrounds (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"create-docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9696",children:"#9696"})," fix(create-docusaurus): fix init template code blocks, and little improvements (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-pwa"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9668",children:"#9668"})," fix(pwa-plugin): upgrade workbox (",(0,i.jsx)(s.a,{href:"https://github.com/SimenB",children:"@SimenB"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9648",children:"#9648"})," fix(cli): output help when no conventional config + no subcommand (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9631",children:"#9631"})," fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9617",children:"#9617"})," fix(utils): Markdown link replacement with <> but no spaces (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-module-type-aliases"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9612",children:"#9612"})," fix(type-aliases): add ",(0,i.jsx)(s.code,{children:"title"})," prop for imported inline SVG React components (",(0,i.jsx)(s.a,{href:"https://github.com/axmmisaka",children:"@axmmisaka"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9581",children:"#9581"})," fix(content-blog): add baseUrl for author.image_url (",(0,i.jsx)(s.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-translations"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9477",children:"#9477"})," fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) (",(0,i.jsx)(s.a,{href:"https://github.com/c0h1b4",children:"@c0h1b4"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-common"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9335",children:"#9335"})," refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize (",(0,i.jsx)(s.a,{href:"https://github.com/jgarrow",children:"@jgarrow"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"wrench-maintenance",children:"\ud83d\udd27 Maintenance"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-search-algolia"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/9604",children:"#9604"})," chore: add lint autofix CI job (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-8",children:"Committers: 8"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Janessa Garrow (",(0,i.jsx)(s.a,{href:"https://github.com/jgarrow",children:"@jgarrow"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Joshua Chen (",(0,i.jsx)(s.a,{href:"https://github.com/Josh-Cena",children:"@Josh-Cena"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Simen Bekkhus (",(0,i.jsx)(s.a,{href:"https://github.com/SimenB",children:"@SimenB"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Tatsunori Uchino (",(0,i.jsx)(s.a,{href:"https://github.com/tats-u",children:"@tats-u"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/c0h1b4",children:"@c0h1b4"})}),"\n",(0,i.jsxs)(s.li,{children:["axmmisaka (",(0,i.jsx)(s.a,{href:"https://github.com/axmmisaka",children:"@axmmisaka"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["ozaki (",(0,i.jsx)(s.a,{href:"https://github.com/OzakIOne",children:"@OzakIOne"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>o});var i=n(27378);const r={},c=i.createContext(r);function o(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9059c83e.d944db44.js b/assets/js/9059c83e.d944db44.js new file mode 100644 index 0000000000..d24bd784da --- /dev/null +++ b/assets/js/9059c83e.d944db44.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96677],{70072:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var n=o(24246),t=o(71670);const r={mdx:{format:"md"},date:"2019-11-04T20:00"},i="2.0.0-alpha.32",a={permalink:"/changelog/2.0.0-alpha.32",source:"@site/changelog/source/2.0.0-alpha.32.md",title:"2.0.0-alpha.32",description:"Features",date:"2019-11-04T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-11-04T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.33",permalink:"/changelog/2.0.0-alpha.33"},nextItem:{title:"2.0.0-alpha.31",permalink:"/changelog/2.0.0-alpha.31"},listPageLink:"/changelog/page/4"},c={authorsImageUrls:[]},l=[{value:"Features",id:"features",level:2},{value:"Bug Fixes",id:"bug-fixes",level:2},{value:"Performance Improvement",id:"performance-improvement",level:2},{value:"Others",id:"others",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",li:"li",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h2,{id:"features",children:"Features"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Add ",(0,n.jsx)(s.code,{children:""})," component for client side redirect. Example Usage:"]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"import React from 'react';\nimport {Redirect} from '@docusaurus/router';\n\nfunction Home() {\n return ;\n}\n"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Allow user to add custom HTML to footer items. ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/1905",children:"#1905"})]}),"\n",(0,n.jsxs)(s.li,{children:["Added code block line highlighting feature (thanks @lex111)! If you have previously swizzled the ",(0,n.jsx)(s.code,{children:"CodeBlock"})," theme component, it is recommended to update your source code to have this feature. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1860",children:"#1860"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Fix ",(0,n.jsx)(s.code,{children:"@theme/Tabs"})," component to be able to create tabs with only one item."]}),"\n",(0,n.jsxs)(s.li,{children:["Fix MDX ",(0,n.jsx)(s.code,{children:"@theme/Heading"})," component. If there is no id, it should not create anchor link."]}),"\n",(0,n.jsxs)(s.li,{children:["Fixed a bug in which if ",(0,n.jsx)(s.code,{children:"themeConfig.algolia"})," is not defined, the custom searchbar won't appear. If you've swizzled Algolia ",(0,n.jsx)(s.code,{children:"SearchBar"})," component before, please update your source code otherwise CSS might break. See ",(0,n.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/1909/files",children:"#1909"})," for reference."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'- \n+
\n'})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Slightly adjust search icon position to be more aligned on small width device. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1893",children:"#1893"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Fix algolia styling bug, previously search suggestion result is sometimes hidden. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1915",children:"#1915"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Changed the way we read the ",(0,n.jsx)(s.code,{children:"USE_SSH"})," env variable during deployment to be the same as in v1."]}),"\n",(0,n.jsxs)(s.li,{children:["Fix accessing ",(0,n.jsx)(s.code,{children:"docs/"})," or ",(0,n.jsx)(s.code,{children:"/docs/xxxx"})," that does not match any existing doc page should return 404 (Not found) page, not blank page. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1903",children:"#1903"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Prioritize ",(0,n.jsx)(s.code,{children:"@docusaurus/core"})," dependencies/ node_modules over user's node_modules. This fix a bug whereby if user has core-js@3 on its own node_modules but docusaurus depends on core-js@2, we previously encounter ",(0,n.jsx)(s.code,{children:"Module not found: core-js/modules/xxxx"})," (because core-js@3 doesn't have that)."]}),"\n",(0,n.jsxs)(s.li,{children:["Fix a bug where docs plugin add ",(0,n.jsx)(s.code,{children:"/docs"})," route even if docs folder is empty. We also improved docs plugin test coverage to 100% for stability before working on docs versioning. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1912",children:"#1912"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"performance-improvement",children:"Performance Improvement"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Reduce memory usage consumption. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1900",children:"#1900"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Significantly reduce main bundle size and initial HTML payload on production build. Generated files from webpack is also shorter in name. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1898",children:"#1898"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Simplify blog metadata. Previously, accessing ",(0,n.jsx)(s.code,{children:"/blog/post-xxx"})," will request for next and prev blog post metadata too aside from target post metadata. We should only request target post metadata. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1908",children:"#1908"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"others",children:"Others"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Convert sitemap plugin to TypeScript. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1894",children:"#1894"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Refactor dark mode toggle into a hook. (",(0,n.jsx)(s.a,{href:"https://github.com/facebook/Docusaurus/issues/1899",children:"#1899"}),")"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,s,o)=>{o.d(s,{Z:()=>a,a:()=>i});var n=o(27378);const t={},r=n.createContext(t);function i(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/906.5e91afa0.js b/assets/js/906.5e91afa0.js new file mode 100644 index 0000000000..09db688d02 --- /dev/null +++ b/assets/js/906.5e91afa0.js @@ -0,0 +1,10805 @@ +"use strict"; +exports.id = 906; +exports.ids = [906]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 62906: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16525); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99854); +/* harmony import */ var _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(97312); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42605); + + + + + + + + + + + + + + + +let idCache = {}; +const padding = 20; +const getGraphId = function(label) { + const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); + if (foundEntry) { + return foundEntry[0]; + } +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); + elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + const conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().class; + idCache = {}; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); + const securityLevel = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true + }); + g.setGraph({ + isMultiGraph: true + }); + g.setDefaultEdgeLabel(function() { + return {}; + }); + const classes = diagObj.db.getClasses(); + const keys = Object.keys(classes); + for (const key of keys) { + const classDef = classes[key]; + const node = _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_7__.s.drawClass(diagram2, classDef, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); + } + const relations = diagObj.db.getRelations(); + relations.forEach(function(relation) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info( + "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) + ); + g.setEdge( + getGraphId(relation.id1), + getGraphId(relation.id2), + { + relation + }, + relation.title || "DEFAULT" + ); + }); + const notes = diagObj.db.getNotes(); + notes.forEach(function(note) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding note: ${JSON.stringify(note)}`); + const node = _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_7__.s.drawNote(diagram2, note, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + if (note.class && note.class in classes) { + g.setEdge( + note.id, + getGraphId(note.class), + { + relation: { + id1: note.id, + id2: note.class, + relation: { + type1: "none", + type2: "none", + lineType: 10 + } + } + }, + "DEFAULT" + ); + } + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + g.nodes().forEach(function(v) { + if (v !== void 0 && g.node(v) !== void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Node " + v + ": " + JSON.stringify(g.node(v))); + root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr( + "transform", + "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )" + ); + } + }); + g.edges().forEach(function(e) { + if (e !== void 0 && g.edge(e) !== void 0) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e))); + _svgDraw_70101091_js__WEBPACK_IMPORTED_MODULE_7__.s.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj); + } + }); + const svgBounds = diagram2.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); + diagram2.attr("viewBox", vBox); +}; +const renderer = { + draw +}; +const diagram = { + parser: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_8__.p, + db: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_8__.d, + renderer, + styles: _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_8__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_622362e4_js__WEBPACK_IMPORTED_MODULE_8__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 16525: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 34], $V1 = [1, 35], $V2 = [1, 36], $V3 = [1, 37], $V4 = [1, 9], $V5 = [1, 8], $V6 = [1, 19], $V7 = [1, 20], $V8 = [1, 21], $V9 = [1, 40], $Va = [1, 41], $Vb = [1, 27], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 30], $Vj = [1, 31], $Vk = [1, 45], $Vl = [1, 42], $Vm = [1, 43], $Vn = [1, 44], $Vo = [1, 46], $Vp = [1, 24], $Vq = [1, 16, 24], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 64], $Vw = [1, 65], $Vx = [1, 66], $Vy = [1, 16, 24, 52], $Vz = [1, 77], $VA = [1, 16, 24, 27, 28, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 59, 68, 69, 70, 71, 72, 73, 74, 79, 81, 94, 96, 97, 98, 99], $VC = [1, 86], $VD = [28, 94, 96, 97, 98, 99], $VE = [28, 73, 74, 94, 96, 97, 98, 99], $VF = [28, 68, 69, 70, 71, 72, 94, 96, 97, 98, 99], $VG = [1, 99], $VH = [1, 16, 24, 50, 52, 55], $VI = [1, 16, 24, 36], $VJ = [8, 9, 10, 11, 19, 23, 44, 46, 48, 53, 57, 58, 60, 61, 63, 65, 75, 76, 78, 82, 94, 96, 97, 98, 99]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "statements": 6, "direction": 7, "direction_tb": 8, "direction_bt": 9, "direction_rl": 10, "direction_lr": 11, "graphConfig": 12, "openDirective": 13, "typeDirective": 14, "closeDirective": 15, "NEWLINE": 16, ":": 17, "argDirective": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "CLASS_DIAGRAM": 23, "EOF": 24, "statement": 25, "classLabel": 26, "SQS": 27, "STR": 28, "SQE": 29, "namespaceName": 30, "alphaNumToken": 31, "className": 32, "classLiteralName": 33, "GENERICTYPE": 34, "relationStatement": 35, "LABEL": 36, "namespaceStatement": 37, "classStatement": 38, "methodStatement": 39, "annotationStatement": 40, "clickStatement": 41, "cssClassStatement": 42, "noteStatement": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "namespaceIdentifier": 49, "STRUCT_START": 50, "classStatements": 51, "STRUCT_STOP": 52, "NAMESPACE": 53, "classIdentifier": 54, "STYLE_SEPARATOR": 55, "members": 56, "CLASS": 57, "ANNOTATION_START": 58, "ANNOTATION_END": 59, "MEMBER": 60, "SEPARATOR": 61, "relation": 62, "NOTE_FOR": 63, "noteText": 64, "NOTE": 65, "relationType": 66, "lineType": 67, "AGGREGATION": 68, "EXTENSION": 69, "COMPOSITION": 70, "DEPENDENCY": 71, "LOLLIPOP": 72, "LINE": 73, "DOTTED_LINE": 74, "CALLBACK": 75, "LINK": 76, "LINK_TARGET": 77, "CLICK": 78, "CALLBACK_NAME": 79, "CALLBACK_ARGS": 80, "HREF": 81, "CSSCLASS": 82, "commentToken": 83, "textToken": 84, "graphCodeTokens": 85, "textNoTagsToken": 86, "TAGSTART": 87, "TAGEND": 88, "==": 89, "--": 90, "PCT": 91, "DEFAULT": 92, "SPACE": 93, "MINUS": 94, "keywords": 95, "UNICODE_TEXT": 96, "NUM": 97, "ALPHA": 98, "BQUOTE_STR": 99, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "direction_tb", 9: "direction_bt", 10: "direction_rl", 11: "direction_lr", 16: "NEWLINE", 17: ":", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 23: "CLASS_DIAGRAM", 24: "EOF", 27: "SQS", 28: "STR", 29: "SQE", 34: "GENERICTYPE", 36: "LABEL", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 50: "STRUCT_START", 52: "STRUCT_STOP", 53: "NAMESPACE", 55: "STYLE_SEPARATOR", 57: "CLASS", 58: "ANNOTATION_START", 59: "ANNOTATION_END", 60: "MEMBER", 61: "SEPARATOR", 63: "NOTE_FOR", 65: "NOTE", 68: "AGGREGATION", 69: "EXTENSION", 70: "COMPOSITION", 71: "DEPENDENCY", 72: "LOLLIPOP", 73: "LINE", 74: "DOTTED_LINE", 75: "CALLBACK", 76: "LINK", 77: "LINK_TARGET", 78: "CLICK", 79: "CALLBACK_NAME", 80: "CALLBACK_ARGS", 81: "HREF", 82: "CSSCLASS", 85: "graphCodeTokens", 87: "TAGSTART", 88: "TAGEND", 89: "==", 90: "--", 91: "PCT", 92: "DEFAULT", 93: "SPACE", 94: "MINUS", 95: "keywords", 96: "UNICODE_TEXT", 97: "NUM", 98: "ALPHA", 99: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 2], [3, 1], [7, 1], [7, 1], [7, 1], [7, 1], [4, 1], [5, 4], [5, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [6, 1], [6, 2], [6, 3], [26, 3], [30, 1], [30, 2], [32, 1], [32, 1], [32, 2], [32, 2], [32, 2], [25, 1], [25, 2], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 2], [25, 2], [25, 1], [37, 4], [37, 5], [49, 2], [51, 1], [51, 2], [51, 3], [38, 1], [38, 3], [38, 4], [38, 6], [54, 2], [54, 3], [40, 4], [56, 1], [56, 2], [39, 1], [39, 2], [39, 1], [39, 1], [35, 3], [35, 4], [35, 4], [35, 5], [43, 3], [43, 2], [62, 3], [62, 2], [62, 2], [62, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [41, 3], [41, 4], [41, 3], [41, 4], [41, 4], [41, 5], [41, 3], [41, 4], [41, 4], [41, 5], [41, 4], [41, 5], [41, 5], [41, 6], [42, 3], [83, 1], [83, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [84, 1], [86, 1], [86, 1], [86, 1], [86, 1], [31, 1], [31, 1], [31, 1], [31, 1], [33, 1], [64, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setDirection("TB"); + break; + case 5: + yy.setDirection("BT"); + break; + case 6: + yy.setDirection("RL"); + break; + case 7: + yy.setDirection("LR"); + break; + case 11: + yy.parseDirective("%%{", "open_directive"); + break; + case 12: + yy.parseDirective($$[$0], "type_directive"); + break; + case 13: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 14: + yy.parseDirective("}%%", "close_directive", "class"); + break; + case 19: + this.$ = $$[$0 - 1]; + break; + case 20: + case 22: + case 23: + this.$ = $$[$0]; + break; + case 21: + case 24: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 25: + case 26: + this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; + break; + case 27: + yy.addRelation($$[$0]); + break; + case 28: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 40: + yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); + break; + case 41: + yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); + break; + case 42: + this.$ = $$[$0]; + yy.addNamespace($$[$0]); + break; + case 43: + this.$ = [$$[$0]]; + break; + case 44: + this.$ = [$$[$0 - 1]]; + break; + case 45: + $$[$0].unshift($$[$0 - 2]); + this.$ = $$[$0]; + break; + case 47: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 48: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 49: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 50: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 51: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 52: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 53: + this.$ = [$$[$0]]; + break; + case 54: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 55: + break; + case 56: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 57: + break; + case 58: + break; + case 59: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 60: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 61: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 62: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 63: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 64: + yy.addNote($$[$0]); + break; + case 65: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 66: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 67: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 68: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 69: + this.$ = yy.relationType.AGGREGATION; + break; + case 70: + this.$ = yy.relationType.EXTENSION; + break; + case 71: + this.$ = yy.relationType.COMPOSITION; + break; + case 72: + this.$ = yy.relationType.DEPENDENCY; + break; + case 73: + this.$ = yy.relationType.LOLLIPOP; + break; + case 74: + this.$ = yy.lineType.LINE; + break; + case 75: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 76: + case 82: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 77: + case 83: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 78: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 79: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 81: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 84: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 85: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 86: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 87: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 88: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 89: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 4], $$[$0 - 1]); + break; + case 90: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 3: 47, 4: 2, 5: 3, 6: 4, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 12: 5, 13: 6, 19: $V4, 23: $V5, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 1: [2, 3] }, { 1: [2, 8] }, { 14: 48, 20: [1, 49] }, o($Vp, [2, 16], { 16: [1, 50] }), { 16: [1, 51] }, { 20: [2, 11] }, o($Vq, [2, 27], { 36: [1, 52] }), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), { 45: [1, 53] }, { 47: [1, 54] }, o($Vq, [2, 39]), o($Vq, [2, 55], { 62: 55, 66: 58, 67: 59, 28: [1, 56], 36: [1, 57], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 50: [1, 67] }, o($Vy, [2, 46], { 50: [1, 69], 55: [1, 68] }), o($Vq, [2, 57]), o($Vq, [2, 58]), { 31: 70, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 71, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 72, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 31: 38, 32: 73, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 74] }, { 31: 38, 32: 75, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: $Vz, 64: 76 }, o($Vq, [2, 4]), o($Vq, [2, 5]), o($Vq, [2, 6]), o($Vq, [2, 7]), o($VA, [2, 22], { 31: 38, 33: 39, 32: 78, 34: [1, 79], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), o($VA, [2, 23], { 34: [1, 80] }), { 30: 81, 31: 82, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 31: 38, 32: 83, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VB, [2, 104]), o($VB, [2, 105]), o($VB, [2, 106]), o($VB, [2, 107]), o([1, 16, 24, 27, 28, 34, 36, 50, 52, 55, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 108]), { 1: [2, 2] }, { 15: 84, 17: [1, 85], 22: $VC }, o([17, 22], [2, 12]), o($Vp, [2, 17], { 25: 7, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 7: 18, 32: 22, 49: 23, 54: 24, 31: 38, 33: 39, 6: 87, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 44: $V6, 46: $V7, 48: $V8, 53: $V9, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }), { 6: 88, 7: 18, 8: $V0, 9: $V1, 10: $V2, 11: $V3, 25: 7, 31: 38, 32: 22, 33: 39, 35: 10, 37: 11, 38: 12, 39: 13, 40: 14, 41: 15, 42: 16, 43: 17, 44: $V6, 46: $V7, 48: $V8, 49: 23, 53: $V9, 54: 24, 57: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 63: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 28]), o($Vq, [2, 37]), o($Vq, [2, 38]), { 28: [1, 90], 31: 38, 32: 89, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 62: 91, 66: 58, 67: 59, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o($Vq, [2, 56]), { 67: 92, 73: $Vw, 74: $Vx }, o($VD, [2, 68], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VE, [2, 69]), o($VE, [2, 70]), o($VE, [2, 71]), o($VE, [2, 72]), o($VE, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), { 16: [1, 95], 38: 96, 51: 94, 54: 24, 57: $Va }, { 31: 97, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 56: 98, 60: $VG }, { 59: [1, 100] }, { 28: [1, 101] }, { 28: [1, 102] }, { 79: [1, 103], 81: [1, 104] }, { 31: 105, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, { 28: $Vz, 64: 106 }, o($Vq, [2, 64]), o($Vq, [2, 109]), o($VA, [2, 24]), o($VA, [2, 25]), o($VA, [2, 26]), { 50: [2, 42] }, { 30: 107, 31: 82, 50: [2, 20], 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn }, o($VH, [2, 50], { 26: 108, 27: [1, 109] }), { 16: [1, 110] }, { 18: 111, 21: [1, 112] }, { 16: [2, 14] }, o($Vp, [2, 18]), { 24: [1, 113] }, o($VI, [2, 59]), { 31: 38, 32: 114, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, { 28: [1, 116], 31: 38, 32: 115, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 67], { 66: 117, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o($VD, [2, 66]), { 52: [1, 118] }, { 38: 96, 51: 119, 54: 24, 57: $Va }, { 16: [1, 120], 52: [2, 43] }, o($Vy, [2, 47], { 50: [1, 121] }), { 52: [1, 122] }, { 52: [2, 53], 56: 123, 60: $VG }, { 31: 38, 32: 124, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($Vq, [2, 76], { 28: [1, 125] }), o($Vq, [2, 78], { 28: [1, 127], 77: [1, 126] }), o($Vq, [2, 82], { 28: [1, 128], 80: [1, 129] }), { 28: [1, 130] }, o($Vq, [2, 90]), o($Vq, [2, 63]), { 50: [2, 21] }, o($VH, [2, 51]), { 28: [1, 131] }, o($VJ, [2, 9]), { 15: 132, 22: $VC }, { 22: [2, 13] }, { 1: [2, 15] }, o($VI, [2, 61]), o($VI, [2, 60]), { 31: 38, 32: 133, 33: 39, 94: $Vk, 96: $Vl, 97: $Vm, 98: $Vn, 99: $Vo }, o($VD, [2, 65]), o($Vq, [2, 40]), { 52: [1, 134] }, { 38: 96, 51: 135, 52: [2, 44], 54: 24, 57: $Va }, { 56: 136, 60: $VG }, o($Vy, [2, 48]), { 52: [2, 54] }, o($Vq, [2, 52]), o($Vq, [2, 77]), o($Vq, [2, 79]), o($Vq, [2, 80], { 77: [1, 137] }), o($Vq, [2, 83]), o($Vq, [2, 84], { 28: [1, 138] }), o($Vq, [2, 86], { 28: [1, 140], 77: [1, 139] }), { 29: [1, 141] }, { 16: [1, 142] }, o($VI, [2, 62]), o($Vq, [2, 41]), { 52: [2, 45] }, { 52: [1, 143] }, o($Vq, [2, 81]), o($Vq, [2, 85]), o($Vq, [2, 87]), o($Vq, [2, 88], { 77: [1, 144] }), o($VH, [2, 19]), o($VJ, [2, 10]), o($Vy, [2, 49]), o($Vq, [2, 89])], + defaultActions: { 2: [2, 1], 4: [2, 3], 5: [2, 8], 9: [2, 11], 47: [2, 2], 81: [2, 42], 86: [2, 14], 107: [2, 21], 112: [2, 13], 113: [2, 15], 123: [2, 54], 135: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + return 8; + case 2: + return 9; + case 3: + return 10; + case 4: + return 11; + case 5: + this.begin("type_directive"); + return 20; + case 6: + this.popState(); + this.begin("arg_directive"); + return 17; + case 7: + this.popState(); + this.popState(); + return 22; + case 8: + return 21; + case 9: + break; + case 10: + break; + case 11: + this.begin("acc_title"); + return 44; + case 12: + this.popState(); + return "acc_title_value"; + case 13: + this.begin("acc_descr"); + return 46; + case 14: + this.popState(); + return "acc_descr_value"; + case 15: + this.begin("acc_descr_multiline"); + break; + case 16: + this.popState(); + break; + case 17: + return "acc_descr_multiline_value"; + case 18: + return 16; + case 19: + break; + case 20: + return 23; + case 21: + return 23; + case 22: + return "EDGE_STATE"; + case 23: + this.begin("callback_name"); + break; + case 24: + this.popState(); + break; + case 25: + this.popState(); + this.begin("callback_args"); + break; + case 26: + return 79; + case 27: + this.popState(); + break; + case 28: + return 80; + case 29: + this.popState(); + break; + case 30: + return "STR"; + case 31: + this.begin("string"); + break; + case 32: + this.begin("namespace"); + return 53; + case 33: + this.popState(); + return 16; + case 34: + break; + case 35: + this.begin("namespace-body"); + return 50; + case 36: + this.popState(); + return 52; + case 37: + return "EOF_IN_STRUCT"; + case 38: + return 16; + case 39: + break; + case 40: + return "EDGE_STATE"; + case 41: + this.begin("class"); + return 57; + case 42: + this.popState(); + return 16; + case 43: + break; + case 44: + this.popState(); + this.popState(); + return 52; + case 45: + this.begin("class-body"); + return 50; + case 46: + this.popState(); + return 52; + case 47: + return "EOF_IN_STRUCT"; + case 48: + return "EDGE_STATE"; + case 49: + return "OPEN_IN_STRUCT"; + case 50: + break; + case 51: + return "MEMBER"; + case 52: + return 82; + case 53: + return 75; + case 54: + return 76; + case 55: + return 78; + case 56: + return 63; + case 57: + return 65; + case 58: + return 58; + case 59: + return 59; + case 60: + return 81; + case 61: + this.popState(); + break; + case 62: + return "GENERICTYPE"; + case 63: + this.begin("generic"); + break; + case 64: + this.popState(); + break; + case 65: + return "BQUOTE_STR"; + case 66: + this.begin("bqstring"); + break; + case 67: + return 77; + case 68: + return 77; + case 69: + return 77; + case 70: + return 77; + case 71: + return 69; + case 72: + return 69; + case 73: + return 71; + case 74: + return 71; + case 75: + return 70; + case 76: + return 68; + case 77: + return 72; + case 78: + return 73; + case 79: + return 74; + case 80: + return 36; + case 81: + return 55; + case 82: + return 94; + case 83: + return "DOT"; + case 84: + return "PLUS"; + case 85: + return 91; + case 86: + return "EQUALS"; + case 87: + return "EQUALS"; + case 88: + return 98; + case 89: + return 27; + case 90: + return 29; + case 91: + return "PUNCTUATION"; + case 92: + return 97; + case 93: + return 96; + case 94: + return 93; + case 95: + return 24; + } + }, + rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/], + conditions: { "namespace-body": { "rules": [31, 36, 37, 38, 39, 40, 41, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "namespace": { "rules": [31, 32, 33, 34, 35, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "class-body": { "rules": [31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "class": { "rules": [31, 42, 43, 44, 45, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_descr_multiline": { "rules": [16, 17, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_descr": { "rules": [14, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "acc_title": { "rules": [12, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "arg_directive": { "rules": [7, 8, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "type_directive": { "rules": [6, 7, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "open_directive": { "rules": [5, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "callback_args": { "rules": [27, 28, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "callback_name": { "rules": [24, 25, 26, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "href": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "struct": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "generic": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "bqstring": { "rules": [31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "string": { "rules": [29, 30, 31, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 31, 32, 41, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let namespaces = {}; +let namespaceCounter = 0; +let functions = []; +const sanitizeText = (txt) => _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.m.parseDirective(this, statement, context, type); +}; +const splitClassNameAndType = function(id) { + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(id, label) { + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(id) { + const classId = splitClassNameAndType(id); + if (classes[classId.className] !== void 0) { + return; + } + classes[classId.className] = { + id: classId.className, + type: classId.type, + label: classId.className, + cssClasses: [], + methods: [], + members: [], + annotations: [], + domId: MERMAID_DOM_ID_PREFIX + classId.className + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(id) { + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + namespaces = {}; + namespaceCounter = 0; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.v)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle1.trim(), + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)() + ); + relation.relationTitle2 = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText( + relation.relationTitle2.trim(), + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)() + ); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(sanitizeText(memberString)); + } else if (memberString) { + theClass.members.push(sanitizeText(memberString)); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id, namespace) { + if (namespace) { + return namespaces[namespace].classes[id].tooltip; + } + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(domId, functionName, functionArgs) { + const config = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "
")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const addNamespace = function(id) { + if (namespaces[id] !== void 0) { + return; + } + namespaces[id] = { + id, + classes: {}, + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter + }; + namespaceCounter++; +}; +const getNamespace = function(name) { + return namespaces[name]; +}; +const getNamespaces = function() { + return namespaces; +}; +const addClassesToNamespace = function(id, classNames) { + if (namespaces[id] !== void 0) { + classNames.map((className) => { + classes[className].parent = id; + namespaces[id].classes[className] = classes[className]; + }); + } +}; +const db = { + parseDirective, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.t, + setClassLabel, + addNamespace, + addClassesToNamespace, + getNamespace, + getNamespaces +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder}; + fill: ${options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }), + +/***/ 97312: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ p: () => (/* binding */ parseMember), +/* harmony export */ s: () => (/* binding */ svgDraw) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99854); + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + const membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + const membersBox = members.node().getBBox(); + const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + membersLine.attr("x2", rectWidth); + methodsLine.attr("x2", rectWidth); + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + classDef.type + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const parseMember = function(text) { + let displayText = ""; + let cssStyle = ""; + let returnType = ""; + let visibility = ""; + let firstChar = text.substring(0, 1); + let lastChar = text.substring(text.length - 1, text.length); + if (firstChar.match(/[#+~-]/)) { + visibility = firstChar; + } + let noClassifierRe = /[\s\w)~]/; + if (!lastChar.match(noClassifierRe)) { + cssStyle = parseClassifier(lastChar); + } + const startIndex = visibility === "" ? 0 : 1; + let endIndex = cssStyle === "" ? text.length : text.length - 1; + text = text.substring(startIndex, endIndex); + const methodStart = text.indexOf("("); + const methodEnd = text.indexOf(")"); + const isMethod = methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length; + if (isMethod) { + let methodName = text.substring(0, methodStart).trim(); + const parameters = text.substring(methodStart + 1, methodEnd); + displayText = visibility + methodName + "(" + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(parameters.trim()) + ")"; + if (methodEnd < text.length) { + let potentialClassifier = text.substring(methodEnd + 1, methodEnd + 2); + if (cssStyle === "" && !potentialClassifier.match(noClassifierRe)) { + cssStyle = parseClassifier(potentialClassifier); + returnType = text.substring(methodEnd + 2).trim(); + } else { + returnType = text.substring(methodEnd + 1).trim(); + } + if (returnType !== "") { + if (returnType.charAt(0) === ":") { + returnType = returnType.substring(1).trim(); + } + returnType = " : " + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(returnType); + displayText += returnType; + } + } + } else { + displayText = visibility + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_1__.x)(text); + } + return { + displayText, + cssStyle + }; +}; +const addTspan = function(textEl, txt, isFirst, conf) { + let member = parseMember(txt); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(member.displayText); + if (member.cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const parseClassifier = function(classifier) { + switch (classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote, + parseMember +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/907232bd.df241401.js b/assets/js/907232bd.df241401.js new file mode 100644 index 0000000000..e5e218a8b1 --- /dev/null +++ b/assets/js/907232bd.df241401.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[26421],{22847:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>b,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=a(24246),r=a(71670);const o={mdx:{format:"md"},date:"2021-12-10T18:00",authors:["pranabdas","slorber"]},s="2.0.0-beta.11",i={permalink:"/changelog/2.0.0-beta.11",source:"@site/changelog/source/2.0.0-beta.11.md",title:"2.0.0-beta.11",description:"Bug Fix",date:"2021-12-10T18:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"Pranab Das",alias:"pranabdas",url:"https://github.com/pranabdas",imageURL:"https://github.com/pranabdas.png",key:"pranabdas"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{mdx:{format:"md"},date:"2021-12-10T18:00",authors:["pranabdas","slorber"]},unlisted:!1,prevItem:{title:"2.0.0-beta.12",permalink:"/changelog/2.0.0-beta.12"},nextItem:{title:"2.0.0-beta.10",permalink:"/changelog/2.0.0-beta.10"},listPageLink:"/changelog/page/2"},c={authorsImageUrls:[void 0,void 0]},u=[];function l(e){return(0,n.jsx)(n.Fragment,{})}function b(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l()}},71670:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>s});var n=a(27378);const r={},o=n.createContext(r);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90e20400.eeb51aea.js b/assets/js/90e20400.eeb51aea.js new file mode 100644 index 0000000000..9af7796ec7 --- /dev/null +++ b/assets/js/90e20400.eeb51aea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[64874],{12686:(t,e,s)=>{s.r(e),s.d(e,{assets:()=>h,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>u,toc:()=>l});var o=s(24246),a=s(71670);const n={tags:["paginated-tag"],authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}]},i="Post with duplicate title",u={permalink:"/tests/blog/2021/09/13/dup-title",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2021-09-13-dup-title.mdx",source:"@site/_dogfooding/_blog tests/2021-09-13-dup-title.mdx",title:"Post with duplicate title",description:"See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.",date:"2021-09-13T00:00:00.000Z",tags:[{label:"paginated-tag",permalink:"/tests/blog/tags/paginated-tag"}],readingTime:2,hasTruncateMarker:!1,authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png",imageURL:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}],frontMatter:{tags:["paginated-tag"],authors:[{name:"Josh-Cena1"},{name:"Josh-Cena2",image_url:"https://github.com/Josh-Cena.png",imageURL:"https://github.com/Josh-Cena.png"},{name:"Josh-Cena3",url:"https://github.com/Josh-Cena"},{name:"Josh-Cena4",email:"sidechen2003@gmail.com"}]},unlisted:!1,prevItem:{title:"Blog post MDX Feed tests",permalink:"/tests/blog/2021/10/07/blog-post-mdx-feed-tests"},nextItem:{title:"Multiple authors",permalink:"/tests/blog/2021/08/23/multiple-authors"}},h={authorsImageUrls:[void 0,void 0,void 0,void 0]},l=[];function m(t){const e={a:"a",p:"p",...(0,a.a)(),...t.components};return(0,o.jsxs)(e.p,{children:["See ",(0,o.jsx)(e.a,{href:"https://github.com/facebook/docusaurus/issues/6059",children:"https://github.com/facebook/docusaurus/issues/6059"}),". This one and ",(0,o.jsx)(e.a,{href:"/tests/blog/2021/11/13/dup-title",children:"2021-11-13-dup-title.md"})," should both show up."]})}function c(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(m,{...t})}):m(t)}},71670:(t,e,s)=>{s.d(e,{Z:()=>u,a:()=>i});var o=s(27378);const a={},n=o.createContext(a);function i(t){const e=o.useContext(n);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:i(t.components),o.createElement(n.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/90e57dc7.f6cd875e.js b/assets/js/90e57dc7.f6cd875e.js new file mode 100644 index 0000000000..ea6966ab53 --- /dev/null +++ b/assets/js/90e57dc7.f6cd875e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4420],{35434:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(24246);n(27378);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function c(e){return(0,r.jsx)("svg",i(function(e){for(var t=1;t{n.d(t,{Z:()=>se});var r=n(24246),o=n(27378);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function s(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),i=t.filter((e=>e!==n));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children);var s;const l=null!==(s=e.title)&&void 0!==s?s:t;return c(function(e){for(var t=1;t(0,r.jsx)(w,G({title:"secondary"},e)),important:e=>(0,r.jsx)(M,G({title:"important"},e)),success:e=>(0,r.jsx)(Z,G({title:"success"},e)),caution:function(e){return(0,r.jsx)(O,X(function(e){for(var t=1;t{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>p});var r=n(24246),o=n(71670),i=n(77773),c=n(35434);const s={},l="Admonitions tests",a={id:"tests/admonitions",title:"Admonitions tests",description:"Empty content",source:"@site/_dogfooding/_docs tests/tests/admonitions.mdx",sourceDirName:"tests",slug:"/tests/admonitions",permalink:"/tests/docs/tests/admonitions",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1700596174e3,frontMatter:{},sidebar:"sidebar",previous:{title:"Case-Sensitive doc",permalink:"/tests/docs/tests/Case-Sentitive-Doc"},next:{title:"\xe6\xf8\xe5",permalink:"/tests/docs/tests/ascii/folder/\xe6\xf8\xe5"}},u={},p=[{value:"Empty content",id:"empty-content",level:2},{value:"Empty fragment content",id:"empty-fragment-content",level:2},{value:"Large font icon",id:"large-font-icon",level:2},{value:"Large svg icon",id:"large-svg-icon",level:2},{value:"Indented admonitions",id:"indented-admonitions",level:2},{value:"Quoted admonitions",id:"quoted-admonitions",level:2},{value:"Official admonitions",id:"official-admonitions",level:2},{value:"Legacy admonitions",id:"legacy-admonitions",level:2}];function f(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",span:"span",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"admonitions-tests",children:"Admonitions tests"}),"\n",(0,r.jsx)(t.h2,{id:"empty-content",children:"Empty content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note"}),"\n",(0,r.jsx)(t.h2,{id:"empty-fragment-content",children:"Empty fragment content"}),"\n",(0,r.jsx)(t.admonition,{title:"Title Only",type:"note",children:(0,r.jsx)(r.Fragment,{})}),"\n",(0,r.jsx)(t.h2,{id:"large-font-icon",children:"Large font icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(t.span,{style:{fontSize:60},children:"\ud83d\udca1"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(t.span,{style:{fontSize:40},children:"\u2139\ufe0f"}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"large-svg-icon",children:"Large svg icon"}),"\n","\n",(0,r.jsx)(i.Z,{type:"tip",icon:(0,r.jsx)(c.Z,{style:{width:60,height:60}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(i.Z,{type:"info",icon:(0,r.jsx)(c.Z,{style:{width:40,height:40}}),title:"Did you know...",children:(0,r.jsx)(t.p,{children:"content"})}),"\n",(0,r.jsx)(t.h2,{id:"indented-admonitions",children:"Indented admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["See admonition title v2 compat syntax bug: ",(0,r.jsx)(t.a,{href:"https://github.com/facebook/docusaurus/issues/9507",children:"https://github.com/facebook/docusaurus/issues/9507"})]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Item 1"}),"\n",(0,r.jsx)(t.admonition,{title:"Important Considerations",type:"info",children:(0,r.jsx)(t.p,{children:"For better experience, try to keep the upgrade experience smooth."})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Scale-up cluster"})}),"\n",(0,r.jsx)(t.admonition,{title:"Warning",type:"caution",children:(0,r.jsx)(t.p,{children:"Scaling up a cluster may cause several minutes of downtime. Please exercise caution."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"quoted-admonitions",children:"Quoted admonitions"}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.admonition,{title:"There be dragons",type:"caution",children:(0,r.jsx)(t.p,{children:"This is the admonition content"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"official-admonitions",children:"Official admonitions"}),"\n",(0,r.jsxs)(t.p,{children:["Admonitions that are ",(0,r.jsx)(t.a,{href:"/docs/markdown-features/admonitions",children:"officially documented"})]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:"note"})}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"info"})}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"tip"})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsx)(t.p,{children:"warning"})}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"danger"})}),"\n",(0,r.jsx)(t.h2,{id:"legacy-admonitions",children:"Legacy admonitions"}),"\n",(0,r.jsx)(t.admonition,{type:"secondary",children:(0,r.jsx)(t.p,{children:"secondary"})}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsx)(t.p,{children:"important"})}),"\n",(0,r.jsx)(t.admonition,{type:"success",children:(0,r.jsx)(t.p,{children:"success"})}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"caution"})})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>c});var r=n(27378);const o={},i=r.createContext(o);function c(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91357fa3.05fcc139.js b/assets/js/91357fa3.05fcc139.js new file mode 100644 index 0000000000..dfc9ff86cf --- /dev/null +++ b/assets/js/91357fa3.05fcc139.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81892],{21150:e=>{e.exports=JSON.parse('{"tag":{"label":"release","permalink":"/blog/tags/release","allTagsPath":"/blog/tags","count":11,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/release/page/2","page":2,"postsPerPage":5,"totalPages":3,"totalCount":11,"previousPage":"/blog/tags/release","nextPage":"/blog/tags/release/page/3","blogDescription":"Read blog posts about Docusaurus from the team","blogTitle":"Docusaurus blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/91b203fb.583d034a.js b/assets/js/91b203fb.583d034a.js new file mode 100644 index 0000000000..5bdd51ba80 --- /dev/null +++ b/assets/js/91b203fb.583d034a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9900],{24239:(e,n,r)=>{r.d(n,{Z:()=>v});var t=r(24246),o=(r(27378),r(40624)),a=r(41876),s=r(41428),l=r(7812),c=r(64149),i=r(36712),u=r(52615);const d={cardContainer:"cardContainer_Uewx",cardTitle:"cardTitle_dwRT",cardDescription:"cardDescription_mCBT"};function p({href:e,children:n}){return(0,t.jsx)(s.Z,{href:e,className:(0,o.Z)("card padding--lg",d.cardContainer),children:n})}function h({href:e,icon:n,title:r,description:a}){return(0,t.jsxs)(p,{href:e,children:[(0,t.jsxs)(u.Z,{as:"h2",className:(0,o.Z)("text--truncate",d.cardTitle),title:r,children:[n," ",r]}),a&&(0,t.jsx)("p",{className:(0,o.Z)("text--truncate",d.cardDescription),title:a,children:a})]})}function m({item:e}){const n=(0,a.LM)(e),r=function(){const{selectMessage:e}=(0,l.c)();return n=>e(n,(0,i.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:n}))}();return n?(0,t.jsx)(h,{href:n,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:null!==(o=e.description)&&void 0!==o?o:r(e.items.length)}):null;var o}function f({item:e}){const n=(0,c.Z)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17";var r;const o=(0,a.xz)(null!==(r=e.docId)&&void 0!==r?r:void 0);var s;return(0,t.jsx)(h,{href:e.href,icon:n,title:e.label,description:null!==(s=e.description)&&void 0!==s?s:null==o?void 0:o.description})}function g({item:e}){switch(e.type){case"link":return(0,t.jsx)(f,{item:e});case"category":return(0,t.jsx)(m,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}function b(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function j({className:e}){const n=(0,a.jA)();return(0,t.jsx)(v,{items:n.items,className:e})}function v(e){const{items:n,className:r}=e;if(!n)return(0,t.jsx)(j,function(e){for(var n=1;n(0,t.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,t.jsx)(g,{item:e})},n)))})}},61132:(e,n,r)=>{r.d(n,{Z:()=>s});var t=r(24246),o=(r(27378),r(40624));const a={tabItem:"tabItem_pnkT"};function s({children:e,hidden:n,className:r}){return(0,t.jsx)("div",{role:"tabpanel",className:(0,o.Z)(a.tabItem,r),hidden:n,children:e})}},97555:(e,n,r)=>{r.d(n,{Z:()=>N});var t=r(24246),o=r(27378),a=r(40624),s=r(75527),l=r(3620),c=r(44479),i=r(62821),u=r(52196),d=r(53589);function p(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function h(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})),e}function m(e){var n,r;return null!==(r=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==r?r:[]}function f(e){const{values:n,children:r}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:r,default:t}})=>({value:e,label:n,attributes:r,default:t})))}(r);return function(e){const n=(0,u.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,r])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function b({queryString:e=!1,groupId:n}){const r=(0,l.k6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),a=(0,i._X)(t),s=(0,o.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace(h(function(e){for(var n=1;nfunction({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var r;const t=null!==(r=n.find((e=>e.default)))&&void 0!==r?r:n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[i,u]=b({queryString:r,groupId:t}),[p,h]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,t]=(0,d.Nk)(n);return[r,(0,o.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:t}),m=(()=>{const e=null!=i?i:p;return g({value:e,tabValues:a})?e:null})();(0,c.Z)((()=>{m&&l(m)}),[m]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),h(e)}),[u,h,a]),tabValues:a}}var v=r(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function x(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function w(e){for(var n=1;n{const n=e.currentTarget,t=c.indexOf(n),a=l[t].value;a!==r&&(i(n),o(a))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;var r;n=null!==(r=c[t])&&void 0!==r?r:c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;var t;n=null!==(t=c[r])&&void 0!==t?t:c[c.length-1];break}}null==n||n.focus()};return(0,t.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},e),children:l.map((({value:e,label:n,attributes:o})=>(0,t.jsx)("li",O(w({role:"tab",tabIndex:r===e?0:-1,"aria-selected":r===e,ref:e=>c.push(e),onKeyDown:d,onClick:u},o),{className:(0,a.Z)("tabs__item",y.tabItem,null==o?void 0:o.className,{"tabs__item--active":r===e}),children:null!=n?n:e}),e)))})}function P({lazy:e,children:n,selectedValue:r}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,t.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function D(e){const n=j(e);return(0,t.jsxs)("div",{className:(0,a.Z)("tabs-container",y.tabList),children:[(0,t.jsx)(k,w({},e,n)),(0,t.jsx)(P,w({},e,n))]})}function N(e){const n=(0,v.Z)();return(0,t.jsx)(D,O(w({},e),{children:m(e.children)}),String(n))}},7812:(e,n,r)=>{r.d(n,{c:()=>i});var t=r(27378),o=r(4423);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((n=>e.includes(n)))}const l={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,t.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:s(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),l}}),[e])}function i(){const e=c();return{selectMessage:(n,r)=>function(e,n,r){const t=e.split("|");if(1===t.length)return t[0];t.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${t.length}: ${e}`);const o=r.select(n),a=r.pluralForms.indexOf(o);return t[Math.min(a,t.length-1)]}(r,n,e)}}},31366:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var t=r(24246),o=r(71670),a=r(97555),s=r(61132),l=r(24239);const c={slug:"/migration"},i="Upgrading Docusaurus",u={id:"migration/index",title:"Upgrading Docusaurus",description:"Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.",source:"@site/docs/migration/index.mdx",sourceDirName:"migration",slug:"/migration",permalink:"/docs/migration",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/migration/index.mdx",tags:[],version:"current",lastUpdatedBy:"Mikey O'Toole",lastUpdatedAt:1713452696e3,frontMatter:{slug:"/migration"},sidebar:"docs",previous:{title:"Client architecture",permalink:"/docs/advanced/client"},next:{title:"To Docusaurus v3",permalink:"/docs/migration/v3"}},d={},p=[{value:"Troubleshooting upgrades",id:"troubleshooting-upgrades",level:2},{value:"Run the clear command",id:"run-the-clear-command",level:3},{value:"Remove node_modules and your lock file(s)",id:"remove-node_modules-and-your-lock-files",level:3}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"upgrading-docusaurus",children:"Upgrading Docusaurus"}),"\n",(0,t.jsxs)(n.p,{children:["Docusaurus versioning is based on the ",(0,t.jsx)(n.code,{children:"major.minor.patch"})," scheme and respects ",(0,t.jsx)(n.a,{href:"https://semver.org/",children:(0,t.jsx)(n.strong,{children:"Semantic Versioning"})}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Breaking changes"})," are only released on major version upgrades, and thoroughly documented in the following upgrade guides."]}),"\n","\n",(0,t.jsx)(l.Z,{}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting-upgrades",children:"Troubleshooting upgrades"}),"\n",(0,t.jsx)(n.p,{children:"When upgrading Docusaurus you may experience issues caused by mismatching cached dependencies - there are a few troubleshooting steps you should perform to resolve these common issues before reporting a bug or seeking support."}),"\n",(0,t.jsxs)(n.h3,{id:"run-the-clear-command",children:["Run the ",(0,t.jsx)(n.code,{children:"clear"})," command"]}),"\n",(0,t.jsx)(n.p,{children:"This CLI command is used to clear a Docusaurus site's generated assets, caches and build artifacts."}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm run clear\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn clear\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm run clear\n"})})})]}),"\n",(0,t.jsxs)(n.h3,{id:"remove-node_modules-and-your-lock-files",children:["Remove ",(0,t.jsx)(n.code,{children:"node_modules"})," and your lock file(s)"]}),"\n",(0,t.jsxs)(n.p,{children:["Remove the ",(0,t.jsx)(n.code,{children:"node_modules"})," folder and your package manager's lock file using the following:"]}),"\n",(0,t.jsxs)(a.Z,{children:[(0,t.jsx)(s.Z,{label:"Bash",value:"bash",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"rm -rf node_modules yarn.lock package-lock.json\n"})})}),(0,t.jsx)(s.Z,{label:"PowerShell",value:"powershell",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-powershell",children:"@('node_modules','yarn.lock','package-lock.json') | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Then reinstall packages and regenerate the ",(0,t.jsx)(n.code,{children:"lock"})," file using:"]}),"\n",(0,t.jsxs)(a.Z,{groupId:"npm2yarn",children:[(0,t.jsx)(s.Z,{value:"npm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npm install\n"})})}),(0,t.jsx)(s.Z,{value:"yarn",label:"Yarn",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"yarn install\n"})})}),(0,t.jsx)(s.Z,{value:"pnpm",label:"pnpm",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm install\n"})})})]})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},71670:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>s});var t=r(27378);const o={},a=t.createContext(o);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91cd22f1.c49ecb8e.js b/assets/js/91cd22f1.c49ecb8e.js new file mode 100644 index 0000000000..83b6fb4d3e --- /dev/null +++ b/assets/js/91cd22f1.c49ecb8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[90916],{49064:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>h});var i=n(24246),t=n(71670);const a={sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},r="Docusaurus themes",o={id:"api/themes/themes-overview",title:"Docusaurus themes",description:"We provide official Docusaurus themes.",source:"@site/docs/api/themes/overview.mdx",sourceDirName:"api/themes",slug:"/api/themes",permalink:"/docs/api/themes",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/api/themes/overview.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,sidebarPosition:0,frontMatter:{sidebar_position:0,id:"themes-overview",sidebar_label:"Themes overview",slug:"/api/themes"},sidebar:"api",previous:{title:"\ud83d\udce6 plugin-vercel-analytics",permalink:"/docs/api/plugins/@docusaurus/plugin-vercel-analytics"},next:{title:"Configuration",permalink:"/docs/api/themes/configuration"}},c={},h=[{value:"Main themes",id:"main-themes",level:2},{value:"Enhancement themes",id:"enhancement-themes",level:2}];function l(e){const s={a:"a",admonition:"admonition",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"docusaurus-themes",children:"Docusaurus themes"}),"\n",(0,i.jsx)(s.p,{children:"We provide official Docusaurus themes."}),"\n",(0,i.jsx)(s.h2,{id:"main-themes",children:"Main themes"}),"\n",(0,i.jsxs)(s.p,{children:["The main themes implement the user interface for the ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-docs",children:"docs"}),", ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog"})," and ",(0,i.jsx)(s.a,{href:"/docs/api/plugins/@docusaurus/plugin-content-pages",children:"pages"})," plugins."]}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-classic",children:"@docusaurus/theme-classic"})}),"\n",(0,i.jsx)(s.li,{children:"\ud83d\udea7 other themes are planned"}),"\n"]}),"\n",(0,i.jsxs)(s.admonition,{type:"warning",children:[(0,i.jsx)(s.p,{children:"The goal is to have all themes share the exact same features, user-experience and configuration."}),(0,i.jsx)(s.p,{children:"Only the UI design and underlying styling framework should change, and you should be able to change theme easily."}),(0,i.jsx)(s.p,{children:"We are not there yet: only the classic theme is production ready."})]}),"\n",(0,i.jsx)(s.h2,{id:"enhancement-themes",children:"Enhancement themes"}),"\n",(0,i.jsx)(s.p,{children:"These themes will enhance the existing main themes with additional user-interface related features."}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-live-codeblock",children:"@docusaurus/theme-live-codeblock"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/api/themes/@docusaurus/theme-search-algolia",children:"@docusaurus/theme-search-algolia"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},71670:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>r});var i=n(27378);const t={},a=i.createContext(t);function r(e){const s=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/920bdb0d.a69b0f29.js b/assets/js/920bdb0d.a69b0f29.js new file mode 100644 index 0000000000..3fa61a6ec0 --- /dev/null +++ b/assets/js/920bdb0d.a69b0f29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4506],{93625:s=>{s.exports=JSON.parse('{"tags":[{"label":"a","permalink":"/tests/docs/tags/a","count":1},{"label":"b","permalink":"/tests/docs/tags/b","count":1},{"label":"some tag","permalink":"/tests/docs/tags/some-tag","count":1},{"label":"e","permalink":"/tests/docs/tags/e","count":1},{"label":"d","permalink":"/tests/docs/tags/d-custom-permalink","count":1},{"label":"visibility","permalink":"/tests/docs/tags/visibility","count":3},{"label":"listed","permalink":"/tests/docs/tags/listed","count":2}]}')}}]); \ No newline at end of file diff --git a/assets/js/9229eb36.2976ccb5.js b/assets/js/9229eb36.2976ccb5.js new file mode 100644 index 0000000000..1210070231 --- /dev/null +++ b/assets/js/9229eb36.2976ccb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[95206],{81762:(e,s,h)=>{h.r(s),h.d(s,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>t,toc:()=>o});var i=h(24246),l=h(71670);const n={mdx:{format:"md"},date:"2020-04-01T20:00",authors:["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},r="2.0.0-alpha.49",t={permalink:"/changelog/2.0.0-alpha.49",source:"@site/changelog/source/2.0.0-alpha.49.md",title:"2.0.0-alpha.49",description:"New Feature",date:"2020-04-01T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[{name:"38elements",alias:"38elements",url:"https://github.com/38elements",imageURL:"https://github.com/38elements.png",key:"38elements"},{name:"R\xe9mi Doreau",alias:"ayshiff",url:"https://github.com/ayshiff",imageURL:"https://github.com/ayshiff.png",key:"ayshiff"},{name:"bravo-kernel",alias:"bravo-kernel",url:"https://github.com/bravo-kernel",imageURL:"https://github.com/bravo-kernel.png",key:"bravo-kernel"},{name:"Elvis Wolcott",alias:"elviswolcott",url:"https://github.com/elviswolcott",imageURL:"https://github.com/elviswolcott.png",key:"elviswolcott"},{name:"Favour Kelvin",alias:"fakela",url:"https://github.com/fakela",imageURL:"https://github.com/fakela.png",key:"fakela"},{name:"Fanny",alias:"fanny",url:"https://github.com/fanny",imageURL:"https://github.com/fanny.png",key:"fanny"},{name:"GermaVinsmoke",alias:"GermaVinsmoke",url:"https://github.com/GermaVinsmoke",imageURL:"https://github.com/GermaVinsmoke.png",key:"GermaVinsmoke"},{name:"iamkun",alias:"iamkun",url:"https://github.com/iamkun",imageURL:"https://github.com/iamkun.png",key:"iamkun"},{name:"Jefferson Licet",alias:"jeffersonlicet",url:"https://github.com/jeffersonlicet",imageURL:"https://github.com/jeffersonlicet.png",key:"jeffersonlicet"},{name:"KohheePeace",alias:"KohheePeace",url:"https://github.com/KohheePeace",imageURL:"https://github.com/KohheePeace.png",key:"KohheePeace"},{name:"Alexey Pyltsyn",alias:"lex111",url:"https://github.com/lex111",imageURL:"https://github.com/lex111.png",key:"lex111"},{name:"Luke Collier",alias:"lukecollier",url:"https://github.com/lukecollier",imageURL:"https://github.com/lukecollier.png",key:"lukecollier"},{name:"mohrash92",alias:"mohrash92",url:"https://github.com/mohrash92",imageURL:"https://github.com/mohrash92.png",key:"mohrash92"},{name:"Ben Gubler",alias:"nebrelbug",url:"https://github.com/nebrelbug",imageURL:"https://github.com/nebrelbug.png",key:"nebrelbug"},{name:"Nisar Hassan Naqvi",alias:"nisarhassan12",url:"https://github.com/nisarhassan12",imageURL:"https://github.com/nisarhassan12.png",key:"nisarhassan12"},{name:"Paul Armstrong",alias:"paularmstrong",url:"https://github.com/paularmstrong",imageURL:"https://github.com/paularmstrong.png",key:"paularmstrong"},{name:"Linus L\xe5ngberg",alias:"phoqe",url:"https://github.com/phoqe",imageURL:"https://github.com/phoqe.png",key:"phoqe"},{name:"Ram\xf3n Lamana",alias:"rlamana",url:"https://github.com/rlamana",imageURL:"https://github.com/rlamana.png",key:"rlamana"},{name:"Sam Zhou",alias:"SamChou19815",url:"https://github.com/SamChou19815",imageURL:"https://github.com/SamChou19815.png",key:"SamChou19815"},{name:"Bartosz Kaszubowski",alias:"Simek",url:"https://github.com/Simek",imageURL:"https://github.com/Simek.png",key:"Simek"},{name:"S\xe9bastien Lorber",alias:"slorber",url:"https://github.com/slorber",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Theodore Chu",alias:"TheodoreChu",url:"https://github.com/TheodoreChu",imageURL:"https://github.com/TheodoreChu.png",key:"TheodoreChu"},{name:"Yangshun Tay",alias:"yangshun",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"},{name:"ZachJW34",alias:"ZachJW34",url:"https://github.com/ZachJW34",imageURL:"https://github.com/ZachJW34.png",key:"ZachJW34"}],frontMatter:{mdx:{format:"md"},date:"2020-04-01T20:00",authors:["38elements","ayshiff","bravo-kernel","elviswolcott","fakela","fanny","GermaVinsmoke","iamkun","jeffersonlicet","KohheePeace","lex111","lukecollier","mohrash92","nebrelbug","nisarhassan12","paularmstrong","phoqe","rlamana","SamChou19815","Simek","slorber","TheodoreChu","yangshun","ZachJW34"]},unlisted:!1,prevItem:{title:"2.0.0-alpha.50",permalink:"/changelog/2.0.0-alpha.50"},nextItem:{title:"2.0.0-alpha.48",permalink:"/changelog/2.0.0-alpha.48"},listPageLink:"/changelog/page/4"},a={authorsImageUrls:[void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0]},o=[{value:"\ud83d\ude80 New Feature",id:"rocket-new-feature",level:2},{value:"\ud83d\udc1b Bug Fix",id:"bug-bug-fix",level:2},{value:"\ud83d\udc85 Polish",id:"nail_care-polish",level:2},{value:"\ud83d\udcdd Documentation",id:"memo-documentation",level:2},{value:"\ud83c\udfe0 Internal",id:"house-internal",level:2},{value:"Committers: 24",id:"committers-24",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",li:"li",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"rocket-new-feature",children:"\ud83d\ude80 New Feature"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2487",children:"#2487"})," feat(v2): nav dropdown (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2456",children:"#2456"})," feat(v2): support comments for code highlighting (",(0,i.jsx)(s.a,{href:"https://github.com/elviswolcott",children:"@elviswolcott"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2330",children:"#2330"})," feat(v2): add announcement bar (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2440",children:"#2440"})," feat(v2): make clickable sidebar logo (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2366",children:"#2366"})," feat(v2): support syncing tab choices (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2323",children:"#2323"})," feat(v2): add a way to exclude components from build-time prerendering (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2469",children:"#2469"})," feat(v2): add TypeScript support for theme components (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2455",children:"#2455"})," feat(v2): add @theme-original alias to give access to pre-swizzled components (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2438",children:"#2438"})," feat(v2): add version to page's generated meta tags (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-types"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2474",children:"#2474"})," feat(v2): add ability to create unminimized bundles (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2417",children:"#2417"})," feat(v2): allow custom output directory for build (",(0,i.jsx)(s.a,{href:"https://github.com/ZachJW34",children:"@ZachJW34"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2346",children:"#2346"})," feat(v2): add filename in CodeBlock (",(0,i.jsx)(s.a,{href:"https://github.com/KohheePeace",children:"@KohheePeace"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-docs"}),", ",(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2444",children:"#2444"})," feat(v2): allow nested sidebar category shorthand syntax (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"bug-bug-fix",children:"\ud83d\udc1b Bug Fix"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2483",children:"#2483"})," fix(v2): do not render sidebar logo if used sticky navbar (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2475",children:"#2475"})," fix(v2): make correct Open Graph title for doc page (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2436",children:"#2436"})," fix(v2): update twitter:card to summary_large_image (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2434",children:"#2434"})," fix(v2): add support dark logo for sidebar logo (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2420",children:"#2420"})," fix(v2): fix external URL for og:image tag (",(0,i.jsx)(s.a,{href:"https://github.com/38elements",children:"@38elements"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2480",children:"#2480"})," fix(v2): various improvements for accessibility (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2479",children:"#2479"})," chore(v2): upgrade MDX to 1.5.8 (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-live-codeblock"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2476",children:"#2476"})," fix(v2): improve code block scroll accessibility (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2442",children:"#2442"})," fix(v2): various improvements for accessibility (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),", ",(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2477",children:"#2477"})," chore(v2): upgrade remark-admonitions for a11y fixes (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2462",children:"#2462"})," fix(v2): do not force terminate building when bundle analyzer is on (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2393",children:"#2393"})," fix(v2): normalize location for route matching (",(0,i.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2443",children:"#2443"})," fix(v2): always exit after successful build (",(0,i.jsx)(s.a,{href:"https://github.com/mohrash92",children:"@mohrash92"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2437",children:"#2437"})," fix(v2): do not force terminate building if client bundle failed in development mode (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2424",children:"#2424"})," fix(v2): make correct internal link check (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-preset-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2451",children:"#2451"})," fix(v2): pass options to remark-admonitions (",(0,i.jsx)(s.a,{href:"https://github.com/elviswolcott",children:"@elviswolcott"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-mdx-loader"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2426",children:"#2426"})," fix(v2): remove HTML from heading slug (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-utils"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2405",children:"#2405"})," fix(v2): properly dedupe forward slashes in the entire URL path (",(0,i.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"nail_care-polish",children:"\ud83d\udc85 Polish"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-theme-classic"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2485",children:"#2485"})," refactor(v2): remove unnecessary X-UA-Compatible meta tag (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-plugin-content-blog"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2460",children:"#2460"})," refactor(v2): use single method package instead of whole Lodash package in blog plugin (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2428",children:"#2428"})," polish(v2): use npm-to-yarn for the npm2yarn remark plugin (",(0,i.jsx)(s.a,{href:"https://github.com/nebrelbug",children:"@nebrelbug"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"memo-documentation",children:"\ud83d\udcdd Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2478",children:"#2478"})," docs(v2): mark that in dev server some features may not work (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2472",children:"#2472"})," docs(v2): fix typo in deployment docs (",(0,i.jsx)(s.a,{href:"https://github.com/GermaVinsmoke",children:"@GermaVinsmoke"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2423",children:"#2423"})," docs(v2): add Sass/SCSS under the styling section (",(0,i.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2446",children:"#2446"})," docs(v2): add docusaurus-plugin-sass to community plugins (",(0,i.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2408",children:"#2408"})," docs(v2): suggest Surge for quick deployment (",(0,i.jsx)(s.a,{href:"https://github.com/fakela",children:"@fakela"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2401",children:"#2401"})," docs(v2): add resources page (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2413",children:"#2413"})," docs(v2): include appId key for Algolia (",(0,i.jsx)(s.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2411",children:"#2411"})," docs:(v2): add Netlify configuration warning (",(0,i.jsx)(s.a,{href:"https://github.com/bravo-kernel",children:"@bravo-kernel"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2397",children:"#2397"})," docs(v2):update alpha version to current version (",(0,i.jsx)(s.a,{href:"https://github.com/fakela",children:"@fakela"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2395",children:"#2395"})," docs(v2): clarify instructions on docs-only mode (",(0,i.jsx)(s.a,{href:"https://github.com/phoqe",children:"@phoqe"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus-init"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2458",children:"#2458"})," fix(v2): expand broken admonitions (",(0,i.jsx)(s.a,{href:"https://github.com/elviswolcott",children:"@elviswolcott"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"house-internal",children:"\ud83c\udfe0 Internal"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"docusaurus"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2461",children:"#2461"})," chore(v2): upgrade react-dev-utils (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["Other\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2450",children:"#2450"})," docs(v2): Adding Motion Layout to Docusaurus users (",(0,i.jsx)(s.a,{href:"https://github.com/jeffersonlicet",children:"@jeffersonlicet"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2450",children:"#2450"})," docs(v2): Adding Motion Layout to Docusaurus users (",(0,i.jsx)(s.a,{href:"https://github.com/jeffersonlicet",children:"@jeffersonlicet"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2439",children:"#2439"})," polish(v2): add logo for dark mode (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2435",children:"#2435"})," fix(v2): fix aspect ratio for Open Graph image (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2433",children:"#2433"})," chore(v2): ignore JetBrains editors .iml files (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2416",children:"#2416"})," docs(v2): Add Build Tracker to Showcase page (",(0,i.jsx)(s.a,{href:"https://github.com/paularmstrong",children:"@paularmstrong"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2388",children:"#2388"})," docs(v1): showcase user Day.js (",(0,i.jsx)(s.a,{href:"https://github.com/iamkun",children:"@iamkun"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.code,{children:"stylelint-copyright"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"https://github.com/facebook/docusaurus/pull/2415",children:"#2415"})," misc: improve stylelint rule (",(0,i.jsx)(s.a,{href:"https://github.com/ayshiff",children:"@ayshiff"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"committers-24",children:"Committers: 24"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Alexey Pyltsyn (",(0,i.jsx)(s.a,{href:"https://github.com/lex111",children:"@lex111"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Bartosz Kaszubowski (",(0,i.jsx)(s.a,{href:"https://github.com/Simek",children:"@Simek"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ben Gubler (",(0,i.jsx)(s.a,{href:"https://github.com/nebrelbug",children:"@nebrelbug"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Elvis Wolcott (",(0,i.jsx)(s.a,{href:"https://github.com/elviswolcott",children:"@elviswolcott"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Fanny (",(0,i.jsx)(s.a,{href:"https://github.com/fanny",children:"@fanny"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Favour Kelvin (",(0,i.jsx)(s.a,{href:"https://github.com/fakela",children:"@fakela"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Jefferson Licet (",(0,i.jsx)(s.a,{href:"https://github.com/jeffersonlicet",children:"@jeffersonlicet"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Kohhee Peace (",(0,i.jsx)(s.a,{href:"https://github.com/KohheePeace",children:"@KohheePeace"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Linus L\xe5ngberg (",(0,i.jsx)(s.a,{href:"https://github.com/phoqe",children:"@phoqe"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Luke Collier (",(0,i.jsx)(s.a,{href:"https://github.com/lukecollier",children:"@lukecollier"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Nisar Hassan Naqvi (",(0,i.jsx)(s.a,{href:"https://github.com/nisarhassan12",children:"@nisarhassan12"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Paul Armstrong (",(0,i.jsx)(s.a,{href:"https://github.com/paularmstrong",children:"@paularmstrong"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Ram\xf3n Lamana (",(0,i.jsx)(s.a,{href:"https://github.com/rlamana",children:"@rlamana"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["R\xe9mi Doreau (",(0,i.jsx)(s.a,{href:"https://github.com/ayshiff",children:"@ayshiff"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Sam Zhou (",(0,i.jsx)(s.a,{href:"https://github.com/SamChou19815",children:"@SamChou19815"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["S\xe9bastien Lorber (",(0,i.jsx)(s.a,{href:"https://github.com/slorber",children:"@slorber"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Theodore Chu (",(0,i.jsx)(s.a,{href:"https://github.com/TheodoreChu",children:"@TheodoreChu"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Yangshun Tay (",(0,i.jsx)(s.a,{href:"https://github.com/yangshun",children:"@yangshun"}),")"]}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/38elements",children:"@38elements"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/GermaVinsmoke",children:"@GermaVinsmoke"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/ZachJW34",children:"@ZachJW34"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/bravo-kernel",children:"@bravo-kernel"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/iamkun",children:"@iamkun"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"https://github.com/mohrash92",children:"@mohrash92"})}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},71670:(e,s,h)=>{h.d(s,{Z:()=>t,a:()=>r});var i=h(27378);const l={},n=i.createContext(l);function r(e){const s=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),i.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.67e1a386.js b/assets/js/925b3f96.67e1a386.js deleted file mode 100644 index ee4fb4d483..0000000000 --- a/assets/js/925b3f96.67e1a386.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[8609],{5026:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>n,contentTitle:()=>r,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var s=o(4848),u=o(8453);const a={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},r=void 0,i={permalink:"/blog/first-blog-post",editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/blog/2019-05-28-first-blog-post.md",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},n={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,u.R)(),...t.components};return(0,s.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,u.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(c,{...t})}):c(t)}},8453:(t,e,o)=>{o.d(e,{R:()=>r,x:()=>i});var s=o(6540);const u={},a=s.createContext(u);function r(t){const e=s.useContext(a);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(u):t.components||u:r(t.components),s.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/92aa9055.cca331dd.js b/assets/js/92aa9055.cca331dd.js new file mode 100644 index 0000000000..9931ba323c --- /dev/null +++ b/assets/js/92aa9055.cca331dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30935],{82778:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=s(24246),t=s(71670);const o={mdx:{format:"md"},date:"2019-11-08T20:00"},i="2.0.0-alpha.33",c={permalink:"/changelog/2.0.0-alpha.33",source:"@site/changelog/source/2.0.0-alpha.33.md",title:"2.0.0-alpha.33",description:"Features",date:"2019-11-08T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-11-08T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.34",permalink:"/changelog/2.0.0-alpha.34"},nextItem:{title:"2.0.0-alpha.32",permalink:"/changelog/2.0.0-alpha.32"},listPageLink:"/changelog/page/4"},a={authorsImageUrls:[]},l=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Others",id:"others",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Table of contents is now highlighted depending on current active headings. (thanks to awesome @SantiagoGdaR) ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/1896",children:"#1896"})]}),"\n",(0,r.jsxs)(n.li,{children:["Official blog plugin can now generate feed for blog posts. (thanks to awesome @moozzyk) ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/1916",children:"#1916"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"BREAKING"})," ",(0,r.jsx)(n.code,{children:"prismTheme"})," is renamed to ",(0,r.jsx)(n.code,{children:"theme"})," as part new ",(0,r.jsx)(n.code,{children:"prism"})," object in ",(0,r.jsx)(n.code,{children:"themeConfig"})," field in your ",(0,r.jsx)(n.code,{children:"docusaurus.config.js"}),". Eg:\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:" themeConfig: {\n- prismTheme: require('prism-react-renderer/themes/dracula'),\n+ prism: {\n+ theme: require('prism-react-renderer/themes/dracula'),\n+ },\n},\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Added new ",(0,r.jsx)(n.code,{children:"prism"})," option ",(0,r.jsx)(n.code,{children:"defaultLanguage"})," that is used if the language is not specified in code blocks. ",(0,r.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/pull/1910",children:"#1910"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix babel/env not picking the correct browserslist configuration during development. When running ",(0,r.jsx)(n.code,{children:"docusaurus start"}),", ",(0,r.jsx)(n.code,{children:"process.env.NODE_ENV"})," is now consistently set to ",(0,r.jsx)(n.code,{children:"development"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Ensure routes config generation to be more consistent in ordering. Nested routes should be placed last in routes.js. This will allow user to create ",(0,r.jsx)(n.code,{children:"src/pages/docs.js"})," to create custom docs page for ",(0,r.jsx)(n.code,{children:"/docs"})," or even ",(0,r.jsx)(n.code,{children:"src/pages/docs/super.js"})," to create page for ",(0,r.jsx)(n.code,{children:"/docs/super/"}),";"]}),"\n",(0,r.jsx)(n.li,{children:"Fix watcher does not trigger reload on windows."}),"\n",(0,r.jsx)(n.li,{children:"Fix build compilation error if exists only one code tab."}),"\n",(0,r.jsx)(n.li,{children:"Add minor padding to docs container so that hash-link won't be cut off."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"others",children:"Others"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Misc dependency upgrades."}),"\n",(0,r.jsx)(n.li,{children:"Stability improvement (more tests) & refactoring on docs plugin to prevent regression."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},71670:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>i});var r=s(27378);const t={},o=r.createContext(t);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/93041.3a8f7f74.js b/assets/js/93041.3a8f7f74.js new file mode 100644 index 0000000000..131406a59e --- /dev/null +++ b/assets/js/93041.3a8f7f74.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93041],{93041:(e,t,r)=>{function n(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;ipn});var a=function(){};function c(e){var t=e.item,r=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],l=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(s){u=!0,o=s}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t=3||2===r&&n>=4||1===r&&n>=10);function i(t,r,n){if(o&&void 0!==n){var i=n[0].__autocomplete_algoliaCredentials,a={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(p(r),[{headers:a}]))}else e.apply(void 0,[t].concat(p(r)))}return{init:function(t,r){e("init",{appId:t,apiKey:r})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDsAfterSearch",g(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDs",g(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["clickedFilters"].concat(r))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDsAfterSearch",g(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDs",g(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["convertedFilters"].concat(r))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&t.reduce((function(e,t){var r=t.items,n=d(t,f);return[].concat(p(e),p(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=[],n=0;n0&&e.apply(void 0,["viewedFilters"].concat(r))}}}function S(e){var t=e.items.reduce((function(e,t){var r;return e[t.__autocomplete_indexName]=(null!==(r=e[t.__autocomplete_indexName])&&void 0!==r?r:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function j(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function E(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return P(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return P(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&C({onItemsChange:o,items:r,insights:f,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,r=e.onSelect,n=e.onActive;s("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:f}}),r((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&l({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Selected"},c({item:t,items:m.current}))]})})),n((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&u({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Active"},c({item:t,items:m.current}))]})}))},onStateChange:function(e){var t=e.state;p({state:t})},__autocomplete_pluginOptions:e}}function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function q(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==_(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e,t,r){var n,o=t.initialState;return{getState:function(){return o},dispatch:function(n,i){var a=function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(V++),plugins:o,initialState:X({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(Q(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:a,onResolve:a};Object.keys(t).forEach((function(e){t[e].__default=!0}));var n=$($({},t),e);return Promise.resolve(n)})))}))}(e,r)}))).then((function(e){return L(e)})).then((function(e){return e.map((function(e){return X(X({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))},onResolve:function(r){e.onResolve(r),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:X({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ne(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ie,De,Ae,ke=null,xe=(Ie=-1,De=-1,Ae=void 0,function(e){var t=++Ie;return Promise.resolve(e).then((function(e){return Ae&&t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function He(e){return He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},He(e)}var Fe=["props","refresh","store"],Ue=["inputElement","formElement","panelElement"],Be=["inputElement"],Ve=["inputElement","maxLength"],Ke=["sourceIndex"],$e=["sourceIndex"],Je=["item","source","sourceIndex"];function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e){var t=e.props,r=e.refresh,n=e.store,o=Ze(e,Fe),i=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,i=e.panelElement;function a(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,i].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return We({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},Ze(e,Ue))},getRootProps:function(e){return We({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return We({action:"",noValidate:!0,role:"search",onSubmit:function(i){var a;i.preventDefault(),t.onSubmit(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(i){var a;i.preventDefault(),t.onReset(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},Ze(e,Be))},getLabelProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,Ke);return We({htmlFor:"".concat(i(t.id,n),"-input"),id:"".concat(i(t.id,n),"-label")},o)},getInputProps:function(e){var i;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&Ce(We({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var l=e||{},u=(l.inputElement,l.maxLength),s=void 0===u?512:u,f=Ze(l,Ve),m=ge(n.getState()),p=function(e){return Boolean(e&&e.match(Me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),v=null!=m&&m.itemUrl&&!p?"go":"search";return We({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:s,type:"search",onChange:function(e){Ce(We({event:e,props:t,query:e.currentTarget.value.slice(0,s),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,i=Le(e,_e);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},c=function(){var e=ge(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,a=e.itemInputValue,c=e.itemUrl,l=e.source;l.onActive(qe({event:t,item:r,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?Ce(qe({event:t,props:r,query:o.getState().query,refresh:n,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),c(),setTimeout(a,0)})):(o.dispatch(t.key,{}),c(),a())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=ge(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});Ce(qe({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},i)).then((function(){m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i))}))}}}(We({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:a,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},f)},getPanelProps:function(e){return We({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,$e);return We({role:"listbox","aria-labelledby":"".concat(i(t.id,n),"-label"),id:"".concat(i(t.id,n),"-list")},o)},getItemProps:function(e){var a=e.item,c=e.source,l=e.sourceIndex,u=Ze(e,Je);return We({id:"".concat(i(t.id,l),"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=ge(n.getState());if(null!==n.getState().activeItemId&&t){var i=t.item,c=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(We({event:e,item:i,itemInputValue:c,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():Ce(We({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(We({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},u)}}}var Xe=[{segment:"autocomplete-core",version:"1.9.3"}];function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t=r?null===n?null:0:o}function at(e){return at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},at(e)}function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function lt(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){var t=e.translations,r=void 0===t?{}:t,n=At(e,Pt),o=r.noResultsText,i=void 0===o?"No results for":o,a=r.suggestedQueryText,c=void 0===a?"Try searching for":a,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return yt.createElement("div",{className:"DocSearch-NoResults"},yt.createElement("div",{className:"DocSearch-Screen-Icon"},yt.createElement(Et,null)),yt.createElement("p",{className:"DocSearch-Title"},i,' "',yt.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&yt.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},yt.createElement("p",{className:"DocSearch-Help"},c,":"),yt.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(It(e),[yt.createElement("li",{key:t},yt.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&yt.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),yt.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var xt=function(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ct(e){switch(e.type){case"lvl1":return yt.createElement(xt,null);case"content":return yt.createElement(_t,null);default:return yt.createElement(Nt,null)}}function Nt(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function _t(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Tt(){return yt.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},yt.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),yt.createElement("path",{d:"M8 17l-6-6 6-6"})))}var qt=["hit","attribute","tagName"];function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lt(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ft(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ut(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,i=Ht(e,qt);return(0,yt.createElement)(o,Lt(Lt({},i),{},{dangerouslySetInnerHTML:{__html:Ft(t,"_snippetResult.".concat(r,".value"))||Ft(t,r)}}))}function Bt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,i=[],a=!0,c=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(l){c=!0,o=l}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Vt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r|<\/mark>)/g,Wt=RegExp(zt.source);function Qt(e){var t,r,n=e;if(!n.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((n.__docsearch_parent?null===(t=n.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(r=e._highlightResult)||void 0===r||null===(r=r.hierarchy)||void 0===r?void 0:r.lvl0)||{}).value;return o&&Wt.test(o)?o.replace(zt,""):o}function Zt(){return Zt=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function or(e){var t=e.translations,r=void 0===t?{}:t,n=nr(e,tr),o=r.recentSearchesTitle,i=void 0===o?"Recent":o,a=r.noRecentSearchesText,c=void 0===a?"No recent searches":a,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,v=r.removeFavoriteSearchButtonTitle,d=void 0===v?"Remove this search from favorites":v;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:yt.createElement("div",{className:"DocSearch-StartScreen"},yt.createElement("p",{className:"DocSearch-Help"},c)):!1===n.hasCollections?null:yt.createElement("div",{className:"DocSearch-Dropdown-Container"},yt.createElement($t,rr({},n,{title:i,collection:n.state.collections[0],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Xt,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return yt.createElement(yt.Fragment,null,yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(Yt,null))),yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(er,null))))}})),yt.createElement($t,rr({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Yt,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},yt.createElement(er,null)))}})))}var ir=["translations"];function ar(){return ar=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var lr=yt.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=cr(e,ir);if("error"===n.state.status)return yt.createElement(wt,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?yt.createElement(kt,ar({},n,{translations:null==r?void 0:r.noResultsScreen})):yt.createElement(Gt,n):yt.createElement(or,ar({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function ur(){return yt.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},yt.createElement("g",{fill:"none",fillRule:"evenodd"},yt.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},yt.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),yt.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},yt.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var sr=r(56573),fr=["translations"];function mr(){return mr=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vr(e){var t=e.translations,r=void 0===t?{}:t,n=pr(e,fr),o=r.resetButtonTitle,i=void 0===o?"Clear the query":o,a=r.resetButtonAriaLabel,c=void 0===a?"Clear the query":a,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return yt.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),yt.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),yt.createElement(yt.Fragment,null,yt.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},yt.createElement("label",mr({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),yt.createElement(sr.W,null)),yt.createElement("div",{className:"DocSearch-LoadingIndicator"},yt.createElement(ur,null)),yt.createElement("input",mr({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:ht}))),yt.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!n.state.query},yt.createElement(er,null))),yt.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var dr=["_highlightResult","_snippetResult"];function yr(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hr(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function br(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=hr(t),i=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,yr(t,dr)),a=i.findIndex((function(e){return e.objectID===r.objectID}));a>-1&&i.splice(a,1),i.unshift(r),i=i.slice(0,n),o.setItem(i)},remove:function(e){i=i.filter((function(t){return t.objectID!==e.objectID})),o.setItem(i)},getAll:function(){return i}}}function gr(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}"),i=e=>{n().setItem(t,JSON.stringify(e))};return{get:(t,r,n={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((([,e])=>void 0!==e.timestamp)));if(i(n),!t)return;const a=Object.fromEntries(Object.entries(n).filter((([,e])=>{const r=(new Date).getTime();return!(e.timestamp+tPromise.all([e?e.value:r(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||n.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const i=o();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:r},n().setItem(t,JSON.stringify(i)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Or(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Or({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Or({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Or({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Or({caches:t}).clear()))}}function Sr(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const i=JSON.stringify(r);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);const a=n(),c=o&&o.miss||(()=>Promise.resolve());return a.then((e=>c(e))).then((()=>a))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function jr(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function wr(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Er(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Pr="4.20.0",Ir={WithinQueryParameters:0,WithinHeaders:1};function Dr(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ar={Read:1,Write:2,Any:3},kr={Up:1,Down:2,Timeouted:3},xr=12e4;function Cr(e,t=kr.Up){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ar.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ar.Any}}const _r={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};function Tr(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Cr(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===kr.Up||Date.now()-e.lastUpdate>xr}(e))),n=e.filter((e=>function(e){return e.status===kr.Timeouted&&Date.now()-e.lastUpdate<=xr}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Nr(e))):t}}))}const qr=(e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e);function Rr(e,t,r,n){const o=[],i=function(e,t){if(e.method===_r.Get||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),a=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),c=r.method,l=r.method!==_r.Get?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Fr(o)};const p={data:i,headers:a,method:c,url:Mr(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},v=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},d={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=v(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",Ur(n)),e.hostsCache.set(m,Cr(m,r.isTimedOut?kr.Timeouted:kr.Down))]).then((()=>f(t,l)))},onFail(e){throw v(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Fr(o))}};return e.requester.send(p).then((e=>qr(e,d)))};return Tr(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Lr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Mr(e,t,r){const n=Hr(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Hr(e){return Object.keys(e).map((t=>{return Er("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Fr(e){return e.map((e=>Ur(e)))}function Ur(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const Br=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Ir.WithinHeaders?n:{},queryParameters:()=>e===Ir.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Ir.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,headers:s,queryParameters:u,hosts:l.map((e=>Nr(e))),read(e,t){const r=Dr(t,f.timeouts.read),n=()=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Write))),e,Dr(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ar.Read},{url:`${t}.algolia.net`,accept:Ar.Write}].concat(jr([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return wr(o,e.methods)},Vr=e=>(t,r)=>t.method===_r.Get?e.transporter.read(t,r):e.transporter.write(t,r),Kr=e=>(t,r={})=>wr({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),$r=e=>(t,r)=>{const n=t.map((e=>({...e,params:Hr(e.params||{})})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},Jr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...i}=t.params;return Kr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(n,o,{...r,...i})}))),zr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),Wr=e=>(t,r)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),Qr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),Zr={Debug:1,Info:2,Error:3};function Gr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let i;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===i&&(clearTimeout(o),i=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(i),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(i),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=Zr.Error,{debug:(e,t)=>(Zr.Debug>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Zr.Info>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Sr(),requestsCache:Sr({serializable:!1}),hostsCache:Or({caches:[gr({key:`${Pr}-${e}`}),Sr()]}),userAgent:Lr(Pr).add({segment:"Browser",version:"lite"}),authMode:Ir.WithinQueryParameters};var o;return Br({...n,...r,methods:{search:$r,searchForFacetValues:Jr,multipleQueries:$r,multipleSearchForFacetValues:Jr,customRequest:Vr,initIndex:e=>t=>Kr(e)(t,{methods:{search:Wr,searchForFacetValues:Qr,findAnswers:zr}})}})}Gr.version=Pr;const Xr=Gr;var Yr="3.5.2";function en(){}function tn(e){return e}function rn(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function nn(e,t,r){return e.reduce((function(e,n){var o=t(n);return e.hasOwnProperty(o)||(e[o]=[]),e[o].length<(r||5)&&e[o].push(n),e}),{})}var on=["footer","searchBox"];function an(){return an=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pn(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,a=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?en:l,s=e.transformItems,f=void 0===s?tn:s,m=e.hitComponent,p=void 0===m?St:m,v=e.resultsFooterComponent,d=void 0===v?function(){return null}:v,y=e.navigator,h=e.initialScrollY,b=void 0===h?0:h,g=e.transformSearchClient,O=void 0===g?tn:g,S=e.disableUserPersonalization,j=void 0!==S&&S,w=e.initialQuery,E=void 0===w?"":w,P=e.translations,I=void 0===P?{}:P,D=e.getMissingResultsUrl,A=e.insights,k=void 0!==A&&A,x=I.footer,C=I.searchBox,N=mn(I,on),_=sn(yt.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),T=_[0],q=_[1],R=yt.useRef(null),L=yt.useRef(null),M=yt.useRef(null),H=yt.useRef(null),F=yt.useRef(null),U=yt.useRef(10),B=yt.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,ht):"").current,V=yt.useRef(E||B).current,K=function(e,t,r){return yt.useMemo((function(){var n=Xr(e,t);return n.addAlgoliaAgent("docsearch",Yr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",Yr),r(n)}),[e,t,r])}(t,r,O),$=yt.useRef(br({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,J=yt.useRef(br({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===$.getAll().length?7:4})).current,z=yt.useCallback((function(e){if(!j){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===$.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&J.add(t)}}),[$,J,j]),W=yt.useCallback((function(e){if(T.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,r={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};T.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(r)}}),[T.context.algoliaInsightsPlugin]),Q=yt.useMemo((function(){return dt({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:V,context:{searchSuggestions:[]}},insights:k,navigator:y,onStateChange:function(e){q(e.state)},getSources:function(e){var o=e.query,i=e.state,l=e.setContext,s=e.setStatus;if(!o)return j?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return J.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return $.getAll()}}];var m=Boolean(k);return K.search([{query:o,indexName:n,params:ln({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(U.current),"hierarchy.lvl2:".concat(U.current),"hierarchy.lvl3:".concat(U.current),"hierarchy.lvl4:".concat(U.current),"hierarchy.lvl5:".concat(U.current),"hierarchy.lvl6:".concat(U.current),"content:".concat(U.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:m},a)}]).catch((function(e){throw"RetryError"===e.name&&s("error"),e})).then((function(e){var o=e.results[0],a=o.hits,s=o.nbHits,p=nn(a,(function(e){return Qt(e)}),c);i.context.searchSuggestions.length0&&(X(),F.current&&F.current.focus())}),[V,X]),yt.useEffect((function(){function e(){if(L.current){var e=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),yt.createElement("div",an({ref:R},G({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===T.status&&"DocSearch-Container--Stalled","error"===T.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),yt.createElement("div",{className:"DocSearch-Modal",ref:L},yt.createElement("header",{className:"DocSearch-SearchBar",ref:M},yt.createElement(vr,an({},Q,{state:T,autoFocus:0===V.length,inputRef:F,isFromSelection:Boolean(V)&&V===B,translations:C,onClose:u}))),yt.createElement("div",{className:"DocSearch-Dropdown",ref:H},yt.createElement(lr,an({},Q,{indexName:n,state:T,hitComponent:p,resultsFooterComponent:d,disableUserPersonalization:j,recentSearches:J,favoriteSearches:$,inputRef:F,translations:N,getMissingResultsUrl:D,onItemClick:function(e,t){W(e),z(e),rn(t)||u()}}))),yt.createElement("footer",{className:"DocSearch-Footer"},yt.createElement(Ot,{translations:x}))))}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.6662dda0.js b/assets/js/935f2afb.6662dda0.js deleted file mode 100644 index e4bd4d92d2..0000000000 --- a/assets/js/935f2afb.6662dda0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocusaurus=self.webpackChunkdocusaurus||[]).push([[8581],{5610:a=>{a.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Tutorial Intro","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Tutorial - Basics","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a Page","href":"/docs/tutorial-basics/create-a-page","docId":"tutorial-basics/create-a-page","unlisted":false},{"type":"link","label":"Create a Document","href":"/docs/tutorial-basics/create-a-document","docId":"tutorial-basics/create-a-document","unlisted":false},{"type":"link","label":"Create a Blog Post","href":"/docs/tutorial-basics/create-a-blog-post","docId":"tutorial-basics/create-a-blog-post","unlisted":false},{"type":"link","label":"Markdown Features","href":"/docs/tutorial-basics/markdown-features","docId":"tutorial-basics/markdown-features","unlisted":false},{"type":"link","label":"Deploy your site","href":"/docs/tutorial-basics/deploy-your-site","docId":"tutorial-basics/deploy-your-site","unlisted":false},{"type":"link","label":"Congratulations!","href":"/docs/tutorial-basics/congratulations","docId":"tutorial-basics/congratulations","unlisted":false}],"href":"/docs/category/tutorial---basics"},{"type":"category","label":"Tutorial - Extras","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Manage Docs Versions","href":"/docs/tutorial-extras/manage-docs-versions","docId":"tutorial-extras/manage-docs-versions","unlisted":false},{"type":"link","label":"Translate your site","href":"/docs/tutorial-extras/translate-your-site","docId":"tutorial-extras/translate-your-site","unlisted":false}],"href":"/docs/category/tutorial---extras"}]},"docs":{"intro":{"id":"intro","title":"Tutorial Intro","description":"Let\'s discover Docusaurus in less than 5 minutes.","sidebar":"tutorialSidebar"},"tutorial-basics/congratulations":{"id":"tutorial-basics/congratulations","title":"Congratulations!","description":"You have just learned the basics of Docusaurus and made some changes to the initial template.","sidebar":"tutorialSidebar"},"tutorial-basics/create-a-blog-post":{"id":"tutorial-basics/create-a-blog-post","title":"Create a Blog Post","description":"Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...","sidebar":"tutorialSidebar"},"tutorial-basics/create-a-document":{"id":"tutorial-basics/create-a-document","title":"Create a Document","description":"Documents are groups of pages connected through:","sidebar":"tutorialSidebar"},"tutorial-basics/create-a-page":{"id":"tutorial-basics/create-a-page","title":"Create a Page","description":"Add Markdown or React files to src/pages to create a standalone page:","sidebar":"tutorialSidebar"},"tutorial-basics/deploy-your-site":{"id":"tutorial-basics/deploy-your-site","title":"Deploy your site","description":"Docusaurus is a static-site-generator (also called Jamstack).","sidebar":"tutorialSidebar"},"tutorial-basics/markdown-features":{"id":"tutorial-basics/markdown-features","title":"Markdown Features","description":"Docusaurus supports Markdown and a few additional features.","sidebar":"tutorialSidebar"},"tutorial-extras/manage-docs-versions":{"id":"tutorial-extras/manage-docs-versions","title":"Manage Docs Versions","description":"Docusaurus can manage multiple versions of your docs.","sidebar":"tutorialSidebar"},"tutorial-extras/translate-your-site":{"id":"tutorial-extras/translate-your-site","title":"Translate your site","description":"Let\'s translate docs/intro.md to French.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/93940.7a3011ef.js b/assets/js/93940.7a3011ef.js new file mode 100644 index 0000000000..7bedd45a04 --- /dev/null +++ b/assets/js/93940.7a3011ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[93940],{28109:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});var i=n(24246);n(27378);function r(){return(0,i.jsx)("div",{style:{border:"solid",margin:10,padding:10},children:(0,i.jsx)("button",{type:"button",onClick:()=>alert("click"),children:"HeavyComponent"})})}}}]); \ No newline at end of file diff --git a/assets/js/941a00b8.e9531d5c.js b/assets/js/941a00b8.e9531d5c.js new file mode 100644 index 0000000000..16820b9f8b --- /dev/null +++ b/assets/js/941a00b8.e9531d5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[34299],{12171:s=>{s.exports=JSON.parse('{"tag":{"label":"listed","permalink":"/tests/docs/tags/listed","allTagsPath":"/tests/docs/tags","count":2,"items":[{"id":"tests/visibility/some-drafts/draft-subcategory/listed1","title":"Some Drafts - Listed 1","description":"Regular doc","permalink":"/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1"},{"id":"tests/visibility/some-unlisteds/unlisted-subcategory/listed1","title":"Some Unlisteds - Listed 1","description":"Regular doc","permalink":"/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/942.04075e61.js b/assets/js/942.04075e61.js new file mode 100644 index 0000000000..d80ccc4f45 --- /dev/null +++ b/assets/js/942.04075e61.js @@ -0,0 +1,10098 @@ +"use strict"; +exports.id = 942; +exports.ids = [942]; +exports.modules = { + +/***/ 9500: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(63345); +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/map.js +var map = __webpack_require__(27206); +// EXTERNAL MODULE: ../node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(1110); +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(88472); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(62320); +// EXTERNAL MODULE: ../node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(25541); +// EXTERNAL MODULE: ../node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(65029); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +;// CONCATENATED MODULE: ../node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(10541); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_root.js +var _root = __webpack_require__(97659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(58410); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(97640); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(96635); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(31066); +;// CONCATENATED MODULE: ../node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(46133); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +;// CONCATENATED MODULE: ../node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ../node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(22412); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(30434); +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 96635: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(88103); +// EXTERNAL MODULE: ../node_modules/lodash-es/constant.js +var constant = __webpack_require__(2977); +// EXTERNAL MODULE: ../node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(78246); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +// EXTERNAL MODULE: ../node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(88205); +// EXTERNAL MODULE: ../node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(29955); +// EXTERNAL MODULE: ../node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(46188); +// EXTERNAL MODULE: ../node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(6524); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(45556); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(92042); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(78953); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(79228); +;// CONCATENATED MODULE: ../node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(93530); +;// CONCATENATED MODULE: ../node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ../node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(95179); +// EXTERNAL MODULE: ../node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(54632); +;// CONCATENATED MODULE: ../node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 88472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96635); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 58017: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(61056); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 62020: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 69878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 43668: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 37891: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 31066: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(62020); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(46518); +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(86483); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(23999); +// EXTERNAL MODULE: ../node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(98058); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(57538); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(99773); +// EXTERNAL MODULE: ../node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(33464); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(65976); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(37659); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(24763); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(33731); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(42052); +// EXTERNAL MODULE: ../node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(17433); +;// CONCATENATED MODULE: ../node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 88015: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(51877); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(79458); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 78953: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 45556: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(37891); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(5998); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 51877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30434); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 42825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 65976: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37891); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 90510: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(72178); +// EXTERNAL MODULE: ../node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(58017); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(58923); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(56421); +// EXTERNAL MODULE: ../node_modules/lodash-es/eq.js +var eq = __webpack_require__(28916); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(80877); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(22879); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(68023); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(45633); +// EXTERNAL MODULE: ../node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(17065); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18742); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +;// CONCATENATED MODULE: ../node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ../node_modules/lodash-es/identity.js +var identity = __webpack_require__(84111); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(32965); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 46133: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88015); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 32965: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 58923: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 22412: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84111); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 43169: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(67990); +// EXTERNAL MODULE: ../node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(77397); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ../node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(59457); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 22879: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65976); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(57538); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(94778); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 57538: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69878); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33464); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 95942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43169); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5998); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47838); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62916); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7614); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99316); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 67990: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(54878); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 80877: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 99316: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54878); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 65029: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92042); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28916); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84264); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86483); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 88205: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(69878); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 94605: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45556); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 46188: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62020); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88015); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22412); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 88103: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 23072: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(95942); +;// CONCATENATED MODULE: ../node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 54878: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97640); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18742); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 6524: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 94778: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9852); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(58410); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79458); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 27206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(43668); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90510); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46133); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47838); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 25541: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(42825); +// EXTERNAL MODULE: ../node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(84424); +// EXTERNAL MODULE: ../node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(43169); +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(62916); +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(99316); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ../node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(23072); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ../node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(94605); +// EXTERNAL MODULE: ../node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(6348); +// EXTERNAL MODULE: ../node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(98950); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 1110: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(84264); +// EXTERNAL MODULE: ../node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(26460); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 54632: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(88015); +// EXTERNAL MODULE: ../node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(90510); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +;// CONCATENATED MODULE: ../node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 33464: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 26460: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ../node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(80369); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 59457: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(9000); +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +// EXTERNAL MODULE: ../node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(47838); +// EXTERNAL MODULE: ../node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(54878); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ../node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 63345: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59457); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 95179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ../node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(43668); +;// CONCATENATED MODULE: ../node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ../node_modules/lodash-es/keys.js +var keys = __webpack_require__(94778); +;// CONCATENATED MODULE: ../node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 13942: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9500); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88472); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42605); + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [5, 6, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72], $V6 = [1, 22], $V7 = [2, 13], $V8 = [1, 26], $V9 = [1, 27], $Va = [1, 28], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 24], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 36], $Vi = [71, 72], $Vj = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 60, 62, 71, 72], $Vk = [1, 56], $Vl = [1, 57], $Vm = [1, 58], $Vn = [1, 59], $Vo = [1, 60], $Vp = [1, 61], $Vq = [1, 62], $Vr = [62, 63], $Vs = [1, 74], $Vt = [1, 70], $Vu = [1, 71], $Vv = [1, 72], $Vw = [1, 73], $Vx = [1, 75], $Vy = [1, 79], $Vz = [1, 80], $VA = [1, 77], $VB = [1, 78], $VC = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "openDirective": 9, "typeDirective": 10, "closeDirective": 11, ":": 12, "argDirective": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "requirementDef": 23, "elementDef": 24, "relationshipDef": 25, "requirementType": 26, "requirementName": 27, "STRUCT_START": 28, "requirementBody": 29, "ID": 30, "COLONSEP": 31, "id": 32, "TEXT": 33, "text": 34, "RISK": 35, "riskLevel": 36, "VERIFYMTHD": 37, "verifyType": 38, "STRUCT_STOP": 39, "REQUIREMENT": 40, "FUNCTIONAL_REQUIREMENT": 41, "INTERFACE_REQUIREMENT": 42, "PERFORMANCE_REQUIREMENT": 43, "PHYSICAL_REQUIREMENT": 44, "DESIGN_CONSTRAINT": 45, "LOW_RISK": 46, "MED_RISK": 47, "HIGH_RISK": 48, "VERIFY_ANALYSIS": 49, "VERIFY_DEMONSTRATION": 50, "VERIFY_INSPECTION": 51, "VERIFY_TEST": 52, "ELEMENT": 53, "elementName": 54, "elementBody": 55, "TYPE": 56, "type": 57, "DOCREF": 58, "ref": 59, "END_ARROW_L": 60, "relationship": 61, "LINE": 62, "END_ARROW_R": 63, "CONTAINS": 64, "COPIES": 65, "DERIVES": 66, "SATISFIES": 67, "VERIFIES": 68, "REFINES": 69, "TRACES": 70, "unqString": 71, "qString": 72, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 12: ":", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 28: "STRUCT_START", 30: "ID", 31: "COLONSEP", 33: "TEXT", 35: "RISK", 37: "VERIFYMTHD", 39: "STRUCT_STOP", 40: "REQUIREMENT", 41: "FUNCTIONAL_REQUIREMENT", 42: "INTERFACE_REQUIREMENT", 43: "PERFORMANCE_REQUIREMENT", 44: "PHYSICAL_REQUIREMENT", 45: "DESIGN_CONSTRAINT", 46: "LOW_RISK", 47: "MED_RISK", 48: "HIGH_RISK", 49: "VERIFY_ANALYSIS", 50: "VERIFY_DEMONSTRATION", 51: "VERIFY_INSPECTION", 52: "VERIFY_TEST", 53: "ELEMENT", 56: "TYPE", 58: "DOCREF", 60: "END_ARROW_L", 62: "LINE", 63: "END_ARROW_R", 64: "CONTAINS", 65: "COPIES", 66: "DERIVES", 67: "SATISFIES", 68: "VERIFIES", 69: "REFINES", 70: "TRACES", 71: "unqString", 72: "qString" }, + productions_: [0, [3, 3], [3, 2], [3, 4], [4, 3], [4, 5], [4, 2], [4, 2], [4, 1], [9, 1], [10, 1], [13, 1], [11, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [23, 5], [29, 5], [29, 5], [29, 5], [29, 5], [29, 2], [29, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [36, 1], [36, 1], [36, 1], [38, 1], [38, 1], [38, 1], [38, 1], [24, 5], [55, 5], [55, 5], [55, 2], [55, 1], [25, 5], [25, 5], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [27, 1], [27, 1], [32, 1], [32, 1], [34, 1], [34, 1], [54, 1], [54, 1], [57, 1], [57, 1], [59, 1], [59, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 7: + case 8: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 9: + yy.parseDirective("%%{", "open_directive"); + break; + case 10: + yy.parseDirective($$[$0], "type_directive"); + break; + case 11: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 12: + yy.parseDirective("}%%", "close_directive", "pie"); + break; + case 13: + this.$ = []; + break; + case 19: + yy.addRequirement($$[$0 - 3], $$[$0 - 4]); + break; + case 20: + yy.setNewReqId($$[$0 - 2]); + break; + case 21: + yy.setNewReqText($$[$0 - 2]); + break; + case 22: + yy.setNewReqRisk($$[$0 - 2]); + break; + case 23: + yy.setNewReqVerifyMethod($$[$0 - 2]); + break; + case 26: + this.$ = yy.RequirementType.REQUIREMENT; + break; + case 27: + this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; + break; + case 28: + this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; + break; + case 29: + this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; + break; + case 30: + this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; + break; + case 31: + this.$ = yy.RequirementType.DESIGN_CONSTRAINT; + break; + case 32: + this.$ = yy.RiskLevel.LOW_RISK; + break; + case 33: + this.$ = yy.RiskLevel.MED_RISK; + break; + case 34: + this.$ = yy.RiskLevel.HIGH_RISK; + break; + case 35: + this.$ = yy.VerifyType.VERIFY_ANALYSIS; + break; + case 36: + this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; + break; + case 37: + this.$ = yy.VerifyType.VERIFY_INSPECTION; + break; + case 38: + this.$ = yy.VerifyType.VERIFY_TEST; + break; + case 39: + yy.addElement($$[$0 - 3]); + break; + case 40: + yy.setNewElementType($$[$0 - 2]); + break; + case 41: + yy.setNewElementDocRef($$[$0 - 2]); + break; + case 44: + yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 45: + yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 46: + this.$ = yy.Relationships.CONTAINS; + break; + case 47: + this.$ = yy.Relationships.COPIES; + break; + case 48: + this.$ = yy.Relationships.DERIVES; + break; + case 49: + this.$ = yy.Relationships.SATISFIES; + break; + case 50: + this.$ = yy.Relationships.VERIFIES; + break; + case 51: + this.$ = yy.Relationships.REFINES; + break; + case 52: + this.$ = yy.Relationships.TRACES; + break; + } + }, + table: [{ 3: 1, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: [1, 9], 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 5: [1, 11] }, { 10: 12, 20: [1, 13] }, { 15: [1, 14] }, { 17: [1, 15] }, o($V5, [2, 8]), { 20: [2, 9] }, { 3: 16, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [2, 2] }, { 4: 21, 5: $V6, 7: 17, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 11: 34, 12: [1, 35], 22: $Vh }, o([12, 22], [2, 10]), o($V5, [2, 6]), o($V5, [2, 7]), { 1: [2, 1] }, { 8: [1, 37] }, { 4: 21, 5: $V6, 7: 38, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 39, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 40, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 41, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 42, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 27: 43, 71: [1, 44], 72: [1, 45] }, { 54: 46, 71: [1, 47], 72: [1, 48] }, { 60: [1, 49], 62: [1, 50] }, o($Vi, [2, 26]), o($Vi, [2, 27]), o($Vi, [2, 28]), o($Vi, [2, 29]), o($Vi, [2, 30]), o($Vi, [2, 31]), o($Vj, [2, 55]), o($Vj, [2, 56]), o($V5, [2, 4]), { 13: 51, 21: [1, 52] }, o($V5, [2, 12]), { 1: [2, 3] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 8: [2, 17] }, { 8: [2, 18] }, { 28: [1, 53] }, { 28: [2, 53] }, { 28: [2, 54] }, { 28: [1, 54] }, { 28: [2, 59] }, { 28: [2, 60] }, { 61: 55, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 61: 63, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 11: 64, 22: $Vh }, { 22: [2, 11] }, { 5: [1, 65] }, { 5: [1, 66] }, { 62: [1, 67] }, o($Vr, [2, 46]), o($Vr, [2, 47]), o($Vr, [2, 48]), o($Vr, [2, 49]), o($Vr, [2, 50]), o($Vr, [2, 51]), o($Vr, [2, 52]), { 63: [1, 68] }, o($V5, [2, 5]), { 5: $Vs, 29: 69, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 76, 56: $VA, 58: $VB }, { 32: 81, 71: $Vf, 72: $Vg }, { 32: 82, 71: $Vf, 72: $Vg }, o($VC, [2, 19]), { 31: [1, 83] }, { 31: [1, 84] }, { 31: [1, 85] }, { 31: [1, 86] }, { 5: $Vs, 29: 87, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, o($VC, [2, 25]), o($VC, [2, 39]), { 31: [1, 88] }, { 31: [1, 89] }, { 5: $Vy, 39: $Vz, 55: 90, 56: $VA, 58: $VB }, o($VC, [2, 43]), o($VC, [2, 44]), o($VC, [2, 45]), { 32: 91, 71: $Vf, 72: $Vg }, { 34: 92, 71: [1, 93], 72: [1, 94] }, { 36: 95, 46: [1, 96], 47: [1, 97], 48: [1, 98] }, { 38: 99, 49: [1, 100], 50: [1, 101], 51: [1, 102], 52: [1, 103] }, o($VC, [2, 24]), { 57: 104, 71: [1, 105], 72: [1, 106] }, { 59: 107, 71: [1, 108], 72: [1, 109] }, o($VC, [2, 42]), { 5: [1, 110] }, { 5: [1, 111] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [1, 112] }, { 5: [2, 32] }, { 5: [2, 33] }, { 5: [2, 34] }, { 5: [1, 113] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [2, 38] }, { 5: [1, 114] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [1, 115] }, { 5: [2, 63] }, { 5: [2, 64] }, { 5: $Vs, 29: 116, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 117, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 118, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 119, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 120, 56: $VA, 58: $VB }, { 5: $Vy, 39: $Vz, 55: 121, 56: $VA, 58: $VB }, o($VC, [2, 20]), o($VC, [2, 21]), o($VC, [2, 22]), o($VC, [2, 23]), o($VC, [2, 40]), o($VC, [2, 41])], + defaultActions: { 8: [2, 9], 10: [2, 2], 16: [2, 1], 37: [2, 3], 38: [2, 14], 39: [2, 15], 40: [2, 16], 41: [2, 17], 42: [2, 18], 44: [2, 53], 45: [2, 54], 47: [2, 59], 48: [2, 60], 52: [2, 11], 93: [2, 57], 94: [2, 58], 96: [2, 32], 97: [2, 33], 98: [2, 34], 100: [2, 35], 101: [2, 36], 102: [2, 37], 103: [2, 38], 105: [2, 61], 106: [2, 62], 108: [2, 63], 109: [2, 64] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 19; + case 1: + this.begin("type_directive"); + return 20; + case 2: + this.popState(); + this.begin("arg_directive"); + return 12; + case 3: + this.popState(); + this.popState(); + return 22; + case 4: + return 21; + case 5: + return "title"; + case 6: + this.begin("acc_title"); + return 14; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 16; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 5; + case 14: + break; + case 15: + break; + case 16: + break; + case 17: + return 8; + case 18: + return 6; + case 19: + return 28; + case 20: + return 39; + case 21: + return 31; + case 22: + return 30; + case 23: + return 33; + case 24: + return 35; + case 25: + return 37; + case 26: + return 40; + case 27: + return 41; + case 28: + return 42; + case 29: + return 43; + case 30: + return 44; + case 31: + return 45; + case 32: + return 46; + case 33: + return 47; + case 34: + return 48; + case 35: + return 49; + case 36: + return 50; + case 37: + return 51; + case 38: + return 52; + case 39: + return 53; + case 40: + return 64; + case 41: + return 65; + case 42: + return 66; + case 43: + return 67; + case 44: + return 68; + case 45: + return 69; + case 46: + return 70; + case 47: + return 56; + case 48: + return 58; + case 49: + return 60; + case 50: + return 63; + case 51: + return 62; + case 52: + this.begin("string"); + break; + case 53: + this.popState(); + break; + case 54: + return "qString"; + case 55: + yy_.yytext = yy_.yytext.trim(); + return 71; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i], + conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [53, 54], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 55], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let relations = []; +let latestRequirement = {}; +let requirements = {}; +let latestElement = {}; +let elements = {}; +const RequirementType = { + REQUIREMENT: "Requirement", + FUNCTIONAL_REQUIREMENT: "Functional Requirement", + INTERFACE_REQUIREMENT: "Interface Requirement", + PERFORMANCE_REQUIREMENT: "Performance Requirement", + PHYSICAL_REQUIREMENT: "Physical Requirement", + DESIGN_CONSTRAINT: "Design Constraint" +}; +const RiskLevel = { + LOW_RISK: "Low", + MED_RISK: "Medium", + HIGH_RISK: "High" +}; +const VerifyType = { + VERIFY_ANALYSIS: "Analysis", + VERIFY_DEMONSTRATION: "Demonstration", + VERIFY_INSPECTION: "Inspection", + VERIFY_TEST: "Test" +}; +const Relationships = { + CONTAINS: "contains", + COPIES: "copies", + DERIVES: "derives", + SATISFIES: "satisfies", + VERIFIES: "verifies", + REFINES: "refines", + TRACES: "traces" +}; +const parseDirective = function(statement, context, type) { + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.m.parseDirective(this, statement, context, type); +}; +const addRequirement = (name, type) => { + if (requirements[name] === void 0) { + requirements[name] = { + name, + type, + id: latestRequirement.id, + text: latestRequirement.text, + risk: latestRequirement.risk, + verifyMethod: latestRequirement.verifyMethod + }; + } + latestRequirement = {}; + return requirements[name]; +}; +const getRequirements = () => requirements; +const setNewReqId = (id) => { + if (latestRequirement !== void 0) { + latestRequirement.id = id; + } +}; +const setNewReqText = (text) => { + if (latestRequirement !== void 0) { + latestRequirement.text = text; + } +}; +const setNewReqRisk = (risk) => { + if (latestRequirement !== void 0) { + latestRequirement.risk = risk; + } +}; +const setNewReqVerifyMethod = (verifyMethod) => { + if (latestRequirement !== void 0) { + latestRequirement.verifyMethod = verifyMethod; + } +}; +const addElement = (name) => { + if (elements[name] === void 0) { + elements[name] = { + name, + type: latestElement.type, + docRef: latestElement.docRef + }; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", name); + } + latestElement = {}; + return elements[name]; +}; +const getElements = () => elements; +const setNewElementType = (type) => { + if (latestElement !== void 0) { + latestElement.type = type; + } +}; +const setNewElementDocRef = (docRef) => { + if (latestElement !== void 0) { + latestElement.docRef = docRef; + } +}; +const addRelationship = (type, src, dst) => { + relations.push({ + type, + src, + dst + }); +}; +const getRelationships = () => relations; +const clear = () => { + relations = []; + latestRequirement = {}; + requirements = {}; + latestElement = {}; + elements = {}; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.v)(); +}; +const db = { + RequirementType, + RiskLevel, + VerifyType, + Relationships, + parseDirective, + getConfig: () => (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().req, + addRequirement, + getRequirements, + setNewReqId, + setNewReqText, + setNewReqRisk, + setNewReqVerifyMethod, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.g, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.b, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.a, + addElement, + getElements, + setNewElementType, + setNewElementDocRef, + addRelationship, + getRelationships, + clear +}; +const getStyles = (options) => ` + + marker { + fill: ${options.relationColor}; + stroke: ${options.relationColor}; + } + + marker.cross { + stroke: ${options.lineColor}; + } + + svg { + font-family: ${options.fontFamily}; + font-size: ${options.fontSize}; + } + + .reqBox { + fill: ${options.requirementBackground}; + fill-opacity: 1.0; + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${options.requirementTextColor}; + } + .reqLabelBox { + fill: ${options.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + .relationshipLine { + stroke: ${options.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${options.relationLabelColor}; + } + +`; +const styles = getStyles; +const ReqMarkers = { + CONTAINS: "contains", + ARROW: "arrow" +}; +const insertLineEndings = (parentNode, conf2) => { + let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g"); + containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none"); + containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1); + containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1); + parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr( + "d", + `M0,0 + L${conf2.line_height},${conf2.line_height / 2} + M${conf2.line_height},${conf2.line_height / 2} + L0,${conf2.line_height}` + ).attr("stroke-width", 1); +}; +const markers = { + ReqMarkers, + insertLineEndings +}; +let conf = {}; +let relCnt = 0; +const newRectNode = (parentNode, id) => { + return parentNode.insert("rect", "#" + id).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf.rect_min_width + "px").attr("height", conf.rect_min_height + "px"); +}; +const newTitleNode = (parentNode, id, txts) => { + let x = conf.rect_min_width / 2; + let title = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id).attr("x", x).attr("y", conf.rect_padding).attr("dominant-baseline", "hanging"); + let i = 0; + txts.forEach((textStr) => { + if (i == 0) { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", 0).text(textStr); + } else { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", conf.line_height * 0.75).text(textStr); + } + i++; + }); + let yPadding = 1.5 * conf.rect_padding; + let linePadding = i * conf.line_height * 0.75; + let totalY = yPadding + linePadding; + parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf.rect_min_width).attr("y1", totalY).attr("y2", totalY); + return { + titleNode: title, + y: totalY + }; +}; +const newBodyNode = (parentNode, id, txts, yStart) => { + let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id).attr("x", conf.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); + let currentRow = 0; + const charLimit = 30; + let wrappedTxts = []; + txts.forEach((textStr) => { + let currentTextLen = textStr.length; + while (currentTextLen > charLimit && currentRow < 3) { + let firstPart = textStr.substring(0, charLimit); + textStr = textStr.substring(charLimit, textStr.length); + currentTextLen = textStr.length; + wrappedTxts[wrappedTxts.length] = firstPart; + currentRow++; + } + if (currentRow == 3) { + let lastStr = wrappedTxts[wrappedTxts.length - 1]; + wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; + } else { + wrappedTxts[wrappedTxts.length] = textStr; + } + currentRow = 0; + }); + wrappedTxts.forEach((textStr) => { + body.append("tspan").attr("x", conf.rect_padding).attr("dy", conf.line_height).text(textStr); + }); + return body; +}; +const addEdgeLabel = (parentNode, svgPath, conf2, txt) => { + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + relCnt++; + const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); + const labelBBox = labelNode.node().getBBox(); + parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); +}; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + const edge = g.edge(elementString(rel.src), elementString(rel.dst)); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }); + const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); + if (rel.type == diagObj.db.Relationships.CONTAINS) { + svgPath.attr( + "marker-start", + "url(" + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)" + ); + } else { + svgPath.attr("stroke-dasharray", "10,7"); + svgPath.attr( + "marker-end", + "url(" + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)" + ); + } + addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); + return; +}; +const drawReqs = (reqs, graph, svgNode) => { + Object.keys(reqs).forEach((reqName) => { + let req = reqs[reqName]; + reqName = elementString(reqName); + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", reqName); + const groupNode = svgNode.append("g").attr("id", reqName); + const textId = "req-" + reqName; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ + `<<${req.type}>>`, + `${req.name}` + ]); + newBodyNode( + groupNode, + reqName + "_body", + [ + `Id: ${req.id}`, + `Text: ${req.text}`, + `Risk: ${req.risk}`, + `Verification: ${req.verifyMethod}` + ], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(reqName, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: reqName + }); + }); +}; +const drawElements = (els, graph, svgNode) => { + Object.keys(els).forEach((elName) => { + let el = els[elName]; + const id = elementString(elName); + const groupNode = svgNode.append("g").attr("id", id); + const textId = "element-" + id; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<>`, `${elName}`]); + newBodyNode( + groupNode, + textId + "_body", + [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(id, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id + }); + }); +}; +const addRelationships = (relationships, g) => { + relationships.forEach(function(r) { + let src = elementString(r.src); + let dst = elementString(r.dst); + g.setEdge(src, dst, { relationship: r }); + }); + return relationships; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v); + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); + return; +}; +const elementString = (str) => { + return str.replace(/\s/g, "").replace(/\./g, "_"); +}; +const draw = (text, id, _version, diagObj) => { + conf = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.c)().requirement; + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id='${id}']`); + markers.insertLineEndings(svg, conf); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: false, + compound: false, + directed: true + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let requirements2 = diagObj.db.getRequirements(); + let elements2 = diagObj.db.getElements(); + let relationships = diagObj.db.getRelationships(); + drawReqs(requirements2, g, svg); + drawElements(elements2, g, svg); + addRelationships(relationships, g); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + adjustEntities(svg, g); + relationships.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, id, diagObj); + }); + const padding = conf.rect_padding; + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_6__.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/945e072c.61f48024.js b/assets/js/945e072c.61f48024.js new file mode 100644 index 0000000000..57a1009834 --- /dev/null +++ b/assets/js/945e072c.61f48024.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[81187],{61132:(e,n,t)=>{t.d(n,{Z:()=>i});var s=t(24246),o=(t(27378),t(40624));const r={tabItem:"tabItem_pnkT"};function i({children:e,hidden:n,className:t}){return(0,s.jsx)("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,t),hidden:n,children:e})}},97555:(e,n,t)=>{t.d(n,{Z:()=>O});var s=t(24246),o=t(27378),r=t(40624),i=t(75527),a=t(3620),l=t(44479),c=t(62821),h=t(52196),d=t(53589);function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function p(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,s)}return t}(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})),e}function m(e){var n,t;return null!==(t=null===(n=o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))||void 0===n?void 0:n.filter(Boolean))&&void 0!==t?t:[]}function j(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=null!=n?n:function(e){return m(e).map((({props:{value:e,label:n,attributes:t,default:s}})=>({value:e,label:n,attributes:t,default:s})))}(t);return function(e){const n=(0,h.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function x({queryString:e=!1,groupId:n}){const t=(0,a.k6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=n?n:null}({queryString:e,groupId:n}),r=(0,c._X)(s),i=(0,o.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace(p(function(e){for(var n=1;nfunction({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}var t;const s=null!==(t=n.find((e=>e.default)))&&void 0!==t?t:n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:r}))),[c,h]=x({queryString:t,groupId:s}),[u,p]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,s]=(0,d.Nk)(n);return[t,(0,o.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:s}),m=(()=>{const e=null!=c?c:u;return g({value:e,tabValues:r})?e:null})();(0,l.Z)((()=>{m&&a(m)}),[m]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var w=t(29088);const y={tabList:"tabList_Qoir",tabItem:"tabItem_AQgk"};function b(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function z(e){for(var n=1;n{const n=e.currentTarget,s=l.indexOf(n),r=a[s].value;r!==t&&(c(n),o(r))},d=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;var t;n=null!==(t=l[s])&&void 0!==t?t:l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;var s;n=null!==(s=l[t])&&void 0!==s?s:l[l.length-1];break}}null==n||n.focus()};return(0,s.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},e),children:a.map((({value:e,label:n,attributes:o})=>(0,s.jsx)("li",v(z({role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>l.push(e),onKeyDown:d,onClick:h},o),{className:(0,r.Z)("tabs__item",y.tabItem,null==o?void 0:o.className,{"tabs__item--active":t===e}),children:null!=n?n:e}),e)))})}function S({lazy:e,children:n,selectedValue:t}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find((e=>e.props.value===t));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,s.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function I(e){const n=f(e);return(0,s.jsxs)("div",{className:(0,r.Z)("tabs-container",y.tabList),children:[(0,s.jsx)(k,z({},e,n)),(0,s.jsx)(S,z({},e,n))]})}function O(e){const n=(0,w.Z)();return(0,s.jsx)(I,v(z({},e),{children:m(e.children)}),String(n))}},36460:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var s=t(24246),o=t(71670),r=t(97555),i=t(61132);const a={description:"Customize your site's appearance through creating your own theme components"},l="Swizzling",c={id:"swizzling",title:"Swizzling",description:"Customize your site's appearance through creating your own theme components",source:"@site/docs/swizzling.mdx",sourceDirName:".",slug:"/swizzling",permalink:"/docs/swizzling",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/swizzling.mdx",tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1694767701e3,frontMatter:{description:"Customize your site's appearance through creating your own theme components"},sidebar:"docs",previous:{title:"Styling and Layout",permalink:"/docs/styling-layout"},next:{title:"Static Assets",permalink:"/docs/static-assets"}},h={},d=[{value:"Swizzling Process",id:"swizzling-process",level:2},{value:"Overview",id:"overview",level:3},{value:"Ejecting",id:"ejecting",level:3},{value:"Wrapping",id:"wrapping",level:3},{value:"What is safe to swizzle?",id:"what-is-safe-to-swizzle",level:2},{value:"Which component should I swizzle?",id:"which-component-should-i-swizzle",level:2},{value:"Do I need to swizzle?",id:"do-i-need-to-swizzle",level:2},{value:"Wrapping your site with <Root>",id:"wrapper-your-site-with-root",level:2}];function u(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"swizzling",children:"Swizzling"}),"\n",(0,s.jsx)(n.p,{children:"In this section, we will introduce how customization of layout is done in Docusaurus."}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"D\xe9ja vu...?"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This section is similar to ",(0,s.jsx)(n.a,{href:"/docs/styling-layout",children:"Styling and Layout"}),", but this time, we will customize React components themselves, rather than what they look like. We will talk about a central concept in Docusaurus: ",(0,s.jsx)(n.strong,{children:"swizzling"}),", which allows ",(0,s.jsx)(n.strong,{children:"deeper site customizations"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In practice, swizzling permits to ",(0,s.jsx)(n.strong,{children:"swap a theme component with your own implementation"}),", and it comes in 2 patterns:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#ejecting",children:(0,s.jsx)(n.strong,{children:"Ejecting"})}),": creates a ",(0,s.jsx)(n.strong,{children:"copy"})," of the original theme component, which you can fully ",(0,s.jsx)(n.strong,{children:"customize"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#wrapping",children:(0,s.jsx)(n.strong,{children:"Wrapping"})}),": creates a ",(0,s.jsx)(n.strong,{children:"wrapper"})," around the original theme component, which you can ",(0,s.jsx)(n.strong,{children:"enhance"})]}),"\n"]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:"Why is it called swizzling?"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"The name comes from Objective-C and Swift-UI"}),": ",(0,s.jsx)(n.a,{href:"https://pspdfkit.com/blog/2019/swizzling-in-swift/",children:"method swizzling"})," is the process of changing the implementation of an existing selector (method)."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"For Docusaurus, component swizzling means providing an alternative component that takes precedence over the component provided by the theme."})}),(0,s.jsxs)(n.p,{children:["You can think of it as ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Monkey_patch",children:"Monkey Patching"})," for React components, enabling you to override the default implementation. Gatsby has a similar concept called ",(0,s.jsx)(n.a,{href:"https://www.gatsbyjs.com/docs/how-to/plugins-and-themes/shadowing/",children:"theme shadowing"}),"."]}),(0,s.jsxs)(n.p,{children:["To gain a deeper understanding of this, you have to understand ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#theme-aliases",children:"how theme components are resolved"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"swizzling-process",children:"Swizzling Process"}),"\n",(0,s.jsx)(n.h3,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.p,{children:["Docusaurus provides a convenient ",(0,s.jsx)(n.strong,{children:"interactive CLI"})," to swizzle components. You generally only need to remember the following command:"]}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["It will generate a new component in your ",(0,s.jsx)(n.code,{children:"src/theme"})," directory, which should look like this example:"]}),"\n",(0,s.jsxs)(r.Z,{children:[(0,s.jsx)(i.Z,{value:"Ejecting",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/SomeComponent.js"',children:"import React from 'react';\n\nexport default function SomeComponent(props) {\n // You can fully customize this implementation\n // including changing the JSX, CSS and React hooks\n return (\n
\n

Some Component

\n

Some component implementation details

\n
\n );\n}\n"})})}),(0,s.jsx)(i.Z,{value:"Wrapping",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/SomeComponent.js"',children:"import React from 'react';\nimport SomeComponent from '@theme-original/SomeComponent';\n\nexport default function SomeComponentWrapper(props) {\n // You can enhance the original component,\n // including adding extra props or JSX elements around it\n return (\n <>\n \n \n );\n}\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"To get an overview of all the themes and components available to swizzle, run:"}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle -- --list\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle --list\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle --list\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.code,{children:"--help"})," to see all available CLI options, or refer to the reference ",(0,s.jsx)(n.a,{href:"/docs/cli#docusaurus-swizzle",children:"swizzle CLI documentation"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["After swizzling a component, ",(0,s.jsx)(n.strong,{children:"restart your dev server"})," in order for Docusaurus to know about the new component."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Prefer staying on the safe side",type:"warning",children:(0,s.jsxs)(n.p,{children:["Be sure to understand ",(0,s.jsxs)(n.a,{href:"#what-is-safe-to-swizzle",children:["which components are ",(0,s.jsx)(n.strong,{children:"safe to swizzle"})]}),". Some components are ",(0,s.jsx)(n.strong,{children:"internal implementation details"})," of a theme."]})}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"docusaurus swizzle"})," is only an automated way to help you swizzle the component. You can also create the ",(0,s.jsx)(n.code,{children:"src/theme/SomeComponent.js"})," file manually, and Docusaurus will ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#theme-aliases",children:"resolve it"}),". There's no internal magic behind this command!"]})}),"\n",(0,s.jsx)(n.h3,{id:"ejecting",children:"Ejecting"}),"\n",(0,s.jsxs)(n.p,{children:["Ejecting a theme component is the process of ",(0,s.jsx)(n.strong,{children:"creating a copy"})," of the original theme component, which you can ",(0,s.jsx)(n.strong,{children:"fully customize and override"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To eject a theme component, use the swizzle CLI interactively, or with the ",(0,s.jsx)(n.code,{children:"--eject"})," option:"]}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle [theme name] [component name] -- --eject\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle [theme name] [component name] --eject\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle [theme name] [component name] --eject\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"An example:"}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic Footer -- --eject\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic Footer --eject\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic Footer --eject\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["This will copy the current ",(0,s.jsx)(n.code,{children:"
"})," component's implementation to your site's ",(0,s.jsx)(n.code,{children:"src/theme"})," directory. Docusaurus will now use this ",(0,s.jsx)(n.code,{children:"
"})," component copy instead of the original one. You are now free to completely re-implement the ",(0,s.jsx)(n.code,{children:"
"})," component."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/Footer/index.js"',children:"import React from 'react';\n\nexport default function Footer(props) {\n return (\n
\n

This is my custom site footer

\n

And it is very different from the original

\n
\n );\n}\n"})}),"\n",(0,s.jsxs)(n.admonition,{type:"warning",children:[(0,s.jsxs)(n.p,{children:["Ejecting an ",(0,s.jsx)(n.a,{href:"#what-is-safe-to-swizzle",children:(0,s.jsx)(n.strong,{children:"unsafe"})})," component can sometimes lead to copying a large amount of internal code, which you now have to maintain yourself. It can make Docusaurus upgrades more difficult, as you will need to migrate your customizations if the props received or internal theme APIs used have changed."]}),(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:["Prefer ",(0,s.jsx)(n.a,{href:"#wrapping",children:"wrapping"})," whenever possible"]}),": the amount of code to maintain is smaller."]})]}),"\n",(0,s.jsx)(n.admonition,{title:"Re-swizzling",type:"tip",children:(0,s.jsxs)(n.p,{children:["To keep ejected components up-to-date after a Docusaurus upgrade, re-run the eject command and compare the changes with ",(0,s.jsx)(n.code,{children:"git diff"}),". You are also recommended to write a brief comment at the top of the file explaining what changes you have made, so that you could more easily re-apply your changes after re-ejection."]})}),"\n",(0,s.jsx)(n.h3,{id:"wrapping",children:"Wrapping"}),"\n",(0,s.jsxs)(n.p,{children:["Wrapping a theme component is the process of ",(0,s.jsx)(n.strong,{children:"creating a wrapper"})," around the original theme component, which you can ",(0,s.jsx)(n.strong,{children:"enhance"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To wrap a theme component, use the swizzle CLI interactively, or with the ",(0,s.jsx)(n.code,{children:"--wrap"})," option:"]}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle [theme name] [component name] -- --wrap\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle [theme name] [component name] --wrap\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle [theme name] [component name] --wrap\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"An example:"}),"\n",(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic Footer -- --wrap\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic Footer --wrap\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic Footer --wrap\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["This will create a wrapper in your site's ",(0,s.jsx)(n.code,{children:"src/theme"})," directory. Docusaurus will now use the ",(0,s.jsx)(n.code,{children:""})," component instead of the original one. You can now add customizations around the original component."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/Footer/index.js"',children:"import React from 'react';\nimport Footer from '@theme-original/Footer';\n\nexport default function FooterWrapper(props) {\n return (\n <>\n
\n

Extra section

\n

This is an extra section that appears above the original footer

\n
\n
\n \n );\n}\n"})}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsxs)("summary",{children:["What is this ",(0,s.jsx)("code",{children:"@theme-original"})," thing?"]}),(0,s.jsxs)(n.p,{children:["Docusaurus uses ",(0,s.jsx)(n.a,{href:"/docs/advanced/client#theme-aliases",children:"theme aliases"})," to resolve the theme components to use. The newly created wrapper takes the ",(0,s.jsx)(n.code,{children:"@theme/SomeComponent"})," alias. ",(0,s.jsx)(n.code,{children:"@theme-original/SomeComponent"})," permits to import original component that the wrapper shadows without creating an infinite import loop where the wrapper imports itself."]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["Wrapping a theme is a great way to ",(0,s.jsx)(n.strong,{children:"add extra components around existing one"})," without ",(0,s.jsx)(n.a,{href:"#ejecting",children:"ejecting"})," it. For example, you can easily add a custom comment system under each blog post:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-jsx",metastring:'title="src/theme/BlogPostItem.js"',children:"import React from 'react';\nimport BlogPostItem from '@theme-original/BlogPostItem';\nimport MyCustomCommentSystem from '@site/src/MyCustomCommentSystem';\n\nexport default function BlogPostItemWrapper(props) {\n return (\n <>\n \n \n \n );\n}\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"what-is-safe-to-swizzle",children:"What is safe to swizzle?"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"With great power comes great responsibility"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Some theme components are ",(0,s.jsx)(n.strong,{children:"internal implementation details"})," of a theme. Docusaurus allows you to swizzle them, but it ",(0,s.jsx)(n.strong,{children:"might be risky"}),"."]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:"Why is it risky?"}),(0,s.jsxs)(n.p,{children:["Theme authors (including us) might have to update their theme over time: changing the component props, name, file system location, types... For example, consider a component that receives two props ",(0,s.jsx)(n.code,{children:"name"})," and ",(0,s.jsx)(n.code,{children:"age"}),", but after a refactor, it now receives a ",(0,s.jsx)(n.code,{children:"person"})," prop with the above two properties. Your component, which still expects these two props, will render ",(0,s.jsx)(n.code,{children:"undefined"})," instead."]}),(0,s.jsxs)(n.p,{children:["Moreover, internal components may simply disappear. If a component is called ",(0,s.jsx)(n.code,{children:"Sidebar"})," and it's later renamed to ",(0,s.jsx)(n.code,{children:"DocSidebar"}),", your swizzled component will be completely ignored."]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Theme components marked as unsafe may change in a backward-incompatible way between theme minor versions."})," When upgrading a theme (or Docusaurus), your customizations might ",(0,s.jsx)(n.strong,{children:"behave unexpectedly"}),", and can even ",(0,s.jsx)(n.strong,{children:"break your site"}),"."]})]}),"\n",(0,s.jsxs)(n.p,{children:["For each theme component, the swizzle CLI will indicate ",(0,s.jsx)(n.strong,{children:"3 different levels of safety"})," declared by theme authors:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Safe"}),": this component is safe to be swizzled, its public API is considered stable, and no breaking changes should happen within a theme ",(0,s.jsx)(n.strong,{children:"major version"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Unsafe"}),": this component is a theme implementation detail, not safe to be swizzled, and breaking changes might happen within a theme ",(0,s.jsx)(n.strong,{children:"minor version"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Forbidden"}),": the swizzle CLI will prevent you from swizzling this component, because it is not designed to be swizzled at all"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Some components might be safe to wrap, but not safe to eject."})}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Don't be too ",(0,s.jsx)(n.strong,{children:"afraid to swizzle unsafe components"}),": just keep in mind that ",(0,s.jsx)(n.strong,{children:"breaking changes"})," might happen, and you might need to upgrade your customizations manually on minor version upgrades."]})}),"\n",(0,s.jsx)(n.admonition,{title:"Report your use-case",type:"note",children:(0,s.jsxs)(n.p,{children:["If you have a ",(0,s.jsx)(n.strong,{children:"strong use-case for swizzling an unsafe component"}),", please ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:(0,s.jsx)(n.strong,{children:"report it here"})})," and we will work together to find a solution to make it safe."]})}),"\n",(0,s.jsx)(n.h2,{id:"which-component-should-i-swizzle",children:"Which component should I swizzle?"}),"\n",(0,s.jsxs)(n.p,{children:["It is not always clear which component you should swizzle exactly to achieve the desired result. ",(0,s.jsx)(n.code,{children:"@docusaurus/theme-classic"}),", which provides most of the theme components, has about ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-classic/src/theme",children:"100 components"}),"!"]}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["To print an overview of all the ",(0,s.jsx)(n.code,{children:"@docusaurus/theme-classic"})," components:"]}),(0,s.jsxs)(r.Z,{groupId:"npm2yarn",children:[(0,s.jsx)(i.Z,{value:"npm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npm run swizzle @docusaurus/theme-classic -- --list\n"})})}),(0,s.jsx)(i.Z,{value:"yarn",label:"Yarn",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"yarn swizzle @docusaurus/theme-classic --list\n"})})}),(0,s.jsx)(i.Z,{value:"pnpm",label:"pnpm",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pnpm run swizzle @docusaurus/theme-classic --list\n"})})})]})]}),"\n",(0,s.jsx)(n.p,{children:"You can follow these steps to locate the appropriate component to swizzle:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Component description."})," Some components provide a short description, which is a good way to find the right one."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Component name."})," Official theme components are semantically named, so you should be able to infer its function from the name. The swizzle CLI allows you to enter part of a component name to narrow down the available choices. For example, if you run ",(0,s.jsx)(n.code,{children:"yarn swizzle @docusaurus/theme-classic"}),", and enter ",(0,s.jsx)(n.code,{children:"Doc"}),", only the docs-related components will be listed."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Start with a higher-level component."})," Components form a tree with some components importing others. Every route will be associated with one top-level component that the route will render (most of them listed in ",(0,s.jsx)(n.a,{href:"/docs/advanced/routing#routing-in-content-plugins",children:"Routing in content plugins"}),"). For example, all blog post pages have ",(0,s.jsx)(n.code,{children:"@theme/BlogPostPage"})," as the topmost component. You can start with swizzling this component, and then go down the component tree to locate the component that renders just what you are targeting. Don't forget to unswizzle the rest by deleting the files after you've found the correct one, so you don't maintain too many components."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:["Read the ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/tree/main/packages/docusaurus-theme-classic/src/theme",children:"theme source code"})]})," and use search wisely."]}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{title:"Just ask!",type:"tip",children:[(0,s.jsxs)(n.p,{children:["If you still have no idea which component to swizzle to achieve the desired effect, you can reach out for help in one of our ",(0,s.jsx)(n.a,{href:"/community/support",children:"support channels"}),"."]}),(0,s.jsxs)(n.p,{children:["We also want to understand better your fanciest customization use-cases, so please ",(0,s.jsx)(n.a,{href:"https://github.com/facebook/docusaurus/discussions/5468",children:(0,s.jsx)(n.strong,{children:"report them"})}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"do-i-need-to-swizzle",children:"Do I need to swizzle?"}),"\n",(0,s.jsx)(n.p,{children:"Swizzling ultimately means you have to maintain some additional React code that interact with Docusaurus internal APIs. If you can, think about the following alternatives when customizing your site:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Use CSS."})," CSS rules and selectors can often help you achieve a decent degree of customization. Refer to ",(0,s.jsx)(n.a,{href:"/docs/styling-layout",children:"styling and layout"})," for more details."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Use translations."})," It may sound surprising, but translations are ultimately just a way to customize the text labels. For example, if your site's default language is ",(0,s.jsx)(n.code,{children:"en"}),", you can still run ",(0,s.jsx)(n.code,{children:"yarn write-translations -l en"})," and edit the ",(0,s.jsx)(n.code,{children:"code.json"})," emitted. Refer to the ",(0,s.jsx)(n.a,{href:"/docs/i18n/tutorial",children:"i18n tutorial"})," for more details."]}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"The smaller, the better."})," If swizzling is inevitable, prefer to swizzle only the relevant part and maintain as little code on your own as possible. Swizzling a small component often means less risk of ",(0,s.jsx)(n.strong,{children:"breaking changes"})," during upgrade."]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"#wrapping",children:"Wrapping"})," is also a far safer alternative to ",(0,s.jsx)(n.a,{href:"#ejecting",children:"ejecting"}),"."]})]}),"\n",(0,s.jsxs)(n.h2,{id:"wrapper-your-site-with-root",children:["Wrapping your site with ",(0,s.jsx)(n.code,{children:""})]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:""})," component is rendered at the ",(0,s.jsx)(n.strong,{children:"very top"})," of the React tree, above the theme ",(0,s.jsx)(n.code,{children:""}),", and ",(0,s.jsx)(n.strong,{children:"never unmounts"}),". It is the perfect place to add stateful logic that should not be re-initialized across navigations (user authentication status, shopping cart state...)."]}),"\n",(0,s.jsxs)(n.p,{children:["Swizzle it ",(0,s.jsx)(n.strong,{children:"manually"})," by creating a file at ",(0,s.jsx)(n.code,{children:"src/theme/Root.js"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="src/theme/Root.js"',children:"import React from 'react';\n\n// Default implementation, that you can customize\nexport default function Root({children}) {\n return <>{children};\n}\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"Use this component to render React Context providers."})})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},71670:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var s=t(27378);const o={},r=s.createContext(o);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/946bd85a.0e80213e.js b/assets/js/946bd85a.0e80213e.js new file mode 100644 index 0000000000..1c9a1d9dcc --- /dev/null +++ b/assets/js/946bd85a.0e80213e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40616],{22488:(e,a,n)=>{n.d(a,{Z:()=>g});var l=n(24246),t=n(27378);const s=e=>"boolean"==typeof e||e instanceof Boolean,o=e=>"number"==typeof e||e instanceof Number,c=e=>"bigint"==typeof e||e instanceof BigInt,r=e=>!!e&&e instanceof Date,i=e=>"string"==typeof e||e instanceof String,u=e=>Array.isArray(e),d=e=>e instanceof Object&&null!==e;function m(e){let{field:a,value:n,data:l,lastElement:s,openBracket:o,closeBracket:c,level:r,style:i,shouldExpandNode:u}=e;const d=(0,t.useRef)(!1),[m,p,_]=function(e){const[a,n]=(0,t.useState)(e());return[a,()=>n((e=>!e)),n]}((()=>u(r,n,a)));(0,t.useEffect)((()=>{d.current?_(u(r,n,a)):d.current=!0}),[u]);const h=m?i.collapseIcon:i.expandIcon,x=m?"collapse JSON":"expand JSON",v=(0,t.useId)(),f=r+1,E=l.length-1,N=e=>{" "===e.key&&p()};return(0,t.createElement)("div",{className:i.basicChildStyle,role:"list"},(0,t.createElement)("span",{className:h,onClick:p,onKeyDown:N,role:"button",tabIndex:0,"aria-label":x,"aria-expanded":m,"aria-controls":m?v:void 0}),a&&(0,t.createElement)("span",{className:i.label},a,":"),(0,t.createElement)("span",{className:i.punctuation},o),m?(0,t.createElement)("div",{id:v},l.map(((e,a)=>(0,t.createElement)(b,{key:e[0]||a,field:e[0],value:e[1],style:i,lastElement:a===E,level:f,shouldExpandNode:u})))):(0,t.createElement)("span",{className:i.collapsedContent,onClick:p,onKeyDown:N,role:"button",tabIndex:-1,"aria-hidden":!0,"aria-label":x,"aria-expanded":m}),(0,t.createElement)("span",{className:i.punctuation},c),!s&&(0,t.createElement)("span",{className:i.punctuation},","))}function p(e){let{field:a,value:n,style:l,lastElement:t,shouldExpandNode:s,level:o}=e;return m({field:a,value:n,lastElement:t||!1,level:o,openBracket:"{",closeBracket:"}",style:l,shouldExpandNode:s,data:Object.keys(n).map((e=>[e,n[e]]))})}function _(e){let{field:a,value:n,style:l,lastElement:t,level:s,shouldExpandNode:o}=e;return m({field:a,value:n,lastElement:t||!1,level:s,openBracket:"[",closeBracket:"]",style:l,shouldExpandNode:o,data:n.map((e=>[void 0,e]))})}function h(e){let{field:a,value:n,style:l,lastElement:u}=e,d=n,m=l.otherValue;return null===n?(d="null",m=l.nullValue):void 0===n?(d="undefined",m=l.undefinedValue):i(n)?(d=`"${n}"`,m=l.stringValue):s(n)?(d=n?"true":"false",m=l.booleanValue):o(n)?(d=n.toString(),m=l.numberValue):c(n)?(d=`${n.toString()}n`,m=l.numberValue):d=r(n)?n.toISOString():n.toString(),""===a&&(a='""'),(0,t.createElement)("div",{className:l.basicChildStyle,role:"listitem"},a&&(0,t.createElement)("span",{className:l.label},a,":"),(0,t.createElement)("span",{className:m},d),!u&&(0,t.createElement)("span",{className:l.punctuation},","))}function b(e){const a=e.value;return u(a)?(0,t.createElement)(_,Object.assign({},e)):d(a)&&!r(a)?(0,t.createElement)(p,Object.assign({},e)):(0,t.createElement)(h,Object.assign({},e))}var x="_2bkNM";const v={container:"_2IvMF _GzYRV",basicChildStyle:x,label:"_1MGIk",nullValue:"_2T6PJ",undefinedValue:"_1Gho6",stringValue:"_vGjyY",booleanValue:"_3zQKs",numberValue:"_1bQdo",otherValue:"_1xvuR",punctuation:"_3uHL6 _3eOF8",collapseIcon:"_oLqym _f10Tu _1MFti _1LId0",expandIcon:"_2AXVT _f10Tu _1MFti _1UmXx",collapsedContent:"_2KJWg _1pNG9 _1MFti"},f=()=>!0,E=e=>{let{data:a,style:n=v,shouldExpandNode:l=f}=e;return(0,t.createElement)("div",{className:n.container},(0,t.createElement)(b,{value:a,style:n,lastElement:!0,level:0,shouldExpandNode:l}))},N={container:"containerParaiso_TYa3",basicChildStyle:"basicElementParaiso_DqvR",label:"labelParaiso_l3ql",nullValue:"nullValueParaiso_Ey4X",undefinedValue:"undefinedValueParaiso__T3e",stringValue:"stringValueParaiso_T6i7",booleanValue:"booleanValueParaiso__TSh",numberValue:"numberValueParaiso_JGW0",otherValue:"otherValueParaiso_nnwW",punctuation:"punctuationParaiso_knwc",collapseIcon:"collapseIconParaiso_MWEp",expandIcon:"expandIconParaiso_fAkX",collapsedContent:"collapseContentParaiso_KH36"};function g({src:e,collapseDepth:a}){return(0,l.jsx)(E,{data:e,shouldExpandNode:(e,n)=>Array.isArray(n)?n.length<5:void 0!==a&&e{n.d(a,{Z:()=>r});var l=n(24246),t=(n(27378),n(97134)),s=n(41428);const o={container:"container_tECh",nav:"nav_sWk6",navlink:"navlink__gTJ",active:"active_Uuwz"};function c({to:e,children:a}){return(0,l.jsx)(s.Z,{className:o.navlink,isNavLink:!0,to:e,exact:!0,activeStyle:{backgroundColor:"#363739"},children:a})}function r({children:e}){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(t.Z,{children:[(0,l.jsx)("html",{lang:"en"}),(0,l.jsx)("title",{children:"Docusaurus debug panel"}),(0,l.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("nav",{className:o.nav,children:[(0,l.jsx)(c,{to:"/__docusaurus/debug",children:"Config"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/metadata",children:"Metadata"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/registry",children:"Registry"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/routes",children:"Routes"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/content",children:"Content"}),(0,l.jsx)(c,{to:"/__docusaurus/debug/globalData",children:"Global data"})]}),(0,l.jsx)("main",{className:o.container,children:e})]})]})}},46749:(e,a,n)=>{n.r(a),n.d(a,{default:()=>r});var l=n(24246),t=(n(27378),n(98111)),s=n(93127),o=n(22488);const c={listItem:"listItem_zpSX",route:"route_X3At",routeName:"routeName_j49z"};function r(){return(0,l.jsxs)(s.Z,{children:[(0,l.jsx)("h2",{children:"Routes"}),(0,l.jsx)("ul",{className:"clean-list",children:t.Z.map((({path:e,exact:a,routes:n})=>(0,l.jsxs)("li",{className:c.listItem,children:[(0,l.jsx)("div",{className:c.route,children:(0,l.jsx)("code",{className:c.routeName,children:e})}),(0,l.jsxs)("div",{children:["Is exact: ",(0,l.jsx)("code",{children:String(Boolean(a))})]}),n&&(0,l.jsxs)("div",{children:["Child Routes:",(0,l.jsx)(o.Z,{src:n})]})]},e)))})]})}}}]); \ No newline at end of file diff --git a/assets/js/94744769.b5f3828f.js b/assets/js/94744769.b5f3828f.js new file mode 100644 index 0000000000..ec3edae22a --- /dev/null +++ b/assets/js/94744769.b5f3828f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[30808],{9058:(e,r,n)=>{n.r(r),n.d(r,{default:()=>c});var s=n(24246),a=(n(27378),n(71132)),t=n(88613),o=n(52615),i=n(3818);function c(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.Z,{children:"Crash outside layout"}),(0,s.jsx)(t.Z,{children:(0,s.jsxs)("main",{className:"container margin-vert--xl",children:[(0,s.jsx)(o.Z,{as:"h1",children:"Error boundary tests"}),(0,s.jsx)("div",{children:(0,s.jsx)(i.Z,{children:"Crash inside layout"})}),(0,s.jsx)(a.Z,{values:{foo:(0,s.jsx)("span",{children:"FooFoo"}),bar:(0,s.jsx)("b",{children:"BarBar"})},children:"{foo} is {bar}"})]})})]})}},3818:(e,r,n)=>{n.d(r,{Z:()=>t});var s=n(24246),a=n(27378);function t({children:e="Boom!",message:r="Boom!\nSomething bad happened, but you can try again!",cause:n}){const[t,o]=(0,a.useState)(!1);if(t)throw new Error(r,{cause:n?new Error(n):void 0});return(0,s.jsx)("button",{className:"button button--danger",type:"button",onClick:()=>o(!0),children:e})}}}]); \ No newline at end of file diff --git a/assets/js/94e448d6.70a3d311.js b/assets/js/94e448d6.70a3d311.js new file mode 100644 index 0000000000..5a9935df30 --- /dev/null +++ b/assets/js/94e448d6.70a3d311.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[96219],{73687:(r,t,e)=>{e.r(t),e.d(t,{default:()=>u});var n=e(24246),s=(e(27378),e(4423)),c=e(88613);function o(){try{!function(){throw new Error("Boom root")}()}catch(r){throw new Error("Boom parent",{cause:r})}}function i(){const r=function(){const{siteConfig:{customFields:r}}=(0,s.Z)();var t;return null!==(t=r.crashTest)&&void 0!==t&&t}();return(0,n.jsx)(n.Fragment,{children:r&&o()})}function u(){return(0,n.jsxs)(c.Z,{children:[(0,n.jsx)("h1",{children:"This crash if customFields.crashTest = true"}),(0,n.jsx)(i,{})]})}}}]); \ No newline at end of file diff --git a/assets/js/94f305e3.35259e4c.js b/assets/js/94f305e3.35259e4c.js new file mode 100644 index 0000000000..a34b6dec97 --- /dev/null +++ b/assets/js/94f305e3.35259e4c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[31528],{43686:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>g,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-04-10T20:00"},s="V2 Changelog",c={permalink:"/changelog/V2 Changelog",source:"@site/changelog/source/V2 Changelog.md",title:"V2 Changelog",description:"siteConfig.js changes",date:"2019-04-10T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-04-10T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.19",permalink:"/changelog/2.0.0-alpha.19"},listPageLink:"/changelog/page/5"},i={authorsImageUrls:[]},l=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9500.95c15580.js b/assets/js/9500.95c15580.js new file mode 100644 index 0000000000..cfa01e958b --- /dev/null +++ b/assets/js/9500.95c15580.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9500],{9500:(n,e,t)=>{t.d(e,{bK:()=>Me});var r=t(46188),o=t(63345),i=t(88103),u=t(2977),a=t(94605),c=t(27206),s=t(1110),f=t(88472);class d{constructor(){var n={};n._next=n._prev=n,this._sentinel=n}dequeue(){var n=this._sentinel,e=n._prev;if(e!==n)return h(e),e}enqueue(n){var e=this._sentinel;n._prev&&n._next&&h(n),n._next=e._next,e._next._prev=n,e._next=n,n._prev=e}toString(){for(var n=[],e=this._sentinel,t=e._prev;t!==e;)n.push(JSON.stringify(t,v)),t=t._prev;return"["+n.join(", ")+"]"}}function h(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function v(n,e){if("_next"!==n&&"_prev"!==n)return e}var l=u.Z(1);function Z(n,e){if(n.nodeCount()<=1)return[];var t=function(n,e){var t=new f.k,o=0,i=0;r.Z(n.nodes(),(function(n){t.setNode(n,{v:n,in:0,out:0})})),r.Z(n.edges(),(function(n){var r=t.edge(n.v,n.w)||0,u=e(n),a=r+u;t.setEdge(n.v,n.w,a),i=Math.max(i,t.node(n.v).out+=u),o=Math.max(o,t.node(n.w).in+=u)}));var u=s.Z(i+o+3).map((function(){return new d})),a=o+1;return r.Z(t.nodes(),(function(n){p(u,a,t.node(n))})),{graph:t,buckets:u,zeroIdx:a}}(n,e||l),o=function(n,e,t){var r,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;r=u.dequeue();)g(n,e,t,r);for(;r=i.dequeue();)g(n,e,t,r);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(r=e[a].dequeue()){o=o.concat(g(n,e,t,r,!0));break}}return o}(t.graph,t.buckets,t.zeroIdx);return a.Z(c.Z(o,(function(e){return n.outEdges(e.v,e.w)})))}function g(n,e,t,o,i){var u=i?[]:void 0;return r.Z(n.inEdges(o.v),(function(r){var o=n.edge(r),a=n.node(r.v);i&&u.push({v:r.v,w:r.w}),a.out-=o,p(e,t,a)})),r.Z(n.outEdges(o.v),(function(r){var o=n.edge(r),i=r.w,u=n.node(i);u.in-=o,p(e,t,u)})),n.removeNode(o.v),u}function p(n,e,t){t.out?t.in?n[t.out-t.in+e].enqueue(t):n[n.length-1].enqueue(t):n[0].enqueue(t)}function b(n){var e="greedy"===n.graph().acyclicer?Z(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],t={},o={};function u(a){i.Z(o,a)||(o[a]=!0,t[a]=!0,r.Z(n.outEdges(a),(function(n){i.Z(t,n.w)?e.push(n):u(n.w)})),delete t[a])}return r.Z(n.nodes(),u),e}(n);r.Z(e,(function(e){var t=n.edge(e);n.removeEdge(e),t.forwardName=e.name,t.reversed=!0,n.setEdge(e.w,e.v,t,o.Z("rev"))}))}var w=t(62320),m=t(25541),y=t(65029),_=t(54878);const E=function(n,e,t){for(var r=-1,o=n.length;++re};var k=t(84111);const x=function(n){return n&&n.length?E(n,k.Z,j):void 0};const N=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var I=t(10541),C=t(51877),O=t(90510);const L=function(n,e){var t={};return e=(0,O.Z)(e,3),(0,C.Z)(n,(function(n,r,o){(0,I.Z)(t,r,e(n,r,o))})),t};var M=t(6524);const A=function(n,e){return nMath.abs(u)*s?(a<0&&(s=-s),t=s*u/a,r=s):(u<0&&(c=-c),t=c,r=c*a/u),{x:o+t,y:i+r}}function B(n){var e=c.Z(s.Z(V(n)+1),(function(){return[]}));return r.Z(n.nodes(),(function(t){var r=n.node(t),o=r.rank;M.Z(o)||(e[o][r.order]=t)})),e}function G(n,e,t,r){var o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=r),T(n,"border",o,e)}function V(n){return x(c.Z(n.nodes(),(function(e){var t=n.node(e).rank;if(!M.Z(t))return t})))}function z(n,e){var t=P();try{return e()}finally{console.log(n+" time: "+(P()-t)+"ms")}}function q(n,e){return e()}function U(n,e,t,r,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],c=T(n,"border",u,t);o[e][i]=c,n.setParent(c,r),a&&n.setEdge(a,c,{weight:1})}function Y(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){r.Z(n.nodes(),(function(e){K(n.node(e))})),r.Z(n.edges(),(function(e){var t=n.edge(e);r.Z(t.points,K),i.Z(t,"y")&&K(t)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){r.Z(n.nodes(),(function(e){W(n.node(e))})),r.Z(n.edges(),(function(e){var t=n.edge(e);r.Z(t.points,W),i.Z(t,"x")&&W(t)}))}(n),$(n))}function $(n){r.Z(n.nodes(),(function(e){J(n.node(e))})),r.Z(n.edges(),(function(e){J(n.edge(e))}))}function J(n){var e=n.width;n.width=n.height,n.height=e}function K(n){n.y=-n.y}function W(n){var e=n.x;n.x=n.y,n.y=e}function H(n){n.graph().dummyChains=[],r.Z(n.edges(),(function(e){!function(n,e){var t,r,o,i=e.v,u=n.node(i).rank,a=e.w,c=n.node(a).rank,s=e.name,f=n.edge(e),d=f.labelRank;if(c===u+1)return;for(n.removeEdge(e),o=0,++u;u-1?o[i?e[u]:u]:void 0}};var sn=t(78953),fn=t(26460);const dn=function(n){var e=(0,fn.Z)(n),t=e%1;return e==e?t?e-t:e:0};var hn=Math.max;const vn=cn((function(n,e,t){var r=null==n?0:n.length;if(!r)return-1;var o=null==t?0:dn(t);return o<0&&(o=hn(r+o,0)),(0,sn.Z)(n,(0,O.Z)(e,3),o)}));var ln=t(88205);u.Z(1);u.Z(1);t(58410),t(68023),t(97640);var Zn=t(47838);t(18742);(0,t(32965).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var gn="\\ud800-\\udfff",pn="["+gn+"]",bn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",wn="\\ud83c[\\udffb-\\udfff]",mn="[^"+gn+"]",yn="(?:\\ud83c[\\udde6-\\uddff]){2}",_n="[\\ud800-\\udbff][\\udc00-\\udfff]",En="(?:"+bn+"|"+wn+")"+"?",jn="[\\ufe0e\\ufe0f]?",kn=jn+En+("(?:\\u200d(?:"+[mn,yn,_n].join("|")+")"+jn+En+")*"),xn="(?:"+[mn+bn+"?",bn,yn,_n,pn].join("|")+")";RegExp(wn+"(?="+wn+")|"+xn+kn,"g");function Nn(){}function In(n,e,t){Zn.Z(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return r.Z(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Cn(n,e,"post"===t,u,o,i)})),i}function Cn(n,e,t,o,u,a){i.Z(o,e)||(o[e]=!0,t||a.push(e),r.Z(u(e),(function(e){Cn(n,e,t,o,u,a)})),t&&a.push(e))}Nn.prototype=new Error;t(96635);function On(n){n=function(n){var e=(new f.k).setGraph(n.graph());return r.Z(n.nodes(),(function(t){e.setNode(t,n.node(t))})),r.Z(n.edges(),(function(t){var r=e.edge(t.v,t.w)||{weight:0,minlen:1},o=n.edge(t);e.setEdge(t.v,t.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})})),e}(n),X(n);var e,t=en(n);for(An(t),Ln(t,n);e=Sn(t);)Tn(t,n,e,Pn(t,n,e))}function Ln(n,e){var t=function(n,e){return In(n,e,"post")}(n,n.nodes());t=t.slice(0,t.length-1),r.Z(t,(function(t){!function(n,e,t){var r=n.node(t),o=r.parent;n.edge(t,o).cutvalue=Mn(n,e,t)}(n,e,t)}))}function Mn(n,e,t){var o=n.node(t).parent,i=!0,u=e.edge(t,o),a=0;return u||(i=!1,u=e.edge(o,t)),a=u.weight,r.Z(e.nodeEdges(t),(function(r){var u,c,s=r.v===t,f=s?r.w:r.v;if(f!==o){var d=s===i,h=e.edge(r).weight;if(a+=d?h:-h,u=t,c=f,n.hasEdge(u,c)){var v=n.edge(t,f).cutvalue;a+=d?-v:v}}})),a}function An(n,e){arguments.length<2&&(e=n.nodes()[0]),Rn(n,{},1,e)}function Rn(n,e,t,o,u){var a=t,c=n.node(o);return e[o]=!0,r.Z(n.neighbors(o),(function(r){i.Z(e,r)||(t=Rn(n,e,t,r,o))})),c.low=a,c.lim=t++,u?c.parent=u:delete c.parent,t}function Sn(n){return vn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function Pn(n,e,t){var r=t.v,o=t.w;e.hasEdge(r,o)||(r=t.w,o=t.v);var i=n.node(r),u=n.node(o),a=i,c=!1;i.lim>u.lim&&(a=u,c=!0);var s=ln.Z(e.edges(),(function(e){return c===Fn(n,n.node(e.v),a)&&c!==Fn(n,n.node(e.w),a)}));return Q(s,(function(n){return nn(e,n)}))}function Tn(n,e,t,o){var i=t.v,u=t.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),An(n),Ln(n,e),function(n,e){var t=vn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return In(n,e,"pre")}(n,t);o=o.slice(1),r.Z(o,(function(t){var r=n.node(t).parent,o=e.edge(t,r),i=!1;o||(o=e.edge(r,t),i=!0),e.node(t).rank=e.node(r).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function Fn(n,e,t){return t.low<=e.lim&&e.lim<=t.lim}function Dn(n){switch(n.graph().ranker){case"network-simplex":default:Gn(n);break;case"tight-tree":!function(n){X(n),en(n)}(n);break;case"longest-path":Bn(n)}}On.initLowLimValues=An,On.initCutValues=Ln,On.calcCutValue=Mn,On.leaveEdge=Sn,On.enterEdge=Pn,On.exchangeEdges=Tn;var Bn=X;function Gn(n){On(n)}var Vn=t(95179),zn=t(54632);function qn(n){var e=T(n,"root",{},"_root"),t=function(n){var e={};function t(o,i){var u=n.children(o);u&&u.length&&r.Z(u,(function(n){t(n,i+1)})),e[o]=i}return r.Z(n.children(),(function(n){t(n,1)})),e}(n),o=x(Vn.Z(t))-1,i=2*o+1;n.graph().nestingRoot=e,r.Z(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return zn.Z(n.edges(),(function(e,t){return e+n.edge(t).weight}),0)}(n)+1;r.Z(n.children(),(function(r){Un(n,e,i,u,o,t,r)})),n.graph().nodeRankFactor=i}function Un(n,e,t,o,i,u,a){var c=n.children(a);if(c.length){var s=G(n,"_bt"),f=G(n,"_bb"),d=n.node(a);n.setParent(s,a),d.borderTop=s,n.setParent(f,a),d.borderBottom=f,r.Z(c,(function(r){Un(n,e,t,o,i,u,r);var c=n.node(r),d=c.borderTop?c.borderTop:r,h=c.borderBottom?c.borderBottom:r,v=c.borderTop?o:2*o,l=d!==h?1:i-u[a]+1;n.setEdge(s,d,{weight:v,minlen:l,nestingEdge:!0}),n.setEdge(h,f,{weight:v,minlen:l,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,s,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:t})}var Yn=t(31066);const $n=function(n){return(0,Yn.Z)(n,5)};function Jn(n,e,t){var u=function(n){var e;for(;n.hasNode(e=o.Z("_root")););return e}(n),a=new f.k({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return r.Z(n.nodes(),(function(o){var c=n.node(o),s=n.parent(o);(c.rank===e||c.minRank<=e&&e<=c.maxRank)&&(a.setNode(o),a.setParent(o,s||u),r.Z(n[t](o),(function(e){var t=e.v===o?e.w:e.v,r=a.edge(t,o),i=M.Z(r)?0:r.weight;a.setEdge(t,o,{weight:n.edge(e).weight+i})})),i.Z(c,"minRank")&&a.setNode(o,{borderLeft:c.borderLeft[e],borderRight:c.borderRight[e]}))})),a}var Kn=t(84424);const Wn=function(n,e,t){for(var r=-1,o=n.length,i=e.length,u={};++re||i&&u&&c&&!a&&!s||r&&u&&c||!t&&c||!o)return 1;if(!r&&!i&&!s&&n=a?c:c*("desc"==t[r]?-1:1)}return n.index-e.index};const ue=function(n,e,t){e=e.length?(0,Xn.Z)(e,(function(n){return(0,Zn.Z)(n)?function(e){return(0,ne.Z)(e,1===n.length?n[0]:n)}:n})):[k.Z];var r=-1;e=(0,Xn.Z)(e,(0,re.Z)(O.Z));var o=(0,ee.Z)(n,(function(n,t,o){return{criteria:(0,Xn.Z)(e,(function(e){return e(n)})),index:++r,value:n}}));return te(o,(function(n,e){return ie(n,e,t)}))};var ae=t(92042),ce=t(84264);const se=(0,ae.Z)((function(n,e){if(null==n)return[];var t=e.length;return t>1&&(0,ce.Z)(n,e[0],e[1])?e=[]:t>2&&(0,ce.Z)(e[0],e[1],e[2])&&(e=[e[0]]),ue(n,(0,Qn.Z)(e,1),[])}));function fe(n,e){for(var t=0,r=1;r0;)e%2&&(t+=f[e+1]),f[e=e-1>>1]+=n.weight;d+=n.weight*t}))),d}function he(n,e){var t={};return r.Z(n,(function(n,e){var r=t[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};M.Z(n.barycenter)||(r.barycenter=n.barycenter,r.weight=n.weight)})),r.Z(e.edges(),(function(n){var e=t[n.v],r=t[n.w];M.Z(e)||M.Z(r)||(r.indegree++,e.out.push(t[n.w]))})),function(n){var e=[];function t(n){return function(e){e.merged||(M.Z(e.barycenter)||M.Z(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var t=0,r=0;n.weight&&(t+=n.barycenter*n.weight,r+=n.weight);e.weight&&(t+=e.barycenter*e.weight,r+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=t/r,n.weight=r,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(t){t.in.push(e),0==--t.indegree&&n.push(t)}}for(;n.length;){var i=n.pop();e.push(i),r.Z(i.in.reverse(),t(i)),r.Z(i.out,o(i))}return c.Z(ln.Z(e,(function(n){return!n.merged})),(function(n){return m.Z(n,["vs","i","barycenter","weight"])}))}(ln.Z(t,(function(n){return!n.indegree})))}function ve(n,e){var t,o=function(n,e){var t={lhs:[],rhs:[]};return r.Z(n,(function(n){e(n)?t.lhs.push(n):t.rhs.push(n)})),t}(n,(function(n){return i.Z(n,"barycenter")})),u=o.lhs,c=se(o.rhs,(function(n){return-n.i})),s=[],f=0,d=0,h=0;u.sort((t=!!e,function(n,e){return n.barycentere.barycenter?1:t?e.i-n.i:n.i-e.i})),h=le(s,c,h),r.Z(u,(function(n){h+=n.vs.length,s.push(n.vs),f+=n.barycenter*n.weight,d+=n.weight,h=le(s,c,h)}));var v={vs:a.Z(s)};return d&&(v.barycenter=f/d,v.weight=d),v}function le(n,e,t){for(var r;e.length&&(r=N(e)).i<=t;)e.pop(),n.push(r.vs),t++;return t}function Ze(n,e,t,o){var u=n.children(e),s=n.node(e),f=s?s.borderLeft:void 0,d=s?s.borderRight:void 0,h={};f&&(u=ln.Z(u,(function(n){return n!==f&&n!==d})));var v=function(n,e){return c.Z(e,(function(e){var t=n.inEdges(e);if(t.length){var r=zn.Z(t,(function(e,t){var r=n.edge(t),o=n.node(t.v);return{sum:e.sum+r.weight*o.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}}))}(n,u);r.Z(v,(function(e){if(n.children(e.v).length){var r=Ze(n,e.v,t,o);h[e.v]=r,i.Z(r,"barycenter")&&(u=e,a=r,M.Z(u.barycenter)?(u.barycenter=a.barycenter,u.weight=a.weight):(u.barycenter=(u.barycenter*u.weight+a.barycenter*a.weight)/(u.weight+a.weight),u.weight+=a.weight))}var u,a}));var l=he(v,t);!function(n,e){r.Z(n,(function(n){n.vs=a.Z(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(l,h);var Z=ve(l,o);if(f&&(Z.vs=a.Z([f,Z.vs,d]),n.predecessors(f).length)){var g=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(d)[0]);i.Z(Z,"barycenter")||(Z.barycenter=0,Z.weight=0),Z.barycenter=(Z.barycenter*Z.weight+g.order+p.order)/(Z.weight+2),Z.weight+=2}return Z}function ge(n){var e=V(n),t=pe(n,s.Z(1,e+1),"inEdges"),o=pe(n,s.Z(e-1,-1,-1),"outEdges"),u=function(n){var e={},t=ln.Z(n.nodes(),(function(e){return!n.children(e).length})),o=x(c.Z(t,(function(e){return n.node(e).rank}))),u=c.Z(s.Z(o+1),(function(){return[]})),a=se(t,(function(e){return n.node(e).rank}));return r.Z(a,(function t(o){if(!i.Z(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),r.Z(n.successors(o),t)}})),u}(n);we(n,u);for(var a,f=Number.POSITIVE_INFINITY,d=0,h=0;h<4;++d,++h){be(d%2?t:o,d%4>=2);var v=fe(n,u=B(n));vc||s>e[o].lim));i=o,o=r;for(;(o=n.parent(o))!==i;)a.push(o);return{path:u.concat(a.reverse()),lca:i}}(n,e,o.v,o.w),u=i.path,a=i.lca,c=0,s=u[c],f=!0;t!==o.w;){if(r=n.node(t),f){for(;(s=u[c])!==a&&n.node(s).maxRankt){var r=e;e=t,t=r}var o=n[e];o||(n[e]=o={}),o[t]=!0}function Ie(n,e,t){if(e>t){var r=e;e=t,t=r}return i.Z(n[e],t)}function Ce(n,e,t,o,u){var a={},c=function(n,e,t,o){var u=new f.k,a=n.graph(),c=function(n,e,t){return function(r,o,u){var a,c=r.node(o),s=r.node(u),f=0;if(f+=c.width/2,i.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=-c.width/2;break;case"r":a=c.width/2}if(a&&(f+=t?a:-a),a=0,f+=(c.dummy?e:n)/2,f+=(s.dummy?e:n)/2,f+=s.width/2,i.Z(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":a=s.width/2;break;case"r":a=-s.width/2}return a&&(f+=t?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return r.Z(e,(function(e){var o;r.Z(e,(function(e){var r=t[e];if(u.setNode(r),o){var i=t[o],a=u.edge(i,r);u.setEdge(i,r,Math.max(c(n,e,o),a||0))}o=e}))})),u}(n,e,t,u),s=u?"borderLeft":"borderRight";function d(n,e){for(var t=c.nodes(),r=t.pop(),o={};r;)o[r]?n(r):(o[r]=!0,t.push(r),t=t.concat(e(r))),r=t.pop()}return d((function(n){a[n]=c.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),d((function(e){var t=c.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),r=n.node(e);t!==Number.POSITIVE_INFINITY&&r.borderType!==s&&(a[e]=Math.max(a[e],t))}),c.successors.bind(c)),r.Z(o,(function(n){a[n]=a[t[n]]})),a}function Oe(n){var e,t=B(n),o=w.Z(xe(n,t),function(n,e){var t={};function o(e,o,i,u,a){var c;r.Z(s.Z(o,i),(function(o){c=e[o],n.node(c).dummy&&r.Z(n.predecessors(c),(function(e){var r=n.node(e);r.dummy&&(r.ordera)&&Ne(t,e,c)}))}))}return zn.Z(e,(function(e,t){var i,u=-1,a=0;return r.Z(t,(function(r,c){if("border"===n.node(r).dummy){var s=n.predecessors(r);s.length&&(i=n.node(s[0]).order,o(t,a,c,u,i),a=c,u=i)}o(t,a,t.length,i,e.length)})),t})),t}(n,t)),i={};r.Z(["u","d"],(function(u){e="u"===u?t:Vn.Z(t).reverse(),r.Z(["l","r"],(function(t){"r"===t&&(e=c.Z(e,(function(n){return Vn.Z(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),s=function(n,e,t,o){var i={},u={},a={};return r.Z(e,(function(n){r.Z(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),r.Z(e,(function(n){var e=-1;r.Z(n,(function(n){var r=o(n);if(r.length){r=se(r,(function(n){return a[n]}));for(var c=(r.length-1)/2,s=Math.floor(c),f=Math.ceil(c);s<=f;++s){var d=r[s];u[n]===n&&e{t.d(e,{k:()=>R});var r=t(88103),o=t(2977),i=t(78246),u=t(94778),a=t(88205),c=t(29955),s=t(46188),f=t(6524),d=t(45556),h=t(92042),v=t(58017),l=t(78953);const Z=function(n){return n!=n};const g=function(n,e,t){for(var r=t-1,o=n.length;++r-1};const w=function(n,e,t){for(var r=-1,o=null==n?0:n.length;++r=200){var s=e?null:k(n);if(s)return(0,E.Z)(s);u=!1,o=m.Z,c=new v.Z}else c=e?[]:a;n:for(;++r1?r.setNode(n,e):r.setNode(n)})),this}setNode(n,e){return r.Z(this._nodes,n)?(arguments.length>1&&(this._nodes[n]=e),this):(this._nodes[n]=arguments.length>1?e:this._defaultNodeLabelFn(n),this._isCompound&&(this._parent[n]=M,this._children[n]={},this._children[M][n]=!0),this._in[n]={},this._preds[n]={},this._out[n]={},this._sucs[n]={},++this._nodeCount,this)}node(n){return this._nodes[n]}hasNode(n){return r.Z(this._nodes,n)}removeNode(n){var e=this;if(r.Z(this._nodes,n)){var t=function(n){e.removeEdge(e._edgeObjs[n])};delete this._nodes[n],this._isCompound&&(this._removeFromParentsChildList(n),delete this._parent[n],s.Z(this.children(n),(function(n){e.setParent(n)})),delete this._children[n]),s.Z(u.Z(this._in[n]),t),delete this._in[n],delete this._preds[n],s.Z(u.Z(this._out[n]),t),delete this._out[n],delete this._sucs[n],--this._nodeCount}return this}setParent(n,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.Z(e))e=M;else{for(var t=e+="";!f.Z(t);t=this.parent(t))if(t===n)throw new Error("Setting "+e+" as parent of "+n+" would create a cycle");this.setNode(e)}return this.setNode(n),this._removeFromParentsChildList(n),this._parent[n]=e,this._children[e][n]=!0,this}_removeFromParentsChildList(n){delete this._children[this._parent[n]][n]}parent(n){if(this._isCompound){var e=this._parent[n];if(e!==M)return e}}children(n){if(f.Z(n)&&(n=M),this._isCompound){var e=this._children[n];if(e)return u.Z(e)}else{if(n===M)return this.nodes();if(this.hasNode(n))return[]}}predecessors(n){var e=this._preds[n];if(e)return u.Z(e)}successors(n){var e=this._sucs[n];if(e)return u.Z(e)}neighbors(n){var e=this.predecessors(n);if(e)return I(e,this.successors(n))}isLeaf(n){return 0===(this.isDirected()?this.successors(n):this.neighbors(n)).length}filterNodes(n){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var t=this;s.Z(this._nodes,(function(t,r){n(r)&&e.setNode(r,t)})),s.Z(this._edgeObjs,(function(n){e.hasNode(n.v)&&e.hasNode(n.w)&&e.setEdge(n,t.edge(n))}));var r={};function o(n){var i=t.parent(n);return void 0===i||e.hasNode(i)?(r[n]=i,i):i in r?r[i]:o(i)}return this._isCompound&&s.Z(e.nodes(),(function(n){e.setParent(n,o(n))})),e}setDefaultEdgeLabel(n){return i.Z(n)||(n=o.Z(n)),this._defaultEdgeLabelFn=n,this}edgeCount(){return this._edgeCount}edges(){return C.Z(this._edgeObjs)}setPath(n,e){var t=this,r=arguments;return O.Z(n,(function(n,o){return r.length>1?t.setEdge(n,o,e):t.setEdge(n,o),o})),this}setEdge(){var n,e,t,o,i=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(n=u.v,e=u.w,t=u.name,2===arguments.length&&(o=arguments[1],i=!0)):(n=u,e=arguments[1],t=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),n=""+n,e=""+e,f.Z(t)||(t=""+t);var a=T(this._isDirected,n,e,t);if(r.Z(this._edgeLabels,a))return i&&(this._edgeLabels[a]=o),this;if(!f.Z(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(n),this.setNode(e),this._edgeLabels[a]=i?o:this._defaultEdgeLabelFn(n,e,t);var c=function(n,e,t,r){var o=""+e,i=""+t;if(!n&&o>i){var u=o;o=i,i=u}var a={v:o,w:i};r&&(a.name=r);return a}(this._isDirected,n,e,t);return n=c.v,e=c.w,Object.freeze(c),this._edgeObjs[a]=c,S(this._preds[e],n),S(this._sucs[n],e),this._in[e][a]=c,this._out[n][a]=c,this._edgeCount++,this}edge(n,e,t){var r=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t);return this._edgeLabels[r]}hasEdge(n,e,t){var o=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t);return r.Z(this._edgeLabels,o)}removeEdge(n,e,t){var r=1===arguments.length?F(this._isDirected,arguments[0]):T(this._isDirected,n,e,t),o=this._edgeObjs[r];return o&&(n=o.v,e=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],P(this._preds[e],n),P(this._sucs[n],e),delete this._in[e][r],delete this._out[n][r],this._edgeCount--),this}inEdges(n,e){var t=this._in[n];if(t){var r=C.Z(t);return e?a.Z(r,(function(n){return n.v===e})):r}}outEdges(n,e){var t=this._out[n];if(t){var r=C.Z(t);return e?a.Z(r,(function(n){return n.w===e})):r}}nodeEdges(n,e){var t=this.inEdges(n,e);if(t)return t.concat(this.outEdges(n,e))}}function S(n,e){n[e]?n[e]++:n[e]=1}function P(n,e){--n[e]||delete n[e]}function T(n,e,t,r){var o=""+e,i=""+t;if(!n&&o>i){var u=o;o=i,i=u}return o+A+i+A+(f.Z(r)?L:r)}function F(n,e){return T(n,e.v,e.w,e.name)}R.prototype._nodeCount=0,R.prototype._edgeCount=0},88472:(n,e,t)=>{t.d(e,{k:()=>r.k});var r=t(96635)},58017:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(61056);const o=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this};const i=function(n){return this.__data__.has(n)};function u(n){var e=-1,t=null==n?0:n.length;for(this.__data__=new r.Z;++e{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length;++t{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length,o=0,i=[];++t{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=null==n?0:n.length,o=Array(r);++t{t.d(e,{Z:()=>r});const r=function(n,e){for(var t=-1,r=e.length,o=n.length;++t{t.d(e,{Z:()=>X});var r=t(72178),o=t(62020),i=t(84424),u=t(46518),a=t(94778);const c=function(n,e){return n&&(0,u.Z)(e,(0,a.Z)(e),n)};var s=t(86483);const f=function(n,e){return n&&(0,u.Z)(e,(0,s.Z)(e),n)};var d=t(23999),h=t(98058),v=t(57538);const l=function(n,e){return(0,u.Z)(n,(0,v.Z)(n),e)};var Z=t(37891),g=t(99773),p=t(33464);const b=Object.getOwnPropertySymbols?function(n){for(var e=[];n;)(0,Z.Z)(e,(0,v.Z)(n)),n=(0,g.Z)(n);return e}:p.Z;const w=function(n,e){return(0,u.Z)(n,b(n),e)};var m=t(22879),y=t(65976);const _=function(n){return(0,y.Z)(n,s.Z,b)};var E=t(68023),j=Object.prototype.hasOwnProperty;const k=function(n){var e=n.length,t=new n.constructor(e);return e&&"string"==typeof n[0]&&j.call(n,"index")&&(t.index=n.index,t.input=n.input),t};var x=t(37659);const N=function(n,e){var t=e?(0,x.Z)(n.buffer):n.buffer;return new n.constructor(t,n.byteOffset,n.byteLength)};var I=/\w*$/;const C=function(n){var e=new n.constructor(n.source,I.exec(n));return e.lastIndex=n.lastIndex,e};var O=t(9e3),L=O.Z?O.Z.prototype:void 0,M=L?L.valueOf:void 0;const A=function(n){return M?Object(M.call(n)):{}};var R=t(24763);const S=function(n,e,t){var r=n.constructor;switch(e){case"[object ArrayBuffer]":return(0,x.Z)(n);case"[object Boolean]":case"[object Date]":return new r(+n);case"[object DataView]":return N(n,t);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,R.Z)(n,t);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(n);case"[object RegExp]":return C(n);case"[object Symbol]":return A(n)}};var P=t(33731),T=t(47838),F=t(45633),D=t(18742);const B=function(n){return(0,D.Z)(n)&&"[object Map]"==(0,E.Z)(n)};var G=t(42052),V=t(17433),z=V.Z&&V.Z.isMap;const q=z?(0,G.Z)(z):B;var U=t(80369);const Y=function(n){return(0,D.Z)(n)&&"[object Set]"==(0,E.Z)(n)};var $=V.Z&&V.Z.isSet;const J=$?(0,G.Z)($):Y;var K="[object Arguments]",W="[object Function]",H="[object Object]",Q={};Q[K]=Q["[object Array]"]=Q["[object ArrayBuffer]"]=Q["[object DataView]"]=Q["[object Boolean]"]=Q["[object Date]"]=Q["[object Float32Array]"]=Q["[object Float64Array]"]=Q["[object Int8Array]"]=Q["[object Int16Array]"]=Q["[object Int32Array]"]=Q["[object Map]"]=Q["[object Number]"]=Q[H]=Q["[object RegExp]"]=Q["[object Set]"]=Q["[object String]"]=Q["[object Symbol]"]=Q["[object Uint8Array]"]=Q["[object Uint8ClampedArray]"]=Q["[object Uint16Array]"]=Q["[object Uint32Array]"]=!0,Q["[object Error]"]=Q[W]=Q["[object WeakMap]"]=!1;const X=function n(e,t,u,v,Z,g){var p,b=1&t,y=2&t,j=4&t;if(u&&(p=Z?u(e,v,Z,g):u(e)),void 0!==p)return p;if(!(0,U.Z)(e))return e;var x=(0,T.Z)(e);if(x){if(p=k(e),!b)return(0,h.Z)(e,p)}else{var N=(0,E.Z)(e),I=N==W||"[object GeneratorFunction]"==N;if((0,F.Z)(e))return(0,d.Z)(e,b);if(N==H||N==K||I&&!Z){if(p=y||I?{}:(0,P.Z)(e),!b)return y?w(e,f(p,e)):l(e,c(p,e))}else{if(!Q[N])return Z?e:{};p=S(e,N,b)}}g||(g=new r.Z);var C=g.get(e);if(C)return C;g.set(e,p),J(e)?e.forEach((function(r){p.add(n(r,t,u,r,e,g))})):q(e)&&e.forEach((function(r,o){p.set(o,n(r,t,u,o,e,g))}));var O=j?y?_:m.Z:y?s.Z:a.Z,L=x?void 0:O(e);return(0,o.Z)(L||e,(function(r,o){L&&(r=e[o=r]),(0,i.Z)(p,o,n(r,t,u,o,e,g))})),p}},88015:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(51877),o=t(79458);const i=function(n,e){return function(t,r){if(null==t)return t;if(!(0,o.Z)(t))return n(t,r);for(var i=t.length,u=e?i:-1,a=Object(t);(e?u--:++u{t.d(e,{Z:()=>r});const r=function(n,e,t,r){for(var o=n.length,i=t+(r?1:-1);r?i--:++i{t.d(e,{Z:()=>s});var r=t(37891),o=t(9e3),i=t(5998),u=t(47838),a=o.Z?o.Z.isConcatSpreadable:void 0;const c=function(n){return(0,u.Z)(n)||(0,i.Z)(n)||!!(a&&n&&n[a])};const s=function n(e,t,o,i,u){var a=-1,s=e.length;for(o||(o=c),u||(u=[]);++a0&&o(f)?t>1?n(f,t-1,o,i,u):(0,r.Z)(u,f):i||(u[u.length]=f)}return u}},51877:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(30434),o=t(94778);const i=function(n,e){return n&&(0,r.Z)(n,e,o.Z)}},42825:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(43169),o=t(99316);const i=function(n,e){for(var t=0,i=(e=(0,r.Z)(e,n)).length;null!=n&&t{t.d(e,{Z:()=>i});var r=t(37891),o=t(47838);const i=function(n,e,t){var i=e(n);return(0,o.Z)(n)?i:(0,r.Z)(i,t(n))}},90510:(n,e,t)=>{t.d(e,{Z:()=>$});var r=t(72178),o=t(58017);const i=function(n,e){for(var t=-1,r=null==n?0:n.length;++tf))return!1;var h=c.get(n),v=c.get(e);if(h&&v)return h==e&&v==n;var l=-1,Z=!0,g=2&t?new o.Z:void 0;for(c.set(n,e),c.set(e,n);++l{t.d(e,{Z:()=>i});var r=t(88015),o=t(79458);const i=function(n,e){var t=-1,i=(0,o.Z)(n)?Array(n.length):[];return(0,r.Z)(n,(function(n,r,o){i[++t]=e(n,r,o)})),i}},32965:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return function(e){return null==e?void 0:e[n]}}},58923:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n,e){return n.has(e)}},22412:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(84111);const o=function(n){return"function"==typeof n?n:r.Z}},43169:(n,e,t)=>{t.d(e,{Z:()=>f});var r=t(47838),o=t(67990),i=t(77397);var u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g;const c=function(n){var e=(0,i.Z)(n,(function(n){return 500===t.size&&t.clear(),n})),t=e.cache;return e}((function(n){var e=[];return 46===n.charCodeAt(0)&&e.push(""),n.replace(u,(function(n,t,r,o){e.push(r?o.replace(a,"$1"):t||n)})),e}));var s=t(59457);const f=function(n,e){return(0,r.Z)(n)?n:(0,o.Z)(n,e)?[n]:c((0,s.Z)(n))}},22879:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(65976),o=t(57538),i=t(94778);const u=function(n){return(0,r.Z)(n,i.Z,o.Z)}},57538:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(69878),o=t(33464),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols;const a=u?function(n){return null==n?[]:(n=Object(n),(0,r.Z)(u(n),(function(e){return i.call(n,e)})))}:o.Z},95942:(n,e,t)=>{t.d(e,{Z:()=>s});var r=t(43169),o=t(5998),i=t(47838),u=t(62916),a=t(7614),c=t(99316);const s=function(n,e,t){for(var s=-1,f=(e=(0,r.Z)(e,n)).length,d=!1;++s{t.d(e,{Z:()=>a});var r=t(47838),o=t(54878),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;const a=function(n,e){if((0,r.Z)(n))return!1;var t=typeof n;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=n&&!(0,o.Z)(n))||(u.test(n)||!i.test(n)||null!=e&&n in Object(e))}},80877:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){var e=-1,t=Array(n.size);return n.forEach((function(n){t[++e]=n})),t}},99316:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(54878);const o=function(n){if("string"==typeof n||(0,r.Z)(n))return n;var e=n+"";return"0"==e&&1/n==-Infinity?"-0":e}},65029:(n,e,t)=>{t.d(e,{Z:()=>s});var r=t(92042),o=t(28916),i=t(84264),u=t(86483),a=Object.prototype,c=a.hasOwnProperty;const s=(0,r.Z)((function(n,e){n=Object(n);var t=-1,r=e.length,s=r>2?e[2]:void 0;for(s&&(0,i.Z)(e[0],e[1],s)&&(r=1);++t{t.d(e,{Z:()=>c});var r=t(69878),o=t(88015);const i=function(n,e){var t=[];return(0,o.Z)(n,(function(n,r,o){e(n,r,o)&&t.push(n)})),t};var u=t(90510),a=t(47838);const c=function(n,e){return((0,a.Z)(n)?r.Z:i)(n,(0,u.Z)(e,3))}},94605:(n,e,t)=>{t.d(e,{Z:()=>o});var r=t(45556);const o=function(n){return(null==n?0:n.length)?(0,r.Z)(n,1):[]}},46188:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(62020),o=t(88015),i=t(22412),u=t(47838);const a=function(n,e){return((0,u.Z)(n)?r.Z:o.Z)(n,(0,i.Z)(e))}},88103:(n,e,t)=>{t.d(e,{Z:()=>u});var r=Object.prototype.hasOwnProperty;const o=function(n,e){return null!=n&&r.call(n,e)};var i=t(95942);const u=function(n,e){return null!=n&&(0,i.Z)(n,e,o)}},23072:(n,e,t)=>{t.d(e,{Z:()=>i});const r=function(n,e){return null!=n&&e in Object(n)};var o=t(95942);const i=function(n,e){return null!=n&&(0,o.Z)(n,e,r)}},54878:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(97640),o=t(18742);const i=function(n){return"symbol"==typeof n||(0,o.Z)(n)&&"[object Symbol]"==(0,r.Z)(n)}},6524:(n,e,t)=>{t.d(e,{Z:()=>r});const r=function(n){return void 0===n}},94778:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(9852),o=t(58410),i=t(79458);const u=function(n){return(0,i.Z)(n)?(0,r.Z)(n):(0,o.Z)(n)}},27206:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(43668),o=t(90510),i=t(46133),u=t(47838);const a=function(n,e){return((0,u.Z)(n)?r.Z:i.Z)(n,(0,o.Z)(e,3))}},25541:(n,e,t)=>{t.d(e,{Z:()=>g});var r=t(42825),o=t(84424),i=t(43169),u=t(62916),a=t(80369),c=t(99316);const s=function(n,e,t,r){if(!(0,a.Z)(n))return n;for(var s=-1,f=(e=(0,i.Z)(e,n)).length,d=f-1,h=n;null!=h&&++s{t.d(e,{Z:()=>c});var r=Math.ceil,o=Math.max;const i=function(n,e,t,i){for(var u=-1,a=o(r((e-n)/(t||1)),0),c=Array(a);a--;)c[i?a:++u]=n,n+=t;return c};var u=t(84264),a=t(26460);const c=function(n){return function(e,t,r){return r&&"number"!=typeof r&&(0,u.Z)(e,t,r)&&(t=r=void 0),e=(0,a.Z)(e),void 0===t?(t=e,e=0):t=(0,a.Z)(t),r=void 0===r?e{t.d(e,{Z:()=>c});const r=function(n,e,t,r){var o=-1,i=null==n?0:n.length;for(r&&i&&(t=n[++o]);++o{t.d(e,{Z:()=>r});const r=function(){return[]}},26460:(n,e,t)=>{t.d(e,{Z:()=>Z});var r=/\s/;const o=function(n){for(var e=n.length;e--&&r.test(n.charAt(e)););return e};var i=/^\s+/;const u=function(n){return n?n.slice(0,o(n)+1).replace(i,""):n};var a=t(80369),c=t(54878),s=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,d=/^0o[0-7]+$/i,h=parseInt;const v=function(n){if("number"==typeof n)return n;if((0,c.Z)(n))return NaN;if((0,a.Z)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.Z)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var t=f.test(n);return t||d.test(n)?h(n.slice(2),t?2:8):s.test(n)?NaN:+n};var l=1/0;const Z=function(n){return n?(n=v(n))===l||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},59457:(n,e,t)=>{t.d(e,{Z:()=>f});var r=t(9e3),o=t(43668),i=t(47838),u=t(54878),a=r.Z?r.Z.prototype:void 0,c=a?a.toString:void 0;const s=function n(e){if("string"==typeof e)return e;if((0,i.Z)(e))return(0,o.Z)(e,n)+"";if((0,u.Z)(e))return c?c.call(e):"";var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t};const f=function(n){return null==n?"":s(n)}},63345:(n,e,t)=>{t.d(e,{Z:()=>i});var r=t(59457),o=0;const i=function(n){var e=++o;return(0,r.Z)(n)+e}},95179:(n,e,t)=>{t.d(e,{Z:()=>u});var r=t(43668);const o=function(n,e){return(0,r.Z)(e,(function(e){return n[e]}))};var i=t(94778);const u=function(n){return null==n?[]:o(n,(0,i.Z)(n))}}}]); \ No newline at end of file diff --git a/assets/js/951faa55.7dbfdd3a.js b/assets/js/951faa55.7dbfdd3a.js new file mode 100644 index 0000000000..debbbbaa98 --- /dev/null +++ b/assets/js/951faa55.7dbfdd3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[79403],{56923:l=>{l.exports=JSON.parse('{"title":"Changelog","items":[{"title":"3.2.1","permalink":"/changelog/3.2.1","unlisted":false},{"title":"3.2.0","permalink":"/changelog/3.2.0","unlisted":false},{"title":"3.1.1","permalink":"/changelog/3.1.1","unlisted":false},{"title":"3.1.0","permalink":"/changelog/3.1.0","unlisted":false},{"title":"3.0.1","permalink":"/changelog/3.0.1","unlisted":false},{"title":"3.0.0","permalink":"/changelog/3.0.0","unlisted":false},{"title":"2.4.3","permalink":"/changelog/2.4.3","unlisted":false},{"title":"2.4.2","permalink":"/changelog/2.4.2","unlisted":false},{"title":"2.4.1","permalink":"/changelog/2.4.1","unlisted":false},{"title":"2.4.0","permalink":"/changelog/2.4.0","unlisted":false},{"title":"2.3.1","permalink":"/changelog/2.3.1","unlisted":false},{"title":"2.3.0","permalink":"/changelog/2.3.0","unlisted":false},{"title":"2.2.0","permalink":"/changelog/2.2.0","unlisted":false},{"title":"2.1.0","permalink":"/changelog/2.1.0","unlisted":false},{"title":"2.0.1","permalink":"/changelog/2.0.1","unlisted":false},{"title":"2.0.0","permalink":"/changelog/2.0.0","unlisted":false},{"title":"2.0.0-rc.1","permalink":"/changelog/2.0.0-rc.1","unlisted":false},{"title":"2.0.0-beta.22","permalink":"/changelog/2.0.0-beta.22","unlisted":false},{"title":"2.0.0-beta.21","permalink":"/changelog/2.0.0-beta.21","unlisted":false},{"title":"2.0.0-beta.20","permalink":"/changelog/2.0.0-beta.20","unlisted":false},{"title":"2.0.0-beta.19","permalink":"/changelog/2.0.0-beta.19","unlisted":false},{"title":"2.0.0-beta.18","permalink":"/changelog/2.0.0-beta.18","unlisted":false},{"title":"2.0.0-beta.17","permalink":"/changelog/2.0.0-beta.17","unlisted":false},{"title":"2.0.0-beta.16","permalink":"/changelog/2.0.0-beta.16","unlisted":false},{"title":"2.0.0-beta.15","permalink":"/changelog/2.0.0-beta.15","unlisted":false},{"title":"2.0.0-beta.14","permalink":"/changelog/2.0.0-beta.14","unlisted":false},{"title":"2.0.0-beta.13","permalink":"/changelog/2.0.0-beta.13","unlisted":false},{"title":"2.0.0-beta.12","permalink":"/changelog/2.0.0-beta.12","unlisted":false},{"title":"2.0.0-beta.11","permalink":"/changelog/2.0.0-beta.11","unlisted":false},{"title":"2.0.0-beta.10","permalink":"/changelog/2.0.0-beta.10","unlisted":false},{"title":"2.0.0-beta.9","permalink":"/changelog/2.0.0-beta.9","unlisted":false},{"title":"2.0.0-beta.8","permalink":"/changelog/2.0.0-beta.8","unlisted":false},{"title":"2.0.0-beta.7","permalink":"/changelog/2.0.0-beta.7","unlisted":false},{"title":"2.0.0-beta.6","permalink":"/changelog/2.0.0-beta.6","unlisted":false},{"title":"2.0.0-beta.5","permalink":"/changelog/2.0.0-beta.5","unlisted":false},{"title":"2.0.0-beta.4","permalink":"/changelog/2.0.0-beta.4","unlisted":false},{"title":"2.0.0-beta.3","permalink":"/changelog/2.0.0-beta.3","unlisted":false},{"title":"2.0.0-beta.2","permalink":"/changelog/2.0.0-beta.2","unlisted":false},{"title":"2.0.0-beta.1","permalink":"/changelog/2.0.0-beta.1","unlisted":false},{"title":"2.0.0-beta.0","permalink":"/changelog/2.0.0-beta.0","unlisted":false},{"title":"2.0.0-alpha.75","permalink":"/changelog/2.0.0-alpha.75","unlisted":false},{"title":"2.0.0-alpha.74","permalink":"/changelog/2.0.0-alpha.74","unlisted":false},{"title":"2.0.0-alpha.73","permalink":"/changelog/2.0.0-alpha.73","unlisted":false},{"title":"2.0.0-alpha.72","permalink":"/changelog/2.0.0-alpha.72","unlisted":false},{"title":"2.0.0-alpha.71","permalink":"/changelog/2.0.0-alpha.71","unlisted":false},{"title":"2.0.0-alpha.70","permalink":"/changelog/2.0.0-alpha.70","unlisted":false},{"title":"2.0.0-alpha.69","permalink":"/changelog/2.0.0-alpha.69","unlisted":false},{"title":"2.0.0-alpha.68","permalink":"/changelog/2.0.0-alpha.68","unlisted":false},{"title":"2.0.0-alpha.67","permalink":"/changelog/2.0.0-alpha.67","unlisted":false},{"title":"2.0.0-alpha.66","permalink":"/changelog/2.0.0-alpha.66","unlisted":false},{"title":"2.0.0-alpha.65","permalink":"/changelog/2.0.0-alpha.65","unlisted":false},{"title":"2.0.0-alpha.64","permalink":"/changelog/2.0.0-alpha.64","unlisted":false},{"title":"2.0.0-alpha.63","permalink":"/changelog/2.0.0-alpha.63","unlisted":false},{"title":"2.0.0-alpha.62","permalink":"/changelog/2.0.0-alpha.62","unlisted":false},{"title":"2.0.0-alpha.61","permalink":"/changelog/2.0.0-alpha.61","unlisted":false},{"title":"2.0.0-alpha.60","permalink":"/changelog/2.0.0-alpha.60","unlisted":false},{"title":"2.0.0-alpha.59","permalink":"/changelog/2.0.0-alpha.59","unlisted":false},{"title":"2.0.0-alpha.58","permalink":"/changelog/2.0.0-alpha.58","unlisted":false},{"title":"2.0.0-alpha.57","permalink":"/changelog/2.0.0-alpha.57","unlisted":false},{"title":"2.0.0-alpha.56","permalink":"/changelog/2.0.0-alpha.56","unlisted":false},{"title":"2.0.0-alpha.55","permalink":"/changelog/2.0.0-alpha.55","unlisted":false},{"title":"2.0.0-alpha.54","permalink":"/changelog/2.0.0-alpha.54","unlisted":false},{"title":"2.0.0-alpha.53","permalink":"/changelog/2.0.0-alpha.53","unlisted":false},{"title":"2.0.0-alpha.51","permalink":"/changelog/2.0.0-alpha.51","unlisted":false},{"title":"2.0.0-alpha.50","permalink":"/changelog/2.0.0-alpha.50","unlisted":false},{"title":"2.0.0-alpha.49","permalink":"/changelog/2.0.0-alpha.49","unlisted":false},{"title":"2.0.0-alpha.48","permalink":"/changelog/2.0.0-alpha.48","unlisted":false},{"title":"2.0.0-alpha.44","permalink":"/changelog/2.0.0-alpha.44","unlisted":false},{"title":"2.0.0-alpha.43","permalink":"/changelog/2.0.0-alpha.43","unlisted":false},{"title":"2.0.0-alpha.41","permalink":"/changelog/2.0.0-alpha.41","unlisted":false},{"title":"2.0.0-alpha.40","permalink":"/changelog/2.0.0-alpha.40","unlisted":false},{"title":"2.0.0-alpha.39","permalink":"/changelog/2.0.0-alpha.39","unlisted":false},{"title":"2.0.0-alpha.38","permalink":"/changelog/2.0.0-alpha.38","unlisted":false},{"title":"2.0.0-alpha.37","permalink":"/changelog/2.0.0-alpha.37","unlisted":false},{"title":"2.0.0-alpha.36","permalink":"/changelog/2.0.0-alpha.36","unlisted":false},{"title":"2.0.0-alpha.35","permalink":"/changelog/2.0.0-alpha.35","unlisted":false},{"title":"2.0.0-alpha.34","permalink":"/changelog/2.0.0-alpha.34","unlisted":false},{"title":"2.0.0-alpha.33","permalink":"/changelog/2.0.0-alpha.33","unlisted":false},{"title":"2.0.0-alpha.32","permalink":"/changelog/2.0.0-alpha.32","unlisted":false},{"title":"2.0.0-alpha.31","permalink":"/changelog/2.0.0-alpha.31","unlisted":false},{"title":"2.0.0-alpha.30","permalink":"/changelog/2.0.0-alpha.30","unlisted":false},{"title":"2.0.0-alpha.29","permalink":"/changelog/2.0.0-alpha.29","unlisted":false},{"title":"2.0.0-alpha.28","permalink":"/changelog/2.0.0-alpha.28","unlisted":false},{"title":"2.0.0-alpha.27","permalink":"/changelog/2.0.0-alpha.27","unlisted":false},{"title":"2.0.0-alpha.26","permalink":"/changelog/2.0.0-alpha.26","unlisted":false},{"title":"2.0.0-alpha.25","permalink":"/changelog/2.0.0-alpha.25","unlisted":false},{"title":"2.0.0-alpha.24","permalink":"/changelog/2.0.0-alpha.24","unlisted":false},{"title":"2.0.0-alpha.23","permalink":"/changelog/2.0.0-alpha.23","unlisted":false},{"title":"2.0.0-alpha.22","permalink":"/changelog/2.0.0-alpha.22","unlisted":false},{"title":"2.0.0-alpha.21","permalink":"/changelog/2.0.0-alpha.21","unlisted":false},{"title":"2.0.0-alpha.20","permalink":"/changelog/2.0.0-alpha.20","unlisted":false},{"title":"2.0.0-alpha.19","permalink":"/changelog/2.0.0-alpha.19","unlisted":false},{"title":"V2 Changelog","permalink":"/changelog/V2 Changelog","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/955.e926dc3a.js b/assets/js/955.e926dc3a.js new file mode 100644 index 0000000000..12521b4acc --- /dev/null +++ b/assets/js/955.e926dc3a.js @@ -0,0 +1,772 @@ +"use strict"; +exports.id = 955; +exports.ids = [955]; +exports.modules = { + +/***/ 21955: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(99854); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63294); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27693); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7608); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42605); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 9], $V5 = [1, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V6 = [2, 5], $V7 = [1, 6, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V8 = [26, 27, 28], $V9 = [2, 8], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 28], $Vh = [6, 26, 27, 28, 29]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "PIE": 6, "document": 7, "showData": 8, "line": 9, "statement": 10, "txt": 11, "value": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "openDirective": 21, "typeDirective": 22, "closeDirective": 23, ":": 24, "argDirective": 25, "NEWLINE": 26, ";": 27, "EOF": 28, "open_directive": 29, "type_directive": 30, "arg_directive": 31, "close_directive": 32, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "PIE", 8: "showData", 11: "txt", 12: "value", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 24: ":", 26: "NEWLINE", 27: ";", 28: "EOF", 29: "open_directive", 30: "type_directive", 31: "arg_directive", 32: "close_directive" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [3, 3], [7, 0], [7, 2], [9, 2], [10, 0], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [5, 3], [5, 5], [4, 1], [4, 1], [4, 1], [21, 1], [22, 1], [25, 1], [23, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.setShowData(true); + break; + case 7: + this.$ = $$[$0 - 1]; + break; + case 9: + yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0])); + break; + case 10: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 11: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 12: + case 13: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 14: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 21: + yy.parseDirective("%%{", "open_directive"); + break; + case 22: + yy.parseDirective($$[$0], "type_directive"); + break; + case 23: + $$[$0] = $$[$0].trim().replace(/'/g, '"'); + yy.parseDirective($$[$0], "arg_directive"); + break; + case 24: + yy.parseDirective("}%%", "close_directive", "pie"); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, o($V5, $V6, { 7: 12, 8: [1, 13] }), o($V7, [2, 18]), o($V7, [2, 19]), o($V7, [2, 20]), { 22: 14, 30: [1, 15] }, { 30: [2, 21] }, { 1: [2, 1] }, { 1: [2, 2] }, o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 3], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($V5, $V6, { 7: 25 }), { 23: 26, 24: [1, 27], 32: $Vg }, o([24, 32], [2, 22]), o($V5, [2, 6]), { 4: 29, 26: $V1, 27: $V2, 28: $V3 }, { 12: [1, 30] }, { 14: [1, 31] }, { 16: [1, 32] }, { 18: [1, 33] }, o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 4], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($Vh, [2, 16]), { 25: 34, 31: [1, 35] }, o($Vh, [2, 24]), o($V5, [2, 7]), o($V8, [2, 9]), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 23: 36, 32: $Vg }, { 32: [2, 23] }, o($Vh, [2, 17])], + defaultActions: { 9: [2, 21], 10: [2, 1], 11: [2, 2], 35: [2, 23] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return 29; + case 1: + this.begin("type_directive"); + return 30; + case 2: + this.popState(); + this.begin("arg_directive"); + return 24; + case 3: + this.popState(); + this.popState(); + return 32; + case 4: + return 31; + case 5: + break; + case 6: + break; + case 7: + return 26; + case 8: + break; + case 9: + break; + case 10: + this.begin("title"); + return 13; + case 11: + this.popState(); + return "title_value"; + case 12: + this.begin("acc_title"); + return 15; + case 13: + this.popState(); + return "acc_title_value"; + case 14: + this.begin("acc_descr"); + return 17; + case 15: + this.popState(); + return "acc_descr_value"; + case 16: + this.begin("acc_descr_multiline"); + break; + case 17: + this.popState(); + break; + case 18: + return "acc_descr_multiline_value"; + case 19: + this.begin("string"); + break; + case 20: + this.popState(); + break; + case 21: + return "txt"; + case 22: + return 6; + case 23: + return 8; + case 24: + return "value"; + case 25: + return 28; + } + }, + rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "title": { "rules": [11], "inclusive": false }, "string": { "rules": [20, 21], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 12, 14, 16, 19, 22, 23, 24, 25], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_PIE_CONFIG = _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.C.pie; +const DEFAULT_PIE_DB = { + sections: {}, + showData: false, + config: DEFAULT_PIE_CONFIG +}; +let sections = DEFAULT_PIE_DB.sections; +let showData = DEFAULT_PIE_DB.showData; +const config = structuredClone(DEFAULT_PIE_CONFIG); +const getConfig = () => structuredClone(config); +const parseDirective = (statement, context, type) => { + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.D)(void 0, statement, context, type); +}; +const clear = () => { + sections = structuredClone(DEFAULT_PIE_DB.sections); + showData = DEFAULT_PIE_DB.showData; + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.v)(); +}; +const addSection = (label, value) => { + label = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.d)(label, (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (sections[label] === void 0) { + sections[label] = value; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`added new section: ${label}, with value: ${value}`); + } +}; +const getSections = () => sections; +const cleanupValue = (value) => { + if (value.substring(0, 1) === ":") { + value = value.substring(1).trim(); + } + return Number(value.trim()); +}; +const setShowData = (toggle) => { + showData = toggle; +}; +const getShowData = () => showData; +const db = { + getConfig, + parseDirective, + clear, + setDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.r, + getDiagramTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.t, + setAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + cleanupValue, + setShowData, + getShowData +}; +const getStyles = (options) => ` + .pieCircle{ + stroke: ${options.pieStrokeColor}; + stroke-width : ${options.pieStrokeWidth}; + opacity : ${options.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${options.pieOuterStrokeColor}; + stroke-width: ${options.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${options.pieTitleTextSize}; + fill: ${options.pieTitleTextColor}; + font-family: ${options.fontFamily}; + } + .slice { + font-family: ${options.fontFamily}; + fill: ${options.pieSectionTextColor}; + font-size:${options.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${options.pieLegendTextColor}; + font-family: ${options.fontFamily}; + font-size: ${options.pieLegendTextSize}; + } +`; +const styles = getStyles; +const createPieArcs = (sections2) => { + const pieData = Object.entries(sections2).map( + (element) => { + return { + label: element[0], + value: element[1] + }; + } + ); + const pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .pie */ .ve8)().value( + (d3Section) => d3Section.value + ); + return pie$1(pieData); +}; +const draw = (text, id, _version, diagObj) => { + var _a, _b; + _mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering pie chart\n" + text); + const db2 = diagObj.db; + const globalConfig = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const pieConfig = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.E)(db2.getConfig(), globalConfig.pie); + const height = 450; + const width = ((_b = (_a = document.getElementById(id)) == null ? void 0 : _a.parentElement) == null ? void 0 : _b.offsetWidth) ?? pieConfig.useWidth; + const svg = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.B)(id); + svg.attr("viewBox", `0 0 ${width} ${height}`); + (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, width, pieConfig.useMaxWidth); + const MARGIN = 40; + const LEGEND_RECT_SIZE = 18; + const LEGEND_SPACING = 4; + const group = svg.append("g"); + group.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")"); + const { themeVariables } = globalConfig; + let [outerStrokeWidth] = (0,_mermaid_768dc893_js__WEBPACK_IMPORTED_MODULE_4__.F)(themeVariables.pieOuterStrokeWidth); + outerStrokeWidth ?? (outerStrokeWidth = 2); + const textPosition = pieConfig.textPosition; + const radius = Math.min(width, height) / 2 - MARGIN; + const arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(0).outerRadius(radius); + const labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(radius * textPosition).outerRadius(radius * textPosition); + group.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); + const sections2 = db2.getSections(); + const arcs = createPieArcs(sections2); + const myGeneratedColors = [ + themeVariables.pie1, + themeVariables.pie2, + themeVariables.pie3, + themeVariables.pie4, + themeVariables.pie5, + themeVariables.pie6, + themeVariables.pie7, + themeVariables.pie8, + themeVariables.pie9, + themeVariables.pie10, + themeVariables.pie11, + themeVariables.pie12 + ]; + const color = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleOrdinal */ .PKp)(myGeneratedColors); + group.selectAll("mySlices").data(arcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum) => { + return color(datum.data.label); + }).attr("class", "pieCircle"); + let sum = 0; + Object.keys(sections2).forEach((key) => { + sum += sections2[key]; + }); + group.selectAll("mySlices").data(arcs).enter().append("text").text((datum) => { + return (datum.data.value / sum * 100).toFixed(0) + "%"; + }).attr("transform", (datum) => { + return "translate(" + labelArcGenerator.centroid(datum) + ")"; + }).style("text-anchor", "middle").attr("class", "slice"); + group.append("text").text(db2.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText"); + const legend = group.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { + const height2 = LEGEND_RECT_SIZE + LEGEND_SPACING; + const offset = height2 * color.domain().length / 2; + const horizontal = 12 * LEGEND_RECT_SIZE; + const vertical = index * height2 - offset; + return "translate(" + horizontal + "," + vertical + ")"; + }); + legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", color).style("stroke", color); + legend.data(arcs).append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((datum) => { + const { label, value } = datum.data; + if (db2.getShowData()) { + return `${label} [${value}]`; + } + return label; + }); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/95515391.28e81f69.js b/assets/js/95515391.28e81f69.js new file mode 100644 index 0000000000..c35c100f5a --- /dev/null +++ b/assets/js/95515391.28e81f69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[38140],{76657:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>p,frontMatter:()=>c,metadata:()=>d,toc:()=>a});var o=n(24246),s=n(71670);const c={},r="Doc 1",d={id:"folder with space/doc 1",title:"Doc 1",description:"Inside folder with space",source:"@site/_dogfooding/_docs tests/folder with space/doc 1.mdx",sourceDirName:"folder with space",slug:"/folder with space/doc 1",permalink:"/tests/docs/folder with space/doc 1",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedBy:"S\xe9bastien Lorber",lastUpdatedAt:1672858796e3,frontMatter:{}},i={},a=[];function l(e){const t={a:"a",h1:"h1",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"doc-1",children:"Doc 1"}),"\n",(0,o.jsx)(t.p,{children:"Inside folder with space"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.a,{href:"/tests/docs/folder%20with%20space/doc%202",children:"doc 2"})})]})}function p(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71670:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>r});var o=n(27378);const s={},c=o.createContext(s);function r(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/95742e6e.3445edf0.js b/assets/js/95742e6e.3445edf0.js new file mode 100644 index 0000000000..22050dbf37 --- /dev/null +++ b/assets/js/95742e6e.3445edf0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[35596],{42607:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>i});var a=n(24246),o=n(71670);const r={mdx:{format:"md"},date:"2019-07-24T20:00"},s="2.0.0-alpha.24",l={permalink:"/changelog/2.0.0-alpha.24",source:"@site/changelog/source/2.0.0-alpha.24.md",title:"2.0.0-alpha.24",description:"- Remove unused metadata for pages. This minimize number of http request & smaller bundle size.",date:"2019-07-24T20:00:00.000Z",tags:[],hasTruncateMarker:!0,authors:[],frontMatter:{mdx:{format:"md"},date:"2019-07-24T20:00"},unlisted:!1,prevItem:{title:"2.0.0-alpha.25",permalink:"/changelog/2.0.0-alpha.25"},nextItem:{title:"2.0.0-alpha.23",permalink:"/changelog/2.0.0-alpha.23"},listPageLink:"/changelog/page/5"},c={authorsImageUrls:[]},i=[];function u(e){return(0,a.jsx)(a.Fragment,{})}function m(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u()}},71670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var a=n(27378);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/95e8e4ff.e4cf264d.js b/assets/js/95e8e4ff.e4cf264d.js new file mode 100644 index 0000000000..0d32f7d3bc --- /dev/null +++ b/assets/js/95e8e4ff.e4cf264d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[27893],{87739:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},78717:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},7393:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var n=s(24246),r=s(71670);const a={title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:new Date("2023-10-31T00:00:00.000Z")},o=void 0,i={permalink:"/blog/releases/3.0",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/blog/releases/3.0/index.mdx",source:"@site/blog/releases/3.0/index.mdx",title:"Announcing Docusaurus 3.0",description:"Today, we are happy to announce Docusaurus 3.0! \ud83e\udd73",date:"2023-10-31T00:00:00.000Z",tags:[{label:"release",permalink:"/blog/tags/release"}],readingTime:10.515,hasTruncateMarker:!0,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer, This Week In React editor",url:"https://thisweekinreact.com",twitter:"sebastienlorber",email:"sebastien@thisweekinreact.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{title:"Announcing Docusaurus 3.0",authors:["slorber"],tags:["release"],image:"./img/social-card.png",date:"2023-10-31T00:00:00.000Z"},unlisted:!1,lastUpdatedAt:1700717294e3,lastUpdatedBy:"ozaki",prevItem:{title:"Docusaurus 3.1",permalink:"/blog/releases/3.1"},nextItem:{title:"Preparing your site for Docusaurus v3",permalink:"/blog/preparing-your-site-for-docusaurus-v3"}},c={image:s(87739).Z,authorsImageUrls:[void 0]},u=[];function l(e){const t={a:"a",img:"img",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Today, we are happy to ",(0,n.jsx)(t.strong,{children:"announce Docusaurus 3.0"}),"! \ud83e\udd73"]}),"\n",(0,n.jsxs)(t.p,{children:["At ",(0,n.jsx)(t.a,{href:"https://opensource.fb.com/",children:(0,n.jsx)(t.strong,{children:"Meta Open Source"})}),", we believe Docusaurus will help you build the ",(0,n.jsx)(t.strong,{children:"best documentation websites"})," with ",(0,n.jsx)(t.strong,{children:"minimal effort"}),", letting you ",(0,n.jsx)(t.strong,{children:"focus on what really matters"}),": writing the content."]}),"\n",(0,n.jsxs)(t.p,{children:["This is a new ",(0,n.jsx)(t.strong,{children:"major version"})," of Docusaurus, coming with ",(0,n.jsx)(t.strong,{children:"new exciting features"})," and upgraded dependencies."]}),"\n",(0,n.jsxs)(t.p,{children:["In line with the ",(0,n.jsx)(t.a,{href:"https://semver.org/",children:(0,n.jsx)(t.strong,{children:"Semantic Versioning"})})," principles, this release includes ",(0,n.jsx)(t.strong,{children:"breaking changes"})," we documented thoroughly in the ",(0,n.jsx)(t.a,{href:"/docs/migration/v3/",children:(0,n.jsx)(t.strong,{children:"v3 upgrade guide"})}),". Breaking changes can be bothersome, but they are necessary to set the ground for a ",(0,n.jsx)(t.strong,{children:"new wave of Docusaurus features"})," we plan to implement."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"v3.0 social-card image",src:s(78717).Z+"",width:"1200",height:"600"})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},71670:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>o});var n=s(27378);const r={},a=n.createContext(r);function o(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/96153c3e.9f3647b5.js b/assets/js/96153c3e.9f3647b5.js new file mode 100644 index 0000000000..9f3942cac4 --- /dev/null +++ b/assets/js/96153c3e.9f3647b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[47350],{72925:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>f});var n=o(24246),s=o(71670);const r={title:"Second post with footnote to test posts with same footnote reference."},a=void 0,c={permalink:"/tests/blog/2022/01/22/dup-footnote",editUrl:"https://github.com/facebook/docusaurus/edit/main/website/_dogfooding/_blog-tests/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx",source:"@site/_dogfooding/_blog tests/2022-01-22-dup-footnote.mdx",title:"Second post with footnote to test posts with same footnote reference.",description:"foo",date:"2022-01-22T00:00:00.000Z",tags:[],readingTime:1.8,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Second post with footnote to test posts with same footnote reference."},unlisted:!1,prevItem:{title:"First post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/04/20/dup-footnote"},nextItem:{title:"Third post with footnote to test posts with same footnote reference.",permalink:"/tests/blog/2022/01/21/dup-footnote"}},i={authorsImageUrls:[]},f=[];function d(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["foo",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-1-db139e",id:"user-content-fnref-1-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),"\n",(0,n.jsxs)(t.p,{children:["bar",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-2-db139e",id:"user-content-fnref-2-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})]}),"\n",(0,n.jsxs)(t.p,{children:["baz",(0,n.jsx)(t.sup,{children:(0,n.jsx)(t.a,{href:"#user-content-fn-3-db139e",id:"user-content-fnref-3-db139e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})]}),"\n","\n",(0,n.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,n.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{id:"user-content-fn-1-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["foo ",(0,n.jsx)(t.a,{href:"#user-content-fnref-1-db139e","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-2-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["bar ",(0,n.jsx)(t.a,{href:"#user-content-fnref-2-db139e","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{id:"user-content-fn-3-db139e",children:["\n",(0,n.jsxs)(t.p,{children:["baz ",(0,n.jsx)(t.a,{href:"#user-content-fnref-3-db139e","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},71670:(e,t,o)=>{o.d(t,{Z:()=>c,a:()=>a});var n=o(27378);const s={},r=n.createContext(s);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/972d9d57.f49f061e.js b/assets/js/972d9d57.f49f061e.js new file mode 100644 index 0000000000..de3a97eccd --- /dev/null +++ b/assets/js/972d9d57.f49f061e.js @@ -0,0 +1,2 @@ +/*! For license information please see 972d9d57.f49f061e.js.LICENSE.txt */ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40937],{28475:(e,t,s)=>{s.d(t,{Z:()=>o});var n=s(27378),i=function(){return i=Object.assign||function(e){for(var t,s=1,n=arguments.length;s{s.d(t,{Z:()=>n});const n=s.p+"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},64784:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=s(24246),i=s(71670),o=s(28475);const r={description:"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.",slug:"/"},a="Introduction",l={id:"introduction",title:"Introduction",description:"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.",source:"@site/docs/introduction.mdx",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/introduction.mdx",tags:[],version:"current",lastUpdatedBy:"Fafowora Sunkanmi",lastUpdatedAt:1711022705e3,frontMatter:{description:"Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.",slug:"/"},sidebar:"docs",next:{title:"Getting Started",permalink:"/docs/category/getting-started"}},c={},d=[{value:"Fast Track \u23f1\ufe0f",id:"fast-track",level:2},{value:"Docusaurus: Documentation Made Easy",id:"docusaurus-documentation-made-easy",level:2},{value:"Migrating from v1",id:"migrating-from-v1",level:2},{value:"Features",id:"features",level:2},{value:"Design principles",id:"design-principles",level:2},{value:"Comparison with other tools",id:"comparison-with-other-tools",level:2},{value:"Gatsby",id:"gatsby",level:3},{value:"Next.js",id:"nextjs",level:3},{value:"VitePress",id:"vitepress",level:3},{value:"MkDocs",id:"mkdocs",level:3},{value:"Docsify",id:"docsify",level:3},{value:"GitBook",id:"gitbook",level:3},{value:"Jekyll",id:"jekyll",level:3},{value:"Staying informed",id:"staying-informed",level:2},{value:"Something missing?",id:"something-missing",level:2}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsxs)(t.p,{children:["\u26a1\ufe0f Docusaurus will help you ship a ",(0,n.jsx)(t.strong,{children:"beautiful documentation site in no time"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["\ud83d\udcb8 Building a custom tech stack is expensive. Instead, ",(0,n.jsx)(t.strong,{children:"focus on your content"})," and just write Markdown files."]}),"\n",(0,n.jsxs)(t.p,{children:["\ud83d\udca5 Ready for more? Use ",(0,n.jsx)(t.strong,{children:"advanced features"})," like versioning, i18n, search and theme customizations."]}),"\n",(0,n.jsxs)(t.p,{children:["\ud83d\udc85 Check the ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"/showcase?tags=favorite",children:"best Docusaurus sites"})})," for inspiration and read some ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"https://twitter.com/sebastienlorber/timelines/1392048416872706049",children:"testimonials"})}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["\ud83e\uddd0 Docusaurus is a ",(0,n.jsx)(t.strong,{children:"static-site generator"}),". It builds a ",(0,n.jsx)(t.strong,{children:"single-page application"})," with fast client-side navigation, leveraging the full power of ",(0,n.jsx)(t.strong,{children:"React"})," to make your site interactive. It provides out-of-the-box ",(0,n.jsx)(t.strong,{children:"documentation features"})," but can be used to create ",(0,n.jsx)(t.strong,{children:"any kind of site"})," (personal website, product, blog, marketing landing pages, etc)."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:s(28048).Z+"",width:"760",height:"160"})}),"\n",(0,n.jsx)(t.h2,{id:"fast-track",children:"Fast Track \u23f1\ufe0f"}),"\n",(0,n.jsxs)(t.p,{children:["Understand Docusaurus in ",(0,n.jsx)(t.strong,{children:"5 minutes"})," by playing!"]}),"\n",(0,n.jsxs)(t.p,{children:["Create a new Docusaurus site and follow the ",(0,n.jsx)(t.strong,{children:"very short"})," embedded tutorial."]}),"\n",(0,n.jsxs)(t.p,{children:["Install ",(0,n.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," and create a new Docusaurus site:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npx create-docusaurus@latest my-website classic\n"})}),"\n",(0,n.jsx)(t.p,{children:"Start the site:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"cd my-website\nnpx docusaurus start\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Open ",(0,n.jsx)(t.a,{href:"http://localhost:3000",children:(0,n.jsx)(t.code,{children:"http://localhost:3000"})})," and follow the tutorial."]}),"\n",(0,n.jsxs)(t.admonition,{type:"tip",children:[(0,n.jsxs)(t.p,{children:["Use ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"https://docusaurus.new",children:"docusaurus.new"})})," to test Docusaurus immediately in your browser!"]}),(0,n.jsxs)(t.p,{children:["Or read the ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"https://tutorial.docusaurus.io",children:"5-minute tutorial"})})," online."]})]}),"\n",(0,n.jsx)(t.h2,{id:"docusaurus-documentation-made-easy",children:"Docusaurus: Documentation Made Easy"}),"\n",(0,n.jsxs)(t.p,{children:["In this presentation at ",(0,n.jsx)(t.a,{href:"https://www.algolia.com/",children:"Algolia Community Event"}),", ",(0,n.jsx)(t.a,{href:"https://opensource.facebook.com/",children:"Meta Open Source team"})," shared a brief walk-through of Docusaurus. They covered how to get started with the project, enable plugins, and set up functionalities like documentation and blogging."]}),"\n","\n","\n",(0,n.jsx)("div",{className:"video-container",children:(0,n.jsx)(o.Z,{id:"Yhyx7otSksg",params:"autoplay=1&autohide=1&showinfo=0&rel=0",title:"Docusaurus: Documentation Made Easy",poster:"maxresdefault",webp:!0})}),"\n",(0,n.jsx)(t.h2,{id:"migrating-from-v1",children:"Migrating from v1"}),"\n",(0,n.jsxs)(t.p,{children:["Docusaurus v2+ has been a total rewrite from Docusaurus v1, taking advantage of a completely modernized toolchain. After ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0",children:"v2's official release"}),", we highly encourage you to ",(0,n.jsx)(t.strong,{children:"use Docusaurus v2+ over Docusaurus v1"}),", as Docusaurus v1 has been deprecated."]}),"\n",(0,n.jsxs)(t.p,{children:["A ",(0,n.jsx)(t.a,{href:"/showcase",children:"lot of users"})," are already using Docusaurus v2+ (",(0,n.jsx)(t.a,{href:"https://www.npmtrends.com/docusaurus-vs-@docusaurus/core",children:"trends"}),")."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Use Docusaurus v2+ if:"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\u2705"," You want a modern Jamstack documentation site"]}),"\n",(0,n.jsxs)(t.li,{children:["\u2705"," You want a single-page application (SPA) with client-side routing"]}),"\n",(0,n.jsxs)(t.li,{children:["\u2705"," You want the full power of React and MDX"]}),"\n",(0,n.jsxs)(t.li,{children:["\u2705"," You do not need support for IE11"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsxs)(t.strong,{children:["Use ",(0,n.jsx)(t.a,{href:"https://v1.docusaurus.io/",children:"Docusaurus v1"})," if:"]})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\u274c"," You don't want a single-page application (SPA)"]}),"\n",(0,n.jsxs)(t.li,{children:["\u274c"," You need support for IE11 (...do you? IE ",(0,n.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/lifecycle/products/internet-explorer-11",children:"has already reached end-of-life"})," and is no longer officially supported)"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["For existing v1 users that are seeking to upgrade to v2+, you can follow our ",(0,n.jsx)(t.a,{href:"/docs/migration",children:"migration guides"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"features",children:"Features"}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus is built with high attention to the developer and contributor experience."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\u269b\ufe0f ",(0,n.jsx)(t.strong,{children:"Built with \ud83d\udc9a and React"}),":","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Extend and customize with React"}),"\n",(0,n.jsx)(t.li,{children:"Gain full control of your site's browsing experience by providing your own React components"}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Pluggable"}),":","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Bootstrap your site with a basic template, then use advanced features and plugins"}),"\n",(0,n.jsx)(t.li,{children:"Open source your plugins to share with the community"}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\u2702\ufe0f ",(0,n.jsx)(t.strong,{children:"Developer experience"}),":","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Start writing your docs right now"}),"\n",(0,n.jsx)(t.li,{children:"Universal configuration entry point to make it more maintainable by contributors"}),"\n",(0,n.jsx)(t.li,{children:"Hot reloading with lightning-fast incremental build on changes"}),"\n",(0,n.jsx)(t.li,{children:"Route-based code and data splitting"}),"\n",(0,n.jsx)(t.li,{children:"Publish to GitHub Pages, Netlify, Vercel, and other deployment services with ease"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Our shared goal\u2014to help your users quickly find what they need and understand your products better. We share our best practices to help you build your docs site right and well."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\ud83c\udfaf ",(0,n.jsx)(t.strong,{children:"SEO friendly"}),":","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"HTML files are statically generated for every possible path."}),"\n",(0,n.jsx)(t.li,{children:"Page-specific SEO to help your users land on your official docs directly relating their problems at hand."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\ud83d\udcdd ",(0,n.jsx)(t.strong,{children:"Powered by MDX"}),":","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Write interactive components via JSX and React embedded in Markdown."}),"\n",(0,n.jsx)(t.li,{children:"Share your code in live editors to get your users to love your products on the spot."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\ud83d\udd0d ",(0,n.jsx)(t.strong,{children:"Search"}),": Your full site is searchable."]}),"\n",(0,n.jsxs)(t.li,{children:["\ud83d\udcbe ",(0,n.jsx)(t.strong,{children:"Document Versioning"}),": Helps you keep documentation in sync with project releases."]}),"\n",(0,n.jsxs)(t.li,{children:["\ud83c\udf0d ",(0,n.jsx)(t.strong,{children:"Internationalization (i18n)"}),": Translate your site in multiple locales."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Docusaurus v2+ is born to be compassionately accessible to all your users, and lightning-fast."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\u26a1\ufe0f ",(0,n.jsx)(t.strong,{children:"Lightning-fast"}),". Docusaurus v2+ follows the ",(0,n.jsx)(t.a,{href:"https://developers.google.com/web/fundamentals/performance/prpl-pattern/",children:"PRPL Pattern"})," that makes sure your content loads blazing fast."]}),"\n",(0,n.jsxs)(t.li,{children:["\ud83e\udd96 ",(0,n.jsx)(t.strong,{children:"Accessible"}),". Attention to accessibility, making your site equally accessible to all users."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"design-principles",children:"Design principles"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Little to learn"}),". Docusaurus should be easy to learn and use as the API is quite small. Most things will still be achievable by users, even if it takes them more code and more time to write. Not having abstractions is better than having the wrong abstractions, and we don't want users to have to hack around the wrong abstractions. Mandatory talk\u2014",(0,n.jsx)(t.a,{href:"https://www.youtube.com/watch?v=4anAwXYqLG8",children:"Minimal API Surface Area"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Intuitive"}),". Users will not feel overwhelmed when looking at the project directory of a Docusaurus project or adding new features. It should look intuitive and easy to build on top of, using approaches they are familiar with."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Layered architecture"}),". The separations of concerns between each layer of our stack (content/theming/styling) should be clear\u2014well-abstracted and modular."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Sensible defaults"}),". Common and popular performance optimizations and configurations will be done for users but they are given the option to override them."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"No vendor lock-in"}),". Users are not required to use the default plugins or CSS, although they are highly encouraged to. Certain core infrastructures like React Loadable and React Router cannot be swapped because we do default performance optimization on them, but not higher-level ones. Choice of Markdown engines, CSS frameworks, CSS methodology, and other architectures will be entirely up to users."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We believe that, as developers, knowing how a library works helps us become better at using it. Hence we're dedicating effort to explaining the architecture and various components of Docusaurus with the hope that users reading it will gain a deeper understanding of the tool and be even more proficient in using it."}),"\n",(0,n.jsx)(t.h2,{id:"comparison-with-other-tools",children:"Comparison with other tools"}),"\n",(0,n.jsx)(t.p,{children:"Across all static site generators, Docusaurus has a unique focus on documentation sites and has many out-of-the-box features."}),"\n",(0,n.jsx)(t.p,{children:"We've also studied other main static site generators and would like to share our insights on the comparison, hopefully helping you navigate through the prismatic choices out there."}),"\n",(0,n.jsx)(t.h3,{id:"gatsby",children:"Gatsby"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.gatsbyjs.com/",children:"Gatsby"})," is packed with a lot of features, has a rich ecosystem of plugins, and is capable of doing everything that Docusaurus does. Naturally, that comes at a cost of a higher learning curve. Gatsby does many things well and is suitable for building many types of websites. On the other hand, Docusaurus tries to do one thing super well - be the best tool for writing and publishing content."]}),"\n",(0,n.jsx)(t.p,{children:"GraphQL is also pretty core to Gatsby, although you don't necessarily need GraphQL to build a Gatsby site. In most cases when building static websites, you won't need the flexibility that GraphQL provides."}),"\n",(0,n.jsx)(t.p,{children:"Many aspects of Docusaurus v2+ were inspired by the best things about Gatsby and it's a great alternative."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/pedronauck/docz",children:"Docz"})," is a Gatsby theme to build documentation websites. It is currently less featured than Docusaurus."]}),"\n",(0,n.jsx)(t.h3,{id:"nextjs",children:"Next.js"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://nextjs.org/",children:"Next.js"})," is another very popular hybrid React framework. It can help you build a good documentation website, but it is not opinionated toward the documentation use-case, and it will require a lot more work to implement what Docusaurus provides out-of-the-box."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/shuding/nextra",children:"Nextra"})," is an opinionated static site generator built on top of Next.js. It is currently less featured than Docusaurus."]}),"\n",(0,n.jsx)(t.h3,{id:"vitepress",children:"VitePress"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://vitepress.dev/",children:"VitePress"})," has many similarities with Docusaurus - both focus heavily on content-centric websites and provides tailored documentation features out of the box. However, VitePress is powered by Vue, while Docusaurus is powered by React. If you want a Vue-based solution, VitePress would be a decent choice."]}),"\n",(0,n.jsx)(t.h3,{id:"mkdocs",children:"MkDocs"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.mkdocs.org/",children:"MkDocs"})," is a popular Python static site generator with value propositions similar to Docusaurus."]}),"\n",(0,n.jsx)(t.p,{children:"It is a good option if you don't need a single-page application and don't plan to leverage React."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://squidfunk.github.io/mkdocs-material/",children:"Material for MkDocs"})," is a beautiful theme."]}),"\n",(0,n.jsx)(t.h3,{id:"docsify",children:"Docsify"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://docsify.js.org/",children:"Docsify"})," makes it easy to create a documentation website, but is not a static-site generator and is not SEO friendly."]}),"\n",(0,n.jsx)(t.h3,{id:"gitbook",children:"GitBook"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.gitbook.com/",children:"GitBook"})," has a very clean design and has been used by many open source projects. With its focus shifting towards a commercial product rather than an open-source tool, many of its requirements no longer fit the needs of open source projects' documentation sites. As a result, many have turned to other products. You may read about Redux's switch to Docusaurus ",(0,n.jsx)(t.a,{href:"https://github.com/reduxjs/redux/issues/3161",children:"here"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Currently, GitBook is only free for open-source and non-profit teams. Docusaurus is free for everyone."}),"\n",(0,n.jsx)(t.h3,{id:"jekyll",children:"Jekyll"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/jekyll/jekyll",children:"Jekyll"})," is one of the most mature static site generators around and has been a great tool to use \u2014 in fact, before Docusaurus, most of Facebook's Open Source websites are/were built on Jekyll! It is extremely simple to get started. We want to bring a similar developer experience as building a static site with Jekyll."]}),"\n",(0,n.jsxs)(t.p,{children:["In comparison with statically generated HTML and interactivity added using ",(0,n.jsx)(t.code,{children:" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Announcing Docusaurus 3.0

· 11 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we are happy to announce Docusaurus 3.0! 🥳

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

+

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

+

v3.0 social-card image

Preparing your site for Docusaurus v3

· 14 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

+

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

+

Preparing your site for Docusaurus v3 - social card

Upgrading frontend dependencies with confidence

· 9 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

+

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

+

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

+

Upgrading frontend dependencies with confidence - social card

+ + \ No newline at end of file diff --git a/blog.html.html b/blog.html.html new file mode 100644 index 0000000000..2768d0f147 --- /dev/null +++ b/blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2017/12/14/introducing-docusaurus.html b/blog/2017/12/14/introducing-docusaurus.html new file mode 100644 index 0000000000..d69b15e6c6 --- /dev/null +++ b/blog/2017/12/14/introducing-docusaurus.html @@ -0,0 +1,126 @@ + + + + + +Introducing Docusaurus | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Introducing Docusaurus

· 9 min read
Joel Marcey
Developer Advocate at Meta

+

We are very happy to introduce Docusaurus to help you manage one or many open source websites.

+

We created Docusaurus for the following reasons:

+
    +
  1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.
  2. +
  3. To provide features that many of our open source websites need like blog support, search and versioning.
  4. +
  5. To make it easy to push updates, new features, and bug fixes to everyone all at once.
  6. +
  7. And, finally, to provide a consistent look and feel across all of our open source projects.
  8. +
+

Docusaurus is a tool designed to make it easy for teams to publish documentation websites without having to worry about the infrastructure and design details. At its core, all a user has to provide are documentation files written in Markdown, customization of a provided home page written in React, and a few configuration modifications. Docusaurus handles the rest by providing default styles, site formatting, and simple document navigation. Getting started is easy, as users can install it using npm or yarn via a simple initialization script that creates a working example website out of the box.

+

Docusaurus also provides core website and documentation features out-of-the-box including blog support, internationalization, search, and versioning. While some projects may not require any of these features, enabling them is generally a matter of updating configuration options instead of having to add the infrastructure from the ground up. As more features get added to Docusaurus, users just can easily update to the latest version. This can be done by simply running npm or yarn update and updating configuration options. Users or teams will no longer need to manually rework their entire website infrastructure each time a new feature gets added.

+

The Birth of docusaurus

+

+

When Facebook first started their open source program, many teams implemented a custom website for each of their open source projects. This approach presented challenges when the open source program team was asked to help the project teams improve their documentation. Since each site was unique, adding basic infrastructure such as a blog, consistent navigation, search, etc. became challenging undertakings.

+

The open source team tried to help mitigate this problem by coming up with a standard template, based on Jekyll, that could be used as a starting point for a project website. We asked our new projects to manually copy our template source to their repo, write their docs, and publish. This template approach was adopted by most of open source projects launched; some existing projects even converted their custom website implementations to the new template as well.

+

The problem with the "copy the template to your repo" approach is that, even though the platform is consistent, pushing updates becomes unmaintainable across an entire suite of projects already using the template. This is because we lost control of the template after a project copied it to their repo. Projects were free to modify the template as desired and apply their own project-specific features to it. So while projects share the same site generation platform, they have now diverted enough where they cannot take advantage of the new features we have added to the template over time. There was no easy way we could ask all current projects to "copy" a new version of the template since it might break their existing site or remove features that they have added on their own. Instead, we would have to apply the updates manually to each project one-by-one. This became very problematic when projects started asking for our team for internationalization support within the template, requiring low-level changes to how the template was structured and generated.

+

So we started thinking about what we could do to help mitigate the challenge of keeping sites updated and consistent across our entire portfolio. We also wanted multiple projects to share the same site generation software. We wanted them to start out with the same template, and yet have the flexibility to customize and adapt their site theme to suit their needs. They should be able to extend and customize their site, but when we update the underlying infrastructure with fixes and features, the project should be able update simply and without any breaking changes.

+

Docusaurus was born!

+

At Facebook, Docusaurus allows us to quickly get different projects up and running with documentation websites, especially for teams who don't have much experience with web development or primarily want a basic site to showcase their project. Docusaurus already supports sites needing more advanced features like internationalization for Jest and versioning for React Native. As different projects request new features for their sites, they are added to Docusaurus and simultaneously provided to all projects! All together, this ends up greatly reducing the work needed to maintain different sites for different projects. Our teams are able to focus on keeping their projects healthier by spending more time adding features, fixing bugs, and writing documentation.

+

Getting Up and Running

+

+

At its core, we wanted sites running Docusaurus to be simple to use. With one installation command and some simple configuration, you can actually have a default running website.

+

When you run docusaurus-init, you will see a structure similar to:

+
root-of-repo
├── docs-examples-from-docusaurus
│ ├── doc1.md
│ ├── doc2.md
│ ├── doc3.md
│ ├── example-doc4.md
│ └── example-doc5.md
├── website
│ ├── blog-examples-from-docusaurus
│ │ ├── 2016-03-11-blog-post.md
│ │ └── 2017-04-10-blog-post-two.md
│ ├── core
│ │ └── Footer.js
│ ├── node_modules
│ ├── package.json
│ ├── pages
│ ├── sidebars.json
│ ├── siteConfig.js
│ └── static
+

With the exception of node_modules and package.json, all the directories and files you see are where you customize and add content to your Docusaurus-based website. The docs folder is where you add your Markdown that represents your documentation; the blog folder is where you add your Markdown for your blog posts; siteConfig.js is where you make most of the customizations for your site; sidebars.json is where you maintain the layout and content of the sidebar for your documentation; the pages folder is where you add custom pages for your site; the static folder is where all of your static assets go (e.g., CSS stylesheets and images); and the core folder is where you can customize core components of the site, in this case the footer.

+

How does Docusaurus work?

+

Docusaurus is written primarily in JavaScript and React, replacing Jekyll which we used in the old template. We use Remarkable for our Markdown rendering and highlight.js for our code block syntax highlighting. The core of Docusaurus' functionality is in the lib directory of the Docusaurus repo. The general structure looks like:

+
root-of-Docusaurus
├── lib
│ ├── core
│ ├── server
│ │ ├── generate.js
│ │ ├── server.js
│ │ └── ...and more files
│ ├── static
│ ├── build-files.js
│ ├── copy-examples.js
│ ├── generate-feed.js
│ ├── publish-gh-pages.js
│ ├── rename-version.js
│ ├── start-server.js
│ ├── versions.js
│ └── write-translations.js
+

The key files here are build-files.js and start-server.js. There are many similarities between these two files: build-files.js is used to build the physical artifacts for serving by an external web server. start-server.js is used to run the Docusaurus server and locally test your site. Both go through the following general process to take all of the Markdown and configuration to create a runnable website:

+
    +
  1. Process your website settings in siteConfig.js
  2. +
  3. Read the document metadata that exists in all the Markdown files in your docs directory.
  4. +
  5. Create a table of contents for your documents based upon the IDs extracted from the metadata.
  6. +
  7. Convert the Markdown to HTML, including doing link replacement.
  8. +
  9. These files will go in a build/docs directory of the compiled site, and any translated versions will go into a language specific folder within the build/docs folder.
  10. +
  11. Repeat 1-3 for blog posts.
  12. +
  13. The blog file will go in a build/blog directory of the compiled site.
  14. +
  15. Read the main.css file and concatenate any user-defined css into master css file that will be in the build/css directory of the compiled site.
  16. +
  17. Copy images into an build/img directory of the compiled site.
  18. +
  19. Take any custom pages that were added to the pages folder of the site and compile/copy those into the root build directory of the compiled site. Any translated versions will go into a language specific folder within build.
  20. +
  21. Create CNAME and sitemap.xml files and add those to build.
  22. +
+

Note that this process does not take into full account how translations or versioning works. The underlying details of those features will be saved for future blog posts.

+

The final structure of your compiled site will look similar to:

+
build
├── website
│ ├── CNAME
│ ├── blog
│ ├── css
│ ├── docs
│ ├── en
│ ├── help.html # custom page
│ ├── img
│ ├── index.html # landing page
│ ├── sitemap.xml
│ └── users.html # custom page
+

Community

+

+

We welcome your contributions to Docusaurus, whether you want to use it for your own site, you want to contribute to the Docusaurus core or just have questions. Follow us on GitHub and Twitter.

+

Acknowledgements

+

Docusaurus wouldn't exist without the work of the rest of the core Docusaurus team: Eric Nakagawa, Hector Ramos, Eric Vicenti and Frank Li — a former intern at Facebook who implemented the core technology and features.

+

Special thanks also goes out to our earliest adopters of Docusaurus:

+ +

Without their dedication to creating or migrating their websites over to the platform, we would have not have been in the position where we are today.

+

Resources

+
+ + \ No newline at end of file diff --git a/blog/2017/12/14/introducing-docusaurus.html.html b/blog/2017/12/14/introducing-docusaurus.html.html new file mode 100644 index 0000000000..dfa047dbe2 --- /dev/null +++ b/blog/2017/12/14/introducing-docusaurus.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html b/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html new file mode 100644 index 0000000000..ba93b5500e --- /dev/null +++ b/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html @@ -0,0 +1,155 @@ + + + + + +How I Converted Profilo to Docusaurus in Under 2 Hours | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

How I Converted Profilo to Docusaurus in Under 2 Hours

· 6 min read
+

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+
+

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+

In general, when creating a website with Docusaurus you do the following:

+
    +
  1. Generate a template website using Docusaurus scripts.
  2. +
  3. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).
  4. +
  5. Create the website content: +
      +
    1. Add your docs and any supporting assets.
    2. +
    3. Customize the default landing page provided by Docusaurus to suit your needs.
    4. +
    5. Configure the default site navigation file.
    6. +
    +
  6. +
  7. Publish the website and set up how it will be published for future changes.
  8. +
+

Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.

+

Overview of Steps Taken

+

Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section.

+

Design and colors:

+
    +
  1. Got all the desired logo formats from designer. I had to create the .favicon one.
  2. +
  3. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!
  4. +
+

Initial website setup:

+
    +
  1. Forked the Profilo project on GitHub and created a local clone of the fork to set up the website.
  2. +
  3. Created the initial Docusaurus website using the installation instructions.
  4. +
  5. Deleted the docs-examples-from-docusaurus and website/blog-examples-from-docusaurus folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.
  6. +
+

Content creation:

+
    +
  1. +

    Added metadata to the existing Markdown files found in the docs folder, for example:

    +
    ---
    id: architecture
    title: Architecture
    sidebar_label: Architecture
    ---
    +
  2. +
  3. +

    Added the logo assets to the website/static/img folder.

    +
  4. +
  5. +

    Modified website/pages/en/index.js, the landing page, to highlight Profilo features.

    +
  6. +
  7. +

    Modified website/core/Footer.js, the footer, to simplify it for Profilo.

    +
  8. +
  9. +

    Edited website/siteConfig.js (website configuration file) to specify the previously chosen primary and secondary colors.

    +
  10. +
  11. +

    Modified website/sidebars.json that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.

    +
  12. +
  13. +

    Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.

    +
  14. +
  15. +

    Tested the website locally throughout this phase. (I ran yarn start from the website folder to start the server.)

    +
  16. +
+

Feedback and review changes:

+
    +
  1. Sent a pull request to the project.
  2. +
  3. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).
  4. +
  5. Updated the colors and updated the PR.
  6. +
  7. The PR was then accepted and merged. Yay!
  8. +
+

Website publishing:

+
    +
  1. +

    Pushed the first website version by running the Docusaurus publish script from the command line:

    +
    USE_SSH=true \
    GIT_USER=caabernathy \
    CURRENT_BRANCH=master \
    yarn run publish-gh-pages
    +
  2. +
  3. +

    Configured CircleCI using the provided Docusaurus instructions. There were 2 PRs for this, the firstfor the initial config and the second to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).

    +
  4. +
+

The final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.

+

Design

+

Here's what the initial website looked like when the first pull request was sent out:

+

The website&#39;s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar

+

Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.

+

Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade

+

I then took the RGB representation of the color and set it as the baseline color on Paletton. The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.

+

Using Paletton to generate a full palette from the red shade selected. There&#39;s a color wheel showing all hues on the left, and a square showing various shades of red on the right.

+

The selected primary and secondary colors were a good jumping off point for designer feedback.

+

There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features.

+

Here's what the final website looked like:

+

The website&#39;s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.

+

This is an example page showing the core content, in this case the Getting Started page:

+

A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code

+

This also shows the sidebar structure that was set up through editing website/sidebars.json.

+

Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!

+

Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.

+

Final Thoughts

+

The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.

+

The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done.

+ + \ No newline at end of file diff --git a/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html.html b/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html.html new file mode 100644 index 0000000000..50371a8239 --- /dev/null +++ b/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2018/09/11/Towards-Docusaurus-2.html b/blog/2018/09/11/Towards-Docusaurus-2.html new file mode 100644 index 0000000000..f05553681b --- /dev/null +++ b/blog/2018/09/11/Towards-Docusaurus-2.html @@ -0,0 +1,116 @@ + + + + + +Towards Docusaurus 2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Towards Docusaurus 2

· 10 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

+

Introduction

+

It all started with this RFC issue opened by Yangshun towards the end of June 2018.

+

[RFC] Docusaurus v2 · Issue #789 · facebook/docusaurus

These are some of the problems I'm seeing in Docusaurus now and also how we can +address them in v2. A number of the ideas here were inspired by VuePress and other +static site generators. In the current static site generators ecosystem, t...

+

Most of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.

+

Infrastructure

+

Content

+

A Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and dangerouslySetInnerHTML 😱.

+

In addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.

+

For Docusaurus 2, we will be using webpack as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, during build time we will create a server-rendered version of the app and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by Gatsby.

+

Versioning

+

If you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs if and only if the docs content are different.

+

For example, if we have docs/hello.md:

+
---
id: hello
title: hello
---
Hello world !
+

And we cut version 1.0.0, Docusaurus will create versioned_docs/version-1.0.0/hello.md:

+
---
id: version-1.0.0-hello
title: hello
original_id: hello
---
Hello world !
+

However, if there are no changes to hello.md when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, versioned_docs/version-2.0.0/hello.md will not exist.

+

This can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit versioned_docs/version-1.0.0/hello.md or manually add versioned_docs/version-2.0.0/hello.md. This could potentially lead to unwanted bugs. Here is a real scenario in Jest.

+

In addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where renaming docs breaks links in old versions.

+

For Docusaurus 2, every time we cut a new version, we will instead take a snapshot of all the docs. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.

+

Translation

+

Docusaurus allows for easy translation functionality by using Crowdin. Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that English is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.

+

For Docusaurus 2, we will not assume English is the default language. When a user enables internationalization, they have to set a default language in siteConfig.js. We will then assume that all the files in docs are written in that language.

+

In addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.

+

Customizability

+

Layout

+

The current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site's appearance to their wishes.

+

For Docusaurus 2, layout and styling should be controlled by the user. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by create-react-app and VuePress, Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using React Helmet. Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.

+

Markdown

+

Our Markdown parsing is currently powered by Remarkable. What if the user wants to use Markdown-it or even MDX? And then there is an issue of which syntax highlighter to use, (e.g: Prism vs Highlight.js). We should leave these choices open to the user.

+

For Docusaurus 2, users can eject and choose their own Markdown parser. It does not matter if they want to use another Markdown parser such as Remark, or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the RAW string of Markdown. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we're still experimenting with different Markdown parsers.

+ +

Our core search functionality is based on Algolia. There are requests by users to be able to use different search offerings, such as lunrjs for offline search.

+

I personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their DocSearch is open source. For example, I recently submitted this PR that enables DocSearch to scrape alternate languages in sitemap.

+

For Docusaurus 2, we will allow users to customize the search box. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.

+

Stability

+

Software is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.

+

For Docusaurus 2, we are adding tests as we develop since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.

+

Frequently Asked Questions

+

Will there be any breaking changes?

+

If you've read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to minimize the number of breaking changes and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a major rewrite and re-architecting of the codebase.

+

The exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in siteConfig.js and we plan to keep it as lean as possible. For example, the cleanUrl siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the .html suffix.

+

Our goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on Discord or Twitter for questions and help.

+

When is the release of Docusaurus 2?

+

As of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.

+

One thing that I would like to share is that while Docusaurus is part of Facebook Open Source and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at NTU Singapore, so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, we want to make it as awesome as possible.

+

For now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the public repository. When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned 😉!

+

Final Thoughts

+

Docusaurus has had a large impact on the open source community as seen from the many popular projects which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.

+

Docusaurus' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.

+

We also want to let people know that due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.

+

If you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we're doing, you can support Docusaurus on Open Collective.

+
+

If you are sponsoring our work on Open Collective, we'll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.

+
+

Lastly, if you haven't done so already, click the star and watch button on GitHub, and follow us on Twitter.

+ + \ No newline at end of file diff --git a/blog/2018/09/11/Towards-Docusaurus-2.html.html b/blog/2018/09/11/Towards-Docusaurus-2.html.html new file mode 100644 index 0000000000..6476ac6d56 --- /dev/null +++ b/blog/2018/09/11/Towards-Docusaurus-2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2018/12/14/Happy-First-Birthday-Slash.html b/blog/2018/12/14/Happy-First-Birthday-Slash.html new file mode 100644 index 0000000000..ec9ea13eab --- /dev/null +++ b/blog/2018/12/14/Happy-First-Birthday-Slash.html @@ -0,0 +1,64 @@ + + + + + +Happy 1st Birthday Slash! | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Happy 1st Birthday Slash!

· One min read
Joel Marcey
Co-creator of Docusaurus

Docusaurus makes 1 year! Happy Birthday Slash!

+

Docusaurus went live on December 14, 2017. At the time, we had 8 early adopters.

+

We now have nearly 60 known users of Docusaurus, and probably more that we don't know about. We have 9K GitHub stars and an active community, particularly Yangshun Tay and Endilie Yacop Sucipto, both of whom are the lead maintainers helping keep this project moving forward.

+

Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.

+
+

Special thanks to Eric Nakagawa, creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!

+
+ + \ No newline at end of file diff --git a/blog/2018/12/14/Happy-First-Birthday-Slash.html.html b/blog/2018/12/14/Happy-First-Birthday-Slash.html.html new file mode 100644 index 0000000000..38fb584020 --- /dev/null +++ b/blog/2018/12/14/Happy-First-Birthday-Slash.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2019/12/30/docusaurus-2019-recap.html b/blog/2019/12/30/docusaurus-2019-recap.html new file mode 100644 index 0000000000..c1280de213 --- /dev/null +++ b/blog/2019/12/30/docusaurus-2019-recap.html @@ -0,0 +1,98 @@ + + + + + +Docusaurus 2019 Recap | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2019 Recap

· 3 min read
Yangshun Tay
Front End Engineer at Meta

2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

+

Docusaurus 2 (D2)

+

In 2018, we proposed to rebuild Docusaurus from the ground up. It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of @endilie, our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.

+

D2's killer features are Dark Mode and its superb performance. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.

+

Last but not least, we implemented a plugins architecture and turned the repo into a Lerna monorepo. We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.

+

GitHub Activity

+
    +
  • Stars: 10050 → 14632 (+45.6% y/y)
  • +
  • Total Contributors: 182 → 303 (+66.4% y/y). Most of which are non-Facebook contributors
  • +
  • Daily npm Downloads: 728 → 2320 (+218.7% y/y). The peak was in November
  • +
  • D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub
  • +
  • We now have 4 active core contributors! (+100% y/y)
  • +
+

Notable Users

+

A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:

+ +

And welcomed more projects to Docusaurus 1:

+ +

Media

+

Yangshun gave a classroom session during F8 about Using Docusaurus to Create Open Source Websites.

+

Community

+

A few third-party hosting/development services also has first-class integration with a Docusaurus setup:

+ +

Looking Ahead

+

D2 has gained some traction among the developer community. In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!

+

Huge thanks to the community for their contributions, especially the core team - Endilie Yacop Sucipto, Alexey Pyltsyn, Wei Gao. Lastly, thank you Joel Marcey for starting Docusaurus and supporting the project all this time.

+

Cheers to a great 2020! 🎉

+ + \ No newline at end of file diff --git a/blog/2019/12/30/docusaurus-2019-recap.html.html b/blog/2019/12/30/docusaurus-2019-recap.html.html new file mode 100644 index 0000000000..2a6233f245 --- /dev/null +++ b/blog/2019/12/30/docusaurus-2019-recap.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2020/01/07/tribute-to-endi.html b/blog/2020/01/07/tribute-to-endi.html new file mode 100644 index 0000000000..c831ca2801 --- /dev/null +++ b/blog/2020/01/07/tribute-to-endi.html @@ -0,0 +1,68 @@ + + + + + +Tribute to Endi | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Tribute to Endi

· One min read
Joel Marcey
Developer Advocate at Meta

It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.

+

It is impossible to overstate Endi's impact on this project:

+ +

Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.

+

We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or tweet if you have a suggestion.

+

The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. 😔

+

A photo from behind Endi&#39;s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.

+ + \ No newline at end of file diff --git a/blog/2020/01/07/tribute-to-endi.html.html b/blog/2020/01/07/tribute-to-endi.html.html new file mode 100644 index 0000000000..43d90ecaee --- /dev/null +++ b/blog/2020/01/07/tribute-to-endi.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2021/01/19/docusaurus-2020-recap.html b/blog/2021/01/19/docusaurus-2020-recap.html new file mode 100644 index 0000000000..6a39205c74 --- /dev/null +++ b/blog/2021/01/19/docusaurus-2020-recap.html @@ -0,0 +1,155 @@ + + + + + +Docusaurus 2020 Recap | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2020 Recap

· 6 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

+

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

+

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

+

We are still in alpha, but expect some good news very soon!

+

Three Docusaurus plushies laid side-by-side on the table

+

Docusaurus 2 highlights

+

We have worked on many features this year, and would like to highlight the most significant ones:

+
    +
  • i18n: easily translate your Docusaurus site, released soon! (preview, doc)
  • +
  • Version dropdown: enable contextual version switch
  • +
  • Versioning options: solving the most common pain-points users had with versioning
  • +
  • Contextual search: search in the current version, use the brand-new DocSearch 3 experience
  • +
  • Markdown pages: use Markdown instead of React components to create standalone pages
  • +
  • Better theme: various UI, UX and accessibility improvements
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • Multi-instance: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)
  • +
  • Migration CLI: automate the upgrade from Docusaurus 1
  • +
  • CodeSandbox: assess Docusaurus easily from your browser with new.docusaurus.io
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • TypeScript: progressive adoption for internal code, and improve usage for users
  • +
  • Publish Infima: it is now open-source
  • +
+

Docusaurus 2 growth

+

The plan to rebuild Docusaurus from scratch in 2019 paid off: after a slow start, Docusaurus 2 has been widely adopted and has already outgrown Docusaurus 1 usage.

+

Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.

+

Notable projects, startups, large companies, and individuals adopted Docusaurus 2 (showcase):

+ +

We helped large scale Docusaurus 1 sites to upgrade, ensuring a proper migration path and feature parity.

+

React Native was successfully upgraded to Docusaurus 2 (archived v1 site):

+

React Native&#39;s new website built with Docusaurus v2

+

Localized Docusaurus 1 sites (like Jest) will be able to upgrade too:

+

Jest&#39;s new website built with Docusaurus v2 in Japanese

+

We also saw the first right-to-left Docusaurus 2 site published:

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

GitHub Activity

+
    +
  • Stars: 14632 → 20946 (+43.2% y/y)
  • +
  • Total Contributors: 303 → 512 (+68.9% y/y). Most of which are non-Facebook contributors
  • +
  • Weekly npm Downloads: 2356 → 25592 (+986% y/y)
  • +
  • On GitHub, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)
  • +
+

Collaboration with Major League Hacking

+

We have welcomed Major League Hacking (MLH) fellows for 2 seasons already.

+

We are very thankful for the various contributions they made, such as:

+
    +
  • Writing the foundations of the v1 to v2 migration CLI
  • +
  • Help migrate the React Native website from v1 to v2
  • +
  • Making the config validation more strict and exhaustive, returning helpful error messages
  • +
  • Adding CodeSandbox support
  • +
  • Improving the CI pipelines: build size and Lighthouse bots
  • +
+

We look forward to continuing this collaboration in 2021.

+

Media

+

Dmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in 60 seconds or 15min videos.

+

Rachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in React Native Radio 178 (podcast), and William Candillon the React Native website migration (video).

+

Many blog posts have been published:

+ +

Community

+

The Docusaurus community continues to grow, the Discord server is quite active, and Stack Overflow questions keep being posted.

+

The modular architecture of Docusaurus 2 allowed the community to build and publish third-party plugins. As we would like to federate better our community, if you are building a plugin, please let us know.

+

What's next?

+

As the core features of Docusaurus 2 have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the beta and release-candidate phase.

+

With proper support for i18n and versioning, and large scale migrations such as React Native and Jest, we now have a clear migration path for all Docusaurus 1 sites.

+

We still have a few major features that we would like to work on:

+ +

Huge thanks to the community for their contributions in 2020, especially:

+
    +
  • Joel Marcey for creating Docusaurus and supporting the project all this time
  • +
  • the core team - Alexey Pyltsyn, Sébastien Lorber, Yangshun Tay
  • +
  • the Major League Hacking and Facebook interns for their significant impact
  • +
  • the Algolia team for DocSearch 3 and their support
  • +
  • Bartosz Kaszubowski for his investment in the React Native migration
  • +
  • the whole community for their contributions, and providing support to each other
  • +
+

Cheers to a great 2021! 🎉

+ + \ No newline at end of file diff --git a/blog/2021/01/19/docusaurus-2020-recap.html.html b/blog/2021/01/19/docusaurus-2020-recap.html.html new file mode 100644 index 0000000000..a4157faf59 --- /dev/null +++ b/blog/2021/01/19/docusaurus-2020-recap.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2021/03/09/releasing-docusaurus-i18n.html b/blog/2021/03/09/releasing-docusaurus-i18n.html new file mode 100644 index 0000000000..52160e35ed --- /dev/null +++ b/blog/2021/03/09/releasing-docusaurus-i18n.html @@ -0,0 +1,115 @@ + + + + + +Releasing Docusaurus i18n | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Releasing Docusaurus i18n

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

+

Translate your site

+

You can translate a Docusaurus site in 3 simple steps:

+
    +
  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. +
  3. Translate: put the translation files at the correct filesystem location
  4. +
  5. Deploy: build and deploy your site using a single or multi-domain strategy
  6. +
+

The i18n support is very flexible and based on the filesystem.

+

The i18n tutorial is the best way to get started, and we provide help to use Git or Crowdin.

+

Design decisions

+

The goals of the Docusaurus i18n system are:

+
    +
  • Simple: just put the translated files in the correct filesystem location
  • +
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • +
  • Flexible deployment options: single, multiple domains, or hybrid
  • +
  • Modular: allow plugin authors to provide i18n support
  • +
  • Low-overhead runtime: documentation is mostly static and does not require a heavy JS library or polyfills
  • +
  • Scalable build-times: allow building and deploying localized sites independently
  • +
  • Localize assets: an image of your site might contain text that should be translated
  • +
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • +
  • Easy to use with Crowdin: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2
  • +
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • +
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • +
  • Default translations: classic theme labels are translated for you in many languages
  • +
+

Showcase

+

We worked with a few volunteers to dogfood the i18n support before releasing it.

+

Jest: upgrading Docusaurus

+

We have made it possible to upgrade a translated Docusaurus 1 site to Docusaurus 2.

+

Jest, using Docusaurus 1 and Crowdin was one of those sites.

+

The Docusaurus 2 migration was successful and the new site is now deployed in production (announcement post).

+

Jest&#39;s website front page in Japanese

+

Redwood: adopting Docusaurus

+

Redwood is a React full-stack Jamstack framework.

+

They were looking for a solution to create an internationalized learning platform, and became early adopters of Docusaurus 2 i18n for learn.redwoodjs.com, using Crowdin to get it translated to French.

+

Redwood&#39;s doc page in French

+

Datagit: using LTR support

+

The i18n system should work with any language, including Right-to-Left languages.

+

Datagit.ir is using Farsi, and a simple configuration option is able to flip the Docusaurus theme to add the required Right-to-Left support.

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

Conclusion

+

We sincerely hope you will adopt and like the new i18n support.

+

This feature has not been an easy one, and we would like to thank everyone that got involved in this journey:

+
    +
  • Alexey for his help to make the i18n support exhaustive and even better than v1
  • +
  • Simen for volunteering and supporting the Jest migration
  • +
  • Claire for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks
  • +
  • Massoud for reviewing my work on LTR and adopting it on Datagit
  • +
  • Crowdin for their support and willingness to improve their translation SaaS
  • +
  • The Docusaurus community for their patience, and providing many useful feedbacks on GitHub
  • +
+

Thanks for reading.

+

🙏 And please, add your brand new i18n sites to our showcase page. We accept any all polished Docusaurus site here, and we are working on a redesign allowing you to filter sites by features.

+ + \ No newline at end of file diff --git a/blog/2021/03/09/releasing-docusaurus-i18n.html.html b/blog/2021/03/09/releasing-docusaurus-i18n.html.html new file mode 100644 index 0000000000..fdfbb17fa7 --- /dev/null +++ b/blog/2021/03/09/releasing-docusaurus-i18n.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2021/05/12/announcing-docusaurus-two-beta.html b/blog/2021/05/12/announcing-docusaurus-two-beta.html new file mode 100644 index 0000000000..d7057bb035 --- /dev/null +++ b/blog/2021/05/12/announcing-docusaurus-two-beta.html @@ -0,0 +1,110 @@ + + + + + +Announcing Docusaurus 2 Beta | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Announcing Docusaurus 2 Beta

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joel Marcey
Developer Advocate at Meta
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast

After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

+

Docusaurus adoption

+

Don't fear the beta tag!

+

Docusaurus 2 is widely adopted and growing fast:

+

Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.

+

To get a fuller understanding of the quality of current Docusaurus 2 sites, our new showcase page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!

+

Don't miss our favorite sites; they all stand out with something unique:

+

A screenshot of the showcase&#39;s favorites section, with 12 cards each displaying the information and preview of one site

+

Why was Docusaurus v2 in alpha for so long?

+

It's hard to believe that the first alpha release v2.0.0-alpha.0 was 2 years ago 😳 , unusually long for a software alpha.

+

As this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached feature parity with Docusaurus 1 with i18n, and it has been successfully adopted by many Docusaurus sites (see i18n showcase).

+

We're now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.

+

What are the goals of the beta?

+

Now that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.

+

In addition, we will use the beta phase to improve our theming system.

+

We want to make it:

+
    +
  • +

    easier to implement a custom theme, including for ourselves. We want to provide multiple official themes (including Tailwind CSS) for a long time.

    +
  • +
  • +

    safer to extend an existing theme: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.

    +
  • +
+

We will build a better theming infrastructure and refactor the classic theme to use it.

+

If you customize your site, you may find these planned improvements quite valuable.

+

What's new?

+

In case you missed it, we recently shipped two major improvements:

+ +

What's next?

+

Shipping the official 2.0 release!

+

To get there, we will continue to fix bugs and implement the most wanted features, including:

+ +

Conclusion

+

This is an exciting time for Docusaurus.

+

We are inspired by the positive feedback about Docusaurus, and discover new sites online every single day.

+

We are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.

+

Thank you to everyone for reading and to the entire community who supports Docusaurus. 🤗

+ + \ No newline at end of file diff --git a/blog/2021/05/12/announcing-docusaurus-two-beta.html.html b/blog/2021/05/12/announcing-docusaurus-two-beta.html.html new file mode 100644 index 0000000000..7dba54a3ae --- /dev/null +++ b/blog/2021/05/12/announcing-docusaurus-two-beta.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2021/11/21/algolia-docsearch-migration.html b/blog/2021/11/21/algolia-docsearch-migration.html new file mode 100644 index 0000000000..8457e50c78 --- /dev/null +++ b/blog/2021/11/21/algolia-docsearch-migration.html @@ -0,0 +1,106 @@ + + + + + +DocSearch migration | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

DocSearch migration

· 3 min read
Clément Vannicatte
Software Engineer @ Algolia
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

+

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

+

Upgrading your Docusaurus site

+

In the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.

+

This email will include a new appId and apiKey to use in your Docusaurus configuration.

+

The only things you have to do:

+
    +
  • Join the Algolia application (eventually creating a new Algolia account)
  • +
  • Update your site configuration.
  • +
+
docusaurus.config.js
const config = {
themeConfig: {
algolia: {
appId: '<NEW_APP_ID>',
apiKey: '<NEW_SEARCH_API_KEY>',
},
},
};

module.exports = config;
+
info

appId is now required.

These keys are not secrets and can be added to your Git repository.

+

DocSearch has a new home!

+

What is DocSearch?

+

DocSearch is a program created by Algolia, which offers search to technical documentation of Open Source projects and technical blogs for free.

+

You can read more here, and apply if you'd like to give it a try!

+

What is this migration about?

+

Motivation

+

With the upcoming stable release of DocSearch UI, we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.

+

What's new?

+

DocSearch now leverages the Algolia Crawler, which includes a web interface that will allow you to:

+
    +
  • Start, schedule and monitor your crawls
  • +
  • Edit your config file from a live editor
  • +
  • Test your results with DocSearch v3
  • +
+

The Algolia crawler front page showing the project&#39;s overview, such as last complete crawl and indices

+

The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.

+

But also, more Algolia features in your own Algolia app:

+
    +
  • Team management
  • +
  • Browse and see how your records are indexed in Algolia
  • +
  • Try other Algolia features with free trials
  • +
+

The Algolia index overview page, showing various filters and the details of every single index

+

The Algolia index analytics page, showing trends for total users, total searches, etc.

+

And of course, a lot more, for free.

+

FAQ

+

I'm using Docusaurus and DocSearch, can I migrate?

+

At the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you'll be contacted as soon as your Algolia app is ready!

+

Where can I read more about this?

+

We wrote a small migration guide but you'll have more detailed information in the migration email.

+

I received the migration email but the invite expired

+

Please contact us via either email or DocSearch's Discord or on Docusaurus's Discord #algolia channel

+

I have feedback!

+

For any feedback regarding our documentation or the DocSearch UI component, you can open an issue on our GitHub repository, but also contact us via the methods above.

+

Can I still run my own DocSearch instance?

+

In favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved DocSearch scraper and DocSearch v2, but the repositories will still be available and open to pull requests.

+

The previous documentation (now called legacy) remains available as well as our run your own guide.

+ + \ No newline at end of file diff --git a/blog/2021/11/21/algolia-docsearch-migration.html.html b/blog/2021/11/21/algolia-docsearch-migration.html.html new file mode 100644 index 0000000000..5f44f81cf3 --- /dev/null +++ b/blog/2021/11/21/algolia-docsearch-migration.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2022/01/24/docusaurus-2021-recap.html b/blog/2022/01/24/docusaurus-2021-recap.html new file mode 100644 index 0000000000..c435fdca7f --- /dev/null +++ b/blog/2022/01/24/docusaurus-2021-recap.html @@ -0,0 +1,147 @@ + + + + + +Docusaurus 2021 Recap | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2021 Recap

· 7 min read
Joshua Chen
Working hard on Docusaurus

Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!

+

We've reached full feature parity with v1 after the release of internationalization, announced our first beta, and welcomed significantly more users this year.

+

The official v2 release is just around the corner! Follow the roadmap issue for any latest news.

+

+

Highlights

+

Let's begin by going over a few highlights this year. Remember the todo-list from half a year ago? Time to take it out again and see how far we've come!

+
    +
  • Internationalization: officially released four months after its initial landing in late 2020. Seen great success in many projects
  • +
  • Autogenerated sidebars: no need to maintain a big sidebars.js anymore
  • +
  • Webpack 5: significantly improved build performance
  • +
  • Trailing slash config: seamless integration with any content hosting provider
  • +
  • Redesigned mobile navigation: mobile users now enjoy all navigation features as on desktop
  • +
  • UI improvements: more accessible quotes, better admonitions, back-to-top button...
  • +
  • Blog multi-authors: credit all the amazing contributors that collaborated on one blog post!
  • +
  • More blog features: archive page, structured data for SEO, full post content in feeds – empowering you to ship a fully-featured blog in no time
  • +
  • Asset collocation: no need for a bloated static folder anymore: colocate your images with Markdown files
  • +
  • Sidebar category index pages: category labels can now be associated with pages, enabling better doc organization
  • +
+

Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!

+ +

npm

+

Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.

+

Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There&#39;s a sharp drop from 90000 to 40000 just before the Jan 2022 line.

+

(Ah, the classic Christmas dip...)

+

We released 18 versions, going from 2.0.0-alpha.71 to 2.0.0-beta.14. That's one release every 20 days!

+

GitHub

+
    +
  • Stars: 20,460 → 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!
  • +
  • Total contributors: 512 → 773 (+51.0% y/y)
  • +
  • Dependents: 5,039 → 14,579 (+189.3% y/y) for v2, and 6,311 → 7,581 (+20.1% y/y) for v1
  • +
  • Commits: 1,187 commits in the past year, averaging 23 commits every week
  • +
  • Issues: 619 issues opened, 505 of them eventually resolved
  • +
  • A new core team member (yep, that's me 😝)
  • +
+

Our star trend is also very positive. Compared to similar projects, we are growing at a faster rate:

+

Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.

+

With an 8.4k increase in stars, we are ranked number 3 in this year's JavaScript rising stars of static site generators, preceded only by Next.js and Astro.

+

Docusaurus placing 3rd in the &quot;Static Sites&quot; ranking list

+ +

Our showcase has welcomed a few new "favorite" sites that showcase the true potential of Docusaurus 2's pluggable architecture.

+ +

Iota wiki light modeIota wiki dark mode

+ +

Dyte light modeDyte dark mode

+ +

Ionic light modeIonic dark mode

+ +

Courier

+

The creativity of Docusaurus users is beyond our imagination 🤩 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to have it in our showcase.

+

Community

+

As an active moderator on Discord, I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other – case in point, I was formerly a community contributor before becoming a maintainer.

+

We are constantly mentioned on Twitter with inspirational feedback:

+
+

@docusaurus is amazing! cant believe it's THAT simple to use.

+
+
+

No extra plugins, tooling or compilation steps. It just works out of the box.

+
+
+

I love @docusaurus. I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.

+
+

And we keep every one of them in our little box 😄 If you enjoy Docusaurus yourself, keep tagging us with your comments!

+

As we approach the official release, we are interested in knowing more about what people are doing out there: plugin authors, creators of customized sites, and all new users – please keep us posted about your achievements so we can steer our development to better serve your needs.

+

Going forward

+

In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated milestone to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a more robust theming workflow, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:

+
    +
  • Guidelines on component organization. We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need.
  • +
  • Improvements to the swizzle CLI. We want users to use it with delight and let it aid you through all possible swizzling scenarios.
  • +
  • Refactoring our theme APIs. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.
  • +
  • Docs. We want our docs to be maximally accessible to everyone – from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.
  • +
+

Read more about plans for Docusaurus 2.0 in this roadmap issue. 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!

+

As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for architectural changes in 3.0!

+

With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.

+

We'd like to express our gratitude to all the contributors in 2021, including:

+
    +
  • The core team: Alexey Pyltsyn, Sébastien Lorber, Joshua Chen, and Yangshun Tay for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features
  • +
  • Joel Marcey for creating Docusaurus and supporting its development all along
  • +
  • The Algolia team for helping Docusaurus users migrate to the new DocSearch and answering search-related questions
  • +
  • All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord
  • +
+

So long, 2021, and let's greet a great 2022!

+ + \ No newline at end of file diff --git a/blog/2022/01/24/docusaurus-2021-recap.html.html b/blog/2022/01/24/docusaurus-2021-recap.html.html new file mode 100644 index 0000000000..a32ba247b8 --- /dev/null +++ b/blog/2022/01/24/docusaurus-2021-recap.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2022/08/01/announcing-docusaurus-2.0.html b/blog/2022/08/01/announcing-docusaurus-2.0.html new file mode 100644 index 0000000000..8158877dd3 --- /dev/null +++ b/blog/2022/08/01/announcing-docusaurus-2.0.html @@ -0,0 +1,247 @@ + + + + + +Announcing Docusaurus 2.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Announcing Docusaurus 2.0

· 13 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joshua Chen
Working hard on Docusaurus
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast
Paul O’Shannessy
Engineering Manager at Meta
Joel Marcey
Co-creator of Docusaurus 1

Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

+

social-card image

+ +
We are on ProductHunt and Hacker News!

Now is the best time to show your love for Docusaurus!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+
tip

In a hurry? Check what's new in Docusaurus 2.0!

+

What is Docusaurus exactly?

+

Docusaurus is a static site generator that helps you ship beautiful documentation websites in no time.

+

Focus on your content: just write Markdown files. Docusaurus will generate an optimized website for you that's easy to host anywhere.

+

Docusaurus is full-featured and very flexible: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to adapt the UI to match your branding so that it integrates nicely with your main website or documentation portal. Its usage of React enables a modern client-side navigation, and the ability to build an interactive documentation.

+

Introducing Slash

+

The Docusaurus philosophy is akin to the Pareto principle: you can get 80% of the results for 20% of the effort. This enables you to compete with top-notch documentation sites with minimal effort.

+

Unless you're spinning up a documentation team with engineering resources, you +probably want Docusaurus!

Rachel Nabors
Rachel NaborsFormer ReactJS & React-Native docs manager
+

Docusaurus aims to be the best documentation tool, but you can use it for other use-cases as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!

+

Using Docusaurus for my tech blog has been a fantastic choice. It looks +tremendous out-of-the-box and the awesome DX means I write way more

Johnny Reilly
Johnny ReillyGroup Principal Engineer at Investec
+
tip

Try Docusaurus now with our online playgrounds and 5 minutes tutorial ⏱️

+

The story behind Docusaurus

+

Docusaurus was created at Facebook Open Source in 2017 (now Meta Open Source). We had a lot of internal and open source projects to document. It's complicated enough to write good documentation, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to focus on the content, and Markdown is great for that.

+

At that time, our solution was to copy/paste a Jekyll template over and over again. This naturally became hard to maintain, so we created a tool to solve our own pain once for all.

+

Docusaurus v1 was born!

+

Birth of Slash

+

It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as Prettier, Babel, React-Native, KaTeX, and of course Docusaurus v1 itself.

+ +
+
note

Notice that the sample sites above use different colors, but still look quite the same.

+

Toward Docusaurus 2.0

+

Docusaurus v1 has been very successful, but we started to question some architectural choices:

+
    +
  • React was only used as a server-side templating language, and not used on the client
  • +
  • Theming system was pretty limited, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations
  • +
  • The docs versioning system was confusing, since it was based on a diff algorithm
  • +
  • The codebase was monolithic, neither well-tested nor easy to extend
  • +
+

Docusaurus v2 was rebuilt from the ground up with a new modular architecture:

+
    +
  • React is now also used on the client, enabling a modern Single Page Application navigation
  • +
  • Plugins empower the community to contribute useful features as third-party packages
  • +
  • Theming is more flexible than ever
  • +
  • Docs versioning is now based on snapshot copies, much easier to understand
  • +
  • We kept everything good from v1: docs, blog, pages, versioning, i18n...
  • +
  • We implemented several new features
  • +
+

More details in the Docusaurus 2 project announcement and v1 to v2 migration guide

+

Who uses Docusaurus 2.0?

+

Despite being in pre-release, it didn't take long for Docusaurus v2 to outgrow Docusaurus v1 in terms of NPM downloads:

+

NPM downloads: v2 outgrows v1

+

Our GitHub star trend is very positive, competing with major frameworks:

+

GitHub stars: Docusaurus is well-positioned

+

Today, Docusaurus v2 has already been a great success even before its launch:

+ + +
+
tip

Please add your site to our site showcase! It only takes a few seconds: just post a comment here.

+

We use Docusaurus everywhere now and love it

Max Lynch
Max LynchIonic co-founder and CEO
+

We've been using V2 since January and it has been great

Supabase
SupabaseOpen Source Firebase alternative
+

Docusaurus is next level easy for literally everything you would need for +documentation in your project.

Gabriel Csapo
Gabriel CsapoStaff Software Engineer at LinkedIn
+

Docusaurus is awesome. We use it

Matt Gregg
Matt GreggSenior Front End Developer at Shopify
+

What's New in 2.0?

+

It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the most impactful.

+

MDX

+

MDX allows you to interleave React components in Markdown. This enables you to build top-notch interactive documentation experiences very easily.

+

A demo is worth a thousand words:

+
docs/my-document.mdx
### Give it a try: press that button!

import ColorModeToggle from '@theme/ColorModeToggle';

<ColorModeToggle/>
+
http://localhost:3000

Give it a try: press that button!

+
info

MDX has its own plugin system. You to customize your Markdown authoring experience, and even create your own Markdown syntax.

+

Docusaurus + MDX is great: we were able to implement a beautiful two-pane +layout and give the author fine-grained control on the placement of code and +corresponding prose.

Hamel Husain
Hamel HusainHead Of Data Science at Outerbounds
+

File system conventions

+

Our goal is to make Docusaurus very intuitive to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.

+
+
+

Using the auto-generated sidebars makes it so simple to just create a page and +not worry about any other configuration.

Paul Armstrong
Paul ArmstrongPrincipal Engineer at Microsoft
+

Plugins

+

Docusaurus now has a modular architecture with a plugin system — our core features like docs, blog, pages, and search are all powered by individual plugins.

+

More importantly, it enables our community to enhance Docusaurus with additional features.

+

Let's highlight some examples:

+ +

redocusaurus plugin example

+ +

shiki-twoslash plugin example

+

The plugin API was a breeze to use, and powerful enough that I could port the +code sample renderer from the TypeScript website site in a couple of hours.

Orta Therox
Orta TheroxFormer TypeScript core team at Microsoft
+ +

local search plugin example

+
tip

We have a curated list of outstanding plugins in our community resources page.

+

The plugin system in Docusaurus v2 has made expanding 1Password's developer +portal so easy and fun. Super excited to show you what we've got cooking up.

Jody Heavener
Jody HeavenerSenior Developer at 1Password
+

Theming

+

Theming is one of the most important features of Docusaurus: we believe a professional documentation site should respect your company's branding and create a consistent experience.

+

Docusaurus theming gives a lot of flexibility on multiple levels:

+
    +
  • Customize CSS variables to adjust colors, fonts, and more
  • +
  • Provide your own CSS stylesheets
  • +
  • Implement your own theme from scratch
  • +
  • Override any React component provided by our default theme: we call this swizzling
  • +
+

I love Docusaurus Swizzling feature. It’s opinionated and flexible at the same +time. This is super cool since a framework usually needs to sacrifice one for +the other.


+Hung Viet Nguyen
+Hung Viet NguyenCreator of JestPreview
+

This enables users willing to invest a bit more time on customizations to build sites that look different from others.

+ +

So far it’s working out really nicely. It’s been really easy to style up the +way that we wanted it to look. No blockers at all.

Nader Dabit
Nader DabitWeb3 developer, Developer DAO founder
+

Other features

+

Docusaurus 2 comes with a very long list of useful features:

+
    +
  • Theme: dark mode, better UI and UX, flexible themeConfig options...
  • +
  • Docs versioning: flexible plugin options to adapt to your workflow
  • +
  • Docs sidebar: collapsible category, category index pages...
  • +
  • Blog: multiple authors, authors map, archive page...
  • +
  • Markdown: tabs, math equations, live code blocks, linking, flexible front matter...
  • +
  • Search: use the new Algolia DocSearch 3 experience
  • +
  • Assets: make it easy to incorporate images and other kinds of files
  • +
  • Internationalization: config options, default theme translations...
  • +
  • Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...
  • +
  • SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • TypeScript support for config files, plugins, custom pages and theme authors
  • +
  • Playgrounds: assess Docusaurus easily from your browser with docusaurus.new
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working
  • +
+

Recently, I was shocked at how good Docusaurus is out of the box. Super solid, +a good bit of configuration without being overwhelming, and the ability to +really customize the styling if you're braver than I am.

Alex DeBrie
Alex DeBrieAWS Data Hero, author of The DynamoDB Book
+

Why 2.0 now?

+

Many enthusiastic followers of ours have been curious why it took us 4 years to release Docusaurus 2.0, considering the beta is already successful and widely used in production.

+

The reason is that we aim to respect Semantic Versioning, which means we will be incrementing the major version number whenever we release a breaking change.

+

It is important for multiple reasons:

+
    +
  • It guarantees simple minor version upgrades, as long as you only use the public API
  • +
  • It follows front-end ecosystem conventions
  • +
  • A new major version is an opportunity to thoroughly document breaking changes
  • +
  • A new major/minor version is an opportunity to communicate new features through a blog post
  • +
+

The problem is that our flexible theming system inherently creates a very implicit API surface on which it is hard to know what is a breaking change in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our public API, so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.

+
info

From now on, Docusaurus will release new major versions more frequently. In practice, you can expect a new major version every 2 to 4 months.

Major version numbers are not sacred, but we still group breaking changes together and avoid releasing major versions too often.

Check our release process documentation for details.

+

What's Next?

+

Slash Up and Running

+

The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will backport retro-compatible changes in Docusaurus 2.x minor versions to make them available as soon as possible to the community on a stable channel.

+

A sample of the features on our roadmap for the upcoming major versions of Docusaurus:

+ +

Thank You

+

We'd like to express our gratitude to all our contributors, including:

+ +

We'd like to thank in particular all our Docusaurus 2.0 early adopters for assessing its alpha, beta and canary releases, providing a ton of invaluable feedback. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.

+

At Meta Open Source, Docusaurus is one of our most successful projects. We can't wait to see all the outstanding documentation websites that you will create! Don't forget to submit them to our site showcase!

+

Now, let your imagination run wild 🤪!

+

— Slash

+
We are on ProductHunt and Hacker News!

🙏 Share your experience using Docusaurus with the community!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+

Slash plushies

+ + \ No newline at end of file diff --git a/blog/2022/08/01/announcing-docusaurus-2.0.html.html b/blog/2022/08/01/announcing-docusaurus-2.0.html.html new file mode 100644 index 0000000000..d56720e6e1 --- /dev/null +++ b/blog/2022/08/01/announcing-docusaurus-2.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/2022/09/01/docusaurus-2.1.html b/blog/2022/09/01/docusaurus-2.1.html new file mode 100644 index 0000000000..c0031e7a26 --- /dev/null +++ b/blog/2022/09/01/docusaurus-2.1.html @@ -0,0 +1,87 @@ + + + + + +Docusaurus 2.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2.1

· 2 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 2.1, our very first minor version release.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.1 social card

+

Highlights

+

DocCardList improvements

+

In #8008, we simplified the usage of the<DocCardList> component, that is notably used on sidebar category generated index pages.

+

The items prop is now optional, and will be automatically inferred from the content of the parent sidebar category:

+
import DocCardList from '@theme/DocCardList';
- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';

- <DocCardList items={useCurrentSidebarCategory().items}/>
+ <DocCardList/>
+

Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category.

+

simplified DocCardList component

+

noindex improvements

+

We improved the support of the noindex meta robots directive, a way to signal search engines you don't want a specific page to be indexed.

+

In #7963, we allow noindex to be configured on a per-docs-version basis.

+

Use the following plugin options to tell crawlers you don't want the 1.0.0 version to be indexed:

+
const options = {
versions: {
'1.0.0': {
noIndex: true,
},
},
};
+

In practice, Docusaurus will add the following meta to each page of that version:

+
<meta name="robots" content="noindex, nofollow" />
+

In #7964, we also fixed a bug where the sitemap plugin would still contain pages that have a noindex directive. Now the sitemap plugin will reliably filter out all the pages containing noindex directives.

+

Overriding default meta tags

+

In #7952, it becomes possible to override default html meta tags you couldn't before:

+
<>
{siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</>
+

It is now possible to use <Head> or themeConfig.metadata:

+
    +
  • to override the viewport meta
  • +
  • to override the robots meta: you could mark your site as noIndex, but except for specific pages that should be indexed
  • +
+

Ukrainian translations

+

In #7953, we added default classic theme translations for the Ukrainian language.

+

Other changes

+

Check the 2.1.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/2022/09/01/docusaurus-2.1.html.html b/blog/2022/09/01/docusaurus-2.1.html.html new file mode 100644 index 0000000000..7fa16e872d --- /dev/null +++ b/blog/2022/09/01/docusaurus-2.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/archive.html b/blog/archive.html new file mode 100644 index 0000000000..248cb55226 --- /dev/null +++ b/blog/archive.html @@ -0,0 +1,58 @@ + + + + + +Archive | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/archive.html.html b/blog/archive.html.html new file mode 100644 index 0000000000..32fce0472b --- /dev/null +++ b/blog/archive.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html deleted file mode 100644 index e420c985a3..0000000000 --- a/blog/archive/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Archive | My Site - - - - - - - - \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index 351ad53fb5..a43a4b8443 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -1,99 +1,1696 @@ - https://your-docusaurus-site.example.com/blog - My Site Blog - 2021-08-26T00:00:00.000Z + https://docusaurus.io/blog + Docusaurus Blog + 2024-03-29T00:00:00.000Z https://github.com/jpmonette/feed - - My Site Blog - https://your-docusaurus-site.example.com/img/favicon.ico + + Docusaurus Blog + https://docusaurus.io/img/docusaurus.ico + Copyright © 2024 Facebook, Inc. - <![CDATA[Welcome]]> - https://your-docusaurus-site.example.com/blog/welcome - - 2021-08-26T00:00:00.000Z - - Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

+ <![CDATA[Docusaurus 3.2]]> + https://docusaurus.io/blog/releases/3.2 + + 2024-03-29T00:00:00.000Z + + We are happy to announce Docusaurus 3.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Faster builds

+

We worked hard to reduce the time it takes to build a Docusaurus site in production mode.

+

Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.

+

Let's take an example. Our benchmark on the React Native website upgrading to v3.2 reports the following results:

    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • +
  • 🔥 Cold builds: 95s ➡️ 66s (~30% faster)
  • +
  • 🔥 Incremental builds: 55s ➡️ 22s (~60% faster)
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
+

The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements.

+

Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our performance issue for upcoming improvements.

+
What is the difference between a cold build and an incremental build?

A cold build is when the Docusaurus caches are empty, generally after running docusaurus clear.

An incremental build happens when you run another time the docusaurus build command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it's based on Webpack persistent caching. To enable incremental builds on your CI server, you can persist the node_modules/.cache folder across builds.

+

Faster Dev Server

+

We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.

+

The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster 🔥.

+

We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result.

+

MDX partials table-of-contents

+

With #9684, Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.

+

Docusaurus and MDX allows you to import one Markdown file into another. We usually call the imported Markdown file a "partial", and use the _ prefix so that this file does not lead to the creation of a new page.

+
myDoc.mdx
# My Doc

## Doc heading

Content is imported from another MDX file:

import ImportedDoc from './\_importedDoc.mdx';

<ImportedDoc />
+
_myPartial.mdx
## Partial heading

Some paragraph
+

Previously, the heading Partial heading did not appear in the table-of-contents, but now it will!

+

Blog improvements

+

We improved the blog plugin with several new options to make it even more powerful and flexible:

+
    +
  • #9912: you can now display the last update time and author of a blog post, a feature the docs plugin already had.
  • +
  • #9886: a new processBlogPosts option allow you to filter/transform/sort blog posts.
  • +
  • #9838: a new pageBasePath option allows you to customize the blog pagination URL segment (/blog/page/2)
  • +
+

Sitemap lastmod

+

With #9954, the sitemap plugin has a new lastmod option that can now emit a <lastmod> tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog last_update front matter.

+

We also made it possible to opt-out of emitting <priority> and <frequency> tags, which are generally ignored by crawlers (notably Google).

+

We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:

+
{
lastmod: 'date',
priority: null,
changefreq: null,
}
+

Other changes

+
    +
  • #9687: new Vercel Analytics plugin
  • +
  • #9681 and #9442: docusaurus swizzle and create-docusaurus CLIs now ask users if they prefer to use TypeScript
  • +
  • #9928: new Icelandic translation
  • +
  • #9928: new allContentLoaded plugin lifecycle (experimental)
  • +
+

Check the 3.2.0 changelog entry for an exhaustive list of changes.

]]>
Sébastien Lorber - https://sebastienlorber.com + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Docusaurus 3.1]]> + https://docusaurus.io/blog/releases/3.1 + + 2024-01-05T00:00:00.000Z + + We are happy to announce Docusaurus 3.1.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Broken anchors checker

+

In #9528, we improved the built-in broken links checker to also detect broken anchors.

+

Docusaurus blog post social card

+
Make it fail fast

The new onBrokenAnchors option has value warn by default, for retro-compatibility reasons.

We recommend to turn it to throw and fail your CI builds instead of deploying broken anchors to productions.

+
note

For users and plugin authors implementing custom <Heading> and <Link> components, we provide a new useBrokenLinks React hook API.

Most Docusaurus users don't need to care about it, built-in components (docusaurus/Link and @theme/Heading) already use it internally.

+

parseFrontMatter hook

+

In #9624, we added a new siteConfig.markdown.parseFrontMatter function hook.

+

This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.

+
docusaurus.config.js
export default {
markdown: {
parseFrontMatter: async (params) => {
// Reuse the default parser
const result = await params.defaultParseFrontMatter(params);

// Process front matter description placeholders
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');

// Create your own front matter shortcut
if (result.frontMatter.i_do_not_want_docs_pagination) {
result.frontMatter.pagination_prev = null;
result.frontMatter.pagination_next = null;
}

// Rename an unsupported front matter coming from another system
if (result.frontMatter.cms_seo_summary) {
result.frontMatter.description = result.frontMatter.cms_seo_summary;
delete result.frontMatter.cms_seo_summary;
}

return result;
},
},
};
+

Read the front matter guide and the parseFrontMatter API ref for details.

+

Other changes

+

Other notable changes include:

+
    +
  • #9674: add siteConfig.markdown.remarkRehypeOptions to pass options to remark-rehype, letting you customize things such as MDX footnote label
  • +
  • #9671: add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML
  • +
  • #9610: enable CLI port configuration via PORT environment variable
  • +
  • #9477: complete Brazilian Portuguese (pt-BR) translations
  • +
+

Check the 3.1.0 changelog entry for an exhaustive list of changes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Announcing Docusaurus 3.0]]> + https://docusaurus.io/blog/releases/3.0 + + 2023-10-31T00:00:00.000Z + + Today, we are happy to announce Docusaurus 3.0! 🥳

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

+

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

+

v3.0 social-card image

+ +

We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, upgrading to MDX v3 is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding compatibility options for MDX v1.

+

The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:

+ +
About Docusaurus v2

According to our release process, Docusaurus v2 has now entered maintenance mode. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.

+ +

Breaking changes

+

This section only gives you a quick glance. All the breaking changes are thoroughly documented in the v3 upgrade guide.

+

Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:

+
    +
  • Node.js v16 ➡️ v18
  • +
  • React v17 ➡️ v18
  • +
  • MDX v1 ➡️ v3
  • +
  • TypeScript v4 ➡️ v5
  • +
  • prism-react-renderer v1 ➡️ v2
  • +
  • react-live v2 ➡️ v4
  • +
  • Mermaid v9 ➡️ v10
  • +
  • import-fresh v3 ➡️ jiti v1
  • +
  • remark-emoji v2 ➡️ v4
  • +
+

A typical package.json dependency upgrade looks like:

+
package.json
 {
"dependencies": {
// upgrade to Docusaurus v3
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
// upgrade to MDX v3
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^3.0.0",
// upgrade to prism-react-renderer v2.0+
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
// upgrade to React v18.0+
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
// upgrade Docusaurus dev dependencies to v3
- "@docusaurus/module-type-aliases": "2.4.3",
- "@docusaurus/types": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
}
"engines": {
// require Node.js 18.0+
- "node": ">=16.14"
+ "node": ">=18.0"
}
}
+

Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:

+
    +
  • #9189: new default blog RSS feed limit of 20 entries
  • +
  • #9308: fix and re-introduce the :::warning admonition, deprecate :::caution
  • +
  • #9310: remove the legacy versioned sidebar id prefix, used for sites versioned before v2.0.0-beta.10 (December 2021)
  • +
  • #7966: refactor docs theme components, eventually requiring to you re-swizzle them
  • +
+

Highlights

+

Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the Docusaurus v3.0.0 release notes.

+

Markdown

+

Docusaurus v3 upgraded from MDX v1 to MDX v3:

+ +

This new MDX version is much better for content writers and plugin authors, and lays the ground for implementing new exciting Markdown features.

+
MDX v3 - the main challenge

The transition from MDX v1 to MDX v3 is the main challenge to the adoption of Docusaurus v3.

Some documents that compiled successfully under Docusaurus v2 might now fail to compile under Docusaurus v3, while others might render differently.

Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

Don't be intimidated. Most problems are easy to fix and often related to { and < characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command npx docusaurus-mdx-checker to help you get an estimate of the work to be done, and we recommend to prepare your site in advance.

If you created custom MDX plugins (Remark/Rehype), the AST is slightly different, and you might need to refactor them.

+

This notably enables us to add a CommonMark mode that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and experimental and limited (some Docusaurus features will not work). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret .md files as CommonMark in an upcoming major version, and recommend to use the .mdx extension for any file using JSX or ES modules.

+

We also introduced a new way to configure Markdown globally for your site, and plan to add more flexible options later.

+
docusaurus.config.js
export default {
markdown: {
format: 'mdx',
mermaid: true,
preprocessor: ({filePath, fileContent}) => {
return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');
},
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
+

Docusaurus now uses the remark-directive plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own custom directives such as :textDirective, ::leafDirective or :::containerDirective.

+

ESM and TypeScript configs

+

In #9317, we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.

+

Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
// your site config ...
presets: [
[
'classic',
{
// your preset config ...
} satisfies Preset.Options,
],
],
themeConfig: {
// your theme config ...
} satisfies Preset.ThemeConfig,
};

export default config;
+
sidebars.ts
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';

const sidebars: SidebarsConfig = {
docs: ['introduction'],
};

export default sidebars;
+

Unlisted content

+

Docusaurus already supported a draft: true front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.

+

In #8004, we introduced a new unlisted: true front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.

+

Unlisted content will:

+
    +
  • be excluded from sitemap.xml
  • +
  • be excluded from SEO results thanks to <meta name="robots" content="noindex, nofollow" />
  • +
  • be excluded from blog RSS feeds
  • +
  • be excluded from Algolia DocSearch results
  • +
  • be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...
  • +
+

Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an unlisted blog post:

+
/tests/blog/unlisted-post
+

React 18

+

In #8961, we upgraded to React 18. This is important, notably for the gradual adoption of Concurrent React features, as well as upcoming exciting features such as build-time React Server Components.

+

This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on How to Upgrade to React 18, notably the new automatic batching behavior.

+
Experimental support for React 18 features

React 18 comes with new features:

    +
  • <Suspense>
  • +
  • React.lazy()
  • +
  • startTransition()
  • +

Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior.

+

Automatic JSX runtime

+

Docusaurus now uses the "automatic" JSX runtime.

+

It is not needed anymore to import React in JSX files that do not use any React API.

+
src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}
+

Debug builds

+

It is now possible to build your static site in dev mode.

+
docusaurus build --dev
+
Debug React-related problems

Docusaurus will log more errors to the console, notably React 18 hydration errors through the new onRecoverableError callback.

This new build mode is particularly helpful for troubleshooting React problems. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the React Error Decoder page.

+

TypeScript

+

Docusaurus v3 now requires a minimum version of TypeScript 5.0.

+

We re-internalized the base recommended TypeScript config to a new official package:

+
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new TypeScript config files:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type {Options, ThemeConfig} from '@docusaurus/preset-classic';
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+

Code blocks

+

In #9316, we improved on syntax highlighting thanks to the prism-react-renderer v2 upgrade. For example, a bash param --save is now colored:

+
npm install --save some-package
+

The interactive code editor also upgrades to react-live v4, coming with a new sucrase compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.

+
Live Editor
function Hello() {
+  const name: string = 'World';
+  return <div>Hello {name}</div>;
+}
+
Result
Loading...
+

In #8982 and #8870, we also added magic comments support for TeX-like, Haskell-like, and WebAssembly comment syntax.

+
haskell.hs
stringLength :: String -> Int
stringLength [] = 0
stringLength (x:xs) = 1 + stringLength xs
+
matlab.m
function result = times2(n)
result = n * 2;
end
x = 10;
y = times2(x);
+

Mermaid diagrams

+

In #9305, we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.

+
Mindmap
+
Quadrant chart
+

Query-string data attributes

+

In #9028, we made it possible to set custom HTML data attributes though docusaurus-data-x query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.

+
/src/css/custom.css
html[data-navbar='false'] .navbar {
display: none;
}

html[data-red-border] div#__docusaurus {
border: red solid thick;
}
+
/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border
+

Other features

+

Other new features worth mentioning:

+ +

Read Docusaurus v3.0.0 release notes for an exhaustive list of changes.

+

Conclusion

+

This release comes with a few features, but more importantly upgrades many pieces of the Docusaurus infrastructure.

+

The MDX upgrade consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.

+

Now that we've caught up with our infrastructure, we'll be back delivering useful documentation features very soon, in upcoming minor versions.

+

We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a competitive solution that stands out for its great flexibility.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Preparing your site for Docusaurus v3]]> + https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3 + + 2023-09-29T00:00:00.000Z + + Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

+

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

+

Preparing your site for Docusaurus v3 - social card

+
warning

This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the v3.0.0-beta.0 release notes for an exhaustive list.

+
Don't be afraid

There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.

If your site is relatively small, with only a few customizations, you can probably upgrade to Docusaurus v3 immediately.

+

Preparatory work

+

Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest Docusaurus v2 version.

+

Depending on the complexity of your site, it may be a good idea to adopt the visual regression testing workflow that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.

+

We also recommend using the .mdx extension whenever you use JSX, import, or export (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, .md files will be parsed as standard CommonMark, which does not support these features. In Docusaurus v3, .md files keep being compiled as MDX files, but it will be possible to opt-in for CommonMark.

+

Preparing content for MDX v3

+

MDX is a major dependency of Docusaurus responsible for compiling your .md and .mdx files to React components.

+

MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of { and < characters.

+

Upgrading MDX comes with all the breaking changes documented on the MDX v2 and MDX v3 release blog posts. Most breaking changes come from MDX v2. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

+

Make sure to also read our updated MDX and React documentation page.

+
Ask for help

We have a dedicated MDX v3 - Upgrade Support discussion.

+

Using the MDX playground

+

The MDX playground is your new best friend. It permits to understand how your content is compiled to React components, and troubleshoot compilation or rendering issues in isolation.

+

Each MDX version comes with its own playground:

+ +
Configuring the MDX playground options for Docusaurus

To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the MDX playground:

    +
  • Use MDX
  • +
  • Use remark-gfm
  • +
  • Use remark-directive
  • +

Screenshot of the MDX playground&#39;s options panel, with only the &quot;Use MDX&quot;, &quot;Use remark-gfm&quot;, and &quot;Use remark-directive&quot; options checked

+

Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.

+
Making your content future-proof

The goal will be to refactor your problematic content so that it works fine with both versions of MDX. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.

+

Using the MDX checker CLI

+

We provide a docusaurus-mdx-checker CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.

+
npx docusaurus-mdx-checker
+

For each compilation issue, the CLI will log the file path and a line number to look at.

+

Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages

+
tip

Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3.

+
warning

This CLI is a best effort, and will only report compilation errors.

It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using visual regression tests.

+

Common MDX problems

+

We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:

+ +

These upgrades permitted us to aggregate the most common content problems, and document how to best handle them.

+

Bad usage of {

+

The { character is used for opening JavaScript expressions. MDX will now fail if what you put inside {expression} is not a valid expression.

+
example.md
The object shape looks like {username: string, age: number}
+
Error message
+

Could not parse expression with acorn: Unexpected content after expression

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: {username: string, age: number}
  • +
  • Use the HTML code: &#123;
  • +
  • Escape it: \{
  • +
+

Bad usage of <

+

The < character is used for opening JSX tags. MDX will now fail if it thinks your JSX is invalid.

+
example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template "Road to <YOUR_MINOR_VERSION>"
+
Error messages
+

Unexpected character 5 (U+0035) before name, expected a character that can start a name, such as a letter, $, or _

+
+

Expected a closing tag for <T> (1:6-1:9) before the end of paragraph end-tag-mismatch mdast-util-mdx-jsx

+
+

Expected a closing tag for <YOUR_MINOR_VERSION> (134:19-134:39) before the end of paragraph

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: Array<T>
  • +
  • Use the HTML code: &lt; or &#60;
  • +
  • Escape it: \< (unfortunately the \ will be displayed under MDX v1)
  • +
+ +

Docusaurus supports GitHub Flavored Markdown (GFM), but autolink using the <link> syntax is not supported anymore by MDX.

+
example.md
<sebastien@thisweekinreact.com>

<http://localhost:3000>
+
Error messages
+

Unexpected character @ (U+0040) in name, expected a name character such as letters, digits, $, or _; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use [text](url))

+
+

Unexpected character / (U+002F) before local name, expected a character that can start a name, such as a letter, $, or _ (note: to create a link in MDX, use [text](url))

+
+
How to prepare

Use regular Markdown links, or remove the < and >. MDX and GFM are able to autolink literals already.

example.md
sebastien@thisweekinreact.com
[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)

http://localhost:3000
[http://localhost:3000](http://localhost:3000)
+

Lower-case MDXComponent mapping

+

For users providing a custom MDXComponentmapping, components are now "sandboxed":

+
    +
  • a MDXComponent mapping for h1 only gets used for # hi but not for <h1>hi</h1>
  • +
  • a lower-cased custom element name will not be substituted by its respective MDXComponent component anymore
  • +
+
visual difference

Your MDXComponent component mapping might not be applied as before, and your custom components might no longer be used.

+
How to prepare

For native Markdown elements, you can keep using lower-case: p, h1, img, a...

For any other element, use upper-case names.

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) => <p {...props} className="my-paragraph"/>
- myElement: (props) => <div {...props} className="my-class" />,
+ MyElement: (props) => <div {...props} className="my-class" />,
};
+

Unintended extra paragraphs

+

In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected <p> tags.

+
visual difference

See how this content is rendered differently by MDX v1 and v3.

example.md
<div>Some **Markdown** content</div>
<div>
Some **Markdown** content
</div>
MDX v1 output
<div>Some **Markdown** content</div>
<div>Some **Markdown** content</div>
MDX v3 output
<div>Some <strong>Markdown</strong> content</div>
<div><p>Some <strong>Markdown</strong> content</p></div>
+
How to prepare

If you don't want an extra <p> tag, refactor content on a case by case basis to use a single-line JSX tag.

 <figure>
<img src="/img/myImage.png" alt="My alt" />
- <figcaption>
- My image caption
- </figcaption>
+ <figcaption>My image caption</figcaption>
</figure>

If your content contains "Markdown inlines" (**, *, _, [link](/path)), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.

+

Unintended usage of directives

+

Docusaurus v3 now uses Markdown Directives (implemented with remark-directive) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.

+
example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
+
Visual change

Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form.

example.md
The AWS re:Invent conf is great

Due to :Invent being parsed as a text directive, this will now be rendered as:

The AWS re
conf is great
+
How to prepare
    +
  • Use the HTML code: &#58;
  • +
  • Add a space after : (if it makes sense): : text
  • +
  • Escape it: \: (unfortunately the \ will be displayed under MDX v1)
  • +
+

Unsupported indented code blocks

+

MDX does not transform indented text as code blocks anymore.

+
example.md
    console.log("hello");
+
Visual change

The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore.

+
How to prepare

Use the regular code block syntax instead of indentation:

example.md
```js
console.log('hello');
```
+

MDX plugins

+

All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ES Modules only and do not support CommonJS anymore.

+

In practice this means that you can't do require("remark-plugin") anymore.

+
How to prepare

Docusaurus v3 now supports ES Modules configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* site config using remark plugins here */
};

If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the Docusaurus config supports the usage of an async function to let you do so.

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// site config...
};
};
+
For plugin authors

If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a dedicated support discussion to help plugin authors upgrade their code.

+

Other breaking changes

+

Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.

+

Node.js 18.0

+

Node.js 16 reached End-of-Life, and Docusaurus v3 now requires Node.js >= 18.0.

+
How to prepare

Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.

+

React 18.0

+

Docusaurus v3 now requires React >= 18.0.

+

React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.

+

Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.

+
How to prepare

Read the official React v18.0 and How to Upgrade to React 18, and look at your first-party React code to figure out which components might be affected this React 18 upgrade.

We recommend to particularly look for:

    +
  • Automatic batching for stateful components
  • +
  • New React hydration errors reported to the console
  • +
+

TypeScript 5.0

+

Docusaurus v3 now requires TypeScript >= 5.0.

+
How to prepare

Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.

+

TypeScript base config

+

The official Docusaurus TypeScript config has been re-internalized from the external package @tsconfig/docusaurus to our new monorepo package @docusaurus/tsconfig.

+

This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.

+
How to prepare

The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:

package.json
 {
"devDependencies": {
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "^3.0.0-beta.0",
}
}
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

Admonition warning

+

For historical reasons, we support an undocumented admonition :::warning that renders with a red color.

+
Warning

This is a Docusaurus v2 :::warning admonition.

+

However, the color and icon is historically wrong. Docusaurus v3 re-introduces :::warning admonition officially, documents it, and fix the color and icon.

+
warning

This is a Docusaurus v3 :::warning admonition.

+
How to prepare

If you previously used the undocumented :::warning admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use :::danger instead.

Docusaurus v3 also deprecated the :::caution admonition. Please refactor :::caution (yellow) to either :::warning (yellow) or :::danger (red).

+

Versioned sidebars

+

This breaking change will only affect Docusaurus v2 early adopters who versioned their docs before v2.0.0-beta.10 (December 2021).

+

When creating version v1.0.0, the sidebar file contained a prefix version-v1.0.0/ that Docusaurus v3 does not support anymore.

+
versioned_sidebars/version-v1.0.0-sidebars.json
{
"version-v1.0.0/docs": [
"version-v1.0.0/introduction",
"version-v1.0.0/prerequisites"
]
}
+
How to prepare

Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly.

You can remove the useless versioned prefix from your versioned sidebars.

versioned_sidebars/version-v1.0.0-sidebars.json
{
"docs": ["introduction", "prerequisites"]
}
+

Try Docusaurus v3 today

+

Docusaurus v3 is now in beta, and already used in production by React-Native, Jest, and our own website.

+

We think this new Docusaurus version is robust and ready to be deployed in production. It should be released officially soon, after receiving a positive feedback from early adopters of our community.

+

We would really appreciate it if you try upgrading and report issues on the 3.0.0-beta.0 release discussion thread.

+

For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:

+
package.json
 {
"dependencies": {
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
- "@mdx-js/react": "^1.6.22",
+ "@docusaurus/core": "3.0.0-beta.0",
+ "@docusaurus/preset-classic": "3.0.0-beta.0",
+ "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^1.3.5",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"
}
}
+

Ask for help

+

We will be there to help you upgrade through the following support channels:

+ +

Alternatively, you can look for a paid Docusaurus Service Provider to execute this upgrade for you. If your site is open source, you can also ask our community for free, benevolent help.

+

Conclusion

+

Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.

+

The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Upgrading frontend dependencies with confidence]]> + https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing + + 2023-09-22T00:00:00.000Z + + Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

+

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

+

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

+

Upgrading frontend dependencies with confidence - social card

+

This workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as React Native, Jest, and the Docusaurus site itself.

+

Docusaurus v3 comes with infrastructure changes and major dependency upgrades such as MDX v3 and React 18, which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That's why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.

+

Workflow overview

+

The general idea is pretty simple:

+
    +
  • Build your site in CI with GitHub Actions
  • +
  • Take screenshots of all sitemap.xml pages with Playwright
  • +
  • Upload them to Argos
  • +
  • Do this for both Git branches main and pr-branch
  • +
  • Compare the screenshots side-by-side in Argos
  • +
+

Argos will then report visual differences found between main and pr-branch as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.

+

Argos GitHub commit status

+

Argos GitHub PR comment

+

Argos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.

+

Check the Docusaurus Argos page to explore our own website reports.

+

Here is a more concrete example of Argos reporting a visual regression found while upgrading the React-Native website:

+

Argos GitHub PR comment

+

Workflow implementation

+

This section will describe the implementation details of each step of the workflow.

+

You will need to sign up to Argos and connect Argos to your GitHub repository

+

Dependencies

+

This workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:

+
yarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio
+

GitHub Action

+

The GitHub action is responsible for executing the workflow for each Git branch.

+

A minimal workflow could look like:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
take-screenshots:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: current

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Playwright browsers
run: yarn playwright install --with-deps chromium

- name: Build the website
run: yarn docusaurus build

- name: Take screenshots with Playwright
run: yarn playwright test

- name: Upload screenshots to Argos
run: yarn argos upload ./screenshots
+

Playwright config

+

Playwright is responsible for taking screenshots of the website previously built locally by the GitHub action.

+

A minimal Playwright config could look like:

+
playwright.config.ts
import {devices} from '@playwright/test';
import type {PlaywrightTestConfig} from '@playwright/test';

const config: PlaywrightTestConfig = {
webServer: {
port: 3000,
command: 'yarn docusaurus serve',
},
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
};

export default config;
+

Playwright test

+

A Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.

+
screenshot.spec.ts
import * as fs from 'fs';
import {test} from '@playwright/test';
import {argosScreenshot} from '@argos-ci/playwright';
import {extractSitemapPathnames, pathnameToArgosName} from './utils';

// Constants
const siteUrl = 'http://localhost:3000';
const sitemapPath = './build/sitemap.xml';
const stylesheetPath = './screenshot.css';
const stylesheet = fs.readFileSync(stylesheetPath).toString();

// Wait for hydration, requires Docusaurus v2.4.3+
// Docusaurus adds a <html data-has-hydrated="true"> once hydrated
// See https://github.com/facebook/docusaurus/pull/9256
function waitForDocusaurusHydration() {
return document.documentElement.dataset.hasHydrated === 'true';
}

function screenshotPathname(pathname: string) {
test(`pathname ${pathname}`, async ({page}) => {
const url = siteUrl + pathname;
await page.goto(url);
await page.waitForFunction(waitForDocusaurusHydration);
await page.addStyleTag({content: stylesheet});
await argosScreenshot(page, pathnameToArgosName(pathname));
});
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath);
console.log('Pathnames to screenshot:', pathnames);
pathnames.forEach(screenshotPathname);
});
+
Why do we take screenshots with Argos instead of Playwright?

Argos has a Playwright integration that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.

+
What's inside utils.ts?

This module contains implementation details that we choose to hide for clarity.

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Extract a list of pathnames, given a fs path to a sitemap.xml file
// Docusaurus generates a build/sitemap.xml file for you!
export function extractSitemapPathnames(sitemapPath: string): string[] {
const sitemap = fs.readFileSync(sitemapPath).toString();
const $ = cheerio.load(sitemap, {xmlMode: true});
const urls: string[] = [];
$('loc').each(function handleLoc() {
urls.push($(this).text());
});
return urls.map((url) => new URL(url).pathname);
}

// Converts a pathname to a decent screenshot name
export function pathnameToArgosName(pathname: string): string {
return pathname.replace(/^\/|\/$/g, '') || 'index';
}
+

Stylesheet

+

Screenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as false positive visual regressions.

+

For this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read Argos - About flaky tests docs for details.

+
screenshot.css
/* Iframes can load lazily */
iframe,
/* Avatars can be flaky due to using external sources: GitHub/Unavatar */
.avatar__photo,
/* Gifs load lazily and are animated */
img[src$='.gif'],
/* Algolia keyboard shortcuts appear with a little delay */
.DocSearch-Button-Keys > kbd,
/* The live playground preview can often display dates/counters */
[class*='playgroundPreview'] {
visibility: hidden;
}

/* Different docs last-update dates can alter layout */
.theme-last-updated,
/* Mermaid diagrams are rendered client-side and produce layout shifts */
.docusaurus-mermaid-container {
display: none;
}
+
prevent layout shifts

We recommend hiding flaky UI elements affecting layout with display: none;.

For example, the docs "Last Updated on" might render on more than 1 line, eventually "pushing" the rest of your content further down, leading to Argos detecting many different pixels.

+

Example repository

+

The slorber/docusaurus-argos-example repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.

+

Docusaurus + Argos monorepo example screenshot

+

Relevant pull-requests:

+ +
More advanced example?

Browse the Docusaurus repository for a more advanced integration:

+

Make it cheap

+

The tools we choose are implementation details of this visual regression testing workflow.

+

For Docusaurus, we choose Argos: it works well for us, and offers free and open source plans. However, you are free to adopt alternative tools.

+

In case you don't mind storing large screenshots in Git, you can also try the free, self-hosted Playwright Visual Comparisons and browse visual differences with npx playwright show-report. However, we found using a dedicated external tool is more convenient.

+

External tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.

+

Limit the number of pathnames

+

The base setup involves taking a screenshot of every single pathname found in sitemap.xml. For large sites, that can lead to a lot of screenshots.

+

You can decide to filter the pathnames to only take screenshots of the most critical pages.

+

For the Docusaurus website, do not take screenshots for versioned docs pages:

+
screenshot.spec.ts
function isVersionedDocsPathname(pathname: string): boolean {
return pathname.match(/^\/docs\/((\d\.\d\.\d)|(next))\//);
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath)
.filter(isVersionedDocsPathname);

pathnames.forEach(screenshotPathname);
});
+

Limit the workflow concurrency

+

Implementing GitHub Actions concurrency groups will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.

+
.github/workflows/argos.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
+

Run your workflow conditionally

+

It's not worth running this workflow for every single commit and pull-request.

+

For example, if someone corrects a typo in your documentation, you probably don't want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that's a bit expected!

+

For the Docusaurus website, we only run the workflow for pull-request having the Argos label:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]
types:
- opened
- synchronize
- reopened
- labeled

jobs:
take-screenshots:
if: ${{ github.ref_name == 'main' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Argos')) }}
runs-on: ubuntu-latest
steps:
# Your job steps here ...
+

There are many options to explore, such as triggering the workflow manually or only when files matching a specific pattern are modified.

+

Conclusion

+

I believe visual regression testing is underused in the frontend ecosystem.

+

Taking full-page screenshots is a low-hanging fruit that is easy to set up and can help you catch a new class of bugs that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for any kind of refactoring that shouldn't change the user interface.

+

So why not give it a try?

+

Happy hacking!

+

See also

+

Useful documentation links:

+]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Docusaurus 2.4]]> + https://docusaurus.io/blog/releases/2.4 + + 2023-03-23T00:00:00.000Z + + We are happy to announce Docusaurus 2.4.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+ +

In #8236, we made it possible to provide a new description attribute for docs sidebar items of type link and category.

+
sidebars.js
[
{
type: 'link',
label: 'Link with description',
href: 'https://docusaurus.io',
description: 'Some link description',
},
{
type: 'category',
label: 'Category with description',
description: 'Some category description',
items: [],
},
];
+

These descriptions will be used in category generated index pages.

+

Show sidebar category generated index with custom descriptions

+

Theme Query String

+

In #8708, we added the possibility to force Docusaurus to initialize itself in light or dark mode through a new docusaurus-theme query-string parameter.

+

This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.

+
/docs/?docusaurus-theme=light
+
/docs/?docusaurus-theme=dark
+

Remark plugin npm2yarn upgrade

+

In #8690, we upgraded our Remark plugin @docusaurus/remark-plugin-npm2yarn with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.

+
Run these commands!

```bash npm2yarn
npm install
npm run build
npm run myCustomScript -- --some-arg
```
+
http://localhost:3000
npm install
npm run build
npm run myCustomScript -- --some-arg
+

gtag support for multiple tracking IDs

+

In #8620 we added support for the @docusaurus/plugin-google-gtag plugin to declare multiple tracking IDs.

+
docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: [
'G-<YOUR-NEW-GA4-ID>',
'UA-<YOUR-OLD-UA-ID>',
],
},
},
],
],
};
+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023.

Docusaurus users should migrate to Google Analytics 4. Google does not permit to migrate your existing Universal Analytics data to your new Google Analytics 4 property.

To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (UA-*) and new one (G-*). Refer to the dedicated issue for details.

+

Developer Experience

+

In #8736, we improved how we render error messages and added initial support to render the full causal chain of an error (see ES2022 Error Cause).

+
tip

To see it in action, click here:

+

In #8735 we also made navbar-related error messages clearer to help users understand what they did wrong.

+

Docusaurus navbar error message screenshot

+

Translations

+

We made it possible to translate some new elements:

+
    +
  • #8677 introduces a new process.env.DOCUSAURUS_CURRENT_LOCALE (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...
  • +
  • #8616 allows to translate the navbar and footer logo alt text
  • +
+

We added default theme translation support for multiple languages:

+
    +
  • 🇭🇺 #8668: Hungarian
  • +
  • 🇳🇴 #8631: Norwegian (Bokmål)
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8674: respect prefers-reduced-motion: reduce media query
  • +
  • #8712: use a navbar item of type docSidebar in template
  • +
  • #8801: allow tabs children to be falsy
  • +
  • #8757: make search page react to external query-string changes
  • +
  • #8803: fix code block buttons position in RTL
  • +
  • #8615: fix color mode toggle when using dark navbar
  • +
  • #8699: fix navbar dropdown tab focus bug
  • +
+

Check the 2.4.0 changelog entry for an exhaustive list of changes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Docusaurus 2.3]]> + https://docusaurus.io/blog/releases/2.3 + + 2023-01-27T00:00:00.000Z + + We are happy to announce Docusaurus 2.3.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+

Highlights

+

Google Tag Manager plugin

+

Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.

+

We now have a @docusaurus/plugin-google-tag-manager package that you can use alongside or as an alternative to the existing gtag.js plugin (refer to this doc to understand when to use which solution).

+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023, and ask users to migrate to Google Analytics 4.

Therefore, we are also deprecating our existing @docusaurus/plugin-google-analytics package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the gtag.js plugin, or the Google Tag Manager plugin. Refer to the dedicated Docusaurus issue for details and questions.

+

Tabs Query String Support

+

It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ?qs-param=tab-value search parameter.

+

This feature allows deep-linking to a specific documentation tab that will pre-selected on page load.

+

When used alongside the groupId prop, the query string tab value takes precedence over the localStorage value.

+

Make sure to check the documentation and the demo below to understand how it works:

+ +
<Tabs groupId="current-os" queryString>
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
+
http://localhost:3000

Android

+

Nested admonitions

+

It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:

+
::::tip[nested admonitions]

You can now nest one admonition within another!

:::danger

Use this sparingly when it makes sense.

:::

::::
+
nested admonitions

You can now nest one admonition within another!

danger

Use this sparingly when it makes sense.

+

Blog createFeedItems

+

A new blog plugin option feedOptions.createFeedItems gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.

+
docusaurus.config.js
[
'@docusaurus/preset-classic',
{
blog: {
feedOptions: {
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
];
+

Translations

+

We added or completed the default theme translation support for multiple languages:

+ +
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8463 and #8328: fix some annoying Docusaurus layout issues
  • +
  • #8539: Algolia plugin options.searchPagePath should be correctly applied to search modal footer
  • +
  • #8462: Algolia plugin now makes it easier to transform displayed search results with custom logic
  • +
  • #8397: the deploy CLI now understands git url insteadOf config
  • +
+

Check the 2.3.0 changelog entry for an exhaustive list of changes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Docusaurus 2.2]]> + https://docusaurus.io/blog/releases/2.2 + + 2022-10-29T00:00:00.000Z + + We are happy to announce Docusaurus 2.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+ +

Highlights

+

Mermaid diagrams

+

In #7490, we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also added support recently. You can create Mermaid diagrams using Markdown code blocks:

+
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Health check
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
```
+ +
http://localhost:3000
+

Make sure to check the documentation, and the more advanced examples

+

Config headTags

+

In #8151, we added the ability to apply arbitrary HTML <head> tags to all pages of your site.

+
docusaurus.config.js
module.exports = {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'icon',
href: '/img/docusaurus.png',
},
},
],
};
+

Accessibility

+

We did several accessibility improvements:

+
    +
  • #8207: improves keyboard navigation for mobile drawer hamburger button
  • +
  • #8161: improves keyboard navigation for tabs
  • +
  • #8204: makes the skip to content button support progressive enhancement
  • +
  • #8174: improves screen reader announcement when toggling between light/dark mode
  • +
+

Developer Experience

+

We made validation stricter and improved error messages:

+
    +
  • #8234: in case of doc processing failure, prints the problematic markdown file path in the error message
  • +
  • #8192 and #8159: validates siteConfig.url more strictly and with better error message
  • +
  • #8066: makes config url and baseUrl fail-safe and less sensitive to the presence or absence of a leading or trailing slash
  • +
+

Translations

+

We completed the default theme translation support for multiple languages:

+
    +
  • 🇹🇷 #8105: completes Turkish translations
  • +
  • 🇷🇺 #8253: completes Russian translations
  • +
  • 🇫🇷 #8243: completes French translations
  • +
  • 🇯🇵 #8075: completes Japanese translations
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8210: the docusaurus swizzle CLI has a new --config option
  • +
  • #8109: mobile navigation performance optimizations, prefetch resources earlier
  • +
  • #8059: versions/locales navbar dropdowns preserve hash and querystring on navigation
  • +
  • #8227: the client redirect plugin preserves hash and querystring on redirect
  • +
+

Check the 2.2.0 changelog entry for an exhaustive list of changes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Docusaurus 2.1]]> + https://docusaurus.io/blog/2022/09/01/docusaurus-2.1 + + 2022-09-01T00:00:00.000Z + + We are happy to announce Docusaurus 2.1, our very first minor version release.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.1 social card

+

Highlights

+

DocCardList improvements

+

In #8008, we simplified the usage of the<DocCardList> component, that is notably used on sidebar category generated index pages.

+

The items prop is now optional, and will be automatically inferred from the content of the parent sidebar category:

+
import DocCardList from '@theme/DocCardList';
- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';

- <DocCardList items={useCurrentSidebarCategory().items}/>
+ <DocCardList/>
+

Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category.

+

simplified DocCardList component

+

noindex improvements

+

We improved the support of the noindex meta robots directive, a way to signal search engines you don't want a specific page to be indexed.

+

In #7963, we allow noindex to be configured on a per-docs-version basis.

+

Use the following plugin options to tell crawlers you don't want the 1.0.0 version to be indexed:

+
const options = {
versions: {
'1.0.0': {
noIndex: true,
},
},
};
+

In practice, Docusaurus will add the following meta to each page of that version:

+
<meta name="robots" content="noindex, nofollow" />
+

In #7964, we also fixed a bug where the sitemap plugin would still contain pages that have a noindex directive. Now the sitemap plugin will reliably filter out all the pages containing noindex directives.

+

Overriding default meta tags

+

In #7952, it becomes possible to override default html meta tags you couldn't before:

+
<>
{siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</>
+

It is now possible to use <Head> or themeConfig.metadata:

+
    +
  • to override the viewport meta
  • +
  • to override the robots meta: you could mark your site as noIndex, but except for specific pages that should be indexed
  • +
+

Ukrainian translations

+

In #7953, we added default classic theme translations for the Ukrainian language.

+

Other changes

+

Check the 2.1.0 changelog entry for an exhaustive list of changes.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Announcing Docusaurus 2.0]]> + https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0 + + 2022-08-01T00:00:00.000Z + + Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

+

social-card image

+ +
We are on ProductHunt and Hacker News!

Now is the best time to show your love for Docusaurus!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+
tip

In a hurry? Check what's new in Docusaurus 2.0!

+

What is Docusaurus exactly?

+

Docusaurus is a static site generator that helps you ship beautiful documentation websites in no time.

+

Focus on your content: just write Markdown files. Docusaurus will generate an optimized website for you that's easy to host anywhere.

+

Docusaurus is full-featured and very flexible: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to adapt the UI to match your branding so that it integrates nicely with your main website or documentation portal. Its usage of React enables a modern client-side navigation, and the ability to build an interactive documentation.

+

Introducing Slash

+

The Docusaurus philosophy is akin to the Pareto principle: you can get 80% of the results for 20% of the effort. This enables you to compete with top-notch documentation sites with minimal effort.

+

Unless you're spinning up a documentation team with engineering resources, you +probably want Docusaurus!

Rachel Nabors
Rachel NaborsFormer ReactJS & React-Native docs manager
+

Docusaurus aims to be the best documentation tool, but you can use it for other use-cases as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!

+

Using Docusaurus for my tech blog has been a fantastic choice. It looks +tremendous out-of-the-box and the awesome DX means I write way more

Johnny Reilly
Johnny ReillyGroup Principal Engineer at Investec
+
tip

Try Docusaurus now with our online playgrounds and 5 minutes tutorial ⏱️

+

The story behind Docusaurus

+

Docusaurus was created at Facebook Open Source in 2017 (now Meta Open Source). We had a lot of internal and open source projects to document. It's complicated enough to write good documentation, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to focus on the content, and Markdown is great for that.

+

At that time, our solution was to copy/paste a Jekyll template over and over again. This naturally became hard to maintain, so we created a tool to solve our own pain once for all.

+

Docusaurus v1 was born!

+

Birth of Slash

+

It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as Prettier, Babel, React-Native, KaTeX, and of course Docusaurus v1 itself.

+ +
+
note

Notice that the sample sites above use different colors, but still look quite the same.

+

Toward Docusaurus 2.0

+

Docusaurus v1 has been very successful, but we started to question some architectural choices:

+
    +
  • React was only used as a server-side templating language, and not used on the client
  • +
  • Theming system was pretty limited, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations
  • +
  • The docs versioning system was confusing, since it was based on a diff algorithm
  • +
  • The codebase was monolithic, neither well-tested nor easy to extend
  • +
+

Docusaurus v2 was rebuilt from the ground up with a new modular architecture:

+
    +
  • React is now also used on the client, enabling a modern Single Page Application navigation
  • +
  • Plugins empower the community to contribute useful features as third-party packages
  • +
  • Theming is more flexible than ever
  • +
  • Docs versioning is now based on snapshot copies, much easier to understand
  • +
  • We kept everything good from v1: docs, blog, pages, versioning, i18n...
  • +
  • We implemented several new features
  • +
+

More details in the Docusaurus 2 project announcement and v1 to v2 migration guide

+

Who uses Docusaurus 2.0?

+

Despite being in pre-release, it didn't take long for Docusaurus v2 to outgrow Docusaurus v1 in terms of NPM downloads:

+

NPM downloads: v2 outgrows v1

+

Our GitHub star trend is very positive, competing with major frameworks:

+

GitHub stars: Docusaurus is well-positioned

+

Today, Docusaurus v2 has already been a great success even before its launch:

+ + +
+
tip

Please add your site to our site showcase! It only takes a few seconds: just post a comment here.

+

We use Docusaurus everywhere now and love it

Max Lynch
Max LynchIonic co-founder and CEO
+

We've been using V2 since January and it has been great

Supabase
SupabaseOpen Source Firebase alternative
+

Docusaurus is next level easy for literally everything you would need for +documentation in your project.

Gabriel Csapo
Gabriel CsapoStaff Software Engineer at LinkedIn
+

Docusaurus is awesome. We use it

Matt Gregg
Matt GreggSenior Front End Developer at Shopify
+

What's New in 2.0?

+

It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the most impactful.

+

MDX

+

MDX allows you to interleave React components in Markdown. This enables you to build top-notch interactive documentation experiences very easily.

+

A demo is worth a thousand words:

+
docs/my-document.mdx
### Give it a try: press that button!

import ColorModeToggle from '@theme/ColorModeToggle';

<ColorModeToggle/>
+
http://localhost:3000

Give it a try: press that button!

+
info

MDX has its own plugin system. You to customize your Markdown authoring experience, and even create your own Markdown syntax.

+

Docusaurus + MDX is great: we were able to implement a beautiful two-pane +layout and give the author fine-grained control on the placement of code and +corresponding prose.

Hamel Husain
Hamel HusainHead Of Data Science at Outerbounds
+

File system conventions

+

Our goal is to make Docusaurus very intuitive to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.

+
+
+

Using the auto-generated sidebars makes it so simple to just create a page and +not worry about any other configuration.

Paul Armstrong
Paul ArmstrongPrincipal Engineer at Microsoft
+

Plugins

+

Docusaurus now has a modular architecture with a plugin system — our core features like docs, blog, pages, and search are all powered by individual plugins.

+

More importantly, it enables our community to enhance Docusaurus with additional features.

+

Let's highlight some examples:

+ +

redocusaurus plugin example

+ +

shiki-twoslash plugin example

+

The plugin API was a breeze to use, and powerful enough that I could port the +code sample renderer from the TypeScript website site in a couple of hours.

Orta Therox
Orta TheroxFormer TypeScript core team at Microsoft
+ +

local search plugin example

+
tip

We have a curated list of outstanding plugins in our community resources page.

+

The plugin system in Docusaurus v2 has made expanding 1Password's developer +portal so easy and fun. Super excited to show you what we've got cooking up.

Jody Heavener
Jody HeavenerSenior Developer at 1Password
+

Theming

+

Theming is one of the most important features of Docusaurus: we believe a professional documentation site should respect your company's branding and create a consistent experience.

+

Docusaurus theming gives a lot of flexibility on multiple levels:

+
    +
  • Customize CSS variables to adjust colors, fonts, and more
  • +
  • Provide your own CSS stylesheets
  • +
  • Implement your own theme from scratch
  • +
  • Override any React component provided by our default theme: we call this swizzling
  • +
+

I love Docusaurus Swizzling feature. It’s opinionated and flexible at the same +time. This is super cool since a framework usually needs to sacrifice one for +the other.


+Hung Viet Nguyen
+Hung Viet NguyenCreator of JestPreview
+

This enables users willing to invest a bit more time on customizations to build sites that look different from others.

+ +

So far it’s working out really nicely. It’s been really easy to style up the +way that we wanted it to look. No blockers at all.

Nader Dabit
Nader DabitWeb3 developer, Developer DAO founder
+

Other features

+

Docusaurus 2 comes with a very long list of useful features:

+
    +
  • Theme: dark mode, better UI and UX, flexible themeConfig options...
  • +
  • Docs versioning: flexible plugin options to adapt to your workflow
  • +
  • Docs sidebar: collapsible category, category index pages...
  • +
  • Blog: multiple authors, authors map, archive page...
  • +
  • Markdown: tabs, math equations, live code blocks, linking, flexible front matter...
  • +
  • Search: use the new Algolia DocSearch 3 experience
  • +
  • Assets: make it easy to incorporate images and other kinds of files
  • +
  • Internationalization: config options, default theme translations...
  • +
  • Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...
  • +
  • SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • TypeScript support for config files, plugins, custom pages and theme authors
  • +
  • Playgrounds: assess Docusaurus easily from your browser with docusaurus.new
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working
  • +
+

Recently, I was shocked at how good Docusaurus is out of the box. Super solid, +a good bit of configuration without being overwhelming, and the ability to +really customize the styling if you're braver than I am.

Alex DeBrie
Alex DeBrieAWS Data Hero, author of The DynamoDB Book
+

Why 2.0 now?

+

Many enthusiastic followers of ours have been curious why it took us 4 years to release Docusaurus 2.0, considering the beta is already successful and widely used in production.

+

The reason is that we aim to respect Semantic Versioning, which means we will be incrementing the major version number whenever we release a breaking change.

+

It is important for multiple reasons:

+
    +
  • It guarantees simple minor version upgrades, as long as you only use the public API
  • +
  • It follows front-end ecosystem conventions
  • +
  • A new major version is an opportunity to thoroughly document breaking changes
  • +
  • A new major/minor version is an opportunity to communicate new features through a blog post
  • +
+

The problem is that our flexible theming system inherently creates a very implicit API surface on which it is hard to know what is a breaking change in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our public API, so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.

+
info

From now on, Docusaurus will release new major versions more frequently. In practice, you can expect a new major version every 2 to 4 months.

Major version numbers are not sacred, but we still group breaking changes together and avoid releasing major versions too often.

Check our release process documentation for details.

+

What's Next?

+

Slash Up and Running

+

The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will backport retro-compatible changes in Docusaurus 2.x minor versions to make them available as soon as possible to the community on a stable channel.

+

A sample of the features on our roadmap for the upcoming major versions of Docusaurus:

+ +

Thank You

+

We'd like to express our gratitude to all our contributors, including:

+ +

We'd like to thank in particular all our Docusaurus 2.0 early adopters for assessing its alpha, beta and canary releases, providing a ton of invaluable feedback. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.

+

At Meta Open Source, Docusaurus is one of our most successful projects. We can't wait to see all the outstanding documentation websites that you will create! Don't forget to submit them to our site showcase!

+

Now, let your imagination run wild 🤪!

+

— Slash

+
We are on ProductHunt and Hacker News!

🙏 Share your experience using Docusaurus with the community!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+

Slash plushies

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + + Joshua Chen + sidachen2003@gmail.com + https://joshcena.com/ Yangshun Tay + tay.yang.shun@gmail.com https://github.com/yangshun - - - + + Alexey Pyltsyn + lex@php.net + https://github.com/lex111 + + + Paul O’Shannessy + jimarcey@gmail.com + https://twitter.com/zpao + + + Joel Marcey + jimarcey@gmail.com + https://twitter.com/JoelMarcey + +
- <![CDATA[MDX Blog Post]]> - https://your-docusaurus-site.example.com/blog/mdx-blog-post - - 2021-08-01T00:00:00.000Z - - Blog posts support Docusaurus Markdown features, such as MDX.

-
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
+ <![CDATA[Docusaurus 2021 Recap]]> + https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap + + 2022-01-24T00:00:00.000Z + + Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!

+

We've reached full feature parity with v1 after the release of internationalization, announced our first beta, and welcomed significantly more users this year.

+

The official v2 release is just around the corner! Follow the roadmap issue for any latest news.

+

+

Highlights

+

Let's begin by going over a few highlights this year. Remember the todo-list from half a year ago? Time to take it out again and see how far we've come!

+
    +
  • Internationalization: officially released four months after its initial landing in late 2020. Seen great success in many projects
  • +
  • Autogenerated sidebars: no need to maintain a big sidebars.js anymore
  • +
  • Webpack 5: significantly improved build performance
  • +
  • Trailing slash config: seamless integration with any content hosting provider
  • +
  • Redesigned mobile navigation: mobile users now enjoy all navigation features as on desktop
  • +
  • UI improvements: more accessible quotes, better admonitions, back-to-top button...
  • +
  • Blog multi-authors: credit all the amazing contributors that collaborated on one blog post!
  • +
  • More blog features: archive page, structured data for SEO, full post content in feeds – empowering you to ship a fully-featured blog in no time
  • +
  • Asset collocation: no need for a bloated static folder anymore: colocate your images with Markdown files
  • +
  • Sidebar category index pages: category labels can now be associated with pages, enabling better doc organization
  • +
+

Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!

+ +

npm

+

Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.

+

Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There&#39;s a sharp drop from 90000 to 40000 just before the Jan 2022 line.

+

(Ah, the classic Christmas dip...)

+

We released 18 versions, going from 2.0.0-alpha.71 to 2.0.0-beta.14. That's one release every 20 days!

+

GitHub

+
    +
  • Stars: 20,460 → 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!
  • +
  • Total contributors: 512 → 773 (+51.0% y/y)
  • +
  • Dependents: 5,039 → 14,579 (+189.3% y/y) for v2, and 6,311 → 7,581 (+20.1% y/y) for v1
  • +
  • Commits: 1,187 commits in the past year, averaging 23 commits every week
  • +
  • Issues: 619 issues opened, 505 of them eventually resolved
  • +
  • A new core team member (yep, that's me 😝)
  • +
+

Our star trend is also very positive. Compared to similar projects, we are growing at a faster rate:

+

Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.

+

With an 8.4k increase in stars, we are ranked number 3 in this year's JavaScript rising stars of static site generators, preceded only by Next.js and Astro.

+

Docusaurus placing 3rd in the &quot;Static Sites&quot; ranking list

+ +

Our showcase has welcomed a few new "favorite" sites that showcase the true potential of Docusaurus 2's pluggable architecture.

+ +

Iota wiki light modeIota wiki dark mode

+ +

Dyte light modeDyte dark mode

+ +

Ionic light modeIonic dark mode

+ +

Courier

+

The creativity of Docusaurus users is beyond our imagination 🤩 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to have it in our showcase.

+

Community

+

As an active moderator on Discord, I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other – case in point, I was formerly a community contributor before becoming a maintainer.

+

We are constantly mentioned on Twitter with inspirational feedback:

+
+

@docusaurus is amazing! cant believe it's THAT simple to use.

+
+
+

No extra plugins, tooling or compilation steps. It just works out of the box.

+
+
+

I love @docusaurus. I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.

+
+

And we keep every one of them in our little box 😄 If you enjoy Docusaurus yourself, keep tagging us with your comments!

+

As we approach the official release, we are interested in knowing more about what people are doing out there: plugin authors, creators of customized sites, and all new users – please keep us posted about your achievements so we can steer our development to better serve your needs.

+

Going forward

+

In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated milestone to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a more robust theming workflow, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:

+
    +
  • Guidelines on component organization. We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need.
  • +
  • Improvements to the swizzle CLI. We want users to use it with delight and let it aid you through all possible swizzling scenarios.
  • +
  • Refactoring our theme APIs. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.
  • +
  • Docs. We want our docs to be maximally accessible to everyone – from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.
  • +
+

Read more about plans for Docusaurus 2.0 in this roadmap issue. 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!

+

As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for architectural changes in 3.0!

+

With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.

+

We'd like to express our gratitude to all the contributors in 2021, including:

+
    +
  • The core team: Alexey Pyltsyn, Sébastien Lorber, Joshua Chen, and Yangshun Tay for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features
  • +
  • Joel Marcey for creating Docusaurus and supporting its development all along
  • +
  • The Algolia team for helping Docusaurus users migrate to the new DocSearch and answering search-related questions
  • +
  • All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord
  • +
+

So long, 2021, and let's greet a great 2022!

]]>
+ + Joshua Chen + sidachen2003@gmail.com + https://joshcena.com/ + + +
+ + <![CDATA[DocSearch migration]]> + https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration + + 2021-11-21T00:00:00.000Z + + DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

+

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

+

Upgrading your Docusaurus site

+

In the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.

+

This email will include a new appId and apiKey to use in your Docusaurus configuration.

+

The only things you have to do:

+
    +
  • Join the Algolia application (eventually creating a new Algolia account)
  • +
  • Update your site configuration.
  • +
+
docusaurus.config.js
const config = {
themeConfig: {
algolia: {
appId: '<NEW_APP_ID>',
apiKey: '<NEW_SEARCH_API_KEY>',
},
},
};

module.exports = config;
+
info

appId is now required.

These keys are not secrets and can be added to your Git repository.

+

DocSearch has a new home!

+

What is DocSearch?

+

DocSearch is a program created by Algolia, which offers search to technical documentation of Open Source projects and technical blogs for free.

+

You can read more here, and apply if you'd like to give it a try!

+

What is this migration about?

+

Motivation

+

With the upcoming stable release of DocSearch UI, we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.

+

What's new?

+

DocSearch now leverages the Algolia Crawler, which includes a web interface that will allow you to:

+
    +
  • Start, schedule and monitor your crawls
  • +
  • Edit your config file from a live editor
  • +
  • Test your results with DocSearch v3
  • +
+

The Algolia crawler front page showing the project&#39;s overview, such as last complete crawl and indices

+

The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.

+

But also, more Algolia features in your own Algolia app:

+
    +
  • Team management
  • +
  • Browse and see how your records are indexed in Algolia
  • +
  • Try other Algolia features with free trials
  • +
+

The Algolia index overview page, showing various filters and the details of every single index

+

The Algolia index analytics page, showing trends for total users, total searches, etc.

+

And of course, a lot more, for free.

+

FAQ

+

I'm using Docusaurus and DocSearch, can I migrate?

+

At the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you'll be contacted as soon as your Algolia app is ready!

+

Where can I read more about this?

+

We wrote a small migration guide but you'll have more detailed information in the migration email.

+

I received the migration email but the invite expired

+

Please contact us via either email or DocSearch's Discord or on Docusaurus's Discord #algolia channel

+

I have feedback!

+

For any feedback regarding our documentation or the DocSearch UI component, you can open an issue on our GitHub repository, but also contact us via the methods above.

+

Can I still run my own DocSearch instance?

+

In favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved DocSearch scraper and DocSearch v2, but the repositories will still be available and open to pull requests.

+

The previous documentation (now called legacy) remains available as well as our run your own guide.

]]>
+ + Clément Vannicatte + https://github.com/shortcuts + Sébastien Lorber - https://sebastienlorber.com + sebastien@thisweekinreact.com + https://thisweekinreact.com - +
- <![CDATA[Long Blog Post]]> - https://your-docusaurus-site.example.com/blog/long-blog-post - - 2019-05-29T00:00:00.000Z - - This is the summary of a very long blog post,

-

Use a <!-- truncate --> comment to limit blog post size in the list view.

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ <![CDATA[Announcing Docusaurus 2 Beta]]> + https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta + + 2021-05-12T00:00:00.000Z + + After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

+

Docusaurus adoption

+

Don't fear the beta tag!

+

Docusaurus 2 is widely adopted and growing fast:

+

Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.

+

To get a fuller understanding of the quality of current Docusaurus 2 sites, our new showcase page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!

+

Don't miss our favorite sites; they all stand out with something unique:

+

A screenshot of the showcase&#39;s favorites section, with 12 cards each displaying the information and preview of one site

+

Why was Docusaurus v2 in alpha for so long?

+

It's hard to believe that the first alpha release v2.0.0-alpha.0 was 2 years ago 😳 , unusually long for a software alpha.

+

As this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached feature parity with Docusaurus 1 with i18n, and it has been successfully adopted by many Docusaurus sites (see i18n showcase).

+

We're now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.

+

What are the goals of the beta?

+

Now that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.

+

In addition, we will use the beta phase to improve our theming system.

+

We want to make it:

+
    +
  • +

    easier to implement a custom theme, including for ourselves. We want to provide multiple official themes (including Tailwind CSS) for a long time.

    +
  • +
  • +

    safer to extend an existing theme: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.

    +
  • +
+

We will build a better theming infrastructure and refactor the classic theme to use it.

+

If you customize your site, you may find these planned improvements quite valuable.

+

What's new?

+

In case you missed it, we recently shipped two major improvements:

+ +

What's next?

+

Shipping the official 2.0 release!

+

To get there, we will continue to fix bugs and implement the most wanted features, including:

+ +

Conclusion

+

This is an exciting time for Docusaurus.

+

We are inspired by the positive feedback about Docusaurus, and discover new sites online every single day.

+

We are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.

+

Thank you to everyone for reading and to the entire community who supports Docusaurus. 🤗

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + + Joel Marcey + jimarcey@gmail.com + https://twitter.com/JoelMarcey + + + Yangshun Tay + tay.yang.shun@gmail.com + https://github.com/yangshun + + + Alexey Pyltsyn + lex@php.net + https://github.com/lex111 + + + +
+ + <![CDATA[Releasing Docusaurus i18n]]> + https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n + + 2021-03-09T00:00:00.000Z + + Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

+

Translate your site

+

You can translate a Docusaurus site in 3 simple steps:

+
    +
  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. +
  3. Translate: put the translation files at the correct filesystem location
  4. +
  5. Deploy: build and deploy your site using a single or multi-domain strategy
  6. +
+

The i18n support is very flexible and based on the filesystem.

+

The i18n tutorial is the best way to get started, and we provide help to use Git or Crowdin.

+

Design decisions

+

The goals of the Docusaurus i18n system are:

+
    +
  • Simple: just put the translated files in the correct filesystem location
  • +
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • +
  • Flexible deployment options: single, multiple domains, or hybrid
  • +
  • Modular: allow plugin authors to provide i18n support
  • +
  • Low-overhead runtime: documentation is mostly static and does not require a heavy JS library or polyfills
  • +
  • Scalable build-times: allow building and deploying localized sites independently
  • +
  • Localize assets: an image of your site might contain text that should be translated
  • +
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • +
  • Easy to use with Crowdin: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2
  • +
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • +
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • +
  • Default translations: classic theme labels are translated for you in many languages
  • +
+

Showcase

+

We worked with a few volunteers to dogfood the i18n support before releasing it.

+

Jest: upgrading Docusaurus

+

We have made it possible to upgrade a translated Docusaurus 1 site to Docusaurus 2.

+

Jest, using Docusaurus 1 and Crowdin was one of those sites.

+

The Docusaurus 2 migration was successful and the new site is now deployed in production (announcement post).

+

Jest&#39;s website front page in Japanese

+

Redwood: adopting Docusaurus

+

Redwood is a React full-stack Jamstack framework.

+

They were looking for a solution to create an internationalized learning platform, and became early adopters of Docusaurus 2 i18n for learn.redwoodjs.com, using Crowdin to get it translated to French.

+

Redwood&#39;s doc page in French

+

Datagit: using LTR support

+

The i18n system should work with any language, including Right-to-Left languages.

+

Datagit.ir is using Farsi, and a simple configuration option is able to flip the Docusaurus theme to add the required Right-to-Left support.

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

Conclusion

+

We sincerely hope you will adopt and like the new i18n support.

+

This feature has not been an easy one, and we would like to thank everyone that got involved in this journey:

+
    +
  • Alexey for his help to make the i18n support exhaustive and even better than v1
  • +
  • Simen for volunteering and supporting the Jest migration
  • +
  • Claire for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks
  • +
  • Massoud for reviewing my work on LTR and adopting it on Datagit
  • +
  • Crowdin for their support and willingness to improve their translation SaaS
  • +
  • The Docusaurus community for their patience, and providing many useful feedbacks on GitHub
  • +
+

Thanks for reading.

+

🙏 And please, add your brand new i18n sites to our showcase page. We accept any all polished Docusaurus site here, and we are working on a redesign allowing you to filter sites by features.

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + + +
+ + <![CDATA[Docusaurus 2020 Recap]]> + https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap + + 2021-01-19T00:00:00.000Z + + 2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

+

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

+

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

+

We are still in alpha, but expect some good news very soon!

+

Three Docusaurus plushies laid side-by-side on the table

+

Docusaurus 2 highlights

+

We have worked on many features this year, and would like to highlight the most significant ones:

+
    +
  • i18n: easily translate your Docusaurus site, released soon! (preview, doc)
  • +
  • Version dropdown: enable contextual version switch
  • +
  • Versioning options: solving the most common pain-points users had with versioning
  • +
  • Contextual search: search in the current version, use the brand-new DocSearch 3 experience
  • +
  • Markdown pages: use Markdown instead of React components to create standalone pages
  • +
  • Better theme: various UI, UX and accessibility improvements
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • Multi-instance: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)
  • +
  • Migration CLI: automate the upgrade from Docusaurus 1
  • +
  • CodeSandbox: assess Docusaurus easily from your browser with new.docusaurus.io
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • TypeScript: progressive adoption for internal code, and improve usage for users
  • +
  • Publish Infima: it is now open-source
  • +
+

Docusaurus 2 growth

+

The plan to rebuild Docusaurus from scratch in 2019 paid off: after a slow start, Docusaurus 2 has been widely adopted and has already outgrown Docusaurus 1 usage.

+

Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.

+

Notable projects, startups, large companies, and individuals adopted Docusaurus 2 (showcase):

+ +

We helped large scale Docusaurus 1 sites to upgrade, ensuring a proper migration path and feature parity.

+

React Native was successfully upgraded to Docusaurus 2 (archived v1 site):

+

React Native&#39;s new website built with Docusaurus v2

+

Localized Docusaurus 1 sites (like Jest) will be able to upgrade too:

+

Jest&#39;s new website built with Docusaurus v2 in Japanese

+

We also saw the first right-to-left Docusaurus 2 site published:

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

GitHub Activity

+
    +
  • Stars: 14632 → 20946 (+43.2% y/y)
  • +
  • Total Contributors: 303 → 512 (+68.9% y/y). Most of which are non-Facebook contributors
  • +
  • Weekly npm Downloads: 2356 → 25592 (+986% y/y)
  • +
  • On GitHub, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)
  • +
+

Collaboration with Major League Hacking

+

We have welcomed Major League Hacking (MLH) fellows for 2 seasons already.

+

We are very thankful for the various contributions they made, such as:

+
    +
  • Writing the foundations of the v1 to v2 migration CLI
  • +
  • Help migrate the React Native website from v1 to v2
  • +
  • Making the config validation more strict and exhaustive, returning helpful error messages
  • +
  • Adding CodeSandbox support
  • +
  • Improving the CI pipelines: build size and Lighthouse bots
  • +
+

We look forward to continuing this collaboration in 2021.

+

Media

+

Dmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in 60 seconds or 15min videos.

+

Rachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in React Native Radio 178 (podcast), and William Candillon the React Native website migration (video).

+

Many blog posts have been published:

+ +

Community

+

The Docusaurus community continues to grow, the Discord server is quite active, and Stack Overflow questions keep being posted.

+

The modular architecture of Docusaurus 2 allowed the community to build and publish third-party plugins. As we would like to federate better our community, if you are building a plugin, please let us know.

+

What's next?

+

As the core features of Docusaurus 2 have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the beta and release-candidate phase.

+

With proper support for i18n and versioning, and large scale migrations such as React Native and Jest, we now have a clear migration path for all Docusaurus 1 sites.

+

We still have a few major features that we would like to work on:

+ +

Huge thanks to the community for their contributions in 2020, especially:

+
    +
  • Joel Marcey for creating Docusaurus and supporting the project all this time
  • +
  • the core team - Alexey Pyltsyn, Sébastien Lorber, Yangshun Tay
  • +
  • the Major League Hacking and Facebook interns for their significant impact
  • +
  • the Algolia team for DocSearch 3 and their support
  • +
  • Bartosz Kaszubowski for his investment in the React Native migration
  • +
  • the whole community for their contributions, and providing support to each other
  • +
+

Cheers to a great 2021! 🎉

]]>
+ + Sébastien Lorber + sebastien@thisweekinreact.com + https://thisweekinreact.com + + +
+ + <![CDATA[Tribute to Endi]]> + https://docusaurus.io/blog/2020/01/07/tribute-to-endi + + 2020-01-07T00:00:00.000Z + + It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.

+

It is impossible to overstate Endi's impact on this project:

+ +

Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.

+

We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or tweet if you have a suggestion.

+

The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. 😔

+

A photo from behind Endi&#39;s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.

]]>
+ + Joel Marcey + jimarcey@gmail.com + https://twitter.com/JoelMarcey + + + +
+ + <![CDATA[Docusaurus 2019 Recap]]> + https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap + + 2019-12-30T00:00:00.000Z + + 2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

+

Docusaurus 2 (D2)

+

In 2018, we proposed to rebuild Docusaurus from the ground up. It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of @endilie, our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.

+

D2's killer features are Dark Mode and its superb performance. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.

+

Last but not least, we implemented a plugins architecture and turned the repo into a Lerna monorepo. We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.

+

GitHub Activity

+
    +
  • Stars: 10050 → 14632 (+45.6% y/y)
  • +
  • Total Contributors: 182 → 303 (+66.4% y/y). Most of which are non-Facebook contributors
  • +
  • Daily npm Downloads: 728 → 2320 (+218.7% y/y). The peak was in November
  • +
  • D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub
  • +
  • We now have 4 active core contributors! (+100% y/y)
  • +
+

Notable Users

+

A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:

+ +

And welcomed more projects to Docusaurus 1:

+ +

Media

+

Yangshun gave a classroom session during F8 about Using Docusaurus to Create Open Source Websites.

+

Community

+

A few third-party hosting/development services also has first-class integration with a Docusaurus setup:

+ +

Looking Ahead

+

D2 has gained some traction among the developer community. In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!

+

Huge thanks to the community for their contributions, especially the core team - Endilie Yacop Sucipto, Alexey Pyltsyn, Wei Gao. Lastly, thank you Joel Marcey for starting Docusaurus and supporting the project all this time.

+

Cheers to a great 2020! 🎉

]]>
+ + Yangshun Tay + tay.yang.shun@gmail.com + https://github.com/yangshun + + +
+ + <![CDATA[Happy 1st Birthday Slash!]]> + https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash + + 2018-12-14T00:00:00.000Z + + Docusaurus makes 1 year! Happy Birthday Slash!

+

Docusaurus went live on December 14, 2017. At the time, we had 8 early adopters.

+

We now have nearly 60 known users of Docusaurus, and probably more that we don't know about. We have 9K GitHub stars and an active community, particularly Yangshun Tay and Endilie Yacop Sucipto, both of whom are the lead maintainers helping keep this project moving forward.

+

Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.

+
+

Special thanks to Eric Nakagawa, creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!

+
]]>
+ + Joel Marcey + jimarcey@gmail.com + https://twitter.com/JoelMarcey + + +
+ + <![CDATA[Towards Docusaurus 2]]> + https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2 + + 2018-09-11T00:00:00.000Z + + Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

+

Introduction

+

It all started with this RFC issue opened by Yangshun towards the end of June 2018.

+

[RFC] Docusaurus v2 · Issue #789 · facebook/docusaurus

These are some of the problems I'm seeing in Docusaurus now and also how we can +address them in v2. A number of the ideas here were inspired by VuePress and other +static site generators. In the current static site generators ecosystem, t...

+

Most of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.

+

Infrastructure

+

Content

+

A Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and dangerouslySetInnerHTML 😱.

+

In addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.

+

For Docusaurus 2, we will be using webpack as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, during build time we will create a server-rendered version of the app and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by Gatsby.

+

Versioning

+

If you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs if and only if the docs content are different.

+

For example, if we have docs/hello.md:

+
---
id: hello
title: hello
---
Hello world !
+

And we cut version 1.0.0, Docusaurus will create versioned_docs/version-1.0.0/hello.md:

+
---
id: version-1.0.0-hello
title: hello
original_id: hello
---
Hello world !
+

However, if there are no changes to hello.md when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, versioned_docs/version-2.0.0/hello.md will not exist.

+

This can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit versioned_docs/version-1.0.0/hello.md or manually add versioned_docs/version-2.0.0/hello.md. This could potentially lead to unwanted bugs. Here is a real scenario in Jest.

+

In addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where renaming docs breaks links in old versions.

+

For Docusaurus 2, every time we cut a new version, we will instead take a snapshot of all the docs. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.

+

Translation

+

Docusaurus allows for easy translation functionality by using Crowdin. Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that English is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.

+

For Docusaurus 2, we will not assume English is the default language. When a user enables internationalization, they have to set a default language in siteConfig.js. We will then assume that all the files in docs are written in that language.

+

In addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.

+

Customizability

+

Layout

+

The current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site's appearance to their wishes.

+

For Docusaurus 2, layout and styling should be controlled by the user. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by create-react-app and VuePress, Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using React Helmet. Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.

+

Markdown

+

Our Markdown parsing is currently powered by Remarkable. What if the user wants to use Markdown-it or even MDX? And then there is an issue of which syntax highlighter to use, (e.g: Prism vs Highlight.js). We should leave these choices open to the user.

+

For Docusaurus 2, users can eject and choose their own Markdown parser. It does not matter if they want to use another Markdown parser such as Remark, or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the RAW string of Markdown. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we're still experimenting with different Markdown parsers.

+ +

Our core search functionality is based on Algolia. There are requests by users to be able to use different search offerings, such as lunrjs for offline search.

+

I personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their DocSearch is open source. For example, I recently submitted this PR that enables DocSearch to scrape alternate languages in sitemap.

+

For Docusaurus 2, we will allow users to customize the search box. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.

+

Stability

+

Software is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.

+

For Docusaurus 2, we are adding tests as we develop since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.

+

Frequently Asked Questions

+

Will there be any breaking changes?

+

If you've read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to minimize the number of breaking changes and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a major rewrite and re-architecting of the codebase.

+

The exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in siteConfig.js and we plan to keep it as lean as possible. For example, the cleanUrl siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the .html suffix.

+

Our goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on Discord or Twitter for questions and help.

+

When is the release of Docusaurus 2?

+

As of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.

+

One thing that I would like to share is that while Docusaurus is part of Facebook Open Source and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at NTU Singapore, so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, we want to make it as awesome as possible.

+

For now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the public repository. When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned 😉!

+

Final Thoughts

+

Docusaurus has had a large impact on the open source community as seen from the many popular projects which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.

+

Docusaurus' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.

+

We also want to let people know that due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.

+

If you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we're doing, you can support Docusaurus on Open Collective.

+
+

If you are sponsoring our work on Open Collective, we'll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.

+
+

Lastly, if you haven't done so already, click the star and watch button on GitHub, and follow us on Twitter.

]]>
Endilie Yacop Sucipto https://github.com/endiliey - - + +
- <![CDATA[First Blog Post]]> - https://your-docusaurus-site.example.com/blog/first-blog-post - - 2019-05-28T00:00:00.000Z - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ <![CDATA[How I Converted Profilo to Docusaurus in Under 2 Hours]]> + https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus + + 2018-04-30T00:00:00.000Z + + +

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+ +

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+

In general, when creating a website with Docusaurus you do the following:

+
    +
  1. Generate a template website using Docusaurus scripts.
  2. +
  3. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).
  4. +
  5. Create the website content: +
      +
    1. Add your docs and any supporting assets.
    2. +
    3. Customize the default landing page provided by Docusaurus to suit your needs.
    4. +
    5. Configure the default site navigation file.
    6. +
    +
  6. +
  7. Publish the website and set up how it will be published for future changes.
  8. +
+

Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.

+

Overview of Steps Taken

+

Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section.

+

Design and colors:

+
    +
  1. Got all the desired logo formats from designer. I had to create the .favicon one.
  2. +
  3. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!
  4. +
+

Initial website setup:

+
    +
  1. Forked the Profilo project on GitHub and created a local clone of the fork to set up the website.
  2. +
  3. Created the initial Docusaurus website using the installation instructions.
  4. +
  5. Deleted the docs-examples-from-docusaurus and website/blog-examples-from-docusaurus folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.
  6. +
+

Content creation:

+
    +
  1. +

    Added metadata to the existing Markdown files found in the docs folder, for example:

    +
    ---
    id: architecture
    title: Architecture
    sidebar_label: Architecture
    ---
    +
  2. +
  3. +

    Added the logo assets to the website/static/img folder.

    +
  4. +
  5. +

    Modified website/pages/en/index.js, the landing page, to highlight Profilo features.

    +
  6. +
  7. +

    Modified website/core/Footer.js, the footer, to simplify it for Profilo.

    +
  8. +
  9. +

    Edited website/siteConfig.js (website configuration file) to specify the previously chosen primary and secondary colors.

    +
  10. +
  11. +

    Modified website/sidebars.json that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.

    +
  12. +
  13. +

    Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.

    +
  14. +
  15. +

    Tested the website locally throughout this phase. (I ran yarn start from the website folder to start the server.)

    +
  16. +
+

Feedback and review changes:

+
    +
  1. Sent a pull request to the project.
  2. +
  3. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).
  4. +
  5. Updated the colors and updated the PR.
  6. +
  7. The PR was then accepted and merged. Yay!
  8. +
+

Website publishing:

+
    +
  1. +

    Pushed the first website version by running the Docusaurus publish script from the command line:

    +
    USE_SSH=true \
    GIT_USER=caabernathy \
    CURRENT_BRANCH=master \
    yarn run publish-gh-pages
    +
  2. +
  3. +

    Configured CircleCI using the provided Docusaurus instructions. There were 2 PRs for this, the firstfor the initial config and the second to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).

    +
  4. +
+

The final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.

+

Design

+

Here's what the initial website looked like when the first pull request was sent out:

+

The website&#39;s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar

+

Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.

+

Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade

+

I then took the RGB representation of the color and set it as the baseline color on Paletton. The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.

+

Using Paletton to generate a full palette from the red shade selected. There&#39;s a color wheel showing all hues on the left, and a square showing various shades of red on the right.

+

The selected primary and secondary colors were a good jumping off point for designer feedback.

+

There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features.

+

Here's what the final website looked like:

+

The website&#39;s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.

+

This is an example page showing the core content, in this case the Getting Started page:

+

A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code

+

This also shows the sidebar structure that was set up through editing website/sidebars.json.

+

Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!

+

Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.

+

Final Thoughts

+

The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.

+

The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done.

]]>
- Gao Wei - https://github.com/wgao19 + Christine Abernathy + http://twitter.com/abernathyca - - + +
\ No newline at end of file diff --git a/blog/feed.json b/blog/feed.json new file mode 100644 index 0000000000..3255bec2ee --- /dev/null +++ b/blog/feed.json @@ -0,0 +1,313 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "Docusaurus Blog", + "home_page_url": "https://docusaurus.io/blog", + "description": "Docusaurus Blog", + "items": [ + { + "id": "https://docusaurus.io/blog/releases/3.2", + "content_html": "

We are happy to announce Docusaurus 3.2.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n\n

Highlights

\n

Faster builds

\n

We worked hard to reduce the time it takes to build a Docusaurus site in production mode.

\n

Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.

\n

Let's take an example. Our benchmark on the React Native website upgrading to v3.2 reports the following results:

\n
    \n
  • 🔥 Cold builds: 95s ➡️ 66s (~30% faster)
  • \n
  • 🔥 Incremental builds: 55s ➡️ 22s (~60% faster)
  • \n
\n

The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements.

\n

Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our performance issue for upcoming improvements.

\n
What is the difference between a cold build and an incremental build?

A cold build is when the Docusaurus caches are empty, generally after running docusaurus clear.

An incremental build happens when you run another time the docusaurus build command. Docusaurus automatically tries to \"re-use\" computations from former builds to make subsequent builds faster. In practice it's based on Webpack persistent caching. To enable incremental builds on your CI server, you can persist the node_modules/.cache folder across builds.

\n

Faster Dev Server

\n

We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.

\n

The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster 🔥.

\n

We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result.

\n

MDX partials table-of-contents

\n

With #9684, Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.

\n

Docusaurus and MDX allows you to import one Markdown file into another. We usually call the imported Markdown file a \"partial\", and use the _ prefix so that this file does not lead to the creation of a new page.

\n
myDoc.mdx
# My Doc

## Doc heading

Content is imported from another MDX file:

import ImportedDoc from './\\_importedDoc.mdx';

<ImportedDoc />
\n
_myPartial.mdx
## Partial heading

Some paragraph
\n

Previously, the heading Partial heading did not appear in the table-of-contents, but now it will!

\n

Blog improvements

\n

We improved the blog plugin with several new options to make it even more powerful and flexible:

\n
    \n
  • #9912: you can now display the last update time and author of a blog post, a feature the docs plugin already had.
  • \n
  • #9886: a new processBlogPosts option allow you to filter/transform/sort blog posts.
  • \n
  • #9838: a new pageBasePath option allows you to customize the blog pagination URL segment (/blog/page/2)
  • \n
\n

Sitemap lastmod

\n

With #9954, the sitemap plugin has a new lastmod option that can now emit a <lastmod> tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog last_update front matter.

\n

We also made it possible to opt-out of emitting <priority> and <frequency> tags, which are generally ignored by crawlers (notably Google).

\n

We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:

\n
{
lastmod: 'date',
priority: null,
changefreq: null,
}
\n

Other changes

\n
    \n
  • #9687: new Vercel Analytics plugin
  • \n
  • #9681 and #9442: docusaurus swizzle and create-docusaurus CLIs now ask users if they prefer to use TypeScript
  • \n
  • #9928: new Icelandic translation
  • \n
  • #9928: new allContentLoaded plugin lifecycle (experimental)
  • \n
\n

Check the 3.2.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/releases/3.2", + "title": "Docusaurus 3.2", + "summary": "We are happy to announce Docusaurus 3.2.", + "date_modified": "2024-03-29T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/releases/3.1", + "content_html": "

We are happy to announce Docusaurus 3.1.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n\n

Highlights

\n

Broken anchors checker

\n

In #9528, we improved the built-in broken links checker to also detect broken anchors.

\n

\"Docusaurus

\n
Make it fail fast

The new onBrokenAnchors option has value warn by default, for retro-compatibility reasons.

We recommend to turn it to throw and fail your CI builds instead of deploying broken anchors to productions.

\n
note

For users and plugin authors implementing custom <Heading> and <Link> components, we provide a new useBrokenLinks React hook API.

Most Docusaurus users don't need to care about it, built-in components (docusaurus/Link and @theme/Heading) already use it internally.

\n

parseFrontMatter hook

\n

In #9624, we added a new siteConfig.markdown.parseFrontMatter function hook.

\n

This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.

\n
docusaurus.config.js
export default {
markdown: {
parseFrontMatter: async (params) => {
// Reuse the default parser
const result = await params.defaultParseFrontMatter(params);

// Process front matter description placeholders
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');

// Create your own front matter shortcut
if (result.frontMatter.i_do_not_want_docs_pagination) {
result.frontMatter.pagination_prev = null;
result.frontMatter.pagination_next = null;
}

// Rename an unsupported front matter coming from another system
if (result.frontMatter.cms_seo_summary) {
result.frontMatter.description = result.frontMatter.cms_seo_summary;
delete result.frontMatter.cms_seo_summary;
}

return result;
},
},
};
\n

Read the front matter guide and the parseFrontMatter API ref for details.

\n

Other changes

\n

Other notable changes include:

\n
    \n
  • #9674: add siteConfig.markdown.remarkRehypeOptions to pass options to remark-rehype, letting you customize things such as MDX footnote label
  • \n
  • #9671: add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML
  • \n
  • #9610: enable CLI port configuration via PORT environment variable
  • \n
  • #9477: complete Brazilian Portuguese (pt-BR) translations
  • \n
\n

Check the 3.1.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/releases/3.1", + "title": "Docusaurus 3.1", + "summary": "We are happy to announce Docusaurus 3.1.", + "date_modified": "2024-01-05T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/releases/3.0", + "content_html": "

Today, we are happy to announce Docusaurus 3.0! 🥳

\n

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

\n

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

\n

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

\n

\"v3.0

\n\n

We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, upgrading to MDX v3 is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding compatibility options for MDX v1.

\n

The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:

\n\n
About Docusaurus v2

According to our release process, Docusaurus v2 has now entered maintenance mode. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.

\n\n

Breaking changes

\n

This section only gives you a quick glance. All the breaking changes are thoroughly documented in the v3 upgrade guide.

\n

Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:

\n
    \n
  • Node.js v16 ➡️ v18
  • \n
  • React v17 ➡️ v18
  • \n
  • MDX v1 ➡️ v3
  • \n
  • TypeScript v4 ➡️ v5
  • \n
  • prism-react-renderer v1 ➡️ v2
  • \n
  • react-live v2 ➡️ v4
  • \n
  • Mermaid v9 ➡️ v10
  • \n
  • import-fresh v3 ➡️ jiti v1
  • \n
  • remark-emoji v2 ➡️ v4
  • \n
\n

A typical package.json dependency upgrade looks like:

\n
package.json
 {
\"dependencies\": {
// upgrade to Docusaurus v3
- \"@docusaurus/core\": \"2.4.3\",
- \"@docusaurus/preset-classic\": \"2.4.3\",
+ \"@docusaurus/core\": \"3.0.0\",
+ \"@docusaurus/preset-classic\": \"3.0.0\",
// upgrade to MDX v3
- \"@mdx-js/react\": \"^1.6.22\",
+ \"@mdx-js/react\": \"^3.0.0\",
// upgrade to prism-react-renderer v2.0+
- \"prism-react-renderer\": \"^1.3.5\",
+ \"prism-react-renderer\": \"^2.1.0\",
// upgrade to React v18.0+
- \"react\": \"^17.0.2\",
- \"react-dom\": \"^17.0.2\"
+ \"react\": \"^18.2.0\",
+ \"react-dom\": \"^18.2.0\"
},
\"devDependencies\": {
// upgrade Docusaurus dev dependencies to v3
- \"@docusaurus/module-type-aliases\": \"2.4.3\",
- \"@docusaurus/types\": \"2.4.3\"
+ \"@docusaurus/module-type-aliases\": \"3.0.0\",
+ \"@docusaurus/types\": \"3.0.0\"
}
\"engines\": {
// require Node.js 18.0+
- \"node\": \">=16.14\"
+ \"node\": \">=18.0\"
}
}
\n

Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:

\n
    \n
  • #9189: new default blog RSS feed limit of 20 entries
  • \n
  • #9308: fix and re-introduce the :::warning admonition, deprecate :::caution
  • \n
  • #9310: remove the legacy versioned sidebar id prefix, used for sites versioned before v2.0.0-beta.10 (December 2021)
  • \n
  • #7966: refactor docs theme components, eventually requiring to you re-swizzle them
  • \n
\n

Highlights

\n

Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the Docusaurus v3.0.0 release notes.

\n

Markdown

\n

Docusaurus v3 upgraded from MDX v1 to MDX v3:

\n\n

This new MDX version is much better for content writers and plugin authors, and lays the ground for implementing new exciting Markdown features.

\n
MDX v3 - the main challenge

The transition from MDX v1 to MDX v3 is the main challenge to the adoption of Docusaurus v3.

Some documents that compiled successfully under Docusaurus v2 might now fail to compile under Docusaurus v3, while others might render differently.

Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

Don't be intimidated. Most problems are easy to fix and often related to { and < characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command npx docusaurus-mdx-checker to help you get an estimate of the work to be done, and we recommend to prepare your site in advance.

If you created custom MDX plugins (Remark/Rehype), the AST is slightly different, and you might need to refactor them.

\n

This notably enables us to add a CommonMark mode that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and experimental and limited (some Docusaurus features will not work). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret .md files as CommonMark in an upcoming major version, and recommend to use the .mdx extension for any file using JSX or ES modules.

\n

We also introduced a new way to configure Markdown globally for your site, and plan to add more flexible options later.

\n
docusaurus.config.js
export default {
markdown: {
format: 'mdx',
mermaid: true,
preprocessor: ({filePath, fileContent}) => {
return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');
},
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
\n

Docusaurus now uses the remark-directive plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own custom directives such as :textDirective, ::leafDirective or :::containerDirective.

\n

ESM and TypeScript configs

\n

In #9317, we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.

\n

Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:

\n
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
// your site config ...
presets: [
[
'classic',
{
// your preset config ...
} satisfies Preset.Options,
],
],
themeConfig: {
// your theme config ...
} satisfies Preset.ThemeConfig,
};

export default config;
\n
sidebars.ts
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';

const sidebars: SidebarsConfig = {
docs: ['introduction'],
};

export default sidebars;
\n

Unlisted content

\n

Docusaurus already supported a draft: true front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.

\n

In #8004, we introduced a new unlisted: true front matter option, which will keep your pages available in production builds, while \"hiding\" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.

\n

Unlisted content will:

\n
    \n
  • be excluded from sitemap.xml
  • \n
  • be excluded from SEO results thanks to <meta name=\"robots\" content=\"noindex, nofollow\" />
  • \n
  • be excluded from blog RSS feeds
  • \n
  • be excluded from Algolia DocSearch results
  • \n
  • be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...
  • \n
\n

Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an unlisted blog post:

\n
/tests/blog/unlisted-post
\n

React 18

\n

In #8961, we upgraded to React 18. This is important, notably for the gradual adoption of Concurrent React features, as well as upcoming exciting features such as build-time React Server Components.

\n

This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on How to Upgrade to React 18, notably the new automatic batching behavior.

\n
Experimental support for React 18 features

React 18 comes with new features:

    \n
  • <Suspense>
  • \n
  • React.lazy()
  • \n
  • startTransition()
  • \n

Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior.

\n

Automatic JSX runtime

\n

Docusaurus now uses the \"automatic\" JSX runtime.

\n

It is not needed anymore to import React in JSX files that do not use any React API.

\n
src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}
\n

Debug builds

\n

It is now possible to build your static site in dev mode.

\n
docusaurus build --dev
\n
Debug React-related problems

Docusaurus will log more errors to the console, notably React 18 hydration errors through the new onRecoverableError callback.

This new build mode is particularly helpful for troubleshooting React problems. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the React Error Decoder page.

\n

TypeScript

\n

Docusaurus v3 now requires a minimum version of TypeScript 5.0.

\n

We re-internalized the base recommended TypeScript config to a new official package:

\n
tsconfig.json
 {
- \"extends\": \"@tsconfig/docusaurus/tsconfig.json\",
+ \"extends\": \"@docusaurus/tsconfig\",
\"compilerOptions\": {
\"baseUrl\": \".\"
}
}
\n

We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new TypeScript config files:

\n
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type {Options, ThemeConfig} from '@docusaurus/preset-classic';
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
\n

Code blocks

\n

In #9316, we improved on syntax highlighting thanks to the prism-react-renderer v2 upgrade. For example, a bash param --save is now colored:

\n
npm install --save some-package
\n

The interactive code editor also upgrades to react-live v4, coming with a new sucrase compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.

\n
Live Editor
function Hello() {\n  const name: string = 'World';\n  return <div>Hello {name}</div>;\n}\n
Result
Loading...
\n

In #8982 and #8870, we also added magic comments support for TeX-like, Haskell-like, and WebAssembly comment syntax.

\n
haskell.hs
stringLength :: String -> Int
stringLength [] = 0
stringLength (x:xs) = 1 + stringLength xs
\n
matlab.m
function result = times2(n)
result = n * 2;
end
x = 10;
y = times2(x);
\n

Mermaid diagrams

\n

In #9305, we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.

\n
Mindmap
\n
Quadrant chart
\n

Query-string data attributes

\n

In #9028, we made it possible to set custom HTML data attributes though docusaurus-data-x query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.

\n
/src/css/custom.css
html[data-navbar='false'] .navbar {
display: none;
}

html[data-red-border] div#__docusaurus {
border: red solid thick;
}
\n
/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border
\n

Other features

\n

Other new features worth mentioning:

\n\n

Read Docusaurus v3.0.0 release notes for an exhaustive list of changes.

\n

Conclusion

\n

This release comes with a few features, but more importantly upgrades many pieces of the Docusaurus infrastructure.

\n

The MDX upgrade consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.

\n

Now that we've caught up with our infrastructure, we'll be back delivering useful documentation features very soon, in upcoming minor versions.

\n

We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a competitive solution that stands out for its great flexibility.

", + "url": "https://docusaurus.io/blog/releases/3.0", + "title": "Announcing Docusaurus 3.0", + "summary": "Today, we are happy to announce Docusaurus 3.0! 🥳", + "date_modified": "2023-10-31T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3", + "content_html": "

Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

\n

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

\n

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

\n

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

\n

\"Preparing

\n
warning

This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the v3.0.0-beta.0 release notes for an exhaustive list.

\n
Don't be afraid

There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.

If your site is relatively small, with only a few customizations, you can probably upgrade to Docusaurus v3 immediately.

\n

Preparatory work

\n

Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest Docusaurus v2 version.

\n

Depending on the complexity of your site, it may be a good idea to adopt the visual regression testing workflow that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.

\n

We also recommend using the .mdx extension whenever you use JSX, import, or export (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, .md files will be parsed as standard CommonMark, which does not support these features. In Docusaurus v3, .md files keep being compiled as MDX files, but it will be possible to opt-in for CommonMark.

\n

Preparing content for MDX v3

\n

MDX is a major dependency of Docusaurus responsible for compiling your .md and .mdx files to React components.

\n

MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of { and < characters.

\n

Upgrading MDX comes with all the breaking changes documented on the MDX v2 and MDX v3 release blog posts. Most breaking changes come from MDX v2. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

\n

Make sure to also read our updated MDX and React documentation page.

\n
Ask for help

We have a dedicated MDX v3 - Upgrade Support discussion.

\n

Using the MDX playground

\n

The MDX playground is your new best friend. It permits to understand how your content is compiled to React components, and troubleshoot compilation or rendering issues in isolation.

\n

Each MDX version comes with its own playground:

\n\n
Configuring the MDX playground options for Docusaurus

To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the MDX playground:

    \n
  • Use MDX
  • \n
  • Use remark-gfm
  • \n
  • Use remark-directive
  • \n

\"Screenshot

\n

Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.

\n
Making your content future-proof

The goal will be to refactor your problematic content so that it works fine with both versions of MDX. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.

\n

Using the MDX checker CLI

\n

We provide a docusaurus-mdx-checker CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.

\n
npx docusaurus-mdx-checker
\n

For each compilation issue, the CLI will log the file path and a line number to look at.

\n

\"Screenshot

\n
tip

Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3.

\n
warning

This CLI is a best effort, and will only report compilation errors.

It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using visual regression tests.

\n

Common MDX problems

\n

We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:

\n\n

These upgrades permitted us to aggregate the most common content problems, and document how to best handle them.

\n

Bad usage of {

\n

The { character is used for opening JavaScript expressions. MDX will now fail if what you put inside {expression} is not a valid expression.

\n
example.md
The object shape looks like {username: string, age: number}
\n
Error message
\n

Could not parse expression with acorn: Unexpected content after expression

\n
\n
How to prepare

Available options to fix this error:

    \n
  • Use inline code: {username: string, age: number}
  • \n
  • Use the HTML code: &#123;
  • \n
  • Escape it: \\{
  • \n
\n

Bad usage of <

\n

The < character is used for opening JSX tags. MDX will now fail if it thinks your JSX is invalid.

\n
example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template \"Road to <YOUR_MINOR_VERSION>\"
\n
Error messages
\n

Unexpected character 5 (U+0035) before name, expected a character that can start a name, such as a letter, $, or _

\n
\n

Expected a closing tag for <T> (1:6-1:9) before the end of paragraph end-tag-mismatch mdast-util-mdx-jsx

\n
\n

Expected a closing tag for <YOUR_MINOR_VERSION> (134:19-134:39) before the end of paragraph

\n
\n
How to prepare

Available options to fix this error:

    \n
  • Use inline code: Array<T>
  • \n
  • Use the HTML code: &lt; or &#60;
  • \n
  • Escape it: \\< (unfortunately the \\ will be displayed under MDX v1)
  • \n
\n

Bad usage of GFM Autolink

\n

Docusaurus supports GitHub Flavored Markdown (GFM), but autolink using the <link> syntax is not supported anymore by MDX.

\n
example.md
<sebastien@thisweekinreact.com>

<http://localhost:3000>
\n
Error messages
\n

Unexpected character @ (U+0040) in name, expected a name character such as letters, digits, $, or _; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use [text](url))

\n
\n

Unexpected character / (U+002F) before local name, expected a character that can start a name, such as a letter, $, or _ (note: to create a link in MDX, use [text](url))

\n
\n
How to prepare

Use regular Markdown links, or remove the < and >. MDX and GFM are able to autolink literals already.

example.md
sebastien@thisweekinreact.com
[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)

http://localhost:3000
[http://localhost:3000](http://localhost:3000)
\n

Lower-case MDXComponent mapping

\n

For users providing a custom MDXComponentmapping, components are now \"sandboxed\":

\n
    \n
  • a MDXComponent mapping for h1 only gets used for # hi but not for <h1>hi</h1>
  • \n
  • a lower-cased custom element name will not be substituted by its respective MDXComponent component anymore
  • \n
\n
visual difference

Your MDXComponent component mapping might not be applied as before, and your custom components might no longer be used.

\n
How to prepare

For native Markdown elements, you can keep using lower-case: p, h1, img, a...

For any other element, use upper-case names.

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) => <p {...props} className=\"my-paragraph\"/>
- myElement: (props) => <div {...props} className=\"my-class\" />,
+ MyElement: (props) => <div {...props} className=\"my-class\" />,
};
\n

Unintended extra paragraphs

\n

In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected <p> tags.

\n
visual difference

See how this content is rendered differently by MDX v1 and v3.

example.md
<div>Some **Markdown** content</div>
<div>
Some **Markdown** content
</div>
MDX v1 output
<div>Some **Markdown** content</div>
<div>Some **Markdown** content</div>
MDX v3 output
<div>Some <strong>Markdown</strong> content</div>
<div><p>Some <strong>Markdown</strong> content</p></div>
\n
How to prepare

If you don't want an extra <p> tag, refactor content on a case by case basis to use a single-line JSX tag.

 <figure>
<img src=\"/img/myImage.png\" alt=\"My alt\" />
- <figcaption>
- My image caption
- </figcaption>
+ <figcaption>My image caption</figcaption>
</figure>

If your content contains \"Markdown inlines\" (**, *, _, [link](/path)), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.

\n

Unintended usage of directives

\n

Docusaurus v3 now uses Markdown Directives (implemented with remark-directive) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.

\n
example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
\n
Visual change

Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form.

example.md
The AWS re:Invent conf is great

Due to :Invent being parsed as a text directive, this will now be rendered as:

The AWS re
conf is great
\n
How to prepare
    \n
  • Use the HTML code: &#58;
  • \n
  • Add a space after : (if it makes sense): : text
  • \n
  • Escape it: \\: (unfortunately the \\ will be displayed under MDX v1)
  • \n
\n

Unsupported indented code blocks

\n

MDX does not transform indented text as code blocks anymore.

\n
example.md
    console.log(\"hello\");
\n
Visual change

The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore.

\n
How to prepare

Use the regular code block syntax instead of indentation:

example.md
```js
console.log('hello');
```
\n

MDX plugins

\n

All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ES Modules only and do not support CommonJS anymore.

\n

In practice this means that you can't do require(\"remark-plugin\") anymore.

\n
How to prepare

Docusaurus v3 now supports ES Modules configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* site config using remark plugins here */
};

If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the Docusaurus config supports the usage of an async function to let you do so.

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// site config...
};
};
\n
For plugin authors

If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a dedicated support discussion to help plugin authors upgrade their code.

\n

Other breaking changes

\n

Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.

\n

Node.js 18.0

\n

Node.js 16 reached End-of-Life, and Docusaurus v3 now requires Node.js >= 18.0.

\n
How to prepare

Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.

\n

React 18.0

\n

Docusaurus v3 now requires React >= 18.0.

\n

React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.

\n

Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.

\n
How to prepare

Read the official React v18.0 and How to Upgrade to React 18, and look at your first-party React code to figure out which components might be affected this React 18 upgrade.

We recommend to particularly look for:

    \n
  • Automatic batching for stateful components
  • \n
  • New React hydration errors reported to the console
  • \n
\n

TypeScript 5.0

\n

Docusaurus v3 now requires TypeScript >= 5.0.

\n
How to prepare

Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.

\n

TypeScript base config

\n

The official Docusaurus TypeScript config has been re-internalized from the external package @tsconfig/docusaurus to our new monorepo package @docusaurus/tsconfig.

\n

This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.

\n
How to prepare

The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:

package.json
 {
\"devDependencies\": {
- \"@tsconfig/docusaurus\": \"^1.0.7\",
+ \"@docusaurus/tsconfig\": \"^3.0.0-beta.0\",
}
}
tsconfig.json
 {
- \"extends\": \"@tsconfig/docusaurus/tsconfig.json\",
+ \"extends\": \"@docusaurus/tsconfig\",
\"compilerOptions\": {
\"baseUrl\": \".\"
}
}
\n

Admonition warning

\n

For historical reasons, we support an undocumented admonition :::warning that renders with a red color.

\n
Warning

This is a Docusaurus v2 :::warning admonition.

\n

However, the color and icon is historically wrong. Docusaurus v3 re-introduces :::warning admonition officially, documents it, and fix the color and icon.

\n
warning

This is a Docusaurus v3 :::warning admonition.

\n
How to prepare

If you previously used the undocumented :::warning admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use :::danger instead.

Docusaurus v3 also deprecated the :::caution admonition. Please refactor :::caution (yellow) to either :::warning (yellow) or :::danger (red).

\n

Versioned sidebars

\n

This breaking change will only affect Docusaurus v2 early adopters who versioned their docs before v2.0.0-beta.10 (December 2021).

\n

When creating version v1.0.0, the sidebar file contained a prefix version-v1.0.0/ that Docusaurus v3 does not support anymore.

\n
versioned_sidebars/version-v1.0.0-sidebars.json
{
\"version-v1.0.0/docs\": [
\"version-v1.0.0/introduction\",
\"version-v1.0.0/prerequisites\"
]
}
\n
How to prepare

Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly.

You can remove the useless versioned prefix from your versioned sidebars.

versioned_sidebars/version-v1.0.0-sidebars.json
{
\"docs\": [\"introduction\", \"prerequisites\"]
}
\n

Try Docusaurus v3 today

\n

Docusaurus v3 is now in beta, and already used in production by React-Native, Jest, and our own website.

\n

We think this new Docusaurus version is robust and ready to be deployed in production. It should be released officially soon, after receiving a positive feedback from early adopters of our community.

\n

We would really appreciate it if you try upgrading and report issues on the 3.0.0-beta.0 release discussion thread.

\n

For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:

\n
package.json
 {
\"dependencies\": {
- \"@docusaurus/core\": \"2.4.3\",
- \"@docusaurus/preset-classic\": \"2.4.3\",
- \"@mdx-js/react\": \"^1.6.22\",
+ \"@docusaurus/core\": \"3.0.0-beta.0\",
+ \"@docusaurus/preset-classic\": \"3.0.0-beta.0\",
+ \"@mdx-js/react\": \"^3.0.0\",
\"clsx\": \"^2.0.0\",
\"prism-react-renderer\": \"^1.3.5\",
- \"react\": \"^17.0.2\",
- \"react-dom\": \"^17.0.2\"
+ \"react\": \"^18.2.0\",
+ \"react-dom\": \"^18.2.0\"
},
\"devDependencies\": {
- \"@docusaurus/module-type-aliases\": \"2.4.3\"
+ \"@docusaurus/module-type-aliases\": \"3.0.0-beta.0\"
}
}
\n

Ask for help

\n

We will be there to help you upgrade through the following support channels:

\n\n

Alternatively, you can look for a paid Docusaurus Service Provider to execute this upgrade for you. If your site is open source, you can also ask our community for free, benevolent help.

\n

Conclusion

\n

Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.

\n

The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes.

", + "url": "https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3", + "title": "Preparing your site for Docusaurus v3", + "summary": "Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.", + "date_modified": "2023-09-29T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "maintenance" + ] + }, + { + "id": "https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing", + "content_html": "

Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

\n

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

\n

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

\n

\"Upgrading

\n

This workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as React Native, Jest, and the Docusaurus site itself.

\n

Docusaurus v3 comes with infrastructure changes and major dependency upgrades such as MDX v3 and React 18, which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That's why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.

\n

Workflow overview

\n

The general idea is pretty simple:

\n
    \n
  • Build your site in CI with GitHub Actions
  • \n
  • Take screenshots of all sitemap.xml pages with Playwright
  • \n
  • Upload them to Argos
  • \n
  • Do this for both Git branches main and pr-branch
  • \n
  • Compare the screenshots side-by-side in Argos
  • \n
\n

Argos will then report visual differences found between main and pr-branch as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.

\n

\"Argos

\n

\"Argos

\n

Argos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.

\n

Check the Docusaurus Argos page to explore our own website reports.

\n

Here is a more concrete example of Argos reporting a visual regression found while upgrading the React-Native website:

\n

\"Argos

\n

Workflow implementation

\n

This section will describe the implementation details of each step of the workflow.

\n

You will need to sign up to Argos and connect Argos to your GitHub repository

\n

Dependencies

\n

This workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:

\n
yarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio
\n

GitHub Action

\n

The GitHub action is responsible for executing the workflow for each Git branch.

\n

A minimal workflow could look like:

\n
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
take-screenshots:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: current

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Playwright browsers
run: yarn playwright install --with-deps chromium

- name: Build the website
run: yarn docusaurus build

- name: Take screenshots with Playwright
run: yarn playwright test

- name: Upload screenshots to Argos
run: yarn argos upload ./screenshots
\n

Playwright config

\n

Playwright is responsible for taking screenshots of the website previously built locally by the GitHub action.

\n

A minimal Playwright config could look like:

\n
playwright.config.ts
import {devices} from '@playwright/test';
import type {PlaywrightTestConfig} from '@playwright/test';

const config: PlaywrightTestConfig = {
webServer: {
port: 3000,
command: 'yarn docusaurus serve',
},
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
};

export default config;
\n

Playwright test

\n

A Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.

\n
screenshot.spec.ts
import * as fs from 'fs';
import {test} from '@playwright/test';
import {argosScreenshot} from '@argos-ci/playwright';
import {extractSitemapPathnames, pathnameToArgosName} from './utils';

// Constants
const siteUrl = 'http://localhost:3000';
const sitemapPath = './build/sitemap.xml';
const stylesheetPath = './screenshot.css';
const stylesheet = fs.readFileSync(stylesheetPath).toString();

// Wait for hydration, requires Docusaurus v2.4.3+
// Docusaurus adds a <html data-has-hydrated=\"true\"> once hydrated
// See https://github.com/facebook/docusaurus/pull/9256
function waitForDocusaurusHydration() {
return document.documentElement.dataset.hasHydrated === 'true';
}

function screenshotPathname(pathname: string) {
test(`pathname ${pathname}`, async ({page}) => {
const url = siteUrl + pathname;
await page.goto(url);
await page.waitForFunction(waitForDocusaurusHydration);
await page.addStyleTag({content: stylesheet});
await argosScreenshot(page, pathnameToArgosName(pathname));
});
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath);
console.log('Pathnames to screenshot:', pathnames);
pathnames.forEach(screenshotPathname);
});
\n
Why do we take screenshots with Argos instead of Playwright?

Argos has a Playwright integration that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.

\n
What's inside utils.ts?

This module contains implementation details that we choose to hide for clarity.

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Extract a list of pathnames, given a fs path to a sitemap.xml file
// Docusaurus generates a build/sitemap.xml file for you!
export function extractSitemapPathnames(sitemapPath: string): string[] {
const sitemap = fs.readFileSync(sitemapPath).toString();
const $ = cheerio.load(sitemap, {xmlMode: true});
const urls: string[] = [];
$('loc').each(function handleLoc() {
urls.push($(this).text());
});
return urls.map((url) => new URL(url).pathname);
}

// Converts a pathname to a decent screenshot name
export function pathnameToArgosName(pathname: string): string {
return pathname.replace(/^\\/|\\/$/g, '') || 'index';
}
\n

Stylesheet

\n

Screenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as false positive visual regressions.

\n

For this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read Argos - About flaky tests docs for details.

\n
screenshot.css
/* Iframes can load lazily */
iframe,
/* Avatars can be flaky due to using external sources: GitHub/Unavatar */
.avatar__photo,
/* Gifs load lazily and are animated */
img[src$='.gif'],
/* Algolia keyboard shortcuts appear with a little delay */
.DocSearch-Button-Keys > kbd,
/* The live playground preview can often display dates/counters */
[class*='playgroundPreview'] {
visibility: hidden;
}

/* Different docs last-update dates can alter layout */
.theme-last-updated,
/* Mermaid diagrams are rendered client-side and produce layout shifts */
.docusaurus-mermaid-container {
display: none;
}
\n
prevent layout shifts

We recommend hiding flaky UI elements affecting layout with display: none;.

For example, the docs \"Last Updated on\" might render on more than 1 line, eventually \"pushing\" the rest of your content further down, leading to Argos detecting many different pixels.

\n

Example repository

\n

The slorber/docusaurus-argos-example repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.

\n

\"Docusaurus

\n

Relevant pull-requests:

\n\n
More advanced example?

Browse the Docusaurus repository for a more advanced integration:

\n

Make it cheap

\n

The tools we choose are implementation details of this visual regression testing workflow.

\n

For Docusaurus, we choose Argos: it works well for us, and offers free and open source plans. However, you are free to adopt alternative tools.

\n

In case you don't mind storing large screenshots in Git, you can also try the free, self-hosted Playwright Visual Comparisons and browse visual differences with npx playwright show-report. However, we found using a dedicated external tool is more convenient.

\n

External tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.

\n

Limit the number of pathnames

\n

The base setup involves taking a screenshot of every single pathname found in sitemap.xml. For large sites, that can lead to a lot of screenshots.

\n

You can decide to filter the pathnames to only take screenshots of the most critical pages.

\n

For the Docusaurus website, do not take screenshots for versioned docs pages:

\n
screenshot.spec.ts
function isVersionedDocsPathname(pathname: string): boolean {
return pathname.match(/^\\/docs\\/((\\d\\.\\d\\.\\d)|(next))\\//);
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath)
.filter(isVersionedDocsPathname);

pathnames.forEach(screenshotPathname);
});
\n

Limit the workflow concurrency

\n

Implementing GitHub Actions concurrency groups will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.

\n
.github/workflows/argos.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
\n

Run your workflow conditionally

\n

It's not worth running this workflow for every single commit and pull-request.

\n

For example, if someone corrects a typo in your documentation, you probably don't want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that's a bit expected!

\n

For the Docusaurus website, we only run the workflow for pull-request having the Argos label:

\n
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]
types:
- opened
- synchronize
- reopened
- labeled

jobs:
take-screenshots:
if: ${{ github.ref_name == 'main' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Argos')) }}
runs-on: ubuntu-latest
steps:
# Your job steps here ...
\n

There are many options to explore, such as triggering the workflow manually or only when files matching a specific pattern are modified.

\n

Conclusion

\n

I believe visual regression testing is underused in the frontend ecosystem.

\n

Taking full-page screenshots is a low-hanging fruit that is easy to set up and can help you catch a new class of bugs that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for any kind of refactoring that shouldn't change the user interface.

\n

So why not give it a try?

\n

Happy hacking!

\n

See also

\n

Useful documentation links:

\n", + "url": "https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing", + "title": "Upgrading frontend dependencies with confidence", + "summary": "Upgrade npm dependencies with confidence thanks to a visual regression testing workflow using GitHub Actions, Playwright and Argos.", + "date_modified": "2023-09-22T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/releases/2.4", + "content_html": "

We are happy to announce Docusaurus 2.4.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n\n

Highlights

\n

Sidebar item description

\n

In #8236, we made it possible to provide a new description attribute for docs sidebar items of type link and category.

\n
sidebars.js
[
{
type: 'link',
label: 'Link with description',
href: 'https://docusaurus.io',
description: 'Some link description',
},
{
type: 'category',
label: 'Category with description',
description: 'Some category description',
items: [],
},
];
\n

These descriptions will be used in category generated index pages.

\n

\"Show

\n

Theme Query String

\n

In #8708, we added the possibility to force Docusaurus to initialize itself in light or dark mode through a new docusaurus-theme query-string parameter.

\n

This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.

\n
/docs/?docusaurus-theme=light
\n
/docs/?docusaurus-theme=dark
\n

Remark plugin npm2yarn upgrade

\n

In #8690, we upgraded our Remark plugin @docusaurus/remark-plugin-npm2yarn with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.

\n
Run these commands!

```bash npm2yarn
npm install
npm run build
npm run myCustomScript -- --some-arg
```
\n
http://localhost:3000
  • npm
  • Yarn
  • pnpm
npm install
npm run build
npm run myCustomScript -- --some-arg
\n

gtag support for multiple tracking IDs

\n

In #8620 we added support for the @docusaurus/plugin-google-gtag plugin to declare multiple tracking IDs.

\n
docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: [
'G-<YOUR-NEW-GA4-ID>',
'UA-<YOUR-OLD-UA-ID>',
],
},
},
],
],
};
\n
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023.

Docusaurus users should migrate to Google Analytics 4. Google does not permit to migrate your existing Universal Analytics data to your new Google Analytics 4 property.

To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (UA-*) and new one (G-*). Refer to the dedicated issue for details.

\n

Developer Experience

\n

In #8736, we improved how we render error messages and added initial support to render the full causal chain of an error (see ES2022 Error Cause).

\n
tip

To see it in action, click here:

\n

In #8735 we also made navbar-related error messages clearer to help users understand what they did wrong.

\n

\"Docusaurus

\n

Translations

\n

We made it possible to translate some new elements:

\n
    \n
  • #8677 introduces a new process.env.DOCUSAURUS_CURRENT_LOCALE (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...
  • \n
  • #8616 allows to translate the navbar and footer logo alt text
  • \n
\n

We added default theme translation support for multiple languages:

\n
    \n
  • 🇭🇺 #8668: Hungarian
  • \n
  • 🇳🇴 #8631: Norwegian (Bokmål)
  • \n
\n
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

\n

Other changes

\n

Other notable changes include:

\n
    \n
  • #8674: respect prefers-reduced-motion: reduce media query
  • \n
  • #8712: use a navbar item of type docSidebar in template
  • \n
  • #8801: allow tabs children to be falsy
  • \n
  • #8757: make search page react to external query-string changes
  • \n
  • #8803: fix code block buttons position in RTL
  • \n
  • #8615: fix color mode toggle when using dark navbar
  • \n
  • #8699: fix navbar dropdown tab focus bug
  • \n
\n

Check the 2.4.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/releases/2.4", + "title": "Docusaurus 2.4", + "summary": "We are happy to announce Docusaurus 2.4.", + "date_modified": "2023-03-23T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/releases/2.3", + "content_html": "

We are happy to announce Docusaurus 2.3.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n

Highlights

\n

Google Tag Manager plugin

\n

Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.

\n

We now have a @docusaurus/plugin-google-tag-manager package that you can use alongside or as an alternative to the existing gtag.js plugin (refer to this doc to understand when to use which solution).

\n
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023, and ask users to migrate to Google Analytics 4.

Therefore, we are also deprecating our existing @docusaurus/plugin-google-analytics package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the gtag.js plugin, or the Google Tag Manager plugin. Refer to the dedicated Docusaurus issue for details and questions.

\n

Tabs Query String Support

\n

It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ?qs-param=tab-value search parameter.

\n

This feature allows deep-linking to a specific documentation tab that will pre-selected on page load.

\n

When used alongside the groupId prop, the query string tab value takes precedence over the localStorage value.

\n

Make sure to check the documentation and the demo below to understand how it works:

\n\n
<Tabs groupId=\"current-os\" queryString>
<TabItem value=\"android\" label=\"Android\">
Android
</TabItem>
<TabItem value=\"ios\" label=\"iOS\">
iOS
</TabItem>
</Tabs>
\n
http://localhost:3000
  • Android
  • iOS

Android

\n

Nested admonitions

\n

It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:

\n
::::tip[nested admonitions]

You can now nest one admonition within another!

:::danger

Use this sparingly when it makes sense.

:::

::::
\n
nested admonitions

You can now nest one admonition within another!

danger

Use this sparingly when it makes sense.

\n

Blog createFeedItems

\n

A new blog plugin option feedOptions.createFeedItems gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.

\n
docusaurus.config.js
[
'@docusaurus/preset-classic',
{
blog: {
feedOptions: {
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
];
\n

Translations

\n

We added or completed the default theme translation support for multiple languages:

\n\n
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

\n

Other changes

\n

Other notable changes include:

\n
    \n
  • #8463 and #8328: fix some annoying Docusaurus layout issues
  • \n
  • #8539: Algolia plugin options.searchPagePath should be correctly applied to search modal footer
  • \n
  • #8462: Algolia plugin now makes it easier to transform displayed search results with custom logic
  • \n
  • #8397: the deploy CLI now understands git url insteadOf config
  • \n
\n

Check the 2.3.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/releases/2.3", + "title": "Docusaurus 2.3", + "summary": "We are happy to announce Docusaurus 2.3.", + "date_modified": "2023-01-27T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/releases/2.2", + "content_html": "

We are happy to announce Docusaurus 2.2.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n\n

Highlights

\n

Mermaid diagrams

\n

In #7490, we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also added support recently. You can create Mermaid diagrams using Markdown code blocks:

\n
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Health check
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
```
\n\n
http://localhost:3000
\n

Make sure to check the documentation, and the more advanced examples

\n

Config headTags

\n

In #8151, we added the ability to apply arbitrary HTML <head> tags to all pages of your site.

\n
docusaurus.config.js
module.exports = {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'icon',
href: '/img/docusaurus.png',
},
},
],
};
\n

Accessibility

\n

We did several accessibility improvements:

\n
    \n
  • #8207: improves keyboard navigation for mobile drawer hamburger button
  • \n
  • #8161: improves keyboard navigation for tabs
  • \n
  • #8204: makes the skip to content button support progressive enhancement
  • \n
  • #8174: improves screen reader announcement when toggling between light/dark mode
  • \n
\n

Developer Experience

\n

We made validation stricter and improved error messages:

\n
    \n
  • #8234: in case of doc processing failure, prints the problematic markdown file path in the error message
  • \n
  • #8192 and #8159: validates siteConfig.url more strictly and with better error message
  • \n
  • #8066: makes config url and baseUrl fail-safe and less sensitive to the presence or absence of a leading or trailing slash
  • \n
\n

Translations

\n

We completed the default theme translation support for multiple languages:

\n
    \n
  • 🇹🇷 #8105: completes Turkish translations
  • \n
  • 🇷🇺 #8253: completes Russian translations
  • \n
  • 🇫🇷 #8243: completes French translations
  • \n
  • 🇯🇵 #8075: completes Japanese translations
  • \n
\n
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

\n

Other changes

\n

Other notable changes include:

\n
    \n
  • #8210: the docusaurus swizzle CLI has a new --config option
  • \n
  • #8109: mobile navigation performance optimizations, prefetch resources earlier
  • \n
  • #8059: versions/locales navbar dropdowns preserve hash and querystring on navigation
  • \n
  • #8227: the client redirect plugin preserves hash and querystring on redirect
  • \n
\n

Check the 2.2.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/releases/2.2", + "title": "Docusaurus 2.2", + "summary": "We are happy to announce Docusaurus 2.2.", + "date_modified": "2022-10-29T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/2022/09/01/docusaurus-2.1", + "content_html": "

We are happy to announce Docusaurus 2.1, our very first minor version release.

\n

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

\n

\"Docusaurus

\n

Highlights

\n

DocCardList improvements

\n

In #8008, we simplified the usage of the<DocCardList> component, that is notably used on sidebar category generated index pages.

\n

The items prop is now optional, and will be automatically inferred from the content of the parent sidebar category:

\n
import DocCardList from '@theme/DocCardList';
- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';

- <DocCardList items={useCurrentSidebarCategory().items}/>
+ <DocCardList/>
\n

Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category.

\n

\"simplified

\n

noindex improvements

\n

We improved the support of the noindex meta robots directive, a way to signal search engines you don't want a specific page to be indexed.

\n

In #7963, we allow noindex to be configured on a per-docs-version basis.

\n

Use the following plugin options to tell crawlers you don't want the 1.0.0 version to be indexed:

\n
const options = {
versions: {
'1.0.0': {
noIndex: true,
},
},
};
\n

In practice, Docusaurus will add the following meta to each page of that version:

\n
<meta name=\"robots\" content=\"noindex, nofollow\" />
\n

In #7964, we also fixed a bug where the sitemap plugin would still contain pages that have a noindex directive. Now the sitemap plugin will reliably filter out all the pages containing noindex directives.

\n

Overriding default meta tags

\n

In #7952, it becomes possible to override default html meta tags you couldn't before:

\n
<>
{siteConfig.noIndex && <meta name=\"robots\" content=\"nofollow, noindex\" />}
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
</>
\n

It is now possible to use <Head> or themeConfig.metadata:

\n
    \n
  • to override the viewport meta
  • \n
  • to override the robots meta: you could mark your site as noIndex, but except for specific pages that should be indexed
  • \n
\n

Ukrainian translations

\n

In #7953, we added default classic theme translations for the Ukrainian language.

\n

Other changes

\n

Check the 2.1.0 changelog entry for an exhaustive list of changes.

", + "url": "https://docusaurus.io/blog/2022/09/01/docusaurus-2.1", + "title": "Docusaurus 2.1", + "summary": "We are happy to announce Docusaurus 2.1, our very first minor version release.", + "date_modified": "2022-09-01T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0", + "content_html": "

Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

\n

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

\n

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

\n

\"social-card

\n\n
We are on ProductHunt and Hacker News!

Now is the best time to show your love for Docusaurus!

\"Docusaurus
\n
tip

In a hurry? Check what's new in Docusaurus 2.0!

\n

What is Docusaurus exactly?

\n

Docusaurus is a static site generator that helps you ship beautiful documentation websites in no time.

\n

Focus on your content: just write Markdown files. Docusaurus will generate an optimized website for you that's easy to host anywhere.

\n

Docusaurus is full-featured and very flexible: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to adapt the UI to match your branding so that it integrates nicely with your main website or documentation portal. Its usage of React enables a modern client-side navigation, and the ability to build an interactive documentation.

\n

\"Introducing

\n

The Docusaurus philosophy is akin to the Pareto principle: you can get 80% of the results for 20% of the effort. This enables you to compete with top-notch documentation sites with minimal effort.

\n

Unless you're spinning up a documentation team with engineering resources, you\nprobably want Docusaurus!

\"Rachel
Rachel NaborsFormer ReactJS & React-Native docs manager
\n

Docusaurus aims to be the best documentation tool, but you can use it for other use-cases as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!

\n

Using Docusaurus for my tech blog has been a fantastic choice. It looks\ntremendous out-of-the-box and the awesome DX means I write way more

\"Johnny
Johnny ReillyGroup Principal Engineer at Investec
\n
tip

Try Docusaurus now with our online playgrounds and 5 minutes tutorial ⏱️

\n

The story behind Docusaurus

\n

Docusaurus was created at Facebook Open Source in 2017 (now Meta Open Source). We had a lot of internal and open source projects to document. It's complicated enough to write good documentation, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to focus on the content, and Markdown is great for that.

\n

At that time, our solution was to copy/paste a Jekyll template over and over again. This naturally became hard to maintain, so we created a tool to solve our own pain once for all.

\n

Docusaurus v1 was born!

\n

\"Birth

\n

It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as Prettier, Babel, React-Native, KaTeX, and of course Docusaurus v1 itself.

\n\n
\n
note

Notice that the sample sites above use different colors, but still look quite the same.

\n

Toward Docusaurus 2.0

\n

Docusaurus v1 has been very successful, but we started to question some architectural choices:

\n
    \n
  • React was only used as a server-side templating language, and not used on the client
  • \n
  • Theming system was pretty limited, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations
  • \n
  • The docs versioning system was confusing, since it was based on a diff algorithm
  • \n
  • The codebase was monolithic, neither well-tested nor easy to extend
  • \n
\n

Docusaurus v2 was rebuilt from the ground up with a new modular architecture:

\n
    \n
  • React is now also used on the client, enabling a modern Single Page Application navigation
  • \n
  • Plugins empower the community to contribute useful features as third-party packages
  • \n
  • Theming is more flexible than ever
  • \n
  • Docs versioning is now based on snapshot copies, much easier to understand
  • \n
  • We kept everything good from v1: docs, blog, pages, versioning, i18n...
  • \n
  • We implemented several new features
  • \n
\n

More details in the Docusaurus 2 project announcement and v1 to v2 migration guide

\n

Who uses Docusaurus 2.0?

\n

Despite being in pre-release, it didn't take long for Docusaurus v2 to outgrow Docusaurus v1 in terms of NPM downloads:

\n

\"NPM

\n

Our GitHub star trend is very positive, competing with major frameworks:

\n

\"GitHub

\n

Today, Docusaurus v2 has already been a great success even before its launch:

\n\n\n
\n
tip

Please add your site to our site showcase! It only takes a few seconds: just post a comment here.

\n

We use Docusaurus everywhere now and love it

\"Max
Max LynchIonic co-founder and CEO
\n

We've been using V2 since January and it has been great

\"Supabase\"
SupabaseOpen Source Firebase alternative
\n

Docusaurus is next level easy for literally everything you would need for\ndocumentation in your project.

\"Gabriel
Gabriel CsapoStaff Software Engineer at LinkedIn
\n

Docusaurus is awesome. We use it

\"Matt
Matt GreggSenior Front End Developer at Shopify
\n

What's New in 2.0?

\n

It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the most impactful.

\n

MDX

\n

MDX allows you to interleave React components in Markdown. This enables you to build top-notch interactive documentation experiences very easily.

\n

A demo is worth a thousand words:

\n
docs/my-document.mdx
### Give it a try: press that button!

import ColorModeToggle from '@theme/ColorModeToggle';

<ColorModeToggle/>
\n
http://localhost:3000

Give it a try: press that button!

\n
info

MDX has its own plugin system. You to customize your Markdown authoring experience, and even create your own Markdown syntax.

\n

Docusaurus + MDX is great: we were able to implement a beautiful two-pane\nlayout and give the author fine-grained control on the placement of code and\ncorresponding prose.

\"Hamel
Hamel HusainHead Of Data Science at Outerbounds
\n

File system conventions

\n

Our goal is to make Docusaurus very intuitive to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.

\n
\n
\n

Using the auto-generated sidebars makes it so simple to just create a page and\nnot worry about any other configuration.

\"Paul
Paul ArmstrongPrincipal Engineer at Microsoft
\n

Plugins

\n

Docusaurus now has a modular architecture with a plugin system — our core features like docs, blog, pages, and search are all powered by individual plugins.

\n

More importantly, it enables our community to enhance Docusaurus with additional features.

\n

Let's highlight some examples:

\n\n

\"redocusaurus

\n\n

\"shiki-twoslash

\n

The plugin API was a breeze to use, and powerful enough that I could port the\ncode sample renderer from the TypeScript website site in a couple of hours.

\"Orta
Orta TheroxFormer TypeScript core team at Microsoft
\n\n

\"local

\n
tip

We have a curated list of outstanding plugins in our community resources page.

\n

The plugin system in Docusaurus v2 has made expanding 1Password's developer\nportal so easy and fun. Super excited to show you what we've got cooking up.

\"Jody
Jody HeavenerSenior Developer at 1Password
\n

Theming

\n

Theming is one of the most important features of Docusaurus: we believe a professional documentation site should respect your company's branding and create a consistent experience.

\n

Docusaurus theming gives a lot of flexibility on multiple levels:

\n
    \n
  • Customize CSS variables to adjust colors, fonts, and more
  • \n
  • Provide your own CSS stylesheets
  • \n
  • Implement your own theme from scratch
  • \n
  • Override any React component provided by our default theme: we call this swizzling
  • \n
\n

I love Docusaurus Swizzling feature. It’s opinionated and flexible at the same\ntime. This is super cool since a framework usually needs to sacrifice one for\nthe other.

\"\nHung
\nHung Viet NguyenCreator of JestPreview
\n

This enables users willing to invest a bit more time on customizations to build sites that look different from others.

\n\n

So far it’s working out really nicely. It’s been really easy to style up the\nway that we wanted it to look. No blockers at all.

\"Nader
Nader DabitWeb3 developer, Developer DAO founder
\n

Other features

\n

Docusaurus 2 comes with a very long list of useful features:

\n
    \n
  • Theme: dark mode, better UI and UX, flexible themeConfig options...
  • \n
  • Docs versioning: flexible plugin options to adapt to your workflow
  • \n
  • Docs sidebar: collapsible category, category index pages...
  • \n
  • Blog: multiple authors, authors map, archive page...
  • \n
  • Markdown: tabs, math equations, live code blocks, linking, flexible front matter...
  • \n
  • Search: use the new Algolia DocSearch 3 experience
  • \n
  • Assets: make it easy to incorporate images and other kinds of files
  • \n
  • Internationalization: config options, default theme translations...
  • \n
  • Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...
  • \n
  • SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...
  • \n
  • PWA: add offline support to your site, and make it installable
  • \n
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • \n
  • TypeScript support for config files, plugins, custom pages and theme authors
  • \n
  • Playgrounds: assess Docusaurus easily from your browser with docusaurus.new
  • \n
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • \n
  • Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working
  • \n
\n

Recently, I was shocked at how good Docusaurus is out of the box. Super solid,\na good bit of configuration without being overwhelming, and the ability to\nreally customize the styling if you're braver than I am.

\"Alex
Alex DeBrieAWS Data Hero, author of The DynamoDB Book
\n

Why 2.0 now?

\n

Many enthusiastic followers of ours have been curious why it took us 4 years to release Docusaurus 2.0, considering the beta is already successful and widely used in production.

\n

The reason is that we aim to respect Semantic Versioning, which means we will be incrementing the major version number whenever we release a breaking change.

\n

It is important for multiple reasons:

\n
    \n
  • It guarantees simple minor version upgrades, as long as you only use the public API
  • \n
  • It follows front-end ecosystem conventions
  • \n
  • A new major version is an opportunity to thoroughly document breaking changes
  • \n
  • A new major/minor version is an opportunity to communicate new features through a blog post
  • \n
\n

The problem is that our flexible theming system inherently creates a very implicit API surface on which it is hard to know what is a breaking change in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our public API, so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.

\n
info

From now on, Docusaurus will release new major versions more frequently. In practice, you can expect a new major version every 2 to 4 months.

Major version numbers are not sacred, but we still group breaking changes together and avoid releasing major versions too often.

Check our release process documentation for details.

\n

What's Next?

\n

\"Slash

\n

The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will backport retro-compatible changes in Docusaurus 2.x minor versions to make them available as soon as possible to the community on a stable channel.

\n

A sample of the features on our roadmap for the upcoming major versions of Docusaurus:

\n\n

Thank You

\n

We'd like to express our gratitude to all our contributors, including:

\n\n

We'd like to thank in particular all our Docusaurus 2.0 early adopters for assessing its alpha, beta and canary releases, providing a ton of invaluable feedback. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.

\n

At Meta Open Source, Docusaurus is one of our most successful projects. We can't wait to see all the outstanding documentation websites that you will create! Don't forget to submit them to our site showcase!

\n

Now, let your imagination run wild 🤪!

\n

— Slash

\n
We are on ProductHunt and Hacker News!

🙏 Share your experience using Docusaurus with the community!

\"Docusaurus
\n

\"Slash

", + "url": "https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0", + "title": "Announcing Docusaurus 2.0", + "summary": "Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️", + "date_modified": "2022-08-01T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release" + ] + }, + { + "id": "https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap", + "content_html": "

Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!

\n

We've reached full feature parity with v1 after the release of internationalization, announced our first beta, and welcomed significantly more users this year.

\n

The official v2 release is just around the corner! Follow the roadmap issue for any latest news.

\n

\n

Highlights

\n

Let's begin by going over a few highlights this year. Remember the todo-list from half a year ago? Time to take it out again and see how far we've come!

\n
    \n
  • Internationalization: officially released four months after its initial landing in late 2020. Seen great success in many projects
  • \n
  • Autogenerated sidebars: no need to maintain a big sidebars.js anymore
  • \n
  • Webpack 5: significantly improved build performance
  • \n
  • Trailing slash config: seamless integration with any content hosting provider
  • \n
  • Redesigned mobile navigation: mobile users now enjoy all navigation features as on desktop
  • \n
  • UI improvements: more accessible quotes, better admonitions, back-to-top button...
  • \n
  • Blog multi-authors: credit all the amazing contributors that collaborated on one blog post!
  • \n
  • More blog features: archive page, structured data for SEO, full post content in feeds – empowering you to ship a fully-featured blog in no time
  • \n
  • Asset collocation: no need for a bloated static folder anymore: colocate your images with Markdown files
  • \n
  • Sidebar category index pages: category labels can now be associated with pages, enabling better doc organization
  • \n
\n

Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!

\n

Trends

\n

npm

\n

Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.

\n

\"Docusaurus

\n

(Ah, the classic Christmas dip...)

\n

We released 18 versions, going from 2.0.0-alpha.71 to 2.0.0-beta.14. That's one release every 20 days!

\n

GitHub

\n
    \n
  • Stars: 20,460 → 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!
  • \n
  • Total contributors: 512 → 773 (+51.0% y/y)
  • \n
  • Dependents: 5,039 → 14,579 (+189.3% y/y) for v2, and 6,311 → 7,581 (+20.1% y/y) for v1
  • \n
  • Commits: 1,187 commits in the past year, averaging 23 commits every week
  • \n
  • Issues: 619 issues opened, 505 of them eventually resolved
  • \n
  • A new core team member (yep, that's me 😝)
  • \n
\n

Our star trend is also very positive. Compared to similar projects, we are growing at a faster rate:

\n

\"Stars

\n

With an 8.4k increase in stars, we are ranked number 3 in this year's JavaScript rising stars of static site generators, preceded only by Next.js and Astro.

\n

\"Docusaurus

\n

Featured adoptions

\n

Our showcase has welcomed a few new \"favorite\" sites that showcase the true potential of Docusaurus 2's pluggable architecture.

\n\n

\"Iota\"Iota

\n\n

\"Dyte\"Dyte

\n\n

\"Ionic\"Ionic

\n\n

\"Courier\"

\n

The creativity of Docusaurus users is beyond our imagination 🤩 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to have it in our showcase.

\n

Community

\n

As an active moderator on Discord, I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other – case in point, I was formerly a community contributor before becoming a maintainer.

\n

We are constantly mentioned on Twitter with inspirational feedback:

\n
\n

@docusaurus is amazing! cant believe it's THAT simple to use.

\n
\n
\n

No extra plugins, tooling or compilation steps. It just works out of the box.

\n
\n
\n

I love @docusaurus. I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.

\n
\n

And we keep every one of them in our little box 😄 If you enjoy Docusaurus yourself, keep tagging us with your comments!

\n

As we approach the official release, we are interested in knowing more about what people are doing out there: plugin authors, creators of customized sites, and all new users – please keep us posted about your achievements so we can steer our development to better serve your needs.

\n

Going forward

\n

In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated milestone to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a more robust theming workflow, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:

\n
    \n
  • Guidelines on component organization. We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need.
  • \n
  • Improvements to the swizzle CLI. We want users to use it with delight and let it aid you through all possible swizzling scenarios.
  • \n
  • Refactoring our theme APIs. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.
  • \n
  • Docs. We want our docs to be maximally accessible to everyone – from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.
  • \n
\n

Read more about plans for Docusaurus 2.0 in this roadmap issue. 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!

\n

As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for architectural changes in 3.0!

\n

With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.

\n

We'd like to express our gratitude to all the contributors in 2021, including:

\n
    \n
  • The core team: Alexey Pyltsyn, Sébastien Lorber, Joshua Chen, and Yangshun Tay for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features
  • \n
  • Joel Marcey for creating Docusaurus and supporting its development all along
  • \n
  • The Algolia team for helping Docusaurus users migrate to the new DocSearch and answering search-related questions
  • \n
  • All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord
  • \n
\n

So long, 2021, and let's greet a great 2022!

", + "url": "https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap", + "title": "Docusaurus 2021 Recap", + "summary": "Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!", + "date_modified": "2022-01-24T00:00:00.000Z", + "author": { + "name": "Joshua Chen", + "url": "https://joshcena.com/" + }, + "tags": [ + "recap" + ] + }, + { + "id": "https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration", + "content_html": "

DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

\n

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

\n

Upgrading your Docusaurus site

\n

In the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.

\n

This email will include a new appId and apiKey to use in your Docusaurus configuration.

\n

The only things you have to do:

\n
    \n
  • Join the Algolia application (eventually creating a new Algolia account)
  • \n
  • Update your site configuration.
  • \n
\n
docusaurus.config.js
const config = {
themeConfig: {
algolia: {
appId: '<NEW_APP_ID>',
apiKey: '<NEW_SEARCH_API_KEY>',
},
},
};

module.exports = config;
\n
info

appId is now required.

These keys are not secrets and can be added to your Git repository.

\n

DocSearch has a new home!

\n

What is DocSearch?

\n

DocSearch is a program created by Algolia, which offers search to technical documentation of Open Source projects and technical blogs for free.

\n

You can read more here, and apply if you'd like to give it a try!

\n

What is this migration about?

\n

Motivation

\n

With the upcoming stable release of DocSearch UI, we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.

\n

What's new?

\n

DocSearch now leverages the Algolia Crawler, which includes a web interface that will allow you to:

\n
    \n
  • Start, schedule and monitor your crawls
  • \n
  • Edit your config file from a live editor
  • \n
  • Test your results with DocSearch v3
  • \n
\n

\"The

\n

\"The

\n

But also, more Algolia features in your own Algolia app:

\n
    \n
  • Team management
  • \n
  • Browse and see how your records are indexed in Algolia
  • \n
  • Try other Algolia features with free trials
  • \n
\n

\"The

\n

\"The

\n

And of course, a lot more, for free.

\n

FAQ

\n

I'm using Docusaurus and DocSearch, can I migrate?

\n

At the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you'll be contacted as soon as your Algolia app is ready!

\n

Where can I read more about this?

\n

We wrote a small migration guide but you'll have more detailed information in the migration email.

\n

I received the migration email but the invite expired

\n

Please contact us via either email or DocSearch's Discord or on Docusaurus's Discord #algolia channel

\n

I have feedback!

\n

For any feedback regarding our documentation or the DocSearch UI component, you can open an issue on our GitHub repository, but also contact us via the methods above.

\n

Can I still run my own DocSearch instance?

\n

In favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved DocSearch scraper and DocSearch v2, but the repositories will still be available and open to pull requests.

\n

The previous documentation (now called legacy) remains available as well as our run your own guide.

", + "url": "https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration", + "title": "DocSearch migration", + "summary": "DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.", + "date_modified": "2021-11-21T00:00:00.000Z", + "author": { + "name": "Clément Vannicatte", + "url": "https://github.com/shortcuts" + }, + "tags": [ + "search" + ] + }, + { + "id": "https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta", + "content_html": "

After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

\n

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

\n

\n

Docusaurus adoption

\n

Don't fear the beta tag!

\n

Docusaurus 2 is widely adopted and growing fast:

\n

\"Docusaurus

\n

To get a fuller understanding of the quality of current Docusaurus 2 sites, our new showcase page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!

\n

Don't miss our favorite sites; they all stand out with something unique:

\n

\"A

\n

Why was Docusaurus v2 in alpha for so long?

\n

It's hard to believe that the first alpha release v2.0.0-alpha.0 was 2 years ago 😳 , unusually long for a software alpha.

\n

As this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached feature parity with Docusaurus 1 with i18n, and it has been successfully adopted by many Docusaurus sites (see i18n showcase).

\n

We're now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.

\n

What are the goals of the beta?

\n

Now that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.

\n

In addition, we will use the beta phase to improve our theming system.

\n

We want to make it:

\n
    \n
  • \n

    easier to implement a custom theme, including for ourselves. We want to provide multiple official themes (including Tailwind CSS) for a long time.

    \n
  • \n
  • \n

    safer to extend an existing theme: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.

    \n
  • \n
\n

We will build a better theming infrastructure and refactor the classic theme to use it.

\n

If you customize your site, you may find these planned improvements quite valuable.

\n

What's new?

\n

In case you missed it, we recently shipped two major improvements:

\n\n

What's next?

\n

Shipping the official 2.0 release!

\n

To get there, we will continue to fix bugs and implement the most wanted features, including:

\n\n

Conclusion

\n

This is an exciting time for Docusaurus.

\n

We are inspired by the positive feedback about Docusaurus, and discover new sites online every single day.

\n

We are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.

\n

Thank you to everyone for reading and to the entire community who supports Docusaurus. 🤗

", + "url": "https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta", + "title": "Announcing Docusaurus 2 Beta", + "summary": "After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.", + "date_modified": "2021-05-12T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release", + "beta" + ] + }, + { + "id": "https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n", + "content_html": "

Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

\n

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

\n

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

\n

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

\n

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

\n

Translate your site

\n

You can translate a Docusaurus site in 3 simple steps:

\n
    \n
  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. \n
  3. Translate: put the translation files at the correct filesystem location
  4. \n
  5. Deploy: build and deploy your site using a single or multi-domain strategy
  6. \n
\n

The i18n support is very flexible and based on the filesystem.

\n

The i18n tutorial is the best way to get started, and we provide help to use Git or Crowdin.

\n

Design decisions

\n

The goals of the Docusaurus i18n system are:

\n
    \n
  • Simple: just put the translated files in the correct filesystem location
  • \n
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • \n
  • Flexible deployment options: single, multiple domains, or hybrid
  • \n
  • Modular: allow plugin authors to provide i18n support
  • \n
  • Low-overhead runtime: documentation is mostly static and does not require a heavy JS library or polyfills
  • \n
  • Scalable build-times: allow building and deploying localized sites independently
  • \n
  • Localize assets: an image of your site might contain text that should be translated
  • \n
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • \n
  • Easy to use with Crowdin: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2
  • \n
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • \n
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • \n
  • Default translations: classic theme labels are translated for you in many languages
  • \n
\n

Showcase

\n

We worked with a few volunteers to dogfood the i18n support before releasing it.

\n

Jest: upgrading Docusaurus

\n

We have made it possible to upgrade a translated Docusaurus 1 site to Docusaurus 2.

\n

Jest, using Docusaurus 1 and Crowdin was one of those sites.

\n

The Docusaurus 2 migration was successful and the new site is now deployed in production (announcement post).

\n

\"Jest&#39;s

\n

Redwood: adopting Docusaurus

\n

Redwood is a React full-stack Jamstack framework.

\n

They were looking for a solution to create an internationalized learning platform, and became early adopters of Docusaurus 2 i18n for learn.redwoodjs.com, using Crowdin to get it translated to French.

\n

\"Redwood&#39;s

\n

Datagit: using LTR support

\n

The i18n system should work with any language, including Right-to-Left languages.

\n

Datagit.ir is using Farsi, and a simple configuration option is able to flip the Docusaurus theme to add the required Right-to-Left support.

\n

\"Datagit&#39;s

\n

Conclusion

\n

We sincerely hope you will adopt and like the new i18n support.

\n

This feature has not been an easy one, and we would like to thank everyone that got involved in this journey:

\n
    \n
  • Alexey for his help to make the i18n support exhaustive and even better than v1
  • \n
  • Simen for volunteering and supporting the Jest migration
  • \n
  • Claire for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks
  • \n
  • Massoud for reviewing my work on LTR and adopting it on Datagit
  • \n
  • Crowdin for their support and willingness to improve their translation SaaS
  • \n
  • The Docusaurus community for their patience, and providing many useful feedbacks on GitHub
  • \n
\n

Thanks for reading.

\n

🙏 And please, add your brand new i18n sites to our showcase page. We accept any all polished Docusaurus site here, and we are working on a redesign allowing you to filter sites by features.

", + "url": "https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n", + "title": "Releasing Docusaurus i18n", + "summary": "Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.", + "date_modified": "2021-03-09T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "release", + "i18n" + ] + }, + { + "id": "https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap", + "content_html": "

2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

\n

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

\n

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

\n

We are still in alpha, but expect some good news very soon!

\n

\"Three

\n

Docusaurus 2 highlights

\n

We have worked on many features this year, and would like to highlight the most significant ones:

\n
    \n
  • i18n: easily translate your Docusaurus site, released soon! (preview, doc)
  • \n
  • Version dropdown: enable contextual version switch
  • \n
  • Versioning options: solving the most common pain-points users had with versioning
  • \n
  • Contextual search: search in the current version, use the brand-new DocSearch 3 experience
  • \n
  • Markdown pages: use Markdown instead of React components to create standalone pages
  • \n
  • Better theme: various UI, UX and accessibility improvements
  • \n
  • PWA: add offline support to your site, and make it installable
  • \n
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • \n
  • Multi-instance: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)
  • \n
  • Migration CLI: automate the upgrade from Docusaurus 1
  • \n
  • CodeSandbox: assess Docusaurus easily from your browser with new.docusaurus.io
  • \n
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • \n
  • TypeScript: progressive adoption for internal code, and improve usage for users
  • \n
  • Publish Infima: it is now open-source
  • \n
\n

Docusaurus 2 growth

\n

The plan to rebuild Docusaurus from scratch in 2019 paid off: after a slow start, Docusaurus 2 has been widely adopted and has already outgrown Docusaurus 1 usage.

\n

\"Docusaurus

\n

Notable projects, startups, large companies, and individuals adopted Docusaurus 2 (showcase):

\n\n

We helped large scale Docusaurus 1 sites to upgrade, ensuring a proper migration path and feature parity.

\n

React Native was successfully upgraded to Docusaurus 2 (archived v1 site):

\n

\"React

\n

Localized Docusaurus 1 sites (like Jest) will be able to upgrade too:

\n

\"Jest&#39;s

\n

We also saw the first right-to-left Docusaurus 2 site published:

\n

\"Datagit&#39;s

\n

GitHub Activity

\n
    \n
  • Stars: 14632 → 20946 (+43.2% y/y)
  • \n
  • Total Contributors: 303 → 512 (+68.9% y/y). Most of which are non-Facebook contributors
  • \n
  • Weekly npm Downloads: 2356 → 25592 (+986% y/y)
  • \n
  • On GitHub, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)
  • \n
\n

Collaboration with Major League Hacking

\n

We have welcomed Major League Hacking (MLH) fellows for 2 seasons already.

\n

We are very thankful for the various contributions they made, such as:

\n
    \n
  • Writing the foundations of the v1 to v2 migration CLI
  • \n
  • Help migrate the React Native website from v1 to v2
  • \n
  • Making the config validation more strict and exhaustive, returning helpful error messages
  • \n
  • Adding CodeSandbox support
  • \n
  • Improving the CI pipelines: build size and Lighthouse bots
  • \n
\n

We look forward to continuing this collaboration in 2021.

\n

Media

\n

Dmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in 60 seconds or 15min videos.

\n

Rachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in React Native Radio 178 (podcast), and William Candillon the React Native website migration (video).

\n

Many blog posts have been published:

\n\n

Community

\n

The Docusaurus community continues to grow, the Discord server is quite active, and Stack Overflow questions keep being posted.

\n

The modular architecture of Docusaurus 2 allowed the community to build and publish third-party plugins. As we would like to federate better our community, if you are building a plugin, please let us know.

\n

What's next?

\n

As the core features of Docusaurus 2 have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the beta and release-candidate phase.

\n

With proper support for i18n and versioning, and large scale migrations such as React Native and Jest, we now have a clear migration path for all Docusaurus 1 sites.

\n

We still have a few major features that we would like to work on:

\n\n

Huge thanks to the community for their contributions in 2020, especially:

\n
    \n
  • Joel Marcey for creating Docusaurus and supporting the project all this time
  • \n
  • the core team - Alexey Pyltsyn, Sébastien Lorber, Yangshun Tay
  • \n
  • the Major League Hacking and Facebook interns for their significant impact
  • \n
  • the Algolia team for DocSearch 3 and their support
  • \n
  • Bartosz Kaszubowski for his investment in the React Native migration
  • \n
  • the whole community for their contributions, and providing support to each other
  • \n
\n

Cheers to a great 2021! 🎉

", + "url": "https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap", + "title": "Docusaurus 2020 Recap", + "summary": "2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.", + "date_modified": "2021-01-19T00:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://thisweekinreact.com" + }, + "tags": [ + "recap" + ] + }, + { + "id": "https://docusaurus.io/blog/2020/01/07/tribute-to-endi", + "content_html": "

It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.

\n

It is impossible to overstate Endi's impact on this project:

\n\n

Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.

\n

We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or tweet if you have a suggestion.

\n

The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. 😔

\n

\"A

", + "url": "https://docusaurus.io/blog/2020/01/07/tribute-to-endi", + "title": "Tribute to Endi", + "summary": "It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.", + "date_modified": "2020-01-07T00:00:00.000Z", + "author": { + "name": "Joel Marcey", + "url": "https://twitter.com/JoelMarcey" + }, + "tags": [ + "endi", + "tribute" + ] + }, + { + "id": "https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap", + "content_html": "

2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

\n

Docusaurus 2 (D2)

\n

In 2018, we proposed to rebuild Docusaurus from the ground up. It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of @endilie, our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.

\n

D2's killer features are Dark Mode and its superb performance. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.

\n

Last but not least, we implemented a plugins architecture and turned the repo into a Lerna monorepo. We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.

\n

GitHub Activity

\n
    \n
  • Stars: 10050 → 14632 (+45.6% y/y)
  • \n
  • Total Contributors: 182 → 303 (+66.4% y/y). Most of which are non-Facebook contributors
  • \n
  • Daily npm Downloads: 728 → 2320 (+218.7% y/y). The peak was in November
  • \n
  • D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub
  • \n
  • We now have 4 active core contributors! (+100% y/y)
  • \n
\n

Notable Users

\n

A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:

\n\n

And welcomed more projects to Docusaurus 1:

\n\n

Media

\n

Yangshun gave a classroom session during F8 about Using Docusaurus to Create Open Source Websites.

\n

Community

\n

A few third-party hosting/development services also has first-class integration with a Docusaurus setup:

\n\n

Looking Ahead

\n

D2 has gained some traction among the developer community. In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!

\n

Huge thanks to the community for their contributions, especially the core team - Endilie Yacop Sucipto, Alexey Pyltsyn, Wei Gao. Lastly, thank you Joel Marcey for starting Docusaurus and supporting the project all this time.

\n

Cheers to a great 2020! 🎉

", + "url": "https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap", + "title": "Docusaurus 2019 Recap", + "summary": "2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)", + "date_modified": "2019-12-30T00:00:00.000Z", + "author": { + "name": "Yangshun Tay", + "url": "https://github.com/yangshun" + }, + "tags": [ + "recap" + ] + }, + { + "id": "https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash", + "content_html": "

\"Docusaurus

\n

Docusaurus went live on December 14, 2017. At the time, we had 8 early adopters.

\n

We now have nearly 60 known users of Docusaurus, and probably more that we don't know about. We have 9K GitHub stars and an active community, particularly Yangshun Tay and Endilie Yacop Sucipto, both of whom are the lead maintainers helping keep this project moving forward.

\n

Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.

\n
\n

Special thanks to Eric Nakagawa, creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!

\n
", + "url": "https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash", + "title": "Happy 1st Birthday Slash!", + "summary": "Docusaurus makes 1 year! Happy Birthday Slash!", + "date_modified": "2018-12-14T00:00:00.000Z", + "author": { + "name": "Joel Marcey", + "url": "https://twitter.com/JoelMarcey" + }, + "tags": [ + "birth" + ] + }, + { + "id": "https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2", + "content_html": "

Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

\n

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

\n

Introduction

\n

It all started with this RFC issue opened by Yangshun towards the end of June 2018.

\n

[RFC] Docusaurus v2 · Issue #789 · facebook/docusaurus

These are some of the problems I'm seeing in Docusaurus now and also how we can\naddress them in v2. A number of the ideas here were inspired by VuePress and other\nstatic site generators. In the current static site generators ecosystem, t...

\n

Most of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.

\n

Infrastructure

\n

Content

\n

A Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and dangerouslySetInnerHTML 😱.

\n

In addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.

\n

For Docusaurus 2, we will be using webpack as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, during build time we will create a server-rendered version of the app and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by Gatsby.

\n

Versioning

\n

If you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs if and only if the docs content are different.

\n

For example, if we have docs/hello.md:

\n
---
id: hello
title: hello
---
Hello world !
\n

And we cut version 1.0.0, Docusaurus will create versioned_docs/version-1.0.0/hello.md:

\n
---
id: version-1.0.0-hello
title: hello
original_id: hello
---
Hello world !
\n

However, if there are no changes to hello.md when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, versioned_docs/version-2.0.0/hello.md will not exist.

\n

This can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit versioned_docs/version-1.0.0/hello.md or manually add versioned_docs/version-2.0.0/hello.md. This could potentially lead to unwanted bugs. Here is a real scenario in Jest.

\n

In addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where renaming docs breaks links in old versions.

\n

For Docusaurus 2, every time we cut a new version, we will instead take a snapshot of all the docs. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.

\n

Translation

\n

Docusaurus allows for easy translation functionality by using Crowdin. Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that English is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.

\n

For Docusaurus 2, we will not assume English is the default language. When a user enables internationalization, they have to set a default language in siteConfig.js. We will then assume that all the files in docs are written in that language.

\n

In addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.

\n

Customizability

\n

Layout

\n

The current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site's appearance to their wishes.

\n

For Docusaurus 2, layout and styling should be controlled by the user. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by create-react-app and VuePress, Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using React Helmet. Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.

\n

Markdown

\n

Our Markdown parsing is currently powered by Remarkable. What if the user wants to use Markdown-it or even MDX? And then there is an issue of which syntax highlighter to use, (e.g: Prism vs Highlight.js). We should leave these choices open to the user.

\n

For Docusaurus 2, users can eject and choose their own Markdown parser. It does not matter if they want to use another Markdown parser such as Remark, or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the RAW string of Markdown. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we're still experimenting with different Markdown parsers.

\n

Search

\n

Our core search functionality is based on Algolia. There are requests by users to be able to use different search offerings, such as lunrjs for offline search.

\n

I personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their DocSearch is open source. For example, I recently submitted this PR that enables DocSearch to scrape alternate languages in sitemap.

\n

For Docusaurus 2, we will allow users to customize the search box. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.

\n

Stability

\n

Software is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.

\n

For Docusaurus 2, we are adding tests as we develop since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.

\n

Frequently Asked Questions

\n

Will there be any breaking changes?

\n

If you've read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to minimize the number of breaking changes and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a major rewrite and re-architecting of the codebase.

\n

The exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in siteConfig.js and we plan to keep it as lean as possible. For example, the cleanUrl siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the .html suffix.

\n

Our goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on Discord or Twitter for questions and help.

\n

When is the release of Docusaurus 2?

\n

As of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.

\n

One thing that I would like to share is that while Docusaurus is part of Facebook Open Source and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at NTU Singapore, so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, we want to make it as awesome as possible.

\n

For now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the public repository. When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned 😉!

\n

Final Thoughts

\n

Docusaurus has had a large impact on the open source community as seen from the many popular projects which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.

\n

Docusaurus' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.

\n

We also want to let people know that due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.

\n

If you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we're doing, you can support Docusaurus on Open Collective.

\n
\n

If you are sponsoring our work on Open Collective, we'll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.

\n
\n

Lastly, if you haven't done so already, click the star and watch button on GitHub, and follow us on Twitter.

", + "url": "https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2", + "title": "Towards Docusaurus 2", + "summary": "Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.", + "date_modified": "2018-09-11T00:00:00.000Z", + "author": { + "name": "Endilie Yacop Sucipto", + "url": "https://github.com/endiliey" + }, + "tags": [ + "new", + "adoption" + ] + }, + { + "id": "https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus", + "content_html": "
\n

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

\n

— Note sent to the Profilo team

\n
\n

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

\n

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

\n

In general, when creating a website with Docusaurus you do the following:

\n
    \n
  1. Generate a template website using Docusaurus scripts.
  2. \n
  3. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).
  4. \n
  5. Create the website content:\n
      \n
    1. Add your docs and any supporting assets.
    2. \n
    3. Customize the default landing page provided by Docusaurus to suit your needs.
    4. \n
    5. Configure the default site navigation file.
    6. \n
    \n
  6. \n
  7. Publish the website and set up how it will be published for future changes.
  8. \n
\n

Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.

\n

Overview of Steps Taken

\n

Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section.

\n

Design and colors:

\n
    \n
  1. Got all the desired logo formats from designer. I had to create the .favicon one.
  2. \n
  3. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!
  4. \n
\n

Initial website setup:

\n
    \n
  1. Forked the Profilo project on GitHub and created a local clone of the fork to set up the website.
  2. \n
  3. Created the initial Docusaurus website using the installation instructions.
  4. \n
  5. Deleted the docs-examples-from-docusaurus and website/blog-examples-from-docusaurus folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.
  6. \n
\n

Content creation:

\n
    \n
  1. \n

    Added metadata to the existing Markdown files found in the docs folder, for example:

    \n
    ---
    id: architecture
    title: Architecture
    sidebar_label: Architecture
    ---
    \n
  2. \n
  3. \n

    Added the logo assets to the website/static/img folder.

    \n
  4. \n
  5. \n

    Modified website/pages/en/index.js, the landing page, to highlight Profilo features.

    \n
  6. \n
  7. \n

    Modified website/core/Footer.js, the footer, to simplify it for Profilo.

    \n
  8. \n
  9. \n

    Edited website/siteConfig.js (website configuration file) to specify the previously chosen primary and secondary colors.

    \n
  10. \n
  11. \n

    Modified website/sidebars.json that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.

    \n
  12. \n
  13. \n

    Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.

    \n
  14. \n
  15. \n

    Tested the website locally throughout this phase. (I ran yarn start from the website folder to start the server.)

    \n
  16. \n
\n

Feedback and review changes:

\n
    \n
  1. Sent a pull request to the project.
  2. \n
  3. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).
  4. \n
  5. Updated the colors and updated the PR.
  6. \n
  7. The PR was then accepted and merged. Yay!
  8. \n
\n

Website publishing:

\n
    \n
  1. \n

    Pushed the first website version by running the Docusaurus publish script from the command line:

    \n
    USE_SSH=true \\
    GIT_USER=caabernathy \\
    CURRENT_BRANCH=master \\
    yarn run publish-gh-pages
    \n
  2. \n
  3. \n

    Configured CircleCI using the provided Docusaurus instructions. There were 2 PRs for this, the firstfor the initial config and the second to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).

    \n
  4. \n
\n

The final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.

\n

Design

\n

Here's what the initial website looked like when the first pull request was sent out:

\n

\"The

\n

Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.

\n

\"Picking

\n

I then took the RGB representation of the color and set it as the baseline color on Paletton. The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.

\n

\"Using

\n

The selected primary and secondary colors were a good jumping off point for designer feedback.

\n

There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features.

\n

Here's what the final website looked like:

\n

\"The

\n

This is an example page showing the core content, in this case the Getting Started page:

\n

\"A

\n

This also shows the sidebar structure that was set up through editing website/sidebars.json.

\n

Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!

\n

\n

Final Thoughts

\n

The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.

\n

The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done.

", + "url": "https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus", + "title": "How I Converted Profilo to Docusaurus in Under 2 Hours", + "summary": "“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”", + "date_modified": "2018-04-30T00:00:00.000Z", + "author": { + "name": "Christine Abernathy", + "url": "http://twitter.com/abernathyca" + }, + "tags": [ + "profilo", + "adoption" + ] + } + ] +} \ No newline at end of file diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html deleted file mode 100644 index a25145a997..0000000000 --- a/blog/first-blog-post/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -First Blog Post | My Site - - - - - -

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - \ No newline at end of file diff --git a/blog/index.html b/blog/index.html deleted file mode 100644 index ff4e73cc71..0000000000 --- a/blog/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -Blog | My Site - - - - - -

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

-
    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • -
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - \ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html deleted file mode 100644 index e0b0564025..0000000000 --- a/blog/long-blog-post/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -Long Blog Post | My Site - - - - - -

Long Blog Post

· 3 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

This is the summary of a very long blog post,

-

Use a <!-- truncate --> comment to limit blog post size in the list view.

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - \ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html deleted file mode 100644 index 7c857c795a..0000000000 --- a/blog/mdx-blog-post/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -MDX Blog Post | My Site - - - - - -
- - \ No newline at end of file diff --git a/blog/page/2.html b/blog/page/2.html new file mode 100644 index 0000000000..16bbb6c6f2 --- /dev/null +++ b/blog/page/2.html @@ -0,0 +1,69 @@ + + + + + +Docusaurus blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Announcing Docusaurus 2.0

· 13 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joshua Chen
Working hard on Docusaurus
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast
Paul O’Shannessy
Engineering Manager at Meta
Joel Marcey
Co-creator of Docusaurus 1

Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

+

social-card image

+ + \ No newline at end of file diff --git a/blog/page/2.html.html b/blog/page/2.html.html new file mode 100644 index 0000000000..dfecd03d20 --- /dev/null +++ b/blog/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/page/3.html b/blog/page/3.html new file mode 100644 index 0000000000..694e8c190e --- /dev/null +++ b/blog/page/3.html @@ -0,0 +1,72 @@ + + + + + +Docusaurus blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

DocSearch migration

· 3 min read
Clément Vannicatte
Software Engineer @ Algolia
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

+

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

Announcing Docusaurus 2 Beta

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joel Marcey
Developer Advocate at Meta
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast

After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

Releasing Docusaurus i18n

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

Docusaurus 2020 Recap

· 6 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

+

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

+

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

+

We are still in alpha, but expect some good news very soon!

+

Three Docusaurus plushies laid side-by-side on the table

+ + \ No newline at end of file diff --git a/blog/page/3.html.html b/blog/page/3.html.html new file mode 100644 index 0000000000..374a94ac57 --- /dev/null +++ b/blog/page/3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/page/4.html b/blog/page/4.html new file mode 100644 index 0000000000..9f56342397 --- /dev/null +++ b/blog/page/4.html @@ -0,0 +1,65 @@ + + + + + +Docusaurus blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2019 Recap

· 3 min read
Yangshun Tay
Front End Engineer at Meta

2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

Towards Docusaurus 2

· 10 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

How I Converted Profilo to Docusaurus in Under 2 Hours

· 6 min read
+

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+
+

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+ + \ No newline at end of file diff --git a/blog/page/4.html.html b/blog/page/4.html.html new file mode 100644 index 0000000000..32a8333415 --- /dev/null +++ b/blog/page/4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/page/5.html b/blog/page/5.html new file mode 100644 index 0000000000..c498279470 --- /dev/null +++ b/blog/page/5.html @@ -0,0 +1,66 @@ + + + + + +Docusaurus blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Introducing Docusaurus

· 9 min read
Joel Marcey
Developer Advocate at Meta

+

We are very happy to introduce Docusaurus to help you manage one or many open source websites.

+

We created Docusaurus for the following reasons:

+
    +
  1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.
  2. +
  3. To provide features that many of our open source websites need like blog support, search and versioning.
  4. +
  5. To make it easy to push updates, new features, and bug fixes to everyone all at once.
  6. +
  7. And, finally, to provide a consistent look and feel across all of our open source projects.
  8. +
+ + \ No newline at end of file diff --git a/blog/page/5.html.html b/blog/page/5.html.html new file mode 100644 index 0000000000..810d242f54 --- /dev/null +++ b/blog/page/5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/preparing-your-site-for-docusaurus-v3.html b/blog/preparing-your-site-for-docusaurus-v3.html new file mode 100644 index 0000000000..c3636cb4eb --- /dev/null +++ b/blog/preparing-your-site-for-docusaurus-v3.html @@ -0,0 +1,219 @@ + + + + + +Preparing your site for Docusaurus v3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Preparing your site for Docusaurus v3

· 14 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

+

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

+

Preparing your site for Docusaurus v3 - social card

+
warning

This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the v3.0.0-beta.0 release notes for an exhaustive list.

+
Don't be afraid

There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.

If your site is relatively small, with only a few customizations, you can probably upgrade to Docusaurus v3 immediately.

+

Preparatory work

+

Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest Docusaurus v2 version.

+

Depending on the complexity of your site, it may be a good idea to adopt the visual regression testing workflow that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.

+

We also recommend using the .mdx extension whenever you use JSX, import, or export (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, .md files will be parsed as standard CommonMark, which does not support these features. In Docusaurus v3, .md files keep being compiled as MDX files, but it will be possible to opt-in for CommonMark.

+

Preparing content for MDX v3

+

MDX is a major dependency of Docusaurus responsible for compiling your .md and .mdx files to React components.

+

MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of { and < characters.

+

Upgrading MDX comes with all the breaking changes documented on the MDX v2 and MDX v3 release blog posts. Most breaking changes come from MDX v2. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

+

Make sure to also read our updated MDX and React documentation page.

+
Ask for help

We have a dedicated MDX v3 - Upgrade Support discussion.

+

Using the MDX playground

+

The MDX playground is your new best friend. It permits to understand how your content is compiled to React components, and troubleshoot compilation or rendering issues in isolation.

+

Each MDX version comes with its own playground:

+ +
Configuring the MDX playground options for Docusaurus

To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the MDX playground:

    +
  • Use MDX
  • +
  • Use remark-gfm
  • +
  • Use remark-directive
  • +

Screenshot of the MDX playground&#39;s options panel, with only the &quot;Use MDX&quot;, &quot;Use remark-gfm&quot;, and &quot;Use remark-directive&quot; options checked

+

Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.

+
Making your content future-proof

The goal will be to refactor your problematic content so that it works fine with both versions of MDX. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.

+

Using the MDX checker CLI

+

We provide a docusaurus-mdx-checker CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.

+
npx docusaurus-mdx-checker
+

For each compilation issue, the CLI will log the file path and a line number to look at.

+

Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages

+
tip

Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3.

+
warning

This CLI is a best effort, and will only report compilation errors.

It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using visual regression tests.

+

Common MDX problems

+

We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:

+ +

These upgrades permitted us to aggregate the most common content problems, and document how to best handle them.

+

Bad usage of {

+

The { character is used for opening JavaScript expressions. MDX will now fail if what you put inside {expression} is not a valid expression.

+
example.md
The object shape looks like {username: string, age: number}
+
Error message
+

Could not parse expression with acorn: Unexpected content after expression

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: {username: string, age: number}
  • +
  • Use the HTML code: &#123;
  • +
  • Escape it: \{
  • +
+

Bad usage of <

+

The < character is used for opening JSX tags. MDX will now fail if it thinks your JSX is invalid.

+
example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template "Road to <YOUR_MINOR_VERSION>"
+
Error messages
+

Unexpected character 5 (U+0035) before name, expected a character that can start a name, such as a letter, $, or _

+
+

Expected a closing tag for <T> (1:6-1:9) before the end of paragraph end-tag-mismatch mdast-util-mdx-jsx

+
+

Expected a closing tag for <YOUR_MINOR_VERSION> (134:19-134:39) before the end of paragraph

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: Array<T>
  • +
  • Use the HTML code: &lt; or &#60;
  • +
  • Escape it: \< (unfortunately the \ will be displayed under MDX v1)
  • +
+ +

Docusaurus supports GitHub Flavored Markdown (GFM), but autolink using the <link> syntax is not supported anymore by MDX.

+
example.md
<sebastien@thisweekinreact.com>

<http://localhost:3000>
+
Error messages
+

Unexpected character @ (U+0040) in name, expected a name character such as letters, digits, $, or _; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use [text](url))

+
+

Unexpected character / (U+002F) before local name, expected a character that can start a name, such as a letter, $, or _ (note: to create a link in MDX, use [text](url))

+
+
How to prepare

Use regular Markdown links, or remove the < and >. MDX and GFM are able to autolink literals already.

example.md
sebastien@thisweekinreact.com
[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)

http://localhost:3000
[http://localhost:3000](http://localhost:3000)
+

Lower-case MDXComponent mapping

+

For users providing a custom MDXComponentmapping, components are now "sandboxed":

+
    +
  • a MDXComponent mapping for h1 only gets used for # hi but not for <h1>hi</h1>
  • +
  • a lower-cased custom element name will not be substituted by its respective MDXComponent component anymore
  • +
+
visual difference

Your MDXComponent component mapping might not be applied as before, and your custom components might no longer be used.

+
How to prepare

For native Markdown elements, you can keep using lower-case: p, h1, img, a...

For any other element, use upper-case names.

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) => <p {...props} className="my-paragraph"/>
- myElement: (props) => <div {...props} className="my-class" />,
+ MyElement: (props) => <div {...props} className="my-class" />,
};
+

Unintended extra paragraphs

+

In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected <p> tags.

+
visual difference

See how this content is rendered differently by MDX v1 and v3.

example.md
<div>Some **Markdown** content</div>
<div>
Some **Markdown** content
</div>
MDX v1 output
<div>Some **Markdown** content</div>
<div>Some **Markdown** content</div>
MDX v3 output
<div>Some <strong>Markdown</strong> content</div>
<div><p>Some <strong>Markdown</strong> content</p></div>
+
How to prepare

If you don't want an extra <p> tag, refactor content on a case by case basis to use a single-line JSX tag.

 <figure>
<img src="/img/myImage.png" alt="My alt" />
- <figcaption>
- My image caption
- </figcaption>
+ <figcaption>My image caption</figcaption>
</figure>

If your content contains "Markdown inlines" (**, *, _, [link](/path)), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.

+

Unintended usage of directives

+

Docusaurus v3 now uses Markdown Directives (implemented with remark-directive) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.

+
example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
+
Visual change

Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form.

example.md
The AWS re:Invent conf is great

Due to :Invent being parsed as a text directive, this will now be rendered as:

The AWS re
conf is great
+
How to prepare
    +
  • Use the HTML code: &#58;
  • +
  • Add a space after : (if it makes sense): : text
  • +
  • Escape it: \: (unfortunately the \ will be displayed under MDX v1)
  • +
+

Unsupported indented code blocks

+

MDX does not transform indented text as code blocks anymore.

+
example.md
    console.log("hello");
+
Visual change

The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore.

+
How to prepare

Use the regular code block syntax instead of indentation:

example.md
```js
console.log('hello');
```
+

MDX plugins

+

All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ES Modules only and do not support CommonJS anymore.

+

In practice this means that you can't do require("remark-plugin") anymore.

+
How to prepare

Docusaurus v3 now supports ES Modules configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* site config using remark plugins here */
};

If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the Docusaurus config supports the usage of an async function to let you do so.

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// site config...
};
};
+
For plugin authors

If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a dedicated support discussion to help plugin authors upgrade their code.

+

Other breaking changes

+

Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.

+

Node.js 18.0

+

Node.js 16 reached End-of-Life, and Docusaurus v3 now requires Node.js >= 18.0.

+
How to prepare

Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.

+

React 18.0

+

Docusaurus v3 now requires React >= 18.0.

+

React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.

+

Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.

+
How to prepare

Read the official React v18.0 and How to Upgrade to React 18, and look at your first-party React code to figure out which components might be affected this React 18 upgrade.

We recommend to particularly look for:

    +
  • Automatic batching for stateful components
  • +
  • New React hydration errors reported to the console
  • +
+

TypeScript 5.0

+

Docusaurus v3 now requires TypeScript >= 5.0.

+
How to prepare

Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.

+

TypeScript base config

+

The official Docusaurus TypeScript config has been re-internalized from the external package @tsconfig/docusaurus to our new monorepo package @docusaurus/tsconfig.

+

This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.

+
How to prepare

The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:

package.json
 {
"devDependencies": {
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "^3.0.0-beta.0",
}
}
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

Admonition warning

+

For historical reasons, we support an undocumented admonition :::warning that renders with a red color.

+
Warning

This is a Docusaurus v2 :::warning admonition.

+

However, the color and icon is historically wrong. Docusaurus v3 re-introduces :::warning admonition officially, documents it, and fix the color and icon.

+
warning

This is a Docusaurus v3 :::warning admonition.

+
How to prepare

If you previously used the undocumented :::warning admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use :::danger instead.

Docusaurus v3 also deprecated the :::caution admonition. Please refactor :::caution (yellow) to either :::warning (yellow) or :::danger (red).

+

Versioned sidebars

+

This breaking change will only affect Docusaurus v2 early adopters who versioned their docs before v2.0.0-beta.10 (December 2021).

+

When creating version v1.0.0, the sidebar file contained a prefix version-v1.0.0/ that Docusaurus v3 does not support anymore.

+
versioned_sidebars/version-v1.0.0-sidebars.json
{
"version-v1.0.0/docs": [
"version-v1.0.0/introduction",
"version-v1.0.0/prerequisites"
]
}
+
How to prepare

Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly.

You can remove the useless versioned prefix from your versioned sidebars.

versioned_sidebars/version-v1.0.0-sidebars.json
{
"docs": ["introduction", "prerequisites"]
}
+

Try Docusaurus v3 today

+

Docusaurus v3 is now in beta, and already used in production by React-Native, Jest, and our own website.

+

We think this new Docusaurus version is robust and ready to be deployed in production. It should be released officially soon, after receiving a positive feedback from early adopters of our community.

+

We would really appreciate it if you try upgrading and report issues on the 3.0.0-beta.0 release discussion thread.

+

For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:

+
package.json
 {
"dependencies": {
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
- "@mdx-js/react": "^1.6.22",
+ "@docusaurus/core": "3.0.0-beta.0",
+ "@docusaurus/preset-classic": "3.0.0-beta.0",
+ "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^1.3.5",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"
}
}
+

Ask for help

+

We will be there to help you upgrade through the following support channels:

+ +

Alternatively, you can look for a paid Docusaurus Service Provider to execute this upgrade for you. If your site is open source, you can also ask our community for free, benevolent help.

+

Conclusion

+

Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.

+

The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes.

+ + \ No newline at end of file diff --git a/blog/preparing-your-site-for-docusaurus-v3.html.html b/blog/preparing-your-site-for-docusaurus-v3.html.html new file mode 100644 index 0000000000..f11cf39497 --- /dev/null +++ b/blog/preparing-your-site-for-docusaurus-v3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/2.2.html b/blog/releases/2.2.html new file mode 100644 index 0000000000..b0dbc33606 --- /dev/null +++ b/blog/releases/2.2.html @@ -0,0 +1,104 @@ + + + + + +Docusaurus 2.2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2.2

· 3 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 2.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+ +

Highlights

+

Mermaid diagrams

+

In #7490, we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also added support recently. You can create Mermaid diagrams using Markdown code blocks:

+
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Health check
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
```
+ +
http://localhost:3000
+

Make sure to check the documentation, and the more advanced examples

+

Config headTags

+

In #8151, we added the ability to apply arbitrary HTML <head> tags to all pages of your site.

+
docusaurus.config.js
module.exports = {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'icon',
href: '/img/docusaurus.png',
},
},
],
};
+

Accessibility

+

We did several accessibility improvements:

+
    +
  • #8207: improves keyboard navigation for mobile drawer hamburger button
  • +
  • #8161: improves keyboard navigation for tabs
  • +
  • #8204: makes the skip to content button support progressive enhancement
  • +
  • #8174: improves screen reader announcement when toggling between light/dark mode
  • +
+

Developer Experience

+

We made validation stricter and improved error messages:

+
    +
  • #8234: in case of doc processing failure, prints the problematic markdown file path in the error message
  • +
  • #8192 and #8159: validates siteConfig.url more strictly and with better error message
  • +
  • #8066: makes config url and baseUrl fail-safe and less sensitive to the presence or absence of a leading or trailing slash
  • +
+

Translations

+

We completed the default theme translation support for multiple languages:

+
    +
  • 🇹🇷 #8105: completes Turkish translations
  • +
  • 🇷🇺 #8253: completes Russian translations
  • +
  • 🇫🇷 #8243: completes French translations
  • +
  • 🇯🇵 #8075: completes Japanese translations
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8210: the docusaurus swizzle CLI has a new --config option
  • +
  • #8109: mobile navigation performance optimizations, prefetch resources earlier
  • +
  • #8059: versions/locales navbar dropdowns preserve hash and querystring on navigation
  • +
  • #8227: the client redirect plugin preserves hash and querystring on redirect
  • +
+

Check the 2.2.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/releases/2.2.html.html b/blog/releases/2.2.html.html new file mode 100644 index 0000000000..5fb525beae --- /dev/null +++ b/blog/releases/2.2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/2.3.html b/blog/releases/2.3.html new file mode 100644 index 0000000000..0f93d23352 --- /dev/null +++ b/blog/releases/2.3.html @@ -0,0 +1,101 @@ + + + + + +Docusaurus 2.3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2.3

· 3 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 2.3.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+

Highlights

+

Google Tag Manager plugin

+

Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.

+

We now have a @docusaurus/plugin-google-tag-manager package that you can use alongside or as an alternative to the existing gtag.js plugin (refer to this doc to understand when to use which solution).

+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023, and ask users to migrate to Google Analytics 4.

Therefore, we are also deprecating our existing @docusaurus/plugin-google-analytics package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the gtag.js plugin, or the Google Tag Manager plugin. Refer to the dedicated Docusaurus issue for details and questions.

+

Tabs Query String Support

+

It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ?qs-param=tab-value search parameter.

+

This feature allows deep-linking to a specific documentation tab that will pre-selected on page load.

+

When used alongside the groupId prop, the query string tab value takes precedence over the localStorage value.

+

Make sure to check the documentation and the demo below to understand how it works:

+ +
<Tabs groupId="current-os" queryString>
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
+
http://localhost:3000

Android

+

Nested admonitions

+

It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:

+
::::tip[nested admonitions]

You can now nest one admonition within another!

:::danger

Use this sparingly when it makes sense.

:::

::::
+
nested admonitions

You can now nest one admonition within another!

danger

Use this sparingly when it makes sense.

+

Blog createFeedItems

+

A new blog plugin option feedOptions.createFeedItems gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.

+
docusaurus.config.js
[
'@docusaurus/preset-classic',
{
blog: {
feedOptions: {
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
];
+

Translations

+

We added or completed the default theme translation support for multiple languages:

+ +
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8463 and #8328: fix some annoying Docusaurus layout issues
  • +
  • #8539: Algolia plugin options.searchPagePath should be correctly applied to search modal footer
  • +
  • #8462: Algolia plugin now makes it easier to transform displayed search results with custom logic
  • +
  • #8397: the deploy CLI now understands git url insteadOf config
  • +
+

Check the 2.3.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/releases/2.3.html.html b/blog/releases/2.3.html.html new file mode 100644 index 0000000000..13e3538e11 --- /dev/null +++ b/blog/releases/2.3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/2.4.html b/blog/releases/2.4.html new file mode 100644 index 0000000000..e03ad728b9 --- /dev/null +++ b/blog/releases/2.4.html @@ -0,0 +1,109 @@ + + + + + +Docusaurus 2.4 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 2.4

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 2.4.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+ +

In #8236, we made it possible to provide a new description attribute for docs sidebar items of type link and category.

+
sidebars.js
[
{
type: 'link',
label: 'Link with description',
href: 'https://docusaurus.io',
description: 'Some link description',
},
{
type: 'category',
label: 'Category with description',
description: 'Some category description',
items: [],
},
];
+

These descriptions will be used in category generated index pages.

+

Show sidebar category generated index with custom descriptions

+

Theme Query String

+

In #8708, we added the possibility to force Docusaurus to initialize itself in light or dark mode through a new docusaurus-theme query-string parameter.

+

This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.

+
/docs/?docusaurus-theme=light
+
/docs/?docusaurus-theme=dark
+

Remark plugin npm2yarn upgrade

+

In #8690, we upgraded our Remark plugin @docusaurus/remark-plugin-npm2yarn with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.

+
Run these commands!

```bash npm2yarn
npm install
npm run build
npm run myCustomScript -- --some-arg
```
+
http://localhost:3000
npm install
npm run build
npm run myCustomScript -- --some-arg
+

gtag support for multiple tracking IDs

+

In #8620 we added support for the @docusaurus/plugin-google-gtag plugin to declare multiple tracking IDs.

+
docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: [
'G-<YOUR-NEW-GA4-ID>',
'UA-<YOUR-OLD-UA-ID>',
],
},
},
],
],
};
+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023.

Docusaurus users should migrate to Google Analytics 4. Google does not permit to migrate your existing Universal Analytics data to your new Google Analytics 4 property.

To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (UA-*) and new one (G-*). Refer to the dedicated issue for details.

+

Developer Experience

+

In #8736, we improved how we render error messages and added initial support to render the full causal chain of an error (see ES2022 Error Cause).

+
tip

To see it in action, click here:

+

In #8735 we also made navbar-related error messages clearer to help users understand what they did wrong.

+

Docusaurus navbar error message screenshot

+

Translations

+

We made it possible to translate some new elements:

+
    +
  • #8677 introduces a new process.env.DOCUSAURUS_CURRENT_LOCALE (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...
  • +
  • #8616 allows to translate the navbar and footer logo alt text
  • +
+

We added default theme translation support for multiple languages:

+
    +
  • 🇭🇺 #8668: Hungarian
  • +
  • 🇳🇴 #8631: Norwegian (Bokmål)
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8674: respect prefers-reduced-motion: reduce media query
  • +
  • #8712: use a navbar item of type docSidebar in template
  • +
  • #8801: allow tabs children to be falsy
  • +
  • #8757: make search page react to external query-string changes
  • +
  • #8803: fix code block buttons position in RTL
  • +
  • #8615: fix color mode toggle when using dark navbar
  • +
  • #8699: fix navbar dropdown tab focus bug
  • +
+

Check the 2.4.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/releases/2.4.html.html b/blog/releases/2.4.html.html new file mode 100644 index 0000000000..dd1c42bf1a --- /dev/null +++ b/blog/releases/2.4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/3.0.html b/blog/releases/3.0.html new file mode 100644 index 0000000000..52b436ed25 --- /dev/null +++ b/blog/releases/3.0.html @@ -0,0 +1,183 @@ + + + + + +Announcing Docusaurus 3.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Announcing Docusaurus 3.0

· 11 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we are happy to announce Docusaurus 3.0! 🥳

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

+

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

+

v3.0 social-card image

+ +

We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, upgrading to MDX v3 is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding compatibility options for MDX v1.

+

The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:

+ +
About Docusaurus v2

According to our release process, Docusaurus v2 has now entered maintenance mode. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.

+ +

Breaking changes

+

This section only gives you a quick glance. All the breaking changes are thoroughly documented in the v3 upgrade guide.

+

Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:

+
    +
  • Node.js v16 ➡️ v18
  • +
  • React v17 ➡️ v18
  • +
  • MDX v1 ➡️ v3
  • +
  • TypeScript v4 ➡️ v5
  • +
  • prism-react-renderer v1 ➡️ v2
  • +
  • react-live v2 ➡️ v4
  • +
  • Mermaid v9 ➡️ v10
  • +
  • import-fresh v3 ➡️ jiti v1
  • +
  • remark-emoji v2 ➡️ v4
  • +
+

A typical package.json dependency upgrade looks like:

+
package.json
 {
"dependencies": {
// upgrade to Docusaurus v3
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
// upgrade to MDX v3
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^3.0.0",
// upgrade to prism-react-renderer v2.0+
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
// upgrade to React v18.0+
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
// upgrade Docusaurus dev dependencies to v3
- "@docusaurus/module-type-aliases": "2.4.3",
- "@docusaurus/types": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
}
"engines": {
// require Node.js 18.0+
- "node": ">=16.14"
+ "node": ">=18.0"
}
}
+

Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:

+
    +
  • #9189: new default blog RSS feed limit of 20 entries
  • +
  • #9308: fix and re-introduce the :::warning admonition, deprecate :::caution
  • +
  • #9310: remove the legacy versioned sidebar id prefix, used for sites versioned before v2.0.0-beta.10 (December 2021)
  • +
  • #7966: refactor docs theme components, eventually requiring to you re-swizzle them
  • +
+

Highlights

+

Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the Docusaurus v3.0.0 release notes.

+

Markdown

+

Docusaurus v3 upgraded from MDX v1 to MDX v3:

+ +

This new MDX version is much better for content writers and plugin authors, and lays the ground for implementing new exciting Markdown features.

+
MDX v3 - the main challenge

The transition from MDX v1 to MDX v3 is the main challenge to the adoption of Docusaurus v3.

Some documents that compiled successfully under Docusaurus v2 might now fail to compile under Docusaurus v3, while others might render differently.

Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

Don't be intimidated. Most problems are easy to fix and often related to { and < characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command npx docusaurus-mdx-checker to help you get an estimate of the work to be done, and we recommend to prepare your site in advance.

If you created custom MDX plugins (Remark/Rehype), the AST is slightly different, and you might need to refactor them.

+

This notably enables us to add a CommonMark mode that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and experimental and limited (some Docusaurus features will not work). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret .md files as CommonMark in an upcoming major version, and recommend to use the .mdx extension for any file using JSX or ES modules.

+

We also introduced a new way to configure Markdown globally for your site, and plan to add more flexible options later.

+
docusaurus.config.js
export default {
markdown: {
format: 'mdx',
mermaid: true,
preprocessor: ({filePath, fileContent}) => {
return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');
},
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
+

Docusaurus now uses the remark-directive plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own custom directives such as :textDirective, ::leafDirective or :::containerDirective.

+

ESM and TypeScript configs

+

In #9317, we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.

+

Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
// your site config ...
presets: [
[
'classic',
{
// your preset config ...
} satisfies Preset.Options,
],
],
themeConfig: {
// your theme config ...
} satisfies Preset.ThemeConfig,
};

export default config;
+
sidebars.ts
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';

const sidebars: SidebarsConfig = {
docs: ['introduction'],
};

export default sidebars;
+

Unlisted content

+

Docusaurus already supported a draft: true front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.

+

In #8004, we introduced a new unlisted: true front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.

+

Unlisted content will:

+
    +
  • be excluded from sitemap.xml
  • +
  • be excluded from SEO results thanks to <meta name="robots" content="noindex, nofollow" />
  • +
  • be excluded from blog RSS feeds
  • +
  • be excluded from Algolia DocSearch results
  • +
  • be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...
  • +
+

Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an unlisted blog post:

+
/tests/blog/unlisted-post
+

React 18

+

In #8961, we upgraded to React 18. This is important, notably for the gradual adoption of Concurrent React features, as well as upcoming exciting features such as build-time React Server Components.

+

This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on How to Upgrade to React 18, notably the new automatic batching behavior.

+
Experimental support for React 18 features

React 18 comes with new features:

    +
  • <Suspense>
  • +
  • React.lazy()
  • +
  • startTransition()
  • +

Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior.

+

Automatic JSX runtime

+

Docusaurus now uses the "automatic" JSX runtime.

+

It is not needed anymore to import React in JSX files that do not use any React API.

+
src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}
+

Debug builds

+

It is now possible to build your static site in dev mode.

+
docusaurus build --dev
+
Debug React-related problems

Docusaurus will log more errors to the console, notably React 18 hydration errors through the new onRecoverableError callback.

This new build mode is particularly helpful for troubleshooting React problems. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the React Error Decoder page.

+

TypeScript

+

Docusaurus v3 now requires a minimum version of TypeScript 5.0.

+

We re-internalized the base recommended TypeScript config to a new official package:

+
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new TypeScript config files:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type {Options, ThemeConfig} from '@docusaurus/preset-classic';
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+

Code blocks

+

In #9316, we improved on syntax highlighting thanks to the prism-react-renderer v2 upgrade. For example, a bash param --save is now colored:

+
npm install --save some-package
+

The interactive code editor also upgrades to react-live v4, coming with a new sucrase compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.

+
Live Editor
function Hello() {
+  const name: string = 'World';
+  return <div>Hello {name}</div>;
+}
+
Result
Loading...
+

In #8982 and #8870, we also added magic comments support for TeX-like, Haskell-like, and WebAssembly comment syntax.

+
haskell.hs
stringLength :: String -> Int
stringLength [] = 0
stringLength (x:xs) = 1 + stringLength xs
+
matlab.m
function result = times2(n)
result = n * 2;
end
x = 10;
y = times2(x);
+

Mermaid diagrams

+

In #9305, we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.

+
Mindmap
+
Quadrant chart
+

Query-string data attributes

+

In #9028, we made it possible to set custom HTML data attributes though docusaurus-data-x query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.

+
/src/css/custom.css
html[data-navbar='false'] .navbar {
display: none;
}

html[data-red-border] div#__docusaurus {
border: red solid thick;
}
+
/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border
+

Other features

+

Other new features worth mentioning:

+ +

Read Docusaurus v3.0.0 release notes for an exhaustive list of changes.

+

Conclusion

+

This release comes with a few features, but more importantly upgrades many pieces of the Docusaurus infrastructure.

+

The MDX upgrade consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.

+

Now that we've caught up with our infrastructure, we'll be back delivering useful documentation features very soon, in upcoming minor versions.

+

We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a competitive solution that stands out for its great flexibility.

+ + \ No newline at end of file diff --git a/blog/releases/3.0.html.html b/blog/releases/3.0.html.html new file mode 100644 index 0000000000..79949ec4c0 --- /dev/null +++ b/blog/releases/3.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/3.1.html b/blog/releases/3.1.html new file mode 100644 index 0000000000..d59cbff77c --- /dev/null +++ b/blog/releases/3.1.html @@ -0,0 +1,81 @@ + + + + + +Docusaurus 3.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 3.1

· 2 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 3.1.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Broken anchors checker

+

In #9528, we improved the built-in broken links checker to also detect broken anchors.

+

Docusaurus blog post social card

+
Make it fail fast

The new onBrokenAnchors option has value warn by default, for retro-compatibility reasons.

We recommend to turn it to throw and fail your CI builds instead of deploying broken anchors to productions.

+
note

For users and plugin authors implementing custom <Heading> and <Link> components, we provide a new useBrokenLinks React hook API.

Most Docusaurus users don't need to care about it, built-in components (docusaurus/Link and @theme/Heading) already use it internally.

+

parseFrontMatter hook

+

In #9624, we added a new siteConfig.markdown.parseFrontMatter function hook.

+

This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.

+
docusaurus.config.js
export default {
markdown: {
parseFrontMatter: async (params) => {
// Reuse the default parser
const result = await params.defaultParseFrontMatter(params);

// Process front matter description placeholders
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');

// Create your own front matter shortcut
if (result.frontMatter.i_do_not_want_docs_pagination) {
result.frontMatter.pagination_prev = null;
result.frontMatter.pagination_next = null;
}

// Rename an unsupported front matter coming from another system
if (result.frontMatter.cms_seo_summary) {
result.frontMatter.description = result.frontMatter.cms_seo_summary;
delete result.frontMatter.cms_seo_summary;
}

return result;
},
},
};
+

Read the front matter guide and the parseFrontMatter API ref for details.

+

Other changes

+

Other notable changes include:

+
    +
  • #9674: add siteConfig.markdown.remarkRehypeOptions to pass options to remark-rehype, letting you customize things such as MDX footnote label
  • +
  • #9671: add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML
  • +
  • #9610: enable CLI port configuration via PORT environment variable
  • +
  • #9477: complete Brazilian Portuguese (pt-BR) translations
  • +
+

Check the 3.1.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/releases/3.1.html.html b/blog/releases/3.1.html.html new file mode 100644 index 0000000000..44653d54ba --- /dev/null +++ b/blog/releases/3.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/releases/3.2.html b/blog/releases/3.2.html new file mode 100644 index 0000000000..9538618165 --- /dev/null +++ b/blog/releases/3.2.html @@ -0,0 +1,103 @@ + + + + + +Docusaurus 3.2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus 3.2

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

We are happy to announce Docusaurus 3.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Faster builds

+

We worked hard to reduce the time it takes to build a Docusaurus site in production mode.

+

Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.

+

Let's take an example. Our benchmark on the React Native website upgrading to v3.2 reports the following results:

+
    +
  • 🔥 Cold builds: 95s ➡️ 66s (~30% faster)
  • +
  • 🔥 Incremental builds: 55s ➡️ 22s (~60% faster)
  • +
+

The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements.

+

Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our performance issue for upcoming improvements.

+
What is the difference between a cold build and an incremental build?

A cold build is when the Docusaurus caches are empty, generally after running docusaurus clear.

An incremental build happens when you run another time the docusaurus build command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it's based on Webpack persistent caching. To enable incremental builds on your CI server, you can persist the node_modules/.cache folder across builds.

+

Faster Dev Server

+

We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.

+

The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster 🔥.

+

We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result.

+

MDX partials table-of-contents

+

With #9684, Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.

+

Docusaurus and MDX allows you to import one Markdown file into another. We usually call the imported Markdown file a "partial", and use the _ prefix so that this file does not lead to the creation of a new page.

+
myDoc.mdx
# My Doc

## Doc heading

Content is imported from another MDX file:

import ImportedDoc from './\_importedDoc.mdx';

<ImportedDoc />
+
_myPartial.mdx
## Partial heading

Some paragraph
+

Previously, the heading Partial heading did not appear in the table-of-contents, but now it will!

+

Blog improvements

+

We improved the blog plugin with several new options to make it even more powerful and flexible:

+
    +
  • #9912: you can now display the last update time and author of a blog post, a feature the docs plugin already had.
  • +
  • #9886: a new processBlogPosts option allow you to filter/transform/sort blog posts.
  • +
  • #9838: a new pageBasePath option allows you to customize the blog pagination URL segment (/blog/page/2)
  • +
+

Sitemap lastmod

+

With #9954, the sitemap plugin has a new lastmod option that can now emit a <lastmod> tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog last_update front matter.

+

We also made it possible to opt-out of emitting <priority> and <frequency> tags, which are generally ignored by crawlers (notably Google).

+

We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:

+
{
lastmod: 'date',
priority: null,
changefreq: null,
}
+

Other changes

+
    +
  • #9687: new Vercel Analytics plugin
  • +
  • #9681 and #9442: docusaurus swizzle and create-docusaurus CLIs now ask users if they prefer to use TypeScript
  • +
  • #9928: new Icelandic translation
  • +
  • #9928: new allContentLoaded plugin lifecycle (experimental)
  • +
+

Check the 3.2.0 changelog entry for an exhaustive list of changes.

+ + \ No newline at end of file diff --git a/blog/releases/3.2.html.html b/blog/releases/3.2.html.html new file mode 100644 index 0000000000..a8d2f6aa38 --- /dev/null +++ b/blog/releases/3.2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index 5762d426be..2850f76cd3 100644 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -1,81 +1,1582 @@ - My Site Blog - https://your-docusaurus-site.example.com/blog - My Site Blog - Thu, 26 Aug 2021 00:00:00 GMT + Docusaurus Blog + https://docusaurus.io/blog + Docusaurus Blog + Fri, 29 Mar 2024 00:00:00 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed en + Copyright © 2024 Facebook, Inc. - <![CDATA[Welcome]]> - https://your-docusaurus-site.example.com/blog/welcome - https://your-docusaurus-site.example.com/blog/welcome - Thu, 26 Aug 2021 00:00:00 GMT - - Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

+ <![CDATA[Docusaurus 3.2]]> + https://docusaurus.io/blog/releases/3.2 + https://docusaurus.io/blog/releases/3.2 + Fri, 29 Mar 2024 00:00:00 GMT + + We are happy to announce Docusaurus 3.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Faster builds

+

We worked hard to reduce the time it takes to build a Docusaurus site in production mode.

+

Between v3.1.0 and v3.2.0, several changes have been made, leading to significantly faster production builds for many sites.

+

Let's take an example. Our benchmark on the React Native website upgrading to v3.2 reports the following results:

    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • +
  • 🔥 Cold builds: 95s ➡️ 66s (~30% faster)
  • +
  • 🔥 Incremental builds: 55s ➡️ 22s (~60% faster)
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
- facebook - hello - docusaurus +

The results will vary depending on your site's topology and the options you turned on, but we expect the largest sites will see the most significant improvements.

+

Note that this is only the beginning, and Docusaurus performance can still be significantly improved, notably the bundling time and the memory consumption. Track our performance issue for upcoming improvements.

+
What is the difference between a cold build and an incremental build?

A cold build is when the Docusaurus caches are empty, generally after running docusaurus clear.

An incremental build happens when you run another time the docusaurus build command. Docusaurus automatically tries to "re-use" computations from former builds to make subsequent builds faster. In practice it's based on Webpack persistent caching. To enable incremental builds on your CI server, you can persist the node_modules/.cache folder across builds.

+

Faster Dev Server

+

We also worked on improving the performance of the dev server, so that you can get a faster feedback when editing Markdown/MDX files.

+

The way we initially implemented content reloading wasn't great. For example, editing a blog post file would also trigger a useless reload of the unrelated docs plugin. From now on, when editing a plugin's content, only that plugin will reload. It's hard to measure precisely the impact of this change, but I estimate edits should appear in your browser at least 50% faster 🔥.

+

We plan to keep improving the speed of our dev server, with even more granular hot reloads, ensuring we don't run useless computations that would always keep giving the same result.

+

MDX partials table-of-contents

+

With #9684, Docusaurus is now able to render headings coming from an imported partial into the table-of-contents.

+

Docusaurus and MDX allows you to import one Markdown file into another. We usually call the imported Markdown file a "partial", and use the _ prefix so that this file does not lead to the creation of a new page.

+
myDoc.mdx
# My Doc

## Doc heading

Content is imported from another MDX file:

import ImportedDoc from './\_importedDoc.mdx';

<ImportedDoc />
+
_myPartial.mdx
## Partial heading

Some paragraph
+

Previously, the heading Partial heading did not appear in the table-of-contents, but now it will!

+

Blog improvements

+

We improved the blog plugin with several new options to make it even more powerful and flexible:

+
    +
  • #9912: you can now display the last update time and author of a blog post, a feature the docs plugin already had.
  • +
  • #9886: a new processBlogPosts option allow you to filter/transform/sort blog posts.
  • +
  • #9838: a new pageBasePath option allows you to customize the blog pagination URL segment (/blog/page/2)
  • +
+

Sitemap lastmod

+

With #9954, the sitemap plugin has a new lastmod option that can now emit a <lastmod> tag on the XML. The value is read from the Git history by default, but can be overridden with docs and blog last_update front matter.

+

We also made it possible to opt-out of emitting <priority> and <frequency> tags, which are generally ignored by crawlers (notably Google).

+

We recommend using the following sitemap plugin config, that will become the default in Docusaurus V4:

+
{
lastmod: 'date',
priority: null,
changefreq: null,
}
+

Other changes

+
    +
  • #9687: new Vercel Analytics plugin
  • +
  • #9681 and #9442: docusaurus swizzle and create-docusaurus CLIs now ask users if they prefer to use TypeScript
  • +
  • #9928: new Icelandic translation
  • +
  • #9928: new allContentLoaded plugin lifecycle (experimental)
  • +
+

Check the 3.2.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release
- <![CDATA[MDX Blog Post]]> - https://your-docusaurus-site.example.com/blog/mdx-blog-post - https://your-docusaurus-site.example.com/blog/mdx-blog-post - Sun, 01 Aug 2021 00:00:00 GMT - - Blog posts support Docusaurus Markdown features, such as MDX.

-
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
- docusaurus + <![CDATA[Docusaurus 3.1]]> + https://docusaurus.io/blog/releases/3.1 + https://docusaurus.io/blog/releases/3.1 + Fri, 05 Jan 2024 00:00:00 GMT + + We are happy to announce Docusaurus 3.1.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+

Broken anchors checker

+

In #9528, we improved the built-in broken links checker to also detect broken anchors.

+

Docusaurus blog post social card

+
Make it fail fast

The new onBrokenAnchors option has value warn by default, for retro-compatibility reasons.

We recommend to turn it to throw and fail your CI builds instead of deploying broken anchors to productions.

+
note

For users and plugin authors implementing custom <Heading> and <Link> components, we provide a new useBrokenLinks React hook API.

Most Docusaurus users don't need to care about it, built-in components (docusaurus/Link and @theme/Heading) already use it internally.

+

parseFrontMatter hook

+

In #9624, we added a new siteConfig.markdown.parseFrontMatter function hook.

+

This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.

+
docusaurus.config.js
export default {
markdown: {
parseFrontMatter: async (params) => {
// Reuse the default parser
const result = await params.defaultParseFrontMatter(params);

// Process front matter description placeholders
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');

// Create your own front matter shortcut
if (result.frontMatter.i_do_not_want_docs_pagination) {
result.frontMatter.pagination_prev = null;
result.frontMatter.pagination_next = null;
}

// Rename an unsupported front matter coming from another system
if (result.frontMatter.cms_seo_summary) {
result.frontMatter.description = result.frontMatter.cms_seo_summary;
delete result.frontMatter.cms_seo_summary;
}

return result;
},
},
};
+

Read the front matter guide and the parseFrontMatter API ref for details.

+

Other changes

+

Other notable changes include:

+
    +
  • #9674: add siteConfig.markdown.remarkRehypeOptions to pass options to remark-rehype, letting you customize things such as MDX footnote label
  • +
  • #9671: add code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML
  • +
  • #9610: enable CLI port configuration via PORT environment variable
  • +
  • #9477: complete Brazilian Portuguese (pt-BR) translations
  • +
+

Check the 3.1.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release
- <![CDATA[Long Blog Post]]> - https://your-docusaurus-site.example.com/blog/long-blog-post - https://your-docusaurus-site.example.com/blog/long-blog-post - Wed, 29 May 2019 00:00:00 GMT - - This is the summary of a very long blog post,

-

Use a <!-- truncate --> comment to limit blog post size in the list view.

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
- hello - docusaurus + <![CDATA[Announcing Docusaurus 3.0]]> + https://docusaurus.io/blog/releases/3.0 + https://docusaurus.io/blog/releases/3.0 + Tue, 31 Oct 2023 00:00:00 GMT + + Today, we are happy to announce Docusaurus 3.0! 🥳

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

+

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

+

v3.0 social-card image

+ +

We initially planned to release more frequent major versions, but Docusaurus v3 has taken longer than expected. Among the breaking changes that we accrued, upgrading to MDX v3 is probably the main challenge to the adoption of this new version. We went the extra mile to make this upgrade as easy as possible, notably by adding compatibility options for MDX v1.

+

The simplest sites will only need to upgrade a few npm dependencies. For more complex sites, we came up with a few strategies that can help you upgrade more confidently:

+ +
About Docusaurus v2

According to our release process, Docusaurus v2 has now entered maintenance mode. It will only receive support for major security issues for 3 months, until 31 January 2024. It is recommended to upgrade within that time frame to v3.

+ +

Breaking changes

+

This section only gives you a quick glance. All the breaking changes are thoroughly documented in the v3 upgrade guide.

+

Docusaurus v3 upgraded a few dependencies to new major versions, each coming with its own breaking changes:

+
    +
  • Node.js v16 ➡️ v18
  • +
  • React v17 ➡️ v18
  • +
  • MDX v1 ➡️ v3
  • +
  • TypeScript v4 ➡️ v5
  • +
  • prism-react-renderer v1 ➡️ v2
  • +
  • react-live v2 ➡️ v4
  • +
  • Mermaid v9 ➡️ v10
  • +
  • import-fresh v3 ➡️ jiti v1
  • +
  • remark-emoji v2 ➡️ v4
  • +
+

A typical package.json dependency upgrade looks like:

+
package.json
 {
"dependencies": {
// upgrade to Docusaurus v3
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
// upgrade to MDX v3
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^3.0.0",
// upgrade to prism-react-renderer v2.0+
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
// upgrade to React v18.0+
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
// upgrade Docusaurus dev dependencies to v3
- "@docusaurus/module-type-aliases": "2.4.3",
- "@docusaurus/types": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
}
"engines": {
// require Node.js 18.0+
- "node": ">=16.14"
+ "node": ">=18.0"
}
}
+

Apart from MDX v3, most breaking changes coming with those upgraded dependencies have been handled internally for you: most of the time, you shouldn't have to do anything. Outside of dependencies, the only functional breaking changes coming explicitly from the Docusaurus codebase are:

+
    +
  • #9189: new default blog RSS feed limit of 20 entries
  • +
  • #9308: fix and re-introduce the :::warning admonition, deprecate :::caution
  • +
  • #9310: remove the legacy versioned sidebar id prefix, used for sites versioned before v2.0.0-beta.10 (December 2021)
  • +
  • #7966: refactor docs theme components, eventually requiring to you re-swizzle them
  • +
+

Highlights

+

Below is a non-exhaustive list of new useful features coming with this new version. All the features are listed in the Docusaurus v3.0.0 release notes.

+

Markdown

+

Docusaurus v3 upgraded from MDX v1 to MDX v3:

+ +

This new MDX version is much better for content writers and plugin authors, and lays the ground for implementing new exciting Markdown features.

+
MDX v3 - the main challenge

The transition from MDX v1 to MDX v3 is the main challenge to the adoption of Docusaurus v3.

Some documents that compiled successfully under Docusaurus v2 might now fail to compile under Docusaurus v3, while others might render differently.

Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

Don't be intimidated. Most problems are easy to fix and often related to { and < characters that you now need to escape. However, depending on the size of your site, you might need to edit many files and feel overwhelmed. For this reason, we provide a command npx docusaurus-mdx-checker to help you get an estimate of the work to be done, and we recommend to prepare your site in advance.

If you created custom MDX plugins (Remark/Rehype), the AST is slightly different, and you might need to refactor them.

+

This notably enables us to add a CommonMark mode that should make it easier for existing documentations to adopt Docusaurus. It is currently opt-in and experimental and limited (some Docusaurus features will not work). In Docusaurus v3, all files are still interpreted as MDX, but we plan to interpret .md files as CommonMark in an upcoming major version, and recommend to use the .mdx extension for any file using JSX or ES modules.

+

We also introduced a new way to configure Markdown globally for your site, and plan to add more flexible options later.

+
docusaurus.config.js
export default {
markdown: {
format: 'mdx',
mermaid: true,
preprocessor: ({filePath, fileContent}) => {
return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');
},
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
+

Docusaurus now uses the remark-directive plugin to support admonitions. This also offers you the ability to create your own Remark plugins to extend Markdown with your own custom directives such as :textDirective, ::leafDirective or :::containerDirective.

+

ESM and TypeScript configs

+

In #9317, we added support for ES Modules and TypeScript config files, including site config, docs sidebars, plugins and presets.

+

Here are 2 TypeScript examples, giving you a modern experience with IDE autocompletion:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
// your site config ...
presets: [
[
'classic',
{
// your preset config ...
} satisfies Preset.Options,
],
],
themeConfig: {
// your theme config ...
} satisfies Preset.ThemeConfig,
};

export default config;
+
sidebars.ts
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';

const sidebars: SidebarsConfig = {
docs: ['introduction'],
};

export default sidebars;
+

Unlisted content

+

Docusaurus already supported a draft: true front matter option in our 3 content plugins (docs, blog, pages), which allows you to remove some pages from your production builds.

+

In #8004, we introduced a new unlisted: true front matter option, which will keep your pages available in production builds, while "hiding" them and making them impossible to discover unless you have the url. This enables convenient workflows where you can easily ask for feedback on a piece of content before the final publication.

+

Unlisted content will:

+
    +
  • be excluded from sitemap.xml
  • +
  • be excluded from SEO results thanks to <meta name="robots" content="noindex, nofollow" />
  • +
  • be excluded from blog RSS feeds
  • +
  • be excluded from Algolia DocSearch results
  • +
  • be filtered from site navbar items, docs sidebars, blog sidebar, blog archives, tags pages...
  • +
+

Unlisted content will also display a banner so that you don't forget to turn it off once your content is ready for prime time. Here's an example of an unlisted blog post:

+
/tests/blog/unlisted-post
+

React 18

+

In #8961, we upgraded to React 18. This is important, notably for the gradual adoption of Concurrent React features, as well as upcoming exciting features such as build-time React Server Components.

+

This new version of React should be a drop-in replacement for most Docusaurus sites. It comes with breaking changes that we handled internally in the Docusaurus codebase. If your site is using a lot of custom React code, we recommend you to take a look at the official article on How to Upgrade to React 18, notably the new automatic batching behavior.

+
Experimental support for React 18 features

React 18 comes with new features:

    +
  • <Suspense>
  • +
  • React.lazy()
  • +
  • startTransition()
  • +

Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior.

+

Automatic JSX runtime

+

Docusaurus now uses the "automatic" JSX runtime.

+

It is not needed anymore to import React in JSX files that do not use any React API.

+
src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}
+

Debug builds

+

It is now possible to build your static site in dev mode.

+
docusaurus build --dev
+
Debug React-related problems

Docusaurus will log more errors to the console, notably React 18 hydration errors through the new onRecoverableError callback.

This new build mode is particularly helpful for troubleshooting React problems. Docusaurus will use the development build of React, thus producing detailed and readable error messages instead of minified ones linking to the React Error Decoder page.

+

TypeScript

+

Docusaurus v3 now requires a minimum version of TypeScript 5.0.

+

We re-internalized the base recommended TypeScript config to a new official package:

+
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

We also have cleaner, normalized exports for Docusaurus core type, plugin, and preset options, which you can use within the brand-new TypeScript config files:

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type {Options, ThemeConfig} from '@docusaurus/preset-classic';
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+

Code blocks

+

In #9316, we improved on syntax highlighting thanks to the prism-react-renderer v2 upgrade. For example, a bash param --save is now colored:

+
npm install --save some-package
+

The interactive code editor also upgrades to react-live v4, coming with a new sucrase compiler. It is faster, lighter, and supports modern features, notably TypeScript type annotations.

+
Live Editor
function Hello() {
+  const name: string = 'World';
+  return <div>Hello {name}</div>;
+}
+
Result
Loading...
+

In #8982 and #8870, we also added magic comments support for TeX-like, Haskell-like, and WebAssembly comment syntax.

+
haskell.hs
stringLength :: String -> Int
stringLength [] = 0
stringLength (x:xs) = 1 + stringLength xs
+
matlab.m
function result = times2(n)
result = n * 2;
end
x = 10;
y = times2(x);
+

Mermaid diagrams

+

In #9305, we upgraded to Mermaid v10.4 and added support for async diagram rendering. Docusaurus is now able to render new types of diagrams.

+
Mindmap
+
Quadrant chart
+

Query-string data attributes

+

In #9028, we made it possible to set custom HTML data attributes though docusaurus-data-x query-string parameters. This makes it easier to embed a Docusaurus iframe on another site, and lets you customize the appearance of the embedded version with CSS.

+
/src/css/custom.css
html[data-navbar='false'] .navbar {
display: none;
}

html[data-red-border] div#__docusaurus {
border: red solid thick;
}
+
/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border
+

Other features

+

Other new features worth mentioning:

+ +

Read Docusaurus v3.0.0 release notes for an exhaustive list of changes.

+

Conclusion

+

This release comes with a few features, but more importantly upgrades many pieces of the Docusaurus infrastructure.

+

The MDX upgrade consumed a lot of our time this year, and we worked hard to make this important upgrade less difficult for all of you.

+

Now that we've caught up with our infrastructure, we'll be back delivering useful documentation features very soon, in upcoming minor versions.

+

We would like to thank you for using Docusaurus over the years. The documentation framework space is becoming more competitive lately, and we will do our best to ensure that Docusaurus remains a competitive solution that stands out for its great flexibility.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release
- <![CDATA[First Blog Post]]> - https://your-docusaurus-site.example.com/blog/first-blog-post - https://your-docusaurus-site.example.com/blog/first-blog-post - Tue, 28 May 2019 00:00:00 GMT - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
- hola - docusaurus + <![CDATA[Preparing your site for Docusaurus v3]]> + https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3 + https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3 + Fri, 29 Sep 2023 00:00:00 GMT + + Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

+

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

+

Preparing your site for Docusaurus v3 - social card

+
warning

This article mentions most Docusaurus v3 breaking changes, but is not exhaustive. Read the v3.0.0-beta.0 release notes for an exhaustive list.

+
Don't be afraid

There's a lot of content in this blog post, but many Docusaurus v2 sites can upgrade with very few changes.

If your site is relatively small, with only a few customizations, you can probably upgrade to Docusaurus v3 immediately.

+

Preparatory work

+

Before preparing for the Docusaurus v3 upgrade, we recommend upgrading to the latest Docusaurus v2 version.

+

Depending on the complexity of your site, it may be a good idea to adopt the visual regression testing workflow that we recently presented. It could help you catch unexpected visual side effects occurring during the Docusaurus v3 upgrade.

+

We also recommend using the .mdx extension whenever you use JSX, import, or export (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.). In future versions of Docusaurus, .md files will be parsed as standard CommonMark, which does not support these features. In Docusaurus v3, .md files keep being compiled as MDX files, but it will be possible to opt-in for CommonMark.

+

Preparing content for MDX v3

+

MDX is a major dependency of Docusaurus responsible for compiling your .md and .mdx files to React components.

+

MDX v3 is much better, but also comes with changes that probably require you to refactor your content a bit. MDX v3 is stricter, and some components that compiled fine under v1 might now fail to compile under v3, most likely because of { and < characters.

+

Upgrading MDX comes with all the breaking changes documented on the MDX v2 and MDX v3 release blog posts. Most breaking changes come from MDX v2. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

+

Make sure to also read our updated MDX and React documentation page.

+
Ask for help

We have a dedicated MDX v3 - Upgrade Support discussion.

+

Using the MDX playground

+

The MDX playground is your new best friend. It permits to understand how your content is compiled to React components, and troubleshoot compilation or rendering issues in isolation.

+

Each MDX version comes with its own playground:

+ +
Configuring the MDX playground options for Docusaurus

To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the MDX playground:

    +
  • Use MDX
  • +
  • Use remark-gfm
  • +
  • Use remark-directive
  • +

Screenshot of the MDX playground&#39;s options panel, with only the &quot;Use MDX&quot;, &quot;Use remark-gfm&quot;, and &quot;Use remark-directive&quot; options checked

+

Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v3.

+
Making your content future-proof

The goal will be to refactor your problematic content so that it works fine with both versions of MDX. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.

+

Using the MDX checker CLI

+

We provide a docusaurus-mdx-checker CLI that permits to easily spot problematic content. Run this command today on your Docusaurus v2 site to obtain a list of files that will fail to compile under MDX v3.

+
npx docusaurus-mdx-checker
+

For each compilation issue, the CLI will log the file path and a line number to look at.

+

Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages

+
tip

Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3.

+
warning

This CLI is a best effort, and will only report compilation errors.

It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using visual regression tests.

+

Common MDX problems

+

We upgraded a few Docusaurus sites to Docusaurus v3 and MDX v3:

+ +

These upgrades permitted us to aggregate the most common content problems, and document how to best handle them.

+

Bad usage of {

+

The { character is used for opening JavaScript expressions. MDX will now fail if what you put inside {expression} is not a valid expression.

+
example.md
The object shape looks like {username: string, age: number}
+
Error message
+

Could not parse expression with acorn: Unexpected content after expression

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: {username: string, age: number}
  • +
  • Use the HTML code: &#123;
  • +
  • Escape it: \{
  • +
+

Bad usage of <

+

The < character is used for opening JSX tags. MDX will now fail if it thinks your JSX is invalid.

+
example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template "Road to <YOUR_MINOR_VERSION>"
+
Error messages
+

Unexpected character 5 (U+0035) before name, expected a character that can start a name, such as a letter, $, or _

+
+

Expected a closing tag for <T> (1:6-1:9) before the end of paragraph end-tag-mismatch mdast-util-mdx-jsx

+
+

Expected a closing tag for <YOUR_MINOR_VERSION> (134:19-134:39) before the end of paragraph

+
+
How to prepare

Available options to fix this error:

    +
  • Use inline code: Array<T>
  • +
  • Use the HTML code: &lt; or &#60;
  • +
  • Escape it: \< (unfortunately the \ will be displayed under MDX v1)
  • +
+ +

Docusaurus supports GitHub Flavored Markdown (GFM), but autolink using the <link> syntax is not supported anymore by MDX.

+
example.md
<sebastien@thisweekinreact.com>

<http://localhost:3000>
+
Error messages
+

Unexpected character @ (U+0040) in name, expected a name character such as letters, digits, $, or _; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use [text](url))

+
+

Unexpected character / (U+002F) before local name, expected a character that can start a name, such as a letter, $, or _ (note: to create a link in MDX, use [text](url))

+
+
How to prepare

Use regular Markdown links, or remove the < and >. MDX and GFM are able to autolink literals already.

example.md
sebastien@thisweekinreact.com
[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)

http://localhost:3000
[http://localhost:3000](http://localhost:3000)
+

Lower-case MDXComponent mapping

+

For users providing a custom MDXComponentmapping, components are now "sandboxed":

+
    +
  • a MDXComponent mapping for h1 only gets used for # hi but not for <h1>hi</h1>
  • +
  • a lower-cased custom element name will not be substituted by its respective MDXComponent component anymore
  • +
+
visual difference

Your MDXComponent component mapping might not be applied as before, and your custom components might no longer be used.

+
How to prepare

For native Markdown elements, you can keep using lower-case: p, h1, img, a...

For any other element, use upper-case names.

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) => <p {...props} className="my-paragraph"/>
- myElement: (props) => <div {...props} className="my-class" />,
+ MyElement: (props) => <div {...props} className="my-class" />,
};
+

Unintended extra paragraphs

+

In MDX, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected <p> tags.

+
visual difference

See how this content is rendered differently by MDX v1 and v3.

example.md
<div>Some **Markdown** content</div>
<div>
Some **Markdown** content
</div>
MDX v1 output
<div>Some **Markdown** content</div>
<div>Some **Markdown** content</div>
MDX v3 output
<div>Some <strong>Markdown</strong> content</div>
<div><p>Some <strong>Markdown</strong> content</p></div>
+
How to prepare

If you don't want an extra <p> tag, refactor content on a case by case basis to use a single-line JSX tag.

 <figure>
<img src="/img/myImage.png" alt="My alt" />
- <figcaption>
- My image caption
- </figcaption>
+ <figcaption>My image caption</figcaption>
</figure>

If your content contains "Markdown inlines" (**, *, _, [link](/path)), you might not be able to refactor it ahead of time, and will have to do it alongside the Docusaurus v3 upgrade.

+

Unintended usage of directives

+

Docusaurus v3 now uses Markdown Directives (implemented with remark-directive) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.

+
example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
+
Visual change

Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form.

example.md
The AWS re:Invent conf is great

Due to :Invent being parsed as a text directive, this will now be rendered as:

The AWS re
conf is great
+
How to prepare
    +
  • Use the HTML code: &#58;
  • +
  • Add a space after : (if it makes sense): : text
  • +
  • Escape it: \: (unfortunately the \ will be displayed under MDX v1)
  • +
+

Unsupported indented code blocks

+

MDX does not transform indented text as code blocks anymore.

+
example.md
    console.log("hello");
+
Visual change

The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore.

+
How to prepare

Use the regular code block syntax instead of indentation:

example.md
```js
console.log('hello');
```
+

MDX plugins

+

All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ES Modules only and do not support CommonJS anymore.

+

In practice this means that you can't do require("remark-plugin") anymore.

+
How to prepare

Docusaurus v3 now supports ES Modules configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* site config using remark plugins here */
};

If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the Docusaurus config supports the usage of an async function to let you do so.

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// site config...
};
};
+
For plugin authors

If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a dedicated support discussion to help plugin authors upgrade their code.

+

Other breaking changes

+

Apart from MDX, there are other breaking changes that you can already prepare your site for, notably major version upgrades of important dependencies.

+

Node.js 18.0

+

Node.js 16 reached End-of-Life, and Docusaurus v3 now requires Node.js >= 18.0.

+
How to prepare

Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.

+

React 18.0

+

Docusaurus v3 now requires React >= 18.0.

+

React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site.

+

Simple Docusaurus sites that only use our official theme code without swizzling do not have anything to do.

+
How to prepare

Read the official React v18.0 and How to Upgrade to React 18, and look at your first-party React code to figure out which components might be affected this React 18 upgrade.

We recommend to particularly look for:

    +
  • Automatic batching for stateful components
  • +
  • New React hydration errors reported to the console
  • +
+

TypeScript 5.0

+

Docusaurus v3 now requires TypeScript >= 5.0.

+
How to prepare

Upgrade your Docusaurus v2 site to TypeScript 5 before upgrading to Docusaurus v3.

+

TypeScript base config

+

The official Docusaurus TypeScript config has been re-internalized from the external package @tsconfig/docusaurus to our new monorepo package @docusaurus/tsconfig.

+

This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.

+
How to prepare

The new Docusaurus v3 TypeScript config is sensibly the same as the former Docusaurus v2 TypeScript config. If you upgraded to TypeScript 5, using the Docusaurus v3 config on a v2 site is already possible:

package.json
 {
"devDependencies": {
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "^3.0.0-beta.0",
}
}
tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

Admonition warning

+

For historical reasons, we support an undocumented admonition :::warning that renders with a red color.

+
Warning

This is a Docusaurus v2 :::warning admonition.

+

However, the color and icon is historically wrong. Docusaurus v3 re-introduces :::warning admonition officially, documents it, and fix the color and icon.

+
warning

This is a Docusaurus v3 :::warning admonition.

+
How to prepare

If you previously used the undocumented :::warning admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use :::danger instead.

Docusaurus v3 also deprecated the :::caution admonition. Please refactor :::caution (yellow) to either :::warning (yellow) or :::danger (red).

+

Versioned sidebars

+

This breaking change will only affect Docusaurus v2 early adopters who versioned their docs before v2.0.0-beta.10 (December 2021).

+

When creating version v1.0.0, the sidebar file contained a prefix version-v1.0.0/ that Docusaurus v3 does not support anymore.

+
versioned_sidebars/version-v1.0.0-sidebars.json
{
"version-v1.0.0/docs": [
"version-v1.0.0/introduction",
"version-v1.0.0/prerequisites"
]
}
+
How to prepare

Your Docusaurus v2 site is able to handle the 2 sidebar formats similarly.

You can remove the useless versioned prefix from your versioned sidebars.

versioned_sidebars/version-v1.0.0-sidebars.json
{
"docs": ["introduction", "prerequisites"]
}
+

Try Docusaurus v3 today

+

Docusaurus v3 is now in beta, and already used in production by React-Native, Jest, and our own website.

+

We think this new Docusaurus version is robust and ready to be deployed in production. It should be released officially soon, after receiving a positive feedback from early adopters of our community.

+

We would really appreciate it if you try upgrading and report issues on the 3.0.0-beta.0 release discussion thread.

+

For most sites, the upgrade should be easy. If you prepared your site ahead of time as documented here, upgrading the following dependencies should be enough:

+
package.json
 {
"dependencies": {
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
- "@mdx-js/react": "^1.6.22",
+ "@docusaurus/core": "3.0.0-beta.0",
+ "@docusaurus/preset-classic": "3.0.0-beta.0",
+ "@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^1.3.5",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0-beta.0"
}
}
+

Ask for help

+

We will be there to help you upgrade through the following support channels:

+ +

Alternatively, you can look for a paid Docusaurus Service Provider to execute this upgrade for you. If your site is open source, you can also ask our community for free, benevolent help.

+

Conclusion

+

Docusaurus v3 is ready to try, and will be released soon. This article already gives you a good idea of all the major changes required to upgrade.

+

The initial 3.0 release is focusing on dependency and infrastructure upgrades that will permit us to implement new exciting features. It also comes with a few useful features that we will detail in the final release notes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + maintenance +
+ + <![CDATA[Upgrading frontend dependencies with confidence]]> + https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing + https://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing + Fri, 22 Sep 2023 00:00:00 GMT + + Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

+

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

+

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

+

Upgrading frontend dependencies with confidence - social card

+

This workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as React Native, Jest, and the Docusaurus site itself.

+

Docusaurus v3 comes with infrastructure changes and major dependency upgrades such as MDX v3 and React 18, which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That's why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.

+

Workflow overview

+

The general idea is pretty simple:

+
    +
  • Build your site in CI with GitHub Actions
  • +
  • Take screenshots of all sitemap.xml pages with Playwright
  • +
  • Upload them to Argos
  • +
  • Do this for both Git branches main and pr-branch
  • +
  • Compare the screenshots side-by-side in Argos
  • +
+

Argos will then report visual differences found between main and pr-branch as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.

+

Argos GitHub commit status

+

Argos GitHub PR comment

+

Argos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.

+

Check the Docusaurus Argos page to explore our own website reports.

+

Here is a more concrete example of Argos reporting a visual regression found while upgrading the React-Native website:

+

Argos GitHub PR comment

+

Workflow implementation

+

This section will describe the implementation details of each step of the workflow.

+

You will need to sign up to Argos and connect Argos to your GitHub repository

+

Dependencies

+

This workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:

+
yarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio
+

GitHub Action

+

The GitHub action is responsible for executing the workflow for each Git branch.

+

A minimal workflow could look like:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
take-screenshots:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: current

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Playwright browsers
run: yarn playwright install --with-deps chromium

- name: Build the website
run: yarn docusaurus build

- name: Take screenshots with Playwright
run: yarn playwright test

- name: Upload screenshots to Argos
run: yarn argos upload ./screenshots
+

Playwright config

+

Playwright is responsible for taking screenshots of the website previously built locally by the GitHub action.

+

A minimal Playwright config could look like:

+
playwright.config.ts
import {devices} from '@playwright/test';
import type {PlaywrightTestConfig} from '@playwright/test';

const config: PlaywrightTestConfig = {
webServer: {
port: 3000,
command: 'yarn docusaurus serve',
},
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
};

export default config;
+

Playwright test

+

A Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.

+
screenshot.spec.ts
import * as fs from 'fs';
import {test} from '@playwright/test';
import {argosScreenshot} from '@argos-ci/playwright';
import {extractSitemapPathnames, pathnameToArgosName} from './utils';

// Constants
const siteUrl = 'http://localhost:3000';
const sitemapPath = './build/sitemap.xml';
const stylesheetPath = './screenshot.css';
const stylesheet = fs.readFileSync(stylesheetPath).toString();

// Wait for hydration, requires Docusaurus v2.4.3+
// Docusaurus adds a <html data-has-hydrated="true"> once hydrated
// See https://github.com/facebook/docusaurus/pull/9256
function waitForDocusaurusHydration() {
return document.documentElement.dataset.hasHydrated === 'true';
}

function screenshotPathname(pathname: string) {
test(`pathname ${pathname}`, async ({page}) => {
const url = siteUrl + pathname;
await page.goto(url);
await page.waitForFunction(waitForDocusaurusHydration);
await page.addStyleTag({content: stylesheet});
await argosScreenshot(page, pathnameToArgosName(pathname));
});
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath);
console.log('Pathnames to screenshot:', pathnames);
pathnames.forEach(screenshotPathname);
});
+
Why do we take screenshots with Argos instead of Playwright?

Argos has a Playwright integration that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.

+
What's inside utils.ts?

This module contains implementation details that we choose to hide for clarity.

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Extract a list of pathnames, given a fs path to a sitemap.xml file
// Docusaurus generates a build/sitemap.xml file for you!
export function extractSitemapPathnames(sitemapPath: string): string[] {
const sitemap = fs.readFileSync(sitemapPath).toString();
const $ = cheerio.load(sitemap, {xmlMode: true});
const urls: string[] = [];
$('loc').each(function handleLoc() {
urls.push($(this).text());
});
return urls.map((url) => new URL(url).pathname);
}

// Converts a pathname to a decent screenshot name
export function pathnameToArgosName(pathname: string): string {
return pathname.replace(/^\/|\/$/g, '') || 'index';
}
+

Stylesheet

+

Screenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as false positive visual regressions.

+

For this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read Argos - About flaky tests docs for details.

+
screenshot.css
/* Iframes can load lazily */
iframe,
/* Avatars can be flaky due to using external sources: GitHub/Unavatar */
.avatar__photo,
/* Gifs load lazily and are animated */
img[src$='.gif'],
/* Algolia keyboard shortcuts appear with a little delay */
.DocSearch-Button-Keys > kbd,
/* The live playground preview can often display dates/counters */
[class*='playgroundPreview'] {
visibility: hidden;
}

/* Different docs last-update dates can alter layout */
.theme-last-updated,
/* Mermaid diagrams are rendered client-side and produce layout shifts */
.docusaurus-mermaid-container {
display: none;
}
+
prevent layout shifts

We recommend hiding flaky UI elements affecting layout with display: none;.

For example, the docs "Last Updated on" might render on more than 1 line, eventually "pushing" the rest of your content further down, leading to Argos detecting many different pixels.

+

Example repository

+

The slorber/docusaurus-argos-example repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.

+

Docusaurus + Argos monorepo example screenshot

+

Relevant pull-requests:

+ +
More advanced example?

Browse the Docusaurus repository for a more advanced integration:

+

Make it cheap

+

The tools we choose are implementation details of this visual regression testing workflow.

+

For Docusaurus, we choose Argos: it works well for us, and offers free and open source plans. However, you are free to adopt alternative tools.

+

In case you don't mind storing large screenshots in Git, you can also try the free, self-hosted Playwright Visual Comparisons and browse visual differences with npx playwright show-report. However, we found using a dedicated external tool is more convenient.

+

External tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.

+

Limit the number of pathnames

+

The base setup involves taking a screenshot of every single pathname found in sitemap.xml. For large sites, that can lead to a lot of screenshots.

+

You can decide to filter the pathnames to only take screenshots of the most critical pages.

+

For the Docusaurus website, do not take screenshots for versioned docs pages:

+
screenshot.spec.ts
function isVersionedDocsPathname(pathname: string): boolean {
return pathname.match(/^\/docs\/((\d\.\d\.\d)|(next))\//);
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath)
.filter(isVersionedDocsPathname);

pathnames.forEach(screenshotPathname);
});
+

Limit the workflow concurrency

+

Implementing GitHub Actions concurrency groups will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.

+
.github/workflows/argos.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
+

Run your workflow conditionally

+

It's not worth running this workflow for every single commit and pull-request.

+

For example, if someone corrects a typo in your documentation, you probably don't want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that's a bit expected!

+

For the Docusaurus website, we only run the workflow for pull-request having the Argos label:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]
types:
- opened
- synchronize
- reopened
- labeled

jobs:
take-screenshots:
if: ${{ github.ref_name == 'main' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Argos')) }}
runs-on: ubuntu-latest
steps:
# Your job steps here ...
+

There are many options to explore, such as triggering the workflow manually or only when files matching a specific pattern are modified.

+

Conclusion

+

I believe visual regression testing is underused in the frontend ecosystem.

+

Taking full-page screenshots is a low-hanging fruit that is easy to set up and can help you catch a new class of bugs that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for any kind of refactoring that shouldn't change the user interface.

+

So why not give it a try?

+

Happy hacking!

+

See also

+

Useful documentation links:

+]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release +
+ + <![CDATA[Docusaurus 2.4]]> + https://docusaurus.io/blog/releases/2.4 + https://docusaurus.io/blog/releases/2.4 + Thu, 23 Mar 2023 00:00:00 GMT + + We are happy to announce Docusaurus 2.4.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus blog post social card

+ +

Highlights

+ +

In #8236, we made it possible to provide a new description attribute for docs sidebar items of type link and category.

+
sidebars.js
[
{
type: 'link',
label: 'Link with description',
href: 'https://docusaurus.io',
description: 'Some link description',
},
{
type: 'category',
label: 'Category with description',
description: 'Some category description',
items: [],
},
];
+

These descriptions will be used in category generated index pages.

+

Show sidebar category generated index with custom descriptions

+

Theme Query String

+

In #8708, we added the possibility to force Docusaurus to initialize itself in light or dark mode through a new docusaurus-theme query-string parameter.

+

This is useful to ensure a consistent theme when embedding an existing Docusaurus page into an iframe or WebView.

+
/docs/?docusaurus-theme=light
+
/docs/?docusaurus-theme=dark
+

Remark plugin npm2yarn upgrade

+

In #8690, we upgraded our Remark plugin @docusaurus/remark-plugin-npm2yarn with many conversion bug fixes, first-class support for pnpm, and the ability to register custom converters producing new tabs.

+
Run these commands!

```bash npm2yarn
npm install
npm run build
npm run myCustomScript -- --some-arg
```
+
http://localhost:3000
npm install
npm run build
npm run myCustomScript -- --some-arg
+

gtag support for multiple tracking IDs

+

In #8620 we added support for the @docusaurus/plugin-google-gtag plugin to declare multiple tracking IDs.

+
docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: [
'G-<YOUR-NEW-GA4-ID>',
'UA-<YOUR-OLD-UA-ID>',
],
},
},
],
],
};
+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023.

Docusaurus users should migrate to Google Analytics 4. Google does not permit to migrate your existing Universal Analytics data to your new Google Analytics 4 property.

To preserve the continuity of your analytics, we temporarily recommend that you report events to 2 tracking IDs at the same time: the old one (UA-*) and new one (G-*). Refer to the dedicated issue for details.

+

Developer Experience

+

In #8736, we improved how we render error messages and added initial support to render the full causal chain of an error (see ES2022 Error Cause).

+
tip

To see it in action, click here:

+

In #8735 we also made navbar-related error messages clearer to help users understand what they did wrong.

+

Docusaurus navbar error message screenshot

+

Translations

+

We made it possible to translate some new elements:

+
    +
  • #8677 introduces a new process.env.DOCUSAURUS_CURRENT_LOCALE (experimental) allowing you to localize your config file, including site title, tagline, announcement bar, baseUrl...
  • +
  • #8616 allows to translate the navbar and footer logo alt text
  • +
+

We added default theme translation support for multiple languages:

+
    +
  • 🇭🇺 #8668: Hungarian
  • +
  • 🇳🇴 #8631: Norwegian (Bokmål)
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8674: respect prefers-reduced-motion: reduce media query
  • +
  • #8712: use a navbar item of type docSidebar in template
  • +
  • #8801: allow tabs children to be falsy
  • +
  • #8757: make search page react to external query-string changes
  • +
  • #8803: fix code block buttons position in RTL
  • +
  • #8615: fix color mode toggle when using dark navbar
  • +
  • #8699: fix navbar dropdown tab focus bug
  • +
+

Check the 2.4.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release +
+ + <![CDATA[Docusaurus 2.3]]> + https://docusaurus.io/blog/releases/2.3 + https://docusaurus.io/blog/releases/2.3 + Fri, 27 Jan 2023 00:00:00 GMT + + We are happy to announce Docusaurus 2.3.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+

Highlights

+

Google Tag Manager plugin

+

Google Tag Manager is a tag management system that allows great flexibility. It enables analytics and marketing teams to easily load other third-party trackers and fire analytics tags.

+

We now have a @docusaurus/plugin-google-tag-manager package that you can use alongside or as an alternative to the existing gtag.js plugin (refer to this doc to understand when to use which solution).

+
Google is sunsetting Universal Analytics

Google will sunset its Universal Analytics on July 1, 2023, and ask users to migrate to Google Analytics 4.

Therefore, we are also deprecating our existing @docusaurus/plugin-google-analytics package. Docusaurus users should create a new Google Analytics 4 property, and migrate to the gtag.js plugin, or the Google Tag Manager plugin. Refer to the dedicated Docusaurus issue for details and questions.

+

Tabs Query String Support

+

It is now possible to link a selected tab to a query string parameter. When a tab is selected, it will be stored in your browser URL as a ?qs-param=tab-value search parameter.

+

This feature allows deep-linking to a specific documentation tab that will pre-selected on page load.

+

When used alongside the groupId prop, the query string tab value takes precedence over the localStorage value.

+

Make sure to check the documentation and the demo below to understand how it works:

+ +
<Tabs groupId="current-os" queryString>
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
+
http://localhost:3000

Android

+

Nested admonitions

+

It is now possible to nest one admonition within another by adding extra colons for the outer/enclosing admonition:

+
::::tip[nested admonitions]

You can now nest one admonition within another!

:::danger

Use this sparingly when it makes sense.

:::

::::
+
nested admonitions

You can now nest one admonition within another!

danger

Use this sparingly when it makes sense.

+

Blog createFeedItems

+

A new blog plugin option feedOptions.createFeedItems gives you more control over the RSS/Atom feed generation. It is now possible to transform/filter/limit feed items through a new callback.

+
docusaurus.config.js
[
'@docusaurus/preset-classic',
{
blog: {
feedOptions: {
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
];
+

Translations

+

We added or completed the default theme translation support for multiple languages:

+ +
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8463 and #8328: fix some annoying Docusaurus layout issues
  • +
  • #8539: Algolia plugin options.searchPagePath should be correctly applied to search modal footer
  • +
  • #8462: Algolia plugin now makes it easier to transform displayed search results with custom logic
  • +
  • #8397: the deploy CLI now understands git url insteadOf config
  • +
+

Check the 2.3.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release +
+ + <![CDATA[Docusaurus 2.2]]> + https://docusaurus.io/blog/releases/2.2 + https://docusaurus.io/blog/releases/2.2 + Sat, 29 Oct 2022 00:00:00 GMT + + We are happy to announce Docusaurus 2.2.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.2 social card

+ +

Highlights

+

Mermaid diagrams

+

In #7490, we added support for Mermaid diagrams. This fills the gap between GitHub Flavored Markdown which also added support recently. You can create Mermaid diagrams using Markdown code blocks:

+
```mermaid
sequenceDiagram
participant Alice
participant Bob
Alice->>John: Hello John, how are you?
loop Health check
John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts <br/>prevail!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
```
+ +
http://localhost:3000
+

Make sure to check the documentation, and the more advanced examples

+

Config headTags

+

In #8151, we added the ability to apply arbitrary HTML <head> tags to all pages of your site.

+
docusaurus.config.js
module.exports = {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'icon',
href: '/img/docusaurus.png',
},
},
],
};
+

Accessibility

+

We did several accessibility improvements:

+
    +
  • #8207: improves keyboard navigation for mobile drawer hamburger button
  • +
  • #8161: improves keyboard navigation for tabs
  • +
  • #8204: makes the skip to content button support progressive enhancement
  • +
  • #8174: improves screen reader announcement when toggling between light/dark mode
  • +
+

Developer Experience

+

We made validation stricter and improved error messages:

+
    +
  • #8234: in case of doc processing failure, prints the problematic markdown file path in the error message
  • +
  • #8192 and #8159: validates siteConfig.url more strictly and with better error message
  • +
  • #8066: makes config url and baseUrl fail-safe and less sensitive to the presence or absence of a leading or trailing slash
  • +
+

Translations

+

We completed the default theme translation support for multiple languages:

+
    +
  • 🇹🇷 #8105: completes Turkish translations
  • +
  • 🇷🇺 #8253: completes Russian translations
  • +
  • 🇫🇷 #8243: completes French translations
  • +
  • 🇯🇵 #8075: completes Japanese translations
  • +
+
tip

Completing theme translations is an ongoing effort and an easy way to contribute to Docusaurus. We add new theme features regularly, for which we often need new translations.

+

Other changes

+

Other notable changes include:

+
    +
  • #8210: the docusaurus swizzle CLI has a new --config option
  • +
  • #8109: mobile navigation performance optimizations, prefetch resources earlier
  • +
  • #8059: versions/locales navbar dropdowns preserve hash and querystring on navigation
  • +
  • #8227: the client redirect plugin preserves hash and querystring on redirect
  • +
+

Check the 2.2.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release +
+ + <![CDATA[Docusaurus 2.1]]> + https://docusaurus.io/blog/2022/09/01/docusaurus-2.1 + https://docusaurus.io/blog/2022/09/01/docusaurus-2.1 + Thu, 01 Sep 2022 00:00:00 GMT + + We are happy to announce Docusaurus 2.1, our very first minor version release.

+

The upgrade should be easy: as explained in our release process documentation, minor versions respect Semantic Versioning.

+

Docusaurus 2.1 social card

+

Highlights

+

DocCardList improvements

+

In #8008, we simplified the usage of the<DocCardList> component, that is notably used on sidebar category generated index pages.

+

The items prop is now optional, and will be automatically inferred from the content of the parent sidebar category:

+
import DocCardList from '@theme/DocCardList';
- import {useCurrentSidebarCategory} from '@docusaurus/theme-common';

- <DocCardList items={useCurrentSidebarCategory().items}/>
+ <DocCardList/>
+

Also, we made it possible to use it on any document, including regular docs not linked to any sidebar category.

+

simplified DocCardList component

+

noindex improvements

+

We improved the support of the noindex meta robots directive, a way to signal search engines you don't want a specific page to be indexed.

+

In #7963, we allow noindex to be configured on a per-docs-version basis.

+

Use the following plugin options to tell crawlers you don't want the 1.0.0 version to be indexed:

+
const options = {
versions: {
'1.0.0': {
noIndex: true,
},
},
};
+

In practice, Docusaurus will add the following meta to each page of that version:

+
<meta name="robots" content="noindex, nofollow" />
+

In #7964, we also fixed a bug where the sitemap plugin would still contain pages that have a noindex directive. Now the sitemap plugin will reliably filter out all the pages containing noindex directives.

+

Overriding default meta tags

+

In #7952, it becomes possible to override default html meta tags you couldn't before:

+
<>
{siteConfig.noIndex && <meta name="robots" content="nofollow, noindex" />}
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</>
+

It is now possible to use <Head> or themeConfig.metadata:

+
    +
  • to override the viewport meta
  • +
  • to override the robots meta: you could mark your site as noIndex, but except for specific pages that should be indexed
  • +
+

Ukrainian translations

+

In #7953, we added default classic theme translations for the Ukrainian language.

+

Other changes

+

Check the 2.1.0 changelog entry for an exhaustive list of changes.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release +
+ + <![CDATA[Announcing Docusaurus 2.0]]> + https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0 + https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.0 + Mon, 01 Aug 2022 00:00:00 GMT + + Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

+

social-card image

+ +
We are on ProductHunt and Hacker News!

Now is the best time to show your love for Docusaurus!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+
tip

In a hurry? Check what's new in Docusaurus 2.0!

+

What is Docusaurus exactly?

+

Docusaurus is a static site generator that helps you ship beautiful documentation websites in no time.

+

Focus on your content: just write Markdown files. Docusaurus will generate an optimized website for you that's easy to host anywhere.

+

Docusaurus is full-featured and very flexible: we ship with well-designed docs and blog layout, as well as out-of-the-box versioning, search, and internationalization functionalities, with a call to accessibility and search engine optimizations. Its flexible theming system permits to adapt the UI to match your branding so that it integrates nicely with your main website or documentation portal. Its usage of React enables a modern client-side navigation, and the ability to build an interactive documentation.

+

Introducing Slash

+

The Docusaurus philosophy is akin to the Pareto principle: you can get 80% of the results for 20% of the effort. This enables you to compete with top-notch documentation sites with minimal effort.

+

Unless you're spinning up a documentation team with engineering resources, you +probably want Docusaurus!

Rachel Nabors
Rachel NaborsFormer ReactJS & React-Native docs manager
+

Docusaurus aims to be the best documentation tool, but you can use it for other use-cases as well: a blog, a knowledge base, a developer portfolio, a second brain, or even to scaffold landing pages!

+

Using Docusaurus for my tech blog has been a fantastic choice. It looks +tremendous out-of-the-box and the awesome DX means I write way more

Johnny Reilly
Johnny ReillyGroup Principal Engineer at Investec
+
tip

Try Docusaurus now with our online playgrounds and 5 minutes tutorial ⏱️

+

The story behind Docusaurus

+

Docusaurus was created at Facebook Open Source in 2017 (now Meta Open Source). We had a lot of internal and open source projects to document. It's complicated enough to write good documentation, let alone to create the HTML, CSS, and JavaScript for a good-looking website. We wanted project leaders to be able to focus on the content, and Markdown is great for that.

+

At that time, our solution was to copy/paste a Jekyll template over and over again. This naturally became hard to maintain, so we created a tool to solve our own pain once for all.

+

Docusaurus v1 was born!

+

Birth of Slash

+

It quickly built momentum at Facebook and in the frontend ecosystem, adopted by many popular projects such as Prettier, Babel, React-Native, KaTeX, and of course Docusaurus v1 itself.

+ +
+
note

Notice that the sample sites above use different colors, but still look quite the same.

+

Toward Docusaurus 2.0

+

Docusaurus v1 has been very successful, but we started to question some architectural choices:

+
    +
  • React was only used as a server-side templating language, and not used on the client
  • +
  • Theming system was pretty limited, and apart from changing a few colors with CSS, it was difficult to do more advanced customizations
  • +
  • The docs versioning system was confusing, since it was based on a diff algorithm
  • +
  • The codebase was monolithic, neither well-tested nor easy to extend
  • +
+

Docusaurus v2 was rebuilt from the ground up with a new modular architecture:

+
    +
  • React is now also used on the client, enabling a modern Single Page Application navigation
  • +
  • Plugins empower the community to contribute useful features as third-party packages
  • +
  • Theming is more flexible than ever
  • +
  • Docs versioning is now based on snapshot copies, much easier to understand
  • +
  • We kept everything good from v1: docs, blog, pages, versioning, i18n...
  • +
  • We implemented several new features
  • +
+

More details in the Docusaurus 2 project announcement and v1 to v2 migration guide

+

Who uses Docusaurus 2.0?

+

Despite being in pre-release, it didn't take long for Docusaurus v2 to outgrow Docusaurus v1 in terms of NPM downloads:

+

NPM downloads: v2 outgrows v1

+

Our GitHub star trend is very positive, competing with major frameworks:

+

GitHub stars: Docusaurus is well-positioned

+

Today, Docusaurus v2 has already been a great success even before its launch:

+ + +
+
tip

Please add your site to our site showcase! It only takes a few seconds: just post a comment here.

+

We use Docusaurus everywhere now and love it

Max Lynch
Max LynchIonic co-founder and CEO
+

We've been using V2 since January and it has been great

Supabase
SupabaseOpen Source Firebase alternative
+

Docusaurus is next level easy for literally everything you would need for +documentation in your project.

Gabriel Csapo
Gabriel CsapoStaff Software Engineer at LinkedIn
+

Docusaurus is awesome. We use it

Matt Gregg
Matt GreggSenior Front End Developer at Shopify
+

What's New in 2.0?

+

It would be difficult to describe every single new feature coming with Docusaurus v2. Let's focus on the features we believe are the most impactful.

+

MDX

+

MDX allows you to interleave React components in Markdown. This enables you to build top-notch interactive documentation experiences very easily.

+

A demo is worth a thousand words:

+
docs/my-document.mdx
### Give it a try: press that button!

import ColorModeToggle from '@theme/ColorModeToggle';

<ColorModeToggle/>
+
http://localhost:3000

Give it a try: press that button!

+
info

MDX has its own plugin system. You to customize your Markdown authoring experience, and even create your own Markdown syntax.

+

Docusaurus + MDX is great: we were able to implement a beautiful two-pane +layout and give the author fine-grained control on the placement of code and +corresponding prose.

Hamel Husain
Hamel HusainHead Of Data Science at Outerbounds
+

File system conventions

+

Our goal is to make Docusaurus very intuitive to use. We added file system conventions, and adding a doc page is as easy as creating one Markdown file.

+
+
+

Using the auto-generated sidebars makes it so simple to just create a page and +not worry about any other configuration.

Paul Armstrong
Paul ArmstrongPrincipal Engineer at Microsoft
+

Plugins

+

Docusaurus now has a modular architecture with a plugin system — our core features like docs, blog, pages, and search are all powered by individual plugins.

+

More importantly, it enables our community to enhance Docusaurus with additional features.

+

Let's highlight some examples:

+ +

redocusaurus plugin example

+ +

shiki-twoslash plugin example

+

The plugin API was a breeze to use, and powerful enough that I could port the +code sample renderer from the TypeScript website site in a couple of hours.

Orta Therox
Orta TheroxFormer TypeScript core team at Microsoft
+ +

local search plugin example

+
tip

We have a curated list of outstanding plugins in our community resources page.

+

The plugin system in Docusaurus v2 has made expanding 1Password's developer +portal so easy and fun. Super excited to show you what we've got cooking up.

Jody Heavener
Jody HeavenerSenior Developer at 1Password
+

Theming

+

Theming is one of the most important features of Docusaurus: we believe a professional documentation site should respect your company's branding and create a consistent experience.

+

Docusaurus theming gives a lot of flexibility on multiple levels:

+
    +
  • Customize CSS variables to adjust colors, fonts, and more
  • +
  • Provide your own CSS stylesheets
  • +
  • Implement your own theme from scratch
  • +
  • Override any React component provided by our default theme: we call this swizzling
  • +
+

I love Docusaurus Swizzling feature. It’s opinionated and flexible at the same +time. This is super cool since a framework usually needs to sacrifice one for +the other.


+Hung Viet Nguyen
+Hung Viet NguyenCreator of JestPreview
+

This enables users willing to invest a bit more time on customizations to build sites that look different from others.

+ +

So far it’s working out really nicely. It’s been really easy to style up the +way that we wanted it to look. No blockers at all.

Nader Dabit
Nader DabitWeb3 developer, Developer DAO founder
+

Other features

+

Docusaurus 2 comes with a very long list of useful features:

+
    +
  • Theme: dark mode, better UI and UX, flexible themeConfig options...
  • +
  • Docs versioning: flexible plugin options to adapt to your workflow
  • +
  • Docs sidebar: collapsible category, category index pages...
  • +
  • Blog: multiple authors, authors map, archive page...
  • +
  • Markdown: tabs, math equations, live code blocks, linking, flexible front matter...
  • +
  • Search: use the new Algolia DocSearch 3 experience
  • +
  • Assets: make it easy to incorporate images and other kinds of files
  • +
  • Internationalization: config options, default theme translations...
  • +
  • Accessibility: aria labels, color contrasts, skip-to-content, keyboard navigation, progressive enhancement...
  • +
  • SEO: sensible defaults, easy to customize, canonical url, social card, no-index, sitemap, microdata, hreflang...
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • TypeScript support for config files, plugins, custom pages and theme authors
  • +
  • Playgrounds: assess Docusaurus easily from your browser with docusaurus.new
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • Tests: Docusaurus is well-tested, we dogfood features and ensure they keep working
  • +
+

Recently, I was shocked at how good Docusaurus is out of the box. Super solid, +a good bit of configuration without being overwhelming, and the ability to +really customize the styling if you're braver than I am.

Alex DeBrie
Alex DeBrieAWS Data Hero, author of The DynamoDB Book
+

Why 2.0 now?

+

Many enthusiastic followers of ours have been curious why it took us 4 years to release Docusaurus 2.0, considering the beta is already successful and widely used in production.

+

The reason is that we aim to respect Semantic Versioning, which means we will be incrementing the major version number whenever we release a breaking change.

+

It is important for multiple reasons:

+
    +
  • It guarantees simple minor version upgrades, as long as you only use the public API
  • +
  • It follows front-end ecosystem conventions
  • +
  • A new major version is an opportunity to thoroughly document breaking changes
  • +
  • A new major/minor version is an opportunity to communicate new features through a blog post
  • +
+

The problem is that our flexible theming system inherently creates a very implicit API surface on which it is hard to know what is a breaking change in the first place. Highly customized Docusaurus sites sometimes have a hard time upgrading Docusaurus because they achieve customizations using internal APIs. We dedicated time to extensive theme refactors and clearly defining our public API, so that future code changes can be made more safely. We will continue to expand this public theming API so that the most common site customizations do not need to use any internal API.

+
info

From now on, Docusaurus will release new major versions more frequently. In practice, you can expect a new major version every 2 to 4 months.

Major version numbers are not sacred, but we still group breaking changes together and avoid releasing major versions too often.

Check our release process documentation for details.

+

What's Next?

+

Slash Up and Running

+

The work on Docusaurus 3.0 has started, and this next version will be released only in a few months. We will backport retro-compatible changes in Docusaurus 2.x minor versions to make them available as soon as possible to the community on a stable channel.

+

A sample of the features on our roadmap for the upcoming major versions of Docusaurus:

+ +

Thank You

+

We'd like to express our gratitude to all our contributors, including:

+ +

We'd like to thank in particular all our Docusaurus 2.0 early adopters for assessing its alpha, beta and canary releases, providing a ton of invaluable feedback. We sincerely hope you had a great experience using it, and that you will continue to provide feedback on the upcoming pre-releases of Docusaurus 3.0.

+

At Meta Open Source, Docusaurus is one of our most successful projects. We can't wait to see all the outstanding documentation websites that you will create! Don't forget to submit them to our site showcase!

+

Now, let your imagination run wild 🤪!

+

— Slash

+
We are on ProductHunt and Hacker News!

🙏 Share your experience using Docusaurus with the community!

Docusaurus 2.0 - Build optimized websites quickly, focus on your content. | Product Hunt
+

Slash plushies

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + sidachen2003@gmail.com (Joshua Chen) + tay.yang.shun@gmail.com (Yangshun Tay) + lex@php.net (Alexey Pyltsyn) + jimarcey@gmail.com (Paul O’Shannessy) + jimarcey@gmail.com (Joel Marcey) + release +
+ + <![CDATA[Docusaurus 2021 Recap]]> + https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap + https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap + Mon, 24 Jan 2022 00:00:00 GMT + + Docusaurus has made great progress in 2021! We've seen a lot of traction and just crossed 30k stars on GitHub!

+

We've reached full feature parity with v1 after the release of internationalization, announced our first beta, and welcomed significantly more users this year.

+

The official v2 release is just around the corner! Follow the roadmap issue for any latest news.

+

+

Highlights

+

Let's begin by going over a few highlights this year. Remember the todo-list from half a year ago? Time to take it out again and see how far we've come!

+
    +
  • Internationalization: officially released four months after its initial landing in late 2020. Seen great success in many projects
  • +
  • Autogenerated sidebars: no need to maintain a big sidebars.js anymore
  • +
  • Webpack 5: significantly improved build performance
  • +
  • Trailing slash config: seamless integration with any content hosting provider
  • +
  • Redesigned mobile navigation: mobile users now enjoy all navigation features as on desktop
  • +
  • UI improvements: more accessible quotes, better admonitions, back-to-top button...
  • +
  • Blog multi-authors: credit all the amazing contributors that collaborated on one blog post!
  • +
  • More blog features: archive page, structured data for SEO, full post content in feeds – empowering you to ship a fully-featured blog in no time
  • +
  • Asset collocation: no need for a bloated static folder anymore: colocate your images with Markdown files
  • +
  • Sidebar category index pages: category labels can now be associated with pages, enabling better doc organization
  • +
+

Our codebase has been polished over time as well. We have improved test coverage, migrated all packages to TypeScript, and reduced our published bundle size by a maximum of 60%!

+ +

npm

+

Docusaurus v2 continues to grow steadily. V2 installation is now 8 times more than v1. In terms of weekly downloads, we have witnessed another three-fold increase (+209.4%), growing from 28,066 in early January to a peak of 86,846 in mid-December.

+

Docusaurus v1 vs. v2 npm trends of the year 2021. The installations of Docusaurus v2 is constantly rising, while v1 is almost constant. V1 stays at 10000, while v2 grows from 30000 to almost 90000. There&#39;s a sharp drop from 90000 to 40000 just before the Jan 2022 line.

+

(Ah, the classic Christmas dip...)

+

We released 18 versions, going from 2.0.0-alpha.71 to 2.0.0-beta.14. That's one release every 20 days!

+

GitHub

+
    +
  • Stars: 20,460 → 29,679 (+45.1% y/y). And, just before this blog post is published, we have reached 30k stars!
  • +
  • Total contributors: 512 → 773 (+51.0% y/y)
  • +
  • Dependents: 5,039 → 14,579 (+189.3% y/y) for v2, and 6,311 → 7,581 (+20.1% y/y) for v1
  • +
  • Commits: 1,187 commits in the past year, averaging 23 commits every week
  • +
  • Issues: 619 issues opened, 505 of them eventually resolved
  • +
  • A new core team member (yep, that's me 😝)
  • +
+

Our star trend is also very positive. Compared to similar projects, we are growing at a faster rate:

+

Stars trend by year of 9 static site generators. Next.js grows the fastest, with Docusaurus at the 4th place in terms of growth rate.

+

With an 8.4k increase in stars, we are ranked number 3 in this year's JavaScript rising stars of static site generators, preceded only by Next.js and Astro.

+

Docusaurus placing 3rd in the &quot;Static Sites&quot; ranking list

+ +

Our showcase has welcomed a few new "favorite" sites that showcase the true potential of Docusaurus 2's pluggable architecture.

+ +

Iota wiki light modeIota wiki dark mode

+ +

Dyte light modeDyte dark mode

+ +

Ionic light modeIonic dark mode

+ +

Courier

+

The creativity of Docusaurus users is beyond our imagination 🤩 We look forward to more and more adopters leveraging the content features of Docusaurus while exploring original theme designs! If your site uses Docusaurus, we would love to have it in our showcase.

+

Community

+

As an active moderator on Discord, I can clearly see the community thriving. Many frequently asked questions are now integrated into our documentation, and some feature requests have been implemented as well. The project and the community reciprocally benefit each other – case in point, I was formerly a community contributor before becoming a maintainer.

+

We are constantly mentioned on Twitter with inspirational feedback:

+
+

@docusaurus is amazing! cant believe it's THAT simple to use.

+
+
+

No extra plugins, tooling or compilation steps. It just works out of the box.

+
+
+

I love @docusaurus. I couldn't have built the APIs, tutorials, and blogs contained in my site efficiently and beautifully in my workflow without Docusaurus.

+
+

And we keep every one of them in our little box 😄 If you enjoy Docusaurus yourself, keep tagging us with your comments!

+

As we approach the official release, we are interested in knowing more about what people are doing out there: plugin authors, creators of customized sites, and all new users – please keep us posted about your achievements so we can steer our development to better serve your needs.

+

Going forward

+

In the past few months, we have been constantly speaking about the release-candidate phase of Docusaurus, and yes, it's almost there. We have created a dedicated milestone to keep track of all issues to solve before we can confidently progress to the next stage. In short, we want to build a more robust theming workflow, empowering creative site creators to customize our default theme without fearing breaking changes as they upgrade. This will include:

+
    +
  • Guidelines on component organization. We want the theme components to have the right granularity so when you want to customize a part of your site, there's always a component doing just what you need.
  • +
  • Improvements to the swizzle CLI. We want users to use it with delight and let it aid you through all possible swizzling scenarios.
  • +
  • Refactoring our theme APIs. We want all swizzlable components to be actually appropriate for swizzling, so non-UI components will be re-located.
  • +
  • Docs. We want our docs to be maximally accessible to everyone – from first-time coders to experienced web developers. We will organize it as a more progressive tutorial that can be beneficial for every skill level.
  • +
+

Read more about plans for Docusaurus 2.0 in this roadmap issue. 2.0 will be a greater release with the help from the community, so please share your opinions and suggestions under any of the milestone issues!

+

As the core team is working hard to ship the general availability release, we plan to release other useful features as minor versions after 2.0. We have even made further plans for architectural changes in 3.0!

+

With the official release of Docusaurus 2.0, we are confident to see much more new adoptions and migrations from v1.

+

We'd like to express our gratitude to all the contributors in 2021, including:

+
    +
  • The core team: Alexey Pyltsyn, Sébastien Lorber, Joshua Chen, and Yangshun Tay for moderating the community, publicizing Docusaurus, triaging issues, and implementing new features
  • +
  • Joel Marcey for creating Docusaurus and supporting its development all along
  • +
  • The Algolia team for helping Docusaurus users migrate to the new DocSearch and answering search-related questions
  • +
  • All the active community members for making valuable code contributions, improving our documentation, and answering questions on Discord
  • +
+

So long, 2021, and let's greet a great 2022!

]]>
+ sidachen2003@gmail.com (Joshua Chen) + recap +
+ + <![CDATA[DocSearch migration]]> + https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration + https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration + Sun, 21 Nov 2021 00:00:00 GMT + + DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

+

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

+

Upgrading your Docusaurus site

+

In the next few weeks, Docusaurus site owners will receive an email inviting them to join their personal Algolia application.

+

This email will include a new appId and apiKey to use in your Docusaurus configuration.

+

The only things you have to do:

+
    +
  • Join the Algolia application (eventually creating a new Algolia account)
  • +
  • Update your site configuration.
  • +
+
docusaurus.config.js
const config = {
themeConfig: {
algolia: {
appId: '<NEW_APP_ID>',
apiKey: '<NEW_SEARCH_API_KEY>',
},
},
};

module.exports = config;
+
info

appId is now required.

These keys are not secrets and can be added to your Git repository.

+

DocSearch has a new home!

+

What is DocSearch?

+

DocSearch is a program created by Algolia, which offers search to technical documentation of Open Source projects and technical blogs for free.

+

You can read more here, and apply if you'd like to give it a try!

+

What is this migration about?

+

Motivation

+

With the upcoming stable release of DocSearch UI, we wanted to go further and provide better tooling for our users to improve their search, but also leverage the full potential of Algolia.

+

What's new?

+

DocSearch now leverages the Algolia Crawler, which includes a web interface that will allow you to:

+
    +
  • Start, schedule and monitor your crawls
  • +
  • Edit your config file from a live editor
  • +
  • Test your results with DocSearch v3
  • +
+

The Algolia crawler front page showing the project&#39;s overview, such as last complete crawl and indices

+

The Algolia config editor opened to the docusaurus-2 config. The right pane shows the results for index and various facet filters.

+

But also, more Algolia features in your own Algolia app:

+
    +
  • Team management
  • +
  • Browse and see how your records are indexed in Algolia
  • +
  • Try other Algolia features with free trials
  • +
+

The Algolia index overview page, showing various filters and the details of every single index

+

The Algolia index analytics page, showing trends for total users, total searches, etc.

+

And of course, a lot more, for free.

+

FAQ

+

I'm using Docusaurus and DocSearch, can I migrate?

+

At the time we are writing this, we are still at an early stage of the migration. We are doing small batches every week but will increase the load shortly, so please be patient and keep an eye out in your mailbox, you'll be contacted as soon as your Algolia app is ready!

+

Where can I read more about this?

+

We wrote a small migration guide but you'll have more detailed information in the migration email.

+

I received the migration email but the invite expired

+

Please contact us via either email or DocSearch's Discord or on Docusaurus's Discord #algolia channel

+

I have feedback!

+

For any feedback regarding our documentation or the DocSearch UI component, you can open an issue on our GitHub repository, but also contact us via the methods above.

+

Can I still run my own DocSearch instance?

+

In favor of the new infrastructure and DocSearch v3, we will no longer maintain our beloved DocSearch scraper and DocSearch v2, but the repositories will still be available and open to pull requests.

+

The previous documentation (now called legacy) remains available as well as our run your own guide.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + search +
+ + <![CDATA[Announcing Docusaurus 2 Beta]]> + https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta + https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta + Wed, 12 May 2021 00:00:00 GMT + + After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

+

Docusaurus adoption

+

Don't fear the beta tag!

+

Docusaurus 2 is widely adopted and growing fast:

+

Docusaurus v1 vs. v2 npm trends from 2019 to mid 2021. The installations of Docusaurus v2 is sharply rising, while v1 is mostly stable. V1 fluctuates between 10000 and 20000, while v2 starts at 0 and ends at almost 60000. The intersection happens around June 2020.

+

To get a fuller understanding of the quality of current Docusaurus 2 sites, our new showcase page allows you to filter Docusaurus sites by features, so you may get inspired by real-world production sites with a similar use-case as yours!

+

Don't miss our favorite sites; they all stand out with something unique:

+

A screenshot of the showcase&#39;s favorites section, with 12 cards each displaying the information and preview of one site

+

Why was Docusaurus v2 in alpha for so long?

+

It's hard to believe that the first alpha release v2.0.0-alpha.0 was 2 years ago 😳 , unusually long for a software alpha.

+

As this was a substantial re-architecture of the code base, we wanted to ensure that we had confidence in the stability and features of Docusaurus 2 before moving on to a beta stage, since beta suggests a high level of quality. We are happy to say that Docusaurus 2 has reached feature parity with Docusaurus 1 with i18n, and it has been successfully adopted by many Docusaurus sites (see i18n showcase).

+

We're now quite confident that the core features of Docusaurus 2 are stable enough to be in beta.

+

What are the goals of the beta?

+

Now that Docusaurus 2 is stable and major feature complete, the goal of the beta is to inspire confidence in new users on the production-readiness of Docusaurus 2, migrate more remaining Docusaurus 1 users to version 2, and officially deprecate Docusaurus 1. We will, of course, continue to resolve any issues and bugs that may be discovered.

+

In addition, we will use the beta phase to improve our theming system.

+

We want to make it:

+
    +
  • +

    easier to implement a custom theme, including for ourselves. We want to provide multiple official themes (including Tailwind CSS) for a long time.

    +
  • +
  • +

    safer to extend an existing theme: it can be painful to upgrade a highly customized Docusaurus site, as customizations can conflict with internal changes. We need to make the theme public API surface more explicit, and make it clear what is safe to customize.

    +
  • +
+

We will build a better theming infrastructure and refactor the classic theme to use it.

+

If you customize your site, you may find these planned improvements quite valuable.

+

What's new?

+

In case you missed it, we recently shipped two major improvements:

+ +

What's next?

+

Shipping the official 2.0 release!

+

To get there, we will continue to fix bugs and implement the most wanted features, including:

+ +

Conclusion

+

This is an exciting time for Docusaurus.

+

We are inspired by the positive feedback about Docusaurus, and discover new sites online every single day.

+

We are so excited for this beta release. We strove for quality and stability while continuing to try to increase the adoption of Docusaurus. For those that have been on the fence from migrating an existing Docusaurus site to Docusaurus 2, it is a great time to upgrade. We want you running on the latest infrastructure when we deprecate Docusaurus 1 at the end of this beta period. Let us know how we can help.

+

Thank you to everyone for reading and to the entire community who supports Docusaurus. 🤗

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + jimarcey@gmail.com (Joel Marcey) + tay.yang.shun@gmail.com (Yangshun Tay) + lex@php.net (Alexey Pyltsyn) + release + beta +
+ + <![CDATA[Releasing Docusaurus i18n]]> + https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n + https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n + Tue, 09 Mar 2021 00:00:00 GMT + + Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

+

Translate your site

+

You can translate a Docusaurus site in 3 simple steps:

+
    +
  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. +
  3. Translate: put the translation files at the correct filesystem location
  4. +
  5. Deploy: build and deploy your site using a single or multi-domain strategy
  6. +
+

The i18n support is very flexible and based on the filesystem.

+

The i18n tutorial is the best way to get started, and we provide help to use Git or Crowdin.

+

Design decisions

+

The goals of the Docusaurus i18n system are:

+
    +
  • Simple: just put the translated files in the correct filesystem location
  • +
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • +
  • Flexible deployment options: single, multiple domains, or hybrid
  • +
  • Modular: allow plugin authors to provide i18n support
  • +
  • Low-overhead runtime: documentation is mostly static and does not require a heavy JS library or polyfills
  • +
  • Scalable build-times: allow building and deploying localized sites independently
  • +
  • Localize assets: an image of your site might contain text that should be translated
  • +
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • +
  • Easy to use with Crowdin: multiple Docusaurus 1 sites use Crowdin, and should be able to migrate to v2
  • +
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • +
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • +
  • Default translations: classic theme labels are translated for you in many languages
  • +
+

Showcase

+

We worked with a few volunteers to dogfood the i18n support before releasing it.

+

Jest: upgrading Docusaurus

+

We have made it possible to upgrade a translated Docusaurus 1 site to Docusaurus 2.

+

Jest, using Docusaurus 1 and Crowdin was one of those sites.

+

The Docusaurus 2 migration was successful and the new site is now deployed in production (announcement post).

+

Jest&#39;s website front page in Japanese

+

Redwood: adopting Docusaurus

+

Redwood is a React full-stack Jamstack framework.

+

They were looking for a solution to create an internationalized learning platform, and became early adopters of Docusaurus 2 i18n for learn.redwoodjs.com, using Crowdin to get it translated to French.

+

Redwood&#39;s doc page in French

+

Datagit: using LTR support

+

The i18n system should work with any language, including Right-to-Left languages.

+

Datagit.ir is using Farsi, and a simple configuration option is able to flip the Docusaurus theme to add the required Right-to-Left support.

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

Conclusion

+

We sincerely hope you will adopt and like the new i18n support.

+

This feature has not been an easy one, and we would like to thank everyone that got involved in this journey:

+
    +
  • Alexey for his help to make the i18n support exhaustive and even better than v1
  • +
  • Simen for volunteering and supporting the Jest migration
  • +
  • Claire for adopting Docusaurus 2 on the new Redwood platform and providing many feedbacks
  • +
  • Massoud for reviewing my work on LTR and adopting it on Datagit
  • +
  • Crowdin for their support and willingness to improve their translation SaaS
  • +
  • The Docusaurus community for their patience, and providing many useful feedbacks on GitHub
  • +
+

Thanks for reading.

+

🙏 And please, add your brand new i18n sites to our showcase page. We accept any all polished Docusaurus site here, and we are working on a redesign allowing you to filter sites by features.

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + release + i18n +
+ + <![CDATA[Docusaurus 2020 Recap]]> + https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap + https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap + Tue, 19 Jan 2021 00:00:00 GMT + + 2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

+

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

+

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

+

We are still in alpha, but expect some good news very soon!

+

Three Docusaurus plushies laid side-by-side on the table

+

Docusaurus 2 highlights

+

We have worked on many features this year, and would like to highlight the most significant ones:

+
    +
  • i18n: easily translate your Docusaurus site, released soon! (preview, doc)
  • +
  • Version dropdown: enable contextual version switch
  • +
  • Versioning options: solving the most common pain-points users had with versioning
  • +
  • Contextual search: search in the current version, use the brand-new DocSearch 3 experience
  • +
  • Markdown pages: use Markdown instead of React components to create standalone pages
  • +
  • Better theme: various UI, UX and accessibility improvements
  • +
  • PWA: add offline support to your site, and make it installable
  • +
  • Fail-fast: strict config validation, detect broken links, and prevent bad production deployments
  • +
  • Multi-instance: use the docs plugin twice on a single site (e.g. iOS/Android SDK docs)
  • +
  • Migration CLI: automate the upgrade from Docusaurus 1
  • +
  • CodeSandbox: assess Docusaurus easily from your browser with new.docusaurus.io
  • +
  • Canary releases: use the @canary npm tag to use the upcoming release before anyone else
  • +
  • TypeScript: progressive adoption for internal code, and improve usage for users
  • +
  • Publish Infima: it is now open-source
  • +
+

Docusaurus 2 growth

+

The plan to rebuild Docusaurus from scratch in 2019 paid off: after a slow start, Docusaurus 2 has been widely adopted and has already outgrown Docusaurus 1 usage.

+

Docusaurus v1 vs. v2 npm trends of the year 2020. The installations of Docusaurus v2 is visibly up-growing, while v1 is slightly downward. V1 starts at 15000 and ends at 10000, while v2 starts at 2000 and ends at 25000. The intersection happens around June 2020.

+

Notable projects, startups, large companies, and individuals adopted Docusaurus 2 (showcase):

+ +

We helped large scale Docusaurus 1 sites to upgrade, ensuring a proper migration path and feature parity.

+

React Native was successfully upgraded to Docusaurus 2 (archived v1 site):

+

React Native&#39;s new website built with Docusaurus v2

+

Localized Docusaurus 1 sites (like Jest) will be able to upgrade too:

+

Jest&#39;s new website built with Docusaurus v2 in Japanese

+

We also saw the first right-to-left Docusaurus 2 site published:

+

Datagit&#39;s website in Persian, a right-to-left language. The sidebar appears on the right of the window and the TOC appears on the left.

+

GitHub Activity

+
    +
  • Stars: 14632 → 20946 (+43.2% y/y)
  • +
  • Total Contributors: 303 → 512 (+68.9% y/y). Most of which are non-Facebook contributors
  • +
  • Weekly npm Downloads: 2356 → 25592 (+986% y/y)
  • +
  • On GitHub, Docusaurus 1 is used by 6311 projects (+62.9% y/y) while Docusaurus 2 is used by 5039 projects (+1940% y/y)
  • +
+

Collaboration with Major League Hacking

+

We have welcomed Major League Hacking (MLH) fellows for 2 seasons already.

+

We are very thankful for the various contributions they made, such as:

+
    +
  • Writing the foundations of the v1 to v2 migration CLI
  • +
  • Help migrate the React Native website from v1 to v2
  • +
  • Making the config validation more strict and exhaustive, returning helpful error messages
  • +
  • Adding CodeSandbox support
  • +
  • Improving the CI pipelines: build size and Lighthouse bots
  • +
+

We look forward to continuing this collaboration in 2021.

+

Media

+

Dmitry Vinnik (Developer Advocate @ Facebook) explains Docusaurus in 60 seconds or 15min videos.

+

Rachel Nabors (Documentation Engineer @ Facebook) talked a bit about Docusaurus in React Native Radio 178 (podcast), and William Candillon the React Native website migration (video).

+

Many blog posts have been published:

+ +

Community

+

The Docusaurus community continues to grow, the Discord server is quite active, and Stack Overflow questions keep being posted.

+

The modular architecture of Docusaurus 2 allowed the community to build and publish third-party plugins. As we would like to federate better our community, if you are building a plugin, please let us know.

+

What's next?

+

As the core features of Docusaurus 2 have finally been built, we will be able to dedicate more time to solve the pain points and bugs reported by the community, and make Docusaurus stable and convenient enough to enter the beta and release-candidate phase.

+

With proper support for i18n and versioning, and large scale migrations such as React Native and Jest, we now have a clear migration path for all Docusaurus 1 sites.

+

We still have a few major features that we would like to work on:

+ +

Huge thanks to the community for their contributions in 2020, especially:

+
    +
  • Joel Marcey for creating Docusaurus and supporting the project all this time
  • +
  • the core team - Alexey Pyltsyn, Sébastien Lorber, Yangshun Tay
  • +
  • the Major League Hacking and Facebook interns for their significant impact
  • +
  • the Algolia team for DocSearch 3 and their support
  • +
  • Bartosz Kaszubowski for his investment in the React Native migration
  • +
  • the whole community for their contributions, and providing support to each other
  • +
+

Cheers to a great 2021! 🎉

]]>
+ sebastien@thisweekinreact.com (Sébastien Lorber) + recap +
+ + <![CDATA[Tribute to Endi]]> + https://docusaurus.io/blog/2020/01/07/tribute-to-endi + https://docusaurus.io/blog/2020/01/07/tribute-to-endi + Tue, 07 Jan 2020 00:00:00 GMT + + It is with great sadness to announce that our primary external Docusaurus contributor, Endilie Yacop Sucipto (Endi to those who knew him), passed away over the weekend after an illness associated with his bout with cancer.

+

It is impossible to overstate Endi's impact on this project:

+ +

Thinking about it now, it is absolutely amazing how much Endi accomplished on Docusaurus given what he was battling with his health.

+

We are working on ways to honor Endi's contributions - a commemorative sticker, possibly - and we are open to ideas. Leave a comment here or tweet if you have a suggestion.

+

The Docusaurus project will not be the same without Endi, and those of us who worked with him will miss him greatly. 😔

+

A photo from behind Endi&#39;s back, with Endi sitting on a rock cliff, facing the vast sea. His right hand forms a V pose.

]]>
+ jimarcey@gmail.com (Joel Marcey) + endi + tribute +
+ + <![CDATA[Docusaurus 2019 Recap]]> + https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap + https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap + Mon, 30 Dec 2019 00:00:00 GMT + + 2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

+

Docusaurus 2 (D2)

+

In 2018, we proposed to rebuild Docusaurus from the ground up. It involved a major rearchitecture effort - we created a content-centric CSS framework from scratch, a plugins system, and moved from static HTML pages to be a single page-app with prerendered routes. It was a wild adventure and a tough feat, especially with no dedicated FTE working on the project. With the help of @endilie, our ex-intern-turned-contributor-turned-maintainer, we made really good progress on D2 and are currently on version 2.0.0-alpha.40. All features in Docusaurus 1 except for translations have been ported over.

+

D2's killer features are Dark Mode and its superb performance. D2 has dark mode support out-of-the-box and it is near effortless to create a dark mode-friendly documentation site. Endilie put in great effort into optimizing the performance of the site and a bunch of performance optimization tricks have been done under the hood by default - optimized images, prerendering every route to static HTML and client-side routing thereafter, prefetching assets needed by future navigations whenever the user hovers over a navigation link, etc.

+

Last but not least, we implemented a plugins architecture and turned the repo into a Lerna monorepo. We believe this plugin architecture will be helpful towards building a community and also allowing users to build their own features for their unique use cases.

+

GitHub Activity

+
    +
  • Stars: 10050 → 14632 (+45.6% y/y)
  • +
  • Total Contributors: 182 → 303 (+66.4% y/y). Most of which are non-Facebook contributors
  • +
  • Daily npm Downloads: 728 → 2320 (+218.7% y/y). The peak was in November
  • +
  • D1 is currently used by 3872 projects on GitHub while D2 is used by 247 projects on GitHub
  • +
  • We now have 4 active core contributors! (+100% y/y)
  • +
+

Notable Users

+

A good portion of the projects within the Open Source community use Docusaurus. This half we also onboarded more notable projects onto Docusaurus 2:

+ +

And welcomed more projects to Docusaurus 1:

+ +

Media

+

Yangshun gave a classroom session during F8 about Using Docusaurus to Create Open Source Websites.

+

Community

+

A few third-party hosting/development services also has first-class integration with a Docusaurus setup:

+ +

Looking Ahead

+

D2 has gained some traction among the developer community. In 2020, we want to achieve full feature parity with D1 by the first half and help the remaining Facebook projects on D1 move to D2. It would also be great if we could use Docusaurus for internal documentation, but that is a non-trivial undertaking. If you have a need for it or have some ideas, come speak with us!

+

Huge thanks to the community for their contributions, especially the core team - Endilie Yacop Sucipto, Alexey Pyltsyn, Wei Gao. Lastly, thank you Joel Marcey for starting Docusaurus and supporting the project all this time.

+

Cheers to a great 2020! 🎉

]]>
+ tay.yang.shun@gmail.com (Yangshun Tay) + recap +
+ + <![CDATA[Happy 1st Birthday Slash!]]> + https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash + https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash + Fri, 14 Dec 2018 00:00:00 GMT + + Docusaurus makes 1 year! Happy Birthday Slash!

+

Docusaurus went live on December 14, 2017. At the time, we had 8 early adopters.

+

We now have nearly 60 known users of Docusaurus, and probably more that we don't know about. We have 9K GitHub stars and an active community, particularly Yangshun Tay and Endilie Yacop Sucipto, both of whom are the lead maintainers helping keep this project moving forward.

+

Thank you to everyone for your support and use of this project! I am super proud of how far this project has come in just a year.

+
+

Special thanks to Eric Nakagawa, creator of Slash, for creating this 1-year image of Slash enjoying cake. The Slash brand has been a boon for us!

+
]]>
+ jimarcey@gmail.com (Joel Marcey) + birth +
+ + <![CDATA[Towards Docusaurus 2]]> + https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2 + https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2 + Tue, 11 Sep 2018 00:00:00 GMT + + Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

+

Introduction

+

It all started with this RFC issue opened by Yangshun towards the end of June 2018.

+

[RFC] Docusaurus v2 · Issue #789 · facebook/docusaurus

These are some of the problems I'm seeing in Docusaurus now and also how we can +address them in v2. A number of the ideas here were inspired by VuePress and other +static site generators. In the current static site generators ecosystem, t...

+

Most of the suggested improvements are mentioned in the issue; I will provide details on some of issues in Docusaurus 1 and how we are going to address them in Docusaurus 2.

+

Infrastructure

+

Content

+

A Docusaurus 1 website is, in fact, built into a bunch of static HTML pages. Despite using React, we were not fully utilizing the features React offered, such as component state, which allows for dynamic and interactive pages. React was only used as a templating engine for static content and interactivity has to be added through script tags and dangerouslySetInnerHTML 😱.

+

In addition, there is not an easy way to change how Docusaurus loads content. For example, adding CSS preprocessors such as Sass and Less was not supported natively and involved many user hacks of adding custom scripts.

+

For Docusaurus 2, we will be using webpack as a module bundler and we are changing the way we serve content. Adding CSS preprocessors will be as easy as adding a webpack loader. Instead of a pure static HTML, during build time we will create a server-rendered version of the app and render the corresponding HTML. A Docusaurus site will be essentially an isomorphic/universal application. This approach is heavily inspired by Gatsby.

+

Versioning

+

If you have been using Docusaurus for a while, you might notice that Docusaurus creates versioned docs if and only if the docs content are different.

+

For example, if we have docs/hello.md:

+
---
id: hello
title: hello
---
Hello world !
+

And we cut version 1.0.0, Docusaurus will create versioned_docs/version-1.0.0/hello.md:

+
---
id: version-1.0.0-hello
title: hello
original_id: hello
---
Hello world !
+

However, if there are no changes to hello.md when cutting v2.0.0, Docusaurus will not create any versioned docs for that document. In other words, versioned_docs/version-2.0.0/hello.md will not exist.

+

This can be very confusing for users; if they want to edit the v2.0.0 docs, they have to edit versioned_docs/version-1.0.0/hello.md or manually add versioned_docs/version-2.0.0/hello.md. This could potentially lead to unwanted bugs. Here is a real scenario in Jest.

+

In addition, this adds complexity within the codebase as we require a mechanism for version fallbacks. And during build time, Docusaurus has to replace the linking to the correct version. This is also the cause of a bug where renaming docs breaks links in old versions.

+

For Docusaurus 2, every time we cut a new version, we will instead take a snapshot of all the docs. We will not require the content of a document to have changed. This is a space complexity trade-off for a better developer and user experience. We will use more space for better separation of concerns and guaranteed correctness.

+

Translation

+

Docusaurus allows for easy translation functionality by using Crowdin. Documentation files written in English are uploaded to Crowdin for translation by users within a community. We always assumed that English is the default language, but this might not be the case for all users. We have seen plenty of non-English open source projects using Docusaurus.

+

For Docusaurus 2, we will not assume English is the default language. When a user enables internationalization, they have to set a default language in siteConfig.js. We will then assume that all the files in docs are written in that language.

+

In addition, after working on the MVP of Docusaurus 2, I realized that it is possible not to use Crowdin for translations. Thus, we might need to add an additional workflow to enable that scenario. However, we will still strongly recommend people use Crowdin for easier integration.

+

Customizability

+

Layout

+

The current state of Docusaurus is that it is in charge of the entire layout and styling, unintentionally making it very hard for users to customize their site's appearance to their wishes.

+

For Docusaurus 2, layout and styling should be controlled by the user. Docusaurus will handle the content generation, routing, translation, and versioning. Inspired by create-react-app and VuePress, Docusaurus will still provide a default theme, which the user can eject from, for further layout and styling customization. This means that it is very possible for the user to even change the HTML meta by using React Helmet. Community-based themes are also very possible. This approach of allowing users to be in charge of layout and styling is taken by most static site generators.

+

Markdown

+

Our Markdown parsing is currently powered by Remarkable. What if the user wants to use Markdown-it or even MDX? And then there is an issue of which syntax highlighter to use, (e.g: Prism vs Highlight.js). We should leave these choices open to the user.

+

For Docusaurus 2, users can eject and choose their own Markdown parser. It does not matter if they want to use another Markdown parser such as Remark, or even their own in-house Markdown parser. As a rule of thumb, the user has to provide a React component, in which we will provide a children props containing the RAW string of Markdown. By default, we will use Remarkable for the Markdown parser and Highlight.js for the syntax highlighting. The default parser could still change in the future as we're still experimenting with different Markdown parsers.

+ +

Our core search functionality is based on Algolia. There are requests by users to be able to use different search offerings, such as lunrjs for offline search.

+

I personally like Algolia and we have a great experience working with them. They are very responsive; we can easily submit a pull request to Algolia since their DocSearch is open source. For example, I recently submitted this PR that enables DocSearch to scrape alternate languages in sitemap.

+

For Docusaurus 2, we will allow users to customize the search box. Users simply need to eject from the default theme and modify the Search UI (a React component). However, we will still use Algolia in the default theme.

+

Stability

+

Software is never going to be perfect, but we want Docusaurus to not break as we add new features. When Docusaurus was first released, it did not have any strong automated test suites. As a result, there were a lot of regressions not caught early. Although we have recently added a lot of tests, the test coverage is still relatively low.

+

For Docusaurus 2, we are adding tests as we develop since we are going for a fresh rewrite. Hence, I believe that it should be more stable than ever and it should be harder to break things compared to Docusaurus 1.

+

Frequently Asked Questions

+

Will there be any breaking changes?

+

If you've read the post up until to this point, you should be able to notice that there will be breaking changes. While we will try to minimize the number of breaking changes and make it backward compatible as much as possible, we believe that some breaking changes are required. This is mostly due to Docusaurus 2 being a major rewrite and re-architecting of the codebase.

+

The exact list of breaking changes is not totally known yet as development is not 100% finalized. However, one thing that I will highlight is that we will deprecate a lot of options in siteConfig.js and we plan to keep it as lean as possible. For example, the cleanUrl siteConfig will be deprecated as all the URL for Docusaurus 2 sites will be without the .html suffix.

+

Our goal is that most sites should be able to upgrade to Docusaurus 2 without a lot of pain. We will also include a migration guide when we release Docusaurus 2. When the times come, feel free to ping us on Discord or Twitter for questions and help.

+

When is the release of Docusaurus 2?

+

As of now, we do not have an exact date planned for the release. I personally estimate that we might be able to release an alpha version in the next one to two months, but this is, of course, just an estimate.

+

One thing that I would like to share is that while Docusaurus is part of Facebook Open Source and most of the team are Facebook employees, the maintenance and development work is mostly done outside of normal working hours. I am currently a final year undergraduate student at NTU Singapore, so I had to juggle between doing my coursework, my final year project and maintaining/developing Docusaurus. However, that does not mean that we do not want to make Docusaurus better. In fact, we want to make it as awesome as possible.

+

For now, the actual Docusaurus 2 work is still hosted in a private repository. In the near future, we will move them into the public repository. When that time arrives, I encourage everyone to look into it and hopefully contribute in some way. Before then, please stay tuned 😉!

+

Final Thoughts

+

Docusaurus has had a large impact on the open source community as seen from the many popular projects which use Docusaurus for documentation. In order to move faster in the future, we are taking the opportunity to fix some core problems with Docusaurus 1 and striving to make Docusaurus better for everyone. In fact, it is safe to say that Docusaurus 2 is not just a plan any longer; the work on it has started and, hopefully, we will be able to see it materialize in the near future.

+

Docusaurus' mission has always been to make it really easy for you to get a website with documentation up and running out of the box. That mission does not change with Docusaurus 2.

+

We also want to let people know that due to work on Docusaurus 2, we will be less likely to accept new features/major changes on Docusaurus 1.

+

If you are using Docusaurus, you are part of our community; keep letting us know how we can make Docusaurus better for you. If you appreciate the work we're doing, you can support Docusaurus on Open Collective.

+
+

If you are sponsoring our work on Open Collective, we'll personally offer you a helping hand for maintenance and upgrading of Docusaurus website.

+
+

Lastly, if you haven't done so already, click the star and watch button on GitHub, and follow us on Twitter.

]]>
+ new + adoption +
+ + <![CDATA[How I Converted Profilo to Docusaurus in Under 2 Hours]]> + https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus + https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus + Mon, 30 Apr 2018 00:00:00 GMT + + +

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+ +

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+

In general, when creating a website with Docusaurus you do the following:

+
    +
  1. Generate a template website using Docusaurus scripts.
  2. +
  3. Customize the generated template files for your desired site colors and your project configuration (ex: website and GitHub links).
  4. +
  5. Create the website content: +
      +
    1. Add your docs and any supporting assets.
    2. +
    3. Customize the default landing page provided by Docusaurus to suit your needs.
    4. +
    5. Configure the default site navigation file.
    6. +
    +
  6. +
  7. Publish the website and set up how it will be published for future changes.
  8. +
+

Given I had pre-existing Markdown files, I didn't have to generate the core content but simply make sure that Docusaurus could process the files by adding the expected metadata to them. Most of the work would therefore consist of customizing the defaults provided by Docusaurus.

+

Overview of Steps Taken

+

Here's an overview of the steps taken to convert to a website. I'll discuss some of the design aspects in a later section.

+

Design and colors:

+
    +
  1. Got all the desired logo formats from designer. I had to create the .favicon one.
  2. +
  3. Worked out some passable primary and secondary website colors using the http://paletton.com/ tools - very handy!
  4. +
+

Initial website setup:

+
    +
  1. Forked the Profilo project on GitHub and created a local clone of the fork to set up the website.
  2. +
  3. Created the initial Docusaurus website using the installation instructions.
  4. +
  5. Deleted the docs-examples-from-docusaurus and website/blog-examples-from-docusaurus folders as these would not be needed. Profilo had existing docs we could use and there was no need for blogs at this time.
  6. +
+

Content creation:

+
    +
  1. +

    Added metadata to the existing Markdown files found in the docs folder, for example:

    +
    ---
    id: architecture
    title: Architecture
    sidebar_label: Architecture
    ---
    +
  2. +
  3. +

    Added the logo assets to the website/static/img folder.

    +
  4. +
  5. +

    Modified website/pages/en/index.js, the landing page, to highlight Profilo features.

    +
  6. +
  7. +

    Modified website/core/Footer.js, the footer, to simplify it for Profilo.

    +
  8. +
  9. +

    Edited website/siteConfig.js (website configuration file) to specify the previously chosen primary and secondary colors.

    +
  10. +
  11. +

    Modified website/sidebars.json that specifies the sidebar navigation. Listed all the docs and customized it based on the metadata added to the Markdown files.

    +
  12. +
  13. +

    Edited the website configuration file to specify the GitHub properties, logo images, header links, and the website link.

    +
  14. +
  15. +

    Tested the website locally throughout this phase. (I ran yarn start from the website folder to start the server.)

    +
  16. +
+

Feedback and review changes:

+
    +
  1. Sent a pull request to the project.
  2. +
  3. Updated the colors after the designer rightly gasped at the ones I had chosen (IANAD).
  4. +
  5. Updated the colors and updated the PR.
  6. +
  7. The PR was then accepted and merged. Yay!
  8. +
+

Website publishing:

+
    +
  1. +

    Pushed the first website version by running the Docusaurus publish script from the command line:

    +
    USE_SSH=true \
    GIT_USER=caabernathy \
    CURRENT_BRANCH=master \
    yarn run publish-gh-pages
    +
  2. +
  3. +

    Configured CircleCI using the provided Docusaurus instructions. There were 2 PRs for this, the firstfor the initial config and the second to make sure CircleCI only triggered for changes in the master branch (thanks Joel Marcey!).

    +
  4. +
+

The final website was published on https://facebookincubator.github.io/profilo/. It had taken 1.5 hours to get to the initial PR stage and another half an hour or so to respond to review feedback and publish the website.

+

Design

+

Here's what the initial website looked like when the first pull request was sent out:

+

The website&#39;s front page, with a quite bright and saturated red color as the primary color, closely resembling the Profilo logo color, making the logo unrecognizable in the navbar

+

Most of the time in the content creation was spent picking colors that worked reasonably well with the given logo. These colors were a good jumping off point for designer feedback. I used Photoshop to sample various portions of the logo.

+

Picking colors in Photoshop, with the Profilo logo and the main working area in the background and a color picker dialog in the foreground, selected to a red shade

+

I then took the RGB representation of the color and set it as the baseline color on Paletton. The website then gave me various color options to try on the website by editing the Docusaurus website configuration file.

+

Using Paletton to generate a full palette from the red shade selected. There&#39;s a color wheel showing all hues on the left, and a square showing various shades of red on the right.

+

The selected primary and secondary colors were a good jumping off point for designer feedback.

+

There were also modifications made to the default website generated by Docusaurus. These changes were mainly around simplifying the footer and creating a customized landing page for Profilo that listed the project's features.

+

Here's what the final website looked like:

+

The website&#39;s front page, with a much darker red color as the primary color, making both the logo and the primary-colored title text clearly legible.

+

This is an example page showing the core content, in this case the Getting Started page:

+

A doc page with the sidebar on the left quarter of the screen and the main content occupying the rest. Some text is using the primary color and the main body uses multiple kinds of typesetting including bold, list, and code

+

This also shows the sidebar structure that was set up through editing website/sidebars.json.

+

Lastly, I didn't have to worry about handling responsive design. You get this out of the box with Docusaurus!

+

Mobile screenshots of the front page and sample doc page. The layout is automatically adjusted to make it appear more natural. The doc sidebar is hidden behind a button.

+

Final Thoughts

+

The Profilo engineers were happy to see that they didn't have to change their workflow to update existing content. They were able to continue working with Markdown files. This will still be true in the future if new docs are added, although there may be some config changes needed if the sidebar navigation needs to be updated.

+

The infrastructure provided by Docusaurus made it easy to convert Markdown files into a working website. Even though the project had only three docs, this gave Profilo a more professional look. So, it was well worth the short time investment to get it done.

]]>
+ profilo + adoption
\ No newline at end of file diff --git a/blog/tags.html b/blog/tags.html new file mode 100644 index 0000000000..6181bffd73 --- /dev/null +++ b/blog/tags.html @@ -0,0 +1,58 @@ + + + + + +Tags | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags.html.html b/blog/tags.html.html new file mode 100644 index 0000000000..0cef11efd2 --- /dev/null +++ b/blog/tags.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/adoption.html b/blog/tags/adoption.html new file mode 100644 index 0000000000..f2a41fb30d --- /dev/null +++ b/blog/tags/adoption.html @@ -0,0 +1,64 @@ + + + + + +2 posts tagged with "adoption" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

2 posts tagged with "adoption"

View All Tags

Towards Docusaurus 2

· 10 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

How I Converted Profilo to Docusaurus in Under 2 Hours

· 6 min read
+

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+
+

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+ + \ No newline at end of file diff --git a/blog/tags/adoption.html.html b/blog/tags/adoption.html.html new file mode 100644 index 0000000000..5024e7f784 --- /dev/null +++ b/blog/tags/adoption.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/beta.html b/blog/tags/beta.html new file mode 100644 index 0000000000..802d838d33 --- /dev/null +++ b/blog/tags/beta.html @@ -0,0 +1,60 @@ + + + + + +One post tagged with "beta" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "beta"

View All Tags

Announcing Docusaurus 2 Beta

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joel Marcey
Developer Advocate at Meta
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast

After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

+ + \ No newline at end of file diff --git a/blog/tags/beta.html.html b/blog/tags/beta.html.html new file mode 100644 index 0000000000..0e3c6fc9fc --- /dev/null +++ b/blog/tags/beta.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/birth.html b/blog/tags/birth.html new file mode 100644 index 0000000000..00ae552e75 --- /dev/null +++ b/blog/tags/birth.html @@ -0,0 +1,59 @@ + + + + + +One post tagged with "birth" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/birth.html.html b/blog/tags/birth.html.html new file mode 100644 index 0000000000..cc34e45cfe --- /dev/null +++ b/blog/tags/birth.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/blog.html b/blog/tags/blog.html new file mode 100644 index 0000000000..e45a23d89e --- /dev/null +++ b/blog/tags/blog.html @@ -0,0 +1,66 @@ + + + + + +One post tagged with "blog" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "blog"

View All Tags

Introducing Docusaurus

· 9 min read
Joel Marcey
Developer Advocate at Meta

+

We are very happy to introduce Docusaurus to help you manage one or many open source websites.

+

We created Docusaurus for the following reasons:

+
    +
  1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.
  2. +
  3. To provide features that many of our open source websites need like blog support, search and versioning.
  4. +
  5. To make it easy to push updates, new features, and bug fixes to everyone all at once.
  6. +
  7. And, finally, to provide a consistent look and feel across all of our open source projects.
  8. +
+ + \ No newline at end of file diff --git a/blog/tags/blog.html.html b/blog/tags/blog.html.html new file mode 100644 index 0000000000..d3c4b20b66 --- /dev/null +++ b/blog/tags/blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/documentation.html b/blog/tags/documentation.html new file mode 100644 index 0000000000..86f873b1dd --- /dev/null +++ b/blog/tags/documentation.html @@ -0,0 +1,66 @@ + + + + + +One post tagged with "documentation" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "documentation"

View All Tags

Introducing Docusaurus

· 9 min read
Joel Marcey
Developer Advocate at Meta

+

We are very happy to introduce Docusaurus to help you manage one or many open source websites.

+

We created Docusaurus for the following reasons:

+
    +
  1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.
  2. +
  3. To provide features that many of our open source websites need like blog support, search and versioning.
  4. +
  5. To make it easy to push updates, new features, and bug fixes to everyone all at once.
  6. +
  7. And, finally, to provide a consistent look and feel across all of our open source projects.
  8. +
+ + \ No newline at end of file diff --git a/blog/tags/documentation.html.html b/blog/tags/documentation.html.html new file mode 100644 index 0000000000..dd62fcd939 --- /dev/null +++ b/blog/tags/documentation.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/docusaurus.html b/blog/tags/docusaurus.html new file mode 100644 index 0000000000..ff86bbf774 --- /dev/null +++ b/blog/tags/docusaurus.html @@ -0,0 +1,66 @@ + + + + + +One post tagged with "docusaurus" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "docusaurus"

View All Tags

Introducing Docusaurus

· 9 min read
Joel Marcey
Developer Advocate at Meta

+

We are very happy to introduce Docusaurus to help you manage one or many open source websites.

+

We created Docusaurus for the following reasons:

+
    +
  1. To put the focus on writing good documentation instead of worrying about the infrastructure of a website.
  2. +
  3. To provide features that many of our open source websites need like blog support, search and versioning.
  4. +
  5. To make it easy to push updates, new features, and bug fixes to everyone all at once.
  6. +
  7. And, finally, to provide a consistent look and feel across all of our open source projects.
  8. +
+ + \ No newline at end of file diff --git a/blog/tags/docusaurus.html.html b/blog/tags/docusaurus.html.html new file mode 100644 index 0000000000..96e4dfacba --- /dev/null +++ b/blog/tags/docusaurus.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html deleted file mode 100644 index ba7506fee7..0000000000 --- a/blog/tags/docusaurus/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -4 posts tagged with "docusaurus" | My Site - - - - - -

4 posts tagged with "docusaurus"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

-
    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • -
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - \ No newline at end of file diff --git a/blog/tags/endi.html b/blog/tags/endi.html new file mode 100644 index 0000000000..2b8a182cc9 --- /dev/null +++ b/blog/tags/endi.html @@ -0,0 +1,58 @@ + + + + + +One post tagged with "endi" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/endi.html.html b/blog/tags/endi.html.html new file mode 100644 index 0000000000..aed6fc4caa --- /dev/null +++ b/blog/tags/endi.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html deleted file mode 100644 index e5c6776969..0000000000 --- a/blog/tags/facebook/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -One post tagged with "facebook" | My Site - - - - - -

One post tagged with "facebook"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

-
    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • -
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html deleted file mode 100644 index 59582a8577..0000000000 --- a/blog/tags/hello/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -2 posts tagged with "hello" | My Site - - - - - -

2 posts tagged with "hello"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

-
    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • -
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - \ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html deleted file mode 100644 index ea53710f17..0000000000 --- a/blog/tags/hola/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -One post tagged with "hola" | My Site - - - - - -

One post tagged with "hola"

View All Tags

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - \ No newline at end of file diff --git a/blog/tags/i-18-n.html b/blog/tags/i-18-n.html new file mode 100644 index 0000000000..fca891d943 --- /dev/null +++ b/blog/tags/i-18-n.html @@ -0,0 +1,62 @@ + + + + + +One post tagged with "i18n" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "i18n"

View All Tags

Releasing Docusaurus i18n

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

+ + \ No newline at end of file diff --git a/blog/tags/i-18-n.html.html b/blog/tags/i-18-n.html.html new file mode 100644 index 0000000000..17919bd340 --- /dev/null +++ b/blog/tags/i-18-n.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html deleted file mode 100644 index c851617690..0000000000 --- a/blog/tags/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Tags | My Site - - - - - - - - \ No newline at end of file diff --git a/blog/tags/maintenance.html b/blog/tags/maintenance.html new file mode 100644 index 0000000000..b37b6f38bb --- /dev/null +++ b/blog/tags/maintenance.html @@ -0,0 +1,62 @@ + + + + + +One post tagged with "maintenance" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "maintenance"

View All Tags

Preparing your site for Docusaurus v3

· 14 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Docusaurus v3 is now in beta and the official release is around the corner. This is the perfect time to start preparing your site for this new major version.

+

Docusaurus v3 comes with a few breaking changes, many of which can be handled today under Docusaurus v2. Preparing your site ahead of time can be done incrementally, and will make it easier to upgrade to v3.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+

This article will mostly focus on how to prepare your content for this new MDX version, and will also list a few other breaking changes that you can handle today.

+

Preparing your site for Docusaurus v3 - social card

+ + \ No newline at end of file diff --git a/blog/tags/maintenance.html.html b/blog/tags/maintenance.html.html new file mode 100644 index 0000000000..66c6298c1b --- /dev/null +++ b/blog/tags/maintenance.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/new.html b/blog/tags/new.html new file mode 100644 index 0000000000..ea1fa5298c --- /dev/null +++ b/blog/tags/new.html @@ -0,0 +1,59 @@ + + + + + +One post tagged with "new" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "new"

View All Tags

Towards Docusaurus 2

· 10 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

Docusaurus was officially announced over nine months ago as a way to easily build open source documentation websites. Since then, it has amassed over 8,600 GitHub Stars, and is used by many popular open source projects such as React Native, Babel, Jest, Reason and Prettier.

+

There is a saying that the very best software is constantly evolving, and the very worst is not. In case you are not aware, we have been planning and working on the next version of Docusaurus 🎉.

+ + \ No newline at end of file diff --git a/blog/tags/new.html.html b/blog/tags/new.html.html new file mode 100644 index 0000000000..1adb6a0171 --- /dev/null +++ b/blog/tags/new.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/profilo.html b/blog/tags/profilo.html new file mode 100644 index 0000000000..f4354d9fd6 --- /dev/null +++ b/blog/tags/profilo.html @@ -0,0 +1,63 @@ + + + + + +One post tagged with "profilo" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "profilo"

View All Tags

How I Converted Profilo to Docusaurus in Under 2 Hours

· 6 min read
+

“Joel and I were discussing having a website and how it would have been great to launch with it. So I challenged myself to add Docusaurus support. It took just over an hour and a half. I'm going to send you a PR with the addition so you can take a look and see if you like it. Your workflow for adding docs wouldn't be much different from editing those Markdown files.”

+

— Note sent to the Profilo team

+
+

This is the story of the rather short journey it took to create the Profilo website using Docusaurus.

+

Profilo, an Android library for collecting performance traces from production, was announced earlier this year. The project was published on GitHub with a less than a handful or Markdown files to describe its functionality and no website to showcase any branding and highlight the logo. The task at hand was to turn these existing docs and logo into a website.

+ + \ No newline at end of file diff --git a/blog/tags/profilo.html.html b/blog/tags/profilo.html.html new file mode 100644 index 0000000000..49ad575c30 --- /dev/null +++ b/blog/tags/profilo.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/recap.html b/blog/tags/recap.html new file mode 100644 index 0000000000..744b452f0c --- /dev/null +++ b/blog/tags/recap.html @@ -0,0 +1,65 @@ + + + + + +3 posts tagged with "recap" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

3 posts tagged with "recap"

View All Tags

Docusaurus 2020 Recap

· 6 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

2020 was great for Docusaurus, despite a regrettable start and a tumultuous year for everyone.

+

We continued to invest in Docusaurus 2, and made it reach full feature parity with Docusaurus 1.

+

We now recommend Docusaurus 2 as the default choice to start a new Docusaurus project and encourage v1 users to migrate to Docusaurus 2.

+

We are still in alpha, but expect some good news very soon!

+

Three Docusaurus plushies laid side-by-side on the table

Docusaurus 2019 Recap

· 3 min read
Yangshun Tay
Front End Engineer at Meta

2019 was a great year for Docusaurus - we've made tremendous progress on Docusaurus 2. Current Docusaurus 1 users who aren't using the translations feature can feel free to check it out and migrate to it! Otherwise we will work with you to make that happen in 2020 :)

+ + \ No newline at end of file diff --git a/blog/tags/recap.html.html b/blog/tags/recap.html.html new file mode 100644 index 0000000000..8f0f7c12ab --- /dev/null +++ b/blog/tags/recap.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/release.html b/blog/tags/release.html new file mode 100644 index 0000000000..3b9744d838 --- /dev/null +++ b/blog/tags/release.html @@ -0,0 +1,71 @@ + + + + + +11 posts tagged with "release" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

11 posts tagged with "release"

View All Tags

Announcing Docusaurus 3.0

· 11 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we are happy to announce Docusaurus 3.0! 🥳

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

This is a new major version of Docusaurus, coming with new exciting features and upgraded dependencies.

+

In line with the Semantic Versioning principles, this release includes breaking changes we documented thoroughly in the v3 upgrade guide. Breaking changes can be bothersome, but they are necessary to set the ground for a new wave of Docusaurus features we plan to implement.

+

v3.0 social-card image

Upgrading frontend dependencies with confidence

· 9 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

+

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

+

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

+

Upgrading frontend dependencies with confidence - social card

+ + \ No newline at end of file diff --git a/blog/tags/release.html.html b/blog/tags/release.html.html new file mode 100644 index 0000000000..c0e943d11e --- /dev/null +++ b/blog/tags/release.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/release/page/2.html b/blog/tags/release/page/2.html new file mode 100644 index 0000000000..f6beb42e41 --- /dev/null +++ b/blog/tags/release/page/2.html @@ -0,0 +1,69 @@ + + + + + +11 posts tagged with "release" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

11 posts tagged with "release"

View All Tags

Announcing Docusaurus 2.0

· 13 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joshua Chen
Working hard on Docusaurus
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast
Paul O’Shannessy
Engineering Manager at Meta
Joel Marcey
Co-creator of Docusaurus 1

Today we are extremely happy to finally announce Docusaurus 2.0! 🥳️

+

At Meta Open Source, we believe Docusaurus will help you build the best documentation websites with minimal effort, letting you focus on what really matters: writing the content.

+

After 4 years of work, 75 alphas and 22 betas, the next generation of Docusaurus is ready for prime time. From now on, we now plan to respect Semantic Versioning and will release major versions more frequently.

+

social-card image

Announcing Docusaurus 2 Beta

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor
Joel Marcey
Developer Advocate at Meta
Yangshun Tay
Front End Engineer at Meta
Alexey Pyltsyn
Open-source enthusiast

After a lengthy alpha stage in order to ensure feature parity and quality, we are excited to officially release the first Docusaurus 2 beta.

+

With the announcement of this beta, the team is even more confident that Docusaurus 2 is ready for mainstream adoption!

+

+ + \ No newline at end of file diff --git a/blog/tags/release/page/2.html.html b/blog/tags/release/page/2.html.html new file mode 100644 index 0000000000..af52a2f4f9 --- /dev/null +++ b/blog/tags/release/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/release/page/3.html b/blog/tags/release/page/3.html new file mode 100644 index 0000000000..da2da8b6ad --- /dev/null +++ b/blog/tags/release/page/3.html @@ -0,0 +1,62 @@ + + + + + +11 posts tagged with "release" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

11 posts tagged with "release"

View All Tags

Releasing Docusaurus i18n

· 4 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Today, we officially release Docusaurus 2 i18n (internationalization), as part of 2.0.0-alpha.71.

+

Docusaurus 2 has now reached full feature parity with Docusaurus 1. 🎉 And soon, after a few additional infrastructure updates and a bit more testing, the first Docusaurus 2 beta will be released.

+

We went the extra mile, and the new i18n support is even better than in Docusaurus 1.

+

In this post, we will present you the translation workflow, explain some design decisions and showcase early adopter sites that just went live: Jest, Redwood, and Datagit.

+

We also dogfood the i18n support on the Docusaurus 2 site itself, and this post is already available in English and French!

+ + \ No newline at end of file diff --git a/blog/tags/release/page/3.html.html b/blog/tags/release/page/3.html.html new file mode 100644 index 0000000000..2f7702fa4f --- /dev/null +++ b/blog/tags/release/page/3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/search.html b/blog/tags/search.html new file mode 100644 index 0000000000..f033d78590 --- /dev/null +++ b/blog/tags/search.html @@ -0,0 +1,59 @@ + + + + + +One post tagged with "search" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

One post tagged with "search"

View All Tags

DocSearch migration

· 3 min read
Clément Vannicatte
Software Engineer @ Algolia
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

DocSearch is migrating to a new, more powerful system, which gives users their own Algolia application and new credentials.

+

Docusaurus site owners should upgrade their configuration with their new credentials by February 1, 2022, existing search indexes will be frozen and become read-only after this date.

+ + \ No newline at end of file diff --git a/blog/tags/search.html.html b/blog/tags/search.html.html new file mode 100644 index 0000000000..6409a614a1 --- /dev/null +++ b/blog/tags/search.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/tribute.html b/blog/tags/tribute.html new file mode 100644 index 0000000000..44fa0ac6ba --- /dev/null +++ b/blog/tags/tribute.html @@ -0,0 +1,58 @@ + + + + + +One post tagged with "tribute" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/tribute.html.html b/blog/tags/tribute.html.html new file mode 100644 index 0000000000..177fd4512e --- /dev/null +++ b/blog/tags/tribute.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html b/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html new file mode 100644 index 0000000000..6e70fd0137 --- /dev/null +++ b/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html @@ -0,0 +1,150 @@ + + + + + +Upgrading frontend dependencies with confidence | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Upgrading frontend dependencies with confidence

· 9 min read
Sébastien Lorber
Docusaurus maintainer, This Week In React editor

Frontend developers often need to upgrade npm dependencies, but those upgrades can feel scary and lead to subtle UI side effects not caught by your regular test suite.

+

Upgrading Docusaurus is a good example: without reviewing all the pages one by one, it's hard to be sure there's no visual regression. Docusaurus v3 is around the corner (currently in beta), and we would like to help you do this upgrade with confidence.

+

This article introduces a visual regression testing workflow based on GitHub Actions, Playwright, and Argos. It is not directly coupled to Docusaurus or React, and can be adapted to work with other frontend applications and frameworks.

+

Upgrading frontend dependencies with confidence - social card

+

This workflow has been tested while upgrading Docusaurus v2 to v3, and already helped catch a few visual regressions on sites such as React Native, Jest, and the Docusaurus site itself.

+

Docusaurus v3 comes with infrastructure changes and major dependency upgrades such as MDX v3 and React 18, which can produce unexpected side effects. It would have been difficult to notice all the visual regressions without such a workflow. That's why we encourage site owners to consider adopting visual regression testing, especially for highly customized sites.

+

Workflow overview

+

The general idea is pretty simple:

+
    +
  • Build your site in CI with GitHub Actions
  • +
  • Take screenshots of all sitemap.xml pages with Playwright
  • +
  • Upload them to Argos
  • +
  • Do this for both Git branches main and pr-branch
  • +
  • Compare the screenshots side-by-side in Argos
  • +
+

Argos will then report visual differences found between main and pr-branch as a GitHub commit status and pull-request comment. This can help you detect visual regressions ahead of time in an automated way.

+

Argos GitHub commit status

+

Argos GitHub PR comment

+

Argos creates a report referencing all the visual differences found while comparing the 2 Git branches sites side-by-side, and provides a convenient UX to easily spot the difference.

+

Check the Docusaurus Argos page to explore our own website reports.

+

Here is a more concrete example of Argos reporting a visual regression found while upgrading the React-Native website:

+

Argos GitHub PR comment

+

Workflow implementation

+

This section will describe the implementation details of each step of the workflow.

+

You will need to sign up to Argos and connect Argos to your GitHub repository

+

Dependencies

+

This workflow requires the following dev dependencies, in addition to the usual Docusaurus ones:

+
yarn add -D @argos-ci/cli @argos-ci/playwright @playwright/test cheerio
+

GitHub Action

+

The GitHub action is responsible for executing the workflow for each Git branch.

+

A minimal workflow could look like:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
take-screenshots:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: current

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Install Playwright browsers
run: yarn playwright install --with-deps chromium

- name: Build the website
run: yarn docusaurus build

- name: Take screenshots with Playwright
run: yarn playwright test

- name: Upload screenshots to Argos
run: yarn argos upload ./screenshots
+

Playwright config

+

Playwright is responsible for taking screenshots of the website previously built locally by the GitHub action.

+

A minimal Playwright config could look like:

+
playwright.config.ts
import {devices} from '@playwright/test';
import type {PlaywrightTestConfig} from '@playwright/test';

const config: PlaywrightTestConfig = {
webServer: {
port: 3000,
command: 'yarn docusaurus serve',
},
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
};

export default config;
+

Playwright test

+

A Playwright config is not enough: we also need to write a Playwright test file to generate the site screenshots.

+
screenshot.spec.ts
import * as fs from 'fs';
import {test} from '@playwright/test';
import {argosScreenshot} from '@argos-ci/playwright';
import {extractSitemapPathnames, pathnameToArgosName} from './utils';

// Constants
const siteUrl = 'http://localhost:3000';
const sitemapPath = './build/sitemap.xml';
const stylesheetPath = './screenshot.css';
const stylesheet = fs.readFileSync(stylesheetPath).toString();

// Wait for hydration, requires Docusaurus v2.4.3+
// Docusaurus adds a <html data-has-hydrated="true"> once hydrated
// See https://github.com/facebook/docusaurus/pull/9256
function waitForDocusaurusHydration() {
return document.documentElement.dataset.hasHydrated === 'true';
}

function screenshotPathname(pathname: string) {
test(`pathname ${pathname}`, async ({page}) => {
const url = siteUrl + pathname;
await page.goto(url);
await page.waitForFunction(waitForDocusaurusHydration);
await page.addStyleTag({content: stylesheet});
await argosScreenshot(page, pathnameToArgosName(pathname));
});
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath);
console.log('Pathnames to screenshot:', pathnames);
pathnames.forEach(screenshotPathname);
});
+
Why do we take screenshots with Argos instead of Playwright?

Argos has a Playwright integration that wraps the original Playwright screenshot API and provides better defaults to make screenshots more deterministic.

+
What's inside utils.ts?

This module contains implementation details that we choose to hide for clarity.

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Extract a list of pathnames, given a fs path to a sitemap.xml file
// Docusaurus generates a build/sitemap.xml file for you!
export function extractSitemapPathnames(sitemapPath: string): string[] {
const sitemap = fs.readFileSync(sitemapPath).toString();
const $ = cheerio.load(sitemap, {xmlMode: true});
const urls: string[] = [];
$('loc').each(function handleLoc() {
urls.push($(this).text());
});
return urls.map((url) => new URL(url).pathname);
}

// Converts a pathname to a decent screenshot name
export function pathnameToArgosName(pathname: string): string {
return pathname.replace(/^\/|\/$/g, '') || 'index';
}
+

Stylesheet

+

Screenshots are not always deterministic, and taking a screenshot of a page twice can lead to subtle variations that will be reported by Argos as false positive visual regressions.

+

For this reason, we recommend injecting an extra stylesheet to hide the problematic elements. You will probably need to add new CSS rules to this base stylesheet, according to flaky elements found on your own site. Read Argos - About flaky tests docs for details.

+
screenshot.css
/* Iframes can load lazily */
iframe,
/* Avatars can be flaky due to using external sources: GitHub/Unavatar */
.avatar__photo,
/* Gifs load lazily and are animated */
img[src$='.gif'],
/* Algolia keyboard shortcuts appear with a little delay */
.DocSearch-Button-Keys > kbd,
/* The live playground preview can often display dates/counters */
[class*='playgroundPreview'] {
visibility: hidden;
}

/* Different docs last-update dates can alter layout */
.theme-last-updated,
/* Mermaid diagrams are rendered client-side and produce layout shifts */
.docusaurus-mermaid-container {
display: none;
}
+
prevent layout shifts

We recommend hiding flaky UI elements affecting layout with display: none;.

For example, the docs "Last Updated on" might render on more than 1 line, eventually "pushing" the rest of your content further down, leading to Argos detecting many different pixels.

+

Example repository

+

The slorber/docusaurus-argos-example repo shows a complete example of implementing this workflow on a newly initialized Docusaurus v2 site, using a Yarn monorepo.

+

Docusaurus + Argos monorepo example screenshot

+

Relevant pull-requests:

+ +
More advanced example?

Browse the Docusaurus repository for a more advanced integration:

+

Make it cheap

+

The tools we choose are implementation details of this visual regression testing workflow.

+

For Docusaurus, we choose Argos: it works well for us, and offers free and open source plans. However, you are free to adopt alternative tools.

+

In case you don't mind storing large screenshots in Git, you can also try the free, self-hosted Playwright Visual Comparisons and browse visual differences with npx playwright show-report. However, we found using a dedicated external tool is more convenient.

+

External tools can be expensive, but generally offer free plans with an ample quota of screenshots. You can reduce your screenshot consumption by implementing a few tricks below.

+

Limit the number of pathnames

+

The base setup involves taking a screenshot of every single pathname found in sitemap.xml. For large sites, that can lead to a lot of screenshots.

+

You can decide to filter the pathnames to only take screenshots of the most critical pages.

+

For the Docusaurus website, do not take screenshots for versioned docs pages:

+
screenshot.spec.ts
function isVersionedDocsPathname(pathname: string): boolean {
return pathname.match(/^\/docs\/((\d\.\d\.\d)|(next))\//);
}

test.describe('Docusaurus site screenshots', () => {
const pathnames = extractSitemapPathnames(sitemapPath)
.filter(isVersionedDocsPathname);

pathnames.forEach(screenshotPathname);
});
+

Limit the workflow concurrency

+

Implementing GitHub Actions concurrency groups will prevent successive commits to trigger multiple useless workflow runs. The workflow will only be executed for the last commit, and previous commits will be canceled automatically.

+
.github/workflows/argos.yml
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
+

Run your workflow conditionally

+

It's not worth running this workflow for every single commit and pull-request.

+

For example, if someone corrects a typo in your documentation, you probably don't want to take hundreds of screenshots and have Argos to point out that only the modified page has a visual difference: duh, that's a bit expected!

+

For the Docusaurus website, we only run the workflow for pull-request having the Argos label:

+
.github/workflows/argos.yml
name: Argos CI Screenshots

on:
push:
branches: [main]
pull_request:
branches: [main]
types:
- opened
- synchronize
- reopened
- labeled

jobs:
take-screenshots:
if: ${{ github.ref_name == 'main' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Argos')) }}
runs-on: ubuntu-latest
steps:
# Your job steps here ...
+

There are many options to explore, such as triggering the workflow manually or only when files matching a specific pattern are modified.

+

Conclusion

+

I believe visual regression testing is underused in the frontend ecosystem.

+

Taking full-page screenshots is a low-hanging fruit that is easy to set up and can help you catch a new class of bugs that your regular test suite would miss. This technique shines not only for npm package upgrades, but also for any kind of refactoring that shouldn't change the user interface.

+

So why not give it a try?

+

Happy hacking!

+

See also

+

Useful documentation links:

+
+ + \ No newline at end of file diff --git a/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html.html b/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html.html new file mode 100644 index 0000000000..e2166b59ff --- /dev/null +++ b/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html deleted file mode 100644 index 4e340edfa9..0000000000 --- a/blog/welcome/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -Welcome | My Site - - - - - -

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

-

Simply add Markdown files (or folders) to the blog directory.

-

Regular blog authors can be added to authors.yml.

-

The blog post date can be extracted from filenames, such as:

-
    -
  • 2019-05-30-welcome.md
  • -
  • 2019-05-30-welcome/index.md
  • -
-

A blog post folder can be convenient to co-locate blog post images:

-

Docusaurus Plushie

-

The blog supports tags as well!

-

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - \ No newline at end of file diff --git a/changelog.html b/changelog.html new file mode 100644 index 0000000000..3ae5bbcfd4 --- /dev/null +++ b/changelog.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus changelog

Subscribe through RSS feeds or follow us on to stay up-to-date with new releases!

+ + \ No newline at end of file diff --git a/changelog.html.html b/changelog.html.html new file mode 100644 index 0000000000..c39e338c6e --- /dev/null +++ b/changelog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.19.html b/changelog/2.0.0-alpha.19.html new file mode 100644 index 0000000000..14a3667648 --- /dev/null +++ b/changelog/2.0.0-alpha.19.html @@ -0,0 +1,92 @@ + + + + + +2.0.0-alpha.19 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.19

    +
  • Add a sensible default for browserslist config.
  • +
  • UI +
      +
    • Add sun and moon emoji to the dark mode toggle.
    • +
    • Mobile responsive menu.
    • +
    • Right table of contents for docs is now sticky.
    • +
    +
  • +
  • Plugins +
      +
    • Change plugin definitions from classes to functions. Refer to the new plugin docs.
    • +
    • Implement Clients module API.
    • +
    • Change format within docusaurus.config.js to be like presets.
    • +
    +
  • +
  • Deps +
      +
    • Infima CSS is now locked down to specific versions and not relying upon the CDN which reads from trunk.
    • +
    • Update dependencies to latest
    • +
    +
  • +
  • Customize/ Override infima CSS variables by passing options into the classic preset.
  • +
+
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: require.resolve('./css/custom.css'),
},
...
},
],
],
+
    +
  • Allow passing remark and rehype plugins to mdx-loader for docs and blog plugin
  • +
  • Move themes component of docs and blog to be part of theme-classic
  • +
  • Use composition style for prism syntax highlighting instead of doing it via rehype plugin
  • +
  • Pass MDXProvider to docs and blog. To change the provided MDX components, run docusaurus swizzle @docusaurus/theme-classic MDXComponents
  • +
  • Add @docusaurus/theme-livecodeblock plugin
  • +
  • Better run-time code generation & webpack splitchunks optimization
  • +
  • Minify css for production build
  • +
  • Fix weird scrolling problem when navigating to a route with a hash location
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.19.html.html b/changelog/2.0.0-alpha.19.html.html new file mode 100644 index 0000000000..63600e7b26 --- /dev/null +++ b/changelog/2.0.0-alpha.19.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.20.html b/changelog/2.0.0-alpha.20.html new file mode 100644 index 0000000000..6496652254 --- /dev/null +++ b/changelog/2.0.0-alpha.20.html @@ -0,0 +1,75 @@ + + + + + +2.0.0-alpha.20 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.20

    +
  • Add copy codeblock button
  • +
  • Add Google analytics and Google gtag plugins.
  • +
  • Move source components to /src. Please create a website/src directory and move your /pages and /theme code into it. This is to make it easier to integrate your website with external build/static analysis tooling (you can now just pass in src/**/*.js as the path to process).
  • +
  • Adde more documentation thanks to @wgao19.
  • +
  • Deprecate the current docs plugin. The docs plugin as of 2.0.0-alpha.19 is heavily based on V1 specifications and we intend to create a better one that fixes some of the inconsistencies in V1. If you have swizzled any doc components, you will have to update their names. You are highly encourages to not swizzle the legacy doc components until we have completed the new docs plugin.
  • +
  • Separate v2 init command to new package @docusaurus/init
  • +
  • Render 404.html page
  • +
  • Improve SEO
  • +
  • Clicking on the logo in the mobile sliding navigation will now bring you to the homepage.
  • +
  • Performance +
      +
    • Disable webpack output pathinfo. Webpack has the ability to generate path info in the output bundle. However, this puts garbage collection pressure on projects that bundle thousands of modules. Not very useful for our case
    • +
    • Drop cache-loader in CI and test environment because it has an initial overhead. We always start from scratch in vm instance like CI so cache-loader is useless
    • +
    • Better splitchunks and babel default webpack config
    • +
    +
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.20.html.html b/changelog/2.0.0-alpha.20.html.html new file mode 100644 index 0000000000..ad183c5395 --- /dev/null +++ b/changelog/2.0.0-alpha.20.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.21.html b/changelog/2.0.0-alpha.21.html new file mode 100644 index 0000000000..6f1110e19f --- /dev/null +++ b/changelog/2.0.0-alpha.21.html @@ -0,0 +1,60 @@ + + + + + +2.0.0-alpha.21 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.21.html.html b/changelog/2.0.0-alpha.21.html.html new file mode 100644 index 0000000000..bfb1b44b36 --- /dev/null +++ b/changelog/2.0.0-alpha.21.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.22.html b/changelog/2.0.0-alpha.22.html new file mode 100644 index 0000000000..aebaec5f4b --- /dev/null +++ b/changelog/2.0.0-alpha.22.html @@ -0,0 +1,67 @@ + + + + + +2.0.0-alpha.22 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.22

    +
  • Add missing dependencies on @docusaurus/preset-classic
  • +
  • New plugin @docusaurus/plugin-ideal-image to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder)
  • +
  • Better Twitter/discord image preview. Previously the size is too zoomed
  • +
  • Allow prism syntax highlighting theme customization. Refer to https://docusaurus.io/docs/markdown-features#syntax-highlighting
  • +
  • CSS is now autoprefixed using postcss
  • +
  • Faster, lighter webpack bundle size
  • +
  • @docusaurus/theme-live-codeblock is now much smaller in size and no longer only load on viewport
  • +
  • Blog markdown files now support using the id field to specify the path
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.22.html.html b/changelog/2.0.0-alpha.22.html.html new file mode 100644 index 0000000000..d6380386cc --- /dev/null +++ b/changelog/2.0.0-alpha.22.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.23.html b/changelog/2.0.0-alpha.23.html new file mode 100644 index 0000000000..e0ba329792 --- /dev/null +++ b/changelog/2.0.0-alpha.23.html @@ -0,0 +1,60 @@ + + + + + +2.0.0-alpha.23 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.23.html.html b/changelog/2.0.0-alpha.23.html.html new file mode 100644 index 0000000000..9200306d7e --- /dev/null +++ b/changelog/2.0.0-alpha.23.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.24.html b/changelog/2.0.0-alpha.24.html new file mode 100644 index 0000000000..ebf69c8f5b --- /dev/null +++ b/changelog/2.0.0-alpha.24.html @@ -0,0 +1,65 @@ + + + + + +2.0.0-alpha.24 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.24

    +
  • Remove unused metadata for pages. This minimize number of http request & smaller bundle size.
  • +
  • Upgrade dependencies of css-loader from 2.x to 3.x. CSS modules localIdentName hash now only use the last 4 characters instead of 8.
  • +
  • Fix broken markdown linking replacement for mdx files
  • +
  • Fix potential security vulnerability because we're exposing the directory structure of the host machine. Instead of absolute path, we use relative path from site directory. Resulting in shorter webpack chunk naming and smaller bundle size.
  • +
  • Use contenthash instead of chunkhash for better long term caching
  • +
  • Allow user to customize generated heading from MDX. Swizzle @theme/Heading
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.24.html.html b/changelog/2.0.0-alpha.24.html.html new file mode 100644 index 0000000000..62d6f2894a --- /dev/null +++ b/changelog/2.0.0-alpha.24.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.25.html b/changelog/2.0.0-alpha.25.html new file mode 100644 index 0000000000..7e4e746d5e --- /dev/null +++ b/changelog/2.0.0-alpha.25.html @@ -0,0 +1,66 @@ + + + + + +2.0.0-alpha.25 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.25

    +
  • Blog plugin is rewritten in TypeScript and can now support CJK
  • +
  • Upgrade key direct dependencies such as webpack, mdx and babel to latest
  • +
  • Do not escape html and body attributes
  • +
  • For devices with very small viewport width, the searchbar is replaced with a search icon. On tap of the search icon the searchbar is expanded and the text beside the logo is hidden and remains hidden while the search bar is expanded.
  • +
  • Add date frontMatter support for blog plugin
  • +
  • Add truncateMarker option to blog plugin, support string or regex.
  • +
  • Webpack optimization.removeAvailableModules is now disabled for performance gain. See https://github.com/webpack/webpack/releases/tag/v4.38.0 for more context.
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.25.html.html b/changelog/2.0.0-alpha.25.html.html new file mode 100644 index 0000000000..3324c7f4ce --- /dev/null +++ b/changelog/2.0.0-alpha.25.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.26.html b/changelog/2.0.0-alpha.26.html new file mode 100644 index 0000000000..25295f4324 --- /dev/null +++ b/changelog/2.0.0-alpha.26.html @@ -0,0 +1,79 @@ + + + + + +2.0.0-alpha.26 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.26

    +
  • Docs, pages plugin is rewritten in TypeScript
  • +
  • Docs improvements and tweaks +
      +
    • Improved metadata which results in smaller bundle size.
    • +
    • Docs sidebar can now be more than one level deep, theoretically up to infinity
    • +
    • Collapsible docs sidebar!
    • +
    • Make doc page title larger
    • +
    • Add editUrl option (URL for editing) to docs plugin. If this field is set, there will be an "Edit this page" link for each doc page. Example: 'https://github.com/facebook/docusaurus/edit/master/docs'
    • +
    • Add showLastUpdateTime and showLastUpdateAuthor options to docs plugin to further achieve v1 parity of showing last update data for a particular doc
    • +
    +
  • +
  • Slight tweaks to the Blog components - blog title is larger now
  • +
  • Code Blocks +
      +
    • Change default theme from Night Owl to Palenight
    • +
    • Slight tweaks to playground/preview components
    • +
    +
  • +
  • Add scripts and stylesheets field to docusaurus.config.js
  • +
  • More documentation...
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.26.html.html b/changelog/2.0.0-alpha.26.html.html new file mode 100644 index 0000000000..4891414ae5 --- /dev/null +++ b/changelog/2.0.0-alpha.26.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.27.html b/changelog/2.0.0-alpha.27.html new file mode 100644 index 0000000000..07aa42caa5 --- /dev/null +++ b/changelog/2.0.0-alpha.27.html @@ -0,0 +1,63 @@ + + + + + +2.0.0-alpha.27 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.27.html.html b/changelog/2.0.0-alpha.27.html.html new file mode 100644 index 0000000000..496fd0a789 --- /dev/null +++ b/changelog/2.0.0-alpha.27.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.28.html b/changelog/2.0.0-alpha.28.html new file mode 100644 index 0000000000..77e5f4185e --- /dev/null +++ b/changelog/2.0.0-alpha.28.html @@ -0,0 +1,71 @@ + + + + + +2.0.0-alpha.28 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.28

    +
  • Further reduce memory usage to avoid heap memory allocation failure.
  • +
  • Fix keywords frontmatter for SEO not working properly.
  • +
  • Fix swizzle command not passing context properly to theme packages.
  • +
  • Add extendCli api for plugins. This will allow plugin to further extend Docusaurus CLI.
  • +
  • Fix swizzle command not being able to swizzle single js file.
  • +
  • Fix logo URL in footer to be appended with baseUrl automatically.
  • +
  • Add the option --no-open for start command.
  • +
  • Set @babel/env useBuiltins to usage. This will automatically use browserlist and import polyfills required.
  • +
  • Modified TerserWebpackPlugin terserOptions for better cross-browser compatibility.
  • +
  • BREAKING withBaseUrl is renamed to useBaseUrl because its a React Hooks. Make sure you import/rename it correctly. Eg: import useBaseUrl from '@docusaurus/useBaseUrl;
  • +
  • Fix potential security vulnerability because we're exposing the directory structure of the host machine.
  • +
  • Upgrade dependencies.
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.28.html.html b/changelog/2.0.0-alpha.28.html.html new file mode 100644 index 0000000000..cacbc817d5 --- /dev/null +++ b/changelog/2.0.0-alpha.28.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.29.html b/changelog/2.0.0-alpha.29.html new file mode 100644 index 0000000000..4d688dd4a8 --- /dev/null +++ b/changelog/2.0.0-alpha.29.html @@ -0,0 +1,63 @@ + + + + + +2.0.0-alpha.29 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.29.html.html b/changelog/2.0.0-alpha.29.html.html new file mode 100644 index 0000000000..2517a1c67f --- /dev/null +++ b/changelog/2.0.0-alpha.29.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.30.html b/changelog/2.0.0-alpha.30.html new file mode 100644 index 0000000000..1d09aeb01a --- /dev/null +++ b/changelog/2.0.0-alpha.30.html @@ -0,0 +1,61 @@ + + + + + +2.0.0-alpha.30 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.30

    +
  • Fix babel transpilation include/exclude logic to be more efficient. This also fix a very weird bug TypeError: Cannot assign to read only property 'exports' of object '#<Object>'.(#1868)
  • +
+

If you are still encountering the error. Please check whether you use module.exports for your .js file instead of doing export (mixing CJS and ES). See https://github.com/webpack/webpack/issues/4039#issuecomment-477779322 and https://github.com/webpack/webpack/issues/4039#issuecomment-273804003 for more context.

+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.30.html.html b/changelog/2.0.0-alpha.30.html.html new file mode 100644 index 0000000000..11c0315d07 --- /dev/null +++ b/changelog/2.0.0-alpha.30.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.31.html b/changelog/2.0.0-alpha.31.html new file mode 100644 index 0000000000..33faba6de9 --- /dev/null +++ b/changelog/2.0.0-alpha.31.html @@ -0,0 +1,76 @@ + + + + + +2.0.0-alpha.31 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.31

    +
  • Footer is now sticky/ pinned to the bottom of the viewport in desktop browsers.
  • +
  • Footer is now also displayed in docs page for consistency.
  • +
  • Remove empty doc sidebar container if sidebar for a particular doc page does not exist. Otherwise, it will cause an additional empty space.
  • +
  • Default PostCSS loader now only polyfills stage 3+ features (previously it was stage 2) like Create React App. Stage 2 CSS is considered relatively unstable and subject to change while Stage 3 features will likely become a standard.
  • +
  • Fix search bar focus bug. When you put the focus on search input, previously the focus will remain although we have clicked to other area outside of the search input.
  • +
  • New themeConfig option sidebarCollapsible. It is on by default. If explicitly set to false, all doc items in sidebar is expanded. Otherwise, it will still be a collapsible sidebar.
  • +
  • Disable adding hashes to the generated class names of CSS modules in dev mode. Generating unique identifiers takes some time, which can be saved since including paths to files in class names is enough to avoid collisions.
  • +
  • Fix showing sidebar category with empty items.
  • +
  • Update infima from 0.2.0-alpha.2 to 0.2.0-alpha.3 +
      +
    • Fix pagination nav and right sidebar color contrast ratio
    • +
    • Fix sidebar arrow color in dark mode
    • +
    • Fix footer mobile issue
    • +
    • Increase sidebar width
    • +
    • etc
    • +
    +
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.31.html.html b/changelog/2.0.0-alpha.31.html.html new file mode 100644 index 0000000000..2634bf45c7 --- /dev/null +++ b/changelog/2.0.0-alpha.31.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.32.html b/changelog/2.0.0-alpha.32.html new file mode 100644 index 0000000000..f508ea5044 --- /dev/null +++ b/changelog/2.0.0-alpha.32.html @@ -0,0 +1,92 @@ + + + + + +2.0.0-alpha.32 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.32

Features

+
    +
  • Add <Redirect> component for client side redirect. Example Usage:
  • +
+
import React from 'react';
import {Redirect} from '@docusaurus/router';

function Home() {
return <Redirect to="/docs/test" />;
}
+
    +
  • Allow user to add custom HTML to footer items. #1905
  • +
  • Added code block line highlighting feature (thanks @lex111)! If you have previously swizzled the CodeBlock theme component, it is recommended to update your source code to have this feature. (#1860)
  • +
+

Bug Fixes

+
    +
  • Fix @theme/Tabs component to be able to create tabs with only one item.
  • +
  • Fix MDX @theme/Heading component. If there is no id, it should not create anchor link.
  • +
  • Fixed a bug in which if themeConfig.algolia is not defined, the custom searchbar won't appear. If you've swizzled Algolia SearchBar component before, please update your source code otherwise CSS might break. See #1909 for reference.
  • +
+
- <Fragment>
+ <div className="navbar__search" key="search-box">
+
    +
  • Slightly adjust search icon position to be more aligned on small width device. (#1893)
  • +
  • Fix algolia styling bug, previously search suggestion result is sometimes hidden. (#1915)
  • +
  • Changed the way we read the USE_SSH env variable during deployment to be the same as in v1.
  • +
  • Fix accessing docs/ or /docs/xxxx that does not match any existing doc page should return 404 (Not found) page, not blank page. (#1903)
  • +
  • Prioritize @docusaurus/core dependencies/ node_modules over user's node_modules. This fix a bug whereby if user has core-js@3 on its own node_modules but docusaurus depends on core-js@2, we previously encounter Module not found: core-js/modules/xxxx (because core-js@3 doesn't have that).
  • +
  • Fix a bug where docs plugin add /docs route even if docs folder is empty. We also improved docs plugin test coverage to 100% for stability before working on docs versioning. (#1912)
  • +
+

Performance Improvement

+
    +
  • Reduce memory usage consumption. (#1900)
  • +
  • Significantly reduce main bundle size and initial HTML payload on production build. Generated files from webpack is also shorter in name. (#1898)
  • +
  • Simplify blog metadata. Previously, accessing /blog/post-xxx will request for next and prev blog post metadata too aside from target post metadata. We should only request target post metadata. (#1908)
  • +
+

Others

+
    +
  • Convert sitemap plugin to TypeScript. (#1894)
  • +
  • Refactor dark mode toggle into a hook. (#1899)
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.32.html.html b/changelog/2.0.0-alpha.32.html.html new file mode 100644 index 0000000000..a326133fbe --- /dev/null +++ b/changelog/2.0.0-alpha.32.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.33.html b/changelog/2.0.0-alpha.33.html new file mode 100644 index 0000000000..fc06dc4ec9 --- /dev/null +++ b/changelog/2.0.0-alpha.33.html @@ -0,0 +1,79 @@ + + + + + +2.0.0-alpha.33 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.33

Features

+
    +
  • Table of contents is now highlighted depending on current active headings. (thanks to awesome @SantiagoGdaR) #1896
  • +
  • Official blog plugin can now generate feed for blog posts. (thanks to awesome @moozzyk) #1916
  • +
  • BREAKING prismTheme is renamed to theme as part new prism object in themeConfig field in your docusaurus.config.js. Eg: +
     themeConfig: {
    - prismTheme: require('prism-react-renderer/themes/dracula'),
    + prism: {
    + theme: require('prism-react-renderer/themes/dracula'),
    + },
    },
    +
  • +
  • Added new prism option defaultLanguage that is used if the language is not specified in code blocks. #1910
  • +
+

Fixes

+
    +
  • Fix babel/env not picking the correct browserslist configuration during development. When running docusaurus start, process.env.NODE_ENV is now consistently set to development.
  • +
  • Ensure routes config generation to be more consistent in ordering. Nested routes should be placed last in routes.js. This will allow user to create src/pages/docs.js to create custom docs page for /docs or even src/pages/docs/super.js to create page for /docs/super/;
  • +
  • Fix watcher does not trigger reload on windows.
  • +
  • Fix build compilation error if exists only one code tab.
  • +
  • Add minor padding to docs container so that hash-link won't be cut off.
  • +
+

Others

+
    +
  • Misc dependency upgrades.
  • +
  • Stability improvement (more tests) & refactoring on docs plugin to prevent regression.
  • +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.33.html.html b/changelog/2.0.0-alpha.33.html.html new file mode 100644 index 0000000000..8c87ca0ad6 --- /dev/null +++ b/changelog/2.0.0-alpha.33.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.34.html b/changelog/2.0.0-alpha.34.html new file mode 100644 index 0000000000..2a5e781f8b --- /dev/null +++ b/changelog/2.0.0-alpha.34.html @@ -0,0 +1,121 @@ + + + + + +2.0.0-alpha.34 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.34

Endi
Alexey Pyltsyn
Yangshun Tay

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #1956 feat(v2): add ability hide dark mode toggle (@lex111)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #1958 breaking(v2): editUrl should point to website instead of docsDir (@endiliey)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #1959 fix(v2): useTOC hooks should not be called in each nested children (@endiliey)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-docs, docusaurus +
      +
    • #1957 refactor(v2): avoid synchronous/ blocking operation when possible (@endiliey)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-1.x, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
+

:running: Performance

+
    +
  • docusaurus-plugin-content-docs, docusaurus-utils, docusaurus +
      +
    • #1951 perf(v2): skip runtime fileHash cache in prod & get timestamp asynchronously (@endiliey)
    • +
    • #1950 perf(v2): more efficient hot reload & consistent filegen (@endiliey)
    • +
    +
  • +
+

Committers: 3

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.34.html.html b/changelog/2.0.0-alpha.34.html.html new file mode 100644 index 0000000000..027fca1aca --- /dev/null +++ b/changelog/2.0.0-alpha.34.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.35.html b/changelog/2.0.0-alpha.35.html new file mode 100644 index 0000000000..323eeb683e --- /dev/null +++ b/changelog/2.0.0-alpha.35.html @@ -0,0 +1,178 @@ + + + + + +2.0.0-alpha.35 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.35

Endi
Eric Carboni
Jamie Davenport
Nick McCormick
Alexey Pyltsyn
Vincent van der Walt

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #1965 feat(v2): add ability specify link in footer logo (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader, docusaurus-theme-classic +
      +
    • #1992 fix(v2): static phrasing content should be rendered correctly in TOC (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #1999 fix(v2): remove hashbang when click on category (@lex111)
    • +
    • #1962 fix(v2): make not clickable post title on post item page (@lex111)
    • +
    • #1980 fix(v2): remove invalid label attribute of footer links (@lex111)
    • +
    • #1978 fix(v2): use regular div instead of main tag for wrapper layout page (@lex111)
    • +
    • #1975 fix(v2): move header inside article tag in doc page (@lex111)
    • +
    • #1974 fix(v2): remove invalid attributes of nav links (@lex111)
    • +
    • #1963 fix(v2): remove empty containers when no data in blog pages (@lex111)
    • +
    • #1966 fix(v2): remove duplicate meta tags (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #1994 fix(v2): throw error if first level item of a sidebar is not category (@endiliey)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-theme-classic +
      +
    • #1991 fix(v2): remove accessible anchors via keyboard (@lex111)
    • +
    • #1987 refactor(v2): replace h1 tag with h2 in blog list pages (@lex111)
    • +
    • #1981 fix(v2): use tag time for showing last update of doc item (@lex111)
    • +
    • #1977 feat(v2): add aria-label to read more links for a11y (@lex111)
    • +
    • #1964 fix(v2): use tag time for showing post item date (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #1994 fix(v2): throw error if first level item of a sidebar is not category (@endiliey)
    • +
    +
  • +
  • Other +
      +
    • #1986 fix(v2): remove obsolete iframe attributes (@lex111)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-plugin-content-blog + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other +
      +
    • #2002 fix(v2): fix browser window menu icon on smaller screen (@lex111)
    • +
    • #1986 fix(v2): remove obsolete iframe attributes (@lex111)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus +
      +
    • #1979 perf(v2): reduce main bundle size by using es5 if possible (@endiliey)
    • +
    +
  • +
+

Committers: 6

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.35.html.html b/changelog/2.0.0-alpha.35.html.html new file mode 100644 index 0000000000..19a5e5d28c --- /dev/null +++ b/changelog/2.0.0-alpha.35.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.36.html b/changelog/2.0.0-alpha.36.html new file mode 100644 index 0000000000..9ec527d9f7 --- /dev/null +++ b/changelog/2.0.0-alpha.36.html @@ -0,0 +1,125 @@ + + + + + +2.0.0-alpha.36 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.36

Endi
Alexey Pyltsyn
Yangshun Tay

💥 Breaking Change

+
    +
  • docusaurus-init, docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #1989 misc(v2): change blog front matter to snake_case (@yangshun)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #2007 feat(v2): only create one css file to avoid code-split css loading problem (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2005 fix(v2): adjust first-level heading offset (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2013 refactor(v2): split out dark mode toggle so it is easily swizzle-able (@endiliey)
    • +
    • #2017 feat(v2): style right sidebar scrollbar when overflow (@endiliey)
    • +
    • #2003 refactor(v2): improve semantic markup of blog (@lex111)
    • +
    +
  • +
+

🏠 Internal

+
    +
  • docusaurus +
      +
    • #2024 test(v2): babel exclude transpilation logic to prevent regression (@endiliey)
    • +
    • #2014 feat(v2): add meta generator docusaurus (@endiliey)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-ideal-image + +
  • +
  • Other + +
  • +
+

📝 Documentation

+ +

Committers: 3

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.36.html.html b/changelog/2.0.0-alpha.36.html.html new file mode 100644 index 0000000000..d02b46e3a9 --- /dev/null +++ b/changelog/2.0.0-alpha.36.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.37.html b/changelog/2.0.0-alpha.37.html new file mode 100644 index 0000000000..9b98d74fd7 --- /dev/null +++ b/changelog/2.0.0-alpha.37.html @@ -0,0 +1,199 @@ + + + + + +2.0.0-alpha.37 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.37

Binary Logic
Endi
Dongwoo Gim
Alexey Pyltsyn
Wei Gao

💥 Breaking Change

+
    +
  • docusaurus-init, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus +
      +
    • #2045 breaking(v2): minimum required nodejs version 8.9-> 8.10 so we can use es2017 (@endiliey)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #2069 feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh (@endiliey)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #2000 feat(v2): add meta RSS/Atom feed links to head (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-types, docusaurus +
      +
    • #2057 feat(v2): injectHtmlTags API to inject head and/or body html tags (@endiliey)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-docs, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus +
      +
    • #2032 feat(v2): allow non sidebar category to be first item of sidebar (@endiliey)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-types, docusaurus + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #2069 feat(v2): support prefers-color-scheme & fix dark mode FOUC on refresh (@endiliey)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #2067 fix(v2): toc should not be broken for heading with html inline code (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2064 fix(v2): markdown reference to file should not be page not found (@endiliey)
    • +
    • #2061 fix(v2): fix docs sidebar highlighting if link is partially matched (@endiliey)
    • +
    +
  • +
  • docusaurus +
      +
    • #2042 fix(v2): remove css order warning if css imports are not sorted (@endiliey)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus +
      +
    • #2060 fix(v2): clean generated manifest from previous build so we dont use the wrong one (@endiliey)
    • +
    • #2033 refactor(v2): move unused generated files out from build folder (@endiliey)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus + +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-docs, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag +
      +
    • #2070 perf(v2): more performant gtag and analytics plugin (@endiliey)
    • +
    +
  • +
  • docusaurus +
      +
    • #2046 perf(v2): use webpack future version of asset emitting logic to free memory (@endiliey)
    • +
    • #2039 perf(v2): replace unnecessary json stringify(string) with inline string (@endiliey)
    • +
    • #2035 perf(v2): use @babel/runtime plugin to reduce codesize (@endiliey)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2054 perf(v2): unblock metadata processing when possible (@endiliey)
    • +
    +
  • +
+

Committers: 5

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.37.html.html b/changelog/2.0.0-alpha.37.html.html new file mode 100644 index 0000000000..793fc76015 --- /dev/null +++ b/changelog/2.0.0-alpha.37.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.38.html b/changelog/2.0.0-alpha.38.html new file mode 100644 index 0000000000..220dac3145 --- /dev/null +++ b/changelog/2.0.0-alpha.38.html @@ -0,0 +1,125 @@ + + + + + +2.0.0-alpha.38 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.38

Endi
KYY
kaichu
Shivangna Kaistha

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils +
      +
    • #2088 perf(v2): smaller bundlesize by embedding metadata to content (@endiliey)
    • +
    +
  • +
+

If you have swizzled any Docs/Blog component that depends on metadata, you'll have to update. If you haven't, no action is needed.

+

For example, if you've swizzled @theme/DocItem. You'll have to update

+
- const {metadata, content: DocContent} = props;
+ const {content: DocContent} = props;
+ const {metadata} = DocContent;
+

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #2074 fix(v2): fix plugin-ideal-image breaking website (exports not defined) (@endiliey)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-mdx-loader + +
  • +
+

🏠 Internal

+
    +
  • docusaurus-1.x + +
  • +
  • docusaurus +
      +
    • #2081 refactor(v2): move scripts/stylesheets injection to server side (@endiliey)
    • +
    • #2080 refactor(v2): minor code refactoring on component creator (@endiliey)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-utils +
      +
    • #2089 perf(v2): improve dev build time by not overwriting file if possible (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #2079 perf(v2): algolia search result no longer cause full page refresh (@endiliey)
    • +
    • #2076 perf(v2): load algolia JS only when user interacts with search (@endiliey)
    • +
    +
  • +
+

Committers: 4

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.38.html.html b/changelog/2.0.0-alpha.38.html.html new file mode 100644 index 0000000000..4dd909756b --- /dev/null +++ b/changelog/2.0.0-alpha.38.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.39.html b/changelog/2.0.0-alpha.39.html new file mode 100644 index 0000000000..142411acd4 --- /dev/null +++ b/changelog/2.0.0-alpha.39.html @@ -0,0 +1,87 @@ + + + + + +2.0.0-alpha.39 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.39

Endi

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #2095 fix(v2): metadata error if markdown does not have ending line (@endiliey)
    • +
    +
  • +
+

🏠 Internal

+
    +
  • Other +
      +
    • #2100 chore(CI): docusaurus build on Windows with GitHub actions (@endiliey)
    • +
    +
  • +
  • docusaurus + +
  • +
+

Committers: 1

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.39.html.html b/changelog/2.0.0-alpha.39.html.html new file mode 100644 index 0000000000..253cee70f3 --- /dev/null +++ b/changelog/2.0.0-alpha.39.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.40.html b/changelog/2.0.0-alpha.40.html new file mode 100644 index 0000000000..1892858a56 --- /dev/null +++ b/changelog/2.0.0-alpha.40.html @@ -0,0 +1,163 @@ + + + + + +2.0.0-alpha.40 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.40

Endi
Janko Marohnić
Alexey Pyltsyn
Nick McCurdy
t11s
Yangshun Tay

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #2117 feat(v2): auto switch theme depending on the system theme (@lex111)
    • +
    • #2055 feat(v2): hide navbar on scroll (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #2145 fix(v2): remove style-loader, use minicssextract in both dev & prod (@endiliey)
    • +
    • #2122 fix(v2): dont collapse whitespace in minified html (@endiliey)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #2105 fix(v2): move metadata export after compiling MDX to avoid weird MDX parsing error. (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2113 fix(v2): set stored theme only if it exists (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2129 fix(v2): disable scroll while mobile menu open (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #2127 refactor(v2): toggle data-theme with vanilla js instead of react helmet (@endiliey)
    • +
    +
  • +
  • docusaurus-theme-search-algolia, docusaurus +
      +
    • #2125 feat(v2): lazy load algolia css so its not render blocking (@endiliey)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • Other + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2114 fix(v2): add syntax highlight to generated colors (@lex111)
    • +
    +
  • +
+

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-init + +
  • +
  • docusaurus + +
  • +
  • docusaurus-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-theme-live-codeblock, docusaurus + +
  • +
+

:running: Performance

+ +

Committers: 6

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.40.html.html b/changelog/2.0.0-alpha.40.html.html new file mode 100644 index 0000000000..acb46c465d --- /dev/null +++ b/changelog/2.0.0-alpha.40.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.41.html b/changelog/2.0.0-alpha.41.html new file mode 100644 index 0000000000..835731959e --- /dev/null +++ b/changelog/2.0.0-alpha.41.html @@ -0,0 +1,189 @@ + + + + + +2.0.0-alpha.41 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.41

awalias
Elie Dutheil
Elvis Wolcott
Evan Rubinton
Gal Havivi
Hendrik Bulens
Ashley Jeffs
Joshua Williams
Joel Marcey
Jonathan Delgado

🚀 New Feature

+
    +
  • docusaurus-init, docusaurus-preset-classic, docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #2261 feat(v2): allow to specify different logo for dark mode (@lex111)
    • +
    • #2253 feat(v2): allow specify custom link for logo (@lex111)
    • +
    • #2255 feat(v2): add site title to meta title (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-utils, docusaurus + +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-classic +
      +
    • #2235 fix(v2): show doc sidebar on pages with case-sensitive paths (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock + +
  • +
  • docusaurus-theme-classic +
      +
    • #2259 fix(v2): use site title if enabled blog-only mode (@lex111)
    • +
    • #2248 fix(v2): adjust correct behavior of navbar when active anchor (@lex111)
    • +
    • #2235 fix(v2): show doc sidebar on pages with case-sensitive paths (@lex111)
    • +
    • #2162 fix(v2): unify anchor behavior (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #2262 fix(v2): remove focus on search input when hovering over it (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #2240 fix(v2): hide read more button on non-truncated posts (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-mdx-loader + +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #2227 fix(v2): render correct theme for live code blocks on SSR (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2254 refactor(v2): avoid to use raw theme values (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+ +

Committers: 18

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.41.html.html b/changelog/2.0.0-alpha.41.html.html new file mode 100644 index 0000000000..a5530d0b4d --- /dev/null +++ b/changelog/2.0.0-alpha.41.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.43.html b/changelog/2.0.0-alpha.43.html new file mode 100644 index 0000000000..6c5efbc19d --- /dev/null +++ b/changelog/2.0.0-alpha.43.html @@ -0,0 +1,72 @@ + + + + + +2.0.0-alpha.43 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.43

Alexey Pyltsyn
Yangshun Tay

HOTFIX for 2.0.0-alpha.41.

+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic + +
  • +
+

Committers: 2

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.43.html.html b/changelog/2.0.0-alpha.43.html.html new file mode 100644 index 0000000000..e25ce70a79 --- /dev/null +++ b/changelog/2.0.0-alpha.43.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.44.html b/changelog/2.0.0-alpha.44.html new file mode 100644 index 0000000000..e70f86e4fc --- /dev/null +++ b/changelog/2.0.0-alpha.44.html @@ -0,0 +1,194 @@ + + + + + +2.0.0-alpha.44 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.44

Amila Welihinda
Paulus Schoutsen
Robert
Hassan Farid
jartuso
JavaScript Joe
Alexey Pyltsyn
Mohamed Abdel Nasser
Noah Silvera
Linus Långberg

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #2250 feat(v2): add support specify new languages for Prism (@lex111)
    • +
    • #2344 feat(v2): allow specifying custom target for logo link (@lex111)
    • +
    • #2327 feat(v2): add ability to use HTML in footer copyright (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #2335 feat(v2): add draft feature to blog posts (@lex111)
    • +
    +
  • +
  • docusaurus-init, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #2345 fix(v2): force terminate building if client bundle failed (@lex111)
    • +
    • #2310 fix(v2): add @babel/preset-typescript to babel-loader (@deniaz)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2371 fix(v2): remove line break from end of code blocks (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #2324 fix(v2): properly set dark mode logo on build-time prerendering (@lex111)
    • +
    • #2325 fix(v2): switch a toggle when system theme changed (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-utils +
      +
    • #2334 fix(v2): make proper path to pages in TS (@lex111)
    • +
    +
  • +
  • Other + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-search-algolia +
      +
    • #2376 refactor(v2): clean up and improve Algolia styles (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #2372 chore(v2): upgrade Infima and remark-admonitions (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2367 refactor(v2): increase CSS specificity on application container (@lex111)
    • +
    +
  • +
  • docusaurus-init, stylelint-copyright +
      +
    • #2363 fix(v2): improve stylelint copyright header rule (@yangshun)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #2342 chore(v2): mark tagline field as optional (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other +
      +
    • #2369 misc: mention about v2 in README file (@lex111)
    • +
    • #2368 misc: add note about edits in versioned docs (@lex111)
    • +
    • #2333 docs: update use of npm/yarn in contributing.md (@jsjoeio)
    • +
    • #2328 docs(v2): remove unwanted black line from DocSearch showcase image (@s-pace)
    • +
    • #2319 docs(v2): showcase user Algolia (@scottilee)
    • +
    +
  • +
  • docusaurus-init + +
  • +
+

Committers: 16

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.44.html.html b/changelog/2.0.0-alpha.44.html.html new file mode 100644 index 0000000000..506ce1dc5e --- /dev/null +++ b/changelog/2.0.0-alpha.44.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.48.html b/changelog/2.0.0-alpha.48.html new file mode 100644 index 0000000000..c4e6d96a62 --- /dev/null +++ b/changelog/2.0.0-alpha.48.html @@ -0,0 +1,80 @@ + + + + + +2.0.0-alpha.48 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.48

Alexey Pyltsyn

HOTFIX for 2.0.0-alpha.44.

+

🐛 Bug Fix

+
    +
  • Other +
      +
    • #2383 fix(v2): specify proper version for stylelint-copyright (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2382 fix(v2): add missing preset-typescript dependency (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2386 fix(v2): add missing prismjs dependency and Noop component (@lex111)
    • +
    +
  • +
+

Committers: 1

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.48.html.html b/changelog/2.0.0-alpha.48.html.html new file mode 100644 index 0000000000..ed8c931885 --- /dev/null +++ b/changelog/2.0.0-alpha.48.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.49.html b/changelog/2.0.0-alpha.49.html new file mode 100644 index 0000000000..60f2ec6bf0 --- /dev/null +++ b/changelog/2.0.0-alpha.49.html @@ -0,0 +1,241 @@ + + + + + +2.0.0-alpha.49 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.49

38elements
Rémi Doreau
bravo-kernel
Elvis Wolcott
Favour Kelvin
Fanny
GermaVinsmoke
iamkun
Jefferson Licet
KohheePeace

🚀 New Feature

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus +
      +
    • #2323 feat(v2): add a way to exclude components from build-time prerendering (@lex111)
    • +
    • #2469 feat(v2): add TypeScript support for theme components (@SamChou19815)
    • +
    • #2455 feat(v2): add @theme-original alias to give access to pre-swizzled components (@yangshun)
    • +
    • #2438 feat(v2): add version to page's generated meta tags (@lex111)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #2474 feat(v2): add ability to create unminimized bundles (@lex111)
    • +
    • #2417 feat(v2): allow custom output directory for build (@ZachJW34)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock + +
  • +
  • docusaurus-plugin-content-docs, docusaurus +
      +
    • #2444 feat(v2): allow nested sidebar category shorthand syntax (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #2483 fix(v2): do not render sidebar logo if used sticky navbar (@lex111)
    • +
    • #2475 fix(v2): make correct Open Graph title for doc page (@lex111)
    • +
    • #2436 fix(v2): update twitter:card to summary_large_image (@lex111)
    • +
    • #2434 fix(v2): add support dark logo for sidebar logo (@lex111)
    • +
    • #2420 fix(v2): fix external URL for og:image tag (@38elements)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #2480 fix(v2): various improvements for accessibility (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2476 fix(v2): improve code block scroll accessibility (@lex111)
    • +
    • #2442 fix(v2): various improvements for accessibility (@lex111)
    • +
    +
  • +
  • docusaurus-preset-classic, docusaurus-theme-classic +
      +
    • #2477 chore(v2): upgrade remark-admonitions for a11y fixes (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2462 fix(v2): do not force terminate building when bundle analyzer is on (@lex111)
    • +
    • #2393 fix(v2): normalize location for route matching (@rlamana)
    • +
    • #2443 fix(v2): always exit after successful build (@mohrash92)
    • +
    • #2437 fix(v2): do not force terminate building if client bundle failed in development mode (@lex111)
    • +
    • #2424 fix(v2): make correct internal link check (@lex111)
    • +
    +
  • +
  • docusaurus-preset-classic + +
  • +
  • docusaurus-mdx-loader + +
  • +
  • docusaurus-utils +
      +
    • #2405 fix(v2): properly dedupe forward slashes in the entire URL path (@rlamana)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2485 refactor(v2): remove unnecessary X-UA-Compatible meta tag (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #2460 refactor(v2): use single method package instead of whole Lodash package in blog plugin (@Simek)
    • +
    +
  • +
  • Other +
      +
    • #2428 polish(v2): use npm-to-yarn for the npm2yarn remark plugin (@nebrelbug)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+ +

Committers: 24

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.49.html.html b/changelog/2.0.0-alpha.49.html.html new file mode 100644 index 0000000000..d3d4989c8e --- /dev/null +++ b/changelog/2.0.0-alpha.49.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.50.html b/changelog/2.0.0-alpha.50.html new file mode 100644 index 0000000000..c362ab4f97 --- /dev/null +++ b/changelog/2.0.0-alpha.50.html @@ -0,0 +1,122 @@ + + + + + +2.0.0-alpha.50 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.50

Can Gencer
Richard Chan
Alexey Pyltsyn
Sam Zhou
Yangshun Tay

HOTFIX for 2.0.0-alpha.49.

+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2509 fix(v2): synchronize code block components changes (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus +
      +
    • #2496 fix(v2): do not force terminate building when running deploy command (@lex111)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #2497 fix(v2): unbreak blog-only mode routing by deplicating starting forward slashes (@SamChou19815)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2505 fix(v2): tweak colors for announcement bar (@yangshun)
    • +
    • #2504 refactor(v2): improve announcement bar (@lex111)
    • +
    • #2495 refactor(v2): update HTML markup of pagination for better a11y (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock + +
  • +
  • docusaurus-plugin-content-docs, docusaurus +
      +
    • #2490 fix(v2): use lodash instead of array-map-polyfill (@lex111)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • docusaurus-theme-classic + +
  • +
+

🏠 Internal

+
    +
  • #2486 misc: add instructions about test release (@lex111)
  • +
+

Committers: 5

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.50.html.html b/changelog/2.0.0-alpha.50.html.html new file mode 100644 index 0000000000..b22a80d956 --- /dev/null +++ b/changelog/2.0.0-alpha.50.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.51.html b/changelog/2.0.0-alpha.51.html new file mode 100644 index 0000000000..8523bc50fb --- /dev/null +++ b/changelog/2.0.0-alpha.51.html @@ -0,0 +1,274 @@ + + + + + +2.0.0-alpha.51 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.51

Anayo Oleru
Fanny
Jay Lees
José Renan
JavaScript Joe
Kamil Kisiela
Kristóf Poduszló
Alexey Pyltsyn
Noah Silvera
Reece Dunham

💥 Breaking Change

+
    +
  • infima +
      +
    • The following infima variables have been renamed for consistency: +
        +
      • --ifm-font-base-color--ifm-font-color-base
      • +
      • --ifm-font-base-color-inverse--ifm-font-color-base-inverse
      • +
      • --ifm-font-color-secondary--ifm-font-color-secondary
      • +
      +
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #2660 feat(v2): add ability to specify CSS class for navbar item (@lex111)
    • +
    • #2597 feat(v2): add ability set dark mode by default (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2665 feat(v2): add fallback to BrowserOnly component (@lex111)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • docusaurus-init +
      +
    • #2541 feat(v2): add showReadingTime and editUrl to the templates (@fanny)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #2672 fix(v2): add a11y support for dropdown (@lex111)
    • +
    • #2649 fix(v2): hide sidebar after click on child item (@lex111)
    • +
    • #2631 fix(v2): hide doc sidebar on mobiles (@lex111)
    • +
    • #2626 fix(v2): make border right of doc sidebar equals doc page (@lex111)
    • +
    • #2625 fix(v2): disable tab focus on collapsed doc sidebar items (@lex111)
    • +
    • #2602 fix(v2): inherit color for announcement bar close icon (@lex111)
    • +
    • #2582 fix(v2): remove horizontal scroll on docs page (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2666 chore(v2): upgrade prism-react-renderer to latest version (@lex111)
    • +
    • #2533 fix(v2): add rounded corners in code blocks properly (@lex111)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-plugin-content-docs, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-preset-classic, docusaurus-theme-classic +
      +
    • #2642 fix(v2): use remark-admonitions separately in each plugin instead of in preset only (@lex111)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #2380 fix(v2): ignore import declarations in excerpt (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #2616 fix(v2): don't include 404 page in sitemaps (@RDIL)
    • +
    • #2530 fix(v2): Use writeFileSync to write generated sitemap.xml to avoid early termination (@SamChou19815)
    • +
    +
  • +
  • docusaurus +
      +
    • #2558 fix(v2): properly link top-level github pages sites in deploy command (@RDIL)
    • +
    • #2580 fix(v2): do not process anchor links by router (@lex111)
    • +
    • #2579 fix(v2): treat mailto and tel links properly (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #2540 fix(v2): use synchronous write for generate blog feeds (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2656 refactor(v2): lose focus of active sidebar item after click on it (@lex111)
    • +
    • #2627 refactor(v2): extract scroll position detection into separate hook (@lex111)
    • +
    • #2595 refactor(v2): make margin top on blog pages as on other pages (@lex111)
    • +
    • #2588 refactor(v2): remove redundant container on docs page (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #2585 refactor(v2): use nav link component only where needed (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2556 refactor(v2): enhance CLI experience (@RDIL)
    • +
    • #2529 refactor(v2): replace few Lodash methods with native counterparts (@Simek)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2519 chore(v2): use single method Lodash packages in docs plugin (@Simek)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-types, docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-1.x, lqip-loader +
      +
    • #2563 chore(v2): fix lint, tweak lqip-loader utils comment (@Simek)
    • +
    +
  • +
  • lqip-loader +
      +
    • #2561 chore(v2): add lqip-loader tests, clarify loader code, improve README (@Simek)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image, lqip-loader +
      +
    • #2544 refactor(v2): import lqip-loader to monorepo, fix build on Node 13, fix lint-staged (@Simek)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, stylelint-copyright + +
  • +
  • docusaurus-utils +
      +
    • #2536 refactor(v2): replace Lodash with single methods packages in utils (@Simek)
    • +
    +
  • +
  • docusaurus +
      +
    • #2535 refactor(v2): replace Lodash with single methods packages in core (@Simek)
    • +
    +
  • +
+

Committers: 18

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.51.html.html b/changelog/2.0.0-alpha.51.html.html new file mode 100644 index 0000000000..8bb30f97f4 --- /dev/null +++ b/changelog/2.0.0-alpha.51.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.53.html b/changelog/2.0.0-alpha.53.html new file mode 100644 index 0000000000..7a8079a0fd --- /dev/null +++ b/changelog/2.0.0-alpha.53.html @@ -0,0 +1,70 @@ + + + + + +2.0.0-alpha.53 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.53.html.html b/changelog/2.0.0-alpha.53.html.html new file mode 100644 index 0000000000..73c2ee2852 --- /dev/null +++ b/changelog/2.0.0-alpha.53.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.54.html b/changelog/2.0.0-alpha.54.html new file mode 100644 index 0000000000..9e996a4981 --- /dev/null +++ b/changelog/2.0.0-alpha.54.html @@ -0,0 +1,81 @@ + + + + + +2.0.0-alpha.54 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.54

JavaScript Joe
Alexey Pyltsyn
Sam Zhou

HOTFIX for 2.0.0-alpha.53.

+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #2688 fix(v2): add default value for options in theme classic (@lex111)
    • +
    +
  • +
  • docusaurus-module-type-aliases +
      +
    • #2687 fix(v2): Add all webpack module aliases to type declaration file (@SamChou19815)
    • +
    +
  • +
+

📝 Documentation

+ +

Committers: 3

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.54.html.html b/changelog/2.0.0-alpha.54.html.html new file mode 100644 index 0000000000..0f6c2cce70 --- /dev/null +++ b/changelog/2.0.0-alpha.54.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.55.html b/changelog/2.0.0-alpha.55.html new file mode 100644 index 0000000000..32087046cd --- /dev/null +++ b/changelog/2.0.0-alpha.55.html @@ -0,0 +1,203 @@ + + + + + +2.0.0-alpha.55 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.55

Artem Kovalov
Fanny
Rajiv Singh
Jimmy
Julien Deniau
Jonny Nabors
Alexey Pyltsyn
Marco Moretti
Ben Gubler
Sébastien Lorber

💥 Breaking Change

+
    +
  • +

    infima

    +
      +
    • +

      The following Infima classes have been renamed for consistency:

      +
        +
      • page-itempagination__item
      • +
      • pagination-nav__link--labelpagination-nav__label
      • +
      • pagination-nav__link--sublabelpagination-nav__sublabel
      • +
      • tab-itemtabs__item
      • +
      • tab-item--activetabs__item--active
      • +
      +

      If you have swizzled components, you need to replace these class names.

      +
    • +
    +
  • +
  • +

    docusaurus

    + +
  • +
+

🚀 New Feature

+
    +
  • docusaurus + +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #2701 fix(v2): remove Markdown syntax from excerpt (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2765 fix(v2): remove invalid attr from mobile nav links (@lex111)
    • +
    • #2760 fix(v2): move anchor link to right of heading (@lex111)
    • +
    • #2758 fix(v2): remove extra top margin of tab item (@lex111)
    • +
    • #2759 fix(v2): restore hiding of docs toc (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #2762 fix(v2): avoid duplication search input in navbar (@lex111)
    • +
    +
  • +
  • lqip-loader +
      +
    • #2693 fix(v2): add support ES Module to lqip-loader (@ykzts)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #2751 fix(v2): fix index page features.length when 0 (@jdeniau)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2773 chore(v2): upgrade Infima to 0.2.0-alpha.11 (@lex111)
    • +
    • #2766 refactor(v2): remove extra active CSS class for menu item links (@lex111)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #2767 refactor(v2): add support for dark mode to live code blocks (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic +
      +
    • #2729 chore(v2): upgrade Infima to 0.2.0-alpha.10 (@lex111)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #2696 refactor(v2): make semicolon optional in imports for excerpt (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #2464 refactor(v2): add @theme-init alias to give access to initial components (@lex111)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus +
      +
    • #2684 refactor(v2): replace EJS with Eta for SSR generation (@nebrelbug)
    • +
    +
  • +
+

Committers: 13

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.55.html.html b/changelog/2.0.0-alpha.55.html.html new file mode 100644 index 0000000000..e93212eb69 --- /dev/null +++ b/changelog/2.0.0-alpha.55.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.56.html b/changelog/2.0.0-alpha.56.html new file mode 100644 index 0000000000..27e677b98e --- /dev/null +++ b/changelog/2.0.0-alpha.56.html @@ -0,0 +1,160 @@ + + + + + +2.0.0-alpha.56 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.56

John Knox
James McShane
Kasper Bøgebjerg Pedersen
Alexey Pyltsyn
Muhammad Ali
Piotr Baran
Sylvain Pace
Sam Zhou

💥 Breaking Change

+
    +
  • If you refer to modules (plugins) in your config file in a string form, you will need to replace them with require.resolve calls, for example:
  • +
+
- plugins: ['@docusaurus/plugin-google-analytics']
+ plugins: [require.resolve('@docusaurus/plugin-google-analytics')]
+
    +
  • docusaurus-theme-classic +
      +
    • #2818 feat(v2): automatically add base url to logo link (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #2791 refactor(v2): show search icon only on mobiles (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-types, docusaurus +
      +
    • #2770 feat(v2): allow deploy without building website (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2818 feat(v2): automatically add base url to logo link (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #2645 fix(v2): enable scrolling for sidebar menu only (@lex111)
    • +
    • #2800 fix(v2): make proper h1 font size on mobiles (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2788 fix(v2): use require.resolve for all webpack presets and plugins (@SamChou19815)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2785 fix(v2): do not show sidebar on reserved docs home page (@lex111)
    • +
    • #2777 fix(v2): check for docs homepage correctly (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #2820 chore(v2): upgrade Infima to 0.2.0-alpha.12 (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #2814 refactor(v2): align search icon to center on mobiles (@lex111)
    • +
    • #2799 refactor(v2): increase search input on medium screens (@lex111)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #2802 misc: minor improvements for init templates (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #2791 refactor(v2): show search icon only on mobiles (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #2783 refactor(v2): make external links more secure (@lex111)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #2809 docs(v2): add mention on DocSearch when you run the crawler on your own (@s-pace)
  • +
+

🏠 Internal

+
    +
  • #2778 fix(v2): do not highlight root docs path in navbar (@lex111)
  • +
+

Committers: 8

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.56.html.html b/changelog/2.0.0-alpha.56.html.html new file mode 100644 index 0000000000..142fb07caf --- /dev/null +++ b/changelog/2.0.0-alpha.56.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.57.html b/changelog/2.0.0-alpha.57.html new file mode 100644 index 0000000000..0c852af410 --- /dev/null +++ b/changelog/2.0.0-alpha.57.html @@ -0,0 +1,58 @@ + + + + + +2.0.0-alpha.57 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.57.html.html b/changelog/2.0.0-alpha.57.html.html new file mode 100644 index 0000000000..b679fa6eda --- /dev/null +++ b/changelog/2.0.0-alpha.57.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.58.html b/changelog/2.0.0-alpha.58.html new file mode 100644 index 0000000000..1344855461 --- /dev/null +++ b/changelog/2.0.0-alpha.58.html @@ -0,0 +1,296 @@ + + + + + +2.0.0-alpha.58 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.58

hackerman
Anshul Goyal
belokonm
Drew Alexander
Fanny
Guillaume Jacquart
Joel Marcey
JavaScript Joe
Alexey Pyltsyn
moonrailgun

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #2916 feat(v2): add a banner that links to latest version of documentation (@teikjun)
    • +
    • #2682 feat(v2): expanded sidebar categories by default (@jsjoeio)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-preset-classic + +
  • +
  • docusaurus-init, docusaurus + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils +
      +
    • #2793 feat(v2): docusaurus-plugin-client-redirects (@slorber)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #2826 feat(v2): allow adding components to react-live scope (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #2856 feat(v2): allow specifying meta image for blog posts (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2841 feat(v2): Allow swizzling prism-include-languages in theme-classic (@SamChou19815)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-init, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2861 fix(v2): do not create route for document that serve as docs home page (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #2682 feat(v2): expanded sidebar categories by default (@jsjoeio)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic +
      +
    • #2932 fix(v2): Add hooks to detect window resize, toggle off sidebar and navbar in desktop (@guillaumejacquart)
    • +
    • #2909 fix(v2): adjust anchor offset when routes switched (@lex111)
    • +
    • #2896 fix(v2): set correct canonical url for docs home page (@lex111)
    • +
    • #2893 fix(v2): Do not automatically change tab when a non-existing option is selected (@SamChou19815)
    • +
    • #2888 fix(v2): restore styles for menu scrollbar (@lex111)
    • +
    • #2857 fix(v2): treat inline code in raw HTML as native element (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-preset-classic +
      +
    • #2944 fix(v2): Declare @docusaurus-plugin-debug as dependency of preset classic (@SamChou19815)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #2902 feat(v2): add nojekyll file to static folder for all templates (@teikjun)
    • +
    +
  • +
  • docusaurus-theme-bootstrap + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2861 fix(v2): do not create route for document that serve as docs home page (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #2867 fix(v2): fix FOUC in doc sidebar and various improvements (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #2838 fix(v2): use base url to navigate to search page (@tetunori)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #2855 fix(v2): strip images and footnotes for excerpt correctly (@lex111)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #2835 fix(v2): set proper font for live editor (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils, docusaurus +
      +
    • #2884 polish(v2): improve Docusaurus 1 to 2 migration developer experience (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #2870 refactor(v2): combine nested theme providers into one (@lex111)
    • +
    • #2880 fix(v2): render as regular text uncollapsible categories (@lex111)
    • +
    • #2864 refactor(v2): add aria role for doc sidebar (@lex111)
    • +
    • #2859 refactor(v2): add aria label to paginators (@lex111)
    • +
    • #2858 refactor(v2): add missing main landmark for needed pages (@lex111)
    • +
    +
  • +
  • Other + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs + +
  • +
  • docusaurus-init, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-utils, docusaurus +
      +
    • #2922 misc(v2): better dx: yarn clear, yarn watch, yarn serve (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-theme-bootstrap +
      +
    • #2931 chore(v2): remove unused hooks from bootstrap theme (@fanny)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-plugin-content-docs + +
  • +
  • docusaurus-theme-classic +
      +
    • #2858 refactor(v2): add missing main landmark for needed pages (@lex111)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-sitemap + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #2900 chore(v2): replace Clipboard with copy-text-to-clipboard (@lex111)
    • +
    +
  • +
  • docusaurus-init, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

Committers: 18

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.58.html.html b/changelog/2.0.0-alpha.58.html.html new file mode 100644 index 0000000000..2b8b1065fb --- /dev/null +++ b/changelog/2.0.0-alpha.58.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.59.html b/changelog/2.0.0-alpha.59.html new file mode 100644 index 0000000000..663b124d70 --- /dev/null +++ b/changelog/2.0.0-alpha.59.html @@ -0,0 +1,374 @@ + + + + + +2.0.0-alpha.59 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.59

Mahfoudh Arous
Eric Dobbertin
Amirul Ahmad
Anshul Goyal
Ayan Banerjee
Jeremy Asuncion
Daniel Hochman
Deepak Giri
ehsan jso
Arsalan Khattak

🚀 New Feature

+
    +
  • docusaurus-migrate, docusaurus-plugin-client-redirects + +
  • +
  • docusaurus-init +
      +
    • #3105 feat(v2): add docusaurus script for npm users (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-init, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #3084 feat(v2): absolute slugs and slug resolution system (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #3069 feat(v2): support for adding relative images and handling broken image links (@anshulrgoyal)
    • +
    +
  • +
  • docusaurus-init, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #2971 feat(v2): global data + useGlobalData + docs versions dropdown (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-debug, docusaurus-types, docusaurus +
      +
    • #3058 feat(v2): useDocusaurusContext().siteMetadata (@slorber)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-debug, docusaurus +
      +
    • #3050 feat(v2): Collect plugin versions to allow them to be inspected in debug plugin (@SamChou19815)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3038 feat(v2): Support keywords meta in blog posts (@dpkg)
    • +
    • #2974 feat(v2): Error when hooks depends on context is used outside of Layout (@SamChou19815)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus + +
  • +
  • docusaurus-plugin-ideal-image, docusaurus-types, docusaurus +
      +
    • #2994 feat(v2): configureWebpack merge strategy + use file-loader for common asset types (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #2989 feat(v2): add disableVersioning config to docs plugin (@slorber)
    • +
    • #2877 feat(v2): allow skipping build docs for next version (@lex111)
    • +
    +
  • +
  • docusaurus-1.x +
      +
    • #2955 feat(v1): add deletedDocs config to fix unwanted versioning fallback (@aldeed)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-types, docusaurus +
      +
    • #2943 feat(v2): option and config validation life cycle method for official plugins (@anshulrgoyal)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-init, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #2971 feat(v2): global data + useGlobalData + docs versions dropdown (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #3107 fix(v2): broken links detector: ignore existing folders (@slorber)
    • +
    • #3112 fix(v2): baseUrl is wrongly appended to anchor links (@slorber)
    • +
    • #3063 fix(v2): classify link hrefs with protocol identifier as internal (@svtfrida)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3106 fix(v2): dropdown navbar item: validation too strict (@slorber)
    • +
    • #3029 fix(v2): change description for blog post paginator (@teikjun)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
  • docusaurus-plugin-content-pages + +
  • +
  • docusaurus-init + +
  • +
  • Other + +
  • +
  • docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils, docusaurus +
      +
    • #3001 fix(v2): refactor routes.ts + add route hash for chunkNames key (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils, docusaurus +
      +
    • #3010 fix(v2): make client-redirect-plugin not baseUrl sensitive (@teikjun)
    • +
    +
  • +
  • docusaurus-1.x +
      +
    • #2993 fix(relative path): last update date and by isn’t generated if localh… (@amirulahmad)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #2969 fix: fromExtensions and toExtensions translation when used with baseUrl (@jknoxville)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-mdx-loader +
      +
    • #3087 refactor(v2): async md image transformer + pathname protocol as an escape hatch (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-theme-live-codeblock, docusaurus-types +
      +
    • #2970 feat(v2): add option validation for remaining official plugins (@teikjun)
    • +
    +
  • +
  • docusaurus + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-migrate +
      +
    • #3113 chore(v2): ability to test the migration cli easily (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-mdx-loader +
      +
    • #3087 refactor(v2): async md image transformer + pathname protocol as an escape hatch (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus + +
  • +
  • docusaurus-init, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-utils, docusaurus +
      +
    • #2998 chore(v2): refactor yarn tsc to yarn build + add theme-classic watch mode (@slorber)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils, docusaurus +
      +
    • #3001 fix(v2): refactor routes.ts + add route hash for chunkNames key (@slorber)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-theme-live-codeblock, docusaurus-types +
      +
    • #2970 feat(v2): add option validation for remaining official plugins (@teikjun)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-client-redirects + +
  • +
  • docusaurus-init, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-sitemap, docusaurus-utils, docusaurus, lqip-loader + +
  • +
+

Committers: 25

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.59.html.html b/changelog/2.0.0-alpha.59.html.html new file mode 100644 index 0000000000..292fda450e --- /dev/null +++ b/changelog/2.0.0-alpha.59.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.60.html b/changelog/2.0.0-alpha.60.html new file mode 100644 index 0000000000..4fc71b5cea --- /dev/null +++ b/changelog/2.0.0-alpha.60.html @@ -0,0 +1,135 @@ + + + + + +2.0.0-alpha.60 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.60

Hob Adams
Bartosz Kaszubowski
Sébastien Lorber
Teik Jun

🚀 New Feature

+
    +
  • docusaurus + +
  • +
  • docusaurus-1.x +
      +
    • #3124 feat(v1): add 'slugPreprocessor' config option to allow users customize the hash links (@Simek)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #3133 feat(v2): add themeConfig validation to algolia theme (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus +
      +
    • #3142 fix(v2): config validation fixes + add tests for config validation (@teikjun)
    • +
    +
  • +
  • docusaurus +
      +
    • #3149 fix(v2): BrowserOnly should not return undefined (@slorber)
    • +
    • #3143 fix(v2): absolute Links should be automatically prefixed by baseurl (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-types, docusaurus +
      +
    • #3141 fix(v2): remove buggy routesLoaded + deprecate routesLoaded lifecycle (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3140 fix(v2): navbar item links should allow unknown attributes (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #3138 fix(v2): add accessible label for Algolia search button (@hobadams)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 4

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.60.html.html b/changelog/2.0.0-alpha.60.html.html new file mode 100644 index 0000000000..58ac0b3846 --- /dev/null +++ b/changelog/2.0.0-alpha.60.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.61.html b/changelog/2.0.0-alpha.61.html new file mode 100644 index 0000000000..5e84a85b32 --- /dev/null +++ b/changelog/2.0.0-alpha.61.html @@ -0,0 +1,137 @@ + + + + + +2.0.0-alpha.61 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.61

Bucky Maler
Drew Alexander
François Chalifour
Faizan
Méril
Sébastien Lorber
Teik Jun
Xuqian

🚀 New Feature

+
    +
  • docusaurus-types, docusaurus +
      +
    • #3083 feat(v2): warn user when there are conflicting routes (@teikjun)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus-utils + +
  • +
  • docusaurus-theme-classic +
      +
    • #3127 feat(v2): dark mode toggle customization (@Drewbi)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #2359 feat(v2): support custom description for blog-only mode (@zxuqian)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader, docusaurus +
      +
    • #3180 fix(v2): fix markdown images always using webpack url-loader (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3171 fix(v2): tab label showing outline & background when clicked (@mdfaizan7)
    • +
    +
  • +
  • docusaurus-init, docusaurus-theme-classic +
      +
    • #3168 fix(v2): fix link items refusing attributes like target, rel etc... (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus +
      +
    • #3162 fix(v2): inability for users to pin their docusaurus version (@BuckyMaler)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 8

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.61.html.html b/changelog/2.0.0-alpha.61.html.html new file mode 100644 index 0000000000..91d025fd56 --- /dev/null +++ b/changelog/2.0.0-alpha.61.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.62.html b/changelog/2.0.0-alpha.62.html new file mode 100644 index 0000000000..ee13bad436 --- /dev/null +++ b/changelog/2.0.0-alpha.62.html @@ -0,0 +1,385 @@ + + + + + +2.0.0-alpha.62 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.62

adinaja
Franklyn Chisom
Ali Hosseini
Amy Lei
Anshul Goyal
Archit
Arthur Flam
Bogdan Doroschenko
alex busnelli
Daniel Wilkowski

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #3357 feat(v2): docs version configuration: lastVersion, version.{path,label} (@slorber)
    • +
    • #3328 feat(v2): Provide docs plugin theme typing (@SamChou19815)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #3348 feat(v2): Provide typing to most of the theme-classic components (@SamChou19815)
    • +
    +
  • +
  • docusaurus-init, docusaurus-plugin-content-blog + +
  • +
  • docusaurus-init, docusaurus-theme-bootstrap +
      +
    • #2981 feat(v2): bootstrap theme, preset, template, CI previews (@fanny)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-debug, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-types, docusaurus +
      +
    • #3229 feat(v2): debug pages + debug layout + ability to debug content (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-pages + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation, docusaurus +
      +
    • #3204 feat(v2): blog + docs multi-instance plugins (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #3096 feat(v2): add support to import assets using relative link in markdown syntax (@anshulrgoyal)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-migrate +
      +
    • #3358 fix(v2): fix migrate cli paths (sidebars/customcss) (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #3311 fix(v2): add https support in webpack devserver (@arcvats)
    • +
    • #3313 fix(v2): resolve webpack loaders from siteDir/node_modules (@anshulrgoyal)
    • +
    • #3308 fix(v2): brokenLinks should not report links that belong to an existing folder if folder/index.html exists (@slorber)
    • +
    • #3273 fix: logic error while deciding deploymentBranch (@thehanimo)
    • +
    • #3281 fix(v2): allow swizzling of component even if case doesn't match (@anshulrgoyal)
    • +
    • #3222 fix(v2): update react-loadable-ssr-addon to solve yarn2 error (@slorber)
    • +
    • #3191 fix(v2): add missing lodash.flatmap dependency (@ylemkimon)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-bootstrap, docusaurus-theme-search-algolia, docusaurus-types + +
  • +
  • docusaurus-theme-classic +
      +
    • #3352 fix(v2): Allow the alt for the logo to be empty (@Vinnl)
    • +
    • #3240 fix(v2): navbar dropdown opened with tab, not closing on click outside (@Ako92)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus +
      +
    • #3347 fix(v2): linking to asset or external html page -> don't use history.push() (@slorber)
    • +
    +
  • +
  • docusaurus-1.x +
      +
    • #3340 fix(v1): show images after one line code block (@adinaja)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus +
      +
    • #3290 fix(v1,v2): Add initial-scale=1.0 to all meta viewport tags (@nebrelbug)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-pages + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-google-gtag + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #3262 fix(v2): doc path special char (space or other) should lead to a valid slug (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils-validation, docusaurus +
      +
    • #3247 fix(v2): modify validation schema and tests for rehype/remark + remove duplicate dependency (@teikjun)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-init, docusaurus-plugin-content-docs +
      +
    • #3228 fix(v2): deprecate docs homePageId in favor of frontmatter "slug: /" (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #3210 fix(v2): fix theme validation for prism field and add tests (@teikjun)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
+

💅 Polish

+
    +
  • docusaurus-module-type-aliases, docusaurus +
      +
    • #3244 chore(v2): tighten up the TypeScript onboarding (@orta)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils, docusaurus + +
  • +
  • docusaurus +
      +
    • #3188 fix(v2): Add a missing whitespace before prompt to use npm run serve (@SamChou19815)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-migrate +
      +
    • #3323 test(v2): Add unit test for migration of config file (@BogdanDor)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3343 refactor(v2): announcement bar bad spelling + minor refactors (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #3339 test(v2): make blog posts unit test ordering determinate (@BogdanDor)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-types + +
  • +
  • docusaurus-module-type-aliases, docusaurus +
      +
    • #3244 chore(v2): tighten up the TypeScript onboarding (@orta)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils, docusaurus + +
  • +
  • docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-1.x + +
  • +
+

:running: Performance

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

Committers: 39

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.62.html.html b/changelog/2.0.0-alpha.62.html.html new file mode 100644 index 0000000000..2c06ccdd74 --- /dev/null +++ b/changelog/2.0.0-alpha.62.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.63.html b/changelog/2.0.0-alpha.63.html new file mode 100644 index 0000000000..d9d7638365 --- /dev/null +++ b/changelog/2.0.0-alpha.63.html @@ -0,0 +1,135 @@ + + + + + +2.0.0-alpha.63 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.63

Méril
Sam Ko
Bartosz Kaszubowski
Sébastien Lorber
Thad Guidry

🚀 New Feature

+
    +
  • docusaurus-types, docusaurus +
      +
    • #3387 feat(v2): allow users to specify a custom ssr HTML template (@mpsq)
    • +
    +
  • +
  • docusaurus-plugin-debug +
      +
    • #3392 feat(v2): officially release @docusaurus/plugin-debug (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3388 feat(v2): add isCloseable property for theme-classic announcement bar (@Simek)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic + +
  • +
+

🐛 Bug Fix

+
    +
  • Other +
      +
    • #3397 fix(v2): DocSearch should keep working after a new release (part 2/2) (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #3393 fix(v2): DocSearch should keep working after a new release (part 1/2) (@slorber)
    • +
    • #3381 fix(v2): alpha 62 doc fixes (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #3385 fix(v2): scripts should allow unknown values (@slorber)
    • +
    +
  • +
  • docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus +
      +
    • #3382 fix(v2): allow using classic theme/preset without the docs plugin (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 5

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.63.html.html b/changelog/2.0.0-alpha.63.html.html new file mode 100644 index 0000000000..5e41d9c77c --- /dev/null +++ b/changelog/2.0.0-alpha.63.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.64.html b/changelog/2.0.0-alpha.64.html new file mode 100644 index 0000000000..a26315ea49 --- /dev/null +++ b/changelog/2.0.0-alpha.64.html @@ -0,0 +1,138 @@ + + + + + +2.0.0-alpha.64 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.64

Ash
josephMG
Méril
Rutik Wankhade
Bartosz Kaszubowski
Sébastien Lorber
Thad Guidry

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #3432 feat(v2): add style property to theme-classic navbar (@Simek)
    • +
    • #3406 feat(v2): ability to add/override theme html metadatas (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #3426 feat(v2): add option to add trailing slash to urls in sitemap (@mpsq)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • Other +
      +
    • #3438 fix(v2): docusaurus 2 PWA should work under baseurl (deploy previews) (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader + +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus-theme-classic +
      +
    • #3433 fix(v2): fix theme-classic announcement bar closeable style (@Simek)
    • +
    +
  • +
  • docusaurus-1.x +
      +
    • #3429 fix(v1): versioned_docs and skip-next-release relative path issue (@josephMG)
    • +
    +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic +
      +
    • #3418 fix(v2): reset sidebar state on sidebar changes (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-debug +
      +
    • #3405 fix(v2): fix debug plugin unscoped inline code global css (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus +
      +
    • #3439 chore(v2): fix serialize-javascript security issue by upgrading webpack/workbox (@slorber)
    • +
    +
  • +
  • Other + +
  • +
+

Committers: 7

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.64.html.html b/changelog/2.0.0-alpha.64.html.html new file mode 100644 index 0000000000..71251a4855 --- /dev/null +++ b/changelog/2.0.0-alpha.64.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.65.html b/changelog/2.0.0-alpha.65.html new file mode 100644 index 0000000000..c8127cc4e2 --- /dev/null +++ b/changelog/2.0.0-alpha.65.html @@ -0,0 +1,185 @@ + + + + + +2.0.0-alpha.65 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.65

aakhtar3
Henry Vélez
hackerman
Andrey Rublev
Nahiyan Kamal
Rémi Doreau
Grégory Heitz
Jeremy Hager
Joel Marcey
Alexey Pyltsyn

🚀 New Feature

+
    +
  • docusaurus +
      +
    • #3497 feat(v2): env variable TERSER_PARALLEL to customize TerserPlugin.parallel (@aeneasr)
    • +
    • #3446 feat(v2): new docusaurus clear command (@abadon7)
    • +
    • #3485 feat(v2): Add @theme-init components to user theme (@edno)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages +
      +
    • #3467 feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins (@ayshiff)
    • +
    +
  • +
  • docusaurus-init, docusaurus-theme-bootstrap +
      +
    • #3496 feat(v2): migrate bootstrap components to ts (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3474 feat(v2): allow to use array of files in customCss field (@Simek)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #3457 feat(v2): add optional custom wrapper class name for pages based on theme classic Layout (@Simek)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • Other +
      +
    • #3517 fix(v1): v1 deploy preview should be available (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #3498 fix(v2): fixed props being passed to @svgr/webpack loader (@anru)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #3456 fix(v2): use valid value for crossorigin attribute (@lex111)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
  • docusaurus-theme-classic +
      +
    • #3472 fix(v2): Show dropdown instead of a single button when there are two versions (@SamChou19815)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #3499 chore(v2): upgrade Infima to 0.2.0-alpha.13 (@lex111)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • docusaurus +
      +
    • #3502 docs(v2): add doc for wrapping theme components with @theme-original and @theme-init (@slorber)
    • +
    +
  • +
  • Other + +
  • +
+

🏠 Internal

+
    +
  • docusaurus-1.x, docusaurus-migrate + +
  • +
  • Other + +
  • +
  • docusaurus-utils-validation + +
  • +
+

Committers: 18

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.65.html.html b/changelog/2.0.0-alpha.65.html.html new file mode 100644 index 0000000000..70edbba666 --- /dev/null +++ b/changelog/2.0.0-alpha.65.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.66.html b/changelog/2.0.0-alpha.66.html new file mode 100644 index 0000000000..4acecd02f0 --- /dev/null +++ b/changelog/2.0.0-alpha.66.html @@ -0,0 +1,223 @@ + + + + + +2.0.0-alpha.66 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.66

aakhtar3
Abhishek Tiwari
Christian Bromann
Fanny
Hamza Hamidi
honlyHuang
Shubham Kumar
John Gracey
Alexey Pyltsyn
Matan Borenkraout

🚀 New Feature

+
    +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic + +
  • +
  • docusaurus-mdx-loader, docusaurus-remark-plugin-npm2yarn + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #3550 feat(v2): contextual search, dynamic Algolia facetFilters (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3580 feat(v2): allow to define custom CSS class for Tabs component (@Simek)
    • +
    • #3553 feat(v2): make dropdown menu collapsible on mobiles (@lex111)
    • +
    +
  • +
  • docusaurus-migrate, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #3548 feat(v2): version dropdown before/after items + move site "All Versions" link (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic + +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #3550 feat(v2): contextual search, dynamic Algolia facetFilters (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #3607 fix(v2): fix error with required href attr of link in mobiles (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3602 fix(v2): make dropdown button clickable with mouse (@lex111)
    • +
    • #3601 fix(v2): fix table-of-content scroll highlighting issues (@slorber)
    • +
    +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic +
      +
    • #3599 fix(v2): remove event listeners on Tabs component unmount (@lex111)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #3585 refactor(v2): various dropdown improvements (@lex111)
    • +
    • #3588 refactor(v2): make accessible copy code button from keyboard (@lex111)
    • +
    • #3578 refactor(v2): apply common behavior to dropdowns (@lex111)
    • +
    • #3546 docs: various fixes and improvements (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus +
      +
    • #3569 refactor(v2): improve broken links error message (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-search-algolia +
      +
    • #3591 chore(v2): enable new contextual search feature (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-theme-classic +
      +
    • #3394 refactor(v2): add useThemeConfig hook + cleanup useless theme default values (@imskr)
    • +
    +
  • +
+

Committers: 17

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.66.html.html b/changelog/2.0.0-alpha.66.html.html new file mode 100644 index 0000000000..acabcf3b2a --- /dev/null +++ b/changelog/2.0.0-alpha.66.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.67.html b/changelog/2.0.0-alpha.67.html new file mode 100644 index 0000000000..e2603af872 --- /dev/null +++ b/changelog/2.0.0-alpha.67.html @@ -0,0 +1,58 @@ + + + + + +2.0.0-alpha.67 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.67.html.html b/changelog/2.0.0-alpha.67.html.html new file mode 100644 index 0000000000..9206b4392f --- /dev/null +++ b/changelog/2.0.0-alpha.67.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.68.html b/changelog/2.0.0-alpha.68.html new file mode 100644 index 0000000000..acf79c3acc --- /dev/null +++ b/changelog/2.0.0-alpha.68.html @@ -0,0 +1,326 @@ + + + + + +2.0.0-alpha.68 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.68

iAmir
Artem Kovalov
Benoît Lemaire
Charles Korn
David Goss
Bright Egbo
Hai
Anh Hong
Jainam Chirag Shah
琚致远

🚀 New Feature

+
    +
  • Other + +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic + +
  • +
  • docusaurus-cssnano-preset, docusaurus-theme-classic, docusaurus +
      +
    • #3716 feat(v2): introduce new minification of CSS bundle (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #3694 feat(v2): Added the ability to specify GIT_PASS in deploy command (for CI purposes) (@smcelhinney)
    • +
    • #3621 feat(v2): baseUrl config issues: show help message if css/js can't load (@jcs98)
    • +
    • #3594 feat(v2): add support for key,cert in https (@ThakurKarthik)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #3705 feat(v2): add support for sync to npm2yarn tabs (@lex111)
    • +
    +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #3749 fix(v2): add support for interleaving Markdown in code blocks (@lex111)
    • +
    • #3739 fix(v2): add support for prefers-reduced-motion in hideable sidebar (@lex111)
    • +
    • #3726 fix(v2): add thin scrollbar to proper element in TOC (@lex111)
    • +
    • #3681 Revert "refactor(v2): improve regex matching code-block title" (@lex111)
    • +
    • #3662 fix(v2): navbar dropdown crash when item.to is undefined (@artemkovalyov)
    • +
    • #3669 fix(v2): make scrollbar styles consistent (@nategiraudeau)
    • +
    • #3666 fix(v2): make optional title for footer links column (@lex111)
    • +
    • #3647 fix(v2): do not set height for mobile dropdown during build (@lex111)
    • +
    • #3650 fix(v2): add landmark for skip to content link (@lex111)
    • +
    • #3627 fix(v2): disable tabbing on hidden doc sidebar (@lex111)
    • +
    • #3637 fix(v2): wrap code blocks on print (@haivp3010)
    • +
    • #3603 fix(v2): animate dropdown properly (@lex111)
    • +
    • #3611 fix(v2): Added back support for optional logo field in theme-classic navbarConfig (@SamChou19815)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #3763 refactor(v2): various markup improvements (@lex111)
    • +
    • #3724 fix(v2): add support for non-ASCII chars in anchor link scroll (@lex111)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus + +
  • +
  • Other +
      +
    • #3760 fix(v2): codesandbox generated examples should use published init package (@slorber)
    • +
    • #3701 fix(v2): limit images height on showcase page (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #3757 fix(v2): escape alt text in img tag (@lex111)
    • +
    • #3653 fix(v2): handle multiple asset links in one line properly (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia, docusaurus-utils +
      +
    • #3721 fix(v2): use swizzled SearchPage component if any (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-utils +
      +
    • #3703 fix(v2): ignore export declarations in excerpt (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #3639 fix(v2): restore infinite scroll pagination on search page (@lex111)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #3622 fix(v2): docusaurus start --poll 500 should work + better config load failure error (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus +
      +
    • #3765 chore(v2): replace wait-file with wait-on to reduce npm warnings (@lex111)
    • +
    • #3725 fix(v2): fix inconsistent error output in swizzle command (@lex111)
    • +
    • #3609 refactor(v2): Improve SSR error message: log page path (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3764 refactor(v2): make accessible anchor links from keyboard (@lex111)
    • +
    • #3745 refactor(v2): introduce Logo component, remove useLogo hook (@Simek)
    • +
    • #3706 refactor(v2): render all tab panels at once (@lex111)
    • +
    • #3712 chore(v2): upgrade Infima to v0.2.0-alpha.15 (@lex111)
    • +
    • #3685 refactor(v2): improve regex matching code-block title (@hong4rc)
    • +
    • #3674 feat(v2): add additional wrapper class to blog pages (@Simek)
    • +
    • #3671 refactor(v2): improve regex matching code-block title (@hong4rc)
    • +
    • #3654 refactor(v2): clean up code blocks (@lex111)
    • +
    • #3649 refactor(v2): make code blocks scrollable from keyboard (@lex111)
    • +
    • #3626 refactor(v2): remove focus outline from mouse users (@lex111)
    • +
    +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #3707 chore(v2): upgrade Infima to v0.2.0-alpha.14 (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-search-algolia +
      +
    • #3604 refactor(v2): use new way to get versions for search page (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other +
      +
    • #3769 docs(v2): fix statements background, update footer background (@Simek)
    • +
    • #3744 chore(v2): add build size bot workflow GitHub CI workflow (@jcs98)
    • +
    • #3741 chore: update yarn lock again (@slorber)
    • +
    • #3740 chore: update yarn lock (@slorber)
    • +
    • #3738 chore(internal): add yarn deduplicate script, cleanup lock (@Simek)
    • +
    • #3732 fix(internal): fix clear script from the main package.json (@Simek)
    • +
    • #3708 chore(v2): remove docs for alpha v60-61 (@lex111)
    • +
    • #3693 fix(v2): fix website scripts on Windows by using cross-env (@Simek)
    • +
    • #3673 test(e2e): dogfood Yarn with enableGlobalCache (@ylemkimon)
    • +
    • #3641 misc: fix unbound env variable in test release script (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, lqip-loader + +
  • +
  • docusaurus-mdx-loader +
      +
    • #3753 chore(v2): fix mismatch peer dependency in MDX loader (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #3742 chore(v2): pin version of babel-plugin-dynamic-import-node to 2.3.0 (@lex111)
    • +
    • #3734 chore(v2): downgrade babel-plugin-dynamic-import-node to 2.3.0 (@lex111)
    • +
    • #3714 chore(v2): fix prettier formatting (@slorber)
    • +
    • #3619 refactor(v2): add better error message for yarn workspace/monorepo/terser issue (@slorber)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus + +
  • +
  • docusaurus-1.x + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-sitemap +
      +
    • #3675 fix(v2): add missing 'react' and 'webpack' peer dependencies (@ylemkimon)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-init-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright +
      +
    • #3613 fix: add repository metadata to all packages (@rarkins)
    • +
    +
  • +
+

Committers: 26

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.68.html.html b/changelog/2.0.0-alpha.68.html.html new file mode 100644 index 0000000000..497bf16c19 --- /dev/null +++ b/changelog/2.0.0-alpha.68.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.69.html b/changelog/2.0.0-alpha.69.html new file mode 100644 index 0000000000..24fc47208f --- /dev/null +++ b/changelog/2.0.0-alpha.69.html @@ -0,0 +1,105 @@ + + + + + +2.0.0-alpha.69 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.69

Maël Nison
camiluc
Alexey Pyltsyn
Bartosz Kaszubowski
Sébastien Lorber

🚀 New Feature

+
    +
  • docusaurus-types, docusaurus +
      +
    • #3802 feat(v2): add baseUrlIssueBanner configuration to disable banner (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #3807 chore(v2): upgrade Infima to v0.2.0-alpha.18 (@lex111)
    • +
    • #3806 fix(v2): remove aria-hidden attr from anchor link of heading (@lex111)
    • +
    • #3784 fix(v2): fix missing logo in dark theme when darkSrc was not set (@Simek)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #3804 fix(v2): Algolia: allow contextualSearch + facetFilters (@slorber)
    • +
    +
  • +
  • docusaurus + +
  • +
+

📝 Documentation

+
    +
  • #3803 docs(v2): fix docusaurus init issue when not using @latest (@slorber)
  • +
  • #3785 docs(v2): recommend Docusaurus 2 usage (@slorber)
  • +
  • #3783 docs(v2): remove @next tags needed to install v2 packages (@slorber)
  • +
  • #3781 docs(v2): rename zeit to vercel (@camiluc)
  • +
+

🏠 Internal

+
    +
  • #3800 chore(v2): remove useless stylelint-copyright peerDependency (@slorber)
  • +
  • #3786 chore(v2): ensure publishConfig.access presence with tests (@slorber)
  • +
+

Committers: 5

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.69.html.html b/changelog/2.0.0-alpha.69.html.html new file mode 100644 index 0000000000..edf938d630 --- /dev/null +++ b/changelog/2.0.0-alpha.69.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.70.html b/changelog/2.0.0-alpha.70.html new file mode 100644 index 0000000000..29e74f53e1 --- /dev/null +++ b/changelog/2.0.0-alpha.70.html @@ -0,0 +1,258 @@ + + + + + +2.0.0-alpha.70 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.70

Aarón García Hervás
hackerman
Alex1304
Arthur
borool
Cindy Gu
davidmauskop
Derric Gilling
François Chalifour
Hadrien Milano

🚀 New Feature

+
    +
  • docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #3916 feat(v2): Add localeDropdown navbar item type + i18n localeConfigs field (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-types +
      +
    • #3904 feat(v2): inline table-of-contents + refactor TOC (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #3888 feat(v2): add custom props for consumption by swizzled sidebar (@oriooctopus)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #3842 feat(v2): enable feeds by default in blog plugin (@cindygu4)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-1.x, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #3325 feat(v2): core v2 i18n support + Docusaurus site Crowdin integration (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-types +
      +
    • #3904 feat(v2): inline table-of-contents + refactor TOC (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #3842 feat(v2): enable feeds by default in blog plugin (@cindygu4)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #3922 fix(v2): fix navbar items issue on Windows? (@slorber)
    • +
    • #3920 fix(v2): i18n translation extractor should handle JSX formatting edge cases better (@slorber)
    • +
    • #3896 fix(v2): do not treat at-rules during CSS minification (@lex111)
    • +
    • #3869 fix(v2): load plugin commands async to fix broken plugin CLI commands docs:version (@aeneasr)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #3921 fix(v2): remove useless console log (@slorber)
    • +
    • #3895 fix(v2): use proper element for pagination nav label (@lex111)
    • +
    • #3882 fix(v2): improve Footer structure, add class names, use Infima transition (@Simek)
    • +
    • #3877 fix(v2): dynamic dark mode detection without toggle widget (@hmil)
    • +
    • #3854 fix(v2): refactor icons in theme-classic, fix swizzle issue (@Simek)
    • +
    • #3823 fix(v2): support rendering of singular tabs (@aeneasr)
    • +
    • #3817 fix(v2): Allow footer logo at attribute to be empty (@aarongarciah)
    • +
    +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic +
      +
    • #3900 fix(v2): correct typo in metas generated for Twitter cards (@mpsq)
    • +
    +
  • +
  • Other +
      +
    • #3872 chore: add missing v1 generated files to ignores (@Simek)
    • +
    • #3833 fix(v2): temporary: disable crowdin until PR env variable permission fixed (@slorber)
    • +
    +
  • +
  • stylelint-copyright +
      +
    • #3852 fix(v2): to fix the canary release GH workflow (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus-plugin-content-docs + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia + +
  • +
  • docusaurus-init, docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other +
      +
    • #3912 chore(v2): remove docs for alpha v64 (@lex111)
    • +
    • #3907 chore(ci): fix canary release filtering (@slorber)
    • +
    • #3902 chore(deps): bump ini from 1.3.5 to 1.3.7 (@dependabot[bot])
    • +
    • #3884 chore(ci): increase Lighthouse CI max_timeout (@Simek)
    • +
    • #3883 chore(v2): remove docs for alpha v62-63 (@lex111)
    • +
    • #3863 chore(ci): run V1 Build and Migration CLI tests conditionally on CI (@Simek)
    • +
    • #3861 chore(ci): reduce number of jobs, remove build from lighthouse pipeline (@Simek)
    • +
    • #3860 chore: add Yarn v2 cache directory to ignores (@Simek)
    • +
    • #3858 chore(v2): disable Crowdin for deploy previews (@slorber)
    • +
    • #3857 fix(v2): fix Crowdin ci commands (@slorber)
    • +
    • #3849 chore(ci): CI scripts cleanup, add Node 14 runs, bump checkout action (@Simek)
    • +
    • #3850 chore(v2): i18n CI: add write-translations call (@slorber)
    • +
    • #3848 chore(v2): fix CI typo (@slorber)
    • +
    • #3847 chore(v2): wire production Crowdin project + setup (@slorber)
    • +
    • #3846 chore(v2): fix PRs not able to add lighthouse/buildsize comment from works (@slorber)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-theme-bootstrap, docusaurus-theme-classic +
      +
    • #3865 chore(v2): fix ignore paths and Prettier commands in themes (@Simek)
    • +
    +
  • +
  • docusaurus-cssnano-preset, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus +
      +
    • #3844 chore(v2): fix several lint warnings, add missing types, cleanup (@Simek)
    • +
    +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #3838 refactor(v2): extract site title formatter to theme-common util (@Simek)
    • +
    +
  • +
+

Committers: 23

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.70.html.html b/changelog/2.0.0-alpha.70.html.html new file mode 100644 index 0000000000..7d1b1aca9b --- /dev/null +++ b/changelog/2.0.0-alpha.70.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.71.html b/changelog/2.0.0-alpha.71.html new file mode 100644 index 0000000000..86ed032f1f --- /dev/null +++ b/changelog/2.0.0-alpha.71.html @@ -0,0 +1,617 @@ + + + + + +2.0.0-alpha.71 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.71

Ali Saki
Joel M
Apurva Ojas
Armano
Arthur
Jola
Andrew Taft
aukokyong
Nahiyan Kamal
Martin Adámek

🚀 New Feature

+
    +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-utils, docusaurus +
      +
    • #4222 feat(v2): add ability to set custom heading id (@lex111)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #4328 feat(v2): Add playgroundPosition config for live codeblock (@tokarchyn)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-types, docusaurus +
      +
    • #4308 feat(v2): add --config option to CLI (@longlho)
    • +
    • #4185 feat(v2): allow extend PostCSS config (@lex111)
    • +
    • #4021 feat(v2): Allow plugins to consume webpack stats (@RDIL)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #4295 feat(v2): Add Interpolate / interpolate APIs + complete theme translations (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #4278 feat(v2): ability to "escape" JSX in MDX files as code blocks (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #4232 feat(v2): editUrl functions should receive md doc permalink (@slorber)
    • +
    • #4121 feat(v2): editUrl function for advanced use-cases (@slorber)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus +
      +
    • #4218 feat(v2): support/use React v17 by default (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #4215 feat(v2): Add i18n default code translation bundles (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus +
      +
    • #4198 feat(v2): add fonts loaders + webpack resolve.roots (@slorber)
    • +
    • #3998 feat(v2): Cache hashed assets to dedicated folders (@kumaraditya303)
    • +
    • #3979 feat(v2): better error message for invalid plugin config (@9oelM)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #4168 feat(v2): Extract/translate hardcoded labels from classic theme (@slorber)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #4098 feat(v2): improve templates, use JSDoc type annotation, improve docusaurus.config.js autocompletion (@LittleboyHarry)
    • +
    +
  • +
  • docusaurus-init, docusaurus-migrate + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #3949 feat(v2): new docs edit options: editCurrentVersion + editLocalizedDocs (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-1.x, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader +
      +
    • #4223 chore(v2): upgrade dependencies + require Node 12 (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #4349 fix(v2): fix update code translations script + update some translations (@slorber)
    • +
    • #4311 fix(v2): fit footer in viewport when content area is too small (@lex111)
    • +
    • #4340 fix(v2): prevent useless blog pages to be in search results (@slorber)
    • +
    • #4274 fix(v2): theme classic should have lib-next prettified (@slorber)
    • +
    • #4267 fix(v2): Allow null as valid for title of item in footer links. (@ben-qnimble)
    • +
    • #4254 fix(v2): fix LTR PostCSS bug on Netlify and monorepo symlinks (@slorber)
    • +
    • #4247 fix(v2): make doc container full width when hidden sidebar (@lex111)
    • +
    • #4241 fix(v2): avoid horizontal scrolling when long lines of code (@lex111)
    • +
    • #4200 fix(v2): various minor bugs with location hash (@lex111)
    • +
    • #4195 fix(v2): restore hamburger menu (@lex111)
    • +
    • #4189 fix(v2): prevent click on item menu with children on mobiles (@lex111)
    • +
    • #4176 fix(v2): make locale dropdown accessible from keyboard (@lex111)
    • +
    • #4163 fix(v2): fix warning and improve styling inline TOC (@lex111)
    • +
    • #4162 fix(v2): make more accessible skip link (@lex111)
    • +
    • #4160 fix(v2): fix hreflang headers (@slorber)
    • +
    • #4147 fix(v2): avoid misuse section tag in blog posts (@lex111)
    • +
    • #4146 fix(v2): use current color for language icon (@lex111)
    • +
    • #4118 fix(v2): navbar dropdown subitems should be translated properly (@slorber)
    • +
    • #4011 fix(v2): fix accessibility issue with IconArrow (@natac13)
    • +
    • #3968 fix(v2): fix blog only contextual search (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #4315 fix(v2): make code blocks more standalone (@lex111)
    • +
    • #4277 fix(v2): Code blocks should be LTR by default (@slorber)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #4318 fix(v2): evaluate code in live editor on client only (@lex111)
    • +
    • #3954 fix(v2): allow async/await in live code editor (@9oelM)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus +
      +
    • #4304 fix(v2): fix bad theme pluralization rules for some labels (@slorber)
    • +
    +
  • +
  • docusaurus-cssnano-preset +
      +
    • #4240 fix(v2): remove PostCSS plugin for combine duplicated selectors (@lex111)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #4188 fix(v2): prepend docsearch modal to body element (@lex111)
    • +
    • #4154 fix(v2): add base url to opensearch.xml (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #4166 fix(v2): ideal image assets should be served under ./assets (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4092 fix(v2): fix/enhance minor i18n issues reported (@slorber)
    • +
    • #3940 fix(v2): i18n should not crash theme without footer (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils +
      +
    • #3970 fix(v2): fix multi-instance mdx loaders not sandboxed correctly (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #3903 fix(v2): fix redirect toUrl (windows + trailing slash) (@saydo17)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #3944 fix(v2): ignore style imports in excerpt (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #4371 refactor(v2): update Russian translation in classic theme (@lex111)
    • +
    • #4359 polish(v2): [theme-classic] slightly improve Japanese translation (@MisterFISHUP)
    • +
    • #4350 polish(v2): Updated theme label translations for Turkish (@caglarturali)
    • +
    • #4351 polish(v2): add japanese translation for #4304 (@ykzts)
    • +
    • #4309 polish(v2): improved Farsi translation (@massoudmaboudi)
    • +
    • #4279 polish(v2): theme default translations for language de / german (@philipp985)
    • +
    • #4275 polish(v2): Add more tags translations (@slorber)
    • +
    • #4246 refactor(v2): add Russian translation for classic theme (@lex111)
    • +
    • #4242 refactor(v2): use Link component for external links (@lex111)
    • +
    • #4244 refactor(v2): clean-ups and fixes (@lex111)
    • +
    • #4193 refactor(v2): update tabs to follow WAI-ARIA spec (@lex111)
    • +
    • #4194 refactor(v2): use transform instead of top position for hideable navbar (@lex111)
    • +
    • #4167 refactor(v2): minor styling improvements (@lex111)
    • +
    • #4169 refactor(v2): remove delay after skip link pressed (@lex111)
    • +
    • #4086 style(v2): add className to tab container (@ArtFlag)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #4352 refactor(v2): format last updated date using Intl (@lex111)
    • +
    • #4243 refactor(v2): introduce Seo component for internal using (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-utils +
      +
    • #4344 refactor(v2): format post date using Intl (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #4219 refactor(v2): add more translatable strings (@lex111)
    • +
    +
  • +
  • Other +
      +
    • #4074 polish(v2): improve codesandbox template package.json (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-debug +
      +
    • #3953 refactor(v2): fix debug plugin name (@RDIL)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-theme-classic + +
  • +
+

📝 Documentation

+
    +
  • Other + +
  • +
  • docusaurus-theme-classic +
      +
    • #4356 polish(v2): [theme-classic] add Chinese translations (zh-Hant & zh-Hans) (@MisterFISHUP)
    • +
    +
  • +
  • docusaurus +
      +
    • #4126 docs(v2): do not recommend using useBaseUrl() hook in most cases (@slorber)
    • +
    • #4049 docs(v1): version page should recommend v2 (bis) (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-cssnano-preset, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-bootstrap, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright +
      +
    • #4034 docs(v2): Add READMEs to v2 packages (@RDIL)
    • +
    +
  • +
  • docusaurus-init + +
  • +
+

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-init, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, lqip-loader +
      +
    • #4361 refactor(v2): remove duplicated lodash dependencies and import only what needed (@armano2)
    • +
    +
  • +
  • docusaurus-1.x, docusaurus + +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus +
      +
    • #4264 chore(v2): bump/align deps in monorepo: commander, semver, fs-extra (@Simek)
    • +
    +
  • +
  • docusaurus +
      +
    • #4265 chore(v2): PostCSS peer dep fix (@RDIL)
    • +
    • #4091 refactor(v2): Switch from inquirer to prompts (@RDIL)
    • +
    • #4066 chore(v2): Update a few dependencies (@RDIL)
    • +
    +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus-utils, docusaurus +
      +
    • #4081 chore(v2): Update webpack-related dependencies, pre-work to migrate to Webpack 5 (@RDIL)
    • +
    +
  • +
  • docusaurus-init, docusaurus +
      +
    • #4012 chore(v2): docusaurus-init: switch from inquirer to prompts (@RDIL)
    • +
    +
  • +
  • docusaurus-plugin-sitemap + +
  • +
  • docusaurus-migrate + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-remark-plugin-npm2yarn, docusaurus-utils, docusaurus, stylelint-copyright + +
  • +
+

:running: Performance

+
    +
  • docusaurus-cssnano-preset, docusaurus-plugin-content-blog, docusaurus +
      +
    • #4355 perf(v2): improve blog mdx-loader and postcss loader (@lex111)
    • +
    +
  • +
+

Committers: 70

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.71.html.html b/changelog/2.0.0-alpha.71.html.html new file mode 100644 index 0000000000..67b7a72611 --- /dev/null +++ b/changelog/2.0.0-alpha.71.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.72.html b/changelog/2.0.0-alpha.72.html new file mode 100644 index 0000000000..37ec7f50f4 --- /dev/null +++ b/changelog/2.0.0-alpha.72.html @@ -0,0 +1,178 @@ + + + + + +2.0.0-alpha.72 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.72

Armano
Harvtronix
Joon-Ha Lee
Leandro Oriente
Alexey Pyltsyn
Long Ho
Lowen
Pierre-Gilles Leymarie
Quan
Rhodanthe1116

💥 Breaking Change

+

Starting with this release for a proper work of i18n functionality, you need to either use Node v14+ or in case of using earlier version of Node.js install full-icu package and set NODE_ICU_DATA environment variable in your npm scripts, for example:

+
"scripts": {
"start": "cross-env NODE_ICU_DATA=node_modules/full-icu docusaurus start"
}
+

🚀 New Feature

+
    +
  • docusaurus-init + +
  • +
  • docusaurus-theme-classic + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #4429 chore(v2): upgrade Infima to v0.2.0-alpha.21 (@lex111)
    • +
    • #4428 fix(v2): allow using pre tag in Markdown directly (@lex111)
    • +
    • #4381 fix(v2): specify proper TS path in classic theme (@lex111)
    • +
    • #4383 fix(v2): set theme color mode for SSR (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus +
      +
    • #4407 fix(v2): broken link checker should not report false positives when using encoded chars (@Harvtronix)
    • +
    +
  • +
  • Other +
      +
    • #4410 fix(v1): Fix v1 site deployment with Crowdin again... (@slorber)
    • +
    • #4396 fix(v1): Temp fix v1 site deployment: fail-safe on Crowdin upload translations error (@slorber)
    • +
    • #4395 fix(v1): fix v1 site deploy issues (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-types, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-module-type-aliases +
      +
    • #4387 refactor(v2): add ExecutionEnvironment, BrowserOnly, isInternalUrl to type aliases (@armano2)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #4402 refactor(v2): merge linkify function used in blog and docs and align properties (@armano2)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #4382 refactor(v2): correct some of type errors reported by eslint (@armano2)
    • +
    +
  • +
  • docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4385 refactor(v2): add missing theme-classic types (@armano2)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-1.x + +
  • +
  • Other + +
  • +
  • docusaurus-utils +
      +
    • #4384 chore(v2): avoid bad publish of intl-locales-supported (@lex111)
    • +
    +
  • +
+

Committers: 14

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.72.html.html b/changelog/2.0.0-alpha.72.html.html new file mode 100644 index 0000000000..33892e9ab2 --- /dev/null +++ b/changelog/2.0.0-alpha.72.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.73.html b/changelog/2.0.0-alpha.73.html new file mode 100644 index 0000000000..043f5bcb66 --- /dev/null +++ b/changelog/2.0.0-alpha.73.html @@ -0,0 +1,366 @@ + + + + + +2.0.0-alpha.73 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.73

aehrea
Ajeet Singh Raina, Docker Captain, RedisLabs
akepecs
Anthony Bobsin
Armano
Artur Carvalho
Dennis Thompson
besemuna
Guillaume Claret
Arijit Kundu

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #4624 feat(v2): Add Filipino default translations to theme (@gumacahin)
    • +
    • #4596 feat(v2): theme default translations hindi (@lisa761)
    • +
    • #4536 feat(v2): add pt-PT translations for docusaurus-theme-classic (@tiago-rr)
    • +
    • #4525 feat(v2): add Brazilian Portuguese translation for docusaurus-theme-classic (@thiagog3)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4511 feat(v2): add unique page/wrapper className to each theme pages (@ShinteiMai)
    • +
    +
  • +
  • docusaurus-init, docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #4582 feat(v2): auto-generated sidebars, frontmatter-less sites (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #4545 feat(v2): docusaurus deploy: ability to configure port in git url (@talesporto)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils +
      +
    • #4590 feat(v2): various markdown string parsing improvements/fixes (@slorber)
    • +
    • #4485 feat(v2): frontmatter-less: read first heading as title and use it in front-matter (@armano2)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #4581 feat(v2): default theme translations: locale "pt" should load "pt-BR" translations (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #4495 feat(v2): include frontmatter in loadedContent doc metadatas (@kaytwo)
    • +
    • #4500 feat(v2): provide doc sidebar_label through sidebars.js (@besemuna)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #4449 feat(v2): infer default i18n locale config from locale code (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4619 refactor(v2): rename class main-docs-wrapper to docs-wrapper (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #4582 feat(v2): auto-generated sidebars, frontmatter-less sites (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #4627 chore(v2): update Infima to alpha.22 (@slorber)
    • +
    • #4621 fix(v2): center align content if no sidebar exists (@lex111)
    • +
    • #4620 fix(v2): restore toggle responsive sidebar button (@lex111)
    • +
    • #4598 fix(v2): render escaped HTML entities inside code properly (@lex111)
    • +
    • #4554 fix: DocNavbarItem error message (@serut)
    • +
    • #4468 fix(v2): select correct tab when items are incorrectly ordered (@armano2)
    • +
    • #4461 fix(v2): Fix i18n staging deployment due to json typo (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4541 fix(v2): fix code block title parsing, support multiple metastring attributes (@duanwilliam)
    • +
    • #4600 fix(v2): use page title from config if not set (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4501 fix(v2): fail-safe usage of browser storage (localStorage/sessionStorage) when access is denied (@jknoxville)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-types, docusaurus +
      +
    • #4593 fix(v2): i18n perf issue: getTranslationFile() should not load content again (@slorber)
    • +
    +
  • +
  • Other +
      +
    • #4574 fix(v2): examples should use Node 14 by default on CodeSandbox + regen with alpha72 (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #4547 feat(v2) : use symbols to denote swizzle safety (@besemuna)
    • +
    • #4575 fix(v2): fix i18n isLastLocale bug preventing docusaurus from building some locales (@slorber)
    • +
    • #4506 fix(v2): remove no longer used postcss-present-env from dependencies (@armano2)
    • +
    • #4444 fix(v2): Fix writeHeadingIds on Windows due to non-posix paths (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #4507 fix(v2): do not warn about duplicated title for pages (@armano2)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus +
      +
    • #4459 fix(v2): Export Joi from validation-utils package (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #4626 refactor(v2): toggleResponsiveSidebar => more stable callback (@slorber)
    • +
    • #4617 refactor(v2): simplify and optimize sidebar (@slorber)
    • +
    • #4608 refactor(v2): replace react-toggle with own implementation (@lex111)
    • +
    • #4601 refactor(v2): increase heading anchor offset (@lex111)
    • +
    • #4467 refactor(v2): add missing types to theme-classic useTheme (@armano2)
    • +
    • #4448 polish(v2): Add german translations (@miku86)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4619 refactor(v2): rename class main-docs-wrapper to docs-wrapper (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus +
      +
    • #4451 refactor(v2): correct client types and type aliases (@armano2)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils, docusaurus +
      +
    • #4375 refactor(v2): TS config update: reduce the size of npm modules (@RDIL)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-classic + +
  • +
  • Other +
      +
    • #4613 chore(v2): fix yarn2 end2end test by using lerna publish --exact (@slorber)
    • +
    • #4611 chore(v2): CI: do not build all locales when monitoring build time perf (@slorber)
    • +
    • #4486 ci: enable yarn install cache (@armano2)
    • +
    • #4508 ci: change default actions timeout from 6h to 30m (@armano2)
    • +
    • #4488 chore(v2): fix typo in classic init template (@clarus)
    • +
    • #4471 chore: fix GH actions lint problem matchers issue in PR (@slorber)
    • +
    • #4458 chore(v2): enable staging locales: ko ja (@slorber)
    • +
    • #4457 chore(v2): remove docs for alpha v70 (@lex111)
    • +
    • #4452 chore(v2): update typescript-eslint to v4.18.0 (@armano2)
    • +
    +
  • +
  • docusaurus +
      +
    • #4516 ci(v2): fail CI if build takes too much time (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-bootstrap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus +
      +
    • #4490 chore: rename v2.docusaurus.io urls after domain switch + redirect + cleanups (@slorber)
    • +
    +
  • +
  • docusaurus-1.x + +
  • +
  • docusaurus-1.x, docusaurus-init +
      +
    • #4453 chore(v2): migrate babel-eslint to @babel/eslint-parser (@armano2)
    • +
    +
  • +
  • docusaurus-utils-validation + +
  • +
  • docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-ideal-image, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus-theme-classic +
      +
    • #4626 refactor(v2): toggleResponsiveSidebar => more stable callback (@slorber)
    • +
    • #4603 perf(v2): avoid rerender of sidebar items while scrolling (@lex111)
    • +
    • #4473 perf(v2): reduce amount of component updates while scrolling (@armano2)
    • +
    +
  • +
+

Committers: 37

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.73.html.html b/changelog/2.0.0-alpha.73.html.html new file mode 100644 index 0000000000..785e9a0583 --- /dev/null +++ b/changelog/2.0.0-alpha.73.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.74.html b/changelog/2.0.0-alpha.74.html new file mode 100644 index 0000000000..2f955a3f3d --- /dev/null +++ b/changelog/2.0.0-alpha.74.html @@ -0,0 +1,148 @@ + + + + + +2.0.0-alpha.74 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.74

alena-ko
Arnaud Jeannin
DOLLE
John Reilly
kazk
Alexey Pyltsyn
Lisa Chandra
Luis Medina Huerta
MisterFISHUP
Tommy

🚀 New Feature

+
    +
  • Other + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #4658 feat(v2): allow user to customize/enhance the default sidebar items generator (@slorber)
    • +
    • #4655 feat(v2): docs, make numberPrefixParser configurable, better defaults, minor breaking-changes (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils, docusaurus +
      +
    • #4688 fix(v2): fix title logic (meta vs heading) + ignore fixed anchor id syntax (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #4687 fix(v2): accept empty/null custom_edit_url docs frontmatter for retrocompat (@slorber)
    • +
    • #4651 fix(v2): sidebar autogen from subfolder should read category metadata correctly (@slorber)
    • +
    • #4629 fix(v2): fix validation rejecting admonitions false (@kazk)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils-validation + +
  • +
  • docusaurus-utils +
      +
    • #4646 fix(v2): ignore imports when h1 heading parsing (@lex111)
    • +
    • #4641 fix(v2): parse headings directly after h1 properly (@lex111)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #4682 refactor(v2): align external icon on right (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other +
      +
    • #4670 chore: add some redirects to v1.docusaurus.io (@slorber)
    • +
    +
  • +
  • docusaurus-init + +
  • +
+

Committers: 12

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.74.html.html b/changelog/2.0.0-alpha.74.html.html new file mode 100644 index 0000000000..e1415d7625 --- /dev/null +++ b/changelog/2.0.0-alpha.74.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.75.html b/changelog/2.0.0-alpha.75.html new file mode 100644 index 0000000000..bb2488a67d --- /dev/null +++ b/changelog/2.0.0-alpha.75.html @@ -0,0 +1,77 @@ + + + + + +2.0.0-alpha.75 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-alpha.75

Geoffroy Empain
Reece Dunham
Sébastien Lorber
Tommy Chen

💥 Breaking Change

+
    +
  • docusaurus-cssnano-preset, docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus, lqip-loader + +
  • +
+

📝 Documentation

+ +

Committers: 4

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-alpha.75.html.html b/changelog/2.0.0-alpha.75.html.html new file mode 100644 index 0000000000..f528dd1a63 --- /dev/null +++ b/changelog/2.0.0-alpha.75.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.0.html b/changelog/2.0.0-beta.0.html new file mode 100644 index 0000000000..0da861d161 --- /dev/null +++ b/changelog/2.0.0-beta.0.html @@ -0,0 +1,122 @@ + + + + + +2.0.0-beta.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.0

Chris Owen
Evan
Forresst
Sergio Rafael Gianazza
Joel Hans
Joshua Chen
Костя Третяк
Nam Hoang Le
Rodrigo Moreno
Sébastien Lorber

Read the 2.0.0 beta blog post!

+

Note: this first beta release does not contain any new major feature. We are removing the alpha label, as we are confident Docusaurus 2 is stable enough.

+

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #4762 feat(v2): add es translations for docusaurus-theme-classic (@rodmoreno)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #4750 fix(v2): improve french translation for theme-classic (@forresst)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #4736 fix(v2): fix encoding of markdown image/file inline file-loaders (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #4735 fix(v2): markdown title parser should ignore all forms of MDX import statements (@nam-hle)
    • +
    • #4729 fix(v2): optimize markdown parser regex (Closes #4726) (@nam-hle)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • #4746 chore(v2): attempt to fix crowdin dl again (@slorber)
  • +
  • #4743 chore(v2): fix prod deployment due to bad image path (@slorber)
  • +
  • #4740 chore(v2): delay i18n-staging deployment to avoid Crowdin 409 errors (@slorber)
  • +
  • #4739 chore(v2): Fix Crowdin 409 issues in CI (@slorber)
  • +
+

Committers: 11

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.0.html.html b/changelog/2.0.0-beta.0.html.html new file mode 100644 index 0000000000..87d8de458d --- /dev/null +++ b/changelog/2.0.0-beta.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.1.html b/changelog/2.0.0-beta.1.html new file mode 100644 index 0000000000..5d9f83460d --- /dev/null +++ b/changelog/2.0.0-beta.1.html @@ -0,0 +1,389 @@ + + + + + +2.0.0-beta.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.1

antonygibbs
Arthur
besemuna
Christopher Hsieh
Ben Rometsch
e271828-
fgatti675
Tinaël Devresse
Jonathan Mazin
Joel

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #4982 feat(v2): add docs pagination_label frontmatter (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-theme-classic, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #4796 feat(v2): exhaustive docs frontmatter schema (@nam-hle)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #4618 feat(v2): allow config plugins as functions or [function,options] (@besemuna)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-utils-validation +
      +
    • #4759 feat(v2): exhaustive BlogPostFrontMatter schema validation (@nam-hle)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus-utils-common + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils-common, docusaurus-utils, docusaurus +
      +
    • #4988 fix(v2): redirect plugin should use siteConfig.trailingSlash (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #4985 fix(v2): navbar doc item fallback: search doc in lastVersion (@slorber)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #4964 fix(v2): avoid duplicated imports in npm2yarn plugin (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #4970 fix(v2): sidebar_label should be used to compute next/previous button labels (@slorber)
    • +
    • #4861 fix(v2): allow relative sidebar path resolution in docs:version command (@lex111)
    • +
    • #4859 fix(v2): use frontmatter title at first for paginated links (@lex111)
    • +
    • #4775 fix(v2): improve dx sidebar config, ability to have no sidebars file (@nam-hle)
    • +
    +
  • +
  • docusaurus-plugin-sitemap, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus +
      +
    • #4950 fix(v2): sitemap plugin should handle siteConfig.trailingSlash automatically (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #4924 fix(v2): respect baseUrl in serving command (@lex111)
    • +
    • #4935 fix(v2): render children in BrowserOnly after client is ready (@lex111)
    • +
    • #4894 fix(v2): escape HTML entities in user tags attributes (@lex111)
    • +
    • #4789 fix(v2): transpile libs with too recent syntax with babel (@slorber)
    • +
    • #4784 fix(v2): update notifier should never suggest to downgrade (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils +
      +
    • #4882 fix(v2): fix contentTitle issues when markdown h1 title contains code blocks (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #4862 fix(v2): remove Markdown heading id from excerpt (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #4871 fix(v2): unbreak adding of custom HTML metadatas (@lex111)
    • +
    • #4797 fix(v2): do not focus on skip link if page refreshed (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #4856 fix(v2): adjust padding when custom search box location (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock +
      +
    • #4830 fix(v2): pin prism-react-renderer version to 1.1.1 (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image, lqip-loader + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #4995 refactor(v2): reduce top padding in doc content container (@lex111)
    • +
    • #4918 refactor(v2): readjust footer of blog item (@lex111)
    • +
    • #4959 refactor(v2): minor cleanups (@lex111)
    • +
    • #4945 refactor(v2): remove extra padding from doc item container (@lex111)
    • +
    • #4940 refactor(v2): improve semantic doc sidebar markup (@lex111)
    • +
    • #4961 refactor(v2): improve semantic blog sidebar markup (@lex111)
    • +
    • #4903 refactor(v2): make doc item layout more semantic (@lex111)
    • +
    • #4877 refactor(v2): reduce vertical space in doc content container (@lex111)
    • +
    • #4914 refactor(v2): use SVG for external link icon (@lex111)
    • +
    • #4916 refactor(v2): replace strong with b in UI components (@lex111)
    • +
    • #4926 refactor(v2): hide decorative SVGs from screen readers (@lex111)
    • +
    • #4865 refactor(v2): make little better doc update block UI (@lex111)
    • +
    • #4795 refactor(v2): remove transition on body element (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs +
      +
    • #4989 refactor(v2): blog/docs: add more context in error messages (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-utils-validation, docusaurus +
      +
    • #4977 polish(v2): url-subpath config validation warning (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #4969 refactor(v2): include path in error about non-existent ids (@lex111)
    • +
    • #4863 refactor(v2): remove sidebar_label filed from doc metadata file (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #4907 refactor(v2): remove type attribute from link and script tags (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #4919 refactor(v2): improve markup and styling on search page (@lex111)
    • +
    • #4867 chore(v2): update @docsearch/react (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #4905 refactor(v2): do not generate RSS files for empty feed (@lex111)
    • +
    • #4860 refactor(v2): use aliased path for blog list sidebar file (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #4870 refactor(v2): add exception handling if external command is fails (@lex111)
    • +
    • #4875 refactor(v2): make even better SSR error notify and add tip (@lex111)
    • +
    • #4866 refactor(v2): output URL to console only if it has changed (@lex111)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus + +
  • +
  • docusaurus-1.x, docusaurus-init-1.x +
      +
    • #4902 chore: remove docusaurus v1 from master branch (moved to docusaurus-v1 branch) (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #4915 chore(v2): bump react-waypoint from 9.0.2 to 10.1.0 (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock +
      +
    • #4834 chore(v2): unlock prism-react-renderer version (@lex111)
    • +
    +
  • +
  • docusaurus-cssnano-preset, docusaurus + +
  • +
  • docusaurus-cssnano-preset, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
+

Committers: 31

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.1.html.html b/changelog/2.0.0-beta.1.html.html new file mode 100644 index 0000000000..b88faa2b76 --- /dev/null +++ b/changelog/2.0.0-beta.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.10.html b/changelog/2.0.0-beta.10.html new file mode 100644 index 0000000000..029f98385b --- /dev/null +++ b/changelog/2.0.0-beta.10.html @@ -0,0 +1,455 @@ + + + + + +2.0.0-beta.10 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.10

Afshin Mehrabani
Rohit Agrawal
Armano
Christophe Chaudier
Devtato
chima ilo
Shoaib Sajid
Don
duanwilliam
Dmitriy Fishman

🚀 New Feature

+
    +
  • create-docusaurus, docusaurus-types, docusaurus +
      +
    • #5930 feat: shorthands for themes/plugins/presets configuration (@fsmaia)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils, docusaurus +
      +
    • #5830 feat(content-docs): sidebar category linking to document or auto-generated index page (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-remark-plugin-npm2yarn, docusaurus-types, docusaurus + +
  • +
  • create-docusaurus +
      +
    • #3458 feat(create-docusaurus): allow using local folder as template (@afshinm)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #5787 feat(content-blog): allow sorting posts in ascending order (@cerkiewny)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #3104 feat(core): Add React ErrorBoundary component + theme default boundaries (@spyke01)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-migrate, docusaurus-plugin-content-docs +
      +
    • #6065 refactor: remove deprecated docs homePageId option (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6056 refactor: remove unused metadata field for homepage (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils, docusaurus +
      +
    • #5830 feat(content-docs): sidebar category linking to document or auto-generated index page (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-preset-classic +
      +
    • #5832 refactor(ganalytics, gtag): move options out of themeConfig (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #6070 fix(theme-common): useLocationChange fire un-necessarily twice (@slorber)
    • +
    • #6040 fix: browser storage (localStorage) is unreliable: api should fail-safe (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #6052 fix(core): fix error boundary import disrupting CSS order (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus +
      +
    • #5983 fix(core): do not apply theme-init alias to user component (@Josh-Cena)
    • +
    • #5798 fix(cli): update notifier should be shown if current is less than latest (@semoal)
    • +
    • #5864 fix: respect base URL when serving content by webpack dev server (@lex111)
    • +
    +
  • +
  • docusaurus-module-type-aliases + +
  • +
  • docusaurus-theme-classic + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #6048 refactor: capitalize locales when creating i18n config (@lex111)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #5976 feat(theme-translations): add extra Korean translation, fix typo (@revi)
    • +
    • #6060 chore(theme-translations): complete Chinese translations (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate, docusaurus-plugin-content-docs +
      +
    • #6065 refactor: remove deprecated docs homePageId option (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6056 refactor: remove unused metadata field for homepage (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types + +
  • +
  • docusaurus-plugin-pwa +
      +
    • #5995 chore(plugin-pwa): change core-js version in package.json to v3 (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils +
      +
    • #5849 refactor: define own translations in other themes (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-types + +
  • +
  • docusaurus +
      +
    • #5829 refactor: optimize clone and checkout in deploy command (@sivapalan)
    • +
    • #5899 feat(core): give more hints when plugins have duplicate IDs (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-preset-classic +
      +
    • #5832 refactor(ganalytics, gtag): move options out of themeConfig (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus +
      +
    • #5840 feat: allow GIT_USER env var to be unset if SSH is used (@wpyoga)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • create-docusaurus, docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus +
      +
    • #6071 refactor: add blank lines below all copyright headers (@Josh-Cena)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-module-type-aliases, docusaurus-types, docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
  • create-docusaurus, docusaurus-plugin-ideal-image, docusaurus-theme-classic +
      +
    • #6010 chore: upgrade prettier; rename prettier scripts as format (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus + +
  • +
  • docusaurus +
      +
    • #5998 chore: upgrade webpack-dev-server to v4.5.0 (@lex111)
    • +
    • #5965 fix(core): apply staticDirectories to base webpack config (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus-utils, docusaurus +
      +
    • #5985 chore: cleanup dependency declaration in package.json (@armano2)
    • +
    +
  • +
  • create-docusaurus, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright +
      +
    • #5963 chore: upgrade TypeScript & other ESLint related deps (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #5962 refactor(content-docs): move isCategoriesShorthand to utils (@armano2)
    • +
    • #5906 fix(content-docs): do not echo git history to console (@Josh-Cena)
    • +
    • #5905 misc(plugin-docs): fix Windows test snapshot for git history retrieval (@Josh-Cena)
    • +
    • #5904 refactor(content-docs): use shelljs instead of execa (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #5940 refactor(plugin-ideal-image): migrate package to TS (@armano2)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-ideal-image, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #5935 refactor(theme-search-algolia): migrate package to TS (@armano2)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-utils-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5922 refactor(theme-classic): move some logic of CodeBlock to theme-common (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils + +
  • +
+

Committers: 48

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.10.html.html b/changelog/2.0.0-beta.10.html.html new file mode 100644 index 0000000000..da50219d09 --- /dev/null +++ b/changelog/2.0.0-beta.10.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.11.html b/changelog/2.0.0-beta.11.html new file mode 100644 index 0000000000..6bf5e87052 --- /dev/null +++ b/changelog/2.0.0-beta.11.html @@ -0,0 +1,70 @@ + + + + + +2.0.0-beta.11 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.11

Pranab Das
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia + +
  • +
+

Committers: 2

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.11.html.html b/changelog/2.0.0-beta.11.html.html new file mode 100644 index 0000000000..863cfb79de --- /dev/null +++ b/changelog/2.0.0-beta.11.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.12.html b/changelog/2.0.0-beta.12.html new file mode 100644 index 0000000000..55934b60d5 --- /dev/null +++ b/changelog/2.0.0-beta.12.html @@ -0,0 +1,58 @@ + + + + + +2.0.0-beta.12 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.12.html.html b/changelog/2.0.0-beta.12.html.html new file mode 100644 index 0000000000..cc5f82d1cd --- /dev/null +++ b/changelog/2.0.0-beta.12.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.13.html b/changelog/2.0.0-beta.13.html new file mode 100644 index 0000000000..58e8e39bb7 --- /dev/null +++ b/changelog/2.0.0-beta.13.html @@ -0,0 +1,58 @@ + + + + + +2.0.0-beta.13 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.13.html.html b/changelog/2.0.0-beta.13.html.html new file mode 100644 index 0000000000..5584252ba8 --- /dev/null +++ b/changelog/2.0.0-beta.13.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.14.html b/changelog/2.0.0-beta.14.html new file mode 100644 index 0000000000..0e114663d0 --- /dev/null +++ b/changelog/2.0.0-beta.14.html @@ -0,0 +1,201 @@ + + + + + +2.0.0-beta.14 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.14

6543
Christopher Klint
colton
Drylozu
Jeroen Claassens
Harsh Mishra
Himanshu
Joshua Chen
Alexey Pyltsyn
Kristoffer K.

🚀 New Feature

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-classic +
      +
    • #5848 feat(theme-classic): standalone Admonition component (@Josh-Cena)
    • +
    • #6082 feat(theme-classic): allow passing additional attributes to tab headings (@Drylozu)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus +
      +
    • #6107 feat(core): allow plugins to customize/override Webpack devServer config (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-classic +
      +
    • #6128 fix: do not use aria-hidden in heading anchor links (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6124 fix(content-docs): restore behavior when pagination front matter is null (@Josh-Cena)
    • +
    • #6085 fix(content-docs): getMainDocId should return doc with both versioned or unversioned id (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-utils-validation + +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-pwa, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, lqip-loader + +
  • +
  • docusaurus-theme-translations +
      +
    • #6088 fix(theme-translations): publish theme-translation lib, including typedef (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • create-docusaurus +
      +
    • #6119 fix(create-docusaurus): make initial editUrl functional (@Josh-Cena)
    • +
    • #6095 fix(create-docusaurus): give a clearer message when installation failed (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-classic +
      +
    • #6144 fix(theme-classic): fix translation when footer has no links (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
  • Other + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
+

Committers: 17

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.14.html.html b/changelog/2.0.0-beta.14.html.html new file mode 100644 index 0000000000..d81db31bd9 --- /dev/null +++ b/changelog/2.0.0-beta.14.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.15.html b/changelog/2.0.0-beta.15.html new file mode 100644 index 0000000000..a1f88a8fa7 --- /dev/null +++ b/changelog/2.0.0-beta.15.html @@ -0,0 +1,585 @@ + + + + + +2.0.0-beta.15 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.15

久染 | JiuRan
Abdelrahman Ahmed
AJ Rice
Alexandru Grigoras
Filipe Guerra
Amir M. Mohamadi
Anthony McCaigue
Armano
Brendan Nee
Devtato

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #6451 feat(content-docs): expose isCategoryIndex matcher to customize conventions (@Josh-Cena)
    • +
    • #5782 feat(content-docs): displayed_sidebar front matter (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #6416 feat(content-blog): allow authors list to contain images only (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #6371 feat(core, theme-classic): allow overriding htmlLang (@noomorph)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #6323 feat(mdx-loader): preserve hash in image src; support GH themed images (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #6139 feat(theme-classic): new navbar item linking to a sidebar (@lmpham1)
    • +
    • #6239 feat(content-docs): allow SEO metadata for category index pages (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #6248 feat(sitemap): remove trailingSlash option; respect noIndex config (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image, docusaurus-theme-translations +
      +
    • #6173 feat(ideal-image): allow translating status messages (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-ideal-image + +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus + +
  • +
  • docusaurus +
      +
    • #6165 feat(core): async docusaurus.config.js creator function (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-search-algolia +
      +
    • #6407 feat(search): enable contextual search by default (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia +
      +
    • #6289 refactor: move @theme/hooks to @docusaurus/theme-common (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6283 refactor(theme-classic): apply import/no-named-export eslint rule (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #6248 feat(sitemap): remove trailingSlash option; respect noIndex config (@Josh-Cena)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-types, docusaurus-utils-common, docusaurus-utils, docusaurus +
      +
    • #6454 fix(content-blog): generate feed by reading build output (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • docusaurus-mdx-loader +
      +
    • #4827 fix: allow links to JSON in .md files to be transformed as asset links (@antmcc49)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6435 fix(content-docs): make getActivePlugin match plugin paths more exactly (@Josh-Cena)
    • +
    • #6310 fix: highlight appropriate navItem when browsing generated category index (@tapanchudasama)
    • +
    • #6202 fix(content-docs): quotify path when retrieving git history (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #6424 fix(core): fix css url("image.png"), use css-loader v6 with esModules: false (@slorber)
    • +
    • #6378 fix(core): do not coerce webpack warning to string (@Josh-Cena)
    • +
    • #6197 fix(cli): quotify temp path in deploy command (@Josh-Cena)
    • +
    • #6168 fix(core): update webpack-dev-server + fix deprecation warning (@slorber)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-utils + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #6338 fix(core): error boundary should allow no children (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6314 fix(theme-classic): fix mobile version dropdown label with only one version (@Josh-Cena)
    • +
    • #6288 fix(theme-classic): add missing role=region to SkipToContent (@JoshuaKGoldberg)
    • +
    • #6213 refactor(theme-classic): extract common PaginatorNavLink component (@Josh-Cena)
    • +
    • #6177 fix(theme-classic): make React elements in pre render correctly (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #6300 refactor: move exported type definitions to declaration file (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate +
      +
    • #6276 fix(migrate): migration CLI should correctly migrate gtag options (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #6244 fix(content-blog): always convert front matter date as UTC (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-utils, docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-module-type-aliases +
      +
    • #6469 fix(module-type-aliases): fix type def for translate params (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #6407 feat(search): enable contextual search by default (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #6443 refactor(mdx-loader): use vfile.path to access Markdown file path (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6427 feat(theme-classic): add aria-current to sidebar category link (@Josh-Cena)
    • +
    • #6391 refactor(theme-classic): add comments to Prism setup; minor refactor (@Josh-Cena)
    • +
    • #6240 refactor(theme-classic): use front matter from metadata for BlogPostPage (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #6419 feat(core): warn users about hand-modifying generated files (@Josh-Cena)
    • +
    • #6405 feat(core): check imported API name when extracting translations (@Josh-Cena)
    • +
    • #6291 feat(core): improve error message for BrowserOnly; better docs (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #5822 feat: update website & init template palette to pass WCAG test; include contrast check in ColorGenerator (@Josh-Cena)
    • +
    • #6368 fix(create-docusaurus): add useBaseUrl for image URLs (@alias-mac)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #6400 feat(content-pages): front matter validation, include front matter in metadata (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic +
      +
    • #6339 feat(mdx-loader): read image dimensions when processing Markdown (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #6388 feat(content-blog): include tags in feed (@Josh-Cena)
    • +
    • #6189 feat(content-blog): include front matter in loaded content metadata (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #6317 feat(theme-classic): autoscroll TOC with active link (@cerkiewny)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-preset-classic +
      +
    • #6284 fix(preset-classic): throw if preset finds GA options in theme config (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus +
      +
    • #6186 refactor: print trailing new line when outputting JSON (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-debug, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #6440 chore: remove some unused dependencies from package.json (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6436 refactor(theme-classic): render BlogPostItem as one JSX element (@Josh-Cena)
    • +
    • #6283 refactor(theme-classic): apply import/no-named-export eslint rule (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-pages +
      +
    • #6413 fix(content-pages): declare hide_table_of_contents as boolean (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-cssnano-preset, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-theme-translations, docusaurus + +
  • +
  • docusaurus-utils + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-docs, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-common, docusaurus-utils, docusaurus, stylelint-copyright + +
  • +
  • create-docusaurus +
      +
    • #6373 chore: enable react/jsx-closing-bracket-location (@nschonni)
    • +
    +
  • +
  • docusaurus-theme-classic, stylelint-copyright + +
  • +
  • docusaurus-cssnano-preset, docusaurus-theme-classic + +
  • +
  • create-docusaurus, docusaurus-plugin-debug, docusaurus-theme-classic + +
  • +
  • docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-pages, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia +
      +
    • #6289 refactor: move @theme/hooks to @docusaurus/theme-common (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #6287 refactor: new @docusaurus/plugin-content-docs/client interface (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #6279 refactor(core): use native types from webpack-dev-server (@RDIL)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6277 refactor(content-docs): make readVersionsMetadata async (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • create-docusaurus, docusaurus-plugin-content-blog, docusaurus-utils, docusaurus +
      +
    • #6229 refactor(utils): reorganize functions; move authors file resolution to utils (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #6225 refactor(theme-translations): improve typing for update script (@Josh-Cena)
    • +
    • #6174 misc(theme-translations): multiple improvements to the update CLI (@Josh-Cena)
    • +
    +
  • +
+

Committers: 46

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.15.html.html b/changelog/2.0.0-beta.15.html.html new file mode 100644 index 0000000000..8f793d33a0 --- /dev/null +++ b/changelog/2.0.0-beta.15.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.16.html b/changelog/2.0.0-beta.16.html new file mode 100644 index 0000000000..ee301898d8 --- /dev/null +++ b/changelog/2.0.0-beta.16.html @@ -0,0 +1,494 @@ + + + + + +2.0.0-beta.16 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.16

Gaurish
Artem Kovalov
BigDataWriter
Clement Demonchy
CodeDoctor
CookieJarApps
Dmitry Vinnik
Dmitry Vinnik | Meta
Everardo J. Barojas M.
Erick Zhao

🚀 New Feature

+
    +
  • docusaurus-logger, docusaurus-module-type-aliases, docusaurus-plugin-debug, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-types, docusaurus + +
  • +
  • create-docusaurus +
      +
    • #6750 feat(create): new --package-manager option; interactive package manager selection (@Josh-Cena)
    • +
    • #6610 feat(create): allow specifying a git clone strategy (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6723 feat: sync color mode between browser tabs (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #6692 feat(search-algolia): allow disabling search page and configuring path (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #6593 feat(content-blog): infer blog post date from git history (@felipecrs)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6619 feat(content-docs): add custom props front matter (@TheCatLady)
    • +
    • #6452 feat(content-docs): allow explicitly disabling index page for generated category (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #6603 feat(content-blog): allow customizing blog archive component through option (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #6221 feat(content-blog): Allow pagination for BlogTagsPostsPage (@redhoyasa)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus, stylelint-copyright +
      +
    • #6752 chore: upgrade docsearch-react to v3 stable, bump dependencies (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types +
      +
    • #6729 refactor: make MDX export a flat TOC list instead of tree (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-types, docusaurus-utils-validation, docusaurus +
      +
    • #6740 refactor: remove deprecated Webpack utils & validation escape hatch (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #6707 refactor(theme-classic): bias again search metadata toward Algolia DocSearch (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-common, docusaurus +
      +
    • #6651 refactor: reduce exported members of docusaurus router (@Josh-Cena)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #6758 fix(theme-common): isSamePath should be case-insensitive (@slorber)
    • +
    • #6748 fix(theme-classic): temporarily disable toc heading autoscrolling (@slorber)
    • +
    • #6696 fix(theme-common): do not run useLocationChange when hot reloading (@lex111)
    • +
    • #6490 fix(theme-classic): do not switch color modes when printing (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6749 fix(theme-classic): fix breadcrumb home link bug with new useHomePageRoute() hook (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6720 fix(content-docs): create assets for frontmatter images (@lebalz)
    • +
    • #6592 fix(content-docs): read last update from inner git repositories (@felipecrs)
    • +
    • #6477 fix(content-docs): export versioning utils (@milesj)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #6712 fix(mdx-loader): make headings containing links properly formatted in ToC (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #6701 fix(cli): disable directory listing in serve (@Josh-Cena)
    • +
    • #6607 fix(cli): log error itself on unhandled rejection (@Josh-Cena)
    • +
    • #6500 fix(cli): allow passing a list of file names to write-heading-ids (@Josh-Cena)
    • +
    • #6496 fix(core): configValidation should allow inline theme functions (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6652 fix(theme-classic): minor BTT button fixes (@lex111)
    • +
    • #6612 fix(theme-classic): make Prism additional languages properly server-side rendered (@Josh-Cena)
    • +
    • #6599 fix(theme-classic): add docSidebar as allowed item in dropdown (@homotechsual)
    • +
    • #6531 fix(theme-classic): highlight active collapsible doc category properly (@lex111)
    • +
    • #6515 fix(theme-classic): add key prop for SimpleLinks map (@kgajera)
    • +
    • #6508 fix(theme-classic): apply width/height for footer logos without href (@kgajera)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #6617 fix(utils): convert Markdown links in reference-style links with multiple spaces (@Josh-Cena)
    • +
    • #6489 fix(utils): do not resolve Markdown paths with @site prefix (@Josh-Cena)
    • +
    • #6478 fix(utils): Markdown linkification match local paths beginning with http (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #6495 fix(content-docs): render category with no subitems as a normal link (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • create-docusaurus +
      +
    • #6679 feat(create): better detection of package manager preference (@lex111)
    • +
    • #6481 refactor(init): promote good practices; use site alias (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6745 fix(content-docs): improve sidebar shorthand normalization error message (@Josh-Cena)
    • +
    • #6602 feat(content-docs): allow omitting enclosing array consistently for category shorthand (@Josh-Cena)
    • +
    • #6596 refactor(content-docs): clean up sidebars logic; validate generator returns (@Josh-Cena)
    • +
    • #6586 refactor(content-docs): read category metadata files before autogenerating (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus + +
  • +
  • docusaurus-theme-translations +
      +
    • #6711 chore(theme-translations): complete Korean translations (@revi)
    • +
    • #6686 fix(theme-translations): improve Korean translations (@winterlood)
    • +
    • #6635 refactor(theme-translation): improve Traditional Chinese translation quality (@toto6038)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #6674 fix(theme-classic): improve aria label of color mode toggle (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #6668 refactor: recommend using data-theme without html element selector (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6622 refactor(theme-classic): clean up CSS of doc sidebar item (@lex111)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-utils-validation + +
  • +
  • docusaurus-mdx-loader, docusaurus-utils, lqip-loader +
      +
    • #6650 refactor(utils): replace hash with contenthash for file loader (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils + +
  • +
  • docusaurus-mdx-loader + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6505 fix(theme-classic): make focused link outlined with JS disabled (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils +
      +
    • #6498 fix: updating peerDependency fields for yarn berry (@vidarc)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-theme-translations + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-migrate + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #6744 fix(content-docs): properly display collocated social card image (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-types, docusaurus + +
  • +
  • docusaurus-module-type-aliases +
      +
    • #6741 chore(module-type-aliases): add react as peer dependency (@Josh-Cena)
    • +
    • #6658 refactor(module-aliases): remove react-helmet dependency (@Josh-Cena)
    • +
    +
  • +
  • Other +
      +
    • #6726 misc: improve bug report template (@Josh-Cena)
    • +
    • #6512 misc: configure linguist behavior to show better language stats (@Josh-Cena)
    • +
    • #6487 chore: fix codesandbox example link + mention npm publish recovery (@slorber)
    • +
    • #6486 chore: update examples for beta.15 (@slorber)
    • +
    • #6485 fix(website): bad translate tags without default translation (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-migrate, docusaurus +
      +
    • #6661 refactor: convert CLI entry points to ESM; migrate create-docusaurus to ESM (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-common, docusaurus +
      +
    • #6651 refactor: reduce exported members of docusaurus router (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #6629 refactor: move module declarations for non-route components to theme-classic (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus-theme-classic +
      +
    • #6614 refactor: remove Babel plugins that are included in preset-env (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus +
      +
    • #6605 chore: fix ESLint warnings, restrict export all syntax (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia + +
  • +
  • docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-common, docusaurus-utils, docusaurus, lqip-loader +
      +
    • #6524 refactor: enforce named capture groups; clean up regexes (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus +
      +
    • #6521 refactor: mark all functions that import external modules as async (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, stylelint-copyright + +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • create-docusaurus, docusaurus-utils + +
  • +
  • docusaurus-migrate, docusaurus-theme-common + +
  • +
  • docusaurus-mdx-loader, docusaurus-remark-plugin-npm2yarn, docusaurus + +
  • +
+

:running: Performance

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
+

Committers: 38

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.16.html.html b/changelog/2.0.0-beta.16.html.html new file mode 100644 index 0000000000..357a333bfc --- /dev/null +++ b/changelog/2.0.0-beta.16.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.17.html b/changelog/2.0.0-beta.17.html new file mode 100644 index 0000000000..265e532ac9 --- /dev/null +++ b/changelog/2.0.0-beta.17.html @@ -0,0 +1,184 @@ + + + + + +2.0.0-beta.17 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.17

Alex Nicholls
Ariful Alam
Dmitry Vinnik
David Stotijn
Joshua Chen
Nayan Patel
Sébastien Lorber
Vaibhav Shinde

🚀 New Feature

+
    +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic + +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6771 refactor(theme-classic): replace color mode toggle with button; remove switchConfig (@Josh-Cena)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #6827 fix(theme-classic): restore docusaurus search meta (@slorber)
    • +
    • #6767 fix(theme-classic): allow code tags containing inline elements to stay inline (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #6824 fix(theme-common): breadcrumbs home bug in docs-only (@slorber)
    • +
    • #6816 fix(theme-common): docs breadcrumbs not working with baseUrl (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6700 fix(content-docs): always sort autogenerated sidebar items by file/folder name by default (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #6812 fix(core): remove hash/query when filtering existing files for broken link check (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #6779 fix(mdx-loader): suppress image reading warning in Yarn PnP; log warning instead of error (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-common +
      +
    • #6826 refactor(theme-common): unify missing context errors (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6771 refactor(theme-classic): replace color mode toggle with button; remove switchConfig (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6769 refactor(theme-classic): use Material icon for language dropdown (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #6792 fix(mdx-loader): allow image paths to be URL encoded (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #6821 test(content-docs): refactor navigation test snapshot (@Josh-Cena)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-utils +
      +
    • #6773 refactor(utils): categorize functions into separate files (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate + +
  • +
+

Committers: 8

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.17.html.html b/changelog/2.0.0-beta.17.html.html new file mode 100644 index 0000000000..364f943db6 --- /dev/null +++ b/changelog/2.0.0-beta.17.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.18.html b/changelog/2.0.0-beta.18.html new file mode 100644 index 0000000000..cf9575bb78 --- /dev/null +++ b/changelog/2.0.0-beta.18.html @@ -0,0 +1,460 @@ + + + + + +2.0.0-beta.18 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.18

Afonso Jorge Ramos
Alessandro Festa
Alois Klink
Ariful Alam
Billy Chan
Ngô Quốc Đạt
Evan
Bugo
Felipe Santos
Kyohei Fukuda

🚀 New Feature

+
    +
  • docusaurus-mdx-loader, docusaurus-theme-classic +
      +
    • #6990 feat: lazy-load external images + ability to customize image display (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus +
      +
    • #6933 feat(core,theme): useRouteContext + HtmlClassNameProvider (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #6921 feat(core): allow plugin lifecycles to return relative paths (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #6780 feat(content-docs): allow custom props through category.json (@taejs)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #6859 feat(content-docs): autogenerate category with linked doc metadata as fallback (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus +
      +
    • #6925 refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6895 refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config (@slorber)
    • +
    • #6930 refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #6993 fix(core): prevent useBaseUrl returning /base/base when on /base (@Josh-Cena)
    • +
    • #6936 fix: remove semicolon from HTML output (@lex111)
    • +
    • #6849 fix(cli): write-heading-id should not generate colliding slugs when not overwriting (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6983 fix(search): bump Infima, fix search issue due to broken CSS selector (@slorber)
    • +
    +
  • +
  • docusaurus-utils-validation +
      +
    • #6977 fix(validation): allow non-object params to remark/rehype plugins (@aloisklink)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #6973 fix(content-docs): suppress git error on multiple occurrences (@felipecrs)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #6947 fix(content-blog): only create archive route if there are blog posts (@Josh-Cena)
    • +
    • #6918 fix(content-blog): remove double leading slash in blog-only paginated view (@heowc)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #6888 fix(theme-algolia): declare content-docs as dependency (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #6859 feat(content-docs): autogenerate category with linked doc metadata as fallback (@Josh-Cena)
    • +
    • #6887 fix(content-docs): give context about sidebar loading failure (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils-validation, docusaurus +
      +
    • #6997 fix(validation): improve error messages for a few schemas (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #6971 refactor: improve a11y of dropdown menu (@lex111)
    • +
    • #6987 refactor(theme-classic): cleanup of code blocks (@lex111)
    • +
    • #6950 refactor(theme-classic): clean up CSS of doc cards (@lex111)
    • +
    • #6994 refactor: better external link icon positioning (@lex111)
    • +
    • #6989 refactor: extract MDX components (@slorber)
    • +
    • #6985 refactor(theme-classic): remove span wrappers from layout links (@lex111)
    • +
    • #6986 fix(theme-classic): minor code copy button improvements (@Josh-Cena)
    • +
    • #6964 refactor: replace text-based copy code button with icons (@lex111)
    • +
    • #6932 refactor(theme-classic): little breadcrumbs improvements (@lex111)
    • +
    • #6914 feat(theme-classic): set aria-expanded on expandable sidebar categories (@pkowaluk)
    • +
    • #6844 refactor(theme-classic): split sidebar into smaller parts (@slorber)
    • +
    • #6846 refactor(theme-classic): consistently add span wrapper for layout links (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-common + +
  • +
  • docusaurus +
      +
    • #6784 feat(core): allow configureWebpack to return undefined (@yorkie)
    • +
    • #6941 refactor(core): improve error message when a page has no default-export (@Josh-Cena)
    • +
    • #6878 fix(core): ensure stable webpack theme aliases sorting (@jrvidal)
    • +
    • #6854 fix(core): fix swizzle legend typo (@DigiPie)
    • +
    • #6850 fix(core): make plugin lifecycles consistently bound to the plugin instance (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus +
      +
    • #6925 refactor(theme-{classic,common}): refactor site/page/search metadata + apply className on html element (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6895 refactor(theme-{classic,common}): split navbar into smaller components + cleanup + swizzle config (@slorber)
    • +
    • #6930 refactor(theme-{classic,common}): refactor ColorModeToggle + useColorMode() hook (@lex111)
    • +
    • #6894 refactor(theme-classic): split theme footer into smaller components + swizzle config (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap +
      +
    • #6928 chore(pwa, sitemap, client-redirects, ideal-image): JSDoc for types (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-utils +
      +
    • #6922 refactor(content-blog): clean up type definitions; in-code documentation (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #6781 feat(theme-translations): complete Russian translations (@dragomano)
    • +
    • #6877 chore(theme-translations): complete Vietnamese translations (@datlechin)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #6909 refactor(content-blog): improve error message of authors map validation (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #6860 fix(create): load entry file after node version checking (@taejs)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader +
      +
    • #6995 refactor: ensure all types are using index signature instead of Record (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • lqip-loader + +
  • +
  • docusaurus +
      +
    • #6975 chore: update static-site-generator-webpack-plugin (@slorber)
    • +
    +
  • +
  • stylelint-copyright + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-validation, docusaurus + +
  • +
  • docusaurus-types + +
  • +
  • docusaurus-theme-common, docusaurus +
      +
    • #6956 test: improve test coverage; reorder theme-common files (@Josh-Cena)
    • +
    • #6955 refactor(core): move browserContext and docusaurusContext out of client exports (@Josh-Cena)
    • +
    • #6944 chore: migrate Jest and website to SWC (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils, docusaurus, stylelint-copyright + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-client-redirects +
      +
    • #6924 refactor(client-redirects): migrate validation to validateOptions lifecycle (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus, stylelint-copyright +
      +
    • #6912 test: improve test coverage; multiple internal refactors (@Josh-Cena)
    • +
    +
  • +
  • Other +
      +
    • #6910 refactor: convert Jest infrastructure to TS (@Josh-Cena)
    • +
    • #6838 fix(website): changelog plugin leads to CI bugs on release (@slorber)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus +
      +
    • #6905 test: improve test coverage; properly test core client APIs (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-common, docusaurus-types, docusaurus-utils-common, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
  • docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader +
      +
    • #6898 refactor: import jest as global; unify import style of some modules (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #6891 refactor(theme-classic): avoid using clsx class dict with CSS modules (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-translations, docusaurus-utils, docusaurus +
      +
    • #6880 refactor: prefer fs.outputFile to ensureDir + writeFile (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus-types, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus, lqip-loader +
      +
    • #6864 refactor: remove unnecessary default values normalized during validation (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-migrate, docusaurus +
      +
    • #6861 refactor: make JS executables included in the tsconfig for editor hints (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus + +
  • +
  • docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-utils-common, docusaurus-utils, docusaurus, lqip-loader + +
  • +
+

Committers: 28

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.18.html.html b/changelog/2.0.0-beta.18.html.html new file mode 100644 index 0000000000..36e5e7901e --- /dev/null +++ b/changelog/2.0.0-beta.18.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.19.html b/changelog/2.0.0-beta.19.html new file mode 100644 index 0000000000..a0832e8f4a --- /dev/null +++ b/changelog/2.0.0-beta.19.html @@ -0,0 +1,559 @@ + + + + + +2.0.0-beta.19 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.19

Aaron Nwabuoku
AkiraVoid
Andrew Lyons
apq
ApsarasX
chelproc
Viktor Chernodub
curatorcat.pcc.eth
Cwen Yin
Fusang❀

🚀 New Feature

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7178 feat(theme-classic): extensible code block magic comment system (@Josh-Cena)
    • +
    • #7007 feat(theme-classic): code block showLineNumbers (@lex111)
    • +
    • #7012 feat(theme-classic): show blog sidebar on mobile (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock, docusaurus, eslint-plugin +
      +
    • #7206 feat: Docusaurus ESLint plugin to enforce best Docusaurus practices (@elias-pap)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #6732 feat(core): rework client modules lifecycles, officially make API public (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7231 feat: allow custom navbarItem types to pass through validation (@slorber)
    • +
    • #7058 feat(theme-classic): new 'html' type navbar item (@lex111)
    • +
    • #7079 feat: allow using pure HTML as label in navbar links (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations +
      +
    • #7036 feat(theme-classic): toggle code wrap button (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus +
      +
    • #6430 feat: allow setting calendar for i18n date formatting (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-docs, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7106 feat(content-docs): make docs:version command work on localized docs (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #7082 feat(core): allow plugins to declare custom route context (@Josh-Cena)
    • +
    • #7124 feat(core): allow plugin/preset config to contain false/null (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-sitemap, docusaurus-utils + +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-types, docusaurus +
      +
    • #7257 refactor: remove long-deprecated routesLoaded lifecycle (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7277 refactor(theme-classic): move all sidebar-related config under themeConfig.docs.sidebar (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #6732 feat(core): rework client modules lifecycles, officially make API public (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #7176 refactor: customize code block line highlight color via CSS var (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-validation, docusaurus-utils +
      +
    • #7117 refactor(content-{blog,docs}): unify handling of tags (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #7027 refactor(content-docs): deduplicate types, JSDoc for some APIs (@Josh-Cena)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #7304 fix(theme-classic): remove breadcrumb items without href from microdata (@Josh-Cena)
    • +
    • #7179 fix(theme-classic): do not add microdata item prop to trailing breadcrumb (@Josh-Cena)
    • +
    • #7173 fix(theme-classic): admonition title: disable text-transform on inline code blocks (@chelproc)
    • +
    • #7048 fix(theme-classic): add caret for dropdown on mobile (@lex111)
    • +
    • #7025 fix: make docs page wrapper take full height (@lex111)
    • +
    • #7013 fix(theme-classic): adjust shadow on code block (@chernodub)
    • +
    • #7015 fix(theme-classic): do not add caret for non-collapsible categories (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic +
      +
    • #7294 fix(*): make TypeScript realize that each plugin package has a default export (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7233 fix(content-docs): make category index text translatable (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7200 fix(theme-common): do not persist color mode for OS-triggered changes (@Josh-Cena)
    • +
    • #7057 fix(theme-common): use native scrolling when smooth behavior set in CSS (@Josh-Cena)
    • +
    • #7033 fix(theme): only parse HTML- and JSX-style comments in MD code (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #7212 fix(content-blog): make footnote reference DOM ID unique on post listing page (@AkiraVoid)
    • +
    +
  • +
  • docusaurus-utils, docusaurus +
      +
    • #7187 fix(core): handle case where package.json is not available at CWD (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #7222 fix(theme-translations): fix invalid pluralization in cs (@Josh-Cena)
    • +
    • #7166 fix(theme-translations): always try all possible locale resolutions (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-search-algolia +
      +
    • #7164 fix: adjust spacing for custom search properly (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-types, docusaurus +
      +
    • #7143 fix(sitemap): exclude pages with robots noindex from sitemap (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-types + +
  • +
  • docusaurus-utils +
      +
    • #7043 fix(utils): parse Markdown headings with CRLF line break (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-types +
      +
    • #7014 fix(types): declare history and react-loadable as dependencies (@sulu5890)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #7299 refactor: minor improvements for breadcrumbs (@lex111)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7290 refactor(create): add i18n config in init template (@Josh-Cena)
    • +
    • #7286 refactor(create): update screenshots in quick start tutorial (@Josh-Cena)
    • +
    • #7223 refactor: use generated-index in init templates (@slorber)
    • +
    • #7118 refactor(create): mention that the edit links can be removed (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-debug, docusaurus-types, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7267 fix(theme-common): allow details to not provide a summary (@Josh-Cena)
    • +
    • #7172 refactor: control base styling of code blocks via CSS vars (@lex111)
    • +
    • #7129 refactor(theme-classic): fix a few margin inconsistencies (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #7248 refactor: normalize Markdown linkification behavior, elaborate in documentation (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7244 refactor: semantic markup improvement, fix validation warnings (@Josh-Cena)
    • +
    • #7183 refactor: use SVG icon for home breadcrumb (@Dr-Electron)
    • +
    • #7139 fix: proper spacing between generated card items on mobiles (@lex111)
    • +
    • #7134 fix(theme-classic): fix docs sidebar layout shifts when expanding categories (@slorber)
    • +
    • #7068 refactor(theme-classic): blog mobile secondary menu use consistent styles (@Josh-Cena)
    • +
    • #7004 fix(theme-classic): shrink title size on mobile (@Pierre-Gilles)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #7214 chore(theme-translations): complete Polish translations (@rev4324)
    • +
    • #7031 chore(theme-translations): complete German translations (@deployn)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #7176 refactor: customize code block line highlight color via CSS var (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #7218 fix(cli): always show error stack to unhandled rejection (@Josh-Cena)
    • +
    • #7142 refactor(core): lower timeout before rendering progress bar to 200ms (@Josh-Cena)
    • +
    • #7103 fix(core): preserve Interpolate children semantics (@Josh-Cena)
    • +
    • #7029 refactor: console output improvements (@lex111)
    • +
    • #7017 refactor: remove copyright comment from swizzled components (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-preset-classic, docusaurus-theme-classic + +
  • +
  • docusaurus-plugin-debug, docusaurus-preset-classic +
      +
    • #7122 feat(preset-classic): exclude debug plugin routes from sitemap (@lex111)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-types, docusaurus-utils-validation, docusaurus +
      +
    • #7080 refactor: replace non-prop interface with type; allow plugin lifecycles to have sync type (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-plugin-content-docs, docusaurus +
      +
    • #7019 feat(logger): new "url" format, add double quotes around paths (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic + +
  • +
+

📝 Documentation

+
    +
  • docusaurus-logger +
      +
    • #7305 docs: update docs for logger, add API docs to website (@Josh-Cena)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #7248 refactor: normalize Markdown linkification behavior, elaborate in documentation (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-utils + +
  • +
+

🔧 Maintenance

+
    +
  • Other + +
  • +
  • docusaurus-logger, docusaurus-remark-plugin-npm2yarn +
      +
    • #7295 refactor: use export = syntax for Node utility packages (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus +
      +
    • #7293 refactor(types): move non-core, non-public types out of the types package (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-types, docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7273 refactor(theme-classic): multiple re-arrangements (@Josh-Cena)
    • +
    • #7268 refactor(theme-classic): DocPage theme refactors polish (@slorber)
    • +
    • #7269 refactor: extract useSkipToContent() (@slorber)
    • +
    • #7175 refactor(theme-classic): split CodeBlock (@slorber)
    • +
    • #7067 refactor(theme-classic): extract doc-related navbar items' logic to theme-common (@Josh-Cena)
    • +
    • #7021 refactor(theme): extract plumbing code of BTT button into theme-common (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7270 refactor(theme-classic): refactor TOC-related theme components (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #7220 refactor(cli): normalize the application of default option values (@Josh-Cena)
    • +
    • #7141 refactor(core): minor PendingNavigation refactor (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7243 chore: upgrade Jest to 28; add GitHub-actions reporter (@Josh-Cena)
    • +
    • #7140 refactor(content-docs): split version handling into several files (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-live-codeblock, docusaurus + +
  • +
  • create-docusaurus, docusaurus-migrate, docusaurus-theme-translations, docusaurus +
      +
    • #7186 refactor: prefer fs.readJSON over readFile.then(JSON.parse) (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages +
      +
    • #7145 refactor: unify how MDX content types are represented (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-theme-common, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #7027 refactor(content-docs): deduplicate types, JSDoc for some APIs (@Josh-Cena)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils-common +
      +
    • #7085 refactor: mark a few client-side packages as side-effect-free (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-remark-plugin-npm2yarn +
      +
    • #4997 perf(mdx-loader): cache mdx/remark compiler instances (@phryneas)
    • +
    +
  • +
+

Committers: 47

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.19.html.html b/changelog/2.0.0-beta.19.html.html new file mode 100644 index 0000000000..410c77eb0d --- /dev/null +++ b/changelog/2.0.0-beta.19.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.2.html b/changelog/2.0.0-beta.2.html new file mode 100644 index 0000000000..2a31d4e53f --- /dev/null +++ b/changelog/2.0.0-beta.2.html @@ -0,0 +1,182 @@ + + + + + +2.0.0-beta.2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.2

Eshan Tripathi
Felipe Santos
Joshua Chen
Jules Sam. Randolph
Alexey Pyltsyn
ZhengYuan Loo
Manuel Meurer
Rami Yushuvaev
Sébastien Lorber
Teik Jun

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #5052 feat(v2): docs version banner configuration option (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus +
      +
    • #5037 feat(v2): plugins injectHtmlTags + configureWebpack should receive content loaded (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #5053 refactor(v2): remove deprecated docs option excludeNextVersionDocs (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #5052 feat(v2): docs version banner configuration option (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-blog, docusaurus-types, docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #5048 fix(v2): read last update from inner git repositories (@felipecrs)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5050 fix(v2): add shadow to skip link on focus only (@lex111)
    • +
    • #5035 fix(v2): fix some docs container/sidebar layout issues (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #5047 fix(v2): Fix Webpack persistent caching (evict on swizzle/alias/config change) (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5023 fix(v2): ignore hash changes in useChangeRoute hook (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils-validation +
      +
    • #5032 fix(v2): less strict blog/docs uri frontmatter validation (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #5053 refactor(v2): remove deprecated docs option excludeNextVersionDocs (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
+

📝 Documentation

+
    +
  • Other + +
  • +
  • docusaurus +
      +
    • #5033 docs(v2): GH pages: recommend using trailingSlash (@slorber)
    • +
    +
  • +
+

🏠 Internal

+
    +
  • #5005 chore: add archived versions system + archive alpha.73-75 (@slorber)
  • +
+

Committers: 11

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.2.html.html b/changelog/2.0.0-beta.2.html.html new file mode 100644 index 0000000000..befcfbc187 --- /dev/null +++ b/changelog/2.0.0-beta.2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.20.html b/changelog/2.0.0-beta.20.html new file mode 100644 index 0000000000..a5b51ad323 --- /dev/null +++ b/changelog/2.0.0-beta.20.html @@ -0,0 +1,88 @@ + + + + + +2.0.0-beta.20 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.20

Joshua Chen
Alexey Pyltsyn
Steven Hicks
Reece Dunham
Sergey Gromkov
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #7342 fix: avoid flash of page scrolling to top on refresh (@slorber)
    • +
    • #7329 fix(core): inject docusaurus version into SSR as local (@RDIL)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7341 fix(theme-classic): properly highlight code block line numbers (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7334 feat(website): make canary release page display actual canary version name (@Josh-Cena)
  • +
  • #7343 docs: add page for create-docusaurus API documentation (@Josh-Cena)
  • +
  • #7340 docs: add Yandex Metrika plugin to community plugins (@sgromkov)
  • +
  • #7336 fix(website): fix multiple accessibility issues around color contrast (@Josh-Cena)
  • +
  • #7327 docs: add clarity to versioning behavior (@pepopowitz)
  • +
+

Committers: 6

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.20.html.html b/changelog/2.0.0-beta.20.html.html new file mode 100644 index 0000000000..3bd57cb98c --- /dev/null +++ b/changelog/2.0.0-beta.20.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.21.html b/changelog/2.0.0-beta.21.html new file mode 100644 index 0000000000..a48172c8d5 --- /dev/null +++ b/changelog/2.0.0-beta.21.html @@ -0,0 +1,240 @@ + + + + + +2.0.0-beta.21 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.21

Benjamin Diolez
Charles Korn
Ngô Quốc Đạt
Designatory
Forresst
凱恩 Kane
Ggicci
Joshua Chen
Jan Peer Stöcklmair
Jeremy

💥 Breaking Change

+
    +
  • docusaurus-plugin-pwa +
      +
    • #7422 refactor(pwa): remove reloadPopup option in favor of swizzling (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-plugin-sitemap + +
  • +
  • docusaurus-utils, docusaurus +
      +
    • #7371 feat(core): support docusaurus.config.cjs as default file name (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #7357 feat(theme-classic): allow className as option for type: "search" (@JPeer264)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #7424 fix(gtag): send the newly rendered page's title instead of the old one's (@ori-shalom)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #7507 fix(create-docusaurus): potential security issue with command injection (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #7492 fix(core): always treat error boundary fallback as a callback (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7438 fix(theme-classic): allow nested task lists to preserve the indent (@Josh-Cena)
    • +
    • #7430 fix(theme-classic): consistently apply the right active class name for all navbar items (@Josh-Cena)
    • +
    • #7411 fix(theme-classic): autocollapse sidebar categories when navigating with paginator (@pranabdas)
    • +
    • #7363 fix(theme-classic): resolve customCss from site dir (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7464 fix(utils): fix Markdown link replacement when link text is same as href (@Josh-Cena)
    • +
    • #7458 fix(utils): avoid replacing Markdown links missing the directly next link (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #7392 fix(mdx-loader): use React.Fragment as fragment factory (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7385 fix(content-docs): restore functionality when a category only has index page (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus +
      +
    • #7499 fix: avoid printing period after localhost URL (@Zamiell)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7374 refactor(create): clean up logic when prompting for unspecified arguments (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7503 docs: document MDXComponents scope (@Josh-Cena)
  • +
  • #7497 docs: link every reference of types in API table to the type definition (@Zamiell)
  • +
  • #7407 docs: add Azure SWA as deployment option (@nitya)
  • +
  • #7390 fix(website): use react-lite-youtube-embed for lazy YouTube video (@matkoch)
  • +
+

🔧 Maintenance

+
    +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations + +
  • +
  • stylelint-copyright + +
  • +
  • docusaurus-cssnano-preset + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader +
      +
    • #7437 refactor: use TS project references instead of running tsc multiple times (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus-theme-classic +
      +
    • #7415 refactor(theme-classic): always collocate stylesheets with components in one folder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
+

Committers: 23

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.21.html.html b/changelog/2.0.0-beta.21.html.html new file mode 100644 index 0000000000..fd0d92494f --- /dev/null +++ b/changelog/2.0.0-beta.21.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.22.html b/changelog/2.0.0-beta.22.html new file mode 100644 index 0000000000..bd55cc8e13 --- /dev/null +++ b/changelog/2.0.0-beta.22.html @@ -0,0 +1,351 @@ + + + + + +2.0.0-beta.22 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.22

Flávio Silva
7Wate
赤城结衣
alewolf
Alexander Nestorov
Ahmed Altomy
Sunghyun Cho
Benjamin Cabanes
Ben Myers
Boulet

💥 Breaking Change

+
    +
  • docusaurus-theme-classic +
      +
    • #7740 refactor(theme): nest theme icons under subfolder @theme/Icon/* (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7716 refactor(theme): split BlogPostItem into smaller theme subcomponents (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7660 refactor(theme-common): split package into public/internal API entrypoints (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7644 refactor(docs,theme): split DocItem comp, useDoc hook (@slorber)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7642 refactor: remove "error" reporting level, move reportMessage to logger (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus +
      +
    • #7152 refactor: handle all admonitions via JSX component (@lex111)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-theme-search-algolia, docusaurus-theme-translations +
      +
    • #7666 feat(algolia-search): allow translating search modal (@forresst)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7643 feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #7649 feat(client-redirects): make plugin respect onDuplicateRoutes config (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7624 feat: allow customizing localization path of each locale (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7557 feat: allow specifying custom target for FooterLogo (@vannyle)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations +
      +
    • #7556 feat: add admonition type title translations (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7386 feat(core): allow customizing the i18n directory path (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #7514 feat(live-codeblock): add support for noInline to interactive code blocks (@jpdriver)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #7727 fix(theme): show blog post edit link even when no tag & not truncated (@anaclumos)
    • +
    • #7659 fix(theme-classic): expose empty string alt text in navbar logos (@BenDMyers)
    • +
    • #7595 fix(content-pages): add article wrapper around MDXContent (@matkoch)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7638 fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category (@slorber)
    • +
    • #7634 fix(content-docs): allow translating doc labels in sidebars.js (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7604 fix(utils): allow any non-boundary characters in Markdown heading ID (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-cssnano-preset +
      +
    • #7593 fix(cssnano-preset): disable z-index minification (@dpang314)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7551 fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word (@slorber)
    • +
    • #7485 fix(theme-classic): inconsistent code block wrapping (@dpang314)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-common, docusaurus-utils + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7673 fix(content-docs): format last update date as "Jun 19, 2020" (@sigwinch28)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7671 refactor(theme-common): rename useDynamicCallback to useEvent (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7648 fix(theme-common): make useShallowMemoObject key-order-insensitive (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7639 chore(create): update the facebook template with current assets (@zpao)
    • +
    • #7520 feat: add engines field to templates' package.json (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus +
      +
    • #7579 refactor(pwa): simplify registerSW code, fix ESLint errors (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag + +
  • +
+

📝 Documentation

+ +

🔧 Maintenance

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7676 refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7674 chore: prevent importing theme components with relative paths (@slorber)
    • +
    • #7664 chore: upgrade Infima to alpha.40 (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus +
      +
    • #7583 refactor(cli): make the CLI an even thinner wrapper around command functions (@Josh-Cena)
    • +
    • #7547 chore: update static-site-generator-webpack-plugin (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 51

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.22.html.html b/changelog/2.0.0-beta.22.html.html new file mode 100644 index 0000000000..11f10efdcf --- /dev/null +++ b/changelog/2.0.0-beta.22.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.3.html b/changelog/2.0.0-beta.3.html new file mode 100644 index 0000000000..9c41844478 --- /dev/null +++ b/changelog/2.0.0-beta.3.html @@ -0,0 +1,148 @@ + + + + + +2.0.0-beta.3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.3

Adam Uhlíř
bperlmutter
dirslashls
Ayush das
Joshua Chen
Jules Sam. Randolph
Danny Lin
Alexey Pyltsyn
Rami Yushuvaev
Sébastien Lorber

🚀 New Feature

+
    +
  • docusaurus-theme-classic +
      +
    • #5092 feat(v2): add icon to external footer links (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #5080 fix(v2): classic theme - semantic correct anchors links (@AuHau)
    • +
    • #5081 fix(v2): restore previous scroll position on back button click (@lex111)
    • +
    • #5063 fix(v2): restore responsive menu (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #5094 fix(v2): fix typos in swizzle command (@Josh-Cena)
    • +
    • #5095 fix(v2): fix swizzle readComponent (@slorber)
    • +
    • #5059 fix(v2): fix webpack SSG plugin error thrown due to new URL() / __filename (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #5097 fix(v2): fix useEffect infinite loop in blogOnly mode (@slorber)
    • +
    • #5074 fix(v2): allow negative sidebar positions (@kdrag0n)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #5093 fix(v2): redirect from should work with trailingSlash: true (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils +
      +
    • #5085 fix(v2): redirect plugin should emit redirect files with lower precedence than redirect target (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-sitemap, docusaurus-types, docusaurus-utils-common, docusaurus +
      +
    • #5082 fix(v2): never remove trailing slash from site root like '/baseUrl/' (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #5068 fix(v2): sitemap should respect the global trailingSlash config option. (@taylorreece)
    • +
    +
  • +
  • docusaurus-types +
      +
    • #5058 fix(v2): fix bad @docusaurus/types Plugin type generics (@jsamr)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-types + +
  • +
  • Other + +
  • +
+

Committers: 11

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.3.html.html b/changelog/2.0.0-beta.3.html.html new file mode 100644 index 0000000000..f4064bdcaf --- /dev/null +++ b/changelog/2.0.0-beta.3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.4.html b/changelog/2.0.0-beta.4.html new file mode 100644 index 0000000000..cff328f2db --- /dev/null +++ b/changelog/2.0.0-beta.4.html @@ -0,0 +1,293 @@ + + + + + +2.0.0-beta.4 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.4

antonvasilev52
Arnaud Jeannin
Christian Flach
Arijit Kundu
David Zhao
David Barrat
Dan Gebhardt
François Massot
Forresst
Joshua Chen

🚀 New Feature

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-init +
      +
    • #5235 feat: docusaurus.new + improve StackBlitz playground integration (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5203 feat: docs plugin options sidebarCollapsible + sidebarCollapsed (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus +
      +
    • #4273 feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu (@lex111)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5203 feat: docs plugin options sidebarCollapsible + sidebarCollapsed (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils, docusaurus +
      +
    • #5173 feat(v2): generalize usage of _ prefix convention to exclude content files/folders (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus +
      +
    • #4273 feat(v2): redesign mobile UX: inline TOC + doc sidebar in main menu (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-blog +
      +
    • #5232 fix(v2): blog should parse frontMatter.date even when time is present (@wenerme)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5230 fix(v2): remove top margin from first element inside doc article (@lex111)
    • +
    • #5229 fix(v2): keep mobile TOC after hydration (@lex111)
    • +
    • #5179 fix(v2): wrap dropdown item to missing li element + remove extra attributes (@lex111)
    • +
    • #5183 fix(v2): pass all props to CodeBlock component (@lex111)
    • +
    • #5176 fix(v2): Fix type for navlink label (@Josh-Cena)
    • +
    • #5172 fix(v2): hide mobile collapsible doc toc if no headings (@slorber)
    • +
    • #5161 fix(v2): disable default behavior when click on collapsible item (@lex111)
    • +
    • #5151 fix(v2): add missing french translations for mobile (@forresst)
    • +
    • #5104 fix(v2): fix SkipToContent programmatic focus when updating querystring (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia + +
  • +
  • docusaurus +
      +
    • #5204 fix: cli upgrade helper fail when no package.dependencies (@mweststrate)
    • +
    • #5164 fix(v2): revert webpack.resolve.symlinks = false (@slorber)
    • +
    • #5126 fix(v2): remove webpackConfig.resolve.symlinks: true (@slorber)
    • +
    • #5110 fix(v2): Fix update-notifier not run at first and not notifying consistently (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils +
      +
    • #5199 fix(v2): Fix MDX docs being considered as partials when siteDir match the _ prefix convention (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-pwa +
      +
    • #5185 fix(v2): add base URL to content attribute of head tags PWA (@lex111)
    • +
    • #5169 refactor(v2): automatically add base URL to PWA head tags (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils, docusaurus +
      +
    • #5173 feat(v2): generalize usage of _ prefix convention to exclude content files/folders (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #5159 fix(v2): Fix Collapsible hydration layout shift (@slorber)
    • +
    • #5146 fix(v2): improve work of useCollapsible hook with multiple clicks (@lex111)
    • +
    +
  • +
  • docusaurus-types + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5116 fix(v2): introduce useCollapsible to fix collapsible animation perf issues (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #5102 fix(v2): fix redirect plugin when trailingSlash=false for .html extension (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #5215 refactor: make code block shadows consistent with new admonitions (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #5193 refactor: redesign admonitions/callouts/quotes (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5168 refactor(v2): mobile dropdown navbar: expand when subitem become active (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • docusaurus-theme-classic + +
  • +
  • Other + +
  • +
+

:running: Performance

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5136 perf(v2): lazy sidebar categories / collapsibles, reduce html output / build times (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5130 test(v2): dogfooding: add huge sidebar for testing purposes (@slorber)
    • +
    +
  • +
+

Committers: 28

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.4.html.html b/changelog/2.0.0-beta.4.html.html new file mode 100644 index 0000000000..62ddfa3da5 --- /dev/null +++ b/changelog/2.0.0-beta.4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.5.html b/changelog/2.0.0-beta.5.html new file mode 100644 index 0000000000..b600984ab8 --- /dev/null +++ b/changelog/2.0.0-beta.5.html @@ -0,0 +1,352 @@ + + + + + +2.0.0-beta.5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.5

Palash Shrivastava
David Seal
Deepak Prabhakara
Erick Zhao
Federico Aloi
Forresst
Fouad Matin
Julien Neuhart
Hamza Hamidi
HaochenQ

🚀 New Feature

+
    +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-utils-validation +
      +
    • #5396 feat(plugin-blog): multi-authors support + authors.yml global configuration (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #5371 feat: make blog config options and navbar versions dropdown label translatable (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils + +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #5354 feat(plugin-blog): allow 'ALL' as postsPerPage option value (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-init + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-theme-classic +
      +
    • #5309 feat: blog posts support /YYYY/MM/DD/blog-post/index.md pattern + blog frontmatter can reference relative images (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus +
      +
    • #5299 feat: mdx loader fallback, allow importing mdx docs from anywhere (@slorber)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils + +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus +
      +
    • #5345 refactor: rename Git master branch to main (@zpao)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-types, docusaurus +
      +
    • #5349 refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5264 fix: apply proper class for active doc item on mobiles + avoid duplicated classes (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #5425 fix: toc does not highlight clicked anchor + use scroll-margin-top (@slorber)
    • +
    • #5424 refactor: make dynamic authors layout via CSS only (@lex111)
    • +
    • #5422 fix: make tags wrapping properly (@lex111)
    • +
    • #5419 fix: various fixes back-to-top button (@lex111)
    • +
    • #5361 fix: refactor TOC highlighting + handle edge cases (@slorber)
    • +
    • #5357 fix: code blocks should scroll in RTL direction (@slorber)
    • +
    • #5346 fix: author/image adjustments in BlogPosting schema (@lex111)
    • +
    • #5240 fix: remove top margin only from directly first element (@lex111)
    • +
    • #5317 fix: make proper highlighting doc link if no sidebar (@hamzahamidi)
    • +
    • #5316 fix: avoid extra default active class on doc sidebar item (@lex111)
    • +
    • #5319 fix: unbreak highlighting regular navbar links (@lex111)
    • +
    • #5264 fix: apply proper class for active doc item on mobiles + avoid duplicated classes (@lex111)
    • +
    • #5275 fix: improve spanish translation (@faloi)
    • +
    • #5262 fix: show secondary menu if even there is no main one (@lex111)
    • +
    +
  • +
  • docusaurus +
      +
    • #5426 fix: Make update-notifier fail-safe if no permission to read configStore (@slorber)
    • +
    • #5398 fix: fix write-translations warning for theme-common translations (@slorber)
    • +
    • #5381 fix: canary releases should ignore notifier updates (@slorber)
    • +
    • #5339 fix: add admonitions support to mdx partials loaded through the fallback mdx loader (@slorber)
    • +
    • #5311 fix: docusaurus serve logs wrong port if 3000 is taken (@wan-nyan-wan)
    • +
    • #5308 fix: remove unexpected whitespaces in CSS bundle (@lex111)
    • +
    • #5268 fix: fix wrong regex that removes extra letters from swizzled component names (@Josh-Cena)
    • +
    +
  • +
  • Other +
      +
    • #5399 fix: fix site unlocalized 404 pages + aggressive Netlify /assets caching (@slorber)
    • +
    • #5249 fix: fix Crowdin mapping for pt-BR (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #5383 fix: fix Locale Dropdown RTL icon + Webpack aliases ordering (@slorber)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #5370 fix(init): fix links to feature images in classic-typescript (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-common + +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #5334 fix: plugin ideal-image should generate filename with a hash even in development (@Pierre-Gilles)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #5290 fix: make successful build if missing favicon (@lex111)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #5270 fix: ability to link md files with relative paths when paths contain space (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-types + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-common +
      +
    • #5402 refactor: improve styles of Details component (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • Other +
      +
    • #5389 refactor: clean Canny integration + rename 'Feedback' to 'Feature Requests' + improve TS doc page (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other + +
  • +
  • docusaurus-init, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus +
      +
    • #5345 refactor: rename Git master branch to main (@zpao)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5341 polish: bind key listener to light/dark toggle + a11y lint fixes (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus + +
  • +
  • docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus +
      +
    • #5335 refactor: better typing + remove unnecessary eslint-disable (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #5338 refactor(plugin-blog): style improvements in blogUtils (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-init +
      +
    • #5315 refactor(init): share common files between templates (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common + +
  • +
+

:running: Performance

+
    +
  • docusaurus-module-type-aliases, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-types, docusaurus +
      +
    • #5349 refactor(core): replace useDocusaurusContext().isClient by useIsBrowser() (@slorber)
    • +
    +
  • +
+

Committers: 27

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.5.html.html b/changelog/2.0.0-beta.5.html.html new file mode 100644 index 0000000000..bd1c93bcf5 --- /dev/null +++ b/changelog/2.0.0-beta.5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.6.html b/changelog/2.0.0-beta.6.html new file mode 100644 index 0000000000..09fef08ebb --- /dev/null +++ b/changelog/2.0.0-beta.6.html @@ -0,0 +1,137 @@ + + + + + +2.0.0-beta.6 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.6

Ali Saki
Antony Messerli
farshid
Gabriel Csapo
Joshua Chen
Alexey Pyltsyn
Daniel Costrasel
Oscar Lorentzon
Rohit Gohri
Sébastien Lorber

🚀 New Feature

+
    +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-classic +
      +
    • #5460 feat: infima 33 + navbar-sidebar close button (@slorber)
    • +
    • #5442 feat(theme-classic): allow passing tab label and default value through TabItem (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #5454 feat: new docs options: versions.{badge,className} (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #5444 fix: fix some theme UI issues (blockquotes, navbar-sidebar font) with Infima alpha.32 (@slorber)
    • +
    • #5431 fix: some beta.5 bugfixes (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic + +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #5459 refactor(theme-classic): completely migrate package to TypeScript (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • #5455 fix: website bad version name in docusaurus.config.js (@slorber)
  • +
+

Committers: 10

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.6.html.html b/changelog/2.0.0-beta.6.html.html new file mode 100644 index 0000000000..228e129211 --- /dev/null +++ b/changelog/2.0.0-beta.6.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.7.html b/changelog/2.0.0-beta.7.html new file mode 100644 index 0000000000..9178468d84 --- /dev/null +++ b/changelog/2.0.0-beta.7.html @@ -0,0 +1,382 @@ + + + + + +2.0.0-beta.7 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.7

Aditya Kajla
Andrew Nguyen
Palash Shrivastava
Bharat Middha
David Callizaya
Chris Chinchilla
djamaile
Dr-Electron
Darshan Gada
Don

🚀 New Feature

+
    +
  • docusaurus-module-type-aliases, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5674 polish(theme-classic): guard against potential definition mistakes in Tabs (@Josh-Cena)
    • +
    • #5618 feat: maintain page position for clicked grouped tabs (@Shrugsy)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-utils +
      +
    • #4330 feat(content-blog): add full blog post html into RSS/Atom feeds (@moonrailgun)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5642 feat(theme-classic, plugin-docs): sidebar item level-specific className + allow customization (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #5635 feat: npm init docusaurus, yarn create docusaurus (@slorber)
    • +
    +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types +
      +
    • #5589 feat: properly type-check the Docusaurus config of new sites (@bmiddha)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-validation +
      +
    • #5578 feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) (@erickzhao)
    • +
    +
  • +
  • docusaurus +
      +
    • #5498 feat: make Webpack url-loader limit configurable (env variable) (@stnor)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs + +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5674 polish(theme-classic): guard against potential definition mistakes in Tabs (@Josh-Cena)
    • +
    • #5618 feat: maintain page position for clicked grouped tabs (@Shrugsy)
    • +
    +
  • +
  • docusaurus-init, docusaurus-preset-bootstrap, docusaurus-theme-bootstrap + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-validation +
      +
    • #5578 feat(v2): allow specifying TOC max depth (themeConfig + frontMatter) (@erickzhao)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5592 refactor: use CSS Modules for toggle styles (@lex111)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common + +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5699 fix: apply announcement bar class if only needed (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5667 fix: expand tag column on truncated post (@lex111)
    • +
    • #5668 fix: preserve line breaks when copy code in Firefox (@lex111)
    • +
    • #5647 feat(theme-classic): make first tab the default tab (@Josh-Cena)
    • +
    • #5652 fix: restore duplicate Tabs rendering to fix hydration issue (@slorber)
    • +
    • #5643 fix(theme-classic): reset default style for task lists (@EkaterinaMozheiko)
    • +
    • #5571 fix: highlight active item in recent post list (@lex111)
    • +
    • #5481 fix: use heading itself as anchor for better crawling (@lex111)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #5677 fix: Don't ignore options.transforms for buble (@ntucker)
    • +
    • #5556 fix: pin react-live due to possible mismatch React (@lex111)
    • +
    +
  • +
  • docusaurus-mdx-loader + +
  • +
  • docusaurus-plugin-ideal-image +
      +
    • #5540 fix: do not use ideal image plugin in dev env (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #5606 fix(docs): create tags route if only tags exists (@lex111)
    • +
    +
  • +
  • docusaurus-init, docusaurus-module-type-aliases, docusaurus-types +
      +
    • #5601 fix(module-type-aliases): move @type packages to dependencies (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #5495 fix: ignore code block lines when creating excerpt (@lex111)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #5490 fix: install deps for new project via Yarn on Windows properly (@lex111)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils-validation +
      +
    • #5479 fix: add docs tag validation to solve #5478 (@sw-yx)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-theme-classic, docusaurus-types, docusaurus +
      +
    • #5636 refactor: make all Props defined as interface + readonly (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus + +
  • +
  • docusaurus +
      +
    • #5580 refactor(core): type improvements for PendingNavigation (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #5496 refactor: remove deprecated createRequireFromPath (@lex111)
    • +
    +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • create-docusaurus, docusaurus-plugin-content-docs +
      +
    • #5678 refactor(content-docs): refactor sidebars, Joi validation, generator rework, expose config types (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5666 chore: upgrade Infima to alpha.34 (@lex111)
    • +
    • #5639 misc: update base translation + remove extra char (@lex111)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus-init, docusaurus-preset-bootstrap, docusaurus-theme-bootstrap + +
  • +
  • docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-bootstrap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-plugin-pwa, docusaurus +
      +
    • #5609 chore: upgrade Terser-related dependencies (@lex111)
    • +
    +
  • +
  • docusaurus-cssnano-preset, docusaurus-init, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus + +
  • +
  • docusaurus-preset-classic + +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-preset-classic +
      +
    • #5561 refactor(plugin-google-gtag, plugin-google-analytics): migrate packages to TS (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-preset-classic +
      +
    • #5579 refactor(preset-classic): migrate preset-classic to TypeScript (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-init +
      +
    • #5484 chore: regenerate beta.6 examples + fix regen script (@slorber)
    • +
    +
  • +
+

Committers: 36

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.7.html.html b/changelog/2.0.0-beta.7.html.html new file mode 100644 index 0000000000..f6fde9f757 --- /dev/null +++ b/changelog/2.0.0-beta.7.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.8.html b/changelog/2.0.0-beta.8.html new file mode 100644 index 0000000000..00229c8486 --- /dev/null +++ b/changelog/2.0.0-beta.8.html @@ -0,0 +1,180 @@ + + + + + +2.0.0-beta.8 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.8

Andrew Taft
Caner Canbaz
Ngô Quốc Đạt
Dimi Mikadze
Ilija Pavlic
John Reilly
Joshua Chen
Alexey Pyltsyn
Nathaniel Furniss
philipp985

🚀 New Feature

+
    +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus +
      +
    • #5740 feat(core): write-heading-ids options maintainCasing, overwrite (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #5705 feat(content-docs): new front matter options to customize pagination (@Josh-Cena)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • docusaurus-theme-search-algolia +
      +
    • #5751 fix: stable callbacks in useSearchQuery + refactor (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-ideal-image +
      +
    • #5760 fix(ideal-image): fix IdealImage in dev not handling ES import images properly (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #5732 fix(theme-classic): allow tabs with number as value (@Josh-Cena)
    • +
    • #5721 fix: handle rubber band scrolling in hideable navbar (@lex111)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #5751 fix: stable callbacks in useSearchQuery + refactor (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-ideal-image, docusaurus-theme-classic, docusaurus +
      +
    • #5726 refactor(module-type-aliases): remove fallback aliases (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • Other + +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #5753 fix(content-blog): temporarily swallow feed mdxToHtml errors + feed refactor (@slorber)
    • +
    +
  • +
+

🏠 Internal

+
    +
  • docusaurus +
      +
    • #5761 chore: upgrade html-webpack-plugin, remove terser 4 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus +
      +
    • #5714 chore: Enable ESLint rules of hooks + fix new lint errors (@slorber)
    • +
    +
  • +
  • Other + +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
+

Committers: 13

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.8.html.html b/changelog/2.0.0-beta.8.html.html new file mode 100644 index 0000000000..3998b2e5a8 --- /dev/null +++ b/changelog/2.0.0-beta.8.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-beta.9.html b/changelog/2.0.0-beta.9.html new file mode 100644 index 0000000000..854d2c9d49 --- /dev/null +++ b/changelog/2.0.0-beta.9.html @@ -0,0 +1,219 @@ + + + + + +2.0.0-beta.9 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-beta.9

Avi Vahl
Devtato
Ngô Quốc Đạt
Dominik Meyer
Dmitriy Fishman
Gabriel Falcão
Jeffrey Aven
Joshua Chen
琚致远
Alexey Pyltsyn

🚀 New Feature

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #5770 feat(theme-classic): allow specifying width/height in logo (@cerkiewny)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #5841 feat: allow user to specify deploymentBranch property in docusaurus.config.js (@wpyoga)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #5795 feat(search-algolia): algolia externalUrl regex to navigate with window.href (@semoal)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-types, docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #5791 feat(theme-classic): add Serbian Cyrillic translation (@utajum)
    • +
    +
  • +
+

💥 Breaking Change

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-blog +
      +
    • #5835 fix(content-blog): Fix blog feeds not generated (@slorber)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-module-type-aliases, docusaurus +
      +
    • #5819 fix: use @docusaurus/react-loadable as package alias + include types (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-preset-classic +
      +
    • #5831 feat(preset-classic): guard against unknown keys in options (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #5815 refactor: some improvements for webpack-dev-server (@lex111)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic + +
  • +
+

📝 Documentation

+ +

🏠 Internal

+
    +
  • Other + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader + +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus +
      +
    • #5807 refactor: remove a few Lodash usages & ESLint enforcement (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, lqip-loader +
      +
    • #5779 refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders (@Josh-Cena)
    • +
    +
  • +
+

Committers: 18

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-beta.9.html.html b/changelog/2.0.0-beta.9.html.html new file mode 100644 index 0000000000..1b0b073092 --- /dev/null +++ b/changelog/2.0.0-beta.9.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0-rc.1.html b/changelog/2.0.0-rc.1.html new file mode 100644 index 0000000000..1f23393498 --- /dev/null +++ b/changelog/2.0.0-rc.1.html @@ -0,0 +1,127 @@ + + + + + +2.0.0-rc.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.0.0-rc.1

Sunghyun Cho
Evan
凱恩 Kane
Wes McNamee
Jeffrey Aven
Joshua Chen
LichLord91
Bruce Song
Arthur Brugière
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus +
      +
    • #7776 fix(core): swizzle --eject js should not copy theme .d.ts files (@slorber)
    • +
    • #7750 fix(deploy): revert "feat(deploy): copy local git config to tmp repo (#7702)" (@ghostsquad)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7774 fix(sitemap): complete gracefully when all pages have noIndex meta (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #7761 fix(algolia-search): test for canUseIntersectionObserver (@RoiArthurB)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #7706 docs: release process, versioning, breaking changes, public API surface (@slorber)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-classic +
      +
    • #7777 refactor(theme): fix duplicate page metadata usage (@slorber)
    • +
    • #7771 chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug (@slorber)
    • +
    +
  • +
+

Committers: 11

+
+ + \ No newline at end of file diff --git a/changelog/2.0.0-rc.1.html.html b/changelog/2.0.0-rc.1.html.html new file mode 100644 index 0000000000..b8d1a78d09 --- /dev/null +++ b/changelog/2.0.0-rc.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.0.html b/changelog/2.0.0.html new file mode 100644 index 0000000000..5f639b2d8d --- /dev/null +++ b/changelog/2.0.0.html @@ -0,0 +1,71 @@ + + + + + +2.0.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.0.html.html b/changelog/2.0.0.html.html new file mode 100644 index 0000000000..088972de03 --- /dev/null +++ b/changelog/2.0.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.0.1.html b/changelog/2.0.1.html new file mode 100644 index 0000000000..15bd7bac98 --- /dev/null +++ b/changelog/2.0.1.html @@ -0,0 +1,62 @@ + + + + + +2.0.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.0.1.html.html b/changelog/2.0.1.html.html new file mode 100644 index 0000000000..d25f57d238 --- /dev/null +++ b/changelog/2.0.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.1.0.html b/changelog/2.1.0.html new file mode 100644 index 0000000000..e1054e77b8 --- /dev/null +++ b/changelog/2.1.0.html @@ -0,0 +1,158 @@ + + + + + +2.1.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.1.0

adventure-yunfei
Bagdasar Ovsepyan
Ngô Quốc Đạt
Joshua Chen
Kevin Østerkilde
Morgane Dubus
Sébastien Lorber
whiteand
Yoni Chechik
yzhe819

🚀 New Feature

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8008 feat(theme): ability to use <DocCardList> without items prop, on any doc page (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #7963 feat(docs): allow to configure noIndex per doc version (@slorber)
    • +
    • #7949 feat(plugin-docs): docs sidebar item link: support "autoAddBaseUrl" attribute (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

🐛 Bug Fix

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8029 fix(preset-classic): broken link in "unrecognized keys" error message (@mdubus)
    • +
    +
  • +
  • docusaurus +
      +
    • #7977 fix(core): preload should support encoded page links (@adventure-yunfei)
    • +
    • #7996 fix(core): CLI command write-translations should extract translations from @docu… (@slorber)
    • +
    • #7952 fix(core): allow overriding ssr/dev template meta tags (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7964 fix(sitemap): filter all routes with robots meta containing noindex (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7910 fix(theme-classic): code block line number display with line wrapping (@yzhe819)
    • +
    • #7786 fix: collapse siblings when first category is selected (@whiteand)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #7982 fix(theme): add aria-label to skip to content link region (@YoniChechik)
    • +
    • #7940 refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow (@slorber)
    • +
    • #7876 refactor(theme-classic): make tag text visually certered (@Kosai106)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7941 feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types +
      +
    • #7942 feat(theme-classic): use lang attribute in navbar locale dropdown items (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic + +
  • +
+

Committers: 10

+
+ + \ No newline at end of file diff --git a/changelog/2.1.0.html.html b/changelog/2.1.0.html.html new file mode 100644 index 0000000000..e9790b3f52 --- /dev/null +++ b/changelog/2.1.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.2.0.html b/changelog/2.2.0.html new file mode 100644 index 0000000000..a5d6344ded --- /dev/null +++ b/changelog/2.2.0.html @@ -0,0 +1,191 @@ + + + + + +2.2.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.2.0

Adnan Hashmi
Johan Fagerberg
evan
forgeRW
Forresst
Mikey O'Toole
Jeferson S. Brito
John Reilly
Joshua Chen
Jan Peer Stöcklmair

🚀 New Feature

+
    +
  • docusaurus-plugin-client-redirects +
      +
    • #8227 feat(plugin-client-redirects): keep the query string + hash (@Xabilahu)
    • +
    +
  • +
  • docusaurus +
      +
    • #8210 feat(core): add --config param to swizzle command (@e-im)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-mermaid, docusaurus-types, docusaurus +
      +
    • #7490 feat: support mermaid code blocks in Markdown (@sjwall)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #8151 feat(core): siteConfig.headTags API to render extra tags in document head (@johnnyreilly)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-ideal-image +
      +
    • #8250 fix(ideal-image): do not pass down img prop (@lex111)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8246 fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8234 fix(plugin-content-docs): fix error message context (error cause) when doc processing fails (@shanpriyan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8207 fix(theme-classic): hamburger menu control navigation by keyboard (@jeferson-sb)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8204 fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API (@mturoci)
    • +
    • #8059 fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8192 fix(core): throw error for invalid URL in config file (@forgeRW)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8174 fix(theme): announce theme switches (@mturoci)
    • +
    • #8190 fix(theme): add more tag names to inline code element set (@Josh-Cena)
    • +
    • #8163 fix(theme): mobile navbar & skipToContent should cover announcementBar (@adnanhashmi09)
    • +
    • #8068 fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox (@LittleboyHarry)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8137 fix(utils): remove non-ASCII limitation for path normalization (@birjj)
    • +
    • #8158 fix(content-blog): make RSS feed generation work with slugs with .html extension (@Pranav2612000)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #8067 fix(redirect): tolerate trailing slash difference if config is undefined (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations +
      +
    • #8253 chore(theme-translations): complete ru translations (@lex111)
    • +
    • #8243 chore(theme-translations): complete French translations (@forresst)
    • +
    • #8075 fix(theme-translation): complete Japanese theme default translation (@pasora)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #8161 fix(theme): do not show tab content when tabbing over it; show after selection only (@mturoci)
    • +
    • #8062 refactor(theme): remove hard-coded tag border-radius (@homotechsual)
    • +
    +
  • +
  • docusaurus-utils-validation, docusaurus +
      +
    • #8066 fix(core): normalize slashes for url/baseUrl instead of throwing (@Josh-Cena)
    • +
    +
  • +
+

Committers: 22

+
+ + \ No newline at end of file diff --git a/changelog/2.2.0.html.html b/changelog/2.2.0.html.html new file mode 100644 index 0000000000..d880a6290b --- /dev/null +++ b/changelog/2.2.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.3.0.html b/changelog/2.3.0.html new file mode 100644 index 0000000000..440f6f03f9 --- /dev/null +++ b/changelog/2.3.0.html @@ -0,0 +1,201 @@ + + + + + +2.3.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.3.0

Danny Kim
Riccardo
Denis Al-Khelali
Dongjoon Lee
Frieder Bluemle
John Reilly
Joshua Chen
Josh Goldberg
Lachlan Heywood
Lane Goolsby

🚀 New Feature

+
    +
  • docusaurus-theme-translations +
      +
    • #8541 feat(theme-translations): default translations for Slovenian (sl-SI) (@MatijaSi)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8378 feat(blog): add options.createFeedItems to filter/limit/transform feed items (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #8225 feat(theme-classic): store selected tab in query string. (@mturoci)
    • +
    +
  • +
  • docusaurus +
      +
    • #8397 feat(core): deploy CLI - add support for git url "insteadOf": use 'remote get-url' to determine source repo url (@friederbluemle)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8428 feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls
    • +
    +
  • +
  • docusaurus-plugin-google-tag-manager +
      +
    • #8470 feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin (@lanegoolsby)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #8303 fix(mdx-loader): support nested admonitions
    • +
    • #8282 fix(mermaid): fix Mermaid integration for v9.2 release
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8539 fix(algolia): make search footer respect searchPagePath (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #8538 fix(core): avoid hash collision when generating chunk names (@Josh-Cena)
    • +
    • #8481 fix(core): explicitly define CopyWebpackPlugin toType: 'dir' (@Thomascogez)
    • +
    • #8342 fix(core): normalize input for poll option (@mhnaeem)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8462 fix(search-algolia): pass custom transformItems function to SearchBar (@mturoci)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8486 fix(theme): refactor Tabs, make groupId + queryString work fine together (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8463 fix(theme-classic): content container grow to take all the available space (@Djunnni)
    • +
    • #8328 fix(theme): preserve sidebar height on collapse (@0916dhkim)
    • +
    • #8350 fix(theme): forward className prop in theme-classic's Heading (@JoshuaKGoldberg)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8424 fix(translations): typo in lastUpdatedAtBy Vietnamese translation (@slorber)
    • +
    • #8289 fix(theme-translations): complete Turkish theme translations
    • +
    • #8406 fix(translations): complete farsi theme translations
    • +
    • #8450 fix(theme-translations): complete Vietnamese theme translations
    • +
    • #8525 chore(theme-translations): complete pl translations
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8381 fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8275 fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial (@denis-alkhelali)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #8279 fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8423 fix(translations): complete Chinese theme translations (@SJFCS)
    • +
    • #8312 fix(theme-translations): complete Swedish theme translations (@stnor)
    • +
    +
  • +
  • eslint-plugin +
      +
    • #8281 feat(eslint-plugin): add plugin to exported configs (@lachieh)
    • +
    +
  • +
+

Committers: 16

+
+ + \ No newline at end of file diff --git a/changelog/2.3.0.html.html b/changelog/2.3.0.html.html new file mode 100644 index 0000000000..25b047513e --- /dev/null +++ b/changelog/2.3.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.3.1.html b/changelog/2.3.1.html new file mode 100644 index 0000000000..c57bb6fc93 --- /dev/null +++ b/changelog/2.3.1.html @@ -0,0 +1,104 @@ + + + + + +2.3.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.3.1

Joshua Chen
Sébastien Castiel
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #8628 fix(theme-common): fix issue in tab scroll position restoration on tab click (@slorber)
    • +
    • #8619 fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop (@slorber)
    • +
    • #8618 fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-utils +
      +
    • #8606 fix(utils): handle CRLF when parsing MDX imports (@scastiel)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8597 fix(preset-classic): install the right plugin for googleTagManager (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

Committers: 3

+
+ + \ No newline at end of file diff --git a/changelog/2.3.1.html.html b/changelog/2.3.1.html.html new file mode 100644 index 0000000000..49961a4fb4 --- /dev/null +++ b/changelog/2.3.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.4.0.html b/changelog/2.4.0.html new file mode 100644 index 0000000000..56ec54a612 --- /dev/null +++ b/changelog/2.4.0.html @@ -0,0 +1,167 @@ + + + + + +2.4.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.4.0

Anas
Armano
biplavmz
Dewansh Thakur
Petter Drønnen
Joshua Chen
Kagan
Mysterious_Dev
Moritz Stückler
Sébastien Lorber

🚀 New Feature

+
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #8236 feat(content-docs): add support for sidebar item category/link descriptions in generated index page (@ZarakiKanzaki)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8708 feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark (@slorber)
    • +
    • #8616 feat(theme): add ability to translate navbar+footer logo alt text (@Mysterious-Dev)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #8690 feat(npm-to-yarn): add support for PnPm and custom converters (@armano2)
    • +
    +
  • +
  • docusaurus +
      +
    • #8677 feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8674 feat(theme-classic): respect prefers-reduced-motion: reduce mediaquery, bump Infima to alpha.43 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8668 feat(theme-translations): add Hungarian theme translations (@trueqap)
    • +
    • #8631 feat(theme-translations): add Norwegian (Bokmål) theme translation (@dr0nn1)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8656 feat(theme-common): allow passing a string for details summary (@pReya)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8620 feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #8803 fix(theme): codeblock buttons should be kept on the right when using RTL locale (@Vishruta-Patil)
    • +
    • #8615 fix(theme): improve color toggle when using dark navbar (@dewanshDT)
    • +
    • #8699 fix(theme-classic): fix tab focus bug in dropdown (#8697) (@kagankan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #8757 fix(search): search page should react to querystring changes + cleanup/refactor (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8746 fix(core): baseUrl error banner link anchor case (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8744 fix(theme-translations): fix wrong arabic words (tip/next) (@Anasqx)
    • +
    +
  • +
+

💅 Polish

+
    +
  • create-docusaurus +
      +
    • #8712 polish(create-docusaurus): the starter template should use a navbar item "docSidebar" instead of "doc" (less fragile on updates) (@biplavmz)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8735 polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API (@tannerdolby)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus + +
  • +
+

Committers: 14

+
+ + \ No newline at end of file diff --git a/changelog/2.4.0.html.html b/changelog/2.4.0.html.html new file mode 100644 index 0000000000..05a5887177 --- /dev/null +++ b/changelog/2.4.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.4.1.html b/changelog/2.4.1.html new file mode 100644 index 0000000000..bad83981e0 --- /dev/null +++ b/changelog/2.4.1.html @@ -0,0 +1,119 @@ + + + + + +2.4.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.4.1

Andrew Lyons
Armano
MetuMortis
Aleksandr Vladykin
Sachin Nanayakkara
Sébastien Lorber
Tarun Chauhan

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8971 fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8909 fix(theme): add __ prefix to technical anchors, search crawlers (Algolia) should ignore them (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8906 fix(theme-common): fix collapsible component with prefers-reduced-motion (@slorber)
    • +
    • #8873 fix(theme-common): fix confusing theme error message: bad sidebar id suggestions (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8874 fix(utils): handle Markdown links with spaces to route correctly (@morsko1)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8842 fix(theme-translations): remove redundant navigation text in aria label (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #8862 refactor(theme): expose copy, success and word-wrap icons as standalone components (@armano2)
    • +
    +
  • +
+

Committers: 7

+
+ + \ No newline at end of file diff --git a/changelog/2.4.1.html.html b/changelog/2.4.1.html.html new file mode 100644 index 0000000000..9df7590f93 --- /dev/null +++ b/changelog/2.4.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.4.2.html b/changelog/2.4.2.html new file mode 100644 index 0000000000..ec9a6aa727 --- /dev/null +++ b/changelog/2.4.2.html @@ -0,0 +1,58 @@ + + + + + +2.4.2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/changelog/2.4.2.html.html b/changelog/2.4.2.html.html new file mode 100644 index 0000000000..abb2290f50 --- /dev/null +++ b/changelog/2.4.2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/2.4.3.html b/changelog/2.4.3.html new file mode 100644 index 0000000000..81c3dfaf9c --- /dev/null +++ b/changelog/2.4.3.html @@ -0,0 +1,84 @@ + + + + + +2.4.3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

2.4.3

Mikey O'Toole
Ori Shalom
Sébastien Lorber
TheCatLady

🐛 Bug Fix

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #9107 fix(content-docs): sidebar generator should return customProps for doc items (@TheCatLady)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9108 feat(theme-classic): add description & keywords microdata to blog posts (@TheCatLady)
    • +
    • #9099 fix(theme): only set classname on ul elements if they have an existing class (@homotechsual)
    • +
    • #9243 fix(theme-common): ThemedComponent should display something when JS is disabled (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9130 fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash (@ori-shalom)
    • +
    +
  • +
+

Committers: 4

+
+ + \ No newline at end of file diff --git a/changelog/2.4.3.html.html b/changelog/2.4.3.html.html new file mode 100644 index 0000000000..ed2c74063d --- /dev/null +++ b/changelog/2.4.3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.0.0.html b/changelog/3.0.0.html new file mode 100644 index 0000000000..a53edb8b8f --- /dev/null +++ b/changelog/3.0.0.html @@ -0,0 +1,831 @@ + + + + + +3.0.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.0.0

Wan Sim
Abhinandan Wadhwa
Abinash Satapathy
Adam Patterson
Adithya Krishna
Hayden Hong
Craigory Coppola
Akshay Bhalotia
allyw2002
Ahmad Shrif

💥 Breaking Change

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #9316 chore: upgrade syntax highlighting dependencies, prism-react-renderer to v2, react-live to v4 (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #9310 chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-tsconfig, docusaurus +
      +
    • #9258 feat: Docusaurus v3 upgrades and require TypeScript 5 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9394 feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives (@OzakIOne)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9152 feat(theme): add support for meta og locale and alternates (@FlorinaPacurar)
    • +
    • #9028 feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page (@slorber)
    • +
    • #8915 feat(theme): add queryString option to localeDropdown (@wceolin)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils-validation +
      +
    • #9171 feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9102 feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) (@amdshrif)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9097 feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #9071 feat(pages): add support for missing SEO front matter + improve SEO docs (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8982 feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab (@jj-style)
    • +
    • #8870 feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8890 feat(theme): create more generic ThemedComponent util from ThemedImage (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-search-algolia, eslint-plugin + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus, eslint-plugin + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils +
      +
    • #8004 feat(docs,blog,pages): add support for "unlisted" front matter - hide md content in production (@jodyheavener)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #9446 fix(theme): fix useWindowSize React hydration issue (@slorber)
    • +
    • #9276 fix(theme-common): remove useless useSyncExternalStore shim (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9437 fix(plugin-blog): blog archive should hide unlisted blog posts (@slorber)
    • +
    • #9151 fix(content-blog): links in feed should be absolute (@VinceCYLiao)
    • +
    +
  • +
  • docusaurus +
      +
    • #9387 fix(core): log missing errorInfo in React 18 onRecoverableError callback (@johnnyreilly)
    • +
    • #9309 fix(cli): disable vertical borders of the update notification (@qwerzl)
    • +
    • #9112 fix(core): throw error if build folder already exists on initial clean (@thedevwonder)
    • +
    • #9006 fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades (@0420syj)
    • +
    • #7951 fix(core): make webpack HMR always listen to current location (@jeengbe)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9386 fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark (@slorber)
    • +
    • #9262 fix(mdx-loader): improve mdxJsxTextElementToHtml (@slorber)
    • +
    • #9202 fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior (@yosukekato165)
    • +
    • #9100 fix(mdx): fix for html multi-line comments (@slorber)
    • +
    • #9091 fix(mdx-loader): loader error message should display stacktrace if no extra MDX details (@slorber)
    • +
    • #8960 fix: allow html syntax in MDX v2 with format md (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9385 fix(theme): avoid rendering empty search container if site has no search plugin (@slorber)
    • +
    • #9183 fix(theme): make Prism code block language / additionalLanguages case insensitive (@heysujal)
    • +
    • #9216 fix(theme): fix typo in swizzle component config (@sixhobbits)
    • +
    • #9093 fix(theme): support details/summary in CommonMark + add md dogfood test cases (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9369 fix(mdx-loader): prevent Open Graph images from being inserted as base64 (@Zwyx)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9362 fix(theme-translations): add Japanese translation for "warning" (@tats-u)
    • +
    • #9321 fix(theme-translations): add missing zh-Hans messages (@chudongvip)
    • +
    • #9338 fix(theme-translations): complete and fix hungarian translations (@la55u)
    • +
    • #9292 fix(theme-translations): add missing Spanish theme translations (@Villanuevand)
    • +
    • #9021 fix(theme-transalations): fix Swedish translation of "last updated" (@gazab)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    • #9269 fix(theme): improve docs sidebar category caret aria-label accessibility (@pinakipb2)
    • +
    +
  • +
  • Other + +
  • +
  • create-docusaurus +
      +
    • #9217 fix(create-docusaurus): increase Browserslist support query in dev (@slorber)
    • +
    +
  • +
  • docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-debug +
      +
    • #9116 fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9046 fix(utils): better handling of code blocks in link replacement (@Josh-Cena)
    • +
    • #8927 fix(utils): make Markdown link replacement much more rigorous (@Josh-Cena)
    • +
    • #7864 fix(utils): always match exclusion root dirs as complete folder paths (@Josh-Cena)
    • +
    • #7801 fix(utils): recognize ~~~ as code fences in link replacement (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus +
      +
    • #8872 fix(core): better error logging on SSR/dev failures + log stacktraces and error causes (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation, docusaurus +
      +
    • #8258 fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as "/" (@Djunnni)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8319 fix(docs,theme): auto-generated category index should not display unlisted content (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock +
      +
    • #8015 fix(live-codeblock): add error boundary to live code preview (@rashidmya)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #8972 fix: remove useless js-loader in front of mdx-loader (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #9438 refactor(blog-plugin): blog archive reverse ordering of posts (@slorber)
    • +
    • #9184 fix(theme): change schema.org itemType prop urls from http to https (@thedevwonder)
    • +
    +
  • +
  • docusaurus +
      +
    • #9381 feat(core): throw error when official docusaurus dependencies use different versions (@JorensM)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9302 chore(theme-translations): complete zh-Hant translations (@qwerzl)
    • +
    • #9025 chore(theme-translations): complete it translations (@bitpredator)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #9133 fix(init): change initial site URL to one that is safe for the future (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8150 fix(theme-classic): polish admonition details, render title-only admonitions (@attitude)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8143 refactor(plugin-gtag): update gtag plugin to modern SPA recommendations (@lanegoolsby)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+
    +
  • Other + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-pwa, docusaurus, eslint-plugin + +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9320 chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9304 chore(theme-translations): complete French translations (@forresst)
    • +
    +
  • +
  • Other +
      +
    • #9264 ci: only install Chromium for Playwright Argos tests (@mxschmitt)
    • +
    • #9245 chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility (@AFRUITPIE)
    • +
    • #8947 test: add visual regression tests with Argos CI (@slorber)
    • +
    • #8911 chore: migrate website config to createConfigAsync (@slorber)
    • +
    • #8578 docs: fix dead anchor for issue reporting guidelines in template (@Sainan)
    • +
    • #8447 chore: update lerna to v6.2.0 (@AgentEnder)
    • +
    • #7967 test: improve e2e verdaccio configuration (@juanpicado)
    • +
    • #7863 docs: publish 2.0.0 release blog post + adapt website for the launch (@slorber)
    • +
    • #7828 misc: change showcase submission process, use GitHub discussion (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9195 test(blog-plugin): fix ability to generate proper blog website fixture build snapshot (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic + +
  • +
  • docusaurus + +
  • +
+

Committers: 132

+
+ + \ No newline at end of file diff --git a/changelog/3.0.0.html.html b/changelog/3.0.0.html.html new file mode 100644 index 0000000000..f4cdc0d8c0 --- /dev/null +++ b/changelog/3.0.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.0.1.html b/changelog/3.0.1.html new file mode 100644 index 0000000000..3cfe7b54f4 --- /dev/null +++ b/changelog/3.0.1.html @@ -0,0 +1,124 @@ + + + + + +3.0.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.0.1

Chongyi Zheng
MCR Studio
Nick Gerleman
reece-white
Shreesh Nautiyal
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus-utils +
      +
    • #9570 fix: add v2 retrocompatible support for quoted admonitions (@slorber)
    • +
    • #9535 fix: v3 admonitions should support v2 title syntax for nested admonitions (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9531 fix(theme): docs html sidebar items should always be visible (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9530 fix(theme): fix firefox CSS :has() support bug (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9487 fix(create-docusaurus): fix readme docusaurus 2 ref (@slorber)
    • +
    +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-debug +
      +
    • #9566 chore(debug-plugin): migrate to a new maintained JSON Viewer (@mcrstudio)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9572 chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx (@harryzcy)
    • +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia + +
  • +
  • docusaurus +
      +
    • #9547 chore(core): replace wait-on dependency with custom lighter code (@NickGerleman)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus + +
  • +
+

Committers: 6

+
+ + \ No newline at end of file diff --git a/changelog/3.0.1.html.html b/changelog/3.0.1.html.html new file mode 100644 index 0000000000..68d1f86971 --- /dev/null +++ b/changelog/3.0.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.1.0.html b/changelog/3.1.0.html new file mode 100644 index 0000000000..34bbe0ddfb --- /dev/null +++ b/changelog/3.1.0.html @@ -0,0 +1,160 @@ + + + + + +3.1.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.1.0

axmmisaka
c0h1b4
Janessa Garrow
Joshua Chen
ozaki
Simen Bekkhus
Sébastien Lorber
Tatsunori Uchino

🚀 New Feature

+
    +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9528 feat(core): make broken link checker detect broken anchors - add onBrokenAnchors config (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9674 feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9671 feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML (@tats-u)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9624 feat: siteConfig.markdown.parseFrontMatter hook (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9610 feat(core): enable port configuration via environment variable (@OzakIOne)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #9704 fix(theme): allow empty code blocks and live playgrounds (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9696 fix(create-docusaurus): fix init template code blocks, and little improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus +
      +
    • #9648 fix(cli): output help when no conventional config + no subcommand (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #9631 fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9617 fix(utils): Markdown link replacement with <> but no spaces (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases +
      +
    • #9612 fix(type-aliases): add title prop for imported inline SVG React components (@axmmisaka)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9581 fix(content-blog): add baseUrl for author.image_url (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9477 fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) (@c0h1b4)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-common +
      +
    • #9335 refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize (@jgarrow)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-search-algolia + +
  • +
+

Committers: 8

+
+ + \ No newline at end of file diff --git a/changelog/3.1.0.html.html b/changelog/3.1.0.html.html new file mode 100644 index 0000000000..f328dfa16e --- /dev/null +++ b/changelog/3.1.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.1.1.html b/changelog/3.1.1.html new file mode 100644 index 0000000000..91c42b6eaf --- /dev/null +++ b/changelog/3.1.1.html @@ -0,0 +1,121 @@ + + + + + +3.1.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.1.1

dawei-wang
eitsupi
Jack Robson
Sanjaiyan Parthipan
Sébastien Lorber
Tatsunori Uchino

🐛 Bug Fix

+
    +
  • docusaurus-types, docusaurus +
      +
    • #9791 fix(core): broken links optimization behaves differently than non-optimized logic (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9788 fix(core): links with target "_blank" should no be checked by the broken link checker (@slorber)
    • +
    • #9407 fix(core): conditionally include hostname parameter when using… (@jack-robson)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9776 fix(mdx-loader): allow spaces before mdx-code-block info string (@eitsupi)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9783 fix(create-docusaurus): fix typo in init template sample docs (@dawei-wang)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9727 fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-mermaid + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
+

Committers: 6

+
+ + \ No newline at end of file diff --git a/changelog/3.1.1.html.html b/changelog/3.1.1.html.html new file mode 100644 index 0000000000..7827355b38 --- /dev/null +++ b/changelog/3.1.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.2.0.html b/changelog/3.2.0.html new file mode 100644 index 0000000000..15af76a68e --- /dev/null +++ b/changelog/3.2.0.html @@ -0,0 +1,273 @@ + + + + + +3.2.0 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.2.0

Josue [4tro] A
Anatoly Kopyl
axel7083
Нуриль Барадусов
Chris Bateman
Zed Spencer-Milnes
Hallbjörn Magnússon
Liviu Ionescu
n4n5
John Reilly

🚀 New Feature

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils +
      +
    • #9912 feat(blog): add LastUpdateAuthor & LastUpdateTime (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-types, docusaurus +
      +
    • #9931 feat(core): add new plugin allContentLoaded lifecycle (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9886 feat(blog): allow processing blog posts through a processBlogPosts function (@OzakIOne)
    • +
    • #9838 feat(blog): add blog pageBasePath plugin option (@ilg-ul)
    • +
    +
  • +
  • docusaurus +
      +
    • #9681 feat(swizzle): ask user preferred language if no language CLI option provided (@yixiaojiu)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #9442 feat(create-docusaurus): ask user for preferred language when no language CLI option provided (@Rafael-Martins)
    • +
    +
  • +
  • docusaurus-plugin-vercel-analytics +
      +
    • #9687 feat(plugin-vercel-analytics): add new vercel analytics plugin (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9684 feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials (@anatolykopyl)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #9999 fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9945 fix(a11y): move focus algolia-search focus back to search input on Escape (@mxschmitt)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9944 fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button (@mxschmitt)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-utils +
      +
    • #9897 fix(mdx-loader): mdx-code-block should support CRLF (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9878 fix(core): fix default i18n calendar used, infer it from locale if possible (@slorber)
    • +
    • #9852 fix(core): ensure core error boundary is able to render theme layout (@slorber)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #9861 fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9851 fix(theme-classic): should use plurals for category items description (@baradusov)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9975 refactor(core): improve dev perf, fine-grained site reloads - part 3 (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #9968 refactor(core): improve dev perf, fine-grained site reloads - part2 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus +
      +
    • #9903 refactor(core): improve dev perf, fine-grained site reloads - part1 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #9890 perf: optimize getFileCommitDate, make it async (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9798 refactor(core): internalize, simplify and optimize the SSG logic (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9868 refactor(theme): dates should be formatted on the client-side instead of in nodejs code (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types +
      +
    • #9669 refactor(theme): use JSON-LD instead of microdata for blog structured data (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #9839 refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode (@OzakIOne)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

🔧 Maintenance

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils +
      +
    • #9963 refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds (@slorber)
    • +
    +
  • +
+

Committers: 22

+
+ + \ No newline at end of file diff --git a/changelog/3.2.0.html.html b/changelog/3.2.0.html.html new file mode 100644 index 0000000000..3ede8a9160 --- /dev/null +++ b/changelog/3.2.0.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/3.2.1.html b/changelog/3.2.1.html new file mode 100644 index 0000000000..1f59bf2f61 --- /dev/null +++ b/changelog/3.2.1.html @@ -0,0 +1,80 @@ + + + + + +3.2.1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

3.2.1

ozaki
Sébastien Lorber

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

Committers: 2

+
+ + \ No newline at end of file diff --git a/changelog/3.2.1.html.html b/changelog/3.2.1.html.html new file mode 100644 index 0000000000..f2637dad08 --- /dev/null +++ b/changelog/3.2.1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/V2 Changelog.html b/changelog/V2 Changelog.html new file mode 100644 index 0000000000..a1e212bbbf --- /dev/null +++ b/changelog/V2 Changelog.html @@ -0,0 +1,76 @@ + + + + + +V2 Changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
← Back to index page

V2 Changelog

siteConfig.js changes

+
    +
  • siteConfig.js renamed to docusaurus.config.js.
  • +
  • Remove the following config options: +
      +
    • docsUrl. Use the plugin option on docusaurus-plugin-content-docs instead.
    • +
    • customDocsPath. Use the plugin option on docusaurus-plugin-content-docs instead.
    • +
    • sidebars.json now has to be explicitly loaded by users and passed into the plugin option on docusaurus-plugin-content-docs.
    • +
    • headerLinks doc, page, blog is deprecated and has been to moved into themeConfig under the name navbar. The syntax is now:
    • +
    +
  • +
+
themeConfig: {
navbar: {
title: 'Docusaurus',
logo: {
alt: 'Docusaurus Logo',
src: 'img/docusaurus.svg',
},
links: [
{to: 'docs/introduction', label: 'Docs', position: 'left'},
{to: 'blog', label: 'Blog', position: 'left'},
{to: 'feedback', label: 'Feedback', position: 'left'},
{
href: 'https://github.com/facebook/docusaurus',
label: 'GitHub',
position: 'right',
},
],
},
}
+

Migration Guide

+

Work in Progress

+

Presets

+
+ + \ No newline at end of file diff --git a/changelog/V2 Changelog.html.html b/changelog/V2 Changelog.html.html new file mode 100644 index 0000000000..a66492c137 --- /dev/null +++ b/changelog/V2 Changelog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/atom.xml b/changelog/atom.xml new file mode 100644 index 0000000000..0eeb106ea4 --- /dev/null +++ b/changelog/atom.xml @@ -0,0 +1,4009 @@ + + + https://docusaurus.io/changelog + Docusaurus changelog + 2024-04-04T20:00:00.000Z + https://github.com/jpmonette/feed + + Keep yourself up-to-date about new features in every release + https://docusaurus.io/img/docusaurus.ico + Copyright © 2024 Facebook, Inc. + + <![CDATA[3.2.1]]> + https://docusaurus.io/changelog/3.2.1 + + 2024-04-04T20:00:00.000Z + + 🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

Committers: 2

+]]> + + ozaki + https://github.com/OzakIOne + + + Sébastien Lorber + https://github.com/slorber + + + + <![CDATA[3.2.0]]> + https://docusaurus.io/changelog/3.2.0 + + 2024-03-29T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils +
      +
    • #9912 feat(blog): add LastUpdateAuthor & LastUpdateTime (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-types, docusaurus +
      +
    • #9931 feat(core): add new plugin allContentLoaded lifecycle (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9886 feat(blog): allow processing blog posts through a processBlogPosts function (@OzakIOne)
    • +
    • #9838 feat(blog): add blog pageBasePath plugin option (@ilg-ul)
    • +
    +
  • +
  • docusaurus +
      +
    • #9681 feat(swizzle): ask user preferred language if no language CLI option provided (@yixiaojiu)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #9442 feat(create-docusaurus): ask user for preferred language when no language CLI option provided (@Rafael-Martins)
    • +
    +
  • +
  • docusaurus-plugin-vercel-analytics +
      +
    • #9687 feat(plugin-vercel-analytics): add new vercel analytics plugin (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9684 feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials (@anatolykopyl)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #9999 fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9945 fix(a11y): move focus algolia-search focus back to search input on Escape (@mxschmitt)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9944 fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button (@mxschmitt)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-utils +
      +
    • #9897 fix(mdx-loader): mdx-code-block should support CRLF (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9878 fix(core): fix default i18n calendar used, infer it from locale if possible (@slorber)
    • +
    • #9852 fix(core): ensure core error boundary is able to render theme layout (@slorber)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #9861 fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9851 fix(theme-classic): should use plurals for category items description (@baradusov)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9975 refactor(core): improve dev perf, fine-grained site reloads - part 3 (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #9968 refactor(core): improve dev perf, fine-grained site reloads - part2 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus +
      +
    • #9903 refactor(core): improve dev perf, fine-grained site reloads - part1 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #9890 perf: optimize getFileCommitDate, make it async (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9798 refactor(core): internalize, simplify and optimize the SSG logic (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9868 refactor(theme): dates should be formatted on the client-side instead of in nodejs code (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types +
      +
    • #9669 refactor(theme): use JSON-LD instead of microdata for blog structured data (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #9839 refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode (@OzakIOne)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

🔧 Maintenance

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils +
      +
    • #9963 refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds (@slorber)
    • +
    +
  • +
+

Committers: 22

+]]>
+ + Josue [4tro] A + https://github.com/4troDev + + + Anatoly Kopyl + https://github.com/anatolykopyl + + + axel7083 + https://github.com/axel7083 + + + Нуриль Барадусов + https://github.com/baradusov + + + Chris Bateman + https://github.com/chris-bateman + + + Zed Spencer-Milnes + https://github.com/GingerGeek + + + Hallbjörn Magnússon + https://github.com/Hallinn + + + Liviu Ionescu + https://github.com/ilg-ul + + + n4n5 + https://github.com/Its-Just-Nans + + + John Reilly + https://github.com/johnnyreilly + + + Joshua Chen + https://github.com/Josh-Cena + + + krinza.eth + https://github.com/kaymomin + + + Max Schmitt + https://github.com/mxschmitt + + + Aolin + https://github.com/Oreoxmt + + + ozaki + https://github.com/OzakIOne + + + Rafael Martins + https://github.com/Rafael-Martins + + + Sébastien Lorber + https://github.com/slorber + + + suenryu + https://github.com/Suenaga-Ryuya + + + Fafowora Sunkanmi + https://github.com/sunkanmii + + + Vahid Naderi + https://github.com/VahidNaderi + + + Vlad Nestorov + https://github.com/vlad-nestorov + + + 翊小久 + https://github.com/yixiaojiu + +
+ + <![CDATA[3.1.1]]> + https://docusaurus.io/changelog/3.1.1 + + 2024-01-26T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus-types, docusaurus +
      +
    • #9791 fix(core): broken links optimization behaves differently than non-optimized logic (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9788 fix(core): links with target "_blank" should no be checked by the broken link checker (@slorber)
    • +
    • #9407 fix(core): conditionally include hostname parameter when using… (@jack-robson)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9776 fix(mdx-loader): allow spaces before mdx-code-block info string (@eitsupi)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9783 fix(create-docusaurus): fix typo in init template sample docs (@dawei-wang)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9727 fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-mermaid + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
+

Committers: 6

+]]>
+ + dawei-wang + https://github.com/dawei-wang + + + eitsupi + https://github.com/eitsupi + + + Jack Robson + https://github.com/jack-robson + + + Sanjaiyan Parthipan + https://github.com/sanjaiyan-dev + + + Sébastien Lorber + https://github.com/slorber + + + Tatsunori Uchino + https://github.com/tats-u + +
+ + <![CDATA[3.1.0]]> + https://docusaurus.io/changelog/3.1.0 + + 2024-01-05T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9528 feat(core): make broken link checker detect broken anchors - add onBrokenAnchors config (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9674 feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9671 feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML (@tats-u)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9624 feat: siteConfig.markdown.parseFrontMatter hook (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9610 feat(core): enable port configuration via environment variable (@OzakIOne)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #9704 fix(theme): allow empty code blocks and live playgrounds (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9696 fix(create-docusaurus): fix init template code blocks, and little improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus +
      +
    • #9648 fix(cli): output help when no conventional config + no subcommand (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #9631 fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9617 fix(utils): Markdown link replacement with <> but no spaces (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases +
      +
    • #9612 fix(type-aliases): add title prop for imported inline SVG React components (@axmmisaka)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9581 fix(content-blog): add baseUrl for author.image_url (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9477 fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) (@c0h1b4)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-common +
      +
    • #9335 refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize (@jgarrow)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-search-algolia + +
  • +
+

Committers: 8

+]]>
+ + axmmisaka + https://github.com/axmmisaka + + + c0h1b4 + https://github.com/c0h1b4 + + + Janessa Garrow + https://github.com/jgarrow + + + Joshua Chen + https://github.com/Josh-Cena + + + ozaki + https://github.com/OzakIOne + + + Simen Bekkhus + https://github.com/SimenB + + + Sébastien Lorber + https://github.com/slorber + + + Tatsunori Uchino + https://github.com/tats-u + +
+ + <![CDATA[3.0.1]]> + https://docusaurus.io/changelog/3.0.1 + + 2023-11-30T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus-utils +
      +
    • #9570 fix: add v2 retrocompatible support for quoted admonitions (@slorber)
    • +
    • #9535 fix: v3 admonitions should support v2 title syntax for nested admonitions (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9531 fix(theme): docs html sidebar items should always be visible (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9530 fix(theme): fix firefox CSS :has() support bug (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9487 fix(create-docusaurus): fix readme docusaurus 2 ref (@slorber)
    • +
    +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-debug +
      +
    • #9566 chore(debug-plugin): migrate to a new maintained JSON Viewer (@mcrstudio)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9572 chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx (@harryzcy)
    • +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia + +
  • +
  • docusaurus +
      +
    • #9547 chore(core): replace wait-on dependency with custom lighter code (@NickGerleman)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus + +
  • +
+

Committers: 6

+]]>
+ + Chongyi Zheng + https://github.com/harryzcy + + + MCR Studio + https://github.com/mcrstudio + + + Nick Gerleman + https://github.com/NickGerleman + + + reece-white + https://github.com/reece-white + + + Shreesh Nautiyal + https://github.com/Shreesh09 + + + Sébastien Lorber + https://github.com/slorber + +
+ + <![CDATA[3.0.0]]> + https://docusaurus.io/changelog/3.0.0 + + 2023-10-31T20:00:00.000Z + + 💥 Breaking Change +
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #9316 chore: upgrade syntax highlighting dependencies, prism-react-renderer to v2, react-live to v4 (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #9310 chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-tsconfig, docusaurus +
      +
    • #9258 feat: Docusaurus v3 upgrades and require TypeScript 5 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9394 feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives (@OzakIOne)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9152 feat(theme): add support for meta og locale and alternates (@FlorinaPacurar)
    • +
    • #9028 feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page (@slorber)
    • +
    • #8915 feat(theme): add queryString option to localeDropdown (@wceolin)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils-validation +
      +
    • #9171 feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9102 feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) (@amdshrif)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9097 feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #9071 feat(pages): add support for missing SEO front matter + improve SEO docs (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8982 feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab (@jj-style)
    • +
    • #8870 feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8890 feat(theme): create more generic ThemedComponent util from ThemedImage (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-search-algolia, eslint-plugin + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus, eslint-plugin + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils +
      +
    • #8004 feat(docs,blog,pages): add support for "unlisted" front matter - hide md content in production (@jodyheavener)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #9446 fix(theme): fix useWindowSize React hydration issue (@slorber)
    • +
    • #9276 fix(theme-common): remove useless useSyncExternalStore shim (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9437 fix(plugin-blog): blog archive should hide unlisted blog posts (@slorber)
    • +
    • #9151 fix(content-blog): links in feed should be absolute (@VinceCYLiao)
    • +
    +
  • +
  • docusaurus +
      +
    • #9387 fix(core): log missing errorInfo in React 18 onRecoverableError callback (@johnnyreilly)
    • +
    • #9309 fix(cli): disable vertical borders of the update notification (@qwerzl)
    • +
    • #9112 fix(core): throw error if build folder already exists on initial clean (@thedevwonder)
    • +
    • #9006 fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades (@0420syj)
    • +
    • #7951 fix(core): make webpack HMR always listen to current location (@jeengbe)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9386 fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark (@slorber)
    • +
    • #9262 fix(mdx-loader): improve mdxJsxTextElementToHtml (@slorber)
    • +
    • #9202 fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior (@yosukekato165)
    • +
    • #9100 fix(mdx): fix for html multi-line comments (@slorber)
    • +
    • #9091 fix(mdx-loader): loader error message should display stacktrace if no extra MDX details (@slorber)
    • +
    • #8960 fix: allow html syntax in MDX v2 with format md (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9385 fix(theme): avoid rendering empty search container if site has no search plugin (@slorber)
    • +
    • #9183 fix(theme): make Prism code block language / additionalLanguages case insensitive (@heysujal)
    • +
    • #9216 fix(theme): fix typo in swizzle component config (@sixhobbits)
    • +
    • #9093 fix(theme): support details/summary in CommonMark + add md dogfood test cases (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9369 fix(mdx-loader): prevent Open Graph images from being inserted as base64 (@Zwyx)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9362 fix(theme-translations): add Japanese translation for "warning" (@tats-u)
    • +
    • #9321 fix(theme-translations): add missing zh-Hans messages (@chudongvip)
    • +
    • #9338 fix(theme-translations): complete and fix hungarian translations (@la55u)
    • +
    • #9292 fix(theme-translations): add missing Spanish theme translations (@Villanuevand)
    • +
    • #9021 fix(theme-transalations): fix Swedish translation of "last updated" (@gazab)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    • #9269 fix(theme): improve docs sidebar category caret aria-label accessibility (@pinakipb2)
    • +
    +
  • +
  • Other + +
  • +
  • create-docusaurus +
      +
    • #9217 fix(create-docusaurus): increase Browserslist support query in dev (@slorber)
    • +
    +
  • +
  • docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-debug +
      +
    • #9116 fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9046 fix(utils): better handling of code blocks in link replacement (@Josh-Cena)
    • +
    • #8927 fix(utils): make Markdown link replacement much more rigorous (@Josh-Cena)
    • +
    • #7864 fix(utils): always match exclusion root dirs as complete folder paths (@Josh-Cena)
    • +
    • #7801 fix(utils): recognize ~~~ as code fences in link replacement (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus +
      +
    • #8872 fix(core): better error logging on SSR/dev failures + log stacktraces and error causes (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation, docusaurus +
      +
    • #8258 fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as "/" (@Djunnni)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8319 fix(docs,theme): auto-generated category index should not display unlisted content (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock +
      +
    • #8015 fix(live-codeblock): add error boundary to live code preview (@rashidmya)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #8972 fix: remove useless js-loader in front of mdx-loader (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #9438 refactor(blog-plugin): blog archive reverse ordering of posts (@slorber)
    • +
    • #9184 fix(theme): change schema.org itemType prop urls from http to https (@thedevwonder)
    • +
    +
  • +
  • docusaurus +
      +
    • #9381 feat(core): throw error when official docusaurus dependencies use different versions (@JorensM)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9302 chore(theme-translations): complete zh-Hant translations (@qwerzl)
    • +
    • #9025 chore(theme-translations): complete it translations (@bitpredator)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #9133 fix(init): change initial site URL to one that is safe for the future (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8150 fix(theme-classic): polish admonition details, render title-only admonitions (@attitude)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8143 refactor(plugin-gtag): update gtag plugin to modern SPA recommendations (@lanegoolsby)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+
    +
  • Other + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-pwa, docusaurus, eslint-plugin + +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9320 chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9304 chore(theme-translations): complete French translations (@forresst)
    • +
    +
  • +
  • Other +
      +
    • #9264 ci: only install Chromium for Playwright Argos tests (@mxschmitt)
    • +
    • #9245 chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility (@AFRUITPIE)
    • +
    • #8947 test: add visual regression tests with Argos CI (@slorber)
    • +
    • #8911 chore: migrate website config to createConfigAsync (@slorber)
    • +
    • #8578 docs: fix dead anchor for issue reporting guidelines in template (@Sainan)
    • +
    • #8447 chore: update lerna to v6.2.0 (@AgentEnder)
    • +
    • #7967 test: improve e2e verdaccio configuration (@juanpicado)
    • +
    • #7863 docs: publish 2.0.0 release blog post + adapt website for the launch (@slorber)
    • +
    • #7828 misc: change showcase submission process, use GitHub discussion (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9195 test(blog-plugin): fix ability to generate proper blog website fixture build snapshot (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic + +
  • +
  • docusaurus + +
  • +
+

Committers: 132

+]]>
+ + Wan Sim + https://github.com/0420syj + + + Abhinandan Wadhwa + https://github.com/abhinandanwadwa + + + Abinash Satapathy + https://github.com/Abinashbunty + + + Adam Patterson + https://github.com/adampatterson + + + Adithya Krishna + https://github.com/adithyaakrishna + + + Hayden Hong + https://github.com/AFRUITPIE + + + Craigory Coppola + https://github.com/AgentEnder + + + Akshay Bhalotia + https://github.com/akshaybhalotia + + + allyw2002 + https://github.com/allyw2002 + + + Ahmad Shrif + https://github.com/amdshrif + + + Ahmed Mustafa Malik + https://github.com/amm98d + + + Sunghyun Cho + https://github.com/anaclumos + + + Andrew Lyons + https://github.com/andrewnicols + + + Anton Kastritskii + https://github.com/antonk52 + + + Antony Onipko + https://github.com/antonyoni + + + Aqueeb + https://github.com/aqueeb + + + Martin Adamko + https://github.com/attitude + + + Billy Chan + https://github.com/billy1624 + + + biplavmz + https://github.com/biplavmz + + + bitpredator + https://github.com/bitpredator + + + Joe Williams + https://github.com/BubbaJoe + + + Dinh Bao Dang + https://github.com/chillinPanda + + + Bei Chu + https://github.com/chubei + + + 初冬 + https://github.com/chudongvip + + + Ryosuke Igarashi + https://github.com/cm-igarashi-ryosuke + + + Colin McDonnell + https://github.com/colinhacks + + + conlacda + https://github.com/conlacda + + + Dan Dascalescu + https://github.com/dandv + + + Danilo Woznica + https://github.com/danilowoz + + + Dan Roscigno + https://github.com/DanRoscigno + + + David J. Felix + https://github.com/DavidJFelix + + + dawei-wang + https://github.com/dawei-wang + + + Debbie O'Brien + https://github.com/debs-obrien + + + Devansu Yadav + https://github.com/Devansu-Yadav + + + Dongjoon Lee + https://github.com/Djunnni + + + Dr-Electron + https://github.com/Dr-Electron + + + Eduardo Mínguez + https://github.com/e-minguez + + + Grégory Heitz + https://github.com/edno + + + FlorinaPacurar + https://github.com/FlorinaPacurar + + + Charles Killer + https://github.com/Foosballfan + + + Forresst + https://github.com/forresst + + + Francesco Ciulla + https://github.com/FrancescoXX + + + Fredrik Stave + https://github.com/fredrikstave + + + Fxpby + https://github.com/fxpby + + + Gabriel Csapo + https://github.com/gabrielcsapo + + + Alexander Nguyen + https://github.com/GalexyN + + + Gustav Tonér + https://github.com/gazab + + + Eunkwang Shin + https://github.com/gracefullight + + + Greg Bergé + https://github.com/gregberge + + + Chongyi Zheng + https://github.com/harryzcy + + + Sujal Gupta + https://github.com/heysujal + + + Hidde de Vries + https://github.com/hidde + + + Mikey O'Toole + https://github.com/homotechsual + + + Hyunseung + https://github.com/hslee2008 + + + Anna + https://github.com/HumbleDeer + + + Coupy + https://github.com/HyeokjinKang + + + Jean Humann + https://github.com/jean-humann + + + Jesper Engberg + https://github.com/jeengbe + + + John Cao + https://github.com/jhcao23 + + + JJ Style + https://github.com/jj-style + + + Jody Heavener + https://github.com/jodyheavener + + + John Reilly + https://github.com/johnnyreilly + + + Viktor Malmedal + https://github.com/JohnVicke + + + Jorens Merenjanu + https://github.com/JorensM + + + Joshua Chen + https://github.com/Josh-Cena + + + Juan Picado + https://github.com/juanpicado + + + 0x24Karthick + https://github.com/KarthickSakthi + + + Serenus + https://github.com/Kesyau + + + Naffy Dharni + https://github.com/knownasnaffy + + + la55u + https://github.com/la55u + + + Lane Goolsby + https://github.com/lanegoolsby + + + Oleksandr Fediashov + https://github.com/layershifter + + + Alexey Pyltsyn + https://github.com/lex111 + + + Lorenzo Lewis + https://github.com/lorenzolewis + + + Silvestar Bistrović + https://github.com/maliMirkec + + + Manuel + https://github.com/manuel-rw + + + Markshawn + https://github.com/MarkShawn2020 + + + mcallisto + https://github.com/mcallisto + + + Michael Remediakis + https://github.com/mickremedi + + + ModupeD + https://github.com/ModupeD + + + Mogyuchi + https://github.com/Mogyuchi + + + Mu-Jing-Tsai + https://github.com/moojing + + + Tom Mrazauskas + https://github.com/mrazauskas + + + Marco Stroppel + https://github.com/mstroppel + + + Max Schmitt + https://github.com/mxschmitt + + + Mysterious_Dev + https://github.com/Mysterious-Dev + + + Naman Garg + https://github.com/NamanGarg2075 + + + Nathaniel Tucker + https://github.com/ntucker + + + Oluwatobi Sofela + https://github.com/oluwatobiss + + + Aolin + https://github.com/Oreoxmt + + + ozaki + https://github.com/OzakIOne + + + Maciek Palmowski + https://github.com/palmiak + + + Paul Razvan Berg + https://github.com/PaulRBerg + + + Pinaki Bhattacharjee + https://github.com/pinakipb2 + + + prateekbytes + https://github.com/prateekbytes + + + qwerzl + https://github.com/qwerzl + + + Rashid + https://github.com/rashidmya + + + Kolja + https://github.com/razzeee + + + Raphaël Barbazza + https://github.com/rbarbazz + + + Bruce Song + https://github.com/recallwei + + + Chua Chee How + https://github.com/rojakcoder + + + rsteele6 + https://github.com/rsteele6 + + + SADIK KUZU + https://github.com/sadikkuzu + + + Sainan + https://github.com/Sainan + + + samatt14 + https://github.com/samatt14 + + + Sanjaiyan Parthipan + https://github.com/sanjaiyan-dev + + + Alex + https://github.com/sashashura + + + Marie + https://github.com/schneegansm + + + Marco Kuper + https://github.com/scubamaggo + + + Shahriar + https://github.com/ShahriarKh + + + Shashank Kumar + https://github.com/shawshankkumar + + + Clément Vannicatte + https://github.com/shortcuts + + + Shun Wakatsuki + https://github.com/shwaka + + + Gareth Dwyer + https://github.com/sixhobbits + + + Sébastien Lorber + https://github.com/slorber + + + Surav Shrestha + https://github.com/suravshrestha + + + sykp241095 + https://github.com/sykp241095 + + + Tamal Anwar Chowdhury + https://github.com/tamalchowdhury + + + Tarun Chauhan + https://github.com/tarunrajput + + + Tatsunori Uchino + https://github.com/tats-u + + + Thad Guidry + https://github.com/thadguidry + + + James Kerrane + https://github.com/thatrobotdev + + + thedevwonder + https://github.com/thedevwonder + + + Andrés Villanueva + https://github.com/Villanuevand + + + VinceCYLiao + https://github.com/VinceCYLiao + + + Waldir Pimenta + https://github.com/waldyrious + + + Will Ceolin + https://github.com/wceolin + + + Webber Takken + https://github.com/webbertakken + + + Jordan Manley + https://github.com/werner33 + + + Yangshun Tay + https://github.com/yangshun + + + yosukekato165 + https://github.com/yosukekato165 + + + Zwyx + https://github.com/Zwyx + +
+ + <![CDATA[2.4.3]]> + https://docusaurus.io/changelog/2.4.3 + + 2023-09-20T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus-plugin-content-docs +
      +
    • #9107 fix(content-docs): sidebar generator should return customProps for doc items (@TheCatLady)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9108 feat(theme-classic): add description & keywords microdata to blog posts (@TheCatLady)
    • +
    • #9099 fix(theme): only set classname on ul elements if they have an existing class (@homotechsual)
    • +
    • #9243 fix(theme-common): ThemedComponent should display something when JS is disabled (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9130 fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash (@ori-shalom)
    • +
    +
  • +
+

Committers: 4

+]]>
+ + Mikey O'Toole + https://github.com/homotechsual + + + Ori Shalom + https://github.com/ori-shalom + + + Sébastien Lorber + https://github.com/slorber + + + TheCatLady + https://github.com/TheCatLady + +
+ + <![CDATA[2.4.2]]> + https://docusaurus.io/changelog/2.4.2 + + 2023-09-20T19:00:00.000Z + + Bad npm publish, please use 2.4.3

]]>
+
+ + <![CDATA[2.4.1]]> + https://docusaurus.io/changelog/2.4.1 + + 2023-05-15T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8971 fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8909 fix(theme): add __ prefix to technical anchors, search crawlers (Algolia) should ignore them (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8906 fix(theme-common): fix collapsible component with prefers-reduced-motion (@slorber)
    • +
    • #8873 fix(theme-common): fix confusing theme error message: bad sidebar id suggestions (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8874 fix(utils): handle Markdown links with spaces to route correctly (@morsko1)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8842 fix(theme-translations): remove redundant navigation text in aria label (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #8862 refactor(theme): expose copy, success and word-wrap icons as standalone components (@armano2)
    • +
    +
  • +
+

Committers: 7

+]]>
+ + Andrew Lyons + https://github.com/andrewnicols + + + Armano + https://github.com/armano2 + + + MetuMortis + https://github.com/LiberaTeMetuMortis + + + Aleksandr Vladykin + https://github.com/morsko1 + + + Sachin Nanayakkara + https://github.com/SACHINnANYAKKARA + + + Sébastien Lorber + https://github.com/slorber + + + Tarun Chauhan + https://github.com/tarunrajput + +
+ + <![CDATA[2.4.0]]> + https://docusaurus.io/changelog/2.4.0 + + 2023-03-23T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #8236 feat(content-docs): add support for sidebar item category/link descriptions in generated index page (@ZarakiKanzaki)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8708 feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark (@slorber)
    • +
    • #8616 feat(theme): add ability to translate navbar+footer logo alt text (@Mysterious-Dev)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #8690 feat(npm-to-yarn): add support for PnPm and custom converters (@armano2)
    • +
    +
  • +
  • docusaurus +
      +
    • #8677 feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8674 feat(theme-classic): respect prefers-reduced-motion: reduce mediaquery, bump Infima to alpha.43 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8668 feat(theme-translations): add Hungarian theme translations (@trueqap)
    • +
    • #8631 feat(theme-translations): add Norwegian (Bokmål) theme translation (@dr0nn1)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8656 feat(theme-common): allow passing a string for details summary (@pReya)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8620 feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #8803 fix(theme): codeblock buttons should be kept on the right when using RTL locale (@Vishruta-Patil)
    • +
    • #8615 fix(theme): improve color toggle when using dark navbar (@dewanshDT)
    • +
    • #8699 fix(theme-classic): fix tab focus bug in dropdown (#8697) (@kagankan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #8757 fix(search): search page should react to querystring changes + cleanup/refactor (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8746 fix(core): baseUrl error banner link anchor case (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8744 fix(theme-translations): fix wrong arabic words (tip/next) (@Anasqx)
    • +
    +
  • +
+

💅 Polish

+
    +
  • create-docusaurus +
      +
    • #8712 polish(create-docusaurus): the starter template should use a navbar item "docSidebar" instead of "doc" (less fragile on updates) (@biplavmz)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8735 polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API (@tannerdolby)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus + +
  • +
+

Committers: 14

+]]>
+ + Anas + https://github.com/Anasqx + + + Armano + https://github.com/armano2 + + + biplavmz + https://github.com/biplavmz + + + Dewansh Thakur + https://github.com/dewanshDT + + + Petter Drønnen + https://github.com/dr0nn1 + + + Joshua Chen + https://github.com/Josh-Cena + + + Kagan + https://github.com/kagankan + + + Mysterious_Dev + https://github.com/Mysterious-Dev + + + Moritz Stückler + https://github.com/pReya + + + Sébastien Lorber + https://github.com/slorber + + + Tanner Dolby + https://github.com/tannerdolby + + + TrueQAP + https://github.com/trueqap + + + Vishruta Patil + https://github.com/Vishruta-Patil + + + Davide Donadio + https://github.com/ZarakiKanzaki + +
+ + <![CDATA[2.3.1]]> + https://docusaurus.io/changelog/2.3.1 + + 2023-02-03T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus-theme-common +
      +
    • #8628 fix(theme-common): fix issue in tab scroll position restoration on tab click (@slorber)
    • +
    • #8619 fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop (@slorber)
    • +
    • #8618 fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-utils +
      +
    • #8606 fix(utils): handle CRLF when parsing MDX imports (@scastiel)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8597 fix(preset-classic): install the right plugin for googleTagManager (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

Committers: 3

+]]>
+ + Joshua Chen + https://github.com/Josh-Cena + + + Sébastien Castiel + https://github.com/scastiel + + + Sébastien Lorber + https://github.com/slorber + +
+ + <![CDATA[2.3.0]]> + https://docusaurus.io/changelog/2.3.0 + + 2023-01-26T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-theme-translations +
      +
    • #8541 feat(theme-translations): default translations for Slovenian (sl-SI) (@MatijaSi)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8378 feat(blog): add options.createFeedItems to filter/limit/transform feed items (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #8225 feat(theme-classic): store selected tab in query string. (@mturoci)
    • +
    +
  • +
  • docusaurus +
      +
    • #8397 feat(core): deploy CLI - add support for git url "insteadOf": use 'remote get-url' to determine source repo url (@friederbluemle)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8428 feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls
    • +
    +
  • +
  • docusaurus-plugin-google-tag-manager +
      +
    • #8470 feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin (@lanegoolsby)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #8303 fix(mdx-loader): support nested admonitions
    • +
    • #8282 fix(mermaid): fix Mermaid integration for v9.2 release
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8539 fix(algolia): make search footer respect searchPagePath (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #8538 fix(core): avoid hash collision when generating chunk names (@Josh-Cena)
    • +
    • #8481 fix(core): explicitly define CopyWebpackPlugin toType: 'dir' (@Thomascogez)
    • +
    • #8342 fix(core): normalize input for poll option (@mhnaeem)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8462 fix(search-algolia): pass custom transformItems function to SearchBar (@mturoci)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8486 fix(theme): refactor Tabs, make groupId + queryString work fine together (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8463 fix(theme-classic): content container grow to take all the available space (@Djunnni)
    • +
    • #8328 fix(theme): preserve sidebar height on collapse (@0916dhkim)
    • +
    • #8350 fix(theme): forward className prop in theme-classic's Heading (@JoshuaKGoldberg)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8424 fix(translations): typo in lastUpdatedAtBy Vietnamese translation (@slorber)
    • +
    • #8289 fix(theme-translations): complete Turkish theme translations
    • +
    • #8406 fix(translations): complete farsi theme translations
    • +
    • #8450 fix(theme-translations): complete Vietnamese theme translations
    • +
    • #8525 chore(theme-translations): complete pl translations
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8381 fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8275 fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial (@denis-alkhelali)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #8279 fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8423 fix(translations): complete Chinese theme translations (@SJFCS)
    • +
    • #8312 fix(theme-translations): complete Swedish theme translations (@stnor)
    • +
    +
  • +
  • eslint-plugin +
      +
    • #8281 feat(eslint-plugin): add plugin to exported configs (@lachieh)
    • +
    +
  • +
+

Committers: 16

+]]>
+ + Danny Kim + https://github.com/0916dhkim + + + Riccardo + https://github.com/3v0k4 + + + Denis Al-Khelali + https://github.com/denis-alkhelali + + + Dongjoon Lee + https://github.com/Djunnni + + + Frieder Bluemle + https://github.com/friederbluemle + + + John Reilly + https://github.com/johnnyreilly + + + Joshua Chen + https://github.com/Josh-Cena + + + Josh Goldberg + https://github.com/JoshuaKGoldberg + + + Lachlan Heywood + https://github.com/lachieh + + + Lane Goolsby + https://github.com/lanegoolsby + + + Matija Sirk + https://github.com/MatijaSi + + + Muhammad Hammad + https://github.com/mhnaeem + + + mturoci + https://github.com/mturoci + + + 宋锦丰 + https://github.com/SJFCS + + + Sébastien Lorber + https://github.com/slorber + + + Stefan Norberg + https://github.com/stnor + + + Thomas.CA + https://github.com/Thomascogez + +
+ + <![CDATA[2.2.0]]> + https://docusaurus.io/changelog/2.2.0 + + 2022-10-29T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-plugin-client-redirects +
      +
    • #8227 feat(plugin-client-redirects): keep the query string + hash (@Xabilahu)
    • +
    +
  • +
  • docusaurus +
      +
    • #8210 feat(core): add --config param to swizzle command (@e-im)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-mermaid, docusaurus-types, docusaurus +
      +
    • #7490 feat: support mermaid code blocks in Markdown (@sjwall)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #8151 feat(core): siteConfig.headTags API to render extra tags in document head (@johnnyreilly)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-ideal-image +
      +
    • #8250 fix(ideal-image): do not pass down img prop (@lex111)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8246 fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8234 fix(plugin-content-docs): fix error message context (error cause) when doc processing fails (@shanpriyan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8207 fix(theme-classic): hamburger menu control navigation by keyboard (@jeferson-sb)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8204 fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API (@mturoci)
    • +
    • #8059 fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8192 fix(core): throw error for invalid URL in config file (@forgeRW)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8174 fix(theme): announce theme switches (@mturoci)
    • +
    • #8190 fix(theme): add more tag names to inline code element set (@Josh-Cena)
    • +
    • #8163 fix(theme): mobile navbar & skipToContent should cover announcementBar (@adnanhashmi09)
    • +
    • #8068 fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox (@LittleboyHarry)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8137 fix(utils): remove non-ASCII limitation for path normalization (@birjj)
    • +
    • #8158 fix(content-blog): make RSS feed generation work with slugs with .html extension (@Pranav2612000)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #8067 fix(redirect): tolerate trailing slash difference if config is undefined (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations +
      +
    • #8253 chore(theme-translations): complete ru translations (@lex111)
    • +
    • #8243 chore(theme-translations): complete French translations (@forresst)
    • +
    • #8075 fix(theme-translation): complete Japanese theme default translation (@pasora)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #8161 fix(theme): do not show tab content when tabbing over it; show after selection only (@mturoci)
    • +
    • #8062 refactor(theme): remove hard-coded tag border-radius (@homotechsual)
    • +
    +
  • +
  • docusaurus-utils-validation, docusaurus +
      +
    • #8066 fix(core): normalize slashes for url/baseUrl instead of throwing (@Josh-Cena)
    • +
    +
  • +
+

Committers: 22

+]]>
+ + Adnan Hashmi + https://github.com/adnanhashmi09 + + + Johan Fagerberg + https://github.com/birjj + + + evan + https://github.com/e-im + + + forgeRW + https://github.com/forgeRW + + + Forresst + https://github.com/forresst + + + Mikey O'Toole + https://github.com/homotechsual + + + Jeferson S. Brito + https://github.com/jeferson-sb + + + John Reilly + https://github.com/johnnyreilly + + + Joshua Chen + https://github.com/Josh-Cena + + + Jan Peer Stöcklmair + https://github.com/JPeer264 + + + Alexey Pyltsyn + https://github.com/lex111 + + + LittleboyHarry + https://github.com/LittleboyHarry + + + mturoci + https://github.com/mturoci + + + Nguyễn Thành Nam + https://github.com/namnguyenthanhwork + + + Masahiko Hara + https://github.com/pasora + + + Pranav Joglekar + https://github.com/Pranav2612000 + + + Ramazan SANCAR + https://github.com/ramazansancar + + + Sanjaiyan Parthipan + https://github.com/sanjaiyan-dev + + + Shanmughapriyan S + https://github.com/shanpriyan + + + Sam Wall + https://github.com/sjwall + + + Sébastien Lorber + https://github.com/slorber + + + Xabier Lahuerta Vazquez + https://github.com/Xabilahu + +
+ + <![CDATA[2.1.0]]> + https://docusaurus.io/changelog/2.1.0 + + 2022-09-01T20:00:00.000Z + + 🚀 New Feature +
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8008 feat(theme): ability to use <DocCardList> without items prop, on any doc page (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #7963 feat(docs): allow to configure noIndex per doc version (@slorber)
    • +
    • #7949 feat(plugin-docs): docs sidebar item link: support "autoAddBaseUrl" attribute (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

🐛 Bug Fix

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8029 fix(preset-classic): broken link in "unrecognized keys" error message (@mdubus)
    • +
    +
  • +
  • docusaurus +
      +
    • #7977 fix(core): preload should support encoded page links (@adventure-yunfei)
    • +
    • #7996 fix(core): CLI command write-translations should extract translations from @docu… (@slorber)
    • +
    • #7952 fix(core): allow overriding ssr/dev template meta tags (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7964 fix(sitemap): filter all routes with robots meta containing noindex (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7910 fix(theme-classic): code block line number display with line wrapping (@yzhe819)
    • +
    • #7786 fix: collapse siblings when first category is selected (@whiteand)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #7982 fix(theme): add aria-label to skip to content link region (@YoniChechik)
    • +
    • #7940 refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow (@slorber)
    • +
    • #7876 refactor(theme-classic): make tag text visually certered (@Kosai106)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7941 feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types +
      +
    • #7942 feat(theme-classic): use lang attribute in navbar locale dropdown items (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic + +
  • +
+

Committers: 10

+]]>
+ + adventure-yunfei + https://github.com/adventure-yunfei + + + Bagdasar Ovsepyan + https://github.com/b-ovsepian + + + Ngô Quốc Đạt + https://github.com/datlechin + + + Joshua Chen + https://github.com/Josh-Cena + + + Kevin Østerkilde + https://github.com/Kosai106 + + + Morgane Dubus + https://github.com/mdubus + + + Sébastien Lorber + https://github.com/slorber + + + whiteand + https://github.com/whiteand + + + Yoni Chechik + https://github.com/YoniChechik + + + yzhe819 + https://github.com/yzhe819 + +
+ + <![CDATA[2.0.1]]> + https://docusaurus.io/changelog/2.0.1 + + 2022-08-01T20:00:00.000Z + + Fix bad npm publish of 2.0.0

+

Committers: 1

+]]>
+ + Sébastien Lorber + https://github.com/slorber + +
+ + <![CDATA[2.0.0]]> + https://docusaurus.io/changelog/2.0.0 + + 2022-08-01T19:00:00.000Z + + Bad npm publish, please use 2.0.1

+

💅 Polish

+
    +
  • docusaurus +
      +
    • #7781 refactor(core): log Docusaurus & Node version before exiting (@Josh-Cena)
    • +
    +
  • +
+

Committers: 2

+]]>
+ + Joshua Chen + https://github.com/Josh-Cena + + + Sébastien Lorber + https://github.com/slorber + +
+ + <![CDATA[2.0.0-rc.1]]> + https://docusaurus.io/changelog/2.0.0-rc.1 + + 2022-07-14T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus +
      +
    • #7776 fix(core): swizzle --eject js should not copy theme .d.ts files (@slorber)
    • +
    • #7750 fix(deploy): revert "feat(deploy): copy local git config to tmp repo (#7702)" (@ghostsquad)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7774 fix(sitemap): complete gracefully when all pages have noIndex meta (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #7761 fix(algolia-search): test for canUseIntersectionObserver (@RoiArthurB)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #7706 docs: release process, versioning, breaking changes, public API surface (@slorber)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-classic +
      +
    • #7777 refactor(theme): fix duplicate page metadata usage (@slorber)
    • +
    • #7771 chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug (@slorber)
    • +
    +
  • +
+

Committers: 11

+]]>
+ + Sunghyun Cho + https://github.com/anaclumos + + + Evan + https://github.com/DigiPie + + + 凱恩 Kane + https://github.com/Gary50613 + + + Wes McNamee + https://github.com/ghostsquad + + + Jeffrey Aven + https://github.com/jeffreyaven + + + Joshua Chen + https://github.com/Josh-Cena + + + LichLord91 + https://github.com/LichLord91 + + + Bruce Song + https://github.com/recallwei + + + Arthur Brugière + https://github.com/RoiArthurB + + + Sébastien Lorber + https://github.com/slorber + + + The Nguyen + https://github.com/treoden + +
+ + <![CDATA[2.0.0-beta.22]]> + https://docusaurus.io/changelog/2.0.0-beta.22 + + 2022-07-08T20:00:00.000Z + + 💥 Breaking Change +
    +
  • docusaurus-theme-classic +
      +
    • #7740 refactor(theme): nest theme icons under subfolder @theme/Icon/* (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7716 refactor(theme): split BlogPostItem into smaller theme subcomponents (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7660 refactor(theme-common): split package into public/internal API entrypoints (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7644 refactor(docs,theme): split DocItem comp, useDoc hook (@slorber)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7642 refactor: remove "error" reporting level, move reportMessage to logger (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus +
      +
    • #7152 refactor: handle all admonitions via JSX component (@lex111)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-theme-search-algolia, docusaurus-theme-translations +
      +
    • #7666 feat(algolia-search): allow translating search modal (@forresst)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7643 feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #7649 feat(client-redirects): make plugin respect onDuplicateRoutes config (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7624 feat: allow customizing localization path of each locale (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7557 feat: allow specifying custom target for FooterLogo (@vannyle)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations +
      +
    • #7556 feat: add admonition type title translations (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7386 feat(core): allow customizing the i18n directory path (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #7514 feat(live-codeblock): add support for noInline to interactive code blocks (@jpdriver)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #7727 fix(theme): show blog post edit link even when no tag & not truncated (@anaclumos)
    • +
    • #7659 fix(theme-classic): expose empty string alt text in navbar logos (@BenDMyers)
    • +
    • #7595 fix(content-pages): add article wrapper around MDXContent (@matkoch)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7638 fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category (@slorber)
    • +
    • #7634 fix(content-docs): allow translating doc labels in sidebars.js (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7604 fix(utils): allow any non-boundary characters in Markdown heading ID (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-cssnano-preset +
      +
    • #7593 fix(cssnano-preset): disable z-index minification (@dpang314)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7551 fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word (@slorber)
    • +
    • #7485 fix(theme-classic): inconsistent code block wrapping (@dpang314)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-common, docusaurus-utils + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7673 fix(content-docs): format last update date as "Jun 19, 2020" (@sigwinch28)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7671 refactor(theme-common): rename useDynamicCallback to useEvent (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7648 fix(theme-common): make useShallowMemoObject key-order-insensitive (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7639 chore(create): update the facebook template with current assets (@zpao)
    • +
    • #7520 feat: add engines field to templates' package.json (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus +
      +
    • #7579 refactor(pwa): simplify registerSW code, fix ESLint errors (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag + +
  • +
+

📝 Documentation

+ +

🔧 Maintenance

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7676 refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7674 chore: prevent importing theme components with relative paths (@slorber)
    • +
    • #7664 chore: upgrade Infima to alpha.40 (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus +
      +
    • #7583 refactor(cli): make the CLI an even thinner wrapper around command functions (@Josh-Cena)
    • +
    • #7547 chore: update static-site-generator-webpack-plugin (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 51

+]]>
+ + Flávio Silva + https://github.com/201flaviosilva + + + 7Wate + https://github.com/7Wate + + + 赤城结衣 + https://github.com/AkagiYui + + + alewolf + https://github.com/alewolf + + + Alexander Nestorov + https://github.com/alexandernst + + + Ahmed Altomy + https://github.com/Altomy + + + Sunghyun Cho + https://github.com/anaclumos + + + Benjamin Cabanes + https://github.com/bcabanes + + + Ben Myers + https://github.com/BenDMyers + + + Boulet + https://github.com/Boulet- + + + Charles Ancheta + https://github.com/cbebe + + + Clemie McCartney + https://github.com/clemiee + + + Ngô Quốc Đạt + https://github.com/datlechin + + + Dharsan B + https://github.com/DharsanB + + + dht + https://github.com/dht + + + Diego França + https://github.com/difranca + + + dpang314 + https://github.com/dpang314 + + + emattia + https://github.com/emattia + + + Forresst + https://github.com/forresst + + + 凱恩 Kane + https://github.com/Gary50613 + + + Wes McNamee + https://github.com/ghostsquad + + + Hyunseung Lee + https://github.com/HyunseungLee-Travis + + + DOLLE + https://github.com/JeremyDolle + + + Johnie Hjelm + https://github.com/johnie + + + John Reilly + https://github.com/johnnyreilly + + + Joshua Chen + https://github.com/Josh-Cena + + + JP + https://github.com/jpdriver + + + Joshua Schmitt + https://github.com/jqshuv + + + Kürşat Şimşek + https://github.com/kursatsmsek + + + Lane Goolsby + https://github.com/lanegoolsby + + + Alexey Pyltsyn + https://github.com/lex111 + + + Matthias Koch + https://github.com/matkoch + + + 李小雨 + https://github.com/metal-young + + + Tom Mrazauskas + https://github.com/mrazauskas + + + pincman + https://github.com/pincman + + + Redcamel + https://github.com/redcamel + + + Rein van Haaren + https://github.com/reinvanhaaren + + + Rudra Sen + https://github.com/RudraSen2 + + + sado + https://github.com/sado0823 + + + Dzung Do + https://github.com/saosangmo + + + Dima Grossman + https://github.com/scopsy + + + SheetJSDev + https://github.com/SheetJSDev + + + Joe Harrison + https://github.com/sigwinch28 + + + Sébastien Lorber + https://github.com/slorber + + + Huy Nguyen + https://github.com/Smilefounder + + + Steven Serrata + https://github.com/sserrata + + + Szilárd Dóró + https://github.com/szilarddoro + + + Le Thi Van + https://github.com/vannyle + + + Webber Takken + https://github.com/webbertakken + + + Yangshun Tay + https://github.com/yangshun + + + Paul O’Shannessy + https://github.com/zpao + +
+ + <![CDATA[2.0.0-beta.21]]> + https://docusaurus.io/changelog/2.0.0-beta.21 + + 2022-05-27T20:00:00.000Z + + 💥 Breaking Change +
    +
  • docusaurus-plugin-pwa +
      +
    • #7422 refactor(pwa): remove reloadPopup option in favor of swizzling (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-plugin-sitemap + +
  • +
  • docusaurus-utils, docusaurus +
      +
    • #7371 feat(core): support docusaurus.config.cjs as default file name (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #7357 feat(theme-classic): allow className as option for type: "search" (@JPeer264)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #7424 fix(gtag): send the newly rendered page's title instead of the old one's (@ori-shalom)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #7507 fix(create-docusaurus): potential security issue with command injection (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #7492 fix(core): always treat error boundary fallback as a callback (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7438 fix(theme-classic): allow nested task lists to preserve the indent (@Josh-Cena)
    • +
    • #7430 fix(theme-classic): consistently apply the right active class name for all navbar items (@Josh-Cena)
    • +
    • #7411 fix(theme-classic): autocollapse sidebar categories when navigating with paginator (@pranabdas)
    • +
    • #7363 fix(theme-classic): resolve customCss from site dir (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7464 fix(utils): fix Markdown link replacement when link text is same as href (@Josh-Cena)
    • +
    • #7458 fix(utils): avoid replacing Markdown links missing the directly next link (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #7392 fix(mdx-loader): use React.Fragment as fragment factory (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7385 fix(content-docs): restore functionality when a category only has index page (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus +
      +
    • #7499 fix: avoid printing period after localhost URL (@Zamiell)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7374 refactor(create): clean up logic when prompting for unspecified arguments (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7503 docs: document MDXComponents scope (@Josh-Cena)
  • +
  • #7497 docs: link every reference of types in API table to the type definition (@Zamiell)
  • +
  • #7407 docs: add Azure SWA as deployment option (@nitya)
  • +
  • #7390 fix(website): use react-lite-youtube-embed for lazy YouTube video (@matkoch)
  • +
+

🔧 Maintenance

+
    +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations + +
  • +
  • stylelint-copyright + +
  • +
  • docusaurus-cssnano-preset + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader +
      +
    • #7437 refactor: use TS project references instead of running tsc multiple times (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus-theme-classic +
      +
    • #7415 refactor(theme-classic): always collocate stylesheets with components in one folder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
+

Committers: 23

+]]>
+ + Benjamin Diolez + https://github.com/BenDz + + + Charles Korn + https://github.com/charleskorn + + + Ngô Quốc Đạt + https://github.com/datlechin + + + Designatory + https://github.com/Designatory + + + Forresst + https://github.com/forresst + + + 凱恩 Kane + https://github.com/Gary50613 + + + Ggicci + https://github.com/ggicci + + + Joshua Chen + https://github.com/Josh-Cena + + + Jan Peer Stöcklmair + https://github.com/JPeer264 + + + Jeremy + https://github.com/jrmyw92 + + + Junjie + https://github.com/junjieweb + + + Lane Goolsby + https://github.com/lanegoolsby + + + Massoud Maboudi + https://github.com/massoudmaboudi + + + Matthias Koch + https://github.com/matkoch + + + Akara + https://github.com/Messiahhh + + + Michael Hughes + https://github.com/mhughes2k + + + Nitya Narasimhan + https://github.com/nitya + + + Oluwatobi Sofela + https://github.com/oluwatobiss + + + Ori Shalom + https://github.com/ori-shalom + + + Pranab Das + https://github.com/pranabdas + + + Rui Peres + https://github.com/RuiAAPeres + + + Sébastien Lorber + https://github.com/slorber + + + James + https://github.com/Zamiell + +
+ + <![CDATA[2.0.0-beta.20]]> + https://docusaurus.io/changelog/2.0.0-beta.20 + + 2022-05-05T20:00:00.000Z + + 🐛 Bug Fix +
    +
  • docusaurus +
      +
    • #7342 fix: avoid flash of page scrolling to top on refresh (@slorber)
    • +
    • #7329 fix(core): inject docusaurus version into SSR as local (@RDIL)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7341 fix(theme-classic): properly highlight code block line numbers (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7334 feat(website): make canary release page display actual canary version name (@Josh-Cena)
  • +
  • #7343 docs: add page for create-docusaurus API documentation (@Josh-Cena)
  • +
  • #7340 docs: add Yandex Metrika plugin to community plugins (@sgromkov)
  • +
  • #7336 fix(website): fix multiple accessibility issues around color contrast (@Josh-Cena)
  • +
  • #7327 docs: add clarity to versioning behavior (@pepopowitz)
  • +
+

Committers: 6

+]]>
+ + Joshua Chen + https://github.com/Josh-Cena + + + Alexey Pyltsyn + https://github.com/lex111 + + + Steven Hicks + https://github.com/pepopowitz + + + Reece Dunham + https://github.com/RDIL + + + Sergey Gromkov + https://github.com/sgromkov + + + Sébastien Lorber + https://github.com/slorber + +
+ \ No newline at end of file diff --git a/changelog/feed.json b/changelog/feed.json new file mode 100644 index 0000000000..d8b69493f3 --- /dev/null +++ b/changelog/feed.json @@ -0,0 +1,264 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "Docusaurus changelog", + "home_page_url": "https://docusaurus.io/changelog", + "description": "Keep yourself up-to-date about new features in every release", + "items": [ + { + "id": "https://docusaurus.io/changelog/3.2.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus\n\n
  • \n
\n

📝 Documentation

\n\n

🤖 Dependencies

\n\n

Committers: 2

\n", + "url": "https://docusaurus.io/changelog/3.2.1", + "title": "3.2.1", + "summary": "Bug Fix", + "date_modified": "2024-04-04T20:00:00.000Z", + "author": { + "name": "ozaki", + "url": "https://github.com/OzakIOne" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/3.2.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-types, docusaurus-utils, docusaurus\n\n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils\n
      \n
    • #9912 feat(blog): add LastUpdateAuthor & LastUpdateTime (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-plugin-debug, docusaurus-types, docusaurus\n
      \n
    • #9931 feat(core): add new plugin allContentLoaded lifecycle (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #9886 feat(blog): allow processing blog posts through a processBlogPosts function (@OzakIOne)
    • \n
    • #9838 feat(blog): add blog pageBasePath plugin option (@ilg-ul)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9681 feat(swizzle): ask user preferred language if no language CLI option provided (@yixiaojiu)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-utils\n
      \n
    • #9442 feat(create-docusaurus): ask user for preferred language when no language CLI option provided (@Rafael-Martins)
    • \n
    \n
  • \n
  • docusaurus-plugin-vercel-analytics\n
      \n
    • #9687 feat(plugin-vercel-analytics): add new vercel analytics plugin (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader\n
      \n
    • #9684 feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials (@anatolykopyl)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-mdx-loader\n
      \n
    • #9999 fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-search-algolia\n
      \n
    • #9945 fix(a11y): move focus algolia-search focus back to search input on Escape (@mxschmitt)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n\n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #9944 fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button (@mxschmitt)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus-utils\n
      \n
    • #9897 fix(mdx-loader): mdx-code-block should support CRLF (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9878 fix(core): fix default i18n calendar used, infer it from locale if possible (@slorber)
    • \n
    • #9852 fix(core): ensure core error boundary is able to render theme layout (@slorber)
    • \n
    \n
  • \n
  • docusaurus-remark-plugin-npm2yarn\n
      \n
    • #9861 fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n
      \n
    • #9851 fix(theme-classic): should use plurals for category items description (@baradusov)
    • \n
    \n
  • \n
\n

:running: Performance

\n
    \n
  • docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #9975 refactor(core): improve dev perf, fine-grained site reloads - part 3 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-types, docusaurus\n
      \n
    • #9968 refactor(core): improve dev perf, fine-grained site reloads - part2 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus\n
      \n
    • #9903 refactor(core): improve dev perf, fine-grained site reloads - part1 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils\n
      \n
    • #9890 perf: optimize getFileCommitDate, make it async (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9798 refactor(core): internalize, simplify and optimize the SSG logic (@slorber)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #9868 refactor(theme): dates should be formatted on the client-side instead of in nodejs code (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types\n
      \n
    • #9669 refactor(theme): use JSON-LD instead of microdata for blog structured data (@johnnyreilly)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #9839 refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode (@OzakIOne)
    • \n
    \n
  • \n
\n

📝 Documentation

\n\n

🤖 Dependencies

\n\n

🔧 Maintenance

\n
    \n
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus\n\n
  • \n
  • Other\n\n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils\n
      \n
    • #9963 refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds (@slorber)
    • \n
    \n
  • \n
\n

Committers: 22

\n", + "url": "https://docusaurus.io/changelog/3.2.0", + "title": "3.2.0", + "summary": "New Feature", + "date_modified": "2024-03-29T20:00:00.000Z", + "author": { + "name": "Josue [4tro] A", + "url": "https://github.com/4troDev" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/3.1.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus-types, docusaurus\n
      \n
    • #9791 fix(core): broken links optimization behaves differently than non-optimized logic (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9788 fix(core): links with target \"_blank\" should no be checked by the broken link checker (@slorber)
    • \n
    • #9407 fix(core): conditionally include hostname parameter when using… (@jack-robson)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #9776 fix(mdx-loader): allow spaces before mdx-code-block info string (@eitsupi)
    • \n
    \n
  • \n
  • create-docusaurus\n
      \n
    • #9783 fix(create-docusaurus): fix typo in init template sample docs (@dawei-wang)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #9727 fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 (@tats-u)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-mermaid\n\n
  • \n
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus\n\n
  • \n
\n

:running: Performance

\n
    \n
  • docusaurus\n\n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-classic\n\n
  • \n
\n

Committers: 6

\n", + "url": "https://docusaurus.io/changelog/3.1.1", + "title": "3.1.1", + "summary": "Bug Fix", + "date_modified": "2024-01-26T20:00:00.000Z", + "author": { + "name": "dawei-wang", + "url": "https://github.com/dawei-wang" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/3.1.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #9528 feat(core): make broken link checker detect broken anchors - add onBrokenAnchors config (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-types, docusaurus\n
      \n
    • #9674 feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #9671 feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML (@tats-u)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #9624 feat: siteConfig.markdown.parseFrontMatter hook (@slorber)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #9610 feat(core): enable port configuration via environment variable (@OzakIOne)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock\n
      \n
    • #9704 fix(theme): allow empty code blocks and live playgrounds (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus\n
      \n
    • #9696 fix(create-docusaurus): fix init template code blocks, and little improvements (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-pwa\n\n
  • \n
  • docusaurus\n
      \n
    • #9648 fix(cli): output help when no conventional config + no subcommand (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-theme-live-codeblock\n
      \n
    • #9631 fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync (@slorber)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #9617 fix(utils): Markdown link replacement with <> but no spaces (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-module-type-aliases\n
      \n
    • #9612 fix(type-aliases): add title prop for imported inline SVG React components (@axmmisaka)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #9581 fix(content-blog): add baseUrl for author.image_url (@OzakIOne)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #9477 fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) (@c0h1b4)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-common\n
      \n
    • #9335 refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize (@jgarrow)
    • \n
    \n
  • \n
\n

🔧 Maintenance

\n
    \n
  • docusaurus-theme-search-algolia\n\n
  • \n
\n

Committers: 8

\n", + "url": "https://docusaurus.io/changelog/3.1.0", + "title": "3.1.0", + "summary": "New Feature", + "date_modified": "2024-01-05T20:00:00.000Z", + "author": { + "name": "axmmisaka", + "url": "https://github.com/axmmisaka" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/3.0.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus-utils\n
      \n
    • #9570 fix: add v2 retrocompatible support for quoted admonitions (@slorber)
    • \n
    • #9535 fix: v3 admonitions should support v2 title syntax for nested admonitions (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #9531 fix(theme): docs html sidebar items should always be visible (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #9530 fix(theme): fix firefox CSS :has() support bug (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus\n
      \n
    • #9487 fix(create-docusaurus): fix readme docusaurus 2 ref (@slorber)
    • \n
    \n
  • \n
\n

🤖 Dependencies

\n
    \n
  • docusaurus-plugin-debug\n
      \n
    • #9566 chore(debug-plugin): migrate to a new maintained JSON Viewer (@mcrstudio)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #9572 chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx (@harryzcy)
    • \n
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia\n\n
  • \n
  • docusaurus\n
      \n
    • #9547 chore(core): replace wait-on dependency with custom lighter code (@NickGerleman)
    • \n
    \n
  • \n
  • docusaurus-plugin-pwa, docusaurus\n\n
  • \n
\n

Committers: 6

\n", + "url": "https://docusaurus.io/changelog/3.0.1", + "title": "3.0.1", + "summary": "Bug Fix", + "date_modified": "2023-11-30T20:00:00.000Z", + "author": { + "name": "Chongyi Zheng", + "url": "https://github.com/harryzcy" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/3.0.0", + "content_html": "

💥 Breaking Change

\n
    \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic\n\n
  • \n
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus\n
      \n
    • #9316 chore: upgrade syntax highlighting dependencies, prism-react-renderer to v2, react-live to v4 (@harryzcy)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader\n\n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic\n
      \n
    • #9310 chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n
      \n
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid\n
      \n
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-tsconfig, docusaurus\n
      \n
    • #9258 feat: Docusaurus v3 upgrades and require TypeScript 5 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n\n
  • \n
  • create-docusaurus, docusaurus-tsconfig\n
      \n
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus\n
      \n
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus\n\n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus\n\n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus\n
      \n
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • \n
    \n
  • \n
\n

🚀 New Feature

\n
    \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic\n\n
  • \n
  • docusaurus-mdx-loader, docusaurus-utils\n
      \n
    • #9394 feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives (@OzakIOne)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • \n
    \n
  • \n
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid\n
      \n
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus\n\n
  • \n
  • docusaurus-plugin-content-blog\n\n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #9152 feat(theme): add support for meta og locale and alternates (@FlorinaPacurar)
    • \n
    • #9028 feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page (@slorber)
    • \n
    • #8915 feat(theme): add queryString option to localeDropdown (@wceolin)
    • \n
    \n
  • \n
  • docusaurus-plugin-client-redirects, docusaurus-utils-validation\n
      \n
    • #9171 feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9102 feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) (@amdshrif)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-types, docusaurus\n
      \n
    • #9097 feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-pages, docusaurus-theme-classic\n
      \n
    • #9071 feat(pages): add support for missing SEO front matter + improve SEO docs (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-tsconfig\n
      \n
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus\n
      \n
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #8982 feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab (@jj-style)
    • \n
    • #8870 feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; (@tarunrajput)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus\n\n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8890 feat(theme): create more generic ThemedComponent util from ThemedImage (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-search-algolia, eslint-plugin\n\n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus, eslint-plugin\n\n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils\n
      \n
    • #8004 feat(docs,blog,pages): add support for \"unlisted\" front matter - hide md content in production (@jodyheavener)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-common\n
      \n
    • #9446 fix(theme): fix useWindowSize React hydration issue (@slorber)
    • \n
    • #9276 fix(theme-common): remove useless useSyncExternalStore shim (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #9437 fix(plugin-blog): blog archive should hide unlisted blog posts (@slorber)
    • \n
    • #9151 fix(content-blog): links in feed should be absolute (@VinceCYLiao)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9387 fix(core): log missing errorInfo in React 18 onRecoverableError callback (@johnnyreilly)
    • \n
    • #9309 fix(cli): disable vertical borders of the update notification (@qwerzl)
    • \n
    • #9112 fix(core): throw error if build folder already exists on initial clean (@thedevwonder)
    • \n
    • #9006 fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades (@0420syj)
    • \n
    • #7951 fix(core): make webpack HMR always listen to current location (@jeengbe)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader\n
      \n
    • #9386 fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark (@slorber)
    • \n
    • #9262 fix(mdx-loader): improve mdxJsxTextElementToHtml (@slorber)
    • \n
    • #9202 fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior (@yosukekato165)
    • \n
    • #9100 fix(mdx): fix for html multi-line comments (@slorber)
    • \n
    • #9091 fix(mdx-loader): loader error message should display stacktrace if no extra MDX details (@slorber)
    • \n
    • #8960 fix: allow html syntax in MDX v2 with format md (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #9385 fix(theme): avoid rendering empty search container if site has no search plugin (@slorber)
    • \n
    • #9183 fix(theme): make Prism code block language / additionalLanguages case insensitive (@heysujal)
    • \n
    • #9216 fix(theme): fix typo in swizzle component config (@sixhobbits)
    • \n
    • #9093 fix(theme): support details/summary in CommonMark + add md dogfood test cases (@slorber)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-utils\n
      \n
    • #9369 fix(mdx-loader): prevent Open Graph images from being inserted as base64 (@Zwyx)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #9362 fix(theme-translations): add Japanese translation for \"warning\" (@tats-u)
    • \n
    • #9321 fix(theme-translations): add missing zh-Hans messages (@chudongvip)
    • \n
    • #9338 fix(theme-translations): complete and fix hungarian translations (@la55u)
    • \n
    • #9292 fix(theme-translations): add missing Spanish theme translations (@Villanuevand)
    • \n
    • #9021 fix(theme-transalations): fix Swedish translation of \"last updated\" (@gazab)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n
      \n
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • \n
    • #9269 fix(theme): improve docs sidebar category caret aria-label accessibility (@pinakipb2)
    • \n
    \n
  • \n
  • Other\n\n
  • \n
  • create-docusaurus\n
      \n
    • #9217 fix(create-docusaurus): increase Browserslist support query in dev (@slorber)
    • \n
    \n
  • \n
  • docusaurus-utils, docusaurus\n\n
  • \n
  • docusaurus-plugin-debug\n
      \n
    • #9116 fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork (@slorber)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #9046 fix(utils): better handling of code blocks in link replacement (@Josh-Cena)
    • \n
    • #8927 fix(utils): make Markdown link replacement much more rigorous (@Josh-Cena)
    • \n
    • #7864 fix(utils): always match exclusion root dirs as complete folder paths (@Josh-Cena)
    • \n
    • #7801 fix(utils): recognize ~~~ as code fences in link replacement (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-pwa, docusaurus\n
      \n
    • #8872 fix(core): better error logging on SSR/dev failures + log stacktraces and error causes (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation, docusaurus\n
      \n
    • #8258 fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as \"/\" (@Djunnni)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8319 fix(docs,theme): auto-generated category index should not display unlisted content (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock\n
      \n
    • #8015 fix(live-codeblock): add error boundary to live code preview (@rashidmya)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus\n
      \n
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus\n
      \n
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • \n
    \n
  • \n
\n

:running: Performance

\n
    \n
  • docusaurus\n\n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus\n
      \n
    • #8972 fix: remove useless js-loader in front of mdx-loader (@slorber)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #9438 refactor(blog-plugin): blog archive reverse ordering of posts (@slorber)
    • \n
    • #9184 fix(theme): change schema.org itemType prop urls from http to https (@thedevwonder)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #9381 feat(core): throw error when official docusaurus dependencies use different versions (@JorensM)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #9302 chore(theme-translations): complete zh-Hant translations (@qwerzl)
    • \n
    • #9025 chore(theme-translations): complete it translations (@bitpredator)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus\n
      \n
    • #9133 fix(init): change initial site URL to one that is safe for the future (@tats-u)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8150 fix(theme-classic): polish admonition details, render title-only admonitions (@attitude)
    • \n
    \n
  • \n
  • docusaurus-plugin-google-gtag\n
      \n
    • #8143 refactor(plugin-gtag): update gtag plugin to modern SPA recommendations (@lanegoolsby)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus\n
      \n
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • \n
    \n
  • \n
\n

📝 Documentation

\n\n

🤖 Dependencies

\n
    \n
  • Other\n\n
  • \n
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright\n\n
  • \n
  • create-docusaurus\n\n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus\n\n
  • \n
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright\n\n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, eslint-plugin\n\n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, eslint-plugin\n\n
  • \n
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-pwa, docusaurus, eslint-plugin\n\n
  • \n
\n

🔧 Maintenance

\n
    \n
  • docusaurus-migrate\n\n
  • \n
  • docusaurus-theme-search-algolia\n
      \n
    • #9320 chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #9304 chore(theme-translations): complete French translations (@forresst)
    • \n
    \n
  • \n
  • Other\n
      \n
    • #9264 ci: only install Chromium for Playwright Argos tests (@mxschmitt)
    • \n
    • #9245 chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility (@AFRUITPIE)
    • \n
    • #8947 test: add visual regression tests with Argos CI (@slorber)
    • \n
    • #8911 chore: migrate website config to createConfigAsync (@slorber)
    • \n
    • #8578 docs: fix dead anchor for issue reporting guidelines in template (@Sainan)
    • \n
    • #8447 chore: update lerna to v6.2.0 (@AgentEnder)
    • \n
    • #7967 test: improve e2e verdaccio configuration (@juanpicado)
    • \n
    • #7863 docs: publish 2.0.0 release blog post + adapt website for the launch (@slorber)
    • \n
    • #7828 misc: change showcase submission process, use GitHub discussion (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #9195 test(blog-plugin): fix ability to generate proper blog website fixture build snapshot (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic\n\n
  • \n
  • docusaurus\n\n
  • \n
\n

Committers: 132

\n", + "url": "https://docusaurus.io/changelog/3.0.0", + "title": "3.0.0", + "summary": "Breaking Change", + "date_modified": "2023-10-31T20:00:00.000Z", + "author": { + "name": "Wan Sim", + "url": "https://github.com/0420syj" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.4.3", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus-plugin-content-docs\n
      \n
    • #9107 fix(content-docs): sidebar generator should return customProps for doc items (@TheCatLady)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #9108 feat(theme-classic): add description & keywords microdata to blog posts (@TheCatLady)
    • \n
    • #9099 fix(theme): only set classname on ul elements if they have an existing class (@homotechsual)
    • \n
    • #9243 fix(theme-common): ThemedComponent should display something when JS is disabled (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #9130 fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash (@ori-shalom)
    • \n
    \n
  • \n
\n

Committers: 4

\n", + "url": "https://docusaurus.io/changelog/2.4.3", + "title": "2.4.3", + "summary": "Bug Fix", + "date_modified": "2023-09-20T20:00:00.000Z", + "author": { + "name": "Mikey O'Toole", + "url": "https://github.com/homotechsual" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.4.2", + "content_html": "

Bad npm publish, please use 2.4.3

", + "url": "https://docusaurus.io/changelog/2.4.2", + "title": "2.4.2", + "summary": "Bad npm publish, please use 2.4.3", + "date_modified": "2023-09-20T19:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.4.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8971 fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus\n\n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-theme-common, docusaurus-utils-common, docusaurus\n
      \n
    • #8909 fix(theme): add __ prefix to technical anchors, search crawlers (Algolia) should ignore them (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #8906 fix(theme-common): fix collapsible component with prefers-reduced-motion (@slorber)
    • \n
    • #8873 fix(theme-common): fix confusing theme error message: bad sidebar id suggestions (@slorber)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #8874 fix(utils): handle Markdown links with spaces to route correctly (@morsko1)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n
      \n
    • #8842 fix(theme-translations): remove redundant navigation text in aria label (@tarunrajput)
    • \n
    \n
  • \n
  • create-docusaurus\n\n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #8862 refactor(theme): expose copy, success and word-wrap icons as standalone components (@armano2)
    • \n
    \n
  • \n
\n

Committers: 7

\n", + "url": "https://docusaurus.io/changelog/2.4.1", + "title": "2.4.1", + "summary": "Bug Fix", + "date_modified": "2023-05-15T20:00:00.000Z", + "author": { + "name": "Andrew Lyons", + "url": "https://github.com/andrewnicols" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.4.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic\n
      \n
    • #8236 feat(content-docs): add support for sidebar item category/link descriptions in generated index page (@ZarakiKanzaki)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #8708 feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark (@slorber)
    • \n
    • #8616 feat(theme): add ability to translate navbar+footer logo alt text (@Mysterious-Dev)
    • \n
    \n
  • \n
  • docusaurus-remark-plugin-npm2yarn\n
      \n
    • #8690 feat(npm-to-yarn): add support for PnPm and custom converters (@armano2)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8677 feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8674 feat(theme-classic): respect prefers-reduced-motion: reduce mediaquery, bump Infima to alpha.43 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #8668 feat(theme-translations): add Hungarian theme translations (@trueqap)
    • \n
    • #8631 feat(theme-translations): add Norwegian (Bokmål) theme translation (@dr0nn1)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #8656 feat(theme-common): allow passing a string for details summary (@pReya)
    • \n
    \n
  • \n
  • docusaurus-plugin-google-gtag\n
      \n
    • #8620 feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition (@slorber)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #8803 fix(theme): codeblock buttons should be kept on the right when using RTL locale (@Vishruta-Patil)
    • \n
    • #8615 fix(theme): improve color toggle when using dark navbar (@dewanshDT)
    • \n
    • #8699 fix(theme-classic): fix tab focus bug in dropdown (#8697) (@kagankan)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n\n
  • \n
  • docusaurus-theme-common, docusaurus-theme-search-algolia\n
      \n
    • #8757 fix(search): search page should react to querystring changes + cleanup/refactor (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8746 fix(core): baseUrl error banner link anchor case (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #8744 fix(theme-translations): fix wrong arabic words (tip/next) (@Anasqx)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • create-docusaurus\n
      \n
    • #8712 polish(create-docusaurus): the starter template should use a navbar item \"docSidebar\" instead of \"doc\" (less fragile on updates) (@biplavmz)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus\n
      \n
    • #8735 polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API (@tannerdolby)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus\n\n
  • \n
\n

Committers: 14

\n", + "url": "https://docusaurus.io/changelog/2.4.0", + "title": "2.4.0", + "summary": "New Feature", + "date_modified": "2023-03-23T20:00:00.000Z", + "author": { + "name": "Anas", + "url": "https://github.com/Anasqx" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.3.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-common\n
      \n
    • #8628 fix(theme-common): fix issue in tab scroll position restoration on tab click (@slorber)
    • \n
    • #8619 fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop (@slorber)
    • \n
    • #8618 fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n\n
  • \n
  • docusaurus-utils\n
      \n
    • #8606 fix(utils): handle CRLF when parsing MDX imports (@scastiel)
    • \n
    \n
  • \n
  • docusaurus-preset-classic\n
      \n
    • #8597 fix(preset-classic): install the right plugin for googleTagManager (@Josh-Cena)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-translations\n\n
  • \n
\n

🤖 Dependencies

\n
    \n
  • docusaurus-plugin-client-redirects, docusaurus-theme-search-algolia, docusaurus\n\n
  • \n
\n

Committers: 3

\n", + "url": "https://docusaurus.io/changelog/2.3.1", + "title": "2.3.1", + "summary": "Bug Fix", + "date_modified": "2023-02-03T20:00:00.000Z", + "author": { + "name": "Joshua Chen", + "url": "https://github.com/Josh-Cena" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.3.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-theme-translations\n
      \n
    • #8541 feat(theme-translations): default translations for Slovenian (sl-SI) (@MatijaSi)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #8378 feat(blog): add options.createFeedItems to filter/limit/transform feed items (@johnnyreilly)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus\n
      \n
    • #8225 feat(theme-classic): store selected tab in query string. (@mturoci)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8397 feat(core): deploy CLI - add support for git url \"insteadOf\": use 'remote get-url' to determine source repo url (@friederbluemle)
    • \n
    \n
  • \n
  • docusaurus-theme-search-algolia\n
      \n
    • #8428 feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls
    • \n
    \n
  • \n
  • docusaurus-plugin-google-tag-manager\n
      \n
    • #8470 feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin (@lanegoolsby)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-mdx-loader\n
      \n
    • #8303 fix(mdx-loader): support nested admonitions
    • \n
    • #8282 fix(mermaid): fix Mermaid integration for v9.2 release
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #8539 fix(algolia): make search footer respect searchPagePath (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8538 fix(core): avoid hash collision when generating chunk names (@Josh-Cena)
    • \n
    • #8481 fix(core): explicitly define CopyWebpackPlugin toType: 'dir' (@Thomascogez)
    • \n
    • #8342 fix(core): normalize input for poll option (@mhnaeem)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus\n
      \n
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • \n
    \n
  • \n
  • docusaurus-theme-search-algolia\n
      \n
    • #8462 fix(search-algolia): pass custom transformItems function to SearchBar (@mturoci)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8486 fix(theme): refactor Tabs, make groupId + queryString work fine together (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #8463 fix(theme-classic): content container grow to take all the available space (@Djunnni)
    • \n
    • #8328 fix(theme): preserve sidebar height on collapse (@0916dhkim)
    • \n
    • #8350 fix(theme): forward className prop in theme-classic's Heading (@JoshuaKGoldberg)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #8424 fix(translations): typo in lastUpdatedAtBy Vietnamese translation (@slorber)
    • \n
    • #8289 fix(theme-translations): complete Turkish theme translations
    • \n
    • #8406 fix(translations): complete farsi theme translations
    • \n
    • #8450 fix(theme-translations): complete Vietnamese theme translations
    • \n
    • #8525 chore(theme-translations): complete pl translations
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog\n
      \n
    • #8381 fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls (@johnnyreilly)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #8275 fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial (@denis-alkhelali)
    • \n
    \n
  • \n
  • docusaurus-utils\n\n
  • \n
  • create-docusaurus, docusaurus-theme-classic\n
      \n
    • #8279 fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card (@slorber)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-classic, docusaurus\n
      \n
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n
      \n
    • #8423 fix(translations): complete Chinese theme translations (@SJFCS)
    • \n
    • #8312 fix(theme-translations): complete Swedish theme translations (@stnor)
    • \n
    \n
  • \n
  • eslint-plugin\n
      \n
    • #8281 feat(eslint-plugin): add plugin to exported configs (@lachieh)
    • \n
    \n
  • \n
\n

Committers: 16

\n", + "url": "https://docusaurus.io/changelog/2.3.0", + "title": "2.3.0", + "summary": "New Feature", + "date_modified": "2023-01-26T20:00:00.000Z", + "author": { + "name": "Danny Kim", + "url": "https://github.com/0916dhkim" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.2.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-plugin-client-redirects\n
      \n
    • #8227 feat(plugin-client-redirects): keep the query string + hash (@Xabilahu)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8210 feat(core): add --config param to swizzle command (@e-im)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-mermaid, docusaurus-types, docusaurus\n
      \n
    • #7490 feat: support mermaid code blocks in Markdown (@sjwall)
    • \n
    \n
  • \n
  • docusaurus-types, docusaurus\n
      \n
    • #8151 feat(core): siteConfig.headTags API to render extra tags in document head (@johnnyreilly)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-plugin-ideal-image\n
      \n
    • #8250 fix(ideal-image): do not pass down img prop (@lex111)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #8246 fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #8234 fix(plugin-content-docs): fix error message context (error cause) when doc processing fails (@shanpriyan)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n
      \n
    • #8207 fix(theme-classic): hamburger menu control navigation by keyboard (@jeferson-sb)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8204 fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API (@mturoci)
    • \n
    • #8059 fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations (@slorber)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #8192 fix(core): throw error for invalid URL in config file (@forgeRW)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #8174 fix(theme): announce theme switches (@mturoci)
    • \n
    • #8190 fix(theme): add more tag names to inline code element set (@Josh-Cena)
    • \n
    • #8163 fix(theme): mobile navbar & skipToContent should cover announcementBar (@adnanhashmi09)
    • \n
    • #8068 fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox (@LittleboyHarry)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #8137 fix(utils): remove non-ASCII limitation for path normalization (@birjj)
    • \n
    • #8158 fix(content-blog): make RSS feed generation work with slugs with .html extension (@Pranav2612000)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus-plugin-client-redirects\n
      \n
    • #8067 fix(redirect): tolerate trailing slash difference if config is undefined (@Josh-Cena)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-translations\n
      \n
    • #8253 chore(theme-translations): complete ru translations (@lex111)
    • \n
    • #8243 chore(theme-translations): complete French translations (@forresst)
    • \n
    • #8075 fix(theme-translation): complete Japanese theme default translation (@pasora)
    • \n
    \n
  • \n
  • docusaurus\n\n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #8161 fix(theme): do not show tab content when tabbing over it; show after selection only (@mturoci)
    • \n
    • #8062 refactor(theme): remove hard-coded tag border-radius (@homotechsual)
    • \n
    \n
  • \n
  • docusaurus-utils-validation, docusaurus\n
      \n
    • #8066 fix(core): normalize slashes for url/baseUrl instead of throwing (@Josh-Cena)
    • \n
    \n
  • \n
\n

Committers: 22

\n", + "url": "https://docusaurus.io/changelog/2.2.0", + "title": "2.2.0", + "summary": "New Feature", + "date_modified": "2022-10-29T20:00:00.000Z", + "author": { + "name": "Adnan Hashmi", + "url": "https://github.com/adnanhashmi09" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.1.0", + "content_html": "

🚀 New Feature

\n
    \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #8008 feat(theme): ability to use <DocCardList> without items prop, on any doc page (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic\n
      \n
    • #7963 feat(docs): allow to configure noIndex per doc version (@slorber)
    • \n
    • #7949 feat(plugin-docs): docs sidebar item link: support \"autoAddBaseUrl\" attribute (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • create-docusaurus\n
      \n
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • \n
    \n
  • \n
  • docusaurus-preset-classic\n
      \n
    • #8029 fix(preset-classic): broken link in \"unrecognized keys\" error message (@mdubus)
    • \n
    \n
  • \n
  • docusaurus\n
      \n
    • #7977 fix(core): preload should support encoded page links (@adventure-yunfei)
    • \n
    • #7996 fix(core): CLI command write-translations should extract translations from @docu… (@slorber)
    • \n
    • #7952 fix(core): allow overriding ssr/dev template meta tags (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-sitemap\n
      \n
    • #7964 fix(sitemap): filter all routes with robots meta containing noindex (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7910 fix(theme-classic): code block line number display with line wrapping (@yzhe819)
    • \n
    • #7786 fix: collapse siblings when first category is selected (@whiteand)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #7982 fix(theme): add aria-label to skip to content link region (@YoniChechik)
    • \n
    • #7940 refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow (@slorber)
    • \n
    • #7876 refactor(theme-classic): make tag text visually certered (@Kosai106)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #7941 feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-types\n
      \n
    • #7942 feat(theme-classic): use lang attribute in navbar locale dropdown items (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
\n

📝 Documentation

\n
    \n
  • create-docusaurus\n
      \n
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic\n\n
  • \n
\n

Committers: 10

\n", + "url": "https://docusaurus.io/changelog/2.1.0", + "title": "2.1.0", + "summary": "New Feature", + "date_modified": "2022-09-01T20:00:00.000Z", + "author": { + "name": "adventure-yunfei", + "url": "https://github.com/adventure-yunfei" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.1", + "content_html": "

Fix bad npm publish of 2.0.0

\n

Committers: 1

\n", + "url": "https://docusaurus.io/changelog/2.0.1", + "title": "2.0.1", + "summary": "Fix bad npm publish of 2.0.0", + "date_modified": "2022-08-01T20:00:00.000Z", + "author": { + "name": "Sébastien Lorber", + "url": "https://github.com/slorber" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.0", + "content_html": "

Bad npm publish, please use 2.0.1

\n

💅 Polish

\n
    \n
  • docusaurus\n
      \n
    • #7781 refactor(core): log Docusaurus & Node version before exiting (@Josh-Cena)
    • \n
    \n
  • \n
\n

Committers: 2

\n", + "url": "https://docusaurus.io/changelog/2.0.0", + "title": "2.0.0", + "summary": "Bad npm publish, please use 2.0.1", + "date_modified": "2022-08-01T19:00:00.000Z", + "author": { + "name": "Joshua Chen", + "url": "https://github.com/Josh-Cena" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.0-rc.1", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus\n
      \n
    • #7776 fix(core): swizzle --eject js should not copy theme .d.ts files (@slorber)
    • \n
    • #7750 fix(deploy): revert \"feat(deploy): copy local git config to tmp repo (#7702)\" (@ghostsquad)
    • \n
    \n
  • \n
  • docusaurus-plugin-sitemap\n
      \n
    • #7774 fix(sitemap): complete gracefully when all pages have noIndex meta (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n\n
  • \n
  • docusaurus-migrate\n\n
  • \n
  • docusaurus-theme-search-algolia\n
      \n
    • #7761 fix(algolia-search): test for canUseIntersectionObserver (@RoiArthurB)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-translations\n\n
  • \n
\n

📝 Documentation

\n
    \n
  • docusaurus-plugin-content-docs\n
      \n
    • #7706 docs: release process, versioning, breaking changes, public API surface (@slorber)
    • \n
    \n
  • \n
\n

🔧 Maintenance

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #7777 refactor(theme): fix duplicate page metadata usage (@slorber)
    • \n
    • #7771 chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug (@slorber)
    • \n
    \n
  • \n
\n

Committers: 11

\n", + "url": "https://docusaurus.io/changelog/2.0.0-rc.1", + "title": "2.0.0-rc.1", + "summary": "Bug Fix", + "date_modified": "2022-07-14T20:00:00.000Z", + "author": { + "name": "Sunghyun Cho", + "url": "https://github.com/anaclumos" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.0-beta.22", + "content_html": "

💥 Breaking Change

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #7740 refactor(theme): nest theme icons under subfolder @theme/Icon/* (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #7716 refactor(theme): split BlogPostItem into smaller theme subcomponents (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia\n
      \n
    • #7660 refactor(theme-common): split package into public/internal API entrypoints (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #7644 refactor(docs,theme): split DocItem comp, useDoc hook (@slorber)
    • \n
    \n
  • \n
  • docusaurus-logger, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #7642 refactor: remove \"error\" reporting level, move reportMessage to logger (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus\n
      \n
    • #7152 refactor: handle all admonitions via JSX component (@lex111)
    • \n
    \n
  • \n
\n

🚀 New Feature

\n
    \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus-theme-search-algolia, docusaurus-theme-translations\n
      \n
    • #7666 feat(algolia-search): allow translating search modal (@forresst)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #7643 feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-client-redirects\n
      \n
    • #7649 feat(client-redirects): make plugin respect onDuplicateRoutes config (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #7624 feat: allow customizing localization path of each locale (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus\n\n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #7557 feat: allow specifying custom target for FooterLogo (@vannyle)
    • \n
    \n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations\n
      \n
    • #7556 feat: add admonition type title translations (@slorber)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus\n
      \n
    • #7386 feat(core): allow customizing the i18n directory path (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-theme-live-codeblock\n
      \n
    • #7514 feat(live-codeblock): add support for noInline to interactive code blocks (@jpdriver)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs\n\n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus-theme-classic\n
      \n
    • #7727 fix(theme): show blog post edit link even when no tag & not truncated (@anaclumos)
    • \n
    • #7659 fix(theme-classic): expose empty string alt text in navbar logos (@BenDMyers)
    • \n
    • #7595 fix(content-pages): add article wrapper around MDXContent (@matkoch)
    • \n
    \n
  • \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #7638 fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category (@slorber)
    • \n
    • #7634 fix(content-docs): allow translating doc labels in sidebars.js (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #7604 fix(utils): allow any non-boundary characters in Markdown heading ID (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-cssnano-preset\n
      \n
    • #7593 fix(cssnano-preset): disable z-index minification (@dpang314)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #7551 fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word (@slorber)
    • \n
    • #7485 fix(theme-classic): inconsistent code block wrapping (@dpang314)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-common, docusaurus-utils\n\n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus\n\n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #7673 fix(content-docs): format last update date as \"Jun 19, 2020\" (@sigwinch28)
    • \n
    \n
  • \n
  • docusaurus-theme-common, docusaurus-theme-search-algolia\n
      \n
    • #7671 refactor(theme-common): rename useDynamicCallback to useEvent (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-common\n
      \n
    • #7648 fix(theme-common): make useShallowMemoObject key-order-insensitive (@Josh-Cena)
    • \n
    \n
  • \n
  • create-docusaurus\n
      \n
    • #7639 chore(create): update the facebook template with current assets (@zpao)
    • \n
    • #7520 feat: add engines field to templates' package.json (@johnnyreilly)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus\n
      \n
    • #7579 refactor(pwa): simplify registerSW code, fix ESLint errors (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag\n\n
  • \n
\n

📝 Documentation

\n\n

🔧 Maintenance

\n
    \n
  • docusaurus-theme-classic, docusaurus-theme-common\n
      \n
    • #7676 refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util (@slorber)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7674 chore: prevent importing theme components with relative paths (@slorber)
    • \n
    • #7664 chore: upgrade Infima to alpha.40 (@slorber)
    • \n
    \n
  • \n
  • Other\n\n
  • \n
  • docusaurus\n
      \n
    • #7583 refactor(cli): make the CLI an even thinner wrapper around command functions (@Josh-Cena)
    • \n
    • #7547 chore: update static-site-generator-webpack-plugin (@slorber)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright\n\n
  • \n
\n

Committers: 51

\n", + "url": "https://docusaurus.io/changelog/2.0.0-beta.22", + "title": "2.0.0-beta.22", + "summary": "Breaking Change", + "date_modified": "2022-07-08T20:00:00.000Z", + "author": { + "name": "Flávio Silva", + "url": "https://github.com/201flaviosilva" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.0-beta.21", + "content_html": "

💥 Breaking Change

\n
    \n
  • docusaurus-plugin-pwa\n
      \n
    • #7422 refactor(pwa): remove reloadPopup option in favor of swizzling (@Josh-Cena)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader\n\n
  • \n
\n

🚀 New Feature

\n
    \n
  • docusaurus-plugin-sitemap\n\n
  • \n
  • docusaurus-utils, docusaurus\n
      \n
    • #7371 feat(core): support docusaurus.config.cjs as default file name (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus\n\n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7357 feat(theme-classic): allow className as option for type: \"search\" (@JPeer264)
    • \n
    \n
  • \n
\n

🐛 Bug Fix

\n
    \n
  • docusaurus\n\n
  • \n
  • docusaurus-plugin-google-gtag\n
      \n
    • #7424 fix(gtag): send the newly rendered page's title instead of the old one's (@ori-shalom)
    • \n
    \n
  • \n
  • create-docusaurus, docusaurus-utils\n
      \n
    • #7507 fix(create-docusaurus): potential security issue with command injection (@slorber)
    • \n
    \n
  • \n
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus\n
      \n
    • #7492 fix(core): always treat error boundary fallback as a callback (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7438 fix(theme-classic): allow nested task lists to preserve the indent (@Josh-Cena)
    • \n
    • #7430 fix(theme-classic): consistently apply the right active class name for all navbar items (@Josh-Cena)
    • \n
    • #7411 fix(theme-classic): autocollapse sidebar categories when navigating with paginator (@pranabdas)
    • \n
    • #7363 fix(theme-classic): resolve customCss from site dir (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-utils\n
      \n
    • #7464 fix(utils): fix Markdown link replacement when link text is same as href (@Josh-Cena)
    • \n
    • #7458 fix(utils): avoid replacing Markdown links missing the directly next link (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-mdx-loader\n
      \n
    • #7392 fix(mdx-loader): use React.Fragment as fragment factory (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-content-docs\n
      \n
    • #7385 fix(content-docs): restore functionality when a category only has index page (@Josh-Cena)
    • \n
    \n
  • \n
\n

💅 Polish

\n
    \n
  • docusaurus-theme-translations\n\n
  • \n
  • docusaurus\n
      \n
    • #7499 fix: avoid printing period after localhost URL (@Zamiell)
    • \n
    \n
  • \n
  • create-docusaurus\n
      \n
    • #7374 refactor(create): clean up logic when prompting for unspecified arguments (@Josh-Cena)
    • \n
    \n
  • \n
\n

📝 Documentation

\n
    \n
  • #7503 docs: document MDXComponents scope (@Josh-Cena)
  • \n
  • #7497 docs: link every reference of types in API table to the type definition (@Zamiell)
  • \n
  • #7407 docs: add Azure SWA as deployment option (@nitya)
  • \n
  • #7390 fix(website): use react-lite-youtube-embed for lazy YouTube video (@matkoch)
  • \n
\n

🔧 Maintenance

\n
    \n
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright\n\n
  • \n
  • docusaurus-theme-classic, docusaurus-theme-translations\n\n
  • \n
  • stylelint-copyright\n\n
  • \n
  • docusaurus-cssnano-preset\n\n
  • \n
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader\n
      \n
    • #7437 refactor: use TS project references instead of running tsc multiple times (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus-plugin-pwa\n\n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7415 refactor(theme-classic): always collocate stylesheets with components in one folder (@Josh-Cena)
    • \n
    \n
  • \n
  • docusaurus\n\n
  • \n
\n

Committers: 23

\n", + "url": "https://docusaurus.io/changelog/2.0.0-beta.21", + "title": "2.0.0-beta.21", + "summary": "Breaking Change", + "date_modified": "2022-05-27T20:00:00.000Z", + "author": { + "name": "Benjamin Diolez", + "url": "https://github.com/BenDz" + }, + "tags": [] + }, + { + "id": "https://docusaurus.io/changelog/2.0.0-beta.20", + "content_html": "

🐛 Bug Fix

\n
    \n
  • docusaurus\n
      \n
    • #7342 fix: avoid flash of page scrolling to top on refresh (@slorber)
    • \n
    • #7329 fix(core): inject docusaurus version into SSR as local (@RDIL)
    • \n
    \n
  • \n
  • docusaurus-theme-classic\n
      \n
    • #7341 fix(theme-classic): properly highlight code block line numbers (@Josh-Cena)
    • \n
    \n
  • \n
\n

📝 Documentation

\n
    \n
  • #7334 feat(website): make canary release page display actual canary version name (@Josh-Cena)
  • \n
  • #7343 docs: add page for create-docusaurus API documentation (@Josh-Cena)
  • \n
  • #7340 docs: add Yandex Metrika plugin to community plugins (@sgromkov)
  • \n
  • #7336 fix(website): fix multiple accessibility issues around color contrast (@Josh-Cena)
  • \n
  • #7327 docs: add clarity to versioning behavior (@pepopowitz)
  • \n
\n

Committers: 6

\n", + "url": "https://docusaurus.io/changelog/2.0.0-beta.20", + "title": "2.0.0-beta.20", + "summary": "Bug Fix", + "date_modified": "2022-05-05T20:00:00.000Z", + "author": { + "name": "Joshua Chen", + "url": "https://github.com/Josh-Cena" + }, + "tags": [] + } + ] +} \ No newline at end of file diff --git a/changelog/page/2.html b/changelog/page/2.html new file mode 100644 index 0000000000..91fc6efcae --- /dev/null +++ b/changelog/page/2.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus changelog

Subscribe through RSS feeds or follow us on to stay up-to-date with new releases!

+ + \ No newline at end of file diff --git a/changelog/page/2.html.html b/changelog/page/2.html.html new file mode 100644 index 0000000000..73bf5fbdcd --- /dev/null +++ b/changelog/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/page/3.html b/changelog/page/3.html new file mode 100644 index 0000000000..bd2038d1c1 --- /dev/null +++ b/changelog/page/3.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus changelog

Subscribe through RSS feeds or follow us on to stay up-to-date with new releases!

+ + \ No newline at end of file diff --git a/changelog/page/3.html.html b/changelog/page/3.html.html new file mode 100644 index 0000000000..4bf855e766 --- /dev/null +++ b/changelog/page/3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/page/4.html b/changelog/page/4.html new file mode 100644 index 0000000000..e70a6c841f --- /dev/null +++ b/changelog/page/4.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus changelog

Subscribe through RSS feeds or follow us on to stay up-to-date with new releases!

+ + \ No newline at end of file diff --git a/changelog/page/4.html.html b/changelog/page/4.html.html new file mode 100644 index 0000000000..7ad9ac7258 --- /dev/null +++ b/changelog/page/4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/page/5.html b/changelog/page/5.html new file mode 100644 index 0000000000..39dd654371 --- /dev/null +++ b/changelog/page/5.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus changelog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus changelog

Subscribe through RSS feeds or follow us on to stay up-to-date with new releases!

+ + \ No newline at end of file diff --git a/changelog/page/5.html.html b/changelog/page/5.html.html new file mode 100644 index 0000000000..a0aa9cc519 --- /dev/null +++ b/changelog/page/5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/changelog/rss.xml b/changelog/rss.xml new file mode 100644 index 0000000000..d4fbd7b205 --- /dev/null +++ b/changelog/rss.xml @@ -0,0 +1,2623 @@ + + + + Docusaurus changelog + https://docusaurus.io/changelog + Keep yourself up-to-date about new features in every release + Thu, 04 Apr 2024 20:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + Copyright © 2024 Facebook, Inc. + + <![CDATA[3.2.1]]> + https://docusaurus.io/changelog/3.2.1 + https://docusaurus.io/changelog/3.2.1 + Thu, 04 Apr 2024 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus + +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

Committers: 2

+]]>
+
+ + <![CDATA[3.2.0]]> + https://docusaurus.io/changelog/3.2.0 + https://docusaurus.io/changelog/3.2.0 + Fri, 29 Mar 2024 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-sitemap, docusaurus-types, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus-utils +
      +
    • #9912 feat(blog): add LastUpdateAuthor & LastUpdateTime (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-debug, docusaurus-types, docusaurus +
      +
    • #9931 feat(core): add new plugin allContentLoaded lifecycle (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9886 feat(blog): allow processing blog posts through a processBlogPosts function (@OzakIOne)
    • +
    • #9838 feat(blog): add blog pageBasePath plugin option (@ilg-ul)
    • +
    +
  • +
  • docusaurus +
      +
    • #9681 feat(swizzle): ask user preferred language if no language CLI option provided (@yixiaojiu)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #9442 feat(create-docusaurus): ask user for preferred language when no language CLI option provided (@Rafael-Martins)
    • +
    +
  • +
  • docusaurus-plugin-vercel-analytics +
      +
    • #9687 feat(plugin-vercel-analytics): add new vercel analytics plugin (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9684 feat(mdx-loader): the table-of-contents should display toc/headings of imported MDX partials (@anatolykopyl)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #9999 fix(mdx-loader): Ignore contentTitle coming after Markdown thematicBreak (@slorber)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9945 fix(a11y): move focus algolia-search focus back to search input on Escape (@mxschmitt)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9944 fix(theme): improve a11y of DocSidebarItemCategory expand/collapsed button (@mxschmitt)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-utils +
      +
    • #9897 fix(mdx-loader): mdx-code-block should support CRLF (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9878 fix(core): fix default i18n calendar used, infer it from locale if possible (@slorber)
    • +
    • #9852 fix(core): ensure core error boundary is able to render theme layout (@slorber)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #9861 fix(remark-npm2yarn): update npm-to-yarn from 2.0.0 to 2.2.1, fix pnpm extra args syntax (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9851 fix(theme-classic): should use plurals for category items description (@baradusov)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9975 refactor(core): improve dev perf, fine-grained site reloads - part 3 (@slorber)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #9968 refactor(core): improve dev perf, fine-grained site reloads - part2 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus +
      +
    • #9903 refactor(core): improve dev perf, fine-grained site reloads - part1 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-utils +
      +
    • #9890 perf: optimize getFileCommitDate, make it async (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9798 refactor(core): internalize, simplify and optimize the SSG logic (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9868 refactor(theme): dates should be formatted on the client-side instead of in nodejs code (@OzakIOne)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types +
      +
    • #9669 refactor(theme): use JSON-LD instead of microdata for blog structured data (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #9839 refactor(blog): improve doc global data hook error message + add doc warning to blogOnly mode (@OzakIOne)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+ +

🔧 Maintenance

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-plugin-content-docs, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • Other + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils +
      +
    • #9963 refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds (@slorber)
    • +
    +
  • +
+

Committers: 22

+]]>
+
+ + <![CDATA[3.1.1]]> + https://docusaurus.io/changelog/3.1.1 + https://docusaurus.io/changelog/3.1.1 + Fri, 26 Jan 2024 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus-types, docusaurus +
      +
    • #9791 fix(core): broken links optimization behaves differently than non-optimized logic (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9788 fix(core): links with target "_blank" should no be checked by the broken link checker (@slorber)
    • +
    • #9407 fix(core): conditionally include hostname parameter when using… (@jack-robson)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9776 fix(mdx-loader): allow spaces before mdx-code-block info string (@eitsupi)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9783 fix(create-docusaurus): fix typo in init template sample docs (@dawei-wang)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9727 fix(theme-common): fix missing code block MagicComments style in Visual Basic (.NET) 16 (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-mermaid + +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils, docusaurus + +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic + +
  • +
+

Committers: 6

+]]>
+
+ + <![CDATA[3.1.0]]> + https://docusaurus.io/changelog/3.1.0 + https://docusaurus.io/changelog/3.1.0 + Fri, 05 Jan 2024 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9528 feat(core): make broken link checker detect broken anchors - add onBrokenAnchors config (@OzakIOne)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9674 feat(mdx-loader): add support for siteConfig.markdown.remarkRehypeOptions (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9671 feat(theme-common): code block MagicComments support for (Visual) Basic/Batch/Fortran/COBOL/ML (@tats-u)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9624 feat: siteConfig.markdown.parseFrontMatter hook (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9610 feat(core): enable port configuration via environment variable (@OzakIOne)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic, docusaurus-theme-live-codeblock +
      +
    • #9704 fix(theme): allow empty code blocks and live playgrounds (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9696 fix(create-docusaurus): fix init template code blocks, and little improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus +
      +
    • #9648 fix(cli): output help when no conventional config + no subcommand (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #9631 fix(live-codeblock): stabilize react-live transformCode callback, fix editor/preview desync (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9617 fix(utils): Markdown link replacement with <> but no spaces (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-module-type-aliases +
      +
    • #9612 fix(type-aliases): add title prop for imported inline SVG React components (@axmmisaka)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9581 fix(content-blog): add baseUrl for author.image_url (@OzakIOne)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9477 fix(i18n): complete translations for theme-common.json Brazilian Portuguese (pt-BR) (@c0h1b4)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-common +
      +
    • #9335 refactor(theme-common): allow optional desktopBreakpoint param in useWindowSize (@jgarrow)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-search-algolia + +
  • +
+

Committers: 8

+]]>
+
+ + <![CDATA[3.0.1]]> + https://docusaurus.io/changelog/3.0.1 + https://docusaurus.io/changelog/3.0.1 + Thu, 30 Nov 2023 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus-utils +
      +
    • #9570 fix: add v2 retrocompatible support for quoted admonitions (@slorber)
    • +
    • #9535 fix: v3 admonitions should support v2 title syntax for nested admonitions (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #9531 fix(theme): docs html sidebar items should always be visible (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9530 fix(theme): fix firefox CSS :has() support bug (@slorber)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #9487 fix(create-docusaurus): fix readme docusaurus 2 ref (@slorber)
    • +
    +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-debug +
      +
    • #9566 chore(debug-plugin): migrate to a new maintained JSON Viewer (@mcrstudio)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9572 chore: upgrade prism-react-renderer to 2.3.0 to avoid older clsx (@harryzcy)
    • +
    • #9567 fix(theme): upgrade prism-react-renderer, fix html script and style tag highlighting (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia + +
  • +
  • docusaurus +
      +
    • #9547 chore(core): replace wait-on dependency with custom lighter code (@NickGerleman)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus + +
  • +
+

Committers: 6

+]]>
+
+ + <![CDATA[3.0.0]]> + https://docusaurus.io/changelog/3.0.0 + https://docusaurus.io/changelog/3.0.0 + Tue, 31 Oct 2023 20:00:00 GMT + + 💥 Breaking Change +
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus +
      +
    • #9316 chore: upgrade syntax highlighting dependencies, prism-react-renderer to v2, react-live to v4 (@harryzcy)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #9310 chore(plugin-docs): remove legacy versioned prefix on doc ids and sidebar names in versioned sidebars (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-tsconfig, docusaurus +
      +
    • #9258 feat: Docusaurus v3 upgrades and require TypeScript 5 (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic + +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9394 feat(mdx-loader): Remark plugin to report unused MDX / Markdown directives (@OzakIOne)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #9317 feat(core): support TypeScript + ESM configuration (@harryzcy)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid +
      +
    • #9305 feat(theme-mermaid): upgrade Mermaid to v10.4 - handle async rendering (@slorber)
    • +
    +
  • +
  • create-docusaurus + +
  • +
  • docusaurus-plugin-content-blog + +
  • +
  • docusaurus-theme-classic +
      +
    • #9152 feat(theme): add support for meta og locale and alternates (@FlorinaPacurar)
    • +
    • #9028 feat(theme): add ability to inject data attributes from query-string - possibility to create an iframe/embed variant of a page (@slorber)
    • +
    • #8915 feat(theme): add queryString option to localeDropdown (@wceolin)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects, docusaurus-utils-validation +
      +
    • #9171 feat(client-redirects-plugin): support fully qualified urls and querystring/hash in destination/to url (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #9102 feat(cli): deploy command should allow customizing git config user.name / user.email in deployment branch (#9101) (@amdshrif)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-types, docusaurus +
      +
    • #9097 feat(mdx): add siteConfig.markdown.format to configure the default content parser (MDX / CommonMark) (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-pages, docusaurus-theme-classic +
      +
    • #9071 feat(pages): add support for missing SEO front matter + improve SEO docs (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-tsconfig +
      +
    • #9050 feat: create official TypeScript base config @docusaurus/tsconfig (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-types, docusaurus +
      +
    • #8961 feat: React 18 + automatic JSX runtime + build --dev (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8982 feat(theme-common): code block MagicComments support for TeX/LaTeX/Matlab (@jj-style)
    • +
    • #8870 feat(theme-common): code block MagicComments support for Lua/Haskell -- and WebAssembly ;; (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-mermaid, docusaurus-types, docusaurus-utils-validation, docusaurus-utils, docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8890 feat(theme): create more generic ThemedComponent util from ThemedImage (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-search-algolia, eslint-plugin + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia, docusaurus, eslint-plugin + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils +
      +
    • #8004 feat(docs,blog,pages): add support for "unlisted" front matter - hide md content in production (@jodyheavener)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-common +
      +
    • #9446 fix(theme): fix useWindowSize React hydration issue (@slorber)
    • +
    • #9276 fix(theme-common): remove useless useSyncExternalStore shim (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9437 fix(plugin-blog): blog archive should hide unlisted blog posts (@slorber)
    • +
    • #9151 fix(content-blog): links in feed should be absolute (@VinceCYLiao)
    • +
    +
  • +
  • docusaurus +
      +
    • #9387 fix(core): log missing errorInfo in React 18 onRecoverableError callback (@johnnyreilly)
    • +
    • #9309 fix(cli): disable vertical borders of the update notification (@qwerzl)
    • +
    • #9112 fix(core): throw error if build folder already exists on initial clean (@thedevwonder)
    • +
    • #9006 fix(core): docusaurus CLI should detect the correct yarn version when suggesting upgrades (@0420syj)
    • +
    • #7951 fix(core): make webpack HMR always listen to current location (@jeengbe)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #9386 fix(mdx-loader): get correct error line numbers, handle front matter + contentTitle with remark (@slorber)
    • +
    • #9262 fix(mdx-loader): improve mdxJsxTextElementToHtml (@slorber)
    • +
    • #9202 fix(mdx-loader): ensure heading anchor slugs respect GitHub emoji behavior (@yosukekato165)
    • +
    • #9100 fix(mdx): fix for html multi-line comments (@slorber)
    • +
    • #9091 fix(mdx-loader): loader error message should display stacktrace if no extra MDX details (@slorber)
    • +
    • #8960 fix: allow html syntax in MDX v2 with format md (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9385 fix(theme): avoid rendering empty search container if site has no search plugin (@slorber)
    • +
    • #9183 fix(theme): make Prism code block language / additionalLanguages case insensitive (@heysujal)
    • +
    • #9216 fix(theme): fix typo in swizzle component config (@sixhobbits)
    • +
    • #9093 fix(theme): support details/summary in CommonMark + add md dogfood test cases (@slorber)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-utils +
      +
    • #9369 fix(mdx-loader): prevent Open Graph images from being inserted as base64 (@Zwyx)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9362 fix(theme-translations): add Japanese translation for "warning" (@tats-u)
    • +
    • #9321 fix(theme-translations): add missing zh-Hans messages (@chudongvip)
    • +
    • #9338 fix(theme-translations): complete and fix hungarian translations (@la55u)
    • +
    • #9292 fix(theme-translations): add missing Spanish theme translations (@Villanuevand)
    • +
    • #9021 fix(theme-transalations): fix Swedish translation of "last updated" (@gazab)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #9308 fix(theme): make warning a first-class admonition, and deprecate caution admonition (@slorber)
    • +
    • #9269 fix(theme): improve docs sidebar category caret aria-label accessibility (@pinakipb2)
    • +
    +
  • +
  • Other + +
  • +
  • create-docusaurus +
      +
    • #9217 fix(create-docusaurus): increase Browserslist support query in dev (@slorber)
    • +
    +
  • +
  • docusaurus-utils, docusaurus + +
  • +
  • docusaurus-plugin-debug +
      +
    • #9116 fix(debug-plugin): upgrade react-json-view to maintained React-18 compatible fork (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #9046 fix(utils): better handling of code blocks in link replacement (@Josh-Cena)
    • +
    • #8927 fix(utils): make Markdown link replacement much more rigorous (@Josh-Cena)
    • +
    • #7864 fix(utils): always match exclusion root dirs as complete folder paths (@Josh-Cena)
    • +
    • #7801 fix(utils): recognize ~~~ as code fences in link replacement (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa, docusaurus +
      +
    • #8872 fix(core): better error logging on SSR/dev failures + log stacktraces and error causes (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-utils-validation, docusaurus +
      +
    • #8258 fix(docusaurus-utils-validation): baseUrl + routeBasePath: allow empty string, normalized as "/" (@Djunnni)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8319 fix(docs,theme): auto-generated category index should not display unlisted content (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock +
      +
    • #8015 fix(live-codeblock): add error boundary to live code preview (@rashidmya)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #7966 fix(plugin-docs,theme): refactor docs plugin routes and component tree (@slorber)
    • +
    +
  • +
+

:running: Performance

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #8972 fix: remove useless js-loader in front of mdx-loader (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #9438 refactor(blog-plugin): blog archive reverse ordering of posts (@slorber)
    • +
    • #9184 fix(theme): change schema.org itemType prop urls from http to https (@thedevwonder)
    • +
    +
  • +
  • docusaurus +
      +
    • #9381 feat(core): throw error when official docusaurus dependencies use different versions (@JorensM)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9302 chore(theme-translations): complete zh-Hant translations (@qwerzl)
    • +
    • #9025 chore(theme-translations): complete it translations (@bitpredator)
    • +
    +
  • +
  • create-docusaurus, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus +
      +
    • #9133 fix(init): change initial site URL to one that is safe for the future (@tats-u)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8150 fix(theme-classic): polish admonition details, render title-only admonitions (@attitude)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8143 refactor(plugin-gtag): update gtag plugin to modern SPA recommendations (@lanegoolsby)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-validation, docusaurus +
      +
    • #7945 refactor(theme): split admonitions, make swizzle easier, better retrocompatibility (@slorber)
    • +
    +
  • +
+

📝 Documentation

+ +

🤖 Dependencies

+
    +
  • Other + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-google-tag-manager, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-mermaid, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils, docusaurus + +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus-theme-search-algolia, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-types, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-pwa, docusaurus-theme-search-algolia, docusaurus-utils, docusaurus, eslint-plugin + +
  • +
  • create-docusaurus, docusaurus-mdx-loader, docusaurus-plugin-pwa, docusaurus, eslint-plugin + +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #9320 chore(theme-search-algolia): revert docsearch package range downgrade after bugfix release (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #9304 chore(theme-translations): complete French translations (@forresst)
    • +
    +
  • +
  • Other +
      +
    • #9264 ci: only install Chromium for Playwright Argos tests (@mxschmitt)
    • +
    • #9245 chore: bump devcontainer to Ubuntu 22.04 to resolve arm64 incompatibility (@AFRUITPIE)
    • +
    • #8947 test: add visual regression tests with Argos CI (@slorber)
    • +
    • #8911 chore: migrate website config to createConfigAsync (@slorber)
    • +
    • #8578 docs: fix dead anchor for issue reporting guidelines in template (@Sainan)
    • +
    • #8447 chore: update lerna to v6.2.0 (@AgentEnder)
    • +
    • #7967 test: improve e2e verdaccio configuration (@juanpicado)
    • +
    • #7863 docs: publish 2.0.0 release blog post + adapt website for the launch (@slorber)
    • +
    • #7828 misc: change showcase submission process, use GitHub discussion (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #9195 test(blog-plugin): fix ability to generate proper blog website fixture build snapshot (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic + +
  • +
  • docusaurus + +
  • +
+

Committers: 132

+]]>
+
+ + <![CDATA[2.4.3]]> + https://docusaurus.io/changelog/2.4.3 + https://docusaurus.io/changelog/2.4.3 + Wed, 20 Sep 2023 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus-plugin-content-docs +
      +
    • #9107 fix(content-docs): sidebar generator should return customProps for doc items (@TheCatLady)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #9108 feat(theme-classic): add description & keywords microdata to blog posts (@TheCatLady)
    • +
    • #9099 fix(theme): only set classname on ul elements if they have an existing class (@homotechsual)
    • +
    • #9243 fix(theme-common): ThemedComponent should display something when JS is disabled (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #9130 fix(theme): canonical url should be not change after hydration if url accessed with/without trailing slash (@ori-shalom)
    • +
    +
  • +
+

Committers: 4

+]]>
+
+ + <![CDATA[2.4.2]]> + https://docusaurus.io/changelog/2.4.2 + https://docusaurus.io/changelog/2.4.2 + Wed, 20 Sep 2023 19:00:00 GMT + + Bad npm publish, please use 2.4.3

]]>
+
+ + <![CDATA[2.4.1]]> + https://docusaurus.io/changelog/2.4.1 + https://docusaurus.io/changelog/2.4.1 + Mon, 15 May 2023 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8971 fix(theme): fix collapsible sidebar behavior when prefers-reduced-motion (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8909 fix(theme): add __ prefix to technical anchors, search crawlers (Algolia) should ignore them (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8906 fix(theme-common): fix collapsible component with prefers-reduced-motion (@slorber)
    • +
    • #8873 fix(theme-common): fix confusing theme error message: bad sidebar id suggestions (@slorber)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8874 fix(utils): handle Markdown links with spaces to route correctly (@morsko1)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8842 fix(theme-translations): remove redundant navigation text in aria label (@tarunrajput)
    • +
    +
  • +
  • create-docusaurus + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #8862 refactor(theme): expose copy, success and word-wrap icons as standalone components (@armano2)
    • +
    +
  • +
+

Committers: 7

+]]>
+
+ + <![CDATA[2.4.0]]> + https://docusaurus.io/changelog/2.4.0 + https://docusaurus.io/changelog/2.4.0 + Thu, 23 Mar 2023 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #8236 feat(content-docs): add support for sidebar item category/link descriptions in generated index page (@ZarakiKanzaki)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8708 feat(theme): allow to load a Docusaurus page with theme from query-string: ?docusaurus-theme=dark (@slorber)
    • +
    • #8616 feat(theme): add ability to translate navbar+footer logo alt text (@Mysterious-Dev)
    • +
    +
  • +
  • docusaurus-remark-plugin-npm2yarn +
      +
    • #8690 feat(npm-to-yarn): add support for PnPm and custom converters (@armano2)
    • +
    +
  • +
  • docusaurus +
      +
    • #8677 feat(core): add script env variables: NODE_ENV + BABEL_ENV + DOCUSAURUS_CURRENT_LOCALE (temporary i18n workaround) (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8674 feat(theme-classic): respect prefers-reduced-motion: reduce mediaquery, bump Infima to alpha.43 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8668 feat(theme-translations): add Hungarian theme translations (@trueqap)
    • +
    • #8631 feat(theme-translations): add Norwegian (Bokmål) theme translation (@dr0nn1)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8656 feat(theme-common): allow passing a string for details summary (@pReya)
    • +
    +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #8620 feat(gtag-plugin): gtag should support multiple tracking ids, notably for the UA => GA4 transition (@slorber)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #8803 fix(theme): codeblock buttons should be kept on the right when using RTL locale (@Vishruta-Patil)
    • +
    • #8615 fix(theme): improve color toggle when using dark navbar (@dewanshDT)
    • +
    • #8699 fix(theme-classic): fix tab focus bug in dropdown (#8697) (@kagankan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #8757 fix(search): search page should react to querystring changes + cleanup/refactor (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8746 fix(core): baseUrl error banner link anchor case (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8744 fix(theme-translations): fix wrong arabic words (tip/next) (@Anasqx)
    • +
    +
  • +
+

💅 Polish

+
    +
  • create-docusaurus +
      +
    • #8712 polish(create-docusaurus): the starter template should use a navbar item "docSidebar" instead of "doc" (less fragile on updates) (@biplavmz)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-utils-common, docusaurus +
      +
    • #8735 polish(theme): better error messages on navbar item rendering failures + ErrorCauseBoundary API (@tannerdolby)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus + +
  • +
+

Committers: 14

+]]>
+
+ + <![CDATA[2.3.1]]> + https://docusaurus.io/changelog/2.3.1 + https://docusaurus.io/changelog/2.3.1 + Fri, 03 Feb 2023 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus-theme-common +
      +
    • #8628 fix(theme-common): fix issue in tab scroll position restoration on tab click (@slorber)
    • +
    • #8619 fix(theme-common): localStorage utils dispatch too many storage events leading to infinite loop (@slorber)
    • +
    • #8618 fix(theme-common): prepare usage of useSyncExternalStore compatibility with React 18 (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common + +
  • +
  • docusaurus-utils +
      +
    • #8606 fix(utils): handle CRLF when parsing MDX imports (@scastiel)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8597 fix(preset-classic): install the right plugin for googleTagManager (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

🤖 Dependencies

+
    +
  • docusaurus-plugin-client-redirects, docusaurus-theme-search-algolia, docusaurus + +
  • +
+

Committers: 3

+]]>
+
+ + <![CDATA[2.3.0]]> + https://docusaurus.io/changelog/2.3.0 + https://docusaurus.io/changelog/2.3.0 + Thu, 26 Jan 2023 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-theme-translations +
      +
    • #8541 feat(theme-translations): default translations for Slovenian (sl-SI) (@MatijaSi)
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8378 feat(blog): add options.createFeedItems to filter/limit/transform feed items (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus +
      +
    • #8225 feat(theme-classic): store selected tab in query string. (@mturoci)
    • +
    +
  • +
  • docusaurus +
      +
    • #8397 feat(core): deploy CLI - add support for git url "insteadOf": use 'remote get-url' to determine source repo url (@friederbluemle)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8428 feat(theme-algolia): add option.replaceSearchResultPathname to process/replaceAll search result urls
    • +
    +
  • +
  • docusaurus-plugin-google-tag-manager +
      +
    • #8470 feat(plugin-google-tag-manager): add new google-tag-manager plugin + deprecate google-analytics plugin (@lanegoolsby)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-mdx-loader +
      +
    • #8303 fix(mdx-loader): support nested admonitions
    • +
    • #8282 fix(mermaid): fix Mermaid integration for v9.2 release
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8539 fix(algolia): make search footer respect searchPagePath (@Josh-Cena)
    • +
    +
  • +
  • docusaurus +
      +
    • #8538 fix(core): avoid hash collision when generating chunk names (@Josh-Cena)
    • +
    • #8481 fix(core): explicitly define CopyWebpackPlugin toType: 'dir' (@Thomascogez)
    • +
    • #8342 fix(core): normalize input for poll option (@mhnaeem)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #8462 fix(search-algolia): pass custom transformItems function to SearchBar (@mturoci)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8486 fix(theme): refactor Tabs, make groupId + queryString work fine together (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8463 fix(theme-classic): content container grow to take all the available space (@Djunnni)
    • +
    • #8328 fix(theme): preserve sidebar height on collapse (@0916dhkim)
    • +
    • #8350 fix(theme): forward className prop in theme-classic's Heading (@JoshuaKGoldberg)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8424 fix(translations): typo in lastUpdatedAtBy Vietnamese translation (@slorber)
    • +
    • #8289 fix(theme-translations): complete Turkish theme translations
    • +
    • #8406 fix(translations): complete farsi theme translations
    • +
    • #8450 fix(theme-translations): complete Vietnamese theme translations
    • +
    • #8525 chore(theme-translations): complete pl translations
    • +
    +
  • +
  • docusaurus-plugin-content-blog +
      +
    • #8381 fix(content-blog): blog Atom feed id + RSS feed guid should be fully qualified urls (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8275 fix(content-docs): add trailing slash to contentDirs, before passing it to isMDXPartial (@denis-alkhelali)
    • +
    +
  • +
  • docusaurus-utils + +
  • +
  • create-docusaurus, docusaurus-theme-classic +
      +
    • #8279 fix(create-docusaurus): improve init template misleading doc + add Docuaurus social card (@slorber)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic, docusaurus +
      +
    • #8445 fix(theme-classic) extract HomeBreadcrumbItem + fix swizzle bugs (@3v0k4)
    • +
    +
  • +
  • docusaurus-theme-translations +
      +
    • #8423 fix(translations): complete Chinese theme translations (@SJFCS)
    • +
    • #8312 fix(theme-translations): complete Swedish theme translations (@stnor)
    • +
    +
  • +
  • eslint-plugin +
      +
    • #8281 feat(eslint-plugin): add plugin to exported configs (@lachieh)
    • +
    +
  • +
+

Committers: 16

+]]>
+
+ + <![CDATA[2.2.0]]> + https://docusaurus.io/changelog/2.2.0 + https://docusaurus.io/changelog/2.2.0 + Sat, 29 Oct 2022 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-plugin-client-redirects +
      +
    • #8227 feat(plugin-client-redirects): keep the query string + hash (@Xabilahu)
    • +
    +
  • +
  • docusaurus +
      +
    • #8210 feat(core): add --config param to swizzle command (@e-im)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-theme-mermaid, docusaurus-types, docusaurus +
      +
    • #7490 feat: support mermaid code blocks in Markdown (@sjwall)
    • +
    +
  • +
  • docusaurus-types, docusaurus +
      +
    • #8151 feat(core): siteConfig.headTags API to render extra tags in document head (@johnnyreilly)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-plugin-ideal-image +
      +
    • #8250 fix(ideal-image): do not pass down img prop (@lex111)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #8246 fix(mdx-loader): properly unwrap mdxAdmonitionTitle placeholder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #8234 fix(plugin-content-docs): fix error message context (error cause) when doc processing fails (@shanpriyan)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations +
      +
    • #8207 fix(theme-classic): hamburger menu control navigation by keyboard (@jeferson-sb)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8204 fix(theme-classic): fix SkipToContent without JS , refactor, make it public theming API (@mturoci)
    • +
    • #8059 fix(theme): preserve url ?search#hash on navbar version/locale dropdowns navigations (@slorber)
    • +
    +
  • +
  • docusaurus +
      +
    • #8192 fix(core): throw error for invalid URL in config file (@forgeRW)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #8174 fix(theme): announce theme switches (@mturoci)
    • +
    • #8190 fix(theme): add more tag names to inline code element set (@Josh-Cena)
    • +
    • #8163 fix(theme): mobile navbar & skipToContent should cover announcementBar (@adnanhashmi09)
    • +
    • #8068 fix(theme): preserve line breaks when copying code with showLineNumbers in Firefox (@LittleboyHarry)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #8137 fix(utils): remove non-ASCII limitation for path normalization (@birjj)
    • +
    • #8158 fix(content-blog): make RSS feed generation work with slugs with .html extension (@Pranav2612000)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #8067 fix(redirect): tolerate trailing slash difference if config is undefined (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations +
      +
    • #8253 chore(theme-translations): complete ru translations (@lex111)
    • +
    • #8243 chore(theme-translations): complete French translations (@forresst)
    • +
    • #8075 fix(theme-translation): complete Japanese theme default translation (@pasora)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #8161 fix(theme): do not show tab content when tabbing over it; show after selection only (@mturoci)
    • +
    • #8062 refactor(theme): remove hard-coded tag border-radius (@homotechsual)
    • +
    +
  • +
  • docusaurus-utils-validation, docusaurus +
      +
    • #8066 fix(core): normalize slashes for url/baseUrl instead of throwing (@Josh-Cena)
    • +
    +
  • +
+

Committers: 22

+]]>
+
+ + <![CDATA[2.1.0]]> + https://docusaurus.io/changelog/2.1.0 + https://docusaurus.io/changelog/2.1.0 + Thu, 01 Sep 2022 20:00:00 GMT + + 🚀 New Feature +
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #8008 feat(theme): ability to use <DocCardList> without items prop, on any doc page (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic +
      +
    • #7963 feat(docs): allow to configure noIndex per doc version (@slorber)
    • +
    • #7949 feat(plugin-docs): docs sidebar item link: support "autoAddBaseUrl" attribute (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

🐛 Bug Fix

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-preset-classic +
      +
    • #8029 fix(preset-classic): broken link in "unrecognized keys" error message (@mdubus)
    • +
    +
  • +
  • docusaurus +
      +
    • #7977 fix(core): preload should support encoded page links (@adventure-yunfei)
    • +
    • #7996 fix(core): CLI command write-translations should extract translations from @docu… (@slorber)
    • +
    • #7952 fix(core): allow overriding ssr/dev template meta tags (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7964 fix(sitemap): filter all routes with robots meta containing noindex (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7910 fix(theme-classic): code block line number display with line wrapping (@yzhe819)
    • +
    • #7786 fix: collapse siblings when first category is selected (@whiteand)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-classic +
      +
    • #7982 fix(theme): add aria-label to skip to content link region (@YoniChechik)
    • +
    • #7940 refactor(theme-classic): split AnnouncementBar, increase z-index, use shadow (@slorber)
    • +
    • #7876 refactor(theme-classic): make tag text visually certered (@Kosai106)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7941 feat(core): add new Webpack file-loader extensions: avif, mov, mkv, mpg, avi... (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-types +
      +
    • #7942 feat(theme-classic): use lang attribute in navbar locale dropdown items (@slorber)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • create-docusaurus +
      +
    • #8032 fix(create-docusaurus): tutorial and init template improvements (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-sitemap, docusaurus-theme-classic + +
  • +
+

Committers: 10

+]]>
+
+ + <![CDATA[2.0.1]]> + https://docusaurus.io/changelog/2.0.1 + https://docusaurus.io/changelog/2.0.1 + Mon, 01 Aug 2022 20:00:00 GMT + + Fix bad npm publish of 2.0.0

+

Committers: 1

+]]>
+
+ + <![CDATA[2.0.0]]> + https://docusaurus.io/changelog/2.0.0 + https://docusaurus.io/changelog/2.0.0 + Mon, 01 Aug 2022 19:00:00 GMT + + Bad npm publish, please use 2.0.1

+

💅 Polish

+
    +
  • docusaurus +
      +
    • #7781 refactor(core): log Docusaurus & Node version before exiting (@Josh-Cena)
    • +
    +
  • +
+

Committers: 2

+]]>
+
+ + <![CDATA[2.0.0-rc.1]]> + https://docusaurus.io/changelog/2.0.0-rc.1 + https://docusaurus.io/changelog/2.0.0-rc.1 + Thu, 14 Jul 2022 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus +
      +
    • #7776 fix(core): swizzle --eject js should not copy theme .d.ts files (@slorber)
    • +
    • #7750 fix(deploy): revert "feat(deploy): copy local git config to tmp repo (#7702)" (@ghostsquad)
    • +
    +
  • +
  • docusaurus-plugin-sitemap +
      +
    • #7774 fix(sitemap): complete gracefully when all pages have noIndex meta (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic + +
  • +
  • docusaurus-migrate + +
  • +
  • docusaurus-theme-search-algolia +
      +
    • #7761 fix(algolia-search): test for canUseIntersectionObserver (@RoiArthurB)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
+

📝 Documentation

+
    +
  • docusaurus-plugin-content-docs +
      +
    • #7706 docs: release process, versioning, breaking changes, public API surface (@slorber)
    • +
    +
  • +
+

🔧 Maintenance

+
    +
  • docusaurus-theme-classic +
      +
    • #7777 refactor(theme): fix duplicate page metadata usage (@slorber)
    • +
    • #7771 chore: bump Infima to 0.2.0-alpha.42, fix a:hover link bug (@slorber)
    • +
    +
  • +
+

Committers: 11

+]]>
+
+ + <![CDATA[2.0.0-beta.22]]> + https://docusaurus.io/changelog/2.0.0-beta.22 + https://docusaurus.io/changelog/2.0.0-beta.22 + Fri, 08 Jul 2022 20:00:00 GMT + + 💥 Breaking Change +
    +
  • docusaurus-theme-classic +
      +
    • #7740 refactor(theme): nest theme icons under subfolder @theme/Icon/* (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7716 refactor(theme): split BlogPostItem into smaller theme subcomponents (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7660 refactor(theme-common): split package into public/internal API entrypoints (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-docs, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7644 refactor(docs,theme): split DocItem comp, useDoc hook (@slorber)
    • +
    +
  • +
  • docusaurus-logger, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7642 refactor: remove "error" reporting level, move reportMessage to logger (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-theme-classic, docusaurus-utils-validation, docusaurus +
      +
    • #7152 refactor: handle all admonitions via JSX component (@lex111)
    • +
    +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-theme-search-algolia, docusaurus-theme-translations +
      +
    • #7666 feat(algolia-search): allow translating search modal (@forresst)
    • +
    +
  • +
  • create-docusaurus, docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7643 feat(theme-classic): themeConfig navbar/footer logos accept className/style + update Meta Open-Source Logo (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-client-redirects +
      +
    • #7649 feat(client-redirects): make plugin respect onDuplicateRoutes config (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7624 feat: allow customizing localization path of each locale (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7557 feat: allow specifying custom target for FooterLogo (@vannyle)
    • +
    +
  • +
  • docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-translations +
      +
    • #7556 feat: add admonition type title translations (@slorber)
    • +
    +
  • +
  • docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-types, docusaurus-utils, docusaurus +
      +
    • #7386 feat(core): allow customizing the i18n directory path (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-live-codeblock +
      +
    • #7514 feat(live-codeblock): add support for noInline to interactive code blocks (@jpdriver)
    • +
    +
  • +
  • docusaurus-plugin-content-docs + +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus-theme-classic +
      +
    • #7727 fix(theme): show blog post edit link even when no tag & not truncated (@anaclumos)
    • +
    • #7659 fix(theme-classic): expose empty string alt text in navbar logos (@BenDMyers)
    • +
    • #7595 fix(content-pages): add article wrapper around MDXContent (@matkoch)
    • +
    +
  • +
  • docusaurus-theme-translations + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7638 fix(docs): forward doc frontMatter.sidebar_custom_props to linking sidebar category (@slorber)
    • +
    • #7634 fix(content-docs): allow translating doc labels in sidebars.js (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7604 fix(utils): allow any non-boundary characters in Markdown heading ID (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-cssnano-preset +
      +
    • #7593 fix(cssnano-preset): disable z-index minification (@dpang314)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7551 fix(theme-classic): code block wrap mode should allow wrapping in the middle of a word (@slorber)
    • +
    • #7485 fix(theme-classic): inconsistent code block wrapping (@dpang314)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-module-type-aliases, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-types, docusaurus-utils-common, docusaurus-utils + +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus + +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7673 fix(content-docs): format last update date as "Jun 19, 2020" (@sigwinch28)
    • +
    +
  • +
  • docusaurus-theme-common, docusaurus-theme-search-algolia +
      +
    • #7671 refactor(theme-common): rename useDynamicCallback to useEvent (@slorber)
    • +
    +
  • +
  • docusaurus-theme-common +
      +
    • #7648 fix(theme-common): make useShallowMemoObject key-order-insensitive (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7639 chore(create): update the facebook template with current assets (@zpao)
    • +
    • #7520 feat: add engines field to templates' package.json (@johnnyreilly)
    • +
    +
  • +
  • docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-content-docs, docusaurus-plugin-pwa, docusaurus-theme-classic, docusaurus +
      +
    • #7579 refactor(pwa): simplify registerSW code, fix ESLint errors (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag + +
  • +
+

📝 Documentation

+ +

🔧 Maintenance

+
    +
  • docusaurus-theme-classic, docusaurus-theme-common +
      +
    • #7676 refactor(theme): move LayoutProviders to Layout/Provider; composeProviders util (@slorber)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7674 chore: prevent importing theme components with relative paths (@slorber)
    • +
    • #7664 chore: upgrade Infima to alpha.40 (@slorber)
    • +
    +
  • +
  • Other + +
  • +
  • docusaurus +
      +
    • #7583 refactor(cli): make the CLI an even thinner wrapper around command functions (@Josh-Cena)
    • +
    • #7547 chore: update static-site-generator-webpack-plugin (@slorber)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-types, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader, stylelint-copyright + +
  • +
+

Committers: 51

+]]>
+
+ + <![CDATA[2.0.0-beta.21]]> + https://docusaurus.io/changelog/2.0.0-beta.21 + https://docusaurus.io/changelog/2.0.0-beta.21 + Fri, 27 May 2022 20:00:00 GMT + + 💥 Breaking Change +
    +
  • docusaurus-plugin-pwa +
      +
    • #7422 refactor(pwa): remove reloadPopup option in favor of swizzling (@Josh-Cena)
    • +
    +
  • +
  • create-docusaurus, docusaurus-cssnano-preset, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader + +
  • +
+

🚀 New Feature

+
    +
  • docusaurus-plugin-sitemap + +
  • +
  • docusaurus-utils, docusaurus +
      +
    • #7371 feat(core): support docusaurus.config.cjs as default file name (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
  • docusaurus-theme-classic +
      +
    • #7357 feat(theme-classic): allow className as option for type: "search" (@JPeer264)
    • +
    +
  • +
+

🐛 Bug Fix

+
    +
  • docusaurus + +
  • +
  • docusaurus-plugin-google-gtag +
      +
    • #7424 fix(gtag): send the newly rendered page's title instead of the old one's (@ori-shalom)
    • +
    +
  • +
  • create-docusaurus, docusaurus-utils +
      +
    • #7507 fix(create-docusaurus): potential security issue with command injection (@slorber)
    • +
    +
  • +
  • docusaurus-module-type-aliases, docusaurus-theme-classic, docusaurus +
      +
    • #7492 fix(core): always treat error boundary fallback as a callback (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7438 fix(theme-classic): allow nested task lists to preserve the indent (@Josh-Cena)
    • +
    • #7430 fix(theme-classic): consistently apply the right active class name for all navbar items (@Josh-Cena)
    • +
    • #7411 fix(theme-classic): autocollapse sidebar categories when navigating with paginator (@pranabdas)
    • +
    • #7363 fix(theme-classic): resolve customCss from site dir (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-utils +
      +
    • #7464 fix(utils): fix Markdown link replacement when link text is same as href (@Josh-Cena)
    • +
    • #7458 fix(utils): avoid replacing Markdown links missing the directly next link (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-mdx-loader +
      +
    • #7392 fix(mdx-loader): use React.Fragment as fragment factory (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-content-docs +
      +
    • #7385 fix(content-docs): restore functionality when a category only has index page (@Josh-Cena)
    • +
    +
  • +
+

💅 Polish

+
    +
  • docusaurus-theme-translations + +
  • +
  • docusaurus +
      +
    • #7499 fix: avoid printing period after localhost URL (@Zamiell)
    • +
    +
  • +
  • create-docusaurus +
      +
    • #7374 refactor(create): clean up logic when prompting for unspecified arguments (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7503 docs: document MDXComponents scope (@Josh-Cena)
  • +
  • #7497 docs: link every reference of types in API table to the type definition (@Zamiell)
  • +
  • #7407 docs: add Azure SWA as deployment option (@nitya)
  • +
  • #7390 fix(website): use react-lite-youtube-embed for lazy YouTube video (@matkoch)
  • +
+

🔧 Maintenance

+
    +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-module-type-aliases, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-validation, docusaurus-utils, docusaurus, lqip-loader, stylelint-copyright + +
  • +
  • docusaurus-theme-classic, docusaurus-theme-translations + +
  • +
  • stylelint-copyright + +
  • +
  • docusaurus-cssnano-preset + +
  • +
  • create-docusaurus, docusaurus-logger, docusaurus-mdx-loader, docusaurus-migrate, docusaurus-plugin-client-redirects, docusaurus-plugin-content-blog, docusaurus-plugin-content-docs, docusaurus-plugin-content-pages, docusaurus-plugin-debug, docusaurus-plugin-google-analytics, docusaurus-plugin-google-gtag, docusaurus-plugin-ideal-image, docusaurus-plugin-pwa, docusaurus-plugin-sitemap, docusaurus-preset-classic, docusaurus-remark-plugin-npm2yarn, docusaurus-theme-classic, docusaurus-theme-common, docusaurus-theme-live-codeblock, docusaurus-theme-search-algolia, docusaurus-theme-translations, docusaurus-utils-common, docusaurus-utils-validation, docusaurus-utils, docusaurus, eslint-plugin, lqip-loader +
      +
    • #7437 refactor: use TS project references instead of running tsc multiple times (@Josh-Cena)
    • +
    +
  • +
  • docusaurus-plugin-pwa + +
  • +
  • docusaurus-theme-classic +
      +
    • #7415 refactor(theme-classic): always collocate stylesheets with components in one folder (@Josh-Cena)
    • +
    +
  • +
  • docusaurus + +
  • +
+

Committers: 23

+]]>
+
+ + <![CDATA[2.0.0-beta.20]]> + https://docusaurus.io/changelog/2.0.0-beta.20 + https://docusaurus.io/changelog/2.0.0-beta.20 + Thu, 05 May 2022 20:00:00 GMT + + 🐛 Bug Fix +
    +
  • docusaurus +
      +
    • #7342 fix: avoid flash of page scrolling to top on refresh (@slorber)
    • +
    • #7329 fix(core): inject docusaurus version into SSR as local (@RDIL)
    • +
    +
  • +
  • docusaurus-theme-classic +
      +
    • #7341 fix(theme-classic): properly highlight code block line numbers (@Josh-Cena)
    • +
    +
  • +
+

📝 Documentation

+
    +
  • #7334 feat(website): make canary release page display actual canary version name (@Josh-Cena)
  • +
  • #7343 docs: add page for create-docusaurus API documentation (@Josh-Cena)
  • +
  • #7340 docs: add Yandex Metrika plugin to community plugins (@sgromkov)
  • +
  • #7336 fix(website): fix multiple accessibility issues around color contrast (@Josh-Cena)
  • +
  • #7327 docs: add clarity to versioning behavior (@pepopowitz)
  • +
+

Committers: 6

+]]>
+
+
+
\ No newline at end of file diff --git a/community/canary.html b/community/canary.html new file mode 100644 index 0000000000..d05a43dcf4 --- /dev/null +++ b/community/canary.html @@ -0,0 +1,63 @@ + + + + + +Canary releases | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Canary releases

+ +

Docusaurus has a canary releases system.

It permits you to test new unreleased features as soon as the pull requests are merged on the next version of Docusaurus.

It is a good way to give feedback to maintainers, ensuring the newly implemented feature works as intended.

note

Using a canary release in production might seem risky, but in practice, it's not.

A canary release passes all automated tests and is used in production by the Docusaurus site itself.

warning

The canary version shown below may not be up-to-date. Please go to the npm page to find the actual version name.

Canary npm dist tag

For any code-related commit on main, the continuous integration will publish a canary release under the @canary npm dist tag. It generally takes up to 10 minutes.

You can see on npm the current dist tags:

    +
  • latest: stable releases (Current: current)
  • +
  • canary: canary releases (Example: 0.0.0-4922)
  • +
tip

Make sure to use the latest canary release and check the publication date (sometimes the publish process fails).

note

Canary versions follow the naming convention 0.0.0-commitNumber.

Using a canary release

Take the latest version published under the canary npm dist tag (Example: 0.0.0-4922).

Use it for all the @docusaurus/* dependencies in your package.json:

-  "@docusaurus/core": "^current",
- "@docusaurus/preset-classic": "^current",
+ "@docusaurus/core": "0.0.0-4922",
+ "@docusaurus/preset-classic": "0.0.0-4922",

Then, install the dependencies again and start your site:

npm install
npm start

You can also upgrade the @docusaurus/* packages with command line:

npm install --save-exact @docusaurus/core@canary @docusaurus/preset-classic@canary
warning

Make sure to include all the @docusaurus/* packages.

For canary releases, prefer using an exact version instead of a semver range (avoid the ^ prefix).

+ + \ No newline at end of file diff --git a/community/canary.html.html b/community/canary.html.html new file mode 100644 index 0000000000..660b393351 --- /dev/null +++ b/community/canary.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/community/contributing.html b/community/contributing.html new file mode 100644 index 0000000000..69459916bc --- /dev/null +++ b/community/contributing.html @@ -0,0 +1,201 @@ + + + + + +Contributing | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Contributing to Docusaurus

+

Docusaurus is our way to hopefully help make open source documentation easier. We currently have multiple open source projects using it, with many more planned. If you're interested in contributing to Docusaurus, hopefully, this document makes the process for contributing clear.

+

The Open Source Guides website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful:

+ +

Code of Conduct

+

Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be tolerated.

+

Get Involved

+

There are many ways to contribute to Docusaurus, and many of them do not involve writing any code. Here's a few ideas to get started:

+
    +
  • Simply start using Docusaurus. Go through the Getting Started guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by opening an issue.
  • +
  • Look through the open issues. Provide workarounds, ask for clarification, or suggest labels. Help triage issues.
  • +
  • If you find an issue you would like to fix, open a pull request. Issues tagged as Good first issue are a good place to get started.
  • +
  • Read through the Docusaurus docs. If you find anything that is confusing or can be improved, you can click "Edit this page" at the bottom of most docs, which takes you to the GitHub interface to make and propose changes.
  • +
  • Take a look at the features requested by others in the community and consider opening a pull request if you see something you want to work on.
  • +
+

Contributions are very welcome. If you think you need help planning your contribution, please ping us on Twitter at @docusaurus and let us know you are looking for a bit of help.

+

Join our Discord Channel

+

We have the #contributors channel on Discord to discuss all things about Docusaurus development. You can also be of great help by helping other users in the #help-and-questions channel.

+

Triaging Issues and Pull Requests

+

One great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in.

+
    +
  • Ask for more information if you believe the issue does not provide all the details required to solve it.
  • +
  • Suggest labels that can help categorize issues.
  • +
  • Flag issues that are stale or that should be closed.
  • +
  • Ask for test plans and review code.
  • +
+

Our Development Process

+

Docusaurus uses GitHub as its source of truth. The core team will be working directly there. All changes will be public from the beginning.

+

All pull requests will be checked by the continuous integration system, GitHub actions. There are unit tests, end-to-end tests, performance tests, style tests, and much more.

+

Branch Organization

+

Docusaurus has one primary branch main and we use feature branches with deploy previews to deliver new features with pull requests.

+

Issues

+

When opening a new issue, always make sure to fill out the issue template. This step is very important! Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template.

+

Please don't use the GitHub issue tracker for questions. If you have questions about using Docusaurus, use any of our support channels, and we will do our best to answer your questions.

+

Bugs

+

We use GitHub Issues for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new, unreported bug, you can submit a bug report.

+
    +
  • One issue, one bug: Please report a single bug per issue.
  • +
  • Provide reproduction steps: List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort.
  • +
+

If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend filing an issue detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue.

+

Security Bugs

+

Facebook has a bounty program for the safe disclosure of security bugs. With that in mind, please do not file public issues; go through the process outlined on that page.

+

Feature requests

+

If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can file an issue with the feature template in the form of an elaborated RFC. Alternatively, you can use the Canny board for more casual feature requests and gain enough traction before proposing an RFC.

+

Proposals

+

If you intend to make any non-trivial changes to existing implementations, we recommend filing an issue with the proposal template. This lets us reach an agreement on your proposal before you put significant effort into it. These types of issues should be rare.

+

Claiming issues

+

We have a list of beginner-friendly issues to help you get your feet wet in the Docusaurus codebase and familiar with our contribution process. This is a great place to get started.

+

Apart from the good first issue, the following labels are also worth looking at:

+
    +
  • help wanted: if you have specific knowledge in one domain, working on these issues can make your expertise shine.
  • +
  • status: accepting pr: community contributors can feel free to claim any of these.
  • +
+

If you want to work on any of these issues, just drop a message saying "I'd like to work on this", and we will assign the issue to you and update the issue's status as "claimed". You are expected to send a pull request within seven days after that, so we can still delegate the issue to someone else if you are unavailable.

+

Alternatively, when opening an issue, you can also click the "self service" checkbox to indicate that you'd like to work on the issue yourself, which will also make us see the issue as "claimed".

+

Development

+

Online one-click setup for contributing

+

You can use Gitpod (a free, online, VS Code-like IDE) for contributing. With a single click, it will launch a workspace (for Docusaurus 2) and automatically:

+
    +
  • clone the docusaurus repo.
  • +
  • install the dependencies.
  • +
  • run yarn start
  • +
+

So that you can start contributing straight away.

+

Open in Gitpod

+

You can also try using the new github.dev feature. While you are browsing any file, changing the domain name from github.com to github.dev will turn your browser into an online editor. You can start making changes and send pull requests right away.

+

Installation

+
    +
  1. Ensure you have Yarn installed.
  2. +
  3. After cloning the repository, run yarn install in the root of the repository. This will install all dependencies as well as build all local packages.
  4. +
  5. To start a development server, run yarn workspace website start.
  6. +
+

Code Conventions

+
    +
  • Most important: Look around. Match the style you see used in the rest of the project. This includes formatting, naming files, naming things in code, naming things in documentation, etc.
  • +
  • "Attractive"
  • +
  • We do have Prettier (a formatter) and ESLint (a syntax linter) to catch most stylistic problems. If you are working locally, they should automatically fix some issues during every git commit.
  • +
  • For documentation: Do not wrap lines at 80 characters - configure your editor to soft-wrap when editing documentation.
  • +
+

Don't worry too much about styles in general—the maintainers will help you fix them as they review your code.

+

Pull Requests

+

So you have decided to contribute code back to upstream by opening a pull request. You've invested a good chunk of time, and we appreciate it. We will do our best to work with you and get the PR looked at.

+

Working on your first Pull Request? You can learn how from this free video series:

+

How to Contribute to an Open Source Project on GitHub

+

Please make sure the following is done when submitting a pull request:

+
    +
  1. Keep your PR small. Small pull requests (~300 lines of diff) are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it.
  2. +
  3. Use descriptive titles. It is recommended to follow this commit message style.
  4. +
  5. Test your changes. Describe your test plan in your pull request description.
  6. +
  7. CLA. If you haven't already, sign the CLA.
  8. +
+

All pull requests should be opened against the main branch.

+

We have a lot of integration systems that run automated tests to guard against mistakes. The maintainers will also review your code and fix obvious issues for you. These systems' duty is to make you worry as little about the chores as possible. Your code contributions are more important than sticking to any procedures, although completing the checklist will surely save everyone's time.

+

Semantic Commit Messages

+

See how a minor change to your commit message style can make you a better programmer.

+

Format: <type>(<scope>): <subject>

+

<scope> is optional. If your change is specific to one/two packages, consider adding the scope. Scopes should be brief but recognizable, e.g. content-docs, theme-classic, core

+

The various types of commits:

+
    +
  • feat: a new API or behavior for the end user.
  • +
  • fix: a bug fix for the end user.
  • +
  • docs: a change to the website or other Markdown documents in our repo.
  • +
  • refactor: a change to production code that leads to no behavior difference, e.g. splitting files, renaming internal variables, improving code style...
  • +
  • test: adding missing tests, refactoring tests; no production code change.
  • +
  • chore: upgrading dependencies, releasing new versions... Chores that are regularly done for maintenance purposes.
  • +
  • misc: anything else that doesn't change production code, yet is not test or chore. e.g. updating GitHub actions workflow.
  • +
+

Do not get too stressed about PR titles, however. Your PR will be squash-merged and your commit to the main branch will get the title of your PR, so commits within a branch don't need to be semantically named. The maintainers will help you get the PR title right, and we also have a PR label system that doesn't equate with the commit message types. Your code is more important than conventions!

+

Example:

+
feat(core): allow overriding of webpack config
^--^^----^ ^------------^
| | |
| | +-> Summary in present tense. Use lower case not title case!
| |
| +-> The package(s) that this change affected.
|
+-------> Type: see above for the list we use.
+

Versioned Docs

+

If you only want to make doc changes, you just need to be aware of versioned docs.

+ +

Do not edit the auto-generated files within versioned_docs/ or versioned_sidebars/ unless you are sure it is necessary. For example, information about new features should not be documented in versioned docs. Edits made to older versions will not be propagated to newer versions of the docs.

+

Test Plan

+

A good test plan has the exact commands you ran and their output and provides screenshots or videos if the pull request changes UI. If you've changed APIs, update the documentation.

+

Tests are integrated into our continuous integration system, so you don't always need to run local tests. However, for significant code changes, it saves both your and the maintainers' time if you can do exhaustive tests locally first to make sure your PR is in good shape. There are many types of tests:

+
    +
  • Build and typecheck. We use TypeScript in our codebase, which can make sure your code is consistent and catches some obvious mistakes early.
  • +
  • Unit tests. We use Jest for unit tests of API endpoints' behavior. You can run yarn test in the root directory to run all tests, or yarn test path/to/your/file.test.ts to run a specific test.
  • +
  • Dogfooding. Our website itself covers all kinds of potential configuration cases and we even have a dedicated tests area. Don't be afraid to update our website's configuration in your PR—it can help the maintainers preview the effects. We can decide if the website change should be kept when merging and deploying for production.
  • +
  • E2E tests. You can simulate the distribution and installation of the code with your fresh changes. If you need help testing your changes locally, you can check out the doc on doing local third-party testing.
  • +
+

Licensing

+

By contributing to Docusaurus, you agree that your contributions will be licensed under its MIT license. Copy and paste this to the top of your new file(s):

+
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
+

This is also auto-fixable with the header/header ESLint rule.

+

Contributor License Agreement (CLA)

+

In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another Facebook open source project, you're good to go. If you are submitting a pull request for the first time, the Facebook GitHub Bot will reply with a link to the CLA form. You may also complete your CLA here.

+

After you have signed the CLA, the CLA bot would automatically update the PR status. There's no need to open a new PR.

+

CLAs are required for us to merge your pull request. While we value your effort and are willing to wait for you to come back and address the reviews in case you are unavailable after sending the pull request, pull requests that are ready to merge but have CLA missing and no response from the author will be closed within two weeks of opening. If you have further questions about the CLA, please stay in touch with us.

+

If it happens that you were unavailable and your PR gets closed, feel free to reopen once it's ready! We are still happy to review it, help you complete it, and eventually merge it.

+

Breaking Changes

+

When adding a new breaking change, follow this template in your pull request:

+
### New breaking change here

- **Who does this affect**:
- **How to migrate**:
- **Why make this breaking change**:
- **Severity (number of people affected x effort)**:
+

What Happens Next?

+

The core Docusaurus team will be monitoring pull requests. Do help us by keeping pull requests consistent by following the guidelines above.

+ + \ No newline at end of file diff --git a/community/contributing.html.html b/community/contributing.html.html new file mode 100644 index 0000000000..773ece9e55 --- /dev/null +++ b/community/contributing.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/community/release-process.html b/community/release-process.html new file mode 100644 index 0000000000..b639234fd3 --- /dev/null +++ b/community/release-process.html @@ -0,0 +1,164 @@ + + + + + +Release process | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Release process

+

Let's see how Docusaurus handles versioning, releases and breaking changes.

+
info

This topic is particularly important for highly customized sites that may have difficulties to upgrade.

+

Semantic versioning

+

Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.

+

Respecting Semantic Versioning is important for multiple reasons:

+
    +
  • It guarantees simple minor version upgrades, as long as you only use the public API
  • +
  • It follows front-end ecosystem conventions
  • +
  • A new major version is an opportunity to thoroughly document breaking changes
  • +
  • A new major/minor version is an opportunity to communicate new features through a blog post
  • +
+
note

Releasing Docusaurus 2.0 took a very long time. From now on, Docusaurus will release new major versions more regularly. In practice, you can expect a new major version every 2–4 months.

Major version numbers are not sacred, but we still group breaking changes together and avoid releasing major versions too often.

+

Major versions

+

The major version number is incremented on every breaking change.

+

Whenever a new major version is released, we publish:

+
    +
  • a blog post with feature highlights, major bug fixes, breaking changes, and upgrade instructions.
  • +
  • an exhaustive changelog entry
  • +
+
tip

Read our public API surface section to clearly understand what we consider as a breaking change.

+

Minor versions

+

The minor version number is incremented on every significant retro-compatible change.

+

Whenever a new minor version is released, we publish:

+
    +
  • a blog post with a list of feature highlights and major bug fixes
  • +
  • an exhaustive changelog entry
  • +
+
tip

If you only use our public API surface, you should be able to upgrade in no time!

+

Patch versions

+

The patch version number is incremented on bugfixes releases.

+

Whenever a new patch version is released, we publish:

+
    +
  • an exhaustive changelog entry
  • +
+

Versions

+ +

The Docusaurus team is usually working on 2 major versions at the same time:

+
    +
  • Docusaurus 2: the stable version, on the docusaurus-v2 branch
  • +
  • Docusaurus 3: the next version, on the main branch
  • +
+
note

The docusaurus-v2 branch is created just before releasing the first v2 release candidate.

+

Stable version

+

The stable version (v2, on docusaurus-v2) is recommended for most Docusaurus users.

+

We regularly backport retro-compatible features, bug and security fixes from main to docusaurus-v2 with git cherry-pick to make them available to those not ready for the next version.

+
info

After a new stable version has been released, the former stable version will continue to receive support only for major security issues for 3 months. Otherwise, all features will be frozen and non-critical bugs will not be fixed.

It is recommended to upgrade within that time frame to the new stable version.

+

Next version

+

The next version (v3, on main) is the version the Docusaurus team is currently working on.

+

The main branch is the default target branch for all pull requests, including core team and external contributions.

+

This version is recommended for early adopters that want to use the latest Docusaurus features as soon as possible. It is also a good way to help us by reporting bugs and giving some feedback.

+

There are 3 ways to use the next version:

+
    +
  • with an alpha, beta or rc pre-release
  • +
  • with the @next npm dist tag for the latest pre-release
  • +
  • with a canary release for the very latest features
  • +
+
tip

The next version passes all our automated tests and is used by the Docusaurus site itself. It is relatively safe: don't be afraid to give it a try.

+
warning

Breaking changes can happen on the next version: detailed upgrade instructions are available in the changelog and pull requests.

At the beta and rc (release candidate) phases, we avoid introducing major breaking changes.

+

Public API surface

+

Docusaurus commits to respecting Semantic Versioning. This means that whenever changes occur in Docusaurus public APIs and break backward compatibility, we will increment the major version number.

+
tip

Docusaurus guarantees public API retro-compatibility across minor versions. Unless you use internal APIs, minor version upgrades should be easy.

+

We will outline what accounts as the public API surface.

+

Core public API

+

✅ Our public API includes:

+
    +
  • Docusaurus config
  • +
  • Docusaurus client APIs
  • +
  • Docusaurus CLI
  • +
  • Preset options
  • +
  • Plugin options
  • +
  • Plugin lifecycle APIs
  • +
  • Theme config
  • +
  • Core plugins route component props
  • +
  • @docusaurus/types TypeScript types +
      +
    • We still retain the freedom to make types stricter (which may break type-checking).
    • +
    +
  • +
+
tip

For non-theme APIs, any documented API is considered public (and will be stable); any undocumented API is considered internal.

+

An API being "stable" means if you increment the patch or minor version of your Docusaurus installation without any other change, running docusaurus start or docusaurus build should not throw an error.

+

Theming public API

+

Docusaurus has a very flexible theming system:

+
    +
  • You can use custom CSS
  • +
  • You can swizzle any React theme component
  • +
+

This system also implicitly creates a very large API surface. To be able to move fast and improve Docusaurus, we can't guarantee retro-compatibility.

+

✅ Our public theming API includes:

+ +
tip

You may not be able to achieve your site customization through this public API.

In this case, please report your customization use case and we will figure out how to expand our public API.

+

❌ Our public theming API excludes:

+
    +
  • The DOM structure
  • +
  • CSS module class names with a hash suffix (usually targeted with [class*='myClassName'] selectors)
  • +
  • React components that are unsafe or forbidden to swizzle
  • +
  • React components that import from @docusaurus/theme-common/internal
  • +
  • The exact visual appearance of the theme
  • +
+
note

When swizzling safe components, you might encounter components that import undocumented APIs from @docusaurus/theme-common (without the /internal subpath).

We still maintain retro-compatibility on those APIs (hence they are marked as "safe"), but we don't encourage a direct usage.

+ + \ No newline at end of file diff --git a/community/release-process.html.html b/community/release-process.html.html new file mode 100644 index 0000000000..b5919ae587 --- /dev/null +++ b/community/release-process.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/community/resources.html b/community/resources.html new file mode 100644 index 0000000000..d9a8fab335 --- /dev/null +++ b/community/resources.html @@ -0,0 +1,122 @@ + + + + + +Awesome Resources | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Awesome Resources

+

A curated list of interesting Docusaurus community projects.

+

Community documentation

+

The Docusaurus.community site extends the official docs with more complex examples and full articles that recommend best practices and provide solutions to common problems.

+

It is also a full Docusaurus application just like our main site, so customization and experimentation examples are perfectly suited to be hosted there.

+
info

We might allow direct links to be added in our official documentation that point to the community documentation, on a case-by-case basis, if the community finds such links to articles useful.

We are also contemplating further integration into the official documentation at some point in the future.

+

Videos

+ +

Articles

+ +

Showcase

+

See the showcase.

+

Community plugins

+ + +

Integrations

+ +

Features

+ +

Enterprise usage

+
    +
  • Facebook
  • +
  • Google
  • +
  • Stripe
  • +
  • Algolia
  • +
  • Callstack
  • +
  • Sauce Labs
  • +
+ + \ No newline at end of file diff --git a/community/resources.html.html b/community/resources.html.html new file mode 100644 index 0000000000..3308de34cf --- /dev/null +++ b/community/resources.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/community/support.html b/community/support.html new file mode 100644 index 0000000000..f5173d9276 --- /dev/null +++ b/community/support.html @@ -0,0 +1,78 @@ + + + + + +Support | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Support

+

Docusaurus has a community of thousands of developers.

+

On this page we've listed some Docusaurus-related communities that you can be a part of; see the other pages in this section for additional online and in-person learning materials.

+

Before participating in Docusaurus' communities, please read our Code of Conduct. We have adopted the Contributor Covenant and we expect that all community members adhere to the guidelines within.

+

Stack Overflow

+

Stack Overflow is a popular forum to ask code-level questions or if you're stuck with a specific error. Read through the existing questions tagged with docusaurus or ask your own!

+

Discussion forums

+

There are many online forums for discussion about best practices and application architecture as well as the future of Docusaurus. If you have an answerable code-level question, Stack Overflow is usually a better fit.

+ +

Feature requests

+

For new feature requests, you can create a post on our feature requests board (Canny), which is a handy tool for road-mapping and allows for sorting by upvotes, which gives the core team a better indicator of what features are in high demand, as compared to GitHub issues which are harder to triage. Refrain from making a Pull Request for new features (especially large ones) as someone might already be working on it or will be part of our roadmap. Talk to us first!

+

News

+

For the latest news about Docusaurus, follow @docusaurus on Twitter and the official Docusaurus blog on this website.

+ + \ No newline at end of file diff --git a/community/support.html.html b/community/support.html.html new file mode 100644 index 0000000000..ae87810010 --- /dev/null +++ b/community/support.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/community/team.html b/community/team.html new file mode 100644 index 0000000000..560dd0ed3d --- /dev/null +++ b/community/team.html @@ -0,0 +1,84 @@ + + + + + +Team | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Team

+ +

Active Team

+

The Docusaurus team works on the core functionality, plugins for the classic theme, as well as the Docusaurus documentation website.

+

Current members of the Docusaurus team are listed in alphabetical order below.

+
Sébastien Lorber's avatar

Sébastien Lorber

React lover since 2014. Freelance, helping Facebook ship Docusaurus v2. He writes regularly, on his website and Dev.to.
Sida Chen's avatar

Sida Chen

Student from Shanghai, China. Enthusiastic open-source project creator, but never actually works hard on those projects he created.
Clément Couriol's avatar

Clément Couriol

Student from CPE Lyon, France. Passionate web developer who tries to become an expert web developer.
+

Honorary Alumni

+

Docusaurus would never be what it is today without the huge contributions from these folks who have moved on to bigger and greater things.

+
Joel Marcey's avatar

Joel Marcey

Docusaurus founder and now ever grateful Docusaurus cheerleader to those who actually write code for it.
Alexey Pyltsyn's avatar

Alexey Pyltsyn

Obsessed open-source enthusiast 👋 Eternal amateur at everything 🤷‍♂️ Maintainer of Russian docs on PHP, React, Kubernetes and much more 🧐
Yangshun Tay's avatar

Yangshun Tay

Full Front End Stack developer who likes working on the Jamstack. Working on Docusaurus made him Facebook's unofficial part-time Open Source webmaster, which is an awesome role to be in.
Endilie Yacop Sucipto's avatar

Endilie Yacop Sucipto

Maintainer @docusaurus · 🔥🔥🔥
Wei Gao's avatar

Wei Gao

🏻‍🌾 Work in progress React developer, maintains Docusaurus, writes docs and spams this world with many websites.
+

Student Fellows

+

A handful of students have also worked on Docusaurus as part of their school term/internship and the Major League Hacking Fellowship program, contributing amazing features such as plugin options validation, migration tooling, and a Bootstrap theme.

+
Anshul Goyal's avatar

Anshul Goyal

Fullstack developer who loves to code and try new technologies. In his free time, he contributes to open source, writes blog posts on his website and watches Anime.
Drew Alexander's avatar

Drew Alexander

Developer and Creative, trying to gain the skills to build whatever he can think of.
Fanny Vieira's avatar

Fanny Vieira

Fanny got started with web development in high school, building a project for the school kitchen. In her free time she loves contributing to Open Source, occasionally writing on her blog about her experiences, cooking, and creating Spotify playlists.
Sam Zhou's avatar

Sam Zhou

Sam started programming in 2011 and built his website in 2015. He is interested in programming languages, dev infra and web development, and has built his own programming language and mini React.
Tan Teik Jun's avatar

Tan Teik Jun

Open-source enthusiast who aims to become as awesome as the other humans on this page. Working on Docusaurus brought him closer to his goal. 🌱
Nisarag Bhatt's avatar

Nisarag Bhatt

Fullstack web developer who loves learning new technologies and applying them! Loves contributing to open source as well as writing content articles and tutorials.
+

Acknowledgements

+

Docusaurus was originally created by Joel Marcey. Today, Docusaurus has a few hundred open source contributors. We’d like to recognize a few people who have made significant contributions to Docusaurus and its documentation in the past and have helped maintain them over the years:

+
+ + \ No newline at end of file diff --git a/community/team.html.html b/community/team.html.html new file mode 100644 index 0000000000..6e9a877421 --- /dev/null +++ b/community/team.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs.html b/docs.html new file mode 100644 index 0000000000..ab01826d34 --- /dev/null +++ b/docs.html @@ -0,0 +1,186 @@ + + + + + +Introduction | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Introduction

+

⚡️ Docusaurus will help you ship a beautiful documentation site in no time.

+

💸 Building a custom tech stack is expensive. Instead, focus on your content and just write Markdown files.

+

💥 Ready for more? Use advanced features like versioning, i18n, search and theme customizations.

+

💅 Check the best Docusaurus sites for inspiration and read some testimonials.

+

🧐 Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).

+

+

Fast Track ⏱️

+

Understand Docusaurus in 5 minutes by playing!

+

Create a new Docusaurus site and follow the very short embedded tutorial.

+

Install Node.js and create a new Docusaurus site:

+
npx create-docusaurus@latest my-website classic
+

Start the site:

+
cd my-website
npx docusaurus start
+

Open http://localhost:3000 and follow the tutorial.

+
tip

Use docusaurus.new to test Docusaurus immediately in your browser!

Or read the 5-minute tutorial online.

+

Docusaurus: Documentation Made Easy

+

In this presentation at Algolia Community Event, Meta Open Source team shared a brief walk-through of Docusaurus. They covered how to get started with the project, enable plugins, and set up functionalities like documentation and blogging.

+ + +
+

Migrating from v1

+

Docusaurus v2+ has been a total rewrite from Docusaurus v1, taking advantage of a completely modernized toolchain. After v2's official release, we highly encourage you to use Docusaurus v2+ over Docusaurus v1, as Docusaurus v1 has been deprecated.

+

A lot of users are already using Docusaurus v2+ (trends).

+

Use Docusaurus v2+ if:

+
    +
  • You want a modern Jamstack documentation site
  • +
  • You want a single-page application (SPA) with client-side routing
  • +
  • You want the full power of React and MDX
  • +
  • You do not need support for IE11
  • +
+

Use Docusaurus v1 if:

+
    +
  • You don't want a single-page application (SPA)
  • +
  • You need support for IE11 (...do you? IE has already reached end-of-life and is no longer officially supported)
  • +
+

For existing v1 users that are seeking to upgrade to v2+, you can follow our migration guides.

+

Features

+

Docusaurus is built with high attention to the developer and contributor experience.

+
    +
  • ⚛️ Built with 💚 and React: +
      +
    • Extend and customize with React
    • +
    • Gain full control of your site's browsing experience by providing your own React components
    • +
    +
  • +
  • Pluggable: +
      +
    • Bootstrap your site with a basic template, then use advanced features and plugins
    • +
    • Open source your plugins to share with the community
    • +
    +
  • +
  • ✂️ Developer experience: +
      +
    • Start writing your docs right now
    • +
    • Universal configuration entry point to make it more maintainable by contributors
    • +
    • Hot reloading with lightning-fast incremental build on changes
    • +
    • Route-based code and data splitting
    • +
    • Publish to GitHub Pages, Netlify, Vercel, and other deployment services with ease
    • +
    +
  • +
+

Our shared goal—to help your users quickly find what they need and understand your products better. We share our best practices to help you build your docs site right and well.

+
    +
  • 🎯 SEO friendly: +
      +
    • HTML files are statically generated for every possible path.
    • +
    • Page-specific SEO to help your users land on your official docs directly relating their problems at hand.
    • +
    +
  • +
  • 📝 Powered by MDX: +
      +
    • Write interactive components via JSX and React embedded in Markdown.
    • +
    • Share your code in live editors to get your users to love your products on the spot.
    • +
    +
  • +
  • 🔍 Search: Your full site is searchable.
  • +
  • 💾 Document Versioning: Helps you keep documentation in sync with project releases.
  • +
  • 🌍 Internationalization (i18n): Translate your site in multiple locales.
  • +
+

Docusaurus v2+ is born to be compassionately accessible to all your users, and lightning-fast.

+
    +
  • ⚡️ Lightning-fast. Docusaurus v2+ follows the PRPL Pattern that makes sure your content loads blazing fast.
  • +
  • 🦖 Accessible. Attention to accessibility, making your site equally accessible to all users.
  • +
+

Design principles

+
    +
  • Little to learn. Docusaurus should be easy to learn and use as the API is quite small. Most things will still be achievable by users, even if it takes them more code and more time to write. Not having abstractions is better than having the wrong abstractions, and we don't want users to have to hack around the wrong abstractions. Mandatory talk—Minimal API Surface Area.
  • +
  • Intuitive. Users will not feel overwhelmed when looking at the project directory of a Docusaurus project or adding new features. It should look intuitive and easy to build on top of, using approaches they are familiar with.
  • +
  • Layered architecture. The separations of concerns between each layer of our stack (content/theming/styling) should be clear—well-abstracted and modular.
  • +
  • Sensible defaults. Common and popular performance optimizations and configurations will be done for users but they are given the option to override them.
  • +
  • No vendor lock-in. Users are not required to use the default plugins or CSS, although they are highly encouraged to. Certain core infrastructures like React Loadable and React Router cannot be swapped because we do default performance optimization on them, but not higher-level ones. Choice of Markdown engines, CSS frameworks, CSS methodology, and other architectures will be entirely up to users.
  • +
+

We believe that, as developers, knowing how a library works helps us become better at using it. Hence we're dedicating effort to explaining the architecture and various components of Docusaurus with the hope that users reading it will gain a deeper understanding of the tool and be even more proficient in using it.

+

Comparison with other tools

+

Across all static site generators, Docusaurus has a unique focus on documentation sites and has many out-of-the-box features.

+

We've also studied other main static site generators and would like to share our insights on the comparison, hopefully helping you navigate through the prismatic choices out there.

+

Gatsby

+

Gatsby is packed with a lot of features, has a rich ecosystem of plugins, and is capable of doing everything that Docusaurus does. Naturally, that comes at a cost of a higher learning curve. Gatsby does many things well and is suitable for building many types of websites. On the other hand, Docusaurus tries to do one thing super well - be the best tool for writing and publishing content.

+

GraphQL is also pretty core to Gatsby, although you don't necessarily need GraphQL to build a Gatsby site. In most cases when building static websites, you won't need the flexibility that GraphQL provides.

+

Many aspects of Docusaurus v2+ were inspired by the best things about Gatsby and it's a great alternative.

+

Docz is a Gatsby theme to build documentation websites. It is currently less featured than Docusaurus.

+

Next.js

+

Next.js is another very popular hybrid React framework. It can help you build a good documentation website, but it is not opinionated toward the documentation use-case, and it will require a lot more work to implement what Docusaurus provides out-of-the-box.

+

Nextra is an opinionated static site generator built on top of Next.js. It is currently less featured than Docusaurus.

+

VitePress

+

VitePress has many similarities with Docusaurus - both focus heavily on content-centric websites and provides tailored documentation features out of the box. However, VitePress is powered by Vue, while Docusaurus is powered by React. If you want a Vue-based solution, VitePress would be a decent choice.

+

MkDocs

+

MkDocs is a popular Python static site generator with value propositions similar to Docusaurus.

+

It is a good option if you don't need a single-page application and don't plan to leverage React.

+

Material for MkDocs is a beautiful theme.

+

Docsify

+

Docsify makes it easy to create a documentation website, but is not a static-site generator and is not SEO friendly.

+

GitBook

+

GitBook has a very clean design and has been used by many open source projects. With its focus shifting towards a commercial product rather than an open-source tool, many of its requirements no longer fit the needs of open source projects' documentation sites. As a result, many have turned to other products. You may read about Redux's switch to Docusaurus here.

+

Currently, GitBook is only free for open-source and non-profit teams. Docusaurus is free for everyone.

+

Jekyll

+

Jekyll is one of the most mature static site generators around and has been a great tool to use — in fact, before Docusaurus, most of Facebook's Open Source websites are/were built on Jekyll! It is extremely simple to get started. We want to bring a similar developer experience as building a static site with Jekyll.

+

In comparison with statically generated HTML and interactivity added using <script /> tags, Docusaurus sites are React apps. Using modern JavaScript ecosystem tooling, we hope to set new standards on doc sites' performance, asset building pipeline and optimizations, and ease to set up.

+

Staying informed

+ +

Something missing?

+

If you find issues with the documentation or have suggestions on how to improve the documentation or the project in general, please file an issue for us, or send a tweet mentioning the @docusaurus Twitter account.

+

For new feature requests, you can create a post on our feature requests board (Canny), which is a handy tool for road-mapping and allows for sorting by upvotes, which gives the core team a better indicator of what features are in high demand, as compared to GitHub issues which are harder to triage. Refrain from making a Pull Request for new features (especially large ones) as someone might already be working on it or will be part of our roadmap. Talk to us first!

+ + \ No newline at end of file diff --git a/docs.html.html b/docs.html.html new file mode 100644 index 0000000000..1f9c147824 --- /dev/null +++ b/docs.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced.html b/docs/advanced.html new file mode 100644 index 0000000000..845b58d6b4 --- /dev/null +++ b/docs/advanced.html @@ -0,0 +1,62 @@ + + + + + +Advanced Tutorials | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/docs/advanced.html.html b/docs/advanced.html.html new file mode 100644 index 0000000000..cfeabce99e --- /dev/null +++ b/docs/advanced.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced/architecture.html b/docs/advanced/architecture.html new file mode 100644 index 0000000000..eff8f17297 --- /dev/null +++ b/docs/advanced/architecture.html @@ -0,0 +1,68 @@ + + + + + +Architecture | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Architecture

+ +

Architecture overview

+

This diagram shows how Docusaurus works to build your app. Plugins each collect their content and emit JSON data; themes provide layout components which receive the JSON data as route modules. The bundler bundles all the components and emits a server bundle and a client bundle.

+

Although you (either plugin authors or site creators) are writing JavaScript all the time, bear in mind that the JS is actually run in different environments:

+
    +
  • All plugin lifecycle methods are run in Node. Therefore, until we support ES Modules in our codebase, plugin source code must be provided as ES modules that can be imported, or CommonJS that can be require'd.
  • +
  • The theme code is built with Webpack. They can be provided as ESM—following React conventions.
  • +
+

Plugin code and theme code never directly import each other: they only communicate through protocols (in our case, through JSON temp files and calls to addRoute). A useful mental model is to imagine that the plugins are not written in JavaScript, but in another language like Rust. The only way to interact with plugins for the user is through docusaurus.config.js, which itself is run in Node (hence you can use require and pass callbacks as plugin options).

+

During bundling, the config file itself is serialized and bundled, allowing the theme to access config options like themeConfig or baseUrl through useDocusaurusContext(). However, the siteConfig object only contains serializable values (values that are preserved after JSON.stringify()). Functions, regexes, etc. would be lost on the client side. The themeConfig is designed to be entirely serializable.

+ + \ No newline at end of file diff --git a/docs/advanced/architecture.html.html b/docs/advanced/architecture.html.html new file mode 100644 index 0000000000..f6843dfea5 --- /dev/null +++ b/docs/advanced/architecture.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced/client.html b/docs/advanced/client.html new file mode 100644 index 0000000000..02d9888fe8 --- /dev/null +++ b/docs/advanced/client.html @@ -0,0 +1,108 @@ + + + + + +Client architecture | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Client architecture

+

Theme aliases

+

A theme works by exporting a set of components, e.g. Navbar, Layout, Footer, to render the data passed down from plugins. Docusaurus and users use these components by importing them using the @theme webpack alias:

+
import Navbar from '@theme/Navbar';
+

The alias @theme can refer to a few directories, in the following priority:

+
    +
  1. A user's website/src/theme directory, which is a special directory that has the higher precedence.
  2. +
  3. A Docusaurus theme package's theme directory.
  4. +
  5. Fallback components provided by Docusaurus core (usually not needed).
  6. +
+

This is called a layered architecture: a higher-priority layer providing the component would shadow a lower-priority layer, making swizzling possible. Given the following structure:

+
website
├── node_modules
│ └── @docusaurus/theme-classic
│ └── theme
│ └── Navbar.js
└── src
└── theme
└── Navbar.js
+

website/src/theme/Navbar.js takes precedence whenever @theme/Navbar is imported. This behavior is called component swizzling. If you are familiar with Objective C where a function's implementation can be swapped during runtime, it's the exact same concept here with changing the target @theme/Navbar is pointing to!

+

We already talked about how the "userland theme" in src/theme can re-use a theme component through the @theme-original alias. One theme package can also wrap a component from another theme, by importing the component from the initial theme, using the @theme-init import.

+

Here's an example of using this feature to enhance the default theme CodeBlock component with a react-live playground feature.

+
import InitialCodeBlock from '@theme-init/CodeBlock';
import React from 'react';

export default function CodeBlock(props) {
return props.live ? (
<ReactLivePlayground {...props} />
) : (
<InitialCodeBlock {...props} />
);
}
+

Check the code of @docusaurus/theme-live-codeblock for details.

+
warning

Unless you want to publish a re-usable "theme enhancer" (like @docusaurus/theme-live-codeblock), you likely don't need @theme-init.

+

It can be quite hard to wrap your mind around these aliases. Let's imagine the following case with a super convoluted setup with three themes/plugins and the site itself all trying to define the same component. Internally, Docusaurus loads these themes as a "stack".

+
+-------------------------------------------------+
| `website/src/theme/CodeBlock.js` | <-- `@theme/CodeBlock` always points to the top
+-------------------------------------------------+
| `theme-live-codeblock/theme/CodeBlock/index.js` | <-- `@theme-original/CodeBlock` points to the topmost non-swizzled component
+-------------------------------------------------+
| `plugin-awesome-codeblock/theme/CodeBlock.js` |
+-------------------------------------------------+
| `theme-classic/theme/CodeBlock/index.js` | <-- `@theme-init/CodeBlock` always points to the bottom
+-------------------------------------------------+
+

The components in this "stack" are pushed in the order of preset plugins > preset themes > plugins > themes > site, so the swizzled component in website/src/theme always comes out on top because it's loaded last.

+

@theme/* always points to the topmost component—when CodeBlock is swizzled, all other components requesting @theme/CodeBlock receive the swizzled version.

+

@theme-original/* always points to the topmost non-swizzled component. That's why you can import @theme-original/CodeBlock in the swizzled component—it points to the next one in the "component stack", a theme-provided one. Plugin authors should not try to use this because your component could be the topmost component and cause a self-import.

+

@theme-init/* always points to the bottommost component—usually, this comes from the theme or plugin that first provides this component. Individual plugins / themes trying to enhance code block can safely use @theme-init/CodeBlock to get its basic version. Site creators should generally not use this because you likely want to enhance the topmost instead of the bottommost component. It's also possible that the @theme-init/CodeBlock alias does not exist at all—Docusaurus only creates it when it points to a different one from @theme-original/CodeBlock, i.e. when it's provided by more than one theme. We don't waste aliases!

+

Client modules

+

Client modules are part of your site's bundle, just like theme components. However, they are usually side-effect-ful. Client modules are anything that can be imported by Webpack—CSS, JS, etc. JS scripts usually work on the global context, like registering event listeners, creating global variables...

+

These modules are imported globally before React even renders the initial UI.

+
@docusaurus/core/App.tsx
// How it works under the hood
import '@generated/client-modules';
+

Plugins and sites can both declare client modules, through getClientModules and siteConfig.clientModules, respectively.

+

Client modules are called during server-side rendering as well, so remember to check the execution environment before accessing client-side globals.

+
mySiteGlobalJs.js
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';

if (ExecutionEnvironment.canUseDOM) {
// As soon as the site loads in the browser, register a global event listener
window.addEventListener('keydown', (e) => {
if (e.code === 'Period') {
location.assign(location.href.replace('.com', '.dev'));
}
});
}
+

CSS stylesheets imported as client modules are global.

+
mySiteGlobalCss.css
/* This stylesheet is global. */
.globalSelector {
color: red;
}
+

Client module lifecycles

+

Besides introducing side-effects, client modules can optionally export two lifecycle functions: onRouteUpdate and onRouteDidUpdate.

+

Because Docusaurus builds a single-page application, script tags will only be executed the first time the page loads, but will not re-execute on page transitions. These lifecycles are useful if you have some imperative JS logic that should execute every time a new page has loaded, e.g., to manipulate DOM elements, to send analytics data, etc.

+

For every route transition, there will be several important timings:

+
    +
  1. The user clicks a link, which causes the router to change its current location.
  2. +
  3. Docusaurus preloads the next route's assets, while keeping displaying the current page's content.
  4. +
  5. The next route's assets have loaded.
  6. +
  7. The new location's route component gets rendered to DOM.
  8. +
+

onRouteUpdate will be called at event (2), and onRouteDidUpdate will be called at (4). They both receive the current location and the previous location (which can be null, if this is the first screen).

+

onRouteUpdate can optionally return a "cleanup" callback, which will be called at (3). For example, if you want to display a progress bar, you can start a timeout in onRouteUpdate, and clear the timeout in the callback. (The classic theme already provides an nprogress integration this way.)

+

Note that the new page's DOM is only available during event (4). If you need to manipulate the new page's DOM, you'll likely want to use onRouteDidUpdate, which will be fired as soon as the DOM on the new page has mounted.

+
myClientModule.js
export function onRouteDidUpdate({location, previousLocation}) {
// Don't execute if we are still on the same page; the lifecycle may be fired
// because the hash changes (e.g. when navigating between headings)
if (location.pathname !== previousLocation?.pathname) {
const title = document.getElementsByTagName('h1')[0];
if (title) {
title.innerText += '❤️';
}
}
}

export function onRouteUpdate({location, previousLocation}) {
if (location.pathname !== previousLocation?.pathname) {
const progressBarTimeout = window.setTimeout(() => {
nprogress.start();
}, delay);
return () => window.clearTimeout(progressBarTimeout);
}
return undefined;
}
+

Or, if you are using TypeScript and you want to leverage contextual typing:

+
myClientModule.ts
import type {ClientModule} from '@docusaurus/types';

const module: ClientModule = {
onRouteUpdate({location, previousLocation}) {
// ...
},
onRouteDidUpdate({location, previousLocation}) {
// ...
},
};
export default module;
+

Both lifecycles will fire on first render, but they will not fire on server-side, so you can safely access browser globals in them.

+
Prefer using React

Client module lifecycles are purely imperative, and you can't use React hooks or access React contexts within them. If your operations are state-driven or involve complicated DOM manipulations, you should consider swizzling components instead.

+ + \ No newline at end of file diff --git a/docs/advanced/client.html.html b/docs/advanced/client.html.html new file mode 100644 index 0000000000..8f3a747174 --- /dev/null +++ b/docs/advanced/client.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced/plugins.html b/docs/advanced/plugins.html new file mode 100644 index 0000000000..23a0c790f4 --- /dev/null +++ b/docs/advanced/plugins.html @@ -0,0 +1,98 @@ + + + + + +Plugins | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Plugins

+

Plugins are the building blocks of features in a Docusaurus site. Each plugin handles its own individual feature. Plugins may work and be distributed as part of a bundle via presets.

+

Creating plugins

+

A plugin is a function that takes two parameters: context and options. It returns a plugin instance object (or a promise). You can create plugins as functions or modules. For more information, refer to the plugin method references section.

+

Function definition

+

You can use a plugin as a function directly included in the Docusaurus config file:

+
docusaurus.config.js
export default {
// ...
plugins: [
async function myPlugin(context, options) {
// ...
return {
name: 'my-plugin',
async loadContent() {
// ...
},
async contentLoaded({content, actions}) {
// ...
},
/* other lifecycle API */
};
},
],
};
+

Module definition

+

You can use a plugin as a module path referencing a separate file or npm package:

+
docusaurus.config.js
export default {
// ...
plugins: [
// without options:
'./my-plugin',
// or with options:
['./my-plugin', options],
],
};
+

Then in the folder my-plugin, you can create an index.js such as this:

+
my-plugin/index.js
export default async function myPlugin(context, options) {
// ...
return {
name: 'my-plugin',
async loadContent() {
/* ... */
},
async contentLoaded({content, actions}) {
/* ... */
},
/* other lifecycle API */
};
}
+
+

You can view all plugins installed in your site using the debug plugin's metadata panel.

+

Plugins come as several types:

+
    +
  • package: an external package you installed
  • +
  • project: a plugin you created in your project, given to Docusaurus as a local file path
  • +
  • local: a plugin created using the function definition
  • +
  • synthetic: a "fake plugin" Docusaurus created internally, so we take advantage of our modular architecture and don't let the core do much special work. You won't see this in the metadata because it's an implementation detail.
  • +
+

You can access them on the client side with useDocusaurusContext().siteMetadata.pluginVersions.

+

Plugin design

+

Docusaurus' implementation of the plugins system provides us with a convenient way to hook into the website's lifecycle to modify what goes on during development/build, which involves (but is not limited to) extending the webpack config, modifying the data loaded, and creating new components to be used in a page.

+

Theme design

+

When plugins have loaded their content, the data is made available to the client side through actions like createData + addRoute or setGlobalData. This data has to be serialized to plain strings, because plugins and themes run in different environments. Once the data arrives on the client side, the rest becomes familiar to React developers: data is passed along components, components are bundled with Webpack, and rendered to the window through ReactDOM.render...

+

Themes provide the set of UI components to render the content. Most content plugins need to be paired with a theme in order to be actually useful. The UI is a separate layer from the data schema, which makes swapping designs easy.

+

For example, a Docusaurus blog may consist of a blog plugin and a blog theme.

+
note

This is a contrived example: in practice, @docusaurus/theme-classic provides the theme for docs, blog, and layouts.

+
docusaurus.config.js
export default {
themes: ['theme-blog'],
plugins: ['plugin-content-blog'],
};
+

And if you want to use Bootstrap styling, you can swap out the theme with theme-blog-bootstrap (another fictitious non-existing theme):

+
docusaurus.config.js
export default {
themes: ['theme-blog-bootstrap'],
plugins: ['plugin-content-blog'],
};
+

Now, although the theme receives the same data from the plugin, how the theme chooses to render the data as UI can be drastically different.

+

While themes share the exact same lifecycle methods with plugins, themes' implementations can look very different from those of plugins based on themes' designed objectives.

+

Themes are designed to complete the build of your Docusaurus site and supply the components used by your site, plugins, and the themes themselves. A theme still acts like a plugin and exposes some lifecycle methods, but most likely they would not use loadContent, since they only receive data from plugins, but don't generate data themselves; themes are typically also accompanied by an src/theme directory full of components, which are made known to the core through the getThemePath lifecycle.

+

To summarize:

+
    +
  • Themes share the same lifecycle methods with Plugins
  • +
  • Themes are run after all existing Plugins
  • +
  • Themes add component aliases by providing getThemePath.
  • +
+ + \ No newline at end of file diff --git a/docs/advanced/plugins.html.html b/docs/advanced/plugins.html.html new file mode 100644 index 0000000000..2361da6274 --- /dev/null +++ b/docs/advanced/plugins.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced/routing.html b/docs/advanced/routing.html new file mode 100644 index 0000000000..b2b60d887f --- /dev/null +++ b/docs/advanced/routing.html @@ -0,0 +1,151 @@ + + + + + +Routing | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Routing

+ +

Docusaurus' routing system follows single-page application conventions: one route, one component. In this section, we will begin by talking about routing within the three content plugins (docs, blog, and pages), and then go beyond to talk about the underlying routing system.

+

Routing in content plugins

+

Every content plugin provides a routeBasePath option. It defines where the plugins append their routes to. By default, the docs plugin puts its routes under /docs; the blog plugin, /blog; and the pages plugin, /. You can think about the route structure like this:

+ +

Any route will be matched against this nested route config until a good match is found. For example, when given a route /docs/configuration, Docusaurus first enters the /docs branch, and then searches among the subroutes created by the docs plugin.

+

Changing routeBasePath can effectively alter your site's route structure. For example, in Docs-only mode, we mentioned that configuring routeBasePath: '/' for docs means that all routes that the docs plugin create would not have the /docs prefix, yet it doesn't prevent you from having more subroutes like /blog created by other plugins.

+

Next, let's look at how the three plugins structure their own "boxes of subroutes".

+

Pages routing

+

Pages routing are straightforward: the file paths directly map to URLs, without any other way to customize. See the pages docs for more information.

+

The component used for Markdown pages is @theme/MDXPage. React pages are directly used as the route's component.

+

Blog routing

+

The blog creates the following routes:

+
    +
  • Posts list pages: /, /page/2, /page/3... +
      +
    • The route is customizable through the pageBasePath option.
    • +
    • The component is @theme/BlogListPage.
    • +
    +
  • +
  • Post pages: /2021/11/21/algolia-docsearch-migration, /2021/05/12/announcing-docusaurus-two-beta... +
      +
    • Generated from each Markdown post.
    • +
    • The routes are fully customizable through the slug front matter.
    • +
    • The component is @theme/BlogPostPage.
    • +
    +
  • +
  • Tags list page: /tags +
      +
    • The route is customizable through the tagsBasePath option.
    • +
    • The component is @theme/BlogTagsListPage.
    • +
    +
  • +
  • Tag pages: /tags/adoption, /tags/beta... +
      +
    • Generated through the tags defined in each post's front matter.
    • +
    • The routes always have base defined in tagsBasePath, but the subroutes are customizable through the tag's permalink field.
    • +
    • The component is @theme/BlogTagsPostsPage.
    • +
    +
  • +
  • Archive page: /archive +
      +
    • The route is customizable through the archiveBasePath option.
    • +
    • The component is @theme/BlogArchivePage.
    • +
    +
  • +
+

Docs routing

+

The docs is the only plugin that creates nested routes. At the top, it registers version paths: /, /next, /2.0.0-beta.13... which provide the version context, including the layout and sidebar. This ensures that when switching between individual docs, the sidebar's state is preserved, and that you can switch between versions through the navbar dropdown while staying on the same doc. The component used is @theme/DocPage.

+ + +

The individual docs are rendered in the remaining space after the navbar, footer, sidebar, etc. have all been provided by the DocPage component. For example, this page, /docs/advanced/routing, is generated from the file at ./docs/advanced/routing.md. The component used is @theme/DocItem.

+

The doc's slug front matter customizes the last part of the route, but the base route is always defined by the plugin's routeBasePath and the version's path.

+

File paths and URL paths

+

Throughout the documentation, we always try to be unambiguous about whether we are talking about file paths or URL paths. Content plugins usually map file paths directly to URL paths, for example, ./docs/advanced/routing.md will become /docs/advanced/routing. However, with slug, you can make URLs totally decoupled from the file structure.

+

When writing links in Markdown, you could either mean a file path, or a URL path, which Docusaurus would use several heuristics to determine.

+
    +
  • If the path has a @site prefix, it is always an asset file path.
  • +
  • If the path has an http(s):// prefix, it is always a URL path.
  • +
  • If the path doesn't have an extension, it is a URL path. For example, a link [page](../plugins) on a page with URL /docs/advanced/routing will link to /docs/plugins. Docusaurus will only detect broken links when building your site (when it knows the full route structure), but will make no assumptions about the existence of a file. It is exactly equivalent to writing <a href="../plugins">page</a> in a JSX file.
  • +
  • If the path has an .md(x) extension, Docusaurus would try to resolve that Markdown file to a URL, and replace the file path with a URL path.
  • +
  • If the path has any other extension, Docusaurus would treat it as an asset and bundle it.
  • +
+

The following directory structure may help you visualize this file → URL mapping. Assume that there's no slug customization in any page.

+
A sample site structure
.
├── blog # blog plugin has routeBasePath: '/blog'
│ ├── 2019-05-28-first-blog-post.md # -> /blog/2019/05/28/first-blog-post
│ ├── 2019-05-29-long-blog-post.md # -> /blog/2019/05/29/long-blog-post
│ ├── 2021-08-01-mdx-blog-post.mdx # -> /blog/2021/08/01/mdx-blog-post
│ └── 2021-08-26-welcome
│ ├── docusaurus-plushie-banner.jpeg
│ └── index.md # -> /blog/2021/08/26/welcome
├── docs # docs plugin has routeBasePath: '/docs'; current version has base path '/'
│ ├── intro.md # -> /docs/intro
│ ├── tutorial-basics
│ │ ├── _category_.json
│ │ ├── congratulations.md # -> /docs/tutorial-basics/congratulations
│ │ └── markdown-features.mdx # -> /docs/tutorial-basics/markdown-features
│ └── tutorial-extras
│ ├── _category_.json
│ ├── manage-docs-versions.md # -> /docs/tutorial-extras/manage-docs-versions
│ └── translate-your-site.md # -> /docs/tutorial-extras/translate-your-site
├── src
│ └── pages # pages plugin has routeBasePath: '/'
│ ├── index.module.css
│ ├── index.tsx # -> /
│ └── markdown-page.md # -> /markdown-page
└── versioned_docs
└── version-1.0.0 # version has base path '/1.0.0'
├── intro.md # -> /docs/1.0.0/intro
├── tutorial-basics
│ ├── _category_.json
│ ├── congratulations.md # -> /docs/1.0.0/tutorial-basics/congratulations
│ └── markdown-features.mdx # -> /docs/1.0.0/tutorial-basics/markdown-features
└── tutorial-extras
├── _category_.json
├── manage-docs-versions.md # -> /docs/1.0.0/tutorial-extras/manage-docs-versions
└── translate-your-site.md # -> /docs/1.0.0/tutorial-extras/translate-your-site
+

So much about content plugins. Let's take one step back and talk about how routing works in a Docusaurus app in general.

+

Routes become HTML files

+

Because Docusaurus is a server-side rendering framework, all routes generated will be server-side rendered into static HTML files. If you are familiar with the behavior of HTTP servers like Apache2, you will understand how this is done: when the browser sends a request to the route /docs/advanced/routing, the server interprets that as request for the HTML file /docs/advanced/routing/index.html, and returns that.

+

The /docs/advanced/routing route can correspond to either /docs/advanced/routing/index.html or /docs/advanced/routing.html. Some hosting providers differentiate between them using the presence of a trailing slash, and may or may not tolerate the other. Read more in the trailing slash guide.

+

For example, the build output of the directory above is (ignoring other assets and JS bundle):

+
Output of the above workspace
build
├── 404.html # /404/
├── blog
│ ├── archive
│ │ └── index.html # /blog/archive/
│ ├── first-blog-post
│ │ └── index.html # /blog/first-blog-post/
│ ├── index.html # /blog/
│ ├── long-blog-post
│ │ └── index.html # /blog/long-blog-post/
│ ├── mdx-blog-post
│ │ └── index.html # /blog/mdx-blog-post/
│ ├── tags
│ │ ├── docusaurus
│ │ │ └── index.html # /blog/tags/docusaurus/
│ │ ├── hola
│ │ │ └── index.html # /blog/tags/hola/
│ │ └── index.html # /blog/tags/
│ └── welcome
│ └── index.html # /blog/welcome/
├── docs
│ ├── 1.0.0
│ │ ├── intro
│ │ │ └── index.html # /docs/1.0.0/intro/
│ │ ├── tutorial-basics
│ │ │ ├── congratulations
│ │ │ │ └── index.html # /docs/1.0.0/tutorial-basics/congratulations/
│ │ │ └── markdown-features
│ │ │ └── index.html # /docs/1.0.0/tutorial-basics/markdown-features/
│ │ └── tutorial-extras
│ │ ├── manage-docs-versions
│ │ │ └── index.html # /docs/1.0.0/tutorial-extras/manage-docs-versions/
│ │ └── translate-your-site
│ │ └── index.html # /docs/1.0.0/tutorial-extras/translate-your-site/
│ ├── intro
│ │ └── index.html # /docs/1.0.0/intro/
│ ├── tutorial-basics
│ │ ├── congratulations
│ │ │ └── index.html # /docs/tutorial-basics/congratulations/
│ │ └── markdown-features
│ │ └── index.html # /docs/tutorial-basics/markdown-features/
│ └── tutorial-extras
│ ├── manage-docs-versions
│ │ └── index.html # /docs/tutorial-extras/manage-docs-versions/
│ └── translate-your-site
│ └── index.html # /docs/tutorial-extras/translate-your-site/
├── index.html # /
└── markdown-page
└── index.html # /markdown-page/
+

If trailingSlash is set to false, the build would emit intro.html instead of intro/index.html.

+

All HTML files will reference its JS assets using absolute URLs, so in order for the correct assets to be located, you have to configure the baseUrl field. Note that baseUrl doesn't affect the emitted bundle's file structure: the base URL is one level above the Docusaurus routing system. You can see the aggregate of url and baseUrl as the actual location of your Docusaurus site.

+

For example, the emitted HTML would contain links like <link rel="preload" href="/assets/js/runtime~main.7ed5108a.js" as="script">. Because absolute URLs are resolved from the host, if the bundle placed under the path https://example.com/base/, the link will point to https://example.com/assets/js/runtime~main.7ed5108a.js, which is, well, non-existent. By specifying /base/ as base URL, the link will correctly point to /base/assets/js/runtime~main.7ed5108a.js.

+

Localized sites have the locale as part of the base URL as well. For example, https://docusaurus.io/zh-CN/docs/advanced/routing/ has base URL /zh-CN/.

+

Generating and accessing routes

+

The addRoute lifecycle action is used to generate routes. It registers a piece of route config to the route tree, giving a route, a component, and props that the component needs. The props and the component are both provided as paths for the bundler to require, because as explained in the architecture overview, server and client only communicate through temp files.

+

All routes are aggregated in .docusaurus/routes.js, which you can view with the debug plugin's routes panel.

+

On the client side, we offer @docusaurus/router to access the page's route. @docusaurus/router is a re-export of the react-router-dom package. For example, you can use useLocation to get the current page's location, and useHistory to access the history object. (They are not the same as the browser API, although similar in functionality. Refer to the React Router documentation for specific APIs.)

+

This API is SSR safe, as opposed to the browser-only window.location.

+
myComponent.js
import React from 'react';
import {useLocation} from '@docusaurus/router';

export function PageRoute() {
// React router provides the current component's route, even in SSR
const location = useLocation();
return (
<span>
We are currently on <code>{location.pathname}</code>
</span>
);
}
+ +
http://localhost:3000
We are currently on /docs/advanced/routing
+

Escaping from SPA redirects

+

Docusaurus builds a single-page application, where route transitions are done through the history.push() method of React router. This operation is done on the client side. However, the prerequisite for a route transition to happen this way is that the target URL is known to our router. Otherwise, the router catches this path and displays a 404 page instead.

+

If you put some HTML pages under the static folder, they will be copied to the build output and therefore become accessible as part of your website, yet it's not part of the Docusaurus route system. We provide a pathname:// protocol that allows you to redirect to another part of your domain in a non-SPA fashion, as if this route is an external link.

+
- [pathname:///pure-html](pathname:///pure-html)
+
http://localhost:3000
+

The pathname:// protocol is useful for referencing any content in the static folder. For example, Docusaurus would convert all Markdown static assets to require() calls. You can use pathname:// to keep it a regular link instead of being hashed by Webpack.

+
my-doc.md
![An image from the static](pathname:///img/docusaurus.png)

[An asset from the static](pathname:///files/asset.pdf)
+

Docusaurus will only strip the pathname:// prefix without processing the content.

+ + \ No newline at end of file diff --git a/docs/advanced/routing.html.html b/docs/advanced/routing.html.html new file mode 100644 index 0000000000..203fa993fb --- /dev/null +++ b/docs/advanced/routing.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/advanced/ssg.html b/docs/advanced/ssg.html new file mode 100644 index 0000000000..6132424490 --- /dev/null +++ b/docs/advanced/ssg.html @@ -0,0 +1,101 @@ + + + + + +Static site generation (SSG) | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static site generation (SSG)

+

In architecture, we mentioned that the theme is run in Webpack. But beware: that doesn't mean it always has access to browser globals! The theme is built twice:

+
    +
  • During server-side rendering, the theme is compiled in a sandbox called React DOM Server. You can see this as a "headless browser", where there is no window or document, only React. SSR produces static HTML pages.
  • +
  • During client-side rendering, the theme is compiled to JavaScript that gets eventually executed in the browser, so it has access to browser variables.
  • +
+
SSR or SSG?

Server-side rendering and static site generation can be different concepts, but we use them interchangeably.

Strictly speaking, Docusaurus is a static site generator, because there's no server-side runtime—we statically render to HTML files that are deployed on a CDN, instead of dynamically pre-rendering on each request. This differs from the working model of Next.js.

+

Therefore, while you probably know not to access Node globals like process (or can we?) or the 'fs' module, you can't freely access browser globals either.

+
import React from 'react';

export default function WhereAmI() {
return <span>{window.location.href}</span>;
}
+

This looks like idiomatic React, but if you run docusaurus build, you will get an error:

+
ReferenceError: window is not defined
+

This is because during server-side rendering, the Docusaurus app isn't actually run in browser, and it doesn't know what window is.

+
What about process.env.NODE_ENV?

One exception to the "no Node globals" rule is process.env.NODE_ENV. In fact, you can use it in React, because Webpack injects this variable as a global:

import React from 'react';

export default function expensiveComp() {
if (process.env.NODE_ENV === 'development') {
return <>This component is not shown in development</>;
}
const res = someExpensiveOperationThatLastsALongTime();
return <>{res}</>;
}

During Webpack build, the process.env.NODE_ENV will be replaced with the value, either 'development' or 'production'. You will then get different build results after dead code elimination:

import React from 'react';

export default function expensiveComp() {
if ('development' === 'development') {
+ return <>This component is not shown in development</>;
}
- const res = someExpensiveOperationThatLastsALongTime();
- return <>{res}</>;
}
+

Understanding SSR

+

React is not just a dynamic UI runtime—it's also a templating engine. Because Docusaurus sites mostly contain static contents, it should be able to work without any JavaScript (which React runs in), but only plain HTML/CSS. And that's what server-side rendering offers: statically rendering your React code into HTML, without any dynamic content. An HTML file has no concept of client state (it's purely markup), hence it shouldn't rely on browser APIs.

+

These HTML files are the first to arrive at the user's browser screen when a URL is visited (see routing). Afterwards, the browser fetches and runs other JS code to provide the "dynamic" parts of your site—anything implemented with JavaScript. However, before that, the main content of your page is already visible, allowing faster loading.

+

In CSR-only apps, all DOM elements are generated on client side with React, and the HTML file only ever contains one root element for React to mount DOM to; in SSR, React is already facing a fully built HTML page, and it only needs to correlate the DOM elements with the virtual DOM in its model. This step is called "hydration". After React has hydrated the static markup, the app starts to work as any normal React app.

+

Note that Docusaurus is ultimately a single-page application, so static site generation is only an optimization (progressive enhancement, as it's called), but our functionality does not fully depend on those HTML files. This is contrary to site generators like Jekyll and Docusaurus v1, where all files are statically transformed to markup, and interactiveness is added through external JavaScript linked with <script> tags. If you inspect the build output, you will still see JS assets under build/assets/js, which are, really, the core of Docusaurus.

+

Escape hatches

+

If you want to render any dynamic content on your screen that relies on the browser API to be functional at all, for example:

+
    +
  • Our live codeblock, which runs in the browser's JS runtime
  • +
  • Our themed image that detects the user's color scheme to display different images
  • +
  • The JSON viewer of our debug panel which uses the window global for styling
  • +
+

You may need to escape from SSR since static HTML can't display anything useful without knowing the client state.

+
warning

It is important for the first client-side render to produce the exact same DOM structure as server-side rendering, otherwise, React will correlate virtual DOM with the wrong DOM elements.

Therefore, the naïve attempt of if (typeof window !== 'undefined) {/* render something */} won't work appropriately as a browser vs. server detection, because the first client render would instantly render different markup from the server-generated one.

You can read more about this pitfall in The Perils of Rehydration.

+

We provide several more reliable ways to escape SSR.

+

<BrowserOnly>

+

If you need to render some component in browser only (for example, because the component relies on browser specifics to be functional at all), one common approach is to wrap your component with <BrowserOnly> to make sure it's invisible during SSR and only rendered in CSR.

+
import BrowserOnly from '@docusaurus/BrowserOnly';

function MyComponent(props) {
return (
<BrowserOnly fallback={<div>Loading...</div>}>
{() => {
const LibComponent =
require('some-lib-that-accesses-window').LibComponent;
return <LibComponent {...props} />;
}}
</BrowserOnly>
);
}
+

It's important to realize that the children of <BrowserOnly> is not a JSX element, but a function that returns an element. This is a design decision. Consider this code:

+
import BrowserOnly from '@docusaurus/BrowserOnly';

function MyComponent() {
return (
<BrowserOnly>
{/* DON'T DO THIS - doesn't actually work */}
<span>page url = {window.location.href}</span>
</BrowserOnly>
);
}
+

While you may expect that BrowserOnly hides away the children during server-side rendering, it actually can't. When the React renderer tries to render this JSX tree, it does see the {window.location.href} variable as a node of this tree and tries to render it, although it's actually not used! Using a function ensures that we only let the renderer see the browser-only component when it's needed.

+

useIsBrowser

+

You can also use the useIsBrowser() hook to test if the component is currently in a browser environment. It returns false in SSR and true is CSR, after first client render. Use this hook if you only need to perform certain conditional operations on client-side, but not render an entirely different UI.

+
import useIsBrowser from '@docusaurus/useIsBrowser';

function MyComponent() {
const isBrowser = useIsBrowser();
const location = isBrowser ? window.location.href : 'fetching location...';
return <span>{location}</span>;
}
+

useEffect

+

Lastly, you can put your logic in useEffect() to delay its execution until after first CSR. This is most appropriate if you are only performing side-effects but don't get data from the client state.

+
function MyComponent() {
useEffect(() => {
// Only logged in the browser console; nothing is logged during server-side rendering
console.log("I'm now in the browser");
}, []);
return <span>Some content...</span>;
}
+

ExecutionEnvironment

+

The ExecutionEnvironment namespace contains several values, and canUseDOM is an effective way to detect browser environment.

+

Beware that it essentially checked typeof window !== 'undefined' under the hood, so you should not use it for rendering-related logic, but only imperative code, like reacting to user input by sending web requests, or dynamically importing libraries, where DOM isn't updated at all.

+
a-client-module.js
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';

if (ExecutionEnvironment.canUseDOM) {
document.title = "I'm loaded!";
}
+ + \ No newline at end of file diff --git a/docs/advanced/ssg.html.html b/docs/advanced/ssg.html.html new file mode 100644 index 0000000000..617a122c14 --- /dev/null +++ b/docs/advanced/ssg.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/docusaurus-config.html b/docs/api/docusaurus-config.html new file mode 100644 index 0000000000..5b03100445 --- /dev/null +++ b/docs/api/docusaurus-config.html @@ -0,0 +1,300 @@ + + + + + +docusaurus.config.js | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

docusaurus.config.js

+ +
info

Refer to the Getting Started Configuration for examples.

+

Overview

+

docusaurus.config.js contains configurations for your site and is placed in the root directory of your site.

+

This file is run in Node.js and should export a site configuration object, or a function that creates it.

+

The docusaurus.config.js file supports:

+ +

Examples:

+
docusaurus.config.js
export default {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
+
docusaurus.config.js
export default async function createConfigAsync() {
return {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
}
+
tip

Refer to Syntax to declare docusaurus.config.js for a more exhaustive list of examples and explanations.

+

Required fields

+

title

+
    +
  • Type: string
  • +
+

Title for your website. Will be used in metadata and as browser tab title.

+
docusaurus.config.js
export default {
title: 'Docusaurus',
};
+

url

+
    +
  • Type: string
  • +
+

URL for your website. This can also be considered the top-level hostname. For example, https://facebook.github.io is the URL of https://facebook.github.io/metro/, and https://docusaurus.io is the URL for https://docusaurus.io. This field is related to the baseUrl field.

+
docusaurus.config.js
export default {
url: 'https://docusaurus.io',
};
+

baseUrl

+
    +
  • Type: string
  • +
+

Base URL for your site. Can be considered as the path after the host. For example, /metro/ is the base URL of https://facebook.github.io/metro/. For URLs that have no path, the baseUrl should be set to /. This field is related to the url field. Always has both leading and trailing slash.

+
docusaurus.config.js
export default {
baseUrl: '/',
};
+

Optional fields

+

favicon

+
    +
  • Type: string | undefined
  • +
+

Path to your site favicon; must be a URL that can be used in link's href. For example, if your favicon is in static/img/favicon.ico:

+
docusaurus.config.js
export default {
favicon: '/img/favicon.ico',
};
+

trailingSlash

+
    +
  • Type: boolean | undefined
  • +
+

Allow to customize the presence/absence of a trailing slash at the end of URLs/links, and how static HTML files are generated:

+
    +
  • undefined (default): keeps URLs untouched, and emit /docs/myDoc/index.html for /docs/myDoc.md
  • +
  • true: add trailing slashes to URLs/links, and emit /docs/myDoc/index.html for /docs/myDoc.md
  • +
  • false: remove trailing slashes from URLs/links, and emit /docs/myDoc.html for /docs/myDoc.md
  • +
+
tip

Each static hosting provider serves static files differently (this behavior may even change over time).

Refer to the deployment guide and slorber/trailing-slash-guide to choose the appropriate setting.

+

i18n

+
    +
  • Type: Object
  • +
+

The i18n configuration object to localize your site.

+

Example:

+ +
docusaurus.config.js
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fa'],
path: 'i18n',
localeConfigs: {
en: {
label: 'English',
direction: 'ltr',
htmlLang: 'en-US',
calendar: 'gregory',
path: 'en',
},
fa: {
label: 'فارسی',
direction: 'rtl',
htmlLang: 'fa-IR',
calendar: 'persian',
path: 'fa',
},
},
},
};
+
    +
  • defaultLocale: The locale that (1) does not have its name in the base URL (2) gets started with docusaurus start without --locale option (3) will be used for the <link hrefLang="x-default"> tag
  • +
  • locales: List of locales deployed on your site. Must contain defaultLocale.
  • +
  • path: Root folder which all locale folders are relative to. Can be absolute or relative to the config file. Defaults to i18n.
  • +
  • localeConfigs: Individual options for each locale. +
      +
    • label: The label displayed for this locale in the locales dropdown.
    • +
    • direction: ltr (default) or rtl (for right-to-left languages like Farsi, Arabic, Hebrew, etc.). Used to select the locale's CSS and HTML meta attribute.
    • +
    • htmlLang: BCP 47 language tag to use in <html lang="..."> (or any other DOM tag name) and in <link ... hreflang="...">
    • +
    • calendar: the calendar used to calculate the date era. Note that it doesn't control the actual string displayed: MM/DD/YYYY and DD/MM/YYYY are both gregory. To choose the format (DD/MM/YYYY or MM/DD/YYYY), set your locale name to en-GB or en-US (en means en-US).
    • +
    • path: Root folder that all plugin localization folders of this locale are relative to. Will be resolved against i18n.path. Defaults to the locale's name. Note: this has no effect on the locale's baseUrl—customization of base URL is a work-in-progress.
    • +
    +
  • +
+

noIndex

+
    +
  • Type: boolean
  • +
+

This option adds <meta name="robots" content="noindex, nofollow"> to every page to tell search engines to avoid indexing your site (more information here).

+

Example:

+
docusaurus.config.js
export default {
noIndex: true, // Defaults to `false`
};
+ +
    +
  • Type: 'ignore' | 'log' | 'warn' | 'throw'
  • +
+

The behavior of Docusaurus when it detects any broken link.

+

By default, it throws an error, to ensure you never ship any broken link.

+
note

The broken links detection is only available for a production build (docusaurus build).

+

onBrokenAnchors

+
    +
  • Type: 'ignore' | 'log' | 'warn' | 'throw'
  • +
+

The behavior of Docusaurus when it detects any broken anchor declared with the Heading component of Docusaurus.

+

By default, it prints a warning, to let you know about your broken anchors.

+ +
    +
  • Type: 'ignore' | 'log' | 'warn' | 'throw'
  • +
+

The behavior of Docusaurus when it detects any broken Markdown link.

+

By default, it prints a warning, to let you know about your broken Markdown link.

+

onDuplicateRoutes

+
    +
  • Type: 'ignore' | 'log' | 'warn' | 'throw'
  • +
+

The behavior of Docusaurus when it detects any duplicate routes.

+

By default, it displays a warning after you run yarn start or yarn build.

+

tagline

+
    +
  • Type: string
  • +
+

The tagline for your website.

+
docusaurus.config.js
export default {
tagline:
'Docusaurus makes it easy to maintain Open Source documentation websites.',
};
+

organizationName

+
    +
  • Type: string
  • +
+

The GitHub user or organization that owns the repository. You don't need this if you are not using the docusaurus deploy command.

+
docusaurus.config.js
export default {
// Docusaurus' organization is facebook
organizationName: 'facebook',
};
+

projectName

+
    +
  • Type: string
  • +
+

The name of the GitHub repository. You don't need this if you are not using the docusaurus deploy command.

+
docusaurus.config.js
export default {
projectName: 'docusaurus',
};
+

deploymentBranch

+
    +
  • Type: string
  • +
+

The name of the branch to deploy the static files to. You don't need this if you are not using the docusaurus deploy command.

+
docusaurus.config.js
export default {
deploymentBranch: 'gh-pages',
};
+

githubHost

+
    +
  • Type: string
  • +
+

The hostname of your server. Useful if you are using GitHub Enterprise. You don't need this if you are not using the docusaurus deploy command.

+
docusaurus.config.js
export default {
githubHost: 'github.com',
};
+

githubPort

+
    +
  • Type: string
  • +
+

The port of your server. Useful if you are using GitHub Enterprise. You don't need this if you are not using the docusaurus deploy command.

+
docusaurus.config.js
export default {
githubPort: '22',
};
+

themeConfig

+
    +
  • Type: Object
  • +
+

The theme configuration object to customize your site UI like navbar and footer.

+

Example:

+
docusaurus.config.js
export default {
themeConfig: {
docs: {
sidebar: {
hideable: false,
autoCollapseCategories: false,
},
},
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: true,
},
navbar: {
title: 'Site Title',
logo: {
alt: 'Site Logo',
src: 'img/logo.svg',
width: 32,
height: 32,
},
items: [
{
to: 'docs/docusaurus.config.js',
activeBasePath: 'docs',
label: 'docusaurus.config.js',
position: 'left',
},
// ... other links
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Docs',
to: 'docs/doc1',
},
],
},
// ... other links
],
logo: {
alt: 'Meta Open Source Logo',
src: 'img/meta_oss_logo.png',
href: 'https://opensource.fb.com',
width: 160,
height: 51,
},
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, // You can also put own HTML here
},
},
};
+

plugins

+
    +
  • Type: PluginConfig[]
  • +
+
type PluginConfig = string | [string, any] | PluginModule | [PluginModule, any];
+

See plugin method references for the shape of a PluginModule.

+
docusaurus.config.js
export default {
plugins: [
'docusaurus-plugin-awesome',
['docusuarus-plugin-confetti', {fancy: false}],
() => ({
postBuild() {
console.log('Build finished');
},
}),
],
};
+

themes

+
    +
  • Type: PluginConfig[]
  • +
+
docusaurus.config.js
export default {
themes: ['@docusaurus/theme-classic'],
};
+

presets

+
    +
  • Type: PresetConfig[]
  • +
+
type PresetConfig = string | [string, any];
+
docusaurus.config.js
export default {
presets: [],
};
+

markdown

+

The global Docusaurus Markdown config.

+
    +
  • Type: MarkdownConfig
  • +
+
type MarkdownPreprocessor = (args: {
filePath: string;
fileContent: string;
}) => string;

type MDX1CompatOptions =
| boolean
| {
comments: boolean;
admonitions: boolean;
headingIds: boolean;
};

export type ParseFrontMatter = (params: {
filePath: string;
fileContent: string;
defaultParseFrontMatter: ParseFrontMatter;
}) => Promise<{
frontMatter: {[key: string]: unknown};
content: string;
}>;

type MarkdownConfig = {
format: 'mdx' | 'md' | 'detect';
mermaid: boolean;
preprocessor?: MarkdownPreprocessor;
parseFrontMatter?: ParseFrontMatter;
mdx1Compat: MDX1CompatOptions;
remarkRehypeOptions: object; // see https://github.com/remarkjs/remark-rehype#options
};
+

Example:

+
docusaurus.config.js
export default {
markdown: {
format: 'mdx',
mermaid: true,
preprocessor: ({filePath, fileContent}) => {
return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE');
},
parseFrontMatter: async (params) => {
const result = await params.defaultParseFrontMatter(params);
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');
return result;
},
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
+
NameTypeDefaultDescription
format'mdx' | 'md' | 'detect''mdx'The default parser format to use for Markdown content. Using 'detect' will select the appropriate format automatically based on file extensions: .md vs .mdx.
mermaidbooleanfalseWhen true, allows Docusaurus to render Markdown code blocks with mermaid language as Mermaid diagrams.
preprocessorMarkdownPreprocessorundefinedGives you the ability to alter the Markdown content string before parsing. Use it as a last-resort escape hatch or workaround: it is almost always better to implement a Remark/Rehype plugin.
parseFrontMatterParseFrontMatterundefinedGives you the ability to provide your own front matter parser, or to enhance the default parser. Read our front matter guide for details.
mdx1CompatMDX1CompatOptions{comments: true, admonitions: true, headingIds: true}Compatibility options to make it easier to upgrade to Docusaurus v3+.
remarkRehypeOptionsobjectundefinedMakes it possible to pass custom remark-rehype options.
+

customFields

+

Docusaurus guards docusaurus.config.js from unknown fields. To add a custom field, define it on customFields.

+
    +
  • Type: Object
  • +
+
docusaurus.config.js
export default {
customFields: {
admin: 'endi',
superman: 'lol',
},
};
+

Attempting to add unknown fields in the config will lead to errors during build time:

+
Error: The field(s) 'foo', 'bar' are not recognized in docusaurus.config.js
+

staticDirectories

+

An array of paths, relative to the site's directory or absolute. Files under these paths will be copied to the build output as-is.

+
    +
  • Type: string[]
  • +
+

Example:

+
docusaurus.config.js
export default {
staticDirectories: ['static'],
};
+

headTags

+

An array of tags that will be inserted in the HTML <head>. The values must be objects that contain two properties; tagName and attributes. tagName must be a string that determines the tag being created; eg "link". attributes must be an attribute-value map.

+
    +
  • Type: { tagName: string; attributes: Object; }[]
  • +
+

Example:

+
docusaurus.config.js
export default {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'icon',
href: '/img/docusaurus.png',
},
},
],
};
+

This would become <link rel="icon" href="img/docusaurus.png" /> in the generated HTML.

+

scripts

+

An array of scripts to load. The values can be either strings or plain objects of attribute-value maps. The <script> tags will be inserted in the HTML <head>. If you use a plain object, the only required attribute is src, and any other attributes are permitted (each one should have boolean/string values).

+

Note that <script> added here are render-blocking, so you might want to add async: true/defer: true to the objects.

+
    +
  • Type: (string | Object)[]
  • +
+

Example:

+
docusaurus.config.js
export default {
scripts: [
// String format.
'https://docusaurus.io/script.js',
// Object format.
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js',
async: true,
},
],
};
+

stylesheets

+

An array of CSS sources to load. The values can be either strings or plain objects of attribute-value maps. The <link> tags will be inserted in the HTML <head>. If you use an object, the only required attribute is href, and any other attributes are permitted (each one should have boolean/string values).

+
    +
  • Type: (string | Object)[]
  • +
+

Example:

+
docusaurus.config.js
export default {
stylesheets: [
// String format.
'https://docusaurus.io/style.css',
// Object format.
{
href: 'http://mydomain.com/style.css',
},
],
};
+
info

By default, the <link> tags will have rel="stylesheet", but you can explicitly add a custom rel value to inject any kind of <link> tag, not necessarily stylesheets.

+

clientModules

+

An array of client modules to load globally on your site.

+

Example:

+
docusaurus.config.js
export default {
clientModules: ['./mySiteGlobalJs.js', './mySiteGlobalCss.css'],
};
+

ssrTemplate

+

An HTML template written in Eta's syntax that will be used to render your application. This can be used to set custom attributes on the body tags, additional meta tags, customize the viewport, etc. Please note that Docusaurus will rely on the template to be correctly structured in order to function properly, once you do customize it, you will have to make sure that your template is compliant with the requirements from upstream.

+
    +
  • Type: string
  • +
+

Example:

+
docusaurus.config.js
export default {
ssrTemplate: `<!DOCTYPE html>
<html <%~ it.htmlAttributes %>>
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v<%= it.version %>">
<% it.metaAttributes.forEach((metaAttribute) => { %>
<%~ metaAttribute %>
<% }); %>
<%~ it.headTags %>
<% it.stylesheets.forEach((stylesheet) => { %>
<link rel="stylesheet" href="<%= it.baseUrl %><%= stylesheet %>" />
<% }); %>
<% it.scripts.forEach((script) => { %>
<link rel="preload" href="<%= it.baseUrl %><%= script %>" as="script">
<% }); %>
</head>
<body <%~ it.bodyAttributes %>>
<%~ it.preBodyTags %>
<div id="__docusaurus">
<%~ it.appHtml %>
</div>
<% it.scripts.forEach((script) => { %>
<script src="<%= it.baseUrl %><%= script %>"></script>
<% }); %>
<%~ it.postBodyTags %>
</body>
</html>`,
};
+

titleDelimiter

+
    +
  • Type: string
  • +
+

Will be used as title delimiter in the generated <title> tag.

+

Example:

+
docusaurus.config.js
export default {
titleDelimiter: '🦖', // Defaults to `|`
};
+

baseUrlIssueBanner

+
    +
  • Type: boolean
  • +
+

When enabled, will show a banner in case your site can't load its CSS or JavaScript files, which is a very common issue, often related to a wrong baseUrl in site config.

+

Example:

+
docusaurus.config.js
export default {
baseUrlIssueBanner: true, // Defaults to `true`
};
+

A sample base URL issue banner. The style is very raw since the stylesheets failed to load. The text says &quot;Your Docusaurus site did not load properly... Current configured baseUrl = / (default value); We suggest trying baseUrl = /build/

+
warning

This banner needs to inline CSS / JS in case all asset loading fails due to wrong base URL.

If you have a strict Content Security Policy, you should rather disable it.

+ + \ No newline at end of file diff --git a/docs/api/docusaurus-config.html.html b/docs/api/docusaurus-config.html.html new file mode 100644 index 0000000000..13da0a35ce --- /dev/null +++ b/docs/api/docusaurus-config.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin.html b/docs/api/misc/@docusaurus/eslint-plugin.html new file mode 100644 index 0000000000..cc256efa4e --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin.html @@ -0,0 +1,80 @@ + + + + + +📦 eslint-plugin | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 eslint-plugin

+

ESLint is a tool that statically analyzes your code and reports problems or suggests best practices through editor hints and command line. Docusaurus provides an ESLint plugin to enforce best Docusaurus practices.

+

Installation

+
npm install --save-dev @docusaurus/eslint-plugin
+

Usage

+ +

Add plugin:@docusaurus/recommended to the extends section of your .eslintrc configuration file:

+
.eslintrc
{
"extends": ["plugin:@docusaurus/recommended"]
}
+

This will enable the @docusaurus eslint plugin and use the recommended config. See Supported rules below for a list of rules that this will enable.

+

Manual config

+

For more fine-grained control, you can also enable the plugin manually and configure the rules you want to use directly:

+
.eslintrc
{
"plugins": ["@docusaurus"],
"rules": {
"@docusaurus/string-literal-i18n-messages": "error",
"@docusaurus/no-untranslated-text": "warn"
}
}
+

Supported configs

+
    +
  • Recommended: recommended rule set for most Docusaurus sites that should be extended from.
  • +
  • All: all rules enabled. This will change between minor versions, so you should not use this if you want to avoid unexpected breaking changes.
  • +
+

Supported rules

+
NameDescription
@docusaurus/no-untranslated-textEnforce text labels in JSX to be wrapped by translate calls
@docusaurus/string-literal-i18n-messagesEnforce translate APIs to be called on plain text labels
@docusaurus/no-html-linksEnsures @docusaurus/Link is used instead of <a> tags
@docusaurus/prefer-docusaurus-headingEnsures @theme/Heading is used instead of <hn> tags for headings
+

✅ = recommended

+

Example configuration

+

Here's an example configuration:

+
.eslintrc.js
module.exports = {
extends: ['plugin:@docusaurus/recommended'],
rules: {
'@docusaurus/no-untranslated-text': [
'warn',
{ignoredStrings: ['·', '—', '×']},
],
},
};
+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin.html.html b/docs/api/misc/@docusaurus/eslint-plugin.html.html new file mode 100644 index 0000000000..5e45b14c64 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html b/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html new file mode 100644 index 0000000000..47f4919e4c --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html @@ -0,0 +1,69 @@ + + + + + +no-html-links | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

no-html-links

+ +

Ensure that the Docusaurus <Link> component is used instead of <a> tags.

+

The <Link> component has prefetching and preloading built-in. It also does build-time broken link detection, and helps Docusaurus understand your site's structure better.

+

Rule Details

+

Examples of incorrect code for this rule:

+
<a href="/page">go to page!</a>

<a href="https://twitter.com/docusaurus" target="_blank">Twitter</a>
+

Examples of correct code for this rule:

+
import Link from '@docusaurus/Link'

<Link to="/page">go to page!</Link>

<Link to="https://twitter.com/docusaurus">Twitter</Link>
+

Rule Configuration

+

Accepted fields:

+
OptionTypeDefaultDescription
ignoreFullyResolvedbooleanfalseSet to true will not report any <a> tags with absolute URLs including a protocol.
+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html.html b/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html.html new file mode 100644 index 0000000000..35810541d0 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html b/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html new file mode 100644 index 0000000000..2b47319241 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html @@ -0,0 +1,76 @@ + + + + + +no-untranslated-text | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

no-untranslated-text

+ +

Enforce text labels in JSX to be wrapped by translate calls.

+

When the i18n feature is used, this rule ensures that all labels appearing on the website are translatable, so no string accidentally slips through untranslated.

+

Rule Details

+

Examples of incorrect code for this rule:

+
// Hello World is not translated
<Component>Hello World</Component>
+

Examples of correct code for this rule:

+
// Hello World is translated
<Component>
<Translate>Hello World</Translate>
</Component>
+

Rule Configuration

+

Accepted fields:

+
OptionTypeDefaultDescription
ignoredStringsstring[][]Text labels that only contain strings in this list will not be reported.
+

When Not To Use It

+

If you're not using the i18n feature, you can disable this rule. You can also disable this rule where the text is not supposed to be translated.

+

Further Reading

+
+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html.html b/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html.html new file mode 100644 index 0000000000..c7d23d2524 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html b/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html new file mode 100644 index 0000000000..2de4631ee8 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html @@ -0,0 +1,64 @@ + + + + + +prefer-docusaurus-heading | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

prefer-docusaurus-heading

+

Ensures that the @theme/Heading theme component provided by Docusaurus theme-classic is used instead of <hn> tags for headings.

+

Rule Details

+

Examples of incorrect code for this rule:

+
<h1>This is heading 1</h1>

<h2>This is heading 2</h2>

<h3>This is heading 3</h3>
+

Examples of correct code for this rule:

+
import Heading from '@theme/Heading'

<Heading as='h1'>This is heading 1</Heading>

<Heading as='h2'>This is heading 2</Heading>

<Heading as='h3'>This is heading 3</Heading>
+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html.html b/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html.html new file mode 100644 index 0000000000..681009ec57 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html b/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html new file mode 100644 index 0000000000..7f1f6a81fa --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html @@ -0,0 +1,72 @@ + + + + + +string-literal-i18n-messages | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

string-literal-i18n-messages

+

Enforce translate APIs to be called on plain text labels.

+

Docusaurus offers the docusaurus write-translations API, which statically extracts the text labels marked as translatable. Dynamic values used in <Translate> or translate() calls will fail to be extracted. This rule will ensure that all translate calls are statically extractable.

+

Rule Details

+

Examples of incorrect code for this rule:

+
const text = 'Some text to be translated'

// Invalid <Translate> child
<Translate>{text}</Translate>

// Invalid message attribute
translate({message: text})
+

Examples of correct code for this rule:

+
// Valid <Translate> child
<Translate>Some text to be translated</Translate>

// Valid message attribute
translate({message: 'Some text to be translated'})

// Valid <Translate> child using values object as prop
<Translate values={{firstName: 'Sébastien'}}>
{'Welcome, {firstName}! How are you?'}
</Translate>

// Valid message attribute using values object as second argument
translate({message: 'The logo of site {siteName}'}, {siteName: 'Docusaurus'})
+

When Not To Use It

+

If you're not using the i18n feature, you can disable this rule.

+

Further Reading

+
+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html.html b/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html.html new file mode 100644 index 0000000000..6513136002 --- /dev/null +++ b/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/logger.html b/docs/api/misc/@docusaurus/logger.html new file mode 100644 index 0000000000..fad184748d --- /dev/null +++ b/docs/api/misc/@docusaurus/logger.html @@ -0,0 +1,108 @@ + + + + + +📦 logger | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 logger

+

An encapsulated logger for semantically formatting console messages.

+

Authors of packages in the Docusaurus ecosystem are encouraged to use this package to provide unified log formats.

+

APIs

+

It exports a single object as default export: logger. logger has the following properties:

+
    +
  • Some useful colors. +
      +
    • red
    • +
    • yellow
    • +
    • green
    • +
    • bold
    • +
    • dim
    • +
    +
  • +
  • Formatters. These functions all have the signature (msg: unknown) => string. Note that their implementations are not guaranteed. You should only care about their semantics. +
      +
    • path: formats a file path.
    • +
    • url: formats a URL.
    • +
    • name: formats an identifier.
    • +
    • code: formats a code snippet.
    • +
    • subdue: subdues the text.
    • +
    • num: formats a number.
    • +
    +
  • +
  • The interpolate function. It is a template literal tag. The syntax can be found below.
  • +
  • Logging functions. All logging functions can both be used as normal functions (similar to the console.log family, but only accepts one parameter) or template literal tags. +
      +
    • info: prints information.
    • +
    • warn: prints a warning that should be paid attention to.
    • +
    • error: prints an error (not necessarily halting the program) that signals significant problems.
    • +
    • success: prints a success message.
    • +
    +
  • +
  • The report function. It takes a ReportingSeverity value (ignore, log, warn, throw) and reports a message according to the severity.
  • +
+
A word on the error formatter

Beware that an error message, even when it doesn't hang the program, is likely going to cause confusion. When users inspect logs and find an [ERROR], even when the build succeeds, they will assume something is going wrong. Use it sparingly.

Docusaurus only uses logger.error when printing messages immediately before throwing an error, or when user has set the reporting severity of onBrokenLink, etc. to "error".

In addition, warn and error will color the entire message for better attention. If you are printing large blocks of help text about an error, better use logger.info.

+

Using the template literal tag

+

The template literal tag evaluates the template and expressions embedded. interpolate returns a new string, while other logging functions prints it. Below is a typical usage:

+
import logger from '@docusaurus/logger';

logger.info`Hello name=${name}! You have number=${money} dollars. Here are the ${
items.length > 1 ? 'items' : 'item'
} on the shelf: ${items}
To buy anything, enter code=${'buy x'} where code=${'x'} is the item's name; to quit, press code=${'Ctrl + C'}.`;
+

An embedded expression is optionally preceded by a flag in the form [a-z]+= (a few lowercase letters, followed by an equals sign, directly preceding the embedded expression). If the expression is not preceded by any flag, it's printed out as-is. Otherwise, it's formatted with one of the formatters:

+
    +
  • path=: path
  • +
  • url=: url
  • +
  • name=: name
  • +
  • code=: code
  • +
  • subdue=: subdue
  • +
  • number=: num
  • +
+

If the expression is an array, it's formatted by `\n- ${array.join('\n- ')}\n` (note it automatically gets a leading line end). Each member is formatted by itself and the bullet is not formatted. So you would see the above message printed as:

+

Some text output in the terminal, containing array, code, name, and number formatting

+ + \ No newline at end of file diff --git a/docs/api/misc/@docusaurus/logger.html.html b/docs/api/misc/@docusaurus/logger.html.html new file mode 100644 index 0000000000..63cf35404d --- /dev/null +++ b/docs/api/misc/@docusaurus/logger.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/misc/create-docusaurus.html b/docs/api/misc/create-docusaurus.html new file mode 100644 index 0000000000..42a4902777 --- /dev/null +++ b/docs/api/misc/create-docusaurus.html @@ -0,0 +1,91 @@ + + + + + +📦 create-docusaurus | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 create-docusaurus

+

A scaffolding utility to help you instantly set up a functional Docusaurus app.

+

Usage

+
npx create-docusaurus@latest [name] [template] [rootDir]
+

The name argument will be used as the site's path as well as the name field in the created app's package.json. It can be an absolute path, or a path relative to rootDir.

+

The template argument can be one of the following:

+
    +
  • classic: Uses the classic template (recommended)
  • +
  • facebook: Uses the Facebook/Meta template, which contains some Meta-specific setup
  • +
  • A git repo URL (beginning with https:// or git@), which can be cloned to the destination
  • +
  • A local file path relative to CWD, which contains the files to be copied to destination
  • +
+

The rootDir will be used to resolve the absolute path to the site directory. The default is CWD.

+
warning

This command should be preferably used in an interactive shell so all features are available.

+

Options

+

-t, --typescript

+

Used when the template argument is a recognized name. Currently, only classic provides a TypeScript variant.

+

-g, --git-strategy

+

Used when the template argument is a git repo. It needs to be one of:

+
    +
  • deep: preserves full git history
  • +
  • shallow: clones with --depth=1
  • +
  • copy: does a shallow clone, but does not create a git repo
  • +
  • custom: enter your custom git clone command. We will prompt you for it. You can write something like git clone --depth 10, and we will append the repository URL and destination directory.
  • +
+

-p, --package-manager

+

Value should be one of npm, yarn, pnpm, or bun. If it's not explicitly provided, Docusaurus will infer one based on:

+
    +
  • The lockfile already present in the CWD (e.g. if you are setting up website in an existing project)
  • +
  • The command used to invoke create-docusaurus (e.g. npm init, npx, yarn create, bunx, etc.)
  • +
  • Interactive prompting, in case all heuristics are not present
  • +
+

-s, --skip-install

+

If provided, Docusaurus will not automatically install dependencies after creating the app. The --package-manager option is only useful when you are actually installing dependencies.

+ + \ No newline at end of file diff --git a/docs/api/misc/create-docusaurus.html.html b/docs/api/misc/create-docusaurus.html.html new file mode 100644 index 0000000000..4f0c1240eb --- /dev/null +++ b/docs/api/misc/create-docusaurus.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugin-methods.html b/docs/api/plugin-methods.html new file mode 100644 index 0000000000..c3f0219b34 --- /dev/null +++ b/docs/api/plugin-methods.html @@ -0,0 +1,77 @@ + + + + + +Plugin Method References | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Plugin Method References

+
warning

This section is a work in progress. Anchor links or even URLs are not guaranteed to be stable.

+

Plugin APIs are shared by themes and plugins—themes are loaded just like plugins.

+

Plugin module

+

Every plugin is imported as a module. The module is expected to have the following members:

+
    +
  • A default export: the constructor function for the plugin.
  • +
  • Named exports: the static methods called before plugins are initialized.
  • +
+

Plugin constructor

+

The plugin module's default export is a constructor function with the signature (context: LoadContext, options: PluginOptions) => Plugin | Promise<Plugin>.

+

context

+

context is plugin-agnostic, and the same object will be passed into all plugins used for a Docusaurus website. The context object contains the following fields:

+
type LoadContext = {
siteDir: string;
generatedFilesDir: string;
siteConfig: DocusaurusConfig;
outDir: string;
baseUrl: string;
};
+

options

+

options are the second optional parameter when the plugins are used. options are plugin-specific and are specified by users when they use them in docusaurus.config.js. If there's a validateOptions function exported, the options will be validated and normalized beforehand.

+

Alternatively, if a preset contains the plugin, the preset will then be in charge of passing the correct options into the plugin. It is up to the individual plugin to define what options it takes.

+

Example

+

Here's a mental model for a presumptuous plugin implementation.

+
// A JavaScript function that returns an object.
// `context` is provided by Docusaurus. Example: siteConfig can be accessed from context.
// `opts` is the user-defined options.
export default async function myPlugin(context, opts) {
return {
// A compulsory field used as the namespace for directories to cache
// the intermediate data for each plugin.
// If you're writing your own local plugin, you will want it to
// be unique in order not to potentially conflict with imported plugins.
// A good way will be to add your own project name within.
name: 'docusaurus-my-project-cool-plugin',

async loadContent() {
// The loadContent hook is executed after siteConfig and env has been loaded.
// You can return a JavaScript object that will be passed to contentLoaded hook.
},

async contentLoaded({content, actions}) {
// The contentLoaded hook is done after loadContent hook is done.
// `actions` are set of functional API provided by Docusaurus (e.g. addRoute)
},

async postBuild(props) {
// After docusaurus <build> finish.
},

// TODO
async postStart(props) {
// docusaurus <start> finish
},

// TODO
afterDevServer(app, server) {
// https://webpack.js.org/configuration/dev-server/#devserverbefore
},

// TODO
beforeDevServer(app, server) {
// https://webpack.js.org/configuration/dev-server/#devserverafter
},

configureWebpack(config, isServer, utils, content) {
// Modify internal webpack config. If returned value is an Object, it
// will be merged into the final config using webpack-merge;
// If the returned value is a function, it will receive the config as the 1st argument and an isServer flag as the 2nd argument.
},

getPathsToWatch() {
// Paths to watch.
},

getThemePath() {
// Returns the path to the directory where the theme components can
// be found.
},

getClientModules() {
// Return an array of paths to the modules that are to be imported
// in the client bundle. These modules are imported globally before
// React even renders the initial UI.
},

extendCli(cli) {
// Register an extra command to enhance the CLI of Docusaurus
},

injectHtmlTags({content}) {
// Inject head and/or body HTML tags.
},

async getTranslationFiles({content}) {
// Return translation files
},

translateContent({content, translationFiles}) {
// translate the plugin content here
},

translateThemeConfig({themeConfig, translationFiles}) {
// translate the site themeConfig here
},

async getDefaultCodeTranslationMessages() {
// return default theme translations here
},
};
}

export function validateOptions({options, validate}) {
const validatedOptions = validate(myValidationSchema, options);
return validatedOptions;
}

export function validateThemeConfig({themeConfig, validate}) {
const validatedThemeConfig = validate(myValidationSchema, options);
return validatedThemeConfig;
}
+ + \ No newline at end of file diff --git a/docs/api/plugin-methods.html.html b/docs/api/plugin-methods.html.html new file mode 100644 index 0000000000..adb1d8c686 --- /dev/null +++ b/docs/api/plugin-methods.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugin-methods/extend-infrastructure.html b/docs/api/plugin-methods/extend-infrastructure.html new file mode 100644 index 0000000000..90330d099f --- /dev/null +++ b/docs/api/plugin-methods/extend-infrastructure.html @@ -0,0 +1,82 @@ + + + + + +Extending infrastructure | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Extending infrastructure

+

Docusaurus has some infrastructure like hot reloading, CLI, and swizzling, that can be extended by external plugins.

+

getPathsToWatch()

+

Specifies the paths to watch for plugins and themes. The paths are watched by the dev server so that the plugin lifecycles are reloaded when contents in the watched paths change. Note that the plugins and themes modules are initially called with context and options from Node, which you may use to find the necessary directory information about the site.

+

Use this for files that are consumed server-side, because theme files are automatically watched by Webpack dev server.

+

Example:

+
docusaurus-plugin/src/index.js
import path from 'path';

export default function (context, options) {
return {
name: 'docusaurus-plugin',
getPathsToWatch() {
const contentPath = path.resolve(context.siteDir, options.path);
return [`${contentPath}/**/*.{ts,tsx}`];
},
};
}
+

extendCli(cli)

+

Register an extra command to enhance the CLI of Docusaurus. cli is a commander object.

+
warning

The commander version matters! We use commander v5, and make sure you are referring to the right version documentation for available APIs.

+

Example:

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'docusaurus-plugin',
extendCli(cli) {
cli
.command('roll')
.description('Roll a random number between 1 and 1000')
.action(() => {
console.log(Math.floor(Math.random() * 1000 + 1));
});
},
};
}
+

getThemePath()

+

Returns the path to the directory where the theme components can be found. When your users call swizzle, getThemePath is called and its returned path is used to find your theme components. Relative paths are resolved against the folder containing the entry point.

+

For example, your getThemePath can be:

+
my-theme/src/index.js
export default function (context, options) {
return {
name: 'my-theme',
getThemePath() {
return './theme';
},
};
}
+

getTypeScriptThemePath()

+

Similar to getThemePath(), it should return the path to the directory where the source code of TypeScript theme components can be found. This path is purely for swizzling TypeScript theme components, and theme components under this path will not be resolved by Webpack. Therefore, it is not a replacement for getThemePath(). Typically, you can make the path returned by getTypeScriptThemePath() be your source directory, and make the path returned by getThemePath() be the compiled JavaScript output.

+
tip

For TypeScript theme authors: you are strongly advised to make your compiled output as human-readable as possible. Only strip type annotations and don't transpile any syntaxes, because they will be handled by Webpack's Babel loader based on the targeted browser versions.

You should also format these files with Prettier. Remember—JS files can and will be directly consumed by your users.

+

Example:

+
my-theme/src/index.js
export default function (context, options) {
return {
name: 'my-theme',
getThemePath() {
// Where compiled JavaScript output lives
return '../lib/theme';
},
getTypeScriptThemePath() {
// Where TypeScript source code lives
return '../src/theme';
},
};
}
+

getSwizzleComponentList()

+

This is a static method, not attached to any plugin instance.

+

Returns a list of stable components that are considered safe for swizzling. These components will be swizzlable without --danger. All components are considered unstable by default. If an empty array is returned, all components are considered unstable. If undefined is returned, all components are considered stable.

+
my-theme/src/index.js
export function getSwizzleComponentList() {
return [
'CodeBlock',
'DocSidebar',
'Footer',
'NotFound',
'SearchBar',
'hooks/useTheme',
'prism-include-languages',
];
}
+ + \ No newline at end of file diff --git a/docs/api/plugin-methods/extend-infrastructure.html.html b/docs/api/plugin-methods/extend-infrastructure.html.html new file mode 100644 index 0000000000..e111e7478f --- /dev/null +++ b/docs/api/plugin-methods/extend-infrastructure.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugin-methods/i18n-lifecycles.html b/docs/api/plugin-methods/i18n-lifecycles.html new file mode 100644 index 0000000000..5fc3bf01bd --- /dev/null +++ b/docs/api/plugin-methods/i18n-lifecycles.html @@ -0,0 +1,85 @@ + + + + + +I18n lifecycles | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

I18n lifecycles

+

Plugins use these lifecycles to load i18n-related data.

+

getTranslationFiles({content})

+

Plugins declare the JSON translation files they want to use.

+

Returns translation files {path: string, content: ChromeI18nJSON}:

+
    +
  • path: relative to the plugin localized folder i18n/[locale]/[pluginName]. Extension .json should be omitted to remain generic.
  • +
  • content: using the Chrome i18n JSON format.
  • +
+

These files will be written by the write-translations CLI to the plugin i18n subfolder, and will be read in the appropriate locale before calling translateContent() and translateThemeConfig()

+

Example:

+
my-plugin.js
export default function (context, options) {
return {
name: 'my-plugin',
async getTranslationFiles({content}) {
return [
{
path: 'sidebar-labels',
content: {
someSidebarLabel: {
message: 'Some Sidebar Label',
description: 'A label used in my plugin in the sidebar',
},
someLabelFromContent: content.myLabel,
},
},
];
},
};
}
+

translateContent({content,translationFiles})

+

Translate the plugin content, using the localized translation files.

+

Returns the localized plugin content.

+

The contentLoaded() lifecycle will be called with the localized plugin content returned by translateContent().

+

Example:

+
my-plugin.js
export default function (context, options) {
return {
name: 'my-plugin',
translateContent({content, translationFiles}) {
const myTranslationFile = translationFiles.find(
(f) => f.path === 'myTranslationFile',
);
return {
...content,
someContentLabel: myTranslationFile.someContentLabel.message,
};
},
};
}
+

translateThemeConfig({themeConfig,translationFiles})

+

Translate the site themeConfig labels, using the localized translation files.

+

Returns the localized themeConfig.

+

Example:

+
my-plugin.js
export default function (context, options) {
return {
name: 'my-theme',
translateThemeConfig({themeConfig, translationFiles}) {
const myTranslationFile = translationFiles.find(
(f) => f.path === 'myTranslationFile',
);
return {
...themeConfig,
someThemeConfigLabel: myTranslationFile.someThemeConfigLabel.message,
};
},
};
}
+

async getDefaultCodeTranslationMessages()

+

Themes using the <Translate> API can provide default code translation messages.

+

It should return messages in Record<string, string>, where keys are translation IDs and values are messages (without the description) localized using the site's current locale.

+

Example:

+
my-plugin.js
export default function (context, options) {
return {
name: 'my-theme',
async getDefaultCodeTranslationMessages() {
return readJsonFile(`${context.i18n.currentLocale}.json`);
},
};
}
+ + \ No newline at end of file diff --git a/docs/api/plugin-methods/i18n-lifecycles.html.html b/docs/api/plugin-methods/i18n-lifecycles.html.html new file mode 100644 index 0000000000..49ddfdcfb6 --- /dev/null +++ b/docs/api/plugin-methods/i18n-lifecycles.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugin-methods/lifecycle-apis.html b/docs/api/plugin-methods/lifecycle-apis.html new file mode 100644 index 0000000000..80e7d143a8 --- /dev/null +++ b/docs/api/plugin-methods/lifecycle-apis.html @@ -0,0 +1,138 @@ + + + + + +Lifecycle APIs | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Lifecycle APIs

+

During the build, plugins are loaded in parallel to fetch their own contents and render them to routes. Plugins may also configure webpack or post-process the generated files.

+

async loadContent()

+

Plugins should use this lifecycle to fetch from data sources (filesystem, remote API, headless CMS, etc.) or do some server processing. The return value is the content it needs.

+

For example, this plugin below returns a random integer between 1 and 10 as content.

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'docusaurus-plugin',
async loadContent() {
return 1 + Math.floor(Math.random() * 10);
},
};
}
+

async contentLoaded({content, actions})

+

The data that was loaded in loadContent will be consumed in contentLoaded. It can be rendered to routes, registered as global data, etc.

+

content

+

contentLoaded will be called after loadContent is done. The return value of loadContent() will be passed to contentLoaded as content.

+

actions

+

actions contain three functions:

+

addRoute(config: RouteConfig): void

+

Create a route to add to the website.

+
export type RouteConfig = {
/**
* With leading slash. Trailing slash will be normalized by config.
*/
path: string;
/**
* Component used to render this route, a path that the bundler can `require`.
*/
component: string;
/**
* Props. Each entry should be `[propName]: pathToPropModule` (created with
* `createData`)
*/
modules?: RouteModules;
/**
* The route context will wrap the `component`. Use `useRouteContext` to
* retrieve what's declared here. Note that all custom route context declared
* here will be namespaced under {@link RouteContext.data}.
*/
context?: RouteModules;
/**
* Nested routes config, useful for "layout routes" having subroutes.
*/
routes?: RouteConfig[];
/**
* React router config option: `exact` routes would not match subroutes.
*/
exact?: boolean;
/**
* React router config option: `strict` routes are sensitive to the presence
* of a trailing slash.
*/
strict?: boolean;
/**
* Used to sort routes.
* Higher-priority routes will be matched first.
*/
priority?: number;
/**
* Optional route metadata
*/
metadata?: RouteMetadata;
/**
* Extra props; will be available on the client side.
*/
[propName: string]: unknown;
};

/**
* Plugin authors can assign extra metadata to the created routes
* It is only available on the Node.js side, and not sent to the browser
* Optional: plugin authors are encouraged but not required to provide it
*
* Some plugins might use this data to provide additional features.
* This is the case of the sitemap plugin to provide support for "lastmod".
* See also: https://github.com/facebook/docusaurus/pull/9954
*/
export type RouteMetadata = {
/**
* The source code file path that led to the creation of the current route
* In official content plugins, this is usually a Markdown or React file
* This path is expected to be relative to the site directory
*/
sourceFilePath?: string;
/**
* The last updated date of this route
* This is generally read from the Git history of the sourceFilePath
* but can also be provided through other means (usually front matter)
*
* This has notably been introduced for adding "lastmod" support to the
* sitemap plugin, see https://github.com/facebook/docusaurus/pull/9954
*/
lastUpdatedAt?: number;
};

type RouteModules = {
[module: string]: Module | RouteModules | RouteModules[];
};

type Module =
| {
path: string;
__import?: boolean;
query?: ParsedUrlQueryInput;
}
| string;
+

createData(name: string, data: any): Promise<string>

+

A declarative callback to create static data (generally JSON or string) which can later be provided to your routes as props. Takes the file name and data to be stored, and returns the actual data file's path.

+

For example, this plugin below creates a /friends page which displays Your friends are: Yangshun, Sebastien:

+
website/src/components/Friends.js
import React from 'react';

export default function FriendsComponent({friends}) {
return <div>Your friends are {friends.join(',')}</div>;
}
+
docusaurus-friends-plugin/src/index.js
export default function friendsPlugin(context, options) {
return {
name: 'docusaurus-friends-plugin',
async contentLoaded({content, actions}) {
const {createData, addRoute} = actions;
// Create friends.json
const friends = ['Yangshun', 'Sebastien'];
const friendsJsonPath = await createData(
'friends.json',
JSON.stringify(friends),
);

// Add the '/friends' routes, and ensure it receives the friends props
addRoute({
path: '/friends',
component: '@site/src/components/Friends.js',
modules: {
// propName -> JSON file path
friends: friendsJsonPath,
},
exact: true,
});
},
};
}
+

setGlobalData(data: any): void

+

This function permits one to create some global plugin data that can be read from any page, including the pages created by other plugins, and your theme layout.

+

This data becomes accessible to your client-side/theme code through the useGlobalData and usePluginData hooks.

+
warning

Global data is... global: its size affects the loading time of all pages of your site, so try to keep it small. Prefer createData and page-specific data whenever possible.

+

For example, this plugin below creates a /friends page which displays Your friends are: Yangshun, Sebastien:

+
website/src/components/Friends.js
import React from 'react';
import {usePluginData} from '@docusaurus/useGlobalData';

export default function FriendsComponent() {
const {friends} = usePluginData('docusaurus-friends-plugin');
return <div>Your friends are {friends.join(',')}</div>;
}
+
docusaurus-friends-plugin/src/index.js
export default function friendsPlugin(context, options) {
return {
name: 'docusaurus-friends-plugin',
async contentLoaded({content, actions}) {
const {setGlobalData, addRoute} = actions;
// Create friends global data
setGlobalData({friends: ['Yangshun', 'Sebastien']});

// Add the '/friends' routes
addRoute({
path: '/friends',
component: '@site/src/components/Friends.js',
exact: true,
});
},
};
}
+

configureWebpack(config, isServer, utils, content)

+

Modifies the internal webpack config. If the return value is a JavaScript object, it will be merged into the final config using webpack-merge. If it is a function, it will be called and receive config as the first argument and an isServer flag as the second argument.

+
warning

The API of configureWebpack will be modified in the future to accept an object (configureWebpack({config, isServer, utils, content}))

+

config

+

configureWebpack is called with config generated according to client/server build. You may treat this as the base config to be merged with.

+

isServer

+

configureWebpack will be called both in server build and in client build. The server build receives true and the client build receives false as isServer.

+

utils

+

configureWebpack also receives an util object:

+
    +
  • getStyleLoaders(isServer: boolean, cssOptions: {[key: string]: any}): Loader[]
  • +
  • getJSLoader(isServer: boolean, cacheOptions?: {}): Loader | null
  • +
+

You may use them to return your webpack configuration conditionally.

+

For example, this plugin below modify the webpack config to transpile .foo files.

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'custom-docusaurus-plugin',
configureWebpack(config, isServer, utils) {
const {getJSLoader} = utils;
return {
module: {
rules: [
{
test: /\.foo$/,
use: [getJSLoader(isServer), 'my-custom-webpack-loader'],
},
],
},
};
},
};
}
+

content

+

configureWebpack will be called both with the content loaded by the plugin.

+

Merge strategy

+

We merge the Webpack configuration parts of plugins into the global Webpack config using webpack-merge.

+

It is possible to specify the merge strategy. For example, if you want a webpack rule to be prepended instead of appended:

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'custom-docusaurus-plugin',
configureWebpack(config, isServer, utils) {
return {
mergeStrategy: {'module.rules': 'prepend'},
module: {rules: [myRuleToPrepend]},
};
},
};
}
+

Read the webpack-merge strategy doc for more details.

+

Configuring dev server

+

The dev server can be configured through returning a devServer field.

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'custom-docusaurus-plugin',
configureWebpack(config, isServer, utils) {
return {
devServer: {
open: '/docs', // Opens localhost:3000/docs instead of localhost:3000/
},
};
},
};
}
+

configurePostCss(options)

+

Modifies postcssOptions of postcss-loader during the generation of the client bundle.

+

Should return the mutated postcssOptions.

+

By default, postcssOptions looks like this:

+
const postcssOptions = {
ident: 'postcss',
plugins: [require('autoprefixer')],
};
+

Example:

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'docusaurus-plugin',
configurePostCss(postcssOptions) {
// Appends new PostCSS plugin.
postcssOptions.plugins.push(require('postcss-import'));
return postcssOptions;
},
};
}
+

postBuild(props)

+

Called when a (production) build finishes.

+
interface Props {
siteDir: string;
generatedFilesDir: string;
siteConfig: DocusaurusConfig;
outDir: string;
baseUrl: string;
headTags: string;
preBodyTags: string;
postBodyTags: string;
routesPaths: string[];
plugins: Plugin<any>[];
content: Content;
}
+

Example:

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'docusaurus-plugin',
async postBuild({siteConfig = {}, routesPaths = [], outDir}) {
// Print out to console all the rendered routes.
routesPaths.map((route) => {
console.log(route);
});
},
};
}
+

injectHtmlTags({content})

+

Inject head and/or body HTML tags to Docusaurus generated HTML.

+

injectHtmlTags will be called both with the content loaded by the plugin.

+
function injectHtmlTags(): {
headTags?: HtmlTags;
preBodyTags?: HtmlTags;
postBodyTags?: HtmlTags;
};

type HtmlTags = string | HtmlTagObject | (string | HtmlTagObject)[];

type HtmlTagObject = {
/**
* Attributes of the HTML tag
* E.g. `{'disabled': true, 'value': 'demo', 'rel': 'preconnect'}`
*/
attributes?: {
[attributeName: string]: string | boolean;
};
/**
* The tag name e.g. `div`, `script`, `link`, `meta`
*/
tagName: string;
/**
* The inner HTML
*/
innerHTML?: string;
};
+

Example:

+
docusaurus-plugin/src/index.js
export default function (context, options) {
return {
name: 'docusaurus-plugin',
loadContent: async () => {
return {remoteHeadTags: await fetchHeadTagsFromAPI()};
},
injectHtmlTags({content}) {
return {
headTags: [
{
tagName: 'link',
attributes: {
rel: 'preconnect',
href: 'https://www.github.com',
},
},
...content.remoteHeadTags,
],
preBodyTags: [
{
tagName: 'script',
attributes: {
charset: 'utf-8',
src: '/noflash.js',
},
},
],
postBodyTags: [`<div> This is post body </div>`],
};
},
};
}
+

Tags will be added as follows:

+
    +
  • headTags will be inserted before the closing </head> tag after scripts added by config.
  • +
  • preBodyTags will be inserted after the opening <body> tag before any child elements.
  • +
  • postBodyTags will be inserted before the closing </body> tag after all child elements.
  • +
+

getClientModules()

+

Returns an array of paths to the client modules that are to be imported into the client bundle.

+

As an example, to make your theme load a customCss or customJs file path from options passed in by the user:

+
my-theme/src/index.js
export default function (context, options) {
const {customCss, customJs} = options || {};
return {
name: 'name-of-my-theme',
getClientModules() {
return [customCss, customJs];
},
};
}
+ + \ No newline at end of file diff --git a/docs/api/plugin-methods/lifecycle-apis.html.html b/docs/api/plugin-methods/lifecycle-apis.html.html new file mode 100644 index 0000000000..1d2910a654 --- /dev/null +++ b/docs/api/plugin-methods/lifecycle-apis.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugin-methods/static-methods.html b/docs/api/plugin-methods/static-methods.html new file mode 100644 index 0000000000..050bb3ab0a --- /dev/null +++ b/docs/api/plugin-methods/static-methods.html @@ -0,0 +1,77 @@ + + + + + +Static methods | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static methods

+

Static methods are not part of the plugin instance—they are attached to the constructor function. These methods are used to validate and normalize the plugin options and theme config, which are then used as constructor parameters to initialize the plugin instance.

+

validateOptions({options, validate})

+

Returns validated and normalized options for the plugin. This method is called before the plugin is initialized. You must return the options since they will be passed to the plugin during initialization.

+

options

+

validateOptions is called with options passed to plugin for validation and normalization.

+

validate

+

validateOptions is called with validate function which takes a Joi schema and options as the arguments, returns validated and normalized options. validate will automatically handle error and validation config.

+
tip

Joi is recommended for validation and normalization of options.

To avoid mixing Joi versions, use import {Joi} from '@docusaurus/utils-validation'

+

If you don't use Joi for validation you can throw an Error in case of invalid options and return options in case of success.

+
my-plugin/src/index.js
export default function myPlugin(context, options) {
return {
name: 'docusaurus-plugin',
// rest of methods
};
}

export function validateOptions({options, validate}) {
const validatedOptions = validate(myValidationSchema, options);
return validatedOptions;
}
+

validateThemeConfig({themeConfig, validate})

+

Return validated and normalized configuration for the theme.

+

themeConfig

+

validateThemeConfig is called with themeConfig provided in docusaurus.config.js for validation and normalization.

+

validate

+

validateThemeConfig is called with validate function which takes a Joi schema and themeConfig as the arguments, returns validated and normalized options. validate will automatically handle error and validation config.

+
tip

Joi is recommended for validation and normalization of theme config.

To avoid mixing Joi versions, use import {Joi} from '@docusaurus/utils-validation'

+

If you don't use Joi for validation you can throw an Error in case of invalid options.

+
my-theme/src/index.js
export default function myPlugin(context, options) {
return {
name: 'docusaurus-plugin',
// rest of methods
};
}

export function validateThemeConfig({themeConfig, validate}) {
const validatedThemeConfig = validate(myValidationSchema, options);
return validatedThemeConfig;
}
+ + \ No newline at end of file diff --git a/docs/api/plugin-methods/static-methods.html.html b/docs/api/plugin-methods/static-methods.html.html new file mode 100644 index 0000000000..39bdc7d6ac --- /dev/null +++ b/docs/api/plugin-methods/static-methods.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins.html b/docs/api/plugins.html new file mode 100644 index 0000000000..4e5a23933b --- /dev/null +++ b/docs/api/plugins.html @@ -0,0 +1,77 @@ + + + + + +Docusaurus plugins | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/docs/api/plugins.html.html b/docs/api/plugins.html.html new file mode 100644 index 0000000000..1b2397e668 --- /dev/null +++ b/docs/api/plugins.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-client-redirects.html b/docs/api/plugins/@docusaurus/plugin-client-redirects.html new file mode 100644 index 0000000000..c4062b3eaf --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-client-redirects.html @@ -0,0 +1,78 @@ + + + + + +📦 plugin-client-redirects | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-client-redirects

+ +

Docusaurus Plugin to generate client-side redirects.

+

This plugin will write additional HTML pages to your static site that redirect the user to your existing Docusaurus pages with JavaScript.

+
production only

This plugin is always inactive in development and only active in production because it works on the build output.

+
warning

It is better to use server-side redirects whenever possible.

Before using this plugin, you should look if your hosting provider doesn't offer this feature.

+

Installation

+
npm install --save @docusaurus/plugin-client-redirects
+

Configuration

+

Accepted fields:

+
OptionTypeDefaultDescription
fromExtensionsstring[][]The extensions to be removed from the route after redirecting.
toExtensionsstring[][]The extensions to be appended to the route after redirecting.
redirectsRedirectRule[][]The list of redirect rules.
createRedirectsCreateRedirectsFnundefinedA callback to create a redirect rule. Docusaurus query this callback against every path it has created, and use its return value to output more paths.
+
note

This plugin will also read the siteConfig.onDuplicateRoutes config to adjust its logging level when multiple files will be emitted to the same location.

+

Types

+

RedirectRule

+
type RedirectRule = {
to: string;
from: string | string[];
};
+
note

The idea of "from" and "to" is central in this plugin. "From" means a path that you want to create, i.e. an extra HTML file that will be written; "to" means a path to want to redirect to, usually a route that Docusaurus already knows about.

This is why you can have multiple "from" for the same "to": we will create multiple HTML files that all redirect to the same destination. On the other hand, one "from" can never have more than one "to": the written HTML file needs to have a determinate destination.

+

CreateRedirectsFn

+
// The parameter `path` is a route that Docusaurus has already created. It can
// be seen as the "to", and your return value is the "from". Returning a falsy
// value will not create any redirect pages for this particular path.
type CreateRedirectsFn = (path: string) => string[] | string | null | undefined;
+

Example configuration

+

Here's an example configuration:

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-client-redirects',
{
fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage
toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip (if latter exists)
redirects: [
// /docs/oldDoc -> /docs/newDoc
{
to: '/docs/newDoc',
from: '/docs/oldDoc',
},
// Redirect from multiple old paths to the new path
{
to: '/docs/newDoc2',
from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],
},
],
createRedirects(existingPath) {
if (existingPath.includes('/community')) {
// Redirect from /docs/team/X to /community/X and /docs/support/X to /community/X
return [
existingPath.replace('/community', '/docs/team'),
existingPath.replace('/community', '/docs/support'),
];
}
return undefined; // Return a falsy value: no redirect created
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-client-redirects.html.html b/docs/api/plugins/@docusaurus/plugin-client-redirects.html.html new file mode 100644 index 0000000000..4b9c43f32c --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-client-redirects.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-blog.html b/docs/api/plugins/@docusaurus/plugin-content-blog.html new file mode 100644 index 0000000000..27b8caa8ec --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-blog.html @@ -0,0 +1,101 @@ + + + + + +📦 plugin-content-blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-content-blog

+ +

Provides the Blog feature and is the default blog plugin for Docusaurus.

+
some features production only

The feed feature works by extracting the build output, and is only active in production.

+

Installation

+
npm install --save @docusaurus/plugin-content-blog
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
pathstring'blog'Path to the blog content directory on the file system, relative to site dir.
editUrlstring | EditUrlFnundefinedBase URL to edit your site. The final URL is computed by editUrl + relativePostPath. Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links.
editLocalizedFilesbooleanfalseThe edit URL will target the localized file, instead of the original unlocalized file. Ignored when editUrl is a function.
blogTitlestring'Blog'Blog page title for better SEO.
blogDescriptionstring'Blog'Blog page meta description for better SEO.
blogSidebarCountnumber | 'ALL'5Number of blog post elements to show in the blog sidebar. 'ALL' to show all blog posts; 0 to disable.
blogSidebarTitlestring'Recent posts'Title of the blog sidebar.
routeBasePathstring'blog'URL route for the blog section of your site. DO NOT include a trailing slash. Use / to put the blog at root path.
tagsBasePathstring'tags'URL route for the tags section of your blog. Will be appended to routeBasePath.
pageBasePathstring'page'URL route for the pages section of your blog. Will be appended to routeBasePath.
archiveBasePathstring | null'archive'URL route for the archive section of your blog. Will be appended to routeBasePath. DO NOT include a trailing slash. Use null to disable generation of archive.
includestring[]['**/*.{md,mdx}']Array of glob patterns matching Markdown files to be built, relative to the content path.
excludestring[]See example configurationArray of glob patterns matching Markdown files to be excluded. Serves as refinement based on the include option.
postsPerPagenumber | 'ALL'10Number of posts to show per page in the listing page. Use 'ALL' to display all posts on one listing page.
blogListComponentstring'@theme/BlogListPage'Root component of the blog listing page.
blogPostComponentstring'@theme/BlogPostPage'Root component of each blog post page.
blogTagsListComponentstring'@theme/BlogTagsListPage'Root component of the tags list page.
blogTagsPostsComponentstring'@theme/BlogTagsPostsPage'Root component of the "posts containing tag" page.
blogArchiveComponentstring'@theme/BlogArchivePage'Root component of the blog archive page.
remarkPluginsany[][]Remark plugins passed to MDX.
rehypePluginsany[][]Rehype plugins passed to MDX.
beforeDefaultRemarkPluginsany[][]Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins.
beforeDefaultRehypePluginsany[][]Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins.
truncateMarkerRegExp/<!--\s*truncate\s*-->/ | \{\/\*\s*truncate\s*\*\/\}/Truncate marker marking where the summary ends.
showReadingTimebooleantrueShow estimated reading time for the blog post.
readingTimeReadingTimeFnThe default reading timeA callback to customize the reading time number displayed.
authorsMapPathstring'authors.yml'Path to the authors map file, relative to the blog content directory.
feedOptionsSee below{type: ['rss', 'atom']}Blog feed.
feedOptions.typeFeedType | FeedType[] | 'all' | nullRequiredType of feed to be generated. Use null to disable generation.
feedOptions.createFeedItemsCreateFeedItemsFn | undefinedundefinedAn optional function which can be used to transform and / or filter the items in the feed.
feedOptions.limitnumber | null | false20Limits the feed to the specified number of posts, false or null for all entries. Defaults to 20.
feedOptions.titlestringsiteConfig.titleTitle of the feed.
feedOptions.descriptionstring`${siteConfig.title} Blog`Description of the feed.
feedOptions.copyrightstringundefinedCopyright message.
feedOptions.languagestring (See documentation for possible values)undefinedLanguage metadata of the feed.
sortPosts'descending' | 'ascending' 'descending'Governs the direction of blog post sorting.
processBlogPostsProcessBlogPostsFnundefinedAn optional function which can be used to transform blog posts (filter, modify, delete, etc...).
showLastUpdateAuthorbooleanfalseWhether to display the author who last updated the blog post.
showLastUpdateTimebooleanfalseWhether to display the last date the blog post was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub actions/checkout, usefetch-depth: 0.
+

Types

+

EditUrlFn

+
type EditUrlFunction = (params: {
blogDirPath: string;
blogPath: string;
permalink: string;
locale: string;
}) => string | undefined;
+

ReadingTimeFn

+
type ReadingTimeOptions = {
wordsPerMinute: number;
wordBound: (char: string) => boolean;
};

type ReadingTimeCalculator = (params: {
content: string;
frontMatter?: BlogPostFrontMatter & Record<string, unknown>;
options?: ReadingTimeOptions;
}) => number;

type ReadingTimeFn = (params: {
content: string;
frontMatter: BlogPostFrontMatter & Record<string, unknown>;
defaultReadingTime: ReadingTimeCalculator;
}) => number | undefined;
+

FeedType

+
type FeedType = 'rss' | 'atom' | 'json';
+

CreateFeedItemsFn

+
type CreateFeedItemsFn = (params: {
blogPosts: BlogPost[];
siteConfig: DocusaurusConfig;
outDir: string;
defaultCreateFeedItemsFn: CreateFeedItemsFn;
}) => Promise<BlogFeedItem[]>;
+

ProcessBlogPostsFn

+
type ProcessBlogPostsFn = (params: {
blogPosts: BlogPost[];
}) => Promise<void | BlogPost[]>;
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
path: 'blog',
// Simple use-case: string editUrl
// editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',
// Advanced use-case: functional editUrl
editUrl: ({locale, blogDirPath, blogPath, permalink}) =>
`https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`,
editLocalizedFiles: false,
blogTitle: 'Blog title',
blogDescription: 'Blog',
blogSidebarCount: 5,
blogSidebarTitle: 'All our posts',
routeBasePath: 'blog',
include: ['**/*.{md,mdx}'],
exclude: [
'**/_*.{js,jsx,ts,tsx,md,mdx}',
'**/_*/**',
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
postsPerPage: 10,
blogListComponent: '@theme/BlogListPage',
blogPostComponent: '@theme/BlogPostPage',
blogTagsListComponent: '@theme/BlogTagsListPage',
blogTagsPostsComponent: '@theme/BlogTagsPostsPage',
remarkPlugins: [require('./my-remark-plugin')],
rehypePlugins: [],
beforeDefaultRemarkPlugins: [],
beforeDefaultRehypePlugins: [],
truncateMarker: /<!--\s*(truncate)\s*-->/,
showReadingTime: true,
feedOptions: {
type: '',
title: '',
description: '',
copyright: '',
language: undefined,
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
],
],
};
+

Markdown front matter

+

Markdown documents can use the following Markdown front matter metadata fields, enclosed by a line --- on either side.

+

Accepted fields:

+
NameTypeDefaultDescription
authorsAuthorsundefinedList of blog post authors (or unique author). Read the authors guide for more explanations. Prefer authors over the author_* front matter fields, even for single author blog posts.
authorstringundefined⚠️ Prefer using authors. The blog post author's name.
author_urlstringundefined⚠️ Prefer using authors. The URL that the author's name will be linked to. This could be a GitHub, Twitter, Facebook profile URL, etc.
author_image_urlstringundefined⚠️ Prefer using authors. The URL to the author's thumbnail image.
author_titlestringundefined⚠️ Prefer using authors. A description of the author.
titlestringMarkdown titleThe blog post title.
datestringFile name or file creation timeThe blog post creation date. If not specified, this can be extracted from the file or folder name, e.g, 2021-04-15-blog-post.mdx, 2021-04-15-blog-post/index.mdx, 2021/04/15/blog-post.mdx. Otherwise, it is the Markdown file creation time.
tagsTag[]undefinedA list of strings or objects of two string fields label and permalink to tag to your post.
draftbooleanfalseDraft blog posts will only be available during development.
unlistedbooleanfalseUnlisted blog posts will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.
hide_table_of_contentsbooleanfalseWhether to hide the table of contents to the right.
toc_min_heading_levelnumber2The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value.
toc_max_heading_levelnumber3The max heading level shown in the table of contents. Must be between 2 and 6.
keywordsstring[]undefinedKeywords meta tag, which will become the <meta name="keywords" content="keyword1,keyword2,..."/> in <head>, used by search engines.
descriptionstringThe first line of Markdown contentThe description of your document, which will become the <meta name="description" content="..."/> and <meta property="og:description" content="..."/> in <head>, used by search engines.
imagestringundefinedCover or thumbnail image that will be used as the <meta property="og:image" content="..."/> in the <head>, enhancing link previews on social media and messaging platforms.
slugstringFile pathAllows to customize the blog post URL (/<routeBasePath>/<slug>). Support multiple patterns: slug: my-blog-post, slug: /my/path/to/blog/post, slug: /.
last_updateFrontMatterLastUpdateundefinedAllows overriding the last update author/date. Date can be any parsable date string.
+
type FrontMatterLastUpdate = {date?: string; author?: string};

type Tag = string | {label: string; permalink: string};

// An author key references an author from the global plugin authors.yml file
type AuthorKey = string;

type Author = {
key?: AuthorKey;
name: string;
title?: string;
url?: string;
image_url?: string;
};

// The front matter authors field allows various possible shapes
type Authors = AuthorKey | Author | (AuthorKey | Author)[];
+

Example:

+
---
title: Welcome Docusaurus
authors:
- slorber
- yangshun
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
tags: [hello, docusaurus-v2]
description: This is my first post on Docusaurus.
image: https://i.imgur.com/mErPwqL.png
hide_table_of_contents: false
---

A Markdown blog post
+

i18n

+

Read the i18n introduction first.

+

Translation files location

+
    +
  • Base path: website/i18n/[locale]/docusaurus-plugin-content-blog
  • +
  • Multi-instance path: website/i18n/[locale]/docusaurus-plugin-content-blog-[pluginId]
  • +
  • JSON files: extracted with docusaurus write-translations
  • +
  • Markdown files: website/i18n/[locale]/docusaurus-plugin-content-blog
  • +
+

Example file-system structure

+
website/i18n/[locale]/docusaurus-plugin-content-blog

# translations for website/blog
├── authors.yml
├── first-blog-post.md
├── second-blog-post.md

# translations for the plugin options that will be rendered
└── options.json
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-blog.html.html b/docs/api/plugins/@docusaurus/plugin-content-blog.html.html new file mode 100644 index 0000000000..9fe95a999c --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-docs.html b/docs/api/plugins/@docusaurus/plugin-content-docs.html new file mode 100644 index 0000000000..371b907517 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-docs.html @@ -0,0 +1,98 @@ + + + + + +📦 plugin-content-docs | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-content-docs

+ +

Provides the Docs functionality and is the default docs plugin for Docusaurus.

+

Installation

+
npm install --save @docusaurus/plugin-content-docs
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
pathstring'docs'Path to the docs content directory on the file system, relative to site directory.
editUrlstring | EditUrlFunctionundefinedBase URL to edit your site. The final URL is computed by editUrl + relativeDocPath. Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links.
editLocalizedFilesbooleanfalseThe edit URL will target the localized file, instead of the original unlocalized file. Ignored when editUrl is a function.
editCurrentVersionbooleanfalseThe edit URL will always target the current version doc instead of older versions. Ignored when editUrl is a function.
routeBasePathstring'docs'URL route for the docs section of your site. DO NOT include a trailing slash. Use / for shipping docs without base path.
tagsBasePathstring'tags'URL route for the tags list page of your site. It is prepended to the routeBasePath.
includestring[]['**/*.{md,mdx}']Array of glob patterns matching Markdown files to be built, relative to the content path.
excludestring[]See example configurationArray of glob patterns matching Markdown files to be excluded. Serves as refinement based on the include option.
sidebarPathfalse | stringundefinedPath to sidebar configuration. Use false to disable sidebars, or undefined to create a fully autogenerated sidebar.
sidebarCollapsiblebooleantrueWhether sidebar categories are collapsible by default. See also Collapsible categories
sidebarCollapsedbooleantrueWhether sidebar categories are collapsed by default. See also Expanded categories by default
sidebarItemsGeneratorSidebarGeneratorOmittedFunction used to replace the sidebar items of type 'autogenerated' with real sidebar items (docs, categories, links...). See also Customize the sidebar items generator
numberPrefixParserboolean | PrefixParserOmittedCustom parsing logic to extract number prefixes from file names. Use false to disable this behavior and leave the docs untouched, and true to use the default parser. See also Using number prefixes
docsRootComponentstring'@theme/DocsRoot'Parent component of all the docs plugin pages (including all versions). Stays mounted when navigation between docs pages and versions.
docVersionRootComponentstring'@theme/DocVersionLayout'Parent component of all docs pages of an individual version (doc pages with sidebars, tags pages). Stays mounted when navigation between pages of that specific version.
docRootComponentstring'@theme/DocPage'Parent component of all doc pages with sidebars (regular docs pages, category generated index pages). Stays mounted when navigation between such pages.
docItemComponentstring'@theme/DocItem'Main doc container, with TOC, pagination, etc.
docTagsListComponentstring'@theme/DocTagsListPage'Root component of the tags list page
docTagDocListComponentstring'@theme/DocTagDocListPage'Root component of the "docs containing tag X" page.
docCategoryGeneratedIndexComponentstring'@theme/DocCategoryGeneratedIndexPage'Root component of the generated category index page.
remarkPluginsany[][]Remark plugins passed to MDX.
rehypePluginsany[][]Rehype plugins passed to MDX.
beforeDefaultRemarkPluginsany[][]Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins.
beforeDefaultRehypePluginsany[][]Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins.
showLastUpdateAuthorbooleanfalseWhether to display the author who last updated the doc.
showLastUpdateTimebooleanfalseWhether to display the last date the doc was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub actions/checkout, usefetch-depth: 0.
disableVersioningbooleanfalseExplicitly disable versioning even when multiple versions exist. This will make the site only include the current version. Will error if includeCurrentVersion: false and disableVersioning: true.
includeCurrentVersionbooleantrueInclude the current version of your docs.
lastVersionstringFirst version in versions.jsonThe version navigated to in priority and displayed by default for docs navbar items.
onlyIncludeVersionsstring[]All versions availableOnly include a subset of all available versions.
versionsVersionsConfig{}Independent customization of each version's properties.
+

Types

+

EditUrlFunction

+
type EditUrlFunction = (params: {
version: string;
versionDocsDirPath: string;
docPath: string;
permalink: string;
locale: string;
}) => string | undefined;
+

PrefixParser

+
type PrefixParser = (filename: string) => {
filename: string;
numberPrefix?: number;
};
+

SidebarGenerator

+
type SidebarGenerator = (generatorArgs: {
/** The sidebar item with type "autogenerated" to be transformed. */
item: {type: 'autogenerated'; dirName: string};
/** Useful metadata for the version this sidebar belongs to. */
version: {contentPath: string; versionName: string};
/** All the docs of that version (unfiltered). */
docs: {
id: string;
title: string;
frontMatter: DocFrontMatter & Record<string, unknown>;
source: string;
sourceDirName: string;
sidebarPosition?: number | undefined;
}[];
/** Number prefix parser configured for this plugin. */
numberPrefixParser: PrefixParser;
/** The default category index matcher which you can override. */
isCategoryIndex: CategoryIndexMatcher;
/**
* key is the path relative to the doc content directory, value is the
* category metadata file's content.
*/
categoriesMetadata: {[filePath: string]: CategoryMetadata};
/**
* Useful to re-use/enhance the default sidebar generation logic from
* Docusaurus.
*/
defaultSidebarItemsGenerator: SidebarGenerator;
// Returns an array of sidebar items — same as what you can declare in
// sidebars.js, except for shorthands. See https://docusaurus.io/docs/sidebar/items
}) => Promise<SidebarItem[]>;

type CategoryIndexMatcher = (param: {
/** The file name, without extension */
fileName: string;
/**
* The list of directories, from lowest level to highest.
* If there's no dir name, directories is ['.']
*/
directories: string[];
/** The extension, with a leading dot */
extension: string;
}) => boolean;
+

VersionsConfig

+
type VersionConfig = {
/**
* The base path of the version, will be appended to `baseUrl` +
* `routeBasePath`.
*/
path?: string;
/** The label of the version to be used in badges, dropdowns, etc. */
label?: string;
/** The banner to show at the top of a doc of that version. */
banner?: 'none' | 'unreleased' | 'unmaintained';
/** Show a badge with the version label at the top of each doc. */
badge?: boolean;
/** Prevents search engines from indexing this version */
noIndex?: boolean;
/** Add a custom class name to the <html> element of each doc */
className?: string;
};

type VersionsConfig = {[versionName: string]: VersionConfig};
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
path: 'docs',
breadcrumbs: true,
// Simple use-case: string editUrl
// editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/',
// Advanced use-case: functional editUrl
editUrl: ({versionDocsDirPath, docPath}) =>
`https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`,
editLocalizedFiles: false,
editCurrentVersion: false,
routeBasePath: 'docs',
include: ['**/*.md', '**/*.mdx'],
exclude: [
'**/_*.{js,jsx,ts,tsx,md,mdx}',
'**/_*/**',
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
sidebarPath: 'sidebars.js',
async sidebarItemsGenerator({
defaultSidebarItemsGenerator,
numberPrefixParser,
item,
version,
docs,
isCategoryIndex,
}) {
// Use the provided data to generate a custom sidebar slice
return [
{type: 'doc', id: 'intro'},
{
type: 'category',
label: 'Tutorials',
items: [
{type: 'doc', id: 'tutorial1'},
{type: 'doc', id: 'tutorial2'},
],
},
];
},
numberPrefixParser(filename) {
// Implement your own logic to extract a potential number prefix
const numberPrefix = findNumberPrefix(filename);
// Prefix found: return it with the cleaned filename
if (numberPrefix) {
return {
numberPrefix,
filename: filename.replace(prefix, ''),
};
}
// No number prefix found
return {numberPrefix: undefined, filename};
},
docsRootComponent: '@theme/DocsRoot',
docVersionRootComponent: '@theme/DocVersionRoot',
docRootComponent: '@theme/DocRoot',
docItemComponent: '@theme/DocItem',
remarkPlugins: [require('./my-remark-plugin')],
rehypePlugins: [],
beforeDefaultRemarkPlugins: [],
beforeDefaultRehypePlugins: [],
showLastUpdateAuthor: false,
showLastUpdateTime: false,
disableVersioning: false,
includeCurrentVersion: true,
lastVersion: undefined,
versions: {
current: {
label: 'Android SDK v2.0.0 (WIP)',
path: 'android-2.0.0',
banner: 'none',
},
'1.0.0': {
label: 'Android SDK v1.0.0',
path: 'android-1.0.0',
banner: 'unmaintained',
},
},
onlyIncludeVersions: ['current', '1.0.0', '2.0.0'],
},
},
],
],
};
+

Markdown front matter

+

Markdown documents can use the following Markdown front matter metadata fields, enclosed by a line --- on either side.

+

Accepted fields:

+
NameTypeDefaultDescription
idstringfile path (including folders, without the extension)A unique document ID.
titlestringMarkdown title or idThe text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title.
pagination_labelstringsidebar_label or titleThe text used in the document next/previous buttons for this document.
displayed_sidebarstringundefinedForce the display of a given sidebar when browsing the current document. Read the multiple sidebars guide for details.
hide_titlebooleanfalseWhether to hide the title at the top of the doc. It only hides a title declared through the front matter, and have no effect on a Markdown title at the top of your document.
hide_table_of_contentsbooleanfalseWhether to hide the table of contents to the right.
toc_min_heading_levelnumber2The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value.
toc_max_heading_levelnumber3The max heading level shown in the table of contents. Must be between 2 and 6.
pagination_nextstring | nullNext doc in the sidebarThe ID of the documentation you want the "Next" pagination to link to. Use null to disable showing "Next" for this page.
pagination_prevstring | nullPrevious doc in the sidebarThe ID of the documentation you want the "Previous" pagination to link to. Use null to disable showing "Previous" for this page.
parse_number_prefixesbooleannumberPrefixParser plugin optionWhether number prefix parsing is disabled on this doc. See also Using number prefixes.
custom_edit_urlstring | nullComputed using the editUrl plugin optionThe URL for editing this document. Use null to disable showing "Edit this page" for this page.
keywordsstring[]undefinedKeywords meta tag for the document page, for search engines.
descriptionstringThe first line of Markdown contentThe description of your document, which will become the <meta name="description" content="..."/> and <meta property="og:description" content="..."/> in <head>, used by search engines.
imagestringundefinedCover or thumbnail image that will be used as the <meta property="og:image" content="..."/> in the <head>, enhancing link previews on social media and messaging platforms.
slugstringFile pathAllows to customize the document URL (/<routeBasePath>/<slug>). Support multiple patterns: slug: my-doc, slug: /my/path/myDoc, slug: /.
tagsTag[]undefinedA list of strings or objects of two string fields label and permalink to tag to your docs.
draftbooleanfalseDraft documents will only be available during development.
unlistedbooleanfalseUnlisted documents will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.
last_updateFrontMatterLastUpdateundefinedAllows overriding the last update author/date. Date can be any parsable date string.
+
type FrontMatterLastUpdate = {date?: string; author?: string};

type Tag = string | {label: string; permalink: string};
+

Example:

+
---
id: doc-markdown
title: Docs Markdown Features
hide_title: false
hide_table_of_contents: false
sidebar_label: Markdown
sidebar_position: 3
pagination_label: Markdown features
custom_edit_url: https://github.com/facebook/docusaurus/edit/main/docs/api-doc-markdown.md
description: How do I find you when I cannot solve this problem
keywords:
- docs
- docusaurus
image: https://i.imgur.com/mErPwqL.png
slug: /myDoc
last_update:
date: 1/1/2000
author: custom author name
---

# Markdown Features

My Document Markdown content
+

i18n

+

Read the i18n introduction first.

+

Translation files location

+
    +
  • Base path: website/i18n/[locale]/docusaurus-plugin-content-docs
  • +
  • Multi-instance path: website/i18n/[locale]/docusaurus-plugin-content-docs-[pluginId]
  • +
  • JSON files: extracted with docusaurus write-translations
  • +
  • Markdown files: website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]
  • +
+

Example file-system structure

+
website/i18n/[locale]/docusaurus-plugin-content-docs

# translations for website/docs
├── current
│ ├── api
│ │ └── config.md
│ └── getting-started.md
├── current.json

# translations for website/versioned_docs/version-1.0.0
├── version-1.0.0
│ ├── api
│ │ └── config.md
│ └── getting-started.md
└── version-1.0.0.json
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-docs.html.html b/docs/api/plugins/@docusaurus/plugin-content-docs.html.html new file mode 100644 index 0000000000..f22bf46973 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-docs.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-pages.html b/docs/api/plugins/@docusaurus/plugin-content-pages.html new file mode 100644 index 0000000000..ac95ad3b5b --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-pages.html @@ -0,0 +1,91 @@ + + + + + +📦 plugin-content-pages | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-content-pages

+ +

The default pages plugin for Docusaurus. The classic template ships with this plugin with default configurations. This plugin provides creating pages functionality.

+

Installation

+
npm install --save @docusaurus/plugin-content-pages
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
pathstring'src/pages'Path to data on filesystem relative to site dir. Components in this directory will be automatically converted to pages.
editUrlstring | EditUrlFnundefinedOnly for Markdown pages. Base URL to edit your site. The final URL is computed by editUrl + relativePostPath. Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links.
editLocalizedFilesbooleanfalseOnly for Markdown pages. The edit URL will target the localized file, instead of the original unlocalized file. Ignored when editUrl is a function.
routeBasePathstring'/'URL route for the pages section of your site. DO NOT include a trailing slash.
includestring[]['**/*.{js,jsx,ts,tsx,md,mdx}']Matching files will be included and processed.
excludestring[]See example configurationNo route will be created for matching files.
mdxPageComponentstring'@theme/MDXPage'Component used by each MDX page.
remarkPlugins[]any[]Remark plugins passed to MDX.
rehypePlugins[]any[]Rehype plugins passed to MDX.
beforeDefaultRemarkPluginsany[][]Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins.
beforeDefaultRehypePluginsany[][]Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins.
showLastUpdateAuthorbooleanfalseOnly for Markdown pages. Whether to display the author who last updated the page.
showLastUpdateTimebooleanfalseOnly for Markdown pages. Whether to display the last date the page post was updated. This requires access to git history during the build, so will not work correctly with shallow clones (a common default for CI systems). With GitHub actions/checkout, usefetch-depth: 0.
+

Types

+

EditUrlFn

+
type EditUrlFunction = (params: {
blogDirPath: string;
blogPath: string;
permalink: string;
locale: string;
}) => string | undefined;
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
pages: {
path: 'src/pages',
routeBasePath: '',
include: ['**/*.{js,jsx,ts,tsx,md,mdx}'],
exclude: [
'**/_*.{js,jsx,ts,tsx,md,mdx}',
'**/_*/**',
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
mdxPageComponent: '@theme/MDXPage',
remarkPlugins: [require('./my-remark-plugin')],
rehypePlugins: [],
beforeDefaultRemarkPlugins: [],
beforeDefaultRehypePlugins: [],
},
},
],
],
};
+

Markdown front matter

+

Markdown pages can use the following Markdown front matter metadata fields, enclosed by a line --- on either side.

+

Accepted fields:

+
NameTypeDefaultDescription
titlestringMarkdown titleThe blog post title.
descriptionstringThe first line of Markdown contentThe description of your page, which will become the <meta name="description" content="..."/> and <meta property="og:description" content="..."/> in <head>, used by search engines.
keywordsstring[]undefinedKeywords meta tag, which will become the <meta name="keywords" content="keyword1,keyword2,..."/> in <head>, used by search engines.
imagestringundefinedCover or thumbnail image that will be used as the <meta property="og:image" content="..."/> in the <head>, enhancing link previews on social media and messaging platforms.
wrapperClassNamestringClass name to be added to the wrapper element to allow targeting specific page content.
hide_table_of_contentsbooleanfalseWhether to hide the table of contents to the right.
draftbooleanfalseDraft pages will only be available during development.
unlistedbooleanfalseUnlisted pages will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link.
+

Example:

+
---
title: Markdown Page
description: Markdown page SEO description
wrapperClassName: markdown-page
hide_table_of_contents: false
draft: true
---

Markdown page content
+

i18n

+

Read the i18n introduction first.

+

Translation files location

+
    +
  • Base path: website/i18n/[locale]/docusaurus-plugin-content-pages
  • +
  • Multi-instance path: website/i18n/[locale]/docusaurus-plugin-content-pages-[pluginId]
  • +
  • JSON files: extracted with docusaurus write-translations
  • +
  • Markdown files: website/i18n/[locale]/docusaurus-plugin-content-pages
  • +
+

Example file-system structure

+
website/i18n/[locale]/docusaurus-plugin-content-pages

# translations for website/src/pages
├── first-markdown-page.md
└── second-markdown-page.md
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-content-pages.html.html b/docs/api/plugins/@docusaurus/plugin-content-pages.html.html new file mode 100644 index 0000000000..f2f9aa09d1 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-content-pages.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-debug.html b/docs/api/plugins/@docusaurus/plugin-debug.html new file mode 100644 index 0000000000..2c90e6fe67 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-debug.html @@ -0,0 +1,72 @@ + + + + + +📦 plugin-debug | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-debug

+ +

The debug plugin will display useful debug information at http://localhost:3000/__docusaurus/debug.

+

It is mostly useful for plugin authors, that will be able to inspect more easily the content of the .docusaurus folder (like the creates routes), but also be able to inspect data structures that are never written to disk, like the plugin data loaded through the contentLoaded lifecycle.

+
info

If you use the plugin via the classic preset, the preset will enable the plugin in development and disable it in production by default (debug: undefined) to avoid exposing potentially sensitive information. You can use debug: true to always enable it or debug: false to always disable it.

If you use a standalone plugin, you may need to achieve the same effect by checking the environment:

docusaurus.config.js
export default {
plugins: [
process.env.NODE_ENV === 'production' && '@docusaurus/plugin-debug',
].filter(Boolean),
};
+
note

If you report a bug, we will probably ask you to have this plugin turned on in the production, so that we can inspect your deployment config more easily.

If you don't have any sensitive information, you can keep it on in production like we do.

+

Installation

+
npm install --save @docusaurus/plugin-debug
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

This plugin currently has no options.

+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
debug: true, // This will enable the plugin in production
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-debug.html.html b/docs/api/plugins/@docusaurus/plugin-debug.html.html new file mode 100644 index 0000000000..a05abc9ff5 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-debug.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-analytics.html b/docs/api/plugins/@docusaurus/plugin-google-analytics.html new file mode 100644 index 0000000000..ac374842c3 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-analytics.html @@ -0,0 +1,73 @@ + + + + + +📦 plugin-google-analytics | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-google-analytics

+ +

The default Google Analytics plugin. It is a JavaScript library for measuring how users interact with your website in the production build. If you are using Google Analytics 4 you might need to consider using plugin-google-gtag instead.

+
Deprecated

This plugin is deprecated, and will become useless on July 1, 2023.

Google is moving away from Universal Analytics.

If you are still using this plugin with a UA-* tracking id, you should create a Google Analytics 4 account as soon as possible, and use @docusaurus/plugin-google-gtag instead of this plugin. More details here.

+
production only

This plugin is always inactive in development and only active in production to avoid polluting the analytics statistics.

+

Installation

+
npm install --save @docusaurus/plugin-google-analytics
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
trackingIDstringRequiredThe tracking ID of your analytics service.
anonymizeIPbooleanfalseWhether the IP should be anonymized when sending requests.
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
googleAnalytics: {
trackingID: 'UA-141789564-1',
anonymizeIP: true,
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-analytics.html.html b/docs/api/plugins/@docusaurus/plugin-google-analytics.html.html new file mode 100644 index 0000000000..f1829fc95c --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-analytics.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-gtag.html b/docs/api/plugins/@docusaurus/plugin-google-gtag.html new file mode 100644 index 0000000000..1c48426ea3 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-gtag.html @@ -0,0 +1,73 @@ + + + + + +📦 plugin-google-gtag | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-google-gtag

+ +

The default Global Site Tag (gtag.js) plugin. It is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, and Google Marketing Platform. This section describes how to configure a Docusaurus site to enable global site tag for Google Analytics.

+
tip

You can use Google's Tag Assistant tool to check if your gtag is set up correctly!

+
production only

This plugin is always inactive in development and only active in production to avoid polluting the analytics statistics.

+

Installation

+
npm install --save @docusaurus/plugin-google-gtag
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
trackingIDstring | string[]RequiredThe tracking ID of your gtag service. It is possible to provide multiple ids.
anonymizeIPbooleanfalseWhether the IP should be anonymized when sending requests.
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
gtag: {
trackingID: 'G-999X9XX9XX',
anonymizeIP: true,
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-gtag.html.html b/docs/api/plugins/@docusaurus/plugin-google-gtag.html.html new file mode 100644 index 0000000000..0656bcc696 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-gtag.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html b/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html new file mode 100644 index 0000000000..0105f6ed7f --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html @@ -0,0 +1,73 @@ + + + + + +📦 plugin-google-tag-manager | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-google-tag-manager

+ +

A plugin for adding Google Tag Manager (gtm.js) to a Docusaurus site. Use this plugin in conjunction with the standard gtag plugin for in-depth analysis of how users are using your site.

+
tip

You can use Google's Tag Assistant tool to check if tag manager is set up correctly!

+
production only

This plugin is always inactive in development and only active in production to avoid polluting the analytics statistics.

+

Installation

+
npm install --save @docusaurus/plugin-google-tag-manager
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
containerIdstringRequiredYour Tag Manager container Id (usually starts with GTM-).
+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
googleTagManager: {
containerId: 'GTM-12345',
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html.html b/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html.html new file mode 100644 index 0000000000..f8a482b188 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-google-tag-manager.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-ideal-image.html b/docs/api/plugins/@docusaurus/plugin-ideal-image.html new file mode 100644 index 0000000000..9ce2f7b360 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-ideal-image.html @@ -0,0 +1,76 @@ + + + + + +📦 plugin-ideal-image | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-ideal-image

+ +

Docusaurus Plugin to generate an almost ideal image (responsive, lazy-loading, and low quality placeholder).

+
info

By default, the plugin is inactive in development so you could always view full-scale images. If you want to debug the ideal image behavior, you could set the disableInDev option to false.

+

Installation

+
npm install --save @docusaurus/plugin-ideal-image
+

Usage

+

This plugin supports the PNG and JPG formats only.

+
import Image from '@theme/IdealImage';
import thumbnail from './path/to/img.png';

// your React code
<Image img={thumbnail} />

// or
<Image img={require('./path/to/img.png')} />
+
warning

This plugin registers a Webpack loader that changes the type of imported/require images:

    +
  • Before: string
  • +
  • After: {preSrc: string, src: import("@theme/IdealImage").SrcImage}
  • +
+

Configuration

+

Accepted fields:

+
OptionTypeDefaultDescription
namestringideal-img/[name].[hash:hex:7].[width].[ext]Filename template for output files.
sizesnumber[]original sizeSpecify all widths you want to use. If a specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up).
sizenumberoriginal sizeSpecify one width you want to use; if the specified size exceeds the original image's width, the latter will be used (i.e. images won't be scaled up)
minnumberAs an alternative to manually specifying sizes, you can specify min, max and steps, and the sizes will be generated for you.
maxnumberSee min above
stepsnumber4Configure the number of images generated between min and max (inclusive)
qualitynumber85JPEG compression quality
disableInDevbooleantrueYou can test ideal image behavior in dev mode by setting this to false. Tip: use network throttling in your browser to simulate slow networks.
+

Example configuration

+

Here's an example configuration:

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-ideal-image',
{
quality: 70,
max: 1030, // max resized image's size.
min: 640, // min resized image's size. if original is lower, use that size.
steps: 2, // the max number of images generated between min and max (inclusive)
disableInDev: false,
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-ideal-image.html.html b/docs/api/plugins/@docusaurus/plugin-ideal-image.html.html new file mode 100644 index 0000000000..c111be083f --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-ideal-image.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-pwa.html b/docs/api/plugins/@docusaurus/plugin-pwa.html new file mode 100644 index 0000000000..9b59c9b285 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-pwa.html @@ -0,0 +1,152 @@ + + + + + +📦 plugin-pwa | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-pwa

+

Docusaurus Plugin to add PWA support using Workbox. This plugin generates a Service Worker in production build only, and allows you to create fully PWA-compliant documentation site with offline and installation support.

+

Installation

+
npm install --save @docusaurus/plugin-pwa
+

Configuration

+

Create a PWA manifest at ./static/manifest.json.

+

Modify docusaurus.config.js with a minimal PWA config, like:

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-pwa',
{
debug: true,
offlineModeActivationStrategies: [
'appInstalled',
'standalone',
'queryString',
],
pwaHead: [
{
tagName: 'link',
rel: 'icon',
href: '/img/docusaurus.png',
},
{
tagName: 'link',
rel: 'manifest',
href: '/manifest.json', // your PWA manifest
},
{
tagName: 'meta',
name: 'theme-color',
content: 'rgb(37, 194, 160)',
},
],
},
],
],
};
+

Progressive Web App

+

Having a service worker installed is not enough to make your application a PWA. You'll need to at least include a Web App Manifest and have the correct tags in <head> (Options > pwaHead).

+

After deployment, you can use Lighthouse to run an audit on your site.

+

For a more exhaustive list of what it takes for your site to be a PWA, refer to the PWA Checklist

+

App installation support

+

If your browser supports it, you should be able to install a Docusaurus site as an app.

+

A screen recording of the installation process. A button appears in the address bar of the browser, which displays a dialog asking &quot;install this application?&quot; when clicked. After clicking the &quot;Install&quot; button, a new application is opened in the operating system, opening to the Docusaurus homepage.

+
note

App installation requires the HTTPS protocol and a valid manifest.

+

Offline mode (precaching)

+

We enable users to browse a Docusaurus site offline, by using service-worker precaching.

+

The workbox-precaching page explains the idea:

+
+

One feature of service workers is the ability to save a set of files to the cache when the service worker is installing. This is often referred to as "precaching", since you are caching content ahead of the service worker being used.

+

The main reason for doing this is that it gives developers control over the cache, meaning they can determine when and how long a file is cached as well as serve it to the browser without going to the network, meaning it can be used to create web apps that work offline.

+

Workbox takes a lot of the heavy lifting out of precaching by simplifying the API and ensuring assets are downloaded efficiently.

+
+

By default, offline mode is enabled when the site is installed as an app. See the offlineModeActivationStrategies option for details.

+

After the site has been precached, the service worker will serve cached responses for later visits. When a new build is deployed along with a new service worker, the new one will begin installing and eventually move to a waiting state. During this waiting state, a reload popup will show and ask the user to reload the page for new content. Until the user either clears the application cache or clicks the reload button on the popup, the service worker will continue serving the old content.

+
warning

Offline mode / precaching requires downloading all the static assets of the site ahead of time, and can consume unnecessary bandwidth. It may not be a good idea to activate it for all kind of sites.

+

Options

+

debug

+
    +
  • Type: boolean
  • +
  • Default: false
  • +
+

Turn debug mode on:

+
    +
  • Workbox logs
  • +
  • Additional Docusaurus logs
  • +
  • Unoptimized SW file output
  • +
  • Source maps
  • +
+

offlineModeActivationStrategies

+
    +
  • Type: ('appInstalled' | 'mobile' | 'saveData'| 'queryString' | 'always')[]
  • +
  • Default: ['appInstalled', 'queryString', 'standalone']
  • +
+

Strategies used to turn the offline mode on:

+
    +
  • appInstalled: activates for users having installed the site as an app (not 100% reliable)
  • +
  • standalone: activates for users running the app as standalone (often the case once a PWA is installed)
  • +
  • queryString: activates if queryString contains offlineMode=true (convenient for PWA debugging)
  • +
  • mobile: activates for mobile users (width <= 996px)
  • +
  • saveData: activates for users with navigator.connection.saveData === true
  • +
  • always: activates for all users
  • +
+
warning

Use this carefully: some users may not like to be forced to use the offline mode.

+
danger

It is not possible to detect if a page is rendered as a PWA in a reliable manner.

The appinstalled event has been removed from the specification, and the navigator.getInstalledRelatedApps() API is only supported in recent Chrome versions and require related_applications declared in the manifest.

The standalone strategy is a nice fallback to activate the offline mode (at least when running the installed app).

+

injectManifestConfig

+

Workbox options to pass to workbox.injectManifest(). This gives you control over which assets will be precached, and be available offline.

+
    +
  • Type: InjectManifestOptions
  • +
  • Default: {}
  • +
+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-pwa',
{
injectManifestConfig: {
manifestTransforms: [
//...
],
modifyURLPrefix: {
//...
},
// We already add regular static assets (HTML, images...) to be available offline
// You can add more files according to your needs
globPatterns: ['**/*.{pdf,docx,xlsx}'],
// ...
},
},
],
],
};
+

pwaHead

+
    +
  • Type: ({ tagName: string; [attributeName: string]: string })[]
  • +
  • Default: []
  • +
+

Array of objects containing tagName and key-value pairs for attributes to inject into the <head> tag. Technically you can inject any head tag through this, but it's ideally used for tags to make your site PWA compliant. Here's a list of tag to make your app fully compliant:

+
export default {
plugins: [
[
'@docusaurus/plugin-pwa',
{
pwaHead: [
{
tagName: 'link',
rel: 'icon',
href: '/img/docusaurus.png',
},
{
tagName: 'link',
rel: 'manifest',
href: '/manifest.json',
},
{
tagName: 'meta',
name: 'theme-color',
content: 'rgb(37, 194, 160)',
},
{
tagName: 'meta',
name: 'apple-mobile-web-app-capable',
content: 'yes',
},
{
tagName: 'meta',
name: 'apple-mobile-web-app-status-bar-style',
content: '#000',
},
{
tagName: 'link',
rel: 'apple-touch-icon',
href: '/img/docusaurus.png',
},
{
tagName: 'link',
rel: 'mask-icon',
href: '/img/docusaurus.svg',
color: 'rgb(37, 194, 160)',
},
{
tagName: 'meta',
name: 'msapplication-TileImage',
content: '/img/docusaurus.png',
},
{
tagName: 'meta',
name: 'msapplication-TileColor',
content: '#000',
},
],
},
],
],
};
+

swCustom

+
    +
  • Type: string | undefined
  • +
  • Default: undefined
  • +
+

Useful for additional Workbox rules. You can do whatever a service worker can do here, and use the full power of workbox libraries. The code is transpiled, so you can use modern ES6+ syntax here.

+

For example, to cache files from external routes:

+
import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';

// default fn export receiving some useful params
export default function swCustom(params) {
const {
debug, // :boolean
offlineMode, // :boolean
} = params;

// Cache responses from external resources
registerRoute((context) => {
return [
/graph\.facebook\.com\/.*\/picture/,
/netlify\.com\/img/,
/avatars1\.githubusercontent/,
].some((regex) => context.url.href.match(regex));
}, new StaleWhileRevalidate());
}
+

The module should have a default function export, and receives some params.

+

swRegister

+
    +
  • Type: string | false
  • +
  • Default: 'docusaurus-plugin-pwa/src/registerSW.js'
  • +
+

Adds an entry before the Docusaurus app so that registration can happen before the app runs. The default registerSW.js file is enough for simple registration.

+

Passing false will disable registration entirely.

+

Manifest example

+

The Docusaurus site manifest can serve as an inspiration:

+ +
{
"name": "Docusaurus",
"short_name": "Docusaurus",
"theme_color": "#2196f3",
"background_color": "#424242",
"display": "standalone",
"scope": "./",
"start_url": "./index.html",
"related_applications": [
{
"platform": "webapp",
"url": "https://docusaurus.io/manifest.json"
}
],
"icons": [
{
"src": "img/icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "img/icons/icon-96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "img/icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "img/icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "img/icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "img/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "img/icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "img/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
+

Customizing reload popup

+

The @theme/PwaReloadPopup component is rendered when a new service worker is waiting to be installed, and we suggest a reload to the user. You can swizzle this component and implement your own UI. It will receive an onReload callback as props, which should be called when the reload button is clicked. This will tell the service worker to install the waiting service worker and reload the page.

+

The default theme includes an implementation for the reload popup and uses Infima Alerts.

+

A screen recording of the reload process. An alert box shows in the bottom right of the window, saying &quot;New content available&quot;. After clicking the &quot;Refresh&quot; button, the page&#39;s main heading changes from &quot;Introduction&quot; to &quot;PWA :))&quot;.

+

Your component can render null, but this is not recommended: users won't have a way to get up-to-date content.

+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-pwa.html.html b/docs/api/plugins/@docusaurus/plugin-pwa.html.html new file mode 100644 index 0000000000..a4a3268e76 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-pwa.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-sitemap.html b/docs/api/plugins/@docusaurus/plugin-sitemap.html new file mode 100644 index 0000000000..70475d5412 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-sitemap.html @@ -0,0 +1,78 @@ + + + + + +📦 plugin-sitemap | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-sitemap

+ +

This plugin creates sitemaps for your site so that search engine crawlers can crawl your site more accurately.

+
production only

This plugin is always inactive in development and only active in production because it works on the build output.

+

Installation

+
npm install --save @docusaurus/plugin-sitemap
+
tip

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.

+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
lastmod'date' | 'datetime' | nullnulldate is YYYY-MM-DD. datetime is a ISO 8601 datetime. null is disabled. See sitemap docs.
changefreqstring | null'weekly'See sitemap docs
prioritynumber | null0.5See sitemap docs
ignorePatternsstring[][]A list of glob patterns; matching route paths will be filtered from the sitemap. Note that you may need to include the base URL in here.
filenamestringsitemap.xmlThe path to the created sitemap file, relative to the output directory. Useful if you have two plugin instances outputting two files.
+
info

This plugin also respects some site config:

    +
  • noIndex: results in no sitemap generated
  • +
  • trailingSlash: determines if the URLs in the sitemap have trailing slashes
  • +
+
About lastmod

The lastmod option will only output a sitemap <lastmod> tag if plugins provide route metadata attributes sourceFilePath and/or lastUpdatedAt.

All the official content plugins provide the metadata for routes backed by a content file (Markdown, MDX or React page components), but it is possible third-party plugin authors do not provide this information, and the plugin will not be able to output a <lastmod> tag for their routes.

+

Example configuration

+

You can configure this plugin through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
sitemap: {
lastmod: 'date',
changefreq: 'weekly',
priority: 0.5,
ignorePatterns: ['/tags/**'],
filename: 'sitemap.xml',
},
},
],
],
};
+

You can find your sitemap at /sitemap.xml.

+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-sitemap.html.html b/docs/api/plugins/@docusaurus/plugin-sitemap.html.html new file mode 100644 index 0000000000..a984a61c18 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-sitemap.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html b/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html new file mode 100644 index 0000000000..7afede33fd --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html @@ -0,0 +1,69 @@ + + + + + +📦 plugin-vercel-analytics | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 plugin-vercel-analytics

+ +

Vercel Analytics provides comprehensive insights into your website's visitors, tracking top pages, referrers, and demographics like location, operating systems, and browser info.

+
production only

This plugin is always inactive in development and only active in production (docusaurus build) to avoid polluting the analytics statistics.

+

Installation

+
npm install --save @docusaurus/plugin-vercel-analytics
+

Configuration

+

Accepted fields:

+
NameTypeDefaultDescription
modestring'auto'Override the automatic environment detection. Read the official docs for details.
debugbooleanundefinedEnable browser console logging of analytics events. Read the official docs for details.
+

Example configuration

+

You can configure this plugin through plugin options.

+
docusaurus.config.js
export default {
plugins: [
[
'vercel-analytics',
{
debug: true,
mode: 'auto',
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html.html b/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html.html new file mode 100644 index 0000000000..51143c5883 --- /dev/null +++ b/docs/api/plugins/@docusaurus/plugin-vercel-analytics.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes.html b/docs/api/themes.html new file mode 100644 index 0000000000..7bca1a0cd7 --- /dev/null +++ b/docs/api/themes.html @@ -0,0 +1,72 @@ + + + + + +Docusaurus themes | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus themes

+

We provide official Docusaurus themes.

+

Main themes

+

The main themes implement the user interface for the docs, blog and pages plugins.

+ +
warning

The goal is to have all themes share the exact same features, user-experience and configuration.

Only the UI design and underlying styling framework should change, and you should be able to change theme easily.

We are not there yet: only the classic theme is production ready.

+

Enhancement themes

+

These themes will enhance the existing main themes with additional user-interface related features.

+
+ + \ No newline at end of file diff --git a/docs/api/themes.html.html b/docs/api/themes.html.html new file mode 100644 index 0000000000..352f806584 --- /dev/null +++ b/docs/api/themes.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-classic.html b/docs/api/themes/@docusaurus/theme-classic.html new file mode 100644 index 0000000000..c87cb9186e --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-classic.html @@ -0,0 +1,72 @@ + + + + + +📦 theme-classic | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 theme-classic

+ +

The classic theme for Docusaurus.

+

You can refer to the theme configuration page for more details on the configuration.

+
npm install --save @docusaurus/theme-classic
+
tip

If you have installed @docusaurus/preset-classic, you don't need to install it as a dependency.

+

Configuration

+

Accepted fields:

+
OptionTypeDefaultDescription
customCssstring[] | string[]Stylesheets to be imported globally as client modules. Relative paths are resolved against the site directory.
+
note

Most configuration for the theme is done in themeConfig, which can be found in theme configuration.

+

Example configuration

+

You can configure this theme through preset options or plugin options.

+
tip

Most Docusaurus users configure this plugin through the preset options.

+ +

If you use a preset, configure this plugin through the preset options:

docusaurus.config.js
module.exports = {
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: './src/css/custom.css',
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-classic.html.html b/docs/api/themes/@docusaurus/theme-classic.html.html new file mode 100644 index 0000000000..3da5db9e54 --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-classic.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-live-codeblock.html b/docs/api/themes/@docusaurus/theme-live-codeblock.html new file mode 100644 index 0000000000..d48c10b2a2 --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-live-codeblock.html @@ -0,0 +1,62 @@ + + + + + +📦 theme-live-codeblock | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 theme-live-codeblock

+

This theme provides a @theme/CodeBlock component that is powered by react-live. You can read more on interactive code editor documentation.

+
npm install --save @docusaurus/theme-live-codeblock
+

Configuration

+
docusaurus.config.js
export default {
plugins: ['@docusaurus/theme-live-codeblock'],
themeConfig: {
liveCodeBlock: {
/**
* The position of the live playground, above or under the editor
* Possible values: "top" | "bottom"
*/
playgroundPosition: 'bottom',
},
},
};
+ + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-live-codeblock.html.html b/docs/api/themes/@docusaurus/theme-live-codeblock.html.html new file mode 100644 index 0000000000..91b26d7fda --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-live-codeblock.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-mermaid.html b/docs/api/themes/@docusaurus/theme-mermaid.html new file mode 100644 index 0000000000..4d414475c2 --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-mermaid.html @@ -0,0 +1,62 @@ + + + + + +📦 theme-mermaid | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 theme-mermaid

+

This theme provides a @theme/Mermaid component that is powered by mermaid. You can read more on diagrams documentation.

+
npm install --save @docusaurus/theme-mermaid
+

Configuration

+
docusaurus.config.js
export default {
themes: ['@docusaurus/theme-mermaid'],
// In order for Mermaid code blocks in Markdown to work,
// you also need to enable the Remark plugin with this option
markdown: {
mermaid: true,
},
};
+ + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-mermaid.html.html b/docs/api/themes/@docusaurus/theme-mermaid.html.html new file mode 100644 index 0000000000..da5522aec8 --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-mermaid.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-search-algolia.html b/docs/api/themes/@docusaurus/theme-search-algolia.html new file mode 100644 index 0000000000..3688ca5c2c --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-search-algolia.html @@ -0,0 +1,62 @@ + + + + + +📦 theme-search-algolia | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

📦 theme-search-algolia

+

This theme provides a @theme/SearchBar component that integrates with Algolia DocSearch easily. Combined with @docusaurus/theme-classic, it provides a very easy search integration. You can read more on search documentation.

+
npm install --save @docusaurus/theme-search-algolia
+

This theme also adds search page available at /search (as swizzlable SearchPage component) path with OpenSearch support. You can change this default path via themeConfig.algolia.searchPagePath. Use false to disable search page.

+
tip

If you have installed @docusaurus/preset-classic, you don't need to install it as a dependency.

+ + \ No newline at end of file diff --git a/docs/api/themes/@docusaurus/theme-search-algolia.html.html b/docs/api/themes/@docusaurus/theme-search-algolia.html.html new file mode 100644 index 0000000000..ee3de25afe --- /dev/null +++ b/docs/api/themes/@docusaurus/theme-search-algolia.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/api/themes/configuration.html b/docs/api/themes/configuration.html new file mode 100644 index 0000000000..cb19c4ea70 --- /dev/null +++ b/docs/api/themes/configuration.html @@ -0,0 +1,229 @@ + + + + + +Theme configuration | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Theme configuration

+ +

This configuration applies to all main themes.

+

Common

+

Color mode

+

The classic theme provides by default light and dark mode support, with a navbar switch for the user.

+

It is possible to customize the color mode support within the colorMode object.

+

Accepted fields:

+
NameTypeDefaultDescription
defaultMode'light' | 'dark''light'The color mode when user first visits the site.
disableSwitchbooleanfalseHides the switch in the navbar. Useful if you want to support a single color mode.
respectPrefersColorSchemebooleanfalseWhether to use the prefers-color-scheme media-query, using user system preferences, instead of the hardcoded defaultMode.
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: false,
},
},
};
+
warning

With respectPrefersColorScheme: true, the defaultMode is overridden by user system preferences.

If you only want to support one color mode, you likely want to ignore user system preferences.

+

Meta image

+

You can configure a default image that will be used for your meta tag, in particular og:image and twitter:image.

+

Accepted fields:

+
NameTypeDefaultDescription
imagestringundefinedThe meta image URL for the site. Relative to your site's "static" directory. Cannot be SVGs. Can be external URLs too.
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
image: 'img/docusaurus.png',
},
};
+

Metadata

+

You can configure additional HTML metadata (and override existing ones).

+

Accepted fields:

+
NameTypeDefaultDescription
metadataMetadata[][]Any field will be directly passed to the <meta /> tag. Possible fields include id, name, property, content, itemprop, etc.
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
metadata: [{name: 'twitter:card', content: 'summary'}],
},
};
+

Announcement bar

+

Sometimes you want to announce something in your website. Just for such a case, you can add an announcement bar. This is a non-fixed and optionally dismissible panel above the navbar. All configuration are in the announcementBar object.

+

Accepted fields:

+
NameTypeDefaultDescription
idstring'announcement-bar'Any value that will identify this message.
contentstring''The text content of the announcement. HTML will be interpolated.
backgroundColorstring'#fff'Background color of the entire bar.
textColorstring'#000'Announcement text color.
isCloseablebooleantrueWhether this announcement can be dismissed with a '×' button.
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
announcementBar: {
id: 'support_us',
content:
'We are looking to revamp our docs, please fill <a target="_blank" rel="noopener noreferrer" href="#">this survey</a>',
backgroundColor: '#fafbfc',
textColor: '#091E42',
isCloseable: false,
},
},
};
+ +

Accepted fields:

+
NameTypeDefaultDescription
+ +

The logo can be placed in static folder. Logo URL is set to base URL of your site by default. Although you can specify your own URL for the logo, if it is an external link, it will open in a new tab. In addition, you can override a value for the target attribute of logo link, it can come in handy if you are hosting docs website in a subdirectory of your main website, and in which case you probably do not need a link in the logo to the main website will open in a new tab.

+

To improve dark mode support, you can also set a different logo for this mode.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
title: 'Site Title',
logo: {
alt: 'Site Logo',
src: 'img/logo.svg',
srcDark: 'img/logo_dark.svg',
href: 'https://docusaurus.io/',
target: '_self',
width: 32,
height: 32,
className: 'custom-navbar-logo-class',
style: {border: 'solid red'},
},
},
},
};
+ +

You can add items to the navbar via themeConfig.navbar.items.

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'doc',
position: 'left',
docId: 'introduction',
label: 'Docs',
},
{to: 'blog', label: 'Blog', position: 'left'},
{
type: 'docsVersionDropdown',
position: 'right',
},
{
type: 'localeDropdown',
position: 'right',
},
{
href: 'https://github.com/facebook/docusaurus',
position: 'right',
className: 'header-github-link',
'aria-label': 'GitHub repository',
},
],
},
},
};
+

The items can have different behaviors based on the type field. The sections below will introduce you to all the types of navbar items available.

+ +

By default, Navbar items are regular links (internal or external).

+

React Router should automatically apply active link styling to links, but you can use activeBasePath in edge cases. For cases in which a link should be active on several different paths (such as when you have multiple doc folders under the same sidebar), you can use activeBaseRegex. activeBaseRegex is a more flexible alternative to activeBasePath and takes precedence over it -- Docusaurus parses it into a regular expression that is tested against the current URL.

+

Outbound (external) links automatically get target="_blank" rel="noopener noreferrer" attributes.

+

Accepted fields:

+
NameTypeDefaultDescription
+
note

In addition to the fields above, you can specify other arbitrary attributes that can be applied to a HTML link.

+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
to: 'docs/introduction',
// Only one of "to" or "href" should be used
// href: 'https://www.facebook.com',
label: 'Introduction',
// Only one of "label" or "html" should be used
// html: '<b>Introduction</b>'
position: 'left',
activeBaseRegex: 'docs/(next|v8)',
target: '_blank',
},
],
},
},
};
+ +

Navbar items of the type dropdown has the additional items field, an inner array of navbar items.

+

Navbar dropdown items only accept the following "link-like" item types:

+ +

Note that the dropdown base item is a clickable link as well, so this item can receive any of the props of a plain navbar link.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'dropdown',
label: 'Community',
position: 'left',
items: [
{
label: 'Facebook',
href: 'https://www.facebook.com',
},
{
type: 'doc',
label: 'Social',
docId: 'social',
},
// ... more items
],
},
],
},
},
};
+ +

If you want to link to a specific doc, this special navbar item type will render the link to the doc of the provided docId. It will get the class navbar__link--active as long as you browse a doc of the same sidebar.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'doc',
position: 'left',
docId: 'introduction',
label: 'Docs',
},
],
},
},
};
+ +

You can link a navbar item to the first document link (which can be a doc link or a generated category index) of a given sidebar without having to hardcode a doc ID.

+

Accepted fields:

+
NameTypeDefaultDescription
+
tip

Use this navbar item type if your sidebar is updated often and the order is not stable.

+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'docSidebar',
position: 'left',
sidebarId: 'api',
label: 'API',
},
],
},
},
};
+
sidebars.js
export default {
tutorial: [
{
type: 'autogenerated',
dirName: 'guides',
},
],
api: [
'cli', // The navbar item will be linking to this doc
'docusaurus-core',
{
type: 'autogenerated',
dirName: 'api',
},
],
};
+ +

If you use docs with versioning, this special navbar item type that will render a dropdown with all your site's available versions.

+

The user will be able to switch from one version to another, while staying on the same doc (as long as the doc ID is constant across versions).

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersionDropdown',
position: 'left',
dropdownItemsAfter: [{to: '/versions', label: 'All versions'}],
dropdownActiveClassDisabled: true,
},
],
},
},
};
+ +

If you use docs with versioning, this special navbar item type will link to the active/browsed version of your doc (depends on the current URL), and fallback to the latest version.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersion',
position: 'left',
to: '/path',
label: 'label',
},
],
},
},
};
+ +

If you use the i18n feature, this special navbar item type will render a dropdown with all your site's available locales.

+

The user will be able to switch from one locale to another, while staying on the same page.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'localeDropdown',
position: 'left',
dropdownItemsAfter: [
{
to: 'https://my-site.com/help-us-translate',
label: 'Help us translate',
},
],
},
],
},
},
};
+ +

If you use the search, the search bar will be the rightmost element in the navbar.

+

However, with this special navbar item type, you can change the default location.

+
NameTypeDefaultDescription
+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'search',
position: 'right',
},
],
},
},
};
+ +

You can also render your own HTML markup inside a navbar item using this navbar item type.

+
NameTypeDefaultDescription
+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'html',
position: 'right',
value: '<button>Give feedback</button>',
},
],
},
},
};
+

Auto-hide sticky navbar

+

You can enable this cool UI feature that automatically hides the navbar when a user starts scrolling down the page, and show it again when the user scrolls up.

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
hideOnScroll: true,
},
},
};
+ +

You can set the static Navbar style without disabling the theme switching ability. The selected style will always apply no matter which theme user have selected.

+

Currently, there are two possible style options: dark and primary (based on the --ifm-color-primary color). You can see the styles preview in the Infima documentation.

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
style: 'primary',
},
},
};
+

CodeBlock

+

Docusaurus uses Prism React Renderer to highlight code blocks. All configuration are in the prism object.

+

Accepted fields:

+
NameTypeDefaultDescription
themePrismThemepalenightThe Prism theme to use for light-theme code blocks.
darkThemePrismThemepalenightThe Prism theme to use for dark-theme code blocks.
defaultLanguagestringundefinedThe default language to use for code blocks not declaring any explicit language.
magicCommentsMagicCommentConfig[]see belowThe list of magic comments.
+
type MagicCommentConfig = {
className: string;
line?: string;
block?: {start: string; end: string};
};
+
const defaultMagicComments = [
{
className: 'theme-code-block-highlighted-line',
line: 'highlight-next-line',
block: {start: 'highlight-start', end: 'highlight-end'},
},
];
+

Theme

+

By default, we use Palenight as syntax highlighting theme. You can specify a custom theme from the list of available themes. You may also use a different syntax highlighting theme when the site is in dark mode.

+

Example configuration:

+
docusaurus.config.js
import {themes as prismThemes} from 'prism-react-renderer';

export default {
themeConfig: {
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
},
},
};
+
note

If you use the line highlighting Markdown syntax, you might need to specify a different highlight background color for the dark mode syntax highlighting theme. Refer to the docs for guidance.

+

Default language

+

You can set a default language for code blocks if no language is added after the opening triple backticks (i.e. ```). Note that a valid language name must be passed.

+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
prism: {
defaultLanguage: 'javascript',
},
},
};
+ +

You can add logo and a copyright to the footer via themeConfig.footer. Logo can be placed in static folder. Logo URL works in the same way of the navbar logo.

+

Accepted fields:

+
NameTypeDefaultDescription
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
footer: {
logo: {
alt: 'Meta Open Source Logo',
src: 'img/meta_oss_logo.png',
href: 'https://opensource.fb.com',
width: 160,
height: 51,
},
copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,
},
},
};
+ +

You can add links to the footer via themeConfig.footer.links. There are two types of footer configurations: multi-column footers and simple footers.

+

Multi-column footer links have a title and a list of FooterItems for each column.

+
NameTypeDefaultDescription
+

Accepted fields of each FooterItem:

+
NameTypeDefaultDescription
+

Example multi-column configuration:

+
docusaurus.config.js
export default {
footer: {
links: [
{
title: 'Docs',
items: [
{
label: 'Style Guide',
to: 'docs/',
},
{
label: 'Second Doc',
to: 'docs/doc2/',
},
],
},
{
title: 'Community',
items: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
},
{
label: 'Discord',
href: 'https://discordapp.com/invite/docusaurus',
},
{
label: 'Twitter',
href: 'https://twitter.com/docusaurus',
},
{
html: `
<a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">
<img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51" />
</a>
`,
},
],
},
],
},
};
+

A simple footer just has a list of FooterItems displayed in a row.

+

Example simple configuration:

+
docusaurus.config.js
export default {
footer: {
links: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
},
{
label: 'Discord',
href: 'https://discordapp.com/invite/docusaurus',
},
{
label: 'Twitter',
href: 'https://twitter.com/docusaurus',
},
{
html: `
<a href="https://www.netlify.com" target="_blank" rel="noreferrer noopener" aria-label="Deploys by Netlify">
<img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" width="114" height="51" />
</a>
`,
},
],
},
};
+

Table of Contents

+

You can adjust the default table of contents via themeConfig.tableOfContents.

+
NameTypeDefaultDescription
minHeadingLevelnumber2The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value.
maxHeadingLevelnumber3Max heading level displayed in the TOC. Should be an integer between 2 and 6.
+

Example configuration:

+
docusaurus.config.js
export default {
themeConfig: {
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 5,
},
},
};
+

Hooks

+

useColorMode

+

A React hook to access the color context. This context contains functions for setting light and dark mode and exposes boolean variable, indicating which mode is currently in use.

+

Usage example:

+
import React from 'react';
import {useColorMode} from '@docusaurus/theme-common';

const Example = () => {
const {colorMode, setColorMode} = useColorMode();

return <h1>Dark mode is now {colorMode === 'dark' ? 'on' : 'off'}</h1>;
};
+
note

The component calling useColorMode must be a child of the Layout component.

function ExamplePage() {
return (
<Layout>
<Example />
</Layout>
);
}
+

i18n

+

Read the i18n introduction first.

+

Translation files location

+
    +
  • Base path: website/i18n/[locale]/docusaurus-theme-[themeName]
  • +
  • Multi-instance path: N/A
  • +
  • JSON files: extracted with docusaurus write-translations
  • +
  • Markdown files: N/A
  • +
+

Example file-system structure

+
website/i18n/[locale]/docusaurus-theme-classic

# translations for the theme
├── navbar.json
└── footer.json
+ + \ No newline at end of file diff --git a/docs/api/themes/configuration.html.html b/docs/api/themes/configuration.html.html new file mode 100644 index 0000000000..e02df5403c --- /dev/null +++ b/docs/api/themes/configuration.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/blog.html b/docs/blog.html new file mode 100644 index 0000000000..73f691e5e3 --- /dev/null +++ b/docs/blog.html @@ -0,0 +1,133 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Blog

+ +

The blog feature enables you to deploy a full-featured blog in no time.

+
info

Check the Blog Plugin API Reference documentation for an exhaustive list of options.

+

Initial setup

+

To set up your site's blog, start by creating a blog directory.

+

Then, add an item link to your blog within docusaurus.config.js:

+
docusaurus.config.js
export default {
themeConfig: {
// ...
navbar: {
items: [
// ...
{to: 'blog', label: 'Blog', position: 'left'}, // or position: 'right'
],
},
},
};
+

Adding posts

+

To publish in the blog, create a Markdown file within the blog directory.

+

For example, create a file at website/blog/2019-09-05-hello-docusaurus.md:

+
website/blog/2019-09-05-hello-docusaurus.md
---
title: Welcome Docusaurus
description: This is my first post on Docusaurus.
slug: welcome-docusaurus-v2
authors:
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
- name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
tags: [hello, docusaurus-v2]
image: https://i.imgur.com/mErPwqL.png
hide_table_of_contents: false
---

Welcome to this blog. This blog is created with [**Docusaurus 2**](https://docusaurus.io/).

<!-- truncate -->

This is my first post on Docusaurus 2.

A whole bunch of exploration to follow.
+

The front matter is useful to add more metadata to your blog post, for example, author information, but Docusaurus will be able to infer all necessary metadata without the front matter. For all possible fields, see the API documentation.

+

Blog list

+

The blog's index page (by default, it is at /blog) is the blog list page, where all blog posts are collectively displayed.

+

Use the <!--truncate--> marker in your blog post to represent what will be shown as the summary when viewing all published blog posts. Anything above <!--truncate--> will be part of the summary. Note that the portion above the truncate marker must be standalone renderable Markdown. For example:

+
website/blog/my-post.md
---
title: Markdown blog truncation example
---

All these will be part of the blog post summary.

<!-- truncate -->

But anything from here on down will not be.
+

For files using the .mdx extension, use a MDX comment {/* truncate */} instead:

+ +
website/blog/my-post.mdx
---
title: MDX blog truncation Example
---

All these will be part of the blog post summary.

{/* truncate */}

But anything from here on down will not be.
+

By default, 10 posts are shown on each blog list page, but you can control pagination with the postsPerPage option in the plugin configuration. If you set postsPerPage: 'ALL', pagination will be disabled and all posts will be displayed on the first page. You can also add a meta description to the blog list page for better SEO:

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
blogTitle: 'Docusaurus blog!',
blogDescription: 'A Docusaurus powered blog!',
postsPerPage: 'ALL',
},
},
],
],
};
+

Blog sidebar

+

The blog sidebar displays recent blog posts. The default number of items shown is 5, but you can customize with the blogSidebarCount option in the plugin configuration. By setting blogSidebarCount: 0, the sidebar will be completely disabled, with the container removed as well. This will increase the width of the main container. Specially, if you have set blogSidebarCount: 'ALL', all posts will be displayed.

+

You can also alter the sidebar heading text with the blogSidebarTitle option. For example, if you have set blogSidebarCount: 'ALL', instead of the default "Recent posts", you may rather make it say "All posts":

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
blogSidebarTitle: 'All posts',
blogSidebarCount: 'ALL',
},
},
],
],
};
+

Blog post date

+

Docusaurus will extract a YYYY-MM-DD date from many patterns such as YYYY-MM-DD-my-blog-post-title.md or YYYY/MM/DD/my-blog-post-title.md. This enables you to easily group blog posts by year, by month, or to use a flat structure.

+
Supported date extraction patterns
PatternExample
Single file2021-05-28-my-blog-post-title.md
MDX file2021-05-28-my-blog-post-title.mdx
Single folder + index.md2021-05-28-my-blog-post-title/index.md
Folder named by date2021-05-28/my-blog-post-title.md
Nested folders by date2021/05/28/my-blog-post-title.md
Partially nested folders by date2021/05-28-my-blog-post-title.md
Nested folders + index.md2021/05/28/my-blog-post-title/index.md
Date in the middle of pathcategory/2021/05-28-my-blog-post-title.md

Docusaurus can extract the date from the posts using any of the naming patterns above. It is advisable to choose one pattern and apply it to all posts to avoid confusion.

+
tip

Using a folder can be convenient to co-locate blog post images alongside the Markdown file.

+

This naming convention is optional, and you can also provide the date as front matter. Since the front matter follows YAML syntax where the datetime notation is supported, you can use front matter if you need more fine-grained publish dates. For example, if you have multiple posts published on the same day, you can order them according to the time of the day:

+
earlier-post.md
---
date: 2021-09-13T10:00
---
+
later-post.md
---
date: 2021-09-13T18:00
---
+

Blog post authors

+

Use the authors front matter field to declare blog post authors. An author should have at least a name or an image_url. Docusaurus uses information like url, email, and title, but any other information is allowed.

+

Inline authors

+

Blog post authors can be declared directly inside the front matter:

+
my-blog-post.md
---
authors:
name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
email: jimarcey@gmail.com
---
+
tip

This option works best to get started, or for casual, irregular authors.

+
info

Prefer using the authors front matter, but the legacy author_* front matter remains supported:

my-blog-post.md
---
author: Joel Marcey
author_title: Co-creator of Docusaurus 1
author_url: https://github.com/JoelMarcey
author_image_url: https://github.com/JoelMarcey.png
---
+

Global authors

+

For regular blog post authors, it can be tedious to maintain authors' information inlined in each blog post.

+

It is possible to declare those authors globally in a configuration file:

+
website/blog/authors.yml
jmarcey:
name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
email: jimarcey@gmail.com

slorber:
name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
+
tip

Use the authorsMapPath plugin option to configure the path. JSON is also supported.

+

In blog posts front matter, you can reference the authors declared in the global configuration file:

+
my-blog-post.md
---
authors: jmarcey
---
+
info

The authors system is very flexible and can suit more advanced use-case:

Mix inline authors and global authors

You can use global authors most of the time, and still use inline authors:

my-blog-post.md
---
authors:
- jmarcey
- slorber
- name: Inline Author name
title: Inline Author Title
url: https://github.com/inlineAuthor
image_url: https://github.com/inlineAuthor
---
Local override of global authors

You can customize the global author's data on per-blog-post basis:

my-blog-post.md
---
authors:
- key: jmarcey
title: Joel Marcey's new title
- key: slorber
name: Sébastien Lorber's new name
---
Localize the author's configuration file

The configuration file can be localized, just create a localized copy of it at:

website/i18n/[locale]/docusaurus-plugin-content-blog/authors.yml
+

An author, either declared through front matter or through the authors map, needs to have a name or an avatar, or both. If all authors of a post don't have names, Docusaurus will display their avatars compactly. See this test post for the effect.

+
Feed generation

RSS feeds require the author's email to be set for the author to appear in the feed.

+

Reading time

+

Docusaurus generates a reading time estimation for each blog post based on word count. We provide an option to customize this.

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
showReadingTime: true, // When set to false, the "x min read" won't be shown
readingTime: ({content, frontMatter, defaultReadingTime}) =>
defaultReadingTime({content, options: {wordsPerMinute: 300}}),
},
},
],
],
};
+

The readingTime callback receives three parameters: the blog content text as a string, front matter as a record of string keys and their values, and the default reading time function. It returns a number (reading time in minutes) or undefined (disable reading time for this page).

+

The default reading time is able to accept additional options: wordsPerMinute as a number (default: 300), and wordBound as a function from string to boolean. If the string passed to wordBound should be a word bound (spaces, tabs, and line breaks by default), the function should return true.

+
tip

Use the callback for all your customization needs:

Disable reading time on one page:

docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
showReadingTime: true,
readingTime: ({content, frontMatter, defaultReadingTime}) =>
frontMatter.hide_reading_time
? undefined
: defaultReadingTime({content}),
},
},
],
],
};

Usage:

---
hide_reading_time: true
---

This page will no longer display the reading time stats!
+

Feed

+

You can generate RSS / Atom / JSON feed by passing feedOptions. By default, RSS and Atom feeds are generated. To disable feed generation, set feedOptions.type to null.

+
type FeedType = 'rss' | 'atom' | 'json';

type BlogOptions = {
feedOptions?: {
type?: FeedType | 'all' | FeedType[] | null;
title?: string;
description?: string;
copyright: string;
language?: string; // possible values: http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
limit?: number | false | null; // defaults to 20
/** Allow control over the construction of BlogFeedItems */
createFeedItems?: (params: {
blogPosts: BlogPost[];
siteConfig: DocusaurusConfig;
outDir: string;
defaultCreateFeedItems: (params: {
blogPosts: BlogPost[];
siteConfig: DocusaurusConfig;
outDir: string;
}) => Promise<BlogFeedItem[]>;
}) => Promise<BlogFeedItem[]>;
};
};
+

Example usage:

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
feedOptions: {
type: 'all',
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`,
createFeedItems: async (params) => {
const {blogPosts, defaultCreateFeedItems, ...rest} = params;
return defaultCreateFeedItems({
// keep only the 10 most recent blog posts in the feed
blogPosts: blogPosts.filter((item, index) => index < 10),
...rest,
});
},
},
},
},
],
],
};
+

The feeds can be found at:

+
https://example.com/blog/rss.xml
+

Advanced topics

+

Blog-only mode

+

You can run your Docusaurus site without a dedicated landing page and instead have your blog's post list page as the index page. Set the routeBasePath to be '/' to serve the blog through the root route example.com/ instead of the subroute example.com/blog/.

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: false, // Optional: disable the docs plugin
blog: {
routeBasePath: '/', // Serve the blog at the site's root
/* other blog options */
},
},
],
],
};
+
warning

Don't forget to delete the existing homepage at ./src/pages/index.js or else there will be two files mapping to the same route!

+
warning

If you disable the docs plugin, don't forget to delete references to the docs plugin elsewhere in your configuration file. Notably, make sure to remove the docs-related navbar items.

+
tip

There's also a "Docs-only mode" for those who only want to use the docs. Read Docs-only mode for detailed instructions or a more elaborate explanation of routeBasePath.

+

Multiple blogs

+

By default, the classic theme assumes only one blog per website and hence includes only one instance of the blog plugin. If you would like to have multiple blogs on a single website, it's possible too! You can add another blog by specifying another blog plugin in the plugins option for docusaurus.config.js.

+

Set the routeBasePath to the URL route that you want your second blog to be accessed on. Note that the routeBasePath here has to be different from the first blog or else there could be a collision of paths! Also, set path to the path to the directory containing your second blog's entries.

+

As documented for multi-instance plugins, you need to assign a unique ID to the plugins.

+
docusaurus.config.js
export default {
// ...
plugins: [
[
'@docusaurus/plugin-content-blog',
{
/**
* Required for any multi-instance plugin
*/
id: 'second-blog',
/**
* URL route for the blog section of your site.
* *DO NOT* include a trailing slash.
*/
routeBasePath: 'my-second-blog',
/**
* Path to data on filesystem relative to site dir.
*/
path: './my-second-blog',
},
],
],
};
+

As an example, we host a second blog here.

+ + \ No newline at end of file diff --git a/docs/blog.html.html b/docs/blog.html.html new file mode 100644 index 0000000000..cd4654d1ff --- /dev/null +++ b/docs/blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/browser-support.html b/docs/browser-support.html new file mode 100644 index 0000000000..787477a8cd --- /dev/null +++ b/docs/browser-support.html @@ -0,0 +1,87 @@ + + + + + +Browser support | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Browser support

+

Docusaurus allows sites to define the list of supported browsers through a browserslist configuration.

+

Purpose

+

Websites need to balance between backward compatibility and bundle size. As old browsers do not support modern APIs or syntax, more code is needed to implement the same functionality.

+

For example, you may use the optional chaining syntax:

+
const value = obj?.prop?.val;
+

...which unfortunately is only recognized by browser versions released after 2020. To be compatible with earlier browser versions, when building your site for production, our JS loader will transpile your code to a more verbose syntax:

+
var _obj, _obj$prop;

const value =
(_obj = obj) === null || _obj === void 0
? void 0
: (_obj$prop = _obj.prop) === null || _obj$prop === void 0
? void 0
: _obj$prop.val;
+

However, this penalizes all other users with increased site load time because the 29-character line now becomes 168 characters—a 6-fold increase! (In practice, it will be better because the names used will be shorter.) As a tradeoff, the JS loader only transpiles the syntax to the degree that's supported by all browser versions defined in the browser list.

+

The browser list by default is provided through the package.json file as a root browserslist field.

+
warning

On old browsers, the compiled output will use unsupported (too recent) JS syntax, causing React to fail to initialize and end up with a static website with only HTML/CSS and no JS.

+

Default values

+

Websites initialized with the default classic template has the following in package.json:

+
package.json
{
"name": "docusaurus",
// ...
"browserslist": {
"production": [">0.5%", "not dead", "not op_mini all"],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
// ...
}
+

Explained in natural language, the browsers supported in production are those:

+
    +
  • With more than 0.5% of market share; and
  • +
  • Has official support or updates in the past 24 months (the opposite of "dead"); and
  • +
  • Is not Opera Mini.
  • +
+

And browsers used in development are:

+
    +
  • The latest version of Chrome or Firefox or Safari.
  • +
+

You can "evaluate" any config with the browserslist CLI to obtain the actual list:

+
npx browserslist --env="production"
+

The output is all browsers supported in production. Below is the output in January 2022:

+
and_chr 96
and_uc 12.12
chrome 96
chrome 95
chrome 94
edge 96
firefox 95
firefox 94
ie 11
ios_saf 15.2
ios_saf 15.0-15.1
ios_saf 14.5-14.8
ios_saf 14.0-14.4
ios_saf 12.2-12.5
opera 82
opera 81
safari 15.1
safari 14.1
safari 13.1
+

Read more

+

You may wish to visit the browserslist documentation for more specifications, especially the accepted query values and best practices.

+ + \ No newline at end of file diff --git a/docs/browser-support.html.html b/docs/browser-support.html.html new file mode 100644 index 0000000000..fb66dae75d --- /dev/null +++ b/docs/browser-support.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/category/getting-started.html b/docs/category/getting-started.html new file mode 100644 index 0000000000..236b6c991f --- /dev/null +++ b/docs/category/getting-started.html @@ -0,0 +1,58 @@ + + + + + +Getting Started | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/category/getting-started.html.html b/docs/category/getting-started.html.html new file mode 100644 index 0000000000..032ff472d8 --- /dev/null +++ b/docs/category/getting-started.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/category/guides.html b/docs/category/guides.html new file mode 100644 index 0000000000..38c5a62ef7 --- /dev/null +++ b/docs/category/guides.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus Guides | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus Guides

Let's learn about the most important Docusaurus concepts!

Want to implement the same page? Read the generated index page guide to find out!

+ + \ No newline at end of file diff --git a/docs/category/guides.html.html b/docs/category/guides.html.html new file mode 100644 index 0000000000..ce943d66f0 --- /dev/null +++ b/docs/category/guides.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/category/tutorial---basics/index.html b/docs/category/tutorial---basics/index.html deleted file mode 100644 index 48a9f3289f..0000000000 --- a/docs/category/tutorial---basics/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Tutorial - Basics | My Site - - - - - - - - \ No newline at end of file diff --git a/docs/category/tutorial---extras/index.html b/docs/category/tutorial---extras/index.html deleted file mode 100644 index 42de5e6ec1..0000000000 --- a/docs/category/tutorial---extras/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -Tutorial - Extras | My Site - - - - - - - - \ No newline at end of file diff --git a/docs/cli.html b/docs/cli.html new file mode 100644 index 0000000000..dcb56f2f7a --- /dev/null +++ b/docs/cli.html @@ -0,0 +1,115 @@ + + + + + +CLI | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

CLI

+

Docusaurus provides a set of scripts to help you generate, serve, and deploy your website.

+

Once your website is bootstrapped, the website source will contain the Docusaurus scripts that you can invoke with your package manager:

+
package.json
{
// ...
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
}
}
+

Docusaurus CLI commands

+

Below is a list of Docusaurus CLI commands and their usages:

+

docusaurus start [siteDir]

+

Builds and serves a preview of your site locally with Webpack Dev Server.

+

Options

+
NameDefaultDescription
--port3000Specifies the port of the dev server.
--hostlocalhostSpecify a host to use. For example, if you want your server to be accessible externally, you can use --host 0.0.0.0.
--localeSpecify site locale to be used.
--hot-onlyfalseEnables Hot Module Replacement without page refresh as a fallback in case of build failures. More information here.
--no-openfalseDo not open the page automatically in the browser.
--configundefinedPath to Docusaurus config file, default to [siteDir]/docusaurus.config.js
--poll [optionalIntervalMs]falseUse polling of files rather than watching for live reload as a fallback in environments where watching doesn't work. More information here.
--no-minifyfalseBuild website without minimizing JS/CSS bundles.
+
info

Please note that some functionality (for example, anchor links) will not work in development. The functionality will work as expected in production.

+
Development over network

When forwarding port 3000 from a remote server or VM (e.g. GitHub Codespaces), you can run the dev server on 0.0.0.0 to make it listen on the local IP.

npm run start -- --host 0.0.0.0
+

Enabling HTTPS

+

There are multiple ways to obtain a certificate. We will use mkcert as an example.

+
    +
  1. +

    Run mkcert localhost to generate localhost.pem + localhost-key.pem

    +
  2. +
  3. +

    Run mkcert -install to install the cert in your trust store, and restart your browser

    +
  4. +
  5. +

    Start the app with Docusaurus HTTPS env variables:

    +
  6. +
+
HTTPS=true SSL_CRT_FILE=localhost.pem SSL_KEY_FILE=localhost-key.pem yarn start
+
    +
  1. Open https://localhost:3000/
  2. +
+

docusaurus build [siteDir]

+

Compiles your site for production.

+

Options

+
NameDefaultDescription
--devBuilds the website in dev mode, including full React error messages.
--bundle-analyzerfalseAnalyze your bundle with the webpack bundle analyzer.
--out-dirbuildThe full path for the new output directory, relative to the current workspace.
--configundefinedPath to Docusaurus config file, default to [siteDir]/docusaurus.config.js
--localeBuild the site in the specified locale. If not specified, all known locales are built.
--no-minifyfalseBuild website without minimizing JS/CSS bundles.
+
info

For advanced minification of CSS bundle, we use the advanced cssnano preset (along with additional several PostCSS plugins) and level 2 optimization of clean-css. If as a result of this advanced CSS minification you find broken CSS, build your website with the environment variable USE_SIMPLE_CSS_MINIFIER=true to minify CSS with the default cssnano preset. Please fill out an issue if you experience CSS minification bugs.

You can skip the HTML minification with the environment variable SKIP_HTML_MINIFICATION=true.

+

docusaurus swizzle [themeName] [componentName] [siteDir]

+

Swizzle a theme component to customize it.

+
npm run swizzle [themeName] [componentName] [siteDir]

# Example (leaving out the siteDir to indicate this directory)
npm run swizzle @docusaurus/theme-classic Footer -- --eject
+

The swizzle CLI is interactive and will guide you through the whole swizzle process.

+

Options

+
NameDescription
themeNameThe name of the theme to swizzle from.
componentNameThe name of the theme component to swizzle.
--listDisplay components available for swizzling
--ejectEject the theme component
--wrapWrap the theme component
--dangerAllow immediate swizzling of unsafe components
--typescriptSwizzle the TypeScript variant component
--configPath to docusaurus config file, default to [siteDir]/docusaurus.config.js
+
warning

Unsafe components have a higher risk of breaking changes due to internal refactorings.

+

docusaurus deploy [siteDir]

+

Deploys your site with GitHub Pages. Check out the docs on deployment for more details.

+

Options

+
NameDefaultDescription
--localeDeploy the site in the specified locale. If not specified, all known locales are deployed.
--out-dirbuildThe full path for the new output directory, relative to the current workspace.
--skip-buildfalseDeploy website without building it. This may be useful when using a custom deploy script.
--target-dirfalseTODO
--configundefinedPath to Docusaurus config file, default to [siteDir]/docusaurus.config.js
+

docusaurus serve [siteDir]

+

Serve your built website locally.

+
NameDefaultDescription
--port3000Use specified port
--dirbuildThe full path for the output directory, relative to the current workspace
--buildfalseBuild website before serving
--configundefinedPath to Docusaurus config file, default to [siteDir]/docusaurus.config.js
--hostlocalhostSpecify a host to use. For example, if you want your server to be accessible externally, you can use --host 0.0.0.0.
--no-openfalse locally, true in CIDo not open a browser window to the server location.
+

docusaurus clear [siteDir]

+

Clear a Docusaurus site's generated assets, caches, build artifacts.

+

We recommend running this command before reporting bugs, after upgrading versions, or anytime you have issues with your Docusaurus site.

+

docusaurus write-translations [siteDir]

+

Write the JSON translation files that you will have to translate.

+

By default, the files are written in website/i18n/<defaultLocale>/....

+
NameDefaultDescription
--locale<defaultLocale>Define which locale folder you want to write translations the JSON files in
--overridefalseOverride existing translation messages
--configundefinedPath to Docusaurus config file, default to [siteDir]/docusaurus.config.js
--messagePrefix''Allows adding a prefix to each translation message, to help you highlight untranslated strings
+

docusaurus write-heading-ids [siteDir] [files]

+

Add explicit heading IDs to the Markdown documents of your site.

+
NameDefaultDescription
filesAll MD files used by pluginsThe files that you want heading IDs to be written to.
--maintain-casefalseKeep the headings' casing, otherwise make all lowercase.
--overwritefalseOverwrite existing heading IDs.
+ + \ No newline at end of file diff --git a/docs/cli.html.html b/docs/cli.html.html new file mode 100644 index 0000000000..31f752e40e --- /dev/null +++ b/docs/cli.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/configuration.html b/docs/configuration.html new file mode 100644 index 0000000000..4c210dc450 --- /dev/null +++ b/docs/configuration.html @@ -0,0 +1,120 @@ + + + + + +Configuration | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Configuration

+ +
info

Check the docusaurus.config.js API reference for an exhaustive list of options.

+

Docusaurus has a unique take on configurations. We encourage you to congregate information about your site into one place. We guard the fields of this file and facilitate making this data object accessible across your site.

+

Keeping a well-maintained docusaurus.config.js helps you, your collaborators, and your open source contributors to be able to focus on documentation while still being able to customize the site.

+

Syntax to declare docusaurus.config.js

+

The docusaurus.config.js file is run in Node.js and should export either:

+
    +
  • a config object
  • +
  • a function that creates the config object
  • +
+
info

The docusaurus.config.js file supports:

Constraints:

    +
  • Required: use export default /* your config*/ (or module.exports to export your Docusaurus config
  • +
  • Optional: use import Lib from 'lib' (or require('lib')) to import Node.js packages
  • +
+

Docusaurus gives us the ability to declare its configuration in various equivalent ways, and all the following config examples lead to the exact same result:

+
docusaurus.config.js
export default {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
+
docusaurus.config.js
module.exports = {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';

export default {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
} satisfies Config;
+
docusaurus.config.js
const config = {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};

export default config;
+
docusaurus.config.js
export default function configCreator() {
return {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
}
+
docusaurus.config.js
export default async function createConfigAsync() {
return {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
}
+
Using ESM-only packages

Using an async config creator can be useful to import ESM-only modules (notably most Remark plugins). It is possible to import such modules thanks to dynamic imports:

docusaurus.config.js
export default async function createConfigAsync() {
// Use a dynamic import instead of require('esm-lib')
const lib = await import('lib');

return {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// rest of your site config...
};
}
+

What goes into a docusaurus.config.js?

+

You should not have to write your docusaurus.config.js from scratch even if you are developing your site. All templates come with a docusaurus.config.js that includes defaults for the common options.

+

However, it can be helpful if you have a high-level understanding of how the configurations are designed and implemented.

+

The high-level overview of Docusaurus configuration can be categorized into:

+ +

Site metadata

+

Site metadata contains the essential global metadata such as title, url, baseUrl, and favicon.

+

They are used in several places such as your site's title and headings, browser tab icon, social sharing (Facebook, Twitter) information or even to generate the correct path to serve your static files.

+

Deployment configurations

+

Deployment configurations such as projectName, organizationName, and optionally deploymentBranch are used when you deploy your site with the deploy command.

+

It is recommended to check the deployment docs for more information.

+

Theme, plugin, and preset configurations

+

List the themes, plugins, and presets for your site in the themes, plugins, and presets fields, respectively. These are typically npm packages:

+
docusaurus.config.js
export default {
// ...
plugins: [
'@docusaurus/plugin-content-blog',
'@docusaurus/plugin-content-pages',
],
themes: ['@docusaurus/theme-classic'],
};
+
tip

Docusaurus supports module shorthands, allowing you to simplify the above configuration as:

docusaurus.config.js
export default {
// ...
plugins: ['content-blog', 'content-pages'],
themes: ['classic'],
};
+

They can also be loaded from local directories:

+
docusaurus.config.js
import path from 'path';

export default {
// ...
themes: [path.resolve(__dirname, '/path/to/docusaurus-local-theme')],
};
+

To specify options for a plugin or theme, replace the name of the plugin or theme in the config file with an array containing the name and an options object:

+
docusaurus.config.js
export default {
// ...
plugins: [
[
'content-blog',
{
path: 'blog',
routeBasePath: 'blog',
include: ['*.md', '*.mdx'],
// ...
},
],
'content-pages',
],
};
+

To specify options for a plugin or theme that is bundled in a preset, pass the options through the presets field. In this example, docs refers to @docusaurus/plugin-content-docs and theme refers to @docusaurus/theme-classic.

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarPath: './sidebars.js',
},
theme: {
customCss: ['./src/css/custom.css'],
},
},
],
],
};
+
tip

The presets: [['classic', {...}]] shorthand works as well.

+

For further help configuring themes, plugins, and presets, see Using Plugins.

+

Custom configurations

+

Docusaurus guards docusaurus.config.js from unknown fields. To add custom fields, define them in customFields.

+

Example:

+
docusaurus.config.js
export default {
// ...
customFields: {
image: '',
keywords: [],
},
// ...
};
+

Accessing configuration from components

+

Your configuration object will be made available to all the components of your site. And you may access them via React context as siteConfig.

+

Basic example:

+
import React from 'react';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';

const Hello = () => {
const {siteConfig} = useDocusaurusContext();
const {title, tagline} = siteConfig;

return <div>{`${title} · ${tagline}`}</div>;
};
+
tip

If you just want to use those fields on the client side, you could create your own JS files and import them as ES6 modules, there is no need to put them in docusaurus.config.js.

+

Customizing Babel Configuration

+

For new Docusaurus projects, we automatically generated a babel.config.js in the project root.

+
babel.config.js
export default {
presets: ['@docusaurus/core/lib/babel/preset'],
};
+

Most of the time, this configuration will work just fine. If you want to customize your Babel configuration (e.g. to add support for Flow), you can directly edit this file. For your changes to take effect, you need to restart the Docusaurus dev server.

+ + \ No newline at end of file diff --git a/docs/configuration.html.html b/docs/configuration.html.html new file mode 100644 index 0000000000..ec781a2260 --- /dev/null +++ b/docs/configuration.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/create-doc.html b/docs/create-doc.html new file mode 100644 index 0000000000..3374dfd5a8 --- /dev/null +++ b/docs/create-doc.html @@ -0,0 +1,101 @@ + + + + + +Create a doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Create a doc

+

Create a Markdown file, greeting.md, and place it under the docs directory.

+
website # root directory of your site
├── docs
│ └── greeting.md
├── src
│ └── pages
├── docusaurus.config.js
├── ...
+
---
description: Create a doc page with rich content.
---

# Hello from Docusaurus

Are you ready to create the documentation site for your open source project?

## Headers

will show up on the table of contents on the upper right

So that your users will know what this page is all about without scrolling down or even without reading too much.

## Only h2 and h3 will be in the TOC by default.

You can configure the TOC heading levels either per-document or in the theme configuration.

The headers are well-spaced so that the hierarchy is clear.

- lists will help you
- present the key points
- that you want your users to remember
- and you may nest them
- multiple times
+
note

All files prefixed with an underscore (_) under the docs directory are treated as "partial" pages and will be ignored by default.

Read more about importing partial pages.

+

Doc front matter

+

The front matter is used to provide additional metadata for your doc page. Front matter is optional—Docusaurus will be able to infer all necessary metadata without the front matter. For example, the doc tags feature introduced below requires using front matter. For all possible fields, see the API documentation.

+

Doc tags

+

Optionally, you can add tags to your doc pages, which introduces another dimension of categorization in addition to the docs sidebar. Tags are passed in the front matter as a list of labels:

+
---
id: doc-with-tags
title: A doc with tags
tags:
- Demo
- Getting started
---
+
tip

Tags can also be declared with tags: [Demo, Getting started].

Read more about all the possible Yaml array syntaxes.

+

Organizing folder structure

+

How the Markdown files are arranged under the docs folder can have multiple impacts on Docusaurus content generation. However, most of them can be decoupled from the file structure.

+

Document ID

+

Every document has a unique id. By default, a document id is the name of the document (without the extension) relative to the root docs directory.

+

For example, the ID of greeting.md is greeting, and the ID of guide/hello.md is guide/hello.

+
website # Root directory of your site
└── docs
├── greeting.md
└── guide
└── hello.md
+

However, the last part of the id can be defined by the user in the front matter. For example, if guide/hello.md's content is defined as below, its final id is guide/part1.

+
---
id: part1
---

Lorem ipsum
+

The ID is used to refer to a document when hand-writing sidebars, or when using docs-related layout components or hooks.

+

Doc URLs

+

By default, a document's URL location is its file path relative to the docs folder, with a few exceptions. Namely, if a file is named one the following, the file name won't be included in the URL:

+
    +
  • Named as index (case-insensitive): docs/Guides/index.md
  • +
  • Named as README (case-insensitive): docs/Guides/README.mdx
  • +
  • Same name as parent folder: docs/Guides/Guides.md
  • +
+

In all cases, the default slug would only be /Guides, without the /index, /README, or duplicate /Guides segment.

+
note

This convention is exactly the same as the category index convention. However, the isCategoryIndex configuration does not affect the document URL.

+

Use the slug front matter to change a document's URL.

+

For example, suppose your site structure looks like this:

+
website # Root directory of your site
└── docs
└── guide
└── hello.md
+

By default hello.md will be available at /docs/guide/hello. You can change its URL location to /docs/bonjour:

+
---
slug: /bonjour
---

Lorem ipsum
+

slug will be appended to the doc plugin's routeBasePath, which is /docs by default. See Docs-only mode for how to remove the /docs part from the URL.

+
note

It is possible to use:

    +
  • absolute slugs: slug: /mySlug, slug: /...
  • +
  • relative slugs: slug: mySlug, slug: ./../mySlug...
  • +
+

If you want a document to be available at the root, and have a path like https://docusaurus.io/docs/, you can use the slug front matter:

+
---
id: my-home-doc
slug: /
---

Lorem ipsum
+ +

When using autogenerated sidebars, the file structure will determine the sidebar structure.

+

Our recommendation for file system organization is: make your file system mirror the sidebar structure (so you don't need to handwrite your sidebars.js file), and use the slug front matter to customize URLs of each document.

+ + \ No newline at end of file diff --git a/docs/create-doc.html.html b/docs/create-doc.html.html new file mode 100644 index 0000000000..8dafb96114 --- /dev/null +++ b/docs/create-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/creating-pages.html b/docs/creating-pages.html new file mode 100644 index 0000000000..cd0de6d254 --- /dev/null +++ b/docs/creating-pages.html @@ -0,0 +1,96 @@ + + + + + +Creating Pages | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Creating Pages

+

In this section, we will learn about creating pages in Docusaurus.

+

The @docusaurus/plugin-content-pages plugin empowers you to create one-off standalone pages like a showcase page, playground page, or support page. You can use React components, or Markdown.

+
note

Pages do not have sidebars, only docs do.

+
info

Check the Pages Plugin API Reference documentation for an exhaustive list of options.

+

Add a React page

+

React is used as the UI library to create pages. Every page component should export a React component, and you can leverage the expressiveness of React to build rich and interactive content.

+

Create a file /src/pages/helloReact.js:

+
/src/pages/helloReact.js
import React from 'react';
import Layout from '@theme/Layout';

export default function Hello() {
return (
<Layout title="Hello" description="Hello React Page">
<div
style={{
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
height: '50vh',
fontSize: '20px',
}}>
<p>
Edit <code>pages/helloReact.js</code> and save to reload.
</p>
</div>
</Layout>
);
}
+

Once you save the file, the development server will automatically reload the changes. Now open http://localhost:3000/helloReact and you will see the new page you just created.

+

Each page doesn't come with any styling. You will need to import the Layout component from @theme/Layout and wrap your contents within that component if you want the navbar and/or footer to appear.

+
tip

You can also create TypeScript pages with the .tsx extension (helloReact.tsx).

+

Add a Markdown page

+

Create a file /src/pages/helloMarkdown.md:

+
/src/pages/helloMarkdown.md
---
title: my hello page title
description: my hello page description
hide_table_of_contents: true
---

# Hello

How are you?
+

In the same way, a page will be created at http://localhost:3000/helloMarkdown.

+

Markdown pages are less flexible than React pages because it always uses the theme layout.

+

Here's an example Markdown page.

+
tip

You can use the full power of React in Markdown pages too, refer to the MDX documentation.

+

Routing

+

If you are familiar with other static site generators like Jekyll and Next, this routing approach will feel familiar to you. Any JavaScript file you create under /src/pages/ directory will be automatically converted to a website page, following the /src/pages/ directory hierarchy. For example:

+
    +
  • /src/pages/index.js[baseUrl]
  • +
  • /src/pages/foo.js[baseUrl]/foo
  • +
  • /src/pages/foo/test.js[baseUrl]/foo/test
  • +
  • /src/pages/foo/index.js[baseUrl]/foo/
  • +
+

In this component-based development era, it is encouraged to co-locate your styling, markup, and behavior together into components. Each page is a component, and if you need to customize your page design with your own styles, we recommend co-locating your styles with the page component in its own directory. For example, to create a "Support" page, you could do one of the following:

+
    +
  • Add a /src/pages/support.js file
  • +
  • Create a /src/pages/support/ directory and a /src/pages/support/index.js file.
  • +
+

The latter is preferred as it has the benefits of letting you put files related to the page within that directory. For example, a CSS module file (styles.module.css) with styles meant to only be used on the "Support" page.

+
note

This is merely a recommended directory structure, and you will still need to manually import the CSS module file within your component module (support/index.js).

+

By default, any Markdown or JavaScript file starting with _ will be ignored and no routes will be created for that file (see the exclude option).

+
my-website
├── src
│ └── pages
│ ├── styles.module.css
│ ├── index.js
│ ├── _ignored.js
│ ├── _ignored-folder
│ │ ├── Component1.js
│ │ └── Component2.js
│ └── support
│ ├── index.js
│ └── styles.module.css
.
+
warning

All JavaScript/TypeScript files within the src/pages/ directory will have corresponding website paths generated for them. If you want to create reusable components into that directory, use the exclude option (by default, files prefixed with _, test files(.test.js), and files in __tests__ directory are not turned into pages).

+

Duplicate Routes

+

You may accidentally create multiple pages that are meant to be accessed on the same route. When this happens, Docusaurus will warn you about duplicate routes when you run yarn start or yarn build (behavior configurable through the onDuplicateRoutes config), but the site will still be built successfully. The page that was created last will be accessible, but it will override other conflicting pages. To resolve this issue, you should modify or remove any conflicting routes.

+ + \ No newline at end of file diff --git a/docs/creating-pages.html.html b/docs/creating-pages.html.html new file mode 100644 index 0000000000..3b369a3a69 --- /dev/null +++ b/docs/creating-pages.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/deployment.html b/docs/deployment.html new file mode 100644 index 0000000000..fa2a8e1b06 --- /dev/null +++ b/docs/deployment.html @@ -0,0 +1,372 @@ + + + + + +Deployment | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Deployment

+

To build the static files of your website for production, run:

+
npm run build
+

Once it finishes, the static files will be generated within the build directory.

+
note

The only responsibility of Docusaurus is to build your site and emit static files in build.

It is now up to you to choose how to host those static files.

+

You can deploy your site to static site hosting services such as Vercel, GitHub Pages, Netlify, Render, and Surge.

+

A Docusaurus site is statically rendered, and it can generally work without JavaScript!

+

Configuration

+

The following parameters are required in docusaurus.config.js to optimize routing and serve files from the correct location:

+
NameDescription
urlURL for your site. For a site deployed at https://my-org.com/my-project/, url is https://my-org.com/.
baseUrlBase URL for your project, with a trailing slash. For a site deployed at https://my-org.com/my-project/, baseUrl is /my-project/.
+

Testing your Build Locally

+

It is important to test your build locally before deploying it for production. Docusaurus provides a docusaurus serve command for that:

+
npm run serve
+

By default, this will load your site at http://localhost:3000/.

+

Trailing slash configuration

+

Docusaurus has a trailingSlash config to allow customizing URLs/links and emitted filename patterns.

+

The default value generally works fine. Unfortunately, each static hosting provider has a different behavior, and deploying the exact same site to various hosts can lead to distinct results. Depending on your host, it can be useful to change this config.

+
tip

Use slorber/trailing-slash-guide to understand better the behavior of your host and configure trailingSlash appropriately.

+

Using environment variables

+

Putting potentially sensitive information in the environment is common practice. However, in a typical Docusaurus website, the docusaurus.config.js file is the only interface to the Node.js environment (see our architecture overview), while everything else (MDX pages, React components, etc.) are client side and do not have direct access to the process global variable. In this case, you can consider using customFields to pass environment variables to the client side.

+
docusaurus.config.js
// If you are using dotenv (https://www.npmjs.com/package/dotenv)
import 'dotenv/config';

export default {
title: '...',
url: process.env.URL, // You can use environment variables to control site specifics as well
customFields: {
// Put your custom environment here
teamEmail: process.env.EMAIL,
},
};
+
home.jsx
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';

export default function Home() {
const {
siteConfig: {customFields},
} = useDocusaurusContext();
return <div>Contact us through {customFields.teamEmail}!</div>;
}
+

Choosing a hosting provider

+

There are a few common hosting options:

+
    +
  • Self hosting with an HTTP server like Apache2 or Nginx.
  • +
  • Jamstack providers (e.g. Netlify and Vercel). We will use them as references, but the same reasoning can apply to other providers.
  • +
  • GitHub Pages (by definition, it is also Jamstack, but we compare it separately).
  • +
+

If you are unsure of which one to choose, ask the following questions:

+

How many resources (money, person-hours, etc.) am I willing to invest in this?

    +
  • 🔴 Self-hosting requires experience in networking as well as Linux and web server administration. It's the most difficult option, and would require the most time to manage successfully. Expense-wise, cloud services are almost never free, and purchasing/deploying an onsite server can be even more costly.
  • +
  • 🟢 Jamstack providers can help you set up a working website in almost no time and offer features like server-side redirects that are easily configurable. Many providers offer generous build-time quotas even for free plans that you would almost never exceed. However, free plans have limits, and you would need to pay once you hit those limits. Check the pricing page of your provider for details.
  • +
  • 🟡 The GitHub Pages deployment workflow can be tedious to set up. (Evidence: see the length of Deploying to GitHub Pages!) However, this service (including build and deployment) is always free for public repositories, and we have detailed instructions to help you make it work.
  • +
+
How much server-side customization do I need?
    +
  • 🟢 With self-hosting, you have access to the entire server's configuration. You can configure the virtual host to serve different content based on the request URL, you can do complicated server-side redirects, you can implement authentication, and so on. If you need a lot of server-side features, self-host your website.
  • +
  • 🟡 Jamstack usually offers some server-side configuration (e.g. URL formatting (trailing slashes), server-side redirects, etc.).
  • +
  • 🔴 GitHub Pages doesn't expose server-side configuration besides enforcing HTTPS and setting CNAME records.
  • +
+
Do I need collaboration-friendly deployment workflows?
    +
  • 🟡 Self-hosted services can leverage continuous deployment functionality like Netlify, but more heavy-lifting is involved. Usually, you would designate a specific person to manage the deployment, and the workflow wouldn't be very git-based as opposed to the other two options.
  • +
  • 🟢 Netlify and Vercel have deploy previews for every pull request, which is useful for a team to review work before merging to production. You can also manage a team with different member access to the deployment.
  • +
  • 🟡 GitHub Pages cannot do deploy previews in a non-convoluted way. One repo can only be associated with one site deployment. On the other hand, you can control who has write access to the site's deployment.
  • +
+

There isn't a silver bullet. You need to weigh your needs and resources before making a choice.

+

Self-Hosting

+

Docusaurus can be self-hosted using docusaurus serve. Change port using --port and --host to change host.

+
npm run serve -- --build --port 80 --host 0.0.0.0
+
warning

It is not the best option, compared to a static hosting provider / CDN.

+
warning

In the following sections, we will introduce a few common hosting providers and how they should be configured to deploy Docusaurus sites most efficiently. Docusaurus is not affiliated with any of these services, and this information is provided for convenience only. Some of the write-ups are provided by third-parties, and recent API changes may not be reflected on our side. If you see outdated content, PRs are welcome.

Because we can only provide this content on a best-effort basis only, we have stopped accepting PRs adding new hosting options. You can, however, publish your writeup on a separate site (e.g. your blog, or the provider's official website), and ask us to include a link to your writeup.

+

Deploying to Netlify

+

To deploy your Docusaurus sites to Netlify, first make sure the following options are properly configured:

+
docusaurus.config.js
export default {
url: 'https://docusaurus-2.netlify.app', // Url to your site with no trailing slash
baseUrl: '/', // Base directory of your site relative to your repo
// ...
};
+

Then, create your site with Netlify.

+

While you set up the site, specify the build commands and directories as follows:

+
    +
  • build command: npm run build
  • +
  • publish directory: build
  • +
+

If you did not configure these build options, you may still go to "Site settings" -> "Build & deploy" after your site is created.

+

Once properly configured with the above options, your site should deploy and automatically redeploy upon merging to your deploy branch, which defaults to main.

+
warning

Some Docusaurus sites put the docs folder outside of website (most likely former Docusaurus v1 sites):

repo           # git root
├── docs # MD files
└── website # Docusaurus root

If you decide to use the website folder as Netlify's base directory, Netlify will not trigger builds when you update the docs folder, and you need to configure a custom ignore command:

website/netlify.toml
[build]
ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF . ../docs/"
+
warning

By default, Netlify adds trailing slashes to Docusaurus URLs.

It is recommended to disable the Netlify setting Post Processing > Asset Optimization > Pretty Urls to prevent lowercase URLs, unnecessary redirects, and 404 errors.

Be very careful: the Disable asset optimization global checkbox is broken and does not really disable the Pretty URLs setting in practice. Please make sure to uncheck it independently.

If you want to keep the Pretty Urls Netlify setting on, adjust the trailingSlash Docusaurus config appropriately.

Refer to slorber/trailing-slash-guide for more information.

+

Deploying to Vercel

+

Deploying your Docusaurus project to Vercel will provide you with various benefits in the areas of performance and ease of use.

+

To deploy your Docusaurus project with a Vercel for Git Integration, make sure it has been pushed to a Git repository.

+

Import the project into Vercel using the Import Flow. During the import, you will find all relevant options preconfigured for you; however, you can choose to change any of these options.

+

After your project has been imported, all subsequent pushes to branches will generate Preview Deployments, and all changes made to the Production Branch (usually "main" or "master") will result in a Production Deployment.

+

Deploying to GitHub Pages

+

Docusaurus provides an easy way to publish to GitHub Pages, which comes free with every GitHub repository.

+

Overview

+

Usually, there are two repositories (at least two branches) involved in a publishing process: the branch containing the source files, and the branch containing the build output to be served with GitHub Pages. In the following tutorial, they will be referred to as "source" and "deployment", respectively.

+

Each GitHub repository is associated with a GitHub Pages service. If the deployment repository is called my-org/my-project (where my-org is the organization name or username), the deployed site will appear at https://my-org.github.io/my-project/. If the deployment repository is called my-org/my-org.github.io (the organization GitHub Pages repo), the site will appear at https://my-org.github.io/.

+
info

In case you want to use your custom domain for GitHub Pages, create a CNAME file in the static directory. Anything within the static directory will be copied to the root of the build directory for deployment. When using a custom domain, you should be able to move back from baseUrl: '/projectName/' to baseUrl: '/', and also set your url to your custom domain.

You may refer to GitHub Pages' documentation User, Organization, and Project Pages for more details.

+

GitHub Pages picks up deploy-ready files (the output from docusaurus build) from the default branch (master / main, usually) or the gh-pages branch, and either from the root or the /docs folder. You can configure that through Settings > Pages in your repository. This branch will be called the "deployment branch".

+

We provide a docusaurus deploy command that helps you deploy your site from the source branch to the deployment branch in one command: clone, build, and commit.

+

docusaurus.config.js settings

+

First, modify your docusaurus.config.js and add the following params:

+
NameDescription
organizationNameThe GitHub user or organization that owns the deployment repository.
projectNameThe name of the deployment repository.
deploymentBranchThe name of the deployment branch. It defaults to 'gh-pages' for non-organization GitHub Pages repos (projectName not ending in .github.io). Otherwise, it needs to be explicit as a config field or environment variable.
+

These fields also have their environment variable counterparts which have a higher priority: ORGANIZATION_NAME, PROJECT_NAME, and DEPLOYMENT_BRANCH.

+
warning

GitHub Pages adds a trailing slash to Docusaurus URLs by default. It is recommended to set a trailingSlash config (true or false, not undefined).

+

Example:

+
docusaurus.config.js
export default {
// ...
url: 'https://endiliey.github.io', // Your website URL
baseUrl: '/',
projectName: 'endiliey.github.io',
organizationName: 'endiliey',
trailingSlash: false,
// ...
};
+
warning

By default, GitHub Pages runs published files through Jekyll. Since Jekyll will discard any files that begin with _, it is recommended that you disable Jekyll by adding an empty file named .nojekyll file to your static directory.

+

Environment settings

+
NameDescription
USE_SSHSet to true to use SSH instead of the default HTTPS for the connection to the GitHub repo. If the source repo URL is an SSH URL (e.g. git@github.com:facebook/docusaurus.git), USE_SSH is inferred to be true.
GIT_USERThe username for a GitHub account that has push access to the deployment repo. For your own repositories, this will usually be your GitHub username. Required if not using SSH, and ignored otherwise.
GIT_PASSPersonal access token of the git user (specified by GIT_USER), to facilitate non-interactive deployment (e.g. continuous deployment)
CURRENT_BRANCHThe source branch. Usually, the branch will be main or master, but it could be any branch except for gh-pages. If nothing is set for this variable, then the current branch from which docusaurus deploy is invoked will be used.
GIT_USER_NAMEThe git config user.name value to use when pushing to the deployment repo
GIT_USER_EMAILThe git config user.email value to use when pushing to the deployment repo
+

GitHub enterprise installations should work in the same manner as github.com; you only need to set the organization's GitHub Enterprise host as an environment variable:

+
NameDescription
GITHUB_HOSTThe domain name of your GitHub enterprise site.
GITHUB_PORTThe port of your GitHub enterprise site.
+

Deploy

+

Finally, to deploy your site to GitHub Pages, run:

+
GIT_USER=<GITHUB_USERNAME> yarn deploy
+
warning

Beginning in August 2021, GitHub requires every command-line sign-in to use the personal access token instead of the password. When GitHub prompts for your password, enter the PAT instead. See the GitHub documentation for more information.

Alternatively, you can use SSH (USE_SSH=true) to log in.

+

Triggering deployment with GitHub Actions

+

GitHub Actions allow you to automate, customize, and execute your software development workflows right in your repository.

+

The workflow examples below assume your website source resides in the main branch of your repository (the source branch is main), and your publishing source is configured for publishing with a custom GitHub Actions Workflow.

+

Our goal is that:

+
    +
  1. When a new pull request is made to main, there's an action that ensures the site builds successfully, without actually deploying. This job will be called test-deploy.
  2. +
  3. When a pull request is merged to the main branch or someone pushes to the main branch directly, it will be built and deployed to GitHub Pages. This job will be called deploy.
  4. +
+

Here are two approaches to deploying your docs with GitHub Actions. Based on the location of your deployment repository, choose the relevant tab below:

+
    +
  • Source repo and deployment repo are the same repository.
  • +
  • The deployment repo is a remote repository, different from the source. Instructions for this scenario assume publishing source is the gh-pages branch.
  • +
+

While you can have both jobs defined in the same workflow file, the original deploy workflow will always be listed as skipped in the PR check suite status, which is not indicative of the actual status and provides no value to the review process. We therefore propose to manage them as separate workflows instead.

GitHub action files

Add these two workflow files:

Tweak the parameters for your setup

These files assume you are using Yarn. If you use npm, change cache: yarn, yarn install --frozen-lockfile, yarn build to cache: npm, npm ci, npm run build accordingly.

If your Docusaurus project is not at the root of your repo, you may need to configure a default working directory, and adjust the paths accordingly.

.github/workflows/deploy.yml
name: Deploy to GitHub Pages

on:
push:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on

jobs:
build:
name: Build Docusaurus
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: yarn

- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Build website
run: yarn build

- name: Upload Build Artifact
uses: actions/upload-pages-artifact@v3
with:
path: build

deploy:
name: Deploy to GitHub Pages
needs: build

# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source

# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
.github/workflows/test-deploy.yml
name: Test deployment

on:
pull_request:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on

jobs:
test-deploy:
name: Test deployment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: yarn

- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Test build website
run: yarn build
+
Site not deployed properly?

After pushing to main, if you don't see your site published at the desired location (for example, it says "There isn't a GitHub Pages site here", or it's showing your repo's README.md file), try the following:

    +
  • Wait about three minutes and refresh. It may take a few minutes for GitHub pages to pick up the new files.
  • +
  • Check your repo's landing page for a little green tick next to the last commit's title, indicating the CI has passed. If you see a cross, it means the build or deployment failed, and you should check the log for more debugging information.
  • +
  • Click on the tick and make sure you see a "Deploy to GitHub Pages" workflow. Names like "pages build and deployment / deploy" are GitHub's default workflows, indicating your custom deployment workflow failed to be triggered at all. Make sure the YAML files are placed under the .github/workflows folder, and that the trigger condition is set correctly (e.g., if your default branch is "master" instead of "main", you need to change the on.push property).
  • +
  • Under your repo's Settings > Pages, make sure the "Source" (which is the source for the deployment files, not "source" as in our terminology) is set to "gh-pages" + "/ (root)", since we are using gh-pages as the deployment branch.
  • +

If you are using a custom domain:

+

Triggering deployment with Travis CI

+

Continuous integration (CI) services are typically used to perform routine tasks whenever new commits are checked in to source control. These tasks can be any combination of running unit tests and integration tests, automating builds, publishing packages to npm, and deploying changes to your website. All you need to do to automate the deployment of your website is to invoke the yarn deploy script whenever your website is updated. The following section covers how to do just that using Travis CI, a popular continuous integration service provider.

+
    +
  1. Go to https://github.com/settings/tokens and generate a new personal access token. When creating the token, grant it the repo scope so that it has the permissions it needs.
  2. +
  3. Using your GitHub account, add the Travis CI app to the repository you want to activate.
  4. +
  5. Open your Travis CI dashboard. The URL looks like https://travis-ci.com/USERNAME/REPO, and navigate to the More options > Setting > Environment Variables section of your repository.
  6. +
  7. Create a new environment variable named GH_TOKEN with your newly generated token as its value, then GH_EMAIL (your email address) and GH_NAME (your GitHub username).
  8. +
  9. Create a .travis.yml on the root of your repository with the following:
  10. +
+
.travis.yml
language: node_js
node_js:
- 18
branches:
only:
- main
cache:
yarn: true
script:
- git config --global user.name "${GH_NAME}"
- git config --global user.email "${GH_EMAIL}"
- echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc
- yarn install
- GIT_USER="${GH_NAME}" yarn deploy
+

Now, whenever a new commit lands in main, Travis CI will run your suite of tests and if everything passes, your website will be deployed via the yarn deploy script.

+

Triggering deployment with Buddy

+

Buddy is an easy-to-use CI/CD tool that allows you to automate the deployment of your portal to different environments, including GitHub Pages.

+

Follow these steps to create a pipeline that automatically deploys a new version of your website whenever you push changes to the selected branch of your project:

+
    +
  1. Go to https://github.com/settings/tokens and generate a new personal access token. When creating the token, grant it the repo scope so that it has the permissions it needs.
  2. +
  3. Sign in to your Buddy account and create a new project.
  4. +
  5. Choose GitHub as your git hosting provider and select the repository with the code of your website.
  6. +
  7. Using the left navigation panel, switch to the Pipelines view.
  8. +
  9. Create a new pipeline. Define its name, set the trigger mode to On push, and select the branch that triggers the pipeline execution.
  10. +
  11. Add a Node.js action.
  12. +
  13. Add these commands in the action's terminal:
  14. +
+
GIT_USER=<GH_PERSONAL_ACCESS_TOKEN>
git config --global user.email "<YOUR_GH_EMAIL>"
git config --global user.name "<YOUR_GH_USERNAME>"
yarn deploy
+

After creating this simple pipeline, each new commit pushed to the branch you selected deploys your website to GitHub Pages using yarn deploy. Read this guide to learn more about setting up a CI/CD pipeline for Docusaurus.

+

Using Azure Pipelines

+
    +
  1. Sign Up at Azure Pipelines if you haven't already.
  2. +
  3. Create an organization. Within the organization, create a project and connect your repository from GitHub.
  4. +
  5. Go to https://github.com/settings/tokens and generate a new personal access token with the repo scope.
  6. +
  7. In the project page (which looks like https://dev.azure.com/ORG_NAME/REPO_NAME/_build), create a new pipeline with the following text. Also, click on edit and add a new environment variable named GH_TOKEN with your newly generated token as its value, then GH_EMAIL (your email address) and GH_NAME (your GitHub username). Make sure to mark them as secret. Alternatively, you can also add a file named azure-pipelines.yml at your repository root.
  8. +
+
azure-pipelines.yml
trigger:
- main

pool:
vmImage: ubuntu-latest

steps:
- checkout: self
persistCredentials: true

- task: NodeTool@0
inputs:
versionSpec: '18'
displayName: Install Node.js

- script: |
git config --global user.name "${GH_NAME}"
git config --global user.email "${GH_EMAIL}"
git checkout -b main
echo "machine github.com login ${GH_NAME} password ${GH_TOKEN}" > ~/.netrc
yarn install
GIT_USER="${GH_NAME}" yarn deploy
env:
GH_NAME: $(GH_NAME)
GH_EMAIL: $(GH_EMAIL)
GH_TOKEN: $(GH_TOKEN)
displayName: Install and build
+

Using Drone

+
    +
  1. Create a new SSH key that will be the deploy key for your project.
  2. +
  3. Name your private and public keys to be specific and so that it does not overwrite your other SSH keys.
  4. +
  5. Go to https://github.com/USERNAME/REPO/settings/keys and add a new deploy key by pasting in the public key you just generated.
  6. +
  7. Open your Drone.io dashboard and log in. The URL looks like https://cloud.drone.io/USERNAME/REPO.
  8. +
  9. Click on the repository, click on activate repository, and add a secret called git_deploy_private_key with your private key value that you just generated.
  10. +
  11. Create a .drone.yml on the root of your repository with the below text.
  12. +
+
.drone.yml
kind: pipeline
type: docker
trigger:
event:
- tag
- name: Website
image: node
commands:
- mkdir -p $HOME/.ssh
- ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts
- echo "$GITHUB_PRIVATE_KEY" > "$HOME/.ssh/id_rsa"
- chmod 0600 $HOME/.ssh/id_rsa
- cd website
- yarn install
- yarn deploy
environment:
USE_SSH: true
GITHUB_PRIVATE_KEY:
from_secret: git_deploy_private_key
+

Now, whenever you push a new tag to GitHub, this trigger will start the drone CI job to publish your website.

+

Deploying to Flightcontrol

+

Flightcontrol is a service that automatically builds and deploys your web apps to AWS Fargate directly from your Git repository. It gives you full access to inspect and make infrastructure changes without the limitations of a traditional PaaS.

+

Get started by following Flightcontrol's step-by-step Docusaurus guide.

+

Deploying to Koyeb

+

Koyeb is a developer-friendly serverless platform to deploy apps globally. The platform lets you seamlessly run Docker containers, web apps, and APIs with git-based deployment, native autoscaling, a global edge network, and built-in service mesh and discovery. Check out the Koyeb's Docusaurus deployment guide to get started.

+

Deploying to Render

+

Render offers free static site hosting with fully managed SSL, custom domains, a global CDN, and continuous auto-deploy from your Git repo. Get started in just a few minutes by following Render's guide to deploying Docusaurus.

+

Deploying to Qovery

+

Qovery is a fully-managed cloud platform that runs on your AWS, Digital Ocean, and Scaleway account where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place.

+
    +
  1. Create a Qovery account. Visit the Qovery dashboard to create an account if you don't already have one.
  2. +
  3. Create a project. +
      +
    • Click on Create project and give a name to your project.
    • +
    • Click on Next.
    • +
    +
  4. +
  5. Create a new environment. +
      +
    • Click on Create environment and give a name (e.g. staging, production).
    • +
    +
  6. +
  7. Add an application. +
      +
    • Click on Create an application, give a name and select your GitHub or GitLab repository where your Docusaurus app is located.
    • +
    • Define the main branch name and the root application path.
    • +
    • Click on Create. After the application is created:
    • +
    • Navigate to your application Settings
    • +
    • Select Port
    • +
    • Add port used by your Docusaurus application
    • +
    +
  8. +
  9. Deploy +
      +
    • All you have to do now is to navigate to your application and click on Deploy.
    • +
    +
  10. +
+

Deploy the app

+

That's it. Watch the status and wait till the app is deployed. To open the application in your browser, click on Action and Open in your application overview.

+

Deploying to Hostman

+

Hostman allows you to host static websites for free. Hostman automates everything, you just need to connect your repository and follow these easy steps:

+
    +
  1. +

    Create a service.

    +
      +
    • To deploy a Docusaurus static website, click Create in the top-left corner of your Dashboard and choose Front-end app or static website.
    • +
    +
  2. +
  3. +

    Select the project to deploy.

    +
      +
    • +

      If you are logged in to Hostman with your GitHub, GitLab, or Bitbucket account, you will see the repository with your projects, including the private ones.

      +
    • +
    • +

      Choose the project you want to deploy. It must contain the directory with the project's files (e.g. website).

      +
    • +
    • +

      To access a different repository, click Connect another repository.

      +
    • +
    • +

      If you didn't use your Git account credentials to log in, you'll be able to access the necessary account now, and then select the project.

      +
    • +
    +
  4. +
  5. +

    Configure the build settings.

    +
      +
    • +

      Next, the Website customization window will appear. Choose the Static website option from the list of frameworks.

      +
    • +
    • +

      The Directory with app points at the directory that will contain the project's files after the build. If you selected the repository with the contents of the website (or my_website) directory during Step 2, you can leave it empty.

      +
    • +
    • +

      The standard build command for Docusaurus is:

      +
      npm run build
      +
    • +
    • +

      You can modify the build command if needed. You can enter multiple commands separated by &&.

      +
    • +
    +
  6. +
  7. +

    Deploy.

    +
      +
    • +

      Click Deploy to start the build process.

      +
    • +
    • +

      Once it starts, you will enter the deployment log. If there are any issues with the code, you will get warning or error messages in the log specifying the cause of the problem. Usually, the log contains all the debugging data you'll need.

      +
    • +
    • +

      When the deployment is complete, you will receive an email notification and also see a log entry. All done! Your project is up and ready.

      +
    • +
    +
  8. +
+

Deploying to Surge

+

Surge is a static web hosting platform that you can use to deploy your Docusaurus project from the command line in seconds. Deploying your project to Surge is easy and free (including custom domains and SSL certs).

+

Deploy your app in a matter of seconds using Surge with the following steps:

+
    +
  1. First, install Surge using npm by running the following command: +
    npm install -g surge
    +
  2. +
  3. To build the static files of your site for production in the root directory of your project, run: +
    npm run build
    +
  4. +
  5. Then, run this command inside the root directory of your project: +
    surge build/
    +
  6. +
+

First-time users of Surge would be prompted to create an account from the command line (which happens only once).

+

Confirm that the site you want to publish is in the build directory. A randomly generated subdomain *.surge.sh subdomain is always given (which can be edited).

+

Using your domain

+

If you have a domain name you can deploy your site using the command:

+
surge build/ your-domain.com
+

Your site is now deployed for free at subdomain.surge.sh or your-domain.com depending on the method you chose.

+

Setting up CNAME file

+

Store your domain in a CNAME file for future deployments with the following command:

+
echo subdomain.surge.sh > CNAME
+

You can deploy any other changes in the future with the command surge.

+

Deploying to Stormkit

+

You can deploy your Docusaurus project to Stormkit, a deployment platform for static websites, single-page applications (SPAs), and serverless functions. For detailed instructions, refer to this guide.

+

Deploying to QuantCDN

+
    +
  1. Install Quant CLI
  2. +
  3. Create a QuantCDN account by signing up
  4. +
  5. Initialize your project with quant init and fill in your credentials: +
    quant init
    +
  6. +
  7. Deploy your site. +
    quant deploy
    +
  8. +
+

See docs and blog for more examples and use cases for deploying to QuantCDN.

+

Deploying to Layer0

+

Layer0 is an all-in-one platform to develop, deploy, preview, experiment on, monitor, and run your headless frontend. It is focused on large, dynamic websites and best-in-class performance through EdgeJS (a JavaScript-based Content Delivery Network), predictive prefetching, and performance monitoring. Layer0 offers a free tier. Get started in just a few minutes by following Layer0's guide to deploying Docusaurus.

+

Deploying to Cloudflare Pages

+

Cloudflare Pages is a Jamstack platform for frontend developers to collaborate and deploy websites. Get started within a few minutes by following this article.

+

Deploying to Azure Static Web Apps

+

Azure Static Web Apps is a service that automatically builds and deploys full-stack web apps to Azure directly from the code repository, simplifying the developer experience for CI/CD. Static Web Apps separates the web application's static assets from its dynamic (API) endpoints. Static assets are served from globally-distributed content servers, making it faster for clients to retrieve files using servers nearby. Dynamic APIs are scaled with serverless architectures using an event-driven functions-based approach that is more cost-effective and scales on demand. Get started in a few minutes by following this step-by-step guide.

+

Deploying to Kinsta

+

Kinsta Static Site Hosting lets you deploy up to 100 static sites for free, custom domains with SSL, 100 GB monthly bandwidth, and 260+ Cloudflare CDN locations.

+

Get started in just a few clicks by following our Docusaurus on Kinsta article.

+ + \ No newline at end of file diff --git a/docs/deployment.html.html b/docs/deployment.html.html new file mode 100644 index 0000000000..7f2b7e03f4 --- /dev/null +++ b/docs/deployment.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/docs-introduction.html b/docs/docs-introduction.html new file mode 100644 index 0000000000..d252af5031 --- /dev/null +++ b/docs/docs-introduction.html @@ -0,0 +1,83 @@ + + + + + +Docs Introduction | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docs Introduction

+

The docs feature provides users with a way to organize Markdown files in a hierarchical format.

+
info

Check the Docs Plugin API Reference documentation for an exhaustive list of options.

+

Your site's documentation is organized by four levels, from lowest to highest:

+
    +
  1. Individual pages.
  2. +
  3. Sidebars.
  4. +
  5. Versions.
  6. +
  7. Plugin instances.
  8. +
+

The guide will introduce them in that order: starting from how individual pages can be configured, to how to create a sidebar or multiple ones, to how to create and manage versions, to how to use multiple docs plugin instances.

+

Docs-only mode

+

A freshly initialized Docusaurus site has the following structure:

+
example.com/                                -> generated from `src/pages/index.js`

example.com/docs/intro -> generated from `docs/intro.md`
example.com/docs/tutorial-basics/... -> generated from `docs/tutorial-basics/...`
...

example.com/blog/2021/08/26/welcome -> generated from `blog/2021-08-26-welcome/index.md`
example.com/blog/2021/08/01/mdx-blog-post -> generated from `blog/2021-08-01-mdx-blog-post.mdx`
...
+

All docs will be served under the subroute docs/. But what if your site only has docs, or you want to prioritize your docs by putting them at the root?

+

Assume that you have the following in your configuration:

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
/* docs plugin options */
},
blog: {
/* blog plugin options */
},
// ...
},
],
],
};
+

To enter docs-only mode, change it to like this:

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
routeBasePath: '/', // Serve the docs at the site's root
/* other docs plugin options */
},
blog: false, // Optional: disable the blog plugin
// ...
},
],
],
};
+

Note that you don't necessarily have to give up on using the blog or other plugins; all that routeBasePath: '/' does is that instead of serving the docs through https://example.com/docs/some-doc, they are now at the site root: https://example.com/some-doc. The blog, if enabled, can still be accessed through the blog/ subroute.

+

Don't forget to put some page at the root (https://example.com/) through adding the front matter:

+
docs/intro.md
---
slug: /
---

This page will be the home page when users visit https://example.com/.
+
warning

If you added slug: / to a doc to make it the homepage, you should delete the existing homepage at ./src/pages/index.js, or else there will be two files mapping to the same route!

+

Now, the site's structure will be like the following:

+
example.com/                       -> generated from `docs/intro.md`
example.com/tutorial-basics/... -> generated from `docs/tutorial-basics/...`
...
+
tip

There's also a "blog-only mode" for those who only want to use the blog feature of Docusaurus. You can use the same method detailed above. Follow the setup instructions on Blog-only mode.

+ + \ No newline at end of file diff --git a/docs/docs-introduction.html.html b/docs/docs-introduction.html.html new file mode 100644 index 0000000000..60dec5a92b --- /dev/null +++ b/docs/docs-introduction.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/docs-multi-instance.html b/docs/docs-multi-instance.html new file mode 100644 index 0000000000..575acaca03 --- /dev/null +++ b/docs/docs-multi-instance.html @@ -0,0 +1,118 @@ + + + + + +Docs Multi-instance | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docs Multi-instance

+

The @docusaurus/plugin-content-docs plugin can support multi-instance.

+
note

This feature is only useful for versioned documentation. It is recommended to be familiar with docs versioning before reading this page. If you just want multiple sidebars, you can do so within one plugin.

+

Use-cases

+

Sometimes you want a Docusaurus site to host 2 distinct sets of documentation (or more).

+

These documentations may even have different versioning/release lifecycles.

+

Mobile SDKs documentation

+

If you build a cross-platform mobile SDK, you may have 2 documentations:

+
    +
  • Android SDK documentation (v1.0, v1.1)
  • +
  • iOS SDK documentation (v1.0, v2.0)
  • +
+

In this case, you can use a distinct docs plugin instance per mobile SDK documentation.

+
warning

If each documentation instance is very large, you should rather create 2 distinct Docusaurus sites.

If someone edits the iOS documentation, is it really useful to rebuild everything, including the whole Android documentation that did not change?

+

Versioned and unversioned doc

+

Sometimes, you want some documents to be versioned, while other documents are more "global", and it feels useless to version them.

+

We use this pattern on the Docusaurus website itself:

+ +

Setup

+

Suppose you have 2 documentations:

+
    +
  • Product: some versioned doc about your product
  • +
  • Community: some unversioned doc about the community around your product
  • +
+

In this case, you should use the same plugin twice in your site configuration.

+
warning

@docusaurus/preset-classic already includes a docs plugin instance for you!

+

When using the preset:

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// id: 'product', // omitted => default instance
path: 'product',
routeBasePath: 'product',
sidebarPath: './sidebarsProduct.js',
// ... other options
},
},
],
],
plugins: [
[
'@docusaurus/plugin-content-docs',
{
id: 'community',
path: 'community',
routeBasePath: 'community',
sidebarPath: './sidebarsCommunity.js',
// ... other options
},
],
],
};
+

When not using the preset:

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
// id: 'product', // omitted => default instance
path: 'product',
routeBasePath: 'product',
sidebarPath: './sidebarsProduct.js',
// ... other options
},
],
[
'@docusaurus/plugin-content-docs',
{
id: 'community',
path: 'community',
routeBasePath: 'community',
sidebarPath: './sidebarsCommunity.js',
// ... other options
},
],
],
};
+

Don't forget to assign a unique id attribute to plugin instances.

+
note

We consider that the product instance is the most important one, and make it the "default" instance by not assigning any ID.

+

Versioned paths

+

Each plugin instance will store versioned docs in a distinct folder.

+

The default plugin instance will use these paths:

+
    +
  • website/versions.json
  • +
  • website/versioned_docs
  • +
  • website/versioned_sidebars
  • +
+

The other plugin instances (with an id attribute) will use these paths:

+
    +
  • website/[pluginId]_versions.json
  • +
  • website/[pluginId]_versioned_docs
  • +
  • website/[pluginId]_versioned_sidebars
  • +
+
tip

You can omit the id attribute (defaults to default) for one of the docs plugin instances.

The instance paths will be simpler, and retro-compatible with a single-instance setup.

+

Tagging new versions

+

Each plugin instance will have its own CLI command to tag a new version. They will be displayed if you run:

+
npm run docusaurus -- --help
+

To version the product/default docs plugin instance:

+
npm run docusaurus docs:version 1.0.0
+

To version the non-default/community docs plugin instance:

+
npm run docusaurus docs:version:community 1.0.0
+

Docs navbar items

+

Each docs-related theme navbar items take an optional docsPluginId attribute.

+

For example, if you want to have one version dropdown for each mobile SDK (iOS and Android), you could do:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersionDropdown',
docsPluginId: 'ios',
},
{
type: 'docsVersionDropdown',
docsPluginId: 'android',
},
],
},
},
};
+ + \ No newline at end of file diff --git a/docs/docs-multi-instance.html.html b/docs/docs-multi-instance.html.html new file mode 100644 index 0000000000..efe806df96 --- /dev/null +++ b/docs/docs-multi-instance.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/docusaurus-core.html b/docs/docusaurus-core.html new file mode 100644 index 0000000000..2be16296c7 --- /dev/null +++ b/docs/docusaurus-core.html @@ -0,0 +1,218 @@ + + + + + +Docusaurus Client API | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus Client API

+

Docusaurus provides some APIs on the clients that can be helpful to you when building your site.

+

Components

+

<ErrorBoundary />

+

This component creates a React error boundary.

+

Use it to wrap components that might throw, and display a fallback when that happens instead of crashing the whole app.

+
import React from 'react';
import ErrorBoundary from '@docusaurus/ErrorBoundary';

const SafeComponent = () => (
<ErrorBoundary
fallback={({error, tryAgain}) => (
<div>
<p>This component crashed because of error: {error.message}.</p>
<button onClick={tryAgain}>Try Again!</button>
</div>
)}>
<SomeDangerousComponentThatMayThrow />
</ErrorBoundary>
);
+ +
tip

To see it in action, click here:

+
info

Docusaurus uses this component to catch errors within the theme's layout, and also within the entire app.

+
note

This component doesn't catch build-time errors and only protects against client-side render errors that can happen when using stateful React components.

+

Props

+
    +
  • fallback: an optional render callback returning a JSX element. It will receive an object with 2 attributes: error, the error that was caught, and tryAgain, a function (() => void) callback to reset the error in the component and try rendering it again. If not present, @theme/Error will be rendered instead. @theme/Error is used for the error boundaries wrapping the site, above the layout.
  • +
+
warning

The fallback prop is a callback, and not a React functional component. You can't use React hooks inside this callback.

+ +

This reusable React component will manage all of your changes to the document head. It takes plain HTML tags and outputs plain HTML tags and is beginner-friendly. It is a wrapper around React Helmet.

+

Usage Example:

+
import React from 'react';
import Head from '@docusaurus/Head';

const MySEO = () => (
<Head>
<meta property="og:description" content="My custom description" />
<meta charSet="utf-8" />
<title>My Title</title>
<link rel="canonical" href="http://mysite.com/example" />
</Head>
);
+

Nested or latter components will override duplicate usages:

+
<Parent>
<Head>
<title>My Title</title>
<meta name="description" content="Helmet application" />
</Head>
<Child>
<Head>
<title>Nested Title</title>
<meta name="description" content="Nested component" />
</Head>
</Child>
</Parent>
+

Outputs:

+
<head>
<title>Nested Title</title>
<meta name="description" content="Nested component" />
</head>
+ +

This component enables linking to internal pages as well as a powerful performance feature called preloading. Preloading is used to prefetch resources so that the resources are fetched by the time the user navigates with this component. We use an IntersectionObserver to fetch a low-priority request when the <Link> is in the viewport and then use an onMouseOver event to trigger a high-priority request when it is likely that a user will navigate to the requested resource.

+

The component is a wrapper around react-router’s <Link> component that adds useful enhancements specific to Docusaurus. All props are passed through to react-router’s <Link> component.

+

External links also work, and automatically have these props: target="_blank" rel="noopener noreferrer".

+
import React from 'react';
import Link from '@docusaurus/Link';

const Page = () => (
<div>
<p>
Check out my <Link to="/blog">blog</Link>!
</p>
<p>
Follow me on <Link to="https://twitter.com/docusaurus">Twitter</Link>!
</p>
</div>
);
+

to: string

+

The target location to navigate to. Example: /docs/introduction.

+
<Link to="/courses" />
+
tip

Prefer this component to vanilla <a> tags because Docusaurus does a lot of optimizations (e.g. broken path detection, prefetching, applying base URL...) if you use <Link>.

+

<Redirect/>

+

Rendering a <Redirect> will navigate to a new location. The new location will override the current location in the history stack like server-side redirects (HTTP 3xx) do. You can refer to React Router's Redirect documentation for more info on available props.

+

Example usage:

+
import React from 'react';
import {Redirect} from '@docusaurus/router';

const Home = () => {
return <Redirect to="/docs/test" />;
};
+
note

@docusaurus/router implements React Router and supports its features.

+

<BrowserOnly/>

+

The <BrowserOnly> component permits to render React components only in the browser after the React app has hydrated.

+
tip

Use it for integrating with code that can't run in Node.js, because the window or document objects are being accessed.

+

Props

+
    +
  • children: render function prop returning browser-only JSX. Will not be executed in Node.js
  • +
  • fallback (optional): JSX to render on the server (Node.js) and until React hydration completes.
  • +
+

Example with code

+
import BrowserOnly from '@docusaurus/BrowserOnly';

const MyComponent = () => {
return (
<BrowserOnly>
{() => <span>page url = {window.location.href}</span>}
</BrowserOnly>
);
};
+

Example with a library

+
import BrowserOnly from '@docusaurus/BrowserOnly';

const MyComponent = (props) => {
return (
<BrowserOnly fallback={<div>Loading...</div>}>
{() => {
const LibComponent = require('some-lib').LibComponent;
return <LibComponent {...props} />;
}}
</BrowserOnly>
);
};
+

<Interpolate/>

+

A simple interpolation component for text containing dynamic placeholders.

+

The placeholders will be replaced with the provided dynamic values and JSX elements of your choice (strings, links, styled elements...).

+

Props

+
    +
  • children: text containing interpolation placeholders like {placeholderName}
  • +
  • values: object containing interpolation placeholder values
  • +
+
import React from 'react';
import Link from '@docusaurus/Link';
import Interpolate from '@docusaurus/Interpolate';

export default function VisitMyWebsiteMessage() {
return (
<Interpolate
values={{
firstName: 'Sébastien',
website: (
<Link to="https://docusaurus.io" className="my-website-class">
website
</Link>
),
}}>
{'Hello, {firstName}! How are you? Take a look at my {website}'}
</Interpolate>
);
}
+

<Translate/>

+

When localizing your site, the <Translate/> component will allow providing translation support to React components, such as your homepage. The <Translate> component supports interpolation.

+

The translation strings will statically extracted from your code with the docusaurus write-translations CLI and a code.json translation file will be created in website/i18n/[locale].

+
note

The <Translate/> props must be hardcoded strings.

Apart from the values prop used for interpolation, it is not possible to use variables, or the static extraction wouldn't work.

+

Props

+
    +
  • children: untranslated string in the default site locale (can contain interpolation placeholders)
  • +
  • id: optional value to be used as the key in JSON translation files
  • +
  • description: optional text to help the translator
  • +
  • values: optional object containing interpolation placeholder values
  • +
+

Example

+
src/pages/index.js
import React from 'react';
import Layout from '@theme/Layout';

import Translate from '@docusaurus/Translate';

export default function Home() {
return (
<Layout>
<h1>
<Translate
id="homepage.title"
description="The homepage welcome message">
Welcome to my website
</Translate>
</h1>
<main>
<Translate values={{firstName: 'Sébastien'}}>
{'Welcome, {firstName}! How are you?'}
</Translate>
</main>
</Layout>
);
}
+
note

You can even omit the children prop and specify a translation string in your code.json file manually after running the docusaurus write-translations CLI command.

<Translate id="homepage.title" />
+
info

The <Translate> component supports interpolation. You can also implement string pluralization through some custom code and the translate imperative API.

+

Hooks

+

useDocusaurusContext

+

React hook to access Docusaurus Context. The context contains the siteConfig object from docusaurus.config.js and some additional site metadata.

+
type PluginVersionInformation =
| {readonly type: 'package'; readonly version?: string}
| {readonly type: 'project'}
| {readonly type: 'local'}
| {readonly type: 'synthetic'};

type SiteMetadata = {
readonly docusaurusVersion: string;
readonly siteVersion?: string;
readonly pluginVersions: Record<string, PluginVersionInformation>;
};

type I18nLocaleConfig = {
label: string;
direction: string;
};

type I18n = {
defaultLocale: string;
locales: [string, ...string[]];
currentLocale: string;
localeConfigs: Record<string, I18nLocaleConfig>;
};

type DocusaurusContext = {
siteConfig: DocusaurusConfig;
siteMetadata: SiteMetadata;
globalData: Record<string, unknown>;
i18n: I18n;
codeTranslations: Record<string, string>;
};
+

Usage example:

+
import React from 'react';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';

const MyComponent = () => {
const {siteConfig, siteMetadata} = useDocusaurusContext();
return (
<div>
<h1>{siteConfig.title}</h1>
<div>{siteMetadata.siteVersion}</div>
<div>{siteMetadata.docusaurusVersion}</div>
</div>
);
};
+
note

The siteConfig object only contains serializable values (values that are preserved after JSON.stringify()). Functions, regexes, etc. would be lost on the client side.

+

useIsBrowser

+

Returns true when the React app has successfully hydrated in the browser.

+
warning

Use this hook instead of typeof windows !== 'undefined' in React rendering logic.

The first client-side render output (in the browser) must be exactly the same as the server-side render output (Node.js). Not following this rule can lead to unexpected hydration behaviors, as described in The Perils of Rehydration.

+

Usage example:

+
import React from 'react';
import useIsBrowser from '@docusaurus/useIsBrowser';

const MyComponent = () => {
const isBrowser = useIsBrowser();
return <div>{isBrowser ? 'Client' : 'Server'}</div>;
};
+

useBaseUrl

+

React hook to prepend your site baseUrl to a string.

+
warning

Don't use it for regular links!

The /baseUrl/ prefix is automatically added to all absolute paths by default:

    +
  • Markdown: [link](/my/path) will link to /baseUrl/my/path
  • +
  • React: <Link to="/my/path/">link</Link> will link to /baseUrl/my/path
  • +
+

Options

+
type BaseUrlOptions = {
forcePrependBaseUrl: boolean;
absolute: boolean;
};
+

Example usage:

+
import React from 'react';
import useBaseUrl from '@docusaurus/useBaseUrl';

const SomeImage = () => {
const imgSrc = useBaseUrl('/img/myImage.png');
return <img src={imgSrc} />;
};
+
tip

In most cases, you don't need useBaseUrl.

Prefer a require() call for assets:

<img src={require('@site/static/img/myImage.png').default} />
+

useBaseUrlUtils

+

Sometimes useBaseUrl is not good enough. This hook return additional utils related to your site's base URL.

+
    +
  • withBaseUrl: useful if you need to add base URLs to multiple URLs at once.
  • +
+
import React from 'react';
import {useBaseUrlUtils} from '@docusaurus/useBaseUrl';

const Component = () => {
const urls = ['/a', '/b'];
const {withBaseUrl} = useBaseUrlUtils();
const urlsWithBaseUrl = urls.map(withBaseUrl);
return <div>{/* ... */}</div>;
};
+

useGlobalData

+

React hook to access Docusaurus global data created by all the plugins.

+

Global data is namespaced by plugin name then by plugin ID.

+
info

Plugin ID is only useful when a plugin is used multiple times on the same site. Each plugin instance is able to create its own global data.

+
type GlobalData = Record<
PluginName,
Record<
PluginId, // "default" by default
any // plugin-specific data
>
>;
+

Usage example:

+
import React from 'react';
import useGlobalData from '@docusaurus/useGlobalData';

const MyComponent = () => {
const globalData = useGlobalData();
const myPluginData = globalData['my-plugin']['default'];
return <div>{myPluginData.someAttribute}</div>;
};
+
tip

Inspect your site's global data at .docusaurus/globalData.json

+

usePluginData

+

Access global data created by a specific plugin instance.

+

This is the most convenient hook to access plugin global data and should be used most of the time.

+

pluginId is optional if you don't use multi-instance plugins.

+
function usePluginData(
pluginName: string,
pluginId?: string,
options?: {failfast?: boolean},
);
+

Usage example:

+
import React from 'react';
import {usePluginData} from '@docusaurus/useGlobalData';

const MyComponent = () => {
const myPluginData = usePluginData('my-plugin');
return <div>{myPluginData.someAttribute}</div>;
};
+

useAllPluginInstancesData

+

Access global data created by a specific plugin. Given a plugin name, it returns the data of all the plugins instances of that name, by plugin id.

+
function useAllPluginInstancesData(
pluginName: string,
options?: {failfast?: boolean},
);
+

Usage example:

+
import React from 'react';
import {useAllPluginInstancesData} from '@docusaurus/useGlobalData';

const MyComponent = () => {
const allPluginInstancesData = useAllPluginInstancesData('my-plugin');
const myPluginData = allPluginInstancesData['default'];
return <div>{myPluginData.someAttribute}</div>;
};
+ +

React hook to access the Docusaurus broken link checker APIs, exposing a way for a Docusaurus pages to report and collect their links and anchors.

+
warning

This is an advanced API that most Docusaurus users don't need to use directly.

It is already built-in in existing high-level components:

    +
  • the <Link> component will collect links for you
  • +
  • the @theme/Heading (used for Markdown headings) will collect anchors
  • +

Use useBrokenLinks() if you implement your own <Heading> or <Link> component.

+

Usage example:

+
MyHeading.js
import useBrokenLinks from '@docusaurus/useBrokenLinks';

export default function MyHeading(props) {
useBrokenLinks().collectAnchor(props.id);
return <h2 {...props} />;
}
+
MyLink.js
import useBrokenLinks from '@docusaurus/useBrokenLinks';

export default function MyLink(props) {
useBrokenLinks().collectLink(props.href);
return <a {...props} />;
}
+

Functions

+

interpolate

+

The imperative counterpart of the <Interpolate> component.

+

Signature

+
// Simple string interpolation
function interpolate(text: string, values: Record<string, string>): string;

// JSX interpolation
function interpolate(
text: string,
values: Record<string, ReactNode>,
): ReactNode;
+

Example

+
import {interpolate} from '@docusaurus/Interpolate';

const message = interpolate('Welcome {firstName}', {firstName: 'Sébastien'});
+

translate

+

The imperative counterpart of the <Translate> component. Also supporting placeholders interpolation.

+
tip

Use the imperative API for the rare cases where a component cannot be used, such as:

    +
  • the page title metadata
  • +
  • the placeholder props of form inputs
  • +
  • the aria-label props for accessibility
  • +
+

Signature

+
function translate(
translation: {message: string; id?: string; description?: string},
values: Record<string, string>,
): string;
+

Example

+
src/pages/index.js
import React from 'react';
import Layout from '@theme/Layout';

import {translate} from '@docusaurus/Translate';

export default function Home() {
return (
<Layout
title={translate({message: 'My page meta title'})}>
<img
src={'https://docusaurus.io/logo.png'}
aria-label={
translate(
{
message: 'The logo of site {siteName}',
// Optional
id: 'homepage.logo.ariaLabel',
description: 'The home page logo aria label',
},
{siteName: 'Docusaurus'},
)
}
/>
</Layout>
);
}
+

Modules

+

ExecutionEnvironment

+

A module that exposes a few boolean variables to check the current rendering environment.

+
warning

For React rendering logic, use useIsBrowser() or <BrowserOnly> instead.

+

Example:

+
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';

if (ExecutionEnvironment.canUseDOM) {
require('lib-that-only-works-client-side');
}
+
FieldDescription
ExecutionEnvironment.canUseDOMtrue if on client/browser, false on Node.js/prerendering.
ExecutionEnvironment.canUseEventListenerstrue if on client and has window.addEventListener.
ExecutionEnvironment.canUseIntersectionObservertrue if on client and has IntersectionObserver.
ExecutionEnvironment.canUseViewporttrue if on client and has window.screen.
+

constants

+

A module exposing useful constants to client-side theme code.

+
import {DEFAULT_PLUGIN_ID} from '@docusaurus/constants';
+
Named exportValue
DEFAULT_PLUGIN_IDdefault
+ + \ No newline at end of file diff --git a/docs/docusaurus-core.html.html b/docs/docusaurus-core.html.html new file mode 100644 index 0000000000..1868af3f6f --- /dev/null +++ b/docs/docusaurus-core.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/whats-next.html b/docs/guides/whats-next.html new file mode 100644 index 0000000000..b843b94560 --- /dev/null +++ b/docs/guides/whats-next.html @@ -0,0 +1,78 @@ + + + + + +What's next? | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

What's next?

+

Congratulations! You have understood most core features of Docusaurus now. You have:

+ +

At this point, you probably have a big docusaurus.config.js already😄 However, you haven't written much code yet! Most of the features are implemented through calling encapsulated Docusaurus APIs. As you continue your journey, you can take three paths:

+
    +
  • Learn more advanced Docusaurus concepts. This will help you gain a deeper understand of what the APIs do.
  • +
  • Read about all existing APIs. Many of them have not been covered in the Guides!
  • +
  • Learn to develop a plugin to extend the functionality of your site.
  • +
+ + \ No newline at end of file diff --git a/docs/guides/whats-next.html.html b/docs/guides/whats-next.html.html new file mode 100644 index 0000000000..d3cc0addeb --- /dev/null +++ b/docs/guides/whats-next.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/i18n/crowdin.html b/docs/i18n/crowdin.html new file mode 100644 index 0000000000..ed4314449a --- /dev/null +++ b/docs/i18n/crowdin.html @@ -0,0 +1,228 @@ + + + + + +i18n - Using Crowdin | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

i18n - Using Crowdin

+

The i18n system of Docusaurus is decoupled from any translation software.

+

You can integrate Docusaurus with the tools and SaaS of your choice, as long as you put the translation files at the correct location.

+

We document the usage of Crowdin, as one possible integration example.

+
warning

This is not an endorsement of Crowdin as the unique choice to translate a Docusaurus site, but it is successfully used by Facebook to translate documentation projects such as Jest, Docusaurus, and ReasonML.

Refer to the Crowdin documentation and Crowdin support for help.

+
tip

Use this community-driven GitHub discussion to discuss anything related to Docusaurus + Crowdin.

+

Crowdin overview

+

Crowdin is a translation SaaS, offering a free plan for open-source projects.

+

We recommend the following translation workflow:

+
    +
  • Upload sources to Crowdin (untranslated files)
  • +
  • Use Crowdin to translate the content
  • +
  • Download translations from Crowdin (localized translation files)
  • +
+

Crowdin provides a CLI to upload sources and download translations, allowing you to automate the translation process.

+

The crowdin.yml configuration file is convenient for Docusaurus, and permits to download the localized translation files at the expected location (in i18n/[locale]/..).

+

Read the official documentation to know more about advanced features and different translation workflows.

+

Crowdin tutorial

+

This is a walk-through of using Crowdin to translate a newly initialized English Docusaurus website into French, and assume you already followed the i18n tutorial.

+

The end result can be seen at docusaurus-crowdin-example.netlify.app (repository).

+

Prepare the Docusaurus site

+

Initialize a new Docusaurus site:

+
npx create-docusaurus@latest website classic
+

Add the site configuration for the French language:

+
docusaurus.config.js
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr'],
},
themeConfig: {
navbar: {
items: [
// ...
{
type: 'localeDropdown',
position: 'left',
},
// ...
],
},
},
// ...
};
+

Translate the homepage:

+
src/pages/index.js
import React from 'react';
import Translate from '@docusaurus/Translate';
import Layout from '@theme/Layout';

export default function Home() {
return (
<Layout>
<h1 style={{margin: 20}}>
<Translate description="The homepage main heading">
Welcome to my Docusaurus translated site!
</Translate>
</h1>
</Layout>
);
}
+

Create a Crowdin project

+

Sign up on Crowdin, and create a project.

+

Use English as the source language, and French as the target language.

+

Create a Crowdin project with english as source language, and french as target language

+

Your project is created, but it is empty for now. We will upload the files to translate in the next steps.

+

Create the Crowdin configuration

+

This configuration (doc) provides a mapping for the Crowdin CLI to understand:

+
    +
  • Where to find the source files to upload (JSON and Markdown)
  • +
  • Where to download the files after translation (in i18n/[locale])
  • +
+

Create crowdin.yml in website:

+
crowdin.yml
project_id: '123456'
api_token_env: CROWDIN_PERSONAL_TOKEN
preserve_hierarchy: true
files:
# JSON translation files
- source: /i18n/en/**/*
translation: /i18n/%two_letters_code%/**/%original_file_name%
# Docs Markdown files
- source: /docs/**/*
translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%
# Blog Markdown files
- source: /blog/**/*
translation: /i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%
+

Crowdin has its own syntax for declaring source/translation paths:

+
    +
  • **/*: everything in a subfolder
  • +
  • %two_letters_code%: the 2-letters variant of Crowdin target languages (fr in our case)
  • +
  • **/%original_file_name%: the translations will preserve the original folder/file hierarchy
  • +
+
info

The Crowdin CLI warnings are not always easy to understand.

We advise to:

    +
  • change one thing at a time
  • +
  • re-upload sources after any configuration change
  • +
  • use paths starting with / (./ does not work)
  • +
  • avoid fancy globbing patterns like /docs/**/*.(md|mdx) (does not work)
  • +
+

Access token

+

The api_token_env attribute defines the env variable name read by the Crowdin CLI.

+

You can obtain a Personal Access Token on your personal profile page.

+
tip

You can keep the default value CROWDIN_PERSONAL_TOKEN, and set this environment variable and on your computer and on the CI server to the generated access token.

+
warning

A Personal Access Tokens grant read-write access to all your Crowdin projects.

You should not commit it, and it may be a good idea to create a dedicated Crowdin profile for your company instead of using a personal account.

+

Other configuration fields

+
    +
  • project_id: can be hardcoded, and is found on https://crowdin.com/project/<MY_PROJECT_NAME>/settings#api
  • +
  • preserve_hierarchy: preserve the folder's hierarchy of your docs on Crowdin UI instead of flattening everything
  • +
+

Install the Crowdin CLI

+

This tutorial uses the CLI version 3.5.2, but we expect 3.x releases to keep working.

+

Install the Crowdin CLI as an npm package to your Docusaurus site:

+
npm install @crowdin/cli@3
+

Add a crowdin script:

+
package.json
{
"scripts": {
// ...
"write-translations": "docusaurus write-translations",
"crowdin": "crowdin"
}
}
+

Test that you can run the Crowdin CLI:

+
npm run crowdin -- --version
+

Set the CROWDIN_PERSONAL_TOKEN env variable on your computer, to allow the CLI to authenticate with the Crowdin API.

+
tip

Temporarily, you can hardcode your personal token in crowdin.yml with api_token: 'MY-TOKEN'.

+

Upload the sources

+

Generate the JSON translation files for the default language in website/i18n/en:

+
npm run write-translations
+

Upload all the JSON and Markdown translation files:

+
npm run crowdin upload
+

Crowdin CLI uploading Docusaurus source files

+

Your source files are now visible on the Crowdin interface: https://crowdin.com/project/<MY_PROJECT_NAME>/settings#files

+

Crowdin UI showing Docusaurus source files

+

Translate the sources

+

On https://crowdin.com/project/<MY_PROJECT_NAME>, click on the French target language.

+

Crowdin UI showing French translation files

+

Translate some Markdown files.

+

Crowdin UI to translate a Markdown file

+
tip

Use Hide String to make sure translators don't translate things that should not be:

    +
  • Front matter: id, slug, tags ...
  • +
  • Admonitions: :::, :::note, :::tip ...
  • +

Crowdin UI hide string

+

Translate some JSON files.

+

Crowdin UI to translate a JSON file

+
info

The description attribute of JSON translation files is visible on Crowdin to help translate the strings.

+
tip

Pre-translate your site, and fix pre-translation mistakes manually (enable the Global Translation Memory in settings first).

Use the Hide String feature first, as Crowdin is pre-translating things too optimistically.

+

Download the translations

+

Use the Crowdin CLI to download the translated JSON and Markdown files.

+
npm run crowdin download
+

The translated content should be downloaded in i18n/fr.

+

Start your site on the French locale:

+
npm run start -- --locale fr
+

Make sure that your website is now translated in French at http://localhost:3000/fr/.

+

Automate with CI

+

We will configure the CI to download the Crowdin translations at build time and keep them outside of Git.

+

Add website/i18n to .gitignore.

+

Set the CROWDIN_PERSONAL_TOKEN env variable on your CI.

+

Create an npm script to sync Crowdin (extract sources, upload sources, download translations):

+
package.json
{
"scripts": {
"crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download"
}
}
+

Call the npm run crowdin:sync script in your CI, just before building the Docusaurus site.

+
tip

Keep your deploy-previews fast: don't download translations, and use npm run build -- --locale en for feature branches.

+
warning

Crowdin does not support well multiple concurrent uploads/downloads: it is preferable to only include translations to your production deployment, and keep deploy previews untranslated.

+

Advanced Crowdin topics

+

MDX

+
warning

Pay special attention to the JSX fragments in MDX documents!

+

Crowdin does not support officially MDX, but they added support for the .mdx extension, and interpret such files as Markdown (instead of plain text).

+

MDX problems

+

Crowdin thinks that the JSX syntax is embedded HTML and can mess up with the JSX markup when you download the translations, leading to a site that fails to build due to invalid JSX.

+

Simple JSX fragments using simple string props like <Username name="Sebastien"/> will work fine; more complex JSX fragments using object/array props like <User person={{name: "Sebastien"}}/> are more likely to fail due to a syntax that does not look like HTML.

+

MDX solutions

+

We recommend extracting the complex embedded JSX code as separate standalone components. We also added an mdx-code-block escape hatch syntax:

+
# How to deploy Docusaurus

To deploy Docusaurus, run the following command:

````mdx-code-block 

import Tabs from '@theme/Tabs';

import TabItem from '@theme/TabItem';

<Tabs>
<TabItem value="bash" label="Bash">

```bash
GIT_USER=<GITHUB_USERNAME> yarn deploy
```

</TabItem>
<TabItem value="windows" label="Windows">

```batch
cmd /C "set "GIT_USER=<GITHUB_USERNAME>" && yarn deploy"
```

</TabItem>
</Tabs>
````
+

This will:

+
    +
  • be interpreted by Crowdin as code blocks (and not mess-up with the markup on download)
  • +
  • be interpreted by Docusaurus as regular JSX (as if it was not wrapped by any code block)
  • +
  • unfortunately opt-out of MDX tooling (IDE syntax highlighting, Prettier...)
  • +
+

Docs versioning

+

Configure translation files for the website/versioned_docs folder.

+

When creating a new version, the source strings will generally be quite similar to the current version (website/docs), and you don't want to translate the new version docs again and again.

+

Crowdin provides a Duplicate Strings setting.

+

Crowdin Duplicate Strings option setting

+

We recommend using Hide, but the ideal setting depends on how much your versions are different.

+
warning

Not using Hide leads to a much larger amount of source strings in quotas, and will affect the pricing.

+

Multi-instance plugins

+

You need to configure translation files for each plugin instance.

+

If you have a docs plugin instance with id=ios, you will need to configure those source files as well

+
    +
  • website/ios
  • +
  • website/ios_versioned_docs (if versioned)
  • +
+

Maintaining your site

+

Sometimes, you will remove or rename a source file on Git, and Crowdin will display CLI warnings:

+

Crowdin CLI: download translation warning

+

When your sources are refactored, you should use the Crowdin UI to update your Crowdin files manually:

+

Crowdin UI: renaming a file

+

VCS (Git) integrations

+

Crowdin has multiple VCS integrations for GitHub, GitLab, Bitbucket.

+
TL;DR

We recommend avoiding them.

+

It could have been helpful to be able to edit the translations in both Git and Crowdin, and have a bi-directional sync between the 2 systems.

+

In practice, it didn't work very reliably for a few reasons:

+
    +
  • The Crowdin -> Git sync works fine (with a pull request)
  • +
  • The Git -> Crowdin sync is manual (you have to press a button)
  • +
  • The heuristics used by Crowdin to match existing Markdown translations to existing Markdown sources are not 100% reliable, and you have to verify the result on Crowdin UI after any sync from Git
  • +
  • 2 users concurrently editing on Git and Crowdin can lead to a translation loss
  • +
  • It requires the crowdin.yml file to be at the root of the repository
  • +
+

In-Context localization

+

Crowdin has an In-Context localization feature.

+
warning

Unfortunately, it does not work yet for technical reasons, but we have good hope it can be solved.

Crowdin replaces Markdown strings with technical IDs such as crowdin:id12345, but it does so too aggressively, including hidden strings, and messes up with front matter, admonitions, JSX...

+

Localize edit URLs

+

When the user is browsing a page at /fr/doc1, the edit button will link by default to the unlocalized doc at website/docs/doc1.md.

+

You may prefer the edit button to link to the Crowdin interface instead by using the editUrl function to customize the edit URLs on a per-locale basis.

+
docusaurus.config.js
const DefaultLocale = 'en';

export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
editUrl: ({locale, versionDocsDirPath, docPath}) => {
// Link to Crowdin for French docs
if (locale !== DefaultLocale) {
return `https://crowdin.com/project/docusaurus-v2/${locale}`;
}
// Link to GitHub for English docs
return `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`;
},
},
blog: {
editUrl: ({locale, blogDirPath, blogPath}) => {
if (locale !== DefaultLocale) {
return `https://crowdin.com/project/docusaurus-v2/${locale}`;
}
return `https://github.com/facebook/docusaurus/edit/main/website/${blogDirPath}/${blogPath}`;
},
},
},
],
],
};
+
note

It is currently not possible to link to a specific file in Crowdin.

+

Example configuration

+

The Docusaurus configuration file is a good example of using versioning and multi-instance:

+ +
crowdin.yml
project_id: '428890'
api_token_env: CROWDIN_PERSONAL_TOKEN
preserve_hierarchy: true
languages_mapping: &languages_mapping
two_letters_code:
pt-BR: pt-BR
files:
- source: /website/i18n/en/**/*
translation: /website/i18n/%two_letters_code%/**/%original_file_name%
languages_mapping: *languages_mapping
- source: /website/docs/**/*
translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%
languages_mapping: *languages_mapping
- source: /website/community/**/*
translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs-community/current/**/%original_file_name%
languages_mapping: *languages_mapping
- source: /website/versioned_docs/**/*
translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-docs/**/%original_file_name%
languages_mapping: *languages_mapping
- source: /website/blog/**/*
translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%
languages_mapping: *languages_mapping
- source: /website/src/pages/**/*
translation: /website/i18n/%two_letters_code%/docusaurus-plugin-content-pages/**/%original_file_name%
ignore: [/**/*.js, /**/*.jsx, /**/*.ts, /**/*.tsx, /**/*.css]
languages_mapping: *languages_mapping
+

Machine Translation (MT) issue: links/image handling

+

Crowdin recently rolled out some major changes to the markdown file format and now the links are treated differently than they were before. Before they were considered as tags, but now they appear as plain text. Because of these changes the plain text links are passed to the MT engine which attempts to translate the target, thus breaking the translation (for instance: this string Allez voir [ma merveilleuse page](/ma-merveilleuse-page) is translated Check out [my wonderful page](/my-wonderful-page), and this breaks docusaurus i18n workflow as the page name should not be translated).

+

As of 2023 Dec.7, they are not planning to change the logic of how links are treated, so you should have this in mind if you plan to use Crowdin with MT.

+ + \ No newline at end of file diff --git a/docs/i18n/crowdin.html.html b/docs/i18n/crowdin.html.html new file mode 100644 index 0000000000..a3eb4b6607 --- /dev/null +++ b/docs/i18n/crowdin.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/i18n/git.html b/docs/i18n/git.html new file mode 100644 index 0000000000..3eca8002fa --- /dev/null +++ b/docs/i18n/git.html @@ -0,0 +1,113 @@ + + + + + +i18n - Using git | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

i18n - Using git

+

A possible translation strategy is to version control the translation files with Git (or any other VCS).

+

Tradeoffs

+

This strategy has advantages:

+
    +
  • Easy to get started: just commit the i18n folder to Git
  • +
  • Easy for developers: Git, GitHub and pull requests are mainstream developer tools
  • +
  • Free (or without any additional cost, assuming you already use Git)
  • +
  • Low friction: does not require signing up to an external tool
  • +
  • Rewarding: contributors are happy to have a nice contribution history
  • +
+

Using Git also present some shortcomings:

+
    +
  • Hard for non-developers: they do not master Git and pull-requests
  • +
  • Hard for professional translators: they are used to SaaS translation software and advanced features
  • +
  • Hard to maintain: you have to keep the translated files in sync with the untranslated files
  • +
+
note

Some large-scale technical projects (React, Vue.js, MDN, TypeScript, Nuxt.js, etc.) use Git for translations.

Refer to the Docusaurus i18n RFC for our notes and links studying these systems.

+

Initialization

+

This is a walk-through of using Git to translate a newly initialized English Docusaurus website into French, and assume you already followed the i18n tutorial.

+

Prepare the Docusaurus site

+

Initialize a new Docusaurus site:

+
npx create-docusaurus@latest website classic
+

Add the site configuration for the French language:

+
docusaurus.config.js
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr'],
},
themeConfig: {
navbar: {
items: [
// ...
{
type: 'localeDropdown',
position: 'left',
},
// ...
],
},
},
// ...
};
+

Translate the homepage:

+
src/pages/index.js
import React from 'react';
import Translate from '@docusaurus/Translate';
import Layout from '@theme/Layout';

export default function Home() {
return (
<Layout>
<h1 style={{margin: 20}}>
<Translate description="The homepage main heading">
Welcome to my Docusaurus translated site!
</Translate>
</h1>
</Layout>
);
}
+

Initialize the i18n folder

+

Use the write-translations CLI command to initialize the JSON translation files for the French locale:

+
npm run write-translations -- --locale fr

1 translations written at i18n/fr/code.json
11 translations written at i18n/fr/docusaurus-theme-classic/footer.json
4 translations written at i18n/fr/docusaurus-theme-classic/navbar.json
3 translations written at i18n/fr/docusaurus-plugin-content-docs/current.json
+
tip

Use the --messagePrefix '(fr) ' option to make the untranslated strings stand out.

Hello will appear as (fr) Hello and makes it clear a translation is missing.

+

Copy your untranslated Markdown files to the French folder:

+
mkdir -p i18n/fr/docusaurus-plugin-content-docs/current
cp -r docs/** i18n/fr/docusaurus-plugin-content-docs/current

mkdir -p i18n/fr/docusaurus-plugin-content-blog
cp -r blog/** i18n/fr/docusaurus-plugin-content-blog

mkdir -p i18n/fr/docusaurus-plugin-content-pages
cp -r src/pages/**.md i18n/fr/docusaurus-plugin-content-pages
cp -r src/pages/**.mdx i18n/fr/docusaurus-plugin-content-pages
+

Add all these files to Git.

+

Translate the files

+

Translate the Markdown and JSON files in i18n/fr and commit the translation.

+

You should now be able to start your site in French and see the translations:

+
npm run start -- --locale fr
+

You can also build the site locally or on your CI:

+
npm run build
# or
npm run build -- --locale fr
+

Repeat

+

Follow the same process for each locale you need to support.

+

Maintenance

+

Keeping translated files consistent with the originals can be challenging, in particular for Markdown documents.

+

Markdown translations

+

When an untranslated Markdown document is edited, it is your responsibility to maintain the respective translated files, and we unfortunately don't have a good way to help you do so.

+

To keep your translated sites consistent, when the website/docs/doc1.md doc is edited, you need backport these edits to i18n/fr/docusaurus-plugin-content-docs/current/doc1.md.

+

JSON translations

+

To help you maintain the JSON translation files, it is possible to run again the write-translations CLI command:

+
npm run write-translations -- --locale fr
+

New translations will be appended, and existing ones will not be overridden.

+
tip

Reset your translations with the --override option.

+

Localize edit URLs

+

When the user is browsing a page at /fr/doc1, the edit button will link by default to the unlocalized doc at website/docs/doc1.md.

+

Your translations are on Git, and you can use the editLocalizedFiles: true option of the docs and blog plugins.

+

The edit button will link to the localized doc at i18n/fr/docusaurus-plugin-content-docs/current/doc1.md.

+ + \ No newline at end of file diff --git a/docs/i18n/git.html.html b/docs/i18n/git.html.html new file mode 100644 index 0000000000..77cf9ba16d --- /dev/null +++ b/docs/i18n/git.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/i18n/introduction.html b/docs/i18n/introduction.html new file mode 100644 index 0000000000..c06da29d9c --- /dev/null +++ b/docs/i18n/introduction.html @@ -0,0 +1,129 @@ + + + + + +i18n - Introduction | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

i18n - Introduction

+

It is easy to translate a Docusaurus website with its internationalization (i18n) support.

+

Goals

+

It is important to understand the design decisions behind the Docusaurus i18n support.

+

For more context, you can read the initial RFC and PR.

+

i18n goals

+

The goals of the Docusaurus i18n system are:

+
    +
  • Simple: just put the translated files in the correct filesystem location
  • +
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • +
  • Flexible deployment options: single, multiple domains, or hybrid
  • +
  • Modular: allow plugin authors to provide i18n support
  • +
  • Low-overhead runtime: documentation is mostly static and does not require heavy JS libraries or polyfills
  • +
  • Scalable build-times: allow building and deploying localized sites independently
  • +
  • Localize assets: an image of your site might contain text that should be translated
  • +
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • +
  • Easy to use with Crowdin: a lot of Docusaurus v1 sites use Crowdin and should be able to migrate to v2
  • +
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • +
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • +
  • Default translations: classic theme labels are translated for you in many languages
  • +
+

i18n non-goals

+

We don't provide support for:

+
    +
  • Automatic locale detection: opinionated, and best done on the server (your hosting provider)
  • +
  • Translation SaaS software: you are responsible to understand the external tools of your choice
  • +
  • Translation of slugs: technically complicated, little SEO value
  • +
+

Translation workflow

+

Overview

+

Overview of the workflow to create a translated Docusaurus website:

+
    +
  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. +
  3. Translate: put the translation files at the correct filesystem location
  4. +
  5. Deploy: build and deploy your site using a single or multi-domain strategy
  6. +
+

Translation files

+

You will work with three kinds of translation files.

+

Markdown files

+

This is the main content of your Docusaurus website.

+

Markdown and MDX documents are translated as a whole, to fully preserve the translation context, instead of splitting each sentence as a separate string.

+

JSON files

+

JSON is used to translate:

+
    +
  • Your React code: standalone React pages in src/pages, or other components
  • +
  • Layout labels provided through themeConfig: navbar, footer
  • +
  • Layout labels provided through plugin options: docs sidebar category labels, blog sidebar title...
  • +
+

The JSON format used is called Chrome i18n:

+
{
"myTranslationKey1": {
"message": "Translated message 1",
"description": "myTranslationKey1 is used on the homepage"
},
"myTranslationKey2": {
"message": "Translated message 2",
"description": "myTranslationKey2 is used on the FAQ page"
}
}
+

The choice was made for 2 reasons:

+ +

Data files

+

Some plugins may read from external data files that are localized as a whole. For example, the blog plugin uses an authors.yml file that can be translated by creating a copy under i18n/[locale]/docusaurus-plugin-content-blog/authors.yml.

+

Translation files location

+

The translation files should be created at the correct filesystem location.

+

Each locale and plugin has its own i18n subfolder:

+
website/i18n/[locale]/[pluginName]/...
+
note

For multi-instance plugins, the path is website/i18n/[locale]/[pluginName]-[pluginId]/....

+

Translating a very simple Docusaurus site in French would lead to the following tree:

+
website/i18n
└── fr
├── code.json # Any text label present in the React code
# Includes text labels from the themes' code
├── docusaurus-plugin-content-blog # translation data the blog plugin needs
│ └── 2020-01-01-hello.md

├── docusaurus-plugin-content-docs # translation data the docs plugin needs
│ ├── current
│ │ ├── doc1.md
│ │ └── doc2.mdx
│ └── current.json

└── docusaurus-theme-classic # translation data the classic theme needs
├── footer.json # Text labels in your footer theme config
└── navbar.json # Text labels in your navbar theme config
+

The JSON files are initialized with the docusaurus write-translations CLI command. Each plugin sources its own translated content under the corresponding folder, while the code.json file defines all text labels used in the React code.

+

Each content plugin or theme is different, and defines its own translation files location:

+
+ + \ No newline at end of file diff --git a/docs/i18n/introduction.html.html b/docs/i18n/introduction.html.html new file mode 100644 index 0000000000..de30a2ad32 --- /dev/null +++ b/docs/i18n/introduction.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/i18n/tutorial.html b/docs/i18n/tutorial.html new file mode 100644 index 0000000000..ac769c1638 --- /dev/null +++ b/docs/i18n/tutorial.html @@ -0,0 +1,170 @@ + + + + + +i18n - Tutorial | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

i18n - Tutorial

+ +

This tutorial will walk you through the basics of the Docusaurus i18n system.

+

We will add French translations to a newly initialized English Docusaurus website.

+

Initialize a new site with npx create-docusaurus@latest website classic (like this one).

+

Configure your site

+

Modify docusaurus.config.js to add the i18n support for the French language.

+

Site configuration

+

Use the site i18n configuration to declare the i18n locales:

+
docusaurus.config.js
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr', 'fa'],
localeConfigs: {
en: {
htmlLang: 'en-GB',
},
// You can omit a locale (e.g. fr) if you don't need to override the defaults
fa: {
direction: 'rtl',
},
},
},
};
+

The locale names are used for the translation files' locations, as well as your translated locales' base URL. When building all locales, only the default locale will have its name omitted in the base URL.

+

Docusaurus uses the locale names to provide sensible defaults: the <html lang="..."> attribute, locale label, calendar format, etc. You can customize these defaults with the localeConfigs.

+

Theme configuration

+

Add a navbar item of type localeDropdown so that users can select the locale they want:

+
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'localeDropdown',
position: 'left',
},
],
},
},
};
+
tip

You can pass a query parameter that will be appended to the URL when a user changes the locale using the dropdown (e.g. queryString: '?persistLocale=true').

This is useful for implementing an automatic locale detection on your server. For example, you can use this parameter to store the user's preferred locale in a cookie.

+

Start your site

+

Start your localized site in dev mode, using the locale of your choice:

+
npm run start -- --locale fr
+

Your site is accessible at http://localhost:3000/fr/.

+

We haven't provided any translation yet, so the site is mostly untranslated.

+
tip

Docusaurus provides default translations for generic theme labels, such as "Next" and "Previous" for the pagination.

Please help us complete those default translations.

+
warning

Each locale is a distinct standalone single-page application: it is not possible to start the Docusaurus sites in all locales at the same time.

+

Translate your site

+

All translation data for the French locale is stored in website/i18n/fr. Each plugin sources its own translated content under the corresponding folder, while the code.json file defines all text labels used in the React code.

+
note

After copying files around, restart your site with npm run start -- --locale fr. Hot-reload will work better when editing existing files.

+

Translate your React code

+

For any React code you've written yourself: React pages, React components, etc., you will use the translation APIs.

+

Locate all text labels in your React code that will be visible to your users, and mark them with the translation APIs. There are two kinds of APIs:

+
    +
  • The <Translate> component wraps a string as a JSX element;
  • +
  • The translate() callback takes a message and returns a string.
  • +
+

Use the one that better fits the context semantically. For example, the <Translate> can be used as React children, while for props that expect a string, the callback can be used.

+
warning

A JSX element is an object, not a string. Using it in contexts expecting strings (such as the children of <option>) would coerce it to a string, which returns "[object Object]". While we encourage you to use <Translate> as JSX children, only use the element form when it actually works.

+
src/pages/index.js
import React from 'react';
import Layout from '@theme/Layout';
import Link from '@docusaurus/Link';

export default function Home() {
return (
<Layout>
<h1>Welcome to my website</h1>
<main>
You can also visit my
<Link to="https://docusaurus.io/blog">blog</Link>
<img
src="/img/home.png"
alt="Home icon"
/>
</main>
</Layout>
);
}
+
info

Docusaurus provides a very small and lightweight translation runtime on purpose, and only supports basic placeholders interpolation, using a subset of the ICU Message Format.

Most documentation websites are generally static and don't need advanced i18n features (plurals, genders, etc.). Use a library like react-intl for more advanced use-cases.

+

The docusaurus write-translations command will statically analyze all React code files used in your site, extract calls to these APIs, and aggregate them in the code.json file. The translation files will be stored as maps from IDs to translation message objects (including the translated label and the description of the label). In your calls to the translation APIs (<Translate> or translate()), you need to specify either the default untranslated message or the ID, in order for Docusaurus to correctly correlate each translation entry to the API call.

+
text labels must be static

The docusaurus write-translations command only does static analysis of your code. It doesn't actually run your site. Therefore, dynamic messages can't be extracted, as the message is an expression, not a string:

const items = [
{id: 1, title: 'Hello'},
{id: 2, title: 'World'},
];

function ItemsList() {
return (
<ul>
{/* DON'T DO THIS: doesn't work with the write-translations command */}
{items.map((item) => (
<li key={item.id}>
<Translate>{item.title}</Translate>
</li>
))}
<ul>
);
}

This still behaves correctly at runtime. However, in the future, we may provide a "no-runtime" mechanism, allowing the translations to be directly inlined in the React code through Babel transformations, instead of calling the APIs at runtime. Therefore, to be future-proof, you should always prefer statically analyzable messages. For example, we can refactor the code above to:

const items = [
{id: 1, title: <Translate>Hello</Translate>},
{id: 2, title: <Translate>World</Translate>},
];

function ItemsList() {
return (
<ul>
{/* The titles are now already translated when rendering! */}
{items.map((item) => (
<li key={item.id}>{item.title}</li>
))}
<ul>
);
}

You can see the calls to the translation APIs as purely markers that tell Docusaurus that "here's a text label to be replaced with a translated message".

+

Pluralization

+

When you run write-translations, you will notice that some labels are pluralized:

+
i18n/en/code.json
{
// ...
"theme.blog.post.plurals": "One post|{count} posts"
// ...
}
+

Every language will have a list of possible plural categories. Docusaurus will arrange them in the order of ["zero", "one", "two", "few", "many", "other"]. For example, because English (en) has two plural forms ("one" and "other"), the translation message has two labels separated by a pipe (|). For Polish (pl) which has three plural forms ("one", "few", and "many"), you would provide three labels in that order, joined by pipes.

+

You can pluralize your own code's messages as well:

+
import {translate} from '@docusaurus/Translate';
import {usePluralForm} from '@docusaurus/theme-common';

function ItemsList({items}) {
// `usePluralForm` will provide the plural selector for the current locale
const {selectMessage} = usePluralForm();
// Select the appropriate pluralized label based on `items.length`
const message = selectMessage(
items.length,
translate(
{message: 'One item|{count} items'},
{count: items.length},
),
);
return (
<>
<h2>{message}</h2>
<ul>{items.map((item) => <li key={item.id}>{item.title}</li>)}<ul>
</>
);
}
+
note

Docusaurus uses Intl.PluralRules to resolve and select plural forms. It is important to provide the right number of plural forms in the right order for selectMessage to work.

+

Translate plugin data

+

JSON translation files are used for everything that is interspersed in your code:

+
    +
  • React code, including the translated labels you have marked above
  • +
  • Navbar and footer labels in theme config
  • +
  • Docs sidebar category labels in sidebars.js
  • +
  • Blog sidebar title in plugin options
  • +
  • ...
  • +
+

Run the write-translations command:

+
npm run write-translations -- --locale fr
+

It will extract and initialize the JSON translation files that you need to translate. The code.json file at the root includes all translation API calls extracted from the source code, which could either be written by you or provided by the themes, some of which may already be translated by default.

+
i18n/fr/code.json
{
// No ID for the <Translate> component: the default message is used as ID
"Welcome to my website": {
"message": "Welcome to my website"
},
"home.visitMyBlog": {
"message": "You can also visit my {blog}",
"description": "The homepage message to ask the user to visit my blog"
},
"homepage.visitMyBlog.linkLabel": {
"message": "Blog",
"description": "The label for the link to my blog"
},
"Home icon": {
"message": "Home icon",
"description": "The homepage icon alt message"
}
}
+

Plugins and themes will also write their own JSON translation files, such as:

+
i18n/fr/docusaurus-theme-classic/navbar.json
{
"title": {
"message": "My Site",
"description": "The title in the navbar"
},
"item.label.Docs": {
"message": "Docs",
"description": "Navbar item with label Docs"
},
"item.label.Blog": {
"message": "Blog",
"description": "Navbar item with label Blog"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item with label GitHub"
}
}
+

Translate the message attribute in the JSON files of i18n/fr, and your site layout and homepage should now be translated.

+

Translate Markdown files

+

Official Docusaurus content plugins extensively use Markdown/MDX files and allow you to translate them.

+

Translate the docs

+

Copy your docs Markdown files from docs/ to i18n/fr/docusaurus-plugin-content-docs/current, and translate them:

+
mkdir -p i18n/fr/docusaurus-plugin-content-docs/current
cp -r docs/** i18n/fr/docusaurus-plugin-content-docs/current
+
info

Notice that the docusaurus-plugin-content-docs plugin always divides its content by versions. The data in ./docs folder will be translated in the current subfolder and current.json file. See the doc versioning guide for more information about what "current" means.

+

Translate the blog

+

Copy your blog Markdown files to i18n/fr/docusaurus-plugin-content-blog, and translate them:

+
mkdir -p i18n/fr/docusaurus-plugin-content-blog
cp -r blog/** i18n/fr/docusaurus-plugin-content-blog
+

Translate the pages

+

Copy your pages Markdown files to i18n/fr/docusaurus-plugin-content-pages, and translate them:

+
mkdir -p i18n/fr/docusaurus-plugin-content-pages
cp -r src/pages/**.md i18n/fr/docusaurus-plugin-content-pages
cp -r src/pages/**.mdx i18n/fr/docusaurus-plugin-content-pages
+
warning

We only copy .md and .mdx files, as React pages are translated through JSON translation files already.

+
Use explicit heading IDs

By default, a Markdown heading ### Hello World will have a generated ID hello-world. Other documents can link it with [link](#hello-world). However, after translation, the heading becomes ### Bonjour le Monde, with ID bonjour-le-monde.

Generated IDs are not always a good fit for localized sites, as it requires you to localize all the anchor links:

- [link](#hello-world).
+ [link](#bonjour-le-monde)

For localized sites, it is recommended to use explicit heading IDs.

+

Deploy your site

+

You can choose to deploy your site under a single domain or use multiple (sub)domains.

+

Single-domain deployment

+

Run the following command:

+
npm run build
+

Docusaurus will build one single-page application per locale:

+
    +
  • website/build: for the default, English language
  • +
  • website/build/fr: for the French language
  • +
+

You can now deploy the build folder to the static hosting solution of your choice.

+
note

The Docusaurus website uses this strategy:

+
tip

Static hosting providers generally redirect /unknown/url to /404.html by convention, always showing an English 404 page.

Localize your 404 pages by configuring your host to redirect /fr/* to /fr/404.html.

This is not always possible, and depends on your host: GitHub Pages can't do this, Netlify can.

+

Multi-domain deployment

+

You can also build your site for a single locale:

+
npm run build -- --locale fr
+

Docusaurus will not add the /fr/ URL prefix.

+

On your static hosting provider:

+
    +
  • create one deployment per locale
  • +
  • configure the appropriate build command, using the --locale option
  • +
  • configure the (sub)domain of your choice for each deployment
  • +
+
warning

This strategy is not possible with GitHub Pages, as it is only possible to have a single deployment.

+

Hybrid

+

It is possible to have some locales using sub-paths, and others using subdomains.

+

It is also possible to deploy each locale as a separate subdomain, assemble the subdomains in a single unified domain at the CDN level:

+
    +
  • Deploy your site as fr.docusaurus.io
  • +
  • Configure a CDN to serve it from docusaurus.io/fr
  • +
+

Managing translations

+

Docusaurus doesn't care about how you manage your translations: all it needs is that all translation files (JSON, Markdown, or other data files) are available in the file system during building. However, as site creators, you would need to consider how translations are managed so your translation contributors could collaborate well.

+

We will share two common translation collaboration strategies: using git and using Crowdin.

+ + \ No newline at end of file diff --git a/docs/i18n/tutorial.html.html b/docs/i18n/tutorial.html.html new file mode 100644 index 0000000000..35887b466e --- /dev/null +++ b/docs/i18n/tutorial.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/installation.html b/docs/installation.html new file mode 100644 index 0000000000..35a553d3e0 --- /dev/null +++ b/docs/installation.html @@ -0,0 +1,124 @@ + + + + + +Installation | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Installation

+ +

Docusaurus consists of a set of npm packages.

+
tip

Use the Fast Track to understand Docusaurus in 5 minutes ⏱!

Use docusaurus.new to test Docusaurus immediately in your browser!

+

Requirements

+
    +
  • Node.js version 18.0 or above (which can be checked by running node -v). You can use nvm for managing multiple Node versions on a single machine installed. +
      +
    • When installing Node.js, you are recommended to check all checkboxes related to dependencies.
    • +
    +
  • +
+

Scaffold project website

+

The easiest way to install Docusaurus is to use the command line tool that helps you scaffold a skeleton Docusaurus website. You can run this command anywhere in a new empty repository or within an existing repository, it will create a new directory containing the scaffolded files.

+
npx create-docusaurus@latest my-website classic
+

We recommend the classic template so that you can get started quickly, and it contains features found in Docusaurus 1. The classic template contains @docusaurus/preset-classic which includes standard documentation, a blog, custom pages, and a CSS framework (with dark mode support). You can get up and running extremely quickly with the classic template and customize things later on when you have gained more familiarity with Docusaurus.

+

You can also use the template's TypeScript variant by passing the --typescript flag. See TypeScript support for more information.

+
npx create-docusaurus@latest my-website classic --typescript
+
Meta-Only

If you are setting up a new Docusaurus website for a Meta open source project, run this command inside an internal repository, which comes with some useful Meta-specific defaults:

scarf static-docs-bootstrap
+
Alternative installation commands

You can also initialize a new project using your preferred project manager:

npm init docusaurus
+

Run npx create-docusaurus@latest --help, or check out its API docs for more information about all available flags.

+

Project structure

+

Assuming you chose the classic template and named your site my-website, you will see the following files generated under a new directory my-website/:

+
my-website
├── blog
│ ├── 2019-05-28-hola.md
│ ├── 2019-05-29-hello-world.md
│ └── 2020-05-30-welcome.md
├── docs
│ ├── doc1.md
│ ├── doc2.md
│ ├── doc3.md
│ └── mdx.md
├── src
│ ├── css
│ │ └── custom.css
│ └── pages
│ ├── styles.module.css
│ └── index.js
├── static
│ └── img
├── docusaurus.config.js
├── package.json
├── README.md
├── sidebars.js
└── yarn.lock
+

Project structure rundown

+
    +
  • /blog/ - Contains the blog Markdown files. You can delete the directory if you've disabled the blog plugin, or you can change its name after setting the path option. More details can be found in the blog guide
  • +
  • /docs/ - Contains the Markdown files for the docs. Customize the order of the docs sidebar in sidebars.js. You can delete the directory if you've disabled the docs plugin, or you can change its name after setting the path option. More details can be found in the docs guide
  • +
  • /src/ - Non-documentation files like pages or custom React components. You don't have to strictly put your non-documentation files here, but putting them under a centralized directory makes it easier to specify in case you need to do some sort of linting/processing +
      +
    • /src/pages - Any JSX/TSX/MDX file within this directory will be converted into a website page. More details can be found in the pages guide
    • +
    +
  • +
  • /static/ - Static directory. Any contents inside here will be copied into the root of the final build directory
  • +
  • /docusaurus.config.js - A config file containing the site configuration. This is the equivalent of siteConfig.js in Docusaurus v1
  • +
  • /package.json - A Docusaurus website is a React app. You can install and use any npm packages you like in them
  • +
  • /sidebars.js - Used by the documentation to specify the order of documents in the sidebar
  • +
+

Monorepos

+

If you are using Docusaurus for documentation of an existing project, a monorepo may be the solution for you. Monorepos allow you to share dependencies between similar projects. For example, your website may use your local packages to showcase latest features instead of depending on a released version. Then, your contributors can update the docs as they implement features. An example monorepo folder structure is below:

+
my-monorepo
├── package-a # Another package, your actual project
│ ├── src
│ └── package.json # Package A's dependencies
├── website # Docusaurus root
│ ├── docs
│ ├── src
│ └── package.json # Docusaurus' dependencies
├── package.json # Monorepo's shared dependencies
+

In this case, you should run npx create-docusaurus within the ./my-monorepo folder.

+

If you're using a hosting provider such as Netlify or Vercel, you will need to change the Base directory of the site to where your Docusaurus root is. In this case, that would be ./website. Read more about configuring ignore commands in the deployment docs.

+

Read more about monorepos in the Yarn documentation (Yarn is not the only way to set up a monorepo, but it's a common solution), or checkout Docusaurus and Jest for some real-world examples.

+

Running the development server

+

To preview your changes as you edit the files, you can run a local development server that will serve your website and reflect the latest changes.

+
cd my-website
npm run start
+

By default, a browser window will open at http://localhost:3000.

+

Congratulations! You have just created your first Docusaurus site! Browse around the site to see what's available.

+

Build

+

Docusaurus is a modern static website generator so we need to build the website into a directory of static contents and put it on a web server so that it can be viewed. To build the website:

+
npm run build
+

and contents will be generated within the /build directory, which can be copied to any static file hosting service like GitHub pages, Vercel or Netlify. Check out the docs on deployment for more details.

+

Updating your Docusaurus version

+

There are many ways to update your Docusaurus version. One guaranteed way is to manually change the version number in package.json to the desired version. Note that all @docusaurus/-namespaced packages should be using the same version.

+ +
info

You are browsing the documentation of an unreleased version. If you want to use any unreleased feature, you can use the @canary release.

package.json
{
"dependencies": {
"@docusaurus/core": "current",
"@docusaurus/preset-classic": "current",
// ...
}
}
+

Then, in the directory containing package.json, run your package manager's install command:

+
npm install
+

To check that the update occurred successfully, run:

+
npx docusaurus --version
+

You should see the correct version as output.

+

Alternatively, if you are using Yarn, you can do:

+
yarn add @docusaurus/core @docusaurus/preset-classic
+
tip

Use new unreleased features of Docusaurus with the @canary npm dist tag

+

Problems?

+

Ask for help on Stack Overflow, on our GitHub repository, our Discord server, or Twitter.

+ + \ No newline at end of file diff --git a/docs/installation.html.html b/docs/installation.html.html new file mode 100644 index 0000000000..f549a21754 --- /dev/null +++ b/docs/installation.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html deleted file mode 100644 index 48d6fbbbba..0000000000 --- a/docs/intro/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - -Tutorial Intro | My Site - - - - - -

Tutorial Intro

-

Let's discover Docusaurus in less than 5 minutes.

-

Getting Started

-

Get started by creating a new site.

-

Or try Docusaurus immediately with docusaurus.new.

-

What you'll need

-
    -
  • Node.js version 18.0 or above: -
      -
    • When installing Node.js, you are recommended to check all checkboxes related to dependencies.
    • -
    -
  • -
-

Generate a new site

-

Generate a new Docusaurus site using the classic template.

-

The classic template will automatically be added to your project after you run the command:

-
npm init docusaurus@latest my-website classic
-

You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.

-

The command also installs all necessary dependencies you need to run Docusaurus.

-

Start your site

-

Run the development server:

-
cd my-website
npm run start
-

The cd command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.

-

The npm run start command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.

-

Open docs/intro.md (this page) and edit some lines: the site reloads automatically and displays your changes.

- - \ No newline at end of file diff --git a/docs/introduction/index.html b/docs/introduction/index.html new file mode 100644 index 0000000000..1f9c147824 --- /dev/null +++ b/docs/introduction/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features.html b/docs/markdown-features.html new file mode 100644 index 0000000000..e4325a4f99 --- /dev/null +++ b/docs/markdown-features.html @@ -0,0 +1,104 @@ + + + + + +Markdown Features | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Markdown Features

+ +

Docusaurus uses Markdown as its main content authoring format.

+
Learn Markdown
+

Docusaurus uses modern tooling to help you create interactive documentation.

+

The MDX compiler transforms Markdown files to React components, and allows you to use JSX in your Markdown content. This enables you to easily interleave React components within your content, and create delightful learning experiences.

+
Use the MDX Playground

The MDX playground is your new best friend!

It is a very helpful debugging tool that shows how the MDX compiler transforms Markdown to React.

Options: select the right format (MDX or CommonMark) and the following plugins Docusaurus uses: remark-gfm, remark-directive, rehype-raw.

+

MDX vs. CommonMark

+

Docusaurus compiles both .md and .mdx files to React components using the MDX compiler, but the syntax can be interpreted differently depending on your settings.

+

The MDX compiler supports 2 formats:

+
    +
  • The MDX format: a powerful parser allowing the usage of JSX
  • +
  • The CommonMark format: a standard-compliant Markdown parser that does not allow the usage of JSX
  • +
+

By default, Docusaurus v3 uses the MDX format for all files (including .md files) for historical reasons.

+

It is possible to opt-in for CommonMark using the siteConfig.markdown.format setting or the format: md front matter.

+
how to use CommonMark

If you plan to use CommonMark, we recommend the siteConfig.markdown.format: 'detect' setting. The appropriate format will be selected automatically, based on file extensions:

    +
  • .md files will use the CommonMark format
  • +
  • .mdx files will use the MDX format
  • +
+
Experimental CommonMark support

The CommonMark support is experimental and currently has a few limitations.

+

Standard features

+

Markdown is a syntax that enables you to write formatted content in a readable syntax.

+
### My Doc Section

Hello world message with some **bold** text, some _italic_ text, and a [link](/)

![img alt](/img/docusaurus.png)
+
http://localhost:3000

My Doc Section

Hello world message with some bold text, some italic text and a link

img alt

+
Markdown is declarative

Some may assume a 1-1 correlation between Markdown and HTML, e.g., ![Preview](/img/docusaurus.png) will always become <img src="/img/docusaurus.png" alt="Preview" />, as-is. However, that is not the case.

The Markdown syntax ![message](url) only declaratively tells Docusaurus that an image needs to be inserted here, but we may do other things like transforming a file path to URL path, so the generated markup may differ from the output of other Markdown renderers, or a naïve hand-transcription to the equivalent JSX/HTML code.

In general, you should only assume the semantics of the markup (``` fences become code blocks; > becomes quotes, etc.), but not the actual compiled output.

+

Front matter

+

Front matter is used to add metadata to your Markdown file. All content plugins have their own front matter schema, and use the front matter to enrich the default metadata inferred from the content or other configuration.

+

Front matter is provided at the very top of the file, enclosed by three dashes ---. The content is parsed as YAML.

+
---
title: My Doc Title
more_data:
- Can be provided
- as: objects
or: arrays
---
+
info

The API documentation of each official plugin lists the supported attributes:

+
enhance your front matter

Use the Markdown config parseFrontMatter function to provide your own front matter parser, or to enhance the default parser.

It is possible to reuse the default parser to wrap it with your own custom proprietary logic. This makes it possible to implement convenient front matter transformations, shortcuts, or to integrate with external systems using front matter that Docusaurus plugins do not support.

docusaurus.config.js
export default {
markdown: {
parseFrontMatter: async (params) => {
// Reuse the default parser
const result = await params.defaultParseFrontMatter(params);

// Process front matter description placeholders
result.frontMatter.description =
result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE');

// Create your own front matter shortcut
if (result.frontMatter.i_do_not_want_docs_pagination) {
result.frontMatter.pagination_prev = null;
result.frontMatter.pagination_next = null;
}

// Rename an unsupported front matter coming from another system
if (result.frontMatter.cms_seo_summary) {
result.frontMatter.description = result.frontMatter.cms_seo_summary;
delete result.frontMatter.cms_seo_summary;
}

return result;
},
},
};
+

Quotes

+

Markdown quotes are beautifully styled:

+
> Easy to maintain open source documentation websites.
>
> — Docusaurus
+
http://localhost:3000
+

Easy to maintain open source documentation websites.

+

— Docusaurus

+
+

Details

+

Markdown can embed HTML elements, and details HTML elements are beautifully styled:

+
### Details element example

<details>
<summary>Toggle me!</summary>
<div>
<div>This is the detailed content</div>
<br/>
<details>
<summary>
Nested toggle! Some surprise inside...
</summary>
<div>😲😲😲😲😲</div>
</details>
</div>
</details>
+
http://localhost:3000

Details element example

Toggle me!
This is the detailed content

Nested toggle! Some surprise inside...

😲😲😲😲😲
+ + \ No newline at end of file diff --git a/docs/markdown-features.html.html b/docs/markdown-features.html.html new file mode 100644 index 0000000000..c9bcf9bf1e --- /dev/null +++ b/docs/markdown-features.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/admonitions.html b/docs/markdown-features/admonitions.html new file mode 100644 index 0000000000..6462b4279e --- /dev/null +++ b/docs/markdown-features/admonitions.html @@ -0,0 +1,109 @@ + + + + + +Admonitions | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Admonitions

+ +

In addition to the basic Markdown syntax, we have a special admonitions syntax by wrapping text with a set of 3 colons, followed by a label denoting its type.

+

Example:

+
:::note

Some **content** with _Markdown_ `syntax`. Check [this `api`](#).

:::

:::tip

Some **content** with _Markdown_ `syntax`. Check [this `api`](#).

:::

:::info

Some **content** with _Markdown_ `syntax`. Check [this `api`](#).

:::

:::warning

Some **content** with _Markdown_ `syntax`. Check [this `api`](#).

:::

:::danger

Some **content** with _Markdown_ `syntax`. Check [this `api`](#).

:::
+
http://localhost:3000
note

Some content with Markdown syntax. Check this api.

tip

Some content with Markdown syntax. Check this api.

info

Some content with Markdown syntax. Check this api.

warning

Some content with Markdown syntax. Check this api.

danger

Some content with Markdown syntax. Check this api.

+

Usage with Prettier

+

If you use Prettier to format your Markdown files, Prettier might auto-format your code to invalid admonition syntax. To avoid this problem, add empty lines around the starting and ending directives. This is also why the examples we show here all have empty lines around the content.

+ +
<!-- Prettier doesn't change this -->
:::note

Hello world

:::

<!-- Prettier changes this -->
:::note
Hello world
:::

<!-- to this -->
::: note Hello world:::
+

Specifying title

+

You may also specify an optional title.

+
:::note[Your Title **with** some _Markdown_ `syntax`!]

Some **content** with some _Markdown_ `syntax`.

:::
+
http://localhost:3000
Your Title with some Markdown syntax!

Some content with some Markdown syntax.

+

Nested admonitions

+

Admonitions can be nested. Use more colons : for each parent admonition level.

+
:::::info[Parent]

Parent content

::::danger[Child]

Child content

:::tip[Deep Child]

Deep child content

:::

::::

:::::
+
http://localhost:3000
Parent

Parent content

Child

Child content

Deep Child

Deep child content

+

Admonitions with MDX

+

You can use MDX inside admonitions too!

+
import Tabs from '@theme/Tabs';

import TabItem from '@theme/TabItem';

:::tip[Use tabs in admonitions]

<Tabs>
<TabItem value="apple" label="Apple">This is an apple 🍎</TabItem>
<TabItem value="orange" label="Orange">This is an orange 🍊</TabItem>
<TabItem value="banana" label="Banana">This is a banana 🍌</TabItem>
</Tabs>

:::
+
http://localhost:3000
Use tabs in admonitions
This is an apple 🍎
+

Usage in JSX

+

Outside of Markdown, you can use the @theme/Admonition component to get the same output.

+
MyReactPage.jsx
import Admonition from '@theme/Admonition';

export default function MyReactPage() {
return (
<div>
<Admonition type="info">
<p>Some information</p>
</Admonition>
</div>
);
}
+

The types that are accepted are the same as above: note, tip, danger, info, warning. Optionally, you can specify an icon by passing a JSX element or a string, or a title:

+
MyReactPage.jsx
<Admonition type="tip" icon="💡" title="Did you know...">
Use plugins to introduce shorter syntax for the most commonly used JSX
elements in your project.
</Admonition>
+
http://localhost:3000
💡Did you know...

Use plugins to introduce shorter syntax for the most commonly used JSX +elements in your project.

+

Customizing admonitions

+

There are two kinds of customizations possible with admonitions: parsing and rendering.

+

Customizing rendering behavior

+

You can customize how each individual admonition type is rendered through swizzling. You can often achieve your goal through a simple wrapper. For example, in the follow example, we swap out the icon for info admonitions only.

+
src/theme/Admonition.js
import React from 'react';
import Admonition from '@theme-original/Admonition';
import MyCustomNoteIcon from '@site/static/img/info.svg';

export default function AdmonitionWrapper(props) {
if (props.type !== 'info') {
return <Admonition title="My Custom Admonition Title" {...props} />;
}
return <Admonition icon={<MyCustomNoteIcon />} {...props} />;
}
+

Customizing parsing behavior

+

Admonitions are implemented with a Remark plugin. The plugin is designed to be configurable. To customize the Remark plugin for a specific content plugin (docs, blog, pages), pass the options through the admonitions key.

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
admonitions: {
keywords: ['note', 'tip', 'info', 'warning', 'danger'],
extendDefaults: true,
},
},
},
],
],
};
+

The plugin accepts the following options:

+
    +
  • keywords: An array of keywords that can be used as the type for the admonition.
  • +
  • extendDefaults: Should the provided options (such as keywords) be merged into the existing defaults. Defaults to true.
  • +
+

The keyword will be passed as the type prop of the Admonition component.

+

Custom admonition type components

+

By default, the theme doesn't know what do to with custom admonition keywords such as :::my-custom-admonition. It is your responsibility to map each admonition keyword to a React component so that the theme knows how to render them.

+

If you registered a new admonition type my-custom-admonition via the following config:

+
docusaurus.config.js
export default {
// ...
presets: [
[
'classic',
{
// ...
docs: {
admonitions: {
keywords: ['my-custom-admonition'],
extendDefaults: true,
},
},
},
],
],
};
+

You can provide the corresponding React component for :::my-custom-admonition by creating the following file (unfortunately, since it's not a React component file, it's not swizzlable):

+
src/theme/Admonition/Types.js
import React from 'react';
import DefaultAdmonitionTypes from '@theme-original/Admonition/Types';

function MyCustomAdmonition(props) {
return (
<div style={{border: 'solid red', padding: 10}}>
<h5 style={{color: 'blue', fontSize: 30}}>{props.title}</h5>
<div>{props.children}</div>
</div>
);
}

const AdmonitionTypes = {
...DefaultAdmonitionTypes,

// Add all your custom admonition types here...
// You can also override the default ones if you want
'my-custom-admonition': MyCustomAdmonition,
};

export default AdmonitionTypes;
+

Now you can use your new admonition keyword in a Markdown file, and it will be parsed and rendered with your custom logic:

+
:::my-custom-admonition[My Title]

It works!

:::
+
http://localhost:3000
My Title

It works!

+ + \ No newline at end of file diff --git a/docs/markdown-features/admonitions.html.html b/docs/markdown-features/admonitions.html.html new file mode 100644 index 0000000000..ac7cc0526b --- /dev/null +++ b/docs/markdown-features/admonitions.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/assets.html b/docs/markdown-features/assets.html new file mode 100644 index 0000000000..43dc6be04a --- /dev/null +++ b/docs/markdown-features/assets.html @@ -0,0 +1,103 @@ + + + + + +Assets | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Assets

+ +

Sometimes you want to link to assets (e.g. docx files, images...) directly from Markdown files, and it is convenient to co-locate the asset next to the Markdown file using it.

+

Let's imagine the following file structure:

+
# Your doc
/website/docs/myFeature.mdx

# Some assets you want to use
/website/docs/assets/docusaurus-asset-example-banner.png
/website/docs/assets/docusaurus-asset-example.docx
+

Images

+

You can display images in three different ways: Markdown syntax, CJS require, or ES imports syntax.

+

Display images using simple Markdown syntax:

![Example banner](./assets/docusaurus-asset-example-banner.png)
+

All of the above result in displaying the image:

+
http://localhost:3000

My image alternative text

+
note

If you are using @docusaurus/plugin-ideal-image, you need to use the dedicated image component, as documented.

+

Files

+

In the same way, you can link to existing assets by require'ing them and using the returned URL in videos, a anchor links, etc.

+
# My Markdown page

<a target="\_blank" href={require('./assets/docusaurus-asset-example.docx').default}> Download this docx </a>

or

[Download this docx using Markdown](./assets/docusaurus-asset-example.docx)
+ +
Markdown links are always file paths

If you use the Markdown image or link syntax, all asset paths will be resolved as file paths by Docusaurus and automatically converted to require() calls. You don't need to use require() in Markdown unless you use the JSX syntax, which you do have to handle yourself.

+

Inline SVGs

+

Docusaurus supports inlining SVGs out of the box.

+
import DocusaurusSvg from './docusaurus.svg';

<DocusaurusSvg />;
+
http://localhost:3000
+

This can be useful if you want to alter the part of the SVG image via CSS. For example, you can change one of the SVG colors based on the current theme.

+
import DocusaurusSvg from './docusaurus.svg';

<DocusaurusSvg className="themedDocusaurus" />;
+
[data-theme='light'] .themedDocusaurus [fill='#FFFF50'] {
fill: greenyellow;
}

[data-theme='dark'] .themedDocusaurus [fill='#FFFF50'] {
fill: seagreen;
}
+
http://localhost:3000
+

Themed Images

+

Docusaurus supports themed images: the ThemedImage component (included in the themes) allows you to switch the image source based on the current theme.

+
import ThemedImage from '@theme/ThemedImage';

<ThemedImage
alt="Docusaurus themed image"
sources={{
light: useBaseUrl('/img/docusaurus_light.svg'),
dark: useBaseUrl('/img/docusaurus_dark.svg'),
}}
/>;
+ +
http://localhost:3000
Docusaurus themed imageDocusaurus themed image
+

GitHub-style themed images

+

GitHub uses its own image theming approach with path fragments, which you can easily implement yourself.

+

To toggle the visibility of an image using the path fragment (for GitHub, it's #gh-dark-mode-only and #gh-light-mode-only), add the following to your custom CSS (you can also use your own suffix if you don't want to be coupled to GitHub):

+
src/css/custom.css
[data-theme='light'] img[src$='#gh-dark-mode-only'],
[data-theme='dark'] img[src$='#gh-light-mode-only'] {
display: none;
}
+
![Docusaurus themed image](/img/docusaurus_keytar.svg#gh-light-mode-only)![Docusaurus themed image](/img/docusaurus_speed.svg#gh-dark-mode-only)
+
http://localhost:3000

Docusaurus themed imageDocusaurus themed image

+

Static assets

+

If a Markdown link or image has an absolute path, the path will be seen as a file path and will be resolved from the static directories. For example, if you have configured static directories to be ['public', 'static'], then for the following image:

+
my-doc.md
![An image from the static](/img/docusaurus.png)
+

Docusaurus will try to look for it in both static/img/docusaurus.png and public/img/docusaurus.png. The link will then be converted to a require() call instead of staying as a URL. This is desirable in two regards:

+
    +
  1. You don't have to worry about the base URL, which Docusaurus will take care of when serving the asset;
  2. +
  3. The image enters Webpack's build pipeline and its name will be appended by a hash, which enables browsers to aggressively cache the image and improves your site's performance.
  4. +
+

If you intend to write URLs, you can use the pathname:// protocol to disable automatic asset linking.

+
![banner](pathname:///img/docusaurus-asset-example-banner.png)
+

This link will be generated as <img src="/img/docusaurus-asset-example-banner.png" alt="banner" />, without any processing or file existence checking.

+ + \ No newline at end of file diff --git a/docs/markdown-features/assets.html.html b/docs/markdown-features/assets.html.html new file mode 100644 index 0000000000..49b53a3fc1 --- /dev/null +++ b/docs/markdown-features/assets.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/code-blocks.html b/docs/markdown-features/code-blocks.html new file mode 100644 index 0000000000..aff1b610c4 --- /dev/null +++ b/docs/markdown-features/code-blocks.html @@ -0,0 +1,212 @@ + + + + + +Code blocks | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Code blocks

+ +

Code blocks within documentation are super-powered 💪.

+

Code title

+

You can add a title to the code block by adding a title key after the language (leave a space between them).

+
```jsx title="/src/components/HelloCodeTitle.js"
function HelloCodeTitle(props) {
return <h1>Hello, {props.name}</h1>;
}
```
+
http://localhost:3000
/src/components/HelloCodeTitle.js
function HelloCodeTitle(props) {
return <h1>Hello, {props.name}</h1>;
}
+

Syntax highlighting

+

Code blocks are text blocks wrapped around by strings of 3 backticks. You may check out this reference for the specifications of MDX.

+
```js
console.log('Every repo must come with a mascot.');
```
+

Use the matching language meta string for your code block, and Docusaurus will pick up syntax highlighting automatically, powered by Prism React Renderer.

+
http://localhost:3000
console.log('Every repo must come with a mascot.');
+

Theming

+

By default, the Prism syntax highlighting theme we use is Palenight. You can change this to another theme by passing theme field in prism as themeConfig in your docusaurus.config.js.

+

For example, if you prefer to use the dracula highlighting theme:

+
docusaurus.config.js
import {themes as prismThemes} from 'prism-react-renderer';

export default {
themeConfig: {
prism: {
theme: prismThemes.dracula,
},
},
};
+

Because a Prism theme is just a JS object, you can also write your own theme if you are not satisfied with the default. Docusaurus enhances the github and vsDark themes to provide richer highlight, and you can check our implementations for the light and dark code block themes.

+

Supported Languages

+

By default, Docusaurus comes with a subset of commonly used languages.

+
warning

Some popular languages like Java, C#, or PHP are not enabled by default.

+

To add syntax highlighting for any of the other Prism-supported languages, define it in an array of additional languages.

+
note

Each additional language has to be a valid Prism component name. For example, Prism would map the language cs to csharp, but only prism-csharp.js exists as a component, so you need to use additionalLanguages: ['csharp']. You can look into node_modules/prismjs/components to find all components (languages) available.

+

For example, if you want to add highlighting for the PowerShell language:

+
docusaurus.config.js
export default {
// ...
themeConfig: {
prism: {
additionalLanguages: ['powershell'],
},
// ...
},
};
+

After adding additionalLanguages, restart Docusaurus.

+

If you want to add highlighting for languages not yet supported by Prism, you can swizzle prism-include-languages:

+
npm run swizzle @docusaurus/theme-classic prism-include-languages
+

It will produce prism-include-languages.js in your src/theme folder. You can add highlighting support for custom languages by editing prism-include-languages.js:

+
src/theme/prism-include-languages.js
const prismIncludeLanguages = (Prism) => {
// ...

additionalLanguages.forEach((lang) => {
require(`prismjs/components/prism-${lang}`);
});

require('/path/to/your/prism-language-definition');

// ...
};
+

You can refer to Prism's official language definitions when you are writing your own language definitions.

+

When adding a custom language definition, you do not need to add the language to the additionalLanguages config array, since Docusaurus only looks up the additionalLanguages strings in languages that Prism provides. Adding the language import in prism-include-languages.js is sufficient.

+

Line highlighting

+

Highlighting with comments

+

You can use comments with highlight-next-line, highlight-start, and highlight-end to select which lines are highlighted.

+
```js
function HighlightSomeText(highlight) {
if (highlight) {
// highlight-next-line
return 'This text is highlighted!';
}

return 'Nothing highlighted';
}

function HighlightMoreText(highlight) {
// highlight-start
if (highlight) {
return 'This range is highlighted!';
}
// highlight-end

return 'Nothing highlighted';
}
```
+
http://localhost:3000
function HighlightSomeText(highlight) {
if (highlight) {
return 'This text is highlighted!';
}

return 'Nothing highlighted';
}

function HighlightMoreText(highlight) {
if (highlight) {
return 'This range is highlighted!';
}

return 'Nothing highlighted';
}
+

Supported commenting syntax:

+
StyleSyntax
C-style/* ... */ and // ...
JSX-style{/* ... */}
Bash-style# ...
HTML-style<!-- ... -->
+

We will do our best to infer which set of comment styles to use based on the language, and default to allowing all comment styles. If there's a comment style that is not currently supported, we are open to adding them! Pull requests welcome. Note that different comment styles have no semantic difference, only their content does.

+

You can set your own background color for highlighted code line in your src/css/custom.css which will better fit to your selected syntax highlighting theme. The color given below works for the default highlighting theme (Palenight), so if you are using another theme, you will have to tweak the color accordingly.

+
/src/css/custom.css
:root {
--docusaurus-highlighted-code-line-bg: rgb(72, 77, 91);
}

/* If you have a different syntax highlighting theme for dark mode. */
[data-theme='dark'] {
/* Color which works with dark mode syntax highlighting theme */
--docusaurus-highlighted-code-line-bg: rgb(100, 100, 100);
}
+

If you also need to style the highlighted code line in some other way, you can target on theme-code-block-highlighted-line CSS class.

+

Highlighting with metadata string

+

You can also specify highlighted line ranges within the language meta string (leave a space after the language). To highlight multiple lines, separate the line numbers by commas or use the range syntax to select a chunk of lines. This feature uses the parse-number-range library and you can find more syntax on their project details.

+
```jsx {1,4-6,11}
import React from 'react';

function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}

return <div>Foo</div>;
}

export default MyComponent;
```
+
http://localhost:3000
import React from 'react';

function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}

return <div>Foo</div>;
}

export default MyComponent;
+
prefer comments

Prefer highlighting with comments where you can. By inlining highlight in the code, you don't have to manually count the lines if your code block becomes long. If you add/remove lines, you also don't have to offset your line ranges.

- ```jsx {3}
+ ```jsx {4}
function HighlightSomeText(highlight) {
if (highlight) {
+ console.log('Highlighted text found');
return 'This text is highlighted!';
}

return 'Nothing highlighted';
}
```

Below, we will introduce how the magic comment system can be extended to define custom directives and their functionalities. The magic comments would only be parsed if a highlight metastring is not present.

+

Custom magic comments

+

// highlight-next-line and // highlight-start etc. are called "magic comments", because they will be parsed and removed, and their purposes are to add metadata to the next line, or the section that the pair of start- and end-comments enclose.

+

You can declare custom magic comments through theme config. For example, you can register another magic comment that adds a code-block-error-line class name:

+
export default {
themeConfig: {
prism: {
magicComments: [
// Remember to extend the default highlight class name as well!
{
className: 'theme-code-block-highlighted-line',
line: 'highlight-next-line',
block: {start: 'highlight-start', end: 'highlight-end'},
},
{
className: 'code-block-error-line',
line: 'This will error',
},
],
},
},
};
+
http://localhost:3000

In JavaScript, trying to access properties on null will error.

const name = null;
console.log(name.toUpperCase());
// Uncaught TypeError: Cannot read properties of null (reading 'toUpperCase')
+

If you use number ranges in metastring (the {1,3-4} syntax), Docusaurus will apply the first magicComments entry's class name. This, by default, is theme-code-block-highlighted-line, but if you change the magicComments config and use a different entry as the first one, the meaning of the metastring range will change as well.

+

You can disable the default line highlighting comments with magicComments: []. If there's no magic comment config, but Docusaurus encounters a code block containing a metastring range, it will error because there will be no class name to apply—the highlighting class name, after all, is just a magic comment entry.

+

Every magic comment entry will contain three keys: className (required), line, which applies to the directly next line, or block (containing start and end), which applies to the entire block enclosed by the two comments.

+

Using CSS to target the class can already do a lot, but you can unlock the full potential of this feature through swizzling.

+
npm run swizzle @docusaurus/theme-classic CodeBlock/Line
+

The Line component will receive the list of class names, based on which you can conditionally render different markup.

+

Line numbering

+

You can enable line numbering for your code block by using showLineNumbers key within the language meta string (don't forget to add space directly before the key).

+
```jsx {1,4-6,11} showLineNumbers
import React from 'react';

function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}

return <div>Foo</div>;
}

export default MyComponent;
```
+
http://localhost:3000
import React from 'react';

function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}

return <div>Foo</div>;
}

export default MyComponent;
+

Interactive code editor

+

(Powered by React Live)

+

You can create an interactive coding editor with the @docusaurus/theme-live-codeblock plugin. First, add the plugin to your package.

+
npm install --save @docusaurus/theme-live-codeblock
+

You will also need to add the plugin to your docusaurus.config.js.

+
export default {
// ...
themes: ['@docusaurus/theme-live-codeblock'],
// ...
};
+

To use the plugin, create a code block with live attached to the language meta string.

+
```jsx live
function Clock(props) {
const [date, setDate] = useState(new Date());
useEffect(() => {
const timerID = setInterval(() => tick(), 1000);

return function cleanup() {
clearInterval(timerID);
};
});

function tick() {
setDate(new Date());
}

return (
<div>
<h2>It is {date.toLocaleTimeString()}.</h2>
</div>
);
}
```
+

The code block will be rendered as an interactive editor. Changes to the code will reflect on the result panel live.

+
http://localhost:3000
Live Editor
function Clock(props) {
+  const [date, setDate] = useState(new Date());
+  useEffect(() => {
+    const timerID = setInterval(() => tick(), 1000);
+
+    return function cleanup() {
+      clearInterval(timerID);
+    };
+  });
+
+  function tick() {
+    setDate(new Date());
+  }
+
+  return (
+    <div>
+      <h2>It is {date.toLocaleTimeString()}.</h2>
+    </div>
+  );
+}
+
Result
Loading...
+

Imports

+
react-live and imports

It is not possible to import components directly from the react-live code editor, you have to define available imports upfront.

+

By default, all React imports are available. If you need more imports available, swizzle the react-live scope:

+
npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope -- --eject
+
src/theme/ReactLiveScope/index.js
import React from 'react';

const ButtonExample = (props) => (
<button
{...props}
style={{
backgroundColor: 'white',
color: 'black',
border: 'solid red',
borderRadius: 20,
padding: 10,
cursor: 'pointer',
...props.style,
}}
/>
);

// Add react-live imports you need here
const ReactLiveScope = {
React,
...React,
ButtonExample,
};

export default ReactLiveScope;
+

The ButtonExample component is now available to use:

+
http://localhost:3000
Live Editor
function MyPlayground(props) {
+  return (
+    <div>
+      <ButtonExample onClick={() => alert('hey!')}>Click me</ButtonExample>
+    </div>
+  );
+}
+
Result
Loading...
+

Imperative Rendering (noInline)

+

The noInline option should be used to avoid errors when your code spans multiple components or variables.

+
```jsx live noInline
const project = 'Docusaurus';

const Greeting = () => <p>Hello {project}!</p>;

render(<Greeting />);
```
+

Unlike an ordinary interactive code block, when using noInline React Live won't wrap your code in an inline function to render it.

+

You will need to explicitly call render() at the end of your code to display the output.

+
http://localhost:3000
Live Editor
const project = "Docusaurus";
+
+const Greeting = () => (
+  <p>Hello {project}!</p>
+);
+
+render(
+  <Greeting />
+);
+
Result
Loading...
+

Using JSX markup in code blocks

+

Code block in Markdown always preserves its content as plain text, meaning you can't do something like:

+
type EditUrlFunction = (params: {
// This doesn't turn into a link (for good reason!)
version: <a href="/docs/versioning">Version</a>;
versionDocsDirPath: string;
docPath: string;
permalink: string;
locale: string;
}) => string | undefined;
+

If you want to embed HTML markup such as anchor links or bold type, you can use the <pre> tag, <code> tag, or <CodeBlock> component.

+
<pre>
<b>Input: </b>1 2 3 4{'\n'}
<b>Output: </b>"366300745"{'\n'}
</pre>
+
http://localhost:3000
Input: 1 2 3 4
+Output: "366300745"
+
+
MDX is whitespace insensitive

MDX is in line with JSX behavior: line break characters, even when inside <pre>, are turned into spaces. You have to explicitly write the new line character for it to be printed out.

+
warning

Syntax highlighting only works on plain strings. Docusaurus will not attempt to parse code block content containing JSX children.

+

Multi-language support code blocks

+

With MDX, you can easily create interactive components within your documentation, for example, to display code in multiple programming languages and switch between them using a tabs component.

+

Instead of implementing a dedicated component for multi-language support code blocks, we've implemented a general-purpose <Tabs> component in the classic theme so that you can use it for other non-code scenarios as well.

+

The following example is how you can have multi-language code tabs in your docs. Note that the empty lines above and below each language block are intentional. This is a current limitation of MDX: you have to leave empty lines around Markdown syntax for the MDX parser to know that it's Markdown syntax and not JSX.

+
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<Tabs>
<TabItem value="js" label="JavaScript">

```js
function helloWorld() {
console.log('Hello, world!');
}
```

</TabItem>
<TabItem value="py" label="Python">

```py
def hello_world():
print("Hello, world!")
```

</TabItem>
<TabItem value="java" label="Java">

```java
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello, World");
}
}
```

</TabItem>
</Tabs>
+

And you will get the following:

+
http://localhost:3000
function helloWorld() {
console.log('Hello, world!');
}
+

If you have multiple of these multi-language code tabs, and you want to sync the selection across the tab instances, refer to the Syncing tab choices section.

+

Docusaurus npm2yarn remark plugin

+

Displaying CLI commands in both npm and Yarn is a very common need, for example:

+
npm install @docusaurus/remark-plugin-npm2yarn
+

Docusaurus provides such a utility out of the box, freeing you from using the Tabs component every time. To enable this feature, first install the @docusaurus/remark-plugin-npm2yarn package as above, and then in docusaurus.config.js, for the plugins where you need this feature (doc, blog, pages, etc.), register it in the remarkPlugins option. (See Docs configuration for more details on configuration format)

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
remarkPlugins: [
[require('@docusaurus/remark-plugin-npm2yarn'), {sync: true}],
],
},
pages: {
remarkPlugins: [require('@docusaurus/remark-plugin-npm2yarn')],
},
blog: {
remarkPlugins: [
[
require('@docusaurus/remark-plugin-npm2yarn'),
{converters: ['pnpm']},
],
],
// ...
},
},
],
],
};
+

And then use it by adding the npm2yarn key to the code block:

+
```bash npm2yarn
npm install @docusaurus/remark-plugin-npm2yarn
```
+

Configuration

+
OptionTypeDefaultDescription
syncbooleanfalseWhether to sync the selected converter across all code blocks.
convertersarray'yarn', 'pnpm'The list of converters to use. The order of the converters is important, as the first converter will be used as the default choice.
+

Usage in JSX

+

Outside of Markdown, you can use the @theme/CodeBlock component to get the same output.

+
import CodeBlock from '@theme/CodeBlock';

export default function MyReactPage() {
return (
<div>
<CodeBlock
language="jsx"
title="/src/components/HelloCodeTitle.js"
showLineNumbers>
{`function HelloCodeTitle(props) {
return <h1>Hello, {props.name}</h1>;
}`}
</CodeBlock>
</div>
);
}
+
http://localhost:3000
/src/components/HelloCodeTitle.js
function HelloCodeTitle(props) {
return <h1>Hello, {props.name}</h1>;
}
+

The props accepted are language, title and showLineNumbers, in the same way as you write Markdown code blocks.

+

Although discouraged, you can also pass in a metastring prop like metastring='{1-2} title="/src/components/HelloCodeTitle.js" showLineNumbers', which is how Markdown code blocks are handled under the hood. However, we recommend you use comments for highlighting lines.

+

As previously stated, syntax highlighting is only applied when the children is a simple string.

+ + \ No newline at end of file diff --git a/docs/markdown-features/code-blocks.html.html b/docs/markdown-features/code-blocks.html.html new file mode 100644 index 0000000000..e04e8f16e2 --- /dev/null +++ b/docs/markdown-features/code-blocks.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/diagrams.html b/docs/markdown-features/diagrams.html new file mode 100644 index 0000000000..dc789d6b09 --- /dev/null +++ b/docs/markdown-features/diagrams.html @@ -0,0 +1,79 @@ + + + + + +Diagrams | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Diagrams

+

Diagrams can be rendered using Mermaid in a code block.

+

Installation

+
npm install --save @docusaurus/theme-mermaid
+

Enable Mermaid functionality by adding plugin @docusaurus/theme-mermaid and setting markdown.mermaid to true in your docusaurus.config.js.

+
docusaurus.config.js
export default {
markdown: {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
};
+

Usage

+

Add a code block with language mermaid:

+
Example Mermaid diagram
```mermaid
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
```
+ +

See the Mermaid syntax documentation for more information on the Mermaid syntax.

+

Theming

+

The diagram dark and light themes can be changed by setting mermaid.theme values in the themeConfig in your docusaurus.config.js. You can set themes for both light and dark mode.

+
docusaurus.config.js
export default {
themeConfig: {
mermaid: {
theme: {light: 'neutral', dark: 'forest'},
},
},
};
+

See the Mermaid theme documentation for more information on theming Mermaid diagrams.

+

Mermaid Config

+

Options in mermaid.options will be passed directly to mermaid.initialize:

+
docusaurus.config.js
export default {
themeConfig: {
mermaid: {
options: {
maxTextSize: 50,
},
},
},
};
+

See the Mermaid config documentation and the Mermaid config types for the available config options.

+

Dynamic Mermaid Component

+

To generate dynamic diagrams, you can use the Mermaid component:

+
Example of dynamic Mermaid component
import Mermaid from '@theme/Mermaid';

<Mermaid
value={`graph TD;
A-->B;
A-->C;
B-->D;
C-->D;`}
/>
+ + \ No newline at end of file diff --git a/docs/markdown-features/diagrams.html.html b/docs/markdown-features/diagrams.html.html new file mode 100644 index 0000000000..7d40603dfa --- /dev/null +++ b/docs/markdown-features/diagrams.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/head-metadata.html b/docs/markdown-features/head-metadata.html new file mode 100644 index 0000000000..940a5440bc --- /dev/null +++ b/docs/markdown-features/head-metadata.html @@ -0,0 +1,71 @@ + + + + + +Head Metadata customized title! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Head metadata

+

Customizing head metadata

+

Docusaurus automatically sets useful page metadata in <html>, <head> and <body> for you. It is possible to add extra metadata (or override existing ones) with the <head> tag in Markdown files:

+
markdown-features-head-metadata.mdx
---
id: head-metadata
title: Head Metadata
---

<head>
<html className="some-extra-html-class" />
<body className="other-extra-body-class" />
<title>Head Metadata customized title!</title>
<meta charSet="utf-8" />
<meta name="twitter:card" content="summary" />
<link rel="canonical" href="https://docusaurus.io/docs/markdown-features/head-metadata" />
</head>

# Head Metadata

My text
+ +

This <head> declaration has been added to the current Markdown doc as a demo. Open your browser DevTools and check how this page's metadata has been affected.

+
note

This feature is built on top of the Docusaurus <Head> component. Refer to react-helmet for exhaustive documentation.

+
You don't need this for regular SEO

Content plugins (e.g. docs and blog) provide front matter options like description, keywords, and image, which will be automatically applied to both description and og:description, while you would have to manually declare two metadata tags when using the <head> tag.

+

Markdown page description

+

The Markdown pages' description metadata may be used in more places than the head metadata. For example, the docs plugin's generated category index uses the description metadata for the doc cards.

+

By default, the description is the first content-ful line, with some efforts to convert it to plain text. For example, the following file...

+
# Title

Main content... May contain some [links](./file.mdx) or **emphasis**.
+

...will have the default description "Main content... May contain some links or emphasis". However, it's not designed to be fully functional. Where it fails to produce reasonable descriptions, you can explicitly provide one through front matter:

+
---
description: This description will override the default.
---

# Title

Main content... May contain some [links](./file.mdx) or **emphasis**.
+ + \ No newline at end of file diff --git a/docs/markdown-features/head-metadata.html.html b/docs/markdown-features/head-metadata.html.html new file mode 100644 index 0000000000..c8295939d9 --- /dev/null +++ b/docs/markdown-features/head-metadata.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/links.html b/docs/markdown-features/links.html new file mode 100644 index 0000000000..9b3acd6b70 --- /dev/null +++ b/docs/markdown-features/links.html @@ -0,0 +1,76 @@ + + + + + +Markdown links | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Markdown links

+

There are two ways of adding a link to another page: through a URL path and a file path.

+
- [URL path to another document](./installation)
- [file path to another document](./installation.mdx)
+

URL paths are unprocessed by Docusaurus, and you can see them as directly rendering to <a href="./installation">, i.e. it will be resolved according to the page's URL location, rather than its file-system location.

+

If you want to reference another Markdown file included by the same plugin, you could use the relative path of the document you want to link to. Docusaurus' Markdown loader will convert the file path to the target file's URL path (and hence remove the .md extension).

+

For example, if you are in docs/folder/doc1.md and you want to reference docs/folder/doc2.md, docs/folder/subfolder/doc3.md and docs/otherFolder/doc4.md:

+
docs/folder/doc1.md
I am referencing a [document](doc2.mdx).

Reference to another [document in a subfolder](subfolder/doc3.mdx).

[Relative document](../otherFolder/doc4.mdx) referencing works as well.
+

Relative file paths are resolved against the current file's directory. Absolute file paths, on the other hand, are resolved relative to the content root, usually docs/, blog/, or localized ones like i18n/zh-Hans/plugin-content-docs/current.

+

Absolute file paths can also be relative to the site directory. However, beware that links that begin with /docs/ or /blog/ are not portable as you would need to manually update them if you create new doc versions or localize them.

+
You can write [links](/otherFolder/doc4.mdx) relative to the content root (`/docs/`).

You can also write [links](/docs/otherFolder/doc4.mdx) relative to the site directory, but it's not recommended.
+

Using relative file paths (with .md extensions) instead of relative URL links provides the following benefits:

+
    +
  • Links will keep working on the GitHub interface and many Markdown editors
  • +
  • You can customize the files' slugs without having to update all the links
  • +
  • Moving files around the folders can be tracked by your editor, and some editors may automatically update file links
  • +
  • A versioned doc will link to another doc of the exact same version
  • +
  • Relative URL links are very likely to break if you update the trailingSlash config
  • +
+
warning

Markdown file references only work when the source and target files are processed by the same plugin instance. This is a technical limitation of our Markdown processing architecture and will be fixed in the future. If you are linking files between plugins (e.g. linking to a doc page from a blog post), you have to use URL links.

+ + \ No newline at end of file diff --git a/docs/markdown-features/links.html.html b/docs/markdown-features/links.html.html new file mode 100644 index 0000000000..7c5b31fed0 --- /dev/null +++ b/docs/markdown-features/links.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/math-equations.html b/docs/markdown-features/math-equations.html new file mode 100644 index 0000000000..ce7d5b5b5d --- /dev/null +++ b/docs/markdown-features/math-equations.html @@ -0,0 +1,95 @@ + + + + + +Math Equations | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Math Equations

+ +

Mathematical equations can be rendered using KaTeX.

+

Usage

+

Please read KaTeX documentation for more details.

+

Inline

+

Write inline math equations by wrapping LaTeX equations between $:

+
Let $f\colon[a,b]\to\R$ be Riemann integrable. Let $F\colon[a,b]\to\R$ be
$F(x)=\int_{a}^{x} f(t)\,dt$. Then $F$ is continuous, and at all $x$ such that
$f$ is continuous at $x$, $F$ is differentiable at $x$ with $F'(x)=f(x)$.
+
http://localhost:3000

Let f ⁣:[a,b]Rf\colon[a,b] \to \R be Riemann integrable. Let F ⁣:[a,b]RF\colon[a,b]\to\R be F(x)=axf(t)dtF(x)= +\int_{a}^{x} f(t)\,dt. Then FF is continuous, and at all xx such that ff is continuous at xx, FF is differentiable at xx with F(x)=f(x)F'(x)=f(x).

+

Blocks

+

For equation block or display mode, use line breaks and $$:

+
$$
I = \int_0^{2\pi} \sin(x)\,dx
$$
+
http://localhost:3000
I=02πsin(x)dxI = \int_0^{2\pi} \sin(x)\,dx
+

Enabling math equations

+

Enable KaTeX:

+
    +
  1. +

    Install the remark-math and rehype-katex plugins:

    +
    npm install --save remark-math@6 rehype-katex@7
    +
    warning

    Make sure to use remark-math 6 and rehype-katex 7 for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work.

    +
  2. +
  3. +

    These 2 plugins are only available as ES Modules. We recommended to use an ES Modules config file:

    +
    ES module docusaurus.config.js
    import remarkMath from 'remark-math';
    import rehypeKatex from 'rehype-katex';

    export default {
    presets: [
    [
    '@docusaurus/preset-classic',
    {
    docs: {
    path: 'docs',
    remarkPlugins: [remarkMath],
    rehypePlugins: [rehypeKatex],
    },
    },
    ],
    ],
    };
    +

    Using a +CommonJS +config file?

    If you decide to use a CommonJS config file, it is possible to load those ES module plugins thanks to dynamic imports and an async config creator function:

    CommonJS module docusaurus.config.js
    module.exports = async function createConfigAsync() {
    return {
    presets: [
    [
    '@docusaurus/preset-classic',
    {
    docs: {
    path: 'docs',
    remarkPlugins: [(await import('remark-math')).default],
    rehypePlugins: [(await import('rehype-katex')).default],
    },
    },
    ],
    ],
    };
    };
    +
  4. +
  5. +

    Include the KaTeX CSS in your config under stylesheets:

    +
    export default {
    //...
    stylesheets: [
    {
    href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',
    type: 'text/css',
    integrity:
    'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',
    crossorigin: 'anonymous',
    },
    ],
    };
    +
  6. +
+
See a config file example
docusaurus.config.js
import remarkMath from 'remark-math';
import rehypeKatex from 'rehype-katex';

export default {
title: 'Docusaurus',
tagline: 'Build optimized websites quickly, focus on your content',
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
path: 'docs',
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
},
},
],
],
stylesheets: [
{
href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css',
type: 'text/css',
integrity:
'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM',
crossorigin: 'anonymous',
},
],
};
+

Self-hosting KaTeX assets

+

Loading stylesheets, fonts, and JavaScript libraries from CDN sources is a good practice for popular libraries and assets, since it reduces the amount of assets you have to host. In case you prefer to self-host the katex.min.css (along with required KaTeX fonts), you can download the latest version from KaTeX GitHub releases, extract and copy katex.min.css and fonts directory (only .woff2 font types should be enough) to your site's static directory, and in docusaurus.config.js, replace the stylesheet's href from the CDN URL to your local path (say, /katex/katex.min.css).

+
docusaurus.config.js
export default {
stylesheets: [
{
href: '/katex/katex.min.css',
type: 'text/css',
},
],
};
+ + \ No newline at end of file diff --git a/docs/markdown-features/math-equations.html.html b/docs/markdown-features/math-equations.html.html new file mode 100644 index 0000000000..ad90f89edc --- /dev/null +++ b/docs/markdown-features/math-equations.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/plugins.html b/docs/markdown-features/plugins.html new file mode 100644 index 0000000000..aeebd54d01 --- /dev/null +++ b/docs/markdown-features/plugins.html @@ -0,0 +1,106 @@ + + + + + +MDX Plugins | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

MDX Plugins

+

Sometimes, you may want to extend or tweak your Markdown syntax. For example:

+
    +
  • How do I embed youtube videos using the image syntax (![](https://youtu.be/yKNxeF4KMsY))?
  • +
  • How do I style links that are on their own lines differently, e.g., as a social card?
  • +
  • How do I make every page start with a copyright notice?
  • +
+

And the answer is: create an MDX plugin! MDX has a built-in plugin system that can be used to customize how the Markdown files will be parsed and transformed to JSX. There are three typical use-cases of MDX plugins:

+
    +
  • Using existing remark plugins or rehype plugins;
  • +
  • Creating remark/rehype plugins to transform the elements generated by existing MDX syntax;
  • +
  • Creating remark/rehype plugins to introduce new syntaxes to MDX.
  • +
+

If you play with the MDX playground, you would notice that the MDX transpilation has two intermediate steps: Markdown AST (MDAST), and Hypertext AST (HAST), before arriving at the final JSX output. MDX plugins also come in two forms:

+
    +
  • Remark: processes the Markdown AST.
  • +
  • Rehype: processes the Hypertext AST.
  • +
+
tip

Use plugins to introduce shorter syntax for the most commonly used JSX elements in your project. The admonition syntax that we offer is also generated by a Remark plugin, and you could do the same for your own use case.

+

Default plugins

+

Docusaurus injects some default Remark plugins during Markdown processing. These plugins would:

+
    +
  • Generate the table of contents;
  • +
  • Add anchor links to each heading;
  • +
  • Transform images and links to require() calls.
  • +
  • +
+

These are all typical use-cases of Remark plugins, which can also be a source of inspiration if you want to implement your own plugin.

+

Installing plugins

+

An MDX plugin is usually an npm package, so you install them like other npm packages using npm. Take the math plugins as an example.

+
npm install --save remark-math@5 rehype-katex@6
+
How are remark-math and rehype-katex different?

In case you are wondering how Remark and Rehype are different, here is a good example. remark-math operates on the Markdown AST, where it sees text like $...$, and all it does is transform that to the JSX <span class="math math-inline">...</span> without doing too much with the content. This decouples the extraction of math formulae from their rendering, which means you can swap KaTeX\KaTeX out with other math renderers, like MathJax (with rehype-mathjax), just by replacing the Rehype plugin.

Next, the rehype-katex operates on the Hypertext AST where everything has been converted to HTML-like tags already. It traverses all the elements with math class and uses KaTeX\KaTeX to parse and render the content to actual HTML.

+
warning

Many official Remark/Rehype plugins are ES Modules only, a JavaScript module system, which Docusaurus supports. We recommend using an ES Modules config file to make it easier to import such packages.

+

Next, import your plugins and add them to the plugin options through plugin or preset config in docusaurus.config.js:

+
docusaurus.config.js
import remarkMath from 'remark-math';
import rehypeKatex from 'rehype-katex';

export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
path: 'docs',
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
},
},
],
],
};
+
Using a CommonJS config file?

If you decide to use a CommonJS config file, it is possible to load those ES module plugins thanks to dynamic imports and an async config creator function:

docusaurus.config.js
module.exports = async function createConfigAsync() {
return {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
path: 'docs',
remarkPlugins: [(await import('remark-math')).default],
rehypePlugins: [(await import('rehype-katex')).default],
},
},
],
],
};
};
+

Configuring plugins

+

Some plugins can be configured and accept their own options. In that case, use the [plugin, pluginOptions] syntax, like this:

+
docusaurus.config.js
import rehypeKatex from 'rehype-katex';

export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
rehypePlugins: [
[rehypeKatex, {strict: false}],
],
},
},
],
],
};
+

You should check your plugin's documentation for the options it supports.

+

Creating new rehype/remark plugins

+

If there isn't an existing package that satisfies your customization need, you can create your own MDX plugin.

+
note

The writeup below is not meant to be a comprehensive guide to creating a plugin, but just an illustration of how to make it work with Docusaurus. Visit the Remark or Rehype documentation for a more in-depth explanation of how they work.

+

For example, let's make a plugin that visits every h2 heading and adds a Section X. prefix. First, create your plugin source file anywhere—you can even publish it as a separate npm package and install it like explained above. We would put ours at src/remark/section-prefix.js. A remark/rehype plugin is just a function that receives the options and returns a transformer that operates on the AST.

+
import {visit} from 'unist-util-visit';

const plugin = (options) => {
const transformer = async (ast) => {
let number = 1;
visit(ast, 'heading', (node) => {
if (node.depth === 2 && node.children.length > 0) {
node.children.unshift({
type: 'text',
value: `Section ${number}. `,
});
number++;
}
});
};
return transformer;
};

export default plugin;
+

You can now import your plugin in docusaurus.config.js and use it just like an installed plugin!

+
docusaurus.config.js
import sectionPrefix from './src/remark/section-prefix';

export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
remarkPlugins: [sectionPrefix],
},
},
],
],
};
+
tip

The transformer has a second parameter vfile which is useful if you need to access the current Markdown file's path.

const plugin = (options) => {
const transformer = async (ast, vfile) => {
ast.children.unshift({
type: 'text',
value: `The current file path is ${vfile.path}`,
});
};
return transformer;
};

Our transformImage plugin uses this parameter, for example, to transform relative image references to require() calls.

+
note

The default plugins of Docusaurus would operate before the custom remark plugins, and that means the images or links have been converted to JSX with require() calls already. For example, in the example above, the table of contents generated is still the same even when all h2 headings are now prefixed by Section X., because the TOC-generating plugin is called before our custom plugin. If you need to process the MDAST before the default plugins do, use the beforeDefaultRemarkPlugins and beforeDefaultRehypePlugins.

docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
beforeDefaultRemarkPlugins: [sectionPrefix],
},
},
],
],
};

This would make the table of contents generated contain the Section X. prefix as well.

+ + \ No newline at end of file diff --git a/docs/markdown-features/plugins.html.html b/docs/markdown-features/plugins.html.html new file mode 100644 index 0000000000..f0127e6e1e --- /dev/null +++ b/docs/markdown-features/plugins.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/react.html b/docs/markdown-features/react.html new file mode 100644 index 0000000000..dff95a4451 --- /dev/null +++ b/docs/markdown-features/react.html @@ -0,0 +1,140 @@ + + + + + +MDX and React | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

MDX and React

+ +

Docusaurus has built-in support for MDX, which allows you to write JSX within your Markdown files and render them as React components.

+

Check out the MDX docs to see what fancy stuff you can do with MDX.

+
Debugging MDX

The MDX format is quite strict, and you may get compilation errors.

Use the MDX playground to debug them and make sure your syntax is valid.

+
info

Prettier, the most popular formatter, supports only the legacy MDX v1. If you get an unintentional formatting result, you may want to add {/* prettier-ignore */} before the problematic area, or add *.mdx to your .prettierignore, until Prettier has proper support for MDX v3. One of the main authors of MDX recommends remark-cli with remark-mdx.

+

Exporting components

+

To define any custom component within an MDX file, you have to export it: only paragraphs that start with export will be parsed as components instead of prose.

+
export const Highlight = ({children, color}) => (
<span
style={{
backgroundColor: color,
borderRadius: '2px',
color: '#fff',
padding: '0.2rem',
}}>
{children}
</span>
);

<Highlight color="#25c2a0">Docusaurus green</Highlight> and <Highlight color="#1877F2">Facebook blue</Highlight> are my favorite colors.

I can write **Markdown** alongside my _JSX_!
+

Notice how it renders both the markup from your React component and the Markdown syntax:

+ +
http://localhost:3000
Docusaurus green + and Facebook blue are my favorite colors.

I can write Markdown alongside my JSX!

+
MDX is JSX

Since all doc files are parsed using MDX, anything that looks like HTML is actually JSX. Therefore, if you need to inline-style a component, follow JSX flavor and provide style objects.

/* Instead of this: */
<span style="background-color: red">Foo</span>
/* Use this: */
<span style={{backgroundColor: 'red'}}>Foo</span>
+

Importing components

+

You can also import your own components defined in other files or third-party components installed via npm.

+ +
<!-- Docusaurus theme component -->
import TOCInline from '@theme/TOCInline';
<!-- External component -->
import Button from '@mui/material/Button';
<!-- Custom component -->
import BrowserWindow from '@site/src/components/BrowserWindow';
+
tip

The @site alias points to your website's directory, usually where the docusaurus.config.js file is. Using an alias instead of relative paths ('../../src/components/BrowserWindow') saves you from updating import paths when moving files around, or when versioning docs and translating.

+

While declaring components within Markdown is very convenient for simple cases, it becomes hard to maintain because of limited editor support, risks of parsing errors, and low reusability. Use a separate .js file when your component involves complex JS logic:

+
src/components/Highlight.js
import React from 'react';

export default function Highlight({children, color}) {
return (
<span
style={{
backgroundColor: color,
borderRadius: '2px',
color: '#fff',
padding: '0.2rem',
}}>
{children}
</span>
);
}
+
markdown-file.mdx
import Highlight from '@site/src/components/Highlight';

<Highlight color="#25c2a0">Docusaurus green</Highlight>
+
tip

If you use the same component across a lot of files, you don't need to import it everywhere—consider adding it to the global scope. See below

+

MDX component scope

+

Apart from importing a component and exporting a component, a third way to use a component in MDX is to register it to the global scope, which will make it automatically available in every MDX file, without any import statements.

+

For example, given this MDX file:

+
- a
- list!

And some <Highlight>custom markup</Highlight>...
+

It will be compiled to a React component containing ul, li, p, and Highlight elements. Highlight is not a native html element: you need to provide your own React component implementation for it.

+

In Docusaurus, the MDX component scope is provided by the @theme/MDXComponents file. It's not a React component, per se, unlike most other exports under the @theme/ alias: it is a record from tag names like Highlight to their React component implementations.

+

If you swizzle this component, you will find all tags that have been implemented, and you can further customize our implementation by swizzling the respective sub-component, like @theme/MDXComponents/Code (which is used to render Markdown code blocks).

+

If you want to register extra tag names (like the <Highlight> tag above), you should consider wrapping @theme/MDXComponents, so you don't have to maintain all the existing mappings. Since the swizzle CLI doesn't allow wrapping non-component files yet, you should manually create the wrapper:

+
src/theme/MDXComponents.js
import React from 'react';
// Import the original mapper
import MDXComponents from '@theme-original/MDXComponents';
import Highlight from '@site/src/components/Highlight';

export default {
// Re-use the default mapping
...MDXComponents,
// Map the "<Highlight>" tag to our Highlight component
// `Highlight` will receive all props that were passed to `<Highlight>` in MDX
Highlight,
};
+

And now, you can freely use <Highlight> in every page, without writing the import statement:

+
I can conveniently use <Highlight color="#25c2a0">Docusaurus green</Highlight> everywhere!
+
http://localhost:3000

I can conveniently use Docusaurus green everywhere!

+
warning

We use upper-case tag names like Highlight on purpose.

From MDX v3+ onward (Docusaurus v3+), lower-case tag names are always rendered as native html elements, and will not use any component mapping you provide.

+
warning

This feature is powered by an MDXProvider. If you are importing Markdown in a React page, you have to supply this provider yourself through the MDXContent theme component.

src/pages/index.js
import React from 'react';
import FeatureDisplay from './_featureDisplay.mdx';
import MDXContent from '@theme/MDXContent';

export default function LandingPage() {
return (
<div>
<MDXContent>
<FeatureDisplay />
</MDXContent>
</div>
);
}

If you don't wrap your imported MDX with MDXContent, the global scope will not be available.

+

Markdown and JSX interoperability

+

Docusaurus v3 is using MDX v3.

+

The MDX syntax is mostly compatible with CommonMark, but is much stricter because your .mdx files can use JSX and are compiled into real React components (check the playground).

+

Some valid CommonMark features won't work with MDX (more info), notably:

+
    +
  • Indented code blocks: use triple backticks instead
  • +
  • Autolinks (<http://localhost:3000>): use regular link syntax instead ([http://localhost:3000](http://localhost:3000))
  • +
  • HTML syntax (<p style="color: red;">): use JSX instead (<p style={{color: 'red'}}>)
  • +
  • Unescaped { and <: escape them with \ instead (\{ and \<)
  • +
+
Experimental CommonMark support

Docusaurus v3 makes it possible to opt-in for a less strict, standard CommonMark support with the following options:

    +
  • The format: md front matter
  • +
  • The .md file extension combined with the siteConfig.markdown.format: "detect" configuration
  • +

This feature is experimental and currently has a few limitations.

+

Importing code snippets

+

You can not only import a file containing a component definition, but also import any code file as raw text, and then insert it in a code block, thanks to Webpack raw-loader. In order to use raw-loader, you first need to install it in your project:

+
npm install --save raw-loader
+

Now you can import code snippets from another file as it is:

+ +
myMarkdownFile.mdx
import CodeBlock from '@theme/CodeBlock';
import MyComponentSource from '!!raw-loader!./myComponent';

<CodeBlock language="jsx">{MyComponentSource}</CodeBlock>
+ +
http://localhost:3000
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

import React, {useState} from 'react';

export default function MyComponent() {
const [bool, setBool] = useState(false);
return (
<div>
<p>MyComponent rendered !</p>
<p>bool={bool ? 'true' : 'false'}</p>
<p>
<button onClick={() => setBool((b) => !b)}>toggle bool</button>
</p>
</div>
);
}
+

See using code blocks in JSX for more details of the <CodeBlock> component.

+
note

You have to use <CodeBlock> rather than the Markdown triple-backtick ```, because the latter will ship out any of its content as-is, but you want to interpolate the imported text here.

+
warning

This feature is experimental and might be subject to breaking API changes in the future.

+

Importing Markdown

+

You can use Markdown files as components and import them elsewhere, either in Markdown files or in React pages.

+

By convention, using the _ filename prefix will not create any doc page and means the Markdown file is a "partial", to be imported by other files.

+
_markdown-partial-example.mdx
<span>Hello {props.name}</span>

This is text some content from `_markdown-partial-example.mdx`.
+ +
someOtherDoc.mdx
import PartialExample from './_markdown-partial-example.mdx';

<PartialExample name="Sebastien" />
+ +
http://localhost:3000
Hello Sebastien +

This is text some content from _markdown-partial-example.md.

+

This way, you can reuse content among multiple pages and avoid duplicating materials.

+
warning

Currently, the table of contents does not contain the imported Markdown headings. This is a technical limitation that we are trying to solve (issue).

+

Available exports

+

Within the MDX page, the following variables are available as globals:

+
    +
  • frontMatter: the front matter as a record of string keys and values;
  • +
  • toc: the table of contents, as a tree of headings. See also Inline TOC for a more concrete use-case.
  • +
  • contentTitle: the Markdown title, which is the first h1 heading in the Markdown text. It's undefined if there isn't one (e.g. title specified in the front matter).
  • +
+
import TOCInline from '@theme/TOCInline';
import CodeBlock from '@theme/CodeBlock';

The table of contents for this page, serialized:

<CodeBlock className="language-json">{JSON.stringify(toc, null, 2)}</CodeBlock>

The front matter of this page:

<ul>
{Object.entries(frontMatter).map(([key, value]) => <li key={key}><b>{key}</b>: {value}</li>)}
</ul>

<p>The title of this page is: <b>{contentTitle}</b></p>
+ +
http://localhost:3000

The table of contents for this page, serialized:

[
{
"value": "Exporting components",
"id": "exporting-components",
"level": 3
},
{
"value": "Importing components",
"id": "importing-components",
"level": 3
},
{
"value": "MDX component scope",
"id": "mdx-component-scope",
"level": 3
},
{
"value": "Markdown and JSX interoperability",
"id": "markdown-and-jsx-interoperability",
"level": 3
},
{
"value": "Importing code snippets",
"id": "importing-code-snippets",
"level": 2
},
{
"value": "Importing Markdown",
"id": "importing-markdown",
"level": 2
},
{
"value": "Available exports",
"id": "available-exports",
"level": 2
}
]

The front matter of this page:

  • id: react
  • description: Using the power of React in Docusaurus Markdown documents, thanks to MDX
  • slug: /markdown-features/react

The title of this page is: MDX and React

+ + \ No newline at end of file diff --git a/docs/markdown-features/react.html.html b/docs/markdown-features/react.html.html new file mode 100644 index 0000000000..d4aad6a60e --- /dev/null +++ b/docs/markdown-features/react.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/tabs.html b/docs/markdown-features/tabs.html new file mode 100644 index 0000000000..3cebcdeb17 --- /dev/null +++ b/docs/markdown-features/tabs.html @@ -0,0 +1,101 @@ + + + + + +Tabs | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Tabs

+ +

Docusaurus provides the <Tabs> component that you can use in Markdown thanks to MDX:

+ +
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<Tabs>
<TabItem value="apple" label="Apple" default>
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange">
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana">
This is a banana 🍌
</TabItem>
</Tabs>
+
http://localhost:3000
This is an apple 🍎
+
+

It is also possible to provide values and defaultValue props to Tabs:

+
<Tabs
defaultValue="apple"
values={[
{label: 'Apple', value: 'apple'},
{label: 'Orange', value: 'orange'},
{label: 'Banana', value: 'banana'},
]}>
<TabItem value="apple">This is an apple 🍎</TabItem>
<TabItem value="orange">This is an orange 🍊</TabItem>
<TabItem value="banana">This is a banana 🍌</TabItem>
</Tabs>
+
http://localhost:3000
This is an apple 🍎
+
Tabs props take precedence over the TabItem props:
<Tabs
defaultValue="apple"
values={[
{label: 'Apple 1', value: 'apple'},
{label: 'Orange 1', value: 'orange'},
{label: 'Banana 1', value: 'banana'},
]}>
<TabItem value="apple" label="Apple 2">
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange 2">
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana 2" default>
This is a banana 🍌
</TabItem>
</Tabs>
http://localhost:3000
This is an apple 🍎
+
tip

By default, all tabs are rendered eagerly during the build process, and search engines can index hidden tabs.

It is possible to only render the default tab with <Tabs lazy />.

+

Displaying a default tab

+

The first tab is displayed by default, and to override this behavior, you can specify a default tab by adding default to one of the tab items. You can also set the defaultValue prop of the Tabs component to the label value of your choice. For example, in the example above, either setting default for the value="apple" tab or setting defaultValue="apple" for the tabs forces the "Apple" tab to be open by default.

+

Docusaurus will throw an error if a defaultValue is provided for the Tabs but it refers to a non-existing value. If you want none of the tabs to be shown by default, use defaultValue={null}.

+

Syncing tab choices

+

You may want choices of the same kind of tabs to sync with each other. For example, you might want to provide different instructions for users on Windows vs users on macOS, and you want to change all OS-specific instructions tabs in one click. To achieve that, you can give all related tabs the same groupId prop. Note that doing this will persist the choice in localStorage and all <Tab> instances with the same groupId will update automatically when the value of one of them is changed. Note that group IDs are globally namespaced.

+
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + C to copy.</TabItem>
<TabItem value="mac" label="macOS">Use Command + C to copy.</TabItem>
</Tabs>

<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Use Ctrl + V to paste.</TabItem>
<TabItem value="mac" label="macOS">Use Command + V to paste.</TabItem>
</Tabs>
+
http://localhost:3000
Use Ctrl + C to copy.
Use Ctrl + V to paste.
+

For all tab groups that have the same groupId, the possible values do not need to be the same. If one tab group is chosen a value that does not exist in another tab group with the same groupId, the tab group with the missing value won't change its tab. You can see that from the following example. Try to select Linux, and the above tab groups don't change.

+
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">
I am Windows.
</TabItem>
<TabItem value="mac" label="macOS">
I am macOS.
</TabItem>
<TabItem value="linux" label="Linux">
I am Linux.
</TabItem>
</Tabs>
+
http://localhost:3000
I am Windows.
+
+

Tab choices with different group IDs will not interfere with each other:

+
<Tabs groupId="operating-systems">
<TabItem value="win" label="Windows">Windows in windows.</TabItem>
<TabItem value="mac" label="macOS">macOS is macOS.</TabItem>
</Tabs>

<Tabs groupId="non-mac-operating-systems">
<TabItem value="win" label="Windows">Windows is windows.</TabItem>
<TabItem value="unix" label="Unix">Unix is unix.</TabItem>
</Tabs>
+
http://localhost:3000
Windows in windows.
Windows is windows.
+

Customizing tabs

+

You might want to customize the appearance of a certain set of tabs. You can pass the string in className prop, and the specified CSS class will be added to the Tabs component:

+
<Tabs className="unique-tabs">
<TabItem value="Apple">This is an apple 🍎</TabItem>
<TabItem value="Orange">This is an orange 🍊</TabItem>
<TabItem value="Banana">This is a banana 🍌</TabItem>
</Tabs>
+
http://localhost:3000
This is an apple 🍎
+

Customizing tab headings

+

You can also customize each tab heading independently by using the attributes field. The extra props can be passed to the headings either through the values prop in Tabs, or props of each TabItem—in the same way as you declare label.

+ +
some-doc.mdx
import styles from './styles.module.css';

<Tabs>
<TabItem value="apple" label="Apple" attributes={{className: styles.red}}>
This is an apple 🍎
</TabItem>
<TabItem value="orange" label="Orange" attributes={{className: styles.orange}}>
This is an orange 🍊
</TabItem>
<TabItem value="banana" label="Banana" attributes={{className: styles.yellow}}>
This is a banana 🍌
</TabItem>
</Tabs>
+
styles.module.css
.red {
color: red;
}
.red[aria-selected='true'] {
border-bottom-color: red;
}

.orange {
color: orange;
}
.orange[aria-selected='true'] {
border-bottom-color: orange;
}

.yellow {
color: yellow;
}
.yellow[aria-selected='true'] {
border-bottom-color: yellow;
}
+
http://localhost:3000

This is an apple 🍎

+
tip

className would be merged with other default class names. You may also use a custom data-value field ({'data-value': 'apple'}) paired with CSS attribute selectors:

styles.module.css
li[role='tab'][data-value='apple'] {
color: red;
}
+

Query string

+

It is possible to persist the selected tab into the url search parameters. This enables you to share a link to a page which pre-selects the tab - linking from your Android app to documentation with the Android tabs pre-selected. This feature does not provide an anchor link - the browser will not scroll to the tab.

+

Use the queryString prop to enable this feature and define the search param name to use.

+
<Tabs queryString="current-os">
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
+
http://localhost:3000
Android
+

As soon as a tab is clicked, a search parameter is added at the end of the url: ?current-os=android or ?current-os=ios.

+
tip

queryString can be used together with groupId.

For convenience, when the queryString prop is true, the groupId value will be used as a fallback.

<Tabs groupId="current-os" queryString>
<TabItem value="android" label="Android">
Android
</TabItem>
<TabItem value="ios" label="iOS">
iOS
</TabItem>
</Tabs>
http://localhost:3000
Android

When the page loads, the tab query string choice will be restored in priority over the groupId choice (using localStorage).

+ + \ No newline at end of file diff --git a/docs/markdown-features/tabs.html.html b/docs/markdown-features/tabs.html.html new file mode 100644 index 0000000000..2bb116ac01 --- /dev/null +++ b/docs/markdown-features/tabs.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/markdown-features/toc.html b/docs/markdown-features/toc.html new file mode 100644 index 0000000000..20937db21b --- /dev/null +++ b/docs/markdown-features/toc.html @@ -0,0 +1,156 @@ + + + + + +Headings and Table of contents | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Headings and Table of contents

+

Markdown headings

+

You can use regular Markdown headings.

+
## Level 2 title

### Level 3 title

#### Level 4 title
+

Each Markdown heading will appear as a table of contents entry.

+

Heading IDs

+

Each heading has an ID that can be automatically generated or explicitly specified. Heading IDs allow you to link to a specific document heading in Markdown or JSX:

+
[link](#heading-id)
+
<Link to="#heading-id">link</Link>
+

By default, Docusaurus will generate heading IDs for you, based on the heading text. For example, ### Hello World will have ID hello-world.

+

Generated IDs have some limitations:

+
    +
  • The ID might not look good
  • +
  • You might want to change or translate the text without updating the existing ID
  • +
+

A special Markdown syntax lets you set an explicit heading id:

+
### Hello World {#my-explicit-id}
+
tip

Use the write-heading-ids CLI command to add explicit IDs to all your Markdown documents.

+
Avoid colliding IDs

Generated heading IDs will be guaranteed to be unique on each page, but if you use custom IDs, make sure each one appears exactly once on each page, or there will be two DOM elements with the same ID, which is invalid HTML semantics, and will lead to one heading being unlinkable.

+

Table of contents heading level

+

Each Markdown document displays a table of contents on the top-right corner. By default, this table only shows h2 and h3 headings, which should be sufficient for an overview of the page structure. In case you need to change the range of headings displayed, you can customize the minimum and maximum heading level — either per page or globally.

+

To set the heading level for a particular page, use the toc_min_heading_level and toc_max_heading_level front matter.

+
myDoc.md
---
# Display h2 to h5 headings
toc_min_heading_level: 2
toc_max_heading_level: 5
---
+

To set the heading level for all pages, use the themeConfig.tableOfContents option.

+
docusaurus.config.js
export default {
themeConfig: {
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 5,
},
},
};
+

If you've set the options globally, you can still override them locally via front matter.

+
note

The themeConfig option would apply to all TOC on the site, including inline TOC, but front matter options only affect the top-right TOC. You need to use the minHeadingLevel and maxHeadingLevel props to customize each <TOCInline /> component.

+

Inline table of contents

+

It is also possible to display an inline table of contents directly inside a Markdown document, thanks to MDX.

+

The toc variable is available in any MDX document and contains all the headings of an MDX document. By default, only h2 and h3 headings are displayed in the TOC. You can change which heading levels are visible by setting minHeadingLevel or maxHeadingLevel for individual TOCInline components.

+ +
import TOCInline from '@theme/TOCInline';

<TOCInline toc={toc} />
+ + +

The toc global is just a list of heading items:

+
declare const toc: {
value: string;
id: string;
level: number;
}[];
+

Note that the toc global is a flat array, so you can easily cut out unwanted nodes or insert extra nodes, and create a new TOC tree.

+ +
import TOCInline from '@theme/TOCInline';

<TOCInline
// Only show h2 and h4 headings
toc={toc.filter((node) => node.level === 2 || node.level === 4)}
minHeadingLevel={2}
// Show h4 headings in addition to the default h2 and h3 headings
maxHeadingLevel={4}
/>
+ +

Customizing table of contents generation

+

The table-of-contents is generated by parsing the Markdown source with a Remark plugin. There are known edge-cases where it generates false-positives and false-negatives.

+

Markdown headings within hideable areas will still show up in the TOC. For example, headings within Tabs and details will not be excluded.

+

Non-Markdown headings will not show up in the TOC. This can be used to your advantage to tackle the aforementioned issue.

+
<details>
<summary>Some details containing headings</summary>
<h2 id="#heading-id">I'm a heading that will not show up in the TOC</h2>

Some content...

</details>
+

The ability to ergonomically insert extra headings or ignore certain headings is a work-in-progress. If this feature is important to you, please report your use-case in this issue.

+
+
warning

Below is just some dummy content to have more table of contents items available on the current page.

+

Example Section 1

+

Lorem ipsum

+

Example Subsection 1 a

+

Lorem ipsum

+

Example subsubsection 1 a I

+

Example subsubsection 1 a II

+

Example subsubsection 1 a III

+

Example Subsection 1 b

+

Lorem ipsum

+

Example subsubsection 1 b I

+

Example subsubsection 1 b II

+

Example subsubsection 1 b III

+

Example Subsection 1 c

+

Lorem ipsum

+

Example subsubsection 1 c I

+

Example subsubsection 1 c II

+

Example subsubsection 1 c III

+

Example Section 2

+

Lorem ipsum

+

Example Subsection 2 a

+

Lorem ipsum

+

Example subsubsection 2 a I

+

Example subsubsection 2 a II

+

Example subsubsection 2 a III

+

Example Subsection 2 b

+

Lorem ipsum

+

Example subsubsection 2 b I

+

Example subsubsection 2 b II

+

Example subsubsection 2 b III

+

Example Subsection 2 c

+

Lorem ipsum

+

Example subsubsection 2 c I

+

Example subsubsection 2 c II

+

Example subsubsection 2 c III

+

Example Section 3

+

Lorem ipsum

+

Example Subsection 3 a

+

Lorem ipsum

+

Example subsubsection 3 a I

+

Example subsubsection 3 a II

+

Example subsubsection 3 a III

+

Example Subsection 3 b

+

Lorem ipsum

+

Example subsubsection 3 b I

+

Example subsubsection 3 b II

+

Example subsubsection 3 b III

+

Example Subsection 3 c

+

Lorem ipsum

+

Example subsubsection 3 c I

+

Example subsubsection 3 c II

+

Example subsubsection 3 c III

+ + \ No newline at end of file diff --git a/docs/markdown-features/toc.html.html b/docs/markdown-features/toc.html.html new file mode 100644 index 0000000000..f8c896e91d --- /dev/null +++ b/docs/markdown-features/toc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration.html b/docs/migration.html new file mode 100644 index 0000000000..bd700fa94c --- /dev/null +++ b/docs/migration.html @@ -0,0 +1,72 @@ + + + + + +Upgrading Docusaurus | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Upgrading Docusaurus

+

Docusaurus versioning is based on the major.minor.patch scheme and respects Semantic Versioning.

+

Breaking changes are only released on major version upgrades, and thoroughly documented in the following upgrade guides.

+ +
+

Troubleshooting upgrades

+

When upgrading Docusaurus you may experience issues caused by mismatching cached dependencies - there are a few troubleshooting steps you should perform to resolve these common issues before reporting a bug or seeking support.

+

Run the clear command

+

This CLI command is used to clear a Docusaurus site's generated assets, caches and build artifacts.

+
npm run clear
+

Remove node_modules and your lock file(s)

+

Remove the node_modules folder and your package manager's lock file using the following:

+
rm -rf node_modules yarn.lock package-lock.json
+

Then reinstall packages and regenerate the lock file using:

+
npm install
+ + \ No newline at end of file diff --git a/docs/migration.html.html b/docs/migration.html.html new file mode 100644 index 0000000000..65d3c15027 --- /dev/null +++ b/docs/migration.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v2.html b/docs/migration/v2.html new file mode 100644 index 0000000000..04f31dfd45 --- /dev/null +++ b/docs/migration/v2.html @@ -0,0 +1,97 @@ + + + + + +Overview | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Overview

+

This doc guides you through migrating an existing Docusaurus 1 site to Docusaurus 2.

+

We try to make this as easy as possible, and provide a migration CLI.

+

Main differences

+

Docusaurus 1 is a pure documentation site generator, using React as a server-side template engine, but not loading React on the browser.

+

Docusaurus 2, rebuilt from the ground up, generates a single-page-application, using the full power of React in the browser. It allows for more customizability but preserved the best parts of Docusaurus 1 - easy to get started, versioned docs, and i18n.

+

Beyond that, Docusaurus 2 is a performant static site generator and can be used to create common content-driven websites (e.g. Documentation, Blogs, Product Landing and Marketing Pages, etc) extremely quickly.

+

While our main focus will still be helping you get your documentations right and well, it is possible to build any kind of website using Docusaurus 2 as it is just a React application. Docusaurus can now be used to build any website, not just documentation websites.

+

Docusaurus 1 structure

+

Your Docusaurus 1 site should have the following structure:

+
├── docs
└── website
├── blog
├── core
│ └── Footer.js
├── package.json
├── pages
├── sidebars.json
├── siteConfig.js
└── static
+

Docusaurus 2 structure

+

After the migration, your Docusaurus 2 site could look like:

+
├── docs
└── website
├── blog
├── src
│ ├── components
│ ├── css
│ └── pages
├── static
├── package.json
├── sidebars.json
├── docusaurus.config.js
+
info

This migration does not change the /docs folder location, but Docusaurus v2 sites generally have the /docs folder inside /website

You are free to put the /docs folder anywhere you want after having migrated to v2.

+

Migration process

+

There are multiple things to migrate to obtain a fully functional Docusaurus 2 website:

+
    +
  • packages
  • +
  • CLI commands
  • +
  • site configuration
  • +
  • Markdown files
  • +
  • sidebars file
  • +
  • pages, components and CSS
  • +
  • versioned docs
  • +
  • i18n support 🚧
  • +
+

Automated migration process

+

The migration CLI will handle many things of the migration for you.

+

However, some parts can't easily be automated, and you will have to fallback to the manual process.

+
note

We recommend running the migration CLI, and complete the missing parts thanks to the manual migration process.

+

Manual migration process

+

Some parts of the migration can't be automated (particularly the pages), and you will have to migrate them manually.

+

The manual migration guide will give you all the manual steps.

+

Support

+

For any questions, you can ask in the #migration-v1-to-v2 Discord channel.

+

Feel free to tag @slorber in any migration PRs if you would like us to have a look.

+

We also have volunteers willing to help you migrate your v1 site.

+

Example migration PRs

+

You might want to refer to our migration PRs for Create React App and Flux as examples of how a migration for a basic Docusaurus v1 site can be done.

+ + \ No newline at end of file diff --git a/docs/migration/v2.html.html b/docs/migration/v2.html.html new file mode 100644 index 0000000000..b73698a29f --- /dev/null +++ b/docs/migration/v2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v2/automated.html b/docs/migration/v2/automated.html new file mode 100644 index 0000000000..f4a96cce21 --- /dev/null +++ b/docs/migration/v2/automated.html @@ -0,0 +1,90 @@ + + + + + +Automated migration | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Automated migration

+

The migration CLI automatically migrates your v1 website to a v2 website.

+
info

Manual work is still required after using the migration CLI, as we can't automate a full migration

+

The migration CLI migrates:

+
    +
  • Site configurations (from siteConfig.js to docusaurus.config.js)
  • +
  • package.json
  • +
  • sidebars.json
  • +
  • /docs
  • +
  • /blog
  • +
  • /static
  • +
  • versioned_sidebar.json and /versioned_docs if your site uses versioning
  • +
+

To use the migration CLI, follow these steps:

+
    +
  1. +

    Before using the migration CLI, ensure that /docs, /blog, /static, sidebars.json, siteConfig.js, package.json follow the expected structure.

    +
  2. +
  3. +

    To migrate your v1 website, run the migration CLI with the appropriate filesystem paths:

    +
  4. +
+
# migration command format
npx @docusaurus/migrate migrate <v1 website directory> <desired v2 website directory>

# example
npx @docusaurus/migrate migrate ./v1-website ./v2-website
+
    +
  1. To view your new website locally, go into your v2 website's directory and start your development server.
  2. +
+
cd ./v2-website
npm install
npm start
+
danger

The migration CLI updates existing files. Be sure to have committed them first!

+

Options

+

You can add option flags to the migration CLI to automatically migrate Markdown content and pages to v2. It is likely that you will still need to make some manual changes to achieve your desired result.

+
NameDescription
--mdxAdd this flag to convert Markdown to MDX automatically
--pageAdd this flag to migrate pages automatically
+
# example using options
npx @docusaurus/migrate migrate --mdx --page ./v1-website ./v2-website
+
danger

The migration of pages and MDX is still a work in progress.

We recommend you to try to run the pages without these options, commit, and then try to run the migration again with the --page and --mdx options.

This way, you'd be able to easily inspect and fix the diff.

+ + \ No newline at end of file diff --git a/docs/migration/v2/automated.html.html b/docs/migration/v2/automated.html.html new file mode 100644 index 0000000000..8b5122f4fe --- /dev/null +++ b/docs/migration/v2/automated.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v2/manual.html b/docs/migration/v2/manual.html new file mode 100644 index 0000000000..c5816fc2ca --- /dev/null +++ b/docs/migration/v2/manual.html @@ -0,0 +1,225 @@ + + + + + +Manual migration | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Manual migration

+

This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.

+

Project setup

+

package.json

+

Scoped package names

+

In Docusaurus 2, we use scoped package names:

+
    +
  • docusaurus@docusaurus/core
  • +
+

This provides a clear distinction between Docusaurus' official packages and community maintained packages. In another words, all Docusaurus' official packages are namespaced under @docusaurus/.

+

Meanwhile, the default doc site functionalities provided by Docusaurus 1 are now provided by @docusaurus/preset-classic. Therefore, we need to add this dependency as well:

+
package.json
{
dependencies: {
- "docusaurus": "^1.x.x",
+ "@docusaurus/core": "^2.0.0-beta.0",
+ "@docusaurus/preset-classic": "^2.0.0-beta.0",
}
}
+
tip

Please use the most recent Docusaurus 2 version, which you can check out here (using the latest tag).

+

CLI commands

+

Meanwhile, CLI commands are renamed to docusaurus <command> (instead of docusaurus-command).

+

The "scripts" section of your package.json should be updated as follows:

+
package.json
{
"scripts": {
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy"
// ...
}
}
+

A typical Docusaurus 2 package.json may look like this:

+
package.json
{
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"serve": "docusaurus serve",
"clear": "docusaurus clear"
},
"dependencies": {
"@docusaurus/core": "^2.0.0-beta.0",
"@docusaurus/preset-classic": "^2.0.0-beta.0",
"clsx": "^1.1.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"browserslist": {
"production": [">0.5%", "not dead", "not op_mini all"],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
+

Update references to the build directory

+

In Docusaurus 1, all the build artifacts are located within website/build/<PROJECT_NAME>.

+

In Docusaurus 2, it is now moved to just website/build. Make sure that you update your deployment configuration to read the generated files from the correct build directory.

+

If you are deploying to GitHub pages, make sure to run yarn deploy instead of yarn publish-gh-pages script.

+

.gitignore

+

The .gitignore in your website should contain:

+
.gitignore
# dependencies
/node_modules

# production
/build

# generated files
.docusaurus
.cache-loader

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
+

README

+

The D1 website may have an existing README file. You can modify it to reflect the D2 changes, or copy the default Docusaurus v2 README.

+

Site configurations

+

docusaurus.config.js

+

Rename siteConfig.js to docusaurus.config.js.

+

In Docusaurus 2, we split each functionality (blog, docs, pages) into plugins for modularity. Presets are bundles of plugins and for backward compatibility we built a @docusaurus/preset-classic preset which bundles most of the essential plugins present in Docusaurus 1.

+

Add the following preset configuration to your docusaurus.config.js.

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// Docs folder path relative to website dir.
path: '../docs',
// Sidebars file relative to website dir.
sidebarPath: require.resolve('./sidebars.json'),
},
// ...
},
],
],
};
+

We recommend moving the docs folder into the website folder and that is also the default directory structure in v2. Vercel supports Docusaurus project deployments out-of-the-box if the docs directory is within the website. It is also generally better for the docs to be within the website so that the docs and the rest of the website code are co-located within one website directory.

+

If you are migrating your Docusaurus v1 website, and there are pending documentation pull requests, you can temporarily keep the /docs folder to its original place, to avoid producing conflicts.

+

Refer to migration guide below for each field in siteConfig.js.

+

Updated fields

+

baseUrl, tagline, title, url, favicon, organizationName, projectName, githubHost, scripts, stylesheets

+

No actions needed, these configuration fields were not modified.

+

colors

+

Deprecated. We wrote a custom CSS framework for Docusaurus 2 called Infima which uses CSS variables for theming. The docs are not quite ready yet and we will update here when it is. To overwrite Infima's CSS variables, create your own CSS file (e.g. ./src/css/custom.css) and import it globally by passing it as an option to @docusaurus/preset-classic:

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: [require.resolve('./src/css/custom.css')],
},
},
],
],
};
+

Infima uses 7 shades of each color.

+
/src/css/custom.css
/**
* You can override the default Infima variables here.
* Note: this is not a complete list of --ifm- variables.
*/
:root {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: rgb(33, 175, 144);
--ifm-color-primary-darker: rgb(31, 165, 136);
--ifm-color-primary-darkest: rgb(26, 136, 112);
--ifm-color-primary-light: rgb(70, 203, 174);
--ifm-color-primary-lighter: rgb(102, 212, 189);
--ifm-color-primary-lightest: rgb(146, 224, 208);
}
+

We recommend using ColorBox to find the different shades of colors for your chosen primary color.

+

Alternatively, use the following tool to generate the different shades for your website and copy the variables into src/css/custom.css.

+ +
tip

Aim for at least WCAG-AA contrast ratio for the primary color to ensure readability. Use the Docusaurus website itself to preview how your color palette would look like. You can use alternative palettes in dark mode because one color doesn't usually work in both light and dark mode.

CSS Variable NameHexAdjustmentContrast Rating
--ifm-color-primary-lightest#3cad6eFail 🔴
--ifm-color-primary-lighter#359962Fail 🔴
--ifm-color-primary-light#33925dFail 🔴
--ifm-color-primary#2e85550AA 👍
--ifm-color-primary-dark#29784cAA 👍
--ifm-color-primary-darker#277148AA 👍
--ifm-color-primary-darkest#205d3bAAA 🏅

Replace the variables in src/css/custom.css with these new variables.

/src/css/custom.css
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
}
+ +

Site meta info such as assets, SEO, copyright info are now handled by themes. To customize them, use the themeConfig field in your docusaurus.config.js:

+
docusaurus.config.js
module.exports = {
// ...
themeConfig: {
footer: {
logo: {
alt: 'Meta Open Source Logo',
src: '/img/meta_oss_logo.png',
href: 'https://opensource.facebook.com/',
},
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, // You can also put own HTML here.
},
image: 'img/docusaurus.png',
// ...
},
};
+ +

In Docusaurus 1, header icon and header links were root fields in siteConfig:

+
siteConfig.js
headerIcon: 'img/docusaurus.svg',
headerLinks: [
{ doc: "doc1", label: "Getting Started" },
{ page: "help", label: "Help" },
{ href: "https://github.com/", label: "GitHub" },
{ blog: true, label: "Blog" },
],
+

Now, these two fields are both handled by the theme:

+
docusaurus.config.js
module.exports = {
// ...
themeConfig: {
navbar: {
title: 'Docusaurus',
logo: {
alt: 'Docusaurus Logo',
src: 'img/docusaurus.svg',
},
items: [
{to: 'docs/doc1', label: 'Getting Started', position: 'left'},
{to: 'help', label: 'Help', position: 'left'},
{
href: 'https://github.com/',
label: 'GitHub',
position: 'right',
},
{to: 'blog', label: 'Blog', position: 'left'},
],
},
// ...
},
};
+

algolia

+
docusaurus.config.js
module.exports = {
// ...
themeConfig: {
algolia: {
apiKey: '47ecd3b21be71c5822571b9f59e52544',
indexName: 'docusaurus-2',
algoliaOptions: { //... },
},
// ...
},
};
+
warning

Your Algolia DocSearch v1 config (found here) should be updated for Docusaurus v2 (example).

You can contact the DocSearch team (@shortcuts, @s-pace) for support. They can update it for you and trigger a recrawl of your site to restore the search (otherwise you will have to wait up to 24h for the next scheduled crawl)

+

blogSidebarCount

+

Deprecated. Pass it as a blog option to @docusaurus/preset-classic instead:

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
postsPerPage: 10,
},
// ...
},
],
],
};
+

cname

+

Deprecated. Create a CNAME file in your static folder instead with your custom domain. Files in the static folder will be copied into the root of the build folder during execution of the build command.

+

customDocsPath, docsUrl, editUrl, enableUpdateBy, enableUpdateTime

+

BREAKING: editUrl should point to (website) Docusaurus project instead of docs directory.

+

Deprecated. Pass it as an option to @docusaurus/preset-classic docs instead:

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// Equivalent to `customDocsPath`.
path: 'docs',
// Equivalent to `editUrl` but should point to `website` dir instead of `website/docs`.
editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
// Equivalent to `docsUrl`.
routeBasePath: 'docs',
// Remark and Rehype plugins passed to MDX. Replaces `markdownOptions` and `markdownPlugins`.
remarkPlugins: [],
rehypePlugins: [],
// Equivalent to `enableUpdateBy`.
showLastUpdateAuthor: true,
// Equivalent to `enableUpdateTime`.
showLastUpdateTime: true,
},
// ...
},
],
],
};
+

gaTrackingId

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
// ...
googleAnalytics: {
trackingID: 'UA-141789564-1',
},
},
],
],
};
+

gaGtag

+
docusaurus.config.js
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
// ...
gtag: {
trackingID: 'UA-141789564-1',
},
},
],
],
};
+

Removed fields

+

The following fields are all deprecated, you may remove from your configuration file.

+
    +
  • blogSidebarTitle
  • +
  • cleanUrl - Clean URL is used by default now.
  • +
  • defaultVersionShown - Versioning is not ported yet. You'd be unable to migration to Docusaurus 2 if you are using versioning. Stay tuned.
  • +
  • disableHeaderTitle
  • +
  • disableTitleTagline
  • +
  • docsSideNavCollapsible is available at docsPluginOptions.sidebarCollapsible, and this is turned on by default now.
  • +
  • facebookAppId
  • +
  • facebookComments
  • +
  • facebookPixelId
  • +
  • fonts
  • +
  • highlight - We now use Prism instead of highlight.js.
  • +
  • markdownOptions - We use MDX in v2 instead of Remarkable. Your Markdown options have to be converted to Remark/Rehype plugins.
  • +
  • markdownPlugins - We use MDX in v2 instead of Remarkable. Your Markdown plugins have to be converted to Remark/Rehype plugins.
  • +
  • manifest
  • +
  • onPageNav - This is turned on by default now.
  • +
  • separateCss - It can imported in the same manner as custom.css mentioned above.
  • +
  • scrollToTop
  • +
  • scrollToTopOptions
  • +
  • translationRecruitingLink
  • +
  • twitter
  • +
  • twitterUsername
  • +
  • useEnglishUrl
  • +
  • users
  • +
  • usePrism - We now use Prism instead of highlight.js
  • +
  • wrapPagesHTML
  • +
+

We intend to implement many of the deprecated config fields as plugins in future. Help will be appreciated!

+

Urls

+

In v1, all pages were available with or without the .html extension.

+

For example, these 2 pages exist:

+ +

If cleanUrl was:

+
    +
  • true: links would target /installation
  • +
  • false: links would target /installation.html
  • +
+

In v2, by default, the canonical page is /installation, and not /installation.html.

+

If you had cleanUrl: false in v1, it's possible that people published links to /installation.html.

+

For SEO reasons, and avoiding breaking links, you should configure server-side redirect rules on your hosting provider.

+

As an escape hatch, you could use @docusaurus/plugin-client-redirects to create client-side redirects from /installation.html to /installation.

+
module.exports = {
plugins: [
[
'@docusaurus/plugin-client-redirects',
{
fromExtensions: ['html'],
},
],
],
};
+

If you want to keep the .html extension as the canonical URL of a page, docs can declare a slug: installation.html front matter.

+

Components

+ +

In previous version, nested sidebar category is not allowed and sidebar category can only contain doc ID. However, v2 allows infinite nested sidebar and we have many types of Sidebar Item other than document.

+

You'll have to migrate your sidebar if it contains category type. Rename subcategory to category and ids to items.

+
sidebars.json
{
- type: 'subcategory',
+ type: 'category',
label: 'My Example Subcategory',
+ items: ['doc1'],
- ids: ['doc1']
},
+ +

website/core/Footer.js is no longer needed. If you want to modify the default footer provided by Docusaurus, swizzle it:

+
npm run swizzle @docusaurus/theme-classic Footer
+

This will copy the current <Footer /> component used by the theme to a src/theme/Footer directory under the root of your site, you may then edit this component for customization.

+

Do not swizzle the Footer just to add the logo on the left. The logo is intentionally removed in v2 and moved to the bottom. Just configure the footer in docusaurus.config.js with themeConfig.footer:

+
module.exports = {
themeConfig: {
footer: {
logo: {
alt: 'Meta Open Source Logo',
src: '/img/meta_oss_logo.png',
href: 'https://opensource.facebook.com',
},
},
},
};
+

Pages

+

Please refer to creating pages to learn how Docusaurus 2 pages work. After reading that, notice that you have to move pages/en files in v1 to src/pages instead.

+

In Docusaurus v1, pages received the siteConfig object as props.

+

In Docusaurus v2, get the siteConfig object from useDocusaurusContext instead.

+

In v2, you have to apply the theme layout around each page. The Layout component takes metadata props.

+

CompLibrary is deprecated in v2, so you have to write your own React component or use Infima styles (Docs will be available soon, sorry about that! In the meanwhile, inspect the V2 website or view https://infima.dev/ to see what styles are available).

+

You can migrate CommonJS to ES6 imports/exports.

+

Here's a typical Docusaurus v2 page:

+
import React from 'react';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';

const MyPage = () => {
const {siteConfig} = useDocusaurusContext();
return (
<Layout title={siteConfig.title} description={siteConfig.tagline}>
<div className="hero text--center">
<div className="container ">
<div className="padding-vert--md">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
</div>
<div>
<Link
to="/docs/get-started"
className="button button--lg button--outline button--primary">
Get started
</Link>
</div>
</div>
</div>
</Layout>
);
};

export default MyPage;
+

The following code could be helpful for migration of various pages:

+ +

Content

+

Replace AUTOGENERATED_TABLE_OF_CONTENTS

+

This feature is replaced by inline table of content

+

Update Markdown syntax to be MDX-compatible

+

In Docusaurus 2, the Markdown syntax has been changed to MDX. Hence there might be some broken syntax in the existing docs which you would have to update. A common example is self-closing tags like <img> and <br> which are valid in HTML would have to be explicitly closed now ( <img/> and <br/>). All tags in MDX documents have to be valid JSX.

+

Front matter is parsed by gray-matter. If your front matter use special characters like :, you now need to quote it: title: Part 1: my part1 titletitle: "Part 1: my part1 title".

+

Tips: You might want to use some online tools like HTML to JSX to make the migration easier.

+

Language-specific code tabs

+

Refer to the multi-language support code blocks section.

+

Front matter

+

The Docusaurus front matter fields for the blog have been changed from camelCase to snake_case to be consistent with the docs.

+

The fields authorFBID and authorTwitter have been deprecated. They are only used for generating the profile image of the author which can be done via the authors field.

+

Deployment

+

The CNAME file used by GitHub Pages is not generated anymore, so be sure you have created it in /static/CNAME if you use a custom domain.

+

The blog RSS feed is now hosted at /blog/rss.xml instead of /blog/feed.xml. You may want to configure server-side redirects so that users' subscriptions keep working.

+

Test your site

+

After migration, your folder structure should look like this:

+
my-project
├── docs
└── website
├── blog
├── src
│ ├── css
│ │ └── custom.css
│ └── pages
│ └── index.js
├── package.json
├── sidebars.json
├── .gitignore
├── docusaurus.config.js
└── static
+

Start the development server and fix any errors:

+
cd website
npm start
+

You can also try to build the site for production:

+
npm run build
+ + \ No newline at end of file diff --git a/docs/migration/v2/manual.html.html b/docs/migration/v2/manual.html.html new file mode 100644 index 0000000000..ea2c123d64 --- /dev/null +++ b/docs/migration/v2/manual.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v2/translated-sites.html b/docs/migration/v2/translated-sites.html new file mode 100644 index 0000000000..e365f09f47 --- /dev/null +++ b/docs/migration/v2/translated-sites.html @@ -0,0 +1,123 @@ + + + + + +Translated sites | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Translated sites

+

This page explains how migrate a translated Docusaurus v1 site to Docusaurus v2.

+

i18n differences

+

Docusaurus v2 i18n is conceptually quite similar to Docusaurus v1 i18n with a few differences.

+

It is not tightly coupled to Crowdin, and you can use Git or another SaaS instead.

+

Different filesystem paths

+

On Docusaurus v2, localized content is generally found at website/i18n/[locale].

+

Docusaurus v2 is modular based on a plugin system, and each plugin is responsible to manage its own translations.

+

Each plugin has its own i18n subfolder, like: website/i18n/fr/docusaurus-plugin-content-blog

+

Updated translation APIs

+

With Docusaurus v1, you translate your pages with <translate>:

+
const translate = require('../../server/translate.js').translate;

<h2>
<translate desc="the header description">
This header will be translated
</translate>
</h2>;
+

On Docusaurus v2, you translate your pages with <Translate>

+
import Translate from '@docusaurus/Translate';

<h2>
<Translate id="header.translation.id" description="the header description">
This header will be translated
</Translate>
</h2>;
+
note

The write-translations CLI still works to extract translations from your code.

The code translations are now added to i18n/[locale]/code.json using Chrome i18n JSON format.

+

Stricter Markdown parser

+

Docusaurus v2 is using MDX to parse Markdown files.

+

MDX compiles Markdown files to React components, is stricter than the Docusaurus v1 parser, and will make your build fail on error instead of rendering some bad content.

+

Also, the HTML elements must be replaced by JSX elements.

+

This is particularly important for i18n because if your translations are not good on Crowdin and use invalid Markup, your v2 translated site might fail to build: you may need to do some translation cleanup to fix the errors.

+

Migration strategies

+

This section will help you figure out how to keep your existing v1 translations after you migrate to v2.

+

There are multiple possible strategies to migrate a Docusaurus v1 site using Crowdin, with different tradeoffs.

+
warning

This documentation is a best-effort to help you migrate, please help us improve it if you find a better way!

+

Before all, we recommend to:

+ +
danger

Don't try to migrate without understanding both Crowdin and Docusaurus v2 i18n.

+

Create a new Crowdin project

+

To avoid any risk of breaking your v1 site in production, one possible strategy is to duplicate the original v1 Crowdin project.

+
info

This strategy was used to upgrade the Jest website.

+

Unfortunately, Crowdin does not have any "Duplicate/clone Project" feature, which makes things complicated.

+
    +
  • Download the translation memory of your original project in .tmx format (https://crowdin.com/project/<ORIGINAL_PROJECT>/settings#tm > View Records)
  • +
  • Upload the translation memory to your new project (https://crowdin.com/project/<NEW_PROJECT>/settings#tm > View Records)
  • +
  • Reconfigure crowdin.yml for Docusaurus v2 according to the i18n docs
  • +
  • Upload the Docusaurus v2 source files with the Crowdin CLI to the new project
  • +
  • Mark sensitive strings like id or slug as "hidden string" on Crowdin
  • +
  • On the "Translations" tab, click on "Pre-Translation > via TM" (https://crowdin.com/project/<NEW_PROJECT>/settings#translations)
  • +
  • Try first with "100% match" (more content will be translated than "Perfect"), and pre-translate your sources
  • +
  • Download the Crowdin translations locally
  • +
  • Try to run/build your site and see if there are any errors
  • +
+

You will likely have errors on your first-try: the pre-translation might try to translate things that it should not be translated (front matter, admonition, code blocks...), and the translated MD files might be invalid for the MDX parser.

+

You will have to fix all the errors until your site builds. You can do that by modifying the translated MD files locally, and fix your site for one locale at a time using docusaurus build --locale fr.

+

There is no ultimate guide we could write to fix these errors, but common errors are due to:

+
    +
  • Not marking enough strings as "hidden strings" in Crowdin, leading to pre-translation trying to translate these strings.
  • +
  • Having bad v1 translations, leading to invalid markup in v2: bad HTML elements inside translations and unclosed tags
  • +
  • Anything rejected by the MDX parser, like using HTML elements instead of JSX elements (use the MDX playground for debugging)
  • +
+

You might want to repeat this pre-translation process, eventually trying the "Perfect" option and limiting pre-translation only some languages/files.

+
tip

Use mdx-code-block around problematic Markdown elements: Crowdin is less likely mess things up with code blocks.

+
note

You will likely notice that some things were translated on your old project, but are now untranslated in your new project.

The Crowdin Markdown parser is evolving other time and each Crowdin project has a different parser version, which can lead to pre-translation not being able to pre-translate all the strings.

This parser version is undocumented, and you will have to ask the Crowdin support to know your project's parser version and fix one specific version.

Using the same CLI version and parser version across the 2 Crowdin projects might give better results.

+
danger

Crowdin has an "upload translations" feature, but in our experience it does not give very good results for Markdown

+

Use the existing Crowdin project

+

If you don't mind modifying your existing Crowdin project and risking to mess things up, it may be possible to use the Crowdin branch system.

+
warning

This workflow has not been tested in practice, please report us how good it is.

+

This way, you wouldn't need to create a new Crowdin project, transfer the translation memory, apply pre-translations, and try to fix the pre-translations errors.

+

You could create a Crowdin branch for Docusaurus v2, where you upload the v2 sources, and merge the Crowdin branch to main once ready.

+

Use Git instead of Crowdin

+

It is possible to migrate away of Crowdin, and add the translation files to Git instead.

+

Use the Crowdin CLI to download the v1 translated files, and put these translated files at the correct Docusaurus v2 filesystem location.

+ + \ No newline at end of file diff --git a/docs/migration/v2/translated-sites.html.html b/docs/migration/v2/translated-sites.html.html new file mode 100644 index 0000000000..d91a98805d --- /dev/null +++ b/docs/migration/v2/translated-sites.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v2/versioned-sites.html b/docs/migration/v2/versioned-sites.html new file mode 100644 index 0000000000..8e76267f91 --- /dev/null +++ b/docs/migration/v2/versioned-sites.html @@ -0,0 +1,95 @@ + + + + + +Versioned sites | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Versioned sites

+

Read up https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-2#versioning first for problems in v1's approach.

+
note

The versioned docs should normally be migrated correctly by the migration CLI

+

Migrate your versioned_docs front matter

+

Unlike v1, The Markdown header for each versioned doc is no longer altered by using version-${version}-${original_id} as the value for the actual ID field. See scenario below for better explanation.

+

For example, if you have a docs/hello.md.

+
---
id: hello
title: Hello, World !
---

Hi, Endilie here :)
+

When you cut a new version 1.0.0, in Docusaurus v1, website/versioned_docs/version-1.0.0/hello.md looks like this:

+
---
id: version-1.0.0-hello
title: Hello, World !
original_id: hello
---

Hi, Endilie here :)
+

In comparison, Docusaurus 2 website/versioned_docs/version-1.0.0/hello.md looks like this (exactly same as original)

+
---
id: hello
title: Hello, World !
---

Hi, Endilie here :)
+

Since we're going for snapshot and allow people to move (and edit) docs easily inside version. The id front matter is no longer altered and will remain the same. Internally, it is set as version-${version}/${id}.

+

Essentially, here are the necessary changes in each versioned_docs file:

+
---
- id: version-1.0.0-hello
+ id: hello
title: Hello, World !
- original_id: hello
---
Hi, Endilie here :)
+

Migrate your versioned_sidebars

+
    +
  • Refer to versioned_docs ID as version-${version}/${id} (v2) instead of version-${version}-${original_id} (v1).
  • +
+

Because in v1 there is a good chance someone created a new file with front matter ID "version-${version}-${id}" that can conflict with versioned_docs ID.

+

For example, Docusaurus 1 can't differentiate docs/xxx.md

+
---
id: version-1.0.0-hello
---

Another content
+

vs website/versioned_docs/version-1.0.0/hello.md

+
---
id: version-1.0.0-hello
title: Hello, World !
original_id: hello
---

Hi, Endilie here :)
+

Since we don't allow / in v1 & v2 for front matter, conflicts are less likely to occur.

+

So v1 users need to migrate their versioned_sidebars file

+

Example versioned_sidebars/version-1.0.0-sidebars.json:

+
versioned_sidebars/version-1.0.0-sidebars.json
{
+ "version-1.0.0/docs": {
- "version-1.0.0-docs": {
"Test": [
+ "version-1.0.0/foo/bar",
- "version-1.0.0-foo/bar",
],
"Guides": [
+ "version-1.0.0/hello",
- "version-1.0.0-hello"
]
}
}
+

Populate your versioned_sidebars and versioned_docs

+

In v2, we use snapshot approach for documentation versioning. Every versioned docs does not depends on other version. It is possible to have foo.md in version-1.0.0 but it doesn't exist in version-1.2.0. This is not possible in previous version due to Docusaurus v1 fallback functionality (https://v1.docusaurus.io/docs/en/versioning#fallback-functionality).

+

For example, if your versions.json looks like this in v1

+
versions.json
["1.1.0", "1.0.0"]
+

Docusaurus v1 creates versioned docs if and only if the doc content is different. Your docs structure might look like this if the only doc changed from v1.0.0 to v1.1.0 is hello.md.

+
website
├── versioned_docs
│ ├── version-1.1.0
│ │ └── hello.md
│ └── version-1.0.0
│ ├── foo
│ │ └── bar.md
│ └── hello.md
├── versioned_sidebars
│ └── version-1.0.0-sidebars.json
+

In v2, you have to populate the missing versioned_docs and versioned_sidebars (with the right front matter and ID reference too).

+
website
├── versioned_docs
│ ├── version-1.1.0
│ │ ├── foo
│ │ │ └── bar.md
│ │ └── hello.md
│ └── version-1.0.0
│ ├── foo
│ │ └── bar.md
│ └── hello.md
├── versioned_sidebars
│ ├── version-1.1.0-sidebars.json
│ └── version-1.0.0-sidebars.json
+

Convert style attributes to style objects in MDX

+

Docusaurus 2 uses JSX for doc files. If you have any style attributes in your Docusaurus 1 docs, convert them to style objects, like this:

+
---
id: demo
title: Demo
---

## Section

hello world

- pre style="background: black">zzz</pre>
+ pre style={{background: 'black'}}>zzz</pre>
+ + \ No newline at end of file diff --git a/docs/migration/v2/versioned-sites.html.html b/docs/migration/v2/versioned-sites.html.html new file mode 100644 index 0000000000..cb89311a13 --- /dev/null +++ b/docs/migration/v2/versioned-sites.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/migration/v3.html b/docs/migration/v3.html new file mode 100644 index 0000000000..ac91c123ea --- /dev/null +++ b/docs/migration/v3.html @@ -0,0 +1,334 @@ + + + + + +Upgrading to Docusaurus v3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Upgrading to Docusaurus v3

+

This documentation will help you upgrade your site from Docusaurus v2 to Docusaurus v3.

+

Docusaurus v3 is a new major version, including breaking changes requiring you to adjust your site accordingly. We will guide to during this process, and also mention a few optional recommendations.

+

This is not a full rewrite, and the breaking changes are relatively easy to handle. The simplest sites will eventually upgrade by simply updating their npm dependencies.

+

The main breaking change is the upgrade from MDX v1 to MDX v3. Read the MDX v2 and MDX v3 release notes for details. MDX will now compile your Markdown content more strictly and with subtle differences.

+
Before upgrading

Before upgrading, we recommend preparing your site for Docusaurus v3. There are changes that you can already handle incrementally, under Docusaurus v2. Doing so will help reduce the work needed to finally upgrade to Docusaurus v3.

For complex sites, we also recommend to set up visual regression tests, a good way to ensure your site stays visually identical. Docusaurus v3 mainly upgrades dependencies, and is not expected to produce any visual changes.

+
note

Check the release notes for Docusaurus v3.0.0, and browse the pull-requests for additional useful information and the motivation behind each change mentioned here.

+

Upgrading Dependencies

+

Upgrading to Docusaurus v3 requires upgrading core Docusaurus dependencies (@docusaurus/name), but also other related packages.

+

Docusaurus v3 now uses the following dependencies:

+
    +
  • Node.js v18.0+
  • +
  • React v18.0+
  • +
  • MDX v3.0+
  • +
  • TypeScript v5.0+
  • +
  • prism-react-renderer v2.0+
  • +
  • react-live v4.0+
  • +
  • remark-emoji v4.0+
  • +
  • mermaid v10.4+
  • +
+
Upgrading community plugins

If your site uses third-party community plugins and themes, you might need to upgrade them.

Make sure those plugins are compatible with Docusaurus v3 before attempting an upgrade.

+

A typical package.json dependency upgrade example:

+
package.json
 {
"dependencies": {
// upgrade to Docusaurus v3
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
// upgrade to MDX v3
- "@mdx-js/react": "^1.6.22",
+ "@mdx-js/react": "^3.0.0",
// upgrade to prism-react-renderer v2.0+
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
// upgrade to React v18.0+
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
// upgrade Docusaurus dev dependencies to v3
- "@docusaurus/module-type-aliases": "2.4.3",
- "@docusaurus/types": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
}
"engines": {
// require Node.js 18.0+
- "node": ">=16.14"
+ "node": ">=18.0"
}
}
+

For TypeScript users:

+
package.json
 {
"devDependencies": {
// swap the external TypeScript config package for the new official one
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "3.0.0",
// upgrade React types to v18.0+
- "@types/react": "^17.0.69",
+ "@types/react": "^18.2.29",
// upgrade TypeScript to v5.0+
- "typescript": "~4.7.4"
+ "typescript": "~5.2.2"
}
}
+

Upgrading MDX

+

MDX is a major dependency of Docusaurus responsible for compiling your .md and .mdx files to React components.

+

The transition from MDX v1 to MDX v3 is the main challenge to the adoption of Docusaurus v3. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release.

+

Some documents that compiled successfully under Docusaurus v2 might now fail to compile under Docusaurus v3.

+
Find problematic content ahead of time

Run npx docusaurus-mdx-checker on your site to get a list of files that will now fail to compile under Docusaurus v3.

This command is also a good way to estimate the amount of work to be done to make your content compatible. Remember most of this work can be executed ahead of the upgrade by preparing your content for Docusaurus v3.

+

Other documents might also render differently.

+
Use visual regression tests

For large sites where a manual review of all pages is complicated, we recommend you to setup visual regression tests.

+

Upgrading MDX comes with all the breaking changes documented on the MDX v2 and MDX v3 release blog posts. Most breaking changes come from MDX v2, and MDX v3 is a relatively small release. The MDX v2 migration guide has a section on how to update MDX files that will be particularly relevant to us. Also make sure to read the Troubleshooting MDX page that can help you interpret common MDX error messages.

+

Make sure to also read our updated MDX and React documentation page.

+

Using the MDX playground

+

The MDX playground is your new best friend. It permits to understand how your content is compiled to React components, and troubleshoot compilation or rendering issues in isolation.

+ +
Configuring the MDX playground options for Docusaurus

To obtain a compilation behavior similar to what Docusaurus v2 uses, please turn on these options on the MDX playground:

    +
  • Use MDX
  • +
  • Use remark-gfm
  • +
  • Use remark-directive
  • +

Screenshot of the MDX playground&#39;s options panel, with only the &quot;Use MDX&quot;, &quot;Use remark-gfm&quot;, and &quot;Use remark-directive&quot; options checked

+

Using the two MDX playgrounds side-by-side, you will soon notice that some content is compiled differently or fails to compile in v2.

+
Making your content future-proof

The goal will be to refactor your problematic content so that it works fine with both versions of MDX. This way, when you upgrade to Docusaurus v3, this content will already work out-of-the-box.

+

Using the MDX checker CLI

+

We provide a docusaurus-mdx-checker CLI that permits to easily spot problematic content. Run this command on your site to obtain a list of files that will fail to compile under MDX v3.

+
npx docusaurus-mdx-checker
+

For each compilation issue, the CLI will log the file path and a line number to look at.

+

Screenshot of the terminal showing an example MDX checker CLI output, with a few error messages

+
tip

Use this CLI to estimate of how much work will be required to make your content compatible with MDX v3.

+
warning

This CLI is a best effort, and will only report compilation errors.

It will not report subtle compilation changes that do not produce errors but can affect how your content is displayed. To catch these problems, we recommend using visual regression tests.

+

Common MDX problems

+

Docusaurus cannot document exhaustively all the changes coming with MDX. That's the responsibility of the MDX v2 and MDX v3 migration guides.

+

However, by upgrading a few Docusaurus sites, we noticed that most of the issues come down to only a few cases that we have documented for you.

+

Bad usage of {

+

The { character is used for opening JavaScript expressions. MDX will now fail if what you put inside {expression} is not a valid expression.

+
example.md
The object shape looks like {username: string, age: number}
+
Error message
+

Could not parse expression with acorn: Unexpected content after expression

+
+
How to upgrade

Available options to fix this error:

    +
  • Use inline code: {username: string, age: number}
  • +
  • Use the HTML code: &#123;
  • +
  • Escape it: \{
  • +
+

Bad usage of <

+

The < character is used for opening JSX tags. MDX will now fail if it thinks your JSX is invalid.

+
example.md
Use Android version <5

You can use a generic type like Array<T>

Follow the template "Road to <YOUR_MINOR_VERSION>"
+
Error messages
+

Unexpected character 5 (U+0035) before name, expected a character that can start a name, such as a letter, $, or _

+
+

Expected a closing tag for <T> (1:6-1:9) before the end of paragraph end-tag-mismatch mdast-util-mdx-jsx

+
+

Expected a closing tag for <YOUR_MINOR_VERSION> (134:19-134:39) before the end of paragraph

+
+
How to upgrade

Available options to fix this error:

    +
  • Use inline code: Array<T>
  • +
  • Use the HTML code: &lt; or &#60;
  • +
  • Escape it: \<
  • +
+ +

Docusaurus supports GitHub Flavored Markdown (GFM), but autolink using the <link> syntax is not supported anymore by MDX.

+
example.md
<sebastien@thisweekinreact.com>

<http://localhost:3000>
+
Error messages
+

Unexpected character @ (U+0040) in name, expected a name character such as letters, digits, $, or _; whitespace before attributes; or the end of the tag (note: to create a link in MDX, use [text](url))

+
+

Unexpected character / (U+002F) before local name, expected a character that can start a name, such as a letter, $, or _ (note: to create a link in MDX, use [text](url))

+
+
How to upgrade

Use regular Markdown links, or remove the < and >. MDX and GFM are able to autolink literals already.

example.md
sebastien@thisweekinreact.com
[sebastien@thisweekinreact.com](mailto:sebastien@thisweekinreact.com)

http://localhost:3000
[http://localhost:3000](http://localhost:3000)
+

Lower-case MDXComponent mapping

+

For users providing a custom MDXComponentmapping, components are now "sandboxed":

+
    +
  • a MDXComponent mapping for h1 only gets used for # hi but not for <h1>hi</h1>
  • +
  • a lower-cased custom element name will not be substituted by its respective MDXComponent component anymore
  • +
+
visual difference

Your MDXComponent component mapping might not be applied as before, and your custom components might no longer be used.

+
How to upgrade

For native Markdown elements, you can keep using lower-case: p, h1, img, a...

For any other element, use upper-case names.

src/theme/MDXComponents.js
 import MDXComponents from '@theme-original/MDXComponents';

export default {
...MDXComponents,
p: (props) => <p {...props} className="my-paragraph"/>
- myElement: (props) => <div {...props} className="my-class" />,
+ MyElement: (props) => <div {...props} className="my-class" />,
};
+

Unintended extra paragraphs

+

In MDX v3, it is now possible to interleave JSX and Markdown more easily without requiring extra line breaks. Writing content on multiple lines can also produce new expected <p> tags.

+
visual difference

See how this content is rendered differently by MDX v1 and v3.

example.md
<div>Some **Markdown** content</div>
<div>
Some **Markdown** content
</div>
MDX v1 output
<div>Some **Markdown** content</div>
<div>Some **Markdown** content</div>
MDX v3 output
<div>Some <strong>Markdown</strong> content</div>
<div><p>Some <strong>Markdown</strong> content</p></div>
+
How to upgrade

If you don't want an extra <p> tag, refactor content on a case by case basis to use a single-line JSX tag.

 <figure>
<img src="/img/myImage.png" alt="My alt" />
- <figcaption>
- My image caption
- </figcaption>
+ <figcaption>My image caption</figcaption>
</figure>
+

Unintended usage of directives

+

Docusaurus v3 now uses Markdown Directives (implemented with remark-directive) as a generic way to provide support for admonitions, and other upcoming Docusaurus features.

+
example.md
This is a :textDirective

::leafDirective

:::containerDirective

Container directive content

:::
+
Visual change

Directives are parsed with the purpose of being handled by other Remark plugins. Unhandled directives will be ignored, and won't be rendered back in their original form.

example.md
The AWS re:Invent conf is great

Due to :Invent being parsed as a text directive, this will now be rendered as:

The AWS re
conf is great
+
How to upgrade
    +
  • Use the HTML code: &#58;
  • +
  • Add a space after : (if it makes sense): : text
  • +
  • Escape it: \:
  • +
+

Unsupported indented code blocks

+

MDX does not transform indented text as code blocks anymore.

+
example.md
    console.log("hello");
+
Visual change

The upgrade does not generally produce new MDX compilation errors, but can lead to content being rendered in an unexpected way because there isn't a code block anymore.

+
How to upgrade

Use the regular code block syntax instead of indentation:

example.md
```js
console.log('hello');
```
+

Other Markdown incompatibilities

+

Emphasis starting or ending with a space or a punctuation

+

New MDX parser now strictly complies with the CommonMark spec. CommonMark spec has introduced rules for emphasis around spaces and punctuation, which are incompatible especially with languages that do not use a space to split words, since v0.14.

+

Japanese and Chinese are most affected by this, but there are some other languages that can be affected (e.g. Thai and Khmer), for example when you try to emphasize an inline code or a link. Languages that use a space to split words are much less affected.

+

** (other than `**`) in the following example were parsed as intended in Docusaurus 2, but are not now in Docusaurus 3.

+ + +
example.md
**Do not end a range of emphasis with a space. **Or `**` will not work as intended.

<!-- Japanese -->
**「。」の後に文を続けると`**`が意図した動作をしません。**また、**[リンク](https://docusaurus.io/)****`コード`**のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。
+
See the detailed conditions and how to upgrade

If * or ** matches either of the following conditions, it will not work as the beginning of an emphasis mark anymore:

    +
  • The next character is a space (e.g. word* word)
  • +
  • The previous character is a punctuation character and the next character is a letter (not a space or punctuation character) (e.g. 文**(文))
  • +

On the contrary, if * or ** matches either of the following conditions, it will not work as the end of an emphasis mark anymore:

    +
  • The previous character is a space (e.g. word *word)
  • +
  • The next character is a punctuation character and the previous character is a letter (e.g. 文。**文)
  • +

“A punctuation character” includes non-ASCII ones, brackets, quotation marks and some symbols including % and @. More strictly speaking, a character whose 2-letters Unicode category starts with P is treated as a punctuation character here.

How to upgrade

If the offending emphasis mark is next to a space, move the space out of the range of emphasis:

english.md
**Do not end a range of emphasis with a space.** Or `**` will not work.

If the offending emphasis mark is surrounded by both a punctuation character and a letter, you can fix it without modifying the content by:

    +
  1. Convert the document to MDX if it is a vanilla Markdown.
  2. +
  3. replace the offending emphasis mark with a raw HTML tag (<em> or <strong>) instead:
  4. +
japanese.mdx
<strong>「。」の後に文を続けると`**`が意図した動作をしません。</strong>また、<strong>[リンク](https://docusaurus.io/)</strong>や<strong>`コード`</strong>のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。

While not an ideal solution, you can also either of the following without converting the document to MDX:

    +
  • +

    Move the most outside punctuation character out of the emphasis mark.

    + +
    japanese.md
    **「。」の後に文を続けると`**`が意図した動作をしません**。また、[**リンク**](https://docusaurus.io/)や・・・
    +
  • +
  • +

    Put a space just outside of the offending * or **. This solution does not force you to convert the document to MDX.

    + +
    japanese.md
    **「。」の後に文を続けると`**`が意図した動作をしません。** また、**[リンク](https://docusaurus.io/)****`コード`** のすぐ外側に`**`、そのさらに外側に句読点以外がある場合も同様です。
    +
  • +
+

MDX plugins

+

All the official packages (Unified, Remark, Rehype...) in the MDX ecosystem are now ES Modules only and do not support CommonJS anymore.

+

In practice this means that you can't do require("remark-plugin") anymore.

+
How to upgrade

Docusaurus v3 now supports ES Modules configuration files. We recommend that you migrate your config file to ES module, that enables you to import the Remark plugins easily:

docusaurus.config.js
import remarkPlugin from 'remark-plugin';

export default {
title: 'Docusaurus',
/* site config using remark plugins here */
};

If you want to keep using CommonJS modules, you can use dynamic imports as a workaround that enables you to import ES modules inside a CommonJS module. Fortunately, the Docusaurus config supports the usage of an async function to let you do so.

docusaurus.config.js
module.exports = async function () {
const myPlugin = (await import('remark-plugin')).default;
return {
// site config...
};
};
+
For plugin authors

If you created custom Remark or Rehype plugins, you may need to refactor those, or eventually rewrite them completely, due to how the new AST is structured. We have created a dedicated support discussion to help plugin authors upgrade their code.

+

Formatters

+

Prettier, the most common formatter, supports only the legacy MDX v1, not v3 yet as of Docusaurus v3.0.0. You can add {/* prettier-ignore */} before the incompatible parts of your code to make it work with Prettier.

+
{/* prettier-ignore */}
<SomeComponent>Some long text in the component</SomeComponent>
+

If you get tired of too many {/* prettier-ignore */} insertions, you can consider disabling MDX formatting by Prettier by adding the following to your .prettierignore file, until it starts supporting MDX v3:

+
.prettierignore
*.mdx
+

Other Breaking Changes

+

Apart the MDX v3 upgrade, here is an exhaustive list of breaking changes coming with Docusaurus v3.

+

Node.js v18.0

+

Node.js 16 reached End-of-Life, and Docusaurus v3 now requires Node.js >= 18.0.

+
How to upgrade

Install Node.js 18.0+ on your computer.

Eventually, configure your continuous integration, CDN or host to use this new Node.js version.

You can also update your site package.json to prevent usage of an older unsupported version:

package.json
 {
"engines": {
- "node": ">=16.14"
+ "node": ">=18.0"
}
}

Upgrade your Docusaurus v2 site to Node.js 18 before upgrading to Docusaurus v3.

+

React v18.0+

+

Docusaurus v3 now requires React >= 18.0.

+

React 18 comes with its own breaking changes that should be relatively easy to handle, depending on the amount of custom React code you created for your site. The official themes and plugins are compatible with React 18.

+
How to upgrade

Read the official React v18.0 and How to Upgrade to React 18, and look at your own React code to figure out which components might be affected this upgrade.

We recommend to particularly look for:

    +
  • Automatic batching for stateful components
  • +
  • New React hydration errors reported to the console
  • +
+
Experimental support for React 18 features

React 18 comes with new features:

    +
  • <Suspense>
  • +
  • React.lazy()
  • +
  • startTransition
  • +

Their Docusaurus support is considered as experimental. We might have to adjust the integration in the future, leading to a different runtime behavior.

+

Prism-React-Renderer v2.0+

+

Docusaurus v3 upgrades prism-react-renderer to v2.0+. This library is used for code block syntax highlighting.

+
How to upgrade

This is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. The prism-react-renderer v2 release notes are not super exhaustive, but there are 3 major changes to be aware of for Docusaurus users.

The dependency should be upgraded:

package.json
 {
"dependencies": {
- "prism-react-renderer": "^1.3.5",
+ "prism-react-renderer": "^2.1.0",
}

The API to import themes in your Docusaurus config file has been updated:

docusaurus.config.js
- const lightTheme = require('prism-react-renderer/themes/github');
- const darkTheme = require('prism-react-renderer/themes/dracula');
+ const {themes} = require('prism-react-renderer');
+ const lightTheme = themes.github;
+ const darkTheme = themes.dracula;

Previously, react-prism-render v1 included more languages by default. From v2.0+, less languages are included by default. You may need to add extra languages to your Docusaurus config:

docusaurus.config.js
const siteConfig = {
themeConfig: {
prism: {
additionalLanguages: ['bash', 'diff', 'json'],
},
},
};
+

React-Live v4.0+

+

For users of the @docusaurus/theme-live-codeblock package, Docusaurus v3 upgrades react-live to v4.0+.

+
How to upgrade

In theory, you have nothing to do, and your existing interactive code blocks should keep working as before.

However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the v3 and v4 changelogs in case of problems.

+

remark-emoji v4.0+

+

Docusaurus v3 upgrades remark-emoji to v4.0+. This library is to support :emoji: shortcuts in Markdown.

+
How to upgrade

Most Docusaurus users have nothing to do. Users of emoji shortcodes should read the changelog and double-check their emojis keep rendering as expected.

+

Breaking Change Update node-emoji from v1 to v2. This change introduces support for many new emojis and removes old emoji short codes which are no longer valid on GitHub.

+
+

Mermaid v10.4+

+

For users of the @docusaurus/theme-mermaid package, Docusaurus v3 upgrades mermaid to v10.4+.

+
How to upgrade

In theory, you have nothing to do, and your existing diagrams should keep working as before.

However, this is a new major library version containing breaking changes, and we can't guarantee a strict retro-compatibility. Read the v10 changelog in case of problem.

+

TypeScript v5.0+

+

Docusaurus v3 now requires TypeScript >= 5.0.

+
How to upgrade

Upgrade your dependencies to use TypeScript 5+

package.json
 {
"devDependencies": {
- "typescript": "~4.7.4"
+ "typescript": "~5.2.2"
}
}
+

TypeScript base config

+

The official Docusaurus TypeScript config has been re-internalized from the external package @tsconfig/docusaurus to our new monorepo package @docusaurus/tsconfig.

+

This new package is versioned alongside all the other Docusaurus core packages, and will be used to ensure TypeScript retro-compatibility and breaking changes on major version upgrades.

+
How to upgrade

Swap the external TypeScript config package for the new official one

package.json
 {
"devDependencies": {
- "@tsconfig/docusaurus": "^1.0.7",
+ "@docusaurus/tsconfig": "3.0.0",
}
}

Use it in your tsconfig.json file:

tsconfig.json
 {
- "extends": "@tsconfig/docusaurus/tsconfig.json",
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

New Config Loader

+

Docusaurus v3 changes its internal config loading library from import-fresh to jiti. It is responsible for loading files such as docusaurus.config.js or sidebars.js, and Docusaurus plugins.

+
How to upgrade

In theory, you have nothing to do, and your existing config files should keep working as before.

However, this is a major dependency swap and subtle behavior changes could occur.

+

Admonition Warning

+

For historical reasons, we support an undocumented admonition :::warning that renders with a red color.

+
Warning

This is a Docusaurus v2 :::warning admonition.

+

However, the color and icon have always been wrong. Docusaurus v3 re-introduces :::warning admonition officially, documents it, and fix the color and icon.

+
warning

This is a Docusaurus v3 :::warning admonition.

+
How to upgrade

If you previously used the undocumented :::warning admonition, make sure to verify for each usage if yellow is now an appropriate color. If you want to keep the red color, use :::danger instead.

Docusaurus v3 also deprecated the :::caution admonition. Please refactor :::caution (yellow) to either :::warning (yellow) or :::danger (red).

If you want to keep the title “caution”, you might want to refactor it to :::warning[caution] (yellow).

+

Versioned Sidebars

+

This breaking change will only affect Docusaurus v2 early adopters who versioned their docs before v2.0.0-beta.10 (December 2021).

+

When creating version v1.0.0, the sidebar file contained a prefix version-v1.0.0/ that Docusaurus v3 does not support anymore.

+
versioned_sidebars/version-v1.0.0-sidebars.json
{
"version-v1.0.0/docs": [
"version-v1.0.0/introduction",
"version-v1.0.0/prerequisites"
]
}
+
How to upgrade

Remove the useless versioned prefix from your versioned sidebars.

versioned_sidebars/version-v1.0.0-sidebars.json
{
"docs": ["introduction", "prerequisites"]
}
+

Blog Feed Limit

+

The @docusaurus/plugin-content-blog now limits the RSS feed to the last 20 entries by default. For large Docusaurus blogs, this is a more sensible default value to avoid an increasingly large RSS file.

+
How to upgrade

In case you don't like this new default behavior, you can revert to the former "unlimited feed" behavior with the new limit: false feed option:

docusaurus.config.js
const blogOptions = {
feedOptions: {
limit: false,
},
};
+

Docs Theme Refactoring

+

For users that swizzled docs-related theme components (like @theme/DocPage), these components have been significantly refactor to make it easier to customize.

+

Technically, this is not a breaking change because these components are flagged as unsafe to swizzle, however many Docusaurus sites ejected docs-related components, and will be interested to know their customizations might break Docusaurus.

+
How to upgrade

Delete all your swizzled components, re-swizzle them, and re-apply your customizations on top of the newly updated components.

Alternatively, you can look at the pull-request notes to understand the new theme component tree structure, and eventually try to patch your swizzled components manually.

+

Optional Changes

+

Some changes are not mandatory, but remain useful to be aware of to plainly leverage Docusaurus v3.

+

Automatic JSX runtime

+

Docusaurus v3 now uses the React 18 "automatic" JSX runtime.

+

It is not needed anymore to import React in JSX files that do not use any React API.

+
src/components/MyComponent.js
- import React from 'react';

export default function MyComponent() {
return <div>Hello</div>;
}
+

ESM and TypeScript Configs

+

Docusaurus v3 supports ESM and TypeScript config files, and it might be a good idea to adopt those new options.

+
docusaurus.config.js
export default {
title: 'Docusaurus',
url: 'https://docusaurus.io',
// your site config ...
};
+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
presets: [
[
'classic',
{
/* Your preset config here */
} satisfies Preset.Options,
],
],

themeConfig: {
/* Your theme config here */
} satisfies Preset.ThemeConfig,
};

export default config;
+

Using the .mdx extension

+

We recommend using the .mdx extension whenever you use JSX, import, or export (i.e. MDX features) inside a Markdown file. It is semantically more correct and improves compatibility with external tools (IDEs, formatters, linters, etc.).

+

In future versions of Docusaurus, .md files will be parsed as standard CommonMark, which does not support these features. In Docusaurus v3, .md files keep being compiled as MDX files, but it will be possible to opt-in for CommonMark.

+

Upgrading math packages

+

If you use Docusaurus to render Math Equations, you should upgrade the MDX plugins.

+

Make sure to use remark-math 6 and rehype-katex 7 for Docusaurus v3 (using MDX v3). We can't guarantee other versions will work.

+
{
- "remark-math": "^3.0.0",
+ "remark-math": "^6.0.0",
- "rehype-katex": "^5.0.0"
+ "rehype-katex": "^7.0.0"
}
+

Turn off MDX v1 compat

+

Docusaurus v3 comes with MDX v1 compatibility options, that are turned on by default.

+
docusaurus.config.js
export default {
markdown: {
mdx1Compat: {
comments: true,
admonitions: true,
headingIds: true,
},
},
};
+

comments option

+

This option allows the usage of HTML comments inside MDX, while HTML comments are officially not supported anymore.

+

For MDX files, we recommend to progressively use MDX {/* comments */} instead of HTML <!-- comments -->, and then turn this compatibility option off.

+
Blog truncate marker

The default blog truncate marker now supports both <!-- truncate --> and {/* truncate */}.

+

admonitions option

+

This option allows the usage of the Docusaurus v2 admonition title syntax:

+
:::note Your Title

content

:::
+

Docusaurus now implements admonitions with Markdown Directives (implemented with remark-directive), and the syntax to provide a directive label requires square brackets:

+
:::note[Your Title]

content

:::
+

We recommend to progressively use the new Markdown directive label syntax, and then turn this compatibility option off.

+

headingIds option

+

This option allows the usage of the Docusaurus v2 explicit heading id syntax:

+
### Hello World {#my-explicit-id}
+

This syntax is now invalid MDX, and would require to escape the { character: \{#my-explicit-id}.

+

We recommend to keep this compatibility option on for now, until we provide a new syntax compatible with newer versions of MDX.

+

Troubleshooting

+

In case of any upgrade problem, the first things to try are:

+
    +
  • make sure all your docs compile in the MDX playground, or using npx docusaurus-mdx-checker
  • +
  • delete node_modules and package-lock.json, and then run npm install again
  • +
  • run docusaurus clear to clear the caches
  • +
  • remove third-party plugins that might not support Docusaurus v3
  • +
  • delete all your swizzled components
  • +
+

Once you have tried that, you can ask for support through the following support channels:

+ +

Please consider our time is precious. To ensure that your support request is not ignored, we kindly ask you to:

+
    +
  • provide a minimal reproduction that we can easily run, ideally created with docusaurus.new
  • +
  • provide a live deployment url showing the problem in action (if your site can build)
  • +
  • explain clearly the problem, much more than an ambiguous "it doesn't work"
  • +
  • include as much relevant material as possible: code snippets, repo url, git branch urls, full stack traces, screenshots and videos
  • +
  • present your request clearly, concisely, showing us that you have made an effort to help us help you
  • +
+

Alternatively, you can look for a paid Docusaurus Service Provider to execute this upgrade for you. If your site is open source, you can also ask our community for free, benevolent help.

+ + \ No newline at end of file diff --git a/docs/migration/v3.html.html b/docs/migration/v3.html.html new file mode 100644 index 0000000000..bef4eeba71 --- /dev/null +++ b/docs/migration/v3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/next/resources/index.html b/docs/next/resources/index.html new file mode 100644 index 0000000000..3308de34cf --- /dev/null +++ b/docs/next/resources/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/next/support/index.html b/docs/next/support/index.html new file mode 100644 index 0000000000..ae87810010 --- /dev/null +++ b/docs/next/support/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/next/team/index.html b/docs/next/team/index.html new file mode 100644 index 0000000000..6e9a877421 --- /dev/null +++ b/docs/next/team/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/playground.html b/docs/playground.html new file mode 100644 index 0000000000..f00863da16 --- /dev/null +++ b/docs/playground.html @@ -0,0 +1,69 @@ + + + + + +Playground | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Playground

+

Playgrounds allow you to run Docusaurus in your browser, without installing anything!

+

They are mostly useful for:

+
    +
  • Testing Docusaurus
  • +
  • Reporting bugs
  • +
+

Use docusaurus.new as an easy-to-remember shortcut.

+

Choose one of the available options below.

+ +

📦 CodeSandbox

CodeSandbox is an online code editor and development environment that allows developers to create, share and collaborate on web development projects in a browser-based environment

⚡ StackBlitz 🆕

StackBlitz uses a novel WebContainers technology to run Docusaurus directly in your browser.

+
tip

For convenience, we'll remember your choice next time you visit docusaurus.new.

+ + \ No newline at end of file diff --git a/docs/playground.html.html b/docs/playground.html.html new file mode 100644 index 0000000000..1e4b069339 --- /dev/null +++ b/docs/playground.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/resources/index.html b/docs/resources/index.html new file mode 100644 index 0000000000..3308de34cf --- /dev/null +++ b/docs/resources/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 0000000000..77bc6f3e10 --- /dev/null +++ b/docs/search.html @@ -0,0 +1,152 @@ + + + + + +Search | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Search

+

There are a few options you can use to add search to your website:

+ +
info

🥇 Docusaurus provides first-class support for Algolia DocSearch.

👥 Other options are maintained by the community: please report bugs to their respective repositories.

+

🥇 Using Algolia DocSearch

+

Docusaurus has official support for Algolia DocSearch.

+

The service is free for any developer documentation or technical blog: just make sure to read the checklist and apply to the DocSearch program.

+

DocSearch crawls your website once a week (the schedule is configurable from the web interface) and aggregates all the content in an Algolia index. This content is then queried directly from your front-end using the Algolia API.

+

If your website is not eligible for the free, hosted version of DocSearch, or if your website sits behind a firewall and is not public, then you can run your own DocSearch crawler.

+
note

By default, the Docusaurus preset generates a sitemap.xml that the Algolia crawler can use.

+
From the old docsearch?

You can read more about migration from the legacy DocSearch infra in our blog post or the DocSearch migration docs.

+

Index Configuration

+

After your application has been approved and deployed, you will receive an email with all the details for you to add DocSearch to your project. Editing and managing your crawls can be done via the web interface. Indices are readily available after deployment, so manual configuration usually isn't necessary.

+
Use the recommended crawler config

It is highly recommended to use our official Docusaurus v3 crawler configuration. We cannot support you if you choose a different crawler configuration.

+
When updating your crawler config

The crawler configuration contains a initialIndexSettings, which will only be used to initialize your Algolia index if it does not exist yet.

If you update your initialIndexSettings crawler setting, it is possible to update the index manually through the interface, but the Algolia team recommends to delete your index and then restart a crawl to fully reinitialize it with the new settings.

+

Connecting Algolia

+

Docusaurus' own @docusaurus/preset-classic supports Algolia DocSearch integration. If you use the classic preset, no additional installation is needed.

+
Installation steps when not using @docusaurus/preset-classic
    +
  1. Install the package:
  2. +
npm install --save @docusaurus/theme-search-algolia
    +
  1. Register the theme in docusaurus.config.js:
  2. +
docusaurus.config.js
export default {
title: 'My site',
// ...
themes: ['@docusaurus/theme-search-algolia'],
themeConfig: {
// ...
},
};
+

Then, add an algolia field in your themeConfig. Apply for DocSearch to get your Algolia index and API key.

+
docusaurus.config.js
export default {
// ...
themeConfig: {
// ...
algolia: {
// The application ID provided by Algolia
appId: 'YOUR_APP_ID',

// Public API key: it is safe to commit it
apiKey: 'YOUR_SEARCH_API_KEY',

indexName: 'YOUR_INDEX_NAME',

// Optional: see doc section below
contextualSearch: true,

// Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
externalUrlRegex: 'external\\.com|domain\\.com',

// Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs
replaceSearchResultPathname: {
from: '/docs/', // or as RegExp: /\/docs\//
to: '/',
},

// Optional: Algolia search parameters
searchParameters: {},

// Optional: path for search page that enabled by default (`false` to disable it)
searchPagePath: 'search',

// Optional: whether the insights feature is enabled or not on Docsearch (`false` by default)
insights: false,

//... other Algolia params
},
},
};
+
info

The searchParameters option used to be named algoliaOptions in Docusaurus v1.

Refer to its official DocSearch documentation for possible values.

+
warning

The search feature will not work reliably until Algolia crawls your site.

If search doesn't work after any significant change, please use the Algolia dashboard to trigger a new crawl.

+ +

Contextual search is enabled by default.

+

It ensures that search results are relevant to the current language and version.

+
docusaurus.config.js
export default {
// ...
themeConfig: {
// ...
algolia: {
contextualSearch: true,
},
},
};
+

Let's consider you have 2 docs versions (v1 and v2) and 2 languages (en and fr).

+

When browsing v2 docs, it would be odd to return search results for the v1 documentation. Sometimes v1 and v2 docs are quite similar, and you would end up with duplicate search results for the same query (one result per version).

+

Similarly, when browsing the French site, it would be odd to return search results for the English docs.

+

To solve this problem, the contextual search feature understands that you are browsing a specific docs version and language, and will create the search query filters dynamically.

+
    +
  • on /en/docs/v1/myDoc, search results will only include English results for the v1 docs (+ other unversioned pages)
  • +
  • on /fr/docs/v2/myDoc, search results will only include French results for the v2 docs (+ other unversioned pages)
  • +
+
info

When using contextualSearch: true (default), the contextual facet filters will be merged with the ones provided with algolia.searchParameters.facetFilters .

For specific needs, you can disable contextualSearch and define your own facetFilters:

docusaurus.config.js
export default {
// ...
themeConfig: {
// ...
algolia: {
contextualSearch: false,
searchParameters: {
facetFilters: ['language:en', ['filter1', 'filter2'], 'filter3'],
},
},
},
};

Refer to the relevant Algolia faceting documentation.

+
Contextual search doesn't work?

If you only get search results when Contextual Search is disabled, this is very likely because of an index configuration issue.

+ +

By default, DocSearch comes with a fine-tuned theme that was designed for accessibility, making sure that colors and contrasts respect standards.

+

Still, you can reuse the Infima CSS variables from Docusaurus to style DocSearch by editing the /src/css/custom.css file.

+
/src/css/custom.css
[data-theme='light'] .DocSearch {
/* --docsearch-primary-color: var(--ifm-color-primary); */
/* --docsearch-text-color: var(--ifm-font-color-base); */
--docsearch-muted-color: var(--ifm-color-secondary-darkest);
--docsearch-container-background: rgba(94, 100, 112, 0.7);
/* Modal */
--docsearch-modal-background: var(--ifm-color-secondary-lighter);
/* Search box */
--docsearch-searchbox-background: var(--ifm-color-secondary);
--docsearch-searchbox-focus-background: var(--ifm-color-white);
/* Hit */
--docsearch-hit-color: var(--ifm-font-color-base);
--docsearch-hit-active-color: var(--ifm-color-white);
--docsearch-hit-background: var(--ifm-color-white);
/* Footer */
--docsearch-footer-background: var(--ifm-color-white);
}

[data-theme='dark'] .DocSearch {
--docsearch-text-color: var(--ifm-font-color-base);
--docsearch-muted-color: var(--ifm-color-secondary-darkest);
--docsearch-container-background: rgba(47, 55, 69, 0.7);
/* Modal */
--docsearch-modal-background: var(--ifm-background-color);
/* Search box */
--docsearch-searchbox-background: var(--ifm-background-color);
--docsearch-searchbox-focus-background: var(--ifm-color-black);
/* Hit */
--docsearch-hit-color: var(--ifm-font-color-base);
--docsearch-hit-active-color: var(--ifm-color-white);
--docsearch-hit-background: var(--ifm-color-emphasis-100);
/* Footer */
--docsearch-footer-background: var(--ifm-background-surface-color);
--docsearch-key-gradient: linear-gradient(
-26.5deg,
var(--ifm-color-emphasis-200) 0%,
var(--ifm-color-emphasis-100) 100%
);
}
+

Customizing the Algolia search behavior

+ +

Algolia DocSearch supports a list of options that you can pass to the algolia field in the docusaurus.config.js file.

+
docusaurus.config.js
export default {
themeConfig: {
// ...
algolia: {
apiKey: 'YOUR_API_KEY',
indexName: 'YOUR_INDEX_NAME',
// Options...
},
},
};
+

Editing the Algolia search component

+

If you prefer to edit the Algolia search React component, swizzle the SearchBar component in @docusaurus/theme-search-algolia:

+
npm run swizzle @docusaurus/theme-search-algolia SearchBar
+

Troubleshooting

+

Here are the most common issues Docusaurus users face when using Algolia DocSearch.

+

No Search Results

+

Seeing no search results is usually related to an index configuration problem.

+
How to check if I have an config problem?

Docusaurus uses Algolia faceting for its Contextual Search feature, to create dynamic queries such as:

[
"language:en",
[
"docusaurus_tag:default",
"docusaurus_tag:docs-default-3.2.1",
"docusaurus_tag:docs-community-current",
"docusaurus_tag:docs-docs-tests-current"
]
]

On the Algolia UI, your index should allow to create facet queries on fields docusaurus_tag, language, lang, version, type, as shown in the screenshot below:

Algolia index showing appropriate faceting fields

Alternatively, if you disable Contextual Search with {contextualSearch: false} (which we don't particularly recommend), Docusaurus will not use facet queries, and you should start seeing results.

+
Use the recommended configuration

We recommend a specific crawler configuration for a good reason. We cannot support you if you choose to use a different configuration.

+

You can fix index configuration problems by following those steps:

+
    +
  1. Use the recommend crawler configuration
  2. +
  3. Delete your index through the UI
  4. +
  5. Trigger a new crawl through the UI
  6. +
  7. Check your index is recreated with the appropriate faceting fields: docusaurus_tag, language, lang, version, type
  8. +
  9. See that you now get search results, even with Contextual Search enabled
  10. +
+

Support

+

The Algolia DocSearch team can help you figure out search problems on your site.

+

You can reach out to Algolia via their support page or on Discord.

+

Docusaurus also has an #algolia channel on Discord.

+

👥 Using Typesense DocSearch

+

Typesense DocSearch works similar to Algolia DocSearch, except that your website is indexed into a Typesense search cluster.

+

Typesense is an open source instant-search engine that you can either:

+ +

Similar to Algolia DocSearch, there are two components:

+ +

Read a step-by-step walk-through of how to run typesense-docsearch-scraper here and how to install the Search Bar in your Docusaurus Site here.

+ +

You can use a local search plugin for websites where the search index is small and can be downloaded to your users' browsers when they visit your website.

+

You'll find a list of community-supported local search plugins listed here.

+ +

To use your own search, swizzle the SearchBar component in @docusaurus/theme-classic

+
npm run swizzle @docusaurus/theme-classic SearchBar
+

This will create an src/theme/SearchBar file in your project folder. Restart your dev server and edit the component, you will see that Docusaurus uses your own SearchBar component now.

+

Notes: You can alternatively swizzle from Algolia SearchBar and create your own search component from there.

+ + \ No newline at end of file diff --git a/docs/search.html.html b/docs/search.html.html new file mode 100644 index 0000000000..a9e9b58b99 --- /dev/null +++ b/docs/search.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/seo.html b/docs/seo.html new file mode 100644 index 0000000000..bbf3b236b1 --- /dev/null +++ b/docs/seo.html @@ -0,0 +1,102 @@ + + + + + +Search engine optimization (SEO) | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Search engine optimization (SEO)

+ +

Docusaurus supports search engine optimization in a variety of ways.

+

Global metadata

+

Provide global meta attributes for the entire site through the site configuration. The metadata will all be rendered in the HTML <head> using the key-value pairs as the prop name and value. The metadata attribute is a convenient shortcut to declare <meta> tags, but it is also possible to inject arbitrary tags in <head> with the headTags attribute.

+
docusaurus.config.js
export default {
themeConfig: {
// Declare some <meta> tags
metadata: [
{name: 'keywords', content: 'cooking, blog'},
{name: 'twitter:card', content: 'summary_large_image'},
],
},
headTags: [
// Declare a <link> preconnect tag
{
tagName: 'link',
attributes: {
rel: 'preconnect',
href: 'https://example.com',
},
},
// Declare some json-ld structured data
{
tagName: 'script',
attributes: {
type: 'application/ld+json',
},
innerHTML: JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta Open Source',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
}),
},
],
};
+

Docusaurus adds some metadata out-of-the-box. For example, if you have configured i18n, you will get a hreflang alternate link.

+

To read more about types of meta tags, visit the MDN docs.

+

Single page metadata

+

Similar to global metadata, Docusaurus also allows for the addition of meta-information to individual pages. Follow this guide for configuring the <head> tag. In short:

+
my-markdown-page.mdx
# A cooking guide

<head>
<meta name="keywords" content="cooking, blog" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="preconnect" href="https://example.com" />
<script type="application/ld+json">
{JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta Open Source',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
})}
</script>
</head>

Some content...
+

Docusaurus automatically adds description, title, canonical URL links, and other useful metadata to each Markdown page. They are configurable through front matter:

+
---
title: Title for search engines; can be different from the actual heading
description: A short description of this page
image: a thumbnail image to be shown in social media cards
keywords: [keywords, describing, the main topics]
---
+

When creating your React page, adding these fields in Layout would also improve SEO.

+
tip

Prefer to use front matter for fields like description and keywords: Docusaurus will automatically apply this to both description and og:description, while you would have to manually declare two metadata tags when using the <head> tag.

+
info

The official plugins all support the following front matter: title, description, keywords and image. Refer to their respective API documentation for additional front matter support:

+

For JSX pages, you can use the Docusaurus <Head> component.

+
my-react-page.jsx
import React from 'react';
import Layout from '@theme/Layout';
import Head from '@docusaurus/Head';

export default function page() {
return (
<Layout title="Page" description="A React page demo">
<Head>
<meta property="og:image" content="image.png" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="preconnect" href="https://example.com" />
<script type="application/ld+json">
{JSON.stringify({
'@context': 'https://schema.org/',
'@type': 'Organization',
name: 'Meta Open Source',
url: 'https://opensource.fb.com/',
logo: 'https://opensource.fb.com/img/logos/Meta-Open-Source.svg',
})}
</script>
</Head>
{/* ... */}
</Layout>
);
}
+
tip

For convenience, the default theme <Layout> component accept title and description as props.

+

Static HTML generation

+

Docusaurus is a static site generator—HTML files are statically generated for every URL route, which helps search engines discover your content more easily.

+

Image meta description

+

The alt tag for an image tells the search engine what the image is about, and is used when the image can't be visually seen, e.g. when using a screen reader, or when the image is broken. Alt tags are commonly supported in Markdown.

+

You may also add a title for your image—this doesn't impact SEO much but is displayed as a tooltip when hovering above the image, usually used to provide hints.

+
![Docusaurus banner](./assets/docusaurus-asset-example-banner.png 'Image title')
+
http://localhost:3000

Docusaurus banner

+

Rich search information

+

Docusaurus blogs support rich search results out-of-the-box to get maximum search engine experience. The information is created depending on your meta information in blog/global configuration. In order to get the benefits of the rich search information, fill in the information about the post's publish date, authors, and image, etc. Read more about the meta-information here.

+

Robots file

+

A robots.txt file regulates search engines' behavior about which should be displayed and which shouldn't. You can provide it as static asset. The following would allow access to all sub-pages from all requests:

+
static/robots.txt
User-agent: *
Disallow:
+

Read more about the robots file in the Google documentation.

+
warning

Important: the robots.txt file does not prevent HTML pages from being indexed.

To prevent your whole Docusaurus site from being indexed, use the noIndex site config. Some hosting providers may also let you configure a X-Robots-Tag: noindex HTTP header (GitHub Pages does not support this).

To prevent a single page from being indexed, use <meta name="robots" content="noindex"> as page metadata. Read more about the robots meta tag.

+

Sitemap file

+

Docusaurus provides the @docusaurus/plugin-sitemap plugin, which is shipped with preset-classic by default. It autogenerates a sitemap.xml file which will be available at https://example.com/[baseUrl]/sitemap.xml after the production build. This sitemap metadata helps search engine crawlers crawl your site more accurately.

+
tip

The sitemap plugin automatically filters pages containing a noindex robots meta directive.

For example, /examples/noIndex is not included in the Docusaurus sitemap.xml file because it contains the following page metadata:

<head>
<meta name="robots" content="noindex, nofollow" />
</head>
+ +

Docusaurus uses your file names as links, but you can always change that using slugs, see this tutorial for more details.

+

Structured content

+

Search engines rely on the HTML markup such as <h2>, <table>, etc., to understand the structure of your webpage. When Docusaurus renders your pages, semantic markup, e.g. <aside>, <nav>, <main>, are used to divide the different sections of the page, helping the search engine to locate parts like sidebar, navbar, and the main page content.

+

Most CommonMark syntaxes have their corresponding HTML tags. By using Markdown consistently in your project, you will make it easier for search engines to understand your page content.

+ + \ No newline at end of file diff --git a/docs/seo.html.html b/docs/seo.html.html new file mode 100644 index 0000000000..371faf9115 --- /dev/null +++ b/docs/seo.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/sidebar.html b/docs/sidebar.html new file mode 100644 index 0000000000..ca5fec568d --- /dev/null +++ b/docs/sidebar.html @@ -0,0 +1,103 @@ + + + + + +Sidebar | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Sidebar

+

Creating a sidebar is useful to:

+
    +
  • Group multiple related documents
  • +
  • Display a sidebar on each of those documents
  • +
  • Provide paginated navigation, with next/previous button
  • +
+

To use sidebars on your Docusaurus site:

+
    +
  1. Define a file that exports a dictionary of sidebar objects.
  2. +
  3. Pass this object into the @docusaurus/plugin-docs plugin directly or via @docusaurus/preset-classic.
  4. +
+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarPath: './sidebars.js',
},
},
],
],
};
+

This section serves as an overview of miscellaneous features of the doc sidebar. In the following sections, we will more systematically introduce the following concepts:

+ +
+

Default sidebar

+

If the sidebarPath is unspecified, Docusaurus automatically generates a sidebar for you, by using the filesystem structure of the docs folder:

+
sidebars.js
export default {
mySidebar: [
{
type: 'autogenerated',
dirName: '.', // generate sidebar from the docs folder (or versioned_docs/<version>)
},
],
};
+

You can also define your sidebars explicitly.

+ +

A sidebar at its crux is a hierarchy of categories, doc links, and other hyperlinks.

+
type Sidebar =
// Normal syntax
| SidebarItem[]
// Shorthand syntax
| {[categoryLabel: string]: SidebarItem[]};
+

For example:

+
sidebars.js
export default {
mySidebar: [
{
type: 'category',
label: 'Getting Started',
items: [
{
type: 'doc',
id: 'doc1',
},
],
},
{
type: 'category',
label: 'Docusaurus',
items: [
{
type: 'doc',
id: 'doc2',
},
{
type: 'doc',
id: 'doc3',
},
],
},
{
type: 'link',
label: 'Learn more',
href: 'https://example.com',
},
],
};
+

This is a sidebars file that exports one sidebar, called mySidebar. It has three top-level items: two categories and one external link. Within each category, there are a few doc links.

+

A sidebars file can contain multiple sidebar objects, identified by their object keys.

+
type SidebarsFile = {
[sidebarID: string]: Sidebar;
};
+

Theme configuration

+

Hideable sidebar

+

By enabling the themeConfig.docs.sidebar.hideable option, you can make the entire sidebar hideable, allowing users to better focus on the content. This is especially useful when content is consumed on medium-sized screens (e.g. tablets).

+
docusaurus.config.js
export default {
themeConfig: {
docs: {
sidebar: {
hideable: true,
},
},
},
};
+

Auto-collapse sidebar categories

+

The themeConfig.docs.sidebar.autoCollapseCategories option would collapse all sibling categories when expanding one category. This saves the user from having too many categories open and helps them focus on the selected section.

+
docusaurus.config.js
export default {
themeConfig: {
docs: {
sidebar: {
autoCollapseCategories: true,
},
},
},
};
+

Passing custom props

+

To pass in custom props to a sidebar item, add the optional customProps object to any of the items. This is useful to apply site customizations by swizzling React components rendering sidebar items.

+
{
type: 'doc',
id: 'doc1',
customProps: {
badges: ['new', 'green'],
featured: true,
},
};
+ +

By default, breadcrumbs are rendered at the top, using the "sidebar path" of the current page.

+

This behavior can be disabled with plugin options:

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
breadcrumbs: false,
},
},
],
],
};
+

Complex sidebars example

+

A real-world example from the Docusaurus site:

+ +
sidebars.js
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
docs: [
'introduction',
{
type: 'category',
label: 'Getting Started',
link: {
type: 'generated-index',
},
collapsed: false,
items: [
'installation',
'configuration',
'playground',
'typescript-support',
],
},
{
type: 'category',
label: 'Guides',
link: {
type: 'generated-index',
title: 'Docusaurus Guides',
description:
"Let's learn about the most important Docusaurus concepts!",
keywords: ['guides'],
image: '/img/docusaurus.png',
},
items: [
'guides/creating-pages',
{
type: 'category',
label: 'Docs',
link: {
type: 'doc',
id: 'guides/docs/introduction',
},
items: [
'guides/docs/create-doc',
{
type: 'category',
label: 'Sidebar',
link: {
type: 'doc',
id: 'guides/docs/sidebar/index',
},
items: [
'guides/docs/sidebar/items',
'guides/docs/sidebar/autogenerated',
'guides/docs/sidebar/multiple-sidebars',
],
},
'guides/docs/versioning',
'guides/docs/multi-instance',
],
},
'blog',
{
type: 'category',
label: 'Markdown Features',
link: {
type: 'doc',
id: 'guides/markdown-features/introduction',
},
items: [
'guides/markdown-features/react',
'guides/markdown-features/tabs',
'guides/markdown-features/code-blocks',
'guides/markdown-features/admonitions',
'guides/markdown-features/toc',
'guides/markdown-features/assets',
'guides/markdown-features/links',
'guides/markdown-features/plugins',
'guides/markdown-features/math-equations',
'guides/markdown-features/diagrams',
'guides/markdown-features/head-metadata',
],
},
'styling-layout',
'swizzling',
'static-assets',
'search',
'browser-support',
'seo',
'using-plugins',
'deployment',
{
type: 'category',
label: 'Internationalization',
link: {type: 'doc', id: 'i18n/introduction'},
items: [
{
type: 'doc',
id: 'i18n/tutorial',
label: 'Tutorial',
},
{
type: 'doc',
id: 'i18n/git',
label: 'Using Git',
},
{
type: 'doc',
id: 'i18n/crowdin',
label: 'Using Crowdin',
},
],
},
'guides/whats-next',
],
},
{
type: 'category',
label: 'Advanced Guides',
link: {type: 'doc', id: 'advanced/index'},
items: [
'advanced/architecture',
'advanced/plugins',
'advanced/routing',
'advanced/ssg',
'advanced/client',
],
},
{
type: 'category',
label: 'Upgrading',
link: {
type: 'doc',
id: 'migration/index',
},
items: [
'migration/v3',
{
type: 'category',
label: 'To Docusaurus v2',
items: [
'migration/v2/migration-overview',
'migration/v2/migration-automated',
'migration/v2/migration-manual',
'migration/v2/migration-versioned-sites',
'migration/v2/migration-translated-sites',
],
},
],
},
],
api: [
'cli',
'docusaurus-core',
{
type: 'autogenerated',
dirName: 'api',
},
],
};
export default sidebars;
+ + \ No newline at end of file diff --git a/docs/sidebar.html.html b/docs/sidebar.html.html new file mode 100644 index 0000000000..6287fbded3 --- /dev/null +++ b/docs/sidebar.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/sidebar/autogenerated.html b/docs/sidebar/autogenerated.html new file mode 100644 index 0000000000..de309ba830 --- /dev/null +++ b/docs/sidebar/autogenerated.html @@ -0,0 +1,102 @@ + + + + + +Autogenerated | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Autogenerated

+ +

Docusaurus can create a sidebar automatically from your filesystem structure: each folder creates a sidebar category, and each file creates a doc link.

+
type SidebarItemAutogenerated = {
type: 'autogenerated';
dirName: string; // Source folder to generate the sidebar slice from (relative to docs)
};
+

Docusaurus can generate a full sidebar from your docs folder:

+
sidebars.js
export default {
myAutogeneratedSidebar: [
{
type: 'autogenerated',
dirName: '.', // '.' means the current docs folder
},
],
};
+

An autogenerated item is converted by Docusaurus to a sidebar slice (also discussed in category shorthands): a list of items of type doc or category, so you can splice multiple autogenerated items from multiple directories, interleaving them with regular sidebar items, in one sidebar level.

+
A real-world example

Consider this file structure:

docs
├── api
│ ├── product1-api
│ │ └── api.md
│ └── product2-api
│ ├── basic-api.md
│ └── pro-api.md
├── intro.md
└── tutorials
├── advanced
│ ├── advanced1.md
│ ├── advanced2.md
│ └── read-more
│ ├── resource1.md
│ └── resource2.md
├── easy
│ ├── easy1.md
│ └── easy2.md
├── tutorial-end.md
├── tutorial-intro.md
└── tutorial-medium.md

And assume every doc's ID is just its file name. If you define an autogenerated sidebar like this:

sidebars.js
export default {
mySidebar: [
'intro',
{
type: 'category',
label: 'Tutorials',
items: [
'tutorial-intro',
{
type: 'autogenerated',
dirName: 'tutorials/easy', // Generate sidebar slice from docs/tutorials/easy
},
'tutorial-medium',
{
type: 'autogenerated',
dirName: 'tutorials/advanced', // Generate sidebar slice from docs/tutorials/advanced
},
'tutorial-end',
],
},
{
type: 'autogenerated',
dirName: 'api', // Generate sidebar slice from docs/api
},
{
type: 'category',
label: 'Community',
items: ['team', 'chat'],
},
],
};

It would be resolved as:

sidebars.js
export default {
mySidebar: [
'intro',
{
type: 'category',
label: 'Tutorials',
items: [
'tutorial-intro',
// Two files in docs/tutorials/easy
'easy1',
'easy2',
'tutorial-medium',
// Two files and a folder in docs/tutorials/advanced
'advanced1',
'advanced2',
{
type: 'category',
label: 'read-more',
items: ['resource1', 'resource2'],
},
'tutorial-end',
],
},
// Two folders in docs/api
{
type: 'category',
label: 'product1-api',
items: ['api'],
},
{
type: 'category',
label: 'product2-api',
items: ['basic-api', 'pro-api'],
},
{
type: 'category',
label: 'Community',
items: ['team', 'chat'],
},
],
};

Note how the autogenerate source directories themselves don't become categories: only the items they contain do. This is what we mean by "sidebar slice".

+

Category index convention

+

Docusaurus can automatically link a category to its index document.

+

A category index document is a document following one of those filename conventions:

+
    +
  • Named as index (case-insensitive): docs/Guides/index.md
  • +
  • Named as README (case-insensitive): docs/Guides/README.mdx
  • +
  • Same name as parent folder: docs/Guides/Guides.md
  • +
+

This is equivalent to using a category with a doc link:

+
sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
link: {type: 'doc', id: 'Guides/index'},
items: [],
},
],
};
+
tip

Naming your introductory document README.md makes it show up when browsing the folder using the GitHub interface, while using index.md makes the behavior more in line with how HTML files are served.

+
tip

If a folder only has one index page, it will be turned into a link instead of a category. This is useful for asset collocation:

some-doc
├── index.md
├── img1.png
└── img2.png
+
Customizing category index matching

It is possible to opt out any of the category index conventions, or define even more conventions. You can inject your own isCategoryIndex matcher through the sidebarItemsGenerator callback. For example, you can also pick intro as another file name eligible for automatically becoming the category index.

docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex(doc) {
return (
// Also pick intro.md in addition to the default ones
doc.fileName.toLowerCase() === 'intro' ||
defaultCategoryIndexMatcher(doc)
);
},
});
},
},
],
],
};

Or choose to not have any category index convention.

docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // The default matcher implementation, given below
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex() {
// No doc will be automatically picked as category index
return false;
},
});
},
},
],
],
};

The isCategoryIndex matcher will be provided with three fields:

    +
  • fileName, the file's name without extension and with casing preserved
  • +
  • directories, the list of directory names from the lowest level to the highest level, relative to the docs root directory
  • +
  • extension, the file's extension, with a leading dot.
  • +

For example, for a doc file at guides/sidebar/autogenerated.md, the props the matcher receives are

const props = {
fileName: 'autogenerated',
directories: ['sidebar', 'guides'],
extension: '.md',
};

The default implementation is:

function isCategoryIndex({fileName, directories}) {
const eligibleDocIndexNames = [
'index',
'readme',
directories[0].toLowerCase(),
];
return eligibleDocIndexNames.includes(fileName.toLowerCase());
}
+

Autogenerated sidebar metadata

+

For handwritten sidebar definitions, you would provide metadata to sidebar items through sidebars.js; for autogenerated, Docusaurus would read them from the item's respective file. In addition, you may want to adjust the relative position of each item because, by default, items within a sidebar slice will be generated in alphabetical order (using file and folder names).

+

Doc item metadata

+

The label, className, and customProps attributes are declared in front matter as sidebar_label, sidebar_class_name, and sidebar_custom_props, respectively. Position can be specified in the same way, via sidebar_position front matter.

+
docs/tutorials/tutorial-easy.md
---
sidebar_position: 2
sidebar_label: Easy
sidebar_class_name: green
---

# Easy Tutorial

This is the easy tutorial!
+

Category item metadata

+

Add a _category_.json or _category_.yml file in the respective folder. You can specify any category metadata and also the position metadata. label, className, position, and customProps will default to the respective values of the category's linked doc, if there is one.

+
docs/tutorials/_category_.json
{
"position": 2.5,
"label": "Tutorial",
"collapsible": true,
"collapsed": false,
"className": "red",
"link": {
"type": "generated-index",
"title": "Tutorial overview"
},
"customProps": {
"description": "This description can be used in the swizzled DocCard"
}
}
+
info

If the link is explicitly specified, Docusaurus will not apply any default conventions.

The doc links can be specified relatively, e.g. if the category is generated with the guides directory, "link": {"type": "doc", "id": "intro"} will be resolved to the ID guides/intro, only falling back to intro if a doc with the former ID doesn't exist.

You can also use link: null to opt out of default conventions and not generate any category index page.

+
info

The position metadata is only used within a sidebar slice: Docusaurus does not re-order other items of your sidebar.

+

Using number prefixes

+

A simple way to order an autogenerated sidebar is to prefix docs and folders by number prefixes, which also makes them appear in the file system in the same order when sorted by file name:

+
docs
├── 01-Intro.md
├── 02-Tutorial Easy
│ ├── 01-First Part.md
│ ├── 02-Second Part.md
│ └── 03-End.md
├── 03-Tutorial Advanced
│ ├── 01-First Part.md
│ ├── 02-Second Part.md
│ ├── 03-Third Part.md
│ └── 04-End.md
└── 04-End.md
+

To make it easier to adopt, Docusaurus supports multiple number prefix patterns.

+

By default, Docusaurus will remove the number prefix from the doc id, title, label, and URL paths.

+
warning

Prefer using additional metadata.

Updating a number prefix can be annoying, as it can require updating multiple existing Markdown links:

docs/02-Tutorial Easy/01-First Part.md
- Check the [Tutorial End](../04-End.mdx);
+ Check the [Tutorial End](../05-End.mdx);
+

Customize the sidebar items generator

+

You can provide a custom sidebarItemsGenerator function in the docs plugin (or preset) config:

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
defaultSidebarItemsGenerator,
numberPrefixParser,
item,
version,
docs,
categoriesMetadata,
isCategoryIndex,
}) {
// Example: return an hardcoded list of static sidebar items
return [
{type: 'doc', id: 'doc1'},
{type: 'doc', id: 'doc2'},
];
},
},
],
],
};
+
tip

Re-use and enhance the default generator instead of writing a generator from scratch: the default generator we provide is 250 lines long.

Add, update, filter, re-order the sidebar items according to your use case:

docusaurus.config.js
// Reverse the sidebar items ordering (including nested category items)
function reverseSidebarItems(items) {
// Reverse items in categories
const result = items.map((item) => {
if (item.type === 'category') {
return {...item, items: reverseSidebarItems(item.items)};
}
return item;
});
// Reverse items at current level
result.reverse();
return result;
}

export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) {
const sidebarItems = await defaultSidebarItemsGenerator(args);
return reverseSidebarItems(sidebarItems);
},
},
],
],
};
+ + \ No newline at end of file diff --git a/docs/sidebar/autogenerated.html.html b/docs/sidebar/autogenerated.html.html new file mode 100644 index 0000000000..468d767847 --- /dev/null +++ b/docs/sidebar/autogenerated.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/sidebar/items.html b/docs/sidebar/items.html new file mode 100644 index 0000000000..e9050dcce7 --- /dev/null +++ b/docs/sidebar/items.html @@ -0,0 +1,139 @@ + + + + + +Sidebar items | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Sidebar items

+ +

We have introduced three types of item types in the example in the previous section: doc, category, and link, whose usages are fairly intuitive. We will formally introduce their APIs. There's also a fourth type: autogenerated, which we will explain in detail later.

+
    +
  • Doc: link to a doc page, associating it with the sidebar
  • +
  • Link: link to any internal or external page
  • +
  • Category: creates a dropdown of sidebar items
  • +
  • Autogenerated: generate a sidebar slice automatically
  • +
  • HTML: renders pure HTML in the item's position
  • +
  • *Ref: link to a doc page, without making the item take part in navigation generation
  • +
+ +

Use the doc type to link to a doc page and assign that doc to a sidebar:

+
type SidebarItemDoc =
// Normal syntax
| {
type: 'doc';
id: string;
label: string; // Sidebar label text
className?: string; // Class name for sidebar label
customProps?: Record<string, unknown>; // Custom props
}

// Shorthand syntax
| string; // docId shortcut
+

Example:

+
sidebars.js
export default {
mySidebar: [
// Normal syntax:
{
type: 'doc',
id: 'doc1', // document ID
label: 'Getting started', // sidebar label
},

// Shorthand syntax:
'doc2', // document ID
],
};
+

If you use the doc shorthand or autogenerated sidebar, you would lose the ability to customize the sidebar label through item definition. You can, however, use the sidebar_label Markdown front matter within that doc, which has higher precedence over the label key in the sidebar item. Similarly, you can use sidebar_custom_props to declare custom metadata for a doc page.

+
note

A doc item sets an implicit sidebar association. Don't assign the same doc to multiple sidebars: change the type to ref instead.

+
tip

Sidebar custom props is a useful way to propagate arbitrary doc metadata to the client side, so you can get additional information when using any doc-related hook that fetches a doc object.

+ +

Use the link type to link to any page (internal or external) that is not a doc.

+
type SidebarItemLink = {
type: 'link';
label: string;
href: string;
className?: string;
description?: string;
};
+

Example:

+
sidebars.js
export default {
myLinksSidebar: [
// External link
{
type: 'link',
label: 'Facebook', // The link label
href: 'https://facebook.com', // The external URL
},

// Internal link
{
type: 'link',
label: 'Home', // The link label
href: '/', // The internal path
},
],
};
+ +

Use the html type to render custom HTML within the item's <li> tag.

+

This can be useful for inserting custom items such as dividers, section titles, ads, and images.

+
type SidebarItemHtml = {
type: 'html';
value: string;
defaultStyle?: boolean; // Use default menu item styles
className?: string;
};
+

Example:

+
sidebars.js
export default {
myHtmlSidebar: [
{
type: 'html',
value: '<img src="sponsor.png" alt="Sponsor" />', // The HTML to be rendered
defaultStyle: true, // Use the default menu item styling
},
],
};
+
tip

The menu item is already wrapped in an <li> tag, so if your custom item is simple, such as a title, just supply a string as the value and use the className property to style it:

sidebars.js
export default {
myHtmlSidebar: [
{
type: 'html',
value: 'Core concepts',
className: 'sidebar-title',
},
],
};
+ +

Use the category type to create a hierarchy of sidebar items.

+
type SidebarItemCategory = {
type: 'category';
label: string; // Sidebar label text.
items: SidebarItem[]; // Array of sidebar items.
className?: string;
description?: string;

// Category options:
collapsible: boolean; // Set the category to be collapsible
collapsed: boolean; // Set the category to be initially collapsed or open by default
link: SidebarItemCategoryLinkDoc | SidebarItemCategoryLinkGeneratedIndex;
};
+

Example:

+
sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
collapsible: true,
collapsed: false,
items: [
'creating-pages',
{
type: 'category',
label: 'Docs',
items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],
},
],
},
],
};
+
tip

Use the shorthand syntax when you don't need customizations:

sidebars.js
export default {
docs: {
Guides: [
'creating-pages',
{
Docs: ['introduction', 'sidebar', 'markdown-features', 'versioning'],
},
],
},
};
+ +

With category links, clicking on a category can navigate you to another page.

+
tip

Use category links to introduce a category of documents.

Autogenerated categories can use the _category_.yml file to declare the link.

+

Generated index page

+

You can auto-generate an index page that displays all the direct children of this category. The slug allows you to customize the generated page's route, which defaults to /category/[categoryName].

+
sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
link: {
type: 'generated-index',
title: 'Docusaurus Guides',
description: 'Learn about the most important Docusaurus concepts!',
slug: '/category/docusaurus-guides',
keywords: ['guides'],
image: '/img/docusaurus.png',
},
items: ['pages', 'docs', 'blog', 'search'],
},
],
};
+

See it in action on the Docusaurus Guides page.

+
tip

Use generated-index links as a quick way to get an introductory document.

+ +

A category can link to an existing document.

+
sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
link: {type: 'doc', id: 'introduction'},
items: ['pages', 'docs', 'blog', 'search'],
},
],
};
+

See it in action on the i18n introduction page.

+

Embedding generated index in doc page

+

You can embed the generated cards list in a normal doc page as well with the DocCardList component. It will display all the sidebar items of the parent category of the current document.

+
docs/sidebar/index.md
import DocCardList from '@theme/DocCardList';

<DocCardList />
+ +

Collapsible categories

+

We support the option to expand/collapse categories. Categories are collapsible by default, but you can disable collapsing with collapsible: false.

+
sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
items: [
'creating-pages',
{
type: 'category',
collapsible: false,
label: 'Docs',
items: ['introduction', 'sidebar', 'markdown-features', 'versioning'],
},
],
},
],
};
+

To make all categories non-collapsible by default, set the sidebarCollapsible option in plugin-content-docs to false:

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarCollapsible: false,
},
},
],
],
};
+
note

The option in sidebars.js takes precedence over plugin configuration, so it is possible to make certain categories collapsible when sidebarCollapsible is set to false globally.

+

Expanded categories by default

+

Collapsible categories are collapsed by default. If you want them to be expanded on the first render, you can set collapsed to false:

+
sidebars.js
export default {
docs: {
Guides: [
'creating-pages',
{
type: 'category',
label: 'Docs',
collapsed: false,
items: ['markdown-features', 'sidebar', 'versioning'],
},
],
},
};
+

Similar to collapsible, you can also set the global configuration options.sidebarCollapsed to false. Individual collapsed options in sidebars.js will still take precedence over this configuration.

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarCollapsed: false,
},
},
],
],
};
+
warning

When a category has collapsed: true but collapsible: false (either through sidebars.js or through plugin configuration), the latter takes precedence and the category is still rendered as expanded.

+

Using shorthands

+

You can express typical sidebar items without much customization more concisely with shorthand syntaxes. There are two parts to this: doc shorthand and category shorthand.

+

Doc shorthand

+

An item with type doc can be simply a string representing its ID:

+
sidebars.js
export default {
sidebar: [
{
type: 'doc',
id: 'myDoc',
},
],
};
+

So it's possible to simplify the example above to:

+
sidebars.js
export default {
mySidebar: [
{
type: 'category',
label: 'Getting Started',
items: [
'doc1',
],
},
{
type: 'category',
label: 'Docusaurus',
items: [
'doc2',
'doc3',
],
},
{
type: 'link',
label: 'Learn more',
href: 'https://example.com',
},
],
};
+

Category shorthand

+

A category item can be represented by an object whose key is its label, and the value is an array of subitems.

+
sidebars.js
export default {
sidebar: [
{
type: 'category',
label: 'Getting started',
items: ['doc1', 'doc2'],
},
],
};
+

This permits us to simplify that example to:

+
sidebars.js
export default {
mySidebar: [
{
'Getting started': ['doc1'],
},
{
Docusaurus: ['doc2', 'doc3'],
},
{
type: 'link',
label: 'Learn more',
href: 'https://example.com',
},
],
};
+

Each shorthand object after this transformation will contain exactly one entry. Now consider the further simplified example below:

+
sidebars.js
export default {
mySidebar: [
{
'Getting started': ['doc1'],
Docusaurus: ['doc2', 'doc3'],
},
{
type: 'link',
label: 'Learn more',
href: 'https://example.com',
},
],
};
+

Note how the two consecutive category shorthands are compressed into one object with two entries. This syntax generates a sidebar slice: you shouldn't see that object as one bulk item—this object is unwrapped, with each entry becoming a separate item, and they spliced together with the rest of the items (in this case, the "Learn more" link) to form the final sidebar level. Sidebar slices are also important when discussing autogenerated sidebars.

+

Wherever you have an array of items that is reduced to one category shorthand, you can omit that enclosing array as well.

+
sidebars.js
export default {
sidebar: [
{
'Getting started': ['doc1'],
Docusaurus: [
{
'Basic guides': ['doc2', 'doc3'],
'Advanced guides': ['doc4', 'doc5'],
},
],
},
],
};
+ + \ No newline at end of file diff --git a/docs/sidebar/items.html.html b/docs/sidebar/items.html.html new file mode 100644 index 0000000000..abccc74aa6 --- /dev/null +++ b/docs/sidebar/items.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/sidebar/multiple-sidebars.html b/docs/sidebar/multiple-sidebars.html new file mode 100644 index 0000000000..26f2d5df1a --- /dev/null +++ b/docs/sidebar/multiple-sidebars.html @@ -0,0 +1,102 @@ + + + + + +Using multiple sidebars | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Using multiple sidebars

+

You can create a sidebar for each set of Markdown files that you want to group together.

+
tip

The Docusaurus site is a good example of using multiple sidebars:

+

Consider this example:

+
sidebars.js
export default {
tutorialSidebar: {
'Category A': ['doc1', 'doc2'],
},
apiSidebar: ['doc3', 'doc4'],
};
+

When browsing doc1 or doc2, the tutorialSidebar will be displayed; when browsing doc3 or doc4, the apiSidebar will be displayed.

+ +

Following the example above, if a commonDoc is included in both sidebars:

+
sidebars.js
export default {
tutorialSidebar: {
'Category A': ['doc1', 'doc2', 'commonDoc'],
},
apiSidebar: ['doc3', 'doc4', 'commonDoc'],
};
+

How does Docusaurus know which sidebar to display when browsing commonDoc? Answer: it doesn't, and we don't guarantee which sidebar it will pick.

+

When you add doc Y to sidebar X, it creates a two-way binding: sidebar X contains a link to doc Y, and when browsing doc Y, sidebar X will be displayed. But sometimes, we want to break either implicit binding:

+
    +
  1. How do I generate a link to doc Y in sidebar X without making sidebar X displayed on Y? For example, when I include doc Y in multiple sidebars as in the example above, and I want to explicitly tell Docusaurus to display one sidebar?
  2. +
  3. How do I make sidebar X displayed when browsing doc Y, but sidebar X shouldn't contain the link to Y? For example, when Y is a "doc home page" and the sidebar is purely used for navigation?
  4. +
+

Front matter option displayed_sidebar will forcibly set the sidebar association. For the same example, you can still use doc shorthands without any special configuration:

+
sidebars.js
export default {
tutorialSidebar: {
'Category A': ['doc1', 'doc2'],
},
apiSidebar: ['doc3', 'doc4'],
};
+

And then add a front matter:

+
commonDoc.md
---
displayed_sidebar: apiSidebar
---
+

Which explicitly tells Docusaurus to display apiSidebar when browsing commonDoc. Using the same method, you can make sidebar X which doesn't contain doc Y appear on doc Y:

+
home.md
---
displayed_sidebar: tutorialSidebar
---
+

Even when tutorialSidebar doesn't contain a link to home, it will still be displayed when viewing home.

+

If you set displayed_sidebar: null, no sidebar will be displayed whatsoever on this page, and subsequently, no pagination either.

+

Generating pagination

+

Docusaurus uses the sidebar to generate the "next" and "previous" pagination links at the bottom of each doc page. It strictly uses the sidebar that is displayed: if no sidebar is associated, it doesn't generate pagination either. However, the docs linked as "next" and "previous" are not guaranteed to display the same sidebar: they are included in this sidebar, but in their front matter, they may have a different displayed_sidebar.

+

If a sidebar is displayed by setting displayed_sidebar front matter, and this sidebar doesn't contain the doc itself, no pagination is displayed.

+

You can customize pagination with front matter pagination_next and pagination_prev. Consider this sidebar:

+
sidebars.js
export default {
tutorial: [
'introduction',
{
installation: ['windows', 'linux', 'macos'],
},
'getting-started',
],
};
+

The pagination next link on "windows" points to "linux", but that doesn't make sense: you would want readers to proceed to "getting started" after installation. In this case, you can set the pagination manually:

+
windows.md
---
pagination_next: getting-started
---

# Installation on Windows
+

You can also disable displaying a pagination link with pagination_next: null or pagination_prev: null.

+

The pagination label by default is the sidebar label. You can use the front matter pagination_label to customize how this doc appears in the pagination.

+ +

The ref type is identical to the doc type in every way, except that it doesn't participate in generating navigation metadata. It only registers itself as a link. When generating pagination and displaying sidebar, ref items are completely ignored.

+

It is particularly useful where you wish to link to the same document from multiple sidebars. The document only belongs to one sidebar (the one where it's registered as type: 'doc' or from an autogenerated directory), but its link will appear in all sidebars that it's registered in.

+

Consider this example:

+
sidebars.js
export default {
tutorialSidebar: {
'Category A': [
'doc1',
'doc2',
{type: 'ref', id: 'commonDoc'},
'doc5',
],
},
apiSidebar: ['doc3', 'doc4', 'commonDoc'],
};
+

You can think of the ref type as the equivalent to doing the following:

+
    +
  • Setting displayed_sidebar: tutorialSidebar for commonDoc (ref is ignored in sidebar association)
  • +
  • Setting pagination_next: doc5 for doc2 and setting pagination_prev: doc2 for doc5 (ref is ignored in pagination generation)
  • +
+ + \ No newline at end of file diff --git a/docs/sidebar/multiple-sidebars.html.html b/docs/sidebar/multiple-sidebars.html.html new file mode 100644 index 0000000000..55caab9d3d --- /dev/null +++ b/docs/sidebar/multiple-sidebars.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/static-assets.html b/docs/static-assets.html new file mode 100644 index 0000000000..329335d350 --- /dev/null +++ b/docs/static-assets.html @@ -0,0 +1,101 @@ + + + + + +Static Assets | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static Assets

+

Static assets are the non-code files that are directly copied to the build output. They include images, stylesheets, favicons, fonts, etc.

+

By default, you are suggested to put these assets in the static folder. Every file you put into that directory will be copied into the root of the generated build folder with the directory hierarchy preserved. E.g. if you add a file named sun.jpg to the static folder, it will be copied to build/sun.jpg.

+

This means that:

+
    +
  • for site baseUrl: '/', the image /static/img/docusaurus.png will be served at /img/docusaurus.png.
  • +
  • for site baseUrl: '/subpath/', the image /static/img/docusaurus.png will be served at /subpath/img/docusaurus.png.
  • +
+

You can customize the static directory sources in docusaurus.config.js. For example, we can add public as another possible path:

+
docusaurus.config.js
export default {
title: 'My site',
staticDirectories: ['public', 'static'],
// ...
};
+

Now, all files in public as well as static will be copied to the build output.

+

Referencing your static asset

+

In JSX

+

In JSX, you can reference assets from the static folder in your code using absolute URLs, but this is not ideal because changing the site baseUrl will break those links. For the image <img src="/img/docusaurus.png" /> served at https://example.com/test, the browser will try to resolve it from the URL root, i.e. as https://example.com/img/docusaurus.png, which will fail because it's actually served at https://example.com/test/img/docusaurus.png.

+

You can import() or require() the static asset (recommended), or use the useBaseUrl utility function: both prepend the baseUrl to paths for you.

+

Examples:

+
MyComponent.js
import DocusaurusImageUrl from '@site/static/img/docusaurus.png';

<img src={DocusaurusImageUrl} />;
+
MyComponent.js
<img src={require('@site/static/img/docusaurus.png').default} />
+
MyComponent.js
import useBaseUrl from '@docusaurus/useBaseUrl';

<img src={useBaseUrl('/img/docusaurus.png')} />;
+

You can also import SVG files: they will be transformed into React components.

+
MyComponent.js
import DocusaurusLogoWithKeytar from '@site/static/img/docusaurus_keytar.svg';

<DocusaurusLogoWithKeytar title="Docusaurus Logo" className="logo" />;
+

In Markdown

+

In Markdown, you can stick to using absolute paths when writing links or images in Markdown syntax because Docusaurus handles them as require calls instead of URLs when parsing the Markdown. See Markdown static assets.

+
You write a link like this: [Download this document](/files/note.docx)

Docusaurus changes that to: <a href={require('static/files/note.docx')}>Download this document</a>
+
use Markdown syntax

Docusaurus will only parse links that are in Markdown syntax. If your asset references are using the JSX tag <a> / <img>, nothing will be done.

+

In CSS

+

In CSS, the url() function is commonly used to reference assets like fonts and images. To reference a static asset, use absolute paths:

+
@font-face {
font-family: 'Caroline';
src: url('/font/Caroline.otf');
}
+

The static/font/Caroline.otf asset will be loaded by the bundler.

+
important takeaway

One important takeaway: never hardcode your base URL! The base URL is considered an implementation detail and should be easily changeable. All paths, even when they look like URL slugs, are actually file paths.

If you find the URL slug mental model more understandable, here's a rule of thumb:

    +
  • Pretend you have a base URL like /test/ when writing JSX so you don't use an absolute URL path like src="/img/thumbnail.png" but instead require the asset.
  • +
  • Pretend it's / when writing Markdown or CSS so you always use absolute paths without the base URL.
  • +
+

Caveats

+

Keep in mind that:

+
    +
  • By default, none of the files in the static folder will be post-processed, hashed, or minified. +
      +
    • However, as we've demonstrated above, we are usually able to convert them to require calls for you so they do get processed. This is good for aggressive caching and better user experience.
    • +
    +
  • +
  • Missing files referenced via hard-coded absolute paths will not be detected at compilation time and will result in a 404 error.
  • +
  • By default, GitHub Pages runs published files through Jekyll. Since Jekyll will discard any files that begin with _, it is recommended that you disable Jekyll by adding an empty file named .nojekyll file to your static directory if you are using GitHub pages for hosting.
  • +
+ + \ No newline at end of file diff --git a/docs/static-assets.html.html b/docs/static-assets.html.html new file mode 100644 index 0000000000..3bc1f88511 --- /dev/null +++ b/docs/static-assets.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/styling-layout.html b/docs/styling-layout.html new file mode 100644 index 0000000000..dbeb94828d --- /dev/null +++ b/docs/styling-layout.html @@ -0,0 +1,129 @@ + + + + + +Styling and Layout | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Styling and Layout

+
tip

This section is focused on styling through stylesheets. For more advanced customizations (DOM structure, React code...), refer to the swizzling guide.

+

A Docusaurus site is a single-page React application. You can style it the way you style React apps.

+

There are a few approaches/frameworks which will work, depending on your preferences and the type of website you are trying to build. Websites that are highly interactive and behave more like web apps will benefit from more modern styling approaches that co-locate styles with the components. Component styling can also be particularly useful when you wish to customize or swizzle a component.

+

Global styles

+

This is the most traditional way of styling that most developers (including non-front-end developers) would be familiar with. It works fine for small websites that do not have much customization.

+

If you're using @docusaurus/preset-classic, you can create your own CSS files (e.g. /src/css/custom.css) and import them globally by passing them as an option of the classic theme.

+
docusaurus.config.js
export default {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: ['./src/css/custom.css'],
},
},
],
],
};
+

Any CSS you write within that file will be available globally and can be referenced directly using string literals.

+
/src/css/custom.css
.purple-text {
color: rebeccapurple;
}
+
function MyComponent() {
return (
<main>
<h1 className="purple-text">Purple Heading!</h1>
</main>
);
}
+

If you want to add CSS to any element, you can open the DevTools in your browser to inspect its class names. Class names come in several kinds:

+
    +
  • Theme class names. These class names are listed exhaustively in the next subsection. They don't have any default properties. You should always prioritize targeting those stable class names in your custom CSS.
  • +
  • Infima class names. These class names are found in the classic theme and usually follow the BEM convention of block__element--modifier. They are usually stable but are still considered implementation details, so you should generally avoid targeting them. However, you can modify Infima CSS variables.
  • +
  • CSS module class names. These class names have a hash in production (codeBlockContainer_RIuc) and are appended with a long file path in development. They are considered implementation details and you should almost always avoid targeting them in your custom CSS. If you must, you can use an attribute selector ([class*='codeBlockContainer']) that ignores the hash.
  • +
+

Theme Class Names

+

We provide some stable CSS class names for robust and maintainable global layout styling. These names are theme-agnostic and meant to be targeted by custom CSS.

+
tip

If you can't find a way to create a robust CSS selector, please report your customization use-case and we will consider adding new class names.

+
Exhaustive list of stable class names
export const ThemeClassNames = {
page: {
blogListPage: 'blog-list-page',
blogPostPage: 'blog-post-page',
blogTagsListPage: 'blog-tags-list-page',
blogTagPostListPage: 'blog-tags-post-list-page',
docsDocPage: 'docs-doc-page',
docsTagsListPage: 'docs-tags-list-page',
docsTagDocListPage: 'docs-tags-doc-list-page',
mdxPage: 'mdx-page',
},
wrapper: {
main: 'main-wrapper',
blogPages: 'blog-wrapper',
docsPages: 'docs-wrapper',
mdxPages: 'mdx-wrapper',
},
common: {
editThisPage: 'theme-edit-this-page',
lastUpdated: 'theme-last-updated',
backToTopButton: 'theme-back-to-top-button',
codeBlock: 'theme-code-block',
admonition: 'theme-admonition',
unlistedBanner: 'theme-unlisted-banner',
admonitionType: (type: string) => `theme-admonition-${type}`,
},
layout: {
},
docs: {
docVersionBanner: 'theme-doc-version-banner',
docVersionBadge: 'theme-doc-version-badge',
docBreadcrumbs: 'theme-doc-breadcrumbs',
docMarkdown: 'theme-doc-markdown',
docTocMobile: 'theme-doc-toc-mobile',
docTocDesktop: 'theme-doc-toc-desktop',
docFooter: 'theme-doc-footer',
docFooterTagsRow: 'theme-doc-footer-tags-row',
docFooterEditMetaRow: 'theme-doc-footer-edit-meta-row',
docSidebarContainer: 'theme-doc-sidebar-container',
docSidebarMenu: 'theme-doc-sidebar-menu',
docSidebarItemCategory: 'theme-doc-sidebar-item-category',
docSidebarItemLink: 'theme-doc-sidebar-item-link',
docSidebarItemCategoryLevel: (level: number) =>
`theme-doc-sidebar-item-category-level-${level}` as const,
docSidebarItemLinkLevel: (level: number) =>
`theme-doc-sidebar-item-link-level-${level}` as const,
},
blog: {
blogFooterTagsRow: 'theme-blog-footer-tags-row',
blogFooterEditMetaRow: 'theme-blog-footer-edit-meta-row',
},
pages: {
pageFooterEditMetaRow: 'theme-pages-footer-edit-meta-row',
},
} as const;
+

Styling your site with Infima

+

@docusaurus/preset-classic uses Infima as the underlying styling framework. Infima provides a flexible layout and common UI components styling suitable for content-centric websites (blogs, documentation, landing pages). For more details, check out the Infima website.

+

When you scaffold your Docusaurus project with create-docusaurus, the website will be generated with basic Infima stylesheets and default styling. You can override Infima CSS variables globally.

+
/src/css/custom.css
:root {
--ifm-color-primary: #25c2a0;
--ifm-code-font-size: 95%;
}
+

Infima uses 7 shades of each color. We recommend using ColorBox to find the different shades of colors for your chosen primary color.

+

Alternatively, use the following tool to generate the different shades for your website and copy the variables into /src/css/custom.css.

+
tip

Aim for at least WCAG-AA contrast ratio for the primary color to ensure readability. Use the Docusaurus website itself to preview how your color palette would look like. You can use alternative palettes in dark mode because one color doesn't usually work in both light and dark mode.

CSS Variable NameHexAdjustmentContrast Rating
--ifm-color-primary-lightest#3cad6eFail 🔴
--ifm-color-primary-lighter#359962Fail 🔴
--ifm-color-primary-light#33925dFail 🔴
--ifm-color-primary#2e85550AA 👍
--ifm-color-primary-dark#29784cAA 👍
--ifm-color-primary-darker#277148AA 👍
--ifm-color-primary-darkest#205d3bAAA 🏅

Replace the variables in src/css/custom.css with these new variables.

/src/css/custom.css
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
}
+

Dark Mode

+

In light mode, the <html> element has a data-theme="light" attribute; in dark mode, it's data-theme="dark". Therefore, you can scope your CSS to dark-mode-only by targeting html with a specific attribute.

+
/* Overriding root Infima variables */
[data-theme='dark'] {
--ifm-color-primary: #4e89e8;
}
/* Styling one class specially in dark mode */
[data-theme='dark'] .purple-text {
color: plum;
}
+
tip

It is possible to initialize the Docusaurus theme directly from a docusaurus-theme query string parameter.

Examples:

/docs/?docusaurus-theme=dark
/docs/configuration?docusaurus-theme=light
+

Data Attributes

+

It is possible to inject <html> data attributes with query string parameters following the docusaurus-data-<key> pattern. This gives you the flexibility to style a page differently based on the query string.

+

For example, let's render one of our pages with a red border and no navbar:

+
/src/css/custom.css
html[data-navbar='false'] .navbar {
display: none;
}

html[data-red-border] div#__docusaurus {
border: red solid thick;
}
+
/docs/?docusaurus-data-navbar=false&docusaurus-data-red-border
+
Iframe Mode

If you plan to embed some Docusaurus pages on another site though an iframe, it can be useful to create an alternative display mode and use iframe urls such as https://mysite.com/docs/myDoc?docusaurus-data-mode=iframe. It is your responsibility to provide the additional styles and decide which UI elements you want to keep or hide.

+

Mobile View

+

Docusaurus uses 996px as the cutoff between mobile screen width and desktop. If you want your layout to be different in the mobile view, you can use media queries.

+
.banner {
padding: 4rem;
}
/** In mobile view, reduce the padding */
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
}
+
Customizing the breakpoint

Some React components, such as the header and the sidebar, implement different JavaScript logic when in mobile view. If you change the breakpoint value in your custom CSS, you probably also want to update the invocations of the useWindowSize hook by swizzling the components it's used in and passing an explicit option argument.

+

CSS modules

+

To style your components using CSS Modules, name your stylesheet files with the .module.css suffix (e.g. welcome.module.css). Webpack will load such CSS files as CSS modules and you have to reference the class names as properties of the imported CSS module (as opposed to using plain strings). This is similar to the convention used in Create React App.

+
styles.module.css
.main {
padding: 12px;
}

.heading {
font-weight: bold;
}

.contents {
color: #ccc;
}
+
import styles from './styles.module.css';

function MyComponent() {
return (
<main className={styles.main}>
<h1 className={styles.heading}>Hello!</h1>
<article className={styles.contents}>Lorem Ipsum</article>
</main>
);
}
+

The class names will be processed by webpack into a globally unique class name during build.

+

CSS-in-JS

+
warning

CSS-in-JS support is a work in progress, so libs like MUI may have display quirks. Welcoming PRs.

+

Sass/SCSS

+

To use Sass/SCSS as your CSS preprocessor, install the unofficial Docusaurus plugin docusaurus-plugin-sass. This plugin works for both global styles and the CSS modules approach:

+
    +
  1. Install docusaurus-plugin-sass:
  2. +
+
npm install --save docusaurus-plugin-sass sass
+
    +
  1. Include the plugin in your docusaurus.config.js file:
  2. +
+
docusaurus.config.js
export default {
// ...
plugins: ['docusaurus-plugin-sass'],
// ...
};
+
    +
  1. Write and import your stylesheets in Sass/SCSS as normal.
  2. +
+

Global styles using Sass/SCSS

+

You can now set the customCss property of @docusaurus/preset-classic to point to your Sass/SCSS file:

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
// ...
theme: {
customCss: ['./src/css/custom.scss'],
},
// ...
},
],
],
};
+

Modules using Sass/SCSS

+

Name your stylesheet files with the .module.scss suffix (e.g. welcome.module.scss) instead of .css. Webpack will use sass-loader to preprocess your stylesheets and load them as CSS modules.

+
styles.module.scss
.main {
padding: 12px;

article {
color: #ccc;
}
}
+
import styles from './styles.module.scss';

function MyComponent() {
return (
<main className={styles.main}>
<article>Lorem Ipsum</article>
</main>
);
}
+

TypeScript support

+

To enable TypeScript support for Sass/SCSS modules, the TypeScript configuration should be updated to add the docusaurus-plugin-sass type definitions. This can be done in the tsconfig.json file:

+
{
"extends": "@tsconfig/docusaurus/tsconfig.json",
"compilerOptions": {
...
+ "types": ["docusaurus-plugin-sass"]
}
}
+ + \ No newline at end of file diff --git a/docs/styling-layout.html.html b/docs/styling-layout.html.html new file mode 100644 index 0000000000..10eaf09db7 --- /dev/null +++ b/docs/styling-layout.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/support/index.html b/docs/support/index.html new file mode 100644 index 0000000000..ae87810010 --- /dev/null +++ b/docs/support/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/swizzling.html b/docs/swizzling.html new file mode 100644 index 0000000000..5b9cc8be81 --- /dev/null +++ b/docs/swizzling.html @@ -0,0 +1,139 @@ + + + + + +Swizzling | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Swizzling

+

In this section, we will introduce how customization of layout is done in Docusaurus.

+
+

Déja vu...?

+
+

This section is similar to Styling and Layout, but this time, we will customize React components themselves, rather than what they look like. We will talk about a central concept in Docusaurus: swizzling, which allows deeper site customizations.

+

In practice, swizzling permits to swap a theme component with your own implementation, and it comes in 2 patterns:

+
    +
  • Ejecting: creates a copy of the original theme component, which you can fully customize
  • +
  • Wrapping: creates a wrapper around the original theme component, which you can enhance
  • +
+
Why is it called swizzling?

The name comes from Objective-C and Swift-UI: method swizzling is the process of changing the implementation of an existing selector (method).

For Docusaurus, component swizzling means providing an alternative component that takes precedence over the component provided by the theme.

You can think of it as Monkey Patching for React components, enabling you to override the default implementation. Gatsby has a similar concept called theme shadowing.

To gain a deeper understanding of this, you have to understand how theme components are resolved.

+

Swizzling Process

+

Overview

+

Docusaurus provides a convenient interactive CLI to swizzle components. You generally only need to remember the following command:

+
npm run swizzle
+

It will generate a new component in your src/theme directory, which should look like this example:

+
src/theme/SomeComponent.js
import React from 'react';

export default function SomeComponent(props) {
// You can fully customize this implementation
// including changing the JSX, CSS and React hooks
return (
<div className="some-class">
<h1>Some Component</h1>
<p>Some component implementation details</p>
</div>
);
}
+

To get an overview of all the themes and components available to swizzle, run:

+
npm run swizzle -- --list
+

Use --help to see all available CLI options, or refer to the reference swizzle CLI documentation.

+
note

After swizzling a component, restart your dev server in order for Docusaurus to know about the new component.

+
Prefer staying on the safe side

Be sure to understand which components are safe to swizzle. Some components are internal implementation details of a theme.

+
info

docusaurus swizzle is only an automated way to help you swizzle the component. You can also create the src/theme/SomeComponent.js file manually, and Docusaurus will resolve it. There's no internal magic behind this command!

+

Ejecting

+

Ejecting a theme component is the process of creating a copy of the original theme component, which you can fully customize and override.

+

To eject a theme component, use the swizzle CLI interactively, or with the --eject option:

+
npm run swizzle [theme name] [component name] -- --eject
+

An example:

+
npm run swizzle @docusaurus/theme-classic Footer -- --eject
+

This will copy the current <Footer /> component's implementation to your site's src/theme directory. Docusaurus will now use this <Footer> component copy instead of the original one. You are now free to completely re-implement the <Footer> component.

+
src/theme/Footer/index.js
import React from 'react';

export default function Footer(props) {
return (
<footer>
<h1>This is my custom site footer</h1>
<p>And it is very different from the original</p>
</footer>
);
}
+
warning

Ejecting an unsafe component can sometimes lead to copying a large amount of internal code, which you now have to maintain yourself. It can make Docusaurus upgrades more difficult, as you will need to migrate your customizations if the props received or internal theme APIs used have changed.

Prefer wrapping whenever possible: the amount of code to maintain is smaller.

+
Re-swizzling

To keep ejected components up-to-date after a Docusaurus upgrade, re-run the eject command and compare the changes with git diff. You are also recommended to write a brief comment at the top of the file explaining what changes you have made, so that you could more easily re-apply your changes after re-ejection.

+

Wrapping

+

Wrapping a theme component is the process of creating a wrapper around the original theme component, which you can enhance.

+

To wrap a theme component, use the swizzle CLI interactively, or with the --wrap option:

+
npm run swizzle [theme name] [component name] -- --wrap
+

An example:

+
npm run swizzle @docusaurus/theme-classic Footer -- --wrap
+

This will create a wrapper in your site's src/theme directory. Docusaurus will now use the <FooterWrapper> component instead of the original one. You can now add customizations around the original component.

+
src/theme/Footer/index.js
import React from 'react';
import Footer from '@theme-original/Footer';

export default function FooterWrapper(props) {
return (
<>
<section>
<h2>Extra section</h2>
<p>This is an extra section that appears above the original footer</p>
</section>
<Footer {...props} />
</>
);
}
+
What is this @theme-original thing?

Docusaurus uses theme aliases to resolve the theme components to use. The newly created wrapper takes the @theme/SomeComponent alias. @theme-original/SomeComponent permits to import original component that the wrapper shadows without creating an infinite import loop where the wrapper imports itself.

+
tip

Wrapping a theme is a great way to add extra components around existing one without ejecting it. For example, you can easily add a custom comment system under each blog post:

src/theme/BlogPostItem.js
import React from 'react';
import BlogPostItem from '@theme-original/BlogPostItem';
import MyCustomCommentSystem from '@site/src/MyCustomCommentSystem';

export default function BlogPostItemWrapper(props) {
return (
<>
<BlogPostItem {...props} />
<MyCustomCommentSystem />
</>
);
}
+

What is safe to swizzle?

+
+

With great power comes great responsibility

+
+

Some theme components are internal implementation details of a theme. Docusaurus allows you to swizzle them, but it might be risky.

+
Why is it risky?

Theme authors (including us) might have to update their theme over time: changing the component props, name, file system location, types... For example, consider a component that receives two props name and age, but after a refactor, it now receives a person prop with the above two properties. Your component, which still expects these two props, will render undefined instead.

Moreover, internal components may simply disappear. If a component is called Sidebar and it's later renamed to DocSidebar, your swizzled component will be completely ignored.

Theme components marked as unsafe may change in a backward-incompatible way between theme minor versions. When upgrading a theme (or Docusaurus), your customizations might behave unexpectedly, and can even break your site.

+

For each theme component, the swizzle CLI will indicate 3 different levels of safety declared by theme authors:

+
    +
  • Safe: this component is safe to be swizzled, its public API is considered stable, and no breaking changes should happen within a theme major version
  • +
  • Unsafe: this component is a theme implementation detail, not safe to be swizzled, and breaking changes might happen within a theme minor version
  • +
  • Forbidden: the swizzle CLI will prevent you from swizzling this component, because it is not designed to be swizzled at all
  • +
+
note

Some components might be safe to wrap, but not safe to eject.

+
info

Don't be too afraid to swizzle unsafe components: just keep in mind that breaking changes might happen, and you might need to upgrade your customizations manually on minor version upgrades.

+
Report your use-case

If you have a strong use-case for swizzling an unsafe component, please report it here and we will work together to find a solution to make it safe.

+

Which component should I swizzle?

+

It is not always clear which component you should swizzle exactly to achieve the desired result. @docusaurus/theme-classic, which provides most of the theme components, has about 100 components!

+
tip

To print an overview of all the @docusaurus/theme-classic components:

npm run swizzle @docusaurus/theme-classic -- --list
+

You can follow these steps to locate the appropriate component to swizzle:

+
    +
  1. Component description. Some components provide a short description, which is a good way to find the right one.
  2. +
  3. Component name. Official theme components are semantically named, so you should be able to infer its function from the name. The swizzle CLI allows you to enter part of a component name to narrow down the available choices. For example, if you run yarn swizzle @docusaurus/theme-classic, and enter Doc, only the docs-related components will be listed.
  4. +
  5. Start with a higher-level component. Components form a tree with some components importing others. Every route will be associated with one top-level component that the route will render (most of them listed in Routing in content plugins). For example, all blog post pages have @theme/BlogPostPage as the topmost component. You can start with swizzling this component, and then go down the component tree to locate the component that renders just what you are targeting. Don't forget to unswizzle the rest by deleting the files after you've found the correct one, so you don't maintain too many components.
  6. +
  7. Read the theme source code and use search wisely.
  8. +
+
Just ask!

If you still have no idea which component to swizzle to achieve the desired effect, you can reach out for help in one of our support channels.

We also want to understand better your fanciest customization use-cases, so please report them.

+

Do I need to swizzle?

+

Swizzling ultimately means you have to maintain some additional React code that interact with Docusaurus internal APIs. If you can, think about the following alternatives when customizing your site:

+
    +
  1. Use CSS. CSS rules and selectors can often help you achieve a decent degree of customization. Refer to styling and layout for more details.
  2. +
  3. Use translations. It may sound surprising, but translations are ultimately just a way to customize the text labels. For example, if your site's default language is en, you can still run yarn write-translations -l en and edit the code.json emitted. Refer to the i18n tutorial for more details.
  4. +
+
tip

The smaller, the better. If swizzling is inevitable, prefer to swizzle only the relevant part and maintain as little code on your own as possible. Swizzling a small component often means less risk of breaking changes during upgrade.

Wrapping is also a far safer alternative to ejecting.

+

Wrapping your site with <Root>

+

The <Root> component is rendered at the very top of the React tree, above the theme <Layout>, and never unmounts. It is the perfect place to add stateful logic that should not be re-initialized across navigations (user authentication status, shopping cart state...).

+

Swizzle it manually by creating a file at src/theme/Root.js:

+
src/theme/Root.js
import React from 'react';

// Default implementation, that you can customize
export default function Root({children}) {
return <>{children}</>;
}
+
tip

Use this component to render React Context providers.

+ + \ No newline at end of file diff --git a/docs/swizzling.html.html b/docs/swizzling.html.html new file mode 100644 index 0000000000..87d144e09d --- /dev/null +++ b/docs/swizzling.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/team/index.html b/docs/team/index.html new file mode 100644 index 0000000000..6e9a877421 --- /dev/null +++ b/docs/team/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial-basics/congratulations/index.html b/docs/tutorial-basics/congratulations/index.html deleted file mode 100644 index 6e0965566c..0000000000 --- a/docs/tutorial-basics/congratulations/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -Congratulations! | My Site - - - - - -

Congratulations!

-

You have just learned the basics of Docusaurus and made some changes to the initial template.

-

Docusaurus has much more to offer!

-

Have 5 more minutes? Take a look at versioning and i18n.

-

Anything unclear or buggy in this tutorial? Please report it!

-

What's next?

-
- - \ No newline at end of file diff --git a/docs/tutorial-basics/create-a-blog-post/index.html b/docs/tutorial-basics/create-a-blog-post/index.html deleted file mode 100644 index 2e8e7667f4..0000000000 --- a/docs/tutorial-basics/create-a-blog-post/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -Create a Blog Post | My Site - - - - - -

Create a Blog Post

-

Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...

-

Create your first Post

-

Create a file at blog/2021-02-28-greetings.md:

-
blog/2021-02-28-greetings.md
---
slug: greetings
title: Greetings!
authors:
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
- name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
tags: [greetings]
---

Congratulations, you have made your first post!

Feel free to play around and edit this post as much as you like.
-

A new blog post is now available at http://localhost:3000/blog/greetings.

- - \ No newline at end of file diff --git a/docs/tutorial-basics/create-a-document/index.html b/docs/tutorial-basics/create-a-document/index.html deleted file mode 100644 index 8e9f421578..0000000000 --- a/docs/tutorial-basics/create-a-document/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -Create a Document | My Site - - - - - -

Create a Document

-

Documents are groups of pages connected through:

-
    -
  • a sidebar
  • -
  • previous/next navigation
  • -
  • versioning
  • -
-

Create your first Doc

-

Create a Markdown file at docs/hello.md:

-
docs/hello.md
# Hello

This is my **first Docusaurus document**!
-

A new document is now available at http://localhost:3000/docs/hello.

-

Configure the Sidebar

-

Docusaurus automatically creates a sidebar from the docs folder.

-

Add metadata to customize the sidebar label and position:

-
docs/hello.md
---
sidebar_label: 'Hi!'
sidebar_position: 3
---

# Hello

This is my **first Docusaurus document**!
-

It is also possible to create your sidebar explicitly in sidebars.js:

-
sidebars.js
export default {
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
};
- - \ No newline at end of file diff --git a/docs/tutorial-basics/create-a-page/index.html b/docs/tutorial-basics/create-a-page/index.html deleted file mode 100644 index 738c87a1d0..0000000000 --- a/docs/tutorial-basics/create-a-page/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -Create a Page | My Site - - - - - -

Create a Page

-

Add Markdown or React files to src/pages to create a standalone page:

-
    -
  • src/pages/index.jslocalhost:3000/
  • -
  • src/pages/foo.mdlocalhost:3000/foo
  • -
  • src/pages/foo/bar.jslocalhost:3000/foo/bar
  • -
-

Create your first React Page

-

Create a file at src/pages/my-react-page.js:

-
src/pages/my-react-page.js
import React from 'react';
import Layout from '@theme/Layout';

export default function MyReactPage() {
return (
<Layout>
<h1>My React page</h1>
<p>This is a React page</p>
</Layout>
);
}
-

A new page is now available at http://localhost:3000/my-react-page.

-

Create your first Markdown Page

-

Create a file at src/pages/my-markdown-page.md:

-
src/pages/my-markdown-page.md
# My Markdown page

This is a Markdown page
-

A new page is now available at http://localhost:3000/my-markdown-page.

- - \ No newline at end of file diff --git a/docs/tutorial-basics/deploy-your-site/index.html b/docs/tutorial-basics/deploy-your-site/index.html deleted file mode 100644 index a17b775ccf..0000000000 --- a/docs/tutorial-basics/deploy-your-site/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -Deploy your site | My Site - - - - - -

Deploy your site

-

Docusaurus is a static-site-generator (also called Jamstack).

-

It builds your site as simple static HTML, JavaScript and CSS files.

-

Build your site

-

Build your site for production:

-
npm run build
-

The static files are generated in the build folder.

-

Deploy your site

-

Test your production build locally:

-
npm run serve
-

The build folder is now served at http://localhost:3000/.

-

You can now deploy the build folder almost anywhere easily, for free or very small cost (read the Deployment Guide).

- - \ No newline at end of file diff --git a/docs/tutorial-basics/markdown-features/index.html b/docs/tutorial-basics/markdown-features/index.html deleted file mode 100644 index 91c42fbda9..0000000000 --- a/docs/tutorial-basics/markdown-features/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - -Markdown Features | My Site - - - - - -

Markdown Features

-

Docusaurus supports Markdown and a few additional features.

-

Front Matter

-

Markdown documents have metadata at the top called Front Matter:

-
my-doc.md
---
id: my-doc-id
title: My document title
description: My document description
slug: /my-custom-url
---

## Markdown heading

Markdown text with [links](./hello.md)
- -

Regular Markdown links are supported, using url paths or relative file paths.

-
Let's see how to [Create a page](/create-a-page).
-
Let's see how to [Create a page](./create-a-page.md).
-

Result: Let's see how to Create a page.

-

Images

-

Regular Markdown images are supported.

-

You can use absolute paths to reference images in the static directory (static/img/docusaurus.png):

-
![Docusaurus logo](/img/docusaurus.png)
-

Docusaurus logo

-

You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:

-
![Docusaurus logo](./img/docusaurus.png)
-

Code Blocks

-

Markdown code blocks are supported with Syntax highlighting.

-
```jsx title="src/components/HelloDocusaurus.js"
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}
```
-
src/components/HelloDocusaurus.js
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}
-

Admonitions

-

Docusaurus has a special syntax to create admonitions and callouts:

-
:::tip[My tip]

Use this awesome feature option

:::

:::danger[Take care]

This action is dangerous

:::
-
My tip

Use this awesome feature option

-
Take care

This action is dangerous

-

MDX and React Components

-

MDX can make your documentation more interactive and allows using any React components inside Markdown:

-
export const Highlight = ({children, color}) => (
<span
style={{
backgroundColor: color,
borderRadius: '20px',
color: '#fff',
padding: '10px',
cursor: 'pointer',
}}
onClick={() => {
alert(`You clicked the color ${color} with label ${children}`)
}}>
{children}
</span>
);

This is <Highlight color="#25c2a0">Docusaurus green</Highlight> !

This is <Highlight color="#1877F2">Facebook blue</Highlight> !
- -

This is Docusaurus green !

-

This is Facebook blue !

- - \ No newline at end of file diff --git a/docs/tutorial-extras/manage-docs-versions/index.html b/docs/tutorial-extras/manage-docs-versions/index.html deleted file mode 100644 index 7deac81888..0000000000 --- a/docs/tutorial-extras/manage-docs-versions/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -Manage Docs Versions | My Site - - - - - -

Manage Docs Versions

-

Docusaurus can manage multiple versions of your docs.

-

Create a docs version

-

Release a version 1.0 of your project:

-
npm run docusaurus docs:version 1.0
-

The docs folder is copied into versioned_docs/version-1.0 and versions.json is created.

-

Your docs now have 2 versions:

-
    -
  • 1.0 at http://localhost:3000/docs/ for the version 1.0 docs
  • -
  • current at http://localhost:3000/docs/next/ for the upcoming, unreleased docs
  • -
-

Add a Version Dropdown

-

To navigate seamlessly across versions, add a version dropdown.

-

Modify the docusaurus.config.js file:

-
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersionDropdown',
},
],
},
},
};
-

The docs version dropdown appears in your navbar:

-

Docs Version Dropdown

-

Update an existing version

-

It is possible to edit versioned docs in their respective folder:

-
    -
  • versioned_docs/version-1.0/hello.md updates http://localhost:3000/docs/hello
  • -
  • docs/hello.md updates http://localhost:3000/docs/next/hello
  • -
- - \ No newline at end of file diff --git a/docs/tutorial-extras/translate-your-site/index.html b/docs/tutorial-extras/translate-your-site/index.html deleted file mode 100644 index 98340ad5ee..0000000000 --- a/docs/tutorial-extras/translate-your-site/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - -Translate your site | My Site - - - - - -

Translate your site

-

Let's translate docs/intro.md to French.

-

Configure i18n

-

Modify docusaurus.config.js to add support for the fr locale:

-
docusaurus.config.js
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr'],
},
};
-

Translate a doc

-

Copy the docs/intro.md file to the i18n/fr folder:

-
mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/

cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md
-

Translate i18n/fr/docusaurus-plugin-content-docs/current/intro.md in French.

-

Start your localized site

-

Start your site on the French locale:

-
npm run start -- --locale fr
-

Your localized site is accessible at http://localhost:3000/fr/ and the Getting Started page is translated.

-
caution

In development, you can only use one locale at a time.

-

Add a Locale Dropdown

-

To navigate seamlessly across languages, add a locale dropdown.

-

Modify the docusaurus.config.js file:

-
docusaurus.config.js
export default {
themeConfig: {
navbar: {
items: [
{
type: 'localeDropdown',
},
],
},
},
};
-

The locale dropdown now appears in your navbar:

-

Locale Dropdown

-

Build your localized site

-

Build your site for a specific locale:

-
npm run build -- --locale fr
-

Or build your site to include all the locales at once:

-
npm run build
- - \ No newline at end of file diff --git a/docs/typescript-support.html b/docs/typescript-support.html new file mode 100644 index 0000000000..ed80f264e8 --- /dev/null +++ b/docs/typescript-support.html @@ -0,0 +1,80 @@ + + + + + +TypeScript Support | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

TypeScript Support

+

Docusaurus is written in TypeScript and provides first-class TypeScript support.

+

The minimum required version is TypeScript 5.0.

+

Initialization

+

Docusaurus supports writing and using TypeScript theme components. If the init template provides a TypeScript variant, you can directly initialize a site with full TypeScript support by using the --typescript flag.

+
npx create-docusaurus@latest my-website classic --typescript
+

Below are some guides on how to migrate an existing project to TypeScript.

+

Setup

+

Add the following packages to your project:

+
npm install --save-dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types
+

Then add tsconfig.json to your project root with the following content:

+
tsconfig.json
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
+

Docusaurus doesn't use this tsconfig.json to compile your project. It is added just for a nicer Editor experience, although you can choose to run tsc to type check your code for yourself or on CI.

+

Now you can start writing TypeScript theme components.

+

Typing the config file

+

It is possible to use a TypeScript config file in Docusaurus.

+
docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',

/* Your site config here */

presets: [
[
'classic',
{
/* Your preset config here */
} satisfies Preset.Options,
],
],

themeConfig: {
/* Your theme config here */
} satisfies Preset.ThemeConfig,
};

export default config;
+
It is also possible to use JSDoc type annotations within a .js file:

By default, the Docusaurus TypeScript config does not type-check JavaScript files.

The // @ts-check comment ensures the config file is properly type-checked when running npx tsc.

docusaurus.config.js
// @ts-check

/** @type {import('@docusaurus/types').Config} */
const config = {
tagline: 'Dinosaurs are cool',
favicon: 'img/favicon.ico',

/* Your site config here */

presets: [
[
'@docusaurus/preset-classic',
/** @type {import('@docusaurus/preset-classic').Options} */
(
{
/* Your preset config here */
}
),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
(
{
/* Your theme config here */
}
),
};

export default config;
+
tip

Type annotations are very useful and help your IDE understand the type of config objects!

The best IDEs (VS Code, WebStorm, IntelliJ...) will provide a nice auto-completion experience.

+

Swizzling TypeScript theme components

+

For themes that support TypeScript theme components, you can add the --typescript flag to the end of the swizzle command to get TypeScript source code. For example, the following command will generate index.tsx and styles.module.css into src/theme/Footer.

+
npm run swizzle @docusaurus/theme-classic Footer -- --typescript
+

All official Docusaurus themes support TypeScript theme components, including theme-classic, theme-live-codeblock, and theme-search-algolia. If you are a Docusaurus theme package author who wants to add TypeScript support, see the Lifecycle APIs docs.

+ + \ No newline at end of file diff --git a/docs/typescript-support.html.html b/docs/typescript-support.html.html new file mode 100644 index 0000000000..4325567d2d --- /dev/null +++ b/docs/typescript-support.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/using-plugins.html b/docs/using-plugins.html new file mode 100644 index 0000000000..5468a709e2 --- /dev/null +++ b/docs/using-plugins.html @@ -0,0 +1,134 @@ + + + + + +Using Plugins | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Using Plugins

+

The Docusaurus core doesn't provide any feature of its own. All features are delegated to individual plugins: the docs feature provided by the docs plugin; the blog feature provided by the blog plugin; or individual pages provided by the pages plugin. If there are no plugins installed, the site won't contain any routes.

+

You may not need to install common plugins one-by-one though: they can be distributed as a bundle in a preset. For most users, plugins are configured through the preset configuration.

+

We maintain a list of official plugins, but the community has also created some unofficial plugins. If you want to add any feature: autogenerating doc pages, executing custom scripts, integrating other services... be sure to check out the list: someone may have implemented it for you!

+

If you are feeling energetic, you can also read the plugin guide or plugin method references for how to make a plugin yourself.

+

Installing a plugin

+

A plugin is usually an npm package, so you install them like other npm packages using npm.

+
npm install --save docusaurus-plugin-name
+

Then you add it in your site's docusaurus.config.js's plugins option:

+
docusaurus.config.js
export default {
// ...
plugins: ['@docusaurus/plugin-content-pages'],
};
+

Docusaurus can also load plugins from your local directory, with something like the following:

+
docusaurus.config.js
export default {
// ...
plugins: ['./src/plugins/docusaurus-local-plugin'],
};
+

Paths should be absolute or relative to the config file.

+

Configuring plugins

+

For the most basic usage of plugins, you can provide just the plugin name or the path to the plugin.

+

However, plugins can have options specified by wrapping the name and an options object in a two-member tuple inside your config. This style is usually called "Babel Style".

+
docusaurus.config.js
export default {
// ...
plugins: [
[
'@docusaurus/plugin-xxx',
{
/* options */
},
],
],
};
+

Example:

+
docusaurus.config.js
export default {
plugins: [
// Basic usage.
'@docusaurus/plugin-debug',

// With options object (babel style)
[
'@docusaurus/plugin-sitemap',
{
changefreq: 'weekly',
},
],
],
};
+

Multi-instance plugins and plugin IDs

+

All Docusaurus content plugins can support multiple plugin instances. For example, it may be useful to have multiple docs plugin instances or multiple blogs. It is required to assign a unique ID to each plugin instance, and by default, the plugin ID is default.

+
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
id: 'docs-1',
// other options
},
],
[
'@docusaurus/plugin-content-docs',
{
id: 'docs-2',
// other options
},
],
],
};
+
note

At most one plugin instance can be the "default plugin instance", by omitting the id attribute, or using id: 'default'.

+

Using themes

+

Themes are loaded in the exact same way as plugins. From the consumer perspective, the themes and plugins entries are interchangeable when installing and configuring a plugin. The only nuance is that themes are loaded after plugins, and it's possible for a theme to override a plugin's default theme components.

+
tip

The themes and plugins options lead to different shorthand resolutions, so if you want to take advantage of shorthands, be sure to use the right entry!

+
docusaurus.config.js
export default {
// ...
themes: ['@docusaurus/theme-classic', '@docusaurus/theme-live-codeblock'],
};
+

Using presets

+

Presets are bundles of plugins and themes. For example, instead of letting you register and configure @docusaurus/plugin-content-docs, @docusaurus/plugin-content-blog, etc. one after the other in the config file, we have @docusaurus/preset-classic preset allows you to configure them in one centralized place.

+

@docusaurus/preset-classic

+

The classic preset is shipped by default to new Docusaurus websites created with create-docusaurus. It contains the following themes and plugins:

+ +

The classic preset will relay each option entry to the respective plugin/theme.

+
docusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
// Debug defaults to true in dev, false in prod
debug: undefined,
// Will be passed to @docusaurus/theme-classic.
theme: {
customCss: ['./src/css/custom.css'],
},
// Will be passed to @docusaurus/plugin-content-docs (false to disable)
docs: {},
// Will be passed to @docusaurus/plugin-content-blog (false to disable)
blog: {},
// Will be passed to @docusaurus/plugin-content-pages (false to disable)
pages: {},
// Will be passed to @docusaurus/plugin-sitemap (false to disable)
sitemap: {},
// Will be passed to @docusaurus/plugin-google-gtag (only enabled when explicitly specified)
gtag: {},
// Will be passed to @docusaurus/plugin-google-tag-manager (only enabled when explicitly specified)
googleTagManager: {},
// DEPRECATED: Will be passed to @docusaurus/plugin-google-analytics (only enabled when explicitly specified)
googleAnalytics: {},
},
],
],
};
+

Installing presets

+

A preset is usually an npm package, so you install them like other npm packages using npm.

+
npm install --save @docusaurus/preset-classic
+

Then, add it in your site's docusaurus.config.js's presets option:

+
docusaurus.config.js
export default {
// ...
presets: ['@docusaurus/preset-classic'],
};
+

Preset paths can be relative to the config file:

+
docusaurus.config.js
export default {
// ...
presets: ['./src/presets/docusaurus-local-preset'],
};
+

Creating presets

+

A preset is a function with the same shape as the plugin constructor. It should return an object of { plugins: PluginConfig[], themes: PluginConfig[] }, in the same as how they are accepted in the site config. For example, you can specify a preset that includes the following themes and plugins:

+
src/presets/docusaurus-preset-multi-docs.js
export default function preset(context, opts = {}) {
return {
themes: [['docusaurus-theme-awesome', opts.theme]],
plugins: [
// Using three docs plugins at the same time!
// Assigning a unique ID for each without asking the user to do it
['@docusaurus/plugin-content-docs', {...opts.docs1, id: 'docs1'}],
['@docusaurus/plugin-content-docs', {...opts.docs2, id: 'docs2'}],
['@docusaurus/plugin-content-docs', {...opts.docs3, id: 'docs3'}],
],
};
}
+

Then in your Docusaurus config, you may configure the preset:

+
docusaurus.config.js
export default {
presets: [
[
'./src/presets/docusaurus-preset-multi-docs.js',
{
theme: {hello: 'world'},
docs1: {path: '/docs'},
docs2: {path: '/community'},
docs3: {path: '/api'},
},
],
],
};
+

This is equivalent of doing:

+
docusaurus.config.js
export default {
themes: [['docusaurus-theme-awesome', {hello: 'world'}]],
plugins: [
['@docusaurus/plugin-content-docs', {id: 'docs1', path: '/docs'}],
['@docusaurus/plugin-content-docs', {id: 'docs2', path: '/community'}],
['@docusaurus/plugin-content-docs', {id: 'docs3', path: '/api'}],
],
};
+

This is especially useful when some plugins and themes are intended to be used together. You can even link their options together, e.g. pass one option to multiple plugins.

+

Module shorthands

+

Docusaurus supports shorthands for plugins, themes, and presets. When it sees a plugin/theme/preset name, it tries to load one of the following, in that order:

+
    +
  • [name] (like content-docs)
  • +
  • @docusaurus/[moduleType]-[name] (like @docusaurus/plugin-content-docs)
  • +
  • docusaurus-[moduleType]-[name] (like docusaurus-plugin-content-docs)
  • +
+

where moduleType is one of 'preset', 'theme', 'plugin', depending on which field the module name is declared in. The first module name that's successfully found is loaded.

+

If the name is scoped (beginning with @), the name is first split into scope and package name by the first slash:

+
@scope
^----^
scope (no name!)

@scope/awesome
^----^ ^-----^
scope name

@scope/awesome/main
^----^ ^----------^
scope name
+

If there is no name (like @jquery), [scope]/docusaurus-[moduleType] (i.e. @jquery/docusaurus-plugin) is loaded. Otherwise, the following are attempted:

+
    +
  • [scope]/[name] (like @jquery/content-docs)
  • +
  • [scope]/docusaurus-[moduleType]-[name] (like @jquery/docusaurus-plugin-content-docs)
  • +
+

Below are some examples, for a plugin registered in the plugins field. Note that unlike ESLint or Babel where a consistent naming convention for plugins is mandated, Docusaurus permits greater naming freedom, so the resolutions are not certain, but follows the priority defined above.

+
DeclarationMay be resolved as
awesomedocusaurus-plugin-awesome
sitemap@docusaurus/plugin-sitemap
@my-company@my-company/docusaurus-plugin (the only possible resolution!)
@my-company/awesome@my-company/docusaurus-plugin-awesome
@my-company/awesome/web@my-company/docusaurus-plugin-awesome/web
+ + \ No newline at end of file diff --git a/docs/using-plugins.html.html b/docs/using-plugins.html.html new file mode 100644 index 0000000000..c7e6bb7d35 --- /dev/null +++ b/docs/using-plugins.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/versioning.html b/docs/versioning.html new file mode 100644 index 0000000000..7396291abb --- /dev/null +++ b/docs/versioning.html @@ -0,0 +1,185 @@ + + + + + +Versioning | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Versioning

+

You can use the versioning CLI to create a new documentation version based on the latest content in the docs directory. That specific set of documentation will then be preserved and accessible even as the documentation in the docs directory continues to evolve.

+ +
warning

Think about it before starting to version your documentation - it can become difficult for contributors to help improve it!

+

Most of the time, you don't need versioning as it will just increase your build time, and introduce complexity to your codebase. Versioning is best suited for websites with high-traffic and rapid changes to documentation between versions. If your documentation rarely changes, don't add versioning to your documentation.

+

To better understand how versioning works and see if it suits your needs, you can read on below.

+

Overview

+

A typical versioned doc site looks like below:

+
website
├── sidebars.json # sidebar for the current docs version
├── docs # docs directory for the current docs version
│ ├── foo
│ │ └── bar.md # https://mysite.com/docs/next/foo/bar
│ └── hello.md # https://mysite.com/docs/next/hello
├── versions.json # file to indicate what versions are available
├── versioned_docs
│ ├── version-1.1.0
│ │ ├── foo
│ │ │ └── bar.md # https://mysite.com/docs/foo/bar
│ │ └── hello.md
│ └── version-1.0.0
│ ├── foo
│ │ └── bar.md # https://mysite.com/docs/1.0.0/foo/bar
│ └── hello.md
├── versioned_sidebars
│ ├── version-1.1.0-sidebars.json
│ └── version-1.0.0-sidebars.json
├── docusaurus.config.js
└── package.json
+

The versions.json file is a list of version names, ordered from newest to oldest.

+

The table below explains how a versioned file maps to its version and the generated URL.

+
PathVersionURL
versioned_docs/version-1.0.0/hello.md1.0.0/docs/1.0.0/hello
versioned_docs/version-1.1.0/hello.md1.1.0 (latest)/docs/hello
docs/hello.mdcurrent/docs/next/hello
+
tip

The files in the docs directory belong to the current docs version.

By default, the current docs version is labeled as Next and hosted under /docs/next/*, but it is entirely configurable to fit your project's release lifecycle.

+

Terminology

+

Note the terminology we use here.

+
Current version
The version placed in the ./docs folder.
Latest version / last version
The version served by default for docs navbar items. Usually has path /docs.
+

Current version is defined by the file system location, while latest version is defined by the the navigation behavior. They may or may not be the same version! (And the default configuration, as shown in the table above, would treat them as different: current version at /docs/next and latest at /docs.)

+

Tutorials

+

Tagging a new version

+
    +
  1. First, make sure the current docs version (the ./docs directory) is ready to be frozen.
  2. +
  3. Enter a new version number.
  4. +
+
npm run docusaurus docs:version 1.1.0
+

When tagging a new version, the document versioning mechanism will:

+
    +
  • Copy the full docs/ folder contents into a new versioned_docs/version-[versionName]/ folder.
  • +
  • Create a versioned sidebars file based from your current sidebar configuration (if it exists) - saved as versioned_sidebars/version-[versionName]-sidebars.json.
  • +
  • Append the new version number to versions.json.
  • +
+

Creating new docs

+
    +
  1. Place the new file into the corresponding version folder.
  2. +
  3. Include the reference to the new file in the corresponding sidebar file according to the version number.
  4. +
+
# The new file.
docs/new.md

# Edit the corresponding sidebar file.
sidebars.js
+
tip

Versioned sidebar files are, like standard sidebar files, relative to the content root for the given version — so for the example above, your versioned sidebar file may look like:

{
"sidebar": [
{
"type": "autogenerated",
"dirName": "."
}
]
}

or for a manual sidebar:

{
"sidebar": [
{
"type": "doc",
"id": "new",
"label": "New"
}
]
}
+

Updating an existing version

+

You can update multiple docs versions at the same time because each directory in versioned_docs/ represents specific routes when published.

+
    +
  1. Edit any file.
  2. +
  3. Commit and push changes.
  4. +
  5. It will be published to the version.
  6. +
+

Example: When you change any file in versioned_docs/version-2.6/, it will only affect the docs for version 2.6.

+

Deleting an existing version

+

You can delete/remove versions as well.

+
    +
  1. Remove the version from versions.json.
  2. +
+

Example:

+
[
"2.0.0",
"1.9.0",
- "1.8.0"
]
+
    +
  1. Delete the versioned docs directory. Example: versioned_docs/version-1.8.0.
  2. +
  3. Delete the versioned sidebars file. Example: versioned_sidebars/version-1.8.0-sidebars.json.
  4. +
+

Configuring versioning behavior

+

The "current" version is the version name for the ./docs folder. There are different ways to manage versioning, but two very common patterns are:

+
    +
  • You release v1, and start immediately working on v2 (including its docs). In this case, the current version is v2, which is in the ./docs source folder, and can be browsed at example.com/docs/next. The latest version is v1, which is in the ./versioned_docs/version-1 source folder, and is browsed by most of your users at example.com/docs.
  • +
  • You release v1, and will maintain it for some time before thinking about v2. In this case, the current version and latest version will both be point to v1, since the v2 docs doesn't even exist yet!
  • +
+

Docusaurus defaults work great for the first use case. We will label the current version as "next" and you can even choose not to publish it.

+

For the 2nd use case: if you release v1 and don't plan to work on v2 anytime soon, instead of versioning v1 and having to maintain the docs in 2 folders (./docs + ./versioned_docs/version-1.0.0), you may consider "pretending" that the current version is a cut version by giving it a path and a label:

+
docusaurus.config.js
export default {
presets: [
'@docusaurus/preset-classic',
docs: {
lastVersion: 'current',
versions: {
current: {
label: '1.0.0',
path: '1.0.0',
},
},
},
],
};
+

The docs in ./docs will be served at /docs/1.0.0 instead of /docs/next, and 1.0.0 will become the default version we link to in the navbar dropdown, and you will only need to maintain a single ./docs folder.

+

We offer these plugin options to customize versioning behavior:

+
    +
  • disableVersioning: Explicitly disable versioning even with versions. This will make the site only include the current version.
  • +
  • includeCurrentVersion: Include the current version (the ./docs folder) of your docs. +
      +
    • Tip: turn it off if the current version is a work-in-progress, not ready to be published.
    • +
    +
  • +
  • lastVersion: Sets which version "latest version" (the /docs route) refers to. +
      +
    • Tip: lastVersion: 'current' makes sense if your current version refers to a major version that's constantly patched and released. The actual route base path and label of the latest version are configurable.
    • +
    +
  • +
  • onlyIncludeVersions: Defines a subset of versions from versions.json to be deployed. +
      +
    • Tip: limit to 2 or 3 versions in dev and deploy previews to improve startup and build time.
    • +
    +
  • +
  • versions: A dictionary of version metadata. For each version, you can customize the following: +
      +
    • label: the label displayed in the versions dropdown and banner.
    • +
    • path: the route base path of this version. By default, latest version has / and current version has /next.
    • +
    • banner: one of 'none', 'unreleased', and 'unmaintained'. Determines what's displayed at the top of every doc page. Any version above the latest version would be "unreleased", and any version below would be "unmaintained".
    • +
    • badge: show a badge with the version name at the top of a doc of that version.
    • +
    • className: add a custom className to the <html> element of doc pages of that version.
    • +
    +
  • +
+

See docs plugin configuration for more details.

+ +

We offer several navbar items to help you quickly set up navigation without worrying about versioned routes.

+
    +
  • doc: a link to a doc.
  • +
  • docSidebar: a link to the first item in a sidebar.
  • +
  • docsVersion: a link to the main doc of the currently viewed version.
  • +
  • docsVersionDropdown: a dropdown containing all the versions available.
  • +
+

These links would all look for an appropriate version to link to, in the following order:

+
    +
  1. Active version: the version that the user is currently browsing, if she is on a page provided by this doc plugin. If she's not on a doc page, fall back to...
  2. +
  3. Preferred version: the version that the user last viewed. If there's no history, fall back to...
  4. +
  5. Latest version: the default version that we navigate to, configured by the lastVersion option.
  6. +
+ +

Version your documentation only when needed

+

For example, you are building documentation for your npm package foo and you are currently in version 1.0.0. You then release a patch version for a minor bug fix and it's now 1.0.1.

+

Should you cut a new documentation version 1.0.1? You probably shouldn't. 1.0.1 and 1.0.0 docs shouldn't differ according to semver because there are no new features!. Cutting a new version for it will only just create unnecessary duplicated files.

+

Keep the number of versions small

+

As a good rule of thumb, try to keep the number of your versions below 10. You will very likely to have a lot of obsolete versioned documentation that nobody even reads anymore. For example, Jest is currently in version 27.4, and only maintains several latest documentation versions with the lowest being 25.X. Keep it small 😊

+
archive older versions

If you deploy your site on a Jamstack provider (e.g. Netlify), the provider will save each production build as a snapshot under an immutable URL. You can include archived versions that will never be rebuilt as external links to these immutable URLs. The Jest website and the Docusaurus website both use such pattern to keep the number of actively built versions low.

+

Use absolute import within the docs

+

Don't use relative paths import within the docs. Because when we cut a version the paths no longer work (the nesting level is different, among other reasons). You can utilize the @site alias provided by Docusaurus that points to the website directory. Example:

+
- import Foo from '../src/components/Foo';
+ import Foo from '@site/src/components/Foo';
+ +

Refer to other docs by relative file paths with the .md extension, so that Docusaurus can rewrite them to actual URL paths during building. Files will be linked to the correct corresponding version.

+
The [@hello](hello.mdx#paginate) document is great!

See the [Tutorial](../getting-started/tutorial.mdx) for more info.
+

Global or versioned collocated assets

+

You should decide if assets like images and files are per-version or shared between versions.

+

If your assets should be versioned, put them in the docs version, and use relative paths:

+
![img alt](./myImage.png)

[download this file](./file.pdf)
+

If your assets are global, put them in /static and use absolute paths:

+
![img alt](/myImage.png)

[download this file](/file.pdf)
+ + \ No newline at end of file diff --git a/docs/versioning.html.html b/docs/versioning.html.html new file mode 100644 index 0000000000..47af65ff02 --- /dev/null +++ b/docs/versioning.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/dogfooding/javadoc/index.html b/dogfooding/javadoc/index.html new file mode 100644 index 0000000000..26d0bad019 --- /dev/null +++ b/dogfooding/javadoc/index.html @@ -0,0 +1,6 @@ + + + static HTML file used for testing we should be able to link to it with a + markdown link see also https://github.com/facebook/docusaurus/issues/3309 + + diff --git a/examples/markdownPageExample.html b/examples/markdownPageExample.html new file mode 100644 index 0000000000..eaaaa34a7c --- /dev/null +++ b/examples/markdownPageExample.html @@ -0,0 +1,60 @@ + + + + + +Markdown Page example | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Markdown page

+

This is a page generated from markdown to illustrate the Markdown page feature.

+
tip

Use Markdown pages when you just want to focus on content and the default layout is good enough

+ + \ No newline at end of file diff --git a/examples/markdownPageExample.html.html b/examples/markdownPageExample.html.html new file mode 100644 index 0000000000..5ee8ad17b6 --- /dev/null +++ b/examples/markdownPageExample.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/examples/noIndex.html b/examples/noIndex.html new file mode 100644 index 0000000000..837f4f5081 --- /dev/null +++ b/examples/noIndex.html @@ -0,0 +1,63 @@ + + + + + +No Index Page example | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

No Index Page example

+ +

This page will not be indexed by search engines because it contains the page following page metadata markup:

+
<head>
<meta name="robots" content="noindex, nofollow" />
</head>
+
tip

The sitemap plugin filters pages containing a noindex content value. This page doesn't appear in Docusaurus sitemap.xml file.

+
note

Robots directives are case-insensitive.

+ + \ No newline at end of file diff --git a/examples/noIndex.html.html b/examples/noIndex.html.html new file mode 100644 index 0000000000..d0af01e16d --- /dev/null +++ b/examples/noIndex.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/feature-requests.html b/feature-requests.html new file mode 100644 index 0000000000..aa46d1826e --- /dev/null +++ b/feature-requests.html @@ -0,0 +1,58 @@ + + + + + +Feedback | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/feature-requests.html.html b/feature-requests.html.html new file mode 100644 index 0000000000..fcd407c64a --- /dev/null +++ b/feature-requests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/absolute/anchor/index.html b/home/absolute/anchor/index.html new file mode 100644 index 0000000000..b85a4190c5 --- /dev/null +++ b/home/absolute/anchor/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/absolute/index.html b/home/absolute/index.html new file mode 100644 index 0000000000..2fdf24c6e2 --- /dev/null +++ b/home/absolute/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/absolute/qs/index.html b/home/absolute/qs/index.html new file mode 100644 index 0000000000..959167656e --- /dev/null +++ b/home/absolute/qs/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/anchor/index.html b/home/anchor/index.html new file mode 100644 index 0000000000..44860524e3 --- /dev/null +++ b/home/anchor/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/index.html b/home/index.html new file mode 100644 index 0000000000..86e66ceaec --- /dev/null +++ b/home/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/home/qs/index.html b/home/qs/index.html new file mode 100644 index 0000000000..98fb3ece4d --- /dev/null +++ b/home/qs/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/img/architecture.png b/img/architecture.png new file mode 100644 index 0000000000..8896e75673 Binary files /dev/null and b/img/architecture.png differ diff --git a/img/baseUrlIssueBanner.png b/img/baseUrlIssueBanner.png new file mode 100644 index 0000000000..1a372e2144 Binary files /dev/null and b/img/baseUrlIssueBanner.png differ diff --git a/img/blog/2020-recap/datagit-rtl-screenshot.png b/img/blog/2020-recap/datagit-rtl-screenshot.png new file mode 100644 index 0000000000..fb7204f188 Binary files /dev/null and b/img/blog/2020-recap/datagit-rtl-screenshot.png differ diff --git a/img/blog/2020-recap/docusaurus-npm-trends.png b/img/blog/2020-recap/docusaurus-npm-trends.png new file mode 100644 index 0000000000..51457bc8a1 Binary files /dev/null and b/img/blog/2020-recap/docusaurus-npm-trends.png differ diff --git a/img/blog/2020-recap/docusaurus-plushie-banner.jpeg b/img/blog/2020-recap/docusaurus-plushie-banner.jpeg new file mode 100644 index 0000000000..11bda09284 Binary files /dev/null and b/img/blog/2020-recap/docusaurus-plushie-banner.jpeg differ diff --git a/img/blog/2020-recap/jest-screenshot.png b/img/blog/2020-recap/jest-screenshot.png new file mode 100644 index 0000000000..bccdca273a Binary files /dev/null and b/img/blog/2020-recap/jest-screenshot.png differ diff --git a/img/blog/2020-recap/react-native-screenshot.png b/img/blog/2020-recap/react-native-screenshot.png new file mode 100644 index 0000000000..1932b8dd43 Binary files /dev/null and b/img/blog/2020-recap/react-native-screenshot.png differ diff --git a/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png b/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png new file mode 100644 index 0000000000..4a0ed09c6e Binary files /dev/null and b/img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png differ diff --git a/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png b/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png new file mode 100644 index 0000000000..bcb903a7fb Binary files /dev/null and b/img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png differ diff --git a/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png b/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png new file mode 100644 index 0000000000..a1a2a2a1fe Binary files /dev/null and b/img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png differ diff --git a/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png b/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png new file mode 100644 index 0000000000..9d8f46cd34 Binary files /dev/null and b/img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png differ diff --git a/img/crowdin/crowdin-create-project.png b/img/crowdin/crowdin-create-project.png new file mode 100644 index 0000000000..ca7f03acf7 Binary files /dev/null and b/img/crowdin/crowdin-create-project.png differ diff --git a/img/crowdin/crowdin-download-translations-warning.png b/img/crowdin/crowdin-download-translations-warning.png new file mode 100644 index 0000000000..9a4478d966 Binary files /dev/null and b/img/crowdin/crowdin-download-translations-warning.png differ diff --git a/img/crowdin/crowdin-files-rename.png b/img/crowdin/crowdin-files-rename.png new file mode 100644 index 0000000000..92dbe882f6 Binary files /dev/null and b/img/crowdin/crowdin-files-rename.png differ diff --git a/img/crowdin/crowdin-french-translations.png b/img/crowdin/crowdin-french-translations.png new file mode 100644 index 0000000000..9bae3f735a Binary files /dev/null and b/img/crowdin/crowdin-french-translations.png differ diff --git a/img/crowdin/crowdin-hide-string.png b/img/crowdin/crowdin-hide-string.png new file mode 100644 index 0000000000..a59573748d Binary files /dev/null and b/img/crowdin/crowdin-hide-string.png differ diff --git a/img/crowdin/crowdin-settings-duplicate-strings.png b/img/crowdin/crowdin-settings-duplicate-strings.png new file mode 100644 index 0000000000..ba86adce43 Binary files /dev/null and b/img/crowdin/crowdin-settings-duplicate-strings.png differ diff --git a/img/crowdin/crowdin-source-files.png b/img/crowdin/crowdin-source-files.png new file mode 100644 index 0000000000..72ccd15c9f Binary files /dev/null and b/img/crowdin/crowdin-source-files.png differ diff --git a/img/crowdin/crowdin-translate-json.png b/img/crowdin/crowdin-translate-json.png new file mode 100644 index 0000000000..a21be180a4 Binary files /dev/null and b/img/crowdin/crowdin-translate-json.png differ diff --git a/img/crowdin/crowdin-translate-markdown.png b/img/crowdin/crowdin-translate-markdown.png new file mode 100644 index 0000000000..dfb8e43b92 Binary files /dev/null and b/img/crowdin/crowdin-translate-markdown.png differ diff --git a/img/crowdin/crowdin-upload-sources-cli.png b/img/crowdin/crowdin-upload-sources-cli.png new file mode 100644 index 0000000000..e333dc87d9 Binary files /dev/null and b/img/crowdin/crowdin-upload-sources-cli.png differ diff --git a/img/docsearch-troubleshoot-index-facets.jpg b/img/docsearch-troubleshoot-index-facets.jpg new file mode 100644 index 0000000000..e4a4906a88 Binary files /dev/null and b/img/docsearch-troubleshoot-index-facets.jpg differ diff --git a/img/docusaurus-2020-recap.png b/img/docusaurus-2020-recap.png new file mode 100644 index 0000000000..2e4d675f90 Binary files /dev/null and b/img/docusaurus-2020-recap.png differ diff --git a/img/docusaurus-slash-first-birthday.svg b/img/docusaurus-slash-first-birthday.svg new file mode 100644 index 0000000000..561a0d4bde --- /dev/null +++ b/img/docusaurus-slash-first-birthday.svg @@ -0,0 +1 @@ +Docusaurus makes 1 year!Happy Birthday Slash!From your friends atLearn more at docusaurus.io \ No newline at end of file diff --git a/img/docusaurus-social-card.png b/img/docusaurus-social-card.png new file mode 100644 index 0000000000..342d7cfe8f Binary files /dev/null and b/img/docusaurus-social-card.png differ diff --git a/img/favicon.ico b/img/docusaurus.ico similarity index 100% rename from img/favicon.ico rename to img/docusaurus.ico diff --git a/img/docusaurus.svg b/img/docusaurus.svg new file mode 100644 index 0000000000..250f2fce73 --- /dev/null +++ b/img/docusaurus.svg @@ -0,0 +1 @@ + diff --git a/img/docusaurus_keytar.svg b/img/docusaurus_keytar.svg new file mode 100644 index 0000000000..f7f324fe0b --- /dev/null +++ b/img/docusaurus_keytar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/docusaurus_speed.svg b/img/docusaurus_speed.svg new file mode 100644 index 0000000000..f619db4a6c --- /dev/null +++ b/img/docusaurus_speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/endi.jpg b/img/endi.jpg new file mode 100644 index 0000000000..b31ee596ff Binary files /dev/null and b/img/endi.jpg differ diff --git a/img/favicon/favicon.ico b/img/favicon/favicon.ico new file mode 100644 index 0000000000..eaced0fd8e Binary files /dev/null and b/img/favicon/favicon.ico differ diff --git a/img/icons/icon-128x128.png b/img/icons/icon-128x128.png new file mode 100644 index 0000000000..664a1c1da0 Binary files /dev/null and b/img/icons/icon-128x128.png differ diff --git a/img/icons/icon-144x144.png b/img/icons/icon-144x144.png new file mode 100644 index 0000000000..e48ccb4e25 Binary files /dev/null and b/img/icons/icon-144x144.png differ diff --git a/img/icons/icon-152x152.png b/img/icons/icon-152x152.png new file mode 100644 index 0000000000..d048e21c26 Binary files /dev/null and b/img/icons/icon-152x152.png differ diff --git a/img/icons/icon-192x192.png b/img/icons/icon-192x192.png new file mode 100644 index 0000000000..34660b75db Binary files /dev/null and b/img/icons/icon-192x192.png differ diff --git a/img/icons/icon-384x384.png b/img/icons/icon-384x384.png new file mode 100644 index 0000000000..93ae4b0be1 Binary files /dev/null and b/img/icons/icon-384x384.png differ diff --git a/img/icons/icon-512x512.png b/img/icons/icon-512x512.png new file mode 100644 index 0000000000..93ae4b0be1 Binary files /dev/null and b/img/icons/icon-512x512.png differ diff --git a/img/icons/icon-72x72.png b/img/icons/icon-72x72.png new file mode 100644 index 0000000000..81d75ddabb Binary files /dev/null and b/img/icons/icon-72x72.png differ diff --git a/img/icons/icon-96x96.png b/img/icons/icon-96x96.png new file mode 100644 index 0000000000..32c2f5660a Binary files /dev/null and b/img/icons/icon-96x96.png differ diff --git a/img/logo.svg b/img/logo.svg deleted file mode 100644 index 9db6d0d066..0000000000 --- a/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/img/meta_opensource_logo.svg b/img/meta_opensource_logo.svg new file mode 100644 index 0000000000..83a2175484 --- /dev/null +++ b/img/meta_opensource_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/meta_opensource_logo_negative.svg b/img/meta_opensource_logo_negative.svg new file mode 100644 index 0000000000..b36a423e3b --- /dev/null +++ b/img/meta_opensource_logo_negative.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/playgrounds/codesandbox.png b/img/playgrounds/codesandbox.png new file mode 100644 index 0000000000..b4a2a1dcac Binary files /dev/null and b/img/playgrounds/codesandbox.png differ diff --git a/img/playgrounds/stackblitz.png b/img/playgrounds/stackblitz.png new file mode 100644 index 0000000000..34faed73de Binary files /dev/null and b/img/playgrounds/stackblitz.png differ diff --git a/img/profilo_blog_post_android_ios.png b/img/profilo_blog_post_android_ios.png new file mode 100644 index 0000000000..73061e3a85 Binary files /dev/null and b/img/profilo_blog_post_android_ios.png differ diff --git a/img/profilo_blog_post_palette_website_color_picker.png b/img/profilo_blog_post_palette_website_color_picker.png new file mode 100644 index 0000000000..48c97edaf1 Binary files /dev/null and b/img/profilo_blog_post_palette_website_color_picker.png differ diff --git a/img/profilo_blog_post_photoshop_color_picker.png b/img/profilo_blog_post_photoshop_color_picker.png new file mode 100644 index 0000000000..ed5273bfce Binary files /dev/null and b/img/profilo_blog_post_photoshop_color_picker.png differ diff --git a/img/profilo_blog_post_website_final.png b/img/profilo_blog_post_website_final.png new file mode 100644 index 0000000000..3546300eba Binary files /dev/null and b/img/profilo_blog_post_website_final.png differ diff --git a/img/profilo_blog_post_website_final_docs.png b/img/profilo_blog_post_website_final_docs.png new file mode 100644 index 0000000000..3411447e38 Binary files /dev/null and b/img/profilo_blog_post_website_final_docs.png differ diff --git a/img/profilo_blog_post_website_initial.png b/img/profilo_blog_post_website_initial.png new file mode 100644 index 0000000000..88e297e217 Binary files /dev/null and b/img/profilo_blog_post_website_initial.png differ diff --git a/img/pwa_install.gif b/img/pwa_install.gif new file mode 100644 index 0000000000..d44c6198fa Binary files /dev/null and b/img/pwa_install.gif differ diff --git a/img/pwa_reload.gif b/img/pwa_reload.gif new file mode 100644 index 0000000000..683a9ca55a Binary files /dev/null and b/img/pwa_reload.gif differ diff --git a/img/slash-birth.png b/img/slash-birth.png new file mode 100644 index 0000000000..0b1e98a2f0 Binary files /dev/null and b/img/slash-birth.png differ diff --git a/img/slash-introducing.png b/img/slash-introducing.png new file mode 100644 index 0000000000..8394578868 Binary files /dev/null and b/img/slash-introducing.png differ diff --git a/img/slash-introducing.svg b/img/slash-introducing.svg new file mode 100644 index 0000000000..bb1be35ef3 --- /dev/null +++ b/img/slash-introducing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/slash-up-and-running.png b/img/slash-up-and-running.png new file mode 100644 index 0000000000..783bb9ba60 Binary files /dev/null and b/img/slash-up-and-running.png differ diff --git a/img/undraw_algolia.svg b/img/undraw_algolia.svg new file mode 100644 index 0000000000..1fbd725af4 --- /dev/null +++ b/img/undraw_algolia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/undraw_around_the_world.svg b/img/undraw_around_the_world.svg new file mode 100644 index 0000000000..264be43d1a --- /dev/null +++ b/img/undraw_around_the_world.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c49a8..0000000000 --- a/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf08f8..0000000000 --- a/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d3392..0000000000 --- a/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/img/undraw_react.svg b/img/undraw_react.svg new file mode 100644 index 0000000000..ecd5365f6b --- /dev/null +++ b/img/undraw_react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/undraw_typewriter.svg b/img/undraw_typewriter.svg new file mode 100644 index 0000000000..28bfa7ef1f --- /dev/null +++ b/img/undraw_typewriter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/undraw_version_control.svg b/img/undraw_version_control.svg new file mode 100644 index 0000000000..4feb250895 --- /dev/null +++ b/img/undraw_version_control.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html index 5322d5fac5..389c53dd68 100644 --- a/index.html +++ b/index.html @@ -2,13 +2,57 @@ - -Hello from My Site | My Site - - - + +Build optimized websites quickly, focus on your content | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -

My Site

Dinosaurs are cool

Easy to Use

Easy to Use

Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.

Focus on What Matters

Focus on What Matters

Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the docs directory.

Powered by React

Powered by React

Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer.

+

Docusaurus with KeytarBuild optimized websites quickly, focus on your content

Powered by MDX

Powered by MDX

Save time and focus on text documents. Simply write docs and blog posts with MDX, and Docusaurus builds them into static HTML files ready to be served. You can even embed React components in your Markdown thanks to MDX.

Built Using React

Built Using React

Extend and customize your project's layout by writing React components. Leverage the pluggable architecture, and design your own site while reusing the same data created by Docusaurus plugins.

Ready for Translations

Ready for Translations

Localization comes out-of-the-box. Use git, Crowdin, or any other translation manager to translate your docs and deploy them individually.

Document Versioning

Document Versioning

Support users on all versions of your project. Document versioning helps you keep documentation in sync with project releases.

Content Search

Content Search

Make it easy for your community to find what they need in your documentation. We proudly support Algolia documentation search.

Check it out in the intro video

Loved by many engineers

Mark Erikson
Mark Erikson@acemarke
We've been using Docusaurus for all the Redux org docs sites for the last couple years, and it's great! We've been able to focus on content, customize some presentation and features, and It Just Works.
Supabase
Supabase@supabase
We've been using V2 since January and it has been great - we spend less time building documentation and more time building 🛳

Thanks @docusaurus team 🦖
Dr.Electron
Dr.Electron@Dr_Electron
The #IOTA wiki is now part of the @docusaurus showcase. We even have the honor of being a favorite. We are really happy that we found this project. It helped us a lot to improve the documentation. And we still have a lot of plans with things like tutorials, versioning and i8n.
Maël
Maël@arcanis
I've used Docusaurus for two websites this year, and I've been very happy about the v2. Looks good, and simple to setup.
Paul Armstrong
Paul Armstrong@paularmstrong
Continue to be impressed and excited about Docusaurus v2 alpha releases. Already using the sidebar items generator to help monorepo workspace devs create their own doc pages without any configuration needed.
Kent C. Dodds
Kent C. Dodds@kentcdodds
http://testing-library.com just got a nice update! We're now on the latest version of @docusaurus thanks to @matanbobi, @TensorNo, and @nickemccurdy 💙

My favorite new feature: dark mode!! 🌑/☀️
Max Lynch
Max Lynch@maxlynch
Docusaurus v2 doubles as a really nice little static site generator tool for content-focused sites, love it 👏
Debbie O'Brien
Debbie O'Brien@debs_obrien
Been doing a lot of work with @docusaurus lately and I have to say it is really fun to work with. A lot of really cool features. I love that you can easily reuse content by creating a markdown file and importing it as a component. 🔥
swyx
swyx@swyx
Happy to share Temporal's first open source sponsorship — of @docusaurus!

@temporalio uses it for http://docs.temporal.io, and it has been a huge boon to our docs team. @sebastienlorber is an incredible steward of the project, support it if you can!
Christopher "vjeux" Chedeau
Lead Prettier Developer

I've helped open source many projects at Facebook and every one needed a website. They all had very similar constraints: the documentation should be written in markdown and be deployed via GitHub pages. I’m so glad that Docusaurus now exists so that I don’t have to spend a week each time spinning up a new one.

Hector Ramos
Lead React Native Advocate

Open source contributions to the React Native docs have skyrocketed after our move to Docusaurus. The docs are now hosted on a small repo in plain markdown, with none of the clutter that a typical static site generator would require. Thanks Slash!

Ricky Vetter
ReasonReact Developer

Docusaurus has been a great choice for the ReasonML family of projects. It makes our documentation consistent, i18n-friendly, easy to maintain, and friendly for new contributors.

\ No newline at end of file diff --git a/katex/fonts/KaTeX_AMS-Regular.woff2 b/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000..0acaaff03d Binary files /dev/null and b/katex/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/katex/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000000..f390922ece Binary files /dev/null and b/katex/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000..75344a1f98 Binary files /dev/null and b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000..395f28beac Binary files /dev/null and b/katex/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/katex/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000000..735f6948d6 Binary files /dev/null and b/katex/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Main-Bold.woff2 b/katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000..27be451613 Binary files /dev/null and b/katex/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/katex/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 0000000000..5931794de4 Binary files /dev/null and b/katex/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/katex/fonts/KaTeX_Main-Italic.woff2 b/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000..b50920e138 Binary files /dev/null and b/katex/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/katex/fonts/KaTeX_Main-Regular.woff2 b/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000..eb24a7ba28 Binary files /dev/null and b/katex/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000..59e91172b1 Binary files /dev/null and b/katex/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/katex/fonts/KaTeX_Math-Italic.woff2 b/katex/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000000..a0df10a526 Binary files /dev/null and b/katex/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000..cfaa3bda59 Binary files /dev/null and b/katex/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/katex/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000..349c06dc60 Binary files /dev/null and b/katex/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/katex/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000..a90eea85f6 Binary files /dev/null and b/katex/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Script-Regular.woff2 b/katex/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000000..b3048fc115 Binary files /dev/null and b/katex/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Size1-Regular.woff2 b/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000..c5a8462fbf Binary files /dev/null and b/katex/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Size2-Regular.woff2 b/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000..e1bccfe240 Binary files /dev/null and b/katex/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Size3-Regular.woff2 b/katex/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000000..249a286622 Binary files /dev/null and b/katex/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Size4-Regular.woff2 b/katex/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000000..680c130850 Binary files /dev/null and b/katex/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/katex/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000..771f1af705 Binary files /dev/null and b/katex/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/katex/katex.min.css b/katex/katex.min.css new file mode 100644 index 0000000000..a0df3e8ceb --- /dev/null +++ b/katex/katex.min.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_AMS-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/katex/fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(/katex/fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(/katex/fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/katex/fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(/katex/fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(/katex/fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/katex/fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(/katex/fonts/KaTeX_Main-Bold.woff) format("woff"),url(/katex/fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/katex/fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(/katex/fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(/katex/fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/katex/fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(/katex/fonts/KaTeX_Main-Italic.woff) format("woff"),url(/katex/fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Main-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/katex/fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(/katex/fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(/katex/fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/katex/fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(/katex/fonts/KaTeX_Math-Italic.woff) format("woff"),url(/katex/fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(/katex/fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(/katex/fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(/katex/fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(/katex/fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(/katex/fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(/katex/fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Script-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Size1-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Size2-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Size3-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Size4-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/katex/fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(/katex/fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(/katex/fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.15.2"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000000..8a08d58d2e --- /dev/null +++ b/manifest.json @@ -0,0 +1,57 @@ +{ + "name": "Docusaurus", + "short_name": "Docusaurus", + "theme_color": "#2196f3", + "background_color": "#424242", + "display": "standalone", + "scope": "./", + "start_url": "./index.html", + "related_applications": [ + { + "platform": "webapp", + "url": "https://docusaurus.io/manifest.json" + } + ], + "icons": [ + { + "src": "img/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "img/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "img/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "img/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "img/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "img/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "img/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "img/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/markdown-page/index.html b/markdown-page/index.html deleted file mode 100644 index 6c0beb2606..0000000000 --- a/markdown-page/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -Markdown page example | My Site - - - - - -

Markdown page example

-

You don't need React to write simple standalone pages.

- - \ No newline at end of file diff --git a/opensearch.xml b/opensearch.xml new file mode 100644 index 0000000000..4a54a8c7e5 --- /dev/null +++ b/opensearch.xml @@ -0,0 +1,11 @@ + + + Docusaurus + Search Docusaurus + UTF-8 + https://docusaurus.io/img/docusaurus.ico + + + https://docusaurus.io/ + \ No newline at end of file diff --git a/pure-html.html b/pure-html.html new file mode 100644 index 0000000000..a7605f8daf --- /dev/null +++ b/pure-html.html @@ -0,0 +1,14 @@ + + + + Purely HTML page | Docusaurus + + + + +

Not part of the Docusaurus app

+
+ This page is purely HTML, placed in the static folder +
+ + diff --git a/search.html b/search.html new file mode 100644 index 0000000000..a3a1cd78e1 --- /dev/null +++ b/search.html @@ -0,0 +1,58 @@ + + + + + +Search the documentation | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/search.html.html b/search.html.html new file mode 100644 index 0000000000..dd7e08a80c --- /dev/null +++ b/search.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/showcase.html b/showcase.html new file mode 100644 index 0000000000..529e3908bb --- /dev/null +++ b/showcase.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus Site Showcase | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus Site Showcase

List of websites people are building with Docusaurus

🙏 Please add your site

Filters

351 sites

Our favorites

  • The best search experience for docs, integrates in minutes, for free

  • A persian tutorial website strive to make quality education for everyone.

  • The most developer friendly live video SDK

  • All the tools you need to start building a modern WordPress project, using all the latest development tools.

  • The fastest way to create a GraphQL API from your data with authorization, real-time subscriptions, and more for free.

  • An open source UI toolkit for building performant, high-quality mobile and desktop apps using web technologies.

  • Documentation and wiki for the IOTA project

  • A delightful JavaScript Testing Framework with a focus on simplicity.

  • Resources for data scientists and engineers, authored in jupyter notebooks using nbdoc and docusaurus.

  • Piano Analytics SDKs documentation for developers

  • The open source search engine on object storage with subsecond latency

  • A framework for building native apps using React

  • The Home of Redis Developers

  • A React-based framework for building data-intensive applications in no time!

  • The GraphQL client that scales with you

  • A lightweight open source private npm proxy registry

  • Next-gen browser and mobile automation test framework for Node.js

All sites

  • A 30-Day Developer Guide to Azure Static Web Apps

  • Docs and blogs about development and study

  • Developer Wiki and Blog

  • Global State and Logic Framework for reactive Applications

  • Local, reliable, fast and private Audio and IoT gate.

  • French Discord server that helps young people who have been bullied or feel bad about themselves

  • Personal frontend blog for learning

  • A Dynamic, Real-Time, High-Performance Cloud-Native API Gateway

  • Functional programming library for Salesforce Apex

  • Appcircle Docs

    Appcircle is an easy-to-setup mobile CI/CD platform.

  • Enterprise-grade framework for Apache Airflow. Production-ready Airflow environments with just a few clicks

  • Atlas

    Atlas CLI helps developers manage their database schemas by applying DevOps principles.

  • A multi-purpose Discord bot with many features and API integrations that will enhance your Discord experience.

  • Solana blockchain non-custodial wallet that connects you to Web3 dapps, DeFi, GameFi and NFT marketplaces.

  • The AvN Gateway API is the fastest way to interact with the Aventus Network Blockchain.

  • Awe framework, Build light-weight and functional websites quickly

  • Axioms Developer Hub and Documentation Portal

  • Add powerful communications capabilities to your app from the only API platform with it’s own tier-1 carrier network.

  • Barklarm

    Open Source multiplatform alarm and build status monitoring application

  • Batect

    The fast, consistent way to run your development and testing tasks everywhere.

  • A stream processor for mundane tasks

  • A professional, desktop grade terminal for iOS

  • Desenvolvimento de software, carreira, dicas de livros e muito JavaScript!

  • A blog written using Docasaurus.

  • Build Chatbots and Conversational Apps Using React

  • Enterprise Readiness made simple

  • Boyka-Framework

    Ultimate test automation for testing any application on any platform

  • The new way to operate & manage your Cloud: visually.

  • Brobot

    Testable state-based GUI automation.

  • A personal wiki by Bruce Song

  • Track performance budgets & prevent unexpected bloat in your app

  • The note taking app Linwood Butterfly

  • A Powerful Chaos Engineering Platform for Kubernetes.

  • Charles Ancheta's Blog and Portfolio Website

  • A full suite of developer tools for any chat use-case.

  • Documentation for the Clarity machine learning challenges for improving hearing aid signal processing

  • An extensible API and UI platform for infrastructure tooling

  • codehooks

    Fast Serverless Backend made Easy

  • The Home of Simplified Web Development Tutorials

  • The syllabus for CodeYourFuture - a free code school for refugees, asylum seekers and disadvantaged people

  • Codiga Documentation

    Documentation for Codiga, your Code Analysis & Coding Assistant

  • CodingHabits

    An interactive learning environment for developers

  • Tech-based Blog, Enterprise-Grade Solutions and more...

  • A declarative UI framework for iOS

  • Computer Science Turkish Resource

    A Computer Science portal for enthusiasts.

  • A feature flag and remote configuration service.

  • Printing Pretty Tables on your console.

  • Get simplified countries, states & cities data without bloating up your database.

  • Crawlee

    Scalable web crawling, scraping and automation library for JS/Node.js

  • Set up a modern web app by running one command

  • The place where Blockchain- and Crypto developers learn, meet and grow.

  • Free and open-source multi-tenant management for Microsoft 365.

  • A website that presents daily COVID-19 statistics and news in France in the form of a daily digest.

  • daily.dev

    Official product documentation for daily.dev

  • A new way of building serverless backends, with no infra, framework or deployment nightmares.

  • Static analysis tool that helps analyse and improve Dart code quality.

  • Deploy & Develop Kubernetes Apps

  • DevTomek

    A Polish blog about programming, electronics and IoT

  • This documentation aims to comprise my learning notes on various tech subjects.

  • Open source documented notes for Digital Support Services.

  • The resource and project planning solution for the Microsoft Dynamics product suite. Stop puzzling and start planning.

  • DipScope

    Open source tools to develop high quality software

  • Discord API Types

    Discord API Types

  • All Discord resources in one place

  • A divine collection of awesome web-related Node.js modules

  • Djamaile Rahamat Blog on making cool stuff

  • Dojo Documentation

    Take faster card payments with Dojo.

  • Rich Text Editor Framework for React

  • Server-side component framework

  • Dynamoose

    A modeling tool for Amazon's DynamoDB

  • JavaScript dates library

  • JWT creation and validation library

  • Server control panel based on Docker

  • Catalog of free educational resources. STEM, ESL and more.

  • Embedded IDE

    A c/c++ development environment for microcontrollers

  • Open source framework for running applications in TEEs (Trusted Execution Environments) based on WebAssembly.

  • Ent

    An entity framework for Go

  • Front-end developer blog

  • Combine all your business tools into one streamlined and integrated open-source framework

  • Faster embedded JS template engine in TypeScript

  • An open-source e-commerce platform with Node and React

  • Extracranial

    Sunghyun Cho's Second Brain on the Web.

  • The adaptive interface system for modern web experiences.

  • Fathym Blog

    Fathym deploys, hosts and integrates your favorite tech stacks.

  • An internationalization framework

  • Blogs and videos about frontend development

  • Single-file PHP app that can be dropped into any folder, instantly creating a gallery of files and folders.

  • Firebase/Firestore based headless CMS

  • TypeScript Wrapper for Firestore

  • Open Source Feature Flag and Remote Config Service

  • Forums made simple. Modern, fast, and free!

  • Modern flat design framework for the web — inspired by Duolingo design system.

  • Business Intelligence and Data Analytics platform

  • Extensible mobile app debugger

  • Application architecture for building user interfaces

  • Node.JS framework for building web applications

  • Internationalize your web apps on the client & server.

  • Formiz

    React forms with ease! Composable, headless & with built-in multi steps

  • French software factory based entirely on Free Software.

  • Front End Interview Handbook

    Free curated tech interview preparation materials for busy software engineers

  • A blog only Docusaurus site showcasing cloud, data and full stack design patterns and tutorials

  • GameCI

    Open source continuous integration for games

  • Learn to code yourself by exploring documentations, try GeekyWeb once

  • A divine template/print formatter engine

  • A privacy-first, open-source home assistant

  • A Docker-powered stateless API for PDF files

  • Generate human-readable HTML timetables from GTFS

  • A toolkit to automate & enhance your workflow

  • Hanabi

    A list of Hanabi card game strategies

  • My personal website with a blog section to record all tech-related issues I encountered.

  • Harmonoid

    A beautiful material-design cross platform music player

  • Harvest CLI

    A CLI for Harvest's time tracking software

  • A help portal for Hashnode users

  • hCaptcha.com anti-bot service docs

  • JavaScript engine optimized for React Native

  • HiCA

    Free SSL Certificate Provider, supports ACME

  • Homarr

    Homarr is a simple and lightweight homepage for your server.

  • All you need to start developing

  • Decode an HTTP request into a custom struct in Go

  • The portfolio of Massoud Maboudi, Full Stack Developer

  • i18n-tools

    CLI to make common operations around i18n files simpler

  • Front end engineer personal website

  • iOS Development Bridge

  • Indent provides on-demand access control for cloud apps and infrastructure.

  • Infinity Works Company Handbook

    An online company handbook, acting as a one-stop shop for all relevant information needed for colleagues.

  • OHIP Billing Agent

  • IsaacScript

    Write Binding of Isaac: Repentance mods with TypeScript

  • Jest Preview

    Debug your Jest tests. Effortlessly.

  • A minimalist personal website

  • The blog of John Reilly ❤️🌻

  • A personal website

  • A lightweight tool to get an AI Infrastructure Stack up in minutes not days.

  • Kanekotic's Page

    List of open-source projects and blog

  • KaustubhK24 blog + Portfolio website

  • A Software Engineer's blog, documentation and project portfolio.

  • Keebio Documentation

    Mechanical keyboard build guides and keyboard reprogramming info

  • Free-to-Play social MMO game that stimulates strategic thinking for achieving goals.

  • Kishan Gajera

    Personal portfolio and blog of Kishan Gajera

  • Konkatsu Strategy Guide

    Support konkatsu (marriage hunting) in Japan

  • Organize Kubernetes manifests in JavaScript

  • Kotlin test framework

  • A kubernetes (k8s) operator to suspend your pods when no-one using them to save energy

  • A modern application engine that adapts to your application's needs, not the other way around.

  • A Software Enthusiast's blog, Sharing and Learning

  • monitor & detect crashes in your Kubernetes(K8s) cluster instantly

  • A book for LabVIEW Programming

  • A handbook about coding

  • Your open-source personal assistant.

  • A fast modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository.

  • LifeOmic PHC Documentation

    Help and information for LifeOmic PHC

  • Interactive videos in React

  • Open source, scalable, real-time audio and video rooms over WebRTC

  • lsfusion platform documentation

    A declarative open-source language-based platform for information systems development

  • Creation of technical trading tools

  • A new concept of mailto and tel links

  • Interactive, extendable street imagery map experiences

  • IT enthusiast that loves to write code, try new things and share knowledge.

  • Infrastructure for User-Generated Video content

  • Platform to deploy static sites, frontend applications and hosted forms

  • Memgraph is the platform for graph computation on streaming data

  • Mentorship Guide

    Making mentorship accessible to all, for mentors and mentees.

  • Personal website with blogs and notes, recording my study and life

  • A personal blog to record open source community contributions and open source projects

  • The JavaScript bundler for React Native

  • The simplest way to develop and operate modern applications on Kubernetes.

  • TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns.

  • Conversion optimisation and web analytics agency from Melbourne, Australia.

  • Fully Open Source ASP.Net Core / Dotnet Core CMS UI Toolkit

  • Modrinth Documentation

    The documentation for Modrinth, an open source Minecraft modding platform

  • A non-profit project to accurately and affordably estimate greenhouse gas emissions and removals from the AFOLU sector

  • A lightweight Web IDE UI framework built with React.js and inspired by VS Code.

  • Moodle Developer Resources

    Moodle - the world's open source learning platform

  • Create beautiful immersive React.js animations using shared components

  • MutableSecurity

    Platform for automating the lifecycle of cybersecurity solutions

  • Nango

    Open-source infrastructure for native integrations in SaaS products

  • The next-generation multiplayer open world sandbox game.

  • NAYAtel

    Documentation for TAC Department

  • Neo Blockchain Developer Portal

    A collection of tools and resources to help you build outstanding applications on Neo

  • Your favorite operating systems in one place!

  • An educational site for monitoring and troubleshooting systems

  • An open source CLI to work with Redux + Redux Saga

  • An open source serverless authentication library for next.js

  • The Open Source Firebase Alternative with GraphQL

  • Nikita's Everything I Know Wiki

    Digital wiki with notes/links.

  • An open-source toolsets help to build cloud-native applications easier and faster.

  • Talk to your Serial devices

  • High-performance WPF node editor component designed for MVVM.

  • The open-source notification infrastructure for developers

  • OKP4

    Documentation portal for the OKP4 blockchain

  • The Universal Data Layer

  • Modern, open-source community platform.

  • Authentication, authorization, access control, and delegation (OAuth2 & OpenID Connect) services and APIs

  • OSS Insight provides open source software insight and compares projects and tools

  • Ouch1978

    Personal site of @Ouch1978

  • A Rust ORM based on tokio-postgres and refinery

  • Projects showcase and documentation of software developer

  • Paubox API Documentation

  • Paweł Kosiec

    Personal website and blog of Paweł Kosiec, Full-stack Cloud Developer.

  • A multi-platform C++ library for capturing, parsing and crafting of network packets

  • A wiki and web posts archive about Purrnelope's Country Club project.

  • Free and Open source PDF generator library fully written in TypeScript coming with a React based UI template editor

  • A design-system-driven UI framework that helps developer build beautiful and accessible mobile apps right out of the box

  • Peradaban is a Discord Server Bots made with NAFF designed only for Warung International Discord Server

  • Build internal web apps quickly in the language you already know

  • A very good full stack development teaching website

  • Pipeline UI Documentation

  • A simple, open source, lightweight (< 1 KB) and privacy-friendly alternative to Google Analytics

  • Fast, disk space efficient package manager

  • Polkadot Wiki

    The central source of truth for Polkadot Network

  • Deploy with confidence. Been stung by a poorly tested database migration? We won't let it happen again.

  • An example of personal wiki

  • PowerPoint JavaScript Library

  • PREFS Python library website and documentation

  • An Integration Platform for B2B Software Companies

  • An Android performance library

  • Pure.css

    A set of small, responsive CSS modules that you can use in every web project.

  • A performant type-checker for Python 3

  • An open source run-tracker for algorithm and performance engineering with rich visualizations

  • An all-in-one Static Web solution and global Content Delivery Network

  • A cloud native multi cloud application management platform

  • A suite of mobile apps to leverage the full potential of your Raspberry Pi effortlessly.

  • Unopinionated Accessible React Tree Component with Multi-Select and Drag-And-Drop

  • A library that provides accessible UI primitives for React Native apps.

  • A template for building solid applications with separation of concerns between UI, state management, and business logic.

  • Cross Platform React Native UI Toolkit

  • The missing React Native UI Kit for iOS.

  • React Native's Animated library reimplemented

  • The hackable, full-featured Open Source HTML rendering solution for React Native.

  • Helps you to write better tests with less effort.

  • Routing and navigation for your React Native apps

  • Official React bindings for Redux

  • Chat UI package for React

  • React components for Leaflet maps

  • 3D animated react button component with progress bar

  • A workshop about building realtime web applications with WebSockets and WebRTC.

  • A JavaScript package for fetching reddit images, memes, wallpapers and more

  • CSS Gradient Editor

  • A Predictable State Container for JS Apps

  • Build redux logic, without getting nervous 😬

  • Redux best practices without the boilerplate in less than 2kb

  • The editor that makes ProseMirror fun to use for React developers

  • Write videos programmatically in React

  • The missing constructor for creating safe async iterators

  • The library to build browser based 3D models with code.

  • Resoto

    Open-source cloud infrastructure management tool—find leaky resources, manage quota limits, detect drift, and clean up!

  • An open source framework for developing servers for real-time applications and games

  • Rokt Docs

    Rokt's product documentation

  • Supercharge your components with this collection of React hooks.

  • Rowy Docs

    Open-source low-code platform for Firebase, Cloud Functions and GCP

  • Application protocol providing Reactive Streams semantics.

  • Run IaC Anywhere with Ease

  • A cloud-based job manager that integrates your devices

  • Sado0823's Blog and Portfolio Website

  • Saleor Documentation

  • The one-stop shop for developing and extending SAP applications in the cloud.

  • A next-gen object-oriented Discord.js bot framework.

  • Enhances built-in Sass modules with additional functions and adds modules for handling breakpoints and exceptions.

  • A PHP framework to create MVC plugins for WordPress

  • Seaography is a GraphQL framework for building GraphQL resolvers using SeaORM entities.

  • A relational ORM to help you build web services in Rust with the familiarity of dynamic languages.

  • We help developers in building data intensive applications in Rust, such as web services, command line tools or apps.

  • Sensory Percussion help

    On-line manual for Sensory Percussion, a music production tool for electronic drums.

  • Automation toolkit for creating repeatable, predictable, and defensible end-to-end forensic and ediscovery workflows.

  • Browse the latest docs, including tutorial guides, sample code, product articles, and API references

  • ShellHub Documentation

    A centralized SSH server for the the edge and cloud computing

  • The cloud video editing API

  • An open source model-based testing tool for web applications

  • Open source Application Performance Monitoring (APM), observability, and troubleshooting tool

  • A javascript router for front-end microservices

  • A smart contract documentation visualizer for Solidity ABI interfaces.

  • Webpage for an open source, telemetry-free Android web browser

  • Turning passions into careers

  • Drop-in replacement for embed-friendly websites (and à la carte APIs for detecting and parsing them)

  • Simplifying data curation for researchers funded by the NIH SPARC initiative

  • Startup developing open-source tools to make cloud infrastructure searchable and accessible.

  • Powerful CLI tool to take control of the Spotify client.

  • A Client for the Spotify Web API, written in C#/.NET

  • DataFrames meet SQL, in the browser

  • SR50 Finance

    Reference handbook for personal finance

  • A data centric approach to provision, querying, and management of cloud infra and SaaS across multiple clouds.

  • Cloud infra and SaaS provider documentation for StackQL providers.

  • StarfishQL is experimental graph database and query engine to enable graph analysis and visualization on the web.

  • Mutation testing for JavaScript, .NET and JVM

  • A CSS preprocessor made for components

  • Webhooks as a Service

  • SweetCode company website and documentation for the Pixel Manager for WooCommerce

  • A performant and distributed state library for creating reusable React state logic by synergyzing atomar context pieces

  • Programmer-oriented Regular Expressions library for PHP

  • Takken.io

    Webber's personal website

  • Learning made easy without ADS and trackers, Clear concepts at a glance, and Get access to quality study materials.

  • A web developers personal blog and portfolio helping other developers with tips

  • An open cross-end and cross-frame solution

  • A JavaScript SDK for building native mobile Ethereum dapps with React Native

  • Build an optimized, secure, and frontend-independent application for multi-platform deployment.

  • Tech Interview Handbook

    Free curated tech interview preparation materials for busy software engineers.

  • Learn full stack web development from tutorials and blog posts

  • Simple and complete testing utilities that encourage good testing practices

  • A Podcast from Facebook Open Source

  • The Fundraising Lore

    A guide to help founders successfully raise early-stage VC financing

  • A website for co-created books by TiDB Community users.

  • Personal website of Tinaël Devresse, a blog about anything that crosses my mind which I think could interest y'all.

  • Toggle

    Open Source real-time feature flags deployment without need of a server with SDK

  • Open-source low-code platform to build & deploy internal tools with minimal engineering effort.

  • Tremor Event Processing Engine

  • IM Application which build for TRPG, like slack and discord

  • TSEI.JP

    TSEI.JP personal website, articles and docs

  • A tool to maintain and interact with Xcode projects at scale

  • A set of React libraries for building forms

  • A feature management solution.

  • A business automation platform that liberates users from repetitive tasks.

  • Vantevo Analytics

    The most complete and secure Google Analytics alternative.

  • A web3 data storage and sharing API

  • A toolkit for virtual photography in Unreal Engine.

  • Vishal Gandhi

    The Data Column - Blog by Vishal Gandhi

  • Wearables and Lab test API for digital health companies.

  • A cross-platform native desktop app library

  • APIs and devtools for implementing authorization and access control.

  • A DSL for building full-stack web apps with less boilerplate.

  • Serverless application framework and CMS for building full-stack applications, GraphQL APIs, websites & microservices.

  • Wener Live & Life

    Notes, Stories, Awesomes

  • Whirl's Personal Website and Blog

  • Wings

    Wings is a modern website-as-service for progressive campaigns

  • WIZnet

    Documentation for various WIZnet products

  • A simple CI engine with great extensibility.

  • WPShop

    Docs site for the ShopWP WordPress plugin

  • Xiaohai's Mind Palace

    A place for organizing notes, writing blogs, and showcasing projects.

  • A fully Chinese Discord bot with epic features that makes Discord more than just chatting platform.

  • YepCode Docs

    Docs for the all-in-one platform that connects your services and APIs

  • YepCode Recipes

    Recipes for the all-in-one platform that connects your services and APIs

  • Yew

    Documentation of Yew web framework

  • Zondax Documentation

    Building back-end tech solutions for the Web3 Space.

  • Open source framework for leveraging data and applications in z/OS

  • 前端大刘

    Record and share to make progress every day!

+ + \ No newline at end of file diff --git a/showcase.html.html b/showcase.html.html new file mode 100644 index 0000000000..2a304f7bc3 --- /dev/null +++ b/showcase.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index ec9c42d8a7..40bc1db12a 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://your-docusaurus-site.example.com/blogweekly0.5https://your-docusaurus-site.example.com/blog/archiveweekly0.5https://your-docusaurus-site.example.com/blog/first-blog-postweekly0.5https://your-docusaurus-site.example.com/blog/long-blog-postweekly0.5https://your-docusaurus-site.example.com/blog/mdx-blog-postweekly0.5https://your-docusaurus-site.example.com/blog/tagsweekly0.5https://your-docusaurus-site.example.com/blog/tags/docusaurusweekly0.5https://your-docusaurus-site.example.com/blog/tags/facebookweekly0.5https://your-docusaurus-site.example.com/blog/tags/helloweekly0.5https://your-docusaurus-site.example.com/blog/tags/holaweekly0.5https://your-docusaurus-site.example.com/blog/welcomeweekly0.5https://your-docusaurus-site.example.com/markdown-pageweekly0.5https://your-docusaurus-site.example.com/docs/category/tutorial---basicsweekly0.5https://your-docusaurus-site.example.com/docs/category/tutorial---extrasweekly0.5https://your-docusaurus-site.example.com/docs/introweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/congratulationsweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/create-a-blog-postweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/create-a-documentweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/create-a-pageweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/deploy-your-siteweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-basics/markdown-featuresweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-extras/manage-docs-versionsweekly0.5https://your-docusaurus-site.example.com/docs/tutorial-extras/translate-your-siteweekly0.5https://your-docusaurus-site.example.com/weekly0.5 \ No newline at end of file +https://docusaurus.io/bloghttps://docusaurus.io/blog/2017/12/14/introducing-docusaurus2024-03-20https://docusaurus.io/blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus2024-03-20https://docusaurus.io/blog/2018/09/11/Towards-Docusaurus-22024-03-20https://docusaurus.io/blog/2018/12/14/Happy-First-Birthday-Slash2024-03-20https://docusaurus.io/blog/2019/12/30/docusaurus-2019-recap2024-03-20https://docusaurus.io/blog/2020/01/07/tribute-to-endi2024-03-20https://docusaurus.io/blog/2021/01/19/docusaurus-2020-recap2024-03-20https://docusaurus.io/blog/2021/03/09/releasing-docusaurus-i18n2024-03-20https://docusaurus.io/blog/2021/05/12/announcing-docusaurus-two-beta2024-03-20https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration2024-03-20https://docusaurus.io/blog/2022/01/24/docusaurus-2021-recap2024-03-20https://docusaurus.io/blog/2022/08/01/announcing-docusaurus-2.02024-03-20https://docusaurus.io/blog/2022/09/01/docusaurus-2.12024-03-20https://docusaurus.io/blog/archivehttps://docusaurus.io/blog/page/2https://docusaurus.io/blog/page/3https://docusaurus.io/blog/page/4https://docusaurus.io/blog/page/5https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v32024-03-20https://docusaurus.io/blog/releases/2.22023-04-21https://docusaurus.io/blog/releases/2.32023-09-15https://docusaurus.io/blog/releases/2.42023-09-15https://docusaurus.io/blog/releases/3.02023-11-23https://docusaurus.io/blog/releases/3.12024-01-05https://docusaurus.io/blog/releases/3.22024-03-29https://docusaurus.io/blog/tagshttps://docusaurus.io/blog/tags/adoptionhttps://docusaurus.io/blog/tags/betahttps://docusaurus.io/blog/tags/birthhttps://docusaurus.io/blog/tags/bloghttps://docusaurus.io/blog/tags/documentationhttps://docusaurus.io/blog/tags/docusaurushttps://docusaurus.io/blog/tags/endihttps://docusaurus.io/blog/tags/i-18-nhttps://docusaurus.io/blog/tags/maintenancehttps://docusaurus.io/blog/tags/newhttps://docusaurus.io/blog/tags/profilohttps://docusaurus.io/blog/tags/recaphttps://docusaurus.io/blog/tags/releasehttps://docusaurus.io/blog/tags/release/page/2https://docusaurus.io/blog/tags/release/page/3https://docusaurus.io/blog/tags/searchhttps://docusaurus.io/blog/tags/tributehttps://docusaurus.io/blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing2023-10-26https://docusaurus.io/changeloghttps://docusaurus.io/changelog/2.0.0https://docusaurus.io/changelog/2.0.0-alpha.19https://docusaurus.io/changelog/2.0.0-alpha.20https://docusaurus.io/changelog/2.0.0-alpha.21https://docusaurus.io/changelog/2.0.0-alpha.22https://docusaurus.io/changelog/2.0.0-alpha.23https://docusaurus.io/changelog/2.0.0-alpha.24https://docusaurus.io/changelog/2.0.0-alpha.25https://docusaurus.io/changelog/2.0.0-alpha.26https://docusaurus.io/changelog/2.0.0-alpha.27https://docusaurus.io/changelog/2.0.0-alpha.28https://docusaurus.io/changelog/2.0.0-alpha.29https://docusaurus.io/changelog/2.0.0-alpha.30https://docusaurus.io/changelog/2.0.0-alpha.31https://docusaurus.io/changelog/2.0.0-alpha.32https://docusaurus.io/changelog/2.0.0-alpha.33https://docusaurus.io/changelog/2.0.0-alpha.34https://docusaurus.io/changelog/2.0.0-alpha.35https://docusaurus.io/changelog/2.0.0-alpha.36https://docusaurus.io/changelog/2.0.0-alpha.37https://docusaurus.io/changelog/2.0.0-alpha.38https://docusaurus.io/changelog/2.0.0-alpha.39https://docusaurus.io/changelog/2.0.0-alpha.40https://docusaurus.io/changelog/2.0.0-alpha.41https://docusaurus.io/changelog/2.0.0-alpha.43https://docusaurus.io/changelog/2.0.0-alpha.44https://docusaurus.io/changelog/2.0.0-alpha.48https://docusaurus.io/changelog/2.0.0-alpha.49https://docusaurus.io/changelog/2.0.0-alpha.50https://docusaurus.io/changelog/2.0.0-alpha.51https://docusaurus.io/changelog/2.0.0-alpha.53https://docusaurus.io/changelog/2.0.0-alpha.54https://docusaurus.io/changelog/2.0.0-alpha.55https://docusaurus.io/changelog/2.0.0-alpha.56https://docusaurus.io/changelog/2.0.0-alpha.57https://docusaurus.io/changelog/2.0.0-alpha.58https://docusaurus.io/changelog/2.0.0-alpha.59https://docusaurus.io/changelog/2.0.0-alpha.60https://docusaurus.io/changelog/2.0.0-alpha.61https://docusaurus.io/changelog/2.0.0-alpha.62https://docusaurus.io/changelog/2.0.0-alpha.63https://docusaurus.io/changelog/2.0.0-alpha.64https://docusaurus.io/changelog/2.0.0-alpha.65https://docusaurus.io/changelog/2.0.0-alpha.66https://docusaurus.io/changelog/2.0.0-alpha.67https://docusaurus.io/changelog/2.0.0-alpha.68https://docusaurus.io/changelog/2.0.0-alpha.69https://docusaurus.io/changelog/2.0.0-alpha.70https://docusaurus.io/changelog/2.0.0-alpha.71https://docusaurus.io/changelog/2.0.0-alpha.72https://docusaurus.io/changelog/2.0.0-alpha.73https://docusaurus.io/changelog/2.0.0-alpha.74https://docusaurus.io/changelog/2.0.0-alpha.75https://docusaurus.io/changelog/2.0.0-beta.0https://docusaurus.io/changelog/2.0.0-beta.1https://docusaurus.io/changelog/2.0.0-beta.10https://docusaurus.io/changelog/2.0.0-beta.11https://docusaurus.io/changelog/2.0.0-beta.12https://docusaurus.io/changelog/2.0.0-beta.13https://docusaurus.io/changelog/2.0.0-beta.14https://docusaurus.io/changelog/2.0.0-beta.15https://docusaurus.io/changelog/2.0.0-beta.16https://docusaurus.io/changelog/2.0.0-beta.17https://docusaurus.io/changelog/2.0.0-beta.18https://docusaurus.io/changelog/2.0.0-beta.19https://docusaurus.io/changelog/2.0.0-beta.2https://docusaurus.io/changelog/2.0.0-beta.20https://docusaurus.io/changelog/2.0.0-beta.21https://docusaurus.io/changelog/2.0.0-beta.22https://docusaurus.io/changelog/2.0.0-beta.3https://docusaurus.io/changelog/2.0.0-beta.4https://docusaurus.io/changelog/2.0.0-beta.5https://docusaurus.io/changelog/2.0.0-beta.6https://docusaurus.io/changelog/2.0.0-beta.7https://docusaurus.io/changelog/2.0.0-beta.8https://docusaurus.io/changelog/2.0.0-beta.9https://docusaurus.io/changelog/2.0.0-rc.1https://docusaurus.io/changelog/2.0.1https://docusaurus.io/changelog/2.1.0https://docusaurus.io/changelog/2.2.0https://docusaurus.io/changelog/2.3.0https://docusaurus.io/changelog/2.3.1https://docusaurus.io/changelog/2.4.0https://docusaurus.io/changelog/2.4.1https://docusaurus.io/changelog/2.4.2https://docusaurus.io/changelog/2.4.3https://docusaurus.io/changelog/3.0.0https://docusaurus.io/changelog/3.0.1https://docusaurus.io/changelog/3.1.0https://docusaurus.io/changelog/3.1.1https://docusaurus.io/changelog/3.2.0https://docusaurus.io/changelog/3.2.1https://docusaurus.io/changelog/page/2https://docusaurus.io/changelog/page/3https://docusaurus.io/changelog/page/4https://docusaurus.io/changelog/page/5https://docusaurus.io/changelog/V2%20Changeloghttps://docusaurus.io/examples/markdownPageExample2023-01-04https://docusaurus.io/feature-requestshttps://docusaurus.io/searchhttps://docusaurus.io/showcase2024-04-10https://docusaurus.io/tests2023-01-04https://docusaurus.io/versions2023-06-08https://docusaurus.io/community/canary2023-09-15https://docusaurus.io/community/contributing2024-01-19https://docusaurus.io/community/release-process2023-09-15https://docusaurus.io/community/resources2024-04-11https://docusaurus.io/community/support2023-01-04https://docusaurus.io/community/team2021-04-15https://docusaurus.io/docs2024-03-21https://docusaurus.io/docs/advanced2022-12-30https://docusaurus.io/docs/advanced/architecture2023-10-14https://docusaurus.io/docs/advanced/client2024-01-12https://docusaurus.io/docs/advanced/plugins2023-10-19https://docusaurus.io/docs/advanced/routing2024-04-05https://docusaurus.io/docs/advanced/ssg2023-09-15https://docusaurus.io/docs/api/docusaurus-config2024-01-04https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin2023-01-19https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin/no-html-links2023-03-16https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text2022-12-30https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading2023-01-19https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages2022-12-30https://docusaurus.io/docs/api/misc/@docusaurus/logger2023-09-15https://docusaurus.io/docs/api/misc/create-docusaurus2023-09-15https://docusaurus.io/docs/api/plugin-methods2023-10-14https://docusaurus.io/docs/api/plugin-methods/extend-infrastructure2023-10-14https://docusaurus.io/docs/api/plugin-methods/i18n-lifecycles2023-10-14https://docusaurus.io/docs/api/plugin-methods/lifecycle-apis2024-03-20https://docusaurus.io/docs/api/plugin-methods/static-methods2023-10-14https://docusaurus.io/docs/api/plugins2022-12-30https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-client-redirects2024-03-05https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog2024-03-15https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs2024-03-15https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-pages2024-04-16https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-debug2024-01-12https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-google-analytics2024-01-12https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-google-gtag2024-01-12https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-google-tag-manager2024-01-12https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-ideal-image2023-10-14https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-pwa2023-10-14https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-sitemap2024-03-20https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-vercel-analytics2024-02-14https://docusaurus.io/docs/api/themes2023-09-15https://docusaurus.io/docs/api/themes/@docusaurus/theme-classic2023-10-14https://docusaurus.io/docs/api/themes/@docusaurus/theme-live-codeblock2023-10-14https://docusaurus.io/docs/api/themes/@docusaurus/theme-mermaid2023-10-14https://docusaurus.io/docs/api/themes/@docusaurus/theme-search-algolia2022-12-30https://docusaurus.io/docs/api/themes/configuration2023-10-14https://docusaurus.io/docs/blog2024-02-09https://docusaurus.io/docs/browser-support2023-09-15https://docusaurus.io/docs/category/getting-startedhttps://docusaurus.io/docs/category/guideshttps://docusaurus.io/docs/cli2024-01-04https://docusaurus.io/docs/configuration2023-10-14https://docusaurus.io/docs/create-doc2024-03-04https://docusaurus.io/docs/creating-pages2023-12-01https://docusaurus.io/docs/deployment2024-04-05https://docusaurus.io/docs/docs-introduction2023-10-19https://docusaurus.io/docs/docs-multi-instance2023-10-14https://docusaurus.io/docs/docusaurus-core2024-01-12https://docusaurus.io/docs/guides/whats-next2022-12-30https://docusaurus.io/docs/i18n/crowdin2023-12-08https://docusaurus.io/docs/i18n/git2023-10-14https://docusaurus.io/docs/i18n/introduction2022-12-30https://docusaurus.io/docs/i18n/tutorial2024-01-04https://docusaurus.io/docs/installation2023-09-28https://docusaurus.io/docs/markdown-features2023-12-16https://docusaurus.io/docs/markdown-features/admonitions2023-10-14https://docusaurus.io/docs/markdown-features/assets2023-03-16https://docusaurus.io/docs/markdown-features/code-blocks2023-10-14https://docusaurus.io/docs/markdown-features/diagrams2024-02-02https://docusaurus.io/docs/markdown-features/head-metadata2022-12-30https://docusaurus.io/docs/markdown-features/links2022-12-30https://docusaurus.io/docs/markdown-features/math-equations2023-12-22https://docusaurus.io/docs/markdown-features/plugins2024-04-11https://docusaurus.io/docs/markdown-features/react2023-11-23https://docusaurus.io/docs/markdown-features/tabs2023-04-21https://docusaurus.io/docs/markdown-features/toc2023-10-14https://docusaurus.io/docs/migration2024-04-18https://docusaurus.io/docs/migration/v22023-10-19https://docusaurus.io/docs/migration/v2/automated2024-01-12https://docusaurus.io/docs/migration/v2/manual2023-10-19https://docusaurus.io/docs/migration/v2/translated-sites2023-10-19https://docusaurus.io/docs/migration/v2/versioned-sites2023-10-19https://docusaurus.io/docs/migration/v32024-03-20https://docusaurus.io/docs/playground2021-07-28https://docusaurus.io/docs/search2024-04-18https://docusaurus.io/docs/seo2024-04-04https://docusaurus.io/docs/sidebar2023-10-14https://docusaurus.io/docs/sidebar/autogenerated2024-01-04https://docusaurus.io/docs/sidebar/items2024-01-12https://docusaurus.io/docs/sidebar/multiple-sidebars2023-10-14https://docusaurus.io/docs/static-assets2023-10-14https://docusaurus.io/docs/styling-layout2024-02-01https://docusaurus.io/docs/swizzling2023-09-15https://docusaurus.io/docs/typescript-support2023-10-14https://docusaurus.io/docs/using-plugins2024-01-04https://docusaurus.io/docs/versioning2024-01-04https://docusaurus.io/2024-03-29 \ No newline at end of file diff --git a/someFile.pdf b/someFile.pdf new file mode 100644 index 0000000000..188262276a Binary files /dev/null and b/someFile.pdf differ diff --git a/someFile.xyz b/someFile.xyz new file mode 100644 index 0000000000..188262276a Binary files /dev/null and b/someFile.xyz differ diff --git a/sw.js b/sw.js new file mode 100644 index 0000000000..4e480389e9 --- /dev/null +++ b/sw.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={18:(e,t,s)=>{s.d(t,{V:()=>n});s(487);const a=(e,...t)=>{let s=e;return t.length>0&&(s+=` :: ${JSON.stringify(t)}`),s};class n extends Error{constructor(e,t){super(a(e,t)),this.name=e,this.details=t}}},511:(e,t,s)=>{s(18),s(487)},619:(e,t,s)=>{s.d(t,{x:()=>r});s(487);const a={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},n=e=>[a.prefix,e,a.suffix].filter((e=>e&&e.length>0)).join("-"),r={updateDetails:e=>{(e=>{for(const t of Object.keys(a))e(t)})((t=>{"string"==typeof e[t]&&(a[t]=e[t])}))},getGoogleAnalyticsName:e=>e||n(a.googleAnalytics),getPrecacheName:e=>e||n(a.precache),getPrefix:()=>a.prefix,getRuntimeName:e=>e||n(a.runtime),getSuffix:()=>a.suffix}},389:(e,t,s)=>{s.d(t,{C:()=>a});s(487);const a=e=>new URL(String(e),location.href).href.replace(new RegExp(`^${location.origin}`),"")},510:(e,t,s)=>{s.d(t,{k:()=>a});s(487);const a=null},659:(e,t,s)=>{s.d(t,{V:()=>a});s(487);function a(e){return new Promise((t=>setTimeout(t,e)))}},487:()=>{try{self["workbox:core:7.0.0"]&&_()}catch(e){}},141:()=>{try{self["workbox:precaching:7.0.0"]&&_()}catch(e){}},295:(e,t,s)=>{s.d(t,{t:()=>n});s(511),s(510);var a=s(569);s(815);class n extends a.A{constructor(e,t,s){super((({url:t})=>{const s=e.exec(t.href);if(s&&(t.origin===location.origin||0===s.index))return s.slice(1)}),t,s)}}},569:(e,t,s)=>{s.d(t,{A:()=>r});s(511);var a=s(780),n=s(261);s(815);class r{constructor(e,t,s=a.g){this.handler=(0,n.M)(t),this.match=e,this.method=s}setCatchHandler(e){this.catchHandler=(0,n.M)(e)}}},85:(e,t,s)=>{s.d(t,{F:()=>i});s(511),s(389);var a=s(780),n=(s(510),s(261)),r=s(18);s(815);class i{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",(e=>{const{request:t}=e,s=this.handleRequest({request:t,event:e});s&&e.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(e=>{if(e.data&&"CACHE_URLS"===e.data.type){const{payload:t}=e.data;0;const s=Promise.all(t.urlsToCache.map((t=>{"string"==typeof t&&(t=[t]);const s=new Request(...t);return this.handleRequest({request:s,event:e})})));e.waitUntil(s),e.ports&&e.ports[0]&&s.then((()=>e.ports[0].postMessage(!0)))}}))}handleRequest({request:e,event:t}){const s=new URL(e.url,location.href);if(!s.protocol.startsWith("http"))return void 0;const a=s.origin===location.origin,{params:n,route:r}=this.findMatchingRoute({event:t,request:e,sameOrigin:a,url:s});let i=r&&r.handler;const o=e.method;if(!i&&this._defaultHandlerMap.has(o)&&(i=this._defaultHandlerMap.get(o)),!i)return void 0;let c;try{c=i.handle({url:s,request:e,event:t,params:n})}catch(e){c=Promise.reject(e)}const h=r&&r.catchHandler;return c instanceof Promise&&(this._catchHandler||h)&&(c=c.catch((async a=>{if(h){0;try{return await h.handle({url:s,request:e,event:t,params:n})}catch(e){e instanceof Error&&(a=e)}}if(this._catchHandler)return this._catchHandler.handle({url:s,request:e,event:t});throw a}))),c}findMatchingRoute({url:e,sameOrigin:t,request:s,event:a}){const n=this._routes.get(s.method)||[];for(const r of n){let n;const i=r.match({url:e,sameOrigin:t,request:s,event:a});if(i)return n=i,(Array.isArray(n)&&0===n.length||i.constructor===Object&&0===Object.keys(i).length||"boolean"==typeof i)&&(n=void 0),{route:r,params:n}}return{}}setDefaultHandler(e,t=a.g){this._defaultHandlerMap.set(t,(0,n.M)(e))}setCatchHandler(e){this._catchHandler=(0,n.M)(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new r.V("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(!(t>-1))throw new r.V("unregister-route-route-not-registered");this._routes.get(e.method).splice(t,1)}}},815:()=>{try{self["workbox:routing:7.0.0"]&&_()}catch(e){}},650:(e,t,s)=>{s.d(t,{X:()=>o});s(510);var a=s(18),n=s(569),r=s(295),i=s(703);s(815);function o(e,t,s){let o;if("string"==typeof e){const a=new URL(e,location.href);0;const r=({url:e})=>e.href===a.href;o=new n.A(r,t,s)}else if(e instanceof RegExp)o=new r.t(e,t,s);else if("function"==typeof e)o=new n.A(e,t,s);else{if(!(e instanceof n.A))throw new a.V("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=e}return(0,i.u)().registerRoute(o),o}},780:(e,t,s)=>{s.d(t,{g:()=>a});s(815);const a="GET"},703:(e,t,s)=>{s.d(t,{u:()=>r});var a=s(85);s(815);let n;const r=()=>(n||(n=new a.F,n.addFetchListener(),n.addCacheListener()),n)},261:(e,t,s)=>{s.d(t,{M:()=>a});s(511),s(815);const a=e=>e&&"object"==typeof e?e:{handle:e}},451:(e,t,s)=>{s.d(t,{_:()=>i});var a=s(619),n=s(18),r=(s(510),s(389),s(540));s(445);class i{constructor(e={}){this.cacheName=a.x.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,s="string"==typeof e.request?new Request(e.request):e.request,a="params"in e?e.params:void 0,n=new r.G(this,{event:t,request:s,params:a}),i=this._getResponse(n,s,t);return[i,this._awaitComplete(i,n,s,t)]}async _getResponse(e,t,s){let a;await e.runCallbacks("handlerWillStart",{event:s,request:t});try{if(a=await this._handle(t,e),!a||"error"===a.type)throw new n.V("no-response",{url:t.url})}catch(n){if(n instanceof Error)for(const r of e.iterateCallbacks("handlerDidError"))if(a=await r({error:n,event:s,request:t}),a)break;if(!a)throw n}for(const n of e.iterateCallbacks("handlerWillRespond"))a=await n({event:s,request:t,response:a});return a}async _awaitComplete(e,t,s,a){let n,r;try{n=await e}catch(r){}try{await t.runCallbacks("handlerDidRespond",{event:a,request:s,response:n}),await t.doneWaiting()}catch(e){e instanceof Error&&(r=e)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:s,response:n,error:r}),t.destroy(),r)throw r}}},540:(e,t,s)=>{s.d(t,{G:()=>l});s(511),s(487);function a(e,t){const s=new URL(e);for(const e of t)s.searchParams.delete(e);return s.href}class n{constructor(){this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}s(510);const r=new Set;var i=s(389),o=s(659),c=s(18);s(445);function h(e){return"string"==typeof e?new Request(e):e}class l{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new n,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let s=h(e);if("navigate"===s.mode&&t instanceof FetchEvent&&t.preloadResponse){const e=await t.preloadResponse;if(e)return e}const a=this.hasCallback("fetchDidFail")?s.clone():null;try{for(const e of this.iterateCallbacks("requestWillFetch"))s=await e({request:s.clone(),event:t})}catch(e){if(e instanceof Error)throw new c.V("plugin-error-request-will-fetch",{thrownErrorMessage:e.message})}const n=s.clone();try{let e;e=await fetch(s,"navigate"===s.mode?void 0:this._strategy.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))e=await s({event:t,request:n,response:e});return e}catch(e){throw a&&await this.runCallbacks("fetchDidFail",{error:e,event:t,originalRequest:a.clone(),request:n.clone()}),e}}async fetchAndCachePut(e){const t=await this.fetch(e),s=t.clone();return this.waitUntil(this.cachePut(e,s)),t}async cacheMatch(e){const t=h(e);let s;const{cacheName:a,matchOptions:n}=this._strategy,r=await this.getCacheKey(t,"read"),i=Object.assign(Object.assign({},n),{cacheName:a});s=await caches.match(r,i);for(const e of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await e({cacheName:a,matchOptions:n,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(e,t){const s=h(e);await(0,o.V)(0);const n=await this.getCacheKey(s,"write");if(!t)throw new c.V("cache-put-with-no-response",{url:(0,i.C)(n.url)});const l=await this._ensureResponseSafeToCache(t);if(!l)return!1;const{cacheName:u,matchOptions:d}=this._strategy,f=await self.caches.open(u),p=this.hasCallback("cacheDidUpdate"),g=p?await async function(e,t,s,n){const r=a(t.url,s);if(t.url===r)return e.match(t,n);const i=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await e.keys(t,i);for(const t of o)if(r===a(t.url,s))return e.match(t,n)}(f,n.clone(),["__WB_REVISION__"],d):null;try{await f.put(n,p?l.clone():l)}catch(e){if(e instanceof Error)throw"QuotaExceededError"===e.name&&await async function(){for(const e of r)await e()}(),e}for(const e of this.iterateCallbacks("cacheDidUpdate"))await e({cacheName:u,oldResponse:g,newResponse:l.clone(),request:n,event:this.event});return!0}async getCacheKey(e,t){const s=`${e.url} | ${t}`;if(!this._cacheKeys[s]){let a=e;for(const e of this.iterateCallbacks("cacheKeyWillBeUsed"))a=h(await e({mode:t,request:a,event:this.event,params:this.params}));this._cacheKeys[s]=a}return this._cacheKeys[s]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const s of this.iterateCallbacks(e))await s(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if("function"==typeof t[e]){const s=this._pluginStateMap.get(t),a=a=>{const n=Object.assign(Object.assign({},a),{state:s});return t[e](n)};yield a}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,s=!1;for(const e of this.iterateCallbacks("cacheWillUpdate"))if(t=await e({request:this.request,response:t,event:this.event})||void 0,s=!0,!t)break;return s||t&&200!==t.status&&(t=void 0),t}}},445:()=>{try{self["workbox:strategies:7.0.0"]&&_()}catch(e){}}},t={};function s(a){var n=t[a];if(void 0!==n)return n.exports;var r=t[a]={exports:{}};return e[a](r,r.exports,s),r.exports}s.m=e,s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce(((t,a)=>(s.f[a](e,t),t)),[])),s.u=e=>e+".sw.js",s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.p="/",(()=>{var e={179:1};s.f.i=(t,a)=>{e[t]||importScripts(s.p+s.u(t))};var t=self.webpackChunkwebsite=self.webpackChunkwebsite||[],a=t.push.bind(t);t.push=t=>{var[n,r,i]=t;for(var o in r)s.o(r,o)&&(s.m[o]=r[o]);for(i&&i(s);n.length;)e[n.pop()]=1;a(t)}})(),(()=>{s(511);var e=s(619),t=(s(510),s(18));s(487);function a(e,t){const s=t();return e.waitUntil(s),s}s(141);function n(e){if(!e)throw new t.V("add-to-cache-list-unexpected-type",{entry:e});if("string"==typeof e){const t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}const{revision:s,url:a}=e;if(!a)throw new t.V("add-to-cache-list-unexpected-type",{entry:e});if(!s){const e=new URL(a,location.href);return{cacheKey:e.href,url:e.href}}const n=new URL(a,location.href),r=new URL(a,location.href);return n.searchParams.set("__WB_REVISION__",s),{cacheKey:n.href,url:r.href}}class r{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:s})=>{if("install"===e.type&&t&&t.originalRequest&&t.originalRequest instanceof Request){const e=t.originalRequest.url;s?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return s}}}class i{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{const s=(null==t?void 0:t.cacheKey)||this._precacheController.getCacheKeyForURL(e.url);return s?new Request(s,{headers:e.headers}):e},this._precacheController=e}}let o;async function c(e,s){let a=null;if(e.url){a=new URL(e.url).origin}if(a!==self.location.origin)throw new t.V("cross-origin-copy-response",{origin:a});const n=e.clone(),r={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},i=s?s(r):r,c=function(){if(void 0===o){const e=new Response("");if("body"in e)try{new Response(e.body),o=!0}catch(e){o=!1}o=!1}return o}()?n.body:await n.blob();return new Response(c,i)}s(389);var h=s(451);class l extends h._{constructor(t={}){t.cacheName=e.x.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=!1!==t.fallbackToNetwork,this.plugins.push(l.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const s=await t.cacheMatch(e);return s||(t.event&&"install"===t.event.type?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,s){let a;const n=s.params||{};if(!this._fallbackToNetwork)throw new t.V("missing-precache-entry",{cacheName:this.cacheName,url:e.url});{0;const t=n.integrity,r=e.integrity,i=!r||r===t;if(a=await s.fetch(new Request(e,{integrity:"no-cors"!==e.mode?r||t:void 0})),t&&i&&"no-cors"!==e.mode){this._useDefaultCacheabilityPluginIfNeeded();await s.cachePut(e,a.clone());0}}return a}async _handleInstall(e,s){this._useDefaultCacheabilityPluginIfNeeded();const a=await s.fetch(e);if(!await s.cachePut(e,a.clone()))throw new t.V("bad-precaching-response",{url:e.url,status:a.status});return a}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[s,a]of this.plugins.entries())a!==l.copyRedirectedCacheableResponsesPlugin&&(a===l.defaultPrecacheCacheabilityPlugin&&(e=s),a.cacheWillUpdate&&t++);0===t?this.plugins.push(l.defaultPrecacheCacheabilityPlugin):t>1&&null!==e&&this.plugins.splice(e,1)}}l.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:e})=>!e||e.status>=400?null:e},l.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:e})=>e.redirected?await c(e):e};class u{constructor({cacheName:t,plugins:s=[],fallbackToNetwork:a=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new l({cacheName:e.x.getPrecacheName(t),plugins:[...s,new i({precacheController:this})],fallbackToNetwork:a}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const s=[];for(const a of e){"string"==typeof a?s.push(a):a&&void 0===a.revision&&s.push(a.url);const{cacheKey:e,url:r}=n(a),i="string"!=typeof a&&a.revision?"reload":"default";if(this._urlsToCacheKeys.has(r)&&this._urlsToCacheKeys.get(r)!==e)throw new t.V("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(r),secondEntry:e});if("string"!=typeof a&&a.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==a.integrity)throw new t.V("add-to-cache-list-conflicting-integrities",{url:r});this._cacheKeysToIntegrities.set(e,a.integrity)}if(this._urlsToCacheKeys.set(r,e),this._urlsToCacheModes.set(r,i),s.length>0){const e=`Workbox is precaching URLs without revision info: ${s.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return a(e,(async()=>{const t=new r;this.strategy.plugins.push(t);for(const[t,s]of this._urlsToCacheKeys){const a=this._cacheKeysToIntegrities.get(s),n=this._urlsToCacheModes.get(t),r=new Request(t,{integrity:a,cache:n,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:e}))}const{updatedURLs:s,notUpdatedURLs:a}=t;return{updatedURLs:s,notUpdatedURLs:a}}))}activate(e){return a(e,(async()=>{const e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),s=new Set(this._urlsToCacheKeys.values()),a=[];for(const n of t)s.has(n.url)||(await e.delete(n),a.push(n.url));return{deletedURLs:a}}))}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,s=this.getCacheKeyForURL(t);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(e){const s=this.getCacheKeyForURL(e);if(!s)throw new t.V("non-precached-url",{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:s},t.params),this.strategy.handle(t))}}s(650),s(569);(async()=>{const e=function(){const e=JSON.parse(new URLSearchParams(self.location.search).get("params"));return e.debug&&console.log("[Docusaurus-PWA][SW]: Service Worker params:",e),e}(),t=[{"revision":"8a78444dd541fb6a7a588277142b70b9","url":"__docusaurus/debug.html"},{"revision":"722d60381832179ee23c8c605d1e9612","url":"__docusaurus/debug.html.html"},{"revision":"5b9ad5669dc1b55a14e9dd274700e3b4","url":"__docusaurus/debug/config.html"},{"revision":"91b211429ebdec1edf81236ec47155cc","url":"__docusaurus/debug/config.html.html"},{"revision":"b10f2a1cfb77e90ffc9242ae70e4a9a4","url":"__docusaurus/debug/content.html"},{"revision":"03c020a6a88c10d1fc63e4931c1ddf21","url":"__docusaurus/debug/content.html.html"},{"revision":"3be735e5ccdc8d0f6973b5ee94793ae5","url":"__docusaurus/debug/globalData.html"},{"revision":"fcb36f60e68236a37c99029f0ce1b7ae","url":"__docusaurus/debug/globalData.html.html"},{"revision":"ad6997294a981c000bc0a4e9a2f436f5","url":"__docusaurus/debug/metadata.html"},{"revision":"cadf83ad933c1fe9e0fd258d65d7944d","url":"__docusaurus/debug/metadata.html.html"},{"revision":"ee5e773bf2c8402052798fc3dd71c525","url":"__docusaurus/debug/registry.html"},{"revision":"6eccbba191d31b6c10a8d8bcbe1befca","url":"__docusaurus/debug/registry.html.html"},{"revision":"513549fb2be4055cb7af263736d3690b","url":"__docusaurus/debug/routes.html"},{"revision":"d8df7122837b1d3f6a96d95e667f5793","url":"__docusaurus/debug/routes.html.html"},{"revision":"40821ff3ef0783a4aa65577f92c6e2e9","url":"404.html"},{"revision":"388d4864fd4955715242f77921f83e92","url":"446.sw.js"},{"revision":"a288a997d4eab307ed4201d63da2d559","url":"assets/css/styles.76313542.css"},{"revision":"92318b83f8af26676e2189dd3b339c13","url":"assets/files/_script-505c7abc900c36ef533a0383a80d96a4.js"},{"revision":"a1666baa72273e44430e4cdd2d791ad6","url":"assets/files/data-4e0ce03654809ab2cf0049cf88b37a04.json"},{"revision":"15fe752be9a9d058f651505030baf003","url":"assets/js/010225af.a5389ff3.js"},{"revision":"69bde9339a01c7cea2da324358f2b080","url":"assets/js/014bb441.59204837.js"},{"revision":"98b1fbfec0406f337b8233022440f750","url":"assets/js/016c1251.66e5f0ef.js"},{"revision":"09f38ffaf56b03f033227bba45ce2a98","url":"assets/js/017f8056.f677130c.js"},{"revision":"bf14253d47c46a3de7f897b73d0fe07a","url":"assets/js/01a85c17.d6e7fd87.js"},{"revision":"559ee8ae8e58c48ab5a604a9b9126618","url":"assets/js/028951d7.7a3aa692.js"},{"revision":"998fa848186cce9825b7b38c86e4d137","url":"assets/js/02e1f9a9.adf45606.js"},{"revision":"1bf3d4b69ee77e32b545eb53ec012814","url":"assets/js/03a06760.b6e22677.js"},{"revision":"fde8dd1612402956dec36f3ab7b17438","url":"assets/js/03f86864.2516ab6a.js"},{"revision":"4355b4ba9c0a5c370ca91cf318461707","url":"assets/js/048b0d50.9f462b00.js"},{"revision":"1c2166fb1fa17624c56091e6cf641c43","url":"assets/js/060daea9.e59b100e.js"},{"revision":"5cfad65d0123927fdcef9a0e65b13f34","url":"assets/js/06c6ffc3.955066a7.js"},{"revision":"9c062fc4325f28ce234058e641649f47","url":"assets/js/072728dc.d8faff6c.js"},{"revision":"45b4f673acb24d54921b470cd9e99db4","url":"assets/js/07d8cde9.e6bb1f93.js"},{"revision":"7a24c9596ab226a2fd0dcf0e78adf5b4","url":"assets/js/07e02e06.36631e65.js"},{"revision":"8435a4097fe6024f4efe01e48e5736c3","url":"assets/js/08b2e33e.7d6ae115.js"},{"revision":"6c2544abc9d2698f12b8fe2bff783ab6","url":"assets/js/08eb0f2d.97c644b7.js"},{"revision":"3fbded098ed261d569dc87d8babf1a2d","url":"assets/js/090b93b4.a5c9059f.js"},{"revision":"cdfcf998e48f09698cd0562ed141d0e2","url":"assets/js/0938a5e1.42c52b23.js"},{"revision":"6294a081e12bec1303980bba89493e43","url":"assets/js/09b59f10.b39a6c93.js"},{"revision":"eb3e185ac21ed87083d2bfb84959e034","url":"assets/js/09de563b.add16e75.js"},{"revision":"ab56ddc1ec8e8a195d8f0310689dbc18","url":"assets/js/09f49407.cacb86d2.js"},{"revision":"a614343f1dde92240ff2c587822b7b35","url":"assets/js/0a544fe9.ace0134d.js"},{"revision":"ed12fe8ccde0a21b3e3c526073cf8979","url":"assets/js/0a818389.c72b4779.js"},{"revision":"6454cda4a26afd3f9c8cbb6adf45689a","url":"assets/js/0af1b9a1.a5c2f22a.js"},{"revision":"39733bd03ef279958da5d7624640c97a","url":"assets/js/0b6cd89a.baa8fb50.js"},{"revision":"c737f7b97da44524dae1ccaddd21273d","url":"assets/js/0b7c2a4a.eef7ffe9.js"},{"revision":"c58f63f783bdf84ad270e9e3eef55226","url":"assets/js/0b899567.e413dd2c.js"},{"revision":"5e45bc0743e056f7ad1d4fbe5ffce61c","url":"assets/js/0bc851e0.4433ddd3.js"},{"revision":"7919d175a412f6cf7df45b008b44df26","url":"assets/js/0bdaac98.d6cfb712.js"},{"revision":"df7d7c08f20d8a355c099ef68325129d","url":"assets/js/0c7845dd.10da5707.js"},{"revision":"dad006a285d3b35efb79b3a55744889d","url":"assets/js/0e4d8110.a815cf65.js"},{"revision":"8390d46013743816c0b88671d27cb8d5","url":"assets/js/0e9c6edc.49dd67eb.js"},{"revision":"7729ee485597a8511769418456221364","url":"assets/js/0f148a51.a29e28ab.js"},{"revision":"1d7823186f53bc1302a8d8bef2b8e057","url":"assets/js/0fbf443b.55307403.js"},{"revision":"a4e542bf946325898e4cc860b4cf3703","url":"assets/js/10b42bfe.aeee5e7d.js"},{"revision":"7ab6d062796170d1c521baa710f4e98b","url":"assets/js/10f80ca5.ce9d7c1e.js"},{"revision":"58b164f614e1a00eeda822f864059f46","url":"assets/js/11671d7d.37fb9e54.js"},{"revision":"f334c7581cc341ef2fe349bf2ef29564","url":"assets/js/1267474e.835d63fd.js"},{"revision":"a9a4daeb1919341c18f7e27671cd27cd","url":"assets/js/12769aa9.ee8c2797.js"},{"revision":"ab38bec7e56ce75a8b6572323a274539","url":"assets/js/12775.2377f6bf.js"},{"revision":"994051264fb92e922e176b70ef35c011","url":"assets/js/134f983b.38476e54.js"},{"revision":"2c6d68f8ca83c557c9939f2b7bea4ad1","url":"assets/js/138ea42e.f59a3057.js"},{"revision":"9e016201787e591a765c5a8bad4a3173","url":"assets/js/13942.74779332.js"},{"revision":"80814225949a08a47dae351aa759b0f3","url":"assets/js/13f3ee7a.bd0a3018.js"},{"revision":"42689f3b0f22ebd75381d08f76ea6ab4","url":"assets/js/14065.4e5dce9e.js"},{"revision":"f206de65033a86b10f26e78a62ade639","url":"assets/js/141512d1.b6821d9a.js"},{"revision":"5a3dc7ca624450f3802ce758feaec625","url":"assets/js/143e0c63.4d8f0861.js"},{"revision":"99f2611653d0f8449b0ddaf534980419","url":"assets/js/14869.5b496144.js"},{"revision":"79a68390932ebc7e8137d01dae610ec4","url":"assets/js/14e6fd9e.dea27f49.js"},{"revision":"b0197e2ea74c0b3d5b643f60ab98704b","url":"assets/js/14eb3368.3c5d7a43.js"},{"revision":"eced4366f232abd835b29a9d4765fb9e","url":"assets/js/15fed87b.134823e5.js"},{"revision":"eadcb08044a35786930a5aefb20835dd","url":"assets/js/16525.e7611f44.js"},{"revision":"e64c72482e9f94f53063300716a98f86","url":"assets/js/16618.d79c5adb.js"},{"revision":"9cca46d86da4a616f3eb3832b83cc95c","url":"assets/js/1663798c.ecfc1347.js"},{"revision":"b489fea719caa0032456b7d3ec404f2a","url":"assets/js/16f6cad8.547f1d9f.js"},{"revision":"27ad4d7e1f0d30dc1d9180512ca70e10","url":"assets/js/16f8f4fb.1bd564f8.js"},{"revision":"4b7ceca4889cf9a1de9acbf4e4b0c0d2","url":"assets/js/170.3c1621b4.js"},{"revision":"94c61178f9c20efd988b46733bb1112e","url":"assets/js/17896441.47b2ad02.js"},{"revision":"1209707d8587e77f0b6434543e03f771","url":"assets/js/17e8a747.04614055.js"},{"revision":"4f9290069c7f06c144e43b84315cd1c8","url":"assets/js/1864f992.5cf0a7b4.js"},{"revision":"d7126f1d757ee1760ac97ceae6774ff7","url":"assets/js/19751689.bc6d5f52.js"},{"revision":"17a9fc97cb06b15aa8cea4762c88a0ad","url":"assets/js/198b37c5.7039c639.js"},{"revision":"95d0a33f80b67336d84814f0f6f63bd8","url":"assets/js/19e1b6a6.5e25d7fb.js"},{"revision":"c99da1895784f683330367e846c0d620","url":"assets/js/1a4e3797.2a36be36.js"},{"revision":"04a562863f76463f9c174a0aee0a18c5","url":"assets/js/1a839d3d.b6d3920f.js"},{"revision":"8ae7cc937f5fc10b0564d94ec4803df7","url":"assets/js/1b641e9e.3dc48ae2.js"},{"revision":"aae3149b9eca6591f059be0e73b99c23","url":"assets/js/1d1d5c80.368d4c1e.js"},{"revision":"f4cf65d1c988372dd9827bf909c57262","url":"assets/js/1d8d7b8d.8a880efb.js"},{"revision":"51e2bb28a5c2b929f3ab5113ed5a2ab1","url":"assets/js/1dd15aef.b35f7508.js"},{"revision":"b1f9ae560848e1a546afd3372a396246","url":"assets/js/1df93b7f.839c1f75.js"},{"revision":"bda7e7b7fff9c76ddc495a882cfec833","url":"assets/js/1f391b9e.08199a11.js"},{"revision":"5ee1ed05aed555ea1cd26968793647c7","url":"assets/js/1f5cf72d.b7ea4a37.js"},{"revision":"5fc9cd3b9d622f6eb4d1be3f4c40464a","url":"assets/js/20139c40.415c275d.js"},{"revision":"e75cd98045223145d66ca7b6c05e501d","url":"assets/js/201d0633.31186301.js"},{"revision":"1d238567e378daa9c674981b5a451bb6","url":"assets/js/209ff87f.5c98e53d.js"},{"revision":"30f6e40db0be21d287581bedcda739c5","url":"assets/js/218a9086.e9baa100.js"},{"revision":"cbeac1388bf26ea1525c79626fdcc58a","url":"assets/js/21955.787e6c5c.js"},{"revision":"ce303d53fd0fce9b2b1e48485c5ba7ef","url":"assets/js/2283e669.01148708.js"},{"revision":"0e1c71e4ec5100baede7a79d24eb1756","url":"assets/js/228a014d.60f80638.js"},{"revision":"2442aad52b4202a5ae6b659ca2a2e941","url":"assets/js/23abe487.170c4599.js"},{"revision":"668dd062258c699b2d47a83050064b14","url":"assets/js/23e303e7.4b5a9ad4.js"},{"revision":"2c7007487db37e4a083eaf4cd4955793","url":"assets/js/2451b334.7f0570e7.js"},{"revision":"67302e773d406004dd5499d26bbc4b60","url":"assets/js/24ceab3e.94325444.js"},{"revision":"66d6c25dec208462a758401a25b14658","url":"assets/js/24dd9243.67583c25.js"},{"revision":"10271e9c32e8bae19984736776dc6bb1","url":"assets/js/25003e4f.048ed570.js"},{"revision":"c3a8a591ed8fa61cb19413006a70e09a","url":"assets/js/2577bdb7.c6a0885f.js"},{"revision":"fea5f538203e9f0b96f80bd6d69c8aec","url":"assets/js/25d53288.b584fba6.js"},{"revision":"f796d4932cff0606dff3632647428820","url":"assets/js/25dbbc3e.7e06eb61.js"},{"revision":"0998c965bc37ce58286241ece90b86c6","url":"assets/js/260ff252.bcc1053f.js"},{"revision":"ab6be56f23049dab241f3fc8332c4fb4","url":"assets/js/26af6b06.6906267d.js"},{"revision":"b20d36971904119a9fec6ab7b345e62c","url":"assets/js/27291a50.6b31fbf3.js"},{"revision":"422e1d538392b47f6a11a4875d2b507a","url":"assets/js/2757f4f5.76d9b283.js"},{"revision":"83fa1c7aa8b5aad122e8fde242a97ed9","url":"assets/js/276a1994.b7ae8d00.js"},{"revision":"d084536dfe5ed92cdea20544fce34514","url":"assets/js/27e2fb4b.63c609cf.js"},{"revision":"0929b6dc55bb47e7e0be54ca91d55348","url":"assets/js/29291bc0.cac136f3.js"},{"revision":"c267bce58f596ea4cc6bea05189b6df1","url":"assets/js/2ac81c1b.ccd4e0d2.js"},{"revision":"cf943007c5e2769964a6209eda16af73","url":"assets/js/2b8147f4.e3b90fc6.js"},{"revision":"eda6c4771d64a6192add6d15c3b59ed8","url":"assets/js/2bbd92ba.591e29f6.js"},{"revision":"2aa6f9e86bf58302575dc71edd03e05d","url":"assets/js/2c6d53a8.e7b550f2.js"},{"revision":"62f2a7b919859feaa231f7c5b1ed0318","url":"assets/js/2c7bf9eb.b8355793.js"},{"revision":"e241e2c6a5776f92b0e360b0a6ea97d8","url":"assets/js/2d0d74c6.9a643df5.js"},{"revision":"a86f3bf94c12edae63a1bd26ebecfb92","url":"assets/js/2d0df73d.20e7e487.js"},{"revision":"9b5d2915bebc6ab4076c3a1d1e77772a","url":"assets/js/2dda743d.f6b31b4a.js"},{"revision":"2d3570c01823ca6a4e39667431e4e5a8","url":"assets/js/2e17f346.e53057c7.js"},{"revision":"af9daa130b287837b12f90054ff76843","url":"assets/js/2e30738d.11307684.js"},{"revision":"d11e1a7f63c549ab60d4a6a82e753c89","url":"assets/js/2ede31a0.4afa4921.js"},{"revision":"8f5b3b04ca4649f3fabdd397466820ea","url":"assets/js/2f06f2d2.ff225ebf.js"},{"revision":"ce226acaabb5acf5c4dd4ca0515971f1","url":"assets/js/2f097a0c.b61bacdd.js"},{"revision":"2c033ff792318ef96adf4c83c0d39d39","url":"assets/js/2f283cc0.81fc78ca.js"},{"revision":"e3644c476ed537b6cb1b3d3bfeaf8266","url":"assets/js/30198.aa31d39c.js"},{"revision":"8b63968341c59f594b1b78a15964293e","url":"assets/js/30507.2f9666a9.js"},{"revision":"b3b8f15df172ce239de0201fb75e3617","url":"assets/js/305daa1e.ce74814a.js"},{"revision":"b69fbc7487e2a327a9ffa05a753446ad","url":"assets/js/3089c7fb.4d7ffa54.js"},{"revision":"f2ef4d4e0ea1e5432d020413eb9f7f3d","url":"assets/js/3103a69b.787049f3.js"},{"revision":"012cd1775e5fb86f41a95962eeae3dc5","url":"assets/js/3200d13e.ff5e8355.js"},{"revision":"f44bdeee0c562b9b607c7aa33f298e38","url":"assets/js/3291828e.7a1ba793.js"},{"revision":"2a766e404fdbd7eb0385350dc16162c0","url":"assets/js/32a09314.f59ca1b7.js"},{"revision":"e9246a418bc5e6bd1deef8c2fcddd6a4","url":"assets/js/32bd6f31.4840a0c9.js"},{"revision":"bdcbf057cc14f78614b8b98272f15cb6","url":"assets/js/32d17417.e14eaa8d.js"},{"revision":"b5dc0686de6237633d415d94a90dfbb0","url":"assets/js/32eeb95a.f03ce5f2.js"},{"revision":"dcb1ef06515d54ea854a0c91760954c2","url":"assets/js/33426.cf4f35ce.js"},{"revision":"04144c1854edad3693e7dc78242ee776","url":"assets/js/33a17176.c7a7e41e.js"},{"revision":"e3a3ca27412ea1c9a195f91805e2a7f4","url":"assets/js/33bfb584.cca8f57a.js"},{"revision":"4d93b713eb482440f75392c0f85d4f5a","url":"assets/js/340ead00.dcee3ead.js"},{"revision":"f6a1257551f2bf86f7558120748d283e","url":"assets/js/349.fe8d7bf6.js"},{"revision":"472bc1f1743076e7ef92d3862ae6fa83","url":"assets/js/34b0e7eb.9c8d33e1.js"},{"revision":"e0092e86dc5b87a87c5075fdf8c00503","url":"assets/js/35123c02.3bf9c7c0.js"},{"revision":"c6d42b10f9fcb35a663d8468940e51be","url":"assets/js/35349.745ff2e5.js"},{"revision":"b06724bb2fcdfe59b6d4f716efdfe349","url":"assets/js/35453.d909f352.js"},{"revision":"728735ad3c32e9ead5b0fa81ab93a840","url":"assets/js/35511.9ef27c5c.js"},{"revision":"f716c24ba32e07c091d5896a4e606796","url":"assets/js/3653b226.149cc470.js"},{"revision":"46df8315b8f9cc34c35462c32da1dabe","url":"assets/js/3695c081.99591518.js"},{"revision":"e50852e162fc4f06ba6c16f6a0252aee","url":"assets/js/36994c47.fbc70ebd.js"},{"revision":"0bab8e1a7123f9226f1f99be103aa656","url":"assets/js/3716f59c.418249d4.js"},{"revision":"c80f5105c3486d55211eae4ad89ad365","url":"assets/js/3720c009.73329cc1.js"},{"revision":"14648fa46c98cda6dc44060bc14d1944","url":"assets/js/37bd3c63.ced06f8e.js"},{"revision":"ae8ad0f7c7719f85e4d26997485f44f7","url":"assets/js/37de9ece.5975a542.js"},{"revision":"940f488898154d01d0990837a6374010","url":"assets/js/3813dac9.47052133.js"},{"revision":"cbbc8603c0faa5551da44773ecc68644","url":"assets/js/381bbac3.b5ee7575.js"},{"revision":"5b0c427f42f9ec681a836a3b8f053ea4","url":"assets/js/38295533.c1854b79.js"},{"revision":"8a0fcde59285152d6cb0122762e49077","url":"assets/js/38caefbe.d9988014.js"},{"revision":"17497a45c85fbb6b4761ad398e46d392","url":"assets/js/38dd9662.a14fe98b.js"},{"revision":"15a5bc592ab777b92cee82abecdd5ea6","url":"assets/js/39485f13.82d44d0e.js"},{"revision":"649eb093da9c11586ff091a65eedeab3","url":"assets/js/39509.af821c12.js"},{"revision":"27b13a0af72278b1f58a5c4500d9897d","url":"assets/js/3955af78.f41b45ad.js"},{"revision":"015e8e6a10546c5b6746254ee5bceb77","url":"assets/js/39646.823936ff.js"},{"revision":"66e41ea1bda5ae8e750d39bfba94d5f0","url":"assets/js/39be8897.83ec08dd.js"},{"revision":"9639aa0dde6902dafb62525bc5b5fe76","url":"assets/js/39cc8d92.3400d38b.js"},{"revision":"18f196e2b5b1a9cee618c28539110efb","url":"assets/js/3a22feb1.45e7baaf.js"},{"revision":"f8ecb7aa8f1ab0347c1167011209538f","url":"assets/js/3a317cf7.bf8ac0a6.js"},{"revision":"167718a6269b0429f6b6ff069152c7ed","url":"assets/js/3b2c7f61.f6644ccd.js"},{"revision":"cc73a52bdb929f171026bc09c8c83708","url":"assets/js/3bc24440.53a7738a.js"},{"revision":"c52b06d070084a789170d077bf813ee2","url":"assets/js/3c03c7ff.b32fbf54.js"},{"revision":"aeccaa5b307526eb54466ac5c2f8b4f2","url":"assets/js/3c616b11.d778628f.js"},{"revision":"ef13f7afc1a8175975e6d394dd6ca620","url":"assets/js/3ca89387.f1f54b0f.js"},{"revision":"66b07be4ec2b46f171430eb6b756022f","url":"assets/js/3ce9624a.b19647d0.js"},{"revision":"0dd2035ba54a18aa852c067983b7d8a6","url":"assets/js/3d73fe52.cbd7dad2.js"},{"revision":"455eb8cdb08a97cf186ffacdeb8db494","url":"assets/js/3dd2dc02.0ed98ee1.js"},{"revision":"a80d9e474b12380933307adc92deeff3","url":"assets/js/3e206144.0de76f70.js"},{"revision":"5af00dc9b0fafcd05968f92068fc8f8a","url":"assets/js/3ef80f0b.e4a604eb.js"},{"revision":"cc1457bae8115f07baa400de70f9f2fa","url":"assets/js/3f37e3c4.cab24fd8.js"},{"revision":"cf759e2d9cfa1ecdfbcfa5ebaa0682dd","url":"assets/js/403cfca1.187868f4.js"},{"revision":"f200330d056d7c70f44fb35601d881e9","url":"assets/js/404e42f6.ad0a8f53.js"},{"revision":"b74f5b5c981508acb9c1f9cbf398e947","url":"assets/js/4052c491.d130a907.js"},{"revision":"4483ca4a7e58d3d25d4cdcc4ab009558","url":"assets/js/40577.2f5f2730.js"},{"revision":"0594c48ffbe7238f84ddc65e3b6cef2f","url":"assets/js/409b40b6.1d27ef3b.js"},{"revision":"56bd036569a1d073f3c58c75b3c6cede","url":"assets/js/40b17095.6249225f.js"},{"revision":"45504e964136e5b881da81062c43039c","url":"assets/js/41756ce8.deeb6e73.js"},{"revision":"f869bdbb0fb0a0de6f8b020844856e83","url":"assets/js/41db61f9.ec3bce72.js"},{"revision":"b3d8b4549c27cdc4d20752aa93df582d","url":"assets/js/41f89139.338fa519.js"},{"revision":"804019dc4a37a304f55b826179de186f","url":"assets/js/422.9b83fe12.js"},{"revision":"bc34522a82e78a7a6a6094eb27302b94","url":"assets/js/4228388b.1b4f71b4.js"},{"revision":"cc2bb8e7b32d447dd46711b2d8b287fa","url":"assets/js/42950.5e4d2fc0.js"},{"revision":"daeb721a4dd52aefddb5a179ed52a0fb","url":"assets/js/42c2afdc.547d4ece.js"},{"revision":"6677c961ed17f4b91d96bf7e46958599","url":"assets/js/43b66818.606d0891.js"},{"revision":"a7e86461c3bb52ce3ff14705dec19dcd","url":"assets/js/43cd9bda.49c4ef17.js"},{"revision":"68529f526d1878dd15ec069c87e6dae7","url":"assets/js/43e96a3f.96e28a08.js"},{"revision":"b97fe21e88db2272573550e0c3bd2117","url":"assets/js/447738d4.8486cba6.js"},{"revision":"29c744ce85ba3e074c65a8eef342b918","url":"assets/js/44e06438.a3203618.js"},{"revision":"b11c761c5d6008b51437b159cf1b4793","url":"assets/js/44f0a4a7.48111ad2.js"},{"revision":"7a23663ed1e0fcfa2088ec0e772a6415","url":"assets/js/453.64a25604.js"},{"revision":"646d65dd4611f57b2536cb0a0b98d331","url":"assets/js/458.7fb82cee.js"},{"revision":"2fccdc22be745e01ee43ef46c25df419","url":"assets/js/46765cf2.b5c45c99.js"},{"revision":"4259691cd39ae61cb67036fcd1245e53","url":"assets/js/46d67303.4b2295ec.js"},{"revision":"b385b69ac7cfcd823e76ccae79e2c3c4","url":"assets/js/46f5ed35.7fd6e169.js"},{"revision":"b2209cb344346f2bf06964641dff1c0c","url":"assets/js/47065.59a92a95.js"},{"revision":"a8307bca8d127f31f6e3db331a216464","url":"assets/js/474.1f0cc1b6.js"},{"revision":"591dc283cf617d6d0f46ad22f01e4b66","url":"assets/js/4794e44a.5e866ea7.js"},{"revision":"201496571c178b7f4f2e0d29d7e06c95","url":"assets/js/47d4c0e5.c5ec62e2.js"},{"revision":"e1f73d8aeff39f7f01bd2ed6eb626c68","url":"assets/js/48325788.2483d3d4.js"},{"revision":"ae11e591bbb8f4b00a0ef94f3d24ebce","url":"assets/js/4833ffb5.e7626e8b.js"},{"revision":"33cbef5f8332ed2ae85ebc70443ee838","url":"assets/js/484c5ba1.1668568a.js"},{"revision":"9d4a2eb22e47236ba27e119a012270cb","url":"assets/js/487c3fae.fdccc364.js"},{"revision":"2e1d4c4280570e258b12247bc56d4092","url":"assets/js/487d990e.22bcddf8.js"},{"revision":"83c0a6eab19b00af270d347f32b91cec","url":"assets/js/492798ca.89f534d4.js"},{"revision":"e273d36c94fb0071ce03898bbe2fdc82","url":"assets/js/4994aa22.c56eb869.js"},{"revision":"2e904c92e2a67fb8af3eb80a96368b46","url":"assets/js/4a3883fa.52057d33.js"},{"revision":"559728b9c8f906a92ec313ad2a4eb767","url":"assets/js/4a70d01c.2edc41dc.js"},{"revision":"7dbd724b2780d03410495898e8c9c4b1","url":"assets/js/4ab187ba.f430e009.js"},{"revision":"eb08944cd1c86ac0345c8e14c4b0ced3","url":"assets/js/4c9d8eaa.3c4b56bf.js"},{"revision":"57464cd2d3f2dce8f752d3518172b7cf","url":"assets/js/4e761ad8.b182b63e.js"},{"revision":"3e7b21aab25b15e421f62bd96a398138","url":"assets/js/4eeb5b68.4ef86135.js"},{"revision":"abc5a70aefec1b0855c6e1d82276d149","url":"assets/js/4f8c86e0.5498614c.js"},{"revision":"2f5fea29033affcb8819081ac4ea00a7","url":"assets/js/507.eee2502a.js"},{"revision":"636c51ad95de998eb005ca5c929ae5a5","url":"assets/js/509.81370186.js"},{"revision":"4571274db64636106adb608fd51d93e4","url":"assets/js/50a3e386.77f8ef7c.js"},{"revision":"e109c19d79924acca871bea72f85bde6","url":"assets/js/511.ce843d0f.js"},{"revision":"cde718684783d3738d3b37bfb6543b0f","url":"assets/js/5140cc17.7c6d00d5.js"},{"revision":"e5c463cb15ad5be0c0aeabb58285b8b3","url":"assets/js/514f0e36.059522c1.js"},{"revision":"c70c7f0f58015d6d7534bab5423c5ea3","url":"assets/js/519746e1.ef79ed94.js"},{"revision":"4aeaf6c878b85261123ddcd2540d335c","url":"assets/js/519fdddf.bf29ce9b.js"},{"revision":"0370b73e13712ad111efc6941ae67961","url":"assets/js/51c1a13a.ddfa6f54.js"},{"revision":"ae6177364bd3f3de31e8bb0fe81fc3c6","url":"assets/js/51cfc813.a0d88db1.js"},{"revision":"4ffb2bbd403378b608e34c7ba8cee8ea","url":"assets/js/520a8178.30dd5c42.js"},{"revision":"81af06d73731c8ab640297cdeabcf384","url":"assets/js/522b3e8c.7da5ae1d.js"},{"revision":"9f918dad84ebf0fa7bc40e3f12c9b477","url":"assets/js/53a3e6dc.b7f4b901.js"},{"revision":"ab4dde9e55e0e16600f0c9fd9f81f7c6","url":"assets/js/54542266.6c5d9693.js"},{"revision":"764650202cac5fad32566d632bc451b4","url":"assets/js/554438a9.705eaf61.js"},{"revision":"d33aa6bb4b59a76ae2fdd5c373c9b4aa","url":"assets/js/55a7f034.aac52bee.js"},{"revision":"efa522e93b87911240edf24ba65f6423","url":"assets/js/55e8935a.fdc94a56.js"},{"revision":"94d2d1c07c395209e35fd04bff268864","url":"assets/js/56170.676ffa49.js"},{"revision":"79f2ce903418f860c9f4cd5c8eab544a","url":"assets/js/5651bc45.08528b6c.js"},{"revision":"fd30c5ca38612ad5660956f9d7a6c400","url":"assets/js/5665a0fb.121469e2.js"},{"revision":"19735eb04b3336917cf5f024b532ba5d","url":"assets/js/5696d949.2a2302ef.js"},{"revision":"49da312cda9a5960abcedfb3bbdbd491","url":"assets/js/575718d1.f95d515c.js"},{"revision":"4aaf8dc296db6587a0a2bc94f3513b78","url":"assets/js/575b7f6e.58b5cd29.js"},{"revision":"82c603c018e603b3d7189b07b259e4fd","url":"assets/js/5785f4e1.e4a608b9.js"},{"revision":"612f888012d1597b1b6f43eaa49f8d6c","url":"assets/js/58003.0f2d76e2.js"},{"revision":"ef0149fa949f9cd9c5f7fe11075382a6","url":"assets/js/5899.cc7d7195.js"},{"revision":"3efd3a0a9fcc18eeb790991e74902d6a","url":"assets/js/5985f86d.ead7417d.js"},{"revision":"73eaaee4f437bf36ec2148840c29b5ae","url":"assets/js/59cb67ce.2533775d.js"},{"revision":"98f3335e0f42eebe9aa8945171ab62bd","url":"assets/js/5b85a2c0.190e081a.js"},{"revision":"31a59fabf7ff54fbc1b8667457a88bba","url":"assets/js/5c640cab.0c18f338.js"},{"revision":"a0e3f3cd604028ecc0ff7b74f66a697b","url":"assets/js/5c7aa639.23a80e30.js"},{"revision":"8df8435921d00c379f8168f2d4a9db4f","url":"assets/js/5df873bd.a91cd82d.js"},{"revision":"13e0b6d299237daf4740a42d1da239f6","url":"assets/js/5e335fc2.8b6775cb.js"},{"revision":"ce5fac13a8b32a5db36ca339f1136837","url":"assets/js/5e95c892.b5fe363a.js"},{"revision":"55ea965e286b1dceb6490d151ea61cd6","url":"assets/js/5f30ffc4.b9b7bb79.js"},{"revision":"27c7e73355a3655992cd790fed0d948f","url":"assets/js/5f9d590a.f6333f66.js"},{"revision":"4f2771d47ee670eb77e5b10bf07fbf0a","url":"assets/js/5fb252f5.2f2f12fc.js"},{"revision":"0645e7ffe237ee9f10ced492fa9ab82a","url":"assets/js/61266023.2fd2ab72.js"},{"revision":"0524f193aeb4318312c92a90af6b4cdd","url":"assets/js/6199064d.0ae2299b.js"},{"revision":"4d9a1a9f57a4bf4069ca6228eea29ad7","url":"assets/js/62906.29cb0fc3.js"},{"revision":"0df590b0a90aa4d9d047354412201285","url":"assets/js/62b37705.13f36193.js"},{"revision":"180f4f92aeab909cc6c1cc125626314e","url":"assets/js/63429.a9816ff4.js"},{"revision":"6ac00cbf7c6cd6e7ea68ff5980647c85","url":"assets/js/641734b9.c1c50df7.js"},{"revision":"932f91857a748f98e6debbeb984dc176","url":"assets/js/64474.bbf12bf9.js"},{"revision":"6a249f31103019369fb1d1ac6efa49ea","url":"assets/js/646.84e8f9f8.js"},{"revision":"42a501ae245937b74400c4180ae56314","url":"assets/js/64627.483d0641.js"},{"revision":"b40f0ac02dd1eb762412535c82f83937","url":"assets/js/6466e69d.78f58c7e.js"},{"revision":"f28defc92d1d8d89954544822e158861","url":"assets/js/64aa9092.faef2607.js"},{"revision":"04553f1cdf12732ee42cc45c16fe5139","url":"assets/js/64dfb3e9.259b4f48.js"},{"revision":"50efb67d1d5e8437206af6151f31a827","url":"assets/js/65.8b2cf217.js"},{"revision":"3146fd058a4633f13c078a21bd0e6af7","url":"assets/js/6608e8cd.e11b7647.js"},{"revision":"4991697d67f76992142722179596b66f","url":"assets/js/66222.4426cbe9.js"},{"revision":"228d45adcd56b9cc9b2861069171e914","url":"assets/js/66664890.75612012.js"},{"revision":"ef0cd8ba45b9c7f18ddc90661e6cc10f","url":"assets/js/666c1406.959d8656.js"},{"revision":"52ad8f312b1160aa75939ed7ac31c868","url":"assets/js/66850.b413fb56.js"},{"revision":"1f800bab22ac2e8ff070430625d6d35c","url":"assets/js/66e08b1e.3e187d76.js"},{"revision":"7b8d97c375eae1fc707d1d7a72e51290","url":"assets/js/67445aac.49f9b675.js"},{"revision":"703375acb68cf184347aaf8a2a3edb30","url":"assets/js/6794d4cd.101e96ef.js"},{"revision":"88286f15afaab3d0e2e31f5a37365661","url":"assets/js/67bff682.ac28689d.js"},{"revision":"3980608d72dd32fae46ef8fe55349a97","url":"assets/js/67cff4f8.02ec542b.js"},{"revision":"6399829e60e8297d66dbd4f901437692","url":"assets/js/67e98d06.4b6323eb.js"},{"revision":"16a18d9e13edc6d5e1bb23efdb35b1bd","url":"assets/js/6875c492.284884b9.js"},{"revision":"f40c52662068df25b01e57787613c18d","url":"assets/js/688c67ec.d179912b.js"},{"revision":"df903facdbdfa23409ac3b09a743bc32","url":"assets/js/68c81175.219c43a4.js"},{"revision":"fe0467b74b2a22e1cd87140eccf5d8de","url":"assets/js/68e633d4.4a5ecbb8.js"},{"revision":"adaa5404a07495f5a3420d37bab3fb8c","url":"assets/js/6967621f.829d5498.js"},{"revision":"f40c4663daf66f87530370a9149573a2","url":"assets/js/69d00ea1.d63339e8.js"},{"revision":"cca6e94595677185f05b49ac51e7942c","url":"assets/js/6a2ff064.310eb372.js"},{"revision":"7c5aff389f02968d3916bf6a9d834fee","url":"assets/js/6ab75597.0f67f301.js"},{"revision":"5caff4505dff3798685d079b93cb6927","url":"assets/js/6c055727.037a184c.js"},{"revision":"b38e9257d6c05adbaa4dad79df1351f2","url":"assets/js/6c065aab.a2e047ba.js"},{"revision":"b92b4915712da998c80da5c5be3e76fb","url":"assets/js/6c1df059.5b29fae5.js"},{"revision":"760ef55b3ac79edb6a26c666f182cda9","url":"assets/js/6ca75a11.99479b9d.js"},{"revision":"5dcd56ecc052a4883445596dd0c34651","url":"assets/js/6e08c139.c0589b06.js"},{"revision":"42903e80f18b26513c6bba56cef079c8","url":"assets/js/6e7f3c19.f985a095.js"},{"revision":"a2725024df90774314924800176a37f2","url":"assets/js/6e8cf259.47295472.js"},{"revision":"0fe11c2895fdec5ef6aef0112c8e492a","url":"assets/js/6f742216.551853eb.js"},{"revision":"adbb4a29262d44e1ae6dce772eee5e47","url":"assets/js/6f86cacb.27551759.js"},{"revision":"a127a9026fabfcf60aee58b9da6fcf8d","url":"assets/js/6fc50b01.674bfd0e.js"},{"revision":"3b57aa9345dc4c47326e51e2595f9e90","url":"assets/js/701b6ec8.c3c3b264.js"},{"revision":"dee6080d28bb4bbf9cff92dee33f8500","url":"assets/js/7033176a.91984814.js"},{"revision":"fdc4b1a6999753a1b1580c482b2afb12","url":"assets/js/704bae10.f7e68b3c.js"},{"revision":"843beddfa41de8e2ccefcad0350cb47c","url":"assets/js/706279d4.4b5ea275.js"},{"revision":"8051a5accd48d9d8a51362dc50028e2c","url":"assets/js/70e09343.a887d63b.js"},{"revision":"c4086ecec30840fbba35922e340608ee","url":"assets/js/72810b49.3c5f5eb2.js"},{"revision":"4ed9607c406cfdb8d73eb8968d0e40b7","url":"assets/js/728bdbb9.b2a62668.js"},{"revision":"56a2dd7856eb132b222d566d2e7244a2","url":"assets/js/728fd2f1.59e9c5c0.js"},{"revision":"cd3147c490c7855f4a25a442edb03fb4","url":"assets/js/73004b36.c9f3685b.js"},{"revision":"68c223442d10bbadd74702b06e52845d","url":"assets/js/745d094c.4b42db8e.js"},{"revision":"0dccb7753a1082c91962a03114276954","url":"assets/js/748308c5.6aa139b3.js"},{"revision":"00bdfd9f0e463029155416d89ad1b0ef","url":"assets/js/74884079.c44aa732.js"},{"revision":"b654e08a5e0f5b625af4b77aa69db0a2","url":"assets/js/748cd346.f9d99af5.js"},{"revision":"eccea8d093f21e6e5eff0bfba23776d6","url":"assets/js/74911.bc7191fa.js"},{"revision":"4a23b5aa6083cd487a227a42b125ac01","url":"assets/js/74efa390.16eca5b4.js"},{"revision":"4cd47a43ad18cab8c6c5c37a12e1ec6a","url":"assets/js/758e69f6.fa0da0d0.js"},{"revision":"870db471fd2b961eb4f2bbffe4696b4c","url":"assets/js/75d8497c.9d3da975.js"},{"revision":"1a3b7b50cab7f8e65de0fa9ce3a02398","url":"assets/js/75efc17f.fa8b11a7.js"},{"revision":"bb685a7cb7e887c21b558f3da271043f","url":"assets/js/76134b9e.69c990e9.js"},{"revision":"cab3eec31fbcd8c28c4972c2b1da178e","url":"assets/js/767.3a1996e6.js"},{"revision":"a21888072135ae3fb91ca80ee2a92b04","url":"assets/js/76742.003d8ae5.js"},{"revision":"78a64a6bd923bc89599e592aeb1598ce","url":"assets/js/771ca8b2.feadc34a.js"},{"revision":"01baa83fb13d664d0bfcb0878f73a46b","url":"assets/js/772c972a.b2fca90c.js"},{"revision":"f4e3862ada8dc0a13e263128f35e42f5","url":"assets/js/775.fba2ebb6.js"},{"revision":"187483713a346b135116145ed8115174","url":"assets/js/77542238.7e9bbbc5.js"},{"revision":"78f32de141545307a3dd2fffc4f6ae1f","url":"assets/js/77da816e.f7fbc837.js"},{"revision":"6eb440dd8c83768a5ff703b8162081f5","url":"assets/js/77eb9b8f.3b8c2657.js"},{"revision":"5bdca401ea662f4cf3d0118a4b2c4827","url":"assets/js/78526.38a573b7.js"},{"revision":"d5f4253ccf6b8c3d2d1096798124d906","url":"assets/js/797b79df.51be12da.js"},{"revision":"79cbf34080cf5ba62ab03db629138cf6","url":"assets/js/799b9126.33a8a6fa.js"},{"revision":"c6e03b1bc55d7fa1fe74b647f98a8c9d","url":"assets/js/7a272146.16d1b1dc.js"},{"revision":"c61e9a907347ca8e5bdb3a5a0285a2bc","url":"assets/js/7a65db62.fb2150d6.js"},{"revision":"a0b2be2df1f9e7aa5e3b8353056db413","url":"assets/js/7a71cb25.8a33d68c.js"},{"revision":"b0807fb12b964fee0be1c213bee913a8","url":"assets/js/7ada4fa6.bed4dd11.js"},{"revision":"39cb315226db56d78742bfd1608e1822","url":"assets/js/7c110bd0.d1844b70.js"},{"revision":"319213db9aa4d434a4160521684b9712","url":"assets/js/7c3d1b8c.c3c70b6b.js"},{"revision":"5dde9764a71cc13ac7cc47a76f52cbc4","url":"assets/js/7caecc0e.7f40c4d6.js"},{"revision":"0216248903b7cbc52ed5163949c461de","url":"assets/js/7d1ac6e6.7fc63624.js"},{"revision":"97c15edb5a60d8058a569c133af47fe5","url":"assets/js/7d66b20e.55934461.js"},{"revision":"1ed85fef8a98d2e0b41e805c1bad6e92","url":"assets/js/7dfb83d7.877f3157.js"},{"revision":"866796670924de05a132b09d4b05087e","url":"assets/js/7f129fbe.485d7d76.js"},{"revision":"1ae4fd73d8d15ba822aed00663a52ae7","url":"assets/js/7f3dfa04.372e085f.js"},{"revision":"09c154e06a52a0e97d063a0220f06b61","url":"assets/js/7f6bb8ad.8e297051.js"},{"revision":"449a752fafeedad8fb8a4a8b811d1ac0","url":"assets/js/7fdd8ddf.90763b2e.js"},{"revision":"16f6d66630b844cb1e263566c70be7ec","url":"assets/js/7fedd5c3.ad354411.js"},{"revision":"9f2b54d67f703b9a08108c7693b52e58","url":"assets/js/80458.a896f0fa.js"},{"revision":"02b953577b328ac947482d71153514e2","url":"assets/js/8050e487.d4305819.js"},{"revision":"846f97678bb6b65d28990b65146d7ceb","url":"assets/js/8075f6fd.9677879e.js"},{"revision":"7ce81c714b7d4cb786861d05824746c4","url":"assets/js/81422.6090eea1.js"},{"revision":"732783d657604fd9fae53a9198f99968","url":"assets/js/814f3328.f3389328.js"},{"revision":"ce39e3eacf735f42077cd7b4209358e0","url":"assets/js/82005.40152a17.js"},{"revision":"6e72776055eb0918a6a95efbf7a4c3c2","url":"assets/js/82425aa0.9faa8f5e.js"},{"revision":"0ae151617e6729a266f1b32c60dca028","url":"assets/js/828be2eb.c823b395.js"},{"revision":"9f6a9e826d24ae61dca149d00fe43ed3","url":"assets/js/82de272a.53c3ef22.js"},{"revision":"928fd18e894e2d7cc68fb6f150c185d4","url":"assets/js/83808d4b.a00b28e8.js"},{"revision":"25155028f494692c569affb8fd0cb56d","url":"assets/js/83893.5719dd12.js"},{"revision":"748f55f8801a915f2b3f3652da38372b","url":"assets/js/84103.0e3dd097.js"},{"revision":"880be8f63a8d6e7bbd8fb017d10ab5d1","url":"assets/js/842cd290.4a29b883.js"},{"revision":"c8150a0292c5c794a889fd6ed3ddd5d2","url":"assets/js/845bdfd1.de52e410.js"},{"revision":"2ebe902659528976ac3cb4b94e4ec290","url":"assets/js/84fd4968.cf13ed8f.js"},{"revision":"e21c1e59cd8af576d8fae06449d2b826","url":"assets/js/850.c2728522.js"},{"revision":"a0a75df9158ee3f791ff72005ae94726","url":"assets/js/85d61fbd.530f4c67.js"},{"revision":"733919b659932490f5a4831005584abe","url":"assets/js/8604db02.11d14f59.js"},{"revision":"6617186ab05d28c404e17c65046506dc","url":"assets/js/8625da58.98543d3c.js"},{"revision":"92191721f3b98d93961b75b0a32463d6","url":"assets/js/864aad98.6a35236a.js"},{"revision":"d305ed83265f3fc5db205c7834bc94f6","url":"assets/js/869.8077aa62.js"},{"revision":"aaf1d90f8e2c52a5b0ed346341d7fa81","url":"assets/js/86e3a3d9.95e479bf.js"},{"revision":"03c4f3b46ff8244f39c2a040eb7aeed8","url":"assets/js/872e6514.ac4f8a6a.js"},{"revision":"dfe39f59f082a28bbaa79de752d27d9a","url":"assets/js/87e9b44c.800f3927.js"},{"revision":"c70a569ebe5504981f86c371fe5951a8","url":"assets/js/88d0be04.6f4fd6f2.js"},{"revision":"d0af279b6d2df511946f07a6a70c06c2","url":"assets/js/88d6849c.27dd96a9.js"},{"revision":"39e2645ef57934d8df360f7e198a8e69","url":"assets/js/89127.70da48ea.js"},{"revision":"94bd7baaa247d5f10e13fb5b3c9d420d","url":"assets/js/891c0dad.a96160ef.js"},{"revision":"8404eed9ec4086b18aec1269299d1bbf","url":"assets/js/893.110a0b5c.js"},{"revision":"59ea00f811658407648a93e7854015cf","url":"assets/js/8945e4ee.973e9fa6.js"},{"revision":"2c895d9556c3deb133ed904c19f07d83","url":"assets/js/899.3a9cf4f5.js"},{"revision":"9c4761948c4d2739394df49b4535ce2a","url":"assets/js/8a603d1e.86c88dd8.js"},{"revision":"058a163ccefb14f43adf9e78da8a4fb3","url":"assets/js/8aa79af8.405d5606.js"},{"revision":"0cec867431ce2457ebc2a439b9969f05","url":"assets/js/8b6ce0ec.e485aaf7.js"},{"revision":"d763317eb5e20918de8227b4e907728c","url":"assets/js/8be705a1.7c4d2e87.js"},{"revision":"79b3473bc245687da71015139bf26983","url":"assets/js/8bf84dbe.813f3dab.js"},{"revision":"bdc5786d2305566647a0c785cc5b0b33","url":"assets/js/8d042c9e.15a823c9.js"},{"revision":"7f9417bd91d26b09aa21c36c3d0048c4","url":"assets/js/8dfde3ea.f232327d.js"},{"revision":"c56d8d6630bd41eaef81cea045654530","url":"assets/js/8e13cf96.0e4b1d26.js"},{"revision":"477d014752f7e8b66c662926fd1eac33","url":"assets/js/8ef3f86c.7e2a022b.js"},{"revision":"4aba68a1d2d255099635df99068d9f8d","url":"assets/js/8f8b968f.6f2f923f.js"},{"revision":"9898ac1042b6619efb1c6eb4dd97899f","url":"assets/js/90199c54.b20e984a.js"},{"revision":"b03617ab92aa25ab8e04de1a39c5c43b","url":"assets/js/90458.46218da3.js"},{"revision":"ee3ab58309d76f1d13a201e23e417b4e","url":"assets/js/90545aa3.5c8aca9b.js"},{"revision":"8c231609cd78e3d16a62b31148cb4edb","url":"assets/js/9059c83e.d944db44.js"},{"revision":"877a534b91ceeb156f25227089db96ee","url":"assets/js/906.5e91afa0.js"},{"revision":"0ef1f9705b212a70c0674055bc060d31","url":"assets/js/907232bd.df241401.js"},{"revision":"f919f559bfdb3109ac8d21f22892afd7","url":"assets/js/90e20400.eeb51aea.js"},{"revision":"1b52ed33e774f329145d1657ab71823a","url":"assets/js/90e57dc7.f6cd875e.js"},{"revision":"0ed5c5cc9e98374d7770eb8ceb3bca90","url":"assets/js/91357fa3.05fcc139.js"},{"revision":"e98cc71022e409155f919dc9bb2b78ce","url":"assets/js/91b203fb.583d034a.js"},{"revision":"917ab32ca48348cc77fce9e64af53375","url":"assets/js/91cd22f1.c49ecb8e.js"},{"revision":"273b5b849769233975e4bbbfda65b9ec","url":"assets/js/920bdb0d.a69b0f29.js"},{"revision":"b89cdb8e52443e67e612f635da019a17","url":"assets/js/9229eb36.2976ccb5.js"},{"revision":"2fb3d821cdcc1a9211b88c805fdab24c","url":"assets/js/92aa9055.cca331dd.js"},{"revision":"62b19d50f31bc8c60f42f207bbb34c9b","url":"assets/js/93041.3a8f7f74.js"},{"revision":"16fcacde7c4a1e07d901192c50552f54","url":"assets/js/93940.7a3011ef.js"},{"revision":"6f2c90d042b891574b18d59445fdb74d","url":"assets/js/941a00b8.e9531d5c.js"},{"revision":"b30ddcbebcee841f0f8b1c8a03e3bff7","url":"assets/js/942.04075e61.js"},{"revision":"38df56015c17364e094f26a0389cbc4b","url":"assets/js/945e072c.61f48024.js"},{"revision":"0c6e94005d38c05eaa0700e57fe17cfe","url":"assets/js/946bd85a.0e80213e.js"},{"revision":"7270fc41e5b9f3904ae49d345a0b3d94","url":"assets/js/94744769.b5f3828f.js"},{"revision":"2a05aef58ae59ca2945075ec57565745","url":"assets/js/94e448d6.70a3d311.js"},{"revision":"184dcd5bd4100e4e81f1d03c639c4a72","url":"assets/js/94f305e3.35259e4c.js"},{"revision":"1bcb0f9dcdcab0c94091fa26a37b5aa2","url":"assets/js/9500.95c15580.js"},{"revision":"5ee5ce62e6277e1c5ac14f3f15c688dd","url":"assets/js/951faa55.7dbfdd3a.js"},{"revision":"f196785ab45a97bf0e4406f00f1753e4","url":"assets/js/955.e926dc3a.js"},{"revision":"0a83d14f76b355492583a6a1812bcce4","url":"assets/js/95515391.28e81f69.js"},{"revision":"9827880c0b17d6afdb804c1a4a397c8c","url":"assets/js/95742e6e.3445edf0.js"},{"revision":"f2d4f0d84449017b76c21470c8ba3be2","url":"assets/js/95e8e4ff.e4cf264d.js"},{"revision":"e941994c8be0835b8c0de754f7b9c97e","url":"assets/js/96153c3e.9f3647b5.js"},{"revision":"436b093e9dbc6694845e015ce246b72a","url":"assets/js/972d9d57.f49f061e.js"},{"revision":"34a8d64c8adf96328b265f250f9c0670","url":"assets/js/975c6d52.0d556406.js"},{"revision":"da57f193ed6678d9a64c8ecc258c5eab","url":"assets/js/979385f4.81576c36.js"},{"revision":"8fc34c472ee1710d4f484d95fc664209","url":"assets/js/97fd818d.7b6c91a8.js"},{"revision":"817958c820623a28fc1a7b0383296473","url":"assets/js/984fb229.a18b5ee4.js"},{"revision":"2086731c7ff2a0eb197718c1aaf284ec","url":"assets/js/98b4a860.4860bbbe.js"},{"revision":"813f1db050a09bd4eaae7db47c5e9f27","url":"assets/js/98df95cb.46fc583a.js"},{"revision":"89397ee3b3c22534e8fb74f4cdc8e47e","url":"assets/js/99854.33022ae9.js"},{"revision":"a9b9124d7af50e19b5a6aadaa5d6a695","url":"assets/js/9a2d1e33.d6bf1865.js"},{"revision":"ff65b4a9f37120cd0c95889b9444f642","url":"assets/js/9ae3398a.2e5ed727.js"},{"revision":"90cbd06f1cbdf08111f26b1dfbe4e361","url":"assets/js/9b96e581.8f711751.js"},{"revision":"08535dd91a3a6437022d04f192acf3a7","url":"assets/js/9d00fd52.387c2d55.js"},{"revision":"589e59dcce1496148e541ef855619349","url":"assets/js/9d57c6d7.8f38b0fe.js"},{"revision":"f49b9241c3badfb093a52fadf2cb50a6","url":"assets/js/9e151db7.3944e0cd.js"},{"revision":"e76f3cc5282d2afdf5ef474656d5068a","url":"assets/js/9e287d93.ab89d4e1.js"},{"revision":"8f9eb1d76c4c43ae3e661a311b372ee2","url":"assets/js/9e3851c7.d2734523.js"},{"revision":"a006178112871d055722c2dbcec769e8","url":"assets/js/9e4087bc.7f76ed34.js"},{"revision":"41dc6b16cb6768c8f483deaade7a00f3","url":"assets/js/9eebc09c.4e4255e7.js"},{"revision":"8b6787f9a11f7b13153e25408180f231","url":"assets/js/9f70a9f9.6dc3282e.js"},{"revision":"18e87e252383146fd1a28f715cc30628","url":"assets/js/9f9142d7.dc34f1d3.js"},{"revision":"4d77c1a0a094fb674a8a70a5e9a8384b","url":"assets/js/9ffba925.f808e11a.js"},{"revision":"1cdfac49f251ad6dcb509b75580c1f77","url":"assets/js/a0355907.fb976f43.js"},{"revision":"239ecd2578e68ff686dcd42e7de02bcd","url":"assets/js/a05ec3a8.dbabc8be.js"},{"revision":"d0c66b59aaca736acc1edbc5876a1c89","url":"assets/js/a0dd3209.e4121195.js"},{"revision":"9ca37d94cae3366af05b862dc23df091","url":"assets/js/a1286a82.6e906504.js"},{"revision":"6d5faf9f9d9c85962fea2af265db296d","url":"assets/js/a136e7a5.c8d259b5.js"},{"revision":"1fd6e258e8e9f937402c9a76c5041355","url":"assets/js/a181cccc.437595fe.js"},{"revision":"b2293d322563b0f81cf59d7735f30276","url":"assets/js/a1da7a09.bb307df3.js"},{"revision":"72f8f7c132e187690e5141f1d5036e86","url":"assets/js/a1ff2305.b20c4812.js"},{"revision":"cc65b20703d98bc18fa1c07c85aaa191","url":"assets/js/a2411e26.6f58fd49.js"},{"revision":"b8a6d36fe7da156c487732a851f77d3d","url":"assets/js/a271b010.b20153fe.js"},{"revision":"39382d298fb381b1d2a9adf425d25d79","url":"assets/js/a3aa32e9.8fbb0188.js"},{"revision":"71e3bf8a5126a3cc792fce39470484d6","url":"assets/js/a4c9d663.bc3af640.js"},{"revision":"a2e9cad787dce0bcd29d3362d41a410e","url":"assets/js/a535a6cd.3351ab1e.js"},{"revision":"ea0191fec8606d82da0665fb1f4eb330","url":"assets/js/a537988c.b6c7c285.js"},{"revision":"47d6fb8e5fa5a2f005076311698b94f9","url":"assets/js/a53a71e5.e4d83470.js"},{"revision":"c845dadba520d1226f45c40061b65175","url":"assets/js/a54aa980.33df7b50.js"},{"revision":"3254b4452a7386f40c9884e912bdef76","url":"assets/js/a5816f92.d8a09da3.js"},{"revision":"a8c7c7488b568c79924dd48f1af4106c","url":"assets/js/a5e2f0c0.9a9e9d28.js"},{"revision":"744792cfe1c0290512f400969d1eee18","url":"assets/js/a661cbbc.2a94881c.js"},{"revision":"746e28a1b7743ee2b8b1d441dffa11e2","url":"assets/js/a68a7a4e.264a3e76.js"},{"revision":"622537237e65cdd33a4355894a1e6828","url":"assets/js/a6aa9e1f.16a21187.js"},{"revision":"d3f00fd90523520e17a788ac693f703c","url":"assets/js/a715936c.63419e79.js"},{"revision":"bacc5f7f3a40f1b3611dff59159637c2","url":"assets/js/a7456010.d80fd69d.js"},{"revision":"6aba7f46de27a14c9ba425a6dbfdd9af","url":"assets/js/a74dca09.75e72b78.js"},{"revision":"43bc6205047b7c6a86210fd65114809f","url":"assets/js/a7ac78bb.a0eb3d35.js"},{"revision":"0bf7d8e0f20d46f25d3c4d5ed58a9fad","url":"assets/js/a7bd4aaa.622fae5d.js"},{"revision":"a9f3faedc5c61bfa50412d47501edfb0","url":"assets/js/a907b7c3.e0fd8db6.js"},{"revision":"be5ab3d78e1cb407620eb0b3438b9b08","url":"assets/js/a94703ab.f3ae7b4e.js"},{"revision":"194a07687e2239f56e8787f2d7766b51","url":"assets/js/aa18a71c.f7f8ded6.js"},{"revision":"286cce51b68f38fb77af320a9c4184c7","url":"assets/js/ab4f64ba.6658734a.js"},{"revision":"88023abedc270d7ebcfd5d592405f8a6","url":"assets/js/aba21aa0.5bc50980.js"},{"revision":"7eb4b43f63d4009bdf40e67b42b5115d","url":"assets/js/acecf23e.beaa36c3.js"},{"revision":"eebf4fe9c330501c18e6e6993dad240e","url":"assets/js/ad5b23ac.9cdb6d3b.js"},{"revision":"b679c415b5064e61fe9c1dede799cf25","url":"assets/js/addd9d98.b6b401e4.js"},{"revision":"32ecca85f68aa19e4be2f3e302b79ab7","url":"assets/js/ae9935bc.d496fef7.js"},{"revision":"6b8b14130974b630de73c59a56f3a8d7","url":"assets/js/aec260ae.7ec7ee9c.js"},{"revision":"ad66fbd020a76c562012524ce28dcdd5","url":"assets/js/aed6c7bc.0c23aef1.js"},{"revision":"1a9faeef70eaa198c00a79c21d526678","url":"assets/js/af43d14c.be41b78e.js"},{"revision":"9ebf0f02ac0204de3423f8a110953d80","url":"assets/js/b0ac20b6.7c87b5c1.js"},{"revision":"fdbdd415146143116a2646c71864b053","url":"assets/js/b0e5bd01.646ab0b7.js"},{"revision":"9a49f23d14f7b167f886d7041885b987","url":"assets/js/b1436a9e.ac155dc7.js"},{"revision":"75570e20a05842c1f63f6cd809eb6625","url":"assets/js/b1a9994a.c1d21b8e.js"},{"revision":"0f07df149e59a6808add7d94c120e279","url":"assets/js/b1bfa9f7.9d487d22.js"},{"revision":"f3eefc027ec27d9ff6590aad06bbfd5d","url":"assets/js/b2f737a9.b72c63af.js"},{"revision":"d1fc2e407b4485296a73239a95a11cab","url":"assets/js/b347ea7a.2a621e76.js"},{"revision":"8b7aa1fcd56ab341f548e301d82c2380","url":"assets/js/b38399eb.7e0c2683.js"},{"revision":"eaa8a10590ce7ab8cabacf1a57cde886","url":"assets/js/b48ab446.00320041.js"},{"revision":"1cc623b85ca3ebfe0ce94e4526c8235e","url":"assets/js/b4cf731e.03671b1a.js"},{"revision":"22fdb4c490995a9291d79d68fb95147a","url":"assets/js/b54091ce.7ae93a07.js"},{"revision":"27730c66adb490870ecd8212450ceb7e","url":"assets/js/b6b7bfe6.673ad334.js"},{"revision":"dfc0148e3a04f5c3d1baba0d330c1c49","url":"assets/js/b71a2a89.e01c3db0.js"},{"revision":"eea529810a6805b9f159e019fb942e90","url":"assets/js/b85e7ff6.98b9fb6c.js"},{"revision":"bca150319d79411a93c1c1599e2b1cab","url":"assets/js/b87bf306.e5a76c21.js"},{"revision":"312021e2f7bf398d5e779fead98c0cc8","url":"assets/js/ba61d949.b6570a31.js"},{"revision":"6de920963e4ef806ce39a9cfdf8e7c06","url":"assets/js/ba8b3534.4ebb0f88.js"},{"revision":"5cb873239d2bb13990a1bd2cf882c7ca","url":"assets/js/bbddb7b1.20773680.js"},{"revision":"e53d6e491198d370c54bd555e7251561","url":"assets/js/bc302511.51e0e2ef.js"},{"revision":"45b1a4c53cd0202d2833c14c2ccd4ffe","url":"assets/js/bc770e2d.6244957d.js"},{"revision":"fbfe76a9299cc73e580e2c1f97d16c96","url":"assets/js/bcbb32e8.ac74b327.js"},{"revision":"63990a5c8e0854ecd6b61a24540811b1","url":"assets/js/bccd76a8.cc9ef0ae.js"},{"revision":"7d743061030de639dfa2b2f1c051d59c","url":"assets/js/bce2ffab.d34c4c37.js"},{"revision":"f2a98d7364e67b3663de649f163c983e","url":"assets/js/bd7149c1.3278a7f9.js"},{"revision":"263daa48a0b286fc2ae09c793a19ca51","url":"assets/js/bdab9796.ce2e1c53.js"},{"revision":"82d4325a0bd37045309f6c30d6ecc50f","url":"assets/js/be1a9fc5.c2e519ce.js"},{"revision":"c91baef7b8dd72680b8e4d559b4d70ff","url":"assets/js/bf1080de.57a870d0.js"},{"revision":"8eefe74dde734cf229d2c229d86693d6","url":"assets/js/bf54d0bd.38095a67.js"},{"revision":"ee12d80db7fa4247f80f2413a8216a26","url":"assets/js/bf866d79.8e69b169.js"},{"revision":"d3b2b9cd0364c64aaeb3d8b7e09c600d","url":"assets/js/bfd9bf94.4a2c5cd7.js"},{"revision":"e00a61b5c975b5236ae7eddbbf56c9e9","url":"assets/js/c01d2348.a679d078.js"},{"revision":"664a0f118ce6bb8203869e5718fd52f5","url":"assets/js/c116f728.6d49d1dc.js"},{"revision":"4071903163616c208a963bd011ee29b4","url":"assets/js/c141421f.fdbec55f.js"},{"revision":"6c397b77ea7b5efd4f821d3d524235c4","url":"assets/js/c3218042.ab4f92b4.js"},{"revision":"761ef95fe736c011a256a6c0ec5ee002","url":"assets/js/c459a19d.e2e6f3e0.js"},{"revision":"a12cabed3ee3aebf55ef39041501785f","url":"assets/js/c4990fee.9672d627.js"},{"revision":"f0245300777aa11958e9a8662cffceb4","url":"assets/js/c4ace355.79023161.js"},{"revision":"f07bf6b34004aa4c328afdafd1069c5b","url":"assets/js/c51e6704.2e43d00a.js"},{"revision":"79922d75892c0d8bfcb5a5093b6ed4f8","url":"assets/js/c56c55ab.c901155e.js"},{"revision":"2776791503833cc913f6d58167aa8ada","url":"assets/js/c6f10a23.868f32ba.js"},{"revision":"dd225efc191f91efb4bdda168f2e6951","url":"assets/js/c7068d84.027fea0d.js"},{"revision":"6fa4db90cd5d2e2c7daa722817a5b04f","url":"assets/js/c73a8bd2.ea84d7d8.js"},{"revision":"2fcdff69b0a4810b60e3eb1360571897","url":"assets/js/c74d1c35.58193961.js"},{"revision":"f0141281866d3724f9b4121783e934fb","url":"assets/js/c762c146.c0f1ea24.js"},{"revision":"33065d7fc9d709fabbd1850fb00b8709","url":"assets/js/c7ca486a.fa978484.js"},{"revision":"7c4cc5843d1cabf9e42328884f218aad","url":"assets/js/c9691cb1.4bc10b5a.js"},{"revision":"30a770b5a710e65943f84cdea3a726b5","url":"assets/js/c96b9888.4387fc7d.js"},{"revision":"b79de9d4bd18e025c23e9acd25fd6105","url":"assets/js/c9e4c0c5.a87d67a5.js"},{"revision":"fd1080768b4acd5f4d163cb8a763eead","url":"assets/js/ca51e50c.f4336d68.js"},{"revision":"dad52fe3ae576e20ce42493e7b980afb","url":"assets/js/cac92b6a.82e4acc2.js"},{"revision":"3ddca5da1d4d4c92a65287aa54c8c6fb","url":"assets/js/cb122af7.e6900429.js"},{"revision":"35e0688ee7d70552cb23f814e5fd1dcb","url":"assets/js/cbb899e4.69f1754b.js"},{"revision":"d0a1701d99756d41fc044c68e9bfaf35","url":"assets/js/cc671787.a0030021.js"},{"revision":"78d61658c90160e4346c3ebef742b8e8","url":"assets/js/ccc49370.28bdfe4b.js"},{"revision":"fec7a90f9f5b55172adfdb671a3db43e","url":"assets/js/ce3b59e7.dd20760e.js"},{"revision":"3b9c2a1c8dd31e5f474b2da295b8fd04","url":"assets/js/ce5880b7.e0214971.js"},{"revision":"a1300866e04ceb3856f28d0ffb679cd2","url":"assets/js/ce9244da.09d3bdef.js"},{"revision":"754250839f1c3549544d8aed831befee","url":"assets/js/ceef9751.bb1ab844.js"},{"revision":"af6ab7f3f07fa141e6404fb2f800a44d","url":"assets/js/d03b1fb7.eaccbd68.js"},{"revision":"39bd988eefe9d4305d68734a8dd349f5","url":"assets/js/d062d21d.71f0d7a8.js"},{"revision":"454b1278f729d3fc79d45b79c5f23798","url":"assets/js/d068e1ab.24a39b93.js"},{"revision":"591ead65160b3b9644c8bba71ea9b8e3","url":"assets/js/d08c98d1.61bd1f4b.js"},{"revision":"161185d71c9fd6c3664074a8ba84a111","url":"assets/js/d182442f.e6dc99c5.js"},{"revision":"bb280bbe00862a6465d459b6347d746f","url":"assets/js/d2551a9d.cc6a385c.js"},{"revision":"6aedf5c20a6960246cc59540965ae35b","url":"assets/js/d2a1308d.5142be2b.js"},{"revision":"24a184b70676e10f375960ef38c25e32","url":"assets/js/d3d3b96d.3a222347.js"},{"revision":"16c30fb360ee36be485343a4a1ac32fd","url":"assets/js/d4a0d5da.309427cf.js"},{"revision":"bb1daaf6fc037cbd86a1c2665b5cdee3","url":"assets/js/d5f16e6b.864d4d52.js"},{"revision":"3f2f0b227766178c542defe296afee8b","url":"assets/js/d7013fe4.a4b20d51.js"},{"revision":"61d413e6bba2cc7487fc12576653e6ab","url":"assets/js/d717a81a.048b083e.js"},{"revision":"48b1eacd1b96b3d7b1a34d48983bbfd1","url":"assets/js/d7206776.b035cbb0.js"},{"revision":"dbb16e83f868ced0912755992144a616","url":"assets/js/d7477d10.d7415483.js"},{"revision":"3eae06985fd64efd910d9c3bc7d3acc4","url":"assets/js/d8476605.23d15eb6.js"},{"revision":"3efe558b66dc09a509b2ef8e8baf42c3","url":"assets/js/d86891f4.069d0f7b.js"},{"revision":"3e59e7ab46e63c7d49a3a5e9806e66c9","url":"assets/js/d8b371ba.a2325e23.js"},{"revision":"9d8f05a2c1e58523cbc514332537c98f","url":"assets/js/d8b8f224.7e9c2b51.js"},{"revision":"ad44e48c1f10bf7a83731f48bf368f98","url":"assets/js/d957216c.96309753.js"},{"revision":"158c722f6c445093efd72c4a7e34ce7e","url":"assets/js/db9af752.d4381115.js"},{"revision":"b232d82e7bd1d10479fd60b2d0ac9795","url":"assets/js/dc42def8.826bf36d.js"},{"revision":"5a7770f5cf9f84e4c5a4d02a252fd150","url":"assets/js/dc42e5d2.100abbef.js"},{"revision":"854237363f78b482372dfb1d8064efa5","url":"assets/js/dcd8b0d5.a94ea29d.js"},{"revision":"9b184886121ed486d71dda107aede36e","url":"assets/js/dd4c326b.e7f5ecaf.js"},{"revision":"2d4d759f81d90d1b43650345f5be686c","url":"assets/js/dd4d88f2.8c263976.js"},{"revision":"1434fc1da9fec703a593060350b1927e","url":"assets/js/dd5f7850.c72ac04f.js"},{"revision":"940150cf658a2e7bcbdf679a6bfa5e92","url":"assets/js/ddd8d528.cc482fc0.js"},{"revision":"2050023989e272696f1ca597cea8aabd","url":"assets/js/dec47d54.9bea39c2.js"},{"revision":"b7163aca84252a18658b4b8e6e61b022","url":"assets/js/df035555.acd48e97.js"},{"revision":"477faa39c78b007d0475e17fb64cfc13","url":"assets/js/df056c8b.88356ea1.js"},{"revision":"1b7ea6ebeacc951c68afbcb6f8f06b5c","url":"assets/js/df203c0f.a8413130.js"},{"revision":"727fc6a898d622573fbb96763c1bb6de","url":"assets/js/df21cc78.ddca20f5.js"},{"revision":"ae4e481d5ab6030aa9a46271f87f178f","url":"assets/js/df72be57.cb8c5d2a.js"},{"revision":"1f9db5fecb3fb41007dd06fd04945a71","url":"assets/js/dfdaed21.918d2fcb.js"},{"revision":"307b8f4ef58523f5b77eae2455afcc4a","url":"assets/js/dfef153c.daa0a33f.js"},{"revision":"dd561dd0d692835f81e6fd28eeddd6a9","url":"assets/js/dff3b0a9.e28d5e5e.js"},{"revision":"09e14fa3e538a9334422b060cb58f6e1","url":"assets/js/e0076717.4afd119a.js"},{"revision":"6b3600147a2642046528dc29f045e753","url":"assets/js/e060feb7.9899ab7b.js"},{"revision":"9e12a79ccb1369cf62eb6a1b73ea27e4","url":"assets/js/e0719818.61f82a4d.js"},{"revision":"7d868ceccb5a7f43331221a6098991fc","url":"assets/js/e12b3497.5bb2f1ce.js"},{"revision":"90b01f5fa828cc8f56907fe9371a7cf6","url":"assets/js/e1a55b77.cb2ea0ab.js"},{"revision":"673fcd40414ae215c673e08814c9dd7c","url":"assets/js/e1b7d523.f5b8a36a.js"},{"revision":"047737b8ce8e92e3db6a968af2706f8e","url":"assets/js/e1e91f63.aa4687c4.js"},{"revision":"cd282bcc548744e162d3ce94a42f105d","url":"assets/js/e25fe746.55735b6b.js"},{"revision":"fb0df23f21be64443f9d24a73033ef16","url":"assets/js/e4700498.8ad108dd.js"},{"revision":"aa821434a6a63e377ee742af02a2ea1a","url":"assets/js/e4d2c113.8e993852.js"},{"revision":"4640815f1d68b9d0c0f78c7ebf8b3db9","url":"assets/js/e51b3b2f.3de95f07.js"},{"revision":"7e9e3897df5585e788f8831b25872188","url":"assets/js/e575fb7e.a4d403d3.js"},{"revision":"f4ff9e45c9e3946d1b4270a4943d0f05","url":"assets/js/e65a01b4.d9be461e.js"},{"revision":"19271a752c855608468d7940015a84b4","url":"assets/js/e6a60088.ab3ed0bb.js"},{"revision":"2178c202d271e3ef50f1e59de86c13db","url":"assets/js/e74eaed8.a907b9a2.js"},{"revision":"f5ecda492d497d8961547b4d43d91118","url":"assets/js/e79f4725.fe5cb7d2.js"},{"revision":"636c2a90ca9b49ff994609a6db7ff5c1","url":"assets/js/e818fdac.c56f5602.js"},{"revision":"81d15c456823879deba47de894fad594","url":"assets/js/e8212a82.bf1712b8.js"},{"revision":"f66e77dd6b93c48f23876ef61caae0fa","url":"assets/js/e87036e5.664982e2.js"},{"revision":"60db530f880d33a06a55378b01f8680c","url":"assets/js/e88bc2c9.cd052fc0.js"},{"revision":"b7a3e00c7bcf57eac912b513ae0df522","url":"assets/js/e8e8730c.653611b3.js"},{"revision":"625ade78211d8618ba74ca9f6418f0bf","url":"assets/js/e8eca889.e59b0e71.js"},{"revision":"c1fa0a7b375e3318e129644934ae4b05","url":"assets/js/e95d6894.1164ce04.js"},{"revision":"b328ab5f51df1e1b0c8dd599493b9446","url":"assets/js/eabf3fcb.774e5066.js"},{"revision":"05f52cd42da44fb790b34f98c1dfe5e3","url":"assets/js/eb10310c.86bf1e71.js"},{"revision":"079ee49829c3b45884e807ae6e9a8971","url":"assets/js/eb3a0d98.30ee178c.js"},{"revision":"63cd4b37878a2b9a20121d6c301b699c","url":"assets/js/eb7779dd.1df88bfa.js"},{"revision":"fa08282b53383b7ed4b91d01664dea01","url":"assets/js/ec67df2f.647aa44f.js"},{"revision":"7b3af5c6de4c27a71e3cbd4e25124e19","url":"assets/js/ecd89017.681b3d20.js"},{"revision":"9512a049f225a11d7c92b40d28721f01","url":"assets/js/ed079b03.a1bfeb09.js"},{"revision":"f3f99ea3cbb775c693d31940ec2159f5","url":"assets/js/ed36f606.006d6bed.js"},{"revision":"f8b0d50a9c22e6968f3c1c75f9e53e23","url":"assets/js/ede3a018.c1d6ddd5.js"},{"revision":"08c6d6d18459265724424717b112667b","url":"assets/js/ee0ff195.3a96386f.js"},{"revision":"e8ee2324d81bb484f378ada27a4e9451","url":"assets/js/ee258e29.cfe6e844.js"},{"revision":"60f6f8c8ea305591f96a21dcee2b464f","url":"assets/js/ee45215e.01cb044a.js"},{"revision":"83e67d0b25e59994d06869162ec0c87f","url":"assets/js/ee712ef6.4a7cec0c.js"},{"revision":"518d5cb1d834f35489198ee70d954c0f","url":"assets/js/ee9d4de7.26ddf0e6.js"},{"revision":"d4f3d8338d3b09b109b7417f00470cdf","url":"assets/js/ef147677.8dc2eb73.js"},{"revision":"b96c868ca20f93543b43b8755a3ad14d","url":"assets/js/ef846e1f.6a302196.js"},{"revision":"d90249105414da86551e1836cfbb2c3a","url":"assets/js/f079ae4f.ff870428.js"},{"revision":"b681ae915453fb730a3e6ed9f7bf14e3","url":"assets/js/f0a779ba.f475f01f.js"},{"revision":"356f489dbfb3940b24b126f40029fb28","url":"assets/js/f16d59d0.81ffa428.js"},{"revision":"144da2fbbab2f8b882730c8dbb64be12","url":"assets/js/f2dae80d.49f23b94.js"},{"revision":"8c84bf26bf0913d3d354201225142524","url":"assets/js/f36ddf03.8482f671.js"},{"revision":"5e002ac79f50c64ae8dc9c7d199e2e4f","url":"assets/js/f36f1ab1.779e88cb.js"},{"revision":"9b5e1e25d256e8bfa572b6484dc624be","url":"assets/js/f4efd2af.34b9f043.js"},{"revision":"4cd7cf379fd38cf868ad138ab7725b3c","url":"assets/js/f59f4822.c670239b.js"},{"revision":"b25f74c8c63adadce992d17e857023ec","url":"assets/js/f60bb54b.97fd14e1.js"},{"revision":"f68acf56e5174486b1db1b0c033d6e1d","url":"assets/js/f615579e.c96d2d5d.js"},{"revision":"b1f38c372782583980f2f5de2a14e646","url":"assets/js/f6970338.68e5bd45.js"},{"revision":"3f6bde1453cae11ae9c3a1e306636fca","url":"assets/js/f752113f.1c142b1f.js"},{"revision":"5e2092c308483d691f3dcde8f13b0e47","url":"assets/js/f8257e9d.cd4a60da.js"},{"revision":"aff47e3f606d638d51da3309e164529e","url":"assets/js/f85a5e62.dbe13bd4.js"},{"revision":"87a196e0686aca6e21df7957b897746c","url":"assets/js/f930fb00.a431ccb6.js"},{"revision":"08ad35727815d4ba0ab18801dc9d4ab6","url":"assets/js/fa17a3e5.a0898a3b.js"},{"revision":"be7edfc80aeec3dee504419357e07b00","url":"assets/js/fa4d91bf.53806ecd.js"},{"revision":"8bac06010f845ccb5461f4c6b4845666","url":"assets/js/faa36cc7.05aafc9e.js"},{"revision":"5f83eae5ccbc7c25e476b5c4772297a8","url":"assets/js/faea717e.c9d5167d.js"},{"revision":"d13208c1fd78a346747fdcf4e9f21d83","url":"assets/js/ff0aa122.022d4b9c.js"},{"revision":"6f5351f1d610d4cfc6f2da4fad70e329","url":"assets/js/ff82175c.890960da.js"},{"revision":"d446983081e8402f53c5c97df4bc6197","url":"assets/js/main.5c3bbcf1.js"},{"revision":"e852c89d9d1316bf777ad167681c53bf","url":"assets/js/runtime~main.e1b4125a.js"},{"revision":"258bca2408a639a50222ce81e86a4769","url":"blog.html"},{"revision":"8feb3b6704935a6987771a741232a713","url":"blog.html.html"},{"revision":"2d5fc55aff31adb0a041ba155c394957","url":"blog/2017/12/14/introducing-docusaurus.html"},{"revision":"3ee1c79f521592dc56a8f090259cb41e","url":"blog/2017/12/14/introducing-docusaurus.html.html"},{"revision":"e84c68c8469eb082ea2c701c92347271","url":"blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html"},{"revision":"6dd8fc7bb5523485abde86ad47ca7ee1","url":"blog/2018/04/30/How-I-Converted-Profilo-To-Docusaurus.html.html"},{"revision":"61d8e86ee0f770843ec375fb43007cb7","url":"blog/2018/09/11/Towards-Docusaurus-2.html"},{"revision":"18e81ac082108c18c3fa00ccbab00340","url":"blog/2018/09/11/Towards-Docusaurus-2.html.html"},{"revision":"9e71141ae1e4dc064550b484d034b5ad","url":"blog/2018/12/14/Happy-First-Birthday-Slash.html"},{"revision":"5660b434adbab0b675504c7ea0e98dd9","url":"blog/2018/12/14/Happy-First-Birthday-Slash.html.html"},{"revision":"a64ef53179577eeacd91bbcc497c23c0","url":"blog/2019/12/30/docusaurus-2019-recap.html"},{"revision":"80c01a6949619a234ebdafe895aa9f6e","url":"blog/2019/12/30/docusaurus-2019-recap.html.html"},{"revision":"b415d53f9e23d8fdac1d539ee0f06264","url":"blog/2020/01/07/tribute-to-endi.html"},{"revision":"f30473e7851ee1d1622e621c8c5f9487","url":"blog/2020/01/07/tribute-to-endi.html.html"},{"revision":"ca3fe1f14e063ef95da6655120533e2a","url":"blog/2021/01/19/docusaurus-2020-recap.html"},{"revision":"4e2220db0e2ff7362d0fd5c1dbde5454","url":"blog/2021/01/19/docusaurus-2020-recap.html.html"},{"revision":"1f6d55baef363e0b8d91db92d7313d32","url":"blog/2021/03/09/releasing-docusaurus-i18n.html"},{"revision":"3d9a7e516e1e0d2ec097187bf23a21c7","url":"blog/2021/03/09/releasing-docusaurus-i18n.html.html"},{"revision":"3d30d39e56de9c290aae4fbfd50bd5d9","url":"blog/2021/05/12/announcing-docusaurus-two-beta.html"},{"revision":"b1fd7edbc84065e8cdd5051f8a6ed7dc","url":"blog/2021/05/12/announcing-docusaurus-two-beta.html.html"},{"revision":"6362d559b2ad984fd7a213342bb8e7cb","url":"blog/2021/11/21/algolia-docsearch-migration.html"},{"revision":"63aa5147c60eeaab51aebe9d6a0920ac","url":"blog/2021/11/21/algolia-docsearch-migration.html.html"},{"revision":"41c7b77d894e9fdb011358d138ccd1b0","url":"blog/2022/01/24/docusaurus-2021-recap.html"},{"revision":"e69a9c7ca3ced3b1ebcfcd56f3725b34","url":"blog/2022/01/24/docusaurus-2021-recap.html.html"},{"revision":"86c0a6b42f28f46207158f7c594f3d46","url":"blog/2022/08/01/announcing-docusaurus-2.0.html"},{"revision":"ac5d4ff2ce7fecb5f613b66244cb059b","url":"blog/2022/08/01/announcing-docusaurus-2.0.html.html"},{"revision":"fab536b320b1fcaa6567034b09cc0890","url":"blog/2022/09/01/docusaurus-2.1.html"},{"revision":"e09904924f055eeae22327516e1a716f","url":"blog/2022/09/01/docusaurus-2.1.html.html"},{"revision":"e67289d4539aca76695cd85094239d51","url":"blog/archive.html"},{"revision":"6f1e6424760856d5c66033b75cd8b11b","url":"blog/archive.html.html"},{"revision":"1a195eb3ffc510ef61d6d2067e9fc335","url":"blog/feed.json"},{"revision":"c675bcbdbc28c62a90fd4141886fb55e","url":"blog/page/2.html"},{"revision":"f5eb91c3578964cf21f3cacf735348fd","url":"blog/page/2.html.html"},{"revision":"791925a2246ef92a635a9c54cc97d204","url":"blog/page/3.html"},{"revision":"53149337f806e01e38fd27df91654eab","url":"blog/page/3.html.html"},{"revision":"494599597a347f53765ecb78aa6688e5","url":"blog/page/4.html"},{"revision":"4dfc312f339695f1def4da21ead54315","url":"blog/page/4.html.html"},{"revision":"39cef5fa16d8e46fa4d2c4b2a3683614","url":"blog/page/5.html"},{"revision":"3f1b98e336db9ce556eaa3623256fda9","url":"blog/page/5.html.html"},{"revision":"cf756b6ae6982afaa24576efbeb41da5","url":"blog/preparing-your-site-for-docusaurus-v3.html"},{"revision":"5647382ceb8da4d32a63f84fcfa8c94d","url":"blog/preparing-your-site-for-docusaurus-v3.html.html"},{"revision":"731a9235391b466f1df9991693dfd3d7","url":"blog/releases/2.2.html"},{"revision":"9d93ffcfebb134aadbfb8e6f7d113e40","url":"blog/releases/2.2.html.html"},{"revision":"a576617df1d4d00e2c226462b5f0622d","url":"blog/releases/2.3.html"},{"revision":"be0568d535721cf7fca01decd7a40bc7","url":"blog/releases/2.3.html.html"},{"revision":"fe6afe6cef52a976ecf43576ba827005","url":"blog/releases/2.4.html"},{"revision":"988bf6fdee09de66c3cf716c502e977f","url":"blog/releases/2.4.html.html"},{"revision":"755ed00a8ce7822301550d33bed295f6","url":"blog/releases/3.0.html"},{"revision":"faadc0bdb4f62d283f70d565f46c4385","url":"blog/releases/3.0.html.html"},{"revision":"98708bf1a795a1ed81e8bc1ba94630e6","url":"blog/releases/3.1.html"},{"revision":"c743e51c0284444d52736c211538ce8c","url":"blog/releases/3.1.html.html"},{"revision":"4334f6e078abe9f592c3f4572a47cc39","url":"blog/releases/3.2.html"},{"revision":"7f91a6db6aa93f58aa29b019c67d6a85","url":"blog/releases/3.2.html.html"},{"revision":"064a88cb86e6541f5fbda9deb033caa4","url":"blog/tags.html"},{"revision":"f2811915b281602bed36ba3a25576cec","url":"blog/tags.html.html"},{"revision":"c364bc69532a21d4b41ed1324cc1f764","url":"blog/tags/adoption.html"},{"revision":"950dd0bbca4d6e5a770708797ef34dff","url":"blog/tags/adoption.html.html"},{"revision":"5c2f2e56403a35ab6d0f215f5a9745be","url":"blog/tags/beta.html"},{"revision":"3eeb125e723d878194a80c22005a32b9","url":"blog/tags/beta.html.html"},{"revision":"07aa436a19baaf771ae0f786c9f98e1f","url":"blog/tags/birth.html"},{"revision":"f231322e705601e3025978dc115cc361","url":"blog/tags/birth.html.html"},{"revision":"ffc34abe6c1234f3fd3c13e4354d4b48","url":"blog/tags/blog.html"},{"revision":"b22784f487770ed96d6a3a168a741df5","url":"blog/tags/blog.html.html"},{"revision":"b1e7cedd391f4e5d7fefe4ad64330aa8","url":"blog/tags/documentation.html"},{"revision":"dddd60d791dae4d8ac862b893a73b9ef","url":"blog/tags/documentation.html.html"},{"revision":"48a99281114d1898e904e1449f1fc668","url":"blog/tags/docusaurus.html"},{"revision":"40b3c08d5ad563c4bcb7bf5993855cea","url":"blog/tags/docusaurus.html.html"},{"revision":"3e1f98ee190e5013c862ee5cc2e1e8e1","url":"blog/tags/endi.html"},{"revision":"376d818217dd395d30b7f6aa917376be","url":"blog/tags/endi.html.html"},{"revision":"d017b03ac2e75fb32716dd67eb4fa4b8","url":"blog/tags/i-18-n.html"},{"revision":"614b6246bdf038b9974e284cc79003a1","url":"blog/tags/i-18-n.html.html"},{"revision":"c1d732807b776e577a7a596871ee9893","url":"blog/tags/maintenance.html"},{"revision":"407631e51f61bb7f3b63bd7bd0282655","url":"blog/tags/maintenance.html.html"},{"revision":"5788cd7d5ca1f1e2b37d604a92f5a546","url":"blog/tags/new.html"},{"revision":"c3aed900790f225e5f3229926cbe64e0","url":"blog/tags/new.html.html"},{"revision":"e1c26c2ce0dcd349f986608054785fc1","url":"blog/tags/profilo.html"},{"revision":"07a0c6dd1fea44b57fd66c27be22b8f5","url":"blog/tags/profilo.html.html"},{"revision":"a7316ab086553d69a00979f22b90143c","url":"blog/tags/recap.html"},{"revision":"ea03c19de1325e50de6608b93ca54b96","url":"blog/tags/recap.html.html"},{"revision":"d3126fb9d236ebbec51f4d86718ceaa2","url":"blog/tags/release.html"},{"revision":"60716dc5ad6d519a95771327740310de","url":"blog/tags/release.html.html"},{"revision":"98199909b4f30c6ca7d623a814b604fb","url":"blog/tags/release/page/2.html"},{"revision":"502a89d9333ffd0a4649f453b944ef0e","url":"blog/tags/release/page/2.html.html"},{"revision":"47d7c76e41301d18da2e99b10b154739","url":"blog/tags/release/page/3.html"},{"revision":"70caccf82e1d3911783c9714254da128","url":"blog/tags/release/page/3.html.html"},{"revision":"0ef45b350a6cf74746d427a26213dd7f","url":"blog/tags/search.html"},{"revision":"b62ff0df936a835331ac77c507ebef0e","url":"blog/tags/search.html.html"},{"revision":"468e9c3ba95fa6ab5381d72be98b0f58","url":"blog/tags/tribute.html"},{"revision":"a8d5e0ca69b32e1b11fb2887aa5302bb","url":"blog/tags/tribute.html.html"},{"revision":"0fb19fca38e2103d93eb1c45497206c6","url":"blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html"},{"revision":"8d8cb54d8b61f9efd1e50bac9d55be11","url":"blog/upgrading-frontend-dependencies-with-confidence-using-visual-regression-testing.html.html"},{"revision":"3ba0e67545e8c3efb5c7bce6ebb30a0f","url":"changelog.html"},{"revision":"9fceb2e826c7f78989e11ca094916522","url":"changelog.html.html"},{"revision":"861aa1c4238da47bb1896cd6b4423b3d","url":"changelog/2.0.0-alpha.19.html"},{"revision":"f2e0e0f857044b20bb69c662fda78948","url":"changelog/2.0.0-alpha.19.html.html"},{"revision":"713bca7c46389982cad262ca4b4f1d49","url":"changelog/2.0.0-alpha.20.html"},{"revision":"a0c0e6c99ed3bc6fae7951ab1bf883e2","url":"changelog/2.0.0-alpha.20.html.html"},{"revision":"8f83bd5e091ee5caea6812834836f8fc","url":"changelog/2.0.0-alpha.21.html"},{"revision":"7d4737084778e794f0db93a4f60df4dc","url":"changelog/2.0.0-alpha.21.html.html"},{"revision":"a4c5af7fca6714eeb97739f45924a12e","url":"changelog/2.0.0-alpha.22.html"},{"revision":"fd02f4d52be9db9af78f8b67d2f96f8e","url":"changelog/2.0.0-alpha.22.html.html"},{"revision":"e94b61b7e7502f3b0f6a512ca1032177","url":"changelog/2.0.0-alpha.23.html"},{"revision":"2b3f17c42240fc779df87f7af1ee12cf","url":"changelog/2.0.0-alpha.23.html.html"},{"revision":"1781abb366f83bc7f9e7921af0f5c80c","url":"changelog/2.0.0-alpha.24.html"},{"revision":"d49fd9532a651d282faf507685562029","url":"changelog/2.0.0-alpha.24.html.html"},{"revision":"522781f5c57c573cadc1796a0f385697","url":"changelog/2.0.0-alpha.25.html"},{"revision":"377be35bc1a69bc25c339f5d91f0f96d","url":"changelog/2.0.0-alpha.25.html.html"},{"revision":"e2d84b6b44e6ef0a9a6d2f5baa7586ad","url":"changelog/2.0.0-alpha.26.html"},{"revision":"a0c5aa15a27b25a7bb650b2ca6916e24","url":"changelog/2.0.0-alpha.26.html.html"},{"revision":"409abe6fdff2d182681dd8f74f8bb53a","url":"changelog/2.0.0-alpha.27.html"},{"revision":"61311f0f10e8803b79da4bf8f8099672","url":"changelog/2.0.0-alpha.27.html.html"},{"revision":"e2fd22eeebffb4e54834151b9bfa2525","url":"changelog/2.0.0-alpha.28.html"},{"revision":"6a7b66e628202ae2ce730f4bfad8505a","url":"changelog/2.0.0-alpha.28.html.html"},{"revision":"2b443ee4cfe8a47d4a9da62777315fea","url":"changelog/2.0.0-alpha.29.html"},{"revision":"2d0f982c5c982600f1105eb9012ef4f6","url":"changelog/2.0.0-alpha.29.html.html"},{"revision":"5ef9187fdc7cc52623a68f6a97822b6a","url":"changelog/2.0.0-alpha.30.html"},{"revision":"7fb2dca49827e9da21e5f82d5096d62e","url":"changelog/2.0.0-alpha.30.html.html"},{"revision":"afcb1460cf5fbb17b51b29c4d3057fc3","url":"changelog/2.0.0-alpha.31.html"},{"revision":"b066053d28ccf3f5f746be5bf9a7b260","url":"changelog/2.0.0-alpha.31.html.html"},{"revision":"c8f22e8df90c7fae34d05911758c19bf","url":"changelog/2.0.0-alpha.32.html"},{"revision":"0cc097ef13643116e75c666ef3614e96","url":"changelog/2.0.0-alpha.32.html.html"},{"revision":"ba8011aa2d4c8e4b94413edc68aef975","url":"changelog/2.0.0-alpha.33.html"},{"revision":"77c97ddc001dd64d2b8dc80ae558e3ac","url":"changelog/2.0.0-alpha.33.html.html"},{"revision":"a3cc33e5561bd2a732c73b355dbcfd48","url":"changelog/2.0.0-alpha.34.html"},{"revision":"212c8441e4a3c0003ff1d365854a7741","url":"changelog/2.0.0-alpha.34.html.html"},{"revision":"b9f8b6033e7649b0489f80bd520dcf55","url":"changelog/2.0.0-alpha.35.html"},{"revision":"dea8eacc1afdd00875c94a0905c511d8","url":"changelog/2.0.0-alpha.35.html.html"},{"revision":"b079c49912a291485a84e6c58a5495fb","url":"changelog/2.0.0-alpha.36.html"},{"revision":"9f2feeb3b967861b9c1f3b023806325f","url":"changelog/2.0.0-alpha.36.html.html"},{"revision":"6642bded925f9aaca84fbd8cd3b33d56","url":"changelog/2.0.0-alpha.37.html"},{"revision":"047c8d1eab5049912b72c3fce9c20f6b","url":"changelog/2.0.0-alpha.37.html.html"},{"revision":"1d9a0a1070674df3da81a15a8de85dd1","url":"changelog/2.0.0-alpha.38.html"},{"revision":"ccc2c4ad4927e0d837254a213b8fca7c","url":"changelog/2.0.0-alpha.38.html.html"},{"revision":"74709b0ded7c0a0c3d6a973c6c39cce8","url":"changelog/2.0.0-alpha.39.html"},{"revision":"16fab0155413d99b17172f27d109063c","url":"changelog/2.0.0-alpha.39.html.html"},{"revision":"cc0841efa4e00545f740afd443b2c655","url":"changelog/2.0.0-alpha.40.html"},{"revision":"0cff98757103178dd43c2fbc0f815108","url":"changelog/2.0.0-alpha.40.html.html"},{"revision":"3ea8205a45bcc7e2b7e77fa6a3a2531f","url":"changelog/2.0.0-alpha.41.html"},{"revision":"b239c704ede635978a7adbacb1782912","url":"changelog/2.0.0-alpha.41.html.html"},{"revision":"f651d7d22d145f5245887ab9f3941996","url":"changelog/2.0.0-alpha.43.html"},{"revision":"bd54bf50e6195bf8fa234703998e4737","url":"changelog/2.0.0-alpha.43.html.html"},{"revision":"46854a3758651af7bbd62e2f252e5915","url":"changelog/2.0.0-alpha.44.html"},{"revision":"453f680a2b320541721d520c6cdebe04","url":"changelog/2.0.0-alpha.44.html.html"},{"revision":"6385c6fd8f118ed3a74331b57905c698","url":"changelog/2.0.0-alpha.48.html"},{"revision":"5e892aba2b18c7c59a3802ce9303e865","url":"changelog/2.0.0-alpha.48.html.html"},{"revision":"274d481c2c22d069ceb8b101f1288ab3","url":"changelog/2.0.0-alpha.49.html"},{"revision":"c9b7b30bd58e72d00818a00b099ad46d","url":"changelog/2.0.0-alpha.49.html.html"},{"revision":"5cbc2db295e4652cbc4c223622987844","url":"changelog/2.0.0-alpha.50.html"},{"revision":"658629ab4cc29fa13761bfc0ddfd6a9d","url":"changelog/2.0.0-alpha.50.html.html"},{"revision":"38626b49edd5edab7f42bd28aa84cfb6","url":"changelog/2.0.0-alpha.51.html"},{"revision":"ac382be94775747b3f8c92e6eabb356b","url":"changelog/2.0.0-alpha.51.html.html"},{"revision":"6dde4ce513d5f08e3dfad9007c3c611a","url":"changelog/2.0.0-alpha.53.html"},{"revision":"c2ceca66d8955ba3f92e135d91f1fd47","url":"changelog/2.0.0-alpha.53.html.html"},{"revision":"73823bb5122a2e40fc3171f139a8042c","url":"changelog/2.0.0-alpha.54.html"},{"revision":"b8ca4c2d7f98985de241c1dcea4e8cab","url":"changelog/2.0.0-alpha.54.html.html"},{"revision":"5444c6dfce42ea5f3f9aceeaddb83531","url":"changelog/2.0.0-alpha.55.html"},{"revision":"ce064e10ecd1f33a197ab829b29aa07c","url":"changelog/2.0.0-alpha.55.html.html"},{"revision":"5d9b65ce22db43b432179161e613e2a1","url":"changelog/2.0.0-alpha.56.html"},{"revision":"16573aa4977fc2884bbf32366c7f577e","url":"changelog/2.0.0-alpha.56.html.html"},{"revision":"070027c115d18b3266dbec9b1f0b03a1","url":"changelog/2.0.0-alpha.57.html"},{"revision":"50253a4f049318cac37fe9606839e28d","url":"changelog/2.0.0-alpha.57.html.html"},{"revision":"dc1fc639be88083ab84a750f71de3576","url":"changelog/2.0.0-alpha.58.html"},{"revision":"0e41af72fa3b1776591d22f6173cf665","url":"changelog/2.0.0-alpha.58.html.html"},{"revision":"c5c9719ea38ccecb0824c5156509b801","url":"changelog/2.0.0-alpha.59.html"},{"revision":"e9ab544a4d87eea0646766fa646e5ea6","url":"changelog/2.0.0-alpha.59.html.html"},{"revision":"32a64d695cdf19baf63865aa87069783","url":"changelog/2.0.0-alpha.60.html"},{"revision":"49d7a49e0b1cf1a8a93c11084166404b","url":"changelog/2.0.0-alpha.60.html.html"},{"revision":"a0469e23a52c299654a1d274ca9be44c","url":"changelog/2.0.0-alpha.61.html"},{"revision":"1b63e7540387413aa721003c53976b9c","url":"changelog/2.0.0-alpha.61.html.html"},{"revision":"6883b9d3c6c0356370d1de29e7a016ad","url":"changelog/2.0.0-alpha.62.html"},{"revision":"61215e2d8a7d57623a23fde710a2d58a","url":"changelog/2.0.0-alpha.62.html.html"},{"revision":"ed55924855ebe52264cdeaa76043c01a","url":"changelog/2.0.0-alpha.63.html"},{"revision":"403267512c130a327a4cf6724bb0ee25","url":"changelog/2.0.0-alpha.63.html.html"},{"revision":"e11ef0851a202ed7517d54d0d58d74d9","url":"changelog/2.0.0-alpha.64.html"},{"revision":"2ab1262344ccaba2933ddbd0fbb158e1","url":"changelog/2.0.0-alpha.64.html.html"},{"revision":"ed96b67ed788eb9477557244c0cdd5e3","url":"changelog/2.0.0-alpha.65.html"},{"revision":"90eb75fd088101f6948b20daa1b27991","url":"changelog/2.0.0-alpha.65.html.html"},{"revision":"5ea31c870db7fbfabaf670023d0f9562","url":"changelog/2.0.0-alpha.66.html"},{"revision":"09796f1619c9d35193f93ae22119dee3","url":"changelog/2.0.0-alpha.66.html.html"},{"revision":"d2c195440049c30175d8ffed58ef1f5b","url":"changelog/2.0.0-alpha.67.html"},{"revision":"7988e596c1256476bc29678efd581fef","url":"changelog/2.0.0-alpha.67.html.html"},{"revision":"7122bcae196f950c81f7cce8ba738a71","url":"changelog/2.0.0-alpha.68.html"},{"revision":"ca93d3422e0a358b6fa83c5e261fdc57","url":"changelog/2.0.0-alpha.68.html.html"},{"revision":"bc042f8c625deb92e41a9d3dc381270f","url":"changelog/2.0.0-alpha.69.html"},{"revision":"e4a49c861344248761d7d4002f706d5b","url":"changelog/2.0.0-alpha.69.html.html"},{"revision":"a1e986f4cfc70814c22888fb4e08ec2c","url":"changelog/2.0.0-alpha.70.html"},{"revision":"7f3176838df51d7d3f646586a9b3f9ef","url":"changelog/2.0.0-alpha.70.html.html"},{"revision":"c138374a941d8e46b012823aa36fdb30","url":"changelog/2.0.0-alpha.71.html"},{"revision":"1d850f8c161c22e2170e5117bd8bd3de","url":"changelog/2.0.0-alpha.71.html.html"},{"revision":"50c276872e5efdef4a716d85e9769c4b","url":"changelog/2.0.0-alpha.72.html"},{"revision":"51500eb195fc5420d5960f04e747d069","url":"changelog/2.0.0-alpha.72.html.html"},{"revision":"6a39c42de841c14c674da8960c4020b0","url":"changelog/2.0.0-alpha.73.html"},{"revision":"a52ad53a43201aee031d48439d2a1579","url":"changelog/2.0.0-alpha.73.html.html"},{"revision":"523204b0ebdde748609c1725d83b7122","url":"changelog/2.0.0-alpha.74.html"},{"revision":"a2c445d2ace366ca2515f7f30a4cb5d5","url":"changelog/2.0.0-alpha.74.html.html"},{"revision":"8777db987ae2a3b2c14a009d80e764b6","url":"changelog/2.0.0-alpha.75.html"},{"revision":"eff8a3dce93fa2140f7751623ab18e83","url":"changelog/2.0.0-alpha.75.html.html"},{"revision":"41f6a853f0a4b2d0535d56ea22b84a09","url":"changelog/2.0.0-beta.0.html"},{"revision":"ca1c9b269828c8d5176e10bf36e4bb48","url":"changelog/2.0.0-beta.0.html.html"},{"revision":"239628752d243171276e7cb8c5a080c4","url":"changelog/2.0.0-beta.1.html"},{"revision":"96cc66791f9b08220d8be2ac7ec51ad5","url":"changelog/2.0.0-beta.1.html.html"},{"revision":"839afab36161accb145fb41e61466ae5","url":"changelog/2.0.0-beta.10.html"},{"revision":"a1e69b5df8901bc0194bfd398e2daf87","url":"changelog/2.0.0-beta.10.html.html"},{"revision":"2ba9b1e8242e11dbe67f7490ccbf3114","url":"changelog/2.0.0-beta.11.html"},{"revision":"c98a17d5f21750c267efa08518b4abd8","url":"changelog/2.0.0-beta.11.html.html"},{"revision":"b1d3178dfd83e295ae21341991c888ab","url":"changelog/2.0.0-beta.12.html"},{"revision":"c8f2f6e766b6f5e149d9a530e8b0d691","url":"changelog/2.0.0-beta.12.html.html"},{"revision":"0722663dffb00e74ab0e24a83288194c","url":"changelog/2.0.0-beta.13.html"},{"revision":"1b1adbc40a90f9f5e15722a6546fa0e1","url":"changelog/2.0.0-beta.13.html.html"},{"revision":"6166a3e6a2dbcf255fa057454bcbfefc","url":"changelog/2.0.0-beta.14.html"},{"revision":"5ca9851a8ca844ec035850da44bf14ac","url":"changelog/2.0.0-beta.14.html.html"},{"revision":"6660bde4a3eefdb22654d31bfa3974dc","url":"changelog/2.0.0-beta.15.html"},{"revision":"bd6d514cedba78344507a5e3cfa8ca77","url":"changelog/2.0.0-beta.15.html.html"},{"revision":"410d69c8a2dd506d5a11d7ab57a6e8bb","url":"changelog/2.0.0-beta.16.html"},{"revision":"933b11258d2566ce9c0b02187f75cf2a","url":"changelog/2.0.0-beta.16.html.html"},{"revision":"53d753078dd0c0780e1a51467fe4aaf2","url":"changelog/2.0.0-beta.17.html"},{"revision":"88b1e520c9369c8bd0c8400c6974c57a","url":"changelog/2.0.0-beta.17.html.html"},{"revision":"ac7cecbad1e77d2b62a4c181893fec7b","url":"changelog/2.0.0-beta.18.html"},{"revision":"48fad364f33fc9b5ba3e1aa61a2510fa","url":"changelog/2.0.0-beta.18.html.html"},{"revision":"d89adba66fd075e8141aa0823d0c4ea3","url":"changelog/2.0.0-beta.19.html"},{"revision":"6610e67d24ced91fe618529683fa5c99","url":"changelog/2.0.0-beta.19.html.html"},{"revision":"667f6933f1cbb9c143e6c6d4303fb7ca","url":"changelog/2.0.0-beta.2.html"},{"revision":"a09847e30be243a45447264882bd9eff","url":"changelog/2.0.0-beta.2.html.html"},{"revision":"f6a94072ba559857dddb92bf743189dd","url":"changelog/2.0.0-beta.20.html"},{"revision":"27dc967ceb55295809b36b1bd9088420","url":"changelog/2.0.0-beta.20.html.html"},{"revision":"d206741deeaec8020445e9a2f3448651","url":"changelog/2.0.0-beta.21.html"},{"revision":"8a797056d785a89b35b979b3a9312e2b","url":"changelog/2.0.0-beta.21.html.html"},{"revision":"12b5bac153eea6552272d7da9f67a470","url":"changelog/2.0.0-beta.22.html"},{"revision":"df6f55fcca0fe848187a6c705d4a0e6a","url":"changelog/2.0.0-beta.22.html.html"},{"revision":"f8c21746b59ea175f571e20ba3502516","url":"changelog/2.0.0-beta.3.html"},{"revision":"081f18cfc9dda4a0338cf008884a0c11","url":"changelog/2.0.0-beta.3.html.html"},{"revision":"199e352b49e57031999e4d604a85d323","url":"changelog/2.0.0-beta.4.html"},{"revision":"f85820304d36fb547ac8dede73daddb3","url":"changelog/2.0.0-beta.4.html.html"},{"revision":"8a86335a8145d636fcf2f159a2188558","url":"changelog/2.0.0-beta.5.html"},{"revision":"1986e425cbcf81d574910169704fd159","url":"changelog/2.0.0-beta.5.html.html"},{"revision":"47114bdbfbb27faeeb0235290b5e1306","url":"changelog/2.0.0-beta.6.html"},{"revision":"56845db06a3bc19877f5c3a86bd1b8f3","url":"changelog/2.0.0-beta.6.html.html"},{"revision":"5334816f377a090011c52e2e5ce501bf","url":"changelog/2.0.0-beta.7.html"},{"revision":"26a5ac2eb3f14f7bb240ba510698f8f4","url":"changelog/2.0.0-beta.7.html.html"},{"revision":"e447646223cbf0b589436a7373aac1c5","url":"changelog/2.0.0-beta.8.html"},{"revision":"d5ba64f024a4198791bffc229e5fc0f2","url":"changelog/2.0.0-beta.8.html.html"},{"revision":"faa99a6124d055b6632c5fc702dfcc05","url":"changelog/2.0.0-beta.9.html"},{"revision":"3f3b2601d2b7383f9e105c84f2322559","url":"changelog/2.0.0-beta.9.html.html"},{"revision":"5487b0d277f45dcbaa61883e4066d1f6","url":"changelog/2.0.0-rc.1.html"},{"revision":"727ca4d1bf62069082ff4bf2390c8279","url":"changelog/2.0.0-rc.1.html.html"},{"revision":"a9ea8b13b5ad69d62c7b73c636b26421","url":"changelog/2.0.0.html"},{"revision":"92f152a7c3d768b1a268d89d9b830d70","url":"changelog/2.0.0.html.html"},{"revision":"18e98e9f826950d5433071946decfa98","url":"changelog/2.0.1.html"},{"revision":"7b264bbc6bd7b790c20a7d79e10b1894","url":"changelog/2.0.1.html.html"},{"revision":"6b6d497291d2552b988d90a90b63a7f5","url":"changelog/2.1.0.html"},{"revision":"bd1091d5135cb478c9137513db4c7737","url":"changelog/2.1.0.html.html"},{"revision":"83ea1a6509cc991cdef38a54e4cbcdaa","url":"changelog/2.2.0.html"},{"revision":"06ceef45e2e65899eb681f1b7e90aa3d","url":"changelog/2.2.0.html.html"},{"revision":"74858ecc15562bab10f1949d24a24dc2","url":"changelog/2.3.0.html"},{"revision":"fe190b2f5634395d6e3d35a9107d8a7c","url":"changelog/2.3.0.html.html"},{"revision":"e6127df33fd90a91f03db46b3e2a1e65","url":"changelog/2.3.1.html"},{"revision":"b970032117d991d3fb49f5ec7887584c","url":"changelog/2.3.1.html.html"},{"revision":"b2ce249984212e6d147acaf202a7ebca","url":"changelog/2.4.0.html"},{"revision":"061aaa2e25f02dc5971b8d70d652196c","url":"changelog/2.4.0.html.html"},{"revision":"9c58673326015ecc9585af3aa981a8fb","url":"changelog/2.4.1.html"},{"revision":"0a4d98c0d61aac2505c9f4e2f4bb3c52","url":"changelog/2.4.1.html.html"},{"revision":"21e48f460b5b369da243205e4ba2c8b7","url":"changelog/2.4.2.html"},{"revision":"fd3961a2f08b729425e97143153644c3","url":"changelog/2.4.2.html.html"},{"revision":"5193ebe72fc9b4023b787922839155b8","url":"changelog/2.4.3.html"},{"revision":"91b3a2abd5a7000ed329c145f2ebfe24","url":"changelog/2.4.3.html.html"},{"revision":"237f215068f552b22d5976eedb0548f0","url":"changelog/3.0.0.html"},{"revision":"05d19ef649afa431daac916b11220d13","url":"changelog/3.0.0.html.html"},{"revision":"9e7a6d481333ade2ec5cf45827f1a52a","url":"changelog/3.0.1.html"},{"revision":"00cb828ac4b6f325622a543acd926c35","url":"changelog/3.0.1.html.html"},{"revision":"57ddeb9209b740981109707a88c6075a","url":"changelog/3.1.0.html"},{"revision":"dbc1cfdcfa289fab3c83338dad0c4066","url":"changelog/3.1.0.html.html"},{"revision":"8a16c2a9460524b3dddfb15d86a86108","url":"changelog/3.1.1.html"},{"revision":"79cb6451e804f1a2aa55ea97c4225c55","url":"changelog/3.1.1.html.html"},{"revision":"4275f52378aeb7655b07c0376d0c5d04","url":"changelog/3.2.0.html"},{"revision":"186bebf084a7ef0a22568d7caa4c8ded","url":"changelog/3.2.0.html.html"},{"revision":"e68f9d8d8d8712506d47ff7d0bcdac8c","url":"changelog/3.2.1.html"},{"revision":"ac31d74742b53d700511f65c2fff1482","url":"changelog/3.2.1.html.html"},{"revision":"fbafc259ad564892c4b57489d744073a","url":"changelog/feed.json"},{"revision":"b0c91c33acac1dc94c08f93fdec87486","url":"changelog/page/2.html"},{"revision":"c2a695049ccda144fc8bedb203e64308","url":"changelog/page/2.html.html"},{"revision":"c43dbe1d0a67437d757516ba6882cf5d","url":"changelog/page/3.html"},{"revision":"02c1b439a8fff0fef4d14dda26abc0c9","url":"changelog/page/3.html.html"},{"revision":"f3cae4b8441a557e7f6960a7545e1391","url":"changelog/page/4.html"},{"revision":"70cd88f5b5cf825697c7815ebee4d6e1","url":"changelog/page/4.html.html"},{"revision":"230f39a5ef051753600d9a95913e67ea","url":"changelog/page/5.html"},{"revision":"11af12f9284d146842996b7cf8a372b1","url":"changelog/page/5.html.html"},{"revision":"74ddc221b953e1e9bb218d0fd8e25911","url":"changelog/V2 Changelog.html"},{"revision":"f68e89a748b0afa17daba0e1924044d8","url":"changelog/V2 Changelog.html.html"},{"revision":"328e259e2ed7a4efaa4ea360cd3b1e4d","url":"community/canary.html"},{"revision":"e3a5e4a6ce987af94df8e65e7a8328ce","url":"community/canary.html.html"},{"revision":"6835fcafa6c771e56627d649320bde1a","url":"community/contributing.html"},{"revision":"d18830546d1c3e1adcc84315df95ec44","url":"community/contributing.html.html"},{"revision":"94bb190192c95ff0fa631254101b1781","url":"community/release-process.html"},{"revision":"26a0119b8990727c97e3b8405df704ea","url":"community/release-process.html.html"},{"revision":"10f16dc6b369cf0c244986ade210d713","url":"community/resources.html"},{"revision":"cc03db0237722e06b9de831199c32a50","url":"community/resources.html.html"},{"revision":"4348a65078e847c9832ca5ca2a1e57f5","url":"community/support.html"},{"revision":"26a4ed2b09c308605ee9db26078270be","url":"community/support.html.html"},{"revision":"e502cdf1fdfb7762196de115ad67fad6","url":"community/team.html"},{"revision":"d758d720dc8a84926ee051cd5ad87de1","url":"community/team.html.html"},{"revision":"4263791e78d3ad4d4857cec7b83c7320","url":"docs.html"},{"revision":"4e69e361e6128903530b10953de94fed","url":"docs.html.html"},{"revision":"e42a6461a4a9a9e36ee0028c3023c58f","url":"docs/advanced.html"},{"revision":"a629bfde662928575bbcc37b4901f2ec","url":"docs/advanced.html.html"},{"revision":"1bbc85480a8a69469110d5e9c0ba0383","url":"docs/advanced/architecture.html"},{"revision":"dc640e78e8939ec5425194a15eb130da","url":"docs/advanced/architecture.html.html"},{"revision":"b38920706cc6b885228def839696c58f","url":"docs/advanced/client.html"},{"revision":"0cf46bbf43f89010f35d37eaabcacb86","url":"docs/advanced/client.html.html"},{"revision":"7913a5c4bd8919f7748c5821ff8a3993","url":"docs/advanced/plugins.html"},{"revision":"bc68837c73f365c70d8645993d580c70","url":"docs/advanced/plugins.html.html"},{"revision":"ba4b8b4706161034dfa3c25d981bf03b","url":"docs/advanced/routing.html"},{"revision":"30498969b30f3e3c0fb960304d0f9d45","url":"docs/advanced/routing.html.html"},{"revision":"b08402312ada5ae1a175c0775f2f1df6","url":"docs/advanced/ssg.html"},{"revision":"b9f6f088a8ad61b7b3d44ff63b1860dc","url":"docs/advanced/ssg.html.html"},{"revision":"bedc612d34fdca9ca0f14eb8673044e9","url":"docs/api/docusaurus-config.html"},{"revision":"5d6476106c1fb6e11a7211ba34409124","url":"docs/api/docusaurus-config.html.html"},{"revision":"eb9ec961db3d871754770f861deaffc4","url":"docs/api/misc/@docusaurus/eslint-plugin.html"},{"revision":"15d8de6d4fe08dd85909827bb27209fa","url":"docs/api/misc/@docusaurus/eslint-plugin.html.html"},{"revision":"c3322180fedf8070c54a6c6280a97507","url":"docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html"},{"revision":"f693636f8c901973af150af238d0cfb4","url":"docs/api/misc/@docusaurus/eslint-plugin/no-html-links.html.html"},{"revision":"d0b51dcc0d98661a38ae2db9e87059c2","url":"docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html"},{"revision":"56e1b4cf36a8bd56fa3f5a0370a4afb6","url":"docs/api/misc/@docusaurus/eslint-plugin/no-untranslated-text.html.html"},{"revision":"566b2178412e4e6038f8717b4c943297","url":"docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html"},{"revision":"d823f6dedc4e9d5838fe7a616a1b3ffc","url":"docs/api/misc/@docusaurus/eslint-plugin/prefer-docusaurus-heading.html.html"},{"revision":"b20e0ff267e5e072c9e76cde6fdd9274","url":"docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html"},{"revision":"b8939daba0c6bdd08fafde397c446cf7","url":"docs/api/misc/@docusaurus/eslint-plugin/string-literal-i18n-messages.html.html"},{"revision":"032754047329ca089ecdeb4786291472","url":"docs/api/misc/@docusaurus/logger.html"},{"revision":"9c8f37111c4e310dcc96b5e5be302cf8","url":"docs/api/misc/@docusaurus/logger.html.html"},{"revision":"e3e8f71fc258a3b403e1f3180e7ed952","url":"docs/api/misc/create-docusaurus.html"},{"revision":"ab01d71e6cca42ac48004f17317dc88b","url":"docs/api/misc/create-docusaurus.html.html"},{"revision":"fa04e41990314f209dd752f452f157c5","url":"docs/api/plugin-methods.html"},{"revision":"80b49627241577c25138c31c370c0fa9","url":"docs/api/plugin-methods.html.html"},{"revision":"060a8f8e82aac9d2f463a602fc95fc15","url":"docs/api/plugin-methods/extend-infrastructure.html"},{"revision":"5052881ff99be0444c58823479883a88","url":"docs/api/plugin-methods/extend-infrastructure.html.html"},{"revision":"76448c6f9270ffd807b9cb54e08fb6a0","url":"docs/api/plugin-methods/i18n-lifecycles.html"},{"revision":"c1b3a189f91b67b2643f134c54ff8459","url":"docs/api/plugin-methods/i18n-lifecycles.html.html"},{"revision":"5d7ffcbac4ffd2d01a1384ea108642ce","url":"docs/api/plugin-methods/lifecycle-apis.html"},{"revision":"1f07742428dadbb1b0200ce216fe1b2a","url":"docs/api/plugin-methods/lifecycle-apis.html.html"},{"revision":"3110183ea9b4a4709cba47711bf4e4f6","url":"docs/api/plugin-methods/static-methods.html"},{"revision":"a3be54cd2261023834b3371e1b956aa0","url":"docs/api/plugin-methods/static-methods.html.html"},{"revision":"0817c70e36c0fd251cf63786e7ba4be9","url":"docs/api/plugins.html"},{"revision":"c2cb3ef1eddc9db68fd1eb6e9e7873ae","url":"docs/api/plugins.html.html"},{"revision":"f06dd4da699c5305c7727f9350db782c","url":"docs/api/plugins/@docusaurus/plugin-client-redirects.html"},{"revision":"0095d083e34b0602f3fde86088913e51","url":"docs/api/plugins/@docusaurus/plugin-client-redirects.html.html"},{"revision":"db035382b0d790ad8df2bb6855ade102","url":"docs/api/plugins/@docusaurus/plugin-content-blog.html"},{"revision":"073a7841804aa600f28689fc6441b1f0","url":"docs/api/plugins/@docusaurus/plugin-content-blog.html.html"},{"revision":"a7f16a76f7f226f657b097357f35d581","url":"docs/api/plugins/@docusaurus/plugin-content-docs.html"},{"revision":"3660027cbc41a5dd22c69dab7756e79b","url":"docs/api/plugins/@docusaurus/plugin-content-docs.html.html"},{"revision":"44b48c6f2cb7bbbe415199430ff5cfe3","url":"docs/api/plugins/@docusaurus/plugin-content-pages.html"},{"revision":"9128e22ba1cce5cb72b69954f1472f9f","url":"docs/api/plugins/@docusaurus/plugin-content-pages.html.html"},{"revision":"332718df557231dcf63b34dfd53fa988","url":"docs/api/plugins/@docusaurus/plugin-debug.html"},{"revision":"f45d64c92b7ea1890936a8454bede29a","url":"docs/api/plugins/@docusaurus/plugin-debug.html.html"},{"revision":"7f87e103ae72776143b88a57b2e8b944","url":"docs/api/plugins/@docusaurus/plugin-google-analytics.html"},{"revision":"0176f3b0106c9fb9876698a380a7ef02","url":"docs/api/plugins/@docusaurus/plugin-google-analytics.html.html"},{"revision":"61734aff5630590e24b069365676472f","url":"docs/api/plugins/@docusaurus/plugin-google-gtag.html"},{"revision":"59f31cc4691043def27025b9e0a19c59","url":"docs/api/plugins/@docusaurus/plugin-google-gtag.html.html"},{"revision":"8600d145db709b9f5d5733be9289ec23","url":"docs/api/plugins/@docusaurus/plugin-google-tag-manager.html"},{"revision":"6bc75448af105ddb802c28ade1ef397e","url":"docs/api/plugins/@docusaurus/plugin-google-tag-manager.html.html"},{"revision":"d637b89e5b3831a98ef46f5050b676f6","url":"docs/api/plugins/@docusaurus/plugin-ideal-image.html"},{"revision":"efd72583f7edb7d987f7c20e029a1f1e","url":"docs/api/plugins/@docusaurus/plugin-ideal-image.html.html"},{"revision":"7672e897f955b25df2bde5464b524a21","url":"docs/api/plugins/@docusaurus/plugin-pwa.html"},{"revision":"214f56d32df3dddb832539a99e483b83","url":"docs/api/plugins/@docusaurus/plugin-pwa.html.html"},{"revision":"f543c948e2e30cd7bc65bfb2cdf5d665","url":"docs/api/plugins/@docusaurus/plugin-sitemap.html"},{"revision":"6575c1a7bad381d44e5cd47fc068ac56","url":"docs/api/plugins/@docusaurus/plugin-sitemap.html.html"},{"revision":"a409966a1d21499e930a7c7205b7d47a","url":"docs/api/plugins/@docusaurus/plugin-vercel-analytics.html"},{"revision":"092fbd07d26832c9e1261809bf231341","url":"docs/api/plugins/@docusaurus/plugin-vercel-analytics.html.html"},{"revision":"e386d4dd178a754878aa267cf09d2df3","url":"docs/api/themes.html"},{"revision":"2d0e22af2be3e597bfc2aa8614af028c","url":"docs/api/themes.html.html"},{"revision":"bc63ae8c463b4b177787d3e940d4fafe","url":"docs/api/themes/@docusaurus/theme-classic.html"},{"revision":"656d72f3d1054b257a292019f48cecbe","url":"docs/api/themes/@docusaurus/theme-classic.html.html"},{"revision":"7cbc853896032dffdfaea95ce874dfa3","url":"docs/api/themes/@docusaurus/theme-live-codeblock.html"},{"revision":"2c6eeefc660520fa421bc7b7f1acd84b","url":"docs/api/themes/@docusaurus/theme-live-codeblock.html.html"},{"revision":"9a4c599e08d6ccebe0159b61a634f8dd","url":"docs/api/themes/@docusaurus/theme-mermaid.html"},{"revision":"ca7b734f627f7665c904b219a6dce9dc","url":"docs/api/themes/@docusaurus/theme-mermaid.html.html"},{"revision":"08b76e90d331b9d7706ac00a4c70eaba","url":"docs/api/themes/@docusaurus/theme-search-algolia.html"},{"revision":"6b8ac08a3a49bc6f484c2e36bb2b60c2","url":"docs/api/themes/@docusaurus/theme-search-algolia.html.html"},{"revision":"f2490608e9d4b42181f5315dc6320235","url":"docs/api/themes/configuration.html"},{"revision":"6cbe253d7c31d4fe148ff2909f5d65e7","url":"docs/api/themes/configuration.html.html"},{"revision":"15e6adbb675bdf608ee8db74053da38e","url":"docs/blog.html"},{"revision":"5bca80a0e35d814d191f703ef90c9214","url":"docs/blog.html.html"},{"revision":"41b1e33c898e18092dfc5efa932e9216","url":"docs/browser-support.html"},{"revision":"f70cebf9a70d657d4d5b35828f5a3c11","url":"docs/browser-support.html.html"},{"revision":"3cacc32899512e12407f21c6e79b0903","url":"docs/category/getting-started.html"},{"revision":"c67081602cdbdd8007f10aa0bbc5102a","url":"docs/category/getting-started.html.html"},{"revision":"e02d4a17e2b814dc92419dc0ab89ab2a","url":"docs/category/guides.html"},{"revision":"99eb5d52782958b8de6e3946ad64cfa0","url":"docs/category/guides.html.html"},{"revision":"abc69146973a111019d84b26ebb08c01","url":"docs/cli.html"},{"revision":"5371f07f2953c9f1af64f373918bea84","url":"docs/cli.html.html"},{"revision":"69e0bc59da58f9f2c93f12788cd13c17","url":"docs/configuration.html"},{"revision":"eeed7cc8f0e8f17530b48e273ccea087","url":"docs/configuration.html.html"},{"revision":"1baff20a5cf3599633b55ec9aa90bbf6","url":"docs/create-doc.html"},{"revision":"f1b4af78dca35c0fe9c062125123cc23","url":"docs/create-doc.html.html"},{"revision":"774f7c75fc89d779286e5b343f2f91b4","url":"docs/creating-pages.html"},{"revision":"7ccdf1f79fb7d872c0f9745082c3c179","url":"docs/creating-pages.html.html"},{"revision":"6502de5ab1e271b7e261dcd8ca8149eb","url":"docs/deployment.html"},{"revision":"ee485fbe1fc597ef13c933f194fa3a9c","url":"docs/deployment.html.html"},{"revision":"fc0aba647ad22a85fa13b958f673b07d","url":"docs/docs-introduction.html"},{"revision":"d07640a3accb629c04786e8dd18ce014","url":"docs/docs-introduction.html.html"},{"revision":"99ac44f7ed1017b401021b16ad47a5e6","url":"docs/docs-multi-instance.html"},{"revision":"2eabc1d6192628dc0d4be51e1159c332","url":"docs/docs-multi-instance.html.html"},{"revision":"48c7479133531202006e229cccfc795e","url":"docs/docusaurus-core.html"},{"revision":"c3d73ced575185374fa3c2c011f34690","url":"docs/docusaurus-core.html.html"},{"revision":"091092e5525a9574c3d01403171dec56","url":"docs/guides/whats-next.html"},{"revision":"0441e0ba20b485ac43f06492b4549bce","url":"docs/guides/whats-next.html.html"},{"revision":"47bd6ace723f8599f338525b90453675","url":"docs/i18n/crowdin.html"},{"revision":"5a60a77a89fdde212dff20317189f230","url":"docs/i18n/crowdin.html.html"},{"revision":"34be1ae1c59ff73d87878ded8bcea0d3","url":"docs/i18n/git.html"},{"revision":"8d87c3b2e7dfa136d1616825e22f32ae","url":"docs/i18n/git.html.html"},{"revision":"13fa659059171d7b39bdb4f88cbb7f3d","url":"docs/i18n/introduction.html"},{"revision":"31f0d7172cfca93af8914d87d30f0f59","url":"docs/i18n/introduction.html.html"},{"revision":"357dea93b37ccc37f8128ac1a98c9353","url":"docs/i18n/tutorial.html"},{"revision":"7b527bff5558eee6755181b3478d0865","url":"docs/i18n/tutorial.html.html"},{"revision":"dbaa0245f6fbf19e636d182bff73d914","url":"docs/installation.html"},{"revision":"91c220c790265c66f3d89377e160f8ef","url":"docs/installation.html.html"},{"revision":"4e69e361e6128903530b10953de94fed","url":"docs/introduction/index.html"},{"revision":"2e43bbfe8b4b4e31ab9f8a36fcf70c0b","url":"docs/markdown-features.html"},{"revision":"570c7a3c1a02b35a258734715838b5f2","url":"docs/markdown-features.html.html"},{"revision":"cf4ffc34b3893d2bda2d8dc157fe393f","url":"docs/markdown-features/admonitions.html"},{"revision":"bd44ce43c6dd98f19a78f3bf18ce65bc","url":"docs/markdown-features/admonitions.html.html"},{"revision":"e18e6540aeacbcca85e711c318f588b0","url":"docs/markdown-features/assets.html"},{"revision":"8f4bfc7f0663298a94ce26b2615a741a","url":"docs/markdown-features/assets.html.html"},{"revision":"7edd83312268843e5ac1df2eb3bb8883","url":"docs/markdown-features/code-blocks.html"},{"revision":"f329f3f3a7fb974ffb89516bb620ceec","url":"docs/markdown-features/code-blocks.html.html"},{"revision":"18a064430a2825eb06d4c69154ac75cf","url":"docs/markdown-features/diagrams.html"},{"revision":"c3e7b13dd29ebfd6ac9afee175c6c7cd","url":"docs/markdown-features/diagrams.html.html"},{"revision":"59f6117c41ea3f5544ab2e76f8bcb632","url":"docs/markdown-features/head-metadata.html"},{"revision":"99af9c3df0f2332ce4b26aa941b0c820","url":"docs/markdown-features/head-metadata.html.html"},{"revision":"6ba60491bd227baecdeb637d5b6a60bf","url":"docs/markdown-features/links.html"},{"revision":"1700f9584b303ced4f7b911243ad0ae4","url":"docs/markdown-features/links.html.html"},{"revision":"73e50028f998cd15f66bd204979bd5bb","url":"docs/markdown-features/math-equations.html"},{"revision":"311afddea651b3d4605d1a5dacac8118","url":"docs/markdown-features/math-equations.html.html"},{"revision":"db1cf03554258562dea71da142003742","url":"docs/markdown-features/plugins.html"},{"revision":"de0d7e9e4697361783034e6c0ff6c36d","url":"docs/markdown-features/plugins.html.html"},{"revision":"7df78e5cbcf35e612a010ed671104474","url":"docs/markdown-features/react.html"},{"revision":"42315a94caaa606f68b7f78ad974f0a0","url":"docs/markdown-features/react.html.html"},{"revision":"61cad9f5a4b6308470c1eeaeacfa5ccd","url":"docs/markdown-features/tabs.html"},{"revision":"ef10e364cf92a5aa9b832fcc8bc0866b","url":"docs/markdown-features/tabs.html.html"},{"revision":"b4ba50d07fda213937df680cf65d4eac","url":"docs/markdown-features/toc.html"},{"revision":"7757ae56211ce8aa998415daa8ce086b","url":"docs/markdown-features/toc.html.html"},{"revision":"e98e58ac313acc62574502bda3be56a9","url":"docs/migration.html"},{"revision":"1bf881a148f45de1f3e5102296819436","url":"docs/migration.html.html"},{"revision":"a0a0fe9c29b23779c6c066abac249af1","url":"docs/migration/v2.html"},{"revision":"eac5fe437508436a1a9d4d547d2a59fc","url":"docs/migration/v2.html.html"},{"revision":"64a84cb5170a3c972f02b10a0b0a5f52","url":"docs/migration/v2/automated.html"},{"revision":"7275832af985449868bcc6b9ab16864d","url":"docs/migration/v2/automated.html.html"},{"revision":"f0bb72a35914ad20d04f5e1340b45a72","url":"docs/migration/v2/manual.html"},{"revision":"52aed7003b01a0559c8b2b995f8a0d66","url":"docs/migration/v2/manual.html.html"},{"revision":"e1a34061e6147be8408ff9e6b9f9cfc0","url":"docs/migration/v2/translated-sites.html"},{"revision":"561838c621b3a4a93d03bbc8f37a858a","url":"docs/migration/v2/translated-sites.html.html"},{"revision":"e963e6884e4bb081132cac2ae3e23bdc","url":"docs/migration/v2/versioned-sites.html"},{"revision":"16579515e065824c4f2a0f37a29ede7f","url":"docs/migration/v2/versioned-sites.html.html"},{"revision":"c81b3dc2d56d40c456534c2b087f27e1","url":"docs/migration/v3.html"},{"revision":"81b7078b6ffcfc6ea60228f1617051b7","url":"docs/migration/v3.html.html"},{"revision":"cc03db0237722e06b9de831199c32a50","url":"docs/next/resources/index.html"},{"revision":"26a4ed2b09c308605ee9db26078270be","url":"docs/next/support/index.html"},{"revision":"d758d720dc8a84926ee051cd5ad87de1","url":"docs/next/team/index.html"},{"revision":"c121e4498aaef4b6b5c2fac2ccdc0065","url":"docs/playground.html"},{"revision":"7b6d3ebdcad340edcec483502b0a3f94","url":"docs/playground.html.html"},{"revision":"cc03db0237722e06b9de831199c32a50","url":"docs/resources/index.html"},{"revision":"57707ac424741d732a183930155bb504","url":"docs/search.html"},{"revision":"cfd3f6e441491f345a187560a764e23b","url":"docs/search.html.html"},{"revision":"48c9398726596c5c48fdc02fc09546b3","url":"docs/seo.html"},{"revision":"f30b98aeb8e9a32fec31109901d9e3ed","url":"docs/seo.html.html"},{"revision":"c781d4002fb286f5b94254bab824d2b4","url":"docs/sidebar.html"},{"revision":"8945982eec2c8edb2efb58463e1b4e50","url":"docs/sidebar.html.html"},{"revision":"af986cea163b7610639426ec25aab6af","url":"docs/sidebar/autogenerated.html"},{"revision":"bd34a8d4173c746e3b5e2f41a7cb35dd","url":"docs/sidebar/autogenerated.html.html"},{"revision":"4d51962e7c16116da30e2fe7bcaeb303","url":"docs/sidebar/items.html"},{"revision":"d45ff41721aaa5e38e6732ebd844b0a7","url":"docs/sidebar/items.html.html"},{"revision":"49db0b45ad914965a644049953bd427a","url":"docs/sidebar/multiple-sidebars.html"},{"revision":"5f1488fc6a0ada145fbcc473bd6d2335","url":"docs/sidebar/multiple-sidebars.html.html"},{"revision":"e31176171a8286788f0123efdd53e7a0","url":"docs/static-assets.html"},{"revision":"60814aa26610d297346a647b0d583a65","url":"docs/static-assets.html.html"},{"revision":"166274d2646af3196dcabec74b6a9241","url":"docs/styling-layout.html"},{"revision":"7f18b4f932c3104c1824ba2c10d1f376","url":"docs/styling-layout.html.html"},{"revision":"26a4ed2b09c308605ee9db26078270be","url":"docs/support/index.html"},{"revision":"543fce7e5c9aa8c989034c651155190f","url":"docs/swizzling.html"},{"revision":"24ebbb6bdd4f56832753d291a7b0c5dc","url":"docs/swizzling.html.html"},{"revision":"d758d720dc8a84926ee051cd5ad87de1","url":"docs/team/index.html"},{"revision":"aa6cda21b619fa436fce42895b98046b","url":"docs/typescript-support.html"},{"revision":"ca5073db90d386ba1534c64bb0b3dcad","url":"docs/typescript-support.html.html"},{"revision":"f716276cdcea794beb17e5b62291b215","url":"docs/using-plugins.html"},{"revision":"26234746a00558669511d2608c7a41ff","url":"docs/using-plugins.html.html"},{"revision":"db447e86fa5ac1f2627d15b0dca3ef7b","url":"docs/versioning.html"},{"revision":"f05dc2b080711c2b8adef1eeb72c9074","url":"docs/versioning.html.html"},{"revision":"122702ac27fc233740b611acb059dcae","url":"dogfooding/javadoc/index.html"},{"revision":"50ca0721bcb82366050f18b494ae5f3c","url":"examples/markdownPageExample.html"},{"revision":"658cf9d87a834936195a6c4a3213926f","url":"examples/markdownPageExample.html.html"},{"revision":"43ee52c56fcc1eb96d567f94ed649c58","url":"examples/noIndex.html"},{"revision":"1728d5c008e450663dc8e4e06e739279","url":"examples/noIndex.html.html"},{"revision":"1b587a31d60f42a6e2a130396a0ad3af","url":"feature-requests.html"},{"revision":"fedd740fba509f0f45571466a6765106","url":"feature-requests.html.html"},{"revision":"3b43965cb999c66e192e2e836bff95e4","url":"home/absolute/anchor/index.html"},{"revision":"c125332528827299e5d7fd65c1f01219","url":"home/absolute/index.html"},{"revision":"f746510350574583a3dcde9c0cd36520","url":"home/absolute/qs/index.html"},{"revision":"317c079876dd01c000b4135620b021a8","url":"home/anchor/index.html"},{"revision":"45a4d05b70933d10a1c5e17d768ae290","url":"home/index.html"},{"revision":"78f6f951ae9b118a22f1b4fc0e757dfe","url":"home/qs/index.html"},{"revision":"56388b0a5ffc5227c049bfe5f2e21ec4","url":"index.html"},{"revision":"275cc37641cd9881784851a3483c1618","url":"katex/katex.min.css"},{"revision":"456b0d1a7965b67d290155994ab93dcb","url":"manifest.json"},{"revision":"1ac41936fe8ba14cb2670f3c53236917","url":"pure-html.html"},{"revision":"57513b4eb7868e11f97aac8e1c7ae8db","url":"search.html"},{"revision":"71708813d45e173599f3cafb722489ba","url":"search.html.html"},{"revision":"2fa2cce753584859eb5fc763e1e270f3","url":"showcase.html"},{"revision":"aee777dbc2472ecdb8cd6e9125a737e1","url":"showcase.html.html"},{"revision":"5ac0b65b4e84b106ce696a6593642b9f","url":"tests.html"},{"revision":"39e3927194b0f6802fb1c55372a16037","url":"tests.html.html"},{"revision":"25ec6357499655e19aaf7c63836b6713","url":"tests/blog.html"},{"revision":"c4405e61437b6c0d64dd713b05e1294f","url":"tests/blog.html.html"},{"revision":"fc918082c839d122ac0be29e9b43de6c","url":"tests/blog/2020/08/03/demo/second-blog-intro.html"},{"revision":"9ee17d9077900be140e527c4fabf5099","url":"tests/blog/2020/08/03/demo/second-blog-intro.html.html"},{"revision":"09ca5bdeed9b89e58f824b9a52dd04d2","url":"tests/blog/2021/08/21/blog-post-toc-tests.html"},{"revision":"88128aafd65a28f667b8dd804e3e0f09","url":"tests/blog/2021/08/21/blog-post-toc-tests.html.html"},{"revision":"2611138a6e494a4609e5fa0b25c107b7","url":"tests/blog/2021/08/22/no-author.html"},{"revision":"e54c7e5c1fa4359a32ec230a451a0a2d","url":"tests/blog/2021/08/22/no-author.html.html"},{"revision":"82cad1ffd39c0e944cb51975f5c2e602","url":"tests/blog/2021/08/23/multiple-authors.html"},{"revision":"64c5b7c64a0374bc91238cac5e22ec92","url":"tests/blog/2021/08/23/multiple-authors.html.html"},{"revision":"165a412751d9e9f6e61acfab74292eed","url":"tests/blog/2021/09/13/dup-title.html"},{"revision":"a47dae7e0f59ab1f2c6743b98ef9a833","url":"tests/blog/2021/09/13/dup-title.html.html"},{"revision":"70bd5c596b74ca97f8d71273840df1da","url":"tests/blog/2021/10/07/blog-post-mdx-feed-tests.html"},{"revision":"b6106d7396f29732872b1e287f6598dd","url":"tests/blog/2021/10/07/blog-post-mdx-feed-tests.html.html"},{"revision":"ff99c3aa08d01a5d10a615fffe69eb42","url":"tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html"},{"revision":"37aa0ee6de93857ed3983549a2cbc0a4","url":"tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html.html"},{"revision":"8731592a95837421b4f670701b747d15","url":"tests/blog/2021/11/13/dup-title.html"},{"revision":"710d8dbe6dbdb882b70caaf80f74f007","url":"tests/blog/2021/11/13/dup-title.html.html"},{"revision":"124cfbed0b6355fbe6977e7c780bbe1f","url":"tests/blog/2022/01/20/image-only-authors.html"},{"revision":"7639c285da6f57db1d55c5559f029074","url":"tests/blog/2022/01/20/image-only-authors.html.html"},{"revision":"b0a8763c096e492cb2f29f40c25fe54e","url":"tests/blog/2022/01/21/dup-footnote.html"},{"revision":"26c834457e91f5e49bbe932c2772726f","url":"tests/blog/2022/01/21/dup-footnote.html.html"},{"revision":"d6e3d49b839b3fcfdf409e40705a8243","url":"tests/blog/2022/01/22/dup-footnote.html"},{"revision":"0fdd977fb666b2f20ddc8fc9c8a76590","url":"tests/blog/2022/01/22/dup-footnote.html.html"},{"revision":"9aea82d24ed4651757751c9700cd08d0","url":"tests/blog/2022/04/20/dup-footnote.html"},{"revision":"1550a3b3bcbd878bf94c7ddea61749de","url":"tests/blog/2022/04/20/dup-footnote.html.html"},{"revision":"4b5dcc85b4711f96e6167075f8d79eeb","url":"tests/blog/2023/07/19/a.html"},{"revision":"f93f960112614fc229ebc5c36ac220c8","url":"tests/blog/2023/07/19/a.html.html"},{"revision":"0db3a89d1f2096a411a1e738050c3ce2","url":"tests/blog/2023/07/19/b.html"},{"revision":"9c7834ed4d815566212fefa3a8da8c01","url":"tests/blog/2023/07/19/b.html.html"},{"revision":"8ad885b58e0f90ed27d8bf2c43aee824","url":"tests/blog/2023/08/05.html"},{"revision":"53e8be3d93c2154065e061a57c9549bb","url":"tests/blog/2023/08/05.html.html"},{"revision":"18d3e8ad64eddccea67d80196b736b35","url":"tests/blog/archive.html"},{"revision":"40ebb42948fc84e68077d9e8050a923e","url":"tests/blog/archive.html.html"},{"revision":"1e7f50a553bbbdab2159ede882c6d68d","url":"tests/blog/feed.json"},{"revision":"e290fb5d0585d13084485d8c4bbcefad","url":"tests/blog/page/2.html"},{"revision":"77190c64d4192db6839d313726075e5a","url":"tests/blog/page/2.html.html"},{"revision":"6119aea0d283b0e37ffc86ea999ef102","url":"tests/blog/page/3.html"},{"revision":"c5e81438ee1c6b6409e03d23127658f5","url":"tests/blog/page/3.html.html"},{"revision":"f839a49011832739030dd2b9ac6bf323","url":"tests/blog/page/4.html"},{"revision":"3d3e9ca9c3aaf25e5d4eefdb45799618","url":"tests/blog/page/4.html.html"},{"revision":"35eb6a21f6a9928412fee764f838ecc4","url":"tests/blog/page/5.html"},{"revision":"9ed396f768f0b329e1f44d81c39630e6","url":"tests/blog/page/5.html.html"},{"revision":"2a6afd2cf42ac24e69daf21d14da1052","url":"tests/blog/page/6.html"},{"revision":"e479845a03baed91cdfa3131ee36fa41","url":"tests/blog/page/6.html.html"},{"revision":"42336901f76e4517baaf0453a9d83b82","url":"tests/blog/tags.html"},{"revision":"3c863e2c6a8d1bf575be626e8be96ebc","url":"tests/blog/tags.html.html"},{"revision":"c5997bcba22d9914238f3cc7b891a2f9","url":"tests/blog/tags/blog.html"},{"revision":"60592f871179d9c26ac943b0c53f1ad9","url":"tests/blog/tags/blog.html.html"},{"revision":"f84caab755510957f18580f6779f273e","url":"tests/blog/tags/blog/page/2.html"},{"revision":"6518887f8d12db7cc58f9ed8a87561c4","url":"tests/blog/tags/blog/page/2.html.html"},{"revision":"4b3cc457ab0ba7eb7374ca06e17a73da","url":"tests/blog/tags/docusaurus.html"},{"revision":"dece8822e9e2b06cb4d5700f79c306b3","url":"tests/blog/tags/docusaurus.html.html"},{"revision":"4c8ae29885b2a8d3b0c22e14c3390d1e","url":"tests/blog/tags/docusaurus/page/2.html"},{"revision":"f9350a7f85b378c2cf06d75e44a9a207","url":"tests/blog/tags/docusaurus/page/2.html.html"},{"revision":"8513ed2a8fbd6c7b7f4e4d3fa9b3a8e8","url":"tests/blog/tags/long-long-long-long-long.html"},{"revision":"2300df7db1361f081d7aaba71c4925af","url":"tests/blog/tags/long-long-long-long-long.html.html"},{"revision":"a8d7b7a28ed88dc1879ea75a36a2cc14","url":"tests/blog/tags/long-long-long-long.html"},{"revision":"e269fb21c4cb4d2e294b46904a6c6aad","url":"tests/blog/tags/long-long-long-long.html.html"},{"revision":"146b5a3709ad63aa800537905ca5012e","url":"tests/blog/tags/long-long-long.html"},{"revision":"514311515b2bcfc8d28a6cdb3eb1f34a","url":"tests/blog/tags/long-long-long.html.html"},{"revision":"fe9bbe5b863d6b72c6cb20778ff6e78e","url":"tests/blog/tags/long-long.html"},{"revision":"377f3c72f52cd22dcdf9ca1cc3bc0def","url":"tests/blog/tags/long-long.html.html"},{"revision":"c24f91850bcf8c2e60b4af39f2a74400","url":"tests/blog/tags/long.html"},{"revision":"fdf9cabeaa955fbd0ca4e97ceac31847","url":"tests/blog/tags/long.html.html"},{"revision":"7f3d1964b7951c2b7976a5bafeef8ea3","url":"tests/blog/tags/paginated-tag.html"},{"revision":"7087886f1e52d1f2498257fc7567d078","url":"tests/blog/tags/paginated-tag.html.html"},{"revision":"50694d01529fd747c08a0c3feffbb332","url":"tests/blog/tags/paginated-tag/page/2.html"},{"revision":"5df1d9ab458c538021310585cc44e335","url":"tests/blog/tags/paginated-tag/page/2.html.html"},{"revision":"74e25178de157ca82dc048c8486263cc","url":"tests/blog/tags/paginated-tag/page/3.html"},{"revision":"9bfbbfdea0a8f978e0c01843bc128ac5","url":"tests/blog/tags/paginated-tag/page/3.html.html"},{"revision":"665b0850705b8187dbee1d804820bd9e","url":"tests/blog/tags/paginated-tag/page/4.html"},{"revision":"9999bc2d5918389d19fdc69c1eb7e5b0","url":"tests/blog/tags/paginated-tag/page/4.html.html"},{"revision":"8cde3cf0b12bf37f4f5128d20a650f4d","url":"tests/blog/tags/unlisted.html"},{"revision":"6e109412731e971576cada8a916db943","url":"tests/blog/tags/unlisted.html.html"},{"revision":"675fd7bd392a7bd97e40fb897aa0a16f","url":"tests/blog/tags/visibility.html"},{"revision":"473b3448055f66c39692ff80c24e3841","url":"tests/blog/tags/visibility.html.html"},{"revision":"c4905a4b24567b349cb6674b45134137","url":"tests/blog/unlisted-post.html"},{"revision":"4bf5abb39d00f54950c6f1d6546f60df","url":"tests/blog/unlisted-post.html.html"},{"revision":"bcd41959efd5870321713302c808b2dd","url":"tests/blog/x/y/z.html"},{"revision":"3e516fe436d175b45546ee0c9adcf4b8","url":"tests/docs.html"},{"revision":"b57ee530935b9d74fbb73623673340b9","url":"tests/docs.html.html"},{"revision":"5589f9eb7d12ecd943a199a92d5747a0","url":"tests/docs/beginner's guide.html"},{"revision":"ae50404512dfddf7fedd22594ef28a7c","url":"tests/docs/beginner's guide.html.html"},{"revision":"e89bdde897288131f64b2dcac4aed9ed","url":"tests/docs/category-links-generated-index-slug.html"},{"revision":"a2f7d4a1680e26b88deb4f77e090be71","url":"tests/docs/category-links-generated-index-slug.html.html"},{"revision":"2f68e2fa20610d7869c74c87944d5b43","url":"tests/docs/category/another-category-with-index.html"},{"revision":"e79b003ae6f6d88f1dc9536075ef6a3a","url":"tests/docs/category/another-category-with-index.html.html"},{"revision":"989d2f2540af78a00618f1f3c181ab70","url":"tests/docs/category/sidebar-item-description-tests.html"},{"revision":"433d0a0853ffdccde0542b4df540188a","url":"tests/docs/category/sidebar-item-description-tests.html.html"},{"revision":"21337d91232674ea482b2401536c693a","url":"tests/docs/category/tests.html"},{"revision":"5dfde1b8ea17171b2bd716f2d9472ee2","url":"tests/docs/category/tests.html.html"},{"revision":"c51aaaac9fbf9863d2899bb8d5be555b","url":"tests/docs/doc-with-another-sidebar.html"},{"revision":"a05c96fedae11e11385e9dd4a5cbcc3d","url":"tests/docs/doc-with-another-sidebar.html.html"},{"revision":"3c3a81780512e947375b7cfd5711ce2b","url":"tests/docs/doc-with-last-update.html"},{"revision":"fe9ee51d2c30e3a8ea6a8d7705204778","url":"tests/docs/doc-with-last-update.html.html"},{"revision":"d8ef20c5f713327b0dca30ba870c75ee","url":"tests/docs/doc-without-sidebar.html"},{"revision":"29e636620c675b03336d1c1ff3c6be9e","url":"tests/docs/doc-without-sidebar.html.html"},{"revision":"75ffaa262020756bed98e52d27d63201","url":"tests/docs/dummy.html"},{"revision":"86cc05245de2592490dcea35352f3027","url":"tests/docs/folder with space/doc 1.html"},{"revision":"163e8da50e04ea85cd0113f716da007e","url":"tests/docs/folder with space/doc 1.html.html"},{"revision":"8bf0375d1d77a950900db7d18fa528c3","url":"tests/docs/folder with space/doc 2.html"},{"revision":"61b25868b34b40e927f7873a00c53285","url":"tests/docs/folder with space/doc 2.html.html"},{"revision":"742e54ca21f3b92caa868d27fe7660c0","url":"tests/docs/more-test.html"},{"revision":"ccbf8ef978123a863f2fb51502e6c9fe","url":"tests/docs/more-test.html.html"},{"revision":"25023e58eee3401f7861945b956b97ef","url":"tests/docs/standalone.html"},{"revision":"f44f2232ac12de5ee17388bfcce1a244","url":"tests/docs/standalone.html.html"},{"revision":"925a0bfaf910b1f15cd0f98c35ec9615","url":"tests/docs/tags.html"},{"revision":"7aac3332d4175923e5de89e3bc1ff9a0","url":"tests/docs/tags.html.html"},{"revision":"5e79ffab0805aa6a26837f6600a9d0df","url":"tests/docs/tags/a.html"},{"revision":"22980f6e45b35ea11b1384a48d9a6468","url":"tests/docs/tags/a.html.html"},{"revision":"381bd00430d3ecb239b52125459edb7f","url":"tests/docs/tags/b.html"},{"revision":"74a18eaeebe7b47d08e0ec8ae53352f7","url":"tests/docs/tags/b.html.html"},{"revision":"d720c4aa6e2c431344752359810cb720","url":"tests/docs/tags/c.html"},{"revision":"24e16d7fa8f3b7c71db2e0d713ab0e0d","url":"tests/docs/tags/c.html.html"},{"revision":"9cbcbc12c69d26c2be087386d812f40c","url":"tests/docs/tags/d-custom-permalink.html"},{"revision":"4e5e87039d7f09661a411e8798a84044","url":"tests/docs/tags/d-custom-permalink.html.html"},{"revision":"07126887642bdc821e47935c3ef0d1c5","url":"tests/docs/tags/e.html"},{"revision":"223dd5a4919fe0d67a27af6b87f0379b","url":"tests/docs/tags/e.html.html"},{"revision":"c6a52d831bade3c9a1f44afc7251d7df","url":"tests/docs/tags/listed.html"},{"revision":"5ac8068b54b10d596f8530167a6d9570","url":"tests/docs/tags/listed.html.html"},{"revision":"bc83a70d592df914087e39428457f07b","url":"tests/docs/tags/some-tag.html"},{"revision":"80dbc7d6dfa287b83c2d6e042f3e2c28","url":"tests/docs/tags/some-tag.html.html"},{"revision":"d14a318d948109e633139d2049eeb127","url":"tests/docs/tags/unlisted.html"},{"revision":"dae2c27488b2079096ffbbee28b82d2e","url":"tests/docs/tags/unlisted.html.html"},{"revision":"8379716e4be5aac09aac5d1ec1feb892","url":"tests/docs/tags/visibility.html"},{"revision":"380832496947cfb40c10d2c702a14840","url":"tests/docs/tags/visibility.html.html"},{"revision":"0e50cd81a09f3c5d28564b4613859023","url":"tests/docs/tests/admonitions.html"},{"revision":"0c4f51166e3c49eea502b5cc6b60df76","url":"tests/docs/tests/admonitions.html.html"},{"revision":"8188b67fed98a3ba846d3b4a49a3d2a5","url":"tests/docs/tests/ascii/æøå.html"},{"revision":"75b6104877298f5242230bd5810e3229","url":"tests/docs/tests/ascii/æøå.html.html"},{"revision":"4b7f148970d233e3ce8055a0dc9a6249","url":"tests/docs/tests/ascii/folder/æøå.html"},{"revision":"99fa620d676c771d994599da6962e2fe","url":"tests/docs/tests/ascii/folder/æøå.html.html"},{"revision":"f383f32bbc3874723d6ba5420fdb5715","url":"tests/docs/tests/Case-Sentitive-Doc.html"},{"revision":"f696b4e966be9a5d132f97b497ec046a","url":"tests/docs/tests/Case-Sentitive-Doc.html.html"},{"revision":"940cffa2947e9cf9d5e3a826b4171b76","url":"tests/docs/tests/category-links.html"},{"revision":"c8045d540cd0cb871d4b32156ff44554","url":"tests/docs/tests/category-links.html.html"},{"revision":"2c581ed0e41fe6c3c12b4e165120d20b","url":"tests/docs/tests/category-links/custom-index-convention/intro.html"},{"revision":"023ce837ad2120f350be1d1af026fbc0","url":"tests/docs/tests/category-links/custom-index-convention/intro.html.html"},{"revision":"f0150c7d580bd180ec5ce2036ce3aca3","url":"tests/docs/tests/category-links/custom-index-convention/sample-doc.html"},{"revision":"b4d679a0fa154c30251458a35d34b63a","url":"tests/docs/tests/category-links/custom-index-convention/sample-doc.html.html"},{"revision":"972d1917539b6c83f6a3b5405a8fc0a1","url":"tests/docs/tests/category-links/no-index-doc.html"},{"revision":"2ac740b0a3d13055b1e0d95714ee8029","url":"tests/docs/tests/category-links/no-index-doc.html.html"},{"revision":"8e531cf28787fbd0202989b59ae70d29","url":"tests/docs/tests/category-links/no-index-doc/sample-doc.html"},{"revision":"a4d256c1f7ba889e65f41b4ee6fe7d66","url":"tests/docs/tests/category-links/no-index-doc/sample-doc.html.html"},{"revision":"5ab442c22aee614b9bb547de06e324df","url":"tests/docs/tests/category-links/no-subdoc.html"},{"revision":"e2eb2e210f868c623b260dead8516766","url":"tests/docs/tests/category-links/no-subdoc.html.html"},{"revision":"d66475441bee9cbf6afb934ab6cd5c15","url":"tests/docs/tests/category-links/regular-category/sample-doc.html"},{"revision":"d2e56220733576269f4172a5c4f5bc3c","url":"tests/docs/tests/category-links/regular-category/sample-doc.html.html"},{"revision":"e8a97ba75559f4aefb6276dc8e947e58","url":"tests/docs/tests/category-links/with-category-name-doc.html"},{"revision":"b369f4cc1c1e8f22cf3c7fe84f971a5c","url":"tests/docs/tests/category-links/with-category-name-doc.html.html"},{"revision":"1f436c0b3deaf8fc89d7e956a451add4","url":"tests/docs/tests/category-links/with-category-name-doc/sample-doc.html"},{"revision":"dd891a1c7f82eef38d1738a2196f8791","url":"tests/docs/tests/category-links/with-category-name-doc/sample-doc.html.html"},{"revision":"27a9ddadf3540086554fd9fd6f8745be","url":"tests/docs/tests/category-links/with-index-doc.html"},{"revision":"2dc99dd317d33962f434bda55baf1f95","url":"tests/docs/tests/category-links/with-index-doc.html.html"},{"revision":"8256425b582224ae43ba6eca689dee2a","url":"tests/docs/tests/category-links/with-index-doc/sample-doc.html"},{"revision":"c988e8485a7bc6a628ebe7b259c5a7a2","url":"tests/docs/tests/category-links/with-index-doc/sample-doc.html.html"},{"revision":"0ea32ddcc381fe8b38d56ad656604e70","url":"tests/docs/tests/category-links/with-readme-doc.html"},{"revision":"d7bd639ac5b2c1a5c019b18eba44ef10","url":"tests/docs/tests/category-links/with-readme-doc.html.html"},{"revision":"e4c11416176f51da39d226ef1b8d1819","url":"tests/docs/tests/category-links/with-readme-doc/sample-doc.html"},{"revision":"bd7fd9eaec132cfd2e2e257e74b24c0e","url":"tests/docs/tests/category-links/with-readme-doc/sample-doc.html.html"},{"revision":"0429dc16add24af36d623ce80f2875d9","url":"tests/docs/tests/custom-props.html"},{"revision":"088f37bb49ea5f92cfc51a32d212eccf","url":"tests/docs/tests/custom-props.html.html"},{"revision":"a46cce24a0a3ce0b0e41a2a8d0a82c70","url":"tests/docs/tests/custom-props/doc-with-custom-props.html"},{"revision":"ae68e650d05a10b002af107875233fc3","url":"tests/docs/tests/custom-props/doc-with-custom-props.html.html"},{"revision":"befa0fc57ba217f5c355aa12abf72706","url":"tests/docs/tests/custom-props/doc-without-custom-props.html"},{"revision":"97a601912c0bbff0e839dccc6df25b2e","url":"tests/docs/tests/custom-props/doc-without-custom-props.html.html"},{"revision":"860b684acb6c9679ffe42711cabcc140","url":"tests/docs/tests/img-tests.html"},{"revision":"476fed4e51a09867336cc608e136ad07","url":"tests/docs/tests/img-tests.html.html"},{"revision":"f8c01ac84fbcd43e22fef162e045f84d","url":"tests/docs/tests/links/broken-anchors-tests.html"},{"revision":"2709104cb2cc3e10b8077a0d66cc40f0","url":"tests/docs/tests/links/broken-anchors-tests.html.html"},{"revision":"37cf8f5786cd069f55d0307fdcf5df4e","url":"tests/docs/tests/toc-partials.html"},{"revision":"fc77f212e3454b2178479a772b09ff00","url":"tests/docs/tests/toc-partials.html.html"},{"revision":"5d00697c4f5e62c9aa6f72d7451acfcd","url":"tests/docs/tests/visibility.html"},{"revision":"a7710c130860d01ab041015474a9e2de","url":"tests/docs/tests/visibility.html.html"},{"revision":"7c17cf3f5f87c04a955ed8e22cc451c1","url":"tests/docs/tests/visibility/force-unlisted.html"},{"revision":"29425b494c6d01060b2fdd0275c49566","url":"tests/docs/tests/visibility/force-unlisted.html.html"},{"revision":"fe2bae83cc1601a73effc36187e66540","url":"tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html"},{"revision":"1c93dd6f5a88aedd28d74b84bef13dcc","url":"tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html.html"},{"revision":"8f3c1e695cde53bd3d3e17731d0870f4","url":"tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html"},{"revision":"1ed7fec32e7f9db802e5dbd5e85bf27b","url":"tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html.html"},{"revision":"c56075329aae3d272dbbfbaf550a4570","url":"tests/docs/tests/visibility/only-unlisteds/unlisted1.html"},{"revision":"6baee0f9266d9076bb421de482a1c340","url":"tests/docs/tests/visibility/only-unlisteds/unlisted1.html.html"},{"revision":"8bafbd3eca8b38b44ee6ee48326ee8fd","url":"tests/docs/tests/visibility/only-unlisteds/unlisted2.html"},{"revision":"ed18d94507d0fb63b5c9aba7bc73b1d0","url":"tests/docs/tests/visibility/only-unlisteds/unlisted2.html.html"},{"revision":"b6bc06a37157460b8f75c33af50968bd","url":"tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html"},{"revision":"35fea2fffe9ca18c03879d0549672c0e","url":"tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html.html"},{"revision":"80912d1656cbee059cf835d4abb3e18c","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html"},{"revision":"7f5711e5970ed0f5cc131e7046009fac","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html.html"},{"revision":"5542f5d00a4c47f1acc3cd7f2a41204b","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html"},{"revision":"82d30a1240ae8c86e4db2f8e86737843","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html.html"},{"revision":"185c0368ef50767e6083ea507f7cb39e","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html"},{"revision":"b38ac67e0550fe5db8ca739f1a63d3f5","url":"tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html.html"},{"revision":"e14ec510d3459d10327a51196f3dc39a","url":"tests/docs/tests/visibility/some-unlisteds/unlisted1.html"},{"revision":"1ec857e4bf658e0e76ec149cded69baf","url":"tests/docs/tests/visibility/some-unlisteds/unlisted1.html.html"},{"revision":"0c7c2135124d1f9879ba6719c78dad88","url":"tests/docs/tests/visibility/some-unlisteds/unlisted2.html"},{"revision":"939ad5ee0fe9a4bcd16b77a630a35e72","url":"tests/docs/tests/visibility/some-unlisteds/unlisted2.html.html"},{"revision":"4cbddefe7d680db21844cf1460abdb45","url":"tests/docs/toc/toc-_-_.html"},{"revision":"3a6ec3dbf17b6f7363d7a4e1837f60ad","url":"tests/docs/toc/toc-_-_.html.html"},{"revision":"a9255f5e7a2432a5397d7264e8ba273d","url":"tests/docs/toc/toc-_-5.html"},{"revision":"bba9435dcb7df279c017755aea276a3d","url":"tests/docs/toc/toc-_-5.html.html"},{"revision":"cd0dfd9f3ad068b79a2a5d6029179bfa","url":"tests/docs/toc/toc-2-2.html"},{"revision":"07e3153ea4716097b897c918c488aa53","url":"tests/docs/toc/toc-2-2.html.html"},{"revision":"8aeffd0a50d9e43d57bc257ea34daaf0","url":"tests/docs/toc/toc-2-3.html"},{"revision":"adbd6989e559ccafd3f5aa215ff3d169","url":"tests/docs/toc/toc-2-3.html.html"},{"revision":"d37943ab57038f6d0a32499532bce1d0","url":"tests/docs/toc/toc-2-4.html"},{"revision":"d3f90d7dd84d54715722ca201814fd87","url":"tests/docs/toc/toc-2-4.html.html"},{"revision":"cecc619a0f05ac9103799692a5f2ea9c","url":"tests/docs/toc/toc-2-5.html"},{"revision":"16040d313d519d6ca8b52608ebd4483f","url":"tests/docs/toc/toc-2-5.html.html"},{"revision":"b3ee7ba2de2f81abf762ba08c762938c","url":"tests/docs/toc/toc-3-_.html"},{"revision":"c89fbf47d7a4bec4598eeebb9017d9b9","url":"tests/docs/toc/toc-3-_.html.html"},{"revision":"2272ce45fb5c547d8b56a37f0d18a404","url":"tests/docs/toc/toc-3-5.html"},{"revision":"1ec666591ff770652f5a587d2a702aa1","url":"tests/docs/toc/toc-3-5.html.html"},{"revision":"334f2d20856a0face86ad64b4b92a9b4","url":"tests/docs/toc/toc-4-5.html"},{"revision":"5651587d777860ea0e97da98710d2130","url":"tests/docs/toc/toc-4-5.html.html"},{"revision":"ba6c415591f6f45220051c06985d68bf","url":"tests/docs/toc/toc-5-5.html"},{"revision":"979d991d0e49b306647e922fc1771f7c","url":"tests/docs/toc/toc-5-5.html.html"},{"revision":"7e3ec5a8e295ba6250f3bccffcc2f925","url":"tests/docs/toc/toc-test-bad.html"},{"revision":"a4b2f9561d1c3ae680f23a19d7f6abc9","url":"tests/docs/toc/toc-test-bad.html.html"},{"revision":"462ea3e1f2b404b13eda9165e2ab6c9f","url":"tests/docs/toc/toc-test-good.html"},{"revision":"697bdc27e7d791164dbca117bb7f6f2a","url":"tests/docs/toc/toc-test-good.html.html"},{"revision":"f4d508ddd4be41112cb88b186eca9191","url":"tests/pages.html"},{"revision":"ee2d94f5d49b2723ef0f40a790094aa7","url":"tests/pages.html.html"},{"revision":"277aa6c34d90ccc249e65057057de57b","url":"tests/pages/analytics.html"},{"revision":"38647688ce256586c3903aac77a98120","url":"tests/pages/analytics.html.html"},{"revision":"e7cd83ebf4226f491cec2656d1fdc478","url":"tests/pages/code-block-tests.html"},{"revision":"0912328a4780352befb492b211041515","url":"tests/pages/code-block-tests.html.html"},{"revision":"074fbed91ffedd53f3e4b1339218ff84","url":"tests/pages/crashTest.html"},{"revision":"e6ed2ea5cb71d173589df1952ff0a404","url":"tests/pages/crashTest.html.html"},{"revision":"6392b91911de85cbd0798d7f640f1d8f","url":"tests/pages/diagrams.html"},{"revision":"7f431183ec7371764dea8efec9f93986","url":"tests/pages/diagrams.html.html"},{"revision":"cf0879276f1687e95c29150f18b07ea4","url":"tests/pages/embeds.html"},{"revision":"b954e62bf29c627605dcfc910110216e","url":"tests/pages/embeds.html.html"},{"revision":"d49f50d3ea5a563645688c5a9fafeb2d","url":"tests/pages/error-boundary-tests.html"},{"revision":"c9f2d9fffe3b9585a816222e6a3bfcce","url":"tests/pages/error-boundary-tests.html.html"},{"revision":"ed8a5eeabd0ff2302b2673f775b01b54","url":"tests/pages/head-metadata.html"},{"revision":"14d21643cb6883fa870decfdeec944c3","url":"tests/pages/head-metadata.html.html"},{"revision":"caf970879a38d7f3502c78acfb0cbf99","url":"tests/pages/hydration-tests.html"},{"revision":"e669f022209182381117f7b1982ff1d2","url":"tests/pages/hydration-tests.html.html"},{"revision":"e4a6fab04c0385aba339fc73b553d305","url":"tests/pages/layout-no-children.html"},{"revision":"24e4d6be13095670eb8ed1bd7533bdab","url":"tests/pages/layout-no-children.html.html"},{"revision":"e4f7ed13149dcdbe4f5e196b3dd73898","url":"tests/pages/link-tests.html"},{"revision":"38d22f2fb544141227fdc07e53485876","url":"tests/pages/link-tests.html.html"},{"revision":"53341a26cc3565a7ec470636898b2eb1","url":"tests/pages/markdown-tests-md.html"},{"revision":"fa232531ad1952d1131f0f0213734923","url":"tests/pages/markdown-tests-md.html.html"},{"revision":"f764413b8f3659980cc425bc58b44eee","url":"tests/pages/markdown-tests-mdx.html"},{"revision":"fe344d2eb16fde45c36e4dcec2dc15e8","url":"tests/pages/markdown-tests-mdx.html.html"},{"revision":"4cd5e8d2e958dc15797d4bd19c8b665d","url":"tests/pages/navbar-dropdown-tests.html"},{"revision":"8818253083450b2f6bf5fc9a3f2b4585","url":"tests/pages/navbar-dropdown-tests.html.html"},{"revision":"8ffcd3775a744cc59db1070e1feabacc","url":"tests/pages/page-toc-tests.html"},{"revision":"2cc84094892c777e14b49cd245f70f94","url":"tests/pages/page-toc-tests.html.html"},{"revision":"99500112fe6d4d2e0b6eac72bde90baf","url":"tests/pages/react-18.html"},{"revision":"9caa68757c2a4fd07e5ecf7404e5d6be","url":"tests/pages/react-18.html.html"},{"revision":"181722ba36b420ef9e7379b543e3f4be","url":"tests/pages/seo.html"},{"revision":"02dbf559d04820911a1f9c85a9513193","url":"tests/pages/seo.html.html"},{"revision":"7b867bb1f6c27501d8a9c8205fb19a82","url":"tests/pages/tabs-tests.html"},{"revision":"be6c49284b0d2c8f2bdf1933d52beff9","url":"tests/pages/tabs-tests.html.html"},{"revision":"bab0aa651ccee7a1d74b15b25b808494","url":"tests/pages/unlisted.html"},{"revision":"36c8eecec4ec5ac129e13a39d40d8b0e","url":"tests/pages/unlisted.html.html"},{"revision":"e09484e53c06dacaa9260b17d7a81627","url":"tests/pages/z-index-tests.html"},{"revision":"06b339f5ef6e4ec22f5826a94e2a982a","url":"tests/pages/z-index-tests.html.html"},{"revision":"d752f35838729ce4d52435ddf81a7d34","url":"versions.html"},{"revision":"24043cb3daf981af464ac4c71ca37648","url":"versions.html.html"},{"revision":"7fa1a026116afe175cae818030d4ffc4","url":"4/docu.png"},{"revision":"4e0fcc29e60361c13b8776a262e9501e","url":"4/图片.png"},{"revision":"a40139e4f6015a266e45022d9d1a73a6","url":"assets/ideal-img/30-days-swa.74d6151.640.png"},{"revision":"106b3b6ceac745f091831c5c4f7128cb","url":"assets/ideal-img/404lab-wiki.91eec49.640.png"},{"revision":"197d52610c1d8e513eb3c0a072f467ca","url":"assets/ideal-img/7wate-wiki.147bf12.640.png"},{"revision":"e4c0b7dedadabd437e19c47ffc3e52c7","url":"assets/ideal-img/agilets.998d04b.640.png"},{"revision":"e64b4f56ed2dd66e7a6bdc41b008df00","url":"assets/ideal-img/aide_jeune.08049be.640.png"},{"revision":"1631fb5234deea8e7018bc5a3d462df8","url":"assets/ideal-img/aispeaker.0538c7c.640.png"},{"revision":"bb113046e9155d7138d9f90005e77d16","url":"assets/ideal-img/akara-blog.990b5c8.640.png"},{"revision":"ca274f4ba5b3d0c33b9a9136a293bae6","url":"assets/ideal-img/algolia.05175a2.640.png"},{"revision":"06da55c1b175910cd663fcf30ef7e8d4","url":"assets/ideal-img/apache-apisix.7582932.640.png"},{"revision":"b72a0c2d82b80ba2700e7d0b2962aa41","url":"assets/ideal-img/apexfp.effe720.640.png"},{"revision":"e71bbcaba62b7a25834aa6f206d51c45","url":"assets/ideal-img/astronomer.5bc3316.640.png"},{"revision":"c661d21b2b79635887c8c9bd6c28caf8","url":"assets/ideal-img/attobot.ed5b5b2.640.png"},{"revision":"045babc5a7a15df923f7606463e8e741","url":"assets/ideal-img/avana-wallet.a19cb66.640.png"},{"revision":"50433d79534029e8a6ea90158f05480e","url":"assets/ideal-img/aventus.9bbf725.640.png"},{"revision":"012eb94cd4bcd6dc0f0c2aecf0fecd94","url":"assets/ideal-img/awe-framework.bebaed4.640.png"},{"revision":"b4cac07111a771b7ff3d065cfe60c0aa","url":"assets/ideal-img/axioms.9cc2f96.640.png"},{"revision":"a90341a23f24a3c91a57a45c330e3ef7","url":"assets/ideal-img/babel.d0da959.640.png"},{"revision":"7f086350715e1436f1823191eec4af7b","url":"assets/ideal-img/babel.eb46763.1030.png"},{"revision":"56ec4d3cd0847ae0a5e4e14334285ab7","url":"assets/ideal-img/bandwidth.a9a038a.640.png"},{"revision":"799b2ea88ae24e6906da84590a3b4544","url":"assets/ideal-img/benthos.1a77a28.640.png"},{"revision":"6130154de4f56f867325f175cd904913","url":"assets/ideal-img/blinkshell.5e655e6.640.png"},{"revision":"9ff8f03700c160e256d1efeef1d91e69","url":"assets/ideal-img/blogasaurus.bf69b17.640.png"},{"revision":"89b79decc57ce0de57a48244ed76a4cd","url":"assets/ideal-img/blogmatheusbrunelli.1528b1c.640.png"},{"revision":"cf267d8a3e8f2a71a1e646837337e704","url":"assets/ideal-img/botonic.f085f1c.640.png"},{"revision":"72607afaa0956705fa5775f59324898d","url":"assets/ideal-img/boxyhq.3cb689e.640.png"},{"revision":"231ea83daa155a1698881749dc3ded5f","url":"assets/ideal-img/brainboard.77a456b.640.png"},{"revision":"48a9a50cda9f0ef4ea3ad605b569d63e","url":"assets/ideal-img/bruce-wiki.46cdfb8.640.png"},{"revision":"c58b6777bd3f29c41bee92671212b4c5","url":"assets/ideal-img/build-tracker.228399d.640.png"},{"revision":"2457b6b83fed95a751c6e09a78401718","url":"assets/ideal-img/chaos-mesh.7499da5.640.png"},{"revision":"2241fea1d325dcfaf8dc08667aca6d62","url":"assets/ideal-img/charles-ancheta.e031e5e.640.png"},{"revision":"8707b340a708b0dfd8fd0444555777b1","url":"assets/ideal-img/chatkitty.76eb8a9.640.png"},{"revision":"0290f26fcad04474bc011cc1f1f13462","url":"assets/ideal-img/christopher-chedeau.a975949.200.jpg"},{"revision":"1b8dfb1e240b8276857ac20c4051ffb1","url":"assets/ideal-img/CIPP.ec28ed3.640.png"},{"revision":"c5cbfcedfa1793c40f7bda13ec8b7923","url":"assets/ideal-img/claritychallenge.2c7a880.640.png"},{"revision":"dc86dcb6467640549e53cb6d2bc51619","url":"assets/ideal-img/clutch.10095e3.640.png"},{"revision":"1af841ddcdc6ba6ac2f7fa537e5c5948","url":"assets/ideal-img/codesandbox.74163c2.1030.png"},{"revision":"4432612253906a80fde55674b3c84836","url":"assets/ideal-img/codesandbox.b8068ce.640.png"},{"revision":"6e6e3aa497815628aec9ebd906f9e101","url":"assets/ideal-img/codesweetly.60a18df.640.png"},{"revision":"4d2bf0a3d5d460ce03d5cd677f9ba41c","url":"assets/ideal-img/codeyourfuture.606a295.640.png"},{"revision":"98420c7cb3558a72ec2c71506d239d75","url":"assets/ideal-img/comp-labs.822720f.640.png"},{"revision":"ede77b5db7d139551f9f67f90150763e","url":"assets/ideal-img/componentkit.9b54e22.640.png"},{"revision":"2893a01dad47fe0f27ea11a36ef462c0","url":"assets/ideal-img/configcat.0680ead.640.png"},{"revision":"e200ffb49a4a78dc1ff0f88f6d2ff258","url":"assets/ideal-img/console-table.5471752.640.png"},{"revision":"b08a7d0614247ff1a369718f095cbbe3","url":"assets/ideal-img/countrystatecity.86819b3.640.png"},{"revision":"9038a7eb4135f13976989893fc306b63","url":"assets/ideal-img/courier.129992f.1030.png"},{"revision":"5a58f9759b2a0da91e429587b283ef3b","url":"assets/ideal-img/courier.e09893c.640.png"},{"revision":"f83c6f0911b0d400f1e2005d55de9d30","url":"assets/ideal-img/create-react-app.04f5848.640.png"},{"revision":"3e29a67a9039be2274475a35abb4b368","url":"assets/ideal-img/cryptodevhub.473746b.640.png"},{"revision":"30d6f5464eb30c7a4e641314e25786b7","url":"assets/ideal-img/daily-digest-covid-19-in-france.be7c2cb.640.png"},{"revision":"73b87d11af28fd01a1986bf937675d89","url":"assets/ideal-img/darklang.db998be.640.png"},{"revision":"2c94693d4929a5fe3e8457a9032f133a","url":"assets/ideal-img/dart-code-metrics.acf78cc.640.png"},{"revision":"aa9c99f05e6d440bcc4140c8106f6838","url":"assets/ideal-img/datagit.4382cac.640.png"},{"revision":"0bb54ea167237496524a3b5535fc545e","url":"assets/ideal-img/datagit.52152e6.640.png"},{"revision":"eabc17329aac4b140ca3ae20dcda544e","url":"assets/ideal-img/datagit.8ff0610.1030.png"},{"revision":"9b6857b2da14cdc7ede9d275f8cfc8f6","url":"assets/ideal-img/devspace.b33de3f.640.png"},{"revision":"2718953e881822e90e5f0f2f4bf91dc3","url":"assets/ideal-img/difranca-technotes.344b6c1.640.png"},{"revision":"c0ba117288ed5ec2244a775da90e77e1","url":"assets/ideal-img/digitalsupportservices.b7d40b3.640.png"},{"revision":"e8e1e913fdc66e931a0ade26e33551ff","url":"assets/ideal-img/dimeschedulersdk.ea0d02a.640.png"},{"revision":"c0364ed400d07bcc7bb13df0f016eb7d","url":"assets/ideal-img/discordresources.2b0a897.640.png"},{"revision":"c38bc2ecfbb9a14a11a78149ab02ce39","url":"assets/ideal-img/divine-wsf.a2512d2.640.png"},{"revision":"6e4d682f01b59da9f5e996e31c01b66e","url":"assets/ideal-img/djamaile.32177b7.640.png"},{"revision":"e768e68a68728d18a38b0d6fc31bbf64","url":"assets/ideal-img/docs-butterfly.38310eb.640.png"},{"revision":"111a1270376b4883ea8581fb8d7fc455","url":"assets/ideal-img/docs-taro-zone.2c1034b.640.png"},{"revision":"575cb1dadb631ae49a16f763b750372f","url":"assets/ideal-img/docusaurus.6c04a2e.1030.png"},{"revision":"2353f4e779c6f659d6bf84deff2e9155","url":"assets/ideal-img/docusaurus.6fe439e.200.png"},{"revision":"143ee27a3687f0f1293ecd7489508920","url":"assets/ideal-img/docusaurus.74e09a0.640.png"},{"revision":"5da7b62ddbfe7f2795c61f118b8363d5","url":"assets/ideal-img/draftjs.654d7be.640.png"},{"revision":"ce5635087777f961de89b9c2a8468b87","url":"assets/ideal-img/drayman.d6b4620.640.png"},{"revision":"372643b9b9bd064b6fe181dd31d88f0e","url":"assets/ideal-img/dyte.73c64e7.640.png"},{"revision":"8ce273b54910dd74ee847df2e9026610","url":"assets/ideal-img/dyte.81c1b82.640.png"},{"revision":"9ecb766d9a0757e185d235f3b0020bf3","url":"assets/ideal-img/dyte.fc5d80d.1030.png"},{"revision":"225f9f78bf0e71fa76c23b1f5bb114cf","url":"assets/ideal-img/easy-dates.f146f6f.640.png"},{"revision":"c5b6a1bf8ab2e81047a50347bf27c346","url":"assets/ideal-img/easyjwt.59f3f81.640.png"},{"revision":"bdc3903497fe849700be62c0f75c44af","url":"assets/ideal-img/easypanel.b290e0d.640.png"},{"revision":"33c85ebadfd0be271c01164737b44fa1","url":"assets/ideal-img/edulinks.db6aea1.640.png"},{"revision":"6653cc45b69caa3dce423fde4d97d2fe","url":"assets/ideal-img/eightshift-docs.47e2289.640.png"},{"revision":"e247998ae2487332e342728a2cdf2ef3","url":"assets/ideal-img/enarx.4022acc.640.png"},{"revision":"67b139815f7fe32a76a4509959aac209","url":"assets/ideal-img/eric.823d61a.640.png"},{"revision":"97898c97f2e0351936309235b5f126c9","url":"assets/ideal-img/erxes.2c541e2.640.png"},{"revision":"c6430fb76f3f19b3147b8e782665f676","url":"assets/ideal-img/eta.bdd7514.640.png"},{"revision":"fbb71d977aaa93146333a5a93aebf172","url":"assets/ideal-img/evantay.4c64461.640.png"},{"revision":"1f0748c7dc38952fa3be2f82678b162e","url":"assets/ideal-img/evershop.1549b8c.640.png"},{"revision":"0245e9a2655f39a9b51592fb701c9503","url":"assets/ideal-img/fast.e23f1f6.640.png"},{"revision":"39cdbe56f8f908023c2b6c3ae0958166","url":"assets/ideal-img/fbt.0038828.640.png"},{"revision":"d6ae1a82a655a91b4b75238c3bdcbe0c","url":"assets/ideal-img/figma.15dd2d7.640.png"},{"revision":"c7e1f9ddaf724127a53ed40f69f8226c","url":"assets/ideal-img/figma.d0ffd9c.1030.png"},{"revision":"90ce8d6bd76e0e395d6c51f2a02f134f","url":"assets/ideal-img/files-gallery.660f153.640.png"},{"revision":"8378fbe8ce033a3b60729addcba9162a","url":"assets/ideal-img/firecms.8f9e7bd.640.png"},{"revision":"80ea3d6cf4bbf1a2e0609b2dd64af1a6","url":"assets/ideal-img/firelordjs.2fea679.640.png"},{"revision":"b03a2d9e91d341644a0dcfe292572b5e","url":"assets/ideal-img/flagsmith.dc4da77.640.png"},{"revision":"7c21ec7d6c18477dac043f1d9c7da96b","url":"assets/ideal-img/flarum.f170a82.640.png"},{"revision":"f7bf7059b937ca8de6ecc693519bda2b","url":"assets/ideal-img/flatifycss.0e31d6b.640.png"},{"revision":"53c3eb22e253beae3ef4a9012cfc6a6a","url":"assets/ideal-img/flexit.3f9bb99.640.png"},{"revision":"4b141b187fed4e7436e23729aedf1a6e","url":"assets/ideal-img/flipper.1c689c8.640.png"},{"revision":"642c5a7edbd26d71e60763d95b7a3bac","url":"assets/ideal-img/flux.3858b11.640.png"},{"revision":"595bb81ef2ee5ed4472ee64a8e5de25f","url":"assets/ideal-img/foal.1cdd073.640.png"},{"revision":"a1c033bf5e6d4955b1c67474b0865b50","url":"assets/ideal-img/formatjs.913a9c1.640.png"},{"revision":"1cf263794450da9cee5dc836642ec20d","url":"assets/ideal-img/froggit.f573421.640.png"},{"revision":"11254fe4785e832a22c09a7a8073c5d3","url":"assets/ideal-img/fullstackchronicles.a6691ab.640.png"},{"revision":"a6be9e3f2cb01bdea446e3304b2fe0ef","url":"assets/ideal-img/geekyweb.fc837d8.640.png"},{"revision":"942e85d7d4d00372ddf9d61be11f7c70","url":"assets/ideal-img/getorca.org-dark.401ed3e.640.png"},{"revision":"279f6dff8d4fac62260e1b38c56966f6","url":"assets/ideal-img/ghostly.707ead8.640.png"},{"revision":"7641581ffef660dbd69ab9069d4af900","url":"assets/ideal-img/gladys-assistant.4b7d76e.640.png"},{"revision":"675d898acbcf0fbf730fa24e28337912","url":"assets/ideal-img/gotenberg.81978c3.640.png"},{"revision":"170d0373c09d5c45cac2aaf49ceaf4a5","url":"assets/ideal-img/gtfs-to-html.e90b7b0.640.png"},{"revision":"0f502c480a7c0b86e985e8e1cac0b0ee","url":"assets/ideal-img/gulp.166db42.640.png"},{"revision":"ef44e6a7fd9b4e3136ca2c2c4ea03d04","url":"assets/ideal-img/gulp.6ea1e58.1030.png"},{"revision":"f8f5a79d14fa4e7feaf1d70eacca6016","url":"assets/ideal-img/gulp.d4c3fc5.640.png"},{"revision":"f880b7120501515ed217705781a66f02","url":"assets/ideal-img/haochen.aadb05f.640.png"},{"revision":"67c49c03afede4af82b7beb15e21d66e","url":"assets/ideal-img/hashnode.32e3d9c.640.png"},{"revision":"9ba543396ece376196700b674e646b08","url":"assets/ideal-img/hasura.137e254.1030.png"},{"revision":"d621ea92e4fad68dfb61587c2eaf7b17","url":"assets/ideal-img/hasura.bc785e1.640.png"},{"revision":"593b4bac7efa3cbdd91a4219f79aba9a","url":"assets/ideal-img/hasura.f2e12c4.640.png"},{"revision":"20cb4807c8a0c0c067c3d2ff3b29aea3","url":"assets/ideal-img/hcaptcha.d81b005.640.png"},{"revision":"28a5b05788970d7273c11ac9700b472c","url":"assets/ideal-img/hector-ramos.957d17a.200.jpg"},{"revision":"48215468e7e1a350d18ea87925abb54e","url":"assets/ideal-img/hermes.6ae4708.640.png"},{"revision":"189c5c17863c458f4fedbe9641d45444","url":"assets/ideal-img/home-assistant.49e0a60.640.png"},{"revision":"6b2f703223b445bb16f70a833de723ca","url":"assets/ideal-img/httpin.a8bdf87.640.png"},{"revision":"88fa686dea063ebff0308e8cf933a575","url":"assets/ideal-img/iammassoud.a25a8f3.640.png"},{"revision":"1030768a33c46bae1ea7e5ceecb3801b","url":"assets/ideal-img/icodex.3a80b26.640.png"},{"revision":"97a4ff9fc14a0a42ecab269354ab8cf4","url":"assets/ideal-img/idb.5dbdf9f.640.png"},{"revision":"776fe34799bb08875f48fd1bc8319d65","url":"assets/ideal-img/indent.f5f3516.640.png"},{"revision":"49caf7b73476d7131c78f01197ee125e","url":"assets/ideal-img/intelagent.cf9c5e4.640.png"},{"revision":"dbd46bbbd6844efa786f5e0be48aa275","url":"assets/ideal-img/ionic.3b8b190.640.png"},{"revision":"5272ea8c9ec5bec94cf7804ee815345a","url":"assets/ideal-img/ionic.b257f51.1030.png"},{"revision":"edbadf9088aa76d3262153baf77eb902","url":"assets/ideal-img/ionic.fa7100c.640.png"},{"revision":"e71145afed3dbbe82e74cc4e92242910","url":"assets/ideal-img/iota-wiki.7df3488.640.png"},{"revision":"0f7496b6ee9ba31aa3e11375efbf010f","url":"assets/ideal-img/iota.7ed609f.1030.png"},{"revision":"ef0edb82708af99799972be48a2a25bb","url":"assets/ideal-img/iota.925442f.640.png"},{"revision":"5f33c31fb8e8cf7a0d020e2f265fd659","url":"assets/ideal-img/jest.8037160.640.png"},{"revision":"1216b9f63f4c58af3b0e2abe81352f97","url":"assets/ideal-img/joelpo.88e8281.640.png"},{"revision":"f40e7cd5a86e8e2f2aaad2b569f00bb6","url":"assets/ideal-img/johnnyreilly.ecc5d44.640.png"},{"revision":"7570df8a54a3fb062fa7237b69e8b4f2","url":"assets/ideal-img/juffalow.7c45de5.640.png"},{"revision":"53cccd6248e2ec28fa0ebc322ce1cb2e","url":"assets/ideal-img/junjie.63b7a2f.640.png"},{"revision":"52ef48fa1e6ed6e2c18165a3e5ca6a8d","url":"assets/ideal-img/k3ai.a05af97.640.png"},{"revision":"91d016fc687f6918f6ce07cc240820a2","url":"assets/ideal-img/katex.681e845.640.png"},{"revision":"7863c67ae6f31771ccd5f0408cfce5dc","url":"assets/ideal-img/katex.68c9ce0.1030.png"},{"revision":"3958192f4918be1696838bd56e56ecdb","url":"assets/ideal-img/kaustubhk24.a89b443.640.png"},{"revision":"91ca0f56ac25905eec09709719ab17d2","url":"assets/ideal-img/khyron_realm.2659294.640.png"},{"revision":"6dcc07155f772db7a302e8b82834a561","url":"assets/ideal-img/kosko.4c715d5.640.png"},{"revision":"2ad770fb7ec9ba18346192b01839abc1","url":"assets/ideal-img/kotest.bf00e76.640.png"},{"revision":"872afb097aedc01f0989d40f0924f506","url":"assets/ideal-img/kube-green.0076719.640.png"},{"revision":"8af990566d8cbf8ced820e1d84ca5460","url":"assets/ideal-img/kubevela.abc3ad9.640.png"},{"revision":"76feb29f557515f493dcd25a1e09dda7","url":"assets/ideal-img/kuizuo.ee23145.640.png"},{"revision":"8181e1a4d227f441eb8c7c7d9fda0999","url":"assets/ideal-img/kwatch.9e8062e.640.png"},{"revision":"7065716fa8c4ced94a47bd85cedc13d4","url":"assets/ideal-img/labviewbook.402bfc2.640.png"},{"revision":"6f9659a0bcb4f41d1f0e4c70eaab5e02","url":"assets/ideal-img/lacework.c68d75b.640.png"},{"revision":"68d89d4ada1cdf6ae02411252740f7ae","url":"assets/ideal-img/lacework.d175372.1030.png"},{"revision":"30672cb1c4a7aef604ff515b819ade28","url":"assets/ideal-img/leedom.20f512e.640.png"},{"revision":"593fc5361b1aa8a273f04f99538e5f92","url":"assets/ideal-img/leon.0ea5093.640.png"},{"revision":"c72563a5e21efaead038846725c09536","url":"assets/ideal-img/lerna.55ca7ad.640.png"},{"revision":"9d3fde9d40c235b7daf303b55eb71160","url":"assets/ideal-img/liqvid.b36c48c.640.png"},{"revision":"bab19e40f5bd16e822b9c71fb4067adb","url":"assets/ideal-img/livekit.d765dc5.640.png"},{"revision":"e67dd2f2d68d0749fdf203d588a74c9b","url":"assets/ideal-img/lux-algo.f6b681c.640.png"},{"revision":"0330e0b81a06af19a8512e715095475e","url":"assets/ideal-img/mailgo.68c3215.640.png"},{"revision":"448121126c439690fe56c0dea3a808bd","url":"assets/ideal-img/mapillaryjs.5ab6a6e.640.png"},{"revision":"da72848018df943e14e763d0a0061751","url":"assets/ideal-img/mediamachine.62dfa0e.640.png"},{"revision":"2fcd76c6c7b1c0f9fb50e912bd083524","url":"assets/ideal-img/meli.305f7f3.640.png"},{"revision":"d0afc8f1f883bc94e9d108c747dd3598","url":"assets/ideal-img/memgraph.41afca3.640.png"},{"revision":"698f878c0efa2bc2873021a94b066803","url":"assets/ideal-img/meoo.69f3a2d.640.png"},{"revision":"9da9d74017ca45a5347de63c197c7a43","url":"assets/ideal-img/metalyoung.4712df7.640.png"},{"revision":"b7a8fcbbc24a4aa128fc58377d86ef9a","url":"assets/ideal-img/metro.b32a126.640.png"},{"revision":"ca7d66838e9d93475d60de9f03a5cb7b","url":"assets/ideal-img/mia-platform.e8bb2d0.640.png"},{"revision":"c45d0007a872690bc1eb057b96fe8d75","url":"assets/ideal-img/mikro-orm.d077b7d.640.png"},{"revision":"b7b6a95c8629e55bef5ec107ec3e8756","url":"assets/ideal-img/mintmetrics.3258d8a.640.png"},{"revision":"eb0520026a7290a65998b3ad20294a6a","url":"assets/ideal-img/mixcore.45f9b80.640.png"},{"revision":"32c72dc5cc806e529001fcff637c2ebc","url":"assets/ideal-img/mojaglobal.df38ad6.640.png"},{"revision":"0a4e7096849847533cdd0b9999cb18e9","url":"assets/ideal-img/molecule-home.76dd46a.640.png"},{"revision":"07087dd41acc0f5ff88051adb17ffc76","url":"assets/ideal-img/motion-layout.94fe97e.640.png"},{"revision":"10c7b6640ea69fe794aff6ebb8a3b3a8","url":"assets/ideal-img/nanos-world.2f4a504.640.png"},{"revision":"187dc7eb982228843160c52ec8e6565a","url":"assets/ideal-img/netbootxyz.92afdf4.640.png"},{"revision":"67275090780f110363806b990f233d92","url":"assets/ideal-img/netdata.1813d37.640.png"},{"revision":"7cfb779868a09ba1fbd3c156372782f5","url":"assets/ideal-img/neutronjs.6fa73e0.640.png"},{"revision":"537881cea4e33e0591aac3b91da0f946","url":"assets/ideal-img/nextauthjs.4bb10f2.640.png"},{"revision":"50dffed4e6d6b6576d71f03b2b4fbdc2","url":"assets/ideal-img/nhost.78e048b.640.png"},{"revision":"c96a97a6716b9549d4754246e353123e","url":"assets/ideal-img/nocalhost.fb8f48f.640.png"},{"revision":"f87e1c7bccad66b957df888bb40473ef","url":"assets/ideal-img/node-serialport.8887301.640.png"},{"revision":"0983662afddf6708ca1d8f458b3e3a38","url":"assets/ideal-img/nodify.3e4f251.640.png"},{"revision":"bd7ca379065ecc4801d9cb22fe765627","url":"assets/ideal-img/novu-docs.fff2573.640.png"},{"revision":"a33b61a4ba8f233fc3d66d7c16342021","url":"assets/ideal-img/orbitjs.4eb95c8.640.png"},{"revision":"0926079c9e09d0ffea1f37ffd76468e7","url":"assets/ideal-img/ory.10fbb60.640.png"},{"revision":"da011e599a6b42197aea8868abc3d668","url":"assets/ideal-img/ossinsight.522e11d.640.png"},{"revision":"19818eee3cee9251edc6816cad39f10a","url":"assets/ideal-img/outerbounds.1551bd2.640.png"},{"revision":"241979fc40fa65aa8ca23b718b2625f0","url":"assets/ideal-img/outerbounds.54e33ed.640.png"},{"revision":"84b0b50877805e96b0684c89cabf4dd8","url":"assets/ideal-img/outerbounds.8f237b6.1030.png"},{"revision":"12438bd9b3ab4f3f174dbb35f286ffa7","url":"assets/ideal-img/oxidizer.4fecd68.640.png"},{"revision":"3e3b0e528ea5202b085af908cef5d92a","url":"assets/ideal-img/patrikmasiar.ee91a0d.640.png"},{"revision":"ad40ebaddbec220b2fb5b88ab425686e","url":"assets/ideal-img/paubox.282e9e9.640.png"},{"revision":"d69837aaa113023bc5ad527efd14237b","url":"assets/ideal-img/pcapplusplus.208a267.640.png"},{"revision":"ec27e8eee2928ce190ea457b3270af02","url":"assets/ideal-img/pcc-archive.2cea823.640.png"},{"revision":"9e465633eda5b9c5eec1dfe3603e5298","url":"assets/ideal-img/pdfme.d70a7e9.640.png"},{"revision":"68aa7c19f582f173dd1f20f2bd4b7571","url":"assets/ideal-img/pearl-ui.96174ea.640.png"},{"revision":"09246c83eae50dfdd6ef93c13d32bfc8","url":"assets/ideal-img/peradaban.3b83703.640.png"},{"revision":"1ff728137bbc7244e7f8cd5958375841","url":"assets/ideal-img/pglet.612c1bf.640.png"},{"revision":"64688abe0131e54a4409ba5e1308bba3","url":"assets/ideal-img/piano-analytics.0784ab4.640.png"},{"revision":"5b5263ccd896b27a2c1644c9e1565cf9","url":"assets/ideal-img/pincman.8c017c2.640.png"},{"revision":"2a7d738064eab73526483e761f9ca269","url":"assets/ideal-img/pipeline-ui.7a88b68.640.png"},{"revision":"0aabf8ca821c45f7acdbc4e1d1451ca4","url":"assets/ideal-img/plausible.724e7d4.640.png"},{"revision":"2426f4cca700aa1aba898917629b4743","url":"assets/ideal-img/pnpm.64ee19d.640.png"},{"revision":"d17c6d4dcd361a27500a6ccef7d1e90f","url":"assets/ideal-img/postgres-ai.59ec13a.640.png"},{"revision":"7ab515735e9706a06930270b2f3731dc","url":"assets/ideal-img/power.db59063.640.png"},{"revision":"f7e5c3489de3af8f99598317d109d752","url":"assets/ideal-img/pptxgenjs.e543e51.640.png"},{"revision":"47d5b88980ef21da2dbfb80d89d19b8e","url":"assets/ideal-img/prefs.dff583d.640.png"},{"revision":"5a051c322e08ba5f2d0c80229e72ecb3","url":"assets/ideal-img/prettier.56bd537.640.png"},{"revision":"a062f9c08bfe440f376f327acda158d4","url":"assets/ideal-img/prettier.c38f582.1030.png"},{"revision":"d54f0610870afd9ea0f4c736d4169b49","url":"assets/ideal-img/prismatic.e7ba6ef.640.png"},{"revision":"763ba1dac0d6fe91c62992575cf6e5c9","url":"assets/ideal-img/profilo.37ac206.640.png"},{"revision":"6f9e0b66e8d8afde8cf70d213b964dc9","url":"assets/ideal-img/pyre.b772c23.640.png"},{"revision":"f520932b7e94a9c6e91594c728109c01","url":"assets/ideal-img/qa-board.be6f8ca.640.png"},{"revision":"2923ecc9ca2b52f218fd78cda5dea344","url":"assets/ideal-img/quantcdn.2059ec3.640.png"},{"revision":"a3dd9a4b21db7033b9c52931d28a839d","url":"assets/ideal-img/quickwit.0d2bdce.640.png"},{"revision":"36ababaeeba682e65148d017db707f1d","url":"assets/ideal-img/quickwit.6f2a5e9.640.png"},{"revision":"f95553aeda4110f73c0e4327ef32bb99","url":"assets/ideal-img/quickwit.9fe97e2.1030.png"},{"revision":"d901146ce8fb19a44a3c2d83457fa51b","url":"assets/ideal-img/rainbond.dd2ee85.640.png"},{"revision":"1ef6d8e5e5a8ac27b18293e631834142","url":"assets/ideal-img/raspisuite.234a2cd.640.png"},{"revision":"df6a0d42911a4f775468e1fab996460d","url":"assets/ideal-img/react-chat-elements.2b491e1.640.png"},{"revision":"193f07b4c7d74a65d4eadea168223a5b","url":"assets/ideal-img/react-complex-tree.d3b97fb.640.png"},{"revision":"380e20403e9a9c0090b4bf1192129fd5","url":"assets/ideal-img/react-leaflet.60e6a52.640.png"},{"revision":"11f69d3ceab178d19c81f999beccc3d6","url":"assets/ideal-img/react-native-elements.2052eed.640.png"},{"revision":"a7b71c4075f847278951234c48f3b2dd","url":"assets/ideal-img/react-native-ios-kit.6da9e1f.640.png"},{"revision":"17c0033b674632b1431cf5898a887555","url":"assets/ideal-img/react-native-reanimated.07e5d32.640.png"},{"revision":"473c1d5e872a83af9931e2535409af74","url":"assets/ideal-img/react-native-testing-library.2ddc3d1.640.png"},{"revision":"68f824e3959bfbed34af4bf9040ece4a","url":"assets/ideal-img/react-native.07364de.1030.png"},{"revision":"e4a8797049a8ed491628aa19337a966e","url":"assets/ideal-img/react-native.7fdb38b.1030.png"},{"revision":"2ede1517d675f31e0c32722c1fa1fe23","url":"assets/ideal-img/react-native.a3415f1.640.png"},{"revision":"85729b5f79f5ff555f8d880c1743a8bf","url":"assets/ideal-img/react-native.efc41e0.640.png"},{"revision":"5c02934093a3e2cbcc07f2846d1d882e","url":"assets/ideal-img/react-navigation.0ff888d.640.png"},{"revision":"d8d4fad7f0049a8aecc1c0596bba7490","url":"assets/ideal-img/react-navigation.934c9f1.640.png"},{"revision":"b66c90c84303ccf081e31eeb5309738b","url":"assets/ideal-img/react-navigation.b259138.1030.png"},{"revision":"c39e4a343de6ca90b63bf738fdc54770","url":"assets/ideal-img/react-redux.55a4b3b.640.png"},{"revision":"db363fd9cf874f16261641d41f4748d6","url":"assets/ideal-img/reactive-button.1a55e61.640.png"},{"revision":"6b6b8f5294043d9bb57d057040a6856f","url":"assets/ideal-img/reactnative-aria.94d39b6.640.png"},{"revision":"ec042ddc805b744a2eebd0bfbba92f80","url":"assets/ideal-img/reactnative.859c331.640.png"},{"revision":"fbfadd120faa9b8d20892b85a99067eb","url":"assets/ideal-img/reactnativeboilerplate.8037a07.640.png"},{"revision":"626c62ade01496b53d1011be16fb95ac","url":"assets/ideal-img/realtime-apps-workshop.9960bcd.640.png"},{"revision":"d3e77384be03bf50b44a491c6f535a72","url":"assets/ideal-img/red-gradient.a203860.640.png"},{"revision":"355d25abe60717c76cde0675f9f05629","url":"assets/ideal-img/reddit-image-fetcher.c1477de.640.png"},{"revision":"08b167389dca8a26722457e293f5f009","url":"assets/ideal-img/redis-developer.7d9b45f.640.png"},{"revision":"fec4e6b3ebf151da9e6f21f38b210a8f","url":"assets/ideal-img/redux-cool.36add2c.640.png"},{"revision":"96bf1be12754d027cd94d022de02522d","url":"assets/ideal-img/redux.b480f0d.640.png"},{"revision":"f2ea3b97f9d86a370ddbeb0fc499c165","url":"assets/ideal-img/refine.415ca23.640.png"},{"revision":"ae2c0dd995d578c9bc8ca8f52821bec7","url":"assets/ideal-img/registry.stackql.io.dbbc33c.640.png"},{"revision":"1083995e57b51f9ad8c5316ac9fca78b","url":"assets/ideal-img/relay.148d170.640.png"},{"revision":"a118becd4e2f89b522089daf74fe308a","url":"assets/ideal-img/rematch.9fb8382.640.png"},{"revision":"cffb3264aa393f3875cbeb7a2c00fa23","url":"assets/ideal-img/remirror.9b7cd02.640.png"},{"revision":"a5739a4fbb6e814a62b7faae820b0a5d","url":"assets/ideal-img/remotion.a09b3ae.640.png"},{"revision":"2e8cb474a61b6966a0a17862ff60db03","url":"assets/ideal-img/repeaterjs.e7e3584.640.png"},{"revision":"beba7557274fa2d3476447c9130d41eb","url":"assets/ideal-img/replicad.95a8a13.640.png"},{"revision":"d8999076264725abfe587628630d39f6","url":"assets/ideal-img/ricky-vetter.b237586.200.jpg"},{"revision":"0105abba2293b983ea6da39a491aa463","url":"assets/ideal-img/rivalis.2ac0d8b.640.png"},{"revision":"1aa3f27ba153642687a9fd1dee37f57d","url":"assets/ideal-img/rnrh.e8099b8.640.png"},{"revision":"feb69e6b4dcb4865a30155dd7e2cda2c","url":"assets/ideal-img/rooks.20f286b.640.png"},{"revision":"61bc2c7a8d17f941d3f4da87305817cb","url":"assets/ideal-img/rsocket.a862456.640.png"},{"revision":"3e6e1ad346fbaf3afb88137099e753f4","url":"assets/ideal-img/runiac.cc2c864.640.png"},{"revision":"3bb6786cb9d4393e0a327f699966abe5","url":"assets/ideal-img/runlet.24636e0.640.png"},{"revision":"6fc23acb7d27bc94bc72da8c40a77578","url":"assets/ideal-img/sado0823.7516687.640.png"},{"revision":"52ff0aef7e6156c381caa8723e5a1cc6","url":"assets/ideal-img/saleor.ed9adee.640.png"},{"revision":"86bcb1e924a1a649d3de9573be2c8292","url":"assets/ideal-img/sap-cloud.2ba4181.640.png"},{"revision":"0fa0163e6afa641d1f158d7535b0313d","url":"assets/ideal-img/sap-cloud.87fd77f.1030.png"},{"revision":"1cf2b735dd0b68efedcef37c51922c6c","url":"assets/ideal-img/sapcloudsdk.7403f95.640.png"},{"revision":"619e8f443c4975ee612c6e247c27580d","url":"assets/ideal-img/sapphire.768be39.640.png"},{"revision":"10a5b671814d3d70a7b57eb259e01e44","url":"assets/ideal-img/sass-fairy.b960939.640.png"},{"revision":"f75329431cb908dc8c56aff8d2a0c263","url":"assets/ideal-img/sciwp.f550323.640.png"},{"revision":"1e33bc64f4597cd84254835a008d04b6","url":"assets/ideal-img/Seaography.20333af.640.png"},{"revision":"292842a9717780bbeaa13bab4f07a829","url":"assets/ideal-img/Seaography.2b13efe.1030.png"},{"revision":"c3787257868aa0facb5cdc3ae6aa1c66","url":"assets/ideal-img/SeaORM.851248f.640.png"},{"revision":"1998b6863f4e9e8e4742bca0c64b01c5","url":"assets/ideal-img/SeaQL-blog.8f81fe4.640.png"},{"revision":"2515506c11ead0acd97b6e666ed5bb2a","url":"assets/ideal-img/sequence.cf3290e.640.png"},{"revision":"d0c075db1bea00731e911cbd5d5cc143","url":"assets/ideal-img/seven-innovation-base.72367e7.640.png"},{"revision":"4f7087eb3f37818a4a4dde7ef89beeb4","url":"assets/ideal-img/shabados.347b602.640.png"},{"revision":"667af0193037d6db3adb5228741d4c0f","url":"assets/ideal-img/shotstack.c48672a.640.png"},{"revision":"dfb11d2d9934e7399f20aa865c6823fb","url":"assets/ideal-img/sicope-model.42f11e5.640.png"},{"revision":"1778c1c87007ddf74edfb1534b16719c","url":"assets/ideal-img/signoz.77c06e6.640.png"},{"revision":"6b91892eef864d235dfae94c7c78edc2","url":"assets/ideal-img/single-spa.ea2b890.640.png"},{"revision":"3a2fe61f5145febfeed7bf7dfd435871","url":"assets/ideal-img/smart-docs.b0611eb.640.png"},{"revision":"d882e8cec4f15fd4a6013ccadd640cc0","url":"assets/ideal-img/smartcookieweb.4b9cef2.640.png"},{"revision":"61a0cb6371d37c5e3f971cf29ad4e542","url":"assets/ideal-img/smashgg.38d7ad2.640.png"},{"revision":"94cbc2db48867a1bf53ab4412e50bb68","url":"assets/ideal-img/snapchat.e815a99.640.png"},{"revision":"bcc946b6be88527a76824657b87f872c","url":"assets/ideal-img/snapchat.ea1f1e4.1030.png"},{"revision":"98f547a01d31dd9f81c5aa185cb6c91e","url":"assets/ideal-img/social-embed.068ed98.640.png"},{"revision":"a2e094e9e4d32669f0dae3f9a6af27b7","url":"assets/ideal-img/sodaforsparc.dbfc167.640.png"},{"revision":"8a328d762bd758619962965b69cd8331","url":"assets/ideal-img/solana.11c06b5.640.png"},{"revision":"f7eaedda89d6006cf1d634de963720ea","url":"assets/ideal-img/solana.59b8299.1030.png"},{"revision":"65f872ca756871cffd91649d0dfed4d1","url":"assets/ideal-img/someengineering.0d827a8.640.png"},{"revision":"c3386e12c958ed9e602787e96bc7513b","url":"assets/ideal-img/spicetify.1a085f6.640.png"},{"revision":"3186a450f2faba555b4484dbf2346bc8","url":"assets/ideal-img/spotifyapi-net.d6297d3.640.png"},{"revision":"a5bc63ea6af60328906f9e695a08a4fe","url":"assets/ideal-img/sqlframes_docusaurus.fda05b0.640.png"},{"revision":"877c93a791ca2cc6bb1e6adab9a68961","url":"assets/ideal-img/stackblitz.5098698.640.png"},{"revision":"6eec4689f188a33db58cb35b20afb488","url":"assets/ideal-img/stackblitz.7e33583.1030.png"},{"revision":"923e63375342ddee55765c931466c6a1","url":"assets/ideal-img/stackblitz.8e72b20.640.png"},{"revision":"5ff074d4f2927ee72f05708ba7fcc483","url":"assets/ideal-img/stackblitz.b6d2350.1030.png"},{"revision":"0803bbf446af45608b0177ae1d5f9275","url":"assets/ideal-img/stackql.c7f7614.640.png"},{"revision":"78eb5438c8ef7ede29597959eca4bac7","url":"assets/ideal-img/StarfishQL.352ce0a.640.png"},{"revision":"a90b86a6b74e42fadf5652dd915ee055","url":"assets/ideal-img/stryker-mutator.f44ee7a.640.png"},{"revision":"0cf94449b44b9cf6de3af3d2b1582cf7","url":"assets/ideal-img/stylable.a1dfdc7.640.png"},{"revision":"79cf7c43d3bf1808c3c73b82cc40f671","url":"assets/ideal-img/supabase.a1c0e2c.1030.png"},{"revision":"7f393664cdb8f935c6ab1635863bcd06","url":"assets/ideal-img/supabase.c682b42.640.png"},{"revision":"e0ff68e0e9596a685b4c57bab1a8476f","url":"assets/ideal-img/svix.55bb910.640.png"},{"revision":"9eddcf623e04dd08eed287f8235fbbfd","url":"assets/ideal-img/sweetcode.ef07201.640.png"},{"revision":"a783d0a076da1a4cdee6140ad4e8e748","url":"assets/ideal-img/synergies.bd6e428.640.png"},{"revision":"f91a6a476d0026e0fc5cc2680a86f9cb","url":"assets/ideal-img/t-regx.9843ba1.640.png"},{"revision":"8b7ee37d57ee9af8c292512a894a758b","url":"assets/ideal-img/talentbrick.01fd671.640.png"},{"revision":"3b8e83a059f3784dd8cfce7ca8face70","url":"assets/ideal-img/tamalwebsite.26309ad.640.png"},{"revision":"6cb5e2eac0b3e80aad0cac63fd934b06","url":"assets/ideal-img/tasit.ca14517.640.png"},{"revision":"aad4289ceccc10ef447d5197132dcb66","url":"assets/ideal-img/tauri.0e2fd42.1030.png"},{"revision":"e6e7ec47b0180120c0686670ded549ee","url":"assets/ideal-img/tauri.b9dc5c1.640.png"},{"revision":"23171cf72d16658e9f510dc0526e50df","url":"assets/ideal-img/tauri.d6c8d2d.640.png"},{"revision":"6fd0f1d6f4410a25506946112977645b","url":"assets/ideal-img/techharvesting.be1f17a.640.png"},{"revision":"8e677e4f510f85732cdf33fbbb915601","url":"assets/ideal-img/testing-library.f9bd592.640.png"},{"revision":"4aed81de45a0f85d9c0bc4d8130502c1","url":"assets/ideal-img/the-diff.5192fcc.640.png"},{"revision":"f9df746196d66600cbcb6a566fe1815e","url":"assets/ideal-img/tidb-community-book.05a8b18.640.png"},{"revision":"923427e903ba4e62536df14088b54fc5","url":"assets/ideal-img/tinaeldevresse.3e1ad23.640.png"},{"revision":"fbb0b6dd6d9a1cddbe6dcf46d3cd0369","url":"assets/ideal-img/tooljet.5743407.640.png"},{"revision":"beab185f49e02e8198aa8abea2b43074","url":"assets/ideal-img/tremor.308b735.640.png"},{"revision":"37f79136df896bb3ecb9d849810b2e05","url":"assets/ideal-img/trpgengine.28a9eb2.640.png"},{"revision":"d03ae72b143ebbe888b97e5e8fc848c4","url":"assets/ideal-img/tuist.c32cfcd.640.png"},{"revision":"a5a5ec0ccf627b4dd3fa99ca06a1ef0e","url":"assets/ideal-img/uniforms.4e46641.640.png"},{"revision":"ebb4f62320ea3fa9f75d5bc4fd93bf00","url":"assets/ideal-img/unleash.054b153.640.png"},{"revision":"e9d4cb3b149b17046778b868374780aa","url":"assets/ideal-img/unmand.ee6e7d5.640.png"},{"revision":"05e6955a522eb6a40d7e136546974f6a","url":"assets/ideal-img/verdaccio.449a883.640.png"},{"revision":"da8c13ecf83766095a3c40353bbbfa1b","url":"assets/ideal-img/verida-developers.4982a04.640.png"},{"revision":"385d88edeea80ab02cebc5d7902a1ef3","url":"assets/ideal-img/virtual-photography-kit.979093f.640.png"},{"revision":"dbbf45ebe364e7c943e7f0e044f09175","url":"assets/ideal-img/vital.60553e6.640.png"},{"revision":"981aa5e28f410b3d72dcebc5acd3fc8f","url":"assets/ideal-img/vue-nodegui.43b0f4c.640.png"},{"revision":"75077a146c7e5e22cc67303b7e066d93","url":"assets/ideal-img/warrant.f2f7a90.640.png"},{"revision":"2533b1d57a8e287de8c0074a3d880aec","url":"assets/ideal-img/wasp.9ef300f.640.png"},{"revision":"ec28bdfc474d1d9ddcfcee5788460dc3","url":"assets/ideal-img/webdriverio.83ffcc6.640.png"},{"revision":"bfbf55ef5b8c81f16ed6ece4490072b3","url":"assets/ideal-img/webiny.548a1e6.640.png"},{"revision":"59c2dca30640da9bb38fe8d1c70b45a4","url":"assets/ideal-img/whirlcodes.c9c1387.640.png"},{"revision":"a21ea671784781a3ed3813e9557055d4","url":"assets/ideal-img/woodpecker.a024291.640.png"},{"revision":"068572b89cdc6ba503eadc9623b81253","url":"assets/ideal-img/yeecord.5a675fb.640.png"},{"revision":"25baba8521600d941e60f199bfeb7c93","url":"assets/ideal-img/zowe.39835e7.640.png"},{"revision":"43f95bd334ae05133f867eb10974c552","url":"assets/ideal-img/zxuqian.c98aa2c.640.png"},{"revision":"c94fc1a0cc432792ed7a60656aad55df","url":"assets/images/30-days-swa-33190f7c1ad234fa30425afdb7a7cc18.png"},{"revision":"e411c8494a3f570fd8ba45492412547d","url":"assets/images/404lab-wiki-882ad88bf32dcd4d8aff406aaf2fa287.png"},{"revision":"0c1dd7f23df1ebc1e5905d48d8817b26","url":"assets/images/7wate-wiki-29bdb6866e7a7c46bb87a2f182e032d6.png"},{"revision":"ce5b47ab90af2826ed175ffbbcdafa76","url":"assets/images/agilets-b943996b17585de9fbcc724fdd280ed6.png"},{"revision":"5f2b0eb715c077c9bfc547ac755bd5c3","url":"assets/images/aide_jeune-8698bde08c39c4b90644a2958b0da61b.png"},{"revision":"0861c8e76600c70ff4b3c613f032c1a4","url":"assets/images/aispeaker-8b3d588a17938e200ed2eecfd6f2468f.png"},{"revision":"640d2a5ffe3544a9d788ec4d99f932c6","url":"assets/images/akara-blog-69953dfbab78d0eed5126ba32daf9cbb.png"},{"revision":"7f9ea976f0647f12976662bf227061bd","url":"assets/images/algolia-08ad93d9138dd941c51c22aebe687d8f.png"},{"revision":"750669a099afca8295a5c74d45710ce8","url":"assets/images/apache-apisix-b4e830ec3f185abc3a55f579bab5f9ca.png"},{"revision":"e8d46334bb30b9c0c9ca7cb2d67ed38b","url":"assets/images/apexfp-6f1d7796a75be57e2d3cef7127e5c699.png"},{"revision":"d6198c91a2aa7825c36adffb60fb9829","url":"assets/images/architecture-5b7220912f5cfdff40a7728233abb902.png"},{"revision":"a164a43cb40af9bb068725a33dafd868","url":"assets/images/argos-github-comment-8b62a1561b13881608d5c9f8a8f833a5.png"},{"revision":"84268c46d62562aa572988bf1a89d894","url":"assets/images/argos-github-status-05e8264c59fa4f8a21292f59665edf3d.png"},{"revision":"3e1cb738522812eec5e7ccff8aa31e20","url":"assets/images/argos-react-native-regression-216ace77baedfaf873a770112ec817ac.png"},{"revision":"7fc5d2a63c24ce004e18a0b64e1e39d0","url":"assets/images/astronomer-ec1d5eee119a7852320213802aaa70a4.png"},{"revision":"e5d4f28753985c0b300a7d1e0bcff91a","url":"assets/images/attobot-c4492e9a122ce4f024e1a8e990215dd0.png"},{"revision":"cb89b0fbea62bd02857f823dc3d267da","url":"assets/images/avana-wallet-a8938a42193b774cb190191f1987d462.png"},{"revision":"4d5fdda850c98718886a423674074f1c","url":"assets/images/awe-framework-54b97d5981ae2bea64df45945b6f0e11.png"},{"revision":"673a07f06c47189ebcecacede9365f6b","url":"assets/images/axioms-e5d6ddfe4e7e37a9c21fd3dd48cd6e54.png"},{"revision":"423cddab37b9842e3b34eac995a6a318","url":"assets/images/babel-509aacfdc070e475b4f673083b2e6e74.png"},{"revision":"0104dc0ef6c64a0eecd670eef26f88c0","url":"assets/images/bandwidth-039d57f34a279b32748a2d994cfe8c12.png"},{"revision":"0bbe7222108ce6c1647c8475aedf5e17","url":"assets/images/baseUrlIssueBanner-3292a9164bf77c06a723e8d3ddfe66c0.png"},{"revision":"544c3f02ceb6b707305ef6222fcd4455","url":"assets/images/benthos-6183d73d5a4e1dadc3cd5e845996bb84.png"},{"revision":"c385a62c7d9ac53430aca0e7894b6aee","url":"assets/images/blinkshell-8d6ed8c3cefa3957b268df156322673e.png"},{"revision":"5b0d7cc795b17f5233009fd2ae2145c0","url":"assets/images/blogasaurus-a6ca1e228a12ae11d3cf2f2abb57d5c7.png"},{"revision":"158cd8e386e94cc0d99b5a60667225c8","url":"assets/images/blogmatheusbrunelli-461a018ed6a0076b7113a17d6d7a212d.png"},{"revision":"008dd03441d0ce701d723e9c03f6c7ff","url":"assets/images/botonic-406a39eecb51d4cc44ffa3a74924d4b5.png"},{"revision":"570abcba2c149090df5f4f7deee03eb0","url":"assets/images/boxyhq-50e9b89431c646ae0091e7d7f83bd650.png"},{"revision":"89b9c540b4a2d0f4ddf7b6b1edc1de25","url":"assets/images/brainboard-4959f0edd62f974fd0bce9d6f1cd4887.png"},{"revision":"ff5c0d1e49e334f56d5ebaac9197d9f4","url":"assets/images/broken-anchor-4191e5dd94aef9e8c5e3524880670f0f.jpg"},{"revision":"7cfc0359f6d3bfdda6a9360df4573a33","url":"assets/images/bruce-wiki-ceca161425a90f278383a0398427aff4.png"},{"revision":"fe784b50bc08b3903cb713c66e1c8fd9","url":"assets/images/build-tracker-b2df263a3614bcac48f8eb31a9d8dba4.png"},{"revision":"780b5d649908392cee17e45594fa7ea7","url":"assets/images/chaos-mesh-5072bf5cf6237a68add5bfd951e2180b.png"},{"revision":"2d9533c2d478ee689d5a25a8aeb12498","url":"assets/images/charles-ancheta-a222b7858cdf7b245184d99817454cee.png"},{"revision":"5ccf68912b29b857a6bde52f395086b6","url":"assets/images/chatkitty-f031f34db242a0cc1c7af7260e035d90.png"},{"revision":"9454c3616b406afbef07fe53582706e6","url":"assets/images/CIPP-7c0e7feda473936e1527217d9a5a24b1.png"},{"revision":"0aa69cfa8496c7be965d71f937085c9d","url":"assets/images/claritychallenge-108b7f845c124611acdb85af6ea4d35f.png"},{"revision":"98ad60db472a94f5c4e30cc0d820df1c","url":"assets/images/clutch-b055c6bffb878093fe446a1cdd461b84.png"},{"revision":"5b357df6113b6da1bbe3d8a0feb55bc3","url":"assets/images/codesandbox-7cc31f5edeaa0f55d18baff8c264ab41.png"},{"revision":"be77b60ff268dfc4e05de49c83b82566","url":"assets/images/codesweetly-f9e825f4513c62f750a3e0550721f333.png"},{"revision":"b4ded3baf768747558be9634e57f6cc6","url":"assets/images/codeyourfuture-aae9ac03db1b2c7360877261762c5f86.png"},{"revision":"dd6421f3ac7f15a4455f9c13a41b252f","url":"assets/images/comp-labs-f7b9c2e8eaf2c111b2013a47a7899241.png"},{"revision":"1dacac81738d1c8629aca828758f8ea4","url":"assets/images/componentkit-d3ef2d1fcafe86d7aa5c5a8a3a57752c.png"},{"revision":"4c8c724a7df15f8f8ed76e7144758753","url":"assets/images/configcat-2eff8eff12a99d8f3d1a0b30c2643628.png"},{"revision":"e1a6f44437236a45747b560f71167eda","url":"assets/images/console-table-7acef5eed9056bf9a0dbae7a57113d0f.png"},{"revision":"6b98edf8e3dfb8c17081994ff2cefdb2","url":"assets/images/countrystatecity-060c64c5a7e717d8f70ee4e07f22c7f7.png"},{"revision":"fb5310790a54abc03a3bf10d791273b3","url":"assets/images/courier-11d42951bbaf823db5f0efd6bcbdc95f.png"},{"revision":"69eb5498fc4603b5add7f46a2ea54806","url":"assets/images/courier-624bbae7cbef3b4e7533d1976e35f842.png"},{"revision":"26aa61ba220a22fc55edbe0617ff4c75","url":"assets/images/crawler-overview-6224cc4c7b20511010652f3f4ed5904e.png"},{"revision":"0c917e08f86fe60534f71f1e64a2bca6","url":"assets/images/create-react-app-9511de378d817b4e149bdaec2deb49ec.png"},{"revision":"0f361b02b26a31a56f640a4fdc717e61","url":"assets/images/crowdin-create-project-2fe25e5974adc027f7ac2c36f1717de1.png"},{"revision":"753b7ed11c6020dcda67fd46ca360323","url":"assets/images/crowdin-download-translations-warning-cb747bdcfc38beabea491f63781b9b40.png"},{"revision":"baf0b3601c3a04cc7bafaef23e7fec2e","url":"assets/images/crowdin-files-rename-5ff9bf66f6123800006cf38ead6b66ae.png"},{"revision":"669941dc7be19f55703f6dd474705c8e","url":"assets/images/crowdin-french-translations-4f252e7f63a781628378eeb3a9fefb39.png"},{"revision":"951f4b2feb2f35a1944cd46b6425ecfe","url":"assets/images/crowdin-hide-string-5e470a33a42e044379bf6860ff534b50.png"},{"revision":"1bc6c6677e1328c16a151396b632d3d9","url":"assets/images/crowdin-settings-duplicate-strings-6943e2e4cab8910625a0b6c285052726.png"},{"revision":"5f8617f4a69886af9ae1064e5e1736df","url":"assets/images/crowdin-source-files-0ba8c0433421141418462c3bf6de22ed.png"},{"revision":"978ea4c7ed3ebba8bc235b8e25db0bb5","url":"assets/images/crowdin-translate-json-39a6b98aa60a84eba22b2f5834cbb97d.png"},{"revision":"8b6f59757f6feb348fbff25697f8e7a3","url":"assets/images/crowdin-translate-markdown-0651cd22b5f07f0e9b3031ffaebbc5b6.png"},{"revision":"91db58fc5cbde3f9e0e6b3272e22d613","url":"assets/images/crowdin-upload-sources-cli-5758c2f4d4256ac05d21b637d1d517bb.png"},{"revision":"880cf124e7dcfafb53524fe7445d4659","url":"assets/images/cryptodevhub-5a1490f6e4067fd70fe7478b86b8b2ec.png"},{"revision":"4674d542cd06ef1fcc1033e1e9459771","url":"assets/images/daily-digest-covid-19-in-france-a3ddfc37b63650dcd98c72d6626d0025.png"},{"revision":"0da27d5d33ad948dc2945f2b0b3f1c11","url":"assets/images/darklang-9b5f899f4f2bd70349432d9d900e63de.png"},{"revision":"824f448d379a12328e5657d99e99080e","url":"assets/images/dart-code-metrics-2e48f03e468f117f107b13cf5c09c39d.png"},{"revision":"fe6edd47f0847bf805e9d211a346932a","url":"assets/images/datagit-1c0f9003ec2b9b1e2dc214c572247f1a.png"},{"revision":"6f05d05a2e50a40e936fcdebcbec7f27","url":"assets/images/datagit-31574c085024a19c7c82e817d2338e45.png"},{"revision":"434685293307dd9635102614eeac5116","url":"assets/images/datagit-9cff7b631eaa43b00d9e1373359abfb1.png"},{"revision":"bf35793c3ece40b7e23207d0712a1e82","url":"assets/images/datagit-rtl-screenshot-0def4b4e4d5f458ea864774e78b0bf8f.png"},{"revision":"f9964c2ce86145a6a9e1de03c562a144","url":"assets/images/demo-0e309a1a631b58ebe6d5f2d8014351e8.png"},{"revision":"5088cd8908ef4b836118f81eff3c9c69","url":"assets/images/devspace-c53ce0b4c55d98742b4352ff7730ee91.png"},{"revision":"3e140cadd04922979f9d7a24767aa065","url":"assets/images/difranca-technotes-b2c0837057bbf1d10840f32ed2cc1f3f.png"},{"revision":"f832ad444058c38655387c575feb5f32","url":"assets/images/digitalsupportservices-a2a7b7598235f325ded5e9f592268a87.png"},{"revision":"05a47bfadd4e79f4218cb0c89fe05147","url":"assets/images/dimeschedulersdk-4d7d876c9f867c8f48f46c27075fbcbf.png"},{"revision":"79975c85903b595d45d83b9a184694f2","url":"assets/images/discordresources-3f28f1f92275c7cf71be8756e7d50bf2.png"},{"revision":"d5d8c61e552fed10691671e729cb9748","url":"assets/images/divine-wsf-d54ba6918bdc391ef230a3de6c393bab.png"},{"revision":"8ded662a50b94bf8b57b1555cd795284","url":"assets/images/djamaile-61447aa22e1ebbe55085c19b43d09665.png"},{"revision":"a39609450575285a2a222d1376547c35","url":"assets/images/doc-card-list-e52d727eadceb3d21cfc0f851f09aa93.png"},{"revision":"adfd9c8e53ed163ecddba31e6e2fe0e9","url":"assets/images/docs-butterfly-ebf1a855a514f691d988ab84de243efc.png"},{"revision":"27ad2af8f3c27eb7cb50bfb9d8535bd4","url":"assets/images/docs-taro-zone-7932bfb0f465e7dc81e398c95381b1d6.png"},{"revision":"2bfe7459caa285ca5ffc6a055b800e11","url":"assets/images/docsearch-troubleshoot-index-facets-4c0d9816a72c457e3e8352bc0fceccb6.jpg"},{"revision":"a805a9fcd13a37224fd0e698bd87e8f4","url":"assets/images/docusaurus_keytar-0cb85c4468d358b2028c7ab2a38aa3ff.svg"},{"revision":"2e8bc5f517fee5f4729e34cae90c1496","url":"assets/images/docusaurus_speed-3cf95ee960d17fd7f1d2714e0d7525b2.svg"},{"revision":"86d78e21e95c8dc518695c85f22fb3f4","url":"assets/images/docusaurus-1f34354c7579c3ba7e82539b2098257d.png"},{"revision":"61bb3a4006cd9e9549992bf1eff20ed0","url":"assets/images/docusaurus-argos-example-repo-screenshot-a56583e16aa02c7fa96c592f1339928f.png"},{"revision":"f3bff81fe6c375e8bb8b0ae72ddcc9df","url":"assets/images/docusaurus-asset-example-banner-63decf1180b7949f4c3d0f7b7ecfd162.png"},{"revision":"6e75344d1fc783d20374fac33af46f0d","url":"assets/images/docusaurus-npm-trends-3c618d573fc9ca319e54667383ea1e01.png"},{"revision":"192a6a160f31b1689a4c6233bdbbb803","url":"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},{"revision":"56433861af226df518c403e8dd31236b","url":"assets/images/docusaurus-slash-first-birthday-71e4f41412bd9df66b30df131ce8dc67.svg"},{"revision":"b0cfe79fe20fe30056553614e016665a","url":"assets/images/draftjs-9e8a6d2255f98acfe176fda0849cf71e.png"},{"revision":"7abde9149fe0f7bfff6a724cfe887836","url":"assets/images/drayman-8db14fbb4d4e74e76bda56606fe3327b.png"},{"revision":"368ac85f512029a3e3bf9f6ce664487b","url":"assets/images/dyte-d03fa5d0bbac1ac1f1e971313b990f81.png"},{"revision":"5fc74c091ccacffa0c995629971ad024","url":"assets/images/dyte-dark-b9748e4bcb4281880ff1856519d58b38.png"},{"revision":"c79fbf241d9c201c9fe4337ef432e7e4","url":"assets/images/dyte-f8d1e3817485787e9a26ec3c8c279126.png"},{"revision":"24f4569c5d59a9b7f07a3dfa390106f4","url":"assets/images/dyte-light-24caa76f96400453386185ae6bc06b8a.png"},{"revision":"05f2df7582a8ab6e1cbbf491472b82f9","url":"assets/images/easy-dates-da2832c14e89d0618e305579c22b959f.png"},{"revision":"e512b052a378647a2fe3c16960a801a3","url":"assets/images/easyjwt-7dab7274e629af36e29f673560e08e51.png"},{"revision":"5dd8e2cae3c89fa87fd6a45c397c6205","url":"assets/images/easypanel-66b8119b4545a0c4dccc65c91d3f6849.png"},{"revision":"7efaca0b49213041368477c0f5f79ff6","url":"assets/images/editor-823e50dbed8e508bd5a69c708bab8928.png"},{"revision":"a232e80e54ce2d39ac150ad2025fa2c4","url":"assets/images/edulinks-4816141fda1f4b8bed05fa4b604c6f96.png"},{"revision":"681d4b57527a53e56c300a61299eec7d","url":"assets/images/eightshift-docs-548747ddde278e8a29e0fb4a87d520ee.png"},{"revision":"ecbe7d7e83202faec649d70a99cc39e1","url":"assets/images/enarx-ff6526c1bbc90dd3b3b2bc92abb36a56.png"},{"revision":"a4b8ed088b3dbd9c0476a54933bb93d9","url":"assets/images/endi-f942c4eafb5f650832b4327bfbadae4f.jpg"},{"revision":"aa8a6cc938eecf66905337f95f510e78","url":"assets/images/eric-e42c295cc7b874502322f57298ad5d9e.png"},{"revision":"22d0a2e310cd688212f2d2a62b60f7b6","url":"assets/images/erxes-7b6edc42beda5953b7552f61fa8bfa28.png"},{"revision":"3b79fa709715dbfdd6cf08d4a9f331a2","url":"assets/images/eta-beba707df244c24e3f238d29fc6dbc0c.png"},{"revision":"5e1fcdbe974889b0ac8480ea5816121d","url":"assets/images/evantay-967b4654e7d633c54ba25be6995a3b5a.png"},{"revision":"165145e30c1fa8a9f1f8cceb5048839b","url":"assets/images/evershop-8979b0fe723ca184037ccf04ea6a4e5e.png"},{"revision":"9a555833d2a590ee223ff2f96a959f9c","url":"assets/images/fast-3625a8ab63a438fe333ac43a2fbf267c.png"},{"revision":"0de2ab7952023dbaeb0ce9ae5c20079d","url":"assets/images/favorites-7220082695a33eba77188ba7223c165c.png"},{"revision":"2c3ebcf59600c3089915cfdce4ce8543","url":"assets/images/fbt-23d3a0658ee4a07b4b3691ad07cbe9d8.png"},{"revision":"e5928baf2999053d7877616e290abda4","url":"assets/images/figma-8cf6076a3c5482b115f14805a1d8c977.png"},{"revision":"d111b4c8e9cfc967c759dabe1c3ad9ec","url":"assets/images/files-gallery-9010bf288799f09712411c875544f040.png"},{"revision":"b7f0a9473bae9705e806350eeb55b665","url":"assets/images/firecms-e5e06ac20d82e64357ea21e70d81a429.png"},{"revision":"0019f5e55b0706d3525a5f9c45966e4b","url":"assets/images/firelordjs-b8067ff7594d915dedcbdb35688bf828.png"},{"revision":"f10ffdc80653215c8fe9a8d12f240ea7","url":"assets/images/flagsmith-a00ad356eee3eec8de1c554ce40b3c29.png"},{"revision":"b56ca9f9f86bbea3344da1831b72bc07","url":"assets/images/flarum-e49af2f0db6f9f09d2cdffb0906b4d72.png"},{"revision":"cd4a320b1ed7883bd2f37d7be7aa87d2","url":"assets/images/flatifycss-5ceb8ade9fcc3ee7c0eb50757f19f0af.png"},{"revision":"8e7b8f3464fd5f101464de5780502745","url":"assets/images/flexit-d2e9d40f620bf5e3964a866e97195771.png"},{"revision":"298a94a71c04fe22e42d960e04b5d8b8","url":"assets/images/flipper-a94b8f31a1453c1b678b693eaf054304.png"},{"revision":"1aac3774f6343bbb7e6b62c2375feb98","url":"assets/images/flux-744d8458b0e39a9527fc795fc0f07515.png"},{"revision":"90ec8000e9617ea2a7498e3f643a6590","url":"assets/images/foal-5d8b88ba45110336565e6b3f40beec25.png"},{"revision":"2f14a03d406ab9965cab6a91d7cf2cea","url":"assets/images/formatjs-f589f0b1fa5fddec117bcb52cbd80aed.png"},{"revision":"2f6efdfb1729fb66b505499d1868c780","url":"assets/images/froggit-e850adec4bcd46d5771e9894b189b0a8.png"},{"revision":"35b0d848232d8ca9863c831e471f7437","url":"assets/images/fullstackchronicles-e178c420cede1c9312a6d213cef43b92.png"},{"revision":"e9dab67f03a9b03292c62215e6ba75d5","url":"assets/images/geekyweb-7fdcff51f644d364fa00d598aad94c51.png"},{"revision":"40f78cbc292b62982ece1bcb1b4ccb36","url":"assets/images/getorca.org-dark-5bc61d5b9f9ff89e7a9408d5efb8ceb7.png"},{"revision":"c062c0635cef10abca403a8fc70bfbab","url":"assets/images/ghostly-ffe6ec76a4189e682d81decb7627cdc1.png"},{"revision":"b7b5e08156033cc6ccf0bc3fdd64bd01","url":"assets/images/gladys-assistant-244b5293677e66e4c5de9c725640e4ea.png"},{"revision":"3af9a2ec6bc75991a8f4a29629afd466","url":"assets/images/gotenberg-6764f133f36603528dc73e1e47841d7a.png"},{"revision":"a57da5a66a75bfa7dfc8a11408146283","url":"assets/images/gtfs-to-html-16d770dd8f73a30cfda7b127440f0023.png"},{"revision":"fb9d5503de897c31e6ed189a0b5df43e","url":"assets/images/gulp-0b294d1ba9747b6b03ac35f0b6c9e82e.png"},{"revision":"f6b2330d41a7387f20e73d9cdc618ee0","url":"assets/images/gulp-e5414077cf70a0d7dccf21b8ba99f930.png"},{"revision":"362f18c4e49784b5c4995531a6fa50d7","url":"assets/images/haochen-f1754b3004cb222f39cf74fa3838d2db.png"},{"revision":"627eb8ab2ed455b275e0dbb1ad54bb2b","url":"assets/images/hashnode-ad8d0f722129e8ccb118afb3273f129c.png"},{"revision":"a9836f29fcf3b16f9d97c8f0f4a2bebc","url":"assets/images/hasura-8db3b5011aa771598f1709cecff57d15.png"},{"revision":"259f441a922624c385b168b3c26ba1cf","url":"assets/images/hasura-db25f3cf2fc7c618b39e78b8edfc24d8.png"},{"revision":"4980db83c821b1789fdf7f8144411edd","url":"assets/images/hcaptcha-dbd3c526c80bc8518ee9f0eadac71355.png"},{"revision":"63ffb8ae99e68c428c242c5540ae0a8a","url":"assets/images/hector-ramos-df4b4600bf3a9c706bf91d5bfa9a4e9d.jpg"},{"revision":"a9bbe71b4e690ea6c02a70e943ba3e05","url":"assets/images/hermes-f0fdbe93345e929e1c3f0ecee070bc03.png"},{"revision":"9a7472942862522821c71d6973944aa3","url":"assets/images/home-assistant-efeeea05a876b615f4e90185d3a4982c.png"},{"revision":"930fa7e6ae3f5ba793746ae5b479e2a6","url":"assets/images/httpin-5d90ac166b4df77b0330ca1a903d5802.png"},{"revision":"b821a74ad6f841c929fedf26b7eaab53","url":"assets/images/iammassoud-4a7ec5ba9dc1051b798b44b82a64dd48.png"},{"revision":"8b779ca4940e52af578752f04aff4bbf","url":"assets/images/icodex-a20601149b0dfcc8bd5dfb8028971b87.png"},{"revision":"77ae7e51a91cf7e7e52f284de5cdf311","url":"assets/images/idb-cdb19c085d71bec2e6531d707fe580b5.png"},{"revision":"6a440b5eb8cc26b5d79970895c5d55a4","url":"assets/images/image_cropped-2744c01b1fc0b451dbdb65a1d568fbff.png"},{"revision":"5ee7ec7e00d71865553cf4dc0663940a","url":"assets/images/indent-a94ecee4c569fe38b80f8e3de28bf868.png"},{"revision":"c5a906d2beb6b440cf590fb4cdcd2d27","url":"assets/images/index-analytics-f9c27da3900de6206e949736b1cd8101.png"},{"revision":"f3362c2a58b71abe53b63bb24332d760","url":"assets/images/index-overview-ca216346e6eee6881443644b6d7d8fe8.png"},{"revision":"f2e0b4c16870029906403950fe9078b7","url":"assets/images/intelagent-0ec267dfc4d2a943fe0079fbb913b049.png"},{"revision":"4c27c197df0598cde4155f9e5563ec9b","url":"assets/images/ionic-dark-17086f816052f02e84054fe002256ed9.png"},{"revision":"9ce1a28284d59372c6b78f690940fb69","url":"assets/images/ionic-dc7a3bc3af18da3d488ac73e19586295.png"},{"revision":"a4347ee6969d427dd486ac7b5e0669ad","url":"assets/images/ionic-ec7bc51600dcf36ba98f866b86408448.png"},{"revision":"c799c953d5fc67c801580ecd8b88481c","url":"assets/images/ionic-light-b8a9c77c71a99f4c71a16584dac8ccf3.png"},{"revision":"eb67550c4bdd27adfb720e4ab5841c98","url":"assets/images/iota-dark-986d9518ba0e03583d734212ba93539d.png"},{"revision":"6c3e3c34a719d5bfcbd98dca398071d8","url":"assets/images/iota-e93cc26d8bf834f81e425ed2e6536a00.png"},{"revision":"eb09f80ad0c35baa716a74b4bf030a92","url":"assets/images/iota-light-d899be0c1eb939a5ad13e2ecca4eb951.png"},{"revision":"50e525425279423fadaebd68c795aeba","url":"assets/images/iota-wiki-8d44ace54724e2e02c2c9388dca2cac9.png"},{"revision":"f4abb0822162ab733564ca61477edc0e","url":"assets/images/jest-59f159eb97ecd87655cf47ec5cc00d47.png"},{"revision":"f20f2a3a89ea23f0f6c78ac1fff5a6e7","url":"assets/images/jest-605c882a85ed412427cf1eda363186a0.png"},{"revision":"9f3b75fcb8ced8b9f754d736cb094e2f","url":"assets/images/jest-screenshot-fa8ba3dd1b0ebbf923ed56274f0e4f5e.png"},{"revision":"fcc475342a69be6b0bfc0822db959cd4","url":"assets/images/joelpo-93d70c6ca3f0d7d96340ae75262fc096.png"},{"revision":"143633ec437ba04f642e4b41b3beb3d1","url":"assets/images/johnnyreilly-0664c0055f08ba409bc719b000dfa915.png"},{"revision":"94d658b13ccdc3f319d93663156c5f5f","url":"assets/images/juffalow-cad9113f0061e751aa02da8d9f24bac6.png"},{"revision":"6f3f7c5f37e8fb562ceb82678ebdaca4","url":"assets/images/junjie-404e8e8d7a44d260776df8cecb3122d3.png"},{"revision":"57f2794baef0030b07eb79cbfd291b2d","url":"assets/images/k3ai-5fcdd85b6c69625d8ea4e8a8c46adad3.png"},{"revision":"12d293e6aa1e795fa2c7b974d2f81dd7","url":"assets/images/katex-54f4eb61a62b5f7c6f38c229aa150a7e.png"},{"revision":"43bdce92edce1082885dc566d41fdfbf","url":"assets/images/kaustubhk24-fea60db164f855abcf7470e73799f009.png"},{"revision":"d1af63bc4dcbbcc62705e0bbd45226a0","url":"assets/images/khyron_realm-de7e73a3b857c989fa56b1b16aedb84a.png"},{"revision":"47ec6fc330c4b2f74a9bdb79d9d3ea60","url":"assets/images/kosko-32cdde7ba1a4b0f10433fc3c0bc10516.png"},{"revision":"5666dc711347dfe3d2f412caaf001610","url":"assets/images/kotest-bc9727b00448d60b277f7fa624b3e861.png"},{"revision":"4e553e00e7505b9fe3c2c54792abc17b","url":"assets/images/kube-green-64534cc4c6e0e95ac80ad29bcc3f508a.png"},{"revision":"556d3495b9d3d914480a7f2b19bb9c3c","url":"assets/images/kubevela-c67ef3b5e22525cae9381371098c6de8.png"},{"revision":"fd4513135663c10853c618830b33af73","url":"assets/images/kuizuo-d392df45978747b5421d32fcfae07f1e.png"},{"revision":"e9281dd6de972579caae5df5cb78c4fd","url":"assets/images/kwatch-cbaf4edefad9336c8cbf31fd98caffd3.png"},{"revision":"7f89eff6e5c635e18d6d091a340e7fa4","url":"assets/images/labviewbook-ffa00735774d6d6f4645b60169c5f138.png"},{"revision":"e8e9dbc072f6dc7747b2a008d7a2c76d","url":"assets/images/lacework-672771c767674a3f3db7acd20145df36.png"},{"revision":"00bbfdfcdceaffab6fdb89c63ac72a5e","url":"assets/images/leedom-33513c46bedd2076e9be19b0f287928f.png"},{"revision":"45ce767badb7b74f299c52e27d5471cd","url":"assets/images/leon-b83894bcf1018b73c6e62610c522c9f8.png"},{"revision":"fc2a2ec748ed394c6d926e299860812b","url":"assets/images/lerna-5bc9bfd774d3e319635a279bf5b325c3.png"},{"revision":"b15730b47036debd0030bf924963b7ae","url":"assets/images/liqvid-e32b9be036c56e76edc297a89a11c630.png"},{"revision":"27d4de9a987b5d932133c9c9235c95be","url":"assets/images/livekit-215969ddf351bd1592cf47f6611a31ed.png"},{"revision":"9d293fc87a9575062d45e5358569fa07","url":"assets/images/local-image-05286ebd44ab198d038adbeee9544858.png"},{"revision":"324618efd24e11cbfae85c78e1ad6865","url":"assets/images/lux-algo-d89b9a684c5c034047c596b85f5131bd.png"},{"revision":"dd29f5a7f827ca8aaed267845faede83","url":"assets/images/mailgo-0d4b6aa86b0e0d555ef53804bd3c8fa5.png"},{"revision":"52eb44c6c9e1cbd4c378da38d2461626","url":"assets/images/mapillaryjs-3d63fbde322165042c24040240a8f296.png"},{"revision":"3260439e6cd35c01a5e62667246c7b3e","url":"assets/images/mdx-checker-output-0f96cc19fd3ed4d55901ca90ad657c14.png"},{"revision":"ea79d77a500acd63b6633e652245bd05","url":"assets/images/mdx2-playground-options-eab88e8328a6902759c4236ffc93d9c6.png"},{"revision":"70cb1c98aa21fece5e60bd582c5cc3c3","url":"assets/images/mediamachine-d4328976c3b954f620a1c4c646348097.png"},{"revision":"73fb64d430af4e72736e2f29c96b3d58","url":"assets/images/meli-e3a3ea878c4690c02c4295d17650989f.png"},{"revision":"6c352083b5e8e5324886cf8da6ddf115","url":"assets/images/memgraph-17f35d73fce2405684a0472c3d673b8c.png"},{"revision":"c47accd9a0643b647bf2b41f0962f6f1","url":"assets/images/meoo-17ae368cb5d228f710e7b90712b8ee1c.png"},{"revision":"2748bdb8436c03b9ef8fc6e4918dcc18","url":"assets/images/metalyoung-fa584ba7483e1f29df46b5586c533af3.png"},{"revision":"ee8425705cfa37f5361995583603082d","url":"assets/images/metro-c54c07dbba72af28ee8812e952690bf6.png"},{"revision":"56c243d465f4d70a65edfd4745408b36","url":"assets/images/mia-platform-d8ea57c0a8fce0f336c9a9a4aafbd4e5.png"},{"revision":"25542edc977f60718047837eba30a6aa","url":"assets/images/mikro-orm-c53a351d3382bbd09e107f7d43e5d503.png"},{"revision":"1c89d5c18485b870f225cd4dc14df849","url":"assets/images/mintmetrics-11234d7260758b0a34b41ca89f6daaaa.png"},{"revision":"dadbc8b052c0789d2b48f29fde1e0d96","url":"assets/images/mixcore-4b5f61859375be073e50f8b4d443668d.png"},{"revision":"42fb20e048dcee9a16d41b87e63abddc","url":"assets/images/mojaglobal-d4dffa5657f4e3a36d758b24cbc8715c.png"},{"revision":"34a1e27dd3d362897ed5a8f84534ed24","url":"assets/images/molecule-home-1a3ed72ca203cb5ce3252517ae391b83.png"},{"revision":"a9ff6bb8e825ca24028026a83ddb4b82","url":"assets/images/motion-layout-f3dd8784cef14d1228ece27d48dbff93.png"},{"revision":"a8af36a753bdc7fee0bde110376508a0","url":"assets/images/nanos-world-848ea262f7d1fd4647bdb5f56010f9e6.png"},{"revision":"e0dcaf7fa54f1ba58731537464d20d81","url":"assets/images/navbar-error-15eefab8e8d77aa4d605939956987164.jpg"},{"revision":"f324772852f8a10e6d1a56422e082b5b","url":"assets/images/netbootxyz-a64e25a02c1b461e2359d7eef5bbd62a.png"},{"revision":"e7d68741e2592dd3a323ffeefde002dc","url":"assets/images/netdata-ff3806c4eb51d9fcd5b81a04cfb0874c.png"},{"revision":"f69eaf07cf65957a212a15fa15183041","url":"assets/images/neutronjs-e30879629a5c6f006f95f83161a9c574.png"},{"revision":"9dd37683cb557e43d4dd3ef7f912e831","url":"assets/images/nextauthjs-9a91a904661eb9fb0ff9479eb0a50bdc.png"},{"revision":"6c26e797c43a3e405f08d5afddcafef7","url":"assets/images/nhost-18c116561bebd3b1c35d31f4e04f3819.png"},{"revision":"3641f1268637407195349e0fea37b1ac","url":"assets/images/nocalhost-f352700eb06b7cc087f54d6b18ec9bac.png"},{"revision":"e5bfd54bb9246b8aa5d703552009ea5f","url":"assets/images/nodify-2d94c3d6844c5ffe3d7693740cc36476.png"},{"revision":"4d9a96bcb9b6d36186c3cd62f555f1bd","url":"assets/images/novu-docs-795709b516fe6fa1e7bf0d7fde9f4532.png"},{"revision":"7115d26de15b60b3a3a3945c7b1cf372","url":"assets/images/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png"},{"revision":"6dcfa13e71b5a07a0fdab74af898ff14","url":"assets/images/npm-trend-1e69b5c9e35be8bd6d9ac6fbaaf313d7.png"},{"revision":"f3ffcf6e4c94dbf1e9454ba592ce1b84","url":"assets/images/orbitjs-c4d020eabba799d2274914cafdd87911.png"},{"revision":"3a39eefe628b146db49f5e0b322db2b3","url":"assets/images/ory-29e792b8488428b75de2a2bdeb5f5be1.png"},{"revision":"1b37df4c3a8a6a47b8c55ed30ee30e23","url":"assets/images/oss_logo-25c7e8934a28d0f23722c77adb6e7da4.png"},{"revision":"8d5c74b528a827b9c0d19d4edf420d37","url":"assets/images/ossinsight-27fdf73f649e5c44d0d655f901ceb4b4.png"},{"revision":"baf0086abaa5ecea36fb96bed91cd47c","url":"assets/images/outerbounds-22c08633fc68440a98a7bdd743e3ac3c.png"},{"revision":"a0d14884f2ae9b23ad26bdf012e4651f","url":"assets/images/outerbounds-7646b147b11520f295267f3637fa7a3b.png"},{"revision":"62d5f7e550e0442e23c202c912fb3c25","url":"assets/images/oxidizer-132ca8df52c58ff8e53721925a1ac6e3.png"},{"revision":"747cd3f3b7d84e03a484f756809d09e5","url":"assets/images/patrikmasiar-1465ad3dbccfbf049f39a00f1f8d7d35.png"},{"revision":"1ef97210d8ff3b99ea7d46626fa23fa4","url":"assets/images/paubox-13ff68aa3f19aa44fbbb9a9640ac87e0.png"},{"revision":"e352d54f1718f1086abed76f6d47049d","url":"assets/images/pcapplusplus-4304373194f8bf79cd755c01711de871.png"},{"revision":"2f315828ba0eea5f647417d4f26f878f","url":"assets/images/pcc-archive-eb6db480e8bd657778af020445d01fed.png"},{"revision":"2744908c4ddf45f60318f374f4fe0e54","url":"assets/images/pdfme-b768a03502951ee8d36042854f9b1efa.png"},{"revision":"d37f94073076a892d689fe5ac3fc0b8a","url":"assets/images/pearl-ui-b357477384f3a1bb5a5509d3af50cfb6.png"},{"revision":"97760cb54cddadd08a3998ce41f1cba6","url":"assets/images/peradaban-2dae938f435121541b5cfb33a0c4e624.png"},{"revision":"c53a4ac34203e87654179e648a0b107a","url":"assets/images/pglet-faf34af6fd6173177b681349c15c0f7e.png"},{"revision":"2b0b946f64ddc3d0fa2ab01ba69e0d3a","url":"assets/images/piano-analytics-1763fe333bd7fa1b8aaf66d659f73324.png"},{"revision":"3c884b6e3db01ddc0866700a49b9074d","url":"assets/images/pincman-075d0636ebf1b3dcabe153ddd8209ebf.png"},{"revision":"becbbb2e1adf5bee884aa587edf77ab3","url":"assets/images/pipeline-ui-e6c44ee572c91bf248060f35452c1a6c.png"},{"revision":"d677b4c376f6b376008cc2a7d15dae1d","url":"assets/images/plausible-bba4fd4f5446758c103bd53b19139fe2.png"},{"revision":"4adbb55f9a3877de6e53c316caf3f45b","url":"assets/images/pnpm-40ef1fb54fa919b97edd86c9474c19cc.png"},{"revision":"a32d56ae90e9bfd2c999aa62004c3aa0","url":"assets/images/postgres-ai-62eeee5eb2a6f8e0b3bacab5697cff4c.png"},{"revision":"4c03618c8c821fd0839eb5392800a53c","url":"assets/images/power-66b891fa6ae641b7a182e0ce78bad99f.png"},{"revision":"0cb61ba099fd3d4d6b7e01e0c9e420ab","url":"assets/images/pptxgenjs-32938b5f799229da13792a58c1aafb84.png"},{"revision":"5fa67ec574235c81ab46e3126e4b2819","url":"assets/images/prefs-21ae3094b7ad541f7109f2678709c84a.png"},{"revision":"373828bd7df4827c6291d45f753bc8e1","url":"assets/images/prettier-46853da19cfeb69c196d6e62210c9fe8.png"},{"revision":"cd6fdbd465e7db3ca36994e13348669e","url":"assets/images/prismatic-4bb2fd11d79a4b950f451a3dffa408b2.png"},{"revision":"2d2f7c14e3a1d173027be7ad63b8fbe2","url":"assets/images/profilo_blog_post_android_ios-695990a01bf8fa0ea8b6c2d26946cd94.png"},{"revision":"3c32e212a8e9f34d93f744af59f50bbf","url":"assets/images/profilo_blog_post_palette_website_color_picker-7fe21bbbee9aa484750e889471957135.png"},{"revision":"65854965eba4e41151face6cbbd4c115","url":"assets/images/profilo_blog_post_photoshop_color_picker-86628cde93ca147d5ed36f0e0dfa046b.png"},{"revision":"d4f8f63c470cd066ce9eed63f8d3477b","url":"assets/images/profilo_blog_post_website_final_docs-4efd3319b5bc1a33a4dde7dd785cb6a5.png"},{"revision":"ff3418371e45f9af052dae5e9babd2c9","url":"assets/images/profilo_blog_post_website_final-41123bbb4a337d3415d6a8f826362713.png"},{"revision":"9362540b5d6291a012d54fcaab1eacfd","url":"assets/images/profilo_blog_post_website_initial-2b55252c641e418f02b8bb6a5234b219.png"},{"revision":"f84e3f33e2fad0301cbe29aa53adffcb","url":"assets/images/profilo-a3b562b26730dd478d53a93d32be87f0.png"},{"revision":"73563cb47b91030d25c25c0c8e83b0eb","url":"assets/images/pwa_reload-6af462b35d0ed752c44ad0899559bedf.gif"},{"revision":"cc8c9a2a51088d4e4f29ff4419bf7a5d","url":"assets/images/pyre-557a96574bd9b4fbc250fba9055abbf0.png"},{"revision":"095fb5f18ef709b67a330697e3f44b22","url":"assets/images/qa-board-156dfd0f786318d503da4fe6e4efb6d3.png"},{"revision":"9e7123451944b879f4a8217a7fd5003e","url":"assets/images/quantcdn-fa9214776ce3c75ac734ce92a1d7d261.png"},{"revision":"f12c143327b9bf285b13d6709893b681","url":"assets/images/quickwit-2667dc4e9b7db24094069fc38a231a53.png"},{"revision":"e7ed5bfd802f9586edba575d0def10d7","url":"assets/images/quickwit-39a0d73e3a8684da7c2ed546e587f919.png"},{"revision":"265096bcc9cfb8dce7705423068dbd34","url":"assets/images/rainbond-72969162e27c2f6e92c4cf3b61c229bb.png"},{"revision":"e4cb86e5de12d6eeacf1eadcc5005c53","url":"assets/images/raspisuite-df5b41d040c9b81367e5a674aef5e97b.png"},{"revision":"8e69ce5fcee471450152e7807b8753a1","url":"assets/images/react-chat-elements-7df4a41317c9034210d9904daffec051.png"},{"revision":"d9d5d0a44cb1607ebd4815db3fbb3769","url":"assets/images/react-complex-tree-647440410604aceff487f74319bb1ed5.png"},{"revision":"859df8dde47d356b7647bd3db38080d7","url":"assets/images/react-leaflet-d24b5e7ed7955e2e90c12b3c1c01f831.png"},{"revision":"0b7789ffd202ef5a1f467cc1190d6039","url":"assets/images/react-native-0ff608d6a6df9df802441209007884ef.png"},{"revision":"c225ca1d84771787e8b98b6c7c38fe9a","url":"assets/images/react-native-8ad8e938da0b07450993aa99d2faab6a.png"},{"revision":"266703eb0df2cb667dad19fd7dcf6e38","url":"assets/images/react-native-elements-7f03216e4f2b74940c255829df5b0cb5.png"},{"revision":"2fb3223c47ba95ec3615dd63e5943fd5","url":"assets/images/react-native-ios-kit-2de2abfaeb8e439755e88659262f676a.png"},{"revision":"24222d7c6ce1a8acc20759379eef8940","url":"assets/images/react-native-reanimated-7e6c907fb7849ce0b1cbe5088ec6e7da.png"},{"revision":"55c7e94ceb6bd1eee4c0600263d5ddaa","url":"assets/images/react-native-screenshot-d5ace12ce89fe59dc14ac25859685b01.png"},{"revision":"f2b8d4755cf18bc8da66fa4ffbcddf4f","url":"assets/images/react-native-testing-library-41dfcfd2c123284cc58559da96568366.png"},{"revision":"9484441b63160be3cfeaf6c1074059a9","url":"assets/images/react-navigation-d65fb79941df2ef11ff6e15e8a79a49c.png"},{"revision":"26c722059935cf55293ae537baea4eed","url":"assets/images/react-navigation-dfac2d90822bad7e092f848322b50da6.png"},{"revision":"2af004403ab005c82de221003d3f0d63","url":"assets/images/react-redux-621afc1ae6fb98889ec3d2e5b1b30386.png"},{"revision":"654e4cb91cc8f4fdcb522f0fb1b9c49e","url":"assets/images/reactnative-496b7bf0251a82f21adfa730dec8178d.png"},{"revision":"55f3455ab72cfa262436848be97b4e93","url":"assets/images/reactnative-aria-c5ffe66ddb8b0b937fa5672b17258444.png"},{"revision":"87b235219b0aec8605771f8d2a92e0e4","url":"assets/images/reactnativeboilerplate-4f4bc9381d8bcf3fd21fab2c61033693.png"},{"revision":"b8d70301075bac9c5090aa22b46ba89e","url":"assets/images/realtime-apps-workshop-f2c599f726604e5a45ad5dad61a056b8.png"},{"revision":"3971973182822bd3d7d55db222d8eb96","url":"assets/images/red-gradient-9c21cad5fb514874a59c4d9f321017e4.png"},{"revision":"1a86525a5747db99ac2974ae966004e6","url":"assets/images/reddit-image-fetcher-c3078aeaa8dc2606f25e23140d7853c4.png"},{"revision":"8e5a68e77b9cdaff3ecea9efd6c58b16","url":"assets/images/redis-developer-13b1fadb54b0313a8451f4b5ea28ef17.png"},{"revision":"ae416fb47487866c167f83265d24f284","url":"assets/images/redocusaurus-5cf08a76be6f85090544417b82986cfb.png"},{"revision":"52215e027a9427a9d70ca08f22133e0c","url":"assets/images/redux-cool-191fc671da752fe4d7732b4ee07cc26d.png"},{"revision":"82899ff318ab1f96d906b76637ee4792","url":"assets/images/redux-de07d44cea8a2046a5d4896e362cd122.png"},{"revision":"7c53a1d7ea214c529b8a346986f2f12f","url":"assets/images/redwood-c3155187911b62428e0cc1e8b662de76.png"},{"revision":"24d3123b2a623ccbac86c82c256884fa","url":"assets/images/refine-3c43b51804bfa5fb95fffacf22ea032e.png"},{"revision":"7109027aa3aef13330a0bd9070803616","url":"assets/images/registry.stackql.io-18521b3de70bccbf132c9e013acc147b.png"},{"revision":"712ba73fb94a0a7926a1575bf943f331","url":"assets/images/relay-e78bfc34d66471737d24a2c07d2afc7c.png"},{"revision":"b55cfd4b8511cdfcc8ae3fd65352834c","url":"assets/images/rematch-54259ce6777659338d16e722e04bc833.png"},{"revision":"74bcfcad8196b9f46961f87f2f63a059","url":"assets/images/remirror-9738e84d977f986daccff3a332b03244.png"},{"revision":"04b3ced01c3cdc95216d15f8e9946a85","url":"assets/images/remotion-0918d7c0bcd84657c38e3569fc2ff4a7.png"},{"revision":"b81262883b3bb2705a7aa35d3b032fd5","url":"assets/images/repeaterjs-41892c33996d6ec919704baec6f61649.png"},{"revision":"2deef954c1e8fa9bbad1c81f0eb725f4","url":"assets/images/replicad-23f2fcbfeab2b56235784f38c21f08bd.png"},{"revision":"362b65aaa969b0849ec70dcf1ed8abed","url":"assets/images/rising-stars-56326450d25b95f221f56db3b352c724.png"},{"revision":"8627181d214209c1bf23357a676bc2c0","url":"assets/images/rivalis-6e7ad63406563e1f4c34fb96a69f59c5.png"},{"revision":"2e23c4d716efe0daefe060ecf7dbc263","url":"assets/images/rnrh-9c3d6208718ace8c44e0fc7f1d1bf62d.png"},{"revision":"0b9ad21911838f30152fd7df6176586f","url":"assets/images/rooks-61341aa044b6c9deaac7b6655c58d1a0.png"},{"revision":"8b084442af37ed00f38b92b0447b0aff","url":"assets/images/rsocket-0f5d35731269c25f4e44e18c7bedeb9d.png"},{"revision":"71d21e2cd52d1bb1a57fb88c26e7a652","url":"assets/images/runiac-bf47ea65a9ea2ba58dfd5a99e6dd2eea.png"},{"revision":"2388066f50488f673c65f4a877dd7a0a","url":"assets/images/runlet-3496c72227777b92f951fec658d973ce.png"},{"revision":"a7cdf68a59984f26757453756719cb57","url":"assets/images/sado0823-0afdc16bb0cb84b06e118583f12608ff.png"},{"revision":"45e0a788daf969407c91c566144756a0","url":"assets/images/saleor-b6fb358e4d4113c46c58cf537d392d0c.png"},{"revision":"199df2bb2d267b287fae35a6abb1b5bf","url":"assets/images/sap-cloud-aa7a46561ca47765dfeefbed7b5e8c4e.png"},{"revision":"ed15d05cb29e7aeb5390cf6b41a2c8b6","url":"assets/images/sapcloudsdk-e2712b3e22fb99796c966d43064f4a31.png"},{"revision":"df011de6a90e316dc29ecb54b7661957","url":"assets/images/sapphire-13f70835b2e57d3cec0b5742b123fc6a.png"},{"revision":"4c2908243c3a9a42f39f714f9c8ea89b","url":"assets/images/sass-fairy-0ef83bdb7cd5fcd992272f4fa4eaab96.png"},{"revision":"fa3d8f0c3aca892991e89af8666381c6","url":"assets/images/sciwp-42b422510e1fcb176fd90b5ff6dce921.png"},{"revision":"4b9b1aa5368f93f62ccd0982c3cab72c","url":"assets/images/Seaography-c06aeb6ba31d780a213d5ec31a9c4128.png"},{"revision":"7ae0a07535ab247a9b66543856c1eb32","url":"assets/images/SeaORM-3e87a0392ff6ae011abfcdfdbb913ba6.png"},{"revision":"f0469df15643dfa4eaa412362c94c78e","url":"assets/images/SeaQL-blog-72fb6e4efdefff425536cce42830e881.png"},{"revision":"568c15ab8d5de24c130ddcb532cb5901","url":"assets/images/search-848f1f1b9eb0d1b710e1d1dec50fb84a.png"},{"revision":"233ebf02cdf629e4b694c8d630516720","url":"assets/images/sequence-0f77ed55c6ff3789e71720e0f9021cef.png"},{"revision":"0d2155e595a372767f9859cf80282a1e","url":"assets/images/seven-innovation-base-9dcd026498d069c401ad1cd5782e65ad.png"},{"revision":"13f32c22abe5399511586d147d777abf","url":"assets/images/shabados-b24bc164aec49d234240983a2677bcbd.png"},{"revision":"ec81b31db1c49b548983b6eed58566fd","url":"assets/images/shiki-twoslash-b74271684fa819a0175595409b2f323b.png"},{"revision":"b11186166ab9b7f8d4555313675c8895","url":"assets/images/shotstack-ee6e9c8c3835e6a7258ce9bf286050fe.png"},{"revision":"c18cd3489bcae39124f77774a18a8ae2","url":"assets/images/sicope-model-35900076ed6255f96ff4ed39be632f87.png"},{"revision":"0db87a2121af482e43505c007a6dfb82","url":"assets/images/sidebar-item-description-f38981b17f486bc09fb811c6992ef668.jpg"},{"revision":"d424e461794874936219ecb66b4c764b","url":"assets/images/signoz-b448527937937512001622ad21217fa7.png"},{"revision":"5d3e2e75926725e6d6b788fc9a8c7391","url":"assets/images/single-spa-e274c21435f19c8949701726e48cce43.png"},{"revision":"bc92779f145e2eeba8d49a40d9dd0369","url":"assets/images/slash-introducing-411a16dd05086935b8e9ddae38ae9b45.svg"},{"revision":"5dd3441f663aa8b857586462335662af","url":"assets/images/slash-plushies-71b7a47477442dfcf890627669aba97d.jpg"},{"revision":"9eb1d7ae10e8e9ad697bb13d36452891","url":"assets/images/slash-up-and-running-1c1f83f3064dcd56be41632c51be62ac.png"},{"revision":"d078d0e351f934f8838ca13d320a6a2b","url":"assets/images/slorber-ec4d8481627a744baf012e1c00f93e32.png"},{"revision":"7052032c1cae9d4c9d0f941976a0410c","url":"assets/images/smart-docs-91b0d0ab64803422bb0afc8ee67bc19a.png"},{"revision":"00675904aa857a22e57939fd9a2c73a0","url":"assets/images/smartcookieweb-22333d1f3972f2e52dc778981b4cb66a.png"},{"revision":"f404bb6d5641e427491f2a8f9f1c0ab3","url":"assets/images/smashgg-028ab1ea8e006054c550a852565f5045.png"},{"revision":"c230b3d2b9fb4f77d6bb06f348796b77","url":"assets/images/snapchat-1f1b7e180be3c3a597c755f80b26de44.png"},{"revision":"fc34e7104d6ed2ff2b4f878a4b80b87d","url":"assets/images/social-card-0662a6f419d0032829f99915ccf8918b.png"},{"revision":"dd0940624ad619cc0bc4105c9ee0d1b9","url":"assets/images/social-card-1c688c53b51bdaa6e15ae532bf756276.png"},{"revision":"0ff95c9363fe3c5c5abde65e53c55c13","url":"assets/images/social-card-3239a62bb56c9529ff255bc2c72e94f6.png"},{"revision":"6f1119285164a1218c33d820bd814b0b","url":"assets/images/social-card-402517ac2205718a22585e627fe1351c.png"},{"revision":"f6e96304dbc77e4eea82864f22f4ba4b","url":"assets/images/social-card-414bbe5147ecc177bbe8d858616709c5.png"},{"revision":"6e8b6764214e3e31199a2b4081a66775","url":"assets/images/social-card-736cfe55fc7bba07204176852d67c0d5.png"},{"revision":"2b518dfc63c20a94a602ed20fa0d3987","url":"assets/images/social-card-75819f68ecbb579fe176843bb2e3df82.png"},{"revision":"3eb892363e0b19d3ba1fe1bc6d3f7597","url":"assets/images/social-card-7e038d19ea67c686e90e1f599f7256d0.png"},{"revision":"d6c264b59fb3efd661420eab2be1b383","url":"assets/images/social-card-8ca15c1adaeb77ca302178575136a0b6.png"},{"revision":"4aecf4914a4572d97df5acea517e2084","url":"assets/images/social-card-8dc2413b4f9e86328bf77575e91171d7.png"},{"revision":"e896ae5f2f6bb82bf2fce3ee2f7fdc7e","url":"assets/images/social-card-99fd18bd61fee0f631b8c820ef873dd5.png"},{"revision":"e975238f3ff408ff3961ba4a2b2fe661","url":"assets/images/social-card-e1b6e0c51be29d4ab2d4c966d220410c.png"},{"revision":"7ba9a88b651ac321c371ed7d3033a4b4","url":"assets/images/social-embed-3fe56565340aa4f51cbff3e26b6a054e.png"},{"revision":"c22c1f0d621b76aef0fd8fd284e5c5da","url":"assets/images/sodaforsparc-28010777385591077f37694ec7eeebb8.png"},{"revision":"eaf2bfd11ddc87994fecc5ab797274fc","url":"assets/images/solana-9cd1c0b40cf349f85612e9d9d25d724b.png"},{"revision":"87323a1f9e6543bac48892667efb21b4","url":"assets/images/someengineering-a56edbd4649fa1e855c2e8417f9b6dbe.png"},{"revision":"e1ec1fc5bc37da95952ea5713aa2e108","url":"assets/images/spicetify-c2a1450fb9fa6a71ca6de3c097edda4d.png"},{"revision":"803224e86e194dc6dbdbe641d0a6c54a","url":"assets/images/spotifyapi-net-f425a4c62750b6bf09b03cf4b77e9d3d.png"},{"revision":"59d4eb3d845fa758f94faa83fc6ffd75","url":"assets/images/sqlframes_docusaurus-e018ff7f1e38d38e84e79869db992344.png"},{"revision":"68c22e5e7bee66dcfbba350d8d9e7b8f","url":"assets/images/stackblitz-9793041c6a300ef757b0656aadb9df67.png"},{"revision":"aa165e33cf673346c7826fcb3fd98466","url":"assets/images/stackblitz-b66b6f6647fa6f0af38e9923fb2eb422.png"},{"revision":"0e5cc9b2345baeb0e53b883be8635536","url":"assets/images/stackql-013249abe4d6518fc01545c9be6419ed.png"},{"revision":"fd58d01593f56e351aa924cab3d120cc","url":"assets/images/star-history-72ae014f60d05445753e9f690e41d347.png"},{"revision":"0f6d4bbb1c64099374a9e64b1f848a69","url":"assets/images/star-history-c7ba492b822fed1336d08fe449f87840.png"},{"revision":"b97fc3e9b41ba6c88d6e2dc052aa9c78","url":"assets/images/StarfishQL-06774f3479ba96b0f6fc8341214439d3.png"},{"revision":"be04f696350cec736c436b2587be4aa4","url":"assets/images/stryker-mutator-148105c0a7f5487eaf3e22c332a2d24d.png"},{"revision":"7cf68721177249988fa5e7851815f641","url":"assets/images/stylable-a0a7f786abbf6e114a91b0084c78733d.png"},{"revision":"3b213982a105fdb2006e30fe976f6675","url":"assets/images/supabase-8f064f9083725077882d3ce18d61d52c.png"},{"revision":"a57c0f30fbb0fce5d431daf0e84cd81b","url":"assets/images/svix-934c92fe3bfce3acac594b1b58b5f6d0.png"},{"revision":"26a6f57e0889617c7bf488d0b16a1327","url":"assets/images/sweetcode-7abd771cee7847ea1f45a6cf47ded1fe.png"},{"revision":"d863bf9ac9ac79ddba2066f675c2740b","url":"assets/images/synergies-62b15424f661b0e0649afb3c75092703.png"},{"revision":"dd3c6cd0fa366b1b2de72f542876f85e","url":"assets/images/t-regx-a6af9559664740533c8f807213095c14.png"},{"revision":"851b52c9d6a019067006679015ccaa2b","url":"assets/images/talentbrick-36480459fa84bc1d9401417b357ff2ec.png"},{"revision":"50604f278e203a7e1e4e488283d13aaa","url":"assets/images/tamalwebsite-45a6f8c87f587141910d97f1598f3cbc.png"},{"revision":"2f80f1493396d3b9b4766059bd83b19e","url":"assets/images/tasit-16443c368300a6ddc8bed7db558a90ad.png"},{"revision":"fcf5b965460d770fd1e08f42822ce1b3","url":"assets/images/tauri-10c3458b9d3fd5bf464d0f9cea0842bf.png"},{"revision":"daa54b77ff03e0b0157460ab1caaeaff","url":"assets/images/tauri-5132174b86954b9f0a73225ba01ee1df.png"},{"revision":"63027449848dfe4ecbdf290cbce38556","url":"assets/images/techharvesting-bd0feb0fb9bc76242c7d548b0c970fb8.png"},{"revision":"693242696bd3640ae35b5ffded1510b6","url":"assets/images/testing-library-404b89880d6af98a81ca2877f35a628d.png"},{"revision":"6279d0b2be6ca11ace850cbd27bcc2cd","url":"assets/images/the-diff-4ba6bfd274dccc6773fb4760069809c5.png"},{"revision":"444927bf4f0272119f043c838847398b","url":"assets/images/thumbnail-dbb46fec970f4431a6846603224dd2fe.png"},{"revision":"6ca36fd4a18d0cbbad128715ae92a277","url":"assets/images/tidb-community-book-94db820c651d010ac92cb8850a3db0c4.png"},{"revision":"915d90ba837d4ffef1a6484bf387a9b8","url":"assets/images/tinaeldevresse-3ff103efb34064554d15abc4480be1ed.png"},{"revision":"9620c332afe9c8a4c05e5dbccbfc3f3a","url":"assets/images/tooljet-7dfcac00aa867e747272aa2a236e7c95.png"},{"revision":"ad95d89d99d51bd371d211f053ffbce5","url":"assets/images/tremor-ed91b8cf126482731f01a12a474a96c4.png"},{"revision":"02de453e6d4ec2258652b71f52bd3b6a","url":"assets/images/trend-2735e446f67fbcaa0811d103588e9b82.png"},{"revision":"e4a9eec316ceff8a46112e05f82e2ea8","url":"assets/images/trpgengine-92b0322bd80d87fac3d9b51916cd4acb.png"},{"revision":"c8279dcbbcb476ee343c984da3665bef","url":"assets/images/tuist-ceb1341b8885fe6634cd5fb39aaf8a29.png"},{"revision":"59d9ff1bea14cceeb8cc75f46dd1897e","url":"assets/images/uniforms-f411ddb301d0e53b8663421ee5bc6f0c.png"},{"revision":"30544ac2a61ce9a71f3f803d3e2a7b04","url":"assets/images/unleash-745ff545c0eb37ae7db8b0e23ef38e35.png"},{"revision":"36fb4384afc0e57084163ae8a0ff2627","url":"assets/images/unmand-70f3f61a911ce5f5f2b031095de23763.png"},{"revision":"c5c8d0e68f1dd4e44b141b7344295bb6","url":"assets/images/verdaccio-2d1fe5ff04df891b4859f750c4b414aa.png"},{"revision":"d2595e09fde4012ef18bd50bd8ea1a26","url":"assets/images/verida-developers-de3bcd387b596a788f91837ad6fb29ea.png"},{"revision":"6fda87d6c098e00a8c33e27a7d71cd97","url":"assets/images/virtual-photography-kit-1300776fd8ee190bc07ee1c375091d17.png"},{"revision":"00d22b227a972a851ceb2fdf76900c70","url":"assets/images/vital-0673002c14e6811e4b34244afbb62198.png"},{"revision":"f25c63e2fc543c401bde98f0408a521a","url":"assets/images/vue-nodegui-55334a3195ffe6875e53f48ccef37a43.png"},{"revision":"83a07445de1e05968108d191cd5ccc17","url":"assets/images/warrant-3a9c703456eb126062cf73767ad1bc89.png"},{"revision":"5ba1909b1065598713fffb5cd313a4fb","url":"assets/images/wasp-3f2c633044555e7d4093a8c91fc3cba6.png"},{"revision":"1a153a5133ff5b7ce173b50d8f2926f3","url":"assets/images/webdriverio-97a558409647cf182936d22a25d3c9ba.png"},{"revision":"b8373e72ea15bf5f7b6490288936bb0f","url":"assets/images/webiny-c35aae37a0b44959b343ee6907295c91.png"},{"revision":"d3a4f851df577dee4cd0affd613edd5c","url":"assets/images/whirlcodes-a8ef206eda50c3a3d1ed53f5be7706d6.png"},{"revision":"932b0c3ee0a1f037affa4fcc98f40022","url":"assets/images/woodpecker-826cbf901906356f6c8d4ca956e79de7.png"},{"revision":"3eefb4054f059bf67e1edb57d9d1cf6d","url":"assets/images/yeecord-422b5ca83d8da85688cc49e8d18dbcfe.png"},{"revision":"8b2aff29f6d091f392d080012e455625","url":"assets/images/zowe-6280912723c23fae74c35bf25e057dfe.png"},{"revision":"dcc79ffd4b59fb47898ef4fd278fb1f2","url":"assets/images/zxuqian-5775d0e563b7a80f3659a6f8ade564d2.png"},{"revision":"4e0fcc29e60361c13b8776a262e9501e","url":"assets/images/图片-c3c014b00b204c4fec2ad5e402e5521d.png"},{"revision":"d6198c91a2aa7825c36adffb60fb9829","url":"img/architecture.png"},{"revision":"0bbe7222108ce6c1647c8475aedf5e17","url":"img/baseUrlIssueBanner.png"},{"revision":"bf35793c3ece40b7e23207d0712a1e82","url":"img/blog/2020-recap/datagit-rtl-screenshot.png"},{"revision":"6e75344d1fc783d20374fac33af46f0d","url":"img/blog/2020-recap/docusaurus-npm-trends.png"},{"revision":"192a6a160f31b1689a4c6233bdbbb803","url":"img/blog/2020-recap/docusaurus-plushie-banner.jpeg"},{"revision":"9f3b75fcb8ced8b9f754d736cb094e2f","url":"img/blog/2020-recap/jest-screenshot.png"},{"revision":"55c7e94ceb6bd1eee4c0600263d5ddaa","url":"img/blog/2020-recap/react-native-screenshot.png"},{"revision":"434685293307dd9635102614eeac5116","url":"img/blog/2021-03-09-releasing-docusaurus-i18n/datagit.png"},{"revision":"f4abb0822162ab733564ca61477edc0e","url":"img/blog/2021-03-09-releasing-docusaurus-i18n/jest.png"},{"revision":"7c53a1d7ea214c529b8a346986f2f12f","url":"img/blog/2021-03-09-releasing-docusaurus-i18n/redwood.png"},{"revision":"b70c0c4880003d2e245741841431c4aa","url":"img/blog/2021-03-09-releasing-docusaurus-i18n/social-card.png"},{"revision":"0f361b02b26a31a56f640a4fdc717e61","url":"img/crowdin/crowdin-create-project.png"},{"revision":"753b7ed11c6020dcda67fd46ca360323","url":"img/crowdin/crowdin-download-translations-warning.png"},{"revision":"baf0b3601c3a04cc7bafaef23e7fec2e","url":"img/crowdin/crowdin-files-rename.png"},{"revision":"669941dc7be19f55703f6dd474705c8e","url":"img/crowdin/crowdin-french-translations.png"},{"revision":"951f4b2feb2f35a1944cd46b6425ecfe","url":"img/crowdin/crowdin-hide-string.png"},{"revision":"1bc6c6677e1328c16a151396b632d3d9","url":"img/crowdin/crowdin-settings-duplicate-strings.png"},{"revision":"5f8617f4a69886af9ae1064e5e1736df","url":"img/crowdin/crowdin-source-files.png"},{"revision":"978ea4c7ed3ebba8bc235b8e25db0bb5","url":"img/crowdin/crowdin-translate-json.png"},{"revision":"8b6f59757f6feb348fbff25697f8e7a3","url":"img/crowdin/crowdin-translate-markdown.png"},{"revision":"91db58fc5cbde3f9e0e6b3272e22d613","url":"img/crowdin/crowdin-upload-sources-cli.png"},{"revision":"2bfe7459caa285ca5ffc6a055b800e11","url":"img/docsearch-troubleshoot-index-facets.jpg"},{"revision":"a805a9fcd13a37224fd0e698bd87e8f4","url":"img/docusaurus_keytar.svg"},{"revision":"2e8bc5f517fee5f4729e34cae90c1496","url":"img/docusaurus_speed.svg"},{"revision":"4e0fcc29e60361c13b8776a262e9501e","url":"img/docusaurus-2020-recap.png"},{"revision":"56433861af226df518c403e8dd31236b","url":"img/docusaurus-slash-first-birthday.svg"},{"revision":"000de4a48405bd21b7eec1abc07ede6c","url":"img/docusaurus-social-card.jpg"},{"revision":"9e588aaec262d7ced968d64d79cfe954","url":"img/docusaurus-social-card.png"},{"revision":"4343e07bf942aefb5f334501958fbc0e","url":"img/docusaurus.ico"},{"revision":"7fa1a026116afe175cae818030d4ffc4","url":"img/docusaurus.png"},{"revision":"106e45640bf6465e840987f8d0809cac","url":"img/docusaurus.svg"},{"revision":"a4b8ed088b3dbd9c0476a54933bb93d9","url":"img/endi.jpg"},{"revision":"3fd5551e522a6943212582d763fe5639","url":"img/favicon/favicon.ico"},{"revision":"c60b6018fcccb357afa3b4bbed2b10c4","url":"img/icons/icon-128x128.png"},{"revision":"906fe38dda50b3b65a81774402e8ae9c","url":"img/icons/icon-144x144.png"},{"revision":"6334a8eb3a1e55bca146642616fd5525","url":"img/icons/icon-152x152.png"},{"revision":"4543f267682e47ac835827b5110392cd","url":"img/icons/icon-192x192.png"},{"revision":"ef0a2b029dac6f6fc810dead6ee124c0","url":"img/icons/icon-384x384.png"},{"revision":"ef0a2b029dac6f6fc810dead6ee124c0","url":"img/icons/icon-512x512.png"},{"revision":"d2913c26e03374484916d79f3fe2542b","url":"img/icons/icon-72x72.png"},{"revision":"453824f187bec676019a60655cf1e3a1","url":"img/icons/icon-96x96.png"},{"revision":"ead57c7bad412a5924924e6effb2e946","url":"img/meta_opensource_logo_negative.svg"},{"revision":"b7949e339b306198b34e4fe418a456c0","url":"img/meta_opensource_logo.svg"},{"revision":"5b357df6113b6da1bbe3d8a0feb55bc3","url":"img/playgrounds/codesandbox.png"},{"revision":"68c22e5e7bee66dcfbba350d8d9e7b8f","url":"img/playgrounds/stackblitz.png"},{"revision":"2d2f7c14e3a1d173027be7ad63b8fbe2","url":"img/profilo_blog_post_android_ios.png"},{"revision":"3c32e212a8e9f34d93f744af59f50bbf","url":"img/profilo_blog_post_palette_website_color_picker.png"},{"revision":"65854965eba4e41151face6cbbd4c115","url":"img/profilo_blog_post_photoshop_color_picker.png"},{"revision":"d4f8f63c470cd066ce9eed63f8d3477b","url":"img/profilo_blog_post_website_final_docs.png"},{"revision":"ff3418371e45f9af052dae5e9babd2c9","url":"img/profilo_blog_post_website_final.png"},{"revision":"9362540b5d6291a012d54fcaab1eacfd","url":"img/profilo_blog_post_website_initial.png"},{"revision":"73563cb47b91030d25c25c0c8e83b0eb","url":"img/pwa_reload.gif"},{"revision":"9d293fc87a9575062d45e5358569fa07","url":"img/slash-birth.png"},{"revision":"d7d063e66cf46deb675c9afa30265744","url":"img/slash-introducing.png"},{"revision":"bc92779f145e2eeba8d49a40d9dd0369","url":"img/slash-introducing.svg"},{"revision":"9eb1d7ae10e8e9ad697bb13d36452891","url":"img/slash-up-and-running.png"},{"revision":"397636b910908dab85944d2fb5714618","url":"img/undraw_algolia.svg"},{"revision":"d38f4af4f9209f38bd3239eb17e68697","url":"img/undraw_around_the_world.svg"},{"revision":"5c577a3dc9d74e0141cdba880aab6910","url":"img/undraw_react.svg"},{"revision":"38b2285b7787be6a138ad112cee58c4d","url":"img/undraw_typewriter.svg"},{"revision":"34efec9169d6d38a68d416a0973859a3","url":"img/undraw_version_control.svg"},{"revision":"7fa1a026116afe175cae818030d4ffc4","url":"新控制器空间/图片.png"},{"revision":"66c678209ce93b6e2b583f02ce41529e","url":"katex/fonts/KaTeX_AMS-Regular.woff2"},{"revision":"a9e9b0953b078cd40f5e19ef4face6fc","url":"katex/fonts/KaTeX_Caligraphic-Bold.woff2"},{"revision":"08d95d99bf4a2b2dc7a876653857f154","url":"katex/fonts/KaTeX_Caligraphic-Regular.woff2"},{"revision":"796f3797cdf36fcaea18c3070a608378","url":"katex/fonts/KaTeX_Fraktur-Bold.woff2"},{"revision":"f9e6a99f4a543b7d6cad1efb6cf1e4b1","url":"katex/fonts/KaTeX_Fraktur-Regular.woff2"},{"revision":"9d335148881f622c33d0dee1b6958297","url":"katex/fonts/KaTeX_Main-Bold.woff2"},{"revision":"d873734390c716d6e18ff3f71ac6eb8b","url":"katex/fonts/KaTeX_Main-BoldItalic.woff2"},{"revision":"652970624cde999882102fa2b6a8871f","url":"katex/fonts/KaTeX_Main-Italic.woff2"},{"revision":"f8a7f19f45060f7a177314855b8c7aa3","url":"katex/fonts/KaTeX_Main-Regular.woff2"},{"revision":"f2271b960a10db25b83df5d10503f3b7","url":"katex/fonts/KaTeX_Math-BoldItalic.woff2"},{"revision":"8fefb1fb32a37e23a9d5cb85852be969","url":"katex/fonts/KaTeX_Math-Italic.woff2"},{"revision":"ad546b4719bcf690a3604944b90b7e42","url":"katex/fonts/KaTeX_SansSerif-Bold.woff2"},{"revision":"e934cbc86e2d59ceaf04102c43dc0b50","url":"katex/fonts/KaTeX_SansSerif-Italic.woff2"},{"revision":"1ac3ed6ebe34e473519ca1da86f7a384","url":"katex/fonts/KaTeX_SansSerif-Regular.woff2"},{"revision":"1b3161eb8cc67462d6e8c2fb96c68507","url":"katex/fonts/KaTeX_Script-Regular.woff2"},{"revision":"82ef26dc680ba60d884e051c73d9a42d","url":"katex/fonts/KaTeX_Size1-Regular.woff2"},{"revision":"95a1da914c20455a07b7c9e2dcf2836d","url":"katex/fonts/KaTeX_Size2-Regular.woff2"},{"revision":"9108a400f4787cffdcc3a3b813401e6a","url":"katex/fonts/KaTeX_Size3-Regular.woff2"},{"revision":"61522cd3d9043622e235ab57762754f2","url":"katex/fonts/KaTeX_Size4-Regular.woff2"},{"revision":"b8b8393d2e65fcebda5fa99fa3264f41","url":"katex/fonts/KaTeX_Typewriter-Regular.woff2"}],a=new u({fallbackToNetwork:!0});e.offlineMode&&(a.addToCacheList(t),e.debug&&console.log("[Docusaurus-PWA][SW]: addToCacheList",{precacheManifest:t})),await async function(e){{const t=await s.e(446).then(s.bind(s,446));"function"==typeof t.default?t.default(e):e.debug&&console.warn("[Docusaurus-PWA][SW]: swCustom should have a default export function")}}(e),self.addEventListener("install",(t=>{e.debug&&console.log("[Docusaurus-PWA][SW]: install event",{event:t}),t.waitUntil(a.install(t))})),self.addEventListener("activate",(t=>{e.debug&&console.log("[Docusaurus-PWA][SW]: activate event",{event:t}),t.waitUntil(a.activate(t))})),self.addEventListener("fetch",(async t=>{if(e.offlineMode){const s=t.request.url,n=function(e){const t=new URL(e,self.location.href);return t.origin!==self.location.origin?[]:(t.search="",t.hash="",[t.href,`${t.href}${t.pathname.endsWith("/")?"":"/"}index.html`])}(s);for(const r of n){const i=a.getCacheKeyForURL(r);if(i){const a=caches.match(i);e.debug&&console.log("[Docusaurus-PWA][SW]: serving cached asset",{requestURL:s,possibleURL:r,possibleURLs:n,cacheKey:i,cachedResponse:a}),t.respondWith(a);break}}}})),self.addEventListener("message",(async t=>{var s;e.debug&&console.log("[Docusaurus-PWA][SW]: message event",{event:t});"SKIP_WAITING"===(null===(s=t.data)||void 0===s?void 0:s.type)&&self.skipWaiting()}))})()})()})(); \ No newline at end of file diff --git a/tests.html b/tests.html new file mode 100644 index 0000000000..e7331aad35 --- /dev/null +++ b/tests.html @@ -0,0 +1,64 @@ + + + + + +Tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/tests.html.html b/tests.html.html new file mode 100644 index 0000000000..14b7e51aae --- /dev/null +++ b/tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog.html b/tests/blog.html new file mode 100644 index 0000000000..257bfbe708 --- /dev/null +++ b/tests/blog.html @@ -0,0 +1,61 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog.html.html b/tests/blog.html.html new file mode 100644 index 0000000000..d7477fa807 --- /dev/null +++ b/tests/blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2020/08/03/demo/second-blog-intro.html b/tests/blog/2020/08/03/demo/second-blog-intro.html new file mode 100644 index 0000000000..60cde73be9 --- /dev/null +++ b/tests/blog/2020/08/03/demo/second-blog-intro.html @@ -0,0 +1,60 @@ + + + + + +Using twice the blog plugin | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Using twice the blog plugin

· 7 min read
Sebastien Lorber
Docusaurus maintainer

Did you know you can use multiple instances of the same plugin?

+ +
tip

Using twice the blog plugin permits you to create more than one blog on the same Docusaurus website!

+ + \ No newline at end of file diff --git a/tests/blog/2020/08/03/demo/second-blog-intro.html.html b/tests/blog/2020/08/03/demo/second-blog-intro.html.html new file mode 100644 index 0000000000..7d168916dd --- /dev/null +++ b/tests/blog/2020/08/03/demo/second-blog-intro.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/08/21/blog-post-toc-tests.html b/tests/blog/2021/08/21/blog-post-toc-tests.html new file mode 100644 index 0000000000..8faf390284 --- /dev/null +++ b/tests/blog/2021/08/21/blog-post-toc-tests.html @@ -0,0 +1,93 @@ + + + + + +Blog TOC FrontMatter tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Blog TOC FrontMatter tests

· 2 min read
Sebastien Lorber
Docusaurus maintainer
+ +

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/blog/2021/08/21/blog-post-toc-tests.html.html b/tests/blog/2021/08/21/blog-post-toc-tests.html.html new file mode 100644 index 0000000000..fa1f58400b --- /dev/null +++ b/tests/blog/2021/08/21/blog-post-toc-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/08/22/no-author.html b/tests/blog/2021/08/22/no-author.html new file mode 100644 index 0000000000..3df554e913 --- /dev/null +++ b/tests/blog/2021/08/22/no-author.html @@ -0,0 +1,60 @@ + + + + + +Hmmm! | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/08/22/no-author.html.html b/tests/blog/2021/08/22/no-author.html.html new file mode 100644 index 0000000000..02ba4fe952 --- /dev/null +++ b/tests/blog/2021/08/22/no-author.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/08/23/multiple-authors.html b/tests/blog/2021/08/23/multiple-authors.html new file mode 100644 index 0000000000..929d9d9df1 --- /dev/null +++ b/tests/blog/2021/08/23/multiple-authors.html @@ -0,0 +1,58 @@ + + + + + +Multiple authors | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/08/23/multiple-authors.html.html b/tests/blog/2021/08/23/multiple-authors.html.html new file mode 100644 index 0000000000..da309b8856 --- /dev/null +++ b/tests/blog/2021/08/23/multiple-authors.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/09/13/dup-title.html b/tests/blog/2021/09/13/dup-title.html new file mode 100644 index 0000000000..d4592b7857 --- /dev/null +++ b/tests/blog/2021/09/13/dup-title.html @@ -0,0 +1,58 @@ + + + + + +Post with duplicate title | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/09/13/dup-title.html.html b/tests/blog/2021/09/13/dup-title.html.html new file mode 100644 index 0000000000..6a42330346 --- /dev/null +++ b/tests/blog/2021/09/13/dup-title.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html b/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html new file mode 100644 index 0000000000..1d8860cf05 --- /dev/null +++ b/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html @@ -0,0 +1,70 @@ + + + + + +Blog post MDX Feed tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html.html b/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html.html new file mode 100644 index 0000000000..8a6ec9cec7 --- /dev/null +++ b/tests/blog/2021/10/07/blog-post-mdx-feed-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html b/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html new file mode 100644 index 0000000000..609a20a0b1 --- /dev/null +++ b/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html @@ -0,0 +1,64 @@ + + + + + +Blog post MDX require Feed tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html.html b/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html.html new file mode 100644 index 0000000000..fe341c6889 --- /dev/null +++ b/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/11/13/dup-title.html b/tests/blog/2021/11/13/dup-title.html new file mode 100644 index 0000000000..ef5097c4a8 --- /dev/null +++ b/tests/blog/2021/11/13/dup-title.html @@ -0,0 +1,58 @@ + + + + + +Post with duplicate title | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2021/11/13/dup-title.html.html b/tests/blog/2021/11/13/dup-title.html.html new file mode 100644 index 0000000000..f8c7b9bde0 --- /dev/null +++ b/tests/blog/2021/11/13/dup-title.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/20/image-only-authors.html b/tests/blog/2022/01/20/image-only-authors.html new file mode 100644 index 0000000000..4110d07609 --- /dev/null +++ b/tests/blog/2022/01/20/image-only-authors.html @@ -0,0 +1,58 @@ + + + + + +Image-only authors | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/20/image-only-authors.html.html b/tests/blog/2022/01/20/image-only-authors.html.html new file mode 100644 index 0000000000..f782aed1e3 --- /dev/null +++ b/tests/blog/2022/01/20/image-only-authors.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/21/dup-footnote.html b/tests/blog/2022/01/21/dup-footnote.html new file mode 100644 index 0000000000..9cca8c1fb6 --- /dev/null +++ b/tests/blog/2022/01/21/dup-footnote.html @@ -0,0 +1,74 @@ + + + + + +Third post with footnote to test posts with same footnote reference. | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/21/dup-footnote.html.html b/tests/blog/2022/01/21/dup-footnote.html.html new file mode 100644 index 0000000000..53d69b1385 --- /dev/null +++ b/tests/blog/2022/01/21/dup-footnote.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/22/dup-footnote.html b/tests/blog/2022/01/22/dup-footnote.html new file mode 100644 index 0000000000..b935a9c242 --- /dev/null +++ b/tests/blog/2022/01/22/dup-footnote.html @@ -0,0 +1,74 @@ + + + + + +Second post with footnote to test posts with same footnote reference. | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/01/22/dup-footnote.html.html b/tests/blog/2022/01/22/dup-footnote.html.html new file mode 100644 index 0000000000..25fc77c93d --- /dev/null +++ b/tests/blog/2022/01/22/dup-footnote.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/04/20/dup-footnote.html b/tests/blog/2022/04/20/dup-footnote.html new file mode 100644 index 0000000000..e8b6b81a3e --- /dev/null +++ b/tests/blog/2022/04/20/dup-footnote.html @@ -0,0 +1,74 @@ + + + + + +First post with footnote to test posts with same footnote reference. | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2022/04/20/dup-footnote.html.html b/tests/blog/2022/04/20/dup-footnote.html.html new file mode 100644 index 0000000000..a512b5c2a8 --- /dev/null +++ b/tests/blog/2022/04/20/dup-footnote.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/07/19/a.html b/tests/blog/2023/07/19/a.html new file mode 100644 index 0000000000..ab3d5185d0 --- /dev/null +++ b/tests/blog/2023/07/19/a.html @@ -0,0 +1,60 @@ + + + + + +Test if href in feed resolved correctly | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/07/19/a.html.html b/tests/blog/2023/07/19/a.html.html new file mode 100644 index 0000000000..d2e49c4b86 --- /dev/null +++ b/tests/blog/2023/07/19/a.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/07/19/b.html b/tests/blog/2023/07/19/b.html new file mode 100644 index 0000000000..2fe0ccb218 --- /dev/null +++ b/tests/blog/2023/07/19/b.html @@ -0,0 +1,58 @@ + + + + + +Test Relative Path | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/07/19/b.html.html b/tests/blog/2023/07/19/b.html.html new file mode 100644 index 0000000000..94d665e413 --- /dev/null +++ b/tests/blog/2023/07/19/b.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/08/05.html b/tests/blog/2023/08/05.html new file mode 100644 index 0000000000..80727d0162 --- /dev/null +++ b/tests/blog/2023/08/05.html @@ -0,0 +1,59 @@ + + + + + +Ensure heading anchor slugs respect GitHub emoji behavior | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/2023/08/05.html.html b/tests/blog/2023/08/05.html.html new file mode 100644 index 0000000000..3d1f5eff75 --- /dev/null +++ b/tests/blog/2023/08/05.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/archive.html b/tests/blog/archive.html new file mode 100644 index 0000000000..9ee9b57c7b --- /dev/null +++ b/tests/blog/archive.html @@ -0,0 +1,58 @@ + + + + + +Archive | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/archive.html.html b/tests/blog/archive.html.html new file mode 100644 index 0000000000..4df9d43871 --- /dev/null +++ b/tests/blog/archive.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/atom.xml b/tests/blog/atom.xml new file mode 100644 index 0000000000..d071e5059a --- /dev/null +++ b/tests/blog/atom.xml @@ -0,0 +1,394 @@ + + + https://docusaurus.io/tests/blog + Docusaurus Tests Blog + 2023-08-05T00:00:00.000Z + https://github.com/jpmonette/feed + + Docusaurus Blog + https://docusaurus.io/img/docusaurus.ico + Copyright © 2024 Facebook, Inc. + + <![CDATA[Ensure heading anchor slugs respect GitHub emoji behavior]]> + https://docusaurus.io/tests/blog/2023/08/05 + + 2023-08-05T00:00:00.000Z + + 😃 This is a friendly header +

😃 This is a friendly header (real smiley)

]]>
+
+ + <![CDATA[Test if href in feed resolved correctly]]> + https://docusaurus.io/tests/blog/2023/07/19/a + + 2023-07-19T00:00:00.000Z + + absolute full url

+

absolute url with implicit domain name

+

relative url

]]>
+
+ + <![CDATA[Test Relative Path]]> + https://docusaurus.io/tests/blog/2023/07/19/b + + 2023-07-19T00:00:00.000Z + + + <![CDATA[A post with html slug]]> + https://docusaurus.io/tests/blog/x/y/z.html + + 2022-10-02T00:00:00.000Z + + This is a blog post with an html slug!

+ +

This is a blog partial

]]>
+ +
+ + <![CDATA[First post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/04/20/dup-footnote + + 2022-04-20T00:00:00.000Z + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Second post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/01/22/dup-footnote + + 2022-01-22T00:00:00.000Z + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Third post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/01/21/dup-footnote + + 2022-01-21T00:00:00.000Z + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Image-only authors]]> + https://docusaurus.io/tests/blog/2022/01/20/image-only-authors + + 2022-01-20T00:00:00.000Z + + You can make a compact authors list without author names!

]]>
+ + + https://github.com/endiliey + + + + https://github.com/lex111 + + + + https://github.com/slorber + + + + https://github.com/yangshun + + + + https://github.com/JoelMarcey + + + + https://github.com/Josh-Cena + + + + https://github.com/deltice + + + + https://github.com/SamChou19815 + + + + https://github.com/ericnakagawa + + + + https://github.com/Simek + + + + https://github.com/hramos + + + + https://github.com/wgao19 + + + + https://github.com/rickyvetter + + + + https://github.com/fanny + + + + https://github.com/armano2 + + + + https://github.com/RDIL + + + + https://github.com/teikjun + + + + https://github.com/hong4rc + + + + https://github.com/anshulrgoyal + + + + https://github.com/italicize + + +
+ + <![CDATA[Post with duplicate title]]> + https://docusaurus.io/tests/blog/2021/11/13/dup-title + + 2021-11-13T00:00:00.000Z + + I hope I'm still here

]]>
+ +
+ + <![CDATA[Blog post MDX require Feed tests]]> + https://docusaurus.io/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests + + 2021-10-08T00:00:00.000Z + + Some MDX tests, mostly to test how the RSS feed render those

+ +

Test MDX with require calls

+ + + +]]>
+ + Sebastien Lorber + https://sebastienlorber.com + + + + + + + +
+ + <![CDATA[Blog post MDX Feed tests]]> + https://docusaurus.io/tests/blog/2021/10/07/blog-post-mdx-feed-tests + + 2021-10-07T00:00:00.000Z + + Some MDX tests, mostly to test how the RSS feed render those

+ +

Imports

+

Here are some imports:

+ +

Exports

+

Here are some exports:

+ +

Tabs test

+

Here are some tabs:

+

This is an apple 🍎

+

Here are some tabs, inside mdx-code-block:

+

This is an apple 🍎

]]>
+ + Sebastien Lorber + https://sebastienlorber.com + + + + + + + +
+ + <![CDATA[Post with duplicate title]]> + https://docusaurus.io/tests/blog/2021/09/13/dup-title + + 2021-09-13T00:00:00.000Z + + See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.

]]>
+ + Josh-Cena1 + + + Josh-Cena2 + + + Josh-Cena3 + https://github.com/Josh-Cena + + + Josh-Cena4 + sidechen2003@gmail.com + + +
+ + <![CDATA[Multiple authors]]> + https://docusaurus.io/tests/blog/2021/08/23/multiple-authors + + 2021-08-23T00:00:00.000Z + + You can have multiple authors for one blog post!

]]>
+ + Sebastien Lorber + https://sebastienlorber.com + + + Josh-Cena + https://joshcena.com + + + + + + + + + +
+ + <![CDATA[Hmmm!]]> + https://docusaurus.io/tests/blog/2021/08/22/no-author + + 2021-08-22T00:00:00.000Z + + This is a blog post from an anonymous author!

+ +

This is a blog partial

]]>
+ +
+ + <![CDATA[Blog TOC FrontMatter tests]]> + https://docusaurus.io/tests/blog/2021/08/21/blog-post-toc-tests + + 2021-08-21T00:00:00.000Z + + +

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

]]>
+ + Sebastien Lorber + https://sebastienlorber.com + + +
+ + <![CDATA[Using twice the blog plugin]]> + https://docusaurus.io/tests/blog/2020/08/03/demo/second-blog-intro + + 2020-08-03T00:00:00.000Z + + Did you know you can use multiple instances of the same plugin?

+ +
tip

Using twice the blog plugin permits you to create more than one blog on the same Docusaurus website!

]]>
+ + Sebastien Lorber + https://sebastienlorber.com + + + + +
+
\ No newline at end of file diff --git a/tests/blog/feed.json b/tests/blog/feed.json new file mode 100644 index 0000000000..2d382b7aaa --- /dev/null +++ b/tests/blog/feed.json @@ -0,0 +1,216 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "Docusaurus Tests Blog", + "home_page_url": "https://docusaurus.io/tests/blog", + "description": "Docusaurus Blog", + "items": [ + { + "id": "https://docusaurus.io/tests/blog/2023/08/05", + "content_html": "

😃 This is a friendly header

\n

😃 This is a friendly header (real smiley)

", + "url": "https://docusaurus.io/tests/blog/2023/08/05", + "title": "Ensure heading anchor slugs respect GitHub emoji behavior", + "summary": "This is a friendly header", + "date_modified": "2023-08-05T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/2023/07/19/a", + "content_html": "

absolute full url

\n

absolute url with implicit domain name

\n

relative url

", + "url": "https://docusaurus.io/tests/blog/2023/07/19/a", + "title": "Test if href in feed resolved correctly", + "summary": "absolute full url", + "date_modified": "2023-07-19T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/2023/07/19/b", + "content_html": "", + "url": "https://docusaurus.io/tests/blog/2023/07/19/b", + "title": "Test Relative Path", + "date_modified": "2023-07-19T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/x/y/z.html", + "content_html": "

This is a blog post with an html slug!

\n\n

This is a blog partial

", + "url": "https://docusaurus.io/tests/blog/x/y/z.html", + "title": "A post with html slug", + "summary": "This is a blog post with an html slug!", + "date_modified": "2022-10-02T00:00:00.000Z", + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2022/04/20/dup-footnote", + "content_html": "

foo1

\n

bar2

\n

baz3

\n\n

Footnotes

\n
    \n
  1. \n

    foo

    \n
  2. \n
  3. \n

    bar

    \n
  4. \n
  5. \n

    baz

    \n
  6. \n
\n
", + "url": "https://docusaurus.io/tests/blog/2022/04/20/dup-footnote", + "title": "First post with footnote to test posts with same footnote reference.", + "summary": "foo", + "date_modified": "2022-04-20T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/2022/01/22/dup-footnote", + "content_html": "

foo1

\n

bar2

\n

baz3

\n\n

Footnotes

\n
    \n
  1. \n

    foo

    \n
  2. \n
  3. \n

    bar

    \n
  4. \n
  5. \n

    baz

    \n
  6. \n
\n
", + "url": "https://docusaurus.io/tests/blog/2022/01/22/dup-footnote", + "title": "Second post with footnote to test posts with same footnote reference.", + "summary": "foo", + "date_modified": "2022-01-22T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/2022/01/21/dup-footnote", + "content_html": "

foo1

\n

bar2

\n

baz3

\n\n

Footnotes

\n
    \n
  1. \n

    foo

    \n
  2. \n
  3. \n

    bar

    \n
  4. \n
  5. \n

    baz

    \n
  6. \n
\n
", + "url": "https://docusaurus.io/tests/blog/2022/01/21/dup-footnote", + "title": "Third post with footnote to test posts with same footnote reference.", + "summary": "foo", + "date_modified": "2022-01-21T00:00:00.000Z", + "tags": [] + }, + { + "id": "https://docusaurus.io/tests/blog/2022/01/20/image-only-authors", + "content_html": "

You can make a compact authors list without author names!

", + "url": "https://docusaurus.io/tests/blog/2022/01/20/image-only-authors", + "title": "Image-only authors", + "summary": "You can make a compact authors list without author names!", + "date_modified": "2022-01-20T00:00:00.000Z", + "author": { + "url": "https://github.com/endiliey" + }, + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/11/13/dup-title", + "content_html": "

I hope I'm still here

", + "url": "https://docusaurus.io/tests/blog/2021/11/13/dup-title", + "title": "Post with duplicate title", + "summary": "I hope I'm still here", + "date_modified": "2021-11-13T00:00:00.000Z", + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests", + "content_html": "

Some MDX tests, mostly to test how the RSS feed render those

\n\n

Test MDX with require calls

\n\n\n\n", + "url": "https://docusaurus.io/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests", + "title": "Blog post MDX require Feed tests", + "summary": "Some MDX tests, mostly to test how the RSS feed render those", + "date_modified": "2021-10-08T00:00:00.000Z", + "author": { + "name": "Sebastien Lorber", + "url": "https://sebastienlorber.com" + }, + "tags": [ + "paginated-tag", + "blog", + "docusaurus", + "long-long", + "long-long-long", + "long-long-long-long" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/10/07/blog-post-mdx-feed-tests", + "content_html": "

Some MDX tests, mostly to test how the RSS feed render those

\n\n

Imports

\n

Here are some imports:

\n\n

Exports

\n

Here are some exports:

\n\n

Tabs test

\n

Here are some tabs:

\n
  • Apple
  • Orange

This is an apple 🍎

\n

Here are some tabs, inside mdx-code-block:

\n
  • Apple
  • Orange

This is an apple 🍎

", + "url": "https://docusaurus.io/tests/blog/2021/10/07/blog-post-mdx-feed-tests", + "title": "Blog post MDX Feed tests", + "summary": "Some MDX tests, mostly to test how the RSS feed render those", + "date_modified": "2021-10-07T00:00:00.000Z", + "author": { + "name": "Sebastien Lorber", + "url": "https://sebastienlorber.com" + }, + "tags": [ + "paginated-tag", + "blog", + "docusaurus", + "long-long", + "long-long-long", + "long-long-long-long" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/09/13/dup-title", + "content_html": "

See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.

", + "url": "https://docusaurus.io/tests/blog/2021/09/13/dup-title", + "title": "Post with duplicate title", + "summary": "See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.", + "date_modified": "2021-09-13T00:00:00.000Z", + "author": { + "name": "Josh-Cena1" + }, + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/08/23/multiple-authors", + "content_html": "

You can have multiple authors for one blog post!

", + "url": "https://docusaurus.io/tests/blog/2021/08/23/multiple-authors", + "title": "Multiple authors", + "summary": "You can have multiple authors for one blog post!", + "date_modified": "2021-08-23T00:00:00.000Z", + "author": { + "name": "Sebastien Lorber", + "url": "https://sebastienlorber.com" + }, + "tags": [ + "blog", + "docusaurus", + "paginated-tag", + "long", + "long-long", + "long-long-long", + "long-long-long-long", + "long-long-long-long-long" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/08/22/no-author", + "content_html": "

This is a blog post from an anonymous author!

\n\n

This is a blog partial

", + "url": "https://docusaurus.io/tests/blog/2021/08/22/no-author", + "title": "Hmmm!", + "summary": "This is a blog post from an anonymous author!", + "date_modified": "2021-08-22T00:00:00.000Z", + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2021/08/21/blog-post-toc-tests", + "content_html": "\n\n

title

\n

some text

\n

section 1

\n

some text

\n

subsection 1-1

\n

some text

\n

subsection 1-1-1

\n

some text

\n
subsection 1-1-1-1
\n

some text

\n
subsection 1-1-1-1-1
\n

some text

\n
subsection 1-1-1-1-2
\n

some text

\n
subsection 1-1-1-2
\n

some text

\n

subsection 1-1-2

\n

some text

\n

subsection 1-2

\n

some text

\n

subsection 1-3

\n

some text

\n

section 2

\n

some text

\n

subsection 2-1

\n

some text

\n

subsection 2-1

\n

some text

\n

section 3

\n

some text

\n

subsection 3-1

\n

some text

\n

subsection 3-2

\n

some text

", + "url": "https://docusaurus.io/tests/blog/2021/08/21/blog-post-toc-tests", + "title": "Blog TOC FrontMatter tests", + "summary": "{/ truncate /}", + "date_modified": "2021-08-21T00:00:00.000Z", + "author": { + "name": "Sebastien Lorber", + "url": "https://sebastienlorber.com" + }, + "tags": [ + "paginated-tag" + ] + }, + { + "id": "https://docusaurus.io/tests/blog/2020/08/03/demo/second-blog-intro", + "content_html": "

Did you know you can use multiple instances of the same plugin?

\n\n
tip

Using twice the blog plugin permits you to create more than one blog on the same Docusaurus website!

", + "url": "https://docusaurus.io/tests/blog/2020/08/03/demo/second-blog-intro", + "title": "Using twice the blog plugin", + "summary": "Did you know you can use multiple instances of the same plugin?", + "date_modified": "2020-08-03T00:00:00.000Z", + "author": { + "name": "Sebastien Lorber", + "url": "https://sebastienlorber.com" + }, + "tags": [ + "paginated-tag", + "blog", + "docusaurus" + ] + } + ] +} \ No newline at end of file diff --git a/tests/blog/page/2.html b/tests/blog/page/2.html new file mode 100644 index 0000000000..063e0e8e1d --- /dev/null +++ b/tests/blog/page/2.html @@ -0,0 +1,92 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/2.html.html b/tests/blog/page/2.html.html new file mode 100644 index 0000000000..a097755dde --- /dev/null +++ b/tests/blog/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/3.html b/tests/blog/page/3.html new file mode 100644 index 0000000000..e8247aff4c --- /dev/null +++ b/tests/blog/page/3.html @@ -0,0 +1,74 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/3.html.html b/tests/blog/page/3.html.html new file mode 100644 index 0000000000..821f0b06b7 --- /dev/null +++ b/tests/blog/page/3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/4.html b/tests/blog/page/4.html new file mode 100644 index 0000000000..63dd1e10a8 --- /dev/null +++ b/tests/blog/page/4.html @@ -0,0 +1,58 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/4.html.html b/tests/blog/page/4.html.html new file mode 100644 index 0000000000..67787c0c51 --- /dev/null +++ b/tests/blog/page/4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/5.html b/tests/blog/page/5.html new file mode 100644 index 0000000000..e30f12ea9b --- /dev/null +++ b/tests/blog/page/5.html @@ -0,0 +1,60 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/5.html.html b/tests/blog/page/5.html.html new file mode 100644 index 0000000000..4e9446242a --- /dev/null +++ b/tests/blog/page/5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/6.html b/tests/blog/page/6.html new file mode 100644 index 0000000000..d0eae2e305 --- /dev/null +++ b/tests/blog/page/6.html @@ -0,0 +1,58 @@ + + + + + +Blog | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/page/6.html.html b/tests/blog/page/6.html.html new file mode 100644 index 0000000000..fa7b892d82 --- /dev/null +++ b/tests/blog/page/6.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/rss.xml b/tests/blog/rss.xml new file mode 100644 index 0000000000..6cd7f5d64f --- /dev/null +++ b/tests/blog/rss.xml @@ -0,0 +1,279 @@ + + + + Docusaurus Tests Blog + https://docusaurus.io/tests/blog + Docusaurus Blog + Sat, 05 Aug 2023 00:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + Copyright © 2024 Facebook, Inc. + + <![CDATA[Ensure heading anchor slugs respect GitHub emoji behavior]]> + https://docusaurus.io/tests/blog/2023/08/05 + https://docusaurus.io/tests/blog/2023/08/05 + Sat, 05 Aug 2023 00:00:00 GMT + + 😃 This is a friendly header +

😃 This is a friendly header (real smiley)

]]>
+
+ + <![CDATA[Test if href in feed resolved correctly]]> + https://docusaurus.io/tests/blog/2023/07/19/a + https://docusaurus.io/tests/blog/2023/07/19/a + Wed, 19 Jul 2023 00:00:00 GMT + + absolute full url

+

absolute url with implicit domain name

+

relative url

]]>
+
+ + <![CDATA[Test Relative Path]]> + https://docusaurus.io/tests/blog/2023/07/19/b + https://docusaurus.io/tests/blog/2023/07/19/b + Wed, 19 Jul 2023 00:00:00 GMT + + + <![CDATA[A post with html slug]]> + https://docusaurus.io/tests/blog/x/y/z.html + https://docusaurus.io/tests/blog/x/y/z.html + Sun, 02 Oct 2022 00:00:00 GMT + + This is a blog post with an html slug!

+ +

This is a blog partial

]]>
+ paginated-tag +
+ + <![CDATA[First post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/04/20/dup-footnote + https://docusaurus.io/tests/blog/2022/04/20/dup-footnote + Wed, 20 Apr 2022 00:00:00 GMT + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Second post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/01/22/dup-footnote + https://docusaurus.io/tests/blog/2022/01/22/dup-footnote + Sat, 22 Jan 2022 00:00:00 GMT + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Third post with footnote to test posts with same footnote reference.]]> + https://docusaurus.io/tests/blog/2022/01/21/dup-footnote + https://docusaurus.io/tests/blog/2022/01/21/dup-footnote + Fri, 21 Jan 2022 00:00:00 GMT + + foo1

+

bar2

+

baz3

+ +

Footnotes

+
    +
  1. +

    foo

    +
  2. +
  3. +

    bar

    +
  4. +
  5. +

    baz

    +
  6. +
+
]]>
+
+ + <![CDATA[Image-only authors]]> + https://docusaurus.io/tests/blog/2022/01/20/image-only-authors + https://docusaurus.io/tests/blog/2022/01/20/image-only-authors + Thu, 20 Jan 2022 00:00:00 GMT + + You can make a compact authors list without author names!

]]>
+ paginated-tag +
+ + <![CDATA[Post with duplicate title]]> + https://docusaurus.io/tests/blog/2021/11/13/dup-title + https://docusaurus.io/tests/blog/2021/11/13/dup-title + Sat, 13 Nov 2021 00:00:00 GMT + + I hope I'm still here

]]>
+ paginated-tag +
+ + <![CDATA[Blog post MDX require Feed tests]]> + https://docusaurus.io/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests + https://docusaurus.io/tests/blog/2021/10/08/blog-post-mdx-require-feed-tests + Fri, 08 Oct 2021 00:00:00 GMT + + Some MDX tests, mostly to test how the RSS feed render those

+ +

Test MDX with require calls

+ + + +]]>
+ paginated-tag + blog + docusaurus + long-long + long-long-long + long-long-long-long +
+ + <![CDATA[Blog post MDX Feed tests]]> + https://docusaurus.io/tests/blog/2021/10/07/blog-post-mdx-feed-tests + https://docusaurus.io/tests/blog/2021/10/07/blog-post-mdx-feed-tests + Thu, 07 Oct 2021 00:00:00 GMT + + Some MDX tests, mostly to test how the RSS feed render those

+ +

Imports

+

Here are some imports:

+ +

Exports

+

Here are some exports:

+ +

Tabs test

+

Here are some tabs:

+

This is an apple 🍎

+

Here are some tabs, inside mdx-code-block:

+

This is an apple 🍎

]]>
+ paginated-tag + blog + docusaurus + long-long + long-long-long + long-long-long-long +
+ + <![CDATA[Post with duplicate title]]> + https://docusaurus.io/tests/blog/2021/09/13/dup-title + https://docusaurus.io/tests/blog/2021/09/13/dup-title + Mon, 13 Sep 2021 00:00:00 GMT + + See https://github.com/facebook/docusaurus/issues/6059. This one and 2021-11-13-dup-title.md should both show up.

]]>
+ sidechen2003@gmail.com (Josh-Cena4) + paginated-tag +
+ + <![CDATA[Multiple authors]]> + https://docusaurus.io/tests/blog/2021/08/23/multiple-authors + https://docusaurus.io/tests/blog/2021/08/23/multiple-authors + Mon, 23 Aug 2021 00:00:00 GMT + + You can have multiple authors for one blog post!

]]>
+ blog + docusaurus + paginated-tag + long + long-long + long-long-long + long-long-long-long + long-long-long-long-long +
+ + <![CDATA[Hmmm!]]> + https://docusaurus.io/tests/blog/2021/08/22/no-author + https://docusaurus.io/tests/blog/2021/08/22/no-author + Sun, 22 Aug 2021 00:00:00 GMT + + This is a blog post from an anonymous author!

+ +

This is a blog partial

]]>
+ paginated-tag +
+ + <![CDATA[Blog TOC FrontMatter tests]]> + https://docusaurus.io/tests/blog/2021/08/21/blog-post-toc-tests + https://docusaurus.io/tests/blog/2021/08/21/blog-post-toc-tests + Sat, 21 Aug 2021 00:00:00 GMT + + +

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

]]>
+ paginated-tag +
+ + <![CDATA[Using twice the blog plugin]]> + https://docusaurus.io/tests/blog/2020/08/03/demo/second-blog-intro + https://docusaurus.io/tests/blog/2020/08/03/demo/second-blog-intro + Mon, 03 Aug 2020 00:00:00 GMT + + Did you know you can use multiple instances of the same plugin?

+ +
tip

Using twice the blog plugin permits you to create more than one blog on the same Docusaurus website!

]]>
+ paginated-tag + blog + docusaurus +
+
+
\ No newline at end of file diff --git a/tests/blog/tags.html b/tests/blog/tags.html new file mode 100644 index 0000000000..8742fcfeca --- /dev/null +++ b/tests/blog/tags.html @@ -0,0 +1,58 @@ + + + + + +Tags | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags.html.html b/tests/blog/tags.html.html new file mode 100644 index 0000000000..dc1ebf3104 --- /dev/null +++ b/tests/blog/tags.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/blog.html b/tests/blog/tags/blog.html new file mode 100644 index 0000000000..7f00110d75 --- /dev/null +++ b/tests/blog/tags/blog.html @@ -0,0 +1,58 @@ + + + + + +4 posts tagged with "blog" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/blog.html.html b/tests/blog/tags/blog.html.html new file mode 100644 index 0000000000..d8678e370b --- /dev/null +++ b/tests/blog/tags/blog.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/blog/page/2.html b/tests/blog/tags/blog/page/2.html new file mode 100644 index 0000000000..e961974e17 --- /dev/null +++ b/tests/blog/tags/blog/page/2.html @@ -0,0 +1,58 @@ + + + + + +4 posts tagged with "blog" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/blog/page/2.html.html b/tests/blog/tags/blog/page/2.html.html new file mode 100644 index 0000000000..8aad70974a --- /dev/null +++ b/tests/blog/tags/blog/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/docusaurus.html b/tests/blog/tags/docusaurus.html new file mode 100644 index 0000000000..392a187ee3 --- /dev/null +++ b/tests/blog/tags/docusaurus.html @@ -0,0 +1,58 @@ + + + + + +4 posts tagged with "docusaurus" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/docusaurus.html.html b/tests/blog/tags/docusaurus.html.html new file mode 100644 index 0000000000..889491f820 --- /dev/null +++ b/tests/blog/tags/docusaurus.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/docusaurus/page/2.html b/tests/blog/tags/docusaurus/page/2.html new file mode 100644 index 0000000000..2f079d1496 --- /dev/null +++ b/tests/blog/tags/docusaurus/page/2.html @@ -0,0 +1,58 @@ + + + + + +4 posts tagged with "docusaurus" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/docusaurus/page/2.html.html b/tests/blog/tags/docusaurus/page/2.html.html new file mode 100644 index 0000000000..38794696bb --- /dev/null +++ b/tests/blog/tags/docusaurus/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long-long-long.html b/tests/blog/tags/long-long-long-long-long.html new file mode 100644 index 0000000000..c8607c1fcd --- /dev/null +++ b/tests/blog/tags/long-long-long-long-long.html @@ -0,0 +1,58 @@ + + + + + +One post tagged with "long-long-long-long-long" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long-long-long.html.html b/tests/blog/tags/long-long-long-long-long.html.html new file mode 100644 index 0000000000..981ee78ccd --- /dev/null +++ b/tests/blog/tags/long-long-long-long-long.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long-long.html b/tests/blog/tags/long-long-long-long.html new file mode 100644 index 0000000000..f9c9c0df15 --- /dev/null +++ b/tests/blog/tags/long-long-long-long.html @@ -0,0 +1,58 @@ + + + + + +3 posts tagged with "long-long-long-long" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long-long.html.html b/tests/blog/tags/long-long-long-long.html.html new file mode 100644 index 0000000000..bb05ada56a --- /dev/null +++ b/tests/blog/tags/long-long-long-long.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long.html b/tests/blog/tags/long-long-long.html new file mode 100644 index 0000000000..87c997a0fc --- /dev/null +++ b/tests/blog/tags/long-long-long.html @@ -0,0 +1,58 @@ + + + + + +3 posts tagged with "long-long-long" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long-long.html.html b/tests/blog/tags/long-long-long.html.html new file mode 100644 index 0000000000..75ff590ab9 --- /dev/null +++ b/tests/blog/tags/long-long-long.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long.html b/tests/blog/tags/long-long.html new file mode 100644 index 0000000000..ae1ed754d0 --- /dev/null +++ b/tests/blog/tags/long-long.html @@ -0,0 +1,58 @@ + + + + + +3 posts tagged with "long-long" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long-long.html.html b/tests/blog/tags/long-long.html.html new file mode 100644 index 0000000000..d77e3abb65 --- /dev/null +++ b/tests/blog/tags/long-long.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long.html b/tests/blog/tags/long.html new file mode 100644 index 0000000000..2919b39e92 --- /dev/null +++ b/tests/blog/tags/long.html @@ -0,0 +1,58 @@ + + + + + +One post tagged with "long" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/long.html.html b/tests/blog/tags/long.html.html new file mode 100644 index 0000000000..263b035d71 --- /dev/null +++ b/tests/blog/tags/long.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag.html b/tests/blog/tags/paginated-tag.html new file mode 100644 index 0000000000..4ae7e9df85 --- /dev/null +++ b/tests/blog/tags/paginated-tag.html @@ -0,0 +1,60 @@ + + + + + +10 posts tagged with "paginated-tag" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

10 posts tagged with "paginated-tag"

View All Tags
+ + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag.html.html b/tests/blog/tags/paginated-tag.html.html new file mode 100644 index 0000000000..57ec3c11ab --- /dev/null +++ b/tests/blog/tags/paginated-tag.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/2.html b/tests/blog/tags/paginated-tag/page/2.html new file mode 100644 index 0000000000..2d6261ca3a --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/2.html @@ -0,0 +1,58 @@ + + + + + +10 posts tagged with "paginated-tag" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/2.html.html b/tests/blog/tags/paginated-tag/page/2.html.html new file mode 100644 index 0000000000..a2f0232681 --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/3.html b/tests/blog/tags/paginated-tag/page/3.html new file mode 100644 index 0000000000..49b026eaa4 --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/3.html @@ -0,0 +1,60 @@ + + + + + +10 posts tagged with "paginated-tag" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/3.html.html b/tests/blog/tags/paginated-tag/page/3.html.html new file mode 100644 index 0000000000..22691d4d95 --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/4.html b/tests/blog/tags/paginated-tag/page/4.html new file mode 100644 index 0000000000..0279125699 --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/4.html @@ -0,0 +1,58 @@ + + + + + +10 posts tagged with "paginated-tag" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/paginated-tag/page/4.html.html b/tests/blog/tags/paginated-tag/page/4.html.html new file mode 100644 index 0000000000..d1d84ff16d --- /dev/null +++ b/tests/blog/tags/paginated-tag/page/4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/unlisted.html b/tests/blog/tags/unlisted.html new file mode 100644 index 0000000000..73e406df1c --- /dev/null +++ b/tests/blog/tags/unlisted.html @@ -0,0 +1,59 @@ + + + + + +One post tagged with "unlisted" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

One post tagged with "unlisted"

View All Tags

Unlisted blog post

· 5 min read

This unlisted blog post should be "hidden" in production, but remain accessible.

+

It is filtered from the sidebar, sitemap, SEO indexation...

+ + \ No newline at end of file diff --git a/tests/blog/tags/unlisted.html.html b/tests/blog/tags/unlisted.html.html new file mode 100644 index 0000000000..09f1b2d41c --- /dev/null +++ b/tests/blog/tags/unlisted.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/tags/visibility.html b/tests/blog/tags/visibility.html new file mode 100644 index 0000000000..94c833a9e4 --- /dev/null +++ b/tests/blog/tags/visibility.html @@ -0,0 +1,59 @@ + + + + + +One post tagged with "visibility" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

One post tagged with "visibility"

View All Tags

Unlisted blog post

· 5 min read

This unlisted blog post should be "hidden" in production, but remain accessible.

+

It is filtered from the sidebar, sitemap, SEO indexation...

+ + \ No newline at end of file diff --git a/tests/blog/tags/visibility.html.html b/tests/blog/tags/visibility.html.html new file mode 100644 index 0000000000..ac9fb406ee --- /dev/null +++ b/tests/blog/tags/visibility.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/unlisted-post.html b/tests/blog/unlisted-post.html new file mode 100644 index 0000000000..69a5f4c10a --- /dev/null +++ b/tests/blog/unlisted-post.html @@ -0,0 +1,59 @@ + + + + + +Unlisted blog post | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Unlisted blog post

· 5 min read

This unlisted blog post should be "hidden" in production, but remain accessible.

+

It is filtered from the sidebar, sitemap, SEO indexation...

+ + \ No newline at end of file diff --git a/tests/blog/unlisted-post.html.html b/tests/blog/unlisted-post.html.html new file mode 100644 index 0000000000..ef38810056 --- /dev/null +++ b/tests/blog/unlisted-post.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/blog/x/y/z.html b/tests/blog/x/y/z.html new file mode 100644 index 0000000000..0a92442d4c --- /dev/null +++ b/tests/blog/x/y/z.html @@ -0,0 +1,60 @@ + + + + + +A post with html slug | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs.html b/tests/docs.html new file mode 100644 index 0000000000..d55feed049 --- /dev/null +++ b/tests/docs.html @@ -0,0 +1,67 @@ + + + + + +Docs tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Docs tests

+

This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don't really cover.

+
+ + \ No newline at end of file diff --git a/tests/docs.html.html b/tests/docs.html.html new file mode 100644 index 0000000000..b823013f21 --- /dev/null +++ b/tests/docs.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/beginner's guide.html b/tests/docs/beginner's guide.html new file mode 100644 index 0000000000..24671a70ba --- /dev/null +++ b/tests/docs/beginner's guide.html @@ -0,0 +1,59 @@ + + + + + +Beginner's guide | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/beginner's guide.html.html b/tests/docs/beginner's guide.html.html new file mode 100644 index 0000000000..c810c775a7 --- /dev/null +++ b/tests/docs/beginner's guide.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category-links-generated-index-slug.html b/tests/docs/category-links-generated-index-slug.html new file mode 100644 index 0000000000..5cff0c3a4a --- /dev/null +++ b/tests/docs/category-links-generated-index-slug.html @@ -0,0 +1,61 @@ + + + + + +Category Links | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/tests/docs/category-links-generated-index-slug.html.html b/tests/docs/category-links-generated-index-slug.html.html new file mode 100644 index 0000000000..d30ff3307d --- /dev/null +++ b/tests/docs/category-links-generated-index-slug.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category/another-category-with-index.html b/tests/docs/category/another-category-with-index.html new file mode 100644 index 0000000000..80bc913cd7 --- /dev/null +++ b/tests/docs/category/another-category-with-index.html @@ -0,0 +1,61 @@ + + + + + +Another category with index | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category/another-category-with-index.html.html b/tests/docs/category/another-category-with-index.html.html new file mode 100644 index 0000000000..8f1d372406 --- /dev/null +++ b/tests/docs/category/another-category-with-index.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category/sidebar-item-description-tests.html b/tests/docs/category/sidebar-item-description-tests.html new file mode 100644 index 0000000000..3e0972c5ef --- /dev/null +++ b/tests/docs/category/sidebar-item-description-tests.html @@ -0,0 +1,61 @@ + + + + + +Sidebar item description tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category/sidebar-item-description-tests.html.html b/tests/docs/category/sidebar-item-description-tests.html.html new file mode 100644 index 0000000000..a754516fd4 --- /dev/null +++ b/tests/docs/category/sidebar-item-description-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/category/tests.html b/tests/docs/category/tests.html new file mode 100644 index 0000000000..0861be0402 --- /dev/null +++ b/tests/docs/category/tests.html @@ -0,0 +1,61 @@ + + + + + +Tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/tests/docs/category/tests.html.html b/tests/docs/category/tests.html.html new file mode 100644 index 0000000000..bc054031d8 --- /dev/null +++ b/tests/docs/category/tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/doc-with-another-sidebar.html b/tests/docs/doc-with-another-sidebar.html new file mode 100644 index 0000000000..30646d7670 --- /dev/null +++ b/tests/docs/doc-with-another-sidebar.html @@ -0,0 +1,59 @@ + + + + + +Doc with another sidebar | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Doc with another sidebar

+

My link appears in a sidebar, but I want to display another sidebar...

+ + \ No newline at end of file diff --git a/tests/docs/doc-with-another-sidebar.html.html b/tests/docs/doc-with-another-sidebar.html.html new file mode 100644 index 0000000000..58ffe84db6 --- /dev/null +++ b/tests/docs/doc-with-another-sidebar.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/doc-with-last-update.html b/tests/docs/doc-with-last-update.html new file mode 100644 index 0000000000..bda47a2d8d --- /dev/null +++ b/tests/docs/doc-with-last-update.html @@ -0,0 +1,61 @@ + + + + + +Doc With Last Update Front Matter | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/doc-with-last-update.html.html b/tests/docs/doc-with-last-update.html.html new file mode 100644 index 0000000000..f6fb3af271 --- /dev/null +++ b/tests/docs/doc-with-last-update.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/doc-without-sidebar.html b/tests/docs/doc-without-sidebar.html new file mode 100644 index 0000000000..11409831f9 --- /dev/null +++ b/tests/docs/doc-without-sidebar.html @@ -0,0 +1,59 @@ + + + + + +Doc without sidebar | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Doc without sidebar

+

My link appears in a sidebar, but I don't want to display that...

+ + \ No newline at end of file diff --git a/tests/docs/doc-without-sidebar.html.html b/tests/docs/doc-without-sidebar.html.html new file mode 100644 index 0000000000..573d106a2f --- /dev/null +++ b/tests/docs/doc-without-sidebar.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/dummy.html b/tests/docs/dummy.html new file mode 100644 index 0000000000..ac2c639545 --- /dev/null +++ b/tests/docs/dummy.html @@ -0,0 +1,58 @@ + + + + + +Just a dummy page | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/folder with space/doc 1.html b/tests/docs/folder with space/doc 1.html new file mode 100644 index 0000000000..0ea444296d --- /dev/null +++ b/tests/docs/folder with space/doc 1.html @@ -0,0 +1,60 @@ + + + + + +Doc 1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/folder with space/doc 1.html.html b/tests/docs/folder with space/doc 1.html.html new file mode 100644 index 0000000000..b4bd4969fb --- /dev/null +++ b/tests/docs/folder with space/doc 1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/folder with space/doc 2.html b/tests/docs/folder with space/doc 2.html new file mode 100644 index 0000000000..b4909cfecc --- /dev/null +++ b/tests/docs/folder with space/doc 2.html @@ -0,0 +1,60 @@ + + + + + +Doc 2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/folder with space/doc 2.html.html b/tests/docs/folder with space/doc 2.html.html new file mode 100644 index 0000000000..d265469bf4 --- /dev/null +++ b/tests/docs/folder with space/doc 2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/more-test.html b/tests/docs/more-test.html new file mode 100644 index 0000000000..4605f2f22a --- /dev/null +++ b/tests/docs/more-test.html @@ -0,0 +1,62 @@ + + + + + +Another test page | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/more-test.html.html b/tests/docs/more-test.html.html new file mode 100644 index 0000000000..03a77de766 --- /dev/null +++ b/tests/docs/more-test.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/standalone.html b/tests/docs/standalone.html new file mode 100644 index 0000000000..0749ce403d --- /dev/null +++ b/tests/docs/standalone.html @@ -0,0 +1,59 @@ + + + + + +Standalone doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Standalone doc

+

This doc is not in any sidebar, on purpose, to measure the build size impact of the huge sidebar

+ + \ No newline at end of file diff --git a/tests/docs/standalone.html.html b/tests/docs/standalone.html.html new file mode 100644 index 0000000000..4cd377428b --- /dev/null +++ b/tests/docs/standalone.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags.html b/tests/docs/tags.html new file mode 100644 index 0000000000..cb1362c9ff --- /dev/null +++ b/tests/docs/tags.html @@ -0,0 +1,58 @@ + + + + + +Tags | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags.html.html b/tests/docs/tags.html.html new file mode 100644 index 0000000000..7e5f09e9ce --- /dev/null +++ b/tests/docs/tags.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/a.html b/tests/docs/tags/a.html new file mode 100644 index 0000000000..35537b33fd --- /dev/null +++ b/tests/docs/tags/a.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "a" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/a.html.html b/tests/docs/tags/a.html.html new file mode 100644 index 0000000000..a3df2e3754 --- /dev/null +++ b/tests/docs/tags/a.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/b.html b/tests/docs/tags/b.html new file mode 100644 index 0000000000..3aa3cee486 --- /dev/null +++ b/tests/docs/tags/b.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "b" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/b.html.html b/tests/docs/tags/b.html.html new file mode 100644 index 0000000000..933204b15d --- /dev/null +++ b/tests/docs/tags/b.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/c.html b/tests/docs/tags/c.html new file mode 100644 index 0000000000..767df4be5d --- /dev/null +++ b/tests/docs/tags/c.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "c" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

One doc tagged with "c"

View All Tags

Docs tests

This Docusaurus docs plugin instance is meant to test fancy edge-cases that regular unit tests don't really cover.

+ + \ No newline at end of file diff --git a/tests/docs/tags/c.html.html b/tests/docs/tags/c.html.html new file mode 100644 index 0000000000..2f2e1f4b93 --- /dev/null +++ b/tests/docs/tags/c.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/d-custom-permalink.html b/tests/docs/tags/d-custom-permalink.html new file mode 100644 index 0000000000..11d5a7db73 --- /dev/null +++ b/tests/docs/tags/d-custom-permalink.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "d" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/d-custom-permalink.html.html b/tests/docs/tags/d-custom-permalink.html.html new file mode 100644 index 0000000000..2b1d75d1fd --- /dev/null +++ b/tests/docs/tags/d-custom-permalink.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/e.html b/tests/docs/tags/e.html new file mode 100644 index 0000000000..763306080b --- /dev/null +++ b/tests/docs/tags/e.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "e" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/e.html.html b/tests/docs/tags/e.html.html new file mode 100644 index 0000000000..896776f15d --- /dev/null +++ b/tests/docs/tags/e.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/listed.html b/tests/docs/tags/listed.html new file mode 100644 index 0000000000..88b4ba66a7 --- /dev/null +++ b/tests/docs/tags/listed.html @@ -0,0 +1,58 @@ + + + + + +2 docs tagged with "listed" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/listed.html.html b/tests/docs/tags/listed.html.html new file mode 100644 index 0000000000..2e1dc06e21 --- /dev/null +++ b/tests/docs/tags/listed.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/some-tag.html b/tests/docs/tags/some-tag.html new file mode 100644 index 0000000000..eae07471fe --- /dev/null +++ b/tests/docs/tags/some-tag.html @@ -0,0 +1,58 @@ + + + + + +One doc tagged with "some tag" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/some-tag.html.html b/tests/docs/tags/some-tag.html.html new file mode 100644 index 0000000000..6454f111a3 --- /dev/null +++ b/tests/docs/tags/some-tag.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/unlisted.html b/tests/docs/tags/unlisted.html new file mode 100644 index 0000000000..554d94c81d --- /dev/null +++ b/tests/docs/tags/unlisted.html @@ -0,0 +1,58 @@ + + + + + +8 docs tagged with "unlisted" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

8 docs tagged with "unlisted"

View All Tags
+ + \ No newline at end of file diff --git a/tests/docs/tags/unlisted.html.html b/tests/docs/tags/unlisted.html.html new file mode 100644 index 0000000000..4d0c73cd3e --- /dev/null +++ b/tests/docs/tags/unlisted.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/visibility.html b/tests/docs/tags/visibility.html new file mode 100644 index 0000000000..dd853898a6 --- /dev/null +++ b/tests/docs/tags/visibility.html @@ -0,0 +1,58 @@ + + + + + +3 docs tagged with "visibility" | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tags/visibility.html.html b/tests/docs/tags/visibility.html.html new file mode 100644 index 0000000000..e48f3c63dc --- /dev/null +++ b/tests/docs/tags/visibility.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/Case-Sentitive-Doc.html b/tests/docs/tests/Case-Sentitive-Doc.html new file mode 100644 index 0000000000..d661b49da1 --- /dev/null +++ b/tests/docs/tests/Case-Sentitive-Doc.html @@ -0,0 +1,63 @@ + + + + + +Case-Sensitive doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/Case-Sentitive-Doc.html.html b/tests/docs/tests/Case-Sentitive-Doc.html.html new file mode 100644 index 0000000000..632a6b8820 --- /dev/null +++ b/tests/docs/tests/Case-Sentitive-Doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/admonitions.html b/tests/docs/tests/admonitions.html new file mode 100644 index 0000000000..f854f17a04 --- /dev/null +++ b/tests/docs/tests/admonitions.html @@ -0,0 +1,106 @@ + + + + + +Admonitions tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Admonitions tests

+

Empty content

+
Title Only
+

Empty fragment content

+
Title Only
+

Large font icon

+ +
💡Did you know...

content

+
ℹ️Did you know...

content

+

Large svg icon

+ +
Did you know...

content

+
Did you know...

content

+

Indented admonitions

+

See admonition title v2 compat syntax bug: https://github.com/facebook/docusaurus/issues/9507

+
    +
  1. +

    Item 1

    +
    Important Considerations

    For better experience, try to keep the upgrade experience smooth.

    +
  2. +
+
    +
  • +

    Scale-up cluster

    +
    Warning

    Scaling up a cluster may cause several minutes of downtime. Please exercise caution.

    +
  • +
+

Quoted admonitions

+
+
There be dragons

This is the admonition content

+
+
There be dragons

This is the admonition content

+
+
+

Official admonitions

+

Admonitions that are officially documented

+
note

note

+
info

info

+
tip

tip

+
warning

warning

+
danger

danger

+

Legacy admonitions

+
secondary

secondary

+
important

important

+
success

success

+
caution

caution

+ + \ No newline at end of file diff --git a/tests/docs/tests/admonitions.html.html b/tests/docs/tests/admonitions.html.html new file mode 100644 index 0000000000..acba3d8be1 --- /dev/null +++ b/tests/docs/tests/admonitions.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/ascii/folder/æøå.html b/tests/docs/tests/ascii/folder/æøå.html new file mode 100644 index 0000000000..0e41d8a7f6 --- /dev/null +++ b/tests/docs/tests/ascii/folder/æøå.html @@ -0,0 +1,61 @@ + + + + + +æøå | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/ascii/folder/æøå.html.html b/tests/docs/tests/ascii/folder/æøå.html.html new file mode 100644 index 0000000000..d3c1f92d01 --- /dev/null +++ b/tests/docs/tests/ascii/folder/æøå.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/ascii/æøå.html b/tests/docs/tests/ascii/æøå.html new file mode 100644 index 0000000000..393711d00b --- /dev/null +++ b/tests/docs/tests/ascii/æøå.html @@ -0,0 +1,61 @@ + + + + + +index | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/ascii/æøå.html.html b/tests/docs/tests/ascii/æøå.html.html new file mode 100644 index 0000000000..9db7efff7d --- /dev/null +++ b/tests/docs/tests/ascii/æøå.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links.html b/tests/docs/tests/category-links.html new file mode 100644 index 0000000000..93c7fa9c4b --- /dev/null +++ b/tests/docs/tests/category-links.html @@ -0,0 +1,62 @@ + + + + + +Readme | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links.html.html b/tests/docs/tests/category-links.html.html new file mode 100644 index 0000000000..0614b2247a --- /dev/null +++ b/tests/docs/tests/category-links.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/custom-index-convention/intro.html b/tests/docs/tests/category-links/custom-index-convention/intro.html new file mode 100644 index 0000000000..083d8c7683 --- /dev/null +++ b/tests/docs/tests/category-links/custom-index-convention/intro.html @@ -0,0 +1,62 @@ + + + + + +Introduction | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/custom-index-convention/intro.html.html b/tests/docs/tests/category-links/custom-index-convention/intro.html.html new file mode 100644 index 0000000000..f190edf722 --- /dev/null +++ b/tests/docs/tests/category-links/custom-index-convention/intro.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/custom-index-convention/sample-doc.html b/tests/docs/tests/category-links/custom-index-convention/sample-doc.html new file mode 100644 index 0000000000..2c131c4667 --- /dev/null +++ b/tests/docs/tests/category-links/custom-index-convention/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/custom-index-convention/sample-doc.html.html b/tests/docs/tests/category-links/custom-index-convention/sample-doc.html.html new file mode 100644 index 0000000000..108200dc5c --- /dev/null +++ b/tests/docs/tests/category-links/custom-index-convention/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-index-doc.html b/tests/docs/tests/category-links/no-index-doc.html new file mode 100644 index 0000000000..9affca79e1 --- /dev/null +++ b/tests/docs/tests/category-links/no-index-doc.html @@ -0,0 +1,62 @@ + + + + + +Index | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-index-doc.html.html b/tests/docs/tests/category-links/no-index-doc.html.html new file mode 100644 index 0000000000..4065422500 --- /dev/null +++ b/tests/docs/tests/category-links/no-index-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-index-doc/sample-doc.html b/tests/docs/tests/category-links/no-index-doc/sample-doc.html new file mode 100644 index 0000000000..cdac433e98 --- /dev/null +++ b/tests/docs/tests/category-links/no-index-doc/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-index-doc/sample-doc.html.html b/tests/docs/tests/category-links/no-index-doc/sample-doc.html.html new file mode 100644 index 0000000000..6298b2ee6d --- /dev/null +++ b/tests/docs/tests/category-links/no-index-doc/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-subdoc.html b/tests/docs/tests/category-links/no-subdoc.html new file mode 100644 index 0000000000..0a5ae93901 --- /dev/null +++ b/tests/docs/tests/category-links/no-subdoc.html @@ -0,0 +1,62 @@ + + + + + +No sub-docs | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/no-subdoc.html.html b/tests/docs/tests/category-links/no-subdoc.html.html new file mode 100644 index 0000000000..0c9b90c7bc --- /dev/null +++ b/tests/docs/tests/category-links/no-subdoc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/regular-category/sample-doc.html b/tests/docs/tests/category-links/regular-category/sample-doc.html new file mode 100644 index 0000000000..c952c0bc66 --- /dev/null +++ b/tests/docs/tests/category-links/regular-category/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/regular-category/sample-doc.html.html b/tests/docs/tests/category-links/regular-category/sample-doc.html.html new file mode 100644 index 0000000000..f8036d64fc --- /dev/null +++ b/tests/docs/tests/category-links/regular-category/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-category-name-doc.html b/tests/docs/tests/category-links/with-category-name-doc.html new file mode 100644 index 0000000000..d8324c9172 --- /dev/null +++ b/tests/docs/tests/category-links/with-category-name-doc.html @@ -0,0 +1,68 @@ + + + + + +Category with a doc of category's name | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Category with a doc of category's name

+

You should be able to click on the category and browse this <categoryName>/<categoryName>.md doc

+

Intro

+

Some intro text

+
tip

It is also possible to render the card items for that category thanks to MDX:

+

Category content

+ +
+ + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-category-name-doc.html.html b/tests/docs/tests/category-links/with-category-name-doc.html.html new file mode 100644 index 0000000000..c179374ca4 --- /dev/null +++ b/tests/docs/tests/category-links/with-category-name-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html b/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html new file mode 100644 index 0000000000..bc7e3314b5 --- /dev/null +++ b/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html.html b/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html.html new file mode 100644 index 0000000000..490efb02ca --- /dev/null +++ b/tests/docs/tests/category-links/with-category-name-doc/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-index-doc.html b/tests/docs/tests/category-links/with-index-doc.html new file mode 100644 index 0000000000..ce92898f0a --- /dev/null +++ b/tests/docs/tests/category-links/with-index-doc.html @@ -0,0 +1,62 @@ + + + + + +Category with index.md doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-index-doc.html.html b/tests/docs/tests/category-links/with-index-doc.html.html new file mode 100644 index 0000000000..374a8d7df4 --- /dev/null +++ b/tests/docs/tests/category-links/with-index-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-index-doc/sample-doc.html b/tests/docs/tests/category-links/with-index-doc/sample-doc.html new file mode 100644 index 0000000000..62ddc8ac7f --- /dev/null +++ b/tests/docs/tests/category-links/with-index-doc/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-index-doc/sample-doc.html.html b/tests/docs/tests/category-links/with-index-doc/sample-doc.html.html new file mode 100644 index 0000000000..ac54ceace8 --- /dev/null +++ b/tests/docs/tests/category-links/with-index-doc/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-readme-doc.html b/tests/docs/tests/category-links/with-readme-doc.html new file mode 100644 index 0000000000..ca7d9d4936 --- /dev/null +++ b/tests/docs/tests/category-links/with-readme-doc.html @@ -0,0 +1,62 @@ + + + + + +Category with readme.md doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-readme-doc.html.html b/tests/docs/tests/category-links/with-readme-doc.html.html new file mode 100644 index 0000000000..d83c85e972 --- /dev/null +++ b/tests/docs/tests/category-links/with-readme-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-readme-doc/sample-doc.html b/tests/docs/tests/category-links/with-readme-doc/sample-doc.html new file mode 100644 index 0000000000..23d8b1ac08 --- /dev/null +++ b/tests/docs/tests/category-links/with-readme-doc/sample-doc.html @@ -0,0 +1,62 @@ + + + + + +Sample doc | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/category-links/with-readme-doc/sample-doc.html.html b/tests/docs/tests/category-links/with-readme-doc/sample-doc.html.html new file mode 100644 index 0000000000..a3181ac10c --- /dev/null +++ b/tests/docs/tests/category-links/with-readme-doc/sample-doc.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props.html b/tests/docs/tests/custom-props.html new file mode 100644 index 0000000000..e2094252e5 --- /dev/null +++ b/tests/docs/tests/custom-props.html @@ -0,0 +1,64 @@ + + + + + +Custom Props | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props.html.html b/tests/docs/tests/custom-props.html.html new file mode 100644 index 0000000000..60bc88726f --- /dev/null +++ b/tests/docs/tests/custom-props.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props/doc-with-custom-props.html b/tests/docs/tests/custom-props/doc-with-custom-props.html new file mode 100644 index 0000000000..a0f27f7cc7 --- /dev/null +++ b/tests/docs/tests/custom-props/doc-with-custom-props.html @@ -0,0 +1,62 @@ + + + + + +Doc with Custom Props | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props/doc-with-custom-props.html.html b/tests/docs/tests/custom-props/doc-with-custom-props.html.html new file mode 100644 index 0000000000..232d8fc8db --- /dev/null +++ b/tests/docs/tests/custom-props/doc-with-custom-props.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props/doc-without-custom-props.html b/tests/docs/tests/custom-props/doc-without-custom-props.html new file mode 100644 index 0000000000..b9e6fb8eb2 --- /dev/null +++ b/tests/docs/tests/custom-props/doc-without-custom-props.html @@ -0,0 +1,62 @@ + + + + + +Doc Without Custom Props | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/custom-props/doc-without-custom-props.html.html b/tests/docs/tests/custom-props/doc-without-custom-props.html.html new file mode 100644 index 0000000000..bb08b9c34f --- /dev/null +++ b/tests/docs/tests/custom-props/doc-without-custom-props.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/img-tests.html b/tests/docs/tests/img-tests.html new file mode 100644 index 0000000000..ba898d19b0 --- /dev/null +++ b/tests/docs/tests/img-tests.html @@ -0,0 +1,71 @@ + + + + + +Image tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/img-tests.html.html b/tests/docs/tests/img-tests.html.html new file mode 100644 index 0000000000..9383434125 --- /dev/null +++ b/tests/docs/tests/img-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/links/broken-anchors-tests.html b/tests/docs/tests/links/broken-anchors-tests.html new file mode 100644 index 0000000000..eb331521fc --- /dev/null +++ b/tests/docs/tests/links/broken-anchors-tests.html @@ -0,0 +1,65 @@ + + + + + +Broken Anchors tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/links/broken-anchors-tests.html.html b/tests/docs/tests/links/broken-anchors-tests.html.html new file mode 100644 index 0000000000..e1647e50c8 --- /dev/null +++ b/tests/docs/tests/links/broken-anchors-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/toc-partials.html b/tests/docs/tests/toc-partials.html new file mode 100644 index 0000000000..ce6ce2c693 --- /dev/null +++ b/tests/docs/tests/toc-partials.html @@ -0,0 +1,109 @@ + + + + + +TOC partial test | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

TOC partial test

+

This page tests that MDX-imported content appears correctly in the table-of-contents

+

See also:

+ +
+

The table of contents should include headings of this partial:

+

Partial

+

Partial intro

+

Partial Sub Heading 1

+

Partial Sub Heading 1 content

+

Partial Sub Sub Heading 1

+

Partial Sub Sub Heading 1 content

+

Partial Sub Heading 2

+

Partial Sub Heading 2 content

+

Partial Sub Sub Heading 2

+

Partial Sub Sub Heading 2 content

+
+

We can import the same partial using a different name and it still works:

+ +

Partial

+

Partial intro

+

Partial Sub Heading 1

+

Partial Sub Heading 1 content

+

Partial Sub Sub Heading 1

+

Partial Sub Sub Heading 1 content

+

Partial Sub Heading 2

+

Partial Sub Heading 2 content

+

Partial Sub Sub Heading 2

+

Partial Sub Sub Heading 2 content

+
+

We can import a partial and not use it, the TOC remains unaffected:

+ +
+ +

It also works for partials importing other partials

+

1st level partial

+

I'm 1 level deep.

+

2nd level partial

+

I'm 2 levels deep.

+
+

And we can even use the same partial twice!

+

(although it's useless and not particularly recommended because headings will have the same ids)

+

1st level partial

+

I'm 1 level deep.

+

2nd level partial

+

I'm 2 levels deep.

+ + \ No newline at end of file diff --git a/tests/docs/tests/toc-partials.html.html b/tests/docs/tests/toc-partials.html.html new file mode 100644 index 0000000000..57a1d83d1f --- /dev/null +++ b/tests/docs/tests/toc-partials.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility.html b/tests/docs/tests/visibility.html new file mode 100644 index 0000000000..b8384a1167 --- /dev/null +++ b/tests/docs/tests/visibility.html @@ -0,0 +1,82 @@ + + + + + +Visibility | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/tests/docs/tests/visibility.html.html b/tests/docs/tests/visibility.html.html new file mode 100644 index 0000000000..13748a2cd7 --- /dev/null +++ b/tests/docs/tests/visibility.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/force-unlisted.html b/tests/docs/tests/visibility/force-unlisted.html new file mode 100644 index 0000000000..7f4da126e5 --- /dev/null +++ b/tests/docs/tests/visibility/force-unlisted.html @@ -0,0 +1,63 @@ + + + + + +force_unlisted_parseFrontMatter_test | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

force_unlisted_parseFrontMatter_test

+

This doc is hidden despite unlisted: false

+

We use parseFrontMatter to force it to true thanks to force_unlisted_parseFrontMatter_test: true

+ + \ No newline at end of file diff --git a/tests/docs/tests/visibility/force-unlisted.html.html b/tests/docs/tests/visibility/force-unlisted.html.html new file mode 100644 index 0000000000..e661d479d4 --- /dev/null +++ b/tests/docs/tests/visibility/force-unlisted.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html new file mode 100644 index 0000000000..fcd2a1d793 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html @@ -0,0 +1,64 @@ + + + + + +Only Unlisteds - Subcategory index unlisted | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html.html b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html.html new file mode 100644 index 0000000000..cd600a62a5 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html new file mode 100644 index 0000000000..de5df7fbf9 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html @@ -0,0 +1,62 @@ + + + + + +Only Unlisteds - Unlisted 3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html.html b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html.html new file mode 100644 index 0000000000..081f428da0 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted-subcategory/unlisted3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted1.html b/tests/docs/tests/visibility/only-unlisteds/unlisted1.html new file mode 100644 index 0000000000..accdd5cf5a --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted1.html @@ -0,0 +1,62 @@ + + + + + +Only Unlisteds - Unlisted 1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted1.html.html b/tests/docs/tests/visibility/only-unlisteds/unlisted1.html.html new file mode 100644 index 0000000000..ce8ca4ddc4 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted2.html b/tests/docs/tests/visibility/only-unlisteds/unlisted2.html new file mode 100644 index 0000000000..4f380b2347 --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted2.html @@ -0,0 +1,62 @@ + + + + + +Only Unlisteds - Unlisted 2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/only-unlisteds/unlisted2.html.html b/tests/docs/tests/visibility/only-unlisteds/unlisted2.html.html new file mode 100644 index 0000000000..affcff692b --- /dev/null +++ b/tests/docs/tests/visibility/only-unlisteds/unlisted2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html b/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html new file mode 100644 index 0000000000..fa9afc1536 --- /dev/null +++ b/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html @@ -0,0 +1,62 @@ + + + + + +Some Drafts - Listed 1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html.html b/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html.html new file mode 100644 index 0000000000..535835e142 --- /dev/null +++ b/tests/docs/tests/visibility/some-drafts/draft-subcategory/listed1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html new file mode 100644 index 0000000000..0afe0df515 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html @@ -0,0 +1,64 @@ + + + + + +Some Unlisteds - Subcategory index unlisted | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html.html new file mode 100644 index 0000000000..47dd559d85 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html new file mode 100644 index 0000000000..efde103491 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html @@ -0,0 +1,62 @@ + + + + + +Some Unlisteds - Listed 1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html.html new file mode 100644 index 0000000000..1c224b59b5 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/listed1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html new file mode 100644 index 0000000000..c75e417d55 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html @@ -0,0 +1,62 @@ + + + + + +Some Unlisteds - Unlisted 3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html.html b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html.html new file mode 100644 index 0000000000..8d88493ecf --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted-subcategory/unlisted3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted1.html b/tests/docs/tests/visibility/some-unlisteds/unlisted1.html new file mode 100644 index 0000000000..bc12918f97 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted1.html @@ -0,0 +1,62 @@ + + + + + +Some Unlisteds - Unlisted 1 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted1.html.html b/tests/docs/tests/visibility/some-unlisteds/unlisted1.html.html new file mode 100644 index 0000000000..9fef879225 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted1.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted2.html b/tests/docs/tests/visibility/some-unlisteds/unlisted2.html new file mode 100644 index 0000000000..7453e3990a --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted2.html @@ -0,0 +1,62 @@ + + + + + +Some Unlisteds - Unlisted 2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/tests/visibility/some-unlisteds/unlisted2.html.html b/tests/docs/tests/visibility/some-unlisteds/unlisted2.html.html new file mode 100644 index 0000000000..1fb98e1401 --- /dev/null +++ b/tests/docs/tests/visibility/some-unlisteds/unlisted2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-2.html b/tests/docs/toc/toc-2-2.html new file mode 100644 index 0000000000..a5909af3bd --- /dev/null +++ b/tests/docs/toc/toc-2-2.html @@ -0,0 +1,94 @@ + + + + + +toc-2-2 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-2-2

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-2.html.html b/tests/docs/toc/toc-2-2.html.html new file mode 100644 index 0000000000..4655459c0a --- /dev/null +++ b/tests/docs/toc/toc-2-2.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-3.html b/tests/docs/toc/toc-2-3.html new file mode 100644 index 0000000000..b81f2ef115 --- /dev/null +++ b/tests/docs/toc/toc-2-3.html @@ -0,0 +1,94 @@ + + + + + +toc-2-3 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-2-3

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-3.html.html b/tests/docs/toc/toc-2-3.html.html new file mode 100644 index 0000000000..5ba6f23c60 --- /dev/null +++ b/tests/docs/toc/toc-2-3.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-4.html b/tests/docs/toc/toc-2-4.html new file mode 100644 index 0000000000..f9321a4da0 --- /dev/null +++ b/tests/docs/toc/toc-2-4.html @@ -0,0 +1,94 @@ + + + + + +toc-2-4 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-2-4

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-4.html.html b/tests/docs/toc/toc-2-4.html.html new file mode 100644 index 0000000000..8a120c134c --- /dev/null +++ b/tests/docs/toc/toc-2-4.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-5.html b/tests/docs/toc/toc-2-5.html new file mode 100644 index 0000000000..186835722a --- /dev/null +++ b/tests/docs/toc/toc-2-5.html @@ -0,0 +1,94 @@ + + + + + +toc-2-5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-2-5

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-2-5.html.html b/tests/docs/toc/toc-2-5.html.html new file mode 100644 index 0000000000..1b51a670cf --- /dev/null +++ b/tests/docs/toc/toc-2-5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-3-5.html b/tests/docs/toc/toc-3-5.html new file mode 100644 index 0000000000..fbef7d2286 --- /dev/null +++ b/tests/docs/toc/toc-3-5.html @@ -0,0 +1,94 @@ + + + + + +toc-3-5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-3-5

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-3-5.html.html b/tests/docs/toc/toc-3-5.html.html new file mode 100644 index 0000000000..c5c98d0cfe --- /dev/null +++ b/tests/docs/toc/toc-3-5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-3-_.html b/tests/docs/toc/toc-3-_.html new file mode 100644 index 0000000000..fe879caf3b --- /dev/null +++ b/tests/docs/toc/toc-3-_.html @@ -0,0 +1,94 @@ + + + + + +toc-3-_ | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-3-_

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-3-_.html.html b/tests/docs/toc/toc-3-_.html.html new file mode 100644 index 0000000000..f8372cee13 --- /dev/null +++ b/tests/docs/toc/toc-3-_.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-4-5.html b/tests/docs/toc/toc-4-5.html new file mode 100644 index 0000000000..29bfcab12c --- /dev/null +++ b/tests/docs/toc/toc-4-5.html @@ -0,0 +1,94 @@ + + + + + +toc-4-5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-4-5

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-4-5.html.html b/tests/docs/toc/toc-4-5.html.html new file mode 100644 index 0000000000..e4c6617cc9 --- /dev/null +++ b/tests/docs/toc/toc-4-5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-5-5.html b/tests/docs/toc/toc-5-5.html new file mode 100644 index 0000000000..a906d26d76 --- /dev/null +++ b/tests/docs/toc/toc-5-5.html @@ -0,0 +1,94 @@ + + + + + +toc-5-5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-5-5

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-5-5.html.html b/tests/docs/toc/toc-5-5.html.html new file mode 100644 index 0000000000..f09045005b --- /dev/null +++ b/tests/docs/toc/toc-5-5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-_-5.html b/tests/docs/toc/toc-_-5.html new file mode 100644 index 0000000000..5c6dee3cff --- /dev/null +++ b/tests/docs/toc/toc-_-5.html @@ -0,0 +1,94 @@ + + + + + +toc-_-5 | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-_-5

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-_-5.html.html b/tests/docs/toc/toc-_-5.html.html new file mode 100644 index 0000000000..13ed0d2015 --- /dev/null +++ b/tests/docs/toc/toc-_-5.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-_-_.html b/tests/docs/toc/toc-_-_.html new file mode 100644 index 0000000000..3f5c3732b2 --- /dev/null +++ b/tests/docs/toc/toc-_-_.html @@ -0,0 +1,94 @@ + + + + + +toc-_-_ | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-_-_

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-_-_.html.html b/tests/docs/toc/toc-_-_.html.html new file mode 100644 index 0000000000..dc0c22d0b2 --- /dev/null +++ b/tests/docs/toc/toc-_-_.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-test-bad.html b/tests/docs/toc/toc-test-bad.html new file mode 100644 index 0000000000..0aa8fe23c0 --- /dev/null +++ b/tests/docs/toc/toc-test-bad.html @@ -0,0 +1,92 @@ + + + + + +toc-test-bad | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

toc-test-bad

Test the TOC behavior of a real-world MD doc with invalid headings

+
+

BAD HEADINGS:

+
lvl 6
+
lvl 5
+

lvl 4

+
lvl 5
+

lvl 4

+

lvl 3

+

lvl 2

+

lvl 1

+
+

GOOD HEADINGS:

+

lvl 2

+

lvl 3

+

lvl 4

+
lvl 5
+
lvl 6
+

lvl 2

+

lvl 3

+

lvl 4

+
lvl 5
+
lvl 6
+
+

INLINE:

+ + + +
+

COLLAPSIBLE:

+ +
http://localhost:3000
+ + \ No newline at end of file diff --git a/tests/docs/toc/toc-test-bad.html.html b/tests/docs/toc/toc-test-bad.html.html new file mode 100644 index 0000000000..685c83266e --- /dev/null +++ b/tests/docs/toc/toc-test-bad.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-test-good.html b/tests/docs/toc/toc-test-good.html new file mode 100644 index 0000000000..a6318d8292 --- /dev/null +++ b/tests/docs/toc/toc-test-good.html @@ -0,0 +1,81 @@ + + + + + +toc-test-good | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/docs/toc/toc-test-good.html.html b/tests/docs/toc/toc-test-good.html.html new file mode 100644 index 0000000000..cb0d0289e3 --- /dev/null +++ b/tests/docs/toc/toc-test-good.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages.html b/tests/pages.html new file mode 100644 index 0000000000..ab5ac0edb2 --- /dev/null +++ b/tests/pages.html @@ -0,0 +1,99 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Page

+

Let's import a MDX partial at ./_pagePartial.md:

+ +

Page partial content

+

This is text coming from a page partial

+
+

Now let's import ../README.md:

+ +

Docusaurus website dogfooding

+

This is where we test edge cases of Docusaurus by using fancy configs, ensuring they all don't fail during a real site build.

+

Eventually, we could move these tests later so another test site? Note there is value to keep seeing the live result of those tests.

+

Fancy things we can test for here:

+
    +
  • Plugin Multi-instance
  • +
  • Webpack configs
  • +
  • _ prefix convention
  • +
  • Huge sidebars impact
  • +
  • Using folders with spaces on purpose
  • +
  • Importing MD docs that are out of content plugin folders as partials (such as this README file!)
  • +
+

Markdown tests

+ +

Other tests

+
+ + \ No newline at end of file diff --git a/tests/pages.html.html b/tests/pages.html.html new file mode 100644 index 0000000000..768f4d748b --- /dev/null +++ b/tests/pages.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/analytics.html b/tests/pages/analytics.html new file mode 100644 index 0000000000..ba41119c68 --- /dev/null +++ b/tests/pages/analytics.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/analytics.html.html b/tests/pages/analytics.html.html new file mode 100644 index 0000000000..4d21f7d4be --- /dev/null +++ b/tests/pages/analytics.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/code-block-tests.html b/tests/pages/code-block-tests.html new file mode 100644 index 0000000000..752599cc5f --- /dev/null +++ b/tests/pages/code-block-tests.html @@ -0,0 +1,178 @@ + + + + + +Code block tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Code block tests

+
legacy test page - MDX v1

This test page is quite outdated: MDX v2 lowercase tags are not substituted anymore in the same way as they were in v1.

+
+
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello, World");
}
}
+

See:

+ +

Code block prism language tests

+

Code block with/without the good prism language case(lower or upper) in additionalLanguages[]

+
php
<?php
$x=15;
$y=30;
$z=$x+$y;
echo "Sum: ",$z;
?>
+
PHP
<?php
$x=15;
$y=30;
$z=$x+$y;
echo "Sum: ",$z;
?>
+
pHp
<?php
$x=15;
$y=30;
$z=$x+$y;
echo "Sum: ",$z;
?>
+

See:

+ +

pre

+

pre > string

+

Multi-line text inside pre will turn into one-liner, but it's okay (https://github.com/mdx-js/mdx/issues/1095)

+
1 2 3
+ +

1 +2 +3

+

pre > string[]

+

1 +2 +3 +

+

pre > element

+
http://localhost:3000
Lol bro
+

pre > element[]

+
Front page
+

Input: a = "abcd", b = "cdabcdab" + +Output: 3 + +Explanation: a after three repetitions become "ab +cdabcdabcd", at which time b is a substring. +

+

pre > code > element

+
Hey bro
+

code

+

code > string

+1 2 3 +link: + title: front page + path: /docs/ +

code > string[]

+

link: + + title: front page + + path: /docs/ +

+

code > element

+
http://localhost:3000
Lol bro
+

code > element[]

+Front page

Input: a = "abcd", b = "cdabcdab"


Output: 3
+Explanation: a after three repetitions become "ab +cdabcdab +cd", at which time b is a substring.


+

CodeBlock

+

CodeBlock > string

+
1 2 3
+
test
link:
title: front page
path: /docs/
+

CodeBlock > string[]

+

link: + + title: front page + + path: /docs/ +

+

CodeBlock > element

+
http://localhost:3000
Lol bro
+

CodeBlock > element[]

+
Front page

Input: a = "abcd", b = "cdabcdab"


Output: 3
+Explanation: a after three repetitions become "ab +cdabcdab +cd", at which time b is a substring.


+

Code blocks with line numbering tests

+
function PageLayout(props) {
return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;
}
+
function PageLayout(props) {
return <Layout title="Awesome Docusaurus page" description="Test Test Test Test Test Test Test Test Test Test Test Test Test Test ">;
}
+
function PageLayout(props) {
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
console.log(
'Test Test Test Test Test Test Test Test Test Test Test Test Test Test ',
);
}
+

Code block wrapping tests

+
mkdir this_is_a_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_string_to_test_code_block_wrapping
echo "this is a long string made up of many separate words that should be broken between words when possible"
curl https://docusaurus.io/tests/pages/code-block-tests
+
echo "hi"
+
echo medium_length_string_will_have_the_option_to_wrap_after_window_resized_while_it_is_hidden
+
import React from 'react';
import Layout from '@theme/Layout';

export default function MyReactPage() {
return (
<Layout>
<h1>My React page</h1>
<p>
This is a React page. Let's make this sentence bit long. Some more words
to make sure... Some more words to make sure... Some more words to make
sure...
</p>
</Layout>
);
}
+

Magic comments tests

+
lua_sum.lua
function sum(n)
local result = 0
for i = 1, n do
result = result + i
end
print(result)
end
+
haskell.hs
stringLength :: String -> Int
stringLength [] = 0
stringLength (x:xs) = 1 + stringLength xs
+
sum_webAssembly.wasm
(module
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
(export "add" (func $add)))
+
sql_query.sql
SELECT *
FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE country = 'USA'
)
+
matlab.m
function result = times2(n)
result = n * 2;
end

x = 10;
y = times2(x);
+
latex.tex
\begin{document}
\section{Triangles}
\subsection{Pythagoras' Theorem}
Pythagoras's theorem is:
\begin{equation}
c^2 = a^2 + b^2
\end{equation}
\end{document}
+
vba.vb
Function Factorial(ByVal n As Long) As Long
If n < 0 Then
Err.Raise 5 ' Invalid argument
End If
Factorial = 1 ' return value
Dim i As Long
For i = 2 To n
Factorial = Factorial * i
Next
End Function
+
vbnet.vb
Dim languages As New HashSet(Of String) From {
"C#",
"Visual Basic",
"F#",
"PowerShell",
"TypeScript"
}
+
cmd.bat
@echo off
setlocal
ipconfig
echo Docusaurus is awesome
netstat
+
fortran.f90
program hello
implicit none
print *, "Hello, World!"
end program hello
+
cobol.cob
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello, World!".
END PROGRAM HELLO.
+
fsharp.fsx
[<EntryPoint>]
let main _ =
printfn "Hello, World!"
0
+

HTML - script + style highlighting

+

See https://github.com/facebook/docusaurus/issues/9517

+
<html lang="en">
<head>
<script>
const name = 'Formidable';
console.log(name);
</script>
<style>
.some-class {
border: solid red thick;
}
</style>
</head>
</html>
+

Empty code blocks edge cases

+

Empty inline code block: ``

+

Single space inline code block:

+

Empty code block

+ +
+

Empty 1 line code block

+
+

Empty 2 line code block

+
+

Empty live code block

+
Live Editor

+
Result
Loading...
+ + \ No newline at end of file diff --git a/tests/pages/code-block-tests.html.html b/tests/pages/code-block-tests.html.html new file mode 100644 index 0000000000..a368a5f470 --- /dev/null +++ b/tests/pages/code-block-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/crashTest.html b/tests/pages/crashTest.html new file mode 100644 index 0000000000..9594b24370 --- /dev/null +++ b/tests/pages/crashTest.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/crashTest.html.html b/tests/pages/crashTest.html.html new file mode 100644 index 0000000000..6a36e4a02d --- /dev/null +++ b/tests/pages/crashTest.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/diagrams.html b/tests/pages/diagrams.html new file mode 100644 index 0000000000..838bb0efb7 --- /dev/null +++ b/tests/pages/diagrams.html @@ -0,0 +1,98 @@ + + + + + +Diagram Examples | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Diagram Examples

+

Invalid Diagrams

+

Those errors should not crash the whole page

+

Invalid type

+ +

Invalid content

+ +

Sequence Diagram

+ +

Sequence Diagram (forest theme directive)

+

It is possible to override default config locally with Mermaid text directives such as:

+
%%{init: { "theme": "forest" } }%%
+ +

Gantt Chart

+ +

Flow Chart

+ +

With Markdown:

+ +

Class Diagram

+ +

State Diagram

+ +

Entity Relationship Diagram

+ +

User Journey

+ +
note

If there's too much space above it's due to a Mermaid bug

+

Pie Chart

+ +

Requirement Diagram

+ +

Gitgraph (Git) Diagram

+ +

Mermaid in tabs

+ +

The following mermaid diagram is shown:

+

Mindmap

+ +

Quadrant Chart

+
+ + \ No newline at end of file diff --git a/tests/pages/diagrams.html.html b/tests/pages/diagrams.html.html new file mode 100644 index 0000000000..9f87a90908 --- /dev/null +++ b/tests/pages/diagrams.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/embeds.html b/tests/pages/embeds.html new file mode 100644 index 0000000000..db7c6ec153 --- /dev/null +++ b/tests/pages/embeds.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Test Embeds

/?docusaurus-theme=light
/?docusaurus-theme=dark
/?docusaurus-theme=unexpected-value
/
https://docusaurus.io/
https://tutorial.docusaurus.io/
+ + \ No newline at end of file diff --git a/tests/pages/embeds.html.html b/tests/pages/embeds.html.html new file mode 100644 index 0000000000..f2373396bc --- /dev/null +++ b/tests/pages/embeds.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/error-boundary-tests.html b/tests/pages/error-boundary-tests.html new file mode 100644 index 0000000000..be291ab8dc --- /dev/null +++ b/tests/pages/error-boundary-tests.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/error-boundary-tests.html.html b/tests/pages/error-boundary-tests.html.html new file mode 100644 index 0000000000..8ca5c2b4fd --- /dev/null +++ b/tests/pages/error-boundary-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/head-metadata.html b/tests/pages/head-metadata.html new file mode 100644 index 0000000000..f068409301 --- /dev/null +++ b/tests/pages/head-metadata.html @@ -0,0 +1,61 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Head Metadata tests

+

This page declares the following custom head metadata:

+
<head>
<meta name="generator" value="custom generator name!" />
<meta name="viewport" content="initial-scale=1, viewport-fit=cover" />
<meta name="robots" content="noindex, nofollow, my-extra-directive" />
</head>
+
+ + \ No newline at end of file diff --git a/tests/pages/head-metadata.html.html b/tests/pages/head-metadata.html.html new file mode 100644 index 0000000000..811fa7ef6c --- /dev/null +++ b/tests/pages/head-metadata.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/hydration-tests.html b/tests/pages/hydration-tests.html new file mode 100644 index 0000000000..f3a49b7436 --- /dev/null +++ b/tests/pages/hydration-tests.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/hydration-tests.html.html b/tests/pages/hydration-tests.html.html new file mode 100644 index 0000000000..85c1599310 --- /dev/null +++ b/tests/pages/hydration-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/layout-no-children.html b/tests/pages/layout-no-children.html new file mode 100644 index 0000000000..5e2fd1b0d3 --- /dev/null +++ b/tests/pages/layout-no-children.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/layout-no-children.html.html b/tests/pages/layout-no-children.html.html new file mode 100644 index 0000000000..de19846964 --- /dev/null +++ b/tests/pages/layout-no-children.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/link-tests.html b/tests/pages/link-tests.html new file mode 100644 index 0000000000..7b812d16b5 --- /dev/null +++ b/tests/pages/link-tests.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/link-tests.html.html b/tests/pages/link-tests.html.html new file mode 100644 index 0000000000..f816c247fe --- /dev/null +++ b/tests/pages/link-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/markdown-tests-md.html b/tests/pages/markdown-tests-md.html new file mode 100644 index 0000000000..0f49fa27ca --- /dev/null +++ b/tests/pages/markdown-tests-md.html @@ -0,0 +1,136 @@ + + + + + +Markdown Page tests title | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Markdown .md tests

+

This file should be interpreted in a more CommonMark compliant way

+

SEO

+
<head>
<title>HEAD Markdown Page tests title</title>
<meta name="keywords" content="cooking, blog"/>
</head>
+ + HEAD Markdown Page tests title + + +
danger

TODO unsupported (yet), see issue

+

Comment

+

Html comment:

+

Html comment multi-line:

+

MDX comment: {/* comment */}

+

MDX comment multi-line:

+

{/* +comment +*/}

+

JSX syntax

+

import BrowserWindow from '@site/src/components/BrowserWindow';

+ +

BrowserWindow content

+
+

export const answer = 42;

+

Test {xyz}

+

Admonition

+

Admonitions still work

+
title

note

+

Details

+
MD Summary
+ +

Our custom Details/Summary also works in CommonMark mode

+
+

Tab

+ + + This is an apple 🍎 + + + This is an orange 🍊 + + + This is a banana 🍌 + + +
danger

TODO unsupported (yet), see issue

+

Code block test

+
Title
function Clock(props) {
const [date, setDate] = useState(new Date());
useEffect(() => {
var timerID = setInterval(() => tick(), 1000);

return function cleanup() {
clearInterval(timerID);
};
});

function tick() {
setDate(new Date());
}

return (
<div>
<h2>It is {date.toLocaleTimeString()}.</h2>
{/* prettier-ignore */}
long long long long long long long long long long long long line
{/* prettier-ignore */}
</div>
);
}
+
function Clock(props) {
const [date, setDate] = useState(new Date());
useEffect(() => {
var timerID = setInterval(() => tick(), 1000);

return function cleanup() {
clearInterval(timerID);
};
});

function tick() {
setDate(new Date());
}

return (
<div>
<h2>It is {date.toLocaleTimeString()}.</h2>
</div>
);
}
+
danger

TODO unsupported (yet), see issue

+

Mermaid

+ +

Heading Id

+

Custom heading syntax {#custom-heading-id} still works

+
+

HTML

+

Styling

+

blue span

+

green p

+

+
+ lime red +
+
+

Embeds

+

Closed image tag:

+ +
+

Unclosed image tag:

+ +
+

Iframe

+ +
+

Security

+
<p>
When pressing this button, no alert should be printed
<button onClick="alert('unsafe');">Click me</button>
</p>
+

+ When pressing this button, no alert should be printed + +

+ + \ No newline at end of file diff --git a/tests/pages/markdown-tests-md.html.html b/tests/pages/markdown-tests-md.html.html new file mode 100644 index 0000000000..87186ae23d --- /dev/null +++ b/tests/pages/markdown-tests-md.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/markdown-tests-mdx.html b/tests/pages/markdown-tests-mdx.html new file mode 100644 index 0000000000..7886772b54 --- /dev/null +++ b/tests/pages/markdown-tests-mdx.html @@ -0,0 +1,272 @@ + + + + + +Markdown Page tests title | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Markdown .mdx tests

+

This is a page generated from Markdown to illustrate the Markdown page feature and test some edge cases.

+
info

Useful information.

+
Live Editor
function Button() {
+  return (
+    <button type="button" onClick={() => alert('hey')}>
+      Click me!
+    </button>
+  );
+}
+
Result
Loading...
+

Using absolute path

+

+

Tab

+ + +

This is an apple 🍎

+

Comments

+

Html comment:

+

Html comment multi-line:

+

MDX comment:

+

MDX comment multi-line:

+ +

Import code block from source code file

+ + +

Let's say you have a React component.

+

You can import and use it in MDX:

+
myMarkdownFile.mdx
import MyComponent from './myComponent';

<MyComponent />;
+
http://localhost:3000

MyComponent rendered !

bool=false

+

But you can also display its source code directly in MDX, thanks to Webpack raw-loader

+
myMarkdownFile.mdx
import CodeBlock from '@theme/CodeBlock';

import MyComponentSource from '!!raw-loader!./myComponent';

<CodeBlock className="language-jsx">{MyComponentSource}</CodeBlock>;
+ + +
http://localhost:3000
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

import React, {useState} from 'react';

export default function MyComponent() {
const [bool, setBool] = useState(false);
return (
<div>
<p>MyComponent rendered !</p>
<p>bool={bool ? 'true' : 'false'}</p>
<p>
<button onClick={() => setBool((b) => !b)}>toggle bool</button>
</p>
</div>
);
}
+

Test

+
Live Editor
function Demo() {
+  useEffect(() => console.log('mount'), []);
+  return null;
+}
+
Result
Loading...
+

Code block test

+
Title
function Clock(props) {
const [date, setDate] = useState(new Date());
useEffect(() => {
var timerID = setInterval(() => tick(), 1000);

return function cleanup() {
clearInterval(timerID);
};
});

function tick() {
setDate(new Date());
}

return (
<div>
<h2>It is {date.toLocaleTimeString()}.</h2>
{/* prettier-ignore */}
long long long long long long long long long long long long line
{/* prettier-ignore */}
</div>
);
}
+
Live Editor
function Clock(props) {
+  const [date, setDate] = useState(new Date());
+  useEffect(() => {
+    var timerID = setInterval(() => tick(), 1000);
+
+    return function cleanup() {
+      clearInterval(timerID);
+    };
+  });
+
+  function tick() {
+    setDate(new Date());
+  }
+
+  return (
+    <div>
+      <h2>It is {date.toLocaleTimeString()}.</h2>
+    </div>
+  );
+}
+
Result
Loading...
+

Mermaid

+ +

Custom heading ID

+

Weird heading

+

Weird heading

+

Weird heading

+

Weird heading

+

Weird heading

+

Pipe

+

Code tag + double pipe: ||

+

Code tag + double pipe: ||

+

Images edge cases

+

+

+

+

Details

+
Details

Details without a summary

+ +
My Headline
Some Text
+
Details
Some Text
+

This is a fragment:

+Hello +

It should work :)

+

Task list

+

A list:

+
    +
  • Simple
  • +
  • Tasks
  • +
  • Has simple
  • +
  • Styles
  • +
+

Another list:

+
    +
  • Nested +
      +
    • Tasks
    • +
    • Should be well-formatted
    • +
    +
  • +
  • No matter
  • +
  • How weird
  • +
+

Can be arbitrarily nested:

+
    +
  • Level +
      +
    • Task
    • +
    • Task
    • +
    • Another level +
        +
      • Task
      • +
      • Task
      • +
      • Deeper +
          +
        • Task
        • +
        • Task
        • +
        +
      • +
      • Task
      • +
      • Task
      • +
      +
    • +
    +
  • +
  • Task
  • +
+

Emojis

+

Emojis in this text will be replaced with remark-emoji: 🐶 👍

+

Admonitions

+
Interpolated title with a (old syntax)

Admonition body

+
Interpolated title with a (directive label syntax)

Admonition body

+
important

Admonition alias :::important should have Important title

+
title

Some content with Markdown syntax.

nested Title
very nested Title

Some content with Markdown syntax.

Some content with Markdown syntax.

hey

+
Use tabs in admonitions
Admonition nested

test

Admonition in tab

test

+

Linking

+

This is a test page to see if Docusaurus Markdown features are working properly

+

Linking to assets

+

See #3337

+ +

Linking to non-SPA page hosted within website

+

See #3309

+ + +

See #9758, these external urls should not be reported by the broken links checker:

+ + + +

These links are broken (try to single click on them) and should be reported. We need to explicitly disable the broken link checker for them:

+ +

Linking to JSON

+
+ + \ No newline at end of file diff --git a/tests/pages/markdown-tests-mdx.html.html b/tests/pages/markdown-tests-mdx.html.html new file mode 100644 index 0000000000..49e19dcd4c --- /dev/null +++ b/tests/pages/markdown-tests-mdx.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/navbar-dropdown-tests.html b/tests/pages/navbar-dropdown-tests.html new file mode 100644 index 0000000000..7adc5f1451 --- /dev/null +++ b/tests/pages/navbar-dropdown-tests.html @@ -0,0 +1,65 @@ + + + + + +navbar-dropdown-tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

navbar-dropdown-tests

+
+ + \ No newline at end of file diff --git a/tests/pages/navbar-dropdown-tests.html.html b/tests/pages/navbar-dropdown-tests.html.html new file mode 100644 index 0000000000..21856e3f11 --- /dev/null +++ b/tests/pages/navbar-dropdown-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/page-toc-tests.html b/tests/pages/page-toc-tests.html new file mode 100644 index 0000000000..3df55424df --- /dev/null +++ b/tests/pages/page-toc-tests.html @@ -0,0 +1,91 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

title

+

some text

+

section 1

+

some text

+

subsection 1-1

+

some text

+

subsection 1-1-1

+

some text

+
subsection 1-1-1-1
+

some text

+
subsection 1-1-1-1-1
+

some text

+
subsection 1-1-1-1-2
+

some text

+
subsection 1-1-1-2
+

some text

+

subsection 1-1-2

+

some text

+

subsection 1-2

+

some text

+

subsection 1-3

+

some text

+

section 2

+

some text

+

subsection 2-1

+

some text

+

subsection 2-1

+

some text

+

section 3

+

some text

+

subsection 3-1

+

some text

+

subsection 3-2

+

some text

+ + \ No newline at end of file diff --git a/tests/pages/page-toc-tests.html.html b/tests/pages/page-toc-tests.html.html new file mode 100644 index 0000000000..67bd804e8e --- /dev/null +++ b/tests/pages/page-toc-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/react-18.html b/tests/pages/react-18.html new file mode 100644 index 0000000000..cc1e8b82b0 --- /dev/null +++ b/tests/pages/react-18.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

React 18 tests


Suspense > HeavyComponent


BrowserOnly > Suspense > HeavyComponent


Suspense > BrowserOnly > HeavyComponent

+ + \ No newline at end of file diff --git a/tests/pages/react-18.html.html b/tests/pages/react-18.html.html new file mode 100644 index 0000000000..a969edde4a --- /dev/null +++ b/tests/pages/react-18.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/seo.html b/tests/pages/seo.html new file mode 100644 index 0000000000..597f4f8585 --- /dev/null +++ b/tests/pages/seo.html @@ -0,0 +1,60 @@ + + + + + +custom SEO title | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

SEO tests

+

Using page SEO front matter:

+
title: custom SEO title
description: custom SEO description
keywords: [custom, keywords]
image: ./local-image.png
+ + \ No newline at end of file diff --git a/tests/pages/seo.html.html b/tests/pages/seo.html.html new file mode 100644 index 0000000000..7d2afc18fe --- /dev/null +++ b/tests/pages/seo.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/tabs-tests.html b/tests/pages/tabs-tests.html new file mode 100644 index 0000000000..a9322b5d67 --- /dev/null +++ b/tests/pages/tabs-tests.html @@ -0,0 +1,67 @@ + + + + + +Tabs tests | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Tabs tests

+ +

Tabs with dynamic default value

+

This can cause bugs when default value is different between SSR and client:

+ +
http://localhost:3000
Android content
+

Tabs sync with different heights

+

Use Ctrl + C to copy.

+

Use Ctrl + V to paste.

+

When clicking tabs above, they should stay under cursor and we should adjust the scroll position.

+ + \ No newline at end of file diff --git a/tests/pages/tabs-tests.html.html b/tests/pages/tabs-tests.html.html new file mode 100644 index 0000000000..d59d3cc88b --- /dev/null +++ b/tests/pages/tabs-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/unlisted.html b/tests/pages/unlisted.html new file mode 100644 index 0000000000..cd07f5fb9a --- /dev/null +++ b/tests/pages/unlisted.html @@ -0,0 +1,59 @@ + + + + + +Unlisted page | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Unlisted page

+

This unlisted page should always be directly accessible, but hidden from search engines

+ + \ No newline at end of file diff --git a/tests/pages/unlisted.html.html b/tests/pages/unlisted.html.html new file mode 100644 index 0000000000..1ec2cd81b7 --- /dev/null +++ b/tests/pages/unlisted.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/z-index-tests.html b/tests/pages/z-index-tests.html new file mode 100644 index 0000000000..804e9df83b --- /dev/null +++ b/tests/pages/z-index-tests.html @@ -0,0 +1,58 @@ + + + + + +Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/pages/z-index-tests.html.html b/tests/pages/z-index-tests.html.html new file mode 100644 index 0000000000..3965583b3b --- /dev/null +++ b/tests/pages/z-index-tests.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/versions.html b/versions.html new file mode 100644 index 0000000000..8b30eca781 --- /dev/null +++ b/versions.html @@ -0,0 +1,58 @@ + + + + + +Versions | Docusaurus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Docusaurus documentation versions

Current version (Stable)

Here you can find the documentation for current released version.

Canary 🚧DocumentationRelease Notes

Past versions (Not maintained anymore)

Here you can find documentation for previous versions of Docusaurus.

2.3.1DocumentationRelease Notes
2.2.0DocumentationRelease Notes
2.1.0DocumentationRelease Notes
2.0.1DocumentationRelease Notes

Docusaurus v1 (Legacy)

Here you can find documentation for legacy version of Docusaurus.

1.xDocumentation
+ + \ No newline at end of file diff --git a/versions.html.html b/versions.html.html new file mode 100644 index 0000000000..a6e3f724dc --- /dev/null +++ b/versions.html.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/新控制器空间/图片.png b/新控制器空间/图片.png new file mode 100644 index 0000000000..f458149e3c Binary files /dev/null and b/新控制器空间/图片.png differ